@goondocks/myco 0.21.0 → 0.21.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/bin/myco-run +68 -7
  2. package/dist/{agent-eval-RJSQI5S2.js → agent-eval-2MQKTXX3.js} +7 -6
  3. package/dist/{agent-eval-RJSQI5S2.js.map → agent-eval-2MQKTXX3.js.map} +1 -1
  4. package/dist/{agent-run-2JSYFOKU.js → agent-run-XJBTSVJR.js} +5 -5
  5. package/dist/{agent-tasks-APFJIM2T.js → agent-tasks-7MWBZOC7.js} +5 -5
  6. package/dist/{chunk-75Z7UKDY.js → chunk-4D22KTXY.js} +2 -2
  7. package/dist/{chunk-P66DLD6G.js → chunk-6FBLL7MD.js} +8 -2
  8. package/dist/chunk-6FBLL7MD.js.map +1 -0
  9. package/dist/{chunk-JZS6GZ6T.js → chunk-AUIXX33A.js} +10 -3
  10. package/dist/chunk-AUIXX33A.js.map +1 -0
  11. package/dist/{chunk-F3OEQYLS.js → chunk-DBBO6FHE.js} +33 -30
  12. package/dist/{chunk-F3OEQYLS.js.map → chunk-DBBO6FHE.js.map} +1 -1
  13. package/dist/{chunk-CESKJD44.js → chunk-DMPCC7V6.js} +19 -11
  14. package/dist/chunk-DMPCC7V6.js.map +1 -0
  15. package/dist/{chunk-RL5R4CQU.js → chunk-DTWUHHFI.js} +39 -2
  16. package/dist/{chunk-RL5R4CQU.js.map → chunk-DTWUHHFI.js.map} +1 -1
  17. package/dist/{chunk-XL75KZGI.js → chunk-EKZG2MCD.js} +7 -3
  18. package/dist/chunk-EKZG2MCD.js.map +1 -0
  19. package/dist/{chunk-NGH7U6A3.js → chunk-HCT7RMM2.js} +487 -98
  20. package/dist/chunk-HCT7RMM2.js.map +1 -0
  21. package/dist/{chunk-G6QIBNZM.js → chunk-IMW5TJ3O.js} +7 -6
  22. package/dist/chunk-IMW5TJ3O.js.map +1 -0
  23. package/dist/chunk-LQIPXVDH.js +17 -0
  24. package/dist/chunk-LQIPXVDH.js.map +1 -0
  25. package/dist/{chunk-5ZG4RMUH.js → chunk-N2DGFACQ.js} +2 -2
  26. package/dist/{chunk-VHNRMM4O.js → chunk-OTQH5KZW.js} +87 -37
  27. package/dist/chunk-OTQH5KZW.js.map +1 -0
  28. package/dist/{chunk-6LB7XELY.js → chunk-QATYARI5.js} +15 -13
  29. package/dist/chunk-QATYARI5.js.map +1 -0
  30. package/dist/{chunk-LVIY7P35.js → chunk-QLLBJEM7.js} +5 -1
  31. package/dist/chunk-QLLBJEM7.js.map +1 -0
  32. package/dist/{chunk-DJ3IHNYO.js → chunk-TFRUDNLI.js} +2 -2
  33. package/dist/{chunk-R2JIJBCL.js → chunk-TMAXWERS.js} +87 -4
  34. package/dist/chunk-TMAXWERS.js.map +1 -0
  35. package/dist/chunk-TSM6VESW.js +25 -0
  36. package/dist/chunk-TSM6VESW.js.map +1 -0
  37. package/dist/{chunk-ILJPRYES.js → chunk-USVFEWYL.js} +2 -2
  38. package/dist/{chunk-JR54LTPP.js → chunk-W5L5IHP5.js} +3 -3
  39. package/dist/{chunk-BUTL6IFS.js → chunk-Z55WGA2J.js} +2 -2
  40. package/dist/{chunk-NGROSFOH.js → chunk-Z66IT5KL.js} +14 -9
  41. package/dist/chunk-Z66IT5KL.js.map +1 -0
  42. package/dist/{cli-LNYSTDQM.js → cli-DDHTHU2J.js} +37 -37
  43. package/dist/{client-NWE4TCNO.js → client-PQU53UQU.js} +5 -3
  44. package/dist/{detect-PXNM6TA7.js → detect-7NUD5B5R.js} +2 -2
  45. package/dist/{doctor-TI7EZ3RW.js → doctor-QK6KFY6H.js} +6 -6
  46. package/dist/{executor-F2YU7HXJ.js → executor-FJCMNSXM.js} +11 -10
  47. package/dist/{init-KG3TYVGE.js → init-GQPD6HHX.js} +9 -9
  48. package/dist/{installer-UMH7OJ5A.js → installer-N4UTEACX.js} +2 -2
  49. package/dist/{loader-NAVVZK63.js → loader-UDNUMEDA.js} +3 -2
  50. package/dist/{main-5PRQNEEE.js → main-4HKTZFIM.js} +469 -187
  51. package/dist/main-4HKTZFIM.js.map +1 -0
  52. package/dist/{open-5A27BCSB.js → open-3P3DDAOA.js} +5 -5
  53. package/dist/{post-compact-USAODKPQ.js → post-compact-QA5LME2J.js} +7 -7
  54. package/dist/{post-tool-use-GMMSYBII.js → post-tool-use-QRZMPNYL.js} +6 -6
  55. package/dist/{post-tool-use-failure-NZVSL2PO.js → post-tool-use-failure-XNHIKBZG.js} +7 -7
  56. package/dist/{pre-compact-LZ57DLUS.js → pre-compact-HDV6X5QM.js} +7 -7
  57. package/dist/{registry-M2Z5QBWH.js → registry-F3THYC5M.js} +4 -3
  58. package/dist/{remove-T3KE6C5N.js → remove-USQDLGTJ.js} +7 -7
  59. package/dist/{restart-YWDEVZUJ.js → restart-FQLZE2TW.js} +6 -6
  60. package/dist/{search-GKFDGELR.js → search-5COKV6TD.js} +6 -6
  61. package/dist/{server-AHUR6CWF.js → server-KRMBRW4T.js} +23 -7
  62. package/dist/{server-AHUR6CWF.js.map → server-KRMBRW4T.js.map} +1 -1
  63. package/dist/{session-2ZEPLWW6.js → session-NJCUW3OX.js} +5 -5
  64. package/dist/{session-end-LWJYQAXX.js → session-end-XD27GRYF.js} +6 -6
  65. package/dist/{session-start-WTA6GCOQ.js → session-start-RDTXUSYL.js} +11 -11
  66. package/dist/{setup-llm-E7UU5IO7.js → setup-llm-FYPPJI6W.js} +5 -5
  67. package/dist/src/agent/definitions/tasks/cortex-instructions.yaml +63 -41
  68. package/dist/src/agent/definitions/tasks/skill-evolve.yaml +178 -22
  69. package/dist/src/agent/definitions/tasks/skill-generate.yaml +20 -6
  70. package/dist/src/agent/definitions/tasks/vault-evolve.yaml +65 -55
  71. package/dist/src/cli.js +1 -1
  72. package/dist/src/daemon/main.js +1 -1
  73. package/dist/src/hooks/post-tool-use.js +1 -1
  74. package/dist/src/hooks/session-end.js +1 -1
  75. package/dist/src/hooks/session-start.js +1 -1
  76. package/dist/src/hooks/stop.js +1 -1
  77. package/dist/src/hooks/user-prompt-submit.js +1 -1
  78. package/dist/src/mcp/server.js +1 -1
  79. package/dist/src/symbionts/manifests/opencode.yaml +7 -0
  80. package/dist/src/symbionts/templates/agents-starter.md +1 -1
  81. package/dist/src/symbionts/templates/opencode/plugin.ts +41 -1
  82. package/dist/src/symbionts/templates/pi/plugin.ts +12 -1
  83. package/dist/{stats-DFG6S23S.js → stats-JCLZLA5G.js} +6 -6
  84. package/dist/{stop-WRBTXEVT.js → stop-B7XCXEM5.js} +6 -6
  85. package/dist/{stop-failure-32MGIG2Q.js → stop-failure-R6QZCUOZ.js} +7 -7
  86. package/dist/{subagent-start-VFGHQFVL.js → subagent-start-N7A622F3.js} +7 -7
  87. package/dist/{subagent-stop-663FXG3P.js → subagent-stop-SVOG5MZJ.js} +7 -7
  88. package/dist/{task-completed-ZCQYEFMZ.js → task-completed-3DL5LJXF.js} +7 -7
  89. package/dist/{team-JTI5CDUO.js → team-VJ3M263F.js} +3 -3
  90. package/dist/ui/assets/{index-DGf1h-Ha.js → index-O1kNWlWM.js} +119 -119
  91. package/dist/ui/assets/index-z2Jm8i4A.css +1 -0
  92. package/dist/ui/index.html +2 -2
  93. package/dist/{update-3NBQTG32.js → update-TVXAUJMZ.js} +45 -11
  94. package/dist/update-TVXAUJMZ.js.map +1 -0
  95. package/dist/{user-prompt-submit-ME2TBKOS.js → user-prompt-submit-KYO2VGLB.js} +10 -9
  96. package/dist/user-prompt-submit-KYO2VGLB.js.map +1 -0
  97. package/dist/{version-GQAFBBPX.js → version-LDFEALUJ.js} +2 -2
  98. package/package.json +1 -1
  99. package/skills/myco-rules/SKILL.md +94 -0
  100. package/skills/{rules → myco-rules}/references/rules-bad-example.md +1 -1
  101. package/skills/{rules → myco-rules}/references/rules-good-example.md +1 -1
  102. package/dist/chunk-6LB7XELY.js.map +0 -1
  103. package/dist/chunk-CESKJD44.js.map +0 -1
  104. package/dist/chunk-CUDIZJY7.js +0 -36
  105. package/dist/chunk-CUDIZJY7.js.map +0 -1
  106. package/dist/chunk-G6QIBNZM.js.map +0 -1
  107. package/dist/chunk-JZS6GZ6T.js.map +0 -1
  108. package/dist/chunk-LVIY7P35.js.map +0 -1
  109. package/dist/chunk-NGH7U6A3.js.map +0 -1
  110. package/dist/chunk-NGROSFOH.js.map +0 -1
  111. package/dist/chunk-P66DLD6G.js.map +0 -1
  112. package/dist/chunk-R2JIJBCL.js.map +0 -1
  113. package/dist/chunk-VHNRMM4O.js.map +0 -1
  114. package/dist/chunk-XL75KZGI.js.map +0 -1
  115. package/dist/main-5PRQNEEE.js.map +0 -1
  116. package/dist/ui/assets/index-_OP4ifzH.css +0 -1
  117. package/dist/update-3NBQTG32.js.map +0 -1
  118. package/dist/user-prompt-submit-ME2TBKOS.js.map +0 -1
  119. package/skills/myco-curate/SKILL.md +0 -86
  120. package/skills/rules/SKILL.md +0 -214
  121. /package/dist/{agent-run-2JSYFOKU.js.map → agent-run-XJBTSVJR.js.map} +0 -0
  122. /package/dist/{agent-tasks-APFJIM2T.js.map → agent-tasks-7MWBZOC7.js.map} +0 -0
  123. /package/dist/{chunk-75Z7UKDY.js.map → chunk-4D22KTXY.js.map} +0 -0
  124. /package/dist/{chunk-5ZG4RMUH.js.map → chunk-N2DGFACQ.js.map} +0 -0
  125. /package/dist/{chunk-DJ3IHNYO.js.map → chunk-TFRUDNLI.js.map} +0 -0
  126. /package/dist/{chunk-ILJPRYES.js.map → chunk-USVFEWYL.js.map} +0 -0
  127. /package/dist/{chunk-JR54LTPP.js.map → chunk-W5L5IHP5.js.map} +0 -0
  128. /package/dist/{chunk-BUTL6IFS.js.map → chunk-Z55WGA2J.js.map} +0 -0
  129. /package/dist/{cli-LNYSTDQM.js.map → cli-DDHTHU2J.js.map} +0 -0
  130. /package/dist/{client-NWE4TCNO.js.map → client-PQU53UQU.js.map} +0 -0
  131. /package/dist/{detect-PXNM6TA7.js.map → detect-7NUD5B5R.js.map} +0 -0
  132. /package/dist/{doctor-TI7EZ3RW.js.map → doctor-QK6KFY6H.js.map} +0 -0
  133. /package/dist/{executor-F2YU7HXJ.js.map → executor-FJCMNSXM.js.map} +0 -0
  134. /package/dist/{init-KG3TYVGE.js.map → init-GQPD6HHX.js.map} +0 -0
  135. /package/dist/{installer-UMH7OJ5A.js.map → installer-N4UTEACX.js.map} +0 -0
  136. /package/dist/{loader-NAVVZK63.js.map → loader-UDNUMEDA.js.map} +0 -0
  137. /package/dist/{open-5A27BCSB.js.map → open-3P3DDAOA.js.map} +0 -0
  138. /package/dist/{post-compact-USAODKPQ.js.map → post-compact-QA5LME2J.js.map} +0 -0
  139. /package/dist/{post-tool-use-GMMSYBII.js.map → post-tool-use-QRZMPNYL.js.map} +0 -0
  140. /package/dist/{post-tool-use-failure-NZVSL2PO.js.map → post-tool-use-failure-XNHIKBZG.js.map} +0 -0
  141. /package/dist/{pre-compact-LZ57DLUS.js.map → pre-compact-HDV6X5QM.js.map} +0 -0
  142. /package/dist/{registry-M2Z5QBWH.js.map → registry-F3THYC5M.js.map} +0 -0
  143. /package/dist/{remove-T3KE6C5N.js.map → remove-USQDLGTJ.js.map} +0 -0
  144. /package/dist/{restart-YWDEVZUJ.js.map → restart-FQLZE2TW.js.map} +0 -0
  145. /package/dist/{search-GKFDGELR.js.map → search-5COKV6TD.js.map} +0 -0
  146. /package/dist/{session-2ZEPLWW6.js.map → session-NJCUW3OX.js.map} +0 -0
  147. /package/dist/{session-end-LWJYQAXX.js.map → session-end-XD27GRYF.js.map} +0 -0
  148. /package/dist/{session-start-WTA6GCOQ.js.map → session-start-RDTXUSYL.js.map} +0 -0
  149. /package/dist/{setup-llm-E7UU5IO7.js.map → setup-llm-FYPPJI6W.js.map} +0 -0
  150. /package/dist/{stats-DFG6S23S.js.map → stats-JCLZLA5G.js.map} +0 -0
  151. /package/dist/{stop-WRBTXEVT.js.map → stop-B7XCXEM5.js.map} +0 -0
  152. /package/dist/{stop-failure-32MGIG2Q.js.map → stop-failure-R6QZCUOZ.js.map} +0 -0
  153. /package/dist/{subagent-start-VFGHQFVL.js.map → subagent-start-N7A622F3.js.map} +0 -0
  154. /package/dist/{subagent-stop-663FXG3P.js.map → subagent-stop-SVOG5MZJ.js.map} +0 -0
  155. /package/dist/{task-completed-ZCQYEFMZ.js.map → task-completed-3DL5LJXF.js.map} +0 -0
  156. /package/dist/{team-JTI5CDUO.js.map → team-VJ3M263F.js.map} +0 -0
  157. /package/dist/{version-GQAFBBPX.js.map → version-LDFEALUJ.js.map} +0 -0
