@synopackageland/templates 0.34.0 → 0.35.1

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 CHANGED
@@ -22,8 +22,8 @@ daemon:
22
22
  window_seconds: 300
23
23
  ```
24
24
 
25
- Templates 0.34.0 pin UI 0.16.1 and SDK 0.36.0 in native and Compose projects.
26
- Use CLI 0.38.0. The Vue `AppShell` shows a
25
+ Templates 0.35.1 pin UI 0.16.1 and SDK 0.38.0 in native and Compose projects.
26
+ Use CLI 0.41.1. The Vue `AppShell` shows a
27
27
  non-blocking **Reload** notice when an upgrade replaced the UI an open page
28
28
  loaded. Go Apps select
29
29
  their controller from their Go SDK requirement; an identity gateway selects it
@@ -81,19 +81,19 @@ calls each one from the generated script of the same name (`synopkgland skill sh
81
81
  The placeholders `__PACKAGE__` (also the Go module path), `__DISPLAY_NAME__` and
82
82
  `__BACKGROUND_ENABLED__` are substituted by `init`.
83
83
 
84
- `backend/go.mod` requires `github.com/synopackageland/syno-pkg-land-sdk v0.32.0`; that line is
84
+ `backend/go.mod` requires `github.com/synopackageland/syno-pkg-land-sdk v0.38.0`; that line is
85
85
  the single source of the SDK version and `frontend/package.json` pins
86
86
  `@synopackageland/sdk` to the same version. Python and Node.js name it in
87
87
  `backend.sdk`, Rust in the `syno-pkg-land-app` tag of `backend/Cargo.toml`
88
- (and `Cargo.lock`); all of them pin 0.32.0. The Vue frontend pins
89
- `@synopackageland/ui` 0.16.1. SDK 0.32.0 accepts UI `>=0.10.1 <0.18.0`,
88
+ (and `Cargo.lock`); all of them pin 0.38.0. The Vue frontend pins
89
+ `@synopackageland/ui` 0.16.1. SDK 0.38.0 accepts UI `>=0.10.1 <0.18.0`,
90
90
  so no UI peer override is needed. Tests use jsdom 30 for UI floating-layer styles.
91
91
 
92
92
  Interactive NAS file operations use same-origin browser calls.
93
93
  Custom file handlers use the SDK's
94
- [session transport migration](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.36.0/docs/dsm-session-transport.md).
95
- CLI 0.38.0 reads SDK 0.36.0's release manifest, which names immutable
96
- executor/v0.32.0 and its executor digests. Its `~0.34.0` templates
94
+ [session transport migration](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.0/docs/dsm-session-transport.md).
95
+ CLI 0.41.1 reads SDK 0.38.0's release manifest, which names immutable
96
+ executor/v0.32.0 and its executor digests. Its `~0.35.1` templates
97
97
  dependency selects this release.
98
98
 
99
99
  Every App method must appear in the permissions table, including methods whose
@@ -106,9 +106,45 @@ authentication. Other paths retain DSM entry admission. See the CLI's
106
106
  UI and i18n text, including the DSM glossary, omit terminal sentence periods.
107
107
  Keep punctuation between sentences and intentional loading ellipses.
108
108
 
109
+ ## Request deadlines and background work
110
+
111
+ SDK/App 0.38.0 defaults to 300 seconds for cooperative requests and 302 seconds
112
+ for the TS client and generated DSM window. The CLI reads the selected SDK's
113
+ timeout spec; `backend.timeout_seconds` explicitly overrides it for native
114
+ backends, and an earlier parent deadline still wins. Go assembly should fall
115
+ back to `api.DefaultRequestTimeout`, as the scaffold does. Rebuild with matching
116
+ Go/TS SDK versions: installed Apps and explicit manifest budgets do not change
117
+ automatically. Binary/non-SDK fallbacks keep their own limits.
118
+
119
+ For long NAS work, use the existing jobs capability and independent package-account
120
+ worker or resident daemon. Authenticate a fixed operation and trusted owner,
121
+ admit with `NewRequestStore` / `SubmitSingleton` or `Submit`, and return the
122
+ existing outcome and original job ID promptly. Execute `Runner.Work` separately
123
+ and report phases/progress with `Task.Report`; unknown totals stay unknown.
124
+ Jobs and delegated downloads default to 30 minutes; trusted assembly may select
125
+ a finite allowance suited to the operation.
126
+
127
+ Authenticate every status/result/cancel read and poll with bounded backoff by
128
+ the original ID. Keep the last known state through read failures. Show
129
+ `queued` / `running` as still working; a slow NAS or timed-out status request
130
+ does not fail a job. Only terminal states establish completion. After a lost
131
+ admission reply, reuse the same idempotency key and input, or query the known
132
+ ID; never replay a dispatched mutation with a new key because a reply was lost.
133
+ Cancellation cannot undo remote effects.
134
+
135
+ Direct browser File Station reads also default to 302 seconds, and identity
136
+ gateway response headers to 310 seconds. Match customized proxy/header budgets.
137
+ Other DSM versions and external proxies may impose separate limits; these
138
+ defaults are not a universal five-minute end-to-end guarantee. Executor batch
139
+ caps, approved root policy/program budgets and credential lifetimes retain
140
+ their existing limits; long root work uses `root.start` / `root.jobs.*`.
141
+ The independent ctl transport keeps its 62-second default: use an explicit
142
+ `--timeout` for long synchronous calls, or an existing nonblocking job flow.
143
+ See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.0/docs/request-deadlines.md).
144
+
109
145
  ## Hyper Backup
