@open-agent-toolkit/cli 0.1.72 → 0.1.74

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 (134) hide show
  1. package/README.md +1 -0
  2. package/assets/config/dispatch-matrix-recommendation.json +13 -17
  3. package/assets/docs/cli-utilities/configuration.md +42 -60
  4. package/assets/docs/cli-utilities/index.md +1 -0
  5. package/assets/docs/cli-utilities/project-log.md +183 -0
  6. package/assets/docs/cli-utilities/workflow-gates.md +38 -2
  7. package/assets/docs/provider-sync/providers.md +15 -17
  8. package/assets/docs/reference/cli-reference.md +1 -0
  9. package/assets/docs/workflows/projects/artifacts.md +1 -1
  10. package/assets/docs/workflows/projects/dispatch-ceiling.md +29 -33
  11. package/assets/docs/workflows/projects/implementation-execution.md +7 -4
  12. package/assets/docs/workflows/projects/lifecycle.md +4 -3
  13. package/assets/public-package-versions.json +4 -4
  14. package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
  15. package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +27 -15
  16. package/assets/skills/oat-project-autonomous/SKILL.md +1 -1
  17. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +4 -3
  18. package/assets/skills/oat-project-complete/SKILL.md +60 -1
  19. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +4 -3
  20. package/assets/skills/oat-project-implement/SKILL.md +18 -2
  21. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +17 -15
  22. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +15 -9
  23. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +4 -3
  24. package/assets/skills/oat-project-implement/references/phase-execution.md +11 -5
  25. package/assets/skills/oat-project-import-plan/SKILL.md +30 -8
  26. package/assets/skills/oat-project-plan/SKILL.md +30 -8
  27. package/assets/skills/oat-project-plan-writing/SKILL.md +12 -9
  28. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +4 -3
  29. package/assets/skills/oat-project-quick-start/SKILL.md +30 -8
  30. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +4 -3
  31. package/assets/skills/oat-project-review-provide/SKILL.md +19 -11
  32. package/assets/skills/oat-project-review-provide-remote/SKILL.md +27 -4
  33. package/assets/skills/oat-project-summary/SKILL.md +122 -18
  34. package/assets/templates/project-log.md +47 -0
  35. package/dist/commands/config/index.d.ts.map +1 -1
  36. package/dist/commands/config/index.js +41 -0
  37. package/dist/commands/doctor/index.d.ts +2 -1
  38. package/dist/commands/doctor/index.d.ts.map +1 -1
  39. package/dist/commands/doctor/index.js +37 -1
  40. package/dist/commands/gate/index.d.ts +3 -1
  41. package/dist/commands/gate/index.d.ts.map +1 -1
  42. package/dist/commands/gate/index.js +134 -7
  43. package/dist/commands/init/index.d.ts +1 -1
  44. package/dist/commands/init/index.d.ts.map +1 -1
  45. package/dist/commands/init/index.js +40 -8
  46. package/dist/commands/init/tools/shared/skill-manifest.d.ts +1 -1
  47. package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
  48. package/dist/commands/init/tools/shared/skill-manifest.js +1 -0
  49. package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
  50. package/dist/commands/project/dispatch-ceiling/index.js +17 -9
  51. package/dist/commands/project/index.d.ts.map +1 -1
  52. package/dist/commands/project/index.js +2 -0
  53. package/dist/commands/project/log/append.d.ts +41 -0
  54. package/dist/commands/project/log/append.d.ts.map +1 -0
  55. package/dist/commands/project/log/append.js +241 -0
  56. package/dist/commands/project/log/check.d.ts +66 -0
  57. package/dist/commands/project/log/check.d.ts.map +1 -0
  58. package/dist/commands/project/log/check.js +194 -0
  59. package/dist/commands/project/log/grammar.d.ts +28 -0
  60. package/dist/commands/project/log/grammar.d.ts.map +1 -0
  61. package/dist/commands/project/log/grammar.js +31 -0
  62. package/dist/commands/project/log/index.d.ts +9 -0
  63. package/dist/commands/project/log/index.d.ts.map +1 -0
  64. package/dist/commands/project/log/index.js +13 -0
  65. package/dist/commands/project/log/rollup.d.ts +40 -0
  66. package/dist/commands/project/log/rollup.d.ts.map +1 -0
  67. package/dist/commands/project/log/rollup.js +203 -0
  68. package/dist/commands/project/log/synthesize.d.ts +23 -0
  69. package/dist/commands/project/log/synthesize.d.ts.map +1 -0
  70. package/dist/commands/project/log/synthesize.js +112 -0
  71. package/dist/commands/project/new/index.d.ts +1 -0
  72. package/dist/commands/project/new/index.d.ts.map +1 -1
  73. package/dist/commands/project/new/index.js +7 -0
  74. package/dist/commands/project/new/scaffold.d.ts +1 -0
  75. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  76. package/dist/commands/project/new/scaffold.js +24 -0
  77. package/dist/commands/shared/codex-strays.d.ts +9 -0
  78. package/dist/commands/shared/codex-strays.d.ts.map +1 -1
  79. package/dist/commands/shared/codex-strays.js +4 -0
  80. package/dist/commands/status/index.d.ts +7 -1
  81. package/dist/commands/status/index.d.ts.map +1 -1
  82. package/dist/commands/status/index.js +53 -17
  83. package/dist/commands/sync/apply.d.ts.map +1 -1
  84. package/dist/commands/sync/apply.js +50 -24
  85. package/dist/commands/sync/dry-run.d.ts.map +1 -1
  86. package/dist/commands/sync/dry-run.js +31 -18
  87. package/dist/commands/sync/index.d.ts.map +1 -1
  88. package/dist/commands/sync/index.js +34 -25
  89. package/dist/commands/sync/sync.types.d.ts +26 -11
  90. package/dist/commands/sync/sync.types.d.ts.map +1 -1
  91. package/dist/commands/sync/sync.utils.d.ts.map +1 -1
  92. package/dist/commands/sync/sync.utils.js +3 -2
  93. package/dist/config/oat-config.d.ts +3 -0
  94. package/dist/config/oat-config.d.ts.map +1 -1
  95. package/dist/config/oat-config.js +7 -0
  96. package/dist/config/resolve.d.ts.map +1 -1
  97. package/dist/config/resolve.js +2 -0
  98. package/dist/engine/index.d.ts +1 -1
  99. package/dist/engine/index.d.ts.map +1 -1
  100. package/dist/engine/index.js +1 -1
  101. package/dist/engine/scanner.d.ts +3 -1
  102. package/dist/engine/scanner.d.ts.map +1 -1
  103. package/dist/engine/scanner.js +4 -2
  104. package/dist/providers/ceiling/registry.d.ts +2 -0
  105. package/dist/providers/ceiling/registry.d.ts.map +1 -1
  106. package/dist/providers/ceiling/registry.js +20 -4
  107. package/dist/providers/codex/codec/sync-extension.d.ts +11 -10
  108. package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
  109. package/dist/providers/codex/codec/sync-extension.js +42 -14
  110. package/dist/providers/cursor/codec/catalog.d.ts +18 -0
  111. package/dist/providers/cursor/codec/catalog.d.ts.map +1 -0
  112. package/dist/providers/cursor/codec/catalog.js +39 -0
  113. package/dist/providers/cursor/codec/materialize.d.ts +24 -0
  114. package/dist/providers/cursor/codec/materialize.d.ts.map +1 -0
  115. package/dist/providers/cursor/codec/materialize.js +166 -0
  116. package/dist/providers/cursor/codec/shared.d.ts +14 -0
  117. package/dist/providers/cursor/codec/shared.d.ts.map +1 -0
  118. package/dist/providers/cursor/codec/shared.js +76 -0
  119. package/dist/providers/cursor/codec/sync-extension.d.ts +37 -0
  120. package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -0
  121. package/dist/providers/cursor/codec/sync-extension.js +393 -0
  122. package/dist/providers/cursor/index.d.ts +3 -0
  123. package/dist/providers/cursor/index.d.ts.map +1 -1
  124. package/dist/providers/cursor/index.js +3 -0
  125. package/dist/providers/identity/availability.d.ts +7 -0
  126. package/dist/providers/identity/availability.d.ts.map +1 -1
  127. package/dist/providers/identity/availability.js +23 -0
  128. package/dist/providers/shared/index.d.ts +2 -0
  129. package/dist/providers/shared/index.d.ts.map +1 -1
  130. package/dist/providers/shared/index.js +1 -0
  131. package/dist/providers/shared/materialization-extension.d.ts +44 -0
  132. package/dist/providers/shared/materialization-extension.d.ts.map +1 -0
  133. package/dist/providers/shared/materialization-extension.js +26 -0
  134. package/package.json +2 -2
