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
@@ -0,0 +1,23 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ title: Remove a linked worktree
4
+ description: Review a registered linked worktree, confirm its target, and read the removal result.
5
+ timestamp: "2026-11-08T09:20:00Z"
6
+ plugin: git
7
+ id: remove-worktree
8
+ intents: [remove linked git worktree, clean up isolated checkout, review worktree removal, dirty worktree refused]
9
+ surfaces: [page]
10
+ operations: [worktree-remove]
11
+ data: ["worktree-remove:/ok", "worktree-remove:/removed"]
12
+ ---
13
+
14
+ <style>
15
+ .sentinel-remove { padding:var(--spacing-md); border-inline-start:3px solid var(--color-danger); background:var(--color-surface); }
16
+ .sentinel-remove h2 { margin-top:0; }
17
+ .sentinel-remove small { color:var(--color-muted); }
18
+ </style>
19
+ <section class="sentinel-remove">
20
+ <h2>Confirm the linked checkout</h2>
21
+ <p>Select the worktree by path. The Home checks Git’s removal receipt before refreshing the register.</p>
22
+ <small>Git refuses ordinary removal when the worktree contains local changes.</small>
23
+ </section>
@@ -0,0 +1,25 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ title: Git repository ledger
4
+ description: Read the active checkout, local upstream comparison, dirty files, conflicts, and stashes.
5
+ timestamp: "2026-11-08T09:20:00Z"
6
+ plugin: git
7
+ id: repository-ledger
8
+ intents: [audit git repository, check working tree, git branch and upstream, count unpushed commits, show conflicts and stashes]
9
+ surfaces: [page, right]
10
+ panel: repository
11
+ operations: [audit]
12
+ data: ["audit:/headState", "audit:/upstreamStatus", "audit:/isClean", "audit:/unpushedCommits", "audit:/conflictedFiles", "audit:/totalDirty", "audit:/stashCount", "audit:/timestamp"]
13
+ ---
14
+
15
+ <style>
16
+ .sentinel-ledger { padding:var(--spacing-md); border-inline-start:3px solid var(--color-accent); color:var(--color-text); background:var(--color-surface); }
17
+ .sentinel-ledger h2 { margin:.3rem 0; font:600 clamp(1.55rem,5vw,2.2rem) var(--typography-heading-font-family,Georgia,serif); }
18
+ .sentinel-ledger p { margin:0; }
19
+ .sentinel-ledger small { text-transform:uppercase; letter-spacing:.11em; color:var(--color-accent); }
20
+ </style>
21
+ <header class="sentinel-ledger">
22
+ <small>Git</small>
23
+ <h2>Read the current checkout</h2>
24
+ <p>Review repository state and its registered worktrees. Ahead and behind come from the local tracking ref.</p>
25
+ </header>
@@ -0,0 +1,22 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ title: Work not in the default branch
4
+ description: Find branches with commits the default branch lacks, worktrees with uncommitted changes and detached worktrees holding commits on no branch.
5
+ timestamp: "2026-11-12T21:30:00Z"
6
+ plugin: git
7
+ id: unmerged-work
8
+ intents: [find unmerged branches, find unfinished worktrees, check for work that never landed, see what is not merged into main]
9
+ surfaces: [page, right]
10
+ operations: [unmerged]
11
+ data: ["unmerged:/outstanding", "unmerged:/summary", "unmerged:/repositories/0/branches", "unmerged:/repositories/0/worktrees", "unmerged:/repositories/0/kept"]
12
+ ---
13
+
14
+ <style>
15
+ .sentinel-unmerged { padding:var(--spacing-md); border:1px solid var(--color-border); background:var(--color-surface); }
16
+ .sentinel-unmerged h2 { margin-top:0; }
17
+ .sentinel-unmerged b { color:var(--color-accent); }
18
+ </style>
19
+ <section class="sentinel-unmerged">
20
+ <h2>Land what is still outside the default branch</h2>
21
+ <p>Each branch shows its commits the default branch lacks and whether they are pushed. Each worktree shows its <b>uncommitted</b> files and any commits on no branch, which removing the worktree would lose. Merge or report every item before ending the work.</p>
22
+ </section>
@@ -0,0 +1,17 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ plugin: git
4
+ id: upstream-divergence
5
+ title: Check branch divergence before integration
6
+ description: Review upstream state and local ahead or behind counts before choosing a branch integration action.
7
+ timestamp: "2026-11-08T23:12:00Z"
8
+ intents: [check commits ahead and behind, inspect missing upstream, prepare branch integration]
9
+ surfaces: [page]
10
+ panel: repository
11
+ operations: [audit]
12
+ data: ["audit:/headState", "audit:/upstreamStatus", "audit:/unpushedCommits", "audit:/behindCommits"]
13
+ ---
14
+ <section>
15
+ <h2>Read branch divergence</h2>
16
+ <p>Check whether this checkout has an upstream. On a tracked branch, compare commits ahead and behind, then check the working tree before selecting an integration action.</p>
17
+ </section>
@@ -0,0 +1,17 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ plugin: git
4
+ id: worktree-conflict-triage
5
+ title: Triage conflicts in a linked checkout
6
+ description: Find unresolved conflicts and distinguish them from staged, unstaged and untracked work before opening a diff.
7
+ timestamp: "2026-11-08T23:12:00Z"
8
+ intents: [triage merge conflicts, compare staged and unstaged work during a conflict, inspect dirty worktree before cleanup]
9
+ surfaces: [page]
10
+ panel: repository
11
+ operations: [audit, diff]
12
+ data: ["audit:/conflictedFiles", "audit:/stagedFiles", "audit:/unstagedFiles", "audit:/untrackedFiles", "diff:/diffStat"]
13
+ ---
14
+ <section>
15
+ <h2>Separate conflicts from other local changes</h2>
16
+ <p>Read the conflict count first. Then open diff statistics for the relevant working or staged changes. Preserve the linked checkout until its local work is resolved.</p>
17
+ </section>
@@ -0,0 +1,22 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ title: Worktree compatibility commands
4
+ description: Use the owner compatibility command in the terminal to list, create, or remove linked worktrees.
5
+ timestamp: "2026-11-08T09:20:00Z"
6
+ plugin: git
7
+ id: worktree-terminal
8
+ intents: [git sentinel worktree command, worktree compatibility syntax, terminal git worktree list, worktree create remove alias]
9
+ surfaces: [page]
10
+ operations: [worktree]
11
+ data: ["worktree:/ok", "worktree:/worktrees/0/head", "worktree:/removed"]
12
+ ---
13
+
14
+ <style>
15
+ .sentinel-terminal { padding:var(--spacing-md); border:1px dashed var(--color-border); background:var(--color-surface); }
16
+ .sentinel-terminal h2 { margin-top:0; }
17
+ .sentinel-terminal code { color:var(--color-accent); overflow-wrap:anywhere; }
18
+ </style>
19
+ <section class="sentinel-terminal">
20
+ <h2>Use the compatibility command</h2>
21
+ <p><code>total-recall git worktree-list</code> reads the register. Select <code>create</code> or <code>remove</code> with the required path for an explicit change.</p>
22
+ </section>
@@ -0,0 +1,273 @@
1
+ const UPSTREAM = {
2
+ tracking: 'Tracking local upstream',
3
+ none: 'No upstream configured',
4
+ gone: 'Upstream missing',
5
+ detached: 'Detached HEAD',
6
+ unborn: 'No commits yet',
7
+ unknown: 'Upstream unknown',
8
+ error: 'Upstream check failed'
9
+ };
10
+ const AUDIT_COUNTS = {
11
+ unpushed: 'unpushedCommits', behind: 'behindCommits', conflicts: 'conflictedFiles',
12
+ staged: 'stagedFiles', unstaged: 'unstagedFiles', untracked: 'untrackedFiles',
13
+ dirty: 'totalDirty', stashes: 'stashCount'
14
+ };
15
+
16
+ function commandError(error) {
17
+ try {
18
+ const result = JSON.parse(error.message);
19
+ if (typeof result.error === 'string') return result.error;
20
+ } catch {}
21
+ return error?.message || 'The owner command failed.';
22
+ }
23
+
24
+ class GitHome extends HTMLElement {
25
+ connectedCallback() {
26
+ if (this.shadowRoot) return;
27
+ const root = this.attachShadow({ mode: 'open' });
28
+ root.innerHTML = `
29
+ <style>
30
+ :host {
31
+ display:block; padding:var(--spacing-md,16px); color:var(--color-text,CanvasText);
32
+ background:var(--color-background,Canvas); border:1px solid var(--color-border,currentColor);
33
+ border-radius:var(--radius-md,6px); font:14px/1.55 var(--typography-body-font-family,system-ui,sans-serif);
34
+ }
35
+ * { box-sizing:border-box; min-width:0; }
36
+ h2,h3,p,dl { margin:0; }
37
+ h2 { font:600 clamp(1.55rem,5vw,2.1rem)/1.15 var(--typography-heading-font-family,Georgia,serif); }
38
+ h3 { font-size:1.05rem; }
39
+ .kicker { color:var(--color-accent,currentColor); letter-spacing:.1em; text-transform:uppercase; }
40
+ section { margin-top:var(--spacing-md,16px); padding-top:12px; border-top:1px solid var(--color-border,currentColor); }
41
+ .bar,.actions { display:flex; align-items:center; flex-wrap:wrap; gap:8px 16px; }
42
+ .bar { justify-content:space-between; }
43
+ .metrics { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,7rem),1fr)); gap:8px; margin:10px 0; }
44
+ .metrics div { padding:8px; background:var(--color-surface,Canvas); border-radius:var(--radius-md,6px); }
45
+ dd { margin:0; font:600 1.05rem var(--typography-mono-font-family,ui-monospace,monospace); font-variant-numeric:tabular-nums; }
46
+ dt,.note { color:var(--color-muted,currentColor); }
47
+ #conflicts[data-alert],#unpushed[data-alert],.error { color:var(--color-danger,currentColor); }
48
+ #last-commit,#audit-time { overflow-wrap:anywhere; }
49
+ #worktrees { padding:0; list-style:none; margin:8px 0; }
50
+ #worktrees li {
51
+ border-bottom:1px solid var(--color-border,currentColor); padding:8px 0;
52
+ display:flex; flex-wrap:wrap; align-items:center; gap:8px; justify-content:space-between;
53
+ }
54
+ #worktrees code { display:block; overflow-wrap:anywhere; }
55
+ button,input,select {
56
+ min-height:44px; border:1px solid var(--color-border,currentColor); border-radius:var(--radius-md,6px);
57
+ padding:6px 10px; font:inherit; color:inherit; background:var(--color-background,Canvas);
58
+ }
59
+ button { cursor:pointer; }
60
+ button:disabled { opacity:.65; cursor:default; }
61
+ button:focus-visible,input:focus-visible,select:focus-visible {
62
+ outline:2px solid var(--color-accent,currentColor); outline-offset:3px;
63
+ }
64
+ label { display:grid; gap:4px; }
65
+ .fields { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,10rem),1fr)); gap:8px; margin:8px 0; }
66
+ fieldset { margin:12px 0 0; padding:12px; background:var(--color-surface,Canvas); border:1px solid var(--color-border,currentColor); }
67
+ #confirm-text { overflow-wrap:anywhere; margin-bottom:8px; }
68
+ pre { overflow:auto; max-height:16rem; white-space:pre-wrap; overflow-wrap:anywhere; }
69
+ </style>
70
+ <header class="bar">
71
+ <div><p class="kicker">Git</p><h2>Repository ledger</h2></div>
72
+ <button type="button" id="refresh">Refresh repository</button>
73
+ </header>
74
+ <section aria-labelledby="audit-heading">
75
+ <h3 id="audit-heading">Working tree audit</h3>
76
+ <p id="audit-state" role="status">Reading the repository…</p>
77
+ <dl class="metrics">
78
+ <div><dt>Unpushed</dt><dd id="unpushed">—</dd></div>
79
+ <div><dt>Behind</dt><dd id="behind">—</dd></div>
80
+ <div><dt>Conflicted</dt><dd id="conflicts">—</dd></div>
81
+ <div><dt>Staged</dt><dd id="staged">—</dd></div>
82
+ <div><dt>Unstaged</dt><dd id="unstaged">—</dd></div>
83
+ <div><dt>Untracked</dt><dd id="untracked">—</dd></div>
84
+ <div><dt>Dirty files</dt><dd id="dirty">—</dd></div>
85
+ <div><dt>Stashes</dt><dd id="stashes">—</dd></div>
86
+ </dl>
87
+ <p id="upstream" class="note"></p>
88
+ <p id="last-commit"></p>
89
+ <p id="audit-time" class="note"></p>
90
+ </section>
91
+ <section aria-labelledby="worktree-heading">
92
+ <h3 id="worktree-heading">Registered worktrees</h3>
93
+ <p id="worktree-state" role="status">Reading worktree registrations…</p>
94
+ <ul id="worktrees"></ul>
95
+ <div id="create" hidden>
96
+ <div class="fields">
97
+ <label>New worktree path<input id="path" required></label>
98
+ <label>Base ref<input id="base" placeholder="HEAD"></label>
99
+ </div>
100
+ <button type="button" id="plan-create">Review detached worktree</button>
101
+ </div>
102
+ <fieldset id="confirmation" hidden>
103
+ <legend id="confirm-title"></legend>
104
+ <p id="confirm-text"></p>
105
+ <div class="actions">
106
+ <button type="button" id="confirm"></button>
107
+ <button type="button" id="cancel">Cancel</button>
108
+ </div>
109
+ </fieldset>
110
+ <p id="action-status" role="status"></p>
111
+ </section>
112
+ <section id="changes" hidden aria-label="Diff statistics">
113
+ <button type="button" id="show-diff" aria-expanded="false" aria-controls="diff">Inspect changed files</button>
114
+ <div id="diff" hidden>
115
+ <div class="fields">
116
+ <label>Comparison<select id="diff-mode"><option value="working">Working tree</option><option value="staged">Staged changes</option></select></label>
117
+ <label>Base ref<input id="diff-base" placeholder="Default comparison"></label>
118
+ </div>
119
+ <button type="button" id="read-diff">Read diff stats</button>
120
+ <p id="diff-status" role="status"></p>
121
+ <pre id="diff-stat"></pre>
122
+ </div>
123
+ </section>`;
124
+
125
+ const field = id => root.getElementById(id);
126
+ const set = (id, text) => { field(id).textContent = text; };
127
+ const canRun = command => this.host?.operations?.includes(command);
128
+ const run = async (command, args = []) => {
129
+ if (!this.host?.run) throw new Error('The repository command runner is unavailable.');
130
+ return this.host.run(command, args);
131
+ };
132
+ let busy = false;
133
+ let pending;
134
+
135
+ field('create').hidden = !canRun('worktree-create');
136
+ field('changes').hidden = !canRun('diff');
137
+
138
+ const setBusy = value => {
139
+ busy = value;
140
+ for (const control of root.querySelectorAll('#refresh, #plan-create, #worktrees button')) control.disabled = value;
141
+ };
142
+
143
+ const ask = (command, args, target, base = '') => {
144
+ if (busy || !canRun(command)) return;
145
+ const creating = command === 'worktree-create';
146
+ pending = { command, args, trigger: root.activeElement };
147
+ set('confirm-title', creating ? 'Create a detached worktree?' : 'Remove this linked worktree?');
148
+ set('confirm-text', creating ? `${target} from ${base}` : `${target}. Git will refuse removal if it contains local changes.`);
149
+ set('confirm', creating ? 'Confirm creation' : 'Confirm removal');
150
+ field('confirmation').hidden = false;
151
+ field('confirm').focus();
152
+ };
153
+
154
+ const paintAudit = report => {
155
+ for (const [id, key] of Object.entries(AUDIT_COUNTS)) {
156
+ const value = report?.[key];
157
+ set(id, Number.isSafeInteger(value) ? String(value) : '—');
158
+ field(id).toggleAttribute('data-alert', value > 0);
159
+ }
160
+ if (!report) {
161
+ set('audit-state', 'Repository audit unavailable.');
162
+ for (const id of ['upstream', 'last-commit', 'audit-time']) set(id, '');
163
+ return;
164
+ }
165
+ const branch = report.branch || UPSTREAM[report.headState] || 'Branch unknown';
166
+ const state = report.isClean === true ? 'Clean working tree' : report.isClean === false ? 'Changes in working tree' : 'Working tree state unknown';
167
+ const incomplete = Array.isArray(report.errors) && report.errors.length ? ' Some audit checks failed.' : '';
168
+ set('audit-state', `${branch} · ${state}.${incomplete}`);
169
+ const upstream = UPSTREAM[report.upstreamStatus] || 'Upstream unknown';
170
+ set('upstream', report.upstream ? `${upstream} ${report.upstream}.` : upstream);
171
+ set('last-commit', report.lastCommit || 'Latest commit unavailable.');
172
+ set('audit-time', report.timestamp ? `Observed ${report.timestamp}` : '');
173
+ };
174
+
175
+ const paintWorktrees = result => {
176
+ field('worktrees').replaceChildren();
177
+ if (!result) { set('worktree-state', 'Worktree inventory unavailable.'); return; }
178
+ set('worktree-state', `${result.worktrees.length} registered.`);
179
+ result.worktrees.forEach((tree, index) => {
180
+ const row = document.createElement('li');
181
+ const label = document.createElement('div');
182
+ const name = document.createElement('strong');
183
+ const path = document.createElement('code');
184
+ const current = tree.path === result.current;
185
+ const branch = tree.branch?.replace(/^refs\/heads\//, '') || (tree.detached ? 'Detached' : 'Branch unknown');
186
+ const markers = [index === 0 && 'Main', current && 'Current', tree.locked && 'Locked', tree.prunable && 'Prunable'].filter(Boolean);
187
+ name.textContent = [branch, ...markers, tree.head?.slice(0, 12)].filter(Boolean).join(' · ');
188
+ path.textContent = tree.path;
189
+ label.append(name, path);
190
+ row.append(label);
191
+ if (canRun('worktree-remove') && index > 0 && !current && !tree.locked && !tree.prunable) {
192
+ const remove = document.createElement('button');
193
+ remove.type = 'button';
194
+ remove.textContent = 'Review removal';
195
+ remove.setAttribute('aria-label', `Review removal of ${tree.path}`);
196
+ remove.addEventListener('click', () => ask('worktree-remove', ['--', tree.path], tree.path));
197
+ row.append(remove);
198
+ }
199
+ field('worktrees').append(row);
200
+ });
201
+ };
202
+
203
+ const refresh = async () => {
204
+ if (busy) return;
205
+ pending = undefined;
206
+ field('confirmation').hidden = true;
207
+ setBusy(true);
208
+ set('audit-state', 'Reading the repository…');
209
+ set('worktree-state', 'Reading worktree registrations…');
210
+ try {
211
+ await Promise.all([
212
+ run('audit').then(result => paintAudit(typeof result?.headState === 'string' ? result : null), () => paintAudit(null)),
213
+ run('worktree-list').then(result => paintWorktrees(result?.ok === true && Array.isArray(result.worktrees) ? result : null), () => paintWorktrees(null))
214
+ ]);
215
+ } finally { setBusy(false); }
216
+ };
217
+
218
+ field('refresh').addEventListener('click', () => void refresh());
219
+ field('plan-create').addEventListener('click', () => {
220
+ const target = field('path').value;
221
+ if (!target.trim()) return;
222
+ const base = field('base').value.trim() || 'HEAD';
223
+ ask('worktree-create', ['--base', base, '--', target], target, base);
224
+ });
225
+ field('cancel').addEventListener('click', () => {
226
+ const trigger = pending?.trigger;
227
+ pending = undefined;
228
+ field('confirmation').hidden = true;
229
+ trigger?.focus();
230
+ });
231
+ field('confirm').addEventListener('click', async () => {
232
+ if (busy || !pending || !canRun(pending.command)) return;
233
+ const { command, args } = pending;
234
+ pending = undefined;
235
+ field('confirmation').hidden = true;
236
+ setBusy(true);
237
+ set('action-status', 'Running the confirmed worktree action…');
238
+ try {
239
+ const result = await run(command, args);
240
+ if (result?.ok !== true) throw new Error('Git did not confirm the requested worktree change.');
241
+ set('action-status', result.removed ? 'Linked worktree removed.' : 'Detached worktree created.');
242
+ if (command === 'worktree-create') {
243
+ field('path').value = '';
244
+ field('base').value = '';
245
+ }
246
+ } catch (error) { set('action-status', commandError(error)); }
247
+ finally { setBusy(false); await refresh(); field('refresh').focus(); }
248
+ });
249
+ field('show-diff').addEventListener('click', event => {
250
+ field('diff').hidden = !field('diff').hidden;
251
+ event.currentTarget.setAttribute('aria-expanded', String(!field('diff').hidden));
252
+ });
253
+ field('read-diff').addEventListener('click', async () => {
254
+ if (!canRun('diff') || field('read-diff').disabled) return;
255
+ const base = field('diff-base').value.trim();
256
+ const args = [...(field('diff-mode').value === 'staged' ? ['--cached'] : []), ...(base ? ['--base', base] : [])];
257
+ field('read-diff').disabled = true;
258
+ set('diff-status', 'Reading diff stats…');
259
+ set('diff-stat', '');
260
+ try {
261
+ const result = await run('diff', args);
262
+ if (typeof result?.diffStat !== 'string') throw new Error('Diff statistics unavailable.');
263
+ const outcome = result.diffStat ? 'Comparison complete.' : 'The selected comparison has no changes.';
264
+ set('diff-status', result.timestamp ? `${outcome} Observed ${result.timestamp}.` : outcome);
265
+ set('diff-stat', result.diffStat);
266
+ } catch (error) { set('diff-status', commandError(error)); }
267
+ finally { field('read-diff').disabled = false; }
268
+ });
269
+ void refresh();
270
+ }
271
+ }
272
+
273
+ if (!customElements.get('tr-git-home')) customElements.define('tr-git-home', GitHome);
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: Mesh Network Atlas
3
+ description: A pine and slate field atlas for reading a private fleet.
4
+ colors:
5
+ background: "#14221e"
6
+ surface: "#1f322b"
7
+ text: "#edf8f0"
8
+ border: "#617e70"
9
+ muted: "#bfdbcc"
10
+ accent: "#bbefd2"
11
+ ok: "#a3e8b9"
12
+ warn: "#ffdf99"
13
+ danger: "#ffbcb2"
14
+ typography:
15
+ body:
16
+ fontFamily: "system-ui, sans-serif"
17
+ heading:
18
+ fontFamily: "Georgia, serif"
19
+ mono:
20
+ fontFamily: "ui-monospace, monospace"
21
+ spacing:
22
+ md: 16px
23
+ rounded:
24
+ md: 8px
25
+ ---
26
+
27
+ # Mesh Network Atlas
28
+
29
+ Use the tone of a field atlas. The ink surface holds a persistent control strip and a quiet roster of machines. Use a serif title, plain sans-serif labels, and monospace for a verified address, command, or timing. Use warm warning colors only when an observation needs attention.
30
+
31
+ In Machines, let the roster and reachability ladder share a row at wide widths and stack in that order in a drawer. The ladder keeps control membership, path, login, and execution distinct. State words accompany any color or border changes. Separate recorded facts and their timestamps from current observations. A sleeping or offline device is different from a peer whose path failed a probe.
32
+
33
+ Flows, Placement, Boundary, and Join use the same map vocabulary. Give each source its own timestamp and unavailable state. The control strip distinguishes credential presence in Auth from a verified control API. Request fleet execution explicitly. The enrollment workflow hands key issuance to an interactive terminal.
34
+
35
+ Keep targets at least 44 pixels tall. Preserve keyboard focus on refresh, use a visible outline, and announce read failures through the status region. Layout changes need no animation. The [platform map](docs/MESH_PLATFORM.md) records what the current owner commands can observe.
@@ -24,25 +24,24 @@ Peers install it with `npx total-recall plugin install peer:<this-node>/mesh`.
24
24
  ## Features
25
25
 
26
26
  - **Identifier**: `mesh`
27
- - **Version**: 0.1.0
28
27
  - **SSSS Category**: `mesh-nodes`
29
28
  - **CLI Command**: `npx total-recall mesh`
30
- - **UI**: `ui/card.js` is the declared card component and uses `ui/DESIGN.md` tokens.
29
+ - **UI**: native Mesh Home, [owner design](DESIGN.md), and SSSS blocks under `ui/chunks/`.
31
30
  - **API key**: paste it in the plugin UI (`save-token` event) or pipe it to `npx total-recall mesh token set --stdin`; stored as `HEADSCALE_API_KEY` in the secrets store
32
31
 
33
32
  ## Install and vendor
34
33
 
35
- Install the full integration with `total-recall plugin install <git URL of this repository>`. The declared standalone artifact is the control and SSH helper capability under `capability/`. The manifest lists its exports and [the capability entry](capability/index.mjs) exposes them. A consumer integration guide and independent proof remain open. The Total Recall card, host routes and auth/grant integration belong to the installed plugin.
34
+ Install the full integration with `total-recall plugin install <git URL of this repository>`. The declared standalone artifact is the control and SSH helper capability under `capability/`. The manifest lists its exports and [the capability entry](capability/index.mjs) exposes them. A consumer integration guide and independent proof remain open. Mesh Home, host routes, and Auth and grant integration belong to the installed plugin.
36
35
 
37
36
  The [Mesh project tracker](docs/projects/in-progress/MESH_CARD/MESH_CARD_PROJECT_TRACKER.md) separates runtime transport and authorization work from card checks.
38
37
 
39
38
  ## Mesh screens and integration declarations
40
39
 
41
- The card defines Machines, Flows, Placement, Boundary and Join. Machines separates control membership, path checks, recorded login and actual execution. Hardware cells retain their measurement dates; failed or untested runtime probes remain unknown. Placement filters confirmed capabilities and includes the integration matrix declared in `plugin.json.mesh`.
40
+ Mesh Home defines Machines, Flows, Placement, Boundary, and Join. Machines separates control membership, path checks, recorded login, and actual execution. Hardware cells retain their measurement dates. Failed or untested runtime probes remain unknown. Select **Verify fleet execution** to run `doctor`. Placement filters confirmed capabilities and includes the integration matrix declared in `plugin.json.mesh`.
42
41
 
43
42
  `total-recall mesh view <machines|flows|placement|boundary|join> --json` reads fixed owner commands. Each source carries its command, attempt time and either data or an explicit error. `mesh.provides` references declared operations/runtime modules; `mesh.integrations` identifies each owner and the meaning of its evidence; `mesh.endpoints` identifies served peer routes. These are declarations, not primitive grants or proof every provider action works. Read-only views never perform enrollment, policy changes, grant edits, deployments or secret transfers.
44
43
 
45
- The dashboard supplies frozen `host.operations`. Read-only cards show CLI handoffs for login administration and re-enrollment. A writable host may expose those declared actions; re-enrollment then requires target-specific confirmation. Enrollment keys never enter the card.
44
+ The dashboard supplies frozen `host.operations`. A read-only Home shows CLI handoffs for login administration and re-enrollment. A writable host can expose those declared actions with target-specific confirmation for re-enrollment. Enrollment key issuance stays in the interactive terminal. `mesh token-status --json` reports credential presence from Auth.
46
45
 
47
46
  Auth's `host-secrets-store` runtime supplies the single host-store selector for control credentials and mesh-sync authentication. Project `AGENT_DIR`/`TR_BRAIN` cannot divert these reads. Native SSSS audit contention is serialized by the generic host; errors still fail closed. The corresponding source runtime must be installed; missing modules never select a fallback implementation.
48
47
 
@@ -46,15 +46,21 @@ export async function run(argv = []) {
46
46
  if (!result.success) process.exitCode = 1;
47
47
  return;
48
48
  }
49
+ if (sub === 'token-status' || (sub === 'token' && (!args[1] || args[1] === 'status'))) {
50
+ if (sub === 'token-status' && args.slice(1).some(arg => arg !== '--json')) {
51
+ throw new Error('token-status accepts only --json');
52
+ }
53
+ const meta = await findHeadscaleKeyMeta(brainDir);
54
+ const present = Boolean(meta?.set);
55
+ console.log(JSON.stringify(sub === 'token-status' ? { present } : { present, secretKey: 'HEADSCALE_API_KEY' }));
56
+ return;
57
+ }
49
58
  if (sub === 'token') {
50
59
  if (args[1] === 'set' && args.includes('--stdin')) {
51
60
  const chunks = []; for await (const chunk of process.stdin) chunks.push(chunk);
52
61
  const config = JSON.parse(process.env.TR_PLUGIN_CONFIG || '{}');
53
62
  const at = args.indexOf('--url'); if (at >= 0) config.controlUrl = args[at + 1];
54
63
  console.log(JSON.stringify(await saveCredential({ key: 'HEADSCALE_API_KEY', value: Buffer.concat(chunks).toString('utf8').trim(), configuration: config, brainDir: process.env.TR_SECRETS_BRAIN || brainDir })));
55
- } else if (!args[1] || args[1] === 'status') {
56
- const meta = await findHeadscaleKeyMeta(brainDir);
57
- console.log(JSON.stringify({ present: !!meta?.set, secretKey: 'HEADSCALE_API_KEY' }));
58
64
  } else throw new Error('token <status|set --stdin [--url URL]>');
59
65
  return;
60
66
  }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "tr-plugin-mesh",
3
- "version": "0.2.9",
3
+ "version": "0.3.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "tr-plugin-mesh",
9
- "version": "0.2.9",
9
+ "version": "0.3.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@gregiteen/ssss-cli": "0.14.5",
@@ -15,7 +15,7 @@
15
15
  "devDependencies": {
16
16
  "jsdom": "^29.1.1",
17
17
  "supertest": "^7.3.1",
18
- "total-recall-brain": "3.43.3",
18
+ "total-recall-brain": "3.45.0",
19
19
  "vitest": "^4.1.12"
20
20
  }
21
21
  },
