@goondocks/myco 0.10.0 → 0.12.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 (197) hide show
  1. package/CONTRIBUTING.md +3 -20
  2. package/README.md +21 -10
  3. package/dist/{agent-run-CGXF5PPC.js → agent-run-5KYQJQTY.js} +6 -6
  4. package/dist/{agent-tasks-T7NVI3R7.js → agent-tasks-N7BDYKGB.js} +6 -6
  5. package/dist/{chunk-XLY3REL3.js → chunk-4VSNNMEU.js} +2 -2
  6. package/dist/{chunk-5LPERML5.js → chunk-7NBDELZB.js} +9 -9
  7. package/dist/{chunk-ZMW6KQX2.js → chunk-D4ESHOOJ.js} +6 -6
  8. package/dist/{chunk-W6HI4CCS.js → chunk-D4M2AV65.js} +5 -4
  9. package/dist/chunk-D4M2AV65.js.map +1 -0
  10. package/dist/{chunk-YZMNEIFI.js → chunk-DPJVKNNP.js} +3 -3
  11. package/dist/{chunk-FMIWFRAM.js → chunk-HAG2YDH6.js} +9 -8
  12. package/dist/chunk-HAG2YDH6.js.map +1 -0
  13. package/dist/{chunk-AEJS57ZK.js → chunk-J3L2RTYK.js} +2 -2
  14. package/dist/{chunk-MKKXCCQ5.js → chunk-JHLALJPB.js} +5 -5
  15. package/dist/{chunk-CUDM5YJY.js → chunk-JROOQQH6.js} +3 -3
  16. package/dist/{chunk-D6DXYAFK.js → chunk-LGPBVBFY.js} +3 -3
  17. package/dist/{chunk-5SDH75YC.js → chunk-LUQBT2Y4.js} +2 -2
  18. package/dist/{chunk-76ZO5RGT.js → chunk-PIRWYDOH.js} +30 -2
  19. package/dist/chunk-PIRWYDOH.js.map +1 -0
  20. package/dist/{chunk-WZZH3YXJ.js → chunk-PW5QVY44.js} +2 -2
  21. package/dist/{chunk-U7UUJ4FD.js → chunk-Q2AYS2QE.js} +3 -3
  22. package/dist/{chunk-5PEUFJ6U.js → chunk-QFMBZ72S.js} +24 -8
  23. package/dist/chunk-QFMBZ72S.js.map +1 -0
  24. package/dist/{chunk-FPMEIN2W.js → chunk-QL2RBFIC.js} +2 -2
  25. package/dist/{chunk-MSXYUXZR.js → chunk-RGRPAKEY.js} +3 -3
  26. package/dist/chunk-RR75ZKEV.js +83 -0
  27. package/dist/chunk-RR75ZKEV.js.map +1 -0
  28. package/dist/{chunk-5QERXFH7.js → chunk-SW62AX75.js} +2 -2
  29. package/dist/{chunk-FFQES5MC.js → chunk-TCGOSLW6.js} +3 -3
  30. package/dist/{chunk-G2LQBFE3.js → chunk-TY7A5OZ5.js} +2 -2
  31. package/dist/chunk-YRHSTVCZ.js +792 -0
  32. package/dist/chunk-YRHSTVCZ.js.map +1 -0
  33. package/dist/{chunk-C3AEZ3BZ.js → chunk-YRUJ5KGV.js} +3 -3
  34. package/dist/{cli-6CPFJGRZ.js → cli-Y5QZJAHX.js} +39 -37
  35. package/dist/cli-Y5QZJAHX.js.map +1 -0
  36. package/dist/{client-B27SN5QG.js → client-UGM6MG55.js} +4 -4
  37. package/dist/{detect-H5OPI7GD.js → detect-27DN6UTL.js} +3 -3
  38. package/dist/{detect-providers-AZ6DEQU7.js → detect-providers-JFE3QLJI.js} +4 -4
  39. package/dist/{doctor-RHHWJTMB.js → doctor-NFWPX75B.js} +22 -28
  40. package/dist/doctor-NFWPX75B.js.map +1 -0
  41. package/dist/{executor-A5C5KDLP.js → executor-ESRLUCGU.js} +19 -19
  42. package/dist/executor-ESRLUCGU.js.map +1 -0
  43. package/dist/{init-ARJROOWV.js → init-NMSG24BY.js} +42 -61
  44. package/dist/init-NMSG24BY.js.map +1 -0
  45. package/dist/{init-wizard-XNFOZCEB.js → init-wizard-WIUCR4JE.js} +7 -7
  46. package/dist/{llm-XJFHRFHB.js → llm-O46QYWEM.js} +7 -7
  47. package/dist/{loader-GKXR5ONU.js → loader-BQ4X4K3F.js} +5 -5
  48. package/dist/{main-PVX6R3I6.js → main-3NTAT7ZD.js} +996 -104
  49. package/dist/main-3NTAT7ZD.js.map +1 -0
  50. package/dist/{openai-embeddings-ST3B6GW7.js → openai-embeddings-HWAKOGUM.js} +4 -4
  51. package/dist/{openrouter-HJHOO3EO.js → openrouter-GXZK7JXR.js} +4 -4
  52. package/dist/{post-compact-LR3DSGT3.js → post-compact-3DDK3OVZ.js} +12 -8
  53. package/dist/post-compact-3DDK3OVZ.js.map +1 -0
  54. package/dist/{post-tool-use-SOFVNFU3.js → post-tool-use-LSG6N3W5.js} +21 -14
  55. package/dist/post-tool-use-LSG6N3W5.js.map +1 -0
  56. package/dist/post-tool-use-failure-5V3OCLI6.js +32 -0
  57. package/dist/post-tool-use-failure-5V3OCLI6.js.map +1 -0
  58. package/dist/{pre-compact-3E3D6565.js → pre-compact-F7Y7SDSZ.js} +11 -7
  59. package/dist/pre-compact-F7Y7SDSZ.js.map +1 -0
  60. package/dist/{provider-check-SOTDYLJE.js → provider-check-CKZW3GQX.js} +4 -4
  61. package/dist/{registry-WVZG6R2R.js → registry-ZHUVXGPO.js} +6 -6
  62. package/dist/remove-VCWRNG54.js +92 -0
  63. package/dist/remove-VCWRNG54.js.map +1 -0
  64. package/dist/{resolution-events-UPHJJLDQ.js → resolution-events-WZHPQQMN.js} +4 -4
  65. package/dist/{restart-XIUFVS33.js → restart-YYJ7SH4K.js} +7 -7
  66. package/dist/{search-VB6Z2ZXV.js → search-L7KTBURJ.js} +7 -7
  67. package/dist/{server-AKPBRP6Z.js → server-GMRVF2PB.js} +14 -14
  68. package/dist/{session-UVZS6CY5.js → session-V3SNFG7J.js} +8 -8
  69. package/dist/{session-end-YMQ44U6Z.js → session-end-V3V3GMP2.js} +12 -7
  70. package/dist/session-end-V3V3GMP2.js.map +1 -0
  71. package/dist/{session-start-3754HF3N.js → session-start-OH7SBUIA.js} +17 -14
  72. package/dist/{session-start-3754HF3N.js.map → session-start-OH7SBUIA.js.map} +1 -1
  73. package/dist/{setup-llm-NWHOPJUV.js → setup-llm-5AMWEAJ5.js} +9 -9
  74. package/dist/src/agent/definitions/tasks/full-intelligence.yaml +0 -1
  75. package/dist/src/agent/prompts/agent.md +1 -1
  76. package/dist/src/cli.js +1 -1
  77. package/dist/src/daemon/main.js +1 -1
  78. package/dist/src/hooks/post-tool-use.js +1 -1
  79. package/dist/src/hooks/session-end.js +1 -1
  80. package/dist/src/hooks/session-start.js +1 -1
  81. package/dist/src/hooks/stop.js +1 -1
  82. package/dist/src/hooks/user-prompt-submit.js +1 -1
  83. package/dist/src/mcp/server.js +1 -1
  84. package/dist/src/symbionts/manifests/claude-code.yaml +8 -4
  85. package/dist/src/symbionts/manifests/codex.yaml +19 -0
  86. package/dist/src/symbionts/manifests/cursor.yaml +6 -3
  87. package/dist/src/symbionts/manifests/gemini.yaml +20 -0
  88. package/dist/src/symbionts/manifests/vscode-copilot.yaml +17 -0
  89. package/dist/src/symbionts/manifests/windsurf.yaml +16 -0
  90. package/dist/src/symbionts/templates/claude-code/hooks.json +134 -0
  91. package/dist/src/symbionts/templates/claude-code/mcp.json +7 -0
  92. package/dist/src/symbionts/templates/claude-code/settings.json +10 -0
  93. package/dist/src/symbionts/templates/codex/hooks.json +46 -0
  94. package/dist/src/symbionts/templates/codex/mcp.json +6 -0
  95. package/dist/src/symbionts/templates/cursor/mcp.json +7 -0
  96. package/dist/src/symbionts/templates/cursor/settings.json +6 -0
  97. package/dist/src/symbionts/templates/gemini/hooks.json +74 -0
  98. package/dist/src/symbionts/templates/gemini/mcp.json +6 -0
  99. package/dist/src/symbionts/templates/gemini/settings.json +6 -0
  100. package/dist/src/symbionts/templates/instructions-stub.md +9 -0
  101. package/dist/src/symbionts/templates/vscode-copilot/hooks.json +79 -0
  102. package/dist/src/symbionts/templates/vscode-copilot/mcp.json +7 -0
  103. package/dist/src/symbionts/templates/vscode-copilot/settings.json +6 -0
  104. package/dist/src/symbionts/templates/windsurf/hooks.json +22 -0
  105. package/dist/src/symbionts/templates/windsurf/settings.json +6 -0
  106. package/dist/{stats-CDQXOTEC.js → stats-B2V7P45Y.js} +10 -10
  107. package/dist/{stop-WSFGRPXZ.js → stop-D6L2KRHZ.js} +17 -11
  108. package/dist/stop-D6L2KRHZ.js.map +1 -0
  109. package/dist/{stop-failure-4FR7574F.js → stop-failure-7OM2AYRX.js} +12 -8
  110. package/dist/stop-failure-7OM2AYRX.js.map +1 -0
  111. package/dist/{subagent-start-7SGBXJYP.js → subagent-start-MKL5I54S.js} +12 -8
  112. package/dist/{subagent-start-7SGBXJYP.js.map → subagent-start-MKL5I54S.js.map} +1 -1
  113. package/dist/subagent-stop-2E7VKZW2.js +32 -0
  114. package/dist/subagent-stop-2E7VKZW2.js.map +1 -0
  115. package/dist/task-completed-5QHIT773.js +31 -0
  116. package/dist/task-completed-5QHIT773.js.map +1 -0
  117. package/dist/{team-XMHYCKFF.js → team-TBS5OILG.js} +5 -5
  118. package/dist/ui/assets/index-aMc07Ym5.js +804 -0
  119. package/dist/ui/index.html +1 -1
  120. package/dist/{update-W3UFZU4G.js → update-4NVFET56.js} +30 -34
  121. package/dist/update-4NVFET56.js.map +1 -0
  122. package/dist/{user-prompt-submit-LSWCYUW3.js → user-prompt-submit-X4BCPMZ4.js} +15 -8
  123. package/dist/user-prompt-submit-X4BCPMZ4.js.map +1 -0
  124. package/dist/{verify-O7TQ5DDY.js → verify-D7EDVXO5.js} +8 -8
  125. package/dist/{version-VWWY7SPQ.js → version-GTFCEIJ2.js} +2 -2
  126. package/package.json +5 -4
  127. package/skills/rules/SKILL.md +32 -9
  128. package/.claude-plugin/marketplace.json +0 -26
  129. package/.claude-plugin/plugin.json +0 -27
  130. package/dist/chunk-5PEUFJ6U.js.map +0 -1
  131. package/dist/chunk-76ZO5RGT.js.map +0 -1
  132. package/dist/chunk-FMIWFRAM.js.map +0 -1
  133. package/dist/chunk-J4RVYUH4.js +0 -21
  134. package/dist/chunk-J4RVYUH4.js.map +0 -1
  135. package/dist/chunk-W6HI4CCS.js.map +0 -1
  136. package/dist/chunk-WXSJKESH.js +0 -441
  137. package/dist/chunk-WXSJKESH.js.map +0 -1
  138. package/dist/cli-6CPFJGRZ.js.map +0 -1
  139. package/dist/doctor-RHHWJTMB.js.map +0 -1
  140. package/dist/executor-A5C5KDLP.js.map +0 -1
  141. package/dist/init-ARJROOWV.js.map +0 -1
  142. package/dist/main-PVX6R3I6.js.map +0 -1
  143. package/dist/post-compact-LR3DSGT3.js.map +0 -1
  144. package/dist/post-tool-use-SOFVNFU3.js.map +0 -1
  145. package/dist/post-tool-use-failure-2CZZZASB.js +0 -28
  146. package/dist/post-tool-use-failure-2CZZZASB.js.map +0 -1
  147. package/dist/pre-compact-3E3D6565.js.map +0 -1
  148. package/dist/session-end-YMQ44U6Z.js.map +0 -1
  149. package/dist/stop-WSFGRPXZ.js.map +0 -1
  150. package/dist/stop-failure-4FR7574F.js.map +0 -1
  151. package/dist/subagent-stop-MRVTNX3V.js +0 -28
  152. package/dist/subagent-stop-MRVTNX3V.js.map +0 -1
  153. package/dist/task-completed-XXPYPSRV.js +0 -27
  154. package/dist/task-completed-XXPYPSRV.js.map +0 -1
  155. package/dist/ui/assets/index-CPA_uq_j.js +0 -794
  156. package/dist/update-W3UFZU4G.js.map +0 -1
  157. package/dist/user-prompt-submit-LSWCYUW3.js.map +0 -1
  158. package/hooks/hooks.json +0 -137
  159. /package/dist/{agent-run-CGXF5PPC.js.map → agent-run-5KYQJQTY.js.map} +0 -0
  160. /package/dist/{agent-tasks-T7NVI3R7.js.map → agent-tasks-N7BDYKGB.js.map} +0 -0
  161. /package/dist/{chunk-XLY3REL3.js.map → chunk-4VSNNMEU.js.map} +0 -0
  162. /package/dist/{chunk-5LPERML5.js.map → chunk-7NBDELZB.js.map} +0 -0
  163. /package/dist/{chunk-ZMW6KQX2.js.map → chunk-D4ESHOOJ.js.map} +0 -0
  164. /package/dist/{chunk-YZMNEIFI.js.map → chunk-DPJVKNNP.js.map} +0 -0
  165. /package/dist/{chunk-AEJS57ZK.js.map → chunk-J3L2RTYK.js.map} +0 -0
  166. /package/dist/{chunk-MKKXCCQ5.js.map → chunk-JHLALJPB.js.map} +0 -0
  167. /package/dist/{chunk-CUDM5YJY.js.map → chunk-JROOQQH6.js.map} +0 -0
  168. /package/dist/{chunk-D6DXYAFK.js.map → chunk-LGPBVBFY.js.map} +0 -0
  169. /package/dist/{chunk-5SDH75YC.js.map → chunk-LUQBT2Y4.js.map} +0 -0
  170. /package/dist/{chunk-WZZH3YXJ.js.map → chunk-PW5QVY44.js.map} +0 -0
  171. /package/dist/{chunk-U7UUJ4FD.js.map → chunk-Q2AYS2QE.js.map} +0 -0
  172. /package/dist/{chunk-FPMEIN2W.js.map → chunk-QL2RBFIC.js.map} +0 -0
  173. /package/dist/{chunk-MSXYUXZR.js.map → chunk-RGRPAKEY.js.map} +0 -0
  174. /package/dist/{chunk-5QERXFH7.js.map → chunk-SW62AX75.js.map} +0 -0
  175. /package/dist/{chunk-FFQES5MC.js.map → chunk-TCGOSLW6.js.map} +0 -0
  176. /package/dist/{chunk-G2LQBFE3.js.map → chunk-TY7A5OZ5.js.map} +0 -0
  177. /package/dist/{chunk-C3AEZ3BZ.js.map → chunk-YRUJ5KGV.js.map} +0 -0
  178. /package/dist/{client-B27SN5QG.js.map → client-UGM6MG55.js.map} +0 -0
  179. /package/dist/{detect-H5OPI7GD.js.map → detect-27DN6UTL.js.map} +0 -0
  180. /package/dist/{detect-providers-AZ6DEQU7.js.map → detect-providers-JFE3QLJI.js.map} +0 -0
  181. /package/dist/{init-wizard-XNFOZCEB.js.map → init-wizard-WIUCR4JE.js.map} +0 -0
  182. /package/dist/{llm-XJFHRFHB.js.map → llm-O46QYWEM.js.map} +0 -0
  183. /package/dist/{loader-GKXR5ONU.js.map → loader-BQ4X4K3F.js.map} +0 -0
  184. /package/dist/{openai-embeddings-ST3B6GW7.js.map → openai-embeddings-HWAKOGUM.js.map} +0 -0
  185. /package/dist/{openrouter-HJHOO3EO.js.map → openrouter-GXZK7JXR.js.map} +0 -0
  186. /package/dist/{provider-check-SOTDYLJE.js.map → provider-check-CKZW3GQX.js.map} +0 -0
  187. /package/dist/{registry-WVZG6R2R.js.map → registry-ZHUVXGPO.js.map} +0 -0
  188. /package/dist/{resolution-events-UPHJJLDQ.js.map → resolution-events-WZHPQQMN.js.map} +0 -0
  189. /package/dist/{restart-XIUFVS33.js.map → restart-YYJ7SH4K.js.map} +0 -0
  190. /package/dist/{search-VB6Z2ZXV.js.map → search-L7KTBURJ.js.map} +0 -0
  191. /package/dist/{server-AKPBRP6Z.js.map → server-GMRVF2PB.js.map} +0 -0
  192. /package/dist/{session-UVZS6CY5.js.map → session-V3SNFG7J.js.map} +0 -0
  193. /package/dist/{setup-llm-NWHOPJUV.js.map → setup-llm-5AMWEAJ5.js.map} +0 -0
  194. /package/dist/{stats-CDQXOTEC.js.map → stats-B2V7P45Y.js.map} +0 -0
  195. /package/dist/{team-XMHYCKFF.js.map → team-TBS5OILG.js.map} +0 -0
  196. /package/dist/{verify-O7TQ5DDY.js.map → verify-D7EDVXO5.js.map} +0 -0
  197. /package/dist/{version-VWWY7SPQ.js.map → version-GTFCEIJ2.js.map} +0 -0
