@synopackageland/cli 0.8.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (946) hide show
  1. package/CHANGELOG.md +267 -0
  2. package/README.md +27 -5
  3. package/dist/add.js +16 -17
  4. package/dist/authorization-sdk.d.ts +0 -1
  5. package/dist/authorization-sdk.js +0 -1
  6. package/dist/build-spk/dsm-version.d.ts +0 -2
  7. package/dist/build-spk/dsm-version.js +0 -6
  8. package/dist/build-spk/gateway.js +2 -2
  9. package/dist/build-spk/generator.js +4 -23
  10. package/dist/build-spk/notices.js +12 -8
  11. package/dist/build-spk/resource-worker.js +0 -3
  12. package/dist/build-spk/uninstall-wizard.d.ts +8 -3
  13. package/dist/build-spk/uninstall-wizard.js +4 -2
  14. package/dist/build-spk/wizard-messages.d.ts +33 -0
  15. package/dist/build-spk/wizard-messages.js +33 -0
  16. package/dist/capability-overlays.d.ts +15 -0
  17. package/dist/capability-overlays.js +18 -0
  18. package/dist/cli-version.d.ts +2 -0
  19. package/dist/cli-version.js +3 -0
  20. package/dist/cli.js +6 -4
  21. package/dist/contract/validate.js +4 -21
  22. package/dist/error-registry.js +22 -15
  23. package/dist/host/dsm-client.js +51 -30
  24. package/dist/host/types.d.ts +5 -0
  25. package/dist/info.js +16 -2
  26. package/dist/init.js +53 -59
  27. package/dist/portal/alias.d.ts +6 -4
  28. package/dist/portal/alias.js +6 -11
  29. package/dist/portal/package.d.ts +0 -3
  30. package/dist/portal/package.js +1 -7
  31. package/dist/reproducible.js +1 -1
  32. package/dist/runtime/delegate-contract.d.ts +15 -0
  33. package/dist/runtime/delegate-contract.js +2 -0
  34. package/dist/runtime/executor-build.d.ts +15 -1
  35. package/dist/runtime/executor-build.js +42 -11
  36. package/dist/runtime/executor-digests.json +24 -0
  37. package/dist/runtime/executor-inspect.d.ts +1 -0
  38. package/dist/runtime/executor-inspect.js +5 -2
  39. package/dist/runtime/executor-policy.d.ts +3 -1
  40. package/dist/runtime/executor-policy.js +7 -2
  41. package/dist/runtime/executor-source.d.ts +21 -0
  42. package/dist/runtime/executor-source.js +35 -0
  43. package/dist/runtime/executor-tasks.d.ts +5 -2
  44. package/dist/runtime/executor-tasks.js +6 -4
  45. package/dist/runtime/sdk-source.d.ts +31 -0
  46. package/dist/runtime/sdk-source.js +92 -0
  47. package/dist/runtime/uninstall-cleanup.d.ts +7 -1
  48. package/dist/runtime/uninstall-cleanup.js +7 -1
  49. package/dist/standalone/api-permissions.d.ts +4 -1
  50. package/dist/standalone/api-permissions.js +10 -18
  51. package/dist/standalone/build.d.ts +1 -0
  52. package/dist/standalone/build.js +11 -4
  53. package/dist/standalone/daemon.js +2 -2
  54. package/dist/standalone/dsm-window.js +9 -12
  55. package/dist/standalone/inspect-spk.js +8 -7
  56. package/dist/standalone/manifest.d.ts +5 -2
  57. package/dist/standalone/manifest.js +20 -5
  58. package/dist/standalone/root-window.d.ts +11 -4
  59. package/dist/standalone/root-window.js +54 -30
  60. package/dist/standalone/sdk-check.d.ts +9 -0
  61. package/dist/standalone/sdk-check.js +43 -0
  62. package/dist/standalone/spk.js +2 -2
  63. package/dist/template-paths.d.ts +7 -2
  64. package/dist/template-paths.js +18 -6
  65. package/dist/validate.js +2 -1
  66. package/package.json +13 -3
  67. package/schema/synology-app.schema.json +1 -10
  68. package/skills/SKILL.md +1 -1
  69. package/skills/reference/create.md +7 -2
  70. package/skills/reference/deploy.md +1 -1
  71. package/skills/reference/identity.md +1 -1
  72. package/skills/reference/portal.md +7 -3
  73. package/dist/templates/_executor/README.md +0 -318
  74. package/dist/templates/_executor/anchor.go +0 -156
  75. package/dist/templates/_executor/anchor_test.go +0 -161
  76. package/dist/templates/_executor/apppriv_review_test.go +0 -28
  77. package/dist/templates/_executor/auth_presence_review_test.go +0 -38
  78. package/dist/templates/_executor/cancel_contract_test.go +0 -236
  79. package/dist/templates/_executor/cmd/lifecycle/main.go +0 -42
  80. package/dist/templates/_executor/cookie_review_test.go +0 -27
  81. package/dist/templates/_executor/copy.go +0 -64
  82. package/dist/templates/_executor/copy_test.go +0 -88
  83. package/dist/templates/_executor/digest_review_test.go +0 -120
  84. package/dist/templates/_executor/directories.go +0 -40
  85. package/dist/templates/_executor/dsm.go +0 -369
  86. package/dist/templates/_executor/dsm_test.go +0 -290
  87. package/dist/templates/_executor/executor.go +0 -735
  88. package/dist/templates/_executor/executor_test.go +0 -314
  89. package/dist/templates/_executor/go.mod +0 -5
  90. package/dist/templates/_executor/identity.go +0 -74
  91. package/dist/templates/_executor/identity_kernel_linux_test.go +0 -60
  92. package/dist/templates/_executor/identity_linux.go +0 -82
  93. package/dist/templates/_executor/identity_security_test.go +0 -43
  94. package/dist/templates/_executor/internal/lifecycle/lifecycle.go +0 -95
  95. package/dist/templates/_executor/internal/lifecycle/lifecycle_test.go +0 -232
  96. package/dist/templates/_executor/internal/taskscript/boot.sh +0 -31
  97. package/dist/templates/_executor/internal/taskscript/cmd/main.go +0 -19
  98. package/dist/templates/_executor/internal/taskscript/control.sh +0 -31
  99. package/dist/templates/_executor/internal/taskscript/tasks.go +0 -44
  100. package/dist/templates/_executor/json_review_test.go +0 -40
  101. package/dist/templates/_executor/lifecycle_test.go +0 -97
  102. package/dist/templates/_executor/link_linux.go +0 -28
  103. package/dist/templates/_executor/long_running_test.go +0 -530
  104. package/dist/templates/_executor/main.go +0 -576
  105. package/dist/templates/_executor/managed.go +0 -117
  106. package/dist/templates/_executor/managed_test.go +0 -137
  107. package/dist/templates/_executor/move_linux.go +0 -490
  108. package/dist/templates/_executor/move_linux_test.go +0 -460
  109. package/dist/templates/_executor/move_validation.go +0 -46
  110. package/dist/templates/_executor/move_validation_test.go +0 -187
  111. package/dist/templates/_executor/operations.go +0 -926
  112. package/dist/templates/_executor/path_test.go +0 -35
  113. package/dist/templates/_executor/pid.go +0 -37
  114. package/dist/templates/_executor/pid_test.go +0 -113
  115. package/dist/templates/_executor/platform_linux.go +0 -187
  116. package/dist/templates/_executor/platform_linux_test.go +0 -191
  117. package/dist/templates/_executor/platform_other.go +0 -76
  118. package/dist/templates/_executor/process.go +0 -142
  119. package/dist/templates/_executor/purge_log.go +0 -18
  120. package/dist/templates/_executor/records.go +0 -242
  121. package/dist/templates/_executor/scope_cancel_contract_test.go +0 -91
  122. package/dist/templates/_executor/scope_client.go +0 -37
  123. package/dist/templates/_executor/scope_contract.go +0 -12
  124. package/dist/templates/_executor/selected_scope.go +0 -146
  125. package/dist/templates/_executor/selected_scope_test.go +0 -186
  126. package/dist/templates/_executor/socket_linux_test.go +0 -46
  127. package/dist/templates/_executor/status_disabled_test.go +0 -33
  128. package/dist/templates/_executor/store.go +0 -91
  129. package/dist/templates/_executor/supervise.go +0 -109
  130. package/dist/templates/_executor/supervise_test.go +0 -130
  131. package/dist/templates/_executor/task_race_review_test.go +0 -47
  132. package/dist/templates/_executor/tasks.go +0 -320
  133. package/dist/templates/_executor/tasks_dsm71_test.go +0 -114
  134. package/dist/templates/_executor/tasks_review_test.go +0 -43
  135. package/dist/templates/_executor/tasks_test.go +0 -223
  136. package/dist/templates/_executor/testdata/evidence/cleanup.json +0 -24
  137. package/dist/templates/_executor/testdata/evidence/final-smoke.jsonl +0 -9
  138. package/dist/templates/_executor/testdata/evidence/kernel-acl.json +0 -6
  139. package/dist/templates/_executor/testdata/evidence/linux-tests.log +0 -123
  140. package/dist/templates/_executor/testdata/evidence/live.jsonl +0 -23
  141. package/dist/templates/_executor/testdata/evidence/storage.json +0 -90
  142. package/dist/templates/_executor/testdata/evidence/validation.json +0 -55
  143. package/dist/templates/_executor/testdata/live_probe.py +0 -98
  144. package/dist/templates/_executor/upgrade_watch_test.go +0 -244
  145. package/dist/templates/_executor/watch.go +0 -164
  146. package/dist/templates/_executor/watch_test.go +0 -291
  147. package/dist/templates/_executor/write_review_linux_test.go +0 -87
  148. package/dist/templates/_shared/AGENTS.md +0 -146
  149. package/dist/templates/_shared/CLAUDE.md +0 -1
  150. package/dist/templates/_shared/third-party-notices.mjs +0 -51
  151. package/dist/templates/binary/LICENSES/GO-LICENSE +0 -27
  152. package/dist/templates/binary/LICENSES/GO-PATENTS +0 -22
  153. package/dist/templates/binary/dsm-package.yaml +0 -46
  154. package/dist/templates/binary/example/main.go +0 -16
  155. package/dist/templates/binary/gitignore +0 -2
  156. package/dist/templates/binary/i18n/messages/de.json +0 -4
  157. package/dist/templates/binary/i18n/messages/en.json +0 -4
  158. package/dist/templates/binary/i18n/messages/es.json +0 -4
  159. package/dist/templates/binary/i18n/messages/fr.json +0 -4
  160. package/dist/templates/binary/i18n/messages/it.json +0 -4
  161. package/dist/templates/binary/i18n/messages/ja.json +0 -4
  162. package/dist/templates/binary/i18n/messages/ko.json +0 -4
  163. package/dist/templates/binary/i18n/messages/zh-CN.json +0 -4
  164. package/dist/templates/binary/i18n/messages/zh-TW.json +0 -4
  165. package/dist/templates/binary/ui/app.css +0 -4
  166. package/dist/templates/binary/ui/app.js +0 -32
  167. package/dist/templates/compose/compose.yaml +0 -8
  168. package/dist/templates/compose/synology-app.yaml +0 -16
  169. package/dist/templates/native-authorization/AuthorizationGate.vue +0 -91
  170. package/dist/templates/native-authorization/i18n/de.json +0 -37
  171. package/dist/templates/native-authorization/i18n/en.json +0 -37
  172. package/dist/templates/native-authorization/i18n/es.json +0 -37
  173. package/dist/templates/native-authorization/i18n/fr.json +0 -37
  174. package/dist/templates/native-authorization/i18n/index.ts +0 -15
  175. package/dist/templates/native-authorization/i18n/it.json +0 -37
  176. package/dist/templates/native-authorization/i18n/ja.json +0 -37
  177. package/dist/templates/native-authorization/i18n/ko.json +0 -37
  178. package/dist/templates/native-authorization/i18n/zh-CN.json +0 -37
  179. package/dist/templates/native-authorization/i18n/zh-TW.json +0 -37
  180. package/dist/templates/native-go/README.md +0 -459
  181. package/dist/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +0 -61
  182. package/dist/templates/native-go/backend/cmd/app/main.go +0 -95
  183. package/dist/templates/native-go/backend/cmd/background-worker/main.go +0 -38
  184. package/dist/templates/native-go/backend/go.mod +0 -9
  185. package/dist/templates/native-go/backend/go.sum +0 -4
  186. package/dist/templates/native-go/backend/internal/api/cgi_framing_test.go +0 -32
  187. package/dist/templates/native-go/backend/internal/api/cookie_review_test.go +0 -28
  188. package/dist/templates/native-go/backend/internal/api/deadline_test.go +0 -114
  189. package/dist/templates/native-go/backend/internal/api/dsm-session.go +0 -54
  190. package/dist/templates/native-go/backend/internal/api/dsm-session_test.go +0 -51
  191. package/dist/templates/native-go/backend/internal/api/entry_test.go +0 -47
  192. package/dist/templates/native-go/backend/internal/api/errors.go +0 -47
  193. package/dist/templates/native-go/backend/internal/api/permissions.go +0 -161
  194. package/dist/templates/native-go/backend/internal/api/permissions.json +0 -5
  195. package/dist/templates/native-go/backend/internal/api/permissions_test.go +0 -113
  196. package/dist/templates/native-go/backend/internal/api/policy_fixture_test.go +0 -8
  197. package/dist/templates/native-go/backend/internal/api/registry.go +0 -142
  198. package/dist/templates/native-go/backend/internal/api/registry_test.go +0 -344
  199. package/dist/templates/native-go/backend/internal/api/resource_limits_test.go +0 -87
  200. package/dist/templates/native-go/backend/internal/api/sdk-permissions.json +0 -59
  201. package/dist/templates/native-go/backend/internal/api/sdk_policy_test.go +0 -31
  202. package/dist/templates/native-go/backend/internal/api/server.go +0 -305
  203. package/dist/templates/native-go/backend/internal/api/testdata/permissions-cases.json +0 -172
  204. package/dist/templates/native-go/backend/internal/app/background.go +0 -249
  205. package/dist/templates/native-go/backend/internal/app/background_none.go +0 -8
  206. package/dist/templates/native-go/backend/internal/app/background_owner.go +0 -38
  207. package/dist/templates/native-go/backend/internal/app/background_owner_test.go +0 -163
  208. package/dist/templates/native-go/backend/internal/app/background_schedule.go +0 -69
  209. package/dist/templates/native-go/backend/internal/app/background_schedule_test.go +0 -62
  210. package/dist/templates/native-go/backend/internal/app/background_test.go +0 -320
  211. package/dist/templates/native-go/backend/internal/app/delegate_config.go +0 -57
  212. package/dist/templates/native-go/backend/internal/app/delegate_config_test.go +0 -28
  213. package/dist/templates/native-go/backend/internal/app/delegate_none.go +0 -5
  214. package/dist/templates/native-go/backend/internal/app/identity.go +0 -20
  215. package/dist/templates/native-go/backend/internal/app/identity_test.go +0 -15
  216. package/dist/templates/native-go/backend/internal/app/migrations.go +0 -41
  217. package/dist/templates/native-go/backend/internal/app/migrations_test.go +0 -41
  218. package/dist/templates/native-go/backend/internal/app/portal.go +0 -30
  219. package/dist/templates/native-go/backend/internal/app/portal_test.go +0 -55
  220. package/dist/templates/native-go/backend/internal/app/root_none.go +0 -9
  221. package/dist/templates/native-go/backend/internal/app/routes.go +0 -137
  222. package/dist/templates/native-go/backend/internal/app/routes_test.go +0 -165
  223. package/dist/templates/native-go/backend/internal/app/session_files.go +0 -9
  224. package/dist/templates/native-go/backend/internal/app/session_files_test.go +0 -14
  225. package/dist/templates/native-go/backend/internal/app/shared_folder.go +0 -144
  226. package/dist/templates/native-go/backend/internal/app/shared_folder_test.go +0 -158
  227. package/dist/templates/native-go/backend/internal/background/access.go +0 -57
  228. package/dist/templates/native-go/backend/internal/background/lock_test.go +0 -131
  229. package/dist/templates/native-go/backend/internal/background/owner_test.go +0 -118
  230. package/dist/templates/native-go/backend/internal/background/runner.go +0 -185
  231. package/dist/templates/native-go/backend/internal/background/runner_test.go +0 -209
  232. package/dist/templates/native-go/backend/internal/background/schedule.go +0 -336
  233. package/dist/templates/native-go/backend/internal/background/schedule_test.go +0 -368
  234. package/dist/templates/native-go/backend/internal/background/store.go +0 -825
  235. package/dist/templates/native-go/backend/internal/background/store_test.go +0 -365
  236. package/dist/templates/native-go/backend/internal/datamigrate/migrate.go +0 -191
  237. package/dist/templates/native-go/backend/internal/datamigrate/migrate_test.go +0 -177
  238. package/dist/templates/native-go/backend/internal/dsm/admin.go +0 -76
  239. package/dist/templates/native-go/backend/internal/dsm/admin_linux.go +0 -110
  240. package/dist/templates/native-go/backend/internal/dsm/admin_linux_test.go +0 -105
  241. package/dist/templates/native-go/backend/internal/dsm/admin_other.go +0 -15
  242. package/dist/templates/native-go/backend/internal/dsm/admin_test.go +0 -67
  243. package/dist/templates/native-go/backend/internal/dsm/apppriv.go +0 -30
  244. package/dist/templates/native-go/backend/internal/dsm/auth.go +0 -94
  245. package/dist/templates/native-go/backend/internal/dsm/auth_test.go +0 -159
  246. package/dist/templates/native-go/backend/internal/dsm/bridge_file.go +0 -75
  247. package/dist/templates/native-go/backend/internal/dsm/bridge_file_test.go +0 -57
  248. package/dist/templates/native-go/backend/internal/dsm/entry.go +0 -177
  249. package/dist/templates/native-go/backend/internal/dsm/entry_test.go +0 -315
  250. package/dist/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
  251. package/dist/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
  252. package/dist/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
  253. package/dist/templates/native-go/backend/internal/dsm/native/admin_check.c +0 -28
  254. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
  255. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
  256. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
  257. package/dist/templates/native-go/backend/internal/dsm/native/apppriv_check.c +0 -33
  258. package/dist/templates/native-go/backend/internal/dsm/native/build.sh +0 -18
  259. package/dist/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +0 -400
  260. package/dist/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +0 -501
  261. package/dist/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +0 -5
  262. package/dist/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +0 -21
  263. package/dist/templates/native-go/backend/internal/dsm/native/provenance.json +0 -18
  264. package/dist/templates/native-go/backend/internal/filestation/browse_test.go +0 -67
  265. package/dist/templates/native-go/backend/internal/filestation/check_permission.go +0 -71
  266. package/dist/templates/native-go/backend/internal/filestation/check_permission_test.go +0 -77
  267. package/dist/templates/native-go/backend/internal/filestation/client.go +0 -337
  268. package/dist/templates/native-go/backend/internal/filestation/client_test.go +0 -155
  269. package/dist/templates/native-go/backend/internal/filestation/doc.go +0 -4
  270. package/dist/templates/native-go/backend/internal/filestation/download_dsm71_test.go +0 -82
  271. package/dist/templates/native-go/backend/internal/filestation/http.go +0 -70
  272. package/dist/templates/native-go/backend/internal/filestation/http_test.go +0 -188
  273. package/dist/templates/native-go/backend/internal/filestation/operations_test.go +0 -206
  274. package/dist/templates/native-go/backend/internal/filestation/read_file_test.go +0 -89
  275. package/dist/templates/native-go/backend/internal/filestation/sdk_policy_test.go +0 -39
  276. package/dist/templates/native-go/backend/internal/filestation/service.go +0 -254
  277. package/dist/templates/native-go/backend/internal/filestation/service_test.go +0 -74
  278. package/dist/templates/native-go/backend/internal/filestation/upload_stream.go +0 -76
  279. package/dist/templates/native-go/backend/internal/filestation/upload_stream_test.go +0 -77
  280. package/dist/templates/native-go/backend/internal/filestation/write.go +0 -32
  281. package/dist/templates/native-go/backend/internal/filestation/write_test.go +0 -124
  282. package/dist/templates/native-go/backend/internal/identity/README.md +0 -59
  283. package/dist/templates/native-go/backend/internal/identity/dsm.go +0 -115
  284. package/dist/templates/native-go/backend/internal/identity/http.go +0 -291
  285. package/dist/templates/native-go/backend/internal/identity/identity_test.go +0 -530
  286. package/dist/templates/native-go/backend/internal/identity/service.go +0 -159
  287. package/dist/templates/native-go/backend/internal/identity/store.go +0 -109
  288. package/dist/templates/native-go/backend/internal/jsonlimits/limits.go +0 -48
  289. package/dist/templates/native-go/backend/internal/jsonlimits/limits_test.go +0 -52
  290. package/dist/templates/native-go/backend/internal/portal/portal.go +0 -138
  291. package/dist/templates/native-go/backend/internal/portal/portal_test.go +0 -89
  292. package/dist/templates/native-go/dsm-package.yaml +0 -71
  293. package/dist/templates/native-go/gitignore +0 -1
  294. package/dist/templates/native-go/i18n/glossary.json +0 -663
  295. package/dist/templates/native-go/i18n/messages/de.json +0 -29
  296. package/dist/templates/native-go/i18n/messages/en.json +0 -29
  297. package/dist/templates/native-go/i18n/messages/es.json +0 -29
  298. package/dist/templates/native-go/i18n/messages/fr.json +0 -29
  299. package/dist/templates/native-go/i18n/messages/it.json +0 -29
  300. package/dist/templates/native-go/i18n/messages/ja.json +0 -29
  301. package/dist/templates/native-go/i18n/messages/ko.json +0 -29
  302. package/dist/templates/native-go/i18n/messages/zh-CN.json +0 -29
  303. package/dist/templates/native-go/i18n/messages/zh-TW.json +0 -29
  304. package/dist/templates/native-go/ui/app.css +0 -45
  305. package/dist/templates/native-go/ui/app.js +0 -111
  306. package/dist/templates/native-go-delegate/DELEGATE.md +0 -263
  307. package/dist/templates/native-go-delegate/backend/cmd/background-worker/main.go +0 -48
  308. package/dist/templates/native-go-delegate/backend/internal/app/delegate.go +0 -25
  309. package/dist/templates/native-go-delegate/backend/internal/app/delegate_on.go +0 -5
  310. package/dist/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +0 -31
  311. package/dist/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +0 -174
  312. package/dist/templates/native-go-delegate/backend/internal/background/delegated.go +0 -277
  313. package/dist/templates/native-go-delegate/backend/internal/background/delegated_moves.go +0 -270
  314. package/dist/templates/native-go-delegate/backend/internal/background/delegated_test.go +0 -34
  315. package/dist/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +0 -410
  316. package/dist/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +0 -15
  317. package/dist/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +0 -95
  318. package/dist/templates/native-go-delegate/backend/internal/delegate/client.go +0 -151
  319. package/dist/templates/native-go-delegate/backend/internal/delegate/client_test.go +0 -214
  320. package/dist/templates/native-go-delegate/backend/internal/delegate/destination.go +0 -110
  321. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state.go +0 -117
  322. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +0 -60
  323. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_test.go +0 -116
  324. package/dist/templates/native-go-delegate/backend/internal/delegate/example.go +0 -81
  325. package/dist/templates/native-go-delegate/backend/internal/delegate/example_test.go +0 -91
  326. package/dist/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +0 -511
  327. package/dist/templates/native-go-delegate/backend/internal/delegate/files.go +0 -132
  328. package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +0 -92
  329. package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +0 -99
  330. package/dist/templates/native-go-delegate/backend/internal/delegate/move.go +0 -348
  331. package/dist/templates/native-go-delegate/backend/internal/delegate/move_test.go +0 -351
  332. package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list.go +0 -65
  333. package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +0 -114
  334. package/dist/templates/native-go-delegate/backend/internal/delegate/retry.go +0 -106
  335. package/dist/templates/native-go-delegate/backend/internal/delegate/retry_test.go +0 -143
  336. package/dist/templates/native-go-delegate/backend/internal/delegate/service.go +0 -364
  337. package/dist/templates/native-go-delegate/backend/internal/delegate/service_test.go +0 -318
  338. package/dist/templates/native-go-delegate/backend/internal/delegate/staging.go +0 -121
  339. package/dist/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +0 -51
  340. package/dist/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +0 -112
  341. package/dist/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +0 -137
  342. package/dist/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +0 -101
  343. package/dist/templates/native-go-delegate/backend/internal/delegate/worker.go +0 -225
  344. package/dist/templates/native-go-delegate/backend/internal/filestation/files.go +0 -43
  345. package/dist/templates/native-go-delegate/backend/internal/filestation/files_test.go +0 -59
  346. package/dist/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +0 -37
  347. package/dist/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +0 -113
  348. package/dist/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +0 -70
  349. package/dist/templates/native-go-delegate/frontend/src/delegate/copy.ts +0 -8
  350. package/dist/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +0 -11
  351. package/dist/templates/native-go-delegate/frontend/test/background-save.test.ts +0 -121
  352. package/dist/templates/native-go-delegate/frontend/test/delegate.test.ts +0 -145
  353. package/dist/templates/native-go-delegate/frontend/test/scope-settings.test.ts +0 -49
  354. package/dist/templates/native-go-delegate/test-frontend.sh +0 -12
  355. package/dist/templates/native-go-delegate/test.sh +0 -18
  356. package/dist/templates/native-go-jobs/BACKGROUND.md +0 -108
  357. package/dist/templates/native-go-jobs/backend/internal/app/background_on.go +0 -7
  358. package/dist/templates/native-go-jobs/backend/internal/app/background_routes_test.go +0 -90
  359. package/dist/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +0 -170
  360. package/dist/templates/native-go-jobs/frontend/src/background/i18n/de.json +0 -75
  361. package/dist/templates/native-go-jobs/frontend/src/background/i18n/en.json +0 -75
  362. package/dist/templates/native-go-jobs/frontend/src/background/i18n/es.json +0 -75
  363. package/dist/templates/native-go-jobs/frontend/src/background/i18n/fr.json +0 -75
  364. package/dist/templates/native-go-jobs/frontend/src/background/i18n/it.json +0 -75
  365. package/dist/templates/native-go-jobs/frontend/src/background/i18n/ja.json +0 -75
  366. package/dist/templates/native-go-jobs/frontend/src/background/i18n/ko.json +0 -75
  367. package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +0 -75
  368. package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +0 -75
  369. package/dist/templates/native-go-jobs/frontend/src/background/i18n.ts +0 -19
  370. package/dist/templates/native-go-jobs/frontend/src/background/picker-provider.ts +0 -12
  371. package/dist/templates/native-go-jobs/frontend/src/background/request-key.ts +0 -5
  372. package/dist/templates/native-go-jobs/frontend/test/background.test.ts +0 -205
  373. package/dist/templates/native-go-root-ops/backend/internal/app/executor.go +0 -140
  374. package/dist/templates/native-go-root-ops/backend/internal/app/executor_test.go +0 -117
  375. package/dist/templates/native-go-root-ops/root/whoami.sh +0 -3
  376. package/dist/templates/native-go-vue/README.md +0 -47
  377. package/dist/templates/native-go-vue/frontend/DESIGN.md +0 -61
  378. package/dist/templates/native-go-vue/frontend/package-lock.json +0 -2530
  379. package/dist/templates/native-go-vue/frontend/package.json +0 -6
  380. package/dist/templates/native-go-vue/frontend/src/App.vue +0 -96
  381. package/dist/templates/native-go-vue/frontend/src/CapabilityPanels.vue +0 -6
  382. package/dist/templates/native-go-vue/frontend/src/context.ts +0 -78
  383. package/dist/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +0 -70
  384. package/dist/templates/native-go-vue/frontend/src/delegate/catalogs.ts +0 -11
  385. package/dist/templates/native-go-vue/frontend/src/delegate/copy.test.ts +0 -12
  386. package/dist/templates/native-go-vue/frontend/src/delegate/copy.ts +0 -4
  387. package/dist/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +0 -23
  388. package/dist/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +0 -24
  389. package/dist/templates/native-go-vue/frontend/src/delegate/facade.test.ts +0 -100
  390. package/dist/templates/native-go-vue/frontend/src/delegate/facade.ts +0 -85
  391. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/de.json +0 -47
  392. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/en.json +0 -47
  393. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/es.json +0 -47
  394. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +0 -47
  395. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/it.json +0 -47
  396. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +0 -47
  397. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +0 -47
  398. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +0 -42
  399. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +0 -42
  400. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +0 -42
  401. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +0 -42
  402. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +0 -42
  403. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +0 -42
  404. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +0 -42
  405. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +0 -42
  406. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +0 -42
  407. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +0 -47
  408. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +0 -47
  409. package/dist/templates/native-go-vue/frontend/src/delegate/long-running.ts +0 -57
  410. package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +0 -12
  411. package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.ts +0 -24
  412. package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +0 -12
  413. package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +0 -21
  414. package/dist/templates/native-go-vue/frontend/src/files/FileBrowser.vue +0 -131
  415. package/dist/templates/native-go-vue/frontend/src/files/FilesPage.vue +0 -35
  416. package/dist/templates/native-go-vue/frontend/src/files/files.test.ts +0 -100
  417. package/dist/templates/native-go-vue/frontend/src/files/provider.test.ts +0 -48
  418. package/dist/templates/native-go-vue/frontend/src/files/transfers.test.ts +0 -27
  419. package/dist/templates/native-go-vue/frontend/src/files/transfers.ts +0 -25
  420. package/dist/templates/native-go-vue/frontend/src/i18n/de.json +0 -20
  421. package/dist/templates/native-go-vue/frontend/src/i18n/en.json +0 -20
  422. package/dist/templates/native-go-vue/frontend/src/i18n/es.json +0 -20
  423. package/dist/templates/native-go-vue/frontend/src/i18n/fr.json +0 -20
  424. package/dist/templates/native-go-vue/frontend/src/i18n/it.json +0 -20
  425. package/dist/templates/native-go-vue/frontend/src/i18n/ja.json +0 -20
  426. package/dist/templates/native-go-vue/frontend/src/i18n/ko.json +0 -20
  427. package/dist/templates/native-go-vue/frontend/src/i18n/zh-CN.json +0 -20
  428. package/dist/templates/native-go-vue/frontend/src/i18n/zh-TW.json +0 -20
  429. package/dist/templates/native-go-vue/frontend/src/i18n.ts +0 -13
  430. package/dist/templates/native-go-vue/frontend/src/identity/DESIGN.md +0 -46
  431. package/dist/templates/native-go-vue/frontend/src/identity/LoginPage.vue +0 -78
  432. package/dist/templates/native-go-vue/frontend/src/identity/i18n/de.json +0 -27
  433. package/dist/templates/native-go-vue/frontend/src/identity/i18n/en.json +0 -27
  434. package/dist/templates/native-go-vue/frontend/src/identity/i18n/es.json +0 -27
  435. package/dist/templates/native-go-vue/frontend/src/identity/i18n/fr.json +0 -27
  436. package/dist/templates/native-go-vue/frontend/src/identity/i18n/it.json +0 -27
  437. package/dist/templates/native-go-vue/frontend/src/identity/i18n/ja.json +0 -27
  438. package/dist/templates/native-go-vue/frontend/src/identity/i18n/ko.json +0 -27
  439. package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +0 -27
  440. package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +0 -27
  441. package/dist/templates/native-go-vue/frontend/src/identity/i18n.ts +0 -14
  442. package/dist/templates/native-go-vue/frontend/src/identity/login.test.ts +0 -32
  443. package/dist/templates/native-go-vue/frontend/src/identity/session.test.ts +0 -33
  444. package/dist/templates/native-go-vue/frontend/src/identity/session.ts +0 -74
  445. package/dist/templates/native-go-vue/frontend/src/main.ts +0 -32
  446. package/dist/templates/native-go-vue/frontend/src/nas/NasPicker.vue +0 -42
  447. package/dist/templates/native-go-vue/frontend/src/nas/contract.ts +0 -12
  448. package/dist/templates/native-go-vue/frontend/src/nas/destination.test.ts +0 -48
  449. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +0 -41
  450. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +0 -41
  451. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +0 -41
  452. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +0 -41
  453. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +0 -41
  454. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +0 -41
  455. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +0 -41
  456. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +0 -41
  457. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +0 -41
  458. package/dist/templates/native-go-vue/frontend/src/nas/i18n.ts +0 -2
  459. package/dist/templates/native-go-vue/frontend/src/nas/locale.ts +0 -24
  460. package/dist/templates/native-go-vue/frontend/src/nas/provider.ts +0 -50
  461. package/dist/templates/native-go-vue/frontend/src/nas/use-request.ts +0 -18
  462. package/dist/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +0 -39
  463. package/dist/templates/native-go-vue/frontend/src/shell/AppShell.vue +0 -48
  464. package/dist/templates/native-go-vue/frontend/src/shell/i18n/de.json +0 -4
  465. package/dist/templates/native-go-vue/frontend/src/shell/i18n/en.json +0 -4
  466. package/dist/templates/native-go-vue/frontend/src/shell/i18n/es.json +0 -4
  467. package/dist/templates/native-go-vue/frontend/src/shell/i18n/fr.json +0 -4
  468. package/dist/templates/native-go-vue/frontend/src/shell/i18n/it.json +0 -4
  469. package/dist/templates/native-go-vue/frontend/src/shell/i18n/ja.json +0 -4
  470. package/dist/templates/native-go-vue/frontend/src/shell/i18n/ko.json +0 -4
  471. package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +0 -4
  472. package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +0 -4
  473. package/dist/templates/native-go-vue/frontend/src/shell/i18n.ts +0 -17
  474. package/dist/templates/native-go-vue/frontend/src/shell/pages.ts +0 -15
  475. package/dist/templates/native-go-vue/frontend/src/style.css +0 -27
  476. package/dist/templates/native-go-vue/frontend/test/apps.test.ts +0 -57
  477. package/dist/templates/native-go-vue/frontend/test/native-controls.test.ts +0 -27
  478. package/dist/templates/native-go-vue/frontend/test/portal-settings.test.ts +0 -71
  479. package/dist/templates/native-go-vue/frontend/test/shell-i18n.test.ts +0 -50
  480. package/dist/templates/native-go-vue/frontend/test/shell-ui.test.ts +0 -20
  481. package/dist/templates/native-go-vue/frontend/test/shell.test.ts +0 -30
  482. package/dist/templates/native-go-vue/frontend/tsconfig.json +0 -1
  483. package/dist/templates/native-go-vue/frontend/vite.config.ts +0 -10
  484. package/dist/templates/native-go-vue/gitignore +0 -2
  485. package/templates/_daemon/fixture_linux_test.go +0 -15
  486. package/templates/_daemon/fixture_other_test.go +0 -7
  487. package/templates/_daemon/go.mod +0 -5
  488. package/templates/_daemon/main.go +0 -611
  489. package/templates/_daemon/main_test.go +0 -315
  490. package/templates/_daemon/process_linux.go +0 -55
  491. package/templates/_daemon/process_linux_test.go +0 -161
  492. package/templates/_daemon/process_other.go +0 -14
  493. package/templates/_daemon/testdata/child.go +0 -44
  494. package/templates/_executor/README.md +0 -318
  495. package/templates/_executor/anchor.go +0 -156
  496. package/templates/_executor/anchor_test.go +0 -161
  497. package/templates/_executor/apppriv_review_test.go +0 -28
  498. package/templates/_executor/auth_presence_review_test.go +0 -38
  499. package/templates/_executor/cancel_contract_test.go +0 -236
  500. package/templates/_executor/cmd/lifecycle/main.go +0 -42
  501. package/templates/_executor/cookie_review_test.go +0 -27
  502. package/templates/_executor/copy.go +0 -64
  503. package/templates/_executor/copy_test.go +0 -88
  504. package/templates/_executor/digest_review_test.go +0 -120
  505. package/templates/_executor/directories.go +0 -40
  506. package/templates/_executor/dsm.go +0 -369
  507. package/templates/_executor/dsm_test.go +0 -290
  508. package/templates/_executor/executor.go +0 -735
  509. package/templates/_executor/executor_test.go +0 -314
  510. package/templates/_executor/go.mod +0 -5
  511. package/templates/_executor/identity.go +0 -74
  512. package/templates/_executor/identity_kernel_linux_test.go +0 -60
  513. package/templates/_executor/identity_linux.go +0 -82
  514. package/templates/_executor/identity_security_test.go +0 -43
  515. package/templates/_executor/internal/lifecycle/lifecycle.go +0 -95
  516. package/templates/_executor/internal/lifecycle/lifecycle_test.go +0 -232
  517. package/templates/_executor/internal/taskscript/boot.sh +0 -31
  518. package/templates/_executor/internal/taskscript/cmd/main.go +0 -19
  519. package/templates/_executor/internal/taskscript/control.sh +0 -31
  520. package/templates/_executor/internal/taskscript/tasks.go +0 -44
  521. package/templates/_executor/json_review_test.go +0 -40
  522. package/templates/_executor/lifecycle_test.go +0 -97
  523. package/templates/_executor/link_linux.go +0 -28
  524. package/templates/_executor/long_running_test.go +0 -530
  525. package/templates/_executor/main.go +0 -576
  526. package/templates/_executor/managed.go +0 -117
  527. package/templates/_executor/managed_test.go +0 -137
  528. package/templates/_executor/move_linux.go +0 -490
  529. package/templates/_executor/move_linux_test.go +0 -460
  530. package/templates/_executor/move_validation.go +0 -46
  531. package/templates/_executor/move_validation_test.go +0 -187
  532. package/templates/_executor/operations.go +0 -926
  533. package/templates/_executor/path_test.go +0 -35
  534. package/templates/_executor/pid.go +0 -37
  535. package/templates/_executor/pid_test.go +0 -113
  536. package/templates/_executor/platform_linux.go +0 -187
  537. package/templates/_executor/platform_linux_test.go +0 -191
  538. package/templates/_executor/platform_other.go +0 -76
  539. package/templates/_executor/process.go +0 -142
  540. package/templates/_executor/purge_log.go +0 -18
  541. package/templates/_executor/records.go +0 -242
  542. package/templates/_executor/scope_cancel_contract_test.go +0 -91
  543. package/templates/_executor/scope_client.go +0 -37
  544. package/templates/_executor/scope_contract.go +0 -12
  545. package/templates/_executor/selected_scope.go +0 -146
  546. package/templates/_executor/selected_scope_test.go +0 -186
  547. package/templates/_executor/socket_linux_test.go +0 -46
  548. package/templates/_executor/status_disabled_test.go +0 -33
  549. package/templates/_executor/store.go +0 -91
  550. package/templates/_executor/supervise.go +0 -109
  551. package/templates/_executor/supervise_test.go +0 -130
  552. package/templates/_executor/task_race_review_test.go +0 -47
  553. package/templates/_executor/tasks.go +0 -320
  554. package/templates/_executor/tasks_dsm71_test.go +0 -114
  555. package/templates/_executor/tasks_review_test.go +0 -43
  556. package/templates/_executor/tasks_test.go +0 -223
  557. package/templates/_executor/testdata/evidence/cleanup.json +0 -24
  558. package/templates/_executor/testdata/evidence/final-smoke.jsonl +0 -9
  559. package/templates/_executor/testdata/evidence/kernel-acl.json +0 -6
  560. package/templates/_executor/testdata/evidence/linux-tests.log +0 -123
  561. package/templates/_executor/testdata/evidence/live.jsonl +0 -23
  562. package/templates/_executor/testdata/evidence/storage.json +0 -90
  563. package/templates/_executor/testdata/evidence/validation.json +0 -55
  564. package/templates/_executor/testdata/live_probe.py +0 -98
  565. package/templates/_executor/upgrade_watch_test.go +0 -244
  566. package/templates/_executor/watch.go +0 -164
  567. package/templates/_executor/watch_test.go +0 -291
  568. package/templates/_executor/write_review_linux_test.go +0 -87
  569. package/templates/_gateway/auth.go +0 -101
  570. package/templates/_gateway/auth_test.go +0 -216
  571. package/templates/_gateway/cgi.go +0 -133
  572. package/templates/_gateway/cgi_test.go +0 -156
  573. package/templates/_gateway/csrf.go +0 -73
  574. package/templates/_gateway/csrf_test.go +0 -155
  575. package/templates/_gateway/directory.go +0 -108
  576. package/templates/_gateway/directory_test.go +0 -202
  577. package/templates/_gateway/gateway.go +0 -412
  578. package/templates/_gateway/gateway_test.go +0 -676
  579. package/templates/_gateway/go.mod +0 -5
  580. package/templates/_gateway/groups.go +0 -66
  581. package/templates/_gateway/main.go +0 -45
  582. package/templates/_shared/AGENTS.md +0 -146
  583. package/templates/_shared/CLAUDE.md +0 -1
  584. package/templates/_shared/GO-LICENSE +0 -27
  585. package/templates/_shared/GO-PATENTS +0 -22
  586. package/templates/_shared/LICENSES/TEMPLATE.txt +0 -21
  587. package/templates/_shared/third-party-notices.mjs +0 -51
  588. package/templates/binary/LICENSES/GO-LICENSE +0 -27
  589. package/templates/binary/LICENSES/GO-PATENTS +0 -22
  590. package/templates/binary/dsm-package.yaml +0 -46
  591. package/templates/binary/example/main.go +0 -16
  592. package/templates/binary/gitignore +0 -2
  593. package/templates/binary/i18n/messages/de.json +0 -4
  594. package/templates/binary/i18n/messages/en.json +0 -4
  595. package/templates/binary/i18n/messages/es.json +0 -4
  596. package/templates/binary/i18n/messages/fr.json +0 -4
  597. package/templates/binary/i18n/messages/it.json +0 -4
  598. package/templates/binary/i18n/messages/ja.json +0 -4
  599. package/templates/binary/i18n/messages/ko.json +0 -4
  600. package/templates/binary/i18n/messages/zh-CN.json +0 -4
  601. package/templates/binary/i18n/messages/zh-TW.json +0 -4
  602. package/templates/binary/ui/app.css +0 -4
  603. package/templates/binary/ui/app.js +0 -32
  604. package/templates/compose/compose.yaml +0 -8
  605. package/templates/compose/synology-app.yaml +0 -16
  606. package/templates/native-authorization/AuthorizationGate.vue +0 -91
  607. package/templates/native-authorization/i18n/de.json +0 -37
  608. package/templates/native-authorization/i18n/en.json +0 -37
  609. package/templates/native-authorization/i18n/es.json +0 -37
  610. package/templates/native-authorization/i18n/fr.json +0 -37
  611. package/templates/native-authorization/i18n/index.ts +0 -15
  612. package/templates/native-authorization/i18n/it.json +0 -37
  613. package/templates/native-authorization/i18n/ja.json +0 -37
  614. package/templates/native-authorization/i18n/ko.json +0 -37
  615. package/templates/native-authorization/i18n/zh-CN.json +0 -37
  616. package/templates/native-authorization/i18n/zh-TW.json +0 -37
  617. package/templates/native-go/README.md +0 -459
  618. package/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +0 -61
  619. package/templates/native-go/backend/cmd/app/main.go +0 -95
  620. package/templates/native-go/backend/cmd/background-worker/main.go +0 -38
  621. package/templates/native-go/backend/go.mod +0 -9
  622. package/templates/native-go/backend/go.sum +0 -4
  623. package/templates/native-go/backend/internal/api/cgi_framing_test.go +0 -32
  624. package/templates/native-go/backend/internal/api/cookie_review_test.go +0 -28
  625. package/templates/native-go/backend/internal/api/deadline_test.go +0 -114
  626. package/templates/native-go/backend/internal/api/dsm-session.go +0 -54
  627. package/templates/native-go/backend/internal/api/dsm-session_test.go +0 -51
  628. package/templates/native-go/backend/internal/api/entry_test.go +0 -47
  629. package/templates/native-go/backend/internal/api/errors.go +0 -47
  630. package/templates/native-go/backend/internal/api/permissions.go +0 -161
  631. package/templates/native-go/backend/internal/api/permissions.json +0 -5
  632. package/templates/native-go/backend/internal/api/permissions_test.go +0 -113
  633. package/templates/native-go/backend/internal/api/policy_fixture_test.go +0 -8
  634. package/templates/native-go/backend/internal/api/registry.go +0 -142
  635. package/templates/native-go/backend/internal/api/registry_test.go +0 -344
  636. package/templates/native-go/backend/internal/api/resource_limits_test.go +0 -87
  637. package/templates/native-go/backend/internal/api/sdk-permissions.json +0 -59
  638. package/templates/native-go/backend/internal/api/sdk_policy_test.go +0 -31
  639. package/templates/native-go/backend/internal/api/server.go +0 -305
  640. package/templates/native-go/backend/internal/api/testdata/permissions-cases.json +0 -172
  641. package/templates/native-go/backend/internal/app/background.go +0 -249
  642. package/templates/native-go/backend/internal/app/background_none.go +0 -8
  643. package/templates/native-go/backend/internal/app/background_owner.go +0 -38
  644. package/templates/native-go/backend/internal/app/background_owner_test.go +0 -163
  645. package/templates/native-go/backend/internal/app/background_schedule.go +0 -69
  646. package/templates/native-go/backend/internal/app/background_schedule_test.go +0 -62
  647. package/templates/native-go/backend/internal/app/background_test.go +0 -320
  648. package/templates/native-go/backend/internal/app/delegate_config.go +0 -57
  649. package/templates/native-go/backend/internal/app/delegate_config_test.go +0 -28
  650. package/templates/native-go/backend/internal/app/delegate_none.go +0 -5
  651. package/templates/native-go/backend/internal/app/identity.go +0 -20
  652. package/templates/native-go/backend/internal/app/identity_test.go +0 -15
  653. package/templates/native-go/backend/internal/app/migrations.go +0 -41
  654. package/templates/native-go/backend/internal/app/migrations_test.go +0 -41
  655. package/templates/native-go/backend/internal/app/portal.go +0 -30
  656. package/templates/native-go/backend/internal/app/portal_test.go +0 -55
  657. package/templates/native-go/backend/internal/app/root_none.go +0 -9
  658. package/templates/native-go/backend/internal/app/routes.go +0 -137
  659. package/templates/native-go/backend/internal/app/routes_test.go +0 -165
  660. package/templates/native-go/backend/internal/app/session_files.go +0 -9
  661. package/templates/native-go/backend/internal/app/session_files_test.go +0 -14
  662. package/templates/native-go/backend/internal/app/shared_folder.go +0 -144
  663. package/templates/native-go/backend/internal/app/shared_folder_test.go +0 -158
  664. package/templates/native-go/backend/internal/background/access.go +0 -57
  665. package/templates/native-go/backend/internal/background/lock_test.go +0 -131
  666. package/templates/native-go/backend/internal/background/owner_test.go +0 -118
  667. package/templates/native-go/backend/internal/background/runner.go +0 -185
  668. package/templates/native-go/backend/internal/background/runner_test.go +0 -209
  669. package/templates/native-go/backend/internal/background/schedule.go +0 -336
  670. package/templates/native-go/backend/internal/background/schedule_test.go +0 -368
  671. package/templates/native-go/backend/internal/background/store.go +0 -825
  672. package/templates/native-go/backend/internal/background/store_test.go +0 -365
  673. package/templates/native-go/backend/internal/datamigrate/migrate.go +0 -191
  674. package/templates/native-go/backend/internal/datamigrate/migrate_test.go +0 -177
  675. package/templates/native-go/backend/internal/dsm/admin.go +0 -76
  676. package/templates/native-go/backend/internal/dsm/admin_linux.go +0 -110
  677. package/templates/native-go/backend/internal/dsm/admin_linux_test.go +0 -105
  678. package/templates/native-go/backend/internal/dsm/admin_other.go +0 -15
  679. package/templates/native-go/backend/internal/dsm/admin_test.go +0 -67
  680. package/templates/native-go/backend/internal/dsm/apppriv.go +0 -30
  681. package/templates/native-go/backend/internal/dsm/auth.go +0 -94
  682. package/templates/native-go/backend/internal/dsm/auth_test.go +0 -159
  683. package/templates/native-go/backend/internal/dsm/bridge_file.go +0 -75
  684. package/templates/native-go/backend/internal/dsm/bridge_file_test.go +0 -57
  685. package/templates/native-go/backend/internal/dsm/entry.go +0 -177
  686. package/templates/native-go/backend/internal/dsm/entry_test.go +0 -315
  687. package/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
  688. package/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
  689. package/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
  690. package/templates/native-go/backend/internal/dsm/native/admin_check.c +0 -28
  691. package/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
  692. package/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
  693. package/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
  694. package/templates/native-go/backend/internal/dsm/native/apppriv_check.c +0 -33
  695. package/templates/native-go/backend/internal/dsm/native/build.sh +0 -18
  696. package/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +0 -400
  697. package/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +0 -501
  698. package/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +0 -5
  699. package/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +0 -21
  700. package/templates/native-go/backend/internal/dsm/native/provenance.json +0 -18
  701. package/templates/native-go/backend/internal/filestation/browse_test.go +0 -67
  702. package/templates/native-go/backend/internal/filestation/check_permission.go +0 -71
  703. package/templates/native-go/backend/internal/filestation/check_permission_test.go +0 -77
  704. package/templates/native-go/backend/internal/filestation/client.go +0 -337
  705. package/templates/native-go/backend/internal/filestation/client_test.go +0 -155
  706. package/templates/native-go/backend/internal/filestation/doc.go +0 -4
  707. package/templates/native-go/backend/internal/filestation/download_dsm71_test.go +0 -82
  708. package/templates/native-go/backend/internal/filestation/http.go +0 -70
  709. package/templates/native-go/backend/internal/filestation/http_test.go +0 -188
  710. package/templates/native-go/backend/internal/filestation/operations_test.go +0 -206
  711. package/templates/native-go/backend/internal/filestation/read_file_test.go +0 -89
  712. package/templates/native-go/backend/internal/filestation/sdk_policy_test.go +0 -39
  713. package/templates/native-go/backend/internal/filestation/service.go +0 -254
  714. package/templates/native-go/backend/internal/filestation/service_test.go +0 -74
  715. package/templates/native-go/backend/internal/filestation/upload_stream.go +0 -76
  716. package/templates/native-go/backend/internal/filestation/upload_stream_test.go +0 -77
  717. package/templates/native-go/backend/internal/filestation/write.go +0 -32
  718. package/templates/native-go/backend/internal/filestation/write_test.go +0 -124
  719. package/templates/native-go/backend/internal/identity/README.md +0 -59
  720. package/templates/native-go/backend/internal/identity/dsm.go +0 -115
  721. package/templates/native-go/backend/internal/identity/http.go +0 -291
  722. package/templates/native-go/backend/internal/identity/identity_test.go +0 -530
  723. package/templates/native-go/backend/internal/identity/service.go +0 -159
  724. package/templates/native-go/backend/internal/identity/store.go +0 -109
  725. package/templates/native-go/backend/internal/jsonlimits/limits.go +0 -48
  726. package/templates/native-go/backend/internal/jsonlimits/limits_test.go +0 -52
  727. package/templates/native-go/backend/internal/portal/portal.go +0 -138
  728. package/templates/native-go/backend/internal/portal/portal_test.go +0 -89
  729. package/templates/native-go/dsm-package.yaml +0 -71
  730. package/templates/native-go/gitignore +0 -1
  731. package/templates/native-go/i18n/glossary.json +0 -663
  732. package/templates/native-go/i18n/messages/de.json +0 -29
  733. package/templates/native-go/i18n/messages/en.json +0 -29
  734. package/templates/native-go/i18n/messages/es.json +0 -29
  735. package/templates/native-go/i18n/messages/fr.json +0 -29
  736. package/templates/native-go/i18n/messages/it.json +0 -29
  737. package/templates/native-go/i18n/messages/ja.json +0 -29
  738. package/templates/native-go/i18n/messages/ko.json +0 -29
  739. package/templates/native-go/i18n/messages/zh-CN.json +0 -29
  740. package/templates/native-go/i18n/messages/zh-TW.json +0 -29
  741. package/templates/native-go/ui/app.css +0 -45
  742. package/templates/native-go/ui/app.js +0 -111
  743. package/templates/native-go-delegate/DELEGATE.md +0 -263
  744. package/templates/native-go-delegate/backend/cmd/background-worker/main.go +0 -48
  745. package/templates/native-go-delegate/backend/internal/app/delegate.go +0 -25
  746. package/templates/native-go-delegate/backend/internal/app/delegate_on.go +0 -5
  747. package/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +0 -31
  748. package/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +0 -174
  749. package/templates/native-go-delegate/backend/internal/background/delegated.go +0 -277
  750. package/templates/native-go-delegate/backend/internal/background/delegated_moves.go +0 -270
  751. package/templates/native-go-delegate/backend/internal/background/delegated_test.go +0 -34
  752. package/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +0 -410
  753. package/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +0 -15
  754. package/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +0 -95
  755. package/templates/native-go-delegate/backend/internal/delegate/client.go +0 -151
  756. package/templates/native-go-delegate/backend/internal/delegate/client_test.go +0 -214
  757. package/templates/native-go-delegate/backend/internal/delegate/destination.go +0 -110
  758. package/templates/native-go-delegate/backend/internal/delegate/destination_state.go +0 -117
  759. package/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +0 -60
  760. package/templates/native-go-delegate/backend/internal/delegate/destination_test.go +0 -116
  761. package/templates/native-go-delegate/backend/internal/delegate/example.go +0 -81
  762. package/templates/native-go-delegate/backend/internal/delegate/example_test.go +0 -91
  763. package/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +0 -511
  764. package/templates/native-go-delegate/backend/internal/delegate/files.go +0 -132
  765. package/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +0 -92
  766. package/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +0 -99
  767. package/templates/native-go-delegate/backend/internal/delegate/move.go +0 -348
  768. package/templates/native-go-delegate/backend/internal/delegate/move_test.go +0 -351
  769. package/templates/native-go-delegate/backend/internal/delegate/operations_list.go +0 -65
  770. package/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +0 -114
  771. package/templates/native-go-delegate/backend/internal/delegate/retry.go +0 -106
  772. package/templates/native-go-delegate/backend/internal/delegate/retry_test.go +0 -143
  773. package/templates/native-go-delegate/backend/internal/delegate/service.go +0 -364
  774. package/templates/native-go-delegate/backend/internal/delegate/service_test.go +0 -318
  775. package/templates/native-go-delegate/backend/internal/delegate/staging.go +0 -121
  776. package/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +0 -51
  777. package/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +0 -112
  778. package/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +0 -137
  779. package/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +0 -101
  780. package/templates/native-go-delegate/backend/internal/delegate/worker.go +0 -225
  781. package/templates/native-go-delegate/backend/internal/filestation/files.go +0 -43
  782. package/templates/native-go-delegate/backend/internal/filestation/files_test.go +0 -59
  783. package/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +0 -37
  784. package/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +0 -113
  785. package/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +0 -70
  786. package/templates/native-go-delegate/frontend/src/delegate/copy.ts +0 -8
  787. package/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +0 -11
  788. package/templates/native-go-delegate/frontend/test/background-save.test.ts +0 -121
  789. package/templates/native-go-delegate/frontend/test/delegate.test.ts +0 -145
  790. package/templates/native-go-delegate/frontend/test/scope-settings.test.ts +0 -49
  791. package/templates/native-go-delegate/test-frontend.sh +0 -12
  792. package/templates/native-go-delegate/test.sh +0 -18
  793. package/templates/native-go-jobs/BACKGROUND.md +0 -108
  794. package/templates/native-go-jobs/backend/internal/app/background_on.go +0 -7
  795. package/templates/native-go-jobs/backend/internal/app/background_routes_test.go +0 -90
  796. package/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +0 -170
  797. package/templates/native-go-jobs/frontend/src/background/i18n/de.json +0 -75
  798. package/templates/native-go-jobs/frontend/src/background/i18n/en.json +0 -75
  799. package/templates/native-go-jobs/frontend/src/background/i18n/es.json +0 -75
  800. package/templates/native-go-jobs/frontend/src/background/i18n/fr.json +0 -75
  801. package/templates/native-go-jobs/frontend/src/background/i18n/it.json +0 -75
  802. package/templates/native-go-jobs/frontend/src/background/i18n/ja.json +0 -75
  803. package/templates/native-go-jobs/frontend/src/background/i18n/ko.json +0 -75
  804. package/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +0 -75
  805. package/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +0 -75
  806. package/templates/native-go-jobs/frontend/src/background/i18n.ts +0 -19
  807. package/templates/native-go-jobs/frontend/src/background/picker-provider.ts +0 -12
  808. package/templates/native-go-jobs/frontend/src/background/request-key.ts +0 -5
  809. package/templates/native-go-jobs/frontend/test/background.test.ts +0 -205
  810. package/templates/native-go-root-ops/backend/internal/app/executor.go +0 -140
  811. package/templates/native-go-root-ops/backend/internal/app/executor_test.go +0 -117
  812. package/templates/native-go-root-ops/root/whoami.sh +0 -3
  813. package/templates/native-go-vue/README.md +0 -47
  814. package/templates/native-go-vue/frontend/DESIGN.md +0 -61
  815. package/templates/native-go-vue/frontend/package-lock.json +0 -2530
  816. package/templates/native-go-vue/frontend/package.json +0 -6
  817. package/templates/native-go-vue/frontend/src/App.vue +0 -96
  818. package/templates/native-go-vue/frontend/src/CapabilityPanels.vue +0 -6
  819. package/templates/native-go-vue/frontend/src/context.ts +0 -78
  820. package/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +0 -70
  821. package/templates/native-go-vue/frontend/src/delegate/catalogs.ts +0 -11
  822. package/templates/native-go-vue/frontend/src/delegate/copy.test.ts +0 -12
  823. package/templates/native-go-vue/frontend/src/delegate/copy.ts +0 -4
  824. package/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +0 -23
  825. package/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +0 -24
  826. package/templates/native-go-vue/frontend/src/delegate/facade.test.ts +0 -100
  827. package/templates/native-go-vue/frontend/src/delegate/facade.ts +0 -85
  828. package/templates/native-go-vue/frontend/src/delegate/i18n/de.json +0 -47
  829. package/templates/native-go-vue/frontend/src/delegate/i18n/en.json +0 -47
  830. package/templates/native-go-vue/frontend/src/delegate/i18n/es.json +0 -47
  831. package/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +0 -47
  832. package/templates/native-go-vue/frontend/src/delegate/i18n/it.json +0 -47
  833. package/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +0 -47
  834. package/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +0 -47
  835. package/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +0 -42
  836. package/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +0 -42
  837. package/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +0 -42
  838. package/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +0 -42
  839. package/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +0 -42
  840. package/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +0 -42
  841. package/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +0 -42
  842. package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +0 -42
  843. package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +0 -42
  844. package/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +0 -47
  845. package/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +0 -47
  846. package/templates/native-go-vue/frontend/src/delegate/long-running.ts +0 -57
  847. package/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +0 -12
  848. package/templates/native-go-vue/frontend/src/delegate/save-copy.ts +0 -24
  849. package/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +0 -12
  850. package/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +0 -21
  851. package/templates/native-go-vue/frontend/src/files/FileBrowser.vue +0 -131
  852. package/templates/native-go-vue/frontend/src/files/FilesPage.vue +0 -35
  853. package/templates/native-go-vue/frontend/src/files/files.test.ts +0 -100
  854. package/templates/native-go-vue/frontend/src/files/provider.test.ts +0 -48
  855. package/templates/native-go-vue/frontend/src/files/transfers.test.ts +0 -27
  856. package/templates/native-go-vue/frontend/src/files/transfers.ts +0 -25
  857. package/templates/native-go-vue/frontend/src/i18n/de.json +0 -20
  858. package/templates/native-go-vue/frontend/src/i18n/en.json +0 -20
  859. package/templates/native-go-vue/frontend/src/i18n/es.json +0 -20
  860. package/templates/native-go-vue/frontend/src/i18n/fr.json +0 -20
  861. package/templates/native-go-vue/frontend/src/i18n/it.json +0 -20
  862. package/templates/native-go-vue/frontend/src/i18n/ja.json +0 -20
  863. package/templates/native-go-vue/frontend/src/i18n/ko.json +0 -20
  864. package/templates/native-go-vue/frontend/src/i18n/zh-CN.json +0 -20
  865. package/templates/native-go-vue/frontend/src/i18n/zh-TW.json +0 -20
  866. package/templates/native-go-vue/frontend/src/i18n.ts +0 -13
  867. package/templates/native-go-vue/frontend/src/identity/DESIGN.md +0 -46
  868. package/templates/native-go-vue/frontend/src/identity/LoginPage.vue +0 -78
  869. package/templates/native-go-vue/frontend/src/identity/i18n/de.json +0 -27
  870. package/templates/native-go-vue/frontend/src/identity/i18n/en.json +0 -27
  871. package/templates/native-go-vue/frontend/src/identity/i18n/es.json +0 -27
  872. package/templates/native-go-vue/frontend/src/identity/i18n/fr.json +0 -27
  873. package/templates/native-go-vue/frontend/src/identity/i18n/it.json +0 -27
  874. package/templates/native-go-vue/frontend/src/identity/i18n/ja.json +0 -27
  875. package/templates/native-go-vue/frontend/src/identity/i18n/ko.json +0 -27
  876. package/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +0 -27
  877. package/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +0 -27
  878. package/templates/native-go-vue/frontend/src/identity/i18n.ts +0 -14
  879. package/templates/native-go-vue/frontend/src/identity/login.test.ts +0 -32
  880. package/templates/native-go-vue/frontend/src/identity/session.test.ts +0 -33
  881. package/templates/native-go-vue/frontend/src/identity/session.ts +0 -74
  882. package/templates/native-go-vue/frontend/src/main.ts +0 -32
  883. package/templates/native-go-vue/frontend/src/nas/NasPicker.vue +0 -42
  884. package/templates/native-go-vue/frontend/src/nas/contract.ts +0 -12
  885. package/templates/native-go-vue/frontend/src/nas/destination.test.ts +0 -48
  886. package/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +0 -41
  887. package/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +0 -41
  888. package/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +0 -41
  889. package/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +0 -41
  890. package/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +0 -41
  891. package/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +0 -41
  892. package/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +0 -41
  893. package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +0 -41
  894. package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +0 -41
  895. package/templates/native-go-vue/frontend/src/nas/i18n.ts +0 -2
  896. package/templates/native-go-vue/frontend/src/nas/locale.ts +0 -24
  897. package/templates/native-go-vue/frontend/src/nas/provider.ts +0 -50
  898. package/templates/native-go-vue/frontend/src/nas/use-request.ts +0 -18
  899. package/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +0 -39
  900. package/templates/native-go-vue/frontend/src/shell/AppShell.vue +0 -48
  901. package/templates/native-go-vue/frontend/src/shell/i18n/de.json +0 -4
  902. package/templates/native-go-vue/frontend/src/shell/i18n/en.json +0 -4
  903. package/templates/native-go-vue/frontend/src/shell/i18n/es.json +0 -4
  904. package/templates/native-go-vue/frontend/src/shell/i18n/fr.json +0 -4
  905. package/templates/native-go-vue/frontend/src/shell/i18n/it.json +0 -4
  906. package/templates/native-go-vue/frontend/src/shell/i18n/ja.json +0 -4
  907. package/templates/native-go-vue/frontend/src/shell/i18n/ko.json +0 -4
  908. package/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +0 -4
  909. package/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +0 -4
  910. package/templates/native-go-vue/frontend/src/shell/i18n.ts +0 -17
  911. package/templates/native-go-vue/frontend/src/shell/pages.ts +0 -15
  912. package/templates/native-go-vue/frontend/src/style.css +0 -27
  913. package/templates/native-go-vue/frontend/test/apps.test.ts +0 -57
  914. package/templates/native-go-vue/frontend/test/native-controls.test.ts +0 -27
  915. package/templates/native-go-vue/frontend/test/portal-settings.test.ts +0 -71
  916. package/templates/native-go-vue/frontend/test/shell-i18n.test.ts +0 -50
  917. package/templates/native-go-vue/frontend/test/shell-ui.test.ts +0 -20
  918. package/templates/native-go-vue/frontend/test/shell.test.ts +0 -30
  919. package/templates/native-go-vue/frontend/tsconfig.json +0 -1
  920. package/templates/native-go-vue/frontend/vite.config.ts +0 -10
  921. package/templates/native-go-vue/gitignore +0 -2
  922. /package/{dist/templates/_daemon → assets/go/daemon}/fixture_linux_test.go +0 -0
  923. /package/{dist/templates/_daemon → assets/go/daemon}/fixture_other_test.go +0 -0
  924. /package/{dist/templates/_daemon → assets/go/daemon}/go.mod +0 -0
  925. /package/{dist/templates/_daemon → assets/go/daemon}/main.go +0 -0
  926. /package/{dist/templates/_daemon → assets/go/daemon}/main_test.go +0 -0
  927. /package/{dist/templates/_daemon → assets/go/daemon}/process_linux.go +0 -0
  928. /package/{dist/templates/_daemon → assets/go/daemon}/process_linux_test.go +0 -0
  929. /package/{dist/templates/_daemon → assets/go/daemon}/process_other.go +0 -0
  930. /package/{dist/templates/_daemon → assets/go/daemon}/testdata/child.go +0 -0
  931. /package/{dist/templates/_gateway → assets/go/gateway}/auth.go +0 -0
  932. /package/{dist/templates/_gateway → assets/go/gateway}/auth_test.go +0 -0
  933. /package/{dist/templates/_gateway → assets/go/gateway}/cgi.go +0 -0
  934. /package/{dist/templates/_gateway → assets/go/gateway}/cgi_test.go +0 -0
  935. /package/{dist/templates/_gateway → assets/go/gateway}/csrf.go +0 -0
  936. /package/{dist/templates/_gateway → assets/go/gateway}/csrf_test.go +0 -0
  937. /package/{dist/templates/_gateway → assets/go/gateway}/directory.go +0 -0
  938. /package/{dist/templates/_gateway → assets/go/gateway}/directory_test.go +0 -0
  939. /package/{dist/templates/_gateway → assets/go/gateway}/gateway.go +0 -0
  940. /package/{dist/templates/_gateway → assets/go/gateway}/gateway_test.go +0 -0
  941. /package/{dist/templates/_gateway → assets/go/gateway}/go.mod +0 -0
  942. /package/{dist/templates/_gateway → assets/go/gateway}/groups.go +0 -0
  943. /package/{dist/templates/_gateway → assets/go/gateway}/main.go +0 -0
  944. /package/{dist/templates/_shared → assets/licenses}/GO-LICENSE +0 -0
  945. /package/{dist/templates/_shared → assets/licenses}/GO-PATENTS +0 -0
  946. /package/{dist/templates/_shared/LICENSES → assets/licenses}/TEMPLATE.txt +0 -0
