fixo-cli 1.0.0
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/LICENSE +201 -0
- package/README.md +530 -0
- package/dist/agent/agent-client.d.ts +108 -0
- package/dist/agent/agent-client.d.ts.map +1 -0
- package/dist/agent/agent-client.js +1247 -0
- package/dist/agent/agent-client.js.map +1 -0
- package/dist/agent/agent-pool.d.ts +20 -0
- package/dist/agent/agent-pool.d.ts.map +1 -0
- package/dist/agent/agent-pool.js +217 -0
- package/dist/agent/agent-pool.js.map +1 -0
- package/dist/agent/background-awareness.d.ts +55 -0
- package/dist/agent/background-awareness.d.ts.map +1 -0
- package/dist/agent/background-awareness.js +104 -0
- package/dist/agent/background-awareness.js.map +1 -0
- package/dist/agent/command-parser.d.ts +33 -0
- package/dist/agent/command-parser.d.ts.map +1 -0
- package/dist/agent/command-parser.js +120 -0
- package/dist/agent/command-parser.js.map +1 -0
- package/dist/agent/context-budget.d.ts +91 -0
- package/dist/agent/context-budget.d.ts.map +1 -0
- package/dist/agent/context-budget.js +219 -0
- package/dist/agent/context-budget.js.map +1 -0
- package/dist/agent/conversation.d.ts +190 -0
- package/dist/agent/conversation.d.ts.map +1 -0
- package/dist/agent/conversation.js +547 -0
- package/dist/agent/conversation.js.map +1 -0
- package/dist/agent/hooks.d.ts +72 -0
- package/dist/agent/hooks.d.ts.map +1 -0
- package/dist/agent/hooks.js +214 -0
- package/dist/agent/hooks.js.map +1 -0
- package/dist/agent/mcp-bridge.d.ts +13 -0
- package/dist/agent/mcp-bridge.d.ts.map +1 -0
- package/dist/agent/mcp-bridge.js +86 -0
- package/dist/agent/mcp-bridge.js.map +1 -0
- package/dist/agent/mcp-client.d.ts +24 -0
- package/dist/agent/mcp-client.d.ts.map +1 -0
- package/dist/agent/mcp-client.js +146 -0
- package/dist/agent/mcp-client.js.map +1 -0
- package/dist/agent/mcp-manager.d.ts +13 -0
- package/dist/agent/mcp-manager.d.ts.map +1 -0
- package/dist/agent/mcp-manager.js +84 -0
- package/dist/agent/mcp-manager.js.map +1 -0
- package/dist/agent/mcp-registry.d.ts +45 -0
- package/dist/agent/mcp-registry.d.ts.map +1 -0
- package/dist/agent/mcp-registry.js +98 -0
- package/dist/agent/mcp-registry.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +14 -0
- package/dist/agent/orchestrator.d.ts.map +1 -0
- package/dist/agent/orchestrator.js +118 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/agent/parser-adapter.d.ts +120 -0
- package/dist/agent/parser-adapter.d.ts.map +1 -0
- package/dist/agent/parser-adapter.js +265 -0
- package/dist/agent/parser-adapter.js.map +1 -0
- package/dist/agent/parsers/imports.d.ts +11 -0
- package/dist/agent/parsers/imports.d.ts.map +1 -0
- package/dist/agent/parsers/imports.js +94 -0
- package/dist/agent/parsers/imports.js.map +1 -0
- package/dist/agent/parsers/shell.d.ts +23 -0
- package/dist/agent/parsers/shell.d.ts.map +1 -0
- package/dist/agent/parsers/shell.js +200 -0
- package/dist/agent/parsers/shell.js.map +1 -0
- package/dist/agent/parsers/symbols.d.ts +17 -0
- package/dist/agent/parsers/symbols.d.ts.map +1 -0
- package/dist/agent/parsers/symbols.js +103 -0
- package/dist/agent/parsers/symbols.js.map +1 -0
- package/dist/agent/permissions.d.ts +65 -0
- package/dist/agent/permissions.d.ts.map +1 -0
- package/dist/agent/permissions.js +219 -0
- package/dist/agent/permissions.js.map +1 -0
- package/dist/agent/predictive-gate.d.ts +69 -0
- package/dist/agent/predictive-gate.d.ts.map +1 -0
- package/dist/agent/predictive-gate.js +128 -0
- package/dist/agent/predictive-gate.js.map +1 -0
- package/dist/agent/provider-cooldown.d.ts +144 -0
- package/dist/agent/provider-cooldown.d.ts.map +1 -0
- package/dist/agent/provider-cooldown.js +300 -0
- package/dist/agent/provider-cooldown.js.map +1 -0
- package/dist/agent/providers-manager.d.ts +109 -0
- package/dist/agent/providers-manager.d.ts.map +1 -0
- package/dist/agent/providers-manager.js +464 -0
- package/dist/agent/providers-manager.js.map +1 -0
- package/dist/agent/repo-map.d.ts +6 -0
- package/dist/agent/repo-map.d.ts.map +1 -0
- package/dist/agent/repo-map.js +221 -0
- package/dist/agent/repo-map.js.map +1 -0
- package/dist/agent/retry.d.ts +103 -0
- package/dist/agent/retry.d.ts.map +1 -0
- package/dist/agent/retry.js +276 -0
- package/dist/agent/retry.js.map +1 -0
- package/dist/agent/search/index.d.ts +61 -0
- package/dist/agent/search/index.d.ts.map +1 -0
- package/dist/agent/search/index.js +314 -0
- package/dist/agent/search/index.js.map +1 -0
- package/dist/agent/single-agent.d.ts +76 -0
- package/dist/agent/single-agent.d.ts.map +1 -0
- package/dist/agent/single-agent.js +697 -0
- package/dist/agent/single-agent.js.map +1 -0
- package/dist/agent/skills.d.ts +22 -0
- package/dist/agent/skills.d.ts.map +1 -0
- package/dist/agent/skills.js +139 -0
- package/dist/agent/skills.js.map +1 -0
- package/dist/agent/stream-glue.d.ts +85 -0
- package/dist/agent/stream-glue.d.ts.map +1 -0
- package/dist/agent/stream-glue.js +120 -0
- package/dist/agent/stream-glue.js.map +1 -0
- package/dist/agent/subagent.d.ts +72 -0
- package/dist/agent/subagent.d.ts.map +1 -0
- package/dist/agent/subagent.js +193 -0
- package/dist/agent/subagent.js.map +1 -0
- package/dist/agent/telemetry.d.ts +192 -0
- package/dist/agent/telemetry.d.ts.map +1 -0
- package/dist/agent/telemetry.js +400 -0
- package/dist/agent/telemetry.js.map +1 -0
- package/dist/agent/tokenizer.d.ts +42 -0
- package/dist/agent/tokenizer.d.ts.map +1 -0
- package/dist/agent/tokenizer.js +107 -0
- package/dist/agent/tokenizer.js.map +1 -0
- package/dist/agent/tool-executor.d.ts +289 -0
- package/dist/agent/tool-executor.d.ts.map +1 -0
- package/dist/agent/tool-executor.js +2519 -0
- package/dist/agent/tool-executor.js.map +1 -0
- package/dist/agent/web-impl.d.ts +2 -0
- package/dist/agent/web-impl.d.ts.map +1 -0
- package/dist/agent/web-impl.js +34 -0
- package/dist/agent/web-impl.js.map +1 -0
- package/dist/agent/web.d.ts +8 -0
- package/dist/agent/web.d.ts.map +1 -0
- package/dist/agent/web.js +8 -0
- package/dist/agent/web.js.map +1 -0
- package/dist/agent/worker-agent.d.ts +27 -0
- package/dist/agent/worker-agent.d.ts.map +1 -0
- package/dist/agent/worker-agent.js +503 -0
- package/dist/agent/worker-agent.js.map +1 -0
- package/dist/config.d.ts +162 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +138 -0
- package/dist/config.js.map +1 -0
- package/dist/context/fixo-md-watcher.d.ts +42 -0
- package/dist/context/fixo-md-watcher.d.ts.map +1 -0
- package/dist/context/fixo-md-watcher.js +126 -0
- package/dist/context/fixo-md-watcher.js.map +1 -0
- package/dist/context/fixo-md.d.ts +50 -0
- package/dist/context/fixo-md.d.ts.map +1 -0
- package/dist/context/fixo-md.js +118 -0
- package/dist/context/fixo-md.js.map +1 -0
- package/dist/context/todo.d.ts +65 -0
- package/dist/context/todo.d.ts.map +1 -0
- package/dist/context/todo.js +194 -0
- package/dist/context/todo.js.map +1 -0
- package/dist/git/git-manager.d.ts +33 -0
- package/dist/git/git-manager.d.ts.map +1 -0
- package/dist/git/git-manager.js +293 -0
- package/dist/git/git-manager.js.map +1 -0
- package/dist/git/git-ops.d.ts +10 -0
- package/dist/git/git-ops.d.ts.map +1 -0
- package/dist/git/git-ops.js +131 -0
- package/dist/git/git-ops.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +352 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer.d.ts +30 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +273 -0
- package/dist/indexer.js.map +1 -0
- package/dist/lsp/lsp-client.d.ts +24 -0
- package/dist/lsp/lsp-client.d.ts.map +1 -0
- package/dist/lsp/lsp-client.js +205 -0
- package/dist/lsp/lsp-client.js.map +1 -0
- package/dist/lsp/lsp-manager.d.ts +17 -0
- package/dist/lsp/lsp-manager.d.ts.map +1 -0
- package/dist/lsp/lsp-manager.js +154 -0
- package/dist/lsp/lsp-manager.js.map +1 -0
- package/dist/lsp/lsp-pre-save.d.ts +137 -0
- package/dist/lsp/lsp-pre-save.d.ts.map +1 -0
- package/dist/lsp/lsp-pre-save.js +245 -0
- package/dist/lsp/lsp-pre-save.js.map +1 -0
- package/dist/lsp/syntax-fallback.d.ts +83 -0
- package/dist/lsp/syntax-fallback.d.ts.map +1 -0
- package/dist/lsp/syntax-fallback.js +275 -0
- package/dist/lsp/syntax-fallback.js.map +1 -0
- package/dist/model-outcomes.d.ts +12 -0
- package/dist/model-outcomes.d.ts.map +1 -0
- package/dist/model-outcomes.js +46 -0
- package/dist/model-outcomes.js.map +1 -0
- package/dist/planner.d.ts +32 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +163 -0
- package/dist/planner.js.map +1 -0
- package/dist/project-memory.d.ts +29 -0
- package/dist/project-memory.d.ts.map +1 -0
- package/dist/project-memory.js +349 -0
- package/dist/project-memory.js.map +1 -0
- package/dist/review.d.ts +2 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +61 -0
- package/dist/review.js.map +1 -0
- package/dist/runtime/background-jobs.d.ts +97 -0
- package/dist/runtime/background-jobs.d.ts.map +1 -0
- package/dist/runtime/background-jobs.js +331 -0
- package/dist/runtime/background-jobs.js.map +1 -0
- package/dist/runtime/credential-vault.d.ts +124 -0
- package/dist/runtime/credential-vault.d.ts.map +1 -0
- package/dist/runtime/credential-vault.js +184 -0
- package/dist/runtime/credential-vault.js.map +1 -0
- package/dist/runtime/loop-trap.d.ts +197 -0
- package/dist/runtime/loop-trap.d.ts.map +1 -0
- package/dist/runtime/loop-trap.js +420 -0
- package/dist/runtime/loop-trap.js.map +1 -0
- package/dist/runtime/policy.d.ts +15 -0
- package/dist/runtime/policy.d.ts.map +1 -0
- package/dist/runtime/policy.js +60 -0
- package/dist/runtime/policy.js.map +1 -0
- package/dist/runtime/redaction.d.ts +66 -0
- package/dist/runtime/redaction.d.ts.map +1 -0
- package/dist/runtime/redaction.js +155 -0
- package/dist/runtime/redaction.js.map +1 -0
- package/dist/runtime/session-snapshots.d.ts +76 -0
- package/dist/runtime/session-snapshots.d.ts.map +1 -0
- package/dist/runtime/session-snapshots.js +166 -0
- package/dist/runtime/session-snapshots.js.map +1 -0
- package/dist/runtime/staging.d.ts +205 -0
- package/dist/runtime/staging.d.ts.map +1 -0
- package/dist/runtime/staging.js +526 -0
- package/dist/runtime/staging.js.map +1 -0
- package/dist/runtime/task-session.d.ts +95 -0
- package/dist/runtime/task-session.d.ts.map +1 -0
- package/dist/runtime/task-session.js +263 -0
- package/dist/runtime/task-session.js.map +1 -0
- package/dist/runtime/worktree.d.ts +55 -0
- package/dist/runtime/worktree.d.ts.map +1 -0
- package/dist/runtime/worktree.js +175 -0
- package/dist/runtime/worktree.js.map +1 -0
- package/dist/setup-wizard.d.ts +8 -0
- package/dist/setup-wizard.d.ts.map +1 -0
- package/dist/setup-wizard.js +73 -0
- package/dist/setup-wizard.js.map +1 -0
- package/dist/shared/content.d.ts +43 -0
- package/dist/shared/content.d.ts.map +1 -0
- package/dist/shared/content.js +61 -0
- package/dist/shared/content.js.map +1 -0
- package/dist/shared/types.d.ts +217 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +3 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/test-runner.d.ts +5 -0
- package/dist/test-runner.d.ts.map +1 -0
- package/dist/test-runner.js +42 -0
- package/dist/test-runner.js.map +1 -0
- package/dist/types.d.ts +85 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/ascii.d.ts +23 -0
- package/dist/ui/ascii.d.ts.map +1 -0
- package/dist/ui/ascii.js +45 -0
- package/dist/ui/ascii.js.map +1 -0
- package/dist/ui/colors.d.ts +111 -0
- package/dist/ui/colors.d.ts.map +1 -0
- package/dist/ui/colors.js +166 -0
- package/dist/ui/colors.js.map +1 -0
- package/dist/ui/image-attach.d.ts +27 -0
- package/dist/ui/image-attach.d.ts.map +1 -0
- package/dist/ui/image-attach.js +100 -0
- package/dist/ui/image-attach.js.map +1 -0
- package/dist/ui/index.d.ts +18 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +18 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/markdown-stream.d.ts +91 -0
- package/dist/ui/markdown-stream.d.ts.map +1 -0
- package/dist/ui/markdown-stream.js +524 -0
- package/dist/ui/markdown-stream.js.map +1 -0
- package/dist/ui/plan-renderer.d.ts +36 -0
- package/dist/ui/plan-renderer.d.ts.map +1 -0
- package/dist/ui/plan-renderer.js +79 -0
- package/dist/ui/plan-renderer.js.map +1 -0
- package/dist/ui/prompt.d.ts +11 -0
- package/dist/ui/prompt.d.ts.map +1 -0
- package/dist/ui/prompt.js +1960 -0
- package/dist/ui/prompt.js.map +1 -0
- package/dist/ui/render-primitives.d.ts +117 -0
- package/dist/ui/render-primitives.d.ts.map +1 -0
- package/dist/ui/render-primitives.js +322 -0
- package/dist/ui/render-primitives.js.map +1 -0
- package/dist/ui/render.d.ts +133 -0
- package/dist/ui/render.d.ts.map +1 -0
- package/dist/ui/render.js +547 -0
- package/dist/ui/render.js.map +1 -0
- package/dist/ui/session-header.d.ts +30 -0
- package/dist/ui/session-header.d.ts.map +1 -0
- package/dist/ui/session-header.js +74 -0
- package/dist/ui/session-header.js.map +1 -0
- package/dist/workspace-guard.d.ts +68 -0
- package/dist/workspace-guard.d.ts.map +1 -0
- package/dist/workspace-guard.js +168 -0
- package/dist/workspace-guard.js.map +1 -0
- package/dist/workspace-lock.d.ts +27 -0
- package/dist/workspace-lock.d.ts.map +1 -0
- package/dist/workspace-lock.js +95 -0
- package/dist/workspace-lock.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* subagent.ts — Isolated WorkerAgent driver.
|
|
3
|
+
*
|
|
4
|
+
* Phase 3.2: lets the parent agent delegate a sub-task to a
|
|
5
|
+
* fresh WorkerAgent whose conversation history is *not* shared
|
|
6
|
+
* with the parent. The subagent runs in BUILD mode (mutating
|
|
7
|
+
* allowed) regardless of the parent's mode, and returns a
|
|
8
|
+
* structured {@link SubagentResult} whose `transcript` field
|
|
9
|
+
* carries only the final summary — never the raw tool log —
|
|
10
|
+
* so the parent's context never bloats.
|
|
11
|
+
*
|
|
12
|
+
* Safety:
|
|
13
|
+
* - `selectedFiles` is replaced with the caller-supplied
|
|
14
|
+
* `contextFiles` (default: empty). The parent cannot leak
|
|
15
|
+
* its own pin-set into the subagent.
|
|
16
|
+
* - The subagent always runs in BUILD mode and inherits the
|
|
17
|
+
* parent's `cwd` and `policy`.
|
|
18
|
+
* - The subagent's own policy/permission engine still gates
|
|
19
|
+
* every tool call — there is no escape hatch.
|
|
20
|
+
* - If `runInBackground` is true, the spawn is fire-and-forget
|
|
21
|
+
* and a `jobId` is returned. The caller can poll via the
|
|
22
|
+
* shared BackgroundJobRegistry (Phase 3.1).
|
|
23
|
+
*/
|
|
24
|
+
import { randomUUID } from 'node:crypto';
|
|
25
|
+
import { WorkerAgent } from './worker-agent.js';
|
|
26
|
+
import { recordTelemetry, telemetry } from './telemetry.js';
|
|
27
|
+
const DEFAULT_INTERNAL_OPTIONS = {
|
|
28
|
+
summaryOnly: true,
|
|
29
|
+
cleanHistory: true,
|
|
30
|
+
};
|
|
31
|
+
const MAX_LOCAL_TOOL_CALLS_DEFAULT = 15;
|
|
32
|
+
/**
|
|
33
|
+
* Spawn a subagent. Returns immediately when `runInBackground`
|
|
34
|
+
* is true; otherwise awaits the subagent's completion and
|
|
35
|
+
* returns its final summary.
|
|
36
|
+
*/
|
|
37
|
+
export async function spawnSubagent(req, parentCtx, internalOpts = {}) {
|
|
38
|
+
const opts = { ...DEFAULT_INTERNAL_OPTIONS, ...internalOpts };
|
|
39
|
+
const start = Date.now();
|
|
40
|
+
const id = `subagent_${randomUUID().slice(0, 8)}`;
|
|
41
|
+
// The subagent inherits the parent's cwd and policy but
|
|
42
|
+
// gets a *fresh* AgentContext. selectedFiles is replaced
|
|
43
|
+
// with the caller's contextFiles (default empty) so the
|
|
44
|
+
// parent cannot leak its pin-set.
|
|
45
|
+
const subagentCtx = {
|
|
46
|
+
task: req.task,
|
|
47
|
+
model: parentCtx.model,
|
|
48
|
+
cwd: parentCtx.cwd,
|
|
49
|
+
verbose: parentCtx.verbose,
|
|
50
|
+
selectedFiles: req.contextFiles ? [...req.contextFiles] : [],
|
|
51
|
+
systemPromptOverride: undefined, // never inherit the parent's override
|
|
52
|
+
checkCommand: undefined,
|
|
53
|
+
policy: parentCtx.policy,
|
|
54
|
+
yes: parentCtx.yes,
|
|
55
|
+
// Phase 3.2 hard rule: subagents are always mutating.
|
|
56
|
+
mode: 'BUILD',
|
|
57
|
+
};
|
|
58
|
+
if (req.runInBackground) {
|
|
59
|
+
// Fire-and-forget. The caller polls by jobId.
|
|
60
|
+
void runSubagentInBackground(id, req, subagentCtx, opts, start);
|
|
61
|
+
return {
|
|
62
|
+
success: true,
|
|
63
|
+
summary: '(subagent running in background)',
|
|
64
|
+
tokensUsed: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 },
|
|
65
|
+
toolCallCount: 0,
|
|
66
|
+
durationMs: 0,
|
|
67
|
+
type: req.type,
|
|
68
|
+
transcript: '',
|
|
69
|
+
jobId: id,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return await runSubagentInline(id, req, subagentCtx, opts, start);
|
|
73
|
+
}
|
|
74
|
+
async function runSubagentInline(id, req, subagentCtx, _opts, start) {
|
|
75
|
+
const subtask = {
|
|
76
|
+
id,
|
|
77
|
+
title: req.task.slice(0, 80),
|
|
78
|
+
description: req.task,
|
|
79
|
+
persona: 'code',
|
|
80
|
+
dependencies: [],
|
|
81
|
+
files: req.contextFiles ?? [],
|
|
82
|
+
status: 'running',
|
|
83
|
+
};
|
|
84
|
+
const worker = new WorkerAgent(subagentCtx.verbose);
|
|
85
|
+
const noopBudget = () => undefined;
|
|
86
|
+
try {
|
|
87
|
+
const inner = await worker.run(subagentCtx, subtask, noopBudget);
|
|
88
|
+
const durationMs = Date.now() - start;
|
|
89
|
+
const tokensUsed = inner.tokensUsed;
|
|
90
|
+
const summary = extractSummary(inner.output);
|
|
91
|
+
recordTelemetry(telemetry.subagentSummary({
|
|
92
|
+
taskType: req.type,
|
|
93
|
+
inputTokens: tokensUsed.prompt_tokens,
|
|
94
|
+
outputTokens: tokensUsed.completion_tokens,
|
|
95
|
+
durationMs,
|
|
96
|
+
}));
|
|
97
|
+
return {
|
|
98
|
+
success: inner.success,
|
|
99
|
+
summary,
|
|
100
|
+
tokensUsed,
|
|
101
|
+
toolCallCount: inner.toolCallCount,
|
|
102
|
+
durationMs,
|
|
103
|
+
type: req.type,
|
|
104
|
+
transcript: opts_transcript(inner.output, summary),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const msg = err.message ?? String(err);
|
|
109
|
+
recordTelemetry(telemetry.subagentSummary({
|
|
110
|
+
taskType: req.type,
|
|
111
|
+
inputTokens: 0,
|
|
112
|
+
outputTokens: 0,
|
|
113
|
+
durationMs: Date.now() - start,
|
|
114
|
+
}));
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
summary: `Subagent failed: ${msg}`,
|
|
118
|
+
tokensUsed: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 },
|
|
119
|
+
toolCallCount: 0,
|
|
120
|
+
durationMs: Date.now() - start,
|
|
121
|
+
type: req.type,
|
|
122
|
+
transcript: '',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async function runSubagentInBackground(id, req, subagentCtx, opts, start) {
|
|
127
|
+
try {
|
|
128
|
+
const result = await runSubagentInline(id, req, subagentCtx, opts, start);
|
|
129
|
+
// Stash the result in a small global in-memory cache so
|
|
130
|
+
// `/jobs` or a future `poll_subagent` can read it back.
|
|
131
|
+
backgroundSubagentResults.set(id, result);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
backgroundSubagentResults.set(id, {
|
|
135
|
+
success: false,
|
|
136
|
+
summary: `Subagent crashed: ${err.message}`,
|
|
137
|
+
tokensUsed: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 },
|
|
138
|
+
toolCallCount: 0,
|
|
139
|
+
durationMs: Date.now() - start,
|
|
140
|
+
type: req.type,
|
|
141
|
+
transcript: '',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const backgroundSubagentResults = new Map();
|
|
146
|
+
/** Read the latest result for a background subagent. */
|
|
147
|
+
export function getBackgroundSubagentResult(jobId) {
|
|
148
|
+
return backgroundSubagentResults.get(jobId) ?? null;
|
|
149
|
+
}
|
|
150
|
+
/** Clear the background subagent cache (test-only). */
|
|
151
|
+
export function _resetBackgroundSubagents() {
|
|
152
|
+
backgroundSubagentResults.clear();
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Build the subagent's `AgentContext` from the parent context
|
|
156
|
+
* and a request. Exposed for testability — the actual subagent
|
|
157
|
+
* is constructed inside `spawnSubagent`.
|
|
158
|
+
*
|
|
159
|
+
* Invariants locked by Phase 3.2:
|
|
160
|
+
* - `mode` is forced to 'BUILD'
|
|
161
|
+
* - `selectedFiles` is replaced by `req.contextFiles` (or [])
|
|
162
|
+
* - `systemPromptOverride` is dropped
|
|
163
|
+
* - `cwd`, `policy`, `yes`, `model`, `verbose` are inherited
|
|
164
|
+
*/
|
|
165
|
+
export function buildSubagentContext(req, parentCtx) {
|
|
166
|
+
return {
|
|
167
|
+
task: req.task,
|
|
168
|
+
model: parentCtx.model,
|
|
169
|
+
cwd: parentCtx.cwd,
|
|
170
|
+
verbose: parentCtx.verbose,
|
|
171
|
+
selectedFiles: req.contextFiles ? [...req.contextFiles] : [],
|
|
172
|
+
systemPromptOverride: undefined,
|
|
173
|
+
checkCommand: undefined,
|
|
174
|
+
policy: parentCtx.policy,
|
|
175
|
+
yes: parentCtx.yes,
|
|
176
|
+
mode: 'BUILD',
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/* ──────────────────────── helpers ──────────────────────── */
|
|
180
|
+
function extractSummary(rawOutput) {
|
|
181
|
+
// The WorkerAgent returns the assistant's final `content`
|
|
182
|
+
// field. When `summaryOnly` is on, this is the only piece
|
|
183
|
+
// of output the parent gets to see. We do *not* parse the
|
|
184
|
+
// raw output further — that would risk leaking tool log.
|
|
185
|
+
return rawOutput.trim();
|
|
186
|
+
}
|
|
187
|
+
function opts_transcript(rawOutput, summary) {
|
|
188
|
+
// When `summaryOnly` is true, transcript === summary. We
|
|
189
|
+
// still pass the raw output as a fallback so the parent
|
|
190
|
+
// can recover more context if it asks for it explicitly.
|
|
191
|
+
return summary.length > 0 ? summary : rawOutput;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=subagent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../src/agent/subagent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry — local NDJSON sink + on-demand failure diagnosis.
|
|
3
|
+
*
|
|
4
|
+
* The original `logTelemetry` shipped a remote-only HTTP poster to
|
|
5
|
+
* the FreeLLMAPI server. Pillar 5 (Telemetry) replaces it with a
|
|
6
|
+
* first-class, *local-first* event store:
|
|
7
|
+
*
|
|
8
|
+
* - All events are appended to `~/.fixocli/telemetry.jsonl` in
|
|
9
|
+
* newline-delimited JSON. One event per line, easy to tail,
|
|
10
|
+
* grep, and post-process.
|
|
11
|
+
* - The legacy remote poster is preserved as an opt-in
|
|
12
|
+
* secondary sink (controlled by `preferences.telemetryRemote`).
|
|
13
|
+
* - The on-disk log is rotated at 1 MiB with a single `.1`
|
|
14
|
+
* backup, so disk usage is bounded.
|
|
15
|
+
* - `diagnoseFailures(windowMs)` reads the last N events and
|
|
16
|
+
* produces human-readable remediation hints — useful for
|
|
17
|
+
* `/diagnose` slash commands and for the post-mortem shown
|
|
18
|
+
* when a tool call exhausts its budget.
|
|
19
|
+
*
|
|
20
|
+
* The module is *side-effect free at import time*; the file is
|
|
21
|
+
* opened lazily on first write so the CLI cold-start is unaffected.
|
|
22
|
+
*
|
|
23
|
+
* The previous public surface — `logTelemetry(payload)` and the
|
|
24
|
+
* `TelemetryPayload` interface — is preserved so the 7 existing
|
|
25
|
+
* callsites in `worker-agent.ts` and `agent-pool.ts` keep working
|
|
26
|
+
* without modification. New code should prefer `TelemetrySink`
|
|
27
|
+
* directly.
|
|
28
|
+
*/
|
|
29
|
+
/** Discriminated union of every event the system can emit. */
|
|
30
|
+
export type TelemetryEventType = 'tool_call' | 'session_start' | 'session_end' | 'retry' | 'cooldown' | 'stream_resume' | 'stream_resume_exhausted' | 'context_budget' | 'provider_error' | 'tool_surgical_edit' | 'tool_glob' | 'tool_async_spawn' | 'subagent_summary' | 'fixo_md_loaded' | 'todo_mutation' | 'session_snapshot' | 'hook_fired' | 'permission_decision';
|
|
31
|
+
export interface TelemetryEvent {
|
|
32
|
+
/** ISO timestamp the event was recorded. */
|
|
33
|
+
readonly ts: string;
|
|
34
|
+
/** Discriminator — see {@link TelemetryEventType}. */
|
|
35
|
+
readonly type: TelemetryEventType;
|
|
36
|
+
/** Stable, anonymised machine id (not the user's hostname). */
|
|
37
|
+
readonly sid: string;
|
|
38
|
+
/** Free-form fields. The shape depends on `type`; see the
|
|
39
|
+
* per-type helpers below for ergonomic constructors. */
|
|
40
|
+
readonly fields: Readonly<Record<string, unknown>>;
|
|
41
|
+
}
|
|
42
|
+
/** Legacy payload shape preserved for `logTelemetry` compatibility. */
|
|
43
|
+
export interface TelemetryPayload {
|
|
44
|
+
id: string;
|
|
45
|
+
tool: string;
|
|
46
|
+
arguments: unknown;
|
|
47
|
+
status: 'started' | 'completed' | 'failed';
|
|
48
|
+
error?: string;
|
|
49
|
+
originalContent?: string;
|
|
50
|
+
newContent?: string;
|
|
51
|
+
}
|
|
52
|
+
export declare const telemetry: {
|
|
53
|
+
toolCall(fields: {
|
|
54
|
+
tool: string;
|
|
55
|
+
status: "started" | "completed" | "failed";
|
|
56
|
+
error?: string;
|
|
57
|
+
durationMs?: number;
|
|
58
|
+
}): TelemetryEvent;
|
|
59
|
+
retry(fields: {
|
|
60
|
+
fn: string;
|
|
61
|
+
attempt: number;
|
|
62
|
+
delayMs: number;
|
|
63
|
+
error: string;
|
|
64
|
+
}): TelemetryEvent;
|
|
65
|
+
cooldown(fields: {
|
|
66
|
+
providerId: string;
|
|
67
|
+
status: number | string;
|
|
68
|
+
cooldownMs: number;
|
|
69
|
+
reason: string;
|
|
70
|
+
}): TelemetryEvent;
|
|
71
|
+
streamResume(fields: {
|
|
72
|
+
resumeAttempt: number;
|
|
73
|
+
partialTokens: number;
|
|
74
|
+
ok: boolean;
|
|
75
|
+
reason?: string;
|
|
76
|
+
}): TelemetryEvent;
|
|
77
|
+
contextBudget(fields: {
|
|
78
|
+
tokensBefore: number;
|
|
79
|
+
tokensAfter: number;
|
|
80
|
+
actions: string[];
|
|
81
|
+
markedForCompaction: boolean;
|
|
82
|
+
}): TelemetryEvent;
|
|
83
|
+
providerError(fields: {
|
|
84
|
+
providerId: string;
|
|
85
|
+
status: number;
|
|
86
|
+
message: string;
|
|
87
|
+
}): TelemetryEvent;
|
|
88
|
+
sessionStart(fields: {
|
|
89
|
+
model: string;
|
|
90
|
+
cwd: string;
|
|
91
|
+
}): TelemetryEvent;
|
|
92
|
+
sessionEnd(fields: {
|
|
93
|
+
durationMs: number;
|
|
94
|
+
toolCalls: number;
|
|
95
|
+
totalTokens: number;
|
|
96
|
+
}): TelemetryEvent;
|
|
97
|
+
surgicalEdit(fields: {
|
|
98
|
+
path: string;
|
|
99
|
+
occurrences: number;
|
|
100
|
+
mode: string;
|
|
101
|
+
bytes: number;
|
|
102
|
+
}): TelemetryEvent;
|
|
103
|
+
glob(fields: {
|
|
104
|
+
pattern: string;
|
|
105
|
+
returned: number;
|
|
106
|
+
truncated: boolean;
|
|
107
|
+
}): TelemetryEvent;
|
|
108
|
+
fixoMdLoaded(fields: {
|
|
109
|
+
source: string;
|
|
110
|
+
bytes: number;
|
|
111
|
+
}): TelemetryEvent;
|
|
112
|
+
todoMutation(fields: {
|
|
113
|
+
op: string;
|
|
114
|
+
items: number;
|
|
115
|
+
id?: string;
|
|
116
|
+
}): TelemetryEvent;
|
|
117
|
+
sessionSnapshot(fields: {
|
|
118
|
+
id: string;
|
|
119
|
+
op: "save" | "load";
|
|
120
|
+
tokens: number;
|
|
121
|
+
items: number;
|
|
122
|
+
}): TelemetryEvent;
|
|
123
|
+
asyncSpawn(fields: {
|
|
124
|
+
jobId: string;
|
|
125
|
+
cmd: string;
|
|
126
|
+
pid?: number;
|
|
127
|
+
}): TelemetryEvent;
|
|
128
|
+
subagentSummary(fields: {
|
|
129
|
+
taskType: string;
|
|
130
|
+
inputTokens: number;
|
|
131
|
+
outputTokens: number;
|
|
132
|
+
durationMs: number;
|
|
133
|
+
}): TelemetryEvent;
|
|
134
|
+
hookFired(fields: {
|
|
135
|
+
hook: string;
|
|
136
|
+
phase: "pre" | "post";
|
|
137
|
+
matched: boolean;
|
|
138
|
+
durationMs: number;
|
|
139
|
+
}): TelemetryEvent;
|
|
140
|
+
permissionDecision(fields: {
|
|
141
|
+
tool: string;
|
|
142
|
+
pattern: string;
|
|
143
|
+
decision: string;
|
|
144
|
+
}): TelemetryEvent;
|
|
145
|
+
};
|
|
146
|
+
/** Path to the local NDJSON sink. Exposed for tests and the
|
|
147
|
+
* `/diagnose` slash command. */
|
|
148
|
+
export declare function getTelemetryPath(): string;
|
|
149
|
+
/**
|
|
150
|
+
* Append an event to the local NDJSON sink. The file is opened in
|
|
151
|
+
* append mode for every write — the cost of an open/close cycle
|
|
152
|
+
* is negligible compared to the JSON.stringify call.
|
|
153
|
+
*
|
|
154
|
+
* Returns true on success, false on any error. Errors are swallowed
|
|
155
|
+
* because telemetry must never break the calling code.
|
|
156
|
+
*/
|
|
157
|
+
export declare function recordTelemetry(event: TelemetryEvent): boolean;
|
|
158
|
+
/** Read the last N events (most recent last). Safe to call when the
|
|
159
|
+
* file is missing or empty — returns []. */
|
|
160
|
+
export declare function readRecentEvents(limit?: number): TelemetryEvent[];
|
|
161
|
+
/** Clear the local sink. Test-only; not exposed in the UI. */
|
|
162
|
+
export declare function clearTelemetry(): void;
|
|
163
|
+
export interface DiagnosisHint {
|
|
164
|
+
/** Short, human-readable summary. */
|
|
165
|
+
readonly summary: string;
|
|
166
|
+
/** Severity: info | warn | error. */
|
|
167
|
+
readonly severity: 'info' | 'warn' | 'error';
|
|
168
|
+
/** Number of matching events in the window. */
|
|
169
|
+
readonly count: number;
|
|
170
|
+
/** Suggested action for the user. */
|
|
171
|
+
readonly suggestion: string;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Scan the recent event window and return a prioritised list of
|
|
175
|
+
* remediation hints. Pure function — does not modify state.
|
|
176
|
+
*
|
|
177
|
+
* Rules implemented:
|
|
178
|
+
* - 3+ retries in the window → "Flaky network or rate-limit" (warn)
|
|
179
|
+
* - 1+ cooldown event → "Provider X is rate-limited" (warn)
|
|
180
|
+
* - 1+ stream_resume_exhausted → "Stream cuts not recovering" (error)
|
|
181
|
+
* - 1+ context_budget with compact → "Context is filling up" (info)
|
|
182
|
+
* - 3+ tool_call failures of same tool → "Tool X keeps failing" (warn)
|
|
183
|
+
* - 5+ provider_error in window → "Provider outage" (error)
|
|
184
|
+
*/
|
|
185
|
+
export declare function diagnoseFailures(windowMs?: number): DiagnosisHint[];
|
|
186
|
+
/**
|
|
187
|
+
* @deprecated Prefer the typed helpers on the `telemetry` object and
|
|
188
|
+
* `recordTelemetry()` directly. This wrapper maps a `TelemetryPayload`
|
|
189
|
+
* to a `tool_call` event.
|
|
190
|
+
*/
|
|
191
|
+
export declare function logTelemetry(payload: TelemetryPayload): Promise<void>;
|
|
192
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/agent/telemetry.ts"],"names":[],"mappings":"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"}
|