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,36 @@
1
+ {
2
+ "name": "tr-plugin-automations",
3
+ "version": "1.2.0",
4
+ "type": "module",
5
+ "description": "Scheduled plugin task runner plus automation sources, triggers, observed outcomes and coverage across the Total Recall mesh.",
6
+ "scripts": {
7
+ "test": "vitest run",
8
+ "ssss": "ssss"
9
+ },
10
+ "license": "MIT",
11
+ "files": [
12
+ "cli.mjs",
13
+ "plugin.json",
14
+ "README.md",
15
+ "LICENSE",
16
+ "inventory.mjs",
17
+ "adapters.mjs",
18
+ "scheduler.mjs",
19
+ "cron.mjs",
20
+ "capability/",
21
+ "BRICK.md",
22
+ "DESIGN.md",
23
+ "ui/home.js",
24
+ "ui/automations.js",
25
+ "ui/chunks/"
26
+ ],
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "dependencies": {
31
+ "@gregiteen/ssss-cli": "0.14.5"
32
+ },
33
+ "overrides": {
34
+ "@ssss/cli": "npm:@gregiteen/ssss-cli@0.14.5"
35
+ }
36
+ }
@@ -0,0 +1,151 @@
1
+ {
2
+ "$schema": "https://github.com/gregiteen/total-recall/blob/main/metadata.plugin.schema.json",
3
+ "id": "automations",
4
+ "name": "Automations",
5
+ "version": "1.2.0",
6
+ "description": "Run scheduled plugin tasks and inspect automation sources, triggers, observed outcomes and coverage across the mesh.",
7
+ "author": "Total Recall",
8
+ "license": "MIT",
9
+ "reuse": {
10
+ "commands": ["total-recall mesh nodes"],
11
+ "owned": "Collects automation sources, triggers, outcomes and node coverage, and delegates confirmed local task cancellation to its owner."
12
+ },
13
+ "use_cases": [
14
+ "automation",
15
+ "monitoring"
16
+ ],
17
+ "gate": {
18
+ "tasks": ["List scheduled tasks and automations across the mesh", "Check an automation's real outcome", "Cancel a pending local task"],
19
+ "owned_commands": [
20
+ { "pattern": "(crontab\\s+-l\\b|launchctl\\s+list\\b)", "use": "total-recall automations list --json" }
21
+ ]
22
+ },
23
+ "cli": {
24
+ "answers_help": true,
25
+ "command": "automations",
26
+ "handler": "./cli.mjs",
27
+ "subcommands": [
28
+ {
29
+ "name": "list",
30
+ "description": "List automations and source coverage across known nodes",
31
+ "timeout_ms": 25000,
32
+ "effect": "read",
33
+ "output": "json",
34
+ "args": []
35
+ },
36
+ {
37
+ "name": "status",
38
+ "description": "Report observed automation states and source coverage",
39
+ "timeout_ms": 25000,
40
+ "effect": "read",
41
+ "output": "json",
42
+ "args": []
43
+ },
44
+ {
45
+ "name": "show",
46
+ "description": "Inspect one automation by its stable id",
47
+ "timeout_ms": 25000,
48
+ "effect": "read",
49
+ "output": "json",
50
+ "args": [
51
+ { "name": "receipt", "flag": "--receipt", "type": "boolean", "label": "Local terminal failure receipt" }
52
+ ]
53
+ },
54
+ {
55
+ "name": "dream",
56
+ "description": "Run dream, including decay, for every brain on this node",
57
+ "timeout_ms": 600000,
58
+ "effect": "write",
59
+ "output": "json",
60
+ "args": []
61
+ },
62
+ {
63
+ "name": "cancel",
64
+ "description": "Cancel one pending local durable task through its owner",
65
+ "effect": "write",
66
+ "output": "json",
67
+ "args": []
68
+ }
69
+ ]
70
+ },
71
+ "tasks": [
72
+ {
73
+ "intent": "Dream every brain on this node",
74
+ "schedule": "40 3 * * *",
75
+ "command": "dream --all-brains",
76
+ "placement": "per-node"
77
+ }
78
+ ],
79
+ "runtime": {
80
+ "modules": {
81
+ "scheduler": "scheduler.mjs"
82
+ },
83
+ "daemon": ["scheduler"]
84
+ },
85
+ "ui": {
86
+ "design_tokens": "DESIGN.md",
87
+ "home": "automations",
88
+ "elements": [
89
+ {
90
+ "id": "automations",
91
+ "kind": "panel",
92
+ "tag": "tr-automations",
93
+ "module": "ui/home.js",
94
+ "description": "Live automation inventory with per-source node coverage",
95
+ "events": [],
96
+ "tokens": [
97
+ "color-text",
98
+ "color-text-secondary",
99
+ "color-surface",
100
+ "color-border",
101
+ "color-success",
102
+ "color-error",
103
+ "spacing-md",
104
+ "radius-md"
105
+ ],
106
+ "optional_tokens": []
107
+ }
108
+ ]
109
+ },
110
+ "auth": {
111
+ "plugin": "auth",
112
+ "methods": [
113
+ "passkey",
114
+ "google-oauth2"
115
+ ],
116
+ "session_verification": true
117
+ },
118
+ "deploy": {
119
+ "targets": [
120
+ "ssss-app",
121
+ "nextjs",
122
+ "react",
123
+ "flask"
124
+ ],
125
+ "required_ssss_version": ">=0.9.3",
126
+ "access_grants": [
127
+ "auth:session:verify",
128
+ "ssss:vault:read",
129
+ "ssss:vault:write",
130
+ "ssss:events:append"
131
+ ]
132
+ },
133
+ "branding": {
134
+ "name": "Automations",
135
+ "color": "#f2bd63",
136
+ "badge": "Source coverage",
137
+ "font": "space-grotesk"
138
+ },
139
+ "status": {
140
+ "command": "status",
141
+ "refresh_seconds": 300
142
+ },
143
+ "capability": {
144
+ "entry": "capability/index.mjs",
145
+ "exports": ["collectSources"]
146
+ },
147
+ "distribution": {
148
+ "tier": "official",
149
+ "license": "open"
150
+ }
151
+ }
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Scheduled plugin tasks.
3
+ *
4
+ * A manifest task `{ intent, schedule: "<5-field cron>", command }` runs the
5
+ * plugin's own CLI on that schedule, out of process. `command` is a subcommand
6
+ * followed by its arguments ("cleanup --auto --json"). Tasks are per node by
7
+ * default; selected-node tasks run only on the node named in
8
+ * plugin_record.task_nodes[command].
9
+ *
10
+ * Scheduling runs against the global brain (the home installation), so run
11
+ * records and plugin.task_run events land where `automations list` reads
12
+ * them, whatever directory the daemon was started from.
13
+ *
14
+ * The last minute-slot each command ran in is kept in the plugin_record, so a
15
+ * restart neither repeats a slot nor loses one: when the daemon was busy or
16
+ * down, the most recent matching slot since the last run (within a day) runs
17
+ * once. A task never runs just because it was installed: the first run is the
18
+ * first matching slot after the scheduler first sees it.
19
+ *
20
+ * The daemon starts this module through the plugin's `runtime.daemon`
21
+ * declaration; Total Recall core holds no scheduler of its own.
22
+ */
23
+ import os from 'node:os';
24
+ import path from 'node:path';
25
+ import { pathToFileURL } from 'node:url';
26
+ import { parseCron, cronMatches } from './cron.mjs';
27
+
28
+ export { parseCron, cronMatches } from './cron.mjs';
29
+
30
+ const DEFAULT_TIMEOUT_MS = 60_000;
31
+ const MAX_CATCHUP_MINUTES = 24 * 60;
32
+ const TAIL_BYTES = 2000;
33
+ const pad = (n) => String(n).padStart(2, '0');
34
+
35
+ /** Core primitives the scheduler uses, loaded from the running Total Recall package. */
36
+ export async function loadCore(packageRoot = process.env.TR_PACKAGE_ROOT) {
37
+ if (!packageRoot) throw new Error('TR_PACKAGE_ROOT is not set; the scheduler runs inside the Total Recall daemon');
38
+ const load = (name) => import(pathToFileURL(path.join(packageRoot, 'src', 'core', `${name}.mjs`)).href);
39
+ const [loader, store, state, runner, events, log, mesh] = await Promise.all([
40
+ load('plugin-loader'), load('plugin-store'), load('plugin-state'), load('plugin-runner'),
41
+ load('ssss-operation-service'), load('logger'), load('mesh'),
42
+ ]);
43
+ return {
44
+ discoverPlugins: loader.discoverPlugins,
45
+ vaultForPluginsDir: loader.vaultForPluginsDir,
46
+ readPluginRecord: store.readPluginRecord,
47
+ patchPluginRecord: store.patchPluginRecord,
48
+ ensurePluginRecord: store.ensurePluginRecord,
49
+ pluginExecutionEnabled: state.pluginExecutionEnabled,
50
+ runPluginCommand: runner.runPluginCommand,
51
+ appendVfsEvent: events.appendVfsEvent,
52
+ logger: log.logger,
53
+ getMeshSelf: mesh.getMeshSelf,
54
+ meshNodeKey: mesh.meshNodeKey,
55
+ };
56
+ }
57
+
58
+ /** Split a manifest task command into its subcommand and arguments. */
59
+ export function splitTaskCommand(command) {
60
+ const [subcommand = '', ...args] = String(command || '').trim().split(/\s+/).filter(Boolean);
61
+ return { subcommand, args };
62
+ }
63
+
64
+ /** Task timeout: the task's own, else the subcommand's declared one, else 60 s. */
65
+ export function taskTimeoutMs(task, manifest) {
66
+ if (Number.isInteger(task.timeout_ms)) return task.timeout_ms;
67
+ const { subcommand } = splitTaskCommand(task.command);
68
+ const declared = manifest?.cli?.subcommands?.find((s) => s.name === subcommand);
69
+ const value = declared?.timeout_ms ?? declared?.timeoutMs;
70
+ return Number.isInteger(value) ? value : DEFAULT_TIMEOUT_MS;
71
+ }
72
+
73
+ /** A selected-node task stays idle until this node's plugin record selects it. */
74
+ export function taskRunsOnNode(task, record, self, meshNodeKey = (v) => String(v).toLowerCase()) {
75
+ if (task.placement !== 'selected-node') return true;
76
+ const selected = String(record?.task_nodes?.[task.command] || '').trim();
77
+ if (!selected || !self?.hostname) return false;
78
+ return selected === self.ip || meshNodeKey(selected) === meshNodeKey(self.hostname);
79
+ }
80
+
81
+ /** Local minute-slot key, e.g. 2026-09-22T14:05. */
82
+ export function minuteSlot(date) {
83
+ return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`;
84
+ }
85
+
86
+ function slotToDate(slot) {
87
+ const m = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})$/.exec(String(slot || ''));
88
+ return m ? new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]), Number(m[4]), Number(m[5])) : null;
89
+ }
90
+
91
+ /** The most recent slot matching `cron` in (lastSlot, now], or null. */
92
+ export function latestDueSlot(cron, lastSlot, now = new Date()) {
93
+ const floorNow = new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes());
94
+ const last = slotToDate(lastSlot);
95
+ for (let i = 0; i < MAX_CATCHUP_MINUTES; i++) {
96
+ const candidate = new Date(floorNow.getTime() - i * 60_000);
97
+ if (last && candidate <= last) return null;
98
+ if (cronMatches(cron, candidate)) return minuteSlot(candidate);
99
+ }
100
+ return null;
101
+ }
102
+
103
+ /** Last non-empty lines of a run's output, bounded for logs and alerts. */
104
+ export function outputTail(output, maxChars = 400) {
105
+ const lines = String(output || '').trim().split('\n').map((l) => l.trim()).filter(Boolean);
106
+ const tail = lines.slice(-3).join(' | ');
107
+ return tail.length > maxChars ? tail.slice(-maxChars) : tail;
108
+ }
109
+
110
+ /** Ask the operator-alerts owner to report a failed run, once per task per day. */
111
+ async function alertFailure(core, { plugin, command, slot, result, projectRoot }) {
112
+ const owner = core.discoverPlugins(projectRoot).find((p) => p.id === 'operator-alerts' && p.valid);
113
+ if (!owner) return { sent: false, error: 'operator-alerts is not installed' };
114
+ const reason = result.timedOut ? 'timed out' : `exit ${result.exitCode}`;
115
+ const tail = outputTail(result.output) || 'no output';
116
+ const args = [
117
+ '--title', `Scheduled task failed: ${plugin.id} ${command}`,
118
+ '--message', `${plugin.id} "${command}" (slot ${slot}) failed: ${reason}. ${tail}`,
119
+ '--event-id', `plugin-task-${plugin.id}-${command.replace(/[^a-z0-9]+/gi, '-')}-${slot.slice(0, 10)}`,
120
+ ];
121
+ try {
122
+ const sent = await core.runPluginCommand(owner, { subcommand: 'send', args, cwd: projectRoot, timeoutMs: 30_000 });
123
+ return { sent: sent.ok, error: sent.ok ? null : outputTail(sent.output) };
124
+ } catch (err) {
125
+ return { sent: false, error: err.message };
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Run every task that is due. Tasks run sequentially so a slow plugin cannot
131
+ * multiply into concurrent processes on a constrained host.
132
+ * @param {{ core: object, projectRoot?: string, now?: Date, selfNode?: object, alert?: Function }} options
133
+ */
134
+ export async function runDuePluginTasks(options) {
135
+ const { core, projectRoot = os.homedir(), now = new Date() } = options;
136
+ const alert = options.alert || ((info) => alertFailure(core, info));
137
+ const selfNode = options.selfNode === undefined ? core.getMeshSelf() : options.selfNode;
138
+ const results = [];
139
+
140
+ for (const plugin of core.discoverPlugins(projectRoot)) {
141
+ if (!plugin.valid || !Array.isArray(plugin.manifest.tasks) || plugin.manifest.tasks.length === 0) continue;
142
+
143
+ let record = core.readPluginRecord(plugin);
144
+ if (!record) record = await core.ensurePluginRecord(plugin);
145
+ if (!core.pluginExecutionEnabled(plugin, { projectRoot })) continue;
146
+ const runs = { ...(record?.task_runs || {}) };
147
+ let changed = false;
148
+
149
+ for (const task of plugin.manifest.tasks) {
150
+ if (!taskRunsOnNode(task, record, selfNode, core.meshNodeKey)) continue;
151
+ let cron;
152
+ try {
153
+ cron = parseCron(task.schedule);
154
+ } catch (err) {
155
+ core.logger.warn('plugin-tasks', `Skipping ${plugin.id}:${task.command} — ${err.message}`);
156
+ continue;
157
+ }
158
+
159
+ if (!runs[task.command]) {
160
+ // First sighting: mark the present so the first run is the next real slot.
161
+ runs[task.command] = minuteSlot(now);
162
+ changed = true;
163
+ continue;
164
+ }
165
+
166
+ const slot = latestDueSlot(cron, runs[task.command], now);
167
+ if (!slot) continue;
168
+
169
+ const { subcommand, args } = splitTaskCommand(task.command);
170
+ const result = await core.runPluginCommand(plugin, { subcommand, args, cwd: projectRoot, timeoutMs: taskTimeoutMs(task, plugin.manifest) })
171
+ .catch((err) => ({ ok: false, exitCode: null, output: err.message, durationMs: 0, timedOut: false }));
172
+ runs[task.command] = slot;
173
+ changed = true;
174
+ const entry = { plugin: plugin.id, command: task.command, slot, ok: result.ok, exitCode: result.exitCode, timedOut: !!result.timedOut, tail: result.ok ? '' : outputTail(result.output) };
175
+ if (!result.ok) entry.alert = await alert({ plugin, command: task.command, slot, result, projectRoot });
176
+ results.push(entry);
177
+
178
+ try {
179
+ await core.appendVfsEvent(
180
+ `plugins/${plugin.id}/task-${Date.now()}`,
181
+ {
182
+ kind: 'plugin.task_run',
183
+ plugin_id: plugin.id,
184
+ command: task.command,
185
+ intent: task.intent,
186
+ slot,
187
+ ok: result.ok,
188
+ exit_code: result.exitCode,
189
+ timed_out: !!result.timedOut,
190
+ duration_ms: result.durationMs,
191
+ output_tail: String(result.output || '').slice(-TAIL_BYTES),
192
+ },
193
+ { actorRole: 'system', intent: 'Record plugin task run', vaultRoot: core.vaultForPluginsDir(plugin.pluginsDir) }
194
+ );
195
+ } catch (err) {
196
+ core.logger.warn('plugin-tasks', `Could not record task run for ${plugin.id}: ${err.message}`);
197
+ }
198
+ }
199
+
200
+ if (changed) {
201
+ try {
202
+ await core.patchPluginRecord(plugin, { task_runs: runs });
203
+ } catch (err) {
204
+ core.logger.warn('plugin-tasks', `Could not update task runs for ${plugin.id}: ${err.message}`);
205
+ }
206
+ }
207
+ }
208
+
209
+ return results;
210
+ }
211
+
212
+ /** One log line per run; failures carry the reason and the output tail. */
213
+ export function describeRun(r) {
214
+ if (r.ok) return `${r.plugin}:${r.command} slot ${r.slot} ok`;
215
+ const reason = r.timedOut ? 'timed out' : `exit ${r.exitCode}`;
216
+ const alert = r.alert ? (r.alert.sent ? '; operator alerted' : `; alert not sent (${r.alert.error})`) : '';
217
+ return `${r.plugin}:${r.command} slot ${r.slot} failed (${reason}): ${r.tail || 'no output'}${alert}`;
218
+ }
219
+
220
+ /**
221
+ * Daemon service entry point: check for due tasks once a minute.
222
+ * @returns {Promise<Function>} stop function
223
+ */
224
+ export async function start(options = {}) {
225
+ const core = options.core || await loadCore();
226
+ const projectRoot = options.projectRoot || os.homedir();
227
+ let running = false;
228
+ const tick = async () => {
229
+ if (running) return;
230
+ running = true;
231
+ try {
232
+ for (const r of await runDuePluginTasks({ core, projectRoot })) {
233
+ core.logger[r.ok ? 'info' : 'warn']('plugin-tasks', describeRun(r));
234
+ }
235
+ } catch (err) {
236
+ core.logger.warn('plugin-tasks', `Scheduler tick failed: ${err.message}`);
237
+ } finally {
238
+ running = false;
239
+ }
240
+ };
241
+ const timer = setInterval(tick, 60_000);
242
+ timer.unref?.();
243
+ tick();
244
+ core.logger.info('plugin-tasks', `Plugin task scheduler started (automations) for ${projectRoot}`);
245
+ return () => clearInterval(timer);
246
+ }
@@ -0,0 +1,2 @@
1
+ /** External bundlers may use this entrypoint; the sandbox loads the Home directly. */
2
+ export { AutomationsElement } from './home.js';
@@ -0,0 +1,42 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ plugin: automations
4
+ id: control-ledger
5
+ title: Automation control ledger
6
+ description: Browse observed automation records, filter by trigger and state, and distinguish declarations from an actual run.
7
+ timestamp: "2026-11-08T10:14:00Z"
8
+ intents: [automation inventory, scheduled work control ledger, filter automation trigger state and source]
9
+ surfaces: [page]
10
+ panel: automations
11
+ operations: [list]
12
+ data:
13
+ - list:/schema_version
14
+ - list:/checked_at
15
+ - list:/complete
16
+ - list:/nodes/0/automations/0/id
17
+ - list:/nodes/0/automations/0/node_id
18
+ - list:/nodes/0/automations/0/source
19
+ - list:/nodes/0/automations/0/name
20
+ - list:/nodes/0/automations/0/intent
21
+ - list:/nodes/0/automations/0/origin
22
+ - list:/nodes/0/automations/0/trigger/kind
23
+ - list:/nodes/0/automations/0/trigger/summary
24
+ - list:/nodes/0/automations/0/trigger/timezone
25
+ - list:/nodes/0/automations/0/enabled
26
+ - list:/nodes/0/automations/0/state
27
+ - list:/nodes/0/automations/0/runner_available
28
+ - list:/nodes/0/automations/0/placement
29
+ - list:/nodes/0/automations/0/plugin_id
30
+ - list:/nodes/0/automations/0/plugin_name
31
+ - list:/nodes/0/automations/0/schedule
32
+ - list:/nodes/0/automations/0/valid
33
+ - list:/nodes/0/automations/0/last_handled_slot
34
+ - list:/nodes/0/automations/0/last_run/at
35
+ - list:/nodes/0/automations/0/last_run/state
36
+ - list:/nodes/0/automations/0/last_run/exit_code
37
+ ---
38
+ <section data-design-component="ledger-note" aria-label="Automation control ledger">
39
+ <p data-design-component="ledger-label">Triggers · sources · outcomes</p>
40
+ <h2>Automation control ledger</h2>
41
+ <p>Filter the inventory by node, source, trigger or observed state. Start with this node and scan the mesh when you need remote coverage.</p>
42
+ </section>
@@ -0,0 +1,17 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ plugin: automations
4
+ id: local-inventory-triage
5
+ title: Triage missing automations in local inventory
6
+ description: Inspect this machine's source coverage before treating an absent record as a missing automation.
7
+ timestamp: "2026-11-08T23:12:00Z"
8
+ intents: [why is an automation missing locally, check local automation inventory completeness, narrow fleet automation inventory to this host]
9
+ surfaces: [page]
10
+ panel: automations
11
+ operations: [list, status]
12
+ data: ["list:/complete", "list:/nodes/0/self", "list:/nodes/0/coverage/0/source", "list:/nodes/0/coverage/0/status"]
13
+ ---
14
+ <section data-design-component="ledger-note">
15
+ <h2>Start with local source coverage</h2>
16
+ <p>Switch the ledger to this machine. Check whether the automation's source was read before looking elsewhere or deciding that its record is absent.</p>
17
+ </section>
@@ -0,0 +1,39 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ plugin: automations
4
+ id: pending-control
5
+ title: Confirm pending task cancellation
6
+ description: Review the local source-owned control, confirm the pending task target, and verify its final cancellation receipt.
7
+ timestamp: "2026-11-08T10:14:00Z"
8
+ intents: [cancel pending local durable automation, source owned task cancellation receipt, pending task safety controls]
9
+ surfaces: [page]
10
+ operations: [list, show, cancel]
11
+ data:
12
+ - list:/nodes/0/coverage/0/source
13
+ - list:/nodes/0/coverage/0/status
14
+ - list:/nodes/0/coverage/0/checked_at
15
+ - list:/nodes/0/coverage/0/error
16
+ - list:/nodes/0/automations/0/last_exit_code
17
+ - list:/nodes/0/automations/0/command
18
+ - list:/nodes/0/automations/0/actions/0/command
19
+ - list:/nodes/0/automations/0/actions/0/label
20
+ - list:/nodes/0/automations/0/actions/0/args/0
21
+ - list:/nodes/0/automations/0/actions/0/effect
22
+ - list:/nodes/0/automations/0/owner_ref/layer
23
+ - list:/nodes/0/automations/0/owner_ref/slug
24
+ - show:/automation/actions/0/command
25
+ - show:/automation/actions/0/label
26
+ - show:/automation/actions/0/args/0
27
+ - show:/automation/actions/0/effect
28
+ - show:/automation/owner_ref/layer
29
+ - show:/automation/owner_ref/slug
30
+ - show:/automation/last_exit_code
31
+ - cancel:/success
32
+ - cancel:/id
33
+ - cancel:/state
34
+ ---
35
+ <section data-design-component="ledger-note" aria-label="Confirm pending task cancellation">
36
+ <p data-design-component="ledger-label">Local controls</p>
37
+ <h2>Confirm pending task cancellation</h2>
38
+ <p>Choose a pending record with an advertised cancellation action. Review its source and stable ID before confirming. The owner must report the final cancelled state.</p>
39
+ </section>
@@ -0,0 +1,41 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ plugin: automations
4
+ id: run-evidence
5
+ title: Automation run evidence
6
+ description: Inspect the source-owned automation record, schedule, last handled slot and actual outcome by stable ID.
7
+ timestamp: "2026-11-08T10:14:00Z"
8
+ intents: [inspect automation run outcome, audit handled slot and exit code, show automation by stable ID]
9
+ surfaces: [page]
10
+ operations: [show]
11
+ data:
12
+ - show:/schema_version
13
+ - show:/checked_at
14
+ - show:/automation/id
15
+ - show:/automation/node_id
16
+ - show:/automation/source
17
+ - show:/automation/name
18
+ - show:/automation/intent
19
+ - show:/automation/command
20
+ - show:/automation/origin
21
+ - show:/automation/trigger/kind
22
+ - show:/automation/trigger/summary
23
+ - show:/automation/trigger/timezone
24
+ - show:/automation/enabled
25
+ - show:/automation/state
26
+ - show:/automation/runner_available
27
+ - show:/automation/last_run/at
28
+ - show:/automation/last_run/state
29
+ - show:/automation/last_run/exit_code
30
+ - show:/automation/placement
31
+ - show:/automation/plugin_id
32
+ - show:/automation/plugin_name
33
+ - show:/automation/schedule
34
+ - show:/automation/valid
35
+ - show:/automation/last_handled_slot
36
+ ---
37
+ <section data-design-component="ledger-note" aria-label="Automation run evidence">
38
+ <p data-design-component="ledger-label">Observed runs</p>
39
+ <h2>Automation run evidence</h2>
40
+ <p>Read the record by stable ID. A handled slot records scheduler activity. The run timestamp, state and exit code describe execution when the owner reports them.</p>
41
+ </section>
@@ -0,0 +1,17 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ plugin: automations
4
+ id: schedule-vs-run-evidence
5
+ title: Verify that a scheduled automation actually ran
6
+ description: Compare the declared schedule and last handled slot with the observed run time and exit state for an automation.
7
+ timestamp: "2026-11-08T23:12:00Z"
8
+ intents: [verify scheduled automation actually ran, investigate missed schedule slot, compare schedule with observed automation outcome]
9
+ surfaces: [page]
10
+ panel: automations
11
+ operations: [list, show]
12
+ data: ["show:/automation/schedule", "show:/automation/last_handled_slot", "show:/automation/last_run/at", "show:/automation/last_run/state", "show:/automation/last_run/exit_code"]
13
+ ---
14
+ <section data-design-component="ledger-note">
15
+ <h2>Find observed run evidence</h2>
16
+ <p>Open the automation in the ledger. Compare the schedule and last handled slot with the observed run time and exit state. A schedule identifies when work should run.</p>
17
+ </section>
@@ -0,0 +1,41 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ plugin: automations
4
+ id: source-coverage
5
+ title: Mesh automation source coverage
6
+ description: Inspect node reachability, per-source coverage and observed state counts before relying on an inventory.
7
+ timestamp: "2026-11-08T10:14:00Z"
8
+ intents: [automation node coverage, offline or unauthorized automation source, observed automation state counts]
9
+ surfaces: [page]
10
+ operations: [list, status]
11
+ data:
12
+ - status:/schema_version
13
+ - status:/checked_at
14
+ - status:/complete
15
+ - status:/nodes/0/node_id
16
+ - status:/nodes/0/hostname
17
+ - status:/nodes/0/ip
18
+ - status:/nodes/0/self
19
+ - status:/nodes/0/online
20
+ - status:/nodes/0/checked_at
21
+ - status:/nodes/0/status
22
+ - status:/nodes/0/error
23
+ - status:/nodes/0/counts
24
+ - status:/nodes/0/coverage/0/source
25
+ - status:/nodes/0/coverage/0/status
26
+ - status:/nodes/0/coverage/0/checked_at
27
+ - status:/nodes/0/coverage/0/error
28
+ - list:/nodes/0/node_id
29
+ - list:/nodes/0/hostname
30
+ - list:/nodes/0/ip
31
+ - list:/nodes/0/self
32
+ - list:/nodes/0/online
33
+ - list:/nodes/0/checked_at
34
+ - list:/nodes/0/status
35
+ - list:/nodes/0/error
36
+ ---
37
+ <section data-design-component="ledger-note" aria-label="Mesh automation source coverage">
38
+ <p data-design-component="ledger-label">Coverage</p>
39
+ <h2>Mesh automation source coverage</h2>
40
+ <p>Review the node check time and each source outcome. A count is meaningful only beside its coverage, including unsupported sources and offline nodes.</p>
41
+ </section>