@synopackageland/cli 0.9.2 → 0.9.4

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/CHANGELOG.md CHANGED
@@ -1,5 +1,51 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.9.4 (2026-10-12)
4
+
5
+ Builds with SDK 0.9.5 and templates 0.9.4: `init` writes SDK v0.9.5 and
6
+ `@synopackageland/sdk` 0.9.5, and the Vue App's `AppRoot` lets Dialogs leave
7
+ a DSM window. The executor digest table records SDK 0.9.5, whose executor
8
+ equals 0.9.4's; the policy digest stays the same, so an installed App needs
9
+ no new approval. AI guidance for DSM-window Dialogs matches the Vue App.
10
+
11
+ 繁中摘要:使用 SDK 0.9.5 與 templates 0.9.4。SDK 0.9.5 只改 TypeScript(NAS
12
+ picker 改用 UI 0.9.1 元件),executor digest 與 0.9.4 相同,policy digest 不變,
13
+ 已安裝的 App 不需重新核准。ui-vue 與 ui-json 指引改為在 DSM 視窗內給 `AppRoot`
14
+ `dialog-bounds="viewport"`,並把 `activate` 接到 `ctx.host.activateWindow()`:
15
+ Dialog 可拖出 App 視窗,點 Dialog 會把視窗帶到最前;600px 以下為底部 sheet。
16
+
17
+ - `ui-vue` and `ui-json`: in a DSM window (`ctx.host.platform().host === 'dsm'`),
18
+ give `AppRoot` `dialog-bounds="viewport"` and connect its `activate` event to
19
+ `ctx.host.activateWindow()`, so Dialogs can be dragged out of the window and
20
+ pressing one brings the window to the front. Below 600px they are bottom
21
+ sheets. Standalone web, Portal and previews keep Dialogs inside the App.
22
+ - A host-window test pins that the mounted App's `activateWindow` fronts only
23
+ its own DSM window.
24
+
25
+ ## 0.9.3 (2026-10-12)
26
+
27
+ Builds with SDK 0.9.4 and templates 0.9.3: `init` writes SDK v0.9.4 and
28
+ `@synopackageland/sdk` 0.9.4. The executor digest table records SDK 0.9.4,
29
+ whose executor asks DSM's native `SLIBAppPrivUserHas` for App Privileges
30
+ instead of the `SYNO.Core.AppPriv.App` preview. An App rebuilt with SDK 0.9.4
31
+ gets the new executor; the policy digest stays the same, so an installed App
32
+ needs no new approval.
33
+
34
+ 繁中摘要:使用 SDK 0.9.4 與 templates 0.9.3。executor 改以 DSM 原生
35
+ `SLIBAppPrivUserHas` 判斷應用程式權限,digest 表加入 0.9.4;policy digest 不變,
36
+ 重新建置後已安裝的 App 不需重新核准。限定 IP 的應用程式權限規則改為依瀏覽器位址
37
+ 判斷;自行組 `auth` 的呼叫端必須帶 `remote_addr`,否則 executor 回 `APP_DENIED`。
38
+
39
+ - Behavior change: an Application Privileges rule limited to IP addresses
40
+ applies to the browser's address; with SDK 0.9.3 or earlier the executor
41
+ refused every request under such a rule. Work no browser asked for is
42
+ checked as coming from 127.0.0.1. The generated CGI sends the address
43
+ through `api.DSMSession`; code that builds the executor `auth` itself must
44
+ add `remote_addr` or the executor refuses with `APP_DENIED`.
45
+ - The fake-DSM executor flow tests host the 0.9.4 executor's embedded bridge
46
+ and check the online grant against the browser's address and the offline
47
+ write against 127.0.0.1.
48
+
3
49
  ## 0.9.2 (2026-10-12)
4
50
 
5
51
  Builds with SDK 0.9.3 and templates 0.9.2: `init` writes SDK v0.9.3 and
@@ -42,5 +42,27 @@
42
42
  "armv7": "b65a14f0fc77a1d3221c7dc6781eb66059aa200956b094d58a62bd1cad10f116"
43
43
  },
44
44
  "goToolchain": "go1.26.9"
