@open-agent-toolkit/cli 0.1.43 → 0.1.45

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 (47) hide show
  1. package/assets/config/dispatch-matrix-recommendation.json +23 -0
  2. package/assets/docs/cli-utilities/configuration.md +59 -20
  3. package/assets/docs/cli-utilities/workflow-gates.md +79 -16
  4. package/assets/docs/contributing/code.md +10 -4
  5. package/assets/docs/contributing/hooks-and-safety.md +23 -0
  6. package/assets/docs/workflows/projects/dispatch-ceiling.md +80 -10
  7. package/assets/public-package-versions.json +4 -4
  8. package/assets/skills/oat-project-implement/SKILL.md +53 -11
  9. package/assets/skills/oat-project-plan/SKILL.md +22 -3
  10. package/assets/skills/oat-project-quick-start/SKILL.md +22 -3
  11. package/assets/templates/state.md +5 -0
  12. package/dist/commands/config/index.d.ts +6 -0
  13. package/dist/commands/config/index.d.ts.map +1 -1
  14. package/dist/commands/config/index.js +366 -8
  15. package/dist/commands/doctor/index.d.ts +6 -1
  16. package/dist/commands/doctor/index.d.ts.map +1 -1
  17. package/dist/commands/doctor/index.js +138 -4
  18. package/dist/commands/gate/index.d.ts +39 -2
  19. package/dist/commands/gate/index.d.ts.map +1 -1
  20. package/dist/commands/gate/index.js +343 -30
  21. package/dist/commands/internal/cursor-current-target.d.ts +37 -0
  22. package/dist/commands/internal/cursor-current-target.d.ts.map +1 -0
  23. package/dist/commands/internal/cursor-current-target.js +228 -0
  24. package/dist/commands/internal/index.d.ts.map +1 -1
  25. package/dist/commands/internal/index.js +2 -0
  26. package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
  27. package/dist/commands/project/dispatch-ceiling/index.js +359 -16
  28. package/dist/config/oat-config.d.ts +15 -5
  29. package/dist/config/oat-config.d.ts.map +1 -1
  30. package/dist/config/oat-config.js +103 -10
  31. package/dist/config/resolve.js +12 -0
  32. package/dist/manifest/manifest.types.d.ts +12 -12
  33. package/dist/providers/ceiling/registry.d.ts.map +1 -1
  34. package/dist/providers/ceiling/registry.js +16 -0
  35. package/dist/providers/identity/availability.d.ts +22 -0
  36. package/dist/providers/identity/availability.d.ts.map +1 -0
  37. package/dist/providers/identity/availability.js +119 -0
  38. package/dist/providers/identity/family.d.ts +13 -0
  39. package/dist/providers/identity/family.d.ts.map +1 -0
  40. package/dist/providers/identity/family.js +32 -0
  41. package/dist/providers/identity/provenance.d.ts +21 -0
  42. package/dist/providers/identity/provenance.d.ts.map +1 -0
  43. package/dist/providers/identity/provenance.js +65 -0
  44. package/dist/providers/identity/stamp.d.ts +35 -0
  45. package/dist/providers/identity/stamp.d.ts.map +1 -0
  46. package/dist/providers/identity/stamp.js +171 -0
  47. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stamp.d.ts","sourceRoot":"","sources":["../../../src/providers/identity/stamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,KAAK,GAAG,QAAQ,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,KAAK,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAyDD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAiBvE;AAqGD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,0BAA+B,GACvC,aAAa,EAAE,CAqBjB;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,0BAA+B,GACvC,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAepC"}