@@ -262,67 +262,77 @@ phases:
262
262
  reasoningLevel: default
263
263
  dependsOn: [consolidate]
264
264
  prompt: |
265
- Assess current digest state and gather material for tier updates.
266
- The 3 digest tier phases run in parallel after you — your summary
267
- is their primary input. Be thorough.
268
-
269
- ## Step 1: Check current state (budget: 2 turns)
270
-
271
- Call `vault_read_digest` (no tier param) to see current digest state.
272
- Note each tier's `generated_at` timestamp this tells you how fresh
273
- each tier is. Review the prior phase results (in your context):
274
- - How many spores were created/superseded?
275
- - How many entities/edges were added?
276
- - Did consolidate or graph act on externally-created spores or entities?
277
-
278
- If changes are minor (< 3 new spores, 0 entity changes), call
279
- `vault_report` with action "skip" and reason explaining why the
280
- current digest is still sufficient. STOP.
281
-
282
- ## Step 2: Gather new material (budget: 5 turns)
283
-
284
- Search for material relevant to what changed:
285
- 1. Call `vault_search_semantic` with themes from newly created/superseded
286
- spores and new entity names
287
- 2. Call `vault_spores` to see recently created observations
288
- 3. Call `vault_sessions` for recent session context
289
-
290
- ## Step 3: Produce detailed findings
291
-
292
- Your final response is critical the per-tier phases see it as their
293
- primary context (they cannot call vault_spores or vault_sessions).
294
- Structure your summary as:
295
-
296
- **New material to integrate:**
297
- - List each new insight, decision, pattern, gotcha with enough detail
298
- that a tier writer can incorporate it without re-searching
299
- - Include specific spore content, not just "3 new spores were created"
300
-
301
- **Themes and connections:**
302
- - What overarching themes connect the new material?
303
- - What existing digest sections are affected?
304
-
305
- **Per-tier freshness and guidance:**
306
- For each tier, state whether it should UPDATE or SKIP based on both
307
- the volume of new material AND the tier's `generated_at` freshness:
308
- - A tier written < 30 minutes ago with only minor changes → SKIP
309
- - A tier written hours ago or with significant changes → UPDATE
310
- - Larger tiers (10000) tolerate more frequent updates since
311
- they have room for incremental additions
312
- - Smaller tiers (1500) should only update for material that
313
- genuinely changes the executive picture
314
-
315
- Per-tier directives:
316
- - 10000: UPDATE/SKIP + what to add (any new content)
317
- - 5000: UPDATE/SKIP + what to add (trade-offs and patterns)
318
- - 1500: UPDATE/SKIP + what to add (only critical changes)
265
+ Gather material for AT MOST ONE digest tier update per run. The
266
+ rotation decision is made by the `vault_read_digest` tool, not
267
+ by you the tool returns which tier needs attention (or tells
268
+ you to skip). Over 3 runs every tier gets one deep pass.
269
+
270
+ Total budget: {{max_turns}} turns.
271
+
272
+ ## Step 1: Get the rotation decision (1 turn)
273
+
274
+ Call `vault_read_digest` with:
275
+ pick: "rotate_oldest"
276
+ min_staleness_seconds: 1800
277
+
278
+ The tool returns one of two shapes:
279
+
280
+ **Skip shape** `{mode:"rotate_oldest", skip:true, reason, all_tiers}`.
281
+ Every tier was generated within the last 30 minutes. Call
282
+ `vault_report` with action "skip" passing the reason through.
283
+ STOP — do not run steps 2-3.
284
+
285
+ **Rotate shape** `{mode:"rotate_oldest", selected_tier,
286
+ selected_generated_at, selected_content, rotation_reason, all_tiers}`.
287
+ Proceed to step 2, scoped to `selected_tier`.
288
+
289
+ ## Step 2: Gather material for `selected_tier` (budget: half
290
+ of remaining)
291
+
292
+ Scope the search to what belongs at the selected tier:
293
+ - **1500 (executive briefing):** only critical decisions,
294
+ reversals, state-of-system changes.
295
+ - **5000 (deep onboarding):** trade-offs, patterns, active
296
+ decisions, unresolved gotchas.
297
+ - **10000 (full archive):** any new content worth preserving.
298
+
299
+ Use `vault_search_semantic` for themes from new/superseded spores,
300
+ `vault_spores` for specific content, `vault_sessions` for recent
301
+ session context. Make each call count — do not repeatedly search
302
+ for variations of the same theme. Accept "good enough" findings
303
+ and move on.
304
+
305
+ ## Step 3: Produce findings
306
+
307
+ Your final response is the per-tier phases' primary context
308
+ (they cannot call vault_spores or vault_sessions). Structure it:
309
+
310
+ **Chosen tier for this run: <selected_tier>**
311
+ Include the rotation_reason verbatim from the tool so readers
312
+ can audit the decision.
313
+
314
+ **New material to integrate (scoped to the chosen tier):**
315
+ - List each insight with enough detail that the tier writer can
316
+ incorporate it without re-searching
317
+ - Include specific spore content, not just spore counts
318
+
319
+ **Themes and connections** relevant to the chosen tier.
320
+
321
+ **Per-tier directives** — mark exactly the `selected_tier` as
322
+ UPDATE, the other two as SKIP, and include the tool's
323
+ rotation_reason in the UPDATE line:
324
+ - 10000: UPDATE or SKIP + one-line reason
325
+ - 5000: UPDATE or SKIP + one-line reason
326
+ - 1500: UPDATE or SKIP + one-line reason
327
+
328
+ Tools available: {{phase_tools}}.
319
329
  tools:
