@goondocks/myco 0.20.0 → 0.20.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-4HUXVRHW.js → agent-run-X25Q2A6T.js} +6 -6
- package/dist/{agent-tasks-JF45ELB6.js → agent-tasks-7B6OFERB.js} +6 -6
- package/dist/{chunk-POR75WM6.js → chunk-2PDWCDKY.js} +2 -2
- package/dist/{chunk-57O67XVF.js → chunk-6X2ERTQV.js} +2 -2
- package/dist/{chunk-4M7EWPIA.js → chunk-CCRGY3QW.js} +4 -3
- package/dist/{chunk-4M7EWPIA.js.map → chunk-CCRGY3QW.js.map} +1 -1
- package/dist/{chunk-P3DN5EWW.js → chunk-JZGN33AY.js} +5 -5
- package/dist/chunk-JZGN33AY.js.map +1 -0
- package/dist/{chunk-YSNIAJ5D.js → chunk-KESLPBKV.js} +3 -3
- package/dist/{chunk-SRXTSI25.js → chunk-OD4AA7PV.js} +2 -2
- package/dist/chunk-OD4AA7PV.js.map +1 -0
- package/dist/{chunk-4LCIKVDM.js → chunk-Q36VMZST.js} +4 -4
- package/dist/chunk-Q36VMZST.js.map +1 -0
- package/dist/{chunk-L6XFAJIF.js → chunk-UYMFCYBF.js} +57 -7
- package/dist/chunk-UYMFCYBF.js.map +1 -0
- package/dist/{chunk-UOQQENDW.js → chunk-VVNL26WX.js} +2 -2
- package/dist/{chunk-QS5TWZBL.js → chunk-XATDZX7U.js} +2 -2
- package/dist/{chunk-ACQ2AIEM.js → chunk-XG5RRUYF.js} +2 -2
- package/dist/{cli-AHTINAHY.js → cli-GGPWH4UO.js} +38 -38
- package/dist/{client-LHENCAV3.js → client-YXQUTXVZ.js} +3 -3
- package/dist/{config-XPV5GDE4.js → config-OMCYHG2S.js} +2 -2
- package/dist/{doctor-XPCF5HV5.js → doctor-5JXJ36KA.js} +9 -9
- package/dist/doctor-5JXJ36KA.js.map +1 -0
- package/dist/{executor-ACDHGTRH.js → executor-HWW2QNZQ.js} +10 -10
- package/dist/{init-V3KCC36O.js → init-LMYOVZAV.js} +12 -16
- package/dist/init-LMYOVZAV.js.map +1 -0
- package/dist/{installer-ZNK4JSQA.js → installer-FS257JRZ.js} +3 -3
- package/dist/{loader-H7OFASVC.js → loader-CQYTFHEW.js} +2 -2
- package/dist/{loader-TSB5M7FD.js → loader-NOMBJUPW.js} +2 -2
- package/dist/{main-5S4MDCIO.js → main-YTBVRTBI.js} +234 -115
- package/dist/main-YTBVRTBI.js.map +1 -0
- package/dist/{open-AB5ULZIB.js → open-HG2DX6RN.js} +6 -6
- package/dist/{post-compact-P2B7C7FE.js → post-compact-JSECI44W.js} +4 -4
- package/dist/{post-tool-use-LXL6NXDS.js → post-tool-use-POGPTJBA.js} +3 -3
- package/dist/{post-tool-use-failure-WAYVVKGR.js → post-tool-use-failure-OT7BFWQW.js} +4 -4
- package/dist/{pre-compact-BCXUCF4V.js → pre-compact-OXVODKH4.js} +4 -4
- package/dist/{registry-MGJSJBAS.js → registry-U4CHXK6R.js} +3 -3
- package/dist/{remove-KAPX5NT2.js → remove-N7ZPELFU.js} +6 -6
- package/dist/{restart-HQO36FTG.js → restart-ADG5GBTB.js} +7 -7
- package/dist/{search-YOMOKAAI.js → search-AHZEUNRR.js} +6 -6
- package/dist/{server-2N23P6F2.js → server-AGVYZVP5.js} +3 -3
- package/dist/{session-WW2JLHPX.js → session-6IU4AXYP.js} +6 -6
- package/dist/{session-end-4WRTIBVQ.js → session-end-FT27DWYZ.js} +3 -3
- package/dist/{session-start-HRWTZXQR.js → session-start-LAFICHII.js} +6 -6
- package/dist/{session-start-HRWTZXQR.js.map → session-start-LAFICHII.js.map} +1 -1
- package/dist/{setup-llm-HFWSBUAF.js → setup-llm-77MP4I2G.js} +6 -6
- package/dist/src/agent/definitions/tasks/full-intelligence.yaml +1 -1
- package/dist/src/agent/definitions/tasks/skill-evolve.yaml +1 -0
- package/dist/src/agent/definitions/tasks/skill-generate.yaml +1 -0
- package/dist/src/agent/definitions/tasks/skill-survey.yaml +23 -7
- 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-7A4CJ4MS.js → stats-NVPWOYTE.js} +7 -7
- package/dist/{stop-R2GDHMRA.js → stop-ZPIKVLH4.js} +3 -3
- package/dist/{stop-failure-773KR4VZ.js → stop-failure-2PX67YJC.js} +4 -4
- package/dist/{subagent-start-IDECNBHW.js → subagent-start-UUE6EHQD.js} +4 -4
- package/dist/{subagent-stop-3JH7DR2S.js → subagent-stop-KQWWWPE6.js} +4 -4
- package/dist/{task-completed-AYVHPHDR.js → task-completed-WMHOFQ7B.js} +4 -4
- package/dist/{team-3JKF7VAD.js → team-LRZ6GTQK.js} +3 -3
- package/dist/{update-YWYW55JM.js → update-O6V4RC4W.js} +6 -6
- package/dist/{user-prompt-submit-YELSR6XI.js → user-prompt-submit-N36KUPHI.js} +3 -3
- package/dist/{verify-JS44DVKJ.js → verify-LXPV7NYG.js} +4 -4
- package/dist/verify-LXPV7NYG.js.map +1 -0
- package/dist/{version-K5NETYIL.js → version-XMPPJQHR.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-4LCIKVDM.js.map +0 -1
- package/dist/chunk-L6XFAJIF.js.map +0 -1
- package/dist/chunk-P3DN5EWW.js.map +0 -1
- package/dist/chunk-SRXTSI25.js.map +0 -1
- package/dist/doctor-XPCF5HV5.js.map +0 -1
- package/dist/init-V3KCC36O.js.map +0 -1
- package/dist/main-5S4MDCIO.js.map +0 -1
- package/dist/verify-JS44DVKJ.js.map +0 -1
- /package/dist/{agent-run-4HUXVRHW.js.map → agent-run-X25Q2A6T.js.map} +0 -0
- /package/dist/{agent-tasks-JF45ELB6.js.map → agent-tasks-7B6OFERB.js.map} +0 -0
- /package/dist/{chunk-POR75WM6.js.map → chunk-2PDWCDKY.js.map} +0 -0
- /package/dist/{chunk-57O67XVF.js.map → chunk-6X2ERTQV.js.map} +0 -0
- /package/dist/{chunk-YSNIAJ5D.js.map → chunk-KESLPBKV.js.map} +0 -0
- /package/dist/{chunk-UOQQENDW.js.map → chunk-VVNL26WX.js.map} +0 -0
- /package/dist/{chunk-QS5TWZBL.js.map → chunk-XATDZX7U.js.map} +0 -0
- /package/dist/{chunk-ACQ2AIEM.js.map → chunk-XG5RRUYF.js.map} +0 -0
- /package/dist/{cli-AHTINAHY.js.map → cli-GGPWH4UO.js.map} +0 -0
- /package/dist/{client-LHENCAV3.js.map → client-YXQUTXVZ.js.map} +0 -0
- /package/dist/{config-XPV5GDE4.js.map → config-OMCYHG2S.js.map} +0 -0
- /package/dist/{executor-ACDHGTRH.js.map → executor-HWW2QNZQ.js.map} +0 -0
- /package/dist/{installer-ZNK4JSQA.js.map → installer-FS257JRZ.js.map} +0 -0
- /package/dist/{loader-H7OFASVC.js.map → loader-CQYTFHEW.js.map} +0 -0
- /package/dist/{loader-TSB5M7FD.js.map → loader-NOMBJUPW.js.map} +0 -0
- /package/dist/{open-AB5ULZIB.js.map → open-HG2DX6RN.js.map} +0 -0
- /package/dist/{post-compact-P2B7C7FE.js.map → post-compact-JSECI44W.js.map} +0 -0
- /package/dist/{post-tool-use-LXL6NXDS.js.map → post-tool-use-POGPTJBA.js.map} +0 -0
- /package/dist/{post-tool-use-failure-WAYVVKGR.js.map → post-tool-use-failure-OT7BFWQW.js.map} +0 -0
- /package/dist/{pre-compact-BCXUCF4V.js.map → pre-compact-OXVODKH4.js.map} +0 -0
- /package/dist/{registry-MGJSJBAS.js.map → registry-U4CHXK6R.js.map} +0 -0
- /package/dist/{remove-KAPX5NT2.js.map → remove-N7ZPELFU.js.map} +0 -0
- /package/dist/{restart-HQO36FTG.js.map → restart-ADG5GBTB.js.map} +0 -0
- /package/dist/{search-YOMOKAAI.js.map → search-AHZEUNRR.js.map} +0 -0
- /package/dist/{server-2N23P6F2.js.map → server-AGVYZVP5.js.map} +0 -0
- /package/dist/{session-WW2JLHPX.js.map → session-6IU4AXYP.js.map} +0 -0
- /package/dist/{session-end-4WRTIBVQ.js.map → session-end-FT27DWYZ.js.map} +0 -0
- /package/dist/{setup-llm-HFWSBUAF.js.map → setup-llm-77MP4I2G.js.map} +0 -0
- /package/dist/{stats-7A4CJ4MS.js.map → stats-NVPWOYTE.js.map} +0 -0
- /package/dist/{stop-R2GDHMRA.js.map → stop-ZPIKVLH4.js.map} +0 -0
- /package/dist/{stop-failure-773KR4VZ.js.map → stop-failure-2PX67YJC.js.map} +0 -0
- /package/dist/{subagent-start-IDECNBHW.js.map → subagent-start-UUE6EHQD.js.map} +0 -0
- /package/dist/{subagent-stop-3JH7DR2S.js.map → subagent-stop-KQWWWPE6.js.map} +0 -0
- /package/dist/{task-completed-AYVHPHDR.js.map → task-completed-WMHOFQ7B.js.map} +0 -0
- /package/dist/{team-3JKF7VAD.js.map → team-LRZ6GTQK.js.map} +0 -0
- /package/dist/{update-YWYW55JM.js.map → update-O6V4RC4W.js.map} +0 -0
- /package/dist/{user-prompt-submit-YELSR6XI.js.map → user-prompt-submit-N36KUPHI.js.map} +0 -0
- /package/dist/{version-K5NETYIL.js.map → version-XMPPJQHR.js.map} +0 -0
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
getEmbeddingQueueDepth,
|
|
16
16
|
getUnembedded,
|
|
17
17
|
markEmbedded
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-JZGN33AY.js";
|
|
19
19
|
import {
|
|
20
20
|
getTeamPackageVersion,
|
|
21
21
|
loadSecrets,
|
|
@@ -23,8 +23,9 @@ import {
|
|
|
23
23
|
readSecrets,
|
|
24
24
|
resolveVaultConfigPath,
|
|
25
25
|
writeSecret
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-XATDZX7U.js";
|
|
27
27
|
import {
|
|
28
|
+
SKILL_SURVEY_TASK,
|
|
28
29
|
buildTaskInstruction,
|
|
29
30
|
closeOpenBatches,
|
|
30
31
|
countBatchesBySession,
|
|
@@ -49,6 +50,7 @@ import {
|
|
|
49
50
|
getRun,
|
|
50
51
|
getSkillRecord,
|
|
51
52
|
getSkillRecordByName,
|
|
53
|
+
getSkillSurveyEligibility,
|
|
52
54
|
hasConfiguredProvider,
|
|
53
55
|
incrementActivityCount,
|
|
54
56
|
incrementSkillUsageCount,
|
|
@@ -72,7 +74,7 @@ import {
|
|
|
72
74
|
setResponseSummary,
|
|
73
75
|
updateCandidate,
|
|
74
76
|
updateNotificationStatus
|
|
75
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-UYMFCYBF.js";
|
|
76
78
|
import {
|
|
77
79
|
fullTextSearch,
|
|
78
80
|
hydrateSearchResults
|
|
@@ -83,13 +85,13 @@ import {
|
|
|
83
85
|
loadAllTasks,
|
|
84
86
|
validateTaskName,
|
|
85
87
|
writeUserTask
|
|
86
|
-
} from "./chunk-
|
|
88
|
+
} from "./chunk-6X2ERTQV.js";
|
|
87
89
|
import {
|
|
88
90
|
AgentTaskSchema,
|
|
89
91
|
registerAgent,
|
|
90
92
|
resolveDefinitionsDir,
|
|
91
93
|
taskFromParsed
|
|
92
|
-
} from "./chunk-
|
|
94
|
+
} from "./chunk-CCRGY3QW.js";
|
|
93
95
|
import {
|
|
94
96
|
listTurnsByRun
|
|
95
97
|
} from "./chunk-6RFZWV4R.js";
|
|
@@ -110,11 +112,11 @@ import {
|
|
|
110
112
|
listBufferSessionIds
|
|
111
113
|
} from "./chunk-V7XG6V6C.js";
|
|
112
114
|
import "./chunk-POEPHBQK.js";
|
|
113
|
-
import "./chunk-
|
|
115
|
+
import "./chunk-KESLPBKV.js";
|
|
114
116
|
import "./chunk-SAKJMNSR.js";
|
|
115
117
|
import {
|
|
116
118
|
SymbiontInstaller
|
|
117
|
-
} from "./chunk-
|
|
119
|
+
} from "./chunk-Q36VMZST.js";
|
|
118
120
|
import {
|
|
119
121
|
checkLocalProvider
|
|
120
122
|
} from "./chunk-BPRIYNLE.js";
|
|
@@ -177,7 +179,7 @@ import {
|
|
|
177
179
|
updateConfig,
|
|
178
180
|
updateLocalConfig,
|
|
179
181
|
updateTeamConfig
|
|
180
|
-
} from "./chunk-
|
|
182
|
+
} from "./chunk-OD4AA7PV.js";
|
|
181
183
|
import {
|
|
182
184
|
closeDatabase,
|
|
183
185
|
getDatabase,
|
|
@@ -189,10 +191,10 @@ import {
|
|
|
189
191
|
} from "./chunk-ZXZPJJN3.js";
|
|
190
192
|
import {
|
|
191
193
|
resolveCliEntryPath
|
|
192
|
-
} from "./chunk-
|
|
194
|
+
} from "./chunk-VVNL26WX.js";
|
|
193
195
|
import {
|
|
194
196
|
getPluginVersion
|
|
195
|
-
} from "./chunk-
|
|
197
|
+
} from "./chunk-XG5RRUYF.js";
|
|
196
198
|
import {
|
|
197
199
|
loadManifests,
|
|
198
200
|
resolvePackageRoot
|
|
@@ -2287,7 +2289,7 @@ function getConfiguredManifests(projectRoot, config) {
|
|
|
2287
2289
|
return allManifests.filter((manifest) => fs12.existsSync(path12.join(projectRoot, manifest.configDir)));
|
|
2288
2290
|
}
|
|
2289
2291
|
function reconcileConfiguredSymbionts(projectRoot, vaultDir = path12.join(projectRoot, ".myco"), preloadedConfig) {
|
|
2290
|
-
const config = preloadedConfig ??
|
|
2292
|
+
const config = preloadedConfig ?? loadMergedConfig(vaultDir);
|
|
2291
2293
|
const manifests = getConfiguredManifests(projectRoot, config);
|
|
2292
2294
|
const packageRoot = resolvePackageRoot();
|
|
2293
2295
|
let updatedCount = 0;
|
|
@@ -2457,11 +2459,20 @@ function restoreBackup(db, backupPath) {
|
|
|
2457
2459
|
}
|
|
2458
2460
|
|
|
2459
2461
|
// src/daemon/api/backup.ts
|
|
2462
|
+
import os7 from "os";
|
|
2460
2463
|
import path14 from "path";
|
|
2464
|
+
function resolveBackupDir(config, vaultDir) {
|
|
2465
|
+
const rawDir = config.backup.dir;
|
|
2466
|
+
if (!rawDir) return path14.resolve(vaultDir, "backups");
|
|
2467
|
+
const expanded = rawDir.startsWith("~/") ? path14.join(os7.homedir(), rawDir.slice(2)) : rawDir;
|
|
2468
|
+
return path14.resolve(expanded);
|
|
2469
|
+
}
|
|
2461
2470
|
function createBackupHandlers(deps) {
|
|
2471
|
+
const currentBackupDir = () => resolveBackupDir(deps.liveConfig.current, deps.vaultDir);
|
|
2462
2472
|
async function handleCreateBackup(_req) {
|
|
2463
|
-
const
|
|
2464
|
-
const
|
|
2473
|
+
const backupDir = currentBackupDir();
|
|
2474
|
+
const filePath = createBackup(deps.db, backupDir, deps.machineId);
|
|
2475
|
+
const backups = listBackups(backupDir);
|
|
2465
2476
|
const created = backups.find((b) => b.machine_id === deps.machineId);
|
|
2466
2477
|
return {
|
|
2467
2478
|
body: {
|
|
@@ -2472,7 +2483,7 @@ function createBackupHandlers(deps) {
|
|
|
2472
2483
|
};
|
|
2473
2484
|
}
|
|
2474
2485
|
async function handleListBackups(_req) {
|
|
2475
|
-
const backups = listBackups(
|
|
2486
|
+
const backups = listBackups(currentBackupDir());
|
|
2476
2487
|
return { body: { backups } };
|
|
2477
2488
|
}
|
|
2478
2489
|
async function handleRestorePreview(req) {
|
|
@@ -2480,12 +2491,13 @@ function createBackupHandlers(deps) {
|
|
|
2480
2491
|
if (!machine_id) {
|
|
2481
2492
|
return { status: 400, body: { error: "missing_machine_id" } };
|
|
2482
2493
|
}
|
|
2483
|
-
const
|
|
2494
|
+
const backupDir = currentBackupDir();
|
|
2495
|
+
const backups = listBackups(backupDir);
|
|
2484
2496
|
const backup = backups.find((b) => b.machine_id === machine_id);
|
|
2485
2497
|
if (!backup) {
|
|
2486
2498
|
return { status: 404, body: { error: "backup_not_found" } };
|
|
2487
2499
|
}
|
|
2488
|
-
const backupPath = `${
|
|
2500
|
+
const backupPath = `${backupDir}/${backup.file_name}`;
|
|
2489
2501
|
const tables = restorePreview(deps.db, backupPath);
|
|
2490
2502
|
const total_new = tables.reduce((sum, t) => sum + t.new, 0);
|
|
2491
2503
|
const total_existing = tables.reduce((sum, t) => sum + t.existing, 0);
|
|
@@ -2496,12 +2508,13 @@ function createBackupHandlers(deps) {
|
|
|
2496
2508
|
if (!machine_id) {
|
|
2497
2509
|
return { status: 400, body: { error: "missing_machine_id" } };
|
|
2498
2510
|
}
|
|
2499
|
-
const
|
|
2511
|
+
const backupDir = currentBackupDir();
|
|
2512
|
+
const backups = listBackups(backupDir);
|
|
2500
2513
|
const backup = backups.find((b) => b.machine_id === machine_id);
|
|
2501
2514
|
if (!backup) {
|
|
2502
2515
|
return { status: 404, body: { error: "backup_not_found" } };
|
|
2503
2516
|
}
|
|
2504
|
-
const backupPath = `${
|
|
2517
|
+
const backupPath = `${backupDir}/${backup.file_name}`;
|
|
2505
2518
|
const result = restoreBackup(deps.db, backupPath);
|
|
2506
2519
|
return { body: { machine_id, ...result } };
|
|
2507
2520
|
}
|
|
@@ -2515,7 +2528,7 @@ function createBackupHandlers(deps) {
|
|
|
2515
2528
|
function createBackupConfigHandlers(deps) {
|
|
2516
2529
|
const { vaultDir } = deps;
|
|
2517
2530
|
async function handleGetBackupConfig() {
|
|
2518
|
-
const cfg =
|
|
2531
|
+
const cfg = loadMergedConfig(vaultDir);
|
|
2519
2532
|
return { body: { dir: cfg.backup.dir ?? null, default_dir: path14.resolve(vaultDir, "backups") } };
|
|
2520
2533
|
}
|
|
2521
2534
|
async function handlePutBackupConfig(req) {
|
|
@@ -2747,17 +2760,15 @@ function createTeamHandlers(deps) {
|
|
|
2747
2760
|
worker_url: url
|
|
2748
2761
|
});
|
|
2749
2762
|
writeSecret(vaultDir, TEAM_API_KEY_SECRET, api_key);
|
|
2750
|
-
|
|
2751
|
-
const config = loadConfig(vaultDir);
|
|
2763
|
+
const config = loadMergedConfig(vaultDir);
|
|
2752
2764
|
return { body: { connected: true, team: config.team } };
|
|
2753
2765
|
}
|
|
2754
2766
|
async function handleDisconnect(_req) {
|
|
2755
2767
|
updateTeamConfig(vaultDir, { enabled: false });
|
|
2756
|
-
deps.setTeamClient(null);
|
|
2757
2768
|
return { body: { connected: false } };
|
|
2758
2769
|
}
|
|
2759
2770
|
async function handleStatus(_req) {
|
|
2760
|
-
const config =
|
|
2771
|
+
const config = loadMergedConfig(vaultDir);
|
|
2761
2772
|
const client = deps.getTeamClient();
|
|
2762
2773
|
const secrets = readSecrets(vaultDir);
|
|
2763
2774
|
const hasApiKey = Boolean(secrets[TEAM_API_KEY_SECRET]);
|
|
@@ -2829,7 +2840,7 @@ function createTeamHandlers(deps) {
|
|
|
2829
2840
|
return { body: { retried: count } };
|
|
2830
2841
|
}
|
|
2831
2842
|
async function handleUpgradeWorker(_req) {
|
|
2832
|
-
const { upgradeWorker } = await import("./team-
|
|
2843
|
+
const { upgradeWorker } = await import("./team-LRZ6GTQK.js");
|
|
2833
2844
|
logger.info("team-sync.upgrade.start", "Starting worker upgrade");
|
|
2834
2845
|
const result = upgradeWorker(vaultDir);
|
|
2835
2846
|
if (!result.success) {
|
|
@@ -2986,7 +2997,7 @@ function createSessionLifecycleHandlers(deps) {
|
|
|
2986
2997
|
powerManager,
|
|
2987
2998
|
machineId,
|
|
2988
2999
|
logger,
|
|
2989
|
-
|
|
3000
|
+
liveConfig,
|
|
2990
3001
|
vaultDir
|
|
2991
3002
|
} = deps;
|
|
2992
3003
|
async function handleRegister(req) {
|
|
@@ -3018,7 +3029,7 @@ function createSessionLifecycleHandlers(deps) {
|
|
|
3018
3029
|
message: branch ? `Branch: ${branch}` : void 0,
|
|
3019
3030
|
link: `/sessions/${session_id}`,
|
|
3020
3031
|
metadata: { sessionId: session_id, agent: agent ?? "claude-code", branch }
|
|
3021
|
-
},
|
|
3032
|
+
}, liveConfig.current);
|
|
3022
3033
|
return { body: { ok: true, sessions: registry.sessions } };
|
|
3023
3034
|
}
|
|
3024
3035
|
async function handleUnregister(req) {
|
|
@@ -3038,7 +3049,7 @@ function createSessionLifecycleHandlers(deps) {
|
|
|
3038
3049
|
title: "Session ended",
|
|
3039
3050
|
link: `/sessions/${session_id}`,
|
|
3040
3051
|
metadata: { sessionId: session_id }
|
|
3041
|
-
},
|
|
3052
|
+
}, liveConfig.current);
|
|
3042
3053
|
return { body: { ok: true, sessions: registry.sessions } };
|
|
3043
3054
|
}
|
|
3044
3055
|
return { handleRegister, handleUnregister };
|
|
@@ -3221,7 +3232,7 @@ function createSkillRecordDeleteHandler(deps) {
|
|
|
3221
3232
|
logger.warn(LOG_KINDS.PROCESSOR_BATCH, "Failed to remove skill directory", { name: record.name, error: String(err) });
|
|
3222
3233
|
}
|
|
3223
3234
|
try {
|
|
3224
|
-
const { syncSkillSymlinks } = await import("./installer-
|
|
3235
|
+
const { syncSkillSymlinks } = await import("./installer-FS257JRZ.js");
|
|
3225
3236
|
syncSkillSymlinks(projectRoot, record.name, { remove: true });
|
|
3226
3237
|
} catch (err) {
|
|
3227
3238
|
logger.warn(LOG_KINDS.PROCESSOR_BATCH, "Failed to remove skill symlinks", { name: record.name, error: String(err) });
|
|
@@ -3234,37 +3245,56 @@ function createSkillRecordDeleteHandler(deps) {
|
|
|
3234
3245
|
|
|
3235
3246
|
// src/daemon/team-sync-init.ts
|
|
3236
3247
|
function initTeamSync(deps) {
|
|
3237
|
-
const {
|
|
3248
|
+
const { liveConfig, machineId, logger, vaultDir, serverVersion } = deps;
|
|
3238
3249
|
let teamClient = null;
|
|
3239
|
-
|
|
3240
|
-
|
|
3241
|
-
const
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
|
|
3250
|
-
|
|
3250
|
+
let clientSignature = null;
|
|
3251
|
+
async function reconcileClient() {
|
|
3252
|
+
const config = liveConfig.current;
|
|
3253
|
+
const workerUrl = config.team.worker_url?.trim() || null;
|
|
3254
|
+
const apiKey = readSecrets(vaultDir)[TEAM_API_KEY_SECRET]?.trim() || null;
|
|
3255
|
+
const nextSignature = config.team.enabled && workerUrl && apiKey ? `${workerUrl}
|
|
3256
|
+
${apiKey}` : null;
|
|
3257
|
+
if (!nextSignature) {
|
|
3258
|
+
if (teamClient) {
|
|
3259
|
+
logger.info(LOG_KINDS.TEAM_SYNC_START, "Team sync client cleared", {
|
|
3260
|
+
enabled: config.team.enabled,
|
|
3261
|
+
has_worker_url: Boolean(workerUrl),
|
|
3262
|
+
has_api_key: Boolean(apiKey)
|
|
3263
|
+
});
|
|
3264
|
+
}
|
|
3265
|
+
teamClient = null;
|
|
3266
|
+
clientSignature = null;
|
|
3267
|
+
return;
|
|
3268
|
+
}
|
|
3269
|
+
if (teamClient && clientSignature === nextSignature) return;
|
|
3270
|
+
const activeWorkerUrl = workerUrl;
|
|
3271
|
+
const activeApiKey = apiKey;
|
|
3272
|
+
teamClient = new TeamSyncClient({
|
|
3273
|
+
workerUrl: activeWorkerUrl,
|
|
3274
|
+
apiKey: activeApiKey,
|
|
3275
|
+
machineId,
|
|
3276
|
+
syncProtocolVersion: SYNC_PROTOCOL_VERSION
|
|
3277
|
+
});
|
|
3278
|
+
clientSignature = nextSignature;
|
|
3279
|
+
logger.info(LOG_KINDS.TEAM_SYNC_START, "Team sync client initialized", { worker_url: activeWorkerUrl });
|
|
3280
|
+
try {
|
|
3281
|
+
await teamClient.connect({
|
|
3251
3282
|
machine_id: machineId,
|
|
3252
3283
|
version: serverVersion
|
|
3253
|
-
}).then(() => {
|
|
3254
|
-
logger.info(LOG_KINDS.TEAM_SYNC_START, "Node registered with team worker");
|
|
3255
|
-
}).catch((err) => {
|
|
3256
|
-
logger.warn(LOG_KINDS.TEAM_SYNC_ERROR, "Node registration failed (will retry on next flush)", { error: err.message });
|
|
3257
3284
|
});
|
|
3258
|
-
|
|
3259
|
-
|
|
3260
|
-
|
|
3261
|
-
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
3267
|
-
|
|
3285
|
+
logger.info(LOG_KINDS.TEAM_SYNC_START, "Node registered with team worker");
|
|
3286
|
+
} catch (err) {
|
|
3287
|
+
logger.warn(LOG_KINDS.TEAM_SYNC_ERROR, "Node registration failed (will retry on next flush)", {
|
|
3288
|
+
error: err.message
|
|
3289
|
+
});
|
|
3290
|
+
}
|
|
3291
|
+
try {
|
|
3292
|
+
const backfilled = backfillUnsynced(machineId);
|
|
3293
|
+
if (backfilled > 0) {
|
|
3294
|
+
logger.info(LOG_KINDS.TEAM_SYNC_START, `Backfilled ${backfilled} unsynced records into outbox`);
|
|
3295
|
+
}
|
|
3296
|
+
} catch (err) {
|
|
3297
|
+
logger.error(LOG_KINDS.TEAM_SYNC_ERROR, "Backfill failed", { error: err.message });
|
|
3268
3298
|
}
|
|
3269
3299
|
}
|
|
3270
3300
|
return {
|
|
@@ -3272,8 +3302,8 @@ function initTeamSync(deps) {
|
|
|
3272
3302
|
setTeamClient: (client) => {
|
|
3273
3303
|
teamClient = client;
|
|
3274
3304
|
},
|
|
3305
|
+
reconcileClient,
|
|
3275
3306
|
registerFlushJob: (powerManager) => {
|
|
3276
|
-
if (!config.team.enabled) return;
|
|
3277
3307
|
const logDeadLettered = (ids) => {
|
|
3278
3308
|
if (ids.length > 0) {
|
|
3279
3309
|
logger.error(LOG_KINDS.TEAM_SYNC_DEAD_LETTER, `Dead-lettered ${ids.length} records after max retries`, { ids });
|
|
@@ -3282,8 +3312,9 @@ function initTeamSync(deps) {
|
|
|
3282
3312
|
powerManager.register({
|
|
3283
3313
|
name: "team-sync-flush",
|
|
3284
3314
|
runIn: ["active", "idle", "sleep"],
|
|
3285
|
-
preventsDeepSleep: () => countPending() > 0,
|
|
3315
|
+
preventsDeepSleep: () => liveConfig.current.team.enabled && countPending() > 0,
|
|
3286
3316
|
fn: async () => {
|
|
3317
|
+
if (!liveConfig.current.team.enabled) return;
|
|
3287
3318
|
const client = teamClient;
|
|
3288
3319
|
if (!client) return;
|
|
3289
3320
|
const pending = listPending();
|
|
@@ -3849,11 +3880,12 @@ async function cleanupAfterSessionCascade(sessionId, result, embeddingManager, v
|
|
|
3849
3880
|
|
|
3850
3881
|
// src/daemon/trigger-title-summary.ts
|
|
3851
3882
|
async function triggerTitleSummary(sessionId, deps) {
|
|
3852
|
-
const { vaultDir, embeddingManager,
|
|
3883
|
+
const { vaultDir, embeddingManager, liveConfig, logger } = deps;
|
|
3884
|
+
const config = liveConfig.current;
|
|
3853
3885
|
if (config.agent.summary_batch_interval <= 0) return;
|
|
3854
3886
|
if (config.agent.event_tasks_enabled === false) return;
|
|
3855
3887
|
try {
|
|
3856
|
-
const { runAgent } = await import("./executor-
|
|
3888
|
+
const { runAgent } = await import("./executor-HWW2QNZQ.js");
|
|
3857
3889
|
runAgent(vaultDir, {
|
|
3858
3890
|
task: "title-summary",
|
|
3859
3891
|
instruction: `Process session ${sessionId} only`,
|
|
@@ -3918,7 +3950,7 @@ async function handleGetSessionPlans(req) {
|
|
|
3918
3950
|
return { body: plans };
|
|
3919
3951
|
}
|
|
3920
3952
|
function createSessionMutationHandlers(deps) {
|
|
3921
|
-
const { embeddingManager, vaultDir, logger,
|
|
3953
|
+
const { embeddingManager, vaultDir, logger, liveConfig } = deps;
|
|
3922
3954
|
async function handleDeleteSession(req) {
|
|
3923
3955
|
const sessionId = req.params.id;
|
|
3924
3956
|
const result = deleteSessionCascade(sessionId);
|
|
@@ -3942,7 +3974,7 @@ function createSessionMutationHandlers(deps) {
|
|
|
3942
3974
|
ended_at: session.ended_at ?? epochSeconds()
|
|
3943
3975
|
});
|
|
3944
3976
|
}
|
|
3945
|
-
await triggerTitleSummary(sessionId, { vaultDir, embeddingManager,
|
|
3977
|
+
await triggerTitleSummary(sessionId, { vaultDir, embeddingManager, liveConfig, logger });
|
|
3946
3978
|
logger.info(LOG_KINDS.API_SESSION_COMPLETE, "Session manually completed", {
|
|
3947
3979
|
session_id: sessionId,
|
|
3948
3980
|
was_active: wasActive
|
|
@@ -4378,7 +4410,8 @@ var PromptContextBody = external_exports.object({
|
|
|
4378
4410
|
function createSessionContextHandler(deps) {
|
|
4379
4411
|
return async function handleSessionContext(req) {
|
|
4380
4412
|
const { session_id, branch } = SessionContextBody.parse(req.body);
|
|
4381
|
-
const { logger,
|
|
4413
|
+
const { logger, liveConfig } = deps;
|
|
4414
|
+
const config = liveConfig.current;
|
|
4382
4415
|
logger.debug(LOG_KINDS.CONTEXT_QUERY, "Session context query", { session_id });
|
|
4383
4416
|
try {
|
|
4384
4417
|
const parts = [];
|
|
@@ -4490,7 +4523,8 @@ function createResumeContextHandler(deps) {
|
|
|
4490
4523
|
function createPromptContextHandler(deps) {
|
|
4491
4524
|
return async function handlePromptContext(req) {
|
|
4492
4525
|
const { prompt, session_id } = PromptContextBody.parse(req.body);
|
|
4493
|
-
const { logger,
|
|
4526
|
+
const { logger, liveConfig, embeddingManager } = deps;
|
|
4527
|
+
const config = liveConfig.current;
|
|
4494
4528
|
if (!config.context.prompt_search) {
|
|
4495
4529
|
logger.debug(LOG_KINDS.CONTEXT_PROMPT, "Prompt search disabled by config", { session_id });
|
|
4496
4530
|
return { body: { text: "" } };
|
|
@@ -4611,7 +4645,7 @@ async function handleListSymbionts(vaultDir) {
|
|
|
4611
4645
|
const manifests = loadManifests();
|
|
4612
4646
|
let enabledNames = null;
|
|
4613
4647
|
try {
|
|
4614
|
-
enabledNames = getEnabledSymbiontNames(
|
|
4648
|
+
enabledNames = getEnabledSymbiontNames(loadMergedConfig(vaultDir));
|
|
4615
4649
|
} catch {
|
|
4616
4650
|
}
|
|
4617
4651
|
const symbionts = manifests.map((m) => ({
|
|
@@ -4628,7 +4662,7 @@ async function handleListSymbionts(vaultDir) {
|
|
|
4628
4662
|
var EMBEDDING_STATUS_IDLE = "idle";
|
|
4629
4663
|
var EMBEDDING_STATUS_PENDING = "pending";
|
|
4630
4664
|
async function handleGetEmbeddingStatus(vaultDir) {
|
|
4631
|
-
const config =
|
|
4665
|
+
const config = loadMergedConfig(vaultDir);
|
|
4632
4666
|
const { queue_depth, embedded_count } = getEmbeddingQueueDepth();
|
|
4633
4667
|
return {
|
|
4634
4668
|
body: {
|
|
@@ -6050,7 +6084,7 @@ async function handleCreateNotification(vaultDir, body) {
|
|
|
6050
6084
|
return { status: 400, body: { error: "validation_failed", issues: parsed.error.issues } };
|
|
6051
6085
|
}
|
|
6052
6086
|
const { domain, type, title, message, link, metadata } = parsed.data;
|
|
6053
|
-
const config =
|
|
6087
|
+
const config = loadMergedConfig(vaultDir);
|
|
6054
6088
|
if (!config.notifications.enabled) {
|
|
6055
6089
|
return { body: { ok: true, suppressed: true, reason: "notifications_disabled" } };
|
|
6056
6090
|
}
|
|
@@ -6254,7 +6288,7 @@ async function handleDeleteTask(req, vaultDir) {
|
|
|
6254
6288
|
}
|
|
6255
6289
|
async function handleGetTaskConfig(req, vaultDir) {
|
|
6256
6290
|
const taskId = req.params.id;
|
|
6257
|
-
const config =
|
|
6291
|
+
const config = loadMergedConfig(vaultDir);
|
|
6258
6292
|
const taskConfig = config.agent.tasks?.[taskId] ?? null;
|
|
6259
6293
|
return { status: HTTP_OK, body: { taskId, config: taskConfig } };
|
|
6260
6294
|
}
|
|
@@ -6406,18 +6440,19 @@ function buildScheduledJobs(tasks, configOverrides, context, initialLastRuns) {
|
|
|
6406
6440
|
}
|
|
6407
6441
|
|
|
6408
6442
|
// src/daemon/task-scheduling.ts
|
|
6443
|
+
var SCHEDULED_JOB_PREFIX = "scheduled:";
|
|
6409
6444
|
async function registerScheduledTasks(powerManager, deps) {
|
|
6410
|
-
const { definitionsDir, vaultDir, embeddingManager, logger,
|
|
6445
|
+
const { definitionsDir, vaultDir, embeddingManager, logger, liveConfig } = deps;
|
|
6411
6446
|
const runningTasks = /* @__PURE__ */ new Set();
|
|
6412
6447
|
if (!definitionsDir) {
|
|
6413
6448
|
logger.warn(LOG_KINDS.AGENT_ERROR, "Skipping dynamic task scheduling \u2014 definitions directory unavailable");
|
|
6414
6449
|
return;
|
|
6415
6450
|
}
|
|
6416
|
-
|
|
6417
|
-
|
|
6418
|
-
|
|
6451
|
+
let lastEnabled = liveConfig.current.agent.scheduled_tasks_enabled !== false;
|
|
6452
|
+
if (!lastEnabled) {
|
|
6453
|
+
logger.info(LOG_KINDS.AGENT_RUN, "Scheduled agent tasks disabled (agent.scheduled_tasks_enabled: false) \u2014 jobs registered but will no-op until enabled");
|
|
6419
6454
|
}
|
|
6420
|
-
const { loadAllTasks: loadAllTasks2 } = await import("./registry-
|
|
6455
|
+
const { loadAllTasks: loadAllTasks2 } = await import("./registry-U4CHXK6R.js");
|
|
6421
6456
|
const allTasks = Array.from(loadAllTasks2(definitionsDir, vaultDir).values());
|
|
6422
6457
|
const taskAgentMap = /* @__PURE__ */ new Map();
|
|
6423
6458
|
for (const task of allTasks) {
|
|
@@ -6443,7 +6478,17 @@ async function registerScheduledTasks(powerManager, deps) {
|
|
|
6443
6478
|
else runningTasks.delete(name);
|
|
6444
6479
|
},
|
|
6445
6480
|
runTask: async (taskName) => {
|
|
6446
|
-
const
|
|
6481
|
+
const config = liveConfig.current;
|
|
6482
|
+
const enabled = config.agent.scheduled_tasks_enabled !== false;
|
|
6483
|
+
if (enabled !== lastEnabled) {
|
|
6484
|
+
logger.info(
|
|
6485
|
+
LOG_KINDS.AGENT_RUN,
|
|
6486
|
+
enabled ? "Scheduled agent tasks re-enabled \u2014 resuming" : "Scheduled agent tasks disabled \u2014 skipping until re-enabled"
|
|
6487
|
+
);
|
|
6488
|
+
lastEnabled = enabled;
|
|
6489
|
+
}
|
|
6490
|
+
if (!enabled) return;
|
|
6491
|
+
const { runAgent } = await import("./executor-HWW2QNZQ.js");
|
|
6447
6492
|
const taskConfig = config.agent.tasks?.[taskName];
|
|
6448
6493
|
const projectRoot = resolve(vaultDir, "..");
|
|
6449
6494
|
const built = buildTaskInstruction(taskName, taskConfig?.params, taskAgentMap.get(taskName), projectRoot, embeddingManager);
|
|
@@ -6525,6 +6570,9 @@ async function registerScheduledTasks(powerManager, deps) {
|
|
|
6525
6570
|
},
|
|
6526
6571
|
"has-approved-candidates": () => {
|
|
6527
6572
|
return countCandidates({ status: "approved" }) > 0;
|
|
6573
|
+
},
|
|
6574
|
+
"has-skill-survey-evidence": () => {
|
|
6575
|
+
return getSkillSurveyEligibility(taskAgentMap.get(SKILL_SURVEY_TASK)).eligible;
|
|
6528
6576
|
}
|
|
6529
6577
|
},
|
|
6530
6578
|
onTaskError: (taskName, err) => {
|
|
@@ -6535,14 +6583,12 @@ async function registerScheduledTasks(powerManager, deps) {
|
|
|
6535
6583
|
};
|
|
6536
6584
|
const scheduledJobs = buildScheduledJobs(
|
|
6537
6585
|
allTasks,
|
|
6538
|
-
|
|
6586
|
+
liveConfig.current.agent.tasks ?? {},
|
|
6539
6587
|
scheduledContext,
|
|
6540
6588
|
initialLastRuns
|
|
6541
6589
|
);
|
|
6542
|
-
|
|
6543
|
-
|
|
6544
|
-
}
|
|
6545
|
-
logger.info(LOG_KINDS.DAEMON_START, `Registered ${scheduledJobs.length} scheduled task(s)`, {
|
|
6590
|
+
powerManager.replaceGroup(SCHEDULED_JOB_PREFIX, scheduledJobs);
|
|
6591
|
+
logger.info(LOG_KINDS.DAEMON_START, `Synced ${scheduledJobs.length} scheduled task(s)`, {
|
|
6546
6592
|
tasks: scheduledJobs.map((j) => j.name)
|
|
6547
6593
|
});
|
|
6548
6594
|
}
|
|
@@ -6807,7 +6853,7 @@ function createAgentRunHandlers(deps) {
|
|
|
6807
6853
|
const { vaultDir, embeddingManager, logger } = deps;
|
|
6808
6854
|
async function handleRun(req) {
|
|
6809
6855
|
const { task, instruction: rawInstruction, agentId } = AgentRunBody.parse(req.body);
|
|
6810
|
-
const mycoConfig =
|
|
6856
|
+
const mycoConfig = loadMergedConfig(vaultDir);
|
|
6811
6857
|
if (!hasConfiguredProvider(mycoConfig, task)) {
|
|
6812
6858
|
return {
|
|
6813
6859
|
status: 400,
|
|
@@ -6842,7 +6888,7 @@ function createAgentRunHandlers(deps) {
|
|
|
6842
6888
|
};
|
|
6843
6889
|
}
|
|
6844
6890
|
}
|
|
6845
|
-
const { runAgent } = await import("./executor-
|
|
6891
|
+
const { runAgent } = await import("./executor-HWW2QNZQ.js");
|
|
6846
6892
|
const resultPromise = runAgent(vaultDir, {
|
|
6847
6893
|
task,
|
|
6848
6894
|
instruction,
|
|
@@ -7218,6 +7264,10 @@ var PowerManager = class {
|
|
|
7218
7264
|
register(job) {
|
|
7219
7265
|
this.jobs.push(job);
|
|
7220
7266
|
}
|
|
7267
|
+
replaceGroup(prefix, jobs) {
|
|
7268
|
+
this.jobs = this.jobs.filter((job) => !job.name.startsWith(prefix));
|
|
7269
|
+
this.jobs.push(...jobs);
|
|
7270
|
+
}
|
|
7221
7271
|
recordActivity() {
|
|
7222
7272
|
this.lastActivity = Date.now();
|
|
7223
7273
|
this.deepSleepHeld = false;
|
|
@@ -7367,7 +7417,7 @@ async function runSessionMaintenance(deps) {
|
|
|
7367
7417
|
// src/daemon/power-jobs.ts
|
|
7368
7418
|
var STAGING_MAX_AGE_MS = 24 * 60 * 60 * 1e3;
|
|
7369
7419
|
function registerPowerJobs(powerManager, deps) {
|
|
7370
|
-
const { embeddingManager, registry, logger,
|
|
7420
|
+
const { embeddingManager, registry, logger, liveConfig, db, machineId, vaultDir, databaseManager } = deps;
|
|
7371
7421
|
let reconcileRunning = false;
|
|
7372
7422
|
powerManager.register({
|
|
7373
7423
|
name: "embedding-reconcile",
|
|
@@ -7390,14 +7440,14 @@ function registerPowerJobs(powerManager, deps) {
|
|
|
7390
7440
|
registeredSessionIds: () => registry.sessions,
|
|
7391
7441
|
embeddingManager,
|
|
7392
7442
|
vaultDir,
|
|
7393
|
-
staleThresholdMs:
|
|
7443
|
+
staleThresholdMs: liveConfig.current.daemon.stale_session_threshold_ms
|
|
7394
7444
|
})
|
|
7395
7445
|
});
|
|
7396
7446
|
powerManager.register({
|
|
7397
7447
|
name: "log-retention",
|
|
7398
7448
|
runIn: ["idle", "sleep"],
|
|
7399
7449
|
fn: async () => {
|
|
7400
|
-
const retentionDays =
|
|
7450
|
+
const retentionDays = liveConfig.current.daemon.log_retention_days;
|
|
7401
7451
|
const cutoff = new Date(Date.now() - retentionDays * MS_PER_DAY).toISOString();
|
|
7402
7452
|
const deleted = deleteOldLogs(cutoff);
|
|
7403
7453
|
if (deleted > 0) {
|
|
@@ -7410,6 +7460,7 @@ function registerPowerJobs(powerManager, deps) {
|
|
|
7410
7460
|
runIn: ["idle", "sleep"],
|
|
7411
7461
|
fn: async () => {
|
|
7412
7462
|
try {
|
|
7463
|
+
const backupDir = resolveBackupDir(liveConfig.current, vaultDir);
|
|
7413
7464
|
logger.info(LOG_KINDS.BACKUP_START, "Auto-backup starting");
|
|
7414
7465
|
const filePath = createBackup(db, backupDir, machineId);
|
|
7415
7466
|
logger.info(LOG_KINDS.BACKUP_COMPLETE, "Auto-backup complete", { file_path: filePath });
|
|
@@ -7422,6 +7473,7 @@ function registerPowerJobs(powerManager, deps) {
|
|
|
7422
7473
|
name: "database-optimize",
|
|
7423
7474
|
runIn: ["idle", "sleep"],
|
|
7424
7475
|
fn: async () => {
|
|
7476
|
+
const config = liveConfig.current;
|
|
7425
7477
|
if (!config.maintenance?.auto_optimize) return;
|
|
7426
7478
|
const intervalMs = (config.maintenance.auto_optimize_interval_hours ?? 24) * MS_PER_HOUR;
|
|
7427
7479
|
const lastRun = await databaseManager.getLastOptimizeAt();
|
|
@@ -7734,7 +7786,7 @@ function captureBatchImages(input) {
|
|
|
7734
7786
|
|
|
7735
7787
|
// src/daemon/plan-capture.ts
|
|
7736
7788
|
import { createHash as createHash4 } from "crypto";
|
|
7737
|
-
import
|
|
7789
|
+
import os8 from "os";
|
|
7738
7790
|
import path20 from "path";
|
|
7739
7791
|
function extractTaggedPlans(text, tags) {
|
|
7740
7792
|
const results = [];
|
|
@@ -7763,7 +7815,7 @@ var PLAN_ID_HASH_LENGTH = 16;
|
|
|
7763
7815
|
function isInPlanDirectory(filePath, watchDirs, projectRoot) {
|
|
7764
7816
|
const abs = path20.isAbsolute(filePath) ? filePath : path20.resolve(projectRoot, filePath);
|
|
7765
7817
|
return watchDirs.some((dir) => {
|
|
7766
|
-
const expanded = dir.startsWith("~/") ? path20.join(
|
|
7818
|
+
const expanded = dir.startsWith("~/") ? path20.join(os8.homedir(), dir.slice(2)) : dir;
|
|
7767
7819
|
const absDir = path20.isAbsolute(expanded) ? expanded : path20.resolve(projectRoot, expanded);
|
|
7768
7820
|
const prefix = absDir.endsWith(path20.sep) ? absDir : absDir + path20.sep;
|
|
7769
7821
|
return abs === absDir || abs.startsWith(prefix);
|
|
@@ -7867,7 +7919,7 @@ function enrichTurnsWithToolMetadata(turns, events) {
|
|
|
7867
7919
|
}
|
|
7868
7920
|
}
|
|
7869
7921
|
function createStopProcessor(deps) {
|
|
7870
|
-
const { registry, sessionBuffers, transcriptMiner, embeddingManager, logger,
|
|
7922
|
+
const { registry, sessionBuffers, transcriptMiner, embeddingManager, logger, liveConfig, vaultDir } = deps;
|
|
7871
7923
|
let activeStopProcessing = null;
|
|
7872
7924
|
const sessionTitleCache = /* @__PURE__ */ new Map();
|
|
7873
7925
|
const StopBody = external_exports.object({
|
|
@@ -7877,7 +7929,7 @@ function createStopProcessor(deps) {
|
|
|
7877
7929
|
transcript_path: external_exports.string().nullish(),
|
|
7878
7930
|
last_assistant_message: external_exports.string().nullish()
|
|
7879
7931
|
});
|
|
7880
|
-
const triggerTitleSummary2 = (sessionId) => triggerTitleSummary(sessionId, { vaultDir, embeddingManager,
|
|
7932
|
+
const triggerTitleSummary2 = (sessionId) => triggerTitleSummary(sessionId, { vaultDir, embeddingManager, liveConfig, logger });
|
|
7881
7933
|
function cleanupInvalidCapturedSession(sessionId) {
|
|
7882
7934
|
registry.unregister(sessionId);
|
|
7883
7935
|
sessionBuffers.delete(sessionId);
|
|
@@ -8138,7 +8190,7 @@ function createEventDispatcher(deps) {
|
|
|
8138
8190
|
powerManager,
|
|
8139
8191
|
logger,
|
|
8140
8192
|
machineId,
|
|
8141
|
-
|
|
8193
|
+
liveConfig,
|
|
8142
8194
|
vaultDir,
|
|
8143
8195
|
reconcileSession,
|
|
8144
8196
|
planWatchConfig,
|
|
@@ -8205,7 +8257,7 @@ function createEventDispatcher(deps) {
|
|
|
8205
8257
|
});
|
|
8206
8258
|
}
|
|
8207
8259
|
const batchCount = promptNumber;
|
|
8208
|
-
const summaryInterval =
|
|
8260
|
+
const summaryInterval = liveConfig.current.agent.summary_batch_interval;
|
|
8209
8261
|
if (summaryInterval > 0 && batchCount > 0 && batchCount % summaryInterval === 0) {
|
|
8210
8262
|
triggerTitleSummary2(event.session_id);
|
|
8211
8263
|
}
|
|
@@ -8429,7 +8481,6 @@ function createPlanWatchReaction(deps) {
|
|
|
8429
8481
|
|
|
8430
8482
|
// src/daemon/main.ts
|
|
8431
8483
|
import fs23 from "fs";
|
|
8432
|
-
import os8 from "os";
|
|
8433
8484
|
import path22 from "path";
|
|
8434
8485
|
function killStaleDaemon(vaultDir, logger) {
|
|
8435
8486
|
const daemonJsonPath = path22.join(vaultDir, "daemon.json");
|
|
@@ -8456,7 +8507,8 @@ async function main() {
|
|
|
8456
8507
|
}
|
|
8457
8508
|
const vaultDir = path22.resolve(vaultArg);
|
|
8458
8509
|
loadSecrets(vaultDir);
|
|
8459
|
-
const config =
|
|
8510
|
+
const config = loadMergedConfig(vaultDir);
|
|
8511
|
+
const liveConfig = { current: config };
|
|
8460
8512
|
const manifests = loadManifests();
|
|
8461
8513
|
const symbiontPlanDirs = manifests.flatMap((m) => m.capture?.planDirs ?? []);
|
|
8462
8514
|
const symbiontPlanTags = [...new Set(manifests.flatMap((m) => m.capture?.planTags ?? []))];
|
|
@@ -8571,7 +8623,7 @@ async function main() {
|
|
|
8571
8623
|
const databaseManager = new DatabaseMaintenanceManager(vaultDbPath(vaultDir), vaultDir, logger);
|
|
8572
8624
|
let definitionsDir;
|
|
8573
8625
|
try {
|
|
8574
|
-
const { registerBuiltInAgentsAndTasks, resolveDefinitionsDir: resolveDefinitionsDir2 } = await import("./loader-
|
|
8626
|
+
const { registerBuiltInAgentsAndTasks, resolveDefinitionsDir: resolveDefinitionsDir2 } = await import("./loader-NOMBJUPW.js");
|
|
8575
8627
|
definitionsDir = resolveDefinitionsDir2();
|
|
8576
8628
|
await registerBuiltInAgentsAndTasks(definitionsDir, vaultDir);
|
|
8577
8629
|
logger.info(LOG_KINDS.AGENT_TASK, "Built-in agents and tasks registered");
|
|
@@ -8596,7 +8648,7 @@ async function main() {
|
|
|
8596
8648
|
message: "Daemon restarted while run was in progress",
|
|
8597
8649
|
link: `/agent?run=${row.id}`,
|
|
8598
8650
|
metadata: { taskName: row.task, runId: row.id, reason: "daemon_restart" }
|
|
8599
|
-
},
|
|
8651
|
+
}, liveConfig.current);
|
|
8600
8652
|
}
|
|
8601
8653
|
logger.info(LOG_KINDS.AGENT_RUN, "Cleaned stale running agent runs", {
|
|
8602
8654
|
count: staleRows.length,
|
|
@@ -8654,7 +8706,7 @@ async function main() {
|
|
|
8654
8706
|
transcriptMiner,
|
|
8655
8707
|
embeddingManager,
|
|
8656
8708
|
logger,
|
|
8657
|
-
|
|
8709
|
+
liveConfig,
|
|
8658
8710
|
vaultDir,
|
|
8659
8711
|
planTags: symbiontPlanTags
|
|
8660
8712
|
});
|
|
@@ -8667,7 +8719,7 @@ async function main() {
|
|
|
8667
8719
|
powerManager,
|
|
8668
8720
|
machineId,
|
|
8669
8721
|
logger,
|
|
8670
|
-
|
|
8722
|
+
liveConfig,
|
|
8671
8723
|
vaultDir
|
|
8672
8724
|
});
|
|
8673
8725
|
server.registerRoute("POST", "/sessions/register", sessionLifecycle.handleRegister);
|
|
@@ -8678,7 +8730,7 @@ async function main() {
|
|
|
8678
8730
|
powerManager,
|
|
8679
8731
|
logger,
|
|
8680
8732
|
machineId,
|
|
8681
|
-
|
|
8733
|
+
liveConfig,
|
|
8682
8734
|
vaultDir,
|
|
8683
8735
|
reconcileSession: reconciler.reconcileSession,
|
|
8684
8736
|
planWatchConfig,
|
|
@@ -8686,7 +8738,7 @@ async function main() {
|
|
|
8686
8738
|
});
|
|
8687
8739
|
server.registerRoute("POST", "/events", eventDispatcher);
|
|
8688
8740
|
server.registerRoute("POST", "/events/stop", stopProcessor.handleStopRoute);
|
|
8689
|
-
const contextDeps = { embeddingManager,
|
|
8741
|
+
const contextDeps = { embeddingManager, liveConfig, logger };
|
|
8690
8742
|
server.registerRoute("POST", "/context", createSessionContextHandler(contextDeps));
|
|
8691
8743
|
server.registerRoute("POST", "/context/resume", createResumeContextHandler(contextDeps));
|
|
8692
8744
|
server.registerRoute("POST", "/context/prompt", createPromptContextHandler(contextDeps));
|
|
@@ -8705,6 +8757,9 @@ async function main() {
|
|
|
8705
8757
|
reactions.on([], () => {
|
|
8706
8758
|
configHash = computeConfigHash(vaultDir);
|
|
8707
8759
|
});
|
|
8760
|
+
reactions.on([], (ctx) => {
|
|
8761
|
+
liveConfig.current = ctx;
|
|
8762
|
+
});
|
|
8708
8763
|
reactions.on(["capture", "symbionts"], (ctx) => {
|
|
8709
8764
|
reconcileConfiguredSymbionts(path22.dirname(vaultDir), vaultDir, ctx);
|
|
8710
8765
|
});
|
|
@@ -8720,14 +8775,28 @@ async function main() {
|
|
|
8720
8775
|
delete process.env.MYCO_AGENT_DEBUG;
|
|
8721
8776
|
}
|
|
8722
8777
|
});
|
|
8778
|
+
async function syncScheduledTasks() {
|
|
8779
|
+
await registerScheduledTasks(powerManager, { definitionsDir, vaultDir, embeddingManager, logger, liveConfig });
|
|
8780
|
+
}
|
|
8781
|
+
reactions.on(["agent.tasks"], async () => {
|
|
8782
|
+
await syncScheduledTasks();
|
|
8783
|
+
});
|
|
8784
|
+
async function applyConfigWriteReactions(touchedPaths) {
|
|
8785
|
+
const reactionContext = loadReactionContext(vaultDir, logger);
|
|
8786
|
+
if (!reactionContext) {
|
|
8787
|
+
configHash = computeConfigHash(vaultDir);
|
|
8788
|
+
return null;
|
|
8789
|
+
}
|
|
8790
|
+
await reactions.fire(touchedPaths, reactionContext);
|
|
8791
|
+
return reactionContext;
|
|
8792
|
+
}
|
|
8723
8793
|
server.registerRoute("PUT", "/api/config/scoped", async (req) => {
|
|
8724
8794
|
const result = await handlePutScopedConfig(vaultDir, req.body);
|
|
8725
8795
|
if (!result.status || result.status < 400) {
|
|
8726
8796
|
const body = req.body;
|
|
8727
8797
|
const touchedPaths = computeTouchedPaths(body.patch, body.clear);
|
|
8728
|
-
const reactionContext =
|
|
8798
|
+
const reactionContext = await applyConfigWriteReactions(touchedPaths);
|
|
8729
8799
|
if (reactionContext) {
|
|
8730
|
-
await reactions.fire(touchedPaths, reactionContext);
|
|
8731
8800
|
const summary = buildScopedConfigSaveNotification(body.scope, touchedPaths);
|
|
8732
8801
|
notify(vaultDir, {
|
|
8733
8802
|
domain: "settings",
|
|
@@ -8780,7 +8849,7 @@ async function main() {
|
|
|
8780
8849
|
server.registerRoute("GET", "/api/progress/:token", async (req) => handleGetProgress(progressTracker, req.params.token));
|
|
8781
8850
|
server.registerRoute("GET", "/api/sessions", handleListSessions);
|
|
8782
8851
|
server.registerRoute("GET", "/api/sessions/:id", handleGetSession);
|
|
8783
|
-
const sessionMutations = createSessionMutationHandlers({ embeddingManager, vaultDir, logger,
|
|
8852
|
+
const sessionMutations = createSessionMutationHandlers({ embeddingManager, vaultDir, logger, liveConfig });
|
|
8784
8853
|
server.registerRoute("GET", "/api/sessions/:id/impact", sessionMutations.handleGetSessionImpact);
|
|
8785
8854
|
server.registerRoute("POST", "/api/sessions/:id/complete", sessionMutations.handleCompleteSession);
|
|
8786
8855
|
server.registerRoute("DELETE", "/api/sessions/:id", sessionMutations.handleDeleteSession);
|
|
@@ -8813,12 +8882,42 @@ async function main() {
|
|
|
8813
8882
|
server.registerRoute("GET", "/api/agent/tasks", async (req) => handleListTasks(req, vaultDir));
|
|
8814
8883
|
server.registerRoute("GET", "/api/agent/tasks/:id", async (req) => handleGetTask(req, vaultDir));
|
|
8815
8884
|
server.registerRoute("GET", "/api/agent/tasks/:id/yaml", async (req) => handleGetTaskYaml(req, vaultDir));
|
|
8816
|
-
server.registerRoute("PUT", "/api/agent/tasks/:id", async (req) =>
|
|
8817
|
-
|
|
8818
|
-
|
|
8819
|
-
|
|
8885
|
+
server.registerRoute("PUT", "/api/agent/tasks/:id", async (req) => {
|
|
8886
|
+
const result = await handleUpdateTask(req, vaultDir);
|
|
8887
|
+
if (!result.status || result.status < 400) {
|
|
8888
|
+
await syncScheduledTasks();
|
|
8889
|
+
}
|
|
8890
|
+
return result;
|
|
8891
|
+
});
|
|
8892
|
+
server.registerRoute("POST", "/api/agent/tasks", async (req) => {
|
|
8893
|
+
const result = await handleCreateTask(req, vaultDir);
|
|
8894
|
+
if (!result.status || result.status < 400) {
|
|
8895
|
+
await syncScheduledTasks();
|
|
8896
|
+
}
|
|
8897
|
+
return result;
|
|
8898
|
+
});
|
|
8899
|
+
server.registerRoute("POST", "/api/agent/tasks/:id/copy", async (req) => {
|
|
8900
|
+
const result = await handleCopyTask(req, vaultDir);
|
|
8901
|
+
if (!result.status || result.status < 400) {
|
|
8902
|
+
await syncScheduledTasks();
|
|
8903
|
+
}
|
|
8904
|
+
return result;
|
|
8905
|
+
});
|
|
8906
|
+
server.registerRoute("DELETE", "/api/agent/tasks/:id", async (req) => {
|
|
8907
|
+
const result = await handleDeleteTask(req, vaultDir);
|
|
8908
|
+
if (!result.status || result.status < 400) {
|
|
8909
|
+
await syncScheduledTasks();
|
|
8910
|
+
}
|
|
8911
|
+
return result;
|
|
8912
|
+
});
|
|
8820
8913
|
server.registerRoute("GET", "/api/agent/tasks/:id/config", async (req) => handleGetTaskConfig(req, vaultDir));
|
|
8821
|
-
server.registerRoute("PUT", "/api/agent/tasks/:id/config", async (req) =>
|
|
8914
|
+
server.registerRoute("PUT", "/api/agent/tasks/:id/config", async (req) => {
|
|
8915
|
+
const result = await handleUpdateTaskConfig(req, vaultDir);
|
|
8916
|
+
if (!result.status || result.status < 400) {
|
|
8917
|
+
await applyConfigWriteReactions([`agent.tasks.${req.params.id}`]);
|
|
8918
|
+
}
|
|
8919
|
+
return result;
|
|
8920
|
+
});
|
|
8822
8921
|
server.registerRoute("GET", "/api/providers", async () => handleGetProviders());
|
|
8823
8922
|
server.registerRoute("POST", "/api/providers/test", async (req) => handleTestProvider(req));
|
|
8824
8923
|
const mcpProxy = createMcpProxyHandlers({ machineId, embeddingManager });
|
|
@@ -8828,17 +8927,25 @@ async function main() {
|
|
|
8828
8927
|
server.registerRoute("GET", "/api/mcp/plans", mcpProxy.handlePlans);
|
|
8829
8928
|
server.registerRoute("GET", "/api/mcp/sessions", mcpProxy.handleSessions);
|
|
8830
8929
|
server.registerRoute("GET", "/api/mcp/team", mcpProxy.handleTeam);
|
|
8831
|
-
const
|
|
8832
|
-
const backupDir = rawBackupDir ? path22.resolve(rawBackupDir.startsWith("~/") ? path22.join(os8.homedir(), rawBackupDir.slice(2)) : rawBackupDir) : path22.resolve(vaultDir, "backups");
|
|
8833
|
-
const backupHandlers = createBackupHandlers({ db, backupDir, machineId });
|
|
8930
|
+
const backupHandlers = createBackupHandlers({ db, machineId, vaultDir, liveConfig });
|
|
8834
8931
|
server.registerRoute("POST", "/api/backup", backupHandlers.handleCreateBackup);
|
|
8835
8932
|
server.registerRoute("GET", "/api/backups", backupHandlers.handleListBackups);
|
|
8836
8933
|
server.registerRoute("POST", "/api/restore/preview", backupHandlers.handleRestorePreview);
|
|
8837
8934
|
server.registerRoute("POST", "/api/restore", backupHandlers.handleRestore);
|
|
8838
8935
|
const backupConfigHandlers = createBackupConfigHandlers({ vaultDir });
|
|
8839
8936
|
server.registerRoute("GET", "/api/backup/config", backupConfigHandlers.handleGetBackupConfig);
|
|
8840
|
-
server.registerRoute("PUT", "/api/backup/config",
|
|
8841
|
-
|
|
8937
|
+
server.registerRoute("PUT", "/api/backup/config", async (req) => {
|
|
8938
|
+
const result = await backupConfigHandlers.handlePutBackupConfig(req);
|
|
8939
|
+
if (!result.status || result.status < 400) {
|
|
8940
|
+
await applyConfigWriteReactions(["backup.dir"]);
|
|
8941
|
+
}
|
|
8942
|
+
return result;
|
|
8943
|
+
});
|
|
8944
|
+
const teamSync = initTeamSync({ liveConfig, machineId, logger, vaultDir, serverVersion: server.version });
|
|
8945
|
+
reactions.on(["team"], async () => {
|
|
8946
|
+
await teamSync.reconcileClient();
|
|
8947
|
+
});
|
|
8948
|
+
await teamSync.reconcileClient();
|
|
8842
8949
|
const teamHandlers = createTeamHandlers({
|
|
8843
8950
|
vaultDir,
|
|
8844
8951
|
machineId,
|
|
@@ -8846,8 +8953,20 @@ async function main() {
|
|
|
8846
8953
|
getTeamClient: teamSync.getTeamClient,
|
|
8847
8954
|
setTeamClient: teamSync.setTeamClient
|
|
8848
8955
|
});
|
|
8849
|
-
server.registerRoute("POST", "/api/team/connect",
|
|
8850
|
-
|
|
8956
|
+
server.registerRoute("POST", "/api/team/connect", async (req) => {
|
|
8957
|
+
const result = await teamHandlers.handleConnect(req);
|
|
8958
|
+
if (!result.status || result.status < 400) {
|
|
8959
|
+
await applyConfigWriteReactions(["team.enabled", "team.worker_url"]);
|
|
8960
|
+
}
|
|
8961
|
+
return result;
|
|
8962
|
+
});
|
|
8963
|
+
server.registerRoute("POST", "/api/team/disconnect", async (req) => {
|
|
8964
|
+
const result = await teamHandlers.handleDisconnect(req);
|
|
8965
|
+
if (!result.status || result.status < 400) {
|
|
8966
|
+
await applyConfigWriteReactions(["team.enabled", "team.worker_url"]);
|
|
8967
|
+
}
|
|
8968
|
+
return result;
|
|
8969
|
+
});
|
|
8851
8970
|
server.registerRoute("GET", "/api/team/status", teamHandlers.handleStatus);
|
|
8852
8971
|
server.registerRoute("POST", "/api/team/backfill", teamHandlers.handleBackfill);
|
|
8853
8972
|
server.registerRoute("POST", "/api/team/retry-failed", teamHandlers.handleRetryFailed);
|
|
@@ -8899,9 +9018,9 @@ async function main() {
|
|
|
8899
9018
|
logger.warn(LOG_KINDS.DAEMON_CONFIG, "Failed to persist auto-derived port", { error: err.message });
|
|
8900
9019
|
}
|
|
8901
9020
|
}
|
|
8902
|
-
registerPowerJobs(powerManager, { embeddingManager, registry, logger,
|
|
9021
|
+
registerPowerJobs(powerManager, { embeddingManager, registry, logger, liveConfig, db, machineId, vaultDir, databaseManager });
|
|
8903
9022
|
teamSync.registerFlushJob(powerManager);
|
|
8904
|
-
await registerScheduledTasks(powerManager, { definitionsDir, vaultDir, embeddingManager, logger,
|
|
9023
|
+
await registerScheduledTasks(powerManager, { definitionsDir, vaultDir, embeddingManager, logger, liveConfig });
|
|
8905
9024
|
powerManager.start();
|
|
8906
9025
|
const shutdown = async (signal) => {
|
|
8907
9026
|
logger.info(LOG_KINDS.DAEMON_START, `${signal} received`);
|
|
@@ -8933,4 +9052,4 @@ export {
|
|
|
8933
9052
|
handleUserPrompt,
|
|
8934
9053
|
main
|
|
8935
9054
|
};
|
|
8936
|
-
//# sourceMappingURL=main-
|
|
9055
|
+
//# sourceMappingURL=main-YTBVRTBI.js.map
|