@synopackageland/cli 0.7.3 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (951) hide show
  1. package/CHANGELOG.md +249 -0
  2. package/README.md +27 -5
  3. package/dist/add.js +4 -17
  4. package/dist/authorization-sdk.d.ts +0 -1
  5. package/dist/authorization-sdk.js +0 -1
  6. package/dist/build-spk/gateway.d.ts +2 -2
  7. package/dist/build-spk/gateway.js +4 -4
  8. package/dist/build-spk/generator.d.ts +1 -0
  9. package/dist/build-spk/generator.js +2 -2
  10. package/dist/build-spk/notices.js +12 -8
  11. package/dist/capability-overlays.d.ts +15 -0
  12. package/dist/capability-overlays.js +18 -0
  13. package/dist/cli-version.d.ts +2 -0
  14. package/dist/cli-version.js +3 -0
  15. package/dist/cli.js +110 -44
  16. package/dist/error-registry.js +18 -5
  17. package/dist/info.js +2 -1
  18. package/dist/init.js +52 -58
  19. package/dist/reproducible-config.d.ts +8 -0
  20. package/dist/reproducible-config.js +32 -0
  21. package/dist/reproducible.d.ts +38 -0
  22. package/dist/reproducible.js +121 -0
  23. package/dist/runtime/delegate-contract.d.ts +15 -0
  24. package/dist/runtime/delegate-contract.js +2 -0
  25. package/dist/runtime/executor-build.d.ts +15 -1
  26. package/dist/runtime/executor-build.js +42 -11
  27. package/dist/runtime/executor-digests.json +13 -0
  28. package/dist/runtime/executor-inspect.d.ts +1 -0
  29. package/dist/runtime/executor-inspect.js +5 -2
  30. package/dist/runtime/executor-policy.d.ts +3 -1
  31. package/dist/runtime/executor-policy.js +7 -2
  32. package/dist/runtime/executor-source.d.ts +21 -0
  33. package/dist/runtime/executor-source.js +35 -0
  34. package/dist/runtime/executor-tasks.d.ts +5 -2
  35. package/dist/runtime/executor-tasks.js +6 -4
  36. package/dist/runtime/sdk-source.d.ts +31 -0
  37. package/dist/runtime/sdk-source.js +92 -0
  38. package/dist/spk/check-info.d.ts +5 -0
  39. package/dist/spk/check-info.js +123 -0
  40. package/dist/spk/check-metadata.d.ts +7 -0
  41. package/dist/spk/check-metadata.js +113 -0
  42. package/dist/spk/check-payload.d.ts +2 -0
  43. package/dist/spk/check-payload.js +156 -0
  44. package/dist/spk/dsm-spec.d.ts +42 -0
  45. package/dist/spk/dsm-spec.js +86 -0
  46. package/dist/spk/findings.d.ts +13 -0
  47. package/dist/spk/findings.js +8 -0
  48. package/dist/spk/inspect.d.ts +18 -0
  49. package/dist/spk/inspect.js +62 -0
  50. package/dist/spk/rules.d.ts +265 -0
  51. package/dist/spk/rules.js +53 -0
  52. package/dist/spk/validate-spk.d.ts +13 -0
  53. package/dist/spk/validate-spk.js +107 -0
  54. package/dist/standalone/api-permissions.d.ts +4 -1
  55. package/dist/standalone/api-permissions.js +10 -18
  56. package/dist/standalone/arch-jobs.d.ts +11 -0
  57. package/dist/standalone/arch-jobs.js +54 -0
  58. package/dist/standalone/build.d.ts +12 -2
  59. package/dist/standalone/build.js +85 -35
  60. package/dist/standalone/daemon.d.ts +1 -1
  61. package/dist/standalone/daemon.js +4 -4
  62. package/dist/standalone/dsm-window.js +2 -2
  63. package/dist/standalone/inspect-spk.d.ts +1 -0
  64. package/dist/standalone/inspect-spk.js +1 -1
  65. package/dist/standalone/manifest.d.ts +5 -2
  66. package/dist/standalone/manifest.js +19 -4
  67. package/dist/standalone/native-layout.d.ts +3 -0
  68. package/dist/standalone/native-layout.js +94 -33
  69. package/dist/standalone/root-window.d.ts +1 -1
  70. package/dist/standalone/root-window.js +0 -1
  71. package/dist/standalone/sdk-check.d.ts +9 -0
  72. package/dist/standalone/sdk-check.js +43 -0
  73. package/dist/standalone/spk.js +1 -1
  74. package/dist/template-paths.d.ts +7 -2
  75. package/dist/template-paths.js +18 -6
  76. package/package.json +13 -3
  77. package/schema/synology-app.schema.json +9 -0
  78. package/dist/templates/_executor/README.md +0 -318
  79. package/dist/templates/_executor/anchor.go +0 -156
  80. package/dist/templates/_executor/anchor_test.go +0 -161
  81. package/dist/templates/_executor/apppriv_review_test.go +0 -28
  82. package/dist/templates/_executor/auth_presence_review_test.go +0 -38
  83. package/dist/templates/_executor/cancel_contract_test.go +0 -236
  84. package/dist/templates/_executor/cmd/lifecycle/main.go +0 -42
  85. package/dist/templates/_executor/cookie_review_test.go +0 -27
  86. package/dist/templates/_executor/copy.go +0 -64
  87. package/dist/templates/_executor/copy_test.go +0 -88
  88. package/dist/templates/_executor/digest_review_test.go +0 -120
  89. package/dist/templates/_executor/directories.go +0 -40
  90. package/dist/templates/_executor/dsm.go +0 -369
  91. package/dist/templates/_executor/dsm_test.go +0 -290
  92. package/dist/templates/_executor/executor.go +0 -735
  93. package/dist/templates/_executor/executor_test.go +0 -314
  94. package/dist/templates/_executor/go.mod +0 -5
  95. package/dist/templates/_executor/identity.go +0 -74
  96. package/dist/templates/_executor/identity_kernel_linux_test.go +0 -60
  97. package/dist/templates/_executor/identity_linux.go +0 -82
  98. package/dist/templates/_executor/identity_security_test.go +0 -43
  99. package/dist/templates/_executor/internal/lifecycle/lifecycle.go +0 -95
  100. package/dist/templates/_executor/internal/lifecycle/lifecycle_test.go +0 -232
  101. package/dist/templates/_executor/internal/taskscript/boot.sh +0 -31
  102. package/dist/templates/_executor/internal/taskscript/cmd/main.go +0 -19
  103. package/dist/templates/_executor/internal/taskscript/control.sh +0 -31
  104. package/dist/templates/_executor/internal/taskscript/tasks.go +0 -44
  105. package/dist/templates/_executor/json_review_test.go +0 -40
  106. package/dist/templates/_executor/lifecycle_test.go +0 -97
  107. package/dist/templates/_executor/link_linux.go +0 -28
  108. package/dist/templates/_executor/long_running_test.go +0 -530
  109. package/dist/templates/_executor/main.go +0 -576
  110. package/dist/templates/_executor/managed.go +0 -117
  111. package/dist/templates/_executor/managed_test.go +0 -137
  112. package/dist/templates/_executor/move_linux.go +0 -490
  113. package/dist/templates/_executor/move_linux_test.go +0 -460
  114. package/dist/templates/_executor/move_validation.go +0 -46
  115. package/dist/templates/_executor/move_validation_test.go +0 -187
  116. package/dist/templates/_executor/operations.go +0 -926
  117. package/dist/templates/_executor/path_test.go +0 -35
  118. package/dist/templates/_executor/pid.go +0 -37
  119. package/dist/templates/_executor/pid_test.go +0 -113
  120. package/dist/templates/_executor/platform_linux.go +0 -187
  121. package/dist/templates/_executor/platform_linux_test.go +0 -191
  122. package/dist/templates/_executor/platform_other.go +0 -76
  123. package/dist/templates/_executor/process.go +0 -142
  124. package/dist/templates/_executor/purge_log.go +0 -18
  125. package/dist/templates/_executor/records.go +0 -242
  126. package/dist/templates/_executor/scope_cancel_contract_test.go +0 -91
  127. package/dist/templates/_executor/scope_client.go +0 -37
  128. package/dist/templates/_executor/scope_contract.go +0 -12
  129. package/dist/templates/_executor/selected_scope.go +0 -146
  130. package/dist/templates/_executor/selected_scope_test.go +0 -186
  131. package/dist/templates/_executor/socket_linux_test.go +0 -46
  132. package/dist/templates/_executor/status_disabled_test.go +0 -33
  133. package/dist/templates/_executor/store.go +0 -91
  134. package/dist/templates/_executor/supervise.go +0 -109
  135. package/dist/templates/_executor/supervise_test.go +0 -130
  136. package/dist/templates/_executor/task_race_review_test.go +0 -47
  137. package/dist/templates/_executor/tasks.go +0 -320
  138. package/dist/templates/_executor/tasks_dsm71_test.go +0 -114
  139. package/dist/templates/_executor/tasks_review_test.go +0 -43
  140. package/dist/templates/_executor/tasks_test.go +0 -223
  141. package/dist/templates/_executor/testdata/evidence/cleanup.json +0 -24
  142. package/dist/templates/_executor/testdata/evidence/final-smoke.jsonl +0 -9
  143. package/dist/templates/_executor/testdata/evidence/kernel-acl.json +0 -6
  144. package/dist/templates/_executor/testdata/evidence/linux-tests.log +0 -123
  145. package/dist/templates/_executor/testdata/evidence/live.jsonl +0 -23
  146. package/dist/templates/_executor/testdata/evidence/storage.json +0 -90
  147. package/dist/templates/_executor/testdata/evidence/validation.json +0 -55
  148. package/dist/templates/_executor/testdata/live_probe.py +0 -98
  149. package/dist/templates/_executor/upgrade_watch_test.go +0 -244
  150. package/dist/templates/_executor/watch.go +0 -164
  151. package/dist/templates/_executor/watch_test.go +0 -291
  152. package/dist/templates/_executor/write_review_linux_test.go +0 -87
  153. package/dist/templates/_shared/AGENTS.md +0 -146
  154. package/dist/templates/_shared/CLAUDE.md +0 -1
  155. package/dist/templates/_shared/third-party-notices.mjs +0 -51
  156. package/dist/templates/binary/LICENSES/GO-LICENSE +0 -27
  157. package/dist/templates/binary/LICENSES/GO-PATENTS +0 -22
  158. package/dist/templates/binary/dsm-package.yaml +0 -46
  159. package/dist/templates/binary/example/main.go +0 -16
  160. package/dist/templates/binary/gitignore +0 -2
  161. package/dist/templates/binary/i18n/messages/de.json +0 -4
  162. package/dist/templates/binary/i18n/messages/en.json +0 -4
  163. package/dist/templates/binary/i18n/messages/es.json +0 -4
  164. package/dist/templates/binary/i18n/messages/fr.json +0 -4
  165. package/dist/templates/binary/i18n/messages/it.json +0 -4
  166. package/dist/templates/binary/i18n/messages/ja.json +0 -4
  167. package/dist/templates/binary/i18n/messages/ko.json +0 -4
  168. package/dist/templates/binary/i18n/messages/zh-CN.json +0 -4
  169. package/dist/templates/binary/i18n/messages/zh-TW.json +0 -4
  170. package/dist/templates/binary/ui/app.css +0 -4
  171. package/dist/templates/binary/ui/app.js +0 -32
  172. package/dist/templates/compose/compose.yaml +0 -8
  173. package/dist/templates/compose/synology-app.yaml +0 -16
  174. package/dist/templates/native-authorization/AuthorizationGate.vue +0 -91
  175. package/dist/templates/native-authorization/i18n/de.json +0 -37
  176. package/dist/templates/native-authorization/i18n/en.json +0 -37
  177. package/dist/templates/native-authorization/i18n/es.json +0 -37
  178. package/dist/templates/native-authorization/i18n/fr.json +0 -37
  179. package/dist/templates/native-authorization/i18n/index.ts +0 -15
  180. package/dist/templates/native-authorization/i18n/it.json +0 -37
  181. package/dist/templates/native-authorization/i18n/ja.json +0 -37
  182. package/dist/templates/native-authorization/i18n/ko.json +0 -37
  183. package/dist/templates/native-authorization/i18n/zh-CN.json +0 -37
  184. package/dist/templates/native-authorization/i18n/zh-TW.json +0 -37
  185. package/dist/templates/native-go/README.md +0 -459
  186. package/dist/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +0 -61
  187. package/dist/templates/native-go/backend/cmd/app/main.go +0 -95
  188. package/dist/templates/native-go/backend/cmd/background-worker/main.go +0 -38
  189. package/dist/templates/native-go/backend/go.mod +0 -9
  190. package/dist/templates/native-go/backend/go.sum +0 -4
  191. package/dist/templates/native-go/backend/internal/api/cgi_framing_test.go +0 -32
  192. package/dist/templates/native-go/backend/internal/api/cookie_review_test.go +0 -28
  193. package/dist/templates/native-go/backend/internal/api/deadline_test.go +0 -114
  194. package/dist/templates/native-go/backend/internal/api/dsm-session.go +0 -54
  195. package/dist/templates/native-go/backend/internal/api/dsm-session_test.go +0 -51
  196. package/dist/templates/native-go/backend/internal/api/entry_test.go +0 -47
  197. package/dist/templates/native-go/backend/internal/api/errors.go +0 -47
  198. package/dist/templates/native-go/backend/internal/api/permissions.go +0 -161
  199. package/dist/templates/native-go/backend/internal/api/permissions.json +0 -5
  200. package/dist/templates/native-go/backend/internal/api/permissions_test.go +0 -113
  201. package/dist/templates/native-go/backend/internal/api/policy_fixture_test.go +0 -8
  202. package/dist/templates/native-go/backend/internal/api/registry.go +0 -142
  203. package/dist/templates/native-go/backend/internal/api/registry_test.go +0 -344
  204. package/dist/templates/native-go/backend/internal/api/resource_limits_test.go +0 -87
  205. package/dist/templates/native-go/backend/internal/api/sdk-permissions.json +0 -59
  206. package/dist/templates/native-go/backend/internal/api/sdk_policy_test.go +0 -31
  207. package/dist/templates/native-go/backend/internal/api/server.go +0 -305
  208. package/dist/templates/native-go/backend/internal/api/testdata/permissions-cases.json +0 -172
  209. package/dist/templates/native-go/backend/internal/app/background.go +0 -249
  210. package/dist/templates/native-go/backend/internal/app/background_none.go +0 -8
  211. package/dist/templates/native-go/backend/internal/app/background_owner.go +0 -38
  212. package/dist/templates/native-go/backend/internal/app/background_owner_test.go +0 -163
  213. package/dist/templates/native-go/backend/internal/app/background_schedule.go +0 -69
  214. package/dist/templates/native-go/backend/internal/app/background_schedule_test.go +0 -62
  215. package/dist/templates/native-go/backend/internal/app/background_test.go +0 -320
  216. package/dist/templates/native-go/backend/internal/app/delegate_config.go +0 -57
  217. package/dist/templates/native-go/backend/internal/app/delegate_config_test.go +0 -28
  218. package/dist/templates/native-go/backend/internal/app/delegate_none.go +0 -5
  219. package/dist/templates/native-go/backend/internal/app/identity.go +0 -20
  220. package/dist/templates/native-go/backend/internal/app/identity_test.go +0 -15
  221. package/dist/templates/native-go/backend/internal/app/migrations.go +0 -41
  222. package/dist/templates/native-go/backend/internal/app/migrations_test.go +0 -41
  223. package/dist/templates/native-go/backend/internal/app/portal.go +0 -30
  224. package/dist/templates/native-go/backend/internal/app/portal_test.go +0 -55
  225. package/dist/templates/native-go/backend/internal/app/root_none.go +0 -9
  226. package/dist/templates/native-go/backend/internal/app/routes.go +0 -137
  227. package/dist/templates/native-go/backend/internal/app/routes_test.go +0 -165
  228. package/dist/templates/native-go/backend/internal/app/session_files.go +0 -9
  229. package/dist/templates/native-go/backend/internal/app/session_files_test.go +0 -14
  230. package/dist/templates/native-go/backend/internal/app/shared_folder.go +0 -144
  231. package/dist/templates/native-go/backend/internal/app/shared_folder_test.go +0 -158
  232. package/dist/templates/native-go/backend/internal/background/access.go +0 -57
  233. package/dist/templates/native-go/backend/internal/background/lock_test.go +0 -131
  234. package/dist/templates/native-go/backend/internal/background/owner_test.go +0 -118
  235. package/dist/templates/native-go/backend/internal/background/runner.go +0 -185
  236. package/dist/templates/native-go/backend/internal/background/runner_test.go +0 -209
  237. package/dist/templates/native-go/backend/internal/background/schedule.go +0 -336
  238. package/dist/templates/native-go/backend/internal/background/schedule_test.go +0 -368
  239. package/dist/templates/native-go/backend/internal/background/store.go +0 -825
  240. package/dist/templates/native-go/backend/internal/background/store_test.go +0 -365
  241. package/dist/templates/native-go/backend/internal/datamigrate/migrate.go +0 -191
  242. package/dist/templates/native-go/backend/internal/datamigrate/migrate_test.go +0 -177
  243. package/dist/templates/native-go/backend/internal/dsm/admin.go +0 -76
  244. package/dist/templates/native-go/backend/internal/dsm/admin_linux.go +0 -110
  245. package/dist/templates/native-go/backend/internal/dsm/admin_linux_test.go +0 -105
  246. package/dist/templates/native-go/backend/internal/dsm/admin_other.go +0 -15
  247. package/dist/templates/native-go/backend/internal/dsm/admin_test.go +0 -67
  248. package/dist/templates/native-go/backend/internal/dsm/apppriv.go +0 -30
  249. package/dist/templates/native-go/backend/internal/dsm/auth.go +0 -94
  250. package/dist/templates/native-go/backend/internal/dsm/auth_test.go +0 -159
  251. package/dist/templates/native-go/backend/internal/dsm/bridge_file.go +0 -75
  252. package/dist/templates/native-go/backend/internal/dsm/bridge_file_test.go +0 -57
  253. package/dist/templates/native-go/backend/internal/dsm/entry.go +0 -177
  254. package/dist/templates/native-go/backend/internal/dsm/entry_test.go +0 -315
  255. package/dist/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
  256. package/dist/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
  257. package/dist/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
  258. package/dist/templates/native-go/backend/internal/dsm/native/admin_check.c +0 -28
  259. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
  260. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
  261. package/dist/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
  262. package/dist/templates/native-go/backend/internal/dsm/native/apppriv_check.c +0 -33
  263. package/dist/templates/native-go/backend/internal/dsm/native/build.sh +0 -18
  264. package/dist/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +0 -400
  265. package/dist/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +0 -501
  266. package/dist/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +0 -5
  267. package/dist/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +0 -21
  268. package/dist/templates/native-go/backend/internal/dsm/native/provenance.json +0 -18
  269. package/dist/templates/native-go/backend/internal/filestation/browse_test.go +0 -67
  270. package/dist/templates/native-go/backend/internal/filestation/check_permission.go +0 -71
  271. package/dist/templates/native-go/backend/internal/filestation/check_permission_test.go +0 -77
  272. package/dist/templates/native-go/backend/internal/filestation/client.go +0 -337
  273. package/dist/templates/native-go/backend/internal/filestation/client_test.go +0 -155
  274. package/dist/templates/native-go/backend/internal/filestation/doc.go +0 -4
  275. package/dist/templates/native-go/backend/internal/filestation/download_dsm71_test.go +0 -82
  276. package/dist/templates/native-go/backend/internal/filestation/http.go +0 -70
  277. package/dist/templates/native-go/backend/internal/filestation/http_test.go +0 -188
  278. package/dist/templates/native-go/backend/internal/filestation/operations_test.go +0 -206
  279. package/dist/templates/native-go/backend/internal/filestation/read_file_test.go +0 -89
  280. package/dist/templates/native-go/backend/internal/filestation/sdk_policy_test.go +0 -39
  281. package/dist/templates/native-go/backend/internal/filestation/service.go +0 -254
  282. package/dist/templates/native-go/backend/internal/filestation/service_test.go +0 -74
  283. package/dist/templates/native-go/backend/internal/filestation/upload_stream.go +0 -76
  284. package/dist/templates/native-go/backend/internal/filestation/upload_stream_test.go +0 -77
  285. package/dist/templates/native-go/backend/internal/filestation/write.go +0 -32
  286. package/dist/templates/native-go/backend/internal/filestation/write_test.go +0 -124
  287. package/dist/templates/native-go/backend/internal/identity/README.md +0 -59
  288. package/dist/templates/native-go/backend/internal/identity/dsm.go +0 -115
  289. package/dist/templates/native-go/backend/internal/identity/http.go +0 -291
  290. package/dist/templates/native-go/backend/internal/identity/identity_test.go +0 -530
  291. package/dist/templates/native-go/backend/internal/identity/service.go +0 -159
  292. package/dist/templates/native-go/backend/internal/identity/store.go +0 -109
  293. package/dist/templates/native-go/backend/internal/jsonlimits/limits.go +0 -48
  294. package/dist/templates/native-go/backend/internal/jsonlimits/limits_test.go +0 -52
  295. package/dist/templates/native-go/backend/internal/portal/portal.go +0 -138
  296. package/dist/templates/native-go/backend/internal/portal/portal_test.go +0 -89
  297. package/dist/templates/native-go/dsm-package.yaml +0 -71
  298. package/dist/templates/native-go/gitignore +0 -1
  299. package/dist/templates/native-go/i18n/glossary.json +0 -663
  300. package/dist/templates/native-go/i18n/messages/de.json +0 -29
  301. package/dist/templates/native-go/i18n/messages/en.json +0 -29
  302. package/dist/templates/native-go/i18n/messages/es.json +0 -29
  303. package/dist/templates/native-go/i18n/messages/fr.json +0 -29
  304. package/dist/templates/native-go/i18n/messages/it.json +0 -29
  305. package/dist/templates/native-go/i18n/messages/ja.json +0 -29
  306. package/dist/templates/native-go/i18n/messages/ko.json +0 -29
  307. package/dist/templates/native-go/i18n/messages/zh-CN.json +0 -29
  308. package/dist/templates/native-go/i18n/messages/zh-TW.json +0 -29
  309. package/dist/templates/native-go/ui/app.css +0 -45
  310. package/dist/templates/native-go/ui/app.js +0 -111
  311. package/dist/templates/native-go-delegate/DELEGATE.md +0 -263
  312. package/dist/templates/native-go-delegate/backend/cmd/background-worker/main.go +0 -48
  313. package/dist/templates/native-go-delegate/backend/internal/app/delegate.go +0 -25
  314. package/dist/templates/native-go-delegate/backend/internal/app/delegate_on.go +0 -5
  315. package/dist/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +0 -31
  316. package/dist/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +0 -174
  317. package/dist/templates/native-go-delegate/backend/internal/background/delegated.go +0 -277
  318. package/dist/templates/native-go-delegate/backend/internal/background/delegated_moves.go +0 -270
  319. package/dist/templates/native-go-delegate/backend/internal/background/delegated_test.go +0 -34
  320. package/dist/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +0 -410
  321. package/dist/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +0 -15
  322. package/dist/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +0 -95
  323. package/dist/templates/native-go-delegate/backend/internal/delegate/client.go +0 -151
  324. package/dist/templates/native-go-delegate/backend/internal/delegate/client_test.go +0 -214
  325. package/dist/templates/native-go-delegate/backend/internal/delegate/destination.go +0 -110
  326. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state.go +0 -117
  327. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +0 -60
  328. package/dist/templates/native-go-delegate/backend/internal/delegate/destination_test.go +0 -116
  329. package/dist/templates/native-go-delegate/backend/internal/delegate/example.go +0 -81
  330. package/dist/templates/native-go-delegate/backend/internal/delegate/example_test.go +0 -91
  331. package/dist/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +0 -511
  332. package/dist/templates/native-go-delegate/backend/internal/delegate/files.go +0 -132
  333. package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +0 -92
  334. package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +0 -99
  335. package/dist/templates/native-go-delegate/backend/internal/delegate/move.go +0 -348
  336. package/dist/templates/native-go-delegate/backend/internal/delegate/move_test.go +0 -351
  337. package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list.go +0 -65
  338. package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +0 -114
  339. package/dist/templates/native-go-delegate/backend/internal/delegate/retry.go +0 -106
  340. package/dist/templates/native-go-delegate/backend/internal/delegate/retry_test.go +0 -143
  341. package/dist/templates/native-go-delegate/backend/internal/delegate/service.go +0 -364
  342. package/dist/templates/native-go-delegate/backend/internal/delegate/service_test.go +0 -318
  343. package/dist/templates/native-go-delegate/backend/internal/delegate/staging.go +0 -121
  344. package/dist/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +0 -51
  345. package/dist/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +0 -112
  346. package/dist/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +0 -137
  347. package/dist/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +0 -101
  348. package/dist/templates/native-go-delegate/backend/internal/delegate/worker.go +0 -225
  349. package/dist/templates/native-go-delegate/backend/internal/filestation/files.go +0 -43
  350. package/dist/templates/native-go-delegate/backend/internal/filestation/files_test.go +0 -59
  351. package/dist/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +0 -37
  352. package/dist/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +0 -113
  353. package/dist/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +0 -70
  354. package/dist/templates/native-go-delegate/frontend/src/delegate/copy.ts +0 -8
  355. package/dist/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +0 -11
  356. package/dist/templates/native-go-delegate/frontend/test/background-save.test.ts +0 -121
  357. package/dist/templates/native-go-delegate/frontend/test/delegate.test.ts +0 -145
  358. package/dist/templates/native-go-delegate/frontend/test/scope-settings.test.ts +0 -49
  359. package/dist/templates/native-go-delegate/test-frontend.sh +0 -12
  360. package/dist/templates/native-go-delegate/test.sh +0 -18
  361. package/dist/templates/native-go-jobs/BACKGROUND.md +0 -108
  362. package/dist/templates/native-go-jobs/backend/internal/app/background_on.go +0 -7
  363. package/dist/templates/native-go-jobs/backend/internal/app/background_routes_test.go +0 -90
  364. package/dist/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +0 -170
  365. package/dist/templates/native-go-jobs/frontend/src/background/i18n/de.json +0 -75
  366. package/dist/templates/native-go-jobs/frontend/src/background/i18n/en.json +0 -75
  367. package/dist/templates/native-go-jobs/frontend/src/background/i18n/es.json +0 -75
  368. package/dist/templates/native-go-jobs/frontend/src/background/i18n/fr.json +0 -75
  369. package/dist/templates/native-go-jobs/frontend/src/background/i18n/it.json +0 -75
  370. package/dist/templates/native-go-jobs/frontend/src/background/i18n/ja.json +0 -75
  371. package/dist/templates/native-go-jobs/frontend/src/background/i18n/ko.json +0 -75
  372. package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +0 -75
  373. package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +0 -75
  374. package/dist/templates/native-go-jobs/frontend/src/background/i18n.ts +0 -19
  375. package/dist/templates/native-go-jobs/frontend/src/background/picker-provider.ts +0 -12
  376. package/dist/templates/native-go-jobs/frontend/src/background/request-key.ts +0 -5
  377. package/dist/templates/native-go-jobs/frontend/test/background.test.ts +0 -205
  378. package/dist/templates/native-go-root-ops/backend/internal/app/executor.go +0 -140
  379. package/dist/templates/native-go-root-ops/backend/internal/app/executor_test.go +0 -117
  380. package/dist/templates/native-go-root-ops/root/whoami.sh +0 -3
  381. package/dist/templates/native-go-vue/README.md +0 -47
  382. package/dist/templates/native-go-vue/frontend/DESIGN.md +0 -61
  383. package/dist/templates/native-go-vue/frontend/package-lock.json +0 -2530
  384. package/dist/templates/native-go-vue/frontend/package.json +0 -6
  385. package/dist/templates/native-go-vue/frontend/src/App.vue +0 -96
  386. package/dist/templates/native-go-vue/frontend/src/CapabilityPanels.vue +0 -6
  387. package/dist/templates/native-go-vue/frontend/src/context.ts +0 -78
  388. package/dist/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +0 -70
  389. package/dist/templates/native-go-vue/frontend/src/delegate/catalogs.ts +0 -11
  390. package/dist/templates/native-go-vue/frontend/src/delegate/copy.test.ts +0 -12
  391. package/dist/templates/native-go-vue/frontend/src/delegate/copy.ts +0 -4
  392. package/dist/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +0 -23
  393. package/dist/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +0 -24
  394. package/dist/templates/native-go-vue/frontend/src/delegate/facade.test.ts +0 -100
  395. package/dist/templates/native-go-vue/frontend/src/delegate/facade.ts +0 -85
  396. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/de.json +0 -47
  397. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/en.json +0 -47
  398. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/es.json +0 -47
  399. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +0 -47
  400. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/it.json +0 -47
  401. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +0 -47
  402. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +0 -47
  403. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +0 -42
  404. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +0 -42
  405. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +0 -42
  406. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +0 -42
  407. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +0 -42
  408. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +0 -42
  409. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +0 -42
  410. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +0 -42
  411. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +0 -42
  412. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +0 -47
  413. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +0 -47
  414. package/dist/templates/native-go-vue/frontend/src/delegate/long-running.ts +0 -57
  415. package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +0 -12
  416. package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.ts +0 -24
  417. package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +0 -12
  418. package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +0 -21
  419. package/dist/templates/native-go-vue/frontend/src/files/FileBrowser.vue +0 -131
  420. package/dist/templates/native-go-vue/frontend/src/files/FilesPage.vue +0 -35
  421. package/dist/templates/native-go-vue/frontend/src/files/files.test.ts +0 -100
  422. package/dist/templates/native-go-vue/frontend/src/files/provider.test.ts +0 -48
  423. package/dist/templates/native-go-vue/frontend/src/files/transfers.test.ts +0 -27
  424. package/dist/templates/native-go-vue/frontend/src/files/transfers.ts +0 -25
  425. package/dist/templates/native-go-vue/frontend/src/i18n/de.json +0 -20
  426. package/dist/templates/native-go-vue/frontend/src/i18n/en.json +0 -20
  427. package/dist/templates/native-go-vue/frontend/src/i18n/es.json +0 -20
  428. package/dist/templates/native-go-vue/frontend/src/i18n/fr.json +0 -20
  429. package/dist/templates/native-go-vue/frontend/src/i18n/it.json +0 -20
  430. package/dist/templates/native-go-vue/frontend/src/i18n/ja.json +0 -20
  431. package/dist/templates/native-go-vue/frontend/src/i18n/ko.json +0 -20
  432. package/dist/templates/native-go-vue/frontend/src/i18n/zh-CN.json +0 -20
  433. package/dist/templates/native-go-vue/frontend/src/i18n/zh-TW.json +0 -20
  434. package/dist/templates/native-go-vue/frontend/src/i18n.ts +0 -13
  435. package/dist/templates/native-go-vue/frontend/src/identity/DESIGN.md +0 -46
  436. package/dist/templates/native-go-vue/frontend/src/identity/LoginPage.vue +0 -78
  437. package/dist/templates/native-go-vue/frontend/src/identity/i18n/de.json +0 -27
  438. package/dist/templates/native-go-vue/frontend/src/identity/i18n/en.json +0 -27
  439. package/dist/templates/native-go-vue/frontend/src/identity/i18n/es.json +0 -27
  440. package/dist/templates/native-go-vue/frontend/src/identity/i18n/fr.json +0 -27
  441. package/dist/templates/native-go-vue/frontend/src/identity/i18n/it.json +0 -27
  442. package/dist/templates/native-go-vue/frontend/src/identity/i18n/ja.json +0 -27
  443. package/dist/templates/native-go-vue/frontend/src/identity/i18n/ko.json +0 -27
  444. package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +0 -27
  445. package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +0 -27
  446. package/dist/templates/native-go-vue/frontend/src/identity/i18n.ts +0 -14
  447. package/dist/templates/native-go-vue/frontend/src/identity/login.test.ts +0 -32
  448. package/dist/templates/native-go-vue/frontend/src/identity/session.test.ts +0 -33
  449. package/dist/templates/native-go-vue/frontend/src/identity/session.ts +0 -74
  450. package/dist/templates/native-go-vue/frontend/src/main.ts +0 -32
  451. package/dist/templates/native-go-vue/frontend/src/nas/NasPicker.vue +0 -42
  452. package/dist/templates/native-go-vue/frontend/src/nas/contract.ts +0 -12
  453. package/dist/templates/native-go-vue/frontend/src/nas/destination.test.ts +0 -48
  454. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +0 -41
  455. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +0 -41
  456. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +0 -41
  457. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +0 -41
  458. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +0 -41
  459. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +0 -41
  460. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +0 -41
  461. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +0 -41
  462. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +0 -41
  463. package/dist/templates/native-go-vue/frontend/src/nas/i18n.ts +0 -2
  464. package/dist/templates/native-go-vue/frontend/src/nas/locale.ts +0 -24
  465. package/dist/templates/native-go-vue/frontend/src/nas/provider.ts +0 -50
  466. package/dist/templates/native-go-vue/frontend/src/nas/use-request.ts +0 -18
  467. package/dist/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +0 -39
  468. package/dist/templates/native-go-vue/frontend/src/shell/AppShell.vue +0 -48
  469. package/dist/templates/native-go-vue/frontend/src/shell/i18n/de.json +0 -4
  470. package/dist/templates/native-go-vue/frontend/src/shell/i18n/en.json +0 -4
  471. package/dist/templates/native-go-vue/frontend/src/shell/i18n/es.json +0 -4
  472. package/dist/templates/native-go-vue/frontend/src/shell/i18n/fr.json +0 -4
  473. package/dist/templates/native-go-vue/frontend/src/shell/i18n/it.json +0 -4
  474. package/dist/templates/native-go-vue/frontend/src/shell/i18n/ja.json +0 -4
  475. package/dist/templates/native-go-vue/frontend/src/shell/i18n/ko.json +0 -4
  476. package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +0 -4
  477. package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +0 -4
  478. package/dist/templates/native-go-vue/frontend/src/shell/i18n.ts +0 -17
  479. package/dist/templates/native-go-vue/frontend/src/shell/pages.ts +0 -15
  480. package/dist/templates/native-go-vue/frontend/src/style.css +0 -27
  481. package/dist/templates/native-go-vue/frontend/test/apps.test.ts +0 -57
  482. package/dist/templates/native-go-vue/frontend/test/native-controls.test.ts +0 -27
  483. package/dist/templates/native-go-vue/frontend/test/portal-settings.test.ts +0 -71
  484. package/dist/templates/native-go-vue/frontend/test/shell-i18n.test.ts +0 -50
  485. package/dist/templates/native-go-vue/frontend/test/shell-ui.test.ts +0 -20
  486. package/dist/templates/native-go-vue/frontend/test/shell.test.ts +0 -30
  487. package/dist/templates/native-go-vue/frontend/tsconfig.json +0 -1
  488. package/dist/templates/native-go-vue/frontend/vite.config.ts +0 -10
  489. package/dist/templates/native-go-vue/gitignore +0 -2
  490. package/templates/_daemon/fixture_linux_test.go +0 -15
  491. package/templates/_daemon/fixture_other_test.go +0 -7
  492. package/templates/_daemon/go.mod +0 -5
  493. package/templates/_daemon/main.go +0 -611
  494. package/templates/_daemon/main_test.go +0 -315
  495. package/templates/_daemon/process_linux.go +0 -55
  496. package/templates/_daemon/process_linux_test.go +0 -161
  497. package/templates/_daemon/process_other.go +0 -14
  498. package/templates/_daemon/testdata/child.go +0 -44
  499. package/templates/_executor/README.md +0 -318
  500. package/templates/_executor/anchor.go +0 -156
  501. package/templates/_executor/anchor_test.go +0 -161
  502. package/templates/_executor/apppriv_review_test.go +0 -28
  503. package/templates/_executor/auth_presence_review_test.go +0 -38
  504. package/templates/_executor/cancel_contract_test.go +0 -236
  505. package/templates/_executor/cmd/lifecycle/main.go +0 -42
  506. package/templates/_executor/cookie_review_test.go +0 -27
  507. package/templates/_executor/copy.go +0 -64
  508. package/templates/_executor/copy_test.go +0 -88
  509. package/templates/_executor/digest_review_test.go +0 -120
  510. package/templates/_executor/directories.go +0 -40
  511. package/templates/_executor/dsm.go +0 -369
  512. package/templates/_executor/dsm_test.go +0 -290
  513. package/templates/_executor/executor.go +0 -735
  514. package/templates/_executor/executor_test.go +0 -314
  515. package/templates/_executor/go.mod +0 -5
  516. package/templates/_executor/identity.go +0 -74
  517. package/templates/_executor/identity_kernel_linux_test.go +0 -60
  518. package/templates/_executor/identity_linux.go +0 -82
  519. package/templates/_executor/identity_security_test.go +0 -43
  520. package/templates/_executor/internal/lifecycle/lifecycle.go +0 -95
  521. package/templates/_executor/internal/lifecycle/lifecycle_test.go +0 -232
  522. package/templates/_executor/internal/taskscript/boot.sh +0 -31
  523. package/templates/_executor/internal/taskscript/cmd/main.go +0 -19
  524. package/templates/_executor/internal/taskscript/control.sh +0 -31
  525. package/templates/_executor/internal/taskscript/tasks.go +0 -44
  526. package/templates/_executor/json_review_test.go +0 -40
  527. package/templates/_executor/lifecycle_test.go +0 -97
  528. package/templates/_executor/link_linux.go +0 -28
  529. package/templates/_executor/long_running_test.go +0 -530
  530. package/templates/_executor/main.go +0 -576
  531. package/templates/_executor/managed.go +0 -117
  532. package/templates/_executor/managed_test.go +0 -137
  533. package/templates/_executor/move_linux.go +0 -490
  534. package/templates/_executor/move_linux_test.go +0 -460
  535. package/templates/_executor/move_validation.go +0 -46
  536. package/templates/_executor/move_validation_test.go +0 -187
  537. package/templates/_executor/operations.go +0 -926
  538. package/templates/_executor/path_test.go +0 -35
  539. package/templates/_executor/pid.go +0 -37
  540. package/templates/_executor/pid_test.go +0 -113
  541. package/templates/_executor/platform_linux.go +0 -187
  542. package/templates/_executor/platform_linux_test.go +0 -191
  543. package/templates/_executor/platform_other.go +0 -76
  544. package/templates/_executor/process.go +0 -142
  545. package/templates/_executor/purge_log.go +0 -18
  546. package/templates/_executor/records.go +0 -242
  547. package/templates/_executor/scope_cancel_contract_test.go +0 -91
  548. package/templates/_executor/scope_client.go +0 -37
  549. package/templates/_executor/scope_contract.go +0 -12
  550. package/templates/_executor/selected_scope.go +0 -146
  551. package/templates/_executor/selected_scope_test.go +0 -186
  552. package/templates/_executor/socket_linux_test.go +0 -46
  553. package/templates/_executor/status_disabled_test.go +0 -33
  554. package/templates/_executor/store.go +0 -91
  555. package/templates/_executor/supervise.go +0 -109
  556. package/templates/_executor/supervise_test.go +0 -130
  557. package/templates/_executor/task_race_review_test.go +0 -47
  558. package/templates/_executor/tasks.go +0 -320
  559. package/templates/_executor/tasks_dsm71_test.go +0 -114
  560. package/templates/_executor/tasks_review_test.go +0 -43
  561. package/templates/_executor/tasks_test.go +0 -223
  562. package/templates/_executor/testdata/evidence/cleanup.json +0 -24
  563. package/templates/_executor/testdata/evidence/final-smoke.jsonl +0 -9
  564. package/templates/_executor/testdata/evidence/kernel-acl.json +0 -6
  565. package/templates/_executor/testdata/evidence/linux-tests.log +0 -123
  566. package/templates/_executor/testdata/evidence/live.jsonl +0 -23
  567. package/templates/_executor/testdata/evidence/storage.json +0 -90
  568. package/templates/_executor/testdata/evidence/validation.json +0 -55
  569. package/templates/_executor/testdata/live_probe.py +0 -98
  570. package/templates/_executor/upgrade_watch_test.go +0 -244
  571. package/templates/_executor/watch.go +0 -164
  572. package/templates/_executor/watch_test.go +0 -291
  573. package/templates/_executor/write_review_linux_test.go +0 -87
  574. package/templates/_gateway/auth.go +0 -101
  575. package/templates/_gateway/auth_test.go +0 -216
  576. package/templates/_gateway/cgi.go +0 -133
  577. package/templates/_gateway/cgi_test.go +0 -156
  578. package/templates/_gateway/csrf.go +0 -73
  579. package/templates/_gateway/csrf_test.go +0 -155
  580. package/templates/_gateway/directory.go +0 -108
  581. package/templates/_gateway/directory_test.go +0 -202
  582. package/templates/_gateway/gateway.go +0 -412
  583. package/templates/_gateway/gateway_test.go +0 -676
  584. package/templates/_gateway/go.mod +0 -5
  585. package/templates/_gateway/groups.go +0 -66
  586. package/templates/_gateway/main.go +0 -45
  587. package/templates/_shared/AGENTS.md +0 -146
  588. package/templates/_shared/CLAUDE.md +0 -1
  589. package/templates/_shared/GO-LICENSE +0 -27
  590. package/templates/_shared/GO-PATENTS +0 -22
  591. package/templates/_shared/LICENSES/TEMPLATE.txt +0 -21
  592. package/templates/_shared/third-party-notices.mjs +0 -51
  593. package/templates/binary/LICENSES/GO-LICENSE +0 -27
  594. package/templates/binary/LICENSES/GO-PATENTS +0 -22
  595. package/templates/binary/dsm-package.yaml +0 -46
  596. package/templates/binary/example/main.go +0 -16
  597. package/templates/binary/gitignore +0 -2
  598. package/templates/binary/i18n/messages/de.json +0 -4
  599. package/templates/binary/i18n/messages/en.json +0 -4
  600. package/templates/binary/i18n/messages/es.json +0 -4
  601. package/templates/binary/i18n/messages/fr.json +0 -4
  602. package/templates/binary/i18n/messages/it.json +0 -4
  603. package/templates/binary/i18n/messages/ja.json +0 -4
  604. package/templates/binary/i18n/messages/ko.json +0 -4
  605. package/templates/binary/i18n/messages/zh-CN.json +0 -4
  606. package/templates/binary/i18n/messages/zh-TW.json +0 -4
  607. package/templates/binary/ui/app.css +0 -4
  608. package/templates/binary/ui/app.js +0 -32
  609. package/templates/compose/compose.yaml +0 -8
  610. package/templates/compose/synology-app.yaml +0 -16
  611. package/templates/native-authorization/AuthorizationGate.vue +0 -91
  612. package/templates/native-authorization/i18n/de.json +0 -37
  613. package/templates/native-authorization/i18n/en.json +0 -37
  614. package/templates/native-authorization/i18n/es.json +0 -37
  615. package/templates/native-authorization/i18n/fr.json +0 -37
  616. package/templates/native-authorization/i18n/index.ts +0 -15
  617. package/templates/native-authorization/i18n/it.json +0 -37
  618. package/templates/native-authorization/i18n/ja.json +0 -37
  619. package/templates/native-authorization/i18n/ko.json +0 -37
  620. package/templates/native-authorization/i18n/zh-CN.json +0 -37
  621. package/templates/native-authorization/i18n/zh-TW.json +0 -37
  622. package/templates/native-go/README.md +0 -459
  623. package/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +0 -61
  624. package/templates/native-go/backend/cmd/app/main.go +0 -95
  625. package/templates/native-go/backend/cmd/background-worker/main.go +0 -38
  626. package/templates/native-go/backend/go.mod +0 -9
  627. package/templates/native-go/backend/go.sum +0 -4
  628. package/templates/native-go/backend/internal/api/cgi_framing_test.go +0 -32
  629. package/templates/native-go/backend/internal/api/cookie_review_test.go +0 -28
  630. package/templates/native-go/backend/internal/api/deadline_test.go +0 -114
  631. package/templates/native-go/backend/internal/api/dsm-session.go +0 -54
  632. package/templates/native-go/backend/internal/api/dsm-session_test.go +0 -51
  633. package/templates/native-go/backend/internal/api/entry_test.go +0 -47
  634. package/templates/native-go/backend/internal/api/errors.go +0 -47
  635. package/templates/native-go/backend/internal/api/permissions.go +0 -161
  636. package/templates/native-go/backend/internal/api/permissions.json +0 -5
  637. package/templates/native-go/backend/internal/api/permissions_test.go +0 -113
  638. package/templates/native-go/backend/internal/api/policy_fixture_test.go +0 -8
  639. package/templates/native-go/backend/internal/api/registry.go +0 -142
  640. package/templates/native-go/backend/internal/api/registry_test.go +0 -344
  641. package/templates/native-go/backend/internal/api/resource_limits_test.go +0 -87
  642. package/templates/native-go/backend/internal/api/sdk-permissions.json +0 -59
  643. package/templates/native-go/backend/internal/api/sdk_policy_test.go +0 -31
  644. package/templates/native-go/backend/internal/api/server.go +0 -305
  645. package/templates/native-go/backend/internal/api/testdata/permissions-cases.json +0 -172
  646. package/templates/native-go/backend/internal/app/background.go +0 -249
  647. package/templates/native-go/backend/internal/app/background_none.go +0 -8
  648. package/templates/native-go/backend/internal/app/background_owner.go +0 -38
  649. package/templates/native-go/backend/internal/app/background_owner_test.go +0 -163
  650. package/templates/native-go/backend/internal/app/background_schedule.go +0 -69
  651. package/templates/native-go/backend/internal/app/background_schedule_test.go +0 -62
  652. package/templates/native-go/backend/internal/app/background_test.go +0 -320
  653. package/templates/native-go/backend/internal/app/delegate_config.go +0 -57
  654. package/templates/native-go/backend/internal/app/delegate_config_test.go +0 -28
  655. package/templates/native-go/backend/internal/app/delegate_none.go +0 -5
  656. package/templates/native-go/backend/internal/app/identity.go +0 -20
  657. package/templates/native-go/backend/internal/app/identity_test.go +0 -15
  658. package/templates/native-go/backend/internal/app/migrations.go +0 -41
  659. package/templates/native-go/backend/internal/app/migrations_test.go +0 -41
  660. package/templates/native-go/backend/internal/app/portal.go +0 -30
  661. package/templates/native-go/backend/internal/app/portal_test.go +0 -55
  662. package/templates/native-go/backend/internal/app/root_none.go +0 -9
  663. package/templates/native-go/backend/internal/app/routes.go +0 -137
  664. package/templates/native-go/backend/internal/app/routes_test.go +0 -165
  665. package/templates/native-go/backend/internal/app/session_files.go +0 -9
  666. package/templates/native-go/backend/internal/app/session_files_test.go +0 -14
  667. package/templates/native-go/backend/internal/app/shared_folder.go +0 -144
  668. package/templates/native-go/backend/internal/app/shared_folder_test.go +0 -158
  669. package/templates/native-go/backend/internal/background/access.go +0 -57
  670. package/templates/native-go/backend/internal/background/lock_test.go +0 -131
  671. package/templates/native-go/backend/internal/background/owner_test.go +0 -118
  672. package/templates/native-go/backend/internal/background/runner.go +0 -185
  673. package/templates/native-go/backend/internal/background/runner_test.go +0 -209
  674. package/templates/native-go/backend/internal/background/schedule.go +0 -336
  675. package/templates/native-go/backend/internal/background/schedule_test.go +0 -368
  676. package/templates/native-go/backend/internal/background/store.go +0 -825
  677. package/templates/native-go/backend/internal/background/store_test.go +0 -365
  678. package/templates/native-go/backend/internal/datamigrate/migrate.go +0 -191
  679. package/templates/native-go/backend/internal/datamigrate/migrate_test.go +0 -177
  680. package/templates/native-go/backend/internal/dsm/admin.go +0 -76
  681. package/templates/native-go/backend/internal/dsm/admin_linux.go +0 -110
  682. package/templates/native-go/backend/internal/dsm/admin_linux_test.go +0 -105
  683. package/templates/native-go/backend/internal/dsm/admin_other.go +0 -15
  684. package/templates/native-go/backend/internal/dsm/admin_test.go +0 -67
  685. package/templates/native-go/backend/internal/dsm/apppriv.go +0 -30
  686. package/templates/native-go/backend/internal/dsm/auth.go +0 -94
  687. package/templates/native-go/backend/internal/dsm/auth_test.go +0 -159
  688. package/templates/native-go/backend/internal/dsm/bridge_file.go +0 -75
  689. package/templates/native-go/backend/internal/dsm/bridge_file_test.go +0 -57
  690. package/templates/native-go/backend/internal/dsm/entry.go +0 -177
  691. package/templates/native-go/backend/internal/dsm/entry_test.go +0 -315
  692. package/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
  693. package/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
  694. package/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
  695. package/templates/native-go/backend/internal/dsm/native/admin_check.c +0 -28
  696. package/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
  697. package/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
  698. package/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
  699. package/templates/native-go/backend/internal/dsm/native/apppriv_check.c +0 -33
  700. package/templates/native-go/backend/internal/dsm/native/build.sh +0 -18
  701. package/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +0 -400
  702. package/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +0 -501
  703. package/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +0 -5
  704. package/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +0 -21
  705. package/templates/native-go/backend/internal/dsm/native/provenance.json +0 -18
  706. package/templates/native-go/backend/internal/filestation/browse_test.go +0 -67
  707. package/templates/native-go/backend/internal/filestation/check_permission.go +0 -71
  708. package/templates/native-go/backend/internal/filestation/check_permission_test.go +0 -77
  709. package/templates/native-go/backend/internal/filestation/client.go +0 -337
  710. package/templates/native-go/backend/internal/filestation/client_test.go +0 -155
  711. package/templates/native-go/backend/internal/filestation/doc.go +0 -4
  712. package/templates/native-go/backend/internal/filestation/download_dsm71_test.go +0 -82
  713. package/templates/native-go/backend/internal/filestation/http.go +0 -70
  714. package/templates/native-go/backend/internal/filestation/http_test.go +0 -188
  715. package/templates/native-go/backend/internal/filestation/operations_test.go +0 -206
  716. package/templates/native-go/backend/internal/filestation/read_file_test.go +0 -89
  717. package/templates/native-go/backend/internal/filestation/sdk_policy_test.go +0 -39
  718. package/templates/native-go/backend/internal/filestation/service.go +0 -254
  719. package/templates/native-go/backend/internal/filestation/service_test.go +0 -74
  720. package/templates/native-go/backend/internal/filestation/upload_stream.go +0 -76
  721. package/templates/native-go/backend/internal/filestation/upload_stream_test.go +0 -77
  722. package/templates/native-go/backend/internal/filestation/write.go +0 -32
  723. package/templates/native-go/backend/internal/filestation/write_test.go +0 -124
  724. package/templates/native-go/backend/internal/identity/README.md +0 -59
  725. package/templates/native-go/backend/internal/identity/dsm.go +0 -115
  726. package/templates/native-go/backend/internal/identity/http.go +0 -291
  727. package/templates/native-go/backend/internal/identity/identity_test.go +0 -530
  728. package/templates/native-go/backend/internal/identity/service.go +0 -159
  729. package/templates/native-go/backend/internal/identity/store.go +0 -109
  730. package/templates/native-go/backend/internal/jsonlimits/limits.go +0 -48
  731. package/templates/native-go/backend/internal/jsonlimits/limits_test.go +0 -52
  732. package/templates/native-go/backend/internal/portal/portal.go +0 -138
  733. package/templates/native-go/backend/internal/portal/portal_test.go +0 -89
  734. package/templates/native-go/dsm-package.yaml +0 -71
  735. package/templates/native-go/gitignore +0 -1
  736. package/templates/native-go/i18n/glossary.json +0 -663
  737. package/templates/native-go/i18n/messages/de.json +0 -29
  738. package/templates/native-go/i18n/messages/en.json +0 -29
  739. package/templates/native-go/i18n/messages/es.json +0 -29
  740. package/templates/native-go/i18n/messages/fr.json +0 -29
  741. package/templates/native-go/i18n/messages/it.json +0 -29
  742. package/templates/native-go/i18n/messages/ja.json +0 -29
  743. package/templates/native-go/i18n/messages/ko.json +0 -29
  744. package/templates/native-go/i18n/messages/zh-CN.json +0 -29
  745. package/templates/native-go/i18n/messages/zh-TW.json +0 -29
  746. package/templates/native-go/ui/app.css +0 -45
  747. package/templates/native-go/ui/app.js +0 -111
  748. package/templates/native-go-delegate/DELEGATE.md +0 -263
  749. package/templates/native-go-delegate/backend/cmd/background-worker/main.go +0 -48
  750. package/templates/native-go-delegate/backend/internal/app/delegate.go +0 -25
  751. package/templates/native-go-delegate/backend/internal/app/delegate_on.go +0 -5
  752. package/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +0 -31
  753. package/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +0 -174
  754. package/templates/native-go-delegate/backend/internal/background/delegated.go +0 -277
  755. package/templates/native-go-delegate/backend/internal/background/delegated_moves.go +0 -270
  756. package/templates/native-go-delegate/backend/internal/background/delegated_test.go +0 -34
  757. package/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +0 -410
  758. package/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +0 -15
  759. package/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +0 -95
  760. package/templates/native-go-delegate/backend/internal/delegate/client.go +0 -151
  761. package/templates/native-go-delegate/backend/internal/delegate/client_test.go +0 -214
  762. package/templates/native-go-delegate/backend/internal/delegate/destination.go +0 -110
  763. package/templates/native-go-delegate/backend/internal/delegate/destination_state.go +0 -117
  764. package/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +0 -60
  765. package/templates/native-go-delegate/backend/internal/delegate/destination_test.go +0 -116
  766. package/templates/native-go-delegate/backend/internal/delegate/example.go +0 -81
  767. package/templates/native-go-delegate/backend/internal/delegate/example_test.go +0 -91
  768. package/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +0 -511
  769. package/templates/native-go-delegate/backend/internal/delegate/files.go +0 -132
  770. package/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +0 -92
  771. package/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +0 -99
  772. package/templates/native-go-delegate/backend/internal/delegate/move.go +0 -348
  773. package/templates/native-go-delegate/backend/internal/delegate/move_test.go +0 -351
  774. package/templates/native-go-delegate/backend/internal/delegate/operations_list.go +0 -65
  775. package/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +0 -114
  776. package/templates/native-go-delegate/backend/internal/delegate/retry.go +0 -106
  777. package/templates/native-go-delegate/backend/internal/delegate/retry_test.go +0 -143
  778. package/templates/native-go-delegate/backend/internal/delegate/service.go +0 -364
  779. package/templates/native-go-delegate/backend/internal/delegate/service_test.go +0 -318
  780. package/templates/native-go-delegate/backend/internal/delegate/staging.go +0 -121
  781. package/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +0 -51
  782. package/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +0 -112
  783. package/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +0 -137
  784. package/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +0 -101
  785. package/templates/native-go-delegate/backend/internal/delegate/worker.go +0 -225
  786. package/templates/native-go-delegate/backend/internal/filestation/files.go +0 -43
  787. package/templates/native-go-delegate/backend/internal/filestation/files_test.go +0 -59
  788. package/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +0 -37
  789. package/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +0 -113
  790. package/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +0 -70
  791. package/templates/native-go-delegate/frontend/src/delegate/copy.ts +0 -8
  792. package/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +0 -11
  793. package/templates/native-go-delegate/frontend/test/background-save.test.ts +0 -121
  794. package/templates/native-go-delegate/frontend/test/delegate.test.ts +0 -145
  795. package/templates/native-go-delegate/frontend/test/scope-settings.test.ts +0 -49
  796. package/templates/native-go-delegate/test-frontend.sh +0 -12
  797. package/templates/native-go-delegate/test.sh +0 -18
  798. package/templates/native-go-jobs/BACKGROUND.md +0 -108
  799. package/templates/native-go-jobs/backend/internal/app/background_on.go +0 -7
  800. package/templates/native-go-jobs/backend/internal/app/background_routes_test.go +0 -90
  801. package/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +0 -170
  802. package/templates/native-go-jobs/frontend/src/background/i18n/de.json +0 -75
  803. package/templates/native-go-jobs/frontend/src/background/i18n/en.json +0 -75
  804. package/templates/native-go-jobs/frontend/src/background/i18n/es.json +0 -75
  805. package/templates/native-go-jobs/frontend/src/background/i18n/fr.json +0 -75
  806. package/templates/native-go-jobs/frontend/src/background/i18n/it.json +0 -75
  807. package/templates/native-go-jobs/frontend/src/background/i18n/ja.json +0 -75
  808. package/templates/native-go-jobs/frontend/src/background/i18n/ko.json +0 -75
  809. package/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +0 -75
  810. package/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +0 -75
  811. package/templates/native-go-jobs/frontend/src/background/i18n.ts +0 -19
  812. package/templates/native-go-jobs/frontend/src/background/picker-provider.ts +0 -12
  813. package/templates/native-go-jobs/frontend/src/background/request-key.ts +0 -5
  814. package/templates/native-go-jobs/frontend/test/background.test.ts +0 -205
  815. package/templates/native-go-root-ops/backend/internal/app/executor.go +0 -140
  816. package/templates/native-go-root-ops/backend/internal/app/executor_test.go +0 -117
  817. package/templates/native-go-root-ops/root/whoami.sh +0 -3
  818. package/templates/native-go-vue/README.md +0 -47
  819. package/templates/native-go-vue/frontend/DESIGN.md +0 -61
  820. package/templates/native-go-vue/frontend/package-lock.json +0 -2530
  821. package/templates/native-go-vue/frontend/package.json +0 -6
  822. package/templates/native-go-vue/frontend/src/App.vue +0 -96
  823. package/templates/native-go-vue/frontend/src/CapabilityPanels.vue +0 -6
  824. package/templates/native-go-vue/frontend/src/context.ts +0 -78
  825. package/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +0 -70
  826. package/templates/native-go-vue/frontend/src/delegate/catalogs.ts +0 -11
  827. package/templates/native-go-vue/frontend/src/delegate/copy.test.ts +0 -12
  828. package/templates/native-go-vue/frontend/src/delegate/copy.ts +0 -4
  829. package/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +0 -23
  830. package/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +0 -24
  831. package/templates/native-go-vue/frontend/src/delegate/facade.test.ts +0 -100
  832. package/templates/native-go-vue/frontend/src/delegate/facade.ts +0 -85
  833. package/templates/native-go-vue/frontend/src/delegate/i18n/de.json +0 -47
  834. package/templates/native-go-vue/frontend/src/delegate/i18n/en.json +0 -47
  835. package/templates/native-go-vue/frontend/src/delegate/i18n/es.json +0 -47
  836. package/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +0 -47
  837. package/templates/native-go-vue/frontend/src/delegate/i18n/it.json +0 -47
  838. package/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +0 -47
  839. package/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +0 -47
  840. package/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +0 -42
  841. package/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +0 -42
  842. package/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +0 -42
  843. package/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +0 -42
  844. package/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +0 -42
  845. package/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +0 -42
  846. package/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +0 -42
  847. package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +0 -42
  848. package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +0 -42
  849. package/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +0 -47
  850. package/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +0 -47
  851. package/templates/native-go-vue/frontend/src/delegate/long-running.ts +0 -57
  852. package/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +0 -12
  853. package/templates/native-go-vue/frontend/src/delegate/save-copy.ts +0 -24
  854. package/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +0 -12
  855. package/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +0 -21
  856. package/templates/native-go-vue/frontend/src/files/FileBrowser.vue +0 -131
  857. package/templates/native-go-vue/frontend/src/files/FilesPage.vue +0 -35
  858. package/templates/native-go-vue/frontend/src/files/files.test.ts +0 -100
  859. package/templates/native-go-vue/frontend/src/files/provider.test.ts +0 -48
  860. package/templates/native-go-vue/frontend/src/files/transfers.test.ts +0 -27
  861. package/templates/native-go-vue/frontend/src/files/transfers.ts +0 -25
  862. package/templates/native-go-vue/frontend/src/i18n/de.json +0 -20
  863. package/templates/native-go-vue/frontend/src/i18n/en.json +0 -20
  864. package/templates/native-go-vue/frontend/src/i18n/es.json +0 -20
  865. package/templates/native-go-vue/frontend/src/i18n/fr.json +0 -20
  866. package/templates/native-go-vue/frontend/src/i18n/it.json +0 -20
  867. package/templates/native-go-vue/frontend/src/i18n/ja.json +0 -20
  868. package/templates/native-go-vue/frontend/src/i18n/ko.json +0 -20
  869. package/templates/native-go-vue/frontend/src/i18n/zh-CN.json +0 -20
  870. package/templates/native-go-vue/frontend/src/i18n/zh-TW.json +0 -20
  871. package/templates/native-go-vue/frontend/src/i18n.ts +0 -13
  872. package/templates/native-go-vue/frontend/src/identity/DESIGN.md +0 -46
  873. package/templates/native-go-vue/frontend/src/identity/LoginPage.vue +0 -78
  874. package/templates/native-go-vue/frontend/src/identity/i18n/de.json +0 -27
  875. package/templates/native-go-vue/frontend/src/identity/i18n/en.json +0 -27
  876. package/templates/native-go-vue/frontend/src/identity/i18n/es.json +0 -27
  877. package/templates/native-go-vue/frontend/src/identity/i18n/fr.json +0 -27
  878. package/templates/native-go-vue/frontend/src/identity/i18n/it.json +0 -27
  879. package/templates/native-go-vue/frontend/src/identity/i18n/ja.json +0 -27
  880. package/templates/native-go-vue/frontend/src/identity/i18n/ko.json +0 -27
  881. package/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +0 -27
  882. package/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +0 -27
  883. package/templates/native-go-vue/frontend/src/identity/i18n.ts +0 -14
  884. package/templates/native-go-vue/frontend/src/identity/login.test.ts +0 -32
  885. package/templates/native-go-vue/frontend/src/identity/session.test.ts +0 -33
  886. package/templates/native-go-vue/frontend/src/identity/session.ts +0 -74
  887. package/templates/native-go-vue/frontend/src/main.ts +0 -32
  888. package/templates/native-go-vue/frontend/src/nas/NasPicker.vue +0 -42
  889. package/templates/native-go-vue/frontend/src/nas/contract.ts +0 -12
  890. package/templates/native-go-vue/frontend/src/nas/destination.test.ts +0 -48
  891. package/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +0 -41
  892. package/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +0 -41
  893. package/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +0 -41
  894. package/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +0 -41
  895. package/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +0 -41
  896. package/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +0 -41
  897. package/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +0 -41
  898. package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +0 -41
  899. package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +0 -41
  900. package/templates/native-go-vue/frontend/src/nas/i18n.ts +0 -2
  901. package/templates/native-go-vue/frontend/src/nas/locale.ts +0 -24
  902. package/templates/native-go-vue/frontend/src/nas/provider.ts +0 -50
  903. package/templates/native-go-vue/frontend/src/nas/use-request.ts +0 -18
  904. package/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +0 -39
  905. package/templates/native-go-vue/frontend/src/shell/AppShell.vue +0 -48
  906. package/templates/native-go-vue/frontend/src/shell/i18n/de.json +0 -4
  907. package/templates/native-go-vue/frontend/src/shell/i18n/en.json +0 -4
  908. package/templates/native-go-vue/frontend/src/shell/i18n/es.json +0 -4
  909. package/templates/native-go-vue/frontend/src/shell/i18n/fr.json +0 -4
  910. package/templates/native-go-vue/frontend/src/shell/i18n/it.json +0 -4
  911. package/templates/native-go-vue/frontend/src/shell/i18n/ja.json +0 -4
  912. package/templates/native-go-vue/frontend/src/shell/i18n/ko.json +0 -4
  913. package/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +0 -4
  914. package/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +0 -4
  915. package/templates/native-go-vue/frontend/src/shell/i18n.ts +0 -17
  916. package/templates/native-go-vue/frontend/src/shell/pages.ts +0 -15
  917. package/templates/native-go-vue/frontend/src/style.css +0 -27
  918. package/templates/native-go-vue/frontend/test/apps.test.ts +0 -57
  919. package/templates/native-go-vue/frontend/test/native-controls.test.ts +0 -27
  920. package/templates/native-go-vue/frontend/test/portal-settings.test.ts +0 -71
  921. package/templates/native-go-vue/frontend/test/shell-i18n.test.ts +0 -50
  922. package/templates/native-go-vue/frontend/test/shell-ui.test.ts +0 -20
  923. package/templates/native-go-vue/frontend/test/shell.test.ts +0 -30
  924. package/templates/native-go-vue/frontend/tsconfig.json +0 -1
  925. package/templates/native-go-vue/frontend/vite.config.ts +0 -10
  926. package/templates/native-go-vue/gitignore +0 -2
  927. /package/{dist/templates/_daemon → assets/go/daemon}/fixture_linux_test.go +0 -0
  928. /package/{dist/templates/_daemon → assets/go/daemon}/fixture_other_test.go +0 -0
  929. /package/{dist/templates/_daemon → assets/go/daemon}/go.mod +0 -0
  930. /package/{dist/templates/_daemon → assets/go/daemon}/main.go +0 -0
  931. /package/{dist/templates/_daemon → assets/go/daemon}/main_test.go +0 -0
  932. /package/{dist/templates/_daemon → assets/go/daemon}/process_linux.go +0 -0
  933. /package/{dist/templates/_daemon → assets/go/daemon}/process_linux_test.go +0 -0
  934. /package/{dist/templates/_daemon → assets/go/daemon}/process_other.go +0 -0
  935. /package/{dist/templates/_daemon → assets/go/daemon}/testdata/child.go +0 -0
  936. /package/{dist/templates/_gateway → assets/go/gateway}/auth.go +0 -0
  937. /package/{dist/templates/_gateway → assets/go/gateway}/auth_test.go +0 -0
  938. /package/{dist/templates/_gateway → assets/go/gateway}/cgi.go +0 -0
  939. /package/{dist/templates/_gateway → assets/go/gateway}/cgi_test.go +0 -0
  940. /package/{dist/templates/_gateway → assets/go/gateway}/csrf.go +0 -0
  941. /package/{dist/templates/_gateway → assets/go/gateway}/csrf_test.go +0 -0
  942. /package/{dist/templates/_gateway → assets/go/gateway}/directory.go +0 -0
  943. /package/{dist/templates/_gateway → assets/go/gateway}/directory_test.go +0 -0
  944. /package/{dist/templates/_gateway → assets/go/gateway}/gateway.go +0 -0
  945. /package/{dist/templates/_gateway → assets/go/gateway}/gateway_test.go +0 -0
  946. /package/{dist/templates/_gateway → assets/go/gateway}/go.mod +0 -0
  947. /package/{dist/templates/_gateway → assets/go/gateway}/groups.go +0 -0
  948. /package/{dist/templates/_gateway → assets/go/gateway}/main.go +0 -0
  949. /package/{dist/templates/_shared → assets/licenses}/GO-LICENSE +0 -0
  950. /package/{dist/templates/_shared → assets/licenses}/GO-PATENTS +0 -0
  951. /package/{dist/templates/_shared/LICENSES → assets/licenses}/TEMPLATE.txt +0 -0
