zelari-code 2.7.0 → 2.9.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.
Files changed (70) hide show
  1. package/README.md +10 -2
  2. package/dist/cli/budget/modelContextBuilder.js +17 -17
  3. package/dist/cli/budget/modelContextBuilder.js.map +1 -1
  4. package/dist/cli/budget/resourceSnapshot.js +3 -3
  5. package/dist/cli/budget/tokenBudget.js +8 -8
  6. package/dist/cli/budget/tokenBudget.js.map +1 -1
  7. package/dist/cli/hooks/conversationContext.js +1 -1
  8. package/dist/cli/hooks/conversationContext.js.map +1 -1
  9. package/dist/cli/hooks/useChatTurn.js +116 -3
  10. package/dist/cli/hooks/useChatTurn.js.map +1 -1
  11. package/dist/cli/hooks/useSlashDispatch.js +7 -0
  12. package/dist/cli/hooks/useSlashDispatch.js.map +1 -1
  13. package/dist/cli/kraken/executor.js +73 -0
  14. package/dist/cli/kraken/executor.js.map +1 -1
  15. package/dist/cli/main.bundled.js +5647 -1635
  16. package/dist/cli/main.bundled.js.map +4 -4
  17. package/dist/cli/main.js +46 -0
  18. package/dist/cli/main.js.map +1 -1
  19. package/dist/cli/memory/fileBackend.js +8 -0
  20. package/dist/cli/memory/fileBackend.js.map +1 -1
  21. package/dist/cli/memory/jsonApi.js +83 -0
  22. package/dist/cli/memory/jsonApi.js.map +1 -0
  23. package/dist/cli/memory/legacyImport.js +91 -0
  24. package/dist/cli/memory/legacyImport.js.map +1 -0
  25. package/dist/cli/memory/mcpAdapter.js +255 -0
  26. package/dist/cli/memory/mcpAdapter.js.map +1 -0
  27. package/dist/cli/memory/mcpCli.js +19 -0
  28. package/dist/cli/memory/mcpCli.js.map +1 -0
  29. package/dist/cli/memory/mcpServer.js +126 -0
  30. package/dist/cli/memory/mcpServer.js.map +1 -0
  31. package/dist/cli/memory/promotion.js +68 -0
  32. package/dist/cli/memory/promotion.js.map +1 -0
  33. package/dist/cli/memory/serviceFactory.js +94 -0
  34. package/dist/cli/memory/serviceFactory.js.map +1 -0
  35. package/dist/cli/memory/sqliteBackend.js +636 -0
  36. package/dist/cli/memory/sqliteBackend.js.map +1 -0
  37. package/dist/cli/memory/sqliteCodec.js +114 -0
  38. package/dist/cli/memory/sqliteCodec.js.map +1 -0
  39. package/dist/cli/memory/sqliteRpc.js +120 -0
  40. package/dist/cli/memory/sqliteRpc.js.map +1 -0
  41. package/dist/cli/memory/sqliteSchema.js +181 -0
  42. package/dist/cli/memory/sqliteSchema.js.map +1 -0
  43. package/dist/cli/memory/sqliteWorker.mjs +264 -0
  44. package/dist/cli/missionSlice.js +1 -0
  45. package/dist/cli/missionSlice.js.map +1 -1
  46. package/dist/cli/provider/capabilities.js +108 -39
  47. package/dist/cli/provider/capabilities.js.map +1 -1
  48. package/dist/cli/provider/openai-compatible.js +21 -6
  49. package/dist/cli/provider/openai-compatible.js.map +1 -1
  50. package/dist/cli/runHeadless.js +114 -81
  51. package/dist/cli/runHeadless.js.map +1 -1
  52. package/dist/cli/semantic/embeddings.js +13 -1
  53. package/dist/cli/semantic/embeddings.js.map +1 -1
  54. package/dist/cli/semantic/provider.js +11 -2
  55. package/dist/cli/semantic/provider.js.map +1 -1
  56. package/dist/cli/sessionSpine.js +1 -1
  57. package/dist/cli/sessionSpine.js.map +1 -1
  58. package/dist/cli/slashCommands.js +10 -0
  59. package/dist/cli/slashCommands.js.map +1 -1
  60. package/dist/cli/slashHandlers/krakenGraph.js +11 -0
  61. package/dist/cli/slashHandlers/krakenGraph.js.map +1 -1
  62. package/dist/cli/slashHandlers/memory.js +239 -0
  63. package/dist/cli/slashHandlers/memory.js.map +1 -0
  64. package/dist/cli/toolRegistry.js +4 -0
  65. package/dist/cli/toolRegistry.js.map +1 -1
  66. package/dist/cli/tools/taskTool.js +45 -0
  67. package/dist/cli/tools/taskTool.js.map +1 -1
  68. package/dist/cli/zelariMission.js +6 -0
  69. package/dist/cli/zelariMission.js.map +1 -1
  70. package/package.json +4 -3
