@wizdear/atlas-code 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-factory.d.ts +2 -4
  3. package/dist/agent-factory.d.ts.map +1 -1
  4. package/dist/agent-factory.js +9 -12
  5. package/dist/agent-factory.js.map +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +64 -16
  8. package/dist/cli.js.map +1 -1
  9. package/dist/discovery.d.ts +0 -2
  10. package/dist/discovery.d.ts.map +1 -1
  11. package/dist/discovery.js +0 -1
  12. package/dist/discovery.js.map +1 -1
  13. package/dist/extension.d.ts.map +1 -1
  14. package/dist/extension.js +23 -64
  15. package/dist/extension.js.map +1 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/orchestrator.d.ts +0 -2
  21. package/dist/orchestrator.d.ts.map +1 -1
  22. package/dist/orchestrator.js +0 -1
  23. package/dist/orchestrator.js.map +1 -1
  24. package/dist/pipeline.d.ts +0 -5
  25. package/dist/pipeline.d.ts.map +1 -1
  26. package/dist/pipeline.js +0 -3
  27. package/dist/pipeline.js.map +1 -1
  28. package/dist/planner.d.ts +0 -2
  29. package/dist/planner.d.ts.map +1 -1
  30. package/dist/planner.js +0 -6
  31. package/dist/planner.js.map +1 -1
  32. package/dist/roles/cicd.d.ts +1 -1
  33. package/dist/roles/cicd.d.ts.map +1 -1
  34. package/dist/roles/cicd.js +5 -0
  35. package/dist/roles/cicd.js.map +1 -1
  36. package/dist/roles/reviewer.d.ts +1 -1
  37. package/dist/roles/reviewer.d.ts.map +1 -1
  38. package/dist/roles/reviewer.js +7 -1
  39. package/dist/roles/reviewer.js.map +1 -1
  40. package/dist/roles/standards-enricher.d.ts +1 -1
  41. package/dist/roles/standards-enricher.d.ts.map +1 -1
  42. package/dist/roles/standards-enricher.js +8 -0
  43. package/dist/roles/standards-enricher.js.map +1 -1
  44. package/dist/roles/tester.d.ts +1 -1
  45. package/dist/roles/tester.d.ts.map +1 -1
  46. package/dist/roles/tester.js +7 -0
  47. package/dist/roles/tester.js.map +1 -1
  48. package/dist/standards.d.ts +37 -11
  49. package/dist/standards.d.ts.map +1 -1
  50. package/dist/standards.js +71 -90
  51. package/dist/standards.js.map +1 -1
  52. package/dist/step-executor.d.ts +13 -2
  53. package/dist/step-executor.d.ts.map +1 -1
  54. package/dist/step-executor.js +125 -29
  55. package/dist/step-executor.js.map +1 -1
  56. package/dist/store.d.ts +0 -10
  57. package/dist/store.d.ts.map +1 -1
  58. package/dist/store.js +0 -41
  59. package/dist/store.js.map +1 -1
  60. package/dist/system-architect.d.ts +0 -2
  61. package/dist/system-architect.d.ts.map +1 -1
  62. package/dist/system-architect.js +0 -6
  63. package/dist/system-architect.js.map +1 -1
  64. package/package.json +1 -1
package/dist/extension.js CHANGED
@@ -55,6 +55,16 @@ async function gitPush(cwd) {
55
55
  return false;
56
56
  }
57
57
  }
58
+ /** Check if the cwd is inside a git repository. */
59
+ async function isGitRepo(cwd) {
60
+ try {
61
+ await execFileAsync("git", ["rev-parse", "--git-dir"], { cwd });
62
+ return true;
63
+ }
64
+ catch {
65
+ return false;
66
+ }
67
+ }
58
68
  /** Check if a local git branch exists. */
59
69
  async function branchExists(cwd, branch) {
60
70
  try {
@@ -150,18 +160,17 @@ async function cleanupQmdCollections(cwd) {
150
160
  }
151
161
  }
152
162
  }
