@apexops/cli 0.10.0-next.3 → 0.10.0-next.5

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 (33) hide show
  1. package/README.md +40 -0
  2. package/assets/client-projection-metadata/copilot-cli-agent-tools.json +12 -0
  3. package/assets/client-projections/github-copilot-cli/.github/agents/apex-architect.agent.md +9 -8
  4. package/assets/client-projections/github-copilot-cli/.github/agents/apex-planner.agent.md +11 -8
  5. package/assets/client-projections/github-copilot-cli/.github/agents/apex-requirements.agent.md +23 -12
  6. package/assets/client-projections/github-copilot-cli/.github/agents/apex.agent.md +4 -0
  7. package/assets/client-projections/github-copilot-cli/.github/mcp.json +7 -0
  8. package/assets/client-projections/github-copilot-cli/.github/skills/apex-requirements/SKILL.md +7 -4
  9. package/assets/client-projections/github-copilot-vscode/.github/agents/apex-architect.agent.md +9 -8
  10. package/assets/client-projections/github-copilot-vscode/.github/agents/apex-planner.agent.md +11 -8
  11. package/assets/client-projections/github-copilot-vscode/.github/agents/apex-requirements.agent.md +23 -12
  12. package/assets/client-projections/github-copilot-vscode/.github/agents/apex-reviewer.agent.md +9 -5
  13. package/assets/client-projections/github-copilot-vscode/.github/agents/apex.agent.md +4 -0
  14. package/assets/client-projections/github-copilot-vscode/.github/skills/apex-requirements/SKILL.md +7 -4
  15. package/assets/config/runtime-bundle.v1.json +7 -7
  16. package/assets/customizations/.github/agents/apex-architect.agent.md +9 -8
  17. package/assets/customizations/.github/agents/apex-planner.agent.md +11 -8
  18. package/assets/customizations/.github/agents/apex-requirements.agent.md +23 -12
  19. package/assets/customizations/.github/agents/apex-reviewer.agent.md +9 -5
  20. package/assets/customizations/.github/agents/apex.agent.md +4 -0
  21. package/assets/customizations/.github/mcp.json +7 -0
  22. package/assets/customizations/.github/skills/apex-requirements/SKILL.md +7 -4
  23. package/assets/customizations/manifest.json +1 -1
  24. package/assets/manifest.json +58 -58
  25. package/dist/cli.d.ts +1 -0
  26. package/dist/cli.js +42 -2
  27. package/dist/mcp.js +89 -16
  28. package/dist/service.d.ts +46 -1
  29. package/dist/service.js +466 -41
  30. package/dist/state-transfer.js +23 -6
  31. package/dist/version.d.ts +1 -1
  32. package/dist/version.js +1 -1
  33. package/package.json +5 -5
@@ -11,8 +11,9 @@ tools:
11
11
  - apex/nextTask
12
12
  - apex/recordInput
13
13
  - apex/taskContext
14
- - apex/stageArtifact
15
- - apex/completeTask
14
+ - apex/requirementsComplete
15
+ - apex/reviewDecide
16
+ - apex/gateDecide
16
17
  - azure-resource-manager-mcp/get_retail_prices
17
18
  - azure-resource-manager-mcp/query_costs
18
19
  - azure-resource-manager-mcp/query_aks_costs
@@ -41,12 +42,16 @@ candidate Azure services without deciding architecture, and produces a human-rev
41
42
 
42
43
  # Success criteria
43
44
 
44
- 1. Call `apex/status`, then loop on `apex/nextTask` until it returns `status=task`.
45
+ 1. Extract facts already supplied in the user's opening description. Call `apex/status`, then loop on `apex/nextTask`
46
+ until it returns `status=task`. Present matching supplied facts as recommended confirmations; do not make the user
47
+ retype them and do not record them before confirmation.
45
48
  2. For every `status=needs_input`, do not call `apex/taskContext`. Use earlier recorded answers to frame the returned
46
49
  questions, identify contradictions, and explain the consequence of material choices. Ask every returned question,
47
50
  batching independent questions through the active client mechanism. Render `options` as native single-select or
48
- multi-select controls without adding or reordering kernel options. For `data-classification` and `compliance`, convert
49
- selections to their required typed value. Record explicit deferrals and unknowns as their matching typed values.
51
+ multi-select controls without adding or reordering kernel options. When a question includes `recommendation`, mark
52
+ its matching option or options as recommended and show the rationale; never record it until the user confirms or
53
+ overrides it. For `data-classification` and `compliance`, convert selections to their required typed value. Record
54
+ explicit deferrals and unknowns as their matching typed values.
50
55
  3. Treat Azure services as candidates: recommend viable compute, data, integration, identity, and observability options
51
56
  with a concise fit and trade-off rationale, but never record a service or SKU as an Architecture decision. Capture
52
57
  user SKU constraints or an explicit no-preference position; Architecture owns final service and SKU selection.
