@monoes/monomindcli 2.14.0 → 2.15.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 (291) hide show
  1. package/.claude/helpers/control-start.cjs +10 -13
  2. package/.claude/skills/monodesign/scripts/context.mjs +5 -5
  3. package/.claude/skills/monodesign/scripts/critique-storage.mjs +1 -1
  4. package/.claude/skills/monodesign/scripts/detect-csp.mjs +1 -6
  5. package/.claude/skills/monodesign/scripts/detector/browser/injected/index.mjs +16 -18
  6. package/.claude/skills/monodesign/scripts/detector/cli/main.mjs +3 -3
  7. package/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +69 -49
  8. package/.claude/skills/monodesign/scripts/detector/engines/regex/detect-text.mjs +6 -6
  9. package/.claude/skills/monodesign/scripts/detector/engines/static-html/css-cascade.mjs +6 -5
  10. package/.claude/skills/monodesign/scripts/detector/engines/static-html/detect-html.mjs +6 -6
  11. package/.claude/skills/monodesign/scripts/detector/fix/index.mjs +3 -3
  12. package/.claude/skills/monodesign/scripts/detector/node/file-system.mjs +1 -1
  13. package/.claude/skills/monodesign/scripts/detector/registry/antipatterns.mjs +1 -1
  14. package/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +26 -27
  15. package/.claude/skills/monodesign/scripts/detector/shared/color.mjs +2 -2
  16. package/.claude/skills/monodesign/scripts/detector/shared/constants.mjs +1 -1
  17. package/.claude/skills/monodesign/scripts/detector/shared/inline-ignores.mjs +2 -2
  18. package/.claude/skills/monodesign/scripts/hook-admin.mjs +6 -6
  19. package/.claude/skills/monodesign/scripts/hook-before-edit.mjs +4 -4
  20. package/.claude/skills/monodesign/scripts/hook-lib.mjs +20 -11
  21. package/.claude/skills/monodesign/scripts/hook.mjs +1 -1
  22. package/.claude/skills/monodesign/scripts/lib/design-parser.mjs +9 -42
  23. package/.claude/skills/monodesign/scripts/lib/is-generated.mjs +1 -1
  24. package/.claude/skills/monodesign/scripts/lib/monodesign-config.mjs +5 -5
  25. package/.claude/skills/monodesign/scripts/lib/monodesign-paths.mjs +1 -1
  26. package/.claude/skills/monodesign/scripts/live/event-validation.mjs +13 -13
  27. package/.claude/skills/monodesign/scripts/live/manual-apply.mjs +4 -4
  28. package/.claude/skills/monodesign/scripts/live/manual-edits-buffer.mjs +1 -1
  29. package/.claude/skills/monodesign/scripts/live/session-store.mjs +5 -5
  30. package/.claude/skills/monodesign/scripts/live/svelte-component.mjs +13 -13
  31. package/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +4 -4
  32. package/.claude/skills/monodesign/scripts/live/ui-core.mjs +1 -1
  33. package/.claude/skills/monodesign/scripts/live-accept.mjs +24 -24
  34. package/.claude/skills/monodesign/scripts/live-browser-dom.js +8 -7
  35. package/.claude/skills/monodesign/scripts/live-browser-session.js +8 -7
  36. package/.claude/skills/monodesign/scripts/live-browser.js +406 -433
  37. package/.claude/skills/monodesign/scripts/live-commit-manual-edits.mjs +6 -6
  38. package/.claude/skills/monodesign/scripts/live-copy-edit-agent.mjs +2 -2
  39. package/.claude/skills/monodesign/scripts/live-discard-manual-edits.mjs +1 -1
  40. package/.claude/skills/monodesign/scripts/live-inject.mjs +7 -7
  41. package/.claude/skills/monodesign/scripts/live-insert.mjs +11 -11
  42. package/.claude/skills/monodesign/scripts/live-manual-edit-evidence.mjs +4 -4
  43. package/.claude/skills/monodesign/scripts/live-poll.mjs +5 -5
  44. package/.claude/skills/monodesign/scripts/live-server.mjs +10 -10
  45. package/.claude/skills/monodesign/scripts/live-wrap.mjs +31 -41
  46. package/.claude/skills/monodesign/scripts/live.mjs +5 -5
  47. package/.claude/skills/monodesign/scripts/palette.mjs +3 -1
  48. package/.claude/skills/monodesign/scripts/pin.mjs +1 -1
  49. package/bin/cli.js +21 -1
  50. package/bin/mcp-server.js +21 -1
  51. package/dist/src/capabilities/cap-documents.d.ts.map +1 -1
  52. package/dist/src/capabilities/cap-documents.js +23 -0
  53. package/dist/src/capabilities/cap-documents.js.map +1 -1
  54. package/dist/src/commands/doc-filters.d.ts +19 -0
  55. package/dist/src/commands/doc-filters.d.ts.map +1 -0
  56. package/dist/src/commands/doc-filters.js +64 -0
  57. package/dist/src/commands/doc-filters.js.map +1 -0
  58. package/dist/src/commands/doc-library.d.ts +22 -0
  59. package/dist/src/commands/doc-library.d.ts.map +1 -0
  60. package/dist/src/commands/doc-library.js +454 -0
  61. package/dist/src/commands/doc-library.js.map +1 -0
  62. package/dist/src/commands/doc-list.d.ts +9 -0
  63. package/dist/src/commands/doc-list.d.ts.map +1 -0
  64. package/dist/src/commands/doc-list.js +99 -0
  65. package/dist/src/commands/doc-list.js.map +1 -0
  66. package/dist/src/commands/doc.d.ts.map +1 -1
  67. package/dist/src/commands/doc.js +51 -37
  68. package/dist/src/commands/doc.js.map +1 -1
  69. package/dist/src/commands/ui.d.ts.map +1 -1
  70. package/dist/src/commands/ui.js +60 -0
  71. package/dist/src/commands/ui.js.map +1 -1
  72. package/dist/src/knowledge/capture-envelope.d.ts +85 -0
  73. package/dist/src/knowledge/capture-envelope.d.ts.map +1 -0
  74. package/dist/src/knowledge/capture-envelope.js +167 -0
  75. package/dist/src/knowledge/capture-envelope.js.map +1 -0
  76. package/dist/src/knowledge/capture-text.d.ts +23 -0
  77. package/dist/src/knowledge/capture-text.d.ts.map +1 -0
  78. package/dist/src/knowledge/capture-text.js +49 -0
  79. package/dist/src/knowledge/capture-text.js.map +1 -0
  80. package/dist/src/knowledge/citation.d.ts +121 -0
  81. package/dist/src/knowledge/citation.d.ts.map +1 -0
  82. package/dist/src/knowledge/citation.js +252 -0
  83. package/dist/src/knowledge/citation.js.map +1 -0
  84. package/dist/src/knowledge/document-chunking.d.ts +42 -0
  85. package/dist/src/knowledge/document-chunking.d.ts.map +1 -0
  86. package/dist/src/knowledge/document-chunking.js +288 -0
  87. package/dist/src/knowledge/document-chunking.js.map +1 -0
  88. package/dist/src/knowledge/document-index.d.ts +124 -0
  89. package/dist/src/knowledge/document-index.d.ts.map +1 -0
  90. package/dist/src/knowledge/document-index.js +314 -0
  91. package/dist/src/knowledge/document-index.js.map +1 -0
  92. package/dist/src/knowledge/document-ingest.d.ts +23 -0
  93. package/dist/src/knowledge/document-ingest.d.ts.map +1 -0
  94. package/dist/src/knowledge/document-ingest.js +368 -0
  95. package/dist/src/knowledge/document-ingest.js.map +1 -0
  96. package/dist/src/knowledge/document-pipeline.d.ts +26 -148
  97. package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
  98. package/dist/src/knowledge/document-pipeline.js +25 -920
  99. package/dist/src/knowledge/document-pipeline.js.map +1 -1
  100. package/dist/src/knowledge/document-search.d.ts +27 -0
  101. package/dist/src/knowledge/document-search.d.ts.map +1 -0
  102. package/dist/src/knowledge/document-search.js +138 -0
  103. package/dist/src/knowledge/document-search.js.map +1 -0
  104. package/dist/src/knowledge/document-store.d.ts +28 -0
  105. package/dist/src/knowledge/document-store.d.ts.map +1 -0
  106. package/dist/src/knowledge/document-store.js +61 -0
  107. package/dist/src/knowledge/document-store.js.map +1 -0
  108. package/dist/src/knowledge/document-types.d.ts +103 -0
  109. package/dist/src/knowledge/document-types.d.ts.map +1 -0
  110. package/dist/src/knowledge/document-types.js +12 -0
  111. package/dist/src/knowledge/document-types.js.map +1 -0
  112. package/dist/src/knowledge/highlights.d.ts +168 -0
  113. package/dist/src/knowledge/highlights.d.ts.map +1 -0
  114. package/dist/src/knowledge/highlights.js +311 -0
  115. package/dist/src/knowledge/highlights.js.map +1 -0
  116. package/dist/src/knowledge/html-extract.d.ts +43 -0
  117. package/dist/src/knowledge/html-extract.d.ts.map +1 -0
  118. package/dist/src/knowledge/html-extract.js +286 -0
  119. package/dist/src/knowledge/html-extract.js.map +1 -0
  120. package/dist/src/knowledge/html-tags.d.ts +30 -0
  121. package/dist/src/knowledge/html-tags.d.ts.map +1 -0
  122. package/dist/src/knowledge/html-tags.js +229 -0
  123. package/dist/src/knowledge/html-tags.js.map +1 -0
  124. package/dist/src/knowledge/library.d.ts +106 -0
  125. package/dist/src/knowledge/library.d.ts.map +1 -0
  126. package/dist/src/knowledge/library.js +195 -0
  127. package/dist/src/knowledge/library.js.map +1 -0
  128. package/dist/src/knowledge/lookup.d.ts +80 -0
  129. package/dist/src/knowledge/lookup.d.ts.map +1 -0
  130. package/dist/src/knowledge/lookup.js +156 -0
  131. package/dist/src/knowledge/lookup.js.map +1 -0
  132. package/dist/src/knowledge/mhtml.d.ts +60 -0
  133. package/dist/src/knowledge/mhtml.d.ts.map +1 -0
  134. package/dist/src/knowledge/mhtml.js +154 -0
  135. package/dist/src/knowledge/mhtml.js.map +1 -0
  136. package/dist/src/knowledge/okf-bundle.d.ts +19 -0
  137. package/dist/src/knowledge/okf-bundle.d.ts.map +1 -0
  138. package/dist/src/knowledge/okf-bundle.js +106 -0
  139. package/dist/src/knowledge/okf-bundle.js.map +1 -0
  140. package/dist/src/knowledge/profile-store.d.ts +134 -0
  141. package/dist/src/knowledge/profile-store.d.ts.map +1 -0
  142. package/dist/src/knowledge/profile-store.js +237 -0
  143. package/dist/src/knowledge/profile-store.js.map +1 -0
  144. package/dist/src/knowledge/related.d.ts +58 -0
  145. package/dist/src/knowledge/related.d.ts.map +1 -0
  146. package/dist/src/knowledge/related.js +222 -0
  147. package/dist/src/knowledge/related.js.map +1 -0
  148. package/dist/src/knowledge/section-diff.d.ts +48 -0
  149. package/dist/src/knowledge/section-diff.d.ts.map +1 -0
  150. package/dist/src/knowledge/section-diff.js +151 -0
  151. package/dist/src/knowledge/section-diff.js.map +1 -0
  152. package/dist/src/knowledge/watch.d.ts +92 -0
  153. package/dist/src/knowledge/watch.d.ts.map +1 -0
  154. package/dist/src/knowledge/watch.js +221 -0
  155. package/dist/src/knowledge/watch.js.map +1 -0
  156. package/dist/src/mcp-server.d.ts.map +1 -1
  157. package/dist/src/mcp-server.js +44 -87
  158. package/dist/src/mcp-server.js.map +1 -1
  159. package/dist/src/mcp-tools/browser-instrument-tools.d.ts +35 -0
  160. package/dist/src/mcp-tools/browser-instrument-tools.d.ts.map +1 -0
  161. package/dist/src/mcp-tools/browser-instrument-tools.js +359 -0
  162. package/dist/src/mcp-tools/browser-instrument-tools.js.map +1 -0
  163. package/dist/src/mcp-tools/browser-metrics.d.ts +42 -0
  164. package/dist/src/mcp-tools/browser-metrics.d.ts.map +1 -0
  165. package/dist/src/mcp-tools/browser-metrics.js +91 -0
  166. package/dist/src/mcp-tools/browser-metrics.js.map +1 -0
  167. package/dist/src/mcp-tools/browser-profile-tools.d.ts +16 -0
  168. package/dist/src/mcp-tools/browser-profile-tools.d.ts.map +1 -0
  169. package/dist/src/mcp-tools/browser-profile-tools.js +324 -0
  170. package/dist/src/mcp-tools/browser-profile-tools.js.map +1 -0
  171. package/dist/src/mcp-tools/browser-session.d.ts +68 -0
  172. package/dist/src/mcp-tools/browser-session.d.ts.map +1 -0
  173. package/dist/src/mcp-tools/browser-session.js +224 -0
  174. package/dist/src/mcp-tools/browser-session.js.map +1 -0
  175. package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
  176. package/dist/src/mcp-tools/browser-tools.js +10 -176
  177. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  178. package/dist/src/mcp-tools/capture-resource-read.d.ts +115 -0
  179. package/dist/src/mcp-tools/capture-resource-read.d.ts.map +1 -0
  180. package/dist/src/mcp-tools/capture-resource-read.js +296 -0
  181. package/dist/src/mcp-tools/capture-resource-read.js.map +1 -0
  182. package/dist/src/mcp-tools/capture-resource-tools.d.ts +22 -0
  183. package/dist/src/mcp-tools/capture-resource-tools.d.ts.map +1 -0
  184. package/dist/src/mcp-tools/capture-resource-tools.js +182 -0
  185. package/dist/src/mcp-tools/capture-resource-tools.js.map +1 -0
  186. package/dist/src/mcp-tools/capture-resources.d.ts +142 -0
  187. package/dist/src/mcp-tools/capture-resources.d.ts.map +1 -0
  188. package/dist/src/mcp-tools/capture-resources.js +289 -0
  189. package/dist/src/mcp-tools/capture-resources.js.map +1 -0
  190. package/dist/src/mcp-tools/index.d.ts +3 -0
  191. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  192. package/dist/src/mcp-tools/index.js +6 -0
  193. package/dist/src/mcp-tools/index.js.map +1 -1
  194. package/dist/src/mcp-tools/knowledge-tools.d.ts.map +1 -1
  195. package/dist/src/mcp-tools/knowledge-tools.js +9 -1
  196. package/dist/src/mcp-tools/knowledge-tools.js.map +1 -1
  197. package/dist/src/mcp-tools/resource-router.d.ts +86 -0
  198. package/dist/src/mcp-tools/resource-router.d.ts.map +1 -0
  199. package/dist/src/mcp-tools/resource-router.js +181 -0
  200. package/dist/src/mcp-tools/resource-router.js.map +1 -0
  201. package/dist/src/memory/memory-bridge.js +1 -1
  202. package/dist/src/memory/memory-bridge.js.map +1 -1
  203. package/dist/src/orgrt/agent-runner.d.ts +4 -0
  204. package/dist/src/orgrt/agent-runner.d.ts.map +1 -1
  205. package/dist/src/orgrt/agent-runner.js +22 -0
  206. package/dist/src/orgrt/agent-runner.js.map +1 -1
  207. package/dist/src/orgrt/antigravity-runner.d.ts.map +1 -1
  208. package/dist/src/orgrt/antigravity-runner.js +2 -1
  209. package/dist/src/orgrt/antigravity-runner.js.map +1 -1
  210. package/dist/src/orgrt/authority-mask.d.ts +32 -0
  211. package/dist/src/orgrt/authority-mask.d.ts.map +1 -0
  212. package/dist/src/orgrt/authority-mask.js +135 -0
  213. package/dist/src/orgrt/authority-mask.js.map +1 -0
  214. package/dist/src/orgrt/codex-runner.d.ts.map +1 -1
  215. package/dist/src/orgrt/codex-runner.js +2 -1
  216. package/dist/src/orgrt/codex-runner.js.map +1 -1
  217. package/dist/src/orgrt/copilot-runner.d.ts.map +1 -1
  218. package/dist/src/orgrt/copilot-runner.js +2 -1
  219. package/dist/src/orgrt/copilot-runner.js.map +1 -1
  220. package/dist/src/orgrt/crush-runner.d.ts.map +1 -1
  221. package/dist/src/orgrt/crush-runner.js +6 -1
  222. package/dist/src/orgrt/crush-runner.js.map +1 -1
  223. package/dist/src/orgrt/daemon.d.ts +4 -0
  224. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  225. package/dist/src/orgrt/daemon.js +13 -2
  226. package/dist/src/orgrt/daemon.js.map +1 -1
  227. package/dist/src/orgrt/decisions.d.ts +9 -0
  228. package/dist/src/orgrt/decisions.d.ts.map +1 -1
  229. package/dist/src/orgrt/decisions.js +32 -5
  230. package/dist/src/orgrt/decisions.js.map +1 -1
  231. package/dist/src/orgrt/file-roots.d.ts +2 -1
  232. package/dist/src/orgrt/file-roots.d.ts.map +1 -1
  233. package/dist/src/orgrt/file-roots.js +7 -3
  234. package/dist/src/orgrt/file-roots.js.map +1 -1
  235. package/dist/src/orgrt/grok-runner.d.ts.map +1 -1
  236. package/dist/src/orgrt/grok-runner.js +2 -1
  237. package/dist/src/orgrt/grok-runner.js.map +1 -1
  238. package/dist/src/orgrt/hermes-runner.d.ts.map +1 -1
  239. package/dist/src/orgrt/hermes-runner.js +2 -1
  240. package/dist/src/orgrt/hermes-runner.js.map +1 -1
  241. package/dist/src/orgrt/inbox.d.ts.map +1 -1
  242. package/dist/src/orgrt/inbox.js +70 -4
  243. package/dist/src/orgrt/inbox.js.map +1 -1
  244. package/dist/src/orgrt/kimicode-runner.d.ts.map +1 -1
  245. package/dist/src/orgrt/kimicode-runner.js +2 -1
  246. package/dist/src/orgrt/kimicode-runner.js.map +1 -1
  247. package/dist/src/orgrt/opencode-runner.d.ts.map +1 -1
  248. package/dist/src/orgrt/opencode-runner.js +3 -2
  249. package/dist/src/orgrt/opencode-runner.js.map +1 -1
  250. package/dist/src/orgrt/pi-rpc-runner.d.ts.map +1 -1
  251. package/dist/src/orgrt/pi-rpc-runner.js +3 -2
  252. package/dist/src/orgrt/pi-rpc-runner.js.map +1 -1
  253. package/dist/src/orgrt/pi-runner.d.ts.map +1 -1
  254. package/dist/src/orgrt/pi-runner.js +2 -1
  255. package/dist/src/orgrt/pi-runner.js.map +1 -1
  256. package/dist/src/orgrt/policy.d.ts.map +1 -1
  257. package/dist/src/orgrt/policy.js +3 -0
  258. package/dist/src/orgrt/policy.js.map +1 -1
  259. package/dist/src/orgrt/qwen-rpc-runner.d.ts.map +1 -1
  260. package/dist/src/orgrt/qwen-rpc-runner.js +3 -2
  261. package/dist/src/orgrt/qwen-rpc-runner.js.map +1 -1
  262. package/dist/src/orgrt/qwen-runner.d.ts.map +1 -1
  263. package/dist/src/orgrt/qwen-runner.js +2 -1
  264. package/dist/src/orgrt/qwen-runner.js.map +1 -1
  265. package/dist/src/orgrt/role-sandbox.d.ts +21 -0
  266. package/dist/src/orgrt/role-sandbox.d.ts.map +1 -1
  267. package/dist/src/orgrt/role-sandbox.js +31 -6
  268. package/dist/src/orgrt/role-sandbox.js.map +1 -1
  269. package/dist/src/orgrt/session-ledger.d.ts +7 -0
  270. package/dist/src/orgrt/session-ledger.d.ts.map +1 -1
  271. package/dist/src/orgrt/session-ledger.js +15 -0
  272. package/dist/src/orgrt/session-ledger.js.map +1 -1
  273. package/dist/src/orgrt/session.d.ts.map +1 -1
  274. package/dist/src/orgrt/session.js +42 -10
  275. package/dist/src/orgrt/session.js.map +1 -1
  276. package/dist/src/orgrt/task-dag.d.ts +3 -0
  277. package/dist/src/orgrt/task-dag.d.ts.map +1 -1
  278. package/dist/src/orgrt/task-dag.js +1 -0
  279. package/dist/src/orgrt/task-dag.js.map +1 -1
  280. package/dist/src/orgrt/types.d.ts +5 -0
  281. package/dist/src/orgrt/types.d.ts.map +1 -1
  282. package/dist/src/orgrt/types.js +23 -1
  283. package/dist/src/orgrt/types.js.map +1 -1
  284. package/dist/src/ui/dashboard.html +28 -848
  285. package/dist/src/ui/human-auth.mjs +103 -0
  286. package/dist/src/ui/org-hil.mjs +86 -37
  287. package/dist/src/ui/org-runtime.mjs +21 -13
  288. package/dist/src/ui/routes-org.mjs +49 -445
  289. package/dist/src/ui/server.mjs +90 -2
  290. package/dist/tsconfig.tsbuildinfo +1 -1
  291. package/package.json +9 -9
