workspai 0.55.1 → 0.57.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.
Files changed (174) hide show
  1. package/README.md +36 -8
  2. package/contracts/adopt-effects.v1.json +72 -0
  3. package/contracts/artifact-remediation-plan.v1.json +110 -2
  4. package/contracts/cli-runtime-command-inventory.v1.snapshot.json +33 -1
  5. package/contracts/doctor-project-evidence.v1.json +95 -2
  6. package/contracts/doctor-remediation-plan.v1.json +29 -2
  7. package/contracts/doctor-workspace-evidence.v1.json +97 -2
  8. package/contracts/extension-cli-compatibility.v1.json +7 -1
  9. package/contracts/published-contract-catalog.v1.json +30 -0
  10. package/contracts/runtime-command-surface.v1.json +63 -0
  11. package/contracts/workspace-intelligence/doctor-capabilities.v1.json +133 -0
  12. package/contracts/workspace-intelligence/doctor-diagnosis.v1.json +273 -0
  13. package/contracts/workspace-intelligence/doctor-graph-diagnosis.v1.json +3 -0
  14. package/contracts/workspace-intelligence/doctor-receipt.v1.json +136 -0
  15. package/contracts/workspace-intelligence/doctor-summary.v1.json +101 -0
  16. package/contracts/workspace-intelligence/doctor-validation.v1.json +109 -0
  17. package/contracts/workspace-intelligence/project-context-agent.v1.json +110 -0
  18. package/contracts/workspace-intelligence/studio-blocker-handoff.v1.json +25 -0
  19. package/contracts/workspace-intelligence/workspace-knowledge-graph.v1.json +36 -0
  20. package/contracts/workspace-intelligence/workspace-knowledge-search.v1.json +54 -0
  21. package/dist/analyze-HJ774J3E.js +1 -0
  22. package/dist/{artifact-remediation-plan-O3YIULQN.js → artifact-remediation-plan-BPLON5VX.js} +1 -1
  23. package/dist/autopilot-release-WIFFFQKW.js +1 -0
  24. package/dist/capabilities-command-44JVOE5S.js +1 -0
  25. package/dist/chunk-2647BYBC.js +1 -0
  26. package/dist/chunk-3U4VLIGW.js +1 -0
  27. package/dist/chunk-5EPPPMAS.js +1 -0
  28. package/dist/{chunk-AMB42V2F.js → chunk-64JUYYRC.js} +1 -1
  29. package/dist/chunk-6OFGLNFS.js +1 -0
  30. package/dist/chunk-75HOCFNH.js +1 -0
  31. package/dist/{chunk-M5ICGR55.js → chunk-7WUT5ZSO.js} +1 -1
  32. package/dist/chunk-AA4PNQKR.js +1 -0
  33. package/dist/{chunk-WIO6L24E.js → chunk-ADL3CK44.js} +1 -1
  34. package/dist/chunk-AO2ZI42U.js +4 -0
  35. package/dist/chunk-CNWUIXF3.js +1 -0
  36. package/dist/chunk-D4RST2HE.js +1 -0
  37. package/dist/chunk-DF4NWPB7.js +8 -0
  38. package/dist/chunk-DT4X7I5M.js +81 -0
  39. package/dist/{chunk-HY3RMPW5.js → chunk-E53BGUOW.js} +1 -1
  40. package/dist/chunk-GBMCHFOV.js +1 -0
  41. package/dist/chunk-GDKFN3CM.js +8 -0
  42. package/dist/chunk-GTJY55QK.js +5 -0
  43. package/dist/chunk-GXTCU4WF.js +1 -0
  44. package/dist/{chunk-WSAFBPS5.js → chunk-IUYZ3NHS.js} +4 -4
  45. package/dist/chunk-IXOLHPTN.js +6 -0
  46. package/dist/chunk-IZLEMTES.js +1 -0
  47. package/dist/chunk-L36ZASME.js +1 -0
  48. package/dist/chunk-LYVDRRDO.js +2 -0
  49. package/dist/chunk-N2BIIUDH.js +4 -0
  50. package/dist/{chunk-IBPPMOHM.js → chunk-NHTLE3WN.js} +1 -1
  51. package/dist/chunk-NS53IPAC.js +1 -0
  52. package/dist/{chunk-NWQ5VWUW.js → chunk-P475BOJW.js} +1 -1
  53. package/dist/chunk-PKIRVQLG.js +1 -0
  54. package/dist/chunk-QHY6F4SS.js +2 -0
  55. package/dist/chunk-QK5QOXOE.js +13 -0
  56. package/dist/chunk-RPHM7LQW.js +36 -0
  57. package/dist/chunk-SNO3WG4V.js +2 -0
  58. package/dist/chunk-T5YRFRJV.js +1 -0
  59. package/dist/chunk-TTFQWH55.js +91 -0
  60. package/dist/chunk-UQEQ6CXU.js +1 -0
  61. package/dist/chunk-V5EYVQ63.js +1 -0
  62. package/dist/{chunk-HUPLAFZQ.js → chunk-VL3APTVB.js} +1 -1
  63. package/dist/chunk-VUR7H2FU.js +2 -0
  64. package/dist/chunk-VZPWIILU.js +1 -0
  65. package/dist/{chunk-MRFN5ZQP.js → chunk-W5ZFXKSL.js} +1 -1
  66. package/dist/chunk-WP3CXMVA.js +2 -0
  67. package/dist/chunk-X7FYEKLI.js +1 -0
  68. package/dist/{chunk-KFKZOPZC.js → chunk-XMTLKDPP.js} +1 -1
  69. package/dist/chunk-YJTEMJFV.js +3 -0
  70. package/dist/chunk-YM77FQB3.js +8 -0
  71. package/dist/{chunk-FZCYTRBQ.js → chunk-Z57G62KE.js} +1 -1
  72. package/dist/chunk-ZCPT6KC3.js +6 -0
  73. package/dist/chunk-ZPA6ECBJ.js +7 -0
  74. package/dist/{create-3NSOY7CA.js → create-O2KLTN5H.js} +1 -1
  75. package/dist/doctor-AL5YWO5X.js +1 -0
  76. package/dist/index.d.ts +19 -0
  77. package/dist/index.js +169 -167
  78. package/dist/pipeline-4ST4BQWY.js +5 -0
  79. package/dist/{project-intelligence-lens-ZOAWXYC5.js → project-intelligence-lens-JHYECYOK.js} +1 -1
  80. package/dist/project-test-coverage-FRMVYTFB.js +1 -0
  81. package/dist/verified-goal-KFNRGOKT.js +1 -0
  82. package/dist/{workspace-C4UETGY7.js → workspace-O4E5CCGK.js} +1 -1
  83. package/dist/{workspace-agent-sync-446AXPHJ.js → workspace-agent-sync-N5DPGU2E.js} +1 -1
  84. package/dist/{workspace-archive-VHUPOBAV.js → workspace-archive-BA3ONVXX.js} +1 -1
  85. package/dist/{workspace-context-XSECHC7O.js → workspace-context-ETZNEHOJ.js} +1 -1
  86. package/dist/workspace-contract-OSI7NBXS.js +1 -0
  87. package/dist/workspace-explain-EM7IUV6L.js +1 -0
  88. package/dist/workspace-explain-contract-KVQO57RC.js +1 -0
  89. package/dist/{workspace-feedback-WXE7NVMV.js → workspace-feedback-PCZKXG5R.js} +1 -1
  90. package/dist/{workspace-foundation-3EVAQ5X6.js → workspace-foundation-QQHX66KE.js} +1 -1
  91. package/dist/{workspace-graph-stream-AJPS45FD.js → workspace-graph-stream-UZJQ75XZ.js} +1 -1
  92. package/dist/workspace-graph-token-efficiency-TF23UYEF.js +1 -0
  93. package/dist/{workspace-history-YY7YRDOH.js → workspace-history-CHJOABME.js} +1 -1
  94. package/dist/{workspace-intelligence-FWRB47EJ.js → workspace-intelligence-A7O7MN6T.js} +1 -1
  95. package/dist/workspace-intelligence-evaluation-YMY3C5AW.js +1 -0
  96. package/dist/{workspace-intelligence-runner-SMEAB4CO.js → workspace-intelligence-runner-4EF66L66.js} +1 -1
  97. package/dist/workspace-intelligence-runtime-registry-NCVHKCMP.js +1 -0
  98. package/dist/workspace-knowledge-graph-BVN4NTJ6.js +1 -0
  99. package/dist/{workspace-knowledge-graph-query-EKHIE3E2.js → workspace-knowledge-graph-query-6DAOXGGT.js} +1 -1
  100. package/dist/workspace-knowledge-graph-snapshot-XSQADCNR.js +1 -0
  101. package/dist/workspace-mcp-serve-TKX4J3SX.js +3 -0
  102. package/dist/{workspace-model-MNJOGBPP.js → workspace-model-7ESEP366.js} +1 -1
  103. package/dist/{workspace-onboarding-5KO7Z7AD.js → workspace-onboarding-SY255V7L.js} +1 -1
  104. package/dist/{workspace-readme-4S6PJ74A.js → workspace-readme-IVJXSIBS.js} +1 -1
  105. package/dist/{workspace-registry-summary-GPJEL7K7.js → workspace-registry-summary-7ISKYEPM.js} +1 -1
  106. package/dist/workspace-repair-engine-GMA2YTCF.js +3 -0
  107. package/dist/workspace-run-ZZXVNFUS.js +1 -0
  108. package/dist/{workspace-verify-C6HWHRLJ.js → workspace-verify-CNXZPWS5.js} +1 -1
  109. package/dist/{workspace-watch-DLPHLF5R.js → workspace-watch-HGFL2EU3.js} +1 -1
  110. package/docs/From Code to Shared Understanding-B.png +0 -0
  111. package/docs/From Code to Shared Understanding.png +0 -0
  112. package/docs/README_CONTENT_CONTRACT.md +25 -12
  113. package/docs/ci-workflows.md +9 -1
  114. package/docs/commands-reference.md +36 -7
  115. package/docs/contracts/ARTIFACT_CATALOG.md +6 -1
  116. package/docs/contracts/README.md +21 -12
  117. package/docs/doctor-command.md +189 -14
  118. package/docs/from-code-to-shared-understanding.md +22 -17
  119. package/docs/graph-benchmark-methodology.md +13 -0
  120. package/docs/real-world-qualification.md +73 -0
  121. package/docs/workspace-intelligence-runner.md +4 -0
  122. package/docs/workspace-knowledge-graph.md +77 -7
  123. package/docs/workspace-operations.md +14 -2
  124. package/docs/workspace-run.md +30 -7
  125. package/package.json +14 -3
  126. package/dist/analyze-AAZEJ4FC.js +0 -1
  127. package/dist/autopilot-release-3H5FTF6H.js +0 -1
  128. package/dist/chunk-2PY65U6X.js +0 -5
  129. package/dist/chunk-3DONU3DU.js +0 -1
  130. package/dist/chunk-44VJHNZB.js +0 -1
  131. package/dist/chunk-5XDPQ3CB.js +0 -1
  132. package/dist/chunk-6HJJHEL6.js +0 -2
  133. package/dist/chunk-7AR5PDLD.js +0 -1
  134. package/dist/chunk-7KKP7RNB.js +0 -3
  135. package/dist/chunk-7S4QNH5A.js +0 -5
  136. package/dist/chunk-7T4TSV5C.js +0 -1
  137. package/dist/chunk-BYVTHIC3.js +0 -2
  138. package/dist/chunk-CEIJIFY7.js +0 -88
  139. package/dist/chunk-D37NEYV6.js +0 -1
  140. package/dist/chunk-DPMO4U3Z.js +0 -8
  141. package/dist/chunk-DS4UYMLX.js +0 -1
  142. package/dist/chunk-FQLB4BIC.js +0 -7
  143. package/dist/chunk-GDU7VP6G.js +0 -1
  144. package/dist/chunk-H7P7SSUW.js +0 -75
  145. package/dist/chunk-KVUYAYTY.js +0 -8
  146. package/dist/chunk-MQ73VS4E.js +0 -2
  147. package/dist/chunk-NYHVCFBT.js +0 -1
  148. package/dist/chunk-OUBBBC7T.js +0 -36
  149. package/dist/chunk-P7K5RHJC.js +0 -2
  150. package/dist/chunk-PS5F4DCT.js +0 -1
  151. package/dist/chunk-QZ7PNMVP.js +0 -1
  152. package/dist/chunk-RA24WQLF.js +0 -1
  153. package/dist/chunk-RMXXK64P.js +0 -4
  154. package/dist/chunk-S7Z4DP3P.js +0 -2
  155. package/dist/chunk-SJLUE6AY.js +0 -1
  156. package/dist/chunk-TEHQ7XKK.js +0 -3
  157. package/dist/chunk-UFOCUHG3.js +0 -1
  158. package/dist/chunk-WD2XDMGB.js +0 -1
  159. package/dist/chunk-XVRJVKOX.js +0 -1
  160. package/dist/chunk-YTLUT6IA.js +0 -13
  161. package/dist/doctor-UEFFNAUD.js +0 -1
  162. package/dist/pipeline-B5S6P36F.js +0 -5
  163. package/dist/project-test-coverage-44ZPCOPV.js +0 -1
  164. package/dist/verified-goal-KOU3WJYN.js +0 -1
  165. package/dist/workspace-contract-AYFTZIKM.js +0 -1
  166. package/dist/workspace-explain-ZEWVKDBF.js +0 -1
  167. package/dist/workspace-explain-contract-6CCC26QT.js +0 -1
  168. package/dist/workspace-graph-token-efficiency-5FNH4JZ5.js +0 -1
  169. package/dist/workspace-intelligence-evaluation-UP2K3L35.js +0 -1
  170. package/dist/workspace-intelligence-runtime-registry-MRSF7RTT.js +0 -1
  171. package/dist/workspace-knowledge-graph-BMMM2FUE.js +0 -1
  172. package/dist/workspace-mcp-serve-X6C3AWTA.js +0 -3
  173. package/dist/workspace-repair-engine-GWTXVVKB.js +0 -3
  174. package/dist/workspace-run-FJTBX4JQ.js +0 -1
