@apolloyh/apollo-agent 0.1.11 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/.env.example +7 -0
  2. package/dist/brand.d.ts +2 -2
  3. package/dist/brand.js +2 -2
  4. package/dist/config.d.ts +4 -2
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +28 -15
  7. package/dist/coordinator/workflow.d.ts.map +1 -1
  8. package/dist/coordinator/workflow.js +6 -5
  9. package/dist/goal/goal-mode.d.ts +0 -4
  10. package/dist/goal/goal-mode.d.ts.map +1 -1
  11. package/dist/goal/goal-mode.js +6 -5
  12. package/dist/index.js +17 -12
  13. package/dist/llm/anthropic.d.ts +18 -11
  14. package/dist/llm/anthropic.d.ts.map +1 -1
  15. package/dist/llm/anthropic.js +6 -3
  16. package/dist/llm/openai.d.ts +8 -0
  17. package/dist/llm/openai.d.ts.map +1 -0
  18. package/dist/llm/openai.js +214 -0
  19. package/dist/runtime/permissions.d.ts.map +1 -1
  20. package/dist/runtime/permissions.js +5 -4
  21. package/dist/runtime/query-engine.d.ts +4 -1
  22. package/dist/runtime/query-engine.d.ts.map +1 -1
  23. package/dist/runtime/query-engine.js +20 -7
  24. package/dist/sdk.d.ts +6 -2
  25. package/dist/sdk.d.ts.map +1 -1
  26. package/dist/sdk.js +4 -1
  27. package/dist/status-ui.d.ts +1 -10
  28. package/dist/status-ui.d.ts.map +1 -1
  29. package/dist/status-ui.js +9 -7
  30. package/dist/terminal-theme.d.ts +45 -0
  31. package/dist/terminal-theme.d.ts.map +1 -0
  32. package/dist/terminal-theme.js +47 -0
  33. package/dist/thought-fold.d.ts.map +1 -1
  34. package/dist/thought-fold.js +3 -5
  35. package/dist/tools/builtin.js +1 -1
  36. package/dist/tools/registry.d.ts +1 -0
  37. package/dist/tools/registry.d.ts.map +1 -1
  38. package/dist/tools/registry.js +3 -0
  39. package/dist/trace.d.ts +2 -0
  40. package/dist/trace.d.ts.map +1 -1
  41. package/dist/trace.js +56 -30
  42. package/dist/types.d.ts +9 -0
  43. package/dist/types.d.ts.map +1 -1
  44. package/docs/guide.md +13 -2
  45. package/docs/sdk.md +48 -0
  46. package/package.json +2 -1
