@open-agent-toolkit/cli 0.2.49 → 0.2.51

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 (77) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/cli-utilities/tool-packs.md +35 -24
  3. package/assets/docs/reference/cli-reference.md +20 -5
  4. package/assets/docs/reference/file-locations.md +8 -2
  5. package/assets/docs/reference/oat-directory-structure.md +14 -5
  6. package/assets/docs/reference/troubleshooting.md +22 -4
  7. package/assets/docs/workflows/projects/artifacts.md +9 -4
  8. package/assets/docs/workflows/projects/lifecycle.md +17 -5
  9. package/assets/docs/workflows/projects/picking-up-projects.md +26 -9
  10. package/assets/docs/workflows/projects/pr-flow.md +5 -3
  11. package/assets/docs/workflows/projects/reviewing-oat-prs.md +12 -8
  12. package/assets/public-package-versions.json +4 -4
  13. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +2 -2
  14. package/assets/skills/oat-project-complete/SKILL.md +193 -26
  15. package/assets/skills/oat-project-complete/scripts/execute-synced-archive-entry.mjs +306 -0
  16. package/assets/skills/oat-project-complete/scripts/finalize-synced-archive.mjs +125 -0
  17. package/assets/skills/oat-project-complete/scripts/parse-synced-archive-resume-fields.mjs +106 -0
  18. package/assets/skills/oat-project-complete/scripts/recover-completion-receipts.mjs +110 -0
  19. package/assets/skills/oat-project-complete/scripts/resolve-synced-archive-entry.mjs +164 -0
  20. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +2 -2
  21. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +2 -2
  22. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +2 -2
  23. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +2 -2
  24. package/dist/commands/doctor/index.d.ts +7 -0
  25. package/dist/commands/doctor/index.d.ts.map +1 -1
  26. package/dist/commands/doctor/index.js +44 -23
  27. package/dist/commands/pjm/index.d.ts +0 -2
  28. package/dist/commands/pjm/index.d.ts.map +1 -1
  29. package/dist/commands/pjm/index.js +5 -4
  30. package/dist/commands/pjm/migrate.d.ts +2 -1
  31. package/dist/commands/pjm/migrate.d.ts.map +1 -1
  32. package/dist/commands/pjm/migrate.js +23 -17
  33. package/dist/commands/project/archive/archive-utils.d.ts +8 -1
  34. package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
  35. package/dist/commands/project/archive/archive-utils.js +147 -50
  36. package/dist/commands/project/archive/push-runner.d.ts.map +1 -1
  37. package/dist/commands/project/archive/push-runner.js +15 -2
  38. package/dist/commands/project/links/compute.d.ts +1 -0
  39. package/dist/commands/project/links/compute.d.ts.map +1 -1
  40. package/dist/commands/project/links/compute.js +5 -4
  41. package/dist/commands/project/links/index.d.ts +9 -0
  42. package/dist/commands/project/links/index.d.ts.map +1 -1
  43. package/dist/commands/project/links/index.js +71 -2
  44. package/dist/commands/project/list.d.ts +10 -2
  45. package/dist/commands/project/list.d.ts.map +1 -1
  46. package/dist/commands/project/list.js +205 -29
  47. package/dist/commands/project/open/index.d.ts +2 -0
  48. package/dist/commands/project/open/index.d.ts.map +1 -1
  49. package/dist/commands/project/open/index.js +16 -1
  50. package/dist/commands/project/prune/index.d.ts +10 -4
  51. package/dist/commands/project/prune/index.d.ts.map +1 -1
  52. package/dist/commands/project/prune/index.js +85 -15
  53. package/dist/commands/project/pull/index.d.ts +4 -0
  54. package/dist/commands/project/pull/index.d.ts.map +1 -1
  55. package/dist/commands/project/pull/index.js +82 -3
  56. package/dist/commands/project/sync/git.d.ts +9 -0
  57. package/dist/commands/project/sync/git.d.ts.map +1 -1
  58. package/dist/commands/project/sync/git.js +18 -0
  59. package/dist/commands/project/sync/ref-sync.d.ts +16 -1
  60. package/dist/commands/project/sync/ref-sync.d.ts.map +1 -1
  61. package/dist/commands/project/sync/ref-sync.js +288 -17
  62. package/dist/commands/project/sync/resolve-target.d.ts +10 -0
  63. package/dist/commands/project/sync/resolve-target.d.ts.map +1 -1
  64. package/dist/commands/project/sync/resolve-target.js +56 -1
  65. package/dist/commands/shared/project-scope.d.ts +2 -0
  66. package/dist/commands/shared/project-scope.d.ts.map +1 -1
  67. package/dist/commands/shared/project-scope.js +5 -0
  68. package/dist/commands/state/generate.d.ts +2 -0
  69. package/dist/commands/state/generate.d.ts.map +1 -1
  70. package/dist/commands/state/generate.js +93 -28
  71. package/dist/commands/status/index.d.ts +3 -1
  72. package/dist/commands/status/index.d.ts.map +1 -1
  73. package/dist/commands/status/index.js +77 -10
  74. package/dist/commands/tools/shared/pack-inventory.d.ts +10 -0
  75. package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -1
  76. package/dist/commands/tools/shared/pack-inventory.js +71 -21
  77. package/package.json +2 -2