package/dist/cli.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Command, CommanderError } from "commander";
2
- import { existsSync, readFileSync, renameSync } from "node:fs";
3
- import { resolve, dirname, join } from "node:path";
2
+ import { existsSync, readFileSync, renameSync, statSync } from "node:fs";
3
+ import { createHash } from "node:crypto";
4
+ import { basename, resolve, dirname, join } from "node:path";
4
5
  import { findProjectRoot } from "./discovery.js";
5
6
  import { loadContract } from "./contract/load.js";
6
7
  import { contractIconPath } from "./contract/icon.js";
@@ -27,8 +28,10 @@ import { formatSkillList, readSkill, resolveSkillsRoot } from "./skill.js";
27
28
  import { resolveInstallParameterExtraValues } from "./deploy/param-values.js";
28
29
  import { findStandaloneRoot, loadStandaloneManifest, } from "./standalone/manifest.js";
29
30
  import { buildNativeLayout, isNativeLayout, loadNativeLayout, LAYOUT_ARCHES } from "./standalone/native-layout.js";
30
- import { buildStandalone } from "./standalone/build.js";
31
- import { inspectSpk } from "./standalone/inspect-spk.js";
31
+ import { buildStandalone, runnerFor } from "./standalone/build.js";
32
+ import { checkJobs, commitOutputs, forEachArch } from "./standalone/arch-jobs.js";
33
+ import { checkReproducible } from "./reproducible.js";
34
+ import { inspectAnySpk } from "./spk/inspect.js";
32
35
  function failure(code, message, hint = "修正設定後重試;使用 --help 查看指令用法。") {
33
36
  return Object.assign(new Error(`[${code}] ${message}`), { code, hint });
34
37
  }
