aw-spec-cli 0.1.4 ā 0.1.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.
- package/assets/.agents/agent.json +28 -0
- package/assets/.agents/skills/appweaver/SKILL.md +56 -0
- package/assets/.agents/skills/appweaver-demo/SKILL.md +59 -0
- package/assets/.claude/agent.json +27 -0
- package/assets/.claude/skills/appweaver/SKILL.md +55 -0
- package/assets/.claude/skills/appweaver-demo/SKILL.md +59 -0
- package/assets/.kilocode/agent.json +28 -0
- package/assets/.kilocode/workflows/appweaver-demo.md +59 -0
- package/assets/.kilocode/workflows/appweaver.md +55 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +7 -54
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/assets/.agents/skills/aw-spec-addcomponent/SKILL.md +0 -129
- package/assets/.agents/skills/aw-spec-agent-context-update/SKILL.md +0 -31
- package/assets/.agents/skills/aw-spec-analyze/SKILL.md +0 -296
- package/assets/.agents/skills/aw-spec-checklist/SKILL.md +0 -374
- package/assets/.agents/skills/aw-spec-clarify/SKILL.md +0 -320
- package/assets/.agents/skills/aw-spec-constitution/SKILL.md +0 -194
- package/assets/.agents/skills/aw-spec-fast-implement/SKILL.md +0 -268
- package/assets/.agents/skills/aw-spec-foundation/SKILL.md +0 -358
- package/assets/.agents/skills/aw-spec-implement/SKILL.md +0 -279
- package/assets/.agents/skills/aw-spec-minimal-implementation/SKILL.md +0 -209
- package/assets/.agents/skills/aw-spec-plan/SKILL.md +0 -221
- package/assets/.agents/skills/aw-spec-select-domain/SKILL.md +0 -73
- package/assets/.agents/skills/aw-spec-specify/SKILL.md +0 -382
- package/assets/.agents/skills/aw-spec-tasks/SKILL.md +0 -259
- package/assets/.agents/skills/aw-spec-taskstoissues/SKILL.md +0 -107
- package/assets/.aw-spec/domain.json +0 -3
- package/assets/.aw-spec/extensions/.registry +0 -19
- package/assets/.aw-spec/extensions/agent-context/README.md +0 -57
- package/assets/.aw-spec/extensions/agent-context/agent-context-config.yml +0 -4
- package/assets/.aw-spec/extensions/agent-context/commands/aw-spec.agent-context.update.md +0 -26
- package/assets/.aw-spec/extensions/agent-context/extension.yml +0 -34
- package/assets/.aw-spec/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -201
- package/assets/.aw-spec/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -237
- package/assets/.aw-spec/extensions.yml +0 -23
- package/assets/.aw-spec/feature.json +0 -3
- package/assets/.aw-spec/init-options.json +0 -9
- package/assets/.aw-spec/integration.json +0 -15
- package/assets/.aw-spec/integrations/aw-spec.manifest.json +0 -17
- package/assets/.aw-spec/integrations/claude.manifest.json +0 -17
- package/assets/.aw-spec/memory/constitution.md +0 -50
- package/assets/.aw-spec/scripts/bash/check-prerequisites.sh +0 -189
- package/assets/.aw-spec/scripts/bash/common.sh +0 -582
- package/assets/.aw-spec/scripts/bash/create-new-feature.sh +0 -299
- package/assets/.aw-spec/scripts/bash/setup-plan.sh +0 -84
- package/assets/.aw-spec/scripts/bash/setup-tasks.sh +0 -91
- package/assets/.aw-spec/templates/checklist-template.md +0 -40
- package/assets/.aw-spec/templates/constitution-template.md +0 -57
- package/assets/.aw-spec/templates/plan-template.md +0 -113
- package/assets/.aw-spec/templates/spec-template.md +0 -131
- package/assets/.aw-spec/templates/tasks-template.md +0 -252
- package/assets/.aw-spec/workflows/aw-spec/workflow.yml +0 -77
- package/assets/.aw-spec/workflows/workflow-registry.json +0 -13
- package/assets/.claude/skills/aw-spec-addcomponent/SKILL.md +0 -129
- package/assets/.claude/skills/aw-spec-agent-context-update/SKILL.md +0 -31
- package/assets/.claude/skills/aw-spec-analyze/SKILL.md +0 -296
- package/assets/.claude/skills/aw-spec-checklist/SKILL.md +0 -374
- package/assets/.claude/skills/aw-spec-clarify/SKILL.md +0 -320
- package/assets/.claude/skills/aw-spec-constitution/SKILL.md +0 -194
- package/assets/.claude/skills/aw-spec-fast-implement/SKILL.md +0 -268
- package/assets/.claude/skills/aw-spec-foundation/SKILL.md +0 -358
- package/assets/.claude/skills/aw-spec-implement/SKILL.md +0 -279
- package/assets/.claude/skills/aw-spec-minimal-implementation/SKILL.md +0 -209
- package/assets/.claude/skills/aw-spec-plan/SKILL.md +0 -221
- package/assets/.claude/skills/aw-spec-select-domain/SKILL.md +0 -73
- package/assets/.claude/skills/aw-spec-specify/SKILL.md +0 -382
- package/assets/.claude/skills/aw-spec-tasks/SKILL.md +0 -259
- package/assets/.claude/skills/aw-spec-taskstoissues/SKILL.md +0 -107
- package/assets/.kilocode/rules/specify-rules.md +0 -4
- package/assets/.kilocode/workflows/aw-spec-addcomponent.md +0 -129
- package/assets/.kilocode/workflows/aw-spec-agent-context.update.md +0 -31
- package/assets/.kilocode/workflows/aw-spec-analyze.md +0 -296
- package/assets/.kilocode/workflows/aw-spec-checklist.md +0 -374
- package/assets/.kilocode/workflows/aw-spec-clarify.md +0 -320
- package/assets/.kilocode/workflows/aw-spec-constitution.md +0 -194
- package/assets/.kilocode/workflows/aw-spec-fast-implement.md +0 -263
- package/assets/.kilocode/workflows/aw-spec-foundation.md +0 -358
- package/assets/.kilocode/workflows/aw-spec-implement.md +0 -279
- package/assets/.kilocode/workflows/aw-spec-minimal-implementation.md +0 -204
- package/assets/.kilocode/workflows/aw-spec-plan.md +0 -221
- package/assets/.kilocode/workflows/aw-spec-select-domain.md +0 -73
- package/assets/.kilocode/workflows/aw-spec-specify.md +0 -382
- package/assets/.kilocode/workflows/aw-spec-tasks.md +0 -259
- package/assets/.kilocode/workflows/aw-spec-taskstoissues.md +0 -107
- package/assets/docs/ModularMonolith/ModularMonolith.Reference.pack.txt +0 -25248
- package/assets/docs/ModularMonolith/ModularMonolith.pack.txt +0 -5726
- package/assets/docs/ModularMonolith/pack-foundation.ps1 +0 -145
- package/assets/docs/ModularMonolith/pack-foundation.sh +0 -196
- package/assets/docs/ModularMonolith/pack-reference-foundation.ps1 +0 -157
- package/assets/docs/ModularMonolith/pack-reference-foundation.sh +0 -209
- package/assets/docs/ModularMonolith/unpack-foundation.ps1 +0 -126
- package/assets/docs/ModularMonolith/unpack-foundation.sh +0 -217
- package/assets/docs/ModularMonolith/unpack-reference-foundation.ps1 +0 -129
- package/assets/docs/ModularMonolith/unpack-reference-foundation.sh +0 -218
- package/assets/docs/README.md +0 -106
- package/assets/docs/UI.Visualization/PACKAGING.md +0 -191
- package/assets/docs/UI.Visualization/UI.Visualization.Reference.pack.txt +0 -11768
- package/assets/docs/UI.Visualization/UI.Visualization.pack.txt +0 -11214
- package/assets/docs/UI.Visualization/pack-foundation.ps1 +0 -165
- package/assets/docs/UI.Visualization/pack-foundation.sh +0 -206
- package/assets/docs/UI.Visualization/pack-reference-foundation.ps1 +0 -159
- package/assets/docs/UI.Visualization/pack-reference-foundation.sh +0 -205
- package/assets/docs/UI.Visualization/unpack-foundation.ps1 +0 -126
- package/assets/docs/UI.Visualization/unpack-foundation.sh +0 -217
- package/assets/docs/UI.Visualization/unpack-reference-foundation.ps1 +0 -129
- package/assets/docs/UI.Visualization/unpack-reference-foundation.sh +0 -218
- package/assets/docs/VerticalSlice/PACKAGING.md +0 -185
- package/assets/docs/VerticalSlice/VerticalSlice.Reference.pack.txt +0 -19318
- package/assets/docs/VerticalSlice/VerticalSlice.pack.txt +0 -2833
- package/assets/docs/VerticalSlice/pack-foundation.ps1 +0 -145
- package/assets/docs/VerticalSlice/pack-foundation.sh +0 -196
- package/assets/docs/VerticalSlice/pack-reference-foundation.ps1 +0 -157
- package/assets/docs/VerticalSlice/pack-reference-foundation.sh +0 -209
- package/assets/docs/VerticalSlice/unpack-foundation.ps1 +0 -126
- package/assets/docs/VerticalSlice/unpack-foundation.sh +0 -217
- package/assets/docs/VerticalSlice/unpack-reference-foundation.ps1 +0 -129
- package/assets/docs/VerticalSlice/unpack-reference-foundation.sh +0 -218
- package/assets/docs/architecture/clean-architecture.md +0 -71
- package/assets/docs/architecture/cqrs.md +0 -141
- package/assets/docs/architecture/eventing.md +0 -83
- package/assets/docs/architecture/folder-structure.md +0 -61
- package/assets/docs/architecture/modular-monolith.md +0 -47
- package/assets/docs/architecture/persistence.md +0 -269
- package/assets/docs/architecture/testing.md +0 -55
- package/assets/docs/architecture/vertical-slices.md +0 -201
- package/assets/docs/command.txt +0 -295
- package/assets/docs/components/Email/README.md +0 -119
- package/assets/docs/components/Email/ReferenceEndpoints/SendEmailEndpoint.cs +0 -84
- package/assets/docs/components/Email/integration.md +0 -300
- package/assets/docs/components/Jobs/README.md +0 -113
- package/assets/docs/components/Jobs/integration.md +0 -259
- package/assets/docs/components/QrGenerator/README.md +0 -85
- package/assets/docs/components/QrGenerator/ReferenceEndpoints/GenerateQrEndpoint.cs +0 -57
- package/assets/docs/components/QrGenerator/integration.md +0 -230
- package/assets/docs/components/README.md +0 -74
- package/assets/docs/domain/domain-driven-design.md +0 -212
- package/assets/docs/domainspecs/UIVisualization/chart-bubble.md +0 -70
- package/assets/docs/domainspecs/UIVisualization/chart-dimred.md +0 -58
- package/assets/docs/domainspecs/UIVisualization/chart-heatmap.md +0 -62
- package/assets/docs/domainspecs/UIVisualization/chart-network.md +0 -69
- package/assets/docs/domainspecs/UIVisualization/chart-parallel.md +0 -75
- package/assets/docs/domainspecs/UIVisualization/chart-scurve.md +0 -66
- package/assets/docs/domainspecs/UIVisualization/chart-survival.md +0 -69
- package/assets/docs/domainspecs/UIVisualization/chart-trellis.md +0 -68
- package/assets/docs/domainspecs/UIVisualization/chart-violin.md +0 -61
- package/assets/docs/domainspecs/UIVisualization/chart-volcano.md +0 -63
- package/assets/docs/domainspecs/UIVisualization/charting-standards.domain.md +0 -80
- package/assets/docs/domainspecs/UIVisualization/clean-architecture.domain.md +0 -87
- package/assets/docs/domainspecs/UIVisualization/coding-standards.domain.md +0 -47
- package/assets/docs/domainspecs/UIVisualization/comandrulemap.md +0 -130
- package/assets/docs/domainspecs/UIVisualization/component-contracts.domain.md +0 -67
- package/assets/docs/domainspecs/UIVisualization/data-source.domain.md +0 -68
- package/assets/docs/domainspecs/UIVisualization/domain-requirements.md +0 -110
- package/assets/docs/domainspecs/UIVisualization/folder-structure.domain.md +0 -55
- package/assets/docs/domainspecs/UIVisualization/state-management.domain.md +0 -67
- package/assets/docs/domainspecs/UIVisualization/testing.domain.md +0 -52
- package/assets/docs/domainspecs/UIVisualization/ui-viz-terms.md +0 -39
- package/assets/docs/domainspecs/healthcare/ai-rules.domain.md +0 -34
- package/assets/docs/domainspecs/healthcare/api-versioning.domain.md +0 -17
- package/assets/docs/domainspecs/healthcare/auditing.domain.md +0 -29
- package/assets/docs/domainspecs/healthcare/authorization.domain.md +0 -26
- package/assets/docs/domainspecs/healthcare/clinical-terms.md +0 -20
- package/assets/docs/domainspecs/healthcare/coding-standards.domain.md +0 -26
- package/assets/docs/domainspecs/healthcare/comandrulemap.md +0 -166
- package/assets/docs/domainspecs/healthcare/consent.md +0 -19
- package/assets/docs/domainspecs/healthcare/cqrs.domain.md +0 -12
- package/assets/docs/domainspecs/healthcare/data-classification.domain.md +0 -28
- package/assets/docs/domainspecs/healthcare/dependency-policy.domain.md +0 -11
- package/assets/docs/domainspecs/healthcare/dicom.md +0 -15
- package/assets/docs/domainspecs/healthcare/domain-driven-design.domain.md +0 -28
- package/assets/docs/domainspecs/healthcare/domain-requirements.md +0 -55
- package/assets/docs/domainspecs/healthcare/eventing.domain.md +0 -18
- package/assets/docs/domainspecs/healthcare/fhir.md +0 -36
- package/assets/docs/domainspecs/healthcare/folder-structure.domain.md +0 -23
- package/assets/docs/domainspecs/healthcare/hipaa.md +0 -34
- package/assets/docs/domainspecs/healthcare/hl7.md +0 -15
- package/assets/docs/domainspecs/healthcare/integration-terms.md +0 -21
- package/assets/docs/domainspecs/healthcare/persistence.domain.md +0 -20
- package/assets/docs/domainspecs/healthcare/terminology.md +0 -30
- package/assets/docs/domainspecs/healthcare/testing.domain.md +0 -15
- package/assets/docs/domainspecs/healthcare/vertical-slices.domain.md +0 -18
- package/assets/docs/domainspecs/healthcare/zero-trust.domain.md +0 -12
- package/assets/docs/domainspecs/pharma/ai-rules.domain.md +0 -32
- package/assets/docs/domainspecs/pharma/api-versioning.domain.md +0 -20
- package/assets/docs/domainspecs/pharma/atc.md +0 -22
- package/assets/docs/domainspecs/pharma/auditing.domain.md +0 -26
- package/assets/docs/domainspecs/pharma/authorization.domain.md +0 -25
- package/assets/docs/domainspecs/pharma/coding-standards.domain.md +0 -28
- package/assets/docs/domainspecs/pharma/comandrulemap.md +0 -186
- package/assets/docs/domainspecs/pharma/cqrs.domain.md +0 -16
- package/assets/docs/domainspecs/pharma/data-classification.domain.md +0 -24
- package/assets/docs/domainspecs/pharma/data-provenance.md +0 -21
- package/assets/docs/domainspecs/pharma/dependency-policy.domain.md +0 -11
- package/assets/docs/domainspecs/pharma/domain-driven-design.domain.md +0 -36
- package/assets/docs/domainspecs/pharma/domain-requirements.md +0 -99
- package/assets/docs/domainspecs/pharma/eventing.domain.md +0 -18
- package/assets/docs/domainspecs/pharma/fhir.md +0 -31
- package/assets/docs/domainspecs/pharma/folder-structure.domain.md +0 -24
- package/assets/docs/domainspecs/pharma/hl7.md +0 -17
- package/assets/docs/domainspecs/pharma/idmp.md +0 -26
- package/assets/docs/domainspecs/pharma/integration-terms.md +0 -21
- package/assets/docs/domainspecs/pharma/ndc.md +0 -28
- package/assets/docs/domainspecs/pharma/persistence.domain.md +0 -23
- package/assets/docs/domainspecs/pharma/pharma-terms.md +0 -27
- package/assets/docs/domainspecs/pharma/product-lifecycle.domain.md +0 -30
- package/assets/docs/domainspecs/pharma/regulatory-compliance.md +0 -19
- package/assets/docs/domainspecs/pharma/terminology.md +0 -32
- package/assets/docs/domainspecs/pharma/testing.domain.md +0 -19
- package/assets/docs/domainspecs/pharma/vertical-slices.domain.md +0 -17
- package/assets/docs/domainspecs/pharma/zero-trust.domain.md +0 -12
- package/assets/docs/glossary/ai-rules.md +0 -59
- package/assets/docs/governance/api-versioning.md +0 -99
- package/assets/docs/governance/coding-standards.md +0 -87
- package/assets/docs/governance/dependency-policy.md +0 -40
- package/assets/docs/interop/ihe-conformance.md +0 -31
- package/assets/docs/security/auditing.md +0 -117
- package/assets/docs/security/authorization-matrix.md +0 -14
- package/assets/docs/security/authorization.md +0 -87
- package/assets/docs/security/data-classification.md +0 -38
- package/assets/docs/security/zero-trust.md +0 -76
- package/assets/docs/technology-constitution.md +0 -172
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "antigravity",
|
|
3
|
+
"sdk": {
|
|
4
|
+
"type": "google-antigravity",
|
|
5
|
+
"package": "google-antigravity",
|
|
6
|
+
"module": "google.antigravity",
|
|
7
|
+
"adapter": "../.appweaver/orchestrator/adapters/google_antigravity.py"
|
|
8
|
+
},
|
|
9
|
+
"runtime": "Antigravity CLI (agy -p) ā Antigravity is Gemini-based",
|
|
10
|
+
"note": "Antigravity (agy) has no --system-prompt flag, so 'system' is folded into the prompt (system: prepend).",
|
|
11
|
+
"bin": "agy",
|
|
12
|
+
"args": ["--dangerously-skip-permissions", "--add-dir", "."],
|
|
13
|
+
"model_flag": "--model",
|
|
14
|
+
"system": "prepend",
|
|
15
|
+
"user": { "mode": "arg", "flag": "-p" },
|
|
16
|
+
"tools_flag": null,
|
|
17
|
+
"approval": {
|
|
18
|
+
"acceptEdits": ["--mode", "accept-edits"],
|
|
19
|
+
"bypassPermissions": ["--dangerously-skip-permissions"],
|
|
20
|
+
"default": [],
|
|
21
|
+
"readonly": ["--mode", "plan"]
|
|
22
|
+
},
|
|
23
|
+
"isolation": {
|
|
24
|
+
"bare": [],
|
|
25
|
+
"fresh": []
|
|
26
|
+
},
|
|
27
|
+
"result_keys": ["response", "result"]
|
|
28
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "appweaver"
|
|
3
|
+
description: "Parametric launcher (Antigravity): run ANY converted aw-spec skill on the aw-orchestrator under one of the 4 strategies (agent [default], spawn, sdk, sdk-apply)."
|
|
4
|
+
argument-hint: "<skill> [strategy] [inputā¦] ā e.g. 'select-domain', 'specify spawn Build an order API', 'analyze-slice'"
|
|
5
|
+
compatibility: "Requires .appweaver/orchestrator/ and the agy CLI on PATH"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
disable-model-invocation: false
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Orchestrator Skill Launcher
|
|
11
|
+
|
|
12
|
+
Runs one converted `aw-spec-*` workflow on the shared, agent-agnostic engine. All orchestration and **all context management live in the workflow YAML + engine** (`.appweaver/orchestrator/orchestrator.py`): the interpreter assembles the COMPLETE payload (system + user) for every request; you never author generation context yourself. Execution follows the chosen strategy; the checkpoint channel carries every human-facing interaction regardless of strategy.
|
|
13
|
+
|
|
14
|
+
- **Engine + workflows (common, shared by all agents):** `.appweaver/orchestrator/orchestrator.py`, `.appweaver/orchestrator/workflows/aw-spec-<skill>.orch.yaml`, shared modules in `.appweaver/orchestrator/modules/`, shared scripts in `.appweaver/scripts/`
|
|
15
|
+
- **This agent's transport profile:** `.agents/agent.json`
|
|
16
|
+
|
|
17
|
+
> Antigravity spawns via the `agy` CLI (Gemini-based; no `--system-prompt`,
|
|
18
|
+
> so `system` is folded into the prompt ā isolation is best-effort). Its
|
|
19
|
+
> `sdk` block declares the SDK the `sdk`/`sdk-apply` strategies import
|
|
20
|
+
> (`google-antigravity`) and the adapter
|
|
21
|
+
> (`.appweaver/orchestrator/adapters/google_antigravity.py`, shared per-SDK)
|
|
22
|
+
> that owns its calling convention.
|
|
23
|
+
|
|
24
|
+
## Execution Steps
|
|
25
|
+
|
|
26
|
+
1. **Parse Arguments** (`<skill> [strategy] [inputā¦]`):
|
|
27
|
+
- `skill` (required): the aw-spec skill name, e.g. `demo`, `select-domain`, `foundation`, `specify`, `design`, `implement`, `build`. Resolve the workflow file `.appweaver/orchestrator/workflows/aw-spec-<skill>.orch.yaml`. If it does not exist, list the available `aw-spec-*.orch.yaml` files in that folder and stop.
|
|
28
|
+
- `strategy` (optional, one of `agent`, `spawn`, `sdk`, `sdk-apply`; default `agent` ā YOU fulfill each generation through the checkpoint channel, no profile needed): who executes each generation. Always pass `--strategy <strategy>`.
|
|
29
|
+
- Everything after the strategy is the user input: pass it as `--input "<text>"` (omit when empty).
|
|
30
|
+
- `--agent-profile .agents/agent.json` is required for `spawn`, `sdk`, and `sdk-apply` (`agent` needs no profile). If the SDK package isn't installed, add `--sdk-install`.
|
|
31
|
+
- **Always** pass `--checkpoint .appweaver/orchestrator/.state/<skill>.state.json` ā for EVERY strategy. Converted skills contain interactive steps (questions, selections, hooks); the checkpoint is how they reach you and the user. Strategies only govern who generates.
|
|
32
|
+
- `spawn` may also add `--isolation bare|fresh` and `--model <name>`; `sdk`/`sdk-apply` accept `--model <name>`.
|
|
33
|
+
|
|
34
|
+
2. **Run the Interpreter**:
|
|
35
|
+
```bash
|
|
36
|
+
python3 .appweaver/orchestrator/orchestrator.py \
|
|
37
|
+
.appweaver/orchestrator/workflows/aw-spec-<skill>.orch.yaml \
|
|
38
|
+
--strategy <strategy> \
|
|
39
|
+
--checkpoint .appweaver/orchestrator/.state/<skill>.state.json \
|
|
40
|
+
[--agent-profile .agents/agent.json] # spawn, sdk, sdk-apply \
|
|
41
|
+
[--input "<user input>"] \
|
|
42
|
+
--json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
3. **Handle the Suspend/Resume Loop** ā whenever the command exits with code `2`, read the printed `pending` JSON and dispatch on `pending.kind`; fulfill it, write the response to `pending.response_path`, then re-run the SAME command. Repeat until exit `0` (done) or `1` (stopped by a gate).
|
|
46
|
+
- **`ask`** ā ask the USER the `prompt` with the listed `options` (use your question tool). Write the chosen answer as PLAIN TEXT to `response_path` (comma-separated values when `multi` is true).
|
|
47
|
+
- **`select`** ā ask the USER to pick ONE of `options`; write the chosen value as plain text to `response_path`.
|
|
48
|
+
- **`hook`** ā run each MANDATORY hook in `hooks` (each is a slash command of THIS agent) in this conversation; optional hooks at your discretion. Then write `done` to `response_path`.
|
|
49
|
+
- **`author`** ā read `system_path` + `user_path` and treat them as your ONLY standards and context. Author the COMPLETE content of the file named in `target` and write it ā content ONLY, no commentary, no code fence ā to `response_path`. Do NOT write the target file yourself; the interpreter does that.
|
|
50
|
+
- **`agent_generate`** ā read `system_path` + `user_path`; perform the task YOURSELF with the listed `tools` within `permission_mode`; write your full final reply ā ending with the required ```json fence ā to `response_path`.
|
|
51
|
+
- **`agent_query` / `agent_review`** ā same as above but READ-ONLY (do not modify files); the reply must end with the required ```json fence.
|
|
52
|
+
- **`apply`** ā an isolated generation already decided the changes: read `artifact_path` and write its file contents EXACTLY to the paths it names, then write the confirmation ```json fence to `response_path`.
|
|
53
|
+
- If `pending.note` is present, your previous response was rejected ā follow the note and rewrite `response_path`.
|
|
54
|
+
|
|
55
|
+
4. **Report**:
|
|
56
|
+
Report the final JSON (`status`, `outputs`, and any `reason`) to the user. On `stopped`, relay the gate message verbatim ā it tells the user what to fix or run first.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "appweaver-demo"
|
|
3
|
+
description: "Prototype launcher (Antigravity): run the aw-orchestrator using the specified strategy (spawn, agent, sdk, sdk-apply)."
|
|
4
|
+
argument-hint: "Optional strategy ('agent', 'spawn', 'sdk', 'sdk-apply') and/or k=value vars (e.g. 'agent out_dir=...')"
|
|
5
|
+
compatibility: "Requires .appweaver/orchestrator/ and the gemini CLI on PATH"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
disable-model-invocation: false
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Orchestrator Launcher
|
|
11
|
+
|
|
12
|
+
All orchestration lives in the workflow YAML and is executed by `.appweaver/orchestrator/orchestrator.py` (the general, agent-agnostic engine). The interpreter assembles the COMPLETE payload (system + user) for every request; you never author generation context yourself.
|
|
13
|
+
|
|
14
|
+
- **Engine + workflow (general):** `.appweaver/orchestrator/orchestrator.py`, `*.orch.yaml`
|
|
15
|
+
- **This agent's transport profile:** `.agents/agent.json`
|
|
16
|
+
|
|
17
|
+
> Antigravity spawns via the `agy` CLI (Gemini-based; no `--system-prompt`, so
|
|
18
|
+
> `system` is folded into the prompt). Its `sdk` block declares the SDK the
|
|
19
|
+
> `sdk`/`sdk-apply` strategies import (`google-antigravity`) and the adapter
|
|
20
|
+
> (`.appweaver/orchestrator/adapters/google_antigravity.py`, shared per-SDK)
|
|
21
|
+
> that owns its calling convention.
|
|
22
|
+
|
|
23
|
+
## Execution Steps
|
|
24
|
+
|
|
25
|
+
1. **Parse Arguments**:
|
|
26
|
+
- Identify the requested strategy (one of: `agent`, `spawn`, `sdk`, `sdk-apply`). If the user specifies a strategy as the first argument, use it. Otherwise, default to `spawn`.
|
|
27
|
+
- Always pass the strategy explicitly: `--strategy <strategy>`.
|
|
28
|
+
- `--agent-profile .agents/agent.json` is required for `spawn`, `sdk`, and `sdk-apply`:
|
|
29
|
+
`spawn` reads the CLI to launch (`agy`) from it; `sdk`/`sdk-apply` read the SDK
|
|
30
|
+
package/module (and its `adapter` file) to import from its `sdk` block.
|
|
31
|
+
If the SDK package isn't installed, add `--sdk-install` so the engine
|
|
32
|
+
pip-installs the declared package first. (`agent` needs no profile.)
|
|
33
|
+
- `--checkpoint .appweaver/orchestrator/.demo-out/demo.state.json` is required for
|
|
34
|
+
`sdk-apply` and `agent` (suspend/resume ā follow the loop in step 3).
|
|
35
|
+
- `spawn` accepts `--model <name>` (e.g. `gemini-2.5-pro`); isolation is
|
|
36
|
+
best-effort for Antigravity (no `--bare` equivalent). `sdk`/`sdk-apply`
|
|
37
|
+
accept `--model <name>`; isolation is intrinsic (fresh SDK session).
|
|
38
|
+
|
|
39
|
+
2. **Run the Interpreter**:
|
|
40
|
+
Run the command (include only the bracketed flags that apply to the chosen strategy):
|
|
41
|
+
```bash
|
|
42
|
+
python3 .appweaver/orchestrator/orchestrator.py \
|
|
43
|
+
.appweaver/orchestrator/workflows/aw-spec-demo.orch.yaml \
|
|
44
|
+
--strategy <strategy> \
|
|
45
|
+
[--agent-profile .agents/agent.json] # spawn, sdk, sdk-apply \
|
|
46
|
+
[--checkpoint .appweaver/orchestrator/.demo-out/demo.state.json] # sdk-apply, agent \
|
|
47
|
+
--json
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
3. **Handle Suspend/Resume Loop (for `agent` or `sdk-apply` strategies)**:
|
|
51
|
+
- If the command exits with code `2` (suspend):
|
|
52
|
+
- Read the prompt from the sidecar file `<checkpoint-path>.user.md` (and system instructions from `<checkpoint-path>.system.md`).
|
|
53
|
+
- Fulfill the request directly using your own tools (e.g., implementing the handler or reviewing files in the workspace).
|
|
54
|
+
- Write the final generation or review output to `<checkpoint-path>.response.md`.
|
|
55
|
+
- Re-run the exact same command.
|
|
56
|
+
- Repeat until the orchestrator exits with code `0`.
|
|
57
|
+
|
|
58
|
+
4. **Report**:
|
|
59
|
+
Report the final JSON outputs (`status`, `outputs`, `review_pass`, generated file paths, etc.) to the user.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "claude-code",
|
|
3
|
+
"sdk": {
|
|
4
|
+
"type": "claude-agent-sdk",
|
|
5
|
+
"package": "claude-agent-sdk",
|
|
6
|
+
"module": "claude_agent_sdk",
|
|
7
|
+
"adapter": "../.appweaver/orchestrator/adapters/claude_agent_sdk.py"
|
|
8
|
+
},
|
|
9
|
+
"runtime": "Claude Code CLI (claude -p)",
|
|
10
|
+
"bin": "claude",
|
|
11
|
+
"args": ["-p", "--output-format", "json", "--no-session-persistence"],
|
|
12
|
+
"model_flag": "--model",
|
|
13
|
+
"system": { "flag": "--system-prompt" },
|
|
14
|
+
"user": { "mode": "stdin" },
|
|
15
|
+
"tools_flag": "--tools",
|
|
16
|
+
"approval": {
|
|
17
|
+
"acceptEdits": ["--permission-mode", "acceptEdits"],
|
|
18
|
+
"bypassPermissions": ["--permission-mode", "bypassPermissions"],
|
|
19
|
+
"default": ["--permission-mode", "default"]
|
|
20
|
+
},
|
|
21
|
+
"isolation": {
|
|
22
|
+
"bare": ["--bare"],
|
|
23
|
+
"fresh": ["--setting-sources", ""]
|
|
24
|
+
},
|
|
25
|
+
"budget_flag": "--max-budget-usd",
|
|
26
|
+
"result_keys": ["result"]
|
|
27
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "appweaver"
|
|
3
|
+
description: "Parametric launcher (Claude Code): run ANY converted aw-spec skill on the aw-orchestrator under one of the 4 strategies (agent [default], spawn, sdk, sdk-apply)."
|
|
4
|
+
argument-hint: "<skill> [strategy] [inputā¦] ā e.g. 'select-domain', 'specify spawn Build an order API', 'analyze-slice'"
|
|
5
|
+
compatibility: "Requires .appweaver/orchestrator/ and the claude CLI on PATH"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
disable-model-invocation: false
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Orchestrator Skill Launcher
|
|
11
|
+
|
|
12
|
+
Runs one converted `aw-spec-*` workflow on the shared, agent-agnostic engine. All orchestration and **all context management live in the workflow YAML + engine** (`.appweaver/orchestrator/orchestrator.py`): the interpreter assembles the COMPLETE payload (system + user) for every request; you never author generation context yourself. Execution follows the chosen strategy; the checkpoint channel carries every human-facing interaction regardless of strategy.
|
|
13
|
+
|
|
14
|
+
- **Engine + workflows (common, shared by all agents):** `.appweaver/orchestrator/orchestrator.py`, `.appweaver/orchestrator/workflows/aw-spec-<skill>.orch.yaml`, shared modules in `.appweaver/orchestrator/modules/`, shared scripts in `.appweaver/scripts/`
|
|
15
|
+
- **This agent's transport profile:** `.claude/agent.json`
|
|
16
|
+
|
|
17
|
+
> Claude Code spawns via the `claude -p` CLI (native `--system-prompt`,
|
|
18
|
+
> `--tools`, and `--bare` isolation). Its `sdk` block declares the SDK the
|
|
19
|
+
> `sdk`/`sdk-apply` strategies import (`claude-agent-sdk`) and the adapter
|
|
20
|
+
> (`.appweaver/orchestrator/adapters/claude_agent_sdk.py`, shared per-SDK)
|
|
21
|
+
> that owns its calling convention.
|
|
22
|
+
|
|
23
|
+
## Execution Steps
|
|
24
|
+
|
|
25
|
+
1. **Parse Arguments** (`<skill> [strategy] [inputā¦]`):
|
|
26
|
+
- `skill` (required): the aw-spec skill name, e.g. `demo`, `select-domain`, `foundation`, `specify`, `design`, `implement`, `build`. Resolve the workflow file `.appweaver/orchestrator/workflows/aw-spec-<skill>.orch.yaml`. If it does not exist, list the available `aw-spec-*.orch.yaml` files in that folder and stop.
|
|
27
|
+
- `strategy` (optional, one of `agent`, `spawn`, `sdk`, `sdk-apply`; default `agent` ā YOU fulfill each generation through the checkpoint channel, no profile needed): who executes each generation. Always pass `--strategy <strategy>`.
|
|
28
|
+
- Everything after the strategy is the user input: pass it as `--input "<text>"` (omit when empty).
|
|
29
|
+
- `--agent-profile .claude/agent.json` is required for `spawn`, `sdk`, and `sdk-apply` (`agent` needs no profile). If the SDK package isn't installed, add `--sdk-install`.
|
|
30
|
+
- **Always** pass `--checkpoint .appweaver/orchestrator/.state/<skill>.state.json` ā for EVERY strategy. Converted skills contain interactive steps (questions, selections, hooks); the checkpoint is how they reach you and the user. Strategies only govern who generates.
|
|
31
|
+
- `spawn` may also add `--isolation bare|fresh` and `--model <name>`; `sdk`/`sdk-apply` accept `--model <name>`.
|
|
32
|
+
|
|
33
|
+
2. **Run the Interpreter**:
|
|
34
|
+
```bash
|
|
35
|
+
python3 .appweaver/orchestrator/orchestrator.py \
|
|
36
|
+
.appweaver/orchestrator/workflows/aw-spec-<skill>.orch.yaml \
|
|
37
|
+
--strategy <strategy> \
|
|
38
|
+
--checkpoint .appweaver/orchestrator/.state/<skill>.state.json \
|
|
39
|
+
[--agent-profile .claude/agent.json] # spawn, sdk, sdk-apply \
|
|
40
|
+
[--input "<user input>"] \
|
|
41
|
+
--json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
3. **Handle the Suspend/Resume Loop** ā whenever the command exits with code `2`, read the printed `pending` JSON and dispatch on `pending.kind`; fulfill it, write the response to `pending.response_path`, then re-run the SAME command. Repeat until exit `0` (done) or `1` (stopped by a gate).
|
|
45
|
+
- **`ask`** ā ask the USER the `prompt` with the listed `options` (use your question tool). Write the chosen answer as PLAIN TEXT to `response_path` (comma-separated values when `multi` is true).
|
|
46
|
+
- **`select`** ā ask the USER to pick ONE of `options`; write the chosen value as plain text to `response_path`.
|
|
47
|
+
- **`hook`** ā run each MANDATORY hook in `hooks` (each is a slash command of THIS agent) in this conversation; optional hooks at your discretion. Then write `done` to `response_path`.
|
|
48
|
+
- **`author`** ā read `system_path` + `user_path` and treat them as your ONLY standards and context. Author the COMPLETE content of the file named in `target` and write it ā content ONLY, no commentary, no code fence ā to `response_path`. Do NOT write the target file yourself; the interpreter does that.
|
|
49
|
+
- **`agent_generate`** ā read `system_path` + `user_path`; perform the task YOURSELF with the listed `tools` within `permission_mode`; write your full final reply ā ending with the required ```json fence ā to `response_path`.
|
|
50
|
+
- **`agent_query` / `agent_review`** ā same as above but READ-ONLY (do not modify files); the reply must end with the required ```json fence.
|
|
51
|
+
- **`apply`** ā an isolated generation already decided the changes: read `artifact_path` and write its file contents EXACTLY to the paths it names, then write the confirmation ```json fence to `response_path`.
|
|
52
|
+
- If `pending.note` is present, your previous response was rejected ā follow the note and rewrite `response_path`.
|
|
53
|
+
|
|
54
|
+
4. **Report**:
|
|
55
|
+
Report the final JSON (`status`, `outputs`, and any `reason`) to the user. On `stopped`, relay the gate message verbatim ā it tells the user what to fix or run first.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "appweaver-demo"
|
|
3
|
+
description: "Prototype launcher (Claude Code): run the aw-orchestrator using the specified strategy (spawn, agent, sdk, sdk-apply)."
|
|
4
|
+
argument-hint: "Optional strategy ('agent', 'spawn', 'sdk', 'sdk-apply') and/or k=value vars (e.g. 'agent out_dir=...')"
|
|
5
|
+
compatibility: "Requires .appweaver/orchestrator/ and the claude CLI on PATH"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
disable-model-invocation: false
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Orchestrator Launcher
|
|
11
|
+
|
|
12
|
+
All orchestration lives in the workflow YAML and is executed by `.appweaver/orchestrator/orchestrator.py` (the general, agent-agnostic engine). The interpreter assembles the COMPLETE payload (system + user) for every request; you never author generation context yourself.
|
|
13
|
+
|
|
14
|
+
- **Engine + workflow (general):** `.appweaver/orchestrator/orchestrator.py`, `*.orch.yaml`
|
|
15
|
+
- **This agent's transport profile:** `.claude/agent.json`
|
|
16
|
+
|
|
17
|
+
> Claude Code spawns via the `claude -p` CLI (native `--system-prompt`,
|
|
18
|
+
> `--tools`, and `--bare` isolation). Its `sdk` block declares the SDK the
|
|
19
|
+
> `sdk`/`sdk-apply` strategies import (`claude-agent-sdk`) and the adapter
|
|
20
|
+
> (`.appweaver/orchestrator/adapters/claude_agent_sdk.py`, shared per-SDK)
|
|
21
|
+
> that owns its calling convention.
|
|
22
|
+
|
|
23
|
+
## Execution Steps
|
|
24
|
+
|
|
25
|
+
1. **Parse Arguments**:
|
|
26
|
+
- Identify the requested strategy (one of: `agent`, `spawn`, `sdk`, `sdk-apply`). If the user specifies a strategy as the first argument, use it. Otherwise, default to `spawn`.
|
|
27
|
+
- Always pass the strategy explicitly: `--strategy <strategy>`.
|
|
28
|
+
- `--agent-profile .claude/agent.json` is required for `spawn`, `sdk`, and `sdk-apply`:
|
|
29
|
+
`spawn` reads the CLI to launch from it; `sdk`/`sdk-apply` read the SDK
|
|
30
|
+
package/module (and its `adapter` file) to import from its `sdk` block.
|
|
31
|
+
If the SDK package isn't installed, add `--sdk-install` so the engine
|
|
32
|
+
pip-installs the declared package first. (`agent` needs no profile.)
|
|
33
|
+
- `--checkpoint .appweaver/orchestrator/.demo-out/demo.state.json` is required for
|
|
34
|
+
`sdk-apply` and `agent` (suspend/resume ā follow the loop in step 3).
|
|
35
|
+
- `spawn` may also add `--isolation bare|fresh` and `--model <name>` (bare is
|
|
36
|
+
strongest; use it when `ANTHROPIC_API_KEY` is set). `sdk`/`sdk-apply` accept
|
|
37
|
+
`--model <name>`; isolation is intrinsic (fresh SDK session, no settings).
|
|
38
|
+
|
|
39
|
+
2. **Run the Interpreter**:
|
|
40
|
+
Run the command (include only the bracketed flags that apply to the chosen strategy):
|
|
41
|
+
```bash
|
|
42
|
+
python3 .appweaver/orchestrator/orchestrator.py \
|
|
43
|
+
.appweaver/orchestrator/workflows/aw-spec-demo.orch.yaml \
|
|
44
|
+
--strategy <strategy> \
|
|
45
|
+
[--agent-profile .claude/agent.json] # spawn, sdk, sdk-apply \
|
|
46
|
+
[--checkpoint .appweaver/orchestrator/.demo-out/demo.state.json] # sdk-apply, agent \
|
|
47
|
+
--json
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
3. **Handle Suspend/Resume Loop (for `agent` or `sdk-apply` strategies)**:
|
|
51
|
+
- If the command exits with code `2` (suspend):
|
|
52
|
+
- Read the prompt from the sidecar file `<checkpoint-path>.user.md` (and system instructions from `<checkpoint-path>.system.md`).
|
|
53
|
+
- Fulfill the request directly using your own tools (e.g., implementing the handler or reviewing files in the workspace).
|
|
54
|
+
- Write the final generation or review output to `<checkpoint-path>.response.md`.
|
|
55
|
+
- Re-run the exact same command.
|
|
56
|
+
- Repeat until the orchestrator exits with code `0`.
|
|
57
|
+
|
|
58
|
+
4. **Report**:
|
|
59
|
+
Report the final JSON outputs (`status`, `outputs`, `review_pass`, generated file paths, etc.) to the user.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "kilocode",
|
|
3
|
+
"sdk": {
|
|
4
|
+
"type": "claude-agent-sdk",
|
|
5
|
+
"package": "claude-agent-sdk",
|
|
6
|
+
"module": "claude_agent_sdk",
|
|
7
|
+
"adapter": "../.appweaver/orchestrator/adapters/claude_agent_sdk.py"
|
|
8
|
+
},
|
|
9
|
+
"runtime": "Kilo Code launches the interpreter; generation delegates to the Claude Code CLI",
|
|
10
|
+
"note": "Kilo Code is a VS Code extension with no standalone headless generation CLI, so this profile reuses `claude -p` for the fresh generation. To generate via Gemini instead, replace bin/args/system/user/tools_flag/approval with the .agents (antigravity) profile's values.",
|
|
11
|
+
"bin": "claude",
|
|
12
|
+
"args": ["-p", "--output-format", "json", "--no-session-persistence"],
|
|
13
|
+
"model_flag": "--model",
|
|
14
|
+
"system": { "flag": "--system-prompt" },
|
|
15
|
+
"user": { "mode": "stdin" },
|
|
16
|
+
"tools_flag": "--tools",
|
|
17
|
+
"approval": {
|
|
18
|
+
"acceptEdits": ["--permission-mode", "acceptEdits"],
|
|
19
|
+
"bypassPermissions": ["--permission-mode", "bypassPermissions"],
|
|
20
|
+
"default": ["--permission-mode", "default"]
|
|
21
|
+
},
|
|
22
|
+
"isolation": {
|
|
23
|
+
"bare": ["--bare"],
|
|
24
|
+
"fresh": ["--setting-sources", ""]
|
|
25
|
+
},
|
|
26
|
+
"budget_flag": "--max-budget-usd",
|
|
27
|
+
"result_keys": ["result"]
|
|
28
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "appweaver-demo"
|
|
3
|
+
description: "Prototype launcher (Kilo Code): run the aw-orchestrator using the specified strategy (spawn, agent, sdk, sdk-apply)."
|
|
4
|
+
argument-hint: "Optional strategy ('agent', 'spawn', 'sdk', 'sdk-apply') and/or k=value vars (e.g. 'agent out_dir=...')"
|
|
5
|
+
compatibility: "Requires .appweaver/orchestrator/ and the claude CLI on PATH"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
disable-model-invocation: false
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Orchestrator Launcher
|
|
11
|
+
|
|
12
|
+
All orchestration lives in the workflow YAML and is executed by `.appweaver/orchestrator/orchestrator.py` (the general, agent-agnostic engine). The interpreter assembles the COMPLETE payload (system + user) for every request; you never author generation context yourself.
|
|
13
|
+
|
|
14
|
+
- **Engine + workflow (general):** `.appweaver/orchestrator/orchestrator.py`, `*.orch.yaml`
|
|
15
|
+
- **This agent's transport profile:** `.kilocode/agent.json`
|
|
16
|
+
|
|
17
|
+
> Kilo Code has no native headless CLI, so it reuses `claude -p` for `spawn`
|
|
18
|
+
> (native `--system-prompt`, `--tools`, `--bare` isolation). Its `sdk` block
|
|
19
|
+
> declares the SDK the `sdk`/`sdk-apply` strategies import (`claude-agent-sdk`)
|
|
20
|
+
> and the adapter (`.appweaver/orchestrator/adapters/claude_agent_sdk.py`,
|
|
21
|
+
> shared per-SDK) that owns its calling convention.
|
|
22
|
+
|
|
23
|
+
## Execution Steps
|
|
24
|
+
|
|
25
|
+
1. **Parse Arguments**:
|
|
26
|
+
- Identify the requested strategy (one of: `agent`, `spawn`, `sdk`, `sdk-apply`). If the user specifies a strategy as the first argument, use it. Otherwise, default to `spawn`.
|
|
27
|
+
- Always pass the strategy explicitly: `--strategy <strategy>`.
|
|
28
|
+
- `--agent-profile .kilocode/agent.json` is required for `spawn`, `sdk`, and `sdk-apply`:
|
|
29
|
+
`spawn` reads the CLI to launch from it; `sdk`/`sdk-apply` read the SDK
|
|
30
|
+
package/module (and its `adapter` file) to import from its `sdk` block.
|
|
31
|
+
If the SDK package isn't installed, add `--sdk-install` so the engine
|
|
32
|
+
pip-installs the declared package first. (`agent` needs no profile.)
|
|
33
|
+
- `--checkpoint .appweaver/orchestrator/.demo-out/demo.state.json` is required for
|
|
34
|
+
`sdk-apply` and `agent` (suspend/resume ā follow the loop in step 3).
|
|
35
|
+
- `spawn` may also add `--isolation bare|fresh` and `--model <name>` (bare is
|
|
36
|
+
strongest; use it when `ANTHROPIC_API_KEY` is set). `sdk`/`sdk-apply` accept
|
|
37
|
+
`--model <name>`; isolation is intrinsic (fresh SDK session, no settings).
|
|
38
|
+
|
|
39
|
+
2. **Run the Interpreter**:
|
|
40
|
+
Run the command (include only the bracketed flags that apply to the chosen strategy):
|
|
41
|
+
```bash
|
|
42
|
+
python3 .appweaver/orchestrator/orchestrator.py \
|
|
43
|
+
.appweaver/orchestrator/workflows/aw-spec-demo.orch.yaml \
|
|
44
|
+
--strategy <strategy> \
|
|
45
|
+
[--agent-profile .kilocode/agent.json] # spawn, sdk, sdk-apply \
|
|
46
|
+
[--checkpoint .appweaver/orchestrator/.demo-out/demo.state.json] # sdk-apply, agent \
|
|
47
|
+
--json
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
3. **Handle Suspend/Resume Loop (for `agent` or `sdk-apply` strategies)**:
|
|
51
|
+
- If the command exits with code `2` (suspend):
|
|
52
|
+
- Read the prompt from the sidecar file `<checkpoint-path>.user.md` (and system instructions from `<checkpoint-path>.system.md`).
|
|
53
|
+
- Fulfill the request directly using your own tools (e.g., implementing the handler or reviewing files in the workspace).
|
|
54
|
+
- Write the final generation or review output to `<checkpoint-path>.response.md`.
|
|
55
|
+
- Re-run the exact same command.
|
|
56
|
+
- Repeat until the orchestrator exits with code `0`.
|
|
57
|
+
|
|
58
|
+
4. **Report**:
|
|
59
|
+
Report the final JSON outputs (`status`, `outputs`, `review_pass`, generated file paths, etc.) to the user.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "appweaver"
|
|
3
|
+
description: "Parametric launcher (Kilo Code): run ANY converted aw-spec skill on the aw-orchestrator under one of the 4 strategies (agent [default], spawn, sdk, sdk-apply)."
|
|
4
|
+
argument-hint: "<skill> [strategy] [inputā¦] ā e.g. 'select-domain', 'specify spawn Build an order API', 'analyze-slice'"
|
|
5
|
+
compatibility: "Requires .appweaver/orchestrator/ and the claude CLI on PATH"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
disable-model-invocation: false
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Orchestrator Skill Launcher
|
|
11
|
+
|
|
12
|
+
Runs one converted `aw-spec-*` workflow on the shared, agent-agnostic engine. All orchestration and **all context management live in the workflow YAML + engine** (`.appweaver/orchestrator/orchestrator.py`): the interpreter assembles the COMPLETE payload (system + user) for every request; you never author generation context yourself. Execution follows the chosen strategy; the checkpoint channel carries every human-facing interaction regardless of strategy.
|
|
13
|
+
|
|
14
|
+
- **Engine + workflows (common, shared by all agents):** `.appweaver/orchestrator/orchestrator.py`, `.appweaver/orchestrator/workflows/aw-spec-<skill>.orch.yaml`, shared modules in `.appweaver/orchestrator/modules/`, shared scripts in `.appweaver/scripts/`
|
|
15
|
+
- **This agent's transport profile:** `.kilocode/agent.json`
|
|
16
|
+
|
|
17
|
+
> Kilo Code has no native headless CLI, so it reuses `claude -p` for `spawn`
|
|
18
|
+
> (native `--system-prompt`, `--tools`, `--bare` isolation). Its `sdk` block
|
|
19
|
+
> declares the SDK the `sdk`/`sdk-apply` strategies import (`claude-agent-sdk`)
|
|
20
|
+
> and the adapter (`.appweaver/orchestrator/adapters/claude_agent_sdk.py`,
|
|
21
|
+
> shared per-SDK) that owns its calling convention.
|
|
22
|
+
|
|
23
|
+
## Execution Steps
|
|
24
|
+
|
|
25
|
+
1. **Parse Arguments** (`<skill> [strategy] [inputā¦]`):
|
|
26
|
+
- `skill` (required): the aw-spec skill name, e.g. `demo`, `select-domain`, `foundation`, `specify`, `design`, `implement`, `build`. Resolve the workflow file `.appweaver/orchestrator/workflows/aw-spec-<skill>.orch.yaml`. If it does not exist, list the available `aw-spec-*.orch.yaml` files in that folder and stop.
|
|
27
|
+
- `strategy` (optional, one of `agent`, `spawn`, `sdk`, `sdk-apply`; default `agent` ā YOU fulfill each generation through the checkpoint channel, no profile needed): who executes each generation. Always pass `--strategy <strategy>`.
|
|
28
|
+
- Everything after the strategy is the user input: pass it as `--input "<text>"` (omit when empty).
|
|
29
|
+
- `--agent-profile .kilocode/agent.json` is required for `spawn`, `sdk`, and `sdk-apply` (`agent` needs no profile). If the SDK package isn't installed, add `--sdk-install`.
|
|
30
|
+
- **Always** pass `--checkpoint .appweaver/orchestrator/.state/<skill>.state.json` ā for EVERY strategy. Converted skills contain interactive steps (questions, selections, hooks); the checkpoint is how they reach you and the user. Strategies only govern who generates.
|
|
31
|
+
- `spawn` may also add `--isolation bare|fresh` and `--model <name>`; `sdk`/`sdk-apply` accept `--model <name>`.
|
|
32
|
+
|
|
33
|
+
2. **Run the Interpreter**:
|
|
34
|
+
```bash
|
|
35
|
+
python3 .appweaver/orchestrator/orchestrator.py \
|
|
36
|
+
.appweaver/orchestrator/workflows/aw-spec-<skill>.orch.yaml \
|
|
37
|
+
--strategy <strategy> \
|
|
38
|
+
--checkpoint .appweaver/orchestrator/.state/<skill>.state.json \
|
|
39
|
+
[--agent-profile .kilocode/agent.json] # spawn, sdk, sdk-apply \
|
|
40
|
+
[--input "<user input>"] \
|
|
41
|
+
--json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
3. **Handle the Suspend/Resume Loop** ā whenever the command exits with code `2`, read the printed `pending` JSON and dispatch on `pending.kind`; fulfill it, write the response to `pending.response_path`, then re-run the SAME command. Repeat until exit `0` (done) or `1` (stopped by a gate).
|
|
45
|
+
- **`ask`** ā ask the USER the `prompt` with the listed `options` (use your question tool). Write the chosen answer as PLAIN TEXT to `response_path` (comma-separated values when `multi` is true).
|
|
46
|
+
- **`select`** ā ask the USER to pick ONE of `options`; write the chosen value as plain text to `response_path`.
|
|
47
|
+
- **`hook`** ā run each MANDATORY hook in `hooks` (each is a slash command of THIS agent) in this conversation; optional hooks at your discretion. Then write `done` to `response_path`.
|
|
48
|
+
- **`author`** ā read `system_path` + `user_path` and treat them as your ONLY standards and context. Author the COMPLETE content of the file named in `target` and write it ā content ONLY, no commentary, no code fence ā to `response_path`. Do NOT write the target file yourself; the interpreter does that.
|
|
49
|
+
- **`agent_generate`** ā read `system_path` + `user_path`; perform the task YOURSELF with the listed `tools` within `permission_mode`; write your full final reply ā ending with the required ```json fence ā to `response_path`.
|
|
50
|
+
- **`agent_query` / `agent_review`** ā same as above but READ-ONLY (do not modify files); the reply must end with the required ```json fence.
|
|
51
|
+
- **`apply`** ā an isolated generation already decided the changes: read `artifact_path` and write its file contents EXACTLY to the paths it names, then write the confirmation ```json fence to `response_path`.
|
|
52
|
+
- If `pending.note` is present, your previous response was rejected ā follow the note and rewrite `response_path`.
|
|
53
|
+
|
|
54
|
+
4. **Report**:
|
|
55
|
+
Report the final JSON (`status`, `outputs`, and any `reason`) to the user. On `stopped`, relay the gate message verbatim ā it tells the user what to fix or run first.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,WAAW,SA2DpB,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import inquirer from 'inquirer';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
import fs from 'fs-extra';
|
|
5
|
-
import path from 'path';
|
|
6
|
-
import { fileURLToPath } from 'url';
|
|
7
3
|
import { copyAssets } from '../utils/copy-assets.js';
|
|
8
4
|
import { resolveAssetsPath } from '../utils/paths.js';
|
|
9
|
-
import { createManifest } from '../utils/manifest.js';
|
|
10
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
5
|
export const initCommand = new Command('init')
|
|
12
6
|
.description('Initialize a new AppWeaver Spec project in the current directory')
|
|
13
7
|
.argument('[directory]', 'Target directory (default: current directory)', '.')
|
|
@@ -16,41 +10,7 @@ export const initCommand = new Command('init')
|
|
|
16
10
|
.option('--dry-run', 'Show what would be done without making changes')
|
|
17
11
|
.action(async (directory, options) => {
|
|
18
12
|
const targetDir = directory === '.' ? process.cwd() : directory;
|
|
19
|
-
|
|
20
|
-
// Check for existing project
|
|
21
|
-
const existingManifest = await fs.pathExists(manifestPath);
|
|
22
|
-
if (existingManifest && !options.dryRun) {
|
|
23
|
-
console.log(chalk.yellow('\n\u26A0\uFE0F Existing AppWeaver Spec project detected.'));
|
|
24
|
-
console.log(chalk.gray(` Manifest found at: ${manifestPath}`));
|
|
25
|
-
if (options.yes) {
|
|
26
|
-
console.log(chalk.yellow(' Use `aw-spec update` to update this project.'));
|
|
27
|
-
process.exit(0);
|
|
28
|
-
}
|
|
29
|
-
const { action } = await inquirer.prompt([
|
|
30
|
-
{
|
|
31
|
-
type: 'list',
|
|
32
|
-
name: 'action',
|
|
33
|
-
message: 'What would you like to do?',
|
|
34
|
-
choices: [
|
|
35
|
-
{ name: 'Update existing project (recommended)', value: 'update' },
|
|
36
|
-
{ name: 'Re-initialize (overwrite with fresh copy)', value: 'reinit' },
|
|
37
|
-
{ name: 'Cancel', value: 'cancel' },
|
|
38
|
-
],
|
|
39
|
-
default: 'update',
|
|
40
|
-
},
|
|
41
|
-
]);
|
|
42
|
-
if (action === 'update') {
|
|
43
|
-
console.log(chalk.gray(' Run `aw-spec update` to update this project.'));
|
|
44
|
-
process.exit(0);
|
|
45
|
-
}
|
|
46
|
-
else if (action === 'cancel') {
|
|
47
|
-
console.log(chalk.gray('\nInitialization cancelled.'));
|
|
48
|
-
process.exit(0);
|
|
49
|
-
}
|
|
50
|
-
// action === 'reinit' continues below
|
|
51
|
-
console.log(chalk.yellow('\n Re-initializing (will overwrite existing files)...\n'));
|
|
52
|
-
}
|
|
53
|
-
console.log(`\n\uD83D\uDD27 Initializing AppWeaver Spec project in: ${targetDir}\n`);
|
|
13
|
+
console.log(`\nš§ Initializing AppWeaver Spec project in: ${targetDir}\n`);
|
|
54
14
|
// Determine agent
|
|
55
15
|
let agent = options.agent;
|
|
56
16
|
// If --yes flag and no explicit agent, use default (claude) without prompting
|
|
@@ -78,11 +38,11 @@ export const initCommand = new Command('init')
|
|
|
78
38
|
const assetsPath = await resolveAssetsPath();
|
|
79
39
|
const agentFolder = agent === 'claude' ? '.claude' : agent === 'kilocode' ? '.kilocode' : '.agents';
|
|
80
40
|
if (options.dryRun) {
|
|
81
|
-
console.log('
|
|
82
|
-
console.log(`
|
|
83
|
-
console.log(`
|
|
84
|
-
console.log(`
|
|
85
|
-
console.log(`
|
|
41
|
+
console.log('š Dry run - would copy the following:');
|
|
42
|
+
console.log(` ā ${assetsPath}/.aw-spec -> ${targetDir}/.aw-spec`);
|
|
43
|
+
console.log(` ā ${assetsPath}/docs -> ${targetDir}/docs`);
|
|
44
|
+
console.log(` ā ${assetsPath}/${agentFolder} -> ${targetDir}/${agentFolder}`);
|
|
45
|
+
console.log(` ā ${assetsPath}/docs/VerticalSlice -> ${targetDir}/docs/VerticalSlice`);
|
|
86
46
|
return;
|
|
87
47
|
}
|
|
88
48
|
// Copy assets
|
|
@@ -92,14 +52,7 @@ export const initCommand = new Command('init')
|
|
|
92
52
|
agent: agent,
|
|
93
53
|
overwrite: options.yes,
|
|
94
54
|
});
|
|
95
|
-
|
|
96
|
-
console.log('\n\uD83D\uDD0D Creating manifest...');
|
|
97
|
-
const packageJson = await fs.readJSON(path.resolve(__dirname, '../../package.json'));
|
|
98
|
-
const manifest = await createManifest(assetsPath, targetDir, packageJson.version);
|
|
99
|
-
await fs.ensureDir(path.dirname(manifestPath));
|
|
100
|
-
await fs.writeJSON(manifestPath, manifest, { spaces: 2 });
|
|
101
|
-
console.log(chalk.green(` \u2713 Manifest created (${Object.keys(manifest.files).length} files tracked)`));
|
|
102
|
-
console.log('\n\u2705 Project initialized successfully!');
|
|
55
|
+
console.log('\nā
Project initialized successfully!');
|
|
103
56
|
console.log('\nNext steps:');
|
|
104
57
|
console.log(' aw-spec doctor # Verify the installation');
|
|
105
58
|
console.log(' aw-spec specify "Your feature description" # Start spec-driven development');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAItD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,kEAAkE,CAAC;KAC/E,QAAQ,CAAC,aAAa,EAAE,+CAA+C,EAAE,GAAG,CAAC;KAC7E,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,EAAE,QAAQ,CAAC;KACtF,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;KACpD,MAAM,CAAC,WAAW,EAAE,gDAAgD,CAAC;KACrE,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAyD,EAAE,EAAE;IAC7F,MAAM,SAAS,GAAG,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhE,OAAO,CAAC,GAAG,CAAC,gDAAgD,SAAS,IAAI,CAAC,CAAC;IAE3E,kBAAkB;IAClB,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC1B,8EAA8E;IAC9E,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,KAAK,GAAG,QAAQ,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,+CAA+C;oBACxD,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,QAAQ,EAAE;wBACzD,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,aAAa,EAAE;wBAC9D,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,UAAU,EAAE;qBAC3D;oBACD,OAAO,EAAE,QAAQ;iBAClB;aACF,CAAC,CAAC;YACH,KAAK,GAAG,aAAa,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,gBAAgB,SAAS,WAAW,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,YAAY,SAAS,OAAO,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,IAAI,WAAW,OAAO,SAAS,IAAI,WAAW,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,0BAA0B,SAAS,qBAAqB,CAAC,CAAC;QACxF,OAAO;IACT,CAAC;IAED,cAAc;IACd,MAAM,UAAU,CAAC;QACf,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,SAAS;QACrB,KAAK,EAAE,KAAc;QACrB,SAAS,EAAE,OAAO,CAAC,GAAG;KACvB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;AAC/F,CAAC,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
import { program } from 'commander';
|
|
3
3
|
import { initCommand } from './commands/init.js';
|
|
4
4
|
import { doctorCommand } from './commands/doctor.js';
|
|
5
|
-
import { updateCommand } from './commands/update.js';
|
|
6
5
|
import fs from 'fs-extra';
|
|
7
6
|
import path from 'path';
|
|
8
7
|
import { fileURLToPath } from 'url';
|
|
@@ -13,7 +12,6 @@ program
|
|
|
13
12
|
.description('AppWeaver Spec-Driven Development CLI')
|
|
14
13
|
.version(packageJson.version)
|
|
15
14
|
.addCommand(initCommand)
|
|
16
|
-
.addCommand(updateCommand)
|
|
17
15
|
.addCommand(doctorCommand);
|
|
18
16
|
program.parse();
|
|
19
17
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAElF,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,uCAAuC,CAAC;KACpD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;KAC5B,UAAU,CAAC,WAAW,CAAC;KACvB,UAAU,CAAC,aAAa,CAAC,CAAC;AAE7B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED