@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.
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/config-and-local-state.md +1 -0
- package/assets/docs/cli-utilities/configuration.md +10 -8
- package/assets/docs/cli-utilities/project-log.md +16 -0
- package/assets/docs/cli-utilities/tool-packs.md +83 -0
- package/assets/docs/cli-utilities/workflow-gates.md +124 -16
- package/assets/docs/contributing/skills.md +42 -7
- package/assets/docs/provider-sync/commands.md +3 -0
- package/assets/docs/provider-sync/instruction-sync.md +107 -0
- package/assets/docs/provider-sync/manifest-and-drift.md +105 -0
- package/assets/docs/reference/cli-reference.md +16 -6
- package/assets/docs/reference/oat-directory-structure.md +32 -31
- package/assets/docs/workflows/projects/lifecycle.md +45 -0
- package/assets/docs/workflows/projects/picking-up-projects.md +14 -0
- package/assets/docs/workflows/skills/explainer-kit.md +10 -4
- package/assets/docs/workflows/skills/repo-improve.md +15 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/create-agnostic-skill/SKILL.md +9 -7
- package/assets/skills/create-agnostic-skill/references/skill-template.md +9 -7
- package/assets/skills/oat-explainer-kit/SKILL.md +14 -1
- package/assets/skills/oat-explainer-kit/references/config-contract.md +12 -0
- package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +57 -10
- package/assets/skills/oat-explainer-kit/scripts/check-terminal-outcome.mjs +28 -5
- package/assets/skills/oat-explainer-kit/scripts/probe-recap-seams.mjs +371 -0
- package/assets/skills/oat-explainer-kit/scripts/resolve-intent.mjs +123 -1
- package/assets/skills/oat-project-autonomous/SKILL.md +10 -1
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +122 -121
- package/assets/skills/oat-project-complete/SKILL.md +134 -4
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +122 -121
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +38 -6
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +122 -121
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +122 -121
- package/assets/skills/oat-project-next/SKILL.md +62 -19
- package/assets/skills/oat-project-plan/SKILL.md +31 -5
- package/assets/skills/oat-project-pr-final/SKILL.md +281 -6
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +122 -121
- package/assets/skills/oat-project-progress/SKILL.md +12 -3
- package/assets/skills/oat-project-quick-start/SKILL.md +264 -4
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +122 -121
- package/assets/skills/oat-project-summary/SKILL.md +34 -23
- package/assets/skills/oat-repo-improve/SKILL.md +40 -5
- package/assets/skills/oat-repo-improve/references/plan-template.md +84 -7
- package/dist/agents/canonical/resolve.d.ts.map +1 -1
- package/dist/agents/canonical/resolve.js +25 -4
- package/dist/commands/config/index.d.ts +1 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +401 -18
- package/dist/commands/doctor/index.d.ts +7 -0
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +10 -2
- package/dist/commands/gate/index.d.ts +3 -1
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +699 -211
- package/dist/commands/init/tools/index.d.ts.map +1 -1
- package/dist/commands/init/tools/index.js +68 -36
- package/dist/commands/init/tools/shared/skill-script-references.d.ts +126 -0
- package/dist/commands/init/tools/shared/skill-script-references.d.ts.map +1 -0
- package/dist/commands/init/tools/shared/skill-script-references.js +311 -0
- package/dist/commands/instructions/instructions.types.d.ts +63 -0
- package/dist/commands/instructions/instructions.types.d.ts.map +1 -1
- package/dist/commands/instructions/instructions.utils.d.ts +51 -2
- package/dist/commands/instructions/instructions.utils.d.ts.map +1 -1
- package/dist/commands/instructions/instructions.utils.js +201 -4
- package/dist/commands/instructions/sync/sync.d.ts.map +1 -1
- package/dist/commands/instructions/sync/sync.js +12 -1
- package/dist/commands/instructions/validate/validate.d.ts.map +1 -1
- package/dist/commands/instructions/validate/validate.js +12 -1
- package/dist/commands/project/log/append.d.ts +195 -0
- package/dist/commands/project/log/append.d.ts.map +1 -1
- package/dist/commands/project/log/append.js +1034 -11
- package/dist/commands/shared/frontmatter.d.ts +51 -0
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +118 -6
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +5 -3
- package/dist/commands/sync/index.d.ts +14 -0
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +21 -0
- package/dist/commands/tools/info/index.d.ts.map +1 -1
- package/dist/commands/tools/info/index.js +14 -1
- package/dist/commands/tools/info/info-tool.d.ts +12 -0
- package/dist/commands/tools/info/info-tool.d.ts.map +1 -1
- package/dist/commands/tools/info/info-tool.js +54 -6
- package/dist/commands/tools/info/skill-views.d.ts +86 -0
- package/dist/commands/tools/info/skill-views.d.ts.map +1 -0
- package/dist/commands/tools/info/skill-views.js +383 -0
- package/dist/commands/tools/install/index.d.ts.map +1 -1
- package/dist/commands/tools/install/index.js +3 -25
- package/dist/commands/tools/list/list-tools.d.ts +2 -0
- package/dist/commands/tools/list/list-tools.d.ts.map +1 -1
- package/dist/commands/tools/list/list-tools.js +23 -4
- package/dist/commands/tools/remove/index.d.ts.map +1 -1
- package/dist/commands/tools/remove/index.js +35 -42
- package/dist/commands/tools/remove/remove-tools.d.ts +3 -2
- package/dist/commands/tools/remove/remove-tools.d.ts.map +1 -1
- package/dist/commands/tools/remove/remove-tools.js +14 -4
- package/dist/commands/tools/shared/auto-sync.d.ts +12 -1
- package/dist/commands/tools/shared/auto-sync.d.ts.map +1 -1
- package/dist/commands/tools/shared/auto-sync.js +20 -4
- package/dist/commands/tools/shared/format-pack-inventory.d.ts +12 -1
- package/dist/commands/tools/shared/format-pack-inventory.d.ts.map +1 -1
- package/dist/commands/tools/shared/format-pack-inventory.js +48 -6
- package/dist/commands/tools/shared/in-process-sync.d.ts +11 -0
- package/dist/commands/tools/shared/in-process-sync.d.ts.map +1 -0
- package/dist/commands/tools/shared/in-process-sync.js +79 -0
- package/dist/commands/tools/shared/pack-evidence.d.ts +78 -2
- package/dist/commands/tools/shared/pack-evidence.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-evidence.js +96 -2
- package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts +11 -0
- package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-lifecycle-outcome.js +24 -3
- package/dist/commands/tools/shared/pack-provider-evidence.d.ts +73 -0
- package/dist/commands/tools/shared/pack-provider-evidence.d.ts.map +1 -0
- package/dist/commands/tools/shared/pack-provider-evidence.js +161 -0
- package/dist/commands/tools/shared/provider-context.d.ts +88 -0
- package/dist/commands/tools/shared/provider-context.d.ts.map +1 -0
- package/dist/commands/tools/shared/provider-context.js +77 -0
- package/dist/commands/tools/shared/provider-reachability.d.ts +93 -0
- package/dist/commands/tools/shared/provider-reachability.d.ts.map +1 -0
- package/dist/commands/tools/shared/provider-reachability.js +358 -0
- package/dist/commands/tools/shared/sync-evidence.d.ts +57 -0
- package/dist/commands/tools/shared/sync-evidence.d.ts.map +1 -0
- package/dist/commands/tools/shared/sync-evidence.js +147 -0
- package/dist/commands/tools/update/index.d.ts +0 -4
- package/dist/commands/tools/update/index.d.ts.map +1 -1
- package/dist/commands/tools/update/index.js +22 -40
- package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
- package/dist/commands/tools/update/update-tools.js +23 -8
- package/dist/config/json.d.ts +36 -0
- package/dist/config/json.d.ts.map +1 -1
- package/dist/config/json.js +135 -3
- package/dist/config/oat-config.d.ts +41 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +111 -0
- package/dist/drift/index.d.ts +2 -0
- package/dist/drift/index.d.ts.map +1 -1
- package/dist/drift/index.js +1 -0
- package/dist/drift/skill-view-diagnostic.d.ts +197 -0
- package/dist/drift/skill-view-diagnostic.d.ts.map +1 -0
- package/dist/drift/skill-view-diagnostic.js +343 -0
- package/dist/validation/skills.d.ts +1 -0
- package/dist/validation/skills.d.ts.map +1 -1
- package/dist/validation/skills.js +181 -19
- 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([
|
|
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.
|
|
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.
|