@monoes/monomindcli 2.12.0 → 2.14.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 (185) hide show
  1. package/.claude/skills/mastermind/SKILL.md +1 -15
  2. package/README.md +1 -1
  3. package/dist/src/commands/doctor-mcp-probe.d.ts +48 -0
  4. package/dist/src/commands/doctor-mcp-probe.d.ts.map +1 -0
  5. package/dist/src/commands/doctor-mcp-probe.js +205 -0
  6. package/dist/src/commands/doctor-mcp-probe.js.map +1 -0
  7. package/dist/src/commands/doctor-monoes-checks.d.ts +1 -0
  8. package/dist/src/commands/doctor-monoes-checks.d.ts.map +1 -1
  9. package/dist/src/commands/doctor-monoes-checks.js +96 -34
  10. package/dist/src/commands/doctor-monoes-checks.js.map +1 -1
  11. package/dist/src/commands/doctor-project-checks.d.ts +31 -1
  12. package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
  13. package/dist/src/commands/doctor-project-checks.js +109 -4
  14. package/dist/src/commands/doctor-project-checks.js.map +1 -1
  15. package/dist/src/commands/doctor.d.ts.map +1 -1
  16. package/dist/src/commands/doctor.js +21 -3
  17. package/dist/src/commands/doctor.js.map +1 -1
  18. package/dist/src/commands/init.d.ts.map +1 -1
  19. package/dist/src/commands/init.js +29 -0
  20. package/dist/src/commands/init.js.map +1 -1
  21. package/dist/src/commands/mcp.d.ts.map +1 -1
  22. package/dist/src/commands/mcp.js +4 -3
  23. package/dist/src/commands/mcp.js.map +1 -1
  24. package/dist/src/commands/org-observe.d.ts.map +1 -1
  25. package/dist/src/commands/org-observe.js +14 -0
  26. package/dist/src/commands/org-observe.js.map +1 -1
  27. package/dist/src/commands/org.d.ts.map +1 -1
  28. package/dist/src/commands/org.js +21 -4
  29. package/dist/src/commands/org.js.map +1 -1
  30. package/dist/src/commands/ui.d.ts.map +1 -1
  31. package/dist/src/commands/ui.js +4 -0
  32. package/dist/src/commands/ui.js.map +1 -1
  33. package/dist/src/init/claudemd-generator.d.ts.map +1 -1
  34. package/dist/src/init/claudemd-generator.js +2 -1
  35. package/dist/src/init/claudemd-generator.js.map +1 -1
  36. package/dist/src/init/copy-assets.d.ts.map +1 -1
  37. package/dist/src/init/copy-assets.js +56 -18
  38. package/dist/src/init/copy-assets.js.map +1 -1
  39. package/dist/src/init/executor.d.ts.map +1 -1
  40. package/dist/src/init/executor.js +9 -1
  41. package/dist/src/init/executor.js.map +1 -1
  42. package/dist/src/init/mcp-generator.d.ts.map +1 -1
  43. package/dist/src/init/mcp-generator.js +3 -3
  44. package/dist/src/init/mcp-generator.js.map +1 -1
  45. package/dist/src/init/never-commit.d.ts +39 -0
  46. package/dist/src/init/never-commit.d.ts.map +1 -0
  47. package/dist/src/init/never-commit.js +15 -0
  48. package/dist/src/init/never-commit.js.map +1 -0
  49. package/dist/src/init/shared.d.ts +74 -1
  50. package/dist/src/init/shared.d.ts.map +1 -1
  51. package/dist/src/init/shared.js +166 -0
  52. package/dist/src/init/shared.js.map +1 -1
  53. package/dist/src/init/types.d.ts +11 -0
  54. package/dist/src/init/types.d.ts.map +1 -1
  55. package/dist/src/init/types.js.map +1 -1
  56. package/dist/src/init/upgrade.d.ts.map +1 -1
  57. package/dist/src/init/upgrade.js +1 -0
  58. package/dist/src/init/upgrade.js.map +1 -1
  59. package/dist/src/init/write-kimicode.d.ts.map +1 -1
  60. package/dist/src/init/write-kimicode.js +13 -9
  61. package/dist/src/init/write-kimicode.js.map +1 -1
  62. package/dist/src/init/write-opencode.d.ts.map +1 -1
  63. package/dist/src/init/write-opencode.js +44 -2
  64. package/dist/src/init/write-opencode.js.map +1 -1
  65. package/dist/src/init/write-runtime-config.d.ts +2 -0
  66. package/dist/src/init/write-runtime-config.d.ts.map +1 -1
  67. package/dist/src/init/write-runtime-config.js +65 -38
  68. package/dist/src/init/write-runtime-config.js.map +1 -1
  69. package/dist/src/mastermind/manifest-data.d.ts.map +1 -1
  70. package/dist/src/mastermind/manifest-data.js +14 -0
  71. package/dist/src/mastermind/manifest-data.js.map +1 -1
  72. package/dist/src/mcp/monoes-mcp-entry.mjs +86 -0
  73. package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -1
  74. package/dist/src/mcp-tools/terminal-tools.js +52 -9
  75. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  76. package/dist/src/memory/memory-bridge.d.ts +84 -3
  77. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  78. package/dist/src/memory/memory-bridge.js +215 -17
  79. package/dist/src/memory/memory-bridge.js.map +1 -1
  80. package/dist/src/orgrt/agent-runner.d.ts +38 -0
  81. package/dist/src/orgrt/agent-runner.d.ts.map +1 -1
  82. package/dist/src/orgrt/agent-runner.js +47 -0
  83. package/dist/src/orgrt/agent-runner.js.map +1 -1
  84. package/dist/src/orgrt/checkpoint.d.ts +12 -1
  85. package/dist/src/orgrt/checkpoint.d.ts.map +1 -1
  86. package/dist/src/orgrt/checkpoint.js +15 -6
  87. package/dist/src/orgrt/checkpoint.js.map +1 -1
  88. package/dist/src/orgrt/completion-gate.d.ts +74 -0
  89. package/dist/src/orgrt/completion-gate.d.ts.map +1 -1
  90. package/dist/src/orgrt/completion-gate.js +45 -0
  91. package/dist/src/orgrt/completion-gate.js.map +1 -1
  92. package/dist/src/orgrt/cost-tier.d.ts +144 -0
  93. package/dist/src/orgrt/cost-tier.d.ts.map +1 -0
  94. package/dist/src/orgrt/cost-tier.js +183 -0
  95. package/dist/src/orgrt/cost-tier.js.map +1 -0
  96. package/dist/src/orgrt/cross-org.d.ts.map +1 -1
  97. package/dist/src/orgrt/cross-org.js +14 -0
  98. package/dist/src/orgrt/cross-org.js.map +1 -1
  99. package/dist/src/orgrt/daemon.d.ts +12 -1
  100. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  101. package/dist/src/orgrt/daemon.js +216 -49
  102. package/dist/src/orgrt/daemon.js.map +1 -1
  103. package/dist/src/orgrt/decisions.d.ts +14 -2
  104. package/dist/src/orgrt/decisions.d.ts.map +1 -1
  105. package/dist/src/orgrt/decisions.js +216 -10
  106. package/dist/src/orgrt/decisions.js.map +1 -1
  107. package/dist/src/orgrt/file-roots.d.ts +7 -0
  108. package/dist/src/orgrt/file-roots.d.ts.map +1 -1
  109. package/dist/src/orgrt/file-roots.js +38 -1
  110. package/dist/src/orgrt/file-roots.js.map +1 -1
  111. package/dist/src/orgrt/forwarder.d.ts.map +1 -1
  112. package/dist/src/orgrt/forwarder.js +16 -2
  113. package/dist/src/orgrt/forwarder.js.map +1 -1
  114. package/dist/src/orgrt/idle-deadline.d.ts +74 -1
  115. package/dist/src/orgrt/idle-deadline.d.ts.map +1 -1
  116. package/dist/src/orgrt/idle-deadline.js +52 -2
  117. package/dist/src/orgrt/idle-deadline.js.map +1 -1
  118. package/dist/src/orgrt/loadouts.d.ts +38 -0
  119. package/dist/src/orgrt/loadouts.d.ts.map +1 -0
  120. package/dist/src/orgrt/loadouts.js +129 -0
  121. package/dist/src/orgrt/loadouts.js.map +1 -0
  122. package/dist/src/orgrt/mailbox.d.ts +17 -1
  123. package/dist/src/orgrt/mailbox.d.ts.map +1 -1
  124. package/dist/src/orgrt/mailbox.js +50 -3
  125. package/dist/src/orgrt/mailbox.js.map +1 -1
  126. package/dist/src/orgrt/policy.d.ts +42 -2
  127. package/dist/src/orgrt/policy.d.ts.map +1 -1
  128. package/dist/src/orgrt/policy.js +53 -8
  129. package/dist/src/orgrt/policy.js.map +1 -1
  130. package/dist/src/orgrt/prompt-vars.d.ts +11 -0
  131. package/dist/src/orgrt/prompt-vars.d.ts.map +1 -0
  132. package/dist/src/orgrt/prompt-vars.js +49 -0
  133. package/dist/src/orgrt/prompt-vars.js.map +1 -0
  134. package/dist/src/orgrt/questions.d.ts +22 -1
  135. package/dist/src/orgrt/questions.d.ts.map +1 -1
  136. package/dist/src/orgrt/questions.js +24 -3
  137. package/dist/src/orgrt/questions.js.map +1 -1
  138. package/dist/src/orgrt/review-packet.d.ts +29 -0
  139. package/dist/src/orgrt/review-packet.d.ts.map +1 -0
  140. package/dist/src/orgrt/review-packet.js +67 -0
  141. package/dist/src/orgrt/review-packet.js.map +1 -0
  142. package/dist/src/orgrt/role-sandbox.d.ts.map +1 -1
  143. package/dist/src/orgrt/role-sandbox.js +16 -3
  144. package/dist/src/orgrt/role-sandbox.js.map +1 -1
  145. package/dist/src/orgrt/session-ledger.d.ts +61 -0
  146. package/dist/src/orgrt/session-ledger.d.ts.map +1 -0
  147. package/dist/src/orgrt/session-ledger.js +113 -0
  148. package/dist/src/orgrt/session-ledger.js.map +1 -0
  149. package/dist/src/orgrt/session.d.ts +45 -5
  150. package/dist/src/orgrt/session.d.ts.map +1 -1
  151. package/dist/src/orgrt/session.js +384 -27
  152. package/dist/src/orgrt/session.js.map +1 -1
  153. package/dist/src/orgrt/task-dag.d.ts +34 -1
  154. package/dist/src/orgrt/task-dag.d.ts.map +1 -1
  155. package/dist/src/orgrt/task-dag.js +58 -7
  156. package/dist/src/orgrt/task-dag.js.map +1 -1
  157. package/dist/src/orgrt/tool-spill.d.ts +94 -0
  158. package/dist/src/orgrt/tool-spill.d.ts.map +1 -0
  159. package/dist/src/orgrt/tool-spill.js +180 -0
  160. package/dist/src/orgrt/tool-spill.js.map +1 -0
  161. package/dist/src/orgrt/types.d.ts +138 -0
  162. package/dist/src/orgrt/types.d.ts.map +1 -1
  163. package/dist/src/orgrt/types.js +148 -0
  164. package/dist/src/orgrt/types.js.map +1 -1
  165. package/dist/src/platform-adapters/renderers/mcp.d.ts +20 -2
  166. package/dist/src/platform-adapters/renderers/mcp.d.ts.map +1 -1
  167. package/dist/src/platform-adapters/renderers/mcp.js +25 -5
  168. package/dist/src/platform-adapters/renderers/mcp.js.map +1 -1
  169. package/dist/src/platform-adapters/renderers/skills.d.ts +0 -6
  170. package/dist/src/platform-adapters/renderers/skills.d.ts.map +1 -1
  171. package/dist/src/platform-adapters/renderers/skills.js +12 -22
  172. package/dist/src/platform-adapters/renderers/skills.js.map +1 -1
  173. package/dist/src/protocol-capabilities.d.ts +2 -1
  174. package/dist/src/protocol-capabilities.d.ts.map +1 -1
  175. package/dist/src/protocol-capabilities.js +2 -1
  176. package/dist/src/protocol-capabilities.js.map +1 -1
  177. package/dist/src/ui/dashboard.html +457 -164
  178. package/dist/src/ui/org-hil.mjs +276 -0
  179. package/dist/src/ui/org-runtime.mjs +350 -0
  180. package/dist/src/ui/orgs.html +22 -4
  181. package/dist/src/ui/routes-monoes.mjs +28 -3
  182. package/dist/src/ui/routes-org.mjs +290 -541
  183. package/dist/src/ui/server.mjs +185 -19
  184. package/dist/tsconfig.tsbuildinfo +1 -1
  185. package/package.json +7 -6
