@synopackageland/cli 0.8.0 → 0.9.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 (946) hide show
  1. package/CHANGELOG.md +267 -0
  2. package/README.md +27 -5
  3. package/dist/add.js +16 -17
  4. package/dist/authorization-sdk.d.ts +0 -1
  5. package/dist/authorization-sdk.js +0 -1
  6. package/dist/build-spk/dsm-version.d.ts +0 -2
  7. package/dist/build-spk/dsm-version.js +0 -6
  8. package/dist/build-spk/gateway.js +2 -2
  9. package/dist/build-spk/generator.js +4 -23
  10. package/dist/build-spk/notices.js +12 -8
  11. package/dist/build-spk/resource-worker.js +0 -3
  12. package/dist/build-spk/uninstall-wizard.d.ts +8 -3
  13. package/dist/build-spk/uninstall-wizard.js +4 -2
  14. package/dist/build-spk/wizard-messages.d.ts +33 -0
  15. package/dist/build-spk/wizard-messages.js +33 -0
  16. package/dist/capability-overlays.d.ts +15 -0
  17. package/dist/capability-overlays.js +18 -0
  18. package/dist/cli-version.d.ts +2 -0
  19. package/dist/cli-version.js +3 -0
  20. package/dist/cli.js +6 -4
  21. package/dist/contract/validate.js +4 -21
  22. package/dist/error-registry.js +22 -15
  23. package/dist/host/dsm-client.js +51 -30
  24. package/dist/host/types.d.ts +5 -0
  25. package/dist/info.js +16 -2
  26. package/dist/init.js +53 -59
  27. package/dist/portal/alias.d.ts +6 -4
  28. package/dist/portal/alias.js +6 -11
  29. package/dist/portal/package.d.ts +0 -3
  30. package/dist/portal/package.js +1 -7
  31. package/dist/reproducible.js +1 -1
  32. package/dist/runtime/delegate-contract.d.ts +15 -0
  33. package/dist/runtime/delegate-contract.js +2 -0
  34. package/dist/runtime/executor-build.d.ts +15 -1
  35. package/dist/runtime/executor-build.js +42 -11
  36. package/dist/runtime/executor-digests.json +24 -0
  37. package/dist/runtime/executor-inspect.d.ts +1 -0
  38. package/dist/runtime/executor-inspect.js +5 -2
  39. package/dist/runtime/executor-policy.d.ts +3 -1
  40. package/dist/runtime/executor-policy.js +7 -2
  41. package/dist/runtime/executor-source.d.ts +21 -0
  42. package/dist/runtime/executor-source.js +35 -0
  43. package/dist/runtime/executor-tasks.d.ts +5 -2
  44. package/dist/runtime/executor-tasks.js +6 -4
  45. package/dist/runtime/sdk-source.d.ts +31 -0
  46. package/dist/runtime/sdk-source.js +92 -0
  47. package/dist/runtime/uninstall-cleanup.d.ts +7 -1
  48. package/dist/runtime/uninstall-cleanup.js +7 -1
  49. package/dist/standalone/api-permissions.d.ts +4 -1
  50. package/dist/standalone/api-permissions.js +10 -18
  51. package/dist/standalone/build.d.ts +1 -0
  52. package/dist/standalone/build.js +11 -4
  53. package/dist/standalone/daemon.js +2 -2
  54. package/dist/standalone/dsm-window.js +9 -12
  55. package/dist/standalone/inspect-spk.js +8 -7
  56. package/dist/standalone/manifest.d.ts +5 -2
  57. package/dist/standalone/manifest.js +20 -5
  58. package/dist/standalone/root-window.d.ts +11 -4
  59. package/dist/standalone/root-window.js +54 -30
  60. package/dist/standalone/sdk-check.d.ts +9 -0
  61. package/dist/standalone/sdk-check.js +43 -0
  62. package/dist/standalone/spk.js +2 -2
  63. package/dist/template-paths.d.ts +7 -2
  64. package/dist/template-paths.js +18 -6
  65. package/dist/validate.js +2 -1
  66. package/package.json +13 -3
  67. package/schema/synology-app.schema.json +1 -10
  68. package/skills/SKILL.md +1 -1
  69. package/skills/reference/create.md +7 -2
  70. package/skills/reference/deploy.md +1 -1
  71. package/skills/reference/identity.md +1 -1
  72. package/skills/reference/portal.md +7 -3
  73. package/dist/templates/_executor/README.md +0 -318
  74. package/dist/templates/_executor/anchor.go +0 -156
  75. package/dist/templates/_executor/anchor_test.go +0 -161
  76. package/dist/templates/_executor/apppriv_review_test.go +0 -28
  77. package/dist/templates/_executor/auth_presence_review_test.go +0 -38
  78. package/dist/templates/_executor/cancel_contract_test.go +0 -236
  79. package/dist/templates/_executor/cmd/lifecycle/main.go +0 -42
  80. package/dist/templates/_executor/cookie_review_test.go +0 -27
  81. package/dist/templates/_executor/copy.go +0 -64
  82. package/dist/templates/_executor/copy_test.go +0 -88
  83. package/dist/templates/_executor/digest_review_test.go +0 -120
  84. package/dist/templates/_executor/directories.go +0 -40
  85. package/dist/templates/_executor/dsm.go +0 -369
  86. package/dist/templates/_executor/dsm_test.go +0 -290
  87. package/dist/templates/_executor/executor.go +0 -735
  88. package/dist/templates/_executor/executor_test.go +0 -314
  89. package/dist/templates/_executor/go.mod +0 -5
  90. package/dist/templates/_executor/identity.go +0 -74
  91. package/dist/templates/_executor/identity_kernel_linux_test.go +0 -60
  92. package/dist/templates/_executor/identity_linux.go +0 -82
  93. package/dist/templates/_executor/identity_security_test.go +0 -43
  94. package/dist/templates/_executor/internal/lifecycle/lifecycle.go +0 -95
  95. package/dist/templates/_executor/internal/lifecycle/lifecycle_test.go +0 -232
  96. package/dist/templates/_executor/internal/taskscript/boot.sh +0 -31
  97. package/dist/templates/_executor/internal/taskscript/cmd/main.go +0 -19
  98. package/dist/templates/_executor/internal/taskscript/control.sh +0 -31
  99. package/dist/templates/_executor/internal/taskscript/tasks.go +0 -44
  100. package/dist/templates/_executor/json_review_test.go +0 -40
  101. package/dist/templates/_executor/lifecycle_test.go +0 -97
  102. package/dist/templates/_executor/link_linux.go +0 -28
  103. package/dist/templates/_executor/long_running_test.go +0 -530
  104. package/dist/templates/_executor/main.go +0 -576
  105. package/dist/templates/_executor/managed.go +0 -117
  106. package/dist/templates/_executor/managed_test.go +0 -137
  107. package/dist/templates/_executor/move_linux.go +0 -490
  108. package/dist/templates/_executor/move_linux_test.go +0 -460
  109. package/dist/templates/_executor/move_validation.go +0 -46
  110. package/dist/templates/_executor/move_validation_test.go +0 -187
  111. package/dist/templates/_executor/operations.go +0 -926
  112. package/dist/templates/_executor/path_test.go +0 -35
  113. package/dist/templates/_executor/pid.go +0 -37
  114. package/dist/templates/_executor/pid_test.go +0 -113
  115. package/dist/templates/_executor/platform_linux.go +0 -187
  116. package/dist/templates/_executor/platform_linux_test.go +0 -191
  117. package/dist/templates/_executor/platform_other.go +0 -76
  118. package/dist/templates/_executor/process.go +0 -142
  119. package/dist/templates/_executor/purge_log.go +0 -18
  120. package/dist/templates/_executor/records.go +0 -242
  121. package/dist/templates/_executor/scope_cancel_contract_test.go +0 -91
  122. package/dist/templates/_executor/scope_client.go +0 -37
  123. package/dist/templates/_executor/scope_contract.go +0 -12
  124. package/dist/templates/_executor/selected_scope.go +0 -146
  125. package/dist/templates/_executor/selected_scope_test.go +0 -186
  126. package/dist/templates/_executor/socket_linux_test.go +0 -46
  127. package/dist/templates/_executor/status_disabled_test.go +0 -33
  128. package/dist/templates/_executor/store.go +0 -91
  129. package/dist/templates/_executor/supervise.go +0 -109
  130. package/dist/templates/_executor/supervise_test.go +0 -130
  131. package/dist/templates/_executor/task_race_review_test.go +0 -47
  132. package/dist/templates/_executor/tasks.go +0 -320
  133. package/dist/templates/_executor/tasks_dsm71_test.go +0 -114
  134. package/dist/templates/_executor/tasks_review_test.go +0 -43
  135. package/dist/templates/_executor/tasks_test.go +0 -223
  136. package/dist/templates/_executor/testdata/evidence/cleanup.json +0 -24
  137. package/dist/templates/_executor/testdata/evidence/final-smoke.jsonl +0 -9
  138. package/dist/templates/_executor/testdata/evidence/kernel-acl.json +0 -6
  139. package/dist/templates/_executor/testdata/evidence/linux-tests.log +0 -123
  140. package/dist/templates/_executor/testdata/evidence/live.jsonl +0 -23
  141. package/dist/templates/_executor/testdata/evidence/storage.json +0 -90
  142. package/dist/templates/_executor/testdata/evidence/validation.json +0 -55
  143. package/dist/templates/_executor/testdata/live_probe.py +0 -98
  144. package/dist/templates/_executor/upgrade_watch_test.go +0 -244
  145. package/dist/templates/_executor/watch.go +0 -164
  146. package/dist/templates/_executor/watch_test.go +0 -291
  147. package/dist/templates/_executor/write_review_linux_test.go +0 -87
  148. package/dist/templates/_shared/AGENTS.md +0 -146
  149. package/dist/templates/_shared/CLAUDE.md +0 -1
  150. package/dist/templates/_shared/third-party-notices.mjs +0 -51
  151. package/dist/templates/binary/LICENSES/GO-LICENSE +0 -27
  152. package/dist/templates/binary/LICENSES/GO-PATENTS +0 -22
  153. package/dist/templates/binary/dsm-package.yaml +0 -46
  154. package/dist/templates/binary/example/main.go +0 -16
  155. package/dist/templates/binary/gitignore +0 -2
  156. package/dist/templates/binary/i18n/messages/de.json +0 -4
  157. package/dist/templates/binary/i18n/messages/en.json +0 -4
  158. package/dist/templates/binary/i18n/messages/es.json +0 -4
  159. package/dist/templates/binary/i18n/messages/fr.json +0 -4
  160. package/dist/templates/binary/i18n/messages/it.json +0 -4
  161. package/dist/templates/binary/i18n/messages/ja.json +0 -4
  162. package/dist/templates/binary/i18n/messages/ko.json +0 -4
  163. package/dist/templates/binary/i18n/messages/zh-CN.json +0 -4
  164. package/dist/templates/binary/i18n/messages/zh-TW.json +0 -4
  165. package/dist/templates/binary/ui/app.css +0 -4
  166. package/dist/templates/binary/ui/app.js +0 -32
  167. package/dist/templates/compose/compose.yaml +0 -8
  168. package/dist/templates/compose/synology-app.yaml +0 -16
  169. package/dist/templates/native-authorization/AuthorizationGate.vue +0 -91
  170. package/dist/templates/native-authorization/i18n/de.json +0 -37
  171. package/dist/templates/native-authorization/i18n/en.json +0 -37
  172. package/dist/templates/native-authorization/i18n/es.json +0 -37
  173. package/dist/templates/native-authorization/i18n/fr.json +0 -37
  174. package/dist/templates/native-authorization/i18n/index.ts +0 -15
  175. package/dist/templates/native-authorization/i18n/it.json +0 -37
  176. package/dist/templates/native-authorization/i18n/ja.json +0 -37
  177. package/dist/templates/native-authorization/i18n/ko.json +0 -37
  178. package/dist/templates/native-authorization/i18n/zh-CN.json +0 -37
  179. package/dist/templates/native-authorization/i18n/zh-TW.json +0 -37
  180. package/dist/templates/native-go/README.md +0 -459
  181. package/dist/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +0 -61
  182. package/dist/templates/native-go/backend/cmd/app/main.go +0 -95
  183. package/dist/templates/native-go/backend/cmd/background-worker/main.go +0 -38
  184. package/dist/templates/native-go/backend/go.mod +0 -9
  185. package/dist/templates/native-go/backend/go.sum +0 -4
  186. package/dist/templates/native-go/backend/internal/api/cgi_framing_test.go +0 -32
  187. package/dist/templates/native-go/backend/internal/api/cookie_review_test.go +0 -28
  188. package/dist/templates/native-go/backend/internal/api/deadline_test.go +0 -114
  189. package/dist/templates/native-go/backend/internal/api/dsm-session.go +0 -54
  190. package/dist/templates/native-go/backend/internal/api/dsm-session_test.go +0 -51
  191. package/dist/templates/native-go/backend/internal/api/entry_test.go +0 -47
  192. package/dist/templates/native-go/backend/internal/api/errors.go +0 -47
  193. package/dist/templates/native-go/backend/internal/api/permissions.go +0 -161
  194. package/dist/templates/native-go/backend/internal/api/permissions.json +0 -5
  195. package/dist/templates/native-go/backend/internal/api/permissions_test.go +0 -113
  196. package/dist/templates/native-go/backend/internal/api/policy_fixture_test.go +0 -8
  197. package/dist/templates/native-go/backend/internal/api/registry.go +0 -142
  198. package/dist/templates/native-go/backend/internal/api/registry_test.go +0 -344
  199. package/dist/templates/native-go/backend/internal/api/resource_limits_test.go +0 -87
  200. package/dist/templates/native-go/backend/internal/api/sdk-permissions.json +0 -59
  201. package/dist/templates/native-go/backend/internal/api/sdk_policy_test.go +0 -31
  202. package/dist/templates/native-go/backend/internal/api/server.go +0 -305
  203. package/dist/templates/native-go/backend/internal/api/testdata/permissions-cases.json +0 -172
  204. package/dist/templates/native-go/backend/internal/app/background.go +0 -249
  205. package/dist/templates/native-go/backend/internal/app/background_none.go +0 -8
  206. package/dist/templates/native-go/backend/internal/app/background_owner.go +0 -38
  207. package/dist/templates/native-go/backend/internal/app/background_owner_test.go +0 -163
  208. package/dist/templates/native-go/backend/internal/app/background_schedule.go +0 -69
  209. package/dist/templates/native-go/backend/internal/app/background_schedule_test.go +0 -62
  210. package/dist/templates/native-go/backend/internal/app/background_test.go +0 -320
  211. package/dist/templates/native-go/backend/internal/app/delegate_config.go +0 -57
  212. package/dist/templates/native-go/backend/internal/app/delegate_config_test.go +0 -28
  213. package/dist/templates/native-go/backend/internal/app/delegate_none.go +0 -5
  214. package/dist/templates/native-go/backend/internal/app/identity.go +0 -20
  215. package/dist/templates/native-go/backend/internal/app/identity_test.go +0 -15
  216. package/dist/templates/native-go/backend/internal/app/migrations.go +0 -41
  217. package/dist/templates/native-go/backend/internal/app/migrations_test.go +0 -41
  218. package/dist/templates/native-go/backend/internal/app/portal.go +0 -30
  219. package/dist/templates/native-go/backend/internal/app/portal_test.go +0 -55
  220. package/dist/templates/native-go/backend/internal/app/root_none.go +0 -9
  221. package/dist/templates/native-go/backend/internal/app/routes.go +0 -137
  222. package/dist/templates/native-go/backend/internal/app/routes_test.go +0 -165
  223. package/dist/templates/native-go/backend/internal/app/session_files.go +0 -9
  224. package/dist/templates/native-go/backend/internal/app/session_files_test.go +0 -14
  225. package/dist/templates/native-go/backend/internal/app/shared_folder.go +0 -144
  226. package/dist/templates/native-go/backend/internal/app/shared_folder_test.go +0 -158
  227. package/dist/templates/native-go/backend/internal/background/access.go +0 -57
  228. package/dist/templates/native-go/backend/internal/background/lock_test.go +0 -131
  229. package/dist/templates/native-go/backend/internal/background/owner_test.go +0 -118
  230. package/dist/templates/native-go/backend/internal/background/runner.go +0 -185
  231. package/dist/templates/native-go/backend/internal/background/runner_test.go +0 -209
  232. package/dist/templates/native-go/backend/internal/background/schedule.go +0 -336
  233. package/dist/templates/native-go/backend/internal/background/schedule_test.go +0 -368
  234. package/dist/templates/native-go/backend/internal/background/store.go +0 -825
  235. package/dist/templates/native-go/backend/internal/background/store_test.go +0 -365
  236. package/dist/templates/native-go/backend/internal/datamigrate/migrate.go +0 -191
  237. package/dist/templates/native-go/backend/internal/datamigrate/migrate_test.go +0 -177
  238. package/dist/templates/native-go/backend/internal/dsm/admin.go +0 -76
  239. package/dist/templates/native-go/backend/internal/dsm/admin_linux.go +0 -110
  240. package/dist/templates/native-go/backend/internal/dsm/admin_linux_test.go +0 -105
  241. package/dist/templates/native-go/backend/internal/dsm/admin_other.go +0 -15
  242. package/dist/templates/native-go/backend/internal/dsm/admin_test.go +0 -67
  243. package/dist/templates/native-go/backend/internal/dsm/apppriv.go +0 -30
  244. package/dist/templates/native-go/backend/internal/dsm/auth.go +0 -94
  245. package/dist/templates/native-go/backend/internal/dsm/auth_test.go +0 -159
  246. package/dist/templates/native-go/backend/internal/dsm/bridge_file.go +0 -75
  247. package/dist/templates/native-go/backend/internal/dsm/bridge_file_test.go +0 -57
  248. package/dist/templates/native-go/backend/internal/dsm/entry.go +0 -177
  249. package/dist/templates/native-go/backend/internal/dsm/entry_test.go +0 -315
  250. package/dist/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
  251. package/dist/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
  252. package/dist/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
  253. package/dist/templates/native-go/backend/internal/dsm/native/admin_check.c +0 -28
  254. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
  255. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
  256. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
  257. package/dist/templates/native-go/backend/internal/dsm/native/apppriv_check.c +0 -33
  258. package/dist/templates/native-go/backend/internal/dsm/native/build.sh +0 -18
  259. package/dist/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +0 -400
  260. package/dist/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +0 -501
  261. package/dist/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +0 -5
  262. package/dist/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +0 -21
  263. package/dist/templates/native-go/backend/internal/dsm/native/provenance.json +0 -18
  264. package/dist/templates/native-go/backend/internal/filestation/browse_test.go +0 -67
  265. package/dist/templates/native-go/backend/internal/filestation/check_permission.go +0 -71
  266. package/dist/templates/native-go/backend/internal/filestation/check_permission_test.go +0 -77
  267. package/dist/templates/native-go/backend/internal/filestation/client.go +0 -337
  268. package/dist/templates/native-go/backend/internal/filestation/client_test.go +0 -155
  269. package/dist/templates/native-go/backend/internal/filestation/doc.go +0 -4
  270. package/dist/templates/native-go/backend/internal/filestation/download_dsm71_test.go +0 -82
  271. package/dist/templates/native-go/backend/internal/filestation/http.go +0 -70
  272. package/dist/templates/native-go/backend/internal/filestation/http_test.go +0 -188
  273. package/dist/templates/native-go/backend/internal/filestation/operations_test.go +0 -206
  274. package/dist/templates/native-go/backend/internal/filestation/read_file_test.go +0 -89
  275. package/dist/templates/native-go/backend/internal/filestation/sdk_policy_test.go +0 -39
  276. package/dist/templates/native-go/backend/internal/filestation/service.go +0 -254
  277. package/dist/templates/native-go/backend/internal/filestation/service_test.go +0 -74
  278. package/dist/templates/native-go/backend/internal/filestation/upload_stream.go +0 -76
  279. package/dist/templates/native-go/backend/internal/filestation/upload_stream_test.go +0 -77
  280. package/dist/templates/native-go/backend/internal/filestation/write.go +0 -32
  281. package/dist/templates/native-go/backend/internal/filestation/write_test.go +0 -124
  282. package/dist/templates/native-go/backend/internal/identity/README.md +0 -59
  283. package/dist/templates/native-go/backend/internal/identity/dsm.go +0 -115
  284. package/dist/templates/native-go/backend/internal/identity/http.go +0 -291
  285. package/dist/templates/native-go/backend/internal/identity/identity_test.go +0 -530
  286. package/dist/templates/native-go/backend/internal/identity/service.go +0 -159
  287. package/dist/templates/native-go/backend/internal/identity/store.go +0 -109
  288. package/dist/templates/native-go/backend/internal/jsonlimits/limits.go +0 -48
  289. package/dist/templates/native-go/backend/internal/jsonlimits/limits_test.go +0 -52
  290. package/dist/templates/native-go/backend/internal/portal/portal.go +0 -138
  291. package/dist/templates/native-go/backend/internal/portal/portal_test.go +0 -89
  292. package/dist/templates/native-go/dsm-package.yaml +0 -71
  293. package/dist/templates/native-go/gitignore +0 -1
  294. package/dist/templates/native-go/i18n/glossary.json +0 -663
  295. package/dist/templates/native-go/i18n/messages/de.json +0 -29
  296. package/dist/templates/native-go/i18n/messages/en.json +0 -29
  297. package/dist/templates/native-go/i18n/messages/es.json +0 -29
  298. package/dist/templates/native-go/i18n/messages/fr.json +0 -29
  299. package/dist/templates/native-go/i18n/messages/it.json +0 -29
  300. package/dist/templates/native-go/i18n/messages/ja.json +0 -29
  301. package/dist/templates/native-go/i18n/messages/ko.json +0 -29
  302. package/dist/templates/native-go/i18n/messages/zh-CN.json +0 -29
  303. package/dist/templates/native-go/i18n/messages/zh-TW.json +0 -29
  304. package/dist/templates/native-go/ui/app.css +0 -45
  305. package/dist/templates/native-go/ui/app.js +0 -111
  306. package/dist/templates/native-go-delegate/DELEGATE.md +0 -263
  307. package/dist/templates/native-go-delegate/backend/cmd/background-worker/main.go +0 -48
  308. package/dist/templates/native-go-delegate/backend/internal/app/delegate.go +0 -25
  309. package/dist/templates/native-go-delegate/backend/internal/app/delegate_on.go +0 -5
  310. package/dist/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +0 -31
  311. package/dist/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +0 -174
  312. package/dist/templates/native-go-delegate/backend/internal/background/delegated.go +0 -277
  313. package/dist/templates/native-go-delegate/backend/internal/background/delegated_moves.go +0 -270
  314. package/dist/templates/native-go-delegate/backend/internal/background/delegated_test.go +0 -34
  315. package/dist/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +0 -410
  316. package/dist/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +0 -15
  317. package/dist/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +0 -95
  318. package/dist/templates/native-go-delegate/backend/internal/delegate/client.go +0 -151
  319. package/dist/templates/native-go-delegate/backend/internal/delegate/client_test.go +0 -214
  320. package/dist/templates/native-go-delegate/backend/internal/delegate/destination.go +0 -110
  321. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state.go +0 -117
  322. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +0 -60
  323. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_test.go +0 -116
  324. package/dist/templates/native-go-delegate/backend/internal/delegate/example.go +0 -81
  325. package/dist/templates/native-go-delegate/backend/internal/delegate/example_test.go +0 -91
  326. package/dist/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +0 -511
  327. package/dist/templates/native-go-delegate/backend/internal/delegate/files.go +0 -132
  328. package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +0 -92
  329. package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +0 -99
  330. package/dist/templates/native-go-delegate/backend/internal/delegate/move.go +0 -348
  331. package/dist/templates/native-go-delegate/backend/internal/delegate/move_test.go +0 -351
  332. package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list.go +0 -65
  333. package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +0 -114
  334. package/dist/templates/native-go-delegate/backend/internal/delegate/retry.go +0 -106
  335. package/dist/templates/native-go-delegate/backend/internal/delegate/retry_test.go +0 -143
  336. package/dist/templates/native-go-delegate/backend/internal/delegate/service.go +0 -364
  337. package/dist/templates/native-go-delegate/backend/internal/delegate/service_test.go +0 -318
  338. package/dist/templates/native-go-delegate/backend/internal/delegate/staging.go +0 -121
  339. package/dist/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +0 -51
  340. package/dist/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +0 -112
  341. package/dist/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +0 -137
  342. package/dist/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +0 -101
  343. package/dist/templates/native-go-delegate/backend/internal/delegate/worker.go +0 -225
  344. package/dist/templates/native-go-delegate/backend/internal/filestation/files.go +0 -43
  345. package/dist/templates/native-go-delegate/backend/internal/filestation/files_test.go +0 -59
  346. package/dist/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +0 -37
  347. package/dist/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +0 -113
  348. package/dist/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +0 -70
  349. package/dist/templates/native-go-delegate/frontend/src/delegate/copy.ts +0 -8
  350. package/dist/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +0 -11
  351. package/dist/templates/native-go-delegate/frontend/test/background-save.test.ts +0 -121
  352. package/dist/templates/native-go-delegate/frontend/test/delegate.test.ts +0 -145
  353. package/dist/templates/native-go-delegate/frontend/test/scope-settings.test.ts +0 -49
  354. package/dist/templates/native-go-delegate/test-frontend.sh +0 -12
  355. package/dist/templates/native-go-delegate/test.sh +0 -18
  356. package/dist/templates/native-go-jobs/BACKGROUND.md +0 -108
  357. package/dist/templates/native-go-jobs/backend/internal/app/background_on.go +0 -7
  358. package/dist/templates/native-go-jobs/backend/internal/app/background_routes_test.go +0 -90
  359. package/dist/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +0 -170
  360. package/dist/templates/native-go-jobs/frontend/src/background/i18n/de.json +0 -75
  361. package/dist/templates/native-go-jobs/frontend/src/background/i18n/en.json +0 -75
  362. package/dist/templates/native-go-jobs/frontend/src/background/i18n/es.json +0 -75
  363. package/dist/templates/native-go-jobs/frontend/src/background/i18n/fr.json +0 -75
  364. package/dist/templates/native-go-jobs/frontend/src/background/i18n/it.json +0 -75
  365. package/dist/templates/native-go-jobs/frontend/src/background/i18n/ja.json +0 -75
  366. package/dist/templates/native-go-jobs/frontend/src/background/i18n/ko.json +0 -75
  367. package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +0 -75
  368. package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +0 -75
  369. package/dist/templates/native-go-jobs/frontend/src/background/i18n.ts +0 -19
  370. package/dist/templates/native-go-jobs/frontend/src/background/picker-provider.ts +0 -12
  371. package/dist/templates/native-go-jobs/frontend/src/background/request-key.ts +0 -5
  372. package/dist/templates/native-go-jobs/frontend/test/background.test.ts +0 -205
  373. package/dist/templates/native-go-root-ops/backend/internal/app/executor.go +0 -140
  374. package/dist/templates/native-go-root-ops/backend/internal/app/executor_test.go +0 -117
  375. package/dist/templates/native-go-root-ops/root/whoami.sh +0 -3
  376. package/dist/templates/native-go-vue/README.md +0 -47
  377. package/dist/templates/native-go-vue/frontend/DESIGN.md +0 -61
  378. package/dist/templates/native-go-vue/frontend/package-lock.json +0 -2530
  379. package/dist/templates/native-go-vue/frontend/package.json +0 -6
  380. package/dist/templates/native-go-vue/frontend/src/App.vue +0 -96
  381. package/dist/templates/native-go-vue/frontend/src/CapabilityPanels.vue +0 -6
  382. package/dist/templates/native-go-vue/frontend/src/context.ts +0 -78
  383. package/dist/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +0 -70
  384. package/dist/templates/native-go-vue/frontend/src/delegate/catalogs.ts +0 -11
  385. package/dist/templates/native-go-vue/frontend/src/delegate/copy.test.ts +0 -12
  386. package/dist/templates/native-go-vue/frontend/src/delegate/copy.ts +0 -4
  387. package/dist/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +0 -23
  388. package/dist/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +0 -24
  389. package/dist/templates/native-go-vue/frontend/src/delegate/facade.test.ts +0 -100
  390. package/dist/templates/native-go-vue/frontend/src/delegate/facade.ts +0 -85
  391. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/de.json +0 -47
  392. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/en.json +0 -47
  393. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/es.json +0 -47
  394. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +0 -47
  395. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/it.json +0 -47
  396. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +0 -47
  397. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +0 -47
  398. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +0 -42
  399. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +0 -42
  400. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +0 -42
  401. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +0 -42
  402. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +0 -42
  403. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +0 -42
  404. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +0 -42
  405. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +0 -42
  406. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +0 -42
  407. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +0 -47
  408. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +0 -47
  409. package/dist/templates/native-go-vue/frontend/src/delegate/long-running.ts +0 -57
  410. package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +0 -12
  411. package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.ts +0 -24
  412. package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +0 -12
  413. package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +0 -21
  414. package/dist/templates/native-go-vue/frontend/src/files/FileBrowser.vue +0 -131
  415. package/dist/templates/native-go-vue/frontend/src/files/FilesPage.vue +0 -35
  416. package/dist/templates/native-go-vue/frontend/src/files/files.test.ts +0 -100
  417. package/dist/templates/native-go-vue/frontend/src/files/provider.test.ts +0 -48
  418. package/dist/templates/native-go-vue/frontend/src/files/transfers.test.ts +0 -27
  419. package/dist/templates/native-go-vue/frontend/src/files/transfers.ts +0 -25
  420. package/dist/templates/native-go-vue/frontend/src/i18n/de.json +0 -20
  421. package/dist/templates/native-go-vue/frontend/src/i18n/en.json +0 -20
  422. package/dist/templates/native-go-vue/frontend/src/i18n/es.json +0 -20
  423. package/dist/templates/native-go-vue/frontend/src/i18n/fr.json +0 -20
  424. package/dist/templates/native-go-vue/frontend/src/i18n/it.json +0 -20
  425. package/dist/templates/native-go-vue/frontend/src/i18n/ja.json +0 -20
  426. package/dist/templates/native-go-vue/frontend/src/i18n/ko.json +0 -20
  427. package/dist/templates/native-go-vue/frontend/src/i18n/zh-CN.json +0 -20
  428. package/dist/templates/native-go-vue/frontend/src/i18n/zh-TW.json +0 -20
  429. package/dist/templates/native-go-vue/frontend/src/i18n.ts +0 -13
  430. package/dist/templates/native-go-vue/frontend/src/identity/DESIGN.md +0 -46
  431. package/dist/templates/native-go-vue/frontend/src/identity/LoginPage.vue +0 -78
  432. package/dist/templates/native-go-vue/frontend/src/identity/i18n/de.json +0 -27
  433. package/dist/templates/native-go-vue/frontend/src/identity/i18n/en.json +0 -27
  434. package/dist/templates/native-go-vue/frontend/src/identity/i18n/es.json +0 -27
  435. package/dist/templates/native-go-vue/frontend/src/identity/i18n/fr.json +0 -27
  436. package/dist/templates/native-go-vue/frontend/src/identity/i18n/it.json +0 -27
  437. package/dist/templates/native-go-vue/frontend/src/identity/i18n/ja.json +0 -27
  438. package/dist/templates/native-go-vue/frontend/src/identity/i18n/ko.json +0 -27
  439. package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +0 -27
  440. package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +0 -27
  441. package/dist/templates/native-go-vue/frontend/src/identity/i18n.ts +0 -14
  442. package/dist/templates/native-go-vue/frontend/src/identity/login.test.ts +0 -32
  443. package/dist/templates/native-go-vue/frontend/src/identity/session.test.ts +0 -33
  444. package/dist/templates/native-go-vue/frontend/src/identity/session.ts +0 -74
  445. package/dist/templates/native-go-vue/frontend/src/main.ts +0 -32
  446. package/dist/templates/native-go-vue/frontend/src/nas/NasPicker.vue +0 -42
  447. package/dist/templates/native-go-vue/frontend/src/nas/contract.ts +0 -12
  448. package/dist/templates/native-go-vue/frontend/src/nas/destination.test.ts +0 -48
  449. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +0 -41
  450. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +0 -41
  451. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +0 -41
  452. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +0 -41
  453. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +0 -41
  454. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +0 -41
  455. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +0 -41
  456. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +0 -41
  457. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +0 -41
  458. package/dist/templates/native-go-vue/frontend/src/nas/i18n.ts +0 -2
  459. package/dist/templates/native-go-vue/frontend/src/nas/locale.ts +0 -24
  460. package/dist/templates/native-go-vue/frontend/src/nas/provider.ts +0 -50
  461. package/dist/templates/native-go-vue/frontend/src/nas/use-request.ts +0 -18
  462. package/dist/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +0 -39
  463. package/dist/templates/native-go-vue/frontend/src/shell/AppShell.vue +0 -48
  464. package/dist/templates/native-go-vue/frontend/src/shell/i18n/de.json +0 -4
  465. package/dist/templates/native-go-vue/frontend/src/shell/i18n/en.json +0 -4
  466. package/dist/templates/native-go-vue/frontend/src/shell/i18n/es.json +0 -4
  467. package/dist/templates/native-go-vue/frontend/src/shell/i18n/fr.json +0 -4
  468. package/dist/templates/native-go-vue/frontend/src/shell/i18n/it.json +0 -4
  469. package/dist/templates/native-go-vue/frontend/src/shell/i18n/ja.json +0 -4
  470. package/dist/templates/native-go-vue/frontend/src/shell/i18n/ko.json +0 -4
  471. package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +0 -4
  472. package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +0 -4
  473. package/dist/templates/native-go-vue/frontend/src/shell/i18n.ts +0 -17
  474. package/dist/templates/native-go-vue/frontend/src/shell/pages.ts +0 -15
  475. package/dist/templates/native-go-vue/frontend/src/style.css +0 -27
  476. package/dist/templates/native-go-vue/frontend/test/apps.test.ts +0 -57
  477. package/dist/templates/native-go-vue/frontend/test/native-controls.test.ts +0 -27
  478. package/dist/templates/native-go-vue/frontend/test/portal-settings.test.ts +0 -71
  479. package/dist/templates/native-go-vue/frontend/test/shell-i18n.test.ts +0 -50
  480. package/dist/templates/native-go-vue/frontend/test/shell-ui.test.ts +0 -20
  481. package/dist/templates/native-go-vue/frontend/test/shell.test.ts +0 -30
  482. package/dist/templates/native-go-vue/frontend/tsconfig.json +0 -1
  483. package/dist/templates/native-go-vue/frontend/vite.config.ts +0 -10
  484. package/dist/templates/native-go-vue/gitignore +0 -2
  485. package/templates/_daemon/fixture_linux_test.go +0 -15
  486. package/templates/_daemon/fixture_other_test.go +0 -7
  487. package/templates/_daemon/go.mod +0 -5
  488. package/templates/_daemon/main.go +0 -611
  489. package/templates/_daemon/main_test.go +0 -315
  490. package/templates/_daemon/process_linux.go +0 -55
  491. package/templates/_daemon/process_linux_test.go +0 -161
  492. package/templates/_daemon/process_other.go +0 -14
  493. package/templates/_daemon/testdata/child.go +0 -44
  494. package/templates/_executor/README.md +0 -318
  495. package/templates/_executor/anchor.go +0 -156
  496. package/templates/_executor/anchor_test.go +0 -161
  497. package/templates/_executor/apppriv_review_test.go +0 -28
  498. package/templates/_executor/auth_presence_review_test.go +0 -38
  499. package/templates/_executor/cancel_contract_test.go +0 -236
  500. package/templates/_executor/cmd/lifecycle/main.go +0 -42
  501. package/templates/_executor/cookie_review_test.go +0 -27
  502. package/templates/_executor/copy.go +0 -64
  503. package/templates/_executor/copy_test.go +0 -88
  504. package/templates/_executor/digest_review_test.go +0 -120
  505. package/templates/_executor/directories.go +0 -40
  506. package/templates/_executor/dsm.go +0 -369
  507. package/templates/_executor/dsm_test.go +0 -290
  508. package/templates/_executor/executor.go +0 -735
  509. package/templates/_executor/executor_test.go +0 -314
  510. package/templates/_executor/go.mod +0 -5
  511. package/templates/_executor/identity.go +0 -74
  512. package/templates/_executor/identity_kernel_linux_test.go +0 -60
  513. package/templates/_executor/identity_linux.go +0 -82
  514. package/templates/_executor/identity_security_test.go +0 -43
  515. package/templates/_executor/internal/lifecycle/lifecycle.go +0 -95
  516. package/templates/_executor/internal/lifecycle/lifecycle_test.go +0 -232
  517. package/templates/_executor/internal/taskscript/boot.sh +0 -31
  518. package/templates/_executor/internal/taskscript/cmd/main.go +0 -19
  519. package/templates/_executor/internal/taskscript/control.sh +0 -31
  520. package/templates/_executor/internal/taskscript/tasks.go +0 -44
  521. package/templates/_executor/json_review_test.go +0 -40
  522. package/templates/_executor/lifecycle_test.go +0 -97
  523. package/templates/_executor/link_linux.go +0 -28
  524. package/templates/_executor/long_running_test.go +0 -530
  525. package/templates/_executor/main.go +0 -576
  526. package/templates/_executor/managed.go +0 -117
  527. package/templates/_executor/managed_test.go +0 -137
  528. package/templates/_executor/move_linux.go +0 -490
  529. package/templates/_executor/move_linux_test.go +0 -460
  530. package/templates/_executor/move_validation.go +0 -46
  531. package/templates/_executor/move_validation_test.go +0 -187
  532. package/templates/_executor/operations.go +0 -926
  533. package/templates/_executor/path_test.go +0 -35
  534. package/templates/_executor/pid.go +0 -37
  535. package/templates/_executor/pid_test.go +0 -113
  536. package/templates/_executor/platform_linux.go +0 -187
  537. package/templates/_executor/platform_linux_test.go +0 -191
  538. package/templates/_executor/platform_other.go +0 -76
  539. package/templates/_executor/process.go +0 -142
  540. package/templates/_executor/purge_log.go +0 -18
  541. package/templates/_executor/records.go +0 -242
  542. package/templates/_executor/scope_cancel_contract_test.go +0 -91
  543. package/templates/_executor/scope_client.go +0 -37
  544. package/templates/_executor/scope_contract.go +0 -12
  545. package/templates/_executor/selected_scope.go +0 -146
  546. package/templates/_executor/selected_scope_test.go +0 -186
  547. package/templates/_executor/socket_linux_test.go +0 -46
  548. package/templates/_executor/status_disabled_test.go +0 -33
  549. package/templates/_executor/store.go +0 -91
  550. package/templates/_executor/supervise.go +0 -109
  551. package/templates/_executor/supervise_test.go +0 -130
  552. package/templates/_executor/task_race_review_test.go +0 -47
  553. package/templates/_executor/tasks.go +0 -320
  554. package/templates/_executor/tasks_dsm71_test.go +0 -114
  555. package/templates/_executor/tasks_review_test.go +0 -43
  556. package/templates/_executor/tasks_test.go +0 -223
  557. package/templates/_executor/testdata/evidence/cleanup.json +0 -24
  558. package/templates/_executor/testdata/evidence/final-smoke.jsonl +0 -9
  559. package/templates/_executor/testdata/evidence/kernel-acl.json +0 -6
  560. package/templates/_executor/testdata/evidence/linux-tests.log +0 -123
  561. package/templates/_executor/testdata/evidence/live.jsonl +0 -23
  562. package/templates/_executor/testdata/evidence/storage.json +0 -90
  563. package/templates/_executor/testdata/evidence/validation.json +0 -55
  564. package/templates/_executor/testdata/live_probe.py +0 -98
  565. package/templates/_executor/upgrade_watch_test.go +0 -244
  566. package/templates/_executor/watch.go +0 -164
  567. package/templates/_executor/watch_test.go +0 -291
  568. package/templates/_executor/write_review_linux_test.go +0 -87
  569. package/templates/_gateway/auth.go +0 -101
  570. package/templates/_gateway/auth_test.go +0 -216
  571. package/templates/_gateway/cgi.go +0 -133
  572. package/templates/_gateway/cgi_test.go +0 -156
  573. package/templates/_gateway/csrf.go +0 -73
  574. package/templates/_gateway/csrf_test.go +0 -155
  575. package/templates/_gateway/directory.go +0 -108
  576. package/templates/_gateway/directory_test.go +0 -202
  577. package/templates/_gateway/gateway.go +0 -412
  578. package/templates/_gateway/gateway_test.go +0 -676
  579. package/templates/_gateway/go.mod +0 -5
  580. package/templates/_gateway/groups.go +0 -66
  581. package/templates/_gateway/main.go +0 -45
  582. package/templates/_shared/AGENTS.md +0 -146
  583. package/templates/_shared/CLAUDE.md +0 -1
  584. package/templates/_shared/GO-LICENSE +0 -27
  585. package/templates/_shared/GO-PATENTS +0 -22
  586. package/templates/_shared/LICENSES/TEMPLATE.txt +0 -21
  587. package/templates/_shared/third-party-notices.mjs +0 -51
  588. package/templates/binary/LICENSES/GO-LICENSE +0 -27
  589. package/templates/binary/LICENSES/GO-PATENTS +0 -22
  590. package/templates/binary/dsm-package.yaml +0 -46
  591. package/templates/binary/example/main.go +0 -16
  592. package/templates/binary/gitignore +0 -2
  593. package/templates/binary/i18n/messages/de.json +0 -4
  594. package/templates/binary/i18n/messages/en.json +0 -4
  595. package/templates/binary/i18n/messages/es.json +0 -4
  596. package/templates/binary/i18n/messages/fr.json +0 -4
  597. package/templates/binary/i18n/messages/it.json +0 -4
  598. package/templates/binary/i18n/messages/ja.json +0 -4
  599. package/templates/binary/i18n/messages/ko.json +0 -4
  600. package/templates/binary/i18n/messages/zh-CN.json +0 -4
  601. package/templates/binary/i18n/messages/zh-TW.json +0 -4
  602. package/templates/binary/ui/app.css +0 -4
  603. package/templates/binary/ui/app.js +0 -32
  604. package/templates/compose/compose.yaml +0 -8
  605. package/templates/compose/synology-app.yaml +0 -16
  606. package/templates/native-authorization/AuthorizationGate.vue +0 -91
  607. package/templates/native-authorization/i18n/de.json +0 -37
  608. package/templates/native-authorization/i18n/en.json +0 -37
  609. package/templates/native-authorization/i18n/es.json +0 -37
  610. package/templates/native-authorization/i18n/fr.json +0 -37
  611. package/templates/native-authorization/i18n/index.ts +0 -15
  612. package/templates/native-authorization/i18n/it.json +0 -37
  613. package/templates/native-authorization/i18n/ja.json +0 -37
  614. package/templates/native-authorization/i18n/ko.json +0 -37
  615. package/templates/native-authorization/i18n/zh-CN.json +0 -37
  616. package/templates/native-authorization/i18n/zh-TW.json +0 -37
  617. package/templates/native-go/README.md +0 -459
  618. package/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +0 -61
  619. package/templates/native-go/backend/cmd/app/main.go +0 -95
  620. package/templates/native-go/backend/cmd/background-worker/main.go +0 -38
  621. package/templates/native-go/backend/go.mod +0 -9
  622. package/templates/native-go/backend/go.sum +0 -4
  623. package/templates/native-go/backend/internal/api/cgi_framing_test.go +0 -32
  624. package/templates/native-go/backend/internal/api/cookie_review_test.go +0 -28
  625. package/templates/native-go/backend/internal/api/deadline_test.go +0 -114
  626. package/templates/native-go/backend/internal/api/dsm-session.go +0 -54
  627. package/templates/native-go/backend/internal/api/dsm-session_test.go +0 -51
  628. package/templates/native-go/backend/internal/api/entry_test.go +0 -47
  629. package/templates/native-go/backend/internal/api/errors.go +0 -47
  630. package/templates/native-go/backend/internal/api/permissions.go +0 -161
  631. package/templates/native-go/backend/internal/api/permissions.json +0 -5
  632. package/templates/native-go/backend/internal/api/permissions_test.go +0 -113
  633. package/templates/native-go/backend/internal/api/policy_fixture_test.go +0 -8
  634. package/templates/native-go/backend/internal/api/registry.go +0 -142
  635. package/templates/native-go/backend/internal/api/registry_test.go +0 -344
  636. package/templates/native-go/backend/internal/api/resource_limits_test.go +0 -87
  637. package/templates/native-go/backend/internal/api/sdk-permissions.json +0 -59
  638. package/templates/native-go/backend/internal/api/sdk_policy_test.go +0 -31
  639. package/templates/native-go/backend/internal/api/server.go +0 -305
  640. package/templates/native-go/backend/internal/api/testdata/permissions-cases.json +0 -172
  641. package/templates/native-go/backend/internal/app/background.go +0 -249
  642. package/templates/native-go/backend/internal/app/background_none.go +0 -8
  643. package/templates/native-go/backend/internal/app/background_owner.go +0 -38
  644. package/templates/native-go/backend/internal/app/background_owner_test.go +0 -163
  645. package/templates/native-go/backend/internal/app/background_schedule.go +0 -69
  646. package/templates/native-go/backend/internal/app/background_schedule_test.go +0 -62
  647. package/templates/native-go/backend/internal/app/background_test.go +0 -320
  648. package/templates/native-go/backend/internal/app/delegate_config.go +0 -57
  649. package/templates/native-go/backend/internal/app/delegate_config_test.go +0 -28
  650. package/templates/native-go/backend/internal/app/delegate_none.go +0 -5
  651. package/templates/native-go/backend/internal/app/identity.go +0 -20
  652. package/templates/native-go/backend/internal/app/identity_test.go +0 -15
  653. package/templates/native-go/backend/internal/app/migrations.go +0 -41
  654. package/templates/native-go/backend/internal/app/migrations_test.go +0 -41
  655. package/templates/native-go/backend/internal/app/portal.go +0 -30
  656. package/templates/native-go/backend/internal/app/portal_test.go +0 -55
  657. package/templates/native-go/backend/internal/app/root_none.go +0 -9
  658. package/templates/native-go/backend/internal/app/routes.go +0 -137
  659. package/templates/native-go/backend/internal/app/routes_test.go +0 -165
  660. package/templates/native-go/backend/internal/app/session_files.go +0 -9
  661. package/templates/native-go/backend/internal/app/session_files_test.go +0 -14
  662. package/templates/native-go/backend/internal/app/shared_folder.go +0 -144
  663. package/templates/native-go/backend/internal/app/shared_folder_test.go +0 -158
  664. package/templates/native-go/backend/internal/background/access.go +0 -57
  665. package/templates/native-go/backend/internal/background/lock_test.go +0 -131
  666. package/templates/native-go/backend/internal/background/owner_test.go +0 -118
  667. package/templates/native-go/backend/internal/background/runner.go +0 -185
  668. package/templates/native-go/backend/internal/background/runner_test.go +0 -209
  669. package/templates/native-go/backend/internal/background/schedule.go +0 -336
  670. package/templates/native-go/backend/internal/background/schedule_test.go +0 -368
  671. package/templates/native-go/backend/internal/background/store.go +0 -825
  672. package/templates/native-go/backend/internal/background/store_test.go +0 -365
  673. package/templates/native-go/backend/internal/datamigrate/migrate.go +0 -191
  674. package/templates/native-go/backend/internal/datamigrate/migrate_test.go +0 -177
  675. package/templates/native-go/backend/internal/dsm/admin.go +0 -76
  676. package/templates/native-go/backend/internal/dsm/admin_linux.go +0 -110
  677. package/templates/native-go/backend/internal/dsm/admin_linux_test.go +0 -105
  678. package/templates/native-go/backend/internal/dsm/admin_other.go +0 -15
  679. package/templates/native-go/backend/internal/dsm/admin_test.go +0 -67
  680. package/templates/native-go/backend/internal/dsm/apppriv.go +0 -30
  681. package/templates/native-go/backend/internal/dsm/auth.go +0 -94
  682. package/templates/native-go/backend/internal/dsm/auth_test.go +0 -159
  683. package/templates/native-go/backend/internal/dsm/bridge_file.go +0 -75
  684. package/templates/native-go/backend/internal/dsm/bridge_file_test.go +0 -57
  685. package/templates/native-go/backend/internal/dsm/entry.go +0 -177
  686. package/templates/native-go/backend/internal/dsm/entry_test.go +0 -315
  687. package/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
  688. package/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
  689. package/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
  690. package/templates/native-go/backend/internal/dsm/native/admin_check.c +0 -28
  691. package/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
  692. package/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
  693. package/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
  694. package/templates/native-go/backend/internal/dsm/native/apppriv_check.c +0 -33
  695. package/templates/native-go/backend/internal/dsm/native/build.sh +0 -18
  696. package/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +0 -400
  697. package/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +0 -501
  698. package/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +0 -5
  699. package/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +0 -21
  700. package/templates/native-go/backend/internal/dsm/native/provenance.json +0 -18
  701. package/templates/native-go/backend/internal/filestation/browse_test.go +0 -67
  702. package/templates/native-go/backend/internal/filestation/check_permission.go +0 -71
  703. package/templates/native-go/backend/internal/filestation/check_permission_test.go +0 -77
  704. package/templates/native-go/backend/internal/filestation/client.go +0 -337
  705. package/templates/native-go/backend/internal/filestation/client_test.go +0 -155
  706. package/templates/native-go/backend/internal/filestation/doc.go +0 -4
  707. package/templates/native-go/backend/internal/filestation/download_dsm71_test.go +0 -82
  708. package/templates/native-go/backend/internal/filestation/http.go +0 -70
  709. package/templates/native-go/backend/internal/filestation/http_test.go +0 -188
  710. package/templates/native-go/backend/internal/filestation/operations_test.go +0 -206
  711. package/templates/native-go/backend/internal/filestation/read_file_test.go +0 -89
  712. package/templates/native-go/backend/internal/filestation/sdk_policy_test.go +0 -39
  713. package/templates/native-go/backend/internal/filestation/service.go +0 -254
  714. package/templates/native-go/backend/internal/filestation/service_test.go +0 -74
  715. package/templates/native-go/backend/internal/filestation/upload_stream.go +0 -76
  716. package/templates/native-go/backend/internal/filestation/upload_stream_test.go +0 -77
  717. package/templates/native-go/backend/internal/filestation/write.go +0 -32
  718. package/templates/native-go/backend/internal/filestation/write_test.go +0 -124
  719. package/templates/native-go/backend/internal/identity/README.md +0 -59
  720. package/templates/native-go/backend/internal/identity/dsm.go +0 -115
  721. package/templates/native-go/backend/internal/identity/http.go +0 -291
  722. package/templates/native-go/backend/internal/identity/identity_test.go +0 -530
  723. package/templates/native-go/backend/internal/identity/service.go +0 -159
  724. package/templates/native-go/backend/internal/identity/store.go +0 -109
  725. package/templates/native-go/backend/internal/jsonlimits/limits.go +0 -48
  726. package/templates/native-go/backend/internal/jsonlimits/limits_test.go +0 -52
  727. package/templates/native-go/backend/internal/portal/portal.go +0 -138
  728. package/templates/native-go/backend/internal/portal/portal_test.go +0 -89
  729. package/templates/native-go/dsm-package.yaml +0 -71
  730. package/templates/native-go/gitignore +0 -1
  731. package/templates/native-go/i18n/glossary.json +0 -663
  732. package/templates/native-go/i18n/messages/de.json +0 -29
  733. package/templates/native-go/i18n/messages/en.json +0 -29
  734. package/templates/native-go/i18n/messages/es.json +0 -29
  735. package/templates/native-go/i18n/messages/fr.json +0 -29
  736. package/templates/native-go/i18n/messages/it.json +0 -29
  737. package/templates/native-go/i18n/messages/ja.json +0 -29
  738. package/templates/native-go/i18n/messages/ko.json +0 -29
  739. package/templates/native-go/i18n/messages/zh-CN.json +0 -29
  740. package/templates/native-go/i18n/messages/zh-TW.json +0 -29
  741. package/templates/native-go/ui/app.css +0 -45
  742. package/templates/native-go/ui/app.js +0 -111
  743. package/templates/native-go-delegate/DELEGATE.md +0 -263
  744. package/templates/native-go-delegate/backend/cmd/background-worker/main.go +0 -48
  745. package/templates/native-go-delegate/backend/internal/app/delegate.go +0 -25
  746. package/templates/native-go-delegate/backend/internal/app/delegate_on.go +0 -5
  747. package/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +0 -31
  748. package/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +0 -174
  749. package/templates/native-go-delegate/backend/internal/background/delegated.go +0 -277
  750. package/templates/native-go-delegate/backend/internal/background/delegated_moves.go +0 -270
  751. package/templates/native-go-delegate/backend/internal/background/delegated_test.go +0 -34
  752. package/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +0 -410
  753. package/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +0 -15
  754. package/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +0 -95
  755. package/templates/native-go-delegate/backend/internal/delegate/client.go +0 -151
  756. package/templates/native-go-delegate/backend/internal/delegate/client_test.go +0 -214
  757. package/templates/native-go-delegate/backend/internal/delegate/destination.go +0 -110
  758. package/templates/native-go-delegate/backend/internal/delegate/destination_state.go +0 -117
  759. package/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +0 -60
  760. package/templates/native-go-delegate/backend/internal/delegate/destination_test.go +0 -116
  761. package/templates/native-go-delegate/backend/internal/delegate/example.go +0 -81
  762. package/templates/native-go-delegate/backend/internal/delegate/example_test.go +0 -91
  763. package/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +0 -511
  764. package/templates/native-go-delegate/backend/internal/delegate/files.go +0 -132
  765. package/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +0 -92
  766. package/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +0 -99
  767. package/templates/native-go-delegate/backend/internal/delegate/move.go +0 -348
  768. package/templates/native-go-delegate/backend/internal/delegate/move_test.go +0 -351
  769. package/templates/native-go-delegate/backend/internal/delegate/operations_list.go +0 -65
  770. package/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +0 -114
  771. package/templates/native-go-delegate/backend/internal/delegate/retry.go +0 -106
  772. package/templates/native-go-delegate/backend/internal/delegate/retry_test.go +0 -143
  773. package/templates/native-go-delegate/backend/internal/delegate/service.go +0 -364
  774. package/templates/native-go-delegate/backend/internal/delegate/service_test.go +0 -318
  775. package/templates/native-go-delegate/backend/internal/delegate/staging.go +0 -121
  776. package/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +0 -51
  777. package/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +0 -112
  778. package/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +0 -137
  779. package/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +0 -101
  780. package/templates/native-go-delegate/backend/internal/delegate/worker.go +0 -225
  781. package/templates/native-go-delegate/backend/internal/filestation/files.go +0 -43
  782. package/templates/native-go-delegate/backend/internal/filestation/files_test.go +0 -59
  783. package/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +0 -37
  784. package/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +0 -113
  785. package/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +0 -70
  786. package/templates/native-go-delegate/frontend/src/delegate/copy.ts +0 -8
  787. package/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +0 -11
  788. package/templates/native-go-delegate/frontend/test/background-save.test.ts +0 -121
  789. package/templates/native-go-delegate/frontend/test/delegate.test.ts +0 -145
  790. package/templates/native-go-delegate/frontend/test/scope-settings.test.ts +0 -49
  791. package/templates/native-go-delegate/test-frontend.sh +0 -12
  792. package/templates/native-go-delegate/test.sh +0 -18
  793. package/templates/native-go-jobs/BACKGROUND.md +0 -108
  794. package/templates/native-go-jobs/backend/internal/app/background_on.go +0 -7
  795. package/templates/native-go-jobs/backend/internal/app/background_routes_test.go +0 -90
  796. package/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +0 -170
  797. package/templates/native-go-jobs/frontend/src/background/i18n/de.json +0 -75
  798. package/templates/native-go-jobs/frontend/src/background/i18n/en.json +0 -75
  799. package/templates/native-go-jobs/frontend/src/background/i18n/es.json +0 -75
  800. package/templates/native-go-jobs/frontend/src/background/i18n/fr.json +0 -75
  801. package/templates/native-go-jobs/frontend/src/background/i18n/it.json +0 -75
  802. package/templates/native-go-jobs/frontend/src/background/i18n/ja.json +0 -75
  803. package/templates/native-go-jobs/frontend/src/background/i18n/ko.json +0 -75
  804. package/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +0 -75
  805. package/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +0 -75
  806. package/templates/native-go-jobs/frontend/src/background/i18n.ts +0 -19
  807. package/templates/native-go-jobs/frontend/src/background/picker-provider.ts +0 -12
  808. package/templates/native-go-jobs/frontend/src/background/request-key.ts +0 -5
  809. package/templates/native-go-jobs/frontend/test/background.test.ts +0 -205
  810. package/templates/native-go-root-ops/backend/internal/app/executor.go +0 -140
  811. package/templates/native-go-root-ops/backend/internal/app/executor_test.go +0 -117
  812. package/templates/native-go-root-ops/root/whoami.sh +0 -3
  813. package/templates/native-go-vue/README.md +0 -47
  814. package/templates/native-go-vue/frontend/DESIGN.md +0 -61
  815. package/templates/native-go-vue/frontend/package-lock.json +0 -2530
  816. package/templates/native-go-vue/frontend/package.json +0 -6
  817. package/templates/native-go-vue/frontend/src/App.vue +0 -96
  818. package/templates/native-go-vue/frontend/src/CapabilityPanels.vue +0 -6
  819. package/templates/native-go-vue/frontend/src/context.ts +0 -78
  820. package/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +0 -70
  821. package/templates/native-go-vue/frontend/src/delegate/catalogs.ts +0 -11
  822. package/templates/native-go-vue/frontend/src/delegate/copy.test.ts +0 -12
  823. package/templates/native-go-vue/frontend/src/delegate/copy.ts +0 -4
  824. package/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +0 -23
  825. package/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +0 -24
  826. package/templates/native-go-vue/frontend/src/delegate/facade.test.ts +0 -100
  827. package/templates/native-go-vue/frontend/src/delegate/facade.ts +0 -85
  828. package/templates/native-go-vue/frontend/src/delegate/i18n/de.json +0 -47
  829. package/templates/native-go-vue/frontend/src/delegate/i18n/en.json +0 -47
  830. package/templates/native-go-vue/frontend/src/delegate/i18n/es.json +0 -47
  831. package/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +0 -47
  832. package/templates/native-go-vue/frontend/src/delegate/i18n/it.json +0 -47
  833. package/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +0 -47
  834. package/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +0 -47
  835. package/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +0 -42
  836. package/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +0 -42
  837. package/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +0 -42
  838. package/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +0 -42
  839. package/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +0 -42
  840. package/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +0 -42
  841. package/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +0 -42
  842. package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +0 -42
  843. package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +0 -42
  844. package/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +0 -47
  845. package/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +0 -47
  846. package/templates/native-go-vue/frontend/src/delegate/long-running.ts +0 -57
  847. package/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +0 -12
  848. package/templates/native-go-vue/frontend/src/delegate/save-copy.ts +0 -24
  849. package/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +0 -12
  850. package/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +0 -21
  851. package/templates/native-go-vue/frontend/src/files/FileBrowser.vue +0 -131
  852. package/templates/native-go-vue/frontend/src/files/FilesPage.vue +0 -35
  853. package/templates/native-go-vue/frontend/src/files/files.test.ts +0 -100
  854. package/templates/native-go-vue/frontend/src/files/provider.test.ts +0 -48
  855. package/templates/native-go-vue/frontend/src/files/transfers.test.ts +0 -27
  856. package/templates/native-go-vue/frontend/src/files/transfers.ts +0 -25
  857. package/templates/native-go-vue/frontend/src/i18n/de.json +0 -20
  858. package/templates/native-go-vue/frontend/src/i18n/en.json +0 -20
  859. package/templates/native-go-vue/frontend/src/i18n/es.json +0 -20
  860. package/templates/native-go-vue/frontend/src/i18n/fr.json +0 -20
  861. package/templates/native-go-vue/frontend/src/i18n/it.json +0 -20
  862. package/templates/native-go-vue/frontend/src/i18n/ja.json +0 -20
  863. package/templates/native-go-vue/frontend/src/i18n/ko.json +0 -20
  864. package/templates/native-go-vue/frontend/src/i18n/zh-CN.json +0 -20
  865. package/templates/native-go-vue/frontend/src/i18n/zh-TW.json +0 -20
  866. package/templates/native-go-vue/frontend/src/i18n.ts +0 -13
  867. package/templates/native-go-vue/frontend/src/identity/DESIGN.md +0 -46
  868. package/templates/native-go-vue/frontend/src/identity/LoginPage.vue +0 -78
  869. package/templates/native-go-vue/frontend/src/identity/i18n/de.json +0 -27
  870. package/templates/native-go-vue/frontend/src/identity/i18n/en.json +0 -27
  871. package/templates/native-go-vue/frontend/src/identity/i18n/es.json +0 -27
  872. package/templates/native-go-vue/frontend/src/identity/i18n/fr.json +0 -27
  873. package/templates/native-go-vue/frontend/src/identity/i18n/it.json +0 -27
  874. package/templates/native-go-vue/frontend/src/identity/i18n/ja.json +0 -27
  875. package/templates/native-go-vue/frontend/src/identity/i18n/ko.json +0 -27
  876. package/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +0 -27
  877. package/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +0 -27
  878. package/templates/native-go-vue/frontend/src/identity/i18n.ts +0 -14
  879. package/templates/native-go-vue/frontend/src/identity/login.test.ts +0 -32
  880. package/templates/native-go-vue/frontend/src/identity/session.test.ts +0 -33
  881. package/templates/native-go-vue/frontend/src/identity/session.ts +0 -74
  882. package/templates/native-go-vue/frontend/src/main.ts +0 -32
  883. package/templates/native-go-vue/frontend/src/nas/NasPicker.vue +0 -42
  884. package/templates/native-go-vue/frontend/src/nas/contract.ts +0 -12
  885. package/templates/native-go-vue/frontend/src/nas/destination.test.ts +0 -48
  886. package/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +0 -41
  887. package/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +0 -41
  888. package/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +0 -41
  889. package/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +0 -41
  890. package/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +0 -41
  891. package/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +0 -41
  892. package/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +0 -41
  893. package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +0 -41
  894. package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +0 -41
  895. package/templates/native-go-vue/frontend/src/nas/i18n.ts +0 -2
  896. package/templates/native-go-vue/frontend/src/nas/locale.ts +0 -24
  897. package/templates/native-go-vue/frontend/src/nas/provider.ts +0 -50
  898. package/templates/native-go-vue/frontend/src/nas/use-request.ts +0 -18
  899. package/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +0 -39
  900. package/templates/native-go-vue/frontend/src/shell/AppShell.vue +0 -48
  901. package/templates/native-go-vue/frontend/src/shell/i18n/de.json +0 -4
  902. package/templates/native-go-vue/frontend/src/shell/i18n/en.json +0 -4
  903. package/templates/native-go-vue/frontend/src/shell/i18n/es.json +0 -4
  904. package/templates/native-go-vue/frontend/src/shell/i18n/fr.json +0 -4
  905. package/templates/native-go-vue/frontend/src/shell/i18n/it.json +0 -4
  906. package/templates/native-go-vue/frontend/src/shell/i18n/ja.json +0 -4
  907. package/templates/native-go-vue/frontend/src/shell/i18n/ko.json +0 -4
  908. package/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +0 -4
  909. package/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +0 -4
  910. package/templates/native-go-vue/frontend/src/shell/i18n.ts +0 -17
  911. package/templates/native-go-vue/frontend/src/shell/pages.ts +0 -15
  912. package/templates/native-go-vue/frontend/src/style.css +0 -27
  913. package/templates/native-go-vue/frontend/test/apps.test.ts +0 -57
  914. package/templates/native-go-vue/frontend/test/native-controls.test.ts +0 -27
  915. package/templates/native-go-vue/frontend/test/portal-settings.test.ts +0 -71
  916. package/templates/native-go-vue/frontend/test/shell-i18n.test.ts +0 -50
  917. package/templates/native-go-vue/frontend/test/shell-ui.test.ts +0 -20
  918. package/templates/native-go-vue/frontend/test/shell.test.ts +0 -30
  919. package/templates/native-go-vue/frontend/tsconfig.json +0 -1
  920. package/templates/native-go-vue/frontend/vite.config.ts +0 -10
  921. package/templates/native-go-vue/gitignore +0 -2
  922. /package/{dist/templates/_daemon → assets/go/daemon}/fixture_linux_test.go +0 -0
  923. /package/{dist/templates/_daemon → assets/go/daemon}/fixture_other_test.go +0 -0
  924. /package/{dist/templates/_daemon → assets/go/daemon}/go.mod +0 -0
  925. /package/{dist/templates/_daemon → assets/go/daemon}/main.go +0 -0
  926. /package/{dist/templates/_daemon → assets/go/daemon}/main_test.go +0 -0
  927. /package/{dist/templates/_daemon → assets/go/daemon}/process_linux.go +0 -0
  928. /package/{dist/templates/_daemon → assets/go/daemon}/process_linux_test.go +0 -0
  929. /package/{dist/templates/_daemon → assets/go/daemon}/process_other.go +0 -0
  930. /package/{dist/templates/_daemon → assets/go/daemon}/testdata/child.go +0 -0
  931. /package/{dist/templates/_gateway → assets/go/gateway}/auth.go +0 -0
  932. /package/{dist/templates/_gateway → assets/go/gateway}/auth_test.go +0 -0
  933. /package/{dist/templates/_gateway → assets/go/gateway}/cgi.go +0 -0
  934. /package/{dist/templates/_gateway → assets/go/gateway}/cgi_test.go +0 -0
  935. /package/{dist/templates/_gateway → assets/go/gateway}/csrf.go +0 -0
  936. /package/{dist/templates/_gateway → assets/go/gateway}/csrf_test.go +0 -0
  937. /package/{dist/templates/_gateway → assets/go/gateway}/directory.go +0 -0
  938. /package/{dist/templates/_gateway → assets/go/gateway}/directory_test.go +0 -0
  939. /package/{dist/templates/_gateway → assets/go/gateway}/gateway.go +0 -0
  940. /package/{dist/templates/_gateway → assets/go/gateway}/gateway_test.go +0 -0
  941. /package/{dist/templates/_gateway → assets/go/gateway}/go.mod +0 -0
  942. /package/{dist/templates/_gateway → assets/go/gateway}/groups.go +0 -0
  943. /package/{dist/templates/_gateway → assets/go/gateway}/main.go +0 -0
  944. /package/{dist/templates/_shared → assets/licenses}/GO-LICENSE +0 -0
  945. /package/{dist/templates/_shared → assets/licenses}/GO-PATENTS +0 -0
  946. /package/{dist/templates/_shared/LICENSES → assets/licenses}/TEMPLATE.txt +0 -0
