@construct-space/cli 1.9.5 → 1.9.6

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.
@@ -23,7 +23,7 @@ This file briefs an AI coding agent on the Construct stack so it can build, exte
23
23
  | Icons | `lucide-vue-next` | Icon set |
24
24
  | Tooling | `@construct-space/cli` | Build / dev / publish |
25
25
 
26
- All four are **host-provided externals** -- import normally, never bundle. Vite externalises them via `vite.config.ts`.
26
+ Host-provided packages (`vue`, `vue-router`, `pinia`, VueUse, `lucide-vue-next`, `date-fns`, `dexie`, `zod`, `@construct-space/ui`, and `@construct-space/sdk`) are externalised by `vite.config.ts` and resolved from `window.__CONSTRUCT__`. `@construct-space/graph` is different: the host does not expose it, so Vite bundles it into this space.
27
27
 
28
28
  ---
29
29
 
@@ -32,6 +32,13 @@ All four are **host-provided externals** -- import normally, never bundle. Vite
32
32
  ```
33
33
  {{.Name}}/
34
34
  space.manifest.json scope, pages, toolbar, agent, widgets, actions
35
+ SKILL.md root agentskills.io skill entrypoint
36
+ scripts/ optional skill scripts
37
+ references/ optional skill docs loaded on demand
38
+ assets/ optional templates/static resources
39
+ tools.go optional first-party Go CLI source
40
+ tools/ optional prebuilt first-party tools by platform
41
+ lib/ optional third-party helpers by platform (ffmpeg, ...)
35
42
  src/
36
43
  entry.ts auto-generated; do not hand-edit
37
44
  actions.ts agent-callable actions (space_run_action)
@@ -41,9 +48,9 @@ All four are **host-provided externals** -- import normally, never bundle. Vite
41
48
  models/ graph models (defineModel)
42
49
  agent/
43
50
  config.md agent system prompt, tool whitelist, max iterations
44
- skills/ scoped skills loaded with the agent
45
51
  hooks/safety.json tool-call interception rules
46
52
  widgets/ home-screen widgets (run inside Shadow DOM sandbox)
53
+ dist/{{.ID}}.space/ build output; only this directory is installed/published
47
54
  ```
48
55
 
49
56
  ---
@@ -52,7 +59,7 @@ All four are **host-provided externals** -- import normally, never bundle. Vite
52
59
 
