@synopackageland/cli 0.6.1 → 0.7.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.
Files changed (640) hide show
  1. package/CHANGELOG.md +846 -0
  2. package/README.md +81 -89
  3. package/dist/add.d.ts +4 -1
  4. package/dist/add.js +45 -17
  5. package/dist/build-spk/delegate-scope.d.ts +6 -0
  6. package/dist/build-spk/delegate-scope.js +34 -0
  7. package/dist/build-spk/dsm-arch.d.ts +7 -1
  8. package/dist/build-spk/dsm-arch.js +24 -28
  9. package/dist/build-spk/dsm-platforms.json +42 -0
  10. package/dist/build-spk/dsm-version.d.ts +11 -0
  11. package/dist/build-spk/dsm-version.js +17 -0
  12. package/dist/build-spk/gateway.js +8 -4
  13. package/dist/build-spk/generator.js +30 -5
  14. package/dist/build-spk/go-toolchain.d.ts +20 -0
  15. package/dist/build-spk/go-toolchain.js +44 -0
  16. package/dist/build-spk/notices.js +4 -1
  17. package/dist/build-spk/resource-worker.js +3 -0
  18. package/dist/build-spk/wizard-messages.d.ts +66 -0
  19. package/dist/build-spk/wizard-messages.js +75 -9
  20. package/dist/cli.js +28 -14
  21. package/dist/contract/schema-validate.js +8 -0
  22. package/dist/contract/validate.js +30 -0
  23. package/dist/deploy/deploy.d.ts +1 -1
  24. package/dist/deploy/deploy.js +8 -0
  25. package/dist/deploy/native-install-values.d.ts +17 -0
  26. package/dist/deploy/native-install-values.js +32 -0
  27. package/dist/deploy/plan.d.ts +6 -2
  28. package/dist/deploy/plan.js +58 -7
  29. package/dist/deploy/spk-version.js +1 -1
  30. package/dist/error-registry.js +54 -20
  31. package/dist/host/dsm-client.d.ts +8 -4
  32. package/dist/host/dsm-client.js +63 -21
  33. package/dist/host/dsm-http.js +24 -2
  34. package/dist/host/types.d.ts +3 -1
  35. package/dist/info.js +45 -10
  36. package/dist/init.d.ts +3 -0
  37. package/dist/init.js +50 -19
  38. package/dist/package-metadata.d.ts +21 -0
  39. package/dist/package-metadata.js +101 -0
  40. package/dist/portal/alias.d.ts +25 -0
  41. package/dist/portal/alias.js +48 -0
  42. package/dist/portal/package.d.ts +33 -0
  43. package/dist/portal/package.js +116 -0
  44. package/dist/runtime/delegate-contract.d.ts +79 -0
  45. package/dist/runtime/delegate-contract.js +27 -0
  46. package/dist/runtime/dsm-version.d.ts +6 -0
  47. package/dist/runtime/dsm-version.js +8 -0
  48. package/dist/runtime/executor-build.js +10 -6
  49. package/dist/runtime/executor-inspect.d.ts +3 -0
  50. package/dist/runtime/executor-inspect.js +11 -5
  51. package/dist/runtime/executor-policy.d.ts +12 -0
  52. package/dist/runtime/executor-policy.js +43 -3
  53. package/dist/runtime/executor-scope-task.d.ts +4 -0
  54. package/dist/runtime/executor-scope-task.js +21 -0
  55. package/dist/runtime/executor-tasks.d.ts +2 -1
  56. package/dist/runtime/executor-tasks.js +4 -4
  57. package/dist/skill.js +1 -0
  58. package/dist/standalone/api-permissions.d.ts +10 -0
  59. package/dist/standalone/api-permissions.js +19 -2
  60. package/dist/standalone/background.d.ts +16 -0
  61. package/dist/standalone/background.js +69 -2
  62. package/dist/standalone/binary.d.ts +1 -1
  63. package/dist/standalone/binary.js +22 -8
  64. package/dist/standalone/build.d.ts +1 -1
  65. package/dist/standalone/build.js +38 -8
  66. package/dist/standalone/daemon.d.ts +1 -0
  67. package/dist/standalone/daemon.js +10 -5
  68. package/dist/standalone/dsm-window.d.ts +3 -1
  69. package/dist/standalone/dsm-window.js +78 -49
  70. package/dist/standalone/inspect-spk.d.ts +8 -0
  71. package/dist/standalone/inspect-spk.js +110 -27
  72. package/dist/standalone/lifecycle.js +86 -8
  73. package/dist/standalone/manifest.d.ts +13 -0
  74. package/dist/standalone/manifest.js +57 -8
  75. package/dist/standalone/native-authorization-window.d.ts +1 -1
  76. package/dist/standalone/native-authorization-window.js +9 -1
  77. package/dist/standalone/native-layout.d.ts +3 -0
  78. package/dist/standalone/native-layout.js +37 -5
  79. package/dist/standalone/native-root-window.d.ts +4 -2
  80. package/dist/standalone/native-root-window.js +33 -18
  81. package/dist/standalone/portal-window.d.ts +21 -0
  82. package/dist/standalone/portal-window.js +155 -0
  83. package/dist/standalone/portal.d.ts +4 -0
  84. package/dist/standalone/portal.js +4 -0
  85. package/dist/standalone/resource.d.ts +5 -3
  86. package/dist/standalone/resource.js +6 -3
  87. package/dist/standalone/root-window.d.ts +4 -1
  88. package/dist/standalone/root-window.js +193 -36
  89. package/dist/standalone/spk.d.ts +1 -1
  90. package/dist/standalone/spk.js +25 -7
  91. package/dist/templates/_daemon/go.mod +1 -1
  92. package/dist/templates/_daemon/main.go +6 -3
  93. package/dist/templates/_daemon/main_test.go +82 -9
  94. package/dist/templates/_daemon/testdata/child.go +3 -0
  95. package/dist/templates/_executor/README.md +130 -16
  96. package/dist/templates/_executor/anchor.go +156 -0
  97. package/dist/templates/_executor/anchor_test.go +161 -0
  98. package/dist/templates/_executor/apppriv_review_test.go +1 -1
  99. package/dist/templates/_executor/cancel_contract_test.go +236 -0
  100. package/dist/templates/_executor/copy.go +64 -0
  101. package/dist/templates/_executor/copy_test.go +88 -0
  102. package/dist/templates/_executor/digest_review_test.go +2 -2
  103. package/dist/templates/_executor/dsm.go +63 -13
  104. package/dist/templates/_executor/dsm_test.go +95 -1
  105. package/dist/templates/_executor/executor.go +260 -49
  106. package/dist/templates/_executor/executor_test.go +36 -6
  107. package/dist/templates/_executor/go.mod +2 -0
  108. package/dist/templates/_executor/identity.go +27 -1
  109. package/dist/templates/_executor/identity_kernel_linux_test.go +60 -0
  110. package/dist/templates/_executor/identity_linux.go +82 -0
  111. package/dist/templates/_executor/identity_security_test.go +43 -0
  112. package/dist/templates/_executor/internal/lifecycle/lifecycle.go +5 -0
  113. package/dist/templates/_executor/internal/lifecycle/lifecycle_test.go +61 -3
  114. package/dist/templates/_executor/internal/taskscript/boot.sh +9 -9
  115. package/dist/templates/_executor/internal/taskscript/cmd/main.go +2 -2
  116. package/dist/templates/_executor/internal/taskscript/control.sh +15 -10
  117. package/dist/templates/_executor/internal/taskscript/tasks.go +5 -3
  118. package/dist/templates/_executor/lifecycle_test.go +11 -0
  119. package/dist/templates/_executor/link_linux.go +28 -0
  120. package/dist/templates/_executor/long_running_test.go +530 -0
  121. package/dist/templates/_executor/main.go +83 -25
  122. package/dist/templates/_executor/managed.go +3 -3
  123. package/dist/templates/_executor/managed_test.go +3 -3
  124. package/dist/templates/_executor/move_linux.go +490 -0
  125. package/dist/templates/_executor/move_linux_test.go +460 -0
  126. package/dist/templates/_executor/move_validation.go +46 -0
  127. package/dist/templates/_executor/move_validation_test.go +187 -0
  128. package/dist/templates/_executor/operations.go +926 -0
  129. package/dist/templates/_executor/path_test.go +18 -0
  130. package/dist/templates/_executor/pid.go +37 -0
  131. package/dist/templates/_executor/pid_test.go +113 -0
  132. package/dist/templates/_executor/platform_linux.go +24 -173
  133. package/dist/templates/_executor/platform_linux_test.go +9 -65
  134. package/dist/templates/_executor/platform_other.go +38 -4
  135. package/dist/templates/_executor/process.go +3 -0
  136. package/dist/templates/_executor/purge_log.go +18 -0
  137. package/dist/templates/_executor/records.go +242 -0
  138. package/dist/templates/_executor/scope_cancel_contract_test.go +91 -0
  139. package/dist/templates/_executor/scope_client.go +37 -0
  140. package/dist/templates/_executor/scope_contract.go +12 -0
  141. package/dist/templates/_executor/selected_scope.go +146 -0
  142. package/dist/templates/_executor/selected_scope_test.go +186 -0
  143. package/dist/templates/_executor/status_disabled_test.go +33 -0
  144. package/dist/templates/_executor/store.go +4 -3
  145. package/dist/templates/_executor/supervise.go +109 -0
  146. package/dist/templates/_executor/supervise_test.go +130 -0
  147. package/dist/templates/_executor/task_race_review_test.go +1 -1
  148. package/dist/templates/_executor/tasks.go +52 -15
  149. package/dist/templates/_executor/tasks_dsm71_test.go +114 -0
  150. package/dist/templates/_executor/tasks_review_test.go +1 -1
  151. package/dist/templates/_executor/tasks_test.go +62 -5
  152. package/dist/templates/_executor/upgrade_watch_test.go +13 -5
  153. package/dist/templates/_executor/watch.go +8 -0
  154. package/dist/templates/_executor/watch_test.go +23 -2
  155. package/dist/templates/_executor/write_review_linux_test.go +4 -12
  156. package/dist/templates/_gateway/go.mod +2 -0
  157. package/dist/templates/_shared/AGENTS.md +129 -0
  158. package/dist/templates/binary/dsm-package.yaml +24 -0
  159. package/dist/templates/binary/i18n/messages/de.json +4 -0
  160. package/dist/templates/binary/i18n/messages/en.json +4 -0
  161. package/dist/templates/binary/i18n/messages/es.json +4 -0
  162. package/dist/templates/binary/i18n/messages/fr.json +4 -0
  163. package/dist/templates/binary/i18n/messages/it.json +4 -0
  164. package/dist/templates/binary/i18n/messages/ja.json +4 -0
  165. package/dist/templates/binary/i18n/messages/ko.json +4 -0
  166. package/dist/templates/binary/i18n/messages/zh-CN.json +4 -0
  167. package/dist/templates/binary/i18n/messages/zh-TW.json +4 -0
  168. package/dist/templates/binary/ui/app.js +19 -4
  169. package/dist/templates/native-authorization/AuthorizationGate.vue +5 -3
  170. package/dist/templates/native-authorization/i18n/de.json +1 -0
  171. package/dist/templates/native-authorization/i18n/en.json +1 -0
  172. package/dist/templates/native-authorization/i18n/es.json +2 -1
  173. package/dist/templates/native-authorization/i18n/fr.json +1 -0
  174. package/dist/templates/native-authorization/i18n/it.json +11 -10
  175. package/dist/templates/native-authorization/i18n/ja.json +1 -0
  176. package/dist/templates/native-authorization/i18n/ko.json +10 -9
  177. package/dist/templates/native-authorization/i18n/zh-CN.json +6 -5
  178. package/dist/templates/native-authorization/i18n/zh-TW.json +6 -5
  179. package/dist/templates/native-go/README.md +43 -10
  180. package/dist/templates/native-go/backend/cmd/app/main.go +27 -7
  181. package/dist/templates/native-go/backend/go.mod +1 -1
  182. package/dist/templates/native-go/backend/internal/api/entry_test.go +47 -0
  183. package/dist/templates/native-go/backend/internal/api/permissions_test.go +3 -3
  184. package/dist/templates/native-go/backend/internal/api/registry.go +11 -0
  185. package/dist/templates/native-go/backend/internal/api/sdk-permissions.json +14 -1
  186. package/dist/templates/native-go/backend/internal/api/server.go +18 -5
  187. package/dist/templates/native-go/backend/internal/app/delegate_config.go +57 -0
  188. package/dist/templates/native-go/backend/internal/app/delegate_config_test.go +28 -0
  189. package/dist/templates/native-go/backend/internal/app/portal.go +30 -0
  190. package/dist/templates/native-go/backend/internal/app/portal_test.go +55 -0
  191. package/dist/templates/native-go/backend/internal/app/routes.go +8 -2
  192. package/dist/templates/native-go/backend/internal/background/runner.go +1 -1
  193. package/dist/templates/native-go/backend/internal/background/store.go +16 -14
  194. package/dist/templates/native-go/backend/internal/dsm/admin.go +8 -2
  195. package/dist/templates/native-go/backend/internal/dsm/admin_linux.go +43 -13
  196. package/dist/templates/native-go/backend/internal/dsm/admin_linux_test.go +56 -0
  197. package/dist/templates/native-go/backend/internal/dsm/admin_other.go +4 -1
  198. package/dist/templates/native-go/backend/internal/dsm/apppriv.go +30 -0
  199. package/dist/templates/native-go/backend/internal/dsm/bridge_file.go +75 -0
  200. package/dist/templates/native-go/backend/internal/dsm/bridge_file_test.go +57 -0
  201. package/dist/templates/native-go/backend/internal/dsm/entry.go +177 -0
  202. package/dist/templates/native-go/backend/internal/dsm/entry_test.go +315 -0
  203. package/dist/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
  204. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
  205. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
  206. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
  207. package/dist/templates/native-go/backend/internal/dsm/native/apppriv_check.c +33 -0
  208. package/dist/templates/native-go/backend/internal/dsm/native/build.sh +13 -4
  209. package/dist/templates/native-go/backend/internal/dsm/native/provenance.json +9 -3
  210. package/dist/templates/native-go/backend/internal/filestation/check_permission.go +71 -0
  211. package/dist/templates/native-go/backend/internal/filestation/check_permission_test.go +77 -0
  212. package/dist/templates/native-go/backend/internal/filestation/client.go +39 -3
  213. package/dist/templates/native-go/backend/internal/filestation/download_dsm71_test.go +82 -0
  214. package/dist/templates/native-go/backend/internal/filestation/sdk_policy_test.go +39 -0
  215. package/dist/templates/native-go/backend/internal/filestation/service.go +1 -1
  216. package/dist/templates/native-go/backend/internal/identity/README.md +5 -1
  217. package/dist/templates/native-go/backend/internal/identity/dsm.go +24 -5
  218. package/dist/templates/native-go/backend/internal/identity/http.go +1 -1
  219. package/dist/templates/native-go/backend/internal/identity/identity_test.go +48 -1
  220. package/dist/templates/native-go/backend/internal/identity/service.go +1 -1
  221. package/dist/templates/native-go/backend/internal/portal/portal.go +138 -0
  222. package/dist/templates/native-go/backend/internal/portal/portal_test.go +89 -0
  223. package/dist/templates/native-go/dsm-package.yaml +20 -1
  224. package/dist/templates/native-go/i18n/glossary.json +2 -1
  225. package/dist/templates/native-go/i18n/messages/de.json +1 -0
  226. package/dist/templates/native-go/i18n/messages/en.json +1 -0
  227. package/dist/templates/native-go/i18n/messages/es.json +1 -0
  228. package/dist/templates/native-go/i18n/messages/fr.json +1 -0
  229. package/dist/templates/native-go/i18n/messages/it.json +1 -0
  230. package/dist/templates/native-go/i18n/messages/ja.json +1 -0
  231. package/dist/templates/native-go/i18n/messages/ko.json +1 -0
  232. package/dist/templates/native-go/i18n/messages/zh-CN.json +1 -0
  233. package/dist/templates/native-go/i18n/messages/zh-TW.json +1 -0
  234. package/dist/templates/native-go/ui/app.css +10 -0
  235. package/dist/templates/native-go/ui/app.js +11 -1
  236. package/dist/templates/native-go-delegate/DELEGATE.md +126 -5
  237. package/dist/templates/native-go-delegate/backend/cmd/background-worker/main.go +7 -0
  238. package/dist/templates/native-go-delegate/backend/internal/app/delegate.go +11 -1
  239. package/dist/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +14 -0
  240. package/dist/templates/native-go-delegate/backend/internal/background/delegated_moves.go +270 -0
  241. package/dist/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +410 -0
  242. package/dist/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +95 -0
  243. package/dist/templates/native-go-delegate/backend/internal/delegate/client.go +8 -0
  244. package/dist/templates/native-go-delegate/backend/internal/delegate/destination.go +110 -0
  245. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state.go +117 -0
  246. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +60 -0
  247. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_test.go +116 -0
  248. package/dist/templates/native-go-delegate/backend/internal/delegate/example.go +81 -0
  249. package/dist/templates/native-go-delegate/backend/internal/delegate/example_test.go +91 -0
  250. package/dist/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +511 -0
  251. package/dist/templates/native-go-delegate/backend/internal/delegate/files.go +1 -1
  252. package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +92 -0
  253. package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +99 -0
  254. package/dist/templates/native-go-delegate/backend/internal/delegate/move.go +348 -0
  255. package/dist/templates/native-go-delegate/backend/internal/delegate/move_test.go +351 -0
  256. package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list.go +65 -0
  257. package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +114 -0
  258. package/dist/templates/native-go-delegate/backend/internal/delegate/retry_test.go +1 -1
  259. package/dist/templates/native-go-delegate/backend/internal/delegate/service.go +58 -17
  260. package/dist/templates/native-go-delegate/backend/internal/delegate/staging.go +121 -0
  261. package/dist/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +51 -0
  262. package/dist/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +112 -0
  263. package/dist/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +137 -0
  264. package/dist/templates/native-go-delegate/backend/internal/filestation/files.go +1 -31
  265. package/dist/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +30 -3
  266. package/dist/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +113 -0
  267. package/dist/templates/native-go-delegate/frontend/src/delegate/copy.ts +5 -6
  268. package/dist/templates/native-go-delegate/frontend/test/background-save.test.ts +121 -0
  269. package/dist/templates/native-go-delegate/frontend/test/delegate.test.ts +15 -0
  270. package/dist/templates/native-go-delegate/frontend/test/scope-settings.test.ts +49 -0
  271. package/dist/templates/native-go-delegate/test.sh +1 -0
  272. package/dist/templates/native-go-jobs/frontend/src/background/i18n/de.json +2 -2
  273. package/dist/templates/native-go-jobs/frontend/src/background/i18n/en.json +2 -2
  274. package/dist/templates/native-go-jobs/frontend/src/background/i18n/es.json +12 -12
  275. package/dist/templates/native-go-jobs/frontend/src/background/i18n/fr.json +4 -4
  276. package/dist/templates/native-go-jobs/frontend/src/background/i18n/it.json +17 -17
  277. package/dist/templates/native-go-jobs/frontend/src/background/i18n/ja.json +7 -7
  278. package/dist/templates/native-go-jobs/frontend/src/background/i18n/ko.json +15 -15
  279. package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +3 -3
  280. package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +2 -2
  281. package/dist/templates/native-go-jobs/frontend/test/background.test.ts +25 -28
  282. package/dist/templates/native-go-root-ops/backend/internal/app/executor.go +30 -2
  283. package/dist/templates/native-go-root-ops/backend/internal/app/executor_test.go +64 -0
  284. package/dist/templates/native-go-vue/README.md +4 -0
  285. package/dist/templates/native-go-vue/frontend/package-lock.json +4 -4
  286. package/dist/templates/native-go-vue/frontend/package.json +1 -1
  287. package/dist/templates/native-go-vue/frontend/src/App.vue +18 -13
  288. package/dist/templates/native-go-vue/frontend/src/context.ts +31 -0
  289. package/dist/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +54 -9
  290. package/dist/templates/native-go-vue/frontend/src/delegate/catalogs.ts +11 -0
  291. package/dist/templates/native-go-vue/frontend/src/delegate/copy.test.ts +12 -0
  292. package/dist/templates/native-go-vue/frontend/src/delegate/copy.ts +4 -4
  293. package/dist/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +23 -0
  294. package/dist/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +8 -2
  295. package/dist/templates/native-go-vue/frontend/src/delegate/facade.test.ts +100 -0
  296. package/dist/templates/native-go-vue/frontend/src/delegate/facade.ts +85 -0
  297. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/de.json +47 -0
  298. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/en.json +13 -2
  299. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/es.json +47 -0
  300. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +47 -0
  301. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/it.json +47 -0
  302. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +47 -0
  303. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +47 -0
  304. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +42 -0
  305. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +42 -0
  306. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +42 -0
  307. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +42 -0
  308. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +42 -0
  309. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +42 -0
  310. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +42 -0
  311. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +42 -0
  312. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +42 -0
  313. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +47 -0
  314. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +16 -5
  315. package/dist/templates/native-go-vue/frontend/src/delegate/long-running.ts +57 -0
  316. package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +12 -0
  317. package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.ts +24 -0
  318. package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +12 -0
  319. package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +21 -0
  320. package/dist/templates/native-go-vue/frontend/src/files/files.test.ts +7 -0
  321. package/dist/templates/native-go-vue/frontend/src/i18n/de.json +20 -0
  322. package/dist/templates/native-go-vue/frontend/src/i18n/en.json +20 -0
  323. package/dist/templates/native-go-vue/frontend/src/i18n/es.json +20 -0
  324. package/dist/templates/native-go-vue/frontend/src/i18n/fr.json +20 -0
  325. package/dist/templates/native-go-vue/frontend/src/i18n/it.json +20 -0
  326. package/dist/templates/native-go-vue/frontend/src/i18n/ja.json +20 -0
  327. package/dist/templates/native-go-vue/frontend/src/i18n/ko.json +20 -0
  328. package/dist/templates/native-go-vue/frontend/src/i18n/zh-CN.json +20 -0
  329. package/dist/templates/native-go-vue/frontend/src/i18n/zh-TW.json +20 -0
  330. package/dist/templates/native-go-vue/frontend/src/i18n.ts +13 -0
  331. package/dist/templates/native-go-vue/frontend/src/identity/LoginPage.vue +16 -14
  332. package/dist/templates/native-go-vue/frontend/src/identity/i18n/de.json +27 -0
  333. package/dist/templates/native-go-vue/frontend/src/identity/i18n/en.json +27 -0
  334. package/dist/templates/native-go-vue/frontend/src/identity/i18n/es.json +27 -0
  335. package/dist/templates/native-go-vue/frontend/src/identity/i18n/fr.json +27 -0
  336. package/dist/templates/native-go-vue/frontend/src/identity/i18n/it.json +27 -0
  337. package/dist/templates/native-go-vue/frontend/src/identity/i18n/ja.json +27 -0
  338. package/dist/templates/native-go-vue/frontend/src/identity/i18n/ko.json +27 -0
  339. package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +27 -0
  340. package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +27 -0
  341. package/dist/templates/native-go-vue/frontend/src/identity/i18n.ts +14 -0
  342. package/dist/templates/native-go-vue/frontend/src/identity/session.test.ts +4 -0
  343. package/dist/templates/native-go-vue/frontend/src/identity/session.ts +9 -8
  344. package/dist/templates/native-go-vue/frontend/src/nas/NasPicker.vue +31 -12
  345. package/dist/templates/native-go-vue/frontend/src/nas/destination.test.ts +48 -0
  346. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +1 -1
  347. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +1 -1
  348. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +10 -10
  349. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +1 -1
  350. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +12 -12
  351. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +15 -15
  352. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +12 -12
  353. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +1 -1
  354. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +1 -1
  355. package/dist/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +39 -0
  356. package/dist/templates/native-go-vue/frontend/src/shell/i18n/fr.json +1 -1
  357. package/dist/templates/native-go-vue/frontend/src/shell/i18n/ja.json +1 -1
  358. package/dist/templates/native-go-vue/frontend/test/apps.test.ts +14 -0
  359. package/dist/templates/native-go-vue/frontend/test/portal-settings.test.ts +71 -0
  360. package/dist/templates/native-go-vue/frontend/test/shell-i18n.test.ts +50 -0
  361. package/package.json +5 -1
  362. package/schema/package-metadata.schema.json +101 -0
  363. package/schema/synology-app.schema.json +112 -0
  364. package/skills/SKILL.md +106 -4
  365. package/skills/reference/create.md +101 -2
  366. package/skills/reference/deploy.md +2 -2
  367. package/skills/reference/files.md +113 -2
  368. package/skills/reference/identity.md +70 -1
  369. package/skills/reference/portal.md +17 -0
  370. package/skills/reference/ui-vue.md +12 -0
  371. package/templates/_daemon/go.mod +1 -1
  372. package/templates/_daemon/main.go +6 -3
  373. package/templates/_daemon/main_test.go +82 -9
  374. package/templates/_daemon/testdata/child.go +3 -0
  375. package/templates/_executor/README.md +130 -16
  376. package/templates/_executor/anchor.go +156 -0
  377. package/templates/_executor/anchor_test.go +161 -0
  378. package/templates/_executor/apppriv_review_test.go +1 -1
  379. package/templates/_executor/cancel_contract_test.go +236 -0
  380. package/templates/_executor/copy.go +64 -0
  381. package/templates/_executor/copy_test.go +88 -0
  382. package/templates/_executor/digest_review_test.go +2 -2
  383. package/templates/_executor/dsm.go +63 -13
  384. package/templates/_executor/dsm_test.go +95 -1
  385. package/templates/_executor/executor.go +260 -49
  386. package/templates/_executor/executor_test.go +36 -6
  387. package/templates/_executor/go.mod +2 -0
  388. package/templates/_executor/identity.go +27 -1
  389. package/templates/_executor/identity_kernel_linux_test.go +60 -0
  390. package/templates/_executor/identity_linux.go +82 -0
  391. package/templates/_executor/identity_security_test.go +43 -0
  392. package/templates/_executor/internal/lifecycle/lifecycle.go +5 -0
  393. package/templates/_executor/internal/lifecycle/lifecycle_test.go +61 -3
  394. package/templates/_executor/internal/taskscript/boot.sh +9 -9
  395. package/templates/_executor/internal/taskscript/cmd/main.go +2 -2
  396. package/templates/_executor/internal/taskscript/control.sh +15 -10
  397. package/templates/_executor/internal/taskscript/tasks.go +5 -3
  398. package/templates/_executor/lifecycle_test.go +11 -0
  399. package/templates/_executor/link_linux.go +28 -0
  400. package/templates/_executor/long_running_test.go +530 -0
  401. package/templates/_executor/main.go +83 -25
  402. package/templates/_executor/managed.go +3 -3
  403. package/templates/_executor/managed_test.go +3 -3
  404. package/templates/_executor/move_linux.go +490 -0
  405. package/templates/_executor/move_linux_test.go +460 -0
  406. package/templates/_executor/move_validation.go +46 -0
  407. package/templates/_executor/move_validation_test.go +187 -0
  408. package/templates/_executor/operations.go +926 -0
  409. package/templates/_executor/path_test.go +18 -0
  410. package/templates/_executor/pid.go +37 -0
  411. package/templates/_executor/pid_test.go +113 -0
  412. package/templates/_executor/platform_linux.go +24 -173
  413. package/templates/_executor/platform_linux_test.go +9 -65
  414. package/templates/_executor/platform_other.go +38 -4
  415. package/templates/_executor/process.go +3 -0
  416. package/templates/_executor/purge_log.go +18 -0
  417. package/templates/_executor/records.go +242 -0
  418. package/templates/_executor/scope_cancel_contract_test.go +91 -0
  419. package/templates/_executor/scope_client.go +37 -0
  420. package/templates/_executor/scope_contract.go +12 -0
  421. package/templates/_executor/selected_scope.go +146 -0
  422. package/templates/_executor/selected_scope_test.go +186 -0
  423. package/templates/_executor/status_disabled_test.go +33 -0
  424. package/templates/_executor/store.go +4 -3
  425. package/templates/_executor/supervise.go +109 -0
  426. package/templates/_executor/supervise_test.go +130 -0
  427. package/templates/_executor/task_race_review_test.go +1 -1
  428. package/templates/_executor/tasks.go +52 -15
  429. package/templates/_executor/tasks_dsm71_test.go +114 -0
  430. package/templates/_executor/tasks_review_test.go +1 -1
  431. package/templates/_executor/tasks_test.go +62 -5
  432. package/templates/_executor/upgrade_watch_test.go +13 -5
  433. package/templates/_executor/watch.go +8 -0
  434. package/templates/_executor/watch_test.go +23 -2
  435. package/templates/_executor/write_review_linux_test.go +4 -12
  436. package/templates/_gateway/go.mod +2 -0
  437. package/templates/_shared/AGENTS.md +129 -0
  438. package/templates/binary/dsm-package.yaml +24 -0
  439. package/templates/binary/i18n/messages/de.json +4 -0
  440. package/templates/binary/i18n/messages/en.json +4 -0
  441. package/templates/binary/i18n/messages/es.json +4 -0
  442. package/templates/binary/i18n/messages/fr.json +4 -0
  443. package/templates/binary/i18n/messages/it.json +4 -0
  444. package/templates/binary/i18n/messages/ja.json +4 -0
  445. package/templates/binary/i18n/messages/ko.json +4 -0
  446. package/templates/binary/i18n/messages/zh-CN.json +4 -0
  447. package/templates/binary/i18n/messages/zh-TW.json +4 -0
  448. package/templates/binary/ui/app.js +19 -4
  449. package/templates/native-authorization/AuthorizationGate.vue +5 -3
  450. package/templates/native-authorization/i18n/de.json +1 -0
  451. package/templates/native-authorization/i18n/en.json +1 -0
  452. package/templates/native-authorization/i18n/es.json +2 -1
  453. package/templates/native-authorization/i18n/fr.json +1 -0
  454. package/templates/native-authorization/i18n/it.json +11 -10
  455. package/templates/native-authorization/i18n/ja.json +1 -0
  456. package/templates/native-authorization/i18n/ko.json +10 -9
  457. package/templates/native-authorization/i18n/zh-CN.json +6 -5
  458. package/templates/native-authorization/i18n/zh-TW.json +6 -5
  459. package/templates/native-go/README.md +43 -10
  460. package/templates/native-go/backend/cmd/app/main.go +27 -7
  461. package/templates/native-go/backend/go.mod +1 -1
  462. package/templates/native-go/backend/internal/api/entry_test.go +47 -0
  463. package/templates/native-go/backend/internal/api/permissions_test.go +3 -3
  464. package/templates/native-go/backend/internal/api/registry.go +11 -0
  465. package/templates/native-go/backend/internal/api/sdk-permissions.json +14 -1
  466. package/templates/native-go/backend/internal/api/server.go +18 -5
  467. package/templates/native-go/backend/internal/app/delegate_config.go +57 -0
  468. package/templates/native-go/backend/internal/app/delegate_config_test.go +28 -0
  469. package/templates/native-go/backend/internal/app/portal.go +30 -0
  470. package/templates/native-go/backend/internal/app/portal_test.go +55 -0
  471. package/templates/native-go/backend/internal/app/routes.go +8 -2
  472. package/templates/native-go/backend/internal/background/runner.go +1 -1
  473. package/templates/native-go/backend/internal/background/store.go +16 -14
  474. package/templates/native-go/backend/internal/dsm/admin.go +8 -2
  475. package/templates/native-go/backend/internal/dsm/admin_linux.go +43 -13
  476. package/templates/native-go/backend/internal/dsm/admin_linux_test.go +56 -0
  477. package/templates/native-go/backend/internal/dsm/admin_other.go +4 -1
  478. package/templates/native-go/backend/internal/dsm/apppriv.go +30 -0
  479. package/templates/native-go/backend/internal/dsm/bridge_file.go +75 -0
  480. package/templates/native-go/backend/internal/dsm/bridge_file_test.go +57 -0
  481. package/templates/native-go/backend/internal/dsm/entry.go +177 -0
  482. package/templates/native-go/backend/internal/dsm/entry_test.go +315 -0
  483. package/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
  484. package/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
  485. package/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
  486. package/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
  487. package/templates/native-go/backend/internal/dsm/native/apppriv_check.c +33 -0
  488. package/templates/native-go/backend/internal/dsm/native/build.sh +13 -4
  489. package/templates/native-go/backend/internal/dsm/native/provenance.json +9 -3
  490. package/templates/native-go/backend/internal/filestation/check_permission.go +71 -0
  491. package/templates/native-go/backend/internal/filestation/check_permission_test.go +77 -0
  492. package/templates/native-go/backend/internal/filestation/client.go +39 -3
  493. package/templates/native-go/backend/internal/filestation/download_dsm71_test.go +82 -0
  494. package/templates/native-go/backend/internal/filestation/sdk_policy_test.go +39 -0
  495. package/templates/native-go/backend/internal/filestation/service.go +1 -1
  496. package/templates/native-go/backend/internal/identity/README.md +5 -1
  497. package/templates/native-go/backend/internal/identity/dsm.go +24 -5
  498. package/templates/native-go/backend/internal/identity/http.go +1 -1
  499. package/templates/native-go/backend/internal/identity/identity_test.go +48 -1
  500. package/templates/native-go/backend/internal/identity/service.go +1 -1
  501. package/templates/native-go/backend/internal/portal/portal.go +138 -0
  502. package/templates/native-go/backend/internal/portal/portal_test.go +89 -0
  503. package/templates/native-go/dsm-package.yaml +20 -1
  504. package/templates/native-go/i18n/glossary.json +2 -1
  505. package/templates/native-go/i18n/messages/de.json +1 -0
  506. package/templates/native-go/i18n/messages/en.json +1 -0
  507. package/templates/native-go/i18n/messages/es.json +1 -0
  508. package/templates/native-go/i18n/messages/fr.json +1 -0
  509. package/templates/native-go/i18n/messages/it.json +1 -0
  510. package/templates/native-go/i18n/messages/ja.json +1 -0
  511. package/templates/native-go/i18n/messages/ko.json +1 -0
  512. package/templates/native-go/i18n/messages/zh-CN.json +1 -0
  513. package/templates/native-go/i18n/messages/zh-TW.json +1 -0
  514. package/templates/native-go/ui/app.css +10 -0
  515. package/templates/native-go/ui/app.js +11 -1
  516. package/templates/native-go-delegate/DELEGATE.md +126 -5
  517. package/templates/native-go-delegate/backend/cmd/background-worker/main.go +7 -0
  518. package/templates/native-go-delegate/backend/internal/app/delegate.go +11 -1
  519. package/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +14 -0
  520. package/templates/native-go-delegate/backend/internal/background/delegated_moves.go +270 -0
  521. package/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +410 -0
  522. package/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +95 -0
  523. package/templates/native-go-delegate/backend/internal/delegate/client.go +8 -0
  524. package/templates/native-go-delegate/backend/internal/delegate/destination.go +110 -0
  525. package/templates/native-go-delegate/backend/internal/delegate/destination_state.go +117 -0
  526. package/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +60 -0
  527. package/templates/native-go-delegate/backend/internal/delegate/destination_test.go +116 -0
  528. package/templates/native-go-delegate/backend/internal/delegate/example.go +81 -0
  529. package/templates/native-go-delegate/backend/internal/delegate/example_test.go +91 -0
  530. package/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +511 -0
  531. package/templates/native-go-delegate/backend/internal/delegate/files.go +1 -1
  532. package/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +92 -0
  533. package/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +99 -0
  534. package/templates/native-go-delegate/backend/internal/delegate/move.go +348 -0
  535. package/templates/native-go-delegate/backend/internal/delegate/move_test.go +351 -0
  536. package/templates/native-go-delegate/backend/internal/delegate/operations_list.go +65 -0
  537. package/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +114 -0
  538. package/templates/native-go-delegate/backend/internal/delegate/retry_test.go +1 -1
  539. package/templates/native-go-delegate/backend/internal/delegate/service.go +58 -17
  540. package/templates/native-go-delegate/backend/internal/delegate/staging.go +121 -0
  541. package/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +51 -0
  542. package/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +112 -0
  543. package/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +137 -0
  544. package/templates/native-go-delegate/backend/internal/filestation/files.go +1 -31
  545. package/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +30 -3
  546. package/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +113 -0
  547. package/templates/native-go-delegate/frontend/src/delegate/copy.ts +5 -6
  548. package/templates/native-go-delegate/frontend/test/background-save.test.ts +121 -0
  549. package/templates/native-go-delegate/frontend/test/delegate.test.ts +15 -0
  550. package/templates/native-go-delegate/frontend/test/scope-settings.test.ts +49 -0
  551. package/templates/native-go-delegate/test.sh +1 -0
  552. package/templates/native-go-jobs/frontend/src/background/i18n/de.json +2 -2
  553. package/templates/native-go-jobs/frontend/src/background/i18n/en.json +2 -2
  554. package/templates/native-go-jobs/frontend/src/background/i18n/es.json +12 -12
  555. package/templates/native-go-jobs/frontend/src/background/i18n/fr.json +4 -4
  556. package/templates/native-go-jobs/frontend/src/background/i18n/it.json +17 -17
  557. package/templates/native-go-jobs/frontend/src/background/i18n/ja.json +7 -7
  558. package/templates/native-go-jobs/frontend/src/background/i18n/ko.json +15 -15
  559. package/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +3 -3
  560. package/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +2 -2
  561. package/templates/native-go-jobs/frontend/test/background.test.ts +25 -28
  562. package/templates/native-go-root-ops/backend/internal/app/executor.go +30 -2
  563. package/templates/native-go-root-ops/backend/internal/app/executor_test.go +64 -0
  564. package/templates/native-go-vue/README.md +4 -0
  565. package/templates/native-go-vue/frontend/package-lock.json +4 -4
  566. package/templates/native-go-vue/frontend/package.json +1 -1
  567. package/templates/native-go-vue/frontend/src/App.vue +18 -13
  568. package/templates/native-go-vue/frontend/src/context.ts +31 -0
  569. package/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +54 -9
  570. package/templates/native-go-vue/frontend/src/delegate/catalogs.ts +11 -0
  571. package/templates/native-go-vue/frontend/src/delegate/copy.test.ts +12 -0
  572. package/templates/native-go-vue/frontend/src/delegate/copy.ts +4 -4
  573. package/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +23 -0
  574. package/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +8 -2
  575. package/templates/native-go-vue/frontend/src/delegate/facade.test.ts +100 -0
  576. package/templates/native-go-vue/frontend/src/delegate/facade.ts +85 -0
  577. package/templates/native-go-vue/frontend/src/delegate/i18n/de.json +47 -0
  578. package/templates/native-go-vue/frontend/src/delegate/i18n/en.json +13 -2
  579. package/templates/native-go-vue/frontend/src/delegate/i18n/es.json +47 -0
  580. package/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +47 -0
  581. package/templates/native-go-vue/frontend/src/delegate/i18n/it.json +47 -0
  582. package/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +47 -0
  583. package/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +47 -0
  584. package/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +42 -0
  585. package/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +42 -0
  586. package/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +42 -0
  587. package/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +42 -0
  588. package/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +42 -0
  589. package/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +42 -0
  590. package/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +42 -0
  591. package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +42 -0
  592. package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +42 -0
  593. package/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +47 -0
  594. package/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +16 -5
  595. package/templates/native-go-vue/frontend/src/delegate/long-running.ts +57 -0
  596. package/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +12 -0
  597. package/templates/native-go-vue/frontend/src/delegate/save-copy.ts +24 -0
  598. package/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +12 -0
  599. package/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +21 -0
  600. package/templates/native-go-vue/frontend/src/files/files.test.ts +7 -0
  601. package/templates/native-go-vue/frontend/src/i18n/de.json +20 -0
  602. package/templates/native-go-vue/frontend/src/i18n/en.json +20 -0
  603. package/templates/native-go-vue/frontend/src/i18n/es.json +20 -0
  604. package/templates/native-go-vue/frontend/src/i18n/fr.json +20 -0
  605. package/templates/native-go-vue/frontend/src/i18n/it.json +20 -0
  606. package/templates/native-go-vue/frontend/src/i18n/ja.json +20 -0
  607. package/templates/native-go-vue/frontend/src/i18n/ko.json +20 -0
  608. package/templates/native-go-vue/frontend/src/i18n/zh-CN.json +20 -0
  609. package/templates/native-go-vue/frontend/src/i18n/zh-TW.json +20 -0
  610. package/templates/native-go-vue/frontend/src/i18n.ts +13 -0
  611. package/templates/native-go-vue/frontend/src/identity/LoginPage.vue +16 -14
  612. package/templates/native-go-vue/frontend/src/identity/i18n/de.json +27 -0
  613. package/templates/native-go-vue/frontend/src/identity/i18n/en.json +27 -0
  614. package/templates/native-go-vue/frontend/src/identity/i18n/es.json +27 -0
  615. package/templates/native-go-vue/frontend/src/identity/i18n/fr.json +27 -0
  616. package/templates/native-go-vue/frontend/src/identity/i18n/it.json +27 -0
  617. package/templates/native-go-vue/frontend/src/identity/i18n/ja.json +27 -0
  618. package/templates/native-go-vue/frontend/src/identity/i18n/ko.json +27 -0
  619. package/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +27 -0
  620. package/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +27 -0
  621. package/templates/native-go-vue/frontend/src/identity/i18n.ts +14 -0
  622. package/templates/native-go-vue/frontend/src/identity/session.test.ts +4 -0
  623. package/templates/native-go-vue/frontend/src/identity/session.ts +9 -8
  624. package/templates/native-go-vue/frontend/src/nas/NasPicker.vue +31 -12
  625. package/templates/native-go-vue/frontend/src/nas/destination.test.ts +48 -0
  626. package/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +1 -1
  627. package/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +1 -1
  628. package/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +10 -10
  629. package/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +1 -1
  630. package/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +12 -12
  631. package/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +15 -15
  632. package/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +12 -12
  633. package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +1 -1
  634. package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +1 -1
  635. package/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +39 -0
  636. package/templates/native-go-vue/frontend/src/shell/i18n/fr.json +1 -1
  637. package/templates/native-go-vue/frontend/src/shell/i18n/ja.json +1 -1
  638. package/templates/native-go-vue/frontend/test/apps.test.ts +14 -0
  639. package/templates/native-go-vue/frontend/test/portal-settings.test.ts +71 -0
  640. package/templates/native-go-vue/frontend/test/shell-i18n.test.ts +50 -0