@@ -1,6 +0,0 @@
1
- {
2
- "name": "native-dsm-vue-app", "private": true, "type": "module",
3
- "scripts": {"build": "vue-tsc --noEmit && vite build", "test": "vitest run"},
4
- "dependencies": {"@lucide/vue": "1.48.0", "@synopackageland/ui": "0.8.1", "vue": "3.5.43"},
5
- "devDependencies": {"@vitejs/plugin-vue": "6.0.9", "vite": "7.3.6", "typescript": "5.9.3", "vue-tsc": "3.3.11", "vitest": "4.1.11", "jsdom": "27.4.0"}
6
- }
@@ -1,96 +0,0 @@
1
- <script setup lang="ts">
2
- import {computed, onMounted, onUnmounted, ref, watch} from 'vue'
3
- import {AppRoot, ConfigProvider, Button, Callout, Form, FormActions, FormItem, SettingsSection, Textarea} from '@synopackageland/ui'
4
- import {uiLocale} from './nas/locale'
5
- import {appCopy} from './i18n'
6
- import type {AppStatus, Context} from './context'
7
- import AppShell from './shell/AppShell.vue'
8
- import CapabilityPanels from './CapabilityPanels.vue'
9
- import FilesPage from './files/FilesPage.vue'
10
- import PortalSettings from './portal/PortalSettings.vue'
11
- import {shellPages, type ShellPage} from './shell/pages'
12
- import {createSession} from './identity/session'
13
- import LoginPage from './identity/LoginPage.vue'
14
- const props = defineProps<{ctx: Context}>()
15
- const login = createSession(props.ctx)
16
- const copy = computed(() => appCopy(props.ctx.locale))
17
- const app = ref<AppStatus>()
18
- const busy = ref(false)
19
- const error = ref('')
20
- const notice = ref('')
21
- const text = ref('')
22
- let disposed = false
23
- let unsubscribe: (() => void) | undefined
24
- // The CLI substitutes this only for a declared package-account background worker.
25
- const backgroundEnabled = (('__BACKGROUND_ENABLED__') as string) === 'true'
26
- const page = ref<ShellPage>('status')
27
- const pages = computed(() => shellPages({background:backgroundEnabled}))
28
- const subtitle = computed(() => app.value ? `${app.value.package} · ${app.value.user} · ${app.value.version}` : undefined)
29
- function message(e: unknown) {
30
- const code = (e as {code?: string})?.code || 'request_failed'
31
- const errors = copy.value.errors as Record<string, string>
32
- return (code !== 'request_failed' && errors[code]) || errors.request_failed!.replace('{code}', code)
33
- }
34
- async function refresh() {
35
- if(disposed || busy.value || (login.enabled.value && !login.subject.value)) return
36
- busy.value = true; error.value = ''
37
- try {
38
- const a = await login.call<AppStatus>('app.status')
39
- if(!disposed) app.value = a
40
- if(a.admin) {const greeting = await login.call<{text:string}>('greeting.get'); if(!disposed) text.value = greeting.text}
41
- } catch(e) {if(!disposed) error.value = message(e)} finally {if(!disposed) busy.value=false}
42
- }
43
- async function save() {
44
- if(disposed || busy.value) return
45
- busy.value = true; error.value='';notice.value=''
46
- try {await login.call('greeting.set',{text:text.value});if(!disposed) notice.value=copy.value.saved}
47
- catch(e) {if(!disposed) error.value=message(e)} finally {if(!disposed) busy.value=false}
48
- }
49
- watch(login.subject, (subject, previous) => {
50
- if(!subject) {app.value=undefined;text.value='';notice.value='';error.value=''}
51
- else if((!previous || previous.user!==subject.user)) void refresh()
52
- })
53
- async function signOut() {
54
- try {await login.logout()} catch(e) {if(!disposed) error.value=message(e)}
55
- }
56
- onMounted(async()=>{
57
- unsubscribe = props.ctx.reopen(()=>{if(!disposed) void refresh()})
58
- await login.start()
59
- if((!login.enabled.value || login.subject.value)) await refresh()
60
- })
61
- onUnmounted(()=>{disposed=true;unsubscribe?.();login.dispose();text.value=''})
62
- </script>
63
-
64
- <template>
65
- <AppRoot modal-scope="app" style="height: 100%">
66
- <ConfigProvider :locale="uiLocale(ctx.locale)">
67
- <p v-if="!login.ready.value" role="status">{{ copy.checking }}</p>
68
- <LoginPage v-else-if="login.enabled.value && !login.subject.value" :session="login" :locale="ctx.locale" />
69
- <AppShell v-else v-model="page" :locale="ctx.locale" :pages="pages" :description="subtitle">
70
- <template #actions><Button variant="secondary" :disabled="busy" @click="refresh">{{ copy.refresh }}</Button><Button v-if="login.enabled.value" variant="secondary" :disabled="busy" @click="signOut">{{ copy.signOut }}</Button></template>
71
- <div class="integration-app" :aria-busy="busy" :aria-label="copy.settings">
72
- <p v-if="busy" role="status">{{ copy.loading }}</p>
73
- <Callout v-if="error" tone="danger" :title="copy.actionRequired"><span role="alert">{{ error }}</span></Callout>
74
- <p v-if="notice" role="status">{{ notice }}</p>
75
- <div data-page="status" v-show="page==='status'">
76
- <SettingsSection :title="copy.statusTitle" :collapsible="false">
77
- <p v-if="app">{{ app.package }} · {{ app.user }} · {{ app.version }}</p>
78
- <p v-else-if="error" role="status">{{ copy.statusError }}</p>
79
- </SettingsSection>
80
- <PortalSettings v-if="ctx.portal && app" :key="app.user" :portal="ctx.portal" />
81
- <SettingsSection v-if="app?.admin" :title="copy.greeting" :collapsible="false">
82
- <Form @submit.prevent="save"><FormItem :label="copy.greeting"><Textarea v-model="text" :disabled="busy" /></FormItem>
83
- <FormActions><Button variant="primary" :disabled="busy || !text.trim()" @click="save">{{ copy.save }}</Button></FormActions>
84
- </Form>
85
- </SettingsSection>
86
- </div>
87
- <CapabilityPanels v-if="app" :key="app.user" :ctx="ctx" :admin="app.admin" />
88
- <FilesPage v-if="page==='status'" :ctx="ctx" />
89
- <div data-page="background" v-show="page==='background'">
90
- <!-- BACKGROUND_PANEL -->
91
- </div>
92
- </div>
93
- </AppShell>
94
- </ConfigProvider>
95
- </AppRoot>
96
- </template>
@@ -1,6 +0,0 @@
1
- <script setup lang="ts">
2
- import type {Context} from './context'
3
- import ExecutorSettings from './delegate/ExecutorSettings.vue'
4
- defineProps<{ctx:Context;admin:boolean}>()
5
- </script>
6
- <template><ExecutorSettings v-if="ctx.executor" :admin="admin" :locale="ctx.locale" /></template>
@@ -1,78 +0,0 @@
1
- export interface HostPlatformSnapshot {
2
- readonly web: boolean
3
- readonly host: 'dsm' | 'standalone-web' | 'unavailable'
4
- readonly dsmStandalone: boolean | null
5
- readonly dsmLanguage: string | null
6
- readonly appLocale: string | null
7
- readonly systemVersion: string | null
8
- readonly fullVersion: string | null
9
- readonly theme: null
10
- }
11
- export type HostTitleResult = {status: 'ok'; target: 'dsm-window' | 'document'} |
12
- {status: 'unsupported' | 'unavailable' | 'invalid-input' | 'failed'}
13
- export type HostRequestResult = {status: 'requested'} |
14
- {status: 'unsupported' | 'unavailable' | 'invalid-input' | 'blocked' | 'failed'}
15
- export type HostURLResult = {status: 'requested'; windowHandleAvailable: boolean} |
16
- {status: 'unsupported' | 'unavailable' | 'invalid-input' | 'failed'}
17
- export type HostEvent = 'window-resize' | 'host-theme-change' | 'host-language-change'
18
- export type HostSubscriptionResult = {status: 'subscribed'; dispose(): void} |
19
- {status: 'unsupported' | 'unavailable' | 'invalid-input' | 'failed'}
20
- export type HostFileNavigationResult = {status: 'requested'; action: 'locate-folder' | 'highlight-file'} |
21
- {status: 'unsupported' | 'unavailable' | 'invalid-input' | 'failed'}
22
- export type HostUnsupportedResult = {status: 'unsupported' | 'unavailable'}
23
- export interface HostAdapter {
24
- platform(): HostPlatformSnapshot
25
- setTitle(title: string): HostTitleResult
26
- activateWindow(): HostRequestResult
27
- requestClose(): HostRequestResult
28
- openApp(appId: string): HostRequestResult
29
- openURL(url: string): HostURLResult
30
- openFileManager(path: string): HostFileNavigationResult
31
- revealFile(path: string): HostFileNavigationResult
32
- openFile(path: string): HostUnsupportedResult
33
- showFileDetails(paths: readonly string[]): HostUnsupportedResult
34
- openAppSetting(): HostUnsupportedResult
35
- subscribe(event: HostEvent, listener: () => void): HostSubscriptionResult
36
- dispose(): void
37
- }
38
- export interface PortalStatus {
39
- state: 'active' | 'inactive' | 'unavailable'
40
- // Set when active: https://<the NAS address in use>/<alias>/
41
- alias?: string
42
- url?: string
43
- // An administrator can set or clear the alias here; otherwise Control Panel or nothing.
44
- canManage: boolean
45
- controlPanel: boolean
46
- defaultAlias: string
47
- }
48
-
49
- // Rejects {code}: portal_alias_invalid, portal_alias_reserved, portal_alias_in_use, admin_required, portal_unavailable.
50
- export interface PortalAccess {
51
- // SDK panel text in DSM's language, keyed like the error codes plus title, link, apply, …
52
- messages: Record<string, string>
53
- status(): Promise<PortalStatus>
54
- apply(alias: string): Promise<PortalStatus>
55
- disable(): Promise<PortalStatus>
56
- openControlPanel(): void
57
- // The SDK's plain panel; Vue apps use portal/PortalSettings.vue instead.
58
- mountPanel(element: HTMLElement): {refresh(): Promise<void>; dispose(): void}
59
- }
60
-
61
- export interface Context {
62
- // Explicit long-running opt-in; bind with createBackgroundSaveFacade and an
63
- // owner-bound App job metadata provider. Legacy downloads use the other panel.
64
- delegate?: import('./delegate/long-running').BackgroundSaveFacade
65
- files?: {endpoint:string;token?:()=>string|undefined}
66
- displayName?: string
67
- executor?: import('./delegate/executor-setup').ExecutorSetup
68
- // DSM's signed-in account. isAdmin only hides or disables administrator
69
- // settings; the backend enforces access with permissions.json and RequireAdmin.
70
- user?: {readonly name: string; readonly isAdmin: boolean}
71
- // DSM Application Portal, present only when dsm-package.yaml declares portal.
72
- portal?: PortalAccess
73
- call<T = unknown>(method: string, params?: Record<string, unknown>): Promise<T>
74
- reopen(fn: () => void): () => void
75
- locale: string
76
- host: HostAdapter
77
- }
78
- export interface AppStatus {package: string; version: string; user: string; admin: boolean}
@@ -1,70 +0,0 @@
1
- <script setup lang="ts">
2
- import {computed,onBeforeUnmount,onMounted,ref} from 'vue'
3
- import {Button,Callout,Form,FormActions,FormItem,Input,Select,SettingsSection} from '@synopackageland/ui'
4
- import type {Context} from '../context'
5
- import type {ScopeSelection} from './long-running'
6
- import {useExecutorSetup,type CapabilityStatus} from './executor-setup'
7
- import {delegateCopy} from './copy'
8
- const props=defineProps<{admin:boolean;locale?:string;ctx?:Pick<Context,'call'>}>()
9
- const emit=defineEmits<{confirmed:[]}>()
10
- const setup=useExecutorSetup(),copy=computed(()=>delegateCopy(props.locale))
11
- const status=ref<CapabilityStatus>(),password=ref(''),busy=ref(false),error=ref(false)
12
- const scope=ref<{scope_mode?:string;preselection?:string;selection?:ScopeSelection|null;mismatch?:boolean}>(),chosen=ref(''),shares=ref<Array<{label:string;value:string}>>([])
13
- const dynamic=computed(()=>scope.value?.scope_mode==='install-selected')
14
- const options=computed(()=>[{label:copy.value.homeScope,value:'home'},...shares.value])
15
- const canConfirm=computed(()=>!dynamic.value||!!chosen.value&&options.value.some(o=>o.value===chosen.value))
16
- const needsScope=computed(()=>dynamic.value&&!scope.value?.selection)
17
- const changed=computed(()=>chosen.value!==scope.value?.selection?.scope)
18
- let disposed=false
19
- async function load(approved?:CapabilityStatus){
20
- const next=approved??await setup.status()
21
- if(disposed)return
22
- status.value=next
23
- if(!props.ctx)return
24
- const detail=await props.ctx.call<NonNullable<typeof scope.value>>('delegate.status')
25
- if(disposed)return
26
- scope.value=detail
27
- if(detail.scope_mode!=='install-selected')return
28
- const all:Array<{label:string;value:string}>=[]
29
- let offset=0
30
- for(let count=0;count<128;count++){
31
- const page=await props.ctx.call<{shares:Array<{name:string;path:string;isdir:boolean}>;total:number;offset:number}>('bg.browse',{offset})
32
- if(disposed)return
33
- if(!Array.isArray(page.shares)||!Number.isSafeInteger(page.total)||page.total<0||!page.shares.length&&offset<page.total)throw {code:'EXECUTOR_PROTOCOL'}
34
- for(const entry of page.shares){if(entry.isdir&&entry.path==='/'+entry.name&&!['home','homes'].includes(entry.name.toLowerCase()))all.push({label:entry.name,value:'shared:'+entry.name})}
35
- offset+=page.shares.length
36
- if(offset>=page.total)break
37
- if(count===127)throw {code:'EXECUTOR_PROTOCOL'}
38
- }
39
- shares.value=all
40
- chosen.value=detail.selection?.scope??detail.preselection??''
41
- }
42
- async function refresh(){if(!props.admin||busy.value)return;busy.value=true;error.value=false;try{await load()}catch{if(!disposed)error.value=true}finally{if(!disposed)busy.value=false}}
43
- async function authorize(){
44
- if(!props.admin||busy.value||!password.value||!canConfirm.value||error.value)return
45
- busy.value=true;error.value=false;const entered=password.value;password.value=''
46
- try{const next=dynamic.value?await setup.authorize(entered,chosen.value):await setup.authorize(entered);await load(next);if(!disposed)emit('confirmed')}
47
- catch{if(!disposed)error.value=true}
48
- finally{if(!disposed)busy.value=false}
49
- }
50
- onMounted(()=>{setup.subscribe?.(next=>{if(!disposed)status.value=next});void refresh()});onBeforeUnmount(()=>{disposed=true;password.value=''})
51
- </script>
52
- <template>
53
- <SettingsSection v-if="admin" :title="copy.setupTitle" :collapsible="false" :aria-busy="busy">
54
- <p>{{ copy.setupHelp }}</p>
55
- <Callout v-if="error" tone="danger" role="alert">{{ copy.setupError }}</Callout>
56
- <p role="status">{{ status?.state==='ready'?(needsScope?copy.scopeNeeds:copy.ready):status?.state==='needs-admin-approval'?copy.needs:copy.blocked }}</p>
57
- <p v-if="status?.reason&&(status.state==='blocked'||status.state==='unsupported')">{{ copy.details }}: {{ status.reason }}</p>
58
- <p v-if="scope?.selection">{{ copy.protectedScope }}: {{ scope.selection.root }}</p>
59
- <Callout v-if="scope?.mismatch" tone="warning">{{ copy.scopeMismatch }} {{ copy.preselection }}: {{ scope.preselection }} · {{ copy.protectedScope }}: {{ scope.selection?.root }}</Callout>
60
- <Form v-if="status?.state==='needs-admin-approval'||status?.retry||dynamic&&status?.state==='ready'" @submit.prevent="authorize">
61
- <template v-if="dynamic">
62
- <p>{{ scope?.selection?copy.scopeChangeHelp:copy.preselectionHelp }}</p>
63
- <FormItem :label="copy.scopeLabel" label-for="delegate-scope"><Select id="delegate-scope" v-model="chosen" :options="options" :disabled="busy||error" /></FormItem>
64
- </template>
65
- <FormItem :label="copy.password" label-for="delegate-password"><Input id="delegate-password" v-model="password" type="password" autocomplete="current-password" :disabled="busy||error" /></FormItem>
66
- <FormActions><Button type="submit" variant="primary" :disabled="busy||error||!password||!canConfirm||dynamic&&!!scope?.selection&&!changed">{{ dynamic?(scope?.selection?copy.confirmScope:copy.confirmShare):copy.authorize }}</Button></FormActions>
67
- </Form>
68
- <Button variant="secondary" :disabled="busy" @click="refresh">{{ copy.refresh }}</Button>
69
- </SettingsSection>
70
- </template>
@@ -1,11 +0,0 @@
1
- import en from './i18n/en.json'
2
- import zhTW from './i18n/zh-TW.json'
3
- import zhCN from './i18n/zh-CN.json'
4
- import ja from './i18n/ja.json'
5
- import ko from './i18n/ko.json'
6
- import de from './i18n/de.json'
7
- import fr from './i18n/fr.json'
8
- import es from './i18n/es.json'
9
- import it from './i18n/it.json'
10
- export type DelegateCopy=typeof en
11
- export const delegateCatalogs:Record<string,DelegateCopy>={en,'zh-TW':zhTW,'zh-CN':zhCN,ja,ko,de,fr,es,it}
@@ -1,12 +0,0 @@
1
- import {expect,test} from 'vitest'
2
- import {delegateCopy} from './copy'
3
- import {saveCopy} from './save-copy'
4
- import zhCN from './i18n/zh-CN.json'
5
- import saveJa from './i18n/save/ja.json'
6
- test('delegate and save copy follow the DSM language across all nine catalogs',()=>{
7
- expect(delegateCopy('chs')).toMatchObject(zhCN)
8
- expect(delegateCopy('zh_CN')).toMatchObject(zhCN)
9
- expect(saveCopy('jpn')).toEqual(saveJa)
10
- expect(delegateCopy('unknown').refresh).toBe('Refresh')
11
- expect(saveCopy().refresh).toBe('Refresh')
12
- })
@@ -1,4 +0,0 @@
1
- import {uiLocale} from '../nas/locale'
2
- import {delegateCatalogs,type DelegateCopy} from './catalogs'
3
- export function delegateCopy(locale='en'){return delegateCatalogs[uiLocale(locale)]!}
4
- export function errorCopy(error:unknown,copy:DelegateCopy){const code=(error as {code?:string})?.code;return ['session_required','AUTH_DENIED'].includes(code??'')?copy.session:['DENIED','SCOPE_DENIED','PERMISSION_DENIED','APP_DENIED','INELIGIBLE','denied'].includes(code??'')?copy.denied:copy.error}
@@ -1,23 +0,0 @@
1
- // @vitest-environment jsdom
2
- import {expect,test} from 'vitest'
3
- import {createApp,h,nextTick} from 'vue'
4
- import {AppRoot} from '@synopackageland/ui'
5
- import ExecutorSettings from './ExecutorSettings.vue'
6
- import {ExecutorSetupKey,type CapabilityStatus} from './executor-setup'
7
- const settle=async()=>{for(let i=0;i<10;i++){await nextTick();await new Promise(r=>setTimeout(r))}}
8
- // t-0237: a wrong password left only "Check status"; a retryable result keeps the form.
9
- test('a retryable blocked approval keeps the password form for another try',async()=>{
10
- const blocked:CapabilityStatus&{retry:boolean}={state:'blocked',reason:'dsm_3121: DSM rejected the administrator password. Nothing was created.',retry:true}
11
- const setup={async status():Promise<CapabilityStatus>{return {state:'needs-admin-approval'}},async authorize(){return blocked},async control(){return blocked}}
12
- const root=document.createElement('div');document.body.append(root)
13
- const app=createApp({render:()=>h(AppRoot,{},()=>h(ExecutorSettings,{admin:true,locale:'en'}))})
14
- app.provide(ExecutorSetupKey,setup)
15
- try{
16
- app.mount(root);await settle()
17
- const input=root.querySelector<HTMLInputElement>('#delegate-password')!
18
- input.value='wrong';input.dispatchEvent(new Event('input'));await settle()
19
- root.querySelector('form')!.dispatchEvent(new Event('submit'));await settle()
20
- expect(root.textContent).toContain('dsm_3121')
21
- expect(root.querySelector('#delegate-password')).not.toBeNull()
22
- }finally{app.unmount();root.remove()}
23
- })
@@ -1,24 +0,0 @@
1
- import {inject,type InjectionKey} from 'vue'
2
- export type CapabilityState='unsupported'|'needs-admin-approval'|'ready'|'blocked'|'incompatible'
3
- // requested: a scope change whose root task may still land; it applied once
4
- // status() reports that scope with a generation above this one.
5
- // retry: approving again may succeed: nothing of this approval is left behind, or
6
- // the approved tasks remain and approving again restarts the executor.
7
- export interface CapabilityStatus {state:CapabilityState;reason?:string;requested?:{scope:string;generation:number};retry?:boolean}
8
- // p2-setup supplies the implementation through app.provide(ExecutorSetupKey, setup).
9
- // Passwords belong only to this call and must never be persisted or logged.
10
- export interface ExecutorSetup {
11
- status():Promise<CapabilityStatus>
12
- authorize(password:string,selectedScope?:string):Promise<CapabilityStatus>
13
- control(action:'start'|'stop'|'purge'):Promise<CapabilityStatus>
14
- // Results of calls made elsewhere (the DSM window panel) on the same access.
15
- subscribe?(listener:(status:CapabilityStatus)=>void):void
16
- }
17
- export const ExecutorSetupKey:InjectionKey<ExecutorSetup>=Symbol('executor-setup')
18
- export function useExecutorSetup():ExecutorSetup {
19
- return inject(ExecutorSetupKey,{
20
- async status(){return {state:'blocked',reason:'setup-unavailable'}},
21
- async authorize(){throw {code:'setup-unavailable'}},
22
- async control(){throw {code:'setup-unavailable'}},
23
- })
24
- }
@@ -1,100 +0,0 @@
1
- import {expect,test,vi} from 'vitest'
2
- import {createBackgroundSaveFacade} from './facade'
3
- test('destination lookup returns protected selection and rejects a grant outside its root',async()=>{
4
- const selection={scope:'shared:reports',root:'/reports',generation:2}
5
- const destination={id:'mine',key:'save',path:'/reports/exports',username:'alice',lifetime:'until-revoked'}
6
- const call=vi.fn(async()=>({key:'save',selection,destination,status:'active'}))
7
- const sdk=createBackgroundSaveFacade({call:call as any})
8
- expect(await sdk.destination('save')).toEqual({key:'save',selection,destination,status:'active'})
9
- expect(call).toHaveBeenCalledExactlyOnceWith('delegate.destination',{key:'save'})
10
- call.mockResolvedValue({key:'save',selection,destination:{...destination,path:'/other'},status:'active'})
11
- await expect(sdk.destination('save')).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
12
- })
13
- const ref={delegation_id:'mine',job_id:'original'}
14
- test('operation cancellation keeps its bounded readable cause through the facade',async()=>{
15
- const call=vi.fn(async()=>({job_id:'original',state:'canceled',code:'OPERATION_CANCELED',reason:'grant-revoked'}))
16
- const sdk=createBackgroundSaveFacade({call:call as any})
17
- expect(await sdk.cancel(ref)).toMatchObject({state:'canceled',reason:'grant-revoked'})
18
- for(const reason of [123, 'x'.repeat(129), 'raw DSM response /path']){
19
- call.mockResolvedValue({...await call(),reason} as any)
20
- await expect(sdk.cancel(ref)).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
21
- }
22
- })
23
- test('a copy cancel acknowledgement passes through unchanged for same-ref polling',async()=>{
24
- const ack={job_id:'original',state:'copying',code:'CANCEL_REQUESTED',reason:'operation-canceled-by-user'}
25
- const call=vi.fn(async()=>ack)
26
- expect(await createBackgroundSaveFacade({call:call as any}).cancel(ref)).toEqual(ack)
27
- expect(call).toHaveBeenCalledWith('delegate.operations.cancel',ref)
28
- })
29
- const grant={delegation_id:'mine',destination:'save',path:'/home/Exports',subject:{username:'normal1',uid:1205},lifetime:'until-revoked',revoked:false}
30
- function fixture(){
31
- const call=vi.fn(async(method:string)=>{
32
- if(method==='delegate.status')return {state:'ready',disabled:false}
33
- if(method==='delegate.list')return {delegations:[grant,{...grant,delegation_id:'revoked',revoked:true},{...grant,delegation_id:'legacy',lifetime:''}]}
34
- if(method==='delegate.operations.get')return {job_id:'original',state:'committed',receipt:{path:'/home/Exports/report.csv',size:4}}
35
- if(method==='delegate.operations.cancel')return {job_id:'original',state:'canceled'}
36
- if(method==='delegate.revoke')return {revoked:true}
37
- if(method==='delegate.disable')return {disabled:true}
38
- if(method==='delegate.enable')return {disabled:false}
39
- if(method==='delegate.select_destination')return {id:'mine',key:'save',path:'/home/Exports',username:'normal1',lifetime:'until-revoked'}
40
- throw {code:'unknown_method'}
41
- })
42
- const jobs=vi.fn(async()=>[{...ref,name:'report.csv'}])
43
- return {call,jobs,sdk:createBackgroundSaveFacade({call:call as any},jobs)}
44
- }
45
- test('W2 list is mapped to active permanent destinations without changing owner or legacy semantics',async()=>{
46
- const {sdk,call}=fixture()
47
- expect(await sdk.list()).toEqual([{id:'mine',key:'save',path:'/home/Exports',username:'normal1',lifetime:'until-revoked'}])
48
- expect(call).toHaveBeenCalledExactlyOnceWith('delegate.list')
49
- await sdk.selectDestination({key:'save',path:'/home/Exports'})
50
- expect(call).toHaveBeenLastCalledWith('delegate.select_destination',{key:'save',path:'/home/Exports'})
51
- })
52
- test('App metadata is joined with protected status by the original two IDs, never a synthetic list route',async()=>{
53
- const {sdk,call,jobs}=fixture()
54
- expect(await sdk.operations()).toEqual([{...ref,name:'report.csv',state:'committed',receipt:{path:'/home/Exports/report.csv',size:4}}])
55
- expect(jobs).toHaveBeenCalledOnce()
56
- expect(call).toHaveBeenCalledExactlyOnceWith('delegate.operations.get',ref)
57
- await sdk.cancel(ref);expect(call).toHaveBeenLastCalledWith('delegate.operations.cancel',ref)
58
- await sdk.revoke({delegation_id:'mine'});expect(call).toHaveBeenLastCalledWith('delegate.revoke',{delegation_id:'mine'})
59
- })
60
- test('missing protected disabled status cannot be reported as enabled',async()=>{
61
- const {sdk,call}=fixture();call.mockResolvedValue({state:'ready'} as any)
62
- await expect(sdk.status()).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
63
- })
64
- test('malformed grant and App metadata references cannot be coerced into valid IDs',async()=>{
65
- const {sdk,call}=fixture()
66
- call.mockResolvedValue({delegations:[{...grant,delegation_id:undefined}]} as any)
67
- await expect(sdk.list()).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
68
- const invalid=createBackgroundSaveFacade({call:call as any},async()=>[{job_id:undefined,delegation_id:'mine',name:'report.csv'}] as any)
69
- await expect(invalid.operations()).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
70
- expect(call).toHaveBeenCalledTimes(1)
71
- })
72
- test('malformed or mismatched operation evidence never becomes Saved',async()=>{
73
- for(const value of [{job_id:'other',state:'committed',receipt:{path:'/home/a',size:1}},{job_id:'original',state:'committed'},{job_id:'original',state:'copying',receipt:{path:'/home/a',size:1}},{job_id:'original',state:'committed',receipt:{path:'/home/a',size:-1}}]){
74
- const {sdk,call}=fixture();call.mockResolvedValue(value as any)
75
- await expect(sdk.operations()).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
76
- }
77
- })
78
- test('read timeout never admits or resubmits an operation',async()=>{
79
- const {sdk,call}=fixture();call.mockRejectedValue({code:'EXECUTOR_TIMEOUT'})
80
- await expect(sdk.operations()).rejects.toMatchObject({code:'EXECUTOR_TIMEOUT'})
81
- expect(call).toHaveBeenCalledExactlyOnceWith('delegate.operations.get',ref)
82
- })
83
- test('disable and enable use authenticated protected routes, not mailbox controls',async()=>{
84
- const {sdk,call}=fixture()
85
- expect(await sdk.status()).toEqual({disabled:false})
86
- expect(await sdk.disable()).toEqual({disabled:true});expect(call).toHaveBeenLastCalledWith('delegate.disable')
87
- expect(await sdk.enable()).toEqual({disabled:false});expect(call).toHaveBeenLastCalledWith('delegate.enable')
88
- call.mockResolvedValue({} as any);await expect(sdk.disable()).rejects.toMatchObject({code:'EXECUTOR_PROTOCOL'})
89
- })
90
- test('the default facade lists backend mirrors but ignores their committed claim until live receipt',async()=>{
91
- const {call}=fixture()
92
- call.mockImplementation(async(method:string)=>{
93
- if(method==='delegate.operations.list')return {operations:[{...ref,name:'report.csv',state:'committed'}]} as any
94
- if(method==='delegate.operations.get')return {job_id:'original',state:'uncertain'} as any
95
- throw {code:'unexpected'}
96
- })
97
- const sdk=createBackgroundSaveFacade({call:call as any})
98
- expect(await sdk.operations()).toEqual([{...ref,name:'report.csv',state:'uncertain'}])
99
- expect(call.mock.calls).toEqual([['delegate.operations.list'],['delegate.operations.get',ref]])
100
- })
@@ -1,85 +0,0 @@
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
- }
@@ -1,47 +0,0 @@
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
- }
@@ -1,47 +0,0 @@
1
- {
2
- "title": "Background file access",
3
- "help": "Downloads continue after you close this app. Each job can write only to the folder you select, for up to one hour. Existing files are never replaced.",
4
- "setupTitle": "Administrator setup",
5
- "setupHelp": "Approve this app once to let it complete file jobs while users are offline.",
6
- "password": "DSM password",
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.",
10
- "ready": "Background file access is ready.",
11
- "needs": "An administrator must approve background file access.",
12
- "blocked": "Background file access is unavailable. Ask an administrator to check the app setup.",
13
- "details": "Details",
14
- "refresh": "Refresh",
15
- "revoke": "Revoke",
16
- "cancel": "Cancel job",
17
- "noDelegations": "You have no active delegations.",
18
- "delegations": "My delegations",
19
- "expires": "Expires",
20
- "downloads": "My downloads",
21
- "noJobs": "You have no download jobs.",
22
- "url": "Download URL",
23
- "name": "File name",
24
- "choose": "Choose folder",
25
- "submit": "Download to my folder",
26
- "destination": "Destination",
27
- "pending": "Job canceled. Revocation is pending; the app will retry.",
28
- "error": "The action could not be completed. Refresh and try again. If it keeps failing, contact your administrator.",
29
- "setupError": "Approval could not be completed. Re-enter your DSM password and try again, or check the app setup.",
30
- "denied": "Access was refused. Check your folder permissions and try again.",
31
- "session": "Sign in to DSM again, then refresh.",
32
- "size": "Downloads are limited to 64 MB and 60 seconds.",
33
- "queued": "Queued",
34
- "running": "Downloading",
35
- "succeeded": "Saved",
36
- "failed": "Failed",
37
- "canceled": "Canceled",
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"
47
- }