@goondocks/myco 0.19.6 → 0.20.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/dist/{agent-run-WK5NKBYA.js → agent-run-4HUXVRHW.js} +8 -8
- package/dist/{agent-tasks-2E73GG3A.js → agent-tasks-JF45ELB6.js} +8 -8
- package/dist/{chunk-DURKJTVO.js → chunk-3WOS4TAR.js} +9 -1
- package/dist/chunk-3WOS4TAR.js.map +1 -0
- package/dist/{chunk-TMNFCUAD.js → chunk-4LCIKVDM.js} +49 -21
- package/dist/chunk-4LCIKVDM.js.map +1 -0
- package/dist/{chunk-Q4QD6LJT.js → chunk-4M7EWPIA.js} +3 -3
- package/dist/{chunk-FGKCE5AE.js → chunk-4YFKBL3F.js} +2 -2
- package/dist/{chunk-KYH4V4ML.js → chunk-57O67XVF.js} +3 -3
- package/dist/{chunk-7ONVLO43.js → chunk-5XIVBO25.js} +2 -2
- package/dist/{chunk-ST2D3SGM.js → chunk-ACQ2AIEM.js} +2 -2
- package/dist/{chunk-6ZDJXSEO.js → chunk-BPRIYNLE.js} +3 -3
- package/dist/chunk-CUDIZJY7.js +36 -0
- package/dist/chunk-CUDIZJY7.js.map +1 -0
- package/dist/{chunk-WKNAKQKA.js → chunk-DCSGJ7W4.js} +13 -19
- package/dist/chunk-DCSGJ7W4.js.map +1 -0
- package/dist/{chunk-Q6OEZM3S.js → chunk-EVDQKYCG.js} +237 -10
- package/dist/chunk-EVDQKYCG.js.map +1 -0
- package/dist/{chunk-I54KLC6H.js → chunk-FLLBJLHM.js} +3 -1
- package/dist/{chunk-I54KLC6H.js.map → chunk-FLLBJLHM.js.map} +1 -1
- package/dist/{chunk-PMT2LSTQ.js → chunk-FMRZ26U5.js} +2 -2
- package/dist/{chunk-3J6TUJSV.js → chunk-KHT24OWC.js} +3 -3
- package/dist/{chunk-P5VNHGVZ.js → chunk-L6XFAJIF.js} +64 -13
- package/dist/chunk-L6XFAJIF.js.map +1 -0
- package/dist/{chunk-6DDRJQ4X.js → chunk-MYOZLMB2.js} +2 -2
- package/dist/{chunk-UVKQ62II.js → chunk-NGROSFOH.js} +24 -2
- package/dist/chunk-NGROSFOH.js.map +1 -0
- package/dist/{chunk-VLGBWOBY.js → chunk-P3DN5EWW.js} +4 -4
- package/dist/{chunk-W3JUH5S3.js → chunk-POR75WM6.js} +4 -4
- package/dist/{chunk-FKBPXCH3.js → chunk-QS5TWZBL.js} +4 -4
- package/dist/{chunk-NKQZ73LL.js → chunk-SRXTSI25.js} +109 -3
- package/dist/chunk-SRXTSI25.js.map +1 -0
- package/dist/{chunk-QH5HS54N.js → chunk-UOQQENDW.js} +3 -3
- package/dist/{chunk-GFR542SM.js → chunk-US4LNCAT.js} +5 -11
- package/dist/chunk-US4LNCAT.js.map +1 -0
- package/dist/{chunk-44PZCAYS.js → chunk-XL75KZGI.js} +23 -13
- package/dist/chunk-XL75KZGI.js.map +1 -0
- package/dist/{chunk-NCBLB2C6.js → chunk-YSNIAJ5D.js} +7 -4
- package/dist/chunk-YSNIAJ5D.js.map +1 -0
- package/dist/chunk-ZXZPJJN3.js +54 -0
- package/dist/chunk-ZXZPJJN3.js.map +1 -0
- package/dist/{cli-LCTXK7N6.js → cli-AHTINAHY.js} +43 -43
- package/dist/{client-S47ENM76.js → client-LHENCAV3.js} +4 -4
- package/dist/{config-IO5WALOD.js → config-XPV5GDE4.js} +8 -16
- package/dist/config-XPV5GDE4.js.map +1 -0
- package/dist/{detect-BEOIHGBC.js → detect-PXNM6TA7.js} +2 -2
- package/dist/{detect-providers-2EY55EHK.js → detect-providers-5KOPZ7J2.js} +4 -4
- package/dist/{doctor-EE6GAC54.js → doctor-XPCF5HV5.js} +13 -13
- package/dist/{executor-NXNSUEMQ.js → executor-ACDHGTRH.js} +21 -22
- package/dist/executor-ACDHGTRH.js.map +1 -0
- package/dist/{init-IPL3XV6F.js → init-V3KCC36O.js} +14 -14
- package/dist/{installer-WMTB4NCX.js → installer-ZNK4JSQA.js} +4 -4
- package/dist/{llm-SWDDQQWY.js → llm-TH4NLIRM.js} +4 -4
- package/dist/{loader-V774GZU4.js → loader-H7OFASVC.js} +15 -3
- package/dist/{loader-AAZ6VUIA.js → loader-TSB5M7FD.js} +3 -3
- package/dist/{logs-KNKPQE5A.js → logs-7YVGGBIS.js} +2 -2
- package/dist/{main-RPJSS7PT.js → main-5S4MDCIO.js} +635 -156
- package/dist/main-5S4MDCIO.js.map +1 -0
- package/dist/{open-OYBKVBYX.js → open-AB5ULZIB.js} +8 -8
- package/dist/{post-compact-E2OVMNGQ.js → post-compact-P2B7C7FE.js} +9 -8
- package/dist/{post-compact-E2OVMNGQ.js.map → post-compact-P2B7C7FE.js.map} +1 -1
- package/dist/{post-tool-use-FGQE26GJ.js → post-tool-use-LXL6NXDS.js} +8 -7
- package/dist/{post-tool-use-FGQE26GJ.js.map → post-tool-use-LXL6NXDS.js.map} +1 -1
- package/dist/{post-tool-use-failure-3CITJYQK.js → post-tool-use-failure-WAYVVKGR.js} +9 -8
- package/dist/{post-tool-use-failure-3CITJYQK.js.map → post-tool-use-failure-WAYVVKGR.js.map} +1 -1
- package/dist/{pre-compact-GYMHCXII.js → pre-compact-BCXUCF4V.js} +9 -8
- package/dist/{pre-compact-GYMHCXII.js.map → pre-compact-BCXUCF4V.js.map} +1 -1
- package/dist/{provider-check-WCM3SDTM.js → provider-check-43LAMSMH.js} +4 -4
- package/dist/{registry-OCM4WAPJ.js → registry-MGJSJBAS.js} +4 -4
- package/dist/{remove-72ER3TG5.js → remove-KAPX5NT2.js} +10 -10
- package/dist/{restart-EQHEJCGT.js → restart-HQO36FTG.js} +9 -9
- package/dist/{search-JOBYIW43.js → search-YOMOKAAI.js} +9 -9
- package/dist/{server-PZCWYWZL.js → server-2N23P6F2.js} +40 -27
- package/dist/{server-PZCWYWZL.js.map → server-2N23P6F2.js.map} +1 -1
- package/dist/{session-APO4A2C7.js → session-WW2JLHPX.js} +9 -10
- package/dist/{session-APO4A2C7.js.map → session-WW2JLHPX.js.map} +1 -1
- package/dist/{session-end-4V4VHAOQ.js → session-end-4WRTIBVQ.js} +8 -7
- package/dist/{session-end-4V4VHAOQ.js.map → session-end-4WRTIBVQ.js.map} +1 -1
- package/dist/{session-start-K6ESRZU7.js → session-start-HRWTZXQR.js} +15 -15
- package/dist/session-start-HRWTZXQR.js.map +1 -0
- package/dist/{setup-llm-QUWOSB7A.js → setup-llm-HFWSBUAF.js} +10 -9
- package/dist/{setup-llm-QUWOSB7A.js.map → setup-llm-HFWSBUAF.js.map} +1 -1
- 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/symbionts/manifests/codex.yaml +28 -0
- package/dist/{stats-TYOZAOP2.js → stats-7A4CJ4MS.js} +9 -9
- package/dist/{stop-2COOWEYG.js → stop-R2GDHMRA.js} +8 -7
- package/dist/{stop-2COOWEYG.js.map → stop-R2GDHMRA.js.map} +1 -1
- package/dist/{stop-failure-UQ33GZLE.js → stop-failure-773KR4VZ.js} +9 -8
- package/dist/{stop-failure-UQ33GZLE.js.map → stop-failure-773KR4VZ.js.map} +1 -1
- package/dist/{subagent-start-YENEY6VF.js → subagent-start-IDECNBHW.js} +9 -8
- package/dist/{subagent-start-YENEY6VF.js.map → subagent-start-IDECNBHW.js.map} +1 -1
- package/dist/{subagent-stop-W2757YDB.js → subagent-stop-3JH7DR2S.js} +9 -8
- package/dist/{subagent-stop-W2757YDB.js.map → subagent-stop-3JH7DR2S.js.map} +1 -1
- package/dist/{task-completed-KU6GWMWV.js → task-completed-AYVHPHDR.js} +9 -8
- package/dist/{task-completed-KU6GWMWV.js.map → task-completed-AYVHPHDR.js.map} +1 -1
- package/dist/{team-SNLC6FZM.js → team-3JKF7VAD.js} +5 -5
- package/dist/ui/assets/index-C2JuNtRB.css +1 -0
- package/dist/ui/assets/index-JLVaQKV2.js +832 -0
- package/dist/ui/favicon-dusk.svg +11 -0
- package/dist/ui/favicon-moss.svg +11 -0
- package/dist/ui/favicon-plum.svg +11 -0
- package/dist/ui/favicon-sage.svg +11 -0
- package/dist/ui/favicon-slate.svg +11 -0
- package/dist/ui/favicon-terracotta.svg +11 -0
- package/dist/ui/index.html +3 -3
- package/dist/{update-5VYNQZJ4.js → update-YWYW55JM.js} +10 -10
- package/dist/{user-prompt-submit-KATLHAKA.js → user-prompt-submit-YELSR6XI.js} +9 -8
- package/dist/{user-prompt-submit-KATLHAKA.js.map → user-prompt-submit-YELSR6XI.js.map} +1 -1
- package/dist/{verify-BGJVB3K2.js → verify-JS44DVKJ.js} +5 -5
- package/dist/{version-MKNN5GYM.js → version-K5NETYIL.js} +2 -2
- package/package.json +1 -1
- package/skills/myco/SKILL.md +78 -43
- package/skills/myco/references/vault-status.md +1 -1
- package/dist/chunk-44PZCAYS.js.map +0 -1
- package/dist/chunk-5ZT2Q6P5.js +0 -25
- package/dist/chunk-5ZT2Q6P5.js.map +0 -1
- package/dist/chunk-AULBWINA.js +0 -227
- package/dist/chunk-AULBWINA.js.map +0 -1
- package/dist/chunk-DURKJTVO.js.map +0 -1
- package/dist/chunk-GFR542SM.js.map +0 -1
- package/dist/chunk-NCBLB2C6.js.map +0 -1
- package/dist/chunk-NKQZ73LL.js.map +0 -1
- package/dist/chunk-P5VNHGVZ.js.map +0 -1
- package/dist/chunk-Q6OEZM3S.js.map +0 -1
- package/dist/chunk-TMNFCUAD.js.map +0 -1
- package/dist/chunk-UVKQ62II.js.map +0 -1
- package/dist/chunk-VQF5E4ZX.js +0 -91
- package/dist/chunk-VQF5E4ZX.js.map +0 -1
- package/dist/chunk-WKNAKQKA.js.map +0 -1
- package/dist/config-IO5WALOD.js.map +0 -1
- package/dist/executor-NXNSUEMQ.js.map +0 -1
- package/dist/main-RPJSS7PT.js.map +0 -1
- package/dist/resolution-events-PYLSI6QT.js +0 -15
- package/dist/session-start-K6ESRZU7.js.map +0 -1
- package/dist/ui/assets/index-816yFmz_.js +0 -842
- package/dist/ui/assets/index-Dj6vQpFd.css +0 -1
- package/dist/version-MKNN5GYM.js.map +0 -1
- /package/dist/{agent-run-WK5NKBYA.js.map → agent-run-4HUXVRHW.js.map} +0 -0
- /package/dist/{agent-tasks-2E73GG3A.js.map → agent-tasks-JF45ELB6.js.map} +0 -0
- /package/dist/{chunk-Q4QD6LJT.js.map → chunk-4M7EWPIA.js.map} +0 -0
- /package/dist/{chunk-FGKCE5AE.js.map → chunk-4YFKBL3F.js.map} +0 -0
- /package/dist/{chunk-KYH4V4ML.js.map → chunk-57O67XVF.js.map} +0 -0
- /package/dist/{chunk-7ONVLO43.js.map → chunk-5XIVBO25.js.map} +0 -0
- /package/dist/{chunk-ST2D3SGM.js.map → chunk-ACQ2AIEM.js.map} +0 -0
- /package/dist/{chunk-6ZDJXSEO.js.map → chunk-BPRIYNLE.js.map} +0 -0
- /package/dist/{chunk-PMT2LSTQ.js.map → chunk-FMRZ26U5.js.map} +0 -0
- /package/dist/{chunk-3J6TUJSV.js.map → chunk-KHT24OWC.js.map} +0 -0
- /package/dist/{chunk-6DDRJQ4X.js.map → chunk-MYOZLMB2.js.map} +0 -0
- /package/dist/{chunk-VLGBWOBY.js.map → chunk-P3DN5EWW.js.map} +0 -0
- /package/dist/{chunk-W3JUH5S3.js.map → chunk-POR75WM6.js.map} +0 -0
- /package/dist/{chunk-FKBPXCH3.js.map → chunk-QS5TWZBL.js.map} +0 -0
- /package/dist/{chunk-QH5HS54N.js.map → chunk-UOQQENDW.js.map} +0 -0
- /package/dist/{cli-LCTXK7N6.js.map → cli-AHTINAHY.js.map} +0 -0
- /package/dist/{client-S47ENM76.js.map → client-LHENCAV3.js.map} +0 -0
- /package/dist/{detect-BEOIHGBC.js.map → detect-PXNM6TA7.js.map} +0 -0
- /package/dist/{detect-providers-2EY55EHK.js.map → detect-providers-5KOPZ7J2.js.map} +0 -0
- /package/dist/{doctor-EE6GAC54.js.map → doctor-XPCF5HV5.js.map} +0 -0
- /package/dist/{init-IPL3XV6F.js.map → init-V3KCC36O.js.map} +0 -0
- /package/dist/{installer-WMTB4NCX.js.map → installer-ZNK4JSQA.js.map} +0 -0
- /package/dist/{llm-SWDDQQWY.js.map → llm-TH4NLIRM.js.map} +0 -0
- /package/dist/{loader-AAZ6VUIA.js.map → loader-H7OFASVC.js.map} +0 -0
- /package/dist/{loader-V774GZU4.js.map → loader-TSB5M7FD.js.map} +0 -0
- /package/dist/{logs-KNKPQE5A.js.map → logs-7YVGGBIS.js.map} +0 -0
- /package/dist/{open-OYBKVBYX.js.map → open-AB5ULZIB.js.map} +0 -0
- /package/dist/{provider-check-WCM3SDTM.js.map → provider-check-43LAMSMH.js.map} +0 -0
- /package/dist/{registry-OCM4WAPJ.js.map → registry-MGJSJBAS.js.map} +0 -0
- /package/dist/{remove-72ER3TG5.js.map → remove-KAPX5NT2.js.map} +0 -0
- /package/dist/{restart-EQHEJCGT.js.map → restart-HQO36FTG.js.map} +0 -0
- /package/dist/{search-JOBYIW43.js.map → search-YOMOKAAI.js.map} +0 -0
- /package/dist/{stats-TYOZAOP2.js.map → stats-7A4CJ4MS.js.map} +0 -0
- /package/dist/{resolution-events-PYLSI6QT.js.map → team-3JKF7VAD.js.map} +0 -0
- /package/dist/{update-5VYNQZJ4.js.map → update-YWYW55JM.js.map} +0 -0
- /package/dist/{verify-BGJVB3K2.js.map → verify-JS44DVKJ.js.map} +0 -0
- /package/dist/{team-SNLC6FZM.js.map → version-K5NETYIL.js.map} +0 -0
|
@@ -2,10 +2,10 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
|
|
|
2
2
|
import {
|
|
3
3
|
DaemonLogger,
|
|
4
4
|
LEVEL_ORDER
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-3WOS4TAR.js";
|
|
6
6
|
import {
|
|
7
7
|
withTaskConfig
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-US4LNCAT.js";
|
|
9
9
|
import {
|
|
10
10
|
EMBEDDABLE_TABLES,
|
|
11
11
|
EMBEDDABLE_TEXT_COLUMNS,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
getEmbeddingQueueDepth,
|
|
16
16
|
getUnembedded,
|
|
17
17
|
markEmbedded
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-P3DN5EWW.js";
|
|
19
19
|
import {
|
|
20
20
|
getTeamPackageVersion,
|
|
21
21
|
loadSecrets,
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
readSecrets,
|
|
24
24
|
resolveVaultConfigPath,
|
|
25
25
|
writeSecret
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-QS5TWZBL.js";
|
|
27
27
|
import {
|
|
28
28
|
buildTaskInstruction,
|
|
29
29
|
closeOpenBatches,
|
|
@@ -53,6 +53,7 @@ import {
|
|
|
53
53
|
incrementActivityCount,
|
|
54
54
|
incrementSkillUsageCount,
|
|
55
55
|
insertBatchStateless,
|
|
56
|
+
insertResolutionEvent,
|
|
56
57
|
isInstructionRequiredTask,
|
|
57
58
|
listBatchesBySession,
|
|
58
59
|
listCandidatesWithCount,
|
|
@@ -71,24 +72,24 @@ import {
|
|
|
71
72
|
setResponseSummary,
|
|
72
73
|
updateCandidate,
|
|
73
74
|
updateNotificationStatus
|
|
74
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-L6XFAJIF.js";
|
|
75
76
|
import {
|
|
76
77
|
fullTextSearch,
|
|
77
78
|
hydrateSearchResults
|
|
78
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-5XIVBO25.js";
|
|
79
80
|
import {
|
|
80
81
|
copyTaskToUser,
|
|
81
82
|
deleteUserTask,
|
|
82
83
|
loadAllTasks,
|
|
83
84
|
validateTaskName,
|
|
84
85
|
writeUserTask
|
|
85
|
-
} from "./chunk-
|
|
86
|
+
} from "./chunk-57O67XVF.js";
|
|
86
87
|
import {
|
|
87
88
|
AgentTaskSchema,
|
|
88
89
|
registerAgent,
|
|
89
90
|
resolveDefinitionsDir,
|
|
90
91
|
taskFromParsed
|
|
91
|
-
} from "./chunk-
|
|
92
|
+
} from "./chunk-4M7EWPIA.js";
|
|
92
93
|
import {
|
|
93
94
|
listTurnsByRun
|
|
94
95
|
} from "./chunk-6RFZWV4R.js";
|
|
@@ -99,7 +100,7 @@ import {
|
|
|
99
100
|
import {
|
|
100
101
|
Anthropic,
|
|
101
102
|
createEmbeddingProvider
|
|
102
|
-
} from "./chunk-
|
|
103
|
+
} from "./chunk-KHT24OWC.js";
|
|
103
104
|
import {
|
|
104
105
|
getMachineId
|
|
105
106
|
} from "./chunk-ENWBFX7F.js";
|
|
@@ -109,84 +110,93 @@ import {
|
|
|
109
110
|
listBufferSessionIds
|
|
110
111
|
} from "./chunk-V7XG6V6C.js";
|
|
111
112
|
import "./chunk-POEPHBQK.js";
|
|
112
|
-
import "./chunk-
|
|
113
|
+
import "./chunk-YSNIAJ5D.js";
|
|
113
114
|
import "./chunk-SAKJMNSR.js";
|
|
114
115
|
import {
|
|
115
116
|
SymbiontInstaller
|
|
116
|
-
} from "./chunk-
|
|
117
|
+
} from "./chunk-4LCIKVDM.js";
|
|
117
118
|
import {
|
|
118
119
|
checkLocalProvider
|
|
119
|
-
} from "./chunk-
|
|
120
|
+
} from "./chunk-BPRIYNLE.js";
|
|
120
121
|
import {
|
|
121
122
|
LmStudioBackend,
|
|
122
123
|
OllamaBackend
|
|
123
|
-
} from "./chunk-
|
|
124
|
+
} from "./chunk-FMRZ26U5.js";
|
|
124
125
|
import {
|
|
125
126
|
countSpores,
|
|
126
127
|
getSpore,
|
|
127
128
|
insertSpore,
|
|
128
129
|
listSpores,
|
|
129
130
|
updateSporeStatus
|
|
130
|
-
} from "./chunk-
|
|
131
|
+
} from "./chunk-4YFKBL3F.js";
|
|
131
132
|
import {
|
|
133
|
+
backfillUnsynced,
|
|
132
134
|
closeSession,
|
|
135
|
+
countDeadLettered,
|
|
136
|
+
countPending,
|
|
133
137
|
countSessions,
|
|
134
138
|
deleteSessionCascade,
|
|
139
|
+
enqueueOutbox,
|
|
135
140
|
getSession,
|
|
136
141
|
getSessionImpact,
|
|
137
|
-
incrementSessionToolCount,
|
|
138
|
-
listSessions,
|
|
139
|
-
reactivateSessionIfCompleted,
|
|
140
|
-
updateSession,
|
|
141
|
-
upsertSession
|
|
142
|
-
} from "./chunk-Q6OEZM3S.js";
|
|
143
|
-
import {
|
|
144
|
-
backfillUnsynced,
|
|
145
|
-
countDeadLettered,
|
|
146
|
-
countPending,
|
|
147
|
-
enqueueOutbox,
|
|
148
142
|
getTeamMachineId,
|
|
149
143
|
incrementRetryCount,
|
|
144
|
+
incrementSessionToolCount,
|
|
150
145
|
initTeamContext,
|
|
151
146
|
isTeamSyncEnabled,
|
|
152
147
|
listPending,
|
|
148
|
+
listSessions,
|
|
153
149
|
markSent,
|
|
154
150
|
markSourceRowsSynced,
|
|
155
151
|
pruneOld,
|
|
152
|
+
reactivateSessionIfCompleted,
|
|
156
153
|
retryDeadLettered,
|
|
157
|
-
syncRow
|
|
158
|
-
|
|
154
|
+
syncRow,
|
|
155
|
+
updateSession,
|
|
156
|
+
upsertSession
|
|
157
|
+
} from "./chunk-EVDQKYCG.js";
|
|
158
|
+
import {
|
|
159
|
+
evaluateSessionCaptureRules,
|
|
160
|
+
readTranscriptMeta
|
|
161
|
+
} from "./chunk-XL75KZGI.js";
|
|
159
162
|
import {
|
|
160
163
|
EMBEDDING_DIMENSIONS,
|
|
161
164
|
REST_SETTABLE_STATUSES,
|
|
162
165
|
SCHEMA_VERSION,
|
|
163
166
|
createSchema
|
|
164
|
-
} from "./chunk-
|
|
167
|
+
} from "./chunk-MYOZLMB2.js";
|
|
165
168
|
import {
|
|
166
169
|
CONFIG_FILENAME,
|
|
167
170
|
MycoConfigSchema,
|
|
171
|
+
deepMergeConfig,
|
|
168
172
|
getEnabledSymbiontNames,
|
|
169
173
|
loadConfig,
|
|
174
|
+
loadLocalConfig,
|
|
175
|
+
loadMergedConfig,
|
|
170
176
|
updateBackupConfig,
|
|
171
177
|
updateConfig,
|
|
178
|
+
updateLocalConfig,
|
|
172
179
|
updateTeamConfig
|
|
173
|
-
} from "./chunk-
|
|
180
|
+
} from "./chunk-SRXTSI25.js";
|
|
174
181
|
import {
|
|
175
182
|
closeDatabase,
|
|
176
183
|
getDatabase,
|
|
177
184
|
initDatabase,
|
|
178
185
|
vaultDbPath
|
|
179
186
|
} from "./chunk-MYX5NCRH.js";
|
|
187
|
+
import {
|
|
188
|
+
unsetAtPath
|
|
189
|
+
} from "./chunk-ZXZPJJN3.js";
|
|
180
190
|
import {
|
|
181
191
|
resolveCliEntryPath
|
|
182
|
-
} from "./chunk-
|
|
192
|
+
} from "./chunk-UOQQENDW.js";
|
|
183
193
|
import {
|
|
184
194
|
getPluginVersion
|
|
185
|
-
} from "./chunk-
|
|
195
|
+
} from "./chunk-ACQ2AIEM.js";
|
|
186
196
|
import {
|
|
187
197
|
loadManifests,
|
|
188
198
|
resolvePackageRoot
|
|
189
|
-
} from "./chunk-
|
|
199
|
+
} from "./chunk-NGROSFOH.js";
|
|
190
200
|
import {
|
|
191
201
|
findPackageRoot
|
|
192
202
|
} from "./chunk-LPUQPDC2.js";
|
|
@@ -203,6 +213,7 @@ import {
|
|
|
203
213
|
FEED_DEFAULT_LIMIT,
|
|
204
214
|
LOG_MESSAGE_PREVIEW_CHARS,
|
|
205
215
|
LOG_PROMPT_PREVIEW_CHARS,
|
|
216
|
+
MCP_SESSIONS_DEFAULT_LIMIT,
|
|
206
217
|
MS_PER_DAY,
|
|
207
218
|
MS_PER_HOUR,
|
|
208
219
|
MS_PER_SECOND,
|
|
@@ -224,6 +235,7 @@ import {
|
|
|
224
235
|
RESTART_RESPONSE_FLUSH_MS,
|
|
225
236
|
SEARCH_RESULTS_DEFAULT_LIMIT,
|
|
226
237
|
SEARCH_SIMILARITY_THRESHOLD,
|
|
238
|
+
SESSION_SUMMARY_PREVIEW_CHARS,
|
|
227
239
|
STALE_BUFFER_MAX_AGE_MS,
|
|
228
240
|
STALE_SESSION_THRESHOLD_MS,
|
|
229
241
|
SYNC_PROTOCOL_VERSION,
|
|
@@ -243,7 +255,7 @@ import {
|
|
|
243
255
|
USER_TASK_SOURCE,
|
|
244
256
|
epochSeconds,
|
|
245
257
|
estimateTokens
|
|
246
|
-
} from "./chunk-
|
|
258
|
+
} from "./chunk-FLLBJLHM.js";
|
|
247
259
|
import {
|
|
248
260
|
LOG_KINDS,
|
|
249
261
|
kindToComponent
|
|
@@ -1377,76 +1389,121 @@ function extractTurnsFromBuffer(events) {
|
|
|
1377
1389
|
return turns;
|
|
1378
1390
|
}
|
|
1379
1391
|
|
|
1380
|
-
// src/daemon/
|
|
1381
|
-
function
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1392
|
+
// src/daemon/config-reactions/touched-paths.ts
|
|
1393
|
+
function enumerateLeafPaths(obj, prefix = "") {
|
|
1394
|
+
if (obj === null || typeof obj !== "object" || Array.isArray(obj)) {
|
|
1395
|
+
return prefix ? [prefix] : [];
|
|
1396
|
+
}
|
|
1397
|
+
const out = [];
|
|
1398
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
1399
|
+
const next = prefix ? `${prefix}.${key}` : key;
|
|
1400
|
+
out.push(...enumerateLeafPaths(value, next));
|
|
1401
|
+
}
|
|
1402
|
+
return out;
|
|
1403
|
+
}
|
|
1404
|
+
function computeTouchedPaths(patch, clear) {
|
|
1405
|
+
const patchLeaves = patch && typeof patch === "object" ? enumerateLeafPaths(patch) : [];
|
|
1406
|
+
const clearList = Array.isArray(clear) ? clear : [];
|
|
1407
|
+
return [.../* @__PURE__ */ new Set([...patchLeaves, ...clearList])];
|
|
1393
1408
|
}
|
|
1409
|
+
|
|
1410
|
+
// src/daemon/api/config.ts
|
|
1394
1411
|
async function handleGetConfig(vaultDir) {
|
|
1395
1412
|
const config = loadConfig(vaultDir);
|
|
1396
1413
|
return { body: config };
|
|
1397
1414
|
}
|
|
1398
|
-
async function
|
|
1399
|
-
const
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1415
|
+
async function handleGetMergedConfig(vaultDir) {
|
|
1416
|
+
const config = loadMergedConfig(vaultDir);
|
|
1417
|
+
return { body: config };
|
|
1418
|
+
}
|
|
1419
|
+
async function handleGetLocalConfig(vaultDir) {
|
|
1420
|
+
return { body: loadLocalConfig(vaultDir) };
|
|
1421
|
+
}
|
|
1422
|
+
var SCOPED_CONFIG_SCOPES = ["project", "local"];
|
|
1423
|
+
function isScopedConfigScope(value) {
|
|
1424
|
+
return typeof value === "string" && SCOPED_CONFIG_SCOPES.includes(value);
|
|
1425
|
+
}
|
|
1426
|
+
function validateClearList(clear) {
|
|
1427
|
+
if (clear === void 0) return [];
|
|
1428
|
+
if (!Array.isArray(clear)) {
|
|
1429
|
+
return { status: 400, body: { error: "clear must be an array of dot-paths" } };
|
|
1405
1430
|
}
|
|
1406
|
-
const
|
|
1407
|
-
|
|
1431
|
+
const invalidEntry = clear.find((entry) => typeof entry !== "string" || entry.trim().length === 0);
|
|
1432
|
+
if (invalidEntry !== void 0) {
|
|
1433
|
+
return { status: 400, body: { error: "clear entries must be non-empty strings" } };
|
|
1434
|
+
}
|
|
1435
|
+
return clear;
|
|
1408
1436
|
}
|
|
1409
|
-
function
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
custom: deps.planWatchConfig.watchDirs.filter((d) => !symbiontPlanDirs.includes(d)),
|
|
1417
|
-
ignore_plan_dirs_in_git: config.capture.ignore_plan_dirs_in_git
|
|
1418
|
-
}
|
|
1419
|
-
};
|
|
1437
|
+
function pathsOverlap(a, b) {
|
|
1438
|
+
return a === b || a.startsWith(`${b}.`) || b.startsWith(`${a}.`);
|
|
1439
|
+
}
|
|
1440
|
+
async function handlePutScopedConfig(vaultDir, body) {
|
|
1441
|
+
const payload = body ?? {};
|
|
1442
|
+
if (!isScopedConfigScope(payload.scope)) {
|
|
1443
|
+
return { status: 400, body: { error: "scope must be project or local" } };
|
|
1420
1444
|
}
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1445
|
+
const scope = payload.scope;
|
|
1446
|
+
const patch = payload.patch ?? {};
|
|
1447
|
+
const clearListOrError = validateClearList(payload.clear);
|
|
1448
|
+
if (Array.isArray(clearListOrError) === false) return clearListOrError;
|
|
1449
|
+
const clearList = clearListOrError;
|
|
1450
|
+
if (typeof patch !== "object" || patch === null || Array.isArray(patch)) {
|
|
1451
|
+
return { status: 400, body: { error: "patch must be an object" } };
|
|
1452
|
+
}
|
|
1453
|
+
const patchLeaves = enumerateLeafPaths(patch);
|
|
1454
|
+
const hasPatch = patchLeaves.length > 0;
|
|
1455
|
+
const hasClear = clearList.length > 0;
|
|
1456
|
+
if (!hasPatch && !hasClear) {
|
|
1457
|
+
return { status: 400, body: { error: "patch or clear required" } };
|
|
1458
|
+
}
|
|
1459
|
+
const overlap = patchLeaves.filter((leaf) => clearList.some((clearPath) => pathsOverlap(leaf, clearPath)));
|
|
1460
|
+
if (overlap.length > 0) {
|
|
1461
|
+
return { status: 400, body: { error: "patch_clear_overlap", keys: overlap } };
|
|
1462
|
+
}
|
|
1463
|
+
if (scope === "local") {
|
|
1464
|
+
try {
|
|
1465
|
+
const project = loadConfig(vaultDir);
|
|
1466
|
+
const updated = updateLocalConfig(vaultDir, (local) => {
|
|
1467
|
+
const working = structuredClone(local);
|
|
1468
|
+
for (const key of clearList) unsetAtPath(working, key);
|
|
1469
|
+
const nextLocal = deepMergeConfig(
|
|
1470
|
+
working,
|
|
1471
|
+
patch
|
|
1472
|
+
);
|
|
1473
|
+
const merged = deepMergeConfig(
|
|
1474
|
+
project,
|
|
1475
|
+
nextLocal
|
|
1476
|
+
);
|
|
1477
|
+
MycoConfigSchema.parse(merged);
|
|
1478
|
+
return nextLocal;
|
|
1479
|
+
});
|
|
1480
|
+
return { body: updated };
|
|
1481
|
+
} catch (err) {
|
|
1482
|
+
if (err instanceof external_exports.ZodError) {
|
|
1483
|
+
return { status: 400, body: { error: "validation_failed", issues: err.issues } };
|
|
1435
1484
|
}
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1485
|
+
throw err;
|
|
1486
|
+
}
|
|
1487
|
+
}
|
|
1488
|
+
try {
|
|
1489
|
+
const updated = updateConfig(vaultDir, (current) => {
|
|
1490
|
+
const working = structuredClone(current);
|
|
1491
|
+
for (const key of clearList) unsetAtPath(working, key);
|
|
1492
|
+
return deepMergeConfig(working, patch);
|
|
1440
1493
|
});
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1494
|
+
return { body: updated };
|
|
1495
|
+
} catch (err) {
|
|
1496
|
+
if (err instanceof external_exports.ZodError) {
|
|
1497
|
+
return { status: 400, body: { error: "validation_failed", issues: err.issues } };
|
|
1498
|
+
}
|
|
1499
|
+
throw err;
|
|
1500
|
+
}
|
|
1501
|
+
}
|
|
1502
|
+
function createPlanDirHandlers(deps) {
|
|
1503
|
+
async function handleGetPlanDirs(_req) {
|
|
1504
|
+
return { body: { symbiont: deps.symbiontPlanDirsByAgent } };
|
|
1448
1505
|
}
|
|
1449
|
-
return { handleGetPlanDirs
|
|
1506
|
+
return { handleGetPlanDirs };
|
|
1450
1507
|
}
|
|
1451
1508
|
|
|
1452
1509
|
// src/utils/parse-csv-list.ts
|
|
@@ -2229,8 +2286,8 @@ function getConfiguredManifests(projectRoot, config) {
|
|
|
2229
2286
|
}
|
|
2230
2287
|
return allManifests.filter((manifest) => fs12.existsSync(path12.join(projectRoot, manifest.configDir)));
|
|
2231
2288
|
}
|
|
2232
|
-
function reconcileConfiguredSymbionts(projectRoot, vaultDir = path12.join(projectRoot, ".myco")) {
|
|
2233
|
-
const config = loadConfig(vaultDir);
|
|
2289
|
+
function reconcileConfiguredSymbionts(projectRoot, vaultDir = path12.join(projectRoot, ".myco"), preloadedConfig) {
|
|
2290
|
+
const config = preloadedConfig ?? loadConfig(vaultDir);
|
|
2234
2291
|
const manifests = getConfiguredManifests(projectRoot, config);
|
|
2235
2292
|
const packageRoot = resolvePackageRoot();
|
|
2236
2293
|
let updatedCount = 0;
|
|
@@ -2772,7 +2829,7 @@ function createTeamHandlers(deps) {
|
|
|
2772
2829
|
return { body: { retried: count } };
|
|
2773
2830
|
}
|
|
2774
2831
|
async function handleUpgradeWorker(_req) {
|
|
2775
|
-
const { upgradeWorker } = await import("./team-
|
|
2832
|
+
const { upgradeWorker } = await import("./team-3JKF7VAD.js");
|
|
2776
2833
|
logger.info("team-sync.upgrade.start", "Starting worker upgrade");
|
|
2777
2834
|
const result = upgradeWorker(vaultDir);
|
|
2778
2835
|
if (!result.success) {
|
|
@@ -3164,7 +3221,7 @@ function createSkillRecordDeleteHandler(deps) {
|
|
|
3164
3221
|
logger.warn(LOG_KINDS.PROCESSOR_BATCH, "Failed to remove skill directory", { name: record.name, error: String(err) });
|
|
3165
3222
|
}
|
|
3166
3223
|
try {
|
|
3167
|
-
const { syncSkillSymlinks } = await import("./installer-
|
|
3224
|
+
const { syncSkillSymlinks } = await import("./installer-ZNK4JSQA.js");
|
|
3168
3225
|
syncSkillSymlinks(projectRoot, record.name, { remove: true });
|
|
3169
3226
|
} catch (err) {
|
|
3170
3227
|
logger.warn(LOG_KINDS.PROCESSOR_BATCH, "Failed to remove skill symlinks", { name: record.name, error: String(err) });
|
|
@@ -3714,6 +3771,14 @@ function upsertPlan(data) {
|
|
|
3714
3771
|
syncRow("plans", row);
|
|
3715
3772
|
return row;
|
|
3716
3773
|
}
|
|
3774
|
+
function getPlan(id) {
|
|
3775
|
+
const db = getDatabase();
|
|
3776
|
+
const row = db.prepare(
|
|
3777
|
+
`SELECT ${SELECT_COLUMNS4} FROM plans WHERE id = ?`
|
|
3778
|
+
).get(id);
|
|
3779
|
+
if (!row) return null;
|
|
3780
|
+
return toPlanRow(row);
|
|
3781
|
+
}
|
|
3717
3782
|
function listPlans(options = {}) {
|
|
3718
3783
|
const db = getDatabase();
|
|
3719
3784
|
const conditions = [];
|
|
@@ -3788,7 +3853,7 @@ async function triggerTitleSummary(sessionId, deps) {
|
|
|
3788
3853
|
if (config.agent.summary_batch_interval <= 0) return;
|
|
3789
3854
|
if (config.agent.event_tasks_enabled === false) return;
|
|
3790
3855
|
try {
|
|
3791
|
-
const { runAgent } = await import("./executor-
|
|
3856
|
+
const { runAgent } = await import("./executor-ACDHGTRH.js");
|
|
3792
3857
|
runAgent(vaultDir, {
|
|
3793
3858
|
task: "title-summary",
|
|
3794
3859
|
instruction: `Process session ${sessionId} only`,
|
|
@@ -5941,6 +6006,13 @@ function registerBuiltinDomains() {
|
|
|
5941
6006
|
{ id: "daemon.version_sync", label: "Version sync restart", defaultMode: "summary", defaultLevel: "info" }
|
|
5942
6007
|
]
|
|
5943
6008
|
});
|
|
6009
|
+
register({
|
|
6010
|
+
domain: "settings",
|
|
6011
|
+
label: "Settings",
|
|
6012
|
+
types: [
|
|
6013
|
+
{ id: "settings.saved", label: "Settings saved", defaultMode: "banner", defaultLevel: "success" }
|
|
6014
|
+
]
|
|
6015
|
+
});
|
|
5944
6016
|
}
|
|
5945
6017
|
|
|
5946
6018
|
// src/daemon/api/notifications.ts
|
|
@@ -6345,7 +6417,7 @@ async function registerScheduledTasks(powerManager, deps) {
|
|
|
6345
6417
|
logger.info(LOG_KINDS.AGENT_RUN, "Scheduled agent tasks disabled globally (agent.scheduled_tasks_enabled: false)");
|
|
6346
6418
|
return;
|
|
6347
6419
|
}
|
|
6348
|
-
const { loadAllTasks: loadAllTasks2 } = await import("./registry-
|
|
6420
|
+
const { loadAllTasks: loadAllTasks2 } = await import("./registry-MGJSJBAS.js");
|
|
6349
6421
|
const allTasks = Array.from(loadAllTasks2(definitionsDir, vaultDir).values());
|
|
6350
6422
|
const taskAgentMap = /* @__PURE__ */ new Map();
|
|
6351
6423
|
for (const task of allTasks) {
|
|
@@ -6371,7 +6443,7 @@ async function registerScheduledTasks(powerManager, deps) {
|
|
|
6371
6443
|
else runningTasks.delete(name);
|
|
6372
6444
|
},
|
|
6373
6445
|
runTask: async (taskName) => {
|
|
6374
|
-
const { runAgent } = await import("./executor-
|
|
6446
|
+
const { runAgent } = await import("./executor-ACDHGTRH.js");
|
|
6375
6447
|
const taskConfig = config.agent.tasks?.[taskName];
|
|
6376
6448
|
const projectRoot = resolve(vaultDir, "..");
|
|
6377
6449
|
const built = buildTaskInstruction(taskName, taskConfig?.params, taskAgentMap.get(taskName), projectRoot, embeddingManager);
|
|
@@ -6487,6 +6559,7 @@ function listTeamMembers() {
|
|
|
6487
6559
|
// src/daemon/api/mcp-proxy.ts
|
|
6488
6560
|
var SPORE_ID_RANDOM_BYTES = 4;
|
|
6489
6561
|
var RESOLUTION_ID_RANDOM_BYTES = 8;
|
|
6562
|
+
var MIN_CONSOLIDATE_SOURCES = 2;
|
|
6490
6563
|
var RememberBody = external_exports.object({
|
|
6491
6564
|
content: external_exports.string(),
|
|
6492
6565
|
type: external_exports.string().optional(),
|
|
@@ -6497,19 +6570,53 @@ var SupersedeBody = external_exports.object({
|
|
|
6497
6570
|
new_spore_id: external_exports.string(),
|
|
6498
6571
|
reason: external_exports.string().optional()
|
|
6499
6572
|
});
|
|
6573
|
+
function isoToEpochSeconds(iso) {
|
|
6574
|
+
const ms = Date.parse(iso);
|
|
6575
|
+
return Number.isNaN(ms) ? void 0 : Math.floor(ms / 1e3);
|
|
6576
|
+
}
|
|
6577
|
+
function registerMcpUserAgent(createdAt) {
|
|
6578
|
+
registerAgent({
|
|
6579
|
+
id: USER_AGENT_ID,
|
|
6580
|
+
name: USER_AGENT_NAME,
|
|
6581
|
+
created_at: createdAt
|
|
6582
|
+
});
|
|
6583
|
+
}
|
|
6584
|
+
function toPlanProgress(content) {
|
|
6585
|
+
const planContent = content ?? "";
|
|
6586
|
+
const checked = (planContent.match(/- \[x\]/gi) ?? []).length;
|
|
6587
|
+
const unchecked = (planContent.match(/- \[ \]/g) ?? []).length;
|
|
6588
|
+
const total = checked + unchecked;
|
|
6589
|
+
return total === 0 ? "N/A" : `${checked}/${total}`;
|
|
6590
|
+
}
|
|
6591
|
+
function toPlanTags(tags) {
|
|
6592
|
+
return tags ? tags.split(",").map((tag) => tag.trim()) : [];
|
|
6593
|
+
}
|
|
6594
|
+
var ConsolidateBody = external_exports.object({
|
|
6595
|
+
source_spore_ids: external_exports.array(external_exports.string()).min(MIN_CONSOLIDATE_SOURCES),
|
|
6596
|
+
consolidated_content: external_exports.string().min(1),
|
|
6597
|
+
observation_type: external_exports.string(),
|
|
6598
|
+
tags: external_exports.array(external_exports.string()).optional(),
|
|
6599
|
+
reason: external_exports.string().optional()
|
|
6600
|
+
});
|
|
6500
6601
|
function createMcpProxyHandlers(deps) {
|
|
6501
6602
|
const { machineId, embeddingManager } = deps;
|
|
6603
|
+
function toPlanSummary(row) {
|
|
6604
|
+
return {
|
|
6605
|
+
id: row.id,
|
|
6606
|
+
title: row.title,
|
|
6607
|
+
status: row.status,
|
|
6608
|
+
progress: toPlanProgress(row.content),
|
|
6609
|
+
tags: toPlanTags(row.tags),
|
|
6610
|
+
created_at: row.created_at
|
|
6611
|
+
};
|
|
6612
|
+
}
|
|
6502
6613
|
async function handleRemember(req) {
|
|
6503
6614
|
const { content, type, tags } = RememberBody.parse(req.body);
|
|
6504
6615
|
const { randomBytes } = await import("crypto");
|
|
6505
6616
|
const observationType = type ?? "discovery";
|
|
6506
6617
|
const id = `${observationType}-${randomBytes(SPORE_ID_RANDOM_BYTES).toString("hex")}`;
|
|
6507
6618
|
const now = epochSeconds();
|
|
6508
|
-
|
|
6509
|
-
id: USER_AGENT_ID,
|
|
6510
|
-
name: USER_AGENT_NAME,
|
|
6511
|
-
created_at: now
|
|
6512
|
-
});
|
|
6619
|
+
registerMcpUserAgent(now);
|
|
6513
6620
|
const spore = insertSpore({
|
|
6514
6621
|
id,
|
|
6515
6622
|
agent_id: USER_AGENT_ID,
|
|
@@ -6542,12 +6649,7 @@ function createMcpProxyHandlers(deps) {
|
|
|
6542
6649
|
embeddingManager.onStatusChanged("spores", old_spore_id, "superseded");
|
|
6543
6650
|
} catch {
|
|
6544
6651
|
}
|
|
6545
|
-
|
|
6546
|
-
id: USER_AGENT_ID,
|
|
6547
|
-
name: USER_AGENT_NAME,
|
|
6548
|
-
created_at: now
|
|
6549
|
-
});
|
|
6550
|
-
const { insertResolutionEvent } = await import("./resolution-events-PYLSI6QT.js");
|
|
6652
|
+
registerMcpUserAgent(now);
|
|
6551
6653
|
const resolutionId = `res-${randomBytes(RESOLUTION_ID_RANDOM_BYTES).toString("hex")}`;
|
|
6552
6654
|
insertResolutionEvent({
|
|
6553
6655
|
id: resolutionId,
|
|
@@ -6567,31 +6669,95 @@ function createMcpProxyHandlers(deps) {
|
|
|
6567
6669
|
}
|
|
6568
6670
|
};
|
|
6569
6671
|
}
|
|
6672
|
+
async function handleConsolidate(req) {
|
|
6673
|
+
const { source_spore_ids, consolidated_content, observation_type, tags, reason } = ConsolidateBody.parse(req.body);
|
|
6674
|
+
const { randomBytes } = await import("crypto");
|
|
6675
|
+
const now = epochSeconds();
|
|
6676
|
+
const newSporeId = `${observation_type}-${randomBytes(SPORE_ID_RANDOM_BYTES).toString("hex")}`;
|
|
6677
|
+
const db = getDatabase();
|
|
6678
|
+
registerMcpUserAgent(now);
|
|
6679
|
+
const { wisdom, sourcesSuperseded } = db.transaction(() => {
|
|
6680
|
+
const insertedWisdom = insertSpore({
|
|
6681
|
+
id: newSporeId,
|
|
6682
|
+
agent_id: USER_AGENT_ID,
|
|
6683
|
+
machine_id: machineId,
|
|
6684
|
+
observation_type,
|
|
6685
|
+
content: consolidated_content,
|
|
6686
|
+
tags: tags ? tags.join(", ") : null,
|
|
6687
|
+
created_at: now
|
|
6688
|
+
});
|
|
6689
|
+
const supersededSourceIds = [];
|
|
6690
|
+
for (const sourceId of source_spore_ids) {
|
|
6691
|
+
updateSporeStatus(sourceId, "superseded", now);
|
|
6692
|
+
insertResolutionEvent({
|
|
6693
|
+
id: `res-${randomBytes(RESOLUTION_ID_RANDOM_BYTES).toString("hex")}`,
|
|
6694
|
+
agent_id: USER_AGENT_ID,
|
|
6695
|
+
machine_id: machineId,
|
|
6696
|
+
spore_id: sourceId,
|
|
6697
|
+
action: "consolidate",
|
|
6698
|
+
new_spore_id: newSporeId,
|
|
6699
|
+
reason: reason ?? null,
|
|
6700
|
+
created_at: now
|
|
6701
|
+
});
|
|
6702
|
+
supersededSourceIds.push(sourceId);
|
|
6703
|
+
}
|
|
6704
|
+
return { wisdom: insertedWisdom, sourcesSuperseded: supersededSourceIds };
|
|
6705
|
+
})();
|
|
6706
|
+
embeddingManager.onContentWritten("spores", wisdom.id, consolidated_content, {
|
|
6707
|
+
status: "active",
|
|
6708
|
+
observation_type
|
|
6709
|
+
}).catch(() => {
|
|
6710
|
+
});
|
|
6711
|
+
for (const sourceId of sourcesSuperseded) {
|
|
6712
|
+
try {
|
|
6713
|
+
embeddingManager.onStatusChanged("spores", sourceId, "superseded");
|
|
6714
|
+
} catch {
|
|
6715
|
+
}
|
|
6716
|
+
}
|
|
6717
|
+
return {
|
|
6718
|
+
body: {
|
|
6719
|
+
new_spore_id: newSporeId,
|
|
6720
|
+
sources_superseded: sourcesSuperseded,
|
|
6721
|
+
status: "consolidated",
|
|
6722
|
+
created_at: now
|
|
6723
|
+
}
|
|
6724
|
+
};
|
|
6725
|
+
}
|
|
6570
6726
|
async function handlePlans(req) {
|
|
6727
|
+
const id = typeof req.query.id === "string" ? req.query.id : void 0;
|
|
6728
|
+
if (id) {
|
|
6729
|
+
const row = getPlan(id);
|
|
6730
|
+
if (!row) return { body: { plans: [] } };
|
|
6731
|
+
return {
|
|
6732
|
+
body: {
|
|
6733
|
+
plans: [{
|
|
6734
|
+
...toPlanSummary(row),
|
|
6735
|
+
content: row.content
|
|
6736
|
+
}]
|
|
6737
|
+
}
|
|
6738
|
+
};
|
|
6739
|
+
}
|
|
6571
6740
|
const statusFilter = req.query.status === "all" ? void 0 : req.query.status;
|
|
6572
6741
|
const limit = req.query.limit ? Number(req.query.limit) : void 0;
|
|
6573
6742
|
const rows = listPlans({ status: statusFilter, limit });
|
|
6574
|
-
const plans = rows.map(
|
|
6575
|
-
const content = row.content ?? "";
|
|
6576
|
-
const checked = (content.match(/- \[x\]/gi) ?? []).length;
|
|
6577
|
-
const unchecked = (content.match(/- \[ \]/g) ?? []).length;
|
|
6578
|
-
const total = checked + unchecked;
|
|
6579
|
-
const progress = total === 0 ? "N/A" : `${checked}/${total}`;
|
|
6580
|
-
return {
|
|
6581
|
-
id: row.id,
|
|
6582
|
-
title: row.title,
|
|
6583
|
-
status: row.status,
|
|
6584
|
-
progress,
|
|
6585
|
-
tags: row.tags ? row.tags.split(",").map((t) => t.trim()) : [],
|
|
6586
|
-
created_at: row.created_at
|
|
6587
|
-
};
|
|
6588
|
-
});
|
|
6743
|
+
const plans = rows.map(toPlanSummary);
|
|
6589
6744
|
return { body: { plans } };
|
|
6590
6745
|
}
|
|
6591
6746
|
async function handleSessions(req) {
|
|
6592
|
-
const limit = req.query.limit ? Number(req.query.limit) :
|
|
6593
|
-
const status = req.query.status;
|
|
6594
|
-
const
|
|
6747
|
+
const limit = req.query.limit ? Number(req.query.limit) : MCP_SESSIONS_DEFAULT_LIMIT;
|
|
6748
|
+
const status = typeof req.query.status === "string" ? req.query.status : void 0;
|
|
6749
|
+
const branch = typeof req.query.branch === "string" ? req.query.branch : void 0;
|
|
6750
|
+
const user = typeof req.query.user === "string" ? req.query.user : void 0;
|
|
6751
|
+
const plan = typeof req.query.plan === "string" ? req.query.plan : void 0;
|
|
6752
|
+
const sinceRaw = typeof req.query.since === "string" ? req.query.since : void 0;
|
|
6753
|
+
const since = sinceRaw ? isoToEpochSeconds(sinceRaw) : void 0;
|
|
6754
|
+
let id;
|
|
6755
|
+
if (plan) {
|
|
6756
|
+
const planRow = getPlan(plan);
|
|
6757
|
+
if (!planRow || !planRow.session_id) return { body: { sessions: [] } };
|
|
6758
|
+
id = planRow.session_id;
|
|
6759
|
+
}
|
|
6760
|
+
const rows = listSessions({ limit, status, branch, user, since, id });
|
|
6595
6761
|
const sessions = rows.map((row) => ({
|
|
6596
6762
|
id: row.id,
|
|
6597
6763
|
agent: row.agent,
|
|
@@ -6601,7 +6767,7 @@ function createMcpProxyHandlers(deps) {
|
|
|
6601
6767
|
ended_at: row.ended_at,
|
|
6602
6768
|
status: row.status,
|
|
6603
6769
|
title: row.title,
|
|
6604
|
-
summary: (row.summary ?? "").slice(0,
|
|
6770
|
+
summary: (row.summary ?? "").slice(0, SESSION_SUMMARY_PREVIEW_CHARS),
|
|
6605
6771
|
prompt_count: row.prompt_count,
|
|
6606
6772
|
tool_count: row.tool_count,
|
|
6607
6773
|
parent_session_id: row.parent_session_id
|
|
@@ -6622,6 +6788,7 @@ function createMcpProxyHandlers(deps) {
|
|
|
6622
6788
|
return {
|
|
6623
6789
|
handleRemember,
|
|
6624
6790
|
handleSupersede,
|
|
6791
|
+
handleConsolidate,
|
|
6625
6792
|
handlePlans,
|
|
6626
6793
|
handleSessions,
|
|
6627
6794
|
handleTeam
|
|
@@ -6675,7 +6842,7 @@ function createAgentRunHandlers(deps) {
|
|
|
6675
6842
|
};
|
|
6676
6843
|
}
|
|
6677
6844
|
}
|
|
6678
|
-
const { runAgent } = await import("./executor-
|
|
6845
|
+
const { runAgent } = await import("./executor-ACDHGTRH.js");
|
|
6679
6846
|
const resultPromise = runAgent(vaultDir, {
|
|
6680
6847
|
task,
|
|
6681
6848
|
instruction,
|
|
@@ -6833,6 +7000,207 @@ function reconcileLogBuffer(logDir, sinceTimestamp) {
|
|
|
6833
7000
|
return replayed;
|
|
6834
7001
|
}
|
|
6835
7002
|
|
|
7003
|
+
// src/config/focus.ts
|
|
7004
|
+
var CONFIG_FOCUS_SECTION_PARAM = "configSection";
|
|
7005
|
+
var CONFIG_FOCUS_FIELD_PARAM = "configField";
|
|
7006
|
+
var CONFIG_SECTION_IDS = {
|
|
7007
|
+
appearance: "config-section-appearance",
|
|
7008
|
+
settingsAgent: "config-section-settings-agent",
|
|
7009
|
+
settingsEmbedding: "config-section-settings-embedding",
|
|
7010
|
+
settingsContextInjection: "config-section-settings-context-injection",
|
|
7011
|
+
settingsNotifications: "config-section-settings-notifications",
|
|
7012
|
+
settingsPlanCapture: "config-section-settings-plan-capture",
|
|
7013
|
+
settingsProject: "config-section-settings-project",
|
|
7014
|
+
agentOperations: "config-section-agent-operations",
|
|
7015
|
+
operationsMaintenance: "config-section-operations-maintenance",
|
|
7016
|
+
operationsBackup: "config-section-operations-backup"
|
|
7017
|
+
};
|
|
7018
|
+
var SECTION_RULES = [
|
|
7019
|
+
{
|
|
7020
|
+
prefix: "appearance",
|
|
7021
|
+
page: "/settings",
|
|
7022
|
+
sectionId: CONFIG_SECTION_IDS.appearance,
|
|
7023
|
+
sectionLabel: "Appearance"
|
|
7024
|
+
},
|
|
7025
|
+
{
|
|
7026
|
+
prefix: "agent.provider",
|
|
7027
|
+
page: "/settings",
|
|
7028
|
+
sectionId: CONFIG_SECTION_IDS.settingsAgent,
|
|
7029
|
+
sectionLabel: "Myco Agent"
|
|
7030
|
+
},
|
|
7031
|
+
{
|
|
7032
|
+
prefix: "embedding",
|
|
7033
|
+
page: "/settings",
|
|
7034
|
+
sectionId: CONFIG_SECTION_IDS.settingsEmbedding,
|
|
7035
|
+
sectionLabel: "Embedding"
|
|
7036
|
+
},
|
|
7037
|
+
{
|
|
7038
|
+
prefix: "context",
|
|
7039
|
+
page: "/settings",
|
|
7040
|
+
sectionId: CONFIG_SECTION_IDS.settingsContextInjection,
|
|
7041
|
+
sectionLabel: "Context Injection"
|
|
7042
|
+
},
|
|
7043
|
+
{
|
|
7044
|
+
prefix: "notifications",
|
|
7045
|
+
page: "/settings",
|
|
7046
|
+
sectionId: CONFIG_SECTION_IDS.settingsNotifications,
|
|
7047
|
+
sectionLabel: "Notifications"
|
|
7048
|
+
},
|
|
7049
|
+
{
|
|
7050
|
+
prefix: "capture",
|
|
7051
|
+
page: "/settings",
|
|
7052
|
+
sectionId: CONFIG_SECTION_IDS.settingsPlanCapture,
|
|
7053
|
+
sectionLabel: "Plan Capture"
|
|
7054
|
+
},
|
|
7055
|
+
{
|
|
7056
|
+
prefix: "daemon",
|
|
7057
|
+
page: "/settings",
|
|
7058
|
+
sectionId: CONFIG_SECTION_IDS.settingsProject,
|
|
7059
|
+
sectionLabel: "Project"
|
|
7060
|
+
},
|
|
7061
|
+
{
|
|
7062
|
+
prefix: "agent.scheduled_tasks_enabled",
|
|
7063
|
+
page: "/agent",
|
|
7064
|
+
sectionId: CONFIG_SECTION_IDS.agentOperations,
|
|
7065
|
+
sectionLabel: "Agent Operations",
|
|
7066
|
+
searchParams: { tab: "config" }
|
|
7067
|
+
},
|
|
7068
|
+
{
|
|
7069
|
+
prefix: "agent.event_tasks_enabled",
|
|
7070
|
+
page: "/agent",
|
|
7071
|
+
sectionId: CONFIG_SECTION_IDS.agentOperations,
|
|
7072
|
+
sectionLabel: "Agent Operations",
|
|
7073
|
+
searchParams: { tab: "config" }
|
|
7074
|
+
},
|
|
7075
|
+
{
|
|
7076
|
+
prefix: "agent.summary_batch_interval",
|
|
7077
|
+
page: "/agent",
|
|
7078
|
+
sectionId: CONFIG_SECTION_IDS.agentOperations,
|
|
7079
|
+
sectionLabel: "Agent Operations",
|
|
7080
|
+
searchParams: { tab: "config" }
|
|
7081
|
+
},
|
|
7082
|
+
{
|
|
7083
|
+
prefix: "maintenance",
|
|
7084
|
+
page: "/operations",
|
|
7085
|
+
sectionId: CONFIG_SECTION_IDS.operationsMaintenance,
|
|
7086
|
+
sectionLabel: "Scheduled Maintenance"
|
|
7087
|
+
},
|
|
7088
|
+
{
|
|
7089
|
+
prefix: "backup",
|
|
7090
|
+
page: "/operations",
|
|
7091
|
+
sectionId: CONFIG_SECTION_IDS.operationsBackup,
|
|
7092
|
+
sectionLabel: "Backup & Restore"
|
|
7093
|
+
}
|
|
7094
|
+
];
|
|
7095
|
+
var EXACT_FIELD_LABELS = {
|
|
7096
|
+
"appearance.theme": "Color Theme",
|
|
7097
|
+
"appearance.mode": "Mode",
|
|
7098
|
+
"appearance.font": "Font",
|
|
7099
|
+
"appearance.density": "Density",
|
|
7100
|
+
"agent.provider": "Provider",
|
|
7101
|
+
"agent.provider.type": "Provider",
|
|
7102
|
+
"agent.provider.model": "Model",
|
|
7103
|
+
"agent.provider.base_url": "Base URL",
|
|
7104
|
+
"agent.provider.context_length": "Context Length",
|
|
7105
|
+
"embedding.provider": "Provider",
|
|
7106
|
+
"embedding.model": "Model",
|
|
7107
|
+
"embedding.base_url": "Base URL",
|
|
7108
|
+
"context.digest_tier": "Digest Tier",
|
|
7109
|
+
"context.prompt_search": "Prompt Search",
|
|
7110
|
+
"context.prompt_max_spores": "Max Spores per Prompt",
|
|
7111
|
+
"notifications.enabled": "Notifications",
|
|
7112
|
+
"notifications.default_mode": "Default Display",
|
|
7113
|
+
"notifications.system_notifications": "Browser Notifications",
|
|
7114
|
+
"capture.ignore_plan_dirs_in_git": "Ignore Custom Plan Dirs In Git",
|
|
7115
|
+
"capture.plan_dirs": "Custom Directories",
|
|
7116
|
+
"daemon.port": "Daemon Port",
|
|
7117
|
+
"daemon.log_level": "Log Level",
|
|
7118
|
+
"daemon.log_retention_days": "Log Retention (days)",
|
|
7119
|
+
"agent.scheduled_tasks_enabled": "Scheduled Tasks",
|
|
7120
|
+
"agent.event_tasks_enabled": "Event-Driven Tasks",
|
|
7121
|
+
"agent.summary_batch_interval": "Title & Summary Batch Interval",
|
|
7122
|
+
"maintenance.auto_optimize": "Auto-optimize",
|
|
7123
|
+
"maintenance.auto_optimize_interval_hours": "Auto-optimize Interval",
|
|
7124
|
+
"backup.dir": "Backup Directory"
|
|
7125
|
+
};
|
|
7126
|
+
var DYNAMIC_FIELD_LABEL_RULES = [
|
|
7127
|
+
{
|
|
7128
|
+
prefix: "notifications.domains.",
|
|
7129
|
+
format: (path23) => {
|
|
7130
|
+
const match = /^notifications\.domains\.([^.]+)\.(enabled|mode)$/.exec(path23);
|
|
7131
|
+
if (!match) return null;
|
|
7132
|
+
const [, domain, leaf] = match;
|
|
7133
|
+
const domainLabel = humanizeToken(domain);
|
|
7134
|
+
return leaf === "mode" ? `${domainLabel} Display` : `${domainLabel} Notifications`;
|
|
7135
|
+
}
|
|
7136
|
+
}
|
|
7137
|
+
];
|
|
7138
|
+
var SAVE_MESSAGE_LABEL_LIMIT = 3;
|
|
7139
|
+
function resolveConfigFocusTarget(path23) {
|
|
7140
|
+
const section = findSectionRule(path23);
|
|
7141
|
+
if (!section) return null;
|
|
7142
|
+
return {
|
|
7143
|
+
...section,
|
|
7144
|
+
fieldPath: path23,
|
|
7145
|
+
fieldLabel: resolveFieldLabel(path23)
|
|
7146
|
+
};
|
|
7147
|
+
}
|
|
7148
|
+
function buildConfigFocusLink(target) {
|
|
7149
|
+
const params = new URLSearchParams(target.searchParams);
|
|
7150
|
+
params.set(CONFIG_FOCUS_SECTION_PARAM, target.sectionId);
|
|
7151
|
+
params.set(CONFIG_FOCUS_FIELD_PARAM, target.fieldPath);
|
|
7152
|
+
return `${target.page}?${params.toString()}`;
|
|
7153
|
+
}
|
|
7154
|
+
function buildScopedConfigSaveNotification(scope, touchedPaths) {
|
|
7155
|
+
const uniquePaths = [...new Set(touchedPaths)];
|
|
7156
|
+
const scopeLabel = scope === "local" ? "Personal" : "Project";
|
|
7157
|
+
const focusTarget = uniquePaths.map(resolveConfigFocusTarget).find((target) => target !== null) ?? null;
|
|
7158
|
+
const fieldLabels = uniquePaths.map(resolveFieldLabel);
|
|
7159
|
+
const primaryLabel = fieldLabels[0] ?? "Setting";
|
|
7160
|
+
const labelList = fieldLabels.slice(0, SAVE_MESSAGE_LABEL_LIMIT).join(", ");
|
|
7161
|
+
const remainingCount = Math.max(0, fieldLabels.length - SAVE_MESSAGE_LABEL_LIMIT);
|
|
7162
|
+
const messageLabel = remainingCount > 0 ? `${labelList}, +${remainingCount} more` : labelList;
|
|
7163
|
+
return {
|
|
7164
|
+
title: uniquePaths.length === 1 ? `${primaryLabel} saved` : `${uniquePaths.length} settings saved`,
|
|
7165
|
+
message: focusTarget ? `${focusTarget.sectionLabel} \xB7 ${messageLabel} \xB7 ${scopeLabel}` : `${messageLabel} \xB7 ${scopeLabel}`,
|
|
7166
|
+
link: focusTarget ? buildConfigFocusLink(focusTarget) : null,
|
|
7167
|
+
metadata: {
|
|
7168
|
+
scope,
|
|
7169
|
+
touched_paths: uniquePaths,
|
|
7170
|
+
field_labels: fieldLabels,
|
|
7171
|
+
focus_target: focusTarget ? {
|
|
7172
|
+
page: focusTarget.page,
|
|
7173
|
+
section_id: focusTarget.sectionId,
|
|
7174
|
+
field_path: focusTarget.fieldPath,
|
|
7175
|
+
field_label: focusTarget.fieldLabel
|
|
7176
|
+
} : null
|
|
7177
|
+
}
|
|
7178
|
+
};
|
|
7179
|
+
}
|
|
7180
|
+
function findSectionRule(path23) {
|
|
7181
|
+
for (const rule of SECTION_RULES) {
|
|
7182
|
+
if (path23 === rule.prefix || path23.startsWith(`${rule.prefix}.`)) {
|
|
7183
|
+
const { page, sectionId, sectionLabel, searchParams } = rule;
|
|
7184
|
+
return { page, sectionId, sectionLabel, searchParams };
|
|
7185
|
+
}
|
|
7186
|
+
}
|
|
7187
|
+
return null;
|
|
7188
|
+
}
|
|
7189
|
+
function resolveFieldLabel(path23) {
|
|
7190
|
+
const exact = EXACT_FIELD_LABELS[path23];
|
|
7191
|
+
if (exact) return exact;
|
|
7192
|
+
for (const rule of DYNAMIC_FIELD_LABEL_RULES) {
|
|
7193
|
+
if (path23 === rule.prefix || path23.startsWith(rule.prefix)) {
|
|
7194
|
+
const label = rule.format(path23);
|
|
7195
|
+
if (label) return label;
|
|
7196
|
+
}
|
|
7197
|
+
}
|
|
7198
|
+
return humanizeToken(path23.split(".").pop() ?? "setting");
|
|
7199
|
+
}
|
|
7200
|
+
function humanizeToken(value) {
|
|
7201
|
+
return value.split(/[-_]/g).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
|
|
7202
|
+
}
|
|
7203
|
+
|
|
6836
7204
|
// src/daemon/power.ts
|
|
6837
7205
|
var PowerManager = class {
|
|
6838
7206
|
state = "active";
|
|
@@ -7029,7 +7397,7 @@ function registerPowerJobs(powerManager, deps) {
|
|
|
7029
7397
|
name: "log-retention",
|
|
7030
7398
|
runIn: ["idle", "sleep"],
|
|
7031
7399
|
fn: async () => {
|
|
7032
|
-
const retentionDays =
|
|
7400
|
+
const retentionDays = loadMergedConfig(vaultDir).daemon.log_retention_days;
|
|
7033
7401
|
const cutoff = new Date(Date.now() - retentionDays * MS_PER_DAY).toISOString();
|
|
7034
7402
|
const deleted = deleteOldLogs(cutoff);
|
|
7035
7403
|
if (deleted > 0) {
|
|
@@ -7504,11 +7872,22 @@ function createStopProcessor(deps) {
|
|
|
7504
7872
|
const sessionTitleCache = /* @__PURE__ */ new Map();
|
|
7505
7873
|
const StopBody = external_exports.object({
|
|
7506
7874
|
session_id: external_exports.string(),
|
|
7875
|
+
agent: external_exports.string().optional(),
|
|
7507
7876
|
user: external_exports.string().optional(),
|
|
7508
7877
|
transcript_path: external_exports.string().nullish(),
|
|
7509
7878
|
last_assistant_message: external_exports.string().nullish()
|
|
7510
7879
|
});
|
|
7511
7880
|
const triggerTitleSummary2 = (sessionId) => triggerTitleSummary(sessionId, { vaultDir, embeddingManager, config, logger });
|
|
7881
|
+
function cleanupInvalidCapturedSession(sessionId) {
|
|
7882
|
+
registry.unregister(sessionId);
|
|
7883
|
+
sessionBuffers.delete(sessionId);
|
|
7884
|
+
sessionTitleCache.delete(sessionId);
|
|
7885
|
+
const result = deleteSessionCascade(sessionId);
|
|
7886
|
+
if (!result.deleted) return false;
|
|
7887
|
+
cleanupAfterSessionCascade(sessionId, result, embeddingManager, vaultDir).catch(() => {
|
|
7888
|
+
});
|
|
7889
|
+
return true;
|
|
7890
|
+
}
|
|
7512
7891
|
async function processStopEvent(sessionId, user, sessionMeta, hookTranscriptPath, lastAssistantMessage) {
|
|
7513
7892
|
const transcriptResult = transcriptMiner.getAllTurnsWithSource(sessionId, hookTranscriptPath);
|
|
7514
7893
|
let allTurns = transcriptResult.turns;
|
|
@@ -7681,7 +8060,30 @@ function createStopProcessor(deps) {
|
|
|
7681
8060
|
});
|
|
7682
8061
|
}
|
|
7683
8062
|
const handleStopRoute = async (req) => {
|
|
7684
|
-
const {
|
|
8063
|
+
const {
|
|
8064
|
+
session_id: sessionId,
|
|
8065
|
+
agent,
|
|
8066
|
+
user,
|
|
8067
|
+
transcript_path: hookTranscriptPath,
|
|
8068
|
+
last_assistant_message: lastAssistantMessage
|
|
8069
|
+
} = StopBody.parse(req.body);
|
|
8070
|
+
if (hookTranscriptPath) {
|
|
8071
|
+
const transcriptMeta = readTranscriptMeta(hookTranscriptPath) ?? void 0;
|
|
8072
|
+
const detectedAgent = agent ?? getSession(sessionId)?.agent ?? "claude-code";
|
|
8073
|
+
const decision = evaluateSessionCaptureRules(loadManifests(), detectedAgent, {
|
|
8074
|
+
transcriptPath: hookTranscriptPath,
|
|
8075
|
+
transcriptMeta
|
|
8076
|
+
});
|
|
8077
|
+
if (decision.action === "drop") {
|
|
8078
|
+
const deleted = cleanupInvalidCapturedSession(sessionId);
|
|
8079
|
+
logger.info(LOG_KINDS.HOOKS_STOP, "Stop ignored \u2014 invalid captured session", {
|
|
8080
|
+
session_id: sessionId,
|
|
8081
|
+
reason: decision.reason ?? "rule",
|
|
8082
|
+
deleted_existing_session: deleted
|
|
8083
|
+
});
|
|
8084
|
+
return { body: { ok: true, ignored: decision.reason ?? "rule" } };
|
|
8085
|
+
}
|
|
8086
|
+
}
|
|
7685
8087
|
const existingSessionMeta = registry.getSession(sessionId);
|
|
7686
8088
|
if (!hookTranscriptPath && !existingSessionMeta) {
|
|
7687
8089
|
logger.info(LOG_KINDS.HOOKS_STOP, "Stop ignored \u2014 ephemeral sub-invocation", {
|
|
@@ -7969,6 +8371,62 @@ function createEventDispatcher(deps) {
|
|
|
7969
8371
|
};
|
|
7970
8372
|
}
|
|
7971
8373
|
|
|
8374
|
+
// src/daemon/config-reactions/registry.ts
|
|
8375
|
+
function createConfigReactionRegistry(logger) {
|
|
8376
|
+
const entries = [];
|
|
8377
|
+
return {
|
|
8378
|
+
on(paths, fn) {
|
|
8379
|
+
entries.push({ paths, fn });
|
|
8380
|
+
},
|
|
8381
|
+
async fire(touchedPaths, ctx) {
|
|
8382
|
+
for (const entry of entries) {
|
|
8383
|
+
if (!shouldFire(entry.paths, touchedPaths)) continue;
|
|
8384
|
+
try {
|
|
8385
|
+
await entry.fn(ctx);
|
|
8386
|
+
} catch (err) {
|
|
8387
|
+
logger.error("config-reactions", "reaction threw", { error: String(err) });
|
|
8388
|
+
}
|
|
8389
|
+
}
|
|
8390
|
+
}
|
|
8391
|
+
};
|
|
8392
|
+
}
|
|
8393
|
+
function shouldFire(registeredPaths, touched) {
|
|
8394
|
+
if (registeredPaths.length === 0) return true;
|
|
8395
|
+
for (const prefix of registeredPaths) {
|
|
8396
|
+
for (const path23 of touched) {
|
|
8397
|
+
if (path23 === prefix || path23.startsWith(`${prefix}.`)) return true;
|
|
8398
|
+
}
|
|
8399
|
+
}
|
|
8400
|
+
return false;
|
|
8401
|
+
}
|
|
8402
|
+
|
|
8403
|
+
// src/daemon/config-reactions/context.ts
|
|
8404
|
+
function loadReactionContext(vaultDir, logger) {
|
|
8405
|
+
try {
|
|
8406
|
+
return loadMergedConfig(vaultDir);
|
|
8407
|
+
} catch (err) {
|
|
8408
|
+
if (err instanceof external_exports.ZodError) {
|
|
8409
|
+
logger.warn("config-reactions", "skipping reactions because merged config is invalid", {
|
|
8410
|
+
issues: err.issues.map((issue) => ({
|
|
8411
|
+
path: issue.path.join("."),
|
|
8412
|
+
message: issue.message
|
|
8413
|
+
}))
|
|
8414
|
+
});
|
|
8415
|
+
return null;
|
|
8416
|
+
}
|
|
8417
|
+
throw err;
|
|
8418
|
+
}
|
|
8419
|
+
}
|
|
8420
|
+
|
|
8421
|
+
// src/daemon/plan-watch-reaction.ts
|
|
8422
|
+
function createPlanWatchReaction(deps) {
|
|
8423
|
+
return (ctx) => {
|
|
8424
|
+
const customDirs = ctx.capture.plan_dirs ?? [];
|
|
8425
|
+
deps.planWatchConfig.watchDirs = [.../* @__PURE__ */ new Set([...deps.symbiontPlanDirs, ...customDirs])];
|
|
8426
|
+
deps.planWatchConfig.extensions = ctx.capture.artifact_extensions;
|
|
8427
|
+
};
|
|
8428
|
+
}
|
|
8429
|
+
|
|
7972
8430
|
// src/daemon/main.ts
|
|
7973
8431
|
import fs23 from "fs";
|
|
7974
8432
|
import os8 from "os";
|
|
@@ -8003,7 +8461,7 @@ async function main() {
|
|
|
8003
8461
|
const symbiontPlanDirs = manifests.flatMap((m) => m.capture?.planDirs ?? []);
|
|
8004
8462
|
const symbiontPlanTags = [...new Set(manifests.flatMap((m) => m.capture?.planTags ?? []))];
|
|
8005
8463
|
const projectRoot = process.cwd();
|
|
8006
|
-
|
|
8464
|
+
const planWatchConfig = {
|
|
8007
8465
|
watchDirs: [.../* @__PURE__ */ new Set([...symbiontPlanDirs, ...config.capture.plan_dirs ?? []])],
|
|
8008
8466
|
projectRoot,
|
|
8009
8467
|
extensions: config.capture.artifact_extensions
|
|
@@ -8113,7 +8571,7 @@ async function main() {
|
|
|
8113
8571
|
const databaseManager = new DatabaseMaintenanceManager(vaultDbPath(vaultDir), vaultDir, logger);
|
|
8114
8572
|
let definitionsDir;
|
|
8115
8573
|
try {
|
|
8116
|
-
const { registerBuiltInAgentsAndTasks, resolveDefinitionsDir: resolveDefinitionsDir2 } = await import("./loader-
|
|
8574
|
+
const { registerBuiltInAgentsAndTasks, resolveDefinitionsDir: resolveDefinitionsDir2 } = await import("./loader-TSB5M7FD.js");
|
|
8117
8575
|
definitionsDir = resolveDefinitionsDir2();
|
|
8118
8576
|
await registerBuiltInAgentsAndTasks(definitionsDir, vaultDir);
|
|
8119
8577
|
logger.info(LOG_KINDS.AGENT_TASK, "Built-in agents and tasks registered");
|
|
@@ -8236,39 +8694,59 @@ async function main() {
|
|
|
8236
8694
|
let configHash = computeConfigHash(vaultDir);
|
|
8237
8695
|
server.registerRoute("GET", "/api/config", async () => handleGetConfig(vaultDir));
|
|
8238
8696
|
server.registerRoute("GET", "/api/symbionts", async () => handleListSymbionts(vaultDir));
|
|
8239
|
-
server.registerRoute("
|
|
8240
|
-
|
|
8241
|
-
if (!result.status || result.status < 400) {
|
|
8242
|
-
reconcileConfiguredSymbionts(path22.dirname(vaultDir), vaultDir);
|
|
8243
|
-
configHash = computeConfigHash(vaultDir);
|
|
8244
|
-
}
|
|
8245
|
-
return result;
|
|
8246
|
-
});
|
|
8697
|
+
server.registerRoute("GET", "/api/config/merged", async () => handleGetMergedConfig(vaultDir));
|
|
8698
|
+
server.registerRoute("GET", "/api/config/local", async () => handleGetLocalConfig(vaultDir));
|
|
8247
8699
|
const symbiontPlanDirsByAgent = {};
|
|
8248
8700
|
for (const m of manifests) {
|
|
8249
8701
|
const dirs = m.capture?.planDirs ?? [];
|
|
8250
8702
|
if (dirs.length > 0) symbiontPlanDirsByAgent[m.displayName] = dirs;
|
|
8251
8703
|
}
|
|
8252
|
-
const
|
|
8253
|
-
|
|
8254
|
-
|
|
8704
|
+
const reactions = createConfigReactionRegistry(logger);
|
|
8705
|
+
reactions.on([], () => {
|
|
8706
|
+
configHash = computeConfigHash(vaultDir);
|
|
8707
|
+
});
|
|
8708
|
+
reactions.on(["capture", "symbionts"], (ctx) => {
|
|
8709
|
+
reconcileConfiguredSymbionts(path22.dirname(vaultDir), vaultDir, ctx);
|
|
8710
|
+
});
|
|
8711
|
+
reactions.on(["capture"], createPlanWatchReaction({
|
|
8255
8712
|
symbiontPlanDirs,
|
|
8256
|
-
planWatchConfig
|
|
8257
|
-
|
|
8258
|
-
|
|
8259
|
-
|
|
8260
|
-
|
|
8261
|
-
|
|
8713
|
+
planWatchConfig
|
|
8714
|
+
}));
|
|
8715
|
+
reactions.on(["daemon.log_level"], (ctx) => {
|
|
8716
|
+
logger.setLevel(ctx.daemon.log_level);
|
|
8717
|
+
if (ctx.daemon.log_level === "debug") {
|
|
8718
|
+
process.env.MYCO_AGENT_DEBUG = "1";
|
|
8719
|
+
} else {
|
|
8720
|
+
delete process.env.MYCO_AGENT_DEBUG;
|
|
8262
8721
|
}
|
|
8263
8722
|
});
|
|
8264
|
-
server.registerRoute("
|
|
8265
|
-
|
|
8266
|
-
const result = await planDirHandlers.handleUpdatePlanDirs(req);
|
|
8723
|
+
server.registerRoute("PUT", "/api/config/scoped", async (req) => {
|
|
8724
|
+
const result = await handlePutScopedConfig(vaultDir, req.body);
|
|
8267
8725
|
if (!result.status || result.status < 400) {
|
|
8268
|
-
|
|
8726
|
+
const body = req.body;
|
|
8727
|
+
const touchedPaths = computeTouchedPaths(body.patch, body.clear);
|
|
8728
|
+
const reactionContext = loadReactionContext(vaultDir, logger);
|
|
8729
|
+
if (reactionContext) {
|
|
8730
|
+
await reactions.fire(touchedPaths, reactionContext);
|
|
8731
|
+
const summary = buildScopedConfigSaveNotification(body.scope, touchedPaths);
|
|
8732
|
+
notify(vaultDir, {
|
|
8733
|
+
domain: "settings",
|
|
8734
|
+
type: "settings.saved",
|
|
8735
|
+
title: summary.title,
|
|
8736
|
+
message: summary.message,
|
|
8737
|
+
link: summary.link ?? void 0,
|
|
8738
|
+
metadata: summary.metadata
|
|
8739
|
+
}, reactionContext);
|
|
8740
|
+
} else {
|
|
8741
|
+
configHash = computeConfigHash(vaultDir);
|
|
8742
|
+
}
|
|
8269
8743
|
}
|
|
8270
8744
|
return result;
|
|
8271
8745
|
});
|
|
8746
|
+
const planDirHandlers = createPlanDirHandlers({
|
|
8747
|
+
symbiontPlanDirsByAgent
|
|
8748
|
+
});
|
|
8749
|
+
server.registerRoute("GET", "/api/config/plan-dirs", planDirHandlers.handleGetPlanDirs);
|
|
8272
8750
|
const configHashRef = { get: () => configHash };
|
|
8273
8751
|
server.registerRoute("GET", "/api/stats", createLiveStatsHandler({
|
|
8274
8752
|
vaultDir,
|
|
@@ -8346,6 +8824,7 @@ async function main() {
|
|
|
8346
8824
|
const mcpProxy = createMcpProxyHandlers({ machineId, embeddingManager });
|
|
8347
8825
|
server.registerRoute("POST", "/api/mcp/remember", mcpProxy.handleRemember);
|
|
8348
8826
|
server.registerRoute("POST", "/api/mcp/supersede", mcpProxy.handleSupersede);
|
|
8827
|
+
server.registerRoute("POST", "/api/mcp/consolidate", mcpProxy.handleConsolidate);
|
|
8349
8828
|
server.registerRoute("GET", "/api/mcp/plans", mcpProxy.handlePlans);
|
|
8350
8829
|
server.registerRoute("GET", "/api/mcp/sessions", mcpProxy.handleSessions);
|
|
8351
8830
|
server.registerRoute("GET", "/api/mcp/team", mcpProxy.handleTeam);
|
|
@@ -8454,4 +8933,4 @@ export {
|
|
|
8454
8933
|
handleUserPrompt,
|
|
8455
8934
|
main
|
|
8456
8935
|
};
|
|
8457
|
-
//# sourceMappingURL=main-
|
|
8936
|
+
//# sourceMappingURL=main-5S4MDCIO.js.map
|