@open-agent-toolkit/cli 0.2.41 → 0.2.45

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 (204) hide show
  1. package/assets/agents/oat-phase-implementer.md +11 -1
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/docs/cli-utilities/configuration.md +11 -1
  4. package/assets/docs/quickstart.md +9 -0
  5. package/assets/docs/reference/cli-reference.md +56 -1
  6. package/assets/docs/reference/file-locations.md +18 -1
  7. package/assets/docs/reference/oat-directory-structure.md +20 -4
  8. package/assets/docs/workflows/projects/artifacts.md +27 -1
  9. package/assets/docs/workflows/projects/implementation-execution.md +22 -0
  10. package/assets/docs/workflows/projects/index.md +6 -0
  11. package/assets/docs/workflows/projects/lifecycle.md +19 -5
  12. package/assets/docs/workflows/projects/picking-up-projects.md +75 -0
  13. package/assets/docs/workflows/projects/pr-flow.md +22 -1
  14. package/assets/docs/workflows/projects/reviewing-oat-prs.md +60 -0
  15. package/assets/public-package-versions.json +4 -4
  16. package/assets/skills/oat-brainstorm/SKILL.md +135 -32
  17. package/assets/skills/oat-brainstorm/references/destinations.md +9 -6
  18. package/assets/skills/oat-cursor-cloud-projects/SKILL.md +11 -1
  19. package/assets/skills/oat-doctor/SKILL.md +8 -1
  20. package/assets/skills/oat-project-autonomous/SKILL.md +45 -1
  21. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +8 -8
  22. package/assets/skills/oat-project-capture/SKILL.md +29 -9
  23. package/assets/skills/oat-project-complete/SKILL.md +610 -38
  24. package/assets/skills/oat-project-complete/scripts/parse-completion-retry-fields.mjs +265 -0
  25. package/assets/skills/oat-project-complete/scripts/recover-completion-receipts.mjs +764 -0
  26. package/assets/skills/oat-project-complete/scripts/resolve-completion-retry.mjs +134 -0
  27. package/assets/skills/oat-project-complete/scripts/validate-nonarchive-lifecycle-receipt.mjs +160 -0
  28. package/assets/skills/oat-project-design/SKILL.md +33 -9
  29. package/assets/skills/oat-project-discover/SKILL.md +16 -3
  30. package/assets/skills/oat-project-document/SKILL.md +10 -4
  31. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +8 -8
  32. package/assets/skills/oat-project-implement/SKILL.md +14 -3
  33. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +18 -6
  34. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +8 -8
  35. package/assets/skills/oat-project-implement/references/phase-execution.md +9 -3
  36. package/assets/skills/oat-project-implement/references/plan-and-resume.md +3 -0
  37. package/assets/skills/oat-project-import-plan/SKILL.md +15 -9
  38. package/assets/skills/oat-project-new/SKILL.md +7 -5
  39. package/assets/skills/oat-project-next/SKILL.md +32 -10
  40. package/assets/skills/oat-project-plan/SKILL.md +18 -3
  41. package/assets/skills/oat-project-pr-final/SKILL.md +23 -2
  42. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +8 -8
  43. package/assets/skills/oat-project-pr-progress/SKILL.md +23 -2
  44. package/assets/skills/oat-project-progress/SKILL.md +23 -9
  45. package/assets/skills/oat-project-promote-spec-driven/SKILL.md +20 -2
  46. package/assets/skills/oat-project-quick-start/SKILL.md +48 -18
  47. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +8 -8
  48. package/assets/skills/oat-project-reconcile/SKILL.md +14 -10
  49. package/assets/skills/oat-project-retro/SKILL.md +3 -3
  50. package/assets/skills/oat-project-retro/references/apply-procedure.md +102 -6
  51. package/assets/skills/oat-project-retro-file/SKILL.md +57 -6
  52. package/assets/skills/oat-project-review-provide/SKILL.md +45 -4
  53. package/assets/skills/oat-project-review-receive/SKILL.md +16 -7
  54. package/assets/skills/oat-project-review-receive-remote/SKILL.md +9 -3
  55. package/assets/skills/oat-project-revise/SKILL.md +12 -3
  56. package/assets/skills/oat-project-spec/SKILL.md +16 -3
  57. package/assets/skills/oat-project-summary/SKILL.md +113 -13
  58. package/assets/skills/oat-wave-execute/SKILL.md +34 -2
  59. package/assets/skills/oat-worktree-bootstrap/SKILL.md +13 -1
  60. package/assets/skills/oat-worktree-bootstrap-auto/SKILL.md +13 -1
  61. package/dist/commands/config/index.d.ts +1 -0
  62. package/dist/commands/config/index.d.ts.map +1 -1
  63. package/dist/commands/config/index.js +30 -2
  64. package/dist/commands/doctor/index.d.ts +2 -0
  65. package/dist/commands/doctor/index.d.ts.map +1 -1
  66. package/dist/commands/doctor/index.js +27 -3
  67. package/dist/commands/doctor/synced-projects.d.ts +12 -0
  68. package/dist/commands/doctor/synced-projects.d.ts.map +1 -0
  69. package/dist/commands/doctor/synced-projects.js +208 -0
  70. package/dist/commands/init/gitattributes.d.ts +4 -0
  71. package/dist/commands/init/gitattributes.d.ts.map +1 -0
  72. package/dist/commands/init/gitattributes.js +12 -0
  73. package/dist/commands/init/gitignore.d.ts +8 -1
  74. package/dist/commands/init/gitignore.d.ts.map +1 -1
  75. package/dist/commands/init/gitignore.js +146 -41
  76. package/dist/commands/init/index.d.ts +2 -0
  77. package/dist/commands/init/index.d.ts.map +1 -1
  78. package/dist/commands/init/index.js +3 -0
  79. package/dist/commands/init/managed-block.d.ts +10 -0
  80. package/dist/commands/init/managed-block.d.ts.map +1 -0
  81. package/dist/commands/init/managed-block.js +40 -0
  82. package/dist/commands/init/tools/workflows/install-workflows.js +1 -1
  83. package/dist/commands/local/index.d.ts.map +1 -1
  84. package/dist/commands/local/index.js +5 -1
  85. package/dist/commands/local/sync.d.ts +4 -0
  86. package/dist/commands/local/sync.d.ts.map +1 -1
  87. package/dist/commands/local/sync.js +123 -2
  88. package/dist/commands/pjm/adoption.d.ts +2 -0
  89. package/dist/commands/pjm/adoption.d.ts.map +1 -1
  90. package/dist/commands/pjm/adoption.js +1 -1
  91. package/dist/commands/project/archive/archive-utils.d.ts +24 -0
  92. package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
  93. package/dist/commands/project/archive/archive-utils.js +349 -22
  94. package/dist/commands/project/archive/index.d.ts.map +1 -1
  95. package/dist/commands/project/archive/index.js +1 -0
  96. package/dist/commands/project/archive/push-runner.d.ts +5 -1
  97. package/dist/commands/project/archive/push-runner.d.ts.map +1 -1
  98. package/dist/commands/project/archive/push-runner.js +33 -4
  99. package/dist/commands/project/complete-state/index.d.ts.map +1 -1
  100. package/dist/commands/project/complete-state/index.js +3 -1
  101. package/dist/commands/project/index.d.ts.map +1 -1
  102. package/dist/commands/project/index.js +12 -0
  103. package/dist/commands/project/links/compute.d.ts +9 -0
  104. package/dist/commands/project/links/compute.d.ts.map +1 -0
  105. package/dist/commands/project/links/compute.js +27 -0
  106. package/dist/commands/project/links/index.d.ts +17 -0
  107. package/dist/commands/project/links/index.d.ts.map +1 -0
  108. package/dist/commands/project/links/index.js +72 -0
  109. package/dist/commands/project/links/refresh.d.ts +26 -0
  110. package/dist/commands/project/links/refresh.d.ts.map +1 -0
  111. package/dist/commands/project/links/refresh.js +92 -0
  112. package/dist/commands/project/links/render.d.ts +24 -0
  113. package/dist/commands/project/links/render.d.ts.map +1 -0
  114. package/dist/commands/project/links/render.js +68 -0
  115. package/dist/commands/project/list.d.ts +5 -0
  116. package/dist/commands/project/list.d.ts.map +1 -1
  117. package/dist/commands/project/list.js +182 -9
  118. package/dist/commands/project/migrate/index.d.ts +22 -0
  119. package/dist/commands/project/migrate/index.d.ts.map +1 -0
  120. package/dist/commands/project/migrate/index.js +79 -0
  121. package/dist/commands/project/new/index.d.ts +2 -0
  122. package/dist/commands/project/new/index.d.ts.map +1 -1
  123. package/dist/commands/project/new/index.js +14 -2
  124. package/dist/commands/project/new/scaffold.d.ts +22 -1
  125. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  126. package/dist/commands/project/new/scaffold.js +287 -69
  127. package/dist/commands/project/open/index.d.ts +16 -0
  128. package/dist/commands/project/open/index.d.ts.map +1 -1
  129. package/dist/commands/project/open/index.js +151 -19
  130. package/dist/commands/project/pause/index.d.ts +8 -0
  131. package/dist/commands/project/pause/index.d.ts.map +1 -1
  132. package/dist/commands/project/pause/index.js +129 -19
  133. package/dist/commands/project/prune/index.d.ts +21 -0
  134. package/dist/commands/project/prune/index.d.ts.map +1 -0
  135. package/dist/commands/project/prune/index.js +95 -0
  136. package/dist/commands/project/pull/index.d.ts +28 -0
  137. package/dist/commands/project/pull/index.d.ts.map +1 -0
  138. package/dist/commands/project/pull/index.js +157 -0
  139. package/dist/commands/project/push/index.d.ts +22 -0
  140. package/dist/commands/project/push/index.d.ts.map +1 -0
  141. package/dist/commands/project/push/index.js +100 -0
  142. package/dist/commands/project/scope/index.d.ts +17 -0
  143. package/dist/commands/project/scope/index.d.ts.map +1 -0
  144. package/dist/commands/project/scope/index.js +107 -0
  145. package/dist/commands/project/split/run.d.ts +4 -0
  146. package/dist/commands/project/split/run.d.ts.map +1 -1
  147. package/dist/commands/project/split/run.js +48 -10
  148. package/dist/commands/project/sync/git.d.ts +18 -0
  149. package/dist/commands/project/sync/git.d.ts.map +1 -0
  150. package/dist/commands/project/sync/git.js +60 -0
  151. package/dist/commands/project/sync/record.d.ts +22 -0
  152. package/dist/commands/project/sync/record.d.ts.map +1 -0
  153. package/dist/commands/project/sync/record.js +133 -0
  154. package/dist/commands/project/sync/ref-sync.d.ts +120 -0
  155. package/dist/commands/project/sync/ref-sync.d.ts.map +1 -0
  156. package/dist/commands/project/sync/ref-sync.js +962 -0
  157. package/dist/commands/project/sync/resolve-target.d.ts +27 -0
  158. package/dist/commands/project/sync/resolve-target.d.ts.map +1 -0
  159. package/dist/commands/project/sync/resolve-target.js +159 -0
  160. package/dist/commands/shared/oat-paths.d.ts +4 -1
  161. package/dist/commands/shared/oat-paths.d.ts.map +1 -1
  162. package/dist/commands/shared/oat-paths.js +2 -2
  163. package/dist/commands/shared/project-scope.d.ts +23 -0
  164. package/dist/commands/shared/project-scope.d.ts.map +1 -0
  165. package/dist/commands/shared/project-scope.js +106 -0
  166. package/dist/commands/tools/migrate/index.js +1 -1
  167. package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -1
  168. package/dist/commands/tools/shared/pack-inventory.js +11 -0
  169. package/dist/commands/tools/shared/pack-lifecycle.js +1 -1
  170. package/dist/commands/tools/shared/pack-reconcile.d.ts.map +1 -1
  171. package/dist/commands/tools/shared/pack-reconcile.js +4 -1
  172. package/dist/commands/tools/update/index.d.ts.map +1 -1
  173. package/dist/commands/tools/update/index.js +20 -10
  174. package/dist/commands/tools/update/update-tools.d.ts +2 -0
  175. package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
  176. package/dist/config/oat-config.d.ts +6 -3
  177. package/dist/config/oat-config.d.ts.map +1 -1
  178. package/dist/config/oat-config.js +41 -7
  179. package/dist/config/resolve.d.ts.map +1 -1
  180. package/dist/config/resolve.js +2 -1
  181. package/dist/fs/io.d.ts +2 -1
  182. package/dist/fs/io.d.ts.map +1 -1
  183. package/dist/fs/io.js +5 -2
  184. package/dist/projects/split/finalize.d.ts.map +1 -1
  185. package/dist/projects/split/finalize.js +55 -2
  186. package/dist/projects/split/resume.d.ts +3 -0
  187. package/dist/projects/split/resume.d.ts.map +1 -1
  188. package/dist/projects/split/resume.js +34 -7
  189. package/dist/projects/split/seed-children.d.ts.map +1 -1
  190. package/dist/projects/split/seed-children.js +6 -0
  191. package/dist/projects/split/write-parent.d.ts +7 -0
  192. package/dist/projects/split/write-parent.d.ts.map +1 -1
  193. package/dist/projects/split/write-parent.js +7 -4
  194. package/dist/release/public-package-contract.d.ts.map +1 -1
  195. package/dist/release/public-package-contract.js +1 -0
  196. package/dist/validation/skills.d.ts.map +1 -1
  197. package/dist/validation/skills.js +434 -0
  198. package/package.json +4 -4
  199. package/dist/__tests__/skills/split-flow-fixtures.d.ts +0 -50
  200. package/dist/__tests__/skills/split-flow-fixtures.d.ts.map +0 -1
  201. package/dist/__tests__/skills/split-flow-fixtures.js +0 -161
  202. package/dist/commands/__tests__/helpers.d.ts +0 -12
  203. package/dist/commands/__tests__/helpers.d.ts.map +0 -1
  204. package/dist/commands/__tests__/helpers.js +0 -36
