@icex-labs/icex-flow 0.3.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 (85) hide show
  1. package/README.md +158 -0
  2. package/SKILL.md +141 -0
  3. package/bin/icex-flow.mjs +3 -0
  4. package/dist/src/adapters/index.d.ts +1 -0
  5. package/dist/src/adapters/index.js +2 -0
  6. package/dist/src/adapters/index.js.map +1 -0
  7. package/dist/src/adapters/openclaw.d.ts +31 -0
  8. package/dist/src/adapters/openclaw.js +118 -0
  9. package/dist/src/adapters/openclaw.js.map +1 -0
  10. package/dist/src/cli.d.ts +1 -0
  11. package/dist/src/cli.js +95 -0
  12. package/dist/src/cli.js.map +1 -0
  13. package/dist/src/commands/context.d.ts +1 -0
  14. package/dist/src/commands/context.js +40 -0
  15. package/dist/src/commands/context.js.map +1 -0
  16. package/dist/src/commands/generate.d.ts +2 -0
  17. package/dist/src/commands/generate.js +230 -0
  18. package/dist/src/commands/generate.js.map +1 -0
  19. package/dist/src/commands/init.d.ts +1 -0
  20. package/dist/src/commands/init.js +104 -0
  21. package/dist/src/commands/init.js.map +1 -0
  22. package/dist/src/commands/learn.d.ts +13 -0
  23. package/dist/src/commands/learn.js +108 -0
  24. package/dist/src/commands/learn.js.map +1 -0
  25. package/dist/src/commands/list.d.ts +1 -0
  26. package/dist/src/commands/list.js +104 -0
  27. package/dist/src/commands/list.js.map +1 -0
  28. package/dist/src/commands/plan.d.ts +1 -0
  29. package/dist/src/commands/plan.js +88 -0
  30. package/dist/src/commands/plan.js.map +1 -0
  31. package/dist/src/commands/projects.d.ts +1 -0
  32. package/dist/src/commands/projects.js +69 -0
  33. package/dist/src/commands/projects.js.map +1 -0
  34. package/dist/src/commands/route.d.ts +1 -0
  35. package/dist/src/commands/route.js +38 -0
  36. package/dist/src/commands/route.js.map +1 -0
  37. package/dist/src/commands/validate.d.ts +1 -0
  38. package/dist/src/commands/validate.js +194 -0
  39. package/dist/src/commands/validate.js.map +1 -0
  40. package/dist/src/commands/verify.d.ts +1 -0
  41. package/dist/src/commands/verify.js +50 -0
  42. package/dist/src/commands/verify.js.map +1 -0
  43. package/dist/src/engine/architecture.d.ts +12 -0
  44. package/dist/src/engine/architecture.js +367 -0
  45. package/dist/src/engine/architecture.js.map +1 -0
  46. package/dist/src/engine/config.d.ts +24 -0
  47. package/dist/src/engine/config.js +164 -0
  48. package/dist/src/engine/config.js.map +1 -0
  49. package/dist/src/engine/context.d.ts +12 -0
  50. package/dist/src/engine/context.js +171 -0
  51. package/dist/src/engine/context.js.map +1 -0
  52. package/dist/src/engine/detect.d.ts +6 -0
  53. package/dist/src/engine/detect.js +300 -0
  54. package/dist/src/engine/detect.js.map +1 -0
  55. package/dist/src/engine/environment.d.ts +12 -0
  56. package/dist/src/engine/environment.js +399 -0
  57. package/dist/src/engine/environment.js.map +1 -0
  58. package/dist/src/engine/planner.d.ts +12 -0
  59. package/dist/src/engine/planner.js +130 -0
  60. package/dist/src/engine/planner.js.map +1 -0
  61. package/dist/src/engine/router.d.ts +7 -0
  62. package/dist/src/engine/router.js +56 -0
  63. package/dist/src/engine/router.js.map +1 -0
  64. package/dist/src/engine/verifier.d.ts +8 -0
  65. package/dist/src/engine/verifier.js +55 -0
  66. package/dist/src/engine/verifier.js.map +1 -0
  67. package/dist/src/index.d.ts +14 -0
  68. package/dist/src/index.js +13 -0
  69. package/dist/src/index.js.map +1 -0
  70. package/dist/src/presets/index.d.ts +11 -0
  71. package/dist/src/presets/index.js +352 -0
  72. package/dist/src/presets/index.js.map +1 -0
  73. package/dist/src/types.d.ts +161 -0
  74. package/dist/src/types.js +8 -0
  75. package/dist/src/types.js.map +1 -0
  76. package/dist/src/utils.d.ts +8 -0
  77. package/dist/src/utils.js +65 -0
  78. package/dist/src/utils.js.map +1 -0
  79. package/package.json +48 -0
  80. package/schemas/context.schema.json +38 -0
  81. package/schemas/routes.schema.json +33 -0
  82. package/schemas/workflow.schema.json +84 -0
  83. package/templates/context.manifest.json +21 -0
  84. package/templates/dev-chain.flow.json +112 -0
  85. package/templates/routes.json +37 -0
