@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.
Files changed (181) hide show
  1. package/dist/{agent-run-WK5NKBYA.js → agent-run-4HUXVRHW.js} +8 -8
  2. package/dist/{agent-tasks-2E73GG3A.js → agent-tasks-JF45ELB6.js} +8 -8
  3. package/dist/{chunk-DURKJTVO.js → chunk-3WOS4TAR.js} +9 -1
  4. package/dist/chunk-3WOS4TAR.js.map +1 -0
  5. package/dist/{chunk-TMNFCUAD.js → chunk-4LCIKVDM.js} +49 -21
  6. package/dist/chunk-4LCIKVDM.js.map +1 -0
  7. package/dist/{chunk-Q4QD6LJT.js → chunk-4M7EWPIA.js} +3 -3
  8. package/dist/{chunk-FGKCE5AE.js → chunk-4YFKBL3F.js} +2 -2
  9. package/dist/{chunk-KYH4V4ML.js → chunk-57O67XVF.js} +3 -3
  10. package/dist/{chunk-7ONVLO43.js → chunk-5XIVBO25.js} +2 -2
  11. package/dist/{chunk-ST2D3SGM.js → chunk-ACQ2AIEM.js} +2 -2
  12. package/dist/{chunk-6ZDJXSEO.js → chunk-BPRIYNLE.js} +3 -3
  13. package/dist/chunk-CUDIZJY7.js +36 -0
  14. package/dist/chunk-CUDIZJY7.js.map +1 -0
  15. package/dist/{chunk-WKNAKQKA.js → chunk-DCSGJ7W4.js} +13 -19
  16. package/dist/chunk-DCSGJ7W4.js.map +1 -0
  17. package/dist/{chunk-Q6OEZM3S.js → chunk-EVDQKYCG.js} +237 -10
  18. package/dist/chunk-EVDQKYCG.js.map +1 -0
  19. package/dist/{chunk-I54KLC6H.js → chunk-FLLBJLHM.js} +3 -1
  20. package/dist/{chunk-I54KLC6H.js.map → chunk-FLLBJLHM.js.map} +1 -1
  21. package/dist/{chunk-PMT2LSTQ.js → chunk-FMRZ26U5.js} +2 -2
  22. package/dist/{chunk-3J6TUJSV.js → chunk-KHT24OWC.js} +3 -3
  23. package/dist/{chunk-P5VNHGVZ.js → chunk-L6XFAJIF.js} +64 -13
  24. package/dist/chunk-L6XFAJIF.js.map +1 -0
  25. package/dist/{chunk-6DDRJQ4X.js → chunk-MYOZLMB2.js} +2 -2
  26. package/dist/{chunk-UVKQ62II.js → chunk-NGROSFOH.js} +24 -2
  27. package/dist/chunk-NGROSFOH.js.map +1 -0
  28. package/dist/{chunk-VLGBWOBY.js → chunk-P3DN5EWW.js} +4 -4
  29. package/dist/{chunk-W3JUH5S3.js → chunk-POR75WM6.js} +4 -4
  30. package/dist/{chunk-FKBPXCH3.js → chunk-QS5TWZBL.js} +4 -4
  31. package/dist/{chunk-NKQZ73LL.js → chunk-SRXTSI25.js} +109 -3
  32. package/dist/chunk-SRXTSI25.js.map +1 -0
  33. package/dist/{chunk-QH5HS54N.js → chunk-UOQQENDW.js} +3 -3
  34. package/dist/{chunk-GFR542SM.js → chunk-US4LNCAT.js} +5 -11
  35. package/dist/chunk-US4LNCAT.js.map +1 -0
  36. package/dist/{chunk-44PZCAYS.js → chunk-XL75KZGI.js} +23 -13
  37. package/dist/chunk-XL75KZGI.js.map +1 -0
  38. package/dist/{chunk-NCBLB2C6.js → chunk-YSNIAJ5D.js} +7 -4
  39. package/dist/chunk-YSNIAJ5D.js.map +1 -0
  40. package/dist/chunk-ZXZPJJN3.js +54 -0
  41. package/dist/chunk-ZXZPJJN3.js.map +1 -0
  42. package/dist/{cli-LCTXK7N6.js → cli-AHTINAHY.js} +43 -43
  43. package/dist/{client-S47ENM76.js → client-LHENCAV3.js} +4 -4
  44. package/dist/{config-IO5WALOD.js → config-XPV5GDE4.js} +8 -16
  45. package/dist/config-XPV5GDE4.js.map +1 -0
  46. package/dist/{detect-BEOIHGBC.js → detect-PXNM6TA7.js} +2 -2
  47. package/dist/{detect-providers-2EY55EHK.js → detect-providers-5KOPZ7J2.js} +4 -4
  48. package/dist/{doctor-EE6GAC54.js → doctor-XPCF5HV5.js} +13 -13
  49. package/dist/{executor-NXNSUEMQ.js → executor-ACDHGTRH.js} +21 -22
  50. package/dist/executor-ACDHGTRH.js.map +1 -0
  51. package/dist/{init-IPL3XV6F.js → init-V3KCC36O.js} +14 -14
  52. package/dist/{installer-WMTB4NCX.js → installer-ZNK4JSQA.js} +4 -4
  53. package/dist/{llm-SWDDQQWY.js → llm-TH4NLIRM.js} +4 -4
  54. package/dist/{loader-V774GZU4.js → loader-H7OFASVC.js} +15 -3
  55. package/dist/{loader-AAZ6VUIA.js → loader-TSB5M7FD.js} +3 -3
  56. package/dist/{logs-KNKPQE5A.js → logs-7YVGGBIS.js} +2 -2
  57. package/dist/{main-RPJSS7PT.js → main-5S4MDCIO.js} +635 -156
  58. package/dist/main-5S4MDCIO.js.map +1 -0
  59. package/dist/{open-OYBKVBYX.js → open-AB5ULZIB.js} +8 -8
  60. package/dist/{post-compact-E2OVMNGQ.js → post-compact-P2B7C7FE.js} +9 -8
  61. package/dist/{post-compact-E2OVMNGQ.js.map → post-compact-P2B7C7FE.js.map} +1 -1
  62. package/dist/{post-tool-use-FGQE26GJ.js → post-tool-use-LXL6NXDS.js} +8 -7
  63. package/dist/{post-tool-use-FGQE26GJ.js.map → post-tool-use-LXL6NXDS.js.map} +1 -1
  64. package/dist/{post-tool-use-failure-3CITJYQK.js → post-tool-use-failure-WAYVVKGR.js} +9 -8
  65. package/dist/{post-tool-use-failure-3CITJYQK.js.map → post-tool-use-failure-WAYVVKGR.js.map} +1 -1
  66. package/dist/{pre-compact-GYMHCXII.js → pre-compact-BCXUCF4V.js} +9 -8
  67. package/dist/{pre-compact-GYMHCXII.js.map → pre-compact-BCXUCF4V.js.map} +1 -1
  68. package/dist/{provider-check-WCM3SDTM.js → provider-check-43LAMSMH.js} +4 -4
  69. package/dist/{registry-OCM4WAPJ.js → registry-MGJSJBAS.js} +4 -4
  70. package/dist/{remove-72ER3TG5.js → remove-KAPX5NT2.js} +10 -10
  71. package/dist/{restart-EQHEJCGT.js → restart-HQO36FTG.js} +9 -9
  72. package/dist/{search-JOBYIW43.js → search-YOMOKAAI.js} +9 -9
  73. package/dist/{server-PZCWYWZL.js → server-2N23P6F2.js} +40 -27
  74. package/dist/{server-PZCWYWZL.js.map → server-2N23P6F2.js.map} +1 -1
  75. package/dist/{session-APO4A2C7.js → session-WW2JLHPX.js} +9 -10
  76. package/dist/{session-APO4A2C7.js.map → session-WW2JLHPX.js.map} +1 -1
  77. package/dist/{session-end-4V4VHAOQ.js → session-end-4WRTIBVQ.js} +8 -7
  78. package/dist/{session-end-4V4VHAOQ.js.map → session-end-4WRTIBVQ.js.map} +1 -1
  79. package/dist/{session-start-K6ESRZU7.js → session-start-HRWTZXQR.js} +15 -15
  80. package/dist/session-start-HRWTZXQR.js.map +1 -0
  81. package/dist/{setup-llm-QUWOSB7A.js → setup-llm-HFWSBUAF.js} +10 -9
  82. package/dist/{setup-llm-QUWOSB7A.js.map → setup-llm-HFWSBUAF.js.map} +1 -1
  83. package/dist/src/cli.js +1 -1
  84. package/dist/src/daemon/main.js +1 -1
  85. package/dist/src/hooks/post-tool-use.js +1 -1
  86. package/dist/src/hooks/session-end.js +1 -1
  87. package/dist/src/hooks/session-start.js +1 -1
  88. package/dist/src/hooks/stop.js +1 -1
  89. package/dist/src/hooks/user-prompt-submit.js +1 -1
  90. package/dist/src/mcp/server.js +1 -1
  91. package/dist/src/symbionts/manifests/codex.yaml +28 -0
  92. package/dist/{stats-TYOZAOP2.js → stats-7A4CJ4MS.js} +9 -9
  93. package/dist/{stop-2COOWEYG.js → stop-R2GDHMRA.js} +8 -7
  94. package/dist/{stop-2COOWEYG.js.map → stop-R2GDHMRA.js.map} +1 -1
  95. package/dist/{stop-failure-UQ33GZLE.js → stop-failure-773KR4VZ.js} +9 -8
  96. package/dist/{stop-failure-UQ33GZLE.js.map → stop-failure-773KR4VZ.js.map} +1 -1
  97. package/dist/{subagent-start-YENEY6VF.js → subagent-start-IDECNBHW.js} +9 -8
  98. package/dist/{subagent-start-YENEY6VF.js.map → subagent-start-IDECNBHW.js.map} +1 -1
  99. package/dist/{subagent-stop-W2757YDB.js → subagent-stop-3JH7DR2S.js} +9 -8
  100. package/dist/{subagent-stop-W2757YDB.js.map → subagent-stop-3JH7DR2S.js.map} +1 -1
  101. package/dist/{task-completed-KU6GWMWV.js → task-completed-AYVHPHDR.js} +9 -8
  102. package/dist/{task-completed-KU6GWMWV.js.map → task-completed-AYVHPHDR.js.map} +1 -1
  103. package/dist/{team-SNLC6FZM.js → team-3JKF7VAD.js} +5 -5
  104. package/dist/ui/assets/index-C2JuNtRB.css +1 -0
  105. package/dist/ui/assets/index-JLVaQKV2.js +832 -0
  106. package/dist/ui/favicon-dusk.svg +11 -0
  107. package/dist/ui/favicon-moss.svg +11 -0
  108. package/dist/ui/favicon-plum.svg +11 -0
  109. package/dist/ui/favicon-sage.svg +11 -0
  110. package/dist/ui/favicon-slate.svg +11 -0
  111. package/dist/ui/favicon-terracotta.svg +11 -0
  112. package/dist/ui/index.html +3 -3
  113. package/dist/{update-5VYNQZJ4.js → update-YWYW55JM.js} +10 -10
  114. package/dist/{user-prompt-submit-KATLHAKA.js → user-prompt-submit-YELSR6XI.js} +9 -8
  115. package/dist/{user-prompt-submit-KATLHAKA.js.map → user-prompt-submit-YELSR6XI.js.map} +1 -1
  116. package/dist/{verify-BGJVB3K2.js → verify-JS44DVKJ.js} +5 -5
  117. package/dist/{version-MKNN5GYM.js → version-K5NETYIL.js} +2 -2
  118. package/package.json +1 -1
  119. package/skills/myco/SKILL.md +78 -43
  120. package/skills/myco/references/vault-status.md +1 -1
  121. package/dist/chunk-44PZCAYS.js.map +0 -1
  122. package/dist/chunk-5ZT2Q6P5.js +0 -25
  123. package/dist/chunk-5ZT2Q6P5.js.map +0 -1
  124. package/dist/chunk-AULBWINA.js +0 -227
  125. package/dist/chunk-AULBWINA.js.map +0 -1
  126. package/dist/chunk-DURKJTVO.js.map +0 -1
  127. package/dist/chunk-GFR542SM.js.map +0 -1
  128. package/dist/chunk-NCBLB2C6.js.map +0 -1
  129. package/dist/chunk-NKQZ73LL.js.map +0 -1
  130. package/dist/chunk-P5VNHGVZ.js.map +0 -1
  131. package/dist/chunk-Q6OEZM3S.js.map +0 -1
  132. package/dist/chunk-TMNFCUAD.js.map +0 -1
  133. package/dist/chunk-UVKQ62II.js.map +0 -1
  134. package/dist/chunk-VQF5E4ZX.js +0 -91
  135. package/dist/chunk-VQF5E4ZX.js.map +0 -1
  136. package/dist/chunk-WKNAKQKA.js.map +0 -1
  137. package/dist/config-IO5WALOD.js.map +0 -1
  138. package/dist/executor-NXNSUEMQ.js.map +0 -1
  139. package/dist/main-RPJSS7PT.js.map +0 -1
  140. package/dist/resolution-events-PYLSI6QT.js +0 -15
  141. package/dist/session-start-K6ESRZU7.js.map +0 -1
  142. package/dist/ui/assets/index-816yFmz_.js +0 -842
  143. package/dist/ui/assets/index-Dj6vQpFd.css +0 -1
  144. package/dist/version-MKNN5GYM.js.map +0 -1
  145. /package/dist/{agent-run-WK5NKBYA.js.map → agent-run-4HUXVRHW.js.map} +0 -0
  146. /package/dist/{agent-tasks-2E73GG3A.js.map → agent-tasks-JF45ELB6.js.map} +0 -0
  147. /package/dist/{chunk-Q4QD6LJT.js.map → chunk-4M7EWPIA.js.map} +0 -0
  148. /package/dist/{chunk-FGKCE5AE.js.map → chunk-4YFKBL3F.js.map} +0 -0
  149. /package/dist/{chunk-KYH4V4ML.js.map → chunk-57O67XVF.js.map} +0 -0
  150. /package/dist/{chunk-7ONVLO43.js.map → chunk-5XIVBO25.js.map} +0 -0
  151. /package/dist/{chunk-ST2D3SGM.js.map → chunk-ACQ2AIEM.js.map} +0 -0
  152. /package/dist/{chunk-6ZDJXSEO.js.map → chunk-BPRIYNLE.js.map} +0 -0
  153. /package/dist/{chunk-PMT2LSTQ.js.map → chunk-FMRZ26U5.js.map} +0 -0
  154. /package/dist/{chunk-3J6TUJSV.js.map → chunk-KHT24OWC.js.map} +0 -0
  155. /package/dist/{chunk-6DDRJQ4X.js.map → chunk-MYOZLMB2.js.map} +0 -0
  156. /package/dist/{chunk-VLGBWOBY.js.map → chunk-P3DN5EWW.js.map} +0 -0
  157. /package/dist/{chunk-W3JUH5S3.js.map → chunk-POR75WM6.js.map} +0 -0
  158. /package/dist/{chunk-FKBPXCH3.js.map → chunk-QS5TWZBL.js.map} +0 -0
  159. /package/dist/{chunk-QH5HS54N.js.map → chunk-UOQQENDW.js.map} +0 -0
  160. /package/dist/{cli-LCTXK7N6.js.map → cli-AHTINAHY.js.map} +0 -0
  161. /package/dist/{client-S47ENM76.js.map → client-LHENCAV3.js.map} +0 -0
  162. /package/dist/{detect-BEOIHGBC.js.map → detect-PXNM6TA7.js.map} +0 -0
  163. /package/dist/{detect-providers-2EY55EHK.js.map → detect-providers-5KOPZ7J2.js.map} +0 -0
  164. /package/dist/{doctor-EE6GAC54.js.map → doctor-XPCF5HV5.js.map} +0 -0
  165. /package/dist/{init-IPL3XV6F.js.map → init-V3KCC36O.js.map} +0 -0
  166. /package/dist/{installer-WMTB4NCX.js.map → installer-ZNK4JSQA.js.map} +0 -0
  167. /package/dist/{llm-SWDDQQWY.js.map → llm-TH4NLIRM.js.map} +0 -0
  168. /package/dist/{loader-AAZ6VUIA.js.map → loader-H7OFASVC.js.map} +0 -0
  169. /package/dist/{loader-V774GZU4.js.map → loader-TSB5M7FD.js.map} +0 -0
  170. /package/dist/{logs-KNKPQE5A.js.map → logs-7YVGGBIS.js.map} +0 -0
  171. /package/dist/{open-OYBKVBYX.js.map → open-AB5ULZIB.js.map} +0 -0
  172. /package/dist/{provider-check-WCM3SDTM.js.map → provider-check-43LAMSMH.js.map} +0 -0
  173. /package/dist/{registry-OCM4WAPJ.js.map → registry-MGJSJBAS.js.map} +0 -0
  174. /package/dist/{remove-72ER3TG5.js.map → remove-KAPX5NT2.js.map} +0 -0
  175. /package/dist/{restart-EQHEJCGT.js.map → restart-HQO36FTG.js.map} +0 -0
  176. /package/dist/{search-JOBYIW43.js.map → search-YOMOKAAI.js.map} +0 -0
  177. /package/dist/{stats-TYOZAOP2.js.map → stats-7A4CJ4MS.js.map} +0 -0
  178. /package/dist/{resolution-events-PYLSI6QT.js.map → team-3JKF7VAD.js.map} +0 -0
  179. /package/dist/{update-5VYNQZJ4.js.map → update-YWYW55JM.js.map} +0 -0
  180. /package/dist/{verify-BGJVB3K2.js.map → verify-JS44DVKJ.js.map} +0 -0
  181. /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-DURKJTVO.js";