45
+ },
46
+ "0.9.4": {
47
+ "x86_64": "fc3c206b6a8e30b7470cedabf6676c027960311469685eab2fe544fe6cc671ac",
48
+ "aarch64": "aa1a8a1b88758ad47ca69d30e9649a24a93b94b5b5fc181ce782035c2c77c497",
49
+ "armv7": "0c39cb98b67735fede6bbbe91471695e26707f377cbc50dd860a1d9a7fe06fcf",
50
+ "lifecycle": {
51
+ "x86_64": "819459580135e016184ad80c258350d57194d6134e8aa4cf1caf5237085b1004",
52
+ "aarch64": "5abcfc21403e84a0af15d972bcb819ac6fedfd9aaf5898ddc8c4bb06130f9f59",
53
+ "armv7": "b65a14f0fc77a1d3221c7dc6781eb66059aa200956b094d58a62bd1cad10f116"
54
+ },
55
+ "goToolchain": "go1.26.9"
56
+ },
57
+ "0.9.5": {
58
+ "x86_64": "fc3c206b6a8e30b7470cedabf6676c027960311469685eab2fe544fe6cc671ac",
59
+ "aarch64": "aa1a8a1b88758ad47ca69d30e9649a24a93b94b5b5fc181ce782035c2c77c497",
60
+ "armv7": "0c39cb98b67735fede6bbbe91471695e26707f377cbc50dd860a1d9a7fe06fcf",
61
+ "lifecycle": {
62
+ "x86_64": "819459580135e016184ad80c258350d57194d6134e8aa4cf1caf5237085b1004",
63
+ "aarch64": "5abcfc21403e84a0af15d972bcb819ac6fedfd9aaf5898ddc8c4bb06130f9f59",
64
+ "armv7": "b65a14f0fc77a1d3221c7dc6781eb66059aa200956b094d58a62bd1cad10f116"
65
+ },
66
+ "goToolchain": "go1.26.9"
45
67
  }
46
68
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synopackageland/cli",
3
- "version": "0.9.2",
3
+ "version": "0.9.4",
4
4
  "description": "Syno Package Land Developer Kit CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -19,12 +19,12 @@
19
19
  "scripts": {
20
20
  "build": "rm -rf dist && tsc",
21
21
  "test": "npm run build && node --import tsx --test test/**/*.test.ts",
22
- "test:scripts": "node --test scripts/test/release.test.mjs scripts/test/pack-docker.test.mjs scripts/test/npm-pack.test.mjs scripts/test/executor-bump.test.mjs scripts/test/smoke-exports.test.mjs scripts/test/executor-digests.test.mjs",
22
+ "test:scripts": "node --test scripts/test/gate.test.mjs scripts/test/release.test.mjs scripts/test/pack-docker.test.mjs scripts/test/npm-pack.test.mjs scripts/test/executor-bump.test.mjs scripts/test/smoke-exports.test.mjs scripts/test/executor-digests.test.mjs",
23
23
  "gates": "bash scripts/ci/gate.sh npm && bash scripts/ci/gate.sh native-go && bash scripts/ci/gate.sh daemon-gateway",
24
24
  "prepublishOnly": "npm run build"
25
25
  },
26
26
  "dependencies": {
27
- "@synopackageland/templates": "0.9.2",
27
+ "@synopackageland/templates": "0.9.4",
28
28
  "ajv": "^8.17.1",
29
29
  "commander": "^13.1.0",
30
30
  "tar": "^7.4.3",
@@ -68,7 +68,11 @@ also exports `@synopackageland/ui/json-catalog.schema.json` and
68
68
 
69
69
  In DSM windows, keep a bounded `AppRoot` (for example `height: 100%`), use its
70
70
  default app modal scope or explicit `modalScope: "app"`, and set JSON `AppShell`
71
- `wideLayout: "window"`. Vue `AppLayout` uses `wide-layout="window"`. Reserve
71
+ `wideLayout: "window"`. Vue `AppLayout` uses `wide-layout="window"`. In a DSM
72
+ window (`ctx.host.platform().host === 'dsm'`), the Vue wrapper gives `AppRoot`
73
+ `dialog-bounds="viewport"` and connects its `activate` event to
74
+ `ctx.host.activateWindow()`, so Dialogs can leave the window and pressing one
75
+ brings the window to the front; below 600px they are bottom sheets. Reserve
72
76
  root sizing for the Vue/host wrapper; only use props exposed by the current JSON
73
77
  schema inside the spec. Reserve
74
78
  `modalScope: "document"` and `wideLayout: "web"` for whole-page web/Portal apps.
@@ -34,6 +34,13 @@ do not guess APIs or copy a version-specific component inventory.
34
34
  - Keep a bounded `AppRoot`, for example `<AppRoot style="height: 100%">`, with
35
35
  a sized host/mount container. Use its default app modal scope (`modalScope`);
36
36
  avoid overriding it to document scope in a DSM window.
37
+ - In a DSM window (`ctx.host.platform().host === 'dsm'`), give `AppRoot`
38
+ `dialog-bounds="viewport"` so Dialogs can be dragged out of the window as
39
+ DSM's own are, and connect its `activate` event to
40
+ `ctx.host.activateWindow()` so pressing a Dialog brings the window to the
41
+ front. Below 600px of viewport width the UI turns them into bottom sheets.
42
+ Keep the default `app` bounds outside DSM windows (standalone web, Portal,
43
+ previews).
37
44
  - Import only `@synopackageland/ui/themes/dsm7-embedded.css` for the template.
38
45
  The standalone `theme.css` and `dsm7.css` entrypoints affect the host page.
39
46
  - Set a unique `app.config.idPrefix` for every independent Vue app before