@synopackageland/cli 0.3.9 → 0.4.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 +20 -9
- package/dist/bin.js +1 -2
- package/dist/build-spk/generator.d.ts +0 -3
- package/dist/build-spk/generator.js +135 -287
- package/dist/build-spk/native-lifecycle.js +0 -3
- package/dist/build-spk/native-payload.js +0 -1
- package/dist/cli.js +171 -151
- package/dist/compose/analyze.d.ts +1 -2
- package/dist/compose/analyze.js +5 -48
- package/dist/contract/unsupported-types.d.ts +10 -0
- package/dist/contract/unsupported-types.js +49 -0
- package/dist/contract/validate.js +25 -2
- package/dist/contract/web-launch.js +0 -2
- package/dist/deploy/deploy.d.ts +1 -4
- package/dist/deploy/deploy.js +57 -156
- package/dist/deploy/homes-values.js +1 -1
- package/dist/deploy/plan.d.ts +18 -0
- package/dist/deploy/plan.js +54 -0
- package/dist/deploy/port-preflight.d.ts +21 -0
- package/dist/deploy/port-preflight.js +42 -0
- package/dist/deploy/spk-version.d.ts +2 -14
- package/dist/deploy/spk-version.js +25 -111
- package/dist/dev.d.ts +1 -3
- package/dist/dev.js +14 -28
- package/dist/error-registry.js +810 -857
- package/dist/host/dsm-client.js +23 -263
- package/dist/host/dsm-port-profile.d.ts +47 -0
- package/dist/host/dsm-port-profile.js +206 -0
- package/dist/host/port-info-lookup.d.ts +9 -0
- package/dist/host/port-info-lookup.js +87 -0
- package/dist/host/port-info.d.ts +33 -0
- package/dist/host/port-info.js +66 -0
- package/dist/host/types.d.ts +6 -78
- package/dist/index.d.ts +0 -9
- package/dist/index.js +0 -6
- package/dist/info.d.ts +0 -1
- package/dist/info.js +3 -10
- package/dist/init.d.ts +11 -1
- package/dist/init.js +112 -4
- package/dist/log.js +2 -3
- package/dist/native/validate.js +0 -1
- package/dist/standalone/binary.d.ts +9 -0
- package/dist/standalone/binary.js +67 -0
- package/dist/standalone/build.d.ts +25 -0
- package/dist/standalone/build.js +108 -0
- package/dist/standalone/dsm-window.d.ts +26 -0
- package/dist/standalone/dsm-window.js +251 -0
- package/dist/standalone/helper.d.ts +31 -0
- package/dist/standalone/helper.js +104 -0
- package/dist/standalone/i18n.d.ts +28 -0
- package/dist/standalone/i18n.js +161 -0
- package/dist/standalone/inspect-spk.d.ts +21 -0
- package/dist/standalone/inspect-spk.js +160 -0
- package/dist/standalone/manifest.d.ts +71 -0
- package/dist/standalone/manifest.js +276 -0
- package/dist/standalone/root-messages.d.ts +7 -0
- package/dist/standalone/root-messages.js +250 -0
- package/dist/standalone/root-ops.d.ts +42 -0
- package/dist/standalone/root-ops.js +101 -0
- package/dist/standalone/root-window.d.ts +35 -0
- package/dist/standalone/root-window.js +290 -0
- package/dist/standalone/spk.d.ts +22 -0
- package/dist/standalone/spk.js +205 -0
- package/dist/templates/binary/synology-app.yaml +7 -0
- package/dist/templates/hello-files/compose.yaml +0 -1
- package/dist/templates/hello-web/compose.yaml +13 -10
- package/dist/templates/hello-web/html/app.js +1 -23
- package/dist/templates/hello-web/html/index.html +1 -3
- package/dist/templates/hello-web-page/compose.yaml +13 -10
- package/dist/templates/hello-web-page/html/app.js +1 -23
- package/dist/templates/hello-web-page/html/index.html +1 -3
- package/dist/templates/native-go/README.md +268 -0
- package/dist/templates/native-go/backend/cmd/app/main.go +49 -0
- package/dist/templates/native-go/backend/cmd/helper/main.go +38 -0
- package/dist/templates/native-go/backend/go.mod +3 -0
- package/dist/templates/native-go/backend/internal/api/errors.go +33 -0
- package/dist/templates/native-go/backend/internal/api/registry.go +94 -0
- package/dist/templates/native-go/backend/internal/api/registry_test.go +329 -0
- package/dist/templates/native-go/backend/internal/api/server.go +155 -0
- package/dist/templates/native-go/backend/internal/app/root_none.go +9 -0
- package/dist/templates/native-go/backend/internal/app/routes.go +127 -0
- package/dist/templates/native-go/backend/internal/app/routes_test.go +167 -0
- package/dist/templates/native-go/backend/internal/dsm/auth.go +118 -0
- package/dist/templates/native-go/backend/internal/dsm/auth_test.go +139 -0
- package/dist/templates/native-go/backend/internal/helper/control.go +219 -0
- package/dist/templates/native-go/backend/internal/helper/control_test.go +242 -0
- package/dist/templates/native-go/backend/internal/helper/peer_linux.go +44 -0
- package/dist/templates/native-go/backend/internal/helper/peer_other.go +7 -0
- package/dist/templates/native-go/backend/internal/helper/process_linux.go +167 -0
- package/dist/templates/native-go/backend/internal/helper/process_other.go +5 -0
- package/dist/templates/native-go/backend/internal/helper/server_linux.go +83 -0
- package/dist/templates/native-go/backend/internal/helper/status.go +271 -0
- package/dist/templates/native-go/backend/internal/helper/status_test.go +205 -0
- package/dist/templates/native-go/backend/internal/helper/supervision.go +84 -0
- package/dist/templates/native-go/backend/internal/helper/supervision_test.go +124 -0
- package/dist/templates/native-go/backend/internal/helper/supervisor_linux.go +192 -0
- package/dist/templates/native-go/backend/internal/helper/supervisor_linux_test.go +302 -0
- package/dist/templates/native-go/dsm-package.yaml +58 -0
- package/dist/templates/native-go/gitignore +1 -0
- package/dist/templates/native-go/i18n/glossary.json +662 -0
- package/dist/templates/native-go/i18n/messages/de.json +28 -0
- package/dist/templates/native-go/i18n/messages/en.json +28 -0
- package/dist/templates/native-go/i18n/messages/es.json +28 -0
- package/dist/templates/native-go/i18n/messages/fr.json +28 -0
- package/dist/templates/native-go/i18n/messages/it.json +28 -0
- package/dist/templates/native-go/i18n/messages/ja.json +28 -0
- package/dist/templates/native-go/i18n/messages/ko.json +28 -0
- package/dist/templates/native-go/i18n/messages/zh-CN.json +28 -0
- package/dist/templates/native-go/i18n/messages/zh-TW.json +28 -0
- package/dist/templates/native-go/ui/app.css +35 -0
- package/dist/templates/native-go/ui/app.js +94 -0
- package/dist/templates/native-go-better-auth/backend/internal/app/identity.go +208 -0
- package/dist/templates/native-go-better-auth/backend/internal/app/identity_test.go +113 -0
- package/dist/templates/native-go-better-auth/node/app.mjs +72 -0
- package/dist/templates/native-go-better-auth/node/build.mjs +2 -0
- package/dist/templates/native-go-better-auth/node/package-lock.json +862 -0
- package/dist/templates/native-go-better-auth/node/package.json +1 -0
- package/dist/templates/native-go-better-auth/node/test/auth.test.mjs +31 -0
- package/dist/templates/native-go-integration/backend/internal/app/identity_none.go +6 -0
- package/dist/templates/native-go-integration/backend/internal/app/personal.go +203 -0
- package/dist/templates/native-go-integration/backend/internal/app/personal_test.go +119 -0
- package/dist/templates/native-go-root/backend/internal/app/root.go +107 -0
- package/dist/templates/native-go-root/backend/internal/app/root_test.go +124 -0
- package/dist/templates/native-go-root/root/whoami.sh +6 -0
- package/dist/templates/native-go-vue/README.md +110 -0
- package/dist/templates/native-go-vue/frontend/DESIGN.md +78 -0
- package/dist/templates/native-go-vue/frontend/package-lock.json +2507 -0
- package/dist/templates/native-go-vue/frontend/package.json +6 -0
- package/dist/templates/native-go-vue/frontend/src/App.vue +132 -0
- package/dist/templates/native-go-vue/frontend/src/context.ts +17 -0
- package/dist/templates/native-go-vue/frontend/src/main.ts +26 -0
- package/dist/templates/native-go-vue/frontend/src/style.css +14 -0
- package/dist/templates/native-go-vue/frontend/test/apps.test.ts +148 -0
- package/dist/templates/native-go-vue/frontend/tsconfig.json +1 -0
- package/dist/templates/native-go-vue/frontend/vite.config.ts +8 -0
- package/dist/templates/native-go-vue/gitignore +2 -0
- package/dist/types.d.ts +1 -1
- package/dist/validate.js +11 -7
- package/package.json +3 -7
- package/schema/synology-app.schema.json +36 -37
- package/skills/SKILL.md +4 -48
- package/skills/reference/create.md +11 -83
- package/skills/reference/deploy.md +7 -78
- package/skills/reference/diagnose.md +4 -101
- package/skills/reference/files.md +5 -41
- package/skills/reference/identity.md +3 -29
- package/skills/reference/wrap.md +0 -2
- package/templates/binary/synology-app.yaml +7 -0
- package/templates/hello-files/compose.yaml +0 -1
- package/templates/hello-web/compose.yaml +13 -10
- package/templates/hello-web/html/app.js +1 -23
- package/templates/hello-web/html/index.html +1 -3
- package/templates/hello-web-page/compose.yaml +13 -10
- package/templates/hello-web-page/html/app.js +1 -23
- package/templates/hello-web-page/html/index.html +1 -3
- package/templates/native-go/README.md +268 -0
- package/templates/native-go/backend/cmd/app/main.go +49 -0
- package/templates/native-go/backend/cmd/helper/main.go +38 -0
- package/templates/native-go/backend/go.mod +3 -0
- package/templates/native-go/backend/internal/api/errors.go +33 -0
- package/templates/native-go/backend/internal/api/registry.go +94 -0
- package/templates/native-go/backend/internal/api/registry_test.go +329 -0
- package/templates/native-go/backend/internal/api/server.go +155 -0
- package/templates/native-go/backend/internal/app/root_none.go +9 -0
- package/templates/native-go/backend/internal/app/routes.go +127 -0
- package/templates/native-go/backend/internal/app/routes_test.go +167 -0
- package/templates/native-go/backend/internal/dsm/auth.go +118 -0
- package/templates/native-go/backend/internal/dsm/auth_test.go +139 -0
- package/templates/native-go/backend/internal/helper/control.go +219 -0
- package/templates/native-go/backend/internal/helper/control_test.go +242 -0
- package/templates/native-go/backend/internal/helper/peer_linux.go +44 -0
- package/templates/native-go/backend/internal/helper/peer_other.go +7 -0
- package/templates/native-go/backend/internal/helper/process_linux.go +167 -0
- package/templates/native-go/backend/internal/helper/process_other.go +5 -0
- package/templates/native-go/backend/internal/helper/server_linux.go +83 -0
- package/templates/native-go/backend/internal/helper/status.go +271 -0
- package/templates/native-go/backend/internal/helper/status_test.go +205 -0
- package/templates/native-go/backend/internal/helper/supervision.go +84 -0
- package/templates/native-go/backend/internal/helper/supervision_test.go +124 -0
- package/templates/native-go/backend/internal/helper/supervisor_linux.go +192 -0
- package/templates/native-go/backend/internal/helper/supervisor_linux_test.go +302 -0
- package/templates/native-go/dsm-package.yaml +58 -0
- package/templates/native-go/gitignore +1 -0
- package/templates/native-go/i18n/glossary.json +662 -0
- package/templates/native-go/i18n/messages/de.json +28 -0
- package/templates/native-go/i18n/messages/en.json +28 -0
- package/templates/native-go/i18n/messages/es.json +28 -0
- package/templates/native-go/i18n/messages/fr.json +28 -0
- package/templates/native-go/i18n/messages/it.json +28 -0
- package/templates/native-go/i18n/messages/ja.json +28 -0
- package/templates/native-go/i18n/messages/ko.json +28 -0
- package/templates/native-go/i18n/messages/zh-CN.json +28 -0
- package/templates/native-go/i18n/messages/zh-TW.json +28 -0
- package/templates/native-go/ui/app.css +35 -0
- package/templates/native-go/ui/app.js +94 -0
- package/templates/native-go-better-auth/backend/internal/app/identity.go +208 -0
- package/templates/native-go-better-auth/backend/internal/app/identity_test.go +113 -0
- package/templates/native-go-better-auth/node/app.mjs +72 -0
- package/templates/native-go-better-auth/node/build.mjs +2 -0
- package/templates/native-go-better-auth/node/package-lock.json +862 -0
- package/templates/native-go-better-auth/node/package.json +1 -0
- package/templates/native-go-better-auth/node/test/auth.test.mjs +31 -0
- package/templates/native-go-integration/backend/internal/app/identity_none.go +6 -0
- package/templates/native-go-integration/backend/internal/app/personal.go +203 -0
- package/templates/native-go-integration/backend/internal/app/personal_test.go +119 -0
- package/templates/native-go-root/backend/internal/app/root.go +107 -0
- package/templates/native-go-root/backend/internal/app/root_test.go +124 -0
- package/templates/native-go-root/root/whoami.sh +6 -0
- package/templates/native-go-vue/README.md +110 -0
- package/templates/native-go-vue/frontend/DESIGN.md +78 -0
- package/templates/native-go-vue/frontend/package-lock.json +2507 -0
- package/templates/native-go-vue/frontend/package.json +6 -0
- package/templates/native-go-vue/frontend/src/App.vue +132 -0
- package/templates/native-go-vue/frontend/src/context.ts +17 -0
- package/templates/native-go-vue/frontend/src/main.ts +26 -0
- package/templates/native-go-vue/frontend/src/style.css +14 -0
- package/templates/native-go-vue/frontend/test/apps.test.ts +148 -0
- package/templates/native-go-vue/frontend/tsconfig.json +1 -0
- package/templates/native-go-vue/frontend/vite.config.ts +8 -0
- package/templates/native-go-vue/gitignore +2 -0
- package/dist/attestation/app-package.d.ts +0 -86
- package/dist/attestation/app-package.js +0 -206
- package/dist/attestation/install-on-host.d.ts +0 -14
- package/dist/attestation/install-on-host.js +0 -52
- package/dist/attestation/keyring.d.ts +0 -21
- package/dist/attestation/keyring.js +0 -168
- package/dist/attestation/platform-service.d.ts +0 -70
- package/dist/attestation/platform-service.js +0 -250
- package/dist/build-spk/broker-glue.d.ts +0 -16
- package/dist/build-spk/broker-glue.js +0 -40
- package/dist/deploy/catalog-publish.d.ts +0 -3
- package/dist/deploy/catalog-publish.js +0 -7
- package/dist/doctor.d.ts +0 -22
- package/dist/doctor.js +0 -721
- package/dist/error-collector.d.ts +0 -2
- package/dist/error-collector.js +0 -46
- package/dist/host/broker-paths.d.ts +0 -1
- package/dist/host/broker-paths.js +0 -1
- package/dist/host/broker-upgrade-preflight.d.ts +0 -61
- package/dist/host/broker-upgrade-preflight.js +0 -156
- package/dist/host/digests.d.ts +0 -5
- package/dist/host/digests.js +0 -63
- package/dist/host/fake-nas.d.ts +0 -41
- package/dist/host/fake-nas.js +0 -174
- package/dist/mock-broker/bootstrap.d.ts +0 -2
- package/dist/mock-broker/bootstrap.js +0 -8
- package/dist/mock-broker/files.d.ts +0 -60
- package/dist/mock-broker/files.js +0 -408
- package/dist/mock-broker/oidc.d.ts +0 -31
- package/dist/mock-broker/oidc.js +0 -161
- package/dist/mock-broker/path.d.ts +0 -9
- package/dist/mock-broker/path.js +0 -50
- package/dist/mock-broker/server.d.ts +0 -19
- package/dist/mock-broker/server.js +0 -350
- package/dist/publish/build-ledger.d.ts +0 -22
- package/dist/publish/build-ledger.js +0 -26
- package/dist/publish/community-path.d.ts +0 -6
- package/dist/publish/community-path.js +0 -41
- package/dist/publish/curated-release.d.ts +0 -78
- package/dist/publish/curated-release.js +0 -883
- package/dist/publish/file-build-ledger.d.ts +0 -18
- package/dist/publish/file-build-ledger.js +0 -268
- package/dist/publish/github-pr.d.ts +0 -25
- package/dist/publish/github-pr.js +0 -85
- package/dist/publish/github-repo.d.ts +0 -8
- package/dist/publish/github-repo.js +0 -21
- package/dist/publish/platform-service-release.d.ts +0 -60
- package/dist/publish/platform-service-release.js +0 -333
- package/dist/publish/preflight.d.ts +0 -24
- package/dist/publish/preflight.js +0 -138
- package/dist/publish/publish.d.ts +0 -27
- package/dist/publish/publish.js +0 -136
- package/dist/publish/sync-definition.d.ts +0 -4
- package/dist/publish/sync-definition.js +0 -48
- package/dist/release-bin.d.ts +0 -2
- package/dist/release-bin.js +0 -23
- package/dist/templates/hello-web/html/sdk.js +0 -68
- package/dist/templates/hello-web-page/html/sdk.js +0 -68
- package/dist/templates/native/synology-app.yaml +0 -7
- package/dist/test-host.d.ts +0 -15
- package/dist/test-host.js +0 -37
- package/templates/hello-web/html/sdk.js +0 -68
- package/templates/hello-web-page/html/sdk.js +0 -68
- package/templates/native/synology-app.yaml +0 -7
- /package/dist/templates/{native → binary}/native.yaml +0 -0
- /package/templates/{native → binary}/native.yaml +0 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# __DISPLAY_NAME__ — Vue DSM package
|
|
2
|
+
|
|
3
|
+
This is the existing native-go template with the shared UI **0.4.0**. It uses
|
|
4
|
+
AppRoot, the DSM embedded theme, Dialog, SettingsSection, Callout and existing
|
|
5
|
+
controls. The generated `dsm-package.yaml` remains the only package manifest.
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
cd frontend
|
|
9
|
+
npm ci --ignore-scripts --no-audit --no-fund
|
|
10
|
+
npm test
|
|
11
|
+
cd ..
|
|
12
|
+
synopkgland validate
|
|
13
|
+
synopkgland build-spk
|
|
14
|
+
synopkgland inspect --spk dist/__PACKAGE__-0.1.0-0001-x86_64.spk
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The pinned `@synopackageland/ui@0.4.0` dependency is public on
|
|
18
|
+
`https://registry.npmjs.org`, selected by `frontend/.npmrc`. No registry account
|
|
19
|
+
or credentials are required. Dependencies are installed and UI bundled on the
|
|
20
|
+
build machine; the NAS never downloads npm packages. Commit your lockfiles.
|
|
21
|
+
|
|
22
|
+
## Optional integration (experimental)
|
|
23
|
+
|
|
24
|
+
**Experimental integration — DSM 7.4 known limitation:** DSM ignores a
|
|
25
|
+
stop hook refusal. If the helper is ready, Package Stop can mark the package
|
|
26
|
+
stopped while the root helper remains alive. Use administrator **Teardown**
|
|
27
|
+
first, verify the helper is no longer ready, then Stop the package. V1 found
|
|
28
|
+
this on a real NAS; the M1e investigation is ongoing.
|
|
29
|
+
|
|
30
|
+
Generate with `synopkgland init -t native-go --ui vue --integration go <dir>`.
|
|
31
|
+
This automatically chooses root privilege and adds only the existing M1a
|
|
32
|
+
`integration: {protocol: 1, workers: {}}` contract. The native-go baseline without
|
|
33
|
+
these options remains unchanged. Vue alone keeps the original Go 1.24 module;
|
|
34
|
+
integration uses Go **1.25+** for fd-rooted atomic storage updates.
|
|
35
|
+
|
|
36
|
+
Open the app as a DSM administrator. **Approve and activate** uses the existing
|
|
37
|
+
DSM PasswordConfirm and exact-task readback, then `helper_enable`. Recover,
|
|
38
|
+
Teardown and Disable call the other fixed public operations. Status always
|
|
39
|
+
comes from `integration.status`; scheduler approval is not helper readiness.
|
|
40
|
+
Package running is `unknown`, scheduler `not-probed`: this backend has no fresh
|
|
41
|
+
Package Center/scheduler probe. Use Package Center separately to read that state.
|
|
42
|
+
The legacy root panel is retained, including its task removal controls.
|
|
43
|
+
|
|
44
|
+
Normal users see status/error guidance and their own private synthetic note.
|
|
45
|
+
`personal.list/read/write` re-authenticate DSM, require a fresh ready helper,
|
|
46
|
+
resolve the trusted local account and bind the note handle to package/name/UID/GID.
|
|
47
|
+
The backend rejects unknown user/path fields and other users' handles, including
|
|
48
|
+
for administrators. Notes are package-owned data, **not** NAS shared-folder files
|
|
49
|
+
or subtree grants. Directory accounts, account recreation/UID reuse, NAS ACL,
|
|
50
|
+
and M2 grant/revoke/in-flight semantics remain unvalidated. A bounded note write
|
|
51
|
+
that passed readiness may finish while an administrator disables the helper.
|
|
52
|
+
|
|
53
|
+
The note and lock files are confined with `os.Root`, reject symlink/hardlink and
|
|
54
|
+
unsafe file metadata, serialize CGI readers/writers, and limit UTF-8 input to
|
|
55
|
+
4096 bytes. Failed writes must be inspected/retried; no multi-file transaction,
|
|
56
|
+
version history or general filesystem permission is implied.
|
|
57
|
+
|
|
58
|
+
## Optional Better Auth
|
|
59
|
+
|
|
60
|
+
Generate with `--ui vue --integration better-auth`. This is the only option that
|
|
61
|
+
adds `node/`, `identity.*` routes and the `Node.js_v22` DSM dependency. Before
|
|
62
|
+
building, also run `cd node && npm ci --ignore-scripts && npm test && cd ..`.
|
|
63
|
+
The existing SPK builder bundles Better Auth **1.7.7** at build time; it runs as
|
|
64
|
+
the package account, one Node invocation per CGI, without a privileged Node
|
|
65
|
+
listener or shared service. DSM runtime path is
|
|
66
|
+
`/var/packages/Node.js_v22/target/usr/local/bin/node`; actual DSM/CPU support is
|
|
67
|
+
pending acceptance. Go-only does not install or invoke Node/Better Auth.
|
|
68
|
+
|
|
69
|
+
The CGI verifies native login and local principal again on every identity call,
|
|
70
|
+
mints a fresh random one-use ticket for the private stdin transport, and supplies
|
|
71
|
+
no DSM cookie to Node. A Better Auth session is separately bound to the native
|
|
72
|
+
principal and package. `identity.login/current/logout` consume a ticket. App
|
|
73
|
+
sessions expire in 60 seconds without refresh/cookie cache; placeholder email is
|
|
74
|
+
unverified and is never an identity-linking key. The app-session cookie travels
|
|
75
|
+
as an opaque CGI parameter and stays only in this Vue mount's memory, not a
|
|
76
|
+
browser-wide cookie/localStorage. A serialized package-owned JSON snapshot plus
|
|
77
|
+
secret survives CGI exits under an exclusive lock and atomic rename. This is a
|
|
78
|
+
bounded example adapter; production DB/schema/account lifecycle policy is M2.
|
|
79
|
+
|
|
80
|
+
## Host lifecycle and local evidence
|
|
81
|
+
|
|
82
|
+
The existing DSM window loads `app.js/app.css` and registers in
|
|
83
|
+
`window.DsmPackageApps[package]`; each mount creates its own Vue app. Unmount
|
|
84
|
+
clears instance/session state and stale reopen callbacks become no-ops.
|
|
85
|
+
`frontend/test/apps.test.ts` checks states, cancellation, controls, two package
|
|
86
|
+
IDs, overlay roots, reopen/unmount, errors and empty data with jsdom. Real
|
|
87
|
+
unsigned artifact tests additionally cross-compile Go and bundle UI/Node.
|
|
88
|
+
|
|
89
|
+
UI **0.4.0** enables `<AppRoot modal-scope="app">`. Each mount assigns a
|
|
90
|
+
package-prefixed, instance-unique Vue `idPrefix` before mounting. The sizing
|
|
91
|
+
class on the mount element fills the existing bounded DSM fit-layout body;
|
|
92
|
+
AppRoot fills that element and owns the background scroll container and local
|
|
93
|
+
portal. Other hosts must supply a bounded parent height too. Unmount removes
|
|
94
|
+
only the sizing class added by this mount.
|
|
95
|
+
|
|
96
|
+
The disable dialog blocks only its own app background. Other package windows
|
|
97
|
+
remain interactive; simultaneous local dialogs have distinct title/description
|
|
98
|
+
IDs. App-local dialogs omit `aria-modal`, and the host must provide a window
|
|
99
|
+
switch mechanism. Do not mix app-local and document overlays in one UI runtime,
|
|
100
|
+
import raw external Reka primitives, or add custom portals outside AppRoot.
|
|
101
|
+
Interoperability with other UI versions/modal libraries and screen-reader or
|
|
102
|
+
Safari/iOS acceptance remains unvalidated. The template has no new NAS proof;
|
|
103
|
+
see the repository's M1b acceptance plan for final-SPK validation.
|
|
104
|
+
|
|
105
|
+
Every kernel uses the owning supervisor
|
|
106
|
+
with PDEATHSIG; only the parent signals its unreaped child, whose PID cannot be
|
|
107
|
+
reused before reaping. Startup still requires a live handshake within two seconds.
|
|
108
|
+
Lost supervisors preserve failed/cleanup-required; the controller never signals a
|
|
109
|
+
recorded PID. Rebuild after M1d and approve the new payload digest before use.
|
|
110
|
+
Uninstall retains disabled gate/cache/history by policy.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Native DSM Vue integration template
|
|
3
|
+
description: Existing package settings UI using Syno Package Land UI 0.4.0.
|
|
4
|
+
typography:
|
|
5
|
+
body:
|
|
6
|
+
fontFamily: "var(--ui-font-sans)"
|
|
7
|
+
fontSize: "13px"
|
|
8
|
+
lineHeight: 1.5
|
|
9
|
+
title:
|
|
10
|
+
fontSize: "20px"
|
|
11
|
+
fontWeight: 600
|
|
12
|
+
state:
|
|
13
|
+
fontSize: "15px"
|
|
14
|
+
fontWeight: 600
|
|
15
|
+
spacing:
|
|
16
|
+
actions: "8px"
|
|
17
|
+
heading-gap: "16px"
|
|
18
|
+
section-gap: "24px"
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Design System: Native DSM Vue integration template
|
|
22
|
+
|
|
23
|
+
## Overview
|
|
24
|
+
|
|
25
|
+
This records the built template, not a new visual identity. The settings surface operates inside a DSM package window: users inspect integration health, administrators approve maintenance operations, and each account edits its own synthetic sample note. Its usage mode is **Operate**; preserve the compact, readable hierarchy and existing native component behavior.
|
|
26
|
+
|
|
27
|
+
Visual authority is `@synopackageland/ui` **0.4.0**, its public exports and `themes/dsm7-embedded.css`, plus the application styles in `src/style.css`. `AppRoot` scopes the component world. Local synthetic browser screenshots (`ui-desktop.png`, `ui-minimum.png`, `ui-user-failed.png`) support this description; they do not establish DSM runtime acceptance.
|
|
28
|
+
|
|
29
|
+
## Colors
|
|
30
|
+
|
|
31
|
+
The embedded theme owns the palette. Application text, account/version metadata, status labels, help and completion notices use the existing `--ui-text` token. Do not duplicate sampled screenshot colors as new palette tokens.
|
|
32
|
+
|
|
33
|
+
Use the existing `primary` Button treatment for activation, note saving and optional app-session creation. Routine refresh, recovery, teardown and opening the disable confirmation use `secondary`; the confirmation itself uses `danger`. Request errors use a danger Callout and explicit recovery copy.
|
|
34
|
+
|
|
35
|
+
**Pending U2:** inherited Dialog description color and SettingsSection colors/borders require upstream review. Application copy already uses `--ui-text`; this document does not imply that inherited contrast or palette limitations are resolved.
|
|
36
|
+
|
|
37
|
+
## Typography
|
|
38
|
+
|
|
39
|
+
Application body copy uses the theme sans family and the body role above. Package title uses the title role; integration state uses the state role. Library components retain their own typography. Keep state descriptions and permissions in plain sentences; do not add display typography to this settings window.
|
|
40
|
+
|
|
41
|
+
## Layout
|
|
42
|
+
|
|
43
|
+
A single vertical flow presents package/account metadata and Refresh, followed by non-collapsible integration, sample-data and optional identity sections. Application padding is `var(--ui-space-5, 20px)` and content has a `72ch` maximum width. The heading is a horizontal flex row; action rows wrap. Status metadata uses a two-column definition list with `4px` row and `16px` column gaps. Fields stack labels above controls.
|
|
44
|
+
|
|
45
|
+
The local fixture covers a **960×640** window and **640×420** minimum window. Preserve vertical scrolling at the smaller height: sections and the note editor continue below the first viewport. Do not compress all content into that viewport or introduce horizontal scrolling.
|
|
46
|
+
|
|
47
|
+
## Elevation & Depth
|
|
48
|
+
|
|
49
|
+
The application adds no shadows or elevation system. Surface, overlay and dialog treatments remain owned by the embedded library theme.
|
|
50
|
+
|
|
51
|
+
## Components
|
|
52
|
+
|
|
53
|
+
- **AppRoot and lifecycle:** `mount(root, ctx)` creates a fresh Vue instance per DSM window. Reopen refreshes its status. Unmount marks the instance disposed and clears its app cookie, note text and opaque note ID; pending responses must not repopulate a disposed instance. Do not share user/session state between mounts.
|
|
54
|
+
- **SettingsSection and status:** integration is always visible; sample data appears only in `ready`. Keep the six existing labels and descriptions from `context.ts`: `not-enabled` → Not enabled; `ready` → Ready; `needs-approval` → Approval required; `incompatible` → Incompatible; `stopped` → Stopped; `failed` → Failed. Show cleanup-required guidance and the returned package/scheduler values, including `unknown` or `not-probed`.
|
|
55
|
+
- **Permissions and Button:** root controls appear only for an administrator with `ctx.root` and configured integration. Other accounts receive administrator guidance when integration is not ready. Activation/recovery/teardown/disable follow authorization before execution; cancelled approval reports that no operation ran.
|
|
56
|
+
- **Loading, empty and mutation states:** Refresh and mutations disable competing controls; the main region exposes `aria-busy` and textual status. Failed status loading offers Refresh. A ready integration with no note ID shows the “No sample data” Callout. A labeled Textarea and Save button appear when a note exists. Completion notices use `role=status`; error copy uses `role=alert` and identifies a recovery action. Optional app identity appears only when its route reports `better-auth`.
|
|
57
|
+
- **Dialog:** Disable opens the library confirmation dialog, explains refusal of new requests and retention of existing data/output, and presents Cancel plus danger Confirm disable. No application modal replacement is provided.
|
|
58
|
+
|
|
59
|
+
**App-local modality:** consume UI 0.4.0's `AppRoot modal-scope="app"`.
|
|
60
|
+
Each independent mount sets a package-prefixed, unique Vue `idPrefix` before
|
|
61
|
+
mounting. The mount sizing class and AppRoot use `height: 100%` inside the
|
|
62
|
+
existing bounded DSM fit-layout body. AppRoot owns background scrolling and
|
|
63
|
+
local overlay containment. Other hosts must also supply a bounded parent height.
|
|
64
|
+
The disable dialog makes only its own background inert/aria-hidden and leaves
|
|
65
|
+
other apps and the host interactive. Two local dialogs may remain open; title
|
|
66
|
+
and description references must stay unique even for two mounts of one package.
|
|
67
|
+
The host provides window switching; app-local dialogs omit `aria-modal`.
|
|
68
|
+
Do not mix document/app overlays in one runtime, external Reka primitives or
|
|
69
|
+
custom out-of-root portals. Other UI versions/modal libraries, Safari/iOS and
|
|
70
|
+
manual screen-reader acceptance remain unvalidated. Test the generated final
|
|
71
|
+
SPK on DSM separately from local jsdom/Chromium evidence.
|
|
72
|
+
|
|
73
|
+
## Do's and Don'ts
|
|
74
|
+
|
|
75
|
+
- Do use existing public UI components, embedded theme tokens and state/recovery copy.
|
|
76
|
+
- Do retain permission gating, readable loading/empty/error states and per-instance cleanup.
|
|
77
|
+
- Don't claim trusted helper readiness from scheduler values or treat app identity as native session/filesystem authorization.
|
|
78
|
+
- Don't introduce a separate palette, component system or modal workaround around the library contract.
|