5
+ } from "./chunk-3WOS4TAR.js";
6
6
  import {
7
7
  withTaskConfig
8
- } from "./chunk-GFR542SM.js";
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-VLGBWOBY.js";
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-FKBPXCH3.js";
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-P5VNHGVZ.js";
75
+ } from "./chunk-L6XFAJIF.js";
75
76
  import {
76
77
  fullTextSearch,
77
78
  hydrateSearchResults
78
- } from "./chunk-7ONVLO43.js";
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-KYH4V4ML.js";
86
+ } from "./chunk-57O67XVF.js";
86
87
  import {
87
88
  AgentTaskSchema,
88
89
  registerAgent,
89
90
  resolveDefinitionsDir,
90
91
  taskFromParsed
91
- } from "./chunk-Q4QD6LJT.js";
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-3J6TUJSV.js";
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-NCBLB2C6.js";
113
+ import "./chunk-YSNIAJ5D.js";
113
114
  import "./chunk-SAKJMNSR.js";
114
115
  import {
115
116
  SymbiontInstaller
116
- } from "./chunk-TMNFCUAD.js";
117
+ } from "./chunk-4LCIKVDM.js";
117
118
  import {
118
119
  checkLocalProvider
119
- } from "./chunk-6ZDJXSEO.js";
120
+ } from "./chunk-BPRIYNLE.js";
120
121
  import {
121
122
  LmStudioBackend,
122
123
  OllamaBackend
123
- } from "./chunk-PMT2LSTQ.js";
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-FGKCE5AE.js";
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
- } from "./chunk-AULBWINA.js";
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-6DDRJQ4X.js";
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-NKQZ73LL.js";
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-QH5HS54N.js";
192
+ } from "./chunk-UOQQENDW.js";
183
193
  import {
184
194
  getPluginVersion
185
- } from "./chunk-ST2D3SGM.js";
195
+ } from "./chunk-ACQ2AIEM.js";
186
196
  import {
187
197
  loadManifests,
188
198
  resolvePackageRoot
189
- } from "./chunk-UVKQ62II.js";
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-I54KLC6H.js";
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/api/config.ts
1381
- function mergeConfigSections(current, incoming) {
1382
- return {
1383
- ...current,
1384
- daemon: { ...current.daemon, ...incoming.daemon },
1385
- embedding: { ...current.embedding, ...incoming.embedding },
1386
- capture: { ...current.capture, ...incoming.capture },
1387
- agent: { ...current.agent, ...incoming.agent },
1388
- context: { ...current.context, ...incoming.context },
1389
- backup: { ...current.backup, ...incoming.backup },
1390
- team: { ...current.team, ...incoming.team },
1391
- notifications: { ...current.notifications, ...incoming.notifications }
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 handlePutConfig(vaultDir, body) {
1399
- const result = MycoConfigSchema.safeParse(body);
1400
- if (!result.success) {
1401
- return {
1402
- status: 400,
1403
- body: { error: "validation_failed", issues: result.error.issues }
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 updated = updateConfig(vaultDir, (current) => mergeConfigSections(current, result.data));
1407
- return { body: updated };
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 createPlanDirHandlers(deps) {
1410
- const { vaultDir, symbiontPlanDirsByAgent, symbiontPlanDirs } = deps;
1411
- async function handleGetPlanDirs(_req) {
1412
- const config = loadConfig(vaultDir);
1413
- return {
1414
- body: {
1415
- symbiont: symbiontPlanDirsByAgent,
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
- async function handleUpdatePlanDirs(req) {
1422
- const body = req.body;
1423
- if (!Array.isArray(body.plan_dirs)) {
1424
- return { status: 400, body: { error: "plan_dirs must be an array" } };
1425
- }
1426
- if (body.ignore_plan_dirs_in_git !== void 0 && typeof body.ignore_plan_dirs_in_git !== "boolean") {
1427
- return { status: 400, body: { error: "ignore_plan_dirs_in_git must be a boolean" } };
1428
- }
1429
- const updated = updateConfig(vaultDir, (cfg) => ({
1430
- ...cfg,
1431
- capture: {
1432
- ...cfg.capture,
1433
- plan_dirs: body.plan_dirs,
1434
- ignore_plan_dirs_in_git: body.ignore_plan_dirs_in_git ?? cfg.capture.ignore_plan_dirs_in_git
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
- deps.setPlanWatchConfig({
1438
- ...deps.planWatchConfig,
1439
- watchDirs: [.../* @__PURE__ */ new Set([...symbiontPlanDirs, ...body.plan_dirs])]
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
- deps.reconcileProjectFiles?.();
1442
- return {
1443
- body: {
1444
- custom: updated.capture.plan_dirs,
1445
- ignore_plan_dirs_in_git: updated.capture.ignore_plan_dirs_in_git
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, handleUpdatePlanDirs };
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-SNLC6FZM.js");
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-WMTB4NCX.js");
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-NXNSUEMQ.js");
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-OCM4WAPJ.js");
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-NXNSUEMQ.js");
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
- registerAgent({
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
- registerAgent({
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((row) => {
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) : 20;
6593
- const status = req.query.status;
6594
- const rows = listSessions({ limit, status });
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, 300),
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-NXNSUEMQ.js");
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 = config.daemon.log_retention_days;
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 { session_id: sessionId, user, transcript_path: hookTranscriptPath, last_assistant_message: lastAssistantMessage } = StopBody.parse(req.body);
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
- let planWatchConfig = {
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-AAZ6VUIA.js");
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("PUT", "/api/config", async (req) => {
8240
- const result = await handlePutConfig(vaultDir, req.body);
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 planDirHandlers = createPlanDirHandlers({
8253
- vaultDir,
8254
- symbiontPlanDirsByAgent,
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
- setPlanWatchConfig: (cfg) => {
8258
- planWatchConfig = cfg;
8259
- },
8260
- reconcileProjectFiles: () => {
8261
- reconcileConfiguredSymbionts(path22.dirname(vaultDir), vaultDir);
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("GET", "/api/config/plan-dirs", planDirHandlers.handleGetPlanDirs);
8265
- server.registerRoute("POST", "/api/config/plan-dirs", async (req) => {
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
- configHash = computeConfigHash(vaultDir);
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-RPJSS7PT.js.map
8936
+ //# sourceMappingURL=main-5S4MDCIO.js.map