@open-agent-toolkit/cli 0.2.51 → 0.2.53

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 (218) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/cli-utilities/bootstrap.md +6 -2
  3. package/assets/docs/cli-utilities/tool-packs.md +87 -33
  4. package/assets/docs/provider-sync/commands.md +30 -2
  5. package/assets/docs/provider-sync/config.md +19 -0
  6. package/assets/docs/provider-sync/manifest-and-drift.md +37 -0
  7. package/assets/docs/provider-sync/providers.md +69 -2
  8. package/assets/docs/provider-sync/scope-and-surface.md +44 -0
  9. package/assets/docs/reference/cli-reference.md +1 -0
  10. package/assets/docs/reference/oat-directory-structure.md +11 -4
  11. package/assets/docs/workflows/projects/evidence-layers.md +110 -1
  12. package/assets/docs/workflows/projects/implementation-execution.md +13 -0
  13. package/assets/docs/workflows/projects/orchestration-model.md +18 -0
  14. package/assets/public-package-versions.json +4 -4
  15. package/assets/skills/oat-dispatch-subagents/SKILL.md +57 -1
  16. package/assets/skills/oat-dispatch-subagents/references/record-schema.md +77 -1
  17. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
  18. package/assets/skills/oat-project-dispatch-subagents/SKILL.md +24 -1
  19. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
  20. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +11 -0
  21. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
  22. package/assets/skills/oat-project-plan-writing/SKILL.md +12 -1
  23. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
  24. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
  25. package/assets/skills/oat-project-review-provide/SKILL.md +12 -1
  26. package/assets/skills/oat-project-review-provide-remote/SKILL.md +12 -1
  27. package/dist/agents/canonical/index.d.ts +2 -0
  28. package/dist/agents/canonical/index.d.ts.map +1 -1
  29. package/dist/agents/canonical/index.js +1 -0
  30. package/dist/agents/canonical/resolve.d.ts +45 -0
  31. package/dist/agents/canonical/resolve.d.ts.map +1 -0
  32. package/dist/agents/canonical/resolve.js +175 -0
  33. package/dist/commands/decision/agents-guidance.d.ts +2 -2
  34. package/dist/commands/decision/agents-guidance.d.ts.map +1 -1
  35. package/dist/commands/decision/agents-guidance.js +1 -4
  36. package/dist/commands/decision/index.d.ts.map +1 -1
  37. package/dist/commands/decision/index.js +25 -6
  38. package/dist/commands/docs/init/index.d.ts +7 -1
  39. package/dist/commands/docs/init/index.d.ts.map +1 -1
  40. package/dist/commands/docs/init/index.js +53 -20
  41. package/dist/commands/doctor/index.d.ts +8 -2
  42. package/dist/commands/doctor/index.d.ts.map +1 -1
  43. package/dist/commands/doctor/index.js +157 -46
  44. package/dist/commands/init/index.d.ts +8 -3
  45. package/dist/commands/init/index.d.ts.map +1 -1
  46. package/dist/commands/init/index.js +66 -28
  47. package/dist/commands/init/tools/index.d.ts +12 -12
  48. package/dist/commands/init/tools/index.d.ts.map +1 -1
  49. package/dist/commands/init/tools/index.js +430 -99
  50. package/dist/commands/init/tools/install-state.d.ts +2 -0
  51. package/dist/commands/init/tools/install-state.d.ts.map +1 -1
  52. package/dist/commands/init/tools/install-state.js +11 -0
  53. package/dist/commands/init/tools/project-guidance.d.ts +49 -0
  54. package/dist/commands/init/tools/project-guidance.d.ts.map +1 -0
  55. package/dist/commands/init/tools/project-guidance.js +144 -0
  56. package/dist/commands/init/tools/workflows/index.d.ts +7 -0
  57. package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
  58. package/dist/commands/init/tools/workflows/index.js +160 -7
  59. package/dist/commands/pjm/index.d.ts.map +1 -1
  60. package/dist/commands/pjm/index.js +28 -3
  61. package/dist/commands/pjm/init.d.ts +5 -0
  62. package/dist/commands/pjm/init.d.ts.map +1 -1
  63. package/dist/commands/pjm/init.js +19 -3
  64. package/dist/commands/project/dispatch/index.d.ts +10 -0
  65. package/dist/commands/project/dispatch/index.d.ts.map +1 -0
  66. package/dist/commands/project/dispatch/index.js +137 -0
  67. package/dist/commands/project/dispatch/record.d.ts +91 -0
  68. package/dist/commands/project/dispatch/record.d.ts.map +1 -0
  69. package/dist/commands/project/dispatch/record.js +402 -0
  70. package/dist/commands/project/index.d.ts.map +1 -1
  71. package/dist/commands/project/index.js +2 -0
  72. package/dist/commands/providers/inspect/inspect.d.ts +8 -1
  73. package/dist/commands/providers/inspect/inspect.d.ts.map +1 -1
  74. package/dist/commands/providers/inspect/inspect.js +146 -26
  75. package/dist/commands/providers/list/list.d.ts +8 -1
  76. package/dist/commands/providers/list/list.d.ts.map +1 -1
  77. package/dist/commands/providers/list/list.js +139 -23
  78. package/dist/commands/providers/providers.types.d.ts +25 -1
  79. package/dist/commands/providers/providers.types.d.ts.map +1 -1
  80. package/dist/commands/providers/set/index.d.ts +9 -1
  81. package/dist/commands/providers/set/index.d.ts.map +1 -1
  82. package/dist/commands/providers/set/index.js +43 -33
  83. package/dist/commands/remove/skill/remove-skill.d.ts.map +1 -1
  84. package/dist/commands/remove/skill/remove-skill.js +11 -0
  85. package/dist/commands/shared/agents-md.d.ts +42 -14
  86. package/dist/commands/shared/agents-md.d.ts.map +1 -1
  87. package/dist/commands/shared/agents-md.js +364 -70
  88. package/dist/commands/status/index.d.ts +8 -3
  89. package/dist/commands/status/index.d.ts.map +1 -1
  90. package/dist/commands/status/index.js +149 -37
  91. package/dist/commands/sync/apply.d.ts.map +1 -1
  92. package/dist/commands/sync/apply.js +220 -29
  93. package/dist/commands/sync/dry-run.d.ts.map +1 -1
  94. package/dist/commands/sync/dry-run.js +30 -6
  95. package/dist/commands/sync/index.d.ts +17 -2
  96. package/dist/commands/sync/index.d.ts.map +1 -1
  97. package/dist/commands/sync/index.js +108 -43
  98. package/dist/commands/sync/sync.types.d.ts +39 -2
  99. package/dist/commands/sync/sync.types.d.ts.map +1 -1
  100. package/dist/commands/sync/sync.utils.d.ts +5 -1
  101. package/dist/commands/sync/sync.utils.d.ts.map +1 -1
  102. package/dist/commands/sync/sync.utils.js +73 -0
  103. package/dist/commands/tools/info/info-tool.d.ts +2 -0
  104. package/dist/commands/tools/info/info-tool.d.ts.map +1 -1
  105. package/dist/commands/tools/info/info-tool.js +34 -12
  106. package/dist/commands/tools/install/index.d.ts.map +1 -1
  107. package/dist/commands/tools/install/index.js +19 -3
  108. package/dist/commands/tools/list/list-tools.d.ts +2 -0
  109. package/dist/commands/tools/list/list-tools.d.ts.map +1 -1
  110. package/dist/commands/tools/list/list-tools.js +36 -7
  111. package/dist/commands/tools/remove/index.d.ts.map +1 -1
  112. package/dist/commands/tools/remove/index.js +150 -21
  113. package/dist/commands/tools/remove/remove-tools.d.ts +20 -0
  114. package/dist/commands/tools/remove/remove-tools.d.ts.map +1 -1
  115. package/dist/commands/tools/remove/remove-tools.js +122 -1
  116. package/dist/commands/tools/shared/format-pack-inventory.d.ts +19 -0
  117. package/dist/commands/tools/shared/format-pack-inventory.d.ts.map +1 -1
  118. package/dist/commands/tools/shared/format-pack-inventory.js +109 -0
  119. package/dist/commands/tools/shared/pack-evidence.d.ts +66 -0
  120. package/dist/commands/tools/shared/pack-evidence.d.ts.map +1 -0
  121. package/dist/commands/tools/shared/pack-evidence.js +132 -0
  122. package/dist/commands/tools/shared/pack-inventory.d.ts +1 -0
  123. package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -1
  124. package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts +44 -0
  125. package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts.map +1 -0
  126. package/dist/commands/tools/shared/pack-lifecycle-outcome.js +91 -0
  127. package/dist/commands/tools/update/index.d.ts.map +1 -1
  128. package/dist/commands/tools/update/index.js +74 -4
  129. package/dist/commands/tools/update/update-tools.d.ts +5 -0
  130. package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
  131. package/dist/commands/tools/update/update-tools.js +64 -2
  132. package/dist/config/oat-config.d.ts +5 -0
  133. package/dist/config/oat-config.d.ts.map +1 -1
  134. package/dist/config/oat-config.js +17 -5
  135. package/dist/config/user-sync-config.d.ts +1 -0
  136. package/dist/config/user-sync-config.d.ts.map +1 -1
  137. package/dist/config/user-sync-config.js +8 -0
  138. package/dist/drift/detector.d.ts +2 -2
  139. package/dist/drift/detector.d.ts.map +1 -1
  140. package/dist/drift/detector.js +18 -0
  141. package/dist/drift/strays.d.ts.map +1 -1
  142. package/dist/drift/strays.js +5 -0
  143. package/dist/engine/collection-sync.d.ts +14 -0
  144. package/dist/engine/collection-sync.d.ts.map +1 -0
  145. package/dist/engine/collection-sync.js +282 -0
  146. package/dist/engine/compute-plan.d.ts +8 -1
  147. package/dist/engine/compute-plan.d.ts.map +1 -1
  148. package/dist/engine/compute-plan.js +303 -12
  149. package/dist/engine/engine.types.d.ts +61 -0
  150. package/dist/engine/engine.types.d.ts.map +1 -1
  151. package/dist/engine/execute-plan.d.ts +22 -2
  152. package/dist/engine/execute-plan.d.ts.map +1 -1
  153. package/dist/engine/execute-plan.js +459 -27
  154. package/dist/engine/index.d.ts +1 -1
  155. package/dist/engine/index.d.ts.map +1 -1
  156. package/dist/engine/index.js +1 -1
  157. package/dist/engine/provider-path-safety.d.ts +1 -0
  158. package/dist/engine/provider-path-safety.d.ts.map +1 -1
  159. package/dist/engine/provider-path-safety.js +15 -0
  160. package/dist/engine/scanner.d.ts +9 -2
  161. package/dist/engine/scanner.d.ts.map +1 -1
  162. package/dist/engine/scanner.js +58 -4
  163. package/dist/fs/io.d.ts +67 -0
  164. package/dist/fs/io.d.ts.map +1 -1
  165. package/dist/fs/io.js +536 -3
  166. package/dist/manifest/index.d.ts +2 -2
  167. package/dist/manifest/index.d.ts.map +1 -1
  168. package/dist/manifest/index.js +1 -1
  169. package/dist/manifest/manager.d.ts +2 -2
  170. package/dist/manifest/manager.d.ts.map +1 -1
  171. package/dist/manifest/manager.js +20 -3
  172. package/dist/manifest/manifest.types.d.ts +704 -13
  173. package/dist/manifest/manifest.types.d.ts.map +1 -1
  174. package/dist/manifest/manifest.types.js +131 -15
  175. package/dist/providers/codex/codec/sync-extension.d.ts +1 -1
  176. package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
  177. package/dist/providers/codex/codec/sync-extension.js +48 -17
  178. package/dist/providers/cursor/codec/sync-extension.d.ts +1 -1
  179. package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
  180. package/dist/providers/cursor/codec/sync-extension.js +52 -23
  181. package/dist/providers/identity/absolute-paths.d.ts +68 -0
  182. package/dist/providers/identity/absolute-paths.d.ts.map +1 -0
  183. package/dist/providers/identity/absolute-paths.js +144 -0
  184. package/dist/providers/identity/claude-runtime-observation.d.ts +105 -0
  185. package/dist/providers/identity/claude-runtime-observation.d.ts.map +1 -0
  186. package/dist/providers/identity/claude-runtime-observation.fixtures.d.ts +40 -0
  187. package/dist/providers/identity/claude-runtime-observation.fixtures.d.ts.map +1 -0
  188. package/dist/providers/identity/claude-runtime-observation.fixtures.js +146 -0
  189. package/dist/providers/identity/claude-runtime-observation.js +229 -0
  190. package/dist/providers/identity/codex-runtime-observation.d.ts +75 -0
  191. package/dist/providers/identity/codex-runtime-observation.d.ts.map +1 -0
  192. package/dist/providers/identity/codex-runtime-observation.fixtures.d.ts +37 -0
  193. package/dist/providers/identity/codex-runtime-observation.fixtures.d.ts.map +1 -0
  194. package/dist/providers/identity/codex-runtime-observation.fixtures.js +539 -0
  195. package/dist/providers/identity/codex-runtime-observation.js +255 -0
  196. package/dist/providers/identity/generic-dispatch-record.d.ts +313 -0
  197. package/dist/providers/identity/generic-dispatch-record.d.ts.map +1 -0
  198. package/dist/providers/identity/generic-dispatch-record.js +539 -0
  199. package/dist/providers/identity/oat-dispatch-record.d.ts +1964 -0
  200. package/dist/providers/identity/oat-dispatch-record.d.ts.map +1 -0
  201. package/dist/providers/identity/oat-dispatch-record.js +691 -0
  202. package/dist/providers/identity/runtime-observation.d.ts +100 -0
  203. package/dist/providers/identity/runtime-observation.d.ts.map +1 -0
  204. package/dist/providers/identity/runtime-observation.js +169 -0
  205. package/dist/providers/shared/index.d.ts +2 -0
  206. package/dist/providers/shared/index.d.ts.map +1 -1
  207. package/dist/providers/shared/index.js +1 -0
  208. package/dist/providers/shared/materialization-extension.d.ts +12 -0
  209. package/dist/providers/shared/materialization-extension.d.ts.map +1 -1
  210. package/dist/providers/shared/registry.d.ts +69 -0
  211. package/dist/providers/shared/registry.d.ts.map +1 -0
  212. package/dist/providers/shared/registry.js +252 -0
  213. package/dist/providers/shared/restart-adviser.d.ts +26 -0
  214. package/dist/providers/shared/restart-adviser.d.ts.map +1 -0
  215. package/dist/providers/shared/restart-adviser.js +96 -0
  216. package/dist/shared/types.d.ts +4 -0
  217. package/dist/shared/types.d.ts.map +1 -1
  218. package/package.json +2 -2