53
60
  ```bash
54
61
  construct dev hot-reload dev (regenerates entry.ts on change)
55
- construct build production build -> dist/
62
+ construct build production build -> dist/{{.ID}}.space/
56
63
  construct check manifest + typecheck + lint
57
64
  construct install install to active profile
58
65
  construct publish publish to registry (requires auth)
@@ -73,7 +80,7 @@ construct graph install <id> install a published space for current org
73
80
  "pages": [{ "path": "", "label": "Home", "default": true }],
74
81
  "toolbar": [{ "id": "...", "icon": "...", "action": "createX" }],
75
82
  "agent": "agent/config.md",
76
- "skills": ["agent/skills/default.md"],
83
+ "skills": ["SKILL.md"],
77
84
  "actions": "src/actions.ts",
78
85
  "widgets": [{ "id": "summary", "defaultSize": "4x1", "sizes": {...} }]
79
86
  }
@@ -83,6 +90,67 @@ construct graph install <id> install a published space for current org
83
90
 
84
91
  ---
85
92
 
93
+ ## .space bundle contract
94
+
95
+ `construct build` produces exactly one installable directory:
96
+
97
+ ```
98
+ dist/{{.ID}}.space/
99
+ manifest.json build metadata + app contract
100
+ app.iife.js canonical JS entry
101
+ style.css canonical CSS entry
102
+ checksums.json sha256 for bundle integrity
103
+ SKILL.md
104
+ agent/config.md
105
+ widgets/
106
+ assets/
107
+ tools/<platform>/{{.ID}}-tools(.exe)
108
+ lib/<platform>/...
109
+ ```
110
+
111
+ The host loads only `<id>.space`. Plain `spaces/<id>/`, flat `dist/space-*.iife.js`,
112
+ and `config.agent` are not part of the current contract.
113
+
114
+ Each dynamic space owns its CSS. Import `src/style.css` from `src/entry.ts`
115
+ and make sure Tailwind sees every component/widget path with `@source`; do not
116
+ assume host Tailwind utilities exist.
117
+
118
+ ### Native tools and lib helpers
119
+
120
+ Native tools are optional. If the root `tools.go` exists, `construct build`
121
+ compiles it into `tools/<platform>/{{.ID}}-tools` for the current platform.
122
+ Set `CONSTRUCT_TOOL_TARGETS=all` (or a comma-separated target list such as
123
+ `darwin-arm64,windows-x64`) to build multiple platforms; marketplace builds
124
+ set this to `all`.
125
+
126
+ Put third-party helper executables under `lib/<platform>/`, for example:
127
+
128
+ ```
129
+ lib/darwin-arm64/ffmpeg
130
+ lib/windows-x64/ffmpeg.exe
131
+ ```
132
+
133
+ When the host runs a space tool it sets:
134
+
135
+ - `SPACE_DIR` -- installed `{{.ID}}.space`
136
+ - `SPACE_TOOLS` -- `tools/<platform>`
137
+ - `SPACE_LIB` -- `lib/<platform>`
138
+ - `SPACE_LIB_ROOT` -- `lib`
139
+ - `CONSTRUCT_SPACE_ID` -- `{{.ID}}`
140
+ - `CONSTRUCT_PLATFORM` -- current platform (`darwin-arm64`, `linux-x64`, ...)
141
+ - `PATH` -- prefixed with `SPACE_LIB` and `SPACE_TOOLS`
142
+
143
+ So Go tools can call bundled helpers directly:
144
+
145
+ ```go
146
+ cmd := exec.Command("ffmpeg", "-version")
147
+ cmd.Stdout = os.Stdout
148
+ cmd.Stderr = os.Stderr
149
+ _ = cmd.Run()
150
+ ```
151
+
152
+ ---
153
+
86
154
  ## `@construct-space/ui` -- component cheatsheet
87
155
 
88
156
  All exported from the package root:
@@ -99,7 +167,9 @@ All exported from the package root:
99
167
 
100
168
  **Data**: `Table` (`columns: TableColumn[]`, `rows`, `selectable`, `striped`, `stickyHeader`, slots: `cell-{key}`, `header-{key}`, `empty`), `Tree`, `Timeline`, `Tabs`, `Tab`, `Accordion`, `Calendar`, `Breadcrumbs`
101
169
 
102
- **Composables**: `useNotification`, `notify`, `useAuth`, `useTheme`, `useClipboard`, `useMediaQuery`, `useFormValidation`, `useKeyboard`/`useHotkey`, `useClickOutside`, `useEscapeKey`, `useLocalStorage`, `useAsync`, `useDebounce`/`useThrottle`, `useToggle`, `useSearch`, `useIntersectionObserver`
170
+ **SDK composables**: `useNotification`, `useToast`, `useAuth`, `useAppTheme`, `useOrg`, `useOrgMembers`, `useOrgRoles`, `useHttp`, `useStorage`, `useLocalStorage`, `useNavigator`, `useToolbar`, `useBreadcrumb`, `useBrain`, `useScheduler`
171
+
172
+ **VueUse composables**: import utilities such as `useClipboard`, `useMediaQuery`, `useClickOutside`, `useAsyncState`, `useDebounceFn`, `useThrottleFn`, `useToggle`, and `useIntersectionObserver` from `@vueuse/core` (host external).
103
173
 
104
174
  ### Component gotchas
105
175
 
@@ -333,7 +403,7 @@ Tauri intercepts native drag-drop by default. The Construct host sets `dragDropE
333
403
 
334
404
  ## Conventions
335
405
 
336
- - **Imports**: `@construct-space/*` packages always external. Local imports use relative paths (no `@/` alias unless you add one).
406
+ - **Imports**: `@construct-space/ui` and `@construct-space/sdk` are host-provided externals. `@construct-space/graph` is bundled locally. Local imports use relative paths (no `@/` alias unless you add one).
337
407
  - **Composables**: `use*` prefix, keep in `src/composables/`.
338
408
  - **Pages**: filename = route path. `index.vue` -> `/`, `settings.vue` -> `/settings`, `[id].vue` -> param.
339
409
  - **Styling**: Tailwind utilities + CSS vars `--app-foreground`, `--app-background`, `--app-muted`, `--app-border`, `--app-accent`. Don't hard-code colors; the host themes via these variables.
