@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,42 +0,0 @@
1
- {
2
- "title": "背景存檔",
3
- "help": "登出後,App 仍可將完整檔案存入你選取的資料夾,直到你撤銷授權。既有檔案一律不會被取代。",
4
- "selection": "允許此 App 在你登出後繼續儲存到這裡,直到你撤銷授權。",
5
- "delegations": "我的目的地",
6
- "operations": "我的存檔",
7
- "empty": "目前沒有有效目的地。",
8
- "noOperations": "目前沒有存檔工作。",
9
- "revoke": "撤銷授權",
10
- "choose": "選擇存檔目的地",
11
- "needs": "管理員必須先核准背景存取,你才能選擇存檔目的地。",
12
- "cancel": "取消存檔",
13
- "refresh": "重新整理",
14
- "disable": "停用背景存檔",
15
- "enable": "啟用背景存檔",
16
- "disableHelp": "停用會撤銷此 App 的所有目的地授權,並取消待完成的存檔。已儲存的檔案會保留。",
17
- "disabled": "背景存檔已停用。管理員可重新啟用,之後你須重新選取目的地。",
18
- "enabled": "背景存檔已啟用。",
19
- "revoked": "授權已撤銷。已儲存的檔案會保留。",
20
- "untilRevoked": "直到撤銷授權",
21
- "queued": "等待中",
22
- "copying": "存檔中",
23
- "committed": "已儲存",
24
- "canceled": "已取消",
25
- "canceling": "取消中",
26
- "interrupted": "已中斷",
27
- "uncertain": "結果不明",
28
- "uncertainHelp": "結果不明。請先檢查原工作與目的地,再決定後續操作。App 不會自動重新儲存。",
29
- "interruptedHelp": "存檔已中斷。請檢查目的地;App 不會自動重試。",
30
- "loading": "正在載入目的地與存檔…",
31
- "denied": "存取遭拒。請檢查資料夾權限,再重新選取目的地。",
32
- "session": "請重新登入 DSM,再重新整理。",
33
- "conflict": "已存在同名檔案。請檢查目的地,並為新工作選擇另一個名稱。",
34
- "space": "空間不足。請檢查目的地,再開始新工作。",
35
- "error": "無法確認操作結果。請重新整理查詢目前結果,再決定後續操作。",
36
- "scope": "已確認的儲存範圍",
37
- "scopeNeeds": "管理員必須先在「管理員設定」確認安裝時的預選,你才能選擇目的地。",
38
- "scopeMismatch": "安裝時的預選與已確認範圍不同。儲存會依已確認範圍執行:",
39
- "reselect": "儲存範圍已更換,或授權已被撤銷。請重新選擇目的地。先前儲存的檔案會保留。",
40
- "example": "儲存範例檔案",
41
- "exampleHelp": "將小型範例檔案儲存到有效目的地。App 先在私有空間產生檔案,再以你自己的權限儲存。結果請在「我的存檔」查看。"
42
- }
@@ -1,47 +0,0 @@
1
- {
2
- "title": "后台文件访问",
3
- "help": "关闭 App 后下载仍会继续。每项任务只能在一小时内写入所选的文件夹,现有文件绝不会被替换。",
4
- "setupTitle": "管理员设置",
5
- "setupHelp": "批准一次,让 App 在用户离线时也能完成文件任务。",
6
- "password": "DSM 密码",
7
- "authorize": "批准后台文件访问",
8
- "confirmShare": "确认共享文件夹",
9
- "scopeNeeds": "共享文件夹尚待确认。请在下方选择共享文件夹,并输入 DSM 密码确认。",
10
- "ready": "后台文件访问已就绪。",
11
- "needs": "需要管理员批准后台文件访问。",
12
- "blocked": "后台文件访问不可用,请管理员检查 App 设置。",
13
- "details": "详情",
14
- "refresh": "刷新",
15
- "revoke": "撤销",
16
- "cancel": "取消任务",
17
- "noDelegations": "目前没有有效委托。",
18
- "delegations": "我的委托",
19
- "expires": "到期时间",
20
- "downloads": "我的下载",
21
- "noJobs": "目前没有下载任务。",
22
- "url": "下载网址",
23
- "name": "文件名",
24
- "choose": "选择文件夹",
25
- "submit": "下载到我的文件夹",
26
- "destination": "目标文件夹",
27
- "pending": "任务已取消。委托撤销尚未完成,App 将自动重试。",
28
- "error": "操作未完成,请刷新后重试。若持续失败,请联系管理员。",
29
- "setupError": "批准未完成,请重新输入 DSM 密码后重试,或检查 App 设置。",
30
- "denied": "访问被拒绝,请检查文件夹权限后重试。",
31
- "session": "请重新登录 DSM,然后刷新。",
32
- "size": "下载上限为 64 MB、60 秒。",
33
- "queued": "等待中",
34
- "running": "下载中",
35
- "succeeded": "已保存",
36
- "failed": "失败",
37
- "canceled": "已取消",
38
- "interrupted": "已中断",
39
- "homeScope": "各用户的 home 文件夹",
40
- "scopeLabel": "后台保存范围",
41
- "protectedScope": "已确认范围",
42
- "preselection": "安装时的预选",
43
- "preselectionHelp": "安装时的预选仅供参考。启用后台访问时,请用 DSM 密码确认此范围。",
44
- "scopeMismatch": "安装时的预选与已确认范围不同。后台保存将按已确认范围执行。",
45
- "scopeChangeHelp": "更改范围会撤销现有目标,并取消待完成的保存。用户必须重新选择目标。已保存的文件会保留。",
46
- "confirmScope": "确认更改范围"
47
- }
@@ -1,47 +0,0 @@
1
- {
2
- "title": "背景檔案存取",
3
- "help": "關閉 App 後下載仍會繼續。每項工作只能在一小時內寫入所選的資料夾,既有檔案一律不會被取代。",
4
- "setupTitle": "管理員設定",
5
- "setupHelp": "核准一次,讓 App 在使用者離線時也能完成檔案工作。",
6
- "password": "DSM 密碼",
7
- "authorize": "核准背景檔案存取",
8
- "confirmShare": "確認共用資料夾",
9
- "scopeNeeds": "共用資料夾尚待確認。請在下方選擇共用資料夾,並輸入 DSM 密碼確認。",
10
- "ready": "背景檔案存取已就緒。",
11
- "needs": "需要管理員核准背景檔案存取。",
12
- "blocked": "背景檔案存取無法使用,請管理員檢查 App 設定。",
13
- "details": "詳情",
14
- "refresh": "重新整理",
15
- "revoke": "撤銷",
16
- "cancel": "取消工作",
17
- "noDelegations": "目前沒有有效委託。",
18
- "delegations": "我的委託",
19
- "expires": "到期時間",
20
- "downloads": "我的下載",
21
- "noJobs": "目前沒有下載工作。",
22
- "url": "下載網址",
23
- "name": "檔案名稱",
24
- "choose": "選擇資料夾",
25
- "submit": "下載到我的資料夾",
26
- "destination": "目的資料夾",
27
- "pending": "工作已取消。委託尚未撤銷完成,App 會自動重試。",
28
- "error": "操作未完成,請重新整理後再試。若持續失敗,請聯絡管理員。",
29
- "setupError": "核准未完成,請重新輸入 DSM 密碼再試,或檢查 App 設定。",
30
- "denied": "存取遭拒,請檢查資料夾權限後再試。",
31
- "session": "請重新登入 DSM,再重新整理。",
32
- "size": "下載上限為 64 MB、60 秒。",
33
- "queued": "等待中",
34
- "running": "下載中",
35
- "succeeded": "已儲存",
36
- "failed": "失敗",
37
- "canceled": "已取消",
38
- "interrupted": "已中斷",
39
- "homeScope": "各使用者的 home 資料夾",
40
- "scopeLabel": "背景儲存範圍",
41
- "protectedScope": "已確認範圍",
42
- "preselection": "安裝時的預選",
43
- "preselectionHelp": "安裝時的預選只供參考。啟用背景存取時,請以 DSM 密碼確認這個範圍。",
44
- "scopeMismatch": "安裝時的預選與已確認範圍不同。背景儲存會依已確認範圍執行。",
45
- "scopeChangeHelp": "更換範圍會撤銷既有目的地,並取消待完成的儲存。使用者必須重新選擇目的地。已儲存的檔案會保留。",
46
- "confirmScope": "確認更換範圍"
47
- }
@@ -1,57 +0,0 @@
1
- // Portable copies of the frozen W1 DTOs in src/runtime/delegate-contract.ts.
2
- // The generated frontend cannot import CLI source. Contract tests check parity.
3
- export interface SelectDestination {key:string;path:string}
4
- // The executor supplies selection; installation draft is display-only.
5
- export interface ScopeSelection {scope:string;root:string;generation:number}
6
- export interface DestinationState {
7
- key:string
8
- selection:ScopeSelection|null
9
- destination:DestinationGrant|null
10
- status:'active'|'missing'|'reselection-required'|'needs-scope-confirmation'|'disabled'
11
- }
12
- export interface DestinationGrant {
13
- id:string
14
- key:string
15
- path:string
16
- username:string
17
- lifetime:'until-revoked'
18
- }
19
- export type DelegateOperationState='queued'|'copying'|'committed'|'canceled'|'interrupted'|'uncertain'
20
- export interface OperationRef {delegation_id:string;job_id:string}
21
- export interface OperationResult {
22
- job_id:string
23
- state:DelegateOperationState
24
- receipt?:{path:string;size:number}
25
- code?:string
26
- reason?:string
27
- }
28
- export interface MoveFromStaging {
29
- delegation_id:string
30
- job_id:string
31
- staging:string
32
- name:string
33
- size:number
34
- }
35
- // Display metadata comes from App-owned jobs; only OperationResult is executor evidence.
36
- export interface SaveOperation extends OperationResult,OperationRef {name:string}
37
- // createBackgroundSaveFacade binds these methods to W2 and App-owned metadata.
38
- // No method accepts an owner/UID selector.
39
- export interface BackgroundSaveStatus {disabled:boolean;selection?:ScopeSelection|null;scopeMode?:string;preselection?:string;mismatch?:boolean}
40
- export interface DestinationSelection {
41
- key:string
42
- selectDestination(input:SelectDestination):Promise<DestinationGrant>
43
- }
44
- export interface BackgroundSaveFacade {
45
- destination(key:string):Promise<DestinationState>
46
- exportExample(input:{key:string;job_id:string}):Promise<OperationRef>
47
- selectDestination(input:SelectDestination):Promise<DestinationGrant>
48
- status():Promise<BackgroundSaveStatus>
49
- list():Promise<DestinationGrant[]>
50
- operations():Promise<SaveOperation[]>
51
- revoke(input:{delegation_id:string}):Promise<{revoked:true}>
52
- // Same-ref and idempotent. copying+CANCEL_REQUESTED is an accepted cancel, not
53
- // completion: poll operations() until canceled, or committed if publish won.
54
- cancel(input:OperationRef):Promise<OperationResult>
55
- disable():Promise<{disabled:true}>
56
- enable():Promise<{disabled:false}>
57
- }
@@ -1,12 +0,0 @@
1
- import {expect,test} from 'vitest'
2
- import {saveCopy,saveError} from './save-copy'
3
- test('formal executor refusals explain destination and identity recovery in every locale',()=>{
4
- for(const locale of ['en','zh-TW','zh-CN','ja','ko','de','fr','es','it']){
5
- const copy=saveCopy(locale)
6
- expect(saveError({code:'destination-exists'},copy)).toBe(copy.conflict)
7
- expect(saveError({code:'DELEGATION_DENIED'},copy)).toBe(copy.denied)
8
- expect(saveError({code:'IDENTITY_CHANGED'},copy)).toBe(copy.denied)
9
- expect(saveError({code:'NO_SPACE'},copy)).toBe(copy.space)
10
- expect(saveError({code:'EXECUTOR_TIMEOUT'},copy)).toBe(copy.error)
11
- }
12
- })
@@ -1,24 +0,0 @@
1
- // Background-save copy is separate from the legacy download copy in ./i18n.
2
- import {uiLocale} from '../nas/locale'
3
- import en from './i18n/save/en.json'
4
- import zhTW from './i18n/save/zh-TW.json'
5
- import zhCN from './i18n/save/zh-CN.json'
6
- import ja from './i18n/save/ja.json'
7
- import ko from './i18n/save/ko.json'
8
- import de from './i18n/save/de.json'
9
- import fr from './i18n/save/fr.json'
10
- import es from './i18n/save/es.json'
11
- import it from './i18n/save/it.json'
12
- const catalogs:Record<string,typeof en>={en,'zh-TW':zhTW,'zh-CN':zhCN,ja,ko,de,fr,es,it}
13
- export function saveCopy(locale='en'){return catalogs[uiLocale(locale)]!}
14
- export function saveError(error:unknown,copy=saveCopy()){
15
- const code=(error as {code?:string})?.code
16
- if(code==='disabled')return copy.disabled
17
- if(['EXECUTOR_UNAVAILABLE','needs-admin-approval','needs-scope-confirmation'].includes(code??''))return copy.needs
18
- if(['session_required','dsm_session_required','AUTH_DENIED'].includes(code??''))return copy.session
19
- if(['DENIED','DELEGATION_DENIED','IDENTITY_CHANGED','PERMISSION_DENIED','SCOPE_DENIED','APP_DENIED','INELIGIBLE','DESTINATION_CHANGED','denied','grant-revoked','identity-changed','permission-changed'].includes(code??''))return copy.denied
20
- if(['CONFLICT','conflict','file-exists','destination-exists'].includes(code??''))return copy.conflict
21
- if(['NO_SPACE','ENOSPC','no-space'].includes(code??''))return copy.space
22
- if(['uncertain','commit-uncertain'].includes(code??''))return copy.uncertainHelp
23
- return copy.error
24
- }
@@ -1,12 +0,0 @@
1
- import {expect,test,vi} from 'vitest'
2
- import {scopedPicker} from './scoped-picker'
3
- import type {NasProvider} from '../nas/contract'
4
- test('the picker exposes only the confirmed root and refuses traversal before contacting DSM',async()=>{
5
- const entry={name:'reports',path:'/reports',isDir:true},signal=new AbortController().signal
6
- const source={info:vi.fn(async()=>entry),shares:vi.fn(),list:vi.fn(async()=>({entries:[entry],offset:0,total:1})),createFolder:vi.fn(),dispose:vi.fn()} as NasProvider
7
- const picker=scopedPicker(source,'/reports')
8
- expect((await picker.shares(0,signal)).entries).toEqual([entry]);expect(source.shares).not.toHaveBeenCalled()
9
- for(const path of ['/reports2','/reports/../other','/other'])await expect(picker.list(path,{},signal)).rejects.toMatchObject({code:'SCOPE_DENIED'})
10
- expect(source.list).not.toHaveBeenCalled();await picker.list('/reports',{},signal);expect(source.list).toHaveBeenCalledOnce()
11
- picker.dispose();expect(source.dispose).not.toHaveBeenCalled()
12
- })
@@ -1,21 +0,0 @@
1
- import type {NasProvider} from '../nas/contract'
2
- /** A UX bound only; the executor independently enforces its protected scope. */
3
- export function scopedPicker(source:NasProvider,root:string):NasProvider{
4
- const check=(path:string)=>{
5
- if(!root||!(path===root||path.startsWith(root+'/'))||path.includes('\\')||path.slice(1).split('/').some(p=>!p||p==='.'||p==='..'))throw {code:'SCOPE_DENIED'}
6
- }
7
- return {
8
- async shares(offset,signal){
9
- check(root)
10
- if(offset!==0)return {entries:[],offset,total:1}
11
- const entry=await source.info(root,signal)
12
- if(entry.path!==root||!entry.isDir)throw {code:'SCOPE_DENIED'}
13
- return {entries:[entry],offset:0,total:1}
14
- },
15
- async list(path,options,signal){check(path);const page=await source.list(path,options,signal);page.entries.forEach(e=>check(e.path));return page},
16
- async info(path,signal){check(path);const entry=await source.info(path,signal);check(entry.path);return entry},
17
- async createFolder(parent,name,signal){check(parent);check(parent+'/'+name);return source.createFolder(parent,name,signal)},
18
- // The parent owns the shared session provider; closing a picker must not dispose it.
19
- dispose(){},
20
- }
21
- }
@@ -1,131 +0,0 @@
1
- <script setup lang="ts">
2
- import {computed,onBeforeUnmount,onMounted,ref} from 'vue'
3
- import {Button,Callout,DataGrid,TreeView,FilePicker,type DataGridSort,type TreeNode} from '@synopackageland/ui'
4
- import {Folder,File} from '@lucide/vue'
5
- import type {NasEntry,NasProvider} from '../nas/contract'
6
- import {nasCopy,nasErrorCopy} from '../nas/locale'
7
- import {format} from '../nas/i18n'
8
- import {useNasRequest} from '../nas/use-request'
9
- const props=withDefaults(defineProps<{provider:NasProvider;locale:string;mode?:'folder'|'file';transfers?:boolean}>(),{mode:'file',transfers:false})
10
- const emit=defineEmits<{selected:[path:string|undefined]}>()
11
- const copy=computed(()=>nasCopy(props.locale))
12
- const request=useNasRequest(),{busy,error}=request
13
- const entries=ref<NasEntry[]>([]),roots=ref<TreeNode[]>([]),trail=ref<NasEntry[]>([]),chosen=ref<NasEntry>(),next=ref<number>()
14
- const expanded=ref<string[]>([]),treeSelection=ref<string>()
15
- const sort=ref<DataGridSort>({key:'name',direction:'asc'}),generation=ref(0)
16
- const uploads=ref<globalThis.File[]>([]),uploadDone=ref(false)
17
- let life=new AbortController()
18
- async function download(){
19
- const selected=chosen.value
20
- if(!selected||selected.isDir||!props.provider.download)return
21
- await request.run(async signal=>{await props.provider.info(selected.path,signal);props.provider.download!(selected.path);return true})
22
- }
23
- async function upload(){
24
- const parent=trail.value.at(-1)?.path,file=uploads.value[0]
25
- if(!parent||!file||!props.provider.upload)return
26
- uploadDone.value=false
27
- const done=await request.run(async signal=>{await props.provider.upload!(parent,file,signal);return true})
28
- if(done){uploads.value=[];await browse(trail.value);uploadDone.value=true}
29
- }
30
-
31
- const columns=computed(()=>[
32
- {key:'name',label:copy.value.nameColumn,sortable:true},
33
- {key:'kind',label:copy.value.kindColumn},
34
- {key:'bytes',label:copy.value.sizeColumn,align:'right' as const,sortable:true},
35
- {key:'selection',label:copy.value.selectAction},
36
- ])
37
- function node(entry:NasEntry):TreeNode{return {id:entry.path,label:entry.name,icon:Folder,data:entry}}
38
- function select(entry?:NasEntry){chosen.value=entry;emit('selected',entry?.path)}
39
- function findTrail(nodes:TreeNode[],id:string,parents:NasEntry[]=[]):NasEntry[]|undefined{
40
- for(const n of nodes){const path=[...parents,n.data as NasEntry];if(n.id===id)return path;const found=findTrail(n.children??[],id,path);if(found)return found}
41
- }
42
- async function loadChildren(parent:TreeNode):Promise<TreeNode[]|undefined>{
43
- const version=generation.value,signal=life.signal
44
- try{
45
- const children:TreeNode[]=[]
46
- let offset:number|undefined=0
47
- while(offset!==undefined){
48
- const page=await props.provider.list(parent.id,{offset,sortBy:'name',sortDirection:'ASC'},signal)
49
- if(signal.aborted||version!==generation.value)return undefined
50
- children.push(...page.entries.filter(e=>e.isDir).map(node));offset=page.nextOffset
51
- }
52
- return children
53
- }catch(e){if(!signal.aborted&&version===generation.value){error.value=e;select()};return undefined}
54
- }
55
- async function browse(target:NasEntry[],more=false){
56
- if(busy.value)return
57
- select();entries.value=more?entries.value:[];next.value=more?next.value:undefined
58
- const offset=more?next.value??0:0,path=target.at(-1)?.path
59
- trail.value=target
60
- const page=await request.run(signal=>path
61
- ?props.provider.list(path,{offset,sortBy:sort.value.key as 'name'|'size',sortDirection:sort.value.direction==='asc'?'ASC':'DESC'},signal)
62
- :props.provider.shares(offset,signal))
63
- if(page){
64
- entries.value=more?[...entries.value,...page.entries]:page.entries;next.value=page.nextOffset
65
- if(!path)roots.value=entries.value.filter(e=>e.isDir).map(node)
66
- }
67
- }
68
- function open(entry:NasEntry){void browse([...trail.value,entry])}
69
- function sortChanged(value:DataGridSort|null){sort.value={key:value?.key==='bytes'?'size':'name',direction:value?.direction??'asc'};void browse(trail.value)}
70
- function refresh(){
71
- if(busy.value)return
72
- generation.value++;life.abort();life=new AbortController();roots.value=[];expanded.value=[];treeSelection.value=undefined
73
- void browse([])
74
- }
75
- onMounted(()=>void browse([]))
76
- onBeforeUnmount(()=>{generation.value++;life.abort()})
77
- </script>
78
- <template>
79
- <section class="file-browser" :aria-busy="busy" :aria-label="copy.title">
80
- <p>{{ copy.ownPermissions }}</p>
81
- <nav class="file-toolbar" :aria-label="copy.directoryKind">
82
- <Button variant="secondary" :disabled="busy" @click="refresh">{{ copy.refresh }}</Button>
83
- <Button v-if="trail.length" variant="secondary" :disabled="busy" @click="browse(trail.slice(0,-1))">{{ copy.back }}</Button>
84
- <Button variant="secondary" :disabled="busy" @click="browse([])">{{ copy.roots }}</Button>
85
- <Button v-for="(part,index) in trail" :key="part.path" variant="secondary" :disabled="busy" @click="browse(trail.slice(0,index+1))">{{ part.name }}</Button>
86
- </nav>
87
- <div v-if="transfers&&provider.upload&&trail.length" class="file-toolbar">
88
- <FilePicker v-model="uploads" variant="compact" :disabled="busy" :max-files="1" :max-size="16*1024**3" :title="copy.upload" @rejected="error={code:'upload_size_required'}" />
89
- <Button variant="primary" :disabled="busy||!uploads.length" @click="upload">{{ copy.upload }}</Button>
90
- </div>
91
- <p v-if="uploadDone" role="status">{{ copy.uploaded }}</p>
92
- <Button v-if="transfers&&provider.download&&chosen&&!chosen.isDir&&!error" variant="secondary" :disabled="busy" @click="download">{{ copy.download }}</Button>
93
- <Callout v-if="error" tone="danger"><span role="alert">{{ nasErrorCopy(error,copy) }}</span></Callout>
94
- <p v-if="busy" role="status">{{ copy.loading }}</p>
95
- <div class="file-columns">
96
- <aside class="file-tree" :aria-label="copy.roots">
97
- <TreeView v-if="roots.length" :key="generation" v-model="treeSelection" v-model:nodes="roots" v-model:expanded="expanded" :load-children="loadChildren" :expand-label="(n,expanded)=>format(expanded?copy.collapse:copy.expand,n.label)" @select="n=>browse(findTrail(roots,n.id)??[n.data as NasEntry])" />
98
- </aside>
99
- <div class="file-content">
100
- <DataGrid v-if="!error" :columns="columns" :rows="entries.map(e=>({...e,kind:e.isDir?copy.directoryKind:copy.fileKind}))" row-key="path" :footer="false" :resizable="false" :local-sort="false" :local-pagination="false" :loading="busy" :loading-text="copy.loading" :sort="{key:sort.key==='size'?'bytes':sort.key,direction:sort.direction}" :labels="{empty:copy.emptyFolder}" @update:sort="sortChanged">
101
- <template #cell-name="{row}">
102
- <Button v-if="row.isDir" variant="secondary" :disabled="busy" :aria-label="format(copy.open,String(row.name))" @click="open(entries.find(e=>e.path===row.path)!)"><Folder :size="16" aria-hidden="true" />{{ row.name }}</Button>
103
- <span v-else class="file-name"><File :size="16" aria-hidden="true" />{{ row.name }}</span>
104
- </template>
105
- <template #cell-bytes="{row}"><span class="file-bytes">{{ row.isDir?'—':row.bytes??'—' }}</span></template>
106
- <template #cell-selection="{row}">
107
- <Button v-if="mode==='folder'?row.isDir:!row.isDir" variant="secondary" :disabled="busy" :aria-pressed="chosen?.path===row.path" :aria-label="format(copy.select,String(row.name))" @click="select(entries.find(e=>e.path===row.path))">{{ copy.selectAction }}</Button>
108
- </template>
109
- </DataGrid>
110
- <Button v-if="next!==undefined&&!error" variant="secondary" :disabled="busy" @click="browse(trail,true)">{{ copy.loadMore }}</Button>
111
- <Button v-if="mode==='folder'&&trail.length&&!error" variant="secondary" :disabled="busy" @click="select(trail.at(-1))">{{ format(copy.select,trail.at(-1)!.name) }}</Button>
112
- </div>
113
- </div>
114
- <p v-if="chosen&&!error" class="file-selection" role="status">{{ format(copy.selected,chosen.path) }}</p>
115
- </section>
116
- </template>
117
- <style scoped>
118
- .file-browser { min-width: 0; color: var(--ui-text); }
119
- .file-toolbar { display: flex; flex-wrap: wrap; gap: var(--ui-space-2, 8px); margin-block: var(--ui-space-3, 12px); }
120
- .file-columns { display: grid; grid-template-columns: minmax(140px, 1fr) minmax(0, 3fr); gap: var(--ui-space-3, 12px); }
121
- .file-tree { min-width: 0; max-height: 55vh; overflow: auto; border-inline-end: 1px solid var(--ui-border); }
122
- .file-content { min-width: 0; overflow: auto; }
123
- .file-name { display: inline-flex; align-items: center; gap: var(--ui-space-2, 8px); overflow-wrap: anywhere; }
124
- .file-bytes { font-variant-numeric: tabular-nums; }
125
- .file-selection { overflow-wrap: anywhere; }
126
- @media (max-width: 600px) {
127
- .file-columns { grid-template-columns: minmax(0, 1fr); }
128
- .file-content :deep(th:nth-child(2)), .file-content :deep(td:nth-child(2)), .file-content :deep(th:nth-child(3)), .file-content :deep(td:nth-child(3)) { display: none; }
129
- .file-tree { max-height: 180px; border-inline-end: 0; border-bottom: 1px solid var(--ui-border); }
130
- }
131
- </style>
@@ -1,35 +0,0 @@
1
- <script setup lang="ts">
2
- import {onBeforeUnmount,onMounted,ref} from 'vue'
3
- import {Button,Callout,SettingsSection} from '@synopackageland/ui'
4
- import type {Context} from '../context'
5
- import FileBrowser from './FileBrowser.vue'
6
- import NasPicker from '../nas/NasPicker.vue'
7
- import {createNasProvider} from '../nas/provider'
8
- import {nasCopy,nasErrorCopy} from '../nas/locale'
9
- const props=defineProps<{ctx:Context}>()
10
- const error=ref<unknown>()
11
- const ready=ref(false),mode=ref<'folder'|'file'>('folder'),open=ref(false),selected=ref(''),generation=ref(0)
12
- const provider=createNasProvider(props.ctx)
13
- let disposed=false,unsubscribe:(()=>void)|undefined
14
- async function check(){
15
- if(disposed)return
16
- error.value=undefined
17
- ready.value=false;selected.value='';open.value=false;generation.value++
18
- try{await props.ctx.call('nas.session.status');if(!disposed)ready.value=true}catch(e){if(!disposed&&(e as {code?:string})?.code!=='unknown_method')error.value=e}
19
- }
20
- onMounted(()=>{unsubscribe=props.ctx.reopen(()=>void check());void check()})
21
- onBeforeUnmount(()=>{disposed=true;unsubscribe?.();provider.dispose()})
22
- </script>
23
- <template>
24
- <Callout v-if="error" tone="danger"><span role="alert">{{ nasErrorCopy(error,nasCopy(ctx.locale)) }}</span><Button variant="secondary" @click="check">{{ nasCopy(ctx.locale).refresh }}</Button></Callout>
25
- <SettingsSection v-if="ready" :title="nasCopy(ctx.locale).title" :collapsible="false">
26
- <div class="files-actions"><Button variant="secondary" @click="mode='folder';open=true">{{ nasCopy(ctx.locale).choose }}</Button><Button variant="secondary" @click="mode='file';open=true">{{ nasCopy(ctx.locale).chooseFile }}</Button></div>
27
- <p v-if="selected" class="files-path" role="status">{{ selected }}</p>
28
- <FileBrowser :key="generation" :provider="provider" :locale="ctx.locale" transfers />
29
- <NasPicker :provider="provider" :locale="ctx.locale" :mode="mode" v-model:open="open" @selected="selected=$event" />
30
- </SettingsSection>
31
- </template>
32
- <style scoped>
33
- .files-actions { display: flex; flex-wrap: wrap; gap: var(--ui-space-2, 8px); }
34
- .files-path { overflow-wrap: anywhere; }
35
- </style>
@@ -1,100 +0,0 @@
1
- // @vitest-environment jsdom
2
- import {afterEach,expect,test,vi} from 'vitest'
3
- import {createApp,h,nextTick,ref} from 'vue'
4
- import {AppRoot} from '@synopackageland/ui'
5
- import FileBrowser from './FileBrowser.vue'
6
- import NasPicker from '../nas/NasPicker.vue'
7
- import {createNasProvider} from '../nas/provider'
8
- import {nasCopy} from '../nas/locale'
9
-
10
- async function settle(){for(let i=0;i<30;i++){await Promise.resolve();await nextTick()}await new Promise(r=>setTimeout(r,20))}
11
- const cleanup:Array<()=>void>=[]
12
- afterEach(()=>{cleanup.splice(0).forEach(fn=>fn())})
13
- const folder=(path:string)=>({path,name:path.split('/').at(-1)!,isdir:true})
14
- const file=(path:string)=>({path,name:path.split('/').at(-1)!,isdir:false,additional:{size:2}})
15
- function mount(component:any,call:any,extra:Record<string,unknown>={}){
16
- const root=document.createElement('div');document.body.append(root)
17
- const app=createApp({render:()=>h(AppRoot,{},()=>h(component,{provider:createNasProvider({call}),locale:'en',...extra}))})
18
- app.mount(root);cleanup.push(()=>{app.unmount();root.remove()});return root
19
- }
20
- function button(root:HTMLElement,label:string){const node=Array.from(root.querySelectorAll('button')).find(n=>n.textContent?.trim()===label||n.getAttribute('aria-label')===label);expect(node,label).toBeTruthy();return node!}
21
- function fixture(){
22
- return vi.fn(async(method:string,params:any)=>{
23
- if(method==='nas.files.shares')return {shares:[folder('/homes'),folder('/shared')],offset:0,total:2}
24
- if(method==='nas.files.list')return {files:params.path==='/homes'?[folder('/homes/sub'),file('/homes/a.txt')]:[],offset:params.offset??0,total:params.path==='/homes'?2:0}
25
- throw {code:'unknown_method'}
26
- })
27
- }
28
- test('tree loads roots only and loads children on first expansion, including DSM-returned homes',async()=>{
29
- const call=fixture(),root=mount(FileBrowser,call);await settle()
30
- expect(call.mock.calls.map(([m])=>m)).toEqual(['nas.files.shares'])
31
- expect(root.textContent).toContain('homes')
32
- button(root,'Expand homes').click();await settle()
33
- expect(call.mock.calls.filter(([m])=>m==='nas.files.list')).toHaveLength(1)
34
- expect(root.textContent).toContain('sub')
35
- button(root,'Collapse homes').click();await settle();button(root,'Expand homes').click();await settle()
36
- expect(call.mock.calls.filter(([m])=>m==='nas.files.list')).toHaveLength(1)
37
- })
38
- test.each(['folder','file'] as const)('picker returns a DSM path in %s mode without creating grants',async(mode)=>{
39
- const call=fixture(),selected=vi.fn(),root=mount(NasPicker,call,{open:true,mode,onSelected:selected});await settle()
40
- button(root,'Open homes').click();await settle()
41
- if(mode==='file')button(root,'Select a.txt').click()
42
- else button(root,'Select homes').click()
43
- await settle();button(root,nasCopy('en').confirm).click();await settle()
44
- expect(selected).toHaveBeenCalledWith(mode==='file'?'/homes/a.txt':'/homes')
45
- expect(call.mock.calls.every(([m])=>!m.includes('grants'))).toBe(true)
46
- })
47
- test.each([407,408,'denied'])('permission error %s is visible and suppresses misleading empty state',async(code)=>{
48
- const call=vi.fn(async()=>{throw {code,message:'secret SID'}}),root=mount(FileBrowser,call);await settle()
49
- expect(root.querySelector('[role="alert"]')?.textContent).toContain(nasCopy('en').errorDenied)
50
- expect(root.textContent).not.toContain('secret SID')
51
- expect(root.textContent).not.toContain(nasCopy('en').emptyFolder)
52
- expect(button(root,nasCopy('en').refresh).disabled).toBe(false)
53
- })
54
- test('folder navigation clears selection when permissions are lost',async()=>{
55
- const call=fixture(),root=mount(FileBrowser,call,{mode:'file'});await settle()
56
- button(root,'Open homes').click();await settle();button(root,'Select a.txt').click();await settle()
57
- call.mockRejectedValue({code:'denied'});button(root,nasCopy('en').refresh).click();await settle()
58
- expect(root.querySelector('[role="alert"]')).toBeTruthy()
59
- expect(root.textContent).not.toContain('a.txt')
60
- })
61
-
62
- test('lazy tree follows full DSM page cursors even when a page contains only files',async()=>{
63
- const call=vi.fn(async(method:string,params:any)=>{
64
- if(method==='nas.files.shares')return {shares:[folder('/team')],offset:0,total:1}
65
- if(params.offset===0)return {files:[file('/team/a.txt')],offset:0,total:2}
66
- return {files:[folder('/team/later')],offset:1,total:2}
67
- })
68
- const root=mount(FileBrowser,call);await settle();button(root,'Expand team').click();await settle()
69
- expect(call.mock.calls.filter(([m])=>m==='nas.files.list').map(([,p])=>p.offset)).toEqual([0,1])
70
- expect(root.textContent).toContain('later')
71
- })
72
- test('reopening picker clears the old path and reloads current DSM visibility',async()=>{
73
- const call=fixture(),open=ref(true),selected=vi.fn(),root=document.createElement('div');document.body.append(root)
74
- const provider=createNasProvider({call:call as any})
75
- const app=createApp({render:()=>h(AppRoot,{},()=>h(NasPicker,{provider,locale:'en',mode:'folder',open:open.value,onSelected:selected,'onUpdate:open':v=>{open.value=v}}))})
76
- app.mount(root);cleanup.push(()=>{app.unmount();root.remove()})
77
- await settle();button(root,'Select homes').click();await settle();button(root,nasCopy('en').confirm).click();await settle()
78
- expect(selected).toHaveBeenCalledWith('/homes')
79
- open.value=true;await settle()
80
- expect(button(root,nasCopy('en').confirm).disabled).toBe(true)
81
- expect(call.mock.calls.filter(([m])=>m==='nas.files.shares')).toHaveLength(2)
82
- })
83
-
84
- test('upload picker states the same 16 GB limit as the size error',async()=>{
85
- const call=fixture(),provider=createNasProvider({call:call as any})
86
- const root=mount(FileBrowser,call,{transfers:true,provider:{...provider,upload:vi.fn(),download:vi.fn(),info:vi.fn()}});await settle()
87
- button(root,'Open homes').click();await settle()
88
- expect(nasCopy('en').errorUploadSize).toContain('16 GB')
89
- expect(root.textContent).toContain('max 16 GB')
90
- })
91
- test('file browser downloads selected files and streams uploads to the current folder',async()=>{
92
- const call=fixture(),provider=createNasProvider({call:call as any}),upload=vi.fn(async()=>{}),download=vi.fn(),info=vi.fn(async()=>({name:'a.txt',path:'/homes/a.txt',isDir:false}))
93
- const root=mount(FileBrowser,call,{transfers:true,provider:{...provider,upload,download,info}});await settle()
94
- button(root,'Open homes').click();await settle();button(root,'Select a.txt').click();await settle()
95
- button(root,nasCopy('en').download).click();await settle();expect(info).toHaveBeenCalledWith('/homes/a.txt',expect.any(AbortSignal));expect(download).toHaveBeenCalledWith('/homes/a.txt')
96
- const picker=root.querySelector<HTMLInputElement>('input[type=file]')!;expect(picker).toBeTruthy()
97
- const file=new File(['payload'],'upload.txt');Object.defineProperty(picker,'files',{value:[file],configurable:true});picker.dispatchEvent(new Event('change',{bubbles:true}));await settle()
98
- button(root,nasCopy('en').upload).click();await settle()
99
- expect(upload).toHaveBeenCalledWith('/homes',file,expect.any(AbortSignal));expect(root.textContent).toContain(nasCopy('en').uploaded)
100
- })
@@ -1,48 +0,0 @@
1
- import {expect,test,vi} from 'vitest'
2
- import {createNasProvider} from '../nas/provider'
3
- import {nasCatalogs,nasCopy,nasErrorCopy} from '../nas/locale'
4
- const signal=()=>new AbortController().signal
5
-
6
- test('provider forwards pagination/sorting and preserves every DSM-returned path',async()=>{
7
- const call=vi.fn(async()=>({files:[{name:'outside homes',path:'/team/outside homes',isdir:false,additional:{size:12}}],offset:100,total:102}))
8
- const p=createNasProvider({call:call as any})
9
- const page=await p.list('/team',{offset:100,limit:1,sortBy:'size',sortDirection:'DESC'},signal())
10
- expect(call).toHaveBeenCalledWith('nas.files.list',{path:'/team',offset:100,limit:1,sortBy:'size',sortDirection:'DESC'})
11
- expect(page.entries[0]?.path).toBe('/team/outside homes');expect(page.nextOffset).toBe(101)
12
- })
13
- test.each([
14
- {},{files:[],offset:0,total:1},{files:[],offset:-1,total:0},
15
- {files:[{name:'x',path:'/x',isdir:true}],offset:0,total:0},
16
- {files:[{name:'x',path:'/x',isdir:'true'}],offset:0,total:1},
17
- ])('malformed or stalled page fails visibly: %j',async(value)=>{
18
- const p=createNasProvider({call:vi.fn(async()=>value) as any})
19
- await expect(p.shares(0,signal())).rejects.toEqual({code:'unavailable'})
20
- })
21
- test('canceling or disposing observation rejects late results and stops subsequent calls',async()=>{
22
- let resolve!:(v:unknown)=>void
23
- const call=vi.fn(()=>new Promise(r=>{resolve=r})),p=createNasProvider({call:call as any}),abort=new AbortController()
24
- const pending=p.shares(0,abort.signal);abort.abort()
25
- await expect(pending).rejects.toEqual({code:'canceled'})
26
- resolve({shares:[],offset:0,total:0});p.dispose()
27
- await expect(p.shares(0,signal())).rejects.toEqual({code:'canceled'})
28
- expect(call).toHaveBeenCalledTimes(1)
29
- })
30
- test('lost mutation response stays uncertain and sensitive error details are discarded',async()=>{
31
- const p=createNasProvider({call:vi.fn(async()=>{throw {message:'SID=secret',code:'transport_error'}})})
32
- await expect(p.createFolder('/team','new',signal())).rejects.toEqual({code:'commit-uncertain'})
33
- })
34
- test('all supported locales share copy keys, aliases and explicit permission errors',()=>{
35
- const keys=Object.keys(nasCopy('en')).sort()
36
- for(const copy of Object.values(nasCatalogs)){
37
- expect(Object.keys(copy).sort()).toEqual(keys)
38
- expect(nasErrorCopy({code:'denied',message:'SID=secret'},copy)).toBe(copy.errorDenied)
39
- }
40
- expect(nasCopy('cht')).toBe(nasCopy('zh-TW'))
41
- expect(nasCopy('unknown')).toBe(nasCopy('en'))
42
- })
43
-
44
- test('App-only file errors retain a DSM-login recovery hint',async()=>{
45
- const p=createNasProvider({call:vi.fn(async()=>{throw {code:'dsm_session_required'}})})
46
- await expect(p.shares(0,signal())).rejects.toEqual({code:'dsm_session_required'})
47
- expect(nasErrorCopy({code:'dsm_session_required'},nasCopy('en'))).toContain('DSM')
48
- })
@@ -1,27 +0,0 @@
1
- // @vitest-environment jsdom
2
- import {expect,test,vi,afterEach} from 'vitest'
3
- import {createFileTransfers} from './transfers'
4
- afterEach(()=>vi.unstubAllGlobals())
5
- test('upload passes the File itself with caller credentials and a header token',async()=>{
6
- const fetch=vi.fn(async()=>({json:async()=>({success:true,data:{uploaded:true}})}));vi.stubGlobal('fetch',fetch)
7
- const file=new File(['payload'],'\u5831\u544a.txt'),signal=new AbortController().signal
8
- await createFileTransfers({endpoint:'/cgi/api.cgi',token:()=> 'caller-token'}).upload('/home',file,signal)
9
- const [url,request]=fetch.mock.calls[0] as any
10
- expect(url).toContain('method=nas.files.upload');expect(url).toContain('parent=%2Fhome')
11
- expect(request.body).toBe(file);expect(request.signal).toBe(signal);expect(request.credentials).toBe('same-origin');expect(request.headers['X-SYNO-TOKEN']).toBe('caller-token')
12
- })
13
- test('native download sends the caller token in a POST body, never a URL',()=>{
14
- let action='',method='',token=''
15
- const submit=vi.spyOn(HTMLFormElement.prototype,'submit').mockImplementation(function(this:HTMLFormElement){action=this.action;method=this.method;token=(this.elements.namedItem('SynoToken') as HTMLInputElement).value})
16
- const transfers=createFileTransfers({endpoint:'/cgi/api.cgi',token:()=> 'secret'})
17
- transfers.download('/home/\u5831\u544a.txt')
18
- expect(action).toContain('method=nas.files.download');expect(action).not.toContain('secret');expect(method).toBe('post');expect(token).toBe('secret')
19
- expect(document.querySelector('form')).toBeNull();transfers.dispose();expect(document.querySelector('iframe')).toBeNull();submit.mockRestore()
20
- })
21
- test('lost upload response is uncertain and server DSM refusal stays actionable',async()=>{
22
- vi.stubGlobal('fetch',vi.fn(async()=>{throw Error('offline')}))
23
- const t=createFileTransfers({endpoint:'/cgi/api.cgi'}),file=new File(['a'],'a')
24
- await expect(t.upload('/home',file,new AbortController().signal)).rejects.toEqual({code:'commit-uncertain'})
25
- vi.stubGlobal('fetch',vi.fn(async()=>({json:async()=>({success:false,error:{code:'dsm_session_required'}})})))
26
- await expect(t.upload('/home',file,new AbortController().signal)).rejects.toEqual({code:'dsm_session_required'})
27
- })