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.
- package/README.md +36 -8
- package/contracts/adopt-effects.v1.json +72 -0
- package/contracts/artifact-remediation-plan.v1.json +110 -2
- package/contracts/cli-runtime-command-inventory.v1.snapshot.json +33 -1
- package/contracts/doctor-project-evidence.v1.json +95 -2
- package/contracts/doctor-remediation-plan.v1.json +29 -2
- package/contracts/doctor-workspace-evidence.v1.json +97 -2
- package/contracts/extension-cli-compatibility.v1.json +7 -1
- package/contracts/published-contract-catalog.v1.json +30 -0
- package/contracts/runtime-command-surface.v1.json +63 -0
- package/contracts/workspace-intelligence/doctor-capabilities.v1.json +133 -0
- package/contracts/workspace-intelligence/doctor-diagnosis.v1.json +273 -0
- package/contracts/workspace-intelligence/doctor-graph-diagnosis.v1.json +3 -0
- package/contracts/workspace-intelligence/doctor-receipt.v1.json +136 -0
- package/contracts/workspace-intelligence/doctor-summary.v1.json +101 -0
- package/contracts/workspace-intelligence/doctor-validation.v1.json +109 -0
- package/contracts/workspace-intelligence/project-context-agent.v1.json +110 -0
- package/contracts/workspace-intelligence/studio-blocker-handoff.v1.json +25 -0
- package/contracts/workspace-intelligence/workspace-knowledge-graph.v1.json +36 -0
- package/contracts/workspace-intelligence/workspace-knowledge-search.v1.json +54 -0
- package/dist/analyze-HJ774J3E.js +1 -0
- package/dist/{artifact-remediation-plan-O3YIULQN.js → artifact-remediation-plan-BPLON5VX.js} +1 -1
- package/dist/autopilot-release-WIFFFQKW.js +1 -0
- package/dist/capabilities-command-44JVOE5S.js +1 -0
- package/dist/chunk-2647BYBC.js +1 -0
- package/dist/chunk-3U4VLIGW.js +1 -0
- package/dist/chunk-5EPPPMAS.js +1 -0
- package/dist/{chunk-AMB42V2F.js → chunk-64JUYYRC.js} +1 -1
- package/dist/chunk-6OFGLNFS.js +1 -0
- package/dist/chunk-75HOCFNH.js +1 -0
- package/dist/{chunk-M5ICGR55.js → chunk-7WUT5ZSO.js} +1 -1
- package/dist/chunk-AA4PNQKR.js +1 -0
- package/dist/{chunk-WIO6L24E.js → chunk-ADL3CK44.js} +1 -1
- package/dist/chunk-AO2ZI42U.js +4 -0
- package/dist/chunk-CNWUIXF3.js +1 -0
- package/dist/chunk-D4RST2HE.js +1 -0
- package/dist/chunk-DF4NWPB7.js +8 -0
- package/dist/chunk-DT4X7I5M.js +81 -0
- package/dist/{chunk-HY3RMPW5.js → chunk-E53BGUOW.js} +1 -1
- package/dist/chunk-GBMCHFOV.js +1 -0
- package/dist/chunk-GDKFN3CM.js +8 -0
- package/dist/chunk-GTJY55QK.js +5 -0
- package/dist/chunk-GXTCU4WF.js +1 -0
- package/dist/{chunk-WSAFBPS5.js → chunk-IUYZ3NHS.js} +4 -4
- package/dist/chunk-IXOLHPTN.js +6 -0
- package/dist/chunk-IZLEMTES.js +1 -0
- package/dist/chunk-L36ZASME.js +1 -0
- package/dist/chunk-LYVDRRDO.js +2 -0
- package/dist/chunk-N2BIIUDH.js +4 -0
- package/dist/{chunk-IBPPMOHM.js → chunk-NHTLE3WN.js} +1 -1
- package/dist/chunk-NS53IPAC.js +1 -0
- package/dist/{chunk-NWQ5VWUW.js → chunk-P475BOJW.js} +1 -1
- package/dist/chunk-PKIRVQLG.js +1 -0
- package/dist/chunk-QHY6F4SS.js +2 -0
- package/dist/chunk-QK5QOXOE.js +13 -0
- package/dist/chunk-RPHM7LQW.js +36 -0
- package/dist/chunk-SNO3WG4V.js +2 -0
- package/dist/chunk-T5YRFRJV.js +1 -0
- package/dist/chunk-TTFQWH55.js +91 -0
- package/dist/chunk-UQEQ6CXU.js +1 -0
- package/dist/chunk-V5EYVQ63.js +1 -0
- package/dist/{chunk-HUPLAFZQ.js → chunk-VL3APTVB.js} +1 -1
- package/dist/chunk-VUR7H2FU.js +2 -0
- package/dist/chunk-VZPWIILU.js +1 -0
- package/dist/{chunk-MRFN5ZQP.js → chunk-W5ZFXKSL.js} +1 -1
- package/dist/chunk-WP3CXMVA.js +2 -0
- package/dist/chunk-X7FYEKLI.js +1 -0
- package/dist/{chunk-KFKZOPZC.js → chunk-XMTLKDPP.js} +1 -1
- package/dist/chunk-YJTEMJFV.js +3 -0
- package/dist/chunk-YM77FQB3.js +8 -0
- package/dist/{chunk-FZCYTRBQ.js → chunk-Z57G62KE.js} +1 -1
- package/dist/chunk-ZCPT6KC3.js +6 -0
- package/dist/chunk-ZPA6ECBJ.js +7 -0
- package/dist/{create-3NSOY7CA.js → create-O2KLTN5H.js} +1 -1
- package/dist/doctor-AL5YWO5X.js +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +169 -167
- package/dist/pipeline-4ST4BQWY.js +5 -0
- package/dist/{project-intelligence-lens-ZOAWXYC5.js → project-intelligence-lens-JHYECYOK.js} +1 -1
- package/dist/project-test-coverage-FRMVYTFB.js +1 -0
- package/dist/verified-goal-KFNRGOKT.js +1 -0
- package/dist/{workspace-C4UETGY7.js → workspace-O4E5CCGK.js} +1 -1
- package/dist/{workspace-agent-sync-446AXPHJ.js → workspace-agent-sync-N5DPGU2E.js} +1 -1
- package/dist/{workspace-archive-VHUPOBAV.js → workspace-archive-BA3ONVXX.js} +1 -1
- package/dist/{workspace-context-XSECHC7O.js → workspace-context-ETZNEHOJ.js} +1 -1
- package/dist/workspace-contract-OSI7NBXS.js +1 -0
- package/dist/workspace-explain-EM7IUV6L.js +1 -0
- package/dist/workspace-explain-contract-KVQO57RC.js +1 -0
- package/dist/{workspace-feedback-WXE7NVMV.js → workspace-feedback-PCZKXG5R.js} +1 -1
- package/dist/{workspace-foundation-3EVAQ5X6.js → workspace-foundation-QQHX66KE.js} +1 -1
- package/dist/{workspace-graph-stream-AJPS45FD.js → workspace-graph-stream-UZJQ75XZ.js} +1 -1
- package/dist/workspace-graph-token-efficiency-TF23UYEF.js +1 -0
- package/dist/{workspace-history-YY7YRDOH.js → workspace-history-CHJOABME.js} +1 -1
- package/dist/{workspace-intelligence-FWRB47EJ.js → workspace-intelligence-A7O7MN6T.js} +1 -1
- package/dist/workspace-intelligence-evaluation-YMY3C5AW.js +1 -0
- package/dist/{workspace-intelligence-runner-SMEAB4CO.js → workspace-intelligence-runner-4EF66L66.js} +1 -1
- package/dist/workspace-intelligence-runtime-registry-NCVHKCMP.js +1 -0
- package/dist/workspace-knowledge-graph-BVN4NTJ6.js +1 -0
- package/dist/{workspace-knowledge-graph-query-EKHIE3E2.js → workspace-knowledge-graph-query-6DAOXGGT.js} +1 -1
- package/dist/workspace-knowledge-graph-snapshot-XSQADCNR.js +1 -0
- package/dist/workspace-mcp-serve-TKX4J3SX.js +3 -0
- package/dist/{workspace-model-MNJOGBPP.js → workspace-model-7ESEP366.js} +1 -1
- package/dist/{workspace-onboarding-5KO7Z7AD.js → workspace-onboarding-SY255V7L.js} +1 -1
- package/dist/{workspace-readme-4S6PJ74A.js → workspace-readme-IVJXSIBS.js} +1 -1
- package/dist/{workspace-registry-summary-GPJEL7K7.js → workspace-registry-summary-7ISKYEPM.js} +1 -1
- package/dist/workspace-repair-engine-GMA2YTCF.js +3 -0
- package/dist/workspace-run-ZZXVNFUS.js +1 -0
- package/dist/{workspace-verify-C6HWHRLJ.js → workspace-verify-CNXZPWS5.js} +1 -1
- package/dist/{workspace-watch-DLPHLF5R.js → workspace-watch-HGFL2EU3.js} +1 -1
- package/docs/From Code to Shared Understanding-B.png +0 -0
- package/docs/From Code to Shared Understanding.png +0 -0
- package/docs/README_CONTENT_CONTRACT.md +25 -12
- package/docs/ci-workflows.md +9 -1
- package/docs/commands-reference.md +36 -7
- package/docs/contracts/ARTIFACT_CATALOG.md +6 -1
- package/docs/contracts/README.md +21 -12
- package/docs/doctor-command.md +189 -14
- package/docs/from-code-to-shared-understanding.md +22 -17
- package/docs/graph-benchmark-methodology.md +13 -0
- package/docs/real-world-qualification.md +73 -0
- package/docs/workspace-intelligence-runner.md +4 -0
- package/docs/workspace-knowledge-graph.md +77 -7
- package/docs/workspace-operations.md +14 -2
- package/docs/workspace-run.md +30 -7
- package/package.json +14 -3
- package/dist/analyze-AAZEJ4FC.js +0 -1
- package/dist/autopilot-release-3H5FTF6H.js +0 -1
- package/dist/chunk-2PY65U6X.js +0 -5
- package/dist/chunk-3DONU3DU.js +0 -1
- package/dist/chunk-44VJHNZB.js +0 -1
- package/dist/chunk-5XDPQ3CB.js +0 -1
- package/dist/chunk-6HJJHEL6.js +0 -2
- package/dist/chunk-7AR5PDLD.js +0 -1
- package/dist/chunk-7KKP7RNB.js +0 -3
- package/dist/chunk-7S4QNH5A.js +0 -5
- package/dist/chunk-7T4TSV5C.js +0 -1
- package/dist/chunk-BYVTHIC3.js +0 -2
- package/dist/chunk-CEIJIFY7.js +0 -88
- package/dist/chunk-D37NEYV6.js +0 -1
- package/dist/chunk-DPMO4U3Z.js +0 -8
- package/dist/chunk-DS4UYMLX.js +0 -1
- package/dist/chunk-FQLB4BIC.js +0 -7
- package/dist/chunk-GDU7VP6G.js +0 -1
- package/dist/chunk-H7P7SSUW.js +0 -75
- package/dist/chunk-KVUYAYTY.js +0 -8
- package/dist/chunk-MQ73VS4E.js +0 -2
- package/dist/chunk-NYHVCFBT.js +0 -1
- package/dist/chunk-OUBBBC7T.js +0 -36
- package/dist/chunk-P7K5RHJC.js +0 -2
- package/dist/chunk-PS5F4DCT.js +0 -1
- package/dist/chunk-QZ7PNMVP.js +0 -1
- package/dist/chunk-RA24WQLF.js +0 -1
- package/dist/chunk-RMXXK64P.js +0 -4
- package/dist/chunk-S7Z4DP3P.js +0 -2
- package/dist/chunk-SJLUE6AY.js +0 -1
- package/dist/chunk-TEHQ7XKK.js +0 -3
- package/dist/chunk-UFOCUHG3.js +0 -1
- package/dist/chunk-WD2XDMGB.js +0 -1
- package/dist/chunk-XVRJVKOX.js +0 -1
- package/dist/chunk-YTLUT6IA.js +0 -13
- package/dist/doctor-UEFFNAUD.js +0 -1
- package/dist/pipeline-B5S6P36F.js +0 -5
- package/dist/project-test-coverage-44ZPCOPV.js +0 -1
- package/dist/verified-goal-KOU3WJYN.js +0 -1
- package/dist/workspace-contract-AYFTZIKM.js +0 -1
- package/dist/workspace-explain-ZEWVKDBF.js +0 -1
- package/dist/workspace-explain-contract-6CCC26QT.js +0 -1
- package/dist/workspace-graph-token-efficiency-5FNH4JZ5.js +0 -1
- package/dist/workspace-intelligence-evaluation-UP2K3L35.js +0 -1
- package/dist/workspace-intelligence-runtime-registry-MRSF7RTT.js +0 -1
- package/dist/workspace-knowledge-graph-BMMM2FUE.js +0 -1
- package/dist/workspace-mcp-serve-X6C3AWTA.js +0 -3
- package/dist/workspace-repair-engine-GWTXVVKB.js +0 -3
- 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
|
-
|
|
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.
|
|
386
|
-
|
|
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
|
package/docs/workspace-run.md
CHANGED
|
@@ -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
|
-
|
|
25
|
-
|
|
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
|
|
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>`
|
|
98
|
-
| `init`, `test`, `build`, `start`, `dev` (inside project dir)
|
|
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.
|
|
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:
|
|
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"
|
package/dist/analyze-AAZEJ4FC.js
DELETED
|
@@ -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';
|
package/dist/chunk-2PY65U6X.js
DELETED
|
@@ -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};
|
package/dist/chunk-3DONU3DU.js
DELETED
|
@@ -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};
|
package/dist/chunk-44VJHNZB.js
DELETED
|
@@ -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};
|
package/dist/chunk-5XDPQ3CB.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {d}from'./chunk-44VJHNZB.js';var _=d.artifactRemediationPlan.schemaVersion;export{_ as a};
|