@@ -345,7 +415,16 @@ Tauri intercepts native drag-drop by default. The Construct host sets `dragDropE
345
415
  ## Build pipeline reminder
346
416
 
347
417
  `construct build` writes:
348
- - `dist/space-{{.ID}}.iife.js` -- the bundled space
349
- - `dist/manifest.json` -- manifest + `build` block (checksum, size, **`hostApiVersion`**, builtAt)
418
+ - `dist/{{.ID}}.space/` -- the self-contained app bundle
419
+ - `dist/{{.ID}}.space/app.iife.js` -- the bundled space UI/runtime
420
+ - `dist/{{.ID}}.space/style.css` -- this space's compiled Tailwind/CSS
421
+ - `dist/{{.ID}}.space/manifest.json` -- manifest + `build` block (checksum, size, **`hostApiVersion`**, builtAt)
422
+ - `dist/{{.ID}}.space/checksums.json` -- per-file bundle integrity metadata
423
+
424
+ The `.space` directory is the install unit. Keep `agent/`, `SKILL.md`, `scripts/`,
425
+ `references/`, `assets/`, `tools/`, and `lib/` in the source tree when you need them.
426
+ `tools/` is for first-party space commands; `lib/` is for third-party executables
427
+ or support files those tools call. The build copies both into the bundle as
428
+ first-class contents.
350
429
 
351
430
  The runtime SpaceLoader compares `hostApiVersion` to its own; mismatches log a warning. Bump the CLI to keep them aligned.
@@ -2,11 +2,12 @@
2
2
  /**
3
3
  * {{.DisplayName}} -- Home page
4
4
  *
5
- * Built-in libraries available at runtime (do not bundle):
5
+ * Host libraries available at runtime (do not bundle):
6
6
  * @construct-space/ui -- Vue 3 components (Button, Card, Modal, Table, Badge, ...)
7
7
  * @construct-space/sdk -- useOrg, useOrgMembers, useToast, useAuth
8
- * @construct-space/graph -- defineModel, useGraph (multi-tenant data layer)
9
8
  * lucide-vue-next -- icons
9
+ *
10
+ * @construct-space/graph is bundled locally by this space.
10
11
  */
11
12
  import { ref } from 'vue'
12
13
  import { Button, Card, Empty } from '@construct-space/ui'
@@ -6,13 +6,38 @@ A Construct space.
6
6
 
7
7
  ```bash
8
8
  bun install
9
- construct space dev
9
+ construct dev
10
10
  ```
11
11
 
12
12
  ## Build
13
13
 
14
14
  ```bash
15
- construct space build
15
+ construct build
16
16
  ```
17
17
 
18
- Output goes to `dist/`.
18
+ Output goes to `dist/{{.ID}}.space/`.
19
+
20
+ ## Bundle Contract
21
+
22
+ `construct build` creates one self-contained bundle:
23
+
24
+ ```
25
+ dist/{{.ID}}.space/
26
+ manifest.json
27
+ app.iife.js
28
+ style.css
29
+ SKILL.md
30
+ agent/config.md
31
+ widgets/
32
+ assets/
33
+ tools/<platform>/{{.ID}}-tools
34
+ lib/<platform>/...
35
+ checksums.json
36
+ ```
37
+
38
+ Spaces must import their own `src/style.css`; dynamic spaces do not depend on
39
+ host Tailwind utilities.
40
+
41
+ Native tools are optional. Add a root `tools.go` file and the CLI compiles it
42
+ to `tools/<platform>/{{.ID}}-tools`. Put third-party helpers such as ffmpeg in
43
+ `lib/<platform>/`; Construct adds that directory to PATH when the tool runs.
@@ -1,5 +1,7 @@
1
1
  @import "tailwindcss";
2
2
 
3
+ /* Bundled as {{.ID}}.space/style.css. Dynamic spaces must ship every
4
+ utility they use; host Tailwind is not part of the space contract. */
3
5
  @source "./**/*.{vue,ts,js}";
4
6
  @source "../widgets/**/*.{vue,ts,js}";
5
7
  @source "../node_modules/@construct-space/ui/dist/**/*.{js,vue}";
@@ -9,8 +9,7 @@
9
9
  "esModuleInterop": true,
10
10
  "skipLibCheck": true,
11
11
  "paths": {
12
- "@/*": ["./src/*"],
13
- "@construct/sdk": ["./node_modules/@construct-space/sdk/src/index.ts"]
12
+ "@/*": ["./src/*"]
14
13
  }
15
14
  },
16
15
  "include": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@construct-space/cli",
3
- "version": "1.9.5",
3
+ "version": "1.9.6",
4
4
  "description": "Construct CLI — scaffold, build, develop, and publish spaces",
5
5
  "type": "module",
6
6
  "bin": {
@@ -23,7 +23,7 @@ This file briefs an AI coding agent on the Construct stack so it can build, exte
23
23
  | Icons | `lucide-vue-next` | Icon set |
24
24
  | Tooling | `@construct-space/cli` | Build / dev / publish |
25
25
 
26
- All four are **host-provided externals** -- import normally, never bundle. Vite externalises them via `vite.config.ts`.
26
+ Host-provided packages (`vue`, `vue-router`, `pinia`, VueUse, `lucide-vue-next`, `date-fns`, `dexie`, `zod`, `@construct-space/ui`, and `@construct-space/sdk`) are externalised by `vite.config.ts` and resolved from `window.__CONSTRUCT__`. `@construct-space/graph` is different: the host does not expose it, so Vite bundles it into this space.
27
27
 
28
28
  ---
29
29
 
@@ -32,6 +32,13 @@ All four are **host-provided externals** -- import normally, never bundle. Vite
32
32
  ```
