agentic-workflow-manager 9.11.12 → 9.12.0

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 (76) hide show
  1. package/dist/src/commands/doctor.js +23 -1
  2. package/dist/src/commands/hooks/claude.js +61 -8
  3. package/dist/src/commands/hooks/resync.js +1 -1
  4. package/dist/src/commands/job/index.js +39 -4
  5. package/dist/src/commands/model-policy/index.js +253 -0
  6. package/dist/src/commands/plan/index.js +53 -9
  7. package/dist/src/commands/preflight/checks.js +18 -0
  8. package/dist/src/commands/watch/apply.js +62 -4
  9. package/dist/src/commands/watch/supervisor.js +63 -3
  10. package/dist/src/core/admission/index.js +20 -6
  11. package/dist/src/core/journal/types.js +21 -5
  12. package/dist/src/core/model-policy/capabilities-v2.js +152 -0
  13. package/dist/src/core/model-policy/capabilities.js +7 -1
  14. package/dist/src/core/model-policy/claude-hook-events.js +120 -0
  15. package/dist/src/core/model-policy/event-store.js +221 -0
  16. package/dist/src/core/model-policy/hook-diagnostics.js +94 -0
  17. package/dist/src/core/model-policy/journal.js +113 -18
  18. package/dist/src/core/model-policy/local-claude-scope.js +41 -0
  19. package/dist/src/core/model-policy/local-codex-scope.js +33 -0
  20. package/dist/src/core/model-policy/local-event-scope.js +13 -0
  21. package/dist/src/core/model-policy/machine-key.js +56 -0
  22. package/dist/src/core/model-policy/native-claude-agent-definition.js +82 -0
  23. package/dist/src/core/model-policy/native-claude-config.js +107 -0
  24. package/dist/src/core/model-policy/native-claude-machine.js +58 -0
  25. package/dist/src/core/model-policy/native-claude-transcript.js +80 -0
  26. package/dist/src/core/model-policy/native-claude.js +41 -0
  27. package/dist/src/core/model-policy/native-codex-machine.js +116 -0
  28. package/dist/src/core/model-policy/native-codex-rollout.js +111 -0
  29. package/dist/src/core/model-policy/native-codex.js +302 -0
  30. package/dist/src/core/model-policy/native-routing-observe.js +106 -0
  31. package/dist/src/core/model-policy/native-routing-proof.js +52 -0
  32. package/dist/src/core/model-policy/native-runtime.js +86 -0
  33. package/dist/src/core/model-policy/resolve.js +96 -6
  34. package/dist/src/core/model-policy/selection-policy-digest.js +22 -0
  35. package/dist/src/core/model-policy/setup-readiness.js +77 -0
  36. package/dist/src/providers/index.js +3 -1
  37. package/dist/tests/commands/doctor-routing.test.js +22 -0
  38. package/dist/tests/commands/doctor.test.js +5 -0
  39. package/dist/tests/commands/hooks/install.test.js +6 -0
  40. package/dist/tests/commands/hooks/resync.test.js +3 -0
  41. package/dist/tests/commands/hooks/status.test.js +12 -1
  42. package/dist/tests/commands/job/routing-file.test.js +32 -0
  43. package/dist/tests/commands/job/routing-report-cli.test.js +4 -3
  44. package/dist/tests/commands/model-policy/claude-hook-flow.test.js +104 -0
  45. package/dist/tests/commands/model-policy/index.test.js +179 -0
  46. package/dist/tests/commands/preflight/preflight.test.js +65 -0
  47. package/dist/tests/commands/watch/apply.test.js +84 -0
  48. package/dist/tests/commands/watch/dispatch-routing-identity.test.js +23 -0
  49. package/dist/tests/core/admission/index.test.js +21 -0
  50. package/dist/tests/core/model-policy/capabilities-v2.test.js +42 -0
  51. package/dist/tests/core/model-policy/claude-hook-events.test.js +40 -0
  52. package/dist/tests/core/model-policy/event-store-claude.test.js +64 -0
  53. package/dist/tests/core/model-policy/event-store.test.js +151 -0
  54. package/dist/tests/core/model-policy/hook-diagnostics.test.js +34 -0
  55. package/dist/tests/core/model-policy/journal.test.js +112 -1
  56. package/dist/tests/core/model-policy/local-claude-scope.test.js +31 -0
  57. package/dist/tests/core/model-policy/machine-key.test.js +38 -0
  58. package/dist/tests/core/model-policy/native-claude-agent-definition.test.js +31 -0
  59. package/dist/tests/core/model-policy/native-claude-config.test.js +53 -0
  60. package/dist/tests/core/model-policy/native-claude-machine.test.js +18 -0
  61. package/dist/tests/core/model-policy/native-claude-transcript.test.js +45 -0
  62. package/dist/tests/core/model-policy/native-claude.test.js +21 -0
  63. package/dist/tests/core/model-policy/native-codex-machine.test.js +34 -0
  64. package/dist/tests/core/model-policy/native-codex-rollout.test.js +44 -0
  65. package/dist/tests/core/model-policy/native-codex.test.js +133 -0
  66. package/dist/tests/core/model-policy/native-routing-observe.test.js +60 -0
  67. package/dist/tests/core/model-policy/native-routing-proof.test.js +30 -0
  68. package/dist/tests/core/model-policy/native-runtime.test.js +14 -0
  69. package/dist/tests/core/model-policy/resolve-event.test.js +65 -0
  70. package/dist/tests/core/model-policy/setup-readiness.test.js +83 -0
  71. package/dist/tests/providers/index.test.js +1 -1
  72. package/package.json +2 -2
  73. package/prebuilds/darwin-arm64/secure_fs.node +0 -0
  74. package/prebuilds/darwin-x64/secure_fs.node +0 -0
  75. package/prebuilds/win32-arm64/secure_fs.node +0 -0
  76. package/prebuilds/win32-x64/secure_fs.node +0 -0
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const setup_readiness_1 = require("../../../src/core/model-policy/setup-readiness");
7
+ const capabilities_1 = require("../../../src/core/model-policy/capabilities");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const selection_policy_digest_1 = require("../../../src/core/model-policy/selection-policy-digest");
12
+ const approved = {
13
+ state: 'approved', provenance: 'user',
14
+ policy: { schema: 'approved-model-policy/v1', contentDigest: 'a'.repeat(64), approval: { approvedAt: '2026-09-23T00:00:00.000Z', approvalId: 'test' }, lineage: { previousDigest: null },
15
+ content: { schema: 'model-policy/v1', implementationBudget: { maxAttempts: 3, escalation: ['mechanical', 'integration', 'judgment'], judgmentEfforts: ['medium', 'high'] }, mappings: [
16
+ { target: 'codex', runtimeKind: 'native', profiles: {}, fullCapability: {}, degradation: { allowMissingModelOverride: false, allowMissingEffortOverride: false, allowMissingObservedIdentity: false } },
17
+ ] } },
18
+ };
19
+ describe('routing setup guidance', () => {
20
+ it('does not demand machine setup when routing policy is absent', () => {
21
+ expect((0, setup_readiness_1.routingSetupGuidance)({ state: 'absent' })).toEqual([]);
22
+ });
23
+ it('names the exact provider and explicit discovery step without certifying the receipt', () => {
24
+ expect((0, setup_readiness_1.routingSetupGuidance)(approved)).toEqual([
25
+ { target: 'codex', runtimeKind: 'native', state: 'needs-evidence', command: 'awm model-policy setup --provider codex --json' },
26
+ ]);
27
+ });
28
+ it('reports invalid policy instead of silently falling back to a machine default', () => {
29
+ expect((0, setup_readiness_1.routingSetupGuidance)({ state: 'invalid', provenance: 'project', reason: 'bad digest' })).toEqual([
30
+ { state: 'policy-invalid', reason: 'bad digest' },
31
+ ]);
32
+ });
33
+ it('does not keep nudging when a valid local receipt exists; runtime matching remains a separate gate', () => {
34
+ const previous = process.env.AWM_HOME;
35
+ const root = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'awm-routing-setup-'));
36
+ process.env.AWM_HOME = root;
37
+ try {
38
+ const runtime = { target: 'codex', kind: 'native', version: '1.0.0', accountScopeDigest: 'b'.repeat(64) };
39
+ const destination = (0, capabilities_1.capabilityReceiptPath)(runtime);
40
+ fs_1.default.mkdirSync(path_1.default.dirname(destination), { recursive: true });
41
+ const receipt = {
42
+ schema: 'routing-capabilities/v1', runtime,
43
+ recordedAt: '2026-09-23T19:00:00.000Z', expiresAt: '2026-09-24T19:00:00.000Z',
44
+ capabilities: { artifactDelivery: 'unverified', interactiveExecution: 'unverified', unattendedController: 'unverified', nativeSubagents: 'unverified', modelOverride: 'unverified', effortOverride: 'unverified', observedModelEvidence: 'unverified', durableResume: 'unverified' },
45
+ availableSelections: [{ selector: { kind: 'model', id: 'gpt-6-sol' }, effort: { kind: 'explicit', value: 'medium' } }],
46
+ evidence: [], approval: { approvalId: 'test', snapshotDigest: 'a'.repeat(64) },
47
+ };
48
+ fs_1.default.writeFileSync(destination, JSON.stringify(receipt));
49
+ expect((0, setup_readiness_1.routingSetupGuidance)(approved, new Date('2026-09-23T19:30:00.000Z'))).toHaveLength(1);
50
+ receipt.capabilities.nativeSubagents = 'supported';
51
+ receipt.capabilities.modelOverride = 'supported';
52
+ receipt.capabilities.effortOverride = 'supported';
53
+ receipt.capabilities.observedModelEvidence = 'supported';
54
+ receipt.evidence = ['nativeSubagents', 'modelOverride', 'effortOverride', 'observedModelEvidence'].map(capability => ({ capability, kind: 'native-dispatch', receiptDigest: 'b'.repeat(64) }));
55
+ fs_1.default.writeFileSync(destination, JSON.stringify(receipt));
56
+ expect((0, setup_readiness_1.routingSetupGuidance)(approved, new Date('2026-09-23T19:30:00.000Z'))).toEqual([]);
57
+ }
58
+ finally {
59
+ if (previous === undefined)
60
+ delete process.env.AWM_HOME;
61
+ else
62
+ process.env.AWM_HOME = previous;
63
+ fs_1.default.rmSync(root, { recursive: true, force: true });
64
+ }
65
+ });
66
+ it('reports sealed v2 coverage without claiming that passive diagnostics checked the current machine', () => {
67
+ const selection = { selector: { kind: 'model', id: 'gpt-6-sol' }, effort: { kind: 'explicit', value: 'high' } };
68
+ const policy = structuredClone(approved);
69
+ if (policy.state !== 'approved')
70
+ throw new Error('expected policy');
71
+ const mapping = policy.policy.content.mappings[0];
72
+ mapping.profiles = { mechanical: selection, integration: selection, judgment: selection };
73
+ mapping.fullCapability = selection;
74
+ mapping.degradation.allowMissingObservedIdentity = true;
75
+ const receipt = { schema: 'routing-capabilities/v2', runtime: { target: 'codex', kind: 'native', version: '0.156.1', accountScopeDigest: 'a'.repeat(64) },
76
+ binaryDigest: 'b'.repeat(64), configDigest: 'c'.repeat(64), recordedAt: '2026-09-22T00:00:00.000Z', claims: [{ selection,
77
+ mappingDigest: (0, selection_policy_digest_1.selectionPolicyDigest)(mapping, selection), eventDigest: 'd'.repeat(64), source: 'codex-turn-context', observedAt: '2026-09-22T00:00:00.000Z', actualModel: 'unverified', tokenUsage: 'unknown' }] };
78
+ expect((0, setup_readiness_1.routingSetupGuidance)(policy, new Date('2026-09-23T01:00:00.000Z'), { readStoredEventReceipt: (() => ({ state: 'present', receipt })) })).toEqual([
79
+ { target: 'codex', runtimeKind: 'native', state: 'coverage-only' },
80
+ ]);
81
+ expect((0, setup_readiness_1.routingSetupGuidance)(policy, new Date('2026-09-23T01:00:00.000Z'), { readStoredEventReceipt: (() => ({ state: 'invalid', reason: 'bad seal' })) })).toMatchObject([{ state: 'needs-evidence' }]);
82
+ });
83
+ });
@@ -123,7 +123,7 @@ describe('Providers Routing', () => {
123
123
  });