@@ -0,0 +1,55 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { resolveTemplate } from '../utils.js';
3
+ /**
4
+ * Run a verification command and check the result.
5
+ *
6
+ * Supports retries with delay. Matching is substring-based for `expect`,
7
+ * exact for `expect_exit`.
8
+ */
9
+ export function verifyStep(verify, vars, cwd) {
10
+ const command = resolveTemplate(verify.command, vars);
11
+ const maxRetries = verify.retry ?? 0;
12
+ const retryDelay = verify.retry_delay ?? 5;
13
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
14
+ if (attempt > 0) {
15
+ sleepSync(retryDelay * 1000);
16
+ }
17
+ try {
18
+ const output = execSync(command, {
19
+ cwd,
20
+ encoding: 'utf-8',
21
+ timeout: 30_000,
22
+ stdio: ['pipe', 'pipe', 'pipe'],
23
+ }).trim();
24
+ // Check expected output substring
25
+ if (verify.expect !== undefined) {
26
+ const expected = resolveTemplate(verify.expect, vars);
27
+ if (output.includes(expected)) {
28
+ return { passed: true, output, expected };
29
+ }
30
+ if (attempt < maxRetries)
31
+ continue;
32
+ return { passed: false, output, expected };
33
+ }
34
+ // No expect — command succeeded (exit 0)
35
+ return { passed: true, output, exit_code: 0 };
36
+ }
37
+ catch (err) {
38
+ const e = err;
39
+ const exitCode = e.status ?? 1;
40
+ const output = ((e.stdout ?? '') + (e.stderr ?? '')).trim();
41
+ if (verify.expect_exit !== undefined &&
42
+ exitCode === verify.expect_exit) {
43
+ return { passed: true, output, exit_code: exitCode };
44
+ }
45
+ if (attempt < maxRetries)
46
+ continue;
47
+ return { passed: false, output, exit_code: exitCode };
48
+ }
49
+ }
50
+ return { passed: false, output: 'Max retries exceeded' };
51
+ }
52
+ function sleepSync(ms) {
53
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
54
+ }
55
+ //# sourceMappingURL=verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../../src/engine/verifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,MAAwB,EACxB,IAA4B,EAC5B,GAAY;IAEZ,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAE3C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;gBAC/B,GAAG;gBACH,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEV,kCAAkC;YAClC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACtD,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;gBAC5C,CAAC;gBACD,IAAI,OAAO,GAAG,UAAU;oBAAE,SAAS;gBACnC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YAC7C,CAAC;YAED,yCAAyC;YACzC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAChD,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,GAA4D,CAAC;YACvE,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAE5D,IACE,MAAM,CAAC,WAAW,KAAK,SAAS;gBAChC,QAAQ,KAAK,MAAM,CAAC,WAAW,EAC/B,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;YACvD,CAAC;YAED,IAAI,OAAO,GAAG,UAAU;gBAAE,SAAS;YACnC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,SAAS,CAAC,EAAU;IAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { routeTask } from './engine/router.js';
2
+ export { assembleContext, listContextFiles } from './engine/context.js';
3
+ export { planWorkflow, formatPlan } from './engine/planner.js';
4
+ export { verifyStep } from './engine/verifier.js';
5
+ export { detectProject } from './engine/detect.js';
6
+ export { discoverEnvironments } from './engine/environment.js';
7
+ export { extractArchitecture } from './engine/architecture.js';
8
+ export { generatePreset } from './presets/index.js';
9
+ export { ensureGlobalDir, loadRegistry, registerProject, unregisterProject, mergeRoutes, mergeWorkflows, mergeContextManifest, GLOBAL_DIR, } from './engine/config.js';
10
+ export { handleTask, getChannelMode, shouldUseIcexFlow, routeViaCLI, planViaCLI } from './adapters/index.js';
11
+ export type { DiscoveredEnvironment, EnvironmentDiscoveryResult, } from './engine/environment.js';
12
+ export type { DiscoveredService, ArchitectureResult, } from './engine/architecture.js';
13
+ export type { KnowledgeCategory, KnowledgeEntry, KnowledgeStore, } from './commands/learn.js';
14
+ export type { WorkflowDefinition, WorkflowStep, StepVerification, RoutesConfig, Route, RouteMatch, ContextManifest, TaskInput, RouteResult, ExecutionPlan, PlannedStep, VerifyResult, IcexFlowConfig, GlobalConfig, ProjectRegistry, ProjectRegistryEntry, DetectedProject, PresetType, } from './types.js';
@@ -0,0 +1,13 @@
1
+ // Public API — for programmatic usage and Claude Code integration
2
+ export { routeTask } from './engine/router.js';
3
+ export { assembleContext, listContextFiles } from './engine/context.js';
4
+ export { planWorkflow, formatPlan } from './engine/planner.js';
5
+ export { verifyStep } from './engine/verifier.js';
6
+ export { detectProject } from './engine/detect.js';
7
+ export { discoverEnvironments } from './engine/environment.js';
8
+ export { extractArchitecture } from './engine/architecture.js';
9
+ export { generatePreset } from './presets/index.js';
10
+ export { ensureGlobalDir, loadRegistry, registerProject, unregisterProject, mergeRoutes, mergeWorkflows, mergeContextManifest, GLOBAL_DIR, } from './engine/config.js';
11
+ // OpenClaw adapter
12
+ export { handleTask, getChannelMode, shouldUseIcexFlow, routeViaCLI, planViaCLI } from './adapters/index.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,UAAU,GACX,MAAM,oBAAoB,CAAC;AAE5B,mBAAmB;AACnB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { DetectedProject, RoutesConfig, WorkflowDefinition } from '../types.js';
2
+ export interface PresetOutput {
3
+ routes: RoutesConfig;
4
+ workflows: WorkflowDefinition[];
5
+ context_manifest: object;
6
+ }
7
+ /**
8
+ * Generate config files based on detected project type.
9
+ * Each preset produces routes, workflows, and a context manifest.
10
+ */
11
+ export declare function generatePreset(detected: DetectedProject): PresetOutput;
@@ -0,0 +1,352 @@
1
+ /**
2
+ * Generate config files based on detected project type.
3
+ * Each preset produces routes, workflows, and a context manifest.
4
+ */
5
+ export function generatePreset(detected) {
6
+ const generator = PRESETS[detected.preset] ?? PRESETS.generic;
7
+ return generator(detected);
8
+ }
9
+ const PRESETS = {
10
+ microservice: generateMicroservice,
11
+ monorepo: generateMonorepo,
12
+ frontend: generateFrontend,
13
+ library: generateLibrary,
14
+ 'data-pipeline': generateDataPipeline,
15
+ generic: generateGeneric,
16
+ };
17
+ // ── Microservice ─────────────────────────────────────────────────────
18
+ function generateMicroservice(d) {
19
+ const testCmd = d.test_command ?? 'npm test';
20
+ const repo = d.repo_url ? repoSlug(d.repo_url) : d.name;
21
+ return {
22
+ routes: {
23
+ version: '1.0.0',
24
+ default_agent: 'main',
25
+ default_workflow: 'dev-chain',
26
+ routes: [
27
+ {
28
+ match: { labels: ['auto-ok'] },
29
+ workflow: 'dev-chain',
30
+ agent: 'dev',
31
+ priority: 10,
32
+ },
33
+ {
34
+ match: { keywords: ['implement', 'fix', 'bug', 'feature', 'refactor', 'add'] },
35
+ workflow: 'dev-chain',
36
+ agent: 'dev',
37
+ priority: 5,
38
+ },
39
+ {
40
+ match: { keywords: ['deploy', 'rollout', 'release', 'helm', 'cluster'] },
41
+ workflow: 'dev-chain',
42
+ agent: 'ops',
43
+ priority: 5,
44
+ },
45
+ {
46
+ match: { keywords: ['test', 'validate', 'qa', 'regression', 'lint', 'coverage'] },
47
+ workflow: 'dev-chain',
48
+ agent: 'qa',
49
+ priority: 5,
50
+ },
51
+ {
52
+ match: { keywords: ['architecture', 'design', 'rfc', 'review'] },
53
+ workflow: 'dev-chain',
54
+ agent: 'arch',
55
+ priority: 5,
56
+ },
57
+ ],
58
+ },
59
+ workflows: [devChainWorkflow(d, testCmd, repo)],
60
+ context_manifest: contextManifest(),
61
+ };
62
+ }
63
+ // ── Monorepo ─────────────────────────────────────────────────────────
64
+ function generateMonorepo(d) {
65
+ const testCmd = d.test_command ?? 'npm test';
66
+ const repo = d.repo_url ? repoSlug(d.repo_url) : d.name;
67
+ return {
68
+ routes: {
69
+ version: '1.0.0',
70
+ default_agent: 'main',
71
+ default_workflow: 'dev-chain',
72
+ routes: [
73
+ {
74
+ match: { labels: ['auto-ok'] },
75
+ workflow: 'dev-chain',
76
+ agent: 'dev',
77
+ priority: 10,
78
+ },
79
+ {
80
+ match: { keywords: ['implement', 'fix', 'bug', 'feature', 'refactor'] },
81
+ workflow: 'dev-chain',
82
+ agent: 'dev',
83
+ priority: 5,
84
+ },
85
+ {
86
+ match: { keywords: ['deploy', 'rollout', 'release'] },
87
+ workflow: 'dev-chain',
88
+ agent: 'ops',
89
+ priority: 5,
90
+ },
91
+ {
92
+ match: { keywords: ['test', 'lint', 'ci'] },
93
+ workflow: 'dev-chain',
94
+ agent: 'qa',
95
+ priority: 5,
96
+ },
97
+ ],
98
+ },
99
+ workflows: [devChainWorkflow(d, testCmd, repo)],
100
+ context_manifest: contextManifest(),
101
+ };
102
+ }
103
+ // ── Frontend ─────────────────────────────────────────────────────────
104
+ function generateFrontend(d) {
105
+ const testCmd = d.test_command ?? 'npm test';
106
+ const repo = d.repo_url ? repoSlug(d.repo_url) : d.name;
107
+ return {
108
+ routes: {
109
+ version: '1.0.0',
110
+ default_agent: 'main',
111
+ default_workflow: 'dev-chain',
112
+ routes: [
113
+ {
114
+ match: { labels: ['auto-ok'] },
115
+ workflow: 'dev-chain',
116
+ agent: 'dev',
117
+ priority: 10,
118
+ },
119
+ {
120
+ match: { keywords: ['implement', 'fix', 'bug', 'feature', 'refactor', 'component', 'ui'] },
121
+ workflow: 'dev-chain',
122
+ agent: 'dev',
123
+ priority: 5,
124
+ },
125
+ {
126
+ match: { keywords: ['test', 'lint', 'accessibility', 'e2e', 'storybook'] },
127
+ workflow: 'dev-chain',
128
+ agent: 'qa',
129
+ priority: 5,
130
+ },
131
+ {
132
+ match: { keywords: ['design', 'review', 'ux'] },
133
+ workflow: 'dev-chain',
134
+ agent: 'arch',
135
+ priority: 5,
136
+ },
137
+ ],
138
+ },
139
+ workflows: [devChainWorkflow(d, testCmd, repo)],
140
+ context_manifest: contextManifest(),
141
+ };
142
+ }
143
+ // ── Library ──────────────────────────────────────────────────────────
144
+ function generateLibrary(d) {
145
+ const testCmd = d.test_command ?? 'npm test';
146
+ const repo = d.repo_url ? repoSlug(d.repo_url) : d.name;
147
+ return {
148
+ routes: {
149
+ version: '1.0.0',
150
+ default_agent: 'main',
151
+ default_workflow: 'dev-chain',
152
+ routes: [
153
+ {
154
+ match: { labels: ['auto-ok'] },
155
+ workflow: 'dev-chain',
156
+ agent: 'dev',
157
+ priority: 10,
158
+ },
159
+ {
160
+ match: { keywords: ['implement', 'fix', 'bug', 'feature', 'refactor'] },
161
+ workflow: 'dev-chain',
162
+ agent: 'dev',
163
+ priority: 5,
164
+ },
165
+ {
166
+ match: { keywords: ['test', 'lint', 'coverage'] },
167
+ workflow: 'dev-chain',
168
+ agent: 'qa',
169
+ priority: 5,
170
+ },
171
+ {
172
+ match: { keywords: ['release', 'publish', 'version'] },
173
+ workflow: 'dev-chain',
174
+ agent: 'ops',
175
+ priority: 5,
176
+ },
177
+ ],
178
+ },
179
+ workflows: [devChainWorkflow(d, testCmd, repo)],
180
+ context_manifest: contextManifest(),
181
+ };
182
+ }
183
+ // ── Data Pipeline ────────────────────────────────────────────────────
184
+ function generateDataPipeline(d) {
185
+ const testCmd = d.test_command ?? 'pytest';
186
+ const repo = d.repo_url ? repoSlug(d.repo_url) : d.name;
187
+ return {
188
+ routes: {
189
+ version: '1.0.0',
190
+ default_agent: 'main',
191
+ default_workflow: 'dev-chain',
192
+ routes: [
193
+ {
194
+ match: { labels: ['auto-ok'] },
195
+ workflow: 'dev-chain',
196
+ agent: 'dev',
197
+ priority: 10,
198
+ },
199
+ {
200
+ match: { keywords: ['implement', 'fix', 'pipeline', 'etl', 'transform'] },
201
+ workflow: 'dev-chain',
202
+ agent: 'dev',
203
+ priority: 5,
204
+ },
205
+ {
206
+ match: { keywords: ['test', 'validate', 'data-quality'] },
207
+ workflow: 'dev-chain',
208
+ agent: 'qa',
209
+ priority: 5,
210
+ },
211
+ {
212
+ match: { keywords: ['deploy', 'schedule', 'orchestrate'] },
213
+ workflow: 'dev-chain',
214
+ agent: 'ops',
215
+ priority: 5,
216
+ },
217
+ ],
218
+ },
219
+ workflows: [devChainWorkflow(d, testCmd, repo)],
220
+ context_manifest: contextManifest(),
221
+ };
222
+ }
223
+ // ── Generic ──────────────────────────────────────────────────────────
224
+ function generateGeneric(d) {
225
+ const testCmd = d.test_command ?? 'echo "no tests configured"';
226
+ const repo = d.repo_url ? repoSlug(d.repo_url) : d.name;
227
+ return {
228
+ routes: {
229
+ version: '1.0.0',
230
+ default_agent: 'main',
231
+ default_workflow: 'default',
232
+ routes: [
233
+ {
234
+ match: { keywords: ['implement', 'fix', 'bug', 'feature'] },
235
+ workflow: 'dev-chain',
236
+ agent: 'dev',
237
+ priority: 5,
238
+ },
239
+ ],
240
+ },
241
+ workflows: [devChainWorkflow(d, testCmd, repo)],
242
+ context_manifest: contextManifest(),
243
+ };
244
+ }
245
+ // ── Shared helpers ───────────────────────────────────────────────────
246
+ function devChainWorkflow(d, testCmd, repo) {
247
+ return {
248
+ name: 'dev-chain',
249
+ version: '1.0.0',
250
+ description: 'Issue → Branch → Implement → Test → PR → Merge',
251
+ triggers: {
252
+ labels: ['auto-ok', 'bug', 'feature', 'enhancement'],
253
+ keywords: ['implement', 'fix', 'add', 'refactor', 'build'],
254
+ },
255
+ context: {
256
+ always: ['.icex-flow/context/L1-project/'],
257
+ per_step: {},
258
+ },
259
+ inputs: {
260
+ issue_number: { type: 'string', required: true, description: 'Issue number' },
261
+ branch_name: { type: 'string', required: true, description: 'Feature branch name' },
262
+ repo: { type: 'string', default: repo, description: 'Repository slug' },
263
+ pr_title: { type: 'string', required: true, description: 'Pull request title' },
264
+ },
265
+ steps: [
266
+ {
267
+ id: 'lock-issue',
268
+ name: 'Lock Issue',
269
+ action: 'shell',
270
+ command: 'gh issue edit {{issue_number}} --add-label in-progress --repo {{repo}}',
271
+ verify: {
272
+ command: "gh issue view {{issue_number}} --repo {{repo}} --json labels -q '.labels[].name'",
273
+ expect: 'in-progress',
274
+ },
275
+ },
276
+ {
277
+ id: 'create-branch',
278
+ name: 'Create Feature Branch',
279
+ action: 'shell',
280
+ command: 'git checkout -b {{branch_name}} && git push -u origin {{branch_name}}',
281
+ verify: {
282
+ command: 'git branch --show-current',
283
+ expect: '{{branch_name}}',
284
+ },
285
+ },
286
+ {
287
+ id: 'implement',
288
+ name: 'Implement Changes',
289
+ action: 'agent',
290
+ agent: 'dev-coder',
291
+ timeout: 600,
292
+ input: 'Implement the changes described in issue #{{issue_number}}. Branch: {{branch_name}}. Run tests before committing.',
293
+ verify: {
294
+ command: testCmd,
295
+ expect_exit: 0,
296
+ },
297
+ },
298
+ {
299
+ id: 'create-pr',
300
+ name: 'Create Pull Request',
301
+ action: 'shell',
302
+ command: "gh pr create --base main --head {{branch_name}} --title '{{pr_title}}' --body 'Closes #{{issue_number}}' --repo {{repo}}",
303
+ capture: 'pr_url',
304
+ },
305
+ {
306
+ id: 'merge-pr',
307
+ name: 'Merge PR',
308
+ action: 'shell',
309
+ command: 'gh pr merge {{branch_name}} --squash --delete-branch --repo {{repo}}',
310
+ verify: {
311
+ command: "gh pr view {{branch_name}} --repo {{repo}} --json state -q '.state'",
312
+ expect: 'MERGED',
313
+ },
314
+ },
315
+ {
316
+ id: 'notify',
317
+ name: 'Notify Completion',
318
+ action: 'notify',
319
+ channels: ['telegram:notify'],
320
+ message: 'dev-chain complete: {{pr_title}} (issue #{{issue_number}}) merged',
321
+ },
322
+ ],
323
+ on_failure: {
324
+ action: 'notify',
325
+ channels: ['telegram:notify'],
326
+ message: "dev-chain failed at step '{{failed_step}}' for issue #{{issue_number}}: {{error}}",
327
+ },
328
+ };
329
+ }
330
+ function contextManifest() {
331
+ return {
332
+ version: '1.0.0',
333
+ base_dir: '.',
334
+ global: {
335
+ always_inject: ['context/L0-global/'],
336
+ inject_if_exists: [],
337
+ },
338
+ workflows: {
339
+ 'dev-chain': {
340
+ always_inject: ['context/L1-project/'],
341
+ inject_if_exists: ['context/L2-reference/'],
342
+ steps: {},
343
+ },
344
+ },
345
+ };
346
+ }
347
+ function repoSlug(url) {
348
+ // Extract owner/repo from URL like https://github.com/owner/repo
349
+ const match = url.match(/(?:github\.com|gitlab\.com)[/:]([^/]+\/[^/]+?)(?:\.git)?$/);
350
+ return match?.[1] ?? url;
351
+ }
352
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/presets/index.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAyB;IACtD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC;IAC9D,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,OAAO,GAA6D;IACxE,YAAY,EAAE,oBAAoB;IAClC,QAAQ,EAAE,gBAAgB;IAC1B,QAAQ,EAAE,gBAAgB;IAC1B,OAAO,EAAE,eAAe;IACxB,eAAe,EAAE,oBAAoB;IACrC,OAAO,EAAE,eAAe;CACzB,CAAC;AAEF,wEAAwE;AAExE,SAAS,oBAAoB,CAAC,CAAkB;IAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,IAAI,UAAU,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExD,OAAO;QACL,MAAM,EAAE;YACN,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,MAAM;YACrB,gBAAgB,EAAE,WAAW;YAC7B,MAAM,EAAE;gBACN;oBACE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;oBAC9B,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,EAAE;iBACb;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;oBAC9E,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC;iBACZ;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;oBACxE,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC;iBACZ;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;oBACjF,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,CAAC;iBACZ;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE;oBAChE,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,MAAM;oBACb,QAAQ,EAAE,CAAC;iBACZ;aACF;SACF;QACD,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,gBAAgB,EAAE,eAAe,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE,SAAS,gBAAgB,CAAC,CAAkB;IAC1C,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,IAAI,UAAU,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExD,OAAO;QACL,MAAM,EAAE;YACN,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,MAAM;YACrB,gBAAgB,EAAE,WAAW;YAC7B,MAAM,EAAE;gBACN;oBACE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;oBAC9B,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,EAAE;iBACb;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE;oBACvE,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC;iBACZ;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;oBACrD,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC;iBACZ;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;oBAC3C,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,CAAC;iBACZ;aACF;SACF;QACD,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,gBAAgB,EAAE,eAAe,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE,SAAS,gBAAgB,CAAC,CAAkB;IAC1C,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,IAAI,UAAU,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExD,OAAO;QACL,MAAM,EAAE;YACN,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,MAAM;YACrB,gBAAgB,EAAE,WAAW;YAC7B,MAAM,EAAE;gBACN;oBACE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;oBAC9B,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,EAAE;iBACb;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE;oBAC1F,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC;iBACZ;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE;oBAC1E,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,CAAC;iBACZ;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;oBAC/C,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,MAAM;oBACb,QAAQ,EAAE,CAAC;iBACZ;aACF;SACF;QACD,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,gBAAgB,EAAE,eAAe,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE,SAAS,eAAe,CAAC,CAAkB;IACzC,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,IAAI,UAAU,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExD,OAAO;QACL,MAAM,EAAE;YACN,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,MAAM;YACrB,gBAAgB,EAAE,WAAW;YAC7B,MAAM,EAAE;gBACN;oBACE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;oBAC9B,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,EAAE;iBACb;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE;oBACvE,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC;iBACZ;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;oBACjD,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,CAAC;iBACZ;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;oBACtD,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC;iBACZ;aACF;SACF;QACD,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,gBAAgB,EAAE,eAAe,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE,SAAS,oBAAoB,CAAC,CAAkB;IAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,IAAI,QAAQ,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExD,OAAO;QACL,MAAM,EAAE;YACN,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,MAAM;YACrB,gBAAgB,EAAE,WAAW;YAC7B,MAAM,EAAE;gBACN;oBACE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;oBAC9B,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,EAAE;iBACb;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE;oBACzE,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC;iBACZ;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE;oBACzD,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,CAAC;iBACZ;gBACD;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE;oBAC1D,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC;iBACZ;aACF;SACF;QACD,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,gBAAgB,EAAE,eAAe,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE,SAAS,eAAe,CAAC,CAAkB;IACzC,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,IAAI,4BAA4B,CAAC;IAC/D,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExD,OAAO;QACL,MAAM,EAAE;YACN,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,MAAM;YACrB,gBAAgB,EAAE,SAAS;YAC3B,MAAM,EAAE;gBACN;oBACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;oBAC3D,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC;iBACZ;aACF;SACF;QACD,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,gBAAgB,EAAE,eAAe,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE,SAAS,gBAAgB,CAAC,CAAkB,EAAE,OAAe,EAAE,IAAY;IACzE,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,gDAAgD;QAC7D,QAAQ,EAAE;YACR,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC;YACpD,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;SAC3D;QACD,OAAO,EAAE;YACP,MAAM,EAAE,CAAC,gCAAgC,CAAC;YAC1C,QAAQ,EAAE,EAAE;SACb;QACD,MAAM,EAAE;YACN,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;YAC7E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,qBAAqB,EAAE;YACnF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE;YACvE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oBAAoB,EAAE;SAChF;QACD,KAAK,EAAE;YACL;gBACE,EAAE,EAAE,YAAY;gBAChB,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,wEAAwE;gBACjF,MAAM,EAAE;oBACN,OAAO,EAAE,kFAAkF;oBAC3F,MAAM,EAAE,aAAa;iBACtB;aACF;YACD;gBACE,EAAE,EAAE,eAAe;gBACnB,IAAI,EAAE,uBAAuB;gBAC7B,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,uEAAuE;gBAChF,MAAM,EAAE;oBACN,OAAO,EAAE,2BAA2B;oBACpC,MAAM,EAAE,iBAAiB;iBAC1B;aACF;YACD;gBACE,EAAE,EAAE,WAAW;gBACf,IAAI,EAAE,mBAAmB;gBACzB,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,GAAG;gBACZ,KAAK,EAAE,mHAAmH;gBAC1H,MAAM,EAAE;oBACN,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,CAAC;iBACf;aACF;YACD;gBACE,EAAE,EAAE,WAAW;gBACf,IAAI,EAAE,qBAAqB;gBAC3B,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,0HAA0H;gBACnI,OAAO,EAAE,QAAQ;aAClB;YACD;gBACE,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,sEAAsE;gBAC/E,MAAM,EAAE;oBACN,OAAO,EAAE,qEAAqE;oBAC9E,MAAM,EAAE,QAAQ;iBACjB;aACF;YACD;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,mBAAmB;gBACzB,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,CAAC,iBAAiB,CAAC;gBAC7B,OAAO,EAAE,mEAAmE;aAC7E;SACF;QACD,UAAU,EAAE;YACV,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,CAAC,iBAAiB,CAAC;YAC7B,OAAO,EAAE,mFAAmF;SAC7F;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,GAAG;QACb,MAAM,EAAE;YACN,aAAa,EAAE,CAAC,oBAAoB,CAAC;YACrC,gBAAgB,EAAE,EAAE;SACrB;QACD,SAAS,EAAE;YACT,WAAW,EAAE;gBACX,aAAa,EAAE,CAAC,qBAAqB,CAAC;gBACtC,gBAAgB,EAAE,CAAC,uBAAuB,CAAC;gBAC3C,KAAK,EAAE,EAAE;aACV;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,iEAAiE;IACjE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IACrF,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,161 @@
1
+ export interface WorkflowDefinition {
2
+ name: string;
3
+ version: string;
4
+ description: string;
5
+ triggers?: {
6
+ labels?: string[];
7
+ keywords?: string[];
8
+ };
9
+ context?: {
10
+ always?: string[];
11
+ per_step?: Record<string, string[]>;
12
+ };
13
+ inputs?: Record<string, InputDefinition>;
14
+ steps: WorkflowStep[];
15
+ on_failure?: FailureHandler;
16
+ }
17
+ export interface InputDefinition {
18
+ type: 'string' | 'number' | 'boolean';
19
+ required?: boolean;
20
+ default?: string | number | boolean;
21
+ description?: string;
22
+ }
23
+ export interface WorkflowStep {
24
+ id: string;
25
+ name: string;
26
+ action: 'shell' | 'agent' | 'notify' | 'gate';
27
+ command?: string;
28
+ agent?: string;
29
+ timeout?: number;
30
+ input?: string;
31
+ channels?: string[];
32
+ message?: string;
33
+ capture?: string;
34
+ condition?: string;
35
+ verify?: StepVerification;
36
+ }
37
+ export interface StepVerification {
38
+ command: string;
39
+ expect?: string;
40
+ expect_exit?: number;
41
+ retry?: number;
42
+ retry_delay?: number;
43
+ }
44
+ export interface FailureHandler {
45
+ action: 'notify' | 'rollback';
46
+ channels?: string[];
47
+ message?: string;
48
+ rollback_steps?: string[];
49
+ }
50
+ export interface RoutesConfig {
51
+ version: string;
52
+ default_agent: string;
53
+ default_workflow?: string;
54
+ routes: Route[];
55
+ }
56
+ export interface Route {
57
+ match: RouteMatch;
58
+ workflow: string;
59
+ agent: string;
60
+ priority?: number;
61
+ }
62
+ export interface RouteMatch {
63
+ labels?: string[];
64
+ keywords?: string[];
65
+ channel?: string;
66
+ sender?: string;
67
+ }
68
+ export interface ContextManifest {
69
+ version: string;
70
+ base_dir?: string;
71
+ global: {
72
+ always_inject: string[];
73
+ inject_if_exists?: string[];
74
+ };
75
+ workflows?: Record<string, WorkflowContextDef>;
76
+ }
77
+ export interface WorkflowContextDef {
78
+ always_inject?: string[];
79
+ inject_if_exists?: string[];
80
+ steps?: Record<string, {
81
+ inject?: string[];
82
+ }>;
83
+ }
84
+ export interface TaskInput {
85
+ description: string;
86
+ labels?: string[];
87
+ channel?: string;
88
+ sender?: string;
89
+ }
90
+ export interface RouteResult {
91
+ agent: string;
92
+ workflow: string;
93
+ matched_route?: Route;
94
+ confidence: 'exact' | 'keyword' | 'default';
95
+ }
96
+ export interface ExecutionPlan {
97
+ workflow: string;
98
+ steps: PlannedStep[];
99
+ context_files: string[];
100
+ variables: Record<string, string>;
101
+ }
102
+ export interface PlannedStep {
103
+ id: string;
104
+ name: string;
105
+ action: string;
106
+ resolved_command?: string;
107
+ resolved_input?: string;
108
+ timeout?: number;
109
+ verify?: {
110
+ command: string;
111
+ expect?: string;
112
+ expect_exit?: number;
113
+ };
114
+ status: 'pending' | 'running' | 'passed' | 'failed' | 'skipped';
115
+ }
116
+ export interface VerifyResult {
117
+ passed: boolean;
118
+ output: string;
119
+ expected?: string;
120
+ exit_code?: number;
121
+ }
122
+ export interface IcexFlowConfig {
123
+ workflows_dir: string;
124
+ routes_file: string;
125
+ context_file: string;
126
+ base_dir: string;
127
+ }
128
+ export declare const DEFAULT_CONFIG: IcexFlowConfig;
129
+ export interface GlobalConfig {
130
+ version: string;
131
+ notification_channel?: string;
132
+ safety_constraints?: string[];
133
+ }
134
+ export interface ProjectRegistryEntry {
135
+ path: string;
136
+ name: string;
137
+ preset?: string;
138
+ registered_at: string;
139
+ repo_url?: string;
140
+ }
141
+ export interface ProjectRegistry {
142
+ version: string;
143
+ projects: ProjectRegistryEntry[];
144
+ }
145
+ export type PresetType = 'microservice' | 'monorepo' | 'frontend' | 'library' | 'data-pipeline' | 'generic';
146
+ export interface DetectedProject {
147
+ name: string;
148
+ repo_url?: string;
149
+ language: string;
150
+ languages: string[];
151
+ ci?: string;
152
+ deployment?: string;
153
+ test_command?: string;
154
+ build_command?: string;
155
+ has_db_migrations: boolean;
156
+ containerized: boolean;
157
+ is_claude_code: boolean;
158
+ is_monorepo: boolean;
159
+ preset: PresetType;
160
+ detected_features: string[];
161
+ }
@@ -0,0 +1,8 @@
1
+ // ── Workflow Definition ──────────────────────────────────────────────
2
+ export const DEFAULT_CONFIG = {
3
+ workflows_dir: '.icex-flow/workflows',
4
+ routes_file: '.icex-flow/routes.json',
5
+ context_file: '.icex-flow/context.manifest.json',
6
+ base_dir: '.',
7
+ };
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAuJxE,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,aAAa,EAAE,sBAAsB;IACrC,WAAW,EAAE,wBAAwB;IACrC,YAAY,EAAE,kCAAkC;IAChD,QAAQ,EAAE,GAAG;CACd,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function resolveTemplate(template: string, vars: Record<string, string>): string;
2
+ export declare function readFileSafe(path: string): string | null;
3
+ export declare function loadJson<T>(path: string): T;
4
+ export declare function parseFlags(args: string[]): {
5
+ positional: string[];
6
+ flags: Record<string, string>;
7
+ };
8
+ export declare function formatTable(rows: string[][], headers?: string[]): string;