aw-spec-cli 0.1.7 → 0.1.9
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/.appweaver/DESIGN-FORMAT.md +200 -0
- package/assets/.appweaver/ORCH-DIALECT.md +156 -0
- package/assets/.appweaver/RULE-PARTITION.md +175 -0
- package/assets/.appweaver/STACK-PROFILES.md +461 -0
- package/assets/.appweaver/ai-rules.md +180 -0
- package/assets/.appweaver/domain.json +1 -0
- package/assets/.appweaver/extensions/.registry +19 -0
- package/assets/.appweaver/extensions/agent-context/README.md +57 -0
- package/assets/.appweaver/extensions/agent-context/agent-context-config.yml +4 -0
- package/assets/.appweaver/extensions/agent-context/commands/aw-spec.agent-context.update.md +26 -0
- package/assets/.appweaver/extensions/agent-context/extension.yml +37 -0
- package/assets/.appweaver/extensions/agent-context/scripts/bash/update-agent-context.sh +201 -0
- package/assets/.appweaver/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +237 -0
- package/assets/.appweaver/extensions.yml +16 -0
- package/assets/.appweaver/feature.json +3 -0
- package/assets/.appweaver/init-options.json +9 -0
- package/assets/.appweaver/integration.json +15 -0
- package/assets/.appweaver/integrations/aw-spec.manifest.json +9 -0
- package/assets/.appweaver/interpreter/run-skill.py +1176 -0
- package/assets/.appweaver/memory/constitution.md +50 -0
- package/assets/.appweaver/orchestrator/.smoke-out/smoke.md +6 -0
- package/assets/.appweaver/orchestrator/AGENT-PROFILE.md +94 -0
- package/assets/.appweaver/orchestrator/README.md +300 -0
- package/assets/.appweaver/orchestrator/adapters/claude_agent_sdk.py +74 -0
- package/assets/.appweaver/orchestrator/adapters/google_antigravity.py +74 -0
- package/assets/.appweaver/orchestrator/modules/delta-design.orch.yaml +105 -0
- package/assets/.appweaver/orchestrator/modules/delta-spec.orch.yaml +101 -0
- package/assets/.appweaver/orchestrator/modules/domain-select.orch.yaml +90 -0
- package/assets/.appweaver/orchestrator/modules/lane-gate.orch.yaml +126 -0
- package/assets/.appweaver/orchestrator/modules/tech-select.orch.yaml +123 -0
- package/assets/.appweaver/orchestrator/orchestrator.py +1721 -0
- package/assets/.appweaver/orchestrator/rev-templates/ai-rules.reference.md +40 -0
- package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +101 -0
- package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +245 -0
- package/assets/.appweaver/orchestrator/rev-templates/domain-constitution.skeleton.md +63 -0
- package/assets/.appweaver/orchestrator/rev-templates/domain-requirements.skeleton.md +48 -0
- package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +59 -0
- package/assets/.appweaver/orchestrator/rev-templates/domain-rule-file.skeleton.md +39 -0
- package/assets/.appweaver/orchestrator/rev-templates/frontend-rule-file.skeleton.md +63 -0
- package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +116 -0
- package/assets/.appweaver/orchestrator/rev-templates/technical-constitution.skeleton.md +106 -0
- package/assets/.appweaver/orchestrator/rev-templates/technical-rule-file.skeleton.md +54 -0
- package/assets/.appweaver/orchestrator/rev-templates/ui-constitution.skeleton.md +125 -0
- package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +123 -0
- package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +294 -0
- package/assets/.appweaver/orchestrator/workflows/_smoke.orch.yaml +160 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-add-component.orch.yaml +270 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +934 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-delta-design.orch.yaml +251 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +265 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +437 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-build.orch.yaml +197 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-characterize.orch.yaml +475 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-close-delta.orch.yaml +181 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-constitution.orch.yaml +727 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-demo.orch.yaml +100 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-dependency-tree.orch.yaml +69 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-deploy.orch.yaml +85 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-design-ui.orch.yaml +386 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-design.orch.yaml +382 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-finalize-delta.orch.yaml +462 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-foundation.orch.yaml +265 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-delta.orch.yaml +253 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-ui.orch.yaml +267 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +287 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-inventory.orch.yaml +238 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +1822 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-parity.orch.yaml +293 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-run.orch.yaml +194 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-domain.orch.yaml +83 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-feature.orch.yaml +128 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +296 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +439 -0
- package/assets/.appweaver/scripts/bash/aw-inventory.sh +17 -0
- package/assets/.appweaver/scripts/bash/aw-parity.sh +13 -0
- package/assets/.appweaver/scripts/bash/aw-rev-constitution.sh +13 -0
- package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +2626 -0
- package/assets/.appweaver/scripts/bash/aw-xref.sh +15 -0
- package/assets/.appweaver/scripts/bash/common.sh +533 -0
- package/assets/.appweaver/scripts/powershell/aw-inventory.ps1 +17 -0
- package/assets/.appweaver/scripts/powershell/aw-parity.ps1 +13 -0
- package/assets/.appweaver/scripts/powershell/aw-rev-constitution.ps1 +13 -0
- package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +2232 -0
- package/assets/.appweaver/scripts/powershell/aw-xref.ps1 +15 -0
- package/assets/.appweaver/scripts/python/aw-component-catalog.py +121 -0
- package/assets/.appweaver/scripts/python/aw-inventory.py +1180 -0
- package/assets/.appweaver/scripts/python/aw-parity.py +380 -0
- package/assets/.appweaver/scripts/python/aw-rev-constitution.py +329 -0
- package/assets/.appweaver/scripts/python/aw-stack.py +1251 -0
- package/assets/.appweaver/scripts/python/aw-xref.py +1330 -0
- package/assets/.appweaver/scripts/python/validate_okf.py +352 -0
- package/assets/.appweaver/stack-profiles/angular.json +16 -0
- package/assets/.appweaver/stack-profiles/blazor-wasm.json +17 -0
- package/assets/.appweaver/stack-profiles/dotnet-webapi.json +15 -0
- package/assets/.appweaver/stack-profiles/go-chi.json +14 -0
- package/assets/.appweaver/stack-profiles/java-spring.json +16 -0
- package/assets/.appweaver/stack-profiles/nextjs.json +16 -0
- package/assets/.appweaver/stack-profiles/node-express.json +15 -0
- package/assets/.appweaver/stack-profiles/python-fastapi.json +16 -0
- package/assets/.appweaver/stack-profiles/react-vite.json +17 -0
- package/assets/.appweaver/stack-profiles/sveltekit.json +16 -0
- package/assets/.appweaver/stack-profiles/vue-vite.json +17 -0
- package/assets/.appweaver/stacks.json +3 -0
- package/assets/.appweaver/templates/constitution-domain-template.md +116 -0
- package/assets/.appweaver/templates/constitution-technical-template.md +108 -0
- package/assets/.appweaver/templates/constitution-ui-template.md +116 -0
- package/assets/.appweaver/templates/delta-design-template.md +69 -0
- package/assets/.appweaver/templates/delta-spec-template.md +63 -0
- package/assets/.appweaver/templates/design-template.md +383 -0
- package/assets/.appweaver/templates/okf-concept-template.md +114 -0
- package/assets/.appweaver/templates/parity-manifest-template.json +49 -0
- package/assets/.appweaver/templates/source-map-template.md +85 -0
- package/assets/.appweaver/templates/spec-template.md +309 -0
- package/assets/.appweaver/templates/ui-design-template.md +273 -0
- package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.Reference.pack.txt +25248 -0
- package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.pack.txt +5726 -0
- package/assets/foundations/dotnet/ModularMonolith/pack-foundation.ps1 +145 -0
- package/assets/foundations/dotnet/ModularMonolith/pack-foundation.sh +196 -0
- package/assets/foundations/dotnet/ModularMonolith/pack-reference-foundation.ps1 +157 -0
- package/assets/foundations/dotnet/ModularMonolith/pack-reference-foundation.sh +209 -0
- package/assets/foundations/dotnet/ModularMonolith/unpack-foundation.ps1 +126 -0
- package/assets/foundations/dotnet/ModularMonolith/unpack-foundation.sh +217 -0
- package/assets/foundations/dotnet/ModularMonolith/unpack-reference-foundation.ps1 +129 -0
- package/assets/foundations/dotnet/ModularMonolith/unpack-reference-foundation.sh +218 -0
- package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.Reference.pack.txt +19318 -0
- package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.pack.txt +2833 -0
- package/assets/foundations/dotnet/VerticalSlice/pack-foundation.ps1 +145 -0
- package/assets/foundations/dotnet/VerticalSlice/pack-foundation.sh +196 -0
- package/assets/foundations/dotnet/VerticalSlice/pack-reference-foundation.ps1 +157 -0
- package/assets/foundations/dotnet/VerticalSlice/pack-reference-foundation.sh +209 -0
- package/assets/foundations/dotnet/VerticalSlice/unpack-foundation.ps1 +126 -0
- package/assets/foundations/dotnet/VerticalSlice/unpack-foundation.sh +217 -0
- package/assets/foundations/dotnet/VerticalSlice/unpack-reference-foundation.ps1 +129 -0
- package/assets/foundations/dotnet/VerticalSlice/unpack-reference-foundation.sh +218 -0
- package/assets/foundations/dotnet/components/Email/README.md +119 -0
- package/assets/foundations/dotnet/components/Email/ReferenceEndpoints/SendEmailEndpoint.cs +84 -0
- package/assets/foundations/dotnet/components/Email/integration.md +300 -0
- package/assets/foundations/dotnet/components/Jobs/README.md +113 -0
- package/assets/foundations/dotnet/components/Jobs/integration.md +259 -0
- package/assets/foundations/dotnet/components/QrGenerator/README.md +85 -0
- package/assets/foundations/dotnet/components/QrGenerator/ReferenceEndpoints/GenerateQrEndpoint.cs +57 -0
- package/assets/foundations/dotnet/components/QrGenerator/integration.md +230 -0
- package/assets/foundations/dotnet/components/README.md +74 -0
- package/assets/guardrails/README.md +222 -0
- package/assets/guardrails/domain/healthcare/ai-rules.domain.md +34 -0
- package/assets/guardrails/domain/healthcare/api-versioning.domain.md +17 -0
- package/assets/guardrails/domain/healthcare/auditing.domain.md +97 -0
- package/assets/guardrails/domain/healthcare/authorization.domain.md +26 -0
- package/assets/guardrails/domain/healthcare/clinical-terms.md +20 -0
- package/assets/guardrails/domain/healthcare/coding-standards.domain.md +26 -0
- package/assets/guardrails/domain/healthcare/consent.md +19 -0
- package/assets/guardrails/domain/healthcare/cqrs.domain.md +12 -0
- package/assets/guardrails/domain/healthcare/data-classification.domain.md +28 -0
- package/assets/guardrails/domain/healthcare/dependency-policy.domain.md +11 -0
- package/assets/guardrails/domain/healthcare/dicom.md +15 -0
- package/assets/guardrails/domain/healthcare/domain-constitution.md +119 -0
- package/assets/guardrails/domain/healthcare/domain-driven-design.domain.md +28 -0
- package/assets/guardrails/domain/healthcare/eventing.domain.md +18 -0
- package/assets/guardrails/domain/healthcare/fhir.md +36 -0
- package/assets/guardrails/domain/healthcare/folder-structure.domain.md +25 -0
- package/assets/guardrails/domain/healthcare/hipaa.md +34 -0
- package/assets/guardrails/domain/healthcare/hl7.md +15 -0
- package/assets/guardrails/domain/healthcare/ihe-conformance.md +31 -0
- package/assets/guardrails/domain/healthcare/integration-terms.md +21 -0
- package/assets/guardrails/domain/healthcare/persistence.domain.md +20 -0
- package/assets/guardrails/domain/healthcare/terminology.md +30 -0
- package/assets/guardrails/domain/healthcare/testing.domain.md +15 -0
- package/assets/guardrails/domain/healthcare/ux/accessibility-standards.md +36 -0
- package/assets/guardrails/domain/healthcare/ux/content-design.md +32 -0
- package/assets/guardrails/domain/healthcare/ux/interaction-states.md +44 -0
- package/assets/guardrails/domain/healthcare/ux/journey-mapping.md +40 -0
- package/assets/guardrails/domain/healthcare/vertical-slices.domain.md +18 -0
- package/assets/guardrails/domain/healthcare/zero-trust.domain.md +12 -0
- package/assets/guardrails/domain/pharma/ai-rules.domain.md +32 -0
- package/assets/guardrails/domain/pharma/api-versioning.domain.md +20 -0
- package/assets/guardrails/domain/pharma/atc.md +22 -0
- package/assets/guardrails/domain/pharma/auditing.domain.md +90 -0
- package/assets/guardrails/domain/pharma/authorization.domain.md +25 -0
- package/assets/guardrails/domain/pharma/coding-standards.domain.md +28 -0
- package/assets/guardrails/domain/pharma/cqrs.domain.md +16 -0
- package/assets/guardrails/domain/pharma/data-classification.domain.md +24 -0
- package/assets/guardrails/domain/pharma/data-provenance.md +21 -0
- package/assets/guardrails/domain/pharma/dependency-policy.domain.md +11 -0
- package/assets/guardrails/domain/pharma/domain-constitution.md +113 -0
- package/assets/guardrails/domain/pharma/domain-driven-design.domain.md +36 -0
- package/assets/guardrails/domain/pharma/domain-requirements.sample.md +103 -0
- package/assets/guardrails/domain/pharma/eventing.domain.md +18 -0
- package/assets/guardrails/domain/pharma/fhir.md +31 -0
- package/assets/guardrails/domain/pharma/folder-structure.domain.md +26 -0
- package/assets/guardrails/domain/pharma/hl7.md +17 -0
- package/assets/guardrails/domain/pharma/idmp.md +26 -0
- package/assets/guardrails/domain/pharma/integration-terms.md +21 -0
- package/assets/guardrails/domain/pharma/ndc.md +28 -0
- package/assets/guardrails/domain/pharma/persistence.domain.md +23 -0
- package/assets/guardrails/domain/pharma/pharma-terms.md +27 -0
- package/assets/guardrails/domain/pharma/product-lifecycle.domain.md +30 -0
- package/assets/guardrails/domain/pharma/regulatory-compliance.md +19 -0
- package/assets/guardrails/domain/pharma/terminology.md +32 -0
- package/assets/guardrails/domain/pharma/testing.domain.md +19 -0
- package/assets/guardrails/domain/pharma/vertical-slices.domain.md +17 -0
- package/assets/guardrails/domain/pharma/zero-trust.domain.md +12 -0
- package/assets/guardrails/projects/dotnet-default-project/domain/domain-requirements.md +58 -0
- package/assets/guardrails/projects/dotnet-default-project/domain-rule-bindings.md +113 -0
- package/assets/guardrails/projects/dotnet-default-project/frontend/ui-requirements.md +43 -0
- package/assets/guardrails/projects/dotnet-default-project/service/technical-requirements.md +40 -0
- package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +263 -0
- package/assets/guardrails/requirement-spec.txt +27 -0
- package/assets/guardrails/technology/dotnet-webapi/PACKAGING.md +184 -0
- package/assets/guardrails/technology/dotnet-webapi/api-versioning.md +44 -0
- package/assets/guardrails/technology/dotnet-webapi/auditing.md +96 -0
- package/assets/guardrails/technology/dotnet-webapi/authorization-matrix.md +14 -0
- package/assets/guardrails/technology/dotnet-webapi/authorization.md +39 -0
- package/assets/guardrails/technology/dotnet-webapi/clean-architecture.md +54 -0
- package/assets/guardrails/technology/dotnet-webapi/coding-standards.md +87 -0
- package/assets/guardrails/technology/dotnet-webapi/cqrs.md +63 -0
- package/assets/guardrails/technology/dotnet-webapi/data-classification.md +38 -0
- package/assets/guardrails/technology/dotnet-webapi/dependency-policy.md +40 -0
- package/assets/guardrails/technology/dotnet-webapi/domain-driven-design.md +91 -0
- package/assets/guardrails/technology/dotnet-webapi/eventing.md +57 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/api-versioning.md +75 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/auditing.md +84 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/authorization.md +68 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/clean-architecture.md +37 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/cqrs.md +97 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/domain-driven-design.md +141 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/eventing.md +46 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/persistence.md +207 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/vertical-slices.md +151 -0
- package/assets/guardrails/technology/dotnet-webapi/examples/zero-trust.md +48 -0
- package/assets/guardrails/technology/dotnet-webapi/folder-structure.md +61 -0
- package/assets/guardrails/technology/dotnet-webapi/modular-monolith.md +47 -0
- package/assets/guardrails/technology/dotnet-webapi/persistence.md +82 -0
- package/assets/guardrails/technology/dotnet-webapi/technology-constitution.md +162 -0
- package/assets/guardrails/technology/dotnet-webapi/testing.md +55 -0
- package/assets/guardrails/technology/dotnet-webapi/vertical-slices.md +70 -0
- package/assets/guardrails/technology/dotnet-webapi/zero-trust.md +48 -0
- package/assets/guardrails/technology/java-spring/README.md +62 -0
- package/assets/guardrails/technology/nextjs/accessibility-implementation.md +56 -0
- package/assets/guardrails/technology/nextjs/api-client.md +56 -0
- package/assets/guardrails/technology/nextjs/api-integration.dotnet-webapi.md +174 -0
- package/assets/guardrails/technology/nextjs/api-integration.java-spring.md +203 -0
- package/assets/guardrails/technology/nextjs/auth-session.md +68 -0
- package/assets/guardrails/technology/nextjs/client-security.md +69 -0
- package/assets/guardrails/technology/nextjs/component-architecture.md +60 -0
- package/assets/guardrails/technology/nextjs/component-conventions.md +58 -0
- package/assets/guardrails/technology/nextjs/design-system.md +60 -0
- package/assets/guardrails/technology/nextjs/error-handling.md +72 -0
- package/assets/guardrails/technology/nextjs/forms-and-validation.md +75 -0
- package/assets/guardrails/technology/nextjs/frontend-testing.md +94 -0
- package/assets/guardrails/technology/nextjs/i18n.md +57 -0
- package/assets/guardrails/technology/nextjs/observability.md +67 -0
- package/assets/guardrails/technology/nextjs/performance-budgets.md +66 -0
- package/assets/guardrails/technology/nextjs/routing-navigation.md +52 -0
- package/assets/guardrails/technology/nextjs/state-management.md +70 -0
- package/assets/guardrails/technology/nextjs/ui-constitution.md +166 -0
- package/dist/commands/init.js +2 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/utils/copy-assets.js +8 -8
- package/dist/utils/copy-assets.js.map +1 -1
- package/package.json +1 -1
- package/assets/docs/pharma-constitution.my-ref.md +0 -86
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# aw-spec-add-component (orchestrator) — add an opt-in AppWeaver framework component
|
|
3
|
+
#
|
|
4
|
+
# Picks a component from
|
|
5
|
+
# foundations/<ecosystem>/components/ for the ecosystem the backend lane declares, parses its
|
|
6
|
+
# implementation catalog, asks which implementation(s)
|
|
7
|
+
# to wire, resolves the host/startup project (via Program.cs), authors the edits
|
|
8
|
+
# STRICTLY from the component's integration.md runbook, then VERIFIES the wiring
|
|
9
|
+
# (dotnet build + the R0.2a dual-registration guard, self-correcting up to 2×).
|
|
10
|
+
#
|
|
11
|
+
# This is the ONLY place framework components are installed. `implement` codes an
|
|
12
|
+
# aggregate against a component's PORT (e.g. IEmailService) but never wires the
|
|
13
|
+
# component itself — run this after implement (or whenever a port needs a provider).
|
|
14
|
+
# The per-component foundations/<ecosystem>/components/<C>/integration.md runbook is the AUTHORITY on
|
|
15
|
+
# what to add; the model reads it (in context) and authors the edits from it. It is
|
|
16
|
+
# pure technology (domain-agnostic) — no domain rule files are involved.
|
|
17
|
+
#
|
|
18
|
+
# Prereq: a scaffolded host project (/appweaver foundation) — components wire INTO it.
|
|
19
|
+
#
|
|
20
|
+
# Launch: /appweaver add-component [strategy] [ComponentName]
|
|
21
|
+
# e.g. /appweaver add-component Email
|
|
22
|
+
# Action semantics: .appweaver/ORCH-DIALECT.md
|
|
23
|
+
# =============================================================================
|
|
24
|
+
|
|
25
|
+
name: aw-spec-add-component
|
|
26
|
+
description: Add an opt-in AppWeaver framework component — pick one from the declared ecosystem's foundations/<ecosystem>/components/, choose implementation(s) from its catalog, wire the code in per its integration.md runbook, and verify the build + dual-registration. Pure technology; not a per-feature phase.
|
|
27
|
+
version: 1.0.0
|
|
28
|
+
agent_agnostic: true
|
|
29
|
+
dialect: aw-spec.orchestrator/v1
|
|
30
|
+
|
|
31
|
+
inputs:
|
|
32
|
+
user_input:
|
|
33
|
+
description: Optional component folder name to select directly (e.g. Email).
|
|
34
|
+
required: false
|
|
35
|
+
bind: USER_INPUT
|
|
36
|
+
|
|
37
|
+
scripts:
|
|
38
|
+
actions:
|
|
39
|
+
sh: .appweaver/scripts/bash/aw-spec-actions.sh
|
|
40
|
+
ps1: .appweaver/scripts/powershell/aw-spec-actions.ps1
|
|
41
|
+
|
|
42
|
+
standards:
|
|
43
|
+
- { path: .appweaver/ai-rules.md } # kit-resident: the universal operating rules, every flow
|
|
44
|
+
|
|
45
|
+
vars:
|
|
46
|
+
verify_ok: "false" # verify-loop guard, flipped by component-verify
|
|
47
|
+
|
|
48
|
+
workflow:
|
|
49
|
+
|
|
50
|
+
# 1. Discover components — foundations/<ecosystem>/components/* that have an integration.md,
|
|
51
|
+
# for the ecosystem the BACKEND lane declares. The dir it resolved is echoed back as
|
|
52
|
+
# components_dir and every later path is built from it, so the runbook the model reads
|
|
53
|
+
# is always the one for the stack the code is actually in.
|
|
54
|
+
- id: list_components
|
|
55
|
+
action: execute_script
|
|
56
|
+
script: { ref: actions }
|
|
57
|
+
subcommand: list-components
|
|
58
|
+
outputs:
|
|
59
|
+
- { name: components, from: "$.components" }
|
|
60
|
+
- { name: components_dir, from: "$.dir" }
|
|
61
|
+
- { name: components_eco, from: "$.ecosystem" }
|
|
62
|
+
|
|
63
|
+
- id: guard_components
|
|
64
|
+
action: verify_context
|
|
65
|
+
require_non_empty: components
|
|
66
|
+
on_empty: stop
|
|
67
|
+
on_empty_message: >
|
|
68
|
+
No components are available for the `{{components_eco}}` ecosystem this repository
|
|
69
|
+
declares in .appweaver/stacks.json — {{components_dir}}/ holds no runbook. A component
|
|
70
|
+
is installed by editing the host project's build files and its startup registration,
|
|
71
|
+
so it only exists for the ecosystem whose build files it knows how to edit; a
|
|
72
|
+
component from another ecosystem is not a substitute. Add one under
|
|
73
|
+
{{components_dir}}/<Name>/integration.md (see the README in that tree for the
|
|
74
|
+
expected layout), or wire the capability with the stack's own libraries — implement
|
|
75
|
+
already codes against the design's PORT, and add-component only supplies a provider.
|
|
76
|
+
|
|
77
|
+
# 2. Select the component (direct arg fast-path, else interactive; lone option confirms).
|
|
78
|
+
- id: select_component
|
|
79
|
+
action: user_select
|
|
80
|
+
prompt: "Select a component to add:"
|
|
81
|
+
options_from_variable: components
|
|
82
|
+
preselect_from: USER_INPUT
|
|
83
|
+
single_option_confirm: true
|
|
84
|
+
outputs:
|
|
85
|
+
- { name: chosen, from: selection }
|
|
86
|
+
|
|
87
|
+
- id: guard_chosen
|
|
88
|
+
action: verify_context
|
|
89
|
+
require_non_empty: chosen
|
|
90
|
+
on_empty: stop
|
|
91
|
+
on_empty_message: "No component selected — nothing to do."
|
|
92
|
+
|
|
93
|
+
# 3. Extract the implementation catalog from the runbook — DETERMINISTIC markdown
|
|
94
|
+
# table parse (script, NO model). integrable=false when no catalog table exists.
|
|
95
|
+
- id: extract_catalog
|
|
96
|
+
action: execute_script
|
|
97
|
+
script: { ref: actions }
|
|
98
|
+
subcommand: component-catalog
|
|
99
|
+
args: ["--file", "{{components_dir}}/{{chosen}}/integration.md"]
|
|
100
|
+
outputs:
|
|
101
|
+
- { name: integrable, from: "$.integrable" }
|
|
102
|
+
- { name: impl_keys, from: "$.impl_keys" }
|
|
103
|
+
- { name: implementations, from: "$.implementations" }
|
|
104
|
+
|
|
105
|
+
- id: catalog_gate
|
|
106
|
+
action: verify_context
|
|
107
|
+
require_true: integrable
|
|
108
|
+
on_false: stop
|
|
109
|
+
on_false_message: "Component '{{chosen}}' is not integrable via this command (no implementation catalog in integration.md)."
|
|
110
|
+
|
|
111
|
+
# 4. Select implementation(s) (multi-select). Empty selection => leave untouched.
|
|
112
|
+
- id: select_impls
|
|
113
|
+
action: ask
|
|
114
|
+
prompt: "Select one or more '{{chosen}}' implementations to wire in (honor the runbook's grouping rules):"
|
|
115
|
+
options_from: "{{impl_keys}}"
|
|
116
|
+
multi: true
|
|
117
|
+
answer_var: chosen_impls
|
|
118
|
+
|
|
119
|
+
- id: guard_selection
|
|
120
|
+
action: verify_context
|
|
121
|
+
require_non_empty: chosen_impls
|
|
122
|
+
on_empty: stop
|
|
123
|
+
on_empty_message: "No implementation selected — project left untouched. Re-run /appweaver add-component any time."
|
|
124
|
+
|
|
125
|
+
# 5. Resolve the host/startup project (by locating Program.cs).
|
|
126
|
+
- id: find_host
|
|
127
|
+
action: execute_script
|
|
128
|
+
script: { ref: actions }
|
|
129
|
+
subcommand: find-host-project
|
|
130
|
+
outputs:
|
|
131
|
+
- { name: host_found, from: "$.found" }
|
|
132
|
+
- { name: host_dir, from: "$.project_dir" }
|
|
133
|
+
- { name: program_cs, from: "$.program_cs" }
|
|
134
|
+
- { name: host_csproj, from: "$.csproj" }
|
|
135
|
+
- { name: host_eco, from: "$.ecosystem" }
|
|
136
|
+
- { name: host_search, from: "$.searched" }
|
|
137
|
+
|
|
138
|
+
- id: host_gate
|
|
139
|
+
action: verify_context
|
|
140
|
+
require_true: host_found
|
|
141
|
+
on_false: stop
|
|
142
|
+
on_false_message: >
|
|
143
|
+
No .NET host/startup project found — nothing named Program.cs under `{{host_search}}`,
|
|
144
|
+
the source path the backend lane declares, nor elsewhere in this repository. Wiring a
|
|
145
|
+
component means editing a host project's startup registration, so there has to be one
|
|
146
|
+
to edit. If this is a .NET repository, scaffold it first with /appweaver foundation.
|
|
147
|
+
If it is not — this lane's ecosystem is `{{host_eco}}` — then this catalogue's runbooks
|
|
148
|
+
do not apply to it: components are per-ecosystem, and the capability should be wired
|
|
149
|
+
with the stack's own libraries against the port the design declares.
|
|
150
|
+
|
|
151
|
+
# 6. Pre-execution hooks.
|
|
152
|
+
- id: resolve_pre_hooks
|
|
153
|
+
action: execute_script
|
|
154
|
+
script: { ref: actions }
|
|
155
|
+
subcommand: resolve-hooks
|
|
156
|
+
args: ["--phase", "before_addcomponent"]
|
|
157
|
+
outputs:
|
|
158
|
+
- { name: before_hooks, from: "$.hooks" }
|
|
159
|
+
- id: dispatch_pre_hooks
|
|
160
|
+
action: dispatch_hooks
|
|
161
|
+
hooks_from_variable: before_hooks
|
|
162
|
+
|
|
163
|
+
# 7. Plan the concrete file edits from the runbook + selected implementations.
|
|
164
|
+
- id: plan_edits
|
|
165
|
+
action: agent_query
|
|
166
|
+
context: ["{{components_dir}}/{{chosen}}/integration.md"]
|
|
167
|
+
include_standards: false
|
|
168
|
+
task: |
|
|
169
|
+
Using the runbook (in context) apply the "Common steps" plus each selected
|
|
170
|
+
implementation's block for: {{chosen_impls}}. The host/startup project is
|
|
171
|
+
{{host_dir}} (Program.cs at {{program_cs}}; csproj {{host_csproj}}). Honor the
|
|
172
|
+
cross-cutting rules (versions only in Directory.Packages.props; register in the
|
|
173
|
+
host project's AddInfrastructure AND AddAspireInfrastructure when both exist; set
|
|
174
|
+
options.Provider; never commit secrets). Return ONLY JSON listing each file to
|
|
175
|
+
create or edit, the active provider, and the exact registration marker token a
|
|
176
|
+
deterministic guard can look for in each infrastructure-registration method.
|
|
177
|
+
schema: { edits: [ { path: "<repo-relative path>", purpose: "<one line>" } ], active_provider: "<provider key>", registration_marker: "<exact code token that MUST appear in each infra-registration method>" }
|
|
178
|
+
mock: { edits: [], active_provider: "", registration_marker: "" }
|
|
179
|
+
outputs:
|
|
180
|
+
- { name: edits, from: "$.edits" }
|
|
181
|
+
- { name: active_provider, from: "$.active_provider" }
|
|
182
|
+
- { name: registration_marker, from: "$.registration_marker" }
|
|
183
|
+
|
|
184
|
+
# 8. Apply each edit — full updated file content, guided by the runbook in context.
|
|
185
|
+
# build_context loads the runbook envelope; the agent Reads each target file.
|
|
186
|
+
- id: ctx_apply
|
|
187
|
+
action: build_context
|
|
188
|
+
context:
|
|
189
|
+
- { path: "{{components_dir}}/{{chosen}}/integration.md" }
|
|
190
|
+
- { path: "{{components_dir}}/{{chosen}}/README.md", optional: true }
|
|
191
|
+
- id: apply_loop
|
|
192
|
+
action: loop
|
|
193
|
+
over: "{{edits}}"
|
|
194
|
+
as: e
|
|
195
|
+
steps:
|
|
196
|
+
- id: apply_edit
|
|
197
|
+
action: agent_generate
|
|
198
|
+
tools: "Read,Write,Edit"
|
|
199
|
+
permission_mode: acceptEdits
|
|
200
|
+
task: |
|
|
201
|
+
Apply the '{{chosen}}' component runbook edit (integration.md in context) to the
|
|
202
|
+
single file {{e.path}} — {{e.purpose}}. Selected implementations: {{chosen_impls}};
|
|
203
|
+
active provider: {{active_provider}}; host project: {{host_dir}}.
|
|
204
|
+
Read {{e.path}} first if it exists and PRESERVE all existing content, applying
|
|
205
|
+
ONLY the runbook's additions (package version, PackageReference, registration
|
|
206
|
+
line, config); create it if absent. Change NO other file.
|
|
207
|
+
outputs:
|
|
208
|
+
- { name: applied_files, from: "$.files" }
|
|
209
|
+
|
|
210
|
+
# 9. Post-wiring verification — `dotnet build` the host project + the R0.2a
|
|
211
|
+
# dual-registration guard (a script, NO model judgment), self-correcting up to 2×.
|
|
212
|
+
# Build degrades gracefully (skipped => ok) when the .NET SDK is absent.
|
|
213
|
+
- id: ctx_verify
|
|
214
|
+
action: build_context
|
|
215
|
+
context:
|
|
216
|
+
- { path: "{{components_dir}}/{{chosen}}/integration.md" }
|
|
217
|
+
- id: verify_loop
|
|
218
|
+
action: loop
|
|
219
|
+
while: "{{verify_ok}} != true"
|
|
220
|
+
max_iterations: 2
|
|
221
|
+
steps:
|
|
222
|
+
- id: verify
|
|
223
|
+
action: execute_script
|
|
224
|
+
script: { ref: actions }
|
|
225
|
+
subcommand: component-verify
|
|
226
|
+
args: ["--host-dir", "{{host_dir}}", "--host-csproj", "{{host_csproj}}", "--marker", "{{registration_marker}}"]
|
|
227
|
+
outputs:
|
|
228
|
+
- { name: verify_ok, from: "$.ok" }
|
|
229
|
+
- { name: verify_can_fix, from: "$.can_fix" }
|
|
230
|
+
- { name: fix_target, from: "$.fix_target" }
|
|
231
|
+
- { name: fix_reason, from: "$.fix_reason" }
|
|
232
|
+
- id: verify_break
|
|
233
|
+
action: break
|
|
234
|
+
condition: "{{verify_ok}} == true"
|
|
235
|
+
- id: verify_fix
|
|
236
|
+
action: agent_generate
|
|
237
|
+
condition: "{{verify_can_fix}} == true"
|
|
238
|
+
tools: "Read,Write,Edit"
|
|
239
|
+
permission_mode: acceptEdits
|
|
240
|
+
task: |
|
|
241
|
+
The '{{chosen}}' component wiring failed verification. Fix ONLY the file
|
|
242
|
+
{{fix_target}} to resolve it, following the integration.md runbook (in context)
|
|
243
|
+
and preserving all unrelated existing content. If the issue is R0.2a dual
|
|
244
|
+
registration, add the component's registration to that method exactly as the
|
|
245
|
+
other registration method already has it (adjusting only provider-specific calls).
|
|
246
|
+
Reason: {{fix_reason}}
|
|
247
|
+
Read {{fix_target}} first; change NO other file.
|
|
248
|
+
|
|
249
|
+
# 10. Post-execution hooks.
|
|
250
|
+
- id: resolve_post_hooks
|
|
251
|
+
action: execute_script
|
|
252
|
+
script: { ref: actions }
|
|
253
|
+
subcommand: resolve-hooks
|
|
254
|
+
args: ["--phase", "after_addcomponent"]
|
|
255
|
+
outputs:
|
|
256
|
+
- { name: after_hooks, from: "$.hooks" }
|
|
257
|
+
- id: dispatch_post_hooks
|
|
258
|
+
action: dispatch_hooks
|
|
259
|
+
hooks_from_variable: after_hooks
|
|
260
|
+
|
|
261
|
+
outputs:
|
|
262
|
+
component: "{{chosen}}"
|
|
263
|
+
implementations: "{{chosen_impls}}"
|
|
264
|
+
active_provider: "{{active_provider}}"
|
|
265
|
+
edits: "{{edits}}"
|
|
266
|
+
host_project: "{{host_dir}}"
|
|
267
|
+
build_verified: "{{verify_ok}}"
|
|
268
|
+
verify_detail: "{{fix_reason}}"
|
|
269
|
+
note: "Component wired in and verified (dotnet build + R0.2a dual-registration guard). If build_verified is false, verify_detail says what still needs a manual touch. Complete any out-of-band follow-ups (secrets, migrations, DDL) the runbook calls for."
|
|
270
|
+
next: "Run /appweaver build to compile, or continue implementing features that depend on this component's port."
|