@synopackageland/cli 0.8.0 → 0.9.0

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 (921) hide show
  1. package/CHANGELOG.md +124 -0
  2. package/README.md +26 -4
  3. package/dist/add.js +4 -17
  4. package/dist/authorization-sdk.d.ts +0 -1
  5. package/dist/authorization-sdk.js +0 -1
  6. package/dist/build-spk/gateway.js +2 -2
  7. package/dist/build-spk/notices.js +12 -8
  8. package/dist/capability-overlays.d.ts +15 -0
  9. package/dist/capability-overlays.js +18 -0
  10. package/dist/cli-version.d.ts +2 -0
  11. package/dist/cli-version.js +3 -0
  12. package/dist/cli.js +3 -1
  13. package/dist/error-registry.js +12 -4
  14. package/dist/info.js +2 -1
  15. package/dist/init.js +52 -58
  16. package/dist/reproducible.js +1 -1
  17. package/dist/runtime/delegate-contract.d.ts +15 -0
  18. package/dist/runtime/delegate-contract.js +2 -0
  19. package/dist/runtime/executor-build.d.ts +15 -1
  20. package/dist/runtime/executor-build.js +42 -11
  21. package/dist/runtime/executor-digests.json +13 -0
  22. package/dist/runtime/executor-inspect.d.ts +1 -0
  23. package/dist/runtime/executor-inspect.js +5 -2
  24. package/dist/runtime/executor-policy.d.ts +3 -1
  25. package/dist/runtime/executor-policy.js +7 -2
  26. package/dist/runtime/executor-source.d.ts +21 -0
  27. package/dist/runtime/executor-source.js +35 -0
  28. package/dist/runtime/executor-tasks.d.ts +5 -2
  29. package/dist/runtime/executor-tasks.js +6 -4
  30. package/dist/runtime/sdk-source.d.ts +31 -0
  31. package/dist/runtime/sdk-source.js +92 -0
  32. package/dist/standalone/api-permissions.d.ts +4 -1
  33. package/dist/standalone/api-permissions.js +10 -18
  34. package/dist/standalone/build.d.ts +1 -0
  35. package/dist/standalone/build.js +11 -4
  36. package/dist/standalone/daemon.js +2 -2
  37. package/dist/standalone/dsm-window.js +2 -2
  38. package/dist/standalone/manifest.d.ts +5 -2
  39. package/dist/standalone/manifest.js +9 -3
  40. package/dist/standalone/root-window.d.ts +1 -1
  41. package/dist/standalone/root-window.js +0 -1
  42. package/dist/standalone/sdk-check.d.ts +9 -0
  43. package/dist/standalone/sdk-check.js +43 -0
  44. package/dist/standalone/spk.js +1 -1
  45. package/dist/template-paths.d.ts +7 -2
  46. package/dist/template-paths.js +18 -6
  47. package/package.json +13 -3
  48. package/dist/templates/_executor/README.md +0 -318
  49. package/dist/templates/_executor/anchor.go +0 -156
  50. package/dist/templates/_executor/anchor_test.go +0 -161
  51. package/dist/templates/_executor/apppriv_review_test.go +0 -28
  52. package/dist/templates/_executor/auth_presence_review_test.go +0 -38
  53. package/dist/templates/_executor/cancel_contract_test.go +0 -236
  54. package/dist/templates/_executor/cmd/lifecycle/main.go +0 -42
  55. package/dist/templates/_executor/cookie_review_test.go +0 -27
  56. package/dist/templates/_executor/copy.go +0 -64
  57. package/dist/templates/_executor/copy_test.go +0 -88
  58. package/dist/templates/_executor/digest_review_test.go +0 -120
  59. package/dist/templates/_executor/directories.go +0 -40
  60. package/dist/templates/_executor/dsm.go +0 -369
  61. package/dist/templates/_executor/dsm_test.go +0 -290
  62. package/dist/templates/_executor/executor.go +0 -735
  63. package/dist/templates/_executor/executor_test.go +0 -314
  64. package/dist/templates/_executor/go.mod +0 -5
  65. package/dist/templates/_executor/identity.go +0 -74
  66. package/dist/templates/_executor/identity_kernel_linux_test.go +0 -60
  67. package/dist/templates/_executor/identity_linux.go +0 -82
  68. package/dist/templates/_executor/identity_security_test.go +0 -43
  69. package/dist/templates/_executor/internal/lifecycle/lifecycle.go +0 -95
  70. package/dist/templates/_executor/internal/lifecycle/lifecycle_test.go +0 -232
  71. package/dist/templates/_executor/internal/taskscript/boot.sh +0 -31
  72. package/dist/templates/_executor/internal/taskscript/cmd/main.go +0 -19
  73. package/dist/templates/_executor/internal/taskscript/control.sh +0 -31
  74. package/dist/templates/_executor/internal/taskscript/tasks.go +0 -44
  75. package/dist/templates/_executor/json_review_test.go +0 -40
  76. package/dist/templates/_executor/lifecycle_test.go +0 -97
  77. package/dist/templates/_executor/link_linux.go +0 -28
  78. package/dist/templates/_executor/long_running_test.go +0 -530
  79. package/dist/templates/_executor/main.go +0 -576
  80. package/dist/templates/_executor/managed.go +0 -117
  81. package/dist/templates/_executor/managed_test.go +0 -137
  82. package/dist/templates/_executor/move_linux.go +0 -490
  83. package/dist/templates/_executor/move_linux_test.go +0 -460
  84. package/dist/templates/_executor/move_validation.go +0 -46
  85. package/dist/templates/_executor/move_validation_test.go +0 -187
  86. package/dist/templates/_executor/operations.go +0 -926
  87. package/dist/templates/_executor/path_test.go +0 -35
  88. package/dist/templates/_executor/pid.go +0 -37
  89. package/dist/templates/_executor/pid_test.go +0 -113
  90. package/dist/templates/_executor/platform_linux.go +0 -187
  91. package/dist/templates/_executor/platform_linux_test.go +0 -191
  92. package/dist/templates/_executor/platform_other.go +0 -76
  93. package/dist/templates/_executor/process.go +0 -142
  94. package/dist/templates/_executor/purge_log.go +0 -18
  95. package/dist/templates/_executor/records.go +0 -242
  96. package/dist/templates/_executor/scope_cancel_contract_test.go +0 -91
  97. package/dist/templates/_executor/scope_client.go +0 -37
  98. package/dist/templates/_executor/scope_contract.go +0 -12
  99. package/dist/templates/_executor/selected_scope.go +0 -146
  100. package/dist/templates/_executor/selected_scope_test.go +0 -186
  101. package/dist/templates/_executor/socket_linux_test.go +0 -46
  102. package/dist/templates/_executor/status_disabled_test.go +0 -33
  103. package/dist/templates/_executor/store.go +0 -91
  104. package/dist/templates/_executor/supervise.go +0 -109
  105. package/dist/templates/_executor/supervise_test.go +0 -130
  106. package/dist/templates/_executor/task_race_review_test.go +0 -47
  107. package/dist/templates/_executor/tasks.go +0 -320
  108. package/dist/templates/_executor/tasks_dsm71_test.go +0 -114
  109. package/dist/templates/_executor/tasks_review_test.go +0 -43
  110. package/dist/templates/_executor/tasks_test.go +0 -223
  111. package/dist/templates/_executor/testdata/evidence/cleanup.json +0 -24
  112. package/dist/templates/_executor/testdata/evidence/final-smoke.jsonl +0 -9
  113. package/dist/templates/_executor/testdata/evidence/kernel-acl.json +0 -6
  114. package/dist/templates/_executor/testdata/evidence/linux-tests.log +0 -123
  115. package/dist/templates/_executor/testdata/evidence/live.jsonl +0 -23
  116. package/dist/templates/_executor/testdata/evidence/storage.json +0 -90
  117. package/dist/templates/_executor/testdata/evidence/validation.json +0 -55
  118. package/dist/templates/_executor/testdata/live_probe.py +0 -98
  119. package/dist/templates/_executor/upgrade_watch_test.go +0 -244
  120. package/dist/templates/_executor/watch.go +0 -164
  121. package/dist/templates/_executor/watch_test.go +0 -291
  122. package/dist/templates/_executor/write_review_linux_test.go +0 -87
  123. package/dist/templates/_shared/AGENTS.md +0 -146
  124. package/dist/templates/_shared/CLAUDE.md +0 -1
  125. package/dist/templates/_shared/third-party-notices.mjs +0 -51
  126. package/dist/templates/binary/LICENSES/GO-LICENSE +0 -27
  127. package/dist/templates/binary/LICENSES/GO-PATENTS +0 -22
  128. package/dist/templates/binary/dsm-package.yaml +0 -46
  129. package/dist/templates/binary/example/main.go +0 -16
  130. package/dist/templates/binary/gitignore +0 -2
  131. package/dist/templates/binary/i18n/messages/de.json +0 -4
  132. package/dist/templates/binary/i18n/messages/en.json +0 -4
  133. package/dist/templates/binary/i18n/messages/es.json +0 -4
  134. package/dist/templates/binary/i18n/messages/fr.json +0 -4
  135. package/dist/templates/binary/i18n/messages/it.json +0 -4
  136. package/dist/templates/binary/i18n/messages/ja.json +0 -4
  137. package/dist/templates/binary/i18n/messages/ko.json +0 -4
  138. package/dist/templates/binary/i18n/messages/zh-CN.json +0 -4
  139. package/dist/templates/binary/i18n/messages/zh-TW.json +0 -4
  140. package/dist/templates/binary/ui/app.css +0 -4
  141. package/dist/templates/binary/ui/app.js +0 -32
  142. package/dist/templates/compose/compose.yaml +0 -8
  143. package/dist/templates/compose/synology-app.yaml +0 -16
  144. package/dist/templates/native-authorization/AuthorizationGate.vue +0 -91
  145. package/dist/templates/native-authorization/i18n/de.json +0 -37
  146. package/dist/templates/native-authorization/i18n/en.json +0 -37
  147. package/dist/templates/native-authorization/i18n/es.json +0 -37
  148. package/dist/templates/native-authorization/i18n/fr.json +0 -37
  149. package/dist/templates/native-authorization/i18n/index.ts +0 -15
  150. package/dist/templates/native-authorization/i18n/it.json +0 -37
  151. package/dist/templates/native-authorization/i18n/ja.json +0 -37
  152. package/dist/templates/native-authorization/i18n/ko.json +0 -37
  153. package/dist/templates/native-authorization/i18n/zh-CN.json +0 -37
  154. package/dist/templates/native-authorization/i18n/zh-TW.json +0 -37
  155. package/dist/templates/native-go/README.md +0 -459
  156. package/dist/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +0 -61
  157. package/dist/templates/native-go/backend/cmd/app/main.go +0 -95
  158. package/dist/templates/native-go/backend/cmd/background-worker/main.go +0 -38
  159. package/dist/templates/native-go/backend/go.mod +0 -9
  160. package/dist/templates/native-go/backend/go.sum +0 -4
  161. package/dist/templates/native-go/backend/internal/api/cgi_framing_test.go +0 -32
  162. package/dist/templates/native-go/backend/internal/api/cookie_review_test.go +0 -28
  163. package/dist/templates/native-go/backend/internal/api/deadline_test.go +0 -114
  164. package/dist/templates/native-go/backend/internal/api/dsm-session.go +0 -54
  165. package/dist/templates/native-go/backend/internal/api/dsm-session_test.go +0 -51
  166. package/dist/templates/native-go/backend/internal/api/entry_test.go +0 -47
  167. package/dist/templates/native-go/backend/internal/api/errors.go +0 -47
  168. package/dist/templates/native-go/backend/internal/api/permissions.go +0 -161
  169. package/dist/templates/native-go/backend/internal/api/permissions.json +0 -5
  170. package/dist/templates/native-go/backend/internal/api/permissions_test.go +0 -113
  171. package/dist/templates/native-go/backend/internal/api/policy_fixture_test.go +0 -8
  172. package/dist/templates/native-go/backend/internal/api/registry.go +0 -142
  173. package/dist/templates/native-go/backend/internal/api/registry_test.go +0 -344
  174. package/dist/templates/native-go/backend/internal/api/resource_limits_test.go +0 -87
  175. package/dist/templates/native-go/backend/internal/api/sdk-permissions.json +0 -59
  176. package/dist/templates/native-go/backend/internal/api/sdk_policy_test.go +0 -31
  177. package/dist/templates/native-go/backend/internal/api/server.go +0 -305
  178. package/dist/templates/native-go/backend/internal/api/testdata/permissions-cases.json +0 -172
  179. package/dist/templates/native-go/backend/internal/app/background.go +0 -249
  180. package/dist/templates/native-go/backend/internal/app/background_none.go +0 -8
  181. package/dist/templates/native-go/backend/internal/app/background_owner.go +0 -38
  182. package/dist/templates/native-go/backend/internal/app/background_owner_test.go +0 -163
  183. package/dist/templates/native-go/backend/internal/app/background_schedule.go +0 -69
  184. package/dist/templates/native-go/backend/internal/app/background_schedule_test.go +0 -62
  185. package/dist/templates/native-go/backend/internal/app/background_test.go +0 -320
  186. package/dist/templates/native-go/backend/internal/app/delegate_config.go +0 -57
  187. package/dist/templates/native-go/backend/internal/app/delegate_config_test.go +0 -28
  188. package/dist/templates/native-go/backend/internal/app/delegate_none.go +0 -5
  189. package/dist/templates/native-go/backend/internal/app/identity.go +0 -20
  190. package/dist/templates/native-go/backend/internal/app/identity_test.go +0 -15
  191. package/dist/templates/native-go/backend/internal/app/migrations.go +0 -41
  192. package/dist/templates/native-go/backend/internal/app/migrations_test.go +0 -41
  193. package/dist/templates/native-go/backend/internal/app/portal.go +0 -30
  194. package/dist/templates/native-go/backend/internal/app/portal_test.go +0 -55
  195. package/dist/templates/native-go/backend/internal/app/root_none.go +0 -9
  196. package/dist/templates/native-go/backend/internal/app/routes.go +0 -137
  197. package/dist/templates/native-go/backend/internal/app/routes_test.go +0 -165
  198. package/dist/templates/native-go/backend/internal/app/session_files.go +0 -9
  199. package/dist/templates/native-go/backend/internal/app/session_files_test.go +0 -14
  200. package/dist/templates/native-go/backend/internal/app/shared_folder.go +0 -144
  201. package/dist/templates/native-go/backend/internal/app/shared_folder_test.go +0 -158
  202. package/dist/templates/native-go/backend/internal/background/access.go +0 -57
  203. package/dist/templates/native-go/backend/internal/background/lock_test.go +0 -131
  204. package/dist/templates/native-go/backend/internal/background/owner_test.go +0 -118
  205. package/dist/templates/native-go/backend/internal/background/runner.go +0 -185
  206. package/dist/templates/native-go/backend/internal/background/runner_test.go +0 -209
  207. package/dist/templates/native-go/backend/internal/background/schedule.go +0 -336
  208. package/dist/templates/native-go/backend/internal/background/schedule_test.go +0 -368
  209. package/dist/templates/native-go/backend/internal/background/store.go +0 -825
  210. package/dist/templates/native-go/backend/internal/background/store_test.go +0 -365
  211. package/dist/templates/native-go/backend/internal/datamigrate/migrate.go +0 -191
  212. package/dist/templates/native-go/backend/internal/datamigrate/migrate_test.go +0 -177
  213. package/dist/templates/native-go/backend/internal/dsm/admin.go +0 -76
  214. package/dist/templates/native-go/backend/internal/dsm/admin_linux.go +0 -110
  215. package/dist/templates/native-go/backend/internal/dsm/admin_linux_test.go +0 -105
  216. package/dist/templates/native-go/backend/internal/dsm/admin_other.go +0 -15
  217. package/dist/templates/native-go/backend/internal/dsm/admin_test.go +0 -67
  218. package/dist/templates/native-go/backend/internal/dsm/apppriv.go +0 -30
  219. package/dist/templates/native-go/backend/internal/dsm/auth.go +0 -94
  220. package/dist/templates/native-go/backend/internal/dsm/auth_test.go +0 -159
  221. package/dist/templates/native-go/backend/internal/dsm/bridge_file.go +0 -75
  222. package/dist/templates/native-go/backend/internal/dsm/bridge_file_test.go +0 -57
  223. package/dist/templates/native-go/backend/internal/dsm/entry.go +0 -177
  224. package/dist/templates/native-go/backend/internal/dsm/entry_test.go +0 -315
  225. package/dist/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
  226. package/dist/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
  227. package/dist/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
  228. package/dist/templates/native-go/backend/internal/dsm/native/admin_check.c +0 -28
  229. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
  230. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
  231. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
  232. package/dist/templates/native-go/backend/internal/dsm/native/apppriv_check.c +0 -33
  233. package/dist/templates/native-go/backend/internal/dsm/native/build.sh +0 -18
  234. package/dist/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +0 -400
  235. package/dist/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +0 -501
  236. package/dist/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +0 -5
  237. package/dist/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +0 -21
  238. package/dist/templates/native-go/backend/internal/dsm/native/provenance.json +0 -18
  239. package/dist/templates/native-go/backend/internal/filestation/browse_test.go +0 -67
  240. package/dist/templates/native-go/backend/internal/filestation/check_permission.go +0 -71
  241. package/dist/templates/native-go/backend/internal/filestation/check_permission_test.go +0 -77
  242. package/dist/templates/native-go/backend/internal/filestation/client.go +0 -337
  243. package/dist/templates/native-go/backend/internal/filestation/client_test.go +0 -155
  244. package/dist/templates/native-go/backend/internal/filestation/doc.go +0 -4
  245. package/dist/templates/native-go/backend/internal/filestation/download_dsm71_test.go +0 -82
  246. package/dist/templates/native-go/backend/internal/filestation/http.go +0 -70
  247. package/dist/templates/native-go/backend/internal/filestation/http_test.go +0 -188
  248. package/dist/templates/native-go/backend/internal/filestation/operations_test.go +0 -206
  249. package/dist/templates/native-go/backend/internal/filestation/read_file_test.go +0 -89
  250. package/dist/templates/native-go/backend/internal/filestation/sdk_policy_test.go +0 -39
  251. package/dist/templates/native-go/backend/internal/filestation/service.go +0 -254
  252. package/dist/templates/native-go/backend/internal/filestation/service_test.go +0 -74
  253. package/dist/templates/native-go/backend/internal/filestation/upload_stream.go +0 -76
  254. package/dist/templates/native-go/backend/internal/filestation/upload_stream_test.go +0 -77
  255. package/dist/templates/native-go/backend/internal/filestation/write.go +0 -32
  256. package/dist/templates/native-go/backend/internal/filestation/write_test.go +0 -124
  257. package/dist/templates/native-go/backend/internal/identity/README.md +0 -59
  258. package/dist/templates/native-go/backend/internal/identity/dsm.go +0 -115
  259. package/dist/templates/native-go/backend/internal/identity/http.go +0 -291
  260. package/dist/templates/native-go/backend/internal/identity/identity_test.go +0 -530
  261. package/dist/templates/native-go/backend/internal/identity/service.go +0 -159
  262. package/dist/templates/native-go/backend/internal/identity/store.go +0 -109
  263. package/dist/templates/native-go/backend/internal/jsonlimits/limits.go +0 -48
  264. package/dist/templates/native-go/backend/internal/jsonlimits/limits_test.go +0 -52
  265. package/dist/templates/native-go/backend/internal/portal/portal.go +0 -138
  266. package/dist/templates/native-go/backend/internal/portal/portal_test.go +0 -89
  267. package/dist/templates/native-go/dsm-package.yaml +0 -71
  268. package/dist/templates/native-go/gitignore +0 -1
  269. package/dist/templates/native-go/i18n/glossary.json +0 -663
  270. package/dist/templates/native-go/i18n/messages/de.json +0 -29
  271. package/dist/templates/native-go/i18n/messages/en.json +0 -29
  272. package/dist/templates/native-go/i18n/messages/es.json +0 -29
  273. package/dist/templates/native-go/i18n/messages/fr.json +0 -29
  274. package/dist/templates/native-go/i18n/messages/it.json +0 -29
  275. package/dist/templates/native-go/i18n/messages/ja.json +0 -29
  276. package/dist/templates/native-go/i18n/messages/ko.json +0 -29
  277. package/dist/templates/native-go/i18n/messages/zh-CN.json +0 -29
  278. package/dist/templates/native-go/i18n/messages/zh-TW.json +0 -29
  279. package/dist/templates/native-go/ui/app.css +0 -45
  280. package/dist/templates/native-go/ui/app.js +0 -111
  281. package/dist/templates/native-go-delegate/DELEGATE.md +0 -263
  282. package/dist/templates/native-go-delegate/backend/cmd/background-worker/main.go +0 -48
  283. package/dist/templates/native-go-delegate/backend/internal/app/delegate.go +0 -25
  284. package/dist/templates/native-go-delegate/backend/internal/app/delegate_on.go +0 -5
  285. package/dist/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +0 -31
  286. package/dist/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +0 -174
  287. package/dist/templates/native-go-delegate/backend/internal/background/delegated.go +0 -277
  288. package/dist/templates/native-go-delegate/backend/internal/background/delegated_moves.go +0 -270
  289. package/dist/templates/native-go-delegate/backend/internal/background/delegated_test.go +0 -34
  290. package/dist/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +0 -410
  291. package/dist/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +0 -15
  292. package/dist/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +0 -95
  293. package/dist/templates/native-go-delegate/backend/internal/delegate/client.go +0 -151
  294. package/dist/templates/native-go-delegate/backend/internal/delegate/client_test.go +0 -214
  295. package/dist/templates/native-go-delegate/backend/internal/delegate/destination.go +0 -110
  296. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state.go +0 -117
  297. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +0 -60
  298. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_test.go +0 -116
  299. package/dist/templates/native-go-delegate/backend/internal/delegate/example.go +0 -81
  300. package/dist/templates/native-go-delegate/backend/internal/delegate/example_test.go +0 -91
  301. package/dist/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +0 -511
  302. package/dist/templates/native-go-delegate/backend/internal/delegate/files.go +0 -132
  303. package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +0 -92
  304. package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +0 -99
  305. package/dist/templates/native-go-delegate/backend/internal/delegate/move.go +0 -348
  306. package/dist/templates/native-go-delegate/backend/internal/delegate/move_test.go +0 -351
  307. package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list.go +0 -65
  308. package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +0 -114
  309. package/dist/templates/native-go-delegate/backend/internal/delegate/retry.go +0 -106
  310. package/dist/templates/native-go-delegate/backend/internal/delegate/retry_test.go +0 -143
  311. package/dist/templates/native-go-delegate/backend/internal/delegate/service.go +0 -364
  312. package/dist/templates/native-go-delegate/backend/internal/delegate/service_test.go +0 -318
  313. package/dist/templates/native-go-delegate/backend/internal/delegate/staging.go +0 -121
  314. package/dist/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +0 -51
  315. package/dist/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +0 -112
  316. package/dist/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +0 -137
  317. package/dist/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +0 -101
  318. package/dist/templates/native-go-delegate/backend/internal/delegate/worker.go +0 -225
  319. package/dist/templates/native-go-delegate/backend/internal/filestation/files.go +0 -43
  320. package/dist/templates/native-go-delegate/backend/internal/filestation/files_test.go +0 -59
  321. package/dist/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +0 -37
  322. package/dist/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +0 -113
  323. package/dist/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +0 -70
  324. package/dist/templates/native-go-delegate/frontend/src/delegate/copy.ts +0 -8
  325. package/dist/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +0 -11
  326. package/dist/templates/native-go-delegate/frontend/test/background-save.test.ts +0 -121
  327. package/dist/templates/native-go-delegate/frontend/test/delegate.test.ts +0 -145
  328. package/dist/templates/native-go-delegate/frontend/test/scope-settings.test.ts +0 -49
  329. package/dist/templates/native-go-delegate/test-frontend.sh +0 -12
  330. package/dist/templates/native-go-delegate/test.sh +0 -18
  331. package/dist/templates/native-go-jobs/BACKGROUND.md +0 -108
  332. package/dist/templates/native-go-jobs/backend/internal/app/background_on.go +0 -7
  333. package/dist/templates/native-go-jobs/backend/internal/app/background_routes_test.go +0 -90
  334. package/dist/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +0 -170
  335. package/dist/templates/native-go-jobs/frontend/src/background/i18n/de.json +0 -75
  336. package/dist/templates/native-go-jobs/frontend/src/background/i18n/en.json +0 -75
  337. package/dist/templates/native-go-jobs/frontend/src/background/i18n/es.json +0 -75
  338. package/dist/templates/native-go-jobs/frontend/src/background/i18n/fr.json +0 -75
  339. package/dist/templates/native-go-jobs/frontend/src/background/i18n/it.json +0 -75
  340. package/dist/templates/native-go-jobs/frontend/src/background/i18n/ja.json +0 -75
  341. package/dist/templates/native-go-jobs/frontend/src/background/i18n/ko.json +0 -75
  342. package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +0 -75
  343. package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +0 -75
  344. package/dist/templates/native-go-jobs/frontend/src/background/i18n.ts +0 -19
  345. package/dist/templates/native-go-jobs/frontend/src/background/picker-provider.ts +0 -12
  346. package/dist/templates/native-go-jobs/frontend/src/background/request-key.ts +0 -5
  347. package/dist/templates/native-go-jobs/frontend/test/background.test.ts +0 -205
  348. package/dist/templates/native-go-root-ops/backend/internal/app/executor.go +0 -140
  349. package/dist/templates/native-go-root-ops/backend/internal/app/executor_test.go +0 -117
  350. package/dist/templates/native-go-root-ops/root/whoami.sh +0 -3
  351. package/dist/templates/native-go-vue/README.md +0 -47
  352. package/dist/templates/native-go-vue/frontend/DESIGN.md +0 -61
  353. package/dist/templates/native-go-vue/frontend/package-lock.json +0 -2530
  354. package/dist/templates/native-go-vue/frontend/package.json +0 -6
  355. package/dist/templates/native-go-vue/frontend/src/App.vue +0 -96
  356. package/dist/templates/native-go-vue/frontend/src/CapabilityPanels.vue +0 -6
  357. package/dist/templates/native-go-vue/frontend/src/context.ts +0 -78
  358. package/dist/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +0 -70
  359. package/dist/templates/native-go-vue/frontend/src/delegate/catalogs.ts +0 -11
  360. package/dist/templates/native-go-vue/frontend/src/delegate/copy.test.ts +0 -12
  361. package/dist/templates/native-go-vue/frontend/src/delegate/copy.ts +0 -4
  362. package/dist/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +0 -23
  363. package/dist/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +0 -24
  364. package/dist/templates/native-go-vue/frontend/src/delegate/facade.test.ts +0 -100
  365. package/dist/templates/native-go-vue/frontend/src/delegate/facade.ts +0 -85
  366. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/de.json +0 -47
  367. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/en.json +0 -47
  368. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/es.json +0 -47
  369. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +0 -47
  370. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/it.json +0 -47
  371. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +0 -47
  372. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +0 -47
  373. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +0 -42
  374. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +0 -42
  375. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +0 -42
  376. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +0 -42
  377. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +0 -42
  378. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +0 -42
  379. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +0 -42
  380. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +0 -42
  381. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +0 -42
  382. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +0 -47
  383. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +0 -47
  384. package/dist/templates/native-go-vue/frontend/src/delegate/long-running.ts +0 -57
  385. package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +0 -12
  386. package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.ts +0 -24
  387. package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +0 -12
  388. package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +0 -21
  389. package/dist/templates/native-go-vue/frontend/src/files/FileBrowser.vue +0 -131
  390. package/dist/templates/native-go-vue/frontend/src/files/FilesPage.vue +0 -35
  391. package/dist/templates/native-go-vue/frontend/src/files/files.test.ts +0 -100
  392. package/dist/templates/native-go-vue/frontend/src/files/provider.test.ts +0 -48
  393. package/dist/templates/native-go-vue/frontend/src/files/transfers.test.ts +0 -27
  394. package/dist/templates/native-go-vue/frontend/src/files/transfers.ts +0 -25
  395. package/dist/templates/native-go-vue/frontend/src/i18n/de.json +0 -20
  396. package/dist/templates/native-go-vue/frontend/src/i18n/en.json +0 -20
  397. package/dist/templates/native-go-vue/frontend/src/i18n/es.json +0 -20
  398. package/dist/templates/native-go-vue/frontend/src/i18n/fr.json +0 -20
  399. package/dist/templates/native-go-vue/frontend/src/i18n/it.json +0 -20
  400. package/dist/templates/native-go-vue/frontend/src/i18n/ja.json +0 -20
  401. package/dist/templates/native-go-vue/frontend/src/i18n/ko.json +0 -20
  402. package/dist/templates/native-go-vue/frontend/src/i18n/zh-CN.json +0 -20
  403. package/dist/templates/native-go-vue/frontend/src/i18n/zh-TW.json +0 -20
  404. package/dist/templates/native-go-vue/frontend/src/i18n.ts +0 -13
  405. package/dist/templates/native-go-vue/frontend/src/identity/DESIGN.md +0 -46
  406. package/dist/templates/native-go-vue/frontend/src/identity/LoginPage.vue +0 -78
  407. package/dist/templates/native-go-vue/frontend/src/identity/i18n/de.json +0 -27
  408. package/dist/templates/native-go-vue/frontend/src/identity/i18n/en.json +0 -27
  409. package/dist/templates/native-go-vue/frontend/src/identity/i18n/es.json +0 -27
  410. package/dist/templates/native-go-vue/frontend/src/identity/i18n/fr.json +0 -27
  411. package/dist/templates/native-go-vue/frontend/src/identity/i18n/it.json +0 -27
  412. package/dist/templates/native-go-vue/frontend/src/identity/i18n/ja.json +0 -27
  413. package/dist/templates/native-go-vue/frontend/src/identity/i18n/ko.json +0 -27
  414. package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +0 -27
  415. package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +0 -27
  416. package/dist/templates/native-go-vue/frontend/src/identity/i18n.ts +0 -14
  417. package/dist/templates/native-go-vue/frontend/src/identity/login.test.ts +0 -32
  418. package/dist/templates/native-go-vue/frontend/src/identity/session.test.ts +0 -33
  419. package/dist/templates/native-go-vue/frontend/src/identity/session.ts +0 -74
  420. package/dist/templates/native-go-vue/frontend/src/main.ts +0 -32
  421. package/dist/templates/native-go-vue/frontend/src/nas/NasPicker.vue +0 -42
  422. package/dist/templates/native-go-vue/frontend/src/nas/contract.ts +0 -12
  423. package/dist/templates/native-go-vue/frontend/src/nas/destination.test.ts +0 -48
  424. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +0 -41
  425. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +0 -41
  426. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +0 -41
  427. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +0 -41
  428. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +0 -41
  429. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +0 -41
  430. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +0 -41
  431. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +0 -41
  432. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +0 -41
  433. package/dist/templates/native-go-vue/frontend/src/nas/i18n.ts +0 -2
  434. package/dist/templates/native-go-vue/frontend/src/nas/locale.ts +0 -24
  435. package/dist/templates/native-go-vue/frontend/src/nas/provider.ts +0 -50
  436. package/dist/templates/native-go-vue/frontend/src/nas/use-request.ts +0 -18
  437. package/dist/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +0 -39
  438. package/dist/templates/native-go-vue/frontend/src/shell/AppShell.vue +0 -48
  439. package/dist/templates/native-go-vue/frontend/src/shell/i18n/de.json +0 -4
  440. package/dist/templates/native-go-vue/frontend/src/shell/i18n/en.json +0 -4
  441. package/dist/templates/native-go-vue/frontend/src/shell/i18n/es.json +0 -4
  442. package/dist/templates/native-go-vue/frontend/src/shell/i18n/fr.json +0 -4
  443. package/dist/templates/native-go-vue/frontend/src/shell/i18n/it.json +0 -4
  444. package/dist/templates/native-go-vue/frontend/src/shell/i18n/ja.json +0 -4
  445. package/dist/templates/native-go-vue/frontend/src/shell/i18n/ko.json +0 -4
  446. package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +0 -4
  447. package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +0 -4
  448. package/dist/templates/native-go-vue/frontend/src/shell/i18n.ts +0 -17
  449. package/dist/templates/native-go-vue/frontend/src/shell/pages.ts +0 -15
  450. package/dist/templates/native-go-vue/frontend/src/style.css +0 -27
  451. package/dist/templates/native-go-vue/frontend/test/apps.test.ts +0 -57
  452. package/dist/templates/native-go-vue/frontend/test/native-controls.test.ts +0 -27
  453. package/dist/templates/native-go-vue/frontend/test/portal-settings.test.ts +0 -71
  454. package/dist/templates/native-go-vue/frontend/test/shell-i18n.test.ts +0 -50
  455. package/dist/templates/native-go-vue/frontend/test/shell-ui.test.ts +0 -20
  456. package/dist/templates/native-go-vue/frontend/test/shell.test.ts +0 -30
  457. package/dist/templates/native-go-vue/frontend/tsconfig.json +0 -1
  458. package/dist/templates/native-go-vue/frontend/vite.config.ts +0 -10
  459. package/dist/templates/native-go-vue/gitignore +0 -2
  460. package/templates/_daemon/fixture_linux_test.go +0 -15
  461. package/templates/_daemon/fixture_other_test.go +0 -7
  462. package/templates/_daemon/go.mod +0 -5
  463. package/templates/_daemon/main.go +0 -611
  464. package/templates/_daemon/main_test.go +0 -315
  465. package/templates/_daemon/process_linux.go +0 -55
  466. package/templates/_daemon/process_linux_test.go +0 -161
  467. package/templates/_daemon/process_other.go +0 -14
  468. package/templates/_daemon/testdata/child.go +0 -44
  469. package/templates/_executor/README.md +0 -318
  470. package/templates/_executor/anchor.go +0 -156
  471. package/templates/_executor/anchor_test.go +0 -161
  472. package/templates/_executor/apppriv_review_test.go +0 -28
  473. package/templates/_executor/auth_presence_review_test.go +0 -38
  474. package/templates/_executor/cancel_contract_test.go +0 -236
  475. package/templates/_executor/cmd/lifecycle/main.go +0 -42
  476. package/templates/_executor/cookie_review_test.go +0 -27
  477. package/templates/_executor/copy.go +0 -64
  478. package/templates/_executor/copy_test.go +0 -88
  479. package/templates/_executor/digest_review_test.go +0 -120
  480. package/templates/_executor/directories.go +0 -40
  481. package/templates/_executor/dsm.go +0 -369
  482. package/templates/_executor/dsm_test.go +0 -290
  483. package/templates/_executor/executor.go +0 -735
  484. package/templates/_executor/executor_test.go +0 -314
  485. package/templates/_executor/go.mod +0 -5
  486. package/templates/_executor/identity.go +0 -74
  487. package/templates/_executor/identity_kernel_linux_test.go +0 -60
  488. package/templates/_executor/identity_linux.go +0 -82
  489. package/templates/_executor/identity_security_test.go +0 -43
  490. package/templates/_executor/internal/lifecycle/lifecycle.go +0 -95
  491. package/templates/_executor/internal/lifecycle/lifecycle_test.go +0 -232
  492. package/templates/_executor/internal/taskscript/boot.sh +0 -31
  493. package/templates/_executor/internal/taskscript/cmd/main.go +0 -19
  494. package/templates/_executor/internal/taskscript/control.sh +0 -31
  495. package/templates/_executor/internal/taskscript/tasks.go +0 -44
  496. package/templates/_executor/json_review_test.go +0 -40
  497. package/templates/_executor/lifecycle_test.go +0 -97
  498. package/templates/_executor/link_linux.go +0 -28
  499. package/templates/_executor/long_running_test.go +0 -530
  500. package/templates/_executor/main.go +0 -576
  501. package/templates/_executor/managed.go +0 -117
  502. package/templates/_executor/managed_test.go +0 -137
  503. package/templates/_executor/move_linux.go +0 -490
  504. package/templates/_executor/move_linux_test.go +0 -460
  505. package/templates/_executor/move_validation.go +0 -46
  506. package/templates/_executor/move_validation_test.go +0 -187
  507. package/templates/_executor/operations.go +0 -926
  508. package/templates/_executor/path_test.go +0 -35
  509. package/templates/_executor/pid.go +0 -37
  510. package/templates/_executor/pid_test.go +0 -113
  511. package/templates/_executor/platform_linux.go +0 -187
  512. package/templates/_executor/platform_linux_test.go +0 -191
  513. package/templates/_executor/platform_other.go +0 -76
  514. package/templates/_executor/process.go +0 -142
  515. package/templates/_executor/purge_log.go +0 -18
  516. package/templates/_executor/records.go +0 -242
  517. package/templates/_executor/scope_cancel_contract_test.go +0 -91
  518. package/templates/_executor/scope_client.go +0 -37
  519. package/templates/_executor/scope_contract.go +0 -12
  520. package/templates/_executor/selected_scope.go +0 -146
  521. package/templates/_executor/selected_scope_test.go +0 -186
  522. package/templates/_executor/socket_linux_test.go +0 -46
  523. package/templates/_executor/status_disabled_test.go +0 -33
  524. package/templates/_executor/store.go +0 -91
  525. package/templates/_executor/supervise.go +0 -109
  526. package/templates/_executor/supervise_test.go +0 -130
  527. package/templates/_executor/task_race_review_test.go +0 -47
  528. package/templates/_executor/tasks.go +0 -320
  529. package/templates/_executor/tasks_dsm71_test.go +0 -114
  530. package/templates/_executor/tasks_review_test.go +0 -43
  531. package/templates/_executor/tasks_test.go +0 -223
  532. package/templates/_executor/testdata/evidence/cleanup.json +0 -24
  533. package/templates/_executor/testdata/evidence/final-smoke.jsonl +0 -9
  534. package/templates/_executor/testdata/evidence/kernel-acl.json +0 -6
  535. package/templates/_executor/testdata/evidence/linux-tests.log +0 -123
  536. package/templates/_executor/testdata/evidence/live.jsonl +0 -23
  537. package/templates/_executor/testdata/evidence/storage.json +0 -90
  538. package/templates/_executor/testdata/evidence/validation.json +0 -55
  539. package/templates/_executor/testdata/live_probe.py +0 -98
  540. package/templates/_executor/upgrade_watch_test.go +0 -244
  541. package/templates/_executor/watch.go +0 -164
  542. package/templates/_executor/watch_test.go +0 -291
  543. package/templates/_executor/write_review_linux_test.go +0 -87
  544. package/templates/_gateway/auth.go +0 -101
  545. package/templates/_gateway/auth_test.go +0 -216
  546. package/templates/_gateway/cgi.go +0 -133
  547. package/templates/_gateway/cgi_test.go +0 -156
  548. package/templates/_gateway/csrf.go +0 -73
  549. package/templates/_gateway/csrf_test.go +0 -155
  550. package/templates/_gateway/directory.go +0 -108
  551. package/templates/_gateway/directory_test.go +0 -202
  552. package/templates/_gateway/gateway.go +0 -412
  553. package/templates/_gateway/gateway_test.go +0 -676
  554. package/templates/_gateway/go.mod +0 -5
  555. package/templates/_gateway/groups.go +0 -66
  556. package/templates/_gateway/main.go +0 -45
  557. package/templates/_shared/AGENTS.md +0 -146
  558. package/templates/_shared/CLAUDE.md +0 -1
  559. package/templates/_shared/GO-LICENSE +0 -27
  560. package/templates/_shared/GO-PATENTS +0 -22
  561. package/templates/_shared/LICENSES/TEMPLATE.txt +0 -21
  562. package/templates/_shared/third-party-notices.mjs +0 -51
  563. package/templates/binary/LICENSES/GO-LICENSE +0 -27
  564. package/templates/binary/LICENSES/GO-PATENTS +0 -22
  565. package/templates/binary/dsm-package.yaml +0 -46
  566. package/templates/binary/example/main.go +0 -16
  567. package/templates/binary/gitignore +0 -2
  568. package/templates/binary/i18n/messages/de.json +0 -4
  569. package/templates/binary/i18n/messages/en.json +0 -4
  570. package/templates/binary/i18n/messages/es.json +0 -4
  571. package/templates/binary/i18n/messages/fr.json +0 -4
  572. package/templates/binary/i18n/messages/it.json +0 -4
  573. package/templates/binary/i18n/messages/ja.json +0 -4
  574. package/templates/binary/i18n/messages/ko.json +0 -4
  575. package/templates/binary/i18n/messages/zh-CN.json +0 -4
  576. package/templates/binary/i18n/messages/zh-TW.json +0 -4
  577. package/templates/binary/ui/app.css +0 -4
  578. package/templates/binary/ui/app.js +0 -32
  579. package/templates/compose/compose.yaml +0 -8
  580. package/templates/compose/synology-app.yaml +0 -16
  581. package/templates/native-authorization/AuthorizationGate.vue +0 -91
  582. package/templates/native-authorization/i18n/de.json +0 -37
  583. package/templates/native-authorization/i18n/en.json +0 -37
  584. package/templates/native-authorization/i18n/es.json +0 -37
  585. package/templates/native-authorization/i18n/fr.json +0 -37
  586. package/templates/native-authorization/i18n/index.ts +0 -15
  587. package/templates/native-authorization/i18n/it.json +0 -37
  588. package/templates/native-authorization/i18n/ja.json +0 -37
  589. package/templates/native-authorization/i18n/ko.json +0 -37
  590. package/templates/native-authorization/i18n/zh-CN.json +0 -37
  591. package/templates/native-authorization/i18n/zh-TW.json +0 -37
  592. package/templates/native-go/README.md +0 -459
  593. package/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +0 -61
  594. package/templates/native-go/backend/cmd/app/main.go +0 -95
  595. package/templates/native-go/backend/cmd/background-worker/main.go +0 -38
  596. package/templates/native-go/backend/go.mod +0 -9
  597. package/templates/native-go/backend/go.sum +0 -4
  598. package/templates/native-go/backend/internal/api/cgi_framing_test.go +0 -32
  599. package/templates/native-go/backend/internal/api/cookie_review_test.go +0 -28
  600. package/templates/native-go/backend/internal/api/deadline_test.go +0 -114
  601. package/templates/native-go/backend/internal/api/dsm-session.go +0 -54
  602. package/templates/native-go/backend/internal/api/dsm-session_test.go +0 -51
  603. package/templates/native-go/backend/internal/api/entry_test.go +0 -47
  604. package/templates/native-go/backend/internal/api/errors.go +0 -47
  605. package/templates/native-go/backend/internal/api/permissions.go +0 -161
  606. package/templates/native-go/backend/internal/api/permissions.json +0 -5
  607. package/templates/native-go/backend/internal/api/permissions_test.go +0 -113
  608. package/templates/native-go/backend/internal/api/policy_fixture_test.go +0 -8
  609. package/templates/native-go/backend/internal/api/registry.go +0 -142
  610. package/templates/native-go/backend/internal/api/registry_test.go +0 -344
  611. package/templates/native-go/backend/internal/api/resource_limits_test.go +0 -87
  612. package/templates/native-go/backend/internal/api/sdk-permissions.json +0 -59
  613. package/templates/native-go/backend/internal/api/sdk_policy_test.go +0 -31
  614. package/templates/native-go/backend/internal/api/server.go +0 -305
  615. package/templates/native-go/backend/internal/api/testdata/permissions-cases.json +0 -172
  616. package/templates/native-go/backend/internal/app/background.go +0 -249
  617. package/templates/native-go/backend/internal/app/background_none.go +0 -8
  618. package/templates/native-go/backend/internal/app/background_owner.go +0 -38
  619. package/templates/native-go/backend/internal/app/background_owner_test.go +0 -163
  620. package/templates/native-go/backend/internal/app/background_schedule.go +0 -69
  621. package/templates/native-go/backend/internal/app/background_schedule_test.go +0 -62
  622. package/templates/native-go/backend/internal/app/background_test.go +0 -320
  623. package/templates/native-go/backend/internal/app/delegate_config.go +0 -57
  624. package/templates/native-go/backend/internal/app/delegate_config_test.go +0 -28
  625. package/templates/native-go/backend/internal/app/delegate_none.go +0 -5
  626. package/templates/native-go/backend/internal/app/identity.go +0 -20
  627. package/templates/native-go/backend/internal/app/identity_test.go +0 -15
  628. package/templates/native-go/backend/internal/app/migrations.go +0 -41
  629. package/templates/native-go/backend/internal/app/migrations_test.go +0 -41
  630. package/templates/native-go/backend/internal/app/portal.go +0 -30
  631. package/templates/native-go/backend/internal/app/portal_test.go +0 -55
  632. package/templates/native-go/backend/internal/app/root_none.go +0 -9
  633. package/templates/native-go/backend/internal/app/routes.go +0 -137
  634. package/templates/native-go/backend/internal/app/routes_test.go +0 -165
  635. package/templates/native-go/backend/internal/app/session_files.go +0 -9
  636. package/templates/native-go/backend/internal/app/session_files_test.go +0 -14
  637. package/templates/native-go/backend/internal/app/shared_folder.go +0 -144
  638. package/templates/native-go/backend/internal/app/shared_folder_test.go +0 -158
  639. package/templates/native-go/backend/internal/background/access.go +0 -57
  640. package/templates/native-go/backend/internal/background/lock_test.go +0 -131
  641. package/templates/native-go/backend/internal/background/owner_test.go +0 -118
  642. package/templates/native-go/backend/internal/background/runner.go +0 -185
  643. package/templates/native-go/backend/internal/background/runner_test.go +0 -209
  644. package/templates/native-go/backend/internal/background/schedule.go +0 -336
  645. package/templates/native-go/backend/internal/background/schedule_test.go +0 -368
  646. package/templates/native-go/backend/internal/background/store.go +0 -825
  647. package/templates/native-go/backend/internal/background/store_test.go +0 -365
  648. package/templates/native-go/backend/internal/datamigrate/migrate.go +0 -191
  649. package/templates/native-go/backend/internal/datamigrate/migrate_test.go +0 -177
  650. package/templates/native-go/backend/internal/dsm/admin.go +0 -76
  651. package/templates/native-go/backend/internal/dsm/admin_linux.go +0 -110
  652. package/templates/native-go/backend/internal/dsm/admin_linux_test.go +0 -105
  653. package/templates/native-go/backend/internal/dsm/admin_other.go +0 -15
  654. package/templates/native-go/backend/internal/dsm/admin_test.go +0 -67
  655. package/templates/native-go/backend/internal/dsm/apppriv.go +0 -30
  656. package/templates/native-go/backend/internal/dsm/auth.go +0 -94
  657. package/templates/native-go/backend/internal/dsm/auth_test.go +0 -159
  658. package/templates/native-go/backend/internal/dsm/bridge_file.go +0 -75
  659. package/templates/native-go/backend/internal/dsm/bridge_file_test.go +0 -57
  660. package/templates/native-go/backend/internal/dsm/entry.go +0 -177
  661. package/templates/native-go/backend/internal/dsm/entry_test.go +0 -315
  662. package/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
  663. package/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
  664. package/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
  665. package/templates/native-go/backend/internal/dsm/native/admin_check.c +0 -28
  666. package/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
  667. package/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
  668. package/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
  669. package/templates/native-go/backend/internal/dsm/native/apppriv_check.c +0 -33
  670. package/templates/native-go/backend/internal/dsm/native/build.sh +0 -18
  671. package/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +0 -400
  672. package/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +0 -501
  673. package/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +0 -5
  674. package/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +0 -21
  675. package/templates/native-go/backend/internal/dsm/native/provenance.json +0 -18
  676. package/templates/native-go/backend/internal/filestation/browse_test.go +0 -67
  677. package/templates/native-go/backend/internal/filestation/check_permission.go +0 -71
  678. package/templates/native-go/backend/internal/filestation/check_permission_test.go +0 -77
  679. package/templates/native-go/backend/internal/filestation/client.go +0 -337
  680. package/templates/native-go/backend/internal/filestation/client_test.go +0 -155
  681. package/templates/native-go/backend/internal/filestation/doc.go +0 -4
  682. package/templates/native-go/backend/internal/filestation/download_dsm71_test.go +0 -82
  683. package/templates/native-go/backend/internal/filestation/http.go +0 -70
  684. package/templates/native-go/backend/internal/filestation/http_test.go +0 -188
  685. package/templates/native-go/backend/internal/filestation/operations_test.go +0 -206
  686. package/templates/native-go/backend/internal/filestation/read_file_test.go +0 -89
  687. package/templates/native-go/backend/internal/filestation/sdk_policy_test.go +0 -39
  688. package/templates/native-go/backend/internal/filestation/service.go +0 -254
  689. package/templates/native-go/backend/internal/filestation/service_test.go +0 -74
  690. package/templates/native-go/backend/internal/filestation/upload_stream.go +0 -76
  691. package/templates/native-go/backend/internal/filestation/upload_stream_test.go +0 -77
  692. package/templates/native-go/backend/internal/filestation/write.go +0 -32
  693. package/templates/native-go/backend/internal/filestation/write_test.go +0 -124
  694. package/templates/native-go/backend/internal/identity/README.md +0 -59
  695. package/templates/native-go/backend/internal/identity/dsm.go +0 -115
  696. package/templates/native-go/backend/internal/identity/http.go +0 -291
  697. package/templates/native-go/backend/internal/identity/identity_test.go +0 -530
  698. package/templates/native-go/backend/internal/identity/service.go +0 -159
  699. package/templates/native-go/backend/internal/identity/store.go +0 -109
  700. package/templates/native-go/backend/internal/jsonlimits/limits.go +0 -48
  701. package/templates/native-go/backend/internal/jsonlimits/limits_test.go +0 -52
  702. package/templates/native-go/backend/internal/portal/portal.go +0 -138
  703. package/templates/native-go/backend/internal/portal/portal_test.go +0 -89
  704. package/templates/native-go/dsm-package.yaml +0 -71
  705. package/templates/native-go/gitignore +0 -1
  706. package/templates/native-go/i18n/glossary.json +0 -663
  707. package/templates/native-go/i18n/messages/de.json +0 -29
  708. package/templates/native-go/i18n/messages/en.json +0 -29
  709. package/templates/native-go/i18n/messages/es.json +0 -29
  710. package/templates/native-go/i18n/messages/fr.json +0 -29
  711. package/templates/native-go/i18n/messages/it.json +0 -29
  712. package/templates/native-go/i18n/messages/ja.json +0 -29
  713. package/templates/native-go/i18n/messages/ko.json +0 -29
  714. package/templates/native-go/i18n/messages/zh-CN.json +0 -29
  715. package/templates/native-go/i18n/messages/zh-TW.json +0 -29
  716. package/templates/native-go/ui/app.css +0 -45
  717. package/templates/native-go/ui/app.js +0 -111
  718. package/templates/native-go-delegate/DELEGATE.md +0 -263
  719. package/templates/native-go-delegate/backend/cmd/background-worker/main.go +0 -48
  720. package/templates/native-go-delegate/backend/internal/app/delegate.go +0 -25
  721. package/templates/native-go-delegate/backend/internal/app/delegate_on.go +0 -5
  722. package/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +0 -31
  723. package/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +0 -174
  724. package/templates/native-go-delegate/backend/internal/background/delegated.go +0 -277
  725. package/templates/native-go-delegate/backend/internal/background/delegated_moves.go +0 -270
  726. package/templates/native-go-delegate/backend/internal/background/delegated_test.go +0 -34
  727. package/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +0 -410
  728. package/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +0 -15
  729. package/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +0 -95
  730. package/templates/native-go-delegate/backend/internal/delegate/client.go +0 -151
  731. package/templates/native-go-delegate/backend/internal/delegate/client_test.go +0 -214
  732. package/templates/native-go-delegate/backend/internal/delegate/destination.go +0 -110
  733. package/templates/native-go-delegate/backend/internal/delegate/destination_state.go +0 -117
  734. package/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +0 -60
  735. package/templates/native-go-delegate/backend/internal/delegate/destination_test.go +0 -116
  736. package/templates/native-go-delegate/backend/internal/delegate/example.go +0 -81
  737. package/templates/native-go-delegate/backend/internal/delegate/example_test.go +0 -91
  738. package/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +0 -511
  739. package/templates/native-go-delegate/backend/internal/delegate/files.go +0 -132
  740. package/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +0 -92
  741. package/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +0 -99
  742. package/templates/native-go-delegate/backend/internal/delegate/move.go +0 -348
  743. package/templates/native-go-delegate/backend/internal/delegate/move_test.go +0 -351
  744. package/templates/native-go-delegate/backend/internal/delegate/operations_list.go +0 -65
  745. package/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +0 -114
  746. package/templates/native-go-delegate/backend/internal/delegate/retry.go +0 -106
  747. package/templates/native-go-delegate/backend/internal/delegate/retry_test.go +0 -143
  748. package/templates/native-go-delegate/backend/internal/delegate/service.go +0 -364
  749. package/templates/native-go-delegate/backend/internal/delegate/service_test.go +0 -318
  750. package/templates/native-go-delegate/backend/internal/delegate/staging.go +0 -121
  751. package/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +0 -51
  752. package/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +0 -112
  753. package/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +0 -137
  754. package/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +0 -101
  755. package/templates/native-go-delegate/backend/internal/delegate/worker.go +0 -225
  756. package/templates/native-go-delegate/backend/internal/filestation/files.go +0 -43
  757. package/templates/native-go-delegate/backend/internal/filestation/files_test.go +0 -59
  758. package/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +0 -37
  759. package/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +0 -113
  760. package/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +0 -70
  761. package/templates/native-go-delegate/frontend/src/delegate/copy.ts +0 -8
  762. package/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +0 -11
  763. package/templates/native-go-delegate/frontend/test/background-save.test.ts +0 -121
  764. package/templates/native-go-delegate/frontend/test/delegate.test.ts +0 -145
  765. package/templates/native-go-delegate/frontend/test/scope-settings.test.ts +0 -49
  766. package/templates/native-go-delegate/test-frontend.sh +0 -12
  767. package/templates/native-go-delegate/test.sh +0 -18
  768. package/templates/native-go-jobs/BACKGROUND.md +0 -108
  769. package/templates/native-go-jobs/backend/internal/app/background_on.go +0 -7
  770. package/templates/native-go-jobs/backend/internal/app/background_routes_test.go +0 -90
  771. package/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +0 -170
  772. package/templates/native-go-jobs/frontend/src/background/i18n/de.json +0 -75
  773. package/templates/native-go-jobs/frontend/src/background/i18n/en.json +0 -75
  774. package/templates/native-go-jobs/frontend/src/background/i18n/es.json +0 -75
  775. package/templates/native-go-jobs/frontend/src/background/i18n/fr.json +0 -75
  776. package/templates/native-go-jobs/frontend/src/background/i18n/it.json +0 -75
  777. package/templates/native-go-jobs/frontend/src/background/i18n/ja.json +0 -75
  778. package/templates/native-go-jobs/frontend/src/background/i18n/ko.json +0 -75
  779. package/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +0 -75
  780. package/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +0 -75
  781. package/templates/native-go-jobs/frontend/src/background/i18n.ts +0 -19
  782. package/templates/native-go-jobs/frontend/src/background/picker-provider.ts +0 -12
  783. package/templates/native-go-jobs/frontend/src/background/request-key.ts +0 -5
  784. package/templates/native-go-jobs/frontend/test/background.test.ts +0 -205
  785. package/templates/native-go-root-ops/backend/internal/app/executor.go +0 -140
  786. package/templates/native-go-root-ops/backend/internal/app/executor_test.go +0 -117
  787. package/templates/native-go-root-ops/root/whoami.sh +0 -3
  788. package/templates/native-go-vue/README.md +0 -47
  789. package/templates/native-go-vue/frontend/DESIGN.md +0 -61
  790. package/templates/native-go-vue/frontend/package-lock.json +0 -2530
  791. package/templates/native-go-vue/frontend/package.json +0 -6
  792. package/templates/native-go-vue/frontend/src/App.vue +0 -96
  793. package/templates/native-go-vue/frontend/src/CapabilityPanels.vue +0 -6
  794. package/templates/native-go-vue/frontend/src/context.ts +0 -78
  795. package/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +0 -70
  796. package/templates/native-go-vue/frontend/src/delegate/catalogs.ts +0 -11
  797. package/templates/native-go-vue/frontend/src/delegate/copy.test.ts +0 -12
  798. package/templates/native-go-vue/frontend/src/delegate/copy.ts +0 -4
  799. package/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +0 -23
  800. package/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +0 -24
  801. package/templates/native-go-vue/frontend/src/delegate/facade.test.ts +0 -100
  802. package/templates/native-go-vue/frontend/src/delegate/facade.ts +0 -85
  803. package/templates/native-go-vue/frontend/src/delegate/i18n/de.json +0 -47
  804. package/templates/native-go-vue/frontend/src/delegate/i18n/en.json +0 -47
  805. package/templates/native-go-vue/frontend/src/delegate/i18n/es.json +0 -47
  806. package/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +0 -47
  807. package/templates/native-go-vue/frontend/src/delegate/i18n/it.json +0 -47
  808. package/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +0 -47
  809. package/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +0 -47
  810. package/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +0 -42
  811. package/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +0 -42
  812. package/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +0 -42
  813. package/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +0 -42
  814. package/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +0 -42
  815. package/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +0 -42
  816. package/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +0 -42
  817. package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +0 -42
  818. package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +0 -42
  819. package/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +0 -47
  820. package/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +0 -47
  821. package/templates/native-go-vue/frontend/src/delegate/long-running.ts +0 -57
  822. package/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +0 -12
  823. package/templates/native-go-vue/frontend/src/delegate/save-copy.ts +0 -24
  824. package/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +0 -12
  825. package/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +0 -21
  826. package/templates/native-go-vue/frontend/src/files/FileBrowser.vue +0 -131
  827. package/templates/native-go-vue/frontend/src/files/FilesPage.vue +0 -35
  828. package/templates/native-go-vue/frontend/src/files/files.test.ts +0 -100
  829. package/templates/native-go-vue/frontend/src/files/provider.test.ts +0 -48
  830. package/templates/native-go-vue/frontend/src/files/transfers.test.ts +0 -27
  831. package/templates/native-go-vue/frontend/src/files/transfers.ts +0 -25
  832. package/templates/native-go-vue/frontend/src/i18n/de.json +0 -20
  833. package/templates/native-go-vue/frontend/src/i18n/en.json +0 -20
  834. package/templates/native-go-vue/frontend/src/i18n/es.json +0 -20
  835. package/templates/native-go-vue/frontend/src/i18n/fr.json +0 -20
  836. package/templates/native-go-vue/frontend/src/i18n/it.json +0 -20
  837. package/templates/native-go-vue/frontend/src/i18n/ja.json +0 -20
  838. package/templates/native-go-vue/frontend/src/i18n/ko.json +0 -20
  839. package/templates/native-go-vue/frontend/src/i18n/zh-CN.json +0 -20
  840. package/templates/native-go-vue/frontend/src/i18n/zh-TW.json +0 -20
  841. package/templates/native-go-vue/frontend/src/i18n.ts +0 -13
  842. package/templates/native-go-vue/frontend/src/identity/DESIGN.md +0 -46
  843. package/templates/native-go-vue/frontend/src/identity/LoginPage.vue +0 -78
  844. package/templates/native-go-vue/frontend/src/identity/i18n/de.json +0 -27
  845. package/templates/native-go-vue/frontend/src/identity/i18n/en.json +0 -27
  846. package/templates/native-go-vue/frontend/src/identity/i18n/es.json +0 -27
  847. package/templates/native-go-vue/frontend/src/identity/i18n/fr.json +0 -27
  848. package/templates/native-go-vue/frontend/src/identity/i18n/it.json +0 -27
  849. package/templates/native-go-vue/frontend/src/identity/i18n/ja.json +0 -27
  850. package/templates/native-go-vue/frontend/src/identity/i18n/ko.json +0 -27
  851. package/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +0 -27
  852. package/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +0 -27
  853. package/templates/native-go-vue/frontend/src/identity/i18n.ts +0 -14
  854. package/templates/native-go-vue/frontend/src/identity/login.test.ts +0 -32
  855. package/templates/native-go-vue/frontend/src/identity/session.test.ts +0 -33
  856. package/templates/native-go-vue/frontend/src/identity/session.ts +0 -74
  857. package/templates/native-go-vue/frontend/src/main.ts +0 -32
  858. package/templates/native-go-vue/frontend/src/nas/NasPicker.vue +0 -42
  859. package/templates/native-go-vue/frontend/src/nas/contract.ts +0 -12
  860. package/templates/native-go-vue/frontend/src/nas/destination.test.ts +0 -48
  861. package/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +0 -41
  862. package/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +0 -41
  863. package/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +0 -41
  864. package/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +0 -41
  865. package/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +0 -41
  866. package/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +0 -41
  867. package/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +0 -41
  868. package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +0 -41
  869. package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +0 -41
  870. package/templates/native-go-vue/frontend/src/nas/i18n.ts +0 -2
  871. package/templates/native-go-vue/frontend/src/nas/locale.ts +0 -24
  872. package/templates/native-go-vue/frontend/src/nas/provider.ts +0 -50
  873. package/templates/native-go-vue/frontend/src/nas/use-request.ts +0 -18
  874. package/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +0 -39
  875. package/templates/native-go-vue/frontend/src/shell/AppShell.vue +0 -48
  876. package/templates/native-go-vue/frontend/src/shell/i18n/de.json +0 -4
  877. package/templates/native-go-vue/frontend/src/shell/i18n/en.json +0 -4
  878. package/templates/native-go-vue/frontend/src/shell/i18n/es.json +0 -4
  879. package/templates/native-go-vue/frontend/src/shell/i18n/fr.json +0 -4
  880. package/templates/native-go-vue/frontend/src/shell/i18n/it.json +0 -4
  881. package/templates/native-go-vue/frontend/src/shell/i18n/ja.json +0 -4
  882. package/templates/native-go-vue/frontend/src/shell/i18n/ko.json +0 -4
  883. package/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +0 -4
  884. package/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +0 -4
  885. package/templates/native-go-vue/frontend/src/shell/i18n.ts +0 -17
  886. package/templates/native-go-vue/frontend/src/shell/pages.ts +0 -15
  887. package/templates/native-go-vue/frontend/src/style.css +0 -27
  888. package/templates/native-go-vue/frontend/test/apps.test.ts +0 -57
  889. package/templates/native-go-vue/frontend/test/native-controls.test.ts +0 -27
  890. package/templates/native-go-vue/frontend/test/portal-settings.test.ts +0 -71
  891. package/templates/native-go-vue/frontend/test/shell-i18n.test.ts +0 -50
  892. package/templates/native-go-vue/frontend/test/shell-ui.test.ts +0 -20
  893. package/templates/native-go-vue/frontend/test/shell.test.ts +0 -30
  894. package/templates/native-go-vue/frontend/tsconfig.json +0 -1
  895. package/templates/native-go-vue/frontend/vite.config.ts +0 -10
  896. package/templates/native-go-vue/gitignore +0 -2
  897. /package/{dist/templates/_daemon → assets/go/daemon}/fixture_linux_test.go +0 -0
  898. /package/{dist/templates/_daemon → assets/go/daemon}/fixture_other_test.go +0 -0
  899. /package/{dist/templates/_daemon → assets/go/daemon}/go.mod +0 -0
  900. /package/{dist/templates/_daemon → assets/go/daemon}/main.go +0 -0
  901. /package/{dist/templates/_daemon → assets/go/daemon}/main_test.go +0 -0
  902. /package/{dist/templates/_daemon → assets/go/daemon}/process_linux.go +0 -0
  903. /package/{dist/templates/_daemon → assets/go/daemon}/process_linux_test.go +0 -0
  904. /package/{dist/templates/_daemon → assets/go/daemon}/process_other.go +0 -0
  905. /package/{dist/templates/_daemon → assets/go/daemon}/testdata/child.go +0 -0
  906. /package/{dist/templates/_gateway → assets/go/gateway}/auth.go +0 -0
  907. /package/{dist/templates/_gateway → assets/go/gateway}/auth_test.go +0 -0
  908. /package/{dist/templates/_gateway → assets/go/gateway}/cgi.go +0 -0
  909. /package/{dist/templates/_gateway → assets/go/gateway}/cgi_test.go +0 -0
  910. /package/{dist/templates/_gateway → assets/go/gateway}/csrf.go +0 -0
  911. /package/{dist/templates/_gateway → assets/go/gateway}/csrf_test.go +0 -0
  912. /package/{dist/templates/_gateway → assets/go/gateway}/directory.go +0 -0
  913. /package/{dist/templates/_gateway → assets/go/gateway}/directory_test.go +0 -0
  914. /package/{dist/templates/_gateway → assets/go/gateway}/gateway.go +0 -0
  915. /package/{dist/templates/_gateway → assets/go/gateway}/gateway_test.go +0 -0
  916. /package/{dist/templates/_gateway → assets/go/gateway}/go.mod +0 -0
  917. /package/{dist/templates/_gateway → assets/go/gateway}/groups.go +0 -0
  918. /package/{dist/templates/_gateway → assets/go/gateway}/main.go +0 -0
  919. /package/{dist/templates/_shared → assets/licenses}/GO-LICENSE +0 -0
  920. /package/{dist/templates/_shared → assets/licenses}/GO-PATENTS +0 -0
  921. /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
- })