total-recall-brain 3.44.0 → 3.46.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 (502) hide show
  1. package/bin/total-recall.mjs +10 -6
  2. package/docs/ARCHITECTURE.md +10 -7
  3. package/docs/reference/cli-reference.md +13 -8
  4. package/frontend/dist/assets/index-BRYE1jmv.css +1 -0
  5. package/frontend/dist/assets/index-D1goIPjC.js +5598 -0
  6. package/frontend/dist/index.html +2 -2
  7. package/frontend/dist/sw.js +5 -4
  8. package/frontend/src/App.tsx +185 -238
  9. package/frontend/src/api/auth-inventory.ts +62 -0
  10. package/frontend/src/api/memory.ts +13 -8
  11. package/frontend/src/api/plugin-credentials.ts +23 -0
  12. package/frontend/src/api/plugins.ts +37 -53
  13. package/frontend/src/api/workspace-drawers.ts +97 -0
  14. package/frontend/src/components/BrainSelector.tsx +9 -3
  15. package/frontend/src/components/plugins/PluginPanel.tsx +83 -42
  16. package/frontend/src/components/plugins/PluginSettings.tsx +10 -20
  17. package/frontend/src/components/plugins/PluginWorkspace.tsx +367 -0
  18. package/frontend/src/components/plugins/ScopedPluginCommands.tsx +142 -0
  19. package/frontend/src/components/plugins/plugin-frame.ts +44 -33
  20. package/frontend/src/components/plugins/scoped-plugin-operations.ts +28 -0
  21. package/frontend/src/components/workspace/DrawerChat.tsx +110 -0
  22. package/frontend/src/components/workspace/DrawerLayout.tsx +196 -0
  23. package/frontend/src/components/workspace/DrawerMarkup.tsx +49 -0
  24. package/frontend/src/components/workspace/PluginChunkLibrary.tsx +92 -0
  25. package/frontend/src/components/workspace/PluginHome.tsx +76 -0
  26. package/frontend/src/components/workspace/WorkspaceDrawers.tsx +96 -0
  27. package/frontend/src/components/workspace/WorkspacePage.tsx +95 -0
  28. package/frontend/src/components/workspace/usePluginDesign.ts +38 -0
  29. package/frontend/src/index.css +409 -136
  30. package/frontend/src/pages/HelpPage.tsx +15 -46
  31. package/frontend/src/pages/MemoryPage.tsx +19 -36
  32. package/frontend/src/pages/SettingsPage.tsx +1 -1
  33. package/metadata.plugin.schema.json +53 -227
  34. package/package.json +1 -1
  35. package/scaffold/.agent/skills/plugin/SKILL.md +13 -11
  36. package/scaffold/.agent/skills/plugin/evals/README.md +14 -21
  37. package/scaffold/.agent/skills/plugin/evals/cases/01-fabricated-seed.mjs +15 -18
  38. package/scaffold/.agent/skills/plugin/evals/cases/02-reassuring-default.mjs +19 -24
  39. package/scaffold/.agent/skills/plugin/evals/cases/03-declared-template.mjs +12 -20
  40. package/scaffold/.agent/skills/plugin/evals/cases/04-home-collects-credential.mjs +35 -0
  41. package/scaffold/.agent/skills/plugin/evals/cases/05-host-leak-in-scaffold.mjs +8 -28
  42. package/scaffold/.agent/skills/plugin/evals/cases/06-correct-plugin.mjs +85 -47
  43. package/scaffold/.agent/skills/plugin/evals/run.mjs +17 -18
  44. package/scaffold/.agent/skills/plugin/prompts/05-credentials.md +4 -4
  45. package/scaffold/.agent/skills/plugin/prompts/07-scaffold.md +2 -2
  46. package/scaffold/.agent/skills/plugin/prompts/08-verify.md +4 -4
  47. package/scaffold/.agent/skills/plugin/references/anti-patterns.md +2 -2
  48. package/scaffold/.agent/skills/plugin/references/generative-home.md +38 -0
  49. package/scaffold/.agent/skills/plugin/references/scaffold.md +5 -5
  50. package/scaffold/.agent/skills/plugin/references/surfaces.md +13 -4
  51. package/scaffold/.agent/skills/plugin/scripts/record.mjs +75 -153
  52. package/scaffold/.agent/skills/plugin/subagents/plugin-reviewer.md +4 -4
  53. package/scaffold/.agent/skills/total-recall/plugins/auth/DESIGN.md +76 -0
  54. package/scaffold/.agent/skills/total-recall/plugins/auth/README.md +3 -1
  55. package/scaffold/.agent/skills/total-recall/plugins/auth/cli.mjs +20 -15
  56. package/scaffold/.agent/skills/total-recall/plugins/auth/package-lock.json +7 -7
  57. package/scaffold/.agent/skills/total-recall/plugins/auth/package.json +2 -1
  58. package/scaffold/.agent/skills/total-recall/plugins/auth/plugin.json +13 -51
  59. package/scaffold/.agent/skills/total-recall/plugins/auth/src/cli-secret.mjs +20 -1
  60. package/scaffold/.agent/skills/total-recall/plugins/auth/src/secrets-store.mjs +12 -1
  61. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/access-overview.md +17 -0
  62. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/agent-login.md +20 -0
  63. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/baseline-audit.md +22 -0
  64. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/credential-repository-binding.md +17 -0
  65. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/credential-store-maintenance.md +17 -0
  66. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/dashboard-password.md +18 -0
  67. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/dashboard-sessions.md +18 -0
  68. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/endpoint-probe.md +23 -0
  69. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/google-sign-in.md +21 -0
  70. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/mesh-machines.md +16 -0
  71. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/passkey-enrollment.md +21 -0
  72. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/registered-brains.md +16 -0
  73. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/scoped-access-keys.md +17 -0
  74. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/secret-inventory.md +25 -0
  75. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/signing-key-rotation.md +22 -0
  76. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/home.js +375 -0
  77. package/scaffold/.agent/skills/total-recall/plugins/automations/BRICK.md +7 -0
  78. package/scaffold/.agent/skills/total-recall/plugins/automations/DESIGN.md +53 -0
  79. package/scaffold/.agent/skills/total-recall/plugins/automations/LICENSE +21 -0
  80. package/scaffold/.agent/skills/total-recall/plugins/automations/README.md +66 -0
  81. package/scaffold/.agent/skills/total-recall/plugins/automations/adapters.mjs +247 -0
  82. package/scaffold/.agent/skills/total-recall/plugins/automations/capability/index.mjs +16 -0
  83. package/scaffold/.agent/skills/total-recall/plugins/automations/cli.mjs +130 -0
  84. package/{src/core/plugin-cron.mjs → scaffold/.agent/skills/total-recall/plugins/automations/cron.mjs} +1 -3
  85. package/scaffold/.agent/skills/total-recall/plugins/automations/inventory.mjs +88 -0
  86. package/scaffold/.agent/skills/total-recall/plugins/automations/package-lock.json +7661 -0
  87. package/scaffold/.agent/skills/total-recall/plugins/automations/package.json +36 -0
  88. package/scaffold/.agent/skills/total-recall/plugins/automations/plugin.json +151 -0
  89. package/scaffold/.agent/skills/total-recall/plugins/automations/scheduler.mjs +246 -0
  90. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/automations.js +2 -0
  91. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/control-ledger.md +42 -0
  92. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/local-inventory-triage.md +17 -0
  93. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/pending-control.md +39 -0
  94. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/run-evidence.md +41 -0
  95. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/schedule-vs-run-evidence.md +17 -0
  96. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/source-coverage.md +41 -0
  97. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/home.js +278 -0
  98. package/scaffold/.agent/skills/total-recall/plugins/code-quality/DESIGN.md +53 -0
  99. package/scaffold/.agent/skills/total-recall/plugins/code-quality/cli.mjs +23 -0
  100. package/scaffold/.agent/skills/total-recall/plugins/code-quality/commands/run-core.mjs +5 -3
  101. package/scaffold/.agent/skills/total-recall/plugins/code-quality/core/check.mjs +61 -7
  102. package/scaffold/.agent/skills/total-recall/plugins/code-quality/core/report-data.mjs +40 -14
  103. package/scaffold/.agent/skills/total-recall/plugins/code-quality/core/report.mjs +15 -40
  104. package/scaffold/.agent/skills/total-recall/plugins/code-quality/package-lock.json +7 -7
  105. package/scaffold/.agent/skills/total-recall/plugins/code-quality/package.json +2 -1
  106. package/scaffold/.agent/skills/total-recall/plugins/code-quality/plugin.json +40 -40
  107. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/config.md +15 -0
  108. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/detect.md +15 -0
  109. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/gate.md +15 -0
  110. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/init.md +15 -0
  111. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/report.md +17 -0
  112. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/run.md +17 -0
  113. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/snapshot.md +15 -0
  114. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/code-quality-report.mjs +55 -23
  115. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/home.mjs +214 -0
  116. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/DESIGN.md +146 -0
  117. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package-lock.json +7 -7
  118. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package.json +2 -1
  119. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/plugin.json +51 -34
  120. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/src/command.mjs +1 -1
  121. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/create.md +35 -0
  122. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/history.md +35 -0
  123. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/library.md +49 -0
  124. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/list.md +42 -0
  125. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/promote.md +40 -0
  126. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/read.md +25 -0
  127. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/remove.md +26 -0
  128. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/rollback.md +26 -0
  129. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/show.md +53 -0
  130. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/status.md +40 -0
  131. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/test-path.md +38 -0
  132. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/test.md +46 -0
  133. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/update.md +32 -0
  134. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/home.js +533 -0
  135. package/scaffold/.agent/skills/total-recall/plugins/embeddings/DESIGN.md +110 -0
  136. package/scaffold/.agent/skills/total-recall/plugins/embeddings/package-lock.json +7 -7
  137. package/scaffold/.agent/skills/total-recall/plugins/embeddings/package.json +2 -1
  138. package/scaffold/.agent/skills/total-recall/plugins/embeddings/plugin.json +13 -10
  139. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/benchmark.md +49 -0
  140. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/coverage.md +53 -0
  141. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/models.md +43 -0
  142. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/pull.md +41 -0
  143. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/status.md +59 -0
  144. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/home.js +353 -0
  145. package/scaffold/.agent/skills/total-recall/plugins/git/DESIGN.md +31 -0
  146. package/scaffold/.agent/skills/total-recall/plugins/git/README.md +136 -0
  147. package/scaffold/.agent/skills/total-recall/plugins/{git-sentinel → git}/cli.mjs +140 -24
  148. package/scaffold/.agent/skills/total-recall/plugins/{git-sentinel → git}/package-lock.json +9 -9
  149. package/scaffold/.agent/skills/total-recall/plugins/{git-sentinel → git}/package.json +4 -2
  150. package/scaffold/.agent/skills/total-recall/plugins/git/plugin.json +151 -0
  151. package/scaffold/.agent/skills/total-recall/plugins/git/src/lib/context.mjs +94 -0
  152. package/scaffold/.agent/skills/total-recall/plugins/git/src/lib/phase3-spec-support.mjs +50 -0
  153. package/scaffold/.agent/skills/total-recall/plugins/git/src/lib/runtime.mjs +40 -0
  154. package/scaffold/.agent/skills/total-recall/plugins/git/src/lib/spec-support.mjs +51 -0
  155. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/_support.mjs +195 -0
  156. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/auth.mjs +201 -0
  157. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/bisect.mjs +40 -0
  158. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/cli-meta.mjs +159 -0
  159. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/commit-memory.mjs +54 -0
  160. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/commit.mjs +46 -0
  161. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/fleet.mjs +174 -0
  162. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/force-push.mjs +58 -0
  163. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/group.mjs +119 -0
  164. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/handoff.mjs +59 -0
  165. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/message.mjs +22 -0
  166. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/resolve.mjs +60 -0
  167. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/rules.mjs +81 -0
  168. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/secret-firewall.mjs +92 -0
  169. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/undo.mjs +156 -0
  170. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/unmerged.mjs +182 -0
  171. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/why.mjs +16 -0
  172. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/change-comparison.md +27 -0
  173. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/commit-identity.md +22 -0
  174. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/create-worktree.md +25 -0
  175. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/registered-worktrees.md +22 -0
  176. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/remove-worktree.md +23 -0
  177. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/repository-ledger.md +25 -0
  178. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/unmerged-work.md +22 -0
  179. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/upstream-divergence.md +17 -0
  180. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/worktree-conflict-triage.md +17 -0
  181. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/worktree-terminal.md +22 -0
  182. package/scaffold/.agent/skills/total-recall/plugins/git/ui/home.js +273 -0
  183. package/scaffold/.agent/skills/total-recall/plugins/mesh/DESIGN.md +35 -0
  184. package/scaffold/.agent/skills/total-recall/plugins/mesh/README.md +4 -5
  185. package/scaffold/.agent/skills/total-recall/plugins/mesh/cli.mjs +9 -3
  186. package/scaffold/.agent/skills/total-recall/plugins/mesh/package-lock.json +7 -7
  187. package/scaffold/.agent/skills/total-recall/plugins/mesh/package.json +2 -1
  188. package/scaffold/.agent/skills/total-recall/plugins/mesh/plugin.json +37 -39
  189. package/scaffold/.agent/skills/total-recall/plugins/mesh/src/cli/mesh.mjs +5 -3
  190. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/active-device-dispatch.md +22 -0
  191. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/control-probe.md +25 -0
  192. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/control-server.md +22 -0
  193. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/credential-readiness.md +23 -0
  194. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/elected-leader.md +22 -0
  195. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/enrollment-key.md +22 -0
  196. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/file-receipt.md +25 -0
  197. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/fleet-execution.md +23 -0
  198. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/fleet-presence.md +23 -0
  199. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/interactive-ssh.md +22 -0
  200. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/local-enrollment.md +23 -0
  201. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/mesh-policy.md +23 -0
  202. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/network-atlas.md +25 -0
  203. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/node-roster.md +26 -0
  204. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/node-selection-proof.md +17 -0
  205. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/owner-observations.md +23 -0
  206. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/peer-path.md +23 -0
  207. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/pinned-leader.md +24 -0
  208. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/reachability-evidence-ladder.md +17 -0
  209. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/recorded-login.md +23 -0
  210. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/remote-execution.md +22 -0
  211. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/secret-grants.md +26 -0
  212. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/{card.js → home.js} +93 -22
  213. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/DESIGN.md +86 -0
  214. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/README.md +44 -9
  215. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/capability/BRICK.md +1 -1
  216. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/capability/index.mjs +18 -6
  217. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/cli.mjs +128 -24
  218. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package-lock.json +7 -7
  219. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package.json +3 -2
  220. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/plugin.json +188 -34
  221. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/skills/meta-harness/SKILL.md +17 -3
  222. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/adoption.mjs +2 -2
  223. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/alerts.mjs +3 -3
  224. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/cascade.mjs +92 -18
  225. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/chat.mjs +80 -0
  226. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/control.mjs +145 -0
  227. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/coordinator.mjs +42 -21
  228. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/dispatch-request.mjs +4 -2
  229. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/dispatch.mjs +33 -9
  230. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/documentation.mjs +55 -11
  231. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/executor.mjs +26 -4
  232. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/hermes.mjs +29 -1
  233. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/index.mjs +1 -1
  234. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/included-usage.mjs +1 -1
  235. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/jobs.mjs +84 -0
  236. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/learner.mjs +3 -12
  237. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/maintenance.mjs +17 -0
  238. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/mcp-server.mjs +228 -0
  239. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/process-manager.mjs +25 -2
  240. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/reasoning.mjs +1 -1
  241. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/remote-operation.mjs +5 -1
  242. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/review.mjs +34 -3
  243. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/reviews.mjs +25 -0
  244. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/router.mjs +1 -1
  245. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/session/claude.mjs +319 -0
  246. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/session/codex.mjs +387 -0
  247. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/session/result.mjs +67 -0
  248. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/session/resume.mjs +373 -0
  249. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/session/run.mjs +223 -0
  250. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/session-jobs.mjs +72 -0
  251. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/setup.mjs +6 -3
  252. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/termination.mjs +16 -12
  253. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/threads.mjs +32 -1
  254. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/usage-queue.mjs +1 -1
  255. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/verify-ssss.mjs +3 -3
  256. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/worker.mjs +285 -40
  257. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/worktree.mjs +76 -9
  258. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/adapter-docs-freshness.md +16 -0
  259. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/chat-handoff.md +26 -0
  260. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/fleet-maintenance.md +21 -0
  261. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/harness-inventory.md +21 -0
  262. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/included-access.md +18 -0
  263. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/included-usage-verification.md +15 -0
  264. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/independent-review.md +17 -0
  265. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/managed-execution.md +20 -0
  266. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/official-documentation.md +18 -0
  267. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/quota-recovery.md +21 -0
  268. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/review-routing-decision.md +16 -0
  269. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/route-work.md +18 -0
  270. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/routing-evidence.md +18 -0
  271. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/run-ledger.md +18 -0
  272. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/home.js +198 -0
  273. package/scaffold/.agent/skills/total-recall/plugins/openwiki/DESIGN.md +75 -0
  274. package/scaffold/.agent/skills/total-recall/plugins/openwiki/README.md +2 -0
  275. package/scaffold/.agent/skills/total-recall/plugins/openwiki/cli.mjs +64 -32
  276. package/scaffold/.agent/skills/total-recall/plugins/openwiki/package-lock.json +7 -7
  277. package/scaffold/.agent/skills/total-recall/plugins/openwiki/package.json +2 -1
  278. package/scaffold/.agent/skills/total-recall/plugins/openwiki/plugin.json +10 -44
  279. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/generate.mjs +5 -4
  280. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/graph.mjs +3 -4
  281. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/ingest.mjs +23 -18
  282. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/mesh-vaults.mjs +8 -3
  283. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/refresh-diagnostics.mjs +44 -0
  284. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/refresh.mjs +123 -113
  285. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/search.mjs +3 -5
  286. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/token.mjs +21 -47
  287. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/upstream-watcher.mjs +17 -6
  288. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/auto-refresh.md +18 -0
  289. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/bootstrap-pages.md +18 -0
  290. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/generate-wiki.md +21 -0
  291. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/generator-settings.md +18 -0
  292. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/host-probe.md +18 -0
  293. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/ingest-preview.md +18 -0
  294. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/link-hygiene.md +21 -0
  295. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/link-topology.md +19 -0
  296. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/passage-search.md +19 -0
  297. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/propagation-plan.md +18 -0
  298. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/provider-credentials.md +18 -0
  299. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/refresh-report.md +18 -0
  300. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/task-evidence.md +22 -0
  301. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/upstream-record.md +18 -0
  302. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/watch-upstream.md +18 -0
  303. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/wiki-atlas.md +19 -0
  304. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/panel.js +261 -513
  305. package/scaffold/.agent/skills/total-recall/plugins/security/DESIGN.md +84 -0
  306. package/scaffold/.agent/skills/total-recall/plugins/security/README.md +4 -2
  307. package/scaffold/.agent/skills/total-recall/plugins/security/cli.mjs +7 -19
  308. package/scaffold/.agent/skills/total-recall/plugins/security/package-lock.json +7 -7
  309. package/scaffold/.agent/skills/total-recall/plugins/security/package.json +2 -3
  310. package/scaffold/.agent/skills/total-recall/plugins/security/plugin.json +19 -52
  311. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/device-evidence.md +21 -0
  312. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/evidence-desk.md +18 -0
  313. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/guided-device-review.md +17 -0
  314. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/host-and-network.md +21 -0
  315. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/https-headers.md +17 -0
  316. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/mesh-coverage.md +18 -0
  317. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/private-security-tools.md +16 -0
  318. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/single-origin-header-check.md +17 -0
  319. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/source-review.md +21 -0
  320. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/ssh-permission-plan.md +17 -0
  321. package/scaffold/.agent/skills/total-recall/plugins/security/ui/home.js +283 -0
  322. package/scaffold/.agent/skills/total-recall/plugins/ssss/DESIGN.md +93 -0
  323. package/scaffold/.agent/skills/total-recall/plugins/ssss/package-lock.json +2 -2
  324. package/scaffold/.agent/skills/total-recall/plugins/ssss/package.json +2 -1
  325. package/scaffold/.agent/skills/total-recall/plugins/ssss/plugin.json +5 -3
  326. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/conformance.md +26 -0
  327. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/registry.md +37 -0
  328. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/repair.md +42 -0
  329. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/scaffold.md +33 -0
  330. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/status.md +43 -0
  331. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/validate.md +34 -0
  332. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/validation-diagnostics.md +17 -0
  333. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/workspace-registry-preflight.md +17 -0
  334. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/home.js +348 -0
  335. package/scaffold/.agent/skills/total-recall/references/operations.md +3 -1
  336. package/src/cli/agent.mjs +1 -1
  337. package/src/cli/api.mjs +3 -3
  338. package/src/cli/brief.mjs +3 -0
  339. package/src/cli/command.mjs +41 -2
  340. package/src/cli/config.mjs +16 -0
  341. package/src/cli/connect.mjs +2 -7
  342. package/src/cli/dream.mjs +93 -69
  343. package/src/cli/harness.mjs +4 -4
  344. package/src/cli/help.mjs +1 -1
  345. package/src/cli/init.mjs +0 -25
  346. package/src/cli/lessons.mjs +51 -0
  347. package/src/cli/memory-plugin.mjs +1 -1
  348. package/src/cli/plugin/chunks.mjs +145 -0
  349. package/src/cli/plugin/copies.mjs +64 -14
  350. package/src/cli/plugin/create.mjs +30 -59
  351. package/src/cli/plugin/index.mjs +31 -16
  352. package/src/cli/plugin/install.mjs +10 -15
  353. package/src/cli/plugin/remove.mjs +1 -1
  354. package/src/cli/plugin/search.mjs +2 -2
  355. package/src/cli/preflight.mjs +19 -6
  356. package/src/cli/proposals.mjs +1 -1
  357. package/src/cli/recall.mjs +66 -23
  358. package/src/cli/remember.mjs +3 -14
  359. package/src/cli/server.mjs +18 -0
  360. package/src/cli/setup.mjs +2 -9
  361. package/src/cli/start.mjs +1 -0
  362. package/src/cli/startup.mjs +19 -0
  363. package/src/cli/task.mjs +9 -2
  364. package/src/cli/update.mjs +6 -2
  365. package/src/core/access-ledger.mjs +78 -0
  366. package/src/core/agent-manager.mjs +2 -2
  367. package/src/core/app-deploy/design-tokens.mjs +14 -9
  368. package/src/core/app-deploy/ui-elements.mjs +1 -1
  369. package/src/core/brain-locate.mjs +15 -0
  370. package/src/core/brain-registry.mjs +5 -0
  371. package/src/core/brain-updates.mjs +35 -11
  372. package/src/core/claude-hooks.mjs +3 -1
  373. package/src/core/cleanup-task.mjs +15 -0
  374. package/src/core/cli-commands.mjs +2 -0
  375. package/src/core/cli-maintenance.mjs +4 -1
  376. package/src/core/cli-semantic-index.mjs +23 -3
  377. package/src/core/context-compiler.mjs +20 -0
  378. package/src/core/daemon-control.mjs +5 -1
  379. package/src/core/daemon-loop.mjs +39 -62
  380. package/src/core/dashboard-bundle.mjs +261 -0
  381. package/src/core/default-plugins.mjs +1 -1
  382. package/src/core/dream.mjs +33 -105
  383. package/src/core/ensure-dependencies.mjs +152 -0
  384. package/src/core/fast-recall.mjs +2 -2
  385. package/src/core/field-evaluation.mjs +23 -0
  386. package/src/core/gate-mode.mjs +1 -1
  387. package/src/core/harness-hooks.mjs +14 -2
  388. package/src/core/lesson-hooks.mjs +74 -0
  389. package/src/core/lesson-memory.mjs +24 -0
  390. package/src/core/lesson-sessions.mjs +52 -0
  391. package/src/core/lessons.mjs +96 -0
  392. package/src/core/memory-brain.mjs +30 -8
  393. package/src/core/meta-harness.mjs +2 -2
  394. package/src/core/optimizer.mjs +66 -165
  395. package/src/core/plugin-activation.mjs +63 -20
  396. package/src/core/plugin-contracts/{card.mjs → manifest.mjs} +26 -57
  397. package/src/core/plugin-contracts/startup-check.mjs +49 -0
  398. package/src/core/plugin-contracts/ui.mjs +9 -3
  399. package/src/core/plugin-distribution.mjs +6 -6
  400. package/src/core/plugin-lifecycle.mjs +58 -0
  401. package/src/core/plugin-loader.mjs +21 -8
  402. package/src/core/plugin-runner.mjs +21 -10
  403. package/src/core/plugin-runtime.mjs +40 -1
  404. package/src/core/plugin-startup-checks.mjs +44 -0
  405. package/src/core/plugin-state.mjs +19 -5
  406. package/src/core/plugin-store.mjs +64 -33
  407. package/src/core/post-mortem.mjs +52 -36
  408. package/src/core/preflight-gate.mjs +23 -2
  409. package/src/core/project-id.mjs +15 -5
  410. package/src/core/proposal-applier.mjs +31 -2
  411. package/src/core/repo-sync.mjs +4 -6
  412. package/src/core/required-plugins.mjs +57 -10
  413. package/src/core/rule-length.mjs +23 -0
  414. package/src/core/runtime.mjs +1 -1
  415. package/src/core/scheduler.mjs +35 -43
  416. package/src/core/schema.mjs +3 -2
  417. package/src/core/search.mjs +4 -3
  418. package/src/core/server-service.mjs +148 -0
  419. package/src/core/session-watcher.mjs +19 -1
  420. package/src/core/skill-gap.mjs +16 -0
  421. package/src/core/ssss-kernel-bridge.mjs +32 -4
  422. package/src/core/ssss-operation-service.mjs +1 -0
  423. package/src/core/startup-health.mjs +34 -4
  424. package/src/core/surface.mjs +65 -54
  425. package/src/core/task-executors.mjs +54 -106
  426. package/src/core/testing/plugin-fixture.mjs +22 -21
  427. package/src/core/throttled-fetch.mjs +25 -18
  428. package/src/core/ui-chunk-choice.mjs +77 -0
  429. package/src/core/ui-chunk.registry.json +23 -0
  430. package/src/core/ui-chunks.mjs +434 -0
  431. package/src/core/validated-write.mjs +1 -0
  432. package/src/core/vault-cache.mjs +58 -59
  433. package/src/core/vector-field.mjs +134 -192
  434. package/src/core/workspace-compositions.mjs +151 -0
  435. package/src/core/workspace-drawers.mjs +79 -0
  436. package/src/server/api.mjs +4 -27
  437. package/src/server/index.mjs +28 -21
  438. package/src/server/invoke-core-child.mjs +24 -0
  439. package/src/server/invoke-core-operations.mjs +102 -0
  440. package/src/server/memory-events.mjs +31 -0
  441. package/src/server/plugin-brain-targets.mjs +89 -0
  442. package/src/server/rest.mjs +2 -0
  443. package/src/server/route-inventory.mjs +3 -2
  444. package/src/server/route-manifest.json +47 -55
  445. package/src/server/routes/_shared.mjs +7 -14
  446. package/src/server/routes/brains.mjs +29 -62
  447. package/src/server/routes/context.mjs +0 -41
  448. package/src/server/routes/dashboard.mjs +26 -0
  449. package/src/server/routes/invoke.mjs +26 -1
  450. package/src/server/routes/plugins.mjs +154 -45
  451. package/src/server/routes/ssss.mjs +0 -169
  452. package/src/server/routes/system.mjs +0 -15
  453. package/src/server/routes/tasks.mjs +0 -26
  454. package/src/server/routes/ui-chunks.mjs +192 -0
  455. package/src/server/routes/vault.mjs +2 -23
  456. package/frontend/dist/assets/index-DD4qONvH.js +0 -5607
  457. package/frontend/dist/assets/index-DtwsDyFM.css +0 -1
  458. package/frontend/src/components/plugins/card/CardEngine.tsx +0 -108
  459. package/frontend/src/components/plugins/card/CardScenes.tsx +0 -103
  460. package/frontend/src/components/plugins/card/ExecutionPicker.tsx +0 -64
  461. package/frontend/src/components/plugins/card/args.ts +0 -28
  462. package/frontend/src/components/plugins/card/card.css +0 -32
  463. package/frontend/src/components/plugins/card/cli-line.ts +0 -13
  464. package/frontend/src/components/plugins/card/contract.ts +0 -91
  465. package/frontend/src/components/plugins/card/format.ts +0 -49
  466. package/frontend/src/components/plugins/card/runner-context.ts +0 -11
  467. package/frontend/src/components/plugins/card/runner.tsx +0 -43
  468. package/frontend/src/components/plugins/card/theme.ts +0 -35
  469. package/frontend/src/components/plugins/card/use-source.ts +0 -22
  470. package/frontend/src/components/plugins/card/widgets.tsx +0 -94
  471. package/frontend/src/components/plugins/workspace/WorkspaceHost.tsx +0 -23
  472. package/frontend/src/pages/PluginsPage.tsx +0 -1719
  473. package/scaffold/.agent/skills/plugin/evals/cases/04-card-collects-credential.mjs +0 -47
  474. package/scaffold/.agent/skills/plugin/prompts/06-card.md +0 -46
  475. package/scaffold/.agent/skills/plugin/references/card.md +0 -90
  476. package/scaffold/.agent/skills/plugin/subagents/card-designer.md +0 -60
  477. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/DESIGN.md +0 -67
  478. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/card.js +0 -1179
  479. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/DESIGN.md +0 -32
  480. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/card.js +0 -588
  481. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/card.js +0 -575
  482. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/DESIGN.md +0 -32
  483. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/card.js +0 -482
  484. package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/README.md +0 -53
  485. package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/plugin.json +0 -129
  486. package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/ui/DESIGN.md +0 -100
  487. package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/ui/card.js +0 -637
  488. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/DESIGN.md +0 -217
  489. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/DESIGN.md +0 -32
  490. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/card.js +0 -1276
  491. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/DESIGN.md +0 -45
  492. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/card.js +0 -1401
  493. package/scaffold/.agent/skills/total-recall/plugins/security/scripts/build-ui.mjs +0 -4
  494. package/scaffold/.agent/skills/total-recall/plugins/security/ui/DESIGN.md +0 -41
  495. package/scaffold/.agent/skills/total-recall/plugins/security/ui/card.js +0 -396
  496. package/scaffold/.agent/skills/total-recall/plugins/security/ui/panel.js +0 -98
  497. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/DESIGN.md +0 -15
  498. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/card.js +0 -182
  499. package/src/core/append-log.mjs +0 -131
  500. package/src/core/plugin-tasks.mjs +0 -173
  501. package/templates/onboarding-interview.md +0 -82
  502. /package/scaffold/.agent/skills/total-recall/plugins/{git-sentinel → git}/LICENSE +0 -0
