total-recall-brain 3.45.0 → 3.46.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 (363) hide show
  1. package/bin/total-recall.mjs +7 -2
  2. package/frontend/dist/assets/index-BRYE1jmv.css +1 -0
  3. package/frontend/dist/assets/index-D1goIPjC.js +5598 -0
  4. package/frontend/dist/index.html +2 -2
  5. package/frontend/dist/sw.js +5 -4
  6. package/frontend/src/App.tsx +183 -236
  7. package/frontend/src/api/auth-inventory.ts +62 -0
  8. package/frontend/src/api/memory.ts +13 -8
  9. package/frontend/src/api/plugin-credentials.ts +23 -0
  10. package/frontend/src/api/plugins.ts +37 -53
  11. package/frontend/src/api/workspace-drawers.ts +97 -0
  12. package/frontend/src/components/BrainSelector.tsx +9 -3
  13. package/frontend/src/components/plugins/PluginPanel.tsx +83 -42
  14. package/frontend/src/components/plugins/PluginSettings.tsx +10 -20
  15. package/frontend/src/components/plugins/PluginWorkspace.tsx +367 -0
  16. package/frontend/src/components/plugins/ScopedPluginCommands.tsx +142 -0
  17. package/frontend/src/components/plugins/plugin-frame.ts +44 -33
  18. package/frontend/src/components/plugins/scoped-plugin-operations.ts +28 -0
  19. package/frontend/src/components/workspace/DrawerChat.tsx +110 -0
  20. package/frontend/src/components/workspace/DrawerLayout.tsx +196 -0
  21. package/frontend/src/components/workspace/DrawerMarkup.tsx +49 -0
  22. package/frontend/src/components/workspace/PluginChunkLibrary.tsx +92 -0
  23. package/frontend/src/components/workspace/PluginHome.tsx +76 -0
  24. package/frontend/src/components/workspace/WorkspaceDrawers.tsx +96 -0
  25. package/frontend/src/components/workspace/WorkspacePage.tsx +95 -0
  26. package/frontend/src/components/workspace/usePluginDesign.ts +38 -0
  27. package/frontend/src/index.css +409 -136
  28. package/frontend/src/pages/HelpPage.tsx +15 -46
  29. package/frontend/src/pages/MemoryPage.tsx +19 -36
  30. package/frontend/src/pages/SettingsPage.tsx +1 -1
  31. package/metadata.plugin.schema.json +53 -227
  32. package/package.json +1 -1
  33. package/scaffold/.agent/skills/plugin/SKILL.md +13 -11
  34. package/scaffold/.agent/skills/plugin/evals/README.md +14 -21
  35. package/scaffold/.agent/skills/plugin/evals/cases/01-fabricated-seed.mjs +15 -18
  36. package/scaffold/.agent/skills/plugin/evals/cases/02-reassuring-default.mjs +19 -24
  37. package/scaffold/.agent/skills/plugin/evals/cases/03-declared-template.mjs +12 -20
  38. package/scaffold/.agent/skills/plugin/evals/cases/04-home-collects-credential.mjs +35 -0
  39. package/scaffold/.agent/skills/plugin/evals/cases/05-host-leak-in-scaffold.mjs +8 -28
  40. package/scaffold/.agent/skills/plugin/evals/cases/06-correct-plugin.mjs +85 -47
  41. package/scaffold/.agent/skills/plugin/evals/run.mjs +17 -18
  42. package/scaffold/.agent/skills/plugin/prompts/05-credentials.md +4 -4
  43. package/scaffold/.agent/skills/plugin/prompts/07-scaffold.md +2 -2
  44. package/scaffold/.agent/skills/plugin/prompts/08-verify.md +4 -4
  45. package/scaffold/.agent/skills/plugin/references/anti-patterns.md +2 -2
  46. package/scaffold/.agent/skills/plugin/references/generative-home.md +38 -0
  47. package/scaffold/.agent/skills/plugin/references/scaffold.md +5 -5
  48. package/scaffold/.agent/skills/plugin/references/surfaces.md +13 -4
  49. package/scaffold/.agent/skills/plugin/scripts/record.mjs +75 -153
  50. package/scaffold/.agent/skills/plugin/subagents/plugin-reviewer.md +4 -4
  51. package/scaffold/.agent/skills/total-recall/plugins/auth/DESIGN.md +76 -0
  52. package/scaffold/.agent/skills/total-recall/plugins/auth/README.md +3 -1
  53. package/scaffold/.agent/skills/total-recall/plugins/auth/cli.mjs +20 -15
  54. package/scaffold/.agent/skills/total-recall/plugins/auth/package-lock.json +6 -6
  55. package/scaffold/.agent/skills/total-recall/plugins/auth/package.json +2 -1
  56. package/scaffold/.agent/skills/total-recall/plugins/auth/plugin.json +13 -51
  57. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/access-overview.md +17 -0
  58. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/agent-login.md +20 -0
  59. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/baseline-audit.md +22 -0
  60. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/credential-repository-binding.md +17 -0
  61. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/credential-store-maintenance.md +17 -0
  62. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/dashboard-password.md +18 -0
  63. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/dashboard-sessions.md +18 -0
  64. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/endpoint-probe.md +23 -0
  65. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/google-sign-in.md +21 -0
  66. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/mesh-machines.md +16 -0
  67. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/passkey-enrollment.md +21 -0
  68. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/registered-brains.md +16 -0
  69. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/scoped-access-keys.md +17 -0
  70. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/secret-inventory.md +25 -0
  71. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/signing-key-rotation.md +22 -0
  72. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/home.js +375 -0
  73. package/scaffold/.agent/skills/total-recall/plugins/automations/{ui/DESIGN.md → DESIGN.md} +32 -21
  74. package/scaffold/.agent/skills/total-recall/plugins/automations/adapters.mjs +17 -1
  75. package/scaffold/.agent/skills/total-recall/plugins/automations/cli.mjs +10 -1
  76. package/scaffold/.agent/skills/total-recall/plugins/automations/package-lock.json +6 -6
  77. package/scaffold/.agent/skills/total-recall/plugins/automations/package.json +4 -3
  78. package/scaffold/.agent/skills/total-recall/plugins/automations/plugin.json +11 -27
  79. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/automations.js +2 -2
  80. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/control-ledger.md +42 -0
  81. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/local-inventory-triage.md +17 -0
  82. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/pending-control.md +39 -0
  83. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/run-evidence.md +41 -0
  84. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/schedule-vs-run-evidence.md +17 -0
  85. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/source-coverage.md +41 -0
  86. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/{card.js → home.js} +32 -27
  87. package/scaffold/.agent/skills/total-recall/plugins/code-quality/DESIGN.md +53 -0
  88. package/scaffold/.agent/skills/total-recall/plugins/code-quality/cli.mjs +23 -0
  89. package/scaffold/.agent/skills/total-recall/plugins/code-quality/commands/run-core.mjs +4 -2
  90. package/scaffold/.agent/skills/total-recall/plugins/code-quality/core/check.mjs +4 -2
  91. package/scaffold/.agent/skills/total-recall/plugins/code-quality/package-lock.json +6 -6
  92. package/scaffold/.agent/skills/total-recall/plugins/code-quality/package.json +2 -1
  93. package/scaffold/.agent/skills/total-recall/plugins/code-quality/plugin.json +40 -40
  94. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/config.md +15 -0
  95. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/detect.md +15 -0
  96. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/gate.md +15 -0
  97. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/init.md +15 -0
  98. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/report.md +17 -0
  99. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/run.md +17 -0
  100. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/snapshot.md +15 -0
  101. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/code-quality-report.mjs +55 -23
  102. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/home.mjs +214 -0
  103. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/DESIGN.md +146 -0
  104. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package-lock.json +6 -6
  105. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package.json +2 -1
  106. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/plugin.json +51 -34
  107. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/src/command.mjs +1 -1
  108. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/create.md +35 -0
  109. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/history.md +35 -0
  110. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/library.md +49 -0
  111. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/list.md +42 -0
  112. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/promote.md +40 -0
  113. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/read.md +25 -0
  114. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/remove.md +26 -0
  115. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/rollback.md +26 -0
  116. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/show.md +53 -0
  117. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/status.md +40 -0
  118. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/test-path.md +38 -0
  119. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/test.md +46 -0
  120. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/update.md +32 -0
  121. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/home.js +533 -0
  122. package/scaffold/.agent/skills/total-recall/plugins/embeddings/DESIGN.md +110 -0
  123. package/scaffold/.agent/skills/total-recall/plugins/embeddings/package-lock.json +6 -6
  124. package/scaffold/.agent/skills/total-recall/plugins/embeddings/package.json +2 -1
  125. package/scaffold/.agent/skills/total-recall/plugins/embeddings/plugin.json +13 -10
  126. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/benchmark.md +49 -0
  127. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/coverage.md +53 -0
  128. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/models.md +43 -0
  129. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/pull.md +41 -0
  130. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/status.md +59 -0
  131. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/home.js +353 -0
  132. package/scaffold/.agent/skills/total-recall/plugins/git/DESIGN.md +31 -0
  133. package/scaffold/.agent/skills/total-recall/plugins/git/README.md +25 -1
  134. package/scaffold/.agent/skills/total-recall/plugins/git/cli.mjs +5 -1
  135. package/scaffold/.agent/skills/total-recall/plugins/git/package-lock.json +6 -6
  136. package/scaffold/.agent/skills/total-recall/plugins/git/package.json +2 -1
  137. package/scaffold/.agent/skills/total-recall/plugins/git/plugin.json +17 -27
  138. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/commit-memory.mjs +30 -6
  139. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/fleet.mjs +24 -6
  140. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/secret-firewall.mjs +33 -7
  141. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/undo.mjs +29 -5
  142. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/unmerged.mjs +182 -0
  143. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/change-comparison.md +27 -0
  144. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/commit-identity.md +22 -0
  145. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/create-worktree.md +25 -0
  146. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/registered-worktrees.md +22 -0
  147. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/remove-worktree.md +23 -0
  148. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/repository-ledger.md +25 -0
  149. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/unmerged-work.md +22 -0
  150. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/upstream-divergence.md +17 -0
  151. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/worktree-conflict-triage.md +17 -0
  152. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/worktree-terminal.md +22 -0
  153. package/scaffold/.agent/skills/total-recall/plugins/git/ui/home.js +273 -0
  154. package/scaffold/.agent/skills/total-recall/plugins/mesh/DESIGN.md +35 -0
  155. package/scaffold/.agent/skills/total-recall/plugins/mesh/README.md +4 -5
  156. package/scaffold/.agent/skills/total-recall/plugins/mesh/cli.mjs +9 -3
  157. package/scaffold/.agent/skills/total-recall/plugins/mesh/package-lock.json +6 -6
  158. package/scaffold/.agent/skills/total-recall/plugins/mesh/package.json +2 -1
  159. package/scaffold/.agent/skills/total-recall/plugins/mesh/plugin.json +37 -39
  160. package/scaffold/.agent/skills/total-recall/plugins/mesh/src/cli/mesh.mjs +5 -3
  161. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/active-device-dispatch.md +22 -0
  162. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/control-probe.md +25 -0
  163. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/control-server.md +22 -0
  164. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/credential-readiness.md +23 -0
  165. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/elected-leader.md +22 -0
  166. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/enrollment-key.md +22 -0
  167. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/file-receipt.md +25 -0
  168. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/fleet-execution.md +23 -0
  169. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/fleet-presence.md +23 -0
  170. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/interactive-ssh.md +22 -0
  171. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/local-enrollment.md +23 -0
  172. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/mesh-policy.md +23 -0
  173. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/network-atlas.md +25 -0
  174. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/node-roster.md +26 -0
  175. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/node-selection-proof.md +17 -0
  176. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/owner-observations.md +23 -0
  177. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/peer-path.md +23 -0
  178. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/pinned-leader.md +24 -0
  179. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/reachability-evidence-ladder.md +17 -0
  180. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/recorded-login.md +23 -0
  181. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/remote-execution.md +22 -0
  182. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/secret-grants.md +26 -0
  183. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/{card.js → home.js} +93 -22
  184. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/DESIGN.md +86 -0
  185. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/README.md +19 -0
  186. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/cli.mjs +5 -1
  187. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package-lock.json +6 -6
  188. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package.json +2 -1
  189. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/plugin.json +43 -22
  190. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/chat.mjs +80 -0
  191. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/adapter-docs-freshness.md +16 -0
  192. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/chat-handoff.md +26 -0
  193. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/fleet-maintenance.md +21 -0
  194. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/harness-inventory.md +21 -0
  195. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/included-access.md +18 -0
  196. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/included-usage-verification.md +15 -0
  197. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/independent-review.md +17 -0
  198. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/managed-execution.md +20 -0
  199. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/official-documentation.md +18 -0
  200. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/quota-recovery.md +21 -0
  201. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/review-routing-decision.md +16 -0
  202. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/route-work.md +18 -0
  203. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/routing-evidence.md +18 -0
  204. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/run-ledger.md +18 -0
  205. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/home.js +198 -0
  206. package/scaffold/.agent/skills/total-recall/plugins/openwiki/DESIGN.md +75 -0
  207. package/scaffold/.agent/skills/total-recall/plugins/openwiki/README.md +2 -0
  208. package/scaffold/.agent/skills/total-recall/plugins/openwiki/cli.mjs +17 -14
  209. package/scaffold/.agent/skills/total-recall/plugins/openwiki/package-lock.json +6 -6
  210. package/scaffold/.agent/skills/total-recall/plugins/openwiki/package.json +2 -1
  211. package/scaffold/.agent/skills/total-recall/plugins/openwiki/plugin.json +10 -44
  212. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/generate.mjs +5 -4
  213. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/graph.mjs +3 -4
  214. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/ingest.mjs +23 -18
  215. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/mesh-vaults.mjs +8 -3
  216. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/refresh.mjs +6 -3
  217. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/search.mjs +3 -5
  218. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/token.mjs +21 -47
  219. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/upstream-watcher.mjs +17 -6
  220. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/auto-refresh.md +18 -0
  221. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/bootstrap-pages.md +18 -0
  222. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/generate-wiki.md +21 -0
  223. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/generator-settings.md +18 -0
  224. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/host-probe.md +18 -0
  225. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/ingest-preview.md +18 -0
  226. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/link-hygiene.md +21 -0
  227. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/link-topology.md +19 -0
  228. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/passage-search.md +19 -0
  229. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/propagation-plan.md +18 -0
  230. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/provider-credentials.md +18 -0
  231. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/refresh-report.md +18 -0
  232. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/task-evidence.md +22 -0
  233. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/upstream-record.md +18 -0
  234. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/watch-upstream.md +18 -0
  235. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/wiki-atlas.md +19 -0
  236. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/panel.js +261 -513
  237. package/scaffold/.agent/skills/total-recall/plugins/security/DESIGN.md +84 -0
  238. package/scaffold/.agent/skills/total-recall/plugins/security/README.md +4 -2
  239. package/scaffold/.agent/skills/total-recall/plugins/security/cli.mjs +7 -19
  240. package/scaffold/.agent/skills/total-recall/plugins/security/package-lock.json +6 -6
  241. package/scaffold/.agent/skills/total-recall/plugins/security/package.json +2 -3
  242. package/scaffold/.agent/skills/total-recall/plugins/security/plugin.json +19 -52
  243. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/device-evidence.md +21 -0
  244. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/evidence-desk.md +18 -0
  245. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/guided-device-review.md +17 -0
  246. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/host-and-network.md +21 -0
  247. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/https-headers.md +17 -0
  248. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/mesh-coverage.md +18 -0
  249. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/private-security-tools.md +16 -0
  250. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/single-origin-header-check.md +17 -0
  251. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/source-review.md +21 -0
  252. package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/ssh-permission-plan.md +17 -0
  253. package/scaffold/.agent/skills/total-recall/plugins/security/ui/home.js +283 -0
  254. package/scaffold/.agent/skills/total-recall/plugins/ssss/DESIGN.md +93 -0
  255. package/scaffold/.agent/skills/total-recall/plugins/ssss/package-lock.json +2 -2
  256. package/scaffold/.agent/skills/total-recall/plugins/ssss/package.json +2 -1
  257. package/scaffold/.agent/skills/total-recall/plugins/ssss/plugin.json +5 -3
  258. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/conformance.md +26 -0
  259. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/registry.md +37 -0
  260. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/repair.md +42 -0
  261. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/scaffold.md +33 -0
  262. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/status.md +43 -0
  263. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/validate.md +34 -0
  264. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/validation-diagnostics.md +17 -0
  265. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/workspace-registry-preflight.md +17 -0
  266. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/home.js +348 -0
  267. package/scaffold/.agent/skills/total-recall/references/operations.md +2 -0
  268. package/src/cli/api.mjs +3 -3
  269. package/src/cli/brief.mjs +3 -0
  270. package/src/cli/config.mjs +16 -0
  271. package/src/cli/connect.mjs +2 -7
  272. package/src/cli/plugin/chunks.mjs +145 -0
  273. package/src/cli/plugin/create.mjs +24 -52
  274. package/src/cli/plugin/index.mjs +20 -9
  275. package/src/cli/setup.mjs +2 -9
  276. package/src/cli/start.mjs +1 -0
  277. package/src/cli/startup.mjs +18 -0
  278. package/src/core/app-deploy/design-tokens.mjs +14 -9
  279. package/src/core/app-deploy/ui-elements.mjs +1 -1
  280. package/src/core/brain-registry.mjs +5 -0
  281. package/src/core/brain-updates.mjs +5 -1
  282. package/src/core/daemon-control.mjs +5 -1
  283. package/src/core/dashboard-bundle.mjs +261 -0
  284. package/src/core/default-plugin-refresh.mjs +39 -0
  285. package/src/core/ensure-dependencies.mjs +19 -15
  286. package/src/core/memory-brain.mjs +30 -8
  287. package/src/core/plugin-activation.mjs +63 -20
  288. package/src/core/plugin-contracts/{card.mjs → manifest.mjs} +23 -57
  289. package/src/core/plugin-contracts/startup-check.mjs +49 -0
  290. package/src/core/plugin-contracts/ui.mjs +9 -3
  291. package/src/core/plugin-distribution.mjs +6 -6
  292. package/src/core/plugin-lifecycle.mjs +58 -0
  293. package/src/core/plugin-loader.mjs +9 -5
  294. package/src/core/plugin-runner.mjs +21 -10
  295. package/src/core/plugin-startup-checks.mjs +44 -0
  296. package/src/core/plugin-state.mjs +19 -5
  297. package/src/core/plugin-store.mjs +30 -11
  298. package/src/core/project-id.mjs +15 -5
  299. package/src/core/required-plugins.mjs +31 -6
  300. package/src/core/schema.mjs +2 -0
  301. package/src/core/ssss-operation-service.mjs +1 -0
  302. package/src/core/startup-health.mjs +28 -3
  303. package/src/core/testing/plugin-fixture.mjs +22 -21
  304. package/src/core/throttled-fetch.mjs +25 -18
  305. package/src/core/ui-chunk-choice.mjs +77 -0
  306. package/src/core/ui-chunk.registry.json +23 -0
  307. package/src/core/ui-chunks.mjs +434 -0
  308. package/src/core/vault-cache.mjs +58 -59
  309. package/src/core/workspace-compositions.mjs +151 -0
  310. package/src/core/workspace-drawers.mjs +79 -0
  311. package/src/server/api.mjs +4 -27
  312. package/src/server/index.mjs +28 -21
  313. package/src/server/memory-events.mjs +31 -0
  314. package/src/server/plugin-brain-targets.mjs +89 -0
  315. package/src/server/rest.mjs +2 -0
  316. package/src/server/route-inventory.mjs +3 -2
  317. package/src/server/route-manifest.json +52 -4
  318. package/src/server/routes/_shared.mjs +7 -14
  319. package/src/server/routes/brains.mjs +29 -44
  320. package/src/server/routes/dashboard.mjs +26 -0
  321. package/src/server/routes/plugins.mjs +154 -45
  322. package/src/server/routes/ui-chunks.mjs +192 -0
  323. package/frontend/dist/assets/index-DACh1dhx.js +0 -5613
  324. package/frontend/dist/assets/index-DtwsDyFM.css +0 -1
  325. package/frontend/src/components/plugins/card/CardEngine.tsx +0 -108
  326. package/frontend/src/components/plugins/card/CardScenes.tsx +0 -103
  327. package/frontend/src/components/plugins/card/ExecutionPicker.tsx +0 -64
  328. package/frontend/src/components/plugins/card/args.ts +0 -28
  329. package/frontend/src/components/plugins/card/card.css +0 -32
  330. package/frontend/src/components/plugins/card/cli-line.ts +0 -13
  331. package/frontend/src/components/plugins/card/contract.ts +0 -91
  332. package/frontend/src/components/plugins/card/format.ts +0 -49
  333. package/frontend/src/components/plugins/card/runner-context.ts +0 -11
  334. package/frontend/src/components/plugins/card/runner.tsx +0 -43
  335. package/frontend/src/components/plugins/card/theme.ts +0 -35
  336. package/frontend/src/components/plugins/card/use-source.ts +0 -22
  337. package/frontend/src/components/plugins/card/widgets.tsx +0 -94
  338. package/frontend/src/components/plugins/workspace/WorkspaceHost.tsx +0 -23
  339. package/frontend/src/pages/PluginsPage.tsx +0 -1719
  340. package/scaffold/.agent/skills/plugin/evals/cases/04-card-collects-credential.mjs +0 -47
  341. package/scaffold/.agent/skills/plugin/prompts/06-card.md +0 -46
  342. package/scaffold/.agent/skills/plugin/references/card.md +0 -90
  343. package/scaffold/.agent/skills/plugin/subagents/card-designer.md +0 -60
  344. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/DESIGN.md +0 -67
  345. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/card.js +0 -1179
  346. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/DESIGN.md +0 -32
  347. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/card.js +0 -588
  348. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/card.js +0 -575
  349. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/DESIGN.md +0 -32
  350. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/card.js +0 -482
  351. package/scaffold/.agent/skills/total-recall/plugins/git/ui/DESIGN.md +0 -100
  352. package/scaffold/.agent/skills/total-recall/plugins/git/ui/card.js +0 -637
  353. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/DESIGN.md +0 -217
  354. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/DESIGN.md +0 -32
  355. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/card.js +0 -1276
  356. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/DESIGN.md +0 -45
  357. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/card.js +0 -1401
  358. package/scaffold/.agent/skills/total-recall/plugins/security/scripts/build-ui.mjs +0 -4
  359. package/scaffold/.agent/skills/total-recall/plugins/security/ui/DESIGN.md +0 -41
  360. package/scaffold/.agent/skills/total-recall/plugins/security/ui/card.js +0 -396
  361. package/scaffold/.agent/skills/total-recall/plugins/security/ui/panel.js +0 -98
  362. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/DESIGN.md +0 -15
  363. package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/card.js +0 -182
