@open-agent-toolkit/cli 0.2.5 → 0.2.6
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/docs/cli-utilities/configuration.md +40 -0
- package/assets/docs/cli-utilities/tool-packs.md +31 -0
- package/assets/docs/workflows/projects/artifacts.md +27 -0
- package/assets/docs/workflows/skills/explainer-kit.md +125 -0
- package/assets/docs/workflows/skills/index.md +4 -0
- package/assets/migration/pjm-restructure.md +12 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/explainer-kit/SKILL.md +95 -0
- package/assets/skills/explainer-kit/examples/project-explainer/content.md +31 -0
- package/assets/skills/explainer-kit/examples/project-explainer/fact-base.md +22 -0
- package/assets/skills/explainer-kit/examples/project-recap/content.md +34 -0
- package/assets/skills/explainer-kit/examples/project-recap/fact-base.md +22 -0
- package/assets/skills/explainer-kit/examples/theme-bundle.json +87 -0
- package/assets/skills/explainer-kit/palettes/ember.json +37 -0
- package/assets/skills/explainer-kit/palettes/forest.json +37 -0
- package/assets/skills/explainer-kit/palettes/neutral.json +37 -0
- package/assets/skills/explainer-kit/palettes/ocean.json +37 -0
- package/assets/skills/explainer-kit/palettes/violet.json +37 -0
- package/assets/skills/explainer-kit/profiles/clean.json +42 -0
- package/assets/skills/explainer-kit/profiles/editorial.json +42 -0
- package/assets/skills/explainer-kit/profiles/technical.json +39 -0
- package/assets/skills/explainer-kit/recipes/engineer-tour.json +33 -0
- package/assets/skills/explainer-kit/recipes/program-recap.json +34 -0
- package/assets/skills/explainer-kit/recipes/project-explainer.json +33 -0
- package/assets/skills/explainer-kit/recipes/project-recap.json +34 -0
- package/assets/skills/explainer-kit/references/contracts.md +101 -0
- package/assets/skills/explainer-kit/references/destination-contract.md +94 -0
- package/assets/skills/explainer-kit/references/extension-contract.md +71 -0
- package/assets/skills/explainer-kit/references/fact-base-contract.md +119 -0
- package/assets/skills/explainer-kit/schemas/build-record.schema.json +92 -0
- package/assets/skills/explainer-kit/schemas/durability-evidence.schema.json +53 -0
- package/assets/skills/explainer-kit/schemas/fact-base.schema.json +129 -0
- package/assets/skills/explainer-kit/schemas/manifest.schema.json +193 -0
- package/assets/skills/explainer-kit/schemas/publish-receipt.schema.json +97 -0
- package/assets/skills/explainer-kit/schemas/publish-request.schema.json +32 -0
- package/assets/skills/explainer-kit/schemas/run-request.schema.json +132 -0
- package/assets/skills/explainer-kit/schemas/theme.schema.json +217 -0
- package/assets/skills/explainer-kit/scripts/lib/content-approval.mjs +180 -0
- package/assets/skills/explainer-kit/scripts/lib/contracts.mjs +680 -0
- package/assets/skills/explainer-kit/scripts/lib/durability.mjs +538 -0
- package/assets/skills/explainer-kit/scripts/lib/fact-base.mjs +494 -0
- package/assets/skills/explainer-kit/scripts/lib/fs-safe.mjs +218 -0
- package/assets/skills/explainer-kit/scripts/lib/qa.mjs +512 -0
- package/assets/skills/explainer-kit/scripts/lib/recipes.mjs +289 -0
- package/assets/skills/explainer-kit/scripts/lib/records.mjs +231 -0
- package/assets/skills/explainer-kit/scripts/lib/render.mjs +485 -0
- package/assets/skills/explainer-kit/scripts/lib/s3-static.mjs +587 -0
- package/assets/skills/explainer-kit/scripts/lib/safe-paths.mjs +96 -0
- package/assets/skills/explainer-kit/scripts/lib/theme.mjs +332 -0
- package/assets/skills/explainer-kit/scripts/publish.mjs +76 -0
- package/assets/skills/explainer-kit/scripts/record-durability.mjs +64 -0
- package/assets/skills/explainer-kit/scripts/render-qa.mjs +273 -0
- package/assets/skills/explainer-kit/scripts/run.mjs +778 -0
- package/assets/skills/explainer-kit/scripts/validate.mjs +59 -0
- package/assets/skills/explainer-kit/templates/deck-shell.html +233 -0
- package/assets/skills/explainer-kit/templates/diagram-shell.html +219 -0
- package/assets/skills/explainer-kit/templates/engineer-tour.html +273 -0
- package/assets/skills/explainer-kit/templates/house-style.html +218 -0
- package/assets/skills/oat-explainer-kit/SKILL.md +92 -0
- package/assets/skills/oat-explainer-kit/references/config-contract.md +67 -0
- package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +143 -0
- package/assets/skills/oat-explainer-kit/references/migration.md +143 -0
- package/assets/skills/oat-explainer-kit/scripts/bind-project-sources.mjs +103 -0
- package/assets/skills/oat-explainer-kit/scripts/check-core.mjs +127 -0
- package/assets/skills/oat-explainer-kit/scripts/finalize-tracked-run.mjs +392 -0
- package/assets/skills/oat-explainer-kit/scripts/persist-intent.mjs +130 -0
- package/assets/skills/oat-explainer-kit/scripts/resolve-config.mjs +293 -0
- package/assets/skills/oat-explainer-kit/scripts/resolve-intent.mjs +209 -0
- package/assets/skills/oat-explainer-kit/scripts/resolve-paths.mjs +166 -0
- package/assets/skills/oat-explainer-kit/scripts/run.mjs +284 -0
- package/assets/skills/oat-project-autonomous/SKILL.md +22 -1
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +5 -1
- package/assets/skills/oat-project-complete/SKILL.md +166 -28
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +5 -1
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +17 -0
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +5 -1
- package/assets/skills/oat-project-plan/SKILL.md +30 -1
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +5 -1
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +5 -1
- package/assets/skills/oat-project-summary/SKILL.md +20 -1
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +232 -1
- package/dist/commands/init/tools/shared/skill-manifest.d.ts +2 -2
- package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
- package/dist/commands/init/tools/shared/skill-manifest.js +2 -0
- package/dist/commands/project/archive/archive-utils.d.ts +12 -0
- package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
- package/dist/commands/project/archive/archive-utils.js +320 -8
- package/dist/commands/project/archive/index.d.ts.map +1 -1
- package/dist/commands/project/archive/index.js +1 -0
- package/dist/commands/project/archive/push-runner.d.ts +1 -0
- package/dist/commands/project/archive/push-runner.d.ts.map +1 -1
- package/dist/commands/project/archive/push-runner.js +9 -2
- package/dist/config/oat-config.d.ts +26 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +88 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +18 -0
- package/dist/validation/project-state.d.ts +3 -0
- package/dist/validation/project-state.d.ts.map +1 -1
- package/dist/validation/project-state.js +91 -0
- package/package.json +2 -2
package/dist/config/resolve.js
CHANGED
|
@@ -17,6 +17,20 @@ const DEFAULT_SHARED_CONFIG = {
|
|
|
17
17
|
awsProfile: null,
|
|
18
18
|
awsRegion: null,
|
|
19
19
|
},
|
|
20
|
+
explainers: {
|
|
21
|
+
defaults: {
|
|
22
|
+
palette: 'neutral',
|
|
23
|
+
visualProfile: 'clean',
|
|
24
|
+
themeBundlePath: null,
|
|
25
|
+
},
|
|
26
|
+
publish: {
|
|
27
|
+
provider: null,
|
|
28
|
+
s3Uri: null,
|
|
29
|
+
publicBaseUrl: null,
|
|
30
|
+
awsRegion: null,
|
|
31
|
+
awsProfile: null,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
20
34
|
documentation: {
|
|
21
35
|
root: null,
|
|
22
36
|
tooling: null,
|
|
@@ -72,6 +86,10 @@ const DEFAULT_WORKFLOW_CONFIG = {
|
|
|
72
86
|
mode: null,
|
|
73
87
|
policy: null,
|
|
74
88
|
},
|
|
89
|
+
explainers: {
|
|
90
|
+
projectExplainer: 'ask',
|
|
91
|
+
projectRecap: 'ask',
|
|
92
|
+
},
|
|
75
93
|
},
|
|
76
94
|
};
|
|
77
95
|
const ENV_OVERRIDE_MAP = {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { readdir as defaultReaddir, readFile as defaultReadFile } from 'node:fs/promises';
|
|
2
2
|
import { type ProjectStateKind, type ProjectStatePhase } from '../commands/shared/frontmatter.js';
|
|
3
|
+
import type { ExplainerDecisionV1 } from '@open-agent-toolkit/control-plane';
|
|
3
4
|
export interface NormalizedProjectState {
|
|
4
5
|
oat_kind: ProjectStateKind;
|
|
5
6
|
oat_phase?: ProjectStatePhase;
|
|
@@ -8,6 +9,8 @@ export interface NormalizedProjectState {
|
|
|
8
9
|
oat_siblings: string[];
|
|
9
10
|
oat_depends_on: string[];
|
|
10
11
|
oat_children: string[];
|
|
12
|
+
oat_project_explainer?: ExplainerDecisionV1 | null;
|
|
13
|
+
oat_project_recap?: ExplainerDecisionV1 | null;
|
|
11
14
|
}
|
|
12
15
|
export interface ProjectStateValidationError {
|
|
13
16
|
code: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-state.d.ts","sourceRoot":"","sources":["../../src/validation/project-state.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,QAAQ,IAAI,eAAe,EAC5B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"project-state.d.ts","sourceRoot":"","sources":["../../src/validation/project-state.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,QAAQ,IAAI,eAAe,EAC5B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAyB7E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,qBAAqB,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnD,iBAAiB,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,sBAAsB,CAAC;IAC9B,MAAM,EAAE,2BAA2B,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,0CAA2C,SAAQ,IAAI,CACtE,gCAAgC,EAChC,iBAAiB,CAClB;IACC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,eAAe,CAAC;CACnC;AA6SD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,2BAA2B,GACjC,4BAA4B,CA+E9B;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gCAAqC,GAC7C,IAAI,CAYN;AAED,wBAAsB,gCAAgC,CAAC,OAAO,EAAE;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,eAAe,CAAC;CACnC,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAwBlC;AAED,wBAAsB,wCAAwC,CAC5D,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,0CAA0C,GAClD,OAAO,CAAC,IAAI,CAAC,CAkDf"}
|
|
@@ -2,6 +2,26 @@ import { readdir as defaultReaddir, readFile as defaultReadFile, } from 'node:fs
|
|
|
2
2
|
import { basename, join } from 'node:path';
|
|
3
3
|
import { getFrontmatterBlock, isProjectStateKind, isProjectStatePhase, } from '../commands/shared/frontmatter.js';
|
|
4
4
|
import YAML from 'yaml';
|
|
5
|
+
const EXPLAINER_DECISIONS = ['generate', 'skip'];
|
|
6
|
+
const EXPLAINER_SOURCES = [
|
|
7
|
+
'interactive',
|
|
8
|
+
'kickoff_prompt',
|
|
9
|
+
'autonomous_policy',
|
|
10
|
+
];
|
|
11
|
+
const EXPLAINER_DECISION_KEYS = ['decision', 'source', 'decided_at'];
|
|
12
|
+
const EXPLAINER_ALLOWED_PAIRS = {
|
|
13
|
+
oat_project_explainer: new Set([
|
|
14
|
+
'generate:interactive',
|
|
15
|
+
'skip:interactive',
|
|
16
|
+
'generate:kickoff_prompt',
|
|
17
|
+
]),
|
|
18
|
+
oat_project_recap: new Set([
|
|
19
|
+
'generate:interactive',
|
|
20
|
+
'skip:interactive',
|
|
21
|
+
'generate:autonomous_policy',
|
|
22
|
+
]),
|
|
23
|
+
};
|
|
24
|
+
const ISO_TIMESTAMP_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/;
|
|
5
25
|
function readStringField(frontmatter, key) {
|
|
6
26
|
const value = frontmatter[key];
|
|
7
27
|
return typeof value === 'string' ? value : undefined;
|
|
@@ -20,6 +40,75 @@ function readStringArrayField(frontmatter, key, errors) {
|
|
|
20
40
|
});
|
|
21
41
|
return [];
|
|
22
42
|
}
|
|
43
|
+
function readExplainerDecision(frontmatter, key, errors) {
|
|
44
|
+
const value = frontmatter[key];
|
|
45
|
+
if (value === undefined) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
if (value === null) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
if (typeof value !== 'object' || Array.isArray(value)) {
|
|
52
|
+
errors.push({
|
|
53
|
+
code: 'invalid-explainer-decision-record',
|
|
54
|
+
message: `${key} must be null or a decision object`,
|
|
55
|
+
});
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const record = value;
|
|
59
|
+
const keys = Object.keys(record);
|
|
60
|
+
if (keys.some((entry) => !EXPLAINER_DECISION_KEYS.includes(entry))) {
|
|
61
|
+
errors.push({
|
|
62
|
+
code: 'invalid-explainer-decision-keys',
|
|
63
|
+
message: `${key} must contain only decision, source, and decided_at`,
|
|
64
|
+
});
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const decision = record.decision;
|
|
68
|
+
const source = record.source;
|
|
69
|
+
const decidedAt = record.decided_at;
|
|
70
|
+
let valid = true;
|
|
71
|
+
if (typeof decision !== 'string' ||
|
|
72
|
+
!EXPLAINER_DECISIONS.includes(decision)) {
|
|
73
|
+
errors.push({
|
|
74
|
+
code: 'invalid-explainer-decision',
|
|
75
|
+
message: `${key}.decision must be generate or skip`,
|
|
76
|
+
});
|
|
77
|
+
valid = false;
|
|
78
|
+
}
|
|
79
|
+
if (typeof source !== 'string' ||
|
|
80
|
+
!EXPLAINER_SOURCES.includes(source)) {
|
|
81
|
+
errors.push({
|
|
82
|
+
code: 'invalid-explainer-source',
|
|
83
|
+
message: `${key}.source must be interactive, kickoff_prompt, or autonomous_policy`,
|
|
84
|
+
});
|
|
85
|
+
valid = false;
|
|
86
|
+
}
|
|
87
|
+
if (typeof decidedAt !== 'string' ||
|
|
88
|
+
!ISO_TIMESTAMP_PATTERN.test(decidedAt) ||
|
|
89
|
+
Number.isNaN(Date.parse(decidedAt))) {
|
|
90
|
+
errors.push({
|
|
91
|
+
code: 'invalid-explainer-timestamp',
|
|
92
|
+
message: `${key}.decided_at must be an ISO 8601 timestamp`,
|
|
93
|
+
});
|
|
94
|
+
valid = false;
|
|
95
|
+
}
|
|
96
|
+
if (valid &&
|
|
97
|
+
!EXPLAINER_ALLOWED_PAIRS[key].has(`${String(decision)}:${String(source)}`)) {
|
|
98
|
+
errors.push({
|
|
99
|
+
code: 'invalid-explainer-decision-source',
|
|
100
|
+
message: `${key} does not allow decision ${String(decision)} from source ${String(source)}`,
|
|
101
|
+
});
|
|
102
|
+
valid = false;
|
|
103
|
+
}
|
|
104
|
+
return valid
|
|
105
|
+
? {
|
|
106
|
+
decision: decision,
|
|
107
|
+
source: source,
|
|
108
|
+
decided_at: decidedAt,
|
|
109
|
+
}
|
|
110
|
+
: null;
|
|
111
|
+
}
|
|
23
112
|
function readKind(frontmatter) {
|
|
24
113
|
const rawKind = readStringField(frontmatter, 'oat_kind');
|
|
25
114
|
return rawKind && isProjectStateKind(rawKind) ? rawKind : 'implementation';
|
|
@@ -190,6 +279,8 @@ export function validateProjectState(input) {
|
|
|
190
279
|
oat_siblings: readStringArrayField(input.frontmatter, 'oat_siblings', errors),
|
|
191
280
|
oat_depends_on: readStringArrayField(input.frontmatter, 'oat_depends_on', errors),
|
|
192
281
|
oat_children: readStringArrayField(input.frontmatter, 'oat_children', errors),
|
|
282
|
+
oat_project_explainer: readExplainerDecision(input.frontmatter, 'oat_project_explainer', errors),
|
|
283
|
+
oat_project_recap: readExplainerDecision(input.frontmatter, 'oat_project_recap', errors),
|
|
193
284
|
};
|
|
194
285
|
validateChildLinkage(input, state, errors);
|
|
195
286
|
validateInheritedContextGate(input.frontmatter, state, errors);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-agent-toolkit/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Open Agent Toolkit CLI",
|
|
6
6
|
"homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"ora": "^9.0.0",
|
|
35
35
|
"yaml": "2.8.2",
|
|
36
36
|
"zod": "^3.25.76",
|
|
37
|
-
"@open-agent-toolkit/control-plane": "0.2.
|
|
37
|
+
"@open-agent-toolkit/control-plane": "0.2.6"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.10.0",
|