@@ -1,13 +1,13 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ findPackageRoot
4
+ } from "./chunk-LPUQPDC2.js";
2
5
  import {
3
6
  require_dist
4
7
  } from "./chunk-D7TYRPRM.js";
5
8
  import {
6
9
  external_exports
7
10
  } from "./chunk-KH64DHOY.js";
8
- import {
9
- findPackageRoot
10
- } from "./chunk-LPUQPDC2.js";
11
11
  import {
12
12
  __toESM
13
13
  } from "./chunk-PZUWP5VK.js";
@@ -16,21 +16,37 @@ import {
16
16
  var CaptureManifestSchema = external_exports.object({
17
17
  planDirs: external_exports.array(external_exports.string()).default([])
18
18
  });
19
+ var RegistrationSchema = external_exports.object({
20
+ hooksTarget: external_exports.string().optional(),
21
+ mcpTarget: external_exports.string().optional(),
22
+ mcpFormat: external_exports.enum(["json", "toml"]).default("json"),
23
+ skillsTarget: external_exports.string().optional(),
24
+ settingsTarget: external_exports.string().optional(),
25
+ /** Instruction file that stubs out to AGENTS.md. Only for agents that don't read AGENTS.md natively. */
26
+ instructionsFile: external_exports.string().optional()
27
+ });
19
28
  var SymbiontManifestSchema = external_exports.object({
20
29
  name: external_exports.string(),
21
30
  displayName: external_exports.string(),
22
31
  binary: external_exports.string(),
23
32
  configDir: external_exports.string(),
24
33
  pluginRootEnvVar: external_exports.string(),
25
- pluginInstallCommands: external_exports.array(external_exports.string()).default([]),
26
34
  settingsPath: external_exports.string().optional(),
27
- mcpConfigPath: external_exports.string().optional(),
28
35
  hookFields: external_exports.object({
36
+ sessionId: external_exports.string(),
29
37
  transcriptPath: external_exports.string(),
30
38
  lastResponse: external_exports.string(),
31
- sessionId: external_exports.string()
39
+ prompt: external_exports.string().default("prompt"),
40
+ toolName: external_exports.string().default("tool_name"),
41
+ toolInput: external_exports.string().default("tool_input"),
42
+ toolOutput: external_exports.string().default("tool_output"),
43
+ /** Env var fallback for session ID (e.g., GEMINI_SESSION_ID). */
44
+ sessionIdEnv: external_exports.string().optional()
32
45
  }),
33
- capture: CaptureManifestSchema.optional()
46
+ /** Resume command template with {sessionId} placeholder. Omit for IDE-based agents. */
47
+ resumeCommand: external_exports.string().optional(),
48
+ capture: CaptureManifestSchema.optional(),
49
+ registration: RegistrationSchema.optional()
34
50
  });
35
51
 
36
52
  // src/symbionts/detect.ts
@@ -89,4 +105,4 @@ export {
89
105
  detectSymbionts,
90
106
  resolvePackageRoot
91
107
  };
92
- //# sourceMappingURL=chunk-5PEUFJ6U.js.map
108
+ //# sourceMappingURL=chunk-QFMBZ72S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/symbionts/manifest-schema.ts","../src/symbionts/detect.ts"],"sourcesContent":["import { z } from 'zod';\n\nconst CaptureManifestSchema = z.object({\n planDirs: z.array(z.string()).default([]),\n});\n\nconst RegistrationSchema = z.object({\n hooksTarget: z.string().optional(),\n mcpTarget: z.string().optional(),\n mcpFormat: z.enum(['json', 'toml']).default('json'),\n skillsTarget: z.string().optional(),\n settingsTarget: z.string().optional(),\n /** Instruction file that stubs out to AGENTS.md. Only for agents that don't read AGENTS.md natively. */\n instructionsFile: z.string().optional(),\n});\n\nexport const SymbiontManifestSchema = z.object({\n name: z.string(),\n displayName: z.string(),\n binary: z.string(),\n configDir: z.string(),\n pluginRootEnvVar: z.string(),\n settingsPath: z.string().optional(),\n hookFields: z.object({\n sessionId: z.string(),\n transcriptPath: z.string(),\n lastResponse: z.string(),\n prompt: z.string().default('prompt'),\n toolName: z.string().default('tool_name'),\n toolInput: z.string().default('tool_input'),\n toolOutput: z.string().default('tool_output'),\n /** Env var fallback for session ID (e.g., GEMINI_SESSION_ID). */\n sessionIdEnv: z.string().optional(),\n }),\n /** Resume command template with {sessionId} placeholder. Omit for IDE-based agents. */\n resumeCommand: z.string().optional(),\n capture: CaptureManifestSchema.optional(),\n registration: RegistrationSchema.optional(),\n});\n\nexport type SymbiontManifest = z.infer<typeof SymbiontManifestSchema>;\nexport type SymbiontRegistration = z.infer<typeof RegistrationSchema>;\n","import { SymbiontManifestSchema, type SymbiontManifest } from './manifest-schema.js';\nimport { findPackageRoot } from '../utils/find-package-root.js';\nimport { execFileSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport YAML from 'yaml';\n\nexport interface DetectedSymbiont {\n manifest: SymbiontManifest;\n binaryFound: boolean;\n configDirFound: boolean;\n}\n\nconst MANIFESTS_SUBDIR = 'symbionts/manifests';\n\n/** Cached manifests — static files that never change at runtime. */\nlet manifestCache: SymbiontManifest[] | null = null;\n\n/** Load all symbiont manifests from the package's dist directory. */\nexport function loadManifests(): SymbiontManifest[] {\n if (manifestCache) return manifestCache;\n const candidates = [\n // Source layout: src/symbionts/detect.ts → src/symbionts/manifests/\n path.resolve(import.meta.dirname, MANIFESTS_SUBDIR),\n // Dist layout: dist/src/symbionts/ → dist/src/symbionts/manifests/\n // (or dist/src/daemon/ → dist/src/symbionts/manifests/)\n path.resolve(import.meta.dirname, '..', MANIFESTS_SUBDIR),\n path.resolve(import.meta.dirname, '..', '..', MANIFESTS_SUBDIR),\n // Chunk layout: dist/chunk-*.js → dist/src/symbionts/manifests/\n path.resolve(import.meta.dirname, 'src', MANIFESTS_SUBDIR),\n ];\n\n for (const dir of candidates) {\n if (!fs.existsSync(dir)) continue;\n const files = fs.readdirSync(dir).filter(f => f.endsWith('.yaml'));\n if (files.length === 0) continue;\n manifestCache = files.map(f => {\n const raw = YAML.parse(fs.readFileSync(path.join(dir, f), 'utf-8'));\n return SymbiontManifestSchema.parse(raw);\n });\n return manifestCache;\n }\n return [];\n}\n\n/** Check if a binary is available on PATH. */\nfunction isBinaryOnPath(binary: string): boolean {\n try {\n execFileSync('which', [binary], { stdio: 'pipe' });\n return true;\n } catch {\n return false;\n }\n}\n\n/** Detect which symbionts are available for a project. */\nexport function detectSymbionts(projectRoot: string): DetectedSymbiont[] {\n const manifests = loadManifests();\n return manifests.map(manifest => ({\n manifest,\n binaryFound: isBinaryOnPath(manifest.binary),\n configDirFound: fs.existsSync(path.join(projectRoot, manifest.configDir)),\n })).filter(d => d.binaryFound || d.configDirFound);\n}\n\n/** Find the Myco package root (where package.json lives). */\nexport function resolvePackageRoot(): string {\n return findPackageRoot(import.meta.dirname) ?? process.cwd();\n}\n"],"mappings":"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","names":["YAML"]}
@@ -2,7 +2,7 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
2
2
  import {
3
3
  EMBEDDING_REQUEST_TIMEOUT_MS,
4
4
  PROVIDER_DETECT_TIMEOUT_MS
5
- } from "./chunk-76ZO5RGT.js";
5
+ } from "./chunk-PIRWYDOH.js";
6
6
 
