@synopackageland/cli 0.5.3 → 0.6.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 (1300) hide show
  1. package/README.md +69 -38
  2. package/dist/add.d.ts +4 -0
  3. package/dist/add.js +124 -0
  4. package/dist/build-spk/delete-app-data.d.ts +2 -2
  5. package/dist/build-spk/generator.js +3 -90
  6. package/dist/build-spk/native-lifecycle.d.ts +3 -49
  7. package/dist/build-spk/native-lifecycle.js +8 -187
  8. package/dist/build-spk/notices.d.ts +1 -1
  9. package/dist/build-spk/notices.js +8 -12
  10. package/dist/build-spk/uninstall-wizard.d.ts +3 -10
  11. package/dist/build-spk/uninstall-wizard.js +5 -3
  12. package/dist/build-spk/wizard-messages.d.ts +28 -6
  13. package/dist/build-spk/wizard-messages.js +33 -11
  14. package/dist/capabilities.d.ts +4 -0
  15. package/dist/capabilities.js +12 -0
  16. package/dist/cli.js +329 -467
  17. package/dist/compose/analyze.js +2 -2
  18. package/dist/contract/unsupported-types.js +1 -1
  19. package/dist/deploy/deploy.d.ts +1 -1
  20. package/dist/deploy/deploy.js +1 -3
  21. package/dist/deploy/plan.d.ts +1 -1
  22. package/dist/deploy/plan.js +55 -24
  23. package/dist/discovery.d.ts +1 -2
  24. package/dist/discovery.js +3 -3
  25. package/dist/error-registry.js +70 -298
  26. package/dist/host/dsm-client.js +79 -7
  27. package/dist/host/types.d.ts +13 -0
  28. package/dist/index.d.ts +1 -0
  29. package/dist/index.js +1 -0
  30. package/dist/info.d.ts +20 -2
  31. package/dist/info.js +140 -0
  32. package/dist/init.d.ts +2 -14
  33. package/dist/init.js +89 -90
  34. package/dist/inspect.js +1 -1
  35. package/dist/log.d.ts +5 -0
  36. package/dist/log.js +18 -0
  37. package/dist/runtime/executor-build.d.ts +22 -0
  38. package/dist/runtime/executor-build.js +36 -0
  39. package/dist/runtime/executor-inspect.d.ts +15 -0
  40. package/dist/runtime/executor-inspect.js +32 -0
  41. package/dist/runtime/executor-policy.d.ts +25 -0
  42. package/dist/runtime/executor-policy.js +24 -0
  43. package/dist/runtime/executor-tasks.d.ts +16 -0
  44. package/dist/runtime/executor-tasks.js +28 -0
  45. package/dist/runtime/uninstall-cleanup.d.ts +7 -0
  46. package/dist/runtime/uninstall-cleanup.js +10 -0
  47. package/dist/skill.js +3 -1
  48. package/dist/standalone/api-permissions.d.ts +18 -0
  49. package/dist/standalone/api-permissions.js +63 -0
  50. package/dist/standalone/build.d.ts +1 -1
  51. package/dist/standalone/build.js +26 -40
  52. package/dist/standalone/dsm-window.js +42 -23
  53. package/dist/standalone/inspect-spk.d.ts +9 -3
  54. package/dist/standalone/inspect-spk.js +64 -68
  55. package/dist/standalone/lifecycle.d.ts +1 -1
  56. package/dist/standalone/lifecycle.js +31 -27
  57. package/dist/standalone/manifest.d.ts +17 -14
  58. package/dist/standalone/manifest.js +77 -53
  59. package/dist/standalone/resource.d.ts +2 -2
  60. package/dist/standalone/resource.js +1 -1
  61. package/dist/standalone/root-ops.d.ts +1 -30
  62. package/dist/standalone/root-ops.js +1 -68
  63. package/dist/standalone/root-window.d.ts +5 -38
  64. package/dist/standalone/root-window.js +116 -399
  65. package/dist/standalone/spk.d.ts +3 -5
  66. package/dist/standalone/spk.js +24 -49
  67. package/dist/templates/_executor/README.md +204 -0
  68. package/dist/templates/_executor/apppriv_review_test.go +28 -0
  69. package/dist/templates/_executor/auth_presence_review_test.go +38 -0
  70. package/dist/templates/_executor/cmd/lifecycle/main.go +42 -0
  71. package/dist/templates/_executor/cookie_review_test.go +27 -0
  72. package/dist/templates/_executor/digest_review_test.go +120 -0
  73. package/dist/templates/_executor/directories.go +40 -0
  74. package/dist/templates/_executor/dsm.go +319 -0
  75. package/dist/templates/_executor/dsm_test.go +196 -0
  76. package/dist/templates/_executor/executor.go +524 -0
  77. package/dist/templates/_executor/executor_test.go +284 -0
  78. package/dist/templates/_executor/go.mod +3 -0
  79. package/dist/templates/_executor/identity.go +48 -0
  80. package/dist/templates/_executor/internal/lifecycle/lifecycle.go +90 -0
  81. package/dist/templates/_executor/internal/lifecycle/lifecycle_test.go +174 -0
  82. package/dist/templates/_executor/internal/taskscript/boot.sh +31 -0
  83. package/dist/templates/_executor/internal/taskscript/cmd/main.go +19 -0
  84. package/dist/templates/_executor/internal/taskscript/control.sh +26 -0
  85. package/dist/templates/_executor/internal/taskscript/tasks.go +42 -0
  86. package/dist/templates/_executor/json_review_test.go +40 -0
  87. package/dist/templates/_executor/lifecycle_test.go +86 -0
  88. package/dist/templates/_executor/main.go +518 -0
  89. package/dist/templates/_executor/managed.go +117 -0
  90. package/dist/templates/_executor/managed_test.go +137 -0
  91. package/dist/templates/_executor/path_test.go +17 -0
  92. package/dist/templates/_executor/platform_linux.go +336 -0
  93. package/dist/templates/_executor/platform_linux_test.go +247 -0
  94. package/dist/templates/_executor/platform_other.go +42 -0
  95. package/dist/templates/_executor/process.go +139 -0
  96. package/dist/templates/_executor/socket_linux_test.go +46 -0
  97. package/dist/templates/_executor/store.go +90 -0
  98. package/dist/templates/_executor/task_race_review_test.go +47 -0
  99. package/dist/templates/_executor/tasks.go +283 -0
  100. package/dist/templates/_executor/tasks_review_test.go +43 -0
  101. package/dist/templates/_executor/tasks_test.go +166 -0
  102. package/dist/templates/_executor/testdata/evidence/cleanup.json +24 -0
  103. package/dist/templates/_executor/testdata/evidence/final-smoke.jsonl +9 -0
  104. package/dist/templates/_executor/testdata/evidence/kernel-acl.json +6 -0
  105. package/dist/templates/_executor/testdata/evidence/linux-tests.log +123 -0
  106. package/dist/templates/_executor/testdata/evidence/live.jsonl +23 -0
  107. package/dist/templates/_executor/testdata/evidence/storage.json +90 -0
  108. package/dist/templates/_executor/testdata/evidence/validation.json +55 -0
  109. package/dist/templates/_executor/testdata/live_probe.py +98 -0
  110. package/dist/templates/_executor/upgrade_watch_test.go +236 -0
  111. package/dist/templates/_executor/watch.go +156 -0
  112. package/dist/templates/_executor/watch_test.go +270 -0
  113. package/dist/templates/_executor/write_review_linux_test.go +95 -0
  114. package/dist/templates/_shared/AGENTS.md +17 -0
  115. package/dist/templates/_shared/CLAUDE.md +1 -0
  116. package/dist/templates/binary/LICENSES/GO-LICENSE +27 -0
  117. package/dist/templates/binary/LICENSES/GO-PATENTS +22 -0
  118. package/dist/templates/binary/dsm-package.yaml +19 -0
  119. package/dist/templates/binary/example/main.go +16 -0
  120. package/dist/templates/binary/gitignore +2 -0
  121. package/dist/templates/binary/ui/app.css +4 -0
  122. package/dist/templates/binary/ui/app.js +17 -0
  123. package/dist/templates/native-go/README.md +128 -139
  124. package/dist/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +1 -1
  125. package/dist/templates/native-go/backend/cmd/app/main.go +33 -26
  126. package/dist/templates/native-go/backend/internal/api/cgi_framing_test.go +32 -0
  127. package/dist/templates/native-go/backend/internal/api/cookie_review_test.go +28 -0
  128. package/dist/templates/native-go/backend/internal/api/deadline_test.go +114 -0
  129. package/dist/templates/native-go/backend/internal/api/dsm-session.go +54 -0
  130. package/dist/templates/native-go/backend/internal/api/dsm-session_test.go +51 -0
  131. package/dist/templates/native-go/backend/internal/api/errors.go +14 -0
  132. package/dist/templates/native-go/backend/internal/api/permissions.go +161 -0
  133. package/dist/templates/native-go/backend/internal/api/permissions.json +5 -0
  134. package/dist/templates/native-go/backend/internal/api/permissions_test.go +113 -0
  135. package/dist/templates/native-go/backend/internal/api/policy_fixture_test.go +8 -0
  136. package/dist/templates/native-go/backend/internal/api/registry.go +48 -32
  137. package/dist/templates/native-go/backend/internal/api/registry_test.go +16 -1
  138. package/dist/templates/native-go/backend/internal/api/resource_limits_test.go +87 -0
  139. package/dist/templates/native-go/backend/internal/api/sdk-permissions.json +46 -0
  140. package/dist/templates/native-go/backend/internal/api/sdk_policy_test.go +31 -0
  141. package/dist/templates/native-go/backend/internal/api/server.go +135 -8
  142. package/dist/templates/native-go/backend/internal/api/testdata/permissions-cases.json +172 -0
  143. package/dist/templates/native-go/backend/internal/app/background.go +23 -44
  144. package/dist/templates/native-go/backend/internal/app/background_owner.go +0 -21
  145. package/dist/templates/native-go/backend/internal/app/background_owner_test.go +40 -22
  146. package/dist/templates/native-go/backend/internal/app/background_schedule.go +0 -5
  147. package/dist/templates/native-go/backend/internal/app/background_schedule_test.go +1 -1
  148. package/dist/templates/native-go/backend/internal/app/background_test.go +15 -41
  149. package/dist/templates/native-go/backend/internal/app/delegate_none.go +5 -0
  150. package/dist/templates/native-go/backend/internal/app/identity.go +20 -0
  151. package/dist/templates/native-go/backend/internal/app/identity_test.go +15 -0
  152. package/dist/templates/native-go/backend/internal/app/routes.go +12 -36
  153. package/dist/templates/native-go/backend/internal/app/routes_test.go +16 -40
  154. package/dist/templates/native-go/backend/internal/app/session_files.go +4 -10
  155. package/dist/templates/native-go/backend/internal/app/session_files_test.go +8 -20
  156. package/dist/templates/native-go/backend/internal/app/shared_folder_test.go +4 -4
  157. package/dist/templates/native-go/backend/internal/background/lock_test.go +131 -0
  158. package/dist/templates/native-go/backend/internal/background/owner_test.go +12 -20
  159. package/dist/templates/native-go/backend/internal/background/runner_test.go +1 -1
  160. package/dist/templates/native-go/backend/internal/background/schedule.go +53 -17
  161. package/dist/templates/native-go/backend/internal/background/schedule_test.go +42 -9
  162. package/dist/templates/native-go/backend/internal/background/store.go +115 -99
  163. package/dist/templates/native-go/backend/internal/background/store_test.go +10 -52
  164. package/dist/templates/native-go/backend/internal/dsm/admin.go +70 -0
  165. package/dist/templates/native-go/backend/internal/dsm/admin_linux.go +80 -0
  166. package/dist/templates/native-go/backend/internal/dsm/admin_linux_test.go +49 -0
  167. package/dist/templates/native-go/backend/internal/dsm/admin_other.go +12 -0
  168. package/dist/templates/native-go/backend/internal/dsm/admin_test.go +67 -0
  169. package/dist/templates/native-go/backend/internal/dsm/auth.go +24 -48
  170. package/dist/templates/native-go/backend/internal/dsm/auth_test.go +43 -23
  171. package/dist/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
  172. package/dist/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
  173. package/dist/templates/native-go/backend/internal/dsm/native/admin_check.c +28 -0
  174. package/dist/templates/native-go/backend/internal/dsm/native/build.sh +9 -0
  175. package/dist/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +400 -0
  176. package/dist/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +501 -0
  177. package/dist/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +5 -0
  178. package/dist/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +21 -0
  179. package/dist/templates/native-go/backend/internal/dsm/native/provenance.json +12 -0
  180. package/dist/templates/native-go/backend/internal/filestation/client.go +68 -18
  181. package/dist/templates/native-go/backend/internal/filestation/client_test.go +7 -7
  182. package/dist/templates/native-go/backend/internal/filestation/doc.go +1 -1
  183. package/dist/templates/native-go/backend/internal/filestation/http.go +70 -0
  184. package/dist/templates/native-go/backend/internal/filestation/http_test.go +188 -0
  185. package/dist/templates/native-go/backend/internal/filestation/operations_test.go +206 -0
  186. package/dist/templates/native-go/backend/internal/filestation/read_file_test.go +2 -3
  187. package/dist/templates/native-go/backend/internal/filestation/service.go +117 -117
  188. package/dist/templates/native-go/backend/internal/filestation/service_test.go +30 -50
  189. package/dist/templates/native-go/backend/internal/filestation/upload_stream.go +76 -0
  190. package/dist/templates/native-go/backend/internal/filestation/upload_stream_test.go +77 -0
  191. package/dist/templates/native-go/backend/internal/filestation/write.go +0 -40
  192. package/dist/templates/native-go/backend/internal/filestation/write_test.go +6 -5
  193. package/dist/templates/native-go/backend/internal/identity/README.md +55 -0
  194. package/dist/templates/native-go/backend/internal/identity/dsm.go +96 -0
  195. package/dist/templates/native-go/backend/internal/identity/http.go +291 -0
  196. package/dist/templates/native-go/backend/internal/identity/identity_test.go +483 -0
  197. package/dist/templates/native-go/backend/internal/identity/service.go +159 -0
  198. package/dist/templates/native-go/backend/internal/identity/store.go +109 -0
  199. package/dist/templates/native-go/backend/internal/jsonlimits/limits.go +48 -0
  200. package/dist/templates/native-go/backend/internal/jsonlimits/limits_test.go +52 -0
  201. package/dist/templates/native-go/dsm-package.yaml +8 -17
  202. package/dist/templates/native-go-delegate/DELEGATE.md +142 -0
  203. package/dist/templates/native-go-delegate/backend/cmd/background-worker/main.go +41 -0
  204. package/dist/templates/native-go-delegate/backend/internal/app/delegate.go +15 -0
  205. package/dist/templates/native-go-delegate/backend/internal/app/delegate_on.go +5 -0
  206. package/dist/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +17 -0
  207. package/dist/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +174 -0
  208. package/dist/templates/native-go-delegate/backend/internal/background/delegated.go +277 -0
  209. package/dist/templates/native-go-delegate/backend/internal/background/delegated_test.go +34 -0
  210. package/dist/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +15 -0
  211. package/dist/templates/native-go-delegate/backend/internal/delegate/client.go +143 -0
  212. package/dist/templates/native-go-delegate/backend/internal/delegate/client_test.go +214 -0
  213. package/dist/templates/native-go-delegate/backend/internal/delegate/files.go +132 -0
  214. package/dist/templates/native-go-delegate/backend/internal/delegate/retry.go +106 -0
  215. package/dist/templates/native-go-delegate/backend/internal/delegate/retry_test.go +143 -0
  216. package/dist/templates/native-go-delegate/backend/internal/delegate/service.go +323 -0
  217. package/dist/templates/native-go-delegate/backend/internal/delegate/service_test.go +318 -0
  218. package/dist/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +101 -0
  219. package/dist/templates/native-go-delegate/backend/internal/delegate/worker.go +225 -0
  220. package/dist/templates/native-go-delegate/backend/internal/filestation/files.go +73 -0
  221. package/dist/templates/native-go-delegate/backend/internal/filestation/files_test.go +59 -0
  222. package/dist/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +10 -0
  223. package/dist/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +70 -0
  224. package/dist/templates/native-go-delegate/frontend/src/delegate/copy.ts +9 -0
  225. package/dist/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +11 -0
  226. package/dist/templates/native-go-delegate/frontend/test/delegate.test.ts +130 -0
  227. package/dist/templates/native-go-delegate/test-frontend.sh +12 -0
  228. package/dist/templates/native-go-delegate/test.sh +17 -0
  229. package/dist/templates/native-go-jobs/BACKGROUND.md +108 -0
  230. package/dist/templates/native-go-jobs/backend/internal/app/background_routes_test.go +90 -0
  231. package/dist/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +170 -0
  232. package/dist/templates/native-go-jobs/frontend/src/background/i18n/de.json +75 -0
  233. package/dist/templates/native-go-jobs/frontend/src/background/i18n/en.json +75 -0
  234. package/dist/templates/native-go-jobs/frontend/src/background/i18n/es.json +75 -0
  235. package/dist/templates/native-go-jobs/frontend/src/background/i18n/fr.json +75 -0
  236. package/dist/templates/native-go-jobs/frontend/src/background/i18n/it.json +75 -0
  237. package/dist/templates/native-go-jobs/frontend/src/background/i18n/ja.json +75 -0
  238. package/dist/templates/native-go-jobs/frontend/src/background/i18n/ko.json +75 -0
  239. package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +75 -0
  240. package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +75 -0
  241. package/dist/templates/native-go-jobs/frontend/src/background/picker-provider.ts +12 -0
  242. package/dist/templates/native-go-jobs/frontend/src/background/request-key.ts +5 -0
  243. package/dist/templates/native-go-jobs/frontend/test/background.test.ts +208 -0
  244. package/dist/templates/native-go-root-ops/backend/internal/app/executor.go +112 -0
  245. package/dist/templates/native-go-root-ops/backend/internal/app/executor_test.go +53 -0
  246. package/dist/templates/native-go-root-ops/root/whoami.sh +3 -0
  247. package/dist/templates/native-go-vue/README.md +36 -248
  248. package/dist/templates/native-go-vue/frontend/DESIGN.md +20 -49
  249. package/dist/templates/native-go-vue/frontend/package-lock.json +278 -159
  250. package/dist/templates/native-go-vue/frontend/package.json +2 -2
  251. package/dist/templates/native-go-vue/frontend/src/App.vue +55 -151
  252. package/dist/templates/native-go-vue/frontend/src/CapabilityPanels.vue +6 -0
  253. package/dist/templates/native-go-vue/frontend/src/context.ts +2 -14
  254. package/dist/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +25 -0
  255. package/dist/templates/native-go-vue/frontend/src/delegate/copy.ts +4 -0
  256. package/dist/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +18 -0
  257. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/en.json +36 -0
  258. package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +36 -0
  259. package/dist/templates/native-go-vue/frontend/src/files/FileBrowser.vue +131 -0
  260. package/dist/templates/native-go-vue/frontend/src/files/FilesPage.vue +35 -0
  261. package/dist/templates/native-go-vue/frontend/src/files/files.test.ts +93 -0
  262. package/dist/templates/native-go-vue/frontend/src/files/provider.test.ts +48 -0
  263. package/dist/templates/native-go-vue/frontend/src/files/transfers.test.ts +27 -0
  264. package/dist/templates/native-go-vue/frontend/src/files/transfers.ts +25 -0
  265. package/dist/templates/native-go-vue/frontend/src/identity/DESIGN.md +46 -0
  266. package/dist/templates/native-go-vue/frontend/src/identity/LoginPage.vue +76 -0
  267. package/dist/templates/native-go-vue/frontend/src/identity/login.test.ts +32 -0
  268. package/dist/templates/native-go-vue/frontend/src/identity/session.test.ts +29 -0
  269. package/dist/templates/native-go-vue/frontend/src/identity/session.ts +73 -0
  270. package/dist/templates/native-go-vue/frontend/src/main.ts +7 -4
  271. package/dist/templates/native-go-vue/frontend/src/nas/NasPicker.vue +23 -0
  272. package/dist/templates/native-go-vue/frontend/src/nas/contract.ts +12 -0
  273. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +41 -0
  274. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +41 -0
  275. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +41 -0
  276. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +41 -0
  277. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +41 -0
  278. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +41 -0
  279. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +41 -0
  280. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +41 -0
  281. package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +41 -0
  282. package/dist/templates/native-go-vue/frontend/src/nas/i18n.ts +2 -38
  283. package/dist/templates/native-go-vue/frontend/src/nas/locale.ts +24 -0
  284. package/dist/templates/native-go-vue/frontend/src/nas/provider.ts +46 -55
  285. package/dist/templates/native-go-vue/frontend/src/nas/use-request.ts +13 -22
  286. package/dist/templates/native-go-vue/frontend/src/shell/AppShell.vue +3 -3
  287. package/dist/templates/native-go-vue/frontend/src/shell/i18n/de.json +1 -7
  288. package/dist/templates/native-go-vue/frontend/src/shell/i18n/en.json +1 -7
  289. package/dist/templates/native-go-vue/frontend/src/shell/i18n/es.json +1 -7
  290. package/dist/templates/native-go-vue/frontend/src/shell/i18n/fr.json +1 -7
  291. package/dist/templates/native-go-vue/frontend/src/shell/i18n/it.json +1 -7
  292. package/dist/templates/native-go-vue/frontend/src/shell/i18n/ja.json +1 -7
  293. package/dist/templates/native-go-vue/frontend/src/shell/i18n/ko.json +1 -7
  294. package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +1 -7
  295. package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +1 -7
  296. package/dist/templates/native-go-vue/frontend/src/shell/pages.ts +3 -22
  297. package/dist/templates/native-go-vue/frontend/test/apps.test.ts +33 -201
  298. package/dist/templates/native-go-vue/frontend/test/shell-ui.test.ts +15 -109
  299. package/dist/templates/native-go-vue/frontend/test/shell.test.ts +4 -19
  300. package/dist/templates/native-go-vue/frontend/vite.config.ts +2 -2
  301. package/dist/types.d.ts +1 -1
  302. package/dist/validate.js +27 -36
  303. package/package.json +2 -5
  304. package/skills/SKILL.md +21 -3
  305. package/skills/reference/create.md +15 -6
  306. package/skills/reference/deploy.md +5 -3
  307. package/skills/reference/diagnose.md +1 -1
  308. package/skills/reference/files.md +8 -6
  309. package/skills/reference/identity.md +9 -3
  310. package/skills/reference/ui-json.md +78 -0
  311. package/skills/reference/ui-vue.md +71 -0
  312. package/skills/reference/wrap.md +3 -4
  313. package/templates/_executor/README.md +204 -0
  314. package/templates/_executor/apppriv_review_test.go +28 -0
  315. package/templates/_executor/auth_presence_review_test.go +38 -0
  316. package/templates/_executor/cmd/lifecycle/main.go +42 -0
  317. package/templates/_executor/cookie_review_test.go +27 -0
  318. package/templates/_executor/digest_review_test.go +120 -0
  319. package/templates/_executor/directories.go +40 -0
  320. package/templates/_executor/dsm.go +319 -0
  321. package/templates/_executor/dsm_test.go +196 -0
  322. package/templates/_executor/executor.go +524 -0
  323. package/templates/_executor/executor_test.go +284 -0
  324. package/templates/_executor/go.mod +3 -0
  325. package/templates/_executor/identity.go +48 -0
  326. package/templates/_executor/internal/lifecycle/lifecycle.go +90 -0
  327. package/templates/_executor/internal/lifecycle/lifecycle_test.go +174 -0
  328. package/templates/_executor/internal/taskscript/boot.sh +31 -0
  329. package/templates/_executor/internal/taskscript/cmd/main.go +19 -0
  330. package/templates/_executor/internal/taskscript/control.sh +26 -0
  331. package/templates/_executor/internal/taskscript/tasks.go +42 -0
  332. package/templates/_executor/json_review_test.go +40 -0
  333. package/templates/_executor/lifecycle_test.go +86 -0
  334. package/templates/_executor/main.go +518 -0
  335. package/templates/_executor/managed.go +117 -0
  336. package/templates/_executor/managed_test.go +137 -0
  337. package/templates/_executor/path_test.go +17 -0
  338. package/templates/_executor/platform_linux.go +336 -0
  339. package/templates/_executor/platform_linux_test.go +247 -0
  340. package/templates/_executor/platform_other.go +42 -0
  341. package/templates/_executor/process.go +139 -0
  342. package/templates/_executor/socket_linux_test.go +46 -0
  343. package/templates/_executor/store.go +90 -0
  344. package/templates/_executor/task_race_review_test.go +47 -0
  345. package/templates/_executor/tasks.go +283 -0
  346. package/templates/_executor/tasks_review_test.go +43 -0
  347. package/templates/_executor/tasks_test.go +166 -0
  348. package/templates/_executor/testdata/evidence/cleanup.json +24 -0
  349. package/templates/_executor/testdata/evidence/final-smoke.jsonl +9 -0
  350. package/templates/_executor/testdata/evidence/kernel-acl.json +6 -0
  351. package/templates/_executor/testdata/evidence/linux-tests.log +123 -0
  352. package/templates/_executor/testdata/evidence/live.jsonl +23 -0
  353. package/templates/_executor/testdata/evidence/storage.json +90 -0
  354. package/templates/_executor/testdata/evidence/validation.json +55 -0
  355. package/templates/_executor/testdata/live_probe.py +98 -0
  356. package/templates/_executor/upgrade_watch_test.go +236 -0
  357. package/templates/_executor/watch.go +156 -0
  358. package/templates/_executor/watch_test.go +270 -0
  359. package/templates/_executor/write_review_linux_test.go +95 -0
  360. package/templates/_shared/AGENTS.md +17 -0
  361. package/templates/_shared/CLAUDE.md +1 -0
  362. package/templates/binary/LICENSES/GO-LICENSE +27 -0
  363. package/templates/binary/LICENSES/GO-PATENTS +22 -0
  364. package/templates/binary/dsm-package.yaml +19 -0
  365. package/templates/binary/example/main.go +16 -0
  366. package/templates/binary/gitignore +2 -0
  367. package/templates/binary/ui/app.css +4 -0
  368. package/templates/binary/ui/app.js +17 -0
  369. package/templates/native-go/README.md +128 -139
  370. package/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +1 -1
  371. package/templates/native-go/backend/cmd/app/main.go +33 -26
  372. package/templates/native-go/backend/internal/api/cgi_framing_test.go +32 -0
  373. package/templates/native-go/backend/internal/api/cookie_review_test.go +28 -0
  374. package/templates/native-go/backend/internal/api/deadline_test.go +114 -0
  375. package/templates/native-go/backend/internal/api/dsm-session.go +54 -0
  376. package/templates/native-go/backend/internal/api/dsm-session_test.go +51 -0
  377. package/templates/native-go/backend/internal/api/errors.go +14 -0
  378. package/templates/native-go/backend/internal/api/permissions.go +161 -0
  379. package/templates/native-go/backend/internal/api/permissions.json +5 -0
  380. package/templates/native-go/backend/internal/api/permissions_test.go +113 -0
  381. package/templates/native-go/backend/internal/api/policy_fixture_test.go +8 -0
  382. package/templates/native-go/backend/internal/api/registry.go +48 -32
  383. package/templates/native-go/backend/internal/api/registry_test.go +16 -1
  384. package/templates/native-go/backend/internal/api/resource_limits_test.go +87 -0
  385. package/templates/native-go/backend/internal/api/sdk-permissions.json +46 -0
  386. package/templates/native-go/backend/internal/api/sdk_policy_test.go +31 -0
  387. package/templates/native-go/backend/internal/api/server.go +135 -8
  388. package/templates/native-go/backend/internal/api/testdata/permissions-cases.json +172 -0
  389. package/templates/native-go/backend/internal/app/background.go +23 -44
  390. package/templates/native-go/backend/internal/app/background_owner.go +0 -21
  391. package/templates/native-go/backend/internal/app/background_owner_test.go +40 -22
  392. package/templates/native-go/backend/internal/app/background_schedule.go +0 -5
  393. package/templates/native-go/backend/internal/app/background_schedule_test.go +1 -1
  394. package/templates/native-go/backend/internal/app/background_test.go +15 -41
  395. package/templates/native-go/backend/internal/app/delegate_none.go +5 -0
  396. package/templates/native-go/backend/internal/app/identity.go +20 -0
  397. package/templates/native-go/backend/internal/app/identity_test.go +15 -0
  398. package/templates/native-go/backend/internal/app/routes.go +12 -36
  399. package/templates/native-go/backend/internal/app/routes_test.go +16 -40
  400. package/templates/native-go/backend/internal/app/session_files.go +4 -10
  401. package/templates/native-go/backend/internal/app/session_files_test.go +8 -20
  402. package/templates/native-go/backend/internal/app/shared_folder_test.go +4 -4
  403. package/templates/native-go/backend/internal/background/lock_test.go +131 -0
  404. package/templates/native-go/backend/internal/background/owner_test.go +12 -20
  405. package/templates/native-go/backend/internal/background/runner_test.go +1 -1
  406. package/templates/native-go/backend/internal/background/schedule.go +53 -17
  407. package/templates/native-go/backend/internal/background/schedule_test.go +42 -9
  408. package/templates/native-go/backend/internal/background/store.go +115 -99
  409. package/templates/native-go/backend/internal/background/store_test.go +10 -52
  410. package/templates/native-go/backend/internal/dsm/admin.go +70 -0
  411. package/templates/native-go/backend/internal/dsm/admin_linux.go +80 -0
  412. package/templates/native-go/backend/internal/dsm/admin_linux_test.go +49 -0
  413. package/templates/native-go/backend/internal/dsm/admin_other.go +12 -0
  414. package/templates/native-go/backend/internal/dsm/admin_test.go +67 -0
  415. package/templates/native-go/backend/internal/dsm/auth.go +24 -48
  416. package/templates/native-go/backend/internal/dsm/auth_test.go +43 -23
  417. package/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
  418. package/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
  419. package/templates/native-go/backend/internal/dsm/native/admin_check.c +28 -0
  420. package/templates/native-go/backend/internal/dsm/native/build.sh +9 -0
  421. package/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +400 -0
  422. package/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +501 -0
  423. package/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +5 -0
  424. package/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +21 -0
  425. package/templates/native-go/backend/internal/dsm/native/provenance.json +12 -0
  426. package/templates/native-go/backend/internal/filestation/client.go +68 -18
  427. package/templates/native-go/backend/internal/filestation/client_test.go +7 -7
  428. package/templates/native-go/backend/internal/filestation/doc.go +1 -1
  429. package/templates/native-go/backend/internal/filestation/http.go +70 -0
  430. package/templates/native-go/backend/internal/filestation/http_test.go +188 -0
  431. package/templates/native-go/backend/internal/filestation/operations_test.go +206 -0
  432. package/templates/native-go/backend/internal/filestation/read_file_test.go +2 -3
  433. package/templates/native-go/backend/internal/filestation/service.go +117 -117
  434. package/templates/native-go/backend/internal/filestation/service_test.go +30 -50
  435. package/templates/native-go/backend/internal/filestation/upload_stream.go +76 -0
  436. package/templates/native-go/backend/internal/filestation/upload_stream_test.go +77 -0
  437. package/templates/native-go/backend/internal/filestation/write.go +0 -40
  438. package/templates/native-go/backend/internal/filestation/write_test.go +6 -5
  439. package/templates/native-go/backend/internal/identity/README.md +55 -0
  440. package/templates/native-go/backend/internal/identity/dsm.go +96 -0
  441. package/templates/native-go/backend/internal/identity/http.go +291 -0
  442. package/templates/native-go/backend/internal/identity/identity_test.go +483 -0
  443. package/templates/native-go/backend/internal/identity/service.go +159 -0
  444. package/templates/native-go/backend/internal/identity/store.go +109 -0
  445. package/templates/native-go/backend/internal/jsonlimits/limits.go +48 -0
  446. package/templates/native-go/backend/internal/jsonlimits/limits_test.go +52 -0
  447. package/templates/native-go/dsm-package.yaml +8 -17
  448. package/templates/native-go-delegate/DELEGATE.md +142 -0
  449. package/templates/native-go-delegate/backend/cmd/background-worker/main.go +41 -0
  450. package/templates/native-go-delegate/backend/internal/app/delegate.go +15 -0
  451. package/templates/native-go-delegate/backend/internal/app/delegate_on.go +5 -0
  452. package/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +17 -0
  453. package/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +174 -0
  454. package/templates/native-go-delegate/backend/internal/background/delegated.go +277 -0
  455. package/templates/native-go-delegate/backend/internal/background/delegated_test.go +34 -0
  456. package/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +15 -0
  457. package/templates/native-go-delegate/backend/internal/delegate/client.go +143 -0
  458. package/templates/native-go-delegate/backend/internal/delegate/client_test.go +214 -0
  459. package/templates/native-go-delegate/backend/internal/delegate/files.go +132 -0
  460. package/templates/native-go-delegate/backend/internal/delegate/retry.go +106 -0
  461. package/templates/native-go-delegate/backend/internal/delegate/retry_test.go +143 -0
  462. package/templates/native-go-delegate/backend/internal/delegate/service.go +323 -0
  463. package/templates/native-go-delegate/backend/internal/delegate/service_test.go +318 -0
  464. package/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +101 -0
  465. package/templates/native-go-delegate/backend/internal/delegate/worker.go +225 -0
  466. package/templates/native-go-delegate/backend/internal/filestation/files.go +73 -0
  467. package/templates/native-go-delegate/backend/internal/filestation/files_test.go +59 -0
  468. package/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +10 -0
  469. package/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +70 -0
  470. package/templates/native-go-delegate/frontend/src/delegate/copy.ts +9 -0
  471. package/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +11 -0
  472. package/templates/native-go-delegate/frontend/test/delegate.test.ts +130 -0
  473. package/templates/native-go-delegate/test-frontend.sh +12 -0
  474. package/templates/native-go-delegate/test.sh +17 -0
  475. package/templates/native-go-jobs/BACKGROUND.md +108 -0
  476. package/templates/native-go-jobs/backend/internal/app/background_routes_test.go +90 -0
  477. package/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +170 -0
  478. package/templates/native-go-jobs/frontend/src/background/i18n/de.json +75 -0
  479. package/templates/native-go-jobs/frontend/src/background/i18n/en.json +75 -0
  480. package/templates/native-go-jobs/frontend/src/background/i18n/es.json +75 -0
  481. package/templates/native-go-jobs/frontend/src/background/i18n/fr.json +75 -0
  482. package/templates/native-go-jobs/frontend/src/background/i18n/it.json +75 -0
  483. package/templates/native-go-jobs/frontend/src/background/i18n/ja.json +75 -0
  484. package/templates/native-go-jobs/frontend/src/background/i18n/ko.json +75 -0
  485. package/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +75 -0
  486. package/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +75 -0
  487. package/templates/native-go-jobs/frontend/src/background/picker-provider.ts +12 -0
  488. package/templates/native-go-jobs/frontend/src/background/request-key.ts +5 -0
  489. package/templates/native-go-jobs/frontend/test/background.test.ts +208 -0
  490. package/templates/native-go-root-ops/backend/internal/app/executor.go +112 -0
  491. package/templates/native-go-root-ops/backend/internal/app/executor_test.go +53 -0
  492. package/templates/native-go-root-ops/root/whoami.sh +3 -0
  493. package/templates/native-go-vue/README.md +36 -248
  494. package/templates/native-go-vue/frontend/DESIGN.md +20 -49
  495. package/templates/native-go-vue/frontend/package-lock.json +278 -159
  496. package/templates/native-go-vue/frontend/package.json +2 -2
  497. package/templates/native-go-vue/frontend/src/App.vue +55 -151
  498. package/templates/native-go-vue/frontend/src/CapabilityPanels.vue +6 -0
  499. package/templates/native-go-vue/frontend/src/context.ts +2 -14
  500. package/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +25 -0
  501. package/templates/native-go-vue/frontend/src/delegate/copy.ts +4 -0
  502. package/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +18 -0
  503. package/templates/native-go-vue/frontend/src/delegate/i18n/en.json +36 -0
  504. package/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +36 -0
  505. package/templates/native-go-vue/frontend/src/files/FileBrowser.vue +131 -0
  506. package/templates/native-go-vue/frontend/src/files/FilesPage.vue +35 -0
  507. package/templates/native-go-vue/frontend/src/files/files.test.ts +93 -0
  508. package/templates/native-go-vue/frontend/src/files/provider.test.ts +48 -0
  509. package/templates/native-go-vue/frontend/src/files/transfers.test.ts +27 -0
  510. package/templates/native-go-vue/frontend/src/files/transfers.ts +25 -0
  511. package/templates/native-go-vue/frontend/src/identity/DESIGN.md +46 -0
  512. package/templates/native-go-vue/frontend/src/identity/LoginPage.vue +76 -0
  513. package/templates/native-go-vue/frontend/src/identity/login.test.ts +32 -0
  514. package/templates/native-go-vue/frontend/src/identity/session.test.ts +29 -0
  515. package/templates/native-go-vue/frontend/src/identity/session.ts +73 -0
  516. package/templates/native-go-vue/frontend/src/main.ts +7 -4
  517. package/templates/native-go-vue/frontend/src/nas/NasPicker.vue +23 -0
  518. package/templates/native-go-vue/frontend/src/nas/contract.ts +12 -0
  519. package/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +41 -0
  520. package/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +41 -0
  521. package/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +41 -0
  522. package/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +41 -0
  523. package/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +41 -0
  524. package/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +41 -0
  525. package/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +41 -0
  526. package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +41 -0
  527. package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +41 -0
  528. package/templates/native-go-vue/frontend/src/nas/i18n.ts +2 -38
  529. package/templates/native-go-vue/frontend/src/nas/locale.ts +24 -0
  530. package/templates/native-go-vue/frontend/src/nas/provider.ts +46 -55
  531. package/templates/native-go-vue/frontend/src/nas/use-request.ts +13 -22
  532. package/templates/native-go-vue/frontend/src/shell/AppShell.vue +3 -3
  533. package/templates/native-go-vue/frontend/src/shell/i18n/de.json +1 -7
  534. package/templates/native-go-vue/frontend/src/shell/i18n/en.json +1 -7
  535. package/templates/native-go-vue/frontend/src/shell/i18n/es.json +1 -7
  536. package/templates/native-go-vue/frontend/src/shell/i18n/fr.json +1 -7
  537. package/templates/native-go-vue/frontend/src/shell/i18n/it.json +1 -7
  538. package/templates/native-go-vue/frontend/src/shell/i18n/ja.json +1 -7
  539. package/templates/native-go-vue/frontend/src/shell/i18n/ko.json +1 -7
  540. package/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +1 -7
  541. package/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +1 -7
  542. package/templates/native-go-vue/frontend/src/shell/pages.ts +3 -22
  543. package/templates/native-go-vue/frontend/test/apps.test.ts +33 -201
  544. package/templates/native-go-vue/frontend/test/shell-ui.test.ts +15 -109
  545. package/templates/native-go-vue/frontend/test/shell.test.ts +4 -19
  546. package/templates/native-go-vue/frontend/vite.config.ts +2 -2
  547. package/dist/authorization-sdk.d.ts +0 -5
  548. package/dist/authorization-sdk.js +0 -5
  549. package/dist/build-spk/native-payload.d.ts +0 -37
  550. package/dist/build-spk/native-payload.js +0 -679
  551. package/dist/native/load.d.ts +0 -8
  552. package/dist/native/load.js +0 -11
  553. package/dist/native/types.d.ts +0 -28
  554. package/dist/native/types.js +0 -3
  555. package/dist/native/validate.d.ts +0 -6
  556. package/dist/native/validate.js +0 -143
  557. package/dist/standalone/authorization-window.d.ts +0 -2
  558. package/dist/standalone/authorization-window.js +0 -28
  559. package/dist/standalone/authorization.d.ts +0 -48
  560. package/dist/standalone/authorization.js +0 -116
  561. package/dist/standalone/helper-inventory.d.ts +0 -31
  562. package/dist/standalone/helper-inventory.js +0 -11
  563. package/dist/standalone/helper.d.ts +0 -22
  564. package/dist/standalone/helper.js +0 -123
  565. package/dist/standalone/inspect-helper.d.ts +0 -6
  566. package/dist/standalone/inspect-helper.js +0 -103
  567. package/dist/standalone/job-diagnostics.d.ts +0 -1
  568. package/dist/standalone/job-diagnostics.js +0 -49
  569. package/dist/standalone/lifecycle-helper.d.ts +0 -2
  570. package/dist/standalone/lifecycle-helper.js +0 -12
  571. package/dist/standalone/native-layout.d.ts +0 -74
  572. package/dist/standalone/native-layout.js +0 -318
  573. package/dist/standalone/root-messages.d.ts +0 -7
  574. package/dist/standalone/root-messages.js +0 -259
  575. package/dist/standalone/worker-contract-json.d.ts +0 -8
  576. package/dist/standalone/worker-contract-json.js +0 -141
  577. package/dist/standalone/worker-contract.d.ts +0 -189
  578. package/dist/standalone/worker-contract.js +0 -175
  579. package/dist/standalone/worker-registry.d.ts +0 -40
  580. package/dist/standalone/worker-registry.js +0 -167
  581. package/dist/templates/_authorization/main.go +0 -104
  582. package/dist/templates/_authorization/main_test.go +0 -35
  583. package/dist/templates/_shared/notice-overrides/index.json +0 -14
  584. package/dist/templates/_shared/notice-overrides/utils-0.4.2-LICENSE +0 -21
  585. package/dist/templates/_shared/notice-overrides/utils-0.5.0-LICENSE +0 -21
  586. package/dist/templates/binary/native.yaml +0 -16
  587. package/dist/templates/binary/synology-app.yaml +0 -7
  588. package/dist/templates/compose-import/compose.yaml +0 -10
  589. package/dist/templates/compose-import/synology-app.yaml +0 -15
  590. package/dist/templates/native-go/backend/cmd/app/sdk_main.go +0 -62
  591. package/dist/templates/native-go/backend/cmd/dsm-readonly-probe/main_linux.go +0 -46
  592. package/dist/templates/native-go/backend/cmd/helper/main.go +0 -64
  593. package/dist/templates/native-go/backend/cmd/helper/sdk_registry.go +0 -19
  594. package/dist/templates/native-go/backend/internal/api/binary.go +0 -154
  595. package/dist/templates/native-go/backend/internal/api/binary_test.go +0 -165
  596. package/dist/templates/native-go/backend/internal/app/authorization_none.go +0 -5
  597. package/dist/templates/native-go/backend/internal/app/integration_state.go +0 -16
  598. package/dist/templates/native-go/backend/internal/app/nas_cgi_artifact_test.go +0 -129
  599. package/dist/templates/native-go/backend/internal/app/nas_refusal_test.go +0 -46
  600. package/dist/templates/native-go/backend/internal/app/sdk_jobs.go +0 -70
  601. package/dist/templates/native-go/backend/internal/app/sdk_jobs_test.go +0 -116
  602. package/dist/templates/native-go/backend/internal/app/sdk_routes.go +0 -177
  603. package/dist/templates/native-go/backend/internal/dsmprobe/collector_linux.go +0 -335
  604. package/dist/templates/native-go/backend/internal/dsmprobe/collector_linux_test.go +0 -41
  605. package/dist/templates/native-go/backend/internal/dsmprobe/protocol.go +0 -179
  606. package/dist/templates/native-go/backend/internal/dsmprobe/protocol_test.go +0 -29
  607. package/dist/templates/native-go/backend/internal/filestation/repository.go +0 -207
  608. package/dist/templates/native-go/backend/internal/filestation/repository_test.go +0 -104
  609. package/dist/templates/native-go/backend/internal/filestation/sdk_session.go +0 -241
  610. package/dist/templates/native-go/backend/internal/filestation/sdk_session_test.go +0 -183
  611. package/dist/templates/native-go/backend/internal/filestation/session_semantics_test.go +0 -383
  612. package/dist/templates/native-go/backend/internal/helper/background_proof.go +0 -163
  613. package/dist/templates/native-go/backend/internal/helper/background_proof_contract.go +0 -46
  614. package/dist/templates/native-go/backend/internal/helper/background_proof_test.go +0 -161
  615. package/dist/templates/native-go/backend/internal/helper/cohort.go +0 -393
  616. package/dist/templates/native-go/backend/internal/helper/cohort_publication.go +0 -18
  617. package/dist/templates/native-go/backend/internal/helper/cohort_publication_test.go +0 -105
  618. package/dist/templates/native-go/backend/internal/helper/cohort_test.go +0 -372
  619. package/dist/templates/native-go/backend/internal/helper/control.go +0 -424
  620. package/dist/templates/native-go/backend/internal/helper/control_test.go +0 -250
  621. package/dist/templates/native-go/backend/internal/helper/data_contract.go +0 -245
  622. package/dist/templates/native-go/backend/internal/helper/data_contract_test.go +0 -51
  623. package/dist/templates/native-go/backend/internal/helper/data_decode.go +0 -184
  624. package/dist/templates/native-go/backend/internal/helper/data_decode_pointer_test.go +0 -30
  625. package/dist/templates/native-go/backend/internal/helper/data_protocol.go +0 -419
  626. package/dist/templates/native-go/backend/internal/helper/data_protocol_test.go +0 -449
  627. package/dist/templates/native-go/backend/internal/helper/dsm_acl_linux.go +0 -139
  628. package/dist/templates/native-go/backend/internal/helper/dsm_acl_linux_test.go +0 -121
  629. package/dist/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux.go +0 -95
  630. package/dist/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux_test.go +0 -56
  631. package/dist/templates/native-go/backend/internal/helper/dsm_bridge_linux.go +0 -144
  632. package/dist/templates/native-go/backend/internal/helper/dsm_bridge_linux_test.go +0 -89
  633. package/dist/templates/native-go/backend/internal/helper/dsm_home_linux.go +0 -107
  634. package/dist/templates/native-go/backend/internal/helper/dsm_home_linux_test.go +0 -82
  635. package/dist/templates/native-go/backend/internal/helper/dsm_probe_transport_linux.go +0 -151
  636. package/dist/templates/native-go/backend/internal/helper/dsm_probe_transport_linux_test.go +0 -66
  637. package/dist/templates/native-go/backend/internal/helper/grant_authority.go +0 -519
  638. package/dist/templates/native-go/backend/internal/helper/grant_authority_contract.go +0 -88
  639. package/dist/templates/native-go/backend/internal/helper/grant_authority_test.go +0 -510
  640. package/dist/templates/native-go/backend/internal/helper/grant_cohort.go +0 -389
  641. package/dist/templates/native-go/backend/internal/helper/grant_cohort_test.go +0 -239
  642. package/dist/templates/native-go/backend/internal/helper/grant_delivery.go +0 -49
  643. package/dist/templates/native-go/backend/internal/helper/grant_delivery_methods.go +0 -273
  644. package/dist/templates/native-go/backend/internal/helper/grant_delivery_test.go +0 -322
  645. package/dist/templates/native-go/backend/internal/helper/grant_operation_contract.go +0 -47
  646. package/dist/templates/native-go/backend/internal/helper/grant_readonly_test.go +0 -180
  647. package/dist/templates/native-go/backend/internal/helper/grant_repository_linux.go +0 -416
  648. package/dist/templates/native-go/backend/internal/helper/grant_repository_linux_test.go +0 -469
  649. package/dist/templates/native-go/backend/internal/helper/grant_rpc.go +0 -147
  650. package/dist/templates/native-go/backend/internal/helper/grant_rpc_test.go +0 -51
  651. package/dist/templates/native-go/backend/internal/helper/grant_snapshot.go +0 -78
  652. package/dist/templates/native-go/backend/internal/helper/grant_supervisor_linux.go +0 -134
  653. package/dist/templates/native-go/backend/internal/helper/grant_supervisor_linux_test.go +0 -254
  654. package/dist/templates/native-go/backend/internal/helper/jobcontract/bindings.go +0 -48
  655. package/dist/templates/native-go/backend/internal/helper/jobcontract/contract_test.go +0 -436
  656. package/dist/templates/native-go/backend/internal/helper/jobcontract/decode.go +0 -185
  657. package/dist/templates/native-go/backend/internal/helper/jobcontract/digest.go +0 -55
  658. package/dist/templates/native-go/backend/internal/helper/jobcontract/registry.go +0 -85
  659. package/dist/templates/native-go/backend/internal/helper/jobcontract/registry_test.go +0 -73
  660. package/dist/templates/native-go/backend/internal/helper/jobcontract/result.go +0 -53
  661. package/dist/templates/native-go/backend/internal/helper/jobcontract/stub.go +0 -8
  662. package/dist/templates/native-go/backend/internal/helper/jobcontract/testdata/input-digests.json +0 -127
  663. package/dist/templates/native-go/backend/internal/helper/jobcontract/types.go +0 -234
  664. package/dist/templates/native-go/backend/internal/helper/jobcontract/types_test.go +0 -29
  665. package/dist/templates/native-go/backend/internal/helper/jobcontract/validate.go +0 -462
  666. package/dist/templates/native-go/backend/internal/helper/lease.go +0 -112
  667. package/dist/templates/native-go/backend/internal/helper/lease_linux.go +0 -44
  668. package/dist/templates/native-go/backend/internal/helper/lease_other.go +0 -8
  669. package/dist/templates/native-go/backend/internal/helper/legacy_authority_schema_linux_test.go +0 -34
  670. package/dist/templates/native-go/backend/internal/helper/legacy_authority_schema_test.go +0 -6
  671. package/dist/templates/native-go/backend/internal/helper/lifecycle.go +0 -234
  672. package/dist/templates/native-go/backend/internal/helper/lifecycle_test.go +0 -473
  673. package/dist/templates/native-go/backend/internal/helper/managed_pilot.go +0 -284
  674. package/dist/templates/native-go/backend/internal/helper/managed_pilot_repository_linux.go +0 -74
  675. package/dist/templates/native-go/backend/internal/helper/managed_pilot_repository_linux_test.go +0 -40
  676. package/dist/templates/native-go/backend/internal/helper/managed_pilot_test.go +0 -210
  677. package/dist/templates/native-go/backend/internal/helper/management.go +0 -86
  678. package/dist/templates/native-go/backend/internal/helper/nas_shipped_refusal_linux_test.go +0 -97
  679. package/dist/templates/native-go/backend/internal/helper/native_discovery.go +0 -79
  680. package/dist/templates/native-go/backend/internal/helper/native_identity.go +0 -89
  681. package/dist/templates/native-go/backend/internal/helper/native_provider.go +0 -159
  682. package/dist/templates/native-go/backend/internal/helper/native_provider_test.go +0 -421
  683. package/dist/templates/native-go/backend/internal/helper/observation.go +0 -244
  684. package/dist/templates/native-go/backend/internal/helper/observation_health_test.go +0 -127
  685. package/dist/templates/native-go/backend/internal/helper/observation_reload_budget_test.go +0 -117
  686. package/dist/templates/native-go/backend/internal/helper/observation_test.go +0 -196
  687. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic.go +0 -155
  688. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_linux.go +0 -76
  689. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_linux_test.go +0 -130
  690. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_test.go +0 -98
  691. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_writer.go +0 -40
  692. package/dist/templates/native-go/backend/internal/helper/operation_bootstrap_linux.go +0 -193
  693. package/dist/templates/native-go/backend/internal/helper/operation_credentials_linux.go +0 -56
  694. package/dist/templates/native-go/backend/internal/helper/operation_linux.go +0 -480
  695. package/dist/templates/native-go/backend/internal/helper/operation_linux_test.go +0 -528
  696. package/dist/templates/native-go/backend/internal/helper/peer_linux.go +0 -44
  697. package/dist/templates/native-go/backend/internal/helper/peer_other.go +0 -7
  698. package/dist/templates/native-go/backend/internal/helper/process_linux.go +0 -180
  699. package/dist/templates/native-go/backend/internal/helper/process_other.go +0 -5
  700. package/dist/templates/native-go/backend/internal/helper/publication_test.go +0 -178
  701. package/dist/templates/native-go/backend/internal/helper/purge.go +0 -115
  702. package/dist/templates/native-go/backend/internal/helper/purge_test.go +0 -59
  703. package/dist/templates/native-go/backend/internal/helper/query_deadline_linux_test.go +0 -115
  704. package/dist/templates/native-go/backend/internal/helper/query_pending_diagnostic_test.go +0 -254
  705. package/dist/templates/native-go/backend/internal/helper/read_stream_cohort_linux_test.go +0 -156
  706. package/dist/templates/native-go/backend/internal/helper/read_transfer.go +0 -40
  707. package/dist/templates/native-go/backend/internal/helper/read_transfer_linux.go +0 -109
  708. package/dist/templates/native-go/backend/internal/helper/read_transfer_linux_test.go +0 -118
  709. package/dist/templates/native-go/backend/internal/helper/read_transfer_test.go +0 -177
  710. package/dist/templates/native-go/backend/internal/helper/readonly.go +0 -105
  711. package/dist/templates/native-go/backend/internal/helper/readonly_admission.go +0 -85
  712. package/dist/templates/native-go/backend/internal/helper/readonly_cohort_linux_test.go +0 -253
  713. package/dist/templates/native-go/backend/internal/helper/readonly_linux_test.go +0 -378
  714. package/dist/templates/native-go/backend/internal/helper/readonly_mount_linux.go +0 -65
  715. package/dist/templates/native-go/backend/internal/helper/readonly_mount_proxy_linux.go +0 -113
  716. package/dist/templates/native-go/backend/internal/helper/readonly_operations_linux.go +0 -168
  717. package/dist/templates/native-go/backend/internal/helper/readonly_resolver_linux.go +0 -241
  718. package/dist/templates/native-go/backend/internal/helper/readonly_test.go +0 -40
  719. package/dist/templates/native-go/backend/internal/helper/relaxed_identity.go +0 -252
  720. package/dist/templates/native-go/backend/internal/helper/relaxed_identity_contract.go +0 -105
  721. package/dist/templates/native-go/backend/internal/helper/relaxed_identity_test.go +0 -406
  722. package/dist/templates/native-go/backend/internal/helper/relaxed_invalidation.go +0 -203
  723. package/dist/templates/native-go/backend/internal/helper/repair.go +0 -132
  724. package/dist/templates/native-go/backend/internal/helper/repair_test.go +0 -271
  725. package/dist/templates/native-go/backend/internal/helper/revoke.go +0 -109
  726. package/dist/templates/native-go/backend/internal/helper/revoke_test.go +0 -121
  727. package/dist/templates/native-go/backend/internal/helper/s1r_actor_acl_linux_test.go +0 -303
  728. package/dist/templates/native-go/backend/internal/helper/s1r_actor_fixture_linux_test.go +0 -184
  729. package/dist/templates/native-go/backend/internal/helper/s1r_actor_races_linux_test.go +0 -250
  730. package/dist/templates/native-go/backend/internal/helper/s1r_fixture_contract_linux_test.go +0 -18
  731. package/dist/templates/native-go/backend/internal/helper/sdk_assembly_linux.go +0 -51
  732. package/dist/templates/native-go/backend/internal/helper/sdk_attach.go +0 -83
  733. package/dist/templates/native-go/backend/internal/helper/sdk_attach_contract.go +0 -32
  734. package/dist/templates/native-go/backend/internal/helper/sdk_attach_test.go +0 -184
  735. package/dist/templates/native-go/backend/internal/helper/sdk_authority_schema_test.go +0 -6
  736. package/dist/templates/native-go/backend/internal/helper/sdk_background_authority.go +0 -832
  737. package/dist/templates/native-go/backend/internal/helper/sdk_background_authority_test.go +0 -714
  738. package/dist/templates/native-go/backend/internal/helper/sdk_background_invalidation.go +0 -218
  739. package/dist/templates/native-go/backend/internal/helper/sdk_background_lease.go +0 -218
  740. package/dist/templates/native-go/backend/internal/helper/sdk_background_snapshot.go +0 -110
  741. package/dist/templates/native-go/backend/internal/helper/sdk_background_store_linux_test.go +0 -261
  742. package/dist/templates/native-go/backend/internal/helper/sdk_background_store_test.go +0 -58
  743. package/dist/templates/native-go/backend/internal/helper/sdk_bindings.go +0 -60
  744. package/dist/templates/native-go/backend/internal/helper/sdk_data_contract.go +0 -251
  745. package/dist/templates/native-go/backend/internal/helper/sdk_data_protocol.go +0 -424
  746. package/dist/templates/native-go/backend/internal/helper/sdk_dispatch_absence_test.go +0 -51
  747. package/dist/templates/native-go/backend/internal/helper/sdk_display.go +0 -488
  748. package/dist/templates/native-go/backend/internal/helper/sdk_display_contract.go +0 -121
  749. package/dist/templates/native-go/backend/internal/helper/sdk_display_test.go +0 -459
  750. package/dist/templates/native-go/backend/internal/helper/sdk_grant_authority.go +0 -559
  751. package/dist/templates/native-go/backend/internal/helper/sdk_grant_repository_linux.go +0 -417
  752. package/dist/templates/native-go/backend/internal/helper/sdk_grant_snapshot.go +0 -94
  753. package/dist/templates/native-go/backend/internal/helper/sdk_history.go +0 -80
  754. package/dist/templates/native-go/backend/internal/helper/sdk_history_test.go +0 -76
  755. package/dist/templates/native-go/backend/internal/helper/sdk_job.go +0 -697
  756. package/dist/templates/native-go/backend/internal/helper/sdk_job_child_linux.go +0 -309
  757. package/dist/templates/native-go/backend/internal/helper/sdk_job_contract.go +0 -122
  758. package/dist/templates/native-go/backend/internal/helper/sdk_job_linux_test.go +0 -159
  759. package/dist/templates/native-go/backend/internal/helper/sdk_job_process_linux.go +0 -327
  760. package/dist/templates/native-go/backend/internal/helper/sdk_job_test.go +0 -501
  761. package/dist/templates/native-go/backend/internal/helper/sdk_job_vm_linux_test.go +0 -343
  762. package/dist/templates/native-go/backend/internal/helper/sdk_journal.go +0 -77
  763. package/dist/templates/native-go/backend/internal/helper/sdk_journal_linux.go +0 -244
  764. package/dist/templates/native-go/backend/internal/helper/sdk_journal_linux_test.go +0 -295
  765. package/dist/templates/native-go/backend/internal/helper/sdk_journal_test.go +0 -71
  766. package/dist/templates/native-go/backend/internal/helper/sdk_picker_test.go +0 -50
  767. package/dist/templates/native-go/backend/internal/helper/sdk_process_linux.go +0 -184
  768. package/dist/templates/native-go/backend/internal/helper/sdk_public_vm_linux_test.go +0 -129
  769. package/dist/templates/native-go/backend/internal/helper/sdk_relaxed_invalidation.go +0 -242
  770. package/dist/templates/native-go/backend/internal/helper/sdk_rpc.go +0 -299
  771. package/dist/templates/native-go/backend/internal/helper/sdk_rpc_contract.go +0 -70
  772. package/dist/templates/native-go/backend/internal/helper/sdk_rpc_test.go +0 -135
  773. package/dist/templates/native-go/backend/internal/helper/sdk_server_linux.go +0 -161
  774. package/dist/templates/native-go/backend/internal/helper/sdk_session.go +0 -677
  775. package/dist/templates/native-go/backend/internal/helper/sdk_session_contract.go +0 -72
  776. package/dist/templates/native-go/backend/internal/helper/sdk_session_fence_test.go +0 -215
  777. package/dist/templates/native-go/backend/internal/helper/sdk_session_test.go +0 -475
  778. package/dist/templates/native-go/backend/internal/helper/sdk_supervisor_frame.go +0 -78
  779. package/dist/templates/native-go/backend/internal/helper/sdk_supervisor_linux.go +0 -414
  780. package/dist/templates/native-go/backend/internal/helper/sdk_transport.go +0 -79
  781. package/dist/templates/native-go/backend/internal/helper/sdk_transport_linux.go +0 -82
  782. package/dist/templates/native-go/backend/internal/helper/sdk_transport_test.go +0 -64
  783. package/dist/templates/native-go/backend/internal/helper/server_linux.go +0 -136
  784. package/dist/templates/native-go/backend/internal/helper/stale_management_linux_test.go +0 -126
  785. package/dist/templates/native-go/backend/internal/helper/stale_management_test.go +0 -122
  786. package/dist/templates/native-go/backend/internal/helper/startup_diagnostic.go +0 -68
  787. package/dist/templates/native-go/backend/internal/helper/startup_diagnostic_linux_test.go +0 -126
  788. package/dist/templates/native-go/backend/internal/helper/startup_diagnostic_test.go +0 -117
  789. package/dist/templates/native-go/backend/internal/helper/status.go +0 -343
  790. package/dist/templates/native-go/backend/internal/helper/status_test.go +0 -333
  791. package/dist/templates/native-go/backend/internal/helper/supervision.go +0 -107
  792. package/dist/templates/native-go/backend/internal/helper/supervision_test.go +0 -124
  793. package/dist/templates/native-go/backend/internal/helper/supervisor_frame.go +0 -79
  794. package/dist/templates/native-go/backend/internal/helper/supervisor_frame_linux_test.go +0 -69
  795. package/dist/templates/native-go/backend/internal/helper/supervisor_frame_test.go +0 -107
  796. package/dist/templates/native-go/backend/internal/helper/supervisor_linux.go +0 -367
  797. package/dist/templates/native-go/backend/internal/helper/supervisor_linux_test.go +0 -913
  798. package/dist/templates/native-go/backend/internal/helper/supervisor_socket_eof_test.go +0 -74
  799. package/dist/templates/native-go/backend/internal/helper/supervisor_socket_test.go +0 -45
  800. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/create.json +0 -23
  801. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/frames.json +0 -67
  802. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/grant-store.json +0 -52
  803. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/intent.json +0 -20
  804. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/list.json +0 -20
  805. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/publish.json +0 -20
  806. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/read.json +0 -22
  807. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/stat.json +0 -22
  808. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/write-stream.json +0 -22
  809. package/dist/templates/native-go/backend/internal/helper/unit_connection.go +0 -75
  810. package/dist/templates/native-go/backend/internal/helper/unit_connection_linux_test.go +0 -135
  811. package/dist/templates/native-go/backend/internal/helper/unit_connection_test.go +0 -151
  812. package/dist/templates/native-go/backend/internal/helper/unit_frame_test.go +0 -32
  813. package/dist/templates/native-go/backend/internal/helper/unit_linux.go +0 -368
  814. package/dist/templates/native-go/backend/internal/helper/unit_linux_test.go +0 -46
  815. package/dist/templates/native-go/backend/internal/helper/unit_mechanisms_linux_test.go +0 -217
  816. package/dist/templates/native-go/backend/internal/helper/unit_padding_linux_test.go +0 -178
  817. package/dist/templates/native-go/backend/internal/helper/unit_query_linux.go +0 -115
  818. package/dist/templates/native-go/backend/internal/helper/unit_reload_linux_test.go +0 -372
  819. package/dist/templates/native-go/backend/internal/helper/unit_reload_sequence_linux_test.go +0 -232
  820. package/dist/templates/native-go/backend/internal/helper/write.go +0 -77
  821. package/dist/templates/native-go/backend/internal/helper/write_admission.go +0 -260
  822. package/dist/templates/native-go/backend/internal/helper/write_admission_test.go +0 -135
  823. package/dist/templates/native-go/backend/internal/helper/write_cohort_linux_test.go +0 -218
  824. package/dist/templates/native-go/backend/internal/helper/write_files_linux.go +0 -205
  825. package/dist/templates/native-go/backend/internal/helper/write_files_linux_test.go +0 -225
  826. package/dist/templates/native-go/backend/internal/helper/write_intent_linux.go +0 -116
  827. package/dist/templates/native-go/backend/internal/helper/write_intent_linux_test.go +0 -74
  828. package/dist/templates/native-go/backend/internal/helper/write_operation_linux.go +0 -245
  829. package/dist/templates/native-go/backend/internal/helper/write_test.go +0 -53
  830. package/dist/templates/native-go-authorization/backend/internal/app/authorization.go +0 -298
  831. package/dist/templates/native-go-authorization/backend/internal/app/authorization_test.go +0 -96
  832. package/dist/templates/native-go-authorization/frontend/src/authorization/AuthorizationGate.vue +0 -89
  833. package/dist/templates/native-go-authorization/frontend/src/authorization/i18n/de.json +0 -36
  834. package/dist/templates/native-go-authorization/frontend/src/authorization/i18n/en.json +0 -36
  835. package/dist/templates/native-go-authorization/frontend/src/authorization/i18n/es.json +0 -36
  836. package/dist/templates/native-go-authorization/frontend/src/authorization/i18n/fr.json +0 -36
  837. package/dist/templates/native-go-authorization/frontend/src/authorization/i18n/index.ts +0 -15
  838. package/dist/templates/native-go-authorization/frontend/src/authorization/i18n/it.json +0 -36
  839. package/dist/templates/native-go-authorization/frontend/src/authorization/i18n/ja.json +0 -36
  840. package/dist/templates/native-go-authorization/frontend/src/authorization/i18n/ko.json +0 -36
  841. package/dist/templates/native-go-authorization/frontend/src/authorization/i18n/zh-CN.json +0 -36
  842. package/dist/templates/native-go-authorization/frontend/src/authorization/i18n/zh-TW.json +0 -36
  843. package/dist/templates/native-go-authorization/frontend/test/authorization-preview.html +0 -14
  844. package/dist/templates/native-go-authorization/frontend/test/authorization.test.ts +0 -59
  845. package/dist/templates/native-go-background/BACKGROUND.md +0 -111
  846. package/dist/templates/native-go-background/backend/internal/app/background_routes_test.go +0 -32
  847. package/dist/templates/native-go-background/frontend/src/background/BackgroundPanel.vue +0 -178
  848. package/dist/templates/native-go-background/frontend/src/background/i18n/de.json +0 -83
  849. package/dist/templates/native-go-background/frontend/src/background/i18n/en.json +0 -83
  850. package/dist/templates/native-go-background/frontend/src/background/i18n/es.json +0 -83
  851. package/dist/templates/native-go-background/frontend/src/background/i18n/fr.json +0 -83
  852. package/dist/templates/native-go-background/frontend/src/background/i18n/it.json +0 -83
  853. package/dist/templates/native-go-background/frontend/src/background/i18n/ja.json +0 -83
  854. package/dist/templates/native-go-background/frontend/src/background/i18n/ko.json +0 -83
  855. package/dist/templates/native-go-background/frontend/src/background/i18n/zh-CN.json +0 -83
  856. package/dist/templates/native-go-background/frontend/src/background/i18n/zh-TW.json +0 -83
  857. package/dist/templates/native-go-background/frontend/src/background/picker-provider.ts +0 -13
  858. package/dist/templates/native-go-background/frontend/test/background.test.ts +0 -179
  859. package/dist/templates/native-go-better-auth/backend/internal/app/identity.go +0 -208
  860. package/dist/templates/native-go-better-auth/backend/internal/app/identity_test.go +0 -113
  861. package/dist/templates/native-go-better-auth/node/app.mjs +0 -72
  862. package/dist/templates/native-go-better-auth/node/build.mjs +0 -4
  863. package/dist/templates/native-go-better-auth/node/package-lock.json +0 -862
  864. package/dist/templates/native-go-better-auth/node/package.json +0 -1
  865. package/dist/templates/native-go-better-auth/node/test/auth.test.mjs +0 -31
  866. package/dist/templates/native-go-integration/backend/internal/app/identity_none.go +0 -6
  867. package/dist/templates/native-go-integration/backend/internal/app/personal.go +0 -203
  868. package/dist/templates/native-go-integration/backend/internal/app/personal_test.go +0 -156
  869. package/dist/templates/native-go-root/backend/internal/app/root.go +0 -107
  870. package/dist/templates/native-go-root/backend/internal/app/root_test.go +0 -124
  871. package/dist/templates/native-go-root/root/whoami.sh +0 -6
  872. package/dist/templates/native-go-vue/frontend/README-JOBS.md +0 -75
  873. package/dist/templates/native-go-vue/frontend/README-M2.md +0 -64
  874. package/dist/templates/native-go-vue/frontend/src/M2App.vue +0 -57
  875. package/dist/templates/native-go-vue/frontend/src/SDKApp.vue +0 -203
  876. package/dist/templates/native-go-vue/frontend/src/jobs/InteractiveJobForm.vue +0 -70
  877. package/dist/templates/native-go-vue/frontend/src/jobs/JobsAdminPanel.vue +0 -33
  878. package/dist/templates/native-go-vue/frontend/src/jobs/JobsPanel.vue +0 -135
  879. package/dist/templates/native-go-vue/frontend/src/jobs/connected-provider.ts +0 -179
  880. package/dist/templates/native-go-vue/frontend/src/jobs/i18n/de.json +0 -62
  881. package/dist/templates/native-go-vue/frontend/src/jobs/i18n/en.json +0 -62
  882. package/dist/templates/native-go-vue/frontend/src/jobs/i18n/es.json +0 -62
  883. package/dist/templates/native-go-vue/frontend/src/jobs/i18n/fr.json +0 -62
  884. package/dist/templates/native-go-vue/frontend/src/jobs/i18n/it.json +0 -62
  885. package/dist/templates/native-go-vue/frontend/src/jobs/i18n/ja.json +0 -62
  886. package/dist/templates/native-go-vue/frontend/src/jobs/i18n/ko.json +0 -62
  887. package/dist/templates/native-go-vue/frontend/src/jobs/i18n/zh-CN.json +0 -62
  888. package/dist/templates/native-go-vue/frontend/src/jobs/i18n/zh-TW.json +0 -62
  889. package/dist/templates/native-go-vue/frontend/src/jobs/i18n.ts +0 -15
  890. package/dist/templates/native-go-vue/frontend/src/jobs/mock-provider.ts +0 -67
  891. package/dist/templates/native-go-vue/frontend/src/jobs/provider.ts +0 -60
  892. package/dist/templates/native-go-vue/frontend/src/jobs/validate.ts +0 -44
  893. package/dist/templates/native-go-vue/frontend/src/m2-main.ts +0 -21
  894. package/dist/templates/native-go-vue/frontend/src/m2-style.css +0 -7
  895. package/dist/templates/native-go-vue/frontend/src/nas/M2Files.vue +0 -94
  896. package/dist/templates/native-go-vue/frontend/src/nas/M2PathPicker.vue +0 -70
  897. package/dist/templates/native-go-vue/frontend/src/nas/M2Settings.vue +0 -69
  898. package/dist/templates/native-go-vue/frontend/src/nas/NasGrantSettings.vue +0 -74
  899. package/dist/templates/native-go-vue/frontend/src/nas/NasPathPicker.vue +0 -106
  900. package/dist/templates/native-go-vue/frontend/src/nas/NasUnavailable.vue +0 -20
  901. package/dist/templates/native-go-vue/frontend/src/nas/i18n/de.json +0 -74
  902. package/dist/templates/native-go-vue/frontend/src/nas/i18n/en.json +0 -74
  903. package/dist/templates/native-go-vue/frontend/src/nas/i18n/es.json +0 -74
  904. package/dist/templates/native-go-vue/frontend/src/nas/i18n/fr.json +0 -74
  905. package/dist/templates/native-go-vue/frontend/src/nas/i18n/it.json +0 -74
  906. package/dist/templates/native-go-vue/frontend/src/nas/i18n/ja.json +0 -74
  907. package/dist/templates/native-go-vue/frontend/src/nas/i18n/ko.json +0 -74
  908. package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/de.json +0 -56
  909. package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/en.json +0 -56
  910. package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/es.json +0 -56
  911. package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/fr.json +0 -56
  912. package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/it.json +0 -56
  913. package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/ja.json +0 -56
  914. package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/ko.json +0 -56
  915. package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/zh-CN.json +0 -56
  916. package/dist/templates/native-go-vue/frontend/src/nas/i18n/m2/zh-TW.json +0 -56
  917. package/dist/templates/native-go-vue/frontend/src/nas/i18n/zh-CN.json +0 -74
  918. package/dist/templates/native-go-vue/frontend/src/nas/i18n/zh-TW.json +0 -74
  919. package/dist/templates/native-go-vue/frontend/src/nas/m2-contract.ts +0 -33
  920. package/dist/templates/native-go-vue/frontend/src/nas/m2-i18n.ts +0 -24
  921. package/dist/templates/native-go-vue/frontend/src/nas/m2-provider.ts +0 -104
  922. package/dist/templates/native-go-vue/frontend/src/nas/mock-provider.ts +0 -119
  923. package/dist/templates/native-go-vue/frontend/src/nas/use-m2-request.ts +0 -18
  924. package/dist/templates/native-go-vue/frontend/src/sdk-main.ts +0 -39
  925. package/dist/templates/native-go-vue/frontend/test/jobs-connected.test.ts +0 -163
  926. package/dist/templates/native-go-vue/frontend/test/jobs-preview.html +0 -22
  927. package/dist/templates/native-go-vue/frontend/test/jobs.test.ts +0 -176
  928. package/dist/templates/native-go-vue/frontend/test/m2-preview.html +0 -27
  929. package/dist/templates/native-go-vue/frontend/test/m2-provider.test.ts +0 -87
  930. package/dist/templates/native-go-vue/frontend/test/m2-ui.test.ts +0 -209
  931. package/dist/templates/native-go-vue/frontend/test/nas-provider.test.ts +0 -81
  932. package/dist/templates/native-go-vue/frontend/test/nas-request.test.ts +0 -21
  933. package/dist/templates/native-go-vue/frontend/test/nas-ui.test.ts +0 -261
  934. package/dist/templates/native-go-vue/frontend/test/picker-wire.test.ts +0 -110
  935. package/dist/templates/native-go-vue/frontend/test/shell-preview.html +0 -19
  936. package/dist/templates/native-go-vue/frontend/test/shell-sdk.test.ts +0 -73
  937. package/templates/_authorization/main.go +0 -104
  938. package/templates/_authorization/main_test.go +0 -35
  939. package/templates/_shared/notice-overrides/index.json +0 -14
  940. package/templates/_shared/notice-overrides/utils-0.4.2-LICENSE +0 -21
  941. package/templates/_shared/notice-overrides/utils-0.5.0-LICENSE +0 -21
  942. package/templates/binary/native.yaml +0 -16
  943. package/templates/binary/synology-app.yaml +0 -7
  944. package/templates/compose-import/compose.yaml +0 -10
  945. package/templates/compose-import/synology-app.yaml +0 -15
  946. package/templates/native-go/backend/cmd/app/sdk_main.go +0 -62
  947. package/templates/native-go/backend/cmd/dsm-readonly-probe/main_linux.go +0 -46
  948. package/templates/native-go/backend/cmd/helper/main.go +0 -64
  949. package/templates/native-go/backend/cmd/helper/sdk_registry.go +0 -19
  950. package/templates/native-go/backend/internal/api/binary.go +0 -154
  951. package/templates/native-go/backend/internal/api/binary_test.go +0 -165
  952. package/templates/native-go/backend/internal/app/authorization_none.go +0 -5
  953. package/templates/native-go/backend/internal/app/integration_state.go +0 -16
  954. package/templates/native-go/backend/internal/app/nas_cgi_artifact_test.go +0 -129
  955. package/templates/native-go/backend/internal/app/nas_refusal_test.go +0 -46
  956. package/templates/native-go/backend/internal/app/sdk_jobs.go +0 -70
  957. package/templates/native-go/backend/internal/app/sdk_jobs_test.go +0 -116
  958. package/templates/native-go/backend/internal/app/sdk_routes.go +0 -177
  959. package/templates/native-go/backend/internal/dsmprobe/collector_linux.go +0 -335
  960. package/templates/native-go/backend/internal/dsmprobe/collector_linux_test.go +0 -41
  961. package/templates/native-go/backend/internal/dsmprobe/protocol.go +0 -179
  962. package/templates/native-go/backend/internal/dsmprobe/protocol_test.go +0 -29
  963. package/templates/native-go/backend/internal/filestation/repository.go +0 -207
  964. package/templates/native-go/backend/internal/filestation/repository_test.go +0 -104
  965. package/templates/native-go/backend/internal/filestation/sdk_session.go +0 -241
  966. package/templates/native-go/backend/internal/filestation/sdk_session_test.go +0 -183
  967. package/templates/native-go/backend/internal/filestation/session_semantics_test.go +0 -383
  968. package/templates/native-go/backend/internal/helper/background_proof.go +0 -163
  969. package/templates/native-go/backend/internal/helper/background_proof_contract.go +0 -46
  970. package/templates/native-go/backend/internal/helper/background_proof_test.go +0 -161
  971. package/templates/native-go/backend/internal/helper/cohort.go +0 -393
  972. package/templates/native-go/backend/internal/helper/cohort_publication.go +0 -18
  973. package/templates/native-go/backend/internal/helper/cohort_publication_test.go +0 -105
  974. package/templates/native-go/backend/internal/helper/cohort_test.go +0 -372
  975. package/templates/native-go/backend/internal/helper/control.go +0 -424
  976. package/templates/native-go/backend/internal/helper/control_test.go +0 -250
  977. package/templates/native-go/backend/internal/helper/data_contract.go +0 -245
  978. package/templates/native-go/backend/internal/helper/data_contract_test.go +0 -51
  979. package/templates/native-go/backend/internal/helper/data_decode.go +0 -184
  980. package/templates/native-go/backend/internal/helper/data_decode_pointer_test.go +0 -30
  981. package/templates/native-go/backend/internal/helper/data_protocol.go +0 -419
  982. package/templates/native-go/backend/internal/helper/data_protocol_test.go +0 -449
  983. package/templates/native-go/backend/internal/helper/dsm_acl_linux.go +0 -139
  984. package/templates/native-go/backend/internal/helper/dsm_acl_linux_test.go +0 -121
  985. package/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux.go +0 -95
  986. package/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux_test.go +0 -56
  987. package/templates/native-go/backend/internal/helper/dsm_bridge_linux.go +0 -144
  988. package/templates/native-go/backend/internal/helper/dsm_bridge_linux_test.go +0 -89
  989. package/templates/native-go/backend/internal/helper/dsm_home_linux.go +0 -107
  990. package/templates/native-go/backend/internal/helper/dsm_home_linux_test.go +0 -82
  991. package/templates/native-go/backend/internal/helper/dsm_probe_transport_linux.go +0 -151
  992. package/templates/native-go/backend/internal/helper/dsm_probe_transport_linux_test.go +0 -66
  993. package/templates/native-go/backend/internal/helper/grant_authority.go +0 -519
  994. package/templates/native-go/backend/internal/helper/grant_authority_contract.go +0 -88
  995. package/templates/native-go/backend/internal/helper/grant_authority_test.go +0 -510
  996. package/templates/native-go/backend/internal/helper/grant_cohort.go +0 -389
  997. package/templates/native-go/backend/internal/helper/grant_cohort_test.go +0 -239
  998. package/templates/native-go/backend/internal/helper/grant_delivery.go +0 -49
  999. package/templates/native-go/backend/internal/helper/grant_delivery_methods.go +0 -273
  1000. package/templates/native-go/backend/internal/helper/grant_delivery_test.go +0 -322
  1001. package/templates/native-go/backend/internal/helper/grant_operation_contract.go +0 -47
  1002. package/templates/native-go/backend/internal/helper/grant_readonly_test.go +0 -180
  1003. package/templates/native-go/backend/internal/helper/grant_repository_linux.go +0 -416
  1004. package/templates/native-go/backend/internal/helper/grant_repository_linux_test.go +0 -469
  1005. package/templates/native-go/backend/internal/helper/grant_rpc.go +0 -147
  1006. package/templates/native-go/backend/internal/helper/grant_rpc_test.go +0 -51
  1007. package/templates/native-go/backend/internal/helper/grant_snapshot.go +0 -78
  1008. package/templates/native-go/backend/internal/helper/grant_supervisor_linux.go +0 -134
  1009. package/templates/native-go/backend/internal/helper/grant_supervisor_linux_test.go +0 -254
  1010. package/templates/native-go/backend/internal/helper/jobcontract/bindings.go +0 -48
  1011. package/templates/native-go/backend/internal/helper/jobcontract/contract_test.go +0 -436
  1012. package/templates/native-go/backend/internal/helper/jobcontract/decode.go +0 -185
  1013. package/templates/native-go/backend/internal/helper/jobcontract/digest.go +0 -55
  1014. package/templates/native-go/backend/internal/helper/jobcontract/registry.go +0 -85
  1015. package/templates/native-go/backend/internal/helper/jobcontract/registry_test.go +0 -73
  1016. package/templates/native-go/backend/internal/helper/jobcontract/result.go +0 -53
  1017. package/templates/native-go/backend/internal/helper/jobcontract/stub.go +0 -8
  1018. package/templates/native-go/backend/internal/helper/jobcontract/testdata/input-digests.json +0 -127
  1019. package/templates/native-go/backend/internal/helper/jobcontract/types.go +0 -234
  1020. package/templates/native-go/backend/internal/helper/jobcontract/types_test.go +0 -29
  1021. package/templates/native-go/backend/internal/helper/jobcontract/validate.go +0 -462
  1022. package/templates/native-go/backend/internal/helper/lease.go +0 -112
  1023. package/templates/native-go/backend/internal/helper/lease_linux.go +0 -44
  1024. package/templates/native-go/backend/internal/helper/lease_other.go +0 -8
  1025. package/templates/native-go/backend/internal/helper/legacy_authority_schema_linux_test.go +0 -34
  1026. package/templates/native-go/backend/internal/helper/legacy_authority_schema_test.go +0 -6
  1027. package/templates/native-go/backend/internal/helper/lifecycle.go +0 -234
  1028. package/templates/native-go/backend/internal/helper/lifecycle_test.go +0 -473
  1029. package/templates/native-go/backend/internal/helper/managed_pilot.go +0 -284
  1030. package/templates/native-go/backend/internal/helper/managed_pilot_repository_linux.go +0 -74
  1031. package/templates/native-go/backend/internal/helper/managed_pilot_repository_linux_test.go +0 -40
  1032. package/templates/native-go/backend/internal/helper/managed_pilot_test.go +0 -210
  1033. package/templates/native-go/backend/internal/helper/management.go +0 -86
  1034. package/templates/native-go/backend/internal/helper/nas_shipped_refusal_linux_test.go +0 -97
  1035. package/templates/native-go/backend/internal/helper/native_discovery.go +0 -79
  1036. package/templates/native-go/backend/internal/helper/native_identity.go +0 -89
  1037. package/templates/native-go/backend/internal/helper/native_provider.go +0 -159
  1038. package/templates/native-go/backend/internal/helper/native_provider_test.go +0 -421
  1039. package/templates/native-go/backend/internal/helper/observation.go +0 -244
  1040. package/templates/native-go/backend/internal/helper/observation_health_test.go +0 -127
  1041. package/templates/native-go/backend/internal/helper/observation_reload_budget_test.go +0 -117
  1042. package/templates/native-go/backend/internal/helper/observation_test.go +0 -196
  1043. package/templates/native-go/backend/internal/helper/observer_diagnostic.go +0 -155
  1044. package/templates/native-go/backend/internal/helper/observer_diagnostic_linux.go +0 -76
  1045. package/templates/native-go/backend/internal/helper/observer_diagnostic_linux_test.go +0 -130
  1046. package/templates/native-go/backend/internal/helper/observer_diagnostic_test.go +0 -98
  1047. package/templates/native-go/backend/internal/helper/observer_diagnostic_writer.go +0 -40
  1048. package/templates/native-go/backend/internal/helper/operation_bootstrap_linux.go +0 -193
  1049. package/templates/native-go/backend/internal/helper/operation_credentials_linux.go +0 -56
  1050. package/templates/native-go/backend/internal/helper/operation_linux.go +0 -480
  1051. package/templates/native-go/backend/internal/helper/operation_linux_test.go +0 -528
  1052. package/templates/native-go/backend/internal/helper/peer_linux.go +0 -44
  1053. package/templates/native-go/backend/internal/helper/peer_other.go +0 -7
  1054. package/templates/native-go/backend/internal/helper/process_linux.go +0 -180
  1055. package/templates/native-go/backend/internal/helper/process_other.go +0 -5
  1056. package/templates/native-go/backend/internal/helper/publication_test.go +0 -178
  1057. package/templates/native-go/backend/internal/helper/purge.go +0 -115
  1058. package/templates/native-go/backend/internal/helper/purge_test.go +0 -59
  1059. package/templates/native-go/backend/internal/helper/query_deadline_linux_test.go +0 -115
  1060. package/templates/native-go/backend/internal/helper/query_pending_diagnostic_test.go +0 -254
  1061. package/templates/native-go/backend/internal/helper/read_stream_cohort_linux_test.go +0 -156
  1062. package/templates/native-go/backend/internal/helper/read_transfer.go +0 -40
  1063. package/templates/native-go/backend/internal/helper/read_transfer_linux.go +0 -109
  1064. package/templates/native-go/backend/internal/helper/read_transfer_linux_test.go +0 -118
  1065. package/templates/native-go/backend/internal/helper/read_transfer_test.go +0 -177
  1066. package/templates/native-go/backend/internal/helper/readonly.go +0 -105
  1067. package/templates/native-go/backend/internal/helper/readonly_admission.go +0 -85
  1068. package/templates/native-go/backend/internal/helper/readonly_cohort_linux_test.go +0 -253
  1069. package/templates/native-go/backend/internal/helper/readonly_linux_test.go +0 -378
  1070. package/templates/native-go/backend/internal/helper/readonly_mount_linux.go +0 -65
  1071. package/templates/native-go/backend/internal/helper/readonly_mount_proxy_linux.go +0 -113
  1072. package/templates/native-go/backend/internal/helper/readonly_operations_linux.go +0 -168
  1073. package/templates/native-go/backend/internal/helper/readonly_resolver_linux.go +0 -241
  1074. package/templates/native-go/backend/internal/helper/readonly_test.go +0 -40
  1075. package/templates/native-go/backend/internal/helper/relaxed_identity.go +0 -252
  1076. package/templates/native-go/backend/internal/helper/relaxed_identity_contract.go +0 -105
  1077. package/templates/native-go/backend/internal/helper/relaxed_identity_test.go +0 -406
  1078. package/templates/native-go/backend/internal/helper/relaxed_invalidation.go +0 -203
  1079. package/templates/native-go/backend/internal/helper/repair.go +0 -132
  1080. package/templates/native-go/backend/internal/helper/repair_test.go +0 -271
  1081. package/templates/native-go/backend/internal/helper/revoke.go +0 -109
  1082. package/templates/native-go/backend/internal/helper/revoke_test.go +0 -121
  1083. package/templates/native-go/backend/internal/helper/s1r_actor_acl_linux_test.go +0 -303
  1084. package/templates/native-go/backend/internal/helper/s1r_actor_fixture_linux_test.go +0 -184
  1085. package/templates/native-go/backend/internal/helper/s1r_actor_races_linux_test.go +0 -250
  1086. package/templates/native-go/backend/internal/helper/s1r_fixture_contract_linux_test.go +0 -18
  1087. package/templates/native-go/backend/internal/helper/sdk_assembly_linux.go +0 -51
  1088. package/templates/native-go/backend/internal/helper/sdk_attach.go +0 -83
  1089. package/templates/native-go/backend/internal/helper/sdk_attach_contract.go +0 -32
  1090. package/templates/native-go/backend/internal/helper/sdk_attach_test.go +0 -184
  1091. package/templates/native-go/backend/internal/helper/sdk_authority_schema_test.go +0 -6
  1092. package/templates/native-go/backend/internal/helper/sdk_background_authority.go +0 -832
  1093. package/templates/native-go/backend/internal/helper/sdk_background_authority_test.go +0 -714
  1094. package/templates/native-go/backend/internal/helper/sdk_background_invalidation.go +0 -218
  1095. package/templates/native-go/backend/internal/helper/sdk_background_lease.go +0 -218
  1096. package/templates/native-go/backend/internal/helper/sdk_background_snapshot.go +0 -110
  1097. package/templates/native-go/backend/internal/helper/sdk_background_store_linux_test.go +0 -261
  1098. package/templates/native-go/backend/internal/helper/sdk_background_store_test.go +0 -58
  1099. package/templates/native-go/backend/internal/helper/sdk_bindings.go +0 -60
  1100. package/templates/native-go/backend/internal/helper/sdk_data_contract.go +0 -251
  1101. package/templates/native-go/backend/internal/helper/sdk_data_protocol.go +0 -424
  1102. package/templates/native-go/backend/internal/helper/sdk_dispatch_absence_test.go +0 -51
  1103. package/templates/native-go/backend/internal/helper/sdk_display.go +0 -488
  1104. package/templates/native-go/backend/internal/helper/sdk_display_contract.go +0 -121
  1105. package/templates/native-go/backend/internal/helper/sdk_display_test.go +0 -459
  1106. package/templates/native-go/backend/internal/helper/sdk_grant_authority.go +0 -559
  1107. package/templates/native-go/backend/internal/helper/sdk_grant_repository_linux.go +0 -417
  1108. package/templates/native-go/backend/internal/helper/sdk_grant_snapshot.go +0 -94
  1109. package/templates/native-go/backend/internal/helper/sdk_history.go +0 -80
  1110. package/templates/native-go/backend/internal/helper/sdk_history_test.go +0 -76
  1111. package/templates/native-go/backend/internal/helper/sdk_job.go +0 -697
  1112. package/templates/native-go/backend/internal/helper/sdk_job_child_linux.go +0 -309
  1113. package/templates/native-go/backend/internal/helper/sdk_job_contract.go +0 -122
  1114. package/templates/native-go/backend/internal/helper/sdk_job_linux_test.go +0 -159
  1115. package/templates/native-go/backend/internal/helper/sdk_job_process_linux.go +0 -327
  1116. package/templates/native-go/backend/internal/helper/sdk_job_test.go +0 -501
  1117. package/templates/native-go/backend/internal/helper/sdk_job_vm_linux_test.go +0 -343
  1118. package/templates/native-go/backend/internal/helper/sdk_journal.go +0 -77
  1119. package/templates/native-go/backend/internal/helper/sdk_journal_linux.go +0 -244
  1120. package/templates/native-go/backend/internal/helper/sdk_journal_linux_test.go +0 -295
  1121. package/templates/native-go/backend/internal/helper/sdk_journal_test.go +0 -71
  1122. package/templates/native-go/backend/internal/helper/sdk_picker_test.go +0 -50
  1123. package/templates/native-go/backend/internal/helper/sdk_process_linux.go +0 -184
  1124. package/templates/native-go/backend/internal/helper/sdk_public_vm_linux_test.go +0 -129
  1125. package/templates/native-go/backend/internal/helper/sdk_relaxed_invalidation.go +0 -242
  1126. package/templates/native-go/backend/internal/helper/sdk_rpc.go +0 -299
  1127. package/templates/native-go/backend/internal/helper/sdk_rpc_contract.go +0 -70
  1128. package/templates/native-go/backend/internal/helper/sdk_rpc_test.go +0 -135
  1129. package/templates/native-go/backend/internal/helper/sdk_server_linux.go +0 -161
  1130. package/templates/native-go/backend/internal/helper/sdk_session.go +0 -677
  1131. package/templates/native-go/backend/internal/helper/sdk_session_contract.go +0 -72
  1132. package/templates/native-go/backend/internal/helper/sdk_session_fence_test.go +0 -215
  1133. package/templates/native-go/backend/internal/helper/sdk_session_test.go +0 -475
  1134. package/templates/native-go/backend/internal/helper/sdk_supervisor_frame.go +0 -78
  1135. package/templates/native-go/backend/internal/helper/sdk_supervisor_linux.go +0 -414
  1136. package/templates/native-go/backend/internal/helper/sdk_transport.go +0 -79
  1137. package/templates/native-go/backend/internal/helper/sdk_transport_linux.go +0 -82
  1138. package/templates/native-go/backend/internal/helper/sdk_transport_test.go +0 -64
  1139. package/templates/native-go/backend/internal/helper/server_linux.go +0 -136
  1140. package/templates/native-go/backend/internal/helper/stale_management_linux_test.go +0 -126
  1141. package/templates/native-go/backend/internal/helper/stale_management_test.go +0 -122
  1142. package/templates/native-go/backend/internal/helper/startup_diagnostic.go +0 -68
  1143. package/templates/native-go/backend/internal/helper/startup_diagnostic_linux_test.go +0 -126
  1144. package/templates/native-go/backend/internal/helper/startup_diagnostic_test.go +0 -117
  1145. package/templates/native-go/backend/internal/helper/status.go +0 -343
  1146. package/templates/native-go/backend/internal/helper/status_test.go +0 -333
  1147. package/templates/native-go/backend/internal/helper/supervision.go +0 -107
  1148. package/templates/native-go/backend/internal/helper/supervision_test.go +0 -124
  1149. package/templates/native-go/backend/internal/helper/supervisor_frame.go +0 -79
  1150. package/templates/native-go/backend/internal/helper/supervisor_frame_linux_test.go +0 -69
  1151. package/templates/native-go/backend/internal/helper/supervisor_frame_test.go +0 -107
  1152. package/templates/native-go/backend/internal/helper/supervisor_linux.go +0 -367
  1153. package/templates/native-go/backend/internal/helper/supervisor_linux_test.go +0 -913
  1154. package/templates/native-go/backend/internal/helper/supervisor_socket_eof_test.go +0 -74
  1155. package/templates/native-go/backend/internal/helper/supervisor_socket_test.go +0 -45
  1156. package/templates/native-go/backend/internal/helper/testdata/protocol2/create.json +0 -23
  1157. package/templates/native-go/backend/internal/helper/testdata/protocol2/frames.json +0 -67
  1158. package/templates/native-go/backend/internal/helper/testdata/protocol2/grant-store.json +0 -52
  1159. package/templates/native-go/backend/internal/helper/testdata/protocol2/intent.json +0 -20
  1160. package/templates/native-go/backend/internal/helper/testdata/protocol2/list.json +0 -20
  1161. package/templates/native-go/backend/internal/helper/testdata/protocol2/publish.json +0 -20
  1162. package/templates/native-go/backend/internal/helper/testdata/protocol2/read.json +0 -22
  1163. package/templates/native-go/backend/internal/helper/testdata/protocol2/stat.json +0 -22
  1164. package/templates/native-go/backend/internal/helper/testdata/protocol2/write-stream.json +0 -22
  1165. package/templates/native-go/backend/internal/helper/unit_connection.go +0 -75
  1166. package/templates/native-go/backend/internal/helper/unit_connection_linux_test.go +0 -135
  1167. package/templates/native-go/backend/internal/helper/unit_connection_test.go +0 -151
  1168. package/templates/native-go/backend/internal/helper/unit_frame_test.go +0 -32
  1169. package/templates/native-go/backend/internal/helper/unit_linux.go +0 -368
  1170. package/templates/native-go/backend/internal/helper/unit_linux_test.go +0 -46
  1171. package/templates/native-go/backend/internal/helper/unit_mechanisms_linux_test.go +0 -217
  1172. package/templates/native-go/backend/internal/helper/unit_padding_linux_test.go +0 -178
  1173. package/templates/native-go/backend/internal/helper/unit_query_linux.go +0 -115
  1174. package/templates/native-go/backend/internal/helper/unit_reload_linux_test.go +0 -372
  1175. package/templates/native-go/backend/internal/helper/unit_reload_sequence_linux_test.go +0 -232
  1176. package/templates/native-go/backend/internal/helper/write.go +0 -77
  1177. package/templates/native-go/backend/internal/helper/write_admission.go +0 -260
  1178. package/templates/native-go/backend/internal/helper/write_admission_test.go +0 -135
  1179. package/templates/native-go/backend/internal/helper/write_cohort_linux_test.go +0 -218
  1180. package/templates/native-go/backend/internal/helper/write_files_linux.go +0 -205
  1181. package/templates/native-go/backend/internal/helper/write_files_linux_test.go +0 -225
  1182. package/templates/native-go/backend/internal/helper/write_intent_linux.go +0 -116
  1183. package/templates/native-go/backend/internal/helper/write_intent_linux_test.go +0 -74
  1184. package/templates/native-go/backend/internal/helper/write_operation_linux.go +0 -245
  1185. package/templates/native-go/backend/internal/helper/write_test.go +0 -53
  1186. package/templates/native-go-authorization/backend/internal/app/authorization.go +0 -298
  1187. package/templates/native-go-authorization/backend/internal/app/authorization_test.go +0 -96
  1188. package/templates/native-go-authorization/frontend/src/authorization/AuthorizationGate.vue +0 -89
  1189. package/templates/native-go-authorization/frontend/src/authorization/i18n/de.json +0 -36
  1190. package/templates/native-go-authorization/frontend/src/authorization/i18n/en.json +0 -36
  1191. package/templates/native-go-authorization/frontend/src/authorization/i18n/es.json +0 -36
  1192. package/templates/native-go-authorization/frontend/src/authorization/i18n/fr.json +0 -36
  1193. package/templates/native-go-authorization/frontend/src/authorization/i18n/index.ts +0 -15
  1194. package/templates/native-go-authorization/frontend/src/authorization/i18n/it.json +0 -36
  1195. package/templates/native-go-authorization/frontend/src/authorization/i18n/ja.json +0 -36
  1196. package/templates/native-go-authorization/frontend/src/authorization/i18n/ko.json +0 -36
  1197. package/templates/native-go-authorization/frontend/src/authorization/i18n/zh-CN.json +0 -36
  1198. package/templates/native-go-authorization/frontend/src/authorization/i18n/zh-TW.json +0 -36
  1199. package/templates/native-go-authorization/frontend/test/authorization-preview.html +0 -14
  1200. package/templates/native-go-authorization/frontend/test/authorization.test.ts +0 -59
  1201. package/templates/native-go-background/BACKGROUND.md +0 -111
  1202. package/templates/native-go-background/backend/internal/app/background_routes_test.go +0 -32
  1203. package/templates/native-go-background/frontend/src/background/BackgroundPanel.vue +0 -178
  1204. package/templates/native-go-background/frontend/src/background/i18n/de.json +0 -83
  1205. package/templates/native-go-background/frontend/src/background/i18n/en.json +0 -83
  1206. package/templates/native-go-background/frontend/src/background/i18n/es.json +0 -83
  1207. package/templates/native-go-background/frontend/src/background/i18n/fr.json +0 -83
  1208. package/templates/native-go-background/frontend/src/background/i18n/it.json +0 -83
  1209. package/templates/native-go-background/frontend/src/background/i18n/ja.json +0 -83
  1210. package/templates/native-go-background/frontend/src/background/i18n/ko.json +0 -83
  1211. package/templates/native-go-background/frontend/src/background/i18n/zh-CN.json +0 -83
  1212. package/templates/native-go-background/frontend/src/background/i18n/zh-TW.json +0 -83
  1213. package/templates/native-go-background/frontend/src/background/picker-provider.ts +0 -13
  1214. package/templates/native-go-background/frontend/test/background.test.ts +0 -179
  1215. package/templates/native-go-better-auth/backend/internal/app/identity.go +0 -208
  1216. package/templates/native-go-better-auth/backend/internal/app/identity_test.go +0 -113
  1217. package/templates/native-go-better-auth/node/app.mjs +0 -72
  1218. package/templates/native-go-better-auth/node/build.mjs +0 -4
  1219. package/templates/native-go-better-auth/node/package-lock.json +0 -862
  1220. package/templates/native-go-better-auth/node/package.json +0 -1
  1221. package/templates/native-go-better-auth/node/test/auth.test.mjs +0 -31
  1222. package/templates/native-go-integration/backend/internal/app/identity_none.go +0 -6
  1223. package/templates/native-go-integration/backend/internal/app/personal.go +0 -203
  1224. package/templates/native-go-integration/backend/internal/app/personal_test.go +0 -156
  1225. package/templates/native-go-root/backend/internal/app/root.go +0 -107
  1226. package/templates/native-go-root/backend/internal/app/root_test.go +0 -124
  1227. package/templates/native-go-root/root/whoami.sh +0 -6
  1228. package/templates/native-go-vue/frontend/README-JOBS.md +0 -75
  1229. package/templates/native-go-vue/frontend/README-M2.md +0 -64
  1230. package/templates/native-go-vue/frontend/src/M2App.vue +0 -57
  1231. package/templates/native-go-vue/frontend/src/SDKApp.vue +0 -203
  1232. package/templates/native-go-vue/frontend/src/jobs/InteractiveJobForm.vue +0 -70
  1233. package/templates/native-go-vue/frontend/src/jobs/JobsAdminPanel.vue +0 -33
  1234. package/templates/native-go-vue/frontend/src/jobs/JobsPanel.vue +0 -135
  1235. package/templates/native-go-vue/frontend/src/jobs/connected-provider.ts +0 -179
  1236. package/templates/native-go-vue/frontend/src/jobs/i18n/de.json +0 -62
  1237. package/templates/native-go-vue/frontend/src/jobs/i18n/en.json +0 -62
  1238. package/templates/native-go-vue/frontend/src/jobs/i18n/es.json +0 -62
  1239. package/templates/native-go-vue/frontend/src/jobs/i18n/fr.json +0 -62
  1240. package/templates/native-go-vue/frontend/src/jobs/i18n/it.json +0 -62
  1241. package/templates/native-go-vue/frontend/src/jobs/i18n/ja.json +0 -62
  1242. package/templates/native-go-vue/frontend/src/jobs/i18n/ko.json +0 -62
  1243. package/templates/native-go-vue/frontend/src/jobs/i18n/zh-CN.json +0 -62
  1244. package/templates/native-go-vue/frontend/src/jobs/i18n/zh-TW.json +0 -62
  1245. package/templates/native-go-vue/frontend/src/jobs/i18n.ts +0 -15
  1246. package/templates/native-go-vue/frontend/src/jobs/mock-provider.ts +0 -67
  1247. package/templates/native-go-vue/frontend/src/jobs/provider.ts +0 -60
  1248. package/templates/native-go-vue/frontend/src/jobs/validate.ts +0 -44
  1249. package/templates/native-go-vue/frontend/src/m2-main.ts +0 -21
  1250. package/templates/native-go-vue/frontend/src/m2-style.css +0 -7
  1251. package/templates/native-go-vue/frontend/src/nas/M2Files.vue +0 -94
  1252. package/templates/native-go-vue/frontend/src/nas/M2PathPicker.vue +0 -70
  1253. package/templates/native-go-vue/frontend/src/nas/M2Settings.vue +0 -69
  1254. package/templates/native-go-vue/frontend/src/nas/NasGrantSettings.vue +0 -74
  1255. package/templates/native-go-vue/frontend/src/nas/NasPathPicker.vue +0 -106
  1256. package/templates/native-go-vue/frontend/src/nas/NasUnavailable.vue +0 -20
  1257. package/templates/native-go-vue/frontend/src/nas/i18n/de.json +0 -74
  1258. package/templates/native-go-vue/frontend/src/nas/i18n/en.json +0 -74
  1259. package/templates/native-go-vue/frontend/src/nas/i18n/es.json +0 -74
  1260. package/templates/native-go-vue/frontend/src/nas/i18n/fr.json +0 -74
  1261. package/templates/native-go-vue/frontend/src/nas/i18n/it.json +0 -74
  1262. package/templates/native-go-vue/frontend/src/nas/i18n/ja.json +0 -74
  1263. package/templates/native-go-vue/frontend/src/nas/i18n/ko.json +0 -74
  1264. package/templates/native-go-vue/frontend/src/nas/i18n/m2/de.json +0 -56
  1265. package/templates/native-go-vue/frontend/src/nas/i18n/m2/en.json +0 -56
  1266. package/templates/native-go-vue/frontend/src/nas/i18n/m2/es.json +0 -56
  1267. package/templates/native-go-vue/frontend/src/nas/i18n/m2/fr.json +0 -56
  1268. package/templates/native-go-vue/frontend/src/nas/i18n/m2/it.json +0 -56
  1269. package/templates/native-go-vue/frontend/src/nas/i18n/m2/ja.json +0 -56
  1270. package/templates/native-go-vue/frontend/src/nas/i18n/m2/ko.json +0 -56
  1271. package/templates/native-go-vue/frontend/src/nas/i18n/m2/zh-CN.json +0 -56
  1272. package/templates/native-go-vue/frontend/src/nas/i18n/m2/zh-TW.json +0 -56
  1273. package/templates/native-go-vue/frontend/src/nas/i18n/zh-CN.json +0 -74
  1274. package/templates/native-go-vue/frontend/src/nas/i18n/zh-TW.json +0 -74
  1275. package/templates/native-go-vue/frontend/src/nas/m2-contract.ts +0 -33
  1276. package/templates/native-go-vue/frontend/src/nas/m2-i18n.ts +0 -24
  1277. package/templates/native-go-vue/frontend/src/nas/m2-provider.ts +0 -104
  1278. package/templates/native-go-vue/frontend/src/nas/mock-provider.ts +0 -119
  1279. package/templates/native-go-vue/frontend/src/nas/use-m2-request.ts +0 -18
  1280. package/templates/native-go-vue/frontend/src/sdk-main.ts +0 -39
  1281. package/templates/native-go-vue/frontend/test/jobs-connected.test.ts +0 -163
  1282. package/templates/native-go-vue/frontend/test/jobs-preview.html +0 -22
  1283. package/templates/native-go-vue/frontend/test/jobs.test.ts +0 -176
  1284. package/templates/native-go-vue/frontend/test/m2-preview.html +0 -27
  1285. package/templates/native-go-vue/frontend/test/m2-provider.test.ts +0 -87
  1286. package/templates/native-go-vue/frontend/test/m2-ui.test.ts +0 -209
  1287. package/templates/native-go-vue/frontend/test/nas-provider.test.ts +0 -81
  1288. package/templates/native-go-vue/frontend/test/nas-request.test.ts +0 -21
  1289. package/templates/native-go-vue/frontend/test/nas-ui.test.ts +0 -261
  1290. package/templates/native-go-vue/frontend/test/picker-wire.test.ts +0 -110
  1291. package/templates/native-go-vue/frontend/test/shell-preview.html +0 -19
  1292. package/templates/native-go-vue/frontend/test/shell-sdk.test.ts +0 -73
  1293. /package/dist/templates/{hello-files → compose}/compose.yaml +0 -0
  1294. /package/dist/templates/{hello-files → compose}/synology-app.yaml +0 -0
  1295. /package/dist/templates/{native-go-background → native-go-jobs}/backend/internal/app/background_on.go +0 -0
  1296. /package/dist/templates/{native-go-background → native-go-jobs}/frontend/src/background/i18n.ts +0 -0
  1297. /package/templates/{hello-files → compose}/compose.yaml +0 -0
  1298. /package/templates/{hello-files → compose}/synology-app.yaml +0 -0
  1299. /package/templates/{native-go-background → native-go-jobs}/backend/internal/app/background_on.go +0 -0
  1300. /package/templates/{native-go-background → native-go-jobs}/frontend/src/background/i18n.ts +0 -0