@@ -2,6 +2,7 @@ import { execSync } from 'node:child_process';
2
2
  import { mkdir } from 'node:fs/promises';
3
3
  import { basename, isAbsolute, join, relative, resolve, sep } from 'node:path';
4
4
  import { buildCommandContext, } from '../../app/command-context.js';
5
+ import { applyOatCoreGitattributes, } from '../init/gitattributes.js';
5
6
  import { applyOatCoreGitignore, } from '../init/gitignore.js';
6
7
  import { applyGitignore } from '../local/apply.js';
7
8
  import { addLocalPaths } from '../local/manage.js';
@@ -165,6 +166,7 @@ function createDependencies() {
165
166
  saveSyncConfig,
166
167
  getConfigAwareAdapters,
167
168
  applyOatCoreGitignore,
169
+ applyOatCoreGitattributes,
168
170
  dirExists,
169
171
  readOatConfig,
170
172
  resolveLocalPaths,
@@ -506,6 +508,7 @@ async function runInitCommand(context, dependencies, hookFlag, setupFlag) {
506
508
  await dependencies.ensureCanonicalDirs(scopeRoot, scope);
507
509
  if (scope === 'project') {
508
510
  await dependencies.applyOatCoreGitignore(scopeRoot);
511
+ await dependencies.applyOatCoreGitattributes(scopeRoot);
509
512
  }
510
513
  const manifestPath = join(scopeRoot, '.oat', 'sync', 'manifest.json');
511
514
  let manifest = await dependencies.loadManifest(manifestPath);
@@ -0,0 +1,10 @@
1
+ export interface ApplyManagedBlockResult {
2
+ action: 'created' | 'updated' | 'no-change';
3
+ entries: string[];
4
+ }
5
+ export declare function applyManagedBlock(filePath: string, options: {
6
+ start: string;
7
+ end: string;
8
+ entries: string[];
9
+ }): Promise<ApplyManagedBlockResult>;
10
+ //# sourceMappingURL=managed-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-block.d.ts","sourceRoot":"","sources":["../../../src/commands/init/managed-block.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAaD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GACzD,OAAO,CAAC,uBAAuB,CAAC,CA8ClC"}
@@ -0,0 +1,40 @@
1
+ import { readFile, writeFile } from 'node:fs/promises';
2
+ import { fileExists } from '../../fs/io.js';
3
+ function preserveUnmanagedTail(tail, entries) {
4
+ const managedEntries = new Set(entries);
5
+ const lines = tail.startsWith('\n')
6
+ ? tail.slice(1).split('\n')
7
+ : tail.split('\n');
8
+ return lines.filter((line) => !managedEntries.has(line)).join('\n');
9
+ }
10
+ export async function applyManagedBlock(filePath, options) {
11
+ const section = `${options.start}\n${options.entries.join('\n')}\n${options.end}`;
12
+ if (!(await fileExists(filePath))) {
13
+ await writeFile(filePath, `${section}\n`, 'utf8');
14
+ return { action: 'created', entries: options.entries };
15
+ }
16
+ const content = await readFile(filePath, 'utf8');
17
+ const startIndex = content.indexOf(options.start);
18
+ const endIndex = content.indexOf(options.end);
19
+ if (startIndex !== -1 && endIndex !== -1 && endIndex >= startIndex) {
20
+ const existing = content.slice(startIndex, endIndex + options.end.length);
21
+ if (existing === section) {
22
+ return { action: 'no-change', entries: options.entries };
23
+ }
24
+ await writeFile(filePath, `${content.slice(0, startIndex)}${section}${content.slice(endIndex + options.end.length)}`, 'utf8');
25
+ return { action: 'updated', entries: options.entries };
26
+ }
27
+ if (startIndex !== -1) {
28
+ const prefix = content.slice(0, startIndex);
29
+ const preservedTail = preserveUnmanagedTail(content.slice(startIndex + options.start.length), options.entries);
30
+ const prefixSeparator = prefix.length === 0 || prefix.endsWith('\n') ? '' : '\n';
31
+ const preservedSuffix = preservedTail.length === 0
32
+ ? '\n'
33
+ : `\n${preservedTail.replace(/^\n+/, '')}`;
34
+ await writeFile(filePath, `${prefix}${prefixSeparator}${section}${preservedSuffix}`, 'utf8');
35
+ return { action: 'updated', entries: options.entries };
36
+ }
37
+ const separator = content.endsWith('\n') ? '\n' : '\n\n';
38
+ await writeFile(filePath, `${content}${separator}${section}\n`, 'utf8');
39
+ return { action: 'updated', entries: options.entries };
40
+ }
@@ -110,7 +110,7 @@ export async function installWorkflows(options) {
110
110
  if (!config.projects?.root?.trim()) {
111
111
  await writeOatConfig(options.targetRoot, {
112
112
  ...config,
113
- projects: { root: '.oat/projects/shared' },
113
+ projects: { ...config.projects, root: '.oat/projects/shared' },
114
114
  });
115
115
  result.projectsRootConfigInitialized = true;
116
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/local/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,kBAAkB,IAAI,OAAO,CAmS5C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/local/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,kBAAkB,IAAI,OAAO,CAwS5C"}
@@ -144,6 +144,7 @@ export function createLocalCommand() {
144
144
  }
145
145
  const direction = options.from ? 'from' : 'to';
146
146
  const result = await syncLocalPaths({
147
+ repoRoot,
147
148
  sourceRoot: repoRoot,
148
149
  targetRoot: worktreePath,
149
150
  localPaths,
@@ -155,7 +156,10 @@ export function createLocalCommand() {
155
156
  }
156
157
  else {
157
158
  for (const entry of result.entries) {
158
- context.logger.info(` ${entry.status.padEnd(8)} ${entry.path}`);
159
+ const reason = entry.status === 'skipped' && entry.reason
160
+ ? ` (${entry.reason})`
161
+ : '';
162
+ context.logger.info(` ${entry.status.padEnd(8)} ${entry.path}${reason}`);
159
163
  }
160
164
  context.logger.info(`\nSync complete: ${result.copied} copied, ${result.skipped} skipped, ${result.missing} missing`);
161
165
  }
@@ -1,7 +1,9 @@
1
+ import { type GitRunner } from '../project/sync/git.js';
1
2
  export type SyncStatus = 'copied' | 'skipped' | 'missing';
2
3
  export interface SyncEntry {
3
4
  path: string;
4
5
  status: SyncStatus;
6
+ reason?: 'nested-worktree';
5
7
  }
6
8
  export interface SyncResult {
7
9
  entries: SyncEntry[];
@@ -10,11 +12,13 @@ export interface SyncResult {
10
12
  missing: number;
11
13
  }
12
14
  export interface SyncOptions {
15
+ repoRoot?: string;
13
16
  sourceRoot: string;
14
17
  targetRoot: string;
15
18
  localPaths: string[];
16
19
  direction: 'to' | 'from';
17
20
  force: boolean;
21
+ gitRunner?: GitRunner;
18
22
  }
19
23
  export declare function syncLocalPaths(options: SyncOptions): Promise<SyncResult>;
20
24
  //# sourceMappingURL=sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/local/sync.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAoDrB"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/local/sync.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAM9E,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAuID,wBAAsB,cAAc,CAClC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAoFrB"}
@@ -1,13 +1,116 @@
1
- import { rm } from 'node:fs/promises';
2
- import { join } from 'node:path';
1
+ import { lstat, readdir, realpath, rm } from 'node:fs/promises';
2
+ import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
3
+ import { defaultGitRunner } from '../project/sync/git.js';
4
+ import { CliError } from '../../errors/cli-error.js';
3
5
  import { copyDirectory, dirExists, fileExists } from '../../fs/io.js';
4
6
  import { expandLocalPaths } from './expand.js';
7
+ async function canonicalizeLocalSyncPath(path) {
8
+ const absolute = resolve(path);
9
+ try {
10
+ return await realpath(absolute);
11
+ }
12
+ catch (error) {
13
+ if (!(error instanceof Error && 'code' in error && error.code === 'ENOENT')) {
14
+ throw error;
15
+ }
16
+ const parent = dirname(absolute);
17
+ if (parent === absolute)
18
+ return absolute;
19
+ return join(await canonicalizeLocalSyncPath(parent), relative(parent, absolute));
20
+ }
21
+ }
22
+ function pathsOverlap(left, right) {
23
+ const leftToRight = relative(left, right);
24
+ const rightToLeft = relative(right, left);
25
+ const isWithin = (candidate) => candidate === '' ||
26
+ (candidate !== '..' &&
27
+ !candidate.startsWith(`..${sep}`) &&
28
+ !isAbsolute(candidate));
29
+ return isWithin(leftToRight) || isWithin(rightToLeft);
30
+ }
31
+ function worktreeOwnsRoot(worktreePath, rootPath) {
32
+ const relativeRoot = relative(worktreePath, rootPath);
33
+ return (relativeRoot === '' ||
34
+ (relativeRoot !== '..' &&
35
+ !relativeRoot.startsWith(`..${sep}`) &&
36
+ !isAbsolute(relativeRoot)));
37
+ }
38
+ async function registeredNestedWorktrees(repoRoot, sourceRoot, targetRoot, git) {
39
+ const result = await git.run(['worktree', 'list', '--porcelain'], {
40
+ cwd: repoRoot,
41
+ allowFailure: true,
42
+ });
43
+ if (result.code !== 0) {
44
+ throw new CliError(`Unable to inspect registered worktrees before local sync: ${result.stderr || result.stdout || `git worktree list failed with exit ${result.code}`}`, 2);
45
+ }
46
+ const records = result.stdout ? result.stdout.split(/\n\n+/) : [];
47
+ const registered = [];
48
+ for (const record of records) {
49
+ const lines = record.split('\n').filter(Boolean);
50
+ const worktreeLines = lines.filter((line) => line.startsWith('worktree '));
51
+ const worktreeLine = worktreeLines[0];
52
+ if (lines.length === 0 ||
53
+ worktreeLines.length !== 1 ||
54
+ typeof worktreeLine !== 'string' ||
55
+ !worktreeLine.startsWith('worktree ') ||
56
+ lines[0] !== worktreeLine ||
57
+ worktreeLine.slice('worktree '.length).trim() === '') {
58
+ throw new CliError('Malformed `git worktree list --porcelain` output; refusing local sync.', 2);
59
+ }
60
+ registered.push(await canonicalizeLocalSyncPath(worktreeLine.slice('worktree '.length)));
61
+ }
62
+ if (registered.length === 0) {
63
+ throw new CliError('Git returned no registered worktrees; refusing repository-aware local sync.', 2);
64
+ }
65
+ const supportedRoots = await Promise.all([
66
+ canonicalizeLocalSyncPath(sourceRoot),
67
+ canonicalizeLocalSyncPath(targetRoot),
68
+ ]);
69
+ return [...new Set(registered)].filter((worktreePath) => !supportedRoots.some((rootPath) => worktreeOwnsRoot(worktreePath, rootPath)));
70
+ }
71
+ async function containsNestedGitMarker(root) {
72
+ let entries;
73
+ try {
74
+ entries = await readdir(root, { withFileTypes: true });
75
+ }
76
+ catch (error) {
77
+ if (error instanceof Error &&
78
+ 'code' in error &&
79
+ (error.code === 'ENOENT' || error.code === 'ENOTDIR')) {
80
+ return false;
81
+ }
82
+ throw error;
83
+ }
84
+ for (const entry of entries) {
85
+ if (entry.name === '.git')
86
+ return true;
87
+ const entryPath = join(root, entry.name);
88
+ if (entry.isSymbolicLink()) {
89
+ // Local sync does not follow directory symlinks while looking for a
90
+ // worktree boundary. A symlink target is copied as a link by the I/O
91
+ // layer and cannot authorize recursive deletion of its destination.
92
+ continue;
93
+ }
94
+ if (entry.isDirectory() && (await containsNestedGitMarker(entryPath))) {
95
+ return true;
96
+ }
97
+ if (!entry.isDirectory() && !entry.isFile()) {
98
+ // Force filesystem errors to surface instead of silently treating an
99
+ // unfamiliar entry as safe.
100
+ await lstat(entryPath);
101
+ }
102
+ }
103
+ return false;
104
+ }
5
105
  export async function syncLocalPaths(options) {
6
106
  const { sourceRoot, targetRoot, localPaths, direction, force } = options;
7
107
  // Determine actual from/to based on direction
8
108
  const fromRoot = direction === 'to' ? sourceRoot : targetRoot;
9
109
  const toRoot = direction === 'to' ? targetRoot : sourceRoot;
10
110
  const entries = [];
111
+ const registered = options.repoRoot
112
+ ? await registeredNestedWorktrees(options.repoRoot, sourceRoot, targetRoot, options.gitRunner ?? defaultGitRunner)
113
+ : [];
11
114
  const { resolved, missingGlobs } = await expandLocalPaths(fromRoot, localPaths);
12
115
  for (const pattern of missingGlobs) {
13
116
  entries.push({ path: pattern, status: 'missing' });
@@ -20,6 +123,24 @@ export async function syncLocalPaths(options) {
20
123
  entries.push({ path: localPath, status: 'missing' });
21
124
  continue;
22
125
  }
126
+ // This check must cover the whole selected entry on both sides and must
127
+ // happen before force-removal. A localPath may be an ancestor of a linked
128
+ // worktree, so checking only `<entry>/.git` is insufficient.
129
+ const [canonicalSourcePath, canonicalDestPath] = await Promise.all([
130
+ canonicalizeLocalSyncPath(sourcePath),
131
+ canonicalizeLocalSyncPath(destPath),
132
+ ]);
133
+ if (registered.some((worktreePath) => pathsOverlap(canonicalSourcePath, worktreePath) ||
134
+ pathsOverlap(canonicalDestPath, worktreePath)) ||
135
+ (await containsNestedGitMarker(sourcePath)) ||
136
+ (await containsNestedGitMarker(destPath))) {
137
+ entries.push({
138
+ path: localPath,
139
+ status: 'skipped',
140
+ reason: 'nested-worktree',
141
+ });
142
+ continue;
143
+ }
23
144
  const destExists = (await dirExists(destPath)) || (await fileExists(destPath));
24
145
  if (destExists && !force) {
25
146
  entries.push({ path: localPath, status: 'skipped' });
@@ -1,3 +1,4 @@
1
+ import { type OatConfig } from '../../config/oat-config.js';
1
2
  export type PjmAdoptionState = 'declared' | 'inferred-legacy' | 'partial-initialization' | 'none';
2
3
  export interface PjmAdoption {
3
4
  state: PjmAdoptionState;
@@ -7,6 +8,7 @@ export interface PjmAdoption {
7
8
  export interface ResolvePjmAdoptionOptions {
8
9
  projectRoot: string;
9
10
  repoRoot: string;
11
+ config?: OatConfig;
10
12
  }
11
13
  export declare function resolvePjmAdoption(options: ResolvePjmAdoptionOptions): Promise<PjmAdoption>;
12
14
  //# sourceMappingURL=adoption.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adoption.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/adoption.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,iBAAiB,GACjB,wBAAwB,GACxB,MAAM,CAAC;AAEX,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAmBD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,WAAW,CAAC,CA8BtB"}
1
+ {"version":3,"file":"adoption.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/adoption.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAInE,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,iBAAiB,GACjB,wBAAwB,GACxB,MAAM,CAAC;AAEX,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAmBD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,WAAW,CAAC,CA8BtB"}
@@ -18,7 +18,7 @@ async function pathExists(path) {
18
18
  }
19
19
  }
20
20
  export async function resolvePjmAdoption(options) {
21
- const config = await readOatConfig(options.projectRoot);
21
+ const config = options.config ?? (await readOatConfig(options.projectRoot));
22
22
  if (config.pjm?.initialized === true) {
23
23
  return {
24
24
  state: 'declared',
@@ -1,4 +1,8 @@
1
1
  import { rename } from 'node:fs/promises';
2
+ import { type GitRunner } from '../../project/sync/git.js';
3
+ import { readSyncedRecord, writeSyncedRecord } from '../../project/sync/record.js';
4
+ import { commitRecordChange, preflightSyncedCheckout, removeSyncedCheckout } from '../../project/sync/ref-sync.js';
5
+ import { type ProjectScope } from '../../shared/project-scope.js';
2
6
  import { copyDirectory, copySingleFile, dirExists, ensureDir, fileExists } from '../../../fs/io.js';
3
7
  export type ExecFileResult = {
4
8
  stdout: string;
@@ -56,6 +60,7 @@ export interface ArchiveProjectOnCompletionOptions {
56
60
  * semantics as `awsProfile`.
57
61
  */
58
62
  awsRegion?: string | null;
63
+ commit?: boolean;
59
64
  }
60
65
  export interface ResolvePrimaryRepoRootDependencies {
61
66
  gitExecFile?: ExecFileLike;
@@ -66,6 +71,8 @@ export interface ResolveArchiveProjectTargetOptions {
66
71
  repoRoot: string;
67
72
  projectsRoot: string;
68
73
  projectName: string;
74
+ archiveSnapshot?: string;
75
+ archiveScope?: ProjectScope;
69
76
  }
70
77
  export interface ResolveArchiveProjectTargetDependencies extends ResolvePrimaryRepoRootDependencies {
71
78
  timestamp?: () => string;
@@ -92,6 +99,12 @@ interface ArchiveProjectOnCompletionDependencies extends EnsureS3ArchiveAccessDe
92
99
  fileExists?: typeof fileExists;
93
100
  renamePath?: typeof rename;
94
101
  timestamp?: () => string;
102
+ gitRunner?: GitRunner;
103
+ readSyncedRecord?: typeof readSyncedRecord;
104
+ writeSyncedRecord?: typeof writeSyncedRecord;
105
+ preflightSyncedCheckout?: typeof preflightSyncedCheckout;
106
+ removeSyncedCheckout?: typeof removeSyncedCheckout;
107
+ commitRecordChange?: typeof commitRecordChange;
95
108
  }
96
109
  export interface ArchiveProjectRecapExportV1 {
97
110
  sourceRunRoot: string;
@@ -104,9 +117,13 @@ export interface ArchiveProjectRecapExportV1 {
104
117
  export interface ArchiveProjectOnCompletionResult {
105
118
  archivePath: string;
106
119
  s3Path: string | null;
120
+ /** Absolute filesystem path; normalize only when rendering repository links. */
107
121
  summaryExportFile: string | null;
108
122
  projectRecapExport: ArchiveProjectRecapExportV1 | null;
109
123
  warnings: string[];
124
+ lifecycleCommit: string | null;
125
+ recapExportPaths: string[];
126
+ snapshotId: string;
110
127
  }
111
128
  export declare const ARCHIVE_SNAPSHOT_METADATA_FILENAME = ".oat-archive-source.json";
112
129
  /**
@@ -117,7 +134,14 @@ export declare const S3_ARCHIVE_SYNC_EXCLUDES: string[];
117
134
  export interface ArchiveSnapshotMetadata {
118
135
  projectName: string;
119
136
  snapshotName: string;
137
+ scope: ProjectScope;
138
+ sourceRefSha?: string;
120
139
  }
140
+ export interface ExactArchiveProjectRoot {
141
+ canonicalProjectPath: string;
142
+ projectScope: ProjectScope;
143
+ }
144
+ export declare function assertExactArchiveProjectRoot(options: Pick<ArchiveProjectOnCompletionOptions, 'repoRoot' | 'projectsRoot' | 'projectPath' | 'projectName'>): ExactArchiveProjectRoot;
121
145
  /**
122
146
  * Build the env passed to every `aws` spawn in this module.
123
147
  *
@@ -1 +1 @@
1
- {"version":3,"file":"archive-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/archive/archive-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archive-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/archive/archive-utils.ts"],"names":[],"mappings":"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"}