@bradygaster/squad-cli 0.9.1 → 0.9.2-insider.5

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 (276) hide show
  1. package/README.md +329 -329
  2. package/dist/cli/commands/build.d.ts.map +1 -1
  3. package/dist/cli/commands/build.js +10 -10
  4. package/dist/cli/commands/build.js.map +1 -1
  5. package/dist/cli/commands/config.d.ts +12 -0
  6. package/dist/cli/commands/config.d.ts.map +1 -0
  7. package/dist/cli/commands/config.js +157 -0
  8. package/dist/cli/commands/config.js.map +1 -0
  9. package/dist/cli/commands/consult.d.ts.map +1 -1
  10. package/dist/cli/commands/consult.js +9 -4
  11. package/dist/cli/commands/consult.js.map +1 -1
  12. package/dist/cli/commands/copilot.d.ts.map +1 -1
  13. package/dist/cli/commands/copilot.js +8 -7
  14. package/dist/cli/commands/copilot.js.map +1 -1
  15. package/dist/cli/commands/doctor.d.ts.map +1 -1
  16. package/dist/cli/commands/doctor.js +50 -17
  17. package/dist/cli/commands/doctor.js.map +1 -1
  18. package/dist/cli/commands/economy.d.ts.map +1 -1
  19. package/dist/cli/commands/economy.js +3 -2
  20. package/dist/cli/commands/economy.js.map +1 -1
  21. package/dist/cli/commands/export.d.ts.map +1 -1
  22. package/dist/cli/commands/export.js +22 -16
  23. package/dist/cli/commands/export.js.map +1 -1
  24. package/dist/cli/commands/extract.d.ts.map +1 -1
  25. package/dist/cli/commands/extract.js +14 -10
  26. package/dist/cli/commands/extract.js.map +1 -1
  27. package/dist/cli/commands/import.d.ts.map +1 -1
  28. package/dist/cli/commands/import.js +21 -18
  29. package/dist/cli/commands/import.js.map +1 -1
  30. package/dist/cli/commands/init-remote.d.ts.map +1 -1
  31. package/dist/cli/commands/init-remote.js +7 -6
  32. package/dist/cli/commands/init-remote.js.map +1 -1
  33. package/dist/cli/commands/link.d.ts.map +1 -1
  34. package/dist/cli/commands/link.js +11 -10
  35. package/dist/cli/commands/link.js.map +1 -1
  36. package/dist/cli/commands/migrate.d.ts.map +1 -1
  37. package/dist/cli/commands/migrate.js +19 -18
  38. package/dist/cli/commands/migrate.js.map +1 -1
  39. package/dist/cli/commands/personal.d.ts.map +1 -1
  40. package/dist/cli/commands/personal.js +57 -65
  41. package/dist/cli/commands/personal.js.map +1 -1
  42. package/dist/cli/commands/plugin.d.ts.map +1 -1
  43. package/dist/cli/commands/plugin.js +8 -7
  44. package/dist/cli/commands/plugin.js.map +1 -1
  45. package/dist/cli/commands/rc.d.ts.map +1 -1
  46. package/dist/cli/commands/rc.js +19 -12
  47. package/dist/cli/commands/rc.js.map +1 -1
  48. package/dist/cli/commands/schedule.d.ts.map +1 -1
  49. package/dist/cli/commands/schedule.js +6 -5
  50. package/dist/cli/commands/schedule.js.map +1 -1
  51. package/dist/cli/commands/start.d.ts.map +1 -1
  52. package/dist/cli/commands/start.js +18 -11
  53. package/dist/cli/commands/start.js.map +1 -1
  54. package/dist/cli/commands/streams.d.ts.map +1 -1
  55. package/dist/cli/commands/streams.js +3 -2
  56. package/dist/cli/commands/streams.js.map +1 -1
  57. package/dist/cli/commands/upstream.d.ts.map +1 -1
  58. package/dist/cli/commands/upstream.js +23 -19
  59. package/dist/cli/commands/upstream.js.map +1 -1
  60. package/dist/cli/commands/watch/capabilities/board.d.ts +22 -0
  61. package/dist/cli/commands/watch/capabilities/board.d.ts.map +1 -0
  62. package/dist/cli/commands/watch/capabilities/board.js +121 -0
  63. package/dist/cli/commands/watch/capabilities/board.js.map +1 -0
  64. package/dist/cli/commands/watch/capabilities/decision-hygiene.d.ts +14 -0
  65. package/dist/cli/commands/watch/capabilities/decision-hygiene.d.ts.map +1 -0
  66. package/dist/cli/commands/watch/capabilities/decision-hygiene.js +72 -0
  67. package/dist/cli/commands/watch/capabilities/decision-hygiene.js.map +1 -0
  68. package/dist/cli/commands/watch/capabilities/execute.d.ts +33 -0
  69. package/dist/cli/commands/watch/capabilities/execute.d.ts.map +1 -0
  70. package/dist/cli/commands/watch/capabilities/execute.js +119 -0
  71. package/dist/cli/commands/watch/capabilities/execute.js.map +1 -0
  72. package/dist/cli/commands/watch/capabilities/index.d.ts +7 -0
  73. package/dist/cli/commands/watch/capabilities/index.d.ts.map +1 -0
  74. package/dist/cli/commands/watch/capabilities/index.js +28 -0
  75. package/dist/cli/commands/watch/capabilities/index.js.map +1 -0
  76. package/dist/cli/commands/watch/capabilities/monitor-email.d.ts +14 -0
  77. package/dist/cli/commands/watch/capabilities/monitor-email.d.ts.map +1 -0
  78. package/dist/cli/commands/watch/capabilities/monitor-email.js +54 -0
  79. package/dist/cli/commands/watch/capabilities/monitor-email.js.map +1 -0
  80. package/dist/cli/commands/watch/capabilities/monitor-teams.d.ts +14 -0
  81. package/dist/cli/commands/watch/capabilities/monitor-teams.d.ts.map +1 -0
  82. package/dist/cli/commands/watch/capabilities/monitor-teams.js +55 -0
  83. package/dist/cli/commands/watch/capabilities/monitor-teams.js.map +1 -0
  84. package/dist/cli/commands/watch/capabilities/retro.d.ts +14 -0
  85. package/dist/cli/commands/watch/capabilities/retro.d.ts.map +1 -0
  86. package/dist/cli/commands/watch/capabilities/retro.js +81 -0
  87. package/dist/cli/commands/watch/capabilities/retro.js.map +1 -0
  88. package/dist/cli/commands/watch/capabilities/self-pull.d.ts +14 -0
  89. package/dist/cli/commands/watch/capabilities/self-pull.d.ts.map +1 -0
  90. package/dist/cli/commands/watch/capabilities/self-pull.js +33 -0
  91. package/dist/cli/commands/watch/capabilities/self-pull.js.map +1 -0
  92. package/dist/cli/commands/watch/capabilities/two-pass.d.ts +14 -0
  93. package/dist/cli/commands/watch/capabilities/two-pass.d.ts.map +1 -0
  94. package/dist/cli/commands/watch/capabilities/two-pass.js +66 -0
  95. package/dist/cli/commands/watch/capabilities/two-pass.js.map +1 -0
  96. package/dist/cli/commands/watch/capabilities/wave-dispatch.d.ts +14 -0
  97. package/dist/cli/commands/watch/capabilities/wave-dispatch.d.ts.map +1 -0
  98. package/dist/cli/commands/watch/capabilities/wave-dispatch.js +117 -0
  99. package/dist/cli/commands/watch/capabilities/wave-dispatch.js.map +1 -0
  100. package/dist/cli/commands/watch/config.d.ts +25 -0
  101. package/dist/cli/commands/watch/config.d.ts.map +1 -0
  102. package/dist/cli/commands/watch/config.js +82 -0
  103. package/dist/cli/commands/watch/config.js.map +1 -0
  104. package/dist/cli/commands/watch/index.d.ts +95 -0
  105. package/dist/cli/commands/watch/index.d.ts.map +1 -0
  106. package/dist/cli/commands/watch/index.js +704 -0
  107. package/dist/cli/commands/watch/index.js.map +1 -0
  108. package/dist/cli/commands/watch/registry.d.ts +19 -0
  109. package/dist/cli/commands/watch/registry.d.ts.map +1 -0
  110. package/dist/cli/commands/watch/registry.js +28 -0
  111. package/dist/cli/commands/watch/registry.js.map +1 -0
  112. package/dist/cli/commands/watch/types.d.ts +57 -0
  113. package/dist/cli/commands/watch/types.d.ts.map +1 -0
  114. package/dist/cli/commands/watch/types.js +8 -0
  115. package/dist/cli/commands/watch/types.js.map +1 -0
  116. package/dist/cli/core/cast.d.ts.map +1 -1
  117. package/dist/cli/core/cast.js +15 -19
  118. package/dist/cli/core/cast.js.map +1 -1
  119. package/dist/cli/core/detect-squad-dir.d.ts.map +1 -1
  120. package/dist/cli/core/detect-squad-dir.js +12 -10
  121. package/dist/cli/core/detect-squad-dir.js.map +1 -1
  122. package/dist/cli/core/email-scrub.d.ts.map +1 -1
  123. package/dist/cli/core/email-scrub.js +12 -11
  124. package/dist/cli/core/email-scrub.js.map +1 -1
  125. package/dist/cli/core/gh-cli.d.ts +13 -0
  126. package/dist/cli/core/gh-cli.d.ts.map +1 -1
  127. package/dist/cli/core/gh-cli.js +24 -0
  128. package/dist/cli/core/gh-cli.js.map +1 -1
  129. package/dist/cli/core/init.d.ts +2 -0
  130. package/dist/cli/core/init.d.ts.map +1 -1
  131. package/dist/cli/core/init.js +22 -5
  132. package/dist/cli/core/init.js.map +1 -1
  133. package/dist/cli/core/migrate-directory.d.ts.map +1 -1
  134. package/dist/cli/core/migrate-directory.js +14 -13
  135. package/dist/cli/core/migrate-directory.js.map +1 -1
  136. package/dist/cli/core/migrations.d.ts.map +1 -1
  137. package/dist/cli/core/migrations.js +22 -8
  138. package/dist/cli/core/migrations.js.map +1 -1
  139. package/dist/cli/core/nap.d.ts.map +1 -1
  140. package/dist/cli/core/nap.js +111 -49
  141. package/dist/cli/core/nap.js.map +1 -1
  142. package/dist/cli/core/project-type.d.ts.map +1 -1
  143. package/dist/cli/core/project-type.js +11 -10
  144. package/dist/cli/core/project-type.js.map +1 -1
  145. package/dist/cli/core/team-md.d.ts.map +1 -1
  146. package/dist/cli/core/team-md.js +43 -38
  147. package/dist/cli/core/team-md.js.map +1 -1
  148. package/dist/cli/core/templates.d.ts.map +1 -1
  149. package/dist/cli/core/templates.js +4 -3
  150. package/dist/cli/core/templates.js.map +1 -1
  151. package/dist/cli/core/upgrade.d.ts.map +1 -1
  152. package/dist/cli/core/upgrade.js +68 -55
  153. package/dist/cli/core/upgrade.js.map +1 -1
  154. package/dist/cli/core/version.d.ts.map +1 -1
  155. package/dist/cli/core/version.js +8 -7
  156. package/dist/cli/core/version.js.map +1 -1
  157. package/dist/cli/index.d.ts +1 -1
  158. package/dist/cli/index.d.ts.map +1 -1
  159. package/dist/cli/index.js +1 -1
  160. package/dist/cli/index.js.map +1 -1
  161. package/dist/cli/self-update.d.ts.map +1 -1
  162. package/dist/cli/self-update.js +7 -4
  163. package/dist/cli/self-update.js.map +1 -1
  164. package/dist/cli/shell/agent-name-parser.d.ts +16 -0
  165. package/dist/cli/shell/agent-name-parser.d.ts.map +1 -0
  166. package/dist/cli/shell/agent-name-parser.js +54 -0
  167. package/dist/cli/shell/agent-name-parser.js.map +1 -0
  168. package/dist/cli/shell/commands.d.ts.map +1 -1
  169. package/dist/cli/shell/commands.js +4 -3
  170. package/dist/cli/shell/commands.js.map +1 -1
  171. package/dist/cli/shell/coordinator.d.ts +4 -1
  172. package/dist/cli/shell/coordinator.d.ts.map +1 -1
  173. package/dist/cli/shell/coordinator.js +29 -26
  174. package/dist/cli/shell/coordinator.js.map +1 -1
  175. package/dist/cli/shell/index.d.ts.map +1 -1
  176. package/dist/cli/shell/index.js +33 -35
  177. package/dist/cli/shell/index.js.map +1 -1
  178. package/dist/cli/shell/lifecycle.d.ts +13 -2
  179. package/dist/cli/shell/lifecycle.d.ts.map +1 -1
  180. package/dist/cli/shell/lifecycle.js +26 -13
  181. package/dist/cli/shell/lifecycle.js.map +1 -1
  182. package/dist/cli/shell/session-store.d.ts.map +1 -1
  183. package/dist/cli/shell/session-store.js +16 -12
  184. package/dist/cli/shell/session-store.js.map +1 -1
  185. package/dist/cli/shell/spawn.d.ts +4 -1
  186. package/dist/cli/shell/spawn.d.ts.map +1 -1
  187. package/dist/cli/shell/spawn.js +28 -10
  188. package/dist/cli/shell/spawn.js.map +1 -1
  189. package/dist/cli-entry.js +83 -12
  190. package/dist/cli-entry.js.map +1 -1
  191. package/package.json +8 -4
  192. package/scripts/patch-esm-imports.mjs +105 -105
  193. package/scripts/patch-ink-rendering.mjs +115 -115
  194. package/templates/casting/Futurama.json +9 -9
  195. package/templates/casting-history.json +4 -4
  196. package/templates/casting-policy.json +37 -37
  197. package/templates/casting-reference.md +104 -104
  198. package/templates/casting-registry.json +3 -3
  199. package/templates/ceremonies.md +41 -41
  200. package/templates/charter.md +53 -53
  201. package/templates/constraint-tracking.md +38 -38
  202. package/templates/cooperative-rate-limiting.md +229 -229
  203. package/templates/copilot-instructions.md +46 -46
  204. package/templates/history.md +10 -10
  205. package/templates/identity/now.md +9 -9
  206. package/templates/identity/wisdom.md +15 -15
  207. package/templates/issue-lifecycle.md +412 -412
  208. package/templates/keda-scaler.md +164 -164
  209. package/templates/machine-capabilities.md +74 -74
  210. package/templates/mcp-config.md +90 -90
  211. package/templates/multi-agent-format.md +28 -28
  212. package/templates/orchestration-log.md +27 -27
  213. package/templates/plugin-marketplace.md +49 -49
  214. package/templates/ralph-circuit-breaker.md +313 -313
  215. package/templates/raw-agent-output.md +37 -37
  216. package/templates/roster.md +60 -60
  217. package/templates/routing.md +39 -39
  218. package/templates/run-output.md +50 -50
  219. package/templates/scribe-charter.md +123 -119
  220. package/templates/skill.md +24 -24
  221. package/templates/skills/agent-collaboration/SKILL.md +42 -42
  222. package/templates/skills/agent-conduct/SKILL.md +24 -24
  223. package/templates/skills/architectural-proposals/SKILL.md +151 -151
  224. package/templates/skills/ci-validation-gates/SKILL.md +84 -84
  225. package/templates/skills/cli-wiring/SKILL.md +47 -47
  226. package/templates/skills/client-compatibility/SKILL.md +89 -89
  227. package/templates/skills/cross-machine-coordination/SKILL.md +434 -0
  228. package/templates/skills/cross-squad/SKILL.md +114 -114
  229. package/templates/skills/distributed-mesh/SKILL.md +287 -287
  230. package/templates/skills/distributed-mesh/mesh.json.example +30 -30
  231. package/templates/skills/distributed-mesh/sync-mesh.ps1 +111 -111
  232. package/templates/skills/distributed-mesh/sync-mesh.sh +104 -104
  233. package/templates/skills/docs-standards/SKILL.md +71 -71
  234. package/templates/skills/economy-mode/SKILL.md +114 -114
  235. package/templates/skills/error-recovery/SKILL.md +99 -0
  236. package/templates/skills/external-comms/SKILL.md +329 -329
  237. package/templates/skills/gh-auth-isolation/SKILL.md +183 -183
  238. package/templates/skills/git-workflow/SKILL.md +204 -204
  239. package/templates/skills/github-multi-account/SKILL.md +95 -95
  240. package/templates/skills/history-hygiene/SKILL.md +36 -36
  241. package/templates/skills/humanizer/SKILL.md +105 -105
  242. package/templates/skills/init-mode/SKILL.md +102 -102
  243. package/templates/skills/iterative-retrieval/SKILL.md +165 -0
  244. package/templates/skills/model-selection/SKILL.md +117 -117
  245. package/templates/skills/nap/SKILL.md +24 -24
  246. package/templates/skills/notification-routing/SKILL.md +105 -0
  247. package/templates/skills/personal-squad/SKILL.md +57 -57
  248. package/templates/skills/pr-screenshots/SKILL.md +149 -0
  249. package/templates/skills/ralph-two-pass-scan/SKILL.md +35 -0
  250. package/templates/skills/reflect/SKILL.md +229 -0
  251. package/templates/skills/release-process/SKILL.md +131 -423
  252. package/templates/skills/reskill/SKILL.md +92 -92
  253. package/templates/skills/retro-enforcement/SKILL.md +148 -0
  254. package/templates/skills/reviewer-protocol/SKILL.md +79 -79
  255. package/templates/skills/secret-handling/SKILL.md +200 -200
  256. package/templates/skills/session-recovery/SKILL.md +155 -155
  257. package/templates/skills/squad-conventions/SKILL.md +69 -69
  258. package/templates/skills/test-discipline/SKILL.md +37 -37
  259. package/templates/skills/tiered-memory/SKILL.md +234 -0
  260. package/templates/skills/windows-compatibility/SKILL.md +98 -74
  261. package/templates/{squad.agent.md → squad.agent.md.template} +1316 -1287
  262. package/templates/workflows/squad-ci.yml +24 -24
  263. package/templates/workflows/squad-docs.yml +54 -54
  264. package/templates/workflows/squad-heartbeat.yml +0 -4
  265. package/templates/workflows/squad-insider-release.yml +61 -61
  266. package/templates/workflows/squad-issue-assign.yml +161 -161
  267. package/templates/workflows/squad-label-enforce.yml +181 -181
  268. package/templates/workflows/squad-preview.yml +55 -55
  269. package/templates/workflows/squad-promote.yml +120 -120
  270. package/templates/workflows/squad-release.yml +77 -77
  271. package/templates/workflows/squad-triage.yml +260 -260
  272. package/templates/workflows/sync-squad-labels.yml +169 -169
  273. package/dist/cli/commands/watch.d.ts +0 -18
  274. package/dist/cli/commands/watch.d.ts.map +0 -1
  275. package/dist/cli/commands/watch.js +0 -306
  276. package/dist/cli/commands/watch.js.map +0 -1