@@ -1,26 +1,30 @@
1
1
  import { readFile } from 'node:fs/promises';
2
- import { join } from 'node:path';
2
+ import { basename, isAbsolute, join, resolve } from 'node:path';
3
3
  import { buildCommandContext, } from '../../../app/command-context.js';
4
4
  import { defaultGitRunner } from '../../project/sync/git.js';
5
5
  import { readSyncedRecord } from '../../project/sync/record.js';
6
- import { pruneSynced, } from '../../project/sync/ref-sync.js';
7
- import { resolveSyncedTarget } from '../../project/sync/resolve-target.js';
6
+ import { buildSyncTarget, classifyRemoteRefLookup, deleteCompletedSyncedRefForPrune, pruneSynced, } from '../../project/sync/ref-sync.js';
7
+ import { probeSyncedTerminalRefs, resolveSyncedTarget, } from '../../project/sync/resolve-target.js';
8
8
  import { getFrontmatterBlock, parseFrontmatterScalarFields, } from '../../shared/frontmatter.js';
9
- import { syncedRecordPath } from '../../shared/project-scope.js';
9
+ import { resolveProjectsRoot } from '../../shared/oat-paths.js';
10
+ import { completedSyncedRefName, resolveProjectScope, resolveScopeRoot, syncedRecordPath, } from '../../shared/project-scope.js';
10
11
  import { readGlobalOptions } from '../../shared/shared.utils.js';
11
12
  import { CliError } from '../../../errors/cli-error.js';
12
13
  import { resolveProjectRoot } from '../../../fs/paths.js';
13
14
  import { Command } from 'commander';