@@ -58,13 +63,19 @@ candidate Azure services without deciding architecture, and produces a human-rev
58
63
  required fields. Populate the typed review fields with business context, measurable success criteria, non-functional
59
64
  requirements, security/compliance posture, budget/operations posture, regional constraints, and candidate-service
60
65
  rationale for Architecture.
61
- 7. Stage and submit the typed requirements artifact. APEX materializes read-only review projections at
62
- `agent-output/<project>/<run>/`; report those paths and their artifact hash, but do not edit the generated files.
63
- 8. When the kernel issues `requirements-review`, delegate the exact task to `APEX Reviewer`. Present every returned
64
- completeness or contradiction finding, then use targeted follow-up questions only for findings the user chooses to
65
- resolve. Findings must be remediated, accepted with rationale, or explicitly deferred before Gate 1 can open.
66
- 9. When review completes, direct the user to review `01-requirements.md`, `README.md`, `service-recommendations.md`,
67
- `sku-preferences.md`, and `challenger-findings.md`. Gate 1 remains a human terminal ceremony; never approve it.
66
+ 7. Submit the typed requirements artifact through `apex/requirementsComplete`. APEX materializes read-only review
67
+ projections at `agent-output/<project>/<run>/`; report those paths and their artifact hash, but do not edit the
68
+ generated files.
69
+ 8. Immediately call `apex/nextTask` after submitting requirements. In VS Code, when it returns the
70
+ `requirements-review` task, invoke `APEX Reviewer` through the `agent` tool with exactly that task context; do not
71
+ wait for the user to request the challenge. In a client without the Reviewer worker, report the exact pending review
72
+ task and do not claim the challenge ran.
73
+ 9. When `apex/nextTask` returns `needs_review`, present every finding in one native decision panel. Submit the complete
74
+ decision set through `apex/reviewDecide`. A revision must produce a new Requirements artifact and fresh review;
75
+ risk acceptance requires the rationale and future expiry requested by APEX.
76
+ 10. When review completes, direct the user to review `01-requirements.md`, `README.md`, `service-recommendations.md`,
77
+ `sku-preferences.md`, and `challenger-findings.md`. Ask one explicit Proceed/Revise question. Only after the user
78
+ chooses Proceed, call `apex/gateDecide` for Gate 1 with `confirm: true`, then use the Architecture handoff.
68
79
 
69
80
  Do not read repository files to discover artifact schemas; `apex/taskContext` is the complete output contract for this
70
81
  MCP-only role. Read `.github/skills/apex-azure-defaults/SKILL.md` only when the kernel asks for a region, compliance,
@@ -6,7 +6,8 @@ model: ["GPT-5.6 Terra"]
6
6
  user-invocable: false
7
7
  tools:
8
8
  - apex/taskContext
9
- - apex/completeTask
9
+ - apex/readTaskInput
10
+ - apex/reviewComplete
10
11
  - azure-resource-manager-mcp/get_retail_prices
11
12
  - azure-resource-manager-mcp/query_costs
12
13
  - azure-resource-manager-mcp/query_aks_costs
@@ -28,16 +29,19 @@ resolve, accept with rationale, or defer through the owning interactive stage.
28
29
 
29
30
  # Success criteria
30
31
 
31
- 1. Call `apex/taskContext` once.
32
+ 1. Call `apex/taskContext` once. If its content is externalized or incomplete, call `apex/readTaskInput` with the
33
+ supplied task ID, then continue from each returned `nextOffset` until the bounded review subject is complete.
32
34
  2. Evaluate only supplied content, references, and review criteria. Test completeness, contradictions, traceability,
33
35
  evidence freshness, security/governance, reliability/operations, cost/scale, and stage-specific acceptance criteria
34
36
  when those lenses are present in the task.
35
- 3. Return one typed finding per issue with severity, evidence references, a concise impact, and a concrete remediation.
36
- Record no finding when the supplied evidence supports the criterion; do not manufacture findings to satisfy a quota.
37
+ 3. Return one typed finding per issue with `id`, `severity`, `title`, and `detail`. Put the challenged criterion,
38
+ evidence, impact, and concrete remediation in `detail`. Record no finding when the supplied evidence supports the
39
+ criterion; do not manufacture findings to satisfy a quota.
37
40
  4. The kernel materializes a read-only summary at `agent-output/<project>/<run>/reviews/<subject>-findings.md`.
38
41
  The owning interactive agent handles targeted follow-up and human dispositions; the Reviewer does not ask users or
39
42
  apply fixes.
40
- 5. Return evidence-linked findings through `apex/completeTask`.
43
+ 5. Return findings through `apex/reviewComplete`; APEX derives subject identity, hash, timestamp, disposition, and
44
+ evidence binding.
41
45
 
42
46
  # Constraints
43
47
 
@@ -13,6 +13,7 @@ tools:
13
13
  - apex/projectList
14
14
  - apex/projectUse