@@ -1,115 +1,115 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Ink Rendering Patcher for Squad CLI
5
- *
6
- * Patches ink/build/ink.js to fix scroll flicker on Windows Terminal.
7
- * Three patches are applied:
8
- *
9
- * 1. Remove trailing newline — the extra '\n' appended to output causes
10
- * logUpdate's previousLineCount to be off by one, pushing the bottom of
11
- * the UI below the viewport.
12
- *
13
- * 2. Disable clearTerminal fullscreen path — when output fills the terminal,
14
- * Ink clears the entire screen, causing violent scroll-to-top flicker.
15
- * We force the condition to `false` so logUpdate's incremental
16
- * erase-and-rewrite is always used instead.
17
- *
18
- * 3. Verify incrementalRendering passthrough — confirms that Ink forwards
19
- * the incrementalRendering option to logUpdate.create(). No code change
20
- * needed if already wired up.
21
- *
22
- * All patches are idempotent (safe to run multiple times).
23
- */
24
-
25
- import { readFileSync, writeFileSync, existsSync } from 'fs';
26
- import { join, dirname } from 'path';
27
- import { fileURLToPath } from 'url';
28
-
29
- const __dirname = dirname(fileURLToPath(import.meta.url));
30
-
31
- function patchInkRendering() {
32
- // Try multiple possible locations (npm workspaces can hoist dependencies)
33
- const possiblePaths = [
34
- // squad-cli package node_modules
35
- join(__dirname, '..', 'node_modules', 'ink', 'build', 'ink.js'),
36
- // Workspace root node_modules (common with npm workspaces)
37
- join(__dirname, '..', '..', '..', 'node_modules', 'ink', 'build', 'ink.js'),
38
- // Global install location (node_modules at parent of package)
39
- join(__dirname, '..', '..', 'ink', 'build', 'ink.js'),
40
- ];
41
-
42
- const inkJsPath = possiblePaths.find(p => existsSync(p)) ?? null;
43
-
44
- if (!inkJsPath) {
45
- // ink not installed yet — exit silently
46
- return false;
47
- }
48
-
49
- try {
50
- let content = readFileSync(inkJsPath, 'utf8');
51
- let patchCount = 0;
52
-
53
- // --- Patch 1: Remove trailing newline ---
54
- // Original: const outputToRender = output + '\n';
55
- // Patched: const outputToRender = output;
56
- const trailingNewlineSearch = "const outputToRender = output + '\\n';";
57
- const trailingNewlineReplace = 'const outputToRender = output;';
58
- if (content.includes(trailingNewlineSearch)) {
59
- content = content.replace(trailingNewlineSearch, trailingNewlineReplace);
60
- console.log(' ✅ Patch 1/3: Removed trailing newline from outputToRender');
61
- patchCount++;
62
- } else if (content.includes(trailingNewlineReplace)) {
63
- console.log(' ⏭️ Patch 1/3: Trailing newline already removed');
64
- } else {
65
- console.warn(' ⚠️ Patch 1/3: Could not find outputToRender pattern — Ink version may have changed');
66
- }
67
-
68
- // --- Patch 2: Disable clearTerminal fullscreen path ---
69
- // Original: if (isFullscreen) {
70
- // const sync = shouldSynchronize(this.options.stdout);
71
- // ...
72
- // this.options.stdout.write(ansiEscapes.clearTerminal + ...
73
- // Patched: if (false) {
74
- //
75
- // We match `if (isFullscreen) {` only when followed by the clearTerminal
76
- // usage to avoid replacing unrelated isFullscreen references.
77
- const fullscreenSearch = /if \(isFullscreen\) \{\s*\n\s*const sync = shouldSynchronize/;
78
- const fullscreenAlreadyPatched = /if \(false\) \{\s*\n\s*const sync = shouldSynchronize/;
79
- if (fullscreenSearch.test(content)) {
80
- content = content.replace(
81
- /if \(isFullscreen\) (\{\s*\n\s*const sync = shouldSynchronize)/,
82
- 'if (false) $1'
83
- );
84
- console.log(' ✅ Patch 2/3: Disabled clearTerminal fullscreen path');
85
- patchCount++;
86
- } else if (fullscreenAlreadyPatched.test(content)) {
87
- console.log(' ⏭️ Patch 2/3: clearTerminal path already disabled');
88
- } else {
89
- console.warn(' ⚠️ Patch 2/3: Could not find isFullscreen pattern — Ink version may have changed');
90
- }
91
-
92
- // --- Patch 3: Verify incrementalRendering passthrough ---
93
- const incrementalPattern = 'incremental: options.incrementalRendering';
94
- if (content.includes(incrementalPattern)) {
95
- console.log(' ✅ Patch 3/3: incrementalRendering passthrough verified (no change needed)');
96
- } else {
97
- console.warn(' ⚠️ Patch 3/3: incrementalRendering passthrough not found — Ink version may have changed');
98
- }
99
-
100
- if (patchCount > 0) {
101
- writeFileSync(inkJsPath, content, 'utf8');
102
- console.log(`✅ Patched ink.js with ${patchCount} rendering fix(es) for scroll flicker`);
103
- return true;
104
- }
105
-
106
- return false;
107
- } catch (err) {
108
- console.warn('⚠️ Failed to patch ink.js rendering:', err.message);
109
- console.warn(' Scroll flicker may occur on Windows Terminal.');
110
- return false;
111
- }
112
- }
113
-
114
- // Run patch
115
- patchInkRendering();
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Ink Rendering Patcher for Squad CLI
5
+ *
6
+ * Patches ink/build/ink.js to fix scroll flicker on Windows Terminal.
7
+ * Three patches are applied:
8
+ *
9
+ * 1. Remove trailing newline — the extra '\n' appended to output causes
10
+ * logUpdate's previousLineCount to be off by one, pushing the bottom of
11
+ * the UI below the viewport.
12
+ *
13
+ * 2. Disable clearTerminal fullscreen path — when output fills the terminal,
14
+ * Ink clears the entire screen, causing violent scroll-to-top flicker.
15
+ * We force the condition to `false` so logUpdate's incremental
16
+ * erase-and-rewrite is always used instead.
17
+ *
18
+ * 3. Verify incrementalRendering passthrough — confirms that Ink forwards
19
+ * the incrementalRendering option to logUpdate.create(). No code change
20
+ * needed if already wired up.
21
+ *
22
+ * All patches are idempotent (safe to run multiple times).
23
+ */
24
+
25
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
26
+ import { join, dirname } from 'path';
27
+ import { fileURLToPath } from 'url';
28
+
29
+ const __dirname = dirname(fileURLToPath(import.meta.url));
30
+
31
+ function patchInkRendering() {
32
+ // Try multiple possible locations (npm workspaces can hoist dependencies)
33
+ const possiblePaths = [
34
+ // squad-cli package node_modules
35
+ join(__dirname, '..', 'node_modules', 'ink', 'build', 'ink.js'),
36
+ // Workspace root node_modules (common with npm workspaces)
37
+ join(__dirname, '..', '..', '..', 'node_modules', 'ink', 'build', 'ink.js'),
38
+ // Global install location (node_modules at parent of package)
39
+ join(__dirname, '..', '..', 'ink', 'build', 'ink.js'),
40
+ ];
41
+
42
+ const inkJsPath = possiblePaths.find(p => existsSync(p)) ?? null;
43
+
44
+ if (!inkJsPath) {
45
+ // ink not installed yet — exit silently
46
+ return false;
47
+ }
48
+
49
+ try {
50
+ let content = readFileSync(inkJsPath, 'utf8');
51
+ let patchCount = 0;
52
+
53
+ // --- Patch 1: Remove trailing newline ---
54
+ // Original: const outputToRender = output + '\n';
55
+ // Patched: const outputToRender = output;
56
+ const trailingNewlineSearch = "const outputToRender = output + '\\n';";
57
+ const trailingNewlineReplace = 'const outputToRender = output;';
58
+ if (content.includes(trailingNewlineSearch)) {
59
+ content = content.replace(trailingNewlineSearch, trailingNewlineReplace);
60
+ console.log(' ✅ Patch 1/3: Removed trailing newline from outputToRender');
61
+ patchCount++;
62
+ } else if (content.includes(trailingNewlineReplace)) {
63
+ console.log(' ⏭️ Patch 1/3: Trailing newline already removed');
64
+ } else {
65
+ console.warn(' ⚠️ Patch 1/3: Could not find outputToRender pattern — Ink version may have changed');
66
+ }
67
+
68
+ // --- Patch 2: Disable clearTerminal fullscreen path ---
69
+ // Original: if (isFullscreen) {
70
+ // const sync = shouldSynchronize(this.options.stdout);
71
+ // ...
72
+ // this.options.stdout.write(ansiEscapes.clearTerminal + ...
73
+ // Patched: if (false) {
74
+ //
75
+ // We match `if (isFullscreen) {` only when followed by the clearTerminal
76
+ // usage to avoid replacing unrelated isFullscreen references.
77
+ const fullscreenSearch = /if \(isFullscreen\) \{\s*\n\s*const sync = shouldSynchronize/;
78
+ const fullscreenAlreadyPatched = /if \(false\) \{\s*\n\s*const sync = shouldSynchronize/;
79
+ if (fullscreenSearch.test(content)) {
80
+ content = content.replace(
81
+ /if \(isFullscreen\) (\{\s*\n\s*const sync = shouldSynchronize)/,
82
+ 'if (false) $1'
83
+ );
84
+ console.log(' ✅ Patch 2/3: Disabled clearTerminal fullscreen path');
85
+ patchCount++;
86
+ } else if (fullscreenAlreadyPatched.test(content)) {
87
+ console.log(' ⏭️ Patch 2/3: clearTerminal path already disabled');
88
+ } else {
89
+ console.warn(' ⚠️ Patch 2/3: Could not find isFullscreen pattern — Ink version may have changed');
90
+ }
91
+
92
+ // --- Patch 3: Verify incrementalRendering passthrough ---
93
+ const incrementalPattern = 'incremental: options.incrementalRendering';
94
+ if (content.includes(incrementalPattern)) {
95
+ console.log(' ✅ Patch 3/3: incrementalRendering passthrough verified (no change needed)');
96
+ } else {
97
+ console.warn(' ⚠️ Patch 3/3: incrementalRendering passthrough not found — Ink version may have changed');
98
+ }
99
+
100
+ if (patchCount > 0) {
101
+ writeFileSync(inkJsPath, content, 'utf8');
102
+ console.log(`✅ Patched ink.js with ${patchCount} rendering fix(es) for scroll flicker`);
103
+ return true;
104
+ }
105
+
106
+ return false;
107
+ } catch (err) {
108
+ console.warn('⚠️ Failed to patch ink.js rendering:', err.message);
109
+ console.warn(' Scroll flicker may occur on Windows Terminal.');
110
+ return false;
111
+ }
112
+ }
113
+
114
+ // Run patch
115
+ patchInkRendering();
@@ -1,10 +1,10 @@
1
- [
2
- "Fry",
3
- "Leela",
4
- "Bender",
5
- "Farnsworth",
6
- "Zoidberg",
7
- "Amy",
8
- "Zapp",
9
- "Kif"
1
+ [
2
+ "Fry",
3
+ "Leela",
4
+ "Bender",
5
+ "Farnsworth",
6
+ "Zoidberg",
7
+ "Amy",
8
+ "Zapp",
9
+ "Kif"
10
10
  ]
@@ -1,4 +1,4 @@
1
- {
2
- "universe_usage_history": [],
3
- "assignment_cast_snapshots": {}
4
- }
1
+ {
2
+ "universe_usage_history": [],
3
+ "assignment_cast_snapshots": {}
4
+ }
@@ -1,37 +1,37 @@
1
- {
2
- "casting_policy_version": "1.1",
3
- "allowlist_universes": [
4
- "The Usual Suspects",
5
- "Reservoir Dogs",
6
- "Alien",
7
- "Ocean's Eleven",
8
- "Arrested Development",
9
- "Star Wars",
10
- "The Matrix",
11
- "Firefly",
12
- "The Goonies",
13
- "The Simpsons",
14
- "Breaking Bad",
15
- "Lost",
16
- "Marvel Cinematic Universe",
17
- "DC Universe",
18
- "Futurama"
19
- ],
20
- "universe_capacity": {
21
- "The Usual Suspects": 6,
22
- "Reservoir Dogs": 8,
23
- "Alien": 8,
24
- "Ocean's Eleven": 14,
25
- "Arrested Development": 15,
26
- "Star Wars": 12,
27
- "The Matrix": 10,
28
- "Firefly": 10,
29
- "The Goonies": 8,
30
- "The Simpsons": 20,
31
- "Breaking Bad": 12,
32
- "Lost": 18,
33
- "Marvel Cinematic Universe": 25,
34
- "DC Universe": 18,
35
- "Futurama": 12
36
- }
37
- }
1
+ {
2
+ "casting_policy_version": "1.1",
3
+ "allowlist_universes": [
4
+ "The Usual Suspects",
5
+ "Reservoir Dogs",
6
+ "Alien",
7
+ "Ocean's Eleven",
8
+ "Arrested Development",
9
+ "Star Wars",
10
+ "The Matrix",
11
+ "Firefly",
12
+ "The Goonies",
13
+ "The Simpsons",
14
+ "Breaking Bad",
15
+ "Lost",
16
+ "Marvel Cinematic Universe",
17
+ "DC Universe",
18
+ "Futurama"
19
+ ],
20
+ "universe_capacity": {
21
+ "The Usual Suspects": 6,
22
+ "Reservoir Dogs": 8,
23
+ "Alien": 8,
24
+ "Ocean's Eleven": 14,
25
+ "Arrested Development": 15,
26
+ "Star Wars": 12,
27
+ "The Matrix": 10,
28
+ "Firefly": 10,
29
+ "The Goonies": 8,
30
+ "The Simpsons": 20,
31
+ "Breaking Bad": 12,
32
+ "Lost": 18,
33
+ "Marvel Cinematic Universe": 25,
34
+ "DC Universe": 18,
35
+ "Futurama": 12
36
+ }
37
+ }
@@ -1,104 +1,104 @@
1
- # Casting Reference
2
-
3
- On-demand reference for Squad's casting system. Loaded during Init Mode or when adding team members.
4
-
5
- ## Universe Table
6
-
7
- | Universe | Capacity | Shape Tags | Resonance Signals |
8
- |---|---|---|---|
9
- | The Usual Suspects | 6 | small, noir, ensemble | crime, heist, mystery, deception |
10
- | Reservoir Dogs | 8 | small, noir, ensemble | crime, heist, tension, loyalty |
11
- | Alien | 8 | small, sci-fi, survival | space, isolation, threat, engineering |
12
- | Ocean's Eleven | 14 | medium, heist, ensemble | planning, coordination, roles, charm |
13
- | Arrested Development | 15 | medium, comedy, ensemble | dysfunction, business, family, satire |
14
- | Star Wars | 12 | medium, sci-fi, epic | conflict, mentorship, legacy, rebellion |
15
- | The Matrix | 10 | medium, sci-fi, cyberpunk | systems, reality, hacking, philosophy |
16
- | Firefly | 10 | medium, sci-fi, western | frontier, crew, independence, smuggling |
17
- | The Goonies | 8 | small, adventure, ensemble | exploration, treasure, kids, teamwork |
18
- | The Simpsons | 20 | large, comedy, ensemble | satire, community, family, absurdity |
19
- | Breaking Bad | 12 | medium, drama, tension | chemistry, transformation, consequence, power |
20
- | Lost | 18 | large, mystery, ensemble | survival, mystery, groups, leadership |
21
- | Marvel Cinematic Universe | 25 | large, action, ensemble | heroism, teamwork, powers, scale |
22
- | DC Universe | 18 | large, action, ensemble | justice, duality, powers, mythology |
23
- | Futurama | 12 | medium, sci-fi, comedy | future, robots, space, absurdity |
24
-
25
- **Total: 15 universes** — capacity range 6–25.
26
-
27
- ## Selection Algorithm
28
-
29
- Universe selection is deterministic. Score each universe and pick the highest:
30
-
31
- ```
32
- score = size_fit + shape_fit + resonance_fit + LRU
33
- ```
34
-
35
- | Factor | Description |
36
- |---|---|
37
- | `size_fit` | How well the universe capacity matches the team size. Prefer universes where capacity ≥ agent_count with minimal waste. |
38
- | `shape_fit` | Match universe shape tags against the assignment shape derived from the project description. |
39
- | `resonance_fit` | Match universe resonance signals against session and repo context signals. |
40
- | `LRU` | Least-recently-used bonus — prefer universes not used in recent assignments (from `history.json`). |
41
-
42
- Same inputs → same choice (unless LRU changes between assignments).
43
-
44
- ## Casting State File Schemas
45
-
46
- ### policy.json
47
-
48
- Source template: `.squad/templates/casting-policy.json`
49
- Runtime location: `.squad/casting/policy.json`
50
-
51
- ```json
52
- {
53
- "casting_policy_version": "1.1",
54
- "allowlist_universes": ["Universe Name", "..."],
55
- "universe_capacity": {
56
- "Universe Name": 10
57
- }
58
- }
59
- ```
60
-
61
- ### registry.json
62
-
63
- Source template: `.squad/templates/casting-registry.json`
64
- Runtime location: `.squad/casting/registry.json`
65
-
66
- ```json
67
- {
68
- "agents": {
69
- "agent-role-id": {
70
- "persistent_name": "CharacterName",
71
- "universe": "Universe Name",
72
- "created_at": "ISO-8601",
73
- "legacy_named": false,
74
- "status": "active"
75
- }
76
- }
77
- }
78
- ```
79
-
80
- ### history.json
81
-
82
- Source template: `.squad/templates/casting-history.json`
83
- Runtime location: `.squad/casting/history.json`
84
-
85
- ```json
86
- {
87
- "universe_usage_history": [
88
- {
89
- "universe": "Universe Name",
90
- "assignment_id": "unique-id",
91
- "used_at": "ISO-8601"
92
- }
93
- ],
94
- "assignment_cast_snapshots": {
95
- "assignment-id": {
96
- "universe": "Universe Name",
97
- "agents": {
98
- "role-id": "CharacterName"
99
- },
100
- "created_at": "ISO-8601"
101
- }
102
- }
103
- }
104
- ```
1
+ # Casting Reference
2
+
3
+ On-demand reference for Squad's casting system. Loaded during Init Mode or when adding team members.
4
+
5
+ ## Universe Table
6
+
7
+ | Universe | Capacity | Shape Tags | Resonance Signals |
8
+ |---|---|---|---|
9
+ | The Usual Suspects | 6 | small, noir, ensemble | crime, heist, mystery, deception |
10
+ | Reservoir Dogs | 8 | small, noir, ensemble | crime, heist, tension, loyalty |
11
+ | Alien | 8 | small, sci-fi, survival | space, isolation, threat, engineering |
12
+ | Ocean's Eleven | 14 | medium, heist, ensemble | planning, coordination, roles, charm |
13
+ | Arrested Development | 15 | medium, comedy, ensemble | dysfunction, business, family, satire |
14
+ | Star Wars | 12 | medium, sci-fi, epic | conflict, mentorship, legacy, rebellion |
15
+ | The Matrix | 10 | medium, sci-fi, cyberpunk | systems, reality, hacking, philosophy |
16
+ | Firefly | 10 | medium, sci-fi, western | frontier, crew, independence, smuggling |
17
+ | The Goonies | 8 | small, adventure, ensemble | exploration, treasure, kids, teamwork |
18
+ | The Simpsons | 20 | large, comedy, ensemble | satire, community, family, absurdity |
19
+ | Breaking Bad | 12 | medium, drama, tension | chemistry, transformation, consequence, power |
20
+ | Lost | 18 | large, mystery, ensemble | survival, mystery, groups, leadership |
21
+ | Marvel Cinematic Universe | 25 | large, action, ensemble | heroism, teamwork, powers, scale |
22
+ | DC Universe | 18 | large, action, ensemble | justice, duality, powers, mythology |
23
+ | Futurama | 12 | medium, sci-fi, comedy | future, robots, space, absurdity |
24
+
25
+ **Total: 15 universes** — capacity range 6–25.
26
+
27
+ ## Selection Algorithm
28
+
29
+ Universe selection is deterministic. Score each universe and pick the highest:
30
+
31
+ ```
32
+ score = size_fit + shape_fit + resonance_fit + LRU
33
+ ```
34
+
35
+ | Factor | Description |
36
+ |---|---|
37
+ | `size_fit` | How well the universe capacity matches the team size. Prefer universes where capacity ≥ agent_count with minimal waste. |
38
+ | `shape_fit` | Match universe shape tags against the assignment shape derived from the project description. |
39
+ | `resonance_fit` | Match universe resonance signals against session and repo context signals. |
40
+ | `LRU` | Least-recently-used bonus — prefer universes not used in recent assignments (from `history.json`). |
41
+
42
+ Same inputs → same choice (unless LRU changes between assignments).
43
+
44
+ ## Casting State File Schemas
45
+
46
+ ### policy.json
47
+
48
+ Source template: `.squad/templates/casting-policy.json`
49
+ Runtime location: `.squad/casting/policy.json`
50
+
51
+ ```json
52
+ {
53
+ "casting_policy_version": "1.1",
54
+ "allowlist_universes": ["Universe Name", "..."],
55
+ "universe_capacity": {
56
+ "Universe Name": 10
57
+ }
58
+ }
59
+ ```
60
+
61
+ ### registry.json
62
+
63
+ Source template: `.squad/templates/casting-registry.json`
64
+ Runtime location: `.squad/casting/registry.json`
65
+
66
+ ```json
67
+ {
68
+ "agents": {
69
+ "agent-role-id": {
70
+ "persistent_name": "CharacterName",
71
+ "universe": "Universe Name",
72
+ "created_at": "ISO-8601",
73
+ "legacy_named": false,
74
+ "status": "active"
75
+ }
76
+ }
77
+ }
78
+ ```
79
+
80
+ ### history.json
81
+
82
+ Source template: `.squad/templates/casting-history.json`
83
+ Runtime location: `.squad/casting/history.json`
84
+
85
+ ```json
86
+ {
87
+ "universe_usage_history": [
88
+ {
89
+ "universe": "Universe Name",
90
+ "assignment_id": "unique-id",
91
+ "used_at": "ISO-8601"
92
+ }
93
+ ],
94
+ "assignment_cast_snapshots": {
95
+ "assignment-id": {
96
+ "universe": "Universe Name",
97
+ "agents": {
98
+ "role-id": "CharacterName"
99
+ },
100
+ "created_at": "ISO-8601"
101
+ }
102
+ }
103
+ }
104
+ ```
@@ -1,3 +1,3 @@
1
- {
2
- "agents": {}
3
- }
1
+ {
2
+ "agents": {}
3
+ }
@@ -1,41 +1,41 @@
1
- # Ceremonies
2
-
3
- > Team meetings that happen before or after work. Each squad configures their own.
4
-
5
- ## Design Review
6
-
7
- | Field | Value |
8
- |-------|-------|
9
- | **Trigger** | auto |
10
- | **When** | before |
11
- | **Condition** | multi-agent task involving 2+ agents modifying shared systems |
12
- | **Facilitator** | lead |
13
- | **Participants** | all-relevant |
14
- | **Time budget** | focused |
15
- | **Enabled** | ✅ yes |
16
-
17
- **Agenda:**
18
- 1. Review the task and requirements
19
- 2. Agree on interfaces and contracts between components
20
- 3. Identify risks and edge cases
21
- 4. Assign action items
22
-
23
- ---
24
-
25
- ## Retrospective
26
-
27
- | Field | Value |
28
- |-------|-------|
29
- | **Trigger** | auto |
30
- | **When** | after |
31
- | **Condition** | build failure, test failure, or reviewer rejection |
32
- | **Facilitator** | lead |
33
- | **Participants** | all-involved |
34
- | **Time budget** | focused |
35
- | **Enabled** | ✅ yes |
36
-
37
- **Agenda:**
38
- 1. What happened? (facts only)
39
- 2. Root cause analysis
40
- 3. What should change?
41
- 4. Action items for next iteration
1
+ # Ceremonies
2
+
3
+ > Team meetings that happen before or after work. Each squad configures their own.
4
+
5
+ ## Design Review
6
+
7
+ | Field | Value |
8
+ |-------|-------|
9
+ | **Trigger** | auto |
10
+ | **When** | before |
11
+ | **Condition** | multi-agent task involving 2+ agents modifying shared systems |
12
+ | **Facilitator** | lead |
13
+ | **Participants** | all-relevant |
14
+ | **Time budget** | focused |
15
+ | **Enabled** | ✅ yes |
16
+
17
+ **Agenda:**
18
+ 1. Review the task and requirements
19
+ 2. Agree on interfaces and contracts between components
20
+ 3. Identify risks and edge cases
21
+ 4. Assign action items
22
+
23
+ ---
24
+
25
+ ## Retrospective
26
+
27
+ | Field | Value |
28
+ |-------|-------|
29
+ | **Trigger** | auto |
30
+ | **When** | after |
31
+ | **Condition** | build failure, test failure, or reviewer rejection |
32
+ | **Facilitator** | lead |
33
+ | **Participants** | all-involved |
34
+ | **Time budget** | focused |
35
+ | **Enabled** | ✅ yes |
36
+
37
+ **Agenda:**
38
+ 1. What happened? (facts only)
39
+ 2. Root cause analysis
40
+ 3. What should change?
41
+ 4. Action items for next iteration