total-recall-brain 3.47.0 → 3.47.2

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 (73) hide show
  1. package/bin/total-recall.mjs +5 -0
  2. package/package.json +1 -1
  3. package/scaffold/.agent/skills/total-recall/plugins/auth/package-lock.json +4 -4
  4. package/scaffold/.agent/skills/total-recall/plugins/auth/package.json +3 -2
  5. package/scaffold/.agent/skills/total-recall/plugins/auth/plugin.json +30 -5
  6. package/scaffold/.agent/skills/total-recall/plugins/auth/skills/auth/SKILL.md +35 -0
  7. package/scaffold/.agent/skills/total-recall/plugins/auth/ui/home.js +494 -79
  8. package/scaffold/.agent/skills/total-recall/plugins/automations/package-lock.json +4 -4
  9. package/scaffold/.agent/skills/total-recall/plugins/automations/package.json +3 -2
  10. package/scaffold/.agent/skills/total-recall/plugins/automations/plugin.json +33 -8
  11. package/scaffold/.agent/skills/total-recall/plugins/automations/skills/automations/SKILL.md +29 -0
  12. package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/dream-consolidation.md +17 -0
  13. package/scaffold/.agent/skills/total-recall/plugins/code-quality/package-lock.json +4 -4
  14. package/scaffold/.agent/skills/total-recall/plugins/code-quality/package.json +3 -2
  15. package/scaffold/.agent/skills/total-recall/plugins/code-quality/plugin.json +31 -4
  16. package/scaffold/.agent/skills/total-recall/plugins/code-quality/skills/code-quality/SKILL.md +27 -0
  17. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package-lock.json +4 -4
  18. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package.json +1 -1
  19. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/plugin.json +17 -3
  20. package/scaffold/.agent/skills/total-recall/plugins/embeddings/package-lock.json +4 -4
  21. package/scaffold/.agent/skills/total-recall/plugins/embeddings/package.json +3 -2
  22. package/scaffold/.agent/skills/total-recall/plugins/embeddings/plugin.json +24 -4
  23. package/scaffold/.agent/skills/total-recall/plugins/embeddings/skills/embeddings/SKILL.md +25 -0
  24. package/scaffold/.agent/skills/total-recall/plugins/git/package-lock.json +4 -4
  25. package/scaffold/.agent/skills/total-recall/plugins/git/package.json +3 -2
  26. package/scaffold/.agent/skills/total-recall/plugins/git/plugin.json +293 -58
  27. package/scaffold/.agent/skills/total-recall/plugins/git/skills/git/SKILL.md +36 -0
  28. package/scaffold/.agent/skills/total-recall/plugins/mesh/package-lock.json +4 -4
  29. package/scaffold/.agent/skills/total-recall/plugins/mesh/package.json +3 -2
  30. package/scaffold/.agent/skills/total-recall/plugins/mesh/plugin.json +47 -14
  31. package/scaffold/.agent/skills/total-recall/plugins/mesh/skills/mesh/SKILL.md +36 -0
  32. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/cli.mjs +6 -3
  33. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package-lock.json +6 -6
  34. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package.json +1 -1
  35. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/plugin.json +5 -2
  36. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/cascade.mjs +4 -2
  37. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/coordinator.mjs +28 -9
  38. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/dispatch.mjs +8 -2
  39. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/included-usage.mjs +2 -2
  40. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/learner.mjs +7 -0
  41. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/model-selection.mjs +59 -0
  42. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/pool.mjs +2 -2
  43. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/remote-operation.mjs +3 -3
  44. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/router.mjs +11 -5
  45. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/worker.mjs +50 -6
  46. package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/session-controls.md +16 -0
  47. package/scaffold/.agent/skills/total-recall/plugins/openwiki/cli.mjs +56 -7
  48. package/scaffold/.agent/skills/total-recall/plugins/openwiki/package-lock.json +6 -6
  49. package/scaffold/.agent/skills/total-recall/plugins/openwiki/package.json +3 -2
  50. package/scaffold/.agent/skills/total-recall/plugins/openwiki/plugin.json +199 -36
  51. package/scaffold/.agent/skills/total-recall/plugins/openwiki/skills/openwiki/SKILL.md +32 -0
  52. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/config.mjs +34 -8
  53. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/generate.mjs +6 -0
  54. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/refresh.mjs +15 -7
  55. package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/upstream-watcher.mjs +4 -3
  56. package/scaffold/.agent/skills/total-recall/plugins/security/package-lock.json +4 -4
  57. package/scaffold/.agent/skills/total-recall/plugins/security/package.json +1 -1
  58. package/scaffold/.agent/skills/total-recall/plugins/security/plugin.json +22 -5
  59. package/scaffold/.agent/skills/total-recall/plugins/ssss/package.json +3 -2
  60. package/scaffold/.agent/skills/total-recall/plugins/ssss/plugin.json +169 -37
  61. package/scaffold/.agent/skills/total-recall/plugins/ssss/skills/ssss/SKILL.md +30 -0
  62. package/src/cli/plugin/create.mjs +2 -1
  63. package/src/cli/plugin/monetization.mjs +66 -32
  64. package/src/cli/plugin/search.mjs +25 -3
  65. package/src/cli/preflight.mjs +40 -6
  66. package/src/cli/update.mjs +20 -1
  67. package/src/core/automatic-brain-updates.mjs +8 -4
  68. package/src/core/brain-updates.mjs +25 -6
  69. package/src/core/gate-mode.mjs +13 -24
  70. package/src/core/plugin-distribution.mjs +35 -1
  71. package/src/core/preflight-gate.mjs +28 -8
  72. package/src/core/preflight-receipt.mjs +11 -0
  73. package/src/core/release-defaults-handoff.mjs +89 -0
