@vibecodr/cli 0.2.10 → 1.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/CHANGELOG.md +53 -18
  2. package/MIGRATION.md +73 -0
  3. package/README.md +89 -72
  4. package/dist/auth/official-client.d.ts +6 -0
  5. package/dist/auth/official-client.d.ts.map +1 -0
  6. package/dist/auth/official-client.js +1 -0
  7. package/dist/auth/official-client.js.map +1 -0
  8. package/dist/auth/token-manager.d.ts +40 -0
  9. package/dist/auth/token-manager.d.ts.map +1 -0
  10. package/dist/auth/token-manager.js +1 -2
  11. package/dist/auth/token-manager.js.map +1 -0
  12. package/dist/bin/vc-tools.d.ts +3 -0
  13. package/dist/bin/vc-tools.d.ts.map +1 -0
  14. package/dist/bin/vc-tools.js +7 -0
  15. package/dist/bin/vc-tools.js.map +1 -0
  16. package/dist/bin/vibecodr-mcp.d.ts +3 -0
  17. package/dist/bin/vibecodr-mcp.d.ts.map +1 -0
  18. package/dist/bin/vibecodr-mcp.js +37 -0
  19. package/dist/bin/vibecodr-mcp.js.map +1 -0
  20. package/dist/cli/errors.d.ts +28 -0
  21. package/dist/cli/errors.d.ts.map +1 -0
  22. package/dist/cli/errors.js +1 -0
  23. package/dist/cli/errors.js.map +1 -0
  24. package/dist/cli/output.d.ts +16 -0
  25. package/dist/cli/output.d.ts.map +1 -0
  26. package/dist/cli/output.js +1 -0
  27. package/dist/cli/output.js.map +1 -0
  28. package/dist/cli/parse.d.ts +18 -0
  29. package/dist/cli/parse.d.ts.map +1 -0
  30. package/dist/cli/parse.js +1 -0
  31. package/dist/cli/parse.js.map +1 -0
  32. package/dist/clients/base.d.ts +20 -0
  33. package/dist/clients/base.d.ts.map +1 -0
  34. package/dist/clients/base.js +1 -0
  35. package/dist/clients/base.js.map +1 -0
  36. package/dist/clients/claude-code.d.ts +5 -0
  37. package/dist/clients/claude-code.d.ts.map +1 -0
  38. package/dist/clients/claude-code.js +88 -0
  39. package/dist/clients/claude-code.js.map +1 -0
  40. package/dist/clients/claude-desktop.d.ts +5 -0
  41. package/dist/clients/claude-desktop.d.ts.map +1 -0
  42. package/dist/clients/claude-desktop.js +97 -0
  43. package/dist/clients/claude-desktop.js.map +1 -0
  44. package/dist/clients/codex.d.ts +5 -0
  45. package/dist/clients/codex.d.ts.map +1 -0
  46. package/dist/clients/codex.js +1 -0
  47. package/dist/clients/codex.js.map +1 -0
  48. package/dist/clients/cursor.d.ts +5 -0
  49. package/dist/clients/cursor.d.ts.map +1 -0
  50. package/dist/clients/cursor.js +1 -1
  51. package/dist/clients/cursor.js.map +1 -0
  52. package/dist/clients/vscode.d.ts +5 -0
  53. package/dist/clients/vscode.d.ts.map +1 -0
  54. package/dist/clients/vscode.js +5 -1
  55. package/dist/clients/vscode.js.map +1 -0
  56. package/dist/clients/windsurf.d.ts +5 -0
  57. package/dist/clients/windsurf.d.ts.map +1 -0
  58. package/dist/clients/windsurf.js +1 -0
  59. package/dist/clients/windsurf.js.map +1 -0
  60. package/dist/commands/call.d.ts +9 -0
  61. package/dist/commands/call.d.ts.map +1 -0
  62. package/dist/commands/call.js +1 -0
  63. package/dist/commands/call.js.map +1 -0
  64. package/dist/commands/config.d.ts +3 -0
  65. package/dist/commands/config.d.ts.map +1 -0
  66. package/dist/commands/config.js +1 -0
  67. package/dist/commands/config.js.map +1 -0
  68. package/dist/commands/context.d.ts +15 -0
  69. package/dist/commands/context.d.ts.map +1 -0
  70. package/dist/commands/context.js +2 -5
  71. package/dist/commands/context.js.map +1 -0
  72. package/dist/commands/doctor.d.ts +3 -0
  73. package/dist/commands/doctor.d.ts.map +1 -0
  74. package/dist/commands/doctor.js +2 -1
  75. package/dist/commands/doctor.js.map +1 -0
  76. package/dist/commands/help.d.ts +3 -0
  77. package/dist/commands/help.d.ts.map +1 -0
  78. package/dist/commands/help.js +1 -0
  79. package/dist/commands/help.js.map +1 -0
  80. package/dist/commands/install.d.ts +3 -0
  81. package/dist/commands/install.d.ts.map +1 -0
  82. package/dist/commands/install.js +23 -5
  83. package/dist/commands/install.js.map +1 -0
  84. package/dist/commands/login.d.ts +3 -0
  85. package/dist/commands/login.d.ts.map +1 -0
  86. package/dist/commands/login.js +1 -0
  87. package/dist/commands/login.js.map +1 -0
  88. package/dist/commands/logout.d.ts +3 -0
  89. package/dist/commands/logout.d.ts.map +1 -0
  90. package/dist/commands/logout.js +1 -0
  91. package/dist/commands/logout.js.map +1 -0
  92. package/dist/commands/pulse-publish.d.ts +3 -0
  93. package/dist/commands/pulse-publish.d.ts.map +1 -0
  94. package/dist/commands/pulse-publish.js +1 -0
  95. package/dist/commands/pulse-publish.js.map +1 -0
  96. package/dist/commands/pulse-setup.d.ts +3 -0
  97. package/dist/commands/pulse-setup.d.ts.map +1 -0
  98. package/dist/commands/pulse-setup.js +5 -3
  99. package/dist/commands/pulse-setup.js.map +1 -0
  100. package/dist/commands/pulse.d.ts +3 -0
  101. package/dist/commands/pulse.d.ts.map +1 -0
  102. package/dist/commands/pulse.js +1 -0
  103. package/dist/commands/pulse.js.map +1 -0
  104. package/dist/commands/status.d.ts +3 -0
  105. package/dist/commands/status.d.ts.map +1 -0
  106. package/dist/commands/status.js +1 -0
  107. package/dist/commands/status.js.map +1 -0
  108. package/dist/commands/tools.d.ts +3 -0
  109. package/dist/commands/tools.d.ts.map +1 -0
  110. package/dist/commands/tools.js +1 -0
  111. package/dist/commands/tools.js.map +1 -0
  112. package/dist/commands/uninstall.d.ts +3 -0
  113. package/dist/commands/uninstall.d.ts.map +1 -0
  114. package/dist/commands/uninstall.js +12 -4
  115. package/dist/commands/uninstall.js.map +1 -0
  116. package/dist/commands/upload.d.ts +3 -0
  117. package/dist/commands/upload.d.ts.map +1 -0
  118. package/dist/commands/upload.js +1 -0
  119. package/dist/commands/upload.js.map +1 -0
  120. package/dist/commands/whoami.d.ts +3 -0
  121. package/dist/commands/whoami.d.ts.map +1 -0
  122. package/dist/commands/whoami.js +82 -0
  123. package/dist/commands/whoami.js.map +1 -0
  124. package/dist/core/interactive-input.d.ts +7 -0
  125. package/dist/core/interactive-input.d.ts.map +1 -0
  126. package/dist/core/interactive-input.js +1 -0
  127. package/dist/core/interactive-input.js.map +1 -0
  128. package/dist/core/mcp-client.d.ts +17 -0
  129. package/dist/core/mcp-client.d.ts.map +1 -0
  130. package/dist/core/mcp-client.js +1 -0
  131. package/dist/core/mcp-client.js.map +1 -0
  132. package/dist/core/redaction.d.ts +2 -0
  133. package/dist/core/redaction.d.ts.map +1 -0
  134. package/dist/core/redaction.js +36 -2
  135. package/dist/core/redaction.js.map +1 -0
  136. package/dist/core/renderers.d.ts +8 -0
  137. package/dist/core/renderers.d.ts.map +1 -0
  138. package/dist/core/renderers.js +1 -0
  139. package/dist/core/renderers.js.map +1 -0
  140. package/dist/doctor/run.d.ts +10 -0
  141. package/dist/doctor/run.d.ts.map +1 -0
  142. package/dist/doctor/run.js +12 -3
  143. package/dist/doctor/run.js.map +1 -0
  144. package/dist/legacy/cli/errors.d.ts +9 -0
  145. package/dist/legacy/cli/errors.d.ts.map +1 -0
  146. package/dist/legacy/cli/errors.js +23 -0
  147. package/dist/legacy/cli/errors.js.map +1 -0
  148. package/dist/legacy/cli/install.d.ts +24 -0
  149. package/dist/legacy/cli/install.d.ts.map +1 -0
  150. package/dist/legacy/cli/install.js +307 -0
  151. package/dist/legacy/cli/install.js.map +1 -0
  152. package/dist/legacy/cli/output.d.ts +17 -0
  153. package/dist/legacy/cli/output.d.ts.map +1 -0
  154. package/dist/legacy/cli/output.js +36 -0
  155. package/dist/legacy/cli/output.js.map +1 -0
  156. package/dist/legacy/cli/parser.d.ts +33 -0
  157. package/dist/legacy/cli/parser.d.ts.map +1 -0
  158. package/dist/legacy/cli/parser.js +177 -0
  159. package/dist/legacy/cli/parser.js.map +1 -0
  160. package/dist/legacy/cli/run.d.ts +11 -0
  161. package/dist/legacy/cli/run.d.ts.map +1 -0
  162. package/dist/legacy/cli/run.js +2947 -0
  163. package/dist/legacy/cli/run.js.map +1 -0
  164. package/dist/legacy/config/credential-store.d.ts +8 -0
  165. package/dist/legacy/config/credential-store.d.ts.map +1 -0
  166. package/dist/legacy/config/credential-store.js +52 -0
  167. package/dist/legacy/config/credential-store.js.map +1 -0
  168. package/dist/legacy/config/store.d.ts +63 -0
  169. package/dist/legacy/config/store.d.ts.map +1 -0
  170. package/dist/legacy/config/store.js +311 -0
  171. package/dist/legacy/config/store.js.map +1 -0
  172. package/dist/legacy/core/api-client.d.ts +45 -0
  173. package/dist/legacy/core/api-client.d.ts.map +1 -0
  174. package/dist/legacy/core/api-client.js +204 -0
  175. package/dist/legacy/core/api-client.js.map +1 -0
  176. package/dist/legacy/core/contracts.d.ts +488 -0
  177. package/dist/legacy/core/contracts.d.ts.map +1 -0
  178. package/dist/legacy/core/contracts.js +386 -0
  179. package/dist/legacy/core/contracts.js.map +1 -0
  180. package/dist/legacy/core/goal-coverage.d.ts +15 -0
  181. package/dist/legacy/core/goal-coverage.d.ts.map +1 -0
  182. package/dist/legacy/core/goal-coverage.js +169 -0
  183. package/dist/legacy/core/goal-coverage.js.map +1 -0
  184. package/dist/legacy/core/redaction.d.ts +4 -0
  185. package/dist/legacy/core/redaction.d.ts.map +1 -0
  186. package/dist/legacy/core/redaction.js +121 -0
  187. package/dist/legacy/core/redaction.js.map +1 -0
  188. package/dist/legacy/core/validators.d.ts +8 -0
  189. package/dist/legacy/core/validators.d.ts.map +1 -0
  190. package/dist/legacy/core/validators.js +102 -0
  191. package/dist/legacy/core/validators.js.map +1 -0
  192. package/dist/legacy/core/version.d.ts +3 -0
  193. package/dist/legacy/core/version.d.ts.map +1 -0
  194. package/dist/legacy/core/version.js +3 -0
  195. package/dist/legacy/core/version.js.map +1 -0
  196. package/dist/legacy/index.d.ts +8 -0
  197. package/dist/legacy/index.d.ts.map +1 -0
  198. package/dist/legacy/index.js +8 -0
  199. package/dist/legacy/index.js.map +1 -0
  200. package/dist/platform/browser.d.ts +7 -0
  201. package/dist/platform/browser.d.ts.map +1 -0
  202. package/dist/platform/browser.js +1 -0
  203. package/dist/platform/browser.js.map +1 -0
  204. package/dist/platform/exec.d.ts +3 -0
  205. package/dist/platform/exec.d.ts.map +1 -0
  206. package/dist/platform/exec.js +10 -1
  207. package/dist/platform/exec.js.map +1 -0
  208. package/dist/platform/paths.d.ts +9 -0
  209. package/dist/platform/paths.d.ts.map +1 -0
  210. package/dist/platform/paths.js +13 -0
  211. package/dist/platform/paths.js.map +1 -0
  212. package/dist/platform/prompt.d.ts +5 -0
  213. package/dist/platform/prompt.d.ts.map +1 -0
  214. package/dist/platform/prompt.js +1 -0
  215. package/dist/platform/prompt.js.map +1 -0
  216. package/dist/storage/config-store.d.ts +15 -0
  217. package/dist/storage/config-store.d.ts.map +1 -0
  218. package/dist/storage/config-store.js +1 -0
  219. package/dist/storage/config-store.js.map +1 -0
  220. package/dist/storage/file-lock.d.ts +7 -0
  221. package/dist/storage/file-lock.d.ts.map +1 -0
  222. package/dist/storage/file-lock.js +1 -0
  223. package/dist/storage/file-lock.js.map +1 -0
  224. package/dist/storage/install-manifest.d.ts +12 -0
  225. package/dist/storage/install-manifest.d.ts.map +1 -0
  226. package/dist/storage/install-manifest.js +1 -0
  227. package/dist/storage/install-manifest.js.map +1 -0
  228. package/dist/storage/secret-store.d.ts +36 -0
  229. package/dist/storage/secret-store.d.ts.map +1 -0
  230. package/dist/storage/secret-store.js +1 -0
  231. package/dist/storage/secret-store.js.map +1 -0
  232. package/dist/types/auth.d.ts +55 -0
  233. package/dist/types/auth.d.ts.map +1 -0
  234. package/dist/types/auth.js +1 -0
  235. package/dist/types/auth.js.map +1 -0
  236. package/dist/types/config.d.ts +29 -0
  237. package/dist/types/config.d.ts.map +1 -0
  238. package/dist/types/config.js +1 -0
  239. package/dist/types/config.js.map +1 -0
  240. package/dist/types/install.d.ts +26 -0
  241. package/dist/types/install.d.ts.map +1 -0
  242. package/dist/types/install.js +1 -0
  243. package/dist/types/install.js.map +1 -0
  244. package/docs/API-CONTRACT.md +606 -0
  245. package/docs/CLOUDFLARE-PRIMITIVE-FIT.md +212 -0
  246. package/docs/RELEASE-CHECKLIST.md +297 -0
  247. package/docs/SECURITY.md +227 -0
  248. package/docs/VALIDATION-MATRIX.md +58 -0
  249. package/docs/commands.md +49 -29
  250. package/docs/legacy/AGENT-TOOLKIT-RFC.md +1395 -0
  251. package/docs/legacy/CLI-GUIDELINES-AUDIT.md +95 -0
  252. package/docs/legacy/COMPLETION-AUDIT.md +542 -0
  253. package/docs/legacy/vc-tools-finetune.md +982 -0
  254. package/docs/legacy/vc-tools-goal-browser-run-containers.md +465 -0
  255. package/docs/legacy/vc-tools-goal-original.md +249 -0
  256. package/package.json +37 -8
