@monoes/monomindcli 1.14.7 → 1.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 (329) hide show
  1. package/.claude/agents/reengineer-squad/boss.md +113 -0
  2. package/.claude/agents/reengineer-squad/critic-architect.md +132 -0
  3. package/.claude/agents/reengineer-squad/git-manager.md +145 -0
  4. package/.claude/agents/reengineer-squad/idea-generator.md +95 -0
  5. package/.claude/agents/reengineer-squad/implementer.md +112 -0
  6. package/.claude/agents/reengineer-squad/integration-planner.md +112 -0
  7. package/.claude/agents/reengineer-squad/source-analyst.md +103 -0
  8. package/.claude/agents/reengineer-squad/target-analyst.md +118 -0
  9. package/.claude/agents/reengineer-squad/tester.md +105 -0
  10. package/.claude/commands/mastermind/master.md +35 -14
  11. package/.claude/helpers/handlers/capture-handler.cjs +155 -18
  12. package/.claude/helpers/monolean-activate.cjs +20 -0
  13. package/.claude/helpers/monolean-config.cjs +76 -0
  14. package/.claude/helpers/monolean-instructions.cjs +109 -0
  15. package/.claude/helpers/monolean-propagate.cjs +9 -0
  16. package/.claude/helpers/monolean-tracker.cjs +18 -0
  17. package/.claude/helpers/skill-registry.json +2 -2
  18. package/.claude/skills/agent-browser-testing/SKILL.md +301 -18
  19. package/.claude/skills/mastermind/runorg.md +69 -23
  20. package/.claude/skills/monodesign/SKILL.md +32 -1
  21. package/.claude/skills/monodesign/adapt.md +53 -0
  22. package/.claude/skills/monodesign/agents/monodesign-asset-producer.md +100 -0
  23. package/.claude/skills/monodesign/animate.md +65 -0
  24. package/.claude/skills/monodesign/audit.md +89 -0
  25. package/.claude/skills/monodesign/bolder.md +50 -0
  26. package/.claude/skills/monodesign/clarify.md +64 -0
  27. package/.claude/skills/monodesign/colorize.md +68 -0
  28. package/.claude/skills/monodesign/craft.md +51 -0
  29. package/.claude/skills/monodesign/critique.md +66 -0
  30. package/.claude/skills/monodesign/delight.md +47 -0
  31. package/.claude/skills/monodesign/distill.md +56 -0
  32. package/.claude/skills/monodesign/document.md +80 -0
  33. package/.claude/skills/monodesign/extract.md +74 -0
  34. package/.claude/skills/monodesign/harden.md +65 -0
  35. package/.claude/skills/monodesign/live.md +59 -0
  36. package/.claude/skills/monodesign/onboard.md +50 -0
  37. package/.claude/skills/monodesign/optimize.md +64 -0
  38. package/.claude/skills/monodesign/overdrive.md +56 -0
  39. package/.claude/skills/monodesign/polish.md +68 -0
  40. package/.claude/skills/monodesign/quieter.md +57 -0
  41. package/.claude/skills/monodesign/reference/antipatterns-catalog.md +248 -76
  42. package/.claude/skills/monodesign/reference/codex.md +107 -0
  43. package/.claude/skills/monodesign/reference/craft.md +3 -0
  44. package/.claude/skills/monodesign/reference/hooks.md +99 -0
  45. package/.claude/skills/monodesign/reference/image-prompts.md +12 -0
  46. package/.claude/skills/monodesign/shape.md +71 -0
  47. package/.claude/skills/monodesign/teach.md +69 -0
  48. package/.claude/skills/monodesign/typeset.md +59 -0
  49. package/.claude/skills/monolean/SKILL.md +118 -0
  50. package/.claude/skills/monolean-audit/SKILL.md +41 -0
  51. package/.claude/skills/monolean-debt/SKILL.md +46 -0
  52. package/.claude/skills/monolean-help/SKILL.md +60 -0
  53. package/.claude/skills/monolean-review/SKILL.md +57 -0
  54. package/bin/cli.js +3 -1
  55. package/dist/dashboard/server.js +137 -0
  56. package/dist/src/__tests__/browse-adapters.test.d.ts +2 -0
  57. package/dist/src/__tests__/browse-adapters.test.d.ts.map +1 -0
  58. package/dist/src/__tests__/browse-adapters.test.js +51 -0
  59. package/dist/src/__tests__/browse-adapters.test.js.map +1 -0
  60. package/dist/src/__tests__/browse-analyzer.test.d.ts +2 -0
  61. package/dist/src/__tests__/browse-analyzer.test.d.ts.map +1 -0
  62. package/dist/src/__tests__/browse-analyzer.test.js +68 -0
  63. package/dist/src/__tests__/browse-analyzer.test.js.map +1 -0
  64. package/dist/src/__tests__/browse-builtin-handlers.test.d.ts +2 -0
  65. package/dist/src/__tests__/browse-builtin-handlers.test.d.ts.map +1 -0
  66. package/dist/src/__tests__/browse-builtin-handlers.test.js +139 -0
  67. package/dist/src/__tests__/browse-builtin-handlers.test.js.map +1 -0
  68. package/dist/src/__tests__/browse-cdp.test.d.ts +2 -0
  69. package/dist/src/__tests__/browse-cdp.test.d.ts.map +1 -0
  70. package/dist/src/__tests__/browse-cdp.test.js +169 -0
  71. package/dist/src/__tests__/browse-cdp.test.js.map +1 -0
  72. package/dist/src/__tests__/browse-dashboard.test.d.ts +2 -0
  73. package/dist/src/__tests__/browse-dashboard.test.d.ts.map +1 -0
  74. package/dist/src/__tests__/browse-dashboard.test.js +179 -0
  75. package/dist/src/__tests__/browse-dashboard.test.js.map +1 -0
  76. package/dist/src/__tests__/browse-engine.test.d.ts +2 -0
  77. package/dist/src/__tests__/browse-engine.test.d.ts.map +1 -0
  78. package/dist/src/__tests__/browse-engine.test.js +122 -0
  79. package/dist/src/__tests__/browse-engine.test.js.map +1 -0
  80. package/dist/src/__tests__/browse-expression.test.d.ts +2 -0
  81. package/dist/src/__tests__/browse-expression.test.d.ts.map +1 -0
  82. package/dist/src/__tests__/browse-expression.test.js +54 -0
  83. package/dist/src/__tests__/browse-expression.test.js.map +1 -0
  84. package/dist/src/__tests__/browse-store.test.d.ts +2 -0
  85. package/dist/src/__tests__/browse-store.test.d.ts.map +1 -0
  86. package/dist/src/__tests__/browse-store.test.js +99 -0
  87. package/dist/src/__tests__/browse-store.test.js.map +1 -0
  88. package/dist/src/__tests__/browse-workflow-types.test.d.ts +2 -0
  89. package/dist/src/__tests__/browse-workflow-types.test.d.ts.map +1 -0
  90. package/dist/src/__tests__/browse-workflow-types.test.js +33 -0
  91. package/dist/src/__tests__/browse-workflow-types.test.js.map +1 -0
  92. package/dist/src/browser/action-builder/analyzer.d.ts +11 -0
  93. package/dist/src/browser/action-builder/analyzer.d.ts.map +1 -0
  94. package/dist/src/browser/action-builder/analyzer.js +71 -0
  95. package/dist/src/browser/action-builder/analyzer.js.map +1 -0
  96. package/dist/src/browser/action-builder/types.d.ts +47 -0
  97. package/dist/src/browser/action-builder/types.d.ts.map +1 -0
  98. package/dist/src/browser/action-builder/types.js +2 -0
  99. package/dist/src/browser/action-builder/types.js.map +1 -0
  100. package/dist/src/browser/adapters/gemini.d.ts +3 -0
  101. package/dist/src/browser/adapters/gemini.d.ts.map +1 -0
  102. package/dist/src/browser/adapters/gemini.js +16 -0
  103. package/dist/src/browser/adapters/gemini.js.map +1 -0
  104. package/dist/src/browser/adapters/google.d.ts +3 -0
  105. package/dist/src/browser/adapters/google.d.ts.map +1 -0
  106. package/dist/src/browser/adapters/google.js +17 -0
  107. package/dist/src/browser/adapters/google.js.map +1 -0
  108. package/dist/src/browser/adapters/index.d.ts +19 -0
  109. package/dist/src/browser/adapters/index.d.ts.map +1 -0
  110. package/dist/src/browser/adapters/index.js +23 -0
  111. package/dist/src/browser/adapters/index.js.map +1 -0
  112. package/dist/src/browser/adapters/instagram.d.ts +3 -0
  113. package/dist/src/browser/adapters/instagram.d.ts.map +1 -0
  114. package/dist/src/browser/adapters/instagram.js +17 -0
  115. package/dist/src/browser/adapters/instagram.js.map +1 -0
  116. package/dist/src/browser/adapters/linkedin.d.ts +3 -0
  117. package/dist/src/browser/adapters/linkedin.d.ts.map +1 -0
  118. package/dist/src/browser/adapters/linkedin.js +19 -0
  119. package/dist/src/browser/adapters/linkedin.js.map +1 -0
  120. package/dist/src/browser/adapters/microsoft.d.ts +3 -0
  121. package/dist/src/browser/adapters/microsoft.d.ts.map +1 -0
  122. package/dist/src/browser/adapters/microsoft.js +16 -0
  123. package/dist/src/browser/adapters/microsoft.js.map +1 -0
  124. package/dist/src/browser/adapters/x.d.ts +3 -0
  125. package/dist/src/browser/adapters/x.d.ts.map +1 -0
  126. package/dist/src/browser/adapters/x.js +19 -0
  127. package/dist/src/browser/adapters/x.js.map +1 -0
  128. package/dist/src/browser/dashboard/api-types.d.ts +50 -0
  129. package/dist/src/browser/dashboard/api-types.d.ts.map +1 -0
  130. package/dist/src/browser/dashboard/api-types.js +14 -0
  131. package/dist/src/browser/dashboard/api-types.js.map +1 -0
  132. package/dist/src/browser/dashboard/server.d.ts +9 -0
  133. package/dist/src/browser/dashboard/server.d.ts.map +1 -0
  134. package/dist/src/browser/dashboard/server.js +62 -0
  135. package/dist/src/browser/dashboard/server.js.map +1 -0
  136. package/dist/src/browser/dashboard/ui.html +1811 -0
  137. package/dist/src/browser/workflow/builtin-handlers.d.ts +3 -0
  138. package/dist/src/browser/workflow/builtin-handlers.d.ts.map +1 -0
  139. package/dist/src/browser/workflow/builtin-handlers.js +343 -0
  140. package/dist/src/browser/workflow/builtin-handlers.js.map +1 -0
  141. package/dist/src/browser/workflow/engine.d.ts +15 -0
  142. package/dist/src/browser/workflow/engine.d.ts.map +1 -0
  143. package/dist/src/browser/workflow/engine.js +127 -0
  144. package/dist/src/browser/workflow/engine.js.map +1 -0
  145. package/dist/src/browser/workflow/expression.d.ts +4 -0
  146. package/dist/src/browser/workflow/expression.d.ts.map +1 -0
  147. package/dist/src/browser/workflow/expression.js +64 -0
  148. package/dist/src/browser/workflow/expression.js.map +1 -0
  149. package/dist/src/browser/workflow/store.d.ts +24 -0
  150. package/dist/src/browser/workflow/store.d.ts.map +1 -0
  151. package/dist/src/browser/workflow/store.js +145 -0
  152. package/dist/src/browser/workflow/store.js.map +1 -0
  153. package/dist/src/browser/workflow/types.d.ts +48 -0
  154. package/dist/src/browser/workflow/types.d.ts.map +1 -0
  155. package/dist/src/browser/workflow/types.js +2 -0
  156. package/dist/src/browser/workflow/types.js.map +1 -0
  157. package/dist/src/commands/browse-action.d.ts +4 -0
  158. package/dist/src/commands/browse-action.d.ts.map +1 -0
  159. package/dist/src/commands/browse-action.js +151 -0
  160. package/dist/src/commands/browse-action.js.map +1 -0
  161. package/dist/src/commands/browse-platform.d.ts +4 -0
  162. package/dist/src/commands/browse-platform.d.ts.map +1 -0
  163. package/dist/src/commands/browse-platform.js +117 -0
  164. package/dist/src/commands/browse-platform.js.map +1 -0
  165. package/dist/src/commands/browse-workflow.d.ts +4 -0
  166. package/dist/src/commands/browse-workflow.d.ts.map +1 -0
  167. package/dist/src/commands/browse-workflow.js +153 -0
  168. package/dist/src/commands/browse-workflow.js.map +1 -0
  169. package/dist/src/commands/browse.d.ts +10 -6
  170. package/dist/src/commands/browse.d.ts.map +1 -1
  171. package/dist/src/commands/browse.js +11 -2154
  172. package/dist/src/commands/browse.js.map +1 -1
  173. package/dist/src/commands/design-detect.d.ts +21 -0
  174. package/dist/src/commands/design-detect.d.ts.map +1 -0
  175. package/dist/src/commands/design-detect.js +127 -0
  176. package/dist/src/commands/design-detect.js.map +1 -0
  177. package/dist/src/commands/design-palette.d.ts +22 -0
  178. package/dist/src/commands/design-palette.d.ts.map +1 -0
  179. package/dist/src/commands/design-palette.js +539 -0
  180. package/dist/src/commands/design-palette.js.map +1 -0
  181. package/dist/src/commands/hooks-core-commands.d.ts +10 -0
  182. package/dist/src/commands/hooks-core-commands.d.ts.map +1 -0
  183. package/dist/src/commands/hooks-core-commands.js +377 -0
  184. package/dist/src/commands/hooks-core-commands.js.map +1 -0
  185. package/dist/src/commands/hooks-coverage-commands.d.ts +12 -0
  186. package/dist/src/commands/hooks-coverage-commands.d.ts.map +1 -0
  187. package/dist/src/commands/hooks-coverage-commands.js +1217 -0
  188. package/dist/src/commands/hooks-coverage-commands.js.map +1 -0
  189. package/dist/src/commands/hooks-coverage-utils.d.ts +42 -0
  190. package/dist/src/commands/hooks-coverage-utils.d.ts.map +1 -0
  191. package/dist/src/commands/hooks-coverage-utils.js +220 -0
  192. package/dist/src/commands/hooks-coverage-utils.js.map +1 -0
  193. package/dist/src/commands/hooks-extended-commands.d.ts +14 -0
  194. package/dist/src/commands/hooks-extended-commands.d.ts.map +1 -0
  195. package/dist/src/commands/hooks-extended-commands.js +579 -0
  196. package/dist/src/commands/hooks-extended-commands.js.map +1 -0
  197. package/dist/src/commands/hooks-formatting.d.ts +13 -0
  198. package/dist/src/commands/hooks-formatting.d.ts.map +1 -0
  199. package/dist/src/commands/hooks-formatting.js +42 -0
  200. package/dist/src/commands/hooks-formatting.js.map +1 -0
  201. package/dist/src/commands/hooks-routing-commands.d.ts +15 -0
  202. package/dist/src/commands/hooks-routing-commands.d.ts.map +1 -0
  203. package/dist/src/commands/hooks-routing-commands.js +723 -0
  204. package/dist/src/commands/hooks-routing-commands.js.map +1 -0
  205. package/dist/src/commands/hooks-workers.d.ts +9 -0
  206. package/dist/src/commands/hooks-workers.d.ts.map +1 -0
  207. package/dist/src/commands/hooks-workers.js +782 -0
  208. package/dist/src/commands/hooks-workers.js.map +1 -0
  209. package/dist/src/commands/hooks.d.ts +8 -0
  210. package/dist/src/commands/hooks.d.ts.map +1 -1
  211. package/dist/src/commands/hooks.js +179 -4103
  212. package/dist/src/commands/hooks.js.map +1 -1
  213. package/dist/src/commands/index.d.ts +1 -0
  214. package/dist/src/commands/index.d.ts.map +1 -1
  215. package/dist/src/commands/index.js +6 -0
  216. package/dist/src/commands/index.js.map +1 -1
  217. package/dist/src/commands/org.d.ts.map +1 -1
  218. package/dist/src/commands/org.js +14 -15
  219. package/dist/src/commands/org.js.map +1 -1
  220. package/dist/src/commands/tokens.d.ts.map +1 -1
  221. package/dist/src/commands/tokens.js +77 -1
  222. package/dist/src/commands/tokens.js.map +1 -1
  223. package/dist/src/init/executor.d.ts.map +1 -1
  224. package/dist/src/init/executor.js +18 -8
  225. package/dist/src/init/executor.js.map +1 -1
  226. package/dist/src/init/settings-generator.d.ts.map +1 -1
  227. package/dist/src/init/settings-generator.js +39 -5
  228. package/dist/src/init/settings-generator.js.map +1 -1
  229. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  230. package/dist/src/init/statusline-generator.js +25 -5
  231. package/dist/src/init/statusline-generator.js.map +1 -1
  232. package/dist/src/mcp-tools/browser-tools.d.ts +3 -5
  233. package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
  234. package/dist/src/mcp-tools/browser-tools.js +619 -326
  235. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  236. package/dist/src/mcp-tools/hooks-embedding.d.ts +161 -0
  237. package/dist/src/mcp-tools/hooks-embedding.d.ts.map +1 -0
  238. package/dist/src/mcp-tools/hooks-embedding.js +506 -0
  239. package/dist/src/mcp-tools/hooks-embedding.js.map +1 -0
  240. package/dist/src/mcp-tools/hooks-intelligence.d.ts +26 -0
  241. package/dist/src/mcp-tools/hooks-intelligence.d.ts.map +1 -0
  242. package/dist/src/mcp-tools/hooks-intelligence.js +1328 -0
  243. package/dist/src/mcp-tools/hooks-intelligence.js.map +1 -0
  244. package/dist/src/mcp-tools/hooks-routing.d.ts +27 -0
  245. package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -0
  246. package/dist/src/mcp-tools/hooks-routing.js +1591 -0
  247. package/dist/src/mcp-tools/hooks-routing.js.map +1 -0
  248. package/dist/src/mcp-tools/hooks-tools.d.ts +3 -38
  249. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  250. package/dist/src/mcp-tools/hooks-tools.js +5 -3393
  251. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  252. package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
  253. package/dist/src/mcp-tools/monograph-tools.js +24 -14
  254. package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
  255. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
  256. package/dist/src/mcp-tools/workflow-tools.js +54 -1
  257. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  258. package/dist/src/memory/embedding-operations.d.ts +58 -0
  259. package/dist/src/memory/embedding-operations.d.ts.map +1 -0
  260. package/dist/src/memory/embedding-operations.js +299 -0
  261. package/dist/src/memory/embedding-operations.js.map +1 -0
  262. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -1
  263. package/dist/src/memory/ewc-consolidation.js +37 -3
  264. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  265. package/dist/src/memory/hnsw-operations.d.ts +130 -0
  266. package/dist/src/memory/hnsw-operations.d.ts.map +1 -0
  267. package/dist/src/memory/hnsw-operations.js +400 -0
  268. package/dist/src/memory/hnsw-operations.js.map +1 -0
  269. package/dist/src/memory/intelligence.d.ts.map +1 -1
  270. package/dist/src/memory/intelligence.js +42 -23
  271. package/dist/src/memory/intelligence.js.map +1 -1
  272. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  273. package/dist/src/memory/memory-bridge.js +52 -8
  274. package/dist/src/memory/memory-bridge.js.map +1 -1
  275. package/dist/src/memory/memory-crud.d.ts +67 -0
  276. package/dist/src/memory/memory-crud.d.ts.map +1 -0
  277. package/dist/src/memory/memory-crud.js +415 -0
  278. package/dist/src/memory/memory-crud.js.map +1 -0
  279. package/dist/src/memory/memory-initializer.d.ts +9 -322
  280. package/dist/src/memory/memory-initializer.d.ts.map +1 -1
  281. package/dist/src/memory/memory-initializer.js +17 -1794
  282. package/dist/src/memory/memory-initializer.js.map +1 -1
  283. package/dist/src/memory/memory-migrations.d.ts +30 -0
  284. package/dist/src/memory/memory-migrations.d.ts.map +1 -0
  285. package/dist/src/memory/memory-migrations.js +134 -0
  286. package/dist/src/memory/memory-migrations.js.map +1 -0
  287. package/dist/src/memory/memory-read.d.ts +78 -0
  288. package/dist/src/memory/memory-read.d.ts.map +1 -0
  289. package/dist/src/memory/memory-read.js +331 -0
  290. package/dist/src/memory/memory-read.js.map +1 -0
  291. package/dist/src/memory/memory-schema.d.ts +13 -0
  292. package/dist/src/memory/memory-schema.d.ts.map +1 -0
  293. package/dist/src/memory/memory-schema.js +167 -0
  294. package/dist/src/memory/memory-schema.js.map +1 -0
  295. package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
  296. package/dist/src/memory/sona-optimizer.js +37 -4
  297. package/dist/src/memory/sona-optimizer.js.map +1 -1
  298. package/dist/src/monovector/route-outcomes.d.ts.map +1 -1
  299. package/dist/src/monovector/route-outcomes.js +16 -6
  300. package/dist/src/monovector/route-outcomes.js.map +1 -1
  301. package/dist/src/pricing/model-pricing.d.ts +41 -0
  302. package/dist/src/pricing/model-pricing.d.ts.map +1 -0
  303. package/dist/src/pricing/model-pricing.js +61 -0
  304. package/dist/src/pricing/model-pricing.js.map +1 -0
  305. package/dist/src/ui/.monomind/capture/active-run.json +1 -0
  306. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.convs.jsonl +3 -0
  307. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.jsonl +11 -0
  308. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/rigid-qa-restart-1782288201.jsonl +540 -0
  309. package/dist/src/ui/.monomind/orgs/system-trial-qa-threads.jsonl +3 -0
  310. package/dist/src/ui/.monomind/orgs/test-event-fix/runs/rigid-qa-restart-1782288201.jsonl +2 -0
  311. package/dist/src/ui/MODULARIZATION_PLAN.md +79 -0
  312. package/dist/src/ui/collector.mjs +23 -13
  313. package/dist/src/ui/dashboard.html +1653 -14
  314. package/dist/src/ui/data/known-projects.json +1 -0
  315. package/dist/src/ui/data/mastermind-events.jsonl +553 -0
  316. package/dist/src/ui/data/sessions/_index.json +1 -0
  317. package/dist/src/ui/data/sessions/final-sess-001.jsonl +542 -0
  318. package/dist/src/ui/data/unknown-events.jsonl +1 -0
  319. package/dist/src/ui/orgs.html +154 -10
  320. package/dist/src/ui/server.mjs +1162 -168
  321. package/dist/src/ui/sse-manager.mjs +119 -0
  322. package/dist/src/update/checker.js +1 -1
  323. package/dist/src/update/checker.js.map +1 -1
  324. package/dist/tsconfig.tsbuildinfo +1 -1
  325. package/dist/workflow/builtin-handlers.js +321 -0
  326. package/dist/workflow/engine.js +253 -0
  327. package/dist/workflow/expression.js +98 -0
  328. package/dist/workflow/types.js +2 -0
  329. package/package.json +8 -6