14
- export async function readPruneProjectState(target, git) {
15
+ export async function readPruneProjectState(target, git, ref = target.ref) {
15
16
  try {
16
17
  return await readFile(join(target.projectPath, 'state.md'), 'utf8');
17
18
  }
18
19
  catch {
19
20
  // A completed or not-yet-pulled project may have no checkout.
20
21
  }
21
- const fetched = await git.run(['fetch', target.remote, `+${target.ref}:${target.ref}`], { cwd: target.repoRoot, allowFailure: true });
22
+ const fetched = await git.run(['fetch', target.remote, `+${ref}:${ref}`], {
23
+ cwd: target.repoRoot,
24
+ allowFailure: true,
25
+ });
22
26
  if (fetched.code === 0) {
23
- const shown = await git.run(['show', `${target.ref}:state.md`], {
27
+ const shown = await git.run(['show', `${ref}:state.md`], {
24
28
  cwd: target.repoRoot,
25
29
  allowFailure: true,
26
30
  });
@@ -39,7 +43,10 @@ export async function readPruneProjectState(target, git) {
39
43
  const DEFAULT_DEPENDENCIES = {
40
44
  buildCommandContext,
41
45
  resolveProjectRoot,
46
+ resolveProjectsRoot,
42
47
  resolveSyncedTarget,
48
+ inspectTerminalRefs,
49
+ deleteCompletedSyncedRefForPrune,
43
50
  pruneSynced,
44
51
  readProjectState: readPruneProjectState,
45
52
  gitRunner: defaultGitRunner,
@@ -52,20 +59,83 @@ function hasOpenPr(state) {
52
59
  const parsed = parseFrontmatterScalarFields(frontmatter, ['oat_pr_status']);
53
60
  return parsed.valid && parsed.values.oat_pr_status === 'open';
54
61
  }
62
+ function pruneSlug(repoRoot, projectsRoot, pathOrSlug) {
63
+ if (!pathOrSlug.includes('/') && !pathOrSlug.includes('\\')) {
64
+ return pathOrSlug;
65
+ }
66
+ const absolute = isAbsolute(pathOrSlug)
67
+ ? resolve(pathOrSlug)
68
+ : resolve(repoRoot, pathOrSlug);
69
+ const scope = resolveProjectScope(absolute, resolveScopeRoot(repoRoot, projectsRoot, 'shared'), repoRoot);
70
+ return scope === 'synced' ? basename(absolute) : null;
71
+ }
72
+ export async function inspectTerminalRefs(target, git) {
73
+ const completedRef = completedSyncedRefName(target.slug);
74
+ const lookup = await git.run(['ls-remote', '--exit-code', target.remote, completedRef], { cwd: target.repoRoot, allowFailure: true });
75
+ if (classifyRemoteRefLookup(lookup, target.remote, completedRef) === 'absent') {
76
+ return null;
77
+ }
78
+ const rows = lookup.stdout.split('\n').filter(Boolean);
79
+ const [sha, ref] = rows[0]?.trim().split(/\s+/) ?? [];
80
+ if (rows.length !== 1 ||
81
+ ref !== completedRef ||
82
+ !/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/i.test(sha ?? '')) {
83
+ throw new CliError(`Unable to verify terminal refs for ${target.slug}: origin returned a malformed completed-ref advertisement.`, 2);
84
+ }
85
+ const probe = await probeSyncedTerminalRefs(target, sha, git);
86
+ if (probe.state === 'wrong-sha') {
87
+ throw new CliError(`Refusing destructive prune for ${target.slug}: active ${probe.activeRef} is ${probe.activeSha ?? 'absent'} while completed ${probe.completedRef} is ${probe.completedSha ?? 'absent'}. Repair the terminal ref mismatch before retrying; both refs were retained.`, 1);
88
+ }
89
+ return probe;
90
+ }
55
91
  async function runPrune(context, pathOrSlug, options, dependencies) {
56
92
  try {
57
93
  const repoRoot = await dependencies.resolveProjectRoot(context.cwd);
58
- const target = await dependencies.resolveSyncedTarget({ repoRoot, env: dependencies.processEnv }, pathOrSlug, { gitRunner: dependencies.gitRunner }, {
59
- allowMissingCheckout: true,
60
- allowStagedPruneDeletion: true,
61
- });
62
- const state = await dependencies.readProjectState(target, dependencies.gitRunner);
94
+ const projectsRoot = await dependencies.resolveProjectsRoot(repoRoot, dependencies.processEnv);
95
+ let target;
96
+ try {
97
+ target = await dependencies.resolveSyncedTarget({ repoRoot, env: dependencies.processEnv }, pathOrSlug, { gitRunner: dependencies.gitRunner }, {
98
+ allowMissingCheckout: true,
99
+ allowStagedPruneDeletion: true,
100
+ });
101
+ }
102
+ catch (error) {
103
+ const slug = pathOrSlug
104
+ ? pruneSlug(repoRoot, projectsRoot, pathOrSlug)
105
+ : null;
106
+ if (!slug ||
107
+ !(error instanceof CliError) ||
108
+ error.exitCode !== 1 ||
109
+ !error.message.startsWith('No synced project named ')) {
110
+ throw error;
111
+ }
112
+ target = buildSyncTarget(repoRoot, projectsRoot, slug);
113
+ }
114
+ const terminal = await dependencies.inspectTerminalRefs(target, dependencies.gitRunner);
115
+ const terminalRef = terminal?.completedRef;
116
+ const state = await dependencies.readProjectState(target, dependencies.gitRunner, terminalRef);
63
117
  if (!options.force && hasOpenPr(state)) {
64
118
  throw new CliError(`Refusing to prune ${target.slug} while its PR is open. Pass --force to confirm; pinned links will stop resolving.`, 1);
65
119
  }
66
- context.logger.warn(`Pruning ${target.slug} removes ${target.ref}; pinned links will stop resolving.`);
67
- const result = await dependencies.pruneSynced(target, dependencies.gitRunner, { force: options.force, commit: options.commit });
68
- const payload = { ...result, ref: target.ref };
120
+ const removedRefs = terminal?.state === 'completed-only'
121
+ ? terminal.completedRef
122
+ : terminalRef
123
+ ? `${target.ref} and ${terminalRef}`
124
+ : target.ref;
125
+ context.logger.warn(`Pruning ${target.slug} removes ${removedRefs}; pinned links will stop resolving. Durable local/S3 archives are preserved.`);
126
+ const result = await dependencies.pruneSynced(target, dependencies.gitRunner, {
127
+ force: options.force,
128
+ commit: options.commit,
129
+ ...(terminal ? { expectedActiveAliasSha: terminal.expectedSha } : {}),
130
+ });
131
+ const completedDeletion = terminalRef
132
+ ? await dependencies.deleteCompletedSyncedRefForPrune(target, dependencies.gitRunner)
133
+ : null;
134
+ const payload = {
135
+ ...result,
136
+ ref: target.ref,
137
+ completedRef: completedDeletion?.completedRef ?? null,
138
+ };
69
139
  if (context.json)
70
140
  context.logger.json(payload);
71
141
  else
@@ -2,10 +2,13 @@ import { type CommandContext, type GlobalOptions } from '../../../app/command-co
2
2
  import { type GitRunner } from '../../project/sync/git.js';
3
3
  import { commitRecordChange as defaultCommitRecordChange, type PullChildResult, type PullResult, type AdoptionRecordState, type SyncTarget } from '../../project/sync/ref-sync.js';
4
4
  import { resolveSyncedTarget } from '../../project/sync/resolve-target.js';
5
+ import { resolveProjectsRoot } from '../../shared/oat-paths.js';
5
6
  import { Command } from 'commander';
6
7
  interface ProjectPullDependencies {
7
8
  buildCommandContext: (options: GlobalOptions) => CommandContext;
8
9
  resolveProjectRoot: (cwd: string) => Promise<string>;
10
+ resolveProjectsRoot: typeof resolveProjectsRoot;
11
+ guardSyncedTerminalTarget: typeof guardSyncedTerminalTarget;
9
12
  resolveSyncedTarget: typeof resolveSyncedTarget;
10
13
  pullSynced: (target: SyncTarget, git: GitRunner, options?: {
11
14
  adopt?: boolean;
@@ -23,6 +26,7 @@ interface ProjectPullDependencies {
23
26
  gitRunner: GitRunner;
24
27
  processEnv: NodeJS.ProcessEnv;
25
28
  }
29
+ export declare function guardSyncedTerminalTarget(repoRoot: string, projectsRoot: string, pathOrSlug: string | undefined, action: 'pull' | 'open', git: GitRunner): Promise<void>;
26
30
  export declare function createProjectPullCommand(overrides?: Partial<ProjectPullDependencies>): Command;
27
31
  export {};
28
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/pull/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAEL,kBAAkB,IAAI,yBAAyB,EAI/C,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,UAAU,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,mBAAmB,EAEpB,MAAM,uCAAuC,CAAC;AAI/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,UAAU,uBAAuB;IAC/B,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,UAAU,EAAE,CACV,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,SAAS,EACd,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,cAAc,CAAC,EAAE,mBAAmB,CAAC;QACrC,GAAG,CAAC,EAAE,IAAI,CAAC;KACZ,KACE,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,YAAY,EAAE,CACZ,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,SAAS,KACX,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAChC,kBAAkB,EAAE,OAAO,yBAAyB,CAAC;IACrD,cAAc,EAAE,CACd,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,SAAS,EACd,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,cAAc,CAAC,EAAE,mBAAmB,CAAC;QACrC,GAAG,CAAC,EAAE,IAAI,CAAC;KACZ,KACE,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,WAAW,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAiLD,wBAAgB,wBAAwB,CACtC,SAAS,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAC/C,OAAO,CAqBT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/pull/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAEL,kBAAkB,IAAI,yBAAyB,EAI/C,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,UAAU,EAGhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,mBAAmB,EAEpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAUjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,UAAU,uBAAuB;IAC/B,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,yBAAyB,EAAE,OAAO,yBAAyB,CAAC;IAC5D,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,UAAU,EAAE,CACV,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,SAAS,EACd,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,cAAc,CAAC,EAAE,mBAAmB,CAAC;QACrC,GAAG,CAAC,EAAE,IAAI,CAAC;KACZ,KACE,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,YAAY,EAAE,CACZ,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,SAAS,KACX,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAChC,kBAAkB,EAAE,OAAO,yBAAyB,CAAC;IACrD,cAAc,EAAE,CACd,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,SAAS,EACd,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,cAAc,CAAC,EAAE,mBAAmB,CAAC;QACrC,GAAG,CAAC,EAAE,IAAI,CAAC;KACZ,KACE,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,WAAW,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAgED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,GAAG,EAAE,SAAS,GACb,OAAO,CAAC,IAAI,CAAC,CA8Df;AA6LD,wBAAgB,wBAAwB,CACtC,SAAS,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAC/C,OAAO,CAqBT"}
@@ -1,7 +1,11 @@
1
+ import { isAbsolute, relative, resolve, sep } from 'node:path';
1
2
  import { buildCommandContext, } from '../../../app/command-context.js';
2
3
  import { defaultGitRunner } from '../../project/sync/git.js';
3
- import { abortSynced as defaultAbortSynced, commitRecordChange as defaultCommitRecordChange, continueSynced as defaultContinueSynced, pullChildren as defaultPullChildren, pullSynced as defaultPullSynced, } from '../../project/sync/ref-sync.js';
4
- import { resolveSyncedTarget, } from '../../project/sync/resolve-target.js';
4
+ import { readSyncedRecord } from '../../project/sync/record.js';
5
+ import { abortSynced as defaultAbortSynced, commitRecordChange as defaultCommitRecordChange, continueSynced as defaultContinueSynced, pullChildren as defaultPullChildren, pullSynced as defaultPullSynced, buildSyncTarget, classifyRemoteRefLookup, } from '../../project/sync/ref-sync.js';
6
+ import { probeSyncedTerminalRefs, resolveSyncedTarget, } from '../../project/sync/resolve-target.js';
7
+ import { resolveProjectsRoot } from '../../shared/oat-paths.js';
8
+ import { completedSyncedRefName, resolveProjectScope, resolveScopeRoot, syncedRecordPath, } from '../../shared/project-scope.js';
5
9
  import { readGlobalOptions } from '../../shared/shared.utils.js';
6
10
  import { CliError } from '../../../errors/cli-error.js';
7
11
  import { resolveProjectRoot } from '../../../fs/paths.js';
@@ -9,6 +13,8 @@ import { Command } from 'commander';
9
13
  const DEFAULT_DEPENDENCIES = {
10
14
  buildCommandContext,
11
15
  resolveProjectRoot,
16
+ resolveProjectsRoot,
17
+ guardSyncedTerminalTarget,
12
18
  resolveSyncedTarget,
13
19
  pullSynced: defaultPullSynced,
14
20
  pullChildren: defaultPullChildren,
@@ -21,6 +27,66 @@ const DEFAULT_DEPENDENCIES = {
21
27
  function shellQuote(value) {
22
28
  return `'${value.replaceAll("'", "'\\''")}'`;
23
29
  }
30
+ function slugForTerminalGuard(repoRoot, projectsRoot, pathOrSlug) {
31
+ if (!pathOrSlug)
32
+ return null;
33
+ if (!pathOrSlug.includes('/') && !pathOrSlug.includes('\\')) {
34
+ return pathOrSlug;
35
+ }
36
+ const absolute = isAbsolute(pathOrSlug)
37
+ ? resolve(pathOrSlug)
38
+ : resolve(repoRoot, pathOrSlug);
39
+ const syncedRoot = resolveScopeRoot(repoRoot, projectsRoot, 'synced');
40
+ if (resolveProjectScope(absolute, resolveScopeRoot(repoRoot, projectsRoot, 'shared'), repoRoot) !== 'synced') {
41
+ return null;
42
+ }
43
+ const child = relative(syncedRoot, absolute);
44
+ return child && !child.includes(sep) ? child : null;
45
+ }
46
+ function terminalActionError(slug, action, state, completedRef, sha) {
47
+ const alias = state === 'both'
48
+ ? ' The matching active ref is only a stale terminal alias and is ignored.'
49
+ : '';
50
+ return new CliError(`Synced project ${slug} is already archived at ${completedRef}@${sha} and cannot be ${action === 'pull' ? 'pulled' : 'opened'}.${alias} Inspect the durable archive, or use oat project prune ${shellQuote(slug)} only to intentionally remove retained terminal ref reachability.`, 1);
51
+ }
52
+ export async function guardSyncedTerminalTarget(repoRoot, projectsRoot, pathOrSlug, action, git) {
53
+ const slug = slugForTerminalGuard(repoRoot, projectsRoot, pathOrSlug);
54
+ if (!slug)
55
+ return;
56
+ const target = buildSyncTarget(repoRoot, projectsRoot, slug);
57
+ const record = await readSyncedRecord(syncedRecordPath(target.syncedRoot, slug));
58
+ if (record?.status === 'complete') {
59
+ if (record.archiveSourceRefSha) {
60
+ const probe = await probeSyncedTerminalRefs(target, record.archiveSourceRefSha, git);
61
+ if (probe.state === 'wrong-sha') {
62
+ throw new CliError(`Invalid terminal refs for ${slug}: active ${probe.activeRef} is ${probe.activeSha ?? 'absent'}, completed ${probe.completedRef} is ${probe.completedSha ?? 'absent'}, expected archived source ${record.archiveSourceRefSha}. Repair the ref mismatch before retrying completion or prune; the project was not ${action === 'pull' ? 'pulled' : 'opened'}.`, 1);
63
+ }
64
+ }
65
+ const detail = record.archiveSnapshot
66
+ ? 'Its durable archive exists, but legacy terminal cleanup is still pending.'
67
+ : 'Its archive snapshot metadata is incomplete.';
68
+ throw new CliError(`Synced project ${slug} has a legacy complete record and cannot be ${action === 'pull' ? 'pulled' : 'opened'}. ${detail} Retry oat-project-complete to finish archive retirement; do not rematerialize the checkout.`, 1);
69
+ }
70
+ const completedRef = completedSyncedRefName(slug);
71
+ const lookup = await git.run(['ls-remote', '--exit-code', target.remote, completedRef], { cwd: repoRoot, allowFailure: true });
72
+ if (classifyRemoteRefLookup(lookup, target.remote, completedRef) === 'absent') {
73
+ return;
74
+ }
75
+ const rows = lookup.stdout.split('\n').filter(Boolean);
76
+ const [sha, advertisedRef] = rows[0]?.trim().split(/\s+/) ?? [];
77
+ if (rows.length !== 1 ||
78
+ advertisedRef !== completedRef ||
79
+ !/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/i.test(sha ?? '')) {
80
+ throw new CliError(`Unable to verify terminal identity for ${slug}: origin returned a malformed completed-ref advertisement.`, 2);
81
+ }
82
+ const probe = await probeSyncedTerminalRefs(target, sha, git);
83
+ if (probe.state === 'wrong-sha') {
84
+ throw new CliError(`Invalid terminal refs for ${slug}: active ${probe.activeRef} is ${probe.activeSha ?? 'absent'}, completed ${probe.completedRef} is ${probe.completedSha ?? 'absent'}, expected ${sha}. Repair the ref mismatch before retrying completion or prune; the project was not ${action === 'pull' ? 'pulled' : 'opened'}.`, 1);
85
+ }
86
+ if (probe.state === 'completed-only' || probe.state === 'both') {
87
+ throw terminalActionError(slug, action, probe.state, completedRef, sha);
88
+ }
89
+ }
24
90
  function reportPullResult(context, result, target, targetArg, children = []) {
25
91
  const payload = {
26
92
  ...result,
@@ -89,7 +155,20 @@ async function runPull(context, pathOrSlug, options, dependencies) {
89
155
  throw new CliError('`--continue` and `--abort` are mutually exclusive.', 1);
90
156
  }
91
157
  const repoRoot = await dependencies.resolveProjectRoot(context.cwd);
92
- const target = await dependencies.resolveSyncedTarget({ repoRoot, env: dependencies.processEnv }, pathOrSlug, {}, { allowMissingCheckout: !options.continue && !options.abort });
158
+ const projectsRoot = await dependencies.resolveProjectsRoot(repoRoot, dependencies.processEnv);
159
+ let target;
160
+ try {
161
+ target = await dependencies.resolveSyncedTarget({ repoRoot, env: dependencies.processEnv }, pathOrSlug, {}, { allowMissingCheckout: !options.continue && !options.abort });
162
+ }
163
+ catch (error) {
164
+ if (error instanceof CliError &&
165
+ error.exitCode === 1 &&
166
+ error.message.startsWith('No synced project named ')) {
167
+ await dependencies.guardSyncedTerminalTarget(repoRoot, projectsRoot, pathOrSlug, 'pull', dependencies.gitRunner);
168
+ }
169
+ throw error;
170
+ }
171
+ await dependencies.guardSyncedTerminalTarget(repoRoot, projectsRoot, pathOrSlug ?? target.projectPath, 'pull', dependencies.gitRunner);
93
172
  const targetArg = pathOrSlug ?? target.projectPath;
94
173
  if (options.abort) {
95
174
  await dependencies.abortSynced(target, dependencies.gitRunner);
@@ -12,7 +12,16 @@ export interface GitRunOptions {
12
12
  export interface GitRunner {
13
13
  run(args: string[], options: GitRunOptions): Promise<GitResult>;
14
14
  }
15
+ export interface AtomicRefTransition {
16
+ remote: string;
17
+ sourceSha: string;
18
+ activeRef: string;
19
+ completedRef: string;
20
+ completedExpectedSha: string | null;
21
+ }
15
22
  export type ExecFileImplementation = (file: string, args: readonly string[], options: ExecFileOptionsWithStringEncoding, callback: (error: ExecFileException | null, stdout: string, stderr: string) => void) => unknown;
23
+ export declare function pushAtomicRefTransition(git: GitRunner, cwd: string, transition: AtomicRefTransition): Promise<GitResult>;
24
+ export declare function isAtomicPushUnsupported(result: GitResult): boolean;
16
25
  export declare function createGitRunner(execFileImpl?: ExecFileImplementation): GitRunner;
17
26
  export declare const defaultGitRunner: GitRunner;
18
27
  //# sourceMappingURL=git.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/sync/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iCAAiC,EACvC,MAAM,oBAAoB,CAAC;AAI5B,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACjE;AAED,MAAM,MAAM,sBAAsB,GAAG,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,iCAAiC,EAC1C,QAAQ,EAAE,CACR,KAAK,EAAE,iBAAiB,GAAG,IAAI,EAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACX,IAAI,KACN,OAAO,CAAC;AAqCb,wBAAgB,eAAe,CAC7B,YAAY,GAAE,sBAAiC,GAC9C,SAAS,CAqCX;AAED,eAAO,MAAM,gBAAgB,WAAoB,CAAC"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/sync/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iCAAiC,EACvC,MAAM,oBAAoB,CAAC;AAI5B,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,MAAM,sBAAsB,GAAG,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,iCAAiC,EAC1C,QAAQ,EAAE,CACR,KAAK,EAAE,iBAAiB,GAAG,IAAI,EAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACX,IAAI,KACN,OAAO,CAAC;AAEb,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,mBAAmB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAapB;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CASlE;AAqCD,wBAAgB,eAAe,CAC7B,YAAY,GAAE,sBAAiC,GAC9C,SAAS,CAqCX;AAED,eAAO,MAAM,gBAAgB,WAAoB,CAAC"}
@@ -1,5 +1,23 @@
1
1
  import { execFile, } from 'node:child_process';
2
2
  import { CliError } from '../../../errors/cli-error.js';
3
+ export function pushAtomicRefTransition(git, cwd, transition) {
4
+ return git.run([
5
+ 'push',
6
+ '--atomic',
7
+ `--force-with-lease=${transition.activeRef}:${transition.sourceSha}`,
8
+ `--force-with-lease=${transition.completedRef}:${transition.completedExpectedSha ?? ''}`,
9
+ transition.remote,
10
+ `${transition.sourceSha}:${transition.completedRef}`,
11
+ `:${transition.activeRef}`,
12
+ ], { cwd, allowFailure: true });
13
+ }
14
+ export function isAtomicPushUnsupported(result) {
15
+ if (result.code === 0)
16
+ return false;
17
+ const detail = `${result.stderr}\n${result.stdout}`;
18
+ return (/(?:does not support|not supported).*(?:--atomic|atomic push)/i.test(detail) ||
19
+ /(?:--atomic|atomic push).*(?:does not support|not supported)/i.test(detail));
20
+ }
3
21
  function numericExitCode(error) {
4
22
  return typeof error?.code === 'number' ? error.code : 0;
5
23
  }
@@ -1,7 +1,7 @@
1
1
  import { ensureScopedRootGitignore } from '../../init/gitignore.js';
2
2
  import { readOatLocalConfig, writeOatLocalConfig } from '../../../config/oat-config.js';
3
3
  import { copyDirectory } from '../../../fs/io.js';
4
- import type { GitRunner } from './git.js';
4
+ import { type GitRunner } from './git.js';
5
5
  export interface SyncTarget {
6
6
  repoRoot: string;
7
7
  sharedRoot: string;
@@ -62,6 +62,18 @@ export type MigrateResult = {
62
62
  lifecycleCommit: string | null;
63
63
  sha: string;
64
64
  };
65
+ export type SyncedRefRetirementReceipt = {
66
+ status: 'retired' | 'already-retired';
67
+ state: 'completed-only' | 'matching-aliases';
68
+ activeAliasRetained: boolean;
69
+ activeRef: string;
70
+ completedRef: string;
71
+ verifiedSha: string;
72
+ };
73
+ export type CompletedSyncedRefDeletionReceipt = {
74
+ completedRef: string;
75
+ deleted: boolean;
76
+ };
65
77
  export declare function classifyRemoteRefLookup(result: {
66
78
  code: number;
67
79
  stdout: string;
@@ -105,9 +117,12 @@ export declare function preflightSyncedCheckout(target: SyncTarget, git: GitRunn
105
117
  export declare function removeSyncedCheckout(target: SyncTarget, git: GitRunner, options?: {
106
118
  force?: boolean;
107
119
  }): Promise<RemoveResult>;
120
+ export declare function retireSyncedRef(target: SyncTarget, sourceSha: string, git: GitRunner): Promise<SyncedRefRetirementReceipt>;
121
+ export declare function deleteCompletedSyncedRefForPrune(target: SyncTarget, git: GitRunner): Promise<CompletedSyncedRefDeletionReceipt>;
108
122
  export declare function pruneSynced(target: SyncTarget, git: GitRunner, options: {
109
123
  force: boolean;
110
124
  commit: boolean;
125
+ expectedActiveAliasSha?: string;
111
126
  }): Promise<PruneResult>;
112
127
  export declare function migrateSharedToSynced(target: SyncTarget, git: GitRunner, options: MigrateSharedToSyncedOptions): Promise<MigrateResult>;
113
128
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ref-sync.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/sync/ref-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ref-sync.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/sync/ref-sync.ts"],"names":[],"mappings":"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"}