110
146
 
111
- Native Apps appear in Hyper Backup as applications by default. CLI 0.38.0
147
+ Native Apps appear in Hyper Backup as applications by default. CLI 0.40.0
112
148
  builds them with a fixed `scripts/backup/` shim that Hyper Backup runs as
113
149
  root; it only switches to the package account, which archives or restores the
114
150
  App's data folder with the SDK backup control. The App itself still runs as
@@ -124,7 +160,7 @@ Keep `base: './'`, relative imports and `cssCodeSplit: false`; allow lazy chunks
124
160
  with `() => import('./Page.vue')` or `defineAsyncComponent`. Each mount creates
125
161
  its own Vue App and returns synchronous cleanup.
126
162
 
127
- CLI 0.38.0 copies the entire output into `ui/app/<tree-sha256>/` and verifies it
163
+ CLI 0.40.0 copies the entire output into `ui/app/<tree-sha256>/` and verifies it
128
164
  during `inspect`. Changing a lazy chunk changes the snapshot URL. An open page
129
165
  may need to reload after an upgrade when an old lazy chunk is unavailable.
130
166
  See the SDK's [frontend bundle contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/main/docs/frontend-bundles.md).
@@ -263,4 +299,4 @@ The bridge examples expose submission, lookup and cancellation through
263
299
 
264
300
  ## External access
265
301
 
266
- With CLI 0.38.0 and SDK 0.36.0, a gateway App may declare `identity_gateway.external_access: {connect: optional, origin_change: confirm, single_origin: true}` for an upstream that signs in on one fixed URL. The policy is forwarded to the packaged gateway. A single-origin App's `manual_origin` accepts an explicit HTTPS port; the `external-origin` installation setting remains restricted to port 443. The DSM launcher selects a provider destination, probes `/_spl/ping` for up to eight seconds, and explains failures before offering **Open anyway**. A configured single-origin App always opens its primary external origin.
302
+ With CLI 0.40.0 and SDK 0.38.0, a gateway App may declare `identity_gateway.external_access: {connect: optional, origin_change: confirm, single_origin: true}` for an upstream that signs in on one fixed URL. The policy is forwarded to the packaged gateway. A single-origin App's `manual_origin` accepts an explicit HTTPS port; the `external-origin` installation setting remains restricted to port 443. The DSM launcher selects a provider destination, probes `/_spl/ping` for up to eight seconds, and explains failures before offering **Open anyway**. A configured single-origin App always opens its primary external origin.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synopackageland/templates",
3
- "version": "0.34.0",
3
+ "version": "0.35.1",
4
4
  "description": "Project templates for synopkgland init: native-go, native-python, native-node and native-rust (plain or Vue, with jobs, delegate and root-ops overlays), binary and compose.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -16,7 +16,7 @@ compose:
16
16
  web: {service: web, port: 8080, health: {path: /, status: 200}}
17
17
  network: {egress: isolated}
18
18
  identity_gateway:
19
- sdk: 0.36.0
19
+ sdk: 0.38.0
20
20
  mode: none
21
21
  listen: {http: 28000}
22
22
  # Web Apps default to new-page through the shared app-launch resolver.
@@ -15,6 +15,20 @@ DSM main menu → DSM window (ui/app.js)
15
15
  4. your handler (backend/internal/app)
