@monoes/monomindcli 2.9.24 → 2.9.27

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 (254) 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/browse.d.ts +2 -10
  15. package/dist/src/commands/browse.d.ts.map +1 -1
  16. package/dist/src/commands/browse.js +7 -2
  17. package/dist/src/commands/browse.js.map +1 -1
  18. package/dist/src/commands/doctor.d.ts.map +1 -1
  19. package/dist/src/commands/doctor.js +16 -1
  20. package/dist/src/commands/doctor.js.map +1 -1
  21. package/dist/src/commands/index.d.ts +1 -1
  22. package/dist/src/commands/index.d.ts.map +1 -1
  23. package/dist/src/commands/index.js +10 -1
  24. package/dist/src/commands/index.js.map +1 -1
  25. package/dist/src/commands/init.d.ts.map +1 -1
  26. package/dist/src/commands/init.js +63 -5
  27. package/dist/src/commands/init.js.map +1 -1
  28. package/dist/src/commands/mastermind.d.ts +10 -0
  29. package/dist/src/commands/mastermind.d.ts.map +1 -0
  30. package/dist/src/commands/mastermind.js +62 -0
  31. package/dist/src/commands/mastermind.js.map +1 -0
  32. package/dist/src/commands/platforms.d.ts +9 -7
  33. package/dist/src/commands/platforms.d.ts.map +1 -1
  34. package/dist/src/commands/platforms.js +225 -571
  35. package/dist/src/commands/platforms.js.map +1 -1
  36. package/dist/src/commands/status.d.ts.map +1 -1
  37. package/dist/src/commands/status.js +7 -1
  38. package/dist/src/commands/status.js.map +1 -1
  39. package/dist/src/commands/update.d.ts.map +1 -1
  40. package/dist/src/commands/update.js +22 -0
  41. package/dist/src/commands/update.js.map +1 -1
  42. package/dist/src/init/codex-generator.d.ts.map +1 -1
  43. package/dist/src/init/codex-generator.js +5 -3
  44. package/dist/src/init/codex-generator.js.map +1 -1
  45. package/dist/src/init/executor.d.ts +6 -0
  46. package/dist/src/init/executor.d.ts.map +1 -1
  47. package/dist/src/init/executor.js +32 -3
  48. package/dist/src/init/executor.js.map +1 -1
  49. package/dist/src/init/mcp-generator.d.ts.map +1 -1
  50. package/dist/src/init/mcp-generator.js +5 -40
  51. package/dist/src/init/mcp-generator.js.map +1 -1
  52. package/dist/src/init/shared.d.ts.map +1 -1
  53. package/dist/src/init/shared.js +6 -5
  54. package/dist/src/init/shared.js.map +1 -1
  55. package/dist/src/init/types.d.ts +4 -0
  56. package/dist/src/init/types.d.ts.map +1 -1
  57. package/dist/src/init/types.js.map +1 -1
  58. package/dist/src/init/upgrade.d.ts.map +1 -1
  59. package/dist/src/init/upgrade.js +11 -1
  60. package/dist/src/init/upgrade.js.map +1 -1
  61. package/dist/src/init/write-antigravity.d.ts.map +1 -1
  62. package/dist/src/init/write-antigravity.js +5 -50
  63. package/dist/src/init/write-antigravity.js.map +1 -1
  64. package/dist/src/init/write-claude.d.ts.map +1 -1
  65. package/dist/src/init/write-claude.js +4 -88
  66. package/dist/src/init/write-claude.js.map +1 -1
  67. package/dist/src/init/write-codex.d.ts.map +1 -1
  68. package/dist/src/init/write-codex.js +20 -12
  69. package/dist/src/init/write-codex.js.map +1 -1
  70. package/dist/src/init/write-kimicode.d.ts.map +1 -1
  71. package/dist/src/init/write-kimicode.js +4 -48
  72. package/dist/src/init/write-kimicode.js.map +1 -1
  73. package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
  74. package/dist/src/knowledge/document-pipeline.js +6 -4
  75. package/dist/src/knowledge/document-pipeline.js.map +1 -1
  76. package/dist/src/knowledge/eval/harness.d.ts.map +1 -1
  77. package/dist/src/knowledge/eval/harness.js +9 -11
  78. package/dist/src/knowledge/eval/harness.js.map +1 -1
  79. package/dist/src/mastermind/manifest-data.d.ts +10 -0
  80. package/dist/src/mastermind/manifest-data.d.ts.map +1 -0
  81. package/dist/src/mastermind/manifest-data.js +67 -0
  82. package/dist/src/mastermind/manifest-data.js.map +1 -0
  83. package/dist/src/mastermind/manifest.d.ts +22 -0
  84. package/dist/src/mastermind/manifest.d.ts.map +1 -0
  85. package/dist/src/mastermind/manifest.js +36 -0
  86. package/dist/src/mastermind/manifest.js.map +1 -0
  87. package/dist/src/mcp-client.d.ts.map +1 -1
  88. package/dist/src/mcp-client.js +2 -0
  89. package/dist/src/mcp-client.js.map +1 -1
  90. package/dist/src/mcp-tools/index.d.ts +1 -0
  91. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  92. package/dist/src/mcp-tools/index.js +1 -0
  93. package/dist/src/mcp-tools/index.js.map +1 -1
  94. package/dist/src/mcp-tools/platforms-tools.d.ts +5 -0
  95. package/dist/src/mcp-tools/platforms-tools.d.ts.map +1 -0
  96. package/dist/src/mcp-tools/platforms-tools.js +38 -0
  97. package/dist/src/mcp-tools/platforms-tools.js.map +1 -0
  98. package/dist/src/memory/intelligence.d.ts.map +1 -1
  99. package/dist/src/memory/intelligence.js +54 -20
  100. package/dist/src/memory/intelligence.js.map +1 -1
  101. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  102. package/dist/src/memory/memory-bridge.js +3 -2
  103. package/dist/src/memory/memory-bridge.js.map +1 -1
  104. package/dist/src/memory/memory-kg.js +3 -3
  105. package/dist/src/memory/memory-kg.js.map +1 -1
  106. package/dist/src/monovector/diff-classifier.d.ts +2 -2
  107. package/dist/src/monovector/diff-classifier.d.ts.map +1 -1
  108. package/dist/src/monovector/diff-classifier.js.map +1 -1
  109. package/dist/src/orgrt/session.d.ts.map +1 -1
  110. package/dist/src/orgrt/session.js +54 -24
  111. package/dist/src/orgrt/session.js.map +1 -1
  112. package/dist/src/orgrt/task-dag.d.ts.map +1 -1
  113. package/dist/src/orgrt/task-dag.js +5 -1
  114. package/dist/src/orgrt/task-dag.js.map +1 -1
  115. package/dist/src/platform-adapters/core.d.ts +20 -0
  116. package/dist/src/platform-adapters/core.d.ts.map +1 -0
  117. package/dist/src/platform-adapters/core.js +34 -0
  118. package/dist/src/platform-adapters/core.js.map +1 -0
  119. package/dist/src/platform-adapters/discovery.d.ts +15 -0
  120. package/dist/src/platform-adapters/discovery.d.ts.map +1 -0
  121. package/dist/src/platform-adapters/discovery.js +64 -0
  122. package/dist/src/platform-adapters/discovery.js.map +1 -0
  123. package/dist/src/platform-adapters/docs.d.ts +4 -0
  124. package/dist/src/platform-adapters/docs.d.ts.map +1 -0
  125. package/dist/src/platform-adapters/docs.js +34 -0
  126. package/dist/src/platform-adapters/docs.js.map +1 -0
  127. package/dist/src/platform-adapters/hook-bridge.d.ts +44 -0
  128. package/dist/src/platform-adapters/hook-bridge.d.ts.map +1 -0
  129. package/dist/src/platform-adapters/hook-bridge.js +133 -0
  130. package/dist/src/platform-adapters/hook-bridge.js.map +1 -0
  131. package/dist/src/platform-adapters/merge.d.ts +32 -0
  132. package/dist/src/platform-adapters/merge.d.ts.map +1 -0
  133. package/dist/src/platform-adapters/merge.js +209 -0
  134. package/dist/src/platform-adapters/merge.js.map +1 -0
  135. package/dist/src/platform-adapters/migration.d.ts +31 -0
  136. package/dist/src/platform-adapters/migration.d.ts.map +1 -0
  137. package/dist/src/platform-adapters/migration.js +402 -0
  138. package/dist/src/platform-adapters/migration.js.map +1 -0
  139. package/dist/src/platform-adapters/operations.d.ts +23 -0
  140. package/dist/src/platform-adapters/operations.d.ts.map +1 -0
  141. package/dist/src/platform-adapters/operations.js +405 -0
  142. package/dist/src/platform-adapters/operations.js.map +1 -0
  143. package/dist/src/platform-adapters/registry.d.ts +9 -0
  144. package/dist/src/platform-adapters/registry.d.ts.map +1 -0
  145. package/dist/src/platform-adapters/registry.js +614 -0
  146. package/dist/src/platform-adapters/registry.js.map +1 -0
  147. package/dist/src/platform-adapters/renderers/agents.d.ts +5 -0
  148. package/dist/src/platform-adapters/renderers/agents.d.ts.map +1 -0
  149. package/dist/src/platform-adapters/renderers/agents.js +46 -0
  150. package/dist/src/platform-adapters/renderers/agents.js.map +1 -0
  151. package/dist/src/platform-adapters/renderers/aider.d.ts +2 -0
  152. package/dist/src/platform-adapters/renderers/aider.d.ts.map +1 -0
  153. package/dist/src/platform-adapters/renderers/aider.js +3 -0
  154. package/dist/src/platform-adapters/renderers/aider.js.map +1 -0
  155. package/dist/src/platform-adapters/renderers/antigravity.d.ts +2 -0
  156. package/dist/src/platform-adapters/renderers/antigravity.d.ts.map +1 -0
  157. package/dist/src/platform-adapters/renderers/antigravity.js +3 -0
  158. package/dist/src/platform-adapters/renderers/antigravity.js.map +1 -0
  159. package/dist/src/platform-adapters/renderers/claude.d.ts +2 -0
  160. package/dist/src/platform-adapters/renderers/claude.d.ts.map +1 -0
  161. package/dist/src/platform-adapters/renderers/claude.js +3 -0
  162. package/dist/src/platform-adapters/renderers/claude.js.map +1 -0
  163. package/dist/src/platform-adapters/renderers/codex.d.ts +2 -0
  164. package/dist/src/platform-adapters/renderers/codex.d.ts.map +1 -0
  165. package/dist/src/platform-adapters/renderers/codex.js +3 -0
  166. package/dist/src/platform-adapters/renderers/codex.js.map +1 -0
  167. package/dist/src/platform-adapters/renderers/commands.d.ts +13 -0
  168. package/dist/src/platform-adapters/renderers/commands.d.ts.map +1 -0
  169. package/dist/src/platform-adapters/renderers/commands.js +78 -0
  170. package/dist/src/platform-adapters/renderers/commands.js.map +1 -0
  171. package/dist/src/platform-adapters/renderers/copilot.d.ts +2 -0
  172. package/dist/src/platform-adapters/renderers/copilot.d.ts.map +1 -0
  173. package/dist/src/platform-adapters/renderers/copilot.js +3 -0
  174. package/dist/src/platform-adapters/renderers/copilot.js.map +1 -0
  175. package/dist/src/platform-adapters/renderers/cursor.d.ts +2 -0
  176. package/dist/src/platform-adapters/renderers/cursor.d.ts.map +1 -0
  177. package/dist/src/platform-adapters/renderers/cursor.js +3 -0
  178. package/dist/src/platform-adapters/renderers/cursor.js.map +1 -0
  179. package/dist/src/platform-adapters/renderers/droid.d.ts +2 -0
  180. package/dist/src/platform-adapters/renderers/droid.d.ts.map +1 -0
  181. package/dist/src/platform-adapters/renderers/droid.js +3 -0
  182. package/dist/src/platform-adapters/renderers/droid.js.map +1 -0
  183. package/dist/src/platform-adapters/renderers/experimental.d.ts +6 -0
  184. package/dist/src/platform-adapters/renderers/experimental.d.ts.map +1 -0
  185. package/dist/src/platform-adapters/renderers/experimental.js +9 -0
  186. package/dist/src/platform-adapters/renderers/experimental.js.map +1 -0
  187. package/dist/src/platform-adapters/renderers/factory.d.ts +14 -0
  188. package/dist/src/platform-adapters/renderers/factory.d.ts.map +1 -0
  189. package/dist/src/platform-adapters/renderers/factory.js +53 -0
  190. package/dist/src/platform-adapters/renderers/factory.js.map +1 -0
  191. package/dist/src/platform-adapters/renderers/gemini.d.ts +2 -0
  192. package/dist/src/platform-adapters/renderers/gemini.d.ts.map +1 -0
  193. package/dist/src/platform-adapters/renderers/gemini.js +3 -0
  194. package/dist/src/platform-adapters/renderers/gemini.js.map +1 -0
  195. package/dist/src/platform-adapters/renderers/hooks.d.ts +37 -0
  196. package/dist/src/platform-adapters/renderers/hooks.d.ts.map +1 -0
  197. package/dist/src/platform-adapters/renderers/hooks.js +166 -0
  198. package/dist/src/platform-adapters/renderers/hooks.js.map +1 -0
  199. package/dist/src/platform-adapters/renderers/index.d.ts +8 -0
  200. package/dist/src/platform-adapters/renderers/index.d.ts.map +1 -0
  201. package/dist/src/platform-adapters/renderers/index.js +39 -0
  202. package/dist/src/platform-adapters/renderers/index.js.map +1 -0
  203. package/dist/src/platform-adapters/renderers/instructions.d.ts +6 -0
  204. package/dist/src/platform-adapters/renderers/instructions.d.ts.map +1 -0
  205. package/dist/src/platform-adapters/renderers/instructions.js +31 -0
  206. package/dist/src/platform-adapters/renderers/instructions.js.map +1 -0
  207. package/dist/src/platform-adapters/renderers/kimi.d.ts +2 -0
  208. package/dist/src/platform-adapters/renderers/kimi.d.ts.map +1 -0
  209. package/dist/src/platform-adapters/renderers/kimi.js +3 -0
  210. package/dist/src/platform-adapters/renderers/kimi.js.map +1 -0
  211. package/dist/src/platform-adapters/renderers/kiro.d.ts +2 -0
  212. package/dist/src/platform-adapters/renderers/kiro.d.ts.map +1 -0
  213. package/dist/src/platform-adapters/renderers/kiro.js +3 -0
  214. package/dist/src/platform-adapters/renderers/kiro.js.map +1 -0
  215. package/dist/src/platform-adapters/renderers/mcp.d.ts +29 -0
  216. package/dist/src/platform-adapters/renderers/mcp.d.ts.map +1 -0
  217. package/dist/src/platform-adapters/renderers/mcp.js +69 -0
  218. package/dist/src/platform-adapters/renderers/mcp.js.map +1 -0
  219. package/dist/src/platform-adapters/renderers/openclaw.d.ts +2 -0
  220. package/dist/src/platform-adapters/renderers/openclaw.d.ts.map +1 -0
  221. package/dist/src/platform-adapters/renderers/openclaw.js +3 -0
  222. package/dist/src/platform-adapters/renderers/openclaw.js.map +1 -0
  223. package/dist/src/platform-adapters/renderers/opencode.d.ts +2 -0
  224. package/dist/src/platform-adapters/renderers/opencode.d.ts.map +1 -0
  225. package/dist/src/platform-adapters/renderers/opencode.js +3 -0
  226. package/dist/src/platform-adapters/renderers/opencode.js.map +1 -0
  227. package/dist/src/platform-adapters/renderers/skills.d.ts +11 -0
  228. package/dist/src/platform-adapters/renderers/skills.d.ts.map +1 -0
  229. package/dist/src/platform-adapters/renderers/skills.js +60 -0
  230. package/dist/src/platform-adapters/renderers/skills.js.map +1 -0
  231. package/dist/src/platform-adapters/renderers/status.d.ts +23 -0
  232. package/dist/src/platform-adapters/renderers/status.d.ts.map +1 -0
  233. package/dist/src/platform-adapters/renderers/status.js +63 -0
  234. package/dist/src/platform-adapters/renderers/status.js.map +1 -0
  235. package/dist/src/platform-adapters/renderers/vscode.d.ts +2 -0
  236. package/dist/src/platform-adapters/renderers/vscode.d.ts.map +1 -0
  237. package/dist/src/platform-adapters/renderers/vscode.js +3 -0
  238. package/dist/src/platform-adapters/renderers/vscode.js.map +1 -0
  239. package/dist/src/platform-adapters/renderers/zed.d.ts +2 -0
  240. package/dist/src/platform-adapters/renderers/zed.d.ts.map +1 -0
  241. package/dist/src/platform-adapters/renderers/zed.js +3 -0
  242. package/dist/src/platform-adapters/renderers/zed.js.map +1 -0
  243. package/dist/src/platform-adapters/types.d.ts +105 -0
  244. package/dist/src/platform-adapters/types.d.ts.map +1 -0
  245. package/dist/src/platform-adapters/types.js +13 -0
  246. package/dist/src/platform-adapters/types.js.map +1 -0
  247. package/dist/src/platform-adapters/verification-ledger.d.ts +8 -0
  248. package/dist/src/platform-adapters/verification-ledger.d.ts.map +1 -0
  249. package/dist/src/platform-adapters/verification-ledger.js +24 -0
  250. package/dist/src/platform-adapters/verification-ledger.js.map +1 -0
  251. package/dist/src/ui/markdown.js +10 -0
  252. package/dist/tsconfig.tsbuildinfo +1 -1
  253. package/package.json +2 -2
  254. package/dist/src/ui/data/mastermind-sessions.json +0 -1