@@ -1,32 +0,0 @@
1
- # DESIGN.md — Nitpicker
2
-
3
- ```yaml
4
- tokens:
5
- brand-name: "Nitpicker"
6
- wordmark: "[NIT//PICKER]"
7
- color-primary: "#eab308"
8
- color-background: "#0f172a"
9
- color-surface: "#1e293b"
10
- color-accent: "#38bdf8"
11
- color-ok: "#10b981"
12
- color-warn: "#f59e0b"
13
- color-danger: "#ef4444"
14
- color-text: "#f8fafc"
15
- color-muted: "#94a3b8"
16
- color-line: "#334155"
17
- badge: "Fail-Closed Gates"
18
- font-mono: "'JetBrains Mono', 'Fira Code', monospace"
19
- border-radius: "8px"
20
- ```
21
-
22
- ## Brand & Typographic Wordmark
23
- - **Name**: Nitpicker
24
- - **Wordmark Logo**: `[NIT//PICKER]` (custom vector typographic badge, no generic emojis)
25
- - **Palette**: Primary `#eab308`, Surface `#0f172a`, Secondary Surface `#1e293b`, Accent `#38bdf8`, Line `#334155`, Text `#f8fafc`.
26
- - **States**: Pass `#10b981`, Warning `#f59e0b`, Danger `#ef4444`.
27
-
28
- ## Interface Architecture
29
- 1. **Header**: Custom vector wordmark, tier badge, repository cleanliness indicator.
30
- 2. **Gate Health Matrix**: Real-time status cards for configured gates (`typecheck`, `syntax`, `test`, `lint`, `format`, `secrets`).
31
- 3. **Structured Violation Browser**: Expandable inspection rows for errors and warnings with file paths, line numbers, and rule identifiers.
32
- 4. **Execution & Freshness Bar**: Interactive tier buttons (`fast`, `full`, `remote`) and worktree drift detection.
@@ -1,588 +0,0 @@
1
- /**
2
- * Nitpicker — Fail-Closed Code Quality Gate Console
3
- *
4
- * Bespoke operator interface for deterministic repository verification.
5
- * Displays real-time gate matrix, structured code violations, tier controllers,
6
- * and worktree drift indicators with zero template wrappers or terminal dumps.
7
- */
8
-
9
- const DASH = '\u2014';
10
-
11
- function escapeHtml(str) {
12
- if (str === null || str === undefined) return '';
13
- return String(str).replace(/[&<>"']/g, c => ({
14
- '&': '&amp;',
15
- '<': '&lt;',
16
- '>': '&gt;',
17
- '"': '&quot;',
18
- "'": '&#39;'
19
- }[c]));
20
- }
21
-
22
- export class CodeQualityCard extends HTMLElement {
23
- constructor() {
24
- super();
25
- this.report = null;
26
- this.executing = false;
27
- this.activeFilter = 'all';
28
- this.selectedTier = 'fast';
29
- this.screens = [{ id: 'overview', label: 'Gate Matrix' }];
30
- this.screen = 'overview';
31
- }
32
-
33
- connectedCallback() {
34
- if (!this.shadowRoot) {
35
- this.attachShadow({ mode: 'open' });
36
- }
37
- this.render();
38
- this.refreshReport();
39
- }
40
-
41
- async refreshReport() {
42
- if (!this.host) return;
43
- try {
44
- const res = await this.host.run('report', ['json']);
45
- if (res && typeof res === 'object') {
46
- this.report = res;
47
- } else if (typeof res === 'string' && res.trim().startsWith('{')) {
48
- this.report = JSON.parse(res);
49
- }
50
- this.render();
51
- } catch (err) {
52
- this.report = null;
53
- this.render();
54
- }
55
- }
56
-
57
- async runTier(tier) {
58
- if (!this.host || this.executing) return;
59
- this.executing = true;
60
- this.selectedTier = tier;
61
- this.render();
62
-
63
- try {
64
- await this.host.run('check', ['--tier', tier, '--json']);
65
- await this.refreshReport();
66
- } catch {
67
- await this.refreshReport();
68
- } finally {
69
- this.executing = false;
70
- this.render();
71
- }
72
- }
73
-
74
- setFilter(filter) {
75
- this.activeFilter = filter;
76
- this.render();
77
- }
78
-
79
- render() {
80
- const root = this.shadowRoot;
81
- if (!root) return;
82
-
83
- const rep = this.report;
84
- const isClean = rep?.clean === true;
85
- const checks = Array.isArray(rep?.gates) ? rep.gates : Array.isArray(rep?.checks) ? rep.checks : [];
86
- const timestamp = rep?.finishedAt ? new Date(rep.finishedAt).toLocaleTimeString() : rep?.timestamp ? new Date(rep.timestamp).toLocaleTimeString() : DASH;
87
- const tierName = rep?.tier || this.selectedTier;
88
-
89
- // Aggregate findings from report.findings array or nested gate findings
90
- let allFindings = Array.isArray(rep?.findings) ? [...rep.findings] : [];
91
- if (allFindings.length === 0) {
92
- for (const c of checks) {
93
- if (Array.isArray(c.findings)) {
94
- for (const f of c.findings) {
95
- allFindings.push({ ...f, checkName: c.name || c.id });
96
- }
97
- }
98
- }
99
- }
100
-
101
- const errorCount = allFindings.filter(f => f.severity === 'error').length;
102
- const warnCount = allFindings.filter(f => f.severity === 'warning').length;
103
-
104
- const filteredFindings = allFindings.filter(f => {
105
- if (this.activeFilter === 'errors') return f.severity === 'error';
106
- if (this.activeFilter === 'warnings') return f.severity === 'warning';
107
- return true;
108
- });
109
-
110
- root.innerHTML = `
111
- <style>
112
- :host {
113
- --face-bg: #0f172a;
114
- --face-surface: #1e293b;
115
- --face-line: #334155;
116
- --face-text: #f8fafc;
117
- --face-muted: #94a3b8;
118
- --face-brand: #eab308;
119
- --face-brand-hover: #facc15;
120
- --face-accent: #38bdf8;
121
- --face-ok: #10b981;
122
- --face-danger: #ef4444;
123
- --face-warn: #f59e0b;
124
- --face-dark: #0f172a;
125
-
126
- display: block;
127
- font-family: var(--font-sans, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);
128
- color: var(--text-primary, var(--face-text));
129
- background: var(--bg-secondary, var(--face-bg));
130
- border: 1px solid var(--border, var(--face-line));
131
- border-radius: 8px;
132
- padding: 16px;
133
- box-sizing: border-box;
134
- overflow: hidden;
135
- }
136
-
137
- @media (prefers-reduced-motion: reduce) {
138
- *, ::before, ::after {
139
- animation-duration: 0.01ms !important;
140
- animation-iteration-count: 1 !important;
141
- transition-duration: 0.01ms !important;
142
- }
143
- }
144
-
145
- /* Header Bar */
146
- .header {
147
- display: flex;
148
- align-items: center;
149
- justify-content: space-between;
150
- flex-wrap: wrap;
151
- gap: 12px;
152
- padding-bottom: 14px;
153
- border-bottom: 1px solid var(--border, var(--face-line));
154
- margin-bottom: 16px;
155
- }
156
-
157
- .brand-group {
158
- display: flex;
159
- align-items: center;
160
- gap: 10px;
161
- }
162
-
163
- .wordmark-badge {
164
- font-family: var(--font-mono, 'JetBrains Mono', monospace);
165
- font-size: 13px;
166
- font-weight: 800;
167
- letter-spacing: 0.05em;
168
- color: var(--card-accent, var(--face-accent));
169
- background: rgba(56, 189, 248, 0.12);
170
- padding: 6px 10px;
171
- border-radius: 6px;
172
- border: 1px solid rgba(56, 189, 248, 0.3);
173
- }
174
-
175
- .title-meta {
176
- display: flex;
177
- flex-direction: column;
178
- }
179
-
180
- .plugin-title {
181
- font-size: 14px;
182
- font-weight: 700;
183
- color: var(--text-primary, var(--face-text));
184
- margin: 0;
185
- }
186
-
187
- .plugin-subtitle {
188
- font-size: 11px;
189
- color: var(--text-secondary, var(--face-muted));
190
- margin: 0;
191
- }
192
-
193
- .verdict-chip {
194
- display: flex;
195
- align-items: center;
196
- gap: 6px;
197
- font-family: var(--font-mono, 'JetBrains Mono', monospace);
198
- font-size: 11px;
199
- font-weight: 700;
200
- padding: 5px 12px;
201
- border-radius: 6px;
202
- text-transform: uppercase;
203
- }
204
-
205
- .verdict-clean {
206
- color: var(--face-ok);
207
- background: rgba(16, 185, 129, 0.15);
208
- border: 1px solid rgba(16, 185, 129, 0.4);
209
- }
210
-
211
- .verdict-failed {
212
- color: var(--face-danger);
213
- background: rgba(239, 68, 68, 0.15);
214
- border: 1px solid rgba(239, 68, 68, 0.4);
215
- }
216
-
217
- .verdict-pending {
218
- color: var(--text-secondary, var(--face-muted));
219
- background: rgba(148, 163, 184, 0.1);
220
- border: 1px solid var(--border, var(--face-line));
221
- }
222
-
223
- /* Tier & Execution Bar */
224
- .controls-deck {
225
- display: flex;
226
- align-items: center;
227
- justify-content: space-between;
228
- flex-wrap: wrap;
229
- gap: 10px;
230
- margin-bottom: 16px;
231
- background: rgba(30, 41, 59, 0.5);
232
- border: 1px solid var(--border, var(--face-line));
233
- border-radius: 6px;
234
- padding: 8px 12px;
235
- }
236
-
237
- .tier-toggles {
238
- display: flex;
239
- align-items: center;
240
- gap: 6px;
241
- }
242
-
243
- .btn-tier {
244
- min-height: 44px;
245
- min-width: 44px;
246
- padding: 8px 14px;
247
- font-family: var(--font-mono, 'JetBrains Mono', monospace);
248
- font-size: 11px;
249
- font-weight: 700;
250
- color: var(--text-secondary, var(--face-muted));
251
- background: transparent;
252
- border: 1px solid var(--border, var(--face-line));
253
- border-radius: 5px;
254
- cursor: pointer;
255
- transition: all 0.2s ease;
256
- }
257
-
258
- .btn-tier:hover {
259
- color: var(--text-primary, var(--face-text));
260
- border-color: var(--card-accent, var(--face-accent));
261
- }
262
-
263
- .btn-tier[data-active="true"] {
264
- color: var(--face-dark);
265
- background: var(--card-accent, var(--face-accent));
266
- border-color: var(--card-accent, var(--face-accent));
267
- }
268
-
269
- .action-group {
270
- display: flex;
271
- align-items: center;
272
- gap: 8px;
273
- }
274
-
275
- .btn-run {
276
- min-height: 44px;
277
- padding: 8px 16px;
278
- font-family: var(--font-sans, sans-serif);
279
- font-size: 12px;
280
- font-weight: 700;
281
- color: var(--face-dark);
282
- background: var(--face-brand);
283
- border: none;
284
- border-radius: 5px;
285
- cursor: pointer;
286
- display: flex;
287
- align-items: center;
288
- gap: 6px;
289
- transition: background 0.2s ease;
290
- }
291
-
292
- .btn-run:hover {
293
- background: var(--face-brand-hover);
294
- }
295
-
296
- .btn-run:disabled {
297
- opacity: 0.6;
298
- cursor: not-allowed;
299
- }
300
-
301
- /* Gate Matrix Grid */
302
- .section-title {
303
- font-size: 12px;
304
- font-weight: 700;
305
- letter-spacing: 0.05em;
306
- text-transform: uppercase;
307
- color: var(--text-secondary, var(--face-muted));
308
- margin: 0 0 10px 0;
309
- }
310
-
311
- .gate-grid {
312
- display: grid;
313
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
314
- gap: 10px;
315
- margin-bottom: 18px;
316
- }
317
-
318
- .gate-card {
319
- background: rgba(30, 41, 59, 0.4);
320
- border: 1px solid var(--border, var(--face-line));
321
- border-radius: 6px;
322
- padding: 10px;
323
- display: flex;
324
- flex-direction: column;
325
- gap: 6px;
326
- }
327
-
328
- .gate-head {
329
- display: flex;
330
- align-items: center;
331
- justify-content: space-between;
332
- }
333
-
334
- .gate-name {
335
- font-family: var(--font-mono, 'JetBrains Mono', monospace);
336
- font-size: 11px;
337
- font-weight: 700;
338
- color: var(--text-primary, var(--face-text));
339
- }
340
-
341
- .gate-badge {
342
- font-size: 9px;
343
- font-weight: 700;
344
- padding: 2px 6px;
345
- border-radius: 4px;
346
- text-transform: uppercase;
347
- }
348
-
349
- .badge-passed {
350
- color: var(--face-ok);
351
- background: rgba(16, 185, 129, 0.15);
352
- }
353
-
354
- .badge-failed {
355
- color: var(--face-danger);
356
- background: rgba(239, 68, 68, 0.15);
357
- }
358
-
359
- .badge-skipped {
360
- color: var(--text-secondary, var(--face-muted));
361
- background: rgba(148, 163, 184, 0.1);
362
- }
363
-
364
- .gate-meta {
365
- display: flex;
366
- justify-content: space-between;
367
- font-size: 10px;
368
- color: var(--text-secondary, var(--face-muted));
369
- }
370
-
371
- /* Violation Browser */
372
- .filter-tabs {
373
- display: flex;
374
- align-items: center;
375
- gap: 8px;
376
- margin-bottom: 10px;
377
- }
378
-
379
- .filter-btn {
380
- min-height: 44px;
381
- padding: 6px 12px;
382
- font-size: 11px;
383
- font-weight: 600;
384
- color: var(--text-secondary, var(--face-muted));
385
- background: transparent;
386
- border: 1px solid var(--border, var(--face-line));
387
- border-radius: 5px;
388
- cursor: pointer;
389
- }
390
-
391
- .filter-btn[data-active="true"] {
392
- color: var(--text-primary, var(--face-text));
393
- background: rgba(56, 189, 248, 0.15);
394
- border-color: var(--card-accent, var(--face-accent));
395
- }
396
-
397
- .violations-box {
398
- border: 1px solid var(--border, var(--face-line));
399
- border-radius: 6px;
400
- background: rgba(15, 23, 42, 0.6);
401
- max-height: 240px;
402
- overflow-y: auto;
403
- }
404
-
405
- .violation-row {
406
- padding: 8px 12px;
407
- border-bottom: 1px solid rgba(51, 65, 85, 0.5);
408
- display: flex;
409
- flex-direction: column;
410
- gap: 4px;
411
- }
412
-
413
- .violation-row:last-child {
414
- border-bottom: none;
415
- }
416
-
417
- .violation-header {
418
- display: flex;
419
- align-items: center;
420
- gap: 8px;
421
- font-size: 11px;
422
- }
423
-
424
- .severity-tag {
425
- font-family: var(--font-mono, 'JetBrains Mono', monospace);
426
- font-size: 9px;
427
- font-weight: 700;
428
- padding: 2px 6px;
429
- border-radius: 4px;
430
- text-transform: uppercase;
431
- }
432
-
433
- .severity-error {
434
- color: var(--face-danger);
435
- background: rgba(239, 68, 68, 0.18);
436
- }
437
-
438
- .severity-warning {
439
- color: var(--face-warn);
440
- background: rgba(245, 158, 11, 0.18);
441
- }
442
-
443
- .violation-loc {
444
- font-family: var(--font-mono, 'JetBrains Mono', monospace);
445
- color: var(--card-accent, var(--face-accent));
446
- }
447
-
448
- .violation-msg {
449
- font-size: 11px;
450
- color: var(--text-primary, var(--face-text));
451
- line-height: 1.4;
452
- }
453
-
454
- .empty-violations {
455
- padding: 24px;
456
- text-align: center;
457
- font-size: 12px;
458
- color: var(--face-ok);
459
- }
460
-
461
- /* Footer Telemetry */
462
- .footer-bar {
463
- display: flex;
464
- justify-content: space-between;
465
- align-items: center;
466
- padding-top: 12px;
467
- margin-top: 14px;
468
- border-top: 1px solid var(--border, var(--face-line));
469
- font-size: 10px;
470
- color: var(--text-secondary, var(--face-muted));
471
- }
472
- </style>
473
-
474
- <div class="header">
475
- <div class="brand-group">
476
- <div class="title-meta">
477
- <h3 class="plugin-title">Code Quality Gates</h3>
478
- <p class="plugin-subtitle">Fail-closed deterministic repository verification · v0.2.2</p>
479
- </div>
480
- </div>
481
- <div class="verdict-chip ${rep ? (isClean ? 'verdict-clean' : 'verdict-failed') : 'verdict-pending'}">
482
- ${this.executing ? 'Checking...' : rep ? (isClean ? 'Clean · Pass' : `${errorCount} Errors · Failed`) : 'Pending Report'}
483
- </div>
484
- </div>
485
-
486
- <div class="controls-deck">
487
- <div class="tier-toggles">
488
- <button class="btn-tier" data-active="${tierName === 'fast'}" type="button" id="tier-fast">Fast</button>
489
- <button class="btn-tier" data-active="${tierName === 'full'}" type="button" id="tier-full">Full</button>
490
- <button class="btn-tier" data-active="${tierName === 'remote'}" type="button" id="tier-remote">Remote</button>
491
- </div>
492
- <div class="action-group">
493
- <button class="btn-run" type="button" id="btn-run" ${this.executing ? 'disabled' : ''}>
494
- ${this.executing ? 'Verifying...' : `Run ${tierName.toUpperCase()} Gate`}
495
- </button>
496
- </div>
497
- </div>
498
-
499
- <div class="section-title">Configured Gate Matrix</div>
500
- <div class="gate-grid">
501
- ${checks.length > 0 ? checks.map(c => `
502
- <div class="gate-card">
503
- <div class="gate-head">
504
- <span class="gate-name">${escapeHtml(c.name || c.id)}</span>
505
- <span class="gate-badge badge-${escapeHtml(c.status || 'passed')}">${escapeHtml(c.status || 'passed')}</span>
506
- </div>
507
- <div class="gate-meta">
508
- <span>Exit ${c.exit_code !== undefined ? c.exit_code : 0}</span>
509
- <span>${c.duration_ms ? `${c.duration_ms}ms` : DASH}</span>
510
- </div>
511
- </div>
512
- `).join('') : `
513
- <div class="gate-card">
514
- <div class="gate-head">
515
- <span class="gate-name">Syntax & Types</span>
516
- <span class="gate-badge badge-skipped">Pending</span>
517
- </div>
518
- <div class="gate-meta"><span>Exit ${DASH}</span><span>${DASH}</span></div>
519
- </div>
520
- <div class="gate-card">
521
- <div class="gate-head">
522
- <span class="gate-name">Unit Tests</span>
523
- <span class="gate-badge badge-skipped">Pending</span>
524
- </div>
525
- <div class="gate-meta"><span>Exit ${DASH}</span><span>${DASH}</span></div>
526
- </div>
527
- <div class="gate-card">
528
- <div class="gate-head">
529
- <span class="gate-name">Lint & Imports</span>
530
- <span class="gate-badge badge-skipped">Pending</span>
531
- </div>
532
- <div class="gate-meta"><span>Exit ${DASH}</span><span>${DASH}</span></div>
533
- </div>
534
- `}
535
- </div>
536
-
537
- <div class="section-title">Inspection Findings (${filteredFindings.length})</div>
538
- <div class="filter-tabs">
539
- <button class="filter-btn" data-active="${this.activeFilter === 'all'}" type="button" id="filter-all">
540
- All (${allFindings.length})
541
- </button>
542
- <button class="filter-btn" data-active="${this.activeFilter === 'errors'}" type="button" id="filter-errors">
543
- Errors (${errorCount})
544
- </button>
545
- <button class="filter-btn" data-active="${this.activeFilter === 'warnings'}" type="button" id="filter-warnings">
546
- Warnings (${warnCount})
547
- </button>
548
- </div>
549
-
550
- <div class="violations-box">
551
- ${filteredFindings.length > 0 ? filteredFindings.map(f => `
552
- <div class="violation-row">
553
- <div class="violation-header">
554
- <span class="severity-tag severity-${escapeHtml(f.severity || 'error')}">${escapeHtml(f.severity || 'error')}</span>
555
- <span class="violation-loc">${escapeHtml(f.file || 'unknown')}${f.line ? `:${f.line}` : ''}</span>
556
- ${f.rule_id ? `<span class="plugin-subtitle">[${escapeHtml(f.rule_id)}]</span>` : ''}
557
- </div>
558
- <div class="violation-msg">${escapeHtml(f.message || 'Verification failure detected')}</div>
559
- </div>
560
- `).join('') : `
561
- <div class="empty-violations">
562
- ${rep ? 'Zero violations detected. Repository passes clean.' : 'No active gate report found. Click Run Gate above.'}
563
- </div>
564
- `}
565
- </div>
566
-
567
- <div class="footer-bar">
568
- <span>Latest Run: ${timestamp}</span>
569
- <span>Tier: ${tierName.toUpperCase()}</span>
570
- </div>
571
- `;
572
-
573
- // Event listeners
574
- root.querySelector('#tier-fast')?.addEventListener('click', () => { this.selectedTier = 'fast'; this.render(); });
575
- root.querySelector('#tier-full')?.addEventListener('click', () => { this.selectedTier = 'full'; this.render(); });
576
- root.querySelector('#tier-remote')?.addEventListener('click', () => { this.selectedTier = 'remote'; this.render(); });
577
-
578
- root.querySelector('#btn-run')?.addEventListener('click', () => this.runTier(this.selectedTier));
579
-
580
- root.querySelector('#filter-all')?.addEventListener('click', () => this.setFilter('all'));
581
- root.querySelector('#filter-errors')?.addEventListener('click', () => this.setFilter('errors'));
582
- root.querySelector('#filter-warnings')?.addEventListener('click', () => this.setFilter('warnings'));
583
- }
584
- }
585
-
586
- if (!customElements.get('tr-code-quality-card')) {
587
- customElements.define('tr-code-quality-card', CodeQualityCard);
588
- }