total-recall-brain 3.46.2 → 3.47.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/bin/total-recall.mjs +5 -0
  2. package/frontend/dist/assets/index-CpsWeV4X.css +1 -0
  3. package/frontend/dist/assets/{index-D1goIPjC.js → index-poecbHSl.js} +100 -100
  4. package/frontend/dist/brand/total-recall-lockup-transparent.png +0 -0
  5. package/frontend/dist/index.html +2 -2
  6. package/frontend/dist/sw.js +1 -1
  7. package/frontend/src/App.tsx +15 -81
  8. package/frontend/src/components/DashboardOverview.tsx +164 -0
  9. package/frontend/src/components/brand/BrandMark.tsx +8 -6
  10. package/frontend/src/components/plugins/PluginWorkspace.tsx +112 -57
  11. package/frontend/src/components/workspace/PluginHome.tsx +3 -3
  12. package/frontend/src/index.css +43 -11
  13. package/package.json +1 -1
  14. package/scaffold/.agent/skills/total-recall/plugins/auth/package-lock.json +4 -4
  15. package/scaffold/.agent/skills/total-recall/plugins/auth/package.json +3 -2
  16. package/scaffold/.agent/skills/total-recall/plugins/auth/plugin.json +30 -5
  17. package/scaffold/.agent/skills/total-recall/plugins/auth/skills/auth/SKILL.md +35 -0
  18. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/home.js +494 -79
  19. package/scaffold/.agent/skills/total-recall/plugins/automations/package-lock.json +4 -4
  20. package/scaffold/.agent/skills/total-recall/plugins/automations/package.json +3 -2
  21. package/scaffold/.agent/skills/total-recall/plugins/automations/plugin.json +33 -8
  22. package/scaffold/.agent/skills/total-recall/plugins/automations/skills/automations/SKILL.md +29 -0
  23. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/dream-consolidation.md +17 -0
  24. package/scaffold/.agent/skills/total-recall/plugins/code-quality/package-lock.json +4 -4
  25. package/scaffold/.agent/skills/total-recall/plugins/code-quality/package.json +3 -2
  26. package/scaffold/.agent/skills/total-recall/plugins/code-quality/plugin.json +31 -4
  27. package/scaffold/.agent/skills/total-recall/plugins/code-quality/skills/code-quality/SKILL.md +27 -0
  28. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package-lock.json +4 -4
  29. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package.json +1 -1
  30. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/plugin.json +17 -3
  31. package/scaffold/.agent/skills/total-recall/plugins/embeddings/package-lock.json +4 -4
  32. package/scaffold/.agent/skills/total-recall/plugins/embeddings/package.json +3 -2
  33. package/scaffold/.agent/skills/total-recall/plugins/embeddings/plugin.json +24 -4
  34. package/scaffold/.agent/skills/total-recall/plugins/embeddings/skills/embeddings/SKILL.md +25 -0
  35. package/scaffold/.agent/skills/total-recall/plugins/git/package-lock.json +6 -6
  36. package/scaffold/.agent/skills/total-recall/plugins/git/package.json +3 -2
  37. package/scaffold/.agent/skills/total-recall/plugins/git/plugin.json +300 -58
  38. package/scaffold/.agent/skills/total-recall/plugins/git/skills/git/SKILL.md +36 -0
  39. package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/commit-memory.mjs +5 -33
  40. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/git-fleet-ops.md +16 -0
  41. package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/git-publish.md +16 -0
  42. package/scaffold/.agent/skills/total-recall/plugins/mesh/package-lock.json +4 -4
  43. package/scaffold/.agent/skills/total-recall/plugins/mesh/package.json +3 -2
  44. package/scaffold/.agent/skills/total-recall/plugins/mesh/plugin.json +47 -14
  45. package/scaffold/.agent/skills/total-recall/plugins/mesh/skills/mesh/SKILL.md +36 -0
  46. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/cli.mjs +6 -3
  47. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package.json +1 -1
  48. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/plugin.json +5 -2
  49. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/cascade.mjs +4 -2
  50. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/coordinator.mjs +28 -9
  51. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/dispatch.mjs +7 -1
  52. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/model-selection.mjs +59 -0
  53. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/remote-operation.mjs +3 -3
  54. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/router.mjs +9 -3
  55. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/worker.mjs +50 -6
  56. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/session-controls.md +16 -0
  57. package/scaffold/.agent/skills/total-recall/plugins/openwiki/cli.mjs +175 -17
  58. package/scaffold/.agent/skills/total-recall/plugins/openwiki/package-lock.json +6 -6
  59. package/scaffold/.agent/skills/total-recall/plugins/openwiki/package.json +3 -2
  60. package/scaffold/.agent/skills/total-recall/plugins/openwiki/plugin.json +242 -31
  61. package/scaffold/.agent/skills/total-recall/plugins/openwiki/skills/openwiki/SKILL.md +32 -0
  62. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/config.mjs +41 -15
  63. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/generate.mjs +29 -22
  64. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/graph.mjs +20 -33
  65. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/lint.mjs +42 -49
  66. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/markdown-links.mjs +112 -0
  67. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/mesh-vaults.mjs +3 -2
  68. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/refresh.mjs +219 -65
  69. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/search.mjs +2 -1
  70. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/upstream-watcher.mjs +21 -3
  71. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/panel.js +51 -2
  72. package/scaffold/.agent/skills/total-recall/plugins/security/package-lock.json +4 -4
  73. package/scaffold/.agent/skills/total-recall/plugins/security/package.json +1 -1
  74. package/scaffold/.agent/skills/total-recall/plugins/security/plugin.json +22 -5
  75. package/scaffold/.agent/skills/total-recall/plugins/ssss/package.json +3 -2
  76. package/scaffold/.agent/skills/total-recall/plugins/ssss/plugin.json +169 -37
  77. package/scaffold/.agent/skills/total-recall/plugins/ssss/skills/ssss/SKILL.md +30 -0
  78. package/src/cli/context.mjs +6 -2
  79. package/src/cli/plugin/create.mjs +2 -1
  80. package/src/cli/plugin/monetization.mjs +66 -32
  81. package/src/cli/plugin/search.mjs +25 -3
  82. package/src/cli/preflight.mjs +40 -6
  83. package/src/core/context-compactor.mjs +2 -0
  84. package/src/core/gate-mode.mjs +13 -24
  85. package/src/core/plugin-distribution.mjs +35 -1
  86. package/src/core/preflight-gate.mjs +28 -8
  87. package/src/core/preflight-receipt.mjs +11 -0
  88. package/src/server/routes/vault.mjs +1 -0
  89. package/frontend/dist/assets/index-BRYE1jmv.css +0 -1
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://github.com/gregiteen/total-recall/blob/main/metadata.plugin.schema.json",
3
3
  "id": "git",
