workspai 0.43.0 → 0.44.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 (173) hide show
  1. package/README.md +26 -13
  2. package/contracts/agent-customization-pack.v1.json +1 -1
  3. package/contracts/autopilot-release.v1.json +204 -0
  4. package/contracts/cli-operation-result.v1.json +119 -0
  5. package/contracts/command-capabilities.v1.json +138 -0
  6. package/contracts/compatibility-matrix.v1.json +37 -0
  7. package/contracts/create-planner-capabilities.v1.json +156 -65
  8. package/contracts/doctor-project-scan.v2.json +60 -0
  9. package/contracts/doctor-remediation-plan.v1.json +19 -4
  10. package/contracts/doctor-remediation-plan.v2.json +7 -0
  11. package/contracts/doctor-workspace-cache.v2.json +82 -0
  12. package/contracts/extension-cli-compatibility.v1.json +47 -3
  13. package/contracts/infra-plan.v1.json +189 -0
  14. package/contracts/private-product-manifest.v1.json +155 -0
  15. package/contracts/product-factory-plan.v1.json +200 -0
  16. package/contracts/project-archive.v1.json +40 -0
  17. package/contracts/project-entry-capability.v1.json +127 -0
  18. package/contracts/published-contract-catalog.v1.json +334 -0
  19. package/contracts/runtime-command-surface.v1.json +239 -10
  20. package/contracts/version.v1.json +48 -0
  21. package/contracts/workspace-archive-capabilities.v1.json +90 -0
  22. package/contracts/workspace-archive-manifest.v1.json +107 -0
  23. package/contracts/workspace-archive-operation-result.v1.json +565 -0
  24. package/contracts/workspace-intelligence/agent-customization-pack-report.v1.json +98 -0
  25. package/contracts/workspace-intelligence/agent-hooks.v1.json +38 -0
  26. package/contracts/workspace-intelligence/agent-reports-index.v1.json +56 -0
  27. package/contracts/workspace-intelligence/mcp-design.v1.json +42 -0
  28. package/contracts/workspace-intelligence/workspace-context.v1.json +12 -0
  29. package/contracts/workspace-intelligence/workspace-explain.v1.json +1 -0
  30. package/contracts/workspace-intelligence-architecture.v1.json +723 -0
  31. package/contracts/workspace-intelligence-chain.v1.json +1194 -0
  32. package/contracts/workspace-list.v1.json +56 -0
  33. package/contracts/workspace-model-cache.v1.json +55 -0
  34. package/contracts/workspace-snapshot.v1.json +58 -0
  35. package/contracts/workspace-snapshot.v2.json +97 -0
  36. package/contracts/workspace-sync.v1.json +30 -0
  37. package/contracts/workspace-watch-event.v1.json +112 -0
  38. package/dist/analyze-6OCBM4ID.js +1 -0
  39. package/dist/{artifact-remediation-plan-5GJWPPRS.js → artifact-remediation-plan-Z7OCSME3.js} +3 -3
  40. package/dist/autopilot-release-LI2WJCEW.js +1 -0
  41. package/dist/{chunk-LZQNVH7D.js → chunk-2K3GYCPS.js} +1 -1
  42. package/dist/chunk-2QN6BMM7.js +2 -0
  43. package/dist/chunk-2QOWRBQD.js +1 -0
  44. package/dist/chunk-5AKYMAIL.js +1 -0
  45. package/dist/{chunk-RE773WOX.js → chunk-5PVEQ6CZ.js} +5 -5
  46. package/dist/{chunk-AFSZHLQT.js → chunk-7EIMPQR3.js} +1 -1
  47. package/dist/{chunk-3KXW53QI.js → chunk-7IHLTPZ6.js} +1 -1
  48. package/dist/chunk-7RIWU5TZ.js +1 -0
  49. package/dist/{chunk-T6OR6YOI.js → chunk-7UZVOYF5.js} +1 -1
  50. package/dist/chunk-B66A4TVP.js +1 -0
  51. package/dist/chunk-CL6TGI4Q.js +8 -0
  52. package/dist/chunk-FWJV7CCI.js +2 -0
  53. package/dist/chunk-J4AICQFB.js +1 -0
  54. package/dist/chunk-JICOD2GI.js +1 -0
  55. package/dist/{chunk-OJEWQO3Z.js → chunk-JP25YL3J.js} +17 -17
  56. package/dist/chunk-L2Q7B2OJ.js +1 -0
  57. package/dist/chunk-L3E6IRUQ.js +8 -0
  58. package/dist/chunk-LG6RFLPZ.js +1 -0
  59. package/dist/chunk-LGP6WXS2.js +4 -0
  60. package/dist/{chunk-VRDF2J46.js → chunk-M4VITK6X.js} +52 -50
  61. package/dist/chunk-NTXO7BMH.js +4 -0
  62. package/dist/{chunk-LPZFK3Y6.js → chunk-OW4UNG27.js} +65 -66
  63. package/dist/{chunk-LUP4U6EE.js → chunk-P424XYHP.js} +1 -1
  64. package/dist/chunk-P4SWTY5X.js +33 -0
  65. package/dist/chunk-TQEMLBAG.js +1 -0
  66. package/dist/chunk-TRMDODFM.js +13 -0
  67. package/dist/chunk-UNF72FTB.js +1 -0
  68. package/dist/chunk-V5JN4TDX.js +2 -0
  69. package/dist/chunk-VA5MRHKM.js +2 -0
  70. package/dist/chunk-XIVFLY6G.js +1 -0
  71. package/dist/chunk-YUX4YFGL.js +78 -0
  72. package/dist/{create-WRZO4HK2.js → create-DFAWAS5C.js} +1 -1
  73. package/dist/demo-kit-DZ7TPG7K.js +149 -0
  74. package/dist/doctor-PVSWDBJL.js +1 -0
  75. package/dist/{dotnet-webapi-clean-IPY3MCGQ.js → dotnet-webapi-clean-BYUUHX5Y.js} +20 -20
  76. package/dist/{gofiber-standard-N5N3QGH3.js → gofiber-standard-B6UK5GR7.js} +31 -31
  77. package/dist/{gogin-standard-LAWQTBWL.js → gogin-standard-BXU44VEM.js} +31 -31
  78. package/dist/index.d.ts +250 -24
  79. package/dist/index.js +218 -182
  80. package/dist/pipeline-ND734AJM.js +5 -0
  81. package/dist/{platform-capabilities-XAVU4HSM.js → platform-capabilities-YICBF4FA.js} +1 -1
  82. package/dist/{pythonRapidkitExec-3L3XJBSY.js → pythonRapidkitExec-UJYIB6FL.js} +1 -1
  83. package/dist/{springboot-standard-OZYF7ZM7.js → springboot-standard-PEHDKH2L.js} +27 -27
  84. package/dist/{workspace-PR6VZRBG.js → workspace-FQT3QIRS.js} +1 -1
  85. package/dist/workspace-agent-sync-ZYCPXTU3.js +1 -0
  86. package/dist/workspace-archive-EEGLHZDW.js +10 -0
  87. package/dist/workspace-context-WAGGJCDL.js +1 -0
  88. package/dist/{workspace-contract-XUGMCUSQ.js → workspace-contract-SEI4SNSG.js} +1 -1
  89. package/dist/workspace-explain-MVGGRCDN.js +1 -0
  90. package/dist/workspace-explain-contract-KT757JGQ.js +1 -0
  91. package/dist/{workspace-feedback-R6H4UFZB.js → workspace-feedback-RCB25NFO.js} +1 -1
  92. package/dist/{workspace-foundation-KGSV4E6D.js → workspace-foundation-KXDL6P6X.js} +1 -1
  93. package/dist/{workspace-history-CGCK2DJI.js → workspace-history-M4QQBIPB.js} +1 -1
  94. package/dist/workspace-intelligence-QOGD2TZS.js +1 -0
  95. package/dist/workspace-mcp-serve-CEFKEMYG.js +3 -0
  96. package/dist/{workspace-model-PNXXOGPO.js → workspace-model-GMSRBICO.js} +1 -1
  97. package/dist/workspace-registry-summary-S52SEJAG.js +1 -0
  98. package/dist/workspace-run-VC4OUPRF.js +1 -0
  99. package/dist/{workspace-verify-WSDUUTR5.js → workspace-verify-NP4GMFSV.js} +1 -1
  100. package/dist/workspace-watch-IIBH3Y25.js +1 -0
  101. package/docs/AI_FEATURES.md +67 -34
  102. package/docs/README.md +2 -1
  103. package/docs/commands-reference.md +26 -14
  104. package/docs/contracts/ARTIFACT_CATALOG.md +60 -36
  105. package/docs/contracts/README.md +3 -2
  106. package/docs/create-planner-capabilities.md +36 -18
  107. package/docs/workspace-operations.md +25 -0
  108. package/package.json +35 -13
  109. package/scripts/enterprise-package-smoke.mjs +40 -8
  110. package/scripts/prepack-enterprise.mjs +8 -0
  111. package/templates/kits/fastapi-ddd/.gitignore.j2 +11 -0
  112. package/templates/kits/fastapi-ddd/README.md.j2 +23 -18
  113. package/templates/kits/fastapi-ddd/common/env.example.j2 +2 -2
  114. package/templates/kits/fastapi-ddd/pyproject.toml.j2 +7 -7
  115. package/templates/kits/fastapi-ddd/src/app/config/__init__.py.j2 +1 -1
  116. package/templates/kits/fastapi-ddd/src/cli.py.j2 +6 -9
  117. package/templates/kits/fastapi-ddd/src/main.py.j2 +1 -1
  118. package/templates/kits/fastapi-standard/.gitignore.j2 +11 -0
  119. package/templates/kits/fastapi-standard/README.md.j2 +35 -30
  120. package/templates/kits/fastapi-standard/common/env.example.j2 +2 -2
  121. package/templates/kits/fastapi-standard/pyproject.toml.j2 +7 -7
  122. package/templates/kits/fastapi-standard/src/cli.py.j2 +7 -10
  123. package/templates/kits/fastapi-standard/src/main.py.j2 +1 -1
  124. package/templates/kits/fastapi-standard/src/routing/examples.py.j2 +1 -1
  125. package/templates/kits/fastapi-standard/tests/test_examples.py.j2 +1 -1
  126. package/templates/kits/nestjs-standard/.dockerignore.j2 +11 -0
  127. package/templates/kits/nestjs-standard/.eslintrc.js.j2 +25 -0
  128. package/templates/kits/nestjs-standard/.gitignore.j2 +22 -0
  129. package/templates/kits/nestjs-standard/.node-version.j2 +1 -0
  130. package/templates/kits/nestjs-standard/.nvmrc.j2 +1 -0
  131. package/templates/kits/nestjs-standard/.prettierrc.j2 +7 -0
  132. package/templates/kits/nestjs-standard/README.md.j2 +23 -18
  133. package/templates/kits/nestjs-standard/docs/README.md.j2 +2 -2
  134. package/templates/kits/nestjs-standard/jest.config.ts.j2 +1 -7
  135. package/templates/kits/nestjs-standard/package.json.j2 +1 -1
  136. package/templates/kits/nestjs-standard/src/config/configuration.ts.j2 +4 -4
  137. package/templates/kits/nestjs-standard/src/main.ts.j2 +1 -1
  138. package/templates/kits/nestjs-standard/src/modules/index.ts.j2 +1 -1
  139. package/templates/kits/nestjs-standard/tsconfig.build.json.j2 +1 -1
  140. package/templates/kits/nestjs-standard/tsconfig.json.j2 +1 -1
  141. package/dist/analyze-5BU4QIPK.js +0 -1
  142. package/dist/autopilot-release-QYUOVB26.js +0 -1
  143. package/dist/chunk-54XJNLYC.js +0 -13
  144. package/dist/chunk-5SWNSJGW.js +0 -1
  145. package/dist/chunk-753LOKFZ.js +0 -2
  146. package/dist/chunk-AAKUNWPR.js +0 -78
  147. package/dist/chunk-AQ4XZZC6.js +0 -1
  148. package/dist/chunk-CVTCPPEF.js +0 -1
  149. package/dist/chunk-DNAY5ALC.js +0 -1
  150. package/dist/chunk-EWYYLJQY.js +0 -2
  151. package/dist/chunk-LO4C4VXR.js +0 -4
  152. package/dist/chunk-LYC6AIF2.js +0 -2
  153. package/dist/chunk-NAAQMSO3.js +0 -1
  154. package/dist/chunk-NFUXULIF.js +0 -1
  155. package/dist/chunk-OL64GWQC.js +0 -9
  156. package/dist/chunk-PI5KUXDA.js +0 -7
  157. package/dist/chunk-SI3AQKIP.js +0 -1
  158. package/dist/chunk-VZKSNUEE.js +0 -2
  159. package/dist/chunk-WU4ZRRA5.js +0 -4
  160. package/dist/chunk-XEJD4KCV.js +0 -33
  161. package/dist/demo-kit-AJ5LIM5G.js +0 -149
  162. package/dist/doctor-MF3M3FS3.js +0 -1
  163. package/dist/pipeline-QCUHFWDY.js +0 -5
  164. package/dist/workspace-agent-sync-KTYF3HQR.js +0 -1
  165. package/dist/workspace-archive-GCZNI44O.js +0 -3
  166. package/dist/workspace-context-QUTOP2XV.js +0 -1
  167. package/dist/workspace-explain-JEONEGZZ.js +0 -1
  168. package/dist/workspace-explain-contract-DNS2YEL7.js +0 -1
  169. package/dist/workspace-intelligence-QJGVL37U.js +0 -1
  170. package/dist/workspace-mcp-serve-AK4MYEHQ.js +0 -3
  171. package/dist/workspace-registry-summary-RUJE6RPH.js +0 -1
  172. package/dist/workspace-run-Y7YMUIHX.js +0 -1
  173. package/dist/workspace-watch-AGPOJ74Q.js +0 -1