@@ -0,0 +1,85 @@
1
+ import type {Context} from '../context'
2
+ import type {BackgroundSaveFacade,DestinationGrant,DestinationState,ScopeSelection,OperationRef,OperationResult,SaveOperation} from './long-running'
3
+ // Supply an owner-bound App backend view, not browser storage or an executor list.
4
+ // Producers persist these references alongside their own business job metadata.
5
+ export interface AppSaveJob extends OperationRef {name:string;refusal?:string}
6
+ const token=/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/
7
+ const id=(value:unknown):value is string=>typeof value==='string'&&token.test(value)
8
+ const validRef=(ref:OperationRef)=>ref&&id(ref.delegation_id)&&id(ref.job_id)
9
+ const path=(value:unknown):value is string=>typeof value==='string'&&value.startsWith('/')&&value!=='/'&&!value.includes('\0')&&!value.slice(1).split('/').some(part=>!part||part==='.'||part==='..')
10
+ function protocol():never{throw {code:'EXECUTOR_PROTOCOL'}}
11
+ function validSelection(value:ScopeSelection){return value&&Number.isSafeInteger(value.generation)&&value.generation>=0&&path(value.root)&&(value.scope==='home'?value.root==='/home':value.scope.startsWith('shared:')&&value.root==='/'+value.scope.slice(7))}
12
+ function result(value:OperationResult,ref:OperationRef):OperationResult{
13
+ if(!value||value.job_id!==ref.job_id||!['queued','copying','committed','canceled','interrupted','uncertain'].includes(value.state))protocol()
14
+ if(value.state==='committed'){
15
+ if(!value.receipt||!path(value.receipt.path)||!Number.isSafeInteger(value.receipt.size)||value.receipt.size<0||value.receipt.size>16*1024**3)protocol()
16
+ }else if(value.receipt!==undefined)protocol()
17
+ if(value.reason!==undefined&&(typeof value.reason!=='string'||!/^[A-Za-z][A-Za-z0-9_-]{0,127}$/.test(value.reason)))protocol()
18
+ return {job_id:value.job_id,state:value.state,...(value.receipt?{receipt:{...value.receipt}}:{}),...(value.code?{code:value.code}:{}),...(value.reason?{reason:value.reason}:{})}
19
+ }
20
+ /** Bind the portable UI facade to W2's existing authenticated routes. */
21
+ export function createBackgroundSaveFacade(ctx:Pick<Context,'call'>,jobs:()=>Promise<readonly AppSaveJob[]>=async()=>{
22
+ const out=await ctx.call<{operations:AppSaveJob[]}>('delegate.operations.list')
23
+ if(!Array.isArray(out?.operations))protocol()
24
+ return out.operations
25
+ }):BackgroundSaveFacade{
26
+ const operation=async(method:string,ref:OperationRef)=>{
27
+ if(!validRef(ref))protocol()
28
+ return result(await ctx.call<OperationResult>(method,{delegation_id:ref.delegation_id,job_id:ref.job_id}),ref)
29
+ }
30
+ return {
31
+ async destination(key){
32
+ if(!id(key))protocol()
33
+ const out=await ctx.call<DestinationState>('delegate.destination',{key})
34
+ if(!out||out.key!==key||!['active','missing','reselection-required','needs-scope-confirmation','disabled'].includes(out.status)||out.selection!==null&&!validSelection(out.selection))protocol()
35
+ if(out.status==='active'){
36
+ const g=out.destination,s=out.selection
37
+ if(!g||!s||!id(g.id)||g.key!==key||g.lifetime!=='until-revoked'||!g.username||!path(g.path)||!(g.path===s.root||g.path.startsWith(s.root+'/')))protocol()
38
+ }else if(out.destination!==null)protocol()
39
+ return out
40
+ },
41
+ async exportExample(input){
42
+ if(!id(input.key)||!id(input.job_id))protocol()
43
+ const out=await ctx.call<OperationRef>('delegate.example.export',{key:input.key,job_id:input.job_id})
44
+ if(!validRef(out)||out.job_id!==input.job_id)protocol()
45
+ return out
46
+ },
47
+ selectDestination:input=>ctx.call<DestinationGrant>('delegate.select_destination',{key:input.key,path:input.path}),
48
+ async status(){
49
+ const value=await ctx.call<{state:string;disabled?:boolean;scope_mode?:string;preselection?:string;selection?:ScopeSelection|null;mismatch?:boolean}>('delegate.status')
50
+ // Capability readiness and the protected admission switch are independent.
51
+ if(!['ready','disabled','needs-scope-confirmation'].includes(value?.state))throw {code:'EXECUTOR_UNAVAILABLE'}
52
+ if(typeof value?.disabled!=='boolean')protocol()
53
+ if(value.selection&&!validSelection(value.selection))protocol()
54
+ return {disabled:value.disabled,...(value.scope_mode?{scopeMode:value.scope_mode,selection:value.selection??null,preselection:value.preselection,mismatch:value.mismatch}:{} )}
55
+ },
56
+ async list(){
57
+ const value=await ctx.call<{delegations:Array<{delegation_id:string;destination:string;path:string;subject:{username:string};lifetime:string;revoked:boolean}>}>('delegate.list')
58
+ if(!Array.isArray(value?.delegations))protocol()
59
+ return value.delegations.filter(g=>g.lifetime==='until-revoked'&&!g.revoked).map(g=>{
60
+ if(!id(g.delegation_id)||typeof g.destination!=='string'||!g.destination||!path(g.path)||typeof g.subject?.username!=='string'||!g.subject.username)protocol()
61
+ return {id:g.delegation_id,key:g.destination,path:g.path,username:g.subject.username,lifetime:'until-revoked' as const}
62
+ })
63
+ },
64
+ async operations(){
65
+ const metadata=await jobs()
66
+ return Promise.all(metadata.map(async job=>{
67
+ if(typeof job?.name!=='string'||!job.name||!validRef(job))protocol()
68
+ const ref={delegation_id:job.delegation_id,job_id:job.job_id}
69
+ try{return {...ref,name:job.name,...await operation('delegate.operations.get',ref)} satisfies SaveOperation}
70
+ catch(e){
71
+ if(job.refusal&&(e as {code?:string})?.code==='operation-not-found')return {...ref,name:job.name,state:'interrupted',code:job.refusal} satisfies SaveOperation
72
+ throw e
73
+ }
74
+ }))
75
+ },
76
+ async revoke(input){
77
+ const out=await ctx.call<{revoked:boolean}>('delegate.revoke',{delegation_id:input.delegation_id})
78
+ if(out?.revoked!==true)protocol()
79
+ return {revoked:true}
80
+ },
81
+ cancel:ref=>operation('delegate.operations.cancel',ref),
82
+ async disable(){const out=await ctx.call<{disabled:boolean}>('delegate.disable');if(out?.disabled!==true)protocol();return {disabled:true}},
83
+ async enable(){const out=await ctx.call<{disabled:boolean}>('delegate.enable');if(out?.disabled!==false)protocol();return {disabled:false}},
84
+ }
85
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "title": "Dateizugriff im Hintergrund",
3
+ "help": "Downloads laufen weiter, nachdem Sie diese App schließen. Jeder Auftrag darf bis zu einer Stunde lang nur in den ausgewählten Ordner schreiben. Vorhandene Dateien werden nie ersetzt.",
4
+ "setupTitle": "Administratoreinrichtung",
5
+ "setupHelp": "Genehmigen Sie diese App einmal, damit sie Dateiaufträge abschließen kann, während Benutzer offline sind.",
6
+ "password": "DSM-Passwort",
7
+ "authorize": "Dateizugriff im Hintergrund genehmigen",
8
+ "confirmShare": "Freigegebenen Ordner bestätigen",
9
+ "scopeNeeds": "Der freigegebene Ordner muss bestätigt werden. Wählen Sie unten einen freigegebenen Ordner und bestätigen Sie ihn mit Ihrem DSM-Passwort.",
10
+ "ready": "Der Dateizugriff im Hintergrund ist bereit.",
11
+ "needs": "Ein Administrator muss den Dateizugriff im Hintergrund genehmigen.",
12
+ "blocked": "Der Dateizugriff im Hintergrund ist nicht verfügbar. Bitten Sie einen Administrator, die App-Einrichtung zu prüfen.",
13
+ "details": "Details",
14
+ "refresh": "Aktualisieren",
15
+ "revoke": "Widerrufen",
16
+ "cancel": "Auftrag abbrechen",
17
+ "noDelegations": "Sie haben keine aktiven Delegierungen.",
18
+ "delegations": "Meine Delegierungen",
19
+ "expires": "Ablauf",
20
+ "downloads": "Meine Downloads",
21
+ "noJobs": "Sie haben keine Download-Aufträge.",
22
+ "url": "Download-URL",
23
+ "name": "Dateiname",
24
+ "choose": "Ordner auswählen",
25
+ "submit": "In meinen Ordner herunterladen",
26
+ "destination": "Ziel",
27
+ "pending": "Auftrag abgebrochen. Der Widerruf steht noch aus; die App versucht es erneut.",
28
+ "error": "Die Aktion konnte nicht abgeschlossen werden. Aktualisieren Sie die Ansicht und versuchen Sie es erneut. Wenn der Fehler bestehen bleibt, wenden Sie sich an Ihren Administrator.",
29
+ "setupError": "Die Genehmigung konnte nicht abgeschlossen werden. Geben Sie Ihr DSM-Passwort erneut ein und versuchen Sie es noch einmal, oder prüfen Sie die App-Einrichtung.",
30
+ "denied": "Der Zugriff wurde verweigert. Prüfen Sie Ihre Ordnerberechtigungen und versuchen Sie es erneut.",
31
+ "session": "Melden Sie sich erneut bei DSM an und aktualisieren Sie dann die Ansicht.",
32
+ "size": "Downloads sind auf 64 MB und 60 Sekunden begrenzt.",
33
+ "queued": "In Warteschlange",
34
+ "running": "Wird heruntergeladen",
35
+ "succeeded": "Gespeichert",
36
+ "failed": "Fehlgeschlagen",
37
+ "canceled": "Abgebrochen",
38
+ "interrupted": "Unterbrochen",
39
+ "homeScope": "Home-Ordner jedes Benutzers",
40
+ "scopeLabel": "Bereich für Speichern im Hintergrund",
41
+ "protectedScope": "Bestätigter Bereich",
42
+ "preselection": "Vorauswahl bei der Installation",
43
+ "preselectionHelp": "Die Vorauswahl bei der Installation ist nur ein Vorschlag. Bestätigen Sie diesen Bereich mit Ihrem DSM-Passwort, wenn Sie den Hintergrundzugriff aktivieren.",
44
+ "scopeMismatch": "Die Vorauswahl bei der Installation weicht vom bestätigten Bereich ab. Speichervorgänge im Hintergrund folgen dem bestätigten Bereich.",
45
+ "scopeChangeHelp": "Eine Änderung des Bereichs widerruft vorhandene Ziele und bricht ausstehende Speichervorgänge ab. Benutzer müssen ihre Ziele neu auswählen. Bereits gespeicherte Dateien bleiben erhalten.",
46
+ "confirmScope": "Bereichsänderung bestätigen"
47
+ }
@@ -5,9 +5,12 @@
5
5
  "setupHelp": "Approve this app once to let it complete file jobs while users are offline.",
