@synopackageland/templates 0.10.5 → 0.10.8

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
@@ -38,12 +38,12 @@ calls each one from the generated script of the same name (`synopkgland skill sh
38
38
  The placeholders `__PACKAGE__` (also the Go module path), `__DISPLAY_NAME__` and
39
39
  `__BACKGROUND_ENABLED__` are substituted by `init`.
40
40
 
41
- `backend/go.mod` requires `github.com/synopackageland/syno-pkg-land-sdk v0.10.5`; that line is
41
+ `backend/go.mod` requires `github.com/synopackageland/syno-pkg-land-sdk v0.10.7`; that line is
42
42
  the single source of the SDK version and `frontend/package.json` pins
43
43
  `@synopackageland/sdk` to the same version. Python and Node.js name it in
44
44
  `backend.sdk`, Rust in the `syno-pkg-land-app` tag of `backend/Cargo.toml`
45
- (and `Cargo.lock`); all of them pin 0.10.5. The Vue frontend pins
46
- `@synopackageland/ui` 0.9.7.
45
+ (and `Cargo.lock`); all of them pin 0.10.7. The Vue frontend pins
46
+ `@synopackageland/ui` 0.9.8.
47
47
 
48
48
  ## Notice writer
49
49
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synopackageland/templates",
3
- "version": "0.10.5",
3
+ "version": "0.10.8",
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": {"type": "git", "url": "git+https://github.com/synopackageland/syno-pkg-land-templates.git"},
@@ -1,6 +1,6 @@
1
1
  Native Go package build dependencies
2
2
 
3
- github.com/synopackageland/syno-pkg-land-sdk v0.10.5 (MIT)
3
+ github.com/synopackageland/syno-pkg-land-sdk v0.10.7 (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.9
6
6
 
7
- require github.com/synopackageland/syno-pkg-land-sdk v0.10.5
7
+ require github.com/synopackageland/syno-pkg-land-sdk v0.10.7
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.10.5 h1:HeKZ+4YFdWDJaIllFD2JV1nAJEmMClHAb9lJiQcJjJo=
2
- github.com/synopackageland/syno-pkg-land-sdk v0.10.5/go.mod h1:hlsvaVuH2wsAoR8jzI1Rg/NeejQSFpAaN6zpIWsVbjI=
1
+ github.com/synopackageland/syno-pkg-land-sdk v0.10.7 h1:QbN53rYrh3x9VvYUys3dlNrMN1dp7gZFSIsfWbps2og=
2
+ github.com/synopackageland/syno-pkg-land-sdk v0.10.7/go.mod h1:hlsvaVuH2wsAoR8jzI1Rg/NeejQSFpAaN6zpIWsVbjI=
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=
@@ -24,6 +24,7 @@
24
24
  "error.identity_unavailable": "Dieses Benutzerkonto kann nicht ermittelt werden. Bitte versuchen Sie es später erneut.",
25
25
  "error.APP_STOPPED": "Die App ist angehalten. Starten Sie sie im Paket-Zentrum und versuchen Sie es dann erneut.",
26
26
  "error.APP_STARTING": "Die App wird gestartet. Versuchen Sie es gleich erneut.",
27
+ "error.credential_not_ready": "DSM hat dieser Seite kein Anmeldetoken gegeben. Melden Sie sich mit Ihrem Kennwort erneut bei DSM an und öffnen Sie die App dann über den DSM-Desktop.",
27
28
  "greeting.adminOnly": "Nur Mitglieder der Gruppe administrators können den Gruß ändern.",
28
29
  "greeting.label": "Neuer Gruß",
29
30
  "greeting.save": "Speichern",
@@ -24,6 +24,7 @@
24
24
  "error.identity_unavailable": "Unable to identify this user account. Please try again later.",
25
25
  "error.APP_STOPPED": "The App is stopped. Start it in Package Center, then try again.",
26
26
  "error.APP_STARTING": "The App is starting. Try again in a moment.",
27
+ "error.credential_not_ready": "DSM did not give this page its sign-in token. Sign in to DSM again with your password, then open the App from the DSM desktop.",
27
28
  "greeting.adminOnly": "Only members of the administrators group can change the greeting.",
28
29
  "greeting.label": "New greeting",
29
30
  "greeting.save": "Save",
@@ -24,6 +24,7 @@
24
24
  "error.identity_unavailable": "No se puede identificar esta cuenta de usuario. Vuelva a intentarlo más tarde.",
25
25
  "error.APP_STOPPED": "La App está detenida. Iníciela en el Centro de paquetes y vuelva a intentarlo.",
26
26
  "error.APP_STARTING": "La App se está iniciando. Vuelva a intentarlo en un momento.",
27
+ "error.credential_not_ready": "DSM no proporcionó a esta página su token de inicio de sesión. Inicie sesión de nuevo en DSM con su contraseña y abra la App desde el escritorio de DSM.",
27
28
  "greeting.adminOnly": "Solo los miembros del grupo administrators pueden cambiar el saludo.",
28
29
  "greeting.label": "Nuevo saludo",
29
30
  "greeting.save": "Guardar",
@@ -24,6 +24,7 @@
24
24
  "error.identity_unavailable": "Impossible d'identifier ce compte utilisateur. Veuillez réessayer ultérieurement.",
25
25
  "error.APP_STOPPED": "L’App est arrêtée. Démarrez-la dans le Centre de paquets, puis réessayez.",
26
26
  "error.APP_STARTING": "L’App démarre. Réessayez dans un instant.",
27
+ "error.credential_not_ready": "DSM n’a pas fourni de jeton de connexion à cette page. Reconnectez-vous à DSM avec votre mot de passe, puis ouvrez l’App depuis le bureau DSM.",
27
28
  "greeting.adminOnly": "Seuls les membres du groupe administrators peuvent modifier le message d'accueil.",
28
29
  "greeting.label": "Nouveau message d'accueil",
29
30
  "greeting.save": "Sauvegarder",
@@ -24,6 +24,7 @@
24
24
  "error.identity_unavailable": "Impossibile identificare questo account utente. Riprovare più tardi.",
25
25
  "error.APP_STOPPED": "L’App è arrestata. Avviarla in Centro pacchetti, quindi riprovare.",
26
26
  "error.APP_STARTING": "L’App è in fase di avvio. Riprovare tra poco.",
27
+ "error.credential_not_ready": "DSM non ha fornito a questa pagina il token di accesso. Accedere di nuovo a DSM con la password, quindi aprire l’App dal desktop di DSM.",
27
28
  "greeting.adminOnly": "Solo i membri del gruppo administrators possono modificare il saluto.",
28
29
  "greeting.label": "Nuovo saluto",
29
30
  "greeting.save": "Salva",
@@ -24,6 +24,7 @@
24
24
  "error.identity_unavailable": "このユーザー アカウントを識別できません。後でもう一度お試しください。",
25
25
  "error.APP_STOPPED": "App は停止しています。パッケージ センターで起動してから、もう一度お試しください。",
26
26
  "error.APP_STARTING": "App を起動しています。しばらくしてから再試行してください。",
27
+ "error.credential_not_ready": "DSM がこのページにサインイン トークンを提供していません。パスワードで DSM に再度サインインしてから、DSM デスクトップから App を開いてください。",
27
28
  "greeting.adminOnly": "あいさつを変更できるのは administrators グループのメンバーのみです。",
28
29
  "greeting.label": "新しいあいさつ",
29
30
  "greeting.save": "保存",
@@ -24,6 +24,7 @@
24
24
  "error.identity_unavailable": "이 사용자 계정을 확인할 수 없습니다. 나중에 다시 시도하십시오.",
25
25
  "error.APP_STOPPED": "App이 중지되었습니다. 패키지 센터에서 시작한 후 다시 시도하십시오.",
26
26
  "error.APP_STARTING": "App을 시작하는 중입니다. 잠시 후 다시 시도하십시오.",
27
+ "error.credential_not_ready": "DSM이 이 페이지에 로그인 토큰을 제공하지 않았습니다. 암호로 DSM에 다시 로그인한 후 DSM 데스크톱에서 App을 여십시오.",
27
28
  "greeting.adminOnly": "administrators 그룹의 구성원만 인사말을 변경할 수 있습니다.",
28
29
  "greeting.label": "새 인사말",
29
30
  "greeting.save": "저장",
@@ -24,6 +24,7 @@
24
24
  "error.identity_unavailable": "无法识别此用户账号。请稍后再试。",
25
25
  "error.APP_STOPPED": "App 已停止。请在套件中心启动后重试。",
26
26
  "error.APP_STARTING": "App 正在启动,请稍后重试。",
27
+ "error.credential_not_ready": "DSM 没有为此页面提供登录令牌。请使用密码重新登录 DSM,然后从 DSM 桌面打开 App。",
27
28
  "greeting.adminOnly": "只有 administrators 群组的成员可以更改问候语。",
28
29
  "greeting.label": "新的问候语",
29
30
  "greeting.save": "保存",
@@ -24,6 +24,7 @@
24
24
  "error.identity_unavailable": "無法識別此使用者帳號。請稍後再試。",
25
25
  "error.APP_STOPPED": "App 已停止。請在套件中心啟動後再試一次。",
26
26
  "error.APP_STARTING": "App 正在啟動,請稍後再試。",
27
+ "error.credential_not_ready": "DSM 沒有提供此頁面的登入權杖。請以密碼重新登入 DSM,再從 DSM 桌面開啟 App。",
27
28
  "greeting.adminOnly": "只有 administrators 群組的成員可以變更問候語。",
28
29
  "greeting.label": "新的問候語",
29
30
  "greeting.save": "儲存",
@@ -58,8 +58,12 @@ func (cfg Config) executorHoldsThisBuild(ctx context.Context) error {
58
58
  var executorSocketBase = "/run/synopkgland"
59
59
 
60
60
  // executor keeps the executor's protocol v1 refusal codes (POLICY_DENIED,
61
- // EXECUTOR_UNAVAILABLE, ...) as the API error code. Without its own Timeout
62
- // the client waits as the SDK says: delegate.ExecutorTimeout, root.run longer.
61
+ // EXECUTOR_UNAVAILABLE, ...) as the API error code. It is the SDK's
62
+ // delegate.Local: it waits as the SDK says (delegate.ExecutorTimeout, root.run
63
+ // longer) and reads the package's lifecycle mailbox, so a stopped or starting
64
+ // package answers APP_STOPPED or APP_STARTING.
63
65
  func (cfg Config) executor() *delegate.Client {
64
- return &delegate.Client{Socket: filepath.Join(executorSocketBase, cfg.PackageID, "executor.sock")}
66
+ client := delegate.Local(cfg.PackageID)
67
+ client.Socket = filepath.Join(executorSocketBase, cfg.PackageID, "executor.sock")
68
+ return client
65
69
  }
@@ -10,6 +10,8 @@ import (
10
10
  "sync"
11
11
  "testing"
12
12
 
13
+ "github.com/synopackageland/syno-pkg-land-sdk/delegate"
14
+
13
15
  appapi "__PACKAGE__/internal/api"
14
16
  )
15
17
 
@@ -167,7 +169,17 @@ func TestExecutorRootRunReportsTheExecutorsRefusalCode(t *testing.T) {
167
169
  // The executor client waits as long as the SDK says (spec/protocol/v1,
168
170
  // Timeouts): delegate.ExecutorTimeout for status and control, root.run longer.
169
171
  func TestTheExecutorClientWaitsTheSDKsTimeout(t *testing.T) {
170
- if got := testConfig(t).executor().Timeout; got != 0 {
171
- t.Fatalf("executor client sets its own wait %v instead of the SDK's", got)
172
+ if got := testConfig(t).executor().Timeout; got != delegate.ExecutorTimeout {
173
+ t.Fatalf("executor client waits %v instead of the SDK's %v", got, delegate.ExecutorTimeout)
174
+ }
175
+ }
176
+
177
+ // The executor client is the SDK's delegate.Local: it reads the package's
178
+ // lifecycle mailbox, so a stopped or starting package answers APP_STOPPED or
179
+ // APP_STARTING instead of EXECUTOR_UNAVAILABLE (t-0513).
180
+ func TestTheExecutorClientReadsThePackagesLifecycleMailbox(t *testing.T) {
181
+ cfg := testConfig(t)
182
+ if got, want := cfg.executor().Mailbox, "/var/packages/"+cfg.PackageID+"/var/executor"; got != want {
183
+ t.Fatalf("executor client mailbox %q, want %q", got, want)
172
184
  }
173
185
  }
@@ -7,8 +7,8 @@
7
7
  "name": "native-dsm-vue-app",
8
8
  "dependencies": {
9
9
  "@lucide/vue": "1.48.0",
10
- "@synopackageland/sdk": "0.10.5",
11
- "@synopackageland/ui": "0.9.7",
10
+ "@synopackageland/sdk": "0.10.7",
11
+ "@synopackageland/ui": "0.9.8",
12
12
  "vue": "3.5.43"
13
13
  },
14
14
  "devDependencies": {
@@ -1148,9 +1148,9 @@
1148
1148
  }
1149
1149
  },
1150
1150
  "node_modules/@synopackageland/sdk": {
1151
- "version": "0.10.5",
1152
- "resolved": "https://registry.npmjs.org/@synopackageland/sdk/-/sdk-0.10.5.tgz",
1153
- "integrity": "sha512-8KEU+KDN8zNeEOCD3UHXfEh8qXiq0B98cuuuFOQBukEQeHA2nENLCBZiy7cnWhHKbZeLPGManrawFvCddRNsJA==",
1151
+ "version": "0.10.7",
1152
+ "resolved": "https://registry.npmjs.org/@synopackageland/sdk/-/sdk-0.10.7.tgz",
1153
+ "integrity": "sha512-c234X2yYE/O/+7kfiaHIPs2yOy+zl2cE1khmFcy9uf1qN++ddZsMsVxlMvDniS6xtRl3pWgwbjaSsX7CYcsM0g==",
1154
1154
  "license": "MIT",
1155
1155
  "peerDependencies": {
1156
1156
  "@lucide/vue": "^1.48.0",
@@ -1167,9 +1167,9 @@
1167
1167
  }
1168
1168
  },
1169
1169
  "node_modules/@synopackageland/ui": {
1170
- "version": "0.9.7",
1171
- "resolved": "https://registry.npmjs.org/@synopackageland/ui/-/ui-0.9.7.tgz",
1172
- "integrity": "sha512-3IY+LsRXBrxwoogpoVjRjyC8nH56PUZrLTHC9DJ9z91NrwFar7SRHPVCpSR9lPNwRVtF+zlgTmRwNLBY6ZE3HA==",
1170
+ "version": "0.9.8",
1171
+ "resolved": "https://registry.npmjs.org/@synopackageland/ui/-/ui-0.9.8.tgz",
1172
+ "integrity": "sha512-zvJWEuEFOgAstMvDH97cgWAhzpiLRJ+uuLCkOTA3Z64wpeAxsJZXBOBfTLsmoBMy7jPs+EwtVHNbA03KvYh+uQ==",
1173
1173
  "license": "MIT",
1174
1174
  "dependencies": {
1175
1175
  "@internationalized/date": "3.12.4",
@@ -8,8 +8,8 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@lucide/vue": "1.48.0",
11
- "@synopackageland/sdk": "0.10.5",
12
- "@synopackageland/ui": "0.9.7",
11
+ "@synopackageland/sdk": "0.10.7",
12
+ "@synopackageland/ui": "0.9.8",
13
13
  "vue": "3.5.43"
14
14
  },
15
15
  "devDependencies": {
@@ -49,7 +49,7 @@ backend:
49
49
  runtime: node
50
50
  dir: backend/app
51
51
  entry: main.js
52
- sdk: 0.10.5
52
+ sdk: 0.10.7
53
53
  node: { package: Node.js_v20 }
54
54
 
55
55
  ui:
@@ -47,7 +47,7 @@ backend:
47
47
  runtime: python
48
48
  dir: backend/app
49
49
  entry: main.py
50
- sdk: 0.10.5
50
+ sdk: 0.10.7
51
51
 
52
52
  ui:
53
53
  # Static files served at /webman/3rdparty/<package>/app/. app.js and app.css
@@ -104,8 +104,8 @@ dependencies = [
104
104
 
105
105
  [[package]]
106
106
  name = "syno-pkg-land-app"
107
- version = "0.10.5"
108
- source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.10.5#d39f5867764ada47a39faf2787a513b54d063b85"
107
+ version = "0.10.7"
108
+ source = "git+https://github.com/synopackageland/syno-pkg-land-sdk?tag=v0.10.7#5e27cb79146262084a1e5e86989d00bff8655b9d"
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.10.5" }
12
+ syno-pkg-land-app = { git = "https://github.com/synopackageland/syno-pkg-land-sdk", tag = "v0.10.7" }
13
13
 
14
14
  [profile.release]
15
15
  # A handler panic becomes an "internal" reply; abort would end the App without one.