@@ -0,0 +1,212 @@
1
+ # Cloudflare Primitive Fit
2
+
3
+ Last checked against Cloudflare docs: 2026-05-17.
4
+
5
+ This document records which current Cloudflare primitives belong in
6
+ `vc-tools`, and which ones are intentionally deferred. The goal is to avoid
7
+ shipping an older Durable Object mental model where Cloudflare now has a
8
+ better dynamic primitive, while also avoiding a novelty-driven replatform that
9
+ would weaken the hosted Tools Cloud boundary.
10
+
11
+ ## Current Decision
12
+
13
+ `vc-tools` should use Cloudflare's newest dynamic offerings when it is loading
14
+ customer- or agent-authored Worker code at runtime. It should not use them as a
15
+ replacement for the platform-owned quota, audit, artifact, job, Browser Run, or
16
+ Sandbox control plane.
17
+
18
+ The v1 production substrate remains:
19
+
20
+ - Browser Run Quick Actions for stateless screenshots, PDFs, markdown, rendered
21
+ HTML, and first-class bounded crawl artifacts.
22
+ - Cloudflare Workflows for durable `browser.agent_task` execution. The Workflow
23
+ owns the long-running task lifecycle and retries, while Browser Run Sessions
24
+ remain the browser provider inside that lane: Creator up to 20 minutes and Pro
25
+ up to 1 hour per task, both with 10-minute idle closure and artifact output.
26
+ - Cloudflare Sandbox SDK for hosted shell/test command execution, with Creator
27
+ on `standard-1` and Pro on `standard-2` container lanes.
28
+ - D1 for actor-scoped job, usage, audit, retention, and artifact indexes.
29
+ - R2 for artifact bytes.
30
+ - Queues plus DLQ for bounded async dispatch and retry of stateless browser,
31
+ sandbox, scheduled QA, and other single-step jobs.
32
+ - The Sandbox SDK's required Durable Object and Container binding for sandbox
33
+ lifecycle and process isolation.
34
+
35
+ That is not a rejection of Dynamic Workers. It is a boundary decision: Dynamic
36
+ Workers are an execution substrate for dynamically loaded Worker modules, not a
37
+ ledger, not an artifact store, not a Browser Run substitute, and not a shell
38
+ container.
39
+
40
+ ## Current Cloudflare Facts
41
+
42
+ Cloudflare Browser Run is the correct browser provider, but its lanes should be
43
+ split by workflow shape:
44
+
45
+ - Quick Actions remain the best default for `vc-tools` public-web browser work
46
+ because the hosted service can submit a bounded request, meter browser time,
47
+ store an artifact, and avoid local browser execution.
48
+ - Browser Sessions support direct browser control and session reuse. They carry
49
+ separate concurrency/pricing pressure and belong only inside the paid
50
+ `browser.agent_task` lane, not the stateless Quick Actions lane.
51
+ - `/crawl` is a Browser Run Quick Action, not a Dynamic Workers feature. It
52
+ starts an async provider crawl job and returns site records as a hosted
53
+ artifact under `vc-tools` quota, retention, and audit.
54
+
55
+ Cloudflare Workflows are the right durable primitive for long paid browser
56
+ tasks:
57
+
58
+ - Workflow classes extend `WorkflowEntrypoint` and are bound through Wrangler
59
+ with `name`, `binding`, and `class_name`.
60
+ - Workers create instances through the Workflow binding with an instance `id`
61
+ and typed `params`, which maps cleanly to the existing D1 job id and queued
62
+ job payload.
63
+ - `step.do()` provides durable execution, retry configuration, and resume from
64
+ the last successful step instead of relying on a Queue consumer invocation.
65
+ - Cloudflare Workers limits cap Queue Consumers at 15 minutes of wall-clock
66
+ time, while Workflows are designed for durable multi-step work. That makes
67
+ Queue consumers a poor owner for the 20-minute Creator and 1-hour Pro browser
68
+ agent-task lane.
69
+
70
+ Cloudflare Dynamic Workers provide a Worker Loader binding that can load Worker
71
+ code at runtime:
72
+
73
+ - `load(code)` creates a fresh Dynamic Worker for one-time execution.
74
+ - `get(id, callback)` caches a Dynamic Worker by ID so it can stay warm across
75
+ requests.
76
+ - Dynamic Workers can be given selected bindings and can have outbound network
77
+ disabled with `globalOutbound: null`.
78
+ - Dynamic Workers are priced by Dynamic Workers created daily, requests, and
79
+ CPU time.
80
+
81
+ Cloudflare Durable Object Facets build on Dynamic Workers:
82
+
83
+ - A platform-owned supervisor Durable Object loads dynamic code.
84
+ - The dynamically loaded facet runs as a child of the supervisor.
85
+ - Each facet gets its own isolated SQLite database.
86
+ - The supervisor controls access and decides what requests reach the facet.
87
+
88
+ Cloudflare Dynamic Workflows add durable steps to runtime-loaded code:
89
+
90
+ - Dynamic Worker code can create Workflow instances without pre-registering
91
+ each tenant's Workflow class.
92
+ - Workflow steps can retry, sleep, wait for events, and resume after isolate
93
+ restarts.
94
+
95
+ Cloudflare Sandbox SDK is different:
96
+
97
+ - The Sandbox SDK is explicitly built from Workers, Durable Objects, and
98
+ Containers.
99
+ - Its Wrangler configuration requires `containers`, a `durable_objects` binding,
100
+ and a migration for the `Sandbox` class.
101
+ - `getSandbox()` returns a Durable Object-backed sandbox whose container starts
102
+ lazily and can execute shell commands, manage files, expose ports, and be
103
+ destroyed after use.
104
+
105
+ ## Fit Matrix
106
+
107
+ | Need | Preferred primitive | Why |
108
+ | --- | --- | --- |
109
+ | Screenshot, PDF, markdown, rendered page inspection, bounded crawl | Browser Run Quick Actions | Stateless, Cloudflare-hosted, no Worker code loading required |
110
+ | Paid browser agent task up to 20 minutes on Creator or 1 hour on Pro | Cloudflare Workflow plus Browser Run Session | Workflow owns durable job execution/retry; Browser Session provides browser-native control with explicit close/finally behavior, 10-minute idle closure, and saved JSON artifacts |
111
+ | Shell command or test execution | Sandbox SDK | Real isolated container/process/filesystem boundary; Creator uses `standard-1`, Pro uses `standard-2` |
112
+ | Agent-authored JavaScript tool code | Dynamic Workers `load(code)` | Runtime-loaded Worker module with controlled bindings and egress |
113
+ | Reused user-defined HTTP tool/app code | Dynamic Workers `get(id, callback)` | Stable ID can keep the Worker warm and avoid reloading every call |
114
+ | User-defined durable object/reducer with private storage | Durable Object Facets | Supervisor-owned dynamic code plus isolated facet SQLite |
115
+ | Long-running user-defined workflow steps | Dynamic Workflows | Runtime-loaded code with Workflow retry/sleep/event semantics |
116
+ | Product billing, quota, audit, grants, retention, artifact index | D1 plus platform Worker logic | Needs platform-owned authority and queryability, not dynamic user code |
117
+ | Artifact bytes | R2 | Large binary/object storage, not Durable Object storage |
118
+ | Cross-user reporting and dashboards | D1 or Analytics Engine | Cross-object query/reporting plane |
119
+ | Job dispatch and retries for single-step tools | Queues plus DLQ | Simple bounded retry and backpressure path for non-agent long-running jobs |
120
+
121
+ ## vc-tools Invariants
122
+
123
+ - Dynamic Workers must not receive raw Cloudflare account tokens, Stripe
124
+ secrets, Vibecodr grant-signing secrets, D1 global authority, R2 bucket-wide
125
+ authority, or the Browser Run API token.
126
+ - Dynamic Workers, if added, must receive only a purpose-built host proxy with
127
+ explicit inputs, output size limits, egress policy, timeout, plan quota, and
128
+ audit context.
129
+ - Durable Object Facets, if added, must be children of a platform supervisor
130
+ Durable Object. The facet may own facet-local state, but it must not own
131
+ subscription authority, grant validation, global quota, or billing.
132
+ - Cloudflare Workflows are allowed as platform-owned durable execution for
133
+ `browser.agent_task`. Dynamic Workflows, if added later for runtime-loaded
134
+ user code, must persist only user-defined workflow state and step outputs.
135
+ Platform admission, quota reservation, audit, and cancellation must still
136
+ happen before dynamic code starts.
137
+ - The Sandbox SDK Durable Object is not optional ceremony. It is part of
138
+ Cloudflare's current Sandbox architecture and should remain while Sandbox SDK
139
+ is the shell/test execution provider.
140
+ - For the current v1 toolset, using Dynamic Workers to replace Browser Run
141
+ Quick Actions or Sandbox SDK would be a downgrade: Dynamic Workers do not
142
+ provide Chrome sessions and do not provide a shell/container boundary.
143
+ - Browser access should be liberal for public HTTPS targets and strict at trust
144
+ boundaries. Browser Run must not cross into private networks, authenticated
145
+ user accounts, Vibecodr infrastructure, or provider secrets without an
146
+ explicit future grant.
147
+
148
+ ## Adoption Gate
149
+
150
+ Add Dynamic Workers only when at least one of these product capabilities exists:
151
+
152
+ 1. `tool.dynamic_worker.run`: execute a bounded JavaScript/Worker module as a
153
+ hosted tool.
154
+ 2. `tool.dynamic_worker.app`: reuse a stable user-defined Worker by ID.
155
+ 3. `tool.facet.run`: run a user-defined durable reducer/object behind a
156
+ supervisor Durable Object.
157
+ 4. `tool.dynamic_workflow.run`: run user-defined multi-step workflows that need
158
+ retries, sleep, waits, or approvals.
159
+
160
+ Before shipping any of those capabilities:
161
+
162
+ - Add a Worker Loader binding and generated Worker types.
163
+ - Add strict module/source validation and output limits.
164
+ - Disable outbound by default with `globalOutbound: null`.
165
+ - Pass only least-privilege bindings or host proxies.
166
+ - Reserve quota before loading dynamic code.
167
+ - Record audit before and after dynamic code execution.
168
+ - Add cancellation and timeout proof.
169
+ - Add tests proving no raw platform secret, binding, D1, R2, Browser Run, or
170
+ Sandbox authority leaks into the dynamic code.
171
+
172
+ ## Current Conclusion
173
+
174
+ I agree that Cloudflare's dynamic offerings are the right future substrate for
175
+ agent-authored Worker code and user-defined durable logic. I disagree that they
176
+ should replace the current `vc-tools` v1 Browser Run/Sandbox/D1/R2/Queue shape.
177
+
178
+ The best production architecture is:
179
+
180
+ - Keep the current control plane on platform-owned Worker, D1, R2, Queue,
181
+ Workflows, and explicit provider bindings.
182
+ - Keep Browser Run Quick Actions as the default browser lane.
183
+ - Keep Cloudflare Workflows as the durable paid `browser.agent_task` execution
184
+ lane, with Browser Run Sessions as the browser provider inside that Workflow.
185
+ - Keep `browser.crawl_site` in that Quick Actions lane, with plan-owned page and
186
+ depth limits.
187
+ - Keep Queues plus DLQ for stateless browser, sandbox, scheduled QA, and other
188
+ single-step work; do not use a universal Queue fairness delay for interactive
189
+ tools.
190
+ - Keep Sandbox SDK for command/test execution, with the paid user-facing lane
191
+ split by plan: Creator `standard-1`, Pro `standard-2`.
192
+ - Add Dynamic Workers/Facets later as a separate, explicitly named capability
193
+ family for supervised user-defined code, with no ambient platform authority.
194
+
195
+ ## Source Links
196
+
197
+ - Cloudflare Dynamic Workers:
198
+ https://developers.cloudflare.com/dynamic-workers/getting-started/
199
+ - Cloudflare Dynamic Workers API reference:
200
+ https://developers.cloudflare.com/dynamic-workers/api-reference/
201
+ - Cloudflare Dynamic Workers custom limits:
202
+ https://developers.cloudflare.com/dynamic-workers/usage/limits/
203
+ - Cloudflare Durable Object Facets:
204
+ https://developers.cloudflare.com/dynamic-workers/usage/durable-object-facets/
205
+ - Cloudflare Dynamic Workflows:
206
+ https://developers.cloudflare.com/dynamic-workers/usage/dynamic-workflows/
207
+ - Cloudflare Browser Run:
208
+ https://developers.cloudflare.com/browser-run/
209
+ - Cloudflare Sandbox SDK architecture:
210
+ https://developers.cloudflare.com/sandbox/concepts/architecture/
211
+ - Cloudflare Sandbox SDK Wrangler configuration:
212
+ https://developers.cloudflare.com/sandbox/configuration/wrangler/
@@ -0,0 +1,297 @@
1
+ # vc-tools Release Checklist
2
+
3
+ Use this checklist before publishing `@vibecodr/vc-tools`.
4
+
5
+ ## Repository Boundary
6
+
7
+ - `git rev-parse --show-toplevel` prints the `tools/vc-tools` repository root.
8
+ - No files are staged or committed from the parent Vibecodr repository.
9
+ - The package name is `@vibecodr/vc-tools`.
10
+ - The binary name is `vc-tools`.
11
+ - Environment variables use the `VC_TOOLS_*` namespace.
12
+ - Stored credentials use the native credential store unless
13
+ `VC_TOOLS_CREDENTIAL_STORE=file` is explicitly set for tests.
14
+
15
+ ## Required Verification
16
+
17
+ ```powershell
18
+ npm ci
19
+ npm run check
20
+ npm run check:worker
21
+ npm test
22
+ npm run build
23
+ npm run verify:artifact
24
+ npm run verify:goal
25
+ npm run verify:release
26
+ npm run verify
27
+ node dist/bin/vc-tools.js --help
28
+ node dist/bin/vc-tools.js help agent
29
+ node dist/bin/vc-tools.js help computer
30
+ node dist/bin/vc-tools.js help browser
31
+ node dist/bin/vc-tools.js --quiet usage
32
+ node dist/bin/vc-tools.js --json plans
33
+ node dist/bin/vc-tools.js usage
34
+ node dist/bin/vc-tools.js --json limits
35
+ node dist/bin/vc-tools.js --json dashboard usage
36
+ node dist/bin/vc-tools.js --json inspect
37
+ node dist/bin/vc-tools.js --json browser render https://127.0.0.1
38
+ npx wrangler deploy --dry-run --outdir tmp\wrangler-dry-run
39
+ npx wrangler d1 migrations apply vc-tools-db --remote
40
+ VC_TOOLS_RELEASE_CHANNEL=live npm run verify:release
41
+ ```
42
+
43
+ Expected results:
44
+
45
+ - TypeScript exits `0`.
46
+ - Worker type generation and Worker TypeScript checks exit `0`.
47
+ - Tests exit `0`.
48
+ - Build exits `0`.
49
+ - Package artifact verifier exits `0`.
50
+ - Goal coverage verifier exits `0`.
51
+ - Release readiness verifier exits `0` for `VC_TOOLS_RELEASE_CHANNEL=cli-contract`.
52
+ - `VC_TOOLS_RELEASE_CHANNEL=live npm run verify:release` exits `0` only after
53
+ `live-hosted-production` is marked locally verified by fresh production smoke
54
+ evidence. It is expected to fail while that inspection is still
55
+ `hosted-required`.
56
+ - Help identifies `vc-tools`, not `vibecodr`.
57
+ - Help exposes examples, docs/support links, secure credential file/stdin
58
+ inputs, and command-specific help via both `vc-tools help <command>` and
59
+ `<command> --help`.
60
+ - `--quiet` suppresses non-essential human success output while `--json` remains
61
+ stable.
62
+ - `plans` works without auth using local launch packaging fallback.
63
+ - `plans` includes Free, Creator, Pro, overage meters, and launch safety
64
+ policies.
65
+ - `plans` fallback and `/v1/plans` are explicitly non-authoritative for actor
66
+ entitlement; `usage`/`limits` are the account-state surface and are marked
67
+ read-only/not client-mutable.
68
+ - `usage` renders allotted limits, numeric usage, and 0-100% quota bars; `limits`
69
+ returns the same hosted usage state and keeps stable JSON.
70
+ - `dashboard usage` and `dashboard cogs` return hosted dashboard URLs without
71
+ requiring or printing credentials.
72
+ - `inspect` reports one hosted-required check for CLI-contract releases and zero
73
+ hosted-required checks after live production smoke.
74
+ - Unsafe browser URL smoke exits non-zero before any hosted request.
75
+ - The Worker returns health, MCP metadata, and fail-closed auth responses; tests
76
+ keep contract-mode coverage for no-cost route validation.
77
+ - The contract-mode Worker supports MCP `initialize`, `tools/list`, and
78
+ `tools/call` JSON-RPC requests.
79
+ - Hosted dashboard sections render overview, usage, activity, artifacts, grants,
80
+ retention, billing, and internal COGS launch-contract data.
81
+
82
+ ## Hosted Service Production Checks
83
+
84
+ Run these after hosted Worker, D1, R2, Queue, Browser Run, Sandbox,
85
+ `VC_TOOLS_BROWSER_RUN_ACCOUNT_ID`, `VC_TOOLS_BROWSER_RUN_API_TOKEN`, and the
86
+ hosted/Browser/Sandbox account-cap vars plus `VC_TOOLS_CLI_GRANT_PUBLIC_JWKS`
87
+ or the controlled static `VC_TOOLS_TOKEN_SHA256` secret are configured. Also configure
88
+ `VC_TOOLS_INTERNAL_ALERT_TOKEN` through the repo-owned
89
+ `scripts/vc-tools-secrets.ps1` flow; that script stores the managed alert signer
90
+ in WinCred and uploads the same value to `vibecodr-internal-api` as
91
+ `INTERNAL_BINDING_TOKEN_NEXT` so the current internal mesh token is not rotated
92
+ just to enable vc-tools alerting. Keep the `VC_TOOLS_INTERNAL_API_WORKER`
93
+ service binding deployed, confirm internal-api `ALERT_CODES` includes
94
+ `E-VIBECODR-VC-TOOLS-SOFT-CAP`, and confirm internal-api has `NTFY_TOPIC`
95
+ configured if ntfy delivery is expected. vc-tools operator emails are reserved
96
+ for account-wide hosted, Browser Run, and Sandbox capacity pressure; per-user
97
+ quota/usage pressure remains enforced and audit-visible without outbound
98
+ operator email.
99
+ For the public auth paths, also configure parent API Worker secrets
100
+ `CLERK_SECRET_KEY` and `CLI_GRANT_PRIVATE_JWK`, set the parent/hosted grant
101
+ audience to `vibecodr:vc-tools`, and set the hosted Worker
102
+ `VC_TOOLS_CLI_GRANT_PUBLIC_JWKS` to the matching public JWKS. Legacy HMAC grants
103
+ require `CLI_GRANT_LEGACY_HMAC_ENABLED="true"` and
104
+ `VC_TOOLS_CLI_GRANT_LEGACY_HMAC_ENABLED="true"`, are beta/internal-only, and
105
+ should be removed by 2026-06-30 after live ES256 smoke and migration:
106
+
107
+ ```powershell
108
+ $env:VC_TOOLS_API_URL = "https://tools.vibecodr.space"
109
+ vc-tools login
110
+ vc-tools login --credential-file .\clerk-oauth-token.txt
111
+ vc-tools login --credential-file .\vc-tools-api-key.txt
112
+ vc-tools start --client codex
113
+ vc-tools auth diagnose
114
+ vc-tools agent connect --client codex
115
+ vc-tools tools list
116
+ vc-tools browser render https://example.com
117
+ vc-tools browser screenshot https://example.com --format png
118
+ vc-tools browser read https://example.com
119
+ vc-tools browser pdf https://example.com
120
+ vc-tools browser crawl https://example.com/docs --max-pages 5 --max-depth 1
121
+ vc-tools browser ask https://example.com --timeout-ms 1200000 --idle-timeout-ms 600000 --instructions "Inspect the page and save a concise snapshot."
122
+ vc-tools computer run "node --version"
123
+ vc-tools usage
124
+ vc-tools grants list
125
+ vc-tools retention show
126
+ ```
127
+
128
+ Expected hosted guarantees:
129
+
130
+ - Auth secrets are configured as Worker secrets, not committed config.
131
+ - Public human login uses `https://api.vibecodr.space/auth/vc-tools/device/*`;
132
+ the verification URI opens `/settings/vc-tools/approve?vc_tools_code=...`,
133
+ the browser approval response does not contain the grant, and the private
134
+ device code is not printed or persisted.
135
+ - Public automation login accepts generic credential files/stdin, identifies
136
+ Clerk OAuth tokens or scoped Clerk API keys, and exchanges them through
137
+ `https://api.vibecodr.space/auth/cli/exchange`; explicit login paths store
138
+ the durable local credential so short-lived vc-tools grants can refresh.
139
+ - 2026-05-15 live OAuth proof: Clerk PKCE from the production
140
+ `/agent/vibe` metadata completed through the in-app browser, and
141
+ `scripts/smoke-vc-tools-oauth-token.mjs` exchanged the returned Clerk access
142
+ token over stdin. Run `codex-oauth-20260515230549-tgn17r` passed
143
+ `login-oauth-token`, `whoami-oauth-token`, and `usage-oauth-token` with
144
+ `authMode=oauth`, `grantProfile=vc_tools`, scopes
145
+ `["vc-tools:use","vc-tools:*"]`, plan `Pro`, `providerMode=live`,
146
+ `secretPrinted=false`, and temporary config cleanup confirmed.
147
+ - Vibecodr CLI grants include the `vc-tools:use` scope, the requested tool
148
+ scope such as `vc-tools:browser.render_url` or `vc-tools:*`, current plan,
149
+ subject, `grant_profile`, `kid`, `iat`, `nbf`, `exp`, `jti`, and
150
+ `vibecodr:vc-tools` audience; static-token fallback is reserved for
151
+ controlled deployments.
152
+ - D1 migrations `0001_live_schema.sql`, `0002_actor_scope.sql`,
153
+ `0003_quota_reservations.sql`, and
154
+ `0004_sandbox_quota_reservations.sql`, and
155
+ `0005_operator_alert_dedupe.sql`, and
156
+ `0006_scheduled_qa.sql`, and `0007_job_queue_metadata.sql` are applied.
157
+ - Browser/Sandbox calls are quota checked by the API before cost-bearing
158
+ Cloudflare work.
159
+ - Operator kill switches must be known before launch: setting
160
+ `VC_TOOLS_PAUSE_COST_BEARING_JOBS=true` pauses all Browser/Sandbox work,
161
+ `VC_TOOLS_DISABLE_BROWSER_RUN=true` pauses Browser Run Quick Actions and
162
+ crawl, `VC_TOOLS_DISABLE_BROWSER_SESSIONS=true` pauses paid
163
+ `browser.agent_task`, and `VC_TOOLS_DISABLE_SANDBOX=true` pauses Sandbox.
164
+ Each pause returns `503 ops.cost_bearing_paused`, writes
165
+ `tools.cost_bearing_paused`, and avoids D1 job insertion and Queue/Workflow
166
+ dispatch.
167
+ - Crossing hosted, Browser Run, or Sandbox account-wide 70%, 85%, or 95%
168
+ pressure emits a sanitized `E-VIBECODR-VC-TOOLS-SOFT-CAP` operator alert.
169
+ User quota/usage thresholds do not emit operator emails. Alerts flow through
170
+ internal-api email/ntfy fanout; optional
171
+ `VC_TOOLS_OPERATOR_ALERT_WEBHOOK_URLS` and `VC_TOOLS_OPERATOR_NTFY_TOPIC`
172
+ secrets are additive fallback channels. D1 dedupe suppresses repeats in the
173
+ same reset window, and missing notifier bindings are audit-visible.
174
+ - Queue and DLQ backlog are checked by the scheduled Worker via
175
+ `JOB_QUEUE.metrics()` and `JOB_DLQ.metrics()` and emit sanitized
176
+ account-scoped `queue.backlog_messages` / `queue.dlq_messages` operator
177
+ alerts. Tune `VC_TOOLS_QUEUE_BACKLOG_SOFT_CAP`,
178
+ `VC_TOOLS_QUEUE_BACKLOG_HARD_CAP`, `VC_TOOLS_DLQ_MESSAGES_SOFT_CAP`, and
179
+ `VC_TOOLS_DLQ_MESSAGES_HARD_CAP` only as platform-level thresholds; do not
180
+ fan out per-user quota/usage alerts.
181
+ - Account-wide active artifact storage is checked by summing active,
182
+ non-expired artifact bytes in D1 during the scheduled Worker pass and emits a
183
+ sanitized account-scoped `artifact.storage_gb` operator alert. Tune
184
+ `VC_TOOLS_ARTIFACT_STORAGE_ACCOUNT_SOFT_GB` and
185
+ `VC_TOOLS_ARTIFACT_STORAGE_ACCOUNT_HARD_GB` as platform-level thresholds,
186
+ separate from the customer plan allotment SSOT.
187
+ - Expired-artifact cleanup failures emit the account-scoped
188
+ `E-VIBECODR-VC-TOOLS-RETENTION-CLEANUP-FAILED` /
189
+ `retention.cleanup_failed` operator alert. Keep this code in the parent
190
+ internal-api `ALERT_CODES` allowlist alongside
191
+ `E-VIBECODR-VC-TOOLS-SOFT-CAP`; internal-api filters all user-scoped
192
+ `source=vc-tools` payloads before email/ntfy fanout.
193
+ - Browser Run and Sandbox execution failure/timeout rates are checked from
194
+ recent terminal job rows during the scheduled Worker pass and emit the
195
+ account-scoped `E-VIBECODR-VC-TOOLS-EXECUTION-HEALTH-DEGRADED` alert with
196
+ `browser.failure_rate`, `browser.timeout_rate`, `sandbox.failure_rate`, or
197
+ `sandbox.timeout_rate`. Tune
198
+ `VC_TOOLS_EXECUTION_HEALTH_WINDOW_MINUTES`,
199
+ `VC_TOOLS_EXECUTION_HEALTH_MIN_TERMINAL_JOBS`,
200
+ `VC_TOOLS_FAILURE_RATE_ALERT_PERCENT`, and
201
+ `VC_TOOLS_TIMEOUT_RATE_ALERT_PERCENT` as platform-level thresholds.
202
+ - Unexpected hosted Worker HTTP 500s emit the account-scoped
203
+ `E-VIBECODR-VC-TOOLS-HOSTED-WORKER-5XX` /
204
+ `hosted.worker_5xx` operator alert through the same fanout path. Keep this
205
+ code in parent internal-api `ALERT_CODES`; payloads must stay sanitized to
206
+ method, path pattern, status, and redacted error text only.
207
+ - Hosted API/MCP auth failures write anonymous `auth.failed` audit rows. The
208
+ scheduled Worker aggregates them and emits the account-scoped
209
+ `E-VIBECODR-VC-TOOLS-AUTH-FAILURE-ANOMALY` /
210
+ `auth.failure_anomaly` operator alert when
211
+ `VC_TOOLS_AUTH_FAILURE_ALERT_THRESHOLD` is crossed inside
212
+ `VC_TOOLS_AUTH_FAILURE_WINDOW_MINUTES`. Keep this code in parent internal-api
213
+ `ALERT_CODES`; payloads must stay token/query/body/actor-free.
214
+ - Cloudflare spend anomaly checks are internal account-level early warnings,
215
+ not user notifications and not invoice-backed billing truth. The scheduled
216
+ Worker estimates current-month raw cost from vc-tools COGS meters and
217
+ env-configured assumptions, then emits the account-scoped
218
+ `E-VIBECODR-VC-TOOLS-CLOUDFLARE-SPEND-ANOMALY` /
219
+ `cloudflare.estimated_spend_usd` alert when
220
+ `VC_TOOLS_CLOUDFLARE_SPEND_SOFT_USD` is crossed. Keep this code in parent
221
+ internal-api `ALERT_CODES`, tune
222
+ `VC_TOOLS_CLOUDFLARE_SPEND_SOFT_USD` and
223
+ `VC_TOOLS_CLOUDFLARE_SPEND_HARD_USD` only as platform thresholds, and compare
224
+ any alert with Cloudflare Billable Usage / Budget Alerts before raising
225
+ capacity or changing pricing.
226
+ - Unsafe URL and quota denials write analytics-only D1 audit metrics as
227
+ `tools.denied_unsafe_url` and `tools.denied_quota`. These are intentionally
228
+ per-actor COGS/ops signals and must not be promoted into email/ntfy fanout.
229
+ - `/dashboard/cogs` renders internal-only cost pressure by actor, plan, surface,
230
+ warning threshold, and env-configured cost assumptions.
231
+ - Jobs, artifacts, usage, retention, and audit rows are scoped to the
232
+ authenticated actor.
233
+ - All tool calls are logged by the hosted service without secrets before
234
+ Queue/Workflow dispatch.
235
+ - Stateless browser jobs complete through Browser Run Quick Actions and produce
236
+ R2 artifacts with metered browser time; paid browser agent jobs complete
237
+ through Workflow-owned Browser Sessions with closure metadata.
238
+ - 2026-05-17 Workflow migration smoke: deployed `vc-tools-api`
239
+ `aeeaab85-93ab-4219-acf7-fffbe2be834e` at 100%, then completed synthetic
240
+ Creator `browser.agent_task`
241
+ `job_0e8b0cc2-9a3c-4791-8e77-ce0da1191a3c` with
242
+ `queue_delay_seconds=0`, `reserved_browser_seconds=120`, D1 audit event
243
+ `tools.workflow_started`, and R2 artifact
244
+ `art_466de507-1432-41eb-9253-c9f79aac8148` downloaded through
245
+ `vc-tools proof save`.
246
+ - Scheduled QA create/list/update/delete works for a paid actor; explicit
247
+ `--run-now` create/resume enqueues immediately, and due configs are enqueued
248
+ by the Worker cron into the same D1 jobs and Queue path as manual Browser
249
+ Quick Actions, with run/readback evidence and no cookies, credentials, or
250
+ private targets accepted. Monthly cap denial leaves `lastJobId=null` and a
251
+ skipped run row with `quota.scheduled_qa_monthly_runs_exceeded`. Natural
252
+ cron-tick readback should be captured at a real deployed trigger time because
253
+ Cloudflare's fire-now cron route is local Wrangler-dev-only.
254
+ - Creator browser agent tasks complete through the `BROWSER` Browser Session
255
+ binding at up to 20 minutes; Pro browser agent tasks complete through the
256
+ same binding at up to 1 hour. Both close in `finally`, record closure
257
+ metadata/audit, and produce R2 artifacts.
258
+ - Browser crawl jobs complete through Browser Run `/crawl`, produce R2 crawl
259
+ artifacts, and write crawl-page usage.
260
+ - Browser jobs reject unsafe initial URLs, DNS records without A/AAAA answers,
261
+ unsafe redirects/subrequests, and unsafe final URLs.
262
+ - Creator sandbox jobs complete through Sandbox SDK `standard-1`; Pro sandbox
263
+ jobs complete through the `ProSandbox` `standard-2` lane; Creator is capped
264
+ at 10 minutes, Pro at 30 minutes, both paid plans cap active sandbox tasks at
265
+ 2 per user, and both produce R2 artifacts.
266
+ - Queue failures are bounded by the `vc-tools-jobs` consumer config:
267
+ `max_batch_size=1`, `max_retries=3`, and
268
+ `dead_letter_queue="vc-tools-jobs-dlq"`. A failed job message may rethrow only
269
+ inside that retry window so Cloudflare can move it to the DLQ; retry
270
+ deliveries of an already-failed job must not re-run Browser, Sandbox, R2, or
271
+ other cost-bearing provider work.
272
+ - DLQ replay is operator-controlled, not automatic. Before replaying a message
273
+ from `vc-tools-jobs-dlq`, fix the root cause, inspect and redact the message
274
+ body, correlate the job id and actor id against D1 `jobs` and `audit_events`,
275
+ confirm the payload is still a valid `ToolJobMessage`, and re-send only the
276
+ intended message body into `vc-tools-jobs` with a fresh audit note. Do not
277
+ attach a broad automatic DLQ consumer or replay unknown payloads.
278
+ - `/v1/usage` reflects browser and sandbox job usage after the smoke.
279
+ - Sandbox network remains disabled unless a grant and explicit request allow it.
280
+ - Browser recordings remain off by default.
281
+ - Authenticated browsing is not available to Creator or ordinary users by default.
282
+
283
+ ## Publish Readiness
284
+
285
+ - `npm pack --dry-run` shows only intended package files.
286
+ - The public npm artifact contains only `dist`, `README.md`, `LICENSE`, and
287
+ `package.json`; repository-maintainer docs, hosted Worker source, migrations,
288
+ deployment config, tests, and scripts stay out of the package.
289
+ - Runtime `dependencies` contain only CLI-installed dependencies. Cloudflare
290
+ platform primitive packages stay in repository development dependencies for
291
+ hosted Worker verification and deployment.
292
+ - No token-like string appears in `dist`, docs, test fixtures, or package
293
+ metadata.
294
+ - `docs/API-CONTRACT.md` matches the hosted service route contract.
295
+ - `docs/VALIDATION-MATRIX.md` maps every goal-file command and safety gate to
296
+ implementation evidence.
297
+ - Release notes mention any hosted-service dependency that is degraded or paused.