6
6
  "password": "DSM password",
7
7
  "authorize": "Approve background file access",
8
+ "confirmShare": "Confirm share",
9
+ "scopeNeeds": "Share needs confirmation. Choose a share below and confirm it with your DSM password.",
8
10
  "ready": "Background file access is ready.",
9
11
  "needs": "An administrator must approve background file access.",
10
12
  "blocked": "Background file access is unavailable. Ask an administrator to check the app setup.",
13
+ "details": "Details",
11
14
  "refresh": "Refresh",
12
15
  "revoke": "Revoke",
13
16
  "cancel": "Cancel job",
@@ -26,11 +29,19 @@
26
29
  "setupError": "Approval could not be completed. Re-enter your DSM password and try again, or check the app setup.",
27
30
  "denied": "Access was refused. Check your folder permissions and try again.",
28
31
  "session": "Sign in to DSM again, then refresh.",
29
- "size": "Downloads are limited to 64 MiB and 60 seconds.",
32
+ "size": "Downloads are limited to 64 MB and 60 seconds.",
30
33
  "queued": "Queued",
31
34
  "running": "Downloading",
32
35
  "succeeded": "Saved",
33
36
  "failed": "Failed",
34
37
  "canceled": "Canceled",
35
- "interrupted": "Interrupted"
38
+ "interrupted": "Interrupted",
39
+ "homeScope": "Each user’s home folder",
40
+ "scopeLabel": "Background save scope",
41
+ "protectedScope": "Confirmed scope",
42
+ "preselection": "Installer pre-selection",
43
+ "preselectionHelp": "The installer pre-selection is a suggestion. Confirm this scope with your DSM password when enabling background access.",
44
+ "scopeMismatch": "The installer pre-selection differs from the confirmed scope. Background saves follow the confirmed scope.",
45
+ "scopeChangeHelp": "Changing the scope revokes existing destinations and cancels pending saves. Users must choose destinations again. Saved files remain.",
46
+ "confirmScope": "Confirm scope change"
36
47
  }