@@ -22,6 +22,13 @@ import {
22
22
  collectSystem,
23
23
  collectTokens,
24
24
  } from './collector.mjs';
25
+ import {
26
+ consumeLoginNonce,
27
+ humanSessionCookie,
28
+ isHumanRequest,
29
+ issueLoginNonce,
30
+ loginRequiredPage,
31
+ } from './human-auth.mjs';
25
32
  import { handleMonoesRoutes } from './routes-monoes.mjs';
26
33
  import { handleMonographRoutes } from './routes-monograph.mjs';
27
34
  import { handleOrgRoutes } from './routes-org.mjs';
@@ -856,7 +863,7 @@ export function watchSafely(watcher, label) {
856
863
  /**
857
864
  * Opens a URL in the default browser, cross-platform.
858
865
  */
859
- async function openUrl(url) {
866
+ export async function openUrl(url) {
860
867
  const { exec } = await import('node:child_process');
861
868
  const cmd =
862
869
  process.platform === 'darwin'
@@ -1921,7 +1928,20 @@ export async function startServer({
1921
1928
  '/orgs-files.js',
1922
1929
  '/markdown.js',
1923
1930
  '/favicon.ico',
1931
+ '/api/identity',
1924
1932
  ]);
1933
+ // Pages that embed the token: served only to a browser with the human session.
1934
+ const _HUMAN_PAGES = new Set(['/', '/v2', '/orgs', '/mastermind']);
1935
+ // Mutations that act as the human supervising an org (org-hil.mjs,
1936
+ // org-runtime.mjs's config patch): the token alone is not enough.
1937
+ const _HUMAN_ROUTES = [
1938
+ /^\/api\/questions\/answer$/,
1939
+ /^\/api\/org\/[^/]+\/approvals\/[^/]+$/,
1940
+ /^\/api\/org\/[^/]+\/gates\/[^/]+$/,
1941
+ /^\/api\/org\/[^/]+\/config$/,
1942
+ /^\/api\/orgs\/[^/]+\/chat$/,
1943
+ ];
1944
+ const _isHumanRoute = (url) => _HUMAN_ROUTES.some((re) => re.test(url));
1925
1945
  const _isOpenRoute = (url, method) =>
1926
1946
  (method === 'GET' || method === 'HEAD' || method === 'OPTIONS') &&
1927
1947
  (_OPEN_ROUTES.has(url) ||
@@ -2002,6 +2022,67 @@ export async function startServer({
2002
2022
  }
2003
2023
  }
2004
2024
 
2025
+ // ------------------------------------------------ GET /api/identity
2026
+ // Which process serves this port and where its token file is — never the
2027
+ // token itself. control-start.cjs pairs another project with a server it
2028
+ // finds already listening, by reading that file as the same user.
2029
+ if (req.method === 'GET' && url === '/api/identity') {
2030
+ res.writeHead(200, { 'Content-Type': 'application/json' });
2031
+ res.end(
2032
+ JSON.stringify({
2033
+ pid: process.pid,
2034
+ dir: projectDir || process.cwd(),
2035
+ tokenFile: _dashboardTokenFilePath,
2036
+ }),
2037
+ );
2038
+ return;
2039
+ }
2040
+
2041
+ // ── Human session (human-auth.mjs) ─────────────────────────────────────
2042
+ // The pages embed the dashboard token, and the decision routes act as the
2043
+ // human who supervises an org — both need the browser session cookie, not
2044
+ // just the token any local process can obtain. A one-time `?login=` link
2045
+ // sets that cookie.
2046
+ if (req.method === 'GET' && _HUMAN_PAGES.has(url)) {
2047
+ const _login = new URL(req.url, 'http://localhost').searchParams.get('login');
2048
+ if (_login && consumeLoginNonce(_login)) {
2049
+ res.writeHead(302, {
2050
+ Location: url,
2051
+ 'Set-Cookie': humanSessionCookie(),
2052
+ 'Cache-Control': 'no-store',
2053
+ });
2054
+ res.end();
2055
+ return;
2056
+ }
2057
+ if (!isHumanRequest(req)) {
2058
+ res.writeHead(401, {
2059
+ 'Content-Type': 'text/html; charset=utf-8',
2060
+ 'Cache-Control': 'no-store',
2061
+ });
2062
+ res.end(loginRequiredPage());
2063
+ return;
2064
+ }
2065
+ }
2066
+ if (
2067
+ req.method !== 'GET' &&
2068
+ req.method !== 'HEAD' &&
2069
+ _isHumanRoute(url) &&
2070
+ !isHumanRequest(req)
2071
+ ) {
2072
+ res.writeHead(403, {
2073
+ 'Content-Type': 'application/json',
2074
+ ...(corsOrigin ? { 'Access-Control-Allow-Origin': corsOrigin } : {}),
2075
+ });
2076
+ res.end(
2077
+ JSON.stringify({
2078
+ ok: false,
2079
+ error:
2080
+ 'this acts as the human supervising the org — open the dashboard with `monomind dashboard open` and do it from that browser',
2081
+ }),
2082
+ );
2083
+ return;
2084
+ }
2085
+
2005
2086
  // ------------------------------------------------------------------ GET /
2006
2087
  if (req.method === 'GET' && url === '/') {
2007
2088
  const htmlPath = path.join(__dirname, 'dashboard.html');
@@ -6091,7 +6172,14 @@ export async function startServer({
6091
6172
 
6092
6173
  // ---------------------------------------------------------- Auto-open
6093
6174
  if (openBrowser) {
6094
- openUrl(url).catch(() => {
6175
+ // A one-time login link, so the browser this opens gets the human session.
6176
+ let _openAt = url;
6177
+ try {
6178
+ _openAt = `${url}/?login=${issueLoginNonce()}`;
6179
+ } catch (_) {
6180
+ /* no session possible — the page explains how to get one */
6181
+ }
6182
+ openUrl(_openAt).catch(() => {
6095
6183
  // Non-fatal: browser open failure should not crash the server
6096
6184
  });
6097
6185
  }