@@ -18,23 +18,9 @@ Load only the workflow that matches the request:
18
18
  - `mastermind-memory` for persistent knowledge.
19
19
 
20
20
  **For build/feature work, the gates are mandatory and ordered:** idea → design → plan →
21
- execute → review. The full routing table for the other 20+ Mastermind workflows lives in
22
- `.claude/commands/mastermind-master.md`; consult it before concluding that no workflow applies.
21
+ execute → review.
23
22
 
24
23
  Use Monograph before broad repository search when the platform exposes the
25
24
  Monomind MCP server. Without native skills, run
26
25
  `monomind mastermind run <skill> --print` and follow the printed procedure.
27
26
  Platform tool mappings are in [references/](references/).
28
- # Mastermind
29
-
30
- Load only the workflow that matches the current task:
31
- - `mastermind` — Route a request to the relevant Mastermind workflow.
32
- - `mastermind-plan` — Write a detailed implementation plan before changing code.
33
- - `mastermind-review` — Review code, content, strategy, or security work.
34
- - `mastermind-debug` — Investigate a failure or unexpected behavior before fixing it.
35
- - `mastermind-research` — Research an open question before making a decision.
36
- - `mastermind-execute` — Execute a written implementation plan step by step.
37
- - `mastermind-org` — Create, run, inspect, and manage a Mastermind organization.
38
- - `mastermind-memory` — Store, retrieve, and maintain persistent organization knowledge.
39
-
40
- If skills cannot be loaded natively, run `monomind mastermind run <skill> --print`.
package/README.md CHANGED
@@ -96,7 +96,7 @@ Use `monomind init --target codex` (or `--codex`) to initialize only Codex. See
96
96
  | Concern | Answer |
