@icex-labs/icex-flow 0.3.0 → 0.4.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 +327 -52
- package/dist/src/cli.js +28 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/generate.d.ts +7 -1
- package/dist/src/commands/generate.js +16 -7
- package/dist/src/commands/generate.js.map +1 -1
- package/dist/src/commands/init.js +56 -14
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/learn.js +39 -9
- package/dist/src/commands/learn.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,91 +4,220 @@
|
|
|
4
4
|
|
|
5
5
|
> JSON decides. LLM executes. Every time, the same way.
|
|
6
6
|
|
|
7
|
+
[](https://www.npmjs.com/package/@icex-labs/icex-flow)
|
|
8
|
+
[](https://opensource.org/licenses/MIT)
|
|
9
|
+
|
|
7
10
|
## The Problem
|
|
8
11
|
|
|
9
|
-
AI agents (OpenClaw, Claude Code, etc.) make freestyle decisions about:
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
- What
|
|
13
|
-
-
|
|
12
|
+
AI agents (OpenClaw, Claude Code, Codex, etc.) make freestyle decisions about:
|
|
13
|
+
|
|
14
|
+
- **Which agent handles a task** — random routing, inconsistent delegation
|
|
15
|
+
- **What context to inject** — forgotten rules, missed project docs
|
|
16
|
+
- **What steps to follow** — different execution path every run
|
|
17
|
+
- **Whether to verify results** — agents lie about success
|
|
18
|
+
|
|
19
|
+
When your agent forgets to read the deployment rules and pushes untested code to production, that's not an AI problem — that's a **process problem**.
|
|
14
20
|
|
|
15
21
|
## The Solution
|
|
16
22
|
|
|
17
23
|
`icex-flow` replaces LLM judgment with structured JSON definitions:
|
|
18
24
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
```
|
|
26
|
+
Task arrives → routes.json picks the agent + workflow
|
|
27
|
+
→ context.manifest.json injects the right files
|
|
28
|
+
→ workflow.flow.json defines exact steps
|
|
29
|
+
→ Each step is verified before proceeding
|
|
30
|
+
```
|
|
25
31
|
|
|
26
32
|
The LLM still does the intelligent work (writing code, analyzing problems). It just doesn't decide the **process**.
|
|
27
33
|
|
|
34
|
+
| Component | What it controls | LLM freestyle? |
|
|
35
|
+
|-----------|-----------------|:-:|
|
|
36
|
+
| `routes.json` | Task → agent + workflow | No |
|
|
37
|
+
| `context.manifest.json` | Files injected per step | No |
|
|
38
|
+
| `*.flow.json` | Step sequence + verification | No |
|
|
39
|
+
| `knowledge.json` | Persistent project knowledge | No |
|
|
40
|
+
| `PROJECT.md` | Auto-generated project context | No |
|
|
41
|
+
|
|
28
42
|
## Install
|
|
29
43
|
|
|
30
44
|
```bash
|
|
31
|
-
npm install -g icex-flow
|
|
45
|
+
npm install -g @icex-labs/icex-flow
|
|
32
46
|
```
|
|
33
47
|
|
|
48
|
+
Requires Node.js >= 18.
|
|
49
|
+
|
|
34
50
|
## Quick Start
|
|
35
51
|
|
|
52
|
+
### 1. Initialize in your project
|
|
53
|
+
|
|
36
54
|
```bash
|
|
37
|
-
|
|
55
|
+
cd my-project
|
|
38
56
|
icex-flow init
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
You can also scan a remote directory without `cd`-ing into it:
|
|
39
60
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
vim .icex-flow/workflows/dev-chain.flow.json
|
|
61
|
+
```bash
|
|
62
|
+
# Scan a remote project, but write .icex-flow/ config to the current directory
|
|
63
|
+
icex-flow init --path /path/to/remote/project
|
|
44
64
|
|
|
45
|
-
#
|
|
46
|
-
icex-flow
|
|
65
|
+
# Same for generate — scan remotely, write locally
|
|
66
|
+
icex-flow generate --path /path/to/remote/project
|
|
67
|
+
```
|
|
47
68
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
69
|
+
`init` auto-detects your project:
|
|
70
|
+
|
|
71
|
+
- **Language** — Python, Node.js, Go, Java, Rust, etc.
|
|
72
|
+
- **Frameworks** — monorepo structure, microservices
|
|
73
|
+
- **CI/CD** — GitHub Actions, GitLab CI
|
|
74
|
+
- **Deployment** — Helm, Docker Compose, Kubernetes
|
|
75
|
+
- **Database** — Liquibase migrations, Prisma, etc.
|
|
76
|
+
- **Preset** — auto-selects from `microservice`, `monorepo`, `frontend`, `library`, `data-pipeline`, or `generic`
|
|
77
|
+
|
|
78
|
+
This generates a `.icex-flow/` directory with routes, context manifest, and workflow definitions — pre-configured for your stack.
|
|
79
|
+
|
|
80
|
+
### 2. Teach it what can't be auto-detected
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
icex-flow learn "production cluster is u9 at 192.168.1.200" --category environment
|
|
84
|
+
icex-flow learn "never push directly to main branch" --category safety
|
|
85
|
+
icex-flow learn "signal-runner feeds quant-bridge via Redis" --category architecture
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Knowledge is persisted in `.icex-flow/knowledge.json` — survives agent restarts, session resets, and redeployments.
|
|
89
|
+
|
|
90
|
+
### 3. Generate project context
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
icex-flow generate
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Produces `.icex-flow/context/L1-project/PROJECT.md` — a complete project knowledge document combining auto-detected facts + learned knowledge. Agents get this injected automatically so they never start from zero.
|
|
97
|
+
|
|
98
|
+
### 4. Use it
|
|
51
99
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
100
|
+
```bash
|
|
101
|
+
# Route a task to the right agent + workflow
|
|
102
|
+
icex-flow route "fix the login bug" --labels bug
|
|
103
|
+
# → { agent: "dev", workflow: "dev-chain", confidence: "keyword" }
|
|
55
104
|
|
|
56
|
-
# Assemble context for a step
|
|
105
|
+
# Assemble context for a specific step
|
|
57
106
|
icex-flow context dev-chain --step implement
|
|
58
|
-
# → Concatenated content of all required files
|
|
107
|
+
# → Concatenated content of all required files (rules, docs, API refs)
|
|
108
|
+
|
|
109
|
+
# Generate a deterministic execution plan
|
|
110
|
+
icex-flow plan dev-chain --input '{"issue_number":"42","branch_name":"fix/login","pr_title":"Fix login"}'
|
|
111
|
+
# → Step-by-step plan with resolved commands and verification checks
|
|
112
|
+
|
|
113
|
+
# Verify a step completed successfully
|
|
114
|
+
icex-flow verify --command "gh pr view 42 --json state -q '.state'" --expect "MERGED"
|
|
115
|
+
# → ✅ PASS or ❌ FAIL
|
|
59
116
|
```
|
|
60
117
|
|
|
61
118
|
## Commands
|
|
62
119
|
|
|
63
120
|
| Command | Description |
|
|
64
121
|
|---------|-------------|
|
|
65
|
-
| `icex-flow init [dir]` |
|
|
122
|
+
| `icex-flow init [--path <dir>]` | Auto-detect project + scaffold `.icex-flow/` |
|
|
66
123
|
| `icex-flow validate [dir]` | Validate all JSON definitions |
|
|
67
|
-
| `icex-flow route "<task>"` | Route task
|
|
124
|
+
| `icex-flow route "<task>"` | Route task → agent + workflow |
|
|
68
125
|
| `icex-flow plan <workflow>` | Generate deterministic execution plan |
|
|
69
126
|
| `icex-flow context [workflow]` | Assemble context from manifest |
|
|
70
127
|
| `icex-flow verify --command "..."` | Run step verification |
|
|
71
128
|
| `icex-flow list` | List workflows and routes |
|
|
129
|
+
| `icex-flow generate [--path <dir>]` | Auto-generate PROJECT.md from detection + knowledge |
|
|
130
|
+
| `icex-flow learn "<fact>"` | Add persistent knowledge |
|
|
131
|
+
| `icex-flow learn --project <name>` | Associate knowledge with a registered project |
|
|
132
|
+
| `icex-flow learn --list` | List all learned knowledge |
|
|
133
|
+
| `icex-flow learn --remove <id>` | Remove a knowledge entry |
|
|
134
|
+
| `icex-flow projects [list\|add\|remove]` | Manage project registry |
|
|
135
|
+
|
|
136
|
+
## Directory Structure
|
|
137
|
+
|
|
138
|
+
After `icex-flow init`, your project gets:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
.icex-flow/
|
|
142
|
+
├── routes.json # Task routing rules
|
|
143
|
+
├── context.manifest.json # What files to inject, per workflow/step
|
|
144
|
+
├── knowledge.json # Persistent learned knowledge
|
|
145
|
+
├── context/
|
|
146
|
+
│ ├── L0-global/ # Always injected (all workflows)
|
|
147
|
+
│ │ ├── workflow-rules.md # Dev process rules
|
|
148
|
+
│ │ └── soul.md # Agent identity
|
|
149
|
+
│ ├── L1-project/ # Injected for project-specific workflows
|
|
150
|
+
│ │ └── PROJECT.md # Auto-generated project overview
|
|
151
|
+
│ └── L2-reference/ # Injected on-demand per step
|
|
152
|
+
│ └── api-docs.md # API reference, etc.
|
|
153
|
+
└── workflows/
|
|
154
|
+
├── dev-chain.flow.json # Development pipeline
|
|
155
|
+
├── deploy.flow.json # Deployment pipeline
|
|
156
|
+
└── db-migration.flow.json # Database change pipeline
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Context Layers
|
|
160
|
+
|
|
161
|
+
| Layer | Purpose | When injected |
|
|
162
|
+
|-------|---------|---------------|
|
|
163
|
+
| **L0-global** | Universal rules (coding standards, safety, identity) | Every workflow, every step |
|
|
164
|
+
| **L1-project** | Project architecture, environments, services | Per-workflow |
|
|
165
|
+
| **L2-reference** | API docs, tool guides, detailed specs | Per-step (to save tokens) |
|
|
166
|
+
|
|
167
|
+
Files in these directories can be actual files or symlinks to files elsewhere in your project.
|
|
168
|
+
|
|
169
|
+
## Routing
|
|
170
|
+
|
|
171
|
+
`routes.json` maps tasks to agents and workflows using labels and keywords:
|
|
172
|
+
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"version": "1.0.0",
|
|
176
|
+
"default_agent": "main",
|
|
177
|
+
"default_workflow": "default",
|
|
178
|
+
"routes": [
|
|
179
|
+
{
|
|
180
|
+
"match": { "labels": ["auto-ok"] },
|
|
181
|
+
"workflow": "dev-chain",
|
|
182
|
+
"agent": "dev",
|
|
183
|
+
"priority": 10
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"match": { "keywords": ["deploy", "rollout", "k3d"] },
|
|
187
|
+
"workflow": "deploy",
|
|
188
|
+
"agent": "ops",
|
|
189
|
+
"priority": 5
|
|
190
|
+
}
|
|
191
|
+
]
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Priority** — higher number wins when multiple routes match.
|
|
72
196
|
|
|
73
|
-
|
|
197
|
+
**Matching** — `labels` requires exact match; `keywords` matches against the task description (case-insensitive substring).
|
|
74
198
|
|
|
75
|
-
|
|
199
|
+
**Fallback** — if no route matches, uses `default_agent` + `default_workflow`.
|
|
200
|
+
|
|
201
|
+
## Workflows
|
|
202
|
+
|
|
203
|
+
A workflow defines a deterministic sequence of steps:
|
|
76
204
|
|
|
77
205
|
```json
|
|
78
206
|
{
|
|
79
207
|
"name": "dev-chain",
|
|
80
208
|
"version": "1.0.0",
|
|
81
|
-
"description": "Issue → Code → Test → PR → Merge",
|
|
209
|
+
"description": "Issue → Code → Test → PR → Merge → Deploy → Notify",
|
|
82
210
|
"inputs": {
|
|
83
211
|
"issue_number": { "type": "string", "required": true },
|
|
84
|
-
"branch_name": { "type": "string", "required": true }
|
|
212
|
+
"branch_name": { "type": "string", "required": true },
|
|
213
|
+
"repo": { "type": "string", "default": "my-org/my-repo" }
|
|
85
214
|
},
|
|
86
215
|
"steps": [
|
|
87
216
|
{
|
|
88
217
|
"id": "create-branch",
|
|
89
218
|
"name": "Create Feature Branch",
|
|
90
219
|
"action": "shell",
|
|
91
|
-
"command": "git checkout -b {{branch_name}}",
|
|
220
|
+
"command": "git checkout -b {{branch_name}} && git push -u origin {{branch_name}}",
|
|
92
221
|
"verify": {
|
|
93
222
|
"command": "git branch --show-current",
|
|
94
223
|
"expect": "{{branch_name}}"
|
|
@@ -100,22 +229,55 @@ A workflow is a JSON file defining a deterministic sequence of steps:
|
|
|
100
229
|
"action": "agent",
|
|
101
230
|
"agent": "dev-coder",
|
|
102
231
|
"timeout": 600,
|
|
103
|
-
"input": "Implement issue #{{issue_number}}",
|
|
232
|
+
"input": "Implement issue #{{issue_number}} on branch {{branch_name}}. Run tests.",
|
|
104
233
|
"verify": {
|
|
105
234
|
"command": "pytest tests/ -v",
|
|
106
235
|
"expect_exit": 0
|
|
107
236
|
}
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"id": "wait-ci",
|
|
240
|
+
"name": "Wait for CI",
|
|
241
|
+
"action": "gate",
|
|
242
|
+
"verify": {
|
|
243
|
+
"command": "gh pr checks {{branch_name}} --json state -q '.[].state' | sort -u",
|
|
244
|
+
"expect": "SUCCESS",
|
|
245
|
+
"retry": 12,
|
|
246
|
+
"retry_delay": 30
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"id": "notify",
|
|
251
|
+
"name": "Notify Completion",
|
|
252
|
+
"action": "notify",
|
|
253
|
+
"channels": ["telegram:notify"],
|
|
254
|
+
"message": "✅ PR merged for issue #{{issue_number}}"
|
|
108
255
|
}
|
|
109
|
-
]
|
|
256
|
+
],
|
|
257
|
+
"on_failure": {
|
|
258
|
+
"action": "notify",
|
|
259
|
+
"channels": ["telegram:notify"],
|
|
260
|
+
"message": "❌ Failed at step '{{failed_step}}' for issue #{{issue_number}}: {{error}}"
|
|
261
|
+
}
|
|
110
262
|
}
|
|
111
263
|
```
|
|
112
264
|
|
|
113
265
|
### Step Types
|
|
114
266
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
267
|
+
| Action | Purpose | Required Fields |
|
|
268
|
+
|--------|---------|-----------------|
|
|
269
|
+
| `shell` | Run a shell command | `command` |
|
|
270
|
+
| `agent` | Spawn a subagent | `agent`, `input`, `timeout` |
|
|
271
|
+
| `notify` | Send notifications | `channels`, `message` |
|
|
272
|
+
| `gate` | Wait for a condition with retries | `verify` (with `retry` + `retry_delay`) |
|
|
273
|
+
|
|
274
|
+
### Variables
|
|
275
|
+
|
|
276
|
+
Use `{{variable_name}}` in any string field. Variables come from:
|
|
277
|
+
|
|
278
|
+
1. **Workflow inputs** — defined in the `inputs` section
|
|
279
|
+
2. **`--input` flag** — JSON passed to `icex-flow plan`
|
|
280
|
+
3. **Step capture** — `"capture": "pr_url"` saves a step's stdout as a variable for later steps
|
|
119
281
|
|
|
120
282
|
### Verification
|
|
121
283
|
|
|
@@ -124,35 +286,148 @@ Every step can have a `verify` block:
|
|
|
124
286
|
```json
|
|
125
287
|
{
|
|
126
288
|
"verify": {
|
|
127
|
-
"command": "gh pr
|
|
128
|
-
"expect": "
|
|
129
|
-
"retry":
|
|
130
|
-
"retry_delay":
|
|
289
|
+
"command": "gh pr view 42 --json state -q '.state'",
|
|
290
|
+
"expect": "MERGED",
|
|
291
|
+
"retry": 5,
|
|
292
|
+
"retry_delay": 10
|
|
131
293
|
}
|
|
132
294
|
}
|
|
133
295
|
```
|
|
134
296
|
|
|
135
|
-
|
|
297
|
+
- `expect` — output must contain this string
|
|
298
|
+
- `expect_exit` — command must exit with this code
|
|
299
|
+
- `retry` / `retry_delay` — retry N times with delay (seconds) between attempts
|
|
300
|
+
- If verification fails after all retries → workflow stops, `on_failure` fires
|
|
301
|
+
|
|
302
|
+
## Knowledge System
|
|
303
|
+
|
|
304
|
+
Agents lose context on restart. `icex-flow learn` gives them persistent memory:
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
# Add knowledge with categories
|
|
308
|
+
icex-flow learn "k3d is dev environment, U9 is production" --category environment
|
|
309
|
+
icex-flow learn "quant-bridge connects IBKR TWS via socat relay" --category architecture
|
|
310
|
+
icex-flow learn "never kubectl apply on production without approval" --category safety
|
|
311
|
+
|
|
312
|
+
# List what the project knows
|
|
313
|
+
icex-flow learn --list
|
|
314
|
+
|
|
315
|
+
# Remove outdated knowledge
|
|
316
|
+
icex-flow learn --remove <id>
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Categories
|
|
320
|
+
|
|
321
|
+
| Category | Purpose |
|
|
322
|
+
|----------|---------|
|
|
323
|
+
| `environment` | Clusters, servers, IPs, namespaces |
|
|
324
|
+
| `architecture` | Services, data flow, dependencies |
|
|
325
|
+
| `safety` | Rules, constraints, things to never do |
|
|
326
|
+
| `workflow` | Process overrides, special handling |
|
|
327
|
+
| `custom` | Anything else |
|
|
328
|
+
|
|
329
|
+
Knowledge is stored in `.icex-flow/knowledge.json` and merged into `PROJECT.md` when you run `icex-flow generate`.
|
|
330
|
+
|
|
331
|
+
## Project Registry
|
|
332
|
+
|
|
333
|
+
When you `init` a project, it's registered in `~/.icex-flow/projects.json`. This lets agents find all configured projects:
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
icex-flow projects list # Show all registered projects
|
|
337
|
+
icex-flow projects add /path # Register a project manually
|
|
338
|
+
icex-flow projects remove /path # Unregister a project
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
## Platform Integration
|
|
342
|
+
|
|
343
|
+
### OpenClaw
|
|
136
344
|
|
|
137
|
-
|
|
345
|
+
icex-flow ships with a `SKILL.md` — drop it into your skills directory:
|
|
138
346
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
347
|
+
```bash
|
|
348
|
+
# Option 1: Symlink to installed package
|
|
349
|
+
ln -s $(npm root -g)/@icex-labs/icex-flow ~/.openclaw/workspace/skills/icex-flow
|
|
350
|
+
|
|
351
|
+
# Option 2: Copy SKILL.md only
|
|
352
|
+
cp $(npm root -g)/@icex-labs/icex-flow/SKILL.md ~/.openclaw/workspace/skills/icex-flow/
|
|
353
|
+
```
|
|
143
354
|
|
|
144
|
-
|
|
355
|
+
The skill teaches agents to use `icex-flow route → context → plan → verify` instead of freestyle execution. OpenClaw adapter is included at `src/adapters/openclaw.ts`.
|
|
356
|
+
|
|
357
|
+
### Claude Code
|
|
358
|
+
|
|
359
|
+
Use the programmatic API in your CLAUDE.md or custom tools:
|
|
145
360
|
|
|
146
361
|
```typescript
|
|
147
|
-
import { routeTask, planWorkflow, assembleContext, verifyStep } from 'icex-flow';
|
|
362
|
+
import { routeTask, planWorkflow, assembleContext, verifyStep } from '@icex-labs/icex-flow';
|
|
148
363
|
|
|
364
|
+
// Route
|
|
149
365
|
const result = routeTask(routesConfig, { description: "fix login bug", labels: ["bug"] });
|
|
150
366
|
// → { agent: "dev", workflow: "dev-chain", confidence: "keyword" }
|
|
151
367
|
|
|
368
|
+
// Plan
|
|
152
369
|
const plan = planWorkflow(workflowDef, { issue_number: "42", branch_name: "fix/login" });
|
|
153
370
|
// → { steps: [...], variables: {...} }
|
|
154
371
|
```
|
|
155
372
|
|
|
373
|
+
Or use the CLI in your CLAUDE.md instructions:
|
|
374
|
+
|
|
375
|
+
```markdown
|
|
376
|
+
## Task Execution
|
|
377
|
+
Before starting any task, run `icex-flow route "<task>"` to determine the correct workflow.
|
|
378
|
+
Follow the plan from `icex-flow plan <workflow>` exactly — do not skip steps.
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
## Example: Full Dev Pipeline
|
|
382
|
+
|
|
383
|
+
Here's what happens when an agent receives "fix issue #42":
|
|
384
|
+
|
|
385
|
+
```
|
|
386
|
+
1. icex-flow route "fix issue #42" --labels auto-ok
|
|
387
|
+
→ agent: dev, workflow: dev-chain
|
|
388
|
+
|
|
389
|
+
2. icex-flow context dev-chain --step implement
|
|
390
|
+
→ Injects: workflow rules + project architecture + API docs
|
|
391
|
+
|
|
392
|
+
3. icex-flow plan dev-chain --input '{"issue_number":"42","branch_name":"fix/42-login-bug"}'
|
|
393
|
+
→ 7-step plan:
|
|
394
|
+
Step 1: Lock issue (add in-progress label)
|
|
395
|
+
Step 2: Create branch (git checkout -b)
|
|
396
|
+
Step 3: Implement (spawn dev-coder agent, 600s timeout)
|
|
397
|
+
Step 4: Create PR (gh pr create)
|
|
398
|
+
Step 5: Wait CI (gate with 12 retries × 30s)
|
|
399
|
+
Step 6: Merge PR (squash merge)
|
|
400
|
+
Step 7: Notify (Telegram message)
|
|
401
|
+
|
|
402
|
+
4. Agent executes each step, running icex-flow verify after each one.
|
|
403
|
+
If any step fails → on_failure notification fires, workflow stops.
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
**Same input, same output. Every time.**
|
|
407
|
+
|
|
408
|
+
## Why Not Just Prompt Better?
|
|
409
|
+
|
|
410
|
+
Prompting works for simple tasks. For multi-step pipelines, it breaks down:
|
|
411
|
+
|
|
412
|
+
| Approach | Works for | Fails at |
|
|
413
|
+
|----------|-----------|----------|
|
|
414
|
+
| Detailed prompts | Simple tasks | Agent still forgets steps under load |
|
|
415
|
+
| System instructions | Setting tone/rules | Can't enforce step ordering |
|
|
416
|
+
| CLAUDE.md / AGENTS.md | Conventions | Agent reads selectively |
|
|
417
|
+
| **icex-flow** | **Multi-step pipelines** | — |
|
|
418
|
+
|
|
419
|
+
icex-flow doesn't replace prompting — it handles the structural parts (routing, ordering, verification) so the LLM can focus on the creative parts (writing code, solving problems).
|
|
420
|
+
|
|
421
|
+
## Contributing
|
|
422
|
+
|
|
423
|
+
```bash
|
|
424
|
+
git clone https://github.com/icex-labs/icex-flow.git
|
|
425
|
+
cd icex-flow
|
|
426
|
+
npm install
|
|
427
|
+
npm run build
|
|
428
|
+
npm link # for local testing
|
|
429
|
+
```
|
|
430
|
+
|
|
156
431
|
## License
|
|
157
432
|
|
|
158
433
|
MIT — [icex-labs](https://github.com/icex-labs)
|
package/dist/src/cli.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join, dirname } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
1
4
|
import { cmdInit } from './commands/init.js';
|
|
2
5
|
import { cmdValidate } from './commands/validate.js';
|
|
3
6
|
import { cmdRoute } from './commands/route.js';
|
|
@@ -8,18 +11,38 @@ import { cmdVerify } from './commands/verify.js';
|
|
|
8
11
|
import { cmdProjects } from './commands/projects.js';
|
|
9
12
|
import { cmdGenerate } from './commands/generate.js';
|
|
10
13
|
import { cmdLearn } from './commands/learn.js';
|
|
11
|
-
|
|
14
|
+
function getVersion() {
|
|
15
|
+
try {
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const __dirname = dirname(__filename);
|
|
18
|
+
// Walk up from dist/src/ or src/ to find package.json
|
|
19
|
+
let dir = __dirname;
|
|
20
|
+
for (let i = 0; i < 5; i++) {
|
|
21
|
+
try {
|
|
22
|
+
const pkg = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf-8'));
|
|
23
|
+
if (pkg.name === '@icex-labs/icex-flow')
|
|
24
|
+
return pkg.version;
|
|
25
|
+
}
|
|
26
|
+
catch { /* continue */ }
|
|
27
|
+
dir = dirname(dir);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch { /* fallback */ }
|
|
31
|
+
return '0.0.0';
|
|
32
|
+
}
|
|
33
|
+
const VERSION = getVersion();
|
|
12
34
|
const HELP = `
|
|
13
35
|
icex-flow v${VERSION} — Deterministic agent workflow orchestration
|
|
14
36
|
|
|
15
37
|
Usage: icex-flow <command> [options]
|
|
16
38
|
|
|
17
39
|
Commands:
|
|
18
|
-
init [dir] [--force]
|
|
19
|
-
generate [--dir
|
|
40
|
+
init [--path <dir>] [--force] Initialize .icex-flow/ (--force re-scans only, --reset overwrites all)
|
|
41
|
+
generate [--path <dir>] Auto-generate PROJECT.md from scanned project
|
|
20
42
|
learn "<knowledge>" Store project knowledge (env, safety, arch)
|
|
21
43
|
learn --list List all stored knowledge
|
|
22
44
|
learn --remove <id> Remove a knowledge entry
|
|
45
|
+
learn --project <name> Associate knowledge with a specific project
|
|
23
46
|
validate [dir] [--global] Validate all workflow definitions
|
|
24
47
|
route "<description>" [--labels] Route a task to agent + workflow
|
|
25
48
|
context [workflow] [--step] Assemble context from manifest
|
|
@@ -29,6 +52,7 @@ Commands:
|
|
|
29
52
|
projects [list|add|remove] Manage registered projects
|
|
30
53
|
|
|
31
54
|
Options:
|
|
55
|
+
--path <dir> Scan a remote directory (init/generate: detect from there, write config locally)
|
|
32
56
|
--dir <path> Working directory (default: .)
|
|
33
57
|
--json Output as JSON
|
|
34
58
|
--help, -h Show help
|
|
@@ -42,6 +66,7 @@ Global Config: ~/.icex-flow/
|
|
|
42
66
|
|
|
43
67
|
Examples:
|
|
44
68
|
icex-flow init
|
|
69
|
+
icex-flow init --path /path/to/remote/project
|
|
45
70
|
icex-flow init --force
|
|
46
71
|
icex-flow route "fix login bug" --labels bug
|
|
47
72
|
icex-flow plan dev-chain --input '{"issue_number":"42","branch_name":"fix/login"}'
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,OAAO,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @param dir - The directory where .icex-flow/ config lives (output target)
|
|
3
|
+
* @param scanPath - Optional remote directory to scan for project detection.
|
|
4
|
+
* When provided, detection/discovery reads from scanPath
|
|
5
|
+
* but output is written to dir's .icex-flow/.
|
|
6
|
+
*/
|
|
7
|
+
export declare function runGenerate(dir: string, scanPath?: string): void;
|
|
2
8
|
export declare function cmdGenerate(args: string[]): void;
|
|
@@ -186,19 +186,27 @@ function generateProjectMd(dir, detected, environments, services, dataFlow, know
|
|
|
186
186
|
return lines.join('\n');
|
|
187
187
|
}
|
|
188
188
|
// ── Command ──────────────────────────────────────────────────────────
|
|
189
|
-
|
|
189
|
+
/**
|
|
190
|
+
* @param dir - The directory where .icex-flow/ config lives (output target)
|
|
191
|
+
* @param scanPath - Optional remote directory to scan for project detection.
|
|
192
|
+
* When provided, detection/discovery reads from scanPath
|
|
193
|
+
* but output is written to dir's .icex-flow/.
|
|
194
|
+
*/
|
|
195
|
+
export function runGenerate(dir, scanPath) {
|
|
190
196
|
const absDir = resolve(dir);
|
|
191
197
|
const flowDir = join(absDir, '.icex-flow');
|
|
198
|
+
// scanDir is where we read project files; absDir is where we write config
|
|
199
|
+
const scanDir = scanPath ? resolve(scanPath) : absDir;
|
|
192
200
|
// 1. Detect project
|
|
193
|
-
console.log(
|
|
194
|
-
const detected = detectProject(
|
|
201
|
+
console.log(`Detecting project${scanPath ? ` from ${scanDir}` : ''}...`);
|
|
202
|
+
const detected = detectProject(scanDir);
|
|
195
203
|
// 2. Discover environments
|
|
196
204
|
console.log('Discovering environments...');
|
|
197
|
-
const envResult = discoverEnvironments(
|
|
205
|
+
const envResult = discoverEnvironments(scanDir);
|
|
198
206
|
// 3. Extract architecture
|
|
199
207
|
console.log('Extracting architecture...');
|
|
200
|
-
const archResult = extractArchitecture(
|
|
201
|
-
// 4. Load knowledge
|
|
208
|
+
const archResult = extractArchitecture(scanDir);
|
|
209
|
+
// 4. Load knowledge (from config dir, not scan dir)
|
|
202
210
|
const knowledge = loadKnowledge(absDir);
|
|
203
211
|
// 5. Generate PROJECT.md
|
|
204
212
|
console.log('Generating PROJECT.md...');
|
|
@@ -221,10 +229,11 @@ export function runGenerate(dir) {
|
|
|
221
229
|
export function cmdGenerate(args) {
|
|
222
230
|
const { flags } = parseFlags(args);
|
|
223
231
|
const dir = flags['dir'] ?? '.';
|
|
232
|
+
const scanPath = flags['path'] ?? undefined;
|
|
224
233
|
if (!existsSync(join(resolve(dir), '.icex-flow'))) {
|
|
225
234
|
console.error('Not an icex-flow project. Run "icex-flow init" first.');
|
|
226
235
|
process.exit(1);
|
|
227
236
|
}
|
|
228
|
-
runGenerate(dir);
|
|
237
|
+
runGenerate(dir, scanPath);
|
|
229
238
|
}
|
|
230
239
|
//# sourceMappingURL=generate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,20 +7,36 @@ import { ensureGlobalDir, registerProject } from '../engine/config.js';
|
|
|
7
7
|
import { runGenerate } from './generate.js';
|
|
8
8
|
export function cmdInit(args) {
|
|
9
9
|
const { positional, flags } = parseFlags(args);
|
|
10
|
+
// --path specifies a remote scan directory; config is written to cwd (or positional dir)
|
|
11
|
+
const scanDir = flags['path'] ? resolve(flags['path']) : null;
|
|
10
12
|
const targetDir = positional[0] ?? '.';
|
|
11
13
|
const absDir = resolve(targetDir);
|
|
12
14
|
const flowDir = join(absDir, '.icex-flow');
|
|
13
15
|
const force = flags['force'] === 'true';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
const reset = flags['reset'] === 'true';
|
|
17
|
+
// The directory we scan for project detection (remote or local)
|
|
18
|
+
const projectDir = scanDir ?? absDir;
|
|
19
|
+
const alreadyExists = existsSync(flowDir);
|
|
20
|
+
// If config exists and neither --force nor --reset, tell the user and exit
|
|
21
|
+
if (alreadyExists && !force && !reset) {
|
|
22
|
+
console.log(`Config already exists: ${flowDir}`);
|
|
23
|
+
console.log('');
|
|
24
|
+
console.log('Options:');
|
|
25
|
+
console.log(' icex-flow init --force Re-scan the project (updates detected.json only, preserves customizations)');
|
|
26
|
+
console.log(' icex-flow init --reset Start fresh (overwrites all config files with templates)');
|
|
17
27
|
process.exit(1);
|
|
18
28
|
}
|
|
19
29
|
// 1. Ensure global config directory exists
|
|
20
30
|
ensureGlobalDir();
|
|
21
31
|
// 2. Auto-detect project characteristics
|
|
22
|
-
|
|
23
|
-
|
|
32
|
+
if (scanDir) {
|
|
33
|
+
console.log(`Scanning remote path: ${projectDir}`);
|
|
34
|
+
console.log(`Config will be written to: ${flowDir}`);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.log(`Scanning ${absDir} ...`);
|
|
38
|
+
}
|
|
39
|
+
const detected = detectProject(projectDir);
|
|
24
40
|
console.log('');
|
|
25
41
|
console.log(` Project: ${detected.name}`);
|
|
26
42
|
console.log(` Preset: ${detected.preset}`);
|
|
@@ -50,24 +66,50 @@ export function cmdInit(args) {
|
|
|
50
66
|
console.log(` Features: ${detected.detected_features.join(', ')}`);
|
|
51
67
|
}
|
|
52
68
|
console.log('');
|
|
53
|
-
//
|
|
69
|
+
// --force with existing config: only update detected.json (re-scan), preserve user files
|
|
70
|
+
if (force && alreadyExists) {
|
|
71
|
+
// Ensure directory structure exists (in case user deleted subdirs)
|
|
72
|
+
mkdirSync(join(flowDir, 'workflows'), { recursive: true });
|
|
73
|
+
mkdirSync(join(flowDir, 'context', 'L1-project'), { recursive: true });
|
|
74
|
+
mkdirSync(join(flowDir, 'context', 'L2-reference'), { recursive: true });
|
|
75
|
+
// Only update detected.json
|
|
76
|
+
writeFileSync(join(flowDir, 'detected.json'), JSON.stringify(detected, null, 2), 'utf-8');
|
|
77
|
+
// Update project registry
|
|
78
|
+
registerProject({
|
|
79
|
+
path: absDir,
|
|
80
|
+
name: detected.name,
|
|
81
|
+
preset: detected.preset,
|
|
82
|
+
registered_at: new Date().toISOString(),
|
|
83
|
+
repo_url: detected.repo_url,
|
|
84
|
+
});
|
|
85
|
+
console.log(`Re-scanned project and updated ${join(flowDir, 'detected.json')}`);
|
|
86
|
+
console.log('');
|
|
87
|
+
console.log('Preserved (not overwritten):');
|
|
88
|
+
console.log(' .icex-flow/routes.json');
|
|
89
|
+
console.log(' .icex-flow/context.manifest.json');
|
|
90
|
+
console.log(' .icex-flow/workflows/');
|
|
91
|
+
console.log('');
|
|
92
|
+
console.log('Use --reset instead of --force to overwrite all config files.');
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Fresh init or --reset: generate everything from templates
|
|
54
96
|
const preset = generatePreset(detected);
|
|
55
|
-
//
|
|
97
|
+
// Create directory structure
|
|
56
98
|
mkdirSync(join(flowDir, 'workflows'), { recursive: true });
|
|
57
99
|
mkdirSync(join(flowDir, 'context', 'L1-project'), { recursive: true });
|
|
58
100
|
mkdirSync(join(flowDir, 'context', 'L2-reference'), { recursive: true });
|
|
59
|
-
//
|
|
101
|
+
// Write routes.json
|
|
60
102
|
writeFileSync(join(flowDir, 'routes.json'), JSON.stringify(preset.routes, null, 2), 'utf-8');
|
|
61
|
-
//
|
|
103
|
+
// Write context.manifest.json
|
|
62
104
|
writeFileSync(join(flowDir, 'context.manifest.json'), JSON.stringify(preset.context_manifest, null, 2), 'utf-8');
|
|
63
|
-
//
|
|
105
|
+
// Write workflow files
|
|
64
106
|
for (const wf of preset.workflows) {
|
|
65
107
|
const filename = `${wf.name}.flow.json`;
|
|
66
108
|
writeFileSync(join(flowDir, 'workflows', filename), JSON.stringify(wf, null, 2), 'utf-8');
|
|
67
109
|
}
|
|
68
|
-
//
|
|
110
|
+
// Write detection summary
|
|
69
111
|
writeFileSync(join(flowDir, 'detected.json'), JSON.stringify(detected, null, 2), 'utf-8');
|
|
70
|
-
//
|
|
112
|
+
// Register project in global registry
|
|
71
113
|
registerProject({
|
|
72
114
|
path: absDir,
|
|
73
115
|
name: detected.name,
|
|
@@ -90,9 +132,9 @@ export function cmdInit(args) {
|
|
|
90
132
|
console.log(`Preset: ${detected.preset}`);
|
|
91
133
|
console.log(`Registered in ~/.icex-flow/projects.json`);
|
|
92
134
|
console.log('');
|
|
93
|
-
//
|
|
135
|
+
// Auto-generate PROJECT.md (scan remote dir if provided, write to local config)
|
|
94
136
|
console.log('');
|
|
95
|
-
runGenerate(absDir);
|
|
137
|
+
runGenerate(absDir, scanDir ?? undefined);
|
|
96
138
|
console.log('');
|
|
97
139
|
console.log('Next steps:');
|
|
98
140
|
console.log(' 1. Review and customize .icex-flow/routes.json');
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,16 +47,45 @@ function categorize(text) {
|
|
|
47
47
|
export function cmdLearn(args) {
|
|
48
48
|
const { positional, flags } = parseFlags(args);
|
|
49
49
|
const dir = resolve(flags['dir'] ?? '.');
|
|
50
|
+
const projectName = flags['project'] ?? undefined;
|
|
51
|
+
// Resolve target directory: if --project is given, look it up in the registry
|
|
52
|
+
let targetDir = dir;
|
|
53
|
+
if (projectName) {
|
|
54
|
+
const registryPath = join(process.env['HOME'] ?? process.env['USERPROFILE'] ?? '~', '.icex-flow', 'projects.json');
|
|
55
|
+
if (existsSync(registryPath)) {
|
|
56
|
+
try {
|
|
57
|
+
const registry = JSON.parse(readFileSync(registryPath, 'utf-8'));
|
|
58
|
+
const projects = registry.projects ?? [];
|
|
59
|
+
const match = projects.find((p) => p.name === projectName);
|
|
60
|
+
if (match) {
|
|
61
|
+
targetDir = match.path;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.error(`Project not found in registry: ${projectName}`);
|
|
65
|
+
console.error('Use "icex-flow projects list" to see registered projects.');
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
console.error('Failed to read project registry.');
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.error('No project registry found. Run "icex-flow init" in a project first.');
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
50
79
|
// --list: show all knowledge
|
|
51
80
|
if (flags['list'] === 'true') {
|
|
52
|
-
const store = loadKnowledge(
|
|
81
|
+
const store = loadKnowledge(targetDir);
|
|
53
82
|
if (store.entries.length === 0) {
|
|
54
83
|
console.log('No knowledge stored yet.');
|
|
55
84
|
console.log('');
|
|
56
85
|
console.log('Add knowledge with: icex-flow learn "some fact about the project"');
|
|
57
86
|
return;
|
|
58
87
|
}
|
|
59
|
-
console.log(`Knowledge entries (${store.entries.length}):`);
|
|
88
|
+
console.log(`Knowledge entries (${store.entries.length})${projectName ? ` for project "${projectName}"` : ''}:`);
|
|
60
89
|
console.log('');
|
|
61
90
|
for (const entry of store.entries) {
|
|
62
91
|
console.log(` [${entry.category}] ${entry.text}`);
|
|
@@ -67,7 +96,7 @@ export function cmdLearn(args) {
|
|
|
67
96
|
}
|
|
68
97
|
// --remove <id>: remove a knowledge entry
|
|
69
98
|
if (flags['remove']) {
|
|
70
|
-
const store = loadKnowledge(
|
|
99
|
+
const store = loadKnowledge(targetDir);
|
|
71
100
|
const id = flags['remove'];
|
|
72
101
|
const before = store.entries.length;
|
|
73
102
|
store.entries = store.entries.filter(e => e.id !== id);
|
|
@@ -75,7 +104,7 @@ export function cmdLearn(args) {
|
|
|
75
104
|
console.error(`Knowledge entry not found: ${id}`);
|
|
76
105
|
process.exit(1);
|
|
77
106
|
}
|
|
78
|
-
saveKnowledge(
|
|
107
|
+
saveKnowledge(targetDir, store);
|
|
79
108
|
console.log(`Removed knowledge entry: ${id}`);
|
|
80
109
|
return;
|
|
81
110
|
}
|
|
@@ -85,11 +114,12 @@ export function cmdLearn(args) {
|
|
|
85
114
|
console.error('Usage: icex-flow learn "<knowledge>"');
|
|
86
115
|
console.error(' icex-flow learn --list');
|
|
87
116
|
console.error(' icex-flow learn --remove <id>');
|
|
117
|
+
console.error(' icex-flow learn --project <name> "<knowledge>"');
|
|
88
118
|
process.exit(1);
|
|
89
119
|
}
|
|
90
120
|
// Check that .icex-flow exists
|
|
91
|
-
if (!existsSync(join(
|
|
92
|
-
console.error(
|
|
121
|
+
if (!existsSync(join(targetDir, '.icex-flow'))) {
|
|
122
|
+
console.error(`Not an icex-flow project${projectName ? ` (${targetDir})` : ''}. Run "icex-flow init" first.`);
|
|
93
123
|
process.exit(1);
|
|
94
124
|
}
|
|
95
125
|
const category = categorize(text);
|
|
@@ -99,10 +129,10 @@ export function cmdLearn(args) {
|
|
|
99
129
|
category,
|
|
100
130
|
created_at: new Date().toISOString(),
|
|
101
131
|
};
|
|
102
|
-
const store = loadKnowledge(
|
|
132
|
+
const store = loadKnowledge(targetDir);
|
|
103
133
|
store.entries.push(entry);
|
|
104
|
-
saveKnowledge(
|
|
105
|
-
console.log(`Learned [${category}]: ${text}`);
|
|
134
|
+
saveKnowledge(targetDir, store);
|
|
135
|
+
console.log(`Learned [${category}]: ${text}${projectName ? ` (project: ${projectName})` : ''}`);
|
|
106
136
|
console.log(` id: ${entry.id}`);
|
|
107
137
|
}
|
|
108
138
|
//# sourceMappingURL=learn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learn.js","sourceRoot":"","sources":["../../../src/commands/learn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAkBzC,wEAAwE;AAExE,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,KAAqB;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACxC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEjC,kBAAkB;IAClB,IAAI,+GAA+G,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChI,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,uBAAuB;IACvB,IAAI,6JAA6J,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9K,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,wBAAwB;IACxB,IAAI,mGAAmG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpH,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,oBAAoB;IACpB,IAAI,6FAA6F,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9G,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,wEAAwE;AAExE,MAAM,UAAU,QAAQ,CAAC,IAAc;IACrC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"learn.js","sourceRoot":"","sources":["../../../src/commands/learn.ts"],"names":[],"mappings":"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"}
|