dotdo 0.0.2 → 0.1.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.
- package/cli/README.md +238 -0
- package/cli/agent.ts +72 -0
- package/cli/bin.js +44 -0
- package/cli/bin.ts +38 -0
- package/cli/build.ts +157 -0
- package/cli/commands/auth/login.ts +14 -0
- package/cli/commands/auth/logout.ts +6 -0
- package/cli/commands/auth/whoami.ts +16 -0
- package/cli/commands/deploy-multi.ts +245 -0
- package/cli/commands/dev/deploy.ts +100 -0
- package/cli/commands/dev/dev.ts +95 -0
- package/cli/commands/dev/logs.ts +91 -0
- package/cli/commands/dev-local.ts +88 -0
- package/cli/commands/do-ops.ts +314 -0
- package/cli/commands/index.ts +100 -0
- package/cli/commands/init.ts +247 -0
- package/cli/commands/introspect/emitter.ts +315 -0
- package/cli/commands/introspect/index.ts +193 -0
- package/cli/commands/link.ts +598 -0
- package/cli/commands/snippets.ts +415 -0
- package/cli/commands/tunnel.ts +239 -0
- package/cli/device-auth.ts +289 -0
- package/cli/fallback.ts +12 -0
- package/cli/index.ts +121 -0
- package/cli/main.ts +246 -0
- package/cli/mcp-stdio.ts +790 -0
- package/cli/package.json +62 -0
- package/cli/runtime/do-registry.ts +193 -0
- package/cli/runtime/embedded-db.ts +344 -0
- package/cli/runtime/index.ts +9 -0
- package/cli/runtime/miniflare-adapter.ts +162 -0
- package/cli/sandbox.ts +82 -0
- package/cli/src/args.ts +174 -0
- package/cli/src/auth.ts +55 -0
- package/cli/src/commands/call.ts +84 -0
- package/cli/src/commands/charge.ts +96 -0
- package/cli/src/commands/config.ts +115 -0
- package/cli/src/commands/email.ts +112 -0
- package/cli/src/commands/llm.ts +115 -0
- package/cli/src/commands/queue.ts +134 -0
- package/cli/src/commands/text.ts +86 -0
- package/cli/src/config.ts +185 -0
- package/cli/src/output.ts +246 -0
- package/cli/src/rpc.ts +192 -0
- package/cli/utils/config.ts +282 -0
- package/cli/utils/detect.ts +73 -0
- package/cli/utils/index.ts +15 -0
- package/cli/utils/logger.ts +232 -0
- package/dist/ai/template-literals.js +2 -2
- package/dist/ai/template-literals.js.map +1 -1
- package/dist/api/middleware/auth.js +3 -2
- package/dist/api/middleware/auth.js.map +1 -1
- package/dist/db/iceberg/inverted-index.js +1 -1
- package/dist/db/iceberg/inverted-index.js.map +1 -1
- package/dist/db/iceberg/puffin.js.map +1 -1
- package/dist/db/json-indexes.js.map +1 -1
- package/dist/db/objects.js.map +1 -1
- package/dist/db/primitives/dag-scheduler/index.js +1 -1
- package/dist/db/primitives/dag-scheduler/index.js.map +1 -1
- package/dist/db/primitives/observability.js.map +1 -1
- package/dist/db/primitives/schema-evolution.js.map +1 -1
- package/dist/db/primitives/temporal-store.js.map +1 -1
- package/dist/db/primitives/typed-column-store.js.map +1 -1
- package/dist/db/primitives/utils/duration.js.map +1 -1
- package/dist/db/primitives/utils/murmur3.js +12 -14
- package/dist/db/primitives/utils/murmur3.js.map +1 -1
- package/dist/db/primitives/window-manager.js.map +1 -1
- package/dist/db/stores.js.map +1 -1
- package/dist/db/things.js.map +1 -1
- package/dist/lib/DODispatcher.js +2 -2
- package/dist/lib/DODispatcher.js.map +1 -1
- package/dist/lib/auto-wiring.js.map +1 -1
- package/dist/lib/channels/email.js +1 -1
- package/dist/lib/channels/email.js.map +1 -1
- package/dist/lib/channels/slack-blockkit.js.map +1 -1
- package/dist/lib/cloudflare/ai.js +1 -1
- package/dist/lib/cloudflare/ai.js.map +1 -1
- package/dist/lib/cloudflare/kv.js +1 -1
- package/dist/lib/cloudflare/kv.js.map +1 -1
- package/dist/lib/cloudflare/r2.js +3 -3
- package/dist/lib/cloudflare/r2.js.map +1 -1
- package/dist/lib/cloudflare/vectorize.js.map +1 -1
- package/dist/lib/cloudflare/workflows.js.map +1 -1
- package/dist/lib/executors/AgenticFunctionExecutor.js.map +1 -1
- package/dist/lib/executors/CodeFunctionExecutor.js.map +1 -1
- package/dist/lib/executors/GenerativeFunctionExecutor.js.map +1 -1
- package/dist/lib/executors/HumanFunctionExecutor.js +1 -1
- package/dist/lib/executors/HumanFunctionExecutor.js.map +1 -1
- package/dist/lib/executors/ParallelStepExecutor.js.map +1 -1
- package/dist/lib/experiments.js.map +1 -1
- package/dist/lib/flags/store.js.map +1 -1
- package/dist/lib/functions/FunctionComposition.js.map +1 -1
- package/dist/lib/functions/FunctionMiddleware.js.map +1 -1
- package/dist/lib/functions/FunctionRegistry.js.map +1 -1
- package/dist/lib/humans/templates.js.map +1 -1
- package/dist/lib/identity.js +2 -2
- package/dist/lib/identity.js.map +1 -1
- package/dist/lib/logging/index.js.map +1 -1
- package/dist/lib/mixins/bash.js +1 -73
- package/dist/lib/mixins/bash.js.map +1 -1
- package/dist/lib/mixins/git.js +0 -5
- package/dist/lib/mixins/git.js.map +1 -1
- package/dist/lib/mixins/npm.js.map +1 -1
- package/dist/lib/noun-id.js.map +1 -1
- package/dist/lib/rate-limit/sliding-window.js.map +1 -1
- package/dist/lib/rpc/bindings.js.map +1 -1
- package/dist/lib/safe-stringify.js.map +1 -1
- package/dist/lib/sandbox/miniflare-sandbox.js.map +1 -1
- package/dist/lib/sqids.js.map +1 -1
- package/dist/lib/sql/adapters/node-sql-parser.js.map +1 -1
- package/dist/lib/sql/adapters/pgsql-parser.js +19 -18
- package/dist/lib/sql/adapters/pgsql-parser.js.map +1 -1
- package/dist/metrics/hunch.js.map +1 -1
- package/dist/objects/API.js +1 -1
- package/dist/objects/API.js.map +1 -1
- package/dist/objects/Agent.js.map +1 -1
- package/dist/objects/Browser.js.map +1 -1
- package/dist/objects/CLI.js.map +1 -1
- package/dist/objects/DOBase.js.map +1 -1
- package/dist/objects/DOCache.js +153 -0
- package/dist/objects/DOCache.js.map +1 -0
- package/dist/objects/DOFull.js.map +1 -1
- package/dist/objects/Entity.js.map +1 -1
- package/dist/objects/Human.js.map +1 -1
- package/dist/objects/IcebergMetadataDO.js.map +1 -1
- package/dist/objects/IntegrationsDO.js.map +1 -1
- package/dist/objects/ObservabilityBroadcaster.js.map +1 -1
- package/dist/objects/Package.js.map +1 -1
- package/dist/objects/Product.js +1 -1
- package/dist/objects/Product.js.map +1 -1
- package/dist/objects/SaaS.js.map +1 -1
- package/dist/objects/SandboxDO.js.map +1 -1
- package/dist/objects/Service.js.map +1 -1
- package/dist/objects/VectorShardDO.js +9 -7
- package/dist/objects/VectorShardDO.js.map +1 -1
- package/dist/objects/Workflow.js.map +1 -1
- package/dist/objects/WorkflowFactory.js.map +1 -1
- package/dist/objects/WorkflowRuntime.js.map +1 -1
- package/dist/objects/lifecycle/Branch.js.map +1 -1
- package/dist/objects/lifecycle/Clone.js +1 -1
- package/dist/objects/lifecycle/Clone.js.map +1 -1
- package/dist/objects/lifecycle/Compact.js.map +1 -1
- package/dist/objects/lifecycle/Shard.js.map +1 -1
- package/dist/objects/persistence/checkpoint-manager.js.map +1 -1
- package/dist/objects/persistence/migration-runner.js.map +1 -1
- package/dist/objects/persistence/replication-manager.js +2 -2
- package/dist/objects/persistence/replication-manager.js.map +1 -1
- package/dist/objects/persistence/tiered-storage-manager.js.map +1 -1
- package/dist/objects/persistence/wal-manager.js.map +1 -1
- package/dist/objects/transport/auth-layer.js.map +1 -1
- package/dist/objects/transport/chain.js.map +1 -1
- package/dist/objects/transport/mcp-server.js +7 -6
- package/dist/objects/transport/mcp-server.js.map +1 -1
- package/dist/objects/transport/rest-autowire.js +3 -2
- package/dist/objects/transport/rest-autowire.js.map +1 -1
- package/dist/objects/transport/rest-router.js.map +1 -1
- package/dist/objects/transport/rpc-server.js +18 -15
- package/dist/objects/transport/rpc-server.js.map +1 -1
- package/dist/objects/transport/shared.js +2 -1
- package/dist/objects/transport/shared.js.map +1 -1
- package/dist/snippets/artifacts-ingest.js.map +1 -1
- package/dist/snippets/artifacts-serve.js.map +1 -1
- package/dist/snippets/search.js.map +1 -1
- package/dist/workflows/ScheduleManager.js.map +1 -1
- package/dist/workflows/StepResultStorage.js.map +1 -1
- package/dist/workflows/WaitForEventManager.js.map +1 -1
- package/dist/workflows/compat/backends/cloudflare-workflows.js.map +1 -1
- package/dist/workflows/compat/inngest/index.js.map +1 -1
- package/dist/workflows/compat/qstash/index.js.map +1 -1
- package/dist/workflows/compat/temporal/client.js.map +1 -1
- package/dist/workflows/compat/temporal/index.js.map +1 -1
- package/dist/workflows/compat/trigger/index.js.map +1 -1
- package/dist/workflows/compat/utils/index.js.map +1 -1
- package/dist/workflows/context/correlation.js +2 -2
- package/dist/workflows/context/correlation.js.map +1 -1
- package/dist/workflows/context/experiment.js +1 -1
- package/dist/workflows/context/experiment.js.map +1 -1
- package/dist/workflows/context/flag.js +1 -1
- package/dist/workflows/context/flag.js.map +1 -1
- package/dist/workflows/context/measure.js +1 -1
- package/dist/workflows/context/measure.js.map +1 -1
- package/dist/workflows/context/rate-limit.js.map +1 -1
- package/dist/workflows/data/entity-events/entity-events.js.map +1 -1
- package/dist/workflows/data/experiment/index.js.map +1 -1
- package/dist/workflows/data/goal/context.js +1 -1
- package/dist/workflows/data/goal/context.js.map +1 -1
- package/dist/workflows/data/measure/index.js +1 -1
- package/dist/workflows/data/measure/index.js.map +1 -1
- package/dist/workflows/data/stream/index.js +10 -76
- package/dist/workflows/data/stream/index.js.map +1 -1
- package/dist/workflows/data/track/context.js.map +1 -1
- package/dist/workflows/data/view/context.js.map +1 -1
- package/dist/workflows/domain.js.map +1 -1
- package/dist/workflows/flags.js +1 -1
- package/dist/workflows/flags.js.map +1 -1
- package/dist/workflows/hash.js.map +1 -1
- package/dist/workflows/on.js +1 -1
- package/dist/workflows/on.js.map +1 -1
- package/dist/workflows/schedule-builder.js.map +1 -1
- package/dist/workflows/visibility/index.js +0 -2
- package/dist/workflows/visibility/index.js.map +1 -1
- package/dist/workflows/visibility/query-parser.js.map +1 -1
- package/package.json +18 -3
- package/dist/api/analytics/router.js +0 -601
- package/dist/api/analytics/router.js.map +0 -1
- package/dist/api/index.js +0 -158
- package/dist/api/index.js.map +0 -1
- package/dist/api/middleware/error-handling.js +0 -176
- package/dist/api/middleware/error-handling.js.map +0 -1
- package/dist/api/middleware/request-id.js +0 -21
- package/dist/api/middleware/request-id.js.map +0 -1
- package/dist/api/pages.js +0 -1180
- package/dist/api/pages.js.map +0 -1
- package/dist/api/routes/api.js +0 -612
- package/dist/api/routes/api.js.map +0 -1
- package/dist/api/routes/browsers.js +0 -471
- package/dist/api/routes/browsers.js.map +0 -1
- package/dist/api/routes/do.js +0 -188
- package/dist/api/routes/do.js.map +0 -1
- package/dist/api/routes/mcp.js +0 -459
- package/dist/api/routes/mcp.js.map +0 -1
- package/dist/api/routes/obs.js +0 -445
- package/dist/api/routes/obs.js.map +0 -1
- package/dist/api/routes/openapi.js +0 -794
- package/dist/api/routes/openapi.js.map +0 -1
- package/dist/api/routes/rpc.js +0 -1103
- package/dist/api/routes/rpc.js.map +0 -1
- package/dist/api/routes/sandboxes.js +0 -389
- package/dist/api/routes/sandboxes.js.map +0 -1
- package/dist/api/test-do.js +0 -38
- package/dist/api/test-do.js.map +0 -1
- package/dist/api/types.js +0 -11
- package/dist/api/types.js.map +0 -1
- package/dist/cli/bin.js +0 -2
- package/dist/cli/main.js +0 -52342
- package/dist/do/bash.js +0 -35
- package/dist/do/bash.js.map +0 -1
- package/dist/do/fs.js +0 -25
- package/dist/do/fs.js.map +0 -1
- package/dist/do/full.js +0 -61
- package/dist/do/full.js.map +0 -1
- package/dist/do/git.js +0 -28
- package/dist/do/git.js.map +0 -1
- package/dist/do/index.js +0 -52
- package/dist/do/index.js.map +0 -1
- package/dist/lib/agent/tools/bash.js +0 -336
- package/dist/lib/agent/tools/bash.js.map +0 -1
- package/dist/lib/agent/tools/edit.js +0 -157
- package/dist/lib/agent/tools/edit.js.map +0 -1
- package/dist/lib/agent/tools/glob.js +0 -137
- package/dist/lib/agent/tools/glob.js.map +0 -1
- package/dist/lib/agent/tools/grep.js +0 -315
- package/dist/lib/agent/tools/grep.js.map +0 -1
- package/dist/lib/agent/tools/index.js +0 -71
- package/dist/lib/agent/tools/index.js.map +0 -1
- package/dist/lib/agent/tools/read.js +0 -212
- package/dist/lib/agent/tools/read.js.map +0 -1
- package/dist/lib/agent/tools/types.js +0 -197
- package/dist/lib/agent/tools/types.js.map +0 -1
- package/dist/lib/agent/tools/write.js +0 -159
- package/dist/lib/agent/tools/write.js.map +0 -1
- package/dist/lib/mixins/index.js +0 -29
- package/dist/lib/mixins/index.js.map +0 -1
- package/dist/primitives/bashx/src/ast/analyze.js +0 -1472
- package/dist/primitives/bashx/src/ast/analyze.js.map +0 -1
- package/dist/primitives/bashx/src/ast/parser.js +0 -1488
- package/dist/primitives/bashx/src/ast/parser.js.map +0 -1
- package/dist/primitives/bashx/src/do/commands/crypto.js +0 -1954
- package/dist/primitives/bashx/src/do/commands/crypto.js.map +0 -1
- package/dist/primitives/bashx/src/do/commands/data-processing.js +0 -1812
- package/dist/primitives/bashx/src/do/commands/data-processing.js.map +0 -1
- package/dist/primitives/bashx/src/do/commands/extended-utils.js +0 -804
- package/dist/primitives/bashx/src/do/commands/extended-utils.js.map +0 -1
- package/dist/primitives/bashx/src/do/commands/math-control.js +0 -1122
- package/dist/primitives/bashx/src/do/commands/math-control.js.map +0 -1
- package/dist/primitives/bashx/src/do/commands/posix-utils.js +0 -1015
- package/dist/primitives/bashx/src/do/commands/posix-utils.js.map +0 -1
- package/dist/primitives/bashx/src/do/commands/system-utils.js +0 -687
- package/dist/primitives/bashx/src/do/commands/system-utils.js.map +0 -1
- package/dist/primitives/bashx/src/do/commands/test-command.js +0 -523
- package/dist/primitives/bashx/src/do/commands/test-command.js.map +0 -1
- package/dist/primitives/bashx/src/do/commands/text-processing.js +0 -1550
- package/dist/primitives/bashx/src/do/commands/text-processing.js.map +0 -1
- package/dist/primitives/bashx/src/do/container-executor.js +0 -429
- package/dist/primitives/bashx/src/do/container-executor.js.map +0 -1
- package/dist/primitives/bashx/src/do/index.js +0 -668
- package/dist/primitives/bashx/src/do/index.js.map +0 -1
- package/dist/primitives/bashx/src/do/tiered-executor.js +0 -2647
- package/dist/primitives/bashx/src/do/tiered-executor.js.map +0 -1
- package/dist/primitives/bashx/src/do/worker.js +0 -352
- package/dist/primitives/bashx/src/do/worker.js.map +0 -1
- package/dist/primitives/bashx/src/types.js +0 -10
- package/dist/primitives/bashx/src/types.js.map +0 -1
- package/dist/primitives/fsx/core/backend.js +0 -480
- package/dist/primitives/fsx/core/backend.js.map +0 -1
- package/dist/primitives/fsx/core/constants.js +0 -140
- package/dist/primitives/fsx/core/constants.js.map +0 -1
- package/dist/primitives/fsx/core/fsx.js +0 -1184
- package/dist/primitives/fsx/core/fsx.js.map +0 -1
- package/dist/primitives/fsx/core/glob/glob.js +0 -438
- package/dist/primitives/fsx/core/glob/glob.js.map +0 -1
- package/dist/primitives/fsx/core/glob/index.js +0 -8
- package/dist/primitives/fsx/core/glob/index.js.map +0 -1
- package/dist/primitives/fsx/core/glob/match.js +0 -392
- package/dist/primitives/fsx/core/glob/match.js.map +0 -1
- package/dist/primitives/fsx/core/types.js +0 -307
- package/dist/primitives/fsx/core/types.js.map +0 -1
- package/dist/sdk/capnweb-compat.js +0 -42
- package/dist/sdk/capnweb-compat.js.map +0 -1
- package/dist/sdk/client.js +0 -20
- package/dist/sdk/client.js.map +0 -1
- package/dist/sdk/index.js +0 -17
- package/dist/sdk/index.js.map +0 -1
package/cli/README.md
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# dotdo CLI
|
|
2
|
+
|
|
3
|
+
Self-contained CLI for Durable Objects development. Single binary that includes the full DO runtime for local development.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
### Quick Install (Recommended)
|
|
8
|
+
|
|
9
|
+
Download the pre-built binary for your platform:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# macOS (Apple Silicon)
|
|
13
|
+
curl -fsSL https://dotdo.dev/cli/dotdo-darwin-arm64 -o /usr/local/bin/dotdo
|
|
14
|
+
chmod +x /usr/local/bin/dotdo
|
|
15
|
+
|
|
16
|
+
# macOS (Intel)
|
|
17
|
+
curl -fsSL https://dotdo.dev/cli/dotdo-darwin-x64 -o /usr/local/bin/dotdo
|
|
18
|
+
chmod +x /usr/local/bin/dotdo
|
|
19
|
+
|
|
20
|
+
# Linux (x64)
|
|
21
|
+
curl -fsSL https://dotdo.dev/cli/dotdo-linux-x64 -o /usr/local/bin/dotdo
|
|
22
|
+
chmod +x /usr/local/bin/dotdo
|
|
23
|
+
|
|
24
|
+
# Linux (ARM)
|
|
25
|
+
curl -fsSL https://dotdo.dev/cli/dotdo-linux-arm64 -o /usr/local/bin/dotdo
|
|
26
|
+
chmod +x /usr/local/bin/dotdo
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Build from Source
|
|
30
|
+
|
|
31
|
+
Requires [Bun](https://bun.sh) >= 1.1.0:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
cd cli
|
|
35
|
+
bun install
|
|
36
|
+
bun run build:local
|
|
37
|
+
./dotdo --help
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Build for all platforms:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
bun run build:all
|
|
44
|
+
# Outputs to cli/dist/
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Usage
|
|
48
|
+
|
|
49
|
+
### Development
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Start local development server
|
|
53
|
+
dotdo dev
|
|
54
|
+
|
|
55
|
+
# Custom port
|
|
56
|
+
dotdo dev --port 3000
|
|
57
|
+
|
|
58
|
+
# With Cloudflare Tunnel (public URL)
|
|
59
|
+
dotdo dev --tunnel
|
|
60
|
+
|
|
61
|
+
# Without state persistence
|
|
62
|
+
dotdo dev --no-persist
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Durable Object Operations
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# List all DO instances
|
|
69
|
+
dotdo do list
|
|
70
|
+
|
|
71
|
+
# Show DO state
|
|
72
|
+
dotdo do show <id>
|
|
73
|
+
|
|
74
|
+
# Show with storage data
|
|
75
|
+
dotdo do show <id> --storage
|
|
76
|
+
|
|
77
|
+
# Create snapshot
|
|
78
|
+
dotdo do save <id>
|
|
79
|
+
dotdo do save <id> --label "before-migration"
|
|
80
|
+
|
|
81
|
+
# List snapshots
|
|
82
|
+
dotdo do snapshots <id>
|
|
83
|
+
|
|
84
|
+
# Restore from snapshot
|
|
85
|
+
dotdo do restore <id> <snapshot-id> --force
|
|
86
|
+
|
|
87
|
+
# Clone DO
|
|
88
|
+
dotdo do clone <source-id> <target-id>
|
|
89
|
+
|
|
90
|
+
# Delete DO
|
|
91
|
+
dotdo do delete <id> --force
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Deployment
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Deploy to Cloudflare Workers (default)
|
|
98
|
+
dotdo deploy
|
|
99
|
+
|
|
100
|
+
# Deploy to Vercel
|
|
101
|
+
dotdo deploy --target vercel
|
|
102
|
+
|
|
103
|
+
# Deploy to Fly.io
|
|
104
|
+
dotdo deploy --target fly
|
|
105
|
+
|
|
106
|
+
# Deploy to all configured targets
|
|
107
|
+
dotdo deploy --all
|
|
108
|
+
|
|
109
|
+
# Dry run
|
|
110
|
+
dotdo deploy --dry-run
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Tunnel
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Start tunnel only (without dev server)
|
|
117
|
+
dotdo tunnel
|
|
118
|
+
|
|
119
|
+
# Custom port
|
|
120
|
+
dotdo tunnel --port 3000
|
|
121
|
+
|
|
122
|
+
# Named tunnel (requires CF auth)
|
|
123
|
+
dotdo tunnel --name myapp
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Other Commands
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# Initialize new project
|
|
130
|
+
dotdo init
|
|
131
|
+
|
|
132
|
+
# Build project
|
|
133
|
+
dotdo build
|
|
134
|
+
|
|
135
|
+
# Stream production logs
|
|
136
|
+
dotdo logs
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Configuration
|
|
140
|
+
|
|
141
|
+
The CLI reads configuration from multiple sources (in order of priority):
|
|
142
|
+
|
|
143
|
+
1. Environment variables
|
|
144
|
+
2. `dotdo.config.ts`
|
|
145
|
+
3. `package.json` `dotdo` field
|
|
146
|
+
4. `wrangler.toml` / `wrangler.jsonc`
|
|
147
|
+
|
|
148
|
+
### dotdo.config.ts
|
|
149
|
+
|
|
150
|
+
```typescript
|
|
151
|
+
import type { DotdoConfig } from 'dotdo/cli'
|
|
152
|
+
|
|
153
|
+
export default {
|
|
154
|
+
// Project settings
|
|
155
|
+
name: 'my-app',
|
|
156
|
+
entryPoint: 'index.ts',
|
|
157
|
+
port: 8787,
|
|
158
|
+
|
|
159
|
+
// Cloudflare settings
|
|
160
|
+
compatibilityDate: '2024-01-01',
|
|
161
|
+
compatibilityFlags: ['nodejs_compat'],
|
|
162
|
+
|
|
163
|
+
// Persistence
|
|
164
|
+
persist: true, // or path: '.dotdo/data'
|
|
165
|
+
|
|
166
|
+
// Deploy targets
|
|
167
|
+
deploy: {
|
|
168
|
+
cloudflare: true,
|
|
169
|
+
vercel: false,
|
|
170
|
+
fly: false,
|
|
171
|
+
},
|
|
172
|
+
} satisfies DotdoConfig
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Environment Variables
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
DOTDO_PORT=8787
|
|
179
|
+
DOTDO_HOST=localhost
|
|
180
|
+
CLOUDFLARE_ACCOUNT_ID=...
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Directory Structure
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
cli/
|
|
187
|
+
├── main.ts # Entry point
|
|
188
|
+
├── build.ts # Build script
|
|
189
|
+
├── package.json # Dependencies
|
|
190
|
+
├── commands/
|
|
191
|
+
│ ├── dev-local.ts # dotdo dev
|
|
192
|
+
│ ├── do-ops.ts # dotdo do:*
|
|
193
|
+
│ ├── tunnel.ts # dotdo tunnel
|
|
194
|
+
│ └── deploy-multi.ts # dotdo deploy
|
|
195
|
+
├── runtime/
|
|
196
|
+
│ ├── miniflare-adapter.ts
|
|
197
|
+
│ ├── do-registry.ts
|
|
198
|
+
│ └── embedded-db.ts
|
|
199
|
+
└── utils/
|
|
200
|
+
├── config.ts
|
|
201
|
+
└── logger.ts
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Requirements
|
|
205
|
+
|
|
206
|
+
- Bun >= 1.1.0 (for development/building)
|
|
207
|
+
- The compiled binary runs standalone (no Bun required)
|
|
208
|
+
|
|
209
|
+
### Binary Size
|
|
210
|
+
|
|
211
|
+
The self-contained binary is approximately 55-60 MB depending on the platform. This includes the embedded Bun runtime which enables standalone execution without requiring Bun to be installed on the target system.
|
|
212
|
+
|
|
213
|
+
## Platform Support
|
|
214
|
+
|
|
215
|
+
| Platform | Architecture | Status |
|
|
216
|
+
| -------------- | ------------ | ------ |
|
|
217
|
+
| macOS | ARM64 (M1+) | ✅ |
|
|
218
|
+
| macOS | x64 | ✅ |
|
|
219
|
+
| Linux | x64 | ✅ |
|
|
220
|
+
| Linux | ARM64 | ✅ |
|
|
221
|
+
| Windows | x64 | ✅ |
|
|
222
|
+
|
|
223
|
+
## Development
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
# Run CLI in development
|
|
227
|
+
bun run main.ts dev
|
|
228
|
+
|
|
229
|
+
# Run tests
|
|
230
|
+
bun test
|
|
231
|
+
|
|
232
|
+
# Type check
|
|
233
|
+
bun run typecheck
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## License
|
|
237
|
+
|
|
238
|
+
MIT
|
package/cli/agent.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Agent with MCP Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides AI SDK 6 ToolLoopAgent integration for CLI natural language processing.
|
|
5
|
+
* Connects to Durable Object's MCP endpoint via HTTP transport.
|
|
6
|
+
*
|
|
7
|
+
* @see https://ai-sdk.dev/docs/agents/tool-loop-agent
|
|
8
|
+
* @see https://modelcontextprotocol.io/docs/concepts/transports
|
|
9
|
+
*
|
|
10
|
+
* TODO: Implement in GREEN phase (see dotdo-i2fn)
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Configuration options for the AI agent
|
|
15
|
+
*/
|
|
16
|
+
export interface AgentConfig {
|
|
17
|
+
/** Maximum number of tool execution steps (default: 10) */
|
|
18
|
+
maxSteps?: number
|
|
19
|
+
/** Model identifier for Cloudflare Workers AI (default: 'llama-3.3-70b-instruct-fp8-fast') */
|
|
20
|
+
model?: string
|
|
21
|
+
/** Custom system instructions for the agent */
|
|
22
|
+
instructions?: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Run the AI agent with MCP tools from a Durable Object
|
|
27
|
+
*
|
|
28
|
+
* @param input - Natural language input from user
|
|
29
|
+
* @param doUrl - URL of the Durable Object with MCP endpoint
|
|
30
|
+
* @param config - Optional agent configuration
|
|
31
|
+
* @returns Agent response text
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const result = await runAgent('create a user named John', 'https://my-app.do.dev')
|
|
36
|
+
* // result: 'Created user John with ID 123'
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export async function runAgent(
|
|
40
|
+
_input: string,
|
|
41
|
+
_doUrl: string,
|
|
42
|
+
_config?: AgentConfig
|
|
43
|
+
): Promise<string> {
|
|
44
|
+
// TODO: Implement in GREEN phase
|
|
45
|
+
throw new Error('Not implemented: runAgent')
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Create a reusable agent instance with MCP connection
|
|
50
|
+
*
|
|
51
|
+
* @param doUrl - URL of the Durable Object with MCP endpoint
|
|
52
|
+
* @param config - Optional agent configuration
|
|
53
|
+
* @returns Agent instance with generate and close methods
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const agent = await createAgentWithMCP('https://my-app.do.dev')
|
|
58
|
+
* const result1 = await agent.generate({ prompt: 'list users' })
|
|
59
|
+
* const result2 = await agent.generate({ prompt: 'create user' })
|
|
60
|
+
* await agent.close()
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export async function createAgentWithMCP(
|
|
64
|
+
_doUrl: string,
|
|
65
|
+
_config?: AgentConfig
|
|
66
|
+
): Promise<{
|
|
67
|
+
generate: (options: { prompt: string }) => Promise<{ text: string }>
|
|
68
|
+
close: () => Promise<void>
|
|
69
|
+
}> {
|
|
70
|
+
// TODO: Implement in GREEN phase
|
|
71
|
+
throw new Error('Not implemented: createAgentWithMCP')
|
|
72
|
+
}
|
package/cli/bin.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI Entry Point (Node.js wrapper)
|
|
4
|
+
*
|
|
5
|
+
* Spawns bun to run the TypeScript CLI.
|
|
6
|
+
* Bun is installed as a dependency, so it's available in node_modules/.bin/bun
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { spawn } from 'node:child_process'
|
|
10
|
+
import { dirname, join } from 'node:path'
|
|
11
|
+
import { fileURLToPath } from 'node:url'
|
|
12
|
+
|
|
13
|
+
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
14
|
+
const bunPath = join(__dirname, '..', 'node_modules', '.bin', 'bun')
|
|
15
|
+
const mainTs = join(__dirname, 'main.ts')
|
|
16
|
+
|
|
17
|
+
// Spawn bun with the TypeScript entry point
|
|
18
|
+
const child = spawn(bunPath, [mainTs, ...process.argv.slice(2)], {
|
|
19
|
+
stdio: 'inherit',
|
|
20
|
+
env: process.env,
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
child.on('close', (code) => {
|
|
24
|
+
process.exit(code ?? 0)
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
child.on('error', (err) => {
|
|
28
|
+
// Fallback: try global bun if local not found
|
|
29
|
+
if (err.code === 'ENOENT') {
|
|
30
|
+
const fallback = spawn('bun', [mainTs, ...process.argv.slice(2)], {
|
|
31
|
+
stdio: 'inherit',
|
|
32
|
+
env: process.env,
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
fallback.on('close', (code) => process.exit(code ?? 0))
|
|
36
|
+
fallback.on('error', () => {
|
|
37
|
+
console.error('Error: Could not find bun. Please run: npm install')
|
|
38
|
+
process.exit(1)
|
|
39
|
+
})
|
|
40
|
+
} else {
|
|
41
|
+
console.error('Error:', err.message)
|
|
42
|
+
process.exit(1)
|
|
43
|
+
}
|
|
44
|
+
})
|
package/cli/bin.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* CLI Entry Point (Direct Bun execution)
|
|
4
|
+
*
|
|
5
|
+
* This file is for direct bun execution (bunx dotdo).
|
|
6
|
+
* For npm/npx, use bin.js which spawns bun.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { route, parseArgv, helpText, version } from './index'
|
|
10
|
+
import { commands } from './commands/index'
|
|
11
|
+
import { fallback } from './fallback'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Main CLI function
|
|
15
|
+
*/
|
|
16
|
+
export async function main(argv: string[]): Promise<void> {
|
|
17
|
+
const result = route(argv)
|
|
18
|
+
|
|
19
|
+
switch (result.type) {
|
|
20
|
+
case 'help':
|
|
21
|
+
console.log(helpText)
|
|
22
|
+
break
|
|
23
|
+
case 'version':
|
|
24
|
+
console.log(version)
|
|
25
|
+
break
|
|
26
|
+
case 'command':
|
|
27
|
+
await commands[result.name].run(result.args)
|
|
28
|
+
break
|
|
29
|
+
case 'fallback':
|
|
30
|
+
await fallback(result.input)
|
|
31
|
+
break
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Run if executed directly
|
|
36
|
+
if (import.meta.main) {
|
|
37
|
+
main(parseArgv(Bun.argv))
|
|
38
|
+
}
|
package/cli/build.ts
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* Build Script
|
|
4
|
+
*
|
|
5
|
+
* Compiles the CLI into a self-contained binary using Bun.
|
|
6
|
+
* The binary includes all dependencies and works without Bun installed.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import * as fs from 'fs'
|
|
10
|
+
import * as path from 'path'
|
|
11
|
+
|
|
12
|
+
interface BuildOptions {
|
|
13
|
+
target?: 'bun-darwin-arm64' | 'bun-darwin-x64' | 'bun-linux-arm64' | 'bun-linux-x64' | 'bun-windows-x64'
|
|
14
|
+
outfile?: string
|
|
15
|
+
minify?: boolean
|
|
16
|
+
sourcemap?: boolean
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const defaultTargets: BuildOptions['target'][] = [
|
|
20
|
+
'bun-darwin-arm64',
|
|
21
|
+
'bun-darwin-x64',
|
|
22
|
+
'bun-linux-arm64',
|
|
23
|
+
'bun-linux-x64',
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
async function build(options: BuildOptions = {}): Promise<void> {
|
|
27
|
+
const cliDir = path.dirname(new URL(import.meta.url).pathname)
|
|
28
|
+
const entryPoint = path.join(cliDir, 'main.ts')
|
|
29
|
+
const outDir = path.join(cliDir, 'dist')
|
|
30
|
+
|
|
31
|
+
// Ensure output directory exists
|
|
32
|
+
if (!fs.existsSync(outDir)) {
|
|
33
|
+
fs.mkdirSync(outDir, { recursive: true })
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Determine targets
|
|
37
|
+
const targets = options.target ? [options.target] : defaultTargets
|
|
38
|
+
|
|
39
|
+
console.log('Building dotdo CLI...')
|
|
40
|
+
console.log()
|
|
41
|
+
|
|
42
|
+
for (const target of targets) {
|
|
43
|
+
const [, platform, arch] = target.split('-')
|
|
44
|
+
const ext = platform === 'windows' ? '.exe' : ''
|
|
45
|
+
const outfile = options.outfile ?? path.join(outDir, `dotdo-${platform}-${arch}${ext}`)
|
|
46
|
+
|
|
47
|
+
console.log(` Target: ${target}`)
|
|
48
|
+
console.log(` Output: ${outfile}`)
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
const startTime = Date.now()
|
|
52
|
+
|
|
53
|
+
const result = await Bun.build({
|
|
54
|
+
entrypoints: [entryPoint],
|
|
55
|
+
outdir: outDir,
|
|
56
|
+
target,
|
|
57
|
+
minify: options.minify ?? true,
|
|
58
|
+
sourcemap: options.sourcemap ? 'external' : 'none',
|
|
59
|
+
external: [
|
|
60
|
+
// These need to be external for native modules
|
|
61
|
+
'better-sqlite3',
|
|
62
|
+
],
|
|
63
|
+
define: {
|
|
64
|
+
'process.env.NODE_ENV': '"production"',
|
|
65
|
+
},
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
if (!result.success) {
|
|
69
|
+
console.error('Build failed:')
|
|
70
|
+
for (const log of result.logs) {
|
|
71
|
+
console.error(log)
|
|
72
|
+
}
|
|
73
|
+
process.exit(1)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Compile to binary
|
|
77
|
+
const proc = Bun.spawn(['bun', 'build', entryPoint, '--compile', '--target', target, '--outfile', outfile], {
|
|
78
|
+
cwd: cliDir,
|
|
79
|
+
stdout: 'pipe',
|
|
80
|
+
stderr: 'pipe',
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
const exitCode = await proc.exited
|
|
84
|
+
|
|
85
|
+
if (exitCode !== 0) {
|
|
86
|
+
const stderr = await new Response(proc.stderr).text()
|
|
87
|
+
console.error(` Error: ${stderr}`)
|
|
88
|
+
continue
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const duration = Date.now() - startTime
|
|
92
|
+
const stats = fs.statSync(outfile)
|
|
93
|
+
const sizeMB = (stats.size / 1024 / 1024).toFixed(2)
|
|
94
|
+
|
|
95
|
+
console.log(` Size: ${sizeMB} MB`)
|
|
96
|
+
console.log(` Time: ${duration}ms`)
|
|
97
|
+
console.log()
|
|
98
|
+
} catch (error) {
|
|
99
|
+
console.error(` Error: ${error instanceof Error ? error.message : String(error)}`)
|
|
100
|
+
console.log()
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
console.log('Build complete!')
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// CLI interface
|
|
108
|
+
async function main(): Promise<void> {
|
|
109
|
+
const args = process.argv.slice(2)
|
|
110
|
+
const options: BuildOptions = {}
|
|
111
|
+
|
|
112
|
+
for (let i = 0; i < args.length; i++) {
|
|
113
|
+
const arg = args[i]
|
|
114
|
+
|
|
115
|
+
if (arg === '--target' && args[i + 1]) {
|
|
116
|
+
options.target = args[++i] as BuildOptions['target']
|
|
117
|
+
} else if (arg === '--outfile' && args[i + 1]) {
|
|
118
|
+
options.outfile = args[++i]
|
|
119
|
+
} else if (arg === '--no-minify') {
|
|
120
|
+
options.minify = false
|
|
121
|
+
} else if (arg === '--sourcemap') {
|
|
122
|
+
options.sourcemap = true
|
|
123
|
+
} else if (arg === '--help' || arg === '-h') {
|
|
124
|
+
console.log(`
|
|
125
|
+
dotdo CLI Build Script
|
|
126
|
+
|
|
127
|
+
Usage: bun run build.ts [options]
|
|
128
|
+
|
|
129
|
+
Options:
|
|
130
|
+
--target <target> Build for specific target
|
|
131
|
+
(bun-darwin-arm64, bun-darwin-x64, bun-linux-arm64, bun-linux-x64, bun-windows-x64)
|
|
132
|
+
--outfile <path> Output file path
|
|
133
|
+
--no-minify Disable minification
|
|
134
|
+
--sourcemap Include source maps
|
|
135
|
+
-h, --help Show this help
|
|
136
|
+
|
|
137
|
+
Examples:
|
|
138
|
+
bun run build.ts # Build for all targets
|
|
139
|
+
bun run build.ts --target bun-darwin-arm64 # macOS ARM only
|
|
140
|
+
bun run build.ts --outfile ./dotdo # Custom output path
|
|
141
|
+
`)
|
|
142
|
+
process.exit(0)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
await build(options)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Run if executed directly
|
|
150
|
+
if (import.meta.main) {
|
|
151
|
+
main().catch((error) => {
|
|
152
|
+
console.error('Build failed:', error)
|
|
153
|
+
process.exit(1)
|
|
154
|
+
})
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export { build, type BuildOptions }
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ensureLoggedIn } from 'oauth.do/node'
|
|
2
|
+
|
|
3
|
+
export async function run() {
|
|
4
|
+
const { token, isNewLogin } = await ensureLoggedIn({
|
|
5
|
+
openBrowser: true,
|
|
6
|
+
print: console.log,
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
if (isNewLogin) {
|
|
10
|
+
console.log('Logged in successfully')
|
|
11
|
+
} else {
|
|
12
|
+
console.log('Already logged in')
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getToken, getUser } from 'oauth.do/node'
|
|
2
|
+
|
|
3
|
+
export async function run() {
|
|
4
|
+
const token = await getToken()
|
|
5
|
+
if (!token) {
|
|
6
|
+
console.log('Not logged in. Run: do login')
|
|
7
|
+
return
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { user } = await getUser(token)
|
|
11
|
+
if (user) {
|
|
12
|
+
console.log(`Logged in as: ${user.email}`)
|
|
13
|
+
} else {
|
|
14
|
+
console.log('Session expired. Run: do login')
|
|
15
|
+
}
|
|
16
|
+
}
|