feat(coding-agent): support multiple --append-system-prompt flags (#3171)
This commit is contained in:
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added support for multiple `--append-system-prompt` flags, each value is appended to the system prompt separated by double newlines ([#3169](https://github.com/badlogic/pi-mono/pull/3169) by [@aliou](https://github.com/aliou))
|
||||||
|
|
||||||
## [0.67.1] - 2026-04-13
|
## [0.67.1] - 2026-04-13
|
||||||
|
|
||||||
### Telemetry
|
### Telemetry
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export interface Args {
|
|||||||
model?: string;
|
model?: string;
|
||||||
apiKey?: string;
|
apiKey?: string;
|
||||||
systemPrompt?: string;
|
systemPrompt?: string;
|
||||||
appendSystemPrompt?: string;
|
appendSystemPrompt?: string[];
|
||||||
thinking?: ThinkingLevel;
|
thinking?: ThinkingLevel;
|
||||||
continue?: boolean;
|
continue?: boolean;
|
||||||
resume?: boolean;
|
resume?: boolean;
|
||||||
@@ -88,7 +88,8 @@ export function parseArgs(args: string[]): Args {
|
|||||||
} else if (arg === "--system-prompt" && i + 1 < args.length) {
|
} else if (arg === "--system-prompt" && i + 1 < args.length) {
|
||||||
result.systemPrompt = args[++i];
|
result.systemPrompt = args[++i];
|
||||||
} else if (arg === "--append-system-prompt" && i + 1 < args.length) {
|
} else if (arg === "--append-system-prompt" && i + 1 < args.length) {
|
||||||
result.appendSystemPrompt = args[++i];
|
result.appendSystemPrompt = result.appendSystemPrompt ?? [];
|
||||||
|
result.appendSystemPrompt.push(args[++i]);
|
||||||
} else if (arg === "--no-session") {
|
} else if (arg === "--no-session") {
|
||||||
result.noSession = true;
|
result.noSession = true;
|
||||||
} else if (arg === "--session" && i + 1 < args.length) {
|
} else if (arg === "--session" && i + 1 < args.length) {
|
||||||
@@ -216,7 +217,7 @@ ${chalk.bold("Options:")}
|
|||||||
--model <pattern> Model pattern or ID (supports "provider/id" and optional ":<thinking>")
|
--model <pattern> Model pattern or ID (supports "provider/id" and optional ":<thinking>")
|
||||||
--api-key <key> API key (defaults to env vars)
|
--api-key <key> API key (defaults to env vars)
|
||||||
--system-prompt <text> System prompt (default: coding assistant prompt)
|
--system-prompt <text> System prompt (default: coding assistant prompt)
|
||||||
--append-system-prompt <text> Append text or file contents to the system prompt
|
--append-system-prompt <text> Append text or file contents to the system prompt (can be used multiple times)
|
||||||
--mode <mode> Output mode: text (default), json, or rpc
|
--mode <mode> Output mode: text (default), json, or rpc
|
||||||
--print, -p Non-interactive mode: process prompt and exit
|
--print, -p Non-interactive mode: process prompt and exit
|
||||||
--continue, -c Continue previous session
|
--continue, -c Continue previous session
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ export interface DefaultResourceLoaderOptions {
|
|||||||
noPromptTemplates?: boolean;
|
noPromptTemplates?: boolean;
|
||||||
noThemes?: boolean;
|
noThemes?: boolean;
|
||||||
systemPrompt?: string;
|
systemPrompt?: string;
|
||||||
appendSystemPrompt?: string;
|
appendSystemPrompt?: string[];
|
||||||
extensionsOverride?: (base: LoadExtensionsResult) => LoadExtensionsResult;
|
extensionsOverride?: (base: LoadExtensionsResult) => LoadExtensionsResult;
|
||||||
skillsOverride?: (base: { skills: Skill[]; diagnostics: ResourceDiagnostic[] }) => {
|
skillsOverride?: (base: { skills: Skill[]; diagnostics: ResourceDiagnostic[] }) => {
|
||||||
skills: Skill[];
|
skills: Skill[];
|
||||||
@@ -164,7 +164,7 @@ export class DefaultResourceLoader implements ResourceLoader {
|
|||||||
private noPromptTemplates: boolean;
|
private noPromptTemplates: boolean;
|
||||||
private noThemes: boolean;
|
private noThemes: boolean;
|
||||||
private systemPromptSource?: string;
|
private systemPromptSource?: string;
|
||||||
private appendSystemPromptSource?: string;
|
private appendSystemPromptSource?: string[];
|
||||||
private extensionsOverride?: (base: LoadExtensionsResult) => LoadExtensionsResult;
|
private extensionsOverride?: (base: LoadExtensionsResult) => LoadExtensionsResult;
|
||||||
private skillsOverride?: (base: { skills: Skill[]; diagnostics: ResourceDiagnostic[] }) => {
|
private skillsOverride?: (base: { skills: Skill[]; diagnostics: ResourceDiagnostic[] }) => {
|
||||||
skills: Skill[];
|
skills: Skill[];
|
||||||
@@ -458,9 +458,12 @@ export class DefaultResourceLoader implements ResourceLoader {
|
|||||||
);
|
);
|
||||||
this.systemPrompt = this.systemPromptOverride ? this.systemPromptOverride(baseSystemPrompt) : baseSystemPrompt;
|
this.systemPrompt = this.systemPromptOverride ? this.systemPromptOverride(baseSystemPrompt) : baseSystemPrompt;
|
||||||
|
|
||||||
const appendSource = this.appendSystemPromptSource ?? this.discoverAppendSystemPromptFile();
|
const appendSources =
|
||||||
const resolvedAppend = resolvePromptInput(appendSource, "append system prompt");
|
this.appendSystemPromptSource ??
|
||||||
const baseAppend = resolvedAppend ? [resolvedAppend] : [];
|
(this.discoverAppendSystemPromptFile() ? [this.discoverAppendSystemPromptFile()!] : []);
|
||||||
|
const baseAppend = appendSources
|
||||||
|
.map((s) => resolvePromptInput(s, "append system prompt"))
|
||||||
|
.filter((s): s is string => s !== undefined);
|
||||||
this.appendSystemPrompt = this.appendSystemPromptOverride
|
this.appendSystemPrompt = this.appendSystemPromptOverride
|
||||||
? this.appendSystemPromptOverride(baseAppend)
|
? this.appendSystemPromptOverride(baseAppend)
|
||||||
: baseAppend;
|
: baseAppend;
|
||||||
|
|||||||
@@ -92,7 +92,12 @@ describe("parseArgs", () => {
|
|||||||
|
|
||||||
test("parses --append-system-prompt", () => {
|
test("parses --append-system-prompt", () => {
|
||||||
const result = parseArgs(["--append-system-prompt", "Additional context"]);
|
const result = parseArgs(["--append-system-prompt", "Additional context"]);
|
||||||
expect(result.appendSystemPrompt).toBe("Additional context");
|
expect(result.appendSystemPrompt).toEqual(["Additional context"]);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("parses multiple --append-system-prompt flags", () => {
|
||||||
|
const result = parseArgs(["--append-system-prompt", "Context A", "--append-system-prompt", "Context B"]);
|
||||||
|
expect(result.appendSystemPrompt).toEqual(["Context A", "Context B"]);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("parses --mode", () => {
|
test("parses --mode", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user