33
33
  {{.Name}}/
34
34
  space.manifest.json scope, pages, toolbar, agent, widgets, actions
35
+ SKILL.md root agentskills.io skill entrypoint
36
+ scripts/ optional skill scripts
37
+ references/ optional skill docs loaded on demand
38
+ assets/ optional templates/static resources
39
+ tools.go optional first-party Go CLI source
40
+ tools/ optional prebuilt first-party tools by platform
41
+ lib/ optional third-party helpers by platform (ffmpeg, ...)
35
42
  src/
36
43
  entry.ts auto-generated; do not hand-edit
37
44
  actions.ts agent-callable actions (space_run_action)
@@ -41,9 +48,9 @@ All four are **host-provided externals** -- import normally, never bundle. Vite
41
48
  models/ graph models (defineModel)
42
49
  agent/
43
50
  config.md agent system prompt, tool whitelist, max iterations
44
- skills/ scoped skills loaded with the agent
45
51
  hooks/safety.json tool-call interception rules
46
52
  widgets/ home-screen widgets (run inside Shadow DOM sandbox)
53
+ dist/{{.ID}}.space/ build output; only this directory is installed/published
47
54
  ```
48
55
 
49
56
  ---
@@ -52,7 +59,7 @@ All four are **host-provided externals** -- import normally, never bundle. Vite
52
59
 
53
60
  ```bash
54
61
  construct dev hot-reload dev (regenerates entry.ts on change)
55
- construct build production build -> dist/
62
+ construct build production build -> dist/{{.ID}}.space/
56
63
  construct check manifest + typecheck + lint
57
64
  construct install install to active profile
58
65
  construct publish publish to registry (requires auth)
@@ -73,7 +80,7 @@ construct graph install <id> install a published space for current org
73
80
  "pages": [{ "path": "", "label": "Home", "default": true }],
74
81
  "toolbar": [{ "id": "...", "icon": "...", "action": "createX" }],
75
82
  "agent": "agent/config.md",
76
- "skills": ["agent/skills/default.md"],
83
+ "skills": ["SKILL.md"],
77
84
  "actions": "src/actions.ts",
78
85
  "widgets": [{ "id": "summary", "defaultSize": "4x1", "sizes": {...} }]
79
86
  }
@@ -83,6 +90,67 @@ construct graph install <id> install a published space for current org
83
90
 
84
91
  ---
85
92
 