4
4
  "name": "Git",
5
- "version": "2.2.0",
5
+ "version": "2.3.1",
6
6
  "description": "The whole git CLI through Total Recall: sign-in from the auth store, guarded commits and pushes, undo, fleet state, and the intent behind every change.",
7
7
  "author": "Total Recall",
8
8
  "license": "MIT",
@@ -10,13 +10,28 @@
10
10
  "software-development"
11
11
  ],
12
12
  "gate": {
13
- "tasks": ["Run any git command", "Commit or push with identity, secret and rule checks", "Sign git in through the auth store", "Undo a destructive git command", "Check repository state across the mesh", "Keep the git CLI current on every node"],
13
+ "tasks": [
14
+ "Run any git command",
15
+ "Commit or push with identity, secret and rule checks",
16
+ "Sign git in through the auth store",
17
+ "Undo a destructive git command",
18
+ "Check repository state across the mesh",
19
+ "Keep the git CLI current on every node"
20
+ ],
14
21
  "owned_commands": [
15
- { "pattern": "(^|[;&|(]\\s*)git(\\s+-C\\s+\\S+)?\\s+[a-z]", "use": "total-recall git <same git command and arguments>" }
22
+ {
23
+ "pattern": "(^|[;&|(]\\s*)git(\\s+-C\\s+\\S+)?\\s+[a-z]",
24
+ "use": "total-recall git <same git command and arguments>"
25
+ }
16
26
  ]
17
27
  },
