@apexops/cli 0.10.0-next.2 → 0.10.0-next.4
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/assets/client-projection-metadata/copilot-cli-agent-tools.json +4 -0
- package/assets/client-projections/github-copilot-cli/.github/agents/apex-planner.agent.md +4 -3
- package/assets/client-projections/github-copilot-cli/.github/agents/apex-requirements.agent.md +8 -4
- package/assets/client-projections/github-copilot-cli/.github/agents/apex.agent.md +4 -0
- package/assets/client-projections/github-copilot-cli/.github/mcp.json +2 -0
- package/assets/client-projections/github-copilot-vscode/.github/agents/apex-planner.agent.md +4 -3
- package/assets/client-projections/github-copilot-vscode/.github/agents/apex-requirements.agent.md +8 -4
- package/assets/client-projections/github-copilot-vscode/.github/agents/apex.agent.md +4 -0
- package/assets/config/runtime-bundle.v1.json +7 -7
- package/assets/customizations/.github/agents/apex-planner.agent.md +4 -3
- package/assets/customizations/.github/agents/apex-requirements.agent.md +8 -4
- package/assets/customizations/.github/agents/apex.agent.md +4 -0
- package/assets/customizations/.github/mcp.json +2 -0
- package/assets/customizations/manifest.json +1 -1
- package/assets/manifest.json +37 -37
- package/dist/mcp.js +31 -0
- package/dist/service.d.ts +6 -1
- package/dist/service.js +42 -5
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -5
|
@@ -44,11 +44,13 @@
|
|
|
44
44
|
"apex/projectList",
|
|
45
45
|
"apex/projectUse",
|
|
46
46
|
"apex/projectDelete",
|
|
47
|
+
"apex/gateDecide",
|
|
47
48
|
"apex/stageArtifact",
|
|
48
49
|
"apex/stageFile",
|
|
49
50
|
"apex/generateIac",
|
|
50
51
|
"apex/validateTask",
|
|
51
52
|
"apex/completeTask",
|
|
53
|
+
"apex/planComplete",
|
|
52
54
|
"apex/preview",
|
|
53
55
|
"apex/reconcile",
|
|
54
56
|
"apex/inventory",
|
|
@@ -72,11 +74,13 @@
|
|
|
72
74
|
"projectList",
|
|
73
75
|
"projectUse",
|
|
74
76
|
"projectDelete",
|
|
77
|
+
"gateDecide",
|
|
75
78
|
"stageArtifact",
|
|
76
79
|
"stageFile",
|
|
77
80
|
"generateIac",
|
|
78
81
|
"validateTask",
|
|
79
82
|
"completeTask",
|
|
83
|
+
"planComplete",
|
|
80
84
|
"preview",
|
|
81
85
|
"reconcile",
|
|
82
86
|
"inventory",
|
|
@@ -13,6 +13,7 @@ tools:
|
|
|
13
13
|
- apex/taskContext
|
|
14
14
|
- apex/stageArtifact
|
|
15
15
|
- apex/completeTask
|
|
16
|
+
- apex/planComplete
|
|
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
|
|
@@ -45,9 +46,9 @@ Gate 3.
|
|
|
45
46
|
secret reference must include `kind`, `provider`, and `reference`.
|
|
46
47
|
4. Explain logical resources, dependencies, controls, implementation bindings, environment inputs, and rollback or
|
|
47
48
|
validation risks. Ask targeted follow-ups only for unresolved user-owned choices; never infer secret values.
|
|
48
|
-
5.
|
|
49
|
-
environment inputs.
|
|
50
|
-
|
|
49
|
+
5. Complete plans through `apex/planComplete` with the implementation intent, binding without `intentHash`, and
|
|
50
|
+
environment inputs. The kernel derives the canonical intent hash and atomically validates all three outputs. Do not
|
|
51
|
+
call `apex/completeTask` with a partial plan bundle or a placeholder `intentHash`.
|
|
51
52
|
6. APEX materializes a read-only Gate 3 package at `agent-output/<project>/<run>/plan/`. Report
|
|
52
53
|
`implementation-plan.md`, `iac-binding.md`, `environment-inputs.md`, and `challenger-findings.md` for human review.
|
|
53
54
|
7. When the kernel issues `plan-review`, delegate the exact task to `APEX Reviewer`. Present findings and use targeted
|
package/assets/client-projections/github-copilot-cli/.github/agents/apex-requirements.agent.md
CHANGED
|
@@ -58,10 +58,14 @@ candidate Azure services without deciding architecture, and produces a human-rev
|
|
|
58
58
|
rationale for Architecture.
|
|
59
59
|
7. Stage and submit the typed requirements artifact. APEX materializes read-only review projections at
|
|
60
60
|
`agent-output/<project>/<run>/`; report those paths and their artifact hash, but do not edit the generated files.
|
|
61
|
-
8.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
8. Immediately call `apex/nextTask` after submitting requirements. In VS Code, when it returns the
|
|
62
|
+
`requirements-review` task, invoke `APEX Reviewer` through the `agent` tool with exactly that task context; do not
|
|
63
|
+
wait for the user to request the challenge. In a client without the Reviewer worker, report the exact pending review
|
|
64
|
+
task and do not claim the challenge ran.
|
|
65
|
+
9. Present every returned completeness or contradiction finding, then use targeted follow-up questions only for
|
|
66
|
+
findings the user chooses to resolve. Findings must be remediated, accepted with rationale, or explicitly deferred
|
|
67
|
+
before Gate 1 can open.
|
|
68
|
+
10. When review completes, direct the user to review `01-requirements.md`, `README.md`, `service-recommendations.md`,
|
|
65
69
|
`sku-preferences.md`, and `challenger-findings.md`. Gate 1 remains a human terminal ceremony; never approve it.
|
|
66
70
|
|
|
67
71
|
Do not read repository files to discover artifact schemas; `apex/taskContext` is the complete output contract for this
|
|
@@ -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
|
|
@@ -69,6 +70,9 @@ Coordinate APEX without authoring project artifacts or inferring workflow state.
|
|
|
69
70
|
`apex gate decide --gate <N> --decision <approved|rejected> --actor <USER_ID> --json`. At Gate 4, also require
|
|
70
71
|
review of the exact preview, target, expiry, and approval recipient before directing
|
|
71
72
|
`apex gate decide --gate 4 --decision <approved|rejected> --actor <USER_ID> --recipient <RECIPIENT_ID> --json`.
|
|
73
|
+
9. When the user explicitly says `approve Gate 1`, `approve Gate 2`, `approve Gate 3`, or the equivalent rejection,
|
|
74
|
+
call `apex/gateDecide` with that gate, decision, and `confirm: true`. The operation derives the actor from the local
|
|
75
|
+
OS username. Do not use it for Gate 4, and do not infer confirmation from an ambiguous message.
|
|
72
76
|
|
|
73
77
|
Use the active client projection's question mechanism only for project creation or kernel-owned routing choices. Read
|
|
74
78
|
`.github/skills/apex-workflow/SKILL.md` only when status, resume, or project selection needs more guidance.
|
package/assets/client-projections/github-copilot-vscode/.github/agents/apex-planner.agent.md
CHANGED
|
@@ -13,6 +13,7 @@ tools:
|
|
|
13
13
|
- apex/taskContext
|
|
14
14
|
- apex/stageArtifact
|
|
15
15
|
- apex/completeTask
|
|
16
|
+
- apex/planComplete
|
|
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
|
|
@@ -55,9 +56,9 @@ Gate 3.
|
|
|
55
56
|
secret reference must include `kind`, `provider`, and `reference`.
|
|
56
57
|
4. Explain logical resources, dependencies, controls, implementation bindings, environment inputs, and rollback or
|
|
57
58
|
validation risks. Ask targeted follow-ups only for unresolved user-owned choices; never infer secret values.
|
|
58
|
-
5.
|
|
59
|
-
environment inputs.
|
|
60
|
-
|
|
59
|
+
5. Complete plans through `apex/planComplete` with the implementation intent, binding without `intentHash`, and
|
|
60
|
+
environment inputs. The kernel derives the canonical intent hash and atomically validates all three outputs. Do not
|
|
61
|
+
call `apex/completeTask` with a partial plan bundle or a placeholder `intentHash`.
|
|
61
62
|
6. APEX materializes a read-only Gate 3 package at `agent-output/<project>/<run>/plan/`. Report
|
|
62
63
|
`implementation-plan.md`, `iac-binding.md`, `environment-inputs.md`, and `challenger-findings.md` for human review.
|
|
63
64
|
7. When the kernel issues `plan-review`, delegate the exact task to `APEX Reviewer`. Present findings and use targeted
|
package/assets/client-projections/github-copilot-vscode/.github/agents/apex-requirements.agent.md
CHANGED
|
@@ -67,10 +67,14 @@ candidate Azure services without deciding architecture, and produces a human-rev
|
|
|
67
67
|
rationale for Architecture.
|
|
68
68
|
7. Stage and submit the typed requirements artifact. APEX materializes read-only review projections at
|
|
69
69
|
`agent-output/<project>/<run>/`; report those paths and their artifact hash, but do not edit the generated files.
|
|
70
|
-
8.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
8. Immediately call `apex/nextTask` after submitting requirements. In VS Code, when it returns the
|
|
71
|
+
`requirements-review` task, invoke `APEX Reviewer` through the `agent` tool with exactly that task context; do not
|
|
72
|
+
wait for the user to request the challenge. In a client without the Reviewer worker, report the exact pending review
|
|
73
|
+
task and do not claim the challenge ran.
|
|
74
|
+
9. Present every returned completeness or contradiction finding, then use targeted follow-up questions only for
|
|
75
|
+
findings the user chooses to resolve. Findings must be remediated, accepted with rationale, or explicitly deferred
|
|
76
|
+
before Gate 1 can open.
|
|
77
|
+
10. When review completes, direct the user to review `01-requirements.md`, `README.md`, `service-recommendations.md`,
|
|
74
78
|
`sku-preferences.md`, and `challenger-findings.md`. Gate 1 remains a human terminal ceremony; never approve it.
|
|
75
79
|
|
|
76
80
|
Do not read repository files to discover artifact schemas; `apex/taskContext` is the complete output contract for this
|
|
@@ -14,6 +14,7 @@ tools:
|
|
|
14
14
|
- apex/projectList
|
|
15
15
|
- apex/projectUse
|
|
16
16
|
- apex/projectDelete
|
|
17
|
+
- apex/gateDecide
|
|
17
18
|
- azure-resource-manager-mcp/get_retail_prices
|
|
18
19
|
- azure-resource-manager-mcp/query_costs
|
|
19
20
|
- azure-resource-manager-mcp/query_aks_costs
|
|
@@ -88,6 +89,9 @@ Coordinate APEX without authoring project artifacts or inferring workflow state.
|
|
|
88
89
|
`apex gate decide --gate <N> --decision <approved|rejected> --actor <USER_ID> --json`. At Gate 4, also require
|
|
89
90
|
review of the exact preview, target, expiry, and approval recipient before directing
|
|
90
91
|
`apex gate decide --gate 4 --decision <approved|rejected> --actor <USER_ID> --recipient <RECIPIENT_ID> --json`.
|
|
92
|
+
9. When the user explicitly says `approve Gate 1`, `approve Gate 2`, `approve Gate 3`, or the equivalent rejection,
|
|
93
|
+
call `apex/gateDecide` with that gate, decision, and `confirm: true`. The operation derives the actor from the local
|
|
94
|
+
OS username. Do not use it for Gate 4, and do not infer confirmation from an ambiguous message.
|
|
91
95
|
|
|
92
96
|
Use the active client projection's question mechanism only for project creation or kernel-owned routing choices. Read
|
|
93
97
|
`.github/skills/apex-workflow/SKILL.md` only when status, resume, or project selection needs more guidance.
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"bundleVersion": "0.10.0-next.
|
|
3
|
+
"bundleVersion": "0.10.0-next.4",
|
|
4
4
|
"capabilityProtocolVersion": "1.0.0",
|
|
5
5
|
"components": {
|
|
6
6
|
"cli": {
|
|
7
7
|
"source": "local",
|
|
8
|
-
"version": "0.10.0-next.
|
|
8
|
+
"version": "0.10.0-next.4"
|
|
9
9
|
},
|
|
10
10
|
"contracts": {
|
|
11
11
|
"source": "local",
|
|
12
|
-
"version": "0.10.0-next.
|
|
12
|
+
"version": "0.10.0-next.4"
|
|
13
13
|
},
|
|
14
14
|
"kernel": {
|
|
15
15
|
"source": "local",
|
|
16
|
-
"version": "0.10.0-next.
|
|
16
|
+
"version": "0.10.0-next.4"
|
|
17
17
|
},
|
|
18
18
|
"capabilities": {
|
|
19
19
|
"source": "local",
|
|
20
|
-
"version": "0.10.0-next.
|
|
20
|
+
"version": "0.10.0-next.4"
|
|
21
21
|
},
|
|
22
22
|
"renderers": {
|
|
23
23
|
"source": "local",
|
|
24
|
-
"version": "0.10.0-next.
|
|
24
|
+
"version": "0.10.0-next.4"
|
|
25
25
|
},
|
|
26
26
|
"customizationBundle": {
|
|
27
27
|
"source": "local",
|
|
28
|
-
"version": "0.10.0-next.
|
|
28
|
+
"version": "0.10.0-next.4",
|
|
29
29
|
"manifest": "@apexops/cli/assets/customizations/manifest.json",
|
|
30
30
|
"assetManifest": "@apexops/cli/assets/manifest.json",
|
|
31
31
|
"compositionId": "apex-managed-workspace"
|
|
@@ -12,6 +12,7 @@ tools:
|
|
|
12
12
|
- apex/taskContext
|
|
13
13
|
- apex/stageArtifact
|
|
14
14
|
- apex/completeTask
|
|
15
|
+
- apex/planComplete
|
|
15
16
|
- azure-resource-manager-mcp/get_retail_prices
|
|
16
17
|
- azure-resource-manager-mcp/query_costs
|
|
17
18
|
- azure-resource-manager-mcp/query_aks_costs
|
|
@@ -48,9 +49,9 @@ Gate 3.
|
|
|
48
49
|
secret reference must include `kind`, `provider`, and `reference`.
|
|
49
50
|
4. Explain logical resources, dependencies, controls, implementation bindings, environment inputs, and rollback or
|
|
50
51
|
validation risks. Ask targeted follow-ups only for unresolved user-owned choices; never infer secret values.
|
|
51
|
-
5.
|
|
52
|
-
environment inputs.
|
|
53
|
-
|
|
52
|
+
5. Complete plans through `apex/planComplete` with the implementation intent, binding without `intentHash`, and
|
|
53
|
+
environment inputs. The kernel derives the canonical intent hash and atomically validates all three outputs. Do not
|
|
54
|
+
call `apex/completeTask` with a partial plan bundle or a placeholder `intentHash`.
|
|
54
55
|
6. APEX materializes a read-only Gate 3 package at `agent-output/<project>/<run>/plan/`. Report
|
|
55
56
|
`implementation-plan.md`, `iac-binding.md`, `environment-inputs.md`, and `challenger-findings.md` for human review.
|
|
56
57
|
7. When the kernel issues `plan-review`, delegate the exact task to `APEX Reviewer`. Present findings and use targeted
|
|
@@ -60,10 +60,14 @@ candidate Azure services without deciding architecture, and produces a human-rev
|
|
|
60
60
|
rationale for Architecture.
|
|
61
61
|
7. Stage and submit the typed requirements artifact. APEX materializes read-only review projections at
|
|
62
62
|
`agent-output/<project>/<run>/`; report those paths and their artifact hash, but do not edit the generated files.
|
|
63
|
-
8.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
8. Immediately call `apex/nextTask` after submitting requirements. In VS Code, when it returns the
|
|
64
|
+
`requirements-review` task, invoke `APEX Reviewer` through the `agent` tool with exactly that task context; do not
|
|
65
|
+
wait for the user to request the challenge. In a client without the Reviewer worker, report the exact pending review
|
|
66
|
+
task and do not claim the challenge ran.
|
|
67
|
+
9. Present every returned completeness or contradiction finding, then use targeted follow-up questions only for
|
|
68
|
+
findings the user chooses to resolve. Findings must be remediated, accepted with rationale, or explicitly deferred
|
|
69
|
+
before Gate 1 can open.
|
|
70
|
+
10. When review completes, direct the user to review `01-requirements.md`, `README.md`, `service-recommendations.md`,
|
|
67
71
|
`sku-preferences.md`, and `challenger-findings.md`. Gate 1 remains a human terminal ceremony; never approve it.
|
|
68
72
|
|
|
69
73
|
Do not read repository files to discover artifact schemas; `apex/taskContext` is the complete output contract for this
|
|
@@ -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.
|
package/assets/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
3
|
"sources": {
|
|
4
|
-
"customizations": "0.10.0-next.
|
|
4
|
+
"customizations": "0.10.0-next.4",
|
|
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": "
|
|
193
|
+
"digest": "f0890a928676c476f4de0e3260b65ab95cf89c34e45c5a8b66ff394ed88fdb09"
|
|
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": "
|
|
341
|
+
"digest": "2fc2af31e4f004f6ec5803f88c8d440896f960b45bed8af535d8e5b655a44e22"
|
|
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": "
|
|
382
|
-
"bytes":
|
|
381
|
+
"sha256": "a6278e6ab4784d81f84b3b036a360e517e72844478b1ba74718b18903a268fdc",
|
|
382
|
+
"bytes": 3094
|
|
383
383
|
},
|
|
384
384
|
{
|
|
385
385
|
"path": "client-projections/github-copilot-cli/.github/agents/apex-architect.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": "
|
|
421
|
+
"sourceHash": "9a6bb99cd4784f7afc84f49168933ff8ae0f234386a55ad962382272cb5083ec",
|
|
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": "
|
|
427
|
-
"bytes":
|
|
426
|
+
"sha256": "92a748d52adf590387cd819f565172cd4a023390afb17337a571e6feb784de17",
|
|
427
|
+
"bytes": 4724
|
|
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": "
|
|
436
|
+
"sourceHash": "87ac351f363c7b782ebbdeda40f15d6e8a7faabc2f400ffadcb0bca4ce66b2f3",
|
|
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": "
|
|
442
|
-
"bytes":
|
|
441
|
+
"sha256": "6843fcf9f5ff5f7a764eb9bc8253ab2baa06195ea20f1febcf38f366839639a9",
|
|
442
|
+
"bytes": 5432
|
|
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": "
|
|
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": "
|
|
457
|
-
"bytes":
|
|
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": "
|
|
776
|
+
"sourceHash": "dda22ba7b91f17796dc5bc723bdcd66a1ba5f9b971bddb080b21d68062d19a8c"
|
|
777
777
|
},
|
|
778
|
-
"sha256": "
|
|
779
|
-
"bytes":
|
|
778
|
+
"sha256": "dda22ba7b91f17796dc5bc723bdcd66a1ba5f9b971bddb080b21d68062d19a8c",
|
|
779
|
+
"bytes": 1396
|
|
780
780
|
},
|
|
781
781
|
{
|
|
782
782
|
"path": "client-projections/github-copilot-cli/.github/skills/apex-architecture/SKILL.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": "
|
|
2387
|
+
"sourceHash": "9a6bb99cd4784f7afc84f49168933ff8ae0f234386a55ad962382272cb5083ec",
|
|
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": "
|
|
2393
|
-
"bytes":
|
|
2392
|
+
"sha256": "d62130949707e65501d62452a3cec09918781abed2bd266d64383d9e6717478e",
|
|
2393
|
+
"bytes": 5032
|
|
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": "
|
|
2402
|
+
"sourceHash": "87ac351f363c7b782ebbdeda40f15d6e8a7faabc2f400ffadcb0bca4ce66b2f3",
|
|
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": "
|
|
2408
|
-
"bytes":
|
|
2407
|
+
"sha256": "e69cce296049d7f9ac411889e8c094cb4278957fb4d35520e9ebb4b24a036e61",
|
|
2408
|
+
"bytes": 5736
|
|
2409
2409
|
},
|
|
2410
2410
|
{
|
|
2411
2411
|
"path": "client-projections/github-copilot-vscode/.github/agents/apex-reviewer.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": "
|
|
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": "
|
|
2453
|
-
"bytes":
|
|
2452
|
+
"sha256": "1ebb9da1303aff993228efdc1bb29dde70c6ce9c3cb1b61306659ae2a7ecc6f2",
|
|
2453
|
+
"bytes": 6079
|
|
2454
2454
|
},
|
|
2455
2455
|
{
|
|
2456
2456
|
"path": "client-projections/github-copilot-vscode/.github/copilot-instructions.md",
|
|
@@ -4385,7 +4385,7 @@
|
|
|
4385
4385
|
"path": "config/runtime-bundle.v1.json",
|
|
4386
4386
|
"mapping": "config"
|
|
4387
4387
|
},
|
|
4388
|
-
"sha256": "
|
|
4388
|
+
"sha256": "50c39bd12f0ac738fb2ac7b2dc63a761ccd4392dfc7cff57c991b43629473674",
|
|
4389
4389
|
"bytes": 2039
|
|
4390
4390
|
},
|
|
4391
4391
|
{
|
|
@@ -4445,8 +4445,8 @@
|
|
|
4445
4445
|
"path": "customizations/.github/agents/apex-planner.agent.md",
|
|
4446
4446
|
"mapping": "customizations"
|
|
4447
4447
|
},
|
|
4448
|
-
"sha256": "
|
|
4449
|
-
"bytes":
|
|
4448
|
+
"sha256": "9a6bb99cd4784f7afc84f49168933ff8ae0f234386a55ad962382272cb5083ec",
|
|
4449
|
+
"bytes": 4848
|
|
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": "
|
|
4459
|
-
"bytes":
|
|
4458
|
+
"sha256": "87ac351f363c7b782ebbdeda40f15d6e8a7faabc2f400ffadcb0bca4ce66b2f3",
|
|
4459
|
+
"bytes": 5552
|
|
4460
4460
|
},
|
|
4461
4461
|
{
|
|
4462
4462
|
"path": "customizations/.github/agents/apex-reviewer.agent.md",
|
|
@@ -4485,8 +4485,8 @@
|
|
|
4485
4485
|
"path": "customizations/.github/agents/apex.agent.md",
|
|
4486
4486
|
"mapping": "customizations"
|
|
4487
4487
|
},
|
|
4488
|
-
"sha256": "
|
|
4489
|
-
"bytes":
|
|
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": "
|
|
4719
|
-
"bytes":
|
|
4718
|
+
"sha256": "dda22ba7b91f17796dc5bc723bdcd66a1ba5f9b971bddb080b21d68062d19a8c",
|
|
4719
|
+
"bytes": 1396
|
|
4720
4720
|
},
|
|
4721
4721
|
{
|
|
4722
4722
|
"path": "customizations/.github/skills/apex-architecture/SKILL.md",
|
|
@@ -5855,13 +5855,13 @@
|
|
|
5855
5855
|
"path": "customizations/manifest.json",
|
|
5856
5856
|
"mapping": "customizations"
|
|
5857
5857
|
},
|
|
5858
|
-
"sha256": "
|
|
5858
|
+
"sha256": "f1a21469470732feaf9cfda73e6e6b74ba573555548cf08eb23a5f3e0a415ae7",
|
|
5859
5859
|
"bytes": 14078
|
|
5860
5860
|
}
|
|
5861
5861
|
],
|
|
5862
5862
|
"lock": {
|
|
5863
5863
|
"algorithm": "sha256",
|
|
5864
5864
|
"canonicalization": "apex-bundled-assets-v1",
|
|
5865
|
-
"digest": "
|
|
5865
|
+
"digest": "20492f37396ff14048903cf57ebb86fe1177f22aca509d51d37b45a8afa1be93"
|
|
5866
5866
|
}
|
|
5867
5867
|
}
|
package/dist/mcp.js
CHANGED
|
@@ -65,6 +65,29 @@ const projectCreateInput = z
|
|
|
65
65
|
const projectIdInput = z.object({ projectId: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/) }).strict();
|
|
66
66
|
const projectUseInput = projectIdInput.extend({ runId: z.string().min(1).optional() });
|
|
67
67
|
const projectDeleteInput = projectIdInput.extend({ confirm: z.literal(true) });
|
|
68
|
+
const planCompletionInput = z
|
|
69
|
+
.object({
|
|
70
|
+
taskId: z.string().min(1),
|
|
71
|
+
implementationIntent: z.unknown(),
|
|
72
|
+
iacBinding: z
|
|
73
|
+
.object({
|
|
74
|
+
schemaVersion: z.literal("1.0.0"),
|
|
75
|
+
projectId: z.string().min(1),
|
|
76
|
+
runId: z.string().min(1),
|
|
77
|
+
track: z.enum(["bicep", "terraform"]),
|
|
78
|
+
resourceBindings: z.record(z.string().min(1), z.unknown()),
|
|
79
|
+
})
|
|
80
|
+
.strict(),
|
|
81
|
+
environmentInputs: z.unknown(),
|
|
82
|
+
})
|
|
83
|
+
.strict();
|
|
84
|
+
const gateDecisionInput = z
|
|
85
|
+
.object({
|
|
86
|
+
gate: z.union([z.literal(1), z.literal(2), z.literal(3)]),
|
|
87
|
+
decision: z.enum(["approved", "rejected"]),
|
|
88
|
+
confirm: z.literal(true),
|
|
89
|
+
})
|
|
90
|
+
.strict();
|
|
68
91
|
const normalizeOutputs = (outputs) => outputs.map(({ kind, value, summary }) => ({
|
|
69
92
|
kind,
|
|
70
93
|
value,
|
|
@@ -97,6 +120,10 @@ export function createMcpServer(service) {
|
|
|
97
120
|
description: "Delete a project and all of its run-bound state after explicit confirmation",
|
|
98
121
|
inputSchema: projectDeleteInput,
|
|
99
122
|
}, async ({ projectId, confirm }) => result(await service.deleteProject(projectId, confirm)));
|
|
123
|
+
server.registerTool("gateDecide", {
|
|
124
|
+
description: "Record an explicitly confirmed human decision for Gate 1, 2, or 3 using the local OS username as actor. Gate 4 remains CLI-only.",
|
|
125
|
+
inputSchema: gateDecisionInput,
|
|
126
|
+
}, async ({ gate, decision }) => result(await service.decideInteractiveGate(gate, decision)));
|
|
100
127
|
server.registerTool("stageArtifact", {
|
|
101
128
|
inputSchema: {
|
|
102
129
|
taskId: z.string(),
|
|
@@ -170,6 +197,10 @@ export function createMcpServer(service) {
|
|
|
170
197
|
}
|
|
171
198
|
return result(await service.completeTask(taskId, { kind, value, ...(summary === undefined ? {} : { summary }) }));
|
|
172
199
|
});
|
|
200
|
+
server.registerTool("planComplete", {
|
|
201
|
+
description: "Atomically complete a plan. Derives the canonical implementation intent hash for the binding; do not supply intentHash.",
|
|
202
|
+
inputSchema: planCompletionInput,
|
|
203
|
+
}, async ({ taskId, implementationIntent, iacBinding, environmentInputs }) => result(await service.completePlan(taskId, implementationIntent, iacBinding, environmentInputs)));
|
|
173
204
|
server.registerTool("preview", { description: "Read the current operator-created deployment preview" }, async () => result(await service.currentPreview()));
|
|
174
205
|
server.registerTool("reconcile", {}, async () => result(await service.reconcile()));
|
|
175
206
|
server.registerTool("inventory", {}, async () => result(await service.inventory()));
|
package/dist/service.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ApprovalEvidenceV1, type ArchitectureAvailabilityV1, type DeploymentPreviewV1, type InputRequestV1, type InputValueV1, type InputSubmissionV1, type ImprovementCategory, type ImprovementDecisionV1, type ImprovementObservationV1, type ImprovementPolicyV1, type ImprovementProposalV1, type ImprovementSource, type Operation, type ProjectId, type ResourceInventoryV1, type RunConfigV1, type RunId, type TaskEnvelopeV1 } from "@apexops/contracts";
|
|
1
|
+
import { type ApprovalEvidenceV1, type ArchitectureAvailabilityV1, type DeploymentPreviewV1, type EnvironmentInputsV1, type IacBindingV1, type InputRequestV1, type InputValueV1, type InputSubmissionV1, type ImprovementCategory, type ImprovementDecisionV1, type ImprovementObservationV1, type ImprovementPolicyV1, type ImprovementProposalV1, type ImprovementSource, type ImplementationIntentV1, type Operation, type ProjectId, type ResourceInventoryV1, type RunConfigV1, type RunId, type TaskEnvelopeV1 } from "@apexops/contracts";
|
|
2
2
|
import { type CapabilityPackInstallOptions, type IacProvider, type ProcessRunnerLike } from "@apexops/capabilities";
|
|
3
3
|
import { type JsonValue } from "@apexops/kernel";
|
|
4
4
|
import { type BundledClientProjection } from "./assets.js";
|
|
@@ -658,6 +658,10 @@ export declare class ApexService {
|
|
|
658
658
|
outputHashes: Partial<Record<ArtifactKind, string>>;
|
|
659
659
|
summary: string;
|
|
660
660
|
}>;
|
|
661
|
+
completePlan(taskId: string, intent: ImplementationIntentV1, binding: Omit<IacBindingV1, "intentHash">, environmentInputs: EnvironmentInputsV1): Promise<{
|
|
662
|
+
outputHashes: Partial<Record<ArtifactKind, string>>;
|
|
663
|
+
summary: string;
|
|
664
|
+
}>;
|
|
661
665
|
private acceptTaskOutputs;
|
|
662
666
|
private renderRequirementsDocument;
|
|
663
667
|
private requirementsReviewDirectory;
|
|
@@ -678,6 +682,7 @@ export declare class ApexService {
|
|
|
678
682
|
resolveReview(resolution: ReviewResolution): Promise<void>;
|
|
679
683
|
private assertReviewResolution;
|
|
680
684
|
decideGateNumber(gateNumber: number, decision: "approved" | "rejected", actor: string, options?: GateDecisionOptions): Promise<ApprovalEvidenceV1>;
|
|
685
|
+
decideInteractiveGate(gateNumber: 1 | 2 | 3, decision: "approved" | "rejected"): Promise<ApprovalEvidenceV1>;
|
|
681
686
|
preview(options: PreviewOptions): Promise<DeploymentPreviewV1>;
|
|
682
687
|
private operationsReviewDirectory;
|
|
683
688
|
private materializeOperationsPreviewPackage;
|
package/dist/service.js
CHANGED
|
@@ -5,7 +5,7 @@ import { ContentCache, EvidencePolicy, EvidenceStore, EventJournal, ImprovementS
|
|
|
5
5
|
import { DOCUMENT_REGISTRY, renderApprovalEvidence, renderDeploymentPreview, renderRequirementsDocument, renderResourceInventory, renderRunStatus, } from "@apexops/renderers";
|
|
6
6
|
import { constants } from "node:fs";
|
|
7
7
|
import { access, cp, lstat, mkdir, readFile, readdir, realpath, rename, rm, stat } from "node:fs/promises";
|
|
8
|
-
import { homedir } from "node:os";
|
|
8
|
+
import { homedir, userInfo } from "node:os";
|
|
9
9
|
import { basename, delimiter, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
10
10
|
import { resolveBundledAssets } from "./assets.js";
|
|
11
11
|
import { dependencyRevision as calculateDependencyRevision } from "./dependency-revision.js";
|
|
@@ -161,8 +161,7 @@ const REQUIREMENTS_INTAKE = [
|
|
|
161
161
|
{
|
|
162
162
|
round: "service-preferences",
|
|
163
163
|
questions: [
|
|
164
|
-
{ id: "
|
|
165
|
-
{ id: "prohibited-services", prompt: "List prohibited services or use 'none'." },
|
|
164
|
+
{ id: "prohibited-services", prompt: "List prohibited services, or explicitly defer the constraint." },
|
|
166
165
|
{
|
|
167
166
|
id: "service-preferences",
|
|
168
167
|
prompt: "Select preferred Azure services. Select all that apply; architecture chooses the exact combination.",
|
|
@@ -222,10 +221,22 @@ const REQUIREMENTS_INTAKE = [
|
|
|
222
221
|
prompt: "Choose the Azure region, or explicitly defer the decision.",
|
|
223
222
|
options: ["swedencentral", "westeurope", "germanywestcentral"],
|
|
224
223
|
},
|
|
225
|
-
{
|
|
224
|
+
{
|
|
225
|
+
id: "availability-recovery",
|
|
226
|
+
prompt: "Select required availability, backup, and disaster-recovery capabilities.",
|
|
227
|
+
options: [
|
|
228
|
+
"single-region-availability",
|
|
229
|
+
"availability-zones",
|
|
230
|
+
"automated-backups",
|
|
231
|
+
"point-in-time-restore",
|
|
232
|
+
"immutable-backups",
|
|
233
|
+
"cross-region-disaster-recovery",
|
|
234
|
+
],
|
|
235
|
+
multiSelect: true,
|
|
236
|
+
},
|
|
226
237
|
{
|
|
227
238
|
id: "recovery",
|
|
228
|
-
prompt: "
|
|
239
|
+
prompt: "Set exact recovery targets: provide RTO and RPO in whole minutes, or explicitly defer them.",
|
|
229
240
|
valueType: "recovery",
|
|
230
241
|
},
|
|
231
242
|
{
|
|
@@ -1005,6 +1016,13 @@ export class ApexService {
|
|
|
1005
1016
|
async completeTaskOutputs(taskId, outputs) {
|
|
1006
1017
|
return this.acceptTaskOutputs(taskId, outputs, false);
|
|
1007
1018
|
}
|
|
1019
|
+
async completePlan(taskId, intent, binding, environmentInputs) {
|
|
1020
|
+
return this.completeTaskOutputs(taskId, [
|
|
1021
|
+
{ kind: "implementation-intent", value: intent },
|
|
1022
|
+
{ kind: "iac-binding", value: { ...binding, intentHash: sha256Json(intent) } },
|
|
1023
|
+
{ kind: "environment-inputs", value: environmentInputs },
|
|
1024
|
+
]);
|
|
1025
|
+
}
|
|
1008
1026
|
async acceptTaskOutputs(taskId, outputs, legacy) {
|
|
1009
1027
|
const run = await this.currentRun();
|
|
1010
1028
|
const task = await this.readTask(run, taskId);
|
|
@@ -1478,6 +1496,16 @@ export class ApexService {
|
|
|
1478
1496
|
await this.materializeOperationsApprovalPackage(run, approval, approvalHash);
|
|
1479
1497
|
return approval;
|
|
1480
1498
|
}
|
|
1499
|
+
async decideInteractiveGate(gateNumber, decision) {
|
|
1500
|
+
let actor = "local-user";
|
|
1501
|
+
try {
|
|
1502
|
+
actor = userInfo().username.trim() || actor;
|
|
1503
|
+
}
|
|
1504
|
+
catch {
|
|
1505
|
+
// Some minimal container identities do not have an OS user entry.
|
|
1506
|
+
}
|
|
1507
|
+
return this.decideGateNumber(gateNumber, decision, actor);
|
|
1508
|
+
}
|
|
1481
1509
|
async preview(options) {
|
|
1482
1510
|
const run = await this.currentRun();
|
|
1483
1511
|
await this.assertCurrentWriterAuthority(run, new WriterTransferStore(this.projects.runDirectory(run.projectId, run.runId), this.clock));
|
|
@@ -2461,6 +2489,15 @@ export class ApexService {
|
|
|
2461
2489
|
return this.inputRequest(event, run.ownerEpoch);
|
|
2462
2490
|
}
|
|
2463
2491
|
requirementsIntakeQuestions(round, events) {
|
|
2492
|
+
if (round.round === "service-preferences") {
|
|
2493
|
+
const scenario = this.recordedRequirementsInput(events)?.["delivery-scenario"];
|
|
2494
|
+
if (scenario !== "migration" && scenario !== "modernization" && scenario !== "extension")
|
|
2495
|
+
return round.questions;
|
|
2496
|
+
return [
|
|
2497
|
+
{ id: "retained-services", prompt: "List Azure services or integrations that must be retained." },
|
|
2498
|
+
...round.questions,
|
|
2499
|
+
];
|
|
2500
|
+
}
|
|
2464
2501
|
if (round.round !== "workload-pattern")
|
|
2465
2502
|
return round.questions;
|
|
2466
2503
|
const scenario = this.recordedRequirementsInput(events)?.["delivery-scenario"];
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const APEX_VERSION: "0.10.0-next.
|
|
1
|
+
export declare const APEX_VERSION: "0.10.0-next.4";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const APEX_VERSION = "0.10.0-next.
|
|
1
|
+
export const APEX_VERSION = "0.10.0-next.4";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apexops/cli",
|
|
3
|
-
"version": "0.10.0-next.
|
|
3
|
+
"version": "0.10.0-next.4",
|
|
4
4
|
"description": "Portable no-shell CLI and MCP facade for APEX",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
"assets"
|
|
33
33
|
],
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@apexops/capabilities": "0.10.0-next.
|
|
36
|
-
"@apexops/contracts": "0.10.0-next.
|
|
37
|
-
"@apexops/kernel": "0.10.0-next.
|
|
38
|
-
"@apexops/renderers": "0.10.0-next.
|
|
35
|
+
"@apexops/capabilities": "0.10.0-next.4",
|
|
36
|
+
"@apexops/contracts": "0.10.0-next.4",
|
|
37
|
+
"@apexops/kernel": "0.10.0-next.4",
|
|
38
|
+
"@apexops/renderers": "0.10.0-next.4",
|
|
39
39
|
"@azure/mcp": "3.0.0-beta.37",
|
|
40
40
|
"@hono/node-server": "2.0.11",
|
|
41
41
|
"@modelcontextprotocol/sdk": "1.29.0",
|