@@ -6,31 +6,40 @@ CI, and AI agents share the same expectations.
6
6
 
7
7
  ## Lanes
8
8
 
9
- | Lane | Status | Meaning |
10
- | ----------------------- | --------- | --------------------------------------------------------------------------------------------------- |
11
- | `native-create` | Available | Workspai owns the scaffold contract, marker, registry, doctor, bootstrap, and workspace model path. |
12
- | `external-create-adopt` | Planned | A stable ecosystem generator exists, but Workspai does not yet own the full post-create contract. |
13
- | `adopt-only` | Available | The project enters Workspace Intelligence through import/adopt, not native create. |
9
+ | Lane | Status | Meaning |
10
+ | ---------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
11
+ | `native` | Available | Workspai owns the scaffold contract, marker, registry, doctor, bootstrap, and workspace model path. |
12
+ | `official` | Available | A stable ecosystem generator exists. Available entries run the official generator and register the project; planned entries fall back to adopt. |
13
+ | `existing` | Available | The project enters Workspace Intelligence through import/adopt, not native create. |
14
14
 
15
15
  ## Native create
16
16
 
17
- Native create is reserved for kits with deterministic Workspai contracts:
17
+ Native create is reserved for Workspai-owned kits with deterministic contracts:
18
18
 
19
19
  - FastAPI
