@monoes/monomindcli 2.14.1 → 2.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/.claude/helpers/control-start.cjs +10 -13
  2. package/.claude/skills/monodesign/scripts/context.mjs +4 -4
  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 +67 -47
  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 +24 -25
  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 +405 -432
  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/dist/src/commands/doc-filters.d.ts.map +1 -1
  50. package/dist/src/commands/doc-filters.js +6 -0
  51. package/dist/src/commands/doc-filters.js.map +1 -1
  52. package/dist/src/commands/doc-library.d.ts +2 -1
  53. package/dist/src/commands/doc-library.d.ts.map +1 -1
  54. package/dist/src/commands/doc-library.js +66 -2
  55. package/dist/src/commands/doc-library.js.map +1 -1
  56. package/dist/src/commands/doc.d.ts.map +1 -1
  57. package/dist/src/commands/doc.js +2 -0
  58. package/dist/src/commands/doc.js.map +1 -1
  59. package/dist/src/commands/org.d.ts.map +1 -1
  60. package/dist/src/commands/org.js +42 -4
  61. package/dist/src/commands/org.js.map +1 -1
  62. package/dist/src/commands/ui.d.ts.map +1 -1
  63. package/dist/src/commands/ui.js +60 -0
  64. package/dist/src/commands/ui.js.map +1 -1
  65. package/dist/src/knowledge/capture-envelope.d.ts +5 -0
  66. package/dist/src/knowledge/capture-envelope.d.ts.map +1 -1
  67. package/dist/src/knowledge/capture-envelope.js +2 -0
  68. package/dist/src/knowledge/capture-envelope.js.map +1 -1
  69. package/dist/src/knowledge/document-chunking.d.ts +42 -0
  70. package/dist/src/knowledge/document-chunking.d.ts.map +1 -0
  71. package/dist/src/knowledge/document-chunking.js +288 -0
  72. package/dist/src/knowledge/document-chunking.js.map +1 -0
  73. package/dist/src/knowledge/document-index.d.ts +124 -0
  74. package/dist/src/knowledge/document-index.d.ts.map +1 -0
  75. package/dist/src/knowledge/document-index.js +314 -0
  76. package/dist/src/knowledge/document-index.js.map +1 -0
  77. package/dist/src/knowledge/document-ingest.d.ts +23 -0
  78. package/dist/src/knowledge/document-ingest.d.ts.map +1 -0
  79. package/dist/src/knowledge/document-ingest.js +368 -0
  80. package/dist/src/knowledge/document-ingest.js.map +1 -0
  81. package/dist/src/knowledge/document-pipeline.d.ts +26 -208
  82. package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
  83. package/dist/src/knowledge/document-pipeline.js +25 -1104
  84. package/dist/src/knowledge/document-pipeline.js.map +1 -1
  85. package/dist/src/knowledge/document-search.d.ts +27 -0
  86. package/dist/src/knowledge/document-search.d.ts.map +1 -0
  87. package/dist/src/knowledge/document-search.js +138 -0
  88. package/dist/src/knowledge/document-search.js.map +1 -0
  89. package/dist/src/knowledge/document-store.d.ts +28 -0
  90. package/dist/src/knowledge/document-store.d.ts.map +1 -0
  91. package/dist/src/knowledge/document-store.js +61 -0
  92. package/dist/src/knowledge/document-store.js.map +1 -0
  93. package/dist/src/knowledge/document-types.d.ts +103 -0
  94. package/dist/src/knowledge/document-types.d.ts.map +1 -0
  95. package/dist/src/knowledge/document-types.js +12 -0
  96. package/dist/src/knowledge/document-types.js.map +1 -0
  97. package/dist/src/knowledge/highlights.d.ts +168 -0
  98. package/dist/src/knowledge/highlights.d.ts.map +1 -0
  99. package/dist/src/knowledge/highlights.js +311 -0
  100. package/dist/src/knowledge/highlights.js.map +1 -0
  101. package/dist/src/knowledge/lookup.d.ts +80 -0
  102. package/dist/src/knowledge/lookup.d.ts.map +1 -0
  103. package/dist/src/knowledge/lookup.js +156 -0
  104. package/dist/src/knowledge/lookup.js.map +1 -0
  105. package/dist/src/knowledge/okf-bundle.d.ts +19 -0
  106. package/dist/src/knowledge/okf-bundle.d.ts.map +1 -0
  107. package/dist/src/knowledge/okf-bundle.js +106 -0
  108. package/dist/src/knowledge/okf-bundle.js.map +1 -0
  109. package/dist/src/knowledge/profile-store.d.ts +134 -0
  110. package/dist/src/knowledge/profile-store.d.ts.map +1 -0
  111. package/dist/src/knowledge/profile-store.js +237 -0
  112. package/dist/src/knowledge/profile-store.js.map +1 -0
  113. package/dist/src/orgrt/agent-runner.d.ts +4 -0
  114. package/dist/src/orgrt/agent-runner.d.ts.map +1 -1
  115. package/dist/src/orgrt/agent-runner.js +22 -0
  116. package/dist/src/orgrt/agent-runner.js.map +1 -1
  117. package/dist/src/orgrt/antigravity-runner.d.ts.map +1 -1
  118. package/dist/src/orgrt/antigravity-runner.js +2 -1
  119. package/dist/src/orgrt/antigravity-runner.js.map +1 -1
  120. package/dist/src/orgrt/authority-mask.d.ts +32 -0
  121. package/dist/src/orgrt/authority-mask.d.ts.map +1 -0
  122. package/dist/src/orgrt/authority-mask.js +135 -0
  123. package/dist/src/orgrt/authority-mask.js.map +1 -0
  124. package/dist/src/orgrt/codex-runner.d.ts.map +1 -1
  125. package/dist/src/orgrt/codex-runner.js +2 -1
  126. package/dist/src/orgrt/codex-runner.js.map +1 -1
  127. package/dist/src/orgrt/copilot-runner.d.ts.map +1 -1
  128. package/dist/src/orgrt/copilot-runner.js +2 -1
  129. package/dist/src/orgrt/copilot-runner.js.map +1 -1
  130. package/dist/src/orgrt/crush-runner.d.ts.map +1 -1
  131. package/dist/src/orgrt/crush-runner.js +6 -1
  132. package/dist/src/orgrt/crush-runner.js.map +1 -1
  133. package/dist/src/orgrt/daemon.d.ts +4 -0
  134. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  135. package/dist/src/orgrt/daemon.js +13 -2
  136. package/dist/src/orgrt/daemon.js.map +1 -1
  137. package/dist/src/orgrt/decisions.d.ts +9 -0
  138. package/dist/src/orgrt/decisions.d.ts.map +1 -1
  139. package/dist/src/orgrt/decisions.js +32 -5
  140. package/dist/src/orgrt/decisions.js.map +1 -1
  141. package/dist/src/orgrt/file-roots.d.ts +2 -1
  142. package/dist/src/orgrt/file-roots.d.ts.map +1 -1
  143. package/dist/src/orgrt/file-roots.js +7 -3
  144. package/dist/src/orgrt/file-roots.js.map +1 -1
  145. package/dist/src/orgrt/grok-runner.d.ts.map +1 -1
  146. package/dist/src/orgrt/grok-runner.js +2 -1
  147. package/dist/src/orgrt/grok-runner.js.map +1 -1
  148. package/dist/src/orgrt/hermes-runner.d.ts.map +1 -1
  149. package/dist/src/orgrt/hermes-runner.js +2 -1
  150. package/dist/src/orgrt/hermes-runner.js.map +1 -1
  151. package/dist/src/orgrt/inbox.d.ts.map +1 -1
  152. package/dist/src/orgrt/inbox.js +70 -4
  153. package/dist/src/orgrt/inbox.js.map +1 -1
  154. package/dist/src/orgrt/kimicode-runner.d.ts.map +1 -1
  155. package/dist/src/orgrt/kimicode-runner.js +2 -1
  156. package/dist/src/orgrt/kimicode-runner.js.map +1 -1
  157. package/dist/src/orgrt/opencode-runner.d.ts.map +1 -1
  158. package/dist/src/orgrt/opencode-runner.js +3 -2
  159. package/dist/src/orgrt/opencode-runner.js.map +1 -1
  160. package/dist/src/orgrt/pi-rpc-runner.d.ts.map +1 -1
  161. package/dist/src/orgrt/pi-rpc-runner.js +3 -2
  162. package/dist/src/orgrt/pi-rpc-runner.js.map +1 -1
  163. package/dist/src/orgrt/pi-runner.d.ts.map +1 -1
  164. package/dist/src/orgrt/pi-runner.js +2 -1
  165. package/dist/src/orgrt/pi-runner.js.map +1 -1
  166. package/dist/src/orgrt/policy.d.ts.map +1 -1
  167. package/dist/src/orgrt/policy.js +3 -0
  168. package/dist/src/orgrt/policy.js.map +1 -1
  169. package/dist/src/orgrt/qwen-rpc-runner.d.ts.map +1 -1
  170. package/dist/src/orgrt/qwen-rpc-runner.js +3 -2
  171. package/dist/src/orgrt/qwen-rpc-runner.js.map +1 -1
  172. package/dist/src/orgrt/qwen-runner.d.ts.map +1 -1
  173. package/dist/src/orgrt/qwen-runner.js +2 -1
  174. package/dist/src/orgrt/qwen-runner.js.map +1 -1
  175. package/dist/src/orgrt/role-sandbox.d.ts +21 -0
  176. package/dist/src/orgrt/role-sandbox.d.ts.map +1 -1
  177. package/dist/src/orgrt/role-sandbox.js +31 -6
  178. package/dist/src/orgrt/role-sandbox.js.map +1 -1
  179. package/dist/src/orgrt/session.d.ts.map +1 -1
  180. package/dist/src/orgrt/session.js +21 -2
  181. package/dist/src/orgrt/session.js.map +1 -1
  182. package/dist/src/orgrt/task-dag.d.ts +3 -0
  183. package/dist/src/orgrt/task-dag.d.ts.map +1 -1
  184. package/dist/src/orgrt/task-dag.js +1 -0
  185. package/dist/src/orgrt/task-dag.js.map +1 -1
  186. package/dist/src/orgrt/types.d.ts +5 -0
  187. package/dist/src/orgrt/types.d.ts.map +1 -1
  188. package/dist/src/orgrt/types.js +23 -1
  189. package/dist/src/orgrt/types.js.map +1 -1
  190. package/dist/src/ui/dashboard.html +28 -848
  191. package/dist/src/ui/human-auth.mjs +103 -0
  192. package/dist/src/ui/org-hil.mjs +86 -37
  193. package/dist/src/ui/org-runtime.mjs +21 -13
  194. package/dist/src/ui/routes-org.mjs +49 -445
  195. package/dist/src/ui/server.mjs +103 -4
  196. package/dist/tsconfig.tsbuildinfo +1 -1
  197. package/package.json +6 -6
