@devflow-tools/sdk 0.16.17 → 0.16.19

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.
@@ -0,0 +1,30 @@
1
+ export type RolloutMode = 'off' | 'shadow' | 'on';
2
+ export interface CapabilityRolloutConfig {
3
+ truthfulWorkflow: RolloutMode;
4
+ truthfulHealth: RolloutMode;
5
+ retrievalSessions: RolloutMode;
6
+ outcomeAttribution: RolloutMode;
7
+ projectToolProfile: RolloutMode;
8
+ compactSessionStart: RolloutMode;
9
+ learningOverlays: RolloutMode;
10
+ repeatedEvaluation: RolloutMode;
11
+ worktreeWorkers: RolloutMode;
12
+ }
13
+ export type CapabilityRolloutKey = keyof CapabilityRolloutConfig;
14
+ export type CapabilityRolloutDiagnosticCode = 'config_read_error' | 'malformed_config' | 'invalid_rollout_config' | 'invalid_rollout_value' | 'unknown_rollout_key';
15
+ export interface CapabilityRolloutDiagnostic {
16
+ code: CapabilityRolloutDiagnosticCode;
17
+ source: 'project' | 'environment';
18
+ message: string;
19
+ key?: CapabilityRolloutKey;
20
+ unknownKey?: string;
21
+ environmentVariable?: string;
22
+ value?: unknown;
23
+ }
24
+ export interface CapabilityRolloutResolution {
25
+ config: CapabilityRolloutConfig;
26
+ diagnostics: CapabilityRolloutDiagnostic[];
27
+ }
28
+ export declare const DEFAULT_CAPABILITY_ROLLOUT: Readonly<CapabilityRolloutConfig>;
29
+ export declare function resolveCapabilityRollout(projectRoot: string, env?: NodeJS.ProcessEnv): CapabilityRolloutResolution;
30
+ //# sourceMappingURL=capability-rollout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-rollout.d.ts","sourceRoot":"","sources":["../src/capability-rollout.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;AAElD,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,EAAE,WAAW,CAAC;IAC9B,cAAc,EAAE,WAAW,CAAC;IAC5B,iBAAiB,EAAE,WAAW,CAAC;IAC/B,kBAAkB,EAAE,WAAW,CAAC;IAChC,kBAAkB,EAAE,WAAW,CAAC;IAChC,mBAAmB,EAAE,WAAW,CAAC;IACjC,gBAAgB,EAAE,WAAW,CAAC;IAC9B,kBAAkB,EAAE,WAAW,CAAC;IAChC,eAAe,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,uBAAuB,CAAC;AAEjE,MAAM,MAAM,+BAA+B,GACvC,mBAAmB,GACnB,kBAAkB,GAClB,wBAAwB,GACxB,uBAAuB,GACvB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,+BAA+B,CAAC;IACtC,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,oBAAoB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,uBAAuB,CAAC;IAChC,WAAW,EAAE,2BAA2B,EAAE,CAAC;CAC5C;AAED,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,uBAAuB,CAUvE,CAAC;AAwBH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,2BAA2B,CAwD7B"}
@@ -0,0 +1,153 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ export const DEFAULT_CAPABILITY_ROLLOUT = Object.freeze({
4
+ truthfulWorkflow: 'off',
5
+ truthfulHealth: 'shadow',
6
+ retrievalSessions: 'off',
7
+ outcomeAttribution: 'off',
8
+ projectToolProfile: 'off',
9
+ compactSessionStart: 'off',
10
+ learningOverlays: 'off',
11
+ repeatedEvaluation: 'off',
12
+ worktreeWorkers: 'off',
13
+ });
14
+ const CONFIG_PATH = join('.devflow', 'config.json');
15
+ const ENVIRONMENT_VARIABLES = {
16
+ truthfulWorkflow: 'DEVFLOW_ROLLOUT_TRUTHFUL_WORKFLOW',
17
+ truthfulHealth: 'DEVFLOW_ROLLOUT_TRUTHFUL_HEALTH',
18
+ retrievalSessions: 'DEVFLOW_ROLLOUT_RETRIEVAL_SESSIONS',
19
+ outcomeAttribution: 'DEVFLOW_ROLLOUT_OUTCOME_ATTRIBUTION',
20
+ projectToolProfile: 'DEVFLOW_ROLLOUT_PROJECT_TOOL_PROFILE',
21
+ compactSessionStart: 'DEVFLOW_ROLLOUT_COMPACT_SESSION_START',
22
+ learningOverlays: 'DEVFLOW_ROLLOUT_LEARNING_OVERLAYS',
23
+ repeatedEvaluation: 'DEVFLOW_ROLLOUT_REPEATED_EVALUATION',
24
+ worktreeWorkers: 'DEVFLOW_ROLLOUT_WORKTREE_WORKERS',
25
+ };
26
+ const ROLLOUT_KEYS = Object.keys(ENVIRONMENT_VARIABLES);
27
+ const ROLLOUT_KEY_SET = new Set(ROLLOUT_KEYS);
28
+ export function resolveCapabilityRollout(projectRoot, env = process.env) {
29
+ const config = { ...DEFAULT_CAPABILITY_ROLLOUT };
30
+ const projectResult = readProjectRollout(projectRoot);
31
+ const diagnostics = [...projectResult.diagnostics];
32
+ if (projectResult.rollout) {
33
+ const unknownKeys = Object.keys(projectResult.rollout)
34
+ .filter((key) => !ROLLOUT_KEY_SET.has(key))
35
+ .sort();
36
+ for (const key of unknownKeys) {
37
+ diagnostics.push({
38
+ code: 'unknown_rollout_key',
39
+ source: 'project',
40
+ unknownKey: key,
41
+ value: projectResult.rollout[key],
42
+ message: `Ignoring unknown project rollout key ${key}.`,
43
+ });
44
+ }
45
+ for (const key of ROLLOUT_KEYS) {
46
+ const value = projectResult.rollout[key];
47
+ if (value === undefined)
48
+ continue;
49
+ if (isRolloutMode(value)) {
50
+ config[key] = value;
51
+ }
52
+ else {
53
+ diagnostics.push({
54
+ code: 'invalid_rollout_value',
55
+ source: 'project',
56
+ key,
57
+ value,
58
+ message: `Ignoring invalid project rollout value for ${key}; expected off, shadow, or on.`,
59
+ });
60
+ }
61
+ }
62
+ }
63
+ for (const key of ROLLOUT_KEYS) {
64
+ const environmentVariable = ENVIRONMENT_VARIABLES[key];
65
+ const value = env[environmentVariable];
66
+ if (value === undefined)
67
+ continue;
68
+ if (isRolloutMode(value)) {
69
+ config[key] = value;
70
+ }
71
+ else {
72
+ config[key] = DEFAULT_CAPABILITY_ROLLOUT[key];
73
+ diagnostics.push({
74
+ code: 'invalid_rollout_value',
75
+ source: 'environment',
76
+ key,
77
+ environmentVariable,
78
+ value,
79
+ message: `Ignoring invalid environment rollout value in ${environmentVariable}; expected off, shadow, or on.`,
80
+ });
81
+ }
82
+ }
83
+ return { config, diagnostics };
84
+ }
85
+ function readProjectRollout(projectRoot) {
86
+ const path = join(projectRoot, CONFIG_PATH);
87
+ let rawConfig;
88
+ try {
89
+ rawConfig = readFileSync(path, 'utf8');
90
+ }
91
+ catch (error) {
92
+ if (hasErrorCode(error, 'ENOENT'))
93
+ return { rollout: null, diagnostics: [] };
94
+ return {
95
+ rollout: null,
96
+ diagnostics: [{
97
+ code: 'config_read_error',
98
+ source: 'project',
99
+ message: `Could not read rollout configuration from ${CONFIG_PATH}; using lower-precedence values.`,
100
+ }],
101
+ };
102
+ }
103
+ let config;
104
+ try {
105
+ config = JSON.parse(rawConfig);
106
+ }
107
+ catch {
108
+ return {
109
+ rollout: null,
110
+ diagnostics: [{
111
+ code: 'malformed_config',
112
+ source: 'project',
113
+ message: `Could not parse ${CONFIG_PATH}; using lower-precedence values.`,
114
+ }],
115
+ };
116
+ }
117
+ if (!isRecord(config)) {
118
+ return {
119
+ rollout: null,
120
+ diagnostics: [{
121
+ code: 'malformed_config',
122
+ source: 'project',
123
+ value: config,
124
+ message: `${CONFIG_PATH} must contain a JSON object; using lower-precedence values.`,
125
+ }],
126
+ };
127
+ }
128
+ const rollout = config.rollout;
129
+ if (rollout === undefined)
130
+ return { rollout: null, diagnostics: [] };
131
+ if (!isRecord(rollout)) {
132
+ return {
133
+ rollout: null,
134
+ diagnostics: [{
135
+ code: 'invalid_rollout_config',
136
+ source: 'project',
137
+ value: rollout,
138
+ message: `The rollout field in ${CONFIG_PATH} must be an object; using lower-precedence values.`,
139
+ }],
140
+ };
141
+ }
142
+ return { rollout, diagnostics: [] };
143
+ }
144
+ function hasErrorCode(error, code) {
145
+ return isRecord(error) && error.code === code;
146
+ }
147
+ function isRecord(value) {
148
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
149
+ }
150
+ function isRolloutMode(value) {
151
+ return value === 'off' || value === 'shadow' || value === 'on';
152
+ }
153
+ //# sourceMappingURL=capability-rollout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-rollout.js","sourceRoot":"","sources":["../src/capability-rollout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=capability-rollout.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-rollout.test.d.ts","sourceRoot":"","sources":["../src/capability-rollout.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,209 @@
1
+ import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { afterEach, describe, expect, it } from 'vitest';
5
+ import { DEFAULT_CAPABILITY_ROLLOUT, resolveCapabilityRollout, } from './capability-rollout.js';
6
+ describe('capability rollout', () => {
7
+ const roots = [];
8
+ afterEach(() => {
9
+ for (const root of roots.splice(0))
10
+ rmSync(root, { recursive: true, force: true });
11
+ });
12
+ it('uses safe defaults when no project configuration exists', () => {
13
+ const root = createProjectRoot();
14
+ const resolution = resolveCapabilityRollout(root, {});
15
+ expect(resolution.config).toEqual({
16
+ truthfulWorkflow: 'off',
17
+ truthfulHealth: 'shadow',
18
+ retrievalSessions: 'off',
19
+ outcomeAttribution: 'off',
20
+ projectToolProfile: 'off',
21
+ compactSessionStart: 'off',
22
+ learningOverlays: 'off',
23
+ repeatedEvaluation: 'off',
24
+ worktreeWorkers: 'off',
25
+ });
26
+ expect(resolution.config).not.toBe(DEFAULT_CAPABILITY_ROLLOUT);
27
+ expect(resolution.diagnostics).toEqual([]);
28
+ });
29
+ it('exports immutable defaults and returns a mutable clone', () => {
30
+ const root = createProjectRoot();
31
+ const resolution = resolveCapabilityRollout(root, {});
32
+ expect(Object.isFrozen(DEFAULT_CAPABILITY_ROLLOUT)).toBe(true);
33
+ expect(Reflect.set(DEFAULT_CAPABILITY_ROLLOUT, 'truthfulWorkflow', 'on')).toBe(false);
34
+ expect(DEFAULT_CAPABILITY_ROLLOUT.truthfulWorkflow).toBe('off');
35
+ expect(Reflect.set(resolution.config, 'truthfulWorkflow', 'on')).toBe(true);
36
+ expect(resolution.config.truthfulWorkflow).toBe('on');
37
+ });
38
+ it('applies valid project rollout configuration over defaults', () => {
39
+ const root = createProjectRoot({
40
+ rollout: {
41
+ truthfulWorkflow: 'shadow',
42
+ truthfulHealth: 'on',
43
+ worktreeWorkers: 'on',
44
+ },
45
+ });
46
+ expect(resolveCapabilityRollout(root, {})).toEqual({
47
+ config: {
48
+ ...DEFAULT_CAPABILITY_ROLLOUT,
49
+ truthfulWorkflow: 'shadow',
50
+ truthfulHealth: 'on',
51
+ worktreeWorkers: 'on',
52
+ },
53
+ diagnostics: [],
54
+ });
55
+ });
56
+ it('gives valid environment overrides precedence over project configuration', () => {
57
+ const root = createProjectRoot({
58
+ rollout: {
59
+ truthfulWorkflow: 'shadow',
60
+ truthfulHealth: 'off',
61
+ },
62
+ });
63
+ const resolution = resolveCapabilityRollout(root, {
64
+ DEVFLOW_ROLLOUT_TRUTHFUL_WORKFLOW: 'on',
65
+ DEVFLOW_ROLLOUT_TRUTHFUL_HEALTH: 'shadow',
66
+ });
67
+ expect(resolution.config.truthfulWorkflow).toBe('on');
68
+ expect(resolution.config.truthfulHealth).toBe('shadow');
69
+ expect(resolution.diagnostics).toEqual([]);
70
+ });
71
+ it('rejects invalid values without enabling features', () => {
72
+ const root = createProjectRoot({
73
+ rollout: {
74
+ truthfulWorkflow: true,
75
+ truthfulHealth: 'ON',
76
+ retrievalSessions: 'shadow',
77
+ },
78
+ });
79
+ const resolution = resolveCapabilityRollout(root, {
80
+ DEVFLOW_ROLLOUT_RETRIEVAL_SESSIONS: 'enabled',
81
+ DEVFLOW_ROLLOUT_WORKTREE_WORKERS: 'yes',
82
+ });
83
+ expect(resolution.config.truthfulWorkflow).toBe('off');
84
+ expect(resolution.config.truthfulHealth).toBe('shadow');
85
+ expect(resolution.config.retrievalSessions).toBe('off');
86
+ expect(resolution.config.worktreeWorkers).toBe('off');
87
+ expect(resolution.diagnostics).toEqual([
88
+ expect.objectContaining({ source: 'project', key: 'truthfulWorkflow', value: true }),
89
+ expect.objectContaining({ source: 'project', key: 'truthfulHealth', value: 'ON' }),
90
+ expect.objectContaining({ source: 'environment', key: 'retrievalSessions', value: 'enabled' }),
91
+ expect.objectContaining({ source: 'environment', key: 'worktreeWorkers', value: 'yes' }),
92
+ ]);
93
+ });
94
+ it('resets a project capability to its default for an invalid environment override', () => {
95
+ const root = createProjectRoot({
96
+ rollout: {
97
+ retrievalSessions: 'on',
98
+ },
99
+ });
100
+ const resolution = resolveCapabilityRollout(root, {
101
+ DEVFLOW_ROLLOUT_RETRIEVAL_SESSIONS: 'enabled',
102
+ });
103
+ expect(resolution.config.retrievalSessions).toBe(DEFAULT_CAPABILITY_ROLLOUT.retrievalSessions);
104
+ expect(resolution.diagnostics).toEqual([{
105
+ code: 'invalid_rollout_value',
106
+ source: 'environment',
107
+ key: 'retrievalSessions',
108
+ environmentVariable: 'DEVFLOW_ROLLOUT_RETRIEVAL_SESSIONS',
109
+ value: 'enabled',
110
+ message: 'Ignoring invalid environment rollout value in DEVFLOW_ROLLOUT_RETRIEVAL_SESSIONS; expected off, shadow, or on.',
111
+ }]);
112
+ });
113
+ it('diagnoses unknown project rollout keys in deterministic order without enabling them', () => {
114
+ const root = createProjectRoot({
115
+ rollout: {
116
+ zetaCapability: 'on',
117
+ worktreeWorker: 'on',
118
+ alphaCapability: 'shadow',
119
+ },
120
+ });
121
+ const resolution = resolveCapabilityRollout(root, {});
122
+ expect(resolution.config.worktreeWorkers).toBe('off');
123
+ expect(resolution.diagnostics).toEqual([
124
+ {
125
+ code: 'unknown_rollout_key',
126
+ source: 'project',
127
+ unknownKey: 'alphaCapability',
128
+ value: 'shadow',
129
+ message: 'Ignoring unknown project rollout key alphaCapability.',
130
+ },
131
+ {
132
+ code: 'unknown_rollout_key',
133
+ source: 'project',
134
+ unknownKey: 'worktreeWorker',
135
+ value: 'on',
136
+ message: 'Ignoring unknown project rollout key worktreeWorker.',
137
+ },
138
+ {
139
+ code: 'unknown_rollout_key',
140
+ source: 'project',
141
+ unknownKey: 'zetaCapability',
142
+ value: 'on',
143
+ message: 'Ignoring unknown project rollout key zetaCapability.',
144
+ },
145
+ ]);
146
+ });
147
+ it('does not throw or diagnose a missing configuration file', () => {
148
+ const root = createProjectRoot();
149
+ expect(() => resolveCapabilityRollout(root, {})).not.toThrow();
150
+ expect(resolveCapabilityRollout(root, {})).toEqual({
151
+ config: DEFAULT_CAPABILITY_ROLLOUT,
152
+ diagnostics: [],
153
+ });
154
+ });
155
+ it('diagnoses a configuration path that exists but cannot be read as a file', () => {
156
+ const root = createProjectRoot();
157
+ mkdirSync(configPath(root));
158
+ const resolution = resolveCapabilityRollout(root, {});
159
+ expect(resolution.config).toEqual(DEFAULT_CAPABILITY_ROLLOUT);
160
+ expect(resolution.diagnostics).toEqual([{
161
+ code: 'config_read_error',
162
+ source: 'project',
163
+ message: 'Could not read rollout configuration from .devflow/config.json; using lower-precedence values.',
164
+ }]);
165
+ });
166
+ it('does not throw for malformed configuration and still applies valid environment values', () => {
167
+ const root = createProjectRoot();
168
+ writeFileSync(configPath(root), '{"rollout":');
169
+ const resolution = resolveCapabilityRollout(root, {
170
+ DEVFLOW_ROLLOUT_TRUTHFUL_WORKFLOW: 'shadow',
171
+ });
172
+ expect(resolution.config).toEqual({
173
+ ...DEFAULT_CAPABILITY_ROLLOUT,
174
+ truthfulWorkflow: 'shadow',
175
+ });
176
+ expect(resolution.diagnostics).toEqual([
177
+ expect.objectContaining({ code: 'malformed_config', source: 'project' }),
178
+ ]);
179
+ });
180
+ it('only reads rollout and preserves unrelated project configuration fields', () => {
181
+ const root = createProjectRoot({
182
+ projectName: 'kept',
183
+ customPlugin: { enabled: true },
184
+ rollout: { outcomeAttribution: 'on' },
185
+ });
186
+ const path = configPath(root);
187
+ const before = readFileSync(path, 'utf8');
188
+ const resolution = resolveCapabilityRollout(root, {});
189
+ expect(resolution.config.outcomeAttribution).toBe('on');
190
+ expect(readFileSync(path, 'utf8')).toBe(before);
191
+ expect(JSON.parse(before)).toEqual({
192
+ projectName: 'kept',
193
+ customPlugin: { enabled: true },
194
+ rollout: { outcomeAttribution: 'on' },
195
+ });
196
+ });
197
+ function createProjectRoot(config) {
198
+ const root = mkdtempSync(join(tmpdir(), 'devflow-capability-rollout-'));
199
+ roots.push(root);
200
+ mkdirSync(join(root, '.devflow'));
201
+ if (config)
202
+ writeFileSync(configPath(root), JSON.stringify(config, null, 2));
203
+ return root;
204
+ }
205
+ function configPath(root) {
206
+ return join(root, '.devflow', 'config.json');
207
+ }
208
+ });
209
+ //# sourceMappingURL=capability-rollout.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-rollout.test.js","sourceRoot":"","sources":["../src/capability-rollout.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export declare const CLAUDE_HOOK_NODE_MARKER = ".devflow-hook-node";
2
+ export declare const DEVFLOW_MINIMUM_NODE_VERSION = "22.13.0";
3
+ export declare const DEVFLOW_NODE_ENGINE = ">=22.13.0";
2
4
  export interface ClaudeHookRuntime {
3
5
  nodePath: string;
4
6
  nodeVersion: string;
@@ -1 +1 @@
1
- {"version":3,"file":"claude-hook-runtime.d.ts","sourceRoot":"","sources":["../src/claude-hook-runtime.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,GAAE;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,iBAAiB,CAkCzB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,GAC9F,IAAI,CAWN;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAE7F;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKlF;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAuBN"}
1
+ {"version":3,"file":"claude-hook-runtime.d.ts","sourceRoot":"","sources":["../src/claude-hook-runtime.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAC5D,eAAO,MAAM,4BAA4B,YAAY,CAAC;AACtD,eAAO,MAAM,mBAAmB,cAAsC,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,GAAE;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,iBAAiB,CAkCzB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,GAC9F,IAAI,CAWN;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAE7F;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKlF;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAuBN"}
@@ -2,6 +2,8 @@ import { execFileSync } from 'node:child_process';
2
2
  import { existsSync, readFileSync, realpathSync, writeFileSync } from 'node:fs';
3
3
  import { delimiter, dirname, join } from 'node:path';
4
4
  export const CLAUDE_HOOK_NODE_MARKER = '.devflow-hook-node';
5
+ export const DEVFLOW_MINIMUM_NODE_VERSION = '22.13.0';
6
+ export const DEVFLOW_NODE_ENGINE = `>=${DEVFLOW_MINIMUM_NODE_VERSION}`;
5
7
  export function resolveClaudeHookRuntime(options = {}) {
6
8
  const env = options.env ?? process.env;
7
9
  const home = options.home ?? env.HOME ?? env.USERPROFILE ?? '';
@@ -20,7 +22,7 @@ export function resolveClaudeHookRuntime(options = {}) {
20
22
  'JSON.stringify({version:process.version,modules:process.versions.modules})',
21
23
  ], { encoding: 'utf8', timeout: 5_000 }).trim());
22
24
  if (!identity.version || !identity.modules || !supportsNodeSqlite(identity.version)) {
23
- failures.push(`${candidate}: Node ${identity.version ?? 'unknown'} is older than 22.13.0`);
25
+ failures.push(`${candidate}: Node ${identity.version ?? 'unknown'} does not satisfy ${DEVFLOW_NODE_ENGINE}`);
24
26
  continue;
25
27
  }
26
28
  const npmPath = resolveSiblingNpm(nodePath);
@@ -1 +1 @@
1
- {"version":3,"file":"claude-hook-runtime.js","sourceRoot":"","sources":["../src/claude-hook-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-hook-runtime.js","sourceRoot":"","sources":["../src/claude-hook-runtime.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -24,4 +24,5 @@ export * from "./runtime-endpoint.js";
24
24
  export * from "./auth.js";
25
25
  export * from "./plugin-workflow.js";
26
26
  export * from "./claude-hook-runtime.js";
27
+ export * from "./capability-rollout.js";
27
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -24,4 +24,5 @@ export * from "./runtime-endpoint.js";
24
24
  export * from "./auth.js";
25
25
  export * from "./plugin-workflow.js";
26
26
  export * from "./claude-hook-runtime.js";
27
+ export * from "./capability-rollout.js";
27
28
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC"}
@@ -48,6 +48,7 @@ export interface WorkflowRun {
48
48
  failureCategory: FailureCategory | null;
49
49
  failureReason?: string;
50
50
  failureEvidence?: Record<string, unknown>;
51
+ metadata?: WorkflowRunMetadata;
51
52
  }
52
53
  export interface WorkflowStepResult {
53
54
  stepId: string;
@@ -56,6 +57,28 @@ export interface WorkflowStepResult {
56
57
  output?: unknown;
57
58
  duration?: number;
58
59
  error?: string;
60
+ metadata?: WorkflowStepMetadata;
61
+ }
62
+ export type CanonicalWorkflowRunStatus = "running" | "waiting_host" | "completed" | "failed" | "canceled";
63
+ export type CanonicalWorkflowStepStatus = "pending" | "running" | "waiting_host" | "verifying" | "success" | "failed" | "skipped" | "awaiting_approval";
64
+ export interface WorkflowStepMetadata {
65
+ canonicalStatus: CanonicalWorkflowStepStatus;
66
+ actionId?: string;
67
+ actionKind?: "execute" | "verify";
68
+ actionIds?: string[];
69
+ verifiedActionIds?: string[];
70
+ evidenceHash?: string;
71
+ shadowCandidate?: Record<string, unknown>;
72
+ }
73
+ export interface WorkflowRunMetadata {
74
+ canonicalStatus: CanonicalWorkflowRunStatus;
75
+ engineRunId: string;
76
+ telemetryRunId: string;
77
+ projectRoot: string;
78
+ sessionId: string;
79
+ executionId?: string;
80
+ contextReceipt?: string;
81
+ actionIds?: string[];
59
82
  }
60
83
  export interface WorkflowRunResult {
61
84
  runId: string;
@@ -63,6 +86,7 @@ export interface WorkflowRunResult {
63
86
  duration: number;
64
87
  failureCategory: FailureCategory | null;
65
88
  failureReason?: string;
89
+ metadata?: WorkflowRunMetadata;
66
90
  }
67
91
  export interface WorkflowRejection {
68
92
  reason: string;
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/types/workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/types/workflow.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devflow-tools/sdk",
3
- "version": "0.16.17",
3
+ "version": "0.16.19",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -21,6 +21,10 @@
21
21
  "import": "./dist/plugin-workflow.js",
22
22
  "types": "./dist/plugin-workflow.d.ts"
23
23
  },
24
+ "./capability-rollout": {
25
+ "import": "./dist/capability-rollout.js",
26
+ "types": "./dist/capability-rollout.d.ts"
27
+ },
24
28
  "./utils/project-scanner": {
25
29
  "import": "./dist/utils/project-scanner.js",
26
30
  "types": "./dist/utils/project-scanner.d.ts"
@@ -33,7 +37,7 @@
33
37
  "clean": "rm -rf dist"
34
38
  },
35
39
  "dependencies": {
36
- "@devflow-tools/database": "0.16.17",
40
+ "@devflow-tools/database": "0.16.19",
37
41
  "tiktoken": "^1.0.0"
38
42
  },
39
43
  "devDependencies": {