@open-agent-toolkit/cli 0.2.62 → 0.2.64

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 (145) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/cli-utilities/config-and-local-state.md +1 -0
  3. package/assets/docs/cli-utilities/configuration.md +10 -8
  4. package/assets/docs/cli-utilities/project-log.md +16 -0
  5. package/assets/docs/cli-utilities/tool-packs.md +83 -0
  6. package/assets/docs/cli-utilities/workflow-gates.md +124 -16
  7. package/assets/docs/contributing/skills.md +42 -7
  8. package/assets/docs/provider-sync/commands.md +3 -0
  9. package/assets/docs/provider-sync/instruction-sync.md +107 -0
  10. package/assets/docs/provider-sync/manifest-and-drift.md +105 -0
  11. package/assets/docs/reference/cli-reference.md +16 -6
  12. package/assets/docs/reference/oat-directory-structure.md +32 -31
  13. package/assets/docs/workflows/projects/lifecycle.md +45 -0
  14. package/assets/docs/workflows/projects/picking-up-projects.md +14 -0
  15. package/assets/docs/workflows/skills/explainer-kit.md +10 -4
  16. package/assets/docs/workflows/skills/repo-improve.md +15 -1
  17. package/assets/public-package-versions.json +4 -4
  18. package/assets/skills/create-agnostic-skill/SKILL.md +9 -7
  19. package/assets/skills/create-agnostic-skill/references/skill-template.md +9 -7
  20. package/assets/skills/oat-explainer-kit/SKILL.md +14 -1
  21. package/assets/skills/oat-explainer-kit/references/config-contract.md +12 -0
  22. package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +57 -10
  23. package/assets/skills/oat-explainer-kit/scripts/check-terminal-outcome.mjs +28 -5
  24. package/assets/skills/oat-explainer-kit/scripts/probe-recap-seams.mjs +371 -0
  25. package/assets/skills/oat-explainer-kit/scripts/resolve-intent.mjs +123 -1
  26. package/assets/skills/oat-project-autonomous/SKILL.md +10 -1
  27. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +122 -121
  28. package/assets/skills/oat-project-complete/SKILL.md +134 -4
  29. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +122 -121
  30. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  31. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +38 -6
  32. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +122 -121
  33. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +122 -121
  34. package/assets/skills/oat-project-next/SKILL.md +62 -19
  35. package/assets/skills/oat-project-plan/SKILL.md +31 -5
  36. package/assets/skills/oat-project-pr-final/SKILL.md +281 -6
  37. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +122 -121
  38. package/assets/skills/oat-project-progress/SKILL.md +12 -3
  39. package/assets/skills/oat-project-quick-start/SKILL.md +264 -4
  40. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +122 -121
  41. package/assets/skills/oat-project-summary/SKILL.md +34 -23
  42. package/assets/skills/oat-repo-improve/SKILL.md +40 -5
  43. package/assets/skills/oat-repo-improve/references/plan-template.md +84 -7
  44. package/dist/agents/canonical/resolve.d.ts.map +1 -1
  45. package/dist/agents/canonical/resolve.js +25 -4
  46. package/dist/commands/config/index.d.ts +1 -0
  47. package/dist/commands/config/index.d.ts.map +1 -1
  48. package/dist/commands/config/index.js +401 -18
  49. package/dist/commands/doctor/index.d.ts +7 -0
  50. package/dist/commands/doctor/index.d.ts.map +1 -1
  51. package/dist/commands/doctor/index.js +10 -2
  52. package/dist/commands/gate/index.d.ts +3 -1
  53. package/dist/commands/gate/index.d.ts.map +1 -1
  54. package/dist/commands/gate/index.js +699 -211
  55. package/dist/commands/init/tools/index.d.ts.map +1 -1
  56. package/dist/commands/init/tools/index.js +68 -36
  57. package/dist/commands/init/tools/shared/skill-script-references.d.ts +126 -0
  58. package/dist/commands/init/tools/shared/skill-script-references.d.ts.map +1 -0
  59. package/dist/commands/init/tools/shared/skill-script-references.js +311 -0
  60. package/dist/commands/instructions/instructions.types.d.ts +63 -0
  61. package/dist/commands/instructions/instructions.types.d.ts.map +1 -1
  62. package/dist/commands/instructions/instructions.utils.d.ts +51 -2
  63. package/dist/commands/instructions/instructions.utils.d.ts.map +1 -1
  64. package/dist/commands/instructions/instructions.utils.js +201 -4
  65. package/dist/commands/instructions/sync/sync.d.ts.map +1 -1
  66. package/dist/commands/instructions/sync/sync.js +12 -1
  67. package/dist/commands/instructions/validate/validate.d.ts.map +1 -1
  68. package/dist/commands/instructions/validate/validate.js +12 -1
  69. package/dist/commands/project/log/append.d.ts +195 -0
  70. package/dist/commands/project/log/append.d.ts.map +1 -1
  71. package/dist/commands/project/log/append.js +1034 -11
  72. package/dist/commands/shared/frontmatter.d.ts +51 -0
  73. package/dist/commands/shared/frontmatter.d.ts.map +1 -1
  74. package/dist/commands/shared/frontmatter.js +118 -6
  75. package/dist/commands/status/index.d.ts.map +1 -1
  76. package/dist/commands/status/index.js +5 -3
  77. package/dist/commands/sync/index.d.ts +14 -0
  78. package/dist/commands/sync/index.d.ts.map +1 -1
  79. package/dist/commands/sync/index.js +21 -0
  80. package/dist/commands/tools/info/index.d.ts.map +1 -1
  81. package/dist/commands/tools/info/index.js +14 -1
  82. package/dist/commands/tools/info/info-tool.d.ts +12 -0
  83. package/dist/commands/tools/info/info-tool.d.ts.map +1 -1
  84. package/dist/commands/tools/info/info-tool.js +54 -6
  85. package/dist/commands/tools/info/skill-views.d.ts +86 -0
  86. package/dist/commands/tools/info/skill-views.d.ts.map +1 -0
  87. package/dist/commands/tools/info/skill-views.js +383 -0
  88. package/dist/commands/tools/install/index.d.ts.map +1 -1
  89. package/dist/commands/tools/install/index.js +3 -25
  90. package/dist/commands/tools/list/list-tools.d.ts +2 -0
  91. package/dist/commands/tools/list/list-tools.d.ts.map +1 -1
  92. package/dist/commands/tools/list/list-tools.js +23 -4
  93. package/dist/commands/tools/remove/index.d.ts.map +1 -1
  94. package/dist/commands/tools/remove/index.js +35 -42
  95. package/dist/commands/tools/remove/remove-tools.d.ts +3 -2
  96. package/dist/commands/tools/remove/remove-tools.d.ts.map +1 -1
  97. package/dist/commands/tools/remove/remove-tools.js +14 -4
  98. package/dist/commands/tools/shared/auto-sync.d.ts +12 -1
  99. package/dist/commands/tools/shared/auto-sync.d.ts.map +1 -1
  100. package/dist/commands/tools/shared/auto-sync.js +20 -4
  101. package/dist/commands/tools/shared/format-pack-inventory.d.ts +12 -1
  102. package/dist/commands/tools/shared/format-pack-inventory.d.ts.map +1 -1
  103. package/dist/commands/tools/shared/format-pack-inventory.js +48 -6
  104. package/dist/commands/tools/shared/in-process-sync.d.ts +11 -0
  105. package/dist/commands/tools/shared/in-process-sync.d.ts.map +1 -0
  106. package/dist/commands/tools/shared/in-process-sync.js +79 -0
  107. package/dist/commands/tools/shared/pack-evidence.d.ts +78 -2
  108. package/dist/commands/tools/shared/pack-evidence.d.ts.map +1 -1
  109. package/dist/commands/tools/shared/pack-evidence.js +96 -2
  110. package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts +11 -0
  111. package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts.map +1 -1
  112. package/dist/commands/tools/shared/pack-lifecycle-outcome.js +24 -3
  113. package/dist/commands/tools/shared/pack-provider-evidence.d.ts +73 -0
  114. package/dist/commands/tools/shared/pack-provider-evidence.d.ts.map +1 -0
  115. package/dist/commands/tools/shared/pack-provider-evidence.js +161 -0
  116. package/dist/commands/tools/shared/provider-context.d.ts +88 -0
  117. package/dist/commands/tools/shared/provider-context.d.ts.map +1 -0
  118. package/dist/commands/tools/shared/provider-context.js +77 -0
  119. package/dist/commands/tools/shared/provider-reachability.d.ts +93 -0
  120. package/dist/commands/tools/shared/provider-reachability.d.ts.map +1 -0
  121. package/dist/commands/tools/shared/provider-reachability.js +358 -0
  122. package/dist/commands/tools/shared/sync-evidence.d.ts +57 -0
  123. package/dist/commands/tools/shared/sync-evidence.d.ts.map +1 -0
  124. package/dist/commands/tools/shared/sync-evidence.js +147 -0
  125. package/dist/commands/tools/update/index.d.ts +0 -4
  126. package/dist/commands/tools/update/index.d.ts.map +1 -1
  127. package/dist/commands/tools/update/index.js +22 -40
  128. package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
  129. package/dist/commands/tools/update/update-tools.js +23 -8
  130. package/dist/config/json.d.ts +36 -0
  131. package/dist/config/json.d.ts.map +1 -1
  132. package/dist/config/json.js +135 -3
  133. package/dist/config/oat-config.d.ts +41 -0
  134. package/dist/config/oat-config.d.ts.map +1 -1
  135. package/dist/config/oat-config.js +111 -0
  136. package/dist/drift/index.d.ts +2 -0
  137. package/dist/drift/index.d.ts.map +1 -1
  138. package/dist/drift/index.js +1 -0
  139. package/dist/drift/skill-view-diagnostic.d.ts +197 -0
  140. package/dist/drift/skill-view-diagnostic.d.ts.map +1 -0
  141. package/dist/drift/skill-view-diagnostic.js +343 -0
  142. package/dist/validation/skills.d.ts +1 -0
  143. package/dist/validation/skills.d.ts.map +1 -1
  144. package/dist/validation/skills.js +181 -19
  145. package/package.json +2 -2
