@crewx/sdk 0.9.0-rc.23 → 0.9.0-rc.230

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 (460) hide show
  1. package/README.md +1 -1
  2. package/dist/account/auth-client.d.ts +61 -0
  3. package/dist/account/auth-json-v2.d.ts +1 -0
  4. package/dist/account/auth-json.d.ts +30 -0
  5. package/dist/account/config.d.ts +37 -0
  6. package/dist/account/env-bootstrap.d.ts +11 -0
  7. package/dist/account/errors.d.ts +24 -0
  8. package/dist/account/index.d.ts +12 -0
  9. package/dist/account/index.js +2 -0
  10. package/dist/account/session-manager.d.ts +47 -0
  11. package/dist/activity-log/builder.d.ts +59 -6
  12. package/dist/agent/agent-list-view.d.ts +19 -0
  13. package/dist/agent-interceptor/chain.d.ts +25 -0
  14. package/dist/agent-interceptor/index.d.ts +6 -0
  15. package/dist/agent-interceptor/model-runner.d.ts +19 -0
  16. package/dist/agent-interceptor/program-runner.d.ts +13 -0
  17. package/dist/agent-interceptor/protocol.d.ts +68 -0
  18. package/dist/agent-interceptor/run-stop.d.ts +3 -0
  19. package/dist/agent-interceptor/schema.d.ts +267 -0
  20. package/dist/agent-interceptor/types.d.ts +88 -0
  21. package/dist/app/app-files/args.d.ts +12 -0
  22. package/dist/app/app-files/errors.d.ts +6 -0
  23. package/dist/app/app-files/index.d.ts +35 -0
  24. package/dist/app/app-files/lock.d.ts +26 -0
  25. package/dist/app/app-files/root.d.ts +22 -0
  26. package/dist/app/app-files/store.d.ts +48 -0
  27. package/dist/app/app-files/write.child.d.ts +1 -0
  28. package/dist/app/app.d.ts +168 -0
  29. package/dist/app/backend-env.d.ts +3 -0
  30. package/dist/app/content-media-types.d.ts +2 -0
  31. package/dist/app/context.d.ts +2 -0
  32. package/dist/app/entry.d.ts +9 -0
  33. package/dist/app/frame.d.ts +55 -0
  34. package/dist/app/index.d.ts +20 -0
  35. package/dist/app/index.js +13 -0
  36. package/dist/app/job-bridge.child.d.ts +1 -0
  37. package/dist/app/job-bridge.d.ts +67 -0
  38. package/dist/app/job-bridge.drain.child.d.ts +1 -0
  39. package/dist/app/job-bridge.example.d.ts +11 -0
  40. package/dist/app/job-contract.d.ts +40 -0
  41. package/dist/app/job-wire.d.ts +149 -0
  42. package/dist/app/protocol.d.ts +9 -0
  43. package/dist/app/runtime.d.ts +23 -0
  44. package/dist/app/schedule-contract.d.ts +59 -0
  45. package/dist/app/tool-mode.d.ts +3 -0
  46. package/dist/app-artifact-policy/check.d.ts +2 -0
  47. package/dist/app-artifact-policy/contract.d.ts +54 -0
  48. package/dist/app-artifact-policy/helper.d.ts +15 -0
  49. package/dist/app-artifact-policy/index.d.ts +3 -0
  50. package/dist/app-artifact-policy/index.js +18 -0
  51. package/dist/app-artifact-policy/paths.d.ts +24 -0
  52. package/dist/app-artifact-policy/scan.d.ts +47 -0
  53. package/dist/app-install/dependencies.d.ts +30 -0
  54. package/dist/app-install/errors.d.ts +9 -0
  55. package/dist/app-install/index.d.ts +9 -0
  56. package/dist/app-install/index.js +7 -0
  57. package/dist/app-install/process.d.ts +33 -0
  58. package/dist/app-install/runtime-env.d.ts +2 -0
  59. package/dist/app-install/verify.d.ts +10 -0
  60. package/dist/app-sync/continuation.d.ts +67 -0
  61. package/dist/app-sync/coordinator.d.ts +92 -0
  62. package/dist/app-sync/create-ledger.d.ts +27 -0
  63. package/dist/app-sync/index.d.ts +9 -0
  64. package/dist/app-sync/index.js +390 -0
  65. package/dist/app-sync/scope.d.ts +35 -0
  66. package/dist/app-sync/session-fence.d.ts +26 -0
  67. package/dist/app-sync/sqlite-store.d.ts +237 -0
  68. package/dist/app-sync/types.d.ts +855 -0
  69. package/dist/app-ui/index.d.ts +95 -0
  70. package/dist/app-ui/index.js +1 -0
  71. package/dist/attachment-receive/index.d.ts +76 -0
  72. package/dist/attachment-receive/index.js +2 -0
  73. package/dist/boxing/box.types.d.ts +4 -0
  74. package/dist/config/canonicalize-agent-options.d.ts +13 -0
  75. package/dist/config/default-agent-models.d.ts +11 -0
  76. package/dist/config/global-settings.d.ts +33 -0
  77. package/dist/config/migrate-grok-mode.d.ts +6 -0
  78. package/dist/config/model-compat.d.ts +31 -0
  79. package/dist/config/models.generated.d.ts +38 -0
  80. package/dist/config/models.remote.d.ts +1 -0
  81. package/dist/config/overdrive.d.ts +7 -0
  82. package/dist/config/pricing.d.ts +6 -3
  83. package/dist/config/pricing.generated.d.ts +4 -0
  84. package/dist/config/pricing.types.d.ts +4 -0
  85. package/dist/config/timeout.config.d.ts +4 -0
  86. package/dist/config/wi-boards.d.ts +19 -0
  87. package/dist/context/GoalLoader.d.ts +6 -0
  88. package/dist/context-budget/continuity.d.ts +64 -0
  89. package/dist/context-budget/fixed-slot-shrink.d.ts +97 -0
  90. package/dist/context-budget/index.d.ts +168 -0
  91. package/dist/conversation/index.d.ts +1 -1
  92. package/dist/conversation/sqlite-provider.d.ts +9 -3
  93. package/dist/conversation/to-template-messages.d.ts +12 -2
  94. package/dist/conversation/types.d.ts +94 -1
  95. package/dist/desktop/command-runner.d.ts +4 -0
  96. package/dist/desktop/default-adapters.d.ts +4 -0
  97. package/dist/desktop/global-install.d.ts +19 -0
  98. package/dist/desktop/index.d.ts +3 -0
  99. package/dist/desktop/index.js +3 -0
  100. package/dist/desktop/install.d.ts +5 -0
  101. package/dist/desktop/lnk.d.ts +22 -0
  102. package/dist/desktop/manifest.d.ts +21 -0
  103. package/dist/desktop/types.d.ts +67 -0
  104. package/dist/desktop/version.d.ts +1 -0
  105. package/dist/desktop/windows-paths.d.ts +21 -0
  106. package/dist/desktop/wrapper.d.ts +18 -0
  107. package/dist/esm/account/index.js +2 -0
  108. package/dist/esm/app/index.js +13 -0
  109. package/dist/esm/app-artifact-policy/index.js +18 -0
  110. package/dist/esm/app-install/index.js +7 -0
  111. package/dist/esm/app-sync/index.js +390 -0
  112. package/dist/esm/attachment-receive/index.js +2 -0
  113. package/dist/esm/desktop/index.js +3 -0
  114. package/dist/esm/history-snapshot/index.js +16 -0
  115. package/dist/esm/index.js +1450 -224
  116. package/dist/esm/node/index.js +2 -0
  117. package/dist/esm/plugins/index.js +604 -219
  118. package/dist/esm/process/index.js +1 -0
  119. package/dist/esm/publish/index.js +2 -0
  120. package/dist/esm/repository/index.js +863 -211
  121. package/dist/esm/skills/index.js +2 -0
  122. package/dist/esm/testing/index.js +1 -1
  123. package/dist/events/types.d.ts +44 -0
  124. package/dist/facade/Crewx.d.ts +108 -5
  125. package/dist/facade/task-ticket.d.ts +14 -0
  126. package/dist/highlight/thread-highlight-prompt.d.ts +2 -0
  127. package/dist/highlight/thread-highlighter.d.ts +326 -0
  128. package/dist/history-snapshot/index.d.ts +84 -0
  129. package/dist/history-snapshot/index.js +16 -0
  130. package/dist/index.browser.d.ts +26 -1
  131. package/dist/index.browser.js +6 -2
  132. package/dist/index.d.ts +175 -20
  133. package/dist/index.js +1450 -224
  134. package/dist/internal/console-decoder.d.ts +38 -0
  135. package/dist/internal/windows-spawn.d.ts +10 -0
  136. package/dist/layout/types.d.ts +18 -1
  137. package/dist/lifecycle/process-lease.d.ts +80 -0
  138. package/dist/lifecycle/process-owner.d.ts +20 -0
  139. package/dist/lifecycle/task-heartbeat.d.ts +41 -0
  140. package/dist/lifecycle/task-stop.d.ts +112 -0
  141. package/dist/lifecycle/update-admission.d.ts +45 -0
  142. package/dist/local-server/base-url.d.ts +18 -0
  143. package/dist/local-server/index.d.ts +8 -0
  144. package/dist/local-server/opencode.d.ts +8 -0
  145. package/dist/local-server/probe.d.ts +3 -0
  146. package/dist/local-server/runtime.d.ts +26 -0
  147. package/dist/local-server/types.d.ts +43 -0
  148. package/dist/mcp-app/agent-access.d.ts +33 -0
  149. package/dist/mcp-app/app-handoff.d.ts +109 -0
  150. package/dist/mcp-app/app-icon-read.d.ts +7 -0
  151. package/dist/mcp-app/app-job-bridge.d.ts +30 -0
  152. package/dist/mcp-app/app-job-bridge.example.d.ts +36 -0
  153. package/dist/mcp-app/app-job.d.ts +168 -0
  154. package/dist/mcp-app/app-schedule.d.ts +85 -0
  155. package/dist/mcp-app/apps-context.d.ts +32 -0
  156. package/dist/mcp-app/bundle-provenance.d.ts +3 -0
  157. package/dist/mcp-app/candidate-registration.d.ts +4 -0
  158. package/dist/mcp-app/card-handler.d.ts +7 -0
  159. package/dist/mcp-app/catalog.d.ts +7 -0
  160. package/dist/mcp-app/content-channel.d.ts +86 -0
  161. package/dist/mcp-app/content-declarations.d.ts +31 -0
  162. package/dist/mcp-app/dev-checks.d.ts +31 -0
  163. package/dist/mcp-app/diagnostic-reason.d.ts +3 -0
  164. package/dist/mcp-app/discovery.d.ts +164 -0
  165. package/dist/mcp-app/errors.d.ts +7 -0
  166. package/dist/mcp-app/index.d.ts +46 -0
  167. package/dist/mcp-app/installed-app-ref.d.ts +25 -0
  168. package/dist/mcp-app/model-context.d.ts +29 -0
  169. package/dist/mcp-app/node-app-discovery-fs.d.ts +23 -0
  170. package/dist/mcp-app/product-bundle-assets.d.ts +27 -0
  171. package/dist/mcp-app/product-bundle-loader.d.ts +53 -0
  172. package/dist/mcp-app/projection.d.ts +14 -0
  173. package/dist/mcp-app/prompt-cards.d.ts +28 -0
  174. package/dist/mcp-app/registry.d.ts +28 -0
  175. package/dist/mcp-app/skill-backend.d.ts +141 -0
  176. package/dist/mcp-app/state-set.d.ts +9 -0
  177. package/dist/mcp-app/types.d.ts +501 -0
  178. package/dist/mcp-app/view-call.d.ts +7 -0
  179. package/dist/mcp-app/workspace-app-assets.d.ts +42 -0
  180. package/dist/mcp-app/workspace-app-scan-cache.d.ts +27 -0
  181. package/dist/mcp-app/workspace-snapshot.d.ts +81 -0
  182. package/dist/migrations/0011_far_black_tarantula.sql +1 -0
  183. package/dist/migrations/0012_blue_turbo.sql +23 -0
  184. package/dist/migrations/0013_hesitant_adam_destine.sql +15 -0
  185. package/dist/migrations/0014_organic_mongu.sql +73 -0
  186. package/dist/migrations/0015_panoramic_gorilla_man.sql +71 -0
  187. package/dist/migrations/0016_fuzzy_hemingway.sql +14 -0
  188. package/dist/migrations/0017_project_stage_sdk_migration.sql +29 -0
  189. package/dist/migrations/0018_bored_jackal.sql +33 -0
  190. package/dist/migrations/0019_backfill_task_thread_ids.sql +74 -0
  191. package/dist/migrations/0020_useful_iron_lad.sql +55 -0
  192. package/dist/migrations/0021_dashing_peter_quill.sql +51 -0
  193. package/dist/migrations/0022_wandering_bucky.sql +1 -0
  194. package/dist/migrations/0023_red_payback.sql +1 -0
  195. package/dist/migrations/0024_storage_metadata.sql +262 -0
  196. package/dist/migrations/0025_task_heartbeat.sql +8 -0
  197. package/dist/migrations/0025_thread_app_instance_ledger.sql +2 -0
  198. package/dist/migrations/0026_mcp_action_source.sql +47 -0
  199. package/dist/migrations/0027_task_stop_scope_cleanup.sql +5 -0
  200. package/dist/migrations/0027_ui_instance_active_unique.sql +2 -0
  201. package/dist/migrations/0029_nice_rhino.sql +1 -0
  202. package/dist/migrations/0031_petite_arclight.sql +6 -0
  203. package/dist/migrations/0032_ui_instance_opened_by.sql +1 -0
  204. package/dist/migrations/0033_thread_creator_boundary_guard.sql +38 -0
  205. package/dist/migrations/0034_keen_fallen_one.sql +36 -0
  206. package/dist/migrations/0035_request_log_daily.sql +11 -0
  207. package/dist/migrations/0036_ui_definition_archive.sql +8 -0
  208. package/dist/migrations/0037_ui_instance_agent_open_request.sql +1 -0
  209. package/dist/migrations/0038_task_rating.sql +3 -0
  210. package/dist/migrations/0039_aspiring_purifiers.sql +9 -0
  211. package/dist/migrations/0040_task_provider_inputs.sql +53 -0
  212. package/dist/migrations/0041_tranquil_vivisector.sql +54 -0
  213. package/dist/migrations/0042_breezy_blue_shield.sql +31 -0
  214. package/dist/migrations/0043_nervous_darkstar.sql +1 -0
  215. package/dist/migrations/0044_military_galactus.sql +8 -0
  216. package/dist/migrations/0045_task_pid_started_at.sql +1 -0
  217. package/dist/migrations/0046_acoustic_karnak.sql +49 -0
  218. package/dist/migrations/0047_doc_sync_connect_requests.sql +18 -0
  219. package/dist/migrations/0048_smart_gertrude_yorkes.sql +47 -0
  220. package/dist/migrations/0049_blue_sleepwalker.sql +25 -0
  221. package/dist/migrations/0050_rapid_black_cat.sql +89 -0
  222. package/dist/migrations/0051_lying_sinister_six.sql +1 -0
  223. package/dist/migrations/0052_lying_gambit.sql +33 -0
  224. package/dist/migrations/0053_smart_shriek.sql +172 -0
  225. package/dist/migrations/0054_lying_surge.sql +63 -0
  226. package/dist/migrations/0055_curious_talkback.sql +92 -0
  227. package/dist/migrations/0056_stale_menace.sql +14 -0
  228. package/dist/migrations/0057_eager_captain_flint.sql +18 -0
  229. package/dist/migrations/0058_thread_branches.sql +37 -0
  230. package/dist/migrations/meta/0011_snapshot.json +1342 -0
  231. package/dist/migrations/meta/0012_snapshot.json +1494 -0
  232. package/dist/migrations/meta/0013_snapshot.json +1592 -0
  233. package/dist/migrations/meta/0014_snapshot.json +1975 -0
  234. package/dist/migrations/meta/0015_snapshot.json +2315 -0
  235. package/dist/migrations/meta/0016_snapshot.json +2419 -0
  236. package/dist/migrations/meta/0017_snapshot.json +2419 -0
  237. package/dist/migrations/meta/0018_snapshot.json +2570 -0
  238. package/dist/migrations/meta/0020_snapshot.json +2895 -0
  239. package/dist/migrations/meta/0021_snapshot.json +3031 -0
  240. package/dist/migrations/meta/0022_snapshot.json +3039 -0
  241. package/dist/migrations/meta/0023_snapshot.json +3047 -0
  242. package/dist/migrations/meta/0029_snapshot.json +3206 -0
  243. package/dist/migrations/meta/0031_snapshot.json +3251 -0
  244. package/dist/migrations/meta/0034_snapshot.json +3473 -0
  245. package/dist/migrations/meta/0035_snapshot.json +3547 -0
  246. package/dist/migrations/meta/0036_snapshot.json +3591 -0
  247. package/dist/migrations/meta/0037_snapshot.json +3598 -0
  248. package/dist/migrations/meta/0038_snapshot.json +3626 -0
  249. package/dist/migrations/meta/0039_snapshot.json +3684 -0
  250. package/dist/migrations/meta/0040_snapshot.json +3759 -0
  251. package/dist/migrations/meta/0041_snapshot.json +4156 -0
  252. package/dist/migrations/meta/0042_snapshot.json +4383 -0
  253. package/dist/migrations/meta/0043_snapshot.json +4390 -0
  254. package/dist/migrations/meta/0044_snapshot.json +4435 -0
  255. package/dist/migrations/meta/0045_snapshot.json +4442 -0
  256. package/dist/migrations/meta/0046_snapshot.json +4733 -0
  257. package/dist/migrations/meta/0047_snapshot.json +4832 -0
  258. package/dist/migrations/meta/0048_snapshot.json +5128 -0
  259. package/dist/migrations/meta/0049_snapshot.json +5165 -0
  260. package/dist/migrations/meta/0050_snapshot.json +5717 -0
  261. package/dist/migrations/meta/0051_snapshot.json +5725 -0
  262. package/dist/migrations/meta/0052_snapshot.json +5930 -0
  263. package/dist/migrations/meta/0053_snapshot.json +6780 -0
  264. package/dist/migrations/meta/0054_snapshot.json +6784 -0
  265. package/dist/migrations/meta/0055_snapshot.json +6896 -0
  266. package/dist/migrations/meta/0056_snapshot.json +6971 -0
  267. package/dist/migrations/meta/0057_snapshot.json +6971 -0
  268. package/dist/migrations/meta/0058_snapshot.json +7227 -0
  269. package/dist/migrations/meta/_journal.json +336 -0
  270. package/dist/node/index.d.ts +1 -0
  271. package/dist/node/index.js +2 -0
  272. package/dist/paths.d.ts +1 -0
  273. package/dist/plugin/types.d.ts +1 -0
  274. package/dist/plugins/index.d.ts +1 -1
  275. package/dist/plugins/index.js +604 -219
  276. package/dist/plugins/sqlite-tracing.d.ts +46 -0
  277. package/dist/process/index.d.ts +2 -0
  278. package/dist/process/index.js +1 -0
  279. package/dist/process/process-control.d.ts +74 -0
  280. package/dist/prompt/tag-names.d.ts +23 -0
  281. package/dist/provider/acp/adapter.d.ts +37 -2
  282. package/dist/provider/acp/adapters/antigravity-account.d.ts +4 -0
  283. package/dist/provider/acp/completion-observer.d.ts +24 -0
  284. package/dist/provider/acp/connection.d.ts +69 -3
  285. package/dist/provider/acp/index.d.ts +3 -3
  286. package/dist/provider/acp/meta.d.ts +11 -0
  287. package/dist/provider/acp/register.d.ts +1 -0
  288. package/dist/provider/acp/runtime.d.ts +1 -0
  289. package/dist/provider/acp/types.d.ts +31 -4
  290. package/dist/provider/bridge.browser.d.ts +3 -0
  291. package/dist/provider/bridge.d.ts +28 -4
  292. package/dist/provider/classify-task-error.d.ts +2 -0
  293. package/dist/provider/claude-agent-env.d.ts +1 -0
  294. package/dist/provider/cli/adapter.types.d.ts +35 -7
  295. package/dist/provider/cli/adapters/agent-call.util.d.ts +1 -1
  296. package/dist/provider/cli/adapters/antigravity-stream.d.ts +27 -0
  297. package/dist/provider/cli/adapters/antigravity.d.ts +1 -0
  298. package/dist/provider/cli/adapters/claude-task-events.d.ts +48 -0
  299. package/dist/provider/cli/adapters/cli-knob.util.d.ts +7 -0
  300. package/dist/provider/cli/adapters/codex-item.d.ts +1 -0
  301. package/dist/provider/cli/adapters/event-timestamp.util.d.ts +1 -0
  302. package/dist/provider/cli/adapters/grok.d.ts +2 -0
  303. package/dist/provider/cli/adapters/index.d.ts +5 -0
  304. package/dist/provider/cli/adapters/opencode-data-dir.d.ts +17 -0
  305. package/dist/provider/cli/adapters/opencode.d.ts +1 -0
  306. package/dist/provider/cli/builtin-allow.d.ts +6 -0
  307. package/dist/provider/cli/index.d.ts +3 -2
  308. package/dist/provider/cli/meta.d.ts +18 -1
  309. package/dist/provider/cli/protocol-envelope.d.ts +3 -0
  310. package/dist/provider/errors.d.ts +11 -1
  311. package/dist/provider/idle-watchdog.d.ts +19 -0
  312. package/dist/provider/model-ladder.d.ts +8 -0
  313. package/dist/provider/models.d.ts +17 -12
  314. package/dist/provider/order.d.ts +1 -1
  315. package/dist/provider/parse-usage.d.ts +6 -0
  316. package/dist/provider/provider-selection.d.ts +8 -0
  317. package/dist/provider/redact-technical-message.d.ts +1 -0
  318. package/dist/provider/safe-opencode-text.d.ts +2 -0
  319. package/dist/provider/task-error.types.d.ts +20 -0
  320. package/dist/provider-account/accounts.d.ts +15 -0
  321. package/dist/provider-account/antigravity-acp/auth.d.ts +29 -0
  322. package/dist/provider-account/antigravity-acp/browser.d.ts +4 -0
  323. package/dist/provider-account/antigravity-acp/install.d.ts +42 -0
  324. package/dist/provider-account/antigravity-acp/lease.d.ts +23 -0
  325. package/dist/provider-account/antigravity-acp/lifecycle.d.ts +76 -0
  326. package/dist/provider-account/antigravity-acp/manifest.d.ts +76 -0
  327. package/dist/provider-account/antigravity-acp/profile.d.ts +4 -0
  328. package/dist/provider-account/capabilities.d.ts +6 -0
  329. package/dist/provider-account/index.d.ts +13 -0
  330. package/dist/provider-account/registry.d.ts +30 -0
  331. package/dist/provider-account/types.d.ts +47 -0
  332. package/dist/publish/constants.d.ts +6 -0
  333. package/dist/publish/errors.d.ts +7 -0
  334. package/dist/publish/index.d.ts +55 -0
  335. package/dist/publish/index.js +2 -0
  336. package/dist/publish/manifest.d.ts +47 -0
  337. package/dist/publish/marketplace-api.constants.d.ts +1 -0
  338. package/dist/publish/pack.d.ts +6 -0
  339. package/dist/publish/scan.d.ts +10 -0
  340. package/dist/publish/secrets.d.ts +6 -0
  341. package/dist/publish/upload.d.ts +19 -0
  342. package/dist/remote/execution-profile.d.ts +9 -0
  343. package/dist/remote/index.d.ts +1 -0
  344. package/dist/remote/types.d.ts +28 -0
  345. package/dist/repository/agent-send-history.repository.d.ts +23 -0
  346. package/dist/repository/agent-suggestion.repository.d.ts +34 -0
  347. package/dist/repository/base-sqlite-repository.d.ts +1 -0
  348. package/dist/repository/common-code.repository.d.ts +45 -0
  349. package/dist/repository/db.d.ts +13 -1
  350. package/dist/repository/index.d.ts +63 -6
  351. package/dist/repository/index.js +863 -211
  352. package/dist/repository/logs-db.d.ts +12 -0
  353. package/dist/repository/notification.repository.d.ts +58 -0
  354. package/dist/repository/project.repository.d.ts +90 -0
  355. package/dist/repository/public-task-answer.d.ts +24 -0
  356. package/dist/repository/request-log-mover.d.ts +70 -0
  357. package/dist/repository/request-log.repository.d.ts +7 -3
  358. package/dist/repository/run-columns.d.ts +10 -0
  359. package/dist/repository/run-history.repository.d.ts +112 -0
  360. package/dist/repository/schedule-run.repository.d.ts +103 -0
  361. package/dist/repository/sidebar-tab.repository.d.ts +87 -0
  362. package/dist/repository/storage-metadata.repository.d.ts +64 -0
  363. package/dist/repository/task-log-migration.d.ts +74 -0
  364. package/dist/repository/task-log.repository.d.ts +47 -0
  365. package/dist/repository/task-status.d.ts +21 -0
  366. package/dist/repository/task.repository.d.ts +329 -8
  367. package/dist/repository/thread-branch.repository.d.ts +106 -0
  368. package/dist/repository/thread-history.repository.d.ts +193 -0
  369. package/dist/repository/thread-origin-verdict.d.ts +27 -0
  370. package/dist/repository/thread-title.types.d.ts +29 -0
  371. package/dist/repository/thread.repository.d.ts +134 -5
  372. package/dist/repository/usage-backfill.d.ts +62 -0
  373. package/dist/repository/usage-from-logs.d.ts +22 -0
  374. package/dist/repository/workflow-anchor-kinds.d.ts +4 -0
  375. package/dist/repository/workspace.repository.d.ts +3 -0
  376. package/dist/route/decide.d.ts +56 -0
  377. package/dist/route/eligibility.d.ts +11 -0
  378. package/dist/route/errors.d.ts +11 -0
  379. package/dist/route/index.d.ts +14 -0
  380. package/dist/route/runner.d.ts +15 -0
  381. package/dist/route/sqlite-store.d.ts +18 -0
  382. package/dist/route/store.d.ts +48 -0
  383. package/dist/route/strategies.d.ts +4 -0
  384. package/dist/route/types.d.ts +440 -0
  385. package/dist/schema/agent-send-history.d.ts +85 -0
  386. package/dist/schema/agent-suggestions.d.ts +199 -0
  387. package/dist/schema/app-sync.d.ts +2533 -0
  388. package/dist/schema/common-codes.d.ts +216 -0
  389. package/dist/schema/doc-create-dispatches.d.ts +101 -0
  390. package/dist/schema/doc-sync-connect-requests.d.ts +140 -0
  391. package/dist/schema/doc-sync-links.d.ts +556 -0
  392. package/dist/schema/index.d.ts +24 -0
  393. package/dist/schema/model-routes.d.ts +638 -0
  394. package/dist/schema/notifications.d.ts +303 -0
  395. package/dist/schema/projects.d.ts +610 -0
  396. package/dist/schema/request-log-daily.d.ts +151 -0
  397. package/dist/schema/run-column-backfill.d.ts +81 -0
  398. package/dist/schema/schedule-runs.d.ts +451 -0
  399. package/dist/schema/sidebar-tabs.d.ts +466 -0
  400. package/dist/schema/storage-metadata.d.ts +181 -0
  401. package/dist/schema/task-log-events.d.ts +119 -0
  402. package/dist/schema/task-provider-inputs.d.ts +100 -0
  403. package/dist/schema/tasks.d.ts +1172 -1
  404. package/dist/schema/thread-branches.d.ts +424 -0
  405. package/dist/schema/thread-creator-unverified.d.ts +45 -0
  406. package/dist/schema/thread-history.d.ts +734 -0
  407. package/dist/schema/threads.d.ts +59 -0
  408. package/dist/schema/ui-action-receipts.d.ts +358 -0
  409. package/dist/schema/ui-definition-archive.d.ts +63 -0
  410. package/dist/schema/ui-instance-repins.d.ts +222 -0
  411. package/dist/schema/ui-instances.d.ts +324 -0
  412. package/dist/schema/workspaces.d.ts +17 -0
  413. package/dist/skills/index.d.ts +15 -0
  414. package/dist/skills/index.js +2 -0
  415. package/dist/skills/types.d.ts +18 -0
  416. package/dist/task-log/anchor-child-tasks.d.ts +7 -0
  417. package/dist/task-log/claude-background-task.d.ts +30 -0
  418. package/dist/task-log/delegation-trailer.d.ts +34 -0
  419. package/dist/template/engine.d.ts +2 -2
  420. package/dist/template/helpers/exec.browser.d.ts +4 -3
  421. package/dist/template/helpers/exec.d.ts +4 -3
  422. package/dist/template/helpers/format-conversation.d.ts +1 -0
  423. package/dist/template/types.d.ts +20 -0
  424. package/dist/testing/index.js +1 -1
  425. package/dist/types/index.d.ts +3325 -84
  426. package/dist/types/task-log.types.d.ts +6 -1
  427. package/dist/ui-card/index.d.ts +2 -0
  428. package/dist/ui-card/legacy-card-parser.d.ts +11 -0
  429. package/dist/ui-instance/definition.d.ts +6 -0
  430. package/dist/ui-instance/errors.d.ts +18 -0
  431. package/dist/ui-instance/index.d.ts +11 -0
  432. package/dist/ui-instance/json.d.ts +19 -0
  433. package/dist/ui-instance/lineage.d.ts +24 -0
  434. package/dist/ui-instance/runtime.d.ts +19 -0
  435. package/dist/ui-instance/store.d.ts +221 -0
  436. package/dist/ui-instance/types.d.ts +384 -0
  437. package/dist/ui-plugin/app-icon.d.ts +50 -0
  438. package/dist/ui-plugin/app-manifest.d.ts +64 -0
  439. package/dist/ui-plugin/csp.d.ts +28 -0
  440. package/dist/ui-plugin/index.d.ts +8 -0
  441. package/dist/ui-plugin/limits.d.ts +27 -0
  442. package/dist/ui-plugin/manifest.d.ts +3 -0
  443. package/dist/ui-plugin/types.d.ts +220 -0
  444. package/dist/ui-plugin/validator.d.ts +18 -0
  445. package/dist/utils/crewx-executable.d.ts +76 -0
  446. package/dist/utils/crewx-home.d.ts +1 -0
  447. package/dist/utils/env-defaults.d.ts +3 -0
  448. package/dist/utils/id.d.ts +1 -1
  449. package/dist/utils/local-identity.d.ts +2 -0
  450. package/dist/utils/runner-env.d.ts +3 -0
  451. package/dist/utils/timestamp.d.ts +1 -0
  452. package/dist/utils/workspace.d.ts +1 -0
  453. package/dist/wi/create.d.ts +48 -0
  454. package/dist/wi/select.d.ts +20 -0
  455. package/package.json +97 -3
  456. package/templates/agents/default.yaml +319 -128
  457. package/templates/documents/crewx-manual.md +138 -138
  458. package/templates/documents/crewx-quick-guide.md +8 -7
  459. package/templates/workflows/wi-default-flow.yaml +65 -0
  460. package/templates/workflows/wi-plan-flow.yaml +140 -0