@@ -0,0 +1,264 @@
1
+ import { parentPort } from 'node:worker_threads';
2
+ import { backup, DatabaseSync } from 'node:sqlite';
3
+ import { createHash } from 'node:crypto';
4
+ import { closeSync, existsSync, openSync, readFileSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
5
+
6
+ if (!parentPort) throw new Error('sqliteWorker must run inside a worker thread');
7
+
8
+ let database = null;
9
+
10
+ function waitSync(ms) {
11
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
12
+ }
13
+
14
+ function acquireMigrationLock(dbPath, timeoutMs = 10_000) {
15
+ if (!dbPath || dbPath === ':memory:') return { path: null, fd: null };
16
+ const lockPath = `${dbPath}.migration.lock`;
17
+ const started = Date.now();
18
+ while (true) {
19
+ try {
20
+ const fd = openSync(lockPath, 'wx');
21
+ writeFileSync(fd, JSON.stringify({ pid: process.pid, createdAt: new Date().toISOString() }));
22
+ return { path: lockPath, fd };
23
+ } catch (error) {
24
+ if (error?.code !== 'EEXIST') throw error;
25
+ try {
26
+ if (Date.now() - statSync(lockPath).mtimeMs > 300_000) {
27
+ let ownerAlive = false;
28
+ try {
29
+ const owner = JSON.parse(readFileSync(lockPath, 'utf8'));
30
+ if (Number.isInteger(owner?.pid) && owner.pid > 0) {
31
+ try { process.kill(owner.pid, 0); ownerAlive = true; } catch {}
32
+ }
33
+ } catch {}
34
+ if (!ownerAlive) unlinkSync(lockPath);
35
+ }
36
+ } catch (statError) {
37
+ if (statError?.code !== 'ENOENT') throw statError;
38
+ }
39
+ if (Date.now() - started >= timeoutMs) {
40
+ const locked = new Error(`Timed out waiting for memory migration lock: ${lockPath}`);
41
+ locked.code = 'ZELARI_MEMORY_MIGRATION_LOCKED';
42
+ throw locked;
43
+ }
44
+ waitSync(50);
45
+ }
46
+ }
47
+ }
48
+
49
+ function releaseMigrationLock(lock) {
50
+ if (lock.fd !== null) {
51
+ try { closeSync(lock.fd); } catch {}
52
+ }
53
+ if (lock.path) {
54
+ try { unlinkSync(lock.path); } catch {}
55
+ }
56
+ }
57
+
58
+ function invoke(statement, mode, params = []) {
59
+ const fn = statement[mode];
60
+ if (typeof fn !== 'function') throw new Error(`Unsupported SQLite statement mode: ${mode}`);
61
+ return Array.isArray(params) ? fn.call(statement, ...params) : fn.call(statement, params);
62
+ }
63
+
64
+ function executeStep(step) {
65
+ const statement = database.prepare(step.sql);
66
+ const result = invoke(statement, step.mode ?? 'run', step.params ?? []);
67
+ if (step.mode === 'run' || !step.mode) {
68
+ return {
69
+ changes: Number(result.changes ?? 0),
70
+ lastInsertRowid: String(result.lastInsertRowid ?? ''),
71
+ };
72
+ }
73
+ return result;
74
+ }
75
+
76
+ function hashContent(content) {
77
+ return createHash('sha256').update(String(content ?? '')).digest('hex');
78
+ }
79
+
80
+ function decodeVector(value, dimensions) {
81
+ if (typeof value !== 'string') return null;
82
+ try {
83
+ const vector = JSON.parse(value);
84
+ const expected = Number(dimensions);
85
+ return Array.isArray(vector) && vector.length === expected && vector.length > 0 &&
86
+ vector.every((item) => typeof item === 'number' && Number.isFinite(item))
87
+ ? vector
88
+ : null;
89
+ } catch { return null; }
90
+ }
91
+
92
+ function cosine(left, right) {
93
+ if (!left.length || left.length !== right.length) return 0;
94
+ let dot = 0;
95
+ let leftNorm = 0;
96
+ let rightNorm = 0;
97
+ for (let index = 0; index < left.length; index += 1) {
98
+ dot += left[index] * right[index];
99
+ leftNorm += left[index] * left[index];
100
+ rightNorm += right[index] * right[index];
101
+ }
102
+ return leftNorm && rightNorm ? dot / (Math.sqrt(leftNorm) * Math.sqrt(rightNorm)) : 0;
103
+ }
104
+
105
+ const handlers = {
106
+ async open(args) {
107
+ if (database) return { fts: true };
108
+ const lock = acquireMigrationLock(args.dbPath, args.migrationLockTimeoutMs ?? 30_000);
109
+ try {
110
+ database = new DatabaseSync(args.dbPath, {
111
+ timeout: args.timeoutMs ?? 5_000,
112
+ enableForeignKeyConstraints: true,
113
+ });
114
+ const row = database.prepare('PRAGMA user_version').get();
115
+ const currentVersion = Number(row?.user_version ?? 0);
116
+ if (currentVersion > args.schemaVersion) {
117
+ const error = new Error(
118
+ `Memory database schema v${currentVersion} is newer than runtime v${args.schemaVersion}; refusing to downgrade.`,
119
+ );
120
+ error.code = 'ZELARI_MEMORY_SCHEMA_NEWER';
121
+ throw error;
122
+ }
123
+ let migratedFrom;
124
+ let backupPath;
125
+ if (currentVersion === 0) {
126
+ database.exec(args.schemaSql);
127
+ database.exec(`PRAGMA user_version = ${Number(args.schemaVersion)}`);
128
+ } else if (currentVersion < args.schemaVersion) {
129
+ migratedFrom = currentVersion;
130
+ const baseBackupPath = `${args.dbPath}.v${currentVersion}.bak`;
131
+ backupPath = existsSync(baseBackupPath)
132
+ ? `${baseBackupPath}.${Date.now()}`
133
+ : baseBackupPath;
134
+ await backup(database, backupPath);
135
+ const migrations = [...(args.migrations ?? [])]
136
+ .filter((migration) => migration.version > currentVersion && migration.version <= args.schemaVersion)
137
+ .sort((a, b) => a.version - b.version);
138
+ let expected = currentVersion + 1;
139
+ for (const migration of migrations) {
140
+ if (migration.version !== expected) {
141
+ const error = new Error(`Missing memory migration v${expected} -> v${migration.version}.`);
142
+ error.code = 'ZELARI_MEMORY_MIGRATION_GAP';
143
+ throw error;
144
+ }
145
+ database.exec('BEGIN EXCLUSIVE');
146
+ try {
147
+ database.exec(migration.sql);
148
+ database.exec(`PRAGMA user_version = ${Number(migration.version)}`);
149
+ database.exec('COMMIT');
150
+ } catch (error) {
151
+ try { database.exec('ROLLBACK'); } catch {}
152
+ throw error;
153
+ }
154
+ expected += 1;
155
+ }
156
+ if (expected - 1 !== args.schemaVersion) {
157
+ const error = new Error(`No complete migration path from v${currentVersion} to v${args.schemaVersion}.`);
158
+ error.code = 'ZELARI_MEMORY_MIGRATION_GAP';
159
+ throw error;
160
+ }
161
+ database.exec(args.schemaSql);
162
+ } else {
163
+ database.exec(args.schemaSql);
164
+ }
165
+ let fts = true;
166
+ try {
167
+ database.exec(args.ftsSql);
168
+ } catch {
169
+ fts = false;
170
+ }
171
+ return { fts, migratedFrom, backupPath };
172
+ } catch (error) {
173
+ try { database?.close(); } catch {}
174
+ database = null;
175
+ throw error;
176
+ } finally {
177
+ releaseMigrationLock(lock);
178
+ }
179
+ },
180
+ exec(args) {
181
+ database.exec(args.sql);
182
+ return null;
183
+ },
184
+ statement(args) {
185
+ return executeStep(args);
186
+ },
187
+ vectorSearch(args) {
188
+ const rows = invoke(database.prepare(args.sql), 'all', args.params ?? []);
189
+ const scored = [];
190
+ for (const row of rows) {
191
+ const vector = decodeVector(row.vector_json, row.dimensions);
192
+ if (!vector || vector.length !== args.vector.length) continue;
193
+ if (row.content_hash !== hashContent(row.content)) continue;
194
+ scored.push({
195
+ ...row,
196
+ semantic_relevance: Math.max(0, Math.min(1, cosine(args.vector, vector))),
197
+ });
198
+ }
199
+ scored.sort((left, right) =>
200
+ right.semantic_relevance - left.semantic_relevance ||
201
+ Number(right.importance ?? 0) - Number(left.importance ?? 0));
202
+ return scored.slice(0, Math.max(1, Number(args.limit) || 1));
203
+ },
204
+ semanticStatus(args) {
205
+ const rows = database.prepare(`SELECT n.content, e.content_hash, e.dimensions,
206
+ e.vector_json, e.indexed_at FROM memory_nodes n LEFT JOIN memory_embeddings e
207
+ ON e.memory_id=n.id AND e.model=? WHERE n.project_id=? AND n.status='active'`)
208
+ .all(args.model, args.projectId);
209
+ let indexed = 0;
210
+ let stale = 0;
211
+ let corrupt = 0;
212
+ let lastIndexedAt;
213
+ for (const row of rows) {
214
+ const vector = decodeVector(row.vector_json, row.dimensions);
215
+ const fresh = vector && row.content_hash === hashContent(row.content);
216
+ if (fresh) {
217
+ indexed += 1;
218
+ if (typeof row.indexed_at === 'string' && (!lastIndexedAt || row.indexed_at > lastIndexedAt)) {
219
+ lastIndexedAt = row.indexed_at;
220
+ }
221
+ } else {
222
+ stale += 1;
223
+ if (row.vector_json !== null && row.vector_json !== undefined) corrupt += 1;
224
+ }
225
+ }
226
+ return { indexed, stale, corrupt, lastIndexedAt };
227
+ },
228
+ batch(args) {
229
+ database.exec(args.immediate === false ? 'BEGIN' : 'BEGIN IMMEDIATE');
230
+ try {
231
+ const results = args.steps.map(executeStep);
232
+ database.exec('COMMIT');
233
+ return results;
234
+ } catch (error) {
235
+ try { database.exec('ROLLBACK'); } catch {}
236
+ throw error;
237
+ }
238
+ },
239
+ close() {
240
+ database?.close();
241
+ database = null;
242
+ return null;
243
+ },
244
+ };
245
+
246
+ parentPort.on('message', async ({ id, operation, args }) => {
247
+ try {
248
+ const handler = handlers[operation];
249
+ if (!handler) throw new Error(`Unknown SQLite worker operation: ${operation}`);
250
+ parentPort.postMessage({ id, ok: true, value: await handler(args ?? {}) });
251
+ } catch (error) {
252
+ parentPort.postMessage({
253
+ id,
254
+ ok: false,
255
+ error: {
256
+ name: error?.name ?? 'Error',
257
+ message: error?.message ?? String(error),
258
+ stack: error?.stack,
259
+ code: error?.code,
260
+ errcode: error?.errcode,
261
+ },
262
+ });
263
+ }
264
+ });
@@ -162,6 +162,7 @@ export async function runAgentMissionSlice(deps) {
162
162
  tools: toolSpecs,
163
163
  toolRegistry: deps.toolRegistry,
164
164
  providerStream: deps.providerStream,
165
+ buildLiveness: { mutationRequired: writeRetry, maxRecoveries: 2 },
165
166
  cwd: deps.projectRoot,
166
167
  maxToolCallsPerTurn: maxToolCalls,
167
168
  maxToolLoopIterations: maxToolLoop,
@@ -1 +1 @@
1
- {"version":3,"file":"missionSlice.js","sourceRoot":"","sources":["../../src/cli/missionSlice.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAyB,MAAM,sBAAsB,CAAC;AAI3E,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mCAAmC,EACnC,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAEpE,gEAAgE;AAChE,MAAM,CAAC,MAAM,kCAAkC,GAC7C,8DAA8D;IAC9D,iHAAiH;IACjH,4EAA4E;IAC5E,oDAAoD,CAAC;AAOvD;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAWhC,MAAM,KAAK,GAAoB,EAAE,gBAAgB,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IACzE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,OAAO;QACL,KAAK;QACL,OAAO,CAAC,KAAK;YACX,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;gBAChD,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;gBAClC,IAAI,EAAE,IAAI,IAAI;oBAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACtC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBACxC,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;gBACnE,IAAI,EAAE;oBAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO;oBAAE,OAAO;gBACjD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBAC1C,MAAM,QAAQ,GACZ,IAAI,KAAK,WAAW;oBACpB,gEAAgE,CAAC,IAAI,CACnE,MAAM,CACP,CAAC;gBACJ,IAAI,CAAC,QAAQ;oBAAE,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,WAAmB,EACnB,UAAmB;IAEnB,MAAM,IAAI,GAAG,GAAG,kCAAkC,OAAO,WAAW,EAAE,CAAC;IACvE,IAAI,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;QACvB,OAAO,GAAG,IAAI,0BAA0B,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AA+BD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAA2B;IAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,mBAAmB,CAAC;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;IACxD,MAAM,YAAY,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,+BAA+B,EAAE;QACjE,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,CAAC;KACP,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,yBAAyB,EAAE;QAC/D,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;KACP,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC;IAE7C,MAAM,SAAS,GAAoB,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/E,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;QACrB,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW;QACnC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAqC;KAC7D,CAAC,CAAC,CAAC;IACJ,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE/C,IAAI,iBAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,iBAAiB,GAAG,4BAA4B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;YACf,qFAAqF,CAAC;IAC1F,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,YAAY;QACZ,aAAa,OAAO,CAAC,QAAQ,EAAE;QAC/B,UAAU,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,SAAS,EAAE;QAC3F,EAAE;QACF,qBAAqB;QACrB,uBAAuB,IAAI,CAAC,WAAW,EAAE;QACzC,8DAA8D;QAC9D,uGAAuG;QACvG,EAAE;QACF,2DAA2D;QAC3D,kFAAkF;QAClF,iEAAiE;KAClE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,YAAY,GAAG;QACnB,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,cAAc;QACxB,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,UAAU;KACzB,CAAC;IAEF,IAAI,YAAoB,CAAC;IACzB,IAAI,CAAC;QACH,YAAY,GAAG,iBAAiB,CAC9B,YAAY,EACZ;YACE,KAAK,EAAE,WAAW,EAAE;YACpB,SAAS;YACT,IAAI,EAAE,QAAQ;YACd,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,IAAI,SAAS;YAC1D,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,SAAS;YACpD,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE;gBACR,aAAa,EAAE,EAAE;gBACjB,YAAY,EAAE,SAAS;gBACvB,mBAAmB,EAAE;oBACnB,sBAAsB;oBACtB,2BAA2B;oBAC3B;wBACE,IAAI,EAAE,iBAAiB;wBACvB,KAAK,EAAE,mBAAmB;wBAC1B,QAAQ,EAAE,CAAC;wBACX,OAAO,EAAE,iBAAiB;qBAC3B;iBACF;gBACD,iBAAiB,EAAE,EAAE;aACtB;SACF,CACF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG;YACb,sEAAsE;YACtE,iBAAiB;YACjB,IAAI,CAAC,gBAAgB,IAAI,EAAE;SAC5B;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,2BAA2B,CAC7C,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,CAChB,CAAC;IAEF,KAAK,UAAU,OAAO,CACpB,QAAwB,EACxB,MAAc;QAUd,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ;YACR,SAAS,EAAE,MAAM;YACjB,QAAQ;YACR,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,GAAG,EAAE,IAAI,CAAC,WAAW;YACrB,mBAAmB,EAAE,YAAY;YACjC,qBAAqB,EAAE,WAAW;YAClC,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC,CAAC;QAEH,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAEzB,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;gBACxC,OAAO,CAAC,OAAO,CAAC,KAMf,CAAC,CAAC;gBACH,IAAI,IAAI,CAAC,OAAO;oBAAE,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACtE,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC;gBACtB,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBAC3D,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;gBACD,IACE,KAAK,CAAC,IAAI,KAAK,aAAa;oBAC3B,KAA0E,CAAC,KAAK,EACjF,CAAC;oBACD,MAAM,CAAC,GAAI,KAAyE,CAAC,KAAK,CAAC;oBAC3F,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;oBACpC,gBAAgB,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC;gBAC9C,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAK,KAA+B,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;oBACpF,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,kEAAkE;QAClE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,EAAE,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBACxD,IAAI,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;oBACvB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI;YACJ,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB;YAChD,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa;YAC1C,OAAO;YACP,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE;YAC/B,YAAY;YACZ,gBAAgB;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAmB;QAC9B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;QACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;KACvC,CAAC;IAEF,IAAI,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7C,IAAI,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACxC,IAAI,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;IACtC,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC;IAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC3B,IAAI,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC;IAC1C,IAAI,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAElD,IACE,UAAU;QACV,WAAW,KAAK,CAAC;QACjB,CAAC,OAAO,EACR,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CACT,+DAA+D,CAChE,CAAC;QACF,MAAM,WAAW,GAAG,mCAAmC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1E,MAAM,aAAa,GAAmB;YACpC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;YACzC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;YACnD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;SACvC,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,GAAG,SAAS,cAAc,CAAC,CAAC;QACvE,WAAW,IAAI,KAAK,CAAC,gBAAgB,CAAC;QACtC,YAAY,IAAI,KAAK,CAAC,aAAa,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACtB,aAAa,GAAG,aAAa;gBAC3B,CAAC,CAAC,GAAG,aAAa,OAAO,KAAK,CAAC,IAAI,EAAE;gBACrC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;QACnC,iBAAiB,IAAI,KAAK,CAAC,YAAY,CAAC;QACxC,qBAAqB,IAAI,KAAK,CAAC,gBAAgB,CAAC;IAClD,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,aAAa,EAAE;QAC/C,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,KAAK;KAClB,CAAC,CAAC;IAEH,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC;gBACxC,aAAa,EAAE,OAAO;gBACtB,UAAU,EAAE,WAAW;gBACvB,OAAO;aACR,CAAC,CAAC;YACH,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACjC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,iBAAiB,CAAC;YAC1B,eAAe,EAAE,OAAO;YACxB,iBAAiB,EAAE,WAAW;YAC9B,aAAa,EAAE,OAAO;YACtB,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;QACH,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QACtB,6DAA6D;QAC7D,YAAY,GAAG,WAAW,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC;IAC1D,CAAC;IAED,0EAA0E;IAC1E,8EAA8E;IAC9E,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,EAAE,CACT,+EAA+E,CAChF,CAAC;QACJ,CAAC;QACD,YAAY,GAAG,KAAK,CAAC;QACrB,MAAM,CAAC,GAAG,iBAAiB,CAAC;YAC1B,eAAe,EAAE,OAAO;YACxB,iBAAiB,EAAE,CAAC;YACpB,aAAa,EAAE,OAAO,IAAI,YAAY;YACtC,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,QAAQ;YAAE,QAAQ,GAAG,IAAI,CAAC;;YAC3B,QAAQ,GAAG,IAAI,CAAC,CAAC,kDAAkD;IAC1E,CAAC;IAED,KAAK,YAAY,CAAC;IAElB,MAAM,UAAU,GAAG,iBAAiB,GAAG,qBAAqB,CAAC;IAC7D,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IAEpF,OAAO;QACL,YAAY;QACZ,GAAG,EAAE,IAAI;QACT,aAAa,EAAE,OAAO,IAAI,SAAS;QACnC,UAAU,EAAE,WAAW;QACvB,QAAQ;QACR,UAAU;QACV,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"missionSlice.js","sourceRoot":"","sources":["../../src/cli/missionSlice.ts"],"names":[],"mappings":"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"}
@@ -1,53 +1,122 @@
1
1
  /**
2
- * Provider harness profiles — single source of model-aware policy.
3
- *
4
- * Context window, reasoning replay, prompt-cache expectations, sampling
5
- * defaults and compaction thresholds used to live as ad-hoc literals
6
- * (`deepseek-v4` regex in tokenBudget, temperature 0.7 in the OpenAI
7
- * adapter, 85/95% clamps in applyBudgetPolicy). Consumers read from
8
- * {@link capabilitiesFor}; Kraken core stays provider-agnostic.
9
- *
10
- * Profile `deepseek-v4` currently matches the previous hardcoded values
11
- * (1M ctx, cache priced, reasoning replay, same 70/85/95 compaction)
12
- * so existing tests stay green. New knobs go here, not in call sites.
2
+ * OpenAI-compatible provider profiles — the only layer that knows provider
3
+ * wire quirks. Core liveness, completion and progress policy stay neutral.
13
4
  */
14
- const DEFAULT_CAPS = Object.freeze({
5
+ function frozenProfile(input) {
6
+ if (input.reasoning.levels)
7
+ Object.freeze(input.reasoning.levels);
8
+ Object.freeze(input.reasoning);
9
+ Object.freeze(input.promptCache);
10
+ Object.freeze(input.toolCalling);
11
+ Object.freeze(input.buildRecovery);
12
+ Object.freeze(input.sampling);
13
+ Object.freeze(input.compaction);
14
+ return Object.freeze(input);
15
+ }
16
+ const SHARED_COMPACTION = { warnAt: 0.7, compactAt: 0.85, hardAt: 0.95 };
17
+ const DEFAULT_CAPS = frozenProfile({
15
18
  contextWindow: 400_000,
16
- reasoning: Object.freeze({
17
- supported: true,
18
- levels: Object.freeze(['low', 'medium', 'high']),
19
- replayReasoning: true,
20
- }),
21
- promptCache: Object.freeze({ supported: true, pricedCacheRead: false }),
22
- toolCalling: Object.freeze({ parallel: true }),
23
- sampling: Object.freeze({ temperature: 0.7 }),
24
- compaction: Object.freeze({ warnAt: 0.7, compactAt: 0.85, hardAt: 0.95 }),
19
+ reasoning: { supported: true, levels: ['low', 'medium', 'high'], replayReasoning: true },
20
+ promptCache: { supported: true, pricedCacheRead: false },
21
+ toolCalling: { parallel: true },
22
+ buildRecovery: { forceToolChoice: false, maxForcedTurns: 0 },
23
+ sampling: { temperature: 0.7 },
24
+ compaction: { ...SHARED_COMPACTION },
25
25
  profile: 'default',
26
26
  });
27
- const DEEPSEEK_V4_CAPS = Object.freeze({
27
+ const DEEPSEEK_V4_CAPS = frozenProfile({
28
28
  contextWindow: 1_000_000,
29
- reasoning: Object.freeze({
30
- supported: true,
31
- levels: Object.freeze(['high', 'max']),
32
- replayReasoning: true,
33
- }),
34
- promptCache: Object.freeze({ supported: true, pricedCacheRead: true }),
35
- toolCalling: Object.freeze({ parallel: true }),
36
- sampling: Object.freeze({ temperature: 0.7 }),
37
- compaction: Object.freeze({ warnAt: 0.7, compactAt: 0.85, hardAt: 0.95 }),
29
+ reasoning: { supported: true, levels: ['high', 'max'], replayReasoning: true },
30
+ promptCache: { supported: true, pricedCacheRead: true },
31
+ toolCalling: { parallel: true },
32
+ buildRecovery: { forceToolChoice: false, maxForcedTurns: 0 },
33
+ sampling: { temperature: 0.7 },
34
+ compaction: { ...SHARED_COMPACTION },
38
35
  profile: 'deepseek-v4',
39
36
  });
40
- /** Model-id detector. The only `deepseek-v4` capability regex in src/. */
41
- const DEEPSEEK_V4_RE = /^deepseek-v4(\.|-|$)/i;
42
- export function resolveHarnessProfile(model) {
43
- if (model && DEEPSEEK_V4_RE.test(model))
37
+ const GROK_CAPS = frozenProfile({
38
+ contextWindow: 500_000,
39
+ reasoning: {
40
+ supported: true,
41
+ levels: ['low', 'medium', 'high', 'xhigh'],
42
+ replayReasoning: false,
43
+ },
44
+ promptCache: {
45
+ supported: true,
46
+ pricedCacheRead: true,
47
+ conversationAffinityHeader: 'x-grok-conv-id',
48
+ },
49
+ toolCalling: { parallel: true },
50
+ buildRecovery: { forceToolChoice: true, maxForcedTurns: 1 },
51
+ sampling: { temperature: 0.7 },
52
+ compaction: { ...SHARED_COMPACTION },
53
+ profile: 'grok',
54
+ });
55
+ const MINIMAX_M3_CAPS = frozenProfile({
56
+ contextWindow: 1_000_000,
57
+ reasoning: { supported: true, replayReasoning: true },
58
+ promptCache: { supported: false, pricedCacheRead: false },
59
+ toolCalling: { parallel: true },
60
+ buildRecovery: { forceToolChoice: false, maxForcedTurns: 0 },
61
+ sampling: { temperature: 0.7 },
62
+ compaction: { ...SHARED_COMPACTION },
63
+ profile: 'minimax',
64
+ });
65
+ const MINIMAX_M2_CAPS = frozenProfile({
66
+ contextWindow: 204_800,
67
+ reasoning: { supported: true, replayReasoning: true },
68
+ promptCache: { supported: false, pricedCacheRead: false },
69
+ toolCalling: { parallel: true },
70
+ buildRecovery: { forceToolChoice: false, maxForcedTurns: 0 },
71
+ sampling: { temperature: 0.7 },
72
+ compaction: { ...SHARED_COMPACTION },
73
+ profile: 'minimax',
74
+ });
75
+ const GLM_CAPS = frozenProfile({
76
+ contextWindow: 200_000,
77
+ reasoning: { supported: true, replayReasoning: true },
78
+ promptCache: { supported: true, pricedCacheRead: false },
79
+ toolCalling: { parallel: true },
80
+ buildRecovery: { forceToolChoice: false, maxForcedTurns: 0 },
81
+ sampling: { temperature: 0.7 },
82
+ compaction: { ...SHARED_COMPACTION },
83
+ profile: 'glm',
84
+ });
85
+ const DEEPSEEK_RE = /^deepseek-(?:v4(?:\.|-|$)|chat$|reasoner$)/i;
86
+ const GROK_RE = /^grok(?:\.|-|$)/i;
87
+ const MINIMAX_RE = /^minimax(?:\.|-|$)/i;
88
+ const MINIMAX_M3_RE = /^minimax-m3(?:\.|-|$)/i;
89
+ const GLM_RE = /^glm(?:\.|-|$)/i;
90
+ export function resolveHarnessProfile(model, providerId) {
91
+ const provider = providerId?.trim().toLowerCase();
92
+ if (provider === 'deepseek')
93
+ return 'deepseek-v4';
94
+ if (provider === 'grok')
95
+ return 'grok';
96
+ if (provider === 'minimax')
97
+ return 'minimax';
98
+ if (provider === 'glm')
99
+ return 'glm';
100
+ if (model && DEEPSEEK_RE.test(model))
44
101
  return 'deepseek-v4';
102
+ if (model && GROK_RE.test(model))
103
+ return 'grok';
104
+ if (model && MINIMAX_RE.test(model))
105
+ return 'minimax';
106
+ if (model && GLM_RE.test(model))
107
+ return 'glm';
45
108
  return 'default';
46
109
  }
47
- export function capabilitiesFor(model) {
48
- return resolveHarnessProfile(model) === 'deepseek-v4' ? DEEPSEEK_V4_CAPS : DEFAULT_CAPS;
110
+ export function capabilitiesFor(model, providerId) {
111
+ switch (resolveHarnessProfile(model, providerId)) {
112
+ case 'deepseek-v4': return DEEPSEEK_V4_CAPS;
113
+ case 'grok': return GROK_CAPS;
114
+ case 'minimax': return model && MINIMAX_M3_RE.test(model) ? MINIMAX_M3_CAPS : MINIMAX_M2_CAPS;
115
+ case 'glm': return GLM_CAPS;
116
+ default: return DEFAULT_CAPS;
117
+ }
49
118
  }
50
- export function isDeepSeekV4Model(model) {
51
- return resolveHarnessProfile(model) === 'deepseek-v4';
119
+ export function isDeepSeekV4Model(model, providerId) {
120
+ return resolveHarnessProfile(model, providerId) === 'deepseek-v4';
52
121
  }
53
122
  //# sourceMappingURL=capabilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/cli/provider/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAoCH,MAAM,YAAY,GAAmC,MAAM,CAAC,MAAM,CAAC;IACjE,aAAa,EAAE,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAa;QAC5D,eAAe,EAAE,IAAI;KACtB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IACvE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzE,OAAO,EAAE,SAAS;CACnB,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAmC,MAAM,CAAC,MAAM,CAAC;IACrE,aAAa,EAAE,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAa;QAClD,eAAe,EAAE,IAAI;KACtB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;IACtE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzE,OAAO,EAAE,aAAa;CACvB,CAAC,CAAC;AAEH,0EAA0E;AAC1E,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAE/C,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,qBAAqB,CAAC,KAAK,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,qBAAqB,CAAC,KAAK,CAAC,KAAK,aAAa,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/cli/provider/capabilities.ts"],"names":[],"mappings":"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"}
@@ -369,6 +369,7 @@ function mapAgentMessage(m, vision) {
369
369
  }
370
370
  export function openaiCompatibleProvider(config) {
371
371
  return async function* (params) {
372
+ const capabilities = capabilitiesFor(params.model, config.providerId);
372
373
  // Map the provider-neutral AgentMessage[] into the OpenAI chat format.
373
374
  // The harness keeps tool results as { role: 'tool', toolCallId, content }
374
375
  // and assistant tool-call turns as { role: 'assistant', content,
@@ -404,7 +405,7 @@ export function openaiCompatibleProvider(config) {
404
405
  model: params.model,
405
406
  messages,
406
407
  stream: true,
407
- temperature: generation?.temperature ?? capabilitiesFor(params.model).sampling.temperature,
408
+ temperature: generation?.temperature ?? capabilities.sampling.temperature,
408
409
  // Task G.4.2 — request the provider to send real token usage in
409
410
  // the final chunk (gated by `stream_options.include_usage` on the
410
411
  // OpenAI-compatible API). Providers that don't honor this (some
@@ -451,7 +452,24 @@ export function openaiCompatibleProvider(config) {
451
452
  parameters: t.parameters,
452
453
  },
453
454
  }));
454
- body.tool_choice = 'auto';
455
+ const recoveryAttempt = generation?.recoveryAttempt ?? 1;
456
+ const forceRecoveryTool = generation?.toolChoice === 'required' &&
457
+ capabilities.buildRecovery.forceToolChoice &&
458
+ recoveryAttempt <= capabilities.buildRecovery.maxForcedTurns;
459
+ body.tool_choice = forceRecoveryTool ? 'required' : 'auto';
460
+ }
461
+ const headers = {
462
+ 'Content-Type': 'application/json',
463
+ Authorization: `Bearer ${config.apiKey}`,
464
+ ...(config.extraHeaders ?? {}),
465
+ };
466
+ const affinityHeader = capabilities.promptCache.conversationAffinityHeader;
467
+ const conversationId = params.conversationId?.trim();
468
+ if (affinityHeader &&
469
+ conversationId &&
470
+ conversationId.length <= 256 &&
471
+ !/[\u0000-\u001f\u007f]/.test(conversationId)) {
472
+ headers[affinityHeader] = conversationId;
455
473
  }
456
474
  // v1.5.2: retry transient failures (429/5xx + network errors) on the
457
475
  // initial response. Retries happen BEFORE any stream byte is read, so
@@ -483,10 +501,7 @@ export function openaiCompatibleProvider(config) {
483
501
  try {
484
502
  response = await fetch(`${config.baseUrl}/chat/completions`, {
485
503
  method: 'POST',
486
- headers: {
487
- 'Content-Type': 'application/json',
488
- Authorization: `Bearer ${config.apiKey}`,
489
- },
504
+ headers,
490
505
  body: JSON.stringify(body),
491
506
  // Cancel aborts the HTTP request; stream idle is enforced below
492
507
  // per-chunk so active multi-minute streams are not killed.