18
28
  "tasks": [
19
- { "intent": "Check and update the git CLI", "schedule": "17 6 * * *", "command": "cli update --scheduled", "placement": "per-node" }
29
+ {
30
+ "intent": "Check and update the git CLI",
31
+ "schedule": "17 6 * * *",
32
+ "command": "cli update --scheduled",
33
+ "placement": "per-node"
34
+ }
20
35
  ],
21
36
  "cli": {
22
37
  "answers_help": true,
@@ -33,57 +48,253 @@
33
48
  "description": "Read a stat or patch for unstaged, staged or base-relative changes",
34
49
  "effect": "read",
35
50
  "args": [
36
- { "name": "patch", "flag": "--patch", "type": "boolean", "label": "Show patch" },
37
- { "name": "cached", "flag": "--cached", "type": "boolean", "label": "Use staged changes" },
38
- { "name": "base", "flag": "--base", "type": "string", "label": "Base ref" }
51
+ {
52
+ "name": "patch",
53
+ "flag": "--patch",
54
+ "type": "boolean",
55
+ "label": "Show patch"
56
+ },
57
+ {
58
+ "name": "cached",
59
+ "flag": "--cached",
60
+ "type": "boolean",
61
+ "label": "Use staged changes"
62
+ },
63
+ {
64
+ "name": "base",
65
+ "flag": "--base",
66
+ "type": "string",
67
+ "label": "Base ref"
68
+ }
69
+ ]
70
+ },
71
+ {
72
+ "name": "commit",
73
+ "description": "Check identity, conflicts, HEAD, secrets and repository rules, then run git's own commit with your arguments",
74
+ "effect": "write",
75
+ "timeout_ms": 600000,
76
+ "args": [
77
+ {
78
+ "name": "args",
79
+ "type": "string",
80
+ "label": "git commit arguments",
81
+ "positional": true
82
+ }
83
+ ]
84
+ },
85
+ {
86
+ "name": "push",
87
+ "description": "Check outgoing commits for secrets and rules, turn --force into --force-with-lease, then run git's own push",
88
+ "effect": "write",
89
+ "timeout_ms": 600000,
90
+ "args": [
91
+ {
92
+ "name": "args",
93
+ "type": "string",
94
+ "label": "git push arguments",
95
+ "positional": true
96
+ }
97
+ ]
98
+ },
99
+ {
100
+ "name": "credential-helper",
101
+ "description": "Git credential helper: give git the mapped auth-store credential (get); store and erase do nothing",
102
+ "effect": "read"
103
+ },
104
+ {
105
+ "name": "auth",
106
+ "description": "Sign-in: status (live check, no secret shown), map <host> <KEY>, setup (helper entries for this machine)",
107
+ "effect": "write",
108
+ "args": [
109
+ {
110
+ "name": "action",
111
+ "type": "string",
112
+ "label": "status | map | setup",
113
+ "positional": true
114
+ }
115
+ ]
116
+ },
117
+ {
118
+ "name": "cli",
119
+ "description": "Git CLI metadata (version, path, install source, upstream, release notes); --all-nodes for the mesh; cli update updates git through its installer",
120
+ "effect": "write",
121
+ "timeout_ms": 600000
122
+ },
123
+ {
124
+ "name": "undo",
125
+ "description": "Restore refs, index and files from the snapshot taken before a destructive git command; --list shows snapshots",
126
+ "effect": "destructive",
127
+ "args": [
128
+ {
129
+ "name": "event",
130
+ "type": "string",
131
+ "label": "Snapshot",
132
+ "positional": true
133
+ },
134
+ {
135
+ "name": "list",
136
+ "flag": "--list",
137
+ "type": "boolean",
138
+ "label": "List snapshots"
139
+ }
140
+ ]
141
+ },
142
+ {
143
+ "name": "fleet",
144
+ "description": "Dirty, unpushed, behind, diverged, stale stashes and abandoned worktrees across registered repositories; --all-nodes for the mesh",
145
+ "effect": "read",
146
+ "timeout_ms": 600000
147
+ },
148
+ {
149
+ "name": "unmerged",
150
+ "description": "Branches with commits not in the default branch, worktrees with uncommitted changes and detached worktrees holding commits on no branch; --registered for every registered repository",
151
+ "effect": "read",
152
+ "output": "json",
153
+ "timeout_ms": 600000,
154
+ "args": [
155
+ {
156
+ "name": "registered",
157
+ "flag": "--registered",
158
+ "type": "boolean",
159
+ "label": "Every registered repository"
160
+ }
39
161
  ]
40
162
  },