15
15
  - apex/projectDelete
16
+ - apex/gateDecide
16
17
  - azure-resource-manager-mcp/get_retail_prices
17
18
  - azure-resource-manager-mcp/query_costs
18
19
  - azure-resource-manager-mcp/query_aks_costs
@@ -81,6 +82,9 @@ Coordinate APEX without authoring project artifacts or inferring workflow state.
81
82
  `apex gate decide --gate <N> --decision <approved|rejected> --actor <USER_ID> --json`. At Gate 4, also require
82
83
  review of the exact preview, target, expiry, and approval recipient before directing
83
84
  `apex gate decide --gate 4 --decision <approved|rejected> --actor <USER_ID> --recipient <RECIPIENT_ID> --json`.
85
+ 9. When the user explicitly says `approve Gate 1`, `approve Gate 2`, `approve Gate 3`, or the equivalent rejection,
86
+ call `apex/gateDecide` with that gate, decision, and `confirm: true`. The operation derives the actor from the local
87
+ OS username. Do not use it for Gate 4, and do not infer confirmation from an ambiguous message.
84
88
 
85
89
  Use the active client projection's question mechanism only for project creation or kernel-owned routing choices. Read
86
90
  `.github/skills/apex-workflow/SKILL.md` only when status, resume, or project selection needs more guidance.
@@ -11,16 +11,23 @@
11
11
  "capabilityStatus",
12
12
  "nextTask",
13
13
  "taskContext",
14
+ "readTaskInput",
14
15
  "recordInput",
15
16
  "projectCreate",
16
17
  "projectList",
17
18
  "projectUse",
18
19
  "projectDelete",
20
+ "gateDecide",
21
+ "reviewDecide",
19
22
  "stageArtifact",
20
23
  "stageFile",
21
24
  "generateIac",
22
25
  "validateTask",
23
26
  "completeTask",
27
+ "requirementsComplete",
28
+ "architectureComplete",
29
+ "reviewComplete",
30
+ "planComplete",
24
31
  "preview",
25
32
  "reconcile",
26
33
  "inventory",
@@ -24,10 +24,13 @@ Use this skill only for an active requirements task.
24
24
  4. Submit that request only through `apex/recordInput`, preserving its request ID, expected journal head, and owner
25
25
  epoch.
26
26
  5. Call `apex/nextTask` again and repeat until it returns a requirements `task`; only then read `apex/taskContext`.
27
- 6. Treat the service-preferences round as a preference boundary. Capture retained, prohibited, and preferred services,
28
- SKU preferences, and environment overrides without selecting architecture, SKUs, or implementation details.
29
- 7. Stage the task-context-defined requirements output, complete the requirements task, and wait for the required review
30
- result before reporting that Gate 1 is ready. Only the kernel opens or evaluates Gate 1.
27
+ 6. Treat service questions in the workload panel as a preference boundary. Present the kernel recommendation, then
28
+ capture retained, prohibited, and preferred services, SKU preferences, and environment overrides without selecting
29
+ architecture, SKUs, or implementation details.
30
+ 7. Submit the task-context-defined output through `apex/requirementsComplete`, invoke the required Reviewer, and handle
31
+ `needs_review` through one native findings panel and `apex/reviewDecide`.
32
+ 8. After a clean or fully dispositioned review, ask for explicit Gate 1 approval. Call `apex/gateDecide` only after the
33
+ user chooses Proceed, then continue to Architecture in the same turn.
31
34
 
32
35
  The kernel catalog and its versioned input contracts are authoritative. Do not choose architecture, SKUs, or
33
36
  implementation details while gathering requirements.
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.10.0-next.3",
2
+ "version": "0.10.0-next.5",
3
3
  "bundle": {
4
4
  "id": "apex-managed-workspace",
5
5
  "authority": "npm:@apexops/cli",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 1,
3
3
  "sources": {
4
- "customizations": "0.10.0-next.3",
4
+ "customizations": "0.10.0-next.5",
5
5
  "config": "1.0.0"
6
6
  },
7
7
  "composition": {
@@ -190,7 +190,7 @@
190
190
  "client-projections/github-copilot-cli/.github/skills/apex-terraform-test/references/test-design.md",
191
191
  "client-projections/github-copilot-cli/.github/skills/apex-workflow/SKILL.md"
192
192
  ],
193
- "digest": "5e312275847b3433ec55ce0d35d0b7c55025247a958a5b239af806c2f5621498"
193
+ "digest": "87f5d74109a94f0014cb832441c4e02bb5b7c5ce97f7a43f80959e55b96052ec"
194
194
  },
195
195
  {
196
196
  "id": "github-copilot-vscode",
@@ -338,7 +338,7 @@
338
338
  "client-projections/github-copilot-vscode/.github/skills/apex-workflow/SKILL.md",
339
339
  "client-projections/github-copilot-vscode/.vscode/mcp.json"
340
340
  ],