153
- /** Initialize QMD collections for .vibe/features/ and .vibe/standards/. Idempotent. */
163
+ /** Initialize QMD collection for .vibe/features/. Idempotent. */
154
164
  async function initQmdCollections(cwd) {
155
165
  if (!(await isQmdInstalled()))
156
166
  return;
157
167
  const indexName = basename(cwd);
158
168
  const env = { ...process.env, QMD_EMBED_MODEL: QMD_EMBED_MODEL_URI };
159
169
  const featuresDir = join(cwd, ".vibe", "features");
160
- const standardsDir = join(cwd, ".vibe", "standards");
161
170
  try {
162
- // Check if collections already exist
171
+ // Check if collection already exists
163
172
  const { stdout } = await execFileAsync("qmd", ["--index", indexName, "collection", "list"], { cwd });
164
- if (stdout.includes("vibe-artifacts") && stdout.includes("vibe-standards"))
173
+ if (stdout.includes("vibe-artifacts"))
165
174
  return;
166
175
  }
167
176
  catch {
@@ -177,15 +186,6 @@ async function initQmdCollections(cwd) {
177
186
  "qmd://vibe-artifacts",
178
187
  "Feature artifacts: spec, design, review, test-report, diagnosis, impact-report",
179
188
  ], { cwd });
180
- await execFileAsync("qmd", ["--index", indexName, "collection", "add", standardsDir, "--name", "vibe-standards", "--mask", "**/*.md"], { cwd });
181
- await execFileAsync("qmd", [
182
- "--index",
183
- indexName,
184
- "context",
185
- "add",
186
- "qmd://vibe-standards",
187
- "Project coding standards, architecture principles, testing policies",
188
- ], { cwd });
189
189
  await execFileAsync("qmd", ["--index", indexName, "embed"], { cwd, env });
190
190
  }
