codebyplan 1.13.65 → 1.13.67

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 (300) hide show
  1. package/README.md +118 -75
  2. package/dist/__tests__/helpers.d.ts +22 -0
  3. package/dist/__tests__/helpers.d.ts.map +1 -0
  4. package/dist/ci-public.d.ts +20 -0
  5. package/dist/ci-public.d.ts.map +1 -0
  6. package/dist/ci.js +11 -2
  7. package/dist/cli/arch-map.d.ts +33 -0
  8. package/dist/cli/arch-map.d.ts.map +1 -0
  9. package/dist/cli/branch.d.ts +10 -0
  10. package/dist/cli/branch.d.ts.map +1 -0
  11. package/dist/cli/bump.d.ts +12 -0
  12. package/dist/cli/bump.d.ts.map +1 -0
  13. package/dist/cli/cd.d.ts +20 -0
  14. package/dist/cli/cd.d.ts.map +1 -0
  15. package/dist/cli/check.d.ts +30 -0
  16. package/dist/cli/check.d.ts.map +1 -0
  17. package/dist/cli/checkpoint.d.ts +17 -0
  18. package/dist/cli/checkpoint.d.ts.map +1 -0
  19. package/dist/cli/ci.d.ts +31 -0
  20. package/dist/cli/ci.d.ts.map +1 -0
  21. package/dist/cli/claude/__test-helpers__/expect-manifest.d.ts +7 -0
  22. package/dist/cli/claude/__test-helpers__/expect-manifest.d.ts.map +1 -0
  23. package/dist/cli/claude/__test-helpers__/tmp-fixture.d.ts +64 -0
  24. package/dist/cli/claude/__test-helpers__/tmp-fixture.d.ts.map +1 -0
  25. package/dist/cli/claude/audit-mode.d.ts +16 -0
  26. package/dist/cli/claude/audit-mode.d.ts.map +1 -0
  27. package/dist/cli/claude/generate.d.ts +23 -0
  28. package/dist/cli/claude/generate.d.ts.map +1 -0
  29. package/dist/cli/claude/install.d.ts +55 -0
  30. package/dist/cli/claude/install.d.ts.map +1 -0
  31. package/dist/cli/claude/migrate-memory.d.ts +117 -0
  32. package/dist/cli/claude/migrate-memory.d.ts.map +1 -0
  33. package/dist/cli/claude/readme.d.ts +28 -0
  34. package/dist/cli/claude/readme.d.ts.map +1 -0
  35. package/dist/cli/claude/status.d.ts +41 -0
  36. package/dist/cli/claude/status.d.ts.map +1 -0
  37. package/dist/cli/claude/uninstall.d.ts +21 -0
  38. package/dist/cli/claude/uninstall.d.ts.map +1 -0
  39. package/dist/cli/claude/update.d.ts +25 -0
  40. package/dist/cli/claude/update.d.ts.map +1 -0
  41. package/dist/cli/claude/verify-parity.d.ts +25 -0
  42. package/dist/cli/claude/verify-parity.d.ts.map +1 -0
  43. package/dist/cli/cleanup-plan-folders.d.ts +21 -0
  44. package/dist/cli/cleanup-plan-folders.d.ts.map +1 -0
  45. package/dist/cli/commit.d.ts +25 -0
  46. package/dist/cli/commit.d.ts.map +1 -0
  47. package/dist/cli/config.d.ts +50 -0
  48. package/dist/cli/config.d.ts.map +1 -0
  49. package/dist/cli/confirm.d.ts +9 -0
  50. package/dist/cli/confirm.d.ts.map +1 -0
  51. package/dist/cli/create-org.d.ts +9 -0
  52. package/dist/cli/create-org.d.ts.map +1 -0
  53. package/dist/cli/create-project.d.ts +10 -0
  54. package/dist/cli/create-project.d.ts.map +1 -0
  55. package/dist/cli/create-repo.d.ts +14 -0
  56. package/dist/cli/create-repo.d.ts.map +1 -0
  57. package/dist/cli/docs.d.ts +41 -0
  58. package/dist/cli/docs.d.ts.map +1 -0
  59. package/dist/cli/doctor.d.ts +17 -0
  60. package/dist/cli/doctor.d.ts.map +1 -0
  61. package/dist/cli/e2e/verify-round.d.ts +46 -0
  62. package/dist/cli/e2e/verify-round.d.ts.map +1 -0
  63. package/dist/cli/e2e.d.ts +11 -0
  64. package/dist/cli/e2e.d.ts.map +1 -0
  65. package/dist/cli/eslint.d.ts +20 -0
  66. package/dist/cli/eslint.d.ts.map +1 -0
  67. package/dist/cli/export-writer.d.ts +99 -0
  68. package/dist/cli/export-writer.d.ts.map +1 -0
  69. package/dist/cli/handoff.d.ts +13 -0
  70. package/dist/cli/handoff.d.ts.map +1 -0
  71. package/dist/cli/login.d.ts +10 -0
  72. package/dist/cli/login.d.ts.map +1 -0
  73. package/dist/cli/logout.d.ts +2 -0
  74. package/dist/cli/logout.d.ts.map +1 -0
  75. package/dist/cli/lsp.d.ts +16 -0
  76. package/dist/cli/lsp.d.ts.map +1 -0
  77. package/dist/cli/migration-collisions.d.ts +10 -0
  78. package/dist/cli/migration-collisions.d.ts.map +1 -0
  79. package/dist/cli/ports.d.ts +29 -0
  80. package/dist/cli/ports.d.ts.map +1 -0
  81. package/dist/cli/process-exit-signal.d.ts +24 -0
  82. package/dist/cli/process-exit-signal.d.ts.map +1 -0
  83. package/dist/cli/round.d.ts +79 -0
  84. package/dist/cli/round.d.ts.map +1 -0
  85. package/dist/cli/scaffold-publish-workflow.d.ts +16 -0
  86. package/dist/cli/scaffold-publish-workflow.d.ts.map +1 -0
  87. package/dist/cli/session/freshness-gate.d.ts +21 -0
  88. package/dist/cli/session/freshness-gate.d.ts.map +1 -0
  89. package/dist/cli/session/home-ff.d.ts +16 -0
  90. package/dist/cli/session/home-ff.d.ts.map +1 -0
  91. package/dist/cli/session/infra-files.d.ts +21 -0
  92. package/dist/cli/session/infra-files.d.ts.map +1 -0
  93. package/dist/cli/session/start.d.ts +70 -0
  94. package/dist/cli/session/start.d.ts.map +1 -0
  95. package/dist/cli/session.d.ts +17 -0
  96. package/dist/cli/session.d.ts.map +1 -0
  97. package/dist/cli/setup.d.ts +2 -0
  98. package/dist/cli/setup.d.ts.map +1 -0
  99. package/dist/cli/ship.d.ts +16 -0
  100. package/dist/cli/ship.d.ts.map +1 -0
  101. package/dist/cli/slug.d.ts +10 -0
  102. package/dist/cli/slug.d.ts.map +1 -0
  103. package/dist/cli/standalone-task.d.ts +31 -0
  104. package/dist/cli/standalone-task.d.ts.map +1 -0
  105. package/dist/cli/statusline.d.ts +10 -0
  106. package/dist/cli/statusline.d.ts.map +1 -0
  107. package/dist/cli/supabase/new-migration.d.ts +24 -0
  108. package/dist/cli/supabase/new-migration.d.ts.map +1 -0
  109. package/dist/cli/supabase/preview-check.d.ts +30 -0
  110. package/dist/cli/supabase/preview-check.d.ts.map +1 -0
  111. package/dist/cli/supabase/resolve-preview.d.ts +19 -0
  112. package/dist/cli/supabase/resolve-preview.d.ts.map +1 -0
  113. package/dist/cli/supabase/teardown-preview.d.ts +22 -0
  114. package/dist/cli/supabase/teardown-preview.d.ts.map +1 -0
  115. package/dist/cli/sync.d.ts +13 -0
  116. package/dist/cli/sync.d.ts.map +1 -0
  117. package/dist/cli/task.d.ts +17 -0
  118. package/dist/cli/task.d.ts.map +1 -0
  119. package/dist/cli/tech-stack.d.ts +11 -0
  120. package/dist/cli/tech-stack.d.ts.map +1 -0
  121. package/dist/cli/upgrade-auth.d.ts +2 -0
  122. package/dist/cli/upgrade-auth.d.ts.map +1 -0
  123. package/dist/cli/upload-e2e-images.d.ts +18 -0
  124. package/dist/cli/upload-e2e-images.d.ts.map +1 -0
  125. package/dist/cli/validate-waves.d.ts +22 -0
  126. package/dist/cli/validate-waves.d.ts.map +1 -0
  127. package/dist/cli/version-status.d.ts +42 -0
  128. package/dist/cli/version-status.d.ts.map +1 -0
  129. package/dist/cli/watch.d.ts +18 -0
  130. package/dist/cli/watch.d.ts.map +1 -0
  131. package/dist/cli/whoami.d.ts +5 -0
  132. package/dist/cli/whoami.d.ts.map +1 -0
  133. package/dist/cli/worktree/add.d.ts +81 -0
  134. package/dist/cli/worktree/add.d.ts.map +1 -0
  135. package/dist/cli/worktree/create.d.ts +46 -0
  136. package/dist/cli/worktree/create.d.ts.map +1 -0
  137. package/dist/cli/worktree/path.d.ts +19 -0
  138. package/dist/cli/worktree/path.d.ts.map +1 -0
  139. package/dist/cli/worktree/remove.d.ts +92 -0
  140. package/dist/cli/worktree/remove.d.ts.map +1 -0
  141. package/dist/cli/worktree.d.ts +15 -0
  142. package/dist/cli/worktree.d.ts.map +1 -0
  143. package/dist/cli.js +5697 -5322
  144. package/dist/dispatch.d.ts +64 -0
  145. package/dist/dispatch.d.ts.map +1 -0
  146. package/dist/index.d.ts +2 -0
  147. package/dist/index.d.ts.map +1 -0
  148. package/dist/lib/agents-generator.d.ts +42 -0
  149. package/dist/lib/agents-generator.d.ts.map +1 -0
  150. package/dist/lib/api.d.ts +54 -0
  151. package/dist/lib/api.d.ts.map +1 -0
  152. package/dist/lib/atomic-write.d.ts +27 -0
  153. package/dist/lib/atomic-write.d.ts.map +1 -0
  154. package/dist/lib/branch-checkout.d.ts +47 -0
  155. package/dist/lib/branch-checkout.d.ts.map +1 -0
  156. package/dist/lib/branch-port-resolver.d.ts +58 -0
  157. package/dist/lib/branch-port-resolver.d.ts.map +1 -0
  158. package/dist/lib/bump.d.ts +97 -0
  159. package/dist/lib/bump.d.ts.map +1 -0
  160. package/dist/lib/cd-init.d.ts +86 -0
  161. package/dist/lib/cd-init.d.ts.map +1 -0
  162. package/dist/lib/check-baseline.d.ts +91 -0
  163. package/dist/lib/check-baseline.d.ts.map +1 -0
  164. package/dist/lib/check.d.ts +178 -0
  165. package/dist/lib/check.d.ts.map +1 -0
  166. package/dist/lib/ci-init.d.ts +106 -0
  167. package/dist/lib/ci-init.d.ts.map +1 -0
  168. package/dist/lib/ci-resolve.d.ts +60 -0
  169. package/dist/lib/ci-resolve.d.ts.map +1 -0
  170. package/dist/lib/claude-mode-audit.d.ts +41 -0
  171. package/dist/lib/claude-mode-audit.d.ts.map +1 -0
  172. package/dist/lib/claude-plan.d.ts +34 -0
  173. package/dist/lib/claude-plan.d.ts.map +1 -0
  174. package/dist/lib/commit-scope.d.ts +21 -0
  175. package/dist/lib/commit-scope.d.ts.map +1 -0
  176. package/dist/lib/e2e.d.ts +157 -0
  177. package/dist/lib/e2e.d.ts.map +1 -0
  178. package/dist/lib/eslint-generator.d.ts +86 -0
  179. package/dist/lib/eslint-generator.d.ts.map +1 -0
  180. package/dist/lib/file-lock.d.ts +44 -0
  181. package/dist/lib/file-lock.d.ts.map +1 -0
  182. package/dist/lib/flags.d.ts +115 -0
  183. package/dist/lib/flags.d.ts.map +1 -0
  184. package/dist/lib/gh-required-checks.d.ts +76 -0
  185. package/dist/lib/gh-required-checks.d.ts.map +1 -0
  186. package/dist/lib/git-utils.d.ts +46 -0
  187. package/dist/lib/git-utils.d.ts.map +1 -0
  188. package/dist/lib/gitignore-block.d.ts +32 -0
  189. package/dist/lib/gitignore-block.d.ts.map +1 -0
  190. package/dist/lib/gitignore-detect.d.ts +117 -0
  191. package/dist/lib/gitignore-detect.d.ts.map +1 -0
  192. package/dist/lib/handoff-file.d.ts +63 -0
  193. package/dist/lib/handoff-file.d.ts.map +1 -0
  194. package/dist/lib/hash.d.ts +9 -0
  195. package/dist/lib/hash.d.ts.map +1 -0
  196. package/dist/lib/lsp-detect.d.ts +42 -0
  197. package/dist/lib/lsp-detect.d.ts.map +1 -0
  198. package/dist/lib/manifest.d.ts +88 -0
  199. package/dist/lib/manifest.d.ts.map +1 -0
  200. package/dist/lib/mcp-client.d.ts +39 -0
  201. package/dist/lib/mcp-client.d.ts.map +1 -0
  202. package/dist/lib/migrate-branch-model.d.ts +34 -0
  203. package/dist/lib/migrate-branch-model.d.ts.map +1 -0
  204. package/dist/lib/migrate-local-config.d.ts +39 -0
  205. package/dist/lib/migrate-local-config.d.ts.map +1 -0
  206. package/dist/lib/migration-collisions.d.ts +61 -0
  207. package/dist/lib/migration-collisions.d.ts.map +1 -0
  208. package/dist/lib/port-verify.d.ts +73 -0
  209. package/dist/lib/port-verify.d.ts.map +1 -0
  210. package/dist/lib/prompt.d.ts +41 -0
  211. package/dist/lib/prompt.d.ts.map +1 -0
  212. package/dist/lib/readme-generator.d.ts +108 -0
  213. package/dist/lib/readme-generator.d.ts.map +1 -0
  214. package/dist/lib/repo-reader.d.ts +59 -0
  215. package/dist/lib/repo-reader.d.ts.map +1 -0
  216. package/dist/lib/scaffold-cd-workflow.d.ts +48 -0
  217. package/dist/lib/scaffold-cd-workflow.d.ts.map +1 -0
  218. package/dist/lib/scaffold-ci-workflow.d.ts +83 -0
  219. package/dist/lib/scaffold-ci-workflow.d.ts.map +1 -0
  220. package/dist/lib/scaffold-publish-workflow.d.ts +48 -0
  221. package/dist/lib/scaffold-publish-workflow.d.ts.map +1 -0
  222. package/dist/lib/server-detect.d.ts +20 -0
  223. package/dist/lib/server-detect.d.ts.map +1 -0
  224. package/dist/lib/session.d.ts +371 -0
  225. package/dist/lib/session.d.ts.map +1 -0
  226. package/dist/lib/settings-merge.d.ts +268 -0
  227. package/dist/lib/settings-merge.d.ts.map +1 -0
  228. package/dist/lib/ship.d.ts +84 -0
  229. package/dist/lib/ship.d.ts.map +1 -0
  230. package/dist/lib/slug.d.ts +26 -0
  231. package/dist/lib/slug.d.ts.map +1 -0
  232. package/dist/lib/spawn.d.ts +12 -0
  233. package/dist/lib/spawn.d.ts.map +1 -0
  234. package/dist/lib/state-client.d.ts +54 -0
  235. package/dist/lib/state-client.d.ts.map +1 -0
  236. package/dist/lib/state-store.d.ts +153 -0
  237. package/dist/lib/state-store.d.ts.map +1 -0
  238. package/dist/lib/state-sync.d.ts +101 -0
  239. package/dist/lib/state-sync.d.ts.map +1 -0
  240. package/dist/lib/statusline-config.d.ts +55 -0
  241. package/dist/lib/statusline-config.d.ts.map +1 -0
  242. package/dist/lib/structure-generator.d.ts +63 -0
  243. package/dist/lib/structure-generator.d.ts.map +1 -0
  244. package/dist/lib/supabase.d.ts +87 -0
  245. package/dist/lib/supabase.d.ts.map +1 -0
  246. package/dist/lib/sync-approvals.d.ts +108 -0
  247. package/dist/lib/sync-approvals.d.ts.map +1 -0
  248. package/dist/lib/tech-detect.d.ts +77 -0
  249. package/dist/lib/tech-detect.d.ts.map +1 -0
  250. package/dist/lib/template-walker.d.ts +26 -0
  251. package/dist/lib/template-walker.d.ts.map +1 -0
  252. package/dist/lib/templates-dir.d.ts +25 -0
  253. package/dist/lib/templates-dir.d.ts.map +1 -0
  254. package/dist/lib/types.d.ts +843 -0
  255. package/dist/lib/types.d.ts.map +1 -0
  256. package/dist/lib/validate-waves.d.ts +38 -0
  257. package/dist/lib/validate-waves.d.ts.map +1 -0
  258. package/dist/lib/verify-parity.d.ts +154 -0
  259. package/dist/lib/verify-parity.d.ts.map +1 -0
  260. package/dist/lib/version.d.ts +3 -0
  261. package/dist/lib/version.d.ts.map +1 -0
  262. package/dist/lib/watch-daemon.d.ts +114 -0
  263. package/dist/lib/watch-daemon.d.ts.map +1 -0
  264. package/dist/lib/worktree.d.ts +56 -0
  265. package/dist/lib/worktree.d.ts.map +1 -0
  266. package/dist/oauth/browser.d.ts +8 -0
  267. package/dist/oauth/browser.d.ts.map +1 -0
  268. package/dist/oauth/client-registration.d.ts +16 -0
  269. package/dist/oauth/client-registration.d.ts.map +1 -0
  270. package/dist/oauth/device-flow.d.ts +40 -0
  271. package/dist/oauth/device-flow.d.ts.map +1 -0
  272. package/dist/oauth/jwt-decode.d.ts +10 -0
  273. package/dist/oauth/jwt-decode.d.ts.map +1 -0
  274. package/dist/oauth/keychain.d.ts +17 -0
  275. package/dist/oauth/keychain.d.ts.map +1 -0
  276. package/dist/oauth/token-refresh.d.ts +7 -0
  277. package/dist/oauth/token-refresh.d.ts.map +1 -0
  278. package/dist/oauth/types.d.ts +28 -0
  279. package/dist/oauth/types.d.ts.map +1 -0
  280. package/dist/oauth/urls.d.ts +16 -0
  281. package/dist/oauth/urls.d.ts.map +1 -0
  282. package/package.json +5 -6
  283. package/templates/agents/cbp-security-agent.md +0 -1
  284. package/templates/agents/cbp-stripe-agent.md +0 -1
  285. package/templates/agents/cbp-testing-qa-agent.md +0 -1
  286. package/templates/hooks/cbp-skill-context-guard.sh +0 -1
  287. package/templates/hooks/cbp-test-hooks.sh +0 -81
  288. package/templates/hooks/validate-structure-lib.sh +36 -9
  289. package/templates/rules/cbp-operating-gotchas.md +8 -10
  290. package/templates/rules/todo-backend.md +4 -2
  291. package/templates/skills/cbp-build-cc-settings/reference/cbp-permission-policy.md +3 -3
  292. package/templates/skills/cbp-checkpoint-check/SKILL.md +0 -1
  293. package/templates/skills/cbp-checkpoint-end/SKILL.md +11 -5
  294. package/templates/skills/cbp-clear-continue/SKILL.md +0 -1
  295. package/templates/skills/cbp-clear-prep/SKILL.md +0 -1
  296. package/templates/skills/cbp-finalize/SKILL.md +2 -2
  297. package/templates/skills/cbp-setup-cd/SKILL.md +0 -1
  298. package/templates/skills/cbp-setup-ci/SKILL.md +0 -1
  299. package/templates/skills/cbp-standalone-task-complete/SKILL.md +40 -0
  300. package/templates/skills/cbp-stripe/SKILL.md +0 -1
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Sync engine for `.codebyplan/state/`.
3
+ *
4
+ * `runSync` fetches delta or full data from the backend `/sync` endpoint and
5
+ * writes the result to the local state mirror. It is safe to call from hooks
6
+ * (always returns, never throws).
7
+ */
8
+ /**
9
+ * Shape returned by `GET /sync?repo_id&worktree_id&since`.
10
+ *
11
+ * Hand-maintained copy of `DeltaSyncResult` from `@codebyplan/data-access`.
12
+ * codebyplan-package is a standalone published bundle with no workspace deps —
13
+ * this interface cannot import from `packages/data-access`. Keep aligned with
14
+ * the 6 sync_seq tables: checkpoints, tasks, rounds, session_logs, todos,
15
+ * port_allocations.
16
+ *
17
+ * NOTE: worktrees was removed from the feed in CHK-225 — the entity is retired.
18
+ * The backend controller still accepts `worktree_id` as a query param for
19
+ * back-compat but returns no worktrees rows in the payload.
20
+ *
21
+ * NOTE: session_state is NOT a sync_seq table and is absent from /sync — do not
22
+ * add it here. session/state.json is populated solely by `codebyplan session
23
+ * update-state` (write-through). See state-store.ts module docblock.
24
+ */
25
+ export interface DeltaSyncResult {
26
+ checkpoints: unknown[];
27
+ tasks: unknown[];
28
+ rounds: unknown[];
29
+ session_logs: unknown[];
30
+ todos: unknown[];
31
+ port_allocations: unknown[];
32
+ /**
33
+ * Tombstone rows for server-side entity deletions since the cursor.
34
+ * CHK-222 TASK-4: populated from sync_tombstones table. Always an array
35
+ * (empty when no deletions). sync_seq values are included in max_seq.
36
+ */
37
+ deleted: Array<{
38
+ entity_table: string;
39
+ entity_id: string;
40
+ sync_seq: number;
41
+ parent_ids?: {
42
+ checkpoint_id?: string;
43
+ task_id?: string;
44
+ } | null;
45
+ }>;
46
+ /** The highest sequence number in this response. Advance cursor to this. */
47
+ max_seq: number;
48
+ }
49
+ export interface SyncOptions {
50
+ /** If true, ignore cursor and do a full hydrate (since=0). */
51
+ full?: boolean;
52
+ /** If true, resolve entity paths but skip all writes. */
53
+ dryRun?: boolean;
54
+ }
55
+ export interface SyncResult {
56
+ ok: boolean;
57
+ error?: string;
58
+ /** Number of entity files written (0 on dry run or error). */
59
+ written?: number;
60
+ /** Number of entity files pruned during full hydrate. */
61
+ pruned?: number;
62
+ /**
63
+ * Number of tombstones whose local path resolved and a delete was attempted
64
+ * (runs on every sync). ENOENT-tolerant: a tombstone for an already-absent
65
+ * file (e.g. one a prior full-hydrate prune removed) still counts, so this is
66
+ * "tombstones processed", not strictly "files removed from disk".
67
+ */
68
+ tombstoned?: number;
69
+ /** Whether this was a full hydrate (since=0) or a delta (since>0). */
70
+ mode?: "full" | "delta";
71
+ /** The max_seq returned by the backend, if the fetch succeeded. */
72
+ max_seq?: number;
73
+ /**
74
+ * Pending `complete` markers that the outbox CANNOT auto-replay (the complete
75
+ * endpoint needs a different request shape than a generic PATCH). The local
76
+ * state for these entities is updated, but the backend was never told — the
77
+ * user must re-run the complete command. Empty on dry-run (replay is skipped).
78
+ */
79
+ pendingCompletions?: Array<{
80
+ entity: string;
81
+ id: string;
82
+ }>;
83
+ }
84
+ /**
85
+ * Sync local state mirror with the backend.
86
+ *
87
+ * - Cold / `--full`: fetches `since=0`, writes all entity files, prunes stale ones,
88
+ * advances cursor to `max_seq`.
89
+ * - Warm (default): reads cursor `sync_seq`, fetches `since=<seq>`, upserts (no prune),
90
+ * advances cursor.
91
+ *
92
+ * ALL filesystem and network errors are caught and returned as `{ ok: false, error }`.
93
+ * This function NEVER throws, making it safe to call from hook scripts.
94
+ *
95
+ * @param repoRoot Absolute path to the project root (where `.codebyplan/` lives).
96
+ * @param repoId Repository UUID (`repo_id` from `.codebyplan/repo.json`).
97
+ * @param worktreeId Optional worktree UUID forwarded as a query parameter.
98
+ * @param opts Sync options (full, dryRun).
99
+ */
100
+ export declare function runSync(repoRoot: string, repoId: string, worktreeId?: string, opts?: SyncOptions): Promise<SyncResult>;
101
+ //# sourceMappingURL=state-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-sync.d.ts","sourceRoot":"","sources":["../../src/lib/state-sync.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+BH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,OAAO,EAAE,CAAC;IACvB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,YAAY,EAAE,OAAO,EAAE,CAAC;IACxB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B;;;;OAIG;IACH,OAAO,EAAE,KAAK,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE;YAAE,aAAa,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;KAClE,CAAC,CAAC;IACH,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yDAAyD;IACzD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAqND;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,EACnB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,UAAU,CAAC,CA6MrB"}
@@ -0,0 +1,55 @@
1
+ import type { StatuslineConfig, StatuslineLocalConfig } from "./types.js";
2
+ export declare const STATUSLINE_DEFAULTS: StatuslineConfig;
3
+ export declare const DEFAULT_RENDERER: "bash" | "node" | "python";
4
+ /**
5
+ * Read `.codebyplan/statusline.json`. Returns full STATUSLINE_DEFAULTS when
6
+ * the file is absent or contains invalid/partial JSON. Missing keys are filled
7
+ * in from defaults so callers always get a complete object.
8
+ *
9
+ * Never throws.
10
+ */
11
+ export declare function readStatuslineConfig(projectPath: string): Promise<StatuslineConfig>;
12
+ /**
13
+ * Read `.codebyplan/statusline.local.json`. Returns `null` on any failure
14
+ * (file absent, bad JSON, unknown renderer string). Mirrors the shape of
15
+ * `readLocalConfig` in `src/lib/local-config.ts`.
16
+ *
17
+ * Never throws.
18
+ */
19
+ export declare function readStatuslineLocalConfig(projectPath: string): Promise<StatuslineLocalConfig | null>;
20
+ /**
21
+ * Write `.codebyplan/statusline.json`. Creates the `.codebyplan/` directory
22
+ * recursively if absent. Output is pretty-printed with a trailing newline to
23
+ * match other config writers in this package.
24
+ */
25
+ export declare function writeStatuslineConfig(projectPath: string, config: StatuslineConfig): Promise<void>;
26
+ /**
27
+ * Write `.codebyplan/statusline.local.json`. Creates the `.codebyplan/`
28
+ * directory recursively if absent. Validates the renderer value before
29
+ * writing; throws `TypeError` for unknown renderer strings.
30
+ */
31
+ export declare function writeStatuslineLocalConfig(projectPath: string, localConfig: StatuslineLocalConfig): Promise<void>;
32
+ /**
33
+ * Resolve the active renderer for a project. Reads the gitignored local config
34
+ * and returns its renderer, or `"bash"` when absent or on any error.
35
+ *
36
+ * Never throws.
37
+ */
38
+ export declare function resolveRenderer(projectPath: string): Promise<"bash" | "node" | "python">;
39
+ /**
40
+ * Probe which script runtimes are available on the current machine.
41
+ *
42
+ * - `bash` is always `true` (the statusline bash renderer ships as a self-
43
+ * contained shell script; bash is present on every supported platform).
44
+ * - `node` and `python` are detected by spawning `node --version` /
45
+ * `python3 --version` with a short timeout (1 s). The call is synchronous
46
+ * and side-effect-free.
47
+ *
48
+ * Returns a plain object; never throws.
49
+ */
50
+ export declare function detectAvailableRenderers(): {
51
+ bash: boolean;
52
+ node: boolean;
53
+ python: boolean;
54
+ };
55
+ //# sourceMappingURL=statusline-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statusline-config.d.ts","sourceRoot":"","sources":["../../src/lib/statusline-config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAM1E,eAAO,MAAM,mBAAmB,EAAE,gBAYjC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,QAAiB,CAAC;AAkEnE;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAS3B;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAmBvC;AAMD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,qBAAqB,GACjC,OAAO,CAAC,IAAI,CAAC,CAaf;AAMD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,CAGrC;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,IAAI;IAC1C,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB,CAmBA"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Pure, side-effect-free library for generating .claude/generated/structure.md.
3
+ *
4
+ * The generated file is wrapped in sentinels:
5
+ * <!-- @codebyplan-generated: structure start -->
6
+ * ...content...
7
+ * <!-- @codebyplan-generated: structure end -->
8
+ *
9
+ * To import the generated file into .claude/CLAUDE.md, add this line where you
10
+ * want the content to appear:
11
+ * @.claude/generated/structure.md
12
+ *
13
+ * DETERMINISTIC: stable sorted ordering everywhere — no Date.now / new Date /
14
+ * random. Two calls with identical config produce byte-identical output.
15
+ */
16
+ export interface PortAllocation {
17
+ port: number;
18
+ label: string;
19
+ server_type: string;
20
+ }
21
+ export interface MonorepoPackage {
22
+ /** Relative path from project root (e.g. "apps/web") */
23
+ path: string;
24
+ /** Scoped package name from package.json (e.g. "@codebyplan/web") */
25
+ name: string;
26
+ /** Human-readable purpose / description */
27
+ purpose?: string;
28
+ }
29
+ export interface ShipmentSurface {
30
+ /** Surface key (e.g. "supabase", "vercel_mcp") */
31
+ key: string;
32
+ /** Platform or type hint (e.g. "supabase", "vercel", "railway", "npm") */
33
+ platform?: string;
34
+ /** Primary URL or path for the surface */
35
+ urlOrPath?: string;
36
+ }
37
+ export interface BranchModel {
38
+ production: string;
39
+ protected?: string[];
40
+ }
41
+ /** Input configuration for generateStructureMd. */
42
+ export interface StructureGenConfig {
43
+ /** Detected tech stack categories — map of category label to comma-joined names. */
44
+ techStack?: Record<string, string>;
45
+ /** Package manager string from root package.json (e.g. "pnpm@10.12.4"). */
46
+ packageManager?: string;
47
+ /** Workspace packages from monorepo discovery. */
48
+ packages?: MonorepoPackage[];
49
+ /** Port allocations from .codebyplan/server.json. */
50
+ ports?: PortAllocation[];
51
+ /** Branch model from .codebyplan/git.json. */
52
+ branchModel?: BranchModel;
53
+ /** Shipment surfaces from .codebyplan/shipment.json. */
54
+ shipmentSurfaces?: ShipmentSurface[];
55
+ }
56
+ export declare const SENTINEL_START = "<!-- @codebyplan-generated: structure start -->";
57
+ /**
58
+ * Generate the structure.md content from the given config.
59
+ * DETERMINISTIC — no I/O, no side effects, no timestamps or random values.
60
+ * Re-running with identical config produces byte-identical output.
61
+ */
62
+ export declare function generateStructureMd(config: StructureGenConfig): string;
63
+ //# sourceMappingURL=structure-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structure-generator.d.ts","sourceRoot":"","sources":["../../src/lib/structure-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,mDAAmD;AACnD,MAAM,WAAW,kBAAkB;IACjC,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,qDAAqD;IACrD,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;CACtC;AAED,eAAO,MAAM,cAAc,oDAAoD,CAAC;AA6FhF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAmCtE"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Pure lib for Supabase CLI helpers.
3
+ *
4
+ * All public functions accept injectable deps so tests never hit the real
5
+ * filesystem, git, or gh CLI. No top-level side effects.
6
+ */
7
+ export interface PreviewBranch {
8
+ branch: string;
9
+ project_ref: string;
10
+ created_at?: string;
11
+ }
12
+ export interface ShipmentConfig {
13
+ parentRef: string | null;
14
+ previewBranches: PreviewBranch[];
15
+ }
16
+ export interface GitConfig {
17
+ production: string;
18
+ protected: string[];
19
+ integration: string | null;
20
+ }
21
+ /** Synchronous command runner — cmd + args → stdout string (throws on error). */
22
+ export type RunFn = (cmd: string, args: string[]) => string;
23
+ export interface DetectDbChangedOpts {
24
+ cwd?: string;
25
+ base?: string;
26
+ dbPaths?: string[];
27
+ run?: RunFn;
28
+ }
29
+ export interface GenerateMonotonicTimestampOpts {
30
+ cwd?: string;
31
+ now?: Date;
32
+ listDir?: (dir: string) => string[];
33
+ }
34
+ export interface PollGhPreviewCheckOpts {
35
+ prNumber?: string;
36
+ mode?: "pre_merge" | "pre_pr_create";
37
+ cwd?: string;
38
+ run?: RunFn;
39
+ sleep?: (ms: number) => Promise<void>;
40
+ maxPolls?: number;
41
+ intervalMs?: number;
42
+ }
43
+ export interface PollGhPreviewCheckResult {
44
+ status: "passed" | "skipped" | "pending_pr" | "blocked";
45
+ reason: string;
46
+ /** MCP-only: populated by the skill after gh logs fetch — undefined here. */
47
+ failed_step?: string;
48
+ /** MCP-only: populated by the skill after gh logs fetch — undefined here. */
49
+ log_excerpt?: string;
50
+ }
51
+ /**
52
+ * Read `.codebyplan/shipment.json` and extract the Supabase surface.
53
+ * Degrades gracefully: returns `{parentRef: null, previewBranches: []}` on any error.
54
+ */
55
+ export declare function readShipmentConfig(cwd?: string): ShipmentConfig;
56
+ /**
57
+ * Read `.codebyplan/git.json` `branch_config`.
58
+ * Degrades gracefully: returns production="main", protected=["main"], integration=null.
59
+ */
60
+ export declare function readGitConfig(cwd?: string): GitConfig;
61
+ /**
62
+ * Read `db_paths` from the Supabase surface in `.codebyplan/shipment.json`.
63
+ * Falls back to DEFAULT_DB_PATHS when missing or empty.
64
+ */
65
+ export declare function readDbPaths(cwd?: string): string[];
66
+ /**
67
+ * Returns true iff any file changed between `origin/<base>...HEAD` matches a
68
+ * db path glob. Uses a three-dot diff (common ancestor to HEAD).
69
+ */
70
+ export declare function detectDbChanged(opts?: DetectDbChangedOpts): boolean;
71
+ /**
72
+ * Generate a 14-char UTC timestamp token (YYYYMMDDHHmmss) that is STRICTLY
73
+ * GREATER (string compare) than all existing migration file prefixes.
74
+ *
75
+ * When the computed timestamp collides with (or is ≤) an existing prefix,
76
+ * appends `_01`, `_02`, … to produce a unique monotonic token.
77
+ */
78
+ export declare function generateMonotonicTimestamp(opts?: GenerateMonotonicTimestampOpts): string;
79
+ /**
80
+ * Poll `gh pr checks` until the "Supabase Preview" check resolves or times out.
81
+ *
82
+ * The `failed_step` and `log_excerpt` fields are intentionally left undefined:
83
+ * log fetching requires MCP (`mcp__supabase__get_logs`), which is unavailable
84
+ * in the CLI. The consuming skill enriches a blocked verdict via MCP.
85
+ */
86
+ export declare function pollGhPreviewCheck(opts?: PollGhPreviewCheckOpts): Promise<PollGhPreviewCheckResult>;
87
+ //# sourceMappingURL=supabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/lib/supabase.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,iFAAiF;AACjF,MAAM,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,KAAK,CAAC;CACb;AAED,MAAM,WAAW,8BAA8B;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,GAAG,eAAe,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8ID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,cAAc,CAkC/D;AAYD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CA+BrD;AAYD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBlD;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAuBvE;AAcD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,GAAE,8BAAmC,GACxC,MAAM,CA8CR;AAMD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,wBAAwB,CAAC,CAiJnC"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Core sync-approvals merge logic.
3
+ *
4
+ * Pure functions — no I/O. Takes prefetched round, task, and git status as
5
+ * parameters; returns the merged files_changed array plus counters.
6
+ *
7
+ * Three layers of merge semantics (applied in order):
8
+ *
9
+ * 1. Git-diff drift merge:
10
+ * - In git AND in DB → keep; clear removed_from_diff if set (reactivation)
11
+ * - In git, NOT in DB → append new entry (user_approved=false, claude_approved=false)
12
+ * - In DB, NOT in git → set removed_from_diff=true; keep (do NOT delete)
13
+ * - In DB with removed_from_diff=true, back in git → clear flag (reactivation)
14
+ *
15
+ * 2. Staging-status → user_approved flip:
16
+ * - Cleanly staged (first-col letter, no second-col letter) → user_approved=true
17
+ * - MM (staged then modified) → keep existing value
18
+ * - Hook-auto-staged override: if lint-format-on-edit.sh exists AND outstanding
19
+ * findings present → override cleanly-staged → user_approved=false
20
+ *
21
+ * 3. Web-UI flag merge:
22
+ * - If task.app_file_approval_by_user=true → entries with user_approved=true
23
+ * in task.files_changed are preserved (already merged into the drift result)
24
+ */
25
+ export interface FilesChangedEntry {
26
+ path: string;
27
+ action: string;
28
+ status?: string;
29
+ app_approved?: boolean;
30
+ user_approved?: boolean;
31
+ claude_approved?: boolean;
32
+ removed_from_diff?: boolean;
33
+ }
34
+ /**
35
+ * Parsed staging status for a single file path.
36
+ * firstCol = staging area letter (A, M, D, R, etc.) or " " if none.
37
+ * secondCol = working tree letter or " " if none.
38
+ */
39
+ export interface GitStagingStatus {
40
+ path: string;
41
+ firstCol: string;
42
+ secondCol: string;
43
+ }
44
+ export interface SyncApprovalsInput {
45
+ currentRound: {
46
+ id: string;
47
+ files_changed?: FilesChangedEntry[];
48
+ context?: {
49
+ improve_round_findings?: unknown[];
50
+ outstanding_findings?: unknown[];
51
+ testing_qa_output?: {
52
+ totals?: {
53
+ hard_fail?: boolean;
54
+ };
55
+ };
56
+ };
57
+ };
58
+ currentTask: {
59
+ id: string;
60
+ files_changed?: FilesChangedEntry[];
61
+ app_file_approval_by_user?: boolean;
62
+ };
63
+ /** Raw output of `git status --short --porcelain -z` */
64
+ gitStatusOutput: string;
65
+ /** Whether lint-format-on-edit.sh exists in the repo */
66
+ lintFormatHookExists: boolean;
67
+ }
68
+ export interface SyncApprovalsResult {
69
+ /** Paths added as new entries (in git, not in DB) */
70
+ added: string[];
71
+ /** Paths marked as removed_from_diff (in DB, not in git) */
72
+ stale_marked: string[];
73
+ /** Paths reactivated (had removed_from_diff=true, back in git) */
74
+ reactivated: string[];
75
+ /** Total number of entries in merged set */
76
+ total_files: number;
77
+ /** The final merged files_changed array (round shape) */
78
+ merged_files_changed: FilesChangedEntry[];
79
+ }
80
+ /**
81
+ * Parse `git status --short --porcelain -z` output into per-file staging status.
82
+ *
83
+ * Porcelain -z format: null-delimited tokens, each record is "XY path\0".
84
+ * For renames/copies (X=R or X=C), the record token is followed by an
85
+ * additional null-delimited token containing the old path — it must be
86
+ * consumed and discarded so the index stays in sync.
87
+ *
88
+ * X=staging area letter (A, M, D, R, C, ?, etc.) or " " if none.
89
+ * Y=working tree letter or " " if none.
90
+ */
91
+ /**
92
+ * True when a path lives under the gitignored local-first state mirror
93
+ * (`.codebyplan/state/`), at the repo root or in any nested worktree.
94
+ * Such paths are excluded from sync-approvals so they never enter
95
+ * files_changed / round routing.
96
+ */
97
+ export declare function isStateMirrorPath(filePath: string): boolean;
98
+ export declare function parseGitStatus(output: string): GitStagingStatus[];
99
+ /**
100
+ * Determine if outstanding-findings condition holds for a given round context.
101
+ * Used for the hook-auto-staged override.
102
+ */
103
+ export declare function hasOutstandingFindings(roundContext: SyncApprovalsInput["currentRound"]["context"]): boolean;
104
+ /**
105
+ * Run all three merge layers and return the final files_changed array.
106
+ */
107
+ export declare function runSyncApprovals(input: SyncApprovalsInput): SyncApprovalsResult;
108
+ //# sourceMappingURL=sync-approvals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-approvals.d.ts","sourceRoot":"","sources":["../../src/lib/sync-approvals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;QACpC,OAAO,CAAC,EAAE;YACR,sBAAsB,CAAC,EAAE,OAAO,EAAE,CAAC;YACnC,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC;YACjC,iBAAiB,CAAC,EAAE;gBAClB,MAAM,CAAC,EAAE;oBACP,SAAS,CAAC,EAAE,OAAO,CAAC;iBACrB,CAAC;aACH,CAAC;SACH,CAAC;KACH,CAAC;IACF,WAAW,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;QACpC,yBAAyB,CAAC,EAAE,OAAO,CAAC;KACrC,CAAC;IACF,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,4DAA4D;IAC5D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kEAAkE;IAClE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,oBAAoB,EAAE,iBAAiB,EAAE,CAAC;CAC3C;AAED;;;;;;;;;;GAUG;AACH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAK3D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA0CjE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,GAC1D,OAAO,CAkBT;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,GACxB,mBAAmB,CA2IrB"}
@@ -0,0 +1,77 @@
1
+ import type { TechStackEntry, TechStackResult, TechStackSyncPayload } from "./types.js";
2
+ export interface DiscoveredApp {
3
+ name: string;
4
+ path: string;
5
+ absPath: string;
6
+ }
7
+ /**
8
+ * Discover monorepo apps from workspace configuration.
9
+ * Checks pnpm-workspace.yaml first, then package.json workspaces.
10
+ */
11
+ export declare function discoverMonorepoApps(projectPath: string): Promise<DiscoveredApp[]>;
12
+ /**
13
+ * Internal carrier name emitted by `detectFromDirectory` when capabilities are
14
+ * discovered but no known bearer framework is present (e.g. package has
15
+ * `src/main.ts` but no framework dep in PACKAGE_MAP). The synthetic entry is an
16
+ * internal transport mechanism to carry capabilities through per-directory
17
+ * aggregation — it must NEVER leak into public output from `detectTechStack`
18
+ * or `mergeTechStack`. Filter before persisting via API or rendering in UI.
19
+ */
20
+ export declare const SYNTHETIC_CARRIER_NAME = "__capabilities__";
21
+ interface PkgJson {
22
+ dependencies?: Record<string, string>;
23
+ devDependencies?: Record<string, string>;
24
+ main?: string;
25
+ bin?: string | Record<string, string>;
26
+ }
27
+ /**
28
+ * Detect behavioural capabilities of a package:
29
+ * - `jsx`: walks src/app/pages for .tsx/.jsx (skipping tests)
30
+ * - `node-server`: deps include a server framework OR src/main.ts exists OR pkg.main points at server entry
31
+ * - `cli-bin`: pkg.bin is set (string or object form)
32
+ *
33
+ * Exported for tests and CLI integration. Callers typically prefer reading
34
+ * `TechStackEntry.capabilities` from `detectTechStack` results.
35
+ */
36
+ export declare function detectCapabilities(dirPath: string, pkgJson: PkgJson | null): Promise<Set<string>>;
37
+ /**
38
+ * Collect the union of capabilities declared across a set of TechStackEntry items.
39
+ * Returns a deduplicated, lowercased, sorted array — suitable for URL query params.
40
+ */
41
+ export declare function collectCapabilities(entries: TechStackEntry[]): string[];
42
+ /**
43
+ * Detect tech stack from local project files.
44
+ * Returns per-app breakdown for monorepos and a flat deduplicated union.
45
+ */
46
+ export declare function detectTechStack(projectPath: string): Promise<TechStackResult>;
47
+ /**
48
+ * Merge detected entries with existing remote entries.
49
+ * Remote entries are preserved — detected entries only add new ones.
50
+ * Returns merged result and list of newly added entries.
51
+ * Handles both old format (flat array) and new format (TechStackResult).
52
+ */
53
+ export declare function mergeTechStack(remote: TechStackEntry[] | TechStackResult, detected: TechStackResult): {
54
+ merged: TechStackResult;
55
+ added: TechStackEntry[];
56
+ };
57
+ /**
58
+ * Parse raw JSON tech_stack field into flat typed array.
59
+ * Handles both old format (flat array) and new format (structured object).
60
+ */
61
+ export declare function parseTechStack(raw: unknown): TechStackEntry[];
62
+ /**
63
+ * Parse raw JSON tech_stack field into full structured result.
64
+ */
65
+ export declare function parseTechStackResult(raw: unknown): TechStackResult;
66
+ /**
67
+ * Recursively find all package.json files in a project, excluding build artifacts.
68
+ */
69
+ export declare function findPackageJsonFiles(dir: string, projectPath: string, depth?: number): Promise<string[]>;
70
+ /**
71
+ * Scan all dependencies from all package.json files in a project.
72
+ * Returns every dependency as an individual entry with version, source path,
73
+ * dev/prod status, and auto-categorization.
74
+ */
75
+ export declare function scanAllDependencies(projectPath: string): Promise<TechStackSyncPayload>;
76
+ export {};
77
+ //# sourceMappingURL=tech-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tech-detect.d.ts","sourceRoot":"","sources":["../../src/lib/tech-detect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EAEd,eAAe,EACf,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAwMpB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,EAAE,CAAC,CAgE1B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AA2BzD,UAAU,OAAO;IACf,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAsDD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,GAAG,IAAI,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAkDtB;AAwGD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,CAWvE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAmD1B;AAyBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EAAE,GAAG,eAAe,EAC1C,QAAQ,EAAE,eAAe,GACxB;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,cAAc,EAAE,CAAA;CAAE,CAwDtD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,EAAE,CAiB7D;AAoBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAkBlE;AA+BD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,KAAK,SAAI,GACR,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBnB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,oBAAoB,CAAC,CA8C/B"}
@@ -0,0 +1,26 @@
1
+ export interface TemplateFile {
2
+ /** Path relative to templatesDir, in POSIX form (forward slashes). */
3
+ src: string;
4
+ /** Destination path under `.claude/`, equal to `src` (POSIX). */
5
+ dest: string;
6
+ /** sha256 of the file contents, prefixed `sha256:` */
7
+ hash: string;
8
+ }
9
+ /**
10
+ * Recursively walk `templatesDir` and return every file inside as a
11
+ * `TemplateFile`. Excludes meta files (see EXCLUDED_RELATIVE_PATHS).
12
+ *
13
+ * Additionally, `.gitkeep` files are skipped globally — they exist solely to
14
+ * track empty directories in git and must never be installed into consuming
15
+ * projects.
16
+ *
17
+ * Includes a `visited: Set<string>` cycle guard keyed by realpath-resolved
18
+ * directory paths — symlink loops in the template tree cannot cause
19
+ * unbounded recursion (required by rules/recursive-walk-cycle-guard.md).
20
+ *
21
+ * Returned paths are POSIX-normalised (forward slashes) so that downstream
22
+ * consumers (manifest write, settings.json command rewrite) get consistent
23
+ * shape on Windows and macOS / Linux.
24
+ */
25
+ export declare function walkTemplates(templatesDir: string): TemplateFile[];
26
+ //# sourceMappingURL=template-walker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-walker.d.ts","sourceRoot":"","sources":["../../src/lib/template-walker.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;CACd;AAyED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,EAAE,CAmDlE"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Shared helper for locating the package's bundled `templates/` directory.
3
+ *
4
+ * Extracted from cli/claude/install.ts (canonical), cli/claude/update.ts, and
5
+ * cli/claude/status.ts (private duplicates) so that all callers share a single
6
+ * probe implementation.
7
+ *
8
+ * Use this module instead of duplicating the resolution logic in new callers.
9
+ */
10
+ /**
11
+ * Resolve the directory containing the package's `templates/` tree.
12
+ *
13
+ * Resolution order:
14
+ * 1. `__dirname/../templates` — post-bundle: `dist/cli.js` sits next to
15
+ * `templates/` (because `package.json#files` includes both).
16
+ * 2. `__dirname/../../templates` — package root candidate: `dist/lib/` or
17
+ * `src/lib/` is two levels above the package root where `templates/` lives.
18
+ * 3. `__dirname/../../../templates` — extra defensive depth.
19
+ *
20
+ * Throws a clear error if none resolve. The error mentions all probed
21
+ * paths so a future contributor can debug a build / publish layout change
22
+ * without spelunking through the bundle.
23
+ */
24
+ export declare function resolveTemplatesDir(): string;
25
+ //# sourceMappingURL=templates-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-dir.d.ts","sourceRoot":"","sources":["../../src/lib/templates-dir.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAiB5C"}