341
- "digest": "e879f9c46bbf2f8de5eb76449d41a11af533714148331441f2f0cb6f5660c160"
341
+ "digest": "a6387c778c2f2fddbda8453960f113ec4522bca784a7aeaa0a113fa18e9da7db"
342
342
  }
343
343
  ],
344
344
  "files": [
@@ -378,8 +378,8 @@
378
378
  "path": "tools/registry/copilot-cli-agent-tools.json",
379
379
  "mapping": "copilot-cli-tool-inventory"
380
380
  },
381
- "sha256": "eaa67e61da99a42fca622f5e0c75f2778bf19d78016f176e0ac0a4620f6e1dca",
382
- "bytes": 3008
381
+ "sha256": "e67b7d9ca1c28956c13e8817c5f8ae2173d2070f4855ff71098690516e40d1fc",
382
+ "bytes": 3310
383
383
  },
384
384
  {
385
385
  "path": "client-projections/github-copilot-cli/.github/agents/apex-architect.agent.md",
@@ -388,13 +388,13 @@
388
388
  "composition": "client-projections",
389
389
  "roleId": "architecture",
390
390
  "sourcePath": ".github/agents/apex-architect.agent.md",
391
- "sourceHash": "0620b04dc8a48db7f5af148044ed8d040079f887add3b16b3c0e9fdcc022cca0",
391
+ "sourceHash": "47e6edf792c88ea633cd3bc66c59fba00a3c13020f8771d3635d5e2cc3414e70",
392
392
  "clientId": "github-copilot-cli",
393
393
  "target": ".github/agents/apex-architect.agent.md",
394
394
  "adapterVersion": "1.1.0"
395
395
  },
396
- "sha256": "3d58237f0006a983daf33bb96049e006d4c1dfd301088d306bc16491b5569c74",
397
- "bytes": 5408
396
+ "sha256": "9c194b0877b6dabcb5a5775c1e719bf851ea194206a183a582200f645b74dfc8",
397
+ "bytes": 5362
398
398
  },
399
399
  {
400
400
  "path": "client-projections/github-copilot-cli/.github/agents/apex-operator.agent.md",
@@ -418,13 +418,13 @@
418
418
  "composition": "client-projections",
419
419
  "roleId": "planning",
420
420
  "sourcePath": ".github/agents/apex-planner.agent.md",
421
- "sourceHash": "15934864666d9b4f3936f526942d1f56c1a5e8fc608b5ce2047db139eab9d2fa",
421
+ "sourceHash": "b33471f0ef586ace4847b9eecfd5363c1d8b269dd9eba460022498ff488c509c",
422
422
  "clientId": "github-copilot-cli",
423
423
  "target": ".github/agents/apex-planner.agent.md",
424
424
  "adapterVersion": "1.1.0"
425
425
  },
426
- "sha256": "039d8f4d5ca4b5b6920a6bce4e052acb6a81d20844668bc5d6da61a1ed6a211b",
427
- "bytes": 4661
426
+ "sha256": "e1e7a3790dc13628214ba19d5b28d1ab8a522fff07868e5c962a3ad985b690f5",
427
+ "bytes": 4868
428
428
  },
429
429
  {
430
430
  "path": "client-projections/github-copilot-cli/.github/agents/apex-requirements.agent.md",
@@ -433,13 +433,13 @@
433
433
  "composition": "client-projections",
434
434
  "roleId": "requirements",
435
435
  "sourcePath": ".github/agents/apex-requirements.agent.md",
436
- "sourceHash": "1e7c8d6d7992fc5d59499f662f00a20fe9814c80fb5a321cb063ec5067ebf04f",
436
+ "sourceHash": "4bb98532f4c277424689eab261779a33dd0790faf6764a8487848afb5ffb9225",
437
437
  "clientId": "github-copilot-cli",
438
438
  "target": ".github/agents/apex-requirements.agent.md",
439
439
  "adapterVersion": "1.1.0"
440
440
  },
441
- "sha256": "00a54b4a8f43b47184ec72f62f730e0dbe1ad3319ea0c09300b9cecf28cae8db",
442
- "bytes": 5143
441
+ "sha256": "6bd816e8b228ca0fd5b46e55949495286316b5cc406d11f0cefd9cd5bf0b3b0d",
442
+ "bytes": 6044
443
443
  },
444
444
  {
445
445
  "path": "client-projections/github-copilot-cli/.github/agents/apex.agent.md",
@@ -448,13 +448,13 @@
448
448
  "composition": "client-projections",
449
449
  "roleId": "coordinator",
450
450
  "sourcePath": ".github/agents/apex.agent.md",
451
- "sourceHash": "a9a64bb9f743ba73f0ea2237f0e2702a1881dee7f90ca83f9cf588de37bbed45",
451
+ "sourceHash": "a7440e67b68177d9877a9d5b2201917d1bdf56fda9431ef106ffa1cb7a30298c",
452
452
  "clientId": "github-copilot-cli",
453
453
  "target": ".github/agents/apex.agent.md",
454
454
  "adapterVersion": "1.1.0"
455
455
  },