20
20
  - NestJS
21
21
  - Go Fiber and Go Gin
22
22
  - Spring Boot
23
23
  - ASP.NET Core Web API
24
- - Frontend kits (`frontend.nextjs`, `frontend.vite-react`, `frontend.angular`, and related frontend generators)
25
24
 
26
25
  These kits can be exposed through `workspai create project` because Workspai can
27
26
  create the project and immediately produce the expected `.workspai` metadata,
28
27
  workspace registry entries, doctor evidence, and workspace model data.
29
28
 
30
- ## External create, then adopt
29
+ ## Official generators
31
30
 
32
- Some ecosystems have stable external commands but are not RapidKit-native create
33
- targets yet:
31
+ Some ecosystems have stable official generators. Available entries are invoked
32
+ by Workspai and then registered in Workspace Intelligence:
33
+
34
+ - Next.js: `npx create-next-app@latest <name>`
35
+ - React Router: `npx create-react-router@latest <name>`
36
+ - React, Vue, Svelte, Solid, and Vite: `npm create vite@latest <name> ...`
37
+ - Nuxt: `npx create-nuxt@latest <name> ...`
38
+ - Angular: `npx @angular/cli@19 new <name>`
39
+ - Astro: `npm create astro@4 <name>`
40
+ - SvelteKit: `npx sv@latest create <name>`
41
+
42
+ Other ecosystems are planned official handoffs but are not automated yet:
34
43
 
35
44
  - WordPress site: `wp core download`, `wp config create`, `wp db create`, `wp core install`
36
45
  - WordPress block/plugin: `npx @wordpress/create-block@latest <slug>`
@@ -38,14 +47,19 @@ targets yet:
38
47
  - Symfony: `composer create-project symfony/skeleton <name>`
39
48
  - Rails: `rails new <name>`
40
49
 
41
- These are `external-create-adopt` candidates, not active native kits. Until the
50
+ These are `official` candidates, not active native kits. Until each planned
42
51
  post-create contract is implemented end to end, Workspai should guide users to
43
52
  create externally and then adopt/import the project.
44
53
 
45
54
  ## Adopt only
46
55
 
47
56
  If a project already exists, or if the requested runtime has no Workspai-owned