124
124
  expect(graph['claude-code']).toEqual({
125
125
  label: 'Claude Code',
126
- configHome: { envVar: null, dir: '.claude', resolved: path_1.default.join(tmpHome, '.claude') },
126
+ configHome: { envVar: 'CLAUDE_CONFIG_DIR', dir: '.claude', resolved: path_1.default.join(tmpHome, '.claude') },
127
127
  skill: {
128
128
  global: path_1.default.join(tmpHome, '.claude/skills'),
129
129
  local: '.claude/skills',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-workflow-manager",
3
- "version": "9.11.12",
3
+ "version": "9.12.0",
4
4
  "main": "dist/src/index.js",
5
5
  "bin": {
6
6
  "awm": "./dist/src/index.js"
@@ -50,6 +50,7 @@
50
50
  "dependencies": {
51
51
  "@clack/prompts": "^0.11.0",
52
52
  "commander": "^14.0.3",
53
+ "js-yaml": "4.3.2",
53
54
  "picocolors": "^1.1.1",
54
55
  "semver": "^7.7.4",
55
56
  "simple-git": "3.36.0"
@@ -64,7 +65,6 @@
64
65
  "dependency-cruiser": "16.10.4",
65
66
  "eslint": "10.8.1",
66
67
  "jest": "^30.2.0",
67
- "js-yaml": "4.3.2",
68
68
  "node-gyp": "^11.5.0",
69
69
  "ts-jest": "^29.4.6",
70
70
  "ts-node": "^10.9.2",
Binary file
Binary file