456
- "sha256": "73f6d4fb101c4b7eff22472eca46c931c6b7e96a72810c0f10136e6568d39aea",
457
- "bytes": 4908
456
+ "sha256": "65da2837858c0251432818f2819f21877253152d5626fd4715c79ce47ff0fc4f",
457
+ "bytes": 5261
458
458
  },
459
459
  {
460
460
  "path": "client-projections/github-copilot-cli/.github/copilot-instructions.md",
@@ -773,10 +773,10 @@
773
773
  "target": ".github/mcp.json",
774
774
  "adapterVersion": "1.1.0",
775
775
  "sourcePath": ".github/mcp.json",
776
- "sourceHash": "dd39613c4d01b6f7146afe6c09548d6153fbfad550dba6bfcdbecf8188cb2209"
776
+ "sourceHash": "21d86c077f0f304e59433f7b7f5063948f60b41ec961f71d50eccf94c340fea9"
777
777
  },
778
- "sha256": "dd39613c4d01b6f7146afe6c09548d6153fbfad550dba6bfcdbecf8188cb2209",
779
- "bytes": 1350
778
+ "sha256": "21d86c077f0f304e59433f7b7f5063948f60b41ec961f71d50eccf94c340fea9",
779
+ "bytes": 1535
780
780
  },
781
781
  {
782
782
  "path": "client-projections/github-copilot-cli/.github/skills/apex-architecture/SKILL.md",
@@ -2089,10 +2089,10 @@
2089
2089
  "target": ".github/skills/apex-requirements/SKILL.md",
2090
2090
  "adapterVersion": "1.1.0",
2091
2091
  "sourcePath": ".github/skills/apex-requirements/SKILL.md",
2092
- "sourceHash": "846fd892c70658a956b6657eebc06557619f7483cf690acf0e2d18ad9c616884"
2092
+ "sourceHash": "0b5076218e79d165efaa2d4a00d5f6014804e6f04666d223947a4e8c9f9512f5"
2093
2093
  },
2094
- "sha256": "846fd892c70658a956b6657eebc06557619f7483cf690acf0e2d18ad9c616884",
2095
- "bytes": 2187
2094
+ "sha256": "0b5076218e79d165efaa2d4a00d5f6014804e6f04666d223947a4e8c9f9512f5",
2095
+ "bytes": 2418
2096
2096
  },
2097
2097
  {
2098
2098
  "path": "client-projections/github-copilot-cli/.github/skills/apex-terraform-import/SKILL.md",
@@ -2339,13 +2339,13 @@
2339
2339
  "composition": "client-projections",
2340
2340
  "roleId": "architecture",
2341
2341
  "sourcePath": ".github/agents/apex-architect.agent.md",
2342
- "sourceHash": "0620b04dc8a48db7f5af148044ed8d040079f887add3b16b3c0e9fdcc022cca0",
2342
+ "sourceHash": "47e6edf792c88ea633cd3bc66c59fba00a3c13020f8771d3635d5e2cc3414e70",
2343
2343
  "clientId": "github-copilot-vscode",
2344
2344
  "target": ".github/agents/apex-architect.agent.md",
2345
2345
  "adapterVersion": "1.1.0"
2346
2346
  },
2347
- "sha256": "d1cb288b989e3ad488e6ae26b0c1cb83b39692058bd6f12fbfe5215a016ad368",
2348
- "bytes": 5693
2347
+ "sha256": "f4e8363fd82309494f2d3a54371abd824e6862323c4db6f52c8b8fe657bf0745",
2348
+ "bytes": 5647
2349
2349
  },
2350
2350
  {
2351
2351
  "path": "client-projections/github-copilot-vscode/.github/agents/apex-codegen.agent.md",
@@ -2384,13 +2384,13 @@
2384
2384
  "composition": "client-projections",
2385
2385
  "roleId": "planning",
2386
2386
  "sourcePath": ".github/agents/apex-planner.agent.md",
2387
- "sourceHash": "15934864666d9b4f3936f526942d1f56c1a5e8fc608b5ce2047db139eab9d2fa",
2387
+ "sourceHash": "b33471f0ef586ace4847b9eecfd5363c1d8b269dd9eba460022498ff488c509c",
2388
2388
  "clientId": "github-copilot-vscode",
2389
2389
  "target": ".github/agents/apex-planner.agent.md",
2390
2390
  "adapterVersion": "1.1.0"
2391
2391
  },
2392
- "sha256": "1423df4a00c325f3c07eb7906da4a72990f6a221c7f271333fb22e31ae99ffcd",
2393
- "bytes": 4969
2392
+ "sha256": "1133d3020cdf6b5a787df091730e9efa7de9076290dd760fe58864478d7fbec4",
2393
+ "bytes": 5176
2394
2394
  },