@@ -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'
@@ -877,16 +884,27 @@ function bindServer(server, port) {
877
884
  let attempt = 0;
878
885
 
879
886
  function tryPort(p) {
880
- server.listen(p, '127.0.0.1', () => resolve(p));
887
+ // A failed attempt's 'listening' callback is never invoked (listen()
888
+ // failure emits 'error', not 'listening'), so it stays armed on the
889
+ // server. Without removeAllListeners('listening') here, the NEXT
890
+ // attempt's successful bind fires every still-armed 'listening'
891
+ // listener in registration order — the failed attempt's callback runs
892
+ // first and resolves with the busy port it never got, not the port
893
+ // actually bound. Resolving from server.address().port (rather than
894
+ // the closed-over `p`) is the same fix for the port:0 (OS-assigned)
895
+ // case, where `p` is 0 but the real port is whatever the OS picked.
896
+ server.removeAllListeners('listening');
897
+ server.removeAllListeners('error');
898
+ server.once('listening', () => resolve(server.address().port));
881
899
  server.once('error', (err) => {
882
900
  if (err.code === 'EADDRINUSE' && attempt < maxTries) {
883
901
  attempt += 1;
884
- server.removeAllListeners('error');
885
902
  tryPort(p + 1);
886
903
  } else {
887
904
  reject(err);
888
905
  }
889
906
  });
907
+ server.listen(p, '127.0.0.1');
890
908
  }
891
909
 
892
910
  tryPort(port);
@@ -1921,7 +1939,20 @@ export async function startServer({
1921
1939
  '/orgs-files.js',
1922
1940
  '/markdown.js',
1923
1941
  '/favicon.ico',
1942
+ '/api/identity',
1924
1943
  ]);
1944
+ // Pages that embed the token: served only to a browser with the human session.
1945
+ const _HUMAN_PAGES = new Set(['/', '/v2', '/orgs', '/mastermind']);
1946
+ // Mutations that act as the human supervising an org (org-hil.mjs,
1947
+ // org-runtime.mjs's config patch): the token alone is not enough.
1948
+ const _HUMAN_ROUTES = [
1949
+ /^\/api\/questions\/answer$/,
1950
+ /^\/api\/org\/[^/]+\/approvals\/[^/]+$/,
1951
+ /^\/api\/org\/[^/]+\/gates\/[^/]+$/,
1952
+ /^\/api\/org\/[^/]+\/config$/,
1953
+ /^\/api\/orgs\/[^/]+\/chat$/,
1954
+ ];
1955
+ const _isHumanRoute = (url) => _HUMAN_ROUTES.some((re) => re.test(url));
1925
1956
  const _isOpenRoute = (url, method) =>
1926
1957
  (method === 'GET' || method === 'HEAD' || method === 'OPTIONS') &&
1927
1958
  (_OPEN_ROUTES.has(url) ||
@@ -2002,6 +2033,67 @@ export async function startServer({
2002
2033
  }
2003
2034
  }
2004
2035
 
2036
+ // ------------------------------------------------ GET /api/identity
2037
+ // Which process serves this port and where its token file is — never the
2038
+ // token itself. control-start.cjs pairs another project with a server it
2039
+ // finds already listening, by reading that file as the same user.
2040
+ if (req.method === 'GET' && url === '/api/identity') {
2041
+ res.writeHead(200, { 'Content-Type': 'application/json' });
2042
+ res.end(
2043
+ JSON.stringify({
2044
+ pid: process.pid,
2045
+ dir: projectDir || process.cwd(),
2046
+ tokenFile: _dashboardTokenFilePath,
2047
+ }),
2048
+ );
2049
+ return;
2050
+ }
2051
+
2052
+ // ── Human session (human-auth.mjs) ─────────────────────────────────────
2053
+ // The pages embed the dashboard token, and the decision routes act as the
2054
+ // human who supervises an org — both need the browser session cookie, not
2055
+ // just the token any local process can obtain. A one-time `?login=` link
2056
+ // sets that cookie.
2057
+ if (req.method === 'GET' && _HUMAN_PAGES.has(url)) {
2058
+ const _login = new URL(req.url, 'http://localhost').searchParams.get('login');
2059
+ if (_login && consumeLoginNonce(_login)) {
2060
+ res.writeHead(302, {
2061
+ Location: url,
2062
+ 'Set-Cookie': humanSessionCookie(),
2063
+ 'Cache-Control': 'no-store',
2064
+ });
2065
+ res.end();
2066
+ return;
2067
+ }
2068
+ if (!isHumanRequest(req)) {
2069
+ res.writeHead(401, {
2070
+ 'Content-Type': 'text/html; charset=utf-8',
2071
+ 'Cache-Control': 'no-store',
2072
+ });
2073
+ res.end(loginRequiredPage());
2074
+ return;
2075
+ }
2076
+ }
2077
+ if (
2078
+ req.method !== 'GET' &&
2079
+ req.method !== 'HEAD' &&
2080
+ _isHumanRoute(url) &&
2081
+ !isHumanRequest(req)
2082
+ ) {
2083
+ res.writeHead(403, {
2084
+ 'Content-Type': 'application/json',
2085
+ ...(corsOrigin ? { 'Access-Control-Allow-Origin': corsOrigin } : {}),
2086
+ });
2087
+ res.end(
2088
+ JSON.stringify({
2089
+ ok: false,
2090
+ error:
2091
+ 'this acts as the human supervising the org — open the dashboard with `monomind dashboard open` and do it from that browser',
2092
+ }),
2093
+ );
2094
+ return;
2095
+ }
2096
+
2005
2097
  // ------------------------------------------------------------------ GET /
2006
2098
  if (req.method === 'GET' && url === '/') {
2007
2099
  const htmlPath = path.join(__dirname, 'dashboard.html');
@@ -6091,7 +6183,14 @@ export async function startServer({
6091
6183
 
6092
6184
  // ---------------------------------------------------------- Auto-open
6093
6185
  if (openBrowser) {
6094
- openUrl(url).catch(() => {
6186
+ // A one-time login link, so the browser this opens gets the human session.
6187
+ let _openAt = url;
6188
+ try {
6189
+ _openAt = `${url}/?login=${issueLoginNonce()}`;
6190
+ } catch (_) {
6191
+ /* no session possible — the page explains how to get one */
6192
+ }
6193
+ openUrl(_openAt).catch(() => {
6095
6194
  // Non-fatal: browser open failure should not crash the server
6096
6195
  });
6097
6196
  }