@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.
- package/.env.example +7 -0
- package/dist/brand.d.ts +2 -2
- package/dist/brand.js +2 -2
- package/dist/config.d.ts +4 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +28 -15
- package/dist/coordinator/workflow.d.ts.map +1 -1
- package/dist/coordinator/workflow.js +6 -5
- package/dist/goal/goal-mode.d.ts +0 -4
- package/dist/goal/goal-mode.d.ts.map +1 -1
- package/dist/goal/goal-mode.js +6 -5
- package/dist/index.js +17 -12
- package/dist/llm/anthropic.d.ts +18 -11
- package/dist/llm/anthropic.d.ts.map +1 -1
- package/dist/llm/anthropic.js +6 -3
- package/dist/llm/openai.d.ts +8 -0
- package/dist/llm/openai.d.ts.map +1 -0
- package/dist/llm/openai.js +214 -0
- package/dist/runtime/permissions.d.ts.map +1 -1
- package/dist/runtime/permissions.js +5 -4
- package/dist/runtime/query-engine.d.ts +4 -1
- package/dist/runtime/query-engine.d.ts.map +1 -1
- package/dist/runtime/query-engine.js +20 -7
- package/dist/sdk.d.ts +6 -2
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +4 -1
- package/dist/status-ui.d.ts +1 -10
- package/dist/status-ui.d.ts.map +1 -1
- package/dist/status-ui.js +9 -7
- package/dist/terminal-theme.d.ts +45 -0
- package/dist/terminal-theme.d.ts.map +1 -0
- package/dist/terminal-theme.js +47 -0
- package/dist/thought-fold.d.ts.map +1 -1
- package/dist/thought-fold.js +3 -5
- package/dist/tools/builtin.js +1 -1
- package/dist/tools/registry.d.ts +1 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +3 -0
- package/dist/trace.d.ts +2 -0
- package/dist/trace.d.ts.map +1 -1
- package/dist/trace.js +56 -30
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/guide.md +13 -2
- package/docs/sdk.md +48 -0
- package/package.json +2 -1
package/dist/tools/builtin.js
CHANGED
|
@@ -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("
|
|
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,
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -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"}
|
package/dist/tools/registry.js
CHANGED
package/dist/trace.d.ts
CHANGED
package/dist/trace.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"
|
|
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:
|
|
9
|
-
blue:
|
|
10
|
-
green:
|
|
11
|
-
yellow:
|
|
12
|
-
red:
|
|
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, "
|
|
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("└", "
|
|
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("└", "
|
|
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 ? "└" : " ", "
|
|
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
|
-
?
|
|
466
|
+
? terminalBackground(TERMINAL_DARK_RGB.diffAdded)
|
|
461
467
|
: style === "remove"
|
|
462
|
-
?
|
|
468
|
+
? terminalBackground(TERMINAL_DARK_RGB.diffRemoved)
|
|
463
469
|
: "";
|
|
464
470
|
const gutter = style === "add"
|
|
465
|
-
?
|
|
471
|
+
? TERMINAL_ANSI.success
|
|
466
472
|
: style === "remove"
|
|
467
|
-
?
|
|
468
|
-
:
|
|
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
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
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[
|
|
516
|
-
rendered = rendered.replace(/`([^`]+)`/g, (_match, codeText) => useColor ? `\x1b[48;5;236m
|
|
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;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,UAAU,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG;IAC3C,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAChF,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,iBAAiB,CAAC;
|
|
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
|
|
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
|
|
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
|
|
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": {
|