2395
2395
  {
2396
2396
  "path": "client-projections/github-copilot-vscode/.github/agents/apex-requirements.agent.md",
@@ -2399,13 +2399,13 @@
2399
2399
  "composition": "client-projections",
2400
2400
  "roleId": "requirements",
2401
2401
  "sourcePath": ".github/agents/apex-requirements.agent.md",
2402
- "sourceHash": "1e7c8d6d7992fc5d59499f662f00a20fe9814c80fb5a321cb063ec5067ebf04f",
2402
+ "sourceHash": "4bb98532f4c277424689eab261779a33dd0790faf6764a8487848afb5ffb9225",
2403
2403
  "clientId": "github-copilot-vscode",
2404
2404
  "target": ".github/agents/apex-requirements.agent.md",
2405
2405
  "adapterVersion": "1.1.0"
2406
2406
  },
2407
- "sha256": "d053deeb51609ad24e36192f14bc7407b84c425bc87d6f607cba50ac7d295989",
2408
- "bytes": 5447
2407
+ "sha256": "70e254ca0b7a8cef6f44fc93c5558d6983c6d0bee71b616dc467f5010a687165",
2408
+ "bytes": 6348
2409
2409
  },
2410
2410
  {
2411
2411
  "path": "client-projections/github-copilot-vscode/.github/agents/apex-reviewer.agent.md",
@@ -2414,13 +2414,13 @@
2414
2414
  "composition": "client-projections",
2415
2415
  "roleId": "review",
2416
2416
  "sourcePath": ".github/agents/apex-reviewer.agent.md",
2417
- "sourceHash": "b76a003f0147584974175f47e5d1a28d68c45f5153d12a8c5fa5e4552872ae13",
2417
+ "sourceHash": "aa2c8064d102f8e2e69eaccc15894455abfcc56892e61bde46d6ece0cbc3c7cd",
2418
2418
  "clientId": "github-copilot-vscode",
2419
2419
  "target": ".github/agents/apex-reviewer.agent.md",
2420
2420
  "adapterVersion": "1.1.0"
2421
2421
  },
2422
- "sha256": "55dbe78ed39469d87e6a223c3b986986f78a7f66d4058690bd69457e5e7da12d",
2423
- "bytes": 2635
2422
+ "sha256": "4be66c1a357ea492c20eaada3431c9b7184f33618bfd69f2725c0c83a2f3f8e7",
2423
+ "bytes": 2976
2424
2424
  },
2425
2425
  {
2426
2426
  "path": "client-projections/github-copilot-vscode/.github/agents/apex-validator.agent.md",
@@ -2444,13 +2444,13 @@
2444
2444
  "composition": "client-projections",
2445
2445
  "roleId": "coordinator",
2446
2446
  "sourcePath": ".github/agents/apex.agent.md",
2447
- "sourceHash": "a9a64bb9f743ba73f0ea2237f0e2702a1881dee7f90ca83f9cf588de37bbed45",
2447
+ "sourceHash": "a7440e67b68177d9877a9d5b2201917d1bdf56fda9431ef106ffa1cb7a30298c",
2448
2448
  "clientId": "github-copilot-vscode",
2449
2449
  "target": ".github/agents/apex.agent.md",
2450
2450
  "adapterVersion": "1.1.0"
2451
2451
  },
2452
- "sha256": "cb0aea4d710e8974d137475db3edbc772a51a76696c4d6f738364ec940ae9c5a",
2453
- "bytes": 5726
2452
+ "sha256": "1ebb9da1303aff993228efdc1bb29dde70c6ce9c3cb1b61306659ae2a7ecc6f2",
2453
+ "bytes": 6079
2454
2454
  },
2455
2455
  {
2456
2456
  "path": "client-projections/github-copilot-vscode/.github/copilot-instructions.md",
@@ -4071,10 +4071,10 @@
4071
4071
  "target": ".github/skills/apex-requirements/SKILL.md",
4072
4072
  "adapterVersion": "1.1.0",
4073
4073
  "sourcePath": ".github/skills/apex-requirements/SKILL.md",
4074
- "sourceHash": "846fd892c70658a956b6657eebc06557619f7483cf690acf0e2d18ad9c616884"
4074
+ "sourceHash": "0b5076218e79d165efaa2d4a00d5f6014804e6f04666d223947a4e8c9f9512f5"
4075
4075
  },
4076
- "sha256": "846fd892c70658a956b6657eebc06557619f7483cf690acf0e2d18ad9c616884",
4077
- "bytes": 2187
4076
+ "sha256": "0b5076218e79d165efaa2d4a00d5f6014804e6f04666d223947a4e8c9f9512f5",
4077
+ "bytes": 2418
4078
4078
  },
4079
4079
  {
4080
4080
  "path": "client-projections/github-copilot-vscode/.github/skills/apex-terraform-import/SKILL.md",
@@ -4385,7 +4385,7 @@
4385
4385
  "path": "config/runtime-bundle.v1.json",
4386
4386
  "mapping": "config"
4387
4387
  },