@@ -160,7 +160,7 @@ export function createBuiltinRegistry(options) {
160
160
  const command = requiredString(input, "command");
161
161
  const timeout = numberInput(input, "timeoutMs", 30000);
162
162
  try {
163
- const { stdout, stderr } = await execFileAsync("zsh", ["-lc", command], {
163
+ const { stdout, stderr } = await execFileAsync(process.env.SHELL || "/bin/sh", ["-lc", command], {
164
164
  cwd: config.workspaceRoot,
165
165
  timeout,
166
166
  maxBuffer: 1024 * 1024 * 4,
@@ -9,6 +9,7 @@ export declare class ToolRegistry {
9
9
  setPlanMode(active: boolean): void;
10
10
  register(tool: ToolDefinition): void;
11
11
  has(name: string): boolean;
12
+ remove(name: string): void;
12
13
  pick(names: string[]): ToolRegistry;
13
14
  definitions(): AnthropicTool[];
14
15
  riskOf(name: string): import("../types.js").ToolRisk | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,KAAK,CAAC,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAS;IAEzB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI;IAI7C,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIlC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAKpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY;IAWnC,WAAW,IAAI,aAAa,EAAE;IAQ9B,MAAM,CAAC,IAAI,EAAE,MAAM;IAIb,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;CA+CnG"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,KAAK,CAAC,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAS;IAEzB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI;IAI7C,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIlC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAKpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY;IAWnC,WAAW,IAAI,aAAa,EAAE;IAQ9B,MAAM,CAAC,IAAI,EAAE,MAAM;IAIb,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;CA+CnG"}
@@ -18,6 +18,9 @@ export class ToolRegistry {
18
18
  has(name) {
19
19
  return this.tools.has(name);
20
20
  }
21
+ remove(name) {
22
+ this.tools.delete(name);
23
+ }
21
24
  pick(names) {
22
25
  const next = new ToolRegistry();
23
26
  next.hooks = this.hooks;
package/dist/trace.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import type { TraceEvent, TraceSink } from "./types.js";
2
+ import { APOLLO_BRAND_PALETTE } from "./terminal-theme.js";
3
+ export { APOLLO_BRAND_PALETTE as APOLLO_STANDARD_PALETTE };
2
4
  export type CliTraceOptions = {
3
5
  verbose: boolean;
4
6
  stream: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAiBxD,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC;IAClC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,qBAAa,gBAAgB;IAiBf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhBpC,OAAO,CAAC,OAAO,CAAC,CAAiB;IACjC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,mBAAmB,CAAM;IACjC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAoE;gBAE1D,OAAO,EAAE,eAAe;IAErD,IAAI,IAAI,SAAS;IAIjB,SAAS,IAAI,IAAI;IAajB,UAAU,IAAI,IAAI;IAelB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IA6H/B,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,UAAU;IAUlB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAsBtB,yEAAyE;IACzE,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,2BAA2B;IAenC,OAAO,CAAC,gBAAgB;IAwCxB,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,GAAG;CAKZ;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAOxD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAO9D;AA4ED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAY1D"}
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EACL,oBAAoB,EAKrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,oBAAoB,IAAI,uBAAuB,EAAE,CAAC;AAiB3D,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC;IAClC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,qBAAa,gBAAgB;IAiBf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhBpC,OAAO,CAAC,OAAO,CAAC,CAAiB;IACjC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,mBAAmB,CAAM;IACjC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAoE;gBAE1D,OAAO,EAAE,eAAe;IAErD,IAAI,IAAI,SAAS;IAIjB,SAAS,IAAI,IAAI;IAajB,UAAU,IAAI,IAAI;IAelB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IA6H/B,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,UAAU;IAUlB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAsBtB,yEAAyE;IACzE,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,2BAA2B;IAenC,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,GAAG;CAKZ;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAOxD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAO9D;AAgGD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAY1D"}
package/dist/trace.js CHANGED
@@ -1,17 +1,22 @@
1
1
  import { stderr } from "node:process";
2
+ import { extname } from "node:path";
3
+ import { highlight, supportsLanguage } from "cli-highlight";
2
4
  import { formatWaitLine } from "./status-ui.js";
5
+ import { APOLLO_BRAND_PALETTE, TERMINAL_ANSI, TERMINAL_DARK_RGB, terminalBackground, terminalForeground, } from "./terminal-theme.js";
6
+ export { APOLLO_BRAND_PALETTE as APOLLO_STANDARD_PALETTE };
3
7
  const color = {
4
8
  reset: "\x1b[0m",
5
9
  normal: "",
6
10
  dim: "\x1b[2m",
7
11
  bold: "\x1b[1m",
8
- cyan: "\x1b[36m",
9
- blue: "\x1b[38;2;96;165;250m",
10
- green: "\x1b[32m",
11
- yellow: "\x1b[33m",
12
- red: "\x1b[31m",
12
+ cyan: terminalForeground(TERMINAL_DARK_RGB.storage),
13
+ blue: TERMINAL_ANSI.permission,
14
+ green: TERMINAL_ANSI.success,
15
+ yellow: TERMINAL_ANSI.warning,
16
+ red: TERMINAL_ANSI.error,
13
17
  magenta: "\x1b[35m",
14
18
  gray: "\x1b[90m",
19
+ output: TERMINAL_ANSI.inactive,
15
20
  };
16
21
  export class CliTraceRenderer {
17
22
  options;
@@ -224,7 +229,7 @@ export class CliTraceRenderer {
224
229
  const elapsed = startedAt ? ` ${this.elapsedSince(startedAt)}` : "";
225
230
  this.bullet(`${formatCompletedStatusText(label)}${elapsed}`, colorName);
226
231
  if (detail)
227
- this.subBullet(detail, "gray");
232
+ this.subBullet(detail, "output");
228
233
  }
229
234
  /** Non-interactive: Claude Code–style morphing glyph + shimmer label. */
230
235
  renderStatus() {
@@ -272,10 +277,10 @@ export class CliTraceRenderer {
272
277
  const removed = `${change.removed} ${change.removed === 1 ? "line" : "lines"}`;
273
278
  const summary = change.kind === "create" ? `Added ${added}` : `Added ${added}, removed ${removed}`;
274
279
  this.out(`${this.paint("●", "green")} ${this.paint(`${action}(${path})`, "bold")}\n`);
275
- this.out(` ${this.paint("└", "gray")} ${this.paint(summary, "gray")}\n`);
280
+ this.out(` ${this.paint("└", "blue")} ${this.paint(summary, "output")}\n`);
276
281
  this.renderCodeChange(change);
277
282
  if (change.omitted > 0) {
278
- this.out(` ${this.paint("└", "gray")} ${this.paint(`… +${change.omitted} lines`, "gray")}\n`);
283
+ this.out(` ${this.paint("└", "blue")} ${this.paint(`… +${change.omitted} lines`, "output")}\n`);
279
284
  }
280
285
  }
281
286
  renderInteractiveToolResult(event, denied) {
@@ -284,11 +289,12 @@ export class CliTraceRenderer {
284
289
  return;
285
290
  const lines = toolOutputLines(event.tool, event.content);
286
291
  for (const [index, line] of lines.entries()) {
287
- this.out(` ${this.paint(index === 0 ? "└" : " ", "gray")} ${this.paint(truncateDisplayLine(line, 140), "gray")}\n`);
292
+ this.out(` ${this.paint(index === 0 ? "└" : " ", "blue")} ${this.paint(truncateDisplayLine(line, 140), "output")}\n`);
288
293
  }
289
294
  }
290
295
  renderCodeChange(change) {
291
296
  const width = Math.max(40, Math.min(this.options.stdout?.columns ?? 120, 160));
297
+ const language = extname(change.path).slice(1);
292
298
  let oldLine = 1;
293
299
  let newLine = 1;
294
300
  for (const rawLine of change.lines) {
@@ -326,7 +332,7 @@ export class CliTraceRenderer {
326
332
  oldLine += 1;
327
333
  newLine += 1;
328
334
  }
329
- this.out(`${renderCodeLine(number, marker, content, style, width, this.options.color)}\n`);
335
+ this.out(`${renderCodeLine(number, marker, content, style, width, this.options.color, language)}\n`);
330
336
  }
331
337
  }
332
338
  paint(text, colorName) {
@@ -450,35 +456,55 @@ function truncateDisplayLine(value, max) {
450
456
  const characters = Array.from(value.replace(/\t/g, " "));
451
457
  return characters.length <= max ? characters.join("") : `${characters.slice(0, max - 1).join("")}…`;
452
458
  }
453
- function renderCodeLine(lineNumber, marker, value, style, width, useColor) {
459
+ function renderCodeLine(lineNumber, marker, value, style, width, useColor, language) {
454
460
  const prefix = ` ${String(lineNumber).padStart(5)} ${marker} `;
455
461
  const content = truncateDisplayLine(value, Math.max(10, width - displayCells(prefix)));
456
462
  const padding = " ".repeat(Math.max(0, width - displayCells(prefix) - displayCells(content)));
457
463
  if (!useColor)
458
464
  return `${prefix}${content}${padding}`;
459
465
  const background = style === "add"
460
- ? "\x1b[48;2;0;55;18m"
466
+ ? terminalBackground(TERMINAL_DARK_RGB.diffAdded)
461
467
  : style === "remove"
462
- ? "\x1b[48;2;75;8;14m"
468
+ ? terminalBackground(TERMINAL_DARK_RGB.diffRemoved)
463
469
  : "";
464
470
  const gutter = style === "add"
465
- ? "\x1b[38;2;74;222;128m"
471
+ ? TERMINAL_ANSI.success
466
472
  : style === "remove"
467
- ? "\x1b[38;2;248;113;113m"
468
- : "\x1b[38;2;115;115;125m";
469
- return `${background}${gutter}${prefix}${highlightCode(content)}${padding}\x1b[0m`;
473
+ ? TERMINAL_ANSI.error
474
+ : TERMINAL_ANSI.inactive;
475
+ return `${background}${gutter}${prefix}${highlightCode(content, language)}${padding}\x1b[0m`;
470
476
  }
471
- function highlightCode(value) {
472
- const normal = "\x1b[38;2;235;235;240m";
473
- return `${normal}${value.replace(/(\/\/.*$|\/\*.*?\*\/|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|`(?:\\.|[^`\\])*`|\b(?:const|let|var|new|if|else|for|while|return|async|await|function|class|interface|type|import|export|from|extends|throw|try|catch|finally)\b|\b(?:true|false|null|undefined)\b|\b\d+(?:\.\d+)?\b)/g, (token) => {
474
- if (token.startsWith("//") || token.startsWith("/*"))
475
- return `\x1b[38;2;130;130;120m${token}${normal}`;
476
- if (/^["'`]/.test(token))
477
- return `\x1b[38;2;250;204;92m${token}${normal}`;
478
- if (/^(?:true|false|null|undefined|\d)/.test(token))
479
- return `\x1b[38;2;189;147;249m${token}${normal}`;
480
- return `\x1b[38;2;255;80;155m${token}${normal}`;
481
- })}`;
477
+ const STORAGE_KEYWORDS = new Set(["const", "let", "var", "function", "class", "type", "interface", "enum", "namespace", "module", "def"]);
478
+ const syntax = (rgb) => (value) => `${terminalForeground(rgb)}${value}\x1b[39m`;
479
+ const syntaxTheme = {
480
+ default: syntax(TERMINAL_DARK_RGB.text),
481
+ keyword: (value) => syntax(STORAGE_KEYWORDS.has(value.trim()) ? TERMINAL_DARK_RGB.storage : TERMINAL_DARK_RGB.keyword)(value),
482
+ built_in: syntax(TERMINAL_DARK_RGB.syntaxGreen),
483
+ type: syntax(TERMINAL_DARK_RGB.syntaxGreen),
484
+ literal: syntax(TERMINAL_DARK_RGB.literal),
485
+ number: syntax(TERMINAL_DARK_RGB.literal),
486
+ string: syntax(TERMINAL_DARK_RGB.string),
487
+ regexp: syntax(TERMINAL_DARK_RGB.string),
488
+ title: syntax(TERMINAL_DARK_RGB.syntaxGreen),
489
+ function: syntax(TERMINAL_DARK_RGB.syntaxGreen),
490
+ params: syntax(TERMINAL_DARK_RGB.params),
491
+ comment: syntax(TERMINAL_DARK_RGB.comment),
492
+ doctag: syntax(TERMINAL_DARK_RGB.comment),
493
+ meta: syntax(TERMINAL_DARK_RGB.comment),
494
+ name: syntax(TERMINAL_DARK_RGB.syntaxGreen),
495
+ attr: syntax(TERMINAL_DARK_RGB.syntaxGreen),
496
+ attribute: syntax(TERMINAL_DARK_RGB.syntaxGreen),
497
+ symbol: syntax(TERMINAL_DARK_RGB.literal),
498
+ };
499
+ function highlightCode(value, language) {
500
+ if (!language || !supportsLanguage(language))
501
+ return `${TERMINAL_ANSI.text}${value}`;
502
+ try {
503
+ return highlight(value, { language, ignoreIllegals: true, theme: syntaxTheme });
504
+ }
505
+ catch {
506
+ return `${TERMINAL_ANSI.text}${value}`;
507
+ }
482
508
  }
483
509
  function displayCells(value) {
484
510
  let width = 0;
@@ -512,8 +538,8 @@ export function stripTerminalEscapes(value) {
512
538
  }
513
539
  function renderInlineMarkdown(value, useColor) {
514
540
  let rendered = stripTerminalEscapes(value);
515
- rendered = rendered.replace(/\[([^\]]+)]\((https?:\/\/[^)]+)\)/g, (_match, label, url) => useColor ? `\x1b[4;38;2;96;165;250m${label}\x1b[0m \x1b[90m(${url})\x1b[0m` : `${label} (${url})`);
516
- rendered = rendered.replace(/`([^`]+)`/g, (_match, codeText) => useColor ? `\x1b[48;5;236m\x1b[38;2;125;211;252m ${codeText} \x1b[0m` : codeText);
541
+ rendered = rendered.replace(/\[([^\]]+)]\((https?:\/\/[^)]+)\)/g, (_match, label, url) => useColor ? `\x1b[4m${TERMINAL_ANSI.permission}${label}\x1b[0m ${TERMINAL_ANSI.inactive}(${url})\x1b[0m` : `${label} (${url})`);
542
+ rendered = rendered.replace(/`([^`]+)`/g, (_match, codeText) => useColor ? `\x1b[48;5;236m${TERMINAL_ANSI.permission} ${codeText} \x1b[0m` : codeText);
517
543
  rendered = rendered.replace(/\*\*([^*]+)\*\*/g, (_match, boldText) => useColor ? `\x1b[1m${boldText}\x1b[0m` : boldText);
518
544
  rendered = rendered.replace(/__([^_]+)__/g, (_match, boldText) => useColor ? `\x1b[1m${boldText}\x1b[0m` : boldText);
519
545
  rendered = rendered.replace(/(^|[^*])\*([^*\n]+)\*(?!\*)/g, (_match, prefix, italicText) => useColor ? `${prefix}\x1b[3m${italicText}\x1b[0m` : `${prefix}${italicText}`);
package/dist/types.d.ts CHANGED
@@ -35,6 +35,12 @@ export type ToolResult = {
35
35
  content: string;
36
36
  isError?: boolean;
37
37
  fileChange?: FileChangeDisplay;
38
+ artifacts?: ToolArtifact[];
39
+ };
40
+ export type ToolArtifact = {
41
+ path: string;
42
+ title?: string;
43
+ size?: number;
38
44
  };
39
45
  export type FileChangeDisplay = {
40
46
  path: string;
@@ -83,6 +89,7 @@ export type TraceEvent = {
83
89
  isError?: boolean;
84
90
  content: string;
85
91
  fileChange?: FileChangeDisplay;
92
+ artifacts?: ToolArtifact[];
86
93
  } | {
87
94
  type: "approval_required";
88
95
  tool: string;
@@ -168,12 +175,14 @@ export type ToolExecutionContext = {
168
175
  planMode?: boolean;
169
176
  };
170
177
  export type LlmConfig = {
178
+ protocol?: "anthropic" | "openai";
171
179
  authToken: string;
172
180
  baseUrl: string;
173
181
  model: string;
174
182
  maxTokens: number;
175
183
  timeoutMs?: number;
176
184
  cacheTtl?: "5m" | "1h";
185
+ openaiMaxTokensParam?: "max_tokens" | "max_completion_tokens";
177
186
  };
178
187
  export type McpServerConfig = {
179
188
  command: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/docs/guide.md CHANGED
@@ -43,7 +43,18 @@ EXA_API_KEY=your_exa_key
43
43
  # ANTHROPIC_CACHE_TTL=5m
44
44
  ```
45
45
 
46
- Apollo 使用 Anthropic Messages API 兼容接口。GLM/BigModel 在未显式配置时默认使用 131072 的输出上限;其他提供商默认 4096。显式设置 `ANTHROPIC_MAX_TOKENS` 始终优先。
46
+ Apollo 默认使用 Anthropic Messages API,也支持 OpenAI-compatible Chat Completions。切换为 OpenAI 协议:
47
+
48
+ ```dotenv
49
+ APOLLO_LLM_PROTOCOL=openai
50
+ OPENAI_API_KEY=your_openai_token
51
+ OPENAI_BASE_URL=https://api.openai.com/v1
52
+ OPENAI_MODEL=gpt-4o-mini
53
+ # OPENAI_MAX_TOKENS=4096
54
+ # OPENAI_MAX_TOKENS_PARAM=max_tokens
55
+ ```
56
+
57
+ OpenAI 兼容层支持流式文本、公开的 reasoning/thinking 字段、并行工具调用、工具结果回传、usage/cache token 和标准重试错误。模型供应商不返回 reasoning 正文时,Apollo 无法展示该内容。
47
58
 
48
59
  环境文件发现顺序:
49
60
 
@@ -243,7 +254,7 @@ Apollo 不伪造本地 Prompt Cache 命中;`/status` 只使用模型厂商响
243
254
 
244
255
  ## 故障排查
245
256
 
246
- - `Missing ANTHROPIC_AUTH_TOKEN`:编辑 `~/.apollo/.env` 后重启。
257
+ - `Missing model API token`:配置 `ANTHROPIC_AUTH_TOKEN` `OPENAI_API_KEY` 后重启。
247
258
  - `EEXIST .../bin/apollo`:先确认 `which apollo`;移除旧的手动软链接或旧全局包后重装。
248
259
  - 搜索不可用:检查 `EXA_API_KEY`,普通文件和代码搜索不依赖 Exa。
249
260
  - 修改配置没有生效:重启 Apollo;配置和提示词在当前 Engine 中冻结。
package/docs/sdk.md CHANGED
@@ -82,6 +82,8 @@ const engine = await createQueryEngine({
82
82
  | 参数 | 类型 | 说明 |
83
83
  |---|---|---|
84
84
  | `configPath` | `string` | Agent 显式配置路径;在用户配置和项目配置之后覆盖,默认还会发现 `~/.apollo/config.json`、`.apollo/config.json`,并兼容旧 `agent.config.json` |
85
+ | `configMode` | `"layered" \| "isolated"` | `isolated` 只读取显式 `configPath`,适合 Web 服务;默认保持 CLI 分层发现 |
86
+ | `workspaceRoot` | `string` | 覆盖会话、记忆和工具使用的工作目录,不改变配置文件来源 |
85
87
  | `envPath` | `string` | 可选环境变量文件;未提供模型配置时默认发现 `.apollo/.env`,然后 `.env` |
86
88
  | `agentConfig` | `AgentConfig` | 直接传入完整 Agent 配置;优先于 `configPath` |
87
89
  | `llmConfig` | `LlmConfig` | 直接传入模型配置;优先于环境变量 |
@@ -91,9 +93,13 @@ const engine = await createQueryEngine({
91
93
  | `assumeYes` | `boolean \| (() => boolean)` | 使用默认审批器时自动批准;服务端不建议启用 |
92
94
  | `stream` | `boolean \| (() => boolean)` | 是否使用模型流式响应,默认开启 |
93
95
  | `sessionId` | `string` | 创建后立即恢复指定会话 |
96
+ | `extraTools` | `ToolDefinition[]` | 向当前 Engine 注册宿主应用专用工具;工具名不能与已有工具重复 |
97
+ | `memoryEnabled` | `boolean` | 设为 `false` 时禁用记忆检索、保存、列表工具和自动记忆注入;默认开启 |
94
98
 
95
99
  如果同时传入 `agentConfig` 和 `configPath`,使用 `agentConfig`;如果同时传入 `llmConfig` 和环境变量,使用 `llmConfig`。
96
100
 
101
+ `LlmConfig.protocol` 可设为 `anthropic` 或 `openai`。OpenAI 协议使用 `/v1/chat/completions`,并将响应归一为 Apollo 内部的 text、thinking、tool_use 和 usage 事件。
102
+
97
103
  ## 系统提示词与缓存
98
104
 
99
105
  `~/.apollo/config.json` 和项目的 `.apollo/config.json` 都可以配置:
@@ -150,6 +156,48 @@ const engine = await createQueryEngine({
150
156
  `onEvent` 可能包含工具参数或结果。转发到日志和前端前,应按宿主系统的数据策略脱敏。
151
157
  成功的 `write_file` 事件还会携带 `fileChange`,用于渲染新文件预览或彩色 diff;该字段不会发送给模型。
152
158
 
159
+ ## 宿主工具与文件产物
160
+
161
+ Web 服务可以使用 `extraTools` 注册只属于当前入口的业务工具。工具返回的 `content` 会交给模型继续处理;`artifacts` 只随 `tool_result` 事件上报给宿主 UI,用于可靠展示和下载文件。
162
+
163
+ ```ts
164
+ import { createQueryEngine, type ToolDefinition } from "@apolloyh/apollo-agent";
165
+
166
+ const generateReport: ToolDefinition = {
167
+ name: "generate_report",
168
+ description: "生成业务报告并保存到当前工作区。",
169
+ risk: "high",
170
+ input_schema: {
171
+ type: "object",
172
+ properties: { topic: { type: "string" } },
173
+ required: ["topic"],
174
+ },
175
+ async execute(input, context) {
176
+ const relativePath = "artifacts/report.docx";
177
+ await generateDocx(context.workspaceRoot, relativePath, String(input.topic));
178
+ return {
179
+ content: `报告已生成:${relativePath}`,
180
+ artifacts: [{ path: relativePath, title: "业务报告.docx" }],
181
+ };
182
+ },
183
+ };
184
+
185
+ const engine = await createQueryEngine({
186
+ configPath: ".apollo/web-entry.json",
187
+ configMode: "isolated",
188
+ workspaceRoot: tenant.workspaceRoot,
189
+ extraTools: [generateReport],
190
+ memoryEnabled: false,
191
+ onEvent(event) {
192
+ if (event.type === "tool_result" && event.artifacts?.length) {
193
+ ui.showFiles(event.artifacts);
194
+ }
195
+ },
196
+ });
197
+ ```
198
+
199
+ `ToolArtifact.path` 应指向 `workspaceRoot` 内的真实文件。SDK 只传递元数据,不负责提供 HTTP 下载地址;宿主服务必须自行验证真实路径、文件类型、大小和用户权限,禁止直接信任模型给出的路径。
200
+
153
201
  ## 权限审批
154
202
 
155
203
  自定义 `approvalProvider` 会接收每次工具调用。宿主系统应根据用户、工作区、工具和风险等级决定是否允许。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apolloyh/apollo-agent",
3
- "version": "0.1.11",
3
+ "version": "0.2.1",
4
4
  "type": "module",
5
5
  "description": "Apollo — your personal agent. Answer first, act when needed, with tools, skills, and isolated Task subagents.",
6
6
  "bin": {
@@ -44,6 +44,7 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "@modelcontextprotocol/sdk": "^1.29.0",
47
+ "cli-highlight": "^2.1.11",
47
48
  "diff": "^9.0.0"
48
49
  },
49
50
  "devDependencies": {