@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,230 @@
1
+ import { mkdirSync, writeFileSync, existsSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import { parseFlags } from '../utils.js';
4
+ import { detectProject } from '../engine/detect.js';
5
+ import { discoverEnvironments } from '../engine/environment.js';
6
+ import { extractArchitecture } from '../engine/architecture.js';
7
+ import { loadKnowledge } from './learn.js';
8
+ // ── Markdown Generation ──────────────────────────────────────────────
9
+ function generateProjectMd(dir, detected, environments, services, dataFlow, knowledge) {
10
+ const lines = [];
11
+ // Header
12
+ lines.push(`# ${detected.name}`);
13
+ lines.push('');
14
+ lines.push('> Auto-generated by icex-flow. Re-run `icex-flow generate` to update.');
15
+ lines.push('');
16
+ // ── Project Overview ──
17
+ lines.push('## Project Overview');
18
+ lines.push('');
19
+ lines.push(`| Field | Value |`);
20
+ lines.push(`|-------|-------|`);
21
+ lines.push(`| Name | ${detected.name} |`);
22
+ lines.push(`| Type | ${detected.preset} |`);
23
+ lines.push(`| Language | ${detected.language}${detected.languages.length > 1 ? ` (${detected.languages.join(', ')})` : ''} |`);
24
+ if (detected.repo_url) {
25
+ lines.push(`| Repository | ${detected.repo_url} |`);
26
+ }
27
+ if (detected.ci) {
28
+ lines.push(`| CI/CD | ${detected.ci} |`);
29
+ }
30
+ if (detected.test_command) {
31
+ lines.push(`| Test Command | \`${detected.test_command}\` |`);
32
+ }
33
+ if (detected.build_command) {
34
+ lines.push(`| Build Command | \`${detected.build_command}\` |`);
35
+ }
36
+ lines.push(`| Containerized | ${detected.containerized ? 'Yes' : 'No'} |`);
37
+ lines.push(`| DB Migrations | ${detected.has_db_migrations ? 'Yes' : 'No'} |`);
38
+ if (detected.is_monorepo) {
39
+ lines.push(`| Monorepo | Yes |`);
40
+ }
41
+ lines.push('');
42
+ // ── Environments ──
43
+ const envKnowledge = knowledge.filter(k => k.category === 'environment');
44
+ if (environments.length > 0 || envKnowledge.length > 0) {
45
+ lines.push('## Environments');
46
+ lines.push('');
47
+ if (environments.length > 0) {
48
+ lines.push('| Name | Type | Production | Namespace | Endpoint |');
49
+ lines.push('|------|------|-----------|-----------|----------|');
50
+ for (const env of environments) {
51
+ const prod = env.isProduction ? '**YES**' : 'no';
52
+ lines.push(`| ${env.name} | ${env.type} | ${prod} | ${env.namespace ?? '-'} | ${env.endpoint ?? '-'} |`);
53
+ }
54
+ lines.push('');
55
+ }
56
+ if (envKnowledge.length > 0) {
57
+ lines.push('### Environment Notes');
58
+ lines.push('');
59
+ for (const k of envKnowledge) {
60
+ lines.push(`- ${k.text}`);
61
+ }
62
+ lines.push('');
63
+ }
64
+ }
65
+ // ── Architecture ──
66
+ if (services.length > 0) {
67
+ lines.push('## Architecture');
68
+ lines.push('');
69
+ lines.push('### Services');
70
+ lines.push('');
71
+ lines.push('| Service | Language | Port | Database | Dependencies |');
72
+ lines.push('|---------|----------|------|----------|-------------|');
73
+ for (const svc of services) {
74
+ lines.push(`| ${svc.name} | ${svc.language ?? '-'} | ${svc.port ?? '-'} | ${svc.database ?? '-'} | ${svc.dependencies?.join(', ') ?? '-'} |`);
75
+ }
76
+ lines.push('');
77
+ if (dataFlow && dataFlow.length > 0) {
78
+ lines.push('### Data Flow');
79
+ lines.push('');
80
+ lines.push('```');
81
+ for (const flow of dataFlow) {
82
+ lines.push(flow);
83
+ }
84
+ lines.push('```');
85
+ lines.push('');
86
+ }
87
+ // Add architecture knowledge
88
+ const archKnowledge = knowledge.filter(k => k.category === 'architecture');
89
+ if (archKnowledge.length > 0) {
90
+ lines.push('### Architecture Notes');
91
+ lines.push('');
92
+ for (const k of archKnowledge) {
93
+ lines.push(`- ${k.text}`);
94
+ }
95
+ lines.push('');
96
+ }
97
+ }
98
+ // ── Deployment ──
99
+ if (detected.deployment || detected.ci || detected.containerized) {
100
+ lines.push('## Deployment');
101
+ lines.push('');
102
+ if (detected.deployment) {
103
+ lines.push(`- **Strategy**: ${detected.deployment}`);
104
+ }
105
+ if (detected.ci) {
106
+ lines.push(`- **CI/CD**: ${detected.ci}`);
107
+ }
108
+ if (detected.containerized) {
109
+ lines.push(`- **Containerized**: Yes (Docker)`);
110
+ }
111
+ // GitOps detection
112
+ const argoEnvs = environments.filter(e => e.type === 'argocd');
113
+ const fluxEnvs = environments.filter(e => e.type === 'flux');
114
+ if (argoEnvs.length > 0) {
115
+ lines.push(`- **GitOps**: ArgoCD (${argoEnvs.map(e => e.name).join(', ')})`);
116
+ }
117
+ if (fluxEnvs.length > 0) {
118
+ lines.push(`- **GitOps**: Flux (${fluxEnvs.map(e => e.name).join(', ')})`);
119
+ }
120
+ // Workflow knowledge
121
+ const wfKnowledge = knowledge.filter(k => k.category === 'workflow');
122
+ if (wfKnowledge.length > 0) {
123
+ lines.push('');
124
+ lines.push('### Deployment Notes');
125
+ lines.push('');
126
+ for (const k of wfKnowledge) {
127
+ lines.push(`- ${k.text}`);
128
+ }
129
+ }
130
+ lines.push('');
131
+ }
132
+ // ── Safety Rules ──
133
+ lines.push('## Safety Rules');
134
+ lines.push('');
135
+ // Auto-generated safety rules based on detected environments
136
+ const prodEnvs = environments.filter(e => e.isProduction);
137
+ if (prodEnvs.length > 0) {
138
+ lines.push('### Production Environments');
139
+ lines.push('');
140
+ for (const env of prodEnvs) {
141
+ lines.push(`- **${env.name}** is a production environment — require explicit authorization before any changes`);
142
+ }
143
+ lines.push('- Never deploy untested code to production');
144
+ lines.push('- Always verify changes in a non-production environment first');
145
+ lines.push('');
146
+ }
147
+ if (detected.has_db_migrations) {
148
+ lines.push('- Database migrations must be reviewed before applying to production');
149
+ lines.push('- Always backup the database before running migrations in production');
150
+ lines.push('');
151
+ }
152
+ // Safety knowledge
153
+ const safetyKnowledge = knowledge.filter(k => k.category === 'safety');
154
+ if (safetyKnowledge.length > 0) {
155
+ lines.push('### Project-Specific Safety Rules');
156
+ lines.push('');
157
+ for (const k of safetyKnowledge) {
158
+ lines.push(`- ${k.text}`);
159
+ }
160
+ lines.push('');
161
+ }
162
+ // If no safety rules were generated
163
+ if (prodEnvs.length === 0 && !detected.has_db_migrations && safetyKnowledge.length === 0) {
164
+ lines.push('- No production environments detected — add safety rules with `icex-flow learn`');
165
+ lines.push('');
166
+ }
167
+ // ── Custom Knowledge ──
168
+ const customKnowledge = knowledge.filter(k => k.category === 'custom');
169
+ if (customKnowledge.length > 0) {
170
+ lines.push('## Custom Knowledge');
171
+ lines.push('');
172
+ for (const k of customKnowledge) {
173
+ lines.push(`- ${k.text}`);
174
+ }
175
+ lines.push('');
176
+ }
177
+ // ── Features ──
178
+ if (detected.detected_features.length > 0) {
179
+ lines.push('## Detected Features');
180
+ lines.push('');
181
+ for (const feature of detected.detected_features) {
182
+ lines.push(`- \`${feature}\``);
183
+ }
184
+ lines.push('');
185
+ }
186
+ return lines.join('\n');
187
+ }
188
+ // ── Command ──────────────────────────────────────────────────────────
189
+ export function runGenerate(dir) {
190
+ const absDir = resolve(dir);
191
+ const flowDir = join(absDir, '.icex-flow');
192
+ // 1. Detect project
193
+ console.log('Detecting project...');
194
+ const detected = detectProject(absDir);
195
+ // 2. Discover environments
196
+ console.log('Discovering environments...');
197
+ const envResult = discoverEnvironments(absDir);
198
+ // 3. Extract architecture
199
+ console.log('Extracting architecture...');
200
+ const archResult = extractArchitecture(absDir);
201
+ // 4. Load knowledge
202
+ const knowledge = loadKnowledge(absDir);
203
+ // 5. Generate PROJECT.md
204
+ console.log('Generating PROJECT.md...');
205
+ const projectMd = generateProjectMd(absDir, detected, envResult.environments, archResult.services, archResult.dataFlow, knowledge.entries);
206
+ // 6. Write to context directory
207
+ const projectContextDir = join(flowDir, 'context', 'L1-project', detected.name);
208
+ mkdirSync(projectContextDir, { recursive: true });
209
+ const outputPath = join(projectContextDir, 'PROJECT.md');
210
+ writeFileSync(outputPath, projectMd, 'utf-8');
211
+ console.log('');
212
+ console.log(`Generated: ${outputPath}`);
213
+ console.log('');
214
+ console.log(` Environments: ${envResult.environments.length} discovered`);
215
+ console.log(` Services: ${archResult.services.length} found`);
216
+ console.log(` Knowledge: ${knowledge.entries.length} entries`);
217
+ if (archResult.dataFlow && archResult.dataFlow.length > 0) {
218
+ console.log(` Data flows: ${archResult.dataFlow.length} connections`);
219
+ }
220
+ }
221
+ export function cmdGenerate(args) {
222
+ const { flags } = parseFlags(args);
223
+ const dir = flags['dir'] ?? '.';
224
+ if (!existsSync(join(resolve(dir), '.icex-flow'))) {
225
+ console.error('Not an icex-flow project. Run "icex-flow init" first.');
226
+ process.exit(1);
227
+ }
228
+ runGenerate(dir);
229
+ }
230
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function cmdInit(args: string[]): void;
@@ -0,0 +1,104 @@
1
+ import { mkdirSync, writeFileSync, existsSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import { parseFlags } from '../utils.js';
4
+ import { detectProject } from '../engine/detect.js';
5
+ import { generatePreset } from '../presets/index.js';
6
+ import { ensureGlobalDir, registerProject } from '../engine/config.js';
7
+ import { runGenerate } from './generate.js';
8
+ export function cmdInit(args) {
9
+ const { positional, flags } = parseFlags(args);
10
+ const targetDir = positional[0] ?? '.';
11
+ const absDir = resolve(targetDir);
12
+ const flowDir = join(absDir, '.icex-flow');
13
+ const force = flags['force'] === 'true';
14
+ if (existsSync(flowDir) && !force) {
15
+ console.error(`Already initialized: ${flowDir}`);
16
+ console.error('Use --force to re-initialize.');
17
+ process.exit(1);
18
+ }
19
+ // 1. Ensure global config directory exists
20
+ ensureGlobalDir();
21
+ // 2. Auto-detect project characteristics
22
+ console.log(`Scanning ${absDir} ...`);
23
+ const detected = detectProject(absDir);
24
+ console.log('');
25
+ console.log(` Project: ${detected.name}`);
26
+ console.log(` Preset: ${detected.preset}`);
27
+ console.log(` Language: ${detected.language}${detected.languages.length > 1 ? ` (+${detected.languages.slice(1).join(', ')})` : ''}`);
28
+ if (detected.repo_url) {
29
+ console.log(` Repo: ${detected.repo_url}`);
30
+ }
31
+ if (detected.ci) {
32
+ console.log(` CI: ${detected.ci}`);
33
+ }
34
+ if (detected.deployment) {
35
+ console.log(` Deploy: ${detected.deployment}`);
36
+ }
37
+ if (detected.test_command) {
38
+ console.log(` Test cmd: ${detected.test_command}`);
39
+ }
40
+ if (detected.containerized) {
41
+ console.log(` Container: yes`);
42
+ }
43
+ if (detected.has_db_migrations) {
44
+ console.log(` DB migrate: yes`);
45
+ }
46
+ if (detected.is_claude_code) {
47
+ console.log(` Claude Code: yes`);
48
+ }
49
+ if (detected.detected_features.length > 0) {
50
+ console.log(` Features: ${detected.detected_features.join(', ')}`);
51
+ }
52
+ console.log('');
53
+ // 3. Generate config from preset
54
+ const preset = generatePreset(detected);
55
+ // 4. Create directory structure
56
+ mkdirSync(join(flowDir, 'workflows'), { recursive: true });
57
+ mkdirSync(join(flowDir, 'context', 'L1-project'), { recursive: true });
58
+ mkdirSync(join(flowDir, 'context', 'L2-reference'), { recursive: true });
59
+ // 5. Write routes.json
60
+ writeFileSync(join(flowDir, 'routes.json'), JSON.stringify(preset.routes, null, 2), 'utf-8');
61
+ // 6. Write context.manifest.json
62
+ writeFileSync(join(flowDir, 'context.manifest.json'), JSON.stringify(preset.context_manifest, null, 2), 'utf-8');
63
+ // 7. Write workflow files
64
+ for (const wf of preset.workflows) {
65
+ const filename = `${wf.name}.flow.json`;
66
+ writeFileSync(join(flowDir, 'workflows', filename), JSON.stringify(wf, null, 2), 'utf-8');
67
+ }
68
+ // 8. Write a detection summary for reference
69
+ writeFileSync(join(flowDir, 'detected.json'), JSON.stringify(detected, null, 2), 'utf-8');
70
+ // 9. Register project in global registry
71
+ registerProject({
72
+ path: absDir,
73
+ name: detected.name,
74
+ preset: detected.preset,
75
+ registered_at: new Date().toISOString(),
76
+ repo_url: detected.repo_url,
77
+ });
78
+ console.log(`Initialized icex-flow at ${flowDir}`);
79
+ console.log('');
80
+ console.log('Created:');
81
+ console.log(' .icex-flow/routes.json — task routing rules');
82
+ console.log(' .icex-flow/context.manifest.json — context assembly manifest');
83
+ console.log(' .icex-flow/detected.json — auto-detection results');
84
+ for (const wf of preset.workflows) {
85
+ console.log(` .icex-flow/workflows/${wf.name}.flow.json`);
86
+ }
87
+ console.log(' .icex-flow/context/L1-project/ — project-specific context');
88
+ console.log(' .icex-flow/context/L2-reference/ — tool/API references');
89
+ console.log('');
90
+ console.log(`Preset: ${detected.preset}`);
91
+ console.log(`Registered in ~/.icex-flow/projects.json`);
92
+ console.log('');
93
+ // 10. Auto-generate PROJECT.md
94
+ console.log('');
95
+ runGenerate(absDir);
96
+ console.log('');
97
+ console.log('Next steps:');
98
+ console.log(' 1. Review and customize .icex-flow/routes.json');
99
+ console.log(' 2. Review generated PROJECT.md in context/L1-project/');
100
+ console.log(' 3. Add knowledge: icex-flow learn "your project fact"');
101
+ console.log(' 4. Customize workflows in .icex-flow/workflows/');
102
+ console.log(' 5. Run: icex-flow validate');
103
+ }
104
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAY,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,UAAU,OAAO,CAAC,IAAc;IACpC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;IAExC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2CAA2C;IAC3C,eAAe,EAAE,CAAC;IAElB,yCAAyC;IACzC,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,MAAM,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzI,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,QAAQ,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,iCAAiC;IACjC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAExC,gCAAgC;IAChC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzE,uBAAuB;IACvB,aAAa,CACX,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EACtC,OAAO,CACR,CAAC;IAEF,iCAAiC;IACjC,aAAa,CACX,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,EACtC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,EAChD,OAAO,CACR,CAAC;IAEF,0BAA0B;IAC1B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC;QACxC,aAAa,CACX,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,EACpC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAC3B,OAAO,CACR,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,aAAa,CACX,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EAC9B,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACjC,OAAO,CACR,CAAC;IAEF,yCAAyC;IACzC,eAAe,CAAC;QACd,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACvC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;IAChF,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,+BAA+B;IAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type KnowledgeCategory = 'environment' | 'architecture' | 'safety' | 'workflow' | 'custom';
2
+ export interface KnowledgeEntry {
3
+ id: string;
4
+ text: string;
5
+ category: KnowledgeCategory;
6
+ created_at: string;
7
+ }
8
+ export interface KnowledgeStore {
9
+ version: string;
10
+ entries: KnowledgeEntry[];
11
+ }
12
+ export declare function loadKnowledge(dir: string): KnowledgeStore;
13
+ export declare function cmdLearn(args: string[]): void;
@@ -0,0 +1,108 @@
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import { parseFlags } from '../utils.js';
4
+ import { randomUUID } from 'node:crypto';
5
+ // ── Helpers ──────────────────────────────────────────────────────────
6
+ function knowledgePath(dir) {
7
+ return join(dir, '.icex-flow', 'knowledge.json');
8
+ }
9
+ export function loadKnowledge(dir) {
10
+ const path = knowledgePath(dir);
11
+ if (!existsSync(path)) {
12
+ return { version: '1.0.0', entries: [] };
13
+ }
14
+ try {
15
+ return JSON.parse(readFileSync(path, 'utf-8'));
16
+ }
17
+ catch {
18
+ return { version: '1.0.0', entries: [] };
19
+ }
20
+ }
21
+ function saveKnowledge(dir, store) {
22
+ const flowDir = join(dir, '.icex-flow');
23
+ mkdirSync(flowDir, { recursive: true });
24
+ writeFileSync(knowledgePath(dir), JSON.stringify(store, null, 2), 'utf-8');
25
+ }
26
+ function categorize(text) {
27
+ const lower = text.toLowerCase();
28
+ // Safety patterns
29
+ if (/\b(never|don't|do not|must not|forbidden|dangerous|careful|warning|caution|always confirm|require approval)\b/.test(lower)) {
30
+ return 'safety';
31
+ }
32
+ // Environment patterns
33
+ if (/\b(cluster|namespace|k3d|k8s|kubernetes|server|host|endpoint|ip\s*address|\d+\.\d+\.\d+\.\d+|port\s*\d+|prod(uction)?|staging|dev(elopment)?|environment)\b/.test(lower)) {
34
+ return 'environment';
35
+ }
36
+ // Architecture patterns
37
+ if (/\b(service|api|database|db|microservice|gateway|queue|broker|cache|schema|table|model|endpoint)\b/.test(lower)) {
38
+ return 'architecture';
39
+ }
40
+ // Workflow patterns
41
+ if (/\b(deploy|build|test|ci|cd|pipeline|release|merge|branch|pr|pull request|review|approval)\b/.test(lower)) {
42
+ return 'workflow';
43
+ }
44
+ return 'custom';
45
+ }
46
+ // ── Command ──────────────────────────────────────────────────────────
47
+ export function cmdLearn(args) {
48
+ const { positional, flags } = parseFlags(args);
49
+ const dir = resolve(flags['dir'] ?? '.');
50
+ // --list: show all knowledge
51
+ if (flags['list'] === 'true') {
52
+ const store = loadKnowledge(dir);
53
+ if (store.entries.length === 0) {
54
+ console.log('No knowledge stored yet.');
55
+ console.log('');
56
+ console.log('Add knowledge with: icex-flow learn "some fact about the project"');
57
+ return;
58
+ }
59
+ console.log(`Knowledge entries (${store.entries.length}):`);
60
+ console.log('');
61
+ for (const entry of store.entries) {
62
+ console.log(` [${entry.category}] ${entry.text}`);
63
+ console.log(` id: ${entry.id} created: ${entry.created_at}`);
64
+ console.log('');
65
+ }
66
+ return;
67
+ }
68
+ // --remove <id>: remove a knowledge entry
69
+ if (flags['remove']) {
70
+ const store = loadKnowledge(dir);
71
+ const id = flags['remove'];
72
+ const before = store.entries.length;
73
+ store.entries = store.entries.filter(e => e.id !== id);
74
+ if (store.entries.length === before) {
75
+ console.error(`Knowledge entry not found: ${id}`);
76
+ process.exit(1);
77
+ }
78
+ saveKnowledge(dir, store);
79
+ console.log(`Removed knowledge entry: ${id}`);
80
+ return;
81
+ }
82
+ // Add new knowledge
83
+ const text = positional[0];
84
+ if (!text) {
85
+ console.error('Usage: icex-flow learn "<knowledge>"');
86
+ console.error(' icex-flow learn --list');
87
+ console.error(' icex-flow learn --remove <id>');
88
+ process.exit(1);
89
+ }
90
+ // Check that .icex-flow exists
91
+ if (!existsSync(join(dir, '.icex-flow'))) {
92
+ console.error('Not an icex-flow project. Run "icex-flow init" first.');
93
+ process.exit(1);
94
+ }
95
+ const category = categorize(text);
96
+ const entry = {
97
+ id: randomUUID().slice(0, 8),
98
+ text,
99
+ category,
100
+ created_at: new Date().toISOString(),
101
+ };
102
+ const store = loadKnowledge(dir);
103
+ store.entries.push(entry);
104
+ saveKnowledge(dir, store);
105
+ console.log(`Learned [${category}]: ${text}`);
106
+ console.log(` id: ${entry.id}`);
107
+ }
108
+ //# sourceMappingURL=learn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learn.js","sourceRoot":"","sources":["../../../src/commands/learn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function cmdList(args: string[]): void;
@@ -0,0 +1,104 @@
1
+ import { join, resolve } from 'node:path';
2
+ import { readdirSync, existsSync } from 'node:fs';
3
+ import { loadJson, formatTable, parseFlags } from '../utils.js';
4
+ import { mergeRoutes, mergeWorkflows } from '../engine/config.js';
5
+ export function cmdList(args) {
6
+ const { flags } = parseFlags(args);
7
+ const dir = flags['dir'] ?? '.';
8
+ const absDir = resolve(dir);
9
+ const flowDir = join(absDir, '.icex-flow');
10
+ if (!existsSync(flowDir)) {
11
+ console.error(`Not initialized: ${flowDir}`);
12
+ console.error('Run: icex-flow init');
13
+ process.exit(1);
14
+ }
15
+ // List workflows (merged: global + project)
16
+ console.log('## Workflows\n');
17
+ const allWorkflows = mergeWorkflows(absDir);
18
+ if (allWorkflows.length === 0) {
19
+ // Fall back to just reading project dir
20
+ const wfDir = join(flowDir, 'workflows');
21
+ if (existsSync(wfDir)) {
22
+ const files = readdirSync(wfDir).filter((f) => f.endsWith('.flow.json'));
23
+ if (files.length === 0) {
24
+ console.log(' (none)');
25
+ }
26
+ else {
27
+ const rows = [];
28
+ for (const file of files) {
29
+ try {
30
+ const wf = loadJson(join(wfDir, file));
31
+ rows.push([wf.name, wf.version, `${wf.steps?.length ?? 0} steps`, wf.description.slice(0, 60)]);
32
+ }
33
+ catch {
34
+ rows.push([file, '?', '?', 'Invalid JSON']);
35
+ }
36
+ }
37
+ console.log(formatTable(rows, ['Name', 'Version', 'Steps', 'Description']));
38
+ }
39
+ }
40
+ else {
41
+ console.log(' (no workflows directory)');
42
+ }
43
+ }
44
+ else {
45
+ const rows = allWorkflows.map((wf) => [
46
+ wf.name,
47
+ wf.version,
48
+ `${wf.steps?.length ?? 0} steps`,
49
+ wf.description.slice(0, 60),
50
+ ]);
51
+ console.log(formatTable(rows, ['Name', 'Version', 'Steps', 'Description']));
52
+ }
53
+ // List routes (merged: global + project)
54
+ console.log('\n## Routes\n');
55
+ const mergedConfig = mergeRoutes(absDir);
56
+ if (mergedConfig) {
57
+ console.log(` Default agent: ${mergedConfig.default_agent}`);
58
+ console.log(` Default workflow: ${mergedConfig.default_workflow ?? '(none)'}`);
59
+ console.log('');
60
+ if (mergedConfig.routes.length === 0) {
61
+ console.log(' (no routes defined)');
62
+ }
63
+ else {
64
+ const rows = mergedConfig.routes.map((r) => [
65
+ r.agent,
66
+ r.workflow,
67
+ JSON.stringify(r.match),
68
+ String(r.priority ?? '-'),
69
+ ]);
70
+ console.log(formatTable(rows, ['Agent', 'Workflow', 'Match', 'Priority']));
71
+ }
72
+ }
73
+ else {
74
+ // Fall back to project-only
75
+ const routesPath = join(flowDir, 'routes.json');
76
+ if (existsSync(routesPath)) {
77
+ try {
78
+ const config = loadJson(routesPath);
79
+ console.log(` Default agent: ${config.default_agent}`);
80
+ console.log(` Default workflow: ${config.default_workflow ?? '(none)'}`);
81
+ console.log('');
82
+ if (config.routes.length === 0) {
83
+ console.log(' (no routes defined)');
84
+ }
85
+ else {
86
+ const rows = config.routes.map((r) => [
87
+ r.agent,
88
+ r.workflow,
89
+ JSON.stringify(r.match),
90
+ String(r.priority ?? '-'),
91
+ ]);
92
+ console.log(formatTable(rows, ['Agent', 'Workflow', 'Match', 'Priority']));
93
+ }
94
+ }
95
+ catch (e) {
96
+ console.error(` Error loading routes: ${e.message}`);
97
+ }
98
+ }
99
+ else {
100
+ console.log(' (no routes.json)');
101
+ }
102
+ }
103
+ }
104
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function cmdPlan(args: string[]): void;