97
97
  |---|---|
98
98
  | **License** | [Apache 2.0](LICENSE) — use it however you want |
99
- | **Data privacy** | Your code and memory store stay local. Monomind does make outbound network calls, all to third-party services — never to a monoes-controlled server: crash reporting asks once, the first time an interactive crash happens, whether to file a GitHub issue via the GitHub API (showing the local report path before asking, defaulting to No). Until you've answered, a non-interactive crash — CI, agents, most real runs — never asks and only saves the crash locally; once you've explicitly chosen (`monomind crash-reporting enable`/`disable`), that answer is used every time, interactive or not. `monomind doctor` shows the current state. `security cve` queries the OSV vulnerability database; `update` checks the npm registry for new versions; the embedding model is downloaded from the HuggingFace CDN on first use. Neural pattern export/import (`hooks intelligence export`/`import`) is local-file-only. |
99
+ | **Data privacy** | Your code and memory store stay local. Monomind does make a small number of outbound network calls. See [doc/privacy.md](doc/privacy.md) for the complete list of what's sent, when, and how to opt out of each. |
100
100
  | **Dependencies** | Standard npm packages (tree-sitter, better-sqlite3, sql.js, zod). tree-sitter and better-sqlite3 are native (prebuilt) Node addons, not pure JS/WASM — sql.js is WASM. No post-install scripts that download code. |
101
101
  | **Permissions** | Registers as an MCP server — Claude Code controls what tools are available and prompts you before executing anything sensitive. |