@@ -0,0 +1,73 @@
1
+ package filestation
2
+
3
+ import (
4
+ "context"
5
+ "dsmapp/internal/api"
6
+ "io"
7
+ "net/http"
8
+ )
9
+
10
+ // Files is the operation set shared by live requests and delegated jobs.
11
+ // Construct a RequestContext at the authenticated CGI boundary; never persist it.
12
+ type Files interface {
13
+ List(context.Context, string, ListOptions) (Page, error)
14
+ Info(context.Context, string) (Entry, error)
15
+ CreateFolder(context.Context, string, string) error
16
+ CheckPermission(context.Context, string) error
17
+ Write(context.Context, string, string, io.Reader, int64) error
18
+ }
19
+ type RequestContext struct {
20
+ Caller api.Caller
21
+ Request *http.Request
22
+ Service *Service
23
+ }
24
+
25
+ func (r RequestContext) Files() Files { return sessionFiles{r} }
26
+
27
+ type sessionFiles struct{ RequestContext }
28
+
29
+ func (s sessionFiles) List(ctx context.Context, p string, o ListOptions) (Page, error) {
30
+ return s.Service.List(ctx, s.Caller, s.Request, p, o)
31
+ }
32
+ func (s sessionFiles) Info(ctx context.Context, p string) (Entry, error) {
33
+ return s.Service.Info(ctx, s.Caller, s.Request, p)
34
+ }
35
+ func (s sessionFiles) CreateFolder(ctx context.Context, p, n string) error {
36
+ return s.Service.CreateFolder(ctx, s.Caller, s.Request, p, n)
37
+ }
38
+ func (s sessionFiles) Write(ctx context.Context, p, n string, r io.Reader, size int64) error {
39
+ return s.Service.Upload(ctx, s.Caller, s.Request, p, n, r, size)
40
+ }
41
+ func (s sessionFiles) CheckPermission(ctx context.Context, p string) error {
42
+ if e := s.Service.verify(ctx, s.Caller, s.Request); e != nil {
43
+ return e
44
+ }
45
+ // Kept outside DSMClient so existing session providers need no new methods.
46
+ checker, ok := s.Service.client.(interface {
47
+ CheckPermission(context.Context, *http.Request, string) error
48
+ })
49
+ if !ok {
50
+ return fail("unsupported")
51
+ }
52
+ return checker.CheckPermission(ctx, s.Request, p)
53
+ }
54
+ func (c *Client) CheckPermission(ctx context.Context, r *http.Request, p string) error {
55
+ if !validPath(p) {
56
+ return fail("invalid-request")
57
+ }
58
+ v := fields("SYNO.FileStation.CheckPermission", "write", "3")
59
+ v.Set("path", p)
60
+ v.Set("filename", ".synopkgland-permission-probe")
61
+ v.Set("overwrite", "false")
62
+ v.Set("size", "0")
63
+ var out struct {
64
+ Skip *bool `json:"blSkip"`
65
+ }
66
+ if e := c.call(ctx, r, v, &out); e != nil {
67
+ return e
68
+ }
69
+ if out.Skip == nil || *out.Skip {
70
+ return fail("denied")
71
+ }
72
+ return nil
73
+ }
@@ -0,0 +1,59 @@
1
+ package filestation
2
+
3
+ import (
4
+ "context"
5
+ "dsmapp/internal/api"
6
+ "fmt"
7
+ "net/http"
8
+ "testing"
9
+ )
10
+
11
+ func TestRequestFilesCheckUsesCurrentSessionAndRefusesMismatchedSubject(t *testing.T) {
12
+ checks := 0
13
+ client := fakeClient(t, func(w http.ResponseWriter, r *http.Request) {
14
+ r.ParseForm()
15
+ if r.Header.Get("Cookie") != "id=test-session" {
16
+ t.Error("cookie changed")
17
+ }
18
+ if r.Form.Get("api") == "SYNO.Core.NormalUser" {
19
+ fmt.Fprint(w, `{"success":true,"data":{"username":"alice"}}`)
20
+ return
21
+ }
22
+ checks++
23
+ if r.Form.Get("api") != "SYNO.FileStation.CheckPermission" || r.Form.Get("method") != "write" || r.Form.Get("path") != "/home" {
24
+ t.Error(r.Form)
25
+ }
26
+ fmt.Fprint(w, `{"success":false,"error":{"code":407}}`)
27
+ })
28
+ files := RequestContext{Service: NewService(client), Request: sessionRequest(), Caller: callerFor(t, "alice")}.Files()
29
+ if e := files.CheckPermission(context.Background(), "/home"); e == nil {
30
+ t.Fatal("DSM refusal lost")
31
+ }
32
+ files = RequestContext{Service: NewService(client), Request: sessionRequest(), Caller: callerFor(t, "bob")}.Files()
33
+ if e := files.CheckPermission(context.Background(), "/home"); e == nil {
34
+ t.Fatal("mismatched subject accepted")
35
+ }
36
+ if checks != 1 {
37
+ t.Fatal("mismatched request reached DSM file operation")
38
+ }
39
+ var _ Files = RequestContext{Caller: api.Caller{}}.Files()
40
+ }
41
+
42
+ func TestCheckPermissionRequiresExplicitNonSkipResult(t *testing.T) {
43
+ for _, data := range []string{`{}`, `{"blSkip":true}`} {
44
+ client := fakeClient(t, func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, `{"success":true,"data":%s}`, data) })
45
+ if e := client.CheckPermission(context.Background(), sessionRequest(), "/home"); e == nil {
46
+ t.Fatal("permission inferred from success:true")
47
+ }
48
+ }
49
+ client := fakeClient(t, func(w http.ResponseWriter, r *http.Request) {
50
+ r.ParseForm()
51
+ if r.Form.Get("filename") != ".synopkgland-permission-probe" || r.Form.Get("overwrite") != "false" || r.Form.Get("size") != "0" {
52
+ t.Error("missing fixed permission probe fields")
53
+ }
54
+ fmt.Fprint(w, `{"success":true,"data":{"blSkip":false}}`)
55
+ })
56
+ if e := client.CheckPermission(context.Background(), sessionRequest(), "/home"); e != nil {
57
+ t.Fatal(e)
58
+ }
59
+ }
@@ -0,0 +1,10 @@
1
+ <script setup lang="ts">
2
+ import type {Context} from './context'
3
+ import ExecutorSettings from './delegate/ExecutorSettings.vue'
4
+ import DelegatePanel from './delegate/DelegatePanel.vue'
5
+ defineProps<{ctx:Context;admin:boolean}>()
6
+ </script>
7
+ <template>
8
+ <ExecutorSettings :admin="admin" :locale="ctx.locale" />
9
+ <DelegatePanel :ctx="ctx" />
10
+ </template>
@@ -0,0 +1,70 @@
1
+ <script setup lang="ts">
2
+ import {computed,onBeforeUnmount,onMounted,ref,watch} from 'vue'
3
+ import {Button,Callout,Form,FormActions,FormItem,Input,SettingsSection} from '@synopackageland/ui'
4
+ import type {Context} from '../context'
5
+ import NasPicker from '../nas/NasPicker.vue'
6
+ import {createNasProvider} from '../nas/provider'
7
+ import type {CapabilityStatus} from './executor-setup'
8
+ import {delegateCopy,errorCopy} from './copy'
9
+ interface Grant{delegation_id:string;job_id:string;path:string;expires_at:string;revoked?:boolean}
10
+ interface Job{id:string;name:string;state:'waiting_executor'|'queued'|'running'|'succeeded'|'failed'|'canceled'|'interrupted'}
11
+ const props=defineProps<{ctx:Pick<Context,'call'|'locale'>}>()
12
+ const copy=computed(()=>delegateCopy(props.ctx.locale)),provider=createNasProvider(props.ctx)
13
+ const status=ref<CapabilityStatus>(),grants=ref<Grant[]>([]),jobs=ref<Job[]>([]),busy=ref(false),error=ref<unknown>(),notice=ref(''),picking=ref(false),dest=ref(''),url=ref(''),name=ref('')
14
+ let disposed=false,timer:ReturnType<typeof setInterval>|undefined,submissionKey:string|undefined
15
+ watch([url,dest,name],()=>{submissionKey=undefined},{flush:'sync'})
16
+ const pending=(j:Job)=>['queued','running','waiting_executor'].includes(j.state)
17
+ const waitingForExecutor=computed(()=>jobs.value.some(j=>j.state==='waiting_executor'))
18
+ const startupCodes=['EXECUTOR_UNAVAILABLE','EXECUTOR_TIMEOUT']
19
+ const waitingError=computed(()=>waitingForExecutor.value&&startupCodes.includes((error.value as {code?:string})?.code??''))
20
+ const showCapability=computed(()=>status.value&&status.value.state!=='ready'&&!(waitingForExecutor.value&&status.value.state==='needs-admin-approval'&&startupCodes.includes(status.value.reason??'')))
21
+ async function refresh(){
22
+ if(disposed)return
23
+ const [capability,list,work]=await Promise.allSettled([props.ctx.call<CapabilityStatus>('delegate.status'),props.ctx.call<{delegations:Grant[]}>('delegate.list'),props.ctx.call<{jobs:Job[]}>('delegate.jobs.list')])
24
+ if(disposed)return
25
+ if(capability.status==='fulfilled')status.value=capability.value
26
+ if(list.status==='fulfilled')grants.value=(list.value.delegations??[]).filter(g=>!g.revoked)
27
+ if(work.status==='fulfilled')jobs.value=work.value.jobs??[]
28
+ for(const result of [capability,list,work])if(result.status==='rejected')throw result.reason
29
+ }
30
+ async function action(work:()=>Promise<unknown>){if(busy.value||disposed)return;busy.value=true;error.value=undefined;try{await work()}catch(e){if(!disposed)error.value=e}finally{if(!disposed)busy.value=false}}
31
+ const reload=()=>action(refresh)
32
+ const revoke=(id:string)=>action(async()=>{await props.ctx.call('delegate.revoke',{delegation_id:id});await refresh()})
33
+ const cancel=(id:string)=>action(async()=>{const out=await props.ctx.call<{revocation_pending:boolean}>('delegate.jobs.cancel',{id});if(!disposed)notice.value=out.revocation_pending?copy.value.pending:'';await refresh()})
34
+ const canSubmit=computed(()=>status.value?.state==='ready'&&!!dest.value&&!!url.value&&!!name.value)
35
+ const submit=()=>action(async()=>{if(!canSubmit.value)return;await props.ctx.call('delegate.jobs.submit',{key:submissionKey??(submissionKey=crypto.randomUUID()),url:url.value,dest:dest.value,name:name.value});if(!disposed){url.value='';name.value='';dest.value=''};await refresh()})
36
+ const time=(date:string)=>{const d=new Date(date);return Number.isNaN(d.getTime())?'—':d.toLocaleString(props.ctx.locale)}
37
+ onMounted(()=>{void reload();timer=setInterval(()=>{if(jobs.value.some(pending))void reload()},3000)})
38
+ onBeforeUnmount(()=>{disposed=true;if(timer)clearInterval(timer);provider.dispose()})
39
+ </script>
40
+ <template>
41
+ <SettingsSection :title="copy.title" :collapsible="false" :aria-busy="busy" class="delegate-panel">
42
+ <p>{{ copy.help }}</p>
43
+ <Callout v-if="error&&!waitingError" tone="danger" role="alert">{{ errorCopy(error,copy) }}</Callout>
44
+ <p v-if="notice" role="status">{{ notice }}</p>
45
+ <p v-if="showCapability" role="status">{{ status?.state==='needs-admin-approval'?copy.needs:copy.blocked }}</p>
46
+ <Form @submit.prevent="submit">
47
+ <FormItem :label="copy.url" label-for="delegate-url"><Input id="delegate-url" v-model="url" type="url" :disabled="busy||status?.state!=='ready'" /></FormItem>
48
+ <FormItem :label="copy.name" label-for="delegate-name"><Input id="delegate-name" v-model="name" data-file-name :disabled="busy||status?.state!=='ready'" /></FormItem>
49
+ <p>{{ copy.size }}</p>
50
+ <p v-if="dest" role="status" class="destination">{{ copy.destination }}: {{ dest }}</p>
51
+ <FormActions><Button type="button" variant="secondary" :disabled="busy||status?.state!=='ready'" @click="picking=true">{{ copy.choose }}</Button><Button type="submit" variant="primary" :disabled="busy||!canSubmit">{{ copy.submit }}</Button></FormActions>
52
+ </Form>
53
+ <NasPicker v-model:open="picking" :locale="ctx.locale" :provider="provider" mode="folder" @selected="dest=$event" />
54
+ <div class="section-heading"><h3>{{ copy.downloads }}</h3><Button variant="secondary" :disabled="busy" @click="reload">{{ copy.refresh }}</Button></div>
55
+ <p v-if="!jobs.length&&!error">{{ copy.noJobs }}</p>
56
+ <ul v-else class="records"><li v-for="job in jobs" :key="job.id" :data-job-state="job.state"><span :role="job.state==='waiting_executor'?'status':undefined">{{ job.name }} · {{ copy[job.state] }}</span><Button v-if="pending(job)" variant="secondary" :disabled="busy" @click="cancel(job.id)">{{ copy.cancel }}</Button></li></ul>
57
+ <h3>{{ copy.delegations }}</h3>
58
+ <p v-if="!grants.length&&!error">{{ copy.noDelegations }}</p>
59
+ <ul v-else class="records"><li v-for="grant in grants" :key="grant.delegation_id"><div><strong>{{ grant.path }}</strong><p>{{ copy.expires }}: {{ time(grant.expires_at) }}</p></div><Button variant="secondary" :disabled="busy" @click="revoke(grant.delegation_id)">{{ copy.revoke }}</Button></li></ul>
60
+ </SettingsSection>
61
+ </template>
62
+ <style scoped>
63
+ .delegate-panel {min-width:0;overflow-wrap:anywhere;}
64
+ h3 {font-size:var(--ui-font-size-base,14px);font-weight:600;margin:var(--ui-space-6,24px) 0 var(--ui-space-3,12px);}
65
+ .section-heading {display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-3,12px);}
66
+ .records {list-style:none;padding:0;margin:0;}
67
+ .records li {display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-3,12px);padding-block:var(--ui-space-4,16px);border-bottom:1px solid var(--ui-border);}
68
+ .records li>div,.records li>span,.destination {min-width:0;max-width:100%;overflow-wrap:anywhere;}
69
+ .records p {margin:var(--ui-space-2,8px) 0 0;}
70
+ </style>
@@ -0,0 +1,9 @@
1
+ import en from './i18n/en.json'
2
+ import zh from './i18n/zh-TW.json'
3
+ import waiting from './i18n/waiting.json'
4
+ export function delegateCopy(locale='en'){
5
+ const language=locale.toLowerCase().replaceAll('_','-')
6
+ const key=language.startsWith('zh')?(language.startsWith('zh-cn')||language.startsWith('zh-hans')?'zh-CN':'zh-TW'):language.split('-')[0]
7
+ return {...(language.startsWith('zh')?zh:en),waiting_executor:waiting[key as keyof typeof waiting]??waiting.en}
8
+ }
9
+ export function errorCopy(error:unknown,copy:typeof en){const code=(error as {code?:string})?.code;return ['session_required','AUTH_DENIED'].includes(code??'')?copy.session:['DENIED','SCOPE_DENIED','PERMISSION_DENIED','APP_DENIED','INELIGIBLE','denied'].includes(code??'')?copy.denied:copy.error}
@@ -0,0 +1,11 @@
1
+ {
2
+ "en": "Waiting for system services to start",
3
+ "zh-TW": "等待系統服務啟動",
4
+ "zh-CN": "等待系统服务启动",
5
+ "de": "Warten auf den Start der Systemdienste",
6
+ "es": "Esperando a que se inicien los servicios del sistema",
7
+ "fr": "En attente du démarrage des services système",
8
+ "it": "In attesa dell’avvio dei servizi di sistema",
9
+ "ja": "システムサービスの起動を待っています",
10
+ "ko": "시스템 서비스 시작을 기다리는 중"
11
+ }
@@ -0,0 +1,130 @@
1
+ // @vitest-environment jsdom
2
+ import {afterEach,expect,test,vi} from 'vitest'
3
+ import {createApp,h,nextTick} from 'vue'
4
+ import {AppRoot} from '@synopackageland/ui'
5
+ import DelegatePanel from '../src/delegate/DelegatePanel.vue'
6
+ import ExecutorSettings from '../src/delegate/ExecutorSettings.vue'
7
+ import waitingMessages from '../src/delegate/i18n/waiting.json'
8
+ import {ExecutorSetupKey,type ExecutorSetup} from '../src/delegate/executor-setup'
9
+ const disposers:Array<()=>void>=[]
10
+ afterEach(()=>disposers.splice(0).forEach(fn=>fn()))
11
+ async function settle(){for(let i=0;i<25;i++){await Promise.resolve();await nextTick()}}
12
+ function mount(component:any,props:Record<string,unknown>,setup?:ExecutorSetup){const root=document.createElement('div');document.body.append(root);const app=createApp({render:()=>h(AppRoot,{},()=>h(component,props))});if(setup)app.provide(ExecutorSetupKey,setup);app.mount(root);disposers.push(()=>{app.unmount();root.remove()});return root}
13
+ function button(root:HTMLElement,label:string){const b=Array.from(root.querySelectorAll('button')).find(b=>b.textContent?.trim()===label||b.getAttribute('aria-label')===label);expect(b,label).toBeTruthy();return b!}
14
+ const context=(call:any)=>({call,locale:'en'})
15
+ test('personal delegation list revokes only its selected ID and refreshes',async()=>{
16
+ let revoked=false
17
+ const call=vi.fn(async(method:string)=>{if(method==='delegate.status')return {state:'ready'};if(method==='delegate.jobs.list')return {jobs:[]};if(method==='delegate.list')return {delegations:revoked?[]:[{delegation_id:'d1',job_id:'j1',path:'/home/Downloads',expires_at:'2030-01-01T00:00:00Z'}]};if(method==='delegate.revoke'){revoked=true;return {revoked:true}};throw {code:'unknown_method'}})
18
+ const root=mount(DelegatePanel,{ctx:context(call)});await settle();expect(root.textContent).toContain('/home/Downloads');button(root,'Revoke').click();await settle();expect(call).toHaveBeenCalledWith('delegate.revoke',{delegation_id:'d1'});expect(root.textContent).toContain('You have no active delegations.')
19
+ })
20
+ test('errors hide executor messages and retain a retry action',async()=>{
21
+ const call=vi.fn(async()=>{throw {code:'DENIED',message:'secret SID'}}),root=mount(DelegatePanel,{ctx:context(call)});await settle();expect(root.querySelector('[role="alert"]')).toBeTruthy();expect(root.textContent).not.toContain('secret SID');button(root,'Refresh').click();await settle();expect(call.mock.calls.length).toBeGreaterThan(1)
22
+ })
23
+ test('administrator setup uses only status and authorize and clears password',async()=>{
24
+ const setup:ExecutorSetup={control:vi.fn(async()=>({state:'ready'})),status:vi.fn(async()=>({state:'needs-admin-approval'})),authorize:vi.fn(async()=>({state:'ready'}))}
25
+ const root=mount(ExecutorSettings,{admin:true},setup);await settle();const password=root.querySelector('input[type="password"]') as HTMLInputElement;expect(password).toBeTruthy();password.value='once';password.dispatchEvent(new Event('input',{bubbles:true}));await settle();root.querySelector('form')!.dispatchEvent(new Event('submit',{bubbles:true,cancelable:true}));await settle();expect(setup.authorize).toHaveBeenCalledWith('once');expect(root.querySelector('input[type="password"]')).toBeNull();expect(root.textContent).toContain('Background file access is ready.')
26
+ })
27
+ test('ordinary users never call setup or see a password field',async()=>{
28
+ const setup:ExecutorSetup={control:vi.fn(async()=>({state:'ready'})),status:vi.fn(async()=>({state:'ready'})),authorize:vi.fn(async()=>({state:'ready'}))};const root=mount(ExecutorSettings,{admin:false},setup);await settle();expect(setup.status).not.toHaveBeenCalled();expect(root.querySelector('input')).toBeNull()
29
+ })
30
+ test('setup failures erase the entered password and explain recovery',async()=>{
31
+ const setup:ExecutorSetup={control:vi.fn(async()=>({state:'ready'})),status:vi.fn(async()=>({state:'needs-admin-approval'})),authorize:vi.fn(async()=>{throw {code:'DENIED',message:'secret'}})};const root=mount(ExecutorSettings,{admin:true},setup);await settle();const password=root.querySelector('input')!;password.value='once';password.dispatchEvent(new Event('input',{bubbles:true}));await settle();root.querySelector('form')!.dispatchEvent(new Event('submit',{bubbles:true,cancelable:true}));await settle();expect(password.value).toBe('');expect(root.textContent).not.toContain('secret');expect(root.querySelector('[role="alert"]')).toBeTruthy()
32
+ })
33
+ test('download requires a folder selected through the existing NAS picker',async()=>{
34
+ const call=vi.fn(async(method:string)=>{if(method==='delegate.status')return {state:'ready'};if(method==='delegate.list')return {delegations:[]};if(method==='delegate.jobs.list')return {jobs:[]};if(method==='nas.files.shares')return {shares:[{name:'home',path:'/home',isdir:true}],total:1,offset:0};if(method==='delegate.jobs.submit')return {id:'job1'};throw {code:'unknown_method'}})
35
+ const root=mount(DelegatePanel,{ctx:context(call)});await settle();const url=root.querySelector('input[type="url"]')!;url.value='https://example.com/file';url.dispatchEvent(new Event('input',{bubbles:true}));const name=root.querySelector('input[data-file-name]')!;name.value='file.txt';name.dispatchEvent(new Event('input',{bubbles:true}));await settle();expect(button(root,'Download to my folder').disabled).toBe(true);button(root,'Choose folder').click();await settle();const picker=document.body;button(picker,'Select home').click();await settle();button(picker,'Confirm selection').click();await settle();button(root,'Download to my folder').click();await settle();const submitted=call.mock.calls.find(([m])=>m==='delegate.jobs.submit');expect(submitted).toBeTruthy();expect((submitted as unknown as [string,any])[1]).toMatchObject({url:'https://example.com/file',dest:'/home',name:'file.txt'})
36
+ })
37
+
38
+ test('an unavailable delegation list still displays approval status and owner jobs',async()=>{
39
+ const call=vi.fn(async(method:string)=>{if(method==='delegate.status')return {state:'needs-admin-approval'};if(method==='delegate.jobs.list')return {jobs:[{id:'j',name:'file.txt',state:'queued'}]};throw {code:'EXECUTOR_UNAVAILABLE'}})
40
+ const root=mount(DelegatePanel,{ctx:context(call)});await settle();expect(root.textContent).toContain('An administrator must approve background file access.');expect(root.textContent).toContain('file.txt');expect(root.querySelector('[role="alert"]')).toBeTruthy()
41
+ })
42
+ test('retrying an uncertain submission reuses the original idempotency key',async()=>{
43
+ let attempts=0
44
+ const call=vi.fn(async(method:string)=>{if(method==='delegate.status')return {state:'ready'};if(method==='delegate.list')return {delegations:[]};if(method==='delegate.jobs.list')return {jobs:[]};if(method==='nas.files.shares')return {shares:[{name:'home',path:'/home',isdir:true}],total:1,offset:0};if(method==='delegate.jobs.submit'){attempts++;if(attempts===1)throw {code:'commit-uncertain'};return {id:'j'}};throw {code:'unknown_method'}})
45
+ const root=mount(DelegatePanel,{ctx:context(call)});await settle();const url=root.querySelector('input[type="url"]')!;url.value='https://example.com/file';url.dispatchEvent(new Event('input',{bubbles:true}));const name=root.querySelector('input[data-file-name]')!;name.value='file';name.dispatchEvent(new Event('input',{bubbles:true}));await settle();button(root,'Choose folder').click();await settle();button(document.body,'Select home').click();await settle();button(document.body,'Confirm selection').click();await settle();button(root,'Download to my folder').click();await settle();button(root,'Download to my folder').click();await settle();const submissions=call.mock.calls.filter(([m])=>m==='delegate.jobs.submit') as unknown as Array<[string,{key:string}]>;expect(submissions).toHaveLength(2);expect(submissions[0][1].key).toBe(submissions[1][1].key)
46
+ })
47
+
48
+ test('generated app mount forwards ctx.executor to admin setup and renders ordinary delegation UI',async()=>{
49
+ const {mount:mountApp}=await import('../src/main')
50
+ for(const admin of [true,false]){
51
+ const status=vi.fn(async()=>({state:'needs-admin-approval' as const}))
52
+ const authorize=vi.fn(async()=>({state:'ready' as const}))
53
+ const call=vi.fn(async(method:string)=>{
54
+ if(method==='app.status')return {package:'DelegateApp',version:'1',user:admin?'admin':'alice',admin}
55
+ if(method==='greeting.get')return {text:'Hello'}
56
+ if(method==='delegate.status')return {state:'needs-admin-approval'}
57
+ if(method==='delegate.list')return {delegations:[]}
58
+ if(method==='delegate.jobs.list')return {jobs:[]}
59
+ throw {code:'unknown_method'}
60
+ })
61
+ const root=document.createElement('div');document.body.append(root)
62
+ const app=mountApp(root,{locale:'en',call,reopen:()=>()=>{},executor:{status,authorize,control:vi.fn(async()=>({state:'ready' as const}))}} as any)
63
+ disposers.push(()=>{app.unmount();root.remove()});await settle()
64
+ expect(root.textContent).toContain('You have no active delegations.')
65
+ if(admin){
66
+ expect(status).toHaveBeenCalled()
67
+ const password=root.querySelector('input[type=password]')! as HTMLInputElement
68
+ password.value='one-time';password.dispatchEvent(new Event('input',{bubbles:true}));await settle()
69
+ password.closest('form')!.dispatchEvent(new Event('submit',{bubbles:true,cancelable:true}));await settle()
70
+ expect(authorize).toHaveBeenCalledWith('one-time')
71
+ }else{
72
+ expect(status).not.toHaveBeenCalled()
73
+ expect(root.querySelector('input[type=password]')).toBeNull()
74
+ expect(call).not.toHaveBeenCalledWith('greeting.get',undefined)
75
+ expect(root.querySelector('textarea')).toBeNull()
76
+ }
77
+ }
78
+ })
79
+
80
+ test.each(Object.entries(waitingMessages))('waiting jobs show startup status and remain cancelable in %s',async(locale,message)=>{
81
+ const {delegateCopy}=await import('../src/delegate/copy')
82
+ const call=vi.fn(async(method:string)=>{
83
+ if(method==='delegate.status')return {state:'needs-admin-approval',reason:'EXECUTOR_UNAVAILABLE'}
84
+ if(method==='delegate.jobs.list')return {jobs:[{id:'waiting',name:'file.txt',state:'waiting_executor'}]}
85
+ if(method==='delegate.jobs.cancel')return {revocation_pending:true}
86
+ throw {code:'EXECUTOR_UNAVAILABLE'}
87
+ })
88
+ const root=mount(DelegatePanel,{ctx:{call,locale}});await settle()
89
+ expect(root.textContent).toContain(message)
90
+ expect(root.querySelector('[role=alert]')).toBeNull()
91
+ expect(root.textContent).not.toContain(delegateCopy(locale).needs)
92
+ button(root,delegateCopy(locale).cancel).click();await settle()
93
+ expect(call).toHaveBeenCalledWith('delegate.jobs.cancel',{id:'waiting'})
94
+ })
95
+
96
+ test('waiting startup status keeps polling until the saved result arrives',async()=>{
97
+ vi.useFakeTimers()
98
+ try{
99
+ let lists=0
100
+ const call=vi.fn(async(method:string)=>{
101
+ if(method==='delegate.status')return {state:'ready'}
102
+ if(method==='delegate.list')return {delegations:[]}
103
+ if(method==='delegate.jobs.list')return {jobs:[{id:'waiting',name:'file.txt',state:++lists===1?'waiting_executor':'succeeded'}]}
104
+ throw {code:'unknown_method'}
105
+ })
106
+ const root=mount(DelegatePanel,{ctx:context(call)});await settle()
107
+ expect(root.querySelector('[data-job-state=waiting_executor]')).toBeTruthy()
108
+ vi.advanceTimersByTime(3000);await settle()
109
+ expect(root.querySelector('[data-job-state=succeeded]')).toBeTruthy()
110
+ expect(root.textContent).toContain('Saved')
111
+ expect(Array.from(root.querySelectorAll('button')).some(b=>b.textContent?.trim()==='Cancel job')).toBe(false)
112
+ }finally{vi.useRealTimers()}
113
+ })
114
+
115
+ test('a waiting job still displays unrelated permission errors',async()=>{
116
+ const call=vi.fn(async(method:string)=>{
117
+ if(method==='delegate.status')return {state:'blocked'}
118
+ if(method==='delegate.jobs.list')return {jobs:[{id:'waiting',name:'file.txt',state:'waiting_executor'}]}
119
+ throw {code:'AUTH_DENIED'}
120
+ })
121
+ const root=mount(DelegatePanel,{ctx:context(call)});await settle()
122
+ expect(root.querySelector('[role=alert]')?.textContent).toContain('Sign in to DSM again')
123
+ expect(root.textContent).toContain('Waiting for system services to start')
124
+ })
125
+
126
+
127
+ test('startup waiting catalog covers exactly nine distinct language messages',()=>{
128
+ expect(Object.keys(waitingMessages).sort()).toEqual(['en','zh-TW','zh-CN','de','es','fr','it','ja','ko'].sort())
129
+ expect(new Set(Object.values(waitingMessages)).size).toBe(9)
130
+ })
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ repo=$(cd "$(dirname "$0")/../../../.." && pwd)
4
+ overlay="$repo/packages/app-cli/templates/native-go-delegate"
5
+ fixture=$(mktemp -d "${TMPDIR:-/tmp}/delegate-ui.XXXXXX")
6
+ trap 'rm -rf "$fixture"' EXIT
7
+ cp -R "$repo/packages/app-cli/templates/native-go-vue/frontend/" "$fixture/"
8
+ cp -R "$repo/packages/app-cli/templates/native-go-jobs/frontend/" "$fixture/"
9
+ cp -R "$overlay/frontend/" "$fixture/"
10
+ # The normal CLI supplies this notices module when it creates a project.
11
+ cp "$repo/packages/app-cli/templates/_shared/third-party-notices.mjs" "$fixture/third-party-notices.mjs"
12
+ (cd "$fixture" && npm ci && npx vitest run test/delegate.test.ts && npm run build)
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env bash
2
+ # Test the overlay as shipped, without editing the base or CLI-owned files.
3
+ set -euo pipefail
4
+ repo=$(cd "$(dirname "$0")/../../../.." && pwd)
5
+ overlay="$repo/packages/app-cli/templates/native-go-delegate"
6
+ fixture=$(mktemp -d "${TMPDIR:-/tmp}/delegate.XXXXXX")
7
+ trap 'rm -rf "$fixture"' EXIT
8
+ cp -R "$repo/packages/app-cli/templates/native-go/backend" "$fixture/backend"
9
+ cp -R "$repo/packages/app-cli/templates/native-go-jobs/backend/" "$fixture/backend/"
10
+ rm "$fixture/backend/internal/app/background_none.go" "$fixture/backend/internal/app/delegate_none.go"
11
+ cp -R "$overlay/backend/" "$fixture/backend/"
12
+ python3 - "$fixture/backend/internal/app/routes_test.go" <<'PYCODE'
13
+ import sys
14
+ from pathlib import Path
15
+ p=Path(sys.argv[1]);s=p.read_text().replace('want := ""','want := sampleOutcome[r.Method()]');p.write_text(s)
16
+ PYCODE
17
+ (cd "$fixture/backend" && go test -race -json ./... > "$overlay/.go-results.json" && go vet ./... && GOOS=linux GOARCH=amd64 go vet ./... && GOOS=linux GOARCH=arm64 go vet ./... && test -z "$(gofmt -l .)")
@@ -0,0 +1,108 @@
1
+ # Background jobs
2
+
3
+ This package opted in with `synopkgland init -t native-go --with jobs`. `dsm-package.yaml` has
4
+ `schema: 2` and `capabilities.jobs: true`. The build adds a package-user worker that DSM
5
+ runs as a systemd user unit. Nothing runs as root, and the CGI never starts a
6
+ process in the background.
7
+
8
+ ## What runs
9
+
10
+ - `conf/resource` is `{"systemd-user-unit":{}}` and `conf/systemd/pkguser-<Package>-background.service`
11
+ starts `target/background/worker`. `start-stop-status` only calls `synosystemctl`.
12
+ - The worker is fixed: `sha256-v1` reads one imported file and writes its SHA-256.
13
+ Replace it by editing `backend/internal/background/runner.go` and bump `WorkerRevision`
14
+ (queued jobs of an older revision become `interrupted`, never replayed).
15
+ - The spool is `/var/packages/<Package>/var/background` (dirs `0700`, files `0600`).
16
+ Limits: 1 job at a time, 16 queued, 512 KiB per file, 16 MiB total, 60 s per job.
17
+ - Job states: `queued → running → succeeded | failed | canceled | interrupted`.
18
+ After a crash or forced stop a running job becomes `interrupted` and is not run again.
19
+
20
+ ## API and ownership
21
+
22
+ `bg.status`, `bg.jobs.purge {owner: {user, uid}}`, `bg.browse {folder?, offset?}`, `bg.jobs.submit {key, folder, relative}`,
23
+ `bg.jobs.list`, `bg.jobs.get {id}`, `bg.jobs.cancel {id}`, `bg.jobs.result {id}`.
24
+
25
+ The panel's **Choose a file** button opens the shared File Station picker, which lists shares and folders
26
+ with `bg.browse`: read-only metadata from the signed-in caller's own DSM session. A pick stores no
27
+ grant and adds no permission; `submit` still re-reads the file through the same session.
28
+
29
+ `submit` copies `relative` below the shared `folder` through the caller's File Station session, so the signed-in
30
+ caller's own DSM permissions decide what can be imported. The job ID is returned
31
+ only after the journal is durable, and `key` makes a retry return the same job.
32
+ No cookie, SynoToken or password is stored. Closing the window or signing out does not
33
+ cancel a job; sign in as the same owner again to read, download or cancel it.
34
+
35
+ ## Access
36
+
37
+ SDK-owned route policies come from `internal/api/sdk-permissions.json`; App
38
+ `permissions.json` cannot override them. Owner routes are authenticated, while
39
+ owner purge and schedule re-enable remain administrators-only.
40
+
41
+ Declaring `capabilities.jobs` makes jobs immediately available to signed-in users;
42
+ no administrator setup is required.
43
+
44
+ ## Ordinary users
45
+
46
+ Signed-in users browse through **their own live File Station session**, import a
47
+ copy, and list/get/cancel/download only their own jobs. Administrators can see and
48
+ cancel all jobs; `bg.jobs.purge` remains admin-only.
49
+
50
+ Owners are matched by both authenticated username and freshly resolved numeric UID.
51
+ An unknown UID refuses owner access and submission with `identity_unavailable`.
52
+ Legacy jobs with an unknown UID remain admin-only. Recreated same-name accounts
53
+ with different UIDs cannot access old jobs. This does not detect reuse of the same
54
+ username **and** UID. Account disablement is enforced by DSM session authentication;
55
+ this feature does not provide a separate account-lifecycle directory service.
56
+
57
+ Idempotency keys are scoped to that owner. Cross-owner and missing IDs both return
58
+ `not_found`. Queue/running counts for ordinary users include only their own jobs.
59
+ Per-owner limits (including administrators): 2 queued/running jobs, 1 MiB of pending
60
+ and retained imported inputs, schedule copies, plus 512 bytes reserved for each pending or retained result. The 16-job/16-MiB
61
+ global bounds and 64 finished-job history remain. Two full 512-KiB inputs exceed the
62
+ owner byte limit because of their result reservations. `owner-queue-full` and
63
+ `owner-quota-exceeded` are distinct from global `queue-full`/`quota-exceeded`.
64
+
65
+ An administrator may explicitly clear an exact owner `{user, uid}` (including
66
+ unknown legacy UIDs). This removes saved results and queued inputs, requests cancel
67
+ for running jobs, and hides those jobs until Finish/Recover drains them. A bounded
68
+ 64-entry audit stores actor, exact owner, time and counts in the durable journal;
69
+ it contains no credentials or input contents. Uninstall retains data by default;
70
+ the existing explicit delete-data wizard remains available.
71
+
72
+ The package copy/result is not recalled when source-file permissions change.
73
+ Offline access under a user's ACL, AD/LDAP UID stability and DSM reboot recovery
74
+ are not claimed. No user credentials are stored.
75
+
76
+ ## Private-copy schedules (S1-a)
77
+
78
+ Import a file and wait for its success, then choose **Schedule this copy** and
79
+ explicitly consent. The package pins a separate copy and digest, without accessing
80
+ File Station offline. `bg.schedules.create {key, jobId, intervalSeconds, consent:true}`
81
+ accepts only 3600, 86400 or 604800 seconds; up to 8 schedules per package.
82
+ `key` is scoped to username/UID and retries the exact definition.
83
+ `bg.schedules.list`, `bg.schedules.disable {id}`, `bg.schedules.delete {id}` are
84
+ owner-scoped; administrators see and can disable/delete all. Only an administrator
85
+ can call `bg.schedules.enable {id, consent:true}` after reviewing the current revision.
86
+ An administrator cannot create a schedule from another owner's imported copy.
87
+
88
+ Successful manual inputs are retained with the bounded 64-job history. Old U1
89
+ results whose input was deleted cannot be scheduled: import again. Copies and
90
+ schedule pins count toward the 1-MiB owner/16-MiB global storage limits; a full
91
+ 512-KiB source plus its pinned copy exceeds the owner limit, so use smaller inputs.
92
+ A scheduled run also needs input/result quota and shares the 2-pending-owner limit.
93
+ At least 4 global queue positions remain available for manual jobs.
94
+
95
+ The package-user worker ticks its journal; no root task, crontab or global service
96
+ is created. `nextAt` and the run's `scheduleId`/`scheduledAt` commit atomically.
97
+ Completed jobs never replay. Each start records overdue ticks as `missed` and
98
+ advances to the next future period. Delays over 5 seconds, a full quota/queue, and
99
+ multi-period gaps are also missed; no catch-up. The latest missed time/reason and
100
+ aggregate missed count are retained, not an unbounded event log. This is neither
101
+ an exact-time nor exactly-once guarantee.
102
+
103
+ Disabling/deleting cancels queued runs and requests running cancellation/drain;
104
+ finished results remain. Clearing an owner also deletes that owner's schedules/pins and drains running jobs. A worker
105
+ revision mismatch disables the schedule (`worker-changed`) and requires explicit
106
+ administrator re-enable; a package build +1 with the same worker revision preserves
107
+ compatible definitions/results. Changed or missing pinned bytes disable the schedule.
108
+ No S1-b share authorization or offline personal ACL reading is provided.
@@ -0,0 +1,90 @@
1
+ package app
2
+
3
+ import (
4
+ "context"
5
+ "dsmapp/internal/api"
6
+ "dsmapp/internal/background"
7
+ "errors"
8
+ "golang.org/x/sys/unix"
9
+ "net/http/httptest"
10
+ "os"
11
+ "path/filepath"
12
+ "strings"
13
+ "testing"
14
+ "time"
15
+ )
16
+
17
+ // Expected domain errors in the SDK policy test for a fresh job store.
18
+ var sampleOutcome = map[string]string{}
19
+
20
+ func init() {
21
+ // The generic route tests need valid params for every background route.
22
+ // The fixture has no DSM cookie; import is refused before reading a file.
23
+ // No jobs or schedules exist in its fresh data directory.
24
+ const id = `{"id":"missing"}`
25
+ sampleParams["bg.jobs.purge"] = `{"owner":{"user":"missing","uid":"9999"}}`
26
+ sampleParams["bg.schedules.list"] = `{}`
27
+ sampleParams["bg.schedules.create"] = `{"key":"schedule","jobId":"missing","intervalSeconds":3600,"consent":true}`
28
+ sampleParams["bg.schedules.disable"] = id
29
+ sampleParams["bg.schedules.delete"] = id
30
+ sampleParams["bg.schedules.enable"] = `{"id":"missing","consent":true}`
31
+ sampleOutcome["bg.schedules.create"] = "not_found"
32
+ sampleOutcome["bg.schedules.disable"] = "not_found"
33
+ sampleOutcome["bg.schedules.delete"] = "not_found"
34
+ sampleOutcome["bg.schedules.enable"] = "not_found"
35
+ sampleParams["bg.status"] = `{}`
36
+ sampleParams["bg.browse"] = `{}`
37
+ sampleParams["bg.jobs.submit"] = `{"key":"k1","folder":"/share","relative":"a.bin"}`
38
+ sampleParams["bg.jobs.list"] = `{}`
39
+ sampleParams["bg.jobs.get"] = id
40
+ sampleParams["bg.jobs.cancel"] = id
41
+ sampleParams["bg.jobs.result"] = id
42
+ sampleOutcome["bg.browse"] = "session_required"
43
+ sampleOutcome["bg.jobs.submit"] = "session_required"
44
+ sampleOutcome["bg.jobs.get"] = "not_found"
45
+ sampleOutcome["bg.jobs.cancel"] = "not_found"
46
+ sampleOutcome["bg.jobs.result"] = "not_found"
47
+ }
48
+
49
+ func TestBackgroundBusyErrorCode(t *testing.T) {
50
+ err := backgroundError(background.ErrBusy)
51
+ var e *api.Error
52
+ if !errors.As(err, &e) || e.Code != "jobs_busy" {
53
+ t.Fatalf("busy mapping: %v", err)
54
+ }
55
+ }
56
+
57
+ func TestBackgroundRequestSubmitBusyAndProductionConstruction(t *testing.T) {
58
+ e := newBgEnv(t)
59
+ dir := filepath.Join(t.TempDir(), "background")
60
+ e.store = background.NewRequestStore(dir)
61
+ if _, err := e.store.List(context.Background()); err != nil {
62
+ t.Fatal(err)
63
+ }
64
+ f, err := os.OpenFile(filepath.Join(dir, "lock"), os.O_RDWR, 0)
65
+ if err != nil {
66
+ t.Fatal(err)
67
+ }
68
+ defer f.Close()
69
+ if err := unix.Flock(int(f.Fd()), unix.LOCK_EX|unix.LOCK_NB); err != nil {
70
+ t.Fatal(err)
71
+ }
72
+ defer unix.Flock(int(f.Fd()), unix.LOCK_UN)
73
+ start := time.Now()
74
+ code, out := e.call(alice, "bg.jobs.submit", bgSample["bg.jobs.submit"])
75
+ if code != "jobs_busy" || time.Since(start) > background.RequestLockTimeout+time.Second {
76
+ t.Fatalf("busy submit: %s %+v", code, out)
77
+ }
78
+ // The actual production assembly must use the same bounded wait policy.
79
+ srv, err := api.NewServerWithPermissions(alice, []byte(`{"schema":1,"default":"administrators","methods":{}}`), BackgroundRoutes(filepath.Dir(dir))...)
80
+ if err != nil {
81
+ t.Fatal(err)
82
+ }
83
+ r := httptest.NewRequest("POST", "/api.cgi", strings.NewReader(`{"method":"bg.jobs.list","params":{}}`))
84
+ r.Header.Set("Content-Type", "application/json")
85
+ w := httptest.NewRecorder()
86
+ srv.ServeHTTP(w, r)
87
+ if !strings.Contains(w.Body.String(), `"jobs_busy"`) {
88
+ t.Fatal(w.Body.String())
89
+ }
90
+ }