16
16
  ```
17
17
 
18
+ ## Requests and long work
19
+
20
+ SDK/App 0.38.0 defaults to 300-second requests and a 302-second browser wait.
21
+ Explicit `backend.timeout_seconds` and earlier parent deadlines still apply;
22
+ rebuild the App to use the new SDK. For long NAS work, enable the existing jobs
23
+ capability: return admission and the original job ID promptly, execute in the
24
+ independent package-account worker and report phase/progress. Authenticate
25
+ status/result polling by that ID; a slow NAS or failed status read leaves the
26
+ last queued/running state intact. After a lost admission reply, reuse the same
27
+ idempotency key and input instead of replaying a mutation with a new key.
28
+ Jobs default to 30 minutes; approved executor limits remain separate. ctl keeps
29
+ its 62-second transport default; use an explicit `--timeout` or an existing
30
+ nonblocking job. See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.0/docs/request-deadlines.md).
31
+
18
32
  ## Quick start
19
33
 
20
34
  Needs Node.js with `synopkgland` installed, and Go 1.25+.
@@ -1,6 +1,6 @@
1
1
  Native Go package build dependencies
2
2
 
3
- github.com/synopackageland/syno-pkg-land-sdk v0.36.0 (MIT)
3
+ github.com/synopackageland/syno-pkg-land-sdk v0.38.0 (MIT)
4
4
 
5
5
  Copyright (c) 2026 synopkgland
6
6
 
@@ -4,6 +4,6 @@ go 1.25.0
4
4
 
5
5
  toolchain go1.26.10
6
6
 
7
- require github.com/synopackageland/syno-pkg-land-sdk v0.36.0
7
+ require github.com/synopackageland/syno-pkg-land-sdk v0.38.0
8
8
 
9
9
  require golang.org/x/sys v0.44.0 // indirect
@@ -1,4 +1,4 @@
1
- github.com/synopackageland/syno-pkg-land-sdk v0.36.0 h1:fG/QC6tYqM1tKKdVNKkIbkRiH5DALE2Y/NeeBIMBqkU=
2
- github.com/synopackageland/syno-pkg-land-sdk v0.36.0/go.mod h1:8GwREGbczc8mAk4Gv8FUHaukXXCUstjzkovQrNV59Cc=
1
+ github.com/synopackageland/syno-pkg-land-sdk v0.38.0 h1:rAUTfGs6mcrHRQ+vt/GpU/RV3/eP+bnCq3bLdWvKZVk=
2
+ github.com/synopackageland/syno-pkg-land-sdk v0.38.0/go.mod h1:8GwREGbczc8mAk4Gv8FUHaukXXCUstjzkovQrNV59Cc=
3
3
  golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
4
4
  golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
@@ -7,7 +7,7 @@
7
7
  "name": "native-dsm-vue-app",
8
8
  "dependencies": {
9
9
  "@lucide/vue": "1.48.0",
10
- "@synopackageland/sdk": "0.36.0",
10
+ "@synopackageland/sdk": "0.38.0",
11
11
  "@synopackageland/ui": "0.16.1",
12
12
  "vue": "3.5.43"
13
13
  },
@@ -1152,9 +1152,9 @@
1152
1152
  }
1153
1153
  },
1154
1154
  "node_modules/@synopackageland/sdk": {
1155
- "version": "0.36.0",
1156
- "resolved": "https://registry.npmjs.org/@synopackageland/sdk/-/sdk-0.36.0.tgz",
1157
- "integrity": "sha512-AELmjma44MpHypbJXLOQcj3gERydKlpBvLW2Rhf9XR5plercH/mgyB54Zu6w7pFVfLgUtz+SPykofatvOQsi8w==",
1155
+ "version": "0.38.0",
1156
+ "resolved": "https://registry.npmjs.org/@synopackageland/sdk/-/sdk-0.38.0.tgz",
1157
+ "integrity": "sha512-7mDRCpxBVT26CZdptzwxgVaNei0/gy1SmfrPECaZNwwZDTppZkizcnmkYNPJugJWBhtlUNOq1i+uUL8U7iW/2w==",
1158
1158
  "license": "MIT",
1159
1159
  "peerDependencies": {
1160
1160
  "@lucide/vue": "^1.48.0",
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@lucide/vue": "1.48.0",
11
- "@synopackageland/sdk": "0.36.0",
11
+ "@synopackageland/sdk": "0.38.0",
12
12
  "@synopackageland/ui": "0.16.1",
13
13
  "vue": "3.5.43"
14
14
  },
@@ -15,6 +15,20 @@ DSM main menu → DSM window (ui/app.js)
15
15
  4. your method, which may ask the runtime for services (files, jobs, executor)
16
16
  ```
17
17
 
18
+ ## Requests and long work
19
+
20
+ SDK/App 0.38.0 defaults to 300-second requests and a 302-second browser wait.
21
+ Explicit `backend.timeout_seconds` and earlier parent deadlines still apply;
22
+ rebuild the App to use the new SDK. For long NAS work, enable the existing jobs
23
+ capability: return admission and the original job ID promptly, execute in the
24
+ independent package-account worker and report phase/progress. Authenticate
25
+ status/result polling by that ID; a slow NAS or failed status read leaves the
26
+ last queued/running state intact. After a lost admission reply, reuse the same
27
+ idempotency key and input instead of replaying a mutation with a new key.
28
+ Jobs default to 30 minutes; approved executor limits remain separate. ctl keeps
29
+ its 62-second transport default; use an explicit `--timeout` or an existing
30
+ nonblocking job. See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.0/docs/request-deadlines.md).
31
+
18
32
  ## Quick start
