pi-aia-asf 0.9.0 → 0.9.1

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 (3) hide show
  1. package/CHANGELOG.md +4 -2
  2. package/index.ts +27 -3
  3. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,12 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ## [0.9.0] - 2026-09-27
10
+ ## [0.9.1] - 2026-10-03
11
11
 
12
12
  ### Added
13
13
 
14
- - (describe changes for 0.9.0)
14
+ - (describe changes for 0.9.1)
15
+
15
16
 
17
+ ## [0.9.0] - 2026-09-27
16
18
 
17
19
  ### Added
18
20
 
package/index.ts CHANGED
@@ -271,7 +271,14 @@ export default function register(pi: ExtensionAPI): void {
271
271
  return state.current ? `ASF phase → ${phase}${workType ? ` (${workType})` : ""}` : "ASF session ended.";
272
272
  };
273
273
 
274
- pi.registerCommand("asf", async (args: string[], ctx: ExtensionCommandContext) => {
274
+ // pi >= 1.0 contract: registerCommand(name, { description, handler }) where
275
+ // handler receives the raw argument STRING and returns void — output goes to
276
+ // ctx.ui.notify(). The command body stays a string-returning function so the
277
+ // gate text is testable without a UI.
278
+ const runAsf = async (
279
+ args: string[],
280
+ ctx: ExtensionCommandContext,
281
+ ): Promise<string> => {
275
282
  const sub = (args[0] || "").toLowerCase();
276
283
 
277
284
  switch (sub) {
@@ -420,10 +427,20 @@ export default function register(pi: ExtensionAPI): void {
420
427
  dependencySummary()
421
428
  );
422
429
  }
430
+ };
431
+
432
+ pi.registerCommand("asf", {
433
+ description:
434
+ "Agentic Software Factory — /asf new|feature|bugfix|refactor|small|status|verify|health|abort",
435
+ handler: async (args: string, ctx: ExtensionCommandContext) => {
436
+ const argv = args.trim() ? args.trim().split(/\s+/) : [];
437
+ const out = await runAsf(argv, ctx);
438
+ if (out) ctx.ui.notify(out, "info");
439
+ },
423
440
  });
424
441
 
425
- // Plan-approval helper: /asf approve marks the plan as approved (records Gate 5)
426
- pi.registerCommand("asf-approve", async (_args: string[], ctx: ExtensionCommandContext) => {
442
+ // Plan-approval helper: /asf-approve records Gate 5 approval (requires PLAN.md)
443
+ const runApprove = async (ctx: ExtensionCommandContext): Promise<string> => {
427
444
  const project = projectName();
428
445
  const state = await loadState(project);
429
446
  if (!state.current) return "No active ASF session — start one with /asf new|feature|bugfix|refactor.";
@@ -447,5 +464,12 @@ export default function register(pi: ExtensionAPI): void {
447
464
  "Test-first, strict codebase isolation, regression test per bug fixed.\n" +
448
465
  "Run /asf verify before delivery."
449
466
  );
467
+ };
468
+
469
+ pi.registerCommand("asf-approve", {
470
+ description: "Record Gate 5 plan approval (requires PLAN.md) and begin implementation",
471
+ handler: async (_args: string, ctx: ExtensionCommandContext) => {
472
+ ctx.ui.notify(await runApprove(ctx), "info");
473
+ },
450
474
  });
451
475
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-aia-asf",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "Ai Applied Agentic Software Factory — codifies the full software development flow: intake, research, spec capture, adversarial analysis, planning with approval gates, test-first implementation, and release. Requires pi-vigilant, pi-smart-web-search, pi-smart-fetch, and pi-aia-browser.",
5
5
  "keywords": [
6
6
  "pi-package",