@@ -0,0 +1,7 @@
1
+ 'use strict';var L=require('fs'),P=require('path'),Rn=require('os'),child_process=require('child_process'),crypto=require('crypto'),net=require('net');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var L__namespace=/*#__PURE__*/_interopNamespace(L);var P__namespace=/*#__PURE__*/_interopNamespace(P);var Rn__namespace=/*#__PURE__*/_interopNamespace(Rn);var T=class extends Error{constructor(t,i,o=t,r){super(o);this.code=t;this.step=i;this.detail=r;this.name="AppInstallError";}code;step;detail};function On(e){if(!e)return;let n=e.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/gu," ").split(/[\r\n]/u).map(i=>i.replace(/\s+/gu," ").trim()).filter(Boolean),t=n.find(i=>/cannot find package/iu.test(i))??n.find(i=>/\b(?:error|exception)(?:\s+\[[^\]]+\])?:/iu.test(i))??n.find(i=>/module_not_found/iu.test(i))??n[0];if(t)return t.length>500?`${t.slice(0,497)}...`:t}var Ht=["CREWX_HOME","CREWX_DB","XDG_CONFIG_HOME"];function re(e,n=Jt){let t={};for(let i of Ht){let o=process.env[i];o!==void 0&&(t[i]=o);}return t.CREWX_WORKSPACE_ROOT=e,n()&&(t.ELECTRON_RUN_AS_NODE="1"),t}function Jt(){return typeof process.versions.electron=="string"&&process.versions.electron.length>0}function wn(){if(process.env.CREWX_HOME){let e=P__namespace.resolve(process.env.CREWX_HOME);try{return L__namespace.realpathSync(e)}catch(n){if(n instanceof Error&&"code"in n&&n.code==="ENOENT")return e;throw n}}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?P__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):P__namespace.join(Rn__namespace.homedir(),".crewx")}var Dn=3e3;var kn=2e3,xn=25,jn=100;function Fn(e){return e instanceof Error?e:e===void 0?void 0:new Error(String(e))}function Ln(e){return typeof e=="object"&&e!==null&&"code"in e?String(e.code):void 0}function Bt(e){return Number.isSafeInteger(e)&&e>0}function zt(e,n){return new Promise(t=>{let i;try{i=child_process.spawn(e,n,{windowsHide:!0});}catch(l){t({status:null,stdout:"",stderr:"",error:Fn(l)});return}let o="",r="",c=false,a,d=setTimeout(()=>{try{i.kill();}catch{}a({status:null,stdout:o,stderr:r,error:new Error(`Command timed out after ${Dn}ms`)});},Dn);a=l=>{c||(c=true,clearTimeout(d),t(l));},i.stdout?.setEncoding("utf8"),i.stderr?.setEncoding("utf8"),i.stdout?.on("data",l=>{o+=String(l);}),i.stderr?.on("data",l=>{r+=String(l);}),i.once("error",l=>{a({status:null,stdout:o,stderr:r,error:l});}),i.once("close",l=>{a({status:l,stdout:o,stderr:r});});})}async function Kt(e,n,t){return t.runCommandAsync?t.runCommandAsync(e,n):t.runCommand?t.runCommand(e,n):zt(e,n)}function Xt(e){return new Promise(n=>{setTimeout(n,Math.max(0,e));})}function Yt(){return new Promise(e=>{setImmediate(e);})}function ae(e,n=process.kill){try{return n(e,0),"alive"}catch(t){return Ln(t)==="ESRCH"?"not_found":Ln(t)==="EPERM"?"alive":"unknown"}}function qt(e,n){let t=ae(-e,n),i=ae(e,n);return t==="alive"||i==="alive"?"alive":t==="unknown"||i==="unknown"?"unknown":"not_found"}async function Vn(e,n,t,i){let o=Math.max(0,t),r=Math.max(1,i.pollIntervalMs??xn),c=Date.now()+o,a,d=o===0,l=i.sleep?Promise.resolve().then(()=>i.sleep(o)).then(()=>{},()=>{}):new Promise(f=>{a=setTimeout(f,o);});l.then(()=>{d=true;});try{for(await Yt();;){let f=qt(e,n);if(f==="not_found")return f;let m=c-Date.now();if(d||m<=0)return f;await Promise.race([l,Xt(Math.min(r,m))]);}}finally{a!==void 0&&clearTimeout(a);}}async function Cn(e,n,t,i,o){let r=await Vn(e,n,o.hardConfirmMs??jn,{...o,sleep:void 0});return r==="not_found"?t?{status:"not_found",pid:e,method:i}:{status:"terminated",pid:e,method:i}:r==="alive"?{status:"failed",pid:e,method:i,error:"Process is still running after termination attempt"}:{status:"failed",pid:e,method:i,error:"Unable to verify process termination"}}async function Ee(e,n={}){let t=n.platform??process.platform,i=t==="win32"?"taskkill":"process-group",o=y=>({status:"failed",pid:e,method:i,error:y});if(!Bt(e))return o("Invalid process ID");let r=n.kill??process.kill,c=ae(e,r);if(c==="not_found")return {status:"not_found",pid:e,method:i};if(c!=="alive")return o("Unable to determine whether the process is alive");if(t==="win32"){let y;try{y=await Kt("taskkill",["/PID",String(e),"/T","/F"],n);}catch(O){y={status:null,stdout:"",stderr:"",error:Fn(O)};}let u=ae(e,r);return u==="not_found"?y.status===0&&!y.error?{status:"terminated",pid:e,method:i}:{status:"not_found",pid:e,method:i}:o(u==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let a,d=n.signal??"SIGKILL";try{r(-e,d);}catch(y){a=y;}if(d==="SIGKILL")return Cn(e,r,a,i,n);if(await Vn(e,r,n.graceMs??kn,n)==="not_found")return a?{status:"not_found",pid:e,method:i}:{status:"terminated",pid:e,method:i};let f;try{r(-e,"SIGKILL");}catch(y){f=y;}let m=await Cn(e,r,f,i,n);return m.status==="terminated"?m:m.status==="not_found"?a?m:{status:"terminated",pid:e,method:i}:o(m.error??"Process termination failed")}var vn=64*1024;function Gn(e,n){let t=e+n;return Buffer.byteLength(t,"utf8")<=vn?t:Buffer.from(t,"utf8").subarray(-vn).toString("utf8")}function De(e){return e instanceof Error?e:e===void 0?void 0:new Error(String(e))}function Ne(e){return {status:null,stdout:"",stderr:"",...De(e)===void 0?{}:{error:De(e)}}}var Zt=(e,n,t)=>{let i;try{i=child_process.spawn(e,[...n],{cwd:t.cwd,env:t.env,shell:!1,detached:process.platform!=="win32",windowsHide:!0,stdio:["ignore","pipe","pipe"]});}catch(f){return {completion:Promise.resolve(Ne(f)),terminate:async()=>{}}}let o="",r="",c=false,a,d=new Promise(f=>{a=f;}),l=f=>{c||(c=true,a(f));};return i.stdout?.setEncoding("utf8"),i.stderr?.setEncoding("utf8"),i.stdout?.on("data",f=>{let m=String(f);o=Gn(o,m),t.onStdout?.(m);}),i.stderr?.on("data",f=>{let m=String(f);r=Gn(r,m),t.onStderr?.(m);}),i.once("error",f=>l({status:null,stdout:o,stderr:r,error:f})),i.once("close",f=>l({status:f,stdout:o,stderr:r})),{...i.pid===void 0?{}:{pid:i.pid},completion:d,terminate:async()=>{if(i.pid===void 0)return;if((await Ee(i.pid)).status==="failed"){try{i.kill("SIGKILL");}catch{}let m=await Ee(i.pid);if(m.status==="failed")throw new Error(m.error??"process tree termination failed")}}}};async function he(e){if(e.signal?.aborted)throw new T("DEPS_INSTALL_FAILED",e.step,"App operation was cancelled.");let n,t,i,o,r=false,c=new Promise(A=>{o=A;}),a=A=>{r||(r=true,n!==void 0&&clearTimeout(n),t!==void 0&&clearTimeout(t),i&&e.signal?.removeEventListener("abort",i),o(A));},d=()=>{e.noOutputTimeoutMs===void 0||e.noOutputTimeoutMs<=0||(n!==void 0&&clearTimeout(n),n=setTimeout(()=>a({type:"timeout"}),e.noOutputTimeoutMs));},l=A=>{A.length>0&&d();try{e.onOutput?.(A);}catch{}},f;try{f=(e.runner??Zt)(e.command,e.args,{cwd:e.cwd,env:e.env,onStdout:l,onStderr:l});}catch(A){return Ne(A)}f.completion.then(A=>a({type:"completed",result:A}),A=>a({type:"completed",result:Ne(A)}));d(),t=setTimeout(()=>a({type:"timeout"}),e.timeoutMs),e.signal&&(i=()=>a({type:"abort"}),e.signal.addEventListener("abort",i,{once:true}));let y=await c;if(y.type==="completed")return y.result;let u;try{await f.terminate();}catch(A){u=De(A);}let O;try{O=await f.completion;}catch(A){O=Ne(A);}if(y.type==="abort"){let A=u?`Could not confirm process tree termination: ${u.message}`:void 0;throw new T("DEPS_INSTALL_FAILED",e.step,"App operation was cancelled.",A)}let z=[O?.stderr,u?.message].filter(Boolean).join(`
2
+ `);throw new T(e.onTimeoutCode,e.step,"App operation timed out.",z||void 0)}var Qt=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Bn=300*1e3,zn=90*1e3,Hn=false;function K(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function U(e,n){return new T(e,"dependencies",n)}function Jn(e,n){try{let t=L__namespace.lstatSync(e);if(t.isSymbolicLink()||!t.isFile())throw new Error("not a regular file");return JSON.parse(L__namespace.readFileSync(e,"utf8"))}catch(t){let i=t!==null&&typeof t=="object"&&"code"in t?String(t.code):"";throw n==="package-lock.json"?U("DEPS_LOCKFILE_MISSING","package-lock.json is missing or invalid."):i==="ENOENT"?U("DEPS_INSTALL_FAILED","package.json is missing."):U("DEPS_INSTALL_FAILED","package.json is invalid.")}}function ei(e){let n=e.dependencies;if(n!==void 0){if(!K(n)||Object.values(n).some(t=>typeof t!="string"))throw U("DEPS_INSTALL_FAILED","package.json dependencies must be a string map.");return Object.keys(n).length===0?void 0:n}}function ni(e,n){let t=K(e)?e:{},i=K(n)?n:{},o=Object.keys(t).sort(),r=Object.keys(i).sort();return o.length===r.length&&o.every((c,a)=>c===r[a]&&t[c]===i[c])}function ti(e,n){for(let t of Qt){let i=e[t];if(!ni(i,n[t]))throw U("DEPS_LOCKFILE_MISSING","package-lock.json is out of sync with package.json.")}if(typeof e.name=="string"&&typeof n.name=="string"&&e.name!==n.name||typeof e.version=="string"&&typeof n.version=="string"&&e.version!==n.version)throw U("DEPS_LOCKFILE_MISSING","package-lock.json is out of sync with package.json.")}function ii(e){let n=P__namespace.join(e,"package.json");if(!L__namespace.existsSync(n))return "skipped";let t=Jn(n,"package.json");if(!K(t))throw U("DEPS_INSTALL_FAILED","package.json must contain an object.");if(ei(t)===void 0)return "skipped";let i=P__namespace.join(e,"package-lock.json"),o=Jn(i,"package-lock.json");if(!K(o)||!Number.isInteger(o.lockfileVersion)||o.lockfileVersion<2||!K(o.packages))throw U("DEPS_LOCKFILE_MISSING","package-lock.json is missing a supported npm lockfile package map.");let r=o.packages,c=r[""];if(!K(c))throw U("DEPS_LOCKFILE_MISSING","package-lock.json has no root package entry.");ti(t,c);for(let[a,d]of Object.entries(r)){if(a==="")continue;if(!K(d))throw U("DEPS_LOCKFILE_MISSING","package-lock.json contains an invalid package entry.");let l=d;if(l.link===true)throw U("DEPS_REGISTRY_REFUSED",`package-lock.json contains a linked dependency at ${a}.`);if(typeof l.resolved=="string"&&!l.resolved.startsWith("https://registry.npmjs.org/"))throw U("DEPS_REGISTRY_REFUSED",`package-lock.json contains a non-registry dependency at ${a}.`);if(typeof l.integrity!="string"||l.integrity.trim().length===0)throw U("DEPS_REGISTRY_REFUSED",`package-lock.json has no integrity for ${a}.`)}return "ready"}function oi(e){let n=P__namespace.join(e,".npmrc");try{L__namespace.rmSync(n,{force:!0,recursive:!0});}catch{throw U("DEPS_INSTALL_FAILED","Could not remove the package .npmrc file.")}}function $n(e){try{let n=L__namespace.realpathSync(e);return L__namespace.statSync(n).isFile()?n:void 0}catch{return}}function ri(e){let n=P__namespace.resolve(e||".");return [P__namespace.join(n,"npm-cli.js"),P__namespace.join(n,"npm"),P__namespace.join(n,"npm.cmd"),P__namespace.join(n,"node_modules","npm","bin","npm-cli.js"),P__namespace.resolve(n,"..","lib","node_modules","npm","bin","npm-cli.js"),P__namespace.resolve(n,"..","node_modules","npm","bin","npm-cli.js")]}function Kn(e={}){let n=e.env??process.env,t=n.CREWX_NPM_CLI_JS;if(t!==void 0){let o=P__namespace.isAbsolute(t)?$n(t):void 0;if(o===void 0||P__namespace.basename(o).toLowerCase()!=="npm-cli.js")throw U("DEPS_INSTALL_FAILED","CREWX_NPM_CLI_JS must name an existing absolute npm-cli.js file.");return o}Hn||(Hn=true,(e.log??(o=>console.warn(o)))("CREWX_NPM_CLI_JS is unset; resolving npm-cli.js from PATH."));let i=n.PATH??n.Path??"";for(let o of i.split(P__namespace.delimiter))for(let r of ri(o)){let c=$n(r);if(c!==void 0&&P__namespace.basename(c).toLowerCase()==="npm-cli.js")return c}throw U("DEPS_INSTALL_FAILED","npm-cli.js was not found on PATH.")}function si(e){let n=`${e.error?.message??""}
3
+ ${e.stdout}
4
+ ${e.stderr}`,t=e.error!==void 0&&"code"in e.error?String(e.error.code??""):"";return /ENOTFOUND|ECONNRESET|EAI_AGAIN|ETIMEDOUT|ECONNREFUSED/iu.test(`${t}
5
+ ${n}`)?new T("DEPS_NETWORK","dependencies","The npm registry could not be reached.",e.stderr):/ENOSPC/iu.test(`${t}
6
+ ${n}`)?new T("DEPS_DISK_FULL","dependencies","There is not enough disk space to install App dependencies.",e.stderr):/package\.json.{0,80}package-lock\.json.{0,80}not in sync|Missing: .+ from lock file|Invalid: .+ from lock file|EUSAGE/iu.test(n)?new T("DEPS_LOCKFILE_MISSING","dependencies","package-lock.json is out of sync with package.json.",e.stderr):new T("DEPS_INSTALL_FAILED","dependencies","npm ci could not install App dependencies.",e.stderr||e.error?.message)}function ai(e,n){let t=re(n?.workspaceRoot??e,n?.isElectronRuntime);for(let i of ["PATH","Path","HOME","USERPROFILE","TMPDIR","TMP","TEMP","SystemRoot"]){let o=process.env[i];o!==void 0&&(t[i]=o);}return t}async function ci(e,n={}){if(oi(e),ii(e)==="skipped")return {state:"skipped"};let i=n.runtime,r=[Kn(),"ci","--omit=dev","--include=optional","--ignore-scripts","--no-audit","--no-fund","--cache",P__namespace.join(wn(),"npm-cache")];n.retry&&r.push("--prefer-offline");let c="",a=l=>{let f=l.replace(/[\r\n]+/gu," ").replace(/\s+/gu," ").trim().slice(-400);if(!(!f||f===c)){c=f;try{n.onProgress?.({step:"dependencies",message:f});}catch{}}},d=await he({command:i?.execPath??process.execPath,args:r,cwd:e,env:ai(e,i),runner:n.runner,signal:n.signal,timeoutMs:n.timeoutMs??Bn,noOutputTimeoutMs:n.noOutputTimeoutMs??zn,onTimeoutCode:"DEPS_TIMEOUT",step:"dependencies",onOutput:a});if(d.error!==void 0||d.status!==0)throw si(d);return {state:"done"}}var di=Bn,li=zn;var ce=class extends Error{constructor(t,i=t,o){super(i);this.code=t;this.currentRevision=o;}code;currentRevision;name="UiRuntimeError"};var ui=/(?:proof|token|secret|password|cookie|authorization|private[_-]?key|stack|exception|plugin[_-]?text)/i,fi=/(?:url|uri|endpoint|path|file(?:name|path)?|cwd|shell|directory|dir|folder)$/i,pi=/<\/?[A-Za-z][^>]*>/,mi=/^(?:[A-Za-z]:[\\/]|\\\\|~[\\/]|\/)/,Ii=/^(?:https?|file|ftp|ws|wss):\/\//i;function ke(e){return ui.test(e)||fi.test(e)}function C(){throw new ce("INPUT_INVALID","JSON value is not projection-safe")}function yi(e){let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}var Ai=8,gi=4;function Le(e,n,t,i,o,r){if(n>i&&C(),e===null||typeof e=="string"||typeof e=="boolean")return typeof e=="string"&&(pi.test(e)||Ii.test(e)&&!_i(o,r)||mi.test(e))&&C(),e;if(typeof e=="number")return Number.isFinite(e)||C(),e;(typeof e!="object"||e===void 0||typeof e=="function"||typeof e=="bigint")&&C();let c=e;t.has(c)&&C(),t.add(c);try{if(Array.isArray(e))return e.map(d=>Le(d,n+1,t,i,o,r));yi(c)||C();let a={};for(let[d,l]of Object.entries(e))ke(d)&&C(),a[d]=Le(l,n+1,t,i,[...o,d],r);return a}finally{t.delete(c);}}function Xn(e,n=0,t=[]){(!Number.isInteger(n)||n<0||n>gi)&&C(),(!Array.isArray(t)||t.some(o=>typeof o!="string"))&&C();let i=Le(e,0,new Set,Ai+n,[],t);return (i===null||Array.isArray(i)||typeof i!="object")&&C(),i}function Pe(e,n){if(!e||!n)return false;let t=e.split("."),i=n.split(".");return t.length>=i.length&&i.every((o,r)=>t[r]===o)}function _i(e,n){if(e.length===0)return false;let t=e.join(".");return n.some(i=>Pe(t,i))}function Yn(e){try{let n=JSON.stringify(e);return n===void 0&&C(),n}catch{C();}}function Ce(e){return Array.isArray(e)?e.map(Ce):e!==null&&typeof e=="object"?Object.fromEntries(Object.keys(e).sort().map(n=>[n,Ce(e[n])])):e}function Q(e){return Yn(Ce(e))}var Te=["text/plain","application/json"];var qn=["__proto__","prototype","constructor","proof","token","secret","password","cookie","authorization","private_key","private-key","stack","exception","plugin_text","url","uri","endpoint","path","filename","filepath","cwd","shell","directory","dir","folder"],Ni=new Set(qn),hi=/(?:proof|token|secret|password|cookie|authorization|private[_-]?key|stack|exception|plugin[_-]?text)/i,Pi=/(?:url|uri|endpoint|path|file(?:name|path)?|cwd|shell|directory|dir|folder)$/i;function de(e){return Ni.has(e)||hi.test(e)||Pi.test(e)}var xe=/^[A-Za-z0-9_]+$/,le=/^[A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)*$/,ee=/^[A-Za-z][A-Za-z0-9._-]{0,127}$/,je=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/,Fe=/^[A-Za-z][A-Za-z0-9._-]{0,127}$/,Ve=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$/,ve=["blue","violet","emerald","amber","rose","sky","slate","indigo"],Ge=["inline","panel"];function He(e){return typeof e=="string"&&Te.includes(e)}new TextDecoder("utf-8",{fatal:true,ignoreBOM:true});function Je(e){if(!$e(e))return false;let n=Object.keys(e);return !(n.some(t=>t!=="in"&&t!=="out")||n.length===0||Object.hasOwn(e,"in")&&!Ti(e.in)||Object.hasOwn(e,"out")&&!Si(e.out))}function Ti(e){return $e(e)?Object.keys(e).every(t=>t==="mediaType"||t==="required")&&Object.hasOwn(e,"mediaType")&&He(e.mediaType)&&(!Object.hasOwn(e,"required")||typeof e.required=="boolean"):false}function Si(e){return $e(e)?Object.keys(e).every(t=>t==="mediaType"||t==="range")&&Object.hasOwn(e,"mediaType")&&He(e.mediaType)&&(!Object.hasOwn(e,"range")||typeof e.range=="boolean"):false}function $e(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}var bi=[5,15,30,60],Se=Object.freeze({min:15e3,max:6e5,default:3e5}),Wn=1;function Be(e){return bi.includes(e)}function ze(e){return Number.isSafeInteger(e)&&e>=Se.min&&e<=Se.max}var be=Object.freeze({min:6e4,max:18e5,default:6e5}),Zn=1;var Ui=["start","status","cancel"];function Ke(e){return Number.isSafeInteger(e)&&e>=be.min&&e<=be.max}function Xe(e){return Ui.includes(e)}function Qn(e){let t=e.renderer!==void 0||e.surfaces!==void 0||e.stateProjection!==void 0||e.dataPaths!==void 0||e.usage!==void 0||e.detailPanel!==void 0||e.displayModes!==void 0||e.summaryProjection!==void 0||e.downloads!==void 0||e.legacy!==void 0||Object.values(e.actions).some(o=>o.resultProjection!==void 0)?{id:e.id,version:e.version,...e.renderer===void 0?{}:{renderer:e.renderer},...e.surfaces===void 0?{}:{surfaces:e.surfaces},...e.stateProjection===void 0?{}:{stateProjection:e.stateProjection},...e.dataPaths===void 0?{}:{dataPaths:e.dataPaths},...e.summaryProjection===void 0?{}:{summaryProjection:e.summaryProjection},...e.legacy===void 0?{}:{legacy:e.legacy},...e.usage===void 0?{}:{usage:e.usage},...e.detailPanel===void 0?{}:{detailPanel:e.detailPanel},...e.displayModes===void 0?{}:{displayModes:e.displayModes},...e.downloads===void 0?{}:{downloads:e.downloads},...e.sourceHash===void 0?{}:{sourceHash:e.sourceHash},actions:e.actions}:e.sourceHash===void 0?{id:e.id,version:e.version,actions:e.actions}:{id:e.id,version:e.version,sourceHash:e.sourceHash,actions:e.actions},i=Xn(t);return crypto.createHash("sha256").update(Q(i)).digest("hex")}var w="dist/tools.json";var j="dist/main.mjs";var Ue="view.call",et="crewxImage",q="window";var Ri=["CREWX_APP_INSTANCE_ID","CREWX_THREAD_ID"];function nt(e){if(!Array.isArray(e)||e.length===0)return false;let n=new Set;for(let t of e){if(!Ri.some(i=>i===t)||n.has(t))return false;n.add(t);}return true}var wi=4096,it=16,Di=32,Li=512,Ci=new Set(["connectDomains","frameDomains","resourceDomains","baseUriDomains"]),ki=["localhost","local","internal","home.arpa","test","example","invalid","onion","lan","corp","home","intranet","private","localdomain"];var xi=/^(https|wss):\/\/([^/?#]+)$/i,ji=/^\[[^\]]+\](?::[0-9]+)?$/,Fi=/^[^:\[\]]+(?::[0-9]+)?$/,Vi=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/,vi=[[0,8],[1681915904,10],[167772160,8],[2130706432,8],[2851995648,16],[2886729728,12],[3221225984,24],[3227017984,24],[3232235520,16],[3323068416,15],[3325256704,24],[3405803776,24],[3758096384,4],[4026531840,4]],Ye=class extends Error{constructor(t){super(t);this.code=t;}code;name="UiPluginCspNormalizationError"};function E(e){throw new Ye(e)}function Gi(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;try{let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}catch{return false}}function Hi(e,n){let t=Object.getOwnPropertyDescriptor(e,n);return (!t||!("value"in t))&&E("CSP_ORIGIN_INVALID"),t.value}function Oe(e,n){if(!Object.prototype.hasOwnProperty.call(e,n))return [];let t=Hi(e,n);Array.isArray(t)||E("CSP_ORIGIN_INVALID"),Reflect.ownKeys(t).some(r=>typeof r!="string"||r!=="length"&&!/^(?:0|[1-9][0-9]*)$/.test(r))&&E("CSP_ORIGIN_INVALID");let o=[];for(let r=0;r<t.length;r+=1)(!Object.prototype.hasOwnProperty.call(t,r)||typeof t[r]!="string")&&E("CSP_ORIGIN_INVALID"),o.push(t[r]);return Object.keys(t).length!==t.length&&E("CSP_ORIGIN_INVALID"),o}function Ji(e){let n;try{n=JSON.stringify(e);}catch{E("CSP_ORIGIN_INVALID");}return n===void 0&&E("CSP_ORIGIN_INVALID"),new TextEncoder().encode(n).byteLength}function ot(e,n){/\s|\\/u.test(e)&&E("CSP_ORIGIN_INVALID");let t=xi.exec(e);t||E("CSP_ORIGIN_INVALID");let i=t[1].toLowerCase(),o=t[2];(o.includes("@")||o.includes("%")||o.includes("*"))&&E("CSP_ORIGIN_INVALID"),(o.startsWith("[")?ji:Fi).test(o)||E("CSP_ORIGIN_INVALID"),i==="wss"&&n!=="connectDomains"&&E("CSP_ORIGIN_INVALID");let c;try{c=new URL(e);}catch{E("CSP_ORIGIN_INVALID");}(c.protocol!==`${i}:`||c.username!==""||c.password!==""||c.search!==""||c.hash!=="")&&E("CSP_ORIGIN_INVALID");let a=c.hostname.toLowerCase();if((!a||a.includes("%"))&&E("CSP_ORIGIN_INVALID"),!a.startsWith("[")){let l=a.endsWith(".")?a.slice(0,-1):a;(l.length===0||l.length>253)&&E("CSP_ORIGIN_INVALID"),l.split(".").some(m=>m.length>63||!Vi.test(m))&&E("CSP_ORIGIN_INVALID");}let d=c.origin;return (d==="null"||!d.startsWith(`${i}://`))&&E("CSP_ORIGIN_INVALID"),{origin:d,hostname:a}}function $i(e){let n=e.split(".").map(Number);return ((n[0]*256+n[1])*256+n[2])*256+n[3]}function rt(e,n,t){let i=4294967295<<32-t>>>0;return (e&i)===(n&i)}function ct(e){let n=$i(e);return rt(n,3221225472,24)?n!==3221225481&&n!==3221225482:vi.some(([t,i])=>rt(n,t,i))}function Bi(e){let n=e.indexOf("::"),t=(n<0?e:e.slice(0,n)).split(":").filter(Boolean),i=n<0?[]:e.slice(n+2).split(":").filter(Boolean);return (n<0?t:[...t,...Array(8-t.length-i.length).fill("0"),...i]).reduce((r,c)=>r<<16n|BigInt(Number.parseInt(c,16)),0n)}function zi(e){let n=Bi(e),t=Number(n>>112n),i=Number(n>>96n&0xffffn);if(n>>32n===0xffffn){let o=Number(n&0xffffffffn);return ct([o>>>24&255,o>>>16&255,o>>>8&255,o&255].join("."))}return t<8192||t>16383||t===8193&&i<=511||t===8193&&i===3512||t===8194||t===16383&&i<=4095}function Ki(e,n){let t=e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e,i=net.isIP(t);if(i===4)return ct(t);if(i===6)return zi(t);let o=e.toLowerCase().replace(/\.$/,"");return !o||!o.includes(".")||n.has(o)?true:ki.some(r=>o===r||o.endsWith(`.${r}`))}function st(e){return Object.freeze([...new Set(e.map(n=>n.origin))].sort())}function at(e){return JSON.stringify({baseUriDomains:[],connectDomains:e.connectDomains,declared:e.declared,frameDomains:e.frameDomains,resourceDomains:[]})}function dt(e,n={}){if(e===void 0){let u=at({declared:false,connectDomains:[],frameDomains:[]});return Object.freeze({declared:false,connectDomains:Object.freeze([]),frameDomains:Object.freeze([]),resourceDomains:Object.freeze([]),baseUriDomains:Object.freeze([]),cspHash:crypto.createHash("sha256").update(u,"utf8").digest("hex")})}Gi(e)||E("CSP_ORIGIN_INVALID");let t=Reflect.ownKeys(e);t.some(u=>typeof u!="string")&&E("CSP_ORIGIN_INVALID"),t.some(u=>!Ci.has(u))&&E("CSP_AXIS_UNKNOWN");let i=Oe(e,"connectDomains"),o=Oe(e,"frameDomains"),r=Oe(e,"resourceDomains"),c=Oe(e,"baseUriDomains");(r.length>0||c.length>0)&&E("CSP_AXIS_UNSUPPORTED"),(Ji(e)>wi||i.length>it||o.length>it||i.length+o.length>Di||[...i,...o].some(u=>new TextEncoder().encode(u).byteLength>Li))&&E("CSP_LIMIT_EXCEEDED");let d=i.map(u=>ot(u,"connectDomains")),l=o.map(u=>ot(u,"frameDomains")),f=new Set((n.runtimeHostnames??[]).map(u=>u.toLowerCase().replace(/\.$/,"")));[...d,...l].some(u=>Ki(u.hostname,f))&&E("CSP_ORIGIN_FORBIDDEN");let m={declared:true,connectDomains:st(d),frameDomains:st(l)},y=at(m);return Object.freeze({...m,resourceDomains:Object.freeze([]),baseUriDomains:Object.freeze([]),cspHash:crypto.createHash("sha256").update(y,"utf8").digest("hex")})}var Yi=1,qi=/^[a-z][a-zA-Z0-9]*(\.[a-zA-Z0-9]+)+$/,Wi=/^[A-Za-z][A-Za-z0-9._-]{0,127}$/,St=/^[A-Za-z][A-Za-z0-9_-]{0,63}$/,Zi=/<\/?[A-Za-z][^>]*>/,Qi=/^(?:[A-Za-z]:[\\/]|\\\\|~[\\/]|\/)/,eo=/^(?:https?|file|ftp|ws|wss):\/\//i,no=/^\s*(?:javascript|data):/i,lt=/data:[^,\s]*,/i,to=/(?:https?|file|ftp|ws|wss):\/\//i,io=/javascript:/i,oo=/(?:^[\s]*|[\s"'(=])(?:[A-Za-z]:[\\/]|\\\\|~[\\/]|\/)(?=[^\s"'<>])[^\s"'<>]*/,ro=["manifestVersion","pluginId","definitionId","version","primitiveSet","activation","schema","layout"],so=["manifestVersion","pluginId","definitionId","version","name","description","entry","surfaces","size","stateProjection","actions"],ao=["_meta","icon","tone","entryHash","runtime","csp","initialState","usage","detailPanel","displayModes","summaryProjection","dataPaths","focusedAiDataPaths","deviceFeatures","downloads","share","files","desktopOnly"],co=["actionId","capability","mutation","inputSchema","resultProjection","backend"],lo=["confirmation","dataInputs","content","schedule","job","jobAccess","_meta"],uo=["everyMinutes"],fo=["timeoutMs"],po=["deadlineMs"],mo=4*1024,Io=["type","handler"],yo=["type","command"],Ao=["env"],go=["type","entry"],_o=["path"],Eo=["hash"],No=/^[0-9a-f]{64}$/,ho=/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/,Po=/[\r\n]/,To=16,So=16,bo=32,Uo=/^[a-z][A-Za-z0-9]{0,31}$/,Oo=["card-shell","meta-banner","heading","labeled-text","step-flow","text-list"],B=class e extends Error{constructor(t,i=t,o,r){super(i);this.code=t;this.path=o;this.rule=r;}code;path;rule;name="UiPluginValidationError";withPathPrefix(t){return new e(this.code,this.message,fe(t,this.path),this.rule)}};function fe(e,n){return n===void 0||n===""?e:e===""?n:n.startsWith("[")?`${e}${n}`:`${e}.${n}`}function s(e,n=e,t,i){throw new B(e,n,t,i)}function g(e,n){try{return n()}catch(t){throw t instanceof B?t.withPathPrefix(e):t}}function N(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;try{let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}catch{return false}}function p(e,n){return Object.prototype.hasOwnProperty.call(e,n)}function Ro(e,n){let t={};for(let[i,o]of Object.entries(e))n.includes(i)||(t[i]=o);return t}function h(e,n,t=[]){let i=new Set([...n,...t]),o=Object.keys(e).find(c=>!i.has(c));o!==void 0&&s("MANIFEST_INVALID","MANIFEST_INVALID",o,"unknown-key");let r=n.find(c=>!p(e,c));r!==void 0&&s("MANIFEST_INVALID","MANIFEST_INVALID",r,"missing-key");}function on(e,n=false,t=false,i=false){return Zi.test(e)||!i&&eo.test(e)||Qi.test(e)||t&&lt.test(e)||no.test(e)&&!(n&&/^\s*data:/i.test(e)&&!lt.test(e))}function Me(e,n=new Set,t=0,i=false,o=false,r=""){if(typeof e=="string"){on(e,i,o)&&s("UNSAFE_VALUE","UNSAFE_VALUE",r,"unsafe-value");return}if(!(e===null||typeof e!="object")){(t>8||n.has(e))&&s("MANIFEST_INVALID","MANIFEST_INVALID",r),n.add(e);try{if(Array.isArray(e)){e.forEach((c,a)=>Me(c,n,t+1,!1,!1,fe(r,`[${a}]`)));return}N(e)||s("MANIFEST_INVALID","MANIFEST_INVALID",r);for(let[c,a]of Object.entries(e))Me(a,n,t+1,i&&t===0&&(c==="name"||c==="description"),o,fe(r,c));}finally{n.delete(e);}}}function J(e,n){let t=e[n];return typeof t!="string"&&s("MANIFEST_INVALID"),t}function F(e,n,t){let i=e[n];return (!Number.isSafeInteger(i)||i<t)&&s("MANIFEST_INVALID"),i}function qe(e){return Wi.test(e)||s("MANIFEST_INVALID"),e}function ne(e){return qi.test(e)||s("TOKEN_INVALID"),e}function Mo(e){return St.test(e)||s("MANIFEST_INVALID"),e}function wo(e){N(e)||s("MANIFEST_INVALID");let n={};for(let[t,i]of Object.entries(e)){let o=Mo(t);N(i)||s("MANIFEST_INVALID");let r=i.type;if(r==="text"){h(i,["type","maxLength"]),n[o]={type:r,maxLength:F(i,"maxLength",1)};continue}if(r==="text-list"){h(i,["type","max","itemMaxLength"]),n[o]={type:r,max:F(i,"max",0),itemMaxLength:F(i,"itemMaxLength",1)};continue}if(r==="step-list"){h(i,["type","min","max","labelMaxLength","detailMaxLength"]);let c=F(i,"min",0),a=F(i,"max",1);c>a&&s("MANIFEST_INVALID"),n[o]={type:r,min:c,max:a,labelMaxLength:F(i,"labelMaxLength",1),detailMaxLength:F(i,"detailMaxLength",1)};continue}typeof r=="string"&&s("SCHEMA_TYPE_UNSUPPORTED"),s("MANIFEST_INVALID");}return n}function Do(e,n,t){let i=e[n];(!i||i.type!==t)&&s("MANIFEST_INVALID");}function Re(e,n,t){let i=J(e,"field");return St.test(i)||s("MANIFEST_INVALID"),Do(n,i,t),i}function Lo(e,n){N(e)||s("MANIFEST_INVALID");let t=e.primitive;switch(typeof t!="string"&&s("MANIFEST_INVALID"),Oo.includes(t)||s("PRIMITIVE_UNKNOWN"),t){case "card-shell":return h(e,["primitive"]),{primitive:t};case "meta-banner":return h(e,["primitive","badgeToken","noticeToken"]),{primitive:t,badgeToken:ne(J(e,"badgeToken")),noticeToken:ne(J(e,"noticeToken"))};case "heading":return h(e,["primitive","field"]),{primitive:t,field:Re(e,n,"text")};case "labeled-text":return h(e,["primitive","titleToken","field","variant"]),e.variant!=="callout"&&s("MANIFEST_INVALID"),{primitive:t,titleToken:ne(J(e,"titleToken")),field:Re(e,n,"text"),variant:"callout"};case "step-flow":return h(e,["primitive","titleToken","field"]),{primitive:t,titleToken:ne(J(e,"titleToken")),field:Re(e,n,"step-list")};case "text-list":{h(e,["primitive","titleToken","field"],["emptyToken","hideWhenEmpty"]);let i={primitive:t,titleToken:ne(J(e,"titleToken")),field:Re(e,n,"text-list")};return p(e,"emptyToken")&&(i.emptyToken=ne(J(e,"emptyToken"))),p(e,"hideWhenEmpty")&&(typeof e.hideWhenEmpty!="boolean"&&s("MANIFEST_INVALID"),i.hideWhenEmpty=e.hideWhenEmpty),i}}return s("MANIFEST_INVALID")}function Co(e,n){return Array.isArray(e)||s("MANIFEST_INVALID"),e.map(t=>Lo(t,n))}function S(e="v2 manifest exceeds a contract limit",n,t){return s("LIMIT_EXCEEDED",e,n,t)}function ut(e,n){return (typeof e!="string"||e.length===0||e.length>4096||e.trim().length===0||ho.test(e)||Po.test(e))&&s("MANIFEST_INVALID",`${n} is invalid`),(on(e,true,true)||to.test(e)||io.test(e)||oo.test(e))&&s("UNSAFE_VALUE",`${n} contains an unsafe value`),e}function We(e,n){return (typeof e!="string"||!ee.test(e))&&s("MANIFEST_INVALID",`${n} is invalid`),e}function ko(e){return (typeof e!="string"||!je.test(e)||e==="*"||e==="all")&&s("MANIFEST_INVALID","action capability is invalid"),e}function bt(e){return (typeof e!="string"||!No.test(e))&&s("MANIFEST_INVALID","resource hash is invalid"),e}function Ze(e,n=new Set,t=0,i=""){if(typeof e=="string"){e.length>4096&&S("v2 manifest string is too long",i,"string-too-long");return}if(!(e===null||typeof e=="boolean")){if(typeof e=="number"){Number.isFinite(e)||s("MANIFEST_INVALID","v2 manifest contains a non-finite number",i,"non-finite-number");return}(e===void 0||typeof e=="function"||typeof e=="bigint")&&s("MANIFEST_INVALID","v2 manifest contains a non-JSON value",i,"non-json-value"),typeof e!="object"&&s("MANIFEST_INVALID","MANIFEST_INVALID",i),t>8&&S("v2 manifest nesting is too deep",i,"too-deep"),n.has(e)&&s("MANIFEST_INVALID","v2 manifest contains a cycle",i,"cycle"),n.add(e);try{if(Array.isArray(e)){e.length>128&&S("v2 manifest array is too long",i,"array-too-long"),e.forEach((o,r)=>Ze(o,n,t+1,fe(i,`[${r}]`)));return}N(e)||s("MANIFEST_INVALID","v2 manifest contains a non-plain object",i,"non-plain-object");for(let[o,r]of Object.entries(e))Ze(r,n,t+1,fe(i,o));}finally{n.delete(e);}}}function Ut(e){return (typeof e!="string"||e.length>4096||!le.test(e))&&(typeof e=="string"&&e.length>4096&&S("projection path is too long"),s("MANIFEST_INVALID","projection paths must be canonical exact paths")),e.split(".").some(t=>de(t)||t===et)&&s("MANIFEST_INVALID","projection paths cannot address reserved state keys"),e}function Qe(e){N(e)||s("MANIFEST_INVALID","projection policy must be an object"),h(e,["allow"]),Array.isArray(e.allow)||s("MANIFEST_INVALID","projection allow must be an array"),e.allow.length>128&&S("projection allowlist is too long");let n=[],t=new Set;for(let i of e.allow){let o=Ut(i);t.has(o)&&s("MANIFEST_INVALID","projection allowlist contains a duplicate path"),t.add(o),n.push(o);}return {allow:n}}function xo(e,n){if(e===void 0)return;Array.isArray(e)||s("MANIFEST_INVALID","dataPaths must be an array"),e.length>To&&S("dataPaths exceed the v2 limit");let t=[],i=new Set;for(let o of e){let r=Ut(o);i.has(r)&&s("MANIFEST_INVALID","dataPaths contain a duplicate path"),n.some(c=>Pe(r,c))||s("MANIFEST_INVALID","dataPaths must be projection-allowed"),i.add(r),t.push(r);}return t}function jo(e){Array.isArray(e)||s("MANIFEST_INVALID","deviceFeatures must be an array",void 0,"array"),e.length>So&&s("MANIFEST_INVALID","deviceFeatures allow at most 16 names",void 0,"too-many-items");let n=[],t=new Set;for(let[i,o]of e.entries()){let r=`[${i}]`;typeof o!="string"&&s("MANIFEST_INVALID","a device feature name must be a string",r,"string"),o.length===0&&s("MANIFEST_INVALID","a device feature name must not be empty",r,"empty"),o.length>bo&&s("MANIFEST_INVALID","a device feature name is at most 32 characters",r,"too-long"),Uo.test(o)||s("MANIFEST_INVALID","a device feature name starts with a lowercase letter and holds only letters and digits",r,"format"),t.has(o)&&s("MANIFEST_INVALID","deviceFeatures contain a duplicate name",r,"duplicate-item"),t.add(o),n.push(o);}return n}function Fo(e){if(e!==false)return e!==true&&s("MANIFEST_INVALID","downloads must be true or false",void 0,"boolean"),true}function Vo(e){return typeof e!="boolean"&&s("MANIFEST_INVALID","desktopOnly must be true or false",void 0,"boolean"),e}function vo(e){return (!N(e)||e.view!==true||Object.keys(e).some(n=>n!=="view"&&n!=="entry"))&&s("MANIFEST_INVALID",'share must be { "view": true } or { "view": true, "entry": "<path>" }',void 0,"share-shape"),p(e,"entry")?{view:true,entry:Ho(e.entry)}:{view:true}}var ft=200,pt=3,Go=/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/;function Ho(e){typeof e!="string"&&s("MANIFEST_INVALID","share.entry must be a string","entry","entry-shape");let n=(i,o)=>s("MANIFEST_INVALID",`share.entry ${o}`,"entry",i);e.length===0&&n("empty","must not be empty"),e.length>ft&&n("too-long",`must be at most ${ft} characters`),e.startsWith("/")&&n("absolute","must be relative to the App folder");let t=e.split("/");t.length>pt&&n("too-many-segments",`must have at most ${pt} segments`);for(let i of t)i.length===0&&n("empty-segment","must not contain an empty segment"),(i==="."||i==="..")&&n("dot-segment",'must not contain "." or ".." segments'),Go.test(i)||n("segment-shape",'segments start with an ASCII letter or digit, then use only letters, digits, ".", "_" and "-"');return t[t.length-1].endsWith(".html")||n("extension","must name a file ending in .html"),e}function Jo(e){return (!N(e)||Object.keys(e).length!==1||typeof e.root!="string")&&s("MANIFEST_INVALID",'files must be exactly { "root": "<workspace folder>" }',void 0,"files-shape"),{root:Xo(e.root)}}var mt=200,$o=2,It=4,yt=100,Bo=/^[\p{L}\p{N}][\p{L}\p{N}\p{M}_-]*$/u,zo=[".git",".crewx","node_modules","apps","skills"],Ko=/[\u0000-\u001f\u007f-\u009f\\:<>"|?*]/;function Xo(e){let n=e.normalize("NFC"),t=(r,c)=>s("MANIFEST_INVALID",`files.root ${c}`,"root",r);n.length===0&&t("empty","must not be empty"),Ko.test(n)&&t("forbidden-character","must not contain control characters, backslash or colon"),(n.startsWith("/")||n.startsWith("~"))&&t("absolute","must be relative to the workspace"),Array.from(n).length>mt&&t("too-long",`must be at most ${mt} characters`);let i=n.split("/"),o=i[0].toLowerCase().replace(/[. ]+$/,"");zo.includes(o)&&t("reserved-folder","must not start in an App code folder or a tool folder"),i.length<$o&&t("too-shallow","must name a folder inside a top-level folder, such as docs/trips"),i.length>It&&t("too-many-segments",`must have at most ${It} segments`);for(let r of i)r.length===0&&t("empty-segment","must not contain an empty segment"),(r==="."||r==="..")&&t("dot-segment",'must not contain "." or ".." segments'),Array.from(r).length>yt&&t("segment-too-long",`segments must be at most ${yt} characters`),Bo.test(r)||t("segment-shape",'segments must start with a letter or digit and contain only letters, digits, combining marks, "_" or "-"');return n}function te(e,n,t=Number.MAX_SAFE_INTEGER){return (!Number.isSafeInteger(e)||e<0||e>t)&&s("MANIFEST_INVALID",`${n} is invalid`),e}function At(e,n){return (typeof e!="number"||!Number.isFinite(e))&&s("MANIFEST_INVALID",`${n} is invalid`),e}function en(e,n=0,t=new Set){if(typeof e=="string")return (e.length>4096||on(e))&&s("UNSAFE_VALUE","schema enum contains an unsafe string"),e;if(e===null||typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)||s("MANIFEST_INVALID","schema enum contains a non-finite number"),e;(n>8||typeof e!="object"||e===void 0)&&S("schema enum is too deep"),t.has(e)&&s("MANIFEST_INVALID","schema enum contains a cycle"),t.add(e);try{if(Array.isArray(e))return e.length>128&&S("schema enum array is too long"),e.map(o=>en(o,n+1,t));N(e)||s("MANIFEST_INVALID","schema enum contains a non-plain object");let i={};for(let[o,r]of Object.entries(e))de(o)&&s("MANIFEST_INVALID","schema enum contains a reserved key"),i[o]=en(r,n+1,t);return i}finally{t.delete(e);}}function Yo(e,n){if(e===void 0)return;Array.isArray(e)||s("MANIFEST_INVALID","schema required must be an array"),e.length>64&&S("schema required list is too long");let t=[],i=new Set;for(let o of e)(typeof o!="string"||!le.test(o))&&s("MANIFEST_INVALID","schema required contains an invalid key"),o.length>4096&&S("schema required key is too long"),i.has(o)&&s("MANIFEST_INVALID","schema required contains a duplicate key"),n&&!Object.prototype.hasOwnProperty.call(n,o)&&s("MANIFEST_INVALID","schema required references an undeclared property"),i.add(o),t.push(o);return t}function qo(e,n){let t=n?le:xe;return e.length>4096&&S("schema property name is too long"),(!t.test(e)||e.split(".").some(i=>de(i)))&&s("MANIFEST_INVALID","schema property name is invalid"),e}function nn(e,n=0,t=false){N(e)||s("MANIFEST_INVALID","action inputSchema must be an object"),n>8&&S("action inputSchema is too deep");let i=e.type;i!=="object"&&i!=="string"&&i!=="number"&&i!=="integer"&&i!=="boolean"&&i!=="array"&&i!=="null"&&(typeof i=="string"&&s("SCHEMA_TYPE_UNSUPPORTED","action inputSchema type is unsupported"),s("MANIFEST_INVALID","action inputSchema type is required"));let o=["type","enum"];i==="string"&&o.push("minLength","maxLength"),i==="array"&&o.push("minItems","maxItems","items"),i==="object"&&o.push("minProperties","maxProperties","properties","required","additionalProperties"),(i==="number"||i==="integer")&&o.push("minimum","maximum"),h(e,["type"],o.filter(a=>a!=="type"));let r={type:i};if(p(e,"enum")&&(Array.isArray(e.enum)||s("MANIFEST_INVALID","schema enum must be an array"),e.enum.length>128&&S("schema enum is too long"),r.enum=e.enum.map(a=>en(a))),i==="string"&&(p(e,"minLength")&&(r.minLength=te(e.minLength,"schema minLength",4096)),p(e,"maxLength")&&(r.maxLength=te(e.maxLength,"schema maxLength",4096)),r.minLength!==void 0&&r.maxLength!==void 0&&r.minLength>r.maxLength&&s("MANIFEST_INVALID","schema string length bounds are inverted")),(i==="number"||i==="integer")&&(p(e,"minimum")&&(r.minimum=At(e.minimum,"schema minimum")),p(e,"maximum")&&(r.maximum=At(e.maximum,"schema maximum")),r.minimum!==void 0&&r.maximum!==void 0&&r.minimum>r.maximum&&s("MANIFEST_INVALID","schema numeric bounds are inverted")),i==="array"&&(p(e,"minItems")&&(r.minItems=te(e.minItems,"schema minItems",128)),p(e,"maxItems")&&(r.maxItems=te(e.maxItems,"schema maxItems",128)),r.minItems!==void 0&&r.maxItems!==void 0&&r.minItems>r.maxItems&&s("MANIFEST_INVALID","schema array length bounds are inverted"),p(e,"items")&&(r.items=nn(e.items,n+1,false))),i==="object"){let a;if(p(e,"properties")){N(e.properties)||s("MANIFEST_INVALID","schema properties must be an object");let l=Object.entries(e.properties);l.length>64&&S("schema properties are too many"),a={};for(let[f,m]of l){let y=qo(f,t);a[y]=nn(m,n+1,false);}r.properties=a;}p(e,"minProperties")&&(r.minProperties=te(e.minProperties,"schema minProperties",64)),p(e,"maxProperties")&&(r.maxProperties=te(e.maxProperties,"schema maxProperties",64)),r.minProperties!==void 0&&r.maxProperties!==void 0&&r.minProperties>r.maxProperties&&s("MANIFEST_INVALID","schema object property bounds are inverted");let d=Yo(e.required,a);d!==void 0&&(r.required=d),p(e,"additionalProperties")&&(e.additionalProperties!==false&&s("MANIFEST_INVALID","schema additionalProperties must be false"),r.additionalProperties=false);}let c=JSON.stringify(r);return (c===void 0||Buffer.byteLength(c,"utf8")>2097152)&&S("action inputSchema subtree is too large"),r}function Wo(e){let n=nn(e,0,true);return (n.type!=="object"||!n.properties)&&s("MANIFEST_INVALID","action inputSchema must declare object properties"),n}function Zo(e){if(N(e)||s("MANIFEST_INVALID","action backend must be an object"),e.type==="core"){h(e,Io);let n=e.handler;return (typeof n!="string"||!Fe.test(n))&&s("MANIFEST_INVALID","core backend handler is invalid"),{type:"core",handler:n}}if(e.type==="skill"&&p(e,"entry"))return h(e,go),e.entry!==j&&s("MANIFEST_INVALID",`skill backend entry must be ${j}`),{type:"skill",entry:j};if(e.type==="skill"){h(e,yo,Ao),(!Array.isArray(e.command)||e.command.length===0||e.command.length>16)&&s("MANIFEST_INVALID","skill backend command is invalid");let n=[];for(let i of e.command)(typeof i!="string"||i.length===0||i.length>256||!Ve.test(i))&&s("MANIFEST_INVALID","skill backend command token is invalid"),n.push(i);let t=p(e,"env")?or(e.env):void 0;return {type:"skill",command:n,...t===void 0?{}:{env:t}}}s("MANIFEST_INVALID","action backend type is unsupported");}function Qo(e){N(e)||s("MANIFEST_INVALID","action must be an object"),h(e,co,lo),p(e,"_meta")&&g("_meta",()=>Ot(e._meta));let n=g("actionId",()=>We(e.actionId,"actionId"));ke(n)&&s("MANIFEST_INVALID",`actionId "${n}" is not projection-safe`,"actionId");let t=g("capability",()=>ko(e.capability)),i=e.mutation;typeof i!="boolean"&&s("MANIFEST_INVALID","action mutation must be boolean","mutation");let o=g("inputSchema",()=>Wo(e.inputSchema)),r;if(p(e,"dataInputs")){Array.isArray(e.dataInputs)||s("MANIFEST_INVALID","action dataInputs must be an array","dataInputs");let u=o.properties,O=new Set,z=[];for(let A of e.dataInputs)(typeof A!="string"||!p(u,A)||O.has(A))&&s("MANIFEST_INVALID","action dataInputs must be unique declared properties","dataInputs"),O.add(A),z.push(A);r=z;}let c=g("resultProjection",()=>Qe(e.resultProjection)),a=g("backend",()=>Zo(e.backend)),d;p(e,"content")&&((a.type!=="skill"||!Je(e.content))&&s("MANIFEST_INVALID","action content declaration is invalid","content"),d=rr(e.content));let l;if(p(e,"confirmation")){let u=e.confirmation;u!=="none"&&u!=="native"&&s("MANIFEST_INVALID","action confirmation is invalid","confirmation"),l=u;}let f;p(e,"schedule")&&(f=g("schedule",()=>ir(e.schedule,{backend:a,inputSchema:o,hasContent:d!==void 0,hasDataInputs:r!==void 0,confirmation:l})));let m;p(e,"job")&&(f!==void 0&&s("MANIFEST_INVALID","an action is either the scheduled run or a job, not both","job"),m=g("job",()=>tr(e.job,{backend:a,inputSchema:o,hasContent:d!==void 0,hasDataInputs:r!==void 0,confirmation:l})));let y;return p(e,"jobAccess")&&(m!==void 0&&s("MANIFEST_INVALID","an action is either the job or a job control, not both","jobAccess"),y=g("jobAccess",()=>nr(e.jobAccess,{backend:a,hasContent:d!==void 0}))),{actionId:n,capability:t,mutation:i,inputSchema:o,resultProjection:c,backend:a,...d===void 0?{}:{content:d},...r===void 0?{}:{dataInputs:r},...l===void 0?{}:{confirmation:l},...f===void 0?{}:{schedule:f},...m===void 0?{}:{job:m},...y===void 0?{}:{jobAccess:y}}}function er(e,n,t){e.backend.type!=="core"||e.backend.handler!==Ue||((n??q)!==q&&s("MANIFEST_INVALID","view.call is only available to screen Apps",`${t}.backend.handler`),e.mutation!==false&&s("MANIFEST_INVALID","view.call must be read-only",`${t}.mutation`),e.confirmation!=="none"&&s("MANIFEST_INVALID","view.call requires confirmation none",`${t}.confirmation`),(e.content!==void 0||e.schedule!==void 0||e.job!==void 0||e.jobAccess!==void 0)&&s("MANIFEST_INVALID","view.call cannot declare content, jobs, or schedules",t),e.resultProjection===void 0&&s("MANIFEST_INVALID","view.call requires resultProjection",`${t}.resultProjection`));}function nr(e,n){return (n.backend.type!=="skill"||!("entry"in n.backend)||n.backend.entry!==j)&&s("MANIFEST_INVALID","jobAccess needs a tool-mode action","jobAccess"),n.hasContent&&s("MANIFEST_INVALID","a job control action takes no content","jobAccess"),(!Array.isArray(e)||e.length===0)&&s("MANIFEST_INVALID","jobAccess must list at least one operation","jobAccess"),(new Set(e).size!==e.length||!e.every(Xe))&&s("MANIFEST_INVALID","jobAccess must name each operation once: start, status or cancel","jobAccess"),Object.freeze([...e])}function tr(e,n){(n.backend.type!=="skill"||!("entry"in n.backend)||n.backend.entry!==j)&&s("MANIFEST_INVALID","job needs a tool-mode action","job"),(n.hasContent||n.hasDataInputs||n.confirmation!==void 0&&n.confirmation!=="none")&&s("MANIFEST_INVALID","a job action takes no content, dataInputs or native confirmation","job"),(n.inputSchema.required??[]).length>0&&s("MANIFEST_INVALID","a job action input must accept {}","inputSchema.required"),N(e)||s("MANIFEST_INVALID","job must be an object","job"),h(e,[],po);let t=p(e,"deadlineMs")?e.deadlineMs:be.default;return Ke(t)||s("MANIFEST_INVALID","job deadlineMs is invalid","job.deadlineMs"),{deadlineMs:t}}function ir(e,n){(n.backend.type!=="skill"||!("entry"in n.backend)||n.backend.entry!==j)&&s("MANIFEST_INVALID","schedule needs a tool-mode action","schedule"),(n.hasContent||n.hasDataInputs||n.confirmation!==void 0&&n.confirmation!=="none")&&s("MANIFEST_INVALID","a scheduled action takes no content, dataInputs or native confirmation","schedule"),(n.inputSchema.required??[]).length>0&&s("MANIFEST_INVALID","a scheduled action input must accept {}","inputSchema.required"),N(e)||s("MANIFEST_INVALID","schedule must be an object","schedule"),h(e,uo,fo),Be(e.everyMinutes)||s("MANIFEST_INVALID","schedule everyMinutes is invalid","schedule.everyMinutes");let t=p(e,"timeoutMs")?e.timeoutMs:Se.default;return ze(t)||s("MANIFEST_INVALID","schedule timeoutMs is invalid","schedule.timeoutMs"),{everyMinutes:e.everyMinutes,timeoutMs:t}}function or(e){return nt(e)||s("MANIFEST_INVALID","skill backend env is invalid"),Object.freeze([...e])}function rr(e){return Object.freeze({...e.in===void 0?{}:{in:Object.freeze({...e.in})},...e.out===void 0?{}:{out:Object.freeze({...e.out})}})}function sr(e){return N(e)||s("INITIAL_STATE_INVALID","initialState must be an object"),h(e,_o,Eo),e.path!=="ui/state.json"&&s("MANIFEST_INVALID","initialState path is not fixed"),p(e,"hash")?{path:"ui/state.json",hash:bt(e.hash)}:{path:"ui/state.json"}}function ar(e){let n=["wasm","terminal","htmlDocuments","appBrowser"];return (!N(e)||Object.keys(e).length===0||Object.keys(e).some(t=>!n.includes(t)||e[t]!==true))&&s("MANIFEST_INVALID","runtime must contain only known capability flags set to true"),{...e.wasm===true?{wasm:true}:{},...e.terminal===true?{terminal:true}:{},...e.htmlDocuments===true?{htmlDocuments:true}:{},...e.appBrowser===true?{appBrowser:true}:{}}}function cr(e,n){let t;try{t=dt(e);}catch(i){let o=i!==null&&typeof i=="object"&&"code"in i&&typeof i.code=="string"?i.code:"CSP_ORIGIN_INVALID";return s("MANIFEST_INVALID",o,void 0,o.toLowerCase().replace(/_/g,"-"))}if(t.frameDomains.length>0&&s("MANIFEST_INVALID","external origins in csp are not enabled in this rollout",void 0,"csp-not-enabled"),t.connectDomains.length!==0)return n?.terminal===true&&s("MANIFEST_INVALID","runtime.terminal cannot be combined with csp.connectDomains","connectDomains","terminal-with-connect-domains"),Object.freeze({connectDomains:t.connectDomains})}function dr(e,n){Me(N(e)?Ro(e,["csp","downloads","files","share"]):e,new Set,0,true,true),Ze(e),N(e)||s("MANIFEST_INVALID"),h(e,so,ao),p(e,"_meta")&&g("_meta",()=>Ot(e._meta)),e.manifestVersion!==2&&s("MANIFEST_INVALID");let t;p(e,"runtime")&&(t=g("runtime",()=>ar(e.runtime)));let i;p(e,"csp")&&(i=g("csp",()=>cr(e.csp,t)));let o=g("pluginId",()=>We(e.pluginId,"pluginId")),r=g("definitionId",()=>We(e.definitionId,"definitionId")),c=g("version",()=>F(e,"version",1)),a=g("name",()=>ut(e.name,"name")),d=g("description",()=>ut(e.description,"description")),l;p(e,"icon")&&((typeof e.icon!="string"||!/^[a-z][a-z0-9-]{0,63}$/.test(e.icon))&&s("MANIFEST_INVALID","icon is invalid","icon"),l=e.icon);let f;p(e,"tone")&&((typeof e.tone!="string"||!ve.includes(e.tone))&&s("MANIFEST_INVALID","tone is invalid","tone"),f=e.tone),e.entry!=="ui/index.html"&&s("MANIFEST_INVALID","entry path is not fixed","entry","fixed-value");let m;p(e,"entryHash")&&(m=g("entryHash",()=>bt(e.entryHash)));let y;p(e,"initialState")&&(y=g("initialState",()=>sr(e.initialState)));let u;p(e,"usage")&&(e.usage!=="card"&&e.usage!=="window"&&s("MANIFEST_INVALID","usage is invalid","usage"),u=e.usage);let O;p(e,"detailPanel")&&(typeof e.detailPanel!="boolean"&&s("MANIFEST_INVALID","detailPanel is invalid","detailPanel"),O=e.detailPanel);let z;if(p(e,"displayModes")){((u??q)!==q||!Array.isArray(e.displayModes)||e.displayModes.length===0)&&s("MANIFEST_INVALID","displayModes are only valid for window Apps","displayModes");let x=new Set(["inline","floating","focused"]);(new Set(e.displayModes).size!==e.displayModes.length||e.displayModes.some(_e=>typeof _e!="string"||!x.has(_e)))&&s("MANIFEST_INVALID","displayModes are invalid","displayModes"),z=e.displayModes;}(u??q)===q&&O!==void 0&&s("MANIFEST_INVALID","detailPanel is card-only","detailPanel");let A=n.mode??"local";A!=="local"&&A!=="installed"&&A!=="published"&&s("MANIFEST_INVALID","manifest mode is invalid"),A!=="local"&&m===void 0&&s("MANIFEST_INVALID","installed manifests require entryHash","entryHash","required-when-installed"),A!=="local"&&y!==void 0&&y.hash===void 0&&s("MANIFEST_INVALID","installed manifests require initialState.hash","initialState.hash","required-when-installed"),(!Array.isArray(e.surfaces)||e.surfaces.length===0)&&s("MANIFEST_INVALID","surfaces are invalid","surfaces"),e.surfaces.length>2&&S("surfaces exceed the v2 limit","surfaces","too-many-items");let In=[],yn=new Set;for(let x of e.surfaces)(typeof x!="string"||!Ge.includes(x))&&s("MANIFEST_INVALID","surface is unsupported","surfaces"),yn.has(x)&&s("MANIFEST_INVALID","surfaces contain a duplicate","surfaces","duplicate-item"),yn.add(x),In.push(x);N(e.size)||s("MANIFEST_INVALID","size must be an object","size"),g("size",()=>h(e.size,["height"]));let An=g("size",()=>F(e.size,"height",1));An>720&&S("size.height exceeds the v2 limit","size.height","too-large");let Ae=g("stateProjection",()=>Qe(e.stateProjection)),ge=e.summaryProjection===void 0?void 0:g("summaryProjection",()=>Qe(e.summaryProjection));ge!==void 0&&ge.allow.some(x=>!Ae.allow.includes(x))&&s("MANIFEST_INVALID","summaryProjection must be a subset of stateProjection.allow","summaryProjection");let gn=g("dataPaths",()=>xo(e.dataPaths,Ae.allow)),_n=p(e,"deviceFeatures")?g("deviceFeatures",()=>jo(e.deviceFeatures)):void 0,En=p(e,"downloads")?g("downloads",()=>Fo(e.downloads)):void 0,Nn=p(e,"share")?g("share",()=>vo(e.share)):void 0,hn=p(e,"files")?g("files",()=>Jo(e.files)):void 0,Pn=p(e,"desktopOnly")?g("desktopOnly",()=>Vo(e.desktopOnly)):void 0;Array.isArray(e.actions)||s("MANIFEST_INVALID","actions must be an array","actions"),e.actions.length>32&&S("actions exceed the v2 limit","actions","too-many-items");let Tn=[],Sn=new Set,bn=0,Un=0;for(let[x,_e]of e.actions.entries()){let Y=`actions[${x}]`,H=g(Y,()=>Qo(_e));if(er(H,u,Y),Sn.has(H.actionId)&&s("MANIFEST_INVALID","actions contain a duplicate actionId",`${Y}.actionId`,"duplicate-item"),H.schedule!==void 0&&(bn+=1,bn>Wn&&s("MANIFEST_INVALID","an App declares at most one scheduled action",`${Y}.schedule`,"duplicate-item")),H.job!==void 0&&(Un+=1,Un>Zn&&s("MANIFEST_INVALID","an App declares at most one job action",`${Y}.job`,"duplicate-item")),H.backend.type==="core"&&H.backend.handler==="state.set"){H.mutation||s("MANIFEST_INVALID","state.set actions must be mutations",`${Y}.mutation`);for(let Gt of Object.keys(H.inputSchema.properties))Ae.allow.includes(Gt)||s("MANIFEST_INVALID","state.set input paths must be projection-allowed",`${Y}.inputSchema.properties`);}Sn.add(H.actionId),Tn.push(H);}return {manifestVersion:2,pluginId:o,definitionId:r,version:c,name:a,description:d,...l===void 0?{}:{icon:l},...f===void 0?{}:{tone:f},entry:"ui/index.html",...m===void 0?{}:{entryHash:m},...t===void 0?{}:{runtime:t},...i===void 0?{}:{csp:i},...y===void 0?{}:{initialState:y},...u===void 0?{}:{usage:u},...O===void 0?{}:{detailPanel:O},...z===void 0?{}:{displayModes:z},surfaces:In,size:{height:An},stateProjection:Ae,...ge===void 0?{}:{summaryProjection:ge},...gn===void 0?{}:{dataPaths:gn},..._n===void 0?{}:{deviceFeatures:_n},...En===void 0?{}:{downloads:En},...Nn===void 0?{}:{share:Nn},...hn===void 0?{}:{files:hn},...Pn===void 0?{}:{desktopOnly:Pn},actions:Tn}}function Ot(e){N(e)||s("MANIFEST_INVALID","_meta must be an object");let n=JSON.stringify(e);(n===void 0||Buffer.byteLength(n,"utf8")>mo)&&S("_meta exceeds the 4 KiB limit",void 0,"meta-too-large");}function lr(e){let n={},t={};for(let r of e.actions){n[r.actionId]={capabilities:[r.capability],inputKeys:Object.keys(r.inputSchema.properties??{}),...r.backend.type==="core"&&r.backend.handler===Ue?{mutation:r.mutation}:{},...r.dataInputs===void 0?{}:{dataInputs:r.dataInputs},resultProjection:r.resultProjection,...r.confirmation===void 0?{}:{confirmation:r.confirmation},...r.content===void 0?{}:{content:r.content},...r.schedule===void 0?{}:{schedule:r.schedule},...r.job===void 0?{}:{job:r.job},...r.jobAccess===void 0?{}:{jobAccess:r.jobAccess},...r.backend.type!=="skill"||r.backend.env===void 0?{}:{env:r.backend.env}};let c=r.backend.type==="skill"||r.backend.type==="core"&&(r.backend.handler==="state.set"||r.backend.handler===Ue);t[r.actionId]={actionId:r.actionId,mutation:r.mutation,backend:r.backend,launchPolicy:c?"allowed":"denied",...c?{}:{denialCode:"EXEC_DENIED"}};}let i={id:e.definitionId,version:e.version,renderer:"sandbox-html",...e.usage===void 0?{}:{usage:e.usage},...e.detailPanel===void 0?{}:{detailPanel:e.detailPanel},...e.displayModes===void 0?{}:{displayModes:e.displayModes},surfaces:e.surfaces,stateProjection:e.stateProjection,...e.summaryProjection===void 0?{}:{summaryProjection:e.summaryProjection},...e.dataPaths===void 0?{}:{dataPaths:e.dataPaths},...e.downloads===void 0?{}:{downloads:e.downloads},actions:n},o={entry:{path:"ui/index.html",...e.entryHash===void 0?{}:{hash:e.entryHash}},...e.initialState===void 0?{}:{initialState:e.initialState}};return {manifest:e,definition:i,handlers:t,resources:o}}function ur(e,n={}){Me(e),N(e)||s("MANIFEST_INVALID"),h(e,ro),e.manifestVersion!==1&&s("MANIFEST_INVALID");let t=qe(J(e,"pluginId")),i=qe(J(e,"definitionId")),o=F(e,"version",1),r=F(e,"primitiveSet",1),c=n.supportedPrimitiveSet??Yi;(!Number.isSafeInteger(c)||c<1)&&s("MANIFEST_INVALID"),r>c&&s("PRIMITIVE_SET_UNSUPPORTED"),N(e.activation)||s("MANIFEST_INVALID"),h(e.activation,["kind","language"]),e.activation.kind!=="fenced-code"&&s("MANIFEST_INVALID");let a=qe(J(e.activation,"language")),d=wo(e.schema),l=Co(e.layout,d);return {manifestVersion:1,pluginId:t,definitionId:i,version:o,primitiveSet:r,activation:{kind:"fenced-code",language:a},schema:d,layout:l}}function fr(e,n={}){return N(e)||s("MANIFEST_INVALID"),Object.hasOwn(e,"lineage")&&s("MANIFEST_INVALID","lineage is only allowed in product bundle indexes"),e.manifestVersion===2?dr(e,n):ur(e,n)}function me(e,n={}){try{return fr(e,n)}catch(t){if(t instanceof B)throw t;return s("MANIFEST_INVALID")}}function rn(e,n={}){let t=me(e,n);return t.manifestVersion===2?lr(t):t}var R="manifest.json",W="ui-plugin.json",oe=[R,W];var sn="0.3",Z="dev.crewx",un=Object.freeze(["manifest_version","name","display_name","version","description","long_description","author","repository","homepage","documentation","support","icon","icons","screenshots","localization","server","tools","tools_generated","prompts","prompts_generated","keywords","license","privacy_policies","compatibility","user_config","_meta"]),fn=Object.freeze(["manifest_version","name","display_name","version","description","_meta"]),Dt=Object.freeze(un.filter(e=>e!=="server"&&!fn.includes(e))),an=Object.freeze(["entry","surfaces","size","stateProjection","actions"]),Lt=Object.freeze(["definitionId","definitionVersion","icon","tone","entryHash","runtime","initialState","usage","detailPanel","displayModes","summaryProjection","dataPaths","focusedAiDataPaths","csp","deviceFeatures","downloads","share","files","desktopOnly"]),pr=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/,mr=256,Ir=/<\/?[A-Za-z][^>]*>/,yr=/^\s*javascript:/i,Ar=/data:[^,\s]*,/i;function Ct(e){return typeof e=="string"&&e.length<=mr&&pr.test(e)}var $=class extends Error{constructor(t,i){super(`${t}: ${i.path||"<file>"} (${i.rule})`);this.code=t;this.reason=i;}code;reason};function I(e,n,t,i,o){throw new $(e,{path:n,rule:t,...i===void 0?{}:{message:i},...o===void 0?{}:{file:o}})}function M(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;try{let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}catch{return false}}function b(e,n){return Object.prototype.hasOwnProperty.call(e,n)}function G(e){let n=`_meta["${Z}"]`;return e===void 0||e===""?n:e.startsWith("[")?`${n}${e}`:`${n}.${e}`}function gr(e){return e.toLowerCase().replace(/_/g,"-")}function _r(e){if(e===void 0||e==="")return "";let n=/^([^.[]+)(.*)$/.exec(e);if(!n)return G(e);let[,t,i]=n;switch(t){case "pluginId":return `name${i}`;case "name":return `display_name${i}`;case "description":return `description${i}`;case "_meta":return `_meta${i}`;case "version":return G("definitionVersion");case "definitionId":return G("definitionId");default:return G(`${t}${i}`)}}function kt(e,n,t){return {path:t(e.path),rule:e.rule??gr(e.code),...e.message!==e.code?{message:e.message}:{},file:n}}function xt(e){return JSON.parse(JSON.stringify(e))}function cn(e,n,t=0,i=new Set){if(typeof e=="string"){e.length>4096&&I("LIMIT_EXCEEDED",n,"string-too-long"),(Ir.test(e)||yr.test(e)||Ar.test(e))&&I("UNSAFE_VALUE",n,"unsafe-value");return}if(!(e===null||typeof e=="boolean")){if(typeof e=="number"){Number.isFinite(e)||I("MANIFEST_INVALID",n,"non-finite-number");return}typeof e!="object"&&I("MANIFEST_INVALID",n,"non-json-value"),t>8&&I("LIMIT_EXCEEDED",n,"too-deep"),i.has(e)&&I("MANIFEST_INVALID",n,"cycle"),i.add(e);try{if(Array.isArray(e)){e.length>128&&I("LIMIT_EXCEEDED",n,"array-too-long"),e.forEach((o,r)=>cn(o,`${n}[${r}]`,t+1,i));return}M(e)||I("MANIFEST_INVALID",n,"non-plain-object");for(let[o,r]of Object.entries(e))cn(r,n===""?o:`${n}.${o}`,t+1,i);}finally{i.delete(e);}}}function V(e,n){return (typeof e!="string"||e.length===0)&&I("MANIFEST_INVALID",n,"string"),e}function ie(e,n){return M(e)||I("MANIFEST_INVALID",n,"object"),e}function Er(e,n){Array.isArray(e)||I("MANIFEST_INVALID",n,"array"),e.forEach((t,i)=>V(t,`${n}[${i}]`));}function Nr(e,n){typeof e!="boolean"&&I("MANIFEST_INVALID",n,"boolean");}function Ie(e,n,t,i){for(let o of Object.keys(e))!t.includes(o)&&!i.includes(o)&&I("MANIFEST_INVALID",`${n}.${o}`,"unknown-key");for(let o of t)b(e,o)||I("MANIFEST_INVALID",`${n}.${o}`,"missing-key");}function hr(e,n){if(e!=="icon")switch(cn(n,e),e){case "long_description":case "homepage":case "documentation":case "support":case "license":V(n,e);return;case "author":{let t=ie(n,e);Ie(t,e,["name"],["email","url"]);for(let i of Object.keys(t))V(t[i],`${e}.${i}`);return}case "repository":{let t=ie(n,e);Ie(t,e,[],["type","url"]);for(let i of Object.keys(t))V(t[i],`${e}.${i}`);return}case "icons":{Array.isArray(n)||I("MANIFEST_INVALID",e,"array"),n.forEach((t,i)=>{let o=`${e}[${i}]`,r=ie(t,o);Ie(r,o,["src","size"],["theme"]),V(r.src,`${o}.src`),V(r.size,`${o}.size`),b(r,"theme")&&V(r.theme,`${o}.theme`);});return}case "screenshots":case "keywords":case "privacy_policies":Er(n,e);return;case "tools":{Array.isArray(n)||I("MANIFEST_INVALID",e,"array"),n.forEach((t,i)=>{let o=`${e}[${i}]`,r=ie(t,o);Ie(r,o,["name"],["description"]),V(r.name,`${o}.name`),b(r,"description")&&V(r.description,`${o}.description`);});return}case "prompts":{Array.isArray(n)||I("MANIFEST_INVALID",e,"array"),n.forEach((t,i)=>{let o=`${e}[${i}]`,r=ie(t,o);Ie(r,o,["name","text"],["description","arguments"]),V(r.name,`${o}.name`),V(r.text,`${o}.text`);});return}case "tools_generated":case "prompts_generated":Nr(n,e);return;case "localization":case "compatibility":case "user_config":ie(n,e);return;default:I("MANIFEST_INVALID",e,"unknown-key");}}function we(e){return typeof e=="string"&&ee.test(e)?e:void 0}function jt(e){return Number.isSafeInteger(e)&&e>=1?e:void 0}function Pr(e){let n=we(e.name);if(n===void 0)return;let t=e._meta,i=M(t)?t[Z]:void 0,o=M(i)?i:{},r=b(o,"definitionId")?we(o.definitionId):n,c=b(o,"definitionVersion")?jt(o.definitionVersion):1;return {pluginId:n,...r===void 0?{}:{definitionId:r},...c===void 0?{}:{definitionVersion:c}}}function Tr(e){let n=we(e.pluginId);if(n===void 0)return;let t=we(e.definitionId),i=jt(e.version);return {pluginId:n,...t===void 0?{}:{definitionId:t},...i===void 0?{}:{definitionVersion:i}}}function Sr(e,n){if(e===W)return n.builtinOnly===true;let t=n._meta,i=M(t)?t[Z]:void 0;return M(i)&&i.builtinOnly===true}function br(e,n){b(e,"server")&&I("MANIFEST_INVALID","server","server-unsupported","phase 1 runs CrewX-owned Apps only");for(let a of Object.keys(e))un.includes(a)||I("MANIFEST_INVALID",a,"unknown-key");for(let a of fn)b(e,a)||I("MANIFEST_INVALID",a,"missing-key");e.manifest_version!==sn&&I("MANIFEST_INVALID","manifest_version","unsupported-version",`manifest_version must be "${sn}"`),Ct(e.version)||I("MANIFEST_INVALID","version","semver","version must be a semver.org version such as 0.1.0");let t=e._meta;M(t)||I("MANIFEST_INVALID","_meta","object"),b(t,Z)||I("MANIFEST_INVALID",G(),"missing-key");let i=t[Z];M(i)||I("MANIFEST_INVALID",G(),"object");for(let a of Object.keys(i))an.includes(a)||Lt.includes(a)||I("MANIFEST_INVALID",G(a),"unknown-key");for(let a of an)a==="actions"&&n!==void 0||b(i,a)||I("MANIFEST_INVALID",G(a),"missing-key");if(n!==void 0&&b(i,"actions")&&I("MANIFEST_INVALID",G("actions"),"two-truths",`actions are declared in both ${R} and ${w}; a server.ts App keeps them in the tools file only`),Ur(i.actions),b(i,"definitionVersion")){let a=i.definitionVersion;(!Number.isSafeInteger(a)||a<1)&&I("MANIFEST_INVALID",G("definitionVersion"),"positive-integer");}let o={};for(let a of Dt)b(e,a)&&(hr(a,e[a]),o[a]=xt(e[a]));let r={};for(let[a,d]of Object.entries(t))a!==Z&&(r[a]=d);let c={manifestVersion:2,pluginId:e.name,definitionId:b(i,"definitionId")?i.definitionId:e.name,version:b(i,"definitionVersion")?i.definitionVersion:1,name:e.display_name,description:e.description};for(let[a,d]of Object.entries(i))a==="definitionId"||a==="definitionVersion"||(c[a]=d);return n!==void 0&&(c.actions=n.map(a=>{let{viewCall:d,...l}=a;return {...l,backend:d===true?{type:"core",handler:"view.call"}:{type:"skill",entry:j}}})),Object.keys(r).length>0&&(c._meta=r),{v2Input:c,...Object.keys(r).length>0?{vendorMeta:r}:{},passthrough:o}}function Ur(e){Array.isArray(e)&&e.forEach((n,t)=>{let i=M(n)?n.backend:void 0;M(i)&&b(i,"entry")&&I("MANIFEST_INVALID",G(`actions[${t}].backend.entry`),"entry-not-authorable",`an action in ${R} cannot name an entry; a server.ts App declares its actions in ${w}`);});}function Or(e,n,t){M(e)||I("MANIFEST_INVALID","","not-object","manifest.json must be a JSON object",R);let i;try{i=br(e,t);}catch(c){throw c instanceof $?new $(c.code,{...c.reason,file:R}):c}let o;try{let c=me(i.v2Input,{mode:n.mode??"local"});c.manifestVersion!==2&&I("MANIFEST_INVALID","","v2-required"),o=c;}catch(c){throw c instanceof B?new $(c.code,kt(c,R,_r)):c}let r=e.tools;if(Array.isArray(r)){let c=new Set(o.actions.map(a=>a.actionId));r.forEach((a,d)=>{let l=a.name;if(!c.has(l))throw new $("MANIFEST_INVALID",{path:`tools[${d}].name`,rule:"tool-not-action",message:"every tools[].name must be an action id",file:R})});}return {file:R,manifest:o,v2Input:i.v2Input,releaseVersion:e.version,...Object.keys(i.passthrough).length>0?{mcpb:i.passthrough}:{}}}function Rr(e,n){try{let t=me(e,{mode:n.mode??"local"});if(t.manifestVersion!==2)throw new $("MANIFEST_INVALID",{path:"manifestVersion",rule:"v2-required",message:"a workspace App requires manifestVersion 2",file:W});return {file:W,manifest:t,v2Input:e}}catch(t){throw t instanceof B?new $(t.code,kt(t,W,i=>i??"")):t}}function dn(e){return Qn(rn(e).definition)}function Mt(e){let{entryHash:n,initialState:t,...i}=e,o={...i};return t!==void 0&&(o.initialState={path:t.path}),xt(o)}function Mr(e,n){let t=Mt(e),i=Mt(n);return [...new Set([...Object.keys(t),...Object.keys(i)])].sort().filter(r=>Q(t[r]??null)!==Q(i[r]??null))}function wr(e,n){return e.entryHash!==void 0&&n.entryHash!==void 0&&e.entryHash!==n.entryHash||e.initialState?.hash!==void 0&&n.initialState?.hash!==void 0&&e.initialState.hash!==n.initialState.hash}function Dr(e,n){let t=Mr(e,n),i=wr(e,n),o="";try{let r=dn(e),c=dn(n);i=i||r!==c,o=` (definition hash ${r.slice(0,12)} vs ${c.slice(0,12)})`;}catch{i=true;}t.length===0&&!i||I("MANIFEST_DUAL_MISMATCH","","dual-manifest-mismatch",`${R} and ${W} normalize to different definitions${o}`+(t.length>0?`; differing fields: ${t.join(", ")}`:""));}function v(e,n,t="MANIFEST_INVALID",i){return {code:t,reason:{path:e,rule:n,...i===void 0?{}:{message:i},file:w},files:[]}}function wt(e){return {...v("","tools-needs-manifest-json","MANIFEST_INVALID",`${w} is read with ${R} only`),files:e}}function Lr(e,n){if(e.byteLength>n)return {failure:v("","file-too-large","LIMIT_EXCEEDED")};let t;try{t=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(e));}catch{return {failure:v("","invalid-json")}}if(!M(t))return {failure:v("","not-object","MANIFEST_INVALID",`${w} must be a JSON object`)};for(let o of Object.keys(t))if(o!=="schemaVersion"&&o!=="actions")return {failure:v(o,"unknown-key")};for(let o of ["schemaVersion","actions"])if(!b(t,o))return {failure:v(o,"missing-key")};if(t.schemaVersion!==1)return {failure:v("schemaVersion","unsupported-version","MANIFEST_INVALID",`schemaVersion must be ${1}`)};let i=t.actions;if(!Array.isArray(i))return {failure:v("actions","array")};for(let[o,r]of i.entries()){if(!M(r))return {failure:v(`actions[${o}]`,"object")};if(b(r,"backend"))return {failure:v(`actions[${o}].backend`,"tools-backend","MANIFEST_INVALID",`an action in ${w} cannot carry a backend`)};if(b(r,"viewCall")&&r.viewCall!==true)return {failure:v(`actions[${o}].viewCall`,"view-call-marker","MANIFEST_INVALID","viewCall must be the exact marker true")}}return {actions:i}}function Cr(e,n){let t=n.maxBytes??262144,i=[],o=new TextDecoder("utf-8",{fatal:true});for(let r of oe){let c=e[r];if(c===void 0)continue;if(c.byteLength>t)return {parsed:i,failure:{code:"LIMIT_EXCEEDED",reason:{path:"",rule:"file-too-large",file:r},files:[r]}};let a;try{a=JSON.parse(o.decode(c));}catch{return {parsed:i,failure:{code:"MANIFEST_INVALID",reason:{path:"",rule:"invalid-json",file:r},files:[r]}}}if(!M(a))return {parsed:i,failure:{code:"MANIFEST_INVALID",reason:{path:"",rule:"not-object",message:`${r} must be a JSON object`,file:r},files:[r]}};i.push({file:r,raw:a});}return {parsed:i}}function pn(e,n={}){let{parsed:t,failure:i}=Cr(e,n),o=oe.filter(u=>e[u]!==void 0);if(i!==void 0)return {ok:false,rejection:i,parseFailure:true,builtinOnly:false};let r=e[w],c=r===void 0?void 0:Lr(r,n.maxBytes??262144);if(t.length===0)return {ok:false,rejection:c===void 0?{code:"MANIFEST_INVALID",reason:{path:"",rule:"no-manifest-file",message:"neither manifest.json nor ui-plugin.json is present"},files:[]}:wt(o),parseFailure:true,builtinOnly:false};let a=t[0],d=a.file===R?Pr(a.raw):Tr(a.raw),l=t.some(u=>Sr(u.file,u.raw)),f;if(c!==void 0){let u=t.some(O=>O.file===R)?c.failure:wt(o);if(u!==void 0)return {ok:false,rejection:u,parseFailure:false,...d===void 0?{}:{identity:d},builtinOnly:l};f=c.actions;}let m=[];try{for(let u of t)m.push(u.file===R?Or(u.raw,n,f):Rr(u.raw,n));m.length===2&&Dr(m[0].manifest,m[1].manifest);}catch(u){if(u instanceof $)return {ok:false,rejection:{code:u.code,reason:u.reason,files:u.code==="MANIFEST_DUAL_MISMATCH"?[...oe]:u.reason.file===void 0||u.reason.file===w?o:[u.reason.file]},parseFailure:false,...d===void 0?{}:{identity:d},builtinOnly:l};throw u}let y=m[0];return {ok:true,...y,identity:d??{pluginId:y.manifest.pluginId},files:o}}new TextDecoder("utf-8",{fatal:true});var Ft=20*1e3;function Vt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function mn(e){try{let n=L__namespace.lstatSync(e);return n.isSymbolicLink()||!n.isFile()?void 0:new Uint8Array(L__namespace.readFileSync(e))}catch{return}}function kr(e){let n=mn(P__namespace.join(e,"package.json"));if(n)try{let t=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(n));return Vt(t)?t:void 0}catch{return}}function xr(e){let n={};for(let i of oe){let o=mn(P__namespace.join(e,i));o&&(n[i]=o);}let t=mn(P__namespace.join(e,w));if(t&&(n[w]=t),Object.keys(n).length!==0)try{let i=pn(n,{mode:"local"});if(!i.ok)return;for(let o of i.manifest.actions){let r=o.backend;if(r.type==="skill"&&"entry"in r&&r.entry)return vt(r.entry)}return "dist/server.mjs"}catch{return}}function jr(e){let n=e.main;if(typeof n=="string")return n;let t=e.bin;if(typeof t=="string")return t;if(Vt(t)){let i=Object.values(t).find(o=>typeof o=="string");if(i)return i}}function vt(e){return e===j||e.endsWith("/main.mjs")||e.endsWith("/entry.mjs")?P__namespace.posix.join(P__namespace.posix.dirname(e),"server.mjs"):e}function Fr(e){let n=kr(e),t=xr(e),i=n?jr(n):void 0,o=t??(i?vt(i):void 0);if(!o)throw new T("VERIFY_IMPORT_FAILED","verify","The App manifest does not declare a server entry.");if(!o||o.includes("\\")||o.includes("\0")||P__namespace.posix.isAbsolute(o)||o.split("/").some(a=>a===".."||a.length===0))throw new T("VERIFY_IMPORT_FAILED","verify","The App manifest has an unsafe server entry.");let r=P__namespace.resolve(e),c=P__namespace.resolve(r,...o.split("/"));if(c!==r&&!c.startsWith(`${r}${P__namespace.sep}`))throw new T("VERIFY_IMPORT_FAILED","verify","The App manifest server entry escaped the package.");try{let a=L__namespace.lstatSync(c);if(a.isSymbolicLink()||!a.isFile())throw new Error("not a regular file")}catch{throw new T("VERIFY_IMPORT_FAILED","verify",`The App server entry is missing: ${o}`)}return c}async function Vr(e,n={}){let t=n.runtime,i=t?.workspaceRoot??e,o=Fr(e),c=await he({command:t?.execPath??process.execPath,args:["--input-type=module","-e",'import { pathToFileURL } from "node:url"; await import(pathToFileURL(process.argv[1]).href);',o],cwd:e,env:re(i,t?.isElectronRuntime),runner:n.runner,timeoutMs:n.timeoutMs??Ft,onTimeoutCode:"VERIFY_TIMEOUT",step:"verify",onOutput:a=>{let d=a.replace(/[\r\n]+/gu," ").replace(/\s+/gu," ").trim().slice(-400);if(d)try{n.onProgress?.({step:"verify",message:d});}catch{}}});if(c.error!==void 0||c.status!==0){let a=On(c.stderr||c.error?.message);throw new T("VERIFY_IMPORT_FAILED","verify","The App server module could not be imported.",a)}}var vr=Ft;
7
+ exports.APP_INSTALL_NO_OUTPUT_TIMEOUT_MS=li;exports.APP_INSTALL_TIMEOUT_MS=di;exports.APP_VERIFY_TIMEOUT_MS=vr;exports.AppInstallError=T;exports.buildAppRuntimeEnv=re;exports.prepareAppDependencies=ci;exports.resolveNpmCli=Kn;exports.verifyAppLaunch=Vr;
@@ -0,0 +1,33 @@
1
+ export interface AppInstallCommandResult {
2
+ readonly status: number | null;
3
+ readonly stdout: string;
4
+ readonly stderr: string;
5
+ readonly error?: Error;
6
+ }
7
+ export interface AppInstallCommandOptions {
8
+ readonly cwd: string;
9
+ readonly env: NodeJS.ProcessEnv;
10
+ readonly onStdout?: (chunk: string) => void;
11
+ readonly onStderr?: (chunk: string) => void;
12
+ }
13
+ export interface AppInstallCommandHandle {
14
+ readonly pid?: number;
15
+ readonly completion: Promise<AppInstallCommandResult>;
16
+ terminate(): Promise<void>;
17
+ }
18
+ export type AppInstallRunner = (command: string, args: readonly string[], options: AppInstallCommandOptions) => AppInstallCommandHandle;
19
+ export declare const spawnAppInstallCommand: AppInstallRunner;
20
+ export interface RunAppInstallCommandOptions {
21
+ readonly command: string;
22
+ readonly args: readonly string[];
23
+ readonly cwd: string;
24
+ readonly env: NodeJS.ProcessEnv;
25
+ readonly runner?: AppInstallRunner;
26
+ readonly signal?: AbortSignal;
27
+ readonly timeoutMs: number;
28
+ readonly noOutputTimeoutMs?: number;
29
+ readonly onTimeoutCode: 'DEPS_TIMEOUT' | 'VERIFY_TIMEOUT';
30
+ readonly step: 'dependencies' | 'verify';
31
+ readonly onOutput?: (chunk: string) => void;
32
+ }
33
+ export declare function runAppInstallCommand(options: RunAppInstallCommandOptions): Promise<AppInstallCommandResult>;
@@ -0,0 +1,2 @@
1
+ export type AppElectronRuntimeCheck = () => boolean;
2
+ export declare function buildAppRuntimeEnv(workspaceRoot: string, isElectronRuntime?: AppElectronRuntimeCheck): NodeJS.ProcessEnv;
@@ -0,0 +1,10 @@
1
+ import type { AppInstallRuntime, AppInstallProgress } from './dependencies.js';
2
+ import { type AppInstallRunner } from './process.js';
3
+ export interface VerifyAppLaunchOptions {
4
+ readonly runtime?: AppInstallRuntime;
5
+ readonly runner?: AppInstallRunner;
6
+ readonly timeoutMs?: number;
7
+ readonly onProgress?: (progress: AppInstallProgress) => void;
8
+ }
9
+ export declare function verifyAppLaunch(stagedDir: string, options?: VerifyAppLaunchOptions): Promise<void>;
10
+ export declare const APP_VERIFY_TIMEOUT_MS: number;
@@ -0,0 +1,67 @@
1
+ import type { AppSyncBinding, AppSyncContinuationCapability, AppSyncConflictArchive, AppSyncConflictArchiveInput, AppSyncConflictResolutionInput, AppSyncConflictResolutionResult, AppSyncConflictSummary, AppSyncAccountDataPurgeInput, AppSyncAccountDataPurgeResult, AppSyncCreationBudget, AppSyncCreationJob, AppSyncDocumentPort, AppSyncGrant, AppSyncListConflictsInput, AppSyncOperationContext, AppSyncRemote, AppSyncStore, DocCreateLedger } from './types.js';
2
+ import { AppSyncSessionFence, type AppSyncGrantFenceToken, type AppSyncSessionFenceToken } from './session-fence.js';
3
+ import { AppSyncScopeRegistry } from './scope.js';
4
+ interface AppSyncContinuationRuntimeDependencies {
5
+ readonly store: AppSyncStore;
6
+ readonly continuation?: AppSyncContinuationCapability;
7
+ readonly remote: AppSyncRemote;
8
+ readonly documents: AppSyncDocumentPort;
9
+ readonly creationBudget: AppSyncCreationBudget;
10
+ readonly createLedger?: DocCreateLedger;
11
+ readonly onAdapterError?: (error: unknown) => void;
12
+ }
13
+ export declare class AppSyncContinuationRuntime {
14
+ private readonly dependencies;
15
+ private readonly scopeRegistry;
16
+ private readonly sessionFence;
17
+ private readonly now;
18
+ private readonly createId;
19
+ private readonly hasPendingRevoke;
20
+ private readonly continuation;
21
+ private readonly continuationStore;
22
+ private readonly pageSize;
23
+ constructor(dependencies: AppSyncContinuationRuntimeDependencies, scopeRegistry: AppSyncScopeRegistry, sessionFence: AppSyncSessionFence, now: () => number, createId: () => string, hasPendingRevoke: (bindingId: string) => boolean);
24
+ tick(binding: AppSyncBinding, grant: AppSyncGrant, session: AppSyncSessionFenceToken, grantToken: AppSyncGrantFenceToken, _context: AppSyncOperationContext): Promise<void>;
25
+ listConflicts(input: AppSyncListConflictsInput): AppSyncConflictSummary[];
26
+ private assertHumanBindingIdentity;
27
+ private requireCurrentSession;
28
+ private requireHumanOperationBinding;
29
+ readConflictArchive(input: AppSyncConflictArchiveInput): Promise<AppSyncConflictArchive>;
30
+ purgeAccountData(input: AppSyncAccountDataPurgeInput): Promise<AppSyncAccountDataPurgeResult>;
31
+ resolveConflict(input: AppSyncConflictResolutionInput): Promise<AppSyncConflictResolutionResult>;
32
+ dispatchReattachCreation(binding: AppSyncBinding, grant: AppSyncGrant, session: AppSyncSessionFenceToken, candidate: AppSyncCreationJob, context: AppSyncOperationContext): Promise<void>;
33
+ private deferClaim;
34
+ private traverseWithCursorRecovery;
35
+ private traverseGrantDocs;
36
+ private traverseDeletedRefs;
37
+ private validateGrantDocsPage;
38
+ private validateDeletedRefsPage;
39
+ private readActiveGrant;
40
+ private processPendingDiscoveries;
41
+ private reconcileDiscoveredDocument;
42
+ private inspectLocal;
43
+ private readPendingDocument;
44
+ private validateRemoteDocument;
45
+ private queueOrConfirmReattachment;
46
+ private markReattached;
47
+ private markPendingForReconcile;
48
+ private applyConditionalSave;
49
+ private applyEffect;
50
+ private reconcileAfterLocalRace;
51
+ private preserveConflict;
52
+ private recordOutcome;
53
+ private readRemoteById;
54
+ private readRemoteDocument;
55
+ private applyHumanResolution;
56
+ private cleanupResolvedConflict;
57
+ private readVerifiedArchive;
58
+ private refreshConflictAfterStale;
59
+ private archiveFenceGrant;
60
+ private purgeFenceGrant;
61
+ private createArchiveFenceContext;
62
+ private assertArchiveFenceCurrent;
63
+ private createFenceContext;
64
+ private assertFenceCurrent;
65
+ private isFenceCurrent;
66
+ }
67
+ export {};
@@ -0,0 +1,92 @@
1
+ import { type AppSyncBinding, type AppSyncBindingInput, type AppSyncBeginControlRequest, type AppSyncControlRequest, type AppSyncControlRequestHandle, type AppSyncControlRequestIdentity, type AppSyncGrantInvalidation, type AppSyncOperationContext, type AppSyncRemote, type AppSyncDocumentPort, type AppSyncCreationBudget, type AppSyncConflictResolutionInput, type AppSyncConflictResolutionResult, type AppSyncConflictArchiveInput, type AppSyncConflictArchive, type AppSyncAccountDataPurgeInput, type AppSyncAccountDataPurgeResult, type AppSyncListConflictsInput, type AppSyncConflictSummary, type AppSyncContinuationCapability, type AppSyncResolveControlRequest, type AppSyncSnapshot, type AppSyncStore, type AppSyncWorkspacePort, type DocCreateLedger } from './types.js';
2
+ import { AppSyncSessionFence } from './session-fence.js';
3
+ import { AppSyncScopeRegistry } from './scope.js';
4
+ export declare class AppSyncRemoteError extends Error {
5
+ readonly code: string;
6
+ readonly status?: number | undefined;
7
+ readonly retryAfterMs?: number | undefined;
8
+ constructor(code: string, status?: number | undefined, retryAfterMs?: number | undefined);
9
+ }
10
+ export interface AppSyncCoordinatorDependencies {
11
+ readonly store: AppSyncStore;
12
+ readonly workspace: AppSyncWorkspacePort;
13
+ readonly remote: AppSyncRemote;
14
+ readonly documents: AppSyncDocumentPort;
15
+ readonly creationBudget: AppSyncCreationBudget;
16
+ readonly createLedger?: DocCreateLedger;
17
+ readonly continuation?: AppSyncContinuationCapability;
18
+ readonly scopeRegistry?: AppSyncScopeRegistry;
19
+ readonly sessionFence?: AppSyncSessionFence;
20
+ readonly now?: () => number;
21
+ readonly createId?: () => string;
22
+ readonly onAdapterError?: (error: unknown) => void;
23
+ }
24
+ export declare class AppSyncCoordinator {
25
+ private readonly dependencies;
26
+ private readonly scopeRegistry;
27
+ private readonly sessionFence;
28
+ private readonly now;
29
+ private readonly createId;
30
+ private readonly scanRuns;
31
+ private readonly tickRuns;
32
+ private readonly remoteReadSemaphore;
33
+ private readonly continuationRuntime;
34
+ private scanEpoch;
35
+ get activeSessionEpoch(): number | null;
36
+ constructor(dependencies: AppSyncCoordinatorDependencies);
37
+ bind(input: AppSyncBindingInput): Promise<AppSyncBinding>;
38
+ scan(bindingId: string, context: AppSyncOperationContext): Promise<AppSyncSnapshot>;
39
+ tick(bindingId: string, context: AppSyncOperationContext): Promise<AppSyncSnapshot>;
40
+ private performTick;
41
+ private limitCreationClaims;
42
+ private makeDispatchGate;
43
+ private deferClaim;
44
+ private recordMissingDispatchGate;
45
+ suspendAccount(accountKey: string): Promise<void>;
46
+ invalidateGrant(input: AppSyncGrantInvalidation): Promise<void>;
47
+ beginControlRequest(input: AppSyncBeginControlRequest): Promise<AppSyncControlRequest>;
48
+ getControlRequest(input: AppSyncControlRequestHandle): AppSyncControlRequest | undefined;
49
+ getPendingControlRequest(input: AppSyncControlRequestIdentity): AppSyncControlRequest | undefined;
50
+ markControlRequestUnknown(input: AppSyncControlRequestHandle): Promise<AppSyncControlRequest>;
51
+ resolveControlRequest(input: AppSyncResolveControlRequest): Promise<AppSyncControlRequest>;
52
+ snapshot(bindingId: string): Promise<AppSyncSnapshot>;
53
+ private performScan;
54
+ private listAllowedRefs;
55
+ private readEligibleFile;
56
+ private beforeDocumentDispatch;
57
+ private readRemoteDocument;
58
+ private dispatchCreation;
59
+ private reconcileExisting;
60
+ private handleCreationError;
61
+ private handleExistingError;
62
+ private markDeleted;
63
+ private recordOutcome;
64
+ private recordBeforeDispatchFailure;
65
+ private writeResult;
66
+ private validateControlIdentity;
67
+ private hasPendingRevoke;
68
+ private holdPendingRevoke;
69
+ private invalidateStoredGeneration;
70
+ private pauseUnavailableBinding;
71
+ private pauseAuthentication;
72
+ private returnProcessingResultsToWaiting;
73
+ private suspendDocumentBinding;
74
+ private reportAdapterError;
75
+ private activateSession;
76
+ private suspendBindingsForAccount;
77
+ private shouldReconcile;
78
+ private validRemoteDocument;
79
+ private grantFromBinding;
80
+ private bindingHasGrant;
81
+ private isTransferStatus;
82
+ private isEligible;
83
+ private requireAuthenticatedAccount;
84
+ private isCurrent;
85
+ private refreshBindingStatus;
86
+ private snapshotNow;
87
+ listConflicts(input: AppSyncListConflictsInput): AppSyncConflictSummary[];
88
+ readConflictArchive(input: AppSyncConflictArchiveInput): Promise<AppSyncConflictArchive>;
89
+ resolveConflict(input: AppSyncConflictResolutionInput): Promise<AppSyncConflictResolutionResult>;
90
+ purgeAccountData(input: AppSyncAccountDataPurgeInput): Promise<AppSyncAccountDataPurgeResult>;
91
+ private retryAt;
92
+ }
@@ -0,0 +1,27 @@
1
+ import { type AppSyncSendDecision, type AppSyncSendGate, type DocCreateDispatchInput, type DocCreateDispatchSource, type DocCreateLedger, type DocCreateLedgerPeek } from './types.js';
2
+ type SqliteDatabase = import('better-sqlite3').Database;
3
+ export declare class AppSyncBudgetDeferredError extends Error {
4
+ readonly retryAt: number;
5
+ readonly code = "APP_SYNC_BUDGET_DEFERRED";
6
+ constructor(retryAt: number);
7
+ }
8
+ export declare class SqliteDocCreateLedger implements DocCreateLedger {
9
+ private readonly sqlite;
10
+ constructor(sqlite: SqliteDatabase);
11
+ peek(accountKey: string, now: number): DocCreateLedgerPeek;
12
+ reserve(input: DocCreateDispatchInput): AppSyncSendDecision;
13
+ reserveForced(input: DocCreateDispatchInput): void;
14
+ prune(now: number): number;
15
+ private readWindow;
16
+ private insert;
17
+ private deleteExpired;
18
+ }
19
+ export declare function createDispatchGate(input: {
20
+ readonly ledger: DocCreateLedger;
21
+ readonly accountKey: string;
22
+ readonly requestId: string;
23
+ readonly source: DocCreateDispatchSource;
24
+ readonly now: () => number;
25
+ readonly guard?: () => void;
26
+ }): AppSyncSendGate;
27
+ export {};
@@ -0,0 +1,9 @@
1
+ export { AppSyncCoordinator, AppSyncRemoteError } from './coordinator.js';
2
+ export type { AppSyncCoordinatorDependencies } from './coordinator.js';
3
+ export { AppSyncBudgetDeferredError, SqliteDocCreateLedger, createDispatchGate } from './create-ledger.js';
4
+ export { AppSyncSessionFence } from './session-fence.js';
5
+ export { AppSyncScopeRegistry, APP_SYNC_SCOPE_DEFINITION, APP_SYNC_SCOPE_SELECTORS, APP_SYNC_SCOPE_VERSION, fingerprintMarkdown, normalizeResolvedRootSegments, } from './scope.js';
6
+ export { SqliteAppSyncStore } from './sqlite-store.js';
7
+ export type { AppSyncFrontMatterValidation, AppSyncRefValidation, AppSyncScopeDefinition, AppSyncScopeKind, } from './scope.js';
8
+ export type { AppSyncGrantFenceToken, AppSyncSessionFenceToken } from './session-fence.js';
9
+ export { APP_SYNC_APP_ID, APP_SYNC_CONTINUATION_MAX_PAGE_SIZE, APP_SYNC_CONTINUATION_MIN_INTERVAL_MS, APP_SYNC_FRONT_MATTER_MAX_BYTES, APP_SYNC_LOCAL_RECORD_LIMIT, APP_SYNC_PAGE_SIZE, DOC001_CREATE_LIMIT_PER_WINDOW, DOC001_CREATE_WINDOW_MS, type AppSyncBinding, type AppSyncBindingInput, type AppSyncBeginControlRequest, type AppSyncBeforeDispatchResult, type AppSyncCounts, type AppSyncControlRequest, type AppSyncControlRequestHandle, type AppSyncControlRequestIdentity, type AppSyncControlRequestKind, type AppSyncControlRequestState, type AppSyncControlResolution, type AppSyncConflict, type AppSyncConflictArchive, type AppSyncConflictArchiveInput, type AppSyncConflictChoice, type AppSyncConflictPreservationStatus, type AppSyncConflictResolutionInput, type AppSyncConflictResolutionResult, type AppSyncConflictState, type AppSyncConflictSummary, type AppSyncConflictVaultPort, type AppSyncAccountDataPurgeInput, type AppSyncAccountDataPurgeResult, type AppSyncContinuationApplyResult, type AppSyncContinuationCapability, type AppSyncContinuationEffect, type AppSyncContinuationSourceCheck, type AppSyncContinuationStore, type AppSyncCreateResult, type AppSyncCreationBudget, type AppSyncCreationClaim, type AppSyncCreationJob, type AppSyncDocumentOutcome, type AppSyncDocumentBaseline, type AppSyncDocumentInspection, type AppSyncDocumentPort, type AppSyncEligibility, type AppSyncFileEntry, type AppSyncFilePage, type AppSyncFileRead, type AppSyncGrant, type AppSyncGrantDoc, type AppSyncGrantDocsPage, type AppSyncDeletedRef, type AppSyncDeletedRefsPage, type AppSyncDiscoveryCheckpoint, type AppSyncPendingDiscovery, type AppSyncOperationFence, type AppSyncGrantInvalidation, type AppSyncGrantSnapshot, type AppSyncJobStatus, type AppSyncListConflictsInput, type AppSyncOperationContext, type AppSyncRemote, type AppSyncRemoteDocument, type AppSyncSendDecision, type AppSyncSendGate, type AppSyncResolveControlRequest, type AppSyncResult, type AppSyncResultStatus, type AppSyncScopeSelectors, type AppSyncSessionState, type AppSyncSnapshot, type AppSyncStatus, type AppSyncStore, type AppSyncWorkspacePort, type DocCreateDispatchInput, type DocCreateDispatchSource, type DocCreateLedger, type DocCreateLedgerPeek, } from './types.js';