@@ -20,6 +20,7 @@ From a Workspai workspace:
20
20
  ```bash
21
21
  npx workspai workspace model --write --json
22
22
  npx workspai workspace graph benchmark "authentication endpoint" --limit 12 --json
23
+ npx workspai workspace graph benchmark "authentication endpoint" --scope project:api --limit 12 --json
23
24
  ```
24
25
 
25
26
  The result conforms to
@@ -34,6 +35,18 @@ It records:
34
35
  - unreadable artifacts rather than silently excluding them;
35
36
  - the estimate formula, reduction ratio, percentage, and claim boundary.
36
37
 
38
+ For linked projects, portable proof artifacts such as
39
+ `external/api/src/server.ts` are resolved through the canonical workspace
40
+ contract's `externalPath`. Resolution remains containment-checked beneath that
41
+ registered project root. A missing or unsafe mapping stays in
42
+ `unreadableArtifacts`; it is never silently dropped from the denominator
43
+ explanation.
44
+
45
+ The benchmark uses the same bounded agent projection as Graph search. A project
46
+ scope therefore includes facts owned by that project and connected
47
+ workspace-level shared entities, while the response's omission budget makes
48
+ payload caps explicit.
49
+
37
50
  ## Baseline and formula
38
51
 
39
52
  The current methodology is `indexed-corpus-vs-bounded-retrieval.v1`.
@@ -0,0 +1,73 @@
1
+ # Real-world qualification
2
+
3
+ Workspai's deterministic unit, contract, integration, and adversarial suites
4
+ remain the release gates. Real-world qualification complements them by running
5
+ the installed CLI against explicitly selected, linked reference repositories
6
+ without installing dependencies or executing project lifecycle commands.
7
+
8
+ ## Isolated and cumulative layouts
9
+
10
+ Use one isolated workspace per repository when diagnosing detection, adoption,
11
+ Doctor, model, graph, context, contract, and readiness behavior:
12
+
13
+ ```bash
14
+ REFERENCE_ROOT=/path/to/reference-repositories
15
+ QUALIFICATION_ROOT=/path/to/qualification-output
16
+ npm run test:real-world -- \
17
+ --reference-root "$REFERENCE_ROOT" \
18
+ --run-root "$QUALIFICATION_ROOT" \
19
+ --projects vscode,grpc,deno \
20
+ --report "$QUALIFICATION_ROOT/isolated.json"
21
+ ```
22
+
23
+ Use `--shared-workspace` to adopt the repositories cumulatively into one fresh
24
+ workspace. Every addition reruns the canonical chain, so transition and scale
25
+ failures are observable rather than hidden behind the final state:
26
+
27
+ ```bash
28
+ REFERENCE_ROOT=/path/to/reference-repositories
29
+ QUALIFICATION_ROOT=/path/to/qualification-output
30
+ npm run test:real-world -- \
31
+ --reference-root "$REFERENCE_ROOT" \
32
+ --run-root "$QUALIFICATION_ROOT" \
33
+ --shared-workspace enterprise-polyglot \
34
+ --projects vscode,grpc,deno,copilot-sdk \
35
+ --report "$QUALIFICATION_ROOT/shared.json"
36
+ ```
37
+
38
+ After the shared workspace qualifies, exercise bounded queries, full graph
39
+ exports, diff/impact/verify/trace, agent dry runs, portable archives, snapshots,
40
+ and destructive-operation dry runs:
41
+
42
+ ```bash
43
+ QUALIFICATION_ROOT=/path/to/qualification-output
44
+ npm run test:real-world:enterprise -- \
45
+ --workspace "$QUALIFICATION_ROOT/enterprise-polyglot" \
46
+ --report "$QUALIFICATION_ROOT/enterprise-command-surface.json"
47
+ ```
48
+
49
+ ## Safety and interpretation
50
+
51
+ - Reference repositories are linked; source is never moved or copied.
52
+ - `--reference-root` is mandatory. The harness has no developer-machine default.
53
+ - Qualification reports are publication-safe by construction: project names are
54
+ anonymized, absolute paths and command arguments are omitted, and raw command
55
+ output is never retained. Report writing fails closed if a local path or a
56
+ forbidden raw-output field reaches the payload.
57
+ - Enterprise command artifacts (graphs, archives, exports, and snapshots) are
58
+ operational test material and remain local-only. Publish only the sanitized
59
+ qualification JSON report, never its adjacent artifact directory.
60
+ - Dependency installation, project build/test/start/init, infrastructure
61
+ mutation, publication, and model network calls are not permitted.
62
+ - Agent customization and destructive project operations are dry-run only.
63
+ - Exit codes `1` and `2` may be valid domain outcomes when their documented JSON
64
+ contracts parse successfully; unexpected process, timeout, buffer, or schema
65
+ failures fail qualification.
66
+ - A real repository warning remains evidence, not a CLI defect. Fix the CLI only
67
+ when detection, classification, contract, portability, or command semantics
68
+ are wrong.
69
+ - Full graphs belong in `--output` artifacts. Agents and IDEs consume bounded
70
+ `search`, `entities`, `evidence`, and `path` results.
71
+
72
+ These suites are explicit and opt-in because they require local reference
73
+ repositories. They do not replace cross-platform CI fixtures or release gates.
@@ -185,6 +185,10 @@ Automation must distinguish:
185
185
  Do not parse terminal prose. Read `status`, `exitCode`, `preflight`, `stages`,
186
186
  and their registered artifacts from the JSON report.
187
187
 
188
+ When Verify publishes `resolutionHints`, an evidence-backed step includes its
189
+ exact `sourceCommand` and `sourceArtifact`. Consumers should run that producer
190
+ command instead of substituting a generic Analyze refresh, then re-run Verify.
191
+
188
192
  ## Verified engineering goals
189
193
 
190
194
  The intelligence runner answers what is true now. A verified goal adds the
@@ -71,6 +71,7 @@ graph:
71
71
 
72
72
  ```bash
73
73
  npx workspai workspace graph search "billing database" --limit 12 --json
74
+ npx workspai workspace graph search "billing database" --scope project:billing --limit 12 --json
74
75
  ```
75
76
 
76
77
  A simplified response looks like this:
@@ -79,17 +80,21 @@ A simplified response looks like this:
79
80
  {
80
81
  "schemaVersion": "workspace-knowledge-search.v1",
81
82
  "query": "billing database",
83
+ "projectId": "billing",
82
84
  "totalMatches": 23,
83
85
  "truncated": true,
84
86
  "entities": [{ "kind": "database", "label": "billing-db", "proofIds": ["proof:..."] }],
85
87
  "relations": [{ "kind": "reads-from", "from": "service:billing", "to": "database:billing-db" }],
86
- "proofs": [{ "provider": "compose", "artifact": "infra/compose.yml", "trust": "authoritative" }]
88
+ "proofs": [{ "provider": "compose", "artifact": "infra/compose.yml", "trust": "authoritative" }],
89
+ "budget": { "mode": "agent", "limits": { "proofs": 16 }, "omitted": { "proofs": 4 } }
87
90
  }