@@ -0,0 +1 @@
1
+ {"ts":1782292615394,"type":"ping","body":"{\"type\":\"ping\",\"ts\":1}"}
@@ -152,6 +152,16 @@ html, body {
152
152
  color: var(--green);
153
153
  border: 1px solid oklch(68% 0.20 150 / 0.28);
154
154
  }
155
+ .oi-badge.quiet {
156
+ background: oklch(75% 0.18 80 / 0.10);
157
+ color: oklch(75% 0.18 80);
158
+ border: 1px solid oklch(75% 0.18 80 / 0.30);
159
+ }
160
+ .oi-badge.stale {
161
+ background: oklch(60% 0.20 25 / 0.10);
162
+ color: oklch(65% 0.20 25);
163
+ border: 1px solid oklch(60% 0.20 25 / 0.30);
164
+ }
155
165
  .oi-badge.idle {
156
166
  background: transparent; color: var(--dim);
157
167
  border: 1px solid var(--border);
@@ -210,6 +220,14 @@ html, body {
210
220
  background: oklch(68% 0.20 150 / 0.12);
211
221
  color: var(--green); border: 1px solid oklch(68% 0.20 150 / 0.25);
212
222
  }
223
+ #org-status-badge.quiet {
224
+ background: oklch(75% 0.18 80 / 0.10);
225
+ color: oklch(75% 0.18 80); border: 1px solid oklch(75% 0.18 80 / 0.30);
226
+ }
227
+ #org-status-badge.stale {
228
+ background: oklch(60% 0.20 25 / 0.10);
229
+ color: oklch(65% 0.20 25); border: 1px solid oklch(60% 0.20 25 / 0.30);
230
+ }
213
231
  #org-status-badge.idle {