48
- create contract, the correct lane is `adopt-only`.
57
+ create contract, the correct lane is `existing`.
58
+
59
+ The runtime names in the create planner are detection signals, not an allowlist.
60
+ Adopt/import is intentionally open-ended for readable projects that can be
61
+ registered and modeled. A project does not need to be PHP, Ruby, Rust, Elixir,
62
+ Clojure, Scala, or Kotlin to enter Workspace Intelligence.
49
63
 
50
64
  Adoption still gives the project Workspace Intelligence:
51
65
 
@@ -61,19 +75,23 @@ Do not convert an unsupported or ambiguous stack request into a different native
61
75
  kit. For example, a PHP, WordPress, Laravel, Symfony, or Rails request must not
62
76
  be translated into FastAPI, NestJS, Go, Java, .NET, or a frontend kit.
63
77
 
64
- If native create is unavailable, the planner should explain the supported lane
65
- and guide the user to `adopt-only` or a future `external-create-adopt` flow.
78
+ If executable create is unavailable, the planner should explain the supported
79
+ lane and guide the user to `existing` or a future `official` flow.
66
80
 
67
81
  ## CLI guard
68
82
 
69
83
  `workspai create project <kit> <name>` must check the capability lane before
70
- running any native generator or delegating to the Core engine.
84
+ running any native kit, official generator, or Core engine handoff.
85
+
86
+ If the request resolves to an available `official` generator, the CLI may run
87
+ that ecosystem generator and then register the project in Workspace
88
+ Intelligence.
71
89
 
72
- If the request resolves to `external-create-adopt` or an explicit `adopt-only`
73
- runtime, the CLI must stop early and explain:
90
+ If the request resolves to a planned `official` handoff or an explicit
91
+ `existing` runtime signal, the CLI must stop early and explain:
74
92
 
75
93
  - native create is not available yet for the requested stack
76
- - whether the future lane is `external-create-adopt` or current `adopt-only`
94
+ - whether the future lane is `official` or current `existing`
77
95
  - which external generator commands are relevant, when known
78
96
  - how to run `npx workspai adopt <project-path>` after the project exists
79
97
 
@@ -94,6 +94,13 @@ Contract file: `.workspai/workspace.contract.json`. Verification checks schema,
94
94
 
95
95
  Workspai keeps the contract alive during `create project` and `workspace sync` without overwriting manual API/event/owner declarations.
96
96
 
97
+ On a freshly cloned or moved workspace, `workspace sync` also repairs the
98
+ machine-local global registry entry before discovering projects. The command is
99
+ therefore safe to use as the first reconciliation step after clone. For a
100
+ legacy workspace, run `workspace foundation ensure` once to add canonical
101
+ `.workspai-workspace` and `.workspai/*` foundation files while retaining legacy
102
+ metadata as read compatibility input.
103
+
97
104
  ## Portable workspace archives
98
105
 
99
106
  ```bash
@@ -106,6 +113,24 @@ npx workspai workspace hydrate team-workspace.workspai-archive.zip --output ./te
106
113
 
107
114
  Export excludes dependency folders, build output, git history, logs, `.env`, and private keys by default. Use `--include-env` only for trusted internal handoffs. Hydrate accepts legacy `.rapidkit-workspace` and `.rapidkit/*` archive entries, but restores them as canonical `.workspai-workspace` and `.workspai/*` paths.
108
115
 
116
+ Archive export, verification, and hydrate stream file payloads instead of loading the workspace into memory. Exports use ZIP64, so multi-gigabyte workspaces and archives with more than 65,535 files are supported. Stored ZIP entries are the default; use `--archive-compression deflate` when transfer size matters more than export CPU time.
117
+
118
+ Workspace size is unrestricted by default. For untrusted remote archives, optional operational budgets can be set without imposing a product-wide workspace limit:
119
+
120
+ ```bash
121
+ npx workspai workspace hydrate https://example.test/team.zip \
122
+ --output ./team-workspace \
123
+ --max-download-size 100gb \
124
+ --max-expanded-size 500gb \
125
+ --download-timeout-ms 21600000
126
+ ```
127
+
128
+ IDE, CI, and AI consumers can discover archive behavior from
129
+ `contracts/workspace-archive-capabilities.v1.json`. The embedded manifest and every successful
130
+ `--json` operation result are runtime-validated against
131
+ `contracts/workspace-archive-manifest.v1.json` and
132
+ `contracts/workspace-archive-operation-result.v1.json`.
133
+
109
134
  ## Workspace infrastructure (sidecar)
110
135
 
111
136
  Discovery sources: Core module slugs, project `.env.example`, workspace contract env, and `.workspai/infra/overrides.json`.
package/package.json CHANGED
@@ -1,19 +1,29 @@
1
1
  {
2
2
  "name": "workspai",
3
- "version": "0.43.0",
3
+ "version": "0.44.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": [
7
- "rapidkit",
8
7
  "workspai",
8
+ "rapidkit",
9
+ "wspai",
9
10
  "ai",
10
11
  "cli",
12
+ "agents",
11
13
  "create",
12
14
  "workspace",
13
15
  "workspace-intelligence",
16
+ "workspace-ai",
17
+ "skills",
18
+ "model",
19
+ "graph",
20
+ "knowledge",
14
21
  "governance",
22
+ "AI-agents",
15
23
  "backend",
16
24
  "frontend",
25
+ "microservices",
26
+ "api",
17
27
  "fastapi",
18
28
  "nestjs",
19
29
  "nextjs",
@@ -22,8 +32,6 @@
22
32
  "spring",
23
33
  "gofiber",
24
34
  "gogin",
25
- "microservices",
26
- "api",
27
35
  "generator",
28
36
  "scaffold"
29
37
  ],
@@ -59,6 +67,7 @@
59
67
  "preinstall": "node scripts/enforce-package-manager.cjs",
60
68
  "postinstall": "node scripts/check-cli-resolution.cjs",
61
69
  "sync-kits": "bash scripts/sync-kits.sh",
70
+ "sync:kits": "corepack npm run sync-kits",
62
71
  "build": "tsup",
63
72
  "build:watch": "tsup --watch",
64
73
  "dev": "tsup --watch",
@@ -85,6 +94,9 @@
85
94
  "test:prepare-embeddings": "node scripts/prepare-mock-embeddings.mjs",
86
95
  "generate-embeddings": "npx tsx src/ai/generate-embeddings.ts",
87
96
  "verify:package-cli": "node scripts/verify-package-cli.mjs",
97
+ "check:workspace-intelligence-runtime": "node scripts/check-workspace-intelligence-runtime-conformance.mjs",
98
+ "check:workspace-intelligence-adversarial": "node scripts/check-workspace-intelligence-adversarial.mjs",
99
+ "check:windows-registry": "node scripts/check-windows-registry-invariants.mjs",
88
100
  "smoke:enterprise-package": "node scripts/enterprise-package-smoke.mjs",
89
101
  "prepack": "node scripts/prepack-enterprise.mjs",
90
102
  "test:e2e": "vitest run src/__tests__/e2e.test.ts",
@@ -99,8 +111,8 @@
99
111
  "format:check": "prettier --check \"src/**/*.ts\"",
