@monoes/monomindcli 2.9.25 → 2.10.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 (284) hide show
  1. package/.claude/helpers/control-start.cjs +15 -1
  2. package/.claude/helpers/handlers/edit-handler.cjs +3 -2
  3. package/.claude/helpers/handlers/route-handler.cjs +19 -4
  4. package/.claude/helpers/hook-handler.cjs +2 -0
  5. package/.claude/helpers/utils/monograph.cjs +8 -0
  6. package/.claude/skills/mastermind/SKILL.md +21 -0
  7. package/.claude/skills/mastermind/references/antigravity-tools.md +60 -0
  8. package/.claude/skills/mastermind/references/claude-code-tools.md +50 -0
  9. package/.claude/skills/mastermind/references/codex-tools.md +64 -0
  10. package/.claude/skills/mastermind/references/copilot-tools.md +49 -0
  11. package/.claude/skills/mastermind/references/gemini-tools.md +63 -0
  12. package/.claude/skills/mastermind/references/pi-tools.md +28 -0
  13. package/.claude/skills/mastermind-org/SKILL.md +16 -0
  14. package/dist/src/commands/agent-exec.d.ts +19 -0
  15. package/dist/src/commands/agent-exec.d.ts.map +1 -0
  16. package/dist/src/commands/agent-exec.js +301 -0
  17. package/dist/src/commands/agent-exec.js.map +1 -0
  18. package/dist/src/commands/agent.d.ts.map +1 -1
  19. package/dist/src/commands/agent.js +12 -0
  20. package/dist/src/commands/agent.js.map +1 -1
  21. package/dist/src/commands/browse.d.ts +2 -10
  22. package/dist/src/commands/browse.d.ts.map +1 -1
  23. package/dist/src/commands/browse.js +7 -2
  24. package/dist/src/commands/browse.js.map +1 -1
  25. package/dist/src/commands/doctor.d.ts.map +1 -1
  26. package/dist/src/commands/doctor.js +16 -1
  27. package/dist/src/commands/doctor.js.map +1 -1
  28. package/dist/src/commands/index.d.ts +1 -1
  29. package/dist/src/commands/index.d.ts.map +1 -1
  30. package/dist/src/commands/index.js +10 -1
  31. package/dist/src/commands/index.js.map +1 -1
  32. package/dist/src/commands/init.d.ts.map +1 -1
  33. package/dist/src/commands/init.js +63 -5
  34. package/dist/src/commands/init.js.map +1 -1
  35. package/dist/src/commands/mastermind.d.ts +10 -0
  36. package/dist/src/commands/mastermind.d.ts.map +1 -0
  37. package/dist/src/commands/mastermind.js +62 -0
  38. package/dist/src/commands/mastermind.js.map +1 -0
  39. package/dist/src/commands/org-observe.d.ts +11 -0
  40. package/dist/src/commands/org-observe.d.ts.map +1 -1
  41. package/dist/src/commands/org-observe.js +200 -2
  42. package/dist/src/commands/org-observe.js.map +1 -1
  43. package/dist/src/commands/org.d.ts.map +1 -1
  44. package/dist/src/commands/org.js +154 -0
  45. package/dist/src/commands/org.js.map +1 -1
  46. package/dist/src/commands/platforms.d.ts +9 -7
  47. package/dist/src/commands/platforms.d.ts.map +1 -1
  48. package/dist/src/commands/platforms.js +225 -571
  49. package/dist/src/commands/platforms.js.map +1 -1
  50. package/dist/src/commands/status.d.ts.map +1 -1
  51. package/dist/src/commands/status.js +7 -1
  52. package/dist/src/commands/status.js.map +1 -1
  53. package/dist/src/commands/update.d.ts.map +1 -1
  54. package/dist/src/commands/update.js +22 -0
  55. package/dist/src/commands/update.js.map +1 -1
  56. package/dist/src/index.d.ts +3 -1
  57. package/dist/src/index.d.ts.map +1 -1
  58. package/dist/src/index.js +10 -3
  59. package/dist/src/index.js.map +1 -1
  60. package/dist/src/init/codex-generator.d.ts.map +1 -1
  61. package/dist/src/init/codex-generator.js +5 -3
  62. package/dist/src/init/codex-generator.js.map +1 -1
  63. package/dist/src/init/executor.d.ts +6 -0
  64. package/dist/src/init/executor.d.ts.map +1 -1
  65. package/dist/src/init/executor.js +32 -3
  66. package/dist/src/init/executor.js.map +1 -1
  67. package/dist/src/init/mcp-generator.d.ts.map +1 -1
  68. package/dist/src/init/mcp-generator.js +5 -40
  69. package/dist/src/init/mcp-generator.js.map +1 -1
  70. package/dist/src/init/shared.d.ts.map +1 -1
  71. package/dist/src/init/shared.js +6 -5
  72. package/dist/src/init/shared.js.map +1 -1
  73. package/dist/src/init/types.d.ts +4 -0
  74. package/dist/src/init/types.d.ts.map +1 -1
  75. package/dist/src/init/types.js.map +1 -1
  76. package/dist/src/init/upgrade.d.ts.map +1 -1
  77. package/dist/src/init/upgrade.js +11 -1
  78. package/dist/src/init/upgrade.js.map +1 -1
  79. package/dist/src/init/write-antigravity.d.ts.map +1 -1
  80. package/dist/src/init/write-antigravity.js +5 -50
  81. package/dist/src/init/write-antigravity.js.map +1 -1
  82. package/dist/src/init/write-claude.d.ts.map +1 -1
  83. package/dist/src/init/write-claude.js +4 -88
  84. package/dist/src/init/write-claude.js.map +1 -1
  85. package/dist/src/init/write-codex.d.ts.map +1 -1
  86. package/dist/src/init/write-codex.js +12 -8
  87. package/dist/src/init/write-codex.js.map +1 -1
  88. package/dist/src/init/write-kimicode.d.ts.map +1 -1
  89. package/dist/src/init/write-kimicode.js +4 -48
  90. package/dist/src/init/write-kimicode.js.map +1 -1
  91. package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
  92. package/dist/src/knowledge/document-pipeline.js +6 -4
  93. package/dist/src/knowledge/document-pipeline.js.map +1 -1
  94. package/dist/src/knowledge/eval/harness.d.ts.map +1 -1
  95. package/dist/src/knowledge/eval/harness.js +9 -11
  96. package/dist/src/knowledge/eval/harness.js.map +1 -1
  97. package/dist/src/mastermind/manifest-data.d.ts +10 -0
  98. package/dist/src/mastermind/manifest-data.d.ts.map +1 -0
  99. package/dist/src/mastermind/manifest-data.js +67 -0
  100. package/dist/src/mastermind/manifest-data.js.map +1 -0
  101. package/dist/src/mastermind/manifest.d.ts +22 -0
  102. package/dist/src/mastermind/manifest.d.ts.map +1 -0
  103. package/dist/src/mastermind/manifest.js +36 -0
  104. package/dist/src/mastermind/manifest.js.map +1 -0
  105. package/dist/src/mcp-client.d.ts.map +1 -1
  106. package/dist/src/mcp-client.js +2 -0
  107. package/dist/src/mcp-client.js.map +1 -1
  108. package/dist/src/mcp-tools/index.d.ts +1 -0
  109. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  110. package/dist/src/mcp-tools/index.js +1 -0
  111. package/dist/src/mcp-tools/index.js.map +1 -1
  112. package/dist/src/mcp-tools/platforms-tools.d.ts +5 -0
  113. package/dist/src/mcp-tools/platforms-tools.d.ts.map +1 -0
  114. package/dist/src/mcp-tools/platforms-tools.js +38 -0
  115. package/dist/src/mcp-tools/platforms-tools.js.map +1 -0
  116. package/dist/src/memory/intelligence.d.ts.map +1 -1
  117. package/dist/src/memory/intelligence.js +54 -20
  118. package/dist/src/memory/intelligence.js.map +1 -1
  119. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  120. package/dist/src/memory/memory-bridge.js +3 -2
  121. package/dist/src/memory/memory-bridge.js.map +1 -1
  122. package/dist/src/memory/memory-kg.js +3 -3
  123. package/dist/src/memory/memory-kg.js.map +1 -1
  124. package/dist/src/monovector/diff-classifier.d.ts +2 -2
  125. package/dist/src/monovector/diff-classifier.d.ts.map +1 -1
  126. package/dist/src/monovector/diff-classifier.js.map +1 -1
  127. package/dist/src/orgrt/agent-exec.d.ts +71 -0
  128. package/dist/src/orgrt/agent-exec.d.ts.map +1 -0
  129. package/dist/src/orgrt/agent-exec.js +463 -0
  130. package/dist/src/orgrt/agent-exec.js.map +1 -0
  131. package/dist/src/orgrt/runner-registry.d.ts +62 -0
  132. package/dist/src/orgrt/runner-registry.d.ts.map +1 -0
  133. package/dist/src/orgrt/runner-registry.js +201 -0
  134. package/dist/src/orgrt/runner-registry.js.map +1 -0
  135. package/dist/src/orgrt/session.d.ts.map +1 -1
  136. package/dist/src/orgrt/session.js +54 -24
  137. package/dist/src/orgrt/session.js.map +1 -1
  138. package/dist/src/orgrt/task-dag.d.ts.map +1 -1
  139. package/dist/src/orgrt/task-dag.js +5 -1
  140. package/dist/src/orgrt/task-dag.js.map +1 -1
  141. package/dist/src/platform-adapters/core.d.ts +20 -0
  142. package/dist/src/platform-adapters/core.d.ts.map +1 -0
  143. package/dist/src/platform-adapters/core.js +34 -0
  144. package/dist/src/platform-adapters/core.js.map +1 -0
  145. package/dist/src/platform-adapters/discovery.d.ts +15 -0
  146. package/dist/src/platform-adapters/discovery.d.ts.map +1 -0
  147. package/dist/src/platform-adapters/discovery.js +64 -0
  148. package/dist/src/platform-adapters/discovery.js.map +1 -0
  149. package/dist/src/platform-adapters/docs.d.ts +4 -0
  150. package/dist/src/platform-adapters/docs.d.ts.map +1 -0
  151. package/dist/src/platform-adapters/docs.js +34 -0
  152. package/dist/src/platform-adapters/docs.js.map +1 -0
  153. package/dist/src/platform-adapters/hook-bridge.d.ts +44 -0
  154. package/dist/src/platform-adapters/hook-bridge.d.ts.map +1 -0
  155. package/dist/src/platform-adapters/hook-bridge.js +133 -0
  156. package/dist/src/platform-adapters/hook-bridge.js.map +1 -0
  157. package/dist/src/platform-adapters/merge.d.ts +32 -0
  158. package/dist/src/platform-adapters/merge.d.ts.map +1 -0
  159. package/dist/src/platform-adapters/merge.js +209 -0
  160. package/dist/src/platform-adapters/merge.js.map +1 -0
  161. package/dist/src/platform-adapters/migration.d.ts +31 -0
  162. package/dist/src/platform-adapters/migration.d.ts.map +1 -0
  163. package/dist/src/platform-adapters/migration.js +402 -0
  164. package/dist/src/platform-adapters/migration.js.map +1 -0
  165. package/dist/src/platform-adapters/operations.d.ts +23 -0
  166. package/dist/src/platform-adapters/operations.d.ts.map +1 -0
  167. package/dist/src/platform-adapters/operations.js +405 -0
  168. package/dist/src/platform-adapters/operations.js.map +1 -0
  169. package/dist/src/platform-adapters/registry.d.ts +9 -0
  170. package/dist/src/platform-adapters/registry.d.ts.map +1 -0
  171. package/dist/src/platform-adapters/registry.js +614 -0
  172. package/dist/src/platform-adapters/registry.js.map +1 -0
  173. package/dist/src/platform-adapters/renderers/agents.d.ts +5 -0
  174. package/dist/src/platform-adapters/renderers/agents.d.ts.map +1 -0
  175. package/dist/src/platform-adapters/renderers/agents.js +46 -0
  176. package/dist/src/platform-adapters/renderers/agents.js.map +1 -0
  177. package/dist/src/platform-adapters/renderers/aider.d.ts +2 -0
  178. package/dist/src/platform-adapters/renderers/aider.d.ts.map +1 -0
  179. package/dist/src/platform-adapters/renderers/aider.js +3 -0
  180. package/dist/src/platform-adapters/renderers/aider.js.map +1 -0
  181. package/dist/src/platform-adapters/renderers/antigravity.d.ts +2 -0
  182. package/dist/src/platform-adapters/renderers/antigravity.d.ts.map +1 -0
  183. package/dist/src/platform-adapters/renderers/antigravity.js +3 -0
  184. package/dist/src/platform-adapters/renderers/antigravity.js.map +1 -0
  185. package/dist/src/platform-adapters/renderers/claude.d.ts +2 -0
  186. package/dist/src/platform-adapters/renderers/claude.d.ts.map +1 -0
  187. package/dist/src/platform-adapters/renderers/claude.js +3 -0
  188. package/dist/src/platform-adapters/renderers/claude.js.map +1 -0
  189. package/dist/src/platform-adapters/renderers/codex.d.ts +2 -0
  190. package/dist/src/platform-adapters/renderers/codex.d.ts.map +1 -0
  191. package/dist/src/platform-adapters/renderers/codex.js +3 -0
  192. package/dist/src/platform-adapters/renderers/codex.js.map +1 -0
  193. package/dist/src/platform-adapters/renderers/commands.d.ts +13 -0
  194. package/dist/src/platform-adapters/renderers/commands.d.ts.map +1 -0
  195. package/dist/src/platform-adapters/renderers/commands.js +78 -0
  196. package/dist/src/platform-adapters/renderers/commands.js.map +1 -0
  197. package/dist/src/platform-adapters/renderers/copilot.d.ts +2 -0
  198. package/dist/src/platform-adapters/renderers/copilot.d.ts.map +1 -0
  199. package/dist/src/platform-adapters/renderers/copilot.js +3 -0
  200. package/dist/src/platform-adapters/renderers/copilot.js.map +1 -0
  201. package/dist/src/platform-adapters/renderers/cursor.d.ts +2 -0
  202. package/dist/src/platform-adapters/renderers/cursor.d.ts.map +1 -0
  203. package/dist/src/platform-adapters/renderers/cursor.js +3 -0
  204. package/dist/src/platform-adapters/renderers/cursor.js.map +1 -0
  205. package/dist/src/platform-adapters/renderers/droid.d.ts +2 -0
  206. package/dist/src/platform-adapters/renderers/droid.d.ts.map +1 -0
  207. package/dist/src/platform-adapters/renderers/droid.js +3 -0
  208. package/dist/src/platform-adapters/renderers/droid.js.map +1 -0
  209. package/dist/src/platform-adapters/renderers/experimental.d.ts +6 -0
  210. package/dist/src/platform-adapters/renderers/experimental.d.ts.map +1 -0
  211. package/dist/src/platform-adapters/renderers/experimental.js +9 -0
  212. package/dist/src/platform-adapters/renderers/experimental.js.map +1 -0
  213. package/dist/src/platform-adapters/renderers/factory.d.ts +14 -0
  214. package/dist/src/platform-adapters/renderers/factory.d.ts.map +1 -0
  215. package/dist/src/platform-adapters/renderers/factory.js +53 -0
  216. package/dist/src/platform-adapters/renderers/factory.js.map +1 -0
  217. package/dist/src/platform-adapters/renderers/gemini.d.ts +2 -0
  218. package/dist/src/platform-adapters/renderers/gemini.d.ts.map +1 -0
  219. package/dist/src/platform-adapters/renderers/gemini.js +3 -0
  220. package/dist/src/platform-adapters/renderers/gemini.js.map +1 -0
  221. package/dist/src/platform-adapters/renderers/hooks.d.ts +37 -0
  222. package/dist/src/platform-adapters/renderers/hooks.d.ts.map +1 -0
  223. package/dist/src/platform-adapters/renderers/hooks.js +166 -0
  224. package/dist/src/platform-adapters/renderers/hooks.js.map +1 -0
  225. package/dist/src/platform-adapters/renderers/index.d.ts +8 -0
  226. package/dist/src/platform-adapters/renderers/index.d.ts.map +1 -0
  227. package/dist/src/platform-adapters/renderers/index.js +39 -0
  228. package/dist/src/platform-adapters/renderers/index.js.map +1 -0
  229. package/dist/src/platform-adapters/renderers/instructions.d.ts +6 -0
  230. package/dist/src/platform-adapters/renderers/instructions.d.ts.map +1 -0
  231. package/dist/src/platform-adapters/renderers/instructions.js +31 -0
  232. package/dist/src/platform-adapters/renderers/instructions.js.map +1 -0
  233. package/dist/src/platform-adapters/renderers/kimi.d.ts +2 -0
  234. package/dist/src/platform-adapters/renderers/kimi.d.ts.map +1 -0
  235. package/dist/src/platform-adapters/renderers/kimi.js +3 -0
  236. package/dist/src/platform-adapters/renderers/kimi.js.map +1 -0
  237. package/dist/src/platform-adapters/renderers/kiro.d.ts +2 -0
  238. package/dist/src/platform-adapters/renderers/kiro.d.ts.map +1 -0
  239. package/dist/src/platform-adapters/renderers/kiro.js +3 -0
  240. package/dist/src/platform-adapters/renderers/kiro.js.map +1 -0
  241. package/dist/src/platform-adapters/renderers/mcp.d.ts +29 -0
  242. package/dist/src/platform-adapters/renderers/mcp.d.ts.map +1 -0
  243. package/dist/src/platform-adapters/renderers/mcp.js +69 -0
  244. package/dist/src/platform-adapters/renderers/mcp.js.map +1 -0
  245. package/dist/src/platform-adapters/renderers/openclaw.d.ts +2 -0
  246. package/dist/src/platform-adapters/renderers/openclaw.d.ts.map +1 -0
  247. package/dist/src/platform-adapters/renderers/openclaw.js +3 -0
  248. package/dist/src/platform-adapters/renderers/openclaw.js.map +1 -0
  249. package/dist/src/platform-adapters/renderers/opencode.d.ts +2 -0
  250. package/dist/src/platform-adapters/renderers/opencode.d.ts.map +1 -0
  251. package/dist/src/platform-adapters/renderers/opencode.js +3 -0
  252. package/dist/src/platform-adapters/renderers/opencode.js.map +1 -0
  253. package/dist/src/platform-adapters/renderers/skills.d.ts +11 -0
  254. package/dist/src/platform-adapters/renderers/skills.d.ts.map +1 -0
  255. package/dist/src/platform-adapters/renderers/skills.js +60 -0
  256. package/dist/src/platform-adapters/renderers/skills.js.map +1 -0
  257. package/dist/src/platform-adapters/renderers/status.d.ts +23 -0
  258. package/dist/src/platform-adapters/renderers/status.d.ts.map +1 -0
  259. package/dist/src/platform-adapters/renderers/status.js +63 -0
  260. package/dist/src/platform-adapters/renderers/status.js.map +1 -0
  261. package/dist/src/platform-adapters/renderers/vscode.d.ts +2 -0
  262. package/dist/src/platform-adapters/renderers/vscode.d.ts.map +1 -0
  263. package/dist/src/platform-adapters/renderers/vscode.js +3 -0
  264. package/dist/src/platform-adapters/renderers/vscode.js.map +1 -0
  265. package/dist/src/platform-adapters/renderers/zed.d.ts +2 -0
  266. package/dist/src/platform-adapters/renderers/zed.d.ts.map +1 -0
  267. package/dist/src/platform-adapters/renderers/zed.js +3 -0
  268. package/dist/src/platform-adapters/renderers/zed.js.map +1 -0
  269. package/dist/src/platform-adapters/types.d.ts +105 -0
  270. package/dist/src/platform-adapters/types.d.ts.map +1 -0
  271. package/dist/src/platform-adapters/types.js +13 -0
  272. package/dist/src/platform-adapters/types.js.map +1 -0
  273. package/dist/src/platform-adapters/verification-ledger.d.ts +8 -0
  274. package/dist/src/platform-adapters/verification-ledger.d.ts.map +1 -0
  275. package/dist/src/platform-adapters/verification-ledger.js +24 -0
  276. package/dist/src/platform-adapters/verification-ledger.js.map +1 -0
  277. package/dist/src/protocol-capabilities.d.ts +29 -0
  278. package/dist/src/protocol-capabilities.d.ts.map +1 -0
  279. package/dist/src/protocol-capabilities.js +31 -0
  280. package/dist/src/protocol-capabilities.js.map +1 -0
  281. package/dist/src/ui/markdown.js +10 -0
  282. package/dist/tsconfig.tsbuildinfo +1 -1
  283. package/package.json +4 -4
  284. package/dist/src/ui/data/mastermind-sessions.json +0 -1