@@ -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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"}
@@ -0,0 +1,31 @@
1
+ /** Detection and safe cleanup rules for pre-adapter platform installations. */
2
+ export interface LegacySurface {
3
+ id: string;
4
+ path: string;
5
+ scope: 'project' | 'user';
6
+ ownership: 'marker' | 'named-entry' | 'monomind-file';
7
+ action: 'remove-block' | 'remove-entry' | 'remove-file' | 'migrate';
8
+ }
9
+ export interface LegacyMigrationResult {
10
+ changed: readonly string[];
11
+ skipped: readonly string[];
12
+ diagnostics: readonly string[];
13
+ }
14
+ /**
15
+ * Every surface is explicit so detection can remain read-only and never infer
16
+ * ownership from an arbitrary file name or config location.
17
+ */
18
+ export declare const LEGACY_SURFACE_INVENTORY: readonly LegacySurface[];
19
+ export declare function isMonomindOwned(content: string): boolean;
20
+ export declare function findLegacySurfaces(root: string, scope: 'project' | 'user'): string[];
21
+ /** Remove only old marker blocks; callers retain unrelated content and keys. */
22
+ export declare function removeLegacyManagedBlocks(content: string): string;
23
+ /** Recover a YAML file corrupted by the historical HTML comment installer. */
24
+ export declare function deCorruptAiderYaml(content: string): string;
25
+ export declare function migrateLegacyArtifacts(root: string, scope: 'project' | 'user', options?: {
26
+ dryRun?: boolean;
27
+ removeLegacy?: boolean;
28
+ /** Called before a verified legacy artifact is changed or removed. */
29
+ beforeWrite?: (path: string) => void;
30
+ }): LegacyMigrationResult;
31
+ //# sourceMappingURL=migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/platform-adapters/migration.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAc/E,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,SAAS,EAAE,QAAQ,GAAG,aAAa,GAAG,eAAe,CAAC;IACtD,MAAM,EAAE,cAAc,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC;CACrE;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,aAAa,EA2J3D,CAAC;AAEH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,EAAE,CAapF;AAED,gFAAgF;AAChF,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOjE;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM1D;AA4GD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,GAAG,MAAM,EACzB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,GACL,qBAAqB,CAgHvB"}