41
- { "name": "commit", "description": "Check identity, conflicts, HEAD, secrets and repository rules, then run git's own commit with your arguments", "effect": "write", "timeout_ms": 600000, "args": [
42
- { "name": "args", "type": "string", "label": "git commit arguments", "positional": true }
43
- ] },
44
- { "name": "push", "description": "Check outgoing commits for secrets and rules, turn --force into --force-with-lease, then run git's own push", "effect": "write", "timeout_ms": 600000, "args": [
45
- { "name": "args", "type": "string", "label": "git push arguments", "positional": true }
46
- ] },
47
- { "name": "credential-helper", "description": "Git credential helper: give git the mapped auth-store credential (get); store and erase do nothing", "effect": "read" },
48
- { "name": "auth", "description": "Sign-in: status (live check, no secret shown), map <host> <KEY>, setup (helper entries for this machine)", "effect": "write", "args": [
49
- { "name": "action", "type": "string", "label": "status | map | setup", "positional": true }
50
- ] },
51
- { "name": "cli", "description": "Git CLI metadata (version, path, install source, upstream, release notes); --all-nodes for the mesh; cli update updates git through its installer", "effect": "write", "timeout_ms": 600000 },
52
- { "name": "undo", "description": "Restore refs, index and files from the snapshot taken before a destructive git command; --list shows snapshots", "effect": "destructive", "args": [
53
- { "name": "event", "type": "string", "label": "Snapshot", "positional": true },
54
- { "name": "list", "flag": "--list", "type": "boolean", "label": "List snapshots" }
55
- ] },
56
- { "name": "fleet", "description": "Dirty, unpushed, behind, diverged, stale stashes and abandoned worktrees across registered repositories; --all-nodes for the mesh", "effect": "read", "timeout_ms": 600000 },
57
- { "name": "unmerged", "description": "Branches with commits not in the default branch, worktrees with uncommitted changes and detached worktrees holding commits on no branch; --registered for every registered repository", "effect": "read", "output": "json", "timeout_ms": 600000, "args": [
58
- { "name": "registered", "flag": "--registered", "type": "boolean", "label": "Every registered repository" }
59
- ] },
60
- { "name": "where", "description": "Machines and checkouts that contain a commit", "effect": "read", "args": [
61
- { "name": "commit", "type": "string", "label": "Commit", "required": true, "positional": true }
62
- ] },
63
- { "name": "why", "description": "Blame one line plus the session, tracker item, decision and rules recorded when it was committed", "effect": "read", "args": [
64
- { "name": "location", "type": "string", "label": "file:line", "required": true, "positional": true }
65
- ] },
66
- { "name": "group", "description": "Group a dirty tree into commits by the agent session that wrote each change; --apply commits the groups", "effect": "write" },
67
- { "name": "message", "description": "Draft a commit message from the staged diff, the active tracker and its action log", "effect": "read" },
68
- { "name": "bisect-agent", "description": "Find the first bad commit with the repository's quality gate as the test", "effect": "write", "timeout_ms": 600000, "args": [
69
- { "name": "good", "type": "string", "label": "Good commit", "required": true, "positional": true },
70
- { "name": "bad", "type": "string", "label": "Bad commit", "required": true, "positional": true }
71
- ] },
72
- { "name": "resolve", "description": "Propose a resolution for each conflicted file from both sides' recorded intent; --apply writes it", "effect": "write" },
73
- { "name": "handoff", "description": "Pack a branch, its tracker and related memory into one SSSS bundle for another agent or machine", "effect": "write", "args": [
74
- { "name": "branch", "type": "string", "label": "Branch", "required": true, "positional": true },
75
- { "name": "out", "flag": "--out", "type": "string", "label": "Output file" }
76
- ] },
77
- { "name": "worktree-list", "description": "Read registered worktrees for the current repository", "effect": "read" },
78
- { "name": "worktree-create", "description": "Create a detached worktree at a specified path and base ref", "effect": "write", "args": [
79
- { "name": "path", "type": "string", "label": "Worktree path", "required": true, "positional": true },
80
- { "name": "base", "flag": "--base", "type": "string", "label": "Base ref" }
81
- ] },
82
- { "name": "worktree-remove", "description": "Remove an owned linked worktree, with explicit force for dirty content", "effect": "destructive", "args": [
83
- { "name": "path", "type": "string", "label": "Worktree path", "required": true, "positional": true },
84
- { "name": "force", "flag": "--force", "type": "boolean", "label": "Allow removal of dirty content" }
85
- ] },
86
- { "name": "worktree", "description": "Compatibility form: worktree list, create or remove", "effect": "destructive" },
163
+ {
164
+ "name": "where",
165
+ "description": "Machines and checkouts that contain a commit",
166
+ "effect": "read",
167
+ "args": [
168
+ {
169
+ "name": "commit",
170
+ "type": "string",
171
+ "label": "Commit",
172
+ "required": true,
173
+ "positional": true
174
+ }
175
+ ]
176
+ },
177
+ {
178
+ "name": "why",
179
+ "description": "Blame one line plus the session, tracker item, decision and rules recorded when it was committed",
180
+ "effect": "read",
181
+ "args": [
182
+ {
183
+ "name": "location",
184
+ "type": "string",
185
+ "label": "file:line",
186
+ "required": true,
187
+ "positional": true
188
+ }
189
+ ]
190
+ },
191
+ {
192
+ "name": "group",
193
+ "description": "Group a dirty tree into commits by the agent session that wrote each change; --apply commits the groups",
194
+ "effect": "write"
195
+ },
196
+ {
197
+ "name": "message",
198
+ "description": "Draft a commit message from the staged diff, the active tracker and its action log",
199
+ "effect": "read"
200
+ },
201
+ {
202
+ "name": "bisect-agent",
203
+ "description": "Find the first bad commit with the repository's quality gate as the test",
204
+ "effect": "write",
205
+ "timeout_ms": 600000,
206
+ "args": [
207
+ {
208
+ "name": "good",
209
+ "type": "string",
210
+ "label": "Good commit",
211
+ "required": true,
212
+ "positional": true
213
+ },
214
+ {
215
+ "name": "bad",
216
+ "type": "string",
217
+ "label": "Bad commit",
218
+ "required": true,
219
+ "positional": true
220
+ }
221
+ ]
222
+ },
223
+ {
224
+ "name": "resolve",
225
+ "description": "Propose a resolution for each conflicted file from both sides' recorded intent; --apply writes it",
226
+ "effect": "write"
227
+ },
228
+ {
229
+ "name": "handoff",
230
+ "description": "Pack a branch, its tracker and related memory into one SSSS bundle for another agent or machine",
231
+ "effect": "write",
232
+ "args": [
233
+ {
234
+ "name": "branch",
235
+ "type": "string",
236
+ "label": "Branch",
237
+ "required": true,
238
+ "positional": true
239
+ },
240
+ {
241
+ "name": "out",
242
+ "flag": "--out",
243
+ "type": "string",
244
+ "label": "Output file"
245
+ }
246
+ ]
247
+ },
248
+ {
249
+ "name": "worktree-list",
250
+ "description": "Read registered worktrees for the current repository",
251
+ "effect": "read"
252
+ },
253
+ {
254
+ "name": "worktree-create",
255
+ "description": "Create a detached worktree at a specified path and base ref",
256
+ "effect": "write",
257
+ "args": [
258
+ {
259
+ "name": "path",
260
+ "type": "string",
261
+ "label": "Worktree path",
262
+ "required": true,
263
+ "positional": true
264
+ },
265
+ {
266
+ "name": "base",
267
+ "flag": "--base",
268
+ "type": "string",
269
+ "label": "Base ref"
270
+ }
271
+ ]
272
+ },
273
+ {
274
+ "name": "worktree-remove",
275
+ "description": "Remove an owned linked worktree, with explicit force for dirty content",
276
+ "effect": "destructive",
277
+ "args": [
278
+ {
279
+ "name": "path",
280
+ "type": "string",
281
+ "label": "Worktree path",
282
+ "required": true,
283
+ "positional": true
284
+ },
285
+ {
286
+ "name": "force",
287
+ "flag": "--force",
288
+ "type": "boolean",
289
+ "label": "Allow removal of dirty content"
290
+ }
291
+ ]
292
+ },
293
+ {
294
+ "name": "worktree",
295
+ "description": "Compatibility form: worktree list, create or remove",
296
+ "effect": "destructive"
297
+ },
87
298
  {
88
299
  "name": "identity",
89
300
  "description": "Show who commits here and which identities the history publishes; exits 1 on a missing or machine-derived identity (--json for machine output)",
@@ -101,10 +312,21 @@
101
312
  "tag": "tr-git-home",
102
313
  "module": "ui/home.js",
103
314
  "description": "Repository audit, diff stats, and linked worktrees",
104
- "tokens": ["color-text", "color-surface", "color-border", "spacing-md", "radius-md"],
315
+ "tokens": [
316
+ "color-text",
317
+ "color-surface",
318
+ "color-border",
319
+ "spacing-md",
320
+ "radius-md"
321
+ ],
105
322
  "optional_tokens": [
106
- "color-background", "color-accent", "color-muted", "color-danger",
107
- "typography-body-font-family", "typography-heading-font-family", "typography-mono-font-family"
323
+ "color-background",
324
+ "color-accent",
325
+ "color-muted",
326
+ "color-danger",
327
+ "typography-body-font-family",
328
+ "typography-heading-font-family",
329
+ "typography-mono-font-family"
108
330
  ]
109
331
  }
