@goondocks/myco 0.19.0 → 0.19.2
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-run-EADUYYAS.js → agent-run-4QUP3G4V.js} +7 -7
- package/dist/{agent-tasks-GC77JXQB.js → agent-tasks-NVOWYBLB.js} +7 -7
- package/dist/{chunk-MDEUXYJG.js → chunk-3C4LT4BW.js} +11 -6
- package/dist/chunk-3C4LT4BW.js.map +1 -0
- package/dist/{chunk-LLJMDXO2.js → chunk-3J6TUJSV.js} +3 -3
- package/dist/{chunk-2LN2BBKA.js → chunk-6DDRJQ4X.js} +2 -2
- package/dist/{chunk-YPWF322W.js → chunk-6ZDJXSEO.js} +3 -3
- package/dist/{chunk-2DF4OZ2D.js → chunk-7ONVLO43.js} +11 -6
- package/dist/chunk-7ONVLO43.js.map +1 -0
- package/dist/{chunk-INWD6AIQ.js → chunk-AULBWINA.js} +2 -2
- package/dist/{chunk-UW6DGPSV.js → chunk-D5X4MMKR.js} +3 -3
- package/dist/{chunk-2CKDAFSX.js → chunk-DDOPAV5O.js} +2 -2
- package/dist/{chunk-MVBCON4D.js → chunk-DURKJTVO.js} +2 -2
- package/dist/{chunk-REN37KYI.js → chunk-FGKCE5AE.js} +7 -2
- package/dist/chunk-FGKCE5AE.js.map +1 -0
- package/dist/{chunk-W4VHC2ES.js → chunk-I54KLC6H.js} +3 -1
- package/dist/{chunk-W4VHC2ES.js.map → chunk-I54KLC6H.js.map} +1 -1
- package/dist/{chunk-OZF5EURR.js → chunk-IXVAYN3P.js} +4 -4
- package/dist/{chunk-3TPD6HEF.js → chunk-KYH4V4ML.js} +3 -3
- package/dist/{team-N6TXS2PF.js → chunk-PLYWR5D7.js} +246 -61
- package/dist/chunk-PLYWR5D7.js.map +1 -0
- package/dist/{chunk-KSXTNYXO.js → chunk-PMT2LSTQ.js} +2 -2
- package/dist/{chunk-AELJ4PS5.js → chunk-Q4QD6LJT.js} +5 -5
- package/dist/{chunk-2OO3BRFK.js → chunk-Q6OEZM3S.js} +26 -2
- package/dist/chunk-Q6OEZM3S.js.map +1 -0
- package/dist/{chunk-CYBC2HZ3.js → chunk-QMTXVFA7.js} +3 -3
- package/dist/{chunk-RXROZBSK.js → chunk-THZKOZ4M.js} +419 -410
- package/dist/chunk-THZKOZ4M.js.map +1 -0
- package/dist/{chunk-E7NUADTQ.js → chunk-UUHLLQXO.js} +2 -1
- package/dist/{chunk-E7NUADTQ.js.map → chunk-UUHLLQXO.js.map} +1 -1
- package/dist/{chunk-SCI55NKY.js → chunk-VQF5E4ZX.js} +2 -2
- package/dist/{chunk-MS6FDV45.js → chunk-WKNAKQKA.js} +2 -2
- package/dist/{chunk-N77K772N.js → chunk-XMPCB2P2.js} +5 -5
- package/dist/chunk-XMPCB2P2.js.map +1 -0
- package/dist/{cli-X7CFP4YD.js → cli-GDHPLWS7.js} +41 -41
- package/dist/{client-YA33HUFY.js → client-UCELFVZF.js} +5 -5
- package/dist/{config-RFB2DJC6.js → config-2KQ45OC5.js} +4 -4
- package/dist/{detect-providers-2OQBU4VX.js → detect-providers-2EY55EHK.js} +5 -5
- package/dist/{doctor-FAH7N66M.js → doctor-7ATZHQIY.js} +11 -11
- package/dist/{executor-ICTRRUBY.js → executor-YO4RIKJQ.js} +55 -35
- package/dist/executor-YO4RIKJQ.js.map +1 -0
- package/dist/{init-PTJEOTJV.js → init-OK5QJISX.js} +12 -12
- package/dist/{llm-7D2OGDEK.js → llm-SWDDQQWY.js} +5 -5
- package/dist/{loader-VPE4RCIF.js → loader-AAZ6VUIA.js} +4 -4
- package/dist/{loader-O2JFO2UC.js → loader-JG5OBPB6.js} +4 -4
- package/dist/{logs-TMKNLSJY.js → logs-KNKPQE5A.js} +3 -3
- package/dist/{main-EIKBLOUL.js → main-XWJGDDMZ.js} +115 -72
- package/dist/main-XWJGDDMZ.js.map +1 -0
- package/dist/{open-2JCSOLZS.js → open-5WOOLDUZ.js} +7 -7
- package/dist/{post-compact-2HPPWPBI.js → post-compact-TLIJUMKZ.js} +7 -7
- package/dist/{post-tool-use-TWBBBABS.js → post-tool-use-TMYBAFL6.js} +6 -6
- package/dist/{post-tool-use-failure-LIJYR4KL.js → post-tool-use-failure-P7YHR3EO.js} +7 -7
- package/dist/{pre-compact-II2CMNTG.js → pre-compact-7RUNVXOE.js} +7 -7
- package/dist/{provider-check-KEQNQ6LO.js → provider-check-WCM3SDTM.js} +5 -5
- package/dist/{registry-X5FDGYXT.js → registry-OCM4WAPJ.js} +5 -5
- package/dist/{remove-L5MVYBOY.js → remove-ISEIHY5H.js} +8 -8
- package/dist/{resolution-events-MVIZMONR.js → resolution-events-PYLSI6QT.js} +5 -5
- package/dist/{restart-VIT3JBD6.js → restart-AK24G2ME.js} +8 -8
- package/dist/{search-O6BB5MTO.js → search-RVRUKLEH.js} +8 -8
- package/dist/{server-O3UPJVBR.js → server-GBWW5MBT.js} +5 -5
- package/dist/{session-5JV3DQIK.js → session-L7PGGZTO.js} +9 -9
- package/dist/{session-end-PZ2OXBGG.js → session-end-YURB7CFB.js} +6 -6
- package/dist/{session-start-FDGM56BX.js → session-start-4AMHWOBP.js} +11 -11
- package/dist/{setup-llm-MQK557BB.js → setup-llm-2UOSVGAY.js} +8 -8
- package/dist/src/agent/definitions/tasks/title-summary.yaml +9 -8
- package/dist/src/cli.js +1 -1
- package/dist/src/daemon/main.js +1 -1
- package/dist/src/hooks/post-tool-use.js +1 -1
- package/dist/src/hooks/session-end.js +1 -1
- package/dist/src/hooks/session-start.js +1 -1
- package/dist/src/hooks/stop.js +1 -1
- package/dist/src/hooks/user-prompt-submit.js +1 -1
- package/dist/src/mcp/server.js +1 -1
- package/dist/{stats-2STTARTC.js → stats-5IEO4KWT.js} +9 -9
- package/dist/{stop-WNKCMCGO.js → stop-KRR3EBB2.js} +6 -6
- package/dist/{stop-failure-6GTOBVTN.js → stop-failure-6RZAWIDM.js} +7 -7
- package/dist/{subagent-start-VJF5YKVX.js → subagent-start-R62O6YPW.js} +7 -7
- package/dist/{subagent-stop-UW6HMICY.js → subagent-stop-MP2YDF6D.js} +7 -7
- package/dist/{task-completed-U4Q3XXLX.js → task-completed-KCMJYZT7.js} +7 -7
- package/dist/team-M6TC4TFC.js +22 -0
- package/dist/ui/assets/{index-CHIm98OP.js → index-CwPuGRsJ.js} +102 -102
- package/dist/ui/index.html +1 -1
- package/dist/{update-ZYCOWKMD.js → update-L5JXTKPL.js} +8 -8
- package/dist/{user-prompt-submit-SOYL4OWF.js → user-prompt-submit-L6JNZ7QY.js} +6 -6
- package/dist/{verify-P37PQ4YM.js → verify-CJHF23QH.js} +6 -6
- package/dist/{version-XAWC277D.js → version-PFOYY6HT.js} +2 -2
- package/dist/version-PFOYY6HT.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-2DF4OZ2D.js.map +0 -1
- package/dist/chunk-2OO3BRFK.js.map +0 -1
- package/dist/chunk-EM63ZFKA.js +0 -166
- package/dist/chunk-EM63ZFKA.js.map +0 -1
- package/dist/chunk-MDEUXYJG.js.map +0 -1
- package/dist/chunk-N77K772N.js.map +0 -1
- package/dist/chunk-REN37KYI.js.map +0 -1
- package/dist/chunk-RXROZBSK.js.map +0 -1
- package/dist/executor-ICTRRUBY.js.map +0 -1
- package/dist/main-EIKBLOUL.js.map +0 -1
- package/dist/team-N6TXS2PF.js.map +0 -1
- /package/dist/{agent-run-EADUYYAS.js.map → agent-run-4QUP3G4V.js.map} +0 -0
- /package/dist/{agent-tasks-GC77JXQB.js.map → agent-tasks-NVOWYBLB.js.map} +0 -0
- /package/dist/{chunk-LLJMDXO2.js.map → chunk-3J6TUJSV.js.map} +0 -0
- /package/dist/{chunk-2LN2BBKA.js.map → chunk-6DDRJQ4X.js.map} +0 -0
- /package/dist/{chunk-YPWF322W.js.map → chunk-6ZDJXSEO.js.map} +0 -0
- /package/dist/{chunk-INWD6AIQ.js.map → chunk-AULBWINA.js.map} +0 -0
- /package/dist/{chunk-UW6DGPSV.js.map → chunk-D5X4MMKR.js.map} +0 -0
- /package/dist/{chunk-2CKDAFSX.js.map → chunk-DDOPAV5O.js.map} +0 -0
- /package/dist/{chunk-MVBCON4D.js.map → chunk-DURKJTVO.js.map} +0 -0
- /package/dist/{chunk-OZF5EURR.js.map → chunk-IXVAYN3P.js.map} +0 -0
- /package/dist/{chunk-3TPD6HEF.js.map → chunk-KYH4V4ML.js.map} +0 -0
- /package/dist/{chunk-KSXTNYXO.js.map → chunk-PMT2LSTQ.js.map} +0 -0
- /package/dist/{chunk-AELJ4PS5.js.map → chunk-Q4QD6LJT.js.map} +0 -0
- /package/dist/{chunk-CYBC2HZ3.js.map → chunk-QMTXVFA7.js.map} +0 -0
- /package/dist/{chunk-SCI55NKY.js.map → chunk-VQF5E4ZX.js.map} +0 -0
- /package/dist/{chunk-MS6FDV45.js.map → chunk-WKNAKQKA.js.map} +0 -0
- /package/dist/{cli-X7CFP4YD.js.map → cli-GDHPLWS7.js.map} +0 -0
- /package/dist/{client-YA33HUFY.js.map → client-UCELFVZF.js.map} +0 -0
- /package/dist/{config-RFB2DJC6.js.map → config-2KQ45OC5.js.map} +0 -0
- /package/dist/{detect-providers-2OQBU4VX.js.map → detect-providers-2EY55EHK.js.map} +0 -0
- /package/dist/{doctor-FAH7N66M.js.map → doctor-7ATZHQIY.js.map} +0 -0
- /package/dist/{init-PTJEOTJV.js.map → init-OK5QJISX.js.map} +0 -0
- /package/dist/{llm-7D2OGDEK.js.map → llm-SWDDQQWY.js.map} +0 -0
- /package/dist/{loader-O2JFO2UC.js.map → loader-AAZ6VUIA.js.map} +0 -0
- /package/dist/{loader-VPE4RCIF.js.map → loader-JG5OBPB6.js.map} +0 -0
- /package/dist/{logs-TMKNLSJY.js.map → logs-KNKPQE5A.js.map} +0 -0
- /package/dist/{open-2JCSOLZS.js.map → open-5WOOLDUZ.js.map} +0 -0
- /package/dist/{post-compact-2HPPWPBI.js.map → post-compact-TLIJUMKZ.js.map} +0 -0
- /package/dist/{post-tool-use-TWBBBABS.js.map → post-tool-use-TMYBAFL6.js.map} +0 -0
- /package/dist/{post-tool-use-failure-LIJYR4KL.js.map → post-tool-use-failure-P7YHR3EO.js.map} +0 -0
- /package/dist/{pre-compact-II2CMNTG.js.map → pre-compact-7RUNVXOE.js.map} +0 -0
- /package/dist/{provider-check-KEQNQ6LO.js.map → provider-check-WCM3SDTM.js.map} +0 -0
- /package/dist/{registry-X5FDGYXT.js.map → registry-OCM4WAPJ.js.map} +0 -0
- /package/dist/{remove-L5MVYBOY.js.map → remove-ISEIHY5H.js.map} +0 -0
- /package/dist/{resolution-events-MVIZMONR.js.map → resolution-events-PYLSI6QT.js.map} +0 -0
- /package/dist/{restart-VIT3JBD6.js.map → restart-AK24G2ME.js.map} +0 -0
- /package/dist/{search-O6BB5MTO.js.map → search-RVRUKLEH.js.map} +0 -0
- /package/dist/{server-O3UPJVBR.js.map → server-GBWW5MBT.js.map} +0 -0
- /package/dist/{session-5JV3DQIK.js.map → session-L7PGGZTO.js.map} +0 -0
- /package/dist/{session-end-PZ2OXBGG.js.map → session-end-YURB7CFB.js.map} +0 -0
- /package/dist/{session-start-FDGM56BX.js.map → session-start-4AMHWOBP.js.map} +0 -0
- /package/dist/{setup-llm-MQK557BB.js.map → setup-llm-2UOSVGAY.js.map} +0 -0
- /package/dist/{stats-2STTARTC.js.map → stats-5IEO4KWT.js.map} +0 -0
- /package/dist/{stop-WNKCMCGO.js.map → stop-KRR3EBB2.js.map} +0 -0
- /package/dist/{stop-failure-6GTOBVTN.js.map → stop-failure-6RZAWIDM.js.map} +0 -0
- /package/dist/{subagent-start-VJF5YKVX.js.map → subagent-start-R62O6YPW.js.map} +0 -0
- /package/dist/{subagent-stop-UW6HMICY.js.map → subagent-stop-MP2YDF6D.js.map} +0 -0
- /package/dist/{task-completed-U4Q3XXLX.js.map → task-completed-KCMJYZT7.js.map} +0 -0
- /package/dist/{version-XAWC277D.js.map → team-M6TC4TFC.js.map} +0 -0
- /package/dist/{update-ZYCOWKMD.js.map → update-L5JXTKPL.js.map} +0 -0
- /package/dist/{user-prompt-submit-SOYL4OWF.js.map → user-prompt-submit-L6JNZ7QY.js.map} +0 -0
- /package/dist/{verify-P37PQ4YM.js.map → verify-CJHF23QH.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
loadAllTasks
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-KYH4V4ML.js";
|
|
5
5
|
import {
|
|
6
6
|
getAgent,
|
|
7
7
|
getDefaultTask,
|
|
@@ -9,23 +9,23 @@ import {
|
|
|
9
9
|
loadAgentDefinition,
|
|
10
10
|
resolveDefinitionsDir,
|
|
11
11
|
resolveEffectiveConfig
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-Q4QD6LJT.js";
|
|
13
13
|
import {
|
|
14
14
|
getSpore,
|
|
15
15
|
listSporeIdsSince,
|
|
16
16
|
listSpores
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-FGKCE5AE.js";
|
|
18
18
|
import {
|
|
19
19
|
getSession,
|
|
20
20
|
listSessions
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-Q6OEZM3S.js";
|
|
22
22
|
import {
|
|
23
23
|
getTeamMachineId,
|
|
24
24
|
syncRow
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-AULBWINA.js";
|
|
26
26
|
import {
|
|
27
27
|
loadConfig
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-3C4LT4BW.js";
|
|
29
29
|
import {
|
|
30
30
|
getDatabase
|
|
31
31
|
} from "./chunk-MYX5NCRH.js";
|
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
GRAPH_EDGE_DEFAULT_CONFIDENCE,
|
|
40
40
|
QUERY_DEFAULT_LIST_LIMIT,
|
|
41
41
|
epochSeconds
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-I54KLC6H.js";
|
|
43
43
|
|
|
44
44
|
// src/notifications/notify.ts
|
|
45
45
|
import crypto from "crypto";
|
|
@@ -171,13 +171,273 @@ function errorMessage(err) {
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
+
// src/db/queries/runs.ts
|
|
175
|
+
var DEFAULT_LIST_LIMIT2 = 100;
|
|
176
|
+
var DEFAULT_STATUS = "pending";
|
|
177
|
+
var STATUS_RUNNING = "running";
|
|
178
|
+
var STATUS_COMPLETED = "completed";
|
|
179
|
+
var STATUS_FAILED = "failed";
|
|
180
|
+
var RUN_COLUMNS = [
|
|
181
|
+
"id",
|
|
182
|
+
"agent_id",
|
|
183
|
+
"task",
|
|
184
|
+
"instruction",
|
|
185
|
+
"status",
|
|
186
|
+
"started_at",
|
|
187
|
+
"completed_at",
|
|
188
|
+
"tokens_used",
|
|
189
|
+
"cost_usd",
|
|
190
|
+
"actions_taken",
|
|
191
|
+
"error"
|
|
192
|
+
];
|
|
193
|
+
var SELECT_COLUMNS = RUN_COLUMNS.join(", ");
|
|
194
|
+
function toRunRow(row) {
|
|
195
|
+
return {
|
|
196
|
+
id: row.id,
|
|
197
|
+
agent_id: row.agent_id,
|
|
198
|
+
task: row.task ?? null,
|
|
199
|
+
instruction: row.instruction ?? null,
|
|
200
|
+
status: row.status,
|
|
201
|
+
started_at: row.started_at ?? null,
|
|
202
|
+
completed_at: row.completed_at ?? null,
|
|
203
|
+
tokens_used: row.tokens_used ?? null,
|
|
204
|
+
cost_usd: row.cost_usd ?? null,
|
|
205
|
+
actions_taken: row.actions_taken ?? null,
|
|
206
|
+
error: row.error ?? null
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
function insertRun(data) {
|
|
210
|
+
const db = getDatabase();
|
|
211
|
+
db.prepare(
|
|
212
|
+
`INSERT INTO agent_runs (
|
|
213
|
+
id, agent_id, task, instruction, status,
|
|
214
|
+
started_at, completed_at, tokens_used, cost_usd,
|
|
215
|
+
actions_taken, error
|
|
216
|
+
) VALUES (
|
|
217
|
+
?, ?, ?, ?, ?,
|
|
218
|
+
?, ?, ?, ?,
|
|
219
|
+
?, ?
|
|
220
|
+
)`
|
|
221
|
+
).run(
|
|
222
|
+
data.id,
|
|
223
|
+
data.agent_id,
|
|
224
|
+
data.task ?? null,
|
|
225
|
+
data.instruction ?? null,
|
|
226
|
+
data.status ?? DEFAULT_STATUS,
|
|
227
|
+
data.started_at ?? null,
|
|
228
|
+
data.completed_at ?? null,
|
|
229
|
+
data.tokens_used ?? null,
|
|
230
|
+
data.cost_usd ?? null,
|
|
231
|
+
data.actions_taken ?? null,
|
|
232
|
+
data.error ?? null
|
|
233
|
+
);
|
|
234
|
+
return toRunRow(
|
|
235
|
+
db.prepare(`SELECT ${SELECT_COLUMNS} FROM agent_runs WHERE id = ?`).get(data.id)
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
function getRun(id) {
|
|
239
|
+
const db = getDatabase();
|
|
240
|
+
const row = db.prepare(
|
|
241
|
+
`SELECT ${SELECT_COLUMNS} FROM agent_runs WHERE id = ?`
|
|
242
|
+
).get(id);
|
|
243
|
+
if (!row) return null;
|
|
244
|
+
return toRunRow(row);
|
|
245
|
+
}
|
|
246
|
+
function buildRunsWhere(options) {
|
|
247
|
+
const conditions = [];
|
|
248
|
+
const params = [];
|
|
249
|
+
if (options.agent_id !== void 0) {
|
|
250
|
+
conditions.push(`agent_id = ?`);
|
|
251
|
+
params.push(options.agent_id);
|
|
252
|
+
}
|
|
253
|
+
if (options.status !== void 0) {
|
|
254
|
+
conditions.push(`status = ?`);
|
|
255
|
+
params.push(options.status);
|
|
256
|
+
}
|
|
257
|
+
if (options.task !== void 0) {
|
|
258
|
+
conditions.push(`task = ?`);
|
|
259
|
+
params.push(options.task);
|
|
260
|
+
}
|
|
261
|
+
if (options.search !== void 0 && options.search.length > 0) {
|
|
262
|
+
conditions.push(`task LIKE ?`);
|
|
263
|
+
params.push(`%${options.search}%`);
|
|
264
|
+
}
|
|
265
|
+
return {
|
|
266
|
+
where: conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "",
|
|
267
|
+
params
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
function listRuns(options = {}) {
|
|
271
|
+
const db = getDatabase();
|
|
272
|
+
const { where, params } = buildRunsWhere(options);
|
|
273
|
+
const limit = options.limit ?? DEFAULT_LIST_LIMIT2;
|
|
274
|
+
const offset = options.offset ?? 0;
|
|
275
|
+
const rows = db.prepare(
|
|
276
|
+
`SELECT ${SELECT_COLUMNS}
|
|
277
|
+
FROM agent_runs
|
|
278
|
+
${where}
|
|
279
|
+
ORDER BY started_at DESC NULLS LAST
|
|
280
|
+
LIMIT ?
|
|
281
|
+
OFFSET ?`
|
|
282
|
+
).all(...params, limit, offset);
|
|
283
|
+
return rows.map(toRunRow);
|
|
284
|
+
}
|
|
285
|
+
function countRuns(options = {}) {
|
|
286
|
+
const db = getDatabase();
|
|
287
|
+
const { where, params } = buildRunsWhere(options);
|
|
288
|
+
const row = db.prepare(
|
|
289
|
+
`SELECT COUNT(*) as count FROM agent_runs ${where}`
|
|
290
|
+
).get(...params);
|
|
291
|
+
return row.count;
|
|
292
|
+
}
|
|
293
|
+
function updateRunStatus(id, status, completion) {
|
|
294
|
+
const db = getDatabase();
|
|
295
|
+
const setClauses = ["status = ?"];
|
|
296
|
+
const params = [status];
|
|
297
|
+
if (completion?.completed_at !== void 0) {
|
|
298
|
+
setClauses.push(`completed_at = ?`);
|
|
299
|
+
params.push(completion.completed_at);
|
|
300
|
+
}
|
|
301
|
+
if (completion?.tokens_used !== void 0) {
|
|
302
|
+
setClauses.push(`tokens_used = ?`);
|
|
303
|
+
params.push(completion.tokens_used);
|
|
304
|
+
}
|
|
305
|
+
if (completion?.cost_usd !== void 0) {
|
|
306
|
+
setClauses.push(`cost_usd = ?`);
|
|
307
|
+
params.push(completion.cost_usd);
|
|
308
|
+
}
|
|
309
|
+
if (completion?.actions_taken !== void 0) {
|
|
310
|
+
setClauses.push(`actions_taken = ?`);
|
|
311
|
+
params.push(completion.actions_taken);
|
|
312
|
+
}
|
|
313
|
+
if (completion?.error !== void 0) {
|
|
314
|
+
setClauses.push(`error = ?`);
|
|
315
|
+
params.push(completion.error);
|
|
316
|
+
}
|
|
317
|
+
params.push(id);
|
|
318
|
+
const info = db.prepare(
|
|
319
|
+
`UPDATE agent_runs
|
|
320
|
+
SET ${setClauses.join(", ")}
|
|
321
|
+
WHERE id = ?`
|
|
322
|
+
).run(...params);
|
|
323
|
+
if (info.changes === 0) return null;
|
|
324
|
+
return toRunRow(
|
|
325
|
+
db.prepare(`SELECT ${SELECT_COLUMNS} FROM agent_runs WHERE id = ?`).get(id)
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
function getRunningRunForTask(agentId, taskName) {
|
|
329
|
+
const db = getDatabase();
|
|
330
|
+
const row = db.prepare(
|
|
331
|
+
`SELECT id FROM agent_runs
|
|
332
|
+
WHERE agent_id = ? AND task = ? AND status = ?
|
|
333
|
+
LIMIT 1`
|
|
334
|
+
).get(agentId, taskName, STATUS_RUNNING);
|
|
335
|
+
return row?.id ?? null;
|
|
336
|
+
}
|
|
337
|
+
function getLatestRunId(agentId, taskName) {
|
|
338
|
+
const db = getDatabase();
|
|
339
|
+
if (taskName) {
|
|
340
|
+
const row2 = db.prepare(
|
|
341
|
+
`SELECT id FROM agent_runs
|
|
342
|
+
WHERE agent_id = ? AND task = ?
|
|
343
|
+
ORDER BY started_at DESC
|
|
344
|
+
LIMIT 1`
|
|
345
|
+
).get(agentId, taskName);
|
|
346
|
+
return row2?.id ?? null;
|
|
347
|
+
}
|
|
348
|
+
const row = db.prepare(
|
|
349
|
+
`SELECT id FROM agent_runs
|
|
350
|
+
WHERE agent_id = ?
|
|
351
|
+
ORDER BY started_at DESC
|
|
352
|
+
LIMIT 1`
|
|
353
|
+
).get(agentId);
|
|
354
|
+
return row?.id ?? null;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// src/agent/config-resolver.ts
|
|
358
|
+
function hasConfiguredProvider(mycoConfig, taskName) {
|
|
359
|
+
const taskProvider = taskName ? mycoConfig.agent.tasks?.[taskName]?.provider : void 0;
|
|
360
|
+
return !!(taskProvider ?? mycoConfig.agent.provider);
|
|
361
|
+
}
|
|
362
|
+
function toProviderConfig(p) {
|
|
363
|
+
return {
|
|
364
|
+
type: p.type,
|
|
365
|
+
baseUrl: p.base_url,
|
|
366
|
+
model: p.model,
|
|
367
|
+
contextLength: p.context_length
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
function resolveRunConfig(agentId, requestedTask, vaultDir) {
|
|
371
|
+
const definitionsDir = resolveDefinitionsDir();
|
|
372
|
+
const definition = loadAgentDefinition(definitionsDir);
|
|
373
|
+
const agentRow = getAgent(agentId);
|
|
374
|
+
const taskRow = requestedTask ? getTask(requestedTask) : getDefaultTask(agentId);
|
|
375
|
+
const allTasks = loadAllTasks(definitionsDir, vaultDir);
|
|
376
|
+
const taskName = taskRow?.id ?? requestedTask;
|
|
377
|
+
const yamlTask = taskName ? allTasks.get(taskName) : void 0;
|
|
378
|
+
const taskOverrides = taskRow ? {
|
|
379
|
+
name: taskRow.id,
|
|
380
|
+
displayName: taskRow.display_name ?? taskRow.id,
|
|
381
|
+
description: taskRow.description ?? "",
|
|
382
|
+
agent: taskRow.agent_id,
|
|
383
|
+
prompt: taskRow.prompt,
|
|
384
|
+
isDefault: taskRow.is_default === 1,
|
|
385
|
+
...taskRow.tool_overrides ? { toolOverrides: JSON.parse(taskRow.tool_overrides) } : {},
|
|
386
|
+
// Scalar config from YAML (model, turns, timeout) — DB doesn't store these
|
|
387
|
+
...yamlTask?.model ? { model: yamlTask.model } : {},
|
|
388
|
+
...yamlTask?.maxTurns ? { maxTurns: yamlTask.maxTurns } : {},
|
|
389
|
+
...yamlTask?.timeoutSeconds ? { timeoutSeconds: yamlTask.timeoutSeconds } : {},
|
|
390
|
+
// Structural config from YAML
|
|
391
|
+
...yamlTask?.phases ? { phases: yamlTask.phases } : {},
|
|
392
|
+
...yamlTask?.execution ? { execution: yamlTask.execution } : {},
|
|
393
|
+
...yamlTask?.contextQueries ? { contextQueries: yamlTask.contextQueries } : {},
|
|
394
|
+
...yamlTask?.orchestrator ? { orchestrator: yamlTask.orchestrator } : {}
|
|
395
|
+
} : void 0;
|
|
396
|
+
const config = resolveEffectiveConfig(definition, agentRow, taskOverrides);
|
|
397
|
+
let taskProviderOverride;
|
|
398
|
+
let phaseProviderOverrides = {};
|
|
399
|
+
let taskParams;
|
|
400
|
+
try {
|
|
401
|
+
const mycoConfig = loadConfig(vaultDir);
|
|
402
|
+
const taskConfig = taskName ? mycoConfig.agent.tasks?.[taskName] : void 0;
|
|
403
|
+
const globalProvider = mycoConfig.agent.provider;
|
|
404
|
+
if (taskConfig?.provider) {
|
|
405
|
+
taskProviderOverride = toProviderConfig(taskConfig.provider);
|
|
406
|
+
} else if (globalProvider) {
|
|
407
|
+
taskProviderOverride = toProviderConfig(globalProvider);
|
|
408
|
+
}
|
|
409
|
+
if (taskConfig?.phases) {
|
|
410
|
+
for (const [phaseName, phaseConfig] of Object.entries(taskConfig.phases)) {
|
|
411
|
+
phaseProviderOverrides[phaseName] = {
|
|
412
|
+
...phaseConfig.provider ? { provider: toProviderConfig(phaseConfig.provider) } : {},
|
|
413
|
+
...phaseConfig.maxTurns != null ? { maxTurns: phaseConfig.maxTurns } : {}
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
const yamlParams = yamlTask?.params;
|
|
418
|
+
const configParams = taskConfig?.params;
|
|
419
|
+
if (yamlParams || configParams) {
|
|
420
|
+
taskParams = { ...yamlParams, ...configParams };
|
|
421
|
+
}
|
|
422
|
+
} catch {
|
|
423
|
+
}
|
|
424
|
+
return {
|
|
425
|
+
config,
|
|
426
|
+
definitionsDir,
|
|
427
|
+
taskProviderOverride,
|
|
428
|
+
phaseProviderOverrides,
|
|
429
|
+
taskName,
|
|
430
|
+
taskParams
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
|
|
174
434
|
// src/agent/instruction-builders.ts
|
|
175
435
|
import { readFileSync } from "fs";
|
|
176
436
|
import { resolve } from "path";
|
|
177
437
|
|
|
178
438
|
// src/db/queries/skill-candidates.ts
|
|
179
439
|
var DEFAULT_CONFIDENCE = 0;
|
|
180
|
-
var
|
|
440
|
+
var DEFAULT_STATUS2 = "identified";
|
|
181
441
|
var CANDIDATE_COLUMNS = [
|
|
182
442
|
"id",
|
|
183
443
|
"agent_id",
|
|
@@ -194,7 +454,7 @@ var CANDIDATE_COLUMNS = [
|
|
|
194
454
|
"updated_at",
|
|
195
455
|
"synced_at"
|
|
196
456
|
];
|
|
197
|
-
var
|
|
457
|
+
var SELECT_COLUMNS2 = CANDIDATE_COLUMNS.join(", ");
|
|
198
458
|
function toCandidateRow(row) {
|
|
199
459
|
return {
|
|
200
460
|
id: row.id,
|
|
@@ -252,7 +512,7 @@ function insertCandidate(data) {
|
|
|
252
512
|
data.topic,
|
|
253
513
|
data.rationale,
|
|
254
514
|
data.confidence ?? DEFAULT_CONFIDENCE,
|
|
255
|
-
data.status ??
|
|
515
|
+
data.status ?? DEFAULT_STATUS2,
|
|
256
516
|
data.source_ids ?? "[]",
|
|
257
517
|
data.skill_id ?? null,
|
|
258
518
|
data.supersedes ?? null,
|
|
@@ -260,7 +520,7 @@ function insertCandidate(data) {
|
|
|
260
520
|
data.created_at,
|
|
261
521
|
data.updated_at
|
|
262
522
|
);
|
|
263
|
-
const raw = db.prepare(`SELECT ${
|
|
523
|
+
const raw = db.prepare(`SELECT ${SELECT_COLUMNS2} FROM skill_candidates WHERE id = ?`).get(data.id);
|
|
264
524
|
if (!raw) throw new Error(`Failed to insert skill candidate: ${data.id}`);
|
|
265
525
|
const row = toCandidateRow(raw);
|
|
266
526
|
syncRow("skill_candidates", row);
|
|
@@ -269,7 +529,7 @@ function insertCandidate(data) {
|
|
|
269
529
|
function getCandidate(id) {
|
|
270
530
|
const db = getDatabase();
|
|
271
531
|
const row = db.prepare(
|
|
272
|
-
`SELECT ${
|
|
532
|
+
`SELECT ${SELECT_COLUMNS2} FROM skill_candidates WHERE id = ?`
|
|
273
533
|
).get(id);
|
|
274
534
|
if (!row) return null;
|
|
275
535
|
return toCandidateRow(row);
|
|
@@ -280,7 +540,7 @@ function listCandidates(options = {}) {
|
|
|
280
540
|
const limit = options.limit ?? DEFAULT_LIST_LIMIT;
|
|
281
541
|
const offset = options.offset ?? 0;
|
|
282
542
|
const rows = db.prepare(
|
|
283
|
-
`SELECT ${
|
|
543
|
+
`SELECT ${SELECT_COLUMNS2}
|
|
284
544
|
FROM skill_candidates
|
|
285
545
|
${where}
|
|
286
546
|
ORDER BY confidence DESC, created_at DESC
|
|
@@ -338,7 +598,7 @@ function listCandidatesWithCount(options = {}) {
|
|
|
338
598
|
const limit = options.limit ?? DEFAULT_LIST_LIMIT;
|
|
339
599
|
const offset = options.offset ?? 0;
|
|
340
600
|
const rows = db.prepare(
|
|
341
|
-
`SELECT ${
|
|
601
|
+
`SELECT ${SELECT_COLUMNS2}, COUNT(*) OVER () AS __total
|
|
342
602
|
FROM skill_candidates
|
|
343
603
|
${where}
|
|
344
604
|
ORDER BY confidence DESC, created_at DESC
|
|
@@ -370,7 +630,7 @@ function deleteCandidate(id) {
|
|
|
370
630
|
}
|
|
371
631
|
|
|
372
632
|
// src/db/queries/skill-records.ts
|
|
373
|
-
var
|
|
633
|
+
var DEFAULT_STATUS3 = "active";
|
|
374
634
|
var DEFAULT_GENERATION = 1;
|
|
375
635
|
var RECORD_COLUMNS = [
|
|
376
636
|
"id",
|
|
@@ -391,7 +651,7 @@ var RECORD_COLUMNS = [
|
|
|
391
651
|
"properties",
|
|
392
652
|
"synced_at"
|
|
393
653
|
];
|
|
394
|
-
var
|
|
654
|
+
var SELECT_COLUMNS3 = RECORD_COLUMNS.join(", ");
|
|
395
655
|
function toSkillRecordRow(row) {
|
|
396
656
|
return {
|
|
397
657
|
id: row.id,
|
|
@@ -448,7 +708,7 @@ function insertSkillRecord(data) {
|
|
|
448
708
|
data.name,
|
|
449
709
|
data.display_name,
|
|
450
710
|
data.description,
|
|
451
|
-
data.status ??
|
|
711
|
+
data.status ?? DEFAULT_STATUS3,
|
|
452
712
|
data.generation ?? DEFAULT_GENERATION,
|
|
453
713
|
data.candidate_id ?? null,
|
|
454
714
|
data.source_ids ?? "[]",
|
|
@@ -457,7 +717,7 @@ function insertSkillRecord(data) {
|
|
|
457
717
|
data.updated_at,
|
|
458
718
|
data.properties ?? "{}"
|
|
459
719
|
);
|
|
460
|
-
const raw = db.prepare(`SELECT ${
|
|
720
|
+
const raw = db.prepare(`SELECT ${SELECT_COLUMNS3} FROM skill_records WHERE id = ?`).get(data.id);
|
|
461
721
|
if (!raw) throw new Error(`Failed to insert skill record: ${data.id}`);
|
|
462
722
|
const row = toSkillRecordRow(raw);
|
|
463
723
|
syncRow("skill_records", row);
|
|
@@ -466,7 +726,7 @@ function insertSkillRecord(data) {
|
|
|
466
726
|
function getSkillRecord(id) {
|
|
467
727
|
const db = getDatabase();
|
|
468
728
|
const row = db.prepare(
|
|
469
|
-
`SELECT ${
|
|
729
|
+
`SELECT ${SELECT_COLUMNS3} FROM skill_records WHERE id = ?`
|
|
470
730
|
).get(id);
|
|
471
731
|
if (!row) return null;
|
|
472
732
|
return toSkillRecordRow(row);
|
|
@@ -474,7 +734,7 @@ function getSkillRecord(id) {
|
|
|
474
734
|
function getSkillRecordByName(name) {
|
|
475
735
|
const db = getDatabase();
|
|
476
736
|
const row = db.prepare(
|
|
477
|
-
`SELECT ${
|
|
737
|
+
`SELECT ${SELECT_COLUMNS3} FROM skill_records WHERE name = ?`
|
|
478
738
|
).get(name);
|
|
479
739
|
if (!row) return null;
|
|
480
740
|
return toSkillRecordRow(row);
|
|
@@ -485,7 +745,7 @@ function listSkillRecords(options = {}) {
|
|
|
485
745
|
const limit = options.limit ?? DEFAULT_LIST_LIMIT;
|
|
486
746
|
const offset = options.offset ?? 0;
|
|
487
747
|
const rows = db.prepare(
|
|
488
|
-
`SELECT ${
|
|
748
|
+
`SELECT ${SELECT_COLUMNS3}
|
|
489
749
|
FROM skill_records
|
|
490
750
|
${where}
|
|
491
751
|
ORDER BY updated_at DESC
|
|
@@ -577,7 +837,7 @@ var EXTRACT_COLUMNS = [
|
|
|
577
837
|
"machine_id",
|
|
578
838
|
"synced_at"
|
|
579
839
|
];
|
|
580
|
-
var
|
|
840
|
+
var SELECT_COLUMNS4 = EXTRACT_COLUMNS.join(", ");
|
|
581
841
|
function toDigestExtractRow(row) {
|
|
582
842
|
return {
|
|
583
843
|
id: row.id,
|
|
@@ -600,14 +860,14 @@ function upsertDigestExtract(data) {
|
|
|
600
860
|
generated_at = EXCLUDED.generated_at`
|
|
601
861
|
).run(data.agent_id, data.tier, data.content, data.generated_at);
|
|
602
862
|
const row = db.prepare(
|
|
603
|
-
`SELECT ${
|
|
863
|
+
`SELECT ${SELECT_COLUMNS4} FROM digest_extracts WHERE agent_id = ? AND tier = ?`
|
|
604
864
|
).get(data.agent_id, data.tier);
|
|
605
865
|
return toDigestExtractRow(row);
|
|
606
866
|
}
|
|
607
867
|
function getDigestExtract(agentId, tier) {
|
|
608
868
|
const db = getDatabase();
|
|
609
869
|
const row = db.prepare(
|
|
610
|
-
`SELECT ${
|
|
870
|
+
`SELECT ${SELECT_COLUMNS4} FROM digest_extracts
|
|
611
871
|
WHERE agent_id = ? AND tier = ?`
|
|
612
872
|
).get(agentId, tier);
|
|
613
873
|
if (!row) return null;
|
|
@@ -617,7 +877,7 @@ function listDigestExtracts(agentId) {
|
|
|
617
877
|
const db = getDatabase();
|
|
618
878
|
const tierPlaceholders = DIGEST_TIERS.map(() => "?").join(", ");
|
|
619
879
|
const rows = db.prepare(
|
|
620
|
-
`SELECT ${
|
|
880
|
+
`SELECT ${SELECT_COLUMNS4}
|
|
621
881
|
FROM digest_extracts
|
|
622
882
|
WHERE agent_id = ? AND tier IN (${tierPlaceholders})
|
|
623
883
|
ORDER BY tier ASC`
|
|
@@ -632,7 +892,7 @@ var STATE_COLUMNS = [
|
|
|
632
892
|
"value",
|
|
633
893
|
"updated_at"
|
|
634
894
|
];
|
|
635
|
-
var
|
|
895
|
+
var SELECT_COLUMNS5 = STATE_COLUMNS.join(", ");
|
|
636
896
|
function toAgentStateRow(row) {
|
|
637
897
|
return {
|
|
638
898
|
agent_id: row.agent_id,
|
|
@@ -644,7 +904,7 @@ function toAgentStateRow(row) {
|
|
|
644
904
|
function getState(agentId, key) {
|
|
645
905
|
const db = getDatabase();
|
|
646
906
|
const row = db.prepare(
|
|
647
|
-
`SELECT ${
|
|
907
|
+
`SELECT ${SELECT_COLUMNS5} FROM agent_state WHERE agent_id = ? AND key = ?`
|
|
648
908
|
).get(agentId, key);
|
|
649
909
|
if (!row) return null;
|
|
650
910
|
return toAgentStateRow(row);
|
|
@@ -659,13 +919,13 @@ function setState(agentId, key, value, updatedAt) {
|
|
|
659
919
|
updated_at = EXCLUDED.updated_at`
|
|
660
920
|
).run(agentId, key, value, updatedAt);
|
|
661
921
|
return toAgentStateRow(
|
|
662
|
-
db.prepare(`SELECT ${
|
|
922
|
+
db.prepare(`SELECT ${SELECT_COLUMNS5} FROM agent_state WHERE agent_id = ? AND key = ?`).get(agentId, key)
|
|
663
923
|
);
|
|
664
924
|
}
|
|
665
925
|
function getStatesForAgent(agentId) {
|
|
666
926
|
const db = getDatabase();
|
|
667
927
|
const rows = db.prepare(
|
|
668
|
-
`SELECT ${
|
|
928
|
+
`SELECT ${SELECT_COLUMNS5}
|
|
669
929
|
FROM agent_state
|
|
670
930
|
WHERE agent_id = ?
|
|
671
931
|
ORDER BY key ASC`
|
|
@@ -981,6 +1241,7 @@ function buildSkillSurveyInstruction(agentId) {
|
|
|
981
1241
|
const wisdomSpores = listSpores({
|
|
982
1242
|
observation_type: "wisdom",
|
|
983
1243
|
limit: SURVEY_MAX_WISDOM_SPORES,
|
|
1244
|
+
includeActive: false,
|
|
984
1245
|
...sinceFilter
|
|
985
1246
|
});
|
|
986
1247
|
if (wisdomSpores.length > 0) {
|
|
@@ -993,11 +1254,13 @@ function buildSkillSurveyInstruction(agentId) {
|
|
|
993
1254
|
const decisions = listSpores({
|
|
994
1255
|
observation_type: "decision",
|
|
995
1256
|
limit: 20,
|
|
1257
|
+
includeActive: false,
|
|
996
1258
|
...sinceFilter
|
|
997
1259
|
});
|
|
998
1260
|
const gotchas = listSpores({
|
|
999
1261
|
observation_type: "gotcha",
|
|
1000
1262
|
limit: 10,
|
|
1263
|
+
includeActive: false,
|
|
1001
1264
|
...sinceFilter
|
|
1002
1265
|
});
|
|
1003
1266
|
if (decisions.length > 0 || gotchas.length > 0) {
|
|
@@ -1009,6 +1272,7 @@ function buildSkillSurveyInstruction(agentId) {
|
|
|
1009
1272
|
}
|
|
1010
1273
|
const sessions = listSessions({
|
|
1011
1274
|
limit: SURVEY_MAX_SESSIONS,
|
|
1275
|
+
includeActive: false,
|
|
1012
1276
|
...sinceFilter
|
|
1013
1277
|
});
|
|
1014
1278
|
if (sessions.length > 0) {
|
|
@@ -1100,376 +1364,116 @@ function buildSkillEvolveInstruction(params, projectRoot, similarityProvider) {
|
|
|
1100
1364
|
}
|
|
1101
1365
|
const headings = extractHeadings(content);
|
|
1102
1366
|
skillHeadings.set(skill.name, headings);
|
|
1103
|
-
structures.push({
|
|
1104
|
-
name: skill.name,
|
|
1105
|
-
sectionCount: headings.length,
|
|
1106
|
-
headings,
|
|
1107
|
-
narrow: headings.length < MIN_SECTIONS_FOR_STANDALONE
|
|
1108
|
-
});
|
|
1109
|
-
}
|
|
1110
|
-
const overlaps = [];
|
|
1111
|
-
for (let i = 0; i < allSkills.length; i++) {
|
|
1112
|
-
for (let j = i + 1; j < allSkills.length; j++) {
|
|
1113
|
-
const a = allSkills[i];
|
|
1114
|
-
const b = allSkills[j];
|
|
1115
|
-
const descJaccard = descriptionSimilarity(a.description, b.description);
|
|
1116
|
-
const aHeadings = skillHeadings.get(a.name) ?? [];
|
|
1117
|
-
const bHeadings = skillHeadings.get(b.name) ?? [];
|
|
1118
|
-
const ho = headingOverlap(aHeadings, bHeadings);
|
|
1119
|
-
const descFlag = descJaccard >= DESCRIPTION_DUPLICATE_THRESHOLD * 0.75;
|
|
1120
|
-
const headingFlag = ho.score >= 0.4;
|
|
1121
|
-
if (!descFlag && !headingFlag) continue;
|
|
1122
|
-
const verdict = descJaccard >= DESCRIPTION_DUPLICATE_THRESHOLD || ho.score >= 0.5 ? "potential-merge" : "potential-narrow";
|
|
1123
|
-
overlaps.push({
|
|
1124
|
-
skillA: a.name,
|
|
1125
|
-
skillB: b.name,
|
|
1126
|
-
descriptionJaccard: Math.round(descJaccard * 100) / 100,
|
|
1127
|
-
headingOverlap: Math.round(ho.score * 100) / 100,
|
|
1128
|
-
sharedHeadings: ho.shared,
|
|
1129
|
-
verdict
|
|
1130
|
-
});
|
|
1131
|
-
}
|
|
1132
|
-
}
|
|
1133
|
-
const parts = [
|
|
1134
|
-
`${needsAssessment.length} skill(s) need assessment.`,
|
|
1135
|
-
`assess_interval_hours: ${assessIntervalHours}`,
|
|
1136
|
-
`max_skills_per_run: ${maxSkillsPerRun}`
|
|
1137
|
-
];
|
|
1138
|
-
for (const skill of needsAssessment) {
|
|
1139
|
-
parts.push("");
|
|
1140
|
-
parts.push("---");
|
|
1141
|
-
parts.push(`## Skill: ${skill.name} (gen ${skill.generation})`);
|
|
1142
|
-
parts.push(`id: ${skill.id}`);
|
|
1143
|
-
parts.push(`description: ${skill.description}`);
|
|
1144
|
-
parts.push(`new_spore_ids: ${JSON.stringify(skill.newSporeIds)}`);
|
|
1145
|
-
}
|
|
1146
|
-
parts.push("");
|
|
1147
|
-
parts.push("## All Active Skills (for inventory analysis)");
|
|
1148
|
-
for (const s of structures) {
|
|
1149
|
-
const skill = allSkills.find((sk) => sk.name === s.name);
|
|
1150
|
-
const narrowTag = s.narrow ? " **[NARROW \u2014 <2 sections]**" : "";
|
|
1151
|
-
parts.push(`- **${skill.name}** (gen ${skill.generation}, ${s.sectionCount} sections${narrowTag}): ${skill.description.slice(0, 200)}`);
|
|
1152
|
-
if (s.headings.length > 0) {
|
|
1153
|
-
parts.push(` Headings: ${s.headings.join(" | ")}`);
|
|
1154
|
-
}
|
|
1155
|
-
}
|
|
1156
|
-
const narrowSkills = structures.filter((s) => s.narrow);
|
|
1157
|
-
if (narrowSkills.length > 0) {
|
|
1158
|
-
parts.push("");
|
|
1159
|
-
parts.push("## Mechanically Narrow Skills (<2 H2 sections)");
|
|
1160
|
-
parts.push("These skills have insufficient section breadth for domain-level standalone status.");
|
|
1161
|
-
parts.push("Determine which broader skill each should be absorbed into.");
|
|
1162
|
-
for (const s of narrowSkills) {
|
|
1163
|
-
parts.push(`- **${s.name}**: ${s.sectionCount} section(s). Headings: ${s.headings.length > 0 ? s.headings.join(" | ") : "(none)"}`);
|
|
1164
|
-
}
|
|
1165
|
-
}
|
|
1166
|
-
if (overlaps.length > 0) {
|
|
1167
|
-
parts.push("");
|
|
1168
|
-
parts.push("## Pre-computed Token Overlap");
|
|
1169
|
-
parts.push("Pairs flagged by description token similarity AND/OR heading overlap:");
|
|
1170
|
-
for (const o of overlaps) {
|
|
1171
|
-
parts.push(`- **${o.skillA}** <-> **${o.skillB}**: desc=${o.descriptionJaccard}, headings=${o.headingOverlap} (${o.verdict})`);
|
|
1172
|
-
if (o.sharedHeadings.length > 0) {
|
|
1173
|
-
parts.push(` Shared headings: ${o.sharedHeadings.join("; ")}`);
|
|
1174
|
-
}
|
|
1175
|
-
}
|
|
1176
|
-
}
|
|
1177
|
-
if (similarityProvider) {
|
|
1178
|
-
const idToName = new Map(allSkills.map((s) => [s.id, s.name]));
|
|
1179
|
-
try {
|
|
1180
|
-
const semanticPairs = similarityProvider.pairwiseSimilarity("skill_records", 0.65);
|
|
1181
|
-
if (semanticPairs.length > 0) {
|
|
1182
|
-
parts.push("");
|
|
1183
|
-
parts.push("## Semantic Similarity (embedding cosine distance)");
|
|
1184
|
-
parts.push("Pairs with cosine similarity >= 0.65. This is the STRONGEST overlap signal.");
|
|
1185
|
-
parts.push("High similarity (>0.8) means the skills describe nearly identical procedures.");
|
|
1186
|
-
for (const p of semanticPairs) {
|
|
1187
|
-
const nameA = idToName.get(p.idA) ?? p.idA;
|
|
1188
|
-
const nameB = idToName.get(p.idB) ?? p.idB;
|
|
1189
|
-
parts.push(`- **${nameA}** <-> **${nameB}**: cosine=${p.similarity}`);
|
|
1190
|
-
}
|
|
1191
|
-
}
|
|
1192
|
-
} catch {
|
|
1193
|
-
}
|
|
1194
|
-
}
|
|
1195
|
-
return parts.join("\n");
|
|
1196
|
-
}
|
|
1197
|
-
function buildTaskInstruction(taskName, taskParams, agentId, projectRoot, similarityProvider) {
|
|
1198
|
-
switch (taskName) {
|
|
1199
|
-
case SKILL_GENERATE_TASK:
|
|
1200
|
-
return buildSkillGenerateInstruction();
|
|
1201
|
-
case SKILL_SURVEY_TASK:
|
|
1202
|
-
return agentId ? buildSkillSurveyInstruction(agentId) : void 0;
|
|
1203
|
-
case SKILL_EVOLVE_TASK: {
|
|
1204
|
-
const instruction = buildSkillEvolveInstruction(taskParams, projectRoot, similarityProvider);
|
|
1205
|
-
return instruction ? { instruction } : void 0;
|
|
1206
|
-
}
|
|
1207
|
-
default:
|
|
1208
|
-
return void 0;
|
|
1209
|
-
}
|
|
1210
|
-
}
|
|
1211
|
-
function isInstructionRequiredTask(taskName) {
|
|
1212
|
-
return taskName === SKILL_GENERATE_TASK || taskName === SKILL_EVOLVE_TASK || taskName === SKILL_SURVEY_TASK;
|
|
1213
|
-
}
|
|
1214
|
-
|
|
1215
|
-
// src/db/queries/runs.ts
|
|
1216
|
-
var DEFAULT_LIST_LIMIT2 = 100;
|
|
1217
|
-
var DEFAULT_STATUS3 = "pending";
|
|
1218
|
-
var STATUS_RUNNING = "running";
|
|
1219
|
-
var STATUS_COMPLETED = "completed";
|
|
1220
|
-
var STATUS_FAILED = "failed";
|
|
1221
|
-
var RUN_COLUMNS = [
|
|
1222
|
-
"id",
|
|
1223
|
-
"agent_id",
|
|
1224
|
-
"task",
|
|
1225
|
-
"instruction",
|
|
1226
|
-
"status",
|
|
1227
|
-
"started_at",
|
|
1228
|
-
"completed_at",
|
|
1229
|
-
"tokens_used",
|
|
1230
|
-
"cost_usd",
|
|
1231
|
-
"actions_taken",
|
|
1232
|
-
"error"
|
|
1233
|
-
];
|
|
1234
|
-
var SELECT_COLUMNS5 = RUN_COLUMNS.join(", ");
|
|
1235
|
-
function toRunRow(row) {
|
|
1236
|
-
return {
|
|
1237
|
-
id: row.id,
|
|
1238
|
-
agent_id: row.agent_id,
|
|
1239
|
-
task: row.task ?? null,
|
|
1240
|
-
instruction: row.instruction ?? null,
|
|
1241
|
-
status: row.status,
|
|
1242
|
-
started_at: row.started_at ?? null,
|
|
1243
|
-
completed_at: row.completed_at ?? null,
|
|
1244
|
-
tokens_used: row.tokens_used ?? null,
|
|
1245
|
-
cost_usd: row.cost_usd ?? null,
|
|
1246
|
-
actions_taken: row.actions_taken ?? null,
|
|
1247
|
-
error: row.error ?? null
|
|
1248
|
-
};
|
|
1249
|
-
}
|
|
1250
|
-
function insertRun(data) {
|
|
1251
|
-
const db = getDatabase();
|
|
1252
|
-
db.prepare(
|
|
1253
|
-
`INSERT INTO agent_runs (
|
|
1254
|
-
id, agent_id, task, instruction, status,
|
|
1255
|
-
started_at, completed_at, tokens_used, cost_usd,
|
|
1256
|
-
actions_taken, error
|
|
1257
|
-
) VALUES (
|
|
1258
|
-
?, ?, ?, ?, ?,
|
|
1259
|
-
?, ?, ?, ?,
|
|
1260
|
-
?, ?
|
|
1261
|
-
)`
|
|
1262
|
-
).run(
|
|
1263
|
-
data.id,
|
|
1264
|
-
data.agent_id,
|
|
1265
|
-
data.task ?? null,
|
|
1266
|
-
data.instruction ?? null,
|
|
1267
|
-
data.status ?? DEFAULT_STATUS3,
|
|
1268
|
-
data.started_at ?? null,
|
|
1269
|
-
data.completed_at ?? null,
|
|
1270
|
-
data.tokens_used ?? null,
|
|
1271
|
-
data.cost_usd ?? null,
|
|
1272
|
-
data.actions_taken ?? null,
|
|
1273
|
-
data.error ?? null
|
|
1274
|
-
);
|
|
1275
|
-
return toRunRow(
|
|
1276
|
-
db.prepare(`SELECT ${SELECT_COLUMNS5} FROM agent_runs WHERE id = ?`).get(data.id)
|
|
1277
|
-
);
|
|
1278
|
-
}
|
|
1279
|
-
function getRun(id) {
|
|
1280
|
-
const db = getDatabase();
|
|
1281
|
-
const row = db.prepare(
|
|
1282
|
-
`SELECT ${SELECT_COLUMNS5} FROM agent_runs WHERE id = ?`
|
|
1283
|
-
).get(id);
|
|
1284
|
-
if (!row) return null;
|
|
1285
|
-
return toRunRow(row);
|
|
1286
|
-
}
|
|
1287
|
-
function buildRunsWhere(options) {
|
|
1288
|
-
const conditions = [];
|
|
1289
|
-
const params = [];
|
|
1290
|
-
if (options.agent_id !== void 0) {
|
|
1291
|
-
conditions.push(`agent_id = ?`);
|
|
1292
|
-
params.push(options.agent_id);
|
|
1293
|
-
}
|
|
1294
|
-
if (options.status !== void 0) {
|
|
1295
|
-
conditions.push(`status = ?`);
|
|
1296
|
-
params.push(options.status);
|
|
1297
|
-
}
|
|
1298
|
-
if (options.task !== void 0) {
|
|
1299
|
-
conditions.push(`task = ?`);
|
|
1300
|
-
params.push(options.task);
|
|
1301
|
-
}
|
|
1302
|
-
if (options.search !== void 0 && options.search.length > 0) {
|
|
1303
|
-
conditions.push(`task LIKE ?`);
|
|
1304
|
-
params.push(`%${options.search}%`);
|
|
1305
|
-
}
|
|
1306
|
-
return {
|
|
1307
|
-
where: conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "",
|
|
1308
|
-
params
|
|
1309
|
-
};
|
|
1310
|
-
}
|
|
1311
|
-
function listRuns(options = {}) {
|
|
1312
|
-
const db = getDatabase();
|
|
1313
|
-
const { where, params } = buildRunsWhere(options);
|
|
1314
|
-
const limit = options.limit ?? DEFAULT_LIST_LIMIT2;
|
|
1315
|
-
const offset = options.offset ?? 0;
|
|
1316
|
-
const rows = db.prepare(
|
|
1317
|
-
`SELECT ${SELECT_COLUMNS5}
|
|
1318
|
-
FROM agent_runs
|
|
1319
|
-
${where}
|
|
1320
|
-
ORDER BY started_at DESC NULLS LAST
|
|
1321
|
-
LIMIT ?
|
|
1322
|
-
OFFSET ?`
|
|
1323
|
-
).all(...params, limit, offset);
|
|
1324
|
-
return rows.map(toRunRow);
|
|
1325
|
-
}
|
|
1326
|
-
function countRuns(options = {}) {
|
|
1327
|
-
const db = getDatabase();
|
|
1328
|
-
const { where, params } = buildRunsWhere(options);
|
|
1329
|
-
const row = db.prepare(
|
|
1330
|
-
`SELECT COUNT(*) as count FROM agent_runs ${where}`
|
|
1331
|
-
).get(...params);
|
|
1332
|
-
return row.count;
|
|
1333
|
-
}
|
|
1334
|
-
function updateRunStatus(id, status, completion) {
|
|
1335
|
-
const db = getDatabase();
|
|
1336
|
-
const setClauses = ["status = ?"];
|
|
1337
|
-
const params = [status];
|
|
1338
|
-
if (completion?.completed_at !== void 0) {
|
|
1339
|
-
setClauses.push(`completed_at = ?`);
|
|
1340
|
-
params.push(completion.completed_at);
|
|
1341
|
-
}
|
|
1342
|
-
if (completion?.tokens_used !== void 0) {
|
|
1343
|
-
setClauses.push(`tokens_used = ?`);
|
|
1344
|
-
params.push(completion.tokens_used);
|
|
1367
|
+
structures.push({
|
|
1368
|
+
name: skill.name,
|
|
1369
|
+
sectionCount: headings.length,
|
|
1370
|
+
headings,
|
|
1371
|
+
narrow: headings.length < MIN_SECTIONS_FOR_STANDALONE
|
|
1372
|
+
});
|
|
1345
1373
|
}
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1374
|
+
const overlaps = [];
|
|
1375
|
+
for (let i = 0; i < allSkills.length; i++) {
|
|
1376
|
+
for (let j = i + 1; j < allSkills.length; j++) {
|
|
1377
|
+
const a = allSkills[i];
|
|
1378
|
+
const b = allSkills[j];
|
|
1379
|
+
const descJaccard = descriptionSimilarity(a.description, b.description);
|
|
1380
|
+
const aHeadings = skillHeadings.get(a.name) ?? [];
|
|
1381
|
+
const bHeadings = skillHeadings.get(b.name) ?? [];
|
|
1382
|
+
const ho = headingOverlap(aHeadings, bHeadings);
|
|
1383
|
+
const descFlag = descJaccard >= DESCRIPTION_DUPLICATE_THRESHOLD * 0.75;
|
|
1384
|
+
const headingFlag = ho.score >= 0.4;
|
|
1385
|
+
if (!descFlag && !headingFlag) continue;
|
|
1386
|
+
const verdict = descJaccard >= DESCRIPTION_DUPLICATE_THRESHOLD || ho.score >= 0.5 ? "potential-merge" : "potential-narrow";
|
|
1387
|
+
overlaps.push({
|
|
1388
|
+
skillA: a.name,
|
|
1389
|
+
skillB: b.name,
|
|
1390
|
+
descriptionJaccard: Math.round(descJaccard * 100) / 100,
|
|
1391
|
+
headingOverlap: Math.round(ho.score * 100) / 100,
|
|
1392
|
+
sharedHeadings: ho.shared,
|
|
1393
|
+
verdict
|
|
1394
|
+
});
|
|
1395
|
+
}
|
|
1349
1396
|
}
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1397
|
+
const parts = [
|
|
1398
|
+
`${needsAssessment.length} skill(s) need assessment.`,
|
|
1399
|
+
`assess_interval_hours: ${assessIntervalHours}`,
|
|
1400
|
+
`max_skills_per_run: ${maxSkillsPerRun}`
|
|
1401
|
+
];
|
|
1402
|
+
for (const skill of needsAssessment) {
|
|
1403
|
+
parts.push("");
|
|
1404
|
+
parts.push("---");
|
|
1405
|
+
parts.push(`## Skill: ${skill.name} (gen ${skill.generation})`);
|
|
1406
|
+
parts.push(`id: ${skill.id}`);
|
|
1407
|
+
parts.push(`description: ${skill.description}`);
|
|
1408
|
+
parts.push(`new_spore_ids: ${JSON.stringify(skill.newSporeIds)}`);
|
|
1353
1409
|
}
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1410
|
+
parts.push("");
|
|
1411
|
+
parts.push("## All Active Skills (for inventory analysis)");
|
|
1412
|
+
for (const s of structures) {
|
|
1413
|
+
const skill = allSkills.find((sk) => sk.name === s.name);
|
|
1414
|
+
const narrowTag = s.narrow ? " **[NARROW \u2014 <2 sections]**" : "";
|
|
1415
|
+
parts.push(`- **${skill.name}** (gen ${skill.generation}, ${s.sectionCount} sections${narrowTag}): ${skill.description.slice(0, 200)}`);
|
|
1416
|
+
if (s.headings.length > 0) {
|
|
1417
|
+
parts.push(` Headings: ${s.headings.join(" | ")}`);
|
|
1418
|
+
}
|
|
1357
1419
|
}
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
);
|
|
1368
|
-
}
|
|
1369
|
-
function getRunningRunForTask(agentId, taskName) {
|
|
1370
|
-
const db = getDatabase();
|
|
1371
|
-
const row = db.prepare(
|
|
1372
|
-
`SELECT id FROM agent_runs
|
|
1373
|
-
WHERE agent_id = ? AND task = ? AND status = ?
|
|
1374
|
-
LIMIT 1`
|
|
1375
|
-
).get(agentId, taskName, STATUS_RUNNING);
|
|
1376
|
-
return row?.id ?? null;
|
|
1377
|
-
}
|
|
1378
|
-
function getLatestRunId(agentId, taskName) {
|
|
1379
|
-
const db = getDatabase();
|
|
1380
|
-
if (taskName) {
|
|
1381
|
-
const row2 = db.prepare(
|
|
1382
|
-
`SELECT id FROM agent_runs
|
|
1383
|
-
WHERE agent_id = ? AND task = ?
|
|
1384
|
-
ORDER BY started_at DESC
|
|
1385
|
-
LIMIT 1`
|
|
1386
|
-
).get(agentId, taskName);
|
|
1387
|
-
return row2?.id ?? null;
|
|
1420
|
+
const narrowSkills = structures.filter((s) => s.narrow);
|
|
1421
|
+
if (narrowSkills.length > 0) {
|
|
1422
|
+
parts.push("");
|
|
1423
|
+
parts.push("## Mechanically Narrow Skills (<2 H2 sections)");
|
|
1424
|
+
parts.push("These skills have insufficient section breadth for domain-level standalone status.");
|
|
1425
|
+
parts.push("Determine which broader skill each should be absorbed into.");
|
|
1426
|
+
for (const s of narrowSkills) {
|
|
1427
|
+
parts.push(`- **${s.name}**: ${s.sectionCount} section(s). Headings: ${s.headings.length > 0 ? s.headings.join(" | ") : "(none)"}`);
|
|
1428
|
+
}
|
|
1388
1429
|
}
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
}
|
|
1397
|
-
|
|
1398
|
-
// src/agent/config-resolver.ts
|
|
1399
|
-
function hasConfiguredProvider(mycoConfig, taskName) {
|
|
1400
|
-
const taskProvider = taskName ? mycoConfig.agent.tasks?.[taskName]?.provider : void 0;
|
|
1401
|
-
return !!(taskProvider ?? mycoConfig.agent.provider);
|
|
1402
|
-
}
|
|
1403
|
-
function toProviderConfig(p) {
|
|
1404
|
-
return {
|
|
1405
|
-
type: p.type,
|
|
1406
|
-
baseUrl: p.base_url,
|
|
1407
|
-
model: p.model,
|
|
1408
|
-
contextLength: p.context_length
|
|
1409
|
-
};
|
|
1410
|
-
}
|
|
1411
|
-
function resolveRunConfig(agentId, requestedTask, vaultDir) {
|
|
1412
|
-
const definitionsDir = resolveDefinitionsDir();
|
|
1413
|
-
const definition = loadAgentDefinition(definitionsDir);
|
|
1414
|
-
const agentRow = getAgent(agentId);
|
|
1415
|
-
const taskRow = requestedTask ? getTask(requestedTask) : getDefaultTask(agentId);
|
|
1416
|
-
const allTasks = loadAllTasks(definitionsDir, vaultDir);
|
|
1417
|
-
const taskName = taskRow?.id ?? requestedTask;
|
|
1418
|
-
const yamlTask = taskName ? allTasks.get(taskName) : void 0;
|
|
1419
|
-
const taskOverrides = taskRow ? {
|
|
1420
|
-
name: taskRow.id,
|
|
1421
|
-
displayName: taskRow.display_name ?? taskRow.id,
|
|
1422
|
-
description: taskRow.description ?? "",
|
|
1423
|
-
agent: taskRow.agent_id,
|
|
1424
|
-
prompt: taskRow.prompt,
|
|
1425
|
-
isDefault: taskRow.is_default === 1,
|
|
1426
|
-
...taskRow.tool_overrides ? { toolOverrides: JSON.parse(taskRow.tool_overrides) } : {},
|
|
1427
|
-
// Scalar config from YAML (model, turns, timeout) — DB doesn't store these
|
|
1428
|
-
...yamlTask?.model ? { model: yamlTask.model } : {},
|
|
1429
|
-
...yamlTask?.maxTurns ? { maxTurns: yamlTask.maxTurns } : {},
|
|
1430
|
-
...yamlTask?.timeoutSeconds ? { timeoutSeconds: yamlTask.timeoutSeconds } : {},
|
|
1431
|
-
// Structural config from YAML
|
|
1432
|
-
...yamlTask?.phases ? { phases: yamlTask.phases } : {},
|
|
1433
|
-
...yamlTask?.execution ? { execution: yamlTask.execution } : {},
|
|
1434
|
-
...yamlTask?.contextQueries ? { contextQueries: yamlTask.contextQueries } : {},
|
|
1435
|
-
...yamlTask?.orchestrator ? { orchestrator: yamlTask.orchestrator } : {}
|
|
1436
|
-
} : void 0;
|
|
1437
|
-
const config = resolveEffectiveConfig(definition, agentRow, taskOverrides);
|
|
1438
|
-
let taskProviderOverride;
|
|
1439
|
-
let phaseProviderOverrides = {};
|
|
1440
|
-
let taskParams;
|
|
1441
|
-
try {
|
|
1442
|
-
const mycoConfig = loadConfig(vaultDir);
|
|
1443
|
-
const taskConfig = taskName ? mycoConfig.agent.tasks?.[taskName] : void 0;
|
|
1444
|
-
const globalProvider = mycoConfig.agent.provider;
|
|
1445
|
-
if (taskConfig?.provider) {
|
|
1446
|
-
taskProviderOverride = toProviderConfig(taskConfig.provider);
|
|
1447
|
-
} else if (globalProvider) {
|
|
1448
|
-
taskProviderOverride = toProviderConfig(globalProvider);
|
|
1430
|
+
if (overlaps.length > 0) {
|
|
1431
|
+
parts.push("");
|
|
1432
|
+
parts.push("## Pre-computed Token Overlap");
|
|
1433
|
+
parts.push("Pairs flagged by description token similarity AND/OR heading overlap:");
|
|
1434
|
+
for (const o of overlaps) {
|
|
1435
|
+
parts.push(`- **${o.skillA}** <-> **${o.skillB}**: desc=${o.descriptionJaccard}, headings=${o.headingOverlap} (${o.verdict})`);
|
|
1436
|
+
if (o.sharedHeadings.length > 0) {
|
|
1437
|
+
parts.push(` Shared headings: ${o.sharedHeadings.join("; ")}`);
|
|
1438
|
+
}
|
|
1449
1439
|
}
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1440
|
+
}
|
|
1441
|
+
if (similarityProvider) {
|
|
1442
|
+
const idToName = new Map(allSkills.map((s) => [s.id, s.name]));
|
|
1443
|
+
try {
|
|
1444
|
+
const semanticPairs = similarityProvider.pairwiseSimilarity("skill_records", 0.65);
|
|
1445
|
+
if (semanticPairs.length > 0) {
|
|
1446
|
+
parts.push("");
|
|
1447
|
+
parts.push("## Semantic Similarity (embedding cosine distance)");
|
|
1448
|
+
parts.push("Pairs with cosine similarity >= 0.65. This is the STRONGEST overlap signal.");
|
|
1449
|
+
parts.push("High similarity (>0.8) means the skills describe nearly identical procedures.");
|
|
1450
|
+
for (const p of semanticPairs) {
|
|
1451
|
+
const nameA = idToName.get(p.idA) ?? p.idA;
|
|
1452
|
+
const nameB = idToName.get(p.idB) ?? p.idB;
|
|
1453
|
+
parts.push(`- **${nameA}** <-> **${nameB}**: cosine=${p.similarity}`);
|
|
1454
|
+
}
|
|
1456
1455
|
}
|
|
1456
|
+
} catch {
|
|
1457
1457
|
}
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1458
|
+
}
|
|
1459
|
+
return parts.join("\n");
|
|
1460
|
+
}
|
|
1461
|
+
function buildTaskInstruction(taskName, taskParams, agentId, projectRoot, similarityProvider) {
|
|
1462
|
+
switch (taskName) {
|
|
1463
|
+
case SKILL_GENERATE_TASK:
|
|
1464
|
+
return buildSkillGenerateInstruction();
|
|
1465
|
+
case SKILL_SURVEY_TASK:
|
|
1466
|
+
return agentId ? buildSkillSurveyInstruction(agentId) : void 0;
|
|
1467
|
+
case SKILL_EVOLVE_TASK: {
|
|
1468
|
+
const instruction = buildSkillEvolveInstruction(taskParams, projectRoot, similarityProvider);
|
|
1469
|
+
return instruction ? { instruction } : void 0;
|
|
1462
1470
|
}
|
|
1463
|
-
|
|
1471
|
+
default:
|
|
1472
|
+
return void 0;
|
|
1464
1473
|
}
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
taskProviderOverride,
|
|
1469
|
-
phaseProviderOverrides,
|
|
1470
|
-
taskName,
|
|
1471
|
-
taskParams
|
|
1472
|
-
};
|
|
1474
|
+
}
|
|
1475
|
+
function isInstructionRequiredTask(taskName) {
|
|
1476
|
+
return taskName === SKILL_GENERATE_TASK || taskName === SKILL_EVOLVE_TASK || taskName === SKILL_SURVEY_TASK;
|
|
1473
1477
|
}
|
|
1474
1478
|
|
|
1475
1479
|
// src/db/queries/skill-lineage.ts
|
|
@@ -1601,6 +1605,11 @@ function getUnprocessedBatches(options = {}) {
|
|
|
1601
1605
|
conditions.push(`id > ?`);
|
|
1602
1606
|
params.push(options.after_id);
|
|
1603
1607
|
}
|
|
1608
|
+
if (options.includeActive === false) {
|
|
1609
|
+
conditions.push(
|
|
1610
|
+
`EXISTS (SELECT 1 FROM sessions s WHERE s.id = prompt_batches.session_id AND s.status != 'active')`
|
|
1611
|
+
);
|
|
1612
|
+
}
|
|
1604
1613
|
const limit = options.limit ?? DEFAULT_UNPROCESSED_LIMIT;
|
|
1605
1614
|
params.push(limit);
|
|
1606
1615
|
const where = conditions.join(" AND ");
|
|
@@ -2120,42 +2129,42 @@ export {
|
|
|
2120
2129
|
getLatestBatch,
|
|
2121
2130
|
listBatchesBySession,
|
|
2122
2131
|
countBatchesBySession,
|
|
2132
|
+
errorMessage,
|
|
2133
|
+
STATUS_RUNNING,
|
|
2134
|
+
STATUS_COMPLETED,
|
|
2135
|
+
STATUS_FAILED,
|
|
2136
|
+
insertRun,
|
|
2137
|
+
getRun,
|
|
2138
|
+
listRuns,
|
|
2139
|
+
countRuns,
|
|
2140
|
+
updateRunStatus,
|
|
2141
|
+
getRunningRunForTask,
|
|
2142
|
+
getLatestRunId,
|
|
2143
|
+
setState,
|
|
2144
|
+
getStatesForAgent,
|
|
2123
2145
|
insertGraphEdge,
|
|
2124
2146
|
listGraphEdges,
|
|
2125
2147
|
getGraphForNode,
|
|
2126
2148
|
insertEntity,
|
|
2127
2149
|
getEntity,
|
|
2128
2150
|
listEntities,
|
|
2151
|
+
createSporeLineage,
|
|
2152
|
+
createBatchLineage,
|
|
2129
2153
|
upsertDigestExtract,
|
|
2130
2154
|
getDigestExtract,
|
|
2131
2155
|
listDigestExtracts,
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
getStatesForAgent,
|
|
2156
|
+
insertReport,
|
|
2157
|
+
listReports,
|
|
2135
2158
|
descriptionSimilarity,
|
|
2136
2159
|
topicOverlapSimilarity,
|
|
2137
2160
|
DESCRIPTION_DUPLICATE_THRESHOLD,
|
|
2138
2161
|
TOPIC_OVERLAP_THRESHOLD,
|
|
2139
2162
|
checkFrontmatterPreservation,
|
|
2140
2163
|
validateSkillContent,
|
|
2164
|
+
hasConfiguredProvider,
|
|
2165
|
+
resolveRunConfig,
|
|
2141
2166
|
SKILL_GENERATE_TASK,
|
|
2142
2167
|
buildTaskInstruction,
|
|
2143
|
-
isInstructionRequiredTask
|
|
2144
|
-
STATUS_RUNNING,
|
|
2145
|
-
STATUS_COMPLETED,
|
|
2146
|
-
STATUS_FAILED,
|
|
2147
|
-
insertRun,
|
|
2148
|
-
getRun,
|
|
2149
|
-
listRuns,
|
|
2150
|
-
countRuns,
|
|
2151
|
-
updateRunStatus,
|
|
2152
|
-
getRunningRunForTask,
|
|
2153
|
-
getLatestRunId,
|
|
2154
|
-
createSporeLineage,
|
|
2155
|
-
createBatchLineage,
|
|
2156
|
-
insertReport,
|
|
2157
|
-
listReports,
|
|
2158
|
-
hasConfiguredProvider,
|
|
2159
|
-
resolveRunConfig
|
|
2168
|
+
isInstructionRequiredTask
|
|
2160
2169
|
};
|
|
2161
|
-
//# sourceMappingURL=chunk-
|
|
2170
|
+
//# sourceMappingURL=chunk-THZKOZ4M.js.map
|