@@ -7177,9 +7177,9 @@
7177
7177
  }
7178
7178
  },
7179
7179
  "node_modules/total-recall-brain": {
7180
- "version": "3.43.3",
7181
- "resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.43.3.tgz",
7182
- "integrity": "sha512-yjfPN/BQxEEa+iodyFXQov/6fRt1pZg/7RcmgsbpALwBt6Ki3JJjT3tzArBC7NxHQmXgGYyKnCYId6xe/W2rPg==",
7180
+ "version": "3.45.0",
7181
+ "resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.45.0.tgz",
7182
+ "integrity": "sha512-HDYfROazZbsLHQsFPnlBcSpe1HL1QEi7JG8x/eNRUI06RxVQsZWl8LwBo2lTWjWRDrKmCy7BUmSXQDuWF3lrEw==",
7183
7183
  "dev": true,
7184
7184
  "license": "MIT",
7185
7185
  "workspaces": [
@@ -7187,7 +7187,7 @@
7187
7187
  ],
7188
7188
  "dependencies": {
7189
7189
  "@simplewebauthn/server": "^13.3.2",
7190
- "@ssss/cli": "npm:@gregiteen/ssss-cli@0.14.4",
7190
+ "@ssss/cli": "npm:@gregiteen/ssss-cli@0.14.5",
7191
7191
  "bcrypt": "^6.0.0",
7192
7192
  "better-sqlite3": "^12.11.1",
7193
7193
  "cookie-parser": "^1.4.7",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tr-plugin-mesh",
3
- "version": "0.2.9",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "description": "Headscale and Tailscale SSH control-server mesh administration and node discovery",
6
6
  "scripts": {
@@ -15,6 +15,7 @@
15
15
  "files": [
16
16
  "cli.mjs",
17
17
  "plugin.json",
18
+ "DESIGN.md",
18
19
  "README.md",
19
20
  "LICENSE",
20
21
  "ui/",