110
332
  ]
@@ -139,7 +361,13 @@
139
361
  "badge": "Repository Hygiene",
140
362
  "font": "space-grotesk"
141
363
  },
142
- "startup_check": { "command": "unmerged", "args": ["--json"], "timeout_ms": 20000 },
364
+ "startup_check": {
365
+ "command": "unmerged",
366
+ "args": [
367
+ "--json"
368
+ ],
369
+ "timeout_ms": 20000
370
+ },
143
371
  "status": {
144
372
  "command": "audit",
145
373
  "refresh_seconds": 60
@@ -147,5 +375,19 @@
147
375
  "distribution": {
148
376
  "tier": "official",
149
377
  "license": "open"
150
- }
378
+ },
379
+ "reuse": {
380
+ "commands": [
381
+ "total-recall auth secret",
382
+ "total-recall ssss status"
383
+ ],
384
+ "owned": "Secret-firewalled commits and pushes, worktree management, unmerged branch detection, and fleet repository hygiene."
385
+ },
386
+ "skills": [
387
+ {
388
+ "id": "git",
389
+ "path": "./skills/git/SKILL.md",
390
+ "description": "The whole git CLI through Total Recall: sign-in from the auth store, guarded commits and pushes, undo, fleet state, and the intent behind every change."
391
+ }
392
+ ]
151
393
  }
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: git
3
+ description: "The whole git CLI through Total Recall: sign-in from the auth store, guarded commits and pushes, undo, fleet state, and the intent behind every change."
4
+ version: 2.3.0
5
+ repo_scoped: false
6
+ ---
7
+
8
+ # Git
9
+
10
+ The whole git CLI through Total Recall: sign-in from the auth store, guarded commits and pushes, undo, fleet state, and the intent behind every change.
11
+
12
+ ## When to Use
13
+
14
+ Use the `git` Total Recall plugin (`total-recall git`) instead of ad-hoc scripts or raw commands whenever working on git tasks.
15
+
16
+ ## Commands
17
+
18
+ ```bash
19
+ total-recall git --help
20
+ total-recall git audit # Summarise branch, worktree, upstream and stash state (--json for machine output)
21
+ total-recall git diff # Read a stat or patch for unstaged, staged or base-relative changes
22
+ total-recall git commit # Check identity, conflicts, HEAD, secrets and repository rules, then run git's own commit with your arguments
23
+ total-recall git push # Check outgoing commits for secrets and rules, turn --force into --force-with-lease, then run git's own push
24
+ total-recall git credential-helper # Git credential helper: give git the mapped auth-store credential (get); store and erase do nothing
25
+ total-recall git auth # Sign-in: status (live check, no secret shown), map <host> <KEY>, setup (helper entries for this machine)
26
+ total-recall git cli # Git CLI metadata (version, path, install source, upstream, release notes); --all-nodes for the mesh; cli update updates git through its installer
27
+ total-recall git undo # Restore refs, index and files from the snapshot taken before a destructive git command; --list shows snapshots
28
+ total-recall git fleet # Dirty, unpushed, behind, diverged, stale stashes and abandoned worktrees across registered repositories; --all-nodes for the mesh
29
+ total-recall git unmerged # Branches with commits not in the default branch, worktrees with uncommitted changes and detached worktrees holding commits on no branch; --registered for every registered repository
30
+ total-recall git where # Machines and checkouts that contain a commit
31
+ total-recall git why # Blame one line plus the session, tracker item, decision and rules recorded when it was committed
32
+ ```
33
+
34
+ ## Owned Raw Commands
35
+
36
+ This plugin owns: `(^|[;&|(]\s*)git(\s+-C\s+\S+)?\s+[a-z]`.
@@ -1,26 +1,9 @@
1
- import { spawn } from 'node:child_process';
2
1
  import { git, tr, ledger, intent, session } from '../lib/context.mjs';