@@ -0,0 +1,171 @@
1
+ const ACTIONS = new Set(['implementation', 'fix', 'review']);
2
+ const ROLES = new Set(['implementer', 'fix', 'reviewer']);
3
+ const PROVENANCES = new Set([
4
+ 'declared',
5
+ 'observed',
6
+ 'inferred',
7
+ 'unknown',
8
+ ]);
9
+ const FIELD_ORDER = [
10
+ ['scope', 'scope'],
11
+ ['action', 'action'],
12
+ ['role', 'role'],
13
+ ['producer', 'producer'],
14
+ ['provenance', 'provenance'],
15
+ ['modelAxis', 'model_axis'],
16
+ ['effortAxis', 'effort_axis'],
17
+ ['dispatchPolicy', 'dispatch_policy'],
18
+ ['dispatchCeiling', 'dispatch_ceiling'],
19
+ ['target', 'target'],
20
+ ];
21
+ function singleToken(value, fallback) {
22
+ const trimmed = value?.trim() ?? '';
23
+ return trimmed.length > 0 && /^\S+$/.test(trimmed) ? trimmed : fallback;
24
+ }
25
+ function normalizeAction(value) {
26
+ return ACTIONS.has(value)
27
+ ? value
28
+ : undefined;
29
+ }
30
+ function normalizeRole(value) {
31
+ return ROLES.has(value) ? value : undefined;
32
+ }
33
+ function normalizeProvenance(value) {
34
+ return PROVENANCES.has(value)
35
+ ? value
36
+ : 'unknown';
37
+ }
38
+ function inferRole(action) {
39
+ if (action === 'review') {
40
+ return 'reviewer';
41
+ }
42
+ if (action === 'fix') {
43
+ return 'fix';
44
+ }
45
+ return 'implementer';
46
+ }
47
+ export function formatDispatchStamp(record) {
48
+ const normalized = {
49
+ scope: singleToken(record.scope, 'unknown'),
50
+ action: record.action,
51
+ role: record.role,
52
+ producer: singleToken(record.producer, 'unknown'),
53
+ provenance: normalizeProvenance(record.provenance),
54
+ modelAxis: singleToken(record.modelAxis, 'unknown'),
55
+ effortAxis: singleToken(record.effortAxis, 'unknown'),
56
+ dispatchPolicy: singleToken(record.dispatchPolicy, 'unknown'),
57
+ dispatchCeiling: singleToken(record.dispatchCeiling, 'none'),
58
+ target: singleToken(record.target, 'unknown'),
59
+ };
60
+ return `Dispatch: ${FIELD_ORDER.map(([property, key]) => `${key}=${normalized[property]}`).join(' ')}`;
61
+ }
62
+ function tokenMap(tokens) {
63
+ const fields = new Map();
64
+ for (const token of tokens) {
65
+ const sanitized = token.replace(/,$/, '');
66
+ const match = sanitized.match(/^([a-z_]+)=(.+)$/);
67
+ const key = match?.[1];
68
+ const value = match?.[2];
69
+ if (key && value) {
70
+ fields.set(key, value);
71
+ }
72
+ }
73
+ return fields;
74
+ }
75
+ function dispatchPayload(line) {
76
+ const match = line.match(/\bDispatch:\s*(.+)$/);
77
+ return match?.[1]?.trim();
78
+ }
79
+ function warn(options, lineNumber, reason) {
80
+ options.onWarning?.(`Skipped malformed Dispatch line ${lineNumber}: ${reason}`);
81
+ }
82
+ function parseModernStamp(line, lineNumber, fields, options) {
83
+ const action = normalizeAction(fields.get('action'));
84
+ if (!action) {
85
+ warn(options, lineNumber, 'missing or invalid action');
86
+ return undefined;
87
+ }
88
+ const role = normalizeRole(fields.get('role'));
89
+ if (!role) {
90
+ warn(options, lineNumber, 'missing or invalid role');
91
+ return undefined;
92
+ }
93
+ const scope = singleToken(fields.get('scope'), '');
94
+ if (!scope) {
95
+ warn(options, lineNumber, 'missing scope');
96
+ return undefined;
97
+ }
98
+ return {
99
+ scope,
100
+ action,
101
+ role,
102
+ producer: singleToken(fields.get('producer'), 'unknown'),
103
+ provenance: normalizeProvenance(fields.get('provenance')),
104
+ modelAxis: singleToken(fields.get('model_axis'), 'unknown'),
105
+ effortAxis: singleToken(fields.get('effort_axis'), 'unknown'),
106
+ dispatchPolicy: singleToken(fields.get('dispatch_policy'), 'unknown'),
107
+ dispatchCeiling: singleToken(fields.get('dispatch_ceiling'), 'none'),
108
+ target: singleToken(fields.get('target'), 'unknown'),
109
+ line,
110
+ lineNumber,
111
+ legacy: false,
112
+ };
113
+ }
114
+ function parseLegacyStamp(line, lineNumber, tokens, fields, options) {
115
+ const scope = singleToken(tokens[0], '');
116
+ const action = normalizeAction(tokens[1]);
117
+ if (!scope || !action) {
118
+ warn(options, lineNumber, 'missing legacy scope/action');
119
+ return undefined;
120
+ }
121
+ return {
122
+ scope,
123
+ action,
124
+ role: inferRole(action),
125
+ producer: 'unknown',
126
+ provenance: 'unknown',
127
+ modelAxis: singleToken(fields.get('model_axis'), 'unknown'),
128
+ effortAxis: singleToken(fields.get('effort_axis'), 'unknown'),
129
+ dispatchPolicy: singleToken(fields.get('dispatch_policy'), 'unknown'),
130
+ dispatchCeiling: singleToken(fields.get('dispatch_ceiling'), 'none'),
131
+ target: singleToken(fields.get('target'), 'unknown'),
132
+ line,
133
+ lineNumber,
134
+ legacy: true,
135
+ };
136
+ }
137
+ export function parseDispatchStamps(markdown, options = {}) {
138
+ const stamps = [];
139
+ const lines = markdown.split(/\r?\n/);
140
+ lines.forEach((line, index) => {
141
+ const payload = dispatchPayload(line);
142
+ if (!payload) {
143
+ return;
144
+ }
145
+ const tokens = payload.split(/\s+/);
146
+ const fields = tokenMap(tokens);
147
+ const stamp = fields.has('scope')
148
+ ? parseModernStamp(line, index + 1, fields, options)
149
+ : parseLegacyStamp(line, index + 1, tokens, fields, options);
150
+ if (stamp) {
151
+ stamps.push(stamp);
152
+ }
153
+ });
154
+ return stamps;
155
+ }
156
+ export function getProducerIdentitiesByScope(markdown, options = {}) {
157
+ const grouped = {};
158
+ for (const stamp of parseDispatchStamps(markdown, options)) {
159
+ const identities = grouped[stamp.scope] ?? [];
160
+ identities.push({
161
+ scope: stamp.scope,
162
+ action: stamp.action,
163
+ role: stamp.role,
164
+ producer: stamp.producer,
165
+ provenance: stamp.provenance,
166
+ target: stamp.target,
167
+ });
168
+ grouped[stamp.scope] = identities;
169
+ }
170
+ return grouped;
171
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-agent-toolkit/cli",
3
- "version": "0.1.43",
3
+ "version": "0.1.45",
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.1.43"
37
+ "@open-agent-toolkit/control-plane": "0.1.45"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^22.10.0",