88
91
  ```
89
92
 
90
93
  The response is intentionally bounded. `totalMatches` tells the consumer more
91
94
  results exist, `truncated` prevents silent omission, and every returned claim can
92
- be traced through `proofIds`.
95
+ be traced through `proofIds`. Use `--scope project:<name>` to keep a query within
96
+ one registered project while retaining workspace-level shared entities that are
97
+ proven to be connected to it.
93
98
 
94
99
  Search remains deterministic, local, and offline. Natural-language filler words
95
100
  are removed before ranking, and the remaining terms are weighted by how rare
@@ -97,6 +102,51 @@ they are in the current graph. Exact labels and identities still win. This keeps
97
102
  a common word such as `check` from outranking a rarer term such as `user` merely
98
103
  because it appears in more files. No embedding service or model call is involved.
99
104
 
105
+ For multi-term questions, a generic kind intent such as `service` or `api`
106
+ cannot qualify an otherwise unrelated entity by itself. The result must cover
107
+ the query's meaningful terms, except for deliberate broad architecture queries
108
+ whose purpose is to return a diversified set of languages, bindings,
109
+ dependencies, ownership, CI, deployment, documentation, and contracts.
110
+
111
+ Source-structure extraction is also deliberately sampled. Local import
112
+ resolution uses the larger bounded fingerprint inventory, so a sampled source
113
+ file can still link to a valid target outside the extraction window. A target
114
+ outside the sample receives a lightweight proof-backed file entity; its full
115
+ symbols are not implied to have been extracted. The graph diagnostic reports
116
+ the sampled and indexed candidate counts and must not be read as exhaustive
117
+ symbol coverage.
118
+
119
+ ### Fast reads without stale answers
120
+
121
+ The read-oriented `search`, `entities`, `evidence`, `path`, and `benchmark`
122
+ commands first try the persisted Model and Knowledge Graph. A snapshot is a hit
123
+ only when all of the following remain true:
124
+
125
+ - both artifacts are structurally readable;
126
+ - the graph's stable model SHA-256 matches the persisted canonical model;
127
+ - no proof is marked stale;
128
+ - the graph fingerprint contains exactly one workspace scope and every
129
+ canonical project scope with compatible scan limits;
130
+ - a fresh bounded scan produces the same aggregate live-input hash.
131
+
132
+ Git-backed scopes use `git-worktree-v2`, covering tracked tree state plus
133
+ modified, deleted, renamed, untracked, and relevant ignored files. If Git cannot
134
+ prove the scanned inventory safely—for example because a traversed initialized
135
+ submodule or hidden index flag is present—Workspai falls back to
136
+ `content-merkle-v1`, which hashes each bounded file by portable path and content.
137
+ The graph records the combined strategy as `hybrid-git-content-v2`.
138
+
139
+ A miss rebuilds from live sources. Use `--refresh-graph` when the caller requires
140
+ an explicit rebuild even if the persisted snapshot is compatible:
141
+
142
+ ```bash
143
+ npx workspai workspace graph search "protobuf ownership" --refresh-graph --json
144
+ ```
145
+
146
+ The fingerprint proves compatibility of the exact bounded provider inventory;
147
+ if a scope reports `truncated: true`, it must not be interpreted as proof about
148
+ files beyond that declared limit.
149
+
100
150
  ## Pick the command by question
101
151
 
102
152
  | You want to know… | Use |
@@ -106,11 +156,18 @@ because it appears in more files. No embedding service or model call is involved
106
156
  | Why does Workspai believe an item exists? | `workspace graph evidence <entity-or-relation> --json` |
107
157
  | How are two things connected? | `workspace graph path <from> <to> --json` |
108
158
  | What changed between graph revisions? | `workspace graph overlay --from <graph.json> --json` |
109
- | What is the full portable graph? | `workspace graph emit --json` |
110
- | How do I render the project topology? | `workspace graph dot\|mermaid [--output <file>]` |
159
+ | What is the full portable graph? | `workspace graph emit --output graph.json --json` |
160
+ | How do I render the project topology? | `workspace graph dot\|mermaid [--output <file>]` |
111
161
  | How do I export to semantic or graph-analysis tools? | `workspace graph jsonld\|graphml\|gexf --output <file>` |
112
162
  | How much retrieval payload did one query avoid? | `workspace graph benchmark <query> --limit <n> --json` |
113
- | How should an MCP-compatible agent retrieve context? | `workspace mcp serve` → `searchWorkspaceGraph` |
163
+
164
+ `graph emit --json` writes the complete dependency and Knowledge Graph to
165
+ stdout and can be very large. Automation, IDEs, and agents should pass
166
+ `--output`; stdout then contains only a bounded
167
+ `workspai-cli-operation-result-v1` receipt. Use `search`, `entities`,
168
+ `evidence`, or `path` for bounded retrieval rather than loading the full
169
+ export.
170
+ | How should an MCP-compatible agent retrieve context? | `workspace mcp serve` → `searchWorkspaceGraph` |
114
171
 
115
172
  ## What it models
116
173
 
@@ -259,6 +316,8 @@ The current CLI uses bounded providers for:
259
316
  - workspace/project foundations and service contracts;
260
317
  - language-neutral source structure and package manifests;
261
318
  - OpenAPI, GraphQL, Protobuf, and AsyncAPI interfaces;
319
+ - C/C++ source, CMake/Meson lifecycle units, Bazel/CMake packages, and
320
+ cross-language protocol bindings;
262
321
  - Docker/Compose, Kubernetes, Terraform, and CI workflows;
263
322
  - README/docs, ADRs, tests, and CODEOWNERS.
264
323
 
@@ -273,6 +332,13 @@ imports are labelled `unresolved-local` and produce a diagnostic. This prevents
273
332
  an unknown local path from being silently presented as a third-party
274
333
  dependency.
275
334
 
335
+ Protocol Buffers services and messages retain definition-level identity
336
+ variants. Two projects may use the same fully qualified name without being
337
+ silently collapsed; proven cross-project or cross-language equivalence is
338
+ represented as a relation instead. In a C++-primary repository, ambiguous
339
+ `.h` headers inherit the authoritative project language so C/C++ inventories do
340
+ not split solely because the extension is shared.
341
+
276
342
  ### Binding quality, not just graph size
277
343
 
278
344
  Entity and relation counts do not tell you whether a graph can answer useful
@@ -382,8 +448,10 @@ The recommended read order is:
382
448
  Graph construction inventories each project once per build and caps the number
383
449
  of scanned files. Providers reuse the same in-memory inventory and content
384
450
  hashes. Query indexes are cached per immutable graph object; replacing the graph
385
- is the invalidation boundary. `workspace model --cache` and `--incremental`
386
- avoid unnecessary model/project work when inputs are unchanged.
451
+ is the in-memory invalidation boundary. Across CLI processes, compatible
452
+ persisted read queries validate the live Git/Merkle fingerprint before reuse.
453
+ `workspace model --cache` and `--incremental` avoid unnecessary model/project
454
+ work when inputs are unchanged.
387
455
 
388
456
  Use full graph export for interchange or offline analysis. Use bounded search
389
457
  for interactive agents. The latter keeps response size proportional to the
@@ -426,6 +494,8 @@ a general performance claim.
426
494
 
427
495
  - The CLI graph is intentionally file-backed; a graph database is not required.
428
496
  - Text search is deterministic lexical retrieval, not embedding similarity.
497
+ - The live-input fingerprint enables whole-graph snapshot reuse; it is not yet
498
+ a per-file incremental graph rebuild or a hosted semantic-vector index.
429
499
  - Compiler/LSP-grade symbol resolution belongs in deeper language providers.
430
500
  - Missing project edges mean “relationship not proven,” not “projects are
431
501
  independent.” Author service contracts or provide API/package/runtime
@@ -55,8 +55,12 @@ npx workspai workspace import team.workspai-archive.zip --output ./team --json
55
55
  - Registry and contract sync include adopted projects for `workspace model`, `workspace context`, Dashboard, and agents.
56
56
  - Managed grounding writes a portable project lens, project grounding, and a
57
57
  bounded managed section in `AGENTS.md`. User-authored `AGENTS.md` content is
58
- preserved.
59
- - `--dry-run --json` previews detection without writing metadata.
58
+ preserved, and an authored tracked deletion of that file is never resurrected.
59
+ - `--dry-run --json` previews detection without writing metadata. Its versioned
60
+ `adoptedProject.effects` record also declares project metadata files,
61
+ conditional `.gitignore`/`AGENTS.md` reconciliation, and the registration,
62
+ contract, model, graph, and agent-grounding operations that a real run would
63
+ perform.
60
64
 
61
65
  ### Existing workspace behavior
62
66
 
@@ -103,6 +107,7 @@ entry point into its canonical workspace:
103
107
  ```bash
104
108
  cd /absolute/path/to/project
105
109
  npx workspai project workspace status --json
110
+ npx workspai doctor workspace --json=summary
106
111
  npx workspai doctor project --json
107
112
  npx workspai workspace graph search "authentication endpoint" --limit 12 --json
108
113
  npx workspai workspace intelligence run --for-agent generic --strict --json
@@ -208,6 +213,7 @@ npx workspai workspace contract init
208
213
  npx workspai workspace contract inspect
209
214
  npx workspai workspace contract verify --strict
210
215
  npx workspai workspace contract graph
216
+ npx workspai workspace contract graph --output ./contract-graph.json --json
211
217
  ```
212
218
 
213
219
  Contract file: `.workspai/workspace.contract.json`. Verification checks schema, duplicate slugs, port collisions, and unknown dependencies.
@@ -222,6 +228,12 @@ public environment-template keys, command capabilities, key manifests,
222
228
  entrypoints, API specifications, infrastructure, documentation, and an
223
229
  operational verification profile. Environment values are never emitted.
224
230
 
231
+ The full contract graph can be large because it includes the Knowledge Graph.
232
+ For automation, IDEs, and agents, pass `--output`; the complete portable graph
233
+ is written to that file and stdout remains a bounded
234
+ `workspai-cli-operation-result-v1` receipt. Without `--output`, the existing
235
+ full JSON response remains backward compatible.
236
+
225
237
  The same response also exposes `knowledgeGraph` under the public
226
238
  `workspace-knowledge-graph.v1` contract. It is a provider-neutral,
227
239
  proof-carrying view spanning source structure, packages, service and API
@@ -6,6 +6,8 @@
6
6
 
7
7
  ```bash
8
8
  npx workspai workspace run test --parallel
9
+ npx workspai workspace run build --plan --json
10
+ npx workspai workspace run test --runtime cpp --scope project:native-core --json
9
11
  npx workspai workspace run test --affected --since HEAD~1
10
12
  npx workspai workspace run test --affected --blast-radius
11
13
  npx workspai workspace run build --json --max-workers 8
@@ -20,9 +22,25 @@ npx workspai workspace run build --json --max-workers 8
20
22
 
21
23
  `workspace run` does not infer support from a hard-coded framework list. It
22
24
  reads the effective project capability map produced by the runtime adapters and