320
330
  - vault_spores
321
331
  - vault_sessions
322
332
  - vault_search_semantic
323
333
  - vault_read_digest
324
334
  - vault_report
325
- maxTurns: 10
335
+ maxTurns: 12
326
336
  required: true
327
337
 
328
338
  - name: digest-10000
package/dist/src/cli.js CHANGED
@@ -2,5 +2,5 @@
2
2
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
3
3
 
4
4
  // src/entries/cli.ts
5
- await import("../cli-LNYSTDQM.js");
5
+ await import("../cli-DDHTHU2J.js");
6
6
  //# sourceMappingURL=cli.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/daemon.ts
4
- var { main } = await import("../../main-5PRQNEEE.js");
4
+ var { main } = await import("../../main-4HKTZFIM.js");
5
5
  await main();
6
6
  //# sourceMappingURL=main.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/post-tool-use.ts
4
- var { main } = await import("../../post-tool-use-GMMSYBII.js");
4
+ var { main } = await import("../../post-tool-use-QRZMPNYL.js");
5
5
  await main();
6
6
  //# sourceMappingURL=post-tool-use.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/session-end.ts
4
- var { main } = await import("../../session-end-LWJYQAXX.js");
4
+ var { main } = await import("../../session-end-XD27GRYF.js");
5
5
  await main();