214
232
  background: transparent; color: var(--dim);
215
233
  border: 1px solid var(--border);
@@ -427,6 +445,18 @@ html, body {
427
445
  }
428
446
  #chat-live-dot.on { background: var(--green); animation: livepulse 2.2s ease-in-out infinite; }
429
447
  #chat-live-label { font-size: 8px; color: var(--dim); }
448
+ /* Phase 3: render mode toggle */
449
+ #chat-mode-bar {
450
+ display: flex; gap: 3px; margin-left: 8px;
451
+ }
452
+ .chat-mode-btn {
453
+ font-size: 7px; padding: 2px 7px; border-radius: 2px;
454
+ border: 1px solid var(--border); color: var(--dim);
455
+ background: transparent; cursor: pointer; font-family: var(--mono);
456
+ letter-spacing: 0.5px; text-transform: uppercase; transition: all 0.15s;
457
+ }
458
+ .chat-mode-btn:hover { border-color: var(--teal-dim); color: var(--muted); }
459
+ .chat-mode-btn.active { border-color: var(--teal); color: var(--teal); background: oklch(62% 0.20 186 / 0.07); }
430
460
 
431
461
  #chat-feed-wrap {
432
462
  flex: 1; overflow-y: auto; padding: 12px 20px;
@@ -870,6 +900,11 @@ html, body {
870
900
  <select id="chat-sess-select" onchange="selectChatSession(this.value)">
871
901
  <option value="">— select a session —</option>
872
902
  </select>
903
+ <div id="chat-mode-bar">
904
+ <button class="chat-mode-btn active" id="mode-summary" onclick="setChatMode('summary')">SUMMARY</button>
905
+ <button class="chat-mode-btn" id="mode-detailed" onclick="setChatMode('detailed')">DETAILED</button>
906
+ <button class="chat-mode-btn" id="mode-raw" onclick="setChatMode('raw')">RAW</button>
907
+ </div>
873
908
  <div id="chat-live-dot"></div>
874
909
  <span id="chat-live-label">OFFLINE</span>
875
910
  </div>
@@ -917,6 +952,30 @@ let allOrgs = [];
917
952
  let selectedOrg = null;
918
953
  let orgDetailData = null;
919
954
  let currentTab = 'chart';
955
+ // Phase 3: Chat render mode (Summary / Detailed / Raw)
956
+ let chatRenderMode = localStorage.getItem('chatRenderMode') || 'summary';
957
+
958
+ // Phase 3: Chat render mode — Summary / Detailed / Raw
959
+ const CHAT_SUMMARY_TYPES = new Set(['session:start','session:complete','domain:dispatch','domain:complete','agent:spawn','agent:complete','agent:edit','org:comms','loop:start','loop:complete','org:artifact','agent:message','intercom']);
960
+ const CHAT_DETAILED_TYPES = new Set([...CHAT_SUMMARY_TYPES,'agent:bash','agent:bash:result','agent:browse','agent:read','agent:read:batch']);
961
+ function setChatMode(mode) {
962
+ chatRenderMode = mode;
963
+ localStorage.setItem('chatRenderMode', mode);
964
+ ['summary','detailed','raw'].forEach(m => {
965
+ const btn = document.getElementById('mode-' + m);
966
+ if (btn) btn.className = 'chat-mode-btn' + (m === mode ? ' active' : '');
967
+ });
968
+ // Re-render chat feed with new mode
969
+ const currentSessId = document.getElementById('chat-sess-select')?.value;
970
+ if (currentSessId) selectChatSession(currentSessId);
971
+ }
972
+ // Apply saved mode on load
973
+ (function() {
974
+ ['summary','detailed','raw'].forEach(m => {
975
+ const btn = document.getElementById('mode-' + m);
976
+ if (btn) btn.className = 'chat-mode-btn' + (m === chatRenderMode ? ' active' : '');
977
+ });
978
+ })();
920
979
 
921
980
  // ── Utilities ──────────────────────────────────────────────────────
922
981
  function esc(s) {
@@ -1017,7 +1076,7 @@ function renderSidebar() {
1017
1076
  <div class="oi-header">
1018
1077
  <div class="oi-dot ${org.running ? 'running' : ''}"></div>
1019
1078
  <div class="oi-name">${esc(org.name)}</div>
1020
- <span class="oi-badge ${org.running ? 'running' : 'idle'}">${org.running ? 'LIVE' : 'IDLE'}</span>
1079
+ <span class="oi-badge ${(()=>{if(!org.running)return 'idle';if(!org.lastEventAt)return 'quiet';const a=Date.now()-org.lastEventAt;return a<1800000?'running':a<7200000?'quiet':'stale';})()} ">${(()=>{if(!org.running)return 'IDLE';if(!org.lastEventAt)return '🟡 QUIET';const a=Date.now()-org.lastEventAt;return a<1800000?'🟢 LIVE':a<7200000?'🟡 QUIET':'🔴 STALE';})()}</span>
1021
1080
  <button class="oi-copy-btn" title="Copy org to another project">COPY</button>
1022
1081
  <button class="oi-export-btn" title="Export org as JSON file">EXPORT</button>
1023
1082
  <button class="oi-import-btn" title="Import org from JSON file">IMPORT</button>
@@ -1087,6 +1146,20 @@ async function selectOrg(name) {
1087
1146
  }
1088
1147
 
1089
1148
  updateHeader(listOrg, orgDetailData);
1149
+
1150
+ // Pre-populate LIVE EVENTS from historical run data (so panel isn't empty on select)
1151
+ if (listOrg.projectDir) {
1152
+ try {
1153
+ const runsR = await fetch(`/api/orgs/${encodeURIComponent(name)}/runs/current?dir=${encodeURIComponent(listOrg.projectDir)}`);
1154
+ if (runsR.ok) {
1155
+ const runsData = await runsR.json();
1156
+ if (runsData.events && runsData.events.length) {
1157
+ orgEventLog[name] = runsData.events.map(ev => ({ ...ev, _ts: ev.ts || Date.now() }));
1158
+ }
1159
+ }
1160
+ } catch (_) {}
1161
+ }
1162
+
1090
1163
  renderTab(currentTab);
1091
1164
  }
1092
1165
 
@@ -1096,8 +1169,21 @@ function updateHeader(listOrg, data) {
1096
1169
 
1097
1170
  const running = listOrg.running;
1098
1171
  const badge = document.getElementById('org-status-badge');
1099
- badge.textContent = running ? 'LIVE' : 'IDLE';
1100
- badge.className = 'oi-badge ' + (running ? 'running' : 'idle');
1172
+ // Phase 2: Three-state liveness — LIVE / QUIET / STALE / IDLE (Issue 6)
1173
+ let badgeState, badgeText;
1174
+ if (running) {
1175
+ if (!listOrg.lastEventAt) { badgeState = 'quiet'; badgeText = '🟡 QUIET'; }
1176
+ else {
1177
+ const _ageMs = Date.now() - listOrg.lastEventAt;
1178
+ if (_ageMs < 30 * 60 * 1000) { badgeState = 'running'; badgeText = '🟢 LIVE'; }
1179
+ else if (_ageMs < 2 * 60 * 60 * 1000) { badgeState = 'quiet'; badgeText = '🟡 QUIET'; }
1180
+ else { badgeState = 'stale'; badgeText = '🔴 STALE'; }
1181
+ }
1182
+ } else {
1183
+ badgeState = 'idle'; badgeText = 'IDLE';
1184
+ }
1185
+ badge.textContent = badgeText;
1186
+ badge.className = 'oi-badge ' + badgeState;
1101
1187
 
1102
1188
  const rolesArr = data ? (data.roles || []) : [];
1103
1189
  const rolesCount = Array.isArray(rolesArr) ? rolesArr.length : (listOrg.roles || 0);
@@ -1624,6 +1710,10 @@ window.selectChatAgent = function(name) {
1624
1710
 
1625
1711
  function appendChatEvent(ev, animate) {
1626
1712
  if (!chatAgentMatchesFilter(ev)) return;
1713
+ // Phase 3: Apply render mode filter
1714
+ if (chatRenderMode === 'summary' && !CHAT_SUMMARY_TYPES.has(ev.type)) return;
1715
+ if (chatRenderMode === 'detailed' && !CHAT_DETAILED_TYPES.has(ev.type)) return;
1716
+ // 'raw' mode: show everything
1627
1717
  const feed = document.getElementById('chat-feed-wrap');
1628
1718
  const empty = document.getElementById('chat-feed-empty');
1629
1719
  if (!feed) return;
@@ -1644,7 +1734,16 @@ function appendChatEvent(ev, animate) {
1644
1734
  el = mkSys(`<span style="color:${dc(ev.domain)}">✓ [${esc((ev.domain||'').toUpperCase())}]</span> ${esc(ev.status||'done')}${arts}`, ts);
1645
1735
  } else if (ev.type === 'agent:spawn') {
1646
1736
  const col = dc(ev.domain);
1647
- el = mkAgent(ev.agent||'agent', `spawned: ${esc(ev.task||'task')}`, ts, col, 'spawn');
1737
+ const name = ev.agentType || ev.from || ev.agent || 'agent';
1738
+ el = mkAgent(name, `spawned: ${esc(ev.task||'task')}`, ts, col, 'spawn');
1739
+ } else if (ev.type === 'agent:complete') {
1740
+ const name = ev.agentType || ev.role || ev.from || 'agent';
1741
+ const result = (ev.result || '').slice(0, 300);
1742
+ const cost = ev.cost_usd ? ` · $${parseFloat(ev.cost_usd).toFixed(4)}` : '';
1743
+ const tools = ev.toolCalls?.length ? ` · ${ev.toolCalls.slice(0,4).join(', ')}` : '';
1744
+ el = mkAgent(name, `${esc(result) || 'done'}${esc(tools)}${esc(cost)}`, ts, dc(ev.domain), 'complete');
1745
+ } else if (ev.type === 'org:comms') {
1746
+ el = mkIntercom(ev.from || 'boss', ev.to || 'agent', esc(ev.msg || ev.message || ''), ts);
1648
1747
  } else if (ev.type === 'agent:message') {
1649
1748
  el = mkAgent(ev.agent||'agent', esc(ev.text||''), ts, dc(ev.domain), null);
1650
1749
  } else if (ev.type === 'intercom') {
@@ -1653,6 +1752,8 @@ function appendChatEvent(ev, animate) {
1653
1752
  el = mkSys(`🔁 Loop: ${esc(ev.command||'')} (${ev.repeat||'?'} runs)`, ts);
1654
1753
  } else if (ev.type === 'loop:complete') {
1655
1754
  el = mkSys(`🔁 Loop done: ${esc(ev.command||'')} — ${ev.ranReps||'?'} run(s)`, ts);
1755
+ } else if (ev.type === 'org:artifact' && ev.artifact) {
1756
+ el = mkArtifact(ev.artifact, ts);
1656
1757
  } else {
1657
1758
  el = mkSys(`<span style="opacity:0.4">${esc(ev.type)}${ev.domain?' ['+esc(ev.domain)+']':''}</span>`, ts);
1658
1759
  }
@@ -1681,6 +1782,49 @@ function mkIntercom(from, to, text, ts) {
1681
1782
  el.innerHTML = `<div class="cmsg-meta"><span class="ctag sender">${esc(from||'?')}</span><span class="cic-arrow">→</span><span class="ctag receiver">${esc(to||'?')}</span><span class="cevtype">intercom</span><span class="cts">${ts}</span></div><div class="cbubble">${text}</div>`;
1682
1783
  return el;
1683
1784
  }
1785
+ function mkArtifact(art, ts) {
1786
+ const el = document.createElement('div');
1787
+ el.className = 'cmsg csys';
1788
+ const isText = (art.mimeType || '').startsWith('text/') || (art.mimeType || '') === 'application/json';
1789
+ const labelRaw = art.label || (art.path || 'artifact').split('/').pop();
1790
+ const meta = [art.mimeType, art.size ? `${Math.round(art.size/1024*10)/10} KB` : null, art.path ? art.path.split('/').slice(-2).join('/') : null].filter(Boolean).join(' · ');
1791
+ const viewBtn = isText && art.path
1792
+ ? `<button onclick="viewArtifact(${JSON.stringify(art.path)},${JSON.stringify(labelRaw)})" style="background:#1a3a5a;color:#5d9fd9;border:1px solid #2980b944;border-radius:4px;padding:3px 9px;font-size:10px;font-weight:700;cursor:pointer;margin-left:auto">View</button>`
1793
+ : `<span style="font-size:10px;color:#555">Binary</span>`;
1794
+ el.innerHTML = `<div class="cbubble" style="padding:0"><div style="background:#1a1a2e;border:1px solid #3333aa44;border-radius:6px;padding:7px 10px;display:flex;align-items:center;gap:8px"><span style="font-size:16px">📄</span><div style="flex:1;min-width:0"><div style="font-size:12px;font-weight:700;color:#ccc;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">${esc(labelRaw)}</div><div style="font-size:10px;color:#888">${esc(meta)}</div></div>${viewBtn}</div><span style="color:var(--dim);font-size:9px;padding:4px 6px 2px">${ts}</span></div>`;
1795
+ return el;
1796
+ }
1797
+
1798
+ async function viewArtifact(filePath, label) {
1799
+ const orgName = selectedOrg;
1800
+ if (!orgName || !filePath) return;
1801
+ const url = `/api/org/${encodeURIComponent(orgName)}/artifact?path=${encodeURIComponent(filePath)}`;
1802
+ try {
1803
+ const data = await fetch(url).then(r => r.json());
1804
+ if (data.binary) { console.warn('[orgs] Binary file — cannot display'); return; }
1805
+ if (data.error === 'file not found') { console.warn('[orgs] File no longer exists'); return; }
1806
+ if (data.error) { console.warn('[orgs] Artifact error:', data.error); return; }
1807
+ showArtifactPanel(label, data.content, data.mimeType);
1808
+ } catch(_) { console.warn('[orgs] Failed to load artifact', _); }
1809
+ }
1810
+
1811
+ function showArtifactPanel(label, content, mimeType) {
1812
+ let panel = document.getElementById('artifact-panel');
1813
+ if (!panel) {
1814
+ panel = document.createElement('div');
1815
+ panel.id = 'artifact-panel';
1816
+ panel.style.cssText = 'position:fixed;top:0;right:0;width:480px;height:100vh;background:#0a0a14;border-left:1px solid #333;z-index:1000;display:flex;flex-direction:column;overflow:hidden';
1817
+ document.body.appendChild(panel);
1818
+ }
1819
+ panel.innerHTML = `
1820
+ <div style="padding:12px 14px;border-bottom:1px solid #1a1a2a;display:flex;align-items:center;gap:10px">
1821
+ <span style="font-size:13px;font-weight:700;color:#ccc;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${esc(label)}</span>
1822
+ <button onclick="document.getElementById('artifact-panel').remove()" style="background:none;border:none;color:#888;font-size:16px;cursor:pointer">✕</button>
1823
+ </div>
1824
+ <pre style="flex:1;overflow:auto;padding:14px;font-size:11px;line-height:1.6;color:#bbb;white-space:pre-wrap;word-break:break-word">${esc(content)}</pre>
1825
+ `;
1826
+ panel.style.display = 'flex';
1827
+ }
1684
1828
 
1685
1829
  function chatScrollFeed() {
1686
1830
  const feed = document.getElementById('chat-feed-wrap');
@@ -1782,7 +1926,7 @@ function connectSSE() {
1782
1926
  evtSource.onmessage = e => {
1783
1927
  try {
1784
1928
  const ev = JSON.parse(e.data);
1785
- if (ev && typeof ev.org === 'string' && ev.type && ev.type.startsWith('org:')) {
1929
+ if (ev && typeof ev.org === 'string' && ev.type && (ev.type.startsWith('org:') || ev.type.startsWith('agent:'))) {
1786
1930
  const name = ev.org;
1787
1931
  if (!orgEventLog[name]) orgEventLog[name] = [];
1788
1932
  orgEventLog[name].push({ ...ev, _ts: Date.now() });
@@ -1874,7 +2018,7 @@ function appendLiveFeedRow(ev, isNew) {
1874
2018
  if (!rows) return;
1875
2019
  const time = new Date().toLocaleTimeString('en', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' });
1876
2020
  const type = (ev.type || '').replace('org:', '');
1877
- const msg = ev.message || ev.msg || ev.agent || ev.role || ev.status || '';
2021
+ const msg = ev.message || ev.msg || ev.task?.slice(0,60) || (ev.result||'').slice(0,60) || ev.agentType || ev.agent || ev.role || ev.status || '';
1878
2022
  const row = document.createElement('div');
1879
2023
  row.className = 'clf-row' + (isNew ? ' new' : '');
1880
2024
  row.title = msg;
@@ -2013,7 +2157,7 @@ window.exportOrg = async function(name) {
2013
2157
  a.click();
2014
2158
  setTimeout(() => URL.revokeObjectURL(a.href), 5000);
2015
2159
  } catch(e) {
2016
- alert('EXPORT FAILED: ' + e.message);
2160
+ console.warn('[orgs] Export failed:', e.message);
2017
2161
  }
2018
2162
  };
2019
2163
 
@@ -2042,7 +2186,7 @@ async function handleImportFile(e) {
2042
2186
  try {
2043
2187
  const text = await file.text();
2044
2188
  let data;
2045
- try { data = JSON.parse(text); } catch(_) { alert('IMPORT FAILED: invalid JSON'); return; }
2189
+ try { data = JSON.parse(text); } catch(_) { console.warn('[orgs] Import failed: invalid JSON'); return; }
2046
2190
  const r = await fetch(`/api/orgs/${encodeURIComponent(importTargetOrg)}/import`, {
2047
2191
  method: 'POST',
2048
2192
  headers: { 'Content-Type': 'application/json' },
@@ -2052,10 +2196,10 @@ async function handleImportFile(e) {
2052
2196
  if (r.ok && result.ok) {
2053
2197
  loadOrgs();
2054
2198
  } else {
2055
- alert('IMPORT FAILED: ' + (result.error || r.statusText));
2199
+ console.warn('[orgs] Import failed:', result.error || r.statusText);
2056
2200
  }
2057
2201
  } catch(e) {
2058
- alert('IMPORT FAILED: ' + e.message);
2202
+ console.warn('[orgs] Import failed:', e.message);
2059
2203
  } finally {
2060
2204
  importTargetOrg = null;
2061
2205
  }