102
102
  | **Source** | Fully open. Read every line at [github.com/monoes/monomind](https://github.com/monoes/monomind). |
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Doctor — MCP server start-up probe (i-312)
3
+ *
4
+ * Runs a configured MCP server exactly as its client would (spawn `command`
5
+ * + `args`, speak newline-delimited JSON-RPC on stdio) and waits for it to
6
+ * answer `initialize`. The incident that motivated this: a `.mcp.json` pinned
7
+ * `npx -y @monoes/monomindcli@2.11.1 mcp start`, which dies immediately with
8
+ * "npm error could not determine executable to run". Every static check
9
+ * passed, Claude Code showed CONNECTION_CLOSED, and the graph tools were
10
+ * silently gone.
11
+ *
12
+ * Three outcomes, deliberately distinct:
13
+ * ok — answered `initialize`
14
+ * failed — exited (or never spawned) before answering; `stderr` says why
15
+ * timeout — still running, still silent. NOT the same as broken: a cold
16
+ * `npx` fetch of this package takes 20-30s on this machine
17
+ * (measured), far beyond any timeout doctor can afford, so the
18
+ * caller reports it as "unknown", never as "cannot start".
19
+ */
20
+ /**
21
+ * Probe budget. doctor is interactive and runs in CI, so it cannot wait on a
22
+ * package download; a locally-installed server answers in well under a second
23
+ * and the broken `npx` form in the issue fails in ~0.8s once npm has the
24
+ * package cached. 3s covers both with room to spare.
25
+ */
26
+ export declare const MCP_PROBE_TIMEOUT_MS = 3000;
27
+ export type McpProbeOutcome = 'ok' | 'failed' | 'timeout';
28
+ export interface McpProbeResult {
29
+ outcome: McpProbeOutcome;
30
+ /** Condensed stderr (or the spawn error), '' when the server said nothing. */
31
+ stderr: string;
32
+ exitCode: number | null;
33
+ elapsedMs: number;
34
+ }
35
+ export interface McpProbeOptions {
36
+ command: string;
37
+ args?: string[];
38
+ env?: Record<string, string>;
39
+ cwd?: string;
40
+ timeoutMs?: number;
41
+ }
42
+ /**
43
+ * Condense a server's stderr into one line a doctor result can carry: drop
44
+ * blanks, keep the first few lines (npm puts the real cause first), truncate.
45
+ */
46
+ export declare function summarizeStderr(raw: string, max?: number): string;
47
+ export declare function probeMcpServer(options: McpProbeOptions): Promise<McpProbeResult>;
48
+ //# sourceMappingURL=doctor-mcp-probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-mcp-probe.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor-mcp-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAWzC,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,eAAe,CAAC;IACzB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAO9D;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA6JtF"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Doctor — MCP server start-up probe (i-312)
3
+ *
4
+ * Runs a configured MCP server exactly as its client would (spawn `command`
5
+ * + `args`, speak newline-delimited JSON-RPC on stdio) and waits for it to
6
+ * answer `initialize`. The incident that motivated this: a `.mcp.json` pinned
7
+ * `npx -y @monoes/monomindcli@2.11.1 mcp start`, which dies immediately with
8
+ * "npm error could not determine executable to run". Every static check
9
+ * passed, Claude Code showed CONNECTION_CLOSED, and the graph tools were
10
+ * silently gone.
11
+ *
12
+ * Three outcomes, deliberately distinct:
13
+ * ok — answered `initialize`
14
+ * failed — exited (or never spawned) before answering; `stderr` says why
15
+ * timeout — still running, still silent. NOT the same as broken: a cold
16
+ * `npx` fetch of this package takes 20-30s on this machine
17
+ * (measured), far beyond any timeout doctor can afford, so the
18
+ * caller reports it as "unknown", never as "cannot start".
19
+ */
20
+ import { spawn } from 'node:child_process';
21
+ /**
22
+ * Probe budget. doctor is interactive and runs in CI, so it cannot wait on a
23
+ * package download; a locally-installed server answers in well under a second
24
+ * and the broken `npx` form in the issue fails in ~0.8s once npm has the
25
+ * package cached. 3s covers both with room to spare.
26
+ */
27
+ export const MCP_PROBE_TIMEOUT_MS = 3000;
28
+ /** How long a SIGTERM'd server gets to exit before it is SIGKILLed. */
29
+ const TERM_GRACE_MS = 300;
30
+ /** Hard cap on waiting for the kill to land, so the probe itself cannot hang. */
31
+ const KILL_GRACE_MS = 1000;
32
+ /** Cap captured output — a chatty server must not grow doctor's heap. */
33
+ const MAX_CAPTURE_BYTES = 64 * 1024;
34
+ const PROBE_ID = 1;
35
+ /**
36
+ * Condense a server's stderr into one line a doctor result can carry: drop
37
+ * blanks, keep the first few lines (npm puts the real cause first), truncate.
38
+ */
39
+ export function summarizeStderr(raw, max = 240) {
40
+ const lines = raw
41
+ .split('\n')
42
+ .map((line) => line.trim())
43
+ .filter((line) => line.length > 0);
44
+ const joined = lines.slice(0, 3).join('; ');
45
+ return joined.length > max ? `${joined.slice(0, max)}…` : joined;
46
+ }
47
+ export async function probeMcpServer(options) {
48
+ const { command, args = [], env, cwd, timeoutMs = MCP_PROBE_TIMEOUT_MS } = options;
49
+ const startedAt = Date.now();
50
+ // Own process group on POSIX so the whole tree dies with one signal — an
51
+ // `npx` wrapper that has already forked node would otherwise survive and
52
+ // leak (o-04: processes never reaped). The cost is that a Ctrl-C aimed at
53
+ // doctor no longer reaches the child; the probe kills it on every return
54
+ // path and the window is at most `timeoutMs`.
55
+ const useProcessGroup = process.platform !== 'win32';
56
+ let child;
57
+ try {
58
+ child = spawn(command, args, {
59
+ stdio: ['pipe', 'pipe', 'pipe'],
60
+ env: env ? { ...process.env, ...env } : process.env,
61
+ cwd,
62
+ detached: useProcessGroup,
63
+ windowsHide: true,
64
+ });
65
+ }
66
+ catch (err) {
67
+ return {
68
+ outcome: 'failed',
69
+ stderr: err instanceof Error ? err.message : String(err),
70
+ exitCode: null,
71
+ elapsedMs: Date.now() - startedAt,
72
+ };
73
+ }
74
+ let exited = false;
75
+ let exitCode = null;
76
+ let stderrRaw = '';
77
+ let stdoutBuf = '';
78
+ let spawnError = '';
79
+ const exitWaiters = [];
80
+ child.on('exit', (code) => {
81
+ exited = true;
82
+ exitCode = code;
83
+ for (const resolve of exitWaiters.splice(0))
84
+ resolve();
85
+ });
86
+ const capture = (current, chunk) => current.length >= MAX_CAPTURE_BYTES
87
+ ? current
88
+ : (current + String(chunk)).slice(0, MAX_CAPTURE_BYTES);
89
+ child.stderr?.on('data', (chunk) => {
90
+ stderrRaw = capture(stderrRaw, chunk);
91
+ });
92
+ const outcome = await new Promise((resolve) => {
93
+ let settled = false;
94
+ const settle = (value) => {
95
+ if (settled)
96
+ return;
97
+ settled = true;
98
+ resolve(value);
99
+ };
100
+ const timer = setTimeout(() => settle('timeout'), timeoutMs);
101
+ timer.unref?.();
102
+ const done = (value) => {
103
+ clearTimeout(timer);
104
+ settle(value);
105
+ };
106
+ child.stdout?.on('data', (chunk) => {
107
+ stdoutBuf = capture(stdoutBuf, chunk);
108
+ const lines = stdoutBuf.split('\n');
109
+ stdoutBuf = lines.pop() ?? '';
110
+ for (const line of lines) {
111
+ if (!line.trim())
112
+ continue;
113
+ let message;
114
+ try {
115
+ message = JSON.parse(line);
116
+ }
117
+ catch {
118
+ continue; // banner/log noise on stdout — not our answer
119
+ }
120
+ if (message.id !== PROBE_ID)
121
+ continue;
122
+ if ('result' in message)
123
+ return done('ok');
124
+ if ('error' in message)
125
+ return done('failed');
126
+ }
127
+ });
128
+ child.on('error', (err) => {
129
+ spawnError = err.message;
130
+ done('failed');
131
+ });
132
+ child.on('exit', () => done('failed'));
133
+ try {
134
+ child.stdin?.write(`${JSON.stringify({
135
+ jsonrpc: '2.0',
136
+ id: PROBE_ID,
137
+ method: 'initialize',
138
+ params: {
139
+ protocolVersion: '2024-11-05',
140
+ capabilities: {},
141
+ clientInfo: { name: 'monomind-doctor', version: '1' },
142
+ },
143
+ })}\n`);
144
+ }
145
+ catch {
146
+ // Broken pipe: the server is already gone; the exit/error handler decides.
147
+ }
148
+ });
149
+ await shutdown();
150
+ return {
151
+ outcome,
152
+ stderr: spawnError || summarizeStderr(stderrRaw),
153
+ exitCode,
154
+ elapsedMs: Date.now() - startedAt,
155
+ };
156
+ function signalTree(signal) {
157
+ if (exited)
158
+ return;
159
+ try {
160
+ if (useProcessGroup && typeof child.pid === 'number')
161
+ process.kill(-child.pid, signal);
162
+ else
163
+ child.kill(signal);
164
+ }
165
+ catch {
166
+ try {
167
+ child.kill(signal);
168
+ }
169
+ catch {
170
+ /* already gone */
171
+ }
172
+ }
173
+ }
174
+ function waitForExit(ms) {
175
+ if (exited)
176
+ return Promise.resolve();
177
+ return new Promise((resolve) => {
178
+ const timer = setTimeout(resolve, ms);
179
+ timer.unref?.();
180
+ exitWaiters.push(() => {
181
+ clearTimeout(timer);
182
+ resolve();
183
+ });
184
+ });
185
+ }
186
+ async function shutdown() {
187
+ try {
188
+ child.stdin?.end();
189
+ }
190
+ catch {
191
+ /* already closed */
192
+ }
193
+ if (exited)
194
+ return;
195
+ signalTree('SIGTERM');
196
+ await waitForExit(TERM_GRACE_MS);
197
+ if (exited)
198
+ return;
199
+ signalTree('SIGKILL');
200
+ // Bounded: if the process is unkillable (uninterruptible sleep), doctor
201
+ // still returns rather than waiting on it forever.
202
+ await waitForExit(KILL_GRACE_MS);
203
+ }
204
+ }
205
+ //# sourceMappingURL=doctor-mcp-probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-mcp-probe.js","sourceRoot":"","sources":["../../../src/commands/doctor-mcp-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAEzC,uEAAuE;AACvE,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,iFAAiF;AACjF,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,yEAAyE;AACzE,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpC,MAAM,QAAQ,GAAG,CAAC,CAAC;AAoBnB;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,GAAG,GAAG,GAAG;IACpD,MAAM,KAAK,GAAG,GAAG;SACd,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAwB;IAC3D,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,GAAG,oBAAoB,EAAE,GAAG,OAAO,CAAC;IACnF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,8CAA8C;IAC9C,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IACrD,IAAI,KAA+B,CAAC;IACpC,IAAI,CAAC;QACH,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG;YACnD,GAAG;YACH,QAAQ,EAAE,eAAe;YACzB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACxD,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SAClC,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,MAAM,WAAW,GAAmB,EAAE,CAAC;IACvC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,GAAG,IAAI,CAAC;QACd,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,KAAc,EAAU,EAAE,CAC1D,OAAO,CAAC,MAAM,IAAI,iBAAiB;QACjC,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAE5D,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QACjC,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,CAAkB,CAAC,OAAO,EAAE,EAAE;QAC7D,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,KAAsB,EAAQ,EAAE;YAC9C,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;QAC7D,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,CAAC,KAAsB,EAAQ,EAAE;YAC5C,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;QAEF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAC3B,IAAI,OAA4D,CAAC;gBACjE,IAAI,CAAC;oBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS,CAAC,8CAA8C;gBAC1D,CAAC;gBACD,IAAI,OAAO,CAAC,EAAE,KAAK,QAAQ;oBAAE,SAAS;gBACtC,IAAI,QAAQ,IAAI,OAAO;oBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,OAAO,IAAI,OAAO;oBAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEvC,IAAI,CAAC;YACH,KAAK,CAAC,KAAK,EAAE,KAAK,CAChB,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChB,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,QAAQ;gBACZ,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE;oBACN,eAAe,EAAE,YAAY;oBAC7B,YAAY,EAAE,EAAE;oBAChB,UAAU,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,EAAE;iBACtD;aACF,CAAC,IAAI,CACP,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,2EAA2E;QAC7E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,EAAE,CAAC;IAEjB,OAAO;QACL,OAAO;QACP,MAAM,EAAE,UAAU,IAAI,eAAe,CAAC,SAAS,CAAC;QAChD,QAAQ;QACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;KAClC,CAAC;IAEF,SAAS,UAAU,CAAC,MAAsB;QACxC,IAAI,MAAM;YAAE,OAAO;QACnB,IAAI,CAAC;YACH,IAAI,eAAe,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;;gBAClF,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,kBAAkB;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,WAAW,CAAC,EAAU;QAC7B,IAAI,MAAM;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACtC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAChB,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;gBACpB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,QAAQ;QACrB,IAAI,CAAC;YACH,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;QACD,IAAI,MAAM;YAAE,OAAO;QACnB,UAAU,CAAC,SAAS,CAAC,CAAC;QACtB,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;QACjC,IAAI,MAAM;YAAE,OAAO;QACnB,UAAU,CAAC,SAAS,CAAC,CAAC;QACtB,wEAAwE;QACxE,mDAAmD;QACnD,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
@@ -7,6 +7,7 @@
7
7
  * issues discovered while installing them via /monoes:install.
8
8
  */
9
9
  import type { HealthCheck } from './doctor-env-checks.js';
10
+ export declare const DASHBOARD_TOKEN_BURNED_NOTICE = "the value must be treated as burned \u2014 the historical blob remains in git history even after this file stops being tracked";
10
11
  export declare function checkMonoesTools(): Promise<HealthCheck>;
11
12
  /**
12
13
  * i-066: verifies the monoes.me OAuth token isn't exposed to git — neither
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-monoes-checks.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor-monoes-checks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAoK1D,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,CAuB7D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,WAAW,CAAC,CAyFrE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CA8BvD"}
1
+ {"version":3,"file":"doctor-monoes-checks.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor-monoes-checks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAqC1D,eAAO,MAAM,6BAA6B,mIACmF,CAAC;AA6I9H,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,CAuB7D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,WAAW,CAAC,CA6IrE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CA8BvD"}
@@ -27,6 +27,19 @@ import { runCommand } from './doctor-env-checks.js';
27
27
  // git tracked/ignored status), so it can never truthfully claim that.
28
28
  const REVOKE_LINE = 'Treat this token as compromised: revoke it at https://monoes.me (Settings -> Connected apps). If it reached git history, rewriting the file does not remove it.';
29
29
  const DISCONNECT_LINE = 'Run `monomind ui`, then monoes.me -> Disconnect -> Connect.';
30
+ // i-052 commit 3 — a dashboard-token leak is a different credential from
31
+ // the monoes.me OAuth token above (REVOKE_LINE/DISCONNECT_LINE do not
32
+ // apply: there is nothing to revoke at monoes.me and no Disconnect flow
33
+ // for it), and its remedy is different in kind: `.gitignore` does nothing
34
+ // for an already-tracked file, so the only real fix is to untrack it.
35
+ // `DASHBOARD_TOKEN_BURNED_NOTICE` is exported so AC-5 clause (d) can assert
36
+ // by identity against the sentence the user actually sees, not a substring
37
+ // guess at it (i-050's AC-3 amendment pattern, applied here per plan §5b).
38
+ // Deliberately duplicated from mcp/monoes-mcp-entry.mjs's identical
39
+ // constant rather than imported — same "two call sites is not a shared
40
+ // abstraction" convention as hasLegacyMonoesBearerEntry() above.
41
+ export const DASHBOARD_TOKEN_BURNED_NOTICE = 'the value must be treated as burned — the historical blob remains in git history even after this file stops being tracked';
42
+ const DASHBOARD_TOKEN_REMEDIATION_LINE = `Untrack it: git rm --cached .monomind/dashboard-token. Then ${DASHBOARD_TOKEN_BURNED_NOTICE}.`;
30
43
  /**
31
44
  * True if `.mcp.json`'s raw text contains a literal bearer token, checked
32
45
  * at the specific path this item's writers ever wrote one
@@ -200,12 +213,21 @@ export async function checkMonoesTokenExposure() {
200
213
  // review finding 13, which caught the previous version of this function
201
214
  // doing exactly that).
202
215
  let hasConnectionFileIssue = false;
216
+ // i-052 commit 3: whether ANY monoes.me-credential issue fired (the mcp
217
+ // bearer token or the connection file) — distinct from
218
+ // hasDashboardTokenIssue below, because the two exposures are different
219
+ // credentials with different remedies (REVOKE_LINE's "revoke at
220
+ // monoes.me" is simply wrong advice for a dashboard-token leak, which
221
+ // has nothing to do with monoes.me).
222
+ let hasMonoesTokenIssue = false;
223
+ let hasDashboardTokenIssue = false;
203
224
  const mcpJsonPath = join(cwd, '.mcp.json');
204
225
  if (existsSync(mcpJsonPath)) {
205
226
  try {
206
227
  const raw = readFileSync(mcpJsonPath, 'utf8');
207
228
  if (hasLegacyMonoesBearerEntry(raw)) {
208
229
  issues.push('.mcp.json contains a literal bearer token');
230
+ hasMonoesTokenIssue = true;
209
231
  }
210
232
  }
211
233
  catch {
@@ -214,13 +236,18 @@ export async function checkMonoesTokenExposure() {
214
236
  }
215
237
  const connectionRelPath = '.monomind/monoes-connection.json';
216
238
  const connectionPath = join(cwd, connectionRelPath);
217
- if (existsSync(connectionPath)) {
239
+ const dashboardTokenRelPath = '.monomind/dashboard-token';
240
+ const dashboardTokenPath = join(cwd, dashboardTokenRelPath);
241
+ if (existsSync(connectionPath) || existsSync(dashboardTokenPath)) {
218
242
  // i-066 reviewer finding 5: outside a git work tree, `git check-ignore`
219
243
  // and `git ls-files` both exit non-zero for reasons that have nothing
220
244
  // to do with exposure (there is no git to leak through at all) — the
221
245
  // old code read that as tracked=false, ignored=false and failed a
222
246
  // zero-exposure user in a non-git project. Probe for a real work tree
223
- // first; if there isn't one, this check simply doesn't apply.
247
+ // first; if there isn't one, neither check below applies. Computed
248
+ // once and shared: it's the same probe regardless of which file it's
249
+ // gating (i-052 commit 3 reuses it for dashboard-token rather than
250
+ // re-running the same command a second time).
224
251
  let insideWorkTree = false;
225
252
  try {
226
253
  await runCommand('git rev-parse --is-inside-work-tree');
@@ -230,29 +257,53 @@ export async function checkMonoesTokenExposure() {
230
257
  insideWorkTree = false;
231
258
  }
232
259
  if (insideWorkTree) {
233
- let ignored = false;
234
- try {
235
- await runCommand(`git check-ignore "${connectionRelPath}"`);
236
- ignored = true;
237
- }
238
- catch {
239
- ignored = false;
240
- }
241
- let tracked = false;
242
- try {
243
- await runCommand(`git ls-files --error-unmatch "${connectionRelPath}"`);
244
- tracked = true;
245
- }
246
- catch {
247
- tracked = false;
248
- }
249
- if (tracked) {
250
- issues.push(`${connectionRelPath} is tracked by git — treat the token as compromised`);
251
- hasConnectionFileIssue = true;
260
+ if (existsSync(connectionPath)) {
261
+ let ignored = false;
262
+ try {
263
+ await runCommand(`git check-ignore "${connectionRelPath}"`);
264
+ ignored = true;
265
+ }
266
+ catch {
267
+ ignored = false;
268
+ }
269
+ let tracked = false;
270
+ try {
271
+ await runCommand(`git ls-files --error-unmatch "${connectionRelPath}"`);
272
+ tracked = true;
273
+ }
274
+ catch {
275
+ tracked = false;
276
+ }
277
+ if (tracked) {
278
+ issues.push(`${connectionRelPath} is tracked by git — treat the token as compromised`);
279
+ hasConnectionFileIssue = true;
280
+ hasMonoesTokenIssue = true;
281
+ }
282
+ else if (!ignored) {
283
+ issues.push(`${connectionRelPath} exists but is not covered by .gitignore`);
284
+ hasConnectionFileIssue = true;
285
+ hasMonoesTokenIssue = true;
286
+ }
252
287
  }
253
- else if (!ignored) {
254
- issues.push(`${connectionRelPath} exists but is not covered by .gitignore`);
255
- hasConnectionFileIssue = true;
288
+ // i-052 commit 3 — the actual incident's shape: dashboard-token is
289
+ // gitignored by default since commits 1-2, but `.gitignore` does
290
+ // nothing once a path is already tracked. AC-7 (control): a file
291
+ // that exists but is untracked (whether ignored or not — being
292
+ // untracked is what matters here, not the ignore pattern) produces
293
+ // no warning, or this becomes noise that gets ignored.
294
+ if (existsSync(dashboardTokenPath)) {
295
+ let tracked = false;
296
+ try {
297
+ await runCommand(`git ls-files --error-unmatch "${dashboardTokenRelPath}"`);
298
+ tracked = true;
299
+ }
300
+ catch {
301
+ tracked = false;
302
+ }
303
+ if (tracked) {
304
+ issues.push(`${dashboardTokenRelPath} is tracked by git`);
305
+ hasDashboardTokenIssue = true;
306
+ }
256
307
  }
257
308
  }
258
309
  }
@@ -265,19 +316,30 @@ export async function checkMonoesTokenExposure() {
265
316
  }
266
317
  // Fixed literals only, never interpolated — this message can reach a
267
318
  // terminal or CI log, so it must never echo a caught error or a token
268
- // value. REVOKE_LINE applies to every failure here: a literal bearer
269
- // token in .mcp.json is a real credential exposure independent of
270
- // whether THIS user ever connected (a teammate's commit, an older
271
- // install, a pulled branch can all put it there) — a token you didn't
272
- // create and can't rotate yourself is more urgent to escalate, not less.
273
- // DISCONNECT_LINE is additive, only when an actual connection file was
274
- // found and flagged by git — that's the only case where there's a live
275
- // app connection to disconnect from at all.
276
- const remediation = hasConnectionFileIssue ? `${REVOKE_LINE} ${DISCONNECT_LINE}` : REVOKE_LINE;
319
+ // value. Each remediation line is gated on the exposure it actually
320
+ // applies to (i-052 commit 3: previously REVOKE_LINE was unconditional
321
+ // whenever ANY issue fired — wrong once a dashboard-token-only exposure
322
+ // became possible, since that credential has nothing to do with
323
+ // monoes.me). REVOKE_LINE applies whenever a monoes.me credential issue
324
+ // fired: a literal bearer token in .mcp.json is a real credential
325
+ // exposure independent of whether THIS user ever connected (a
326
+ // teammate's commit, an older install, a pulled branch can all put it
327
+ // there) — a token you didn't create and can't rotate yourself is more
328
+ // urgent to escalate, not less. DISCONNECT_LINE is additive, only when
329
+ // an actual connection file was found and flagged by git — that's the
330
+ // only case where there's a live app connection to disconnect from at
331
+ // all.
332
+ const remediationParts = [];
333
+ if (hasMonoesTokenIssue) {
334
+ remediationParts.push(hasConnectionFileIssue ? `${REVOKE_LINE} ${DISCONNECT_LINE}` : REVOKE_LINE);
335
+ }
336
+ if (hasDashboardTokenIssue) {
337
+ remediationParts.push(DASHBOARD_TOKEN_REMEDIATION_LINE);
338
+ }
277
339
  return {
278
340
  name: 'monoes Token Exposure',
279
341
  status: 'fail',
280
- message: `${issues.join('; ')}. ${remediation}`,
342
+ message: `${issues.join('; ')}. ${remediationParts.join(' ')}`,
281
343
  };
282
344
  }
283
345
  export async function fixMonoesTools() {
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-monoes-checks.js","sourceRoot":"","sources":["../../../src/commands/doctor-monoes-checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor-monoes-checks.js","sourceRoot":"","sources":["../../../src/commands/doctor-monoes-checks.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,25 @@
5
5
  import type { HealthCheck } from './doctor-env-checks.js';
6
6
  export type { HealthCheck };
7
7
  export declare function checkConfigFile(): Promise<HealthCheck>;
8
+ /** o-16 (AC-6): the marker walk that resolves "this project" for the Memory
9
+ * & Knowledge store can silently adopt a wrong ancestor — the incident that
10
+ * motivated this check was a shared scratch parent's bare `.monomind`
11
+ * capturing an unrelated fixture, with no visible symptom until a search
12
+ * came back empty. Disclose the resolved root and why it was chosen, so a
13
+ * user can see which directory their brain is keyed to without reading code
14
+ * or debug logs. Always 'info': the resolution itself is never a health
15
+ * problem, only the failure to see it was.
16
+ *
17
+ * Named/scoped to "Memory Project Root", not a bare "Project Root" (o-16
18
+ * revision 1, reviewer MAJOR 2): `MONOMIND_PROJECT_ROOT` has a SECOND,
19
+ * independent consumer — `mcp-tools/guidance-tools.ts:findProjectRoot()`,
20
+ * which uses a different marker (`.claude`) and can legitimately resolve a
21
+ * different directory (see the divergence explained at
22
+ * `memory-bridge.ts`'s `getProjectRoot()` doc comment). A generic "Project
23
+ * Root" label would claim there is one true answer when this commit is
24
+ * what creates a state where two resolvers can disagree — this check must
25
+ * not be the thing that misleads about that. */
26
+ export declare function checkProjectRoot(): Promise<HealthCheck>;
8
27
  export declare function checkMemoryDatabase(): Promise<HealthCheck>;
9
28
  /** Memory knowledge graph (cognee port): entities/relations/rules distilled
10
29
  * from sessions and org runs. Informational — an empty graph on a fresh
@@ -16,7 +35,18 @@ export declare function checkMemoryKnowledgeGraph(): Promise<HealthCheck>;
16
35
  * (search degrades to keyword matching), so surface it here instead. */
17
36
  export declare function checkSecondBrainModel(): Promise<HealthCheck>;
18
37
  export declare function checkApiKeys(): Promise<HealthCheck>;
19
- export declare function checkMcpServers(): Promise<HealthCheck>;
38
+ export interface McpCheckOptions {
39
+ /**
40
+ * Actually start the configured monomind server and speak `initialize`
41
+ * (i-312). Off by default: the plain `monomind doctor` run must not spawn a
42
+ * subprocess — with an `npx`-based entry that can mean a package download —
43
+ * on every invocation. `doctor -c mcp` opts in.
44
+ */
45
+ probe?: boolean;
46
+ /** Probe budget; defaults to MCP_PROBE_TIMEOUT_MS. */
47
+ timeoutMs?: number;
48
+ }
49
+ export declare function checkMcpServers(options?: McpCheckOptions): Promise<HealthCheck>;
20
50
  export declare function checkMonograph(): Promise<HealthCheck>;
21
51
  export declare function checkMonographFreshness(): Promise<HealthCheck>;
22
52
  export declare function checkMonoesMemory(): Promise<HealthCheck>;
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-project-checks.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor-project-checks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4BH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAS1D,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CA4B5D;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC,CAkBhE;AAED;;2CAE2C;AAC3C,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,WAAW,CAAC,CAqDtE;AAeD;;;wEAGwE;AACxE,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,CAuElE;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAiDzD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CAuC5D;AAwCD,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAe3D;AAmDD,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,WAAW,CAAC,CA4LpE;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAkB9D;AAyHD,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAkBxD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAuC9D;AAiFD,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,WAAW,CAAC,CAoBnE;AA2CD,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,WAAW,CAAC,CAqCnE;AA2BD;6EAC6E;AAC7E,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CA2B7D;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,CA0D/D;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,CAoF/D;AAmBD;;;;;GAKG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,CAoDlE;AAED;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,WAAW,CAAC,CAwCvE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,WAAW,CAAC,CA6BnE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,WAAW,CAAC,CAcrE;AAED;;sBAEsB;AACtB,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAyB7D;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAW1D;AAiBD;;;;;yDAKyD;AACzD,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAoBtE"}
1
+ {"version":3,"file":"doctor-project-checks.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor-project-checks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA8BH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAS1D,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CA4B5D;AAED;;;;;;;;;;;;;;;;;iDAiBiD;AACjD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,CA2B7D;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC,CAkBhE;AAED;;2CAE2C;AAC3C,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,WAAW,CAAC,CAqDtE;AAeD;;;wEAGwE;AACxE,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,CAuElE;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAiDzD;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,eAAe,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,CA+CzF;AAkGD,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAe3D;AAmDD,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,WAAW,CAAC,CA4LpE;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAkB9D;AAyHD,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAkBxD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAuC9D;AAiFD,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,WAAW,CAAC,CAoBnE;AAkDD,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,WAAW,CAAC,CAqCnE;AA2BD;6EAC6E;AAC7E,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CA2B7D;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,CA0D/D;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,CAoF/D;AAmBD;;;;;GAKG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,CAoDlE;AAED;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,WAAW,CAAC,CAwCvE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,WAAW,CAAC,CA6BnE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,WAAW,CAAC,CAcrE;AAED;;sBAEsB;AACtB,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAyB7D;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAW1D;AAiBD;;;;;yDAKyD;AACzD,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAoBtE"}