6
6
  //# sourceMappingURL=session-end.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/session-start.ts
4
- var { main } = await import("../../session-start-WTA6GCOQ.js");
4
+ var { main } = await import("../../session-start-RDTXUSYL.js");
5
5
  await main();
6
6
  //# sourceMappingURL=session-start.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/stop.ts
4
- var { main } = await import("../../stop-WRBTXEVT.js");
4
+ var { main } = await import("../../stop-B7XCXEM5.js");
5
5
  await main();
6
6
  //# sourceMappingURL=stop.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/user-prompt-submit.ts
4
- var { main } = await import("../../user-prompt-submit-ME2TBKOS.js");
4
+ var { main } = await import("../../user-prompt-submit-KYO2VGLB.js");
5
5
  await main();
6
6
  //# sourceMappingURL=user-prompt-submit.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/mcp-server.ts
4
- var { main } = await import("../../server-AHUR6CWF.js");
4
+ var { main } = await import("../../server-KRMBRW4T.js");
5
5
  await main();
6
6
  //# sourceMappingURL=server.js.map
@@ -21,6 +21,13 @@ registration:
21
21
  # opencode.json hosts MCP + permissions under non-standard keys
22
22
  mcpTarget: opencode.json
23
23
  mcpServersKey: mcp
24
+ # Opencode prepends /opt/homebrew/bin ahead of ~/.local/bin in the env it
25
+ # gives MCP children, so `myco-run` resolves to the prod shim regardless
26
+ # of the user's shell PATH. Bake the runtime.command alias into the MCP
27
+ # command at install time so the spawn skips PATH resolution entirely.
28
+ # Every other symbiont resolves `myco-run` via PATH and then uses the
29
+ # shim's runtime.command walk-up — no install-time substitution needed.
30
+ substituteRuntimeCommand: true
24
31
  settingsTarget: opencode.json