3
- import { defaultBranch } from './unmerged.mjs';
4
2
 
5
- /**
6
- * Ask OpenWiki to refresh this repository without waiting for it. A due refresh
7
- * regenerates pages with a model for minutes; OpenWiki throttles repeats, keeps
8
- * its own 30-minute limit and writes the outcome to openwiki/.refresh-attempt.json.
9
- * Waiting here held every commit for 30 s, then killed only the CLI: the
10
- * generator finished on its own while the commit reported the refresh as failed.
11
- */
12
- export function requestWikiRefresh(ctx, launch = spawn) {
13
- try {
14
- const child = launch(ctx.env.GIT_PLUGIN_TR_BIN || 'total-recall', ['openwiki', 'refresh', '--repo', ctx.cwd, '--apply', '--json'], {
15
- cwd: ctx.cwd, env: ctx.env, detached: true, stdio: 'ignore', shell: false,
16
- });
17
- child.on?.('error', () => {});
18
- child.unref?.();
19
- return child.pid ? { status: 'requested', command: 'openwiki refresh', outcome: 'openwiki/.refresh-attempt.json' } : { status: 'failed', command: 'openwiki refresh', reason: 'could not start' };
20
- } catch {
21
- return { status: 'failed', command: 'openwiki refresh', reason: 'could not start' };
22
- }
23
- }
3
+ // A commit never starts an OpenWiki refresh. Requesting one after every commit on the default
4
+ // branch paid a model to re-check wiki pages after each automatic version-pin commit, in about
5
+ // 40 repositories per Total Recall release. OpenWiki refreshes from its own nightly task on one
6
+ // selected node (total-recall openwiki schedule).
24
7
 
