@synopackageland/cli 0.3.10 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (641) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -9
  3. package/dist/bin.js +1 -2
  4. package/dist/build-spk/generator.d.ts +0 -3
  5. package/dist/build-spk/generator.js +138 -287
  6. package/dist/build-spk/native-lifecycle.js +0 -3
  7. package/dist/build-spk/native-payload.js +0 -1
  8. package/dist/build-spk/notices.d.ts +5 -0
  9. package/dist/build-spk/notices.js +60 -0
  10. package/dist/cli.js +178 -151
  11. package/dist/compose/analyze.d.ts +1 -2
  12. package/dist/compose/analyze.js +5 -48
  13. package/dist/contract/unsupported-types.d.ts +10 -0
  14. package/dist/contract/unsupported-types.js +49 -0
  15. package/dist/contract/validate.js +25 -2
  16. package/dist/contract/web-launch.js +0 -2
  17. package/dist/deploy/deploy.d.ts +1 -4
  18. package/dist/deploy/deploy.js +45 -156
  19. package/dist/deploy/homes-values.js +1 -1
  20. package/dist/deploy/plan.d.ts +18 -0
  21. package/dist/deploy/plan.js +54 -0
  22. package/dist/deploy/spk-version.d.ts +2 -14
  23. package/dist/deploy/spk-version.js +25 -111
  24. package/dist/dev.d.ts +1 -3
  25. package/dist/dev.js +14 -28
  26. package/dist/error-registry.js +830 -862
  27. package/dist/host/dsm-client.js +12 -272
  28. package/dist/host/dsm-port-profile.d.ts +0 -1
  29. package/dist/host/dsm-port-profile.js +0 -2
  30. package/dist/host/types.d.ts +1 -83
  31. package/dist/index.d.ts +0 -9
  32. package/dist/index.js +0 -6
  33. package/dist/info.d.ts +0 -1
  34. package/dist/info.js +3 -10
  35. package/dist/init.d.ts +15 -1
  36. package/dist/init.js +128 -12
  37. package/dist/log.js +2 -3
  38. package/dist/native/validate.js +0 -1
  39. package/dist/standalone/binary.d.ts +9 -0
  40. package/dist/standalone/binary.js +67 -0
  41. package/dist/standalone/build.d.ts +25 -0
  42. package/dist/standalone/build.js +110 -0
  43. package/dist/standalone/daemon.d.ts +23 -0
  44. package/dist/standalone/daemon.js +114 -0
  45. package/dist/standalone/dsm-window.d.ts +26 -0
  46. package/dist/standalone/dsm-window.js +291 -0
  47. package/dist/standalone/helper-inventory.d.ts +16 -0
  48. package/dist/standalone/helper-inventory.js +2 -0
  49. package/dist/standalone/helper.d.ts +21 -0
  50. package/dist/standalone/helper.js +105 -0
  51. package/dist/standalone/host-adapter.d.ts +5 -0
  52. package/dist/standalone/host-adapter.js +148 -0
  53. package/dist/standalone/host-platform.d.ts +13 -0
  54. package/dist/standalone/host-platform.js +42 -0
  55. package/dist/standalone/host-types.d.ts +49 -0
  56. package/dist/standalone/host-types.js +1 -0
  57. package/dist/standalone/i18n.d.ts +28 -0
  58. package/dist/standalone/i18n.js +161 -0
  59. package/dist/standalone/inspect-helper.d.ts +6 -0
  60. package/dist/standalone/inspect-helper.js +88 -0
  61. package/dist/standalone/inspect-spk.d.ts +23 -0
  62. package/dist/standalone/inspect-spk.js +209 -0
  63. package/dist/standalone/lifecycle-helper.d.ts +2 -0
  64. package/dist/standalone/lifecycle-helper.js +12 -0
  65. package/dist/standalone/lifecycle.d.ts +3 -0
  66. package/dist/standalone/lifecycle.js +53 -0
  67. package/dist/standalone/manifest.d.ts +73 -0
  68. package/dist/standalone/manifest.js +279 -0
  69. package/dist/standalone/reopen-events.d.ts +2 -0
  70. package/dist/standalone/reopen-events.js +28 -0
  71. package/dist/standalone/root-messages.d.ts +7 -0
  72. package/dist/standalone/root-messages.js +259 -0
  73. package/dist/standalone/root-ops.d.ts +42 -0
  74. package/dist/standalone/root-ops.js +101 -0
  75. package/dist/standalone/root-window.d.ts +36 -0
  76. package/dist/standalone/root-window.js +302 -0
  77. package/dist/standalone/spk.d.ts +23 -0
  78. package/dist/standalone/spk.js +192 -0
  79. package/dist/template-paths.d.ts +2 -0
  80. package/dist/template-paths.js +9 -0
  81. package/dist/templates/_daemon/fixture_linux_test.go +15 -0
  82. package/dist/templates/_daemon/fixture_other_test.go +7 -0
  83. package/dist/templates/_daemon/go.mod +3 -0
  84. package/dist/templates/_daemon/main.go +608 -0
  85. package/dist/templates/_daemon/main_test.go +242 -0
  86. package/dist/templates/_daemon/process_linux.go +55 -0
  87. package/dist/templates/_daemon/process_linux_test.go +161 -0
  88. package/dist/templates/_daemon/process_other.go +14 -0
  89. package/dist/templates/_daemon/testdata/child.go +41 -0
  90. package/dist/templates/_shared/GO-LICENSE +27 -0
  91. package/dist/templates/_shared/GO-PATENTS +22 -0
  92. package/dist/templates/_shared/LICENSES/TEMPLATE.txt +21 -0
  93. package/dist/templates/_shared/notice-overrides/index.json +14 -0
  94. package/dist/templates/_shared/notice-overrides/utils-0.4.2-LICENSE +21 -0
  95. package/dist/templates/_shared/notice-overrides/utils-0.5.0-LICENSE +21 -0
  96. package/dist/templates/_shared/third-party-notices.mjs +51 -0
  97. package/dist/templates/binary/synology-app.yaml +7 -0
  98. package/dist/templates/hello-files/compose.yaml +0 -1
  99. package/dist/templates/hello-web/compose.yaml +13 -10
  100. package/dist/templates/hello-web/html/app.js +1 -23
  101. package/dist/templates/hello-web/html/index.html +1 -3
  102. package/dist/templates/hello-web-page/compose.yaml +13 -10
  103. package/dist/templates/hello-web-page/html/app.js +1 -23
  104. package/dist/templates/hello-web-page/html/index.html +1 -3
  105. package/dist/templates/native-go/README.md +324 -0
  106. package/dist/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +59 -0
  107. package/dist/templates/native-go/backend/cmd/app/main.go +49 -0
  108. package/dist/templates/native-go/backend/cmd/dsm-readonly-probe/main_linux.go +46 -0
  109. package/dist/templates/native-go/backend/cmd/helper/main.go +38 -0
  110. package/dist/templates/native-go/backend/go.mod +7 -0
  111. package/dist/templates/native-go/backend/go.sum +4 -0
  112. package/dist/templates/native-go/backend/internal/api/binary.go +154 -0
  113. package/dist/templates/native-go/backend/internal/api/binary_test.go +165 -0
  114. package/dist/templates/native-go/backend/internal/api/errors.go +33 -0
  115. package/dist/templates/native-go/backend/internal/api/registry.go +104 -0
  116. package/dist/templates/native-go/backend/internal/api/registry_test.go +329 -0
  117. package/dist/templates/native-go/backend/internal/api/server.go +159 -0
  118. package/dist/templates/native-go/backend/internal/app/nas_cgi_artifact_test.go +121 -0
  119. package/dist/templates/native-go/backend/internal/app/nas_refusal_test.go +46 -0
  120. package/dist/templates/native-go/backend/internal/app/root_none.go +9 -0
  121. package/dist/templates/native-go/backend/internal/app/routes.go +138 -0
  122. package/dist/templates/native-go/backend/internal/app/routes_test.go +172 -0
  123. package/dist/templates/native-go/backend/internal/dsm/auth.go +118 -0
  124. package/dist/templates/native-go/backend/internal/dsm/auth_test.go +139 -0
  125. package/dist/templates/native-go/backend/internal/dsmprobe/collector_linux.go +335 -0
  126. package/dist/templates/native-go/backend/internal/dsmprobe/collector_linux_test.go +41 -0
  127. package/dist/templates/native-go/backend/internal/dsmprobe/protocol.go +179 -0
  128. package/dist/templates/native-go/backend/internal/dsmprobe/protocol_test.go +29 -0
  129. package/dist/templates/native-go/backend/internal/helper/cohort.go +393 -0
  130. package/dist/templates/native-go/backend/internal/helper/cohort_publication.go +18 -0
  131. package/dist/templates/native-go/backend/internal/helper/cohort_publication_test.go +105 -0
  132. package/dist/templates/native-go/backend/internal/helper/cohort_test.go +372 -0
  133. package/dist/templates/native-go/backend/internal/helper/control.go +424 -0
  134. package/dist/templates/native-go/backend/internal/helper/control_test.go +250 -0
  135. package/dist/templates/native-go/backend/internal/helper/data_contract.go +242 -0
  136. package/dist/templates/native-go/backend/internal/helper/data_contract_test.go +51 -0
  137. package/dist/templates/native-go/backend/internal/helper/data_decode.go +184 -0
  138. package/dist/templates/native-go/backend/internal/helper/data_decode_pointer_test.go +30 -0
  139. package/dist/templates/native-go/backend/internal/helper/data_protocol.go +416 -0
  140. package/dist/templates/native-go/backend/internal/helper/data_protocol_test.go +449 -0
  141. package/dist/templates/native-go/backend/internal/helper/dsm_acl_linux.go +139 -0
  142. package/dist/templates/native-go/backend/internal/helper/dsm_acl_linux_test.go +121 -0
  143. package/dist/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux.go +95 -0
  144. package/dist/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux_test.go +56 -0
  145. package/dist/templates/native-go/backend/internal/helper/dsm_bridge_linux.go +144 -0
  146. package/dist/templates/native-go/backend/internal/helper/dsm_bridge_linux_test.go +89 -0
  147. package/dist/templates/native-go/backend/internal/helper/dsm_home_linux.go +107 -0
  148. package/dist/templates/native-go/backend/internal/helper/dsm_home_linux_test.go +82 -0
  149. package/dist/templates/native-go/backend/internal/helper/dsm_probe_transport_linux.go +151 -0
  150. package/dist/templates/native-go/backend/internal/helper/dsm_probe_transport_linux_test.go +66 -0
  151. package/dist/templates/native-go/backend/internal/helper/grant_authority.go +516 -0
  152. package/dist/templates/native-go/backend/internal/helper/grant_authority_contract.go +88 -0
  153. package/dist/templates/native-go/backend/internal/helper/grant_authority_test.go +510 -0
  154. package/dist/templates/native-go/backend/internal/helper/grant_cohort.go +389 -0
  155. package/dist/templates/native-go/backend/internal/helper/grant_cohort_test.go +239 -0
  156. package/dist/templates/native-go/backend/internal/helper/grant_delivery.go +49 -0
  157. package/dist/templates/native-go/backend/internal/helper/grant_delivery_methods.go +273 -0
  158. package/dist/templates/native-go/backend/internal/helper/grant_delivery_test.go +322 -0
  159. package/dist/templates/native-go/backend/internal/helper/grant_operation_contract.go +47 -0
  160. package/dist/templates/native-go/backend/internal/helper/grant_readonly_test.go +180 -0
  161. package/dist/templates/native-go/backend/internal/helper/grant_repository_linux.go +415 -0
  162. package/dist/templates/native-go/backend/internal/helper/grant_repository_linux_test.go +468 -0
  163. package/dist/templates/native-go/backend/internal/helper/grant_rpc.go +147 -0
  164. package/dist/templates/native-go/backend/internal/helper/grant_rpc_test.go +51 -0
  165. package/dist/templates/native-go/backend/internal/helper/grant_snapshot.go +75 -0
  166. package/dist/templates/native-go/backend/internal/helper/grant_supervisor_linux.go +134 -0
  167. package/dist/templates/native-go/backend/internal/helper/grant_supervisor_linux_test.go +254 -0
  168. package/dist/templates/native-go/backend/internal/helper/lease.go +112 -0
  169. package/dist/templates/native-go/backend/internal/helper/lease_linux.go +44 -0
  170. package/dist/templates/native-go/backend/internal/helper/lease_other.go +8 -0
  171. package/dist/templates/native-go/backend/internal/helper/lifecycle.go +234 -0
  172. package/dist/templates/native-go/backend/internal/helper/lifecycle_test.go +473 -0
  173. package/dist/templates/native-go/backend/internal/helper/managed_pilot.go +284 -0
  174. package/dist/templates/native-go/backend/internal/helper/managed_pilot_repository_linux.go +74 -0
  175. package/dist/templates/native-go/backend/internal/helper/managed_pilot_repository_linux_test.go +40 -0
  176. package/dist/templates/native-go/backend/internal/helper/managed_pilot_test.go +210 -0
  177. package/dist/templates/native-go/backend/internal/helper/nas_shipped_refusal_linux_test.go +97 -0
  178. package/dist/templates/native-go/backend/internal/helper/native_discovery.go +79 -0
  179. package/dist/templates/native-go/backend/internal/helper/native_identity.go +89 -0
  180. package/dist/templates/native-go/backend/internal/helper/native_provider.go +159 -0
  181. package/dist/templates/native-go/backend/internal/helper/native_provider_test.go +421 -0
  182. package/dist/templates/native-go/backend/internal/helper/observation.go +204 -0
  183. package/dist/templates/native-go/backend/internal/helper/observation_health_test.go +115 -0
  184. package/dist/templates/native-go/backend/internal/helper/observation_reload_budget_test.go +117 -0
  185. package/dist/templates/native-go/backend/internal/helper/observation_test.go +196 -0
  186. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic.go +109 -0
  187. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_linux.go +76 -0
  188. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_linux_test.go +124 -0
  189. package/dist/templates/native-go/backend/internal/helper/observer_diagnostic_test.go +98 -0
  190. package/dist/templates/native-go/backend/internal/helper/operation_bootstrap_linux.go +193 -0
  191. package/dist/templates/native-go/backend/internal/helper/operation_credentials_linux.go +56 -0
  192. package/dist/templates/native-go/backend/internal/helper/operation_linux.go +480 -0
  193. package/dist/templates/native-go/backend/internal/helper/operation_linux_test.go +528 -0
  194. package/dist/templates/native-go/backend/internal/helper/peer_linux.go +44 -0
  195. package/dist/templates/native-go/backend/internal/helper/peer_other.go +7 -0
  196. package/dist/templates/native-go/backend/internal/helper/process_linux.go +177 -0
  197. package/dist/templates/native-go/backend/internal/helper/process_other.go +5 -0
  198. package/dist/templates/native-go/backend/internal/helper/publication_test.go +178 -0
  199. package/dist/templates/native-go/backend/internal/helper/read_stream_cohort_linux_test.go +156 -0
  200. package/dist/templates/native-go/backend/internal/helper/read_transfer.go +40 -0
  201. package/dist/templates/native-go/backend/internal/helper/read_transfer_linux.go +109 -0
  202. package/dist/templates/native-go/backend/internal/helper/read_transfer_linux_test.go +118 -0
  203. package/dist/templates/native-go/backend/internal/helper/read_transfer_test.go +177 -0
  204. package/dist/templates/native-go/backend/internal/helper/readonly.go +105 -0
  205. package/dist/templates/native-go/backend/internal/helper/readonly_admission.go +85 -0
  206. package/dist/templates/native-go/backend/internal/helper/readonly_cohort_linux_test.go +253 -0
  207. package/dist/templates/native-go/backend/internal/helper/readonly_linux_test.go +378 -0
  208. package/dist/templates/native-go/backend/internal/helper/readonly_mount_linux.go +65 -0
  209. package/dist/templates/native-go/backend/internal/helper/readonly_mount_proxy_linux.go +113 -0
  210. package/dist/templates/native-go/backend/internal/helper/readonly_operations_linux.go +168 -0
  211. package/dist/templates/native-go/backend/internal/helper/readonly_resolver_linux.go +241 -0
  212. package/dist/templates/native-go/backend/internal/helper/readonly_test.go +40 -0
  213. package/dist/templates/native-go/backend/internal/helper/relaxed_identity.go +252 -0
  214. package/dist/templates/native-go/backend/internal/helper/relaxed_identity_contract.go +105 -0
  215. package/dist/templates/native-go/backend/internal/helper/relaxed_identity_test.go +406 -0
  216. package/dist/templates/native-go/backend/internal/helper/relaxed_invalidation.go +200 -0
  217. package/dist/templates/native-go/backend/internal/helper/repair.go +132 -0
  218. package/dist/templates/native-go/backend/internal/helper/repair_test.go +271 -0
  219. package/dist/templates/native-go/backend/internal/helper/s1r_actor_acl_linux_test.go +303 -0
  220. package/dist/templates/native-go/backend/internal/helper/s1r_actor_fixture_linux_test.go +184 -0
  221. package/dist/templates/native-go/backend/internal/helper/s1r_actor_races_linux_test.go +231 -0
  222. package/dist/templates/native-go/backend/internal/helper/s1r_fixture_contract_linux_test.go +18 -0
  223. package/dist/templates/native-go/backend/internal/helper/server_linux.go +124 -0
  224. package/dist/templates/native-go/backend/internal/helper/status.go +334 -0
  225. package/dist/templates/native-go/backend/internal/helper/status_test.go +288 -0
  226. package/dist/templates/native-go/backend/internal/helper/supervision.go +107 -0
  227. package/dist/templates/native-go/backend/internal/helper/supervision_test.go +124 -0
  228. package/dist/templates/native-go/backend/internal/helper/supervisor_frame.go +76 -0
  229. package/dist/templates/native-go/backend/internal/helper/supervisor_frame_linux_test.go +69 -0
  230. package/dist/templates/native-go/backend/internal/helper/supervisor_frame_test.go +107 -0
  231. package/dist/templates/native-go/backend/internal/helper/supervisor_linux.go +363 -0
  232. package/dist/templates/native-go/backend/internal/helper/supervisor_linux_test.go +913 -0
  233. package/dist/templates/native-go/backend/internal/helper/supervisor_socket_eof_test.go +74 -0
  234. package/dist/templates/native-go/backend/internal/helper/supervisor_socket_test.go +45 -0
  235. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/create.json +23 -0
  236. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/frames.json +67 -0
  237. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/grant-store.json +52 -0
  238. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/intent.json +20 -0
  239. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/list.json +20 -0
  240. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/publish.json +20 -0
  241. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/read.json +22 -0
  242. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/stat.json +22 -0
  243. package/dist/templates/native-go/backend/internal/helper/testdata/protocol2/write-stream.json +22 -0
  244. package/dist/templates/native-go/backend/internal/helper/unit_connection.go +75 -0
  245. package/dist/templates/native-go/backend/internal/helper/unit_connection_linux_test.go +135 -0
  246. package/dist/templates/native-go/backend/internal/helper/unit_connection_test.go +133 -0
  247. package/dist/templates/native-go/backend/internal/helper/unit_frame_test.go +32 -0
  248. package/dist/templates/native-go/backend/internal/helper/unit_linux.go +364 -0
  249. package/dist/templates/native-go/backend/internal/helper/unit_linux_test.go +46 -0
  250. package/dist/templates/native-go/backend/internal/helper/unit_mechanisms_linux_test.go +217 -0
  251. package/dist/templates/native-go/backend/internal/helper/unit_padding_linux_test.go +178 -0
  252. package/dist/templates/native-go/backend/internal/helper/unit_query_linux.go +111 -0
  253. package/dist/templates/native-go/backend/internal/helper/unit_reload_linux_test.go +372 -0
  254. package/dist/templates/native-go/backend/internal/helper/unit_reload_sequence_linux_test.go +232 -0
  255. package/dist/templates/native-go/backend/internal/helper/write.go +77 -0
  256. package/dist/templates/native-go/backend/internal/helper/write_admission.go +260 -0
  257. package/dist/templates/native-go/backend/internal/helper/write_admission_test.go +135 -0
  258. package/dist/templates/native-go/backend/internal/helper/write_cohort_linux_test.go +218 -0
  259. package/dist/templates/native-go/backend/internal/helper/write_files_linux.go +202 -0
  260. package/dist/templates/native-go/backend/internal/helper/write_files_linux_test.go +199 -0
  261. package/dist/templates/native-go/backend/internal/helper/write_intent_linux.go +116 -0
  262. package/dist/templates/native-go/backend/internal/helper/write_intent_linux_test.go +74 -0
  263. package/dist/templates/native-go/backend/internal/helper/write_operation_linux.go +245 -0
  264. package/dist/templates/native-go/backend/internal/helper/write_test.go +53 -0
  265. package/dist/templates/native-go/dsm-package.yaml +58 -0
  266. package/dist/templates/native-go/gitignore +1 -0
  267. package/dist/templates/native-go/i18n/glossary.json +662 -0
  268. package/dist/templates/native-go/i18n/messages/de.json +28 -0
  269. package/dist/templates/native-go/i18n/messages/en.json +28 -0
  270. package/dist/templates/native-go/i18n/messages/es.json +28 -0
  271. package/dist/templates/native-go/i18n/messages/fr.json +28 -0
  272. package/dist/templates/native-go/i18n/messages/it.json +28 -0
  273. package/dist/templates/native-go/i18n/messages/ja.json +28 -0
  274. package/dist/templates/native-go/i18n/messages/ko.json +28 -0
  275. package/dist/templates/native-go/i18n/messages/zh-CN.json +28 -0
  276. package/dist/templates/native-go/i18n/messages/zh-TW.json +28 -0
  277. package/dist/templates/native-go/ui/app.css +35 -0
  278. package/dist/templates/native-go/ui/app.js +101 -0
  279. package/dist/templates/native-go-better-auth/backend/internal/app/identity.go +208 -0
  280. package/dist/templates/native-go-better-auth/backend/internal/app/identity_test.go +113 -0
  281. package/dist/templates/native-go-better-auth/node/app.mjs +72 -0
  282. package/dist/templates/native-go-better-auth/node/build.mjs +4 -0
  283. package/dist/templates/native-go-better-auth/node/package-lock.json +862 -0
  284. package/dist/templates/native-go-better-auth/node/package.json +1 -0
  285. package/dist/templates/native-go-better-auth/node/test/auth.test.mjs +31 -0
  286. package/dist/templates/native-go-integration/backend/internal/app/identity_none.go +6 -0
  287. package/dist/templates/native-go-integration/backend/internal/app/personal.go +203 -0
  288. package/dist/templates/native-go-integration/backend/internal/app/personal_test.go +119 -0
  289. package/dist/templates/native-go-root/backend/internal/app/root.go +107 -0
  290. package/dist/templates/native-go-root/backend/internal/app/root_test.go +124 -0
  291. package/dist/templates/native-go-root/root/whoami.sh +6 -0
  292. package/dist/templates/native-go-vue/README.md +224 -0
  293. package/dist/templates/native-go-vue/frontend/DESIGN.md +78 -0
  294. package/dist/templates/native-go-vue/frontend/package-lock.json +2410 -0
  295. package/dist/templates/native-go-vue/frontend/package.json +6 -0
  296. package/dist/templates/native-go-vue/frontend/src/App.vue +159 -0
  297. package/dist/templates/native-go-vue/frontend/src/context.ts +56 -0
  298. package/dist/templates/native-go-vue/frontend/src/main.ts +29 -0
  299. package/dist/templates/native-go-vue/frontend/src/nas/NasGrantSettings.vue +74 -0
  300. package/dist/templates/native-go-vue/frontend/src/nas/NasPathPicker.vue +106 -0
  301. package/dist/templates/native-go-vue/frontend/src/nas/NasUnavailable.vue +20 -0
  302. package/dist/templates/native-go-vue/frontend/src/nas/i18n/de.json +74 -0
  303. package/dist/templates/native-go-vue/frontend/src/nas/i18n/en.json +74 -0
  304. package/dist/templates/native-go-vue/frontend/src/nas/i18n/es.json +74 -0
  305. package/dist/templates/native-go-vue/frontend/src/nas/i18n/fr.json +74 -0
  306. package/dist/templates/native-go-vue/frontend/src/nas/i18n/it.json +74 -0
  307. package/dist/templates/native-go-vue/frontend/src/nas/i18n/ja.json +74 -0
  308. package/dist/templates/native-go-vue/frontend/src/nas/i18n/ko.json +74 -0
  309. package/dist/templates/native-go-vue/frontend/src/nas/i18n/zh-CN.json +74 -0
  310. package/dist/templates/native-go-vue/frontend/src/nas/i18n/zh-TW.json +74 -0
  311. package/dist/templates/native-go-vue/frontend/src/nas/i18n.ts +38 -0
  312. package/dist/templates/native-go-vue/frontend/src/nas/mock-provider.ts +119 -0
  313. package/dist/templates/native-go-vue/frontend/src/nas/provider.ts +59 -0
  314. package/dist/templates/native-go-vue/frontend/src/nas/use-request.ts +27 -0
  315. package/dist/templates/native-go-vue/frontend/src/style.css +31 -0
  316. package/dist/templates/native-go-vue/frontend/test/apps.test.ts +190 -0
  317. package/dist/templates/native-go-vue/frontend/test/nas-provider.test.ts +81 -0
  318. package/dist/templates/native-go-vue/frontend/test/nas-request.test.ts +21 -0
  319. package/dist/templates/native-go-vue/frontend/test/nas-ui.test.ts +261 -0
  320. package/dist/templates/native-go-vue/frontend/tsconfig.json +1 -0
  321. package/dist/templates/native-go-vue/frontend/vite.config.ts +10 -0
  322. package/dist/templates/native-go-vue/gitignore +2 -0
  323. package/dist/types.d.ts +1 -1
  324. package/dist/validate.js +11 -7
  325. package/package.json +5 -8
  326. package/schema/synology-app.schema.json +36 -37
  327. package/skills/SKILL.md +4 -48
  328. package/skills/reference/create.md +11 -83
  329. package/skills/reference/deploy.md +7 -78
  330. package/skills/reference/diagnose.md +4 -101
  331. package/skills/reference/files.md +5 -41
  332. package/skills/reference/identity.md +3 -29
  333. package/skills/reference/wrap.md +0 -2
  334. package/templates/_daemon/fixture_linux_test.go +15 -0
  335. package/templates/_daemon/fixture_other_test.go +7 -0
  336. package/templates/_daemon/go.mod +3 -0
  337. package/templates/_daemon/main.go +608 -0
  338. package/templates/_daemon/main_test.go +242 -0
  339. package/templates/_daemon/process_linux.go +55 -0
  340. package/templates/_daemon/process_linux_test.go +161 -0
  341. package/templates/_daemon/process_other.go +14 -0
  342. package/templates/_daemon/testdata/child.go +41 -0
  343. package/templates/_shared/GO-LICENSE +27 -0
  344. package/templates/_shared/GO-PATENTS +22 -0
  345. package/templates/_shared/LICENSES/TEMPLATE.txt +21 -0
  346. package/templates/_shared/notice-overrides/index.json +14 -0
  347. package/templates/_shared/notice-overrides/utils-0.4.2-LICENSE +21 -0
  348. package/templates/_shared/notice-overrides/utils-0.5.0-LICENSE +21 -0
  349. package/templates/_shared/third-party-notices.mjs +51 -0
  350. package/templates/binary/synology-app.yaml +7 -0
  351. package/templates/hello-files/compose.yaml +0 -1
  352. package/templates/hello-web/compose.yaml +13 -10
  353. package/templates/hello-web/html/app.js +1 -23
  354. package/templates/hello-web/html/index.html +1 -3
  355. package/templates/hello-web-page/compose.yaml +13 -10
  356. package/templates/hello-web-page/html/app.js +1 -23
  357. package/templates/hello-web-page/html/index.html +1 -3
  358. package/templates/native-go/README.md +324 -0
  359. package/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +59 -0
  360. package/templates/native-go/backend/cmd/app/main.go +49 -0
  361. package/templates/native-go/backend/cmd/dsm-readonly-probe/main_linux.go +46 -0
  362. package/templates/native-go/backend/cmd/helper/main.go +38 -0
  363. package/templates/native-go/backend/go.mod +7 -0
  364. package/templates/native-go/backend/go.sum +4 -0
  365. package/templates/native-go/backend/internal/api/binary.go +154 -0
  366. package/templates/native-go/backend/internal/api/binary_test.go +165 -0
  367. package/templates/native-go/backend/internal/api/errors.go +33 -0
  368. package/templates/native-go/backend/internal/api/registry.go +104 -0
  369. package/templates/native-go/backend/internal/api/registry_test.go +329 -0
  370. package/templates/native-go/backend/internal/api/server.go +159 -0
  371. package/templates/native-go/backend/internal/app/nas_cgi_artifact_test.go +121 -0
  372. package/templates/native-go/backend/internal/app/nas_refusal_test.go +46 -0
  373. package/templates/native-go/backend/internal/app/root_none.go +9 -0
  374. package/templates/native-go/backend/internal/app/routes.go +138 -0
  375. package/templates/native-go/backend/internal/app/routes_test.go +172 -0
  376. package/templates/native-go/backend/internal/dsm/auth.go +118 -0
  377. package/templates/native-go/backend/internal/dsm/auth_test.go +139 -0
  378. package/templates/native-go/backend/internal/dsmprobe/collector_linux.go +335 -0
  379. package/templates/native-go/backend/internal/dsmprobe/collector_linux_test.go +41 -0
  380. package/templates/native-go/backend/internal/dsmprobe/protocol.go +179 -0
  381. package/templates/native-go/backend/internal/dsmprobe/protocol_test.go +29 -0
  382. package/templates/native-go/backend/internal/helper/cohort.go +393 -0
  383. package/templates/native-go/backend/internal/helper/cohort_publication.go +18 -0
  384. package/templates/native-go/backend/internal/helper/cohort_publication_test.go +105 -0
  385. package/templates/native-go/backend/internal/helper/cohort_test.go +372 -0
  386. package/templates/native-go/backend/internal/helper/control.go +424 -0
  387. package/templates/native-go/backend/internal/helper/control_test.go +250 -0
  388. package/templates/native-go/backend/internal/helper/data_contract.go +242 -0
  389. package/templates/native-go/backend/internal/helper/data_contract_test.go +51 -0
  390. package/templates/native-go/backend/internal/helper/data_decode.go +184 -0
  391. package/templates/native-go/backend/internal/helper/data_decode_pointer_test.go +30 -0
  392. package/templates/native-go/backend/internal/helper/data_protocol.go +416 -0
  393. package/templates/native-go/backend/internal/helper/data_protocol_test.go +449 -0
  394. package/templates/native-go/backend/internal/helper/dsm_acl_linux.go +139 -0
  395. package/templates/native-go/backend/internal/helper/dsm_acl_linux_test.go +121 -0
  396. package/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux.go +95 -0
  397. package/templates/native-go/backend/internal/helper/dsm_acl_syscall_linux_test.go +56 -0
  398. package/templates/native-go/backend/internal/helper/dsm_bridge_linux.go +144 -0
  399. package/templates/native-go/backend/internal/helper/dsm_bridge_linux_test.go +89 -0
  400. package/templates/native-go/backend/internal/helper/dsm_home_linux.go +107 -0
  401. package/templates/native-go/backend/internal/helper/dsm_home_linux_test.go +82 -0
  402. package/templates/native-go/backend/internal/helper/dsm_probe_transport_linux.go +151 -0
  403. package/templates/native-go/backend/internal/helper/dsm_probe_transport_linux_test.go +66 -0
  404. package/templates/native-go/backend/internal/helper/grant_authority.go +516 -0
  405. package/templates/native-go/backend/internal/helper/grant_authority_contract.go +88 -0
  406. package/templates/native-go/backend/internal/helper/grant_authority_test.go +510 -0
  407. package/templates/native-go/backend/internal/helper/grant_cohort.go +389 -0
  408. package/templates/native-go/backend/internal/helper/grant_cohort_test.go +239 -0
  409. package/templates/native-go/backend/internal/helper/grant_delivery.go +49 -0
  410. package/templates/native-go/backend/internal/helper/grant_delivery_methods.go +273 -0
  411. package/templates/native-go/backend/internal/helper/grant_delivery_test.go +322 -0
  412. package/templates/native-go/backend/internal/helper/grant_operation_contract.go +47 -0
  413. package/templates/native-go/backend/internal/helper/grant_readonly_test.go +180 -0
  414. package/templates/native-go/backend/internal/helper/grant_repository_linux.go +415 -0
  415. package/templates/native-go/backend/internal/helper/grant_repository_linux_test.go +468 -0
  416. package/templates/native-go/backend/internal/helper/grant_rpc.go +147 -0
  417. package/templates/native-go/backend/internal/helper/grant_rpc_test.go +51 -0
  418. package/templates/native-go/backend/internal/helper/grant_snapshot.go +75 -0
  419. package/templates/native-go/backend/internal/helper/grant_supervisor_linux.go +134 -0
  420. package/templates/native-go/backend/internal/helper/grant_supervisor_linux_test.go +254 -0
  421. package/templates/native-go/backend/internal/helper/lease.go +112 -0
  422. package/templates/native-go/backend/internal/helper/lease_linux.go +44 -0
  423. package/templates/native-go/backend/internal/helper/lease_other.go +8 -0
  424. package/templates/native-go/backend/internal/helper/lifecycle.go +234 -0
  425. package/templates/native-go/backend/internal/helper/lifecycle_test.go +473 -0
  426. package/templates/native-go/backend/internal/helper/managed_pilot.go +284 -0
  427. package/templates/native-go/backend/internal/helper/managed_pilot_repository_linux.go +74 -0
  428. package/templates/native-go/backend/internal/helper/managed_pilot_repository_linux_test.go +40 -0
  429. package/templates/native-go/backend/internal/helper/managed_pilot_test.go +210 -0
  430. package/templates/native-go/backend/internal/helper/nas_shipped_refusal_linux_test.go +97 -0
  431. package/templates/native-go/backend/internal/helper/native_discovery.go +79 -0
  432. package/templates/native-go/backend/internal/helper/native_identity.go +89 -0
  433. package/templates/native-go/backend/internal/helper/native_provider.go +159 -0
  434. package/templates/native-go/backend/internal/helper/native_provider_test.go +421 -0
  435. package/templates/native-go/backend/internal/helper/observation.go +204 -0
  436. package/templates/native-go/backend/internal/helper/observation_health_test.go +115 -0
  437. package/templates/native-go/backend/internal/helper/observation_reload_budget_test.go +117 -0
  438. package/templates/native-go/backend/internal/helper/observation_test.go +196 -0
  439. package/templates/native-go/backend/internal/helper/observer_diagnostic.go +109 -0
  440. package/templates/native-go/backend/internal/helper/observer_diagnostic_linux.go +76 -0
  441. package/templates/native-go/backend/internal/helper/observer_diagnostic_linux_test.go +124 -0
  442. package/templates/native-go/backend/internal/helper/observer_diagnostic_test.go +98 -0
  443. package/templates/native-go/backend/internal/helper/operation_bootstrap_linux.go +193 -0
  444. package/templates/native-go/backend/internal/helper/operation_credentials_linux.go +56 -0
  445. package/templates/native-go/backend/internal/helper/operation_linux.go +480 -0
  446. package/templates/native-go/backend/internal/helper/operation_linux_test.go +528 -0
  447. package/templates/native-go/backend/internal/helper/peer_linux.go +44 -0
  448. package/templates/native-go/backend/internal/helper/peer_other.go +7 -0
  449. package/templates/native-go/backend/internal/helper/process_linux.go +177 -0
  450. package/templates/native-go/backend/internal/helper/process_other.go +5 -0
  451. package/templates/native-go/backend/internal/helper/publication_test.go +178 -0
  452. package/templates/native-go/backend/internal/helper/read_stream_cohort_linux_test.go +156 -0
  453. package/templates/native-go/backend/internal/helper/read_transfer.go +40 -0
  454. package/templates/native-go/backend/internal/helper/read_transfer_linux.go +109 -0
  455. package/templates/native-go/backend/internal/helper/read_transfer_linux_test.go +118 -0
  456. package/templates/native-go/backend/internal/helper/read_transfer_test.go +177 -0
  457. package/templates/native-go/backend/internal/helper/readonly.go +105 -0
  458. package/templates/native-go/backend/internal/helper/readonly_admission.go +85 -0
  459. package/templates/native-go/backend/internal/helper/readonly_cohort_linux_test.go +253 -0
  460. package/templates/native-go/backend/internal/helper/readonly_linux_test.go +378 -0
  461. package/templates/native-go/backend/internal/helper/readonly_mount_linux.go +65 -0
  462. package/templates/native-go/backend/internal/helper/readonly_mount_proxy_linux.go +113 -0
  463. package/templates/native-go/backend/internal/helper/readonly_operations_linux.go +168 -0
  464. package/templates/native-go/backend/internal/helper/readonly_resolver_linux.go +241 -0
  465. package/templates/native-go/backend/internal/helper/readonly_test.go +40 -0
  466. package/templates/native-go/backend/internal/helper/relaxed_identity.go +252 -0
  467. package/templates/native-go/backend/internal/helper/relaxed_identity_contract.go +105 -0
  468. package/templates/native-go/backend/internal/helper/relaxed_identity_test.go +406 -0
  469. package/templates/native-go/backend/internal/helper/relaxed_invalidation.go +200 -0
  470. package/templates/native-go/backend/internal/helper/repair.go +132 -0
  471. package/templates/native-go/backend/internal/helper/repair_test.go +271 -0
  472. package/templates/native-go/backend/internal/helper/s1r_actor_acl_linux_test.go +303 -0
  473. package/templates/native-go/backend/internal/helper/s1r_actor_fixture_linux_test.go +184 -0
  474. package/templates/native-go/backend/internal/helper/s1r_actor_races_linux_test.go +231 -0
  475. package/templates/native-go/backend/internal/helper/s1r_fixture_contract_linux_test.go +18 -0
  476. package/templates/native-go/backend/internal/helper/server_linux.go +124 -0
  477. package/templates/native-go/backend/internal/helper/status.go +334 -0
  478. package/templates/native-go/backend/internal/helper/status_test.go +288 -0
  479. package/templates/native-go/backend/internal/helper/supervision.go +107 -0
  480. package/templates/native-go/backend/internal/helper/supervision_test.go +124 -0
  481. package/templates/native-go/backend/internal/helper/supervisor_frame.go +76 -0
  482. package/templates/native-go/backend/internal/helper/supervisor_frame_linux_test.go +69 -0
  483. package/templates/native-go/backend/internal/helper/supervisor_frame_test.go +107 -0
  484. package/templates/native-go/backend/internal/helper/supervisor_linux.go +363 -0
  485. package/templates/native-go/backend/internal/helper/supervisor_linux_test.go +913 -0
  486. package/templates/native-go/backend/internal/helper/supervisor_socket_eof_test.go +74 -0
  487. package/templates/native-go/backend/internal/helper/supervisor_socket_test.go +45 -0
  488. package/templates/native-go/backend/internal/helper/testdata/protocol2/create.json +23 -0
  489. package/templates/native-go/backend/internal/helper/testdata/protocol2/frames.json +67 -0
  490. package/templates/native-go/backend/internal/helper/testdata/protocol2/grant-store.json +52 -0
  491. package/templates/native-go/backend/internal/helper/testdata/protocol2/intent.json +20 -0
  492. package/templates/native-go/backend/internal/helper/testdata/protocol2/list.json +20 -0
  493. package/templates/native-go/backend/internal/helper/testdata/protocol2/publish.json +20 -0
  494. package/templates/native-go/backend/internal/helper/testdata/protocol2/read.json +22 -0
  495. package/templates/native-go/backend/internal/helper/testdata/protocol2/stat.json +22 -0
  496. package/templates/native-go/backend/internal/helper/testdata/protocol2/write-stream.json +22 -0
  497. package/templates/native-go/backend/internal/helper/unit_connection.go +75 -0
  498. package/templates/native-go/backend/internal/helper/unit_connection_linux_test.go +135 -0
  499. package/templates/native-go/backend/internal/helper/unit_connection_test.go +133 -0
  500. package/templates/native-go/backend/internal/helper/unit_frame_test.go +32 -0
  501. package/templates/native-go/backend/internal/helper/unit_linux.go +364 -0
  502. package/templates/native-go/backend/internal/helper/unit_linux_test.go +46 -0
  503. package/templates/native-go/backend/internal/helper/unit_mechanisms_linux_test.go +217 -0
  504. package/templates/native-go/backend/internal/helper/unit_padding_linux_test.go +178 -0
  505. package/templates/native-go/backend/internal/helper/unit_query_linux.go +111 -0
  506. package/templates/native-go/backend/internal/helper/unit_reload_linux_test.go +372 -0
  507. package/templates/native-go/backend/internal/helper/unit_reload_sequence_linux_test.go +232 -0
  508. package/templates/native-go/backend/internal/helper/write.go +77 -0
  509. package/templates/native-go/backend/internal/helper/write_admission.go +260 -0
  510. package/templates/native-go/backend/internal/helper/write_admission_test.go +135 -0
  511. package/templates/native-go/backend/internal/helper/write_cohort_linux_test.go +218 -0
  512. package/templates/native-go/backend/internal/helper/write_files_linux.go +202 -0
  513. package/templates/native-go/backend/internal/helper/write_files_linux_test.go +199 -0
  514. package/templates/native-go/backend/internal/helper/write_intent_linux.go +116 -0
  515. package/templates/native-go/backend/internal/helper/write_intent_linux_test.go +74 -0
  516. package/templates/native-go/backend/internal/helper/write_operation_linux.go +245 -0
  517. package/templates/native-go/backend/internal/helper/write_test.go +53 -0
  518. package/templates/native-go/dsm-package.yaml +58 -0
  519. package/templates/native-go/gitignore +1 -0
  520. package/templates/native-go/i18n/glossary.json +662 -0
  521. package/templates/native-go/i18n/messages/de.json +28 -0
  522. package/templates/native-go/i18n/messages/en.json +28 -0
  523. package/templates/native-go/i18n/messages/es.json +28 -0
  524. package/templates/native-go/i18n/messages/fr.json +28 -0
  525. package/templates/native-go/i18n/messages/it.json +28 -0
  526. package/templates/native-go/i18n/messages/ja.json +28 -0
  527. package/templates/native-go/i18n/messages/ko.json +28 -0
  528. package/templates/native-go/i18n/messages/zh-CN.json +28 -0
  529. package/templates/native-go/i18n/messages/zh-TW.json +28 -0
  530. package/templates/native-go/ui/app.css +35 -0
  531. package/templates/native-go/ui/app.js +101 -0
  532. package/templates/native-go-better-auth/backend/internal/app/identity.go +208 -0
  533. package/templates/native-go-better-auth/backend/internal/app/identity_test.go +113 -0
  534. package/templates/native-go-better-auth/node/app.mjs +72 -0
  535. package/templates/native-go-better-auth/node/build.mjs +4 -0
  536. package/templates/native-go-better-auth/node/package-lock.json +862 -0
  537. package/templates/native-go-better-auth/node/package.json +1 -0
  538. package/templates/native-go-better-auth/node/test/auth.test.mjs +31 -0
  539. package/templates/native-go-integration/backend/internal/app/identity_none.go +6 -0
  540. package/templates/native-go-integration/backend/internal/app/personal.go +203 -0
  541. package/templates/native-go-integration/backend/internal/app/personal_test.go +119 -0
  542. package/templates/native-go-root/backend/internal/app/root.go +107 -0
  543. package/templates/native-go-root/backend/internal/app/root_test.go +124 -0
  544. package/templates/native-go-root/root/whoami.sh +6 -0
  545. package/templates/native-go-vue/README.md +224 -0
  546. package/templates/native-go-vue/frontend/DESIGN.md +78 -0
  547. package/templates/native-go-vue/frontend/package-lock.json +2410 -0
  548. package/templates/native-go-vue/frontend/package.json +6 -0
  549. package/templates/native-go-vue/frontend/src/App.vue +159 -0
  550. package/templates/native-go-vue/frontend/src/context.ts +56 -0
  551. package/templates/native-go-vue/frontend/src/main.ts +29 -0
  552. package/templates/native-go-vue/frontend/src/nas/NasGrantSettings.vue +74 -0
  553. package/templates/native-go-vue/frontend/src/nas/NasPathPicker.vue +106 -0
  554. package/templates/native-go-vue/frontend/src/nas/NasUnavailable.vue +20 -0
  555. package/templates/native-go-vue/frontend/src/nas/i18n/de.json +74 -0
  556. package/templates/native-go-vue/frontend/src/nas/i18n/en.json +74 -0
  557. package/templates/native-go-vue/frontend/src/nas/i18n/es.json +74 -0
  558. package/templates/native-go-vue/frontend/src/nas/i18n/fr.json +74 -0
  559. package/templates/native-go-vue/frontend/src/nas/i18n/it.json +74 -0
  560. package/templates/native-go-vue/frontend/src/nas/i18n/ja.json +74 -0
  561. package/templates/native-go-vue/frontend/src/nas/i18n/ko.json +74 -0
  562. package/templates/native-go-vue/frontend/src/nas/i18n/zh-CN.json +74 -0
  563. package/templates/native-go-vue/frontend/src/nas/i18n/zh-TW.json +74 -0
  564. package/templates/native-go-vue/frontend/src/nas/i18n.ts +38 -0
  565. package/templates/native-go-vue/frontend/src/nas/mock-provider.ts +119 -0
  566. package/templates/native-go-vue/frontend/src/nas/provider.ts +59 -0
  567. package/templates/native-go-vue/frontend/src/nas/use-request.ts +27 -0
  568. package/templates/native-go-vue/frontend/src/style.css +31 -0
  569. package/templates/native-go-vue/frontend/test/apps.test.ts +190 -0
  570. package/templates/native-go-vue/frontend/test/nas-provider.test.ts +81 -0
  571. package/templates/native-go-vue/frontend/test/nas-request.test.ts +21 -0
  572. package/templates/native-go-vue/frontend/test/nas-ui.test.ts +261 -0
  573. package/templates/native-go-vue/frontend/tsconfig.json +1 -0
  574. package/templates/native-go-vue/frontend/vite.config.ts +10 -0
  575. package/templates/native-go-vue/gitignore +2 -0
  576. package/dist/attestation/app-package.d.ts +0 -86
  577. package/dist/attestation/app-package.js +0 -206
  578. package/dist/attestation/install-on-host.d.ts +0 -14
  579. package/dist/attestation/install-on-host.js +0 -52
  580. package/dist/attestation/keyring.d.ts +0 -21
  581. package/dist/attestation/keyring.js +0 -168
  582. package/dist/attestation/platform-service.d.ts +0 -70
  583. package/dist/attestation/platform-service.js +0 -250
  584. package/dist/build-spk/broker-glue.d.ts +0 -16
  585. package/dist/build-spk/broker-glue.js +0 -40
  586. package/dist/deploy/catalog-publish.d.ts +0 -3
  587. package/dist/deploy/catalog-publish.js +0 -7
  588. package/dist/doctor.d.ts +0 -22
  589. package/dist/doctor.js +0 -822
  590. package/dist/error-collector.d.ts +0 -2
  591. package/dist/error-collector.js +0 -46
  592. package/dist/host/broker-paths.d.ts +0 -1
  593. package/dist/host/broker-paths.js +0 -1
  594. package/dist/host/broker-upgrade-preflight.d.ts +0 -61
  595. package/dist/host/broker-upgrade-preflight.js +0 -156
  596. package/dist/host/digests.d.ts +0 -5
  597. package/dist/host/digests.js +0 -63
  598. package/dist/host/fake-nas.d.ts +0 -49
  599. package/dist/host/fake-nas.js +0 -193
  600. package/dist/mock-broker/bootstrap.d.ts +0 -2
  601. package/dist/mock-broker/bootstrap.js +0 -8
  602. package/dist/mock-broker/files.d.ts +0 -60
  603. package/dist/mock-broker/files.js +0 -408
  604. package/dist/mock-broker/oidc.d.ts +0 -31
  605. package/dist/mock-broker/oidc.js +0 -161
  606. package/dist/mock-broker/path.d.ts +0 -9
  607. package/dist/mock-broker/path.js +0 -50
  608. package/dist/mock-broker/server.d.ts +0 -19
  609. package/dist/mock-broker/server.js +0 -350
  610. package/dist/publish/build-ledger.d.ts +0 -22
  611. package/dist/publish/build-ledger.js +0 -26
  612. package/dist/publish/community-path.d.ts +0 -6
  613. package/dist/publish/community-path.js +0 -41
  614. package/dist/publish/curated-release.d.ts +0 -78
  615. package/dist/publish/curated-release.js +0 -883
  616. package/dist/publish/file-build-ledger.d.ts +0 -18
  617. package/dist/publish/file-build-ledger.js +0 -268
  618. package/dist/publish/github-pr.d.ts +0 -25
  619. package/dist/publish/github-pr.js +0 -85
  620. package/dist/publish/github-repo.d.ts +0 -8
  621. package/dist/publish/github-repo.js +0 -21
  622. package/dist/publish/platform-service-release.d.ts +0 -60
  623. package/dist/publish/platform-service-release.js +0 -333
  624. package/dist/publish/preflight.d.ts +0 -24
  625. package/dist/publish/preflight.js +0 -138
  626. package/dist/publish/publish.d.ts +0 -27
  627. package/dist/publish/publish.js +0 -136
  628. package/dist/publish/sync-definition.d.ts +0 -4
  629. package/dist/publish/sync-definition.js +0 -48
  630. package/dist/release-bin.d.ts +0 -2
  631. package/dist/release-bin.js +0 -23
  632. package/dist/templates/hello-web/html/sdk.js +0 -68
  633. package/dist/templates/hello-web-page/html/sdk.js +0 -68
  634. package/dist/templates/native/synology-app.yaml +0 -7
  635. package/dist/test-host.d.ts +0 -15
  636. package/dist/test-host.js +0 -37
  637. package/templates/hello-web/html/sdk.js +0 -68
  638. package/templates/hello-web-page/html/sdk.js +0 -68
  639. package/templates/native/synology-app.yaml +0 -7
  640. /package/dist/templates/{native → binary}/native.yaml +0 -0
  641. /package/templates/{native → binary}/native.yaml +0 -0