@@ -61,13 +64,38 @@ function formatIconReport(report, manifestFile) {
61
64
  ...(report.solid ? { warning: "warning:圖示只有單一顏色,Package Center 與 DSM 主選單會像一個色塊;建議換成有圖形的圖示。" } : {}),
62
65
  };
63
66
  }
64
- function formatSpkInspection(spk, report) {
67
+ const LABEL = { error: "錯誤", warning: "警告" };
68
+ /** One line per finding: severity, stable code, where, and what to fix. */
69
+ function formatFindings(findings) {
70
+ return findings.map((f) => `${LABEL[f.severity]} ${f.code}${f.path ? ` ${f.path}` : ""}: ${f.message}`);
71
+ }
72
+ /** The DSM format section, and the build contract section for an SPK synopkgland built. */
73
+ function formatSpkChecks(report) {
74
+ const { errors, warnings } = report.dsm;
75
+ return [
76
+ "DSM 格式:",
77
+ ...formatFindings([...errors, ...warnings]).map((line) => ` ${line}`),
78
+ ` ${report.dsm.ok ? "符合" : "不符合"} DSM 7 套件格式:${errors.length} 個錯誤、${warnings.length} 個警告。`,
79
+ ...(report.synopkgland
80
+ ? [
81
+ "synopkgland 合約:",
82
+ report.findings.length
83
+ ? " 問題:"
84
+ : report.executor
85
+ ? " 檢查:沒有異常。管理員核准後會建立 root executor 排程(boot 與 control task),以 root 執行此 SPK 固定的 executor 與 policy。"
86
+ : " 檢查:沒有 root 權限需求或異常。",
87
+ ...report.findings.map((f) => ` - ${f}`),
88
+ ]
89
+ : []),
90
+ ];
91
+ }
92
+ function formatSpkReport(spk, report) {
65
93
  return [
66
94
  `SPK:${spk}`,
67
95
  `package:${report.package ?? "?"} version:${report.version ?? "?"}`,
68
- `arch:${report.arch ?? "?"} runtime:${report.kind ?? "?"}`,
96
+ report.synopkgland ? `arch:${report.arch ?? "?"} runtime:${report.kind ?? "?"}` : `arch:${report.arch ?? "?"} 建置:不是 synopkgland(只檢查 DSM 格式)`,
69
97
  `簽署:${report.signed ? "有 Synology 簽章" : "未簽署(Package Center 需允許任何發行者)"}`,
70
- `CGI:${report.cgi ?? "無"}`,
98
+ ...(report.synopkgland ? [`CGI:${report.cgi ?? "無"}`] : []),
71
99
  ...(report.icon ? [`圖示:${report.icon.source === "default" ? "SDK 預設圖示" : report.icon.source === "custom" ? `自訂(PACKAGE_ICON_256 sha256 ${report.icon.sha256.slice(0, 12)}…)` : "無 PACKAGE_ICON"}`] : []),
72
100
  ...(report.entry === "admin-only" ? ["入口:entry: admin-only,只有 DSM 管理員能開啟與呼叫任何 route(含 SDK routes)"] : []),
73
101
  ...(report.entry === "app-privilege" ? ["入口:entry: app-privilege,由 DSM 控制台「應用程式權限」決定誰能使用"] : []),
@@ -76,12 +104,7 @@ function formatSpkInspection(spk, report) {
76
104
  "payload:",
77
105
  ...(report.uninstallCleanup ?? []).map(item => `Uninstall cleanup (if needed):${item.target} — ${item.condition} ${item.action}`),
78
106
  ...report.payload.map((e) => ` ${e.mode} ${e.path}`),
79
- report.findings.length
80
- ? "問題:"
81
- : report.executor
82
- ? "檢查:沒有異常。管理員核准後會建立 root executor 排程(boot 與 control task),以 root 執行此 SPK 固定的 executor 與 policy。"
83
- : "檢查:沒有 root 權限需求或異常。",
84
- ...report.findings.map((f) => ` - ${f}`),
107
+ ...formatSpkChecks(report),
85
108
  ].join("\n");
86
109
  }
87
110
  async function standaloneBuild(root, arches, options) {
@@ -93,8 +116,9 @@ async function standaloneBuild(root, arches, options) {
93
116
  ? resolve(options.outDir)
94
117
  : undefined;
95
118
  const result = isNativeLayout(root)
96
- ? await buildNativeLayout({ root, arches, outDir, minDsm: options.minDsm })
97
- : await buildStandalone({ root, arches: arches, outDir, minDsm: options.minDsm });
119
+ ? await buildNativeLayout({ root, arches, outDir, minDsm: options.minDsm, jobs: options.jobs })
120
+ : await buildStandalone({ root, arches: arches, outDir, minDsm: options.minDsm, jobs: options.jobs });
121
+ result.warnings?.forEach((warning) => console.error(warning));
98
122
  return result.outputs.map((output) => {
99
123
  if (!options.output)
100
124
  return output;
@@ -103,35 +127,55 @@ async function standaloneBuild(root, arches, options) {
103
127
  return target;
104
128
  });
105
129
  }
130
+ /** What the reproducible check needs to know about the project being built. */
131
+ function reproducibleTarget(standalone, project, arches) {
132
+ if (!standalone)
133
+ return { root: project.root, manifestPath: project.contractPath, arches: arches ?? [] };
134
+ const manifestPath = join(standalone, "dsm-package.yaml");
135
+ if (!isNativeLayout(standalone)) {
136
+ const loaded = loadStandaloneManifest(standalone);
137
+ return { root: standalone, manifestPath, arches: arches ?? (loaded.ok ? loaded.manifest.arches : []) };
138
+ }
139
+ const loaded = loadNativeLayout(standalone);
140
+ if (!loaded.ok)
141
+ return { root: standalone, manifestPath, arches: arches ?? [] };
142
+ // Toolkit pins decide what the native hooks compile against.
143
+ const toolkits = createHash("sha256").update(JSON.stringify(loaded.manifest.native.toolkits)).digest("hex");
144
+ return { root: standalone, manifestPath, arches: arches ?? loaded.manifest.arches, extraInputs: { "native.toolkits": toolkits } };
145
+ }
146
+ function reproducibleLines(report) {
147
+ if (report.skipped)
148
+ return [`可重現檢查:依賴指紋 ${report.fingerprint.slice(0, 12)} 與上次通過時相同,略過。`];
149
+ return report.results.map((result) => result.identical
150
+ ? `可重現檢查:${basename(result.output)} 相同(sha256 ${result.sha256[0].slice(0, 12)})`
151
+ : `可重現檢查:${basename(result.output)} 不同(sha256 ${result.sha256[0].slice(0, 12)} ≠ ${result.sha256[1].slice(0, 12)})\n` +
152
+ [...result.payload.map((file) => ` payload ${file}`), ...result.metadata.map((file) => ` metadata ${file}`)].join("\n"));
153
+ }
106
154
  const ARCH_REQUIRED = [
107
155
  "NATIVE_ARCH_FAMILY_REQUIRED",
108
156
  "GATEWAY_ARCH_FAMILY_REQUIRED",
109
157
  ];
110
158
  async function containerBuild(project, arches, options) {
159
+ const jobs = checkJobs(options.jobs);
111
160
  const unsupported = arches?.find((arch) => !isContainerArchFamily(arch));
112
161
  if (unsupported)
113
162
  throw failure("CONTAINER_ARCH_UNSUPPORTED", `Container Manager App 只支援 ${CONTAINER_ARCH_FAMILIES.join("、")};DSM 不為 ${unsupported} 提供 Container Manager。`);
114
163
  const output = options.output ? resolve(options.output) : undefined;
115
- const build = (archFamily, outputPath = output) => buildSpk({ project, archFamily, outputPath, minDsm: options.minDsm });
116
- let results = [];
117
- if (arches?.length === 1)
118
- results = [await build(arches[0])];
119
- else {
120
- const first = await build();
121
- if (first.ok || !first.errors.every((code) => ARCH_REQUIRED.includes(code)))
122
- results = [first];
123
- else {
124
- if (output)
125
- throw failure("CLI_OUTPUT_ARCH_REQUIRED", "-o 只能搭配 --arch 建置單一架構。");
126
- const packageId = String(loadContract(project.contractPath).contract.package);
127
- for (const arch of arches ?? CONTAINER_ARCH_FAMILIES)
128
- results.push(await build(arch, join(options.outDir ? resolve(options.outDir) : project.root, `${packageId}-${arch}.spk`)));
129
- }
130
- }
131
- for (const result of results)
132
- if (!result.ok)
164
+ const build = async (archFamily, outputPath = output) => {
165
+ const result = await buildSpk({ project, archFamily, outputPath, minDsm: options.minDsm, gatewayRun: archFamily && runnerFor(undefined, jobs, archFamily) });
166
+ if (!result.ok && !(archFamily === undefined && result.errors.every((code) => ARCH_REQUIRED.includes(code))))
133
167
  throw failure(result.errors[0] ?? "BUILD_FAILED", `建置失敗:${result.errors.join(", ")}`);
134
- return results.map((result) => result.outputPath);
168
+ return result;
169
+ };
170
+ if (arches?.length === 1)
171
+ return [(await build(arches[0])).outputPath];
172
+ const first = await build();
173
+ if (first.ok)
174
+ return [first.outputPath];
175
+ if (output)
176
+ throw failure("CLI_OUTPUT_ARCH_REQUIRED", "-o 只能搭配 --arch 建置單一架構。");
177
+ const packageId = String(loadContract(project.contractPath).contract.package);
178
+ return commitOutputs(options.outDir ? resolve(options.outDir) : project.root, (stage) => forEachArch(arches ?? CONTAINER_ARCH_FAMILIES, jobs, async (arch) => (await build(arch, join(stage, `${packageId}-${arch}.spk`))).outputPath));
135
179
  }
136
180
  export async function runCli(argv) {
137
181
  const json = argv.includes("--json");
@@ -194,14 +238,16 @@ export async function runCli(argv) {
194
238
  });
195
239
  program
196
240
  .command("inspect <spk>")
197
- .description("不安裝,檢查 SPK 身分、檔案與 root 權限需求")
241
+ .description("不安裝,依 DSM 7 套件格式檢查任何 SPK;synopkgland 建置的 SPK 另查建置合約與 root 權限需求")
198
242
  .option("--json", "輸出單一 JSON 物件")
199
243
  .action(async (input) => {
200
244
  const spk = resolve(input);
201
- const report = await inspectSpk(spk);
202
- if (report.findings.length)
203
- throw Object.assign(failure("SPK_INSPECTION_FAILED", report.findings.join("\n"), "修正產物並重新 build;勿安裝檢查未通過的 SPK。"), { report });
204
- emit("inspect", { spk, ...report }, formatSpkInspection(spk, report));
245
+ if (existsSync(spk) && statSync(spk).isDirectory())
246
+ throw failure("SPK_INSPECTION_FAILED", `${spk} 是目錄;inspect 檢查 .spk 檔。`, "檢查專案設定請用 synopkgland check。");
247
+ const report = await inspectAnySpk(spk);
248
+ if (!report.dsm.ok || report.findings.length)
249
+ throw Object.assign(failure("SPK_INSPECTION_FAILED", formatSpkChecks(report).join("\n"), "依錯誤碼修正 SPK 並重新打包,錯誤碼說明見 reference/errors;勿安裝檢查未通過的 SPK。"), { report: { spk, ...report } });
250
+ emit("inspect", { spk, ...report }, formatSpkReport(spk, report));
205
251
  });
206
252
  const images = program.command("images").description("Container image 工具");
207
253
  images
@@ -261,8 +307,9 @@ export async function runCli(argv) {
261
307
  },
262
308
  });
263
309
  stdout(`已建立 ${options.template} 專案於 ${targetDir}`);
310
+ // --install-links packs a local SDK like the released package; a symlink would load the checkout's own node_modules.
264
311
  if (options.template === "native-go")
265
- stdout(`下一步:\n cd ${dir}\n (cd backend && go test ./...)\n${existsSync(join(targetDir, "frontend", "package.json")) ? " (cd frontend && npm ci)\n" : ""} synopkgland build\n說明見 README.md。`);
312
+ stdout(`下一步:\n cd ${dir}\n (cd backend && go test ./...)\n${existsSync(join(targetDir, "frontend", "package.json")) ? ` (cd frontend && npm install${process.env.SYNOPKGLAND_SDK_DIR ? " --install-links" : ""})\n` : ""} synopkgland build\n說明見 README.md。`);
266
313
  });