package/dist/init.js CHANGED
@@ -3,8 +3,10 @@ import { isMap, isScalar, parse, parseDocument, stringify } from "yaml";
3
3
  import { capabilityNames, capabilitySettings } from "./capabilities.js";
4
4
  import { MOVE_FROM_STAGING } from './runtime/delegate-contract.js';
5
5
  import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
6
- import { basename, join, relative } from "node:path";
6
+ import { basename, join, relative, resolve } from "node:path";
7
+ import { SDK_MODULE, SDK_PACKAGE } from "./runtime/sdk-source.js";
7
8
  import { templatesRoot } from "./template-paths.js";
9
+ import { borrowedTarget, capabilityOverlays } from "./capability-overlays.js";
8
10
  import { resolveMinDsm, assertContainerMinDsm, DEFAULT_MIN_DSM, isDsmAtLeast } from "./build-spk/dsm-version.js";
9
11
  import { readSharedFolder } from "./standalone/shared-folder.js";
10
12
  const TEMPLATE_NAMES = [
@@ -35,20 +37,8 @@ export function nativeCapabilitySettings(names) {
35
37
  };
36
38
  return settings;
37
39
  }
38
- /**
39
- * native-go --with root-ops: files laid over the native-go template, and the
40
- * files they replace.
41
- */
42
- const ROOT_OVERLAY = "native-go-root-ops";
43
- const ROOT_REPLACED = ["backend/internal/app/root_none.go"];
44
- /** native-go --with jobs: overlay with the routes, the UI panel and the docs. */
45
- const BACKGROUND_OVERLAY = "native-go-jobs";
46
- const BACKGROUND_REPLACED = ["backend/internal/app/background_none.go"];
47
- /** Templates whose identity is filled in at init (placeholders in these files). */
48
- const SUBSTITUTED = {
49
- "native-go": ["dsm-package.yaml", "README.md"],
50
- "binary": ["dsm-package.yaml", "ui/app.js"],
51
- };
40
+ /** Templates whose identity is filled in at init: every generated file may carry a placeholder. */
41
+ const IDENTIFIED = ["native-go", "binary"];
52
42
  const PACKAGE_ID = /^[A-Za-z][A-Za-z0-9]{1,63}$/;