@@ -4,6 +4,7 @@ import { mkdir, readdir, readFile, rm, writeFile } from 'node:fs/promises';
4
4
  import { tmpdir } from 'node:os';
5
5
  import { basename, isAbsolute, join, relative } from 'node:path';
6
6
  import { buildCommandContext, } from '../../app/command-context.js';
7
+ import { appendProjectLog } from '../project/log/append.js';
7
8
  import { getFrontmatterBlock, parseFrontmatterScalarFields, parseGeneratedTime, } from '../shared/frontmatter.js';
8
9
  import { readGlobalOptions } from '../shared/shared.utils.js';
9
10
  import { parseJsonConfig } from '../../config/json.js';
@@ -38,6 +39,7 @@ const DEFAULT_DEPENDENCIES = {
38
39
  readGateRouteReceipt,
39
40
  runProcess: runChildProcess,
40
41
  parseReviewGateVerdict,
42
+ appendProjectLog,
41
43
  processEnv: process.env,
42
44
  writeGateRunMarker,
43
45
  removeGateRunMarker,
@@ -811,6 +813,19 @@ function parseProducerIdentityOption(value) {
811
813
  }
812
814
  return identityFromRecords([{ value: producer, provenance: provenance }], 'flag');
813
815
  }
816
+ function parseEnvironmentProducerIdentity(value) {
817
+ const trimmed = value?.trim();
818
+ if (!trimmed) {
819
+ return unknownProducerIdentity();
820
+ }
821
+ const separator = trimmed.lastIndexOf(':');
822
+ const producer = separator > 0 ? trimmed.slice(0, separator).trim() : '';
823
+ const provenance = separator > 0 ? trimmed.slice(separator + 1).trim() : '';
824
+ if (!producer || provenance !== 'declared') {
825
+ return unknownProducerIdentity();
826
+ }
827
+ return identityFromRecords([{ value: producer, provenance: 'declared' }], 'environment');
828
+ }
814
829
  function identityFromStamp(stamp) {
815
830
  return identityFromRecords([{ value: stamp.producer, provenance: stamp.provenance }], 'stamp');
816
831
  }
@@ -820,11 +835,19 @@ function exactIdentityFromStamp(stamp) {
820
835
  ? identity
821
836
  : unknownProducerIdentity();
822
837
  }
