@vpxa/aikit 0.1.53 → 0.1.55
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/package.json +2 -1
- package/packages/cli/dist/commands/init/templates.js +5 -1
- package/packages/dashboard/dist/assets/{index-L06q8M9R.js → index-Cdke3KDK.js} +3 -3
- package/packages/dashboard/dist/assets/{index-L06q8M9R.js.map → index-Cdke3KDK.js.map} +1 -1
- package/packages/dashboard/dist/index.html +1 -1
- package/packages/present/dist/index.html +256 -256
- package/packages/server/dist/tools/graph.tool.js +20 -1
- package/packages/server/dist/tools/status.tool.js +1 -1
- package/scaffold/adapters/copilot.mjs +2 -1
- package/scaffold/definitions/agents.mjs +40 -0
- package/scaffold/definitions/bodies.mjs +72 -4
- package/scaffold/definitions/protocols.mjs +77 -0
- package/scaffold/general/agents/Architect-Reviewer-Alpha.agent.md +44 -0
- package/scaffold/general/agents/Architect-Reviewer-Beta.agent.md +44 -0
- package/scaffold/general/agents/Code-Reviewer-Alpha.agent.md +23 -0
- package/scaffold/general/agents/Code-Reviewer-Beta.agent.md +23 -0
- package/scaffold/general/agents/Frontend.agent.md +31 -0
- package/scaffold/general/agents/Implementer.agent.md +14 -0
- package/scaffold/general/agents/Orchestrator.agent.md +4 -2
- package/scaffold/general/agents/Refactor.agent.md +21 -0
- package/scaffold/general/agents/Researcher-Alpha.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Beta.agent.md +21 -0
- package/scaffold/general/agents/Researcher-Delta.agent.md +22 -0
- package/scaffold/general/agents/Researcher-Gamma.agent.md +21 -0
- package/scaffold/general/agents/_shared/architect-reviewer-base.md +44 -0
- package/scaffold/general/agents/_shared/code-reviewer-base.md +23 -0
- package/scaffold/general/agents/_shared/researcher-base.md +10 -0
- package/scaffold/general/skills/aikit/SKILL.md +22 -0
|
@@ -27,6 +27,27 @@ You are the **Refactor**, code refactoring specialist that improves structure, r
|
|
|
27
27
|
- **Follow existing patterns** — Consolidate toward established conventions
|
|
28
28
|
- **Don't refactor what isn't asked** — Scope discipline
|
|
29
29
|
|
|
30
|
+
## Reversible Refactor Protocol
|
|
31
|
+
|
|
32
|
+
Refactors modify the canonical source, so use `checkpoint` (NOT `lane`) for safety:
|
|
33
|
+
|
|
34
|
+
1. **Before starting:** `checkpoint({ action:'save', label:'pre-refactor-<scope>' })`
|
|
35
|
+
— captures a snapshot of the relevant files
|
|
36
|
+
2. **Baseline metrics:** `measure({ path })` on target files — record
|
|
37
|
+
`cognitiveComplexity` values BEFORE refactor
|
|
38
|
+
3. **Apply changes** — use `rename({ old, new })` for symbol rename (dry_run first),
|
|
39
|
+
or `codemod({ pattern, replacement })` for structural transforms (dry_run first).
|
|
40
|
+
Never hand-edit what `rename`/`codemod` can do safely.
|
|
41
|
+
4. **Verify:** `check({})` + `test_run({})` must both pass with zero new failures
|
|
42
|
+
5. **Post-metrics:** `measure({ path })` again — confirm cognitive complexity
|
|
43
|
+
delta is negative (or justify if zero)
|
|
44
|
+
6. **If validation fails:** `checkpoint({ action:'restore', label:'pre-refactor-<scope>' })`
|
|
45
|
+
|
|
46
|
+
For multi-approach uncertainty (A vs B), do NOT create lanes. Instead:
|
|
47
|
+
- Delegate to `Researcher-Delta` with a feasibility question — they can use `lane`
|
|
48
|
+
for read-only exploration and return a recommendation
|
|
49
|
+
- You then apply the winning approach under the checkpoint protocol above
|
|
50
|
+
|
|
30
51
|
## Skills (load on demand)
|
|
31
52
|
|
|
32
53
|
| Skill | When to load |
|
|
@@ -114,6 +114,26 @@ When invoked for a decision analysis, you receive a specific question. You MUST:
|
|
|
114
114
|
- **`stratum_card`** for files you'll reference repeatedly
|
|
115
115
|
- **`read_file` is ONLY acceptable** when you need exact lines for a pending edit operation
|
|
116
116
|
|
|
117
|
+
## Parallel Exploration via `lane`
|
|
118
|
+
|
|
119
|
+
For questions that require trying approach A vs approach B in isolation:
|
|
120
|
+
1. `lane({ action:'create', name:'approach-a' })` — isolated file copies
|
|
121
|
+
2. Apply approach A mentally; record observations
|
|
122
|
+
3. `lane({ action:'create', name:'approach-b' })` — second isolate
|
|
123
|
+
4. Apply approach B mentally; record observations
|
|
124
|
+
5. `lane({ action:'diff', names:['approach-a','approach-b'] })` — compare
|
|
125
|
+
6. Include the diff summary in your output; do NOT merge lanes back (read-only role)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
## Required Output Section — `## Depth Analysis`
|
|
129
|
+
|
|
130
|
+
Your final report MUST contain a `## Depth Analysis` section with:
|
|
131
|
+
- Deep-dive into ONE chosen subsystem (most structurally central to the question)
|
|
132
|
+
- Full evidence chain: file:line citations for every structural claim
|
|
133
|
+
- At least 2 `compact`/`file_summary` extracts woven into the narrative
|
|
134
|
+
|
|
135
|
+
You are the DEFAULT researcher. When the Orchestrator needs breadth + depth, they
|
|
136
|
+
dispatch you alone. Your lens: thorough, evidence-first, exhaustive.
|
|
117
137
|
|
|
118
138
|
## Skills (load on demand)
|
|
119
139
|
|
|
@@ -114,6 +114,27 @@ When invoked for a decision analysis, you receive a specific question. You MUST:
|
|
|
114
114
|
- **`stratum_card`** for files you'll reference repeatedly
|
|
115
115
|
- **`read_file` is ONLY acceptable** when you need exact lines for a pending edit operation
|
|
116
116
|
|
|
117
|
+
## Parallel Exploration via `lane`
|
|
118
|
+
|
|
119
|
+
For questions that require trying approach A vs approach B in isolation:
|
|
120
|
+
1. `lane({ action:'create', name:'approach-a' })` — isolated file copies
|
|
121
|
+
2. Apply approach A mentally; record observations
|
|
122
|
+
3. `lane({ action:'create', name:'approach-b' })` — second isolate
|
|
123
|
+
4. Apply approach B mentally; record observations
|
|
124
|
+
5. `lane({ action:'diff', names:['approach-a','approach-b'] })` — compare
|
|
125
|
+
6. Include the diff summary in your output; do NOT merge lanes back (read-only role)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
## Required Output Section — `## Failure Modes & Counter-Evidence`
|
|
129
|
+
|
|
130
|
+
Your final report MUST contain a `## Failure Modes & Counter-Evidence` section with:
|
|
131
|
+
- At least 3 adversarial claims challenging your own primary finding
|
|
132
|
+
- For each counter-claim: the condition under which it would be TRUE, and the
|
|
133
|
+
evidence (file:line or search receipt) that currently falsifies it
|
|
134
|
+
- Any unresolved counter-evidence flagged as `⚠ UNRESOLVED`
|
|
135
|
+
|
|
136
|
+
Your lens: pragmatic skepticism. Mark competing claims as `A` (Assumed) by default;
|
|
137
|
+
challenge before promoting to `V`.
|
|
117
138
|
|
|
118
139
|
## Skills (load on demand)
|
|
119
140
|
|
|
@@ -114,6 +114,28 @@ When invoked for a decision analysis, you receive a specific question. You MUST:
|
|
|
114
114
|
- **`stratum_card`** for files you'll reference repeatedly
|
|
115
115
|
- **`read_file` is ONLY acceptable** when you need exact lines for a pending edit operation
|
|
116
116
|
|
|
117
|
+
## Parallel Exploration via `lane`
|
|
118
|
+
|
|
119
|
+
For questions that require trying approach A vs approach B in isolation:
|
|
120
|
+
1. `lane({ action:'create', name:'approach-a' })` — isolated file copies
|
|
121
|
+
2. Apply approach A mentally; record observations
|
|
122
|
+
3. `lane({ action:'create', name:'approach-b' })` — second isolate
|
|
123
|
+
4. Apply approach B mentally; record observations
|
|
124
|
+
5. `lane({ action:'diff', names:['approach-a','approach-b'] })` — compare
|
|
125
|
+
6. Include the diff summary in your output; do NOT merge lanes back (read-only role)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
## Required Output Section — `## Implementation Cost & Feasibility`
|
|
129
|
+
|
|
130
|
+
Your final report MUST contain a `## Implementation Cost & Feasibility` section with:
|
|
131
|
+
- Complexity snapshot: you MUST call `measure({ path })` on any file ≥ 50 LOC in the
|
|
132
|
+
target subsystem at least once and quote the `cognitiveComplexity` result
|
|
133
|
+
- Blast radius estimate: `blast_radius({ changed_files })` on the proposed edits
|
|
134
|
+
- Time/risk table: | Change | Lines | Risk | Effort |
|
|
135
|
+
- Feasibility verdict: SAFE / RISKY / INFEASIBLE with one-line justification
|
|
136
|
+
|
|
137
|
+
Your lens: implementation feasibility. Prefer `measure` + `blast_radius` + `analyze_patterns`
|
|
138
|
+
over abstract reasoning.
|
|
117
139
|
|
|
118
140
|
## Skills (load on demand)
|
|
119
141
|
|
|
@@ -114,6 +114,27 @@ When invoked for a decision analysis, you receive a specific question. You MUST:
|
|
|
114
114
|
- **`stratum_card`** for files you'll reference repeatedly
|
|
115
115
|
- **`read_file` is ONLY acceptable** when you need exact lines for a pending edit operation
|
|
116
116
|
|
|
117
|
+
## Parallel Exploration via `lane`
|
|
118
|
+
|
|
119
|
+
For questions that require trying approach A vs approach B in isolation:
|
|
120
|
+
1. `lane({ action:'create', name:'approach-a' })` — isolated file copies
|
|
121
|
+
2. Apply approach A mentally; record observations
|
|
122
|
+
3. `lane({ action:'create', name:'approach-b' })` — second isolate
|
|
123
|
+
4. Apply approach B mentally; record observations
|
|
124
|
+
5. `lane({ action:'diff', names:['approach-a','approach-b'] })` — compare
|
|
125
|
+
6. Include the diff summary in your output; do NOT merge lanes back (read-only role)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
## Required Output Section — `## Cross-Domain Analogies`
|
|
129
|
+
|
|
130
|
+
Your final report MUST contain a `## Cross-Domain Analogies` section with:
|
|
131
|
+
- At least 2 patterns from other tools/frameworks/domains that apply to the question
|
|
132
|
+
- For each: the external source (cite via `web_search` or `web_fetch` receipt) and
|
|
133
|
+
how it maps to our codebase
|
|
134
|
+
- One "missing pattern we should adopt" recommendation
|
|
135
|
+
|
|
136
|
+
Your lens: cross-domain pattern matching. Weight `web_search` + `web_fetch` higher
|
|
137
|
+
than peers. Assume the LLM's training data is stale — verify with fresh searches.
|
|
117
138
|
|
|
118
139
|
## Skills (load on demand)
|
|
119
140
|
|
|
@@ -58,3 +58,47 @@ Follow the **MANDATORY FIRST ACTION** and **Information Lookup Order** from code
|
|
|
58
58
|
- **BLOCKED** — Fundamental design flaw requiring rethink
|
|
59
59
|
- Always validate **dependency direction** — inner layers must not depend on outer
|
|
60
60
|
|
|
61
|
+
## Evidence Citation Protocol (tier-aware)
|
|
62
|
+
|
|
63
|
+
The Orchestrator runs `forge_classify` before dispatching you, and runs the final
|
|
64
|
+
`evidence_map({action:'gate', task_id})` after you respond. **Do not create your own
|
|
65
|
+
task_id or run the gate** — feed into the Orchestrator's existing evidence map.
|
|
66
|
+
|
|
67
|
+
| Tier | Your responsibility |
|
|
68
|
+
|------|---------------------|
|
|
69
|
+
| Floor | Free-form findings with `file.ts#Lxx` citations. No `evidence_map` calls required. |
|
|
70
|
+
| Standard | For every CRITICAL or HIGH finding: `evidence_map({action:'add', task_id, claim, status:'V', receipt:'file.ts#Lxx'})`. Max 2-4 adds to keep signal high. |
|
|
71
|
+
| Critical | Structured claims for all CRITICAL/HIGH findings (2-4 Verified + receipts) AND tag contract/security claims with `safety_gate:'commitment'` or `safety_gate:'provenance'`. |
|
|
72
|
+
|
|
73
|
+
**Every response MUST include:**
|
|
74
|
+
- `**FORGE Task ID:** <task_id>` (passed in by Orchestrator, or state "not provided")
|
|
75
|
+
- `**Tier applied:** Floor | Standard | Critical`
|
|
76
|
+
- `**Findings:** <list>` with `file:line` receipts
|
|
77
|
+
- Verdict: `APPROVED` | `CHANGES_REQUESTED` | `BLOCKED`
|
|
78
|
+
|
|
79
|
+
Do NOT:
|
|
80
|
+
- Create a new `evidence_map` (the Orchestrator already did)
|
|
81
|
+
- Run `evidence_map({action:'gate'})` yourself — the Orchestrator owns the gate
|
|
82
|
+
- Duplicate findings into the map that weren't CRITICAL/HIGH
|
|
83
|
+
|
|
84
|
+
## Graph-Assisted Layer Verification
|
|
85
|
+
|
|
86
|
+
For each significantly changed module (from `blast_radius` or changed_files input):
|
|
87
|
+
|
|
88
|
+
1. **Discover node**: `graph({action:'find_nodes', name_pattern:'<module-path>'})` → get node_id
|
|
89
|
+
2. **Incoming dependencies** (who depends on this?):
|
|
90
|
+
`graph({action:'neighbors', node_id, direction:'incoming'})`
|
|
91
|
+
— flag any caller that violates layering rules (e.g. a `core/` module that gets imported by `infra/`)
|
|
92
|
+
3. **Outgoing dependencies** (what does it depend on?):
|
|
93
|
+
`graph({action:'neighbors', node_id, direction:'outgoing'})`
|
|
94
|
+
— flag any target that violates direction (e.g. domain importing from infra)
|
|
95
|
+
4. **Isolation check** (modules that should NOT be connected):
|
|
96
|
+
`graph({action:'depth_traverse', node_id, max_depth:3})`
|
|
97
|
+
— verify no path reaches modules in forbidden directories
|
|
98
|
+
|
|
99
|
+
Cite each layer violation as a CRITICAL finding with `file:line` receipt, and add it
|
|
100
|
+
to the Evidence Map per the tier protocol above.
|
|
101
|
+
|
|
102
|
+
**Do NOT use `shortest_path`** — that action does not exist. Use `depth_traverse`
|
|
103
|
+
or repeated `neighbors` calls.
|
|
104
|
+
|
|
@@ -62,3 +62,26 @@ Follow the **MANDATORY FIRST ACTION** and **Information Lookup Order** from code
|
|
|
62
62
|
- **FAILED** for any CRITICAL finding
|
|
63
63
|
- Always check for **test coverage** on new/changed code
|
|
64
64
|
|
|
65
|
+
## Evidence Citation Protocol (tier-aware)
|
|
66
|
+
|
|
67
|
+
The Orchestrator runs `forge_classify` before dispatching you, and runs the final
|
|
68
|
+
`evidence_map({action:'gate', task_id})` after you respond. **Do not create your own
|
|
69
|
+
task_id or run the gate** — feed into the Orchestrator's existing evidence map.
|
|
70
|
+
|
|
71
|
+
| Tier | Your responsibility |
|
|
72
|
+
|------|---------------------|
|
|
73
|
+
| Floor | Free-form findings with `file.ts#Lxx` citations. No `evidence_map` calls required. |
|
|
74
|
+
| Standard | For every CRITICAL or HIGH finding: `evidence_map({action:'add', task_id, claim, status:'V', receipt:'file.ts#Lxx'})`. Max 2-4 adds to keep signal high. |
|
|
75
|
+
| Critical | Structured claims for all CRITICAL/HIGH findings (2-4 Verified + receipts) AND tag contract/security claims with `safety_gate:'commitment'` or `safety_gate:'provenance'`. |
|
|
76
|
+
|
|
77
|
+
**Every response MUST include:**
|
|
78
|
+
- `**FORGE Task ID:** <task_id>` (passed in by Orchestrator, or state "not provided")
|
|
79
|
+
- `**Tier applied:** Floor | Standard | Critical`
|
|
80
|
+
- `**Findings:** <list>` with `file:line` receipts
|
|
81
|
+
- Verdict: `APPROVED` | `CHANGES_REQUESTED` | `BLOCKED`
|
|
82
|
+
|
|
83
|
+
Do NOT:
|
|
84
|
+
- Create a new `evidence_map` (the Orchestrator already did)
|
|
85
|
+
- Run `evidence_map({action:'gate'})` yourself — the Orchestrator owns the gate
|
|
86
|
+
- Duplicate findings into the map that weren't CRITICAL/HIGH
|
|
87
|
+
|
|
@@ -102,3 +102,13 @@ When invoked for a decision analysis, you receive a specific question. You MUST:
|
|
|
102
102
|
- **`stratum_card`** for files you'll reference repeatedly
|
|
103
103
|
- **`read_file` is ONLY acceptable** when you need exact lines for a pending edit operation
|
|
104
104
|
|
|
105
|
+
## Parallel Exploration via `lane`
|
|
106
|
+
|
|
107
|
+
For questions that require trying approach A vs approach B in isolation:
|
|
108
|
+
1. `lane({ action:'create', name:'approach-a' })` — isolated file copies
|
|
109
|
+
2. Apply approach A mentally; record observations
|
|
110
|
+
3. `lane({ action:'create', name:'approach-b' })` — second isolate
|
|
111
|
+
4. Apply approach B mentally; record observations
|
|
112
|
+
5. `lane({ action:'diff', names:['approach-a','approach-b'] })` — compare
|
|
113
|
+
6. Include the diff summary in your output; do NOT merge lanes back (read-only role)
|
|
114
|
+
|
|
@@ -322,6 +322,24 @@ Need to understand a file?
|
|
|
322
322
|
└─ "I want to read the whole file" → ⛔ STOP. Use file_summary or compact instead.
|
|
323
323
|
```
|
|
324
324
|
|
|
325
|
+
### Decision Tree — Need Structural Relationships?
|
|
326
|
+
|
|
327
|
+
When vector search and file reads don't answer the question (e.g. "who imports this?",
|
|
328
|
+
"what does this depend on?", "how are these files connected?"), use `graph`:
|
|
329
|
+
|
|
330
|
+
```
|
|
331
|
+
Need to understand relationships between code?
|
|
332
|
+
├─ Who imports / calls this? → graph({action:'find_nodes', name_pattern}) → graph({action:'neighbors', node_id, direction:'incoming'})
|
|
333
|
+
├─ What does this depend on? → graph({action:'neighbors', node_id, direction:'outgoing'})
|
|
334
|
+
├─ Full context for a symbol? → graph({action:'symbol360', name})
|
|
335
|
+
├─ Related files within N hops? → graph({action:'traverse', node_id, max_depth:2})
|
|
336
|
+
├─ Layer/module isolation check? → graph({action:'depth_traverse', node_id, max_depth:3})
|
|
337
|
+
└─ Graph size/health? → graph({action:'stats'})
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
**Use this BEFORE** reaching for `analyze_dependencies` (slower, less precise) or manually
|
|
341
|
+
tracing via `symbol` + `trace` chains. The graph is auto-populated during indexing.
|
|
342
|
+
|
|
325
343
|
### What AI Kit Tools Return (AST-Enhanced)
|
|
326
344
|
|
|
327
345
|
These tools use Tree-sitter WASM to analyze source code at the AST level, providing structured data that raw file reads cannot:
|
|
@@ -405,6 +423,10 @@ scope_map({ task: "rename UserService" })
|
|
|
405
423
|
→ lane({ action: "merge", name: "refactor" })
|
|
406
424
|
```
|
|
407
425
|
|
|
426
|
+
### Lane — isolated read-only exploration
|
|
427
|
+
|
|
428
|
+
`lane({ action:'create', name })` creates an isolated copy of the workspace. Use to try approach A vs B WITHOUT touching canonical source. Other actions: `list`, `diff`, `delete`. Compare with `lane({ action:'diff', names:['a','b'] })`. Do NOT use `lane` for actual refactors — use `checkpoint` instead (`checkpoint` = reversible on canonical source; `lane` = isolated copies for comparison).
|
|
429
|
+
|
|
408
430
|
### After Making Changes
|
|
409
431
|
```
|
|
410
432
|
blast_radius({ changed_files: ["src/auth.ts"] })
|