@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,113 +0,0 @@
1
- <script setup lang="ts">
2
- import {computed,onBeforeUnmount,onMounted,ref} from 'vue'
3
- import {Button,Callout,SettingsSection} from '@synopackageland/ui'
4
- import type {BackgroundSaveFacade,BackgroundSaveStatus,DestinationGrant,DestinationState,SaveOperation} from './long-running'
5
- import {scopedPicker} from './scoped-picker'
6
- import {saveCopy,saveError} from './save-copy'
7
- import NasPicker from '../nas/NasPicker.vue'
8
- import type {NasProvider} from '../nas/contract'
9
- const props=defineProps<{sdk:BackgroundSaveFacade;admin:boolean;locale:string;picker?:{provider:NasProvider;keys:string[]}}>()
10
- const emit=defineEmits<{authorized:[grant:DestinationGrant]}>()
11
- const picking=ref(false),destinationKey=ref('')
12
- const copy=computed(()=>saveCopy(props.locale)),status=ref<BackgroundSaveStatus>(),grants=ref<DestinationGrant[]>([]),operations=ref<SaveOperation[]>([])
13
- const busy=ref(false),error=ref<unknown>(),notice=ref('')
14
- const destinations=ref<DestinationState[]>([])
15
- const pickerProvider=computed(()=>props.picker&&(status.value?.selection?scopedPicker(props.picker.provider,status.value.selection.root):status.value?.scopeMode==='install-selected'?undefined:props.picker.provider))
16
- let disposed=false,timer:ReturnType<typeof setInterval>|undefined
17
- // An acknowledged cancel keeps copying until the writer stops; poll, never resend.
18
- const canceling=(job:SaveOperation)=>job.state==='copying'&&job.code==='CANCEL_REQUESTED'
19
- const state=(job:SaveOperation)=>canceling(job)?'canceling':job.state==='committed'&&!job.receipt?.path?'uncertain':job.state
20
- const pending=(job:SaveOperation)=>['queued','copying'].includes(job.state)&&!canceling(job)
21
- function clear(){status.value=undefined;grants.value=[];operations.value=[];destinations.value=[];picking.value=false}
22
- async function refresh(){
23
- const [current,listed,jobs,choices]=await Promise.all([props.sdk.status(),props.sdk.list(),props.sdk.operations(),Promise.all((props.picker?.keys??[]).map(key=>props.sdk.destination(key)))])
24
- if(disposed)return
25
- // Display only an acknowledged snapshot; never infer authority from cached paths.
26
- if(!current||typeof current.disabled!=='boolean'||!Array.isArray(listed)||!Array.isArray(jobs))throw {code:'unavailable'}
27
- if(status.value?.selection?.generation!==current.selection?.generation||status.value?.selection?.scope!==current.selection?.scope)picking.value=false
28
- status.value=current;grants.value=choices.length?listed.filter(g=>choices.some(d=>d.status==='active'&&d.destination?.id===g.id)):listed;operations.value=jobs;destinations.value=choices
29
- }
30
- async function action(work:()=>Promise<void>){
31
- if(disposed||busy.value)return
32
- busy.value=true;error.value=undefined;notice.value=''
33
- try{await work()}
34
- catch(e){if(!disposed){clear();error.value=e}}
35
- finally{if(!disposed)busy.value=false}
36
- }
37
- const reload=()=>action(refresh)
38
- function authorized(grant:DestinationGrant){emit('authorized',grant);void reload()}
39
- const revoke=(id:string)=>action(async()=>{
40
- const result=await props.sdk.revoke({delegation_id:id})
41
- if(result?.revoked!==true)throw {code:'commit-uncertain'}
42
- await refresh();if(!disposed)notice.value=copy.value.revoked
43
- })
44
- const cancel=(job:SaveOperation)=>action(async()=>{await props.sdk.cancel({delegation_id:job.delegation_id,job_id:job.job_id});await refresh()})
45
- const toggle=()=>action(async()=>{
46
- if(!props.admin||!status.value)return
47
- const wasDisabled=status.value.disabled
48
- const result=wasDisabled?await props.sdk.enable():await props.sdk.disable()
49
- if(result?.disabled!==!wasDisabled)throw {code:'commit-uncertain'}
50
- await refresh()
51
- })
52
- const example=(key:string)=>action(async()=>{
53
- const job_id='example-'+Array.from(crypto.getRandomValues(new Uint8Array(16)),b=>b.toString(16).padStart(2,'0')).join('')
54
- await props.sdk.exportExample({key,job_id})
55
- await refresh()
56
- })
57
- onMounted(()=>{void reload();timer=setInterval(()=>{if(operations.value.some(pending))void reload()},3000)})
58
- onBeforeUnmount(()=>{disposed=true;if(timer)clearInterval(timer)})
59
- </script>
60
- <template>
61
- <SettingsSection :title="copy.title" :collapsible="false" :aria-busy="busy" class="background-save-panel">
62
- <p>{{ copy.help }}</p>
63
- <Callout v-if="error" tone="danger" role="alert" class="save-message">{{ saveError(error,copy) }}</Callout>
64
- <p v-if="busy&&!status" role="status">{{ copy.loading }}</p>
65
- <p v-if="notice" role="status">{{ notice }}</p>
66
- <p v-if="status?.selection"><strong>{{ copy.scope }}</strong>: {{ status.selection.root }}</p>
67
- <Callout v-if="status?.mismatch" tone="warning">{{ copy.scopeMismatch }} {{ status.preselection }} → {{ status.selection?.root }}</Callout>
68
- <Callout v-if="status?.scopeMode==='install-selected'&&!status.selection" tone="warning">{{ copy.scopeNeeds }}</Callout>
69
- <Callout v-if="status?.disabled" tone="warning" role="status" class="save-message">{{ copy.disabled }}</Callout>
70
- <p v-else-if="status" role="status">{{ copy.enabled }}</p>
71
- <div class="save-actions">
72
- <Button variant="secondary" :disabled="busy" @click="reload">{{ copy.refresh }}</Button>
73
- <Button v-if="admin&&status" :variant="status.disabled?'secondary':'danger'" :disabled="busy" @click="toggle">{{ status.disabled?copy.enable:copy.disable }}</Button>
74
- </div>
75
- <p v-if="admin&&status">{{ copy.disableHelp }}</p>
76
- <h3>{{ copy.delegations }}</h3>
77
- <Callout v-if="destinations.some(d=>d.status==='reselection-required')" tone="warning">{{ copy.reselect }}</Callout>
78
- <div v-if="picker" class="save-actions"><Button v-for="key in picker.keys" :key="key" variant="secondary" :disabled="busy||!status||status.disabled||!pickerProvider" @click="destinationKey=key;picking=true">{{ copy.choose }} ({{ key }})</Button></div>
79
- <NasPicker v-if="pickerProvider" :key="status?.selection?.scope" v-model:open="picking" :provider="pickerProvider" :locale="locale" mode="folder" :destination="{key:destinationKey,selectDestination:sdk.selectDestination}" @authorized="authorized" />
80
- <p v-if="status&&!grants.length">{{ copy.empty }}</p>
81
- <ul class="save-records"><li v-for="grant in grants" :key="grant.id">
82
- <div><strong>{{ grant.path }}</strong><p>{{ copy.untilRevoked }}</p></div>
83
- <Button variant="secondary" :disabled="busy" @click="revoke(grant.id)">{{ copy.revoke }}</Button>
84
- </li></ul>
85
- <template v-if="destinations.some(d=>d.status==='active')">
86
- <p>{{ copy.exampleHelp }}</p>
87
- <div class="save-actions"><Button v-for="d in destinations.filter(d=>d.status==='active')" :key="d.key" variant="secondary" :disabled="busy||status?.disabled" @click="example(d.key)">{{ copy.example }} ({{ d.key }})</Button></div>
88
- </template>
89
- <h3>{{ copy.operations }}</h3>
90
- <p v-if="status&&!operations.length">{{ copy.noOperations }}</p>
91
- <ul class="save-records"><li v-for="job in operations" :key="job.job_id" :data-job-id="job.job_id" :data-save-state="state(job)">
92
- <div>
93
- <strong>{{ job.name }}</strong><p>{{ copy[state(job)] }} · {{ job.job_id }}</p>
94
- <p v-if="state(job)==='committed'">{{ job.receipt?.path }}</p>
95
- <Callout v-if="state(job)==='uncertain'" tone="warning" class="save-message">{{ copy.uncertainHelp }}</Callout>
96
- <Callout v-else-if="state(job)==='interrupted'" tone="warning" class="save-message">{{ copy.interruptedHelp }}</Callout>
97
- <p v-if="job.code&&!canceling(job)">{{ saveError({code:job.code},copy) }}</p>
98
- </div>
99
- <Button v-if="pending(job)" variant="secondary" :disabled="busy" @click="cancel(job)">{{ copy.cancel }}</Button>
100
- </li></ul>
101
- </SettingsSection>
102
- </template>
103
- <style scoped>
104
- .background-save-panel {min-width:0;overflow-wrap:anywhere;}
105
- .save-message {--ui-text-secondary:var(--ui-text);}
106
- h3 {font-size:var(--ui-font-size-base,14px);font-weight:600;margin:var(--ui-space-6,24px) 0 var(--ui-space-3,12px);}
107
- .save-actions,.save-records li {display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-3,12px);}
108
- .save-actions {justify-content:flex-start;}
109
- .save-records {list-style:none;margin:0;padding:0;}
110
- .save-records li {padding-block:var(--ui-space-4,16px);border-bottom:1px solid var(--ui-border);}
111
- .save-records li>div {min-width:0;max-width:100%;}
112
- .save-records p {margin:var(--ui-space-2,8px) 0;}
113
- </style>
@@ -1,70 +0,0 @@
1
- <script setup lang="ts">
2
- import {computed,onBeforeUnmount,onMounted,ref,watch} from 'vue'
3
- import {Button,Callout,Form,FormActions,FormItem,Input,SettingsSection} from '@synopackageland/ui'
4
- import type {Context} from '../context'
5
- import NasPicker from '../nas/NasPicker.vue'
6
- import {createNasProvider} from '../nas/provider'
7
- import type {CapabilityStatus} from './executor-setup'
8
- import {delegateCopy,errorCopy} from './copy'
9
- interface Grant{delegation_id:string;job_id:string;path:string;expires_at:string;revoked?:boolean}
10
- interface Job{id:string;name:string;state:'waiting_executor'|'queued'|'running'|'succeeded'|'failed'|'canceled'|'interrupted'}
11
- const props=defineProps<{ctx:Pick<Context,'call'|'locale'>}>()
12
- const copy=computed(()=>delegateCopy(props.ctx.locale)),provider=createNasProvider(props.ctx)
13
- const status=ref<CapabilityStatus>(),grants=ref<Grant[]>([]),jobs=ref<Job[]>([]),busy=ref(false),error=ref<unknown>(),notice=ref(''),picking=ref(false),dest=ref(''),url=ref(''),name=ref('')
14
- let disposed=false,timer:ReturnType<typeof setInterval>|undefined,submissionKey:string|undefined
15
- watch([url,dest,name],()=>{submissionKey=undefined},{flush:'sync'})
16
- const pending=(j:Job)=>['queued','running','waiting_executor'].includes(j.state)
17
- const waitingForExecutor=computed(()=>jobs.value.some(j=>j.state==='waiting_executor'))
18
- const startupCodes=['EXECUTOR_UNAVAILABLE','EXECUTOR_TIMEOUT']
19
- const waitingError=computed(()=>waitingForExecutor.value&&startupCodes.includes((error.value as {code?:string})?.code??''))
20
- const showCapability=computed(()=>status.value&&status.value.state!=='ready'&&!(waitingForExecutor.value&&status.value.state==='needs-admin-approval'&&startupCodes.includes(status.value.reason??'')))
21
- async function refresh(){
22
- if(disposed)return
23
- const [capability,list,work]=await Promise.allSettled([props.ctx.call<CapabilityStatus>('delegate.status'),props.ctx.call<{delegations:Grant[]}>('delegate.list'),props.ctx.call<{jobs:Job[]}>('delegate.jobs.list')])
24
- if(disposed)return
25
- if(capability.status==='fulfilled')status.value=capability.value
26
- if(list.status==='fulfilled')grants.value=(list.value.delegations??[]).filter(g=>!g.revoked)
27
- if(work.status==='fulfilled')jobs.value=work.value.jobs??[]
28
- for(const result of [capability,list,work])if(result.status==='rejected')throw result.reason
29
- }
30
- async function action(work:()=>Promise<unknown>){if(busy.value||disposed)return;busy.value=true;error.value=undefined;try{await work()}catch(e){if(!disposed)error.value=e}finally{if(!disposed)busy.value=false}}
31
- const reload=()=>action(refresh)
32
- const revoke=(id:string)=>action(async()=>{await props.ctx.call('delegate.revoke',{delegation_id:id});await refresh()})
33
- const cancel=(id:string)=>action(async()=>{const out=await props.ctx.call<{revocation_pending:boolean}>('delegate.jobs.cancel',{id});if(!disposed)notice.value=out.revocation_pending?copy.value.pending:'';await refresh()})
34
- const canSubmit=computed(()=>status.value?.state==='ready'&&!!dest.value&&!!url.value&&!!name.value)
35
- const submit=()=>action(async()=>{if(!canSubmit.value)return;await props.ctx.call('delegate.jobs.submit',{key:submissionKey??(submissionKey=crypto.randomUUID()),url:url.value,dest:dest.value,name:name.value});if(!disposed){url.value='';name.value='';dest.value=''};await refresh()})
36
- const time=(date:string)=>{const d=new Date(date);return Number.isNaN(d.getTime())?'—':d.toLocaleString(props.ctx.locale)}
37
- onMounted(()=>{void reload();timer=setInterval(()=>{if(jobs.value.some(pending))void reload()},3000)})
38
- onBeforeUnmount(()=>{disposed=true;if(timer)clearInterval(timer);provider.dispose()})
39
- </script>
40
- <template>
41
- <SettingsSection :title="copy.title" :collapsible="false" :aria-busy="busy" class="delegate-panel">
42
- <p>{{ copy.help }}</p>
43
- <Callout v-if="error&&!waitingError" tone="danger" role="alert">{{ errorCopy(error,copy) }}</Callout>
44
- <p v-if="notice" role="status">{{ notice }}</p>
45
- <p v-if="showCapability" role="status">{{ status?.state==='needs-admin-approval'?copy.needs:copy.blocked }}</p>
46
- <Form @submit.prevent="submit">
47
- <FormItem :label="copy.url" label-for="delegate-url"><Input id="delegate-url" v-model="url" type="url" :disabled="busy||status?.state!=='ready'" /></FormItem>
48
- <FormItem :label="copy.name" label-for="delegate-name"><Input id="delegate-name" v-model="name" data-file-name :disabled="busy||status?.state!=='ready'" /></FormItem>
49
- <p>{{ copy.size }}</p>
50
- <p v-if="dest" role="status" class="destination">{{ copy.destination }}: {{ dest }}</p>
51
- <FormActions><Button type="button" variant="secondary" :disabled="busy||status?.state!=='ready'" @click="picking=true">{{ copy.choose }}</Button><Button type="submit" variant="primary" :disabled="busy||!canSubmit">{{ copy.submit }}</Button></FormActions>
52
- </Form>
53
- <NasPicker v-model:open="picking" :locale="ctx.locale" :provider="provider" mode="folder" @selected="dest=$event" />
54
- <div class="section-heading"><h3>{{ copy.downloads }}</h3><Button variant="secondary" :disabled="busy" @click="reload">{{ copy.refresh }}</Button></div>
55
- <p v-if="!jobs.length&&!error">{{ copy.noJobs }}</p>
56
- <ul v-else class="records"><li v-for="job in jobs" :key="job.id" :data-job-state="job.state"><span :role="job.state==='waiting_executor'?'status':undefined">{{ job.name }} · {{ copy[job.state] }}</span><Button v-if="pending(job)" variant="secondary" :disabled="busy" @click="cancel(job.id)">{{ copy.cancel }}</Button></li></ul>
57
- <h3>{{ copy.delegations }}</h3>
58
- <p v-if="!grants.length&&!error">{{ copy.noDelegations }}</p>
59
- <ul v-else class="records"><li v-for="grant in grants" :key="grant.delegation_id"><div><strong>{{ grant.path }}</strong><p>{{ copy.expires }}: {{ time(grant.expires_at) }}</p></div><Button variant="secondary" :disabled="busy" @click="revoke(grant.delegation_id)">{{ copy.revoke }}</Button></li></ul>
60
- </SettingsSection>
61
- </template>
62
- <style scoped>
63
- .delegate-panel {min-width:0;overflow-wrap:anywhere;}
64
- h3 {font-size:var(--ui-font-size-base,14px);font-weight:600;margin:var(--ui-space-6,24px) 0 var(--ui-space-3,12px);}
65
- .section-heading {display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-3,12px);}
66
- .records {list-style:none;padding:0;margin:0;}
67
- .records li {display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-3,12px);padding-block:var(--ui-space-4,16px);border-bottom:1px solid var(--ui-border);}
68
- .records li>div,.records li>span,.destination {min-width:0;max-width:100%;overflow-wrap:anywhere;}
69
- .records p {margin:var(--ui-space-2,8px) 0 0;}
70
- </style>
@@ -1,8 +0,0 @@
1
- import {uiLocale} from '../nas/locale'
2
- import {delegateCatalogs,type DelegateCopy} from './catalogs'
3
- import waiting from './i18n/waiting.json'
4
- export function delegateCopy(locale='en'){
5
- const key=uiLocale(locale)
6
- return {...delegateCatalogs[key]!,waiting_executor:waiting[key as keyof typeof waiting]??waiting.en}
7
- }
8
- export function errorCopy(error:unknown,copy:DelegateCopy){const code=(error as {code?:string})?.code;return ['session_required','AUTH_DENIED'].includes(code??'')?copy.session:['DENIED','SCOPE_DENIED','PERMISSION_DENIED','APP_DENIED','INELIGIBLE','denied'].includes(code??'')?copy.denied:copy.error}
@@ -1,11 +0,0 @@
1
- {
2
- "en": "Waiting for system services to start",
3
- "zh-TW": "等待系統服務啟動",
4
- "zh-CN": "等待系统服务启动",
5
- "de": "Warten auf den Start der Systemdienste",
6
- "es": "Esperando a que se inicien los servicios del sistema",
7
- "fr": "En attente du démarrage des services système",
8
- "it": "In attesa dell’avvio dei servizi di sistema",
9
- "ja": "システムサービスの起動を待っています",
10
- "ko": "시스템 서비스 시작을 기다리는 중"
11
- }
@@ -1,121 +0,0 @@
1
- // @vitest-environment jsdom
2
- import {afterEach,expect,test,vi} from 'vitest'
3
- import {createApp,h,nextTick} from 'vue'
4
- import {AppRoot,ConfigProvider} from '@synopackageland/ui'
5
- import BackgroundSavePanel from '../src/delegate/BackgroundSavePanel.vue'
6
- import CapabilityPanels from '../src/CapabilityPanels.vue'
7
- import type {BackgroundSaveFacade,SaveOperation} from '../src/delegate/long-running'
8
- import {saveCopy} from '../src/delegate/save-copy'
9
- const cleanup:Array<()=>void>=[]
10
- afterEach(()=>cleanup.splice(0).forEach(fn=>fn()))
11
- async function settle(){for(let i=0;i<30;i++){await Promise.resolve();await nextTick()}}
12
- function facade(operations:SaveOperation[]=[]){
13
- let revoked=false,disabled=false
14
- const grant={id:'mine',key:'save',path:'/home/Exports',username:'normal1',lifetime:'until-revoked' as const}
15
- return {
16
- destination:vi.fn(async(key:string)=>({key,selection:{scope:'home',root:'/home',generation:0},destination:revoked?null:grant,status:revoked?'reselection-required' as const:'active' as const})),
17
- exportExample:vi.fn(async({job_id}:{key:string;job_id:string})=>({delegation_id:'mine',job_id})),
18
- selectDestination:vi.fn(async()=>grant),status:vi.fn(async()=>({disabled})),
19
- list:vi.fn(async()=>revoked?[]:[grant]),operations:vi.fn(async()=>operations),
20
- revoke:vi.fn(async()=>{revoked=true;return {revoked:true as const}}),
21
- cancel:vi.fn(async({job_id,delegation_id})=>({job_id,delegation_id,state:'canceled' as const})),
22
- disable:vi.fn(async()=>{disabled=true;revoked=true;return {disabled:true as const}}),
23
- enable:vi.fn(async()=>{disabled=false;return {disabled:false as const}}),
24
- } satisfies BackgroundSaveFacade
25
- }
26
- function mount(sdk:BackgroundSaveFacade,admin=false,locale='en'){
27
- const root=document.createElement('div');document.body.append(root)
28
- const app=createApp({render:()=>h(ConfigProvider,{locale:locale as any},()=>h(AppRoot,{},()=>h(BackgroundSavePanel,{sdk,admin,locale})))})
29
- app.config.idPrefix='background-save-test';app.mount(root)
30
- cleanup.push(()=>{app.unmount();root.remove()});return {root,app}
31
- }
32
- function button(root:HTMLElement,label:string){const b=[...root.querySelectorAll('button')].find(n=>n.textContent?.trim()===label);expect(b,label).toBeTruthy();return b!}
33
- test('personal management lists/revokes only server-provided references without passing owner or UID',async()=>{
34
- const sdk=facade(),{root}=mount(sdk);await settle()
35
- expect(root.textContent).toContain('/home/Exports');expect(root.textContent).toContain('Until you revoke access')
36
- button(root,'Revoke access').click();await settle()
37
- expect(sdk.revoke).toHaveBeenCalledExactlyOnceWith({delegation_id:'mine'})
38
- expect(root.textContent).toContain('You have no active destinations.')
39
- expect(sdk.list.mock.calls.every(args=>args.length===0)).toBe(true)
40
- expect(root.textContent).not.toContain('Disable background saves');expect(sdk.disable).not.toHaveBeenCalled()
41
- })
42
- test('administrator disable refreshes protected status and enable never resurrects grants',async()=>{
43
- const sdk=facade(),{root}=mount(sdk,true);await settle()
44
- button(root,'Disable background saves').click();await settle()
45
- expect(sdk.disable).toHaveBeenCalledOnce();expect(root.textContent).toContain('Background saves are disabled.')
46
- expect(root.textContent).not.toContain('/home/Exports')
47
- button(root,'Enable background saves').click();await settle()
48
- expect(sdk.enable).toHaveBeenCalledOnce();expect(root.textContent).toContain('You have no active destinations.')
49
- })
50
- test.each(['uncertain','interrupted'] as const)('%s is visible, retains the original job ID and offers no replay action',async state=>{
51
- const sdk=facade([{job_id:'original-job',delegation_id:'mine',name:'export.csv',state}]),{root}=mount(sdk);await settle()
52
- expect(root.textContent).toContain('original-job');expect(root.textContent).toContain('will not')
53
- expect(root.textContent).not.toContain('Saved');expect(root.textContent).not.toContain('Retry')
54
- button(root,'Refresh').click();await settle();expect(sdk.operations).toHaveBeenCalledTimes(2)
55
- expect(sdk.selectDestination).not.toHaveBeenCalled();expect(sdk.cancel).not.toHaveBeenCalled()
56
- })
57
- test('only a committed executor receipt displays Saved and its destination',async()=>{
58
- const sdk=facade([{job_id:'missing-receipt',delegation_id:'mine',name:'a',state:'committed'},{job_id:'done',delegation_id:'mine',name:'b',state:'committed',receipt:{path:'/home/Exports/b',size:1}}]),{root}=mount(sdk);await settle()
59
- const missing=root.querySelector('[data-job-id="missing-receipt"]')!,done=root.querySelector('[data-job-id="done"]')!
60
- expect(missing.textContent).toContain('Result unknown');expect(missing.textContent).not.toContain('Saved')
61
- expect(done.textContent).toContain('Saved');expect(done.textContent).toContain('/home/Exports/b')
62
- })
63
- test('failed refresh removes stale authority, hides raw errors and allows a read-only retry',async()=>{
64
- const sdk=facade(),{root}=mount(sdk,true);await settle()
65
- sdk.status.mockRejectedValue({code:'AUTH_DENIED',message:'secret SID'})
66
- button(root,'Refresh').click();await settle()
67
- expect(root.querySelector('[role=alert]')?.textContent).toContain('Sign in to DSM again')
68
- expect(root.textContent).not.toContain('secret SID');expect(root.textContent).not.toContain('/home/Exports')
69
- expect(root.textContent).not.toContain('Enable background saves');expect(root.textContent).not.toContain('Disable background saves')
70
- })
71
- test('revoke is not announced until acknowledged and double clicks cannot duplicate a pending action',async()=>{
72
- const sdk=facade();sdk.revoke.mockRejectedValue({code:'commit-uncertain'});const {root}=mount(sdk);await settle()
73
- button(root,'Revoke access').click();button(root,'Revoke access').click();await settle()
74
- expect(sdk.revoke).toHaveBeenCalledOnce();expect(root.textContent).not.toContain('Access revoked.')
75
- expect(root.querySelector('[role=alert]')?.textContent).toContain('result is unknown')
76
- })
77
- test('cancel uses the original job reference and an unmount ignores late refresh results',async()=>{
78
- const sdk=facade([{job_id:'queued-id',delegation_id:'mine',name:'export.csv',state:'queued'}]),{root,app}=mount(sdk);await settle()
79
- button(root,'Cancel save').click();await settle();expect(sdk.cancel).toHaveBeenCalledExactlyOnceWith({delegation_id:'mine',job_id:'queued-id'})
80
- const before=sdk.operations.mock.calls.length;app.unmount();await settle();expect(sdk.operations).toHaveBeenCalledTimes(before)
81
- })
82
- test('an acknowledged cancel shows Canceling until the original job is terminal, without a second cancel',async()=>{
83
- const sdk=facade([{job_id:'copy-id',delegation_id:'mine',name:'export.csv',state:'copying',code:'CANCEL_REQUESTED',reason:'operation-canceled-by-user'}]),{root}=mount(sdk);await settle()
84
- const row=root.querySelector('[data-job-id=copy-id]')!
85
- expect(row.getAttribute('data-save-state')).toBe('canceling');expect(row.textContent).toContain(saveCopy().canceling)
86
- expect(row.textContent).not.toContain(saveCopy().error);expect([...row.querySelectorAll('button')].map(b=>b.textContent)).not.toContain('Cancel save')
87
- })
88
- test('Traditional Chinese shows the uncertain recovery instruction',async()=>{
89
- const sdk=facade([{job_id:'same-job',delegation_id:'mine',name:'export.csv',state:'uncertain'}]),{root}=mount(sdk,false,'zh-TW');await settle()
90
- expect(root.textContent).toContain(saveCopy('zh-TW').uncertain);expect(root.textContent).toContain(saveCopy('zh-TW').uncertainHelp)
91
- })
92
- test('the generated capability surface uses the explicit long-running facade and preserves the legacy default',async()=>{
93
- const sdk=facade(),call=vi.fn(async()=>{throw {code:'unexpected-legacy-call'}})
94
- const root=document.createElement('div');document.body.append(root)
95
- const app=createApp({render:()=>h(AppRoot,{},()=>h(CapabilityPanels,{ctx:{delegate:sdk,call,locale:'en'} as any,admin:false}))})
96
- app.mount(root);cleanup.push(()=>{app.unmount();root.remove()});await settle()
97
- expect(root.textContent).toContain('My destinations');expect(root.textContent).toContain('/home/Exports')
98
- expect(root.querySelector('input[type=url]')).toBeNull();expect(call).not.toHaveBeenCalled()
99
- })
100
- test('the default generated long-running surface binds real routes and its existing session-only picker',async()=>{
101
- const grant={id:'g1',key:'save',path:'/home',username:'normal1',lifetime:'until-revoked'}
102
- let selected=false
103
- const call=vi.fn(async(method:string)=>{
104
- if(method==='delegate.status')return {state:'ready',disabled:false,lifetime:'until-revoked',destinations:['save']}
105
- if(method==='delegate.destination')return {key:'save',selection:{scope:'home',root:'/home',generation:0},destination:selected?grant:null,status:selected?'active':'missing'}
106
- if(method==='delegate.list')return {delegations:selected?[{delegation_id:'g1',destination:'save',path:'/home',subject:{username:'normal1'},lifetime:'until-revoked',revoked:false}]:[]}
107
- if(method==='delegate.operations.list')return {operations:[]}
108
- if(method==='bg.browse')return {shares:[{name:'home',path:'/home',isdir:true}],offset:0,total:1}
109
- if(method==='delegate.select_destination'){selected=true;return grant}
110
- throw {code:'unexpected'}
111
- })
112
- const root=document.createElement('div');document.body.append(root)
113
- const app=createApp({render:()=>h(AppRoot,{},()=>h(CapabilityPanels,{ctx:{call,locale:'en'} as any,admin:false}))})
114
- app.mount(root);cleanup.push(()=>{app.unmount();root.remove()});await settle()
115
- expect(root.textContent).toContain('My destinations');expect(root.querySelector('input[type=url]')).toBeNull()
116
- button(root,'Choose save destination (save)').click();await settle()
117
- const select=[...root.querySelectorAll('button')].find(n=>n.getAttribute('aria-label')==='Select home')!;expect(select).toBeTruthy();select.click();await settle()
118
- button(root,'Confirm selection').click();await settle()
119
- expect(call).toHaveBeenCalledWith('delegate.select_destination',{key:'save',path:'/home'})
120
- expect(root.textContent).toContain('/home');expect(root.querySelector('[role=dialog]')).toBeNull()
121
- })
@@ -1,145 +0,0 @@
1
- // @vitest-environment jsdom
2
- import {afterEach,expect,test,vi} from 'vitest'
3
- import {createApp,h,nextTick} from 'vue'
4
- import {AppRoot} from '@synopackageland/ui'
5
- import DelegatePanel from '../src/delegate/DelegatePanel.vue'
6
- import ExecutorSettings from '../src/delegate/ExecutorSettings.vue'
7
- import waitingMessages from '../src/delegate/i18n/waiting.json'
8
- import {ExecutorSetupKey,type ExecutorSetup} from '../src/delegate/executor-setup'
9
- const disposers:Array<()=>void>=[]
10
- afterEach(()=>disposers.splice(0).forEach(fn=>fn()))
11
- async function settle(){for(let i=0;i<25;i++){await Promise.resolve();await nextTick()}}
12
- function mount(component:any,props:Record<string,unknown>,setup?:ExecutorSetup){const root=document.createElement('div');document.body.append(root);const app=createApp({render:()=>h(AppRoot,{},()=>h(component,props))});if(setup)app.provide(ExecutorSetupKey,setup);app.mount(root);disposers.push(()=>{app.unmount();root.remove()});return root}
13
- function button(root:HTMLElement,label:string){const b=Array.from(root.querySelectorAll('button')).find(b=>b.textContent?.trim()===label||b.getAttribute('aria-label')===label);expect(b,label).toBeTruthy();return b!}
14
- const context=(call:any)=>({call,locale:'en'})
15
- test('personal delegation list revokes only its selected ID and refreshes',async()=>{
16
- let revoked=false
17
- const call=vi.fn(async(method:string)=>{if(method==='delegate.status')return {state:'ready'};if(method==='delegate.jobs.list')return {jobs:[]};if(method==='delegate.list')return {delegations:revoked?[]:[{delegation_id:'d1',job_id:'j1',path:'/home/Downloads',expires_at:'2030-01-01T00:00:00Z'}]};if(method==='delegate.revoke'){revoked=true;return {revoked:true}};throw {code:'unknown_method'}})
18
- const root=mount(DelegatePanel,{ctx:context(call)});await settle();expect(root.textContent).toContain('/home/Downloads');button(root,'Revoke').click();await settle();expect(call).toHaveBeenCalledWith('delegate.revoke',{delegation_id:'d1'});expect(root.textContent).toContain('You have no active delegations.')
19
- })
20
- test('errors hide executor messages and retain a retry action',async()=>{
21
- const call=vi.fn(async()=>{throw {code:'DENIED',message:'secret SID'}}),root=mount(DelegatePanel,{ctx:context(call)});await settle();expect(root.querySelector('[role="alert"]')).toBeTruthy();expect(root.textContent).not.toContain('secret SID');button(root,'Refresh').click();await settle();expect(call.mock.calls.length).toBeGreaterThan(1)
22
- })
23
- test('administrator setup uses only status and authorize and clears password',async()=>{
24
- const setup:ExecutorSetup={control:vi.fn(async()=>({state:'ready'})),status:vi.fn(async()=>({state:'needs-admin-approval'})),authorize:vi.fn(async()=>({state:'ready'}))}
25
- const root=mount(ExecutorSettings,{admin:true},setup);await settle();const password=root.querySelector('input[type="password"]') as HTMLInputElement;expect(password).toBeTruthy();password.value='once';password.dispatchEvent(new Event('input',{bubbles:true}));await settle();root.querySelector('form')!.dispatchEvent(new Event('submit',{bubbles:true,cancelable:true}));await settle();expect(setup.authorize).toHaveBeenCalledWith('once');expect(root.querySelector('input[type="password"]')).toBeNull();expect(root.textContent).toContain('Background file access is ready.')
26
- })
27
- test('ordinary users never call setup or see a password field',async()=>{
28
- const setup:ExecutorSetup={control:vi.fn(async()=>({state:'ready'})),status:vi.fn(async()=>({state:'ready'})),authorize:vi.fn(async()=>({state:'ready'}))};const root=mount(ExecutorSettings,{admin:false},setup);await settle();expect(setup.status).not.toHaveBeenCalled();expect(root.querySelector('input')).toBeNull()
29
- })
30
- test('setup failures erase the entered password and explain recovery',async()=>{
31
- const setup:ExecutorSetup={control:vi.fn(async()=>({state:'ready'})),status:vi.fn(async()=>({state:'needs-admin-approval'})),authorize:vi.fn(async()=>{throw {code:'DENIED',message:'secret'}})};const root=mount(ExecutorSettings,{admin:true},setup);await settle();const password=root.querySelector('input')!;password.value='once';password.dispatchEvent(new Event('input',{bubbles:true}));await settle();root.querySelector('form')!.dispatchEvent(new Event('submit',{bubbles:true,cancelable:true}));await settle();expect(password.value).toBe('');expect(root.textContent).not.toContain('secret');expect(root.querySelector('[role="alert"]')).toBeTruthy()
32
- })
33
- test('download requires a folder selected through the existing NAS picker',async()=>{
34
- const call=vi.fn(async(method:string)=>{if(method==='delegate.status')return {state:'ready'};if(method==='delegate.list')return {delegations:[]};if(method==='delegate.jobs.list')return {jobs:[]};if(method==='nas.files.shares')return {shares:[{name:'home',path:'/home',isdir:true}],total:1,offset:0};if(method==='delegate.jobs.submit')return {id:'job1'};throw {code:'unknown_method'}})
35
- const root=mount(DelegatePanel,{ctx:context(call)});await settle();const url=root.querySelector('input[type="url"]')!;url.value='https://example.com/file';url.dispatchEvent(new Event('input',{bubbles:true}));const name=root.querySelector('input[data-file-name]')!;name.value='file.txt';name.dispatchEvent(new Event('input',{bubbles:true}));await settle();expect(button(root,'Download to my folder').disabled).toBe(true);button(root,'Choose folder').click();await settle();const picker=document.body;button(picker,'Select home').click();await settle();button(picker,'Confirm selection').click();await settle();button(root,'Download to my folder').click();await settle();const submitted=call.mock.calls.find(([m])=>m==='delegate.jobs.submit');expect(submitted).toBeTruthy();expect((submitted as unknown as [string,any])[1]).toMatchObject({url:'https://example.com/file',dest:'/home',name:'file.txt'})
36
- })
37
-
38
- test('an unavailable delegation list still displays approval status and owner jobs',async()=>{
39
- const call=vi.fn(async(method:string)=>{if(method==='delegate.status')return {state:'needs-admin-approval'};if(method==='delegate.jobs.list')return {jobs:[{id:'j',name:'file.txt',state:'queued'}]};throw {code:'EXECUTOR_UNAVAILABLE'}})
40
- const root=mount(DelegatePanel,{ctx:context(call)});await settle();expect(root.textContent).toContain('An administrator must approve background file access.');expect(root.textContent).toContain('file.txt');expect(root.querySelector('[role="alert"]')).toBeTruthy()
41
- })
42
- test('retrying an uncertain submission reuses the original idempotency key',async()=>{
43
- let attempts=0
44
- const call=vi.fn(async(method:string)=>{if(method==='delegate.status')return {state:'ready'};if(method==='delegate.list')return {delegations:[]};if(method==='delegate.jobs.list')return {jobs:[]};if(method==='nas.files.shares')return {shares:[{name:'home',path:'/home',isdir:true}],total:1,offset:0};if(method==='delegate.jobs.submit'){attempts++;if(attempts===1)throw {code:'commit-uncertain'};return {id:'j'}};throw {code:'unknown_method'}})
45
- const root=mount(DelegatePanel,{ctx:context(call)});await settle();const url=root.querySelector('input[type="url"]')!;url.value='https://example.com/file';url.dispatchEvent(new Event('input',{bubbles:true}));const name=root.querySelector('input[data-file-name]')!;name.value='file';name.dispatchEvent(new Event('input',{bubbles:true}));await settle();button(root,'Choose folder').click();await settle();button(document.body,'Select home').click();await settle();button(document.body,'Confirm selection').click();await settle();button(root,'Download to my folder').click();await settle();button(root,'Download to my folder').click();await settle();const submissions=call.mock.calls.filter(([m])=>m==='delegate.jobs.submit') as unknown as Array<[string,{key:string}]>;expect(submissions).toHaveLength(2);expect(submissions[0][1].key).toBe(submissions[1][1].key)
46
- })
47
-
48
- test('generated app mount forwards ctx.executor to admin setup and renders ordinary delegation UI',async()=>{
49
- const {mount:mountApp}=await import('../src/main')
50
- for(const admin of [true,false]){
51
- const status=vi.fn(async()=>({state:'needs-admin-approval' as const}))
52
- const authorize=vi.fn(async()=>({state:'ready' as const}))
53
- const call=vi.fn(async(method:string)=>{
54
- if(method==='app.status')return {package:'DelegateApp',version:'1',user:admin?'admin':'alice',admin}
55
- if(method==='greeting.get')return {text:'Hello'}
56
- if(method==='delegate.status')return {state:'needs-admin-approval'}
57
- if(method==='delegate.list')return {delegations:[]}
58
- if(method==='delegate.jobs.list')return {jobs:[]}
59
- throw {code:'unknown_method'}
60
- })
61
- const root=document.createElement('div');document.body.append(root)
62
- const app=mountApp(root,{locale:'en',call,reopen:()=>()=>{},executor:{status,authorize,control:vi.fn(async()=>({state:'ready' as const}))}} as any)
63
- disposers.push(()=>{app.unmount();root.remove()});await settle()
64
- expect(root.textContent).toContain('You have no active delegations.')
65
- if(admin){
66
- expect(status).toHaveBeenCalled()
67
- const password=root.querySelector('input[type=password]')! as HTMLInputElement
68
- password.value='one-time';password.dispatchEvent(new Event('input',{bubbles:true}));await settle()
69
- password.closest('form')!.dispatchEvent(new Event('submit',{bubbles:true,cancelable:true}));await settle()
70
- expect(authorize).toHaveBeenCalledWith('one-time')
71
- }else{
72
- expect(status).not.toHaveBeenCalled()
73
- expect(root.querySelector('input[type=password]')).toBeNull()
74
- expect(call).not.toHaveBeenCalledWith('greeting.get',undefined)
75
- expect(root.querySelector('textarea')).toBeNull()
76
- }
77
- }
78
- })
79
-
80
- test.each(Object.entries(waitingMessages))('waiting jobs show startup status and remain cancelable in %s',async(locale,message)=>{
81
- const {delegateCopy}=await import('../src/delegate/copy')
82
- const call=vi.fn(async(method:string)=>{
83
- if(method==='delegate.status')return {state:'needs-admin-approval',reason:'EXECUTOR_UNAVAILABLE'}
84
- if(method==='delegate.jobs.list')return {jobs:[{id:'waiting',name:'file.txt',state:'waiting_executor'}]}
85
- if(method==='delegate.jobs.cancel')return {revocation_pending:true}
86
- throw {code:'EXECUTOR_UNAVAILABLE'}
87
- })
88
- const root=mount(DelegatePanel,{ctx:{call,locale}});await settle()
89
- expect(root.textContent).toContain(message)
90
- expect(root.querySelector('[role=alert]')).toBeNull()
91
- expect(root.textContent).not.toContain(delegateCopy(locale).needs)
92
- button(root,delegateCopy(locale).cancel).click();await settle()
93
- expect(call).toHaveBeenCalledWith('delegate.jobs.cancel',{id:'waiting'})
94
- })
95
-
96
- test('waiting startup status keeps polling until the saved result arrives',async()=>{
97
- vi.useFakeTimers()
98
- try{
99
- let lists=0
100
- const call=vi.fn(async(method:string)=>{
101
- if(method==='delegate.status')return {state:'ready'}
102
- if(method==='delegate.list')return {delegations:[]}
103
- if(method==='delegate.jobs.list')return {jobs:[{id:'waiting',name:'file.txt',state:++lists===1?'waiting_executor':'succeeded'}]}
104
- throw {code:'unknown_method'}
105
- })
106
- const root=mount(DelegatePanel,{ctx:context(call)});await settle()
107
- expect(root.querySelector('[data-job-state=waiting_executor]')).toBeTruthy()
108
- vi.advanceTimersByTime(3000);await settle()
109
- expect(root.querySelector('[data-job-state=succeeded]')).toBeTruthy()
110
- expect(root.textContent).toContain('Saved')
111
- expect(Array.from(root.querySelectorAll('button')).some(b=>b.textContent?.trim()==='Cancel job')).toBe(false)
112
- }finally{vi.useRealTimers()}
113
- })
114
-
115
- test('a waiting job still displays unrelated permission errors',async()=>{
116
- const call=vi.fn(async(method:string)=>{
117
- if(method==='delegate.status')return {state:'blocked'}
118
- if(method==='delegate.jobs.list')return {jobs:[{id:'waiting',name:'file.txt',state:'waiting_executor'}]}
119
- throw {code:'AUTH_DENIED'}
120
- })
121
- const root=mount(DelegatePanel,{ctx:context(call)});await settle()
122
- expect(root.querySelector('[role=alert]')?.textContent).toContain('Sign in to DSM again')
123
- expect(root.textContent).toContain('Waiting for system services to start')
124
- })
125
-
126
-
127
- test('startup waiting catalog covers exactly nine distinct language messages',()=>{
128
- expect(Object.keys(waitingMessages).sort()).toEqual(['en','zh-TW','zh-CN','de','es','fr','it','ja','ko'].sort())
129
- expect(new Set(Object.values(waitingMessages)).size).toBe(9)
130
- })
131
- test('a blocked approval shows the DSM reason, not only the generic unavailable text',async()=>{
132
- const setup:ExecutorSetup={control:vi.fn(async()=>({state:'ready'})),status:vi.fn(async()=>({state:'needs-admin-approval'})),authorize:vi.fn(async()=>({state:'blocked',reason:'dsm_104: scheduler readback or operation failed.'}))}
133
- const root=mount(ExecutorSettings,{admin:true},setup);await settle();const password=root.querySelector('input[type="password"]') as HTMLInputElement;password.value='once';password.dispatchEvent(new Event('input',{bubbles:true}));await settle();root.querySelector('form')!.dispatchEvent(new Event('submit',{bubbles:true,cancelable:true}));await settle()
134
- expect(root.textContent).toContain('Background file access is unavailable.');expect(root.textContent).toContain('Details: dsm_104: scheduler readback or operation failed.')
135
- })
136
- test('a task that is only missing shows no extra details',async()=>{
137
- const setup:ExecutorSetup={control:vi.fn(async()=>({state:'ready'})),status:vi.fn(async()=>({state:'needs-admin-approval',reason:'Task is missing.'})),authorize:vi.fn(async()=>({state:'ready'}))}
138
- const root=mount(ExecutorSettings,{admin:true},setup);await settle();expect(root.textContent).not.toContain('Task is missing.')
139
- })
140
- test('settings follow an approval made from the window panel',async()=>{
141
- let notify:((r:{state:'ready'})=>void)|undefined
142
- const setup={control:vi.fn(async()=>({state:'ready'})),status:vi.fn(async()=>({state:'needs-admin-approval'})),authorize:vi.fn(async()=>({state:'ready'})),subscribe:(listener:any)=>{notify=listener}} as ExecutorSetup
143
- const root=mount(ExecutorSettings,{admin:true},setup);await settle();expect(root.textContent).toContain('An administrator must approve')
144
- notify!({state:'ready'});await settle();expect(root.textContent).toContain('Background file access is ready.')
145
- })
@@ -1,49 +0,0 @@
1
- // @vitest-environment jsdom
2
- import {afterEach,expect,test,vi} from 'vitest'
3
- import {createApp,h,nextTick} from 'vue'
4
- import {AppRoot} from '@synopackageland/ui'
5
- import ExecutorSettings from '../src/delegate/ExecutorSettings.vue'
6
- import {ExecutorSetupKey} from '../src/delegate/executor-setup'
7
- const cleanup:Array<()=>void>=[]
8
- afterEach(()=>cleanup.splice(0).forEach(fn=>fn()))
9
- async function settle(){for(let i=0;i<40;i++){await Promise.resolve();await nextTick()}}
10
- function mount(approved=false,admin=true,tasksReady=false){
11
- const status=vi.fn(async()=>({state:approved||tasksReady?'ready':'needs-admin-approval'}))
12
- const authorize=vi.fn(async(_pw:string,_scope?:string)=>{approved=true;return {state:'ready'}})
13
- const call=vi.fn(async(method:string)=>{
14
- if(method==='delegate.status')return {scope_mode:'install-selected',preselection:'shared:draft',mismatch:approved,selection:approved?{scope:'shared:reports',root:'/reports',generation:1}:null}
15
- if(method==='bg.browse')return {shares:[{name:'reports',path:'/reports',isdir:true},{name:'draft',path:'/draft',isdir:true}],offset:0,total:2}
16
- throw {code:'unexpected'}
17
- })
18
- const root=document.createElement('div');document.body.append(root)
19
- const app=createApp({render:()=>h(AppRoot,{},()=>h(ExecutorSettings,{admin,locale:'en',ctx:{call} as any}))})
20
- app.provide(ExecutorSetupKey,{status,authorize,control:vi.fn() as any});app.mount(root)
21
- cleanup.push(()=>{app.unmount();root.remove()});return {root,authorize,call}
22
- }
23
- test('first approval displays installer preselection and confirms it with the existing password form',async()=>{
24
- const {root,authorize}=mount();await settle()
25
- expect(root.textContent).toContain('draft');expect(root.textContent).toContain('pre-selection')
26
- expect(root.querySelectorAll('input[type=password]')).toHaveLength(1)
27
- const input=root.querySelector('input[type=password]') as HTMLInputElement;input.value='entered';input.dispatchEvent(new Event('input',{bubbles:true}));await settle()
28
- root.querySelector('form')!.dispatchEvent(new Event('submit',{cancelable:true,bubbles:true}));await settle()
29
- expect(authorize).toHaveBeenCalledExactlyOnceWith('entered','shared:draft');expect(input.value).toBe('')
30
- })
31
- test('Settings follows protected scope, shows mismatch and uses the same single password form',async()=>{
32
- const {root,authorize}=mount(true);await settle()
33
- expect(root.textContent).toContain('/reports');expect(root.textContent).toContain('differs');expect(root.textContent).toContain('draft')
34
- expect(root.querySelectorAll('input[type=password]')).toHaveLength(1)
35
- expect(root.querySelectorAll('[role=dialog]')).toHaveLength(0)
36
- expect(authorize).not.toHaveBeenCalled()
37
- })
38
- test('ordinary users cannot load or change scope settings',async()=>{
39
- const {root,authorize,call}=mount(true,false);await settle()
40
- expect(root.querySelector('input')).toBeNull();expect(call).not.toHaveBeenCalled();expect(authorize).not.toHaveBeenCalled()
41
- })
42
-
43
- test('ready tasks without protected scope show confirmation status and its action',async()=>{
44
- const {root}=mount(false,true,true);await settle()
45
- expect(root.querySelector('[role=status]')?.textContent).toContain('Share needs confirmation')
46
- expect(root.textContent).not.toContain('Background file access is ready.')
47
- expect(root.querySelector('input[type=password]')).toBeTruthy()
48
- expect(root.textContent).toContain('Confirm share')
49
- })
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- repo=$(cd "$(dirname "$0")/../../../.." && pwd)
4
- overlay="$repo/packages/app-cli/templates/native-go-delegate"
5
- fixture=$(mktemp -d "${TMPDIR:-/tmp}/delegate-ui.XXXXXX")
6
- trap 'rm -rf "$fixture"' EXIT
7
- cp -R "$repo/packages/app-cli/templates/native-go-vue/frontend/" "$fixture/"
8
- cp -R "$repo/packages/app-cli/templates/native-go-jobs/frontend/" "$fixture/"
9
- cp -R "$overlay/frontend/" "$fixture/"
10
- # The normal CLI supplies this notices module when it creates a project.
11
- cp "$repo/packages/app-cli/templates/_shared/third-party-notices.mjs" "$fixture/third-party-notices.mjs"
12
- (cd "$fixture" && npm ci && npx vitest run test/delegate.test.ts && npm run build)
@@ -1,18 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Test the overlay as shipped, without editing the base or CLI-owned files.
3
- set -euo pipefail
4
- repo=$(cd "$(dirname "$0")/../../../.." && pwd)
5
- overlay="$repo/packages/app-cli/templates/native-go-delegate"
6
- export SYNOPKGLAND_EXECUTOR_SOURCE="$repo/packages/app-cli/templates/_executor"
7
- fixture=$(mktemp -d "${TMPDIR:-/tmp}/delegate.XXXXXX")
8
- trap 'rm -rf "$fixture"' EXIT
9
- cp -R "$repo/packages/app-cli/templates/native-go/backend" "$fixture/backend"
10
- cp -R "$repo/packages/app-cli/templates/native-go-jobs/backend/" "$fixture/backend/"
11
- rm "$fixture/backend/internal/app/background_none.go" "$fixture/backend/internal/app/delegate_none.go"
12
- cp -R "$overlay/backend/" "$fixture/backend/"
13
- python3 - "$fixture/backend/internal/app/routes_test.go" <<'PYCODE'
14
- import sys
15
- from pathlib import Path
16
- p=Path(sys.argv[1]);s=p.read_text().replace('want := ""','want := sampleOutcome[r.Method()]');p.write_text(s)
17
- PYCODE
18
- (cd "$fixture/backend" && go test -race -json ./... > "$overlay/.go-results.json" && go vet ./... && GOOS=linux GOARCH=amd64 go vet ./... && GOOS=linux GOARCH=arm64 go vet ./... && test -z "$(gofmt -l .)")