@goondocks/myco 0.12.9 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/{agent-run-E3P3WWPD.js → agent-run-YBASQHC7.js} +8 -7
- package/dist/{agent-run-E3P3WWPD.js.map → agent-run-YBASQHC7.js.map} +1 -1
- package/dist/{agent-tasks-GWII2I4E.js → agent-tasks-WBQFDHWC.js} +8 -7
- package/dist/{agent-tasks-GWII2I4E.js.map → agent-tasks-WBQFDHWC.js.map} +1 -1
- package/dist/{chunk-LGPBVBFY.js → chunk-2PWO3WPS.js} +5 -7
- package/dist/chunk-2PWO3WPS.js.map +1 -0
- package/dist/{chunk-TCGOSLW6.js → chunk-5BK6M6X5.js} +503 -53
- package/dist/chunk-5BK6M6X5.js.map +1 -0
- package/dist/{chunk-QL2RBFIC.js → chunk-5YQ6VOFZ.js} +2 -2
- package/dist/{chunk-D4M2AV65.js → chunk-DTE3SHYK.js} +46 -3
- package/dist/chunk-DTE3SHYK.js.map +1 -0
- package/dist/{chunk-U7JRFBJO.js → chunk-EUQQVKGQ.js} +2 -2
- package/dist/{chunk-YRUJ5KGV.js → chunk-GDCSPMH4.js} +3 -3
- package/dist/{chunk-LUQBT2Y4.js → chunk-HHZ3RTEI.js} +2 -2
- package/dist/{chunk-JROOQQH6.js → chunk-JBFFAGJK.js} +12 -7
- package/dist/chunk-JBFFAGJK.js.map +1 -0
- package/dist/{chunk-D4ESHOOJ.js → chunk-KNTJOMWY.js} +3 -3
- package/dist/{chunk-JHLALJPB.js → chunk-LD6U3L6O.js} +8 -8
- package/dist/{chunk-Q2AYS2QE.js → chunk-LPISXFM4.js} +5 -7
- package/dist/chunk-LPISXFM4.js.map +1 -0
- package/dist/{chunk-PW5QVY44.js → chunk-NCVR636M.js} +318 -4
- package/dist/chunk-NCVR636M.js.map +1 -0
- package/dist/{chunk-4VSNNMEU.js → chunk-NRT2ZRUG.js} +8 -3
- package/dist/{chunk-4VSNNMEU.js.map → chunk-NRT2ZRUG.js.map} +1 -1
- package/dist/{chunk-7NBDELZB.js → chunk-NVCGF2DS.js} +26 -8
- package/dist/{chunk-7NBDELZB.js.map → chunk-NVCGF2DS.js.map} +1 -1
- package/dist/{chunk-SW62AX75.js → chunk-OKCSSDFC.js} +2 -2
- package/dist/{chunk-RR75ZKEV.js → chunk-OQVKLTQY.js} +4 -4
- package/dist/{chunk-J3L2RTYK.js → chunk-RBFECYNA.js} +2 -2
- package/dist/{chunk-M5XWW7UI.js → chunk-SODRR3HE.js} +8 -1
- package/dist/chunk-SODRR3HE.js.map +1 -0
- package/dist/{chunk-WOT2WJ4U.js → chunk-T77674VB.js} +4 -4
- package/dist/chunk-TFGGH6UB.js +112 -0
- package/dist/chunk-TFGGH6UB.js.map +1 -0
- package/dist/{chunk-UGUJJ7QP.js → chunk-TNCBMGWB.js} +39 -104
- package/dist/chunk-TNCBMGWB.js.map +1 -0
- package/dist/{chunk-PIRWYDOH.js → chunk-TRA3R4EC.js} +7 -1
- package/dist/chunk-TRA3R4EC.js.map +1 -0
- package/dist/{chunk-WDLBFMGG.js → chunk-VQEXXS56.js} +22 -5
- package/dist/chunk-VQEXXS56.js.map +1 -0
- package/dist/{chunk-OAGY5APE.js → chunk-W3T3QDBN.js} +68 -7
- package/dist/chunk-W3T3QDBN.js.map +1 -0
- package/dist/{chunk-UULW753C.js → chunk-YYQWCTF6.js} +3 -3
- package/dist/{cli-3IMEH4B3.js → cli-WCBTILMW.js} +41 -40
- package/dist/{cli-3IMEH4B3.js.map → cli-WCBTILMW.js.map} +1 -1
- package/dist/{client-573ALWTB.js → client-MJUZJ5MC.js} +5 -5
- package/dist/{config-6RQ7FAEV.js → config-WBCOTJUE.js} +5 -3
- package/dist/{config-6RQ7FAEV.js.map → config-WBCOTJUE.js.map} +1 -1
- package/dist/{detect-providers-JFE3QLJI.js → detect-providers-PAVE2X6O.js} +4 -4
- package/dist/{doctor-JF4FL5GC.js → doctor-GDCLRJOF.js} +13 -11
- package/dist/{doctor-JF4FL5GC.js.map → doctor-GDCLRJOF.js.map} +1 -1
- package/dist/{executor-AEMKLSPL.js → executor-TCAXFOIS.js} +374 -39
- package/dist/executor-TCAXFOIS.js.map +1 -0
- package/dist/{init-QJECXRAK.js → init-ZSDMXY4T.js} +16 -15
- package/dist/{init-QJECXRAK.js.map → init-ZSDMXY4T.js.map} +1 -1
- package/dist/{init-wizard-XVMYHYKS.js → init-wizard-6LDUVR7C.js} +12 -12
- package/dist/installer-25TSX4SR.js +13 -0
- package/dist/{llm-O46QYWEM.js → llm-T3QVHC3Y.js} +7 -7
- package/dist/{loader-4FMGOVWF.js → loader-L2TCAYCT.js} +4 -2
- package/dist/{loader-BQ4X4K3F.js → loader-WQKVWL5D.js} +4 -4
- package/dist/{main-J572ROIU.js → main-25MKYYKO.js} +452 -103
- package/dist/main-25MKYYKO.js.map +1 -0
- package/dist/{open-QUZWM6K7.js → open-4YTUNIP3.js} +8 -7
- package/dist/{open-QUZWM6K7.js.map → open-4YTUNIP3.js.map} +1 -1
- package/dist/{openai-embeddings-HWAKOGUM.js → openai-embeddings-5T5ZP7LO.js} +4 -4
- package/dist/{openrouter-GXZK7JXR.js → openrouter-RD2COFC7.js} +4 -4
- package/dist/{post-compact-W2ODRZPJ.js → post-compact-E5V4OZJB.js} +7 -7
- package/dist/{post-tool-use-3XH3VOB4.js → post-tool-use-Y6UWKCVD.js} +7 -7
- package/dist/{post-tool-use-failure-Z53CLPHH.js → post-tool-use-failure-AHFXMNHX.js} +7 -7
- package/dist/{pre-compact-G4ISWQVV.js → pre-compact-EI5EV3N7.js} +7 -7
- package/dist/{provider-check-CKZW3GQX.js → provider-check-QN7OGXZA.js} +4 -4
- package/dist/{registry-ZHUVXGPO.js → registry-2XQMCPA6.js} +5 -5
- package/dist/{remove-5AX5LPGC.js → remove-F63WBELE.js} +10 -8
- package/dist/{remove-5AX5LPGC.js.map → remove-F63WBELE.js.map} +1 -1
- package/dist/{resolution-events-WZHPQQMN.js → resolution-events-BZYMUQ53.js} +4 -4
- package/dist/{restart-5IAA7RBM.js → restart-GULUNCMX.js} +9 -8
- package/dist/{restart-5IAA7RBM.js.map → restart-GULUNCMX.js.map} +1 -1
- package/dist/{search-3S4PPUTG.js → search-NLZMCEAG.js} +9 -8
- package/dist/{search-3S4PPUTG.js.map → search-NLZMCEAG.js.map} +1 -1
- package/dist/{server-X6LBFCBV.js → server-CXPWUO6H.js} +115 -14
- package/dist/server-CXPWUO6H.js.map +1 -0
- package/dist/{session-T4Y5AIHM.js → session-XXVEDIQZ.js} +10 -9
- package/dist/{session-T4Y5AIHM.js.map → session-XXVEDIQZ.js.map} +1 -1
- package/dist/{session-end-FMQ4JJU7.js → session-end-6DP6VTZV.js} +6 -6
- package/dist/{session-start-KV2WR6UI.js → session-start-QNAQDF5M.js} +12 -12
- package/dist/{setup-llm-YVI7ZSVN.js → setup-llm-ER3B7AZ2.js} +10 -9
- package/dist/{setup-llm-YVI7ZSVN.js.map → setup-llm-ER3B7AZ2.js.map} +1 -1
- package/dist/src/agent/definitions/agent.yaml +2 -0
- package/dist/src/agent/definitions/tasks/digest-only.yaml +1 -0
- package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -0
- package/dist/src/agent/definitions/tasks/full-intelligence.yaml +8 -0
- package/dist/src/agent/definitions/tasks/graph-maintenance.yaml +1 -0
- package/dist/src/agent/definitions/tasks/review-session.yaml +1 -0
- package/dist/src/agent/definitions/tasks/skill-evolve.yaml +155 -0
- package/dist/src/agent/definitions/tasks/skill-generate.yaml +210 -0
- package/dist/src/agent/definitions/tasks/skill-survey.yaml +149 -0
- package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -0
- package/dist/src/agent/definitions/tasks/title-summary.yaml +1 -0
- package/dist/src/agent/prompts/agent.md +29 -0
- 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/src/worker/src/index.ts +3 -0
- package/dist/src/worker/src/schema.ts +56 -0
- package/dist/{stats-EFF4XRAO.js → stats-VQ7XMOCU.js} +10 -9
- package/dist/{stats-EFF4XRAO.js.map → stats-VQ7XMOCU.js.map} +1 -1
- package/dist/{stop-SIQJWOPU.js → stop-VTO2KIRG.js} +6 -6
- package/dist/{stop-failure-EHYMRRER.js → stop-failure-C5T6LJQR.js} +7 -7
- package/dist/{subagent-start-AMS3YX5E.js → subagent-start-NZF42NKF.js} +7 -7
- package/dist/{subagent-stop-KVQ52RFD.js → subagent-stop-UV5ECFVU.js} +7 -7
- package/dist/{task-completed-JFQK3X4Z.js → task-completed-3SV6TL3V.js} +7 -7
- package/dist/{team-VU5MGPGG.js → team-XSJXLBZX.js} +51 -25
- package/dist/team-XSJXLBZX.js.map +1 -0
- package/dist/ui/assets/index-BeygBZGu.css +1 -0
- package/dist/ui/assets/index-CbGC0T_o.js +822 -0
- package/dist/ui/index.html +2 -2
- package/dist/{update-BO3DEE7S.js → update-5GXOQIY5.js} +8 -7
- package/dist/{update-BO3DEE7S.js.map → update-5GXOQIY5.js.map} +1 -1
- package/dist/{user-prompt-submit-EZMRI7SR.js → user-prompt-submit-VLQG77A6.js} +6 -6
- package/dist/{verify-MQAANTUR.js → verify-WF7U3NQW.js} +8 -8
- package/dist/{version-IEMGX4RA.js → version-RGX7TZ7V.js} +2 -2
- package/dist/version-RGX7TZ7V.js.map +1 -0
- package/package.json +6 -6
- package/dist/chunk-D4M2AV65.js.map +0 -1
- package/dist/chunk-JROOQQH6.js.map +0 -1
- package/dist/chunk-LGPBVBFY.js.map +0 -1
- package/dist/chunk-M5XWW7UI.js.map +0 -1
- package/dist/chunk-OAGY5APE.js.map +0 -1
- package/dist/chunk-PIRWYDOH.js.map +0 -1
- package/dist/chunk-PW5QVY44.js.map +0 -1
- package/dist/chunk-Q2AYS2QE.js.map +0 -1
- package/dist/chunk-TCGOSLW6.js.map +0 -1
- package/dist/chunk-UGUJJ7QP.js.map +0 -1
- package/dist/chunk-WDLBFMGG.js.map +0 -1
- package/dist/executor-AEMKLSPL.js.map +0 -1
- package/dist/main-J572ROIU.js.map +0 -1
- package/dist/server-X6LBFCBV.js.map +0 -1
- package/dist/team-VU5MGPGG.js.map +0 -1
- package/dist/ui/assets/index-BGbil7f1.css +0 -1
- package/dist/ui/assets/index-ZSGlKT25.js +0 -804
- /package/dist/{chunk-QL2RBFIC.js.map → chunk-5YQ6VOFZ.js.map} +0 -0
- /package/dist/{chunk-U7JRFBJO.js.map → chunk-EUQQVKGQ.js.map} +0 -0
- /package/dist/{chunk-YRUJ5KGV.js.map → chunk-GDCSPMH4.js.map} +0 -0
- /package/dist/{chunk-LUQBT2Y4.js.map → chunk-HHZ3RTEI.js.map} +0 -0
- /package/dist/{chunk-D4ESHOOJ.js.map → chunk-KNTJOMWY.js.map} +0 -0
- /package/dist/{chunk-JHLALJPB.js.map → chunk-LD6U3L6O.js.map} +0 -0
- /package/dist/{chunk-SW62AX75.js.map → chunk-OKCSSDFC.js.map} +0 -0
- /package/dist/{chunk-RR75ZKEV.js.map → chunk-OQVKLTQY.js.map} +0 -0
- /package/dist/{chunk-J3L2RTYK.js.map → chunk-RBFECYNA.js.map} +0 -0
- /package/dist/{chunk-WOT2WJ4U.js.map → chunk-T77674VB.js.map} +0 -0
- /package/dist/{chunk-UULW753C.js.map → chunk-YYQWCTF6.js.map} +0 -0
- /package/dist/{client-573ALWTB.js.map → client-MJUZJ5MC.js.map} +0 -0
- /package/dist/{detect-providers-JFE3QLJI.js.map → detect-providers-PAVE2X6O.js.map} +0 -0
- /package/dist/{init-wizard-XVMYHYKS.js.map → init-wizard-6LDUVR7C.js.map} +0 -0
- /package/dist/{llm-O46QYWEM.js.map → installer-25TSX4SR.js.map} +0 -0
- /package/dist/{loader-4FMGOVWF.js.map → llm-T3QVHC3Y.js.map} +0 -0
- /package/dist/{loader-BQ4X4K3F.js.map → loader-L2TCAYCT.js.map} +0 -0
- /package/dist/{openai-embeddings-HWAKOGUM.js.map → loader-WQKVWL5D.js.map} +0 -0
- /package/dist/{openrouter-GXZK7JXR.js.map → openai-embeddings-5T5ZP7LO.js.map} +0 -0
- /package/dist/{provider-check-CKZW3GQX.js.map → openrouter-RD2COFC7.js.map} +0 -0
- /package/dist/{post-compact-W2ODRZPJ.js.map → post-compact-E5V4OZJB.js.map} +0 -0
- /package/dist/{post-tool-use-3XH3VOB4.js.map → post-tool-use-Y6UWKCVD.js.map} +0 -0
- /package/dist/{post-tool-use-failure-Z53CLPHH.js.map → post-tool-use-failure-AHFXMNHX.js.map} +0 -0
- /package/dist/{pre-compact-G4ISWQVV.js.map → pre-compact-EI5EV3N7.js.map} +0 -0
- /package/dist/{registry-ZHUVXGPO.js.map → provider-check-QN7OGXZA.js.map} +0 -0
- /package/dist/{resolution-events-WZHPQQMN.js.map → registry-2XQMCPA6.js.map} +0 -0
- /package/dist/{version-IEMGX4RA.js.map → resolution-events-BZYMUQ53.js.map} +0 -0
- /package/dist/{session-end-FMQ4JJU7.js.map → session-end-6DP6VTZV.js.map} +0 -0
- /package/dist/{session-start-KV2WR6UI.js.map → session-start-QNAQDF5M.js.map} +0 -0
- /package/dist/{stop-SIQJWOPU.js.map → stop-VTO2KIRG.js.map} +0 -0
- /package/dist/{stop-failure-EHYMRRER.js.map → stop-failure-C5T6LJQR.js.map} +0 -0
- /package/dist/{subagent-start-AMS3YX5E.js.map → subagent-start-NZF42NKF.js.map} +0 -0
- /package/dist/{subagent-stop-KVQ52RFD.js.map → subagent-stop-UV5ECFVU.js.map} +0 -0
- /package/dist/{task-completed-JFQK3X4Z.js.map → task-completed-3SV6TL3V.js.map} +0 -0
- /package/dist/{user-prompt-submit-EZMRI7SR.js.map → user-prompt-submit-VLQG77A6.js.map} +0 -0
- /package/dist/{verify-MQAANTUR.js.map → verify-WF7U3NQW.js.map} +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
|
+
getTeamMachineId,
|
|
3
4
|
syncRow
|
|
4
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NRT2ZRUG.js";
|
|
5
6
|
import {
|
|
6
7
|
getDatabase
|
|
7
8
|
} from "./chunk-MYX5NCRH.js";
|
|
8
9
|
import {
|
|
9
|
-
|
|
10
|
+
DEFAULT_LIST_LIMIT,
|
|
10
11
|
DIGEST_TIERS,
|
|
11
12
|
EDGE_TYPE_DERIVED_FROM,
|
|
12
13
|
EDGE_TYPE_EXTRACTED_FROM,
|
|
@@ -14,7 +15,7 @@ import {
|
|
|
14
15
|
EDGE_TYPE_HAS_BATCH,
|
|
15
16
|
GRAPH_EDGE_DEFAULT_CONFIDENCE,
|
|
16
17
|
QUERY_DEFAULT_LIST_LIMIT
|
|
17
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-TRA3R4EC.js";
|
|
18
19
|
|
|
19
20
|
// src/db/queries/batches.ts
|
|
20
21
|
var DEFAULT_UNPROCESSED_LIMIT = 100;
|
|
@@ -58,7 +59,7 @@ function toBatchRow(row) {
|
|
|
58
59
|
processed: row.processed,
|
|
59
60
|
content_hash: row.content_hash ?? null,
|
|
60
61
|
created_at: row.created_at,
|
|
61
|
-
machine_id: row.machine_id ??
|
|
62
|
+
machine_id: row.machine_id ?? "local",
|
|
62
63
|
synced_at: row.synced_at ?? null
|
|
63
64
|
};
|
|
64
65
|
}
|
|
@@ -154,13 +155,9 @@ function insertBatchStateless(data) {
|
|
|
154
155
|
DEFAULT_ACTIVITY_COUNT,
|
|
155
156
|
DEFAULT_PROCESSED,
|
|
156
157
|
data.created_at,
|
|
157
|
-
|
|
158
|
+
data.machine_id ?? getTeamMachineId()
|
|
158
159
|
);
|
|
159
160
|
const batchId = Number(info.lastInsertRowid);
|
|
160
|
-
const userPrompt = data.user_prompt ?? null;
|
|
161
|
-
if (userPrompt) {
|
|
162
|
-
db.prepare("INSERT INTO prompt_batches_fts(rowid, user_prompt) VALUES (?, ?)").run(batchId, userPrompt);
|
|
163
|
-
}
|
|
164
161
|
return toBatchRow(
|
|
165
162
|
db.prepare(`SELECT ${SELECT_COLUMNS} FROM prompt_batches WHERE id = ?`).get(batchId)
|
|
166
163
|
);
|
|
@@ -204,6 +201,13 @@ function listBatchesBySession(sessionId, options = {}) {
|
|
|
204
201
|
).all(sessionId, limit, offset);
|
|
205
202
|
return rows.map(toBatchRow);
|
|
206
203
|
}
|
|
204
|
+
function countBatchesBySession(sessionId) {
|
|
205
|
+
const db = getDatabase();
|
|
206
|
+
const row = db.prepare(
|
|
207
|
+
`SELECT COUNT(*) as count FROM prompt_batches WHERE session_id = ?`
|
|
208
|
+
).get(sessionId);
|
|
209
|
+
return row.count;
|
|
210
|
+
}
|
|
207
211
|
|
|
208
212
|
// src/utils/error-message.ts
|
|
209
213
|
function errorMessage(err) {
|
|
@@ -216,6 +220,356 @@ function errorMessage(err) {
|
|
|
216
220
|
}
|
|
217
221
|
}
|
|
218
222
|
|
|
223
|
+
// src/db/queries/skill-candidates.ts
|
|
224
|
+
var DEFAULT_CONFIDENCE = 0;
|
|
225
|
+
var DEFAULT_STATUS2 = "identified";
|
|
226
|
+
var CANDIDATE_COLUMNS = [
|
|
227
|
+
"id",
|
|
228
|
+
"agent_id",
|
|
229
|
+
"machine_id",
|
|
230
|
+
"topic",
|
|
231
|
+
"rationale",
|
|
232
|
+
"confidence",
|
|
233
|
+
"status",
|
|
234
|
+
"source_ids",
|
|
235
|
+
"skill_id",
|
|
236
|
+
"created_at",
|
|
237
|
+
"updated_at",
|
|
238
|
+
"synced_at"
|
|
239
|
+
];
|
|
240
|
+
var SELECT_COLUMNS2 = CANDIDATE_COLUMNS.join(", ");
|
|
241
|
+
function toCandidateRow(row) {
|
|
242
|
+
return {
|
|
243
|
+
id: row.id,
|
|
244
|
+
agent_id: row.agent_id,
|
|
245
|
+
machine_id: row.machine_id ?? getTeamMachineId(),
|
|
246
|
+
topic: row.topic,
|
|
247
|
+
rationale: row.rationale,
|
|
248
|
+
confidence: row.confidence,
|
|
249
|
+
status: row.status,
|
|
250
|
+
source_ids: row.source_ids ?? "[]",
|
|
251
|
+
skill_id: row.skill_id ?? null,
|
|
252
|
+
created_at: row.created_at,
|
|
253
|
+
updated_at: row.updated_at,
|
|
254
|
+
synced_at: row.synced_at ?? null
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
function buildWhere(options) {
|
|
258
|
+
const conditions = [];
|
|
259
|
+
const params = [];
|
|
260
|
+
if (options.agent_id !== void 0) {
|
|
261
|
+
conditions.push(`agent_id = ?`);
|
|
262
|
+
params.push(options.agent_id);
|
|
263
|
+
}
|
|
264
|
+
if (options.status !== void 0) {
|
|
265
|
+
conditions.push(`status = ?`);
|
|
266
|
+
params.push(options.status);
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
where: conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "",
|
|
270
|
+
params
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
function insertCandidate(data) {
|
|
274
|
+
const db = getDatabase();
|
|
275
|
+
db.prepare(
|
|
276
|
+
`INSERT INTO skill_candidates (
|
|
277
|
+
id, agent_id, machine_id, topic, rationale,
|
|
278
|
+
confidence, status, source_ids, skill_id,
|
|
279
|
+
created_at, updated_at
|
|
280
|
+
) VALUES (
|
|
281
|
+
?, ?, ?, ?, ?,
|
|
282
|
+
?, ?, ?, ?,
|
|
283
|
+
?, ?
|
|
284
|
+
)`
|
|
285
|
+
).run(
|
|
286
|
+
data.id,
|
|
287
|
+
data.agent_id,
|
|
288
|
+
data.machine_id ?? getTeamMachineId(),
|
|
289
|
+
data.topic,
|
|
290
|
+
data.rationale,
|
|
291
|
+
data.confidence ?? DEFAULT_CONFIDENCE,
|
|
292
|
+
data.status ?? DEFAULT_STATUS2,
|
|
293
|
+
data.source_ids ?? "[]",
|
|
294
|
+
data.skill_id ?? null,
|
|
295
|
+
data.created_at,
|
|
296
|
+
data.updated_at
|
|
297
|
+
);
|
|
298
|
+
const raw = db.prepare(`SELECT ${SELECT_COLUMNS2} FROM skill_candidates WHERE id = ?`).get(data.id);
|
|
299
|
+
if (!raw) throw new Error(`Failed to insert skill candidate: ${data.id}`);
|
|
300
|
+
const row = toCandidateRow(raw);
|
|
301
|
+
syncRow("skill_candidates", row);
|
|
302
|
+
return row;
|
|
303
|
+
}
|
|
304
|
+
function getCandidate(id) {
|
|
305
|
+
const db = getDatabase();
|
|
306
|
+
const row = db.prepare(
|
|
307
|
+
`SELECT ${SELECT_COLUMNS2} FROM skill_candidates WHERE id = ?`
|
|
308
|
+
).get(id);
|
|
309
|
+
if (!row) return null;
|
|
310
|
+
return toCandidateRow(row);
|
|
311
|
+
}
|
|
312
|
+
function listCandidates(options = {}) {
|
|
313
|
+
const db = getDatabase();
|
|
314
|
+
const { where, params } = buildWhere(options);
|
|
315
|
+
const limit = options.limit ?? DEFAULT_LIST_LIMIT;
|
|
316
|
+
const offset = options.offset ?? 0;
|
|
317
|
+
const rows = db.prepare(
|
|
318
|
+
`SELECT ${SELECT_COLUMNS2}
|
|
319
|
+
FROM skill_candidates
|
|
320
|
+
${where}
|
|
321
|
+
ORDER BY confidence DESC, created_at DESC
|
|
322
|
+
LIMIT ?
|
|
323
|
+
OFFSET ?`
|
|
324
|
+
).all(...params, limit, offset);
|
|
325
|
+
return rows.map(toCandidateRow);
|
|
326
|
+
}
|
|
327
|
+
function updateCandidate(id, updates) {
|
|
328
|
+
const db = getDatabase();
|
|
329
|
+
const setClauses = [];
|
|
330
|
+
const params = [];
|
|
331
|
+
const fieldMap = {
|
|
332
|
+
topic: "topic",
|
|
333
|
+
rationale: "rationale",
|
|
334
|
+
confidence: "confidence",
|
|
335
|
+
status: "status",
|
|
336
|
+
source_ids: "source_ids",
|
|
337
|
+
skill_id: "skill_id",
|
|
338
|
+
updated_at: "updated_at"
|
|
339
|
+
};
|
|
340
|
+
for (const [key, column] of Object.entries(fieldMap)) {
|
|
341
|
+
if (key in updates) {
|
|
342
|
+
setClauses.push(`${column} = ?`);
|
|
343
|
+
params.push(updates[key] ?? null);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
if (setClauses.length === 0) return getCandidate(id);
|
|
347
|
+
params.push(id);
|
|
348
|
+
db.prepare(
|
|
349
|
+
`UPDATE skill_candidates
|
|
350
|
+
SET ${setClauses.join(", ")}
|
|
351
|
+
WHERE id = ?`
|
|
352
|
+
).run(...params);
|
|
353
|
+
const updated = getCandidate(id);
|
|
354
|
+
if (updated) syncRow("skill_candidates", updated);
|
|
355
|
+
return updated;
|
|
356
|
+
}
|
|
357
|
+
function listCandidatesWithCount(options = {}) {
|
|
358
|
+
const items = listCandidates(options);
|
|
359
|
+
const total = countCandidates(options);
|
|
360
|
+
return { items, total };
|
|
361
|
+
}
|
|
362
|
+
function countCandidates(options = {}) {
|
|
363
|
+
const db = getDatabase();
|
|
364
|
+
const { where, params } = buildWhere(options);
|
|
365
|
+
const row = db.prepare(
|
|
366
|
+
`SELECT COUNT(*) as count FROM skill_candidates ${where}`
|
|
367
|
+
).get(...params);
|
|
368
|
+
return row.count;
|
|
369
|
+
}
|
|
370
|
+
function deleteCandidate(id) {
|
|
371
|
+
const db = getDatabase();
|
|
372
|
+
const info = db.prepare("DELETE FROM skill_candidates WHERE id = ?").run(id);
|
|
373
|
+
return info.changes > 0;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// src/db/queries/skill-records.ts
|
|
377
|
+
var DEFAULT_STATUS3 = "active";
|
|
378
|
+
var DEFAULT_GENERATION = 1;
|
|
379
|
+
var RECORD_COLUMNS = [
|
|
380
|
+
"id",
|
|
381
|
+
"agent_id",
|
|
382
|
+
"machine_id",
|
|
383
|
+
"name",
|
|
384
|
+
"display_name",
|
|
385
|
+
"description",
|
|
386
|
+
"status",
|
|
387
|
+
"generation",
|
|
388
|
+
"candidate_id",
|
|
389
|
+
"source_ids",
|
|
390
|
+
"path",
|
|
391
|
+
"usage_count",
|
|
392
|
+
"last_used_at",
|
|
393
|
+
"created_at",
|
|
394
|
+
"updated_at",
|
|
395
|
+
"properties",
|
|
396
|
+
"synced_at"
|
|
397
|
+
];
|
|
398
|
+
var SELECT_COLUMNS3 = RECORD_COLUMNS.join(", ");
|
|
399
|
+
function toSkillRecordRow(row) {
|
|
400
|
+
return {
|
|
401
|
+
id: row.id,
|
|
402
|
+
agent_id: row.agent_id,
|
|
403
|
+
machine_id: row.machine_id ?? getTeamMachineId(),
|
|
404
|
+
name: row.name,
|
|
405
|
+
display_name: row.display_name,
|
|
406
|
+
description: row.description,
|
|
407
|
+
status: row.status,
|
|
408
|
+
generation: row.generation,
|
|
409
|
+
candidate_id: row.candidate_id ?? null,
|
|
410
|
+
source_ids: row.source_ids ?? "[]",
|
|
411
|
+
path: row.path,
|
|
412
|
+
usage_count: row.usage_count,
|
|
413
|
+
last_used_at: row.last_used_at ?? null,
|
|
414
|
+
created_at: row.created_at,
|
|
415
|
+
updated_at: row.updated_at,
|
|
416
|
+
properties: row.properties ?? "{}",
|
|
417
|
+
synced_at: row.synced_at ?? null
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
function buildWhere2(options) {
|
|
421
|
+
const conditions = [];
|
|
422
|
+
const params = [];
|
|
423
|
+
if (options.agent_id !== void 0) {
|
|
424
|
+
conditions.push(`agent_id = ?`);
|
|
425
|
+
params.push(options.agent_id);
|
|
426
|
+
}
|
|
427
|
+
if (options.status !== void 0) {
|
|
428
|
+
conditions.push(`status = ?`);
|
|
429
|
+
params.push(options.status);
|
|
430
|
+
}
|
|
431
|
+
return {
|
|
432
|
+
where: conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "",
|
|
433
|
+
params
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
function insertSkillRecord(data) {
|
|
437
|
+
const db = getDatabase();
|
|
438
|
+
db.prepare(
|
|
439
|
+
`INSERT INTO skill_records (
|
|
440
|
+
id, agent_id, machine_id, name, display_name,
|
|
441
|
+
description, status, generation, candidate_id,
|
|
442
|
+
source_ids, path, created_at, updated_at, properties
|
|
443
|
+
) VALUES (
|
|
444
|
+
?, ?, ?, ?, ?,
|
|
445
|
+
?, ?, ?, ?,
|
|
446
|
+
?, ?, ?, ?, ?
|
|
447
|
+
)`
|
|
448
|
+
).run(
|
|
449
|
+
data.id,
|
|
450
|
+
data.agent_id,
|
|
451
|
+
data.machine_id ?? getTeamMachineId(),
|
|
452
|
+
data.name,
|
|
453
|
+
data.display_name,
|
|
454
|
+
data.description,
|
|
455
|
+
data.status ?? DEFAULT_STATUS3,
|
|
456
|
+
data.generation ?? DEFAULT_GENERATION,
|
|
457
|
+
data.candidate_id ?? null,
|
|
458
|
+
data.source_ids ?? "[]",
|
|
459
|
+
data.path,
|
|
460
|
+
data.created_at,
|
|
461
|
+
data.updated_at,
|
|
462
|
+
data.properties ?? "{}"
|
|
463
|
+
);
|
|
464
|
+
const raw = db.prepare(`SELECT ${SELECT_COLUMNS3} FROM skill_records WHERE id = ?`).get(data.id);
|
|
465
|
+
if (!raw) throw new Error(`Failed to insert skill record: ${data.id}`);
|
|
466
|
+
const row = toSkillRecordRow(raw);
|
|
467
|
+
syncRow("skill_records", row);
|
|
468
|
+
return row;
|
|
469
|
+
}
|
|
470
|
+
function getSkillRecord(id) {
|
|
471
|
+
const db = getDatabase();
|
|
472
|
+
const row = db.prepare(
|
|
473
|
+
`SELECT ${SELECT_COLUMNS3} FROM skill_records WHERE id = ?`
|
|
474
|
+
).get(id);
|
|
475
|
+
if (!row) return null;
|
|
476
|
+
return toSkillRecordRow(row);
|
|
477
|
+
}
|
|
478
|
+
function getSkillRecordByName(name) {
|
|
479
|
+
const db = getDatabase();
|
|
480
|
+
const row = db.prepare(
|
|
481
|
+
`SELECT ${SELECT_COLUMNS3} FROM skill_records WHERE name = ?`
|
|
482
|
+
).get(name);
|
|
483
|
+
if (!row) return null;
|
|
484
|
+
return toSkillRecordRow(row);
|
|
485
|
+
}
|
|
486
|
+
function listSkillRecords(options = {}) {
|
|
487
|
+
const db = getDatabase();
|
|
488
|
+
const { where, params } = buildWhere2(options);
|
|
489
|
+
const limit = options.limit ?? DEFAULT_LIST_LIMIT;
|
|
490
|
+
const offset = options.offset ?? 0;
|
|
491
|
+
const rows = db.prepare(
|
|
492
|
+
`SELECT ${SELECT_COLUMNS3}
|
|
493
|
+
FROM skill_records
|
|
494
|
+
${where}
|
|
495
|
+
ORDER BY updated_at DESC
|
|
496
|
+
LIMIT ?
|
|
497
|
+
OFFSET ?`
|
|
498
|
+
).all(...params, limit, offset);
|
|
499
|
+
return rows.map(toSkillRecordRow);
|
|
500
|
+
}
|
|
501
|
+
function updateSkillRecord(id, updates) {
|
|
502
|
+
const db = getDatabase();
|
|
503
|
+
const setClauses = [];
|
|
504
|
+
const params = [];
|
|
505
|
+
const fieldMap = {
|
|
506
|
+
display_name: "display_name",
|
|
507
|
+
description: "description",
|
|
508
|
+
status: "status",
|
|
509
|
+
generation: "generation",
|
|
510
|
+
source_ids: "source_ids",
|
|
511
|
+
path: "path",
|
|
512
|
+
usage_count: "usage_count",
|
|
513
|
+
last_used_at: "last_used_at",
|
|
514
|
+
updated_at: "updated_at",
|
|
515
|
+
properties: "properties"
|
|
516
|
+
};
|
|
517
|
+
for (const [key, column] of Object.entries(fieldMap)) {
|
|
518
|
+
if (key in updates) {
|
|
519
|
+
setClauses.push(`${column} = ?`);
|
|
520
|
+
params.push(updates[key] ?? null);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
if (setClauses.length === 0) return getSkillRecord(id);
|
|
524
|
+
params.push(id);
|
|
525
|
+
db.prepare(
|
|
526
|
+
`UPDATE skill_records
|
|
527
|
+
SET ${setClauses.join(", ")}
|
|
528
|
+
WHERE id = ?`
|
|
529
|
+
).run(...params);
|
|
530
|
+
const updated = getSkillRecord(id);
|
|
531
|
+
if (updated) syncRow("skill_records", updated);
|
|
532
|
+
return updated;
|
|
533
|
+
}
|
|
534
|
+
function incrementSkillUsageCount(id, now) {
|
|
535
|
+
const db = getDatabase();
|
|
536
|
+
db.prepare(
|
|
537
|
+
`UPDATE skill_records SET usage_count = usage_count + 1, last_used_at = ?, updated_at = ? WHERE id = ?`
|
|
538
|
+
).run(now, now, id);
|
|
539
|
+
}
|
|
540
|
+
function listSkillRecordsWithCount(options = {}) {
|
|
541
|
+
const items = listSkillRecords(options);
|
|
542
|
+
const total = countSkillRecords(options);
|
|
543
|
+
return { items, total };
|
|
544
|
+
}
|
|
545
|
+
function countSkillRecords(options = {}) {
|
|
546
|
+
const db = getDatabase();
|
|
547
|
+
const { where, params } = buildWhere2(options);
|
|
548
|
+
const row = db.prepare(
|
|
549
|
+
`SELECT COUNT(*) as count FROM skill_records ${where}`
|
|
550
|
+
).get(...params);
|
|
551
|
+
return row.count;
|
|
552
|
+
}
|
|
553
|
+
function deleteSkillRecordCascade(idOrName) {
|
|
554
|
+
const db = getDatabase();
|
|
555
|
+
const record = getSkillRecord(idOrName) ?? getSkillRecordByName(idOrName);
|
|
556
|
+
if (!record) return null;
|
|
557
|
+
db.transaction(() => {
|
|
558
|
+
db.prepare("DELETE FROM skill_lineage WHERE skill_id = ?").run(record.id);
|
|
559
|
+
db.prepare("DELETE FROM skill_usage WHERE skill_id = ?").run(record.id);
|
|
560
|
+
if (record.candidate_id) {
|
|
561
|
+
db.prepare(
|
|
562
|
+
`UPDATE skill_candidates SET status = 'dismissed', skill_id = NULL, updated_at = ? WHERE id = ?`
|
|
563
|
+
).run(Math.floor(Date.now() / 1e3), record.candidate_id);
|
|
564
|
+
}
|
|
565
|
+
db.prepare(
|
|
566
|
+
`UPDATE skill_candidates SET status = 'dismissed', skill_id = NULL, updated_at = ? WHERE skill_id = ?`
|
|
567
|
+
).run(Math.floor(Date.now() / 1e3), record.id);
|
|
568
|
+
db.prepare("DELETE FROM skill_records WHERE id = ?").run(record.id);
|
|
569
|
+
})();
|
|
570
|
+
return { id: record.id, name: record.name };
|
|
571
|
+
}
|
|
572
|
+
|
|
219
573
|
// src/db/queries/turns.ts
|
|
220
574
|
var TURN_COLUMNS = [
|
|
221
575
|
"id",
|
|
@@ -228,7 +582,7 @@ var TURN_COLUMNS = [
|
|
|
228
582
|
"started_at",
|
|
229
583
|
"completed_at"
|
|
230
584
|
];
|
|
231
|
-
var
|
|
585
|
+
var SELECT_COLUMNS4 = TURN_COLUMNS.join(", ");
|
|
232
586
|
function toTurnRow(row) {
|
|
233
587
|
return {
|
|
234
588
|
id: row.id,
|
|
@@ -264,13 +618,13 @@ function insertTurn(data) {
|
|
|
264
618
|
);
|
|
265
619
|
const turnId = Number(info.lastInsertRowid);
|
|
266
620
|
return toTurnRow(
|
|
267
|
-
db.prepare(`SELECT ${
|
|
621
|
+
db.prepare(`SELECT ${SELECT_COLUMNS4} FROM agent_turns WHERE id = ?`).get(turnId)
|
|
268
622
|
);
|
|
269
623
|
}
|
|
270
624
|
function listTurns(runId) {
|
|
271
625
|
const db = getDatabase();
|
|
272
626
|
const rows = db.prepare(
|
|
273
|
-
`SELECT ${
|
|
627
|
+
`SELECT ${SELECT_COLUMNS4}
|
|
274
628
|
FROM agent_turns
|
|
275
629
|
WHERE run_id = ?
|
|
276
630
|
ORDER BY turn_number ASC`
|
|
@@ -282,8 +636,8 @@ function listTurnsByRun(runId) {
|
|
|
282
636
|
}
|
|
283
637
|
|
|
284
638
|
// src/db/queries/runs.ts
|
|
285
|
-
var
|
|
286
|
-
var
|
|
639
|
+
var DEFAULT_LIST_LIMIT2 = 100;
|
|
640
|
+
var DEFAULT_STATUS4 = "pending";
|
|
287
641
|
var STATUS_RUNNING = "running";
|
|
288
642
|
var STATUS_COMPLETED2 = "completed";
|
|
289
643
|
var STATUS_FAILED = "failed";
|
|
@@ -300,7 +654,7 @@ var RUN_COLUMNS = [
|
|
|
300
654
|
"actions_taken",
|
|
301
655
|
"error"
|
|
302
656
|
];
|
|
303
|
-
var
|
|
657
|
+
var SELECT_COLUMNS5 = RUN_COLUMNS.join(", ");
|
|
304
658
|
function toRunRow(row) {
|
|
305
659
|
return {
|
|
306
660
|
id: row.id,
|
|
@@ -333,7 +687,7 @@ function insertRun(data) {
|
|
|
333
687
|
data.agent_id,
|
|
334
688
|
data.task ?? null,
|
|
335
689
|
data.instruction ?? null,
|
|
336
|
-
data.status ??
|
|
690
|
+
data.status ?? DEFAULT_STATUS4,
|
|
337
691
|
data.started_at ?? null,
|
|
338
692
|
data.completed_at ?? null,
|
|
339
693
|
data.tokens_used ?? null,
|
|
@@ -342,13 +696,13 @@ function insertRun(data) {
|
|
|
342
696
|
data.error ?? null
|
|
343
697
|
);
|
|
344
698
|
return toRunRow(
|
|
345
|
-
db.prepare(`SELECT ${
|
|
699
|
+
db.prepare(`SELECT ${SELECT_COLUMNS5} FROM agent_runs WHERE id = ?`).get(data.id)
|
|
346
700
|
);
|
|
347
701
|
}
|
|
348
702
|
function getRun(id) {
|
|
349
703
|
const db = getDatabase();
|
|
350
704
|
const row = db.prepare(
|
|
351
|
-
`SELECT ${
|
|
705
|
+
`SELECT ${SELECT_COLUMNS5} FROM agent_runs WHERE id = ?`
|
|
352
706
|
).get(id);
|
|
353
707
|
if (!row) return null;
|
|
354
708
|
return toRunRow(row);
|
|
@@ -380,10 +734,10 @@ function buildRunsWhere(options) {
|
|
|
380
734
|
function listRuns(options = {}) {
|
|
381
735
|
const db = getDatabase();
|
|
382
736
|
const { where, params } = buildRunsWhere(options);
|
|
383
|
-
const limit = options.limit ??
|
|
737
|
+
const limit = options.limit ?? DEFAULT_LIST_LIMIT2;
|
|
384
738
|
const offset = options.offset ?? 0;
|
|
385
739
|
const rows = db.prepare(
|
|
386
|
-
`SELECT ${
|
|
740
|
+
`SELECT ${SELECT_COLUMNS5}
|
|
387
741
|
FROM agent_runs
|
|
388
742
|
${where}
|
|
389
743
|
ORDER BY started_at DESC NULLS LAST
|
|
@@ -432,20 +786,36 @@ function updateRunStatus(id, status, completion) {
|
|
|
432
786
|
).run(...params);
|
|
433
787
|
if (info.changes === 0) return null;
|
|
434
788
|
return toRunRow(
|
|
435
|
-
db.prepare(`SELECT ${
|
|
789
|
+
db.prepare(`SELECT ${SELECT_COLUMNS5} FROM agent_runs WHERE id = ?`).get(id)
|
|
436
790
|
);
|
|
437
791
|
}
|
|
438
|
-
function
|
|
792
|
+
function getRunningRunForTask(agentId, taskName) {
|
|
439
793
|
const db = getDatabase();
|
|
440
794
|
const row = db.prepare(
|
|
441
|
-
`SELECT
|
|
442
|
-
|
|
443
|
-
WHERE agent_id = ? AND status = ?
|
|
444
|
-
ORDER BY started_at DESC NULLS LAST
|
|
795
|
+
`SELECT id FROM agent_runs
|
|
796
|
+
WHERE agent_id = ? AND task = ? AND status = ?
|
|
445
797
|
LIMIT 1`
|
|
446
|
-
).get(agentId, STATUS_RUNNING);
|
|
447
|
-
|
|
448
|
-
|
|
798
|
+
).get(agentId, taskName, STATUS_RUNNING);
|
|
799
|
+
return row?.id ?? null;
|
|
800
|
+
}
|
|
801
|
+
function getLatestRunId(agentId, taskName) {
|
|
802
|
+
const db = getDatabase();
|
|
803
|
+
if (taskName) {
|
|
804
|
+
const row2 = db.prepare(
|
|
805
|
+
`SELECT id FROM agent_runs
|
|
806
|
+
WHERE agent_id = ? AND task = ?
|
|
807
|
+
ORDER BY started_at DESC
|
|
808
|
+
LIMIT 1`
|
|
809
|
+
).get(agentId, taskName);
|
|
810
|
+
return row2?.id ?? null;
|
|
811
|
+
}
|
|
812
|
+
const row = db.prepare(
|
|
813
|
+
`SELECT id FROM agent_runs
|
|
814
|
+
WHERE agent_id = ?
|
|
815
|
+
ORDER BY started_at DESC
|
|
816
|
+
LIMIT 1`
|
|
817
|
+
).get(agentId);
|
|
818
|
+
return row?.id ?? null;
|
|
449
819
|
}
|
|
450
820
|
|
|
451
821
|
// src/db/queries/reports.ts
|
|
@@ -458,7 +828,7 @@ var REPORT_COLUMNS = [
|
|
|
458
828
|
"details",
|
|
459
829
|
"created_at"
|
|
460
830
|
];
|
|
461
|
-
var
|
|
831
|
+
var SELECT_COLUMNS6 = REPORT_COLUMNS.join(", ");
|
|
462
832
|
function toReportRow(row) {
|
|
463
833
|
return {
|
|
464
834
|
id: row.id,
|
|
@@ -488,13 +858,13 @@ function insertReport(data) {
|
|
|
488
858
|
);
|
|
489
859
|
const reportId = Number(info.lastInsertRowid);
|
|
490
860
|
return toReportRow(
|
|
491
|
-
db.prepare(`SELECT ${
|
|
861
|
+
db.prepare(`SELECT ${SELECT_COLUMNS6} FROM agent_reports WHERE id = ?`).get(reportId)
|
|
492
862
|
);
|
|
493
863
|
}
|
|
494
864
|
function listReports(runId) {
|
|
495
865
|
const db = getDatabase();
|
|
496
866
|
const rows = db.prepare(
|
|
497
|
-
`SELECT ${
|
|
867
|
+
`SELECT ${SELECT_COLUMNS6}
|
|
498
868
|
FROM agent_reports
|
|
499
869
|
WHERE run_id = ?
|
|
500
870
|
ORDER BY created_at ASC`
|
|
@@ -521,7 +891,7 @@ var GRAPH_EDGE_COLUMNS = [
|
|
|
521
891
|
"machine_id",
|
|
522
892
|
"synced_at"
|
|
523
893
|
];
|
|
524
|
-
var
|
|
894
|
+
var SELECT_COLUMNS7 = GRAPH_EDGE_COLUMNS.join(", ");
|
|
525
895
|
function toGraphEdgeRow(row) {
|
|
526
896
|
return {
|
|
527
897
|
id: row.id,
|
|
@@ -535,7 +905,7 @@ function toGraphEdgeRow(row) {
|
|
|
535
905
|
confidence: row.confidence,
|
|
536
906
|
properties: row.properties ?? null,
|
|
537
907
|
created_at: row.created_at,
|
|
538
|
-
machine_id: row.machine_id ??
|
|
908
|
+
machine_id: row.machine_id ?? getTeamMachineId(),
|
|
539
909
|
synced_at: row.synced_at ?? null
|
|
540
910
|
};
|
|
541
911
|
}
|
|
@@ -559,10 +929,10 @@ function insertGraphEdge(data) {
|
|
|
559
929
|
data.confidence ?? GRAPH_EDGE_DEFAULT_CONFIDENCE,
|
|
560
930
|
data.properties ?? null,
|
|
561
931
|
data.created_at,
|
|
562
|
-
data.machine_id ??
|
|
932
|
+
data.machine_id ?? getTeamMachineId()
|
|
563
933
|
);
|
|
564
934
|
const row = toGraphEdgeRow(
|
|
565
|
-
db.prepare(`SELECT ${
|
|
935
|
+
db.prepare(`SELECT ${SELECT_COLUMNS7} FROM graph_edges WHERE id = ?`).get(id)
|
|
566
936
|
);
|
|
567
937
|
syncRow("graph_edges", row);
|
|
568
938
|
return row;
|
|
@@ -591,7 +961,7 @@ function listGraphEdges(options = {}) {
|
|
|
591
961
|
const limit = options.limit ?? QUERY_DEFAULT_LIST_LIMIT;
|
|
592
962
|
params.push(limit);
|
|
593
963
|
const rows = db.prepare(
|
|
594
|
-
`SELECT ${
|
|
964
|
+
`SELECT ${SELECT_COLUMNS7}
|
|
595
965
|
FROM graph_edges
|
|
596
966
|
${where}
|
|
597
967
|
ORDER BY created_at DESC
|
|
@@ -611,7 +981,7 @@ function getGraphForNode(nodeId, nodeType, options) {
|
|
|
611
981
|
const frontierArray = Array.from(frontier);
|
|
612
982
|
const placeholders = frontierArray.map(() => `?`).join(", ");
|
|
613
983
|
const rows = db.prepare(
|
|
614
|
-
`SELECT ${
|
|
984
|
+
`SELECT ${SELECT_COLUMNS7}
|
|
615
985
|
FROM graph_edges
|
|
616
986
|
WHERE source_id IN (${placeholders}) OR target_id IN (${placeholders})`
|
|
617
987
|
).all(...frontierArray, ...frontierArray);
|
|
@@ -695,7 +1065,7 @@ function createBatchLineage(agentId, sessionId, batchId, createdAt) {
|
|
|
695
1065
|
}
|
|
696
1066
|
|
|
697
1067
|
// src/db/queries/entities.ts
|
|
698
|
-
var
|
|
1068
|
+
var DEFAULT_LIST_LIMIT3 = 100;
|
|
699
1069
|
var ENTITY_COLUMNS = [
|
|
700
1070
|
"id",
|
|
701
1071
|
"agent_id",
|
|
@@ -708,7 +1078,7 @@ var ENTITY_COLUMNS = [
|
|
|
708
1078
|
"machine_id",
|
|
709
1079
|
"synced_at"
|
|
710
1080
|
];
|
|
711
|
-
var
|
|
1081
|
+
var SELECT_COLUMNS8 = ENTITY_COLUMNS.join(", ");
|
|
712
1082
|
function toEntityRow(row) {
|
|
713
1083
|
return {
|
|
714
1084
|
id: row.id,
|
|
@@ -719,7 +1089,7 @@ function toEntityRow(row) {
|
|
|
719
1089
|
first_seen: row.first_seen,
|
|
720
1090
|
last_seen: row.last_seen,
|
|
721
1091
|
status: row.status ?? "active",
|
|
722
|
-
machine_id: row.machine_id ??
|
|
1092
|
+
machine_id: row.machine_id ?? "local",
|
|
723
1093
|
synced_at: row.synced_at ?? null
|
|
724
1094
|
};
|
|
725
1095
|
}
|
|
@@ -739,10 +1109,10 @@ function insertEntity(data) {
|
|
|
739
1109
|
data.properties ?? null,
|
|
740
1110
|
data.first_seen,
|
|
741
1111
|
data.last_seen,
|
|
742
|
-
data.machine_id ??
|
|
1112
|
+
data.machine_id ?? getTeamMachineId()
|
|
743
1113
|
);
|
|
744
1114
|
const row = toEntityRow(
|
|
745
|
-
db.prepare(`SELECT ${
|
|
1115
|
+
db.prepare(`SELECT ${SELECT_COLUMNS8} FROM entities WHERE agent_id = ? AND type = ? AND name = ?`).get(
|
|
746
1116
|
data.agent_id,
|
|
747
1117
|
data.type,
|
|
748
1118
|
data.name
|
|
@@ -754,7 +1124,7 @@ function insertEntity(data) {
|
|
|
754
1124
|
function getEntity(id) {
|
|
755
1125
|
const db = getDatabase();
|
|
756
1126
|
const row = db.prepare(
|
|
757
|
-
`SELECT ${
|
|
1127
|
+
`SELECT ${SELECT_COLUMNS8} FROM entities WHERE id = ?`
|
|
758
1128
|
).get(id);
|
|
759
1129
|
if (!row) return null;
|
|
760
1130
|
return toEntityRow(row);
|
|
@@ -790,12 +1160,12 @@ function listEntities(options = {}) {
|
|
|
790
1160
|
params.push(options.note_type);
|
|
791
1161
|
}
|
|
792
1162
|
const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
793
|
-
const limit = options.limit ??
|
|
1163
|
+
const limit = options.limit ?? DEFAULT_LIST_LIMIT3;
|
|
794
1164
|
const offset = options.offset ?? 0;
|
|
795
1165
|
params.push(limit);
|
|
796
1166
|
params.push(offset);
|
|
797
1167
|
const rows = db.prepare(
|
|
798
|
-
`SELECT ${
|
|
1168
|
+
`SELECT ${SELECT_COLUMNS8}
|
|
799
1169
|
FROM entities
|
|
800
1170
|
${where}
|
|
801
1171
|
ORDER BY last_seen DESC
|
|
@@ -816,7 +1186,7 @@ var EXTRACT_COLUMNS = [
|
|
|
816
1186
|
"machine_id",
|
|
817
1187
|
"synced_at"
|
|
818
1188
|
];
|
|
819
|
-
var
|
|
1189
|
+
var SELECT_COLUMNS9 = EXTRACT_COLUMNS.join(", ");
|
|
820
1190
|
function toDigestExtractRow(row) {
|
|
821
1191
|
return {
|
|
822
1192
|
id: row.id,
|
|
@@ -825,7 +1195,7 @@ function toDigestExtractRow(row) {
|
|
|
825
1195
|
content: row.content,
|
|
826
1196
|
substrate_hash: row.substrate_hash ?? null,
|
|
827
1197
|
generated_at: row.generated_at,
|
|
828
|
-
machine_id: row.machine_id ??
|
|
1198
|
+
machine_id: row.machine_id ?? "local",
|
|
829
1199
|
synced_at: row.synced_at ?? null
|
|
830
1200
|
};
|
|
831
1201
|
}
|
|
@@ -839,14 +1209,14 @@ function upsertDigestExtract(data) {
|
|
|
839
1209
|
generated_at = EXCLUDED.generated_at`
|
|
840
1210
|
).run(data.agent_id, data.tier, data.content, data.generated_at);
|
|
841
1211
|
const row = db.prepare(
|
|
842
|
-
`SELECT ${
|
|
1212
|
+
`SELECT ${SELECT_COLUMNS9} FROM digest_extracts WHERE agent_id = ? AND tier = ?`
|
|
843
1213
|
).get(data.agent_id, data.tier);
|
|
844
1214
|
return toDigestExtractRow(row);
|
|
845
1215
|
}
|
|
846
1216
|
function getDigestExtract(agentId, tier) {
|
|
847
1217
|
const db = getDatabase();
|
|
848
1218
|
const row = db.prepare(
|
|
849
|
-
`SELECT ${
|
|
1219
|
+
`SELECT ${SELECT_COLUMNS9} FROM digest_extracts
|
|
850
1220
|
WHERE agent_id = ? AND tier = ?`
|
|
851
1221
|
).get(agentId, tier);
|
|
852
1222
|
if (!row) return null;
|
|
@@ -856,7 +1226,7 @@ function listDigestExtracts(agentId) {
|
|
|
856
1226
|
const db = getDatabase();
|
|
857
1227
|
const tierPlaceholders = DIGEST_TIERS.map(() => "?").join(", ");
|
|
858
1228
|
const rows = db.prepare(
|
|
859
|
-
`SELECT ${
|
|
1229
|
+
`SELECT ${SELECT_COLUMNS9}
|
|
860
1230
|
FROM digest_extracts
|
|
861
1231
|
WHERE agent_id = ? AND tier IN (${tierPlaceholders})
|
|
862
1232
|
ORDER BY tier ASC`
|
|
@@ -864,6 +1234,66 @@ function listDigestExtracts(agentId) {
|
|
|
864
1234
|
return rows.map(toDigestExtractRow);
|
|
865
1235
|
}
|
|
866
1236
|
|
|
1237
|
+
// src/db/queries/skill-lineage.ts
|
|
1238
|
+
var LINEAGE_COLUMNS = [
|
|
1239
|
+
"id",
|
|
1240
|
+
"skill_id",
|
|
1241
|
+
"generation",
|
|
1242
|
+
"action",
|
|
1243
|
+
"rationale",
|
|
1244
|
+
"source_ids_added",
|
|
1245
|
+
"content_snapshot",
|
|
1246
|
+
"created_at"
|
|
1247
|
+
];
|
|
1248
|
+
var SELECT_COLUMNS10 = LINEAGE_COLUMNS.join(", ");
|
|
1249
|
+
function toLineageRow(row) {
|
|
1250
|
+
return {
|
|
1251
|
+
id: row.id,
|
|
1252
|
+
skill_id: row.skill_id,
|
|
1253
|
+
generation: row.generation,
|
|
1254
|
+
action: row.action,
|
|
1255
|
+
rationale: row.rationale,
|
|
1256
|
+
source_ids_added: row.source_ids_added ?? "[]",
|
|
1257
|
+
content_snapshot: row.content_snapshot,
|
|
1258
|
+
created_at: row.created_at
|
|
1259
|
+
};
|
|
1260
|
+
}
|
|
1261
|
+
function insertLineage(data) {
|
|
1262
|
+
const db = getDatabase();
|
|
1263
|
+
db.prepare(
|
|
1264
|
+
`INSERT INTO skill_lineage (
|
|
1265
|
+
id, skill_id, generation, action, rationale,
|
|
1266
|
+
source_ids_added, content_snapshot, created_at
|
|
1267
|
+
) VALUES (
|
|
1268
|
+
?, ?, ?, ?, ?,
|
|
1269
|
+
?, ?, ?
|
|
1270
|
+
)`
|
|
1271
|
+
).run(
|
|
1272
|
+
data.id,
|
|
1273
|
+
data.skill_id,
|
|
1274
|
+
data.generation,
|
|
1275
|
+
data.action,
|
|
1276
|
+
data.rationale,
|
|
1277
|
+
data.source_ids_added ?? "[]",
|
|
1278
|
+
data.content_snapshot,
|
|
1279
|
+
data.created_at
|
|
1280
|
+
);
|
|
1281
|
+
return toLineageRow(
|
|
1282
|
+
db.prepare(`SELECT ${SELECT_COLUMNS10} FROM skill_lineage WHERE id = ?`).get(data.id)
|
|
1283
|
+
);
|
|
1284
|
+
}
|
|
1285
|
+
function listLineageForSkill(skillId, limit = 50) {
|
|
1286
|
+
const db = getDatabase();
|
|
1287
|
+
const rows = db.prepare(
|
|
1288
|
+
`SELECT ${SELECT_COLUMNS10}
|
|
1289
|
+
FROM skill_lineage
|
|
1290
|
+
WHERE skill_id = ?
|
|
1291
|
+
ORDER BY generation DESC
|
|
1292
|
+
LIMIT ?`
|
|
1293
|
+
).all(skillId, limit);
|
|
1294
|
+
return rows.map(toLineageRow);
|
|
1295
|
+
}
|
|
1296
|
+
|
|
867
1297
|
export {
|
|
868
1298
|
populateBatchResponses,
|
|
869
1299
|
getUnprocessedBatches,
|
|
@@ -875,6 +1305,7 @@ export {
|
|
|
875
1305
|
setResponseSummary,
|
|
876
1306
|
getLatestBatch,
|
|
877
1307
|
listBatchesBySession,
|
|
1308
|
+
countBatchesBySession,
|
|
878
1309
|
insertGraphEdge,
|
|
879
1310
|
listGraphEdges,
|
|
880
1311
|
getGraphForNode,
|
|
@@ -885,6 +1316,24 @@ export {
|
|
|
885
1316
|
getDigestExtract,
|
|
886
1317
|
listDigestExtracts,
|
|
887
1318
|
errorMessage,
|
|
1319
|
+
insertCandidate,
|
|
1320
|
+
getCandidate,
|
|
1321
|
+
listCandidates,
|
|
1322
|
+
updateCandidate,
|
|
1323
|
+
listCandidatesWithCount,
|
|
1324
|
+
countCandidates,
|
|
1325
|
+
deleteCandidate,
|
|
1326
|
+
insertSkillRecord,
|
|
1327
|
+
getSkillRecord,
|
|
1328
|
+
getSkillRecordByName,
|
|
1329
|
+
listSkillRecords,
|
|
1330
|
+
updateSkillRecord,
|
|
1331
|
+
incrementSkillUsageCount,
|
|
1332
|
+
listSkillRecordsWithCount,
|
|
1333
|
+
countSkillRecords,
|
|
1334
|
+
deleteSkillRecordCascade,
|
|
1335
|
+
insertLineage,
|
|
1336
|
+
listLineageForSkill,
|
|
888
1337
|
insertTurn,
|
|
889
1338
|
listTurnsByRun,
|
|
890
1339
|
STATUS_RUNNING,
|
|
@@ -895,10 +1344,11 @@ export {
|
|
|
895
1344
|
listRuns,
|
|
896
1345
|
countRuns,
|
|
897
1346
|
updateRunStatus,
|
|
898
|
-
|
|
1347
|
+
getRunningRunForTask,
|
|
1348
|
+
getLatestRunId,
|
|
899
1349
|
insertReport,
|
|
900
1350
|
listReports,
|
|
901
1351
|
createSporeLineage,
|
|
902
1352
|
createBatchLineage
|
|
903
1353
|
};
|
|
904
|
-
//# sourceMappingURL=chunk-
|
|
1354
|
+
//# sourceMappingURL=chunk-5BK6M6X5.js.map
|