flowspec 0.1.0 → 0.1.1
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/README.md +3 -1
- package/dist/init.d.ts +16 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +98 -11
- package/dist/init.js.map +1 -1
- package/package.json +13 -3
package/README.md
CHANGED
|
@@ -39,9 +39,11 @@ flowspec init
|
|
|
39
39
|
This creates:
|
|
40
40
|
- `flowspec.config.yaml` - Project configuration
|
|
41
41
|
- `specs/example.flow.yaml` - Sample flow to get started
|
|
42
|
-
- `.claude/settings.local.json` -
|
|
42
|
+
- `.claude/settings.local.json` - PreToolUse hook to protect specs from AI modification
|
|
43
43
|
- Updates `package.json` with `test:e2e` script
|
|
44
44
|
|
|
45
|
+
Running `init` again is safe: existing files are skipped, and the protection hook is merged into an existing `settings.local.json` without overwriting your other settings.
|
|
46
|
+
|
|
45
47
|
### Run Flows
|
|
46
48
|
|
|
47
49
|
```bash
|
package/dist/init.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export interface InitFileResult {
|
|
|
5
5
|
path: string;
|
|
6
6
|
created: boolean;
|
|
7
7
|
skipped: boolean;
|
|
8
|
+
merged?: boolean;
|
|
8
9
|
error?: string;
|
|
9
10
|
}
|
|
10
11
|
/**
|
|
@@ -22,10 +23,24 @@ export declare const DEFAULT_CONFIG_CONTENT = "baseUrl: http://localhost:3000\nt
|
|
|
22
23
|
* Default content for example flow file
|
|
23
24
|
*/
|
|
24
25
|
export declare const DEFAULT_EXAMPLE_FLOW_CONTENT = "name: example-flow\ndescription: Example flow - customize this for your app\nsteps:\n - visit: /\nexpect:\n - visible: Welcome\n";
|
|
26
|
+
/**
|
|
27
|
+
* Marker string used to detect if the FlowSpec hook is already present
|
|
28
|
+
*/
|
|
29
|
+
export declare const FLOWSPEC_HOOK_MARKER = "Flow specs are immutable";
|
|
30
|
+
/**
|
|
31
|
+
* PreToolUse hook with correct Claude Code hooks schema
|
|
32
|
+
*/
|
|
33
|
+
export declare const FLOWSPEC_PRETOOLUSE_HOOK: {
|
|
34
|
+
matcher: string;
|
|
35
|
+
hooks: {
|
|
36
|
+
type: string;
|
|
37
|
+
command: string;
|
|
38
|
+
}[];
|
|
39
|
+
};
|
|
25
40
|
/**
|
|
26
41
|
* Default content for Claude settings to protect specs
|
|
27
42
|
*/
|
|
28
|
-
export declare const DEFAULT_CLAUDE_SETTINGS_CONTENT
|
|
43
|
+
export declare const DEFAULT_CLAUDE_SETTINGS_CONTENT: string;
|
|
29
44
|
/**
|
|
30
45
|
* Initialize FlowSpec in a project directory
|
|
31
46
|
* Creates configuration files and example flow
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,uEAGlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,uIAMxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,+BAA+B,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,uEAGlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,uIAMxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,6BAA6B,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;CAQpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,+BAA+B,QAIvC,CAAC;AA2LN;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,UAAU,GAAE,MAAsB,GAAG,UAAU,CA6B1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAyC3D"}
|
package/dist/init.js
CHANGED
|
@@ -17,18 +17,26 @@ steps:
|
|
|
17
17
|
expect:
|
|
18
18
|
- visible: Welcome
|
|
19
19
|
`;
|
|
20
|
+
/**
|
|
21
|
+
* Marker string used to detect if the FlowSpec hook is already present
|
|
22
|
+
*/
|
|
23
|
+
export const FLOWSPEC_HOOK_MARKER = "Flow specs are immutable";
|
|
24
|
+
/**
|
|
25
|
+
* PreToolUse hook with correct Claude Code hooks schema
|
|
26
|
+
*/
|
|
27
|
+
export const FLOWSPEC_PRETOOLUSE_HOOK = {
|
|
28
|
+
matcher: "Edit|Write",
|
|
29
|
+
hooks: [
|
|
30
|
+
{
|
|
31
|
+
type: "command",
|
|
32
|
+
command: `node -e "const j=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));if(/\\bspecs\\/.*\\.flow\\.yaml$/.test(j.tool_input?.file_path||'')){console.log(JSON.stringify({decision:'block',reason:'Flow specs are immutable. Fix the implementation, not the spec.'}))}"`,
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
20
36
|
/**
|
|
21
37
|
* Default content for Claude settings to protect specs
|
|
22
38
|
*/
|
|
23
|
-
export const DEFAULT_CLAUDE_SETTINGS_CONTENT =
|
|
24
|
-
"hooks": {
|
|
25
|
-
"PreToolUse": [{
|
|
26
|
-
"matcher": { "tool": ["Edit", "Write"], "path": "specs/**/*.flow.yaml" },
|
|
27
|
-
"command": "echo '❌ Flow specs are immutable. Fix the implementation, not the spec.' && exit 1"
|
|
28
|
-
}]
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
`;
|
|
39
|
+
export const DEFAULT_CLAUDE_SETTINGS_CONTENT = `${JSON.stringify({ hooks: { PreToolUse: [FLOWSPEC_PRETOOLUSE_HOOK] } }, null, 2)}\n`;
|
|
32
40
|
/**
|
|
33
41
|
* Safely create a directory if it doesn't exist
|
|
34
42
|
*/
|
|
@@ -104,6 +112,82 @@ function updatePackageJson(projectDir) {
|
|
|
104
112
|
}
|
|
105
113
|
return result;
|
|
106
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if a parsed settings object already contains the FlowSpec hook
|
|
117
|
+
*/
|
|
118
|
+
function hasFlowSpecHook(settings) {
|
|
119
|
+
const hooks = settings.hooks;
|
|
120
|
+
if (!hooks || typeof hooks !== "object")
|
|
121
|
+
return false;
|
|
122
|
+
const preToolUse = hooks.PreToolUse;
|
|
123
|
+
if (!Array.isArray(preToolUse))
|
|
124
|
+
return false;
|
|
125
|
+
return preToolUse.some((entry) => {
|
|
126
|
+
if (!entry || typeof entry !== "object")
|
|
127
|
+
return false;
|
|
128
|
+
const nested = entry.hooks;
|
|
129
|
+
if (!Array.isArray(nested))
|
|
130
|
+
return false;
|
|
131
|
+
return nested.some((h) => h &&
|
|
132
|
+
typeof h === "object" &&
|
|
133
|
+
typeof h.command === "string" &&
|
|
134
|
+
h.command.includes(FLOWSPEC_HOOK_MARKER));
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Ensure the Claude settings file contains the FlowSpec protection hook.
|
|
139
|
+
* Creates the file if missing, merges the hook if the file exists but lacks it.
|
|
140
|
+
*/
|
|
141
|
+
function ensureClaudeHook(projectDir) {
|
|
142
|
+
const settingsPath = join(projectDir, ".claude", "settings.local.json");
|
|
143
|
+
const result = {
|
|
144
|
+
path: settingsPath,
|
|
145
|
+
created: false,
|
|
146
|
+
skipped: false,
|
|
147
|
+
};
|
|
148
|
+
try {
|
|
149
|
+
if (!existsSync(settingsPath)) {
|
|
150
|
+
// File doesn't exist - create with defaults
|
|
151
|
+
const parentDir = dirname(settingsPath);
|
|
152
|
+
ensureDirectory(parentDir);
|
|
153
|
+
writeFileSync(settingsPath, DEFAULT_CLAUDE_SETTINGS_CONTENT, "utf-8");
|
|
154
|
+
result.created = true;
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
// File exists - try to parse and merge
|
|
158
|
+
const content = readFileSync(settingsPath, "utf-8");
|
|
159
|
+
let settings;
|
|
160
|
+
try {
|
|
161
|
+
settings = JSON.parse(content);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Can't parse - skip silently to preserve the file
|
|
165
|
+
result.skipped = true;
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
// Check if hook is already present
|
|
169
|
+
if (hasFlowSpecHook(settings)) {
|
|
170
|
+
result.skipped = true;
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
// Merge hook into existing settings
|
|
174
|
+
if (!settings.hooks || typeof settings.hooks !== "object") {
|
|
175
|
+
settings.hooks = {};
|
|
176
|
+
}
|
|
177
|
+
const hooks = settings.hooks;
|
|
178
|
+
if (!Array.isArray(hooks.PreToolUse)) {
|
|
179
|
+
hooks.PreToolUse = [];
|
|
180
|
+
}
|
|
181
|
+
hooks.PreToolUse.push(FLOWSPEC_PRETOOLUSE_HOOK);
|
|
182
|
+
writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\n`, "utf-8");
|
|
183
|
+
result.merged = true;
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
result.error =
|
|
187
|
+
error instanceof Error ? error.message : "Unknown error occurred";
|
|
188
|
+
}
|
|
189
|
+
return result;
|
|
190
|
+
}
|
|
107
191
|
/**
|
|
108
192
|
* Initialize FlowSpec in a project directory
|
|
109
193
|
* Creates configuration files and example flow
|
|
@@ -119,8 +203,8 @@ export function initProject(projectDir = process.cwd()) {
|
|
|
119
203
|
// 2. Create specs/example.flow.yaml
|
|
120
204
|
const exampleFlowResult = createFileIfNotExists(join(projectDir, "specs", "example.flow.yaml"), DEFAULT_EXAMPLE_FLOW_CONTENT);
|
|
121
205
|
files.push(exampleFlowResult);
|
|
122
|
-
// 3. Create .claude/settings.local.json
|
|
123
|
-
const claudeSettingsResult =
|
|
206
|
+
// 3. Create or merge .claude/settings.local.json
|
|
207
|
+
const claudeSettingsResult = ensureClaudeHook(projectDir);
|
|
124
208
|
files.push(claudeSettingsResult);
|
|
125
209
|
// 4. Update package.json if it exists
|
|
126
210
|
const packageJsonResult = updatePackageJson(projectDir);
|
|
@@ -152,6 +236,9 @@ export function formatInitResult(result) {
|
|
|
152
236
|
}
|
|
153
237
|
lines.push(`· Skipped ${displayPath} (already exists)`);
|
|
154
238
|
}
|
|
239
|
+
else if (file.merged) {
|
|
240
|
+
lines.push(`✓ Merged FlowSpec hook into ${displayPath}`);
|
|
241
|
+
}
|
|
155
242
|
else if (file.created) {
|
|
156
243
|
if (file.path.endsWith("package.json")) {
|
|
157
244
|
lines.push(`✓ ${displayPath}`);
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAqB1C;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;CAGrC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;CAM3C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,OAAO,EAAE,YAAY;IACrB,KAAK,EAAE;QACL;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,8QAA8Q;SACxR;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,IAAI,CAAC,SAAS,CAC9D,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,wBAAwB,CAAC,EAAE,EAAE,EACrD,IAAI,EACJ,CAAC,CACF,IAAI,CAAC;AAEN;;GAEG;AACH,SAAS,eAAe,CAAC,OAAe;IACtC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,QAAgB,EAChB,OAAe;IAEf,MAAM,MAAM,GAAmB;QAC7B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,iCAAiC;QACjC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpC,eAAe,CAAC,SAAS,CAAC,CAAC;QAE3B,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK;YACV,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;IACtE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,UAAkB;IAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACzD,MAAM,MAAM,GAAmB;QAC7B,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAE3D,+BAA+B;QAC/B,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACpD,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,OAAiC,CAAC;QAEtD,mCAAmC;QACnC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,0BAA0B;QAC1B,OAAO,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC;QAErC,oCAAoC;QACpC,aAAa,CACX,eAAe,EACf,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACnC,OAAO,CACR,CAAC;QACF,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK;YACV,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;IACtE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,QAAiC;IACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAA4C,CAAC;IACpE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEtD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAE7C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAc,EAAE,EAAE;QACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACtD,MAAM,MAAM,GAAI,KAAiC,CAAC,KAAK,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QACzC,OAAO,MAAM,CAAC,IAAI,CAChB,CAAC,CAAU,EAAE,EAAE,CACb,CAAC;YACD,OAAO,CAAC,KAAK,QAAQ;YACrB,OAAQ,CAA6B,CAAC,OAAO,KAAK,QAAQ;YACxD,CAA6B,CAAC,OAAkB,CAAC,QAAQ,CACzD,oBAAoB,CACrB,CACJ,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACxE,MAAM,MAAM,GAAmB;QAC7B,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,4CAA4C;YAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;YACxC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC3B,aAAa,CAAC,YAAY,EAAE,+BAA+B,EAAE,OAAO,CAAC,CAAC;YACtE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,uCAAuC;QACvC,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,QAAiC,CAAC;QACtC,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;YACnD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,mCAAmC;QACnC,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1D,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAgC,CAAC;QAExD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;QACxB,CAAC;QACA,KAAK,CAAC,UAAwB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAE/D,aAAa,CACX,YAAY,EACZ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACxC,OAAO,CACR,CAAC;QACF,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK;YACV,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;IACtE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,aAAqB,OAAO,CAAC,GAAG,EAAE;IAC5D,MAAM,KAAK,GAAqB,EAAE,CAAC;IAEnC,iCAAiC;IACjC,MAAM,YAAY,GAAG,qBAAqB,CACxC,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,EACxC,sBAAsB,CACvB,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEzB,oCAAoC;IACpC,MAAM,iBAAiB,GAAG,qBAAqB,CAC7C,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,mBAAmB,CAAC,EAC9C,4BAA4B,CAC7B,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE9B,iDAAiD;IACjD,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAEjC,sCAAsC;IACtC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE9B,4BAA4B;IAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAE7C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC1C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAEd,+CAA+C;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;YACpD,CAAC,CAAC,uCAAuC;YACzC,CAAC,CAAC,YAAY,CAAC;QAEjB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,WAAW,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvC,4FAA4F;gBAC5F,SAAS;YACX,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,mBAAmB,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flowspec",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Immutable user flow specifications for the age of agentic coding",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -8,12 +8,22 @@
|
|
|
8
8
|
"bin": {
|
|
9
9
|
"flowspec": "./dist/index.js"
|
|
10
10
|
},
|
|
11
|
-
"files": [
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
12
14
|
"repository": {
|
|
13
15
|
"type": "git",
|
|
14
16
|
"url": "https://github.com/queso/FlowSpec"
|
|
15
17
|
},
|
|
16
|
-
"keywords": [
|
|
18
|
+
"keywords": [
|
|
19
|
+
"testing",
|
|
20
|
+
"e2e",
|
|
21
|
+
"flow",
|
|
22
|
+
"specs",
|
|
23
|
+
"yaml",
|
|
24
|
+
"claude",
|
|
25
|
+
"ai"
|
|
26
|
+
],
|
|
17
27
|
"author": "Josh Owens",
|
|
18
28
|
"scripts": {
|
|
19
29
|
"dev": "bun run src/index.ts",
|