191
191
  catch {
@@ -310,15 +310,13 @@ PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
310
310
  INDEX_NAME=$(basename "$PROJECT_ROOT")
311
311
  qmd --index "$INDEX_NAME" status
312
312
  \`\`\`
313
- If no collections exist, initialize both artifacts and standards:
313
+ If no collections exist, initialize the artifacts collection:
314
314
  \`\`\`bash
315
315
  export QMD_EMBED_MODEL="${QMD_EMBED_MODEL_URI}"
316
316
  PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
317
317
  INDEX_NAME=$(basename "$PROJECT_ROOT")
318
318
  qmd --index "$INDEX_NAME" collection add "$PROJECT_ROOT/.vibe/features" --name vibe-artifacts --mask "**/*.md"
319
319
  qmd --index "$INDEX_NAME" context add qmd://vibe-artifacts "Feature artifacts: spec, design, review, test-report, diagnosis, impact-report"
320
- qmd --index "$INDEX_NAME" collection add "$PROJECT_ROOT/.vibe/standards" --name vibe-standards --mask "**/*.md"
321
- qmd --index "$INDEX_NAME" context add qmd://vibe-standards "Project coding standards, architecture principles, testing policies"
322
320
  qmd --index "$INDEX_NAME" embed
323
321
  \`\`\`
324
322
 
@@ -331,12 +329,6 @@ export QMD_EMBED_MODEL="${QMD_EMBED_MODEL_URI}"
331
329
  INDEX_NAME=$(basename "$(git rev-parse --show-toplevel 2>/dev/null || pwd)")
332
330
  qmd --index "$INDEX_NAME" search "<keywords>" -c vibe-artifacts -n 5 --min-score 0.3 --json
333
331
  \`\`\`
334
- Search coding standards:
335
- \`\`\`bash
336
- export QMD_EMBED_MODEL="${QMD_EMBED_MODEL_URI}"
337
- INDEX_NAME=$(basename "$(git rev-parse --show-toplevel 2>/dev/null || pwd)")
338
- qmd --index "$INDEX_NAME" search "<keywords>" -c vibe-standards -n 5 --min-score 0.3 --json
339
- \`\`\`
340
332
  If results are returned, read the referenced files and factor past decisions into current work.
341
333
 
342
334
  ### During Review
@@ -680,35 +672,6 @@ function createAgentProgressHandler(ctx, label, pipelineEditor, projectRoot) {
680
672
  function createAbortHandle() {
681
673
  return { aborted: false };
682
674
  }
683
- // ─── Skill Discovery ─────────────────────────────────────────────────────────
684
- /**
685
- * Scans .vibe/skills/ and builds a lightweight index of available skills.
686
- * Contains only each skill's name, description, and file path.
687
- * Agents load the full content via the read tool when needed.
688
- */
689
- async function buildAvailableSkillsPrompt(store) {
690
- const skills = await store.listSkills();
691
- if (skills.length === 0)
692
- return "";
693
- const entries = [];
694
- for (const skillName of skills) {
695
- const description = await store.readSkillDescription(skillName);
696
- if (description) {
697
- const skillPath = `.vibe/skills/${skillName}/SKILL.md`;
698
- entries.push(`- **${skillName}** (${skillPath}): ${description}`);
699
- }
700
- }
701
- if (entries.length === 0)
702
- return "";
703
- return [
704
- "## Available Skills",
705
- "",
706
- "The following skills provide specialized instructions for this project.",
707
- "Use the read tool to load a skill's SKILL.md when your current task matches its description.",
708
- "",
709
- ...entries,
710
- ].join("\n");
711
- }
712
675
  // ─── Pipeline Editor Helpers ──────────────────────────────────────────────────
713
676
  /**
714
677
  * Activates the pipeline editor by replacing the default editor with PipelineEditorComponent.
@@ -1555,13 +1518,14 @@ async function handleInit(store, ctx) {
1555
1518
  await writeFile(filePath, content, "utf-8");
1556
1519
  }
1557
1520
  }
1558
- // Create QMD memory skill template
1559
- const qmdSkillPath = join(store.getSkillsDir(), "qmd-memory", "SKILL.md");
1521
+ // Create QMD memory skill template in .pi/skills/ (pi's native skill system)
1522
+ const qmdSkillDir = join(store.getProjectRoot(), ".pi", "skills", "qmd-memory");
1523
+ const qmdSkillPath = join(qmdSkillDir, "SKILL.md");
1560
1524
  try {
1561
1525
  await access(qmdSkillPath);
1562
1526
  }
1563
1527
  catch {
1564
- await mkdir(join(store.getSkillsDir(), "qmd-memory"), { recursive: true });
1528
+ await mkdir(qmdSkillDir, { recursive: true });
1565
1529
  await writeFile(qmdSkillPath, QMD_SKILL_TEMPLATE, "utf-8");
1566
1530
  }
1567
1531
  // Clean up stale QMD collections and initialize fresh ones if qmd is installed
@@ -1964,6 +1928,11 @@ async function handleWorkflow(store, ctx, workflowType, _requirement, options, l
1964
1928
  await handleInit(store, ctx);
1965
1929
  }
1966
1930
  let config = await store.loadConfig();
1931
+ // Auto-init git repository if not present
1932
+ if (!(await isGitRepo(ctx.cwd))) {
1933
+ await execFileAsync("git", ["init"], { cwd: ctx.cwd });
1934
+ vibeMilestone("Initialized git repository");
1935
+ }
1967
1936
  // Resolve baseBranch: config > existing orchestration state > prompt user
1968
1937
  if (!config.baseBranch) {
1969
1938
  const existingOrcState = (await store.hasOrchestrationState()) ? await store.loadOrchestrationState() : undefined;
@@ -2018,7 +1987,6 @@ async function handleWorkflow(store, ctx, workflowType, _requirement, options, l
2018
1987
  }
2019
1988
  }
2020
1989
  const getApiKey = (provider) => ctx.modelRegistry.getApiKeyForProvider(provider);
2021
- const availableSkills = await buildAvailableSkillsPrompt(store);
2022
1990
  const requestApproval = async (_step, _fId, summary) => {
2023
1991
  _pi.events.emit("vibe:gate", { featureId: _fId, summary });
2024
1992
  // Auto-expand messages so the user can review full content before deciding
@@ -2142,7 +2110,6 @@ async function handleWorkflow(store, ctx, workflowType, _requirement, options, l
2142
2110
  }
2143
2111
  },
2144
2112
  feedback: discoveryFeedback,
2145
- availableSkills,
2146
2113
  onAgentCreated: (agent) => {
2147
2114
  abortHandle.currentAgent = agent;
2148
2115
  },
@@ -2231,7 +2198,6 @@ async function handleWorkflow(store, ctx, workflowType, _requirement, options, l
2231
2198
  vibeAgentResponse(`System design (${lines} lines)`, msg);
2232
2199
  },
2233
2200
  feedback: systemDesignFeedback,
2234
- availableSkills,
2235
2201
  onAgentCreated: (agent) => {
2236
2202
  abortHandle.currentAgent = agent;
2237
2203
  },
@@ -2328,7 +2294,6 @@ async function handleWorkflow(store, ctx, workflowType, _requirement, options, l
2328
2294
  projectRoot: ctx.cwd,
2329
2295
  model: ctx.model,
2330
2296
  getApiKey,
2331
- availableSkills,
2332
2297
  featureContext: analyzerFeatureContext,
2333
2298
  });
2334
2299
  abortHandle.currentAgent = analyzerAgent;
@@ -2393,7 +2358,6 @@ async function handleWorkflow(store, ctx, workflowType, _requirement, options, l
2393
2358
  vibeAgentResponse(`Planner response (${lines} lines)`, msg);
2394
2359
  },
2395
2360
  feedback: planFeedback,
2396
- availableSkills,
2397
2361
  onAgentCreated: (agent) => {
2398
2362
  abortHandle.currentAgent = agent;
2399
2363
  },
@@ -2496,7 +2460,6 @@ async function handleWorkflow(store, ctx, workflowType, _requirement, options, l
2496
2460
  projectRoot: ctx.cwd,
2497
2461
  model: ctx.model,
2498
2462
  getApiKey,
2499
- availableSkills,
2500
2463
  featureContext: analyzerFeatureContext,
2501
2464
  });
2502
2465
  abortHandle.currentAgent = analyzerAgent;
@@ -2544,7 +2507,6 @@ async function handleWorkflow(store, ctx, workflowType, _requirement, options, l
2544
2507
  onAgentCreated: editorCallbacks.onAgentCreated,
2545
2508
  onAgentFinished: editorCallbacks.onAgentFinished,
2546
2509
  logger,
2547
- availableSkills,
2548
2510
  });
2549
2511
  for await (const event of orchestrationGen) {
2550
2512
  // Update tool step context for chat messages
@@ -2649,7 +2611,6 @@ async function handleWorkflow(store, ctx, workflowType, _requirement, options, l
2649
2611
  singleEditorCallbacks.onAgentFinished();
2650
2612
  },
2651
2613
  logger,
2652
- availableSkills,
2653
2614
  });
2654
2615
  abortHandle.currentRunner = runner;
2655
2616
  activePipelines.set(featureId, { pipeline, runner });
@@ -3120,7 +3081,6 @@ async function handleResume(store, ctx, featureId, logger) {
3120
3081
  pipelineEditor.setTitle(`Vibe ─ ${WORKFLOW_TITLES[orcState.workflowType] ?? "Resuming"}`);
3121
3082
  const resumeToolCtx = { featureId: "", role: "", action: "" };
3122
3083
  const resumeOrcCallbacks = createEditorAgentCallbacks(pipelineEditor, ctx.cwd, resumeAbortHandle, resumeToolCtx);
3123
- const availableSkills = await buildAvailableSkillsPrompt(store);
3124
3084
  try {
3125
3085
  for await (const event of runOrchestration({
3126
3086
  store,
@@ -3135,7 +3095,6 @@ async function handleResume(store, ctx, featureId, logger) {
3135
3095
  onAgentCreated: resumeOrcCallbacks.onAgentCreated,
3136
3096
  onAgentFinished: resumeOrcCallbacks.onAgentFinished,
3137
3097
  logger,
3138
- availableSkills,
3139
3098
  })) {
3140
3099
  // Update tool step context for chat messages
3141
3100
  if (event.type === "feature_start")