@@ -0,0 +1,47 @@
1
+ {
2
+ "title": "Acceso a archivos en segundo plano",
3
+ "help": "Las descargas continúan después de cerrar esta aplicación. Cada tarea solo puede escribir en la carpeta seleccionada, durante una hora como máximo. Los archivos existentes nunca se reemplazan.",
4
+ "setupTitle": "Configuración del administrador",
5
+ "setupHelp": "Apruebe esta aplicación una vez para que complete tareas de archivos mientras los usuarios están desconectados.",
6
+ "password": "Contraseña de DSM",
7
+ "authorize": "Aprobar el acceso a archivos en segundo plano",
8
+ "confirmShare": "Confirmar carpeta compartida",
9
+ "scopeNeeds": "La carpeta compartida debe confirmarse. Elija una carpeta compartida abajo y confírmela con su contraseña de DSM.",
10
+ "ready": "El acceso a archivos en segundo plano está listo.",
11
+ "needs": "Un administrador debe aprobar el acceso a archivos en segundo plano.",
12
+ "blocked": "El acceso a archivos en segundo plano no está disponible. Pida a un administrador que revise la configuración de la aplicación.",
13
+ "details": "Detalles",
14
+ "refresh": "Actualizar",
15
+ "revoke": "Revocar",
16
+ "cancel": "Cancelar tarea",
17
+ "noDelegations": "No tiene delegaciones activas.",
18
+ "delegations": "Mis delegaciones",
19
+ "expires": "Caducidad",
20
+ "downloads": "Mis descargas",
21
+ "noJobs": "No tiene tareas de descarga.",
22
+ "url": "URL de descarga",
23
+ "name": "Nombre de archivo",
24
+ "choose": "Elegir carpeta",
25
+ "submit": "Descargar en mi carpeta",
26
+ "destination": "Destino",
27
+ "pending": "Tarea cancelada. La revocación está pendiente; la aplicación volverá a intentarlo.",
28
+ "error": "No se pudo completar la acción. Actualice e inténtelo de nuevo. Si sigue fallando, póngase en contacto con su administrador.",
29
+ "setupError": "No se pudo completar la aprobación. Vuelva a introducir su contraseña de DSM e inténtelo de nuevo, o revise la configuración de la aplicación.",
30
+ "denied": "Se denegó el acceso. Compruebe los permisos de la carpeta e inténtelo de nuevo.",
31
+ "session": "Vuelva a iniciar sesión en DSM y luego actualice.",
32
+ "size": "Las descargas están limitadas a 64 MB y 60 segundos.",
33
+ "queued": "En cola",
34
+ "running": "Descargando",
35
+ "succeeded": "Guardado",
36
+ "failed": "Error",
37
+ "canceled": "Cancelado",
38
+ "interrupted": "Interrumpido",
39
+ "homeScope": "Carpeta home de cada usuario",
40
+ "scopeLabel": "Ámbito de guardado en segundo plano",
41
+ "protectedScope": "Ámbito confirmado",
42
+ "preselection": "Preselección de la instalación",
43
+ "preselectionHelp": "La preselección de la instalación es solo una sugerencia. Confirme este ámbito con su contraseña de DSM al activar el acceso en segundo plano.",
44
+ "scopeMismatch": "La preselección de la instalación difiere del ámbito confirmado. Los guardados en segundo plano siguen el ámbito confirmado.",
45
+ "scopeChangeHelp": "Cambiar el ámbito revoca los destinos existentes y cancela los guardados pendientes. Los usuarios deben elegir de nuevo sus destinos. Los archivos ya guardados se conservan.",
46
+ "confirmScope": "Confirmar cambio de ámbito"
47
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "title": "Accès aux fichiers en arrière-plan",
3
+ "help": "Les téléchargements continuent après la fermeture de cette application. Chaque tâche ne peut écrire que dans le dossier sélectionné, pendant une heure au maximum. Les fichiers existants ne sont jamais remplacés.",
4
+ "setupTitle": "Configuration administrateur",
5
+ "setupHelp": "Approuvez cette application une fois pour qu’elle termine les tâches de fichiers pendant que les utilisateurs sont hors ligne.",
6
+ "password": "Mot de passe DSM",
7
+ "authorize": "Approuver l’accès aux fichiers en arrière-plan",
8
+ "confirmShare": "Confirmer le dossier partagé",
9
+ "scopeNeeds": "Le dossier partagé doit être confirmé. Choisissez un dossier partagé ci-dessous et confirmez-le avec votre mot de passe DSM.",
10
+ "ready": "L’accès aux fichiers en arrière-plan est prêt.",
11
+ "needs": "Un administrateur doit approuver l’accès aux fichiers en arrière-plan.",
12
+ "blocked": "L’accès aux fichiers en arrière-plan n’est pas disponible. Demandez à un administrateur de vérifier la configuration de l’application.",
13
+ "details": "Détails",
14
+ "refresh": "Actualiser",
15
+ "revoke": "Révoquer",
16
+ "cancel": "Annuler la tâche",
17
+ "noDelegations": "Vous n’avez aucune délégation active.",
18
+ "delegations": "Mes délégations",
19
+ "expires": "Expiration",
20
+ "downloads": "Mes téléchargements",
21
+ "noJobs": "Vous n’avez aucune tâche de téléchargement.",
22
+ "url": "URL de téléchargement",
23
+ "name": "Nom du fichier",
24
+ "choose": "Choisir un dossier",
25
+ "submit": "Télécharger dans mon dossier",
26
+ "destination": "Destination",
27
+ "pending": "Tâche annulée. La révocation est en attente ; l’application va réessayer.",
28
+ "error": "L’action n’a pas pu être effectuée. Actualisez et réessayez. Si le problème persiste, contactez votre administrateur.",
29
+ "setupError": "L’approbation n’a pas pu être effectuée. Saisissez à nouveau votre mot de passe DSM et réessayez, ou vérifiez la configuration de l’application.",
30
+ "denied": "L’accès a été refusé. Vérifiez les autorisations du dossier et réessayez.",
31
+ "session": "Reconnectez-vous à DSM, puis actualisez.",
32
+ "size": "Les téléchargements sont limités à 64 MB et 60 secondes.",
33
+ "queued": "En file d’attente",
34
+ "running": "Téléchargement en cours",
35
+ "succeeded": "Enregistré",
36
+ "failed": "Échec",
37
+ "canceled": "Annulé",
38
+ "interrupted": "Interrompu",
39
+ "homeScope": "Dossier home de chaque utilisateur",
40
+ "scopeLabel": "Portée de l’enregistrement en arrière-plan",
41
+ "protectedScope": "Portée confirmée",
42
+ "preselection": "Présélection de l’installation",
43
+ "preselectionHelp": "La présélection de l’installation n’est qu’une suggestion. Confirmez cette portée avec votre mot de passe DSM lorsque vous activez l’accès en arrière-plan.",
44
+ "scopeMismatch": "La présélection de l’installation diffère de la portée confirmée. Les enregistrements en arrière-plan suivent la portée confirmée.",
45
+ "scopeChangeHelp": "Changer la portée révoque les destinations existantes et annule les enregistrements en attente. Les utilisateurs doivent choisir à nouveau leurs destinations. Les fichiers déjà enregistrés sont conservés.",
46
+ "confirmScope": "Confirmer le changement de portée"
47
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "title": "Accesso ai file in background",
3
+ "help": "I download continuano dopo la chiusura di questa app. Ogni processo può scrivere solo nella cartella selezionata, per un massimo di un’ora. I file esistenti non vengono mai sostituiti.",
4
+ "setupTitle": "Configurazione amministratore",
5
+ "setupHelp": "Approvare questa app una volta per consentirle di completare i processi sui file mentre gli utenti sono offline.",
6
+ "password": "Password DSM",
7
+ "authorize": "Approva l’accesso ai file in background",
8
+ "confirmShare": "Conferma cartella condivisa",
9
+ "scopeNeeds": "La cartella condivisa deve essere confermata. Scegliere una cartella condivisa qui sotto e confermarla con la password DSM.",
10
+ "ready": "L’accesso ai file in background è pronto.",
11
+ "needs": "Un amministratore deve approvare l’accesso ai file in background.",
12
+ "blocked": "L’accesso ai file in background non è disponibile. Chiedere a un amministratore di controllare la configurazione dell’app.",
13
+ "details": "Dettagli",
14
+ "refresh": "Aggiorna",
15
+ "revoke": "Revoca",
16
+ "cancel": "Annulla processo",
17
+ "noDelegations": "Nessuna delega attiva.",
18
+ "delegations": "Le mie deleghe",
19
+ "expires": "Scadenza",
20
+ "downloads": "I miei download",
21
+ "noJobs": "Nessun processo di download.",
22
+ "url": "URL di download",
23
+ "name": "Nome file",
24
+ "choose": "Scegli cartella",
25
+ "submit": "Scarica nella mia cartella",
26
+ "destination": "Destinazione",
27
+ "pending": "Processo annullato. La revoca è in sospeso; l’app riproverà.",
28
+ "error": "Impossibile completare l’azione. Aggiornare e riprovare. Se il problema persiste, contattare l’amministratore.",
29
+ "setupError": "Impossibile completare l’approvazione. Inserire di nuovo la password DSM e riprovare, oppure controllare la configurazione dell’app.",
30
+ "denied": "Accesso negato. Controllare le autorizzazioni della cartella e riprovare.",
31
+ "session": "Accedere di nuovo a DSM, quindi aggiornare.",
32
+ "size": "I download sono limitati a 64 MB e 60 secondi.",
33
+ "queued": "In coda",
34
+ "running": "Download in corso",
35
+ "succeeded": "Salvato",
36
+ "failed": "Non riuscito",
37
+ "canceled": "Annullato",
38
+ "interrupted": "Interrotto",
39
+ "homeScope": "Cartella home di ogni utente",
40
+ "scopeLabel": "Ambito di salvataggio in background",
41
+ "protectedScope": "Ambito confermato",
42
+ "preselection": "Preselezione dell’installazione",
43
+ "preselectionHelp": "La preselezione dell’installazione è solo un suggerimento. Confermare questo ambito con la password DSM all’attivazione dell’accesso in background.",
44
+ "scopeMismatch": "La preselezione dell’installazione è diversa dall’ambito confermato. I salvataggi in background seguono l’ambito confermato.",
45
+ "scopeChangeHelp": "La modifica dell’ambito revoca le destinazioni esistenti e annulla i salvataggi in sospeso. Gli utenti devono scegliere di nuovo le destinazioni. I file già salvati restano.",
46
+ "confirmScope": "Conferma modifica dell’ambito"
47
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "title": "バックグラウンドのファイルアクセス",
3
+ "help": "このアプリを閉じてもダウンロードは続行されます。各ジョブは選択したフォルダにのみ、最長 1 時間書き込めます。既存のファイルは置き換えられません。",
4
+ "setupTitle": "管理者設定",
5
+ "setupHelp": "一度承認すると、ユーザーがオフラインの間もこのアプリがファイルジョブを完了できます。",
6
+ "password": "DSM パスワード",
7
+ "authorize": "バックグラウンドのファイルアクセスを承認",
8
+ "confirmShare": "共有フォルダを確認",
9
+ "scopeNeeds": "共有フォルダの確認が必要です。下で共有フォルダを選択し、DSM パスワードで確認してください。",
10
+ "ready": "バックグラウンドのファイルアクセスを利用できます。",
11
+ "needs": "バックグラウンドのファイルアクセスには管理者の承認が必要です。",
12
+ "blocked": "バックグラウンドのファイルアクセスを利用できません。アプリの設定を確認するよう管理者に依頼してください。",
13
+ "details": "詳細",
14
+ "refresh": "最新の情報に更新",
15
+ "revoke": "取り消す",
16
+ "cancel": "ジョブをキャンセル",
17
+ "noDelegations": "有効な委任はありません。",
18
+ "delegations": "自分の委任",
19
+ "expires": "有効期限",
20
+ "downloads": "自分のダウンロード",
21
+ "noJobs": "ダウンロードジョブはありません。",
22
+ "url": "ダウンロード URL",
23
+ "name": "ファイル名",
24
+ "choose": "フォルダを選択",
25
+ "submit": "自分のフォルダにダウンロード",
26
+ "destination": "保存先",
27
+ "pending": "ジョブをキャンセルしました。委任の取り消しは保留中で、アプリが再試行します。",
28
+ "error": "操作を完了できませんでした。最新の情報に更新してから、もう一度お試しください。問題が解決しない場合は、管理者に連絡してください。",
29
+ "setupError": "承認を完了できませんでした。DSM パスワードを入力し直して再試行するか、アプリの設定を確認してください。",
30
+ "denied": "アクセスが拒否されました。フォルダの権限を確認してもう一度お試しください。",
31
+ "session": "DSM に再度サインインしてから、最新の情報に更新してください。",
32
+ "size": "ダウンロードは 64 MB、60 秒までです。",
33
+ "queued": "待機中",
34
+ "running": "ダウンロード中",
35
+ "succeeded": "保存済み",
36
+ "failed": "失敗",
37
+ "canceled": "キャンセル済み",
38
+ "interrupted": "中断",
39
+ "homeScope": "各ユーザーの home フォルダ",
40
+ "scopeLabel": "バックグラウンド保存の範囲",
41
+ "protectedScope": "確認済みの範囲",
42
+ "preselection": "インストール時の事前選択",
43
+ "preselectionHelp": "インストール時の事前選択は提案にすぎません。バックグラウンドアクセスを有効にするときに、DSM パスワードでこの範囲を確認してください。",
44
+ "scopeMismatch": "インストール時の事前選択が確認済みの範囲と異なります。バックグラウンド保存は確認済みの範囲に従います。",
45
+ "scopeChangeHelp": "範囲を変更すると、既存の保存先が取り消され、保留中の保存がキャンセルされます。ユーザーは保存先を選び直す必要があります。保存済みのファイルは残ります。",
46
+ "confirmScope": "範囲の変更を確認"
47
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "title": "백그라운드 파일 액세스",
3
+ "help": "이 앱을 닫아도 다운로드는 계속됩니다. 각 작업은 선택한 폴더에만 최대 1시간 동안 쓸 수 있습니다. 기존 파일은 덮어쓰지 않습니다.",
4
+ "setupTitle": "관리자 설정",
5
+ "setupHelp": "한 번 승인하면 사용자가 오프라인일 때도 이 앱이 파일 작업을 완료할 수 있습니다.",
6
+ "password": "DSM 암호",
7
+ "authorize": "백그라운드 파일 액세스 승인",
8
+ "confirmShare": "공유 폴더 확인",
9
+ "scopeNeeds": "공유 폴더 확인이 필요합니다. 아래에서 공유 폴더를 선택하고 DSM 암호로 확인하십시오.",
10
+ "ready": "백그라운드 파일 액세스를 사용할 수 있습니다.",
11
+ "needs": "백그라운드 파일 액세스는 관리자의 승인이 필요합니다.",
12
+ "blocked": "백그라운드 파일 액세스를 사용할 수 없습니다. 관리자에게 앱 설정을 확인하도록 요청하십시오.",
13
+ "details": "세부 사항",
14
+ "refresh": "새로 고침",
15
+ "revoke": "취소",
16
+ "cancel": "작업 취소",
17
+ "noDelegations": "활성 위임이 없습니다.",
18
+ "delegations": "내 위임",
19
+ "expires": "만료",
20
+ "downloads": "내 다운로드",
21
+ "noJobs": "다운로드 작업이 없습니다.",
22
+ "url": "다운로드 URL",
23
+ "name": "파일 이름",
24
+ "choose": "폴더 선택",
25
+ "submit": "내 폴더에 다운로드",
26
+ "destination": "대상",
27
+ "pending": "작업이 취소되었습니다. 위임 취소가 보류 중이며 앱이 다시 시도합니다.",
28
+ "error": "작업을 완료할 수 없습니다. 새로 고친 후 다시 시도하십시오. 계속 실패하면 관리자에게 문의하십시오.",
29
+ "setupError": "승인을 완료할 수 없습니다. DSM 암호를 다시 입력하고 다시 시도하거나 앱 설정을 확인하십시오.",
30
+ "denied": "액세스가 거부되었습니다. 폴더 권한을 확인하고 다시 시도하십시오.",
31
+ "session": "DSM에 다시 로그인한 후 새로 고치십시오.",
32
+ "size": "다운로드는 64 MB, 60초로 제한됩니다.",
33
+ "queued": "대기 중",
34
+ "running": "다운로드 중",
35
+ "succeeded": "저장됨",
36
+ "failed": "실패",
37
+ "canceled": "취소됨",
38
+ "interrupted": "중단됨",
39
+ "homeScope": "각 사용자의 home 폴더",
40
+ "scopeLabel": "백그라운드 저장 범위",
41
+ "protectedScope": "확인된 범위",
42
+ "preselection": "설치 시 사전 선택",
43
+ "preselectionHelp": "설치 시 사전 선택은 제안일 뿐입니다. 백그라운드 액세스를 활성화할 때 DSM 암호로 이 범위를 확인하십시오.",
44
+ "scopeMismatch": "설치 시 사전 선택이 확인된 범위와 다릅니다. 백그라운드 저장은 확인된 범위를 따릅니다.",
45
+ "scopeChangeHelp": "범위를 변경하면 기존 대상이 취소되고 대기 중인 저장이 취소됩니다. 사용자는 대상을 다시 선택해야 합니다. 저장된 파일은 유지됩니다.",
46
+ "confirmScope": "범위 변경 확인"
47
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "title": "Speichern im Hintergrund",
3
+ "help": "Diese App kann nach Ihrer Abmeldung weiterhin ganze Dateien in Ihre ausgewählten Ordner speichern, bis Sie den Zugriff widerrufen. Vorhandene Dateien werden nie ersetzt.",
4
+ "selection": "Dieser App erlauben, hier nach Ihrer Abmeldung zu speichern, bis Sie den Zugriff widerrufen.",
5
+ "delegations": "Meine Ziele",
6
+ "operations": "Meine Speichervorgänge",
7
+ "empty": "Sie haben keine aktiven Ziele.",
8
+ "noOperations": "Sie haben keine Speichervorgänge.",
9
+ "revoke": "Zugriff widerrufen",
10
+ "choose": "Speicherziel auswählen",
11
+ "needs": "Ein Administrator muss den Hintergrundzugriff genehmigen, bevor Sie ein Ziel auswählen.",
12
+ "cancel": "Speichern abbrechen",
13
+ "refresh": "Aktualisieren",
14
+ "disable": "Speichern im Hintergrund deaktivieren",
15
+ "enable": "Speichern im Hintergrund aktivieren",
16
+ "disableHelp": "Das Deaktivieren widerruft alle Ziele dieser App und bricht ausstehende Speichervorgänge ab. Bereits gespeicherte Dateien bleiben erhalten.",
17
+ "disabled": "Das Speichern im Hintergrund ist deaktiviert. Ein Administrator kann es aktivieren; danach müssen Sie erneut ein Ziel auswählen.",
18
+ "enabled": "Das Speichern im Hintergrund ist aktiviert.",
19
+ "revoked": "Zugriff widerrufen. Bereits gespeicherte Dateien bleiben erhalten.",
20
+ "untilRevoked": "Bis Sie den Zugriff widerrufen",
21
+ "queued": "In Warteschlange",
22
+ "copying": "Wird gespeichert",
23
+ "committed": "Gespeichert",
24
+ "canceled": "Abgebrochen",
25
+ "canceling": "Wird abgebrochen",
26
+ "interrupted": "Unterbrochen",
27
+ "uncertain": "Ergebnis unbekannt",
28
+ "uncertainHelp": "Das Ergebnis ist unbekannt. Prüfen Sie diesen ursprünglichen Auftrag und das Ziel, bevor Sie weitere Schritte unternehmen. Diese App speichert nicht automatisch erneut.",
29
+ "interruptedHelp": "Der Speichervorgang wurde unterbrochen. Prüfen Sie das Ziel; diese App versucht es nicht automatisch erneut.",
30
+ "loading": "Ihre Ziele und Speichervorgänge werden geladen…",
31
+ "denied": "Der Zugriff wurde verweigert. Prüfen Sie Ihre Ordnerberechtigungen und wählen Sie das Ziel dann erneut aus.",
32
+ "session": "Melden Sie sich erneut bei DSM an und aktualisieren Sie dann die Ansicht.",
33
+ "conflict": "Eine Datei mit diesem Namen ist bereits vorhanden. Prüfen Sie das Ziel und wählen Sie für einen neuen Auftrag einen anderen Namen.",
34
+ "space": "Es ist nicht genügend Speicherplatz vorhanden. Prüfen Sie das Ziel, bevor Sie einen neuen Auftrag starten.",
35
+ "error": "Die Aktion konnte nicht bestätigt werden. Aktualisieren Sie die Ansicht, um das aktuelle Ergebnis zu prüfen, bevor Sie weitere Schritte unternehmen.",
36
+ "scope": "Bestätigter Speicherbereich",
37
+ "scopeNeeds": "Ein Administrator muss die Vorauswahl bei der Installation unter „Administratoreinrichtung“ bestätigen, bevor Sie ein Ziel auswählen.",
38
+ "scopeMismatch": "Die Vorauswahl bei der Installation weicht vom bestätigten Bereich ab. Speichervorgänge folgen dem bestätigten Bereich:",
39
+ "reselect": "Der Speicherbereich wurde geändert oder Ihre Berechtigung wurde widerrufen. Wählen Sie Ihr Ziel erneut aus. Bereits gespeicherte Dateien bleiben erhalten.",
40
+ "example": "Beispieldatei speichern",
41
+ "exampleHelp": "Speichern Sie eine kleine Beispieldatei in Ihrem aktiven Ziel. Die App erstellt sie privat und speichert sie dann mit Ihren eigenen Berechtigungen. Das Ergebnis finden Sie unter „Meine Speichervorgänge“."
42
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "title": "Background saves",
3
+ "help": "This app can continue saving whole files to your selected folders after you sign out, until you revoke access. Existing files are never replaced.",
4
+ "selection": "Allow this app to save here after you sign out, until you revoke access.",
5
+ "delegations": "My destinations",
6
+ "operations": "My saves",
7
+ "empty": "You have no active destinations.",
8
+ "noOperations": "You have no save operations.",
9
+ "revoke": "Revoke access",
10
+ "choose": "Choose save destination",
11
+ "needs": "An administrator must approve background access before you choose a destination.",
12
+ "cancel": "Cancel save",
13
+ "refresh": "Refresh",
14
+ "disable": "Disable background saves",
15
+ "enable": "Enable background saves",
16
+ "disableHelp": "Disabling revokes all destinations for this app and cancels pending saves. Files already saved remain.",
17
+ "disabled": "Background saves are disabled. An administrator can enable them; you must then select a destination again.",
18
+ "enabled": "Background saves are enabled.",
19
+ "revoked": "Access revoked. Files already saved remain.",
20
+ "untilRevoked": "Until you revoke access",
21
+ "queued": "Queued",
22
+ "copying": "Saving",
23
+ "committed": "Saved",
24
+ "canceled": "Canceled",
25
+ "canceling": "Canceling",
26
+ "interrupted": "Interrupted",
27
+ "uncertain": "Result unknown",
28
+ "uncertainHelp": "The result is unknown. Check this original job and the destination before taking further action. This app will not save it again automatically.",
29
+ "interruptedHelp": "The save was interrupted. Check the destination; this app will not retry automatically.",
30
+ "loading": "Loading your destinations and saves…",
31
+ "denied": "Access was refused. Check your folder permissions, then select the destination again.",
32
+ "session": "Sign in to DSM again, then refresh.",
33
+ "conflict": "A file with this name already exists. Check the destination and choose another name for a new job.",
34
+ "space": "There is not enough space. Check the destination before starting a new job.",
35
+ "error": "The action could not be confirmed. Refresh to check the current result before taking further action.",
36
+ "scope": "Confirmed save scope",
37
+ "scopeNeeds": "An administrator must confirm the installer pre-selection in Administrator setup before you choose a destination.",
38
+ "scopeMismatch": "The installer pre-selection differs from the confirmed scope. Saves follow the confirmed scope:",
39
+ "reselect": "The save scope changed or your grant was revoked. Choose your destination again. Previously saved files remain.",
40
+ "example": "Save example file",
41
+ "exampleHelp": "Save a small example file to your active destination. The app produces it privately, then saves it with your own permissions. Check My saves for its result."
42
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "title": "Guardados en segundo plano",
3
+ "help": "Esta aplicación puede seguir guardando archivos completos en las carpetas seleccionadas después de cerrar sesión, hasta que revoque el acceso. Los archivos existentes nunca se reemplazan.",
4
+ "selection": "Permitir que esta aplicación guarde aquí después de cerrar sesión, hasta que revoque el acceso.",
5
+ "delegations": "Mis destinos",
6
+ "operations": "Mis guardados",
7
+ "empty": "No tiene destinos activos.",
8
+ "noOperations": "No tiene operaciones de guardado.",
9
+ "revoke": "Revocar acceso",
10
+ "choose": "Elegir destino de guardado",
11
+ "needs": "Un administrador debe aprobar el acceso en segundo plano antes de que elija un destino.",
12
+ "cancel": "Cancelar guardado",
13
+ "refresh": "Actualizar",
14
+ "disable": "Desactivar guardados en segundo plano",
15
+ "enable": "Activar guardados en segundo plano",
16
+ "disableHelp": "Desactivarlos revoca todos los destinos de esta aplicación y cancela los guardados pendientes. Los archivos ya guardados se conservan.",
17
+ "disabled": "Los guardados en segundo plano están desactivados. Un administrador puede activarlos; después deberá elegir de nuevo un destino.",
18
+ "enabled": "Los guardados en segundo plano están activados.",
19
+ "revoked": "Acceso revocado. Los archivos ya guardados se conservan.",
20
+ "untilRevoked": "Hasta que revoque el acceso",
21
+ "queued": "En cola",
22
+ "copying": "Guardando",
23
+ "committed": "Guardado",
24
+ "canceled": "Cancelado",
25
+ "canceling": "Cancelando",
26
+ "interrupted": "Interrumpido",
27
+ "uncertain": "Resultado desconocido",
28
+ "uncertainHelp": "El resultado es desconocido. Revise esta tarea original y el destino antes de realizar otra acción. Esta aplicación no volverá a guardarlo automáticamente.",
29
+ "interruptedHelp": "El guardado se interrumpió. Revise el destino; esta aplicación no lo reintentará automáticamente.",
30
+ "loading": "Cargando sus destinos y guardados…",
31
+ "denied": "Se denegó el acceso. Compruebe los permisos de la carpeta y vuelva a elegir el destino.",
32
+ "session": "Vuelva a iniciar sesión en DSM y luego actualice.",
33
+ "conflict": "Ya existe un archivo con este nombre. Revise el destino y elija otro nombre para una tarea nueva.",
34
+ "space": "No hay suficiente espacio. Revise el destino antes de iniciar una tarea nueva.",
35
+ "error": "No se pudo confirmar la acción. Actualice para comprobar el resultado actual antes de realizar otra acción.",
36
+ "scope": "Ámbito de guardado confirmado",
37
+ "scopeNeeds": "Un administrador debe confirmar la preselección de la instalación en «Configuración del administrador» antes de que elija un destino.",
38
+ "scopeMismatch": "La preselección de la instalación difiere del ámbito confirmado. Los guardados siguen el ámbito confirmado:",
39
+ "reselect": "El ámbito de guardado cambió o se revocó su autorización. Vuelva a elegir su destino. Los archivos guardados anteriormente se conservan.",
40
+ "example": "Guardar archivo de ejemplo",
41
+ "exampleHelp": "Guarde un pequeño archivo de ejemplo en su destino activo. La aplicación lo genera de forma privada y luego lo guarda con sus propios permisos. Consulte «Mis guardados» para ver el resultado."
42
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "title": "Enregistrements en arrière-plan",
3
+ "help": "Cette application peut continuer à enregistrer des fichiers entiers dans les dossiers sélectionnés après votre déconnexion, jusqu’à ce que vous révoquiez l’accès. Les fichiers existants ne sont jamais remplacés.",
4
+ "selection": "Autoriser cette application à enregistrer ici après votre déconnexion, jusqu’à ce que vous révoquiez l’accès.",
5
+ "delegations": "Mes destinations",
6
+ "operations": "Mes enregistrements",
7
+ "empty": "Vous n’avez aucune destination active.",
8
+ "noOperations": "Vous n’avez aucune opération d’enregistrement.",
9
+ "revoke": "Révoquer l’accès",
10
+ "choose": "Choisir la destination",
11
+ "needs": "Un administrateur doit approuver l’accès en arrière-plan avant que vous puissiez choisir une destination.",
12
+ "cancel": "Annuler l’enregistrement",
13
+ "refresh": "Actualiser",
14
+ "disable": "Désactiver les enregistrements en arrière-plan",
15
+ "enable": "Activer les enregistrements en arrière-plan",
16
+ "disableHelp": "La désactivation révoque toutes les destinations de cette application et annule les enregistrements en attente. Les fichiers déjà enregistrés sont conservés.",
17
+ "disabled": "Les enregistrements en arrière-plan sont désactivés. Un administrateur peut les activer ; vous devrez ensuite choisir à nouveau une destination.",
18
+ "enabled": "Les enregistrements en arrière-plan sont activés.",
19
+ "revoked": "Accès révoqué. Les fichiers déjà enregistrés sont conservés.",
20
+ "untilRevoked": "Jusqu’à ce que vous révoquiez l’accès",
21
+ "queued": "En file d’attente",
22
+ "copying": "Enregistrement en cours",
23
+ "committed": "Enregistré",
24
+ "canceled": "Annulé",
25
+ "canceling": "Annulation en cours",
26
+ "interrupted": "Interrompu",
27
+ "uncertain": "Résultat inconnu",
28
+ "uncertainHelp": "Le résultat est inconnu. Vérifiez cette tâche d’origine et la destination avant toute autre action. Cette application ne l’enregistrera pas à nouveau automatiquement.",
29
+ "interruptedHelp": "L’enregistrement a été interrompu. Vérifiez la destination ; cette application ne réessaiera pas automatiquement.",
30
+ "loading": "Chargement de vos destinations et enregistrements…",
31
+ "denied": "L’accès a été refusé. Vérifiez les autorisations du dossier, puis choisissez à nouveau la destination.",
32
+ "session": "Reconnectez-vous à DSM, puis actualisez.",
33
+ "conflict": "Un fichier portant ce nom existe déjà. Vérifiez la destination et choisissez un autre nom pour une nouvelle tâche.",
34
+ "space": "L’espace est insuffisant. Vérifiez la destination avant de lancer une nouvelle tâche.",
35
+ "error": "L’action n’a pas pu être confirmée. Actualisez pour vérifier le résultat actuel avant toute autre action.",
36
+ "scope": "Portée d’enregistrement confirmée",
37
+ "scopeNeeds": "Un administrateur doit confirmer la présélection de l’installation dans « Configuration administrateur » avant que vous puissiez choisir une destination.",
38
+ "scopeMismatch": "La présélection de l’installation diffère de la portée confirmée. Les enregistrements suivent la portée confirmée :",
39
+ "reselect": "La portée d’enregistrement a changé ou votre autorisation a été révoquée. Choisissez à nouveau votre destination. Les fichiers déjà enregistrés sont conservés.",
40
+ "example": "Enregistrer un fichier d’exemple",
41
+ "exampleHelp": "Enregistrez un petit fichier d’exemple dans votre destination active. L’application le produit en privé, puis l’enregistre avec vos propres autorisations. Consultez « Mes enregistrements » pour voir le résultat."
42
+ }