@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.
- package/dist/index.js +433 -221
- package/dist/templates/space/construct.md.tmpl +87 -8
- package/dist/templates/space/index.vue.tmpl +3 -2
- package/dist/templates/space/readme.md.tmpl +28 -3
- package/dist/templates/space/style.css.tmpl +2 -0
- package/dist/templates/space/tsconfig.json.tmpl +1 -2
- package/package.json +1 -1
- package/templates/space/construct.md.tmpl +87 -8
- package/templates/space/index.vue.tmpl +3 -2
- package/templates/space/readme.md.tmpl +28 -3
- package/templates/space/style.css.tmpl +2 -0
- package/templates/space/tsconfig.json.tmpl +1 -2
|
@@ -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
|
-
|
|
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": ["
|
|
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
|
-
**
|
|
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
|
|
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/
|
|
349
|
-
- `dist/
|
|
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
|
-
*
|
|
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
|
|
9
|
+
construct dev
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
## Build
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
construct
|
|
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}";
|
package/package.json
CHANGED
|
@@ -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
|
-
|
|
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": ["
|
|
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
|
-
**
|
|
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
|
|
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/
|
|
349
|
-
- `dist/
|
|
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
|
-
*
|
|
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
|
|
9
|
+
construct dev
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
## Build
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
construct
|
|
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}";
|