25
8
  export const guards = [{
26
9
  name: 'commit-memory',
@@ -37,18 +20,7 @@ export const guards = [{
37
20
  // Save the commit before any optional provider call.
38
21
  store.append(record, { idempotencyKey: `commit-${sha}` });
39
22
  const memory = record.decisions.length ? tr(ctx, ['remember', 'decision', `${record.decisions.join('\n')}\nCommit: ${sha}`, '--project', '--slug', `git-decision-${sha}`]) : null;
40
- let wiki;
41
- // The wiki documents the default branch. Regenerating it from a feature branch spends model
42
- // calls on pages that only conflict when the branch merges.
43
- const branch = ctx.git(['symbolic-ref', '--quiet', '--short', 'HEAD']);
44
- const base = defaultBranch(ctx);
45
- if (!base || branch.status !== 0 || String(branch.stdout).trim() !== base.name) wiki = { status: 'skipped', reason: 'not on the default branch' };
46
- else {
47
- const available = tr(ctx, ['openwiki', '--help']);
48
- wiki = available.status !== 0 || available.error ? { status: 'skipped', reason: 'OpenWiki is unavailable' } : requestWikiRefresh(ctx);
49
- }
50
- store.append({ type: 'git.commit_memory', sha, timestamp: new Date().toISOString(), memory: memory === null ? 'skipped: no named decision' : memory.status === 0 && !memory.error ? 'recorded' : 'failed', openwiki: wiki });
23
+ store.append({ type: 'git.commit_memory', sha, timestamp: new Date().toISOString(), memory: memory === null ? 'skipped: no named decision' : memory.status === 0 && !memory.error ? 'recorded' : 'failed' });
51
24
  if (memory && (memory.status !== 0 || memory.error)) console.error('Commit saved. Repository decision memory failed.');
52
- if (wiki.status === 'failed') console.error('Commit saved. The OpenWiki refresh could not be started.');
53
25
  },
54
26
  }];
@@ -0,0 +1,16 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ title: Fleet routing & agent coordination
4
+ description: Inspect fleet locations, bisect regressions, resolve conflicts, and coordinate multi-agent git handoffs.
5
+ timestamp: "2026-11-14T08:51:00Z"
6
+ plugin: git
7
+ id: git-fleet-ops
8
+ intents: [inspect fleet repos, locate branch or worktree, bisect or resolve conflicts, hand off git state]
9
+ surfaces: [page]
10
+ operations: [fleet, where, why, group, message, bisect-agent, resolve, handoff]
11
+ ---
12
+
13
+ <section>
14
+ <h2>Fleet &amp; coordination ops</h2>
15
+ <p>Track repository placement across the fleet, diagnose branch divergence, resolve conflicts, and hand off clean git state between agents.</p>
16
+ </section>
@@ -0,0 +1,16 @@
1
+ ---
2
+ type: ui-chunk:chunk
3
+ title: Secret-firewalled git publish & auth
4
+ description: Commit, push, configure git credential helper/auth/cli bindings, and safely undo recent changes.
5
+ timestamp: "2026-11-14T08:51:00Z"
6
+ plugin: git
7
+ id: git-publish
8
+ intents: [commit changes, push branch, configure git auth, undo git change]
9
+ surfaces: [page]
10
+ operations: [commit, push, credential-helper, auth, cli, undo]
11
+ ---
12
+
13
+ <section>
14
+ <h2>Publish &amp; credential guard</h2>
15
+ <p>Run secret-firewalled commits and pushes, bind Total Recall git credentials, or undo recent working-tree changes.</p>
16
+ </section>
@@ -15,7 +15,7 @@
15
15
  "devDependencies": {
16
16
  "jsdom": "^29.1.1",
17
17
  "supertest": "^7.3.1",
18
- "total-recall-brain": "3.45.0",
18
+ "total-recall-brain": "3.47.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.45.0",
7181
- "resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.45.0.tgz",
7182
- "integrity": "sha512-HDYfROazZbsLHQsFPnlBcSpe1HL1QEi7JG8x/eNRUI06RxVQsZWl8LwBo2lTWjWRDrKmCy7BUmSXQDuWF3lrEw==",
7180
+ "version": "3.47.0",
7181
+ "resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.47.0.tgz",
7182
+ "integrity": "sha512-S4UIdbbTyxw7C4+rix+7oHMm/6gYkcxwNBcP6kRDySX40p5IgqVTKgHk1n8rmaKiyYFoIX/HZHlHSjNrHgn0Gw==",
7183
7183
  "dev": true,
7184
7184
  "license": "MIT",
7185
7185
  "workspaces": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tr-plugin-mesh",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "description": "Headscale and Tailscale SSH control-server mesh administration and node discovery",
6
6
  "scripts": {
@@ -22,7 +22,8 @@
22
22
  "capability/",
23
23
  "src/",
24
24
  "!src/**/*.spec.mjs",
25
- "!src/**/*.test.mjs"
25
+ "!src/**/*.test.mjs",
26
+ "skills/"
26
27
  ],
27
28
  "overrides": {
28
29
  "@ssss/cli": "npm:@gregiteen/ssss-cli@0.14.5"