workspai 0.49.0 → 0.50.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/README.md +88 -28
- package/contracts/analyze-last-run.v1.json +2 -2
- package/contracts/artifact-remediation-plan.v1.json +3 -9
- package/contracts/autopilot-release.v1.json +2 -0
- package/contracts/bootstrap-compliance.v1.json +2 -1
- package/contracts/cli-log-event.v1.json +1 -1
- package/contracts/cli-runtime-command-inventory.v1.snapshot.json +80 -0
- package/contracts/compatibility-matrix.v1.json +2 -0
- package/contracts/create-planner-capabilities.v1.json +144 -32
- package/contracts/doctor-project-evidence.v1.json +191 -11
- package/contracts/doctor-project-scan.v2.json +2 -0
- package/contracts/doctor-remediation-plan.v1.json +2 -2
- package/contracts/doctor-remediation-plan.v2.json +2 -2
- package/contracts/doctor-workspace-cache.v2.json +2 -0
- package/contracts/doctor-workspace-evidence.v1.json +189 -10
- package/contracts/extension-cli-compatibility.v1.json +10 -1
- package/contracts/infra-plan.v1.json +2 -0
- package/contracts/ingestion-plan.v1.json +85 -0
- package/contracts/ingestion-result.v1.json +59 -0
- package/contracts/mirror-ops.v1.json +2 -1
- package/contracts/pipeline-last-run.v1.json +2 -2
- package/contracts/private-product-manifest.v1.json +2 -0
- package/contracts/product-factory-plan.v1.json +2 -0
- package/contracts/project-archive.v1.json +2 -0
- package/contracts/project-entry-capability.v1.json +2 -3
- package/contracts/project-test-coverage.v1.json +189 -0
- package/contracts/project-workspace-link.v1.json +66 -0
- package/contracts/project-workspace-resolution.v1.json +28 -0
- package/contracts/published-contract-catalog.v1.json +45 -0
- package/contracts/release-readiness.v1.json +2 -2
- package/contracts/runtime-command-surface.v1.json +1456 -139
- package/contracts/transparency-evidence.v1.json +2 -1
- package/contracts/workspace-archive-capabilities.v1.json +11 -5
- package/contracts/workspace-archive-manifest.v1.json +236 -0
- package/contracts/workspace-archive-operation-result.v1.json +236 -0
- package/contracts/workspace-contract.v1.json +1 -1
- package/contracts/workspace-intelligence/agent-action-outcome.v1.json +2 -2
- package/contracts/workspace-intelligence/agent-customization-pack-report.v1.json +1 -1
- package/contracts/workspace-intelligence/agent-hooks.v1.json +2 -0
- package/contracts/workspace-intelligence/agent-reports-index.v1.json +1 -1
- package/contracts/workspace-intelligence/blocker-resolution.v1.json +3 -9
- package/contracts/workspace-intelligence/doctor-fix-result.v1.json +2 -2
- package/contracts/workspace-intelligence/doctor-graph-diagnosis.v1.json +208 -0
- package/contracts/workspace-intelligence/fact-freshness.v1.json +2 -2
- package/contracts/workspace-intelligence/mcp-design.v1.json +2 -0
- package/contracts/workspace-intelligence/model-usage-event.v1.json +1 -1
- package/contracts/workspace-intelligence/project-context-agent.v1.json +360 -0
- package/contracts/workspace-intelligence/studio-blocker-handoff.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-context.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-contract-verify.v1.json +2 -2
- package/contracts/workspace-intelligence/workspace-dependency-graph.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-explain.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-graph-stream.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-graph-token-efficiency.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-impact.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-intelligence-evaluation-comparison.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-intelligence-evaluation.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-intelligence-history.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-intelligence-run.v1.json +2 -2
- package/contracts/workspace-intelligence/workspace-knowledge-graph-change-overlay.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-knowledge-graph.v1.json +48 -5
- package/contracts/workspace-intelligence/workspace-knowledge-search.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-model-diff.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-model-snapshot.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-model.v1.json +97 -5
- package/contracts/workspace-intelligence/workspace-operational-skill.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-skills-index.v1.json +1 -1
- package/contracts/workspace-intelligence/workspace-verify.v1.json +1 -1
- package/contracts/workspace-intelligence-architecture.v1.json +33 -7
- package/contracts/workspace-intelligence-chain.v1.json +1 -1
- package/contracts/workspace-list.v1.json +2 -0
- package/contracts/workspace-model-cache.v1.json +2 -0
- package/contracts/workspace-registry.v1.json +1 -1
- package/contracts/workspace-run-last.v1.json +1 -1
- package/contracts/workspace-share-bundle.v1.json +2 -1
- package/contracts/workspace-snapshot.v1.json +2 -0
- package/contracts/workspace-snapshot.v2.json +2 -0
- package/contracts/workspace-sync.v1.json +2 -0
- package/contracts/workspace-watch-event.v1.json +2 -0
- package/dist/analyze-ZFQWTCJQ.js +1 -0
- package/dist/{artifact-remediation-plan-SPOUHMK5.js → artifact-remediation-plan-ICN3KOFG.js} +1 -1
- package/dist/autopilot-release-VKXQ7BS7.js +1 -0
- package/dist/chunk-2AXEGYPL.js +1 -0
- package/dist/chunk-2D4UOYOJ.js +1 -0
- package/dist/chunk-2OIBHUVH.js +1 -0
- package/dist/chunk-3GRKUP5W.js +33 -0
- package/dist/{managed-agent-markers-AXUM75OE.js → chunk-3RBUSW7H.js} +1 -1
- package/dist/chunk-5EXZBCAZ.js +4 -0
- package/dist/chunk-6UTM5AJI.js +1 -0
- package/dist/chunk-AFIFZTOY.js +2 -0
- package/dist/{chunk-BMWFQXGW.js → chunk-AHLMIL2T.js} +1 -1
- package/dist/chunk-AL237TSJ.js +7 -0
- package/dist/chunk-AL2A7Q4X.js +86 -0
- package/dist/{chunk-VU7NZHPM.js → chunk-BHYTI3RH.js} +1 -1
- package/dist/{chunk-ESLPI3XZ.js → chunk-BQGBU2Y3.js} +1 -1
- package/dist/chunk-C35UXTDM.js +2 -0
- package/dist/chunk-C3FLCDRN.js +2 -0
- package/dist/chunk-CZC5P2MF.js +1 -0
- package/dist/{chunk-TIE2XMGH.js → chunk-DDQ3XK3H.js} +12 -12
- package/dist/{chunk-CRHYBQI3.js → chunk-DQ3PI7EP.js} +1 -1
- package/dist/chunk-EWZZUQBR.js +1 -0
- package/dist/{chunk-4KUIFXHM.js → chunk-GNQRYISX.js} +3 -3
- package/dist/chunk-I42F552T.js +2 -0
- package/dist/chunk-IDQKVJUF.js +2 -0
- package/dist/{chunk-3VFA7D5T.js → chunk-IND3TUVU.js} +1 -1
- package/dist/chunk-IPJ5URDF.js +1 -0
- package/dist/{chunk-EKZLUMCS.js → chunk-JFUD73OZ.js} +51 -51
- package/dist/chunk-KKAOTTYO.js +8 -0
- package/dist/chunk-KMLPHFLD.js +2 -0
- package/dist/{chunk-NHN4QXPP.js → chunk-KVSYBHUR.js} +1 -1
- package/dist/chunk-KXG6E5VK.js +1 -0
- package/dist/chunk-L2YK5RV2.js +1 -0
- package/dist/chunk-LAJM2SBP.js +15 -0
- package/dist/{chunk-K4X3DM7R.js → chunk-LZQUZGXB.js} +1 -1
- package/dist/chunk-MOSXTVPU.js +1 -0
- package/dist/chunk-MV7KF75Q.js +13 -0
- package/dist/chunk-MVLIONQD.js +1 -0
- package/dist/chunk-RJIYCDVC.js +1 -0
- package/dist/{chunk-BGPXQQNY.js → chunk-RTVRZFIJ.js} +1 -1
- package/dist/chunk-RVQLMTTI.js +2 -0
- package/dist/chunk-SHXJ2GDR.js +75 -0
- package/dist/{chunk-32OJDBIG.js → chunk-SS2VV3D5.js} +1 -1
- package/dist/chunk-TDTCMZK7.js +10 -0
- package/dist/chunk-UETZ7USY.js +36 -0
- package/dist/chunk-VKTUWUS6.js +1 -0
- package/dist/chunk-VRW6KXNK.js +6 -0
- package/dist/chunk-Y5YAP4F3.js +2 -0
- package/dist/chunk-YPKNQCLK.js +2 -0
- package/dist/{create-S64IWHAP.js → create-I23DC7SN.js} +1 -1
- package/dist/{demo-kit-DZ7TPG7K.js → demo-kit-KHH63TNA.js} +2 -2
- package/dist/{doctor-4NNUDNGZ.js → doctor-DOOMYLIH.js} +1 -1
- package/dist/{dotnet-webapi-clean-A6MVDYXX.js → dotnet-webapi-clean-VXEF4SHM.js} +5 -5
- package/dist/{gofiber-standard-I5YPQG5V.js → gofiber-standard-AQGSC7ON.js} +3 -3
- package/dist/{gogin-standard-VY2L4QT5.js → gogin-standard-7DU3OCBX.js} +3 -3
- package/dist/index.d.ts +38 -6
- package/dist/index.js +267 -355
- package/dist/managed-agent-markers-COE5DJ3W.js +1 -0
- package/dist/pipeline-U77HSINC.js +5 -0
- package/dist/platform-capabilities-PR6YL4KC.js +1 -0
- package/dist/project-intelligence-lens-BKKVPCLC.js +1 -0
- package/dist/project-test-coverage-4TEHZJFC.js +1 -0
- package/dist/{pythonRapidkitExec-CVCIK225.js → pythonRapidkitExec-YR7P5LWG.js} +1 -1
- package/dist/rust-axum-4HXDICIB.js +140 -0
- package/dist/{springboot-standard-55XKCBIZ.js → springboot-standard-EK6GYN5T.js} +7 -7
- package/dist/workspace-ZEYUVR26.js +1 -0
- package/dist/{workspace-agent-sync-662QHXGF.js → workspace-agent-sync-DKYJLUDP.js} +1 -1
- package/dist/workspace-archive-4JNT4S7N.js +1 -0
- package/dist/{workspace-context-23YYCUCP.js → workspace-context-IHUFMZT3.js} +1 -1
- package/dist/workspace-contract-PVLGPBBV.js +1 -0
- package/dist/workspace-explain-64HNKAHO.js +1 -0
- package/dist/workspace-explain-contract-H7O26QJU.js +1 -0
- package/dist/{workspace-feedback-SUVH2LUJ.js → workspace-feedback-RATRXFUC.js} +1 -1
- package/dist/{workspace-foundation-WPLD7OEO.js → workspace-foundation-D33LJLGT.js} +1 -1
- package/dist/workspace-graph-stream-THNG2T7R.js +1 -0
- package/dist/{workspace-history-BANOJRQ2.js → workspace-history-EWFPT74O.js} +1 -1
- package/dist/workspace-intelligence-MCNSWWDV.js +1 -0
- package/dist/{workspace-intelligence-evaluation-IPH7M3WV.js → workspace-intelligence-evaluation-7CABG5Y6.js} +1 -1
- package/dist/workspace-intelligence-runner-TG2VLHNZ.js +1 -0
- package/dist/workspace-intelligence-runtime-registry-ZZ3GRAL2.js +1 -0
- package/dist/{workspace-knowledge-graph-ARDC6HHG.js → workspace-knowledge-graph-2EYR7N56.js} +1 -1
- package/dist/{workspace-marker-SMBC3Z2Q.js → workspace-marker-7NHMDIRL.js} +1 -1
- package/dist/workspace-mcp-serve-FLAVKWYW.js +3 -0
- package/dist/workspace-model-FMFYLHE4.js +1 -0
- package/dist/workspace-model-hash-ZXYPIGCW.js +1 -0
- package/dist/workspace-onboarding-MYROZDI2.js +1 -0
- package/dist/{workspace-python-engine-state-2MLKJYQG.js → workspace-python-engine-state-J4QKW55K.js} +1 -1
- package/dist/{workspace-registry-summary-ORDK7A36.js → workspace-registry-summary-6VXIAQLX.js} +1 -1
- package/dist/workspace-run-2ZI5UMJ2.js +1 -0
- package/dist/{workspace-verify-EBVL7FWT.js → workspace-verify-FKYI65UQ.js} +1 -1
- package/dist/workspace-watch-RP5KMVP2.js +1 -0
- package/docs/GLOSSARY.md +17 -16
- package/docs/OPEN_SOURCE_USER_SCENARIOS.md +8 -3
- package/docs/README.md +6 -3
- package/docs/README_CONTENT_CONTRACT.md +18 -9
- package/docs/commands-reference.md +39 -8
- package/docs/contracts/ARTIFACT_CATALOG.md +65 -26
- package/docs/contracts/COMMAND_OWNERSHIP_MATRIX.md +2 -0
- package/docs/contracts/RUNTIME_SUPPORT_MATRIX.md +3 -3
- package/docs/contracts/rapidkit-cli-contracts.json +2 -2
- package/docs/create-planner-capabilities.md +36 -5
- package/docs/creating-workspaces-and-projects.md +59 -3
- package/docs/doctor-command.md +118 -11
- package/docs/from-code-to-shared-understanding.md +4 -1
- package/docs/graph-benchmark-methodology.md +2 -2
- package/docs/workspace-intelligence-evaluation.md +5 -0
- package/docs/workspace-knowledge-graph.md +102 -7
- package/docs/workspace-operations.md +146 -10
- package/package.json +2 -2
- package/scripts/enterprise-package-smoke.mjs +13 -1
- package/dist/analyze-EEEU3MIF.js +0 -1
- package/dist/autopilot-release-R4XRTWEM.js +0 -1
- package/dist/chunk-22DT744Z.js +0 -1
- package/dist/chunk-37CVKXBD.js +0 -1
- package/dist/chunk-3NU32T4A.js +0 -2
- package/dist/chunk-3ZK2GU7C.js +0 -1
- package/dist/chunk-4HDYADHT.js +0 -13
- package/dist/chunk-52PBRX7F.js +0 -1
- package/dist/chunk-54EP5CEV.js +0 -8
- package/dist/chunk-5XATWNME.js +0 -1
- package/dist/chunk-7YHK5NM3.js +0 -2
- package/dist/chunk-AFL3ACCR.js +0 -2
- package/dist/chunk-BFLJ2R4D.js +0 -80
- package/dist/chunk-E2KJ5QWY.js +0 -4
- package/dist/chunk-EYJ2CQSK.js +0 -1
- package/dist/chunk-FTY7GGXJ.js +0 -33
- package/dist/chunk-FXQJX34Z.js +0 -1
- package/dist/chunk-GSWPGELT.js +0 -2
- package/dist/chunk-GZTYAEWX.js +0 -1
- package/dist/chunk-HDXNIN4N.js +0 -1
- package/dist/chunk-HZDXO65G.js +0 -36
- package/dist/chunk-J5ENLXDF.js +0 -1
- package/dist/chunk-KB44JP4M.js +0 -2
- package/dist/chunk-LHOZXC2M.js +0 -2
- package/dist/chunk-MER6ZBN2.js +0 -13
- package/dist/chunk-NAJCUQ4X.js +0 -2
- package/dist/chunk-OA537ZQ5.js +0 -1
- package/dist/chunk-OW42TZFB.js +0 -1
- package/dist/chunk-P3D5YQB2.js +0 -1
- package/dist/chunk-PHXQR6PX.js +0 -2
- package/dist/chunk-PRTR2DQ2.js +0 -1
- package/dist/chunk-RHQW3DTP.js +0 -1
- package/dist/chunk-T4YR4RAI.js +0 -2
- package/dist/chunk-Y45WZR5N.js +0 -5
- package/dist/chunk-YJZOMRAS.js +0 -1
- package/dist/pipeline-LHTPE3DR.js +0 -5
- package/dist/platform-capabilities-2B4QMZXE.js +0 -1
- package/dist/workspace-PJPRBUMQ.js +0 -1
- package/dist/workspace-archive-P76EDIUG.js +0 -10
- package/dist/workspace-contract-TU2I7GC2.js +0 -1
- package/dist/workspace-dependency-graph-BP4EXYQ5.js +0 -1
- package/dist/workspace-explain-MWUEN643.js +0 -1
- package/dist/workspace-explain-contract-ZPI3JXJU.js +0 -1
- package/dist/workspace-graph-stream-KAGGQPJT.js +0 -1
- package/dist/workspace-intelligence-MFJE7W67.js +0 -1
- package/dist/workspace-intelligence-runner-OTYTHV6B.js +0 -1
- package/dist/workspace-mcp-serve-EZR6O76D.js +0 -3
- package/dist/workspace-model-7OU2M3LE.js +0 -1
- package/dist/workspace-model-hash-MHXK5MEI.js +0 -1
- package/dist/workspace-run-QND2SIYA.js +0 -1
- package/dist/workspace-watch-7HWGA5TF.js +0 -1
package/docs/doctor-command.md
CHANGED
|
@@ -34,7 +34,8 @@ Checks:
|
|
|
34
34
|
- all system checks
|
|
35
35
|
- workspace marker resolution
|
|
36
36
|
- project discovery and per-project health
|
|
37
|
-
- dependency
|
|
37
|
+
- dependency, environment, test, quality, security, deployment, and coverage readiness per project
|
|
38
|
+
- runtime-native evidence without treating missing scanners as a clean result
|
|
38
39
|
|
|
39
40
|
> Compatibility note: `npx workspai doctor --workspace` still works, but `doctor workspace` is the canonical form.
|
|
40
41
|
|
|
@@ -53,6 +54,8 @@ Checks:
|
|
|
53
54
|
- dependency/env readiness for the selected project
|
|
54
55
|
- enterprise probes (config contract, migration surface, runtime health surface)
|
|
55
56
|
- score explainability breakdown for audit trails
|
|
57
|
+
- normalized dependency-audit and test-coverage evidence for CI, IDEs, and agents
|
|
58
|
+
- graph-aware root, impact-candidate, proof-path, and verification-target context
|
|
56
59
|
|
|
57
60
|
> Compatibility note: `npx workspai doctor --project` also works.
|
|
58
61
|
|
|
@@ -84,6 +87,108 @@ npx workspai doctor project --json
|
|
|
84
87
|
npx workspai doctor workspace --profile enterprise-strict --json
|
|
85
88
|
```
|
|
86
89
|
|
|
90
|
+
## One verdict, backed by every probe
|
|
91
|
+
|
|
92
|
+
Doctor calculates one verdict from the host and every project probe:
|
|
93
|
+
|
|
94
|
+
- **Passed** means no blocking probe failed.
|
|
95
|
+
- **Needs attention** means the current profile found advisory work.
|
|
96
|
+
- **Blocked** means at least one error-level probe failed.
|
|
97
|
+
|
|
98
|
+
The score and verdict use the same counts. A failed security, coverage, or
|
|
99
|
+
runtime probe cannot be hidden behind a high percentage or a healthy host. New
|
|
100
|
+
evidence includes the host/project score components and per-project probe
|
|
101
|
+
summary; semantic validation rejects contradictory artifacts before they are
|
|
102
|
+
written. Older v1 evidence remains readable so existing workspaces and IDEs do
|
|
103
|
+
not break during migration.
|
|
104
|
+
|
|
105
|
+
## Graph-aware diagnosis
|
|
106
|
+
|
|
107
|
+
When the project belongs to a workspace with a current model and Knowledge
|
|
108
|
+
Graph, Doctor enriches every warning or failure with evidence-backed structural
|
|
109
|
+
context:
|
|
110
|
+
|
|
111
|
+
- the package, file, service, deployment, or other graph entity nearest to the
|
|
112
|
+
finding;
|
|
113
|
+
- reachable APIs, services, infrastructure, owners, and other affected
|
|
114
|
+
candidates;
|
|
115
|
+
- connected test suites or CI pipelines that can verify the repair;
|
|
116
|
+
- the exact proof path and source artifacts supporting each connection;
|
|
117
|
+
- explicit unknowns when the graph cannot prove an effect or verification path.
|
|
118
|
+
|
|
119
|
+
Runtime-native dependency audits preserve the affected package names,
|
|
120
|
+
versions, advisory identifiers, and available severity/directness metadata.
|
|
121
|
+
Doctor uses those subjects to select the corresponding package or module
|
|
122
|
+
entity in the current project's graph neighborhood. If an audit names a
|
|
123
|
+
dependency that the graph cannot resolve, the diagnosis reports it under
|
|
124
|
+
`unresolvedSubjects`; it does not silently attach the finding to an unrelated
|
|
125
|
+
package.
|
|
126
|
+
|
|
127
|
+
This data is available under `project.graphDiagnosis` in project and workspace
|
|
128
|
+
Doctor JSON evidence. Doctor rejects stale, invalid, or model-unbound graph
|
|
129
|
+
evidence instead of presenting it as current.
|
|
130
|
+
|
|
131
|
+
Graph reachability is deliberately described as a **structural impact
|
|
132
|
+
candidate**, not runtime causality. It narrows investigation and gives Studio a
|
|
133
|
+
proof-carrying starting point; final verification still comes from the
|
|
134
|
+
runtime-owned checks.
|
|
135
|
+
|
|
136
|
+
## Multi-runtime dependency evidence
|
|
137
|
+
|
|
138
|
+
Doctor selects the audit adapter from the detected runtime and lockfile:
|
|
139
|
+
|
|
140
|
+
| Ecosystem | Runtime-native evidence |
|
|
141
|
+
| ------------------------------------ | ------------------------------------------------------------------ |
|
|
142
|
+
| npm | npm, pnpm, Yarn Classic/Berry, Bun, or Deno audit |
|
|
143
|
+
| Python | `pip-audit` through the project virtual environment when available |
|
|
144
|
+
| Go | `govulncheck` |
|
|
145
|
+
| Rust | `cargo audit` |
|
|
146
|
+
| PHP | `composer audit` |
|
|
147
|
+
| Ruby | `bundler-audit` |
|
|
148
|
+
| .NET | vulnerable transitive package report |
|
|
149
|
+
| Elixir | `mix hex.audit` |
|
|
150
|
+
| Java, Scala, Kotlin, Clojure, C, C++ | project/organization-owned scanner contract |
|
|
151
|
+
|
|
152
|
+
Every result records the exact executable, arguments, ecosystem, severity
|
|
153
|
+
counts, and limitations. A missing tool, timeout, registry failure,
|
|
154
|
+
unparseable response, or unsupported zero-configuration workflow is explicit
|
|
155
|
+
evidence—not a zero-vulnerability result. Compatible automatic fixes never use
|
|
156
|
+
force; unresolved findings move to a targeted upgrade and verification plan.
|
|
157
|
+
|
|
158
|
+
## Coverage goals that Doctor can verify
|
|
159
|
+
|
|
160
|
+
Generate a normalized baseline from the current project:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
npx workspai project coverage --run --target 80 --strict --json
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Workspai detects the runtime-owned runner, reads machine-readable coverage, and
|
|
167
|
+
normalizes lines, branches, functions, statements, low-coverage files, source
|
|
168
|
+
hash, and the requested target. It understands Istanbul/LCOV, coverage.py,
|
|
169
|
+
Go coverprofiles, JaCoCo/Cobertura/Clover, scoverage, SimpleCov, and LLVM
|
|
170
|
+
coverage. Runtime plans cover Node/Bun/Deno, Python, Go, JVM, .NET, Rust, PHP,
|
|
171
|
+
Ruby, Elixir, Clojure, Scala, Kotlin, C, and C++; if a project-owned runner does
|
|
172
|
+
not emit one of those portable formats, the result is explicitly `unavailable`
|
|
173
|
+
with setup guidance rather than an invented percentage.
|
|
174
|
+
|
|
175
|
+
Doctor consumes the resulting
|
|
176
|
+
`.workspai/reports/project-test-coverage-last-run.json`. If it is missing,
|
|
177
|
+
below target, unavailable, or failed, the probe tells Studio what evidence to
|
|
178
|
+
generate or which low-coverage source paths need source-aware tests. The repair
|
|
179
|
+
contract explicitly forbids lowering the target, excluding difficult files,
|
|
180
|
+
skipping tests, or removing assertions to manufacture a pass.
|
|
181
|
+
|
|
182
|
+
When the project belongs to a workspace, Workspai also writes:
|
|
183
|
+
|
|
184
|
+
```text
|
|
185
|
+
<workspace>/.workspai/reports/project-test-coverage-last-run.json
|
|
186
|
+
<workspace>/.workspai/reports/projects/<slug>--<hash>/project-test-coverage-last-run.json
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
The same namespaced layout is used for project Doctor evidence, preventing
|
|
190
|
+
same-name projects from overwriting each other.
|
|
191
|
+
|
|
87
192
|
## Enterprise Fix Pipeline
|
|
88
193
|
|
|
89
194
|
Doctor supports policy profiles so the same evidence can be interpreted correctly in local,
|
|
@@ -283,15 +388,17 @@ change is safe enough for Doctor to apply with approval and post-fix verificatio
|
|
|
283
388
|
|
|
284
389
|
Runtime-native probes add a second layer on top of the generic surface checks:
|
|
285
390
|
|
|
286
|
-
| Runtime family
|
|
287
|
-
|
|
|
288
|
-
| Node/Bun/Deno
|
|
289
|
-
| Python
|
|
290
|
-
| Go
|
|
291
|
-
| Java
|
|
292
|
-
| .NET
|
|
293
|
-
| Rust
|
|
294
|
-
| PHP/Ruby
|
|
391
|
+
| Runtime family | Native signals sampled by Doctor |
|
|
392
|
+
| ----------------- | -------------------------------------------------------------------------------- |
|
|
393
|
+
| Node/Bun/Deno | Jest/Vitest/native tests, ESLint/Prettier/Biome, package-manager audit |
|
|
394
|
+
| Python | pytest/tox/nox, Ruff/Black/Mypy, pip-audit/Safety/Bandit |
|
|
395
|
+
| Go | `*_test.go`, golangci-lint, govulncheck/gosec |
|
|
396
|
+
| Java/Kotlin/Scala | Maven/Gradle/sbt tests, Checkstyle/Spotless/Detekt/Scalafmt, declared JVM audit |
|
|
397
|
+
| .NET | test projects, `.editorconfig`, NuGet audit |
|
|
398
|
+
| Rust | Cargo tests, rustfmt/clippy, cargo-audit |
|
|
399
|
+
| PHP/Ruby | PHPUnit/Pest/PHPStan and RSpec/Minitest/RuboCop/Bundler-audit |
|
|
400
|
+
| Elixir/Clojure | ExUnit/Credo/Hex and clojure.test/Kaocha/clj-kondo |
|
|
401
|
+
| C/C++ | CTest/native test markers, clang tooling, declared SBOM or vulnerability scanner |
|
|
295
402
|
|
|
296
403
|
## CI Example
|
|
297
404
|
|
|
@@ -460,7 +567,7 @@ Legacy evidence without `schemaVersion` is still accepted. Unknown versions are
|
|
|
460
567
|
|
|
461
568
|
```bash
|
|
462
569
|
npx workspai bootstrap [--profile <profile>]
|
|
463
|
-
npx workspai setup <python|node|go|java|dotnet> [--warm-deps]
|
|
570
|
+
npx workspai setup <python|node|go|java|dotnet|rust|php> [--warm-deps]
|
|
464
571
|
npx workspai workspace list
|
|
465
572
|
npx workspai cache <status|clear|prune|repair>
|
|
466
573
|
npx workspai mirror <status|sync|verify|rotate>
|
|
@@ -32,7 +32,10 @@ flowchart TB
|
|
|
32
32
|
1. **Connect your software.** Create something new, adopt an existing project
|
|
33
33
|
without moving it, or import a repository.
|
|
34
34
|
2. **Understand the workspace.** Workspai builds one model of the projects and
|
|
35
|
-
how they relate.
|
|
35
|
+
how they relate. That Workspace Model is canonical. Workspai then derives a
|
|
36
|
+
proof-backed Knowledge Graph from the model-owned project inventory so tools
|
|
37
|
+
can query files, APIs, packages, infrastructure, tests, ownership, and
|
|
38
|
+
decisions without creating a second source of truth.
|
|
36
39
|
3. **Understand change and verify it.** Workspai shows affected areas and checks
|
|
37
40
|
the evidence needed for a safe decision.
|
|
38
41
|
4. **Share the result.** Developers, CI, IDEs, AI agents, and MCP clients consume
|
|
@@ -27,8 +27,8 @@ The result conforms to
|
|
|
27
27
|
It records:
|
|
28
28
|
|
|
29
29
|
- the query and result limit;
|
|
30
|
-
- the graph schema, entity/relation/proof counts, source artifact, and
|
|
31
|
-
model SHA-256;
|
|
30
|
+
- the graph schema, entity/relation/proof counts, source artifact, and stable
|
|
31
|
+
structural model SHA-256;
|
|
32
32
|
- the number and size of readable, deduplicated proof-source artifacts;
|
|
33
33
|
- the bounded retrieval size and match count;
|
|
34
34
|
- unreadable artifacts rather than silently excluding them;
|
|
@@ -94,6 +94,7 @@ Event bodies conform to
|
|
|
94
94
|
```bash
|
|
95
95
|
npx workspai workspace eval status --json
|
|
96
96
|
npx workspai workspace eval report --json
|
|
97
|
+
npx workspai workspace eval report --output ./evidence/my-evaluation.json --json
|
|
97
98
|
```
|
|
98
99
|
|
|
99
100
|
Finalization writes:
|
|
@@ -102,6 +103,10 @@ Finalization writes:
|
|
|
102
103
|
.workspai/reports/workspace-intelligence-evaluation-last-run.json
|
|
103
104
|
```
|
|
104
105
|
|
|
106
|
+
`--output` keeps that governed last-run artifact and also copies the finalized
|
|
107
|
+
report to the requested workspace-relative or absolute path. JSON output reports
|
|
108
|
+
the path that was actually requested, so automation does not need to infer it.
|
|
109
|
+
|
|
105
110
|
Both live and final reports conform to
|
|
106
111
|
[`workspace-intelligence-evaluation.v1.json`](../contracts/workspace-intelligence/workspace-intelligence-evaluation.v1.json).
|
|
107
112
|
|
|
@@ -138,13 +138,79 @@ CLI queries · Context · MCP · Agents · IDEs · CI
|
|
|
138
138
|
```
|
|
139
139
|
|
|
140
140
|
The graph does not rewrite or replace the canonical Workspace Model. It is a
|
|
141
|
-
derived representation bound to an exact model revision by SHA-256
|
|
142
|
-
|
|
141
|
+
derived representation bound to an exact model revision by the SHA-256 hash of
|
|
142
|
+
the model's stable structural projection. Volatile timestamps, run correlation,
|
|
143
|
+
live evidence references, and freshness fields are intentionally excluded from
|
|
144
|
+
that structural identity. Context, Doctor, MCP, and graph-stream consumers
|
|
145
|
+
reject a graph whose source binding no longer matches the current model.
|
|
143
146
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
The
|
|
147
|
-
|
|
147
|
+
### Model and graph relationship
|
|
148
|
+
|
|
149
|
+
The current integrated CLI follows this order:
|
|
150
|
+
|
|
151
|
+
```text
|
|
152
|
+
workspace files + registered projects + contracts + selected evidence
|
|
153
|
+
|
|
|
154
|
+
v
|
|
155
|
+
canonical Workspace Model
|
|
156
|
+
| |
|
|
157
|
+
| +-- compact project dependency topology
|
|
158
|
+
|
|
|
159
|
+
v
|
|
160
|
+
provider scan + facts/proofs + identity reconciliation
|
|
161
|
+
|
|
|
162
|
+
v
|
|
163
|
+
Workspace Knowledge Graph
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
The model owns the canonical workspace boundary: project identity, runtime and
|
|
167
|
+
framework observations, policies, contract state, evidence references, and the
|
|
168
|
+
compact project topology used by the intelligence loop. The Knowledge Graph
|
|
169
|
+
receives that project inventory and topology, then enriches it from bounded
|
|
170
|
+
source providers. It can add files, symbols, packages, APIs, infrastructure,
|
|
171
|
+
tests, owners, decisions, and proof-carrying relations, but it cannot mutate the
|
|
172
|
+
model that authorized the build.
|
|
173
|
+
|
|
174
|
+
The canonical project inventory reconciles filesystem discovery, imported and
|
|
175
|
+
adopted registries, and `workspace.contract.json` declarations. A project that
|
|
176
|
+
is still declared by the contract but missing on disk is preserved in the
|
|
177
|
+
model and reported as `project.path.missing`; it is never silently removed from
|
|
178
|
+
the graph boundary. A persisted Knowledge Graph is accepted only when its
|
|
179
|
+
workspace identity and project topology also match that model.
|
|
180
|
+
|
|
181
|
+
The two artifacts are published under one workspace lock using a
|
|
182
|
+
rollback-capable artifact transaction. Each file replacement is atomic; if any
|
|
183
|
+
write fails, Workspai restores both preimages. `graph.source.kind` is fixed to
|
|
184
|
+
`workspace-model`, `graph.source.artifact` is fixed to
|
|
185
|
+
`.workspai/reports/workspace-model.json`, and `graph.source.hash` contains the
|
|
186
|
+
stable structural hash of the persisted model. A current-state consumer must
|
|
187
|
+
reject the graph when that binding no longer matches `workspace-model.json`.
|
|
188
|
+
|
|
189
|
+
This is therefore not a circular source-of-truth relationship. In the current
|
|
190
|
+
CLI, the direction is **Model → Knowledge Graph**. Providers may use the same
|
|
191
|
+
workspace sources that informed the model, but their output enriches the
|
|
192
|
+
derived graph; it does not flow back into the model during that run. A future
|
|
193
|
+
fact-first package may make normalized facts the shared input to both
|
|
194
|
+
representations, but that is not the shipped contract today.
|
|
195
|
+
|
|
196
|
+
The model also contains a smaller project dependency graph under the canonical
|
|
197
|
+
`projectTopology` field. That projection is used for impact, blast radius,
|
|
198
|
+
verify, explain, watch, and affected fleet runs. The richer Knowledge Graph is
|
|
199
|
+
used for proof-backed retrieval and cross-domain understanding. The deprecated
|
|
200
|
+
`graph` field is emitted only as a v1 compatibility alias and must remain
|
|
201
|
+
structurally identical to `projectTopology`; new consumers must not depend on
|
|
202
|
+
the alias.
|
|
203
|
+
|
|
204
|
+
These rules are machine-owned, not Markdown conventions:
|
|
205
|
+
|
|
206
|
+
- `workspace-intelligence-architecture.v1.json` declares the one-way direction,
|
|
207
|
+
artifact authority, mutation rule, publication rule, and stale-consumer rule;
|
|
208
|
+
- `workspace-knowledge-graph.v1.json` permits only the canonical model source
|
|
209
|
+
kind and artifact path;
|
|
210
|
+
- `workspace-intelligence-chain.v1.json` requires the Model stage to produce
|
|
211
|
+
both artifacts;
|
|
212
|
+
- runtime source-binding guards enforce the structural hash before persisted
|
|
213
|
+
graph consumption.
|
|
148
214
|
|
|
149
215
|
## Sources and providers
|
|
150
216
|
|
|
@@ -161,9 +227,32 @@ deduplication, typed relations, reconciliation, quality metrics, diagnostics,
|
|
|
161
227
|
and deterministic ordering. Regex-backed source observations are explicitly
|
|
162
228
|
marked as observed/medium-confidence; authored contracts remain authoritative.
|
|
163
229
|
|
|
230
|
+
Local source imports are resolved to indexed file entities when the target can
|
|
231
|
+
be proven. External packages remain module entities, while unresolved relative
|
|
232
|
+
imports are labelled `unresolved-local` and produce a diagnostic. This prevents
|
|
233
|
+
an unknown local path from being silently presented as a third-party
|
|
234
|
+
dependency.
|
|
235
|
+
|
|
236
|
+
### Binding quality, not just graph size
|
|
237
|
+
|
|
238
|
+
Entity and relation counts do not tell you whether a graph can answer useful
|
|
239
|
+
engineering questions. `graph.quality.bindingCoverage` therefore reports four
|
|
240
|
+
independent dimensions:
|
|
241
|
+
|
|
242
|
+
- authored or observed endpoints connected to implementation evidence;
|
|
243
|
+
- registered projects connected to test evidence;
|
|
244
|
+
- registered projects connected to deployment evidence;
|
|
245
|
+
- registered projects connected to ownership evidence.
|
|
246
|
+
|
|
247
|
+
Each dimension reports eligible, bound, and unknown counts plus a ratio. A
|
|
248
|
+
`null` ratio means the dimension was not applicable; zero means applicable
|
|
249
|
+
surfaces were found but none were bound. Consumers must not turn either state
|
|
250
|
+
into a false “complete” claim.
|
|
251
|
+
|
|
164
252
|
## Outputs and consumers
|
|
165
253
|
|
|
166
|
-
`workspace model --write` publishes these two artifacts
|
|
254
|
+
`workspace model --write` publishes these two artifacts as one locked,
|
|
255
|
+
rollback-capable artifact set:
|
|
167
256
|
|
|
168
257
|
```text
|
|
169
258
|
.workspai/reports/workspace-model.json
|
|
@@ -173,6 +262,12 @@ marked as observed/medium-confidence; authored contracts remain authoritative.
|
|
|
173
262
|
The Knowledge Graph is consumed by:
|
|
174
263
|
|
|
175
264
|
- `workspace graph search|entities|evidence|path|overlay`;
|
|
265
|
+
- `doctor workspace|project`, which maps unresolved probes to structural root
|
|
266
|
+
candidates, reachable affected surfaces, proof paths, and graph-connected
|
|
267
|
+
test/pipeline verification targets. When a runtime audit names affected
|
|
268
|
+
dependencies, Doctor binds those subjects to exact package/module entities
|
|
269
|
+
instead of selecting an arbitrary project package. Names that cannot be
|
|
270
|
+
resolved remain explicit unknowns;
|
|
176
271
|
- `workspace context`, which validates the model hash and publishes graph
|
|
177
272
|
availability and query commands;
|
|
178
273
|
- `workspace agent-sync`, which places it in the evidence index and generated
|
|
@@ -6,12 +6,23 @@ operation changes before you run it.
|
|
|
6
6
|
|
|
7
7
|
Command syntax: [commands-reference.md](./commands-reference.md).
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Choose the operation by intent
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
Workspai keeps project onboarding and workspace portability separate. Choose
|
|
12
|
+
the operation by what should happen to the source:
|
|
13
|
+
|
|
14
|
+
| Resource | Source | Intent | Command | Source moved or copied? | Registered? |
|
|
15
|
+
| --------- | ---------------- | ---------------------------- | ---------------------------- | ----------------------- | ----------- |
|
|
16
|
+
| Project | Local folder | Keep the project where it is | `workspai adopt` | No | Yes |
|
|
17
|
+
| Project | Local folder | Copy it into a workspace | `workspai import` | Copied | Yes |
|
|
18
|
+
| Project | Git URL | Clone it into a workspace | `workspai import --git` | Cloned | Yes |
|
|
19
|
+
| Workspace | Existing folder | Use it where it is | `workspai workspace connect` | No | Yes |
|
|
20
|
+
| Workspace | Portable archive | Restore and start using it | `workspai workspace import` | Materialized | Yes |
|
|
21
|
+
| Workspace | Portable archive | Extract files only | `workspai workspace hydrate` | Materialized | No |
|
|
22
|
+
|
|
23
|
+
All registered routes reconcile the canonical registry, workspace contract,
|
|
24
|
+
and project entry surfaces. `hydrate` deliberately stops after safe extraction
|
|
25
|
+
so automation can inspect the materialized files before registration.
|
|
15
26
|
|
|
16
27
|
RapidKit Core module commands remain available only when existing project
|
|
17
28
|
metadata identifies a kit that supports modules.
|
|
@@ -22,6 +33,8 @@ npx workspai import https://github.com/acme/orders-api.git --git
|
|
|
22
33
|
npx workspai import ../orders-api --workspace ./my-workspace --name orders-api --json
|
|
23
34
|
npx workspai adopt ../marketing-web --workspace ./my-workspace
|
|
24
35
|
npx workspai adopt --json
|
|
36
|
+
npx workspai workspace connect ../existing-workspace --json
|
|
37
|
+
npx workspai workspace import team.workspai-archive.zip --output ./team --json
|
|
25
38
|
```
|
|
26
39
|
|
|
27
40
|
### Import behavior
|
|
@@ -29,8 +42,9 @@ npx workspai adopt --json
|
|
|
29
42
|
- Local folders are copied; git sources are cloned with shallow history.
|
|
30
43
|
- Outside any workspace (no `--workspace`), Workspai creates or reuses the managed `workspai` workspace. New defaults use `~/.workspai/workspaces/workspai`; valid legacy candidates under `~/rapidkit/workspaces/workspai` and `~/Workspai/rapidkits/workspai` can still be reused.
|
|
31
44
|
- Existing workspaces under legacy managed roots remain registered after upgrade.
|
|
32
|
-
-
|
|
33
|
-
|
|
45
|
+
- Workspai writes a validated machine-local workspace binding into the
|
|
46
|
+
imported project. Workspace commands can then be launched from that project
|
|
47
|
+
without changing directories.
|
|
34
48
|
- Failed workspace sync rolls back imported files and registry entries.
|
|
35
49
|
|
|
36
50
|
### Adopt behavior
|
|
@@ -39,14 +53,107 @@ npx workspai adopt --json
|
|
|
39
53
|
- Default workspace resolution matches import, including canonical creation and valid legacy managed-default reuse.
|
|
40
54
|
- Writes `.workspai/project.json`, `.workspai/adopt.json`, and `.workspai/adopt-readiness.json`.
|
|
41
55
|
- Registry and contract sync include adopted projects for `workspace model`, `workspace context`, Dashboard, and agents.
|
|
56
|
+
- Managed grounding writes a portable project lens, project grounding, and a
|
|
57
|
+
bounded managed section in `AGENTS.md`. User-authored `AGENTS.md` content is
|
|
58
|
+
preserved.
|
|
42
59
|
- `--dry-run --json` previews detection without writing metadata.
|
|
43
60
|
|
|
61
|
+
### Existing workspace behavior
|
|
62
|
+
|
|
63
|
+
- `workspace connect` registers a valid local Workspai workspace in place. It
|
|
64
|
+
does not copy its projects.
|
|
65
|
+
- `workspace import` verifies an archive, materializes it atomically, removes
|
|
66
|
+
machine-local bindings from the source machine, registers the workspace, and
|
|
67
|
+
reconciles its portable contract snapshot and project entry links.
|
|
68
|
+
- Archive import never silently overwrites an explicit `--output` destination.
|
|
69
|
+
- External adopted projects are not copied into an archive. The manifest keeps
|
|
70
|
+
only their portable identity and reports that they must be relinked.
|
|
71
|
+
- `workspace hydrate` is the lower-level extraction primitive. Use it when a
|
|
72
|
+
deployment or migration process—not Workspai—owns registration.
|
|
73
|
+
|
|
74
|
+
Every registered onboarding route emits the same versioned ingestion plan in
|
|
75
|
+
JSON. The plan states the resource, source kind, materialization mode,
|
|
76
|
+
ownership, registration intent, destination, and grounding policy. Consumers
|
|
77
|
+
should use that contract instead of inferring behavior from command names.
|
|
78
|
+
`workspace hydrate` remains an unregistered archive primitive and emits the
|
|
79
|
+
versioned archive operation result instead.
|
|
80
|
+
|
|
81
|
+
### Automatic consumer sync
|
|
82
|
+
|
|
83
|
+
Workspace creation publishes the initial contract, canonical model, Knowledge
|
|
84
|
+
Graph, structural baseline, context, report index, `AGENTS.md`, operational
|
|
85
|
+
skills, and supported IDE/agent surfaces—even before the first project exists.
|
|
86
|
+
Successful project creation, adoption, import, workspace connection, and
|
|
87
|
+
workspace import refresh those same projections in the background. The
|
|
88
|
+
structural baseline is created once and preserved; current model, graph, diff,
|
|
89
|
+
impact, context, and project grounding move forward with workspace membership.
|
|
90
|
+
|
|
91
|
+
Doctor, Analyze, Readiness, and Verify remain explicit checks because they may
|
|
92
|
+
run project tools or enforce release policy. Use `workspace intelligence run`
|
|
93
|
+
when you want that governed decision chain, rather than only lifecycle sync.
|
|
94
|
+
|
|
95
|
+
### Work from the project directory
|
|
96
|
+
|
|
97
|
+
After `adopt`, `import`, or project creation, the project is a first-class
|
|
98
|
+
entry point into its canonical workspace:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
cd /absolute/path/to/project
|
|
102
|
+
npx workspai project workspace status --json
|
|
103
|
+
npx workspai doctor project --json
|
|
104
|
+
npx workspai workspace graph search "authentication endpoint" --limit 12 --json
|
|
105
|
+
npx workspai workspace intelligence run --for-agent generic --strict --json
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Workspace resolution has one stable precedence:
|
|
109
|
+
`--workspace` → parent workspace → validated local link → reverse registry.
|
|
110
|
+
Workspai returns a specific error for an invalid explicit workspace, malformed
|
|
111
|
+
or stale link, ambiguous registration, or an unlinked project. It never picks
|
|
112
|
+
one workspace silently when ownership is ambiguous.
|
|
113
|
+
|
|
114
|
+
The project receives four distinct surfaces:
|
|
115
|
+
|
|
116
|
+
| File | Purpose | Portable |
|
|
117
|
+
| ---------------------------------------------- | ----------------------------------------------------------------------------- | --------------------- |
|
|
118
|
+
| `.workspai/workspace-link.local.json` | Machine-local canonical workspace binding | No; always gitignored |
|
|
119
|
+
| `.workspai/reports/project-context-agent.json` | Bounded project view of model, graph, proofs, diagnostics, and safe commands | Yes |
|
|
120
|
+
| `.workspai/PROJECT-GROUNDING.md` | Human- and agent-readable project entry guide | Yes |
|
|
121
|
+
| `AGENTS.md` managed section | Tells compatible agents where to start and when to cross the project boundary | Yes |
|
|
122
|
+
|
|
123
|
+
The bounded context includes project identity and commands, dependencies and
|
|
124
|
+
dependents, related API/deployment/test surfaces, current project findings,
|
|
125
|
+
portable proof locators, and model/graph freshness. It deliberately references
|
|
126
|
+
rather than duplicates workspace-wide evidence.
|
|
127
|
+
|
|
128
|
+
Use `--project-grounding managed` (default) to publish all portable surfaces,
|
|
129
|
+
`local` to keep the project lens and grounding gitignored without managing
|
|
130
|
+
`AGENTS.md`, or `off` to disable project grounding for that operation. The
|
|
131
|
+
machine-local link remains enabled in every mode because it owns command
|
|
132
|
+
resolution; it is private to the current machine and never belongs in a commit.
|
|
133
|
+
Mode reconciliation is convergent: changing modes removes stale managed
|
|
134
|
+
sections, portable files, or ignore rules that the new mode no longer owns,
|
|
135
|
+
while preserving user-authored `AGENTS.md` and `.gitignore` content.
|
|
136
|
+
|
|
137
|
+
If a workspace moved, or a cloned project has no valid local link, reconcile
|
|
138
|
+
it explicitly:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
npx workspai project workspace relink --workspace /absolute/path/to/my-workspace --json
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Relink succeeds only when the project is already a member of the canonical
|
|
145
|
+
workspace contract.
|
|
146
|
+
|
|
44
147
|
### JSON output (`--json`)
|
|
45
148
|
|
|
46
|
-
- Import returns `workspacePath`, `workspaceResolution`,
|
|
149
|
+
- Import returns `workspacePath`, `workspaceResolution`,
|
|
150
|
+
`defaultWorkspaceCreated`, `projectWorkspaceCommand`,
|
|
151
|
+
`commandsResolveWorkspaceFromProject`, and `importedProject`. The imported
|
|
152
|
+
project includes its `source`.
|
|
47
153
|
- Adopt returns `workspacePath`, `workspaceResolution`,
|
|
48
154
|
`defaultWorkspaceCreated`, `wouldCreateDefaultWorkspace`,
|
|
49
|
-
`
|
|
155
|
+
`projectWorkspaceCommand`, `commandsResolveWorkspaceFromProject`, `dryRun`,
|
|
156
|
+
and `adoptedProject`.
|
|
50
157
|
- Project results include detected `name`, `path`, `stack`, `runtime`, `framework`, `supportTier`, `moduleSupport`, and `confidence` where available.
|
|
51
158
|
|
|
52
159
|
Imported projects receive `.workspai/import-readiness.json`. Adopted projects add frontend-aware detection for Next.js, React, Vite, Vue, Angular, SvelteKit, Nuxt, Astro, Remix, and Solid.
|
|
@@ -137,6 +244,20 @@ queryable through the read-mostly MCP server. This keeps CLI, CI, IDE and agent
|
|
|
137
244
|
consumers on one contract revision without injecting the full graph into every
|
|
138
245
|
agent prompt.
|
|
139
246
|
|
|
247
|
+
The relationship is one-way and contract-enforced: the Workspace Model owns the
|
|
248
|
+
canonical project boundary and compact dependency topology in
|
|
249
|
+
`workspace-model.json.projectTopology`; providers enrich
|
|
250
|
+
that inventory into the Knowledge Graph. The graph source kind and artifact
|
|
251
|
+
path are fixed to the model, its source hash identifies the stable structural
|
|
252
|
+
model projection, and persisted current-state consumers reject a mismatched
|
|
253
|
+
graph. `workspace contract graph` follows the same model-first build path; it
|
|
254
|
+
does not create a competing contract- or source-owned Knowledge Graph.
|
|
255
|
+
|
|
256
|
+
The deprecated `workspace-model.json.graph` field is a temporary v1
|
|
257
|
+
compatibility alias. It is emitted with the same value as `projectTopology`,
|
|
258
|
+
excluded as a duplicate from the canonical hash, and rejected when the two
|
|
259
|
+
fields diverge. New integrations must consume `projectTopology`.
|
|
260
|
+
|
|
140
261
|
The overlay follows
|
|
141
262
|
`workspace-knowledge-graph-change-overlay.v1`: graph revisions are identified
|
|
142
263
|
by content-derived fingerprints (timestamps do not create false changes), and
|
|
@@ -168,9 +289,21 @@ npx workspai workspace archive inspect team-workspace.workspai-archive.zip
|
|
|
168
289
|
npx workspai workspace archive verify team-workspace.workspai-archive.zip --strict
|
|
169
290
|
npx workspai workspace archive doctor team-workspace.workspai-archive.zip
|
|
170
291
|
npx workspai workspace hydrate team-workspace.workspai-archive.zip --output ./team-workspace
|
|
292
|
+
npx workspai workspace import team-workspace.workspai-archive.zip --output ./team-workspace
|
|
293
|
+
npx workspai workspace connect /path/to/existing-workspace
|
|
171
294
|
```
|
|
172
295
|
|
|
173
|
-
Export excludes dependency folders, build output, git history, logs, `.env`,
|
|
296
|
+
Export excludes dependency folders, build output, git history, logs, `.env`,
|
|
297
|
+
private keys, machine-local project links, derived registries, and raw
|
|
298
|
+
absolute-path workspace contracts by default. The manifest carries a
|
|
299
|
+
path-neutral contract snapshot so manual ports, APIs, ownership, events, and
|
|
300
|
+
dependency declarations survive transfer. External projects and their absolute
|
|
301
|
+
paths are excluded and reported as explicit relink actions. Use `--include-env`
|
|
302
|
+
only for trusted internal handoffs. Hydrate accepts legacy
|
|
303
|
+
`.rapidkit-workspace` and `.rapidkit/*` archive entries, but restores them as
|
|
304
|
+
canonical `.workspai-workspace` and `.workspai/*` paths. Workspace import then
|
|
305
|
+
reconciles the portable snapshot with project metadata on the destination
|
|
306
|
+
machine and rebuilds machine-local bindings.
|
|
174
307
|
|
|
175
308
|
Archive export, verification, and hydrate stream file payloads instead of loading the workspace into memory. Exports use ZIP64, so multi-gigabyte workspaces and archives with more than 65,535 files are supported. Stored ZIP entries are the default; use `--archive-compression deflate` when transfer size matters more than export CPU time.
|
|
176
309
|
|
|
@@ -228,6 +361,9 @@ Artifacts:
|
|
|
228
361
|
| `autopilot release` | Wrapper orchestrator | End-to-end release gate evidence |
|
|
229
362
|
| `import` | Workspace ingestion | Rollback-safe sync |
|
|
230
363
|
| `adopt` | Workspace adoption | In-place linking + registry sync |
|
|
364
|
+
| `workspace connect` | Workspace ingestion | In-place workspace registration + reconciliation |
|
|
365
|
+
| `workspace import` | Workspace ingestion | Verified archive restore + registration |
|
|
366
|
+
| `workspace hydrate` | Archive primitive | Verified extraction without registration |
|
|
231
367
|
| `workspace model/context/diff/impact/verify` | Workspace intelligence | Model, context packs, blast radius |
|
|
232
368
|
| `workspace intelligence run` | Workspace intelligence | Canonical contract-backed chain and strict gate |
|
|
233
369
|
| `snapshot` | Workspace recovery | Metadata or full snapshots |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "workspai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.50.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Open-source workspace intelligence CLI for software systems: create, adopt, govern, verify, and align polyglot workspaces for humans, CI, IDEs, and AI agents.",
|
|
6
6
|
"keywords": [
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"validate:contracts": "corepack npm run check:shared-contracts && vitest run src/__tests__/contracts/",
|
|
96
96
|
"test:parity-contract": "corepack npm run check:shared-contracts && vitest run src/__tests__/contracts/import-stack-parity.snapshot.test.ts",
|
|
97
97
|
"test:watch": "vitest",
|
|
98
|
-
"test:coverage": "vitest run --coverage --reporter=default --reporter=json --outputFile.json=test-results/vitest.json",
|
|
98
|
+
"test:coverage": "corepack npm run test:prebuild && vitest run --coverage --reporter=default --reporter=json --outputFile.json=test-results/vitest.json",
|
|
99
99
|
"test:prepare-embeddings": "node scripts/prepare-mock-embeddings.mjs",
|
|
100
100
|
"generate-embeddings": "npx tsx src/ai/generate-embeddings.ts",
|
|
101
101
|
"verify:package-cli": "node scripts/verify-package-cli.mjs",
|
|
@@ -8,6 +8,11 @@ import process from 'node:process';
|
|
|
8
8
|
|
|
9
9
|
const repoRoot = process.cwd();
|
|
10
10
|
const cliPath = path.join(repoRoot, 'dist', 'index.js');
|
|
11
|
+
const isolatedHome = fs.mkdtempSync(path.join(os.tmpdir(), 'workspai-enterprise-home-'));
|
|
12
|
+
|
|
13
|
+
process.on('exit', () => {
|
|
14
|
+
fs.rmSync(isolatedHome, { recursive: true, force: true });
|
|
15
|
+
});
|
|
11
16
|
|
|
12
17
|
function fail(message) {
|
|
13
18
|
console.error(`[enterprise-package-smoke] ${message}`);
|
|
@@ -19,7 +24,14 @@ function log(message) {
|
|
|
19
24
|
}
|
|
20
25
|
|
|
21
26
|
function cliEnv(extraEnv = {}) {
|
|
22
|
-
const env = {
|
|
27
|
+
const env = {
|
|
28
|
+
...process.env,
|
|
29
|
+
HOME: isolatedHome,
|
|
30
|
+
USERPROFILE: isolatedHome,
|
|
31
|
+
XDG_CONFIG_HOME: path.join(isolatedHome, '.config'),
|
|
32
|
+
XDG_CACHE_HOME: path.join(isolatedHome, '.cache'),
|
|
33
|
+
...extraEnv,
|
|
34
|
+
};
|
|
23
35
|
delete env.NODE_ENV;
|
|
24
36
|
delete env.NODE_OPTIONS;
|
|
25
37
|
for (const key of Object.keys(env)) {
|
package/dist/analyze-EEEU3MIF.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{b as printAnalyzeReport,a as runAnalyze}from'./chunk-54EP5CEV.js';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{b as AUTOPILOT_RELEASE_ALIAS_FILENAME,a as AUTOPILOT_RELEASE_LAST_RUN_FILENAME,c as runAutopilotRelease}from'./chunk-K4X3DM7R.js';
|
package/dist/chunk-22DT744Z.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {c,d,a,b}from'./chunk-5XATWNME.js';import s from'fs';import o from'path';function R(i){let n=o.resolve(i);for(;;){if(s.existsSync(o.join(n,c))||s.existsSync(o.join(n,d))||s.existsSync(o.join(n,a,"workspace.json"))||s.existsSync(o.join(n,b,"workspace.json")))return n;let r=o.dirname(n);if(r===n)return null;n=r;}}function l(i){let n=o.resolve(i),r=s.existsSync(o.join(n,c))||s.existsSync(o.join(n,d))||s.existsSync(o.join(n,a,"workspace.json"))||s.existsSync(o.join(n,b,"workspace.json")),p=s.existsSync(o.join(n,a,"project.json"))||s.existsSync(o.join(n,a,"context.json"))||s.existsSync(o.join(n,b,"project.json"))||s.existsSync(o.join(n,b,"context.json"));return r&&!p}export{R as a,l as b};
|