@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.
- package/README.md +158 -0
- package/SKILL.md +141 -0
- package/bin/icex-flow.mjs +3 -0
- package/dist/src/adapters/index.d.ts +1 -0
- package/dist/src/adapters/index.js +2 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/adapters/openclaw.d.ts +31 -0
- package/dist/src/adapters/openclaw.js +118 -0
- package/dist/src/adapters/openclaw.js.map +1 -0
- package/dist/src/cli.d.ts +1 -0
- package/dist/src/cli.js +95 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/context.d.ts +1 -0
- package/dist/src/commands/context.js +40 -0
- package/dist/src/commands/context.js.map +1 -0
- package/dist/src/commands/generate.d.ts +2 -0
- package/dist/src/commands/generate.js +230 -0
- package/dist/src/commands/generate.js.map +1 -0
- package/dist/src/commands/init.d.ts +1 -0
- package/dist/src/commands/init.js +104 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/learn.d.ts +13 -0
- package/dist/src/commands/learn.js +108 -0
- package/dist/src/commands/learn.js.map +1 -0
- package/dist/src/commands/list.d.ts +1 -0
- package/dist/src/commands/list.js +104 -0
- package/dist/src/commands/list.js.map +1 -0
- package/dist/src/commands/plan.d.ts +1 -0
- package/dist/src/commands/plan.js +88 -0
- package/dist/src/commands/plan.js.map +1 -0
- package/dist/src/commands/projects.d.ts +1 -0
- package/dist/src/commands/projects.js +69 -0
- package/dist/src/commands/projects.js.map +1 -0
- package/dist/src/commands/route.d.ts +1 -0
- package/dist/src/commands/route.js +38 -0
- package/dist/src/commands/route.js.map +1 -0
- package/dist/src/commands/validate.d.ts +1 -0
- package/dist/src/commands/validate.js +194 -0
- package/dist/src/commands/validate.js.map +1 -0
- package/dist/src/commands/verify.d.ts +1 -0
- package/dist/src/commands/verify.js +50 -0
- package/dist/src/commands/verify.js.map +1 -0
- package/dist/src/engine/architecture.d.ts +12 -0
- package/dist/src/engine/architecture.js +367 -0
- package/dist/src/engine/architecture.js.map +1 -0
- package/dist/src/engine/config.d.ts +24 -0
- package/dist/src/engine/config.js +164 -0
- package/dist/src/engine/config.js.map +1 -0
- package/dist/src/engine/context.d.ts +12 -0
- package/dist/src/engine/context.js +171 -0
- package/dist/src/engine/context.js.map +1 -0
- package/dist/src/engine/detect.d.ts +6 -0
- package/dist/src/engine/detect.js +300 -0
- package/dist/src/engine/detect.js.map +1 -0
- package/dist/src/engine/environment.d.ts +12 -0
- package/dist/src/engine/environment.js +399 -0
- package/dist/src/engine/environment.js.map +1 -0
- package/dist/src/engine/planner.d.ts +12 -0
- package/dist/src/engine/planner.js +130 -0
- package/dist/src/engine/planner.js.map +1 -0
- package/dist/src/engine/router.d.ts +7 -0
- package/dist/src/engine/router.js +56 -0
- package/dist/src/engine/router.js.map +1 -0
- package/dist/src/engine/verifier.d.ts +8 -0
- package/dist/src/engine/verifier.js +55 -0
- package/dist/src/engine/verifier.js.map +1 -0
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.js +13 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/presets/index.d.ts +11 -0
- package/dist/src/presets/index.js +352 -0
- package/dist/src/presets/index.js.map +1 -0
- package/dist/src/types.d.ts +161 -0
- package/dist/src/types.js +8 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils.d.ts +8 -0
- package/dist/src/utils.js +65 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +48 -0
- package/schemas/context.schema.json +38 -0
- package/schemas/routes.schema.json +33 -0
- package/schemas/workflow.schema.json +84 -0
- package/templates/context.manifest.json +21 -0
- package/templates/dev-chain.flow.json +112 -0
- 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":"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"}
|
|
@@ -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;
|