@@ -1,8 +1,15 @@
1
+ import { RECAP_PROBE_CODES, RECAP_SEAM_IDS } from './probe-recap-seams.mjs';
2
+
1
3
  const PRODUCTS = new Set(['projectExplainer', 'projectRecap']);
2
4
  const MODES = new Set(['interactive', 'autonomous']);
3
5
  const PREFERENCES = new Set(['always', 'ask', 'never']);
4
6
  const DECISIONS = new Set(['generate', 'skip']);
5
- const SOURCES = new Set(['interactive', 'kickoff_prompt', 'autonomous_policy']);
7
+ const SOURCES = new Set([
8
+ 'interactive',
9
+ 'kickoff_prompt',
10
+ 'autonomous_policy',
11
+ 'capability_probe',
12
+ ]);
6
13
  const ALLOWED_PAIRS = Object.freeze({
7
14
  projectExplainer: new Set([
8
15
  'generate:interactive',
@@ -13,6 +20,7 @@ const ALLOWED_PAIRS = Object.freeze({
13
20
  'generate:interactive',
14
21
  'skip:interactive',
15
22
  'generate:autonomous_policy',
23
+ 'skip:capability_probe',
16
24
  ]),
17
25
  });
18
26
  const ISO_TIMESTAMP_PATTERN =
@@ -25,6 +33,7 @@ export function resolveIntent({
25
33
  preference,
26
34
  kickoffRequest = false,
27
35
  answer,
36
+ seamProbe,
28
37
  now = new Date().toISOString(),
29
38
  }) {
30
39
  assertProduct(product);
@@ -39,6 +48,19 @@ export function resolveIntent({
39
48
  if (typeof kickoffRequest !== 'boolean') {
40
49
  throw new TypeError('kickoffRequest must be a boolean.');
41
50
  }
51
+ if (seamProbe !== undefined) {
52
+ assertSeamProbe(seamProbe);
53
+ if (product !== 'projectRecap') {
54
+ throw new Error(
55
+ 'Seam probe results apply only to projectRecap resolution.',
56
+ );
57
+ }
58
+ if (mode !== 'autonomous') {
59
+ throw new Error(
60
+ 'Seam probe results apply only to autonomous projectRecap resolution.',
61
+ );
62
+ }
63
+ }
42
64
 
43
65
  if (mode === 'autonomous') {
44
66
  if (answer !== undefined) {
@@ -49,6 +71,7 @@ export function resolveIntent({
49
71
  state,
50
72
  preference,
51
73
  kickoffRequest,
74
+ seamProbe,
52
75
  now,
53
76
  });
54
77
  }
@@ -149,10 +172,30 @@ function resolveAutonomous({
149
172
  state,
150
173
  preference,
151
174
  kickoffRequest,
175
+ seamProbe,
152
176
  now,
153
177
  }) {
154
178
  if (product === 'projectRecap') {
155
179
  const warnings = [];
180
+ if (seamProbe !== undefined && seamProbe.ok !== true) {
181
+ if (seamProbe.code !== 'seams-unavailable') {
182
+ const error = new Error(
183
+ `Project recap seams are configured but invalid, so the recap fails closed rather than resolving a capability skip: ${seamProbe.message ?? seamProbe.code}`,
184
+ );
185
+ error.code = 'E_RECAP_SEAMS_INVALID';
186
+ throw error;
187
+ }
188
+ warnings.push(
189
+ `Autonomous project recap skipped: no provider is configured for ${formatSeams(seamProbe.missing)}.`,
190
+ );
191
+ return result(
192
+ product,
193
+ 'skip',
194
+ 'capability_probe',
195
+ createRecord(product, 'skip', 'capability_probe', now),
196
+ warnings,
197
+ );
198
+ }
156
199
  if (state?.decision === 'skip') {
157
200
  warnings.push(
158
201
  'Autonomous project recap policy overrode a lower-precedence skip decision.',
@@ -206,6 +249,85 @@ function result(
206
249
  };
207
250
  }
208
251
 
252
+ /**
253
+ * A seam probe result is a decision input, so a malformed one must fail rather
254
+ * than silently degrade into either a skip or a forced generate.
255
+ */
256
+ function assertSeamProbe(seamProbe) {
257
+ if (
258
+ !seamProbe ||
259
+ typeof seamProbe !== 'object' ||
260
+ Array.isArray(seamProbe) ||
261
+ typeof seamProbe.ok !== 'boolean' ||
262
+ !RECAP_PROBE_CODES.includes(seamProbe.code)
263
+ ) {
264
+ throw new TypeError(
265
+ 'seamProbe must be a probeRecapSeams result with ok and a known code.',
266
+ );
267
+ }
268
+ // A recap that runs from this decision runs unattended, so an interactive
269
+ // probe is the wrong evidence: it checks only the author and critic and would
270
+ // report a host with no set planner as fully available.
271
+ if (seamProbe.mode !== 'unattended') {
272
+ throw new TypeError(
273
+ 'seamProbe must come from an unattended probe of the recap seams.',
274
+ );
275
+ }
276
+ if (
277
+ !Array.isArray(seamProbe.missing) ||
278
+ !Array.isArray(seamProbe.invalid) ||
279
+ !Array.isArray(seamProbe.resolved)
280
+ ) {
281
+ throw new TypeError(
282
+ 'seamProbe must partition the canonical recap seams into missing, invalid, and resolved.',
283
+ );
284
+ }
285
+ // Enforce the partition this message promises: every canonical seam appears
286
+ // in exactly one bucket. Without the disjointness and coverage checks, a
287
+ // forged result can claim a seam is both missing and resolved (yielding a
288
+ // capability skip the probe would never emit), or pad `resolved` with
289
+ // duplicates of one seam to fake full availability and force a generate.
290
+ const claimed = [
291
+ ...seamProbe.missing,
292
+ ...seamProbe.invalid.map((entry) => entry?.seam),
293
+ ...seamProbe.resolved,
294
+ ];
295
+ const distinct = new Set(claimed);
296
+ if (
297
+ distinct.size !== claimed.length ||
298
+ distinct.size !== RECAP_SEAM_IDS.length ||
299
+ !RECAP_SEAM_IDS.every((seam) => distinct.has(seam))
300
+ ) {
301
+ throw new TypeError(
302
+ 'seamProbe must partition the canonical recap seams into missing, invalid, and resolved.',
303
+ );
304
+ }
305
+ // The result is a discriminated union, so each code must carry exactly the
306
+ // evidence it claims. A half-populated object must never reach the skip
307
+ // branch and forge a capability skip out of an invalid seam.
308
+ const consistent =
309
+ seamProbe.code === 'seams-ok'
310
+ ? seamProbe.ok === true &&
311
+ seamProbe.missing.length === 0 &&
312
+ seamProbe.invalid.length === 0 &&
313
+ seamProbe.resolved.length === RECAP_SEAM_IDS.length
314
+ : seamProbe.ok === false &&
315
+ (seamProbe.code === 'seams-unavailable'
316
+ ? seamProbe.missing.length > 0 && seamProbe.invalid.length === 0
317
+ : seamProbe.invalid.length > 0);
318
+ if (!consistent) {
319
+ throw new TypeError(
320
+ 'An unsatisfied seamProbe must list the seams its code claims.',
321
+ );
322
+ }
323
+ }
324
+
325
+ function formatSeams(seams) {
326
+ if (!Array.isArray(seams) || seams.length === 0) return 'a required seam';
327
+ if (seams.length === 1) return seams[0];
328
+ return `${seams.slice(0, -1).join(', ')} and ${seams.at(-1)}`;
329
+ }
330
+
209
331
  function assertProduct(product) {
210
332
  if (!PRODUCTS.has(product)) {
211
333
  throw new Error(`Unsupported lifecycle product: ${String(product)}`);
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-autonomous
3
- version: 1.0.12
3
+ version: 1.0.13
4
4
  description: Use when a user explicitly asks to run an OAT project autonomously end-to-end. Activates session-only autonomy, resumes the correct lifecycle phase, and drives the existing OAT skills through final PR or a reported boundary.
5
5
  argument-hint: '<goal | project-slug | ticket-ref>'
6
6
  disable-model-invocation: true
@@ -267,6 +267,15 @@ Reassert this forced recap intent on resume; a stale lower-precedence skip is ov
267
267
  The autonomous mode policy has precedence over project state and workflow
268
268
  preference, so `never` does not suppress the recap.
269
269
 
270
+ Kickoff persists the forced `generate` intent without probing seams, because the
271
+ host that runs the recap is the one that matters and closeout is where it runs.
272
+ The closeout recap gate probes seam availability and may resolve a recordable
273
+ `skip` with source `capability_probe` on a host where a required seam is
274
+ unavailable. That later capability skip is the only thing that overrides this
275
+ forced intent, it is decided before any run rather than from a failed one, and
276
+ it never blocks unattended completion. Do not reassert `generate` over a
277
+ recorded `capability_probe` skip within the same closeout.
278
+
270
279
  Resolve and persist `projectExplainer` as `generate` with source `kickoff_prompt` only when the kickoff request explicitly asks for a project explainer.
271
280
  A general autonomous goal, project creation, or normal planning does not count as an explainer request.
272
281
  When no explicit kickoff explainer request exists, do not persist a project-explainer intent record.