93
+ ## .space bundle contract
94
+
95
+ `construct build` produces exactly one installable directory:
96
+
97
+ ```
98
+ dist/{{.ID}}.space/
99
+ manifest.json build metadata + app contract
100
+ app.iife.js canonical JS entry
101
+ style.css canonical CSS entry
102
+ checksums.json sha256 for bundle integrity
103
+ SKILL.md
104
+ agent/config.md
105
+ widgets/
106
+ assets/
107
+ tools/<platform>/{{.ID}}-tools(.exe)
108
+ lib/<platform>/...
109
+ ```
110
+
111
+ The host loads only `<id>.space`. Plain `spaces/<id>/`, flat `dist/space-*.iife.js`,
112
+ and `config.agent` are not part of the current contract.
113
+
114
+ Each dynamic space owns its CSS. Import `src/style.css` from `src/entry.ts`
115
+ and make sure Tailwind sees every component/widget path with `@source`; do not
116
+ assume host Tailwind utilities exist.
117
+
118
+ ### Native tools and lib helpers
119
+
120
+ Native tools are optional. If the root `tools.go` exists, `construct build`
121
+ compiles it into `tools/<platform>/{{.ID}}-tools` for the current platform.
122
+ Set `CONSTRUCT_TOOL_TARGETS=all` (or a comma-separated target list such as
123
+ `darwin-arm64,windows-x64`) to build multiple platforms; marketplace builds
124
+ set this to `all`.
125
+
126
+ Put third-party helper executables under `lib/<platform>/`, for example:
127
+
128
+ ```
129
+ lib/darwin-arm64/ffmpeg
130
+ lib/windows-x64/ffmpeg.exe
131
+ ```
132
+
133
+ When the host runs a space tool it sets:
134
+
135
+ - `SPACE_DIR` -- installed `{{.ID}}.space`
136
+ - `SPACE_TOOLS` -- `tools/<platform>`
137
+ - `SPACE_LIB` -- `lib/<platform>`
138
+ - `SPACE_LIB_ROOT` -- `lib`
139
+ - `CONSTRUCT_SPACE_ID` -- `{{.ID}}`
140
+ - `CONSTRUCT_PLATFORM` -- current platform (`darwin-arm64`, `linux-x64`, ...)
141
+ - `PATH` -- prefixed with `SPACE_LIB` and `SPACE_TOOLS`
142
+
143
+ So Go tools can call bundled helpers directly:
144
+
145
+ ```go
146
+ cmd := exec.Command("ffmpeg", "-version")
147
+ cmd.Stdout = os.Stdout
148
+ cmd.Stderr = os.Stderr
149
+ _ = cmd.Run()
150
+ ```
151
+
152
+ ---
153
+
86
154
  ## `@construct-space/ui` -- component cheatsheet
87
155
 
88
156
  All exported from the package root:
@@ -99,7 +167,9 @@ All exported from the package root:
99
167
 
100
168
  **Data**: `Table` (`columns: TableColumn[]`, `rows`, `selectable`, `striped`, `stickyHeader`, slots: `cell-{key}`, `header-{key}`, `empty`), `Tree`, `Timeline`, `Tabs`, `Tab`, `Accordion`, `Calendar`, `Breadcrumbs`
101
169
 
102
- **Composables**: `useNotification`, `notify`, `useAuth`, `useTheme`, `useClipboard`, `useMediaQuery`, `useFormValidation`, `useKeyboard`/`useHotkey`, `useClickOutside`, `useEscapeKey`, `useLocalStorage`, `useAsync`, `useDebounce`/`useThrottle`, `useToggle`, `useSearch`, `useIntersectionObserver`
170
+ **SDK composables**: `useNotification`, `useToast`, `useAuth`, `useAppTheme`, `useOrg`, `useOrgMembers`, `useOrgRoles`, `useHttp`, `useStorage`, `useLocalStorage`, `useNavigator`, `useToolbar`, `useBreadcrumb`, `useBrain`, `useScheduler`
171
+
172
+ **VueUse composables**: import utilities such as `useClipboard`, `useMediaQuery`, `useClickOutside`, `useAsyncState`, `useDebounceFn`, `useThrottleFn`, `useToggle`, and `useIntersectionObserver` from `@vueuse/core` (host external).
103
173
 
104
174
  ### Component gotchas
105
175
 