100
112
  "typecheck": "tsc --noEmit",
101
113
  "validate": "corepack npm run typecheck && corepack npm run lint && corepack npm run format:check && corepack npm test",
102
- "security": "npm audit --audit-level=moderate",
103
- "security:fix": "npm audit fix",
114
+ "security": "corepack npm audit --audit-level=moderate",
115
+ "security:fix": "corepack npm audit fix",
104
116
  "metrics": "npx tsx scripts/metrics.ts",
105
117
  "validate:docs-examples": "node scripts/validate-doc-examples.mjs",
106
118
  "check:markdown-links": "node scripts/check-markdown-links.mjs",
@@ -115,15 +127,25 @@
115
127
  "analyze": "corepack npm run build && node scripts/analyze-dist.mjs",
116
128
  "size-check": "corepack npm run build && size-limit",
117
129
  "bench": "npx tsx scripts/benchmarks.ts",
118
- "quality": "corepack npm run typecheck && corepack npm run lint && corepack npm run format:check && corepack npm test && corepack npm run size-check && corepack npm run security && corepack npm run validate:docs && corepack npm run smoke:frontend-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",
130
+ "quality": "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 security && corepack npm run validate:docs && corepack npm run smoke:frontend-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",
119
131
  "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",
120
132
  "release:dry": "bash scripts/release.sh --no-publish --yes --allow-dirty",
121
133
  "release:patch": "bash scripts/release.sh patch",
122
134
  "release:minor": "bash scripts/release.sh minor",
123
- "release:major": "bash scripts/release.sh major"
135
+ "release:major": "bash scripts/release.sh major",
136
+ "check": "corepack npm run check:windows-registry && corepack npm run typecheck && corepack npm run lint && corepack npm run format:check",
137
+ "ci": "corepack npm run quality",
138
+ "contracts:sync": "corepack npm run sync:contracts && corepack npm run sync:shared-contracts",
139
+ "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",
140
+ "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",
141
+ "docs:validate": "corepack npm run validate:docs",
142
+ "smoke": "corepack npm run smoke:enterprise-package && corepack npm run smoke:readme && corepack npm run smoke:frontend-generators",
143
+ "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"
124
144
  },
125
145
  "dependencies": {
126
146
  "@clack/prompts": "^0.9.1",
147
+ "ajv": "^8.20.0",
148
+ "ajv-formats": "^3.0.1",
127
149
  "chalk": "^5.3.0",
128
150
  "cli-progress": "^3.12.0",
129
151
  "commander": "^12.1.0",
@@ -133,7 +155,9 @@
133
155
  "nunjucks": "^3.2.4",
134
156
  "openai": "^6.22.0",
135
157
  "ora": "^8.0.1",
136
- "validate-npm-package-name": "^5.0.1"
158
+ "validate-npm-package-name": "^5.0.1",
159
+ "yauzl": "^3.4.0",
160
+ "yazl": "^3.3.1"
137
161
  },
138
162
  "devDependencies": {
139
163
  "@eslint/eslintrc": "^3.3.3",
@@ -144,6 +168,8 @@
144
168
  "@types/node": "^20.14.0",
145
169
  "@types/nunjucks": "^3.2.6",
146
170
  "@types/validate-npm-package-name": "^4.0.2",
171
+ "@types/yauzl": "^2.10.3",
172
+ "@types/yazl": "^3.3.1",
147
173
  "@typescript-eslint/eslint-plugin": "^8.46.2",
148
174
  "@typescript-eslint/parser": "^8.46.2",
149
175
  "@vitest/coverage-v8": "^4.0.15",
@@ -171,9 +197,5 @@
171
197
  "prettier --write"
172
198
  ]
173
199
  },
174
- "overrides": {
175
- "minimatch": "^10.2.1",
176
- "esbuild": "^0.28.1"
177
- },
178
200
  "packageManager": "npm@10.8.2"
179
201
  }
