@vpxa/aikit 0.1.355 → 0.1.356
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 +1 -1
- package/packages/cli/dist/index.js +19 -19
- package/packages/cli/dist/init-DbMdFkrH.js +7 -0
- package/packages/cli/dist/{templates-CztsaGb2.js → templates-zHGu9MXa.js} +16 -16
- package/scaffold/dist/adapters/claude-code.mjs +7 -7
- package/scaffold/dist/adapters/copilot.mjs +3 -3
- package/scaffold/dist/adapters/hermes-agent.mjs +3 -3
- package/scaffold/dist/adapters/hooks.mjs +1 -1
- package/scaffold/dist/definitions/agents.mjs +12 -12
- package/scaffold/dist/definitions/models.mjs +1 -1
- package/scaffold/dist/definitions/prompts.mjs +18 -347
- package/scaffold/dist/definitions/tools.mjs +1 -1
- package/scaffold/vitest.config.mjs +8 -0
- package/packages/cli/dist/init-DFhk2_8C.js +0 -7
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
const e={ask:{description:`Quick research question — find answer using AI Kit + web search`,agent:`Researcher-Alpha`,tools:[`search`,`web_search`,`web_fetch`,`knowledge`,`present`],content:`## Quick Research
|
|
1
|
+
const e={ask:{description:`Quick research question — find answer using AI Kit + web search`,agent:`Researcher-Alpha`,intent:`Quick research question using AI Kit + web search`,tools:[`search`,`web_search`,`web_fetch`,`knowledge`,`present`],content:`## Quick Research
|
|
2
2
|
|
|
3
3
|
1. **AI Kit Recall** — Search the AI Kit index for existing answers
|
|
4
4
|
2. **Web Search** — If AI Kit has no relevant results, search the web
|
|
5
5
|
3. **Synthesize** — Combine findings into a clear, concise answer
|
|
6
6
|
4. **Remember** — If the answer is broadly useful, persist it with \`knowledge({ action: "remember", ... })\`
|
|
7
7
|
|
|
8
|
-
**Always cite sources** — AI Kit entries, file paths, or URLs.`},debug:{description:`Systematic error diagnosis: reproduce → trace → diagnose → fix → verify`,agent:`Debugger`,tools:[`search`,`symbol`,`trace`,`blast_radius`,`check`,`test_run`,`parse_output`,`knowledge`,`present`],content:'## Debug Workflow\n\n1. **Parse Error** — Use `parse_output` on the error message/stack trace\n2. **AI Kit Recall** — Search for known issues matching this pattern\n3. **Reproduce** — Run the failing command/test to confirm\n4. **Trace** — Use `symbol` and `trace` to follow the call chain\n5. **Diagnose** — Form hypothesis, gather evidence\n6. **Fix** — Implement minimal fix\n7. **Verify** — `check` + `test_run` to confirm fix and no regressions\n8. **Remember** — Persist the fix with `knowledge({ action: "remember", category: "troubleshooting", ... })`'},implement:{description:`Full lifecycle implementation: plan → build → review → commit`,agent:`Orchestrator`,tools:[`search`,`scope_map`,`forge_ground`,`check`,`test_run`,`blast_radius`,`knowledge`,`audit`,`present`],content:`## Implementation Pipeline
|
|
8
|
+
**Always cite sources** — AI Kit entries, file paths, or URLs.`},debug:{description:`Systematic error diagnosis: reproduce → trace → diagnose → fix → verify`,agent:`Debugger`,tools:[`search`,`symbol`,`trace`,`blast_radius`,`check`,`test_run`,`parse_output`,`knowledge`,`present`],intent:`Systematic error diagnosis and fix workflow`,content:'## Debug Workflow\n\n1. **Parse Error** — Use `parse_output` on the error message/stack trace\n2. **AI Kit Recall** — Search for known issues matching this pattern\n3. **Reproduce** — Run the failing command/test to confirm\n4. **Trace** — Use `symbol` and `trace` to follow the call chain\n5. **Diagnose** — Form hypothesis, gather evidence\n6. **Fix** — Implement minimal fix\n7. **Verify** — `check` + `test_run` to confirm fix and no regressions\n8. **Remember** — Persist the fix with `knowledge({ action: "remember", category: "troubleshooting", ... })`'},implement:{description:`Full lifecycle implementation: plan → build → review → commit`,agent:`Orchestrator`,tools:[`search`,`scope_map`,`forge_ground`,`check`,`test_run`,`blast_radius`,`knowledge`,`audit`,`present`],intent:`Full lifecycle implementation with quality gates`,content:`## Implementation Pipeline
|
|
9
9
|
|
|
10
10
|
Follow the Orchestrator's full workflow:
|
|
11
11
|
|
|
@@ -16,7 +16,7 @@ Follow the Orchestrator's full workflow:
|
|
|
16
16
|
|
|
17
17
|
**🛑 MANDATORY STOPS** — After plan, after each batch, after completion.
|
|
18
18
|
|
|
19
|
-
Refer to the Orchestrator agent's full instructions for the detailed workflow.`},plan:{description:`Create a detailed TDD implementation plan without executing it`,agent:`Planner`,tools:[`search`,`scope_map`,`forge_ground`,`forge_classify`,`file_summary`,`analyze`,`knowledge`,`present`],content:`## Planning Workflow
|
|
19
|
+
Refer to the Orchestrator agent's full instructions for the detailed workflow.`},plan:{description:`Create a detailed TDD implementation plan without executing it`,agent:`Planner`,tools:[`search`,`scope_map`,`forge_ground`,`forge_classify`,`file_summary`,`analyze`,`knowledge`,`present`],intent:`Create detailed TDD implementation plan`,content:`## Planning Workflow
|
|
20
20
|
|
|
21
21
|
1. **AI Kit Recall** — Search for past plans, architecture decisions
|
|
22
22
|
2. **FORGE Ground** — Classify tier, scope map, seed unknowns
|
|
@@ -25,7 +25,7 @@ Refer to the Orchestrator agent's full instructions for the detailed workflow.`}
|
|
|
25
25
|
5. **Dependency Graph** — Group into parallel batches
|
|
26
26
|
6. **Present** — Show plan with open questions
|
|
27
27
|
|
|
28
|
-
**🛑 MANDATORY STOP** — Wait for user approval. Do NOT implement.`},design:{description:`Collaborative design session — explore ideas, refine requirements, produce a design spec`,agent:`Orchestrator`,tools:[`search`,`scope_map`,`file_summary`,`knowledge`,`forge_classify`,`present`],content:`## Design Session
|
|
28
|
+
**🛑 MANDATORY STOP** — Wait for user approval. Do NOT implement.`},design:{description:`Collaborative design session — explore ideas, refine requirements, produce a design spec`,agent:`Orchestrator`,intent:`Collaborative design exploration session`,tools:[`search`,`scope_map`,`file_summary`,`knowledge`,`forge_classify`,`present`],content:`## Design Session
|
|
29
29
|
|
|
30
30
|
Enter Phase 0 (Design Gate) directly — the user is requesting a design session.
|
|
31
31
|
|
|
@@ -34,7 +34,7 @@ Enter Phase 0 (Design Gate) directly — the user is requesting a design session
|
|
|
34
34
|
3. If Advanced Mode, use the full Multi-Model Decision Protocol (3-phase: research → peer review → verdict, defined in Orchestrator instructions) for unresolved technical choices
|
|
35
35
|
4. Terminal state: brainstorming skill invokes writing-plans skill
|
|
36
36
|
|
|
37
|
-
**🛑 HARD GATE** — Do NOT skip brainstorming. Do NOT write code. Design first.`},review:{description:`Dual-model code + architecture review pipeline`,agent:`Orchestrator`,tools:[`search`,`blast_radius`,`check`,`test_run`,`analyze`,`knowledge`,`present`],content:`## Review Pipeline
|
|
37
|
+
**🛑 HARD GATE** — Do NOT skip brainstorming. Do NOT write code. Design first.`},review:{description:`Dual-model code + architecture review pipeline`,agent:`Orchestrator`,intent:`Multi-model code and architecture review pipeline`,tools:[`search`,`blast_radius`,`check`,`test_run`,`analyze`,`knowledge`,`present`],content:`## Review Pipeline
|
|
38
38
|
|
|
39
39
|
### Step 1: Scope
|
|
40
40
|
Identify changed files and their blast radius.
|
|
@@ -52,7 +52,7 @@ Merge findings from both reviewers:
|
|
|
52
52
|
- **Disagreements**: Contradicting verdicts → present both to user
|
|
53
53
|
|
|
54
54
|
### Step 5: Report
|
|
55
|
-
Present unified review with: verdict, findings by severity, recommended actions.`},"flow-add":{description:`Install a new flow from a git URL or local path — with interactive error recovery`,agent:`Orchestrator`,tools:[`flow`,`search`,`present`],content:`## Flow Installation Assistant
|
|
55
|
+
Present unified review with: verdict, findings by severity, recommended actions.`},"flow-add":{description:`Install a new flow from a git URL or local path — with interactive error recovery`,agent:`Orchestrator`,intent:`Install a flow from git URL or local path`,tools:[`flow`,`search`,`present`],content:`## Flow Installation Assistant
|
|
56
56
|
|
|
57
57
|
Install a development flow from a git repository or local directory.
|
|
58
58
|
|
|
@@ -61,7 +61,7 @@ Provide a git URL or local path:
|
|
|
61
61
|
- \`https://github.com/org/my-flow.git\`
|
|
62
62
|
- \`git@github.com:org/my-flow.git\`
|
|
63
63
|
- \`./path/to/local/flow\`
|
|
64
|
-
- \`C:\\
|
|
64
|
+
- \`C:\\path\\to\\flow\`
|
|
65
65
|
|
|
66
66
|
### Workflow
|
|
67
67
|
|
|
@@ -130,7 +130,7 @@ If \`flow({ action: 'add', source })\` succeeds cloning but returns a format/str
|
|
|
130
130
|
### Post-Install
|
|
131
131
|
After successful installation:
|
|
132
132
|
- Show the flow name, steps, and description via \`present\`
|
|
133
|
-
- Remind user they can start it with \`flow({ action: 'start', name, topic })\``},"flow-manage":{description:`List, inspect, update, and remove installed flows`,agent:`Orchestrator`,tools:[`flow`,`present`],content:`## Flow Management
|
|
133
|
+
- Remind user they can start it with \`flow({ action: 'start', name, topic })\``},"flow-manage":{description:`List, inspect, update, and remove installed flows`,agent:`Orchestrator`,intent:`List, inspect, update, and remove installed flows`,tools:[`flow`,`present`],content:`## Flow Management
|
|
134
134
|
|
|
135
135
|
Manage your installed development flows.
|
|
136
136
|
|
|
@@ -148,7 +148,7 @@ Manage your installed development flows.
|
|
|
148
148
|
1. If no specific action requested, start with \`flow({ action: 'list' })\` and present overview
|
|
149
149
|
2. Use \`present\` to display flow information in a clear table/card format
|
|
150
150
|
3. For updates, warn if there's an active flow that might be affected
|
|
151
|
-
4. For removals, confirm with user before proceeding`},"flow-create":{description:`Create a new flow from scratch or migrate an existing workflow to aikit format`,agent:`Orchestrator`,tools:[`flow`,`search`,`present`],content:`## Flow Creation Assistant
|
|
151
|
+
4. For removals, confirm with user before proceeding`},"flow-create":{description:`Create a new flow from scratch or migrate an existing workflow to aikit format`,agent:`Orchestrator`,intent:`Create or migrate development flows`,tools:[`flow`,`search`,`present`],content:`## Flow Creation Assistant
|
|
152
152
|
|
|
153
153
|
Create a new development flow or migrate an existing workflow to the aikit flow format.
|
|
154
154
|
|
|
@@ -222,343 +222,14 @@ Each step README should include:
|
|
|
222
222
|
- **Inputs** — What context/artifacts from prior steps are needed
|
|
223
223
|
- **Instructions** — Detailed steps for the agent to follow
|
|
224
224
|
- **Output** — What artifact(s) to produce and where to save them
|
|
225
|
-
- **Acceptance criteria** — How to know the step is complete`},docs:{description:`Deep codebase understanding — analyze, learn, document, and visualize the entire project as an interactive knowledge graph`,agent:`Orchestrator`,tools:[`onboard`,`analyze`,`audit`,`produce_knowledge`,`graph`,`measure`,`blast_radius`,`search`,`symbol`,`trace`,`dead_symbols`,`file_summary`,`digest`,`knowledge`,`present`,`check`,`test_run`,`git_context`],content:`##
|
|
225
|
+
- **Acceptance criteria** — How to know the step is complete`},docs:{description:`Deep codebase understanding — analyze, learn, document, and visualize the entire project as an interactive knowledge graph`,agent:`Orchestrator`,intent:`Deep codebase understanding and documentation generation`,tools:[`onboard`,`analyze`,`audit`,`produce_knowledge`,`graph`,`measure`,`blast_radius`,`search`,`symbol`,`trace`,`dead_symbols`,`file_summary`,`digest`,`knowledge`,`present`,`check`,`test_run`,`git_context`],content:`## Deep Codebase Understanding Pipeline
|
|
226
226
|
|
|
227
|
-
|
|
228
|
-
|
|
227
|
+
1. **Load the \`docs\` skill** — contains full workflow for analysis, knowledge graph, and documentation generation
|
|
228
|
+
2. **Load the \`c4-architecture\` skill** — for architecture diagrams and interactive viewers
|
|
229
|
+
3. **Check status** — \`status({ includePrelude: true })\` to verify onboard state
|
|
230
|
+
4. **Scan codebase** — \`onboard({ path: ".", update: true })\` if stale, then parallel analyze calls
|
|
231
|
+
5. **For docs > markdown docs**: Follow the docs skill's 4-phase workflow (Scan → Investigate → Populate → Validate)
|
|
232
|
+
6. **For docs > interactive viewers**: Follow docs skill's generation-pipeline.md Phases 4c + 6 for C4/tour HTML generation
|
|
233
|
+
7. **Present results** — Document index, architecture overview, concerns board
|
|
229
234
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
### Phase 1: Deep Scan (parallel analysis)
|
|
233
|
-
|
|
234
|
-
Run all analysis tools in parallel to build a comprehensive baseline:
|
|
235
|
-
|
|
236
|
-
1. **Onboard** — \`onboard({ path: "." })\` if not already done (check \`status()\` first)
|
|
237
|
-
2. **Structure** — \`analyze({ items: [{aspect: "structure", path: "."}] })\`
|
|
238
|
-
3. **Dependencies** — \`analyze({ items: [{aspect: "dependencies", path: "."}] })\`
|
|
239
|
-
4. **Symbols** — \`analyze({ items: [{aspect: "symbols", path: "."}] })\`
|
|
240
|
-
5. **Patterns** — \`analyze({ items: [{aspect: "patterns", path: "."}] })\`
|
|
241
|
-
6. **Entry Points** — \`analyze({ items: [{aspect: "entry_points", path: "."}] })\`
|
|
242
|
-
7. **Diagrams** — \`analyze({ items: [{aspect: "diagram", path: "."}] })\`
|
|
243
|
-
8. **Health Audit** — \`audit({ path: "." })\`
|
|
244
|
-
9. **Complexity** — \`measure({ path: "." })\`
|
|
245
|
-
10. **Git Context** — \`git_context({ include_diff: true })\`
|
|
246
|
-
11. **Dead Symbols** — \`dead_symbols({ path: "." })\`
|
|
247
|
-
|
|
248
|
-
Stash all results for later phases.
|
|
249
|
-
|
|
250
|
-
### Phase 2: Knowledge Graph Construction
|
|
251
|
-
|
|
252
|
-
Build a navigable knowledge graph of the codebase:
|
|
253
|
-
|
|
254
|
-
1. **Discover modules** — \`graph({ action: 'find_nodes' })\` to get all indexed modules
|
|
255
|
-
2. **Map relationships** — For key modules, \`graph({ action: 'neighbors', node_id, direction: 'both' })\`
|
|
256
|
-
3. **Trace critical paths** — Use \`trace({ items: [{start: "<entry-point>", direction: "forward"}] })\` on each entry point
|
|
257
|
-
4. **Identify layers** — Classify modules into architectural layers (API, Service, Domain, Data, Infrastructure, UI, Utility, Config)
|
|
258
|
-
5. **Detect communities** — \`graph({ action: 'detect_communities' })\` to find natural module clusters
|
|
259
|
-
6. **Symbol deep-dive** — For each public API/export, \`symbol({ items: [{name}] })\` to understand usage
|
|
260
|
-
|
|
261
|
-
Persist the graph structure and layer classification.
|
|
262
|
-
|
|
263
|
-
### Phase 3: Multi-Agent Understanding (parallel dispatch)
|
|
264
|
-
|
|
265
|
-
Dispatch Researcher agents **in parallel** to deeply understand different aspects:
|
|
266
|
-
|
|
267
|
-
**Researcher-Alpha** — Architecture & Design Patterns:
|
|
268
|
-
- What architectural style is used? (layered, hexagonal, microservice, monolith)
|
|
269
|
-
- What design patterns appear? (repository, factory, strategy, observer, etc.)
|
|
270
|
-
- How is data flow organized? (request lifecycle, event pipeline, etc.)
|
|
271
|
-
|
|
272
|
-
**Researcher-Beta** — Business Logic & Domain:
|
|
273
|
-
- What are the core business domains/bounded contexts?
|
|
274
|
-
- What are the key business flows and processes?
|
|
275
|
-
- What domain entities and value objects exist?
|
|
276
|
-
- How is business logic separated from infrastructure?
|
|
277
|
-
|
|
278
|
-
**Researcher-Gamma** — Integration & Infrastructure:
|
|
279
|
-
- What external services, APIs, databases are used?
|
|
280
|
-
- How is authentication/authorization handled?
|
|
281
|
-
- What is the deployment topology?
|
|
282
|
-
- What monitoring, logging, observability exists?
|
|
283
|
-
|
|
284
|
-
**Researcher-Delta** — Quality & Concerns:
|
|
285
|
-
- What is the test coverage strategy?
|
|
286
|
-
- What tech debt or code smells exist?
|
|
287
|
-
- What security concerns should be noted?
|
|
288
|
-
- What performance bottlenecks are visible?
|
|
289
|
-
- What are the highest-complexity files?
|
|
290
|
-
|
|
291
|
-
### Phase 4: Document Everything
|
|
292
|
-
|
|
293
|
-
Load the \`docs\` skill and generate comprehensive documentation:
|
|
294
|
-
|
|
295
|
-
1. **Project Knowledge** (7 architecture docs):
|
|
296
|
-
- \`docs/architecture/stack.md\` — Language, runtime, frameworks, all dependencies
|
|
297
|
-
- \`docs/architecture/structure.md\` — Directory layout, entry points, key files
|
|
298
|
-
- \`docs/architecture/design.md\` — Layers, patterns, data flow, component boundaries
|
|
299
|
-
- \`docs/architecture/conventions.md\` — Naming, formatting, error handling, imports
|
|
300
|
-
- \`docs/architecture/integrations.md\` — External APIs, databases, auth, monitoring
|
|
301
|
-
- \`docs/architecture/testing.md\` — Test frameworks, file organization, mocking
|
|
302
|
-
- \`docs/architecture/concerns.md\` — Tech debt, security risks, performance issues
|
|
303
|
-
|
|
304
|
-
2. **Component Docs** — For each major module/component:
|
|
305
|
-
- \`docs/architecture/components/{name}.md\` — Purpose, API, design decisions, data flow
|
|
306
|
-
|
|
307
|
-
3. **Reference Docs**:
|
|
308
|
-
- \`docs/reference/api.md\` — API surface, endpoints, schemas
|
|
309
|
-
- \`docs/reference/configuration.md\` — Config options, environment variables
|
|
310
|
-
|
|
311
|
-
4. **Guides**:
|
|
312
|
-
- \`docs/guides/onboarding.md\` — Guided tour for new developers (dependency-ordered walkthrough)
|
|
313
|
-
- \`docs/guides/architecture-tour.md\` — Visual architecture walkthrough
|
|
314
|
-
|
|
315
|
-
5. **Project Overview**:
|
|
316
|
-
- \`docs/README.md\` — Index linking all docs, project summary
|
|
317
|
-
|
|
318
|
-
6. **Persist Knowledge** — \`produce_knowledge({ path: "." })\` + \`knowledge({ action: "remember", ... })\` for key findings
|
|
319
|
-
|
|
320
|
-
7. **AGENTS.md** — Generate an agent-friendly project context file at the repo root:
|
|
321
|
-
- Project overview, architecture style, key modules
|
|
322
|
-
- Build/test/run commands
|
|
323
|
-
- Coding conventions and patterns in use
|
|
324
|
-
- Key entry points and data flows
|
|
325
|
-
- Known concerns and tech debt
|
|
326
|
-
|
|
327
|
-
> **Interactive HTML viewers** (C4 diagrams, code tour walkthroughs) are generated by the \`/aikit-docs-site\` command. Use it after this command to produce interactive explorable documentation.
|
|
328
|
-
|
|
329
|
-
### Phase 5: Interactive Presentation
|
|
330
|
-
|
|
331
|
-
Present the understanding as a rich interactive dashboard using \`present\`:
|
|
332
|
-
|
|
333
|
-
1. **Architecture Overview** — Mermaid diagram of system layers and component relationships
|
|
334
|
-
2. **Dependency Graph** — Module dependency visualization
|
|
335
|
-
3. **Metrics Dashboard** — File count, complexity distribution, test coverage, health score
|
|
336
|
-
4. **Knowledge Map** — Key modules with descriptions, organized by architectural layer
|
|
337
|
-
5. **Guided Tour** — Recommended reading order for codebase onboarding
|
|
338
|
-
6. **Concerns Board** — Tech debt, dead code, security risks as a status board
|
|
339
|
-
7. **Business Domain Map** — Domain entities and their relationships
|
|
340
|
-
|
|
341
|
-
Use the \`c4-architecture\` skill for generating proper C4 architecture diagrams (Context, Container, Component levels).
|
|
342
|
-
|
|
343
|
-
### Output Summary
|
|
344
|
-
|
|
345
|
-
After all phases complete, present a final summary to the user:
|
|
346
|
-
- Total files analyzed, modules discovered, patterns detected
|
|
347
|
-
- Architecture style and key design decisions identified
|
|
348
|
-
- Number of docs generated and their locations
|
|
349
|
-
- Top concerns and recommendations
|
|
350
|
-
- Links to the interactive dashboard
|
|
351
|
-
|
|
352
|
-
### Rules
|
|
353
|
-
|
|
354
|
-
- **Every claim must be traceable** to source files or tool output
|
|
355
|
-
- **Never infer or assume** — only document what is verifiable
|
|
356
|
-
- **Mark unknowns** with \`[TODO]\` and intent-dependent decisions with \`[ASK USER]\`
|
|
357
|
-
- **Delegate to specialists**: architecture diagrams → \`c4-architecture\` skill, ADRs → \`adr-skill\`
|
|
358
|
-
- **Compress between phases** — use \`digest\` and \`stash\` to manage context
|
|
359
|
-
- **🛑 STOP after Phase 5** — present results and ask user for feedback before any follow-up work`},"docs-site":{description:`Generate interactive HTML documentation — C4 architecture viewers and code tour walkthroughs with browser verification`,agent:`Orchestrator`,tools:[`onboard`,`analyze`,`produce_knowledge`,`graph`,`search`,`symbol`,`trace`,`file_summary`,`digest`,`knowledge`,`browser`,`present`,`check`,`git_context`,`measure`],content:`## Generate Interactive Documentation Viewers
|
|
360
|
-
|
|
361
|
-
Create interactive HTML documentation using C4 architecture viewers and code tour walkthroughs.
|
|
362
|
-
|
|
363
|
-
> **Prerequisite:** Run \`/aikit-docs\` first to generate the base markdown documentation and AGENTS.md.
|
|
364
|
-
|
|
365
|
-
### Phase 1: Analyze Project
|
|
366
|
-
|
|
367
|
-
\`\`\`
|
|
368
|
-
onboard({ path: "." }) # If not done (check status() first)
|
|
369
|
-
analyze({ items: [{aspect: "structure", path: "."}] }) # Directory layout
|
|
370
|
-
analyze({ items: [{aspect: "dependencies", path: "."}] }) # Module graph
|
|
371
|
-
analyze({ items: [{aspect: "entry_points", path: "."}] }) # API surface
|
|
372
|
-
analyze({ items: [{aspect: "diagram", path: "."}] }) # Architecture diagram data
|
|
373
|
-
graph({ action: "find_nodes" }) # Module graph for C4 mapping
|
|
374
|
-
graph({ action: "detect_communities" }) # Natural module clusters
|
|
375
|
-
\`\`\`
|
|
376
|
-
|
|
377
|
-
Stash results for use in subsequent phases.
|
|
378
|
-
|
|
379
|
-
### Phase 2: Generate C4 Architecture Data
|
|
380
|
-
|
|
381
|
-
Create C4 JSON data files for each architectural level. Save to \`docs/architecture/interactive/\`.
|
|
382
|
-
|
|
383
|
-
**Required schema — MUST match exactly:**
|
|
384
|
-
|
|
385
|
-
\`\`\`json
|
|
386
|
-
{
|
|
387
|
-
"title": "Project Name - C4 Level",
|
|
388
|
-
"description": "What this diagram shows",
|
|
389
|
-
"layout": { "direction": "DOWN", "spacing": 80, "layerSpacing": 120 },
|
|
390
|
-
"nodes": [
|
|
391
|
-
{
|
|
392
|
-
"id": "unique-string-id",
|
|
393
|
-
"type": "person|system|container|component|database|queue|external",
|
|
394
|
-
"label": "Display Name",
|
|
395
|
-
"description": "What this element does",
|
|
396
|
-
"technology": "Language/framework",
|
|
397
|
-
"parentId": "optional-boundary-id"
|
|
398
|
-
}
|
|
399
|
-
],
|
|
400
|
-
"edges": [
|
|
401
|
-
{
|
|
402
|
-
"id": "unique-edge-id",
|
|
403
|
-
"source": "source-node-id",
|
|
404
|
-
"target": "target-node-id",
|
|
405
|
-
"label": "Relationship description",
|
|
406
|
-
"technology": "Protocol/transport"
|
|
407
|
-
}
|
|
408
|
-
]
|
|
409
|
-
}
|
|
410
|
-
\`\`\`
|
|
411
|
-
|
|
412
|
-
**C4 levels to generate:**
|
|
413
|
-
1. \`system-context.json\` — External actors + the system as a black box
|
|
414
|
-
2. \`containers.json\` — Major deployable units (services, databases, frontends)
|
|
415
|
-
3. \`{component-name}-components.json\` — Internal structure of key containers
|
|
416
|
-
|
|
417
|
-
**Critical rules:**
|
|
418
|
-
- Top-level keys are \`nodes\` and \`edges\` (NOT \`elements\`/\`relationships\`)
|
|
419
|
-
- Every edge MUST have a unique \`id\` field (ELK crashes without it)
|
|
420
|
-
- Node \`type\` MUST be one of: person, system, container, component, database, queue, external
|
|
421
|
-
- \`layout.direction\` MUST be: DOWN, UP, LEFT, or RIGHT
|
|
422
|
-
- \`parentId\` references must point to existing node IDs (or omit entirely)
|
|
423
|
-
|
|
424
|
-
### Phase 3: Generate Tour Data
|
|
425
|
-
|
|
426
|
-
Create code tour JSON files. Save to \`docs/tours/interactive/\`.
|
|
427
|
-
|
|
428
|
-
**Required schema — MUST match exactly:**
|
|
429
|
-
|
|
430
|
-
\`\`\`json
|
|
431
|
-
{
|
|
432
|
-
"title": "Tour Title",
|
|
433
|
-
"description": "What this tour teaches",
|
|
434
|
-
"estimatedTime": "15 min",
|
|
435
|
-
"steps": [
|
|
436
|
-
{
|
|
437
|
-
"stepNumber": 1,
|
|
438
|
-
"id": "kebab-case-step-id",
|
|
439
|
-
"title": "Step Title",
|
|
440
|
-
"file": "relative/path/to/file.ts",
|
|
441
|
-
"line": 42,
|
|
442
|
-
"explanation": "What this code does and why it matters",
|
|
443
|
-
"learnsConcept": "Concept name",
|
|
444
|
-
"duration": "2 min",
|
|
445
|
-
"notes": "Optional additional context"
|
|
446
|
-
}
|
|
447
|
-
],
|
|
448
|
-
"dependencies": [
|
|
449
|
-
{ "source": "step-id-1", "target": "step-id-2" }
|
|
450
|
-
]
|
|
451
|
-
}
|
|
452
|
-
\`\`\`
|
|
453
|
-
|
|
454
|
-
**Tours to generate:**
|
|
455
|
-
1. \`architecture-overview.json\` — High-level system walkthrough (entry points → core logic → outputs)
|
|
456
|
-
2. \`onboarding.json\` — New developer guided tour (most important files in dependency order)
|
|
457
|
-
3. Additional tours for complex subsystems with >5 modules
|
|
458
|
-
|
|
459
|
-
**Critical rules:**
|
|
460
|
-
- Step content field is \`explanation\` (NOT \`description\`)
|
|
461
|
-
- Every step needs \`id\` (kebab-case) and \`stepNumber\` (integer, 1-based)
|
|
462
|
-
- \`learnsConcept\` is the concept tag (NOT \`highlights\`)
|
|
463
|
-
- \`dependencies\` array uses step \`id\` values in \`{source, target}\` objects
|
|
464
|
-
- Root MUST have \`title\`, \`description\`, \`estimatedTime\`
|
|
465
|
-
|
|
466
|
-
### Phase 4: Inject Data into HTML Templates
|
|
467
|
-
|
|
468
|
-
Use PowerShell to inject JSON data into the viewer template HTML files.
|
|
469
|
-
|
|
470
|
-
**Template locations:**
|
|
471
|
-
- C4 viewer: \`C:\\Users\\AnVPX\\.copilot\\skills\\c4-architecture\\assets\\c4-viewer.html\` (tag: \`id="diagram-data"\`)
|
|
472
|
-
- Tour viewer: \`C:\\Users\\AnVPX\\.copilot\\skills\\docs\\assets\\tour-viewer.html\` (tag: \`id="tour-data"\`)
|
|
473
|
-
|
|
474
|
-
**Injection procedure (for EACH JSON file):**
|
|
475
|
-
|
|
476
|
-
\`\`\`powershell
|
|
477
|
-
$template = [System.IO.File]::ReadAllText("TEMPLATE_PATH")
|
|
478
|
-
$startTag = '<script type="application/json" id="TARGET_ID">'
|
|
479
|
-
$startIdx = $template.IndexOf($startTag)
|
|
480
|
-
if ($startIdx -lt 0) { throw "Tag not found" }
|
|
481
|
-
$contentStart = $startIdx + $startTag.Length
|
|
482
|
-
$endIdx = $template.IndexOf('<\/script>', $contentStart)
|
|
483
|
-
|
|
484
|
-
$before = $template.Substring(0, $contentStart)
|
|
485
|
-
$after = $template.Substring($endIdx)
|
|
486
|
-
$data = Get-Content "JSON_PATH" -Raw
|
|
487
|
-
|
|
488
|
-
$output = $before + [char]10 + $data + [char]10 + $after
|
|
489
|
-
[System.IO.File]::WriteAllText("OUTPUT_PATH", $output, [System.Text.Encoding]::UTF8)
|
|
490
|
-
\`\`\`
|
|
491
|
-
|
|
492
|
-
**Output file layout:**
|
|
493
|
-
\`\`\`
|
|
494
|
-
docs/
|
|
495
|
-
architecture/interactive/
|
|
496
|
-
system-context.json # Data
|
|
497
|
-
system-context.html # Injected viewer (from c4-viewer.html)
|
|
498
|
-
containers.json
|
|
499
|
-
containers.html
|
|
500
|
-
tours/interactive/
|
|
501
|
-
architecture-overview.json # Data
|
|
502
|
-
architecture-overview.html # Injected viewer (from tour-viewer.html)
|
|
503
|
-
onboarding.json
|
|
504
|
-
onboarding.html
|
|
505
|
-
\`\`\`
|
|
506
|
-
|
|
507
|
-
**Rules:**
|
|
508
|
-
- JSON + HTML MUST be siblings in the same \`interactive/\` directory
|
|
509
|
-
- NEVER use \`inject-viewer.mjs\` — use the PowerShell procedure above
|
|
510
|
-
- Verify \`$startIdx -ge 0\` before proceeding
|
|
511
|
-
|
|
512
|
-
### Phase 5: Browser Verification (MANDATORY)
|
|
513
|
-
|
|
514
|
-
**Every generated HTML file MUST be tested before presenting to user.**
|
|
515
|
-
|
|
516
|
-
\`\`\`
|
|
517
|
-
# 1. Serve the docs folder
|
|
518
|
-
run_in_terminal("npx -y serve docs -l 4000 --no-clipboard", mode: "async")
|
|
519
|
-
|
|
520
|
-
# 2. Open each viewer
|
|
521
|
-
browser({ action: 'open', url: 'http://localhost:4000/architecture/interactive/system-context.html', mode: 'ui', waitUntil: 'networkidle' })
|
|
522
|
-
|
|
523
|
-
# 3. Read accessibility snapshot
|
|
524
|
-
browser({ action: 'read', pageId: '<id>', readMode: 'snapshot' })
|
|
525
|
-
|
|
526
|
-
# 4. Verify content renders:
|
|
527
|
-
# C4: nodes with labels, edges, Zoom In/Out/Fit buttons, Mini Map
|
|
528
|
-
# Tour: step numbers + titles, Prev/Next buttons, explanation text, file paths
|
|
529
|
-
|
|
530
|
-
# 5. If blank or errors → fix JSON schema → re-inject → re-test
|
|
531
|
-
|
|
532
|
-
# 6. Clean up
|
|
533
|
-
browser({ action: 'session', sessionAction: 'close', pageId: '<id>' })
|
|
534
|
-
kill_terminal(<serve-terminal-id>)
|
|
535
|
-
\`\`\`
|
|
536
|
-
|
|
537
|
-
**Verification checklist:**
|
|
538
|
-
|
|
539
|
-
| Viewer | Must see in snapshot | Failure indicator |
|
|
540
|
-
|--------|---------------------|-------------------|
|
|
541
|
-
| C4 | Node labels, edge groups, Zoom/Fit buttons, Mini Map | Empty page, "Error", no nodes |
|
|
542
|
-
| Tour | Step numbers + titles, Prev/Next, explanation text | Blank panel, "undefined", no steps |
|
|
543
|
-
|
|
544
|
-
### Phase 6: Present Results
|
|
545
|
-
|
|
546
|
-
After ALL viewers pass verification:
|
|
547
|
-
|
|
548
|
-
1. List all generated files (JSON + HTML) with descriptions
|
|
549
|
-
2. Provide the serve command: \`npx -y serve docs -l 4000 --no-clipboard\`
|
|
550
|
-
3. List all viewer URLs (e.g., \`http://localhost:4000/architecture/interactive/system-context.html\`)
|
|
551
|
-
4. Note any issues found during verification
|
|
552
|
-
|
|
553
|
-
### Critical Rules
|
|
554
|
-
|
|
555
|
-
1. **NEVER skip browser verification** — a valid JSON can still produce a broken viewer
|
|
556
|
-
2. **NEVER use \`file:///\` URLs** — CORS blocks ES modules; always serve via HTTP
|
|
557
|
-
3. **NEVER use \`inject-viewer.mjs\`** — use the PowerShell injection procedure
|
|
558
|
-
4. **NEVER use \`elements\`/\`relationships\`** — the ReactFlow viewer uses \`nodes\`/\`edges\`
|
|
559
|
-
5. **NEVER omit \`id\` on edges** — ELK layout throws null errors
|
|
560
|
-
6. **NEVER use \`description\` in tour steps** — template reads \`explanation\`
|
|
561
|
-
7. **ALWAYS use \`npx -y\`** — without \`-y\` the command hangs on install prompt
|
|
562
|
-
8. **ALWAYS include \`layout\` object in C4 JSON** — ELK crashes without direction/spacing
|
|
563
|
-
9. **ALWAYS verify \`$startIdx -ge 0\`** before injection — missing tag = wrong template
|
|
564
|
-
10. **All data must come from AI Kit analysis tools** — never fabricate architecture`}};export{e as PROMPTS};
|
|
235
|
+
**Already provided by skills:** Phase detail (scan tools, knowledge graph construction, multi-agent dispatch, 7-doc templates, quality checklists). Load the \`docs\` skill and follow its workflow.`},"docs-site":{description:`Generate interactive HTML documentation — C4 architecture viewers and code tour walkthroughs with browser verification`,agent:`Orchestrator`,intent:`Generate interactive HTML documentation (C4 viewers + code tours)`,tools:[`onboard`,`analyze`,`produce_knowledge`,`graph`,`search`,`symbol`,`trace`,`file_summary`,`digest`,`knowledge`,`browser`,`present`,`check`,`git_context`,`measure`],content:"## Interactive Documentation Viewers\n\nGenerate C4 architecture viewers and code tour walkthroughs using maintained viewer assets.\n\n1. **Load the `c4-architecture` skill** — C4 JSON schema, viewer injection script, ELK auto-layout\n2. **Load the `docs` skill** — tour JSON schema, viewer injection, line validation\n3. **For C4 diagrams**: Follow c4-architecture skill workflow → generate JSON → use `scripts/inject-viewer.mjs` to inject into `assets/c4-viewer.html`\n4. **For code tours**: Follow docs skill tour-generation.md → generate tour JSON → use `scripts/inject-viewer.mjs` to inject into tour viewer\n5. **Browser verification**: Open each HTML via `serve` + `browser` tool to verify rendering\n6. **Serve**: `npx -y serve docs -l 4000 --no-clipboard`\n\n**JSON schemas, viewer rules, injection scripts, and verification checklist are in the loaded skills** — never hardcode them in commands."}};export{e as PROMPTS};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=`analyze.audit.blast_radius.changelog.check.checkpoint.codemod.config.data_transform.dead_symbols.delegate.describe_tool.diff_parse.digest.encode.env.eval.evidence_map.file_summary.find.flow.forge_classify.forge_ground.git_context.graph.guide.health.http.knowledge.lane.list_tools.lookup.measure.onboard.parse_output.present.process.produce_knowledge.queue.regex_test.reindex.rename.replay.restore.schema_validate.scope_map.search.search_tools.session_digest.signal.stash.status.symbol.test_run.time.trace.watch.web_fetch.web_search.workset`.split(`.`),t={orchestrator:[`memory`,`runCommand`,`switchAgent`,`newWorkspace`,`reviewPlan`,`killTerminal`,`createTask`,`terminal`,`terminalSel`,`lastCommand`,`problems`,`readFile`,`subagent`,`search`,`web`,`todo`,`searchSubagent`,`textSearch`,`browser`,`askQuestions`,`resolveMemoryFileUri`],researcher:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`search`,`web`,`browser`],reviewer:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`search`,`web`,`browser`],codeAgent:[`createTask`,`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`todo`,`browser`],debugger:[`terminal`,`problems`,`readFile`,`terminalSel`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`search`,`browser`],refactor:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`browser`],explorer:[`problems`,`readFile`,`search`,`fileSearch`,`listDir`,`textSearch`,`browser`],planner:[`terminal`,`problems`,`readFile`,`reviewPlan`,`memory`,`askQuestions`,`resolveMemoryFileUri`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`web`,`todo`,`searchSubagent`,`browser`],security:[`terminal`,`problems`,`readFile`,`subagent`,`search`,`web`,`browser`],documenter:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`web`,`browser`]},n={terminal:[`Bash`],problems:[`Read`],readFile:[`Read`],lastCommand:[`Bash`],subagent:[],createFile:[`Write`],editFiles:[`Edit`],rename:[`Write`],createDirectory:[`Write`],search:[`Read`],web:[`WebFetch`,`WebSearch`],todo:[`TodoRead`,`TodoWrite`],memory:[],runCommand:[`Bash`],switchAgent:[],newWorkspace:[`Bash`],reviewPlan:[],killTerminal:[`Bash`],createTask:[`Bash`],terminalSel:[`Bash`],fileSearch:[`Read`],listDir:[`Read`],textSearch:[`Read`],searchSubagent:[],browser:[],askQuestions:[],resolveMemoryFileUri:[]};export{e as AIKIT_TOOLS,n as CLAUDE_CODE_TOOL_MAP,t as IDE_CAPABILITIES};
|
|
1
|
+
const e=`analyze.audit.blast_radius.browser.changelog.check.checkpoint.codemod.config.data_transform.dead_symbols.delegate.describe_tool.diff_parse.digest.encode.env.eval.evidence_map.file_summary.find.flow.forge_classify.forge_ground.git_context.graph.guide.health.http.knowledge.lane.list_tools.lookup.measure.onboard.parse_output.present.process.produce_knowledge.queue.regex_test.reindex.rename.replay.restore.schema_validate.scope_map.search.search_tools.session_digest.signal.stash.status.symbol.test_run.time.trace.watch.web_fetch.web_search.workset`.split(`.`),t={orchestrator:[`memory`,`runCommand`,`switchAgent`,`newWorkspace`,`reviewPlan`,`killTerminal`,`createTask`,`terminal`,`terminalSel`,`lastCommand`,`problems`,`readFile`,`subagent`,`search`,`web`,`todo`,`searchSubagent`,`textSearch`,`browser`,`askQuestions`,`resolveMemoryFileUri`],researcher:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`search`,`web`,`browser`],reviewer:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`search`,`web`,`browser`],codeAgent:[`createTask`,`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`todo`,`browser`],debugger:[`terminal`,`problems`,`readFile`,`terminalSel`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`search`,`browser`],refactor:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`browser`],explorer:[`problems`,`readFile`,`search`,`fileSearch`,`listDir`,`textSearch`,`browser`],planner:[`terminal`,`problems`,`readFile`,`reviewPlan`,`memory`,`askQuestions`,`resolveMemoryFileUri`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`web`,`todo`,`searchSubagent`,`browser`],security:[`terminal`,`problems`,`readFile`,`subagent`,`search`,`web`,`browser`],documenter:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`web`,`browser`]},n={terminal:[`Bash`],problems:[`Read`],readFile:[`Read`],lastCommand:[`Bash`],subagent:[],createFile:[`Write`],editFiles:[`Edit`],rename:[`Write`],createDirectory:[`Write`],search:[`Read`],web:[`WebFetch`,`WebSearch`],todo:[`TodoRead`,`TodoWrite`],memory:[],runCommand:[`Bash`],switchAgent:[],newWorkspace:[`Bash`],reviewPlan:[],killTerminal:[`Bash`],createTask:[`Bash`],terminalSel:[`Bash`],fileSearch:[`Read`],listDir:[`Read`],textSearch:[`Read`],searchSubagent:[],browser:[],askQuestions:[],resolveMemoryFileUri:[]};export{e as AIKIT_TOOLS,n as CLAUDE_CODE_TOOL_MAP,t as IDE_CAPABILITIES};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{c as e,l as t,n,o as r,r as i,t as a}from"./scaffold-BNPHP-QC.js";import{a as o,i as s,m as c,n as l,o as u,r as d,t as f}from"./templates-CztsaGb2.js";import{appendFileSync as p,existsSync as m,mkdirSync as h,readFileSync as g,unlinkSync as _,writeFileSync as v}from"node:fs";import{basename as y,resolve as b}from"node:path";import{homedir as x}from"node:os";import{AIKIT_PATHS as S,EMBEDDING_DEFAULTS as C,isUserInstalled as w}from"../../core/dist/index.js";function T(e){return m(b(e,`.cursor`))?`cursor`:m(b(e,`.claude`))?`claude-code`:m(b(e,`.windsurf`))?`windsurf`:m(b(e,`.zed`))?`zed`:m(b(e,`.idea`))?`intellij`:m(b(e,`.opencode`))?`opencode`:m(b(e,`AGENTS.md`))?`hermes`:`copilot`}function E(e){let t=[];return m(b(e,`.cursor`))&&t.push(`cursor`),(m(b(e,`.claude`))||m(b(e,`CLAUDE.md`)))&&t.push(`claude-code`),m(b(e,`.windsurf`))&&t.push(`windsurf`),m(b(e,`.zed`))&&t.push(`zed`),m(b(e,`.idea`))&&t.push(`intellij`),m(b(e,`.gemini`))&&t.push(`gemini-cli`),(m(b(e,`.codex`))||m(b(e,`codex.md`)))&&t.push(`codex-cli`),(m(b(e,`.opencode`))||m(b(e,`OPENCODE.md`)))&&t.push(`opencode`),t.push(`copilot`),t.push(`hermes`),[...new Set(t)]}function D(e){return{servers:{[e]:{...s}}}}function O(e){let{type:t,...n}=s;return{mcpServers:{[e]:n}}}function k(e){let{type:t,...n}=s;return{context_servers:{[e]:{...n}}}}function A(e){let{type:t,...n}=s;return{mcp:{[e]:{type:`local`,command:[n.command,...n.args]}}}}const j={scaffoldDir:`general`,writeMcpConfig(e,t){let n=b(e,`.vscode`),r=b(n,`mcp.json`);m(r)||(h(n,{recursive:!0}),v(r,`${JSON.stringify(D(t),null,2)}\n`,`utf-8`),console.log(` Created .vscode/mcp.json`))},writeInstructions(e,t){let n=b(e,`.github`),r=b(n,`copilot-instructions.md`);h(n,{recursive:!0}),v(r,l(y(e),t),`utf-8`),console.log(` Updated .github/copilot-instructions.md`)},writeAgentsMd(e,t){v(b(e,`AGENTS.md`),f(y(e),t),`utf-8`),console.log(` Updated AGENTS.md`)}};function M(e){let{type:t,...n}=s;return{mcpServers:{[e]:{command:n.command,args:[...n.args]}}}}const N=`Orchestrator`;function P(e){return{...M(e),agent:N}}function F(e,t){let n=t??b(x(),`.claude`),r=b(n,`settings.json`),i=M(e);if(!m(r)){h(n,{recursive:!0});let t=P(e);v(r,`${JSON.stringify(t,null,2)}\n`,`utf-8`),console.log(` Created ${r} — MCP server + default agent`);return}try{let e=JSON.parse(g(r,`utf-8`));e.mcpServers={...e.mcpServers||{},...i.mcpServers},e.agent=N,v(r,`${JSON.stringify(e,null,2)}\n`,`utf-8`),console.log(` Updated ${r} — MCP server + default agent`)}catch{console.warn(` ⚠ ${r} contains invalid JSON — skipping config merge`)}}const I={scaffoldDir:`general`,writeMcpConfig(e,t){F(t);let n=b(e,`.mcp.json`);m(n)||(v(n,`${JSON.stringify(O(t),null,2)}\n`,`utf-8`),console.log(` Created .mcp.json`))},writeInstructions(e,t){let n=b(e,`CLAUDE.md`),r=y(e);v(n,`${l(r,t)}\n---\n\n${f(r,t)}`,`utf-8`),console.log(` Updated CLAUDE.md`)},writeAgentsMd(e,t){}},L={scaffoldDir:`general`,writeMcpConfig(e,t){let n=b(e,`.cursor`),r=b(n,`mcp.json`);m(r)||(h(n,{recursive:!0}),v(r,`${JSON.stringify(O(t),null,2)}\n`,`utf-8`),console.log(` Created .cursor/mcp.json`))},writeInstructions(e,t){let n=b(e,`.cursor`,`rules`),r=b(n,`aikit.mdc`);h(n,{recursive:!0});let i=y(e);v(r,`${l(i,t)}\n---\n\n${f(i,t)}`,`utf-8`),console.log(` Updated .cursor/rules/aikit.mdc`);let a=b(n,`kb.mdc`);m(a)&&a!==r&&(_(a),console.log(` Removed legacy .cursor/rules/kb.mdc`))},writeAgentsMd(e,t){}},R={scaffoldDir:`general`,writeMcpConfig(e,t){let n=b(e,`.vscode`),r=b(n,`mcp.json`);m(r)||(h(n,{recursive:!0}),v(r,`${JSON.stringify(D(t),null,2)}\n`,`utf-8`),console.log(` Created .vscode/mcp.json (Windsurf-compatible)`))},writeInstructions(e,t){let n=b(e,`.windsurfrules`),r=y(e);v(n,`${l(r,t)}\n---\n\n${f(r,t)}`,`utf-8`),console.log(` Updated .windsurfrules`)},writeAgentsMd(e,t){}},z={scaffoldDir:`general`,writeMcpConfig(e,t){let n=b(e,`.zed`),r=b(n,`settings.json`);if(h(n,{recursive:!0}),!m(r))v(r,`${JSON.stringify(k(t),null,2)}\n`,`utf-8`),console.log(` Created .zed/settings.json`);else{let e;try{e=JSON.parse(g(r,`utf-8`))}catch{console.warn(` ⚠ .zed/settings.json contains invalid JSON — skipping MCP config merge`);return}e.context_servers?.[t]||(e.context_servers={...e.context_servers,...k(t).context_servers},v(r,`${JSON.stringify(e,null,2)}\n`,`utf-8`),console.log(` Updated .zed/settings.json with context_servers`))}},writeInstructions(e,t){let n=b(e,`.rules`),r=y(e);v(n,`${l(r,t)}\n---\n\n${f(r,t)}`,`utf-8`),console.log(` Updated .rules`)},writeAgentsMd(e,t){}},B={scaffoldDir:`general`,writeMcpConfig(e,t){let n=b(e,`mcp.json`);m(n)||(v(n,`${JSON.stringify(O(t),null,2)}\n`,`utf-8`),console.log(` Created mcp.json`))},writeInstructions(e,t){let n=b(e,`.aiassistant`,`rules`),r=b(n,`aikit.md`);h(n,{recursive:!0});let i=y(e);v(r,`${l(i,t)}\n---\n\n${f(i,t)}`,`utf-8`),console.log(` Updated .aiassistant/rules/aikit.md`)},writeAgentsMd(e,t){}},V={scaffoldDir:`general`,writeMcpConfig(e,t){let n=b(e,`.opencode`),r=b(n,`opencode.json`);m(r)||(h(n,{recursive:!0}),v(r,`${JSON.stringify(A(t),null,2)}\n`,`utf-8`),console.log(` Created .opencode/opencode.json`))},writeInstructions(e,t){let n=b(e,`OPENCODE.md`),r=y(e);v(n,`${l(r,t)}\n---\n\n${f(r,t)}`,`utf-8`),console.log(` Updated OPENCODE.md`)},writeAgentsMd(e,t){}},H={scaffoldDir:`general`,writeMcpConfig(e,t){},writeInstructions(e,t){let n=b(e,`AGENTS.md`),r=y(e);v(n,`${l(r,t)}\n---\n\n${f(r,t)}`,`utf-8`),console.log(` Updated AGENTS.md (Hermes)`)},writeAgentsMd(e,t){}};function U(e){switch(e){case`copilot`:return j;case`claude-code`:return I;case`cursor`:return L;case`windsurf`:return R;case`zed`:return z;case`intellij`:return B;case`opencode`:return V;case`hermes`:return H;case`gemini-cli`:case`codex-cli`:return j}}const W={serverName:o,sources:[{path:`.`,excludePatterns:[`**/node_modules/**`,`**/dist/**`,`**/build/**`,`**/.git/**`,`**/${S.data}/**`,`**/coverage/**`,`**/*.min.js`,`**/package-lock.json`,`**/pnpm-lock.yaml`]}],indexing:{chunkSize:1500,chunkOverlap:200,minChunkSize:100},embedding:{model:C.model,dimensions:C.dimensions},store:{backend:`sqlite-vec`,path:S.data},curated:{path:S.aiCurated}};function G(e,t){let n=b(e,`aikit.config.json`);return m(n)&&!t?(console.log(`aikit.config.json already exists. Use --force to overwrite.`),!1):(v(n,`${JSON.stringify(W,null,2)}\n`,`utf-8`),console.log(` Created aikit.config.json`),!0)}function K(e){let t=b(e,`.gitignore`),n=[{dir:`.flows/`,label:`AI Kit flow runs`}];if(m(t)){let e=g(t,`utf-8`),r=n.filter(t=>!e.includes(t.dir));r.length>0&&(p(t,`\n${r.map(e=>`# ${e.label}\n${e.dir}`).join(`
|
|
2
|
-
`)}\n`,`utf-8`),console.log(` Added ${r.map(e=>e.dir).join(`, `)} to .gitignore`))}else v(t,`${n.map(e=>`# ${e.label}\n${e.dir}`).join(`
|
|
3
|
-
`)}\n`,`utf-8`),console.log(` Created .gitignore with AI Kit entries`)}function q(){return W.serverName}const J=[`decisions`,`patterns`,`conventions`,`troubleshooting`];function Y(e){let t=b(e,`.ai`,`curated`);m(t)||(h(t,{recursive:!0}),console.log(` Created .ai/curated/`));for(let e of J){let n=b(t,e);m(n)||h(n,{recursive:!0})}console.log(` Created .ai/curated/{${J.join(`,`)}}/`)}function X(e){switch(e){case`zed`:return`zed`;case`intellij`:return`intellij`;case`claude-code`:return`claude-code`;case`gemini-cli`:return`gemini`;case`codex-cli`:return`codex`;case`opencode`:return`opencode`;case`hermes`:return`hermes`;default:return`copilot`}}async function Z(n){let i=process.cwd();if(!G(i,n.force))return;K(i);let a=q(),o=U(T(i));o.writeMcpConfig(i,a),o.writeInstructions(i,a),o.writeAgentsMd(i,a);let s=c(),l=JSON.parse(g(b(s,`package.json`),`utf-8`)).version;await t(i,s,[...u],l,n.force),await r(i,s,[...d],l,n.force);let f=E(i),p=new Set;for(let t of f){let r=X(t);p.has(r)||(p.add(r),await e(i,s,r,l,n.force))}Y(i),console.log(`
|
|
4
|
-
AI Kit initialized! Next steps:`),console.log(` aikit reindex Index your codebase`),console.log(` aikit search Search indexed content`),console.log(` aikit serve Start MCP server for IDE integration`),w()&&console.log(`
|
|
5
|
-
Note: User-level AI Kit is also installed. This workspace uses its own local data store.`)}async function Q(e){w()?await $(e):await Z(e)}async function $(t){let n=process.cwd(),i=q(),a=U(T(n));a.writeInstructions(n,i),a.writeAgentsMd(n,i);let o=c(),s=JSON.parse(g(b(o,`package.json`),`utf-8`)).version,l=E(n),u=new Set;for(let r of l){let i=X(r);u.has(i)||(u.add(i),await e(n,o,i,s,t.force))}await r(n,o,[...d],s,t.force),Y(n),K(n),console.log(`
|
|
6
|
-
Workspace scaffolded for user-level AI Kit! Files added:`),console.log(` Instruction files (AGENTS.md, copilot-instructions.md, etc.)`),console.log(` .ai/curated/ directories`),console.log(` .github/agents/ & .github/prompts/`),console.log(`
|
|
7
|
-
The user-level AI Kit server will auto-index this workspace when opened in your IDE.`)}async function ee(){let e=process.cwd(),t=E(e),r=c(),o=[...await i(e,r,[...u])],s=new Set;for(let i of t){let t=X(i);s.has(t)||(s.add(t),o.push(...await n(e,r,t)))}o.push(...await a(e,r,[...d]));let l={summary:{total:o.length,new:o.filter(e=>e.status===`new`).length,outdated:o.filter(e=>e.status===`outdated`).length,current:o.filter(e=>e.status===`current`).length},files:o};console.log(JSON.stringify(l,null,2))}export{ee as guideProject,Z as initProject,$ as initScaffoldOnly,Q as initSmart};
|