@nexrall/code-core 1.4.71 → 1.4.72
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/dist/agent/agentRegistry.d.ts.map +1 -1
- package/dist/agent/agentRegistry.js +28 -10
- package/dist/agent/agentTypes.d.ts.map +1 -1
- package/dist/agent/agentTypes.js +159 -48
- package/dist/agent/askOnce.d.ts.map +1 -1
- package/dist/agent/askOnce.js +14 -5
- package/dist/agent/backgroundAgents.d.ts.map +1 -1
- package/dist/agent/backgroundAgents.js +22 -8
- package/dist/agent/claimEvidence.d.ts.map +1 -1
- package/dist/agent/claimEvidence.js +2 -1
- package/dist/agent/compaction.d.ts.map +1 -1
- package/dist/agent/compaction.js +31 -10
- package/dist/agent/crossProcessLock.d.ts.map +1 -1
- package/dist/agent/crossProcessLock.js +14 -6
- package/dist/agent/editCompleteness.d.ts.map +1 -1
- package/dist/agent/fileLocks.d.ts.map +1 -1
- package/dist/agent/fileLocks.js +14 -5
- package/dist/agent/flaky.d.ts.map +1 -1
- package/dist/agent/hooks.d.ts.map +1 -1
- package/dist/agent/hooks.js +284 -75
- package/dist/agent/iterationPolicy.d.ts.map +1 -1
- package/dist/agent/iterationPolicy.js +26 -23
- package/dist/agent/lifecycleHost.d.ts.map +1 -1
- package/dist/agent/lifecycleHost.js +35 -11
- package/dist/agent/loop.d.ts +22 -4
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +223 -51
- package/dist/agent/memory.d.ts.map +1 -1
- package/dist/agent/memory.js +13 -7
- package/dist/agent/modelCatalogue.d.ts.map +1 -1
- package/dist/agent/modelCatalogue.js +4 -1
- package/dist/agent/nestedInstructions.d.ts +122 -0
- package/dist/agent/nestedInstructions.d.ts.map +1 -0
- package/dist/agent/nestedInstructions.js +696 -0
- package/dist/agent/peerRegistry.d.ts.map +1 -1
- package/dist/agent/peerRegistry.js +44 -6
- package/dist/agent/peerTransport.d.ts.map +1 -1
- package/dist/agent/peerTransport.js +18 -6
- package/dist/agent/planMode.d.ts.map +1 -1
- package/dist/agent/planMode.js +194 -41
- package/dist/agent/readDedupe.d.ts.map +1 -1
- package/dist/agent/readDedupe.js +3 -1
- package/dist/agent/securityLint.d.ts.map +1 -1
- package/dist/agent/sharedTasks.d.ts.map +1 -1
- package/dist/agent/sharedTasks.js +20 -5
- package/dist/agent/skills.d.ts +79 -0
- package/dist/agent/skills.d.ts.map +1 -1
- package/dist/agent/skills.js +403 -14
- package/dist/agent/subAgentBudget.d.ts.map +1 -1
- package/dist/agent/subTask.d.ts.map +1 -1
- package/dist/agent/subTask.js +87 -37
- package/dist/agent/subTaskSupport.d.ts.map +1 -1
- package/dist/agent/subTaskSupport.js +43 -14
- package/dist/agent/testIntegrity.d.ts.map +1 -1
- package/dist/agent/testIntegrity.js +4 -2
- package/dist/agent/toolDescriptions.d.ts.map +1 -1
- package/dist/agent/toolPrefetch.d.ts.map +1 -1
- package/dist/agent/toolPrefetch.js +15 -11
- package/dist/agent/trust.d.ts.map +1 -1
- package/dist/agent/trust.js +6 -2
- package/dist/agent/worktree.d.ts.map +1 -1
- package/dist/agent/worktree.js +70 -16
- package/dist/agent/worktreeEnforcement.d.ts.map +1 -1
- package/dist/agent/worktreeEnforcement.js +9 -4
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +63 -31
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +3 -1
- package/dist/checkpoint/manager.d.ts.map +1 -1
- package/dist/checkpoint/manager.js +22 -7
- package/dist/commands/loader.d.ts.map +1 -1
- package/dist/commands/loader.js +6 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/mcp/client.d.ts +34 -0
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +89 -24
- package/dist/mcp/httpClient.d.ts +24 -1
- package/dist/mcp/httpClient.d.ts.map +1 -1
- package/dist/mcp/httpClient.js +80 -14
- package/dist/mcp/instructions.d.ts +11 -0
- package/dist/mcp/instructions.d.ts.map +1 -0
- package/dist/mcp/instructions.js +42 -0
- package/dist/mcp/manager.d.ts +24 -0
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +117 -24
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +48 -14
- package/dist/mcp/sseClient.d.ts +9 -1
- package/dist/mcp/sseClient.d.ts.map +1 -1
- package/dist/mcp/sseClient.js +43 -10
- package/dist/mcp/stats.d.ts.map +1 -1
- package/dist/permissions/bashClassify.d.ts.map +1 -1
- package/dist/permissions/bashClassify.js +25 -3
- package/dist/permissions/destructive.d.ts.map +1 -1
- package/dist/permissions/destructive.js +7 -2
- package/dist/permissions/destructiveTokens.d.ts.map +1 -1
- package/dist/permissions/destructiveTokens.js +104 -24
- package/dist/permissions/modePolicy.d.ts.map +1 -1
- package/dist/permissions/modePolicy.js +40 -17
- package/dist/permissions/rules.d.ts.map +1 -1
- package/dist/permissions/rules.js +7 -5
- package/dist/plugins/data.d.ts.map +1 -1
- package/dist/plugins/data.js +6 -2
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +18 -7
- package/dist/plugins/installer.d.ts.map +1 -1
- package/dist/plugins/installer.js +17 -10
- package/dist/plugins/sources.d.ts.map +1 -1
- package/dist/plugins/sources.js +9 -3
- package/dist/tools/executor.d.ts.map +1 -1
- package/dist/tools/executor.js +454 -168
- package/dist/tools/sandbox.d.ts.map +1 -1
- package/dist/tools/sandbox.js +5 -1
- package/dist/tools/symbols.d.ts.map +1 -1
- package/dist/tools/symbols.js +30 -8
- package/dist/tools/tsLangService.d.ts.map +1 -1
- package/dist/tools/tsLangService.js +12 -4
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/util/frontmatter.d.ts.map +1 -1
- package/dist/util/miniYaml.d.ts.map +1 -1
- package/dist/util/miniYaml.js +3 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentRegistry.d.ts","sourceRoot":"","sources":["../../src/agent/agentRegistry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AA8CxC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;;;;;;;;;;OAcG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;;;OASG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAsDD,wBAAgB,gCAAgC,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"agentRegistry.d.ts","sourceRoot":"","sources":["../../src/agent/agentRegistry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AA8CxC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;;;;;;;;;;OAcG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;;;OASG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAsDD,wBAAgB,gCAAgC,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAUnE;AAED,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AAmDD,yEAAyE;AACzE,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO,EAAE,EACnB,UAAU,SAAS,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAoBR;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAG1F;AAED,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAiBtG;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAU5D;AAMD,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAIvD;AACD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,IAAI,WAAW,EAAE,CAE1C;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,qBAAqB,EAAE,CA8BzE;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAED,eAAO,MAAM,OAAO;;;CAAkC,CAAC"}
|
|
@@ -142,7 +142,8 @@ let _persistDir = null;
|
|
|
142
142
|
const PERSIST_MAX_FILES = 100;
|
|
143
143
|
const PERSIST_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1000;
|
|
144
144
|
function enableAgentTranscriptPersistence(dir) {
|
|
145
|
-
_persistDir =
|
|
145
|
+
_persistDir =
|
|
146
|
+
dir ?? process.env.NEXRALL_AGENT_TRANSCRIPTS_DIR ?? path.join(os.homedir(), '.nexrall', 'agent-transcripts');
|
|
146
147
|
try {
|
|
147
148
|
fs.mkdirSync(_persistDir, { recursive: true, mode: 0o700 });
|
|
148
149
|
}
|
|
@@ -152,7 +153,9 @@ function enableAgentTranscriptPersistence(dir) {
|
|
|
152
153
|
}
|
|
153
154
|
prunePersisted();
|
|
154
155
|
}
|
|
155
|
-
function disableAgentTranscriptPersistence() {
|
|
156
|
+
function disableAgentTranscriptPersistence() {
|
|
157
|
+
_persistDir = null;
|
|
158
|
+
}
|
|
156
159
|
function persistedPath(id) {
|
|
157
160
|
if (!_persistDir || !/^agent_\d+_[0-9a-f]{8}$/.test(id))
|
|
158
161
|
return null;
|
|
@@ -165,7 +168,9 @@ function persist(agent) {
|
|
|
165
168
|
try {
|
|
166
169
|
fs.writeFileSync(p, JSON.stringify(agent), { mode: 0o600 });
|
|
167
170
|
}
|
|
168
|
-
catch {
|
|
171
|
+
catch {
|
|
172
|
+
/* best effort */
|
|
173
|
+
}
|
|
169
174
|
}
|
|
170
175
|
function loadPersisted(id) {
|
|
171
176
|
const p = persistedPath(id);
|
|
@@ -187,14 +192,23 @@ function prunePersisted() {
|
|
|
187
192
|
if (!_persistDir)
|
|
188
193
|
return;
|
|
189
194
|
try {
|
|
190
|
-
const files = fs
|
|
191
|
-
.
|
|
195
|
+
const files = fs
|
|
196
|
+
.readdirSync(_persistDir)
|
|
197
|
+
.filter((f) => f.endsWith('.json'))
|
|
198
|
+
.map((f) => {
|
|
199
|
+
const full = path.join(_persistDir, f);
|
|
200
|
+
return { full, t: fs.statSync(full).mtimeMs };
|
|
201
|
+
})
|
|
192
202
|
.sort((a, b) => b.t - a.t);
|
|
193
203
|
const now = Date.now();
|
|
194
|
-
files.forEach((f, i) => {
|
|
195
|
-
|
|
204
|
+
files.forEach((f, i) => {
|
|
205
|
+
if (i >= PERSIST_MAX_FILES || now - f.t > PERSIST_MAX_AGE_MS)
|
|
206
|
+
fs.rmSync(f.full, { force: true });
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
/* best effort */
|
|
196
211
|
}
|
|
197
|
-
catch { /* best effort */ }
|
|
198
212
|
}
|
|
199
213
|
/** Store a finished sub-agent's transcript. Returns its resumable id. */
|
|
200
214
|
function rememberAgent(agentName, description, messages, ownerScope = 'root', sessionKey) {
|
|
@@ -275,7 +289,9 @@ function claimAgentForResume(id) {
|
|
|
275
289
|
_inUse.add(id);
|
|
276
290
|
return true;
|
|
277
291
|
}
|
|
278
|
-
function releaseAgentForResume(id) {
|
|
292
|
+
function releaseAgentForResume(id) {
|
|
293
|
+
_inUse.delete(id);
|
|
294
|
+
}
|
|
279
295
|
/** Newest first — the order a "which agents can I resume?" list wants. */
|
|
280
296
|
function listAgents() {
|
|
281
297
|
return [..._agents.values()].sort((a, b) => b.seq - a.seq);
|
|
@@ -320,7 +336,9 @@ function listPersistedAgents(dir) {
|
|
|
320
336
|
bytes: typeof a.bytes === 'number' ? a.bytes : 0,
|
|
321
337
|
});
|
|
322
338
|
}
|
|
323
|
-
catch {
|
|
339
|
+
catch {
|
|
340
|
+
/* one unreadable transcript must not blank the list */
|
|
341
|
+
}
|
|
324
342
|
}
|
|
325
343
|
return out.sort((x, y) => y.updatedAt - x.updatedAt);
|
|
326
344
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentTypes.d.ts","sourceRoot":"","sources":["../../src/agent/agentTypes.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAC;IACrE;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6GAA6G;IAC7G,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8GAA8G;IAC9G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+FAA+F;IAC/F,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,gHAAgH;IAChH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,+GAA+G;IAC/G,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,WAAW,cAAc;
|
|
1
|
+
{"version":3,"file":"agentTypes.d.ts","sourceRoot":"","sources":["../../src/agent/agentTypes.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/agentTypes.js
CHANGED
|
@@ -70,12 +70,19 @@ function parseMemoryScope(v) {
|
|
|
70
70
|
// to reintroduce by copy-pasting a list.
|
|
71
71
|
const READ_ONLY_TOOLS = [
|
|
72
72
|
// Universal
|
|
73
|
-
'read_file',
|
|
73
|
+
'read_file',
|
|
74
|
+
'search_files',
|
|
75
|
+
'glob',
|
|
76
|
+
'list_directory',
|
|
77
|
+
'bash',
|
|
78
|
+
'bash_output',
|
|
74
79
|
// kill_shell belongs next to bash_output: an agent that can start a background
|
|
75
80
|
// process and poll it but never stop it leaks that process past its own
|
|
76
81
|
// lifetime. Stopping a shell you started is not a write to the repo.
|
|
77
82
|
'kill_shell',
|
|
78
|
-
'notebook_read',
|
|
83
|
+
'notebook_read',
|
|
84
|
+
'todo_write',
|
|
85
|
+
'todo_read',
|
|
79
86
|
// memory_READ, deliberately without memory_write.
|
|
80
87
|
//
|
|
81
88
|
// Reading is free capability: a sub-agent that knows "tests run with X" or "never
|
|
@@ -97,8 +104,12 @@ const READ_ONLY_TOOLS = [
|
|
|
97
104
|
// one meant showing every sub-agent a menu it could not order from.
|
|
98
105
|
'use_skill',
|
|
99
106
|
// VS Code language server (ignored on the CLI)
|
|
100
|
-
'get_symbols',
|
|
101
|
-
'
|
|
107
|
+
'get_symbols',
|
|
108
|
+
'get_workspace_symbols',
|
|
109
|
+
'find_references',
|
|
110
|
+
'go_to_definition',
|
|
111
|
+
'get_hover',
|
|
112
|
+
'get_diagnostics',
|
|
102
113
|
];
|
|
103
114
|
/**
|
|
104
115
|
* Read-only + the network, for agents that must consult external sources.
|
|
@@ -145,7 +156,7 @@ const BUILTIN_AGENTS = [
|
|
|
145
156
|
'(edit files, run commands) and that no specialist above fits. Inherits the session model ' +
|
|
146
157
|
'and full tool access, so prefer a narrower agent when one matches.',
|
|
147
158
|
prompt: 'You are a general-purpose engineering sub-agent. Work the task end to end: explore what you ' +
|
|
148
|
-
|
|
159
|
+
"need, make the changes, and verify them with the project's own build/test commands.\n\n" +
|
|
149
160
|
'Rules:\n' +
|
|
150
161
|
'- Mirror existing conventions; make the smallest correct change.\n' +
|
|
151
162
|
'- Verify before you claim success. If you could not verify, say so explicitly.\n' +
|
|
@@ -183,7 +194,7 @@ const BUILTIN_AGENTS = [
|
|
|
183
194
|
'3. Follow the real call graph rather than guessing from names.',
|
|
184
195
|
'',
|
|
185
196
|
'Your ONLY output is a compact report: the file:line locations that matter, how they relate, and the',
|
|
186
|
-
|
|
197
|
+
"direct answer to the question you were given. This exists to keep bulk search OUT of the parent's",
|
|
187
198
|
'context, so do not paste large file contents back — cite locations and summarise. Say plainly when',
|
|
188
199
|
'something does not exist; a confident wrong answer is far worse than "not found".',
|
|
189
200
|
].join('\n'),
|
|
@@ -238,27 +249,71 @@ const BUILTIN_AGENTS = [
|
|
|
238
249
|
* exactly like fetch_url, so it no longer needs special-casing in that comment.
|
|
239
250
|
*/
|
|
240
251
|
const KNOWN_TOOL_NAMES = new Set([
|
|
241
|
-
'read_file',
|
|
242
|
-
'
|
|
243
|
-
'
|
|
244
|
-
'
|
|
245
|
-
'
|
|
246
|
-
'
|
|
252
|
+
'read_file',
|
|
253
|
+
'write_file',
|
|
254
|
+
'write_docx',
|
|
255
|
+
'write_xlsx',
|
|
256
|
+
'write_pptx',
|
|
257
|
+
'edit_file',
|
|
258
|
+
'multi_edit',
|
|
259
|
+
'list_directory',
|
|
260
|
+
'create_directory',
|
|
261
|
+
'move_file',
|
|
262
|
+
'copy_file',
|
|
263
|
+
'delete_file',
|
|
264
|
+
'search_files',
|
|
265
|
+
'glob',
|
|
266
|
+
'bash',
|
|
267
|
+
'bash_output',
|
|
268
|
+
'kill_shell',
|
|
269
|
+
'notebook_read',
|
|
270
|
+
'notebook_edit',
|
|
271
|
+
'todo_write',
|
|
272
|
+
'todo_read',
|
|
273
|
+
'memory_write',
|
|
274
|
+
'memory_read',
|
|
275
|
+
'use_skill',
|
|
276
|
+
'fetch_url',
|
|
277
|
+
'web_search',
|
|
278
|
+
'generate_image',
|
|
279
|
+
'stock_photo',
|
|
280
|
+
'open_in_browser',
|
|
281
|
+
'browser_action',
|
|
247
282
|
'task',
|
|
248
283
|
// Granted by a `memory:` scope rather than listed in a `tools:` line, but a user may
|
|
249
284
|
// still name it explicitly — so it must validate rather than be flagged as a typo.
|
|
250
285
|
'agent_memory_write',
|
|
251
|
-
'get_symbols',
|
|
252
|
-
'
|
|
286
|
+
'get_symbols',
|
|
287
|
+
'get_workspace_symbols',
|
|
288
|
+
'find_references',
|
|
289
|
+
'go_to_definition',
|
|
290
|
+
'get_hover',
|
|
291
|
+
'get_diagnostics',
|
|
253
292
|
]);
|
|
254
293
|
/** Frontmatter keys this parser understands, for typo detection. */
|
|
255
294
|
const KNOWN_META_KEYS = new Set([
|
|
256
|
-
'name',
|
|
295
|
+
'name',
|
|
296
|
+
'description',
|
|
297
|
+
'tools',
|
|
298
|
+
'model',
|
|
299
|
+
'test_files_only',
|
|
300
|
+
'testfilesonly',
|
|
257
301
|
'memory',
|
|
258
302
|
// Claude Code-compatible fields (keys arrive lowercased from parseFrontmatter).
|
|
259
|
-
'disallowedtools',
|
|
260
|
-
'
|
|
261
|
-
'
|
|
303
|
+
'disallowedtools',
|
|
304
|
+
'disallowed_tools',
|
|
305
|
+
'maxturns',
|
|
306
|
+
'max_turns',
|
|
307
|
+
'effort',
|
|
308
|
+
'background',
|
|
309
|
+
'isolation',
|
|
310
|
+
'permissionmode',
|
|
311
|
+
'permission_mode',
|
|
312
|
+
'color',
|
|
313
|
+
'skills',
|
|
314
|
+
'mcpservers',
|
|
315
|
+
'mcp_servers',
|
|
316
|
+
'hooks',
|
|
262
317
|
]);
|
|
263
318
|
/** Claude Code fields Nexrall recognises but does not implement — warned about by name. */
|
|
264
319
|
/** Claude Code fields Nexrall recognises but does not implement — warned about by name. */
|
|
@@ -270,11 +325,24 @@ const VALID_EFFORTS = ['low', 'medium', 'high', 'xhigh', 'max'];
|
|
|
270
325
|
* and an agent that silently cannot read). `mcp__server__tool` → `server__tool`.
|
|
271
326
|
*/
|
|
272
327
|
const CLAUDE_CODE_TOOL_ALIASES = {
|
|
273
|
-
read: 'read_file',
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
328
|
+
read: 'read_file',
|
|
329
|
+
write: 'write_file',
|
|
330
|
+
edit: 'edit_file',
|
|
331
|
+
multiedit: 'multi_edit',
|
|
332
|
+
grep: 'search_files',
|
|
333
|
+
glob: 'glob',
|
|
334
|
+
ls: 'list_directory',
|
|
335
|
+
bash: 'bash',
|
|
336
|
+
bashoutput: 'bash_output',
|
|
337
|
+
killshell: 'kill_shell',
|
|
338
|
+
killbash: 'kill_shell',
|
|
339
|
+
webfetch: 'fetch_url',
|
|
340
|
+
websearch: 'web_search',
|
|
341
|
+
todowrite: 'todo_write',
|
|
342
|
+
notebookread: 'notebook_read',
|
|
343
|
+
notebookedit: 'notebook_edit',
|
|
344
|
+
task: 'task',
|
|
345
|
+
agent: 'task',
|
|
278
346
|
};
|
|
279
347
|
function normaliseToolName(t) {
|
|
280
348
|
if (t.startsWith('mcp__'))
|
|
@@ -301,10 +369,17 @@ function normaliseToolName(t) {
|
|
|
301
369
|
// at all. Two independently-maintained model lists are exactly the kind of
|
|
302
370
|
// drift the shared parseFrontmatter migration was meant to end.
|
|
303
371
|
exports.VALID_MODELS = [
|
|
304
|
-
'claude-sonnet-5-5',
|
|
305
|
-
'
|
|
372
|
+
'claude-sonnet-5-5',
|
|
373
|
+
'claude-opus-5-5',
|
|
374
|
+
'claude-fable-5-1',
|
|
375
|
+
'gpt-5.4',
|
|
376
|
+
'gpt-5.4-mini',
|
|
377
|
+
'gpt-4.1',
|
|
306
378
|
// Legacy tier aliases — still accepted, still resolved by the backend.
|
|
307
|
-
'turbo',
|
|
379
|
+
'turbo',
|
|
380
|
+
'pro',
|
|
381
|
+
'ultra',
|
|
382
|
+
'fast',
|
|
308
383
|
];
|
|
309
384
|
/** The four tier aliases specifically (a subset of VALID_MODELS) — the only values `AgentType.model`/`Skill.model` narrow to when recognised; a real model id passes through as a plain string instead. */
|
|
310
385
|
exports.MODEL_TIER_ALIASES = ['turbo', 'pro', 'ultra', 'fast'];
|
|
@@ -359,7 +434,11 @@ function parseToolList(v) {
|
|
|
359
434
|
function parseNameList(v) {
|
|
360
435
|
if (!v)
|
|
361
436
|
return undefined;
|
|
362
|
-
const names = v
|
|
437
|
+
const names = v
|
|
438
|
+
.replace(/^\[|\]$/g, '')
|
|
439
|
+
.split(',')
|
|
440
|
+
.map((x) => x.trim().replace(/^['"]|['"]$/g, ''))
|
|
441
|
+
.filter(Boolean);
|
|
363
442
|
return names.length ? [...new Set(names)] : undefined;
|
|
364
443
|
}
|
|
365
444
|
function parsePositiveInt(v) {
|
|
@@ -392,7 +471,11 @@ function loadDir(dir, source, into, warnings) {
|
|
|
392
471
|
raw = fs.readFileSync(full, 'utf-8');
|
|
393
472
|
}
|
|
394
473
|
catch (err) {
|
|
395
|
-
warnings.push({
|
|
474
|
+
warnings.push({
|
|
475
|
+
file: full,
|
|
476
|
+
agent: path.basename(entry.name, '.md'),
|
|
477
|
+
message: `could not be read (${err.message}) — this agent was skipped`,
|
|
478
|
+
});
|
|
396
479
|
continue;
|
|
397
480
|
}
|
|
398
481
|
const { meta, body, ok } = (0, frontmatter_1.parseFrontmatter)(raw);
|
|
@@ -449,9 +532,8 @@ function loadDir(dir, source, into, warnings) {
|
|
|
449
532
|
// the `model: auto` bug where a file claimed one thing and the run did
|
|
450
533
|
// another. So: pass it on, but say something.
|
|
451
534
|
const declaredModel = meta.model === undefined ? undefined : parseModel(meta.model);
|
|
452
|
-
if (meta.model !== undefined
|
|
453
|
-
|
|
454
|
-
|| !exports.VALID_MODELS.includes(declaredModel))) {
|
|
535
|
+
if (meta.model !== undefined &&
|
|
536
|
+
(declaredModel === undefined || !exports.VALID_MODELS.includes(declaredModel))) {
|
|
455
537
|
warnings.push({
|
|
456
538
|
file: full,
|
|
457
539
|
agent: name,
|
|
@@ -483,7 +565,7 @@ function loadDir(dir, source, into, warnings) {
|
|
|
483
565
|
warnings.push({
|
|
484
566
|
file: full,
|
|
485
567
|
agent: name,
|
|
486
|
-
message:
|
|
568
|
+
message: "lists `task` as its ONLY tool, so it can delegate but cannot read, write or run anything itself — it has no way to do or verify work. Add the tools it needs, or drop the `tools:` line to inherit its parent's.",
|
|
487
569
|
});
|
|
488
570
|
}
|
|
489
571
|
const unsupported = Object.keys(meta).filter((k) => UNSUPPORTED_CC_KEYS.has(k));
|
|
@@ -504,20 +586,36 @@ function loadDir(dir, source, into, warnings) {
|
|
|
504
586
|
}
|
|
505
587
|
const eff = meta.effort?.trim().toLowerCase();
|
|
506
588
|
if (eff && !VALID_EFFORTS.includes(eff)) {
|
|
507
|
-
warnings.push({
|
|
589
|
+
warnings.push({
|
|
590
|
+
file: full,
|
|
591
|
+
agent: name,
|
|
592
|
+
message: `has effort: "${meta.effort}" — expected one of ${VALID_EFFORTS.join(', ')}. Ignored.`,
|
|
593
|
+
});
|
|
508
594
|
}
|
|
509
595
|
const mt = meta.maxturns ?? meta.max_turns;
|
|
510
596
|
if (mt !== undefined && parsePositiveInt(mt) === undefined) {
|
|
511
|
-
warnings.push({
|
|
597
|
+
warnings.push({
|
|
598
|
+
file: full,
|
|
599
|
+
agent: name,
|
|
600
|
+
message: `has maxTurns: "${mt}" — expected a positive integer. Ignored.`,
|
|
601
|
+
});
|
|
512
602
|
}
|
|
513
603
|
const iso = meta.isolation?.trim().toLowerCase();
|
|
514
604
|
if (iso && iso !== 'worktree') {
|
|
515
|
-
warnings.push({
|
|
605
|
+
warnings.push({
|
|
606
|
+
file: full,
|
|
607
|
+
agent: name,
|
|
608
|
+
message: `has isolation: "${meta.isolation}" — only "worktree" is supported. Ignored.`,
|
|
609
|
+
});
|
|
516
610
|
}
|
|
517
611
|
if (meta.hooks !== undefined) {
|
|
518
612
|
const parsed = parseAgentHooks(raw);
|
|
519
613
|
if (parsed.error) {
|
|
520
|
-
warnings.push({
|
|
614
|
+
warnings.push({
|
|
615
|
+
file: full,
|
|
616
|
+
agent: name,
|
|
617
|
+
message: `has an unusable hooks: block (${parsed.error}) — no hooks will run for this agent.`,
|
|
618
|
+
});
|
|
521
619
|
}
|
|
522
620
|
else {
|
|
523
621
|
agentHooks = parsed.hooks;
|
|
@@ -535,7 +633,7 @@ function loadDir(dir, source, into, warnings) {
|
|
|
535
633
|
warnings.push({
|
|
536
634
|
file: full,
|
|
537
635
|
agent: name,
|
|
538
|
-
message:
|
|
636
|
+
message: "has an empty body — the text below the frontmatter IS the agent's system prompt, so it currently has no instructions.",
|
|
539
637
|
});
|
|
540
638
|
}
|
|
541
639
|
}
|
|
@@ -588,16 +686,24 @@ function parseAgentHooks(raw) {
|
|
|
588
686
|
throw new Error(`${where}: expected a list of hooks`);
|
|
589
687
|
return list.map((h, i) => {
|
|
590
688
|
const o = h;
|
|
591
|
-
const ms = typeof o.timeout_ms === 'number' ? o.timeout_ms
|
|
592
|
-
: typeof o.timeout === 'number' ? o.timeout * 1000 : undefined;
|
|
689
|
+
const ms = typeof o.timeout_ms === 'number' ? o.timeout_ms : typeof o.timeout === 'number' ? o.timeout * 1000 : undefined;
|
|
593
690
|
const timeout = ms && ms > 0 ? { timeout_ms: ms } : {};
|
|
594
691
|
if (o && o.type === 'http' && typeof o.url === 'string' && o.url.trim()) {
|
|
595
692
|
if (!/^https?:\/\//i.test(o.url.trim()))
|
|
596
693
|
throw new Error(`${where}[${i}]: http hooks need an http(s) url`);
|
|
597
694
|
const headers = o.headers && typeof o.headers === 'object' && !Array.isArray(o.headers)
|
|
598
|
-
? o.headers
|
|
599
|
-
|
|
600
|
-
|
|
695
|
+
? o.headers
|
|
696
|
+
: undefined;
|
|
697
|
+
const allowed = Array.isArray(o.allowedEnvVars)
|
|
698
|
+
? o.allowedEnvVars.filter((v) => typeof v === 'string')
|
|
699
|
+
: undefined;
|
|
700
|
+
return {
|
|
701
|
+
type: 'http',
|
|
702
|
+
url: o.url.trim(),
|
|
703
|
+
...(headers ? { headers } : {}),
|
|
704
|
+
...(allowed ? { allowedEnvVars: allowed } : {}),
|
|
705
|
+
...timeout,
|
|
706
|
+
};
|
|
601
707
|
}
|
|
602
708
|
if (!o || o.type !== 'command' || typeof o.command !== 'string' || !o.command.trim()) {
|
|
603
709
|
throw new Error(`${where}[${i}]: each hook needs type: command and a command, or type: http and a url`);
|
|
@@ -750,9 +856,7 @@ function summariseAgents(types) {
|
|
|
750
856
|
return types
|
|
751
857
|
.map((t) => {
|
|
752
858
|
const canWrite = !t.tools || t.tools.some((x) => WRITE_TOOL_HINTS.has(x));
|
|
753
|
-
const access = t.testFilesOnly
|
|
754
|
-
? 'writes TEST files only'
|
|
755
|
-
: canWrite ? 'can modify files' : 'read-only';
|
|
859
|
+
const access = t.testFilesOnly ? 'writes TEST files only' : canWrite ? 'can modify files' : 'read-only';
|
|
756
860
|
const model = t.model === 'cheapest' ? ', fast low-cost model' : t.model ? `, ${t.model} model` : '';
|
|
757
861
|
return `- ${t.name} (${access}${model}): ${t.description}`;
|
|
758
862
|
})
|
|
@@ -760,9 +864,16 @@ function summariseAgents(types) {
|
|
|
760
864
|
}
|
|
761
865
|
/** Tool names that imply write access, for the summary line above. */
|
|
762
866
|
const WRITE_TOOL_HINTS = new Set([
|
|
763
|
-
'write_file',
|
|
764
|
-
'
|
|
765
|
-
'
|
|
867
|
+
'write_file',
|
|
868
|
+
'edit_file',
|
|
869
|
+
'multi_edit',
|
|
870
|
+
'notebook_edit',
|
|
871
|
+
'delete_file',
|
|
872
|
+
'move_file',
|
|
873
|
+
'copy_file',
|
|
874
|
+
'write_docx',
|
|
875
|
+
'write_xlsx',
|
|
876
|
+
'write_pptx',
|
|
766
877
|
]);
|
|
767
878
|
function findAgentType(types, name) {
|
|
768
879
|
if (!name)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"askOnce.d.ts","sourceRoot":"","sources":["../../src/agent/askOnce.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAgB,UAAU,EAAW,MAAM,UAAU,CAAC;AAKlE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CACpC;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"askOnce.d.ts","sourceRoot":"","sources":["../../src/agent/askOnce.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAgB,UAAU,EAAW,MAAM,UAAU,CAAC;AAKlE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CACpC;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwC/F"}
|
package/dist/agent/askOnce.js
CHANGED
|
@@ -10,10 +10,14 @@ const client_1 = require("../api/client");
|
|
|
10
10
|
const NO_TOOLS_MARKER = '\u0000hook-no-tools';
|
|
11
11
|
async function askModelOnce(prompt, opts) {
|
|
12
12
|
const ctl = { aborted: false };
|
|
13
|
-
const timer = setTimeout(() => {
|
|
13
|
+
const timer = setTimeout(() => {
|
|
14
|
+
ctl.aborted = true;
|
|
15
|
+
}, Math.max(1000, opts.timeoutMs ?? 45000));
|
|
14
16
|
const poll = opts.abortSignal
|
|
15
|
-
? setInterval(() => {
|
|
16
|
-
|
|
17
|
+
? setInterval(() => {
|
|
18
|
+
if (opts.abortSignal?.aborted)
|
|
19
|
+
ctl.aborted = true;
|
|
20
|
+
}, 100)
|
|
17
21
|
: undefined;
|
|
18
22
|
try {
|
|
19
23
|
if (opts.abortSignal?.aborted)
|
|
@@ -24,9 +28,14 @@ async function askModelOnce(prompt, opts) {
|
|
|
24
28
|
env: opts.env ?? { cwd: opts.cwd },
|
|
25
29
|
abortSignal: ctl,
|
|
26
30
|
toolAllowlist: [NO_TOOLS_MARKER],
|
|
27
|
-
}, () => {
|
|
31
|
+
}, () => {
|
|
32
|
+
/* the final message carries the text */
|
|
33
|
+
});
|
|
28
34
|
const blocks = Array.isArray(msg.content) ? msg.content : [];
|
|
29
|
-
const text = blocks
|
|
35
|
+
const text = blocks
|
|
36
|
+
.filter((b) => b.type === 'text' && typeof b.text === 'string')
|
|
37
|
+
.map((b) => b.text)
|
|
38
|
+
.join('\n');
|
|
30
39
|
return ctl.aborted ? null : text;
|
|
31
40
|
}
|
|
32
41
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backgroundAgents.d.ts","sourceRoot":"","sources":["../../src/agent/backgroundAgents.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,OAAO,CAAK;IAEpB;;;OAGG;IACH,KAAK,CACH,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAChD,GAAG,EAAE,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC;QAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,UAAU,CAAC,GACpG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"backgroundAgents.d.ts","sourceRoot":"","sources":["../../src/agent/backgroundAgents.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,OAAO,CAAK;IAEpB;;;OAGG;IACH,KAAK,CACH,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAChD,GAAG,EAAE,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC;QAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,UAAU,CAAC,GACpG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;IAgCrC,OAAO,CAAC,MAAM;IAwBd,oCAAoC;IACpC,IAAI,IAAI,mBAAmB,EAAE;IAM7B,YAAY,IAAI,MAAM;IAMtB,UAAU,IAAI,OAAO;IAIrB,sDAAsD;IACtD,iBAAiB,IAAI,sBAAsB,EAAE;IAM7C,wFAAwF;IACxF,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAOzB,qFAAqF;IACrF,OAAO,CAAC,IAAI,GAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI;IAMnD,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAOpC,OAAO,CAAC,IAAI;CASb;AAOD,oEAAoE;AACpE,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAcpF"}
|
|
@@ -47,7 +47,11 @@ class BackgroundAgentHub {
|
|
|
47
47
|
};
|
|
48
48
|
this.entries.set(id, entry);
|
|
49
49
|
this.emit();
|
|
50
|
-
const onToolUse = (name) => {
|
|
50
|
+
const onToolUse = (name) => {
|
|
51
|
+
entry.toolCalls++;
|
|
52
|
+
entry.lastTool = name;
|
|
53
|
+
this.emit();
|
|
54
|
+
};
|
|
51
55
|
void run({ abort: entry.abort, onToolUse })
|
|
52
56
|
.catch((err) => ({ error: `Background agent crashed: ${err?.message ?? err}` }))
|
|
53
57
|
.then((result) => this.finish(entry, result));
|
|
@@ -59,8 +63,10 @@ class BackgroundAgentHub {
|
|
|
59
63
|
entry.status = entry.abort.aborted ? 'stopped' : result.error !== undefined ? 'failed' : 'completed';
|
|
60
64
|
entry.finishedAt = Date.now();
|
|
61
65
|
const text = entry.status === 'stopped'
|
|
62
|
-
?
|
|
63
|
-
:
|
|
66
|
+
? result.output || result.error || '(stopped before it produced a report)'
|
|
67
|
+
: result.error !== undefined
|
|
68
|
+
? result.error
|
|
69
|
+
: (result.output ?? '');
|
|
64
70
|
this.pending.push({
|
|
65
71
|
id: entry.id,
|
|
66
72
|
description: entry.description,
|
|
@@ -87,7 +93,9 @@ class BackgroundAgentHub {
|
|
|
87
93
|
n++;
|
|
88
94
|
return n;
|
|
89
95
|
}
|
|
90
|
-
hasPending() {
|
|
96
|
+
hasPending() {
|
|
97
|
+
return this.pending.length > 0;
|
|
98
|
+
}
|
|
91
99
|
/** Remove and return every undelivered completion. */
|
|
92
100
|
takeNotifications() {
|
|
93
101
|
const out = this.pending.splice(0);
|
|
@@ -114,14 +122,18 @@ class BackgroundAgentHub {
|
|
|
114
122
|
/** Subscribe to any change (start, progress, finish, delivery). Returns an unsubscribe. */
|
|
115
123
|
onChange(cb) {
|
|
116
124
|
this.listeners.add(cb);
|
|
117
|
-
return () => {
|
|
125
|
+
return () => {
|
|
126
|
+
this.listeners.delete(cb);
|
|
127
|
+
};
|
|
118
128
|
}
|
|
119
129
|
emit() {
|
|
120
130
|
for (const cb of [...this.listeners]) {
|
|
121
131
|
try {
|
|
122
132
|
cb();
|
|
123
133
|
}
|
|
124
|
-
catch {
|
|
134
|
+
catch {
|
|
135
|
+
/* a broken listener must not break the agents */
|
|
136
|
+
}
|
|
125
137
|
}
|
|
126
138
|
}
|
|
127
139
|
}
|
|
@@ -132,7 +144,8 @@ function fmtDuration(ms) {
|
|
|
132
144
|
}
|
|
133
145
|
/** The text block a notification becomes in the model's context. */
|
|
134
146
|
function formatBackgroundNotifications(list) {
|
|
135
|
-
return list
|
|
147
|
+
return list
|
|
148
|
+
.map((n) => {
|
|
136
149
|
const verb = n.status === 'completed' ? 'completed' : n.status === 'failed' ? 'FAILED' : 'was stopped';
|
|
137
150
|
return (`<task-notification>\n` +
|
|
138
151
|
`Background agent "${n.description}" (${n.agentType}, id ${n.id}) ${verb} after ` +
|
|
@@ -140,6 +153,7 @@ function formatBackgroundNotifications(list) {
|
|
|
140
153
|
`not a message from the user. Its report (the user has NOT seen it — relay what matters):\n\n` +
|
|
141
154
|
`${n.text.trim() || '(no text output)'}\n` +
|
|
142
155
|
`</task-notification>`);
|
|
143
|
-
})
|
|
156
|
+
})
|
|
157
|
+
.join('\n\n');
|
|
144
158
|
}
|
|
145
159
|
//# sourceMappingURL=backgroundAgents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claimEvidence.d.ts","sourceRoot":"","sources":["../../src/agent/claimEvidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,GAAG,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,EAAE,EAAE,OAAO,CAAC;IACZ,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,YAAY,EAAE,OAAO,CAAC;IACtB,oFAAoF;IACpF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;CAChB;AAiCD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"claimEvidence.d.ts","sourceRoot":"","sources":["../../src/agent/claimEvidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,GAAG,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,EAAE,EAAE,OAAO,CAAC;IACZ,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,YAAY,EAAE,OAAO,CAAC;IACtB,oFAAoF;IACpF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;CAChB;AAiCD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA2B/D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,kBAAkB,EAAE,EACnC,YAAY,EAAE,MAAM,GACnB,mBAAmB,CA6BrB;AAED,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAQ1E"}
|
|
@@ -131,7 +131,8 @@ function checkClaimEvidence(finalText, verifications, currentEpoch) {
|
|
|
131
131
|
}
|
|
132
132
|
else {
|
|
133
133
|
// Only stale passes (from before the latest edit) exist.
|
|
134
|
-
reason =
|
|
134
|
+
reason =
|
|
135
|
+
'the last passing verification predates your most recent code change, so it no longer proves the current code works';
|
|
135
136
|
}
|
|
136
137
|
return { claimed: true, contradicted: true, claimPhrases, reason };
|
|
137
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/agent/compaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAgB,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAIpF,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAyB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAiCnE,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0CvD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGvD;AAmDD,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CASpC;AAED,kHAAkH;AAClH,wBAAgB,oBAAoB,CAClC,aAAa,SAAY,EACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAGpC;AAMD,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/agent/compaction.ts"],"names":[],"mappings":"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"}
|