267
314
  program
268
315
  .command("add <caps...>")
@@ -415,9 +462,14 @@ export async function runCli(argv) {
415
462
  .option("--out-dir <dir>", "輸出目錄,原生專案預設 dist/")
416
463
  .option("--arch <families>", `架構,可用逗號分隔:${NATIVE_ARCH_FAMILIES.join(",")}(armv7 用於 native-go 與 binary,不用於 Container Manager App);native layout 另支援 armv8`)
417
464
  .option("--min-dsm <version>", "最低 DSM 版本,省略時使用 manifest 值")
465
+ .option("--jobs <n>", "同時建置的架構數,預設 1(依序)", Number)
466
+ .option("--verify-reproducible [when]", "從乾淨狀態再建置一次並比對;when:changed(預設,依賴指紋未變時略過)或 always")
418
467
  .action(async (options, command) => {
419
468
  const root = rootOf(command);
420
469
  const standalone = standaloneRoot(root);
470
+ const verify = options.verifyReproducible === true ? "changed" : options.verifyReproducible;
471
+ if (verify !== undefined && verify !== "changed" && verify !== "always")
472
+ throw failure("CLI_OPTION_INVALID", `--verify-reproducible 只接受 changed 或 always,收到 ${verify}。`);
421
473
  let arches;
422
474
  try {
423
475
  arches =
@@ -434,10 +486,24 @@ export async function runCli(argv) {
434
486
  catch (error) {
435
487
  throw failure("CLI_ARCH_INVALID", error instanceof Error ? error.message : String(error));
436
488
  }
437
- const outputs = standalone
438
- ? await standaloneBuild(standalone, arches, options)
439
- : await containerBuild(requireProject(root), arches, options);
440
- emit("build", { outputs }, outputs.map((output) => `已產生 ${output}`).join("\n"));
489
+ const project = standalone ? undefined : requireProject(root);
490
+ const build = (overrides = {}) => standalone
491
+ ? standaloneBuild(standalone, arches, { ...options, ...overrides })
492
+ : containerBuild(project, arches, { ...options, ...overrides });
493
+ const outputs = await build();
494
+ const reproducible = verify === undefined ? undefined : await checkReproducible({
495
+ ...reproducibleTarget(standalone, project, arches),
496
+ outputs,
497
+ mode: verify,
498
+ // The second build writes only to its own folder; a single Compose SPK keeps its name there.
499
+ rebuild: (outDir) => standalone || outputs.length > 1
500
+ ? build({ output: undefined, outDir })
501
+ : build({ output: join(outDir, basename(outputs[0])), outDir: undefined }),
502
+ });
503
+ const lines = [...outputs.map((output) => `已產生 ${output}`), ...(reproducible ? reproducibleLines(reproducible) : [])];
504
+ if (reproducible && !reproducible.identical)
505
+ throw Object.assign(failure("BUILD_NOT_REPRODUCIBLE", lines.join("\n"), "找出 payload 中每次建置都不同的檔案(時間戳、隨機路徑、未鎖定的依賴),修正後重試。"), { report: { outputs, reproducible } });
506
+ emit("build", { outputs, ...(reproducible ? { reproducible } : {}) }, lines.join("\n"));
441
507
  });
442
508
  if (json)
443
509
  console.log = (...args) => console.error(...args);
@@ -102,7 +102,7 @@ export const ERROR_REGISTRY = {
102
102
  "GATEWAY_BUILD_FAILED": {
103
103
  "code": "GATEWAY_BUILD_FAILED",
104
104
  "description": "DSM 驗證閘道建置失敗或產出不是對應架構的靜態 ELF。",
105
- "suggestion": "請查看 go build 輸出;閘道固定以 go1.26.9 建置,離線時請安裝 go1.26.9 或讓 GOPROXY 可提供 golang.org/toolchain,並確認 templates/_gateway 未被修改。"
105
+ "suggestion": "請查看 go build 輸出;閘道固定以 go1.26.9 建置,離線時請安裝 go1.26.9 或讓 GOPROXY 可提供 golang.org/toolchain,並確認 CLI 套件的 assets/go/gateway 未被修改。"
106
106
  },
107
107
  "CONTRACT_INVALID_STRING": {
108
108
  "code": "CONTRACT_INVALID_STRING",
@@ -587,7 +587,7 @@ export const ERROR_REGISTRY = {
587
587
  "STANDALONE_GO_BUILD_FAILED": {
588
588
  "code": "STANDALONE_GO_BUILD_FAILED",
589
589
  "description": "go build 失敗。",
590
- "suggestion": "請在 backend 目錄執行 go build ./... 並修正錯誤。"
590
+ "suggestion": "請在 backend 目錄執行 go build ./... 並修正錯誤。取不到 github.com/synopackageland/syno-pkg-land-sdk 時,設定 GOPRIVATE=github.com/synopackageland/* 並讓 git 能以憑證讀 github.com。"
591
591
  },
592
592
  "STANDALONE_PORTAL_INVALID": {
593
593
  "code": "STANDALONE_PORTAL_INVALID",
@@ -659,11 +659,16 @@ ERROR_REGISTRY["CLI_OPTION_INVALID"] = { "code": "CLI_OPTION_INVALID", "descript
659
659
  ERROR_REGISTRY["CLI_OUTPUT_ARCH_REQUIRED"] = { "code": "CLI_OUTPUT_ARCH_REQUIRED", "description": "輸出單一檔案需要指定架構。", "suggestion": "-o 搭配單一 --arch,或使用 --out-dir。" };
660
660
  ERROR_REGISTRY["HOST_REQUIRED"] = { "code": "HOST_REQUIRED", "description": "沒有指定 NAS。", "suggestion": "使用 --host <profile>;deploy 本地檢查可用 --dry-run。" };
661
661
  ERROR_REGISTRY["NAS_CREDENTIALS_MISSING"] = { "code": "NAS_CREDENTIALS_MISSING", "description": "找不到 NAS 憑證。", "suggestion": "設定 synoagentcli profile 或 DSM_URL/DSM_PASSWORD。" };
662
- ERROR_REGISTRY["SPK_INSPECTION_FAILED"] = { "code": "SPK_INSPECTION_FAILED", "description": "SPK 產物檢查失敗。", "suggestion": "修正 findings 並重新 build。" };
662
+ ERROR_REGISTRY["NATIVE_LAYOUT_SCRIPT_NOT_EXECUTABLE"] = { "code": "NATIVE_LAYOUT_SCRIPT_NOT_EXECUTABLE", "description": "native layout metadata 的 scripts/ 生命週期腳本沒有執行權限(inspect 的 SPK_SCRIPT_NOT_EXECUTABLE)。", "suggestion": "在 layout metadata 目錄對該腳本執行 chmod +x 後重新 build。" };
663
+ ERROR_REGISTRY["NATIVE_TOOLKIT_TAR_UNSUPPORTED"] = { "code": "NATIVE_TOOLKIT_TAR_UNSUPPORTED", "description": "解開 native.toolkits 需要 GNU tar 或 bsdtar,但 PATH 上的 tar 兩者都不是。", "suggestion": "讓 PATH 上的 tar 指向 GNU tar 或 bsdtar(macOS 內建 bsdtar、多數 Linux 是 GNU tar)後重新 build。" };
664
+ ERROR_REGISTRY["SPK_INSPECTION_FAILED"] = { "code": "SPK_INSPECTION_FAILED", "description": "SPK 不符合 DSM 7 套件格式(dsm.errors),或 synopkgland 建置的 SPK 不符合建置合約(findings)。", "suggestion": "依 SPK_* 規則碼與 findings 修正後重新打包;warnings 不影響結果。" };
663
665
  ERROR_REGISTRY["IMAGE_PIN_REQUIRED"] = { "code": "IMAGE_PIN_REQUIRED", "description": "映像 digest 尚未固定。", "suggestion": "執行 images pin。" };
664
666
  ERROR_REGISTRY["INIT_TEMPLATE_REQUIRED"] = { "code": "INIT_TEMPLATE_REQUIRED", "description": "未指定模板。", "suggestion": "使用 -t native-go、binary 或 compose。" };
665
667
  ERROR_REGISTRY["INIT_TEMPLATE_UNKNOWN"] = { "code": "INIT_TEMPLATE_UNKNOWN", "description": "未知模板。", "suggestion": "使用 -t native-go、binary 或 compose。" };
666
668
  ERROR_REGISTRY["CLI_ARCH_INVALID"] = { "code": "CLI_ARCH_INVALID", "description": "架構選項不合法。", "suggestion": "使用 x86_64、aarch64 或 armv7(armv7 用於 native-go 與 binary,不用於 Container Manager App)。" };
669
+ ERROR_REGISTRY["CLI_JOBS_INVALID"] = { "code": "CLI_JOBS_INVALID", "description": "--jobs 不是正整數。", "suggestion": "使用 --jobs 1(預設)或更大的整數。" };
670
+ ERROR_REGISTRY["BUILD_NOT_REPRODUCIBLE"] = { "code": "BUILD_NOT_REPRODUCIBLE", "description": "build --verify-reproducible 再建置一次的 SPK 與第一次不同。", "suggestion": "查看列出的 payload 與 metadata 檔案,移除每次建置都會變的內容(時間戳、隨機或絕對路徑、未鎖定的依賴)。" };
671
+ ERROR_REGISTRY["REPRODUCIBLE_INVALID"] = { "code": "REPRODUCIBLE_INVALID", "description": "reproducible 設定格式不對,或列出的 input 不是專案內的檔案。", "suggestion": "使用 reproducible: {inputs: [檔案...], clean: [路徑...]},路徑相對於專案;{arch} 只能用在 clean。" };
667
672
  ERROR_REGISTRY["NATIVE_ARCH_UNDETERMINED"] = { "code": "NATIVE_ARCH_UNDETERMINED", "description": "無法判定 NAS 架構。", "suggestion": "指定 --arch x86_64、aarch64 或 armv7。" };
668
673
  ERROR_REGISTRY["DEVELOPMENT_INSTANCE_UNSUPPORTED"] = { "code": "DEVELOPMENT_INSTANCE_UNSUPPORTED", "description": "原生專案不支援 --dev。", "suggestion": "init 時指定不同 package ID。" };
669
674
  ERROR_REGISTRY["INIT_OPTIONS_UNSUPPORTED"] = { "code": "INIT_OPTIONS_UNSUPPORTED", "description": "選項不適用於這個模板。", "suggestion": "--from 僅 compose;--ui 僅 native-go。" };
@@ -690,7 +695,15 @@ export function getErrorCode(code) {
690
695
  return ERROR_REGISTRY[code];
691
696
  }
692
697
  for (const [code, description, suggestion] of [
693
- ["EXECUTOR_BUILD_FAILED", "executor 或 lifecycle helper 編譯失敗,或 CLI 套件缺少 executor 原始碼。", "確認已安裝 Go 1.21 以上且可取得 go1.26.9(離線時請先備妥),查看訊息中的編譯器輸出;原始碼缺少時重新安裝 CLI。"],
698
+ ["EXECUTOR_BUILD_FAILED", "從 App 相依的 SDK 版本編譯 executor 或 lifecycle helper 失敗。", "確認已安裝 Go 1.21 以上且可取得 go1.26.9(離線時請先備妥),查看訊息中的編譯器輸出。"],
699
+ ["EXECUTOR_DIGEST_MISMATCH", "由 SDK 版本建出的 executor 與 CLI 內建的 sha256 表不符,或表中沒有這個 SDK 版本。", "確認 backend/go.mod 的 github.com/synopackageland/syno-pkg-land-sdk 是正式版本且 Go 為 go1.26.9;表中沒有該版本時升級 CLI。"],
700
+ ["EXECUTOR_DIGEST_UNVERIFIED", "SYNOPKGLAND_SDK_DIR 指向本機 SDK,executor 未對照 sha256 表(警告)。", "只用於開發;要發佈的 SPK 請取消 SYNOPKGLAND_SDK_DIR 後重新 build。"],
701
+ ["SDK_REQUIRED", "rootOps 或 delegate 需要 SDK,但 backend/go.mod 沒有 require github.com/synopackageland/syno-pkg-land-sdk。", "在 backend/go.mod 加入 require github.com/synopackageland/syno-pkg-land-sdk 與 CLI 同一 minor 的版本,或改用 init 產生的 Go 後端。"],
702
+ ["SDK_VERSION_MISMATCH", "frontend/package.json 的 @synopackageland/sdk 與 backend/go.mod 要求的 SDK 版本不同。", "把兩邊改成同一個版本;file: 相依時,比對的是該目錄 package.json 的 version。"],
703
+ ["SDK_UNSUPPORTED", "backend/go.mod 要求的 SDK 不是這個 CLI 的 minor 版本線。", "改用與 SDK 同一 minor 的 CLI,或把 SDK 升到 CLI 支援的版本線(訊息列出)。"],
704
+ ["SDK_DIR_NOT_READY", "SYNOPKGLAND_SDK_DIR 指向的 SDK checkout 根目錄缺少 go.mod,或 Vue 專案需要的 ts 套件尚未建置(沒有 ts/dist)。", "指向 syno-pkg-land-sdk checkout;Vue 專案先在 $SYNOPKGLAND_SDK_DIR/ts 執行 npm ci && npm run build(npm 安裝 file: 套件時不會替它 build)。"],
705
+ ["SDK_DOWNLOAD_FAILED", "go mod download 取不到 backend/go.mod 要求的 SDK 版本。", "SDK repo 目前是 private,不能經 proxy.golang.org 取得:設定 GOPRIVATE=github.com/synopackageland/*(例如 go env -w),並讓 git 能以憑證讀 github.com(git ls-remote 可驗證);再確認版本存在。離線時先在同一台機器 go mod download 一次。"],
706
+ ["TEMPLATES_MISSING", "找不到 @synopackageland/templates。", "重新安裝 @synopackageland/cli,或把 SYNOPKGLAND_TEMPLATES_DIR 指向 templates checkout。"],
694
707
  ["EXECUTOR_PIN_REQUIRED", "宣告 rootOps 或 delegate 的套件建置時沒有 executor 產物。", "使用 synopkgland build,讓 CLI 編譯並 pin executor;不要直接呼叫低階 SPK API。"],
695
708
  ["EXECUTOR_POLICY", "capabilities.delegate 的 operations 或 scope 不合法,無法產生 executor policy。", "改用 init/add 產生的 delegate 宣告,或依 manifest 參考修正 scope 與 operations。"],
696
709
  ["EXECUTOR_PACKAGE", "pin 進 root task 的套件名稱不合法。", "package 必須以英文字母開頭,只含英數字(2–64 字)。"],
@@ -701,7 +714,7 @@ for (const [code, description, suggestion] of [
701
714
  ERROR_REGISTRY[code] = { code, description, suggestion };
702
715
  ERROR_REGISTRY["STANDALONE_ENTRY_INVALID"] = { "code": "STANDALONE_ENTRY_INVALID", "description": "entry 設定不合法。", "suggestion": "entry 填 admin-only 或 app-privilege;app-privilege 需要至少一個 authenticated route。" };
703
716
  ERROR_REGISTRY["STANDALONE_ENTRY_WIDENED"] = { "code": "STANDALONE_ENTRY_WIDENED", "description": "entry: admin-only 與放寬權限的 route 設定衝突。", "suggestion": "把 permissions.json 中 authenticated 或 public 的 route 改為 administrators;要開放給一般使用者請改用 entry: app-privilege 或省略 entry。" };
704
- ERROR_REGISTRY["STANDALONE_ENTRY_UNSUPPORTED"] = { "code": "STANDALONE_ENTRY_UNSUPPORTED", "description": "backend 無法強制 entry 模式。", "suggestion": "使用 Go backend,複製 SDK 的 internal/dsm entry gate 並在 cmd/app/main.go 呼叫 dsm.NewEntryGate。" };
717
+ ERROR_REGISTRY["STANDALONE_ENTRY_UNSUPPORTED"] = { "code": "STANDALONE_ENTRY_UNSUPPORTED", "description": "backend 無法強制 entry 模式。", "suggestion": "使用 Go backend:backend/go.mod require github.com/synopackageland/syno-pkg-land-sdk,並在 cmd/app/main.go 以 dsm.NewEntryGate 包住 authenticator。" };
705
718
  ERROR_REGISTRY["DSM_TLS_UNTRUSTED"] = { "code": "DSM_TLS_UNTRUSTED", "description": "DSM 的 TLS 憑證不受這台電腦信任(自簽、過期或名稱不符)。", "suggestion": "把 NAS 憑證或其 CA 匯出成 PEM,用 NODE_EXTRA_CA_CERTS=<該檔> 執行;或讓 DSM 使用與 host profile 名稱相符的受信任憑證。不要關閉憑證驗證。" };
706
719
  ERROR_REGISTRY["STANDALONE_ICON_INVALID"] = { "code": "STANDALONE_ICON_INVALID", "description": "dsm-package.yaml 的 icon 不是可用的套件圖示。", "suggestion": "icon 填專案內的正方形 PNG(至少 256×256),或含 icon_256.png 的 icon_<size>.png 目錄;省略則使用 SDK 預設圖示。" };
707
720
  ERROR_REGISTRY["CONTRACT_ICON_INVALID"] = { "code": "CONTRACT_ICON_INVALID", "description": "synology-app.yaml 的 icon 不是可用的套件圖示。", "suggestion": "icon 填專案內的正方形 PNG(至少 256×256),或含 icon_256.png 的 icon_<size>.png 目錄;省略則使用 SDK 預設圖示。" };
package/dist/info.js CHANGED
@@ -8,6 +8,7 @@ import { inspectSpk } from "./standalone/inspect-spk.js";
8
8
  import { isNativeLayout, loadNativeLayout } from "./standalone/native-layout.js";
9
9
  import { executorPolicy, executorPolicyText, sha256 } from "./runtime/executor-policy.js";
10
10
  import { executorTasks } from "./runtime/executor-tasks.js";
11
+ import { requiredSdk } from "./runtime/sdk-source.js";
11
12
  import { uninstallCleanup } from "./runtime/uninstall-cleanup.js";
12
13
  export async function projectInfo(options) {
13
14
  const identity = resolveDeployIdentity(options.project, { dev: options.dev });
@@ -68,7 +69,7 @@ export function classifyRootTasks(expected, inventory) {
68
69
  async function liveRootCapability(m, host) {
69
70
  try {
70
71
  const policyDigest = sha256(executorPolicyText(executorPolicy(m)));
71
- const classified = classifyRootTasks(executorTasks({ package: m.package, policyDigest }), await host.getRootTaskInventory?.(m.package));
72
+ const classified = classifyRootTasks(executorTasks({ package: m.package, policyDigest }, requiredSdk(m.backend.kind === "go" ? m.backend.dir : m.root).executorDir), await host.getRootTaskInventory?.(m.package));
72
73
  if (classified.state !== "ready")
73
74
  return classified;
74
75
  const observed = await host.getExecutorStatus?.(m.package);
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,14 +112,8 @@ 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");
@@ -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 {};
@@ -0,0 +1,8 @@
1
+ export interface ReproducibleConfig {
2
+ inputs: string[];
3
+ clean: string[];
4
+ }
5
+ export declare function invalid(message: string): never;
6
+ /** `reproducible: {inputs?: [file...], clean?: [path...]}`; `clean` paths may use `{arch}`. */
7
+ export declare function validateReproducible(value: unknown): ReproducibleConfig;
8
+ export declare function readReproducible(manifestPath: string): ReproducibleConfig;
@@ -0,0 +1,32 @@
1
+ /** The `reproducible` manifest block, shared by dsm-package.yaml and synology-app.yaml. */
2
+ import { readFileSync } from "node:fs";
3
+ import { isAbsolute } from "node:path";
4
+ import { parse } from "yaml";
5
+ export function invalid(message) {
6
+ throw Object.assign(new Error(`[REPRODUCIBLE_INVALID] ${message}`), { code: "REPRODUCIBLE_INVALID" });
7
+ }
8
+ function projectPaths(value, field, arch) {
9
+ if (value === undefined)
10
+ return [];
11
+ if (!Array.isArray(value) || value.length > 64)
12
+ invalid(`reproducible.${field} must be a list of at most 64 project paths.`);
13
+ return value.map((path) => {
14
+ if (typeof path !== "string" || !path || isAbsolute(path) || /[\\\0]/.test(path) || path.split("/").some((part) => ["", ".", ".."].includes(part))
15
+ || (!arch && path.includes("{arch}")) || /[{}]/.test(path.replaceAll("{arch}", ""))) {
16
+ invalid(`reproducible.${field}: ${JSON.stringify(path)} must be a path inside the project${arch ? "" : " without {arch}"}.`);
17
+ }
18
+ return path;
19
+ });
20
+ }
21
+ /** `reproducible: {inputs?: [file...], clean?: [path...]}`; `clean` paths may use `{arch}`. */
22
+ export function validateReproducible(value) {
23
+ if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).some((key) => key !== "inputs" && key !== "clean")) {
24
+ invalid("reproducible takes only the inputs and clean lists.");
25
+ }
26
+ const raw = value;
27
+ return { inputs: projectPaths(raw.inputs, "inputs", false), clean: projectPaths(raw.clean, "clean", true) };
28
+ }
29
+ export function readReproducible(manifestPath) {
30
+ const raw = parse(readFileSync(manifestPath, "utf8"));
31
+ return raw?.reproducible === undefined ? { inputs: [], clean: [] } : validateReproducible(raw.reproducible);
32
+ }
@@ -0,0 +1,38 @@
1
+ import { type ReproducibleConfig } from "./reproducible-config.js";
2
+ export { readReproducible, validateReproducible, type ReproducibleConfig } from "./reproducible-config.js";
3
+ export interface ReproducibleResult {
4
+ output: string;
5
+ identical: boolean;
6
+ sha256: [string, string];
7
+ payload: string[];
8
+ metadata: string[];
9
+ }
10
+ export interface ReproducibleReport {
11
+ skipped: boolean;
12
+ identical: boolean;
13
+ fingerprint?: string;
14
+ changed?: string[];
15
+ results: ReproducibleResult[];
16
+ }
17
+ export declare const FINGERPRINT_RECORD = "reproducible-fingerprint.json";
18
+ /** SHA-256 of each declared input plus the CLI version and `extra` pins, and one digest over all of them. */
19
+ export declare function dependencyFingerprint(root: string, config: ReproducibleConfig, extra?: Record<string, string>): {
20
+ fingerprint: string;
21
+ inputs: Record<string, string>;
22
+ };
23
+ /**
24
+ * Builds the project again with `rebuild` into a temporary folder, after removing
25
+ * the declared `clean` paths and with an empty GOCACHE, and compares each SPK with
26
+ * `outputs`, the SPKs of this build. With declared inputs, mode `changed` skips
27
+ * while the fingerprint and architectures match the last passing record, and a
28
+ * passing check updates that record.
29
+ */
30
+ export declare function checkReproducible(options: {
31
+ root: string;
32
+ manifestPath: string;
33
+ outputs: string[];
34
+ arches: string[];
35
+ mode: "changed" | "always";
36
+ extraInputs?: Record<string, string>;
37
+ rebuild: (outDir: string) => Promise<string[]>;
38
+ }): Promise<ReproducibleReport>;