7
7
  // src/cli/providers/cloud-embedding-base.ts
8
8
  var ERROR_BODY_PREVIEW_CHARS = 500;
@@ -63,4 +63,4 @@ var CloudEmbeddingBase = class {
63
63
  export {
64
64
  CloudEmbeddingBase
65
65
  };
66
- //# sourceMappingURL=chunk-FPMEIN2W.js.map
66
+ //# sourceMappingURL=chunk-QL2RBFIC.js.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  isProcessAlive
4
- } from "./chunk-WXSJKESH.js";
4
+ } from "./chunk-YRHSTVCZ.js";
5
5
  import {
6
6
  loadConfig
7
7
  } from "./chunk-MAZOVVDU.js";
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-MYX5NCRH.js";
11
11
  import {
12
12
  DIGEST_TIERS
13
- } from "./chunk-76ZO5RGT.js";
13
+ } from "./chunk-PIRWYDOH.js";
14
14
 
15
15
  // src/db/queries/embeddings.ts
16
16
  var EMBEDDABLE_TABLES = ["sessions", "spores", "plans", "artifacts"];
@@ -184,4 +184,4 @@ export {
184
184
  getEmbeddingQueueDepth,
185
185
  gatherStats
186
186
  };
187
- //# sourceMappingURL=chunk-MSXYUXZR.js.map
187
+ //# sourceMappingURL=chunk-RGRPAKEY.js.map
@@ -0,0 +1,83 @@
1
+ import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ STDIN_TIMEOUT_MS
4
+ } from "./chunk-PIRWYDOH.js";
5
+ import {
6
+ loadManifests
7
+ } from "./chunk-QFMBZ72S.js";
8
+
9
+ // src/hooks/read-stdin.ts
10
+ function readStdin() {
11
+ return new Promise((resolve) => {
12
+ let data = "";
13
+ process.stdin.on("data", (chunk) => {
14
+ data += chunk;
15
+ });
16
+ process.stdin.on("end", () => resolve(data));
17
+ setTimeout(() => resolve(data || "{}"), STDIN_TIMEOUT_MS);
18
+ });
19
+ }
20
+
21
+ // src/hooks/normalize.ts
22
+ var DEFAULT_HOOK_FIELDS = {
23
+ sessionId: "session_id",
24
+ transcriptPath: "transcript_path",
25
+ lastResponse: "last_assistant_message",
26
+ prompt: "prompt",
27
+ toolName: "tool_name",
28
+ toolInput: "tool_input",
29
+ toolOutput: "tool_output"
30
+ };
31
+ var DEFAULT_AGENT_NAME = "claude-code";
32
+ var cachedManifest;
33
+ function detectManifest() {
34
+ if (cachedManifest !== void 0) return cachedManifest;
35
+ const manifests = loadManifests();
36
+ for (const m of manifests) {
37
+ if (process.env[m.pluginRootEnvVar]) {
38
+ cachedManifest = m;
39
+ return m;
40
+ }
41
+ }
42
+ for (const m of manifests) {
43
+ if (m.hookFields.sessionIdEnv && process.env[m.hookFields.sessionIdEnv]) {
44
+ cachedManifest = m;
45
+ return m;
46
+ }
47
+ }
48
+ cachedManifest = null;
49
+ return null;
50
+ }
51
+ function resolveField(input, fieldPath) {
52
+ const parts = fieldPath.split(".");
53
+ let current = input;
54
+ for (const part of parts) {
55
+ if (current === null || current === void 0 || typeof current !== "object") return void 0;
56
+ current = current[part];
57
+ }
58
+ return current;
59
+ }
60
+ function normalizeHookInput(input) {
61
+ const manifest = detectManifest();
62
+ const fields = manifest?.hookFields ?? DEFAULT_HOOK_FIELDS;
63
+ const sessionIdFromInput = resolveField(input, fields.sessionId);
64
+ const sessionIdFromEnv = "sessionIdEnv" in fields && fields.sessionIdEnv ? process.env[fields.sessionIdEnv] : void 0;
65
+ const sessionId = sessionIdFromInput ?? sessionIdFromEnv ?? process.env.MYCO_SESSION_ID ?? `s-${Date.now()}`;
66
+ return {
67
+ agent: manifest?.name ?? DEFAULT_AGENT_NAME,
68
+ sessionId,
69
+ transcriptPath: resolveField(input, fields.transcriptPath),
70
+ lastResponse: resolveField(input, fields.lastResponse),
71
+ prompt: resolveField(input, fields.prompt),
72
+ toolName: resolveField(input, fields.toolName),
73
+ toolInput: resolveField(input, fields.toolInput),
74
+ toolOutput: resolveField(input, fields.toolOutput),
75
+ raw: input
76
+ };
77
+ }
78
+
79
+ export {
80
+ readStdin,
81
+ normalizeHookInput
82
+ };
83
+ //# sourceMappingURL=chunk-RR75ZKEV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/read-stdin.ts","../src/hooks/normalize.ts"],"sourcesContent":["import { STDIN_TIMEOUT_MS } from '../constants.js';\n\nexport function readStdin(): Promise<string> {\n return new Promise((resolve) => {\n let data = '';\n process.stdin.on('data', (chunk: Buffer) => { data += chunk; });\n process.stdin.on('end', () => resolve(data));\n setTimeout(() => resolve(data || '{}'), STDIN_TIMEOUT_MS);\n });\n}\n","/**\n * Hook payload normalization layer.\n *\n * Each agent sends different field names in hook stdin (e.g., Claude Code uses\n * `session_id`, VS Code uses `sessionId`, Windsurf uses `trajectory_id`).\n * This module detects the active agent, loads its manifest, and maps the\n * raw input to a canonical shape that all hooks can consume uniformly.\n */\n\nimport { loadManifests } from '../symbionts/detect.js';\nimport type { SymbiontManifest } from '../symbionts/manifest-schema.js';\n\n/** Default field mappings when no agent manifest is detected (Claude Code conventions). */\nconst DEFAULT_HOOK_FIELDS = {\n sessionId: 'session_id',\n transcriptPath: 'transcript_path',\n lastResponse: 'last_assistant_message',\n prompt: 'prompt',\n toolName: 'tool_name',\n toolInput: 'tool_input',\n toolOutput: 'tool_output',\n} as const;\n\n/** Canonical hook input with normalized field names. */\nexport interface NormalizedHookInput {\n /** Detected agent name from manifest (e.g., 'claude-code', 'codex', 'windsurf'). */\n agent: string;\n sessionId: string;\n transcriptPath?: string;\n lastResponse?: string;\n prompt?: string;\n toolName?: string;\n toolInput?: unknown;\n toolOutput?: unknown;\n /** The full raw input for any fields not covered by the mapping. */\n raw: Record<string, unknown>;\n}\n\n/** Default agent name when no manifest is detected. */\nconst DEFAULT_AGENT_NAME = 'claude-code';\n\n/** Cached manifest for the detected agent — resolved once per process. */\nlet cachedManifest: SymbiontManifest | null | undefined;\n\nfunction detectManifest(): SymbiontManifest | null {\n if (cachedManifest !== undefined) return cachedManifest;\n\n const manifests = loadManifests();\n\n // Try env-var detection: check pluginRootEnvVar for each manifest\n for (const m of manifests) {\n if (process.env[m.pluginRootEnvVar]) {\n cachedManifest = m;\n return m;\n }\n }\n\n // Fallback: check sessionIdEnv (e.g., GEMINI_SESSION_ID)\n for (const m of manifests) {\n if (m.hookFields.sessionIdEnv && process.env[m.hookFields.sessionIdEnv]) {\n cachedManifest = m;\n return m;\n }\n }\n\n cachedManifest = null;\n return null;\n}\n\n/**\n * Resolve a potentially nested field path from the input.\n * Supports dot notation for nested objects (e.g., \"tool_info.command_line\").\n */\nfunction resolveField(input: Record<string, unknown>, fieldPath: string): unknown {\n const parts = fieldPath.split('.');\n let current: unknown = input;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== 'object') return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\n/**\n * Normalize a raw hook input using the active agent's manifest field mappings.\n * Falls back to Claude Code field names if no agent is detected.\n */\nexport function normalizeHookInput(input: Record<string, unknown>): NormalizedHookInput {\n const manifest = detectManifest();\n const fields = manifest?.hookFields ?? DEFAULT_HOOK_FIELDS;\n\n // Resolve session ID: try the mapped field, then env var fallback, then MYCO_SESSION_ID\n const sessionIdFromInput = resolveField(input, fields.sessionId) as string | undefined;\n const sessionIdFromEnv = 'sessionIdEnv' in fields && fields.sessionIdEnv\n ? process.env[fields.sessionIdEnv]\n : undefined;\n const sessionId = sessionIdFromInput\n ?? sessionIdFromEnv\n ?? process.env.MYCO_SESSION_ID\n ?? `s-${Date.now()}`;\n\n return {\n agent: manifest?.name ?? DEFAULT_AGENT_NAME,\n sessionId,\n transcriptPath: resolveField(input, fields.transcriptPath) as string | undefined,\n lastResponse: resolveField(input, fields.lastResponse) as string | undefined,\n prompt: resolveField(input, fields.prompt) as string | undefined,\n toolName: resolveField(input, fields.toolName) as string | undefined,\n toolInput: resolveField(input, fields.toolInput),\n toolOutput: resolveField(input, fields.toolOutput),\n raw: input,\n };\n}\n\n/** Reset cached manifest — exposed for testing only. */\nexport function _resetManifestCache(): void {\n cachedManifest = undefined;\n}\n"],"mappings":";;;;;;;;;AAEO,SAAS,YAA6B;AAC3C,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI,OAAO;AACX,YAAQ,MAAM,GAAG,QAAQ,CAAC,UAAkB;AAAE,cAAQ;AAAA,IAAO,CAAC;AAC9D,YAAQ,MAAM,GAAG,OAAO,MAAM,QAAQ,IAAI,CAAC;AAC3C,eAAW,MAAM,QAAQ,QAAQ,IAAI,GAAG,gBAAgB;AAAA,EAC1D,CAAC;AACH;;;ACIA,IAAM,sBAAsB;AAAA,EAC1B,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,WAAW;AAAA,EACX,YAAY;AACd;AAkBA,IAAM,qBAAqB;AAG3B,IAAI;AAEJ,SAAS,iBAA0C;AACjD,MAAI,mBAAmB,OAAW,QAAO;AAEzC,QAAM,YAAY,cAAc;AAGhC,aAAW,KAAK,WAAW;AACzB,QAAI,QAAQ,IAAI,EAAE,gBAAgB,GAAG;AACnC,uBAAiB;AACjB,aAAO;AAAA,IACT;AAAA,EACF;AAGA,aAAW,KAAK,WAAW;AACzB,QAAI,EAAE,WAAW,gBAAgB,QAAQ,IAAI,EAAE,WAAW,YAAY,GAAG;AACvE,uBAAiB;AACjB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,mBAAiB;AACjB,SAAO;AACT;AAMA,SAAS,aAAa,OAAgC,WAA4B;AAChF,QAAM,QAAQ,UAAU,MAAM,GAAG;AACjC,MAAI,UAAmB;AACvB,aAAW,QAAQ,OAAO;AACxB,QAAI,YAAY,QAAQ,YAAY,UAAa,OAAO,YAAY,SAAU,QAAO;AACrF,cAAW,QAAoC,IAAI;AAAA,EACrD;AACA,SAAO;AACT;AAMO,SAAS,mBAAmB,OAAqD;AACtF,QAAM,WAAW,eAAe;AAChC,QAAM,SAAS,UAAU,cAAc;AAGvC,QAAM,qBAAqB,aAAa,OAAO,OAAO,SAAS;AAC/D,QAAM,mBAAmB,kBAAkB,UAAU,OAAO,eACxD,QAAQ,IAAI,OAAO,YAAY,IAC/B;AACJ,QAAM,YAAY,sBACb,oBACA,QAAQ,IAAI,mBACZ,KAAK,KAAK,IAAI,CAAC;AAEpB,SAAO;AAAA,IACL,OAAO,UAAU,QAAQ;AAAA,IACzB;AAAA,IACA,gBAAgB,aAAa,OAAO,OAAO,cAAc;AAAA,IACzD,cAAc,aAAa,OAAO,OAAO,YAAY;AAAA,IACrD,QAAQ,aAAa,OAAO,OAAO,MAAM;AAAA,IACzC,UAAU,aAAa,OAAO,OAAO,QAAQ;AAAA,IAC7C,WAAW,aAAa,OAAO,OAAO,SAAS;AAAA,IAC/C,YAAY,aAAa,OAAO,OAAO,UAAU;AAAA,IACjD,KAAK;AAAA,EACP;AACF;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  CloudEmbeddingBase
4
- } from "./chunk-FPMEIN2W.js";
4
+ } from "./chunk-QL2RBFIC.js";
5
5
 