@@ -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.3.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
+ }
161
+ ]
162
+ },
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
+ }
39
175
  ]
40
176
  },
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" },
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
@@ -154,5 +382,12 @@
154
382
  "total-recall ssss status"
155
383
  ],
156
384
  "owned": "Secret-firewalled commits and pushes, worktree management, unmerged branch detection, and fleet repository hygiene."
157
- }
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
+ ]
158
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]`.
@@ -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"
@@ -2,15 +2,16 @@
2
2
  "$schema": "https://github.com/gregiteen/total-recall/blob/main/metadata.plugin.schema.json",
3
3
  "id": "mesh",
4
4
  "name": "Headscale",
5
- "version": "0.3.0",
5
+ "version": "0.3.1",
6
6
  "description": "Control-server mesh administration, Tailscale SSH, and peer node discovery.",
7
7
  "license": "MIT",
8
- "requires": [
9
- {
10
- "id": "auth",
11
- "range": ">=1.2.1"
12
- }
13
- ],
8
+ "reuse": {
9
+ "commands": [
10
+ "total-recall auth secret",
11
+ "total-recall deploy status"
12
+ ],
13
+ "owned": "Control-server mesh administration, Headscale server provisioning/updates, Tailscale SSH, and peer node discovery."
14
+ },
14
15
  "branding": {
15
16
  "name": "Headscale",
16
17
  "color": "#818cf8",
@@ -59,11 +60,25 @@
59
60
  }
60
61
  ],
61
62
  "gate": {
62
- "tasks": ["Run a command on another machine", "Copy a file to another machine", "Check or enroll machines on the mesh", "Mesh access, policy and the control server"],
63
+ "tasks": [
64
+ "Run a command on another machine",
65
+ "Copy a file to another machine",
66
+ "Check or enroll machines on the mesh",
67
+ "Mesh access, policy and the control server"
68
+ ],
63
69
  "owned_commands": [
64
- { "pattern": "ssh\\s", "use": "total-recall mesh exec <node> \"<command>\"" },
65
- { "pattern": "scp\\s", "use": "total-recall mesh file put <node> <source> <destination>" },
66
- { "pattern": "tailscale\\s+(status|ping)\\b", "use": "total-recall mesh status" }
70
+ {
71
+ "pattern": "ssh\\s",
72
+ "use": "total-recall mesh exec <node> \"<command>\""
73
+ },
74
+ {
75
+ "pattern": "scp\\s",
76
+ "use": "total-recall mesh file put <node> <source> <destination>"
77
+ },
78
+ {
79
+ "pattern": "tailscale\\s+(status|ping)\\b",
80
+ "use": "total-recall mesh status"
81
+ }
67
82
  ]
68
83
  },
69
84
  "cli": {
@@ -181,8 +196,19 @@
181
196
  "effect": "write",
182
197
  "output": "json",
183
198
  "args": [
184
- { "name": "ip", "type": "string", "label": "Mesh IPv4 address", "positional": true, "required": true },
185
- { "name": "port", "flag": "--port", "type": "string", "label": "Leader port" }
199
+ {
200
+ "name": "ip",
201
+ "type": "string",
202
+ "label": "Mesh IPv4 address",
203
+ "positional": true,
204
+ "required": true
205
+ },
206
+ {
207
+ "name": "port",
208
+ "flag": "--port",
209
+ "type": "string",
210
+ "label": "Leader port"
211
+ }
186
212
  ]
187
213
  },
188
214
  {
@@ -544,5 +570,12 @@
544
570
  "parseChecksum",
545
571
  "consoleConfig"
546
572
  ]
547
- }
573
+ },
574
+ "skills": [
575
+ {
576
+ "id": "mesh",
577
+ "path": "./skills/mesh/SKILL.md",
578
+ "description": "Control-server mesh administration, Tailscale SSH, and peer node discovery."
579
+ }
580
+ ]
548
581
  }
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: mesh
3
+ description: "Control-server mesh administration, Tailscale SSH, and peer node discovery."
4
+ version: 0.3.0
5
+ repo_scoped: false
6
+ ---
7
+
8
+ # Headscale
9
+
10
+ Control-server mesh administration, Tailscale SSH, and peer node discovery.
11
+
12
+ ## When to Use
13
+
14
+ Use the `mesh` Total Recall plugin (`total-recall mesh`) instead of ad-hoc scripts or raw commands whenever working on headscale tasks.
15
+
16
+ ## Commands
17
+
18
+ ```bash
19
+ total-recall mesh --help
20
+ total-recall mesh file # Transfer a file through authenticated mesh access and verify its destination hash
21
+ total-recall mesh status # Inspect live mesh state
22
+ total-recall mesh view # Read independent owner observations for mesh screens
23
+ total-recall mesh nodes # Mesh nodes operation
24
+ total-recall mesh doctor # Mesh doctor operation
25
+ total-recall mesh ssh # Mesh ssh operation
26
+ total-recall mesh exec # Mesh exec operation
27
+ total-recall mesh access # Mesh access operation
28
+ total-recall mesh ping # Mesh ping operation
29
+ total-recall mesh leader # Read the elected leader and its server port
30
+ total-recall mesh leader-pin # Change the pinned leader address and optional server port
31
+ total-recall mesh enroll # Mesh enroll operation
32
+ ```
33
+
34
+ ## Owned Raw Commands
35
+
36
+ This plugin owns: `ssh\s`, `scp\s`, `tailscale\s+(status|ping)\b`.
@@ -134,6 +134,7 @@ async function runOperation(argv) {
134
134
  ...Object.fromEntries([['goal', '--goal'], ['maxTurns', '--max-turns'], ['maxBudgetUsd', '--max-budget-usd'], ['maxTokens', '--max-tokens'],
135
135
  ['resultSchema', '--result-schema'], ['approvalPolicy', '--approvals'], ['questionTimeoutMs', '--question-timeout-ms']]
136
136
  .filter(([, flag]) => value(flag) !== undefined).map(([key, flag]) => [key, ['maxTurns', 'maxBudgetUsd', 'maxTokens', 'questionTimeoutMs'].includes(key) ? Number(value(flag)) : value(flag)])) });
137
+ const modelOption = () => (value('--model') === undefined ? {} : { model: value('--model') });
137
138
  let result;
138
139
  if (operation === 'status') result = {...await inspectNode(value('--node') || 'local'),documentation:documentationStatus()};
139
140
  else if (operation === 'catalog') result = { adapters: getActiveAdapters(), permissions: ['read', 'write', 'send', 'destructive'] };
@@ -176,7 +177,7 @@ async function runOperation(argv) {
176
177
  else if (operation === 'route') {
177
178
  const task = positional.join(' ');
178
179
  if (!task) throw new Error('route requires a task description');
179
- const options = { ...controls(), jev: has('--jev'), preferLocal: has('--prefer-local'), preferFrontier: has('--prefer-frontier'), node: value('--node'), cwd: value('--cwd'), allowUnknownAuth: has('--allow-unknown-auth'), ...remoteTimeout() };
180
+ const options = { ...controls(), jev: has('--jev'), preferLocal: has('--prefer-local'), preferFrontier: has('--prefer-frontier'), node: value('--node'), cwd: value('--cwd'), allowUnknownAuth: has('--allow-unknown-auth'), ...modelOption(), ...remoteTimeout() };
180
181
  result = has('--execute') ? await executeRoutedTask(task, { ...options, gate: has('--gate'), gateOptions: { tier: value('--tier') || 'fast' } }) : await routeTask(task, options);
181
182
  if (!result.ok) process.exitCode = 1;
182
183
  }
@@ -192,7 +193,7 @@ async function runOperation(argv) {
192
193
  result = await coordinateTask(task, {
193
194
  ...controls(), mode: value('--mode') || 'pipeline', execute: has('--execute'), orchestrator: value('--orchestrator'), explorer: value('--explorer'), architect: value('--architect'), implementer: value('--implementer'), verifier: value('--verifier'),
194
195
  branch: value('--branch'), subagents: !has('--no-subagents'), autoReview: has('--auto-review'), gate: has('--gate'), gateOptions: { tier: value('--tier') || 'fast' }, allowSameFamily: has('--allow-same-family'), reviewer: value('--reviewer'),
195
- node: value('--node') || 'local', cwd: value('--cwd'), allowUnknownAuth: has('--allow-unknown-auth'), ...remoteTimeout(),
196
+ node: value('--node') || 'local', cwd: value('--cwd'), allowUnknownAuth: has('--allow-unknown-auth'), ...modelOption(), ...remoteTimeout(),
196
197
  });
197
198
  if (!result.ok) process.exitCode = 1;
198
199
  }
@@ -399,7 +400,9 @@ async function runOperation(argv) {
399
400
  else if(operation==='dispatch') {
400
401
  if(!args.includes('--stdin'))throw new Error('Task requests must arrive through stdin: pass --stdin with JSON {agent, cwd, prompt}');
401
402
  const input=fs.readFileSync(0,'utf8');if(Buffer.byteLength(input)>65536)throw new Error('Task request too large');
402
- const request=validateDispatchRequest({...JSON.parse(input),...controls()});
403
+ const body=JSON.parse(input);
404
+ if(value('--model')!==undefined && body?.model!==undefined && body.model!==value('--model'))throw new Error('--model and the request model differ; give the model once');
405
+ const request=validateDispatchRequest({...body,...controls(),...modelOption()});
403
406
  // A-107: a local dispatch streams its agent's events to a live log, announced before it starts.
404
407
  const progressFile=(request.node||'local')==='local'?path.join(configDir(),'jobs',`${process.env.TR_METAHARNESS_JOB || `dispatch-${Date.now().toString(36)}-${request.agent}`}.events.jsonl`):undefined;
405
408
  if(progressFile)console.error(JSON.stringify({progress:progressFile,agent:request.agent}));