workspai 0.43.0
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/LICENSE +21 -0
- package/README.md +624 -0
- package/contracts/agent-customization-pack.v1.json +229 -0
- package/contracts/analyze-last-run.v1.json +106 -0
- package/contracts/artifact-remediation-plan.v1.json +163 -0
- package/contracts/backend-import-stack-parity.snapshot.json +37 -0
- package/contracts/cli-log-event.v1.json +51 -0
- package/contracts/create-planner-capabilities.v1.json +251 -0
- package/contracts/doctor-project-evidence.v1.json +304 -0
- package/contracts/doctor-remediation-plan.v1.json +496 -0
- package/contracts/doctor-workspace-evidence.v1.json +315 -0
- package/contracts/extension-cli-compatibility.v1.json +26 -0
- package/contracts/infra-stack.v1.json +305 -0
- package/contracts/module-layout.v1.json +34 -0
- package/contracts/module-support.v1.json +20 -0
- package/contracts/pipeline-last-run.v1.json +80 -0
- package/contracts/release-readiness.v1.json +60 -0
- package/contracts/runtime-command-surface.v1.json +364 -0
- package/contracts/workspace-intelligence/agent-action-outcome.v1.json +38 -0
- package/contracts/workspace-intelligence/blocker-resolution.v1.json +65 -0
- package/contracts/workspace-intelligence/doctor-fix-result.v1.json +44 -0
- package/contracts/workspace-intelligence/fact-freshness.v1.json +58 -0
- package/contracts/workspace-intelligence/studio-blocker-handoff.v1.json +115 -0
- package/contracts/workspace-intelligence/workspace-context.v1.json +142 -0
- package/contracts/workspace-intelligence/workspace-contract-verify.v1.json +51 -0
- package/contracts/workspace-intelligence/workspace-dependency-graph.v1.json +152 -0
- package/contracts/workspace-intelligence/workspace-explain.v1.json +31 -0
- package/contracts/workspace-intelligence/workspace-impact.v1.json +114 -0
- package/contracts/workspace-intelligence/workspace-intelligence-history.v1.json +40 -0
- package/contracts/workspace-intelligence/workspace-model-diff.v1.json +105 -0
- package/contracts/workspace-intelligence/workspace-model-snapshot.v1.json +36 -0
- package/contracts/workspace-intelligence/workspace-model.v1.json +135 -0
- package/contracts/workspace-intelligence/workspace-operational-skill.v1.json +37 -0
- package/contracts/workspace-intelligence/workspace-skills-index.v1.json +27 -0
- package/contracts/workspace-intelligence/workspace-verify.v1.json +213 -0
- package/contracts/workspace-registry.v1.json +83 -0
- package/contracts/workspace-run-last.v1.json +112 -0
- package/data/modules-embeddings.json +16953 -0
- package/dist/analyze-5BU4QIPK.js +1 -0
- package/dist/artifact-remediation-plan-5GJWPPRS.js +3 -0
- package/dist/autopilot-release-QYUOVB26.js +1 -0
- package/dist/chunk-22DT744Z.js +1 -0
- package/dist/chunk-2E6WGUN6.js +1 -0
- package/dist/chunk-2FIX2MDC.js +1 -0
- package/dist/chunk-3KXW53QI.js +1 -0
- package/dist/chunk-3ZK2GU7C.js +1 -0
- package/dist/chunk-4KUIFXHM.js +5 -0
- package/dist/chunk-54XJNLYC.js +13 -0
- package/dist/chunk-5SWNSJGW.js +1 -0
- package/dist/chunk-5XATWNME.js +1 -0
- package/dist/chunk-753LOKFZ.js +2 -0
- package/dist/chunk-7YHK5NM3.js +2 -0
- package/dist/chunk-A5FBGRJA.js +1 -0
- package/dist/chunk-AAKUNWPR.js +78 -0
- package/dist/chunk-AFSZHLQT.js +1 -0
- package/dist/chunk-AQ4XZZC6.js +1 -0
- package/dist/chunk-CVTCPPEF.js +1 -0
- package/dist/chunk-DNAY5ALC.js +1 -0
- package/dist/chunk-EWYYLJQY.js +2 -0
- package/dist/chunk-GSWPGELT.js +2 -0
- package/dist/chunk-GZTYAEWX.js +1 -0
- package/dist/chunk-HTYMXMQM.js +1 -0
- package/dist/chunk-IBJEQHJR.js +205 -0
- package/dist/chunk-ICGWHIMK.js +1 -0
- package/dist/chunk-JEI6BTZI.js +3 -0
- package/dist/chunk-JHC6SCJC.js +1 -0
- package/dist/chunk-LO4C4VXR.js +4 -0
- package/dist/chunk-LPZFK3Y6.js +920 -0
- package/dist/chunk-LUP4U6EE.js +1 -0
- package/dist/chunk-LYC6AIF2.js +2 -0
- package/dist/chunk-LZQNVH7D.js +1 -0
- package/dist/chunk-NAAQMSO3.js +1 -0
- package/dist/chunk-NFUXULIF.js +1 -0
- package/dist/chunk-OCGZNSOE.js +1 -0
- package/dist/chunk-OJEWQO3Z.js +33 -0
- package/dist/chunk-OL64GWQC.js +9 -0
- package/dist/chunk-PI5KUXDA.js +7 -0
- package/dist/chunk-PYCJWW4B.js +1 -0
- package/dist/chunk-RE773WOX.js +13 -0
- package/dist/chunk-RO73VVHW.js +2 -0
- package/dist/chunk-S5KTATOU.js +1 -0
- package/dist/chunk-SI3AQKIP.js +1 -0
- package/dist/chunk-T3GJ7YVG.js +1 -0
- package/dist/chunk-T6OR6YOI.js +2 -0
- package/dist/chunk-VRDF2J46.js +653 -0
- package/dist/chunk-VZKSNUEE.js +2 -0
- package/dist/chunk-WU4ZRRA5.js +4 -0
- package/dist/chunk-XEJD4KCV.js +33 -0
- package/dist/chunk-XZGVNGRB.js +1 -0
- package/dist/chunk-Y45WZR5N.js +5 -0
- package/dist/create-WRZO4HK2.js +1 -0
- package/dist/demo-kit-AJ5LIM5G.js +149 -0
- package/dist/doctor-MF3M3FS3.js +1 -0
- package/dist/dotnet-webapi-clean-IPY3MCGQ.js +425 -0
- package/dist/gofiber-standard-N5N3QGH3.js +1397 -0
- package/dist/gogin-standard-LAWQTBWL.js +1459 -0
- package/dist/imported-projects-registry-FOIE27WT.js +1 -0
- package/dist/index.d.ts +141 -0
- package/dist/index.js +454 -0
- package/dist/managed-agent-markers-AXUM75OE.js +8 -0
- package/dist/module-layout-NZ43RSC5.js +1 -0
- package/dist/pipeline-QCUHFWDY.js +5 -0
- package/dist/platform-capabilities-XAVU4HSM.js +1 -0
- package/dist/pythonRapidkitExec-3L3XJBSY.js +1 -0
- package/dist/springboot-standard-OZYF7ZM7.js +697 -0
- package/dist/workspace-PR6VZRBG.js +1 -0
- package/dist/workspace-agent-sync-KTYF3HQR.js +1 -0
- package/dist/workspace-archive-GCZNI44O.js +3 -0
- package/dist/workspace-context-QUTOP2XV.js +1 -0
- package/dist/workspace-contract-XUGMCUSQ.js +1 -0
- package/dist/workspace-explain-JEONEGZZ.js +1 -0
- package/dist/workspace-explain-contract-DNS2YEL7.js +1 -0
- package/dist/workspace-feedback-R6H4UFZB.js +1 -0
- package/dist/workspace-foundation-KGSV4E6D.js +1 -0
- package/dist/workspace-graph-2A5THUCI.js +1 -0
- package/dist/workspace-history-CGCK2DJI.js +1 -0
- package/dist/workspace-intelligence-QJGVL37U.js +1 -0
- package/dist/workspace-marker-SMBC3Z2Q.js +1 -0
- package/dist/workspace-mcp-serve-AK4MYEHQ.js +3 -0
- package/dist/workspace-model-PNXXOGPO.js +1 -0
- package/dist/workspace-python-engine-state-MTWIIZPY.js +2 -0
- package/dist/workspace-registry-summary-RUJE6RPH.js +1 -0
- package/dist/workspace-run-Y7YMUIHX.js +1 -0
- package/dist/workspace-verify-WSDUUTR5.js +1 -0
- package/dist/workspace-watch-AGPOJ74Q.js +1 -0
- package/docs/AI_DYNAMIC_INTEGRATION.md +440 -0
- package/docs/AI_EXAMPLES.md +419 -0
- package/docs/AI_FEATURES.md +460 -0
- package/docs/AI_QUICKSTART.md +245 -0
- package/docs/DEVELOPMENT.md +90 -0
- package/docs/From Code to Shared Understanding.png +0 -0
- package/docs/OPEN_SOURCE_USER_SCENARIOS.md +170 -0
- package/docs/OPTIMIZATION_GUIDE.md +504 -0
- package/docs/PACKAGE_MANAGER_POLICY.md +25 -0
- package/docs/README.md +125 -0
- package/docs/SECURITY.md +63 -0
- package/docs/SETUP.md +107 -0
- package/docs/UTILITIES.md +221 -0
- package/docs/WORKSPACE_MARKER_SPEC.md +276 -0
- package/docs/ci-workflows.md +59 -0
- package/docs/commands-reference.md +172 -0
- package/docs/config-file-guide.md +299 -0
- package/docs/contracts/ARTIFACT_CATALOG.md +333 -0
- package/docs/contracts/CLI_LOG_EVENT_STREAM.md +123 -0
- package/docs/contracts/COMMAND_OWNERSHIP_MATRIX.md +138 -0
- package/docs/contracts/NAMING_AND_COEXISTENCE.md +60 -0
- package/docs/contracts/README.md +86 -0
- package/docs/contracts/RUNTIME_ACCEPTANCE_MATRIX.md +98 -0
- package/docs/contracts/RUNTIME_SUPPORT_MATRIX.md +75 -0
- package/docs/contracts/rapidkit-cli-contracts.json +239 -0
- package/docs/create-planner-capabilities.md +81 -0
- package/docs/doctor-command.md +467 -0
- package/docs/examples/ci-agent-grounding.yml +65 -0
- package/docs/from-code-to-shared-understanding.md +45 -0
- package/docs/governance-policy.enterprise.example.json +40 -0
- package/docs/mirror-config.enterprise.example.json +60 -0
- package/docs/policies.workspace.example.yml +23 -0
- package/docs/workspace-operations.md +160 -0
- package/docs/workspace-run.md +104 -0
- package/package.json +179 -0
- package/rapidkit.config.example.cjs +62 -0
- package/scripts/check-agent-customization-drift.mjs +78 -0
- package/scripts/check-cli-resolution.cjs +72 -0
- package/scripts/enforce-package-manager.cjs +10 -0
- package/scripts/enterprise-package-smoke.mjs +463 -0
- package/scripts/prepack-enterprise.mjs +43 -0
- package/templates/generator.js +179 -0
- package/templates/kits/fastapi-ddd/README.md.j2 +117 -0
- package/templates/kits/fastapi-ddd/common/env.example.j2 +10 -0
- package/templates/kits/fastapi-ddd/env.example.j2 +1 -0
- package/templates/kits/fastapi-ddd/pyproject.toml.j2 +64 -0
- package/templates/kits/fastapi-ddd/src/__init__.py.j2 +3 -0
- package/templates/kits/fastapi-ddd/src/app/__init__.py.j2 +11 -0
- package/templates/kits/fastapi-ddd/src/app/application/__init__.py.j2 +5 -0
- package/templates/kits/fastapi-ddd/src/app/application/interfaces.py.j2 +43 -0
- package/templates/kits/fastapi-ddd/src/app/application/use_cases/__init__.py.j2 +6 -0
- package/templates/kits/fastapi-ddd/src/app/application/use_cases/health.py.j2 +14 -0
- package/templates/kits/fastapi-ddd/src/app/application/use_cases/notes.py.j2 +24 -0
- package/templates/kits/fastapi-ddd/src/app/config/__init__.py.j2 +16 -0
- package/templates/kits/fastapi-ddd/src/app/domain/__init__.py.j2 +3 -0
- package/templates/kits/fastapi-ddd/src/app/domain/models/__init__.py.j2 +6 -0
- package/templates/kits/fastapi-ddd/src/app/domain/models/health.py.j2 +16 -0
- package/templates/kits/fastapi-ddd/src/app/domain/models/note.py.j2 +27 -0
- package/templates/kits/fastapi-ddd/src/app/infrastructure/__init__.py.j2 +5 -0
- package/templates/kits/fastapi-ddd/src/app/infrastructure/repositories/__init__.py.j2 +6 -0
- package/templates/kits/fastapi-ddd/src/app/infrastructure/repositories/health.py.j2 +17 -0
- package/templates/kits/fastapi-ddd/src/app/infrastructure/repositories/notes.py.j2 +28 -0
- package/templates/kits/fastapi-ddd/src/app/main.py.j2 +61 -0
- package/templates/kits/fastapi-ddd/src/app/presentation/__init__.py.j2 +3 -0
- package/templates/kits/fastapi-ddd/src/app/presentation/api/__init__.py.j2 +5 -0
- package/templates/kits/fastapi-ddd/src/app/presentation/api/dependencies/__init__.py.j2 +19 -0
- package/templates/kits/fastapi-ddd/src/app/presentation/api/router.py.j2 +10 -0
- package/templates/kits/fastapi-ddd/src/app/presentation/api/routes/__init__.py.j2 +5 -0
- package/templates/kits/fastapi-ddd/src/app/presentation/api/routes/health.py.j2 +27 -0
- package/templates/kits/fastapi-ddd/src/app/presentation/api/routes/notes.py.j2 +50 -0
- package/templates/kits/fastapi-ddd/src/app/shared/__init__.py.j2 +5 -0
- package/templates/kits/fastapi-ddd/src/app/shared/result.py.j2 +28 -0
- package/templates/kits/fastapi-ddd/src/cli.py.j2 +170 -0
- package/templates/kits/fastapi-ddd/src/main.py.j2 +35 -0
- package/templates/kits/fastapi-ddd/src/modules/__init__.py.j2 +3 -0
- package/templates/kits/fastapi-ddd/src/routing/__init__.py.j2 +13 -0
- package/templates/kits/fastapi-ddd/src/routing/health.py.j2 +7 -0
- package/templates/kits/fastapi-ddd/src/routing/notes.py.j2 +7 -0
- package/templates/kits/fastapi-ddd/tests/__init__.py.j2 +1 -0
- package/templates/kits/fastapi-ddd/tests/test_app_factory.py.j2 +22 -0
- package/templates/kits/fastapi-ddd/tests/test_health.py.j2 +17 -0
- package/templates/kits/fastapi-ddd/tests/test_notes.py.j2 +27 -0
- package/templates/kits/fastapi-standard/README.md.j2 +140 -0
- package/templates/kits/fastapi-standard/common/env.example.j2 +10 -0
- package/templates/kits/fastapi-standard/env.example.j2 +1 -0
- package/templates/kits/fastapi-standard/pyproject.toml.j2 +64 -0
- package/templates/kits/fastapi-standard/src/__init__.py.j2 +3 -0
- package/templates/kits/fastapi-standard/src/cli.py.j2 +171 -0
- package/templates/kits/fastapi-standard/src/main.py.j2 +66 -0
- package/templates/kits/fastapi-standard/src/modules/__init__.py.j2 +3 -0
- package/templates/kits/fastapi-standard/src/routing/__init__.py.j2 +16 -0
- package/templates/kits/fastapi-standard/src/routing/examples.py.j2 +71 -0
- package/templates/kits/fastapi-standard/src/routing/health.py.j2 +22 -0
- package/templates/kits/fastapi-standard/tests/__init__.py.j2 +1 -0
- package/templates/kits/fastapi-standard/tests/test_examples.py.j2 +29 -0
- package/templates/kits/fastapi-standard/tests/test_health.py.j2 +17 -0
- package/templates/kits/nestjs-standard/Dockerfile.j2 +41 -0
- package/templates/kits/nestjs-standard/README.md.j2 +134 -0
- package/templates/kits/nestjs-standard/docker-compose.yml.j2 +94 -0
- package/templates/kits/nestjs-standard/docs/README.md.j2 +15 -0
- package/templates/kits/nestjs-standard/env.example.j2 +18 -0
- package/templates/kits/nestjs-standard/eslint.config.cjs.j2 +9 -0
- package/templates/kits/nestjs-standard/jest.config.ts.j2 +28 -0
- package/templates/kits/nestjs-standard/nest-cli.json.j2 +10 -0
- package/templates/kits/nestjs-standard/package.json.j2 +101 -0
- package/templates/kits/nestjs-standard/src/app.controller.ts.j2 +14 -0
- package/templates/kits/nestjs-standard/src/app.module.ts.j2 +26 -0
- package/templates/kits/nestjs-standard/src/app.service.ts.j2 +16 -0
- package/templates/kits/nestjs-standard/src/auth/auth.controller.ts.j2 +20 -0
- package/templates/kits/nestjs-standard/src/auth/auth.module.ts.j2 +13 -0
- package/templates/kits/nestjs-standard/src/auth/auth.service.ts.j2 +6 -0
- package/templates/kits/nestjs-standard/src/auth/entities/token.entity.ts.j2 +3 -0
- package/templates/kits/nestjs-standard/src/auth/entities/user.entity.ts.j2 +3 -0
- package/templates/kits/nestjs-standard/src/auth/entities/webauthn.entity.ts.j2 +3 -0
- package/templates/kits/nestjs-standard/src/config/configuration.ts.j2 +85 -0
- package/templates/kits/nestjs-standard/src/config/index.ts.j2 +2 -0
- package/templates/kits/nestjs-standard/src/config/validation.ts.j2 +21 -0
- package/templates/kits/nestjs-standard/src/examples/dto/create-note.dto.ts.j2 +11 -0
- package/templates/kits/nestjs-standard/src/examples/examples.controller.ts.j2 +24 -0
- package/templates/kits/nestjs-standard/src/examples/examples.module.ts.j2 +10 -0
- package/templates/kits/nestjs-standard/src/examples/examples.service.ts.j2 +33 -0
- package/templates/kits/nestjs-standard/src/main.ts.j2 +53 -0
- package/templates/kits/nestjs-standard/src/modules/index.ts.j2 +25 -0
- package/templates/kits/nestjs-standard/test/app.controller.spec.ts.j2 +24 -0
- package/templates/kits/nestjs-standard/test/app.e2e-spec.ts.j2 +60 -0
- package/templates/kits/nestjs-standard/test/examples.controller.spec.ts.j2 +28 -0
- package/templates/kits/nestjs-standard/test/jest-e2e.json.j2 +15 -0
- package/templates/kits/nestjs-standard/tsconfig.build.json.j2 +12 -0
- package/templates/kits/nestjs-standard/tsconfig.json.j2 +26 -0
- package/workspai.config.example.cjs +62 -0
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
# Workspai Doctor Command
|
|
2
|
+
|
|
3
|
+
`doctor` checks health for the npm wrapper environment in system, workspace, or project scope.
|
|
4
|
+
|
|
5
|
+
**Related:** [workspace-operations.md](./workspace-operations.md) · [commands-reference.md](./commands-reference.md) · [Documentation index](./README.md)
|
|
6
|
+
|
|
7
|
+
## Command Modes
|
|
8
|
+
|
|
9
|
+
### 1) System Check
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx workspai doctor
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Checks host prerequisites:
|
|
16
|
+
|
|
17
|
+
- Python
|
|
18
|
+
- Poetry (optional)
|
|
19
|
+
- pipx (optional)
|
|
20
|
+
- RapidKit Core availability
|
|
21
|
+
- Go (optional)
|
|
22
|
+
|
|
23
|
+
### 2) Workspace Check (Canonical)
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
cd my-workspace
|
|
27
|
+
npx workspai doctor workspace
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Checks:
|
|
31
|
+
|
|
32
|
+
- all system checks
|
|
33
|
+
- workspace marker resolution
|
|
34
|
+
- project discovery and per-project health
|
|
35
|
+
- dependency/env readiness by project type (Python/Node/Go)
|
|
36
|
+
|
|
37
|
+
> Compatibility note: `npx workspai doctor --workspace` still works, but `doctor workspace` is the canonical form.
|
|
38
|
+
|
|
39
|
+
### 3) Project Check (Canonical)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
cd my-workspace/my-project
|
|
43
|
+
npx workspai doctor project
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Checks:
|
|
47
|
+
|
|
48
|
+
- all system checks
|
|
49
|
+
- nearest project resolution (current folder or parent with project markers)
|
|
50
|
+
- project-specific framework/runtime health
|
|
51
|
+
- dependency/env readiness for the selected project
|
|
52
|
+
- enterprise probes (config contract, migration surface, runtime health surface)
|
|
53
|
+
- score explainability breakdown for audit trails
|
|
54
|
+
|
|
55
|
+
> Compatibility note: `npx workspai doctor --project` also works.
|
|
56
|
+
|
|
57
|
+
## Typical Usage
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Pre-flight on a contributor machine
|
|
61
|
+
npx workspai doctor
|
|
62
|
+
|
|
63
|
+
# Full check inside a workspace
|
|
64
|
+
npx workspai doctor workspace
|
|
65
|
+
|
|
66
|
+
# Focus only on current project
|
|
67
|
+
npx workspai doctor project
|
|
68
|
+
|
|
69
|
+
# Machine-readable output
|
|
70
|
+
npx workspai doctor workspace --json
|
|
71
|
+
|
|
72
|
+
# Attempt safe fixes (interactive)
|
|
73
|
+
npx workspai doctor workspace --fix
|
|
74
|
+
|
|
75
|
+
# Attempt safe fixes for current project only
|
|
76
|
+
npx workspai doctor project --fix
|
|
77
|
+
|
|
78
|
+
# JSON output with audit-ready breakdown + probes
|
|
79
|
+
npx workspai doctor project --json
|
|
80
|
+
|
|
81
|
+
# Release-grade policy profile
|
|
82
|
+
npx workspai doctor workspace --profile enterprise-strict --json
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Enterprise Fix Pipeline
|
|
86
|
+
|
|
87
|
+
Doctor supports policy profiles so the same evidence can be interpreted correctly in local,
|
|
88
|
+
CI, release, and enterprise gates:
|
|
89
|
+
|
|
90
|
+
| Profile | Use when | Warning behavior |
|
|
91
|
+
| ------------------- | -------------------------------- | ---------------------------------------- |
|
|
92
|
+
| `local` | Developer diagnostics | Report warnings, do not block |
|
|
93
|
+
| `ci` | CI feedback loop | Exit `2` on warnings, `1` on errors |
|
|
94
|
+
| `release` | Release readiness gate | Exit `1` on warnings or errors |
|
|
95
|
+
| `enterprise-strict` | Enterprise/studio repair workflow | Exit `1`; every warning needs evidence or repair guidance |
|
|
96
|
+
|
|
97
|
+
`--strict` maps to the `release` profile and `--ci` maps to the `ci` profile for backward
|
|
98
|
+
compatibility. JSON evidence includes `policyProfile` so Workspai and CI can explain why a
|
|
99
|
+
card is advisory locally but blocking for release.
|
|
100
|
+
|
|
101
|
+
Doctor also attaches a **freshness contract** to evidence so tools do not treat live state as
|
|
102
|
+
durable structure:
|
|
103
|
+
|
|
104
|
+
| Freshness category | Meaning | Default TTL |
|
|
105
|
+
| ------------------ | -------------------------------------------- | ----------- |
|
|
106
|
+
| `structure` | Durable project/workspace shape and markers | 7 days |
|
|
107
|
+
| `verification` | Test, script, lint, quality, and probe checks | 24 hours |
|
|
108
|
+
| `state` | Live dependency/security state | 5 minutes |
|
|
109
|
+
|
|
110
|
+
Each probe can include `freshness`, and each JSON artifact includes `evidenceFreshness`.
|
|
111
|
+
Workspai and CI should refresh stale or `verifyBeforeUse` evidence before claiming a project is
|
|
112
|
+
ready, repaired, or release-safe.
|
|
113
|
+
|
|
114
|
+
Doctor probes also include an **issue taxonomy** and **repair intent** for Studio-driven repair:
|
|
115
|
+
|
|
116
|
+
| Field | Purpose |
|
|
117
|
+
| ------------------- | ----------------------------------------------------------------------- |
|
|
118
|
+
| `issueClass` | Stable category such as `security`, `test`, `container`, or `dependency` |
|
|
119
|
+
| `operationalImpact` | Product impact such as `ci-risk`, `release-risk`, or `security-risk` |
|
|
120
|
+
| `repairIntent.mode` | Studio action mode: `edit-file`, `run-command`, `review-required`, `verify-before-fix`, or `refresh-evidence` |
|
|
121
|
+
|
|
122
|
+
This lets Workspai distinguish "show guidance" from "apply an approved file edit", "run a command",
|
|
123
|
+
or "refresh stale/live evidence first".
|
|
124
|
+
|
|
125
|
+
When `--fix` is enabled, Doctor now runs a staged treatment pipeline:
|
|
126
|
+
|
|
127
|
+
1. Fix policy engine assigns risk for each fix step (`safe`, `guarded`, `invasive`).
|
|
128
|
+
2. Transaction snapshots are created for guarded/invasive steps and project-scoped file edits.
|
|
129
|
+
3. Repair capabilities from probes can promote safe, typed fixes into the plan.
|
|
130
|
+
4. Dependency orchestrator executes known dependency commands via structured adapters.
|
|
131
|
+
5. Post-fix verification re-runs project diagnostics.
|
|
132
|
+
6. Retry policy re-attempts transient network failures once before failing.
|
|
133
|
+
|
|
134
|
+
If a guarded/invasive step or file edit fails, Doctor attempts rollback from snapshot and records
|
|
135
|
+
the failure. Newly-created files are tracked and removed during rollback if the fix cannot finish.
|
|
136
|
+
|
|
137
|
+
`--plan --json`, `--fix --json`, and `--apply --json` include a remediation plan with
|
|
138
|
+
`schemaVersion: doctor-remediation-plan-v2`. This plan is the Studio handoff contract: every step
|
|
139
|
+
has a stable `id`, `phase`, `order`, `dependsOn`, `issueId`, `issueClass`, `operationalImpact`,
|
|
140
|
+
`repairIntent`, affected `files`, typed `operation` when Doctor can edit safely, a human-readable
|
|
141
|
+
`preview`, deterministic `diffPreview`, `verifyCommand`, `refreshCommands`, rollback strategy, and
|
|
142
|
+
`studioStatus`.
|
|
143
|
+
|
|
144
|
+
The same plan is persisted to:
|
|
145
|
+
|
|
146
|
+
```text
|
|
147
|
+
.workspai/reports/doctor-remediation-plan-last-run.json
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
After `--fix` or `--apply`, Doctor also persists the execution result:
|
|
151
|
+
|
|
152
|
+
```text
|
|
153
|
+
.workspai/reports/doctor-fix-result-last-run.json
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
and appends a `kind: doctor-fix` entry to
|
|
157
|
+
`.workspai/reports/workspace-intelligence-history.json`. This gives Workspai a closed repair loop:
|
|
158
|
+
plan -> approved command/edit -> execution result -> refreshed evidence -> history.
|
|
159
|
+
|
|
160
|
+
For `doctor project` inside a workspace, the canonical governance copy stays under the workspace
|
|
161
|
+
`.workspai/reports/` directory and Doctor mirrors the project evidence, remediation plan, and fix
|
|
162
|
+
result into the scoped project's `.workspai/reports/` directory. Project-local tools can inspect the
|
|
163
|
+
same repair evidence without guessing the workspace root.
|
|
164
|
+
|
|
165
|
+
The remediation plan is intentionally ordered for Studio execution:
|
|
166
|
+
|
|
167
|
+
| Phase | Purpose |
|
|
168
|
+
| --- | --- |
|
|
169
|
+
| `dependency-baseline` | Restore package/runtime dependency baselines before other fixes |
|
|
170
|
+
| `local-environment` | Seed local env files without overwriting operator-owned values |
|
|
171
|
+
| `source-hygiene` | Apply safe project-scoped hygiene files such as `.dockerignore` or `.gitignore` rules |
|
|
172
|
+
| `command-contract` | Add missing test, quality, audit, or runtime command contracts |
|
|
173
|
+
| `runtime-governance` | Run RapidKit/workspace initializers that may touch multiple project surfaces |
|
|
174
|
+
| `manual-review` | Surface guidance that requires a human decision |
|
|
175
|
+
| `generic-execution` | Last-resort shell remediation when no typed operation exists |
|
|
176
|
+
|
|
177
|
+
`dependsOn` lets Workspai avoid false loops: for example, a missing test script repair can depend on
|
|
178
|
+
the project dependency baseline step, so Studio can run or ask for approval in the same order Doctor
|
|
179
|
+
would use.
|
|
180
|
+
|
|
181
|
+
Workspai should use this contract to offer two clear actions for a blocked card:
|
|
182
|
+
|
|
183
|
+
1. Run the exact diagnostic or remediation command when the safest path is command execution.
|
|
184
|
+
2. Apply the approved file edit when Doctor exposes a typed, project-scoped operation.
|
|
185
|
+
|
|
186
|
+
After either path, Studio should run the step `verifyCommand` when present, then refresh the card
|
|
187
|
+
with `refreshCommands` before claiming the issue is resolved.
|
|
188
|
+
|
|
189
|
+
In `enterprise-strict`, guarded and invasive fixes are exposed as `review-required` even when they
|
|
190
|
+
are executable. That keeps Studio honest: it can preview and propose the change, but the operator
|
|
191
|
+
must approve before Doctor mutates project files or runs a dependency command.
|
|
192
|
+
|
|
193
|
+
The Doctor test suite includes a multi-stack remediation canary matrix for Node/Next.js,
|
|
194
|
+
Python/Poetry, Go, Rust, PHP/Composer, Ruby/Bundler, and .NET. The canary validates both
|
|
195
|
+
`doctor project --plan --json` and workspace-level dashboard aggregation so new runtime support
|
|
196
|
+
cannot silently regress the Studio handoff contract.
|
|
197
|
+
|
|
198
|
+
Repair-capable probes include a `repairCapability` object in JSON/evidence output. This is the
|
|
199
|
+
contract IDEs and Workspai use to distinguish an explanatory warning from an approved repair path:
|
|
200
|
+
|
|
201
|
+
```json
|
|
202
|
+
{
|
|
203
|
+
"id": "frontend-script-test",
|
|
204
|
+
"status": "warn",
|
|
205
|
+
"repairCapability": {
|
|
206
|
+
"issueId": "frontend-script-test",
|
|
207
|
+
"fixKind": "package-json-script",
|
|
208
|
+
"canAutoFix": true,
|
|
209
|
+
"canEditFiles": true,
|
|
210
|
+
"requiresApproval": true,
|
|
211
|
+
"files": ["package.json"],
|
|
212
|
+
"operation": {
|
|
213
|
+
"type": "package-json-script",
|
|
214
|
+
"path": "package.json",
|
|
215
|
+
"scriptName": "test",
|
|
216
|
+
"scriptValue": "npm run lint"
|
|
217
|
+
},
|
|
218
|
+
"verifyCommand": "npx workspai doctor project --json"
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
For example, a frontend project with `lint` or `build` but no `test` script can receive a guarded
|
|
224
|
+
`package.json` repair. `doctor workspace --fix --json` applies the package script update through
|
|
225
|
+
Doctor's structured executor instead of falling back to an opaque shell command. Structured
|
|
226
|
+
operations include file create/append/copy, package script creation, JSON pointer edits, env key
|
|
227
|
+
additions, and Makefile target additions.
|
|
228
|
+
|
|
229
|
+
File hygiene repairs use the same contract. A Dockerfile without `.dockerignore` can produce a
|
|
230
|
+
safe `file-create` operation, and a `.gitignore` missing env-file rules can produce a safe
|
|
231
|
+
`file-append` operation. Workspai can render those operations as reviewable file edits before the
|
|
232
|
+
operator approves the fix.
|
|
233
|
+
|
|
234
|
+
Local environment seeding is also typed. When `.env.example` exists and `.env` is missing, Doctor
|
|
235
|
+
emits a safe `file-copy` operation instead of an opaque shell copy command. The target is never
|
|
236
|
+
overwritten.
|
|
237
|
+
|
|
238
|
+
For Node projects without a security audit script, Doctor can emit a guarded
|
|
239
|
+
`package-json-script` operation for `scripts.audit="npm audit --audit-level=moderate"`, giving CI,
|
|
240
|
+
Studio, and humans the same deterministic security check.
|
|
241
|
+
|
|
242
|
+
For projects with dependency manifests but no deterministic baseline, Doctor emits guarded
|
|
243
|
+
`dependency-sync` repairs when the runtime has a safe native command:
|
|
244
|
+
|
|
245
|
+
- Node: `npm install`, `pnpm install`, `yarn install`, or `bun install`
|
|
246
|
+
- Go: `go mod tidy`
|
|
247
|
+
- Rust: `cargo fetch`
|
|
248
|
+
- PHP: `composer install`
|
|
249
|
+
- Ruby: `bundle install`
|
|
250
|
+
- .NET: `dotnet restore`
|
|
251
|
+
- Python: `poetry lock` or `uv lock` when the project metadata identifies the tool
|
|
252
|
+
|
|
253
|
+
When the runtime does not expose a safe deterministic repair path, Doctor keeps the issue as
|
|
254
|
+
review-required guidance instead of guessing.
|
|
255
|
+
|
|
256
|
+
Doctor can also create **runtime command contracts** for missing test, quality, and security
|
|
257
|
+
surfaces. For Node, safe contracts are written as `package.json` scripts when a deterministic
|
|
258
|
+
fallback exists. For backend runtimes such as Go, Python, Rust, PHP, Ruby, .NET, and Java, Doctor
|
|
259
|
+
uses guarded `Makefile` target repairs (`test`, `quality`, `security`) so Studio can preview and
|
|
260
|
+
apply the file edit without executing an unprovisioned toolchain immediately.
|
|
261
|
+
|
|
262
|
+
## Enterprise Surface Probes
|
|
263
|
+
|
|
264
|
+
Doctor also emits language-agnostic product-readiness probes for every detected project. These
|
|
265
|
+
probes do not replace runtime-specific checks; they add a common enterprise baseline that Workspai,
|
|
266
|
+
CI, and agents can reason about consistently across frontend and backend stacks:
|
|
267
|
+
|
|
268
|
+
| Surface | Probe examples |
|
|
269
|
+
| ----------- | ---------------------------------------------------------------------------------- |
|
|
270
|
+
| Dependency | Runtime manifest plus deterministic lock/baseline (`package-lock`, `go.sum`, etc.) |
|
|
271
|
+
| Environment | `.env.example`, config schema, or environment documentation |
|
|
272
|
+
| Container | Dockerfile / compose presence and `.dockerignore` hygiene |
|
|
273
|
+
| Deployment | Kubernetes/Helm/Kustomize surface plus readiness probes and resource controls |
|
|
274
|
+
| Security | Vulnerability evidence, `.gitignore` hygiene, audit-script guidance |
|
|
275
|
+
| Tests | Runtime/framework test scripts, configs, directories, or test files |
|
|
276
|
+
| Formatting | Node formatter command surface for CI parity |
|
|
277
|
+
|
|
278
|
+
These probes are intentionally evidence-first. Missing optional surfaces are surfaced as warnings
|
|
279
|
+
or manual repair capabilities, while deterministic repairs are promoted into `--fix` only when the
|
|
280
|
+
change is safe enough for Doctor to apply with approval and post-fix verification.
|
|
281
|
+
|
|
282
|
+
Runtime-native probes add a second layer on top of the generic surface checks:
|
|
283
|
+
|
|
284
|
+
| Runtime family | Native signals sampled by Doctor |
|
|
285
|
+
| -------------- | --------------------------------------------------------------------- |
|
|
286
|
+
| Node/Bun/Deno | test runners, ESLint/Prettier/Biome markers, audit script/tooling |
|
|
287
|
+
| Python | pytest/tox/nox, Ruff/Black/Mypy, pip-audit/Safety/Bandit markers |
|
|
288
|
+
| Go | `*_test.go`, golangci-lint/Makefile quality, govulncheck/gosec hints |
|
|
289
|
+
| Java | Maven/Gradle tests, Checkstyle/Spotless/PMD, OWASP dependency checks |
|
|
290
|
+
| .NET | test projects, `.editorconfig`, NuGet audit and vulnerable checks |
|
|
291
|
+
| Rust | test/Cargo markers, rustfmt/clippy, cargo-audit hints |
|
|
292
|
+
| PHP/Ruby/etc. | PHPUnit/Pint/PHPStan, RSpec/RuboCop/Bundler-audit and ecosystem hints |
|
|
293
|
+
|
|
294
|
+
## CI Example
|
|
295
|
+
|
|
296
|
+
```yaml
|
|
297
|
+
name: Health Check
|
|
298
|
+
on: [push]
|
|
299
|
+
|
|
300
|
+
jobs:
|
|
301
|
+
doctor:
|
|
302
|
+
runs-on: ubuntu-latest
|
|
303
|
+
steps:
|
|
304
|
+
- uses: actions/checkout@v4
|
|
305
|
+
- uses: actions/setup-node@v4
|
|
306
|
+
with:
|
|
307
|
+
node-version: '20'
|
|
308
|
+
- run: npm ci
|
|
309
|
+
- run: npx workspai doctor
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
## Exit Codes
|
|
313
|
+
|
|
314
|
+
| Code | Meaning |
|
|
315
|
+
| ---- | ------------------------------ |
|
|
316
|
+
| `0` | checks passed or warnings only |
|
|
317
|
+
| `1` | blocking issues found |
|
|
318
|
+
|
|
319
|
+
## Enterprise Probe Extensions
|
|
320
|
+
|
|
321
|
+
Doctor supports project-local custom probes via JSON contract files:
|
|
322
|
+
|
|
323
|
+
- `.workspai/doctor.probes.json`
|
|
324
|
+
- `doctor.probes.json`
|
|
325
|
+
|
|
326
|
+
Schema:
|
|
327
|
+
|
|
328
|
+
```json
|
|
329
|
+
{
|
|
330
|
+
"probes": [
|
|
331
|
+
{
|
|
332
|
+
"id": "db-schema-contract",
|
|
333
|
+
"label": "Database schema contract",
|
|
334
|
+
"severity": "error",
|
|
335
|
+
"anyOfPaths": ["prisma/schema.prisma", "migrations"],
|
|
336
|
+
"allOfPaths": ["README.md"],
|
|
337
|
+
"recommendation": "Define deterministic schema + migration baseline."
|
|
338
|
+
}
|
|
339
|
+
]
|
|
340
|
+
}
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
Each probe is evaluated during `doctor project` and emitted in:
|
|
344
|
+
|
|
345
|
+
- human output (`Probe checks`)
|
|
346
|
+
- JSON output (`project.probes`)
|
|
347
|
+
- evidence (`doctor-project-last-run.json`)
|
|
348
|
+
|
|
349
|
+
## Adapter Plugin Contract
|
|
350
|
+
|
|
351
|
+
Doctor also supports runtime adapter checks via JSON contracts:
|
|
352
|
+
|
|
353
|
+
- `.workspai/doctor.adapters.json`
|
|
354
|
+
- `doctor.adapters.json`
|
|
355
|
+
|
|
356
|
+
Schema:
|
|
357
|
+
|
|
358
|
+
```json
|
|
359
|
+
{
|
|
360
|
+
"checks": [
|
|
361
|
+
{
|
|
362
|
+
"id": "boot-probe-contract",
|
|
363
|
+
"label": "Boot probe contract",
|
|
364
|
+
"severity": "error",
|
|
365
|
+
"runtimes": ["node", "python"],
|
|
366
|
+
"anyOfPaths": ["src/main.ts", "app/main.py"],
|
|
367
|
+
"allOfPaths": ["README.md"],
|
|
368
|
+
"recommendation": "Expose deterministic bootstrap path and document runtime startup.",
|
|
369
|
+
"passReason": "Bootstrap contract markers detected.",
|
|
370
|
+
"failReason": "Bootstrap contract markers are missing."
|
|
371
|
+
}
|
|
372
|
+
]
|
|
373
|
+
}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
This enables enterprise teams to extend Doctor checks without patching core CLI logic.
|
|
377
|
+
|
|
378
|
+
## Score Explainability
|
|
379
|
+
|
|
380
|
+
Both workspace/project JSON outputs include `scoreBreakdown` with:
|
|
381
|
+
|
|
382
|
+
- `id` and `label`
|
|
383
|
+
- normalized `status` (`ok`, `warn`, `error`)
|
|
384
|
+
- `scope` (`host-system`, `project-scoped`)
|
|
385
|
+
- `policyRuleId` (deterministic rule that selected status/severity)
|
|
386
|
+
- deterministic `reason`
|
|
387
|
+
|
|
388
|
+
Workspace scope additionally appends aggregate policy rules (`workspace-aggregate`), such as:
|
|
389
|
+
|
|
390
|
+
- discovery gate
|
|
391
|
+
- system error gate
|
|
392
|
+
- blocking issue gate
|
|
393
|
+
- advisory warning gate
|
|
394
|
+
|
|
395
|
+
This allows CI and governance pipelines to audit why a score was produced.
|
|
396
|
+
|
|
397
|
+
## Contract Metadata (Enterprise)
|
|
398
|
+
|
|
399
|
+
Both JSON output and evidence files include a `contract` object:
|
|
400
|
+
|
|
401
|
+
- `version`: current doctor evidence contract version
|
|
402
|
+
- `scoringPolicyVersion`: current deterministic scoring policy version
|
|
403
|
+
- `generatedBy`: emitting surface (`workspai`)
|
|
404
|
+
- `deterministicScoreBreakdown`: explicit deterministic score policy flag
|
|
405
|
+
- `scopeModel`: how scope semantics are encoded
|
|
406
|
+
|
|
407
|
+
Use these fields for strict consumers in CI/CD and extension adapters to prevent schema drift.
|
|
408
|
+
|
|
409
|
+
## Drift Delta and Scope Provenance
|
|
410
|
+
|
|
411
|
+
Workspace/project outputs now include:
|
|
412
|
+
|
|
413
|
+
- `summary.scopeProvenance`: scoped vs aggregated vs mixed coverage summary
|
|
414
|
+
- `driftDelta`: change report compared with previous evidence (new/resolved issues, score delta, system status changes)
|
|
415
|
+
|
|
416
|
+
These fields are designed for release gates and extension timeline cards that must show progression, not only snapshots.
|
|
417
|
+
|
|
418
|
+
## Workspace scope CI exit codes
|
|
419
|
+
|
|
420
|
+
- `npx workspai doctor workspace --strict` exits `1` when health score reports errors **or** warnings.
|
|
421
|
+
- `npx workspai doctor workspace --ci` exits `1` on errors and `2` on warnings only (errors take precedence).
|
|
422
|
+
- Without `--strict` or `--ci`, doctor reports findings but exits `0` (backward compatible).
|
|
423
|
+
|
|
424
|
+
## Workspace fix behavior
|
|
425
|
+
|
|
426
|
+
- Reuses cached project scans when valid; refreshes `.workspai/reports/doctor-last-run.json`.
|
|
427
|
+
- `--fix` runs interactive remediation; `--plan` prints remediation plan only; `--apply` applies non-interactively.
|
|
428
|
+
- `--plan` cannot be combined with `--fix` or `--apply`.
|
|
429
|
+
- JSON fix/apply output includes the same `doctor-remediation-plan-v2` contract used by Studio.
|
|
430
|
+
- Advisory warnings do not automatically become shell fix commands.
|
|
431
|
+
- Go `go mod tidy` fixes are skipped when the Go toolchain is unavailable.
|
|
432
|
+
|
|
433
|
+
## Workspace JSON fields (AI/automation)
|
|
434
|
+
|
|
435
|
+
`npx workspai doctor workspace --json` includes per-project metadata: `framework`, `frameworkKey`, `importStack`, `runtimeFamily`, `projectKind`, `supportTier`, `frameworkConfidence`, `probes`, and `repairCapabilities`.
|
|
436
|
+
|
|
437
|
+
## Project scope behavior
|
|
438
|
+
|
|
439
|
+
- Resolves current or nearest parent project from nested directories.
|
|
440
|
+
- Supports Workspai, legacy RapidKit, and non-Workspai projects when project metadata is missing.
|
|
441
|
+
- Evidence: `.workspai/reports/doctor-project-last-run.json`.
|
|
442
|
+
- `--fix`, `--plan`, and `--apply` apply only project-scoped fixes.
|
|
443
|
+
|
|
444
|
+
## Project JSON fields (AI/automation)
|
|
445
|
+
|
|
446
|
+
`npx workspai doctor project --json` includes `scope`, `contract`, `project`, `summary.scopeProvenance`, `driftDelta`, and `scoreBreakdown`. The `project` payload includes probe-level `repairCapability` entries and a flattened `repairCapabilities` list when deterministic repairs are available.
|
|
447
|
+
|
|
448
|
+
## Evidence schema compatibility
|
|
449
|
+
|
|
450
|
+
- Workspace evidence: `doctor-workspace-evidence-v1`
|
|
451
|
+
- Project evidence: `doctor-project-evidence-v1`
|
|
452
|
+
- Workspace scan cache: `doctor-workspace-cache-v2`
|
|
453
|
+
|
|
454
|
+
Legacy evidence without `schemaVersion` is still accepted. Unknown versions are treated as invalid evidence. `readiness` and `workspace share` share the same validation path.
|
|
455
|
+
|
|
456
|
+
## Related Workspace Commands
|
|
457
|
+
|
|
458
|
+
```bash
|
|
459
|
+
npx workspai bootstrap [--profile <profile>]
|
|
460
|
+
npx workspai setup <python|node|go> [--warm-deps]
|
|
461
|
+
npx workspai workspace list
|
|
462
|
+
npx workspai cache <status|clear|prune|repair>
|
|
463
|
+
npx workspai mirror <status|sync|verify|rotate>
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
Use `doctor workspace` before and after major workspace operations to detect drift early.
|
|
467
|
+
Use `doctor project` before changing a single service to keep project-scope evidence deterministic.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Example: Workspai agent grounding gate for consumer workspaces
|
|
2
|
+
#
|
|
3
|
+
# Copy to your repo as `.github/workflows/workspai-agent-grounding.yml`
|
|
4
|
+
# and adjust `working-directory` to your Workspai workspace root.
|
|
5
|
+
#
|
|
6
|
+
# Requires: Node.js 20+, `workspai` available via npx in CI.
|
|
7
|
+
|
|
8
|
+
name: Workspai Agent Grounding
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
pull_request:
|
|
12
|
+
paths:
|
|
13
|
+
- '.rapidkit/**'
|
|
14
|
+
- 'AGENTS.md'
|
|
15
|
+
- 'CLAUDE.md'
|
|
16
|
+
- '.github/copilot-instructions.md'
|
|
17
|
+
- '.cursor/rules/**'
|
|
18
|
+
workflow_dispatch:
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
agent-grounding:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
defaults:
|
|
24
|
+
run:
|
|
25
|
+
working-directory: . # set to your workspace root if nested
|
|
26
|
+
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v4
|
|
29
|
+
|
|
30
|
+
- uses: actions/setup-node@v4
|
|
31
|
+
with:
|
|
32
|
+
node-version: '20'
|
|
33
|
+
|
|
34
|
+
- name: Install Workspai CLI
|
|
35
|
+
run: npm install --no-save workspai
|
|
36
|
+
|
|
37
|
+
- name: Run governance pipeline
|
|
38
|
+
run: npx workspai pipeline --json --strict
|
|
39
|
+
continue-on-error: true
|
|
40
|
+
id: pipeline
|
|
41
|
+
|
|
42
|
+
- name: Sync and verify agent grounding
|
|
43
|
+
run: |
|
|
44
|
+
npx workspai workspace agent-sync --write --refresh-context --strict --json --preset enterprise
|
|
45
|
+
node ./node_modules/workspai/scripts/check-agent-customization-drift.mjs --workspace .
|
|
46
|
+
env:
|
|
47
|
+
RAPIDKIT_NO_AGENT_SYNC: '0'
|
|
48
|
+
|
|
49
|
+
- name: Upload agent grounding artifacts
|
|
50
|
+
if: always()
|
|
51
|
+
uses: actions/upload-artifact@v4
|
|
52
|
+
with:
|
|
53
|
+
name: workspai-agent-grounding
|
|
54
|
+
path: |
|
|
55
|
+
.workspai/reports/INDEX.json
|
|
56
|
+
.workspai/reports/workspace-context-agent.json
|
|
57
|
+
.workspai/reports/agent-customization-pack.json
|
|
58
|
+
.workspai/reports/workspai-mcp-design.json
|
|
59
|
+
.workspai/reports/pipeline-last-run.json
|
|
60
|
+
AGENTS.md
|
|
61
|
+
if-no-files-found: ignore
|
|
62
|
+
|
|
63
|
+
- name: Fail if pipeline blocked
|
|
64
|
+
if: steps.pipeline.outcome == 'failure'
|
|
65
|
+
run: exit 1
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# From Code to Shared Understanding
|
|
2
|
+
|
|
3
|
+
How Workspai transforms projects and repositories into workspace intelligence for developers, CI, and AI agents.
|
|
4
|
+
|
|
5
|
+
This Mermaid diagram is kept in the internal documentation because GitHub renders it correctly. The main npm README uses a PNG version of the same diagram so it remains visible on npm package pages.
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
flowchart TB
|
|
9
|
+
|
|
10
|
+
Code["Code & Repositories"]
|
|
11
|
+
Projects["Projects"]
|
|
12
|
+
Workspace["Workspace"]
|
|
13
|
+
|
|
14
|
+
Code --> Projects
|
|
15
|
+
Projects --> Workspace
|
|
16
|
+
|
|
17
|
+
subgraph Intelligence["Workspace Intelligence"]
|
|
18
|
+
Model["Workspace Model"]
|
|
19
|
+
Context["Agent Context"]
|
|
20
|
+
Impact["Impact Analysis"]
|
|
21
|
+
Verify["Verification"]
|
|
22
|
+
Evidence["Evidence & Gates"]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Workspace --> Model
|
|
26
|
+
Workspace --> Context
|
|
27
|
+
Workspace --> Impact
|
|
28
|
+
Workspace --> Verify
|
|
29
|
+
Workspace --> Evidence
|
|
30
|
+
|
|
31
|
+
Model --> Dev["Developers"]
|
|
32
|
+
Model --> CI["CI"]
|
|
33
|
+
Model --> Agents["AI Agents"]
|
|
34
|
+
|
|
35
|
+
Context --> Agents
|
|
36
|
+
|
|
37
|
+
Impact --> Dev
|
|
38
|
+
Impact --> CI
|
|
39
|
+
|
|
40
|
+
Verify --> CI
|
|
41
|
+
Verify --> Agents
|
|
42
|
+
Evidence --> Dev
|
|
43
|
+
Evidence --> CI
|
|
44
|
+
Evidence --> Agents
|
|
45
|
+
```
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"policies": {
|
|
3
|
+
"dev": {
|
|
4
|
+
"allowedIdentities": [
|
|
5
|
+
"release@your-org.example"
|
|
6
|
+
],
|
|
7
|
+
"allowedIssuers": [
|
|
8
|
+
"https://token.actions.githubusercontent.com"
|
|
9
|
+
],
|
|
10
|
+
"allowedRekorUrls": [
|
|
11
|
+
"https://rekor.sigstore.dev"
|
|
12
|
+
],
|
|
13
|
+
"requireTransparencyLog": false
|
|
14
|
+
},
|
|
15
|
+
"stage": {
|
|
16
|
+
"allowedIdentities": [
|
|
17
|
+
"release@your-org.example"
|
|
18
|
+
],
|
|
19
|
+
"allowedIssuers": [
|
|
20
|
+
"https://token.actions.githubusercontent.com"
|
|
21
|
+
],
|
|
22
|
+
"allowedRekorUrls": [
|
|
23
|
+
"https://rekor.sigstore.dev"
|
|
24
|
+
],
|
|
25
|
+
"requireTransparencyLog": true
|
|
26
|
+
},
|
|
27
|
+
"prod": {
|
|
28
|
+
"allowedIdentities": [
|
|
29
|
+
"release@your-org.example"
|
|
30
|
+
],
|
|
31
|
+
"allowedIssuers": [
|
|
32
|
+
"https://token.actions.githubusercontent.com"
|
|
33
|
+
],
|
|
34
|
+
"allowedRekorUrls": [
|
|
35
|
+
"https://rekor.sigstore.dev"
|
|
36
|
+
],
|
|
37
|
+
"requireTransparencyLog": true
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"enabled": true,
|
|
3
|
+
"mode": "offline-first",
|
|
4
|
+
"prefetch": {
|
|
5
|
+
"retries": 2,
|
|
6
|
+
"backoffMs": 300,
|
|
7
|
+
"timeoutMs": 15000
|
|
8
|
+
},
|
|
9
|
+
"retention": {
|
|
10
|
+
"keepLast": 10
|
|
11
|
+
},
|
|
12
|
+
"security": {
|
|
13
|
+
"requireAttestation": true,
|
|
14
|
+
"requireSigstore": true,
|
|
15
|
+
"requireTransparencyLog": true,
|
|
16
|
+
"requireSignedGovernance": true,
|
|
17
|
+
"governanceBundle": {
|
|
18
|
+
"policyPath": ".workspai/governance-policy.json",
|
|
19
|
+
"signaturePath": ".workspai/governance-policy.sig",
|
|
20
|
+
"publicKeyPath": ".workspai/governance-public.pem",
|
|
21
|
+
"algorithm": "sha256"
|
|
22
|
+
},
|
|
23
|
+
"evidenceExport": {
|
|
24
|
+
"enabled": true,
|
|
25
|
+
"target": "http",
|
|
26
|
+
"endpoint": "https://siem.example.com/intake/rapidkit",
|
|
27
|
+
"authTokenEnv": "RAPIDKIT_EVIDENCE_TOKEN",
|
|
28
|
+
"timeoutMs": 10000,
|
|
29
|
+
"retries": 3,
|
|
30
|
+
"backoffMs": 500,
|
|
31
|
+
"deadLetterPath": ".workspai/reports/evidence-export-dead-letter.ndjson",
|
|
32
|
+
"signing": {
|
|
33
|
+
"enabled": true,
|
|
34
|
+
"hmacKeyEnv": "RAPIDKIT_EVIDENCE_HMAC_KEY",
|
|
35
|
+
"algorithm": "sha256",
|
|
36
|
+
"headerName": "x-rapidkit-evidence-signature"
|
|
37
|
+
},
|
|
38
|
+
"failOnError": true
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"artifacts": [
|
|
42
|
+
{
|
|
43
|
+
"id": "backend-release",
|
|
44
|
+
"source": "mirror-source/release.bin",
|
|
45
|
+
"target": "releases/release.bin",
|
|
46
|
+
"sha256": "PUT_REAL_SHA256_HERE",
|
|
47
|
+
"required": true,
|
|
48
|
+
"attestation": {
|
|
49
|
+
"signature": "BASE64_DETACHED_SIGNATURE",
|
|
50
|
+
"publicKeyPath": ".workspai/mirror-public.pem",
|
|
51
|
+
"sigstore": {
|
|
52
|
+
"signaturePath": ".workspai/release.sig",
|
|
53
|
+
"identity": "release@your-org.example",
|
|
54
|
+
"issuer": "https://token.actions.githubusercontent.com",
|
|
55
|
+
"rekorUrl": "https://rekor.sigstore.dev"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|