19
33
 
20
34
  Needs Node.js 20 or later with `synopkgland` installed. The SPK depends on DSM's **Node.js v20** package (INFO `install_dep_packages`).
@@ -49,7 +49,7 @@ backend:
49
49
  runtime: node
50
50
  dir: backend/app
51
51
  entry: main.js
52
- sdk: 0.36.0
52
+ sdk: 0.38.0
53
53
  node: { package: Node.js_v22 }
54
54
 
55
55
  ui:
@@ -15,6 +15,20 @@ DSM main menu → DSM window (ui/app.js)
15
15
  4. your method, which may ask the runtime for services (files, jobs, executor)
16
16
  ```
17
17
 
18
+ ## Requests and long work
19
+
20
+ SDK/App 0.38.0 defaults to 300-second requests and a 302-second browser wait.
21
+ Explicit `backend.timeout_seconds` and earlier parent deadlines still apply;
22
+ rebuild the App to use the new SDK. For long NAS work, enable the existing jobs
23
+ capability: return admission and the original job ID promptly, execute in the
24
+ independent package-account worker and report phase/progress. Authenticate
25
+ status/result polling by that ID; a slow NAS or failed status read leaves the
26
+ last queued/running state intact. After a lost admission reply, reuse the same
27
+ idempotency key and input instead of replaying a mutation with a new key.
28
+ Jobs default to 30 minutes; approved executor limits remain separate. ctl keeps
29
+ its 62-second transport default; use an explicit `--timeout` or an existing
30
+ nonblocking job. See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.0/docs/request-deadlines.md).
31
+
18
32
  ## Quick start
19
33
 
20
34
  Needs Node.js with `synopkgland` installed, and Python 3.8 or later.
@@ -47,7 +47,7 @@ backend:
47
47
  runtime: python
48
48
  dir: backend/app
49
49
  entry: main.py
50
- sdk: 0.36.0
50
+ sdk: 0.38.0
51
51
 
52
52
  ui:
53
53
  # Non-UI-SDK frontends open a full page; Portal is a separate opt-in.
@@ -15,6 +15,20 @@ DSM main menu → DSM window (ui/app.js)
15
15
  4. your method, which may ask the runtime for services (files, jobs, executor)
16
16
  ```
17
17
 
18
+ ## Requests and long work
19
+
20
+ SDK/App 0.38.0 defaults to 300-second requests and a 302-second browser wait.
21
+ Explicit `backend.timeout_seconds` and earlier parent deadlines still apply;
22
+ rebuild the App to use the new SDK. For long NAS work, enable the existing jobs
23
+ capability: return admission and the original job ID promptly, execute in the
24
+ independent package-account worker and report phase/progress. Authenticate
25
+ status/result polling by that ID; a slow NAS or failed status read leaves the
26
+ last queued/running state intact. After a lost admission reply, reuse the same
27
+ idempotency key and input instead of replaying a mutation with a new key.
28
+ Jobs default to 30 minutes; approved executor limits remain separate. ctl keeps
29
+ its 62-second transport default; use an explicit `--timeout` or an existing
30
+ nonblocking job. See the SDK's [request deadline contract](https://github.com/synopackageland/syno-pkg-land-sdk/blob/v0.38.0/docs/request-deadlines.md).
31
+
18
32
  ## Quick start
19
33
 
20
34
  Needs Node.js with `synopkgland` installed, Rust through rustup, Zig and `cargo-zigbuild`: `backend/rust-toolchain.toml` pins 1.97.1 with the three DSM targets, so the first `cargo` run installs them.
@@ -104,8 +104,8 @@ dependencies = [
104
104
 
105
105
  [[package]]
106
106
  name = "syno-pkg-land-app"
107
- version = "0.36.0"
108
- source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.36.0#255d1f45482871eccee0db225e3795fa45aa8b59"
107
+ version = "0.38.0"
108
+ source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.38.0#a8592da6d2cd0854f78f1e9a1abd36cc9cf2f463"
109
109
  dependencies = [
110
110
  "libc",
111
111
  "serde",
@@ -9,7 +9,7 @@ libc = "0.2"
9
9
  serde = { version = "1", features = ["derive"] }
10
10
  serde_json = "1"
11
11
  # The SDK version is the tag; `synopkgland check` reads it from Cargo.lock.
12
- syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.36.0" }
12
+ syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.38.0" }
13
13
 
14
14
  [profile.release]
15
15
  # A handler panic becomes an "internal" reply; abort would end the App without one.