@@ -333,7 +403,7 @@ Tauri intercepts native drag-drop by default. The Construct host sets `dragDropE
333
403
 
334
404
  ## Conventions
335
405
 
336
- - **Imports**: `@construct-space/*` packages always external. Local imports use relative paths (no `@/` alias unless you add one).
406
+ - **Imports**: `@construct-space/ui` and `@construct-space/sdk` are host-provided externals. `@construct-space/graph` is bundled locally. Local imports use relative paths (no `@/` alias unless you add one).
337
407
  - **Composables**: `use*` prefix, keep in `src/composables/`.
338
408
  - **Pages**: filename = route path. `index.vue` -> `/`, `settings.vue` -> `/settings`, `[id].vue` -> param.
339
409
  - **Styling**: Tailwind utilities + CSS vars `--app-foreground`, `--app-background`, `--app-muted`, `--app-border`, `--app-accent`. Don't hard-code colors; the host themes via these variables.
@@ -345,7 +415,16 @@ Tauri intercepts native drag-drop by default. The Construct host sets `dragDropE
345
415
  ## Build pipeline reminder
346
416
 
347
417
  `construct build` writes:
348
- - `dist/space-{{.ID}}.iife.js` -- the bundled space
349
- - `dist/manifest.json` -- manifest + `build` block (checksum, size, **`hostApiVersion`**, builtAt)
418
+ - `dist/{{.ID}}.space/` -- the self-contained app bundle
419
+ - `dist/{{.ID}}.space/app.iife.js` -- the bundled space UI/runtime
420
+ - `dist/{{.ID}}.space/style.css` -- this space's compiled Tailwind/CSS
421
+ - `dist/{{.ID}}.space/manifest.json` -- manifest + `build` block (checksum, size, **`hostApiVersion`**, builtAt)
422
+ - `dist/{{.ID}}.space/checksums.json` -- per-file bundle integrity metadata
423
+
424
+ The `.space` directory is the install unit. Keep `agent/`, `SKILL.md`, `scripts/`,
425
+ `references/`, `assets/`, `tools/`, and `lib/` in the source tree when you need them.
426
+ `tools/` is for first-party space commands; `lib/` is for third-party executables
427
+ or support files those tools call. The build copies both into the bundle as
428
+ first-class contents.
350
429
 
351
430
  The runtime SpaceLoader compares `hostApiVersion` to its own; mismatches log a warning. Bump the CLI to keep them aligned.
@@ -2,11 +2,12 @@
2
2
  /**
3
3
  * {{.DisplayName}} -- Home page
4
4
  *
5
- * Built-in libraries available at runtime (do not bundle):
5
+ * Host libraries available at runtime (do not bundle):
6
6
  * @construct-space/ui -- Vue 3 components (Button, Card, Modal, Table, Badge, ...)
7
7
  * @construct-space/sdk -- useOrg, useOrgMembers, useToast, useAuth
8
- * @construct-space/graph -- defineModel, useGraph (multi-tenant data layer)
9
8
  * lucide-vue-next -- icons
9
+ *
10
+ * @construct-space/graph is bundled locally by this space.
10
11
  */
11
12
  import { ref } from 'vue'
12
13
  import { Button, Card, Empty } from '@construct-space/ui'
@@ -6,13 +6,38 @@ A Construct space.
6
6
 
7
7
  ```bash
8
8
  bun install
9
- construct space dev
9
+ construct dev
10
10
  ```
11
11
 
12
12
  ## Build
13
13
 
14
14
  ```bash
15
- construct space build
15
+ construct build
16
16
  ```
17
17
 
18
- Output goes to `dist/`.
18
+ Output goes to `dist/{{.ID}}.space/`.
19
+
20
+ ## Bundle Contract
21
+
22
+ `construct build` creates one self-contained bundle:
23
+
24
+ ```
25
+ dist/{{.ID}}.space/
26
+ manifest.json
27
+ app.iife.js
28
+ style.css
29
+ SKILL.md
30
+ agent/config.md
31
+ widgets/
32
+ assets/
33
+ tools/<platform>/{{.ID}}-tools
34
+ lib/<platform>/...
35
+ checksums.json
36
+ ```
37
+
38
+ Spaces must import their own `src/style.css`; dynamic spaces do not depend on
39
+ host Tailwind utilities.
40
+
41
+ Native tools are optional. Add a root `tools.go` file and the CLI compiles it
42
+ to `tools/<platform>/{{.ID}}-tools`. Put third-party helpers such as ffmpeg in
43
+ `lib/<platform>/`; Construct adds that directory to PATH when the tool runs.
@@ -1,5 +1,7 @@
1
1
  @import "tailwindcss";
2
2
 
3
+ /* Bundled as {{.ID}}.space/style.css. Dynamic spaces must ship every
4
+ utility they use; host Tailwind is not part of the space contract. */
3
5
  @source "./**/*.{vue,ts,js}";
4
6
  @source "../widgets/**/*.{vue,ts,js}";
5
7
  @source "../node_modules/@construct-space/ui/dist/**/*.{js,vue}";
@@ -9,8 +9,7 @@
9
9
  "esModuleInterop": true,
10
10
  "skipLibCheck": true,
11
11
  "paths": {
12
- "@/*": ["./src/*"],
13
- "@construct/sdk": ["./node_modules/@construct-space/sdk/src/index.ts"]
12
+ "@/*": ["./src/*"]
14
13
  }
15
14
  },
16
15
  "include": [