23
- project metadata. First-class and extended Node.js, Python, Go, Java, .NET,
24
- PHP, and Rust projects can expose governed lifecycle stages; observed runtimes
25
- run only commands explicitly declared by their project context.
25
+ project metadata. First-class and extended Node.js, Python, Go, Java, .NET, PHP,
26
+ and Rust projects can expose governed lifecycle stages. Existing polyglot
27
+ repositories also publish bounded runtime units discovered from npm, Python,
28
+ Go, Cargo, Maven, Gradle, NuGet, CMake, and Meson manifests. CMake and Meson
29
+ provide explicit native init, test, and build plans; Workspai does not treat
30
+ discovery as permission to execute them.
31
+
32
+ Use `--plan` to return the selected runtime units and commands without running
33
+ them. Use `--runtime <runtime>` to limit a polyglot project to one runtime
34
+ family. Vendored trees, build outputs, fixtures, and nested test fixture package
35
+ manifests are excluded from lifecycle discovery so orchestration does not turn
36
+ sample inputs into install targets.
37
+
38
+ Planning and `init` do not require Doctor or release-readiness evidence. Real
39
+ `test`, `build`, and `start` runs enforce the `doctor-workspace` and `readiness`
40
+ gates by default. A failed gate prevents project commands from starting and is
41
+ recorded as `gates.blocked` in the result. `--strict` converts a failing or
42
+ warning gate into a non-zero process exit; without it, the structured gate
43
+ result remains available without turning advisory policy into a process error.
26
44
 
27
45
  The authoritative scaffold/import/lifecycle tiers are in
28
46
  [contracts/RUNTIME_SUPPORT_MATRIX.md](./contracts/RUNTIME_SUPPORT_MATRIX.md).
@@ -87,15 +105,20 @@ both command context and the final root cause without copying the full log.
87
105
  Consumers should render these fields rather than reconstructing a diagnosis
88
106
  from arbitrary stdout lines.
89
107
 
108
+ The canonical report is `.workspai/reports/workspace-run-last.json`. Workspace
109
+ verification binds a finding to its exact producer through `sourceCommand` and
110
+ `sourceArtifact`; consumers should run the cited producer and read that artifact
111
+ instead of guessing which command can refresh the evidence.
112
+
90
113
  ## Command semantics
91
114
 
92
115
  Workspai has two workspace-level execution surfaces and three equivalent full-init aliases at workspace root:
93
116
 
94
- | Command | Intent | Scope |
95
- | --- | --- | --- |
117
+ | Command | Intent | Scope |
118
+ | ------------------------------------------------------------------ | -------------------------------------------------- | ----------------- |
96
119
  | `init`, `workspace init`, `workspace run init` (at workspace root) | Mirrored full-init (workspace deps + project init) | Workspace + fleet |
97
- | `workspace run <test\|build\|start>` | Fleet stage execution | Selected projects |
98
- | `init`, `test`, `build`, `start`, `dev` (inside project dir) | Project primitive | Single project |
120
+ | `workspace run <test\|build\|start>` | Fleet stage execution | Selected projects |
121
+ | `init`, `test`, `build`, `start`, `dev` (inside project dir) | Project primitive | Single project |
99
122
 
100
123
  At workspace root, `npx workspai init`, `npx workspai workspace init`, and `npx workspai workspace run init` are equivalent aliases.