@@ -1,14 +1,12 @@
1
- import { readFile, writeFile } from 'node:fs/promises';
2
- import { join } from 'node:path';
3
- import { fileExists } from '../../fs/io.js';
4
- /**
5
- * Manages HTML-comment-delimited sections in AGENTS.md.
6
- *
7
- * Section markers follow the pattern:
8
- * <!-- OAT <key> -->
9
- * ... content ...
10
- * <!-- END OAT <key> -->
11
- */
1
+ import { lstat, readFile, readlink, realpath, writeFile, } from 'node:fs/promises';
2
+ import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
3
+ const defaultFileSystem = {
4
+ lstat,
5
+ readFile,
6
+ readlink,
7
+ realpath,
8
+ writeFile,
9
+ };
12
10
  function sectionStart(key) {
13
11
  return `<!-- OAT ${key} -->`;
14
12
  }
@@ -18,64 +16,360 @@ function sectionEnd(key) {
18
16
  function buildSection(key, body) {
19
17
  return `${sectionStart(key)}\n${body}\n${sectionEnd(key)}`;
20
18
  }
21
- /**
22
- * Insert or replace a managed section in AGENTS.md.
23
- *
24
- * - If AGENTS.md doesn't exist, creates it with the section.
25
- * - If the section markers exist, replaces the content between them.
26
- * - If AGENTS.md exists but the section markers don't, appends.
27
- */
28
- export async function upsertAgentsMdSection(repoRoot, key, body) {
29
- const agentsMdPath = join(repoRoot, 'AGENTS.md');
30
- const section = buildSection(key, body);
31
- const exists = await fileExists(agentsMdPath);
32
- if (!exists) {
33
- await writeFile(agentsMdPath, `${section}\n`, 'utf8');
34
- return { action: 'created' };
35
- }
36
- const content = await readFile(agentsMdPath, 'utf8');
37
- const start = sectionStart(key);
38
- const end = sectionEnd(key);
39
- const startIdx = content.indexOf(start);
40
- const endIdx = content.indexOf(end);
41
- if (startIdx !== -1 && endIdx !== -1) {
42
- const existingSection = content.slice(startIdx, endIdx + end.length);
43
- if (existingSection === section) {
44
- return { action: 'no-change' };
19
+ function identityOf(stat) {
20
+ return { device: String(stat.dev), inode: String(stat.ino) };
21
+ }
22
+ function hasIdentity(stat, expected) {
23
+ return (expected !== undefined &&
24
+ String(stat.dev) === expected.device &&
25
+ String(stat.ino) === expected.inode);
26
+ }
27
+ function errorCode(error) {
28
+ return typeof error === 'object' && error !== null && 'code' in error
29
+ ? String(error.code)
30
+ : undefined;
31
+ }
32
+ function isMissing(error) {
33
+ return errorCode(error) === 'ENOENT';
34
+ }
35
+ function isContained(root, candidate) {
36
+ const relativePath = relative(root, candidate);
37
+ return (relativePath === '' ||
38
+ (!isAbsolute(relativePath) &&
39
+ relativePath !== '..' &&
40
+ !relativePath.startsWith(`..${sep}`)));
41
+ }
42
+ function portableRelative(root, path) {
43
+ return relative(root, path).split(sep).join('/');
44
+ }
45
+ function targetIdentifier(plan) {
46
+ return portableRelative(plan.repoRoot, plan.targetPath) || 'AGENTS.md';
47
+ }
48
+ function markerIndices(content, marker) {
49
+ const indices = [];
50
+ let offset = 0;
51
+ while (offset <= content.length) {
52
+ const index = content.indexOf(marker, offset);
53
+ if (index === -1)
54
+ break;
55
+ indices.push(index);
56
+ offset = index + marker.length;
57
+ }
58
+ return indices;
59
+ }
60
+ function findManagedSection(content, key) {
61
+ const startMarker = sectionStart(key);
62
+ const endMarker = sectionEnd(key);
63
+ const starts = markerIndices(content, startMarker);
64
+ const ends = markerIndices(content, endMarker);
65
+ if (starts.length === 0 && ends.length === 0)
66
+ return undefined;
67
+ if (starts.length !== 1 ||
68
+ ends.length !== 1 ||
69
+ starts[0] === undefined ||
70
+ ends[0] === undefined ||
71
+ starts[0] + startMarker.length > ends[0]) {
72
+ throw new Error(`AGENTS.md section "${key}" must contain exactly one ordered marker pair before OAT can plan guidance.`);
73
+ }
74
+ return {
75
+ key,
76
+ start: starts[0],
77
+ end: ends[0] + endMarker.length,
78
+ };
79
+ }
80
+ function assertManagedSectionsAreDisjoint(sections) {
81
+ const ordered = [...sections].sort((left, right) => left.start - right.start);
82
+ for (let index = 1; index < ordered.length; index += 1) {
83
+ const previous = ordered[index - 1];
84
+ const current = ordered[index];
85
+ if (previous !== undefined &&
86
+ current !== undefined &&
87
+ previous.end > current.start) {
88
+ throw new Error('AGENTS.md managed sections must be mutually disjoint and non-crossing before OAT can plan guidance.');
89
+ }
90
+ }
91
+ }
92
+ async function planAgentsMd(repoRoot, fileSystem) {
93
+ const resolvedRoot = await fileSystem.realpath(repoRoot);
94
+ const rootStat = await fileSystem.lstat(resolvedRoot);
95
+ if (!rootStat.isDirectory() || rootStat.isSymbolicLink()) {
96
+ throw new Error('Repository root must resolve to a real directory.');
97
+ }
98
+ const agentsMdPath = join(resolvedRoot, 'AGENTS.md');
99
+ let agentsStat;
100
+ try {
101
+ agentsStat = await fileSystem.lstat(agentsMdPath);
102
+ }
103
+ catch (error) {
104
+ if (!isMissing(error))
105
+ throw error;
106
+ return {
107
+ repoRoot: resolvedRoot,
108
+ repoIdentity: identityOf(rootStat),
109
+ agentsMdPath,
110
+ targetPath: agentsMdPath,
111
+ kind: 'missing',
112
+ };
113
+ }
114
+ if (agentsStat.isFile() && !agentsStat.isSymbolicLink()) {
115
+ return {
116
+ repoRoot: resolvedRoot,
117
+ repoIdentity: identityOf(rootStat),
118
+ agentsMdPath,
119
+ targetPath: agentsMdPath,
120
+ kind: 'file',
121
+ agentsIdentity: identityOf(agentsStat),
122
+ targetIdentity: identityOf(agentsStat),
123
+ };
124
+ }
125
+ if (!agentsStat.isSymbolicLink()) {
126
+ throw new Error('Repository-root AGENTS.md must be a regular file or a contained symlink to one.');
127
+ }
128
+ const linkText = await fileSystem.readlink(agentsMdPath);
129
+ const lexicalTarget = resolve(dirname(agentsMdPath), linkText);
130
+ let targetPath;
131
+ let directTargetStat;
132
+ let targetStat;
133
+ try {
134
+ directTargetStat = await fileSystem.lstat(lexicalTarget);
135
+ targetPath = await fileSystem.realpath(lexicalTarget);
136
+ targetStat = await fileSystem.lstat(targetPath);
137
+ }
138
+ catch (error) {
139
+ if (isMissing(error) || errorCode(error) === 'ELOOP') {
140
+ throw new Error('Repository-root AGENTS.md symlink target is broken or cyclic.', { cause: error });
141
+ }
142
+ throw error;
143
+ }
144
+ if (!isContained(resolvedRoot, targetPath)) {
145
+ throw new Error('Repository-root AGENTS.md symlink target must stay inside the repository root.');
146
+ }
147
+ if (!directTargetStat.isFile() ||
148
+ directTargetStat.isSymbolicLink() ||
149
+ !targetStat.isFile() ||
150
+ targetStat.isSymbolicLink()) {
151
+ throw new Error('Repository-root AGENTS.md symlink target must be a regular file.');
152
+ }
153
+ return {
154
+ repoRoot: resolvedRoot,
155
+ repoIdentity: identityOf(rootStat),
156
+ agentsMdPath,
157
+ targetPath,
158
+ kind: 'symlink',
159
+ agentsIdentity: identityOf(agentsStat),
160
+ targetIdentity: identityOf(targetStat),
161
+ linkText,
162
+ };
163
+ }
164
+ async function assertPlanUnchanged(plan, fileSystem, expectedContent) {
165
+ const currentRoot = await fileSystem.realpath(plan.repoRoot);
166
+ const rootStat = await fileSystem.lstat(currentRoot);
167
+ if (currentRoot !== plan.repoRoot ||
168
+ !rootStat.isDirectory() ||
169
+ rootStat.isSymbolicLink() ||
170
+ !hasIdentity(rootStat, plan.repoIdentity)) {
171
+ throw new Error('Repository or AGENTS.md identity changed during planning.');
172
+ }
173
+ if (plan.kind === 'missing') {
174
+ try {
175
+ await fileSystem.lstat(plan.agentsMdPath);
176
+ }
177
+ catch (error) {
178
+ if (isMissing(error))
179
+ return;
180
+ throw error;
181
+ }
182
+ throw new Error('Repository or AGENTS.md identity changed during planning.');
183
+ }
184
+ const agentsStat = await fileSystem.lstat(plan.agentsMdPath);
185
+ if (!hasIdentity(agentsStat, plan.agentsIdentity)) {
186
+ throw new Error('Repository or AGENTS.md identity changed during planning.');
187
+ }
188
+ if (plan.kind === 'file') {
189
+ if (!agentsStat.isFile() || agentsStat.isSymbolicLink()) {
190
+ throw new Error('Repository or AGENTS.md identity changed during planning.');
45
191
  }
46
- const before = content.slice(0, startIdx);
47
- const after = content.slice(endIdx + end.length);
48
- await writeFile(agentsMdPath, `${before}${section}${after}`, 'utf8');
49
- return { action: 'updated' };
50
- }
51
- // Append to end
52
- const separator = content.endsWith('\n') ? '\n' : '\n\n';
53
- await writeFile(agentsMdPath, `${content}${separator}${section}\n`, 'utf8');
54
- return { action: 'updated' };
55
- }
56
- /**
57
- * Remove a managed section from AGENTS.md if it exists.
58
- *
59
- * Returns true if the section was found and removed, false otherwise.
60
- */
61
- export async function removeAgentsMdSection(repoRoot, key) {
62
- const agentsMdPath = join(repoRoot, 'AGENTS.md');
63
- const exists = await fileExists(agentsMdPath);
64
- if (!exists) {
65
- return false;
66
- }
67
- const content = await readFile(agentsMdPath, 'utf8');
68
- const start = sectionStart(key);
69
- const end = sectionEnd(key);
70
- const startIdx = content.indexOf(start);
71
- const endIdx = content.indexOf(end);
72
- if (startIdx === -1 || endIdx === -1) {
73
- return false;
74
- }
75
- const before = content.slice(0, startIdx);
76
- const after = content.slice(endIdx + end.length);
77
- // Collapse extra blank lines left by removal
78
- const cleaned = (before + after).replace(/\n{3,}/g, '\n\n');
79
- await writeFile(agentsMdPath, cleaned, 'utf8');
80
- return true;
192
+ }
193
+ else {
194
+ const currentLinkText = await fileSystem.readlink(plan.agentsMdPath);
195
+ const currentTarget = await fileSystem.realpath(resolve(dirname(plan.agentsMdPath), currentLinkText));
196
+ const targetStat = await fileSystem.lstat(currentTarget);
197
+ if (!agentsStat.isSymbolicLink() ||
198
+ currentLinkText !== plan.linkText ||
199
+ currentTarget !== plan.targetPath ||
200
+ !targetStat.isFile() ||
201
+ targetStat.isSymbolicLink() ||
202
+ !hasIdentity(targetStat, plan.targetIdentity)) {
203
+ throw new Error('Repository or AGENTS.md identity changed during planning.');
204
+ }
205
+ }
206
+ if (expectedContent !== undefined &&
207
+ (await fileSystem.readFile(plan.targetPath, 'utf8')) !== expectedContent) {
208
+ throw new Error('AGENTS.md content changed during planning.');
209
+ }
210
+ }
211
+ function safeReason(error) {
212
+ if (!(error instanceof Error)) {
213
+ return 'AGENTS.md guidance could not be planned safely.';
214
+ }
215
+ if (/^(Repository root|Repository-root AGENTS\.md|Repository or AGENTS\.md|AGENTS\.md section|AGENTS\.md managed sections|AGENTS\.md content)/.test(error.message)) {
216
+ return error.message;
217
+ }
218
+ return 'AGENTS.md guidance could not be planned safely.';
219
+ }
220
+ function blockedResult(error, target = 'AGENTS.md') {
221
+ return {
222
+ action: 'blocked',
223
+ blocked: {
224
+ code: 'blocked',
225
+ target,
226
+ reason: safeReason(error),
227
+ action: 'Resolve the reported AGENTS.md path or marker issue, then rerun.',
228
+ },
229
+ };
230
+ }
231
+ export function formatAgentsMdMutationFailure(error) {
232
+ const reason = safeReason(error);
233
+ return `AGENTS.md guidance blocked for AGENTS.md. ${reason} Resolve the reported path or marker issue, then rerun.`;
234
+ }
235
+ export function formatAgentsMdGuidanceResult(result) {
236
+ if (result.action === 'manual-required' && result.manualPatch) {
237
+ return [
238
+ 'Guidance status: manual-required',
239
+ `Target: ${result.manualPatch.target}`,
240
+ ...result.manualPatch.instructions,
241
+ 'Managed block:',
242
+ result.manualPatch.managedBlock,
243
+ `Legacy block action: ${result.manualPatch.legacyBlockAction}`,
244
+ ];
245
+ }
246
+ if (result.action === 'blocked' && result.blocked) {
247
+ return [
248
+ 'Guidance status: blocked',
249
+ `Target: ${result.blocked.target}`,
250
+ result.blocked.reason,
251
+ result.blocked.action,
252
+ ];
253
+ }
254
+ return [];
255
+ }
256
+ function createManualPatch(plan, managedBlocks, legacyKeys) {
257
+ const target = targetIdentifier(plan);
258
+ return {
259
+ target,
260
+ managedBlock: managedBlocks.join('\n\n'),
261
+ legacyBlockAction: legacyKeys.length > 0 ? 'remove-manually' : 'preserve',
262
+ instructions: [
263
+ `Open ${target}.`,
264
+ 'Replace each matching OAT managed block, or append each absent block, exactly as shown.',
265
+ ...(legacyKeys.length > 0
266
+ ? [
267
+ `Remove the legacy ${legacyKeys.map((key) => `OAT ${key}`).join(', ')} managed block${legacyKeys.length === 1 ? '' : 's'} manually after applying the replacement block.`,
268
+ ]
269
+ : []),
270
+ 'Review and save the file, then rerun the command to confirm no-change.',
271
+ ],
272
+ };
273
+ }
274
+ async function createMissingFile(plan, content, fileSystem) {
275
+ try {
276
+ await assertPlanUnchanged(plan, fileSystem);
277
+ await fileSystem.writeFile(plan.agentsMdPath, content, {
278
+ encoding: 'utf8',
279
+ flag: 'wx',
280
+ mode: 0o666,
281
+ });
282
+ return 'created';
283
+ }
284
+ catch (error) {
285
+ if (errorCode(error) === 'EEXIST')
286
+ return 'appeared';
287
+ return 'blocked';
288
+ }
289
+ }
290
+ async function upsertSectionsInternal(repoRoot, sections, removeSectionKeys, fileSystem, allowReplan) {
291
+ let plan;
292
+ try {
293
+ plan = await planAgentsMd(repoRoot, fileSystem);
294
+ }
295
+ catch (error) {
296
+ const blocked = blockedResult(error);
297
+ return Object.fromEntries(sections.map(({ key }) => [key, blocked]));
298
+ }
299
+ const desired = sections.map(({ key, body }) => ({
300
+ key,
301
+ block: buildSection(key, body),
302
+ }));
303
+ if (plan.kind === 'missing') {
304
+ const content = `${desired.map(({ block }) => block).join('\n\n')}\n`;
305
+ const creation = await createMissingFile(plan, content, fileSystem);
306
+ if (creation === 'created') {
307
+ return Object.fromEntries(desired.map(({ key }) => [key, { action: 'created' }]));
308
+ }
309
+ if (creation === 'appeared' && allowReplan) {
310
+ return upsertSectionsInternal(repoRoot, sections, removeSectionKeys, fileSystem, false);
311
+ }
312
+ const blocked = blockedResult(new Error('Repository or AGENTS.md identity changed during planning.'), targetIdentifier(plan));
313
+ return Object.fromEntries(desired.map(({ key }) => [key, blocked]));
314
+ }
315
+ try {
316
+ const content = await fileSystem.readFile(plan.targetPath, 'utf8');
317
+ const managed = desired.map(({ key, block }) => ({
318
+ key,
319
+ block,
320
+ range: findManagedSection(content, key),
321
+ }));
322
+ const legacy = [...new Set(removeSectionKeys)]
323
+ .filter((key) => !desired.some((section) => section.key === key))
324
+ .map((key) => ({ key, range: findManagedSection(content, key) }))
325
+ .filter((entry) => entry.range !== undefined);
326
+ assertManagedSectionsAreDisjoint([
327
+ ...managed.flatMap(({ range }) => (range ? [range] : [])),
328
+ ...legacy.map(({ range }) => range),
329
+ ]);
330
+ await assertPlanUnchanged(plan, fileSystem, content);
331
+ const changed = managed.filter(({ block, range }) => !range || content.slice(range.start, range.end) !== block);
332
+ if (changed.length === 0 && legacy.length === 0) {
333
+ return Object.fromEntries(desired.map(({ key }) => [key, { action: 'no-change' }]));
334
+ }
335
+ const manualPatch = createManualPatch(plan, changed.length > 0
336
+ ? changed.map(({ block }) => block)
337
+ : desired.map(({ block }) => block), legacy.map(({ key }) => key));
338
+ return Object.fromEntries(managed.map(({ key, block, range }) => [
339
+ key,
340
+ range &&
341
+ content.slice(range.start, range.end) === block &&
342
+ legacy.length === 0
343
+ ? { action: 'no-change' }
344
+ : { action: 'manual-required', manualPatch },
345
+ ]));
346
+ }
347
+ catch (error) {
348
+ const blocked = blockedResult(error, targetIdentifier(plan));
349
+ return Object.fromEntries(desired.map(({ key }) => [key, blocked]));
350
+ }
351
+ }
352
+ export async function upsertAgentsMdSections(repoRoot, sections, options = {}) {
353
+ if (sections.length === 0)
354
+ return {};
355
+ return upsertSectionsInternal(repoRoot, sections, [], options.fileSystem ?? defaultFileSystem, true);
356
+ }
357
+ export async function upsertAgentsMdSection(repoRoot, key, body, options = {}) {
358
+ const result = await upsertSectionsInternal(repoRoot, [{ key, body }], options.removeSectionKeys ?? [], options.fileSystem ?? defaultFileSystem, true);
359
+ return result[key] ?? blockedResult(new Error('AGENTS.md guidance failed.'));
360
+ }
361
+ export async function removeAgentsMdSection(repoRoot, key, options = {}) {
362
+ const fileSystem = options.fileSystem ?? defaultFileSystem;
363
+ try {
364
+ const plan = await planAgentsMd(repoRoot, fileSystem);
365
+ if (plan.kind === 'missing')
366
+ return false;
367
+ const content = await fileSystem.readFile(plan.targetPath, 'utf8');
368
+ const managed = findManagedSection(content, key);
369
+ await assertPlanUnchanged(plan, fileSystem, content);
370
+ return managed ? 'manual-required' : false;
371
+ }
372
+ catch {
373
+ return 'blocked';
374
+ }
81
375
  }
@@ -10,9 +10,9 @@ import { type CanonicalEntry } from '../../engine/index.js';
10
10
  import type { Manifest } from '../../manifest/index.js';
11
11
  import { type CodexExtensionPlan } from '../../providers/codex/codec/sync-extension.js';
12
12
  import { type CursorExtensionPlan } from '../../providers/cursor/codec/sync-extension.js';
13
- import { type PathMapping, type ProviderAdapter } from '../../providers/shared/index.js';
13
+ import { type PathMapping, type ProviderAdapter, type ProviderScopeContext } from '../../providers/shared/index.js';
14
14
  import type { AdoptionSource } from '../../providers/shared/adapter.types.js';
15
- import { type ConcreteScope, type Scope } from '../../shared/types.js';
15
+ import { type CanonicalScanTarget, type ConcreteScope, type Scope } from '../../shared/types.js';
16
16
  import { Command } from 'commander';
17
17
  interface StatusDependencies {
18
18
  buildCommandContext: (options: GlobalOptions) => CommandContext;
@@ -21,12 +21,17 @@ interface StatusDependencies {
21
21
  loadSyncConfig: (configPath: string) => Promise<SyncConfig>;
22
22
  resolveUserSyncConfig: (userConfigDir: string) => Promise<SyncConfig>;
23
23
  saveManifest: (manifestPath: string, manifest: Manifest) => Promise<void>;
24
- scanCanonical: (scopeRoot: string, scope: ConcreteScope) => Promise<CanonicalEntry[]>;
24
+ scanCanonical: (scopeRoot: string, scope: ConcreteScope, targets?: readonly CanonicalScanTarget[]) => Promise<CanonicalEntry[]>;
25
25
  scanBundledManagedAgents: () => Promise<CanonicalEntry[]>;
26
26
  getAdapters: () => ProviderAdapter[];
27
27
  getConfigAwareAdapters: (adapters: ProviderAdapter[], scopeRoot: string, config: SyncConfig) => Promise<{
28
28
  activeAdapters: ProviderAdapter[];
29
29
  }>;
30
+ resolveProviderScopeContext?: (input: {
31
+ scope: ConcreteScope;
32
+ scopeRoot: string;
33
+ config: SyncConfig;
34
+ }) => Promise<ProviderScopeContext>;
30
35
  getSyncMappings: (adapter: ProviderAdapter, scope: Scope) => PathMapping[];
31
36
  getAdoptionSources: (adapter: ProviderAdapter, scope: Scope) => AdoptionSource[];
32
37
  detectDrift: (entry: Manifest['entries'][number], scopeRoot: string, copyTransform?: CopyTransform) => Promise<DriftReport>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC/B,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,YAAY,EAGlB,MAAM,iCAAiC,CAAC;AAWzC,OAAO,EAIL,KAAK,kBAAkB,EAEvB,KAAK,aAAa,EAEnB,MAAM,uCAAuC,CAAC;AAU/C,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,WAAW,EAIjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,cAAc,EAMpB,MAAM,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAKL,KAAK,WAAW,EAEhB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAUtE,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAElB,KAAK,KAAK,EACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgIpC,UAAU,kBAAkB;IAC1B,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,gBAAgB,EAAE,CAChB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,qBAAqB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACtE,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,aAAa,EAAE,CACb,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,SAAS,mBAAmB,EAAE,KACrC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/B,wBAAwB,EAAE,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1D,WAAW,EAAE,MAAM,eAAe,EAAE,CAAC;IACrC,sBAAsB,EAAE,CACtB,QAAQ,EAAE,eAAe,EAAE,EAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,UAAU,KACf,OAAO,CAAC;QAAE,cAAc,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC,CAAC;IACpD,2BAA2B,CAAC,EAAE,CAAC,KAAK,EAAE;QACpC,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,UAAU,CAAC;KACpB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACpC,eAAe,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;IAC3E,kBAAkB,EAAE,CAClB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,KAAK,KACT,cAAc,EAAE,CAAC;IACtB,WAAW,EAAE,CACX,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAClC,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,aAAa,KAC1B,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,YAAY,EAAE,CACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,cAAc,EAAE,EAClC,OAAO,CAAC,EAAE,IAAI,CACZ,WAAW,EACX,aAAa,GAAG,YAAY,GAAG,mBAAmB,CACnD,KACE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5B,qBAAqB,EAAE,CACrB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,EAClC,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAC3B,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/B,gCAAgC,EAAE,CAChC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,EAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAChC,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;KAAE,KAC1D,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,8BAA8B,EAAE,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,kBAAkB,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,iCAAiC,EAAE,CACjC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,EAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAChC,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;KAAE,KAC1D,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClC,+BAA+B,EAAE,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,KACtB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,mBAAmB,EAAE,CAAC,CAAC,SAAS,MAAM,EACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAC/B,GAAG,EAAE,aAAa,KACf,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACzB,eAAe,EAAE,CAAC,CAAC,SAAS,MAAM,EAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAC1B,GAAG,EAAE,aAAa,KACf,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,UAAU,EAAE,CACV,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KACrC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvB,2BAA2B,EAAE,CAC3B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,sBAAsB,EACnC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KACrC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvB,iBAAiB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC;IACtD,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IACrE,kBAAkB,EAAE,CAClB,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,WAAW,CAAC,CAAC;CAC3B;AAED,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,YAAY,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAkoCD,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAC1C,OAAO,CA2BT"}