25
32
  skillsTarget: .agents/skills
26
33
  # No instructionsFile — opencode reads AGENTS.md natively
@@ -2,4 +2,4 @@
2
2
 
3
3
  <!-- This starter file was created by Myco. Replace it with your project's rules and conventions. -->
4
4
 
5
- Rules haven't been defined yet. Use the `/rules` skill to generate project rules, or edit this file directly.
5
+ Rules haven't been defined yet. Use the `/myco-rules` skill to add durable project rules, or edit this file directly.
@@ -282,6 +282,16 @@ function bufferEvent(
282
282
  * POST a capture event to the daemon with buffer fallback on failure.
283
283
  * Used for user_prompt and tool_use events — both are replayed from the
284
284
  * buffer by reconcileBufferBatches when the daemon restarts.
285
+ *
286
+ * Two failure modes route to the buffer:
287
+ * 1. Transport failure — HTTP non-200, timeout, network error. `result.ok`
288
+ * is false and we buffer exactly as you'd expect.
289
+ * 2. Server-side drop — HTTP 200 with body `{ ok: true, ignored: reason }`.
290
+ * The daemon chose not to persist the event (capture rules, phantom
291
+ * detection, etc.), but we've seen rule bugs silently discard entire
292
+ * live sessions this way. Treat "ignored" as a drop and buffer it so
293
+ * `reconcileBufferBatches` can recover on the next restart once the
294
+ * underlying cause is fixed.
285
295
  */
286
296
  async function postEventWithBuffer(
287
297
  directory: string,
@@ -289,11 +299,18 @@ async function postEventWithBuffer(
289
299
  event: Record<string, unknown>,
290
300
  ): Promise<void> {
291
301
  const result = await postJson(directory, "/events", event);
292
- if (!result.ok) {
302
+ if (!result.ok || isIgnoredResponse(result.data)) {
293
303
  bufferEvent(directory, sessionId, event);
294
304
  }
295
305
  }
296
306
 
307
+ /** True when the daemon returned 200 but signalled it dropped the event. */
308
+ function isIgnoredResponse(data: unknown): boolean {
309
+ if (!isRecord(data)) return false;
310
+ const ignored = data.ignored;
311
+ return typeof ignored === "string" && ignored.length > 0;
312
+ }
313
+
297
314
  /** Register an opencode session with the daemon. */
298
315
  async function mycoRegisterSession(
299
316
  directory: string,
@@ -523,6 +540,29 @@ export const MycoPlugin = async ({ client, directory, worktree }: { client: any;
523
540
  activeOpencodeSessions.add(sessionId);
524
541
 
525
542
  const parentSessionId = info.parentID || undefined;
543
+
544
+ // Diagnostic: log the full session.created payload when a parent is
545
+ // present so we can tell sub-agent spawns apart from user-initiated
546
+ // forks. Sub-agents pollute the session list as phantom user sessions;
547
+ // filtering them needs a structural signal we don't have yet. Capture
548
+ // live payloads from both paths (skill invocation vs. TUI fork) and
549
+ // compare. Drop this block once the signal is known.
550
+ if (parentSessionId) {
551
+ try {
552
+ await client.app.log({
553
+ service: "myco",
554
+ level: "info",
555
+ message: "session.created with parentID",
556
+ extra: {
557
+ session_id: sessionId,
558
+ parent_session_id: parentSessionId,
559
+ info: JSON.stringify(info),
560
+ },
561
+ });
562
+ } catch {
563
+ // Diagnostic only — never block registration.
564
+ }
565
+ }
526
566
  const contextPromise = parentSessionId
527
567
  ? (resumeInjectedSessions.has(sessionId)
528
568
  ? Promise.resolve(null)
@@ -501,12 +501,23 @@ export default function (pi: ExtensionAPI) {
501
501
  ],
502
502
  parameters: Type.Object({
503
503
  query: Type.String({ description: "Search query — topic, pattern, or question" }),
504
+ type: Type.Optional(Type.String({ description: "Optional note type filter: session, plan, spore, or all" })),
505
+ observation_type: Type.Optional(Type.String({ description: "Optional spore observation type filter" })),
506
+ status: Type.Optional(Type.String({ description: "Optional semantic status filter" })),
507
+ since: Type.Optional(Type.Number({ description: "Optional created_at lower bound in epoch seconds" })),
508
+ until: Type.Optional(Type.Number({ description: "Optional created_at upper bound in epoch seconds" })),
504
509
  }),
505
510
  async execute(_toolCallId, params) {
506
511
  if (!currentSessionId) {
507
512
  return { content: [{ type: "text" as const, text: "No active session" }], details: {} };
508
513
  }
509
- const result = await getJson(currentCwd, `/api/search?q=${encodeURIComponent(params.query)}`);
514
+ const query = new URLSearchParams({ q: params.query });
515
+ if (params.type) query.set("type", params.type);
516
+ if (params.observation_type) query.set("observation_type", params.observation_type);
517
+ if (params.status) query.set("status", params.status);
518
+ if (params.since !== undefined) query.set("since", String(params.since));
519
+ if (params.until !== undefined) query.set("until", String(params.until));
520
+ const result = await getJson(currentCwd, `/api/search?${query.toString()}`);
510
521
  if (!result.ok || !result.data) {
511
522
  return { content: [{ type: "text" as const, text: "Search unavailable — Myco daemon may not be running." }], details: {} };
512
523
  }
@@ -1,19 +1,19 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  gatherStats
4
- } from "./chunk-75Z7UKDY.js";
4
+ } from "./chunk-4D22KTXY.js";
5
5
  import {
6
6
  initVaultDb
7
- } from "./chunk-JR54LTPP.js";
7
+ } from "./chunk-W5L5IHP5.js";
8
8
  import "./chunk-SAKJMNSR.js";
9
- import "./chunk-VHNRMM4O.js";
9
+ import "./chunk-OTQH5KZW.js";
10
10
  import "./chunk-X3IGT5RV.js";
11
11
  import "./chunk-53RPGOEN.js";
12
12
  import "./chunk-OUJSQSKE.js";
13
13
  import "./chunk-POEPHBQK.js";
14
14
  import "./chunk-MYX5NCRH.js";
15
- import "./chunk-P66DLD6G.js";
16
- import "./chunk-BUTL6IFS.js";
15
+ import "./chunk-6FBLL7MD.js";
16
+ import "./chunk-Z55WGA2J.js";
17
17
  import "./chunk-LPUQPDC2.js";
18
18
  import "./chunk-6C6QZ4PM.js";
19
19
  import "./chunk-UUHLLQXO.js";
@@ -94,4 +94,4 @@ function formatUptime(seconds) {
94
94
  export {
95
95
  run
96
96
  };
97
- //# sourceMappingURL=stats-DFG6S23S.js.map
97
+ //# sourceMappingURL=stats-JCLZLA5G.js.map
@@ -2,16 +2,16 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
2
2
  import {
3
3
  normalizeHookInput,
4
4
  readStdin
5
- } from "./chunk-5ZG4RMUH.js";
5
+ } from "./chunk-N2DGFACQ.js";
6
6
  import "./chunk-ZXZPJJN3.js";
7
7
  import {
8
8
  resolveVaultDir
9
- } from "./chunk-CUDIZJY7.js";
9
+ } from "./chunk-TSM6VESW.js";
10
10
  import {
11
11
  DaemonClient
12
- } from "./chunk-P66DLD6G.js";
13
- import "./chunk-BUTL6IFS.js";
14
- import "./chunk-NGROSFOH.js";
12
+ } from "./chunk-6FBLL7MD.js";
13
+ import "./chunk-Z55WGA2J.js";
14
+ import "./chunk-Z66IT5KL.js";
15
15
  import "./chunk-LPUQPDC2.js";
16
16
  import "./chunk-6C6QZ4PM.js";
17
17
  import "./chunk-UUHLLQXO.js";
@@ -46,4 +46,4 @@ async function main() {
46
46
  export {
47
47
  main
48
48
  };
49
- //# sourceMappingURL=stop-WRBTXEVT.js.map
49
+ //# sourceMappingURL=stop-B7XCXEM5.js.map
@@ -1,14 +1,14 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  sendEvent
4
- } from "./chunk-G6QIBNZM.js";
4
+ } from "./chunk-IMW5TJ3O.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-5ZG4RMUH.js";
6
+ import "./chunk-N2DGFACQ.js";
7
7
  import "./chunk-ZXZPJJN3.js";
8
- import "./chunk-CUDIZJY7.js";
9
- import "./chunk-P66DLD6G.js";
10
- import "./chunk-BUTL6IFS.js";
11
- import "./chunk-NGROSFOH.js";
8
+ import "./chunk-TSM6VESW.js";
9
+ import "./chunk-6FBLL7MD.js";
10
+ import "./chunk-Z55WGA2J.js";
11
+ import "./chunk-Z66IT5KL.js";
12
12
  import "./chunk-LPUQPDC2.js";
13
13
  import "./chunk-6C6QZ4PM.js";
14
14
  import "./chunk-UUHLLQXO.js";
@@ -28,4 +28,4 @@ async function main() {
28
28
  export {
29
29
  main
30
30
  };
31
- //# sourceMappingURL=stop-failure-32MGIG2Q.js.map
31
+ //# sourceMappingURL=stop-failure-R6QZCUOZ.js.map
@@ -1,14 +1,14 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  sendEvent
4
- } from "./chunk-G6QIBNZM.js";
4
+ } from "./chunk-IMW5TJ3O.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-5ZG4RMUH.js";
6
+ import "./chunk-N2DGFACQ.js";
7
7
  import "./chunk-ZXZPJJN3.js";
8
- import "./chunk-CUDIZJY7.js";
9
- import "./chunk-P66DLD6G.js";
10
- import "./chunk-BUTL6IFS.js";
11
- import "./chunk-NGROSFOH.js";
8
+ import "./chunk-TSM6VESW.js";
9
+ import "./chunk-6FBLL7MD.js";
10
+ import "./chunk-Z55WGA2J.js";
11
+ import "./chunk-Z66IT5KL.js";
12
12
  import "./chunk-LPUQPDC2.js";
13
13
  import "./chunk-6C6QZ4PM.js";
14
14
  import "./chunk-UUHLLQXO.js";
@@ -28,4 +28,4 @@ async function main() {
28
28
  export {
29
29
  main
30
30
  };
31
- //# sourceMappingURL=subagent-start-VFGHQFVL.js.map
31
+ //# sourceMappingURL=subagent-start-N7A622F3.js.map
@@ -1,14 +1,14 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  sendEvent
4
- } from "./chunk-G6QIBNZM.js";
4
+ } from "./chunk-IMW5TJ3O.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-5ZG4RMUH.js";
6
+ import "./chunk-N2DGFACQ.js";
7
7
  import "./chunk-ZXZPJJN3.js";