@@ -1,5 +1,4 @@
1
1
  import { renderDeleteAppDataBlock } from "./delete-app-data.js";
2
- import { BROKER_INSTALLER_VARS, renderBrokerStatusProbe, } from "./broker-glue.js";
3
2
  /**
4
3
  * Escapes a literal string for safe inclusion in POSIX `/bin/sh` single quotes.
5
4
  * A single quote is represented as `'\''` (close single quote, literal escaped single quote, reopen single quote).
@@ -69,7 +68,6 @@ export function renderNativeStartStopStatus(input) {
69
68
  const envBlock = envLines.length > 0 ? `\n${envLines.join("\n")}` : "";
70
69
  const commandLine = [execToken, ...argTokens].join(" ");
71
70
  return `#!/bin/sh
72
- ${BROKER_INSTALLER_VARS}
73
71
  PKGDEST="${pkgDestFallback}"
74
72
  PKGVAR="${pkgVarFallback}"
75
73
  PIDFILE="$PKGVAR/${pkg}.pid"
@@ -129,7 +127,6 @@ case "$1" in
129
127
  exit 0
130
128
  ;;
131
129
  status)
132
- ${renderBrokerStatusProbe(pkg)}
133
130
  if pid_alive; then
134
131
  exit 0
135
132
  fi
@@ -27,7 +27,6 @@ export async function materializeNativePayload(options) {
27
27
  // The payload root IS SYNOPKG_PKGDEST (/var/packages/<pkg>/target): DSM
28
28
  // extracts package.tgz straight into it. Nesting a literal `target/`
29
29
  // directory here would put the binary at $SYNOPKG_PKGDEST/target/<exec>.
30
- // Same layout the Broker SPK ships (packages/broker/src/spk/build.ts).
31
30
  if (kind === "raw") {
32
31
  materializeRaw(sourceBytes, targetDir, rawSourceName(sourceName));
33
32
  }
@@ -0,0 +1,5 @@
1
+ /** Copy legal text only; never follow a project-supplied symlink. */
2
+ export declare function copyNoticeTree(source: string, target: string): void;
3
+ /** Fixed payload location, independent of app code/binary paths. */
4
+ export declare function copyProjectNotices(root: string, payload: string): void;
5
+ export declare function copyStandaloneNotices(root: string, uiDir: string, payload: string, go: boolean, helper: boolean, identity: boolean, goDir?: string): void;
@@ -0,0 +1,60 @@
1
+ import { copyFileSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ /** Copy legal text only; never follow a project-supplied symlink. */
4
+ export function copyNoticeTree(source, target) {
5
+ const stat = lstatSync(source);
6
+ if (stat.isSymbolicLink())
7
+ throw new Error(`[NOTICE_UNSAFE] Symlink in notice tree: ${source}`);
8
+ if (stat.isDirectory()) {
9
+ mkdirSync(target, { recursive: true });
10
+ for (const name of readdirSync(source).sort())
11
+ copyNoticeTree(join(source, name), join(target, name));
12
+ }
13
+ else if (stat.isFile() && stat.size <= 8 * 1024 * 1024) {
14
+ mkdirSync(dirname(target), { recursive: true });
15
+ copyFileSync(source, target);
16
+ }
17
+ else
18
+ throw new Error(`[NOTICE_UNSAFE] Notice must be a bounded regular file: ${source}`);
19
+ }
20
+ /** Fixed payload location, independent of app code/binary paths. */
21
+ export function copyProjectNotices(root, payload) {
22
+ const dest = join(payload, 'LICENSES');
23
+ if (existsSync(join(root, 'LICENSES')))
24
+ copyNoticeTree(join(root, 'LICENSES'), dest);
25
+ if (existsSync(join(root, 'LICENSE')))
26
+ copyNoticeTree(join(root, 'LICENSE'), join(dest, 'APP.txt'));
27
+ }
28
+ export function copyStandaloneNotices(root, uiDir, payload, go, helper, identity, goDir = join(root, 'backend')) {
29
+ copyProjectNotices(root, payload);
30
+ const dest = join(payload, 'LICENSES');
31
+ const shared = new URL('../../templates/_shared/', import.meta.url);
32
+ if (go || helper) {
33
+ mkdirSync(dest, { recursive: true });
34
+ for (const name of ['GO-LICENSE', 'GO-PATENTS'])
35
+ copyFileSync(new URL(name, shared), join(dest, name));
36
+ if (existsSync(join(goDir, 'THIRD_PARTY_NOTICES.txt')))
37
+ copyNoticeTree(join(goDir, 'THIRD_PARTY_NOTICES.txt'), join(dest, 'GO-THIRD_PARTY_NOTICES.txt'));
38
+ }
39
+ if (helper)
40
+ copyFileSync(new URL('../../templates/native-go/backend/THIRD_PARTY_NOTICES.txt', import.meta.url), join(dest, 'HELPER-THIRD_PARTY_NOTICES.txt'));
41
+ const frontend = join(root, 'frontend/package.json');
42
+ const usesUi = existsSync(frontend) && Boolean(JSON.parse(readFileSync(frontend, 'utf8')).dependencies?.['@synopackageland/ui']);
43
+ if (usesUi) {
44
+ for (const name of ['UI-LICENSE', 'UI-THIRD_PARTY.md', 'THIRD_PARTY_NOTICES.txt', 'inventory.json']) {
45
+ const source = join(uiDir, 'LICENSES', name);
46
+ if (!existsSync(source))
47
+ throw new Error(`[NOTICE_MISSING] UI notice missing: ${source}; rebuild frontend`);
48
+ }
49
+ }
50
+ if (existsSync(join(uiDir, 'LICENSES')))
51
+ copyNoticeTree(join(uiDir, 'LICENSES'), join(dest, 'ui'));
52
+ if (identity) {
53
+ const source = join(root, 'node/dist/LICENSES');
54
+ for (const name of ['THIRD_PARTY_NOTICES.txt', 'inventory.json']) {
55
+ if (!existsSync(join(source, name)))
56
+ throw new Error(`[NOTICE_MISSING] Better Auth notice missing: ${name}; rebuild node bundle`);
57
+ }
58
+ copyNoticeTree(source, join(dest, 'better-auth'));
59
+ }
60
+ }
package/dist/cli.js CHANGED
@@ -1,4 +1,6 @@
1
+ import { planDeployment, deployStandalone } from "./deploy/plan.js";
1
2
  import { Command } from "commander";
3
+ import { readFileSync, renameSync } from "node:fs";
2
4
  import { resolve, dirname } from "node:path";
3
5
  import { findProjectRoot } from "./discovery.js";
4
6
  import { loadContract } from "./contract/load.js";
@@ -14,13 +16,13 @@ import { deployProject } from "./deploy/deploy.js";
14
16
  import { createNasHost } from "./host/dsm-client.js";
15
17
  import { projectInfo, formatProjectInfo } from "./info.js";
16
18
  import { followProjectLogs } from "./log.js";
17
- import { testProjectOnHost } from "./test-host.js";
18
19
  import { formatSkillList, readSkill, resolveSkillsRoot } from "./skill.js";
19
- import { publishProject, resolveCommunityAppsRoot } from "./publish/publish.js";
20
- import { formatPreflight, runPublicReleasePreflight } from "./publish/preflight.js";
21
- import { createExecGitHubCli, createExecGitOps } from "./publish/github-pr.js";
22
- import { communityAppsGitHubRepo } from "./publish/github-repo.js";
23
20
  import { resolveInstallParameterExtraValues } from "./deploy/param-values.js";
21
+ import { findStandaloneRoot, loadStandaloneManifest } from "./standalone/manifest.js";
22
+ import { buildStandalone } from "./standalone/build.js";
23
+ import { inspectSpk } from "./standalone/inspect-spk.js";
24
+ import { templatesRoot } from "./template-paths.js";
25
+ import { join } from "node:path";
24
26
  function collectKvOption(value, previous, flag, example) {
25
27
  const separator = value.indexOf("=");
26
28
  if (separator <= 0) {
@@ -44,6 +46,27 @@ function resolveProject(cwd, project) {
44
46
  const start = project ? resolve(cwd, project) : cwd;
45
47
  return findProjectRoot(start);
46
48
  }
49
+ function standaloneRoot(cwd, project) {
50
+ return findStandaloneRoot(project ? resolve(cwd, project) : cwd);
51
+ }
52
+ function formatSpkInspection(spk, report) {
53
+ const lines = [
54
+ `SPK:${spk}`,
55
+ `package:${report.package ?? "?"} version:${report.version ?? "?"}`,
56
+ `arch:${report.arch ?? "?"} runtime:${report.kind ?? "?"}`,
57
+ `簽署:${report.signed ? "有 Synology 簽章" : "未簽署(Package Center 需允許任何發行者)"}`,
58
+ `CGI:${report.cgi ?? "無"}`,
59
+ ...(report.integration ? [`integration protocol:${report.integration.protocol};NAS data mode:${report.integration.dataAccess};policy:${report.integration.dataAccess === "relaxed" ? "UID + username" : "unavailable"};inspect 只核對產物,不證明 runtime adapters/DSM 認證`] : []),
60
+ "payload:",
61
+ ...report.payload.map((entry) => ` ${entry.mode} ${entry.path}`),
62
+ ];
63
+ const integration = report.payload.some(entry => entry.path === "integration/helper");
64
+ lines.push(report.findings.length === 0
65
+ ? integration ? "檢查:安裝以套件帳號執行;執行期整合另需管理員核准,此檢查不證明 integration ready。" : "檢查:沒有 root 權限需求或異常。"
66
+ : "問題:");
67
+ lines.push(...report.findings.map((finding) => ` - ${finding}`));
68
+ return lines.join("\n");
69
+ }
47
70
  function requireProject(cwd, project) {
48
71
  const found = resolveProject(cwd, project);
49
72
  if (!found) {
@@ -52,6 +75,30 @@ function requireProject(cwd, project) {
52
75
  }
53
76
  return found;
54
77
  }
78
+ async function buildStandaloneCommand(root, arch, options) {
79
+ if (options.output && !arch) {
80
+ console.error("-o 只能搭配 --arch 建置單一架構;多架構請用 --out-dir。");
81
+ process.exit(1);
82
+ }
83
+ const outDir = options.output
84
+ ? dirname(resolve(process.cwd(), options.output))
85
+ : options.outDir ? resolve(process.cwd(), options.outDir) : undefined;
86
+ try {
87
+ const { outputs } = await buildStandalone({ root, arches: arch ? [arch] : undefined, outDir });
88
+ for (let output of outputs) {
89
+ if (options.output) {
90
+ const target = resolve(process.cwd(), options.output);
91
+ renameSync(output, target);
92
+ output = target;
93
+ }
94
+ console.log(`已產生 ${output}`);
95
+ }
96
+ }
97
+ catch (error) {
98
+ console.error(error instanceof Error ? error.message : String(error));
99
+ process.exit(1);
100
+ }
101
+ }
55
102
  export async function runCli(argv) {
56
103
  const program = new Command();
57
104
  program
@@ -59,51 +106,20 @@ export async function runCli(argv) {
59
106
  .description("Syno Package Land Developer Kit CLI")
60
107
  .option("--project <dir>", "App 專案根目錄");
61
108
  program
62
- .command("doctor")
63
- .description("唯讀診斷本機合約/Compose 與 NAS 部署狀態")
64
- .option("--host <name>", "synoagentcli profile 或 NAS 名稱")
65
- .option("--package <id>", "指定診斷的 Package Identity(省略時由合約判定)")
66
- .option("--dev", "診斷 Development Package Identity({package}.dev)")
67
- .option("--json", "輸出 machine-readable JSON 診斷報告")
68
- .action(async (options, command) => {
109
+ .command("validate")
110
+ .description("驗證 App Contract 與 Compose,或 Standalone Package 的 dsm-package.yaml")
111
+ .action((_options, command) => {
69
112
  const global = command.parent?.opts() ?? {};
70
- const project = resolveProject(process.cwd(), global.project);
71
- let host = null;
72
- if (options.host) {
73
- host = createNasHost({ host: options.host });
74
- if (!host) {
75
- console.error(`[${"HOST_CREDENTIALS_MISSING"}] 找不到 NAS 憑證。請設定 synoagentcli profile 或 DSM_URL/DSM_PASSWORD。`);
113
+ const standalone = standaloneRoot(process.cwd(), global.project);
114
+ if (standalone) {
115
+ const loaded = loadStandaloneManifest(standalone);
116
+ if (!loaded.ok) {
117
+ console.error(loaded.errors.map((e) => `[${e.code}] ${e.message}`).join("\n"));
76
118
  process.exit(1);
77
119
  }
120
+ console.log("驗證通過。");
121
+ return;
78
122
  }
79
- try {
80
- const { runDoctor, formatDoctorReport } = await import("./doctor.js");
81
- const report = await runDoctor({
82
- project,
83
- host,
84
- packageId: options.package,
85
- dev: options.dev,
86
- });
87
- if (options.json) {
88
- console.log(JSON.stringify(report, null, 2));
89
- }
90
- else {
91
- console.log(formatDoctorReport(report));
92
- }
93
- if (!report.ok) {
94
- process.exit(1);
95
- }
96
- }
97
- catch (error) {
98
- console.error(error instanceof Error ? error.message : String(error));
99
- process.exit(1);
100
- }
101
- });
102
- program
103
- .command("validate")
104
- .description("驗證 App Contract 與 Compose")
105
- .action((options, command) => {
106
- const global = command.parent?.opts() ?? {};
107
123
  const project = requireProject(process.cwd(), global.project);
108
124
  const result = validateProject(project, {
109
125
  profile: "personal",
@@ -119,19 +135,57 @@ export async function runCli(argv) {
119
135
  });
120
136
  program
121
137
  .command("inspect")
122
- .description("檢視 Compose 意圖與 Web entry 提示")
123
- .action((_options, command) => {
138
+ .description("檢視 Compose 意圖與 Web entry 提示;--spk 檢查已產生的 SPK")
139
+ .option("--spk <file>", "不安裝,檢查 SPK 的 identity、檔案 mode 與 root 權限需求")
140
+ .action(async (options, command) => {
124
141
  const global = command.parent?.opts() ?? {};
142
+ if (options.spk) {
143
+ const spk = resolve(process.cwd(), options.spk);
144
+ try {
145
+ const report = await inspectSpk(spk);
146
+ console.log(formatSpkInspection(spk, report));
147
+ if (report.findings.length > 0) {
148
+ process.exit(1);
149
+ }
150
+ }
151
+ catch (error) {
152
+ console.error(error instanceof Error ? error.message : String(error));
153
+ process.exit(1);
154
+ }
155
+ return;
156
+ }
125
157
  const project = requireProject(process.cwd(), global.project);
126
158
  const report = inspectProject(project);
127
159
  console.log(formatInspectReport(report));
128
160
  });
129
161
  program
130
162
  .command("init")
131
- .description("從模板建立 App 專案")
163
+ .description("從模板建立 App 專案(不覆蓋既有檔案)")
132
164
  .option("-t, --template <name>", `模板:${listTemplates().join(" | ")}`)
133
- .option("--native", "建立 Native Prebuilt Binary App 專案")
165
+ .option("--binary", "建立 Binary App:以套件自己的帳號執行預先建置的 binary(等同 -t binary)")
166
+ .option("--package <id>", "native-go:INFO.package(預設由目錄名產生,例如 photo-tagger → PhotoTagger)")
167
+ .option("--name <display>", "native-go:顯示名稱(預設由目錄名產生)")
168
+ .option("--privilege <none|root>", "native-go:root 另加由 DSM 管理員在套件視窗核准的 root 操作(預設 none)")
169
+ .option("--ui <plain|vue>", `native-go:沿用 UI ${JSON.parse(readFileSync(join(templatesRoot(), "native-go-vue/frontend/package.json"), "utf8")).dependencies["@synopackageland/ui"]} 的 Vue 介面(預設 plain)`)
170
+ .option("--integration <go|better-auth>", "native-go --ui vue:每包 helper 與私有範例;better-auth 才加入 Node")
171
+ .option("--integration-protocol <1|2>", "helper inventory protocol(預設 1);2 可選 NAS data policy,缺已認證 adapters 仍拒絕")
172
+ .option("--data-access <unavailable|relaxed>", "protocol 2 build-time 身分模式(預設 unavailable);relaxed 不繞過 DSM/App/lifecycle gates")
134
173
  .argument("[dir]", "目標目錄", ".")
174
+ .addHelpText("after", `
175
+ 模板分兩類:
176
+ 獨立 Container / Binary App(synology-app.yaml):
177
+ 容器(compose.yaml):hello-web、hello-web-page、hello-files、compose-import
178
+ binary(native.yaml):執行一個預先建置的 binary 服務;可用 adminport 在自己的 port 提供網頁
179
+ Standalone Package(未簽署原生 SPK,含 Go CGI 與 DSM 視窗,dsm-package.yaml):
180
+ native-go:Go CGI backend + DSM 視窗 UI,預設需登入、admin 動作另外宣告。
181
+ --privilege root:另加固定的 root 操作(root/<名稱>.sh),由 DSM 管理員在套件視窗
182
+ 以密碼核准後才能執行;預設 none,完全不用 root。
183
+
184
+ 快速開始(native-go,需要 Go 1.24+):
185
+ synopkgland init -t native-go my-app
186
+ cd my-app && $EDITOR backend/internal/app/routes.go ui/app.js
187
+ synopkgland build-spk # → dist/<Package>-<version>-<arch>.spk
188
+ synopkgland inspect --spk dist/<file>.spk`)
135
189
  .action(async (dir, options, command) => {
136
190
  const global = command.parent?.opts() ?? {};
137
191
  if (global.project) {
@@ -139,27 +193,47 @@ export async function runCli(argv) {
139
193
  process.exit(1);
140
194
  }
141
195
  const targetDir = resolve(process.cwd(), dir);
142
- if (options.native) {
143
- initFromTemplate("native", targetDir);
144
- console.log(`已建立 native 專案於 ${targetDir}`);
145
- return;
196
+ const template = options.binary ? "binary" : options.template;
197
+ if (!template) {
198
+ console.error(`請指定 -t, --template <name> 或 --binary。可選模板:${listTemplates().join(" | ")}`);
199
+ process.exit(1);
146
200
  }
147
- if (!options.template) {
148
- console.error(`請指定 -t, --template <name> 或 --native。可選模板:${listTemplates().join(" | ")}`);
201
+ if (!isTemplateName(template)) {
202
+ console.error(`未知模板:${template}`);
149
203
  process.exit(1);
150
204
  }
151
- if (!isTemplateName(options.template)) {
152
- console.error(`未知模板:${options.template}`);
205
+ if ((options.package || options.name || options.privilege) && template !== "native-go") {
206
+ console.error("--package/--name/--privilege 只適用於 -t native-go。");
153
207
  process.exit(1);
154
208
  }
155
- initFromTemplate(options.template, targetDir);
156
- console.log(`已建立 ${options.template} 專案於 ${targetDir}`);
209
+ try {
210
+ initFromTemplate(template, targetDir, {
211
+ packageId: options.package,
212
+ displayName: options.name,
213
+ privilege: options.privilege,
214
+ ui: options.ui,
215
+ integration: options.integration,
216
+ integrationProtocol: options.integrationProtocol === undefined ? undefined : (["1", "2"].includes(options.integrationProtocol) ? Number(options.integrationProtocol) : NaN),
217
+ dataAccess: options.dataAccess,
218
+ });
219
+ }
220
+ catch (error) {
221
+ console.error(error instanceof Error ? error.message : String(error));
222
+ process.exit(1);
223
+ }
224
+ console.log(`已建立 ${template} 專案於 ${targetDir}`);
225
+ if (template === "native-go") {
226
+ console.log(`下一步:
227
+ cd ${dir}
228
+ (cd backend && go test ./...) # 認證與權限政策測試
229
+ synopkgland build-spk # 編譯 Go + 打包每個架構的未簽署 SPK
230
+ 說明見 README.md。`);
231
+ }
157
232
  });
158
233
  program
159
234
  .command("dev")
160
- .description("啟動本機 mock Broker 與 Compose")
161
- .option("--files-root <dir>", "將本機目錄對應為 NAS Logical Path")
162
- .action(async (options, command) => {
235
+ .description("啟動 App 自己的本機 Compose")
236
+ .action(async (_options, command) => {
163
237
  const global = command.parent?.opts() ?? {};
164
238
  const project = requireProject(process.cwd(), global.project);
165
239
  const validation = validateProject(project);
@@ -170,10 +244,7 @@ export async function runCli(argv) {
170
244
  try {
171
245
  const handle = await runDev({
172
246
  project,
173
- filesRoot: options.filesRoot,
174
247
  });
175
- console.log(`Mock Broker:${handle.brokerBaseUrl}`);
176
- console.log(`Bootstrap:${handle.bootstrapPath}`);
177
248
  console.log("Compose 已就緒。按 Ctrl+C 結束。");
178
249
  const shutdown = async () => {
179
250
  await handle.close();
@@ -191,31 +262,9 @@ export async function runCli(argv) {
191
262
  program
192
263
  .command("test")
193
264
  .description("驗證契約並等待 Compose 就緒")
194
- .option("--host <name>", "在已部署的 NAS 上執行 Open smoke")
195
- .option("--dev", "檢查 Development Package Identity({package}.dev)")
196
- .action(async (options, command) => {
265
+ .action(async (_options, command) => {
197
266
  const global = command.parent?.opts() ?? {};
198
267
  const project = requireProject(process.cwd(), global.project);
199
- if (options.host) {
200
- const host = createNasHost({ host: options.host });
201
- if (!host) {
202
- console.error("找不到 NAS 憑證。請設定 synoagentcli profile 或 DSM_URL/DSM_PASSWORD。");
203
- process.exit(1);
204
- }
205
- try {
206
- const result = await testProjectOnHost({ project, host, dev: options.dev });
207
- if (!result.ok) {
208
- console.error(result.message ?? "測試失敗。");
209
- process.exit(1);
210
- }
211
- console.log("NAS smoke 測試通過。");
212
- }
213
- catch (error) {
214
- console.error(error instanceof Error ? error.message : String(error));
215
- process.exit(1);
216
- }
217
- return;
218
- }
219
268
  try {
220
269
  const result = await testProject({ project });
221
270
  if (!result.ok) {
@@ -231,16 +280,40 @@ export async function runCli(argv) {
231
280
  });
232
281
  program
233
282
  .command("deploy")
234
- .description("Inner Loop Deploy 到 NAS(產生 SPK、簽發 Local Attestation、安裝)")
235
- .requiredOption("--host <name>", "synoagentcli profile 或 NAS 名稱")
283
+ .description("建置獨立 SPK 並直接安裝到 DSM")
284
+ .option("--host <name>", "synoagentcli profile 或 NAS 名稱")
236
285
  .option("--arch <family>", "native App 的目標架構:x86_64 或 aarch64(省略時由 NAS 判定)")
237
286
  .option("--dev", "部署到 Development Package Identity({package}.dev)")
238
- .option("--replace-curated", "危險:將既有 Curated App Package Attestation 降級為 Local Attestation")
239
287
  .option("--share <slot=name>", "此 NAS 上的 Shared Folder 邏輯名(契約 shared_folder 槽,可重複)", collectShareOption)
240
288
  .option("--run-as <slot=name>", "此 NAS 上的 DSM 使用者邏輯名(契約 dsm_user 槽)", collectRunAsOption)
241
289
  .option("--param <NAME=value>", "契約 string/boolean Install Parameter 答案(可重複)", collectParamOption)
290
+ .option("--dry-run", "只輸出本機部署計畫,不連接 NAS")
242
291
  .action(async (options, command) => {
243
292
  const global = command.parent?.opts() ?? {};
293
+ if (options.arch !== undefined && !isNativeArchFamily(String(options.arch))) {
294
+ throw new Error('--arch accepts x86_64 or aarch64');
295
+ }
296
+ const plan = planDeployment(resolve(process.cwd(), global.project ?? '.'), {
297
+ arch: options.arch, dev: options.dev,
298
+ });
299
+ if (options.dryRun) {
300
+ console.log(JSON.stringify(plan, null, 2));
301
+ return;
302
+ }
303
+ if (!options.host)
304
+ throw new Error('deploy requires --host, or use --dry-run');
305
+ if (plan.kind === 'native-go') {
306
+ if (options.share || options.runAs || options.param)
307
+ throw new Error('native-go does not accept container install parameters');
308
+ const host = createNasHost({ host: options.host });
309
+ if (!host)
310
+ throw new Error('NAS credentials not found');
311
+ const output = await deployStandalone(plan, host);
312
+ console.log(`已部署 ${plan.packageId}: ${output}`);
313
+ for (const note of plan.notes)
314
+ console.log(note);
315
+ return;
316
+ }
244
317
  const project = requireProject(process.cwd(), global.project);
245
318
  const parameterCheck = resolveInstallParameterExtraValues({
246
319
  contract: loadContract(project.contractPath).contract,
@@ -265,7 +338,6 @@ export async function runCli(argv) {
265
338
  project,
266
339
  host,
267
340
  dev: options.dev,
268
- replaceCurated: options.replaceCurated,
269
341
  shareValues: options.share,
270
342
  runAsValues: options.runAs,
271
343
  paramValues: options.param,
@@ -289,7 +361,7 @@ export async function runCli(argv) {
289
361
  });
290
362
  program
291
363
  .command("info")
292
- .description("顯示 NAS 上的 attestation、Open URL 與 readiness")
364
+ .description("顯示 DSM 套件狀態與 Open URL")
293
365
  .requiredOption("--host <name>", "synoagentcli profile 或 NAS 名稱")
294
366
  .option("--dev", "查詢 Development Package Identity")
295
367
  .action(async (options, command) => {
@@ -369,20 +441,27 @@ export async function runCli(argv) {
369
441
  });
370
442
  program
371
443
  .command("build-spk")
372
- .description("產生本機 thin SPK(未簽署)")
373
- .option("-o, --output <path>", "輸出 .spk 路徑")
374
- .option("--arch <family>", "native App 的目標架構:x86_64 或 aarch64(Compose App 不需要)")
444
+ .description("產生本機未簽署 SPK:容器 App(synology-app.yaml)或 Standalone Package(dsm-package.yaml,會先編譯 UI 與 Go)")
445
+ .option("-o, --output <path>", "輸出 .spk 路徑(Standalone Package 只在建置單一架構時可用)")
446
+ .option("--out-dir <dir>", "Standalone Package:輸出目錄(預設 dist/)")
447
+ .option("--arch <family>", "目標架構:x86_64 或 aarch64(native App 必填;Standalone Package 預設建置 arches 全部)")
375
448
  .action(async (options, command) => {
376
449
  const global = command.parent?.opts() ?? {};
377
- const project = requireProject(process.cwd(), global.project);
378
450
  if (options.arch !== undefined && !isNativeArchFamily(String(options.arch))) {
379
451
  console.error(`--arch 只接受 x86_64 或 aarch64,收到 ${String(options.arch)}。`);
380
452
  process.exit(1);
381
453
  }
454
+ const archFamily = options.arch ? String(options.arch) : undefined;
455
+ const standalone = standaloneRoot(process.cwd(), global.project);
456
+ if (standalone) {
457
+ await buildStandaloneCommand(standalone, archFamily, options);
458
+ return;
459
+ }
460
+ const project = requireProject(process.cwd(), global.project);
382
461
  const result = await buildSpk({
383
462
  project,
384
463
  outputPath: options.output ? resolve(process.cwd(), options.output) : undefined,
385
- archFamily: options.arch ? String(options.arch) : undefined,
464
+ archFamily,
386
465
  });
387
466
  if (!result.ok) {
388
467
  console.error(`建置失敗:${result.errors.join(", ")}`);
@@ -390,57 +469,5 @@ export async function runCli(argv) {
390
469
  }
391
470
  console.log(`已產生 ${result.outputPath}`);
392
471
  });
393
- program
394
- .command("public-release-submit")
395
- .description("送審公開發佈:先跑完本機所有 Curated 檢查,通過才對 Community Apps 建立 Pull Request。"
396
- + "不上傳 SPK、不簽署、不發佈——實際發佈由 maintainer 合併後的 trusted CI 執行。")
397
- .option("--check", "只跑本機檢查,不建立 Pull Request")
398
- .option("--base <branch>", "PR 目標分支", "master")
399
- .action(async (options, command) => {
400
- const global = command.parent?.opts() ?? {};
401
- const project = requireProject(process.cwd(), global.project);
402
- const preflight = await runPublicReleasePreflight(project);
403
- if (!preflight.ok) {
404
- // A gate's reasons belong on stderr so CI logs and `2>` capture them.
405
- console.error(formatPreflight(preflight));
406
- console.error("\n本機檢查未通過,未建立 Pull Request。");
407
- process.exit(1);
408
- }
409
- console.log(formatPreflight(preflight));
410
- if (options.check) {
411
- console.log("\n本機檢查全部通過。加上 --check 以外的執行才會送審。");
412
- return;
413
- }
414
- const communityAppsRoot = resolveCommunityAppsRoot(project.root);
415
- if (!communityAppsRoot) {
416
- console.error("送審需要 Community Apps 定義倉庫的本機副本。請先取得它,再從你的 App 專案目錄重跑:\n"
417
- + " git clone https://github.com/synopackageland/synopkgland-community-apps.git\n"
418
- + " export SYNOPKGLAND_COMMUNITY_APPS_ROOT=$PWD/synopkgland-community-apps");
419
- process.exit(1);
420
- }
421
- const repoRoot = dirname(communityAppsRoot);
422
- try {
423
- const result = await publishProject({
424
- project,
425
- communityAppsRoot,
426
- baseBranch: options.base,
427
- github: createExecGitHubCli(repoRoot, communityAppsGitHubRepo()),
428
- git: createExecGitOps(repoRoot),
429
- });
430
- if (!result.ok) {
431
- console.error(result.message ?? result.code ?? "publish 失敗。");
432
- process.exit(1);
433
- }
434
- if (result.noChanges) {
435
- console.log(result.message ?? "Community Apps 定義已是最新。");
436
- return;
437
- }
438
- console.log(`已建立 PR:${result.prUrl}`);
439
- }
440
- catch (error) {
441
- console.error(error instanceof Error ? error.message : String(error));
442
- process.exit(1);
443
- }
444
- });
445
472
  await program.parseAsync(argv);
446
473
  }
@@ -28,7 +28,7 @@ export interface ResourceWorkerEligibility {
28
28
  * - any non-headless App without a unique literal published adminport status probe
29
29
  */
30
30
  export declare function resourceWorkerEligibility(contract: AppContract, compose: ComposeDocument): ResourceWorkerEligibility;
31
- export type ComposeRoute = "static-zero-config" | "dynamic" | "broker-installer" | "reject";
31
+ export type ComposeRoute = "static-zero-config" | "dynamic" | "reject";
32
32
  export interface ComposeRouteClassification {
33
33
  route: ComposeRoute;
34
34
  eligibility: ResourceWorkerEligibility;
@@ -42,7 +42,6 @@ export interface ComposeRouteClassification {
42
42
  * placed in the project .env.
43
43
  */
44
44
  export declare function classifyComposeRoute(contract: AppContract, parsed: ParsedCompose, composeFile?: string): ComposeRouteClassification;
45
- export declare function brokerInstallerRouteWarning(compose: ComposeDocument, composeFile?: string): ValidationError;
46
45
  export declare function collectComposeInterpolations(compose: ComposeDocument): Set<string>;
47
46
  export declare function validateComposeSecurity(compose: ComposeDocument, composeFile: string, options: {
48
47
  profile: "personal" | "listing";