4388
- "sha256": "414de8d636f820fb560142c33d38dc12a38ec2e924149c3c123a0cf3fd9fbcbc",
4388
+ "sha256": "7f90c32650d60c10143c298896b404b204427c77a5a746a8778a9bdf1229fd30",
4389
4389
  "bytes": 2039
4390
4390
  },
4391
4391
  {
@@ -4415,8 +4415,8 @@
4415
4415
  "path": "customizations/.github/agents/apex-architect.agent.md",
4416
4416
  "mapping": "customizations"
4417
4417
  },
4418
- "sha256": "0620b04dc8a48db7f5af148044ed8d040079f887add3b16b3c0e9fdcc022cca0",
4419
- "bytes": 5509
4418
+ "sha256": "47e6edf792c88ea633cd3bc66c59fba00a3c13020f8771d3635d5e2cc3414e70",
4419
+ "bytes": 5463
4420
4420
  },
4421
4421
  {
4422
4422
  "path": "customizations/.github/agents/apex-codegen.agent.md",
@@ -4445,8 +4445,8 @@
4445
4445
  "path": "customizations/.github/agents/apex-planner.agent.md",
4446
4446
  "mapping": "customizations"
4447
4447
  },
4448
- "sha256": "15934864666d9b4f3936f526942d1f56c1a5e8fc608b5ce2047db139eab9d2fa",
4449
- "bytes": 4785
4448
+ "sha256": "b33471f0ef586ace4847b9eecfd5363c1d8b269dd9eba460022498ff488c509c",
4449
+ "bytes": 4992
4450
4450
  },
4451
4451
  {
4452
4452
  "path": "customizations/.github/agents/apex-requirements.agent.md",
@@ -4455,8 +4455,8 @@
4455
4455
  "path": "customizations/.github/agents/apex-requirements.agent.md",
4456
4456
  "mapping": "customizations"
4457
4457
  },
4458
- "sha256": "1e7c8d6d7992fc5d59499f662f00a20fe9814c80fb5a321cb063ec5067ebf04f",
4459
- "bytes": 5263
4458
+ "sha256": "4bb98532f4c277424689eab261779a33dd0790faf6764a8487848afb5ffb9225",
4459
+ "bytes": 6164
4460
4460
  },
4461
4461
  {
4462
4462
  "path": "customizations/.github/agents/apex-reviewer.agent.md",
@@ -4465,8 +4465,8 @@
4465
4465
  "path": "customizations/.github/agents/apex-reviewer.agent.md",
4466
4466
  "mapping": "customizations"
4467
4467
  },
4468
- "sha256": "b76a003f0147584974175f47e5d1a28d68c45f5153d12a8c5fa5e4552872ae13",
4469
- "bytes": 2594
4468
+ "sha256": "aa2c8064d102f8e2e69eaccc15894455abfcc56892e61bde46d6ece0cbc3c7cd",
4469
+ "bytes": 2935
4470
4470
  },
4471
4471
  {
4472
4472
  "path": "customizations/.github/agents/apex-validator.agent.md",
@@ -4485,8 +4485,8 @@
4485
4485
  "path": "customizations/.github/agents/apex.agent.md",
4486
4486
  "mapping": "customizations"
4487
4487
  },
4488
- "sha256": "a9a64bb9f743ba73f0ea2237f0e2702a1881dee7f90ca83f9cf588de37bbed45",
4489
- "bytes": 5542
4488
+ "sha256": "a7440e67b68177d9877a9d5b2201917d1bdf56fda9431ef106ffa1cb7a30298c",
4489
+ "bytes": 5895
4490
4490
  },
4491
4491
  {
4492
4492
  "path": "customizations/.github/copilot-instructions.md",
@@ -4715,8 +4715,8 @@
4715
4715
  "path": "customizations/.github/mcp.json",
4716
4716
  "mapping": "customizations"
4717
4717
  },
4718
- "sha256": "dd39613c4d01b6f7146afe6c09548d6153fbfad550dba6bfcdbecf8188cb2209",
4719
- "bytes": 1350
4718
+ "sha256": "21d86c077f0f304e59433f7b7f5063948f60b41ec961f71d50eccf94c340fea9",
4719
+ "bytes": 1535
4720
4720
  },
4721
4721
  {
4722
4722
  "path": "customizations/.github/skills/apex-architecture/SKILL.md",
@@ -5655,8 +5655,8 @@
5655
5655
  "path": "customizations/.github/skills/apex-requirements/SKILL.md",
5656
5656
  "mapping": "customizations"
5657
5657
  },
5658
- "sha256": "846fd892c70658a956b6657eebc06557619f7483cf690acf0e2d18ad9c616884",
5659
- "bytes": 2187
5658
+ "sha256": "0b5076218e79d165efaa2d4a00d5f6014804e6f04666d223947a4e8c9f9512f5",
5659
+ "bytes": 2418
5660
5660
  },