53
43
  /** npm never publishes files named .gitignore, so templates ship them as `gitignore`. */
54
44
  const RENAMED = { gitignore: ".gitignore" };
@@ -105,8 +95,9 @@ export function initFromTemplate(template, targetDir, options = {}) {
105
95
  throw new Error("[INIT_OPTIONS_UNSUPPORTED] --from 只適用於 compose。");
106
96
  if (caps.length && template !== "native-go")
107
97
  throw new Error("[CAPABILITY_UNSUPPORTED] binary/compose 不支援 --with 能力。");
108
- const background = caps.includes("jobs") || caps.includes("delegate");
109
- const executor = caps.includes("root-ops") || caps.includes("delegate");
98
+ const localSdk = template === "native-go" && process.env.SYNOPKGLAND_SDK_DIR ? resolve(process.env.SYNOPKGLAND_SDK_DIR) : undefined;
99
+ if (localSdk)
100
+ assertLocalSdkReady(localSdk, resolvedUi(template, options) === "vue");
110
101
  const source = join(templatesRoot(), template);
111
102
  if (!existsSync(source)) {
112
103
  throw new Error(`找不到模板:${template}`);
@@ -121,20 +112,14 @@ export function initFromTemplate(template, targetDir, options = {}) {
121
112
  if (rootExample && minDsm !== undefined && !isDsmAtLeast(minDsm, DEFAULT_MIN_DSM)) {
122
113
  throw new Error(`[MIN_DSM_INVALID] root templates require DSM ${DEFAULT_MIN_DSM} or later.`);
123
114
  }
124
- const overlays = [
125
- ...(rootExample ? [ROOT_OVERLAY] : []),
126
- ...(ui === "vue" ? ["native-go-vue"] : []),
127
- ...(background ? [BACKGROUND_OVERLAY] : []),
128
- ...(caps.includes("login") && existsSync(join(templatesRoot(), "native-go-identity")) ? ["native-go-identity"] : []),
129
- ...(caps.includes("files") && existsSync(join(templatesRoot(), "native-go-files")) ? ["native-go-files"] : []),
130
- ...(caps.includes("delegate") ? ["native-go-delegate"] : []),
131
- ].map(name => join(templatesRoot(), name));
115
+ const capability = capabilityOverlays(caps);
116
+ const overlays = [...(ui === "vue" ? ["native-go-vue"] : []), ...capability.overlays].map(name => join(templatesRoot(), name));
132
117
  // Shared legal resources also live in the CLI package; only the template
133
118
  // terms are an unconditional part of a generated project.
134
119
  const shared = join(templatesRoot(), "_shared");
135
120
  const sharedFiles = ["LICENSES/TEMPLATE.txt", "AGENTS.md", "CLAUDE.md"];
136
121
  const files = [...templateFiles(source), ...sharedFiles, ...overlays.flatMap(root => templateFiles(root)),
137
- ...(ui === "vue" ? ["frontend/third-party-notices.mjs"] : [])];
122
+ ...capability.borrowed.map(borrowedTarget), ...(ui === "vue" ? ["frontend/third-party-notices.mjs"] : [])];
138
123
  const collisions = files.map(targetName).filter((file) => existsSync(join(targetDir, file)));
139
124
  if (collisions.length > 0) {
140
125
  throw new Error(`[INIT_TARGET_NOT_EMPTY] ${targetDir} 已有 ${collisions.join(", ")};init 不會覆蓋既有檔案。請改用空目錄。`);
@@ -149,35 +134,25 @@ export function initFromTemplate(template, targetDir, options = {}) {
149
134
  for (const dir of (ui === "vue" ? ["frontend"] : [])) {
150
135
  cpSync(join(shared, "third-party-notices.mjs"), join(targetDir, dir, "third-party-notices.mjs"));
151
136
  }
152
- if (rootExample)
153
- ROOT_REPLACED.forEach(file => rmSync(join(targetDir, file)));
154
- if (caps.includes("delegate") && !rootExample) {
155
- cpSync(join(templatesRoot(), ROOT_OVERLAY, "backend/internal/app/executor.go"), join(targetDir, "backend/internal/app/executor.go"));
156
- cpSync(join(templatesRoot(), ROOT_OVERLAY, "backend/internal/app/executor_test.go"), join(targetDir, "backend/internal/app/executor_test.go"));
157
- ROOT_REPLACED.forEach(file => rmSync(join(targetDir, file), { force: true }));
158
- }
137
+ for (const path of capability.borrowed)
138
+ cpSync(join(templatesRoot(), path), join(targetDir, borrowedTarget(path)));
139
+ for (const file of capability.removed)
140
+ rmSync(join(targetDir, file));
159
141
  if (caps.includes("delegate")) {
160
- rmSync(join(targetDir, "backend/internal/app/delegate_none.go"));
161
142
  const path = join(targetDir, "backend/internal/api/permissions.json");
162
143
  const policy = JSON.parse(readFileSync(path, "utf8"));
163
144
  policy.methods["app.status"] = "authenticated";
164
145
  writeFileSync(path, JSON.stringify(policy, null, 2) + "\n");
165
146
  }
166
- if (background)
167
- BACKGROUND_REPLACED.forEach(file => rmSync(join(targetDir, file)));
168
147
  for (const [from, to] of Object.entries(RENAMED)) {
169
148
  if (files.includes(from)) {
170
149
  renameSync(join(targetDir, from), join(targetDir, to));
171
150
  }
172
151
  }
173
- for (const file of new Set([...(SUBSTITUTED[template] ?? []), ...overlays.flatMap(root => templateFiles(root))])) {
174
- const path = join(targetDir, targetName(file));
175
- let text = readFileSync(path, "utf8");
176
- for (const [token, value] of Object.entries(substitutions)) {
177
- text = text.replaceAll(token, value);
178
- }
179
- writeFileSync(path, text);
180
- }
152
+ for (const file of files.map(targetName))
153
+ substitute(join(targetDir, file), substitutions);
154
+ if (localSdk)
155
+ useLocalSdk(targetDir, localSdk);
181
156
  if (minDsm) {
182
157
  const manifest = join(targetDir, template !== "compose" ? "dsm-package.yaml" : "synology-app.yaml");
183
158
  writeFileSync(manifest, readFileSync(manifest, "utf8").replace(/^os_min_ver:.*$/m, `os_min_ver: "${minDsm}"`));
@@ -189,20 +164,6 @@ export function initFromTemplate(template, targetDir, options = {}) {
189
164
  }
190
165
  if (ui !== "vue")
191
166
  rmSync(join(targetDir, "frontend"), { recursive: true, force: true });
192
- if (background) {
193
- const routeTest = join(targetDir, "backend/internal/app/routes_test.go");
194
- writeFileSync(routeTest, readFileSync(routeTest, "utf8").replace('want := ""', 'want := sampleOutcome[r.Method()]'));
195
- }
196
- if (executor) {
197
- const path = join(targetDir, "backend/internal/app/routes_test.go");
198
- writeFileSync(path, readFileSync(path, "utf8").replace('if strings.HasPrefix(r.Method(), "jobs.") {', 'if r.Method() == "root.run" { want = "session_required" }\n\t\tif strings.HasPrefix(r.Method(), "jobs.") {'));
199
- }
200
- if (background && ui === "vue") {
201
- const app = join(targetDir, "frontend/src/App.vue");
202
- writeFileSync(app, readFileSync(app, "utf8")
203
- .replace("import AppShell from './shell/AppShell.vue'\n", "import AppShell from './shell/AppShell.vue'\nimport BackgroundPanel from './background/BackgroundPanel.vue'\n")
204
- .replace(" <!-- BACKGROUND_PANEL -->", " <BackgroundPanel v-if=\"app\" :key=\"app.user\" :ctx=\"ctx\" />"));
205
- }
206
167
  if (template !== "compose") {
207
168
  const path = join(targetDir, "dsm-package.yaml");
208
169
  const raw = parse(readFileSync(path, "utf8"));
@@ -262,6 +223,39 @@ function sharedFolderYaml(options) {
262
223
  }
263
224
  return `\ninstall:\n sharedFolder:\n${Object.entries(folder).map(([k, v]) => ` ${k}: ${v}\n`).join("")}`;
264
225
  }
226
+ /**
227
+ * A local sdk checkout must hold the Go module, and for a Vue frontend the
228
+ * built ts package: npm installs a file: package as it is, without its build.
229
+ */
230
+ function assertLocalSdkReady(sdkDir, vue) {
231
+ if (!existsSync(join(sdkDir, "go.mod"))) {
232
+ throw new Error(`[SDK_DIR_NOT_READY] SYNOPKGLAND_SDK_DIR=${sdkDir} 沒有 go.mod;請指向 syno-pkg-land-sdk 的 checkout。`);
233
+ }
234
+ const ts = join(sdkDir, "ts");
235
+ if (vue && !existsSync(join(ts, "dist"))) {
236
+ throw new Error(`[SDK_DIR_NOT_READY] ${ts} 尚未建置;前端安裝本機 SDK 時 npm 不會替它 build。請先執行 (cd ${ts} && npm ci && npm run build),SDK 原始碼改動後也要重新 build。`);
237
+ }
238
+ }
239
+ /** SYNOPKGLAND_SDK_DIR: the project builds against a local sdk checkout instead of the released version. */
240
+ function useLocalSdk(targetDir, sdkDir) {
241
+ const goMod = join(targetDir, "backend/go.mod");
242
+ writeFileSync(goMod, `${readFileSync(goMod, "utf8")}\nreplace ${SDK_MODULE} => ${sdkDir}\n`);
243
+ const frontend = join(targetDir, "frontend/package.json");
244
+ if (!existsSync(frontend))
245
+ return;
246
+ const pkg = JSON.parse(readFileSync(frontend, "utf8"));
247
+ pkg.dependencies[SDK_PACKAGE] = `file:${join(sdkDir, "ts")}`;
248
+ writeFileSync(frontend, JSON.stringify(pkg, null, 2) + "\n");
249
+ }
250
+ /** Fill the placeholders of one generated file; files without one, or removed by an overlay, stay untouched. */
251
+ function substitute(path, substitutions) {
252
+ if (!existsSync(path))
253
+ return;
254
+ const original = readFileSync(path, "utf8");
255
+ const text = Object.entries(substitutions).reduce((current, [token, value]) => current.replaceAll(token, value), original);
256
+ if (text !== original)
257
+ writeFileSync(path, text);
258
+ }
265
259
  function substitutionsFor(template, targetDir, options) {
266
260
  const ui = resolvedUi(template, options);
267
261
  const caps = capabilityNames(options.with ?? []);
@@ -274,7 +268,7 @@ function substitutionsFor(template, targetDir, options) {
274
268
  }
275
269
  if (options.ui !== undefined && !["plain", "vue"].includes(options.ui))
276
270
  throw new Error("[INIT_UI_INVALID] --ui 只接受 plain 或 vue。");
277
- if (!SUBSTITUTED[template]) {
271
+ if (!IDENTIFIED.includes(template)) {
278
272
  if (options.from && options.displayName !== undefined)
279
273
  validDisplayName(options.displayName);
280
274
  return {};
@@ -1,4 +1,3 @@
1
- import type { AppContract } from "../types.js";
2
1
  /**
3
2
  * DSM Application Portal alias: `https://<nas>/<alias>/` opens the App after
4
3
  * DSM sign-in. DSM itself only refuses empty aliases (4100), synoman
@@ -12,6 +11,12 @@ export declare const PORTAL_ALIAS_MAX = 64;
12
11
  * of Synology Apps, as observed on DSM 7.4-90069. DSM stays the authority.
13
12
  */
14
13
  export declare const RESERVED_PORTAL_ALIASES: readonly string[];
14
+ /**
15
+ * A portal needs the executor tier: DSM removes the alias files on uninstall
16
+ * but leaves nginx serving the alias, and only the root executor purge can
17
+ * reload it. A no-privilege App never runs anything as root.
18
+ */
19
+ export declare const PORTAL_REQUIRES_EXECUTOR = "portal \u9700\u8981 executor \u5C64\u7D1A\uFF08capabilities.rootOps \u6216 delegate\uFF09\uFF1A\u89E3\u9664\u5B89\u88DD\u5F8C DSM \u4E0D\u6703 reload nginx\uFF0C\u767B\u5165\u5165\u53E3\u5225\u540D\u8981\u7531 root executor \u6E05\u9664\u3002\u6C92\u6709 executor \u7684 App \u8ACB\u79FB\u9664 portal\uFF0C\u6539\u7531\u7BA1\u7406\u54E1\u5728 DSM \u624B\u52D5\u8A2D\u5B9A\u53CD\u5411\u4EE3\u7406\u3002";
15
20
  export interface PortalDeclaration {
16
21
  alias: string;
17
22
  }
@@ -20,6 +25,3 @@ export declare function isPortalAlias(value: unknown): value is string;
20
25
  export declare function defaultPortalAlias(packageId: string): string;
21
26
  /** `{}` or `{alias}`; undefined for any other shape. */
22
27
  export declare function readPortalDeclaration(value: unknown, packageId: string): PortalDeclaration | undefined;
23
- /** A Compose App reaches the portal only as a DSM window behind the DSM-authenticated gateway. */
24
- export declare function contractPortalSupported(contract: AppContract): boolean;
25
- export declare function resolvedContractPortal(contract: AppContract): PortalDeclaration | undefined;
@@ -1,5 +1,4 @@
1
1
  import { createHash } from "node:crypto";
2
- import { readWebIntegration, resolvedWebLaunch, usesAuthGateway } from "../contract/web-launch.js";
3
2
  /**
4
3
  * DSM Application Portal alias: `https://<nas>/<alias>/` opens the App after
5
4
  * DSM sign-in. DSM itself only refuses empty aliases (4100), synoman
@@ -16,6 +15,12 @@ export const RESERVED_PORTAL_ALIASES = [
16
15
  "dsfile", "indexdb", "mobile", "oauth", "scripts", "sharing", "ssdp", "synosdsjslib", "synohdpack", "webapi", "webman",
17
16
  "calendar", "chatplus", "contacts", "drive", "file", "photo", "sso", "synologymeet",
18
17
  ];
18
+ /**
19
+ * A portal needs the executor tier: DSM removes the alias files on uninstall
20
+ * but leaves nginx serving the alias, and only the root executor purge can
21
+ * reload it. A no-privilege App never runs anything as root.
22
+ */
23
+ export const PORTAL_REQUIRES_EXECUTOR = "portal 需要 executor 層級(capabilities.rootOps 或 delegate):解除安裝後 DSM 不會 reload nginx,登入入口別名要由 root executor 清除。沒有 executor 的 App 請移除 portal,改由管理員在 DSM 手動設定反向代理。";
19
24
  export function isPortalAlias(value) {
20
25
  return typeof value === "string" && PORTAL_ALIAS_PATTERN.test(value) && !RESERVED_PORTAL_ALIASES.includes(value);
21
26
  }
@@ -36,13 +41,3 @@ export function readPortalDeclaration(value, packageId) {
36
41
  return { alias: defaultPortalAlias(packageId) };
37
42
  return isPortalAlias(alias) ? { alias } : undefined;
38
43
  }
39
- /** A Compose App reaches the portal only as a DSM window behind the DSM-authenticated gateway. */
40
- export function contractPortalSupported(contract) {
41
- return resolvedWebLaunch(contract) === "dsm-window" && usesAuthGateway(contract);
42
- }
43
- export function resolvedContractPortal(contract) {
44
- const portal = readWebIntegration(contract)?.portal;
45
- if (portal === undefined || !contractPortalSupported(contract))
46
- return undefined;
47
- return readPortalDeclaration(portal, String(contract.package ?? ""));
48
- }
@@ -1,6 +1,5 @@
1
1
  import type { Translate } from "../build-spk/wizard-i18n.js";
2
2
  import type { InstallWizardStep } from "../build-spk/install-wizard.js";
3
- import type { AppContract } from "../types.js";
4
3
  /** Package payload paths DSM's app-portal worker copies to /usr/syno/etc/www/app.d at start. */
5
4
  export declare const PORTAL_JSON_RELPATH = "etc/portal.json";
6
5
  export declare const PORTAL_MUSTACHE_RELPATH = "etc/portal.mustache";
@@ -16,8 +15,6 @@ export interface PortalPackage {
16
15
  /** Default alias; the wizard answer replaces it. */
17
16
  alias: string;
18
17
  }
19
- /** A Compose portal opens the App's `.url` entry of ui/config, keyed by the package id. */
20
- export declare function contractPortal(contract: AppContract): PortalPackage | undefined;
21
18
  export declare function portalResource(): Record<string, unknown>;
22
19
  /** Every field of DSM's own app.d files; the worker refuses a partial file (synopkg start 272). */
23
20
  export declare function renderPortalJson(portal: PortalPackage): string;
@@ -1,4 +1,4 @@
1
- import { PORTAL_ALIAS_MAX, PORTAL_ALIAS_PATTERN, RESERVED_PORTAL_ALIASES, resolvedContractPortal } from "./alias.js";
1
+ import { PORTAL_ALIAS_MAX, PORTAL_ALIAS_PATTERN, RESERVED_PORTAL_ALIASES } from "./alias.js";
2
2
  /** Package payload paths DSM's app-portal worker copies to /usr/syno/etc/www/app.d at start. */
3
3
  export const PORTAL_JSON_RELPATH = "etc/portal.json";
4
4
  export const PORTAL_MUSTACHE_RELPATH = "etc/portal.mustache";
@@ -6,12 +6,6 @@ export const PORTAL_MUSTACHE_RELPATH = "etc/portal.mustache";
6
6
  export const PORTAL_INSTALL_KEY = "portal_alias";
7
7
  /** Package-owned install draft, never DSM's saved portal configuration. */
8
8
  export const PORTAL_DRAFT = "portal-install.json";
9
- /** A Compose portal opens the App's `.url` entry of ui/config, keyed by the package id. */
10
- export function contractPortal(contract) {
11
- const portal = resolvedContractPortal(contract);
12
- const packageId = String(contract.package);
13
- return portal && { appId: packageId, application: String(contract.displayname ?? packageId), alias: portal.alias };
14
- }
15
9
  export function portalResource() {
16
10
  return { "web-config": { "app-portal": { "json-relpath": PORTAL_JSON_RELPATH, "mustache-relpath": PORTAL_MUSTACHE_RELPATH } } };
17
11
  }
@@ -9,9 +9,9 @@ import { tmpdir } from "node:os";
9
9
  import { dirname, isAbsolute, join, relative, resolve } from "node:path";
10
10
  import { extractSpk, walkFiles } from "./build-spk/generator.js";
11
11
  import { invalid, readReproducible } from "./reproducible-config.js";
12
+ import { CLI_VERSION } from "./cli-version.js";
12
13
  export { readReproducible, validateReproducible } from "./reproducible-config.js";
13
14
  export const FINGERPRINT_RECORD = "reproducible-fingerprint.json";
14
- const CLI_VERSION = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version;
15
15
  const sha256 = (bytes) => createHash("sha256").update(bytes).digest("hex");
16
16
  function insideProject(root, path) {
17
17
  const rel = relative(realpathSync(root), realpathSync(path));
@@ -37,9 +37,22 @@ export interface MoveFromStaging {
37
37
  delegation_id: string;
38
38
  job_id: string;
39
39
  staging: string;
40
+ /**
41
+ * File name, or folders below the destination and a file name, for example
42
+ * `Album/CD1/01.flac`. Missing folders are created as the user, at most
43
+ * `DELEGATE_LIMITS.maxDestinationFolders` deep and `maxDestinationBytes` long.
44
+ */
40
45
  name: string;
41
46
  size: number;
47
+ /**
48
+ * When the name is taken: `fail` (default) refuses with `destination-exists`,
49
+ * `overwrite` atomically replaces a regular file the user can write, `rename`
50
+ * publishes `name (n).ext` (n up to 99) and the receipt reports that path.
51
+ */
52
+ conflict?: DelegateConflictPolicy;
42
53
  }
54
+ export declare const DELEGATE_CONFLICT_POLICIES: readonly ["fail", "overwrite", "rename"];
55
+ export type DelegateConflictPolicy = typeof DELEGATE_CONFLICT_POLICIES[number];
43
56
  export interface OperationRef {
44
57
  delegation_id: string;
45
58
  job_id: string;
@@ -76,4 +89,6 @@ export declare const DELEGATE_LIMITS: {
76
89
  readonly maxOperationBytes: number;
77
90
  readonly maxAuditBytes: number;
78
91
  readonly revalidateSeconds: 5;
92
+ readonly maxDestinationFolders: 16;
93
+ readonly maxDestinationBytes: 1024;
79
94
  };
@@ -7,6 +7,7 @@ export const DELEGATE_EXTENSION_OPERATIONS = [
7
7
  export const DELEGATE_OPERATION_STATES = [
8
8
  'queued', 'copying', 'committed', 'canceled', 'interrupted', 'uncertain',
9
9
  ];
10
+ export const DELEGATE_CONFLICT_POLICIES = ['fail', 'overwrite', 'rename'];
10
11
  export const DELEGATE_ROUTES = {
11
12
  'delegate.example.export': 'authenticated',
12
13
  'delegate.destination': 'authenticated',
@@ -24,4 +25,5 @@ export const DELEGATE_LIMITS = {
24
25
  maxFileBytes: 16 * 1024 ** 3, maxQueued: 16, maxActive: 1,
25
26
  maxCopySeconds: 86400, maxOperationBytes: 10 * 1024 ** 2,
26
27
  maxAuditBytes: 50 * 1024 ** 2, revalidateSeconds: 5,
28
+ maxDestinationFolders: 16, maxDestinationBytes: 1024,
27
29
  };
@@ -3,6 +3,7 @@ import type { CommandRunner } from '../standalone/build.js';
3
3
  import type { StandaloneManifest } from '../standalone/manifest.js';
4
4
  import { type ExecutorPolicy } from './executor-policy.js';
5
5
  import { type ExecutorPins, type ExecutorTask } from './executor-tasks.js';
6
+ import { type ExecutorDigestTable } from './executor-source.js';
6
7
  export interface ExecutorArtifact extends ExecutorPins {
7
8
  binary: string;
8
9
  lifecycleBinary: string;
@@ -10,8 +11,20 @@ export interface ExecutorArtifact extends ExecutorPins {
10
11
  policyText: string;
11
12
  tasks: ExecutorTask[];
12
13
  implementation: 'executor';
14
+ /** The SDK version the executor was built from; inspect regenerates the tasks from it. */
15
+ sdk: string;
16
+ warnings: string[];
13
17
  }
14
- export declare function buildExecutor(m: StandaloneManifest, arch: NativeArchFamily, work: string, run: CommandRunner): Promise<ExecutorArtifact | undefined>;
18
+ export interface ExecutorSourceOptions {
19
+ env?: NodeJS.ProcessEnv;
20
+ download?: (spec: string) => string;
21
+ digests?: ExecutorDigestTable;
22
+ }
23
+ /**
24
+ * Build the executor and lifecycle helper from the App's SDK version: a copy of
25
+ * the module directory, `go build .` and `./cmd/lifecycle` inside it.
26
+ */
27
+ export declare function buildExecutor(m: StandaloneManifest, arch: NativeArchFamily, work: string, run: CommandRunner, options?: ExecutorSourceOptions): Promise<ExecutorArtifact | undefined>;
15
28
  export declare function executorPlan(a: ExecutorArtifact): {
16
29
  package: string;
17
30
  executorDigest: string;
@@ -19,4 +32,5 @@ export declare function executorPlan(a: ExecutorArtifact): {
19
32
  policy: ExecutorPolicy;
20
33
  tasks: ExecutorTask[];
21
34
  implementation: "executor";
35
+ sdk: string;
22
36
  };
@@ -1,28 +1,51 @@
1
- import { existsSync, mkdirSync, readFileSync } from 'node:fs';
1
+ import { mkdirSync, readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- import { templatesRoot } from '../template-paths.js';
4
3
  import { PINNED_GO_HINT, pinnedGoBuildEnv, pinnedGoProblem } from '../build-spk/go-toolchain.js';
5
4
  import { StandaloneBuildError } from '../standalone/spk.js';
6
5
  import { checkCgiBinary } from '../standalone/binary.js';
7
6
  import { executorPolicy, executorPolicyText, sha256 } from './executor-policy.js';
8
7
  import { executorTasks } from './executor-tasks.js';
9
- export async function buildExecutor(m, arch, work, run) {
8
+ import { copyModule, verifyExecutorDigests } from './executor-source.js';
9
+ import { requiredSdk } from './sdk-source.js';
10
+ /** CLI-owned build flags; the release digest table is computed the same way, so they must not change within an SDK minor. */
11
+ const GO_BUILD = ['build', '-trimpath', '-buildvcs=false', '-ldflags', '-s -w -buildid=', '-o'];
12
+ function failure(error) {
13
+ const message = error.message;
14
+ const code = /^\[([A-Z0-9_]+)\]/.exec(message)?.[1] ?? 'EXECUTOR_BUILD_FAILED';
15
+ return new StandaloneBuildError(code, message.replace(/^\[[A-Z0-9_]+\] /, ''));
16
+ }
17
+ /**
18
+ * Build the executor and lifecycle helper from the App's SDK version: a copy of
19
+ * the module directory, `go build .` and `./cmd/lifecycle` inside it.
20
+ */
21
+ export async function buildExecutor(m, arch, work, run, options = {}) {
10
22
  if (!m.capabilities.delegate && !m.capabilities.rootOps)
11
23
  return undefined;
24
+ let sdk;
25
+ try {
26
+ sdk = requiredSdk(m.backend.kind === 'go' ? m.backend.dir : m.root, options.env, options.download);
27
+ }
28
+ catch (error) {
29
+ throw failure(error);
30
+ }
12
31
  const dir = join(work, `executor-${arch}`);
13
32
  mkdirSync(dir);
14
- const source = join(templatesRoot(), '_executor');
15
- if (!existsSync(join(source, 'go.mod')))
16
- throw new StandaloneBuildError('EXECUTOR_BUILD_FAILED', 'Executor sources are missing.');
33
+ const source = join(dir, 'source');
34
+ try {
35
+ copyModule(sdk.executorDir, source);
36
+ }
37
+ catch (error) {
38
+ throw new StandaloneBuildError('EXECUTOR_BUILD_FAILED', `Executor sources of SDK ${sdk.version} are missing: ${error.message}`);
39
+ }
17
40
  const binary = join(dir, 'executor');
18
- const result = await run('go', ['build', '-trimpath', '-buildvcs=false', '-ldflags', '-s -w -buildid=', '-o', binary, '.'], { cwd: source, env: { ...process.env, ...pinnedGoBuildEnv(arch) } });
41
+ const result = await run('go', [...GO_BUILD, binary, '.'], { cwd: source, env: { ...process.env, ...pinnedGoBuildEnv(arch) } });
19
42
  if (result.missing || result.status !== 0)
20
43
  throw new StandaloneBuildError('EXECUTOR_BUILD_FAILED', `Executor build failed (${arch}). ${PINNED_GO_HINT}\n${result.stderr}`);
21
44
  const problem = checkCgiBinary(work, binary, arch);
22
45
  if (problem)
23
46
  throw new StandaloneBuildError(problem.code, problem.message);
24
47
  const lifecycleBinary = join(dir, 'lifecycle');
25
- const lifecycleResult = await run('go', ['build', '-trimpath', '-buildvcs=false', '-ldflags', '-s -w -buildid=', '-o', lifecycleBinary, './cmd/lifecycle'], { cwd: source, env: { ...process.env, ...pinnedGoBuildEnv(arch) } });
48
+ const lifecycleResult = await run('go', [...GO_BUILD, lifecycleBinary, './cmd/lifecycle'], { cwd: source, env: { ...process.env, ...pinnedGoBuildEnv(arch) } });
26
49
  if (lifecycleResult.missing || lifecycleResult.status !== 0)
27
50
  throw new StandaloneBuildError('EXECUTOR_BUILD_FAILED', `Lifecycle helper build failed (${arch}). ${PINNED_GO_HINT}\n${lifecycleResult.stderr}`);
28
51
  const lifecycleProblem = checkCgiBinary(work, lifecycleBinary, arch);
@@ -31,10 +54,18 @@ export async function buildExecutor(m, arch, work, run) {
31
54
  const toolchainProblem = pinnedGoProblem(binary) ?? pinnedGoProblem(lifecycleBinary);
32
55
  if (toolchainProblem)
33
56
  throw new StandaloneBuildError('EXECUTOR_BUILD_FAILED', toolchainProblem);
57
+ const executorDigest = sha256(readFileSync(binary));
58
+ let warnings;
59
+ try {
60
+ warnings = verifyExecutorDigests(sdk, arch, { executor: executorDigest, lifecycle: sha256(readFileSync(lifecycleBinary)) }, options.digests);
61
+ }
62
+ catch (error) {
63
+ throw failure(error);
64
+ }
34
65
  const policy = executorPolicy(m), policyText = executorPolicyText(policy);
35
- const pins = { package: m.package, executorDigest: sha256(readFileSync(binary)), policyDigest: sha256(policyText) };
36
- return { ...pins, binary, lifecycleBinary, policy, policyText, tasks: executorTasks(pins), implementation: 'executor' };
66
+ const pins = { package: m.package, executorDigest, policyDigest: sha256(policyText) };
67
+ return { ...pins, binary, lifecycleBinary, policy, policyText, tasks: executorTasks(pins, sdk.executorDir), implementation: 'executor', sdk: sdk.version, warnings };
37
68
  }
38
69
  export function executorPlan(a) {
39
- return { package: a.package, executorDigest: a.executorDigest, policyDigest: a.policyDigest, policy: a.policy, tasks: a.tasks, implementation: a.implementation };
70
+ return { package: a.package, executorDigest: a.executorDigest, policyDigest: a.policyDigest, policy: a.policy, tasks: a.tasks, implementation: a.implementation, sdk: a.sdk };
40
71
  }
@@ -0,0 +1,24 @@
1
+ {
2
+ "0.9.0": {
3
+ "x86_64": "e009eb882e79e001fa8e6faf43e58525948c132f01f873562353284e5ac53b69",
4
+ "aarch64": "f9b84fb9b4a945abf28af6efe1bee0e11067dd0cc5ae26e53f8a949175d519a9",
5
+ "armv7": "05b670757c9a6cdea17596769ddd471c0563c044af75a564e1570caac8e37bd2",
6
+ "lifecycle": {
7
+ "x86_64": "819459580135e016184ad80c258350d57194d6134e8aa4cf1caf5237085b1004",
8
+ "aarch64": "5abcfc21403e84a0af15d972bcb819ac6fedfd9aaf5898ddc8c4bb06130f9f59",
9
+ "armv7": "b65a14f0fc77a1d3221c7dc6781eb66059aa200956b094d58a62bd1cad10f116"
10
+ },
11
+ "goToolchain": "go1.26.9"
12
+ },
13
+ "0.9.1": {
14
+ "x86_64": "5d75af3ce1de5b1d3ef5d89e062be1651a8e8b84edbca9903eb1a0b81d122fb5",
15
+ "aarch64": "b0e1f8174bf53eb435616ae0faf39ac929b515056f0b2fad5a6c264a1ff7f6e2",
16
+ "armv7": "17db613a4bdb181e0aa0f127822bfc13d7473fa846aadfbac3344b7c17700a84",
17
+ "lifecycle": {
18
+ "x86_64": "819459580135e016184ad80c258350d57194d6134e8aa4cf1caf5237085b1004",
19
+ "aarch64": "5abcfc21403e84a0af15d972bcb819ac6fedfd9aaf5898ddc8c4bb06130f9f59",
20
+ "armv7": "b65a14f0fc77a1d3221c7dc6781eb66059aa200956b094d58a62bd1cad10f116"
21
+ },
22
+ "goToolchain": "go1.26.9"
23
+ }
24
+ }
@@ -8,6 +8,7 @@ export interface ExecutorInspection {
8
8
  policyDigest: string;
9
9
  policy: ExecutorPolicy;
10
10
  implementation: string;
11
+ sdk: string;
11
12
  tasks: Array<ExecutorTask & {
12
13
  state: 'unknown' | 'ready' | 'needs-admin-approval' | 'blocked';
13
14
  }>;
@@ -3,6 +3,7 @@ import { join } from 'node:path';
3
3
  import { validExecutorPolicy, sha256 } from './executor-policy.js';
4
4
  import { parseDocument } from 'yaml';
5
5
  import { executorTasks } from './executor-tasks.js';
6
+ import { sdkSource } from './sdk-source.js';
6
7
  import { familyOfArchToken } from '../build-spk/dsm-arch.js';
7
8
  import { ELF_MACHINE } from '../standalone/binary.js';
8
9
  /** INFO key that anchors the executor digest; Package Center writes INFO as root. */
@@ -27,10 +28,12 @@ export function inspectExecutor(dir, pkg, arch) {
27
28
  throw new Error('Root script digest mismatch.');
28
29
  }
29
30
  const executorDigest = sha256(binary), policyDigest = sha256(text);
30
- const tasks = executorTasks({ package: pkg, policyDigest });
31
+ if (typeof plan.sdk !== 'string' || !/^\d+\.\d+\.\d+$/.test(plan.sdk))
32
+ throw new Error('Executor setup does not name its SDK version.');
33
+ const tasks = executorTasks({ package: pkg, policyDigest }, sdkSource(plan.sdk).executorDir);
31
34
  if (plan.package !== pkg || plan.executorDigest !== executorDigest || plan.policyDigest !== policyDigest || JSON.stringify(plan.policy) !== JSON.stringify(policy) || JSON.stringify(plan.tasks) !== JSON.stringify(tasks) || plan.implementation !== 'executor')
32
35
  throw new Error('Executor pins or task binding mismatch.');
33
- return { executor: { executorDigest, policyDigest, policy, implementation: plan.implementation, tasks: tasks.map(task => ({ ...task, state: 'unknown' })) }, findings: [] };
36
+ return { executor: { executorDigest, policyDigest, policy, implementation: plan.implementation, sdk: plan.sdk, tasks: tasks.map(task => ({ ...task, state: 'unknown' })) }, findings: [] };
34
37
  }
35
38
  catch (e) {
36
39
  return { findings: ['Executor inventory invalid: ' + e.message] };
@@ -1,6 +1,8 @@
1
1
  import type { RootOp } from '../standalone/root-ops.js';
2
2
  import type { EntryMode } from '../standalone/manifest.js';
3
- export declare const FILE_OPERATIONS: readonly ["files.list", "files.info", "files.createFolder", "files.checkPermission", "files.write"];
3
+ export declare const FILE_OPERATIONS: readonly ["files.list", "files.info", "files.createFolder", "files.checkPermission", "files.write", "files.read", "files.rename", "files.copy", "files.move", "files.delete"];
4
+ /** Started File Station tasks are followed with these; they are implied, never declared. */
5
+ export declare const FILE_TASK_OPERATIONS: readonly ["files.taskStatus", "files.taskCancel"];
4
6
  export interface DelegateCapability {
5
7
  operations: string[];
6
8
  scope: string;
@@ -1,6 +1,9 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { MOVE_FROM_STAGING, DELEGATE_EXTENSION_OPERATIONS } from './delegate-contract.js';
3
- export const FILE_OPERATIONS = ['files.list', 'files.info', 'files.createFolder', 'files.checkPermission', 'files.write'];
3
+ export const FILE_OPERATIONS = ['files.list', 'files.info', 'files.createFolder', 'files.checkPermission', 'files.write', 'files.read', 'files.rename', 'files.copy', 'files.move', 'files.delete'];
4
+ /** Started File Station tasks are followed with these; they are implied, never declared. */
5
+ export const FILE_TASK_OPERATIONS = ['files.taskStatus', 'files.taskCancel'];
6
+ const TASK_STARTING_OPERATIONS = ['files.copy', 'files.move', 'files.delete'];
4
7
  export function validDelegate(value) {
5
8
  if (!value || typeof value !== 'object' || Array.isArray(value))
6
9
  return false;
@@ -24,6 +27,8 @@ export function executorPolicy(m) {
24
27
  const operations = ['status'];
25
28
  if (m.capabilities.delegate) {
26
29
  operations.push('delegate.create', 'delegate.list', 'delegate.revoke', ...m.capabilities.delegate.operations);
30
+ if (m.capabilities.delegate.operations.some(op => TASK_STARTING_OPERATIONS.includes(op)))
31
+ operations.push(...FILE_TASK_OPERATIONS);
27
32
  if (m.capabilities.delegate.lifetime === 'until-revoked')
28
33
  operations.push(...DELEGATE_EXTENSION_OPERATIONS);
29
34
  }
@@ -50,7 +55,7 @@ export function validExecutorPolicy(value, pkg) {
50
55
  || !p.root || typeof p.root !== 'object' || Array.isArray(p.root))
51
56
  return false;
52
57
  const base = ['status', 'root.run', 'delegate.create', 'delegate.list', 'delegate.revoke'];
53
- if (p.operations.some(op => ![...base, ...FILE_OPERATIONS, ...DELEGATE_EXTENSION_OPERATIONS].includes(op)))
58
+ if (p.operations.some(op => ![...base, ...FILE_OPERATIONS, ...FILE_TASK_OPERATIONS, ...DELEGATE_EXTENSION_OPERATIONS].includes(op)))
54
59
  return false;
55
60
  const delegated = p.operations.some(op => op.startsWith('files.') || op.startsWith('delegate.'));
56
61
  if (!delegated)
@@ -0,0 +1,21 @@
1
+ import type { NativeArchFamily } from '../build-spk/dsm-arch.js';
2
+ import type { SdkSource } from './sdk-source.js';
3
+ type ArchDigests = Record<NativeArchFamily, string>;
4
+ /** Released SDK versions: the sha256 of the executor and lifecycle helper built from them, per architecture. */
5
+ export type ExecutorDigestTable = Record<string, ArchDigests & {
6
+ lifecycle: ArchDigests;
7
+ goToolchain: string;
8
+ }>;
9
+ export declare const SHIPPED_EXECUTOR_DIGESTS: ExecutorDigestTable;
10
+ /** Copy a module directory (the module cache is read-only) so the build owns a writable tree. */
11
+ export declare function copyModule(source: string, target: string): void;
12
+ /**
13
+ * A released SDK's executor is only shipped when its bytes equal the digest
14
+ * table; a local SDK checkout (SYNOPKGLAND_SDK_DIR) is built unverified.
15
+ * Returns the warnings to show.
16
+ */
17
+ export declare function verifyExecutorDigests(sdk: SdkSource, arch: NativeArchFamily, built: {
18
+ executor: string;
19
+ lifecycle: string;
20
+ }, table?: ExecutorDigestTable): string[];
21
+ export {};
@@ -0,0 +1,35 @@
1
+ import { chmodSync, cpSync, lstatSync, readdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import EXECUTOR_DIGESTS from './executor-digests.json' with { type: 'json' };
4
+ export const SHIPPED_EXECUTOR_DIGESTS = EXECUTOR_DIGESTS;
5
+ /** Copy a module directory (the module cache is read-only) so the build owns a writable tree. */
6
+ export function copyModule(source, target) {
7
+ cpSync(source, target, { recursive: true });
8
+ const writable = (path) => {
9
+ const stat = lstatSync(path);
10
+ if (stat.isSymbolicLink())
11
+ return;
12
+ chmodSync(path, stat.mode | 0o200);
13
+ if (stat.isDirectory())
14
+ for (const name of readdirSync(path))
15
+ writable(join(path, name));
16
+ };
17
+ writable(target);
18
+ }
19
+ /**
20
+ * A released SDK's executor is only shipped when its bytes equal the digest
21
+ * table; a local SDK checkout (SYNOPKGLAND_SDK_DIR) is built unverified.
22
+ * Returns the warnings to show.
23
+ */
24
+ export function verifyExecutorDigests(sdk, arch, built, table = SHIPPED_EXECUTOR_DIGESTS) {
25
+ if (sdk.local)
26
+ return [`[EXECUTOR_DIGEST_UNVERIFIED] executor built from the local SDK checkout SYNOPKGLAND_SDK_DIR (${arch}, sha256 ${built.executor}); the digest table was not checked. Do not publish this SPK.`];
27
+ const expected = table[sdk.version];
28
+ if (!expected)
29
+ throw new Error(`[EXECUTOR_DIGEST_MISMATCH] This CLI has no recorded executor digest for SDK ${sdk.version}; it knows ${Object.keys(table).join(', ') || 'no released SDK'}.`);
30
+ if (expected[arch] !== built.executor)
31
+ throw new Error(`[EXECUTOR_DIGEST_MISMATCH] SDK ${sdk.version} executor (${arch}) built to sha256 ${built.executor}, not the released ${expected[arch]}.`);
32
+ if (expected.lifecycle[arch] !== built.lifecycle)
33
+ throw new Error(`[EXECUTOR_DIGEST_MISMATCH] SDK ${sdk.version} lifecycle helper (${arch}) built to sha256 ${built.lifecycle}, not the released ${expected.lifecycle[arch]}.`);
34
+ return [];
35
+ }
@@ -11,7 +11,10 @@ export interface ExecutorTask {
11
11
  script: string;
12
12
  }
13
13
  export declare function validateTaskScript(script: string, limit: number): string;
14
- /** Tasks pin only the approved policy; the SPK's root-owned INFO anchors executor bytes. */
15
- export declare function executorTasks(pins: Pick<ExecutorPins, 'package' | 'policyDigest'>): ExecutorTask[];
14
+ /**
15
+ * Tasks pin only the approved policy; the SPK's root-owned INFO anchors executor bytes.
16
+ * The task scripts come from the SDK executor module the App builds with.
17
+ */
18
+ export declare function executorTasks(pins: Pick<ExecutorPins, 'package' | 'policyDigest'>, executorDir: string): ExecutorTask[];
16
19
  export declare function bootDefinition(task: ExecutorTask): Record<string, unknown>;
17
20
  export declare function controlDefinition(task: ExecutorTask): Record<string, unknown>;