101
124
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "workspai",
3
- "version": "0.55.1",
3
+ "version": "0.57.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": [
@@ -53,6 +53,8 @@
53
53
  "dist",
54
54
  "contracts",
55
55
  "docs",
56
+ "!docs/*.mp4",
57
+ "!docs/*.gif",
56
58
  "templates",
57
59
  "workspai.config.example.cjs",
58
60
  "rapidkit.config.example.cjs",
@@ -83,6 +85,7 @@
83
85
  "test:e2e:user-first-install": "bash scripts/e2e-user-first-install.sh",
84
86
  "test:prebuild": "tsup",
85
87
  "test": "corepack npm run test:prebuild && vitest run",
88
+ "test:no-build": "vitest run",
86
89
  "test:drift": "node scripts/run-drift-guard.mjs",
87
90
  "benchmark:intelligence": "vitest run src/__tests__/workspace-intelligence-benchmark.test.ts",
88
91
  "sync:shared-contracts": "node scripts/sync-shared-contracts.mjs",
@@ -93,6 +96,7 @@
93
96
  "check:generated-contracts": "node scripts/generate-shared-contracts.mjs --check",
94
97
  "check:agent-customization-drift": "node scripts/check-agent-customization-drift.mjs",
95
98
  "validate:contracts": "corepack npm run check:shared-contracts && vitest run src/__tests__/contracts/",
99
+ "validate:contracts:tests": "vitest run src/__tests__/contracts/",
96
100
  "test:parity-contract": "corepack npm run check:shared-contracts && vitest run src/__tests__/contracts/import-stack-parity.snapshot.test.ts",
97
101
  "test:watch": "vitest",
98
102
  "test:coverage": "corepack npm run test:prebuild && vitest run --coverage --reporter=default --reporter=json --outputFile.json=test-results/vitest.json",
@@ -103,6 +107,7 @@
103
107
  "check:workspace-intelligence-runtime": "node scripts/check-workspace-intelligence-runtime-conformance.mjs",
104
108
  "check:workspace-intelligence-adversarial": "node scripts/check-workspace-intelligence-adversarial.mjs",
105
109
  "check:windows-registry": "node scripts/check-windows-registry-invariants.mjs",
110
+ "check:doctor-capabilities": "node --import tsx scripts/check-doctor-capabilities.ts",
106
111
  "smoke:enterprise-package": "node scripts/enterprise-package-smoke.mjs",
107
112
  "prepack": "node scripts/prepack-enterprise.mjs",
108
113
  "test:e2e": "vitest run src/__tests__/e2e.test.ts",
@@ -112,6 +117,8 @@
112
117
  "test:runtime-matrix": "node scripts/runtime-acceptance-matrix.mjs",
113
118
  "test:runtime-contract": "node scripts/runtime-acceptance-matrix.mjs --contract-only",
114
119
  "test:runtime-matrix:full": "node scripts/runtime-acceptance-matrix.mjs --full",
120
+ "test:real-world": "node scripts/real-world-qualification.mjs",
121
+ "test:real-world:enterprise": "node scripts/enterprise-workspace-qualification.mjs",
115
122
  "lint": "eslint src --ext .ts",
116
123
  "lint:fix": "eslint src --ext .ts --fix",
117
124
  "format": "prettier --write \"src/**/*.ts\"",
@@ -132,6 +139,7 @@
132
139
  "smoke:frontend-generators": "tsup && node scripts/smoke-frontend-generators.mjs",
133
140
  "smoke:frontend-generators:network": "tsup && node scripts/smoke-frontend-generators.mjs --execute",
134
141
  "smoke:official-generators": "tsup && node scripts/smoke-official-generators.mjs",
142
+ "smoke:official-generators:no-build": "node scripts/smoke-official-generators.mjs",
135
143
  "smoke:official-generators:network": "tsup && node scripts/smoke-official-generators.mjs --execute",
136
144
  "check:generator-smoke-coverage": "node scripts/check-generator-smoke-coverage.mjs",
137
145
  "sync:contracts": "node scripts/sync-contracts.mjs",
@@ -139,8 +147,10 @@
139
147
  "bundle-size": "corepack npm run build && node scripts/report-dist-size.mjs",
140
148
  "analyze": "corepack npm run build && node scripts/analyze-dist.mjs",
141
149
  "size-check": "corepack npm run build && size-limit",
150
+ "size-check:no-build": "size-limit",
142
151
  "bench": "npx tsx scripts/benchmarks.ts",
143
- "quality": "corepack npm run check:package-manager && corepack npm run typecheck && corepack npm run lint && corepack npm run format:check && corepack npm test && corepack npm run size-check && corepack npm run check:workspace-intelligence-runtime && corepack npm run check:workspace-intelligence-adversarial && corepack npm run test:runtime-contract && corepack npm run security && corepack npm run validate:docs && corepack npm run check:generator-smoke-coverage && corepack npm run smoke:official-generators && corepack npm run check:contracts && corepack npm run check:shared-contracts && corepack npm run check:parity-snapshot && corepack npm run check:agent-customization-drift",
152
+ "quality": "corepack npm run check:package-manager && corepack npm run typecheck && corepack npm run lint && corepack npm run format:check && corepack npm test && corepack npm run size-check && corepack npm run check:workspace-intelligence-runtime && corepack npm run check:workspace-intelligence-adversarial && corepack npm run check:doctor-capabilities && corepack npm run test:runtime-contract && corepack npm run security && corepack npm run validate:docs && corepack npm run check:generator-smoke-coverage && corepack npm run smoke:official-generators && corepack npm run check:contracts && corepack npm run check:shared-contracts && corepack npm run check:parity-snapshot && corepack npm run check:agent-customization-drift",
153
+ "quality:push": "corepack npm run check:package-manager && corepack npm run check:windows-registry && corepack npm run typecheck && corepack npm run lint && corepack npm run format:check && corepack npm run build && corepack npm run test:no-build && corepack npm run size-check:no-build && corepack npm run check:workspace-intelligence-runtime && corepack npm run check:workspace-intelligence-adversarial && corepack npm run check:doctor-capabilities && corepack npm run test:runtime-contract && corepack npm run validate:docs && corepack npm run check:generator-smoke-coverage && corepack npm run smoke:official-generators:no-build && corepack npm run contracts:check:local && corepack npm run validate:contracts:tests",
144
154
  "act-matrix": "act -P ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-22.04 -P macos-latest=ghcr.io/catthehacker/ubuntu:act-22.04 -P windows-latest=ghcr.io/catthehacker/ubuntu:act-22.04 --pull=false -j build-test-matrix",
145
155
  "release:dry": "bash scripts/release.sh --no-publish --yes --allow-dirty",
146
156
  "release:patch": "bash scripts/release.sh patch",
@@ -150,7 +160,8 @@
150
160
  "ci": "corepack npm run quality",
151
161
  "contracts:sync": "corepack npm run sync:contracts && corepack npm run sync:shared-contracts",
152
162
  "contracts:check": "corepack npm run check:contracts && corepack npm run check:shared-contracts && corepack npm run check:parity-snapshot && corepack npm run check:generated-contracts && corepack npm run check:agent-customization-drift",
153
- "contracts:validate": "corepack npm run contracts:check && corepack npm run validate:contracts && corepack npm run build && corepack npm run check:workspace-intelligence-runtime && corepack npm run check:workspace-intelligence-adversarial",
163
+ "contracts:check:local": "corepack npm run check:contracts && corepack npm run check:shared-contracts && corepack npm run check:generated-contracts && corepack npm run check:agent-customization-drift",
164
+ "contracts:validate": "corepack npm run contracts:check && corepack npm run validate:contracts && corepack npm run build && corepack npm run check:workspace-intelligence-runtime && corepack npm run check:workspace-intelligence-adversarial && corepack npm run check:doctor-capabilities",
154
165
  "docs:validate": "corepack npm run validate:docs",
155
166
  "smoke": "corepack npm run smoke:enterprise-package && corepack npm run smoke:readme && corepack npm run check:generator-smoke-coverage && corepack npm run smoke:official-generators",
156
167
  "fix": "corepack npm run lint:fix && corepack npm run format && corepack npm run sync:contracts && corepack npm run sync:shared-contracts && corepack npm run sync-kits"
@@ -1 +0,0 @@
1
- export{b as printAnalyzeReport,a as runAnalyze}from'./chunk-KVUYAYTY.js';
@@ -1 +0,0 @@
1
- export{b as AUTOPILOT_RELEASE_ALIAS_FILENAME,a as AUTOPILOT_RELEASE_LAST_RUN_FILENAME,c as runAutopilotRelease}from'./chunk-DPMO4U3Z.js';
@@ -1,5 +0,0 @@
1
- import {a as a$1}from'./chunk-GR6442P7.js';import a from'fs';import o from'path';var f={nextjs:{key:"nextjs",runtime:"node",displayName:"Next.js",supportTier:"extended",importStack:"nextjs",aliases:["next","nextjs","next.js"],dependencyHints:["next"],scriptHints:["next dev","next build","next start"],fileHints:["next.config.js","next.config.mjs","next.config.ts"]},remix:{key:"remix",runtime:"node",displayName:"Remix",supportTier:"extended",importStack:"remix",aliases:["remix"],dependencyHints:["@remix-run/react","@remix-run/node","@remix-run/dev"],scriptHints:["remix dev","remix vite:dev"],fileHints:["remix.config.js","remix.config.mjs"]},nuxt:{key:"nuxt",runtime:"node",displayName:"Nuxt",supportTier:"extended",importStack:"nuxt",aliases:["nuxt","nuxtjs","nuxt.js"],dependencyHints:["nuxt","nuxt3"],scriptHints:["nuxt dev","nuxt build","nuxi dev","nuxi build"],fileHints:["nuxt.config.js","nuxt.config.ts","nuxt.config.mjs"]},react:{key:"react",runtime:"node",displayName:"React",supportTier:"extended",importStack:"react",aliases:["react"],dependencyHints:["react","react-dom"],scriptHints:["react-scripts start","react-scripts build"],fileHints:[]},vite:{key:"vite",runtime:"node",displayName:"Vite",supportTier:"extended",importStack:"vite",aliases:["vite"],dependencyHints:["vite"],scriptHints:["vite","vite dev","vite build"],fileHints:["vite.config.js","vite.config.ts","vite.config.mjs"]},vue:{key:"vue",runtime:"node",displayName:"Vue",supportTier:"extended",importStack:"vue",aliases:["vue","vuejs","vue.js"],dependencyHints:["vue","@vue/cli-service"],scriptHints:["vue-cli-service serve","vue-cli-service build"],fileHints:["vue.config.js"]},sveltekit:{key:"sveltekit",runtime:"node",displayName:"SvelteKit",supportTier:"extended",importStack:"sveltekit",aliases:["sveltekit","svelte-kit"],dependencyHints:["@sveltejs/kit"],scriptHints:["svelte-kit dev","svelte-kit build"],fileHints:["svelte.config.js"]},svelte:{key:"svelte",runtime:"node",displayName:"Svelte",supportTier:"extended",importStack:"svelte",aliases:["svelte"],dependencyHints:["svelte"],scriptHints:["svelte"],fileHints:[]},angular:{key:"angular",runtime:"node",displayName:"Angular",supportTier:"extended",importStack:"angular",aliases:["angular","@angular/core"],dependencyHints:["@angular/core","@angular/cli"],scriptHints:["ng serve","ng build"],fileHints:["angular.json"]},astro:{key:"astro",runtime:"node",displayName:"Astro",supportTier:"extended",importStack:"astro",aliases:["astro"],dependencyHints:["astro"],scriptHints:["astro dev","astro build"],fileHints:["astro.config.js","astro.config.ts","astro.config.mjs"]},solid:{key:"solid",runtime:"node",displayName:"Solid",supportTier:"extended",importStack:"solid",aliases:["solid","solidjs","solid-js"],dependencyHints:["solid-js"],scriptHints:[],fileHints:[]},unknown:{key:"unknown",runtime:"unknown",displayName:"Unknown frontend",supportTier:"observed",importStack:"unknown",aliases:["unknown"],dependencyHints:[],scriptHints:[],fileHints:[]}},L={nextjs:{dev:["dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},remix:{dev:["dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},nuxt:{dev:["dev"],start:["start","preview"],build:["build"],test:["test"],lint:["lint"],format:["format"]},react:{dev:["dev","start"],start:["serve"],build:["build"],test:["test"],lint:["lint"],format:["format"]},vite:{dev:["dev"],start:["preview","start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},vue:{dev:["dev","serve"],start:["preview","start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},sveltekit:{dev:["dev"],start:["start","preview"],build:["build"],test:["test"],lint:["lint"],format:["format"]},svelte:{dev:["dev"],start:["preview","start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},angular:{dev:["start","serve"],start:["serve"],build:["build"],test:["test"],lint:["lint"],format:["format"]},astro:{dev:["dev"],start:["start","preview"],build:["build"],test:["test"],lint:["lint"],format:["format"]},solid:{dev:["dev"],start:["preview","start"],build:["build"],test:["test"],lint:["lint"],format:["format"]}};function ne(e,n){let t=typeof e=="string"?h(e):e;return t==="unknown"?[]:L[t]?.[n]??[]}function _(e){try{return a.existsSync(e)?JSON.parse(a.readFileSync(e,"utf8")):null}catch{return null}}function A(e){let n=_(o.join(e,"package.json"));if(!n)return {dependencies:{},scriptText:""};let t={...n.dependencies??{},...n.devDependencies??{},...n.peerDependencies??{}},i=n.scripts??{},s=Object.values(i).filter(u=>typeof u=="string").join(" ").toLowerCase();return {dependencies:t,scriptText:s}}function I(e,n){return n.some(t=>a.existsSync(o.join(e,t)))}function j(e){return e.vite?e.react||e["react-dom"]||e["@vitejs/plugin-react"]?"react":e.vue||e["@vitejs/plugin-vue"]?"vue":e.svelte||e["@sveltejs/vite-plugin-svelte"]?"svelte":e["solid-js"]||e["vite-plugin-solid"]?"solid":null:null}function p(e,n,t){let i=f[e]??f.unknown;return {key:i.key,runtime:i.runtime,displayName:i.displayName,supportTier:i.supportTier,importStack:i.importStack,confidence:n,source:t}}function te(e){return f[e]??f.unknown}function h(e){let n=(e??"").trim().toLowerCase().replace(/[_\s]+/g,"-");if(!n)return "unknown";for(let t of Object.values(f))if(t.aliases.includes(n))return t.key;return "unknown"}function N(e,n){let t=h(typeof n?.framework=="string"?n.framework:typeof n?.kit_name=="string"?n.kit_name:typeof n?.kit=="string"?n.kit:void 0);if(t!=="unknown")return p(t,"high","framework");let{dependencies:i,scriptText:s}=A(e);for(let u of ["nextjs","remix","nuxt","sveltekit","angular","astro","vue","solid","vite","react","svelte"]){let d=f[u];if(d.dependencyHints.some(c=>i[c])){if(u==="vite"){let c=j(i);if(c)return p(c,"high","manifest")}return p(u,"high","manifest")}if(d.fileHints.length>0&&I(e,d.fileHints)){if(u==="vite"){let c=j(i);if(c)return p(c,"high","manifest")}return p(u,"high","manifest")}if(d.scriptHints.some(c=>s.includes(c)))return p(u,"medium","manifest")}return p("unknown","low","unknown")}var y={fastapi:{key:"fastapi",runtime:"python",displayName:"FastAPI",supportTier:"first-class",importStack:"fastapi",aliases:["fastapi"],kitPrefixes:["fastapi"]},django:{key:"django",runtime:"python",displayName:"Django",supportTier:"extended",importStack:"django",aliases:["django"]},flask:{key:"flask",runtime:"python",displayName:"Flask",supportTier:"extended",importStack:"flask",aliases:["flask"]},python:{key:"python",runtime:"python",displayName:"Python",supportTier:"observed",importStack:"unknown",aliases:["python"]},nestjs:{key:"nestjs",runtime:"node",displayName:"NestJS",supportTier:"first-class",importStack:"nestjs",aliases:["nestjs","nest"],kitPrefixes:["nestjs"]},nextjs:{key:"nextjs",runtime:"node",displayName:"Next.js",supportTier:"extended",importStack:"nextjs",aliases:["nextjs","next.js","next"]},remix:{key:"remix",runtime:"node",displayName:"Remix",supportTier:"extended",importStack:"remix",aliases:["remix"]},nuxt:{key:"nuxt",runtime:"node",displayName:"Nuxt",supportTier:"extended",importStack:"nuxt",aliases:["nuxt","nuxtjs","nuxt.js"]},react:{key:"react",runtime:"node",displayName:"React",supportTier:"extended",importStack:"react",aliases:["react"]},vite:{key:"vite",runtime:"node",displayName:"Vite",supportTier:"extended",importStack:"vite",aliases:["vite"]},vue:{key:"vue",runtime:"node",displayName:"Vue",supportTier:"extended",importStack:"vue",aliases:["vue","vuejs","vue.js"]},sveltekit:{key:"sveltekit",runtime:"node",displayName:"SvelteKit",supportTier:"extended",importStack:"sveltekit",aliases:["sveltekit","svelte-kit"]},svelte:{key:"svelte",runtime:"node",displayName:"Svelte",supportTier:"extended",importStack:"svelte",aliases:["svelte"]},angular:{key:"angular",runtime:"node",displayName:"Angular",supportTier:"extended",importStack:"angular",aliases:["angular","@angular/core"]},astro:{key:"astro",runtime:"node",displayName:"Astro",supportTier:"extended",importStack:"astro",aliases:["astro"]},solid:{key:"solid",runtime:"node",displayName:"Solid",supportTier:"extended",importStack:"solid",aliases:["solid","solidjs","solid-js"]},express:{key:"express",runtime:"node",displayName:"Express",supportTier:"extended",importStack:"express",aliases:["express"]},fastify:{key:"fastify",runtime:"node",displayName:"Fastify",supportTier:"extended",importStack:"unknown",aliases:["fastify"]},koa:{key:"koa",runtime:"node",displayName:"Koa",supportTier:"extended",importStack:"koa",aliases:["koa"]},node:{key:"node",runtime:"node",displayName:"Node.js",supportTier:"observed",importStack:"unknown",aliases:["node","nodejs","typescript","javascript"]},gofiber:{key:"gofiber",runtime:"go",displayName:"Go/Fiber",supportTier:"extended",importStack:"go",aliases:["gofiber","fiber","go-fiber","go/fiber"],kitPrefixes:["gofiber"]},gogin:{key:"gogin",runtime:"go",displayName:"Go/Gin",supportTier:"extended",importStack:"go",aliases:["gogin","gin","go-gin","go/gin"],kitPrefixes:["gogin"]},echo:{key:"echo",runtime:"go",displayName:"Echo",supportTier:"extended",importStack:"go",aliases:["echo"]},go:{key:"go",runtime:"go",displayName:"Go",supportTier:"observed",importStack:"go",aliases:["go","golang"],kitPrefixes:["go"]},springboot:{key:"springboot",runtime:"java",displayName:"Spring Boot",supportTier:"extended",importStack:"springboot",aliases:["springboot","spring","spring-boot"],kitPrefixes:["springboot"]},java:{key:"java",runtime:"java",displayName:"Java",supportTier:"observed",importStack:"unknown",aliases:["java"]},laravel:{key:"laravel",runtime:"php",displayName:"Laravel",supportTier:"extended",importStack:"unknown",aliases:["laravel"]},symfony:{key:"symfony",runtime:"php",displayName:"Symfony",supportTier:"extended",importStack:"unknown",aliases:["symfony"]},php:{key:"php",runtime:"php",displayName:"PHP",supportTier:"observed",importStack:"unknown",aliases:["php"]},rails:{key:"rails",runtime:"ruby",displayName:"Ruby on Rails",supportTier:"extended",importStack:"rails",aliases:["rails","ruby-on-rails","ruby on rails"]},sinatra:{key:"sinatra",runtime:"ruby",displayName:"Sinatra",supportTier:"extended",importStack:"unknown",aliases:["sinatra"]},ruby:{key:"ruby",runtime:"ruby",displayName:"Ruby",supportTier:"observed",importStack:"unknown",aliases:["ruby"]},dotnet:{key:"dotnet",runtime:"dotnet",displayName:"ASP.NET Core",supportTier:"extended",importStack:"dotnet",aliases:["dotnet","asp.net","aspnet","asp.net core","csharp","c#"],kitPrefixes:["dotnet","aspnet","aspnetcore"]},actix:{key:"actix",runtime:"rust",displayName:"Actix-web",supportTier:"extended",importStack:"unknown",aliases:["actix","actix-web"]},axum:{key:"axum",runtime:"rust",displayName:"Axum",supportTier:"extended",importStack:"unknown",aliases:["axum"]},rocket:{key:"rocket",runtime:"rust",displayName:"Rocket",supportTier:"extended",importStack:"unknown",aliases:["rocket"]},rust:{key:"rust",runtime:"rust",displayName:"Rust",supportTier:"observed",importStack:"unknown",aliases:["rust"]},phoenix:{key:"phoenix",runtime:"elixir",displayName:"Phoenix",supportTier:"extended",importStack:"unknown",aliases:["phoenix"]},elixir:{key:"elixir",runtime:"elixir",displayName:"Elixir",supportTier:"observed",importStack:"unknown",aliases:["elixir"]},clojure:{key:"clojure",runtime:"clojure",displayName:"Clojure",supportTier:"extended",importStack:"unknown",aliases:["clojure"]},scala:{key:"scala",runtime:"scala",displayName:"Scala",supportTier:"extended",importStack:"unknown",aliases:["scala"]},kotlin:{key:"kotlin",runtime:"kotlin",displayName:"Kotlin",supportTier:"extended",importStack:"unknown",aliases:["kotlin"]},deno:{key:"deno",runtime:"deno",displayName:"Deno",supportTier:"extended",importStack:"unknown",aliases:["deno"]},bun:{key:"bun",runtime:"bun",displayName:"Bun",supportTier:"extended",importStack:"unknown",aliases:["bun"]},tauri:{key:"tauri",runtime:"node",displayName:"Tauri",supportTier:"extended",importStack:"unknown",aliases:["tauri","tauri-app"],kitPrefixes:["desktop.tauri"]},electron:{key:"electron",runtime:"node",displayName:"Electron",supportTier:"extended",importStack:"unknown",aliases:["electron","electron-forge"],kitPrefixes:["desktop.electron"]},"vscode-extension":{key:"vscode-extension",runtime:"node",displayName:"VS Code Extension",supportTier:"extended",importStack:"unknown",aliases:["vscode-extension","visual-studio-code-extension"],kitPrefixes:["extension.vscode"]},c:{key:"c",runtime:"c",displayName:"C",supportTier:"observed",importStack:"unknown",aliases:["c","clang","gcc"]},cpp:{key:"cpp",runtime:"cpp",displayName:"C++",supportTier:"observed",importStack:"unknown",aliases:["cpp","c++","cplusplus","cc","clang++","g++"]},unknown:{key:"unknown",runtime:"unknown",displayName:"Unknown",supportTier:"observed",importStack:"unknown",aliases:["unknown"]}},B=new Map;for(let e of Object.values(y))for(let n of e.aliases)B.set(n,e.key);function r(e,n,t){let i=y[e]??y.unknown;return {key:i.key,runtime:i.runtime,displayName:i.displayName,supportTier:i.supportTier,importStack:i.importStack,confidence:n,source:t}}function R(e){return e.trim().toLowerCase().replace(/[_\s]+/g,"-")}function l(e){try{return a.existsSync(e)?a.readFileSync(e,"utf8").toLowerCase():""}catch{return ""}}function C(e){try{return a.existsSync(e)?JSON.parse(a.readFileSync(e,"utf8")):null}catch{return null}}var O=new Set([".git",".hg",".svn",".workspai",".rapidkit",".venv","venv","node_modules","vendor","dist","build","target","coverage",".next",".cache"]);function b(e,n){if(n<0||!a.existsSync(e))return [];let t=[],i=[];try{i=a.readdirSync(e,{withFileTypes:true});}catch{return []}for(let s of i){let u=o.join(e,s.name);s.isDirectory()?t.push(...b(u,n-1)):t.push(u);}return t}function H(e,n){if(n<0||!a.existsSync(e))return [];let t=[];try{t=a.readdirSync(e,{withFileTypes:true});}catch{return []}let i=[];for(let s of t){let u=o.join(e,s.name);if(s.isDirectory()){if(O.has(s.name)||a$1(s.name))continue;i.push(...H(u,n-1));}else i.push(u);}return i}function m(e,n,t=2){return b(e,t).some(i=>i.toLowerCase().endsWith(n.toLowerCase()))}function T(e,n,t=2){return b(e,t).filter(i=>i.toLowerCase().endsWith(n.toLowerCase()))}function G(e){let n=R(e??"");if(!n)return "unknown";for(let t of Object.values(y))if(t.kitPrefixes?.some(i=>n.startsWith(i)))return t.key;return "unknown"}function g(e){return e?B.get(R(e))??"unknown":"unknown"}function de(e){return g(e)}function ce(e){let n=g(e);return n!=="unknown"?y[n].runtime:"unknown"}function V(e){let n=G(e.kitName);if(n!=="unknown")return r(n,"high","kit");let t=g(e.framework);if(t!=="unknown")return r(t,"high","framework");let i=g(e.runtime);return i!=="unknown"?r(i,"medium","runtime"):r("unknown","low","unknown")}function z(e){let n=C(o.join(e,"package.json"));if(!n)return r("unknown","low","unknown");let t={...n.dependencies??{},...n.devDependencies??{}},i=n.scripts??{},s=Object.values(i).filter(u=>typeof u=="string").join(" ").toLowerCase();return t["@nestjs/core"]||s.includes("nest start")?r("nestjs","high","manifest"):t.express?r("express","high","manifest"):t.fastify?r("fastify","high","manifest"):t.koa?r("koa","high","manifest"):r("node","medium","marker")}function q(e){let n=C(o.join(e,"package.json"));if(!n)return r("unknown","low","unknown");let t={...n.dependencies??{},...n.devDependencies??{}},i=n.engines??{},s=n.scripts??{},u=Object.values(s).filter(d=>typeof d=="string").join(" ").toLowerCase();return t["@tauri-apps/api"]||t["@tauri-apps/cli"]||a.existsSync(o.join(e,"src-tauri","Cargo.toml"))?r("tauri","high","manifest"):t.electron||t["@electron-forge/cli"]||u.includes("electron-forge")||u.includes("electron ")?r("electron","high","manifest"):typeof i.vscode=="string"&&(n.activationEvents!==void 0||n.contributes!==void 0)?r("vscode-extension","high","manifest"):r("unknown","low","unknown")}function M(e){let n=[l(o.join(e,"pyproject.toml")),l(o.join(e,"requirements.txt")),l(o.join(e,"requirements.in"))].join(`
2
- `);return n.includes("fastapi")?r("fastapi","high","manifest"):n.includes("django")?r("django","high","manifest"):n.includes("flask")?r("flask","high","manifest"):n.trim()?r("python","medium","marker"):r("unknown","low","unknown")}function W(e){let n=[l(o.join(e,"go.mod")),l(o.join(e,"main.go"))].join(`
3
- `);return n.includes("github.com/gofiber/fiber")?r("gofiber","high","manifest"):n.includes("github.com/gin-gonic/gin")?r("gogin","high","manifest"):n.includes("github.com/labstack/echo")?r("echo","high","manifest"):n.trim()?r("go","medium","marker"):r("unknown","low","unknown")}function P(e){let n=[l(o.join(e,"pom.xml")),l(o.join(e,"build.gradle")),l(o.join(e,"build.gradle.kts"))].join(`
4
- `);return n.includes("spring-boot")||n.includes("org.springframework")?r("springboot","high","manifest"):n.trim()?r("java","medium","marker"):r("unknown","low","unknown")}function U(e){let n=l(o.join(e,"composer.json"));return n.includes("laravel/framework")?r("laravel","high","manifest"):n.includes("symfony/")?r("symfony","high","manifest"):n.trim()?r("php","medium","marker"):r("unknown","low","unknown")}function Y(e){let n=l(o.join(e,"Gemfile"));return n.includes("gem 'rails'")||n.includes('gem "rails"')?r("rails","high","manifest"):n.includes("gem 'sinatra'")||n.includes('gem "sinatra"')?r("sinatra","high","manifest"):n.trim()?r("ruby","medium","marker"):r("unknown","low","unknown")}function Q(e){let t=[...T(e,".csproj",3),...T(e,".sln",2)].map(i=>l(i)).join(`
5
- `);return t.includes("microsoft.net.sdk.web")||t.includes("microsoft.aspnetcore")||t.includes("swashbuckle.aspnetcore")?r("dotnet","high","manifest"):t.trim()?r("dotnet","medium","marker"):r("unknown","low","unknown")}function X(e){let n=l(o.join(e,"Cargo.toml"));return n.includes("actix-web")?r("actix","high","manifest"):n.includes("axum")?r("axum","high","manifest"):n.includes("rocket")?r("rocket","high","manifest"):n.trim()?r("rust","medium","marker"):r("unknown","low","unknown")}function Z(e){let n=l(o.join(e,"mix.exs"));return n.includes("phoenix")?r("phoenix","high","manifest"):n.trim()?r("elixir","medium","marker"):r("unknown","low","unknown")}function $(e){let n=[],t=i=>{n.includes(i)||n.push(i);};return a.existsSync(o.join(e,"go.mod"))&&t("go"),(a.existsSync(o.join(e,"Cargo.toml"))||a.existsSync(o.join(e,"src-tauri","Cargo.toml")))&&t("rust"),(a.existsSync(o.join(e,"pom.xml"))||a.existsSync(o.join(e,"build.gradle"))||a.existsSync(o.join(e,"build.gradle.kts")))&&t("java"),a.existsSync(o.join(e,"mix.exs"))&&t("elixir"),a.existsSync(o.join(e,"composer.json"))&&t("php"),(m(e,".csproj")||m(e,".sln"))&&t("dotnet"),a.existsSync(o.join(e,"package.json"))&&t("node"),a.existsSync(o.join(e,"Gemfile"))&&t("ruby"),(a.existsSync(o.join(e,"pyproject.toml"))||a.existsSync(o.join(e,"setup.py"))||a.existsSync(o.join(e,"requirements.txt"))||a.existsSync(o.join(e,"requirements.in")))&&t("python"),(a.existsSync(o.join(e,"deps.edn"))||a.existsSync(o.join(e,"project.clj")))&&t("clojure"),a.existsSync(o.join(e,"build.sbt"))&&t("scala"),(a.existsSync(o.join(e,"deno.json"))||a.existsSync(o.join(e,"deno.jsonc")))&&t("deno"),(a.existsSync(o.join(e,"bun.lockb"))||a.existsSync(o.join(e,"bun.lock")))&&t("bun"),(a.existsSync(o.join(e,"CMakeLists.txt"))||a.existsSync(o.join(e,"meson.build"))||m(e,".cpp",3)||m(e,".cc",3)||m(e,".cxx",3)||m(e,".hpp",3)||m(e,".hh",3)||m(e,".hxx",3))&&t("cpp"),(m(e,".c",3)||m(e,".h",3))&&t("c"),(a.existsSync(o.join(e,"settings.gradle.kts"))||m(o.join(e,"src"),".kt",3))&&t("kotlin"),n}function le(e,n=4){let t=H(e,Math.max(0,Math.min(12,n))),i=new Set(t.map(k=>o.basename(k))),s=t.map(k=>k.toLowerCase()),u=[],d=k=>{u.includes(k)||u.push(k);},c=(...k)=>k.some(w=>i.has(w)),x=(...k)=>s.some(w=>k.some(K=>w.endsWith(K)));return c("go.mod")&&d("go"),c("Cargo.toml")&&d("rust"),c("pom.xml","build.gradle","build.gradle.kts")&&d("java"),c("mix.exs")&&d("elixir"),c("composer.json")&&d("php"),x(".csproj",".sln")&&d("dotnet"),c("package.json")&&d("node"),c("Gemfile")&&d("ruby"),c("pyproject.toml","setup.py","requirements.txt","requirements.in")&&d("python"),c("deps.edn","project.clj")&&d("clojure"),c("build.sbt")&&d("scala"),c("deno.json","deno.jsonc")&&d("deno"),c("bun.lockb","bun.lock")&&d("bun"),(c("CMakeLists.txt","meson.build")||x(".cpp",".cc",".cxx",".hpp",".hh",".hxx"))&&d("cpp"),x(".c",".h")&&d("c"),(c("settings.gradle.kts")||x(".kt"))&&d("kotlin"),u}function me(e,n){let t=V({framework:typeof n?.framework=="string"?n.framework:void 0,runtime:typeof n?.runtime=="string"?n.runtime:void 0,kitName:typeof n?.kit_name=="string"?n.kit_name:typeof n?.kit=="string"?n.kit:void 0});if(t.key!=="unknown")return t;let i=$(e);if(i.includes("node")){let s=q(e);if(s.key!=="unknown")return s;let u=N(e,n);if(u.key!=="unknown")return u;let d=z(e);if(d.key!=="unknown")return d}if(i.includes("python")){let s=M(e);if(s.key!=="unknown")return s}if(i.includes("go")){let s=W(e);if(s.key!=="unknown")return s}if(i.includes("java")){let s=P(e);if(s.key!=="unknown")return s}if(i.includes("php")){let s=U(e);if(s.key!=="unknown")return s}if(i.includes("ruby")){let s=Y(e);if(s.key!=="unknown")return s}if(i.includes("rust")){let s=X(e);if(s.key!=="unknown")return s}if(i.includes("elixir")){let s=Z(e);if(s.key!=="unknown")return s}if(i.includes("dotnet")){let s=Q(e);if(s.key!=="unknown")return s}return i.includes("clojure")?r("clojure","medium","marker"):i.includes("scala")?r("scala","medium","marker"):i.includes("kotlin")?r("kotlin","medium","marker"):i.includes("deno")?r("deno","high","marker"):i.includes("bun")?r("bun","high","marker"):i.includes("cpp")?r("cpp","medium","marker"):i.includes("c")?r("c","medium","marker"):i.length>0?r(g(i[0]),"medium","runtime"):r("unknown","low","unknown")}export{ne as a,te as b,h as c,N as d,de as e,ce as f,V as g,$ as h,le as i,me as j};
@@ -1 +0,0 @@
1
- import {a as a$1}from'./chunk-A5FBGRJA.js';import {g,p}from'./chunk-MQ73VS4E.js';import {d as d$1,e as e$1}from'./chunk-WIO6L24E.js';import {e,d}from'./chunk-44VJHNZB.js';import {s}from'./chunk-MOSXTVPU.js';import {s as s$1,q}from'./chunk-RJIYCDVC.js';import a from'path';import {existsSync}from'fs';import m from'fs-extra';var f=e.workspaceRegistry,w=d.workspaceRegistry.schemaVersion;function E(r){return {slug:r.slug,relativePath:r.relativePath,framework:r.framework,kit:r.kit,source:r.source}}async function b(r){let e=s(r,"workspace.json").find(t=>existsSync(t));if(!e)return {exists:false,legacyProjectCount:0};try{let t=await m.readJson(e),c=Array.isArray(t.projects)?t.projects.length:0,o=typeof t.workspace_name=="string"&&t.workspace_name.trim()||typeof t.name=="string"&&t.name.trim()||a.basename(r);return {exists:true,manifestPath:e,workspaceName:o,profile:typeof t.profile=="string"?t.profile:void 0,legacyProjectCount:c}}catch{return {exists:true,manifestPath:e,legacyProjectCount:0,workspaceName:a.basename(r)}}}async function _(r){let e=a$1(r);for(let t of s$1())if(await m.pathExists(t))try{let o=((await m.readJson(t)).workspaces||[]).find(s=>a$1(s.path)===e);if(o)return {exists:true,projectCount:Array.isArray(o.projects)?o.projects.length:0,registryPath:t}}catch{continue}return {exists:false,projectCount:0,registryPath:a.join(q(),"workspaces.json")}}async function T(r,e){let t=a.resolve(r),c=await d$1(t,g),o=await b(t),s=await _(t),i=e?.contract!==void 0||!!c,n=[];if(e?.contract)n=e.contract.projects||[];else if(i)try{let{contract:A}=await p({workspacePath:t});n=A.projects||[];}catch{n=[];}let d={contract:{exists:i,projectCount:n.length,path:g},globalRegistry:{exists:s.exists,projectCount:s.projectCount,path:s.registryPath},legacyWorkspaceJson:{exists:o.exists,projectCount:o.legacyProjectCount,path:o.manifestPath?a.relative(t,o.manifestPath):void 0}},p$1="none",u=[],y=0;return i?(p$1="workspace.contract.json",u=n.map(E),y=u.length):s.projectCount>0?(p$1="global-registry",y=s.projectCount):o.legacyProjectCount>0&&(p$1="legacy-workspace.json",y=o.legacyProjectCount),{contractExists:i,summary:{schemaVersion:w,kind:"rapidkit.workspace.registry",workspacePath:t,workspaceName:o.workspaceName||a.basename(t),profile:o.profile,projectCount:y,authority:p$1,contractPath:g,projects:u,sources:d}}}async function U(r){let e=await d$1(r,f);if(!e)return null;try{let t=await m.readJson(e);return t?.schemaVersion!==w?null:t}catch{return null}}async function D(r,e){let t=await M(r,e);return await e$1(r,f,t),t}async function M(r,e){return {...(await T(r,{contract:e?.contract})).summary,generatedAt:(e?.now??new Date).toISOString(),registrySummaryPath:f}}function F(r,e=""){return r.projectCount>0?r.authority==="workspace.contract.json"?`${r.projectCount} project(s) registered in workspace contract${e}.`:r.authority==="global-registry"?`${r.projectCount} project(s) registered in global workspace registry${e}.`:`${r.projectCount} project(s) registered in legacy workspace manifest${e}.`:`Workspace state exists, but no projects are registered yet${e}.`}export{f as a,w as b,T as c,U as d,D as e,M as f,F as g};
@@ -1 +0,0 @@
1
- var o={model:".workspai/reports/workspace-model.json",knowledgeGraph:".workspai/reports/workspace-knowledge-graph.json",snapshot:".workspai/reports/workspace-model-snapshot.json",diff:".workspai/reports/workspace-model-diff-last-run.json",impact:".workspai/reports/workspace-impact-last-run.json",analyze:".workspai/reports/analyze-last-run.json",doctor:".workspai/reports/doctor-last-run.json",contractVerify:".workspai/reports/workspace-contract-verify-last-run.json",readiness:".workspai/reports/release-readiness-last-run.json",verify:".workspai/reports/workspace-verify-last-run.json",history:".workspai/reports/workspace-intelligence-history.json",agentContext:".workspai/reports/workspace-context-agent.json",agentIndex:".workspai/reports/INDEX.json",agentCustomizationPack:".workspai/reports/agent-customization-pack.json",skillsIndex:".workspai/reports/workspace-skills-index.json",agents:"AGENTS.md",explain:".workspai/reports/workspace-explain-last-run.json",intelligenceRun:".workspai/reports/workspace-intelligence-run-last-run.json",evaluationLive:".workspai/reports/workspace-intelligence-evaluation-live.json",evaluationLastRun:".workspai/reports/workspace-intelligence-evaluation-last-run.json",verifiedGoalStatus:".workspai/reports/verified-goal-last-run.json",repairTransaction:".workspai/reports/workspace-repair-last-run.json"},r={model:"workspace-model.v1",knowledgeGraph:"workspace-knowledge-graph.v1",snapshot:"workspace-model-snapshot.v1",diff:"workspace-model-diff.v1",impact:"workspace-impact.v1",analyze:"rapidkit-analyze-v1",doctor:"doctor-workspace-evidence-v1",contractVerify:"workspace-contract-verify.v1",readiness:"release-readiness-v1",verify:"workspace-verify.v1",history:"workspace-intelligence-history.v1",agentContext:"workspace-context.v1",agentIndex:"rapidkit-agent-reports-index.v1",agentCustomizationPack:"rapidkit-agent-customization-pack.v1",skillsIndex:"workspace-skills-index.v1",agents:null,explain:"workspace-explain.v1",intelligenceRun:"workspace-intelligence-run.v1",evaluationLive:"workspace-intelligence-evaluation.v1",evaluationLastRun:"workspace-intelligence-evaluation.v1",verifiedGoalStatus:"workspai.verified-goal-status.v1",repairTransaction:"workspai.workspace-repair-transaction.v1"},t={model:"contracts/workspace-intelligence/workspace-model.v1.json",knowledgeGraph:"contracts/workspace-intelligence/workspace-knowledge-graph.v1.json",snapshot:"contracts/workspace-intelligence/workspace-model-snapshot.v1.json",diff:"contracts/workspace-intelligence/workspace-model-diff.v1.json",impact:"contracts/workspace-intelligence/workspace-impact.v1.json",analyze:"contracts/analyze-last-run.v1.json",doctor:"contracts/doctor-workspace-evidence.v1.json",contractVerify:"contracts/workspace-intelligence/workspace-contract-verify.v1.json",readiness:"contracts/release-readiness.v1.json",verify:"contracts/workspace-intelligence/workspace-verify.v1.json",history:"contracts/workspace-intelligence/workspace-intelligence-history.v1.json",agentContext:"contracts/workspace-intelligence/workspace-context.v1.json",agentIndex:"contracts/workspace-intelligence/agent-reports-index.v1.json",agentCustomizationPack:"contracts/workspace-intelligence/agent-customization-pack-report.v1.json",skillsIndex:"contracts/workspace-intelligence/workspace-skills-index.v1.json",agents:null,explain:"contracts/workspace-intelligence/workspace-explain.v1.json",intelligenceRun:"contracts/workspace-intelligence/workspace-intelligence-run.v1.json",evaluationLive:"contracts/workspace-intelligence/workspace-intelligence-evaluation.v1.json",evaluationLastRun:"contracts/workspace-intelligence/workspace-intelligence-evaluation.v1.json",verifiedGoalStatus:"contracts/workspace-intelligence/verified-goal-status.v1.json",repairTransaction:"contracts/workspace-intelligence/workspace-repair-transaction.v1.json"},n={projectWorkspaceLink:{artifactPath:".workspai/workspace-link.local.json",schemaVersion:"project-workspace-link.v1",contractPath:"contracts/project-workspace-link.v1.json",producerCommands:[["adopt"],["import"],["project","workspace","relink"],["workspace","sync"]]},projectContextAgent:{artifactPath:".workspai/reports/project-context-agent.json",schemaVersion:"project-context-agent.v1",contractPath:"contracts/workspace-intelligence/project-context-agent.v1.json",producerCommands:[["adopt"],["import"],["workspace","sync"],["workspace","agent-sync","--write"]]},workspaceContract:{artifactPath:".workspai/workspace.contract.json",schemaVersion:1,contractPath:"contracts/workspace-contract.v1.json",producerCommands:[["workspace","sync"],["workspace","contract","sync"]]},workspaceModelCache:{artifactPath:".workspai/cache/workspace-model.v1.json",schemaVersion:"workspace-model-cache.v1",contractPath:"contracts/workspace-model-cache.v1.json",producerCommands:[["workspace","model"]]},workspaceRegistry:{artifactPath:".workspai/workspace-registry.v1.json",schemaVersion:"workspace-registry.v1",contractPath:"contracts/workspace-registry.v1.json",producerCommands:[["workspace","sync"]]},compatibilityMatrix:{artifactPath:".workspai/compatibility-matrix.json",schemaVersion:"rapidkit.compatibility-matrix.v1",contractPath:"contracts/compatibility-matrix.v1.json",producerCommands:[["bootstrap"]]},doctorWorkspaceCache:{artifactPath:".workspai/reports/doctor-workspace-cache.json",schemaVersion:"doctor-workspace-cache-v2",contractPath:"contracts/doctor-workspace-cache.v2.json",producerCommands:[["doctor","workspace"]]},bootstrapCompliance:{artifactPath:".workspai/reports/bootstrap-compliance.latest.json",schemaVersion:"bootstrap-compliance.v1",contractPath:"contracts/bootstrap-compliance.v1.json",producerCommands:[["bootstrap"]]},mirrorOps:{artifactPath:".workspai/reports/mirror-ops.latest.json",schemaVersion:"mirror-ops.v1",contractPath:"contracts/mirror-ops.v1.json",producerCommands:[["mirror","status"]]},transparencyEvidence:{artifactPath:".workspai/reports/transparency-evidence.latest.json",schemaVersion:"transparency-evidence.v1",contractPath:"contracts/transparency-evidence.v1.json",producerCommands:[["mirror","sync"]]},workspaceShareBundle:{artifactPath:".workspai/reports/share-bundle.json",schemaVersion:"1.1",schemaVersionField:"schema_version",contractPath:"contracts/workspace-share-bundle.v1.json",producerCommands:[["workspace","share"]]},doctorProject:{artifactPath:".workspai/reports/doctor-project-last-run.json",schemaVersion:"doctor-project-evidence-v1",contractPath:"contracts/doctor-project-evidence.v1.json",producerCommands:[["doctor","project"]]},projectTestCoverage:{artifactPath:".workspai/reports/project-test-coverage-last-run.json",schemaVersion:"workspai.project-test-coverage.v1",contractPath:"contracts/project-test-coverage.v1.json",producerCommands:[["project","coverage"]]},doctorRemediationPlan:{artifactPath:".workspai/reports/doctor-remediation-plan-last-run.json",schemaVersion:"doctor-remediation-plan-v2",contractPath:"contracts/doctor-remediation-plan.v2.json",producerCommands:[["workspace","remediation-plan"]]},artifactRemediationPlan:{artifactPath:".workspai/reports/artifact-remediation-plan-last-run.json",schemaVersion:"artifact-remediation-plan-v1",contractPath:"contracts/artifact-remediation-plan.v1.json",producerCommands:[["workspace","remediation-plan"]]},doctorFixResult:{artifactPath:".workspai/reports/doctor-fix-result-last-run.json",schemaVersion:"rapidkit-doctor-fix-result-v1",contractPath:"contracts/workspace-intelligence/doctor-fix-result.v1.json",producerCommands:[["doctor","workspace"]]},pipelineLastRun:{artifactPath:".workspai/reports/pipeline-last-run.json",schemaVersion:"rapidkit-pipeline-v1",contractPath:"contracts/pipeline-last-run.v1.json",producerCommands:[["pipeline"]]},autopilotReleaseLastRun:{artifactPath:".workspai/reports/autopilot-release-last-run.json",schemaVersion:"autopilot-release-v1",contractPath:"contracts/autopilot-release.v1.json",producerCommands:[["autopilot","release"]]},autopilotReleaseAlias:{artifactPath:".workspai/reports/autopilot-release.json",schemaVersion:"autopilot-release-v1",contractPath:"contracts/autopilot-release.v1.json",producerCommands:[["autopilot","release"]]},workspaceRunLast:{artifactPath:".workspai/reports/workspace-run-last.json",schemaVersion:"workspace-run-v1",contractPath:"contracts/workspace-run-last.v1.json",producerCommands:[["workspace","run"]]},workspaiMcpDesign:{artifactPath:".workspai/reports/workspai-mcp-design.json",schemaVersion:"workspai-mcp-design.v1",contractPath:"contracts/workspace-intelligence/mcp-design.v1.json",producerCommands:[["workspace","agent-sync","--write"]]},legacyMcpDesign:{artifactPath:".workspai/reports/rapidkit-mcp-design.json",schemaVersion:"workspai-mcp-design.v1",contractPath:"contracts/workspace-intelligence/mcp-design.v1.json",producerCommands:[["workspace","agent-sync","--write"]]},workspaceWhy:{artifactPath:".workspai/reports/workspace-why-last-run.json",schemaVersion:r.explain,contractPath:t.explain,producerCommands:[["workspace","why"]]},workspaceTrace:{artifactPath:".workspai/reports/workspace-trace-last-run.json",schemaVersion:r.explain,contractPath:t.explain,producerCommands:[["workspace","trace"]]},agentHooks:{artifactPath:".vscode/workspai-agent-hooks.json",schemaVersion:"workspai-agent-hooks.v1",contractPath:"contracts/workspace-intelligence/agent-hooks.v1.json",producerCommands:[["workspace","agent-sync"]]},infraPlan:{artifactPath:".workspai/reports/infra-plan.json",schemaVersion:"rapidkit.infra-plan.v1",contractPath:"contracts/infra-plan.v1.json",producerCommands:[["infra","plan"]]}},l=Object.freeze(Object.fromEntries(Object.entries(n).map(([a,s])=>[a,s.artifactPath]))),k={[o.intelligenceRun]:[["workspace","intelligence","run"]],[o.snapshot]:[["workspace","snapshot"]],[o.history]:[["workspace","feedback","record","--json"]],[o.evaluationLive]:[["workspace","eval","init"],["workspace","eval","record","--json"]],[o.evaluationLastRun]:[["workspace","eval","report","--json"]],[o.verifiedGoalStatus]:[["workspace","goal","plan"],["workspace","goal","verify"]],[o.repairTransaction]:[["workspace","repair","plan"],["workspace","repair","propose"],["workspace","repair","approve"],["workspace","repair","decide"],["workspace","repair","execute"],["workspace","repair","resume"],["workspace","repair","rollback"],["workspace","repair","cancel"]]},d={analyze:"analyze",workspace:"workspace <action> [subaction] [key] [value]",doctor:"doctor [scope]",readiness:"readiness"},w=["analyze","readiness","doctor","workspace"],m=["model","diff","impact","doctor-evidence","contract-evidence","analyze-evidence","readiness-evidence","verify","context","agent-sync","explain"],v=["sync","baseline"],u={sync:[".workspai/workspace.contract.json",".workspai/workspace-registry.v1.json"],baseline:[o.snapshot]},e=o,c={model:{command:["workspace","model","--json","--write"],produces:[e.model,e.knowledgeGraph]},diff:{command:["workspace","diff","--from",e.snapshot,"--json"],produces:[e.diff]},impact:{command:["workspace","impact","--from",e.diff,"--json"],produces:[e.impact]},"doctor-evidence":{command:["doctor","workspace","--json"],produces:[e.doctor]},"contract-evidence":{command:["workspace","contract","verify","--strict","--json"],produces:[e.contractVerify]},"analyze-evidence":{command:["analyze","--json"],produces:[e.analyze]},"readiness-evidence":{command:["readiness","--json","--skip-verify"],produces:[e.readiness]},verify:{command:["workspace","verify","--from-impact",e.impact,"--json"],produces:[e.verify,e.history]},context:{command:["workspace","context","--for-agent","--json","--write","--no-agent-sync"],produces:[e.agentContext]},"agent-sync":{command:["workspace","agent-sync","--write","--json","--preset","enterprise"],produces:[e.agentIndex,e.agentCustomizationPack,e.skillsIndex,e.agents]},explain:{command:["workspace","explain","release-blocked","--json","--write"],produces:[e.explain]}};function g(a){return c[a]}export{o as a,r as b,t as c,n as d,l as e,k as f,d as g,w as h,m as i,v as j,u as k,c as l,g as m};
@@ -1 +0,0 @@
1
- import {d}from'./chunk-44VJHNZB.js';var _=d.artifactRemediationPlan.schemaVersion;export{_ as a};