5661
5661
  {
5662
5662
  "path": "customizations/.github/skills/apex-terraform-import/SKILL.md",
@@ -5855,13 +5855,13 @@
5855
5855
  "path": "customizations/manifest.json",
5856
5856
  "mapping": "customizations"
5857
5857
  },
5858
- "sha256": "03599d828a02d0e36696af2efaa7ba3353089aebee332ea8043638f0a7b0727c",
5858
+ "sha256": "c6f64975501baddd9d1712a7a5169b70ab61a4328fdcba9444c0b20800d05ade",
5859
5859
  "bytes": 14078
5860
5860
  }
5861
5861
  ],
5862
5862
  "lock": {
5863
5863
  "algorithm": "sha256",
5864
5864
  "canonicalization": "apex-bundled-assets-v1",
5865
- "digest": "207ce6214c3078991469dc4e5a02b91ab0d6e43830bcb587703c683823e67fae"
5865
+ "digest": "455ee4805ee6e1635feea04cd73745cd358679a791360ba7f6ae24180785a05d"
5866
5866
  }
5867
5867
  }
package/dist/cli.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  import { type ServiceOptions } from "./service.js";
3
3
  export declare function execute(argv: string[], root?: string, options?: ServiceOptions): Promise<unknown>;
4
+ export declare function formatHumanResult(args: string[], result: unknown): string;
4
5
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.js CHANGED
@@ -624,12 +624,14 @@ export async function execute(argv, root = process.cwd(), options = {}) {
624
624
  }
625
625
  async function main() {
626
626
  const json = process.argv.includes("--json");
627
+ const verbose = process.argv.includes("--verbose");
628
+ const args = process.argv.slice(2);
627
629
  try {
628
- const result = await execute(process.argv.slice(2));
630
+ const result = await execute(args);
629
631
  if (result !== undefined)
630
632
  process.stdout.write(json
631
633
  ? `${JSON.stringify({ ok: true, result })}\n`
632
- : `${typeof result === "string" ? result : JSON.stringify(result, null, 2)}\n`);
634
+ : `${verbose ? (typeof result === "string" ? result : JSON.stringify(result, null, 2)) : formatHumanResult(args, result)}\n`);
633
635
  }
634
636
  catch (error) {
635
637
  const normalized = normalizeError(error);
@@ -641,6 +643,44 @@ async function main() {
641
643
  process.exitCode = normalized.exitCode;
642
644
  }
643
645
  }
646
+ export function formatHumanResult(args, result) {
647
+ const command = args.find((argument) => !argument.startsWith("--"));
648
+ if (command === "status" && result !== null && typeof result === "object") {
649
+ const status = result;
650
+ const task = status.task ?? null;
651
+ const stage = task?.startsWith("requirements")
652
+ ? "Requirements"
653
+ : task?.startsWith("architecture") || task?.startsWith("governance")
654
+ ? "Architecture"
655
+ : task?.startsWith("plan")
656
+ ? "Planning"
657
+ : task?.startsWith("codegen") || task?.startsWith("validation")
658
+ ? "Build and validate"
659
+ : task?.startsWith("preview") || task?.startsWith("deploy") || task === "inventory"
660
+ ? "Operations"
661
+ : "Ready for next decision";
662
+ const blocker = status.blockers?.[0] ?? "None";
663
+ const next = task !== null ? `Continue ${stage}` : blocker !== "None" ? blocker : "Ask APEX to continue";
664
+ return [
665
+ `Project: ${status.run?.projectId ?? "unknown"} (${status.run?.environment ?? "unknown"})`,
666
+ `Stage: ${stage}`,
667
+ `Blocker: ${blocker}`,
668
+ `Next: ${next}`,
669
+ ].join("\n");
670
+ }
671
+ if (command === "doctor" && result !== null && typeof result === "object") {
672
+ const doctor = result;
673
+ const passed = doctor.checks?.filter(({ ok }) => ok).length ?? 0;
674
+ const total = doctor.checks?.length ?? 0;
675
+ const remaining = doctor.remedies?.length ?? 0;
676
+ return [
677
+ `Status: ${doctor.healthy ? "Ready" : "Setup incomplete"} (${passed}/${total} checks ready)`,
678
+ `Next: ${doctor.nextAction ?? "No action required"}`,
679
+ ...(remaining > 1 ? [`Later: ${remaining - 1} additional setup item${remaining === 2 ? "" : "s"}`] : []),
680
+ ].join("\n");
681
+ }
682
+ return typeof result === "string" ? result : JSON.stringify(result, null, 2);
683
+ }
644
684
  if (process.argv[1] !== undefined && (await realpath(process.argv[1])) === (await realpath(new URL(import.meta.url))))
645
685
  await main();
646
686
  //# sourceMappingURL=cli.js.map