@@ -0,0 +1,34 @@
1
+ /** Platform-neutral Mastermind artifact intents. */
2
+ import { renderInstruction } from './renderers/instructions.js';
3
+ import { mcpCommand as renderMcpCommand } from './renderers/mcp.js';
4
+ import { renderSkillRouter } from './renderers/skills.js';
5
+ export { platformInstruction } from './renderers/instructions.js';
6
+ export const mcpCommand = renderMcpCommand;
7
+ /**
8
+ * Produce only artifacts that the evidence-gated registry permits. Individual
9
+ * renderers may add richer platform-specific data, but cannot turn fallback or
10
+ * discovery-only capabilities into files.
11
+ */
12
+ export function renderCoreArtifacts(adapter, options) {
13
+ const intents = [];
14
+ const diagnostics = [];
15
+ const instruction = renderInstruction(adapter, options.scope);
16
+ if (instruction) {
17
+ intents.push(instruction);
18
+ }
19
+ else {
20
+ diagnostics.push(`${adapter.displayName}: instructions are ${adapter.capabilities.instructions}; use the CLI fallback`);
21
+ }
22
+ const skills = renderSkillRouter(adapter, options.scope);
23
+ if (skills.length > 0) {
24
+ intents.push(...skills);
25
+ }
26
+ else {
27
+ diagnostics.push(`${adapter.displayName}: use monomind mastermind run <skill> --print for workflow fallback`);
28
+ }
29
+ if (adapter.capabilities.mcp !== 'native') {
30
+ diagnostics.push(`${adapter.displayName}: MCP is ${adapter.capabilities.mcp}; use the Monomind CLI fallback`);
31
+ }
32
+ return { intents, diagnostics };
33
+ }
34
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/platform-adapters/core.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAQlE,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAwB,EACxB,OAA0B;IAE1B,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,IAAI,CACd,GAAG,OAAO,CAAC,WAAW,sBAAsB,OAAO,CAAC,YAAY,CAAC,YAAY,wBAAwB,CACtG,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,IAAI,CACd,GAAG,OAAO,CAAC,WAAW,qEAAqE,CAC5F,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC1C,WAAW,CAAC,IAAI,CACd,GAAG,OAAO,CAAC,WAAW,YAAY,OAAO,CAAC,YAAY,CAAC,GAAG,iCAAiC,CAC5F,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,15 @@
1
+ /** Read-only availability probes for adapters whose layouts must be discovered. */
2
+ import type { DiscoveryResult, PlatformAdapter } from './types.js';
3
+ export interface DiscoveryEnvironment {
4
+ /** Explicit configuration paths supplied by the caller's environment. */
5
+ environment?: Readonly<Record<string, string | undefined>>;
6
+ /** Injectable for deterministic callers and tests. This function must be read-only. */
7
+ exists?: (path: string) => boolean;
8
+ }
9
+ /**
10
+ * Reports whether an explicitly configured platform surface exists. It never
11
+ * creates files, derives fallback paths, or treats a configuration file as an
12
+ * artifact location; renderers must still validate any locations they use.
13
+ */
14
+ export declare function discover(adapter: PlatformAdapter, options?: DiscoveryEnvironment): DiscoveryResult;
15
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/platform-adapters/discovery.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAGnF,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAc,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3D,uFAAuF;IACvF,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACpC;AASD;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,oBAAyB,GACjC,eAAe,CAqDjB"}
@@ -0,0 +1,64 @@
1
+ /** Read-only availability probes for adapters whose layouts must be discovered. */
2
+ import { existsSync } from 'node:fs';
3
+ const CONFIG_PATH_VARIABLES = {
4
+ trae: 'TRAE_CONFIG_PATH',
5
+ hermes: 'HERMES_CONFIG_PATH',
6
+ antigravity: 'ANTIGRAVITY_CONFIG_PATH',
7
+ zed: 'ZED_CONFIG_PATH',
8
+ };
9
+ /**
10
+ * Reports whether an explicitly configured platform surface exists. It never
11
+ * creates files, derives fallback paths, or treats a configuration file as an
12
+ * artifact location; renderers must still validate any locations they use.
13
+ */
14
+ export function discover(adapter, options = {}) {
15
+ if (!adapter.requiresDiscovery) {
16
+ return {
17
+ available: false,
18
+ paths: {},
19
+ features: new Set(),
20
+ verification: {},
21
+ diagnostics: [`${adapter.id}: discovery is not required`],
22
+ };
23
+ }
24
+ const variable = CONFIG_PATH_VARIABLES[adapter.id];
25
+ if (!variable) {
26
+ return {
27
+ available: false,
28
+ paths: {},
29
+ features: new Set(),
30
+ verification: {},
31
+ diagnostics: [`${adapter.id}: no explicit discovery variable is configured`],
32
+ };
33
+ }
34
+ const configuredPath = (options.environment ?? process.env)[variable];
35
+ if (!configuredPath?.trim()) {
36
+ return {
37
+ available: false,
38
+ paths: {},
39
+ features: new Set(),
40
+ verification: {},
41
+ diagnostics: [`${adapter.id}: ${variable} must name an existing configuration path`],
42
+ };
43
+ }
44
+ const exists = options.exists ?? existsSync;
45
+ if (!exists(configuredPath)) {
46
+ return {
47
+ available: false,
48
+ paths: {},
49
+ features: new Set(),
50
+ verification: {},
51
+ diagnostics: [`${adapter.id}: ${variable} does not exist`],
52
+ };
53
+ }
54
+ return {
55
+ available: true,
56
+ paths: { config: configuredPath },
57
+ features: new Set(),
58
+ verification: {},
59
+ diagnostics: [
60
+ `${adapter.id}: explicit configuration path is available; artifact locations require renderer validation`,
61
+ ],
62
+ };
63
+ }
64
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/platform-adapters/discovery.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAUrC,MAAM,qBAAqB,GAAwC;IACjE,IAAI,EAAE,kBAAkB;IACxB,MAAM,EAAE,oBAAoB;IAC5B,WAAW,EAAE,yBAAyB;IACtC,GAAG,EAAE,iBAAiB;CACvB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CACtB,OAAwB,EACxB,OAAO,GAAyB,EAAE;IAElC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC/B,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,IAAI,GAAG,EAAE;YACnB,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,6BAA6B,CAAC;SAC1D,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,IAAI,GAAG,EAAE;YACnB,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,gDAAgD,CAAC;SAC7E,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtE,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5B,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,IAAI,GAAG,EAAE;YACnB,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,KAAK,QAAQ,2CAA2C,CAAC;SACrF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,IAAI,GAAG,EAAE;YACnB,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,KAAK,QAAQ,iBAAiB,CAAC;SAC3D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;QACjC,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE;YACX,GAAG,OAAO,CAAC,EAAE,4FAA4F;SAC1G;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Generated public compatibility matrix. */
2
+ import { type PlatformAdapter } from './registry.js';
3
+ export declare function renderCompatibilityMatrix(registry: Record<string, PlatformAdapter>): string;
4
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../../src/platform-adapters/docs.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C,OAAO,EAA8B,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AASjF,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,MAAM,CAqB3F"}
@@ -0,0 +1,34 @@
1
+ /** Generated public compatibility matrix. */
2
+ import { CAPABILITIES, PLATFORM_IDS } from './registry.js';
3
+ function symbol(level) {
4
+ if (level === 'native')
5
+ return 'native';
6
+ if (level === 'cli_fallback')
7
+ return 'CLI fallback';
8
+ if (level === 'experimental')
9
+ return 'experimental';
10
+ return 'unsupported';
11
+ }
12
+ export function renderCompatibilityMatrix(registry) {
13
+ const header = ['Platform', ...CAPABILITIES, 'Discovery'].join(' | ');
14
+ const separator = ['---', ...CAPABILITIES.map(() => '---'), '---'].join(' | ');
15
+ const rows = PLATFORM_IDS.map((id) => {
16
+ const adapter = registry[id];
17
+ return [
18
+ adapter.displayName,
19
+ ...CAPABILITIES.map((capability) => symbol(adapter.capabilities[capability])),
20
+ adapter.requiresDiscovery ? 'required' : 'no',
21
+ ].join(' | ');
22
+ });
23
+ return [
24
+ '# Platform compatibility',
25
+ '',
26
+ '> Generated from the evidence-gated adapter registry. “experimental” means Monomind does not install an unverified native artifact.',
27
+ '',
28
+ header,
29
+ separator,
30
+ ...rows,
31
+ '',
32
+ ].join('\n');
33
+ }
34
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/platform-adapters/docs.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAwB,MAAM,eAAe,CAAC;AAEjF,SAAS,MAAM,CAAC,KAAa;IAC3B,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACxC,IAAI,KAAK,KAAK,cAAc;QAAE,OAAO,cAAc,CAAC;IACpD,IAAI,KAAK,KAAK,cAAc;QAAE,OAAO,cAAc,CAAC;IACpD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAyC;IACjF,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,GAAG,YAAY,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO;YACL,OAAO,CAAC,WAAW;YACnB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;SAC9C,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO;QACL,0BAA0B;QAC1B,EAAE;QACF,qIAAqI;QACrI,EAAE;QACF,MAAM;QACN,SAAS;QACT,GAAG,IAAI;QACP,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,44 @@
1
+ /** Runtime-neutral hook input validation and decision handling. */
2
+ declare const HOOK_EVENTS: readonly ['PreToolUse', 'PostToolUse', 'SessionStart', 'SessionEnd'];
3
+ export interface NormalizedHookEvent {
4
+ event: (typeof HOOK_EVENTS)[number];
5
+ tool: string;
6
+ cwd: string;
7
+ sessionId: string;
8
+ input: Record<string, unknown>;
9
+ }
10
+ export type HookDecision = {
11
+ action: 'allow';
12
+ reason?: string;
13
+ } | {
14
+ action: 'block';
15
+ reason?: string;
16
+ } | {
17
+ action: 'observe';
18
+ reason?: string;
19
+ };
20
+ export interface HookPolicy {
21
+ mode: 'observe' | 'block';
22
+ timeoutMs: Partial<Record<NormalizedHookEvent['event'], number>>;
23
+ }
24
+ export declare const DEFAULT_TIMEOUTS: Readonly<Record<NormalizedHookEvent['event'], number>>;
25
+ /** Parse untrusted platform stdin without guessing a platform-specific payload shape. */
26
+ export declare function parseNormalizedHookEvent(payload: unknown): NormalizedHookEvent | null;
27
+ export type HookHandler = (event: NormalizedHookEvent) => Promise<HookDecision> | HookDecision;
28
+ /**
29
+ * A self-contained Node bridge for native hook runners. It intentionally has
30
+ * no dependency on a Claude installation or helper tree: every supported
31
+ * runner can invoke the same executable and receive a protocol-only result.
32
+ *
33
+ * The generated program currently performs neutral observation. Blocking is
34
+ * a transport capability, not an implicit policy: a future policy must return
35
+ * an explicit `block` decision before a runner is allowed to stop a tool.
36
+ */
37
+ export declare function renderNeutralHookBridge(): string;
38
+ /**
39
+ * Run a normalized policy handler. Observe mode is deliberately fail-open:
40
+ * handler failures and deadlines never become a platform-level block.
41
+ */
42
+ export declare function runHook(event: NormalizedHookEvent, policy: HookPolicy, handler?: HookHandler): Promise<HookDecision>;
43
+ export {};
44
+ //# sourceMappingURL=hook-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-bridge.d.ts","sourceRoot":"","sources":["../../../src/platform-adapters/hook-bridge.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAInE,QAAA,MAAM,WAAW,YAAI,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,CAAU,CAAC;AAEzF,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;CAClE;AAED,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAMhF,CAAC;AAYL,yFAAyF;AACzF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAGrF;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;AAE/F;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CA+DhD;AAyBD;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,WAAyC,GACjD,OAAO,CAAC,YAAY,CAAC,CAUvB"}
@@ -0,0 +1,133 @@
1
+ /** Runtime-neutral hook input validation and decision handling. */
2
+ import { z } from 'zod';
3
+ const HOOK_EVENTS = ['PreToolUse', 'PostToolUse', 'SessionStart', 'SessionEnd'];
4
+ export const DEFAULT_TIMEOUTS = Object.freeze({
5
+ PreToolUse: 2_000,
6
+ PostToolUse: 10_000,
7
+ SessionStart: 2_000,
8
+ SessionEnd: 2_000,
9
+ });
10
+ const NormalizedHookEventSchema = z
11
+ .object({
12
+ event: z.enum(HOOK_EVENTS),
13
+ tool: z.string(),
14
+ cwd: z.string(),
15
+ sessionId: z.string(),
16
+ input: z.record(z.string(), z.unknown()),
17
+ })
18
+ .strict();
19
+ /** Parse untrusted platform stdin without guessing a platform-specific payload shape. */
20
+ export function parseNormalizedHookEvent(payload) {
21
+ const result = NormalizedHookEventSchema.safeParse(payload);
22
+ return result.success ? result.data : null;
23
+ }
24
+ /**
25
+ * A self-contained Node bridge for native hook runners. It intentionally has
26
+ * no dependency on a Claude installation or helper tree: every supported
27
+ * runner can invoke the same executable and receive a protocol-only result.
28
+ *
29
+ * The generated program currently performs neutral observation. Blocking is
30
+ * a transport capability, not an implicit policy: a future policy must return
31
+ * an explicit `block` decision before a runner is allowed to stop a tool.
32
+ */
33
+ export function renderNeutralHookBridge() {
34
+ return `#!/usr/bin/env node
35
+ import { appendFileSync, mkdirSync, readFileSync } from 'node:fs';
36
+ import { dirname, join } from 'node:path';
37
+
38
+ const MAX_STDIN_BYTES = 1024 * 1024;
39
+ const DEFAULT_TIMEOUTS = { PreToolUse: 2000, PostToolUse: 10000, SessionStart: 2000, SessionEnd: 2000 };
40
+ const start = process.hrtime.bigint();
41
+ const args = new Set(process.argv.slice(2));
42
+ const blocking = args.has('--enable-blocking-hooks');
43
+
44
+ function eventName(value) {
45
+ return ['PreToolUse', 'PostToolUse', 'SessionStart', 'SessionEnd'].includes(value) ? value : null;
46
+ }
47
+
48
+ function normalize(payload) {
49
+ if (!payload || typeof payload !== 'object' || Array.isArray(payload)) return null;
50
+ const event = eventName(payload.hook_event_name || payload.event || payload.event_name);
51
+ const tool = payload.tool_name || payload.tool || payload.toolName || '';
52
+ const cwd = payload.cwd || payload.workspace || process.cwd();
53
+ const sessionId = payload.session_id || payload.sessionId || '';
54
+ const input = payload.tool_input || payload.input || {};
55
+ if (!event || typeof tool !== 'string' || typeof cwd !== 'string' || typeof sessionId !== 'string') return null;
56
+ if (!input || typeof input !== 'object' || Array.isArray(input)) return null;
57
+ return { event, tool, cwd, sessionId, input };
58
+ }
59
+
60
+ function writeLatency(event, cwd, action) {
61
+ try {
62
+ const latencyMs = Number(process.hrtime.bigint() - start) / 1e6;
63
+ const path = join(cwd, '.monomind', 'hook-latency.jsonl');
64
+ mkdirSync(dirname(path), { recursive: true });
65
+ appendFileSync(path, JSON.stringify({ event, action, latencyMs, timeoutMs: DEFAULT_TIMEOUTS[event] }) + '\\n', 'utf8');
66
+ return latencyMs;
67
+ } catch {
68
+ return Number(process.hrtime.bigint() - start) / 1e6;
69
+ }
70
+ }
71
+
72
+ function finish(decision, event, cwd) {
73
+ const latencyMs = writeLatency(event, cwd, decision.action);
74
+ // Hook protocols reserve stdout for the host. Diagnostics are structured
75
+ // stderr only, so a host can never mistake prose for an allow decision.
76
+ process.stderr.write(JSON.stringify({ decision: decision.action, reason: decision.reason, latencyMs }) + '\\n');
77
+ process.exitCode = blocking && decision.action === 'block' ? 2 : 0;
78
+ }
79
+
80
+ try {
81
+ const raw = readFileSync(0, 'utf8');
82
+ if (Buffer.byteLength(raw, 'utf8') > MAX_STDIN_BYTES) {
83
+ finish({ action: 'allow', reason: 'hook stdin exceeds 1 MiB' }, 'PreToolUse', process.cwd());
84
+ } else {
85
+ let payload;
86
+ try { payload = JSON.parse(raw || '{}'); } catch { payload = null; }
87
+ const event = normalize(payload);
88
+ if (!event) finish({ action: 'allow', reason: 'invalid hook payload' }, 'PreToolUse', process.cwd());
89
+ else finish({ action: 'allow' }, event.event, event.cwd);
90
+ }
91
+ } catch {
92
+ // A broken bridge must never make an observe hook block a user operation.
93
+ finish({ action: 'allow', reason: 'hook bridge failed open' }, 'PreToolUse', process.cwd());
94
+ }
95
+ `;
96
+ }
97
+ function timeoutFor(event, policy) {
98
+ const configured = policy.timeoutMs[event] ?? DEFAULT_TIMEOUTS[event];
99
+ return Number.isFinite(configured) && configured > 0 ? configured : DEFAULT_TIMEOUTS[event];
100
+ }
101
+ async function runWithTimeout(event, timeoutMs, handler) {
102
+ let timer;
103
+ try {
104
+ return await Promise.race([
105
+ Promise.resolve(handler(event)),
106
+ new Promise((_, reject) => {
107
+ timer = setTimeout(() => reject(new Error('hook bridge timed out')), timeoutMs);
108
+ }),
109
+ ]);
110
+ }
111
+ finally {
112
+ if (timer)
113
+ clearTimeout(timer);
114
+ }
115
+ }
116
+ /**
117
+ * Run a normalized policy handler. Observe mode is deliberately fail-open:
118
+ * handler failures and deadlines never become a platform-level block.
119
+ */
120
+ export async function runHook(event, policy, handler = () => ({ action: 'allow' })) {
121
+ try {
122
+ return await runWithTimeout(event, timeoutFor(event.event, policy), handler);
123
+ }
124
+ catch (error) {
125
+ if (policy.mode === 'observe')
126
+ return { action: 'allow' };
127
+ return {
128
+ action: 'observe',
129
+ reason: error instanceof Error ? error.message : 'hook bridge failed',
130
+ };
131
+ }
132
+ }
133
+ //# sourceMappingURL=hook-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-bridge.js","sourceRoot":"","sources":["../../../src/platform-adapters/hook-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /** Safe, format-neutral primitives for Monomind-managed configuration content. */
2
+ export interface SafeJsonResult {
3
+ content: string;
4
+ diagnostics: readonly string[];
5
+ }
6
+ type MarkerComment = '#' | '//';
7
+ /**
8
+ * Adds or replaces one managed marker block. Blocks for other artifacts and
9
+ * platforms are deliberately left untouched.
10
+ */
11
+ export declare function mergeManagedBlock(existing: string, marker: string, content: string, comment?: MarkerComment): string;
12
+ /** Removes exactly one artifact/platform block, leaving all other content unchanged. */
13
+ export declare function removeManagedBlock(content: string, artifact: string, platform: string): string;
14
+ /** Removes a block by its full marker for artifacts with qualified names. */
15
+ export declare function removeManagedMarker(content: string, marker: string): string;
16
+ /**
17
+ * SKILL.md requires YAML frontmatter to be its first bytes. Keep it outside
18
+ * the managed marker and replace only Monomind's body block. A same-name file
19
+ * may contain user guidance around the block; a different-name file is foreign
20
+ * and is never overwritten by an adapter install.
21
+ */
22
+ export declare function mergeSkillManagedBlock(existing: string, marker: string, rendered: string): SafeJsonResult;
23
+ /** Merges a named JSON object entry, leaving malformed input unmodified. */
24
+ export declare function safeJsonMerge(content: string, path: readonly string[], entry: unknown): SafeJsonResult;
25
+ /** Convenience form for callers that do not need malformed-input diagnostics. */
26
+ export declare function mergeNamedEntry(content: string, path: readonly string[], entry: unknown): string;
27
+ /** Removes a named JSON object entry, leaving malformed input unmodified. */
28
+ export declare function safeJsonRemove(content: string, path: readonly string[], name: string): SafeJsonResult;
29
+ /** Convenience form for callers that do not need malformed-input diagnostics. */
30
+ export declare function removeNamedEntry(content: string, path: readonly string[], name: string): string;
31
+ export {};
32
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/platform-adapters/merge.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAElF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAgCD,KAAK,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC;AAchC;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,aAAmB,GAC3B,MAAM,CAgBR;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9F;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG3E;AAcD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,cAAc,CAqBhB;AAgFD,4EAA4E;AAC5E,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,OAAO,GACb,cAAc,CAiBhB;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAEhG;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,MAAM,GACX,cAAc,CAahB;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/F"}
@@ -0,0 +1,209 @@
1
+ /** Safe, format-neutral primitives for Monomind-managed configuration content. */
2
+ function escapeRegExp(value) {
3
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
4
+ }
5
+ function isValidMarker(marker) {
6
+ return marker.trim().length > 0 && marker.trim() === marker && !/[\r\n]/.test(marker);
7
+ }
8
+ function markerBlockPattern(marker) {
9
+ if (!isValidMarker(marker))
10
+ return undefined;
11
+ const escapedMarker = escapeRegExp(marker);
12
+ const commentPrefix = '(?:(?:#|//)\\s*|<!--\\s*)?';
13
+ const suffix = '\\s*(?:-->)?[^\\S\\r\\n]*(?:\\r?\\n|$)';
14
+ return new RegExp(`^[\\t ]*${commentPrefix}monomind:start\\s+${escapedMarker}${suffix}[\\s\\S]*?^[\\t ]*${commentPrefix}monomind:end\\s+${escapedMarker}${suffix}`, 'gm');
15
+ }
16
+ function lineEnding(content) {
17
+ return content.includes('\r\n') ? '\r\n' : '\n';
18
+ }
19
+ function managedBlock(marker, content, eol, comment) {
20
+ const body = content.replace(/\r\n|\r|\n/g, eol).replace(new RegExp(`(?:${eol})+$`), '');
21
+ const start = `${comment} monomind:start ${marker}`;
22
+ const end = `${comment} monomind:end ${marker}`;
23
+ return body.length > 0 ? `${start}${eol}${body}${eol}${end}${eol}` : `${start}${eol}${end}${eol}`;
24
+ }
25
+ /**
26
+ * Adds or replaces one managed marker block. Blocks for other artifacts and
27
+ * platforms are deliberately left untouched.
28
+ */
29
+ export function mergeManagedBlock(existing, marker, content, comment = '#') {
30
+ const pattern = markerBlockPattern(marker);
31
+ if (!pattern)
32
+ return existing;
33
+ const block = managedBlock(marker, content, lineEnding(existing), comment);
34
+ let found = false;
35
+ const merged = existing.replace(pattern, () => {
36
+ if (found)
37
+ return '';
38
+ found = true;
39
+ return block;
40
+ });
41
+ if (found)
42
+ return merged;
43
+ return existing.length === 0 || /(?:\r?\n)$/.test(existing)
44
+ ? `${existing}${block}`
45
+ : `${existing}${lineEnding(existing)}${block}`;
46
+ }
47
+ /** Removes exactly one artifact/platform block, leaving all other content unchanged. */
48
+ export function removeManagedBlock(content, artifact, platform) {
49
+ return removeManagedMarker(content, `${artifact}:${platform}`);
50
+ }
51
+ /** Removes a block by its full marker for artifacts with qualified names. */
52
+ export function removeManagedMarker(content, marker) {
53
+ const pattern = markerBlockPattern(marker);
54
+ return pattern ? content.replace(pattern, '') : content;
55
+ }
56
+ function frontmatterEnd(content) {
57
+ if (!content.startsWith('---\n'))
58
+ return undefined;
59
+ const end = content.indexOf('\n---\n', 4);
60
+ return end === -1 ? undefined : end + '\n---\n'.length;
61
+ }
62
+ function skillName(content) {
63
+ const end = frontmatterEnd(content);
64
+ if (end === undefined)
65
+ return undefined;
66
+ return /^name:\s*([^\s]+)\s*$/m.exec(content.slice(0, end))?.[1];
67
+ }
68
+ /**
69
+ * SKILL.md requires YAML frontmatter to be its first bytes. Keep it outside
70
+ * the managed marker and replace only Monomind's body block. A same-name file
71
+ * may contain user guidance around the block; a different-name file is foreign
72
+ * and is never overwritten by an adapter install.
73
+ */
74
+ export function mergeSkillManagedBlock(existing, marker, rendered) {
75
+ const renderedEnd = frontmatterEnd(rendered);
76
+ const name = skillName(rendered);
77
+ if (renderedEnd === undefined || !name)
78
+ return { content: existing, diagnostics: ['ERROR: rendered skill has invalid frontmatter'] };
79
+ if (!existing) {
80
+ const header = rendered.slice(0, renderedEnd);
81
+ const body = rendered.slice(renderedEnd).replace(/^\n/, '');
82
+ return { content: `${header}${mergeManagedBlock('', marker, body)}`, diagnostics: [] };
83
+ }
84
+ const existingEnd = frontmatterEnd(existing);
85
+ if (existingEnd === undefined || skillName(existing) !== name) {
86
+ return {
87
+ content: existing,
88
+ diagnostics: [`ERROR: foreign SKILL.md prevents installing ${name}`],
89
+ };
90
+ }
91
+ const header = existing.slice(0, existingEnd);
92
+ const body = existing.slice(existingEnd);
93
+ const renderedBody = rendered.slice(renderedEnd).replace(/^\n/, '');
94
+ return { content: `${header}${mergeManagedBlock(body, marker, renderedBody)}`, diagnostics: [] };
95
+ }
96
+ function isJsonObject(value) {
97
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
98
+ }
99
+ function parseJsonObject(content) {
100
+ try {
101
+ const parsed = JSON.parse(content);
102
+ if (isJsonObject(parsed))
103
+ return { value: parsed };
104
+ return { content, diagnostics: ['ERROR: expected a JSON object at the document root'] };
105
+ }
106
+ catch (error) {
107
+ const detail = error instanceof Error ? error.message : String(error);
108
+ return { content, diagnostics: [`ERROR: invalid JSON: ${detail}`] };
109
+ }
110
+ }
111
+ function isSafeJsonResult(value) {
112
+ return !('value' in value);
113
+ }
114
+ function validatePath(path) {
115
+ if (path.length === 0)
116
+ return 'ERROR: named-entry path must contain an entry name';
117
+ if (path.some((segment) => segment.trim().length === 0))
118
+ return 'ERROR: named-entry path segments must not be empty';
119
+ return undefined;
120
+ }
121
+ function jsonIndent(content) {
122
+ const indentation = content.match(/\r?\n([\t ]+)"/u)?.[1];
123
+ if (!indentation)
124
+ return undefined;
125
+ return indentation.includes('\t') ? '\t' : indentation.length;
126
+ }
127
+ function stringifyJson(value, source) {
128
+ const rendered = JSON.stringify(value, null, jsonIndent(source));
129
+ return source.endsWith('\n') ? `${rendered}${lineEnding(source)}` : rendered;
130
+ }
131
+ function normalizeJsonValue(value) {
132
+ try {
133
+ const serialized = JSON.stringify(value);
134
+ if (serialized === undefined)
135
+ return { ok: false, diagnostic: 'ERROR: named-entry value is not JSON serializable' };
136
+ return { ok: true, value: JSON.parse(serialized) };
137
+ }
138
+ catch (error) {
139
+ const detail = error instanceof Error ? error.message : String(error);
140
+ return {
141
+ ok: false,
142
+ diagnostic: `ERROR: named-entry value is not JSON serializable: ${detail}`,
143
+ };
144
+ }
145
+ }
146
+ function sameJsonValue(left, right) {
147
+ return JSON.stringify(left) === JSON.stringify(right);
148
+ }
149
+ function parentForEntry(root, path, createMissing) {
150
+ let current = root;
151
+ for (const segment of path) {
152
+ const child = current[segment];
153
+ if (child === undefined && createMissing) {
154
+ const created = {};
155
+ current[segment] = created;
156
+ current = created;
157
+ continue;
158
+ }
159
+ if (!isJsonObject(child))
160
+ return `ERROR: JSON path segment "${segment}" is not an object`;
161
+ current = child;
162
+ }
163
+ return current;
164
+ }
165
+ /** Merges a named JSON object entry, leaving malformed input unmodified. */
166
+ export function safeJsonMerge(content, path, entry) {
167
+ const pathError = validatePath(path);
168
+ if (pathError)
169
+ return { content, diagnostics: [pathError] };
170
+ const parsed = parseJsonObject(content);
171
+ if (isSafeJsonResult(parsed))
172
+ return parsed;
173
+ const normalizedEntry = normalizeJsonValue(entry);
174
+ if (!normalizedEntry.ok)
175
+ return { content, diagnostics: [normalizedEntry.diagnostic] };
176
+ const parent = parentForEntry(parsed.value, path.slice(0, -1), true);
177
+ if (typeof parent === 'string')
178
+ return { content, diagnostics: [parent] };
179
+ const name = path[path.length - 1];
180
+ if (sameJsonValue(parent[name], normalizedEntry.value))
181
+ return { content, diagnostics: [] };
182
+ parent[name] = normalizedEntry.value;
183
+ return { content: stringifyJson(parsed.value, content), diagnostics: [] };
184
+ }
185
+ /** Convenience form for callers that do not need malformed-input diagnostics. */
186
+ export function mergeNamedEntry(content, path, entry) {
187
+ return safeJsonMerge(content, path, entry).content;
188
+ }
189
+ /** Removes a named JSON object entry, leaving malformed input unmodified. */
190
+ export function safeJsonRemove(content, path, name) {
191
+ const pathError = validatePath([...path, name]);
192
+ if (pathError)
193
+ return { content, diagnostics: [pathError] };
194
+ const parsed = parseJsonObject(content);
195
+ if (isSafeJsonResult(parsed))
196
+ return parsed;
197
+ const parent = parentForEntry(parsed.value, path, false);
198
+ if (typeof parent === 'string')
199
+ return { content, diagnostics: [parent] };
200
+ if (!(name in parent))
201
+ return { content, diagnostics: [] };
202
+ delete parent[name];
203
+ return { content: stringifyJson(parsed.value, content), diagnostics: [] };
204
+ }
205
+ /** Convenience form for callers that do not need malformed-input diagnostics. */
206
+ export function removeNamedEntry(content, path, name) {
207
+ return safeJsonRemove(content, path, name).content;
208
+ }
209
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/platform-adapters/merge.ts"],"names":[],"mappings":"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"}