@@ -182,6 +182,13 @@ function parseTrailingJsonArray(stdout) {
182
182
  const REQUIRED_PACKAGE_FILES = [
183
183
  'dist/index.js',
184
184
  'contracts/runtime-command-surface.v1.json',
185
+ 'contracts/workspace-archive-capabilities.v1.json',
186
+ 'contracts/workspace-archive-manifest.v1.json',
187
+ 'contracts/workspace-archive-operation-result.v1.json',
188
+ 'contracts/create-planner-capabilities.v1.json',
189
+ 'contracts/project-entry-capability.v1.json',
190
+ 'contracts/workspace-intelligence-architecture.v1.json',
191
+ 'contracts/workspace-intelligence-chain.v1.json',
185
192
  'contracts/extension-cli-compatibility.v1.json',
186
193
  'data/modules-embeddings.json',
187
194
  'templates/kits/fastapi-standard/README.md.j2',
@@ -193,10 +200,7 @@ const REQUIRED_PACKAGE_FILES = [
193
200
  'scripts/enforce-package-manager.cjs',
194
201
  ];
195
202
 
196
- const FORBIDDEN_PACKAGE_FILES = [
197
- 'workspai.config.example.js',
198
- 'rapidkit.config.example.js',
199
- ];
203
+ const FORBIDDEN_PACKAGE_FILES = ['workspai.config.example.js', 'rapidkit.config.example.js'];
200
204
 
201
205
  function isPublishedByFilesPolicy(packageJson, assetPath) {
202
206
  const files = packageJson.files ?? [];
@@ -223,7 +227,10 @@ function assertPackageFilesPolicy(requiredFiles) {
223
227
  assertFile(required);
224
228
  }
225
229
  for (const forbidden of FORBIDDEN_PACKAGE_FILES) {
226
- if (isPublishedByFilesPolicy(packageJson, forbidden) || fs.existsSync(path.join(repoRoot, forbidden))) {
230
+ if (
231
+ isPublishedByFilesPolicy(packageJson, forbidden) ||
232
+ fs.existsSync(path.join(repoRoot, forbidden))
233
+ ) {
227
234
  fail(`forbidden legacy package file is still present or published: ${forbidden}`);
228
235
  }
229
236
  }
@@ -294,7 +301,15 @@ function assertCliContracts() {
294
301
  fail(`commands surface is missing top-level command: ${topLevel}`);
295
302
  }
296
303
  }
297
- for (const subcommand of ['model', 'snapshot', 'diff', 'impact', 'verify', 'context', 'explain']) {
304
+ for (const subcommand of [
305
+ 'model',
306
+ 'snapshot',
307
+ 'diff',
308
+ 'impact',
309
+ 'verify',
310
+ 'context',
311
+ 'explain',
312
+ ]) {
298
313
  if (!commands.workspace?.intelligenceSubcommands?.includes(subcommand)) {
299
314
  fail(`workspace intelligence surface is missing subcommand: ${subcommand}`);
300
315
  }
@@ -331,13 +346,23 @@ function smokeCreateNpmBackedKits() {
331
346
  kit: 'springboot.standard',
332
347
  name: 'enterprise-spring',
333
348
  extraArgs: ['--java-version', '21'],
334
- expectedFiles: ['pom.xml', 'src/main/resources/application.yml', '.workspai/project.json', 'rapidkit'],
349
+ expectedFiles: [
350
+ 'pom.xml',
351
+ 'src/main/resources/application.yml',
352
+ '.workspai/project.json',
353
+ 'rapidkit',
354
+ ],
335
355
  },
336
356
  {
337
357
  kit: 'dotnet.webapi.clean',
338
358
  name: 'enterprise-dotnet',
339
359
  extraArgs: ['--target-framework', 'net8.0'],
340
- expectedFiles: ['src/Program.cs', 'src/enterprise-dotnet.csproj', '.workspai/project.json', 'rapidkit'],
360
+ expectedFiles: [
361
+ 'src/Program.cs',
362
+ 'src/enterprise-dotnet.csproj',
363
+ '.workspai/project.json',
364
+ 'rapidkit',
365
+ ],
341
366
  },
342
367
  ];
343
368
 
@@ -449,6 +474,13 @@ for (const relativePath of [
449
474
  'package.json',
450
475
  'dist/index.js',
451
476
  'contracts/runtime-command-surface.v1.json',
477
+ 'contracts/workspace-archive-capabilities.v1.json',
478
+ 'contracts/workspace-archive-manifest.v1.json',
479
+ 'contracts/workspace-archive-operation-result.v1.json',
480
+ 'contracts/create-planner-capabilities.v1.json',
481
+ 'contracts/project-entry-capability.v1.json',
482
+ 'contracts/workspace-intelligence-architecture.v1.json',
483
+ 'contracts/workspace-intelligence-chain.v1.json',
452
484
  'contracts/extension-cli-compatibility.v1.json',
453
485
  'data/modules-embeddings.json',
454
486
  ]) {
@@ -36,6 +36,14 @@ if (!fs.existsSync(tsupCli)) {
36
36
  runNode([tsupCli], 'building dist');
37
37
  runNode(['scripts/prepare-mock-embeddings.mjs'], 'preparing packaged embeddings');
38
38
  runNode(['scripts/verify-package-cli.mjs'], 'verifying bundled CLI command ownership');
39
+ runNode(
40
+ ['scripts/check-workspace-intelligence-runtime-conformance.mjs'],
41
+ 'validating Workspace Intelligence runtime artifacts against canonical schemas'
42
+ );
43
+ runNode(
44
+ ['scripts/check-workspace-intelligence-adversarial.mjs'],
45
+ 'running Workspace Intelligence adversarial scenarios'
46
+ );
39
47
  runNode(['scripts/enterprise-package-smoke.mjs'], 'running enterprise package smoke', {
40
48
  RAPIDKIT_ENTERPRISE_PREPACK: '1',
41
49
  });
@@ -0,0 +1,11 @@
1
+ __pycache__/
2
+ .env
3
+ *.py[cod]
4
+ *.log
5
+ .cache/
6
+ /.mypy_cache/
7
+ /.pytest_cache/
8
+ /.ruff_cache/
9
+ .idea/
10
+ .vscode/
11
+ dist/
@@ -1,12 +1,15 @@
1
1
  # {{ project_name }}
2
2
 
3
- Domain-driven FastAPI service generated with Workspai. Python-backed module commands use [RapidKit Core](https://github.com/rapidkitlabs/rapidkit-core).
3
+ Domain-driven FastAPI service generated with [RapidKit Core](https://github.com/rapidkitlabs/rapidkit-core). It can be adopted into Workspai workspace intelligence when you want workspace-level context, evidence, and release governance.
4
4
 
5
5
  ## Quick start
6
6
 
7
7
  ```bash
8
+ # Load the project-local RapidKit Core launcher (adds .rapidkit/rapidkit to PATH)
9
+ source .rapidkit/activate
10
+
8
11
  # Bootstrap dependencies (creates .venv + installs Poetry deps)
9
- npx workspai init # use make init if you prefer a Make target
12
+ rapidkit init # use make init if you prefer a Make target
10
13
 
11
14
  # Copy env templates and install hooks/tooling
12
15
  ./bootstrap.sh
@@ -19,20 +22,22 @@ make test
19
22
  # Run the service
20
23
  make dev
21
24
 
22
- # Use the project-local RapidKit Core helpers when you prefer auto-detected environments
23
- npx workspai dev
24
- npx workspai lint
25
- npx workspai test
25
+ # Use RapidKit Core helpers when you prefer auto-detected environments
26
+ rapidkit dev
27
+ rapidkit lint
28
+ rapidkit test
26
29
 
27
30
  # Run supply-chain and dependency audits
28
31
  make audit
29
32
  ```
30
33
 
31
- > Re-run `npx workspai init` (or `make init`) when dependencies change. If you only need to refresh tooling/hooks, run `SKIP_INIT=1 make install` or rely on `./bootstrap.sh`.
34
+ > Re-source `.rapidkit/activate` whenever you open a new shell so the project-local `rapidkit` launcher is always on your PATH.
35
+
36
+ > Re-run `rapidkit init` (or `make init`) when dependencies change. If you only need to refresh tooling/hooks, run `SKIP_INIT=1 make install` or rely on `./bootstrap.sh`.
32
37
 
33
- > Lockfiles are generated automatically during scaffolding. Set `RAPIDKIT_SKIP_LOCKS=1` (or `RAPIDKIT_GENERATE_LOCKS=0`) before running `workspai create` if you want to skip the lockfile attempt.
38
+ > Lockfiles are generated automatically during scaffolding. Set `RAPIDKIT_SKIP_LOCKS=1` (or `RAPIDKIT_GENERATE_LOCKS=0`) before running `rapidkit create` if you want to skip the lockfile attempt.
34
39
 
35
- > Need to see every project-local RapidKit Core command? Run `rapidkit --help` when RapidKit Core is installed, or use `npx workspai --help` for workspace-level commands.
40
+ > Need to see every project-local RapidKit Core command? Run `rapidkit --help`. If this project is part of a Workspai workspace, run `npx workspai --help` from the workspace root for workspace intelligence commands.
36
41
 
37
42
  ## Project structure
38
43
 
@@ -45,7 +50,7 @@ src/
45
50
  presentation/ # API routers and dependencies
46
51
  shared/ # Cross-cutting primitives (Result, types, etc.)
47
52
  routing/ # Glue for module-provided routers
48
- modules/ # RapidKit Core module bootstrapping
53
+ modules/ # RapidKit module bootstrapping
49
54
  ```
50
55
 
51
56
  ## Layer overview
@@ -72,7 +77,7 @@ curl -s -X POST http://localhost:8000/api/examples/notes \
72
77
  curl -s http://localhost:8000/api/examples/notes/1 | jq
73
78
  ```
74
79
 
75
- Swap the in-memory repository with a RapidKit Core database module when you are ready for persistence.
80
+ Swap the in-memory repository with a RapidKit database module when you are ready for persistence.
76
81
 
77
82
  ## Deployment
78
83
 
@@ -84,7 +89,7 @@ Swap the in-memory repository with a RapidKit Core database module when you are
84
89
  ## Testing
85
90
 
86
91
  ```bash
87
- npx workspai test
92
+ rapidkit test
88
93
  ```
89
94
 
90
95
  The scaffold ships with a smoke test (`tests/test_app_factory.py`) that validates the
@@ -94,15 +99,15 @@ health endpoint and the application factory.
94
99
 
95
100
  ## Local development
96
101
 
97
- - `npx workspai init` bootstraps dependencies via the project-aware CLI.
98
- - `make init` is an optional alias for `npx workspai init` when you prefer Make targets.
99
- - `make install` re-runs `npx workspai init` unless `SKIP_INIT=1` is set and refreshes developer tooling such as pre-commit hooks.
102
+ - `rapidkit init` bootstraps dependencies via the project-local RapidKit Core launcher (run it after sourcing `.rapidkit/activate`).
103
+ - `make init` is an optional alias for `rapidkit init` when you prefer Make targets.
104
+ - `make install` re-runs `rapidkit init` unless `SKIP_INIT=1` is set and refreshes developer tooling such as pre-commit hooks.
100
105
  - `./bootstrap.sh` copies `.env.example` to `.env` (when missing) and runs `SKIP_INIT=1 make install` for you.
101
- - `make dev` or `npx workspai dev` starts the FastAPI server with hot-reload and ensures environment variables from `.env` are loaded.
102
- - `make lint`, `make typecheck`, and `make test` (or `npx workspai lint` / `npx workspai test`) are thin wrappers around Ruff, mypy, and pytest for consistent CI parity.
106
+ - `make dev` or `rapidkit dev` starts the FastAPI server with hot-reload and ensures environment variables from `.env` are loaded.
107
+ - `make lint`, `make typecheck`, and `make test` (or `rapidkit lint` / `rapidkit test`) are thin wrappers around Ruff, mypy, and pytest for consistent CI parity.
103
108
  - `make audit` runs `pip-audit` and `npm audit` to surface vulnerable dependencies early.
104
109
 
105
- Pre-commit is configured with Ruff, Black, mypy, and hygiene hooks; `./bootstrap.sh` installs them automatically (or run `SKIP_INIT=1 make install`). Use the project-local launcher variants when you need auto-discovery of the right virtual environment inside automation scripts.
110
+ Pre-commit is configured with Ruff, Black, mypy, and hygiene hooks; `./bootstrap.sh` installs them automatically (or run `SKIP_INIT=1 make install`). Use the RapidKit Core variants when you need them to auto-discover the right virtual environment inside automation scripts.
106
111
 
107
112
  <!-- <<<inject:module-snippet>>> -->
108
113
 
@@ -1,5 +1,5 @@
1
- # Workspai environment defaults
2
- PROJECT_NAME="{{ project_name | default('workspai-app') }}"
1
+ # RapidKit environment defaults
2
+ PROJECT_NAME="{{ project_name | default('rapidkit-app') }}"
3
3
  ENV="development"
4
4
  DEBUG="true"
5
5
  APP_HOST="0.0.0.0"
@@ -17,21 +17,21 @@ help = "src.cli:help_cmd"
17
17
 
18
18
  [tool.poetry.dependencies]
19
19
  python = "^{{ python_version }}"
20
- fastapi = "^0.128.0"
21
- uvicorn = { extras = ["standard"], version = "^0.40.0" }
20
+ fastapi = "^0.139.0"
21
+ uvicorn = { extras = ["standard"], version = "^0.50.2" }
22
22
  pydantic = "^2.12.5"
23
23
  {% if has_settings -%}
24
- pydantic-settings = { version = "^2.12.0", extras = ["yaml"] }
24
+ pydantic-settings = { version = "^2.14.2", extras = ["yaml"] }
25
25
  {% endif %}
26
26
  # <<<inject:poetry-dependencies>>>
27
27
 
28
28
  [tool.poetry.group.dev.dependencies]
29
- pytest = "^9.0.2"
29
+ pytest = "^9.0.3"
30
30
  pytest-asyncio = "^1.3.0"
31
31
  pytest-cov = "^7.0.0"
32
32
  httpx = "^0.28.1"
33
33
  ruff = "^0.14.10"
34
- black = "^25.12.0"
34
+ black = "^26.3.1"
35
35
  isort = "^7.0.0"
36
36
  mypy = "^1.19.1"
37
37
  build = "^1.3.0"
@@ -50,7 +50,7 @@ markers = [
50
50
 
51
51
  [tool.ruff]
52
52
  line-length = 100
53
- exclude = [".workspai/vendor", ".rapidkit/vendor"]
53
+ exclude = [".rapidkit/vendor"]
54
54
 
55
55
  [tool.ruff.lint]
56
56
  ignore = ["E501"]
@@ -61,4 +61,4 @@ ignore_missing_imports = true
61
61
  warn_unused_configs = false
62
62
  show_error_codes = true
63
63
  # Ignore vendor snapshots and generated health shims from strict static checking
64
- exclude = "(^\\.workspai/vendor/|^\\.rapidkit/vendor/|src/health/|src/main.py$|src/app/)"
64
+ exclude = "(^\\.rapidkit/vendor/|src/health/|src/main.py$|src/app/)"
@@ -7,7 +7,7 @@ from dataclasses import dataclass
7
7
 
8
8
  @dataclass(slots=True)
9
9
  class AppConfig:
10
- """Application-level configuration aggregated from RapidKit Core settings."""
10
+ """Application-level configuration aggregated from RapidKit settings."""
11
11
 
12
12
  environment: str = "development"
13
13
  service_name: str = "{{ project_name }}"
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  """Project CLI wrapper for {{ project_name }} (DDD edition).
3
3
 
4
- Prefer a per-project CLI in `.workspai/cli.py` when present. Otherwise
4
+ Prefer a per-project RapidKit Core wrapper in `.rapidkit/cli.py` when present. Otherwise
5
5
  provide helpful guidance to the developer rather than guessing environment
6
6
  details.
7
7
  """
@@ -14,19 +14,16 @@ from typing import Optional
14
14
 
15
15
 
16
16
  def _missing_cli(name: str) -> None:
17
- print(f"❌ Missing project-local CLI (.workspai/cli.py) - can't run '{name}'")
18
- print("💡 If you're a new user run: workspai init # create venv + install deps")
17
+ print(f"❌ Missing project-local RapidKit Core wrapper (.rapidkit/cli.py) - can't run '{name}'")
18
+ print("💡 If you're a new user run: rapidkit init # create venv + install deps")
19
19
  sys.exit(127)
20
20
 
21
21
 
22
22
  def _load_project_cli_module() -> Optional[object]:
23
23
  project_root = Path(__file__).resolve().parents[1]
24
- cli_file = project_root / ".workspai" / "cli.py"
24
+ cli_file = project_root / ".rapidkit" / "cli.py"
25
25
  if not cli_file.exists():
26
- legacy_cli_file = project_root / ".rapidkit" / "cli.py"
27
- if not legacy_cli_file.exists():
28
- return None
29
- cli_file = legacy_cli_file
26
+ return None
30
27
  spec = importlib.util.spec_from_file_location("project_cli", str(cli_file))
31
28
  if spec is None or spec.loader is None:
32
29
  return None
@@ -38,7 +35,7 @@ def _load_project_cli_module() -> Optional[object]:
38
35
  _mod = _load_project_cli_module()
39
36
 
40
37
 
41
- # Default placeholders -- call `_missing_cli` if the project-local CLI isn't
38
+ # Default placeholders -- call `_missing_cli` if the project-local RapidKit Core wrapper isn't
42
39
  # available. These are real functions so linters don't complain.
43
40
  def init() -> None:
44
41
  _missing_cli("init")
@@ -14,7 +14,7 @@ from src.app.main import create_app
14
14
 
15
15
  @asynccontextmanager
16
16
  async def lifespan(app: FastAPI) -> AsyncIterator[None]:
17
- """Coordinate startup/shutdown hooks contributed by RapidKit Core modules."""
17
+ """Coordinate startup/shutdown hooks contributed by RapidKit modules."""
18
18
 
19
19
  _ = app # ensure the app reference stays available for injected hooks
20
20
  # <<<inject:startup>>>
@@ -0,0 +1,11 @@
1
+ __pycache__/
2
+ .env
3
+ *.py[cod]
4
+ *.log
5
+ .cache/
6
+ /.mypy_cache/
7
+ /.pytest_cache/
8
+ /.ruff_cache/
9
+ .idea/
10
+ .vscode/
11
+ dist/