6
6
  // src/cli/providers/openai-embeddings.ts
7
7
  var OPENAI_API_KEY_ENV = "MYCO_OPENAI_API_KEY";
@@ -23,4 +23,4 @@ export {
23
23
  OPENAI_API_KEY_ENV,
24
24
  OpenAIEmbeddingProvider
25
25
  };
26
- //# sourceMappingURL=chunk-5QERXFH7.js.map
26
+ //# sourceMappingURL=chunk-SW62AX75.js.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  syncRow
4
- } from "./chunk-XLY3REL3.js";
4
+ } from "./chunk-4VSNNMEU.js";
5
5
  import {
6
6
  getDatabase
7
7
  } from "./chunk-MYX5NCRH.js";
@@ -14,7 +14,7 @@ import {
14
14
  EDGE_TYPE_HAS_BATCH,
15
15
  GRAPH_EDGE_DEFAULT_CONFIDENCE,
16
16
  QUERY_DEFAULT_LIST_LIMIT
17
- } from "./chunk-76ZO5RGT.js";
17
+ } from "./chunk-PIRWYDOH.js";
18
18
 
19
19
  // src/db/queries/batches.ts
20
20
  var DEFAULT_UNPROCESSED_LIMIT = 100;
@@ -901,4 +901,4 @@ export {
901
901
  createSporeLineage,
902
902
  createBatchLineage
903
903
  };
904
- //# sourceMappingURL=chunk-FFQES5MC.js.map
904
+ //# sourceMappingURL=chunk-TCGOSLW6.js.map
@@ -11,7 +11,7 @@ var cached;
11
11
  function getPluginVersion() {
12
12
  if (cached) return cached;
13
13
  if (true) {
14
- cached = "0.10.0";
14
+ cached = "0.12.0";
15
15
  return cached;
16
16
  }
17
17
  const root = findPackageRoot(path.dirname(fileURLToPath(import.meta.url)));
@@ -32,4 +32,4 @@ function getPluginVersion() {
32
32
  export {
33
33
  getPluginVersion
34
34
  };
35
- //# sourceMappingURL=chunk-G2LQBFE3.js.map
35
+ //# sourceMappingURL=chunk-TY7A5OZ5.js.map