@@ -1,14 +1,12 @@
1
1
  /**
2
2
  * <code-quality-report> — renders a code-quality report view.
3
3
  *
4
- * The host sets `view` to the JSON printed by `code-quality report json`
4
+ * Reads the JSON printed by `code-quality report --json` through the host
5
5
  * (core/report-data.mjs). Nothing here is computed locally: every number is a
6
6
  * field of that view, and a missing/unreadable/stale/partial view never renders
7
7
  * as passing. With no view set the element says so instead of showing data.
8
8
  *
9
- * Events (host runs the named plugin command, then sets a fresh `view`):
10
- * run-check detail { command: 'code-quality-check', args: ['--tier', tier] }
11
- * reload detail { command: 'code-quality-report', args: ['json'] }
9
+ * Explicit gate actions run the owner checker once and reload its report.
12
10
  */
13
11
  const STATUS_LABEL = {
14
12
  clean: 'Clean',
@@ -25,7 +23,7 @@ const STATUS_LABEL = {
25
23
 
26
24
  const STYLE = `
27
25
  :host { display: block; font: var(--font-body, inherit); color: var(--color-text, inherit); }
28
- .card { border: 1px solid var(--color-border, currentColor); border-radius: var(--radius-md, 6px); padding: var(--space-4, 16px); background: var(--color-surface, transparent); }
26
+ .report { border: 1px solid var(--color-border, currentColor); border-radius: var(--radius-md, 6px); padding: var(--space-4, 16px); background: var(--color-surface, transparent); }
29
27
  .status { font-weight: 600; font-size: 1.1em; }
30
28
  .status[data-status="clean"] { color: var(--color-success, inherit); }
31
29
  .status[data-status="partial"], .status[data-status="stale"], .status[data-status="unknown-freshness"], .status[data-status="zero-scope"] { color: var(--color-warning, inherit); }
@@ -35,7 +33,7 @@ dt { opacity: .7; } dd { margin: 0; overflow-wrap: anywhere; }
35
33
  table { width: 100%; border-collapse: collapse; margin: 8px 0; }
36
34
  th, td { text-align: left; padding: 4px 8px; border-bottom: 1px solid var(--color-border, currentColor); }
37
35
  ul { margin: 8px 0; padding-left: 20px; }
38
- button { font: inherit; margin-right: 8px; cursor: pointer; }
36
+ button { font: inherit; min-height: 44px; margin-right: 8px; cursor: pointer; }
39
37
  `;
40
38
 
41
39
  function el(tag, props = {}, ...children) {
@@ -62,10 +60,13 @@ function fmtAge(ms) {
62
60
  export class CodeQualityReport extends HTMLElement {
63
61
  #view = null;
64
62
  #root = null;
63
+ #busy = false;
64
+ #notice = '';
65
65
 
66
66
  connectedCallback() {
67
67
  this.#root ||= this.attachShadow({ mode: 'open' });
68
68
  this.#render();
69
+ if (this.host) void this.#refresh();
69
70
  }
70
71
 
71
72
  get view() { return this.#view; }
@@ -74,19 +75,49 @@ export class CodeQualityReport extends HTMLElement {
74
75
  if (this.#root) this.#render();
75
76
  }
76
77
 
77
- #emit(name, detail) {
78
- this.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));
78
+ async #read() {
79
+ let report;
80
+ try { report = await this.host.run('report', ['--json']); }
81
+ catch (error) { report = JSON.parse(error.message); }
82
+ if (typeof report?.status !== 'string') throw new Error('The owner returned no report.');
83
+ this.view = report;
84
+ }
85
+
86
+ async #refresh(tier) {
87
+ if (!this.host || this.#busy) return;
88
+ this.#busy = true;
89
+ this.#notice = tier ? `Running the ${tier} gates…` : 'Reading the report…';
90
+ this.#render();
91
+ const previous = this.#view?.finishedAt;
92
+ let failure;
93
+ try {
94
+ if (tier) {
95
+ try { await this.host.run('run', ['--tier', tier, '--json']); }
96
+ catch (error) {
97
+ try { failure = JSON.parse(error.message).error || 'The gate run exited nonzero.'; }
98
+ catch { failure = 'The gate run could not complete.'; }
99
+ }
100
+ }
101
+ await this.#read();
102
+ this.#notice = tier && (!this.#view?.finishedAt || this.#view.finishedAt === previous)
103
+ ? failure || 'The run did not produce a fresh report.' : '';
104
+ } catch {
105
+ this.#notice = failure || 'Could not read the latest report.';
106
+ } finally {
107
+ this.#busy = false;
108
+ this.#render();
109
+ }
79
110
  }
80
111
 
81
112
  #render() {
82
113
  const v = this.#view;
83
- const card = el('div', { className: 'card' });
114
+ const report = el('div', { className: 'report' });
84
115
  if (!v || typeof v.status !== 'string') {
85
- card.append(el('div', { className: 'status', text: 'No report data', 'data-status': 'missing' }),
86
- el('p', { text: 'The host has not provided a report view. Run the code-quality-report json command.' }));
116
+ report.append(el('div', { className: 'status', text: 'No report data', 'data-status': 'missing' }),
117
+ el('p', { text: 'Reload the selected repository’s report or run its configured gates.' }));
87
118
  } else {
88
- card.append(el('div', { className: 'status', text: STATUS_LABEL[v.status] || `Unknown status: ${v.status}`, 'data-status': v.status }));
89
- if (v.reasons?.length) card.append(el('ul', {}, ...v.reasons.map((r) => el('li', { text: r }))));
119
+ report.append(el('div', { className: 'status', text: STATUS_LABEL[v.status] || `Unknown status: ${v.status}`, 'data-status': v.status }));
120
+ if (v.reasons?.length) report.append(el('ul', {}, ...v.reasons.map((r) => el('li', { text: r }))));
90
121
  if (v.startedAt) {
91
122
  const dl = el('dl');
92
123
  const row = (k, val) => { dl.append(el('dt', { text: k }), el('dd', { text: String(val ?? 'unknown') })); };
@@ -100,7 +131,7 @@ export class CodeQualityReport extends HTMLElement {
100
131
  row('Finished', `${v.finishedAt ?? 'unknown'} (${fmtAge(v.ageMs)})`);
101
132
  row('Duration', fmtMs(v.durationMs));
102
133
  row('Findings', `${v.totalFindings} total, ${v.blockingFindings} blocking`);
103
- card.append(dl);
134
+ report.append(dl);
104
135
  }
105
136
  if (v.gates?.length) {
106
137
  const head = el('tr', {}, ...['Gate', 'Result', 'Files scanned', 'Findings', 'Time'].map((h) => el('th', { text: h })));
@@ -109,20 +140,21 @@ export class CodeQualityReport extends HTMLElement {
109
140
  return el('tr', {}, el('td', { text: g.id }), el('td', { text: result }),
110
141
  el('td', { text: g.scanned ?? '—' }), el('td', { text: g.skipped ? '—' : g.findings }), el('td', { text: g.skipped ? '—' : fmtMs(g.durationMs) }));
111
142
  });
112
- card.append(el('table', {}, el('thead', {}, head), el('tbody', {}, ...body)));
143
+ report.append(el('table', {}, el('thead', {}, head), el('tbody', {}, ...body)));
113
144
  }
114
145
  if (v.findings?.length) {
115
- card.append(el('ul', {}, ...v.findings.slice(0, 50).map((f) => el('li', { text: `${f.file}:${f.line} ${f.code} ${f.message}` }))));
116
- if (v.findings.length > 50 || v.findingsTruncated) card.append(el('p', { text: 'More findings are in the report file.' }));
146
+ report.append(el('ul', {}, ...v.findings.slice(0, 50).map((f) => el('li', { text: `${f.file}:${f.line} ${f.code} ${f.message}` }))));
147
+ if (v.findings.length > 50 || v.findingsTruncated) report.append(el('p', { text: 'More findings are in the report file.' }));
117
148
  }
118
- if (v.reportFile) card.append(el('p', { text: `Report file: ${v.reportFile}` }));
149
+ if (v.reportFile) report.append(el('p', { text: `Report file: ${v.reportFile}` }));
119
150
  }
120
- card.append(
121
- el('button', { type: 'button', text: 'Run fast check', onclick: () => this.#emit('run-check', { command: 'code-quality-check', args: ['--tier', 'fast'] }) }),
122
- el('button', { type: 'button', text: 'Run full check', onclick: () => this.#emit('run-check', { command: 'code-quality-check', args: ['--tier', 'full'] }) }),
123
- el('button', { type: 'button', text: 'Reload report', onclick: () => this.#emit('reload', { command: 'code-quality-report', args: ['json'] }) })
151
+ report.append(
152
+ el('button', { type: 'button', text: 'Run fast check', disabled: this.#busy, onclick: () => void this.#refresh('fast') }),
153
+ el('button', { type: 'button', text: 'Run full check', disabled: this.#busy, onclick: () => void this.#refresh('full') }),
154
+ el('button', { type: 'button', text: 'Reload report', disabled: this.#busy, onclick: () => void this.#refresh() }),
155
+ el('p', { role: 'status', text: this.#notice }),
124
156
  );
125
- this.#root.replaceChildren(el('style', { textContent: STYLE }), card);
157
+ this.#root.replaceChildren(el('style', { textContent: STYLE }), report);
126
158
  }
127
159
  }
128
160
 
@@ -0,0 +1,214 @@
1
+ /**
2
+ * <code-quality-home> — the plugin's Home: where this repository's gates stand.
3
+ *
4
+ * Home reads the JSON printed by `code-quality report --json`
5
+ * (core/report-data.mjs), the same view the plugin's status command reads.
6
+ * Nothing is computed here beyond formatting: every value is a field of that
7
+ * view, and only status "clean" is ever shown in the success colour. With no
8
+ * view, Home says there is no report instead of showing data.
9
+ *
10
+ * Write subcommands (snapshot, gate, config, detect, init) are listed with
11
+ * their exact command and never fired from here.
12
+ */
13
+ const STATUS_LABEL = {
14
+ clean: 'Clean',
15
+ partial: 'Partial coverage',
16
+ 'unknown-freshness': 'Freshness unknown',
17
+ stale: 'Stale',
18
+ 'zero-scope': 'Zero scope',
19
+ failed: 'Failed',
20
+ 'unparsed-failure': 'Failed (unparsed)',
21
+ infrastructure: 'Infrastructure failure',
22
+ unreadable: 'Report unreadable',
23
+ missing: 'No report',
24
+ };
25
+
26
+ const TONE = {
27
+ clean: 'ok',
28
+ partial: 'warn', stale: 'warn', 'unknown-freshness': 'warn', 'zero-scope': 'warn',
29
+ failed: 'bad', 'unparsed-failure': 'bad', infrastructure: 'bad', unreadable: 'bad', missing: 'bad',
30
+ };
31
+
32
+ // The declared subcommands, as plugin.json names them.
33
+ const OPERATIONS = [
34
+ { name: 'report', effect: 'read', command: 'total-recall code-quality report --json', what: 'Read the latest gate report. Never starts a check.' },
35
+ { name: 'run', effect: 'write', command: 'total-recall code-quality run --tier fast', what: 'Run the configured gates and persist a new report.' },
36
+ { name: 'snapshot', effect: 'write', command: 'total-recall code-quality snapshot --node <name>', what: 'Copy the exact source under test to the test node.' },
37
+ { name: 'gate', effect: 'write', command: 'total-recall code-quality gate list|add|remove', what: "Edit this repository's gate list." },
38
+ { name: 'config', effect: 'write', command: 'total-recall code-quality config get|set|validate|check', what: 'Read or change the repo-layer config.' },
39
+ { name: 'detect', effect: 'write', command: 'total-recall code-quality detect [--apply]', what: 'Propose gates from the repository.' },
40
+ { name: 'init', effect: 'write', command: 'total-recall code-quality init', what: 'Create the repo-layer config.' },
41
+ ];
42
+
43
+ const STYLE = `
44
+ :host { display: block; font: var(--font-body, inherit); color: var(--color-text, #f8fafc); }
45
+ .home { display: grid; gap: 14px; padding: 16px; border: 1px solid var(--color-border, #334155); border-radius: 8px; background: var(--color-background, #0f172a); }
46
+ .mono { font-family: var(--font-mono, monospace); }
47
+ .verdict { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px; }
48
+ .verdict h2 { margin: 0; font-size: 1.25em; }
49
+ .tone-ok { color: var(--color-success, #10b981); }
50
+ .tone-warn { color: var(--color-warning, #f59e0b); }
51
+ .tone-bad { color: var(--color-danger, #ef4444); }
52
+ .muted { color: var(--color-muted, #94a3b8); }
53
+ .reasons { margin: 0; padding-left: 18px; }
54
+ .panel { border: 1px solid var(--color-border, #334155); border-radius: 8px; background: var(--color-surface, #1e293b); padding: 12px; }
55
+ .panel h3 { margin: 0 0 8px; font-size: .8em; letter-spacing: .06em; text-transform: uppercase; color: var(--color-muted, #94a3b8); }
56
+ dl { display: grid; grid-template-columns: max-content 1fr; gap: 4px 14px; margin: 0; }
57
+ dt { color: var(--color-muted, #94a3b8); } dd { margin: 0; overflow-wrap: anywhere; }
58
+ .gates { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
59
+ .gate { border: 1px solid var(--color-border, #334155); border-radius: 6px; padding: 8px; display: grid; gap: 2px; }
60
+ .findings { margin: 0; padding-left: 18px; }
61
+ .ops { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }
62
+ .ops li { display: grid; gap: 2px; }
63
+ .effect { font-size: .75em; text-transform: uppercase; }
64
+ .actions { display: flex; flex-wrap: wrap; gap: 8px; }
65
+ button { font: inherit; min-height: 44px; padding: 8px 14px; border-radius: 6px; cursor: pointer; color: var(--color-text, #f8fafc); background: transparent; border: 1px solid var(--color-border, #334155); }
66
+ button.primary { color: var(--color-on-primary, #0f172a); background: var(--color-primary, #eab308); border-color: var(--color-primary, #eab308); }
67
+ button.primary:hover { background: var(--color-primary-strong, #facc15); }
68
+ @media (prefers-reduced-motion: reduce) { * { transition: none !important; animation: none !important; } }
69
+ `;
70
+
71
+ function el(tag, props = {}, ...children) {
72
+ const node = document.createElement(tag);
73
+ for (const [k, v] of Object.entries(props)) {
74
+ if (k === 'text') node.textContent = v;
75
+ else if (k.startsWith('data-')) node.setAttribute(k, v);
76
+ else node[k] = v;
77
+ }
78
+ for (const c of children) if (c) node.append(c);
79
+ return node;
80
+ }
81
+
82
+ function fmtMs(ms) {
83
+ return typeof ms === 'number' ? `${(ms / 1000).toFixed(1)}s` : 'unknown';
84
+ }
85
+
86
+ function fmtAge(ms) {
87
+ if (typeof ms !== 'number') return 'unknown';
88
+ const min = Math.round(ms / 60000);
89
+ return min < 1 ? 'under a minute ago' : min < 120 ? `${min} min ago` : `${Math.round(min / 60)} h ago`;
90
+ }
91
+
92
+ function gateResult(g) {
93
+ if (g.skipped) return { text: `skipped (${g.tier})`, tone: 'warn' };
94
+ if (g.spawnError) return { text: 'spawn failed', tone: 'bad' };
95
+ if (g.timedOut) return { text: 'timed out', tone: 'bad' };
96
+ if (g.ok === true) return { text: 'passed', tone: 'ok' };
97
+ return { text: `failed (exit ${g.exitCode ?? 'unknown'})`, tone: 'bad' };
98
+ }
99
+
100
+ export class CodeQualityHome extends HTMLElement {
101
+ #view = null;
102
+ #root = null;
103
+ #readError = '';
104
+ #reading = false;
105
+
106
+ connectedCallback() {
107
+ this.#root ||= this.attachShadow({ mode: 'open' });
108
+ this.#render();
109
+ if (this.host) void this.#reload();
110
+ }
111
+
112
+ get view() { return this.#view; }
113
+ set view(value) {
114
+ this.#view = value && typeof value === 'object' ? value : null;
115
+ if (this.#root) this.#render();
116
+ }
117
+
118
+ async #reload() {
119
+ if (!this.host || this.#reading) return;
120
+ this.#reading = true;
121
+ this.#readError = '';
122
+ this.#render();
123
+ try {
124
+ this.view = await this.host.run('report', ['--json']);
125
+ } catch (error) {
126
+ try {
127
+ // A non-clean gate report exits nonzero and still returns its structured view.
128
+ const report = JSON.parse(error.message);
129
+ if (typeof report.status !== 'string') throw error;
130
+ this.view = report;
131
+ } catch {
132
+ this.#readError = 'The latest gate report could not be read.';
133
+ }
134
+ } finally {
135
+ this.#reading = false;
136
+ this.#render();
137
+ }
138
+ }
139
+
140
+ #verdict(v) {
141
+ const status = v && typeof v.status === 'string' ? v.status : null;
142
+ const tone = status ? TONE[status] || 'bad' : 'bad';
143
+ const label = status ? STATUS_LABEL[status] || `Unknown status: ${status}` : 'No report data';
144
+ const box = el('section', { className: 'verdict', 'data-design-component': 'verdict' },
145
+ el('h2', { className: `tone-${tone}`, text: label }),
146
+ el('span', { className: 'muted mono', text: status ? `tier ${v.tier ?? 'unknown'}` : '' }));
147
+ const reasons = status
148
+ ? (v.reasons || [])
149
+ : ['Reload to read the latest repository report.'];
150
+ return [box, reasons.length ? el('ul', { className: 'reasons' }, ...reasons.map((r) => el('li', { text: r }))) : null];
151
+ }
152
+
153
+ #freshness(v) {
154
+ const dl = el('dl');
155
+ const row = (k, val, mono) => dl.append(el('dt', { text: k }), el('dd', { className: mono ? 'mono' : '', text: String(val ?? 'unknown') }));
156
+ row('Revision at run', v.gitHead ? v.gitHead.slice(0, 12) : 'unknown', true);
157
+ row('Revision now', v.currentHead ? v.currentHead.slice(0, 12) : 'unknown', true);
158
+ row('Finished', `${v.finishedAt ?? 'unknown'} (${fmtAge(v.ageMs)})`);
159
+ row('Duration', fmtMs(v.durationMs));
160
+ row('Changed since run', Array.isArray(v.changedSinceRun) ? (v.changedSinceRun.length ? v.changedSinceRun.join(', ') : 'nothing') : 'unknown');
161
+ return el('section', { className: 'panel', 'data-design-component': 'freshness' }, el('h3', { text: 'Freshness' }), dl);
162
+ }
163
+
164
+ #coverage(v) {
165
+ const dl = el('dl');
166
+ const row = (k, val) => dl.append(el('dt', { text: k }), el('dd', { text: String(val ?? 'unknown') }));
167
+ row('Gates run', v.ranChecks?.length ? v.ranChecks.join(', ') : 'none');
168
+ row('Gates skipped', v.skippedChecks?.length ? v.skippedChecks.map((s) => `${s.id} (${s.tier})`).join(', ') : 'none');
169
+ row('Source files', v.sourceFileCount);
170
+ const gates = (v.gates || []).map((g) => {
171
+ const r = gateResult(g);
172
+ return el('div', { className: 'gate', 'data-design-component': 'gate' },
173
+ el('span', { className: 'mono', text: g.id }),
174
+ el('span', { className: `tone-${r.tone}`, text: r.text }),
175
+ el('span', { className: 'muted', text: g.skipped ? '' : `${g.findings ?? 0} findings · ${fmtMs(g.durationMs)}` }));
176
+ });
177
+ return el('section', { className: 'panel', 'data-design-component': 'coverage' },
178
+ el('h3', { text: 'Coverage' }), dl, gates.length ? el('div', { className: 'gates' }, ...gates) : el('p', { className: 'muted', text: 'No gate rows in this report.' }));
179
+ }
180
+
181
+ #findings(v) {
182
+ const list = (v.findings || []).slice(0, 10).map((f) => el('li', { className: 'mono', text: `${f.file ?? '(unknown file)'}:${f.line ?? '?'} ${f.code ?? ''} ${f.message ?? ''}` }));
183
+ return el('section', { className: 'panel', 'data-design-component': 'findings' },
184
+ el('h3', { text: 'Findings' }),
185
+ el('p', { className: v.blockingFindings ? 'tone-bad' : 'muted', text: `${v.totalFindings ?? 'unknown'} total, ${v.blockingFindings ?? 'unknown'} blocking` }),
186
+ list.length ? el('ul', { className: 'findings' }, ...list) : null,
187
+ (v.findings?.length > 10 || v.findingsTruncated) ? el('p', { className: 'muted', text: `More in ${v.reportFile ?? 'the report file'}.` }) : null);
188
+ }
189
+
190
+ #operations() {
191
+ const items = OPERATIONS.map((op) => el('li', {},
192
+ el('span', {}, el('span', { className: 'mono', text: op.name }), el('span', { className: `effect ${op.effect === 'read' ? 'muted' : 'tone-warn'}`, text: ` ${op.effect}` })),
193
+ el('span', { className: 'muted', text: op.what }),
194
+ el('code', { className: 'mono', text: op.command })));
195
+ return el('section', { className: 'panel', 'data-design-component': 'operations' }, el('h3', { text: 'Operations' }), el('ul', { className: 'ops' }, ...items));
196
+ }
197
+
198
+ #actions() {
199
+ return el('section', { className: 'actions', 'data-design-component': 'actions' },
200
+ el('button', { type: 'button', text: this.#reading ? 'Reading…' : 'Reload report',
201
+ disabled: this.#reading, onclick: () => void this.#reload() }),
202
+ this.#readError ? el('p', { role: 'status', text: this.#readError }) : null);
203
+ }
204
+
205
+ #render() {
206
+ const v = this.#view && typeof this.#view.status === 'string' ? this.#view : null;
207
+ const home = el('div', { className: 'home', 'data-design-component': 'home' }, ...this.#verdict(v));
208
+ if (v?.startedAt) home.append(this.#freshness(v), this.#coverage(v), this.#findings(v));
209
+ home.append(this.#actions(), this.#operations());
210
+ this.#root.replaceChildren(el('style', { textContent: STYLE }), home);
211
+ }
212
+ }
213
+
214
+ if (!customElements.get('code-quality-home')) customElements.define('code-quality-home', CodeQualityHome);
@@ -0,0 +1,146 @@
1
+ ---
2
+ version: alpha
3
+ name: CmdSmith
4
+ description: Pipeline Forge for composed Total Recall commands. Calm deep-teal workbench, cyan forge mark, risk read at a glance.
5
+ colors:
6
+ primary: "#0891b2"
7
+ primary-strong: "#06b6d4"
8
+ primary-soft: "#0c3a47"
9
+ on-primary: "#ecfeff"
10
+ secondary: "#083344"
11
+ background: "#061a20"
12
+ surface: "#0b2731"
13
+ surface-raised: "#10333f"
14
+ line: "#1d4a57"
15
+ text: "#e6f6f9"
16
+ muted: "#93b5bd"
17
+ ok: "#22c55e"
18
+ ok-soft: "#0f3a26"
19
+ warn: "#eab308"
20
+ warn-soft: "#3a3110"
21
+ danger: "#ef4444"
22
+ danger-soft: "#3f1717"
23
+ info: "#38bdf8"
24
+ info-soft: "#0e3247"
25
+ typography:
26
+ title:
27
+ fontFamily: "'Space Grotesk', system-ui, sans-serif"
28
+ fontSize: 15px
29
+ fontWeight: 700
30
+ lineHeight: 1.3
31
+ body:
32
+ fontFamily: "'Space Grotesk', system-ui, sans-serif"
33
+ fontSize: 13px
34
+ fontWeight: 400
35
+ lineHeight: 1.5
36
+ label:
37
+ fontFamily: "'Space Grotesk', system-ui, sans-serif"
38
+ fontSize: 11px
39
+ fontWeight: 600
40
+ lineHeight: 1.2
41
+ letterSpacing: 0.06em
42
+ code:
43
+ fontFamily: "'JetBrains Mono', ui-monospace, monospace"
44
+ fontSize: 12px
45
+ fontWeight: 400
46
+ lineHeight: 1.5
47
+ rounded:
48
+ sm: 4px
49
+ md: 6px
50
+ lg: 10px
51
+ spacing:
52
+ xs: 4px
53
+ sm: 8px
54
+ md: 12px
55
+ lg: 16px
56
+ xl: 24px
57
+ touch: 44px
58
+ components:
59
+ forge-header:
60
+ backgroundColor: "{colors.secondary}"
61
+ textColor: "{colors.text}"
62
+ typography: "{typography.title}"
63
+ rounded: "{rounded.lg}"
64
+ padding: "{spacing.md}"
65
+ verb-row:
66
+ backgroundColor: "{colors.surface}"
67
+ textColor: "{colors.text}"
68
+ typography: "{typography.code}"
69
+ rounded: "{rounded.md}"
70
+ padding: "{spacing.sm}"
71
+ height: "{spacing.touch}"
72
+ verb-row-selected:
73
+ backgroundColor: "{colors.primary-soft}"
74
+ textColor: "{colors.text}"
75
+ rounded: "{rounded.md}"
76
+ risk-badge:
77
+ typography: "{typography.label}"
78
+ rounded: "{rounded.sm}"
79
+ padding: "{spacing.xs}"
80
+ inspector:
81
+ backgroundColor: "{colors.surface}"
82
+ textColor: "{colors.text}"
83
+ typography: "{typography.body}"
84
+ rounded: "{rounded.lg}"
85
+ padding: "{spacing.lg}"
86
+ action-primary:
87
+ backgroundColor: "{colors.primary}"
88
+ textColor: "{colors.on-primary}"
89
+ typography: "{typography.label}"
90
+ rounded: "{rounded.md}"
91
+ padding: "{spacing.md}"
92
+ height: "{spacing.touch}"
93
+ action-danger:
94
+ backgroundColor: "{colors.danger-soft}"
95
+ textColor: "{colors.danger}"
96
+ typography: "{typography.label}"
97
+ rounded: "{rounded.md}"
98
+ padding: "{spacing.md}"
99
+ height: "{spacing.touch}"
100
+ status-line:
101
+ backgroundColor: "{colors.surface-raised}"
102
+ textColor: "{colors.muted}"
103
+ typography: "{typography.body}"
104
+ rounded: "{rounded.md}"
105
+ padding: "{spacing.sm}"
106
+ op-sheet:
107
+ backgroundColor: "{colors.surface}"
108
+ textColor: "{colors.text}"
109
+ typography: "{typography.body}"
110
+ rounded: "{rounded.lg}"
111
+ padding: "{spacing.lg}"
112
+ field-list:
113
+ textColor: "{colors.muted}"
114
+ typography: "{typography.code}"
115
+ ---
116
+
117
+ # CmdSmith
118
+
119
+ CmdSmith is the Composable CLI plugin's brand: a forge where repeated command sequences become named, versioned verbs. The surface is a quiet deep-teal workbench. The cyan forge mark (`primary`) is reserved for the plugin wordmark, the selected verb and the one primary action on screen.
120
+
121
+ ## Colors
122
+
123
+ - `background`, `surface`, `surface-raised` and `line` build the workbench in three depths. Text sits in `text`; supporting labels and paths in `muted`.
124
+ - Risk is the most important signal and always reads the same way: `ok` for `read`, `warn` for `write`, `danger` for destructive and gated classes (`money`, `dns-cert`, `production-deploy`, `secret-revoke`), and `info` for scope and neutral facts. Each has a `-soft` fill for badge backgrounds so no transparency math is needed.
125
+
126
+ ## Typography
127
+
128
+ Space Grotesk carries titles, body and labels. JetBrains Mono carries command names, paths, digests and source. Labels are uppercase with `letterSpacing` only in badges.
129
+
130
+ ## Layout
131
+
132
+ Spacing steps are 4, 8, 12, 16 and 24 pixels. Every interactive target is at least `spacing.touch` (44px) tall. Corners are `rounded.md` on controls and `rounded.lg` on regions.
133
+
134
+ ## Components
135
+
136
+ - `forge-header`: wordmark "CmdSmith", badge "Pipeline Forge", inventory count.
137
+ - `verb-row` / `verb-row-selected`: one composed command with its scope tag and `risk-badge`.
138
+ - `inspector`: the selected command's registry record, history and source.
139
+ - `action-primary` for the single forward action (Run test); `action-danger` for remove, which always needs a second confirming click.
140
+ - `status-line`: loading, unavailable and error states, stated in words.
141
+ - `op-sheet` and `field-list`: the portable operation chunks.
142
+
143
+ ## Do and don't
144
+
145
+ - Do state "Unavailable" and the reason when the host or an operation fails. Don't show placeholder numbers.
146
+ - Don't name vendors or implementation details in visible text. Don't use neon glow, scanlines or glitch effects.
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "tr-plugin-composable-cli",
3
- "version": "0.2.5",
3
+ "version": "0.3.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "tr-plugin-composable-cli",
9
- "version": "0.2.5",
9
+ "version": "0.3.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@gregiteen/ssss-cli": "0.14.5"
13
13
  },
14
14
  "devDependencies": {
15
- "total-recall-brain": "3.43.3"
15
+ "total-recall-brain": "3.45.0"
16
16
  }
17
17
  },
18
18
  "node_modules/@alcalzone/ansi-tokenize": {
@@ -5543,9 +5543,9 @@
5543
5543
  }
5544
5544
  },
5545
5545
  "node_modules/total-recall-brain": {
5546
- "version": "3.43.3",
5547
- "resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.43.3.tgz",
5548
- "integrity": "sha512-yjfPN/BQxEEa+iodyFXQov/6fRt1pZg/7RcmgsbpALwBt6Ki3JJjT3tzArBC7NxHQmXgGYyKnCYId6xe/W2rPg==",
5546
+ "version": "3.45.0",
5547
+ "resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.45.0.tgz",
5548
+ "integrity": "sha512-HDYfROazZbsLHQsFPnlBcSpe1HL1QEi7JG8x/eNRUI06RxVQsZWl8LwBo2lTWjWRDrKmCy7BUmSXQDuWF3lrEw==",
5549
5549
  "dev": true,
5550
5550
  "license": "MIT",
5551
5551
  "workspaces": [
@@ -5553,7 +5553,7 @@
5553
5553
  ],
5554
5554
  "dependencies": {
5555
5555
  "@simplewebauthn/server": "^13.3.2",
5556
- "@ssss/cli": "npm:@gregiteen/ssss-cli@0.14.4",
5556
+ "@ssss/cli": "npm:@gregiteen/ssss-cli@0.14.5",
5557
5557
  "bcrypt": "^6.0.0",
5558
5558
  "better-sqlite3": "^12.11.1",
5559
5559
  "cookie-parser": "^1.4.7",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tr-plugin-composable-cli",
3
- "version": "0.2.5",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "description": "Total Recall composable CLI plugin: create, compose, register, test and safely run custom verbs; every command listed in the instruction surfaces.",
6
6
  "scripts": {
@@ -16,6 +16,7 @@
16
16
  "files": [
17
17
  "cli.mjs",
18
18
  "plugin.json",
19
+ "DESIGN.md",
19
20
  "README.md",
20
21
  "LICENSE",
21
22
  "examples/",
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://github.com/gregiteen/total-recall/blob/main/metadata.plugin.schema.json",
3
3
  "id": "composable-cli",
4
4
  "name": "Composable CLI",
5
- "version": "0.2.5",
5
+ "version": "0.3.0",
6
6
  "description": "Dynamic agent command composition engine with pipeline registration, versioning, and execution.",
7
7
  "author": "Total Recall contributors",
8
8
  "license": "MIT",
@@ -117,42 +117,59 @@
117
117
  "description": "Total Recall composable CLI plugin: create, compose, register, test and safely run custom verbs; every command listed in the instruction surfaces."
118
118
  }
119
119
  ],
120
- "card_face": {
121
- "skin": "cyber-forge",
122
- "theme": "vibrant",
123
- "headline": "Dynamic Agent Command Composition",
124
- "primary_color": "#0891b2",
125
- "secondary_color": "#083344",
126
- "accent_color": "#06b6d4",
127
- "touch_layout": "comfortable",
128
- "interactive": true,
129
- "quick_actions": [
130
- {
131
- "subcommand": "library",
132
- "label": "LIBRARY"
133
- },
134
- {
135
- "subcommand": "list",
136
- "label": "LIST"
137
- },
138
- {
139
- "subcommand": "show",
140
- "label": "SHOW"
141
- },
142
- {
143
- "subcommand": "history",
144
- "label": "HISTORY"
145
- }
146
- ]
147
- },
148
120
  "ui": {
121
+ "home": "home",
122
+ "design_tokens": "DESIGN.md",
149
123
  "elements": [
150
124
  {
151
- "id": "card",
152
- "kind": "card",
153
- "tag": "tr-composable-cli-card",
154
- "module": "ui/card.js",
155
- "description": "Pipeline Card Face"
125
+ "id": "home",
126
+ "kind": "panel",
127
+ "tag": "tr-composable-cli-home",
128
+ "module": "ui/home.js",
129
+ "description": "CmdSmith Home: composed commands, their records and history, with on-demand test, rollback and remove",
130
+ "tokens": [
131
+ "color-background",
132
+ "color-secondary",
133
+ "color-surface",
134
+ "color-surface-raised",
135
+ "color-line",
136
+ "color-text",
137
+ "color-muted",
138
+ "color-primary",
139
+ "color-primary-strong",
140
+ "color-primary-soft",
141
+ "color-on-primary",
142
+ "color-ok",
143
+ "color-ok-soft",
144
+ "color-warn",
145
+ "color-warn-soft",
146
+ "color-danger",
147
+ "color-danger-soft",
148
+ "color-info",
149
+ "color-info-soft",
150
+ "spacing-xs",
151
+ "spacing-sm",
152
+ "spacing-md",
153
+ "spacing-lg",
154
+ "spacing-touch",
155
+ "radius-sm",
156
+ "radius-md",
157
+ "radius-lg",
158
+ "typography-title-font-family",
159
+ "typography-title-font-size",
160
+ "typography-title-font-weight",
161
+ "typography-title-line-height",
162
+ "typography-body-font-family",
163
+ "typography-body-font-size",
164
+ "typography-body-line-height",
165
+ "typography-label-font-family",
166
+ "typography-label-font-size",
167
+ "typography-label-font-weight",
168
+ "typography-label-letter-spacing",
169
+ "typography-code-font-family",
170
+ "typography-code-font-size",
171
+ "typography-code-line-height"
172
+ ]
156
173
  }
157
174
  ]
158
175
  },