838
+ function aggregateIdentityFromStamp(stamp) {
839
+ const producerIdentity = identityFromStamp(stamp);
840
+ if (producerIdentity.diversityClaimable &&
841
+ producerIdentity.family !== 'unknown') {
842
+ return producerIdentity;
843
+ }
844
+ return identityFromRecords([{ value: stamp.target, provenance: 'inferred' }], 'stamp');
845
+ }
823
846
  function aggregateIdentityFromStamps(stamps) {
824
847
  if (stamps.length === 0) {
825
848
  return unknownProducerIdentity();
826
849
  }
827
- const identities = stamps.map(identityFromStamp);
850
+ const identities = stamps.map(aggregateIdentityFromStamp);
828
851
  const avoidFamilies = [
829
852
  ...new Set(identities.flatMap((identity) => identity.diversityClaimable && identity.family !== 'unknown'
830
853
  ? [identity.family]
@@ -894,7 +917,17 @@ async function resolveReviewProducerIdentity(options) {
894
917
  if (options.explicit?.trim()) {
895
918
  return parseProducerIdentityOption(options.explicit);
896
919
  }
897
- return readStampedProducerIdentity(options);
920
+ const stamped = await readStampedProducerIdentity(options);
921
+ if (stamped.diversityClaimable) {
922
+ return stamped;
923
+ }
924
+ const environment = parseEnvironmentProducerIdentity(options.env.OAT_GATE_PRODUCER_IDENTITY);
925
+ return environment.diversityClaimable ? environment : stamped;
926
+ }
927
+ function reviewerChildProcessEnv(env) {
928
+ const childEnv = { ...env };
929
+ delete childEnv.OAT_GATE_PRODUCER_IDENTITY;
930
+ return childEnv;
898
931
  }
899
932
  function findPinnedModelArg(argv) {
900
933
  for (let index = 0; index < argv.length; index += 1) {
@@ -1654,6 +1687,29 @@ function writeReviewGateTargetingFailure(context, payload) {
1654
1687
  context.logger.error(`Expected project=${payload.corroboration.expectedProject} run=${payload.gateInvocation.runId}; actual containing_project=${payload.corroboration.actual.containingProject ?? 'missing'} artifact_project=${payload.corroboration.actual.artifactProject ?? 'missing'} run_matches=${payload.corroboration.actual.matchingArtifactPaths.join(',') || 'none'}.`);
1655
1688
  context.logger.error('This targeting failure is not receive-eligible and must be corrected before severity or invocation remediation.');
1656
1689
  }
1690
+ async function finalizeReviewGateProjectLog(context, dependencies, finalization) {
1691
+ const findings = finalization.counts
1692
+ ? ` findings=critical:${finalization.counts.critical},important:${finalization.counts.important},medium:${finalization.counts.medium},minor:${finalization.counts.minor}`
1693
+ : '';
1694
+ const artifact = finalization.artifactPath
1695
+ ? ` artifact=${finalization.artifactPath}`
1696
+ : '';
1697
+ const body = `target=${finalization.target} threshold=${finalization.threshold}${findings} exit=${finalization.exitCode} status=${finalization.status}${artifact}`;
1698
+ try {
1699
+ await dependencies.appendProjectLog({
1700
+ repoRoot: finalization.repoRoot,
1701
+ home: finalization.home,
1702
+ project: finalization.project,
1703
+ structural: true,
1704
+ producer: 'oat gate review',
1705
+ ref: finalization.ref,
1706
+ body,
1707
+ });
1708
+ }
1709
+ catch (error) {
1710
+ context.logger.warn(`Warning: unable to append oat gate review result to the project log: ${error instanceof Error ? error.message : String(error)}. Gate result is unchanged.`);
1711
+ }
1712
+ }
1657
1713
  async function updateConfigLayer(context, layer, dependencies, mutate) {
1658
1714
  const repoRoot = await dependencies.resolveProjectRoot(context.cwd);
1659
1715
  const userConfigDir = join(context.home, '.oat');
@@ -1809,6 +1865,8 @@ async function runReviewGate(prompt, options, context, dependencies) {
1809
1865
  let runMarkerPath;
1810
1866
  let runMarkerWritten = false;
1811
1867
  let branchLocalGateCli;
1868
+ let projectLogFinalization;
1869
+ let projectLogFinalized = false;
1812
1870
  let postSelectionContext;
1813
1871
  try {
1814
1872
  const repoRoot = await dependencies.resolveProjectRoot(context.cwd);
@@ -1822,6 +1880,7 @@ async function runReviewGate(prompt, options, context, dependencies) {
1822
1880
  const projectPath = reviewProject.path;
1823
1881
  const targets = resolveExecTargets(effective);
1824
1882
  const producerIdentity = await resolveReviewProducerIdentity({
1883
+ env: dependencies.processEnv,
1825
1884
  explicit: options.producerIdentity,
1826
1885
  repoRoot,
1827
1886
  projectPath,
@@ -1854,6 +1913,16 @@ async function runReviewGate(prompt, options, context, dependencies) {
1854
1913
  dispatchReport,
1855
1914
  };
1856
1915
  const threshold = parseReviewGateThreshold(options.exitNonzeroOn);
1916
+ projectLogFinalization = {
1917
+ repoRoot,
1918
+ home: context.home,
1919
+ project: projectPath,
1920
+ ref: options.reviewScope?.trim() || 'gate-review',
1921
+ target: selected.id,
1922
+ threshold,
1923
+ status: 'review_failed',
1924
+ exitCode: 1,
1925
+ };
1857
1926
  const before = await listReviewGateArtifactCandidates({
1858
1927
  repoRoot,
1859
1928
  effective,
@@ -1902,7 +1971,7 @@ async function runReviewGate(prompt, options, context, dependencies) {
1902
1971
  const childResult = await executeTarget(selected, [reviewPrompt], context, {
1903
1972
  ...dependencies,
1904
1973
  processEnv: {
1905
- ...dependencies.processEnv,
1974
+ ...reviewerChildProcessEnv(dependencies.processEnv),
1906
1975
  OAT_GATE_HEADLESS: '1',
1907
1976
  OAT_NON_INTERACTIVE: '1',
1908
1977
  OAT_GATE_RUN_ID: runId,
@@ -1926,6 +1995,10 @@ async function runReviewGate(prompt, options, context, dependencies) {
1926
1995
  if (!refusal) {
1927
1996
  return false;
1928
1997
  }
1998
+ if (projectLogFinalization) {
1999
+ projectLogFinalization.status = 'review_failed';
2000
+ projectLogFinalization.exitCode = 1;
2001
+ }
1929
2002
  writeReviewGateExecutionFailure(context, {
1930
2003
  runId,
1931
2004
  target: selected.id,
@@ -1955,12 +2028,21 @@ async function runReviewGate(prompt, options, context, dependencies) {
1955
2028
  before,
1956
2029
  after,
1957
2030
  });
2031
+ if (projectLogFinalization) {
2032
+ projectLogFinalization.artifactPath =
2033
+ artifactResolution.artifact?.path ??
2034
+ artifactResolution.diagnosticArtifact?.path;
2035
+ }
1958
2036
  if (!artifactResolution.artifact && writeRefusalFailure()) {
1959
2037
  return;
1960
2038
  }
1961
2039
  if (childExitCode !== 0 &&
1962
2040
  !childResult.timedOut &&
1963
2041
  !artifactResolution.artifact) {
2042
+ if (projectLogFinalization) {
2043
+ projectLogFinalization.status = 'review_failed';
2044
+ projectLogFinalization.exitCode = childExitCode;
2045
+ }
1964
2046
  writeReviewGateExecutionFailure(context, {
1965
2047
  runId,
1966
2048
  target: selected.id,
@@ -1982,6 +2064,10 @@ async function runReviewGate(prompt, options, context, dependencies) {
1982
2064
  if (childResult.timedOut &&
1983
2065
  artifactResolution.matchingArtifactPaths.length === 0 &&
1984
2066
  !artifactResolution.diagnosticArtifact) {
2067
+ if (projectLogFinalization) {
2068
+ projectLogFinalization.status = 'review_failed';
2069
+ projectLogFinalization.exitCode = childExitCode;
2070
+ }
1985
2071
  writeReviewGateExecutionFailure(context, {
1986
2072
  runId,
1987
2073
  target: selected.id,
@@ -2017,6 +2103,10 @@ async function runReviewGate(prompt, options, context, dependencies) {
2017
2103
  : initialTargetCorroboration.run === 'mismatched'
2018
2104
  ? `The changed review artifact did not carry the expected gate run ID ${runId}.`
2019
2105
  : `No direct active project review artifact carried gate run ID ${runId}.`;
2106
+ if (projectLogFinalization) {
2107
+ projectLogFinalization.status = 'targeting_correlation_failed';
2108
+ projectLogFinalization.exitCode = 1;
2109
+ }
2020
2110
  writeReviewGateTargetingFailure(context, {
2021
2111
  runId,
2022
2112
  target: selected.id,
@@ -2038,6 +2128,10 @@ async function runReviewGate(prompt, options, context, dependencies) {
2038
2128
  if (writeRefusalFailure()) {
2039
2129
  return;
2040
2130
  }
2131
+ if (projectLogFinalization) {
2132
+ projectLogFinalization.status = 'targeting_correlation_failed';
2133
+ projectLogFinalization.exitCode = 1;
2134
+ }
2041
2135
  writeReviewGateTargetingFailure(context, {
2042
2136
  runId,
2043
2137
  target: selected.id,
@@ -2062,6 +2156,10 @@ async function runReviewGate(prompt, options, context, dependencies) {
2062
2156
  if (writeRefusalFailure()) {
2063
2157
  return;
2064
2158
  }
2159
+ if (projectLogFinalization) {
2160
+ projectLogFinalization.status = 'artifact_validation_failed';
2161
+ projectLogFinalization.exitCode = 1;
2162
+ }
2065
2163
  writeReviewGateArtifactValidationFailure(context, {
2066
2164
  runId,
2067
2165
  target: selected.id,
@@ -2093,6 +2191,10 @@ async function runReviewGate(prompt, options, context, dependencies) {
2093
2191
  return;
2094
2192
  }
2095
2193
  const detail = error instanceof Error ? error.message : String(error);
2194
+ if (projectLogFinalization) {
2195
+ projectLogFinalization.status = 'artifact_validation_failed';
2196
+ projectLogFinalization.exitCode = 1;
2197
+ }
2096
2198
  writeReviewGateArtifactValidationFailure(context, {
2097
2199
  runId,
2098
2200
  target: selected.id,
@@ -2109,6 +2211,9 @@ async function runReviewGate(prompt, options, context, dependencies) {
2109
2211
  process.exitCode = 1;
2110
2212
  return;
2111
2213
  }
2214
+ if (projectLogFinalization) {
2215
+ projectLogFinalization.counts = verdict.counts;
2216
+ }
2112
2217
  const targetCorroboration = initialTargetCorroboration;
2113
2218
  const corroboration = corroborateGateInvocation(gateInvocation, verdict.gateInvocation, targetCorroboration);
2114
2219
  if (corroboration.run !== 'matched' ||
@@ -2118,6 +2223,10 @@ async function runReviewGate(prompt, options, context, dependencies) {
2118
2223
  }
2119
2224
  const missing = corroboration.run === 'missing' ||
2120
2225
  corroboration.invocation === 'missing';
2226
+ if (projectLogFinalization) {
2227
+ projectLogFinalization.status = 'artifact_validation_failed';
2228
+ projectLogFinalization.exitCode = 1;
2229
+ }
2121
2230
  writeReviewGateArtifactValidationFailure(context, {
2122
2231
  runId,
2123
2232
  target: selected.id,
@@ -2140,6 +2249,10 @@ async function runReviewGate(prompt, options, context, dependencies) {
2140
2249
  if (writeRefusalFailure()) {
2141
2250
  return;
2142
2251
  }
2252
+ if (projectLogFinalization) {
2253
+ projectLogFinalization.status = 'artifact_validation_failed';
2254
+ projectLogFinalization.exitCode = 1;
2255
+ }
2143
2256
  writeReviewGateArtifactValidationFailure(context, {
2144
2257
  runId,
2145
2258
  target: selected.id,
@@ -2163,6 +2276,12 @@ async function runReviewGate(prompt, options, context, dependencies) {
2163
2276
  threshold,
2164
2277
  blocking,
2165
2278
  });
2279
+ if (projectLogFinalization) {
2280
+ projectLogFinalization.status = blocking ? 'blocked' : 'ok';
2281
+ projectLogFinalization.exitCode = blocking ? 1 : 0;
2282
+ projectLogFinalization.counts = verdict.counts;
2283
+ projectLogFinalization.artifactPath = producedArtifact.path;
2284
+ }
2166
2285
  writeReviewGateResult(context, {
2167
2286
  status: blocking ? 'blocked' : 'ok',
2168
2287
  runId,
@@ -2200,11 +2319,19 @@ async function runReviewGate(prompt, options, context, dependencies) {
2200
2319
  }
2201
2320
  }
2202
2321
  finally {
2203
- if (branchLocalGateCli) {
2204
- await dependencies.removeBranchLocalGateCli(branchLocalGateCli);
2322
+ try {
2323
+ if (branchLocalGateCli) {
2324
+ await dependencies.removeBranchLocalGateCli(branchLocalGateCli);
2325
+ }
2326
+ if (runMarkerPath) {
2327
+ await dependencies.removeGateRunMarker(runMarkerPath, (message) => context.logger.warn(message));
2328
+ }
2205
2329
  }
2206
- if (runMarkerPath) {
2207
- await dependencies.removeGateRunMarker(runMarkerPath, (message) => context.logger.warn(message));
2330
+ finally {
2331
+ if (projectLogFinalization && !projectLogFinalized) {
2332
+ projectLogFinalized = true;
2333
+ await finalizeReviewGateProjectLog(context, dependencies, projectLogFinalization);
2334
+ }
2208
2335
  }
2209
2336
  }
2210
2337
  }
@@ -28,7 +28,7 @@ interface InitDependencies {
28
28
  loadManifest: (manifestPath: string) => Promise<Manifest>;
29
29
  saveManifest: (manifestPath: string, manifest: Manifest) => Promise<void>;
30
30
  scanCanonical: (scopeRoot: string, scope: ConcreteScope) => Promise<CanonicalEntry[]>;
31
- collectStrays: (scopeRoot: string, scope: ConcreteScope, manifest: Manifest, canonicalEntries: CanonicalEntry[], activeAdapters?: ProviderAdapter[]) => Promise<InitStrayCandidate[]>;
31
+ collectStrays: (scopeRoot: string, scope: ConcreteScope, manifest: Manifest, canonicalEntries: CanonicalEntry[], activeAdapters?: ProviderAdapter[], userConfigDir?: string) => Promise<InitStrayCandidate[]>;
32
32
  confirmAction: (message: string, ctx: PromptContext) => Promise<boolean>;
33
33
  selectManyWithAbort: <T extends string>(message: string, choices: MultiSelectChoice<T>[], ctx: PromptContext) => Promise<T[] | null>;
34
34
  selectProvidersWithAbort: <T extends string>(message: string, choices: MultiSelectChoice<T>[], ctx: PromptContext) => Promise<T[] | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { applyOatCoreGitignore, } from '../init/gitignore.js';
6
6
  import { applyGitignore } from '../local/apply.js';
7
7
  import { addLocalPaths } from '../local/manage.js';
8
8
  import { adoptStrayToCanonical, isAdoptionConflictError, } from '../shared/adopt-stray.js';
9
- import { detectCodexRoleStrays, regenerateCodexAfterAdoption, } from '../shared/codex-strays.js';
9
+ import { detectCodexRoleStrays, filterMaterializationManagedStrays, regenerateCodexAfterAdoption, } from '../shared/codex-strays.js';
10
10
  import { PROVIDER_CONFIG_REMEDIATION } from '../shared/messages.js';
11
11
  import { withScopeOption } from '../shared/scope-option.js';
12
12
  import { confirmAction, inputWithDefault, selectManyWithAbort, selectWithAbort, } from '../shared/shared.prompts.js';
@@ -14,7 +14,7 @@ import { readGlobalOptions, resolveConcreteScopes, } from '../shared/shared.util
14
14
  import { DEFAULT_SYNC_CONFIG, loadSyncConfig, saveSyncConfig, } from '../../config/index.js';
15
15
  import { detectDefaultBranch, readUserConfig, readOatConfig, resolveLocalPaths, writeOatConfig, } from '../../config/oat-config.js';
16
16
  import { detectStrays, filterKnownStrays, } from '../../drift/index.js';
17
- import { configureLocalHooksPath, getHookInstallInfo, installHook, isHookInstalled, scanCanonical, uninstallHook, } from '../../engine/index.js';
17
+ import { configureLocalHooksPath, getHookInstallInfo, installHook, isHookInstalled, scanBundledManagedAgents, scanCanonical, uninstallHook, } from '../../engine/index.js';
18
18
  import { dirExists, fileExists } from '../../fs/io.js';
19
19
  import { resolveProjectRoot, resolveScopeRoot } from '../../fs/paths.js';
20
20
  import { normalizeToPosixPath } from '../../fs/paths.js';
@@ -24,6 +24,7 @@ import { codexAdapter } from '../../providers/codex/index.js';
24
24
  import { applyCodexProjectExtensionPlan, computeCodexProjectExtensionPlan, } from '../../providers/codex/codec/sync-extension.js';
25
25
  import { copilotAdapter } from '../../providers/copilot/index.js';
26
26
  import { cursorAdapter } from '../../providers/cursor/index.js';
27
+ import { applyCursorProjectExtensionPlan, computeCursorProjectExtensionPlan, } from '../../providers/cursor/codec/sync-extension.js';
27
28
  import { geminiAdapter } from '../../providers/gemini/index.js';
28
29
  import { getActiveAdapters, getConfigAwareAdapters, getSyncMappings, } from '../../providers/shared/index.js';
29
30
  import { Command } from 'commander';
@@ -49,15 +50,43 @@ async function ensureCanonicalDirectories(scopeRoot, scope) {
49
50
  await mkdir(join(scopeRoot, '.agents', 'rules'), { recursive: true });
50
51
  }
51
52
  }
52
- async function collectStraysDefault(scopeRoot, scope, manifest, canonicalEntries, activeAdapters) {
53
+ async function collectStraysDefault(scopeRoot, scope, manifest, canonicalEntries, activeAdapters, userConfigDir = join(scopeRoot, '.oat')) {
53
54
  const adaptersToScan = activeAdapters ??
54
55
  (await getActiveAdapters(getDefaultAdapters(), scopeRoot));
55
56
  const candidates = [];
57
+ const hasMaterializationAdapter = adaptersToScan.some((adapter) => adapter.name === 'codex' || adapter.name === 'cursor');
58
+ const materializationCanonicalEntries = scope === 'user' && hasMaterializationAdapter
59
+ ? [...canonicalEntries, ...(await scanBundledManagedAgents())]
60
+ : canonicalEntries;
61
+ const codexExtensionPlan = adaptersToScan.some((adapter) => adapter.name === 'codex')
62
+ ? await computeCodexProjectExtensionPlan(scopeRoot, materializationCanonicalEntries, undefined, { userConfigDir })
63
+ : undefined;
64
+ const cursorExtensionPlan = adaptersToScan.some((adapter) => adapter.name === 'cursor')
65
+ ? await computeCursorProjectExtensionPlan(scopeRoot, materializationCanonicalEntries, undefined, { userConfigDir })
66
+ : undefined;
67
+ const materializationPlans = [
68
+ ...(codexExtensionPlan
69
+ ? [
70
+ {
71
+ provider: 'codex',
72
+ operations: codexExtensionPlan.operations.map((operation) => ({
73
+ ...operation,
74
+ provider: 'codex',
75
+ entryName: operation.roleName,
76
+ })),
77
+ managedEntries: codexExtensionPlan.managedRoles,
78
+ aggregateHash: codexExtensionPlan.aggregateConfigHash,
79
+ metadata: codexExtensionPlan.metadata,
80
+ },
81
+ ]
82
+ : []),
83
+ ...(cursorExtensionPlan ? [cursorExtensionPlan] : []),
84
+ ];
56
85
  for (const adapter of adaptersToScan) {
57
86
  const mappings = getSyncMappings(adapter, scope);
58
87
  for (const mapping of mappings) {
59
88
  const providerDir = join(scopeRoot, mapping.providerDir);
60
- const strays = await detectStrays(adapter.name, providerDir, manifest, canonicalEntries, mapping);
89
+ const strays = filterMaterializationManagedStrays((await detectStrays(adapter.name, providerDir, manifest, canonicalEntries, mapping)).map((report) => ({ provider: adapter.name, report })), materializationPlans).map((candidate) => candidate.report);
61
90
  for (const report of strays) {
62
91
  if (report.state.status !== 'stray') {
63
92
  continue;
@@ -70,9 +99,7 @@ async function collectStraysDefault(scopeRoot, scope, manifest, canonicalEntries
70
99
  }
71
100
  }
72
101
  }
73
- if (scope === 'project' &&
74
- adaptersToScan.some((adapter) => adapter.name === 'codex')) {
75
- const codexExtensionPlan = await computeCodexProjectExtensionPlan(scopeRoot, canonicalEntries);
102
+ if (adaptersToScan.some((adapter) => adapter.name === 'codex')) {
76
103
  const codexStrays = await detectCodexRoleStrays(scopeRoot, canonicalEntries, new Set(codexExtensionPlan.managedRoles));
77
104
  for (const stray of codexStrays) {
78
105
  candidates.push({
@@ -481,7 +508,7 @@ async function runInitCommand(context, dependencies, hookFlag, setupFlag) {
481
508
  manifest = createEmptyManifest();
482
509
  }
483
510
  const canonicalEntries = await dependencies.scanCanonical(scopeRoot, scope);
484
- const collectedStrays = await dependencies.collectStrays(scopeRoot, scope, manifest, canonicalEntries, activeAdaptersForStrays);
511
+ const collectedStrays = await dependencies.collectStrays(scopeRoot, scope, manifest, canonicalEntries, activeAdaptersForStrays, userConfigDir);
485
512
  const { candidates: strays } = filterKnownStrays({
486
513
  reports: collectedStrays.map((stray) => stray.report),
487
514
  candidates: collectedStrays,
@@ -535,6 +562,11 @@ async function runInitCommand(context, dependencies, hookFlag, setupFlag) {
535
562
  computeExtensionPlan: computeCodexProjectExtensionPlan,
536
563
  applyExtensionPlan: applyCodexProjectExtensionPlan,
537
564
  });
565
+ if (activeAdaptersForStrays?.some((adapter) => adapter.name === 'cursor')) {
566
+ const refreshedCanonical = await dependencies.scanCanonical(scopeRoot, scope);
567
+ const cursorPlan = await computeCursorProjectExtensionPlan(scopeRoot, refreshedCanonical, undefined, { userConfigDir });
568
+ await applyCursorProjectExtensionPlan(scopeRoot, cursorPlan);
569
+ }
538
570
  }
539
571
  if (straysAdopted > 0) {
540
572
  context.logger.success(`Adopted ${straysAdopted} stray entr${straysAdopted === 1 ? 'y' : 'ies'} [${scope}].`);
@@ -13,7 +13,7 @@ export declare const PACK_METADATA: Record<string, PackMetadata>;
13
13
  export declare function resolvePackDefaultScope(packName: string): 'user' | 'project';
14
14
  export declare const WORKFLOW_SKILLS: readonly ["oat-cursor-cloud-projects", "oat-project-autonomous", "oat-project-capture", "oat-project-clear-active", "oat-project-complete", "oat-project-design", "oat-project-dispatch-subagents", "oat-project-discover", "oat-project-document", "oat-project-implement", "oat-project-import-plan", "oat-project-new", "oat-project-next", "oat-project-open", "oat-project-plan", "oat-project-plan-writing", "oat-project-pr-final", "oat-project-pr-progress", "oat-project-progress", "oat-project-promote-spec-driven", "oat-project-quick-start", "oat-project-reconcile", "oat-project-revise", "oat-project-review-provide", "oat-project-review-provide-remote", "oat-project-review-receive", "oat-project-review-receive-remote", "oat-project-spec", "oat-project-split", "oat-project-summary", "oat-repo-knowledge-index", "oat-worktree-bootstrap", "oat-worktree-bootstrap-auto", "oat-wrap-up"];
15
15
  export declare const WORKFLOW_AGENTS: readonly ["oat-codebase-mapper.md", "oat-phase-implementer.md", "oat-reviewer.md"];
16
- export declare const WORKFLOW_TEMPLATES: readonly ["state.md", "discovery.md", "spec.md", "design.md", "plan.md", "implementation.md", "summary.md"];
16
+ export declare const WORKFLOW_TEMPLATES: readonly ["state.md", "discovery.md", "spec.md", "design.md", "plan.md", "implementation.md", "summary.md", "project-log.md"];
17
17
  export declare const WORKFLOW_SCRIPTS: readonly ["generate-oat-state.sh", "generate-thin-index.sh", "resolve-tracking.sh"];
18
18
  export declare const IDEA_SKILLS: readonly ["oat-idea-new", "oat-idea-ideate", "oat-idea-summarize", "oat-idea-scratchpad"];
19
19
  export declare const CORE_SKILLS: readonly ["oat-docs", "oat-doctor"];
@@ -1 +1 @@
1
- {"version":3,"file":"skill-manifest.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/shared/skill-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAKtD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAID,eAAO,MAAM,eAAe,s3BAmClB,CAAC;AAEX,eAAO,MAAM,eAAe,oFAIlB,CAAC;AAEX,eAAO,MAAM,kBAAkB,6GAQrB,CAAC;AAEX,eAAO,MAAM,gBAAgB,qFAInB,CAAC;AAIX,eAAO,MAAM,WAAW,2FAKd,CAAC;AAIX,eAAO,MAAM,WAAW,qCAAsC,CAAC;AAI/D,eAAO,MAAM,WAAW,iLAQd,CAAC;AAEX,eAAO,MAAM,YAAY,kCAAmC,CAAC;AAI7D,eAAO,MAAM,cAAc,2NASjB,CAAC;AAIX,eAAO,MAAM,yBAAyB,sHAK5B,CAAC;AAEX,eAAO,MAAM,4BAA4B,yIAQ/B,CAAC;AAEX,eAAO,MAAM,0BAA0B,aAAc,CAAC;AAItD,eAAO,MAAM,iBAAiB,6BAA8B,CAAC;AAI7D,eAAO,MAAM,eAAe,2EAMlB,CAAC;AAEX,eAAO,MAAM,eAAe,qCAAsC,CAAC"}
1
+ {"version":3,"file":"skill-manifest.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/shared/skill-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAKtD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAID,eAAO,MAAM,eAAe,s3BAmClB,CAAC;AAEX,eAAO,MAAM,eAAe,oFAIlB,CAAC;AAEX,eAAO,MAAM,kBAAkB,+HASrB,CAAC;AAEX,eAAO,MAAM,gBAAgB,qFAInB,CAAC;AAIX,eAAO,MAAM,WAAW,2FAKd,CAAC;AAIX,eAAO,MAAM,WAAW,qCAAsC,CAAC;AAI/D,eAAO,MAAM,WAAW,iLAQd,CAAC;AAEX,eAAO,MAAM,YAAY,kCAAmC,CAAC;AAI7D,eAAO,MAAM,cAAc,2NASjB,CAAC;AAIX,eAAO,MAAM,yBAAyB,sHAK5B,CAAC;AAEX,eAAO,MAAM,4BAA4B,yIAQ/B,CAAC;AAEX,eAAO,MAAM,0BAA0B,aAAc,CAAC;AAItD,eAAO,MAAM,iBAAiB,6BAA8B,CAAC;AAI7D,eAAO,MAAM,eAAe,2EAMlB,CAAC;AAEX,eAAO,MAAM,eAAe,qCAAsC,CAAC"}
@@ -64,6 +64,7 @@ export const WORKFLOW_TEMPLATES = [
64
64
  'plan.md',
65
65
  'implementation.md',
66
66
  'summary.md',
67
+ 'project-log.md',
67
68
  ];
68
69
  export const WORKFLOW_SCRIPTS = [
69
70
  'generate-oat-state.sh',
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/dispatch-ceiling/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAa9B,OAAO,EAUL,KAAK,uBAAuB,EAY7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAsBzB,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAiC5C,UAAU,2BAA2B;IACnC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC7E,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAqmFD,wBAAgB,mCAAmC,CACjD,SAAS,GAAE,OAAO,CAAC,2BAA2B,CAAM,GACnD,OAAO,CAkGT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/dispatch-ceiling/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAa9B,OAAO,EAUL,KAAK,uBAAuB,EAY7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAsBzB,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAiC5C,UAAU,2BAA2B;IACnC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC7E,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAmnFD,wBAAgB,mCAAmC,CACjD,SAAS,GAAE,OAAO,CAAC,2BAA2B,CAAM,GACnD,OAAO,CAkGT"}
@@ -210,10 +210,10 @@ function uncappedPreferredTier(provider, role, preferredValue) {
210
210
  }
211
211
  function dispatchValueFromRouteTarget(target) {
212
212
  const adapter = getCeilingAdapter(target.harness);
213
- if (adapter.mechanism === 'pinned-variant') {
213
+ if (adapter.selectionAxis === 'model-effort') {
214
214
  return target.effort ?? null;
215
215
  }
216
- if (adapter.mechanism === 'model-arg') {
216
+ if (adapter.selectionAxis === 'model' || adapter.selectionAxis === 'tier') {
217
217
  return target.model ?? null;
218
218
  }
219
219
  return null;
@@ -226,7 +226,7 @@ function routeTargetFromBareValue(provider, value, routeIndex, routeLength) {
226
226
  routeIndex,
227
227
  routeLength,
228
228
  };
229
- if (adapter.mechanism === 'pinned-variant') {
229
+ if (adapter.selectionAxis === 'model-effort') {
230
230
  target.effort = value;
231
231
  }
232
232
  else {
@@ -398,13 +398,15 @@ function candidatePrimaryTarget(provider, tier, candidate) {
398
398
  throw new Error(`Malformed ${provider} candidate ordering in ${tier}: direct dispatch role names are not candidate models.`);
399
399
  }
400
400
  const targetAdapter = getCeilingAdapter(target.harness);
401
- if (targetAdapter.mechanism === 'pinned-variant' &&
401
+ if (targetAdapter.selectionAxis === 'model-effort' &&
402
402
  (!target.model ||
403
403
  !target.effort ||
404
404
  !CODEX_VALUES.includes(target.effort))) {
405
405
  throw new Error(`Malformed ${provider} candidate ordering in ${tier}: Codex candidates require a model and supported effort.`);
406
406
  }
407
- if (targetAdapter.mechanism === 'model-arg' && !target.model) {
407
+ if ((targetAdapter.selectionAxis === 'model' ||
408
+ targetAdapter.selectionAxis === 'tier') &&
409
+ !target.model) {
408
410
  throw new Error(`Malformed ${provider} candidate ordering in ${tier}: model-argument candidates require a model.`);
409
411
  }
410
412
  return target;
@@ -1053,7 +1055,7 @@ function selectDispatchValue(provider, role, policy, preferredValue) {
1053
1055
  target: selectedTarget,
1054
1056
  };
1055
1057
  }
1056
- function hasCodexVariantDispatchArgs(dispatchArgs) {
1058
+ function hasVariantDispatchArgs(dispatchArgs) {
1057
1059
  return (dispatchArgs !== null &&
1058
1060
  'variant' in dispatchArgs &&
1059
1061
  typeof dispatchArgs.variant === 'string' &&
@@ -1065,20 +1067,26 @@ function hasModelDispatchArgs(dispatchArgs) {
1065
1067
  typeof dispatchArgs.model === 'string' &&
1066
1068
  dispatchArgs.model.length > 0);
1067
1069
  }
1068
- function modelAxis(selection, dispatchArgs) {
1070
+ function modelAxis(provider, selection, dispatchArgs) {
1069
1071
  if (selection.target?.model && dispatchArgs) {
1070
1072
  return `selected:${selection.target.model}`;
1071
1073
  }
1072
1074
  if (hasModelDispatchArgs(dispatchArgs)) {
1073
1075
  return `selected:${dispatchArgs.model}`;
1074
1076
  }
1077
+ if (provider === 'cursor' &&
1078
+ hasVariantDispatchArgs(dispatchArgs) &&
1079
+ selection.target === null &&
1080
+ selection.selectedValue) {
1081
+ return `selected:${selection.selectedValue}`;
1082
+ }
1075
1083
  if (selection.selectionMode === 'inherit-default') {
1076
1084
  return 'inherited';
1077
1085
  }
1078
1086
  return 'unresolved';
1079
1087
  }
1080
1088
  function codexEffortAxis(selection, dispatchArgs) {
1081
- if (hasCodexVariantDispatchArgs(dispatchArgs) && selection.target?.effort) {
1089
+ if (hasVariantDispatchArgs(dispatchArgs) && selection.target?.effort) {
1082
1090
  return `selected:${selection.target.effort}`;
1083
1091
  }
1084
1092
  if (selection.selectionMode === 'inherit-default' ||
@@ -1149,7 +1157,7 @@ function buildProviderResolution(provider, policy, role, orchestratorTier, prefe
1149
1157
  mode,
1150
1158
  mechanism: adapter.mechanism,
1151
1159
  dispatchArgs,
1152
- modelAxis: modelAxis(selection, dispatchArgs),
1160
+ modelAxis: modelAxis(provider, selection, dispatchArgs),
1153
1161
  effortAxis: provider === 'codex'
1154
1162
  ? codexEffortAxis(selection, dispatchArgs)
1155
1163
  : 'not-applicable',
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/project/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,oBAAoB,IAAI,OAAO,CAe9C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/project/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,oBAAoB,IAAI,OAAO,CAgB9C"}
@@ -4,6 +4,7 @@ import { createProjectCompleteDiscoveryCommand } from './complete-discovery/inde
4
4
  import { createProjectCompleteStateCommand } from './complete-state/index.js';
5
5
  import { createProjectDispatchCeilingCommand } from './dispatch-ceiling/index.js';
6
6
  import { createProjectListCommand } from './list.js';
7
+ import { createProjectLogCommand } from './log/index.js';
7
8
  import { createProjectNewCommand } from './new/index.js';
8
9
  import { createProjectOpenCommand } from './open/index.js';
9
10
  import { createProjectPauseCommand } from './pause/index.js';
@@ -19,6 +20,7 @@ export function createProjectCommand() {
19
20
  .addCommand(createProjectCompleteStateCommand())
20
21
  .addCommand(createProjectDispatchCeilingCommand())
21
22
  .addCommand(createProjectListCommand())
23
+ .addCommand(createProjectLogCommand())
22
24
  .addCommand(createProjectNewCommand())
23
25
  .addCommand(createProjectOpenCommand())
24
26
  .addCommand(createProjectPauseCommand())
@@ -0,0 +1,41 @@
1
+ import { type CommandContext, type GlobalOptions } from '../../../app/command-context.js';
2
+ import { type ActiveProjectResolution } from '../../../config/oat-config.js';
3
+ import { type ResolvedConfig } from '../../../config/resolve.js';
4
+ import { Command } from 'commander';
5
+ export interface AppendProjectLogInput {
6
+ repoRoot: string;
7
+ home?: string;
8
+ project?: string;
9
+ structural?: boolean;
10
+ type?: string;
11
+ scope?: string;
12
+ area?: string;
13
+ producer?: string;
14
+ ref?: string;
15
+ body?: string;
16
+ versionNote?: string;
17
+ }
18
+ export type ProjectLogAppendResult = {
19
+ status: 'appended';
20
+ logPath: string;
21
+ heading: string;
22
+ created: boolean;
23
+ } | {
24
+ status: 'skipped';
25
+ reason: 'projectLog=false';
26
+ };
27
+ export interface AppendProjectLogDependencies {
28
+ resolveActiveProject: (repoRoot: string) => Promise<ActiveProjectResolution>;
29
+ resolveEffectiveConfig: (repoRoot: string, userConfigDir: string, env?: NodeJS.ProcessEnv) => Promise<ResolvedConfig>;
30
+ resolveAssetsRoot: () => Promise<string>;
31
+ now: () => Date;
32
+ }
33
+ export interface ProjectLogAppendCommandDependencies extends AppendProjectLogDependencies {
34
+ buildCommandContext: (options: GlobalOptions) => CommandContext;
35
+ resolveProjectRoot: (cwd: string) => Promise<string>;
36
+ readStdin: () => Promise<string>;
37
+ }
38
+ export declare function instantiateProjectLogTemplate(template: string, projectName: string, date: string): string;
39
+ export declare function appendProjectLog(input: AppendProjectLogInput, overrides?: Partial<AppendProjectLogDependencies>): Promise<ProjectLogAppendResult>;
40
+ export declare function createProjectLogAppendCommand(overrides?: Partial<ProjectLogAppendCommandDependencies>): Command;
41
+ //# sourceMappingURL=append.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"append.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/log/append.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAI9E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,sBAAsB,GAC9B;IACE,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,GACD;IACE,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEN,MAAM,WAAW,4BAA4B;IAC3C,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC7E,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,KACpB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB;AAqBD,MAAM,WAAW,mCAAoC,SAAQ,4BAA4B;IACvF,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAClC;AA4LD,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,MAAM,CAOR;AAiCD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,qBAAqB,EAC5B,SAAS,GAAE,OAAO,CAAC,4BAA4B,CAAM,GACpD,OAAO,CAAC,sBAAsB,CAAC,CAoCjC;AAsCD,wBAAgB,6BAA6B,CAC3C,SAAS,GAAE,OAAO,CAAC,mCAAmC,CAAM,GAC3D,OAAO,CA8CT"}