8
- import "./chunk-CUDIZJY7.js";
9
- import "./chunk-P66DLD6G.js";
10
- import "./chunk-BUTL6IFS.js";
11
- import "./chunk-NGROSFOH.js";
8
+ import "./chunk-TSM6VESW.js";
9
+ import "./chunk-6FBLL7MD.js";
10
+ import "./chunk-Z55WGA2J.js";
11
+ import "./chunk-Z66IT5KL.js";
12
12
  import "./chunk-LPUQPDC2.js";
13
13
  import "./chunk-6C6QZ4PM.js";
14
14
  import "./chunk-UUHLLQXO.js";
@@ -30,4 +30,4 @@ async function main() {
30
30
  export {
31
31
  main
32
32
  };
33
- //# sourceMappingURL=subagent-stop-663FXG3P.js.map
33
+ //# sourceMappingURL=subagent-stop-SVOG5MZJ.js.map
@@ -1,14 +1,14 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  sendEvent
4
- } from "./chunk-G6QIBNZM.js";
4
+ } from "./chunk-IMW5TJ3O.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-5ZG4RMUH.js";
6
+ import "./chunk-N2DGFACQ.js";
7
7
  import "./chunk-ZXZPJJN3.js";
8
- import "./chunk-CUDIZJY7.js";
9
- import "./chunk-P66DLD6G.js";
10
- import "./chunk-BUTL6IFS.js";
11
- import "./chunk-NGROSFOH.js";
8
+ import "./chunk-TSM6VESW.js";
9
+ import "./chunk-6FBLL7MD.js";
10
+ import "./chunk-Z55WGA2J.js";
11
+ import "./chunk-Z66IT5KL.js";
12
12
  import "./chunk-LPUQPDC2.js";
13
13
  import "./chunk-6C6QZ4PM.js";
14
14
  import "./chunk-UUHLLQXO.js";
@@ -29,4 +29,4 @@ async function main() {
29
29
  export {
30
30
  main
31
31
  };
32
- //# sourceMappingURL=task-completed-ZCQYEFMZ.js.map
32
+ //# sourceMappingURL=task-completed-3DL5LJXF.js.map
@@ -4,8 +4,8 @@ import {
4
4
  teamInit,
5
5
  teamUpgrade,
6
6
  upgradeWorker
7
- } from "./chunk-R2JIJBCL.js";
8
- import "./chunk-RL5R4CQU.js";
7
+ } from "./chunk-TMAXWERS.js";
8
+ import "./chunk-DTWUHHFI.js";
9
9
  import "./chunk-53RPGOEN.js";
10
10
  import "./chunk-OUJSQSKE.js";
11
11
  import "./chunk-POEPHBQK.js";
@@ -21,4 +21,4 @@ export {
21
21
  teamUpgrade,
22
22
  upgradeWorker
23
23
  };
24
- //# sourceMappingURL=team-JTI5CDUO.js.map
24
+ //# sourceMappingURL=team-VJ3M263F.js.map