gitx.do 0.1.0 → 0.1.2
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/README.md +40 -353
- package/dist/do/logger.d.ts +50 -0
- package/dist/do/logger.d.ts.map +1 -0
- package/dist/do/logger.js +122 -0
- package/dist/do/logger.js.map +1 -0
- package/dist/{durable-object → do}/schema.d.ts +3 -3
- package/dist/do/schema.d.ts.map +1 -0
- package/dist/{durable-object → do}/schema.js +4 -3
- package/dist/do/schema.js.map +1 -0
- package/dist/do/types.d.ts +267 -0
- package/dist/do/types.d.ts.map +1 -0
- package/dist/do/types.js +62 -0
- package/dist/do/types.js.map +1 -0
- package/dist/index.d.ts +15 -415
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -483
- package/dist/index.js.map +1 -1
- package/package.json +13 -21
- package/dist/cli/commands/add.d.ts +0 -174
- package/dist/cli/commands/add.d.ts.map +0 -1
- package/dist/cli/commands/add.js +0 -131
- package/dist/cli/commands/add.js.map +0 -1
- package/dist/cli/commands/blame.d.ts +0 -259
- package/dist/cli/commands/blame.d.ts.map +0 -1
- package/dist/cli/commands/blame.js +0 -609
- package/dist/cli/commands/blame.js.map +0 -1
- package/dist/cli/commands/branch.d.ts +0 -249
- package/dist/cli/commands/branch.d.ts.map +0 -1
- package/dist/cli/commands/branch.js +0 -693
- package/dist/cli/commands/branch.js.map +0 -1
- package/dist/cli/commands/commit.d.ts +0 -182
- package/dist/cli/commands/commit.d.ts.map +0 -1
- package/dist/cli/commands/commit.js +0 -437
- package/dist/cli/commands/commit.js.map +0 -1
- package/dist/cli/commands/diff.d.ts +0 -464
- package/dist/cli/commands/diff.d.ts.map +0 -1
- package/dist/cli/commands/diff.js +0 -958
- package/dist/cli/commands/diff.js.map +0 -1
- package/dist/cli/commands/log.d.ts +0 -239
- package/dist/cli/commands/log.d.ts.map +0 -1
- package/dist/cli/commands/log.js +0 -535
- package/dist/cli/commands/log.js.map +0 -1
- package/dist/cli/commands/merge.d.ts +0 -106
- package/dist/cli/commands/merge.d.ts.map +0 -1
- package/dist/cli/commands/merge.js +0 -55
- package/dist/cli/commands/merge.js.map +0 -1
- package/dist/cli/commands/review.d.ts +0 -457
- package/dist/cli/commands/review.d.ts.map +0 -1
- package/dist/cli/commands/review.js +0 -533
- package/dist/cli/commands/review.js.map +0 -1
- package/dist/cli/commands/status.d.ts +0 -269
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/status.js +0 -493
- package/dist/cli/commands/status.js.map +0 -1
- package/dist/cli/commands/web.d.ts +0 -199
- package/dist/cli/commands/web.d.ts.map +0 -1
- package/dist/cli/commands/web.js +0 -696
- package/dist/cli/commands/web.js.map +0 -1
- package/dist/cli/fs-adapter.d.ts +0 -656
- package/dist/cli/fs-adapter.d.ts.map +0 -1
- package/dist/cli/fs-adapter.js +0 -1179
- package/dist/cli/fs-adapter.js.map +0 -1
- package/dist/cli/fsx-cli-adapter.d.ts +0 -359
- package/dist/cli/fsx-cli-adapter.d.ts.map +0 -1
- package/dist/cli/fsx-cli-adapter.js +0 -619
- package/dist/cli/fsx-cli-adapter.js.map +0 -1
- package/dist/cli/index.d.ts +0 -387
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -523
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/ui/components/DiffView.d.ts +0 -7
- package/dist/cli/ui/components/DiffView.d.ts.map +0 -1
- package/dist/cli/ui/components/DiffView.js +0 -11
- package/dist/cli/ui/components/DiffView.js.map +0 -1
- package/dist/cli/ui/components/ErrorDisplay.d.ts +0 -6
- package/dist/cli/ui/components/ErrorDisplay.d.ts.map +0 -1
- package/dist/cli/ui/components/ErrorDisplay.js +0 -11
- package/dist/cli/ui/components/ErrorDisplay.js.map +0 -1
- package/dist/cli/ui/components/FuzzySearch.d.ts +0 -9
- package/dist/cli/ui/components/FuzzySearch.d.ts.map +0 -1
- package/dist/cli/ui/components/FuzzySearch.js +0 -12
- package/dist/cli/ui/components/FuzzySearch.js.map +0 -1
- package/dist/cli/ui/components/LoadingSpinner.d.ts +0 -6
- package/dist/cli/ui/components/LoadingSpinner.d.ts.map +0 -1
- package/dist/cli/ui/components/LoadingSpinner.js +0 -10
- package/dist/cli/ui/components/LoadingSpinner.js.map +0 -1
- package/dist/cli/ui/components/NavigationList.d.ts +0 -9
- package/dist/cli/ui/components/NavigationList.d.ts.map +0 -1
- package/dist/cli/ui/components/NavigationList.js +0 -11
- package/dist/cli/ui/components/NavigationList.js.map +0 -1
- package/dist/cli/ui/components/ScrollableContent.d.ts +0 -8
- package/dist/cli/ui/components/ScrollableContent.d.ts.map +0 -1
- package/dist/cli/ui/components/ScrollableContent.js +0 -11
- package/dist/cli/ui/components/ScrollableContent.js.map +0 -1
- package/dist/cli/ui/components/index.d.ts +0 -7
- package/dist/cli/ui/components/index.d.ts.map +0 -1
- package/dist/cli/ui/components/index.js +0 -9
- package/dist/cli/ui/components/index.js.map +0 -1
- package/dist/cli/ui/terminal-ui.d.ts +0 -52
- package/dist/cli/ui/terminal-ui.d.ts.map +0 -1
- package/dist/cli/ui/terminal-ui.js +0 -121
- package/dist/cli/ui/terminal-ui.js.map +0 -1
- package/dist/do/BashModule.d.ts +0 -871
- package/dist/do/BashModule.d.ts.map +0 -1
- package/dist/do/BashModule.js +0 -1143
- package/dist/do/BashModule.js.map +0 -1
- package/dist/do/FsModule.d.ts +0 -601
- package/dist/do/FsModule.d.ts.map +0 -1
- package/dist/do/FsModule.js +0 -1120
- package/dist/do/FsModule.js.map +0 -1
- package/dist/do/GitModule.d.ts +0 -635
- package/dist/do/GitModule.d.ts.map +0 -1
- package/dist/do/GitModule.js +0 -781
- package/dist/do/GitModule.js.map +0 -1
- package/dist/do/GitRepoDO.d.ts +0 -281
- package/dist/do/GitRepoDO.d.ts.map +0 -1
- package/dist/do/GitRepoDO.js +0 -479
- package/dist/do/GitRepoDO.js.map +0 -1
- package/dist/do/bash-ast.d.ts +0 -246
- package/dist/do/bash-ast.d.ts.map +0 -1
- package/dist/do/bash-ast.js +0 -888
- package/dist/do/bash-ast.js.map +0 -1
- package/dist/do/container-executor.d.ts +0 -491
- package/dist/do/container-executor.d.ts.map +0 -1
- package/dist/do/container-executor.js +0 -730
- package/dist/do/container-executor.js.map +0 -1
- package/dist/do/index.d.ts +0 -53
- package/dist/do/index.d.ts.map +0 -1
- package/dist/do/index.js +0 -91
- package/dist/do/index.js.map +0 -1
- package/dist/do/tiered-storage.d.ts +0 -403
- package/dist/do/tiered-storage.d.ts.map +0 -1
- package/dist/do/tiered-storage.js +0 -689
- package/dist/do/tiered-storage.js.map +0 -1
- package/dist/do/withBash.d.ts +0 -231
- package/dist/do/withBash.d.ts.map +0 -1
- package/dist/do/withBash.js +0 -244
- package/dist/do/withBash.js.map +0 -1
- package/dist/do/withFs.d.ts +0 -237
- package/dist/do/withFs.d.ts.map +0 -1
- package/dist/do/withFs.js +0 -387
- package/dist/do/withFs.js.map +0 -1
- package/dist/do/withGit.d.ts +0 -180
- package/dist/do/withGit.d.ts.map +0 -1
- package/dist/do/withGit.js +0 -271
- package/dist/do/withGit.js.map +0 -1
- package/dist/durable-object/object-store.d.ts +0 -633
- package/dist/durable-object/object-store.d.ts.map +0 -1
- package/dist/durable-object/object-store.js +0 -1161
- package/dist/durable-object/object-store.js.map +0 -1
- package/dist/durable-object/schema.d.ts.map +0 -1
- package/dist/durable-object/schema.js.map +0 -1
- package/dist/durable-object/wal.d.ts +0 -416
- package/dist/durable-object/wal.d.ts.map +0 -1
- package/dist/durable-object/wal.js +0 -445
- package/dist/durable-object/wal.js.map +0 -1
- package/dist/mcp/adapter.d.ts +0 -772
- package/dist/mcp/adapter.d.ts.map +0 -1
- package/dist/mcp/adapter.js +0 -895
- package/dist/mcp/adapter.js.map +0 -1
- package/dist/mcp/sandbox/miniflare-evaluator.d.ts +0 -22
- package/dist/mcp/sandbox/miniflare-evaluator.d.ts.map +0 -1
- package/dist/mcp/sandbox/miniflare-evaluator.js +0 -140
- package/dist/mcp/sandbox/miniflare-evaluator.js.map +0 -1
- package/dist/mcp/sandbox/object-store-proxy.d.ts +0 -32
- package/dist/mcp/sandbox/object-store-proxy.d.ts.map +0 -1
- package/dist/mcp/sandbox/object-store-proxy.js +0 -30
- package/dist/mcp/sandbox/object-store-proxy.js.map +0 -1
- package/dist/mcp/sandbox/template.d.ts +0 -17
- package/dist/mcp/sandbox/template.d.ts.map +0 -1
- package/dist/mcp/sandbox/template.js +0 -71
- package/dist/mcp/sandbox/template.js.map +0 -1
- package/dist/mcp/sandbox.d.ts +0 -764
- package/dist/mcp/sandbox.d.ts.map +0 -1
- package/dist/mcp/sandbox.js +0 -1362
- package/dist/mcp/sandbox.js.map +0 -1
- package/dist/mcp/sdk-adapter.d.ts +0 -835
- package/dist/mcp/sdk-adapter.d.ts.map +0 -1
- package/dist/mcp/sdk-adapter.js +0 -974
- package/dist/mcp/sdk-adapter.js.map +0 -1
- package/dist/mcp/tools/do.d.ts +0 -32
- package/dist/mcp/tools/do.d.ts.map +0 -1
- package/dist/mcp/tools/do.js +0 -115
- package/dist/mcp/tools/do.js.map +0 -1
- package/dist/mcp/tools.d.ts +0 -548
- package/dist/mcp/tools.d.ts.map +0 -1
- package/dist/mcp/tools.js +0 -1934
- package/dist/mcp/tools.js.map +0 -1
- package/dist/ops/blame.d.ts +0 -551
- package/dist/ops/blame.d.ts.map +0 -1
- package/dist/ops/blame.js +0 -1037
- package/dist/ops/blame.js.map +0 -1
- package/dist/ops/branch.d.ts +0 -766
- package/dist/ops/branch.d.ts.map +0 -1
- package/dist/ops/branch.js +0 -950
- package/dist/ops/branch.js.map +0 -1
- package/dist/ops/commit-traversal.d.ts +0 -349
- package/dist/ops/commit-traversal.d.ts.map +0 -1
- package/dist/ops/commit-traversal.js +0 -821
- package/dist/ops/commit-traversal.js.map +0 -1
- package/dist/ops/commit.d.ts +0 -555
- package/dist/ops/commit.d.ts.map +0 -1
- package/dist/ops/commit.js +0 -826
- package/dist/ops/commit.js.map +0 -1
- package/dist/ops/merge-base.d.ts +0 -397
- package/dist/ops/merge-base.d.ts.map +0 -1
- package/dist/ops/merge-base.js +0 -691
- package/dist/ops/merge-base.js.map +0 -1
- package/dist/ops/merge.d.ts +0 -855
- package/dist/ops/merge.d.ts.map +0 -1
- package/dist/ops/merge.js +0 -1551
- package/dist/ops/merge.js.map +0 -1
- package/dist/ops/tag.d.ts +0 -247
- package/dist/ops/tag.d.ts.map +0 -1
- package/dist/ops/tag.js +0 -649
- package/dist/ops/tag.js.map +0 -1
- package/dist/ops/tree-builder.d.ts +0 -178
- package/dist/ops/tree-builder.d.ts.map +0 -1
- package/dist/ops/tree-builder.js +0 -271
- package/dist/ops/tree-builder.js.map +0 -1
- package/dist/ops/tree-diff.d.ts +0 -291
- package/dist/ops/tree-diff.d.ts.map +0 -1
- package/dist/ops/tree-diff.js +0 -705
- package/dist/ops/tree-diff.js.map +0 -1
- package/dist/pack/delta.d.ts +0 -248
- package/dist/pack/delta.d.ts.map +0 -1
- package/dist/pack/delta.js +0 -736
- package/dist/pack/delta.js.map +0 -1
- package/dist/pack/format.d.ts +0 -446
- package/dist/pack/format.d.ts.map +0 -1
- package/dist/pack/format.js +0 -572
- package/dist/pack/format.js.map +0 -1
- package/dist/pack/full-generation.d.ts +0 -612
- package/dist/pack/full-generation.d.ts.map +0 -1
- package/dist/pack/full-generation.js +0 -1378
- package/dist/pack/full-generation.js.map +0 -1
- package/dist/pack/generation.d.ts +0 -441
- package/dist/pack/generation.d.ts.map +0 -1
- package/dist/pack/generation.js +0 -707
- package/dist/pack/generation.js.map +0 -1
- package/dist/pack/index.d.ts +0 -502
- package/dist/pack/index.d.ts.map +0 -1
- package/dist/pack/index.js +0 -833
- package/dist/pack/index.js.map +0 -1
- package/dist/refs/branch.d.ts +0 -668
- package/dist/refs/branch.d.ts.map +0 -1
- package/dist/refs/branch.js +0 -897
- package/dist/refs/branch.js.map +0 -1
- package/dist/refs/storage.d.ts +0 -833
- package/dist/refs/storage.d.ts.map +0 -1
- package/dist/refs/storage.js +0 -1023
- package/dist/refs/storage.js.map +0 -1
- package/dist/refs/tag.d.ts +0 -860
- package/dist/refs/tag.d.ts.map +0 -1
- package/dist/refs/tag.js +0 -996
- package/dist/refs/tag.js.map +0 -1
- package/dist/storage/backend.d.ts +0 -425
- package/dist/storage/backend.d.ts.map +0 -1
- package/dist/storage/backend.js +0 -41
- package/dist/storage/backend.js.map +0 -1
- package/dist/storage/fsx-adapter.d.ts +0 -204
- package/dist/storage/fsx-adapter.d.ts.map +0 -1
- package/dist/storage/fsx-adapter.js +0 -470
- package/dist/storage/fsx-adapter.js.map +0 -1
- package/dist/storage/lru-cache.d.ts +0 -691
- package/dist/storage/lru-cache.d.ts.map +0 -1
- package/dist/storage/lru-cache.js +0 -813
- package/dist/storage/lru-cache.js.map +0 -1
- package/dist/storage/object-index.d.ts +0 -585
- package/dist/storage/object-index.d.ts.map +0 -1
- package/dist/storage/object-index.js +0 -532
- package/dist/storage/object-index.js.map +0 -1
- package/dist/storage/r2-pack.d.ts +0 -1257
- package/dist/storage/r2-pack.d.ts.map +0 -1
- package/dist/storage/r2-pack.js +0 -1770
- package/dist/storage/r2-pack.js.map +0 -1
- package/dist/tiered/cdc-pipeline.d.ts +0 -1888
- package/dist/tiered/cdc-pipeline.d.ts.map +0 -1
- package/dist/tiered/cdc-pipeline.js +0 -1880
- package/dist/tiered/cdc-pipeline.js.map +0 -1
- package/dist/tiered/migration.d.ts +0 -1104
- package/dist/tiered/migration.d.ts.map +0 -1
- package/dist/tiered/migration.js +0 -1214
- package/dist/tiered/migration.js.map +0 -1
- package/dist/tiered/parquet-writer.d.ts +0 -1145
- package/dist/tiered/parquet-writer.d.ts.map +0 -1
- package/dist/tiered/parquet-writer.js +0 -1183
- package/dist/tiered/parquet-writer.js.map +0 -1
- package/dist/tiered/read-path.d.ts +0 -835
- package/dist/tiered/read-path.d.ts.map +0 -1
- package/dist/tiered/read-path.js +0 -487
- package/dist/tiered/read-path.js.map +0 -1
- package/dist/types/capability.d.ts +0 -1385
- package/dist/types/capability.d.ts.map +0 -1
- package/dist/types/capability.js +0 -36
- package/dist/types/capability.js.map +0 -1
- package/dist/types/index.d.ts +0 -13
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -18
- package/dist/types/index.js.map +0 -1
- package/dist/types/objects.d.ts +0 -692
- package/dist/types/objects.d.ts.map +0 -1
- package/dist/types/objects.js +0 -837
- package/dist/types/objects.js.map +0 -1
- package/dist/types/storage.d.ts +0 -603
- package/dist/types/storage.d.ts.map +0 -1
- package/dist/types/storage.js +0 -191
- package/dist/types/storage.js.map +0 -1
- package/dist/types/worker-loader.d.ts +0 -60
- package/dist/types/worker-loader.d.ts.map +0 -1
- package/dist/types/worker-loader.js +0 -62
- package/dist/types/worker-loader.js.map +0 -1
- package/dist/utils/hash.d.ts +0 -197
- package/dist/utils/hash.d.ts.map +0 -1
- package/dist/utils/hash.js +0 -268
- package/dist/utils/hash.js.map +0 -1
- package/dist/utils/sha1.d.ts +0 -290
- package/dist/utils/sha1.d.ts.map +0 -1
- package/dist/utils/sha1.js +0 -582
- package/dist/utils/sha1.js.map +0 -1
- package/dist/wire/capabilities.d.ts +0 -1044
- package/dist/wire/capabilities.d.ts.map +0 -1
- package/dist/wire/capabilities.js +0 -941
- package/dist/wire/capabilities.js.map +0 -1
- package/dist/wire/path-security.d.ts +0 -157
- package/dist/wire/path-security.d.ts.map +0 -1
- package/dist/wire/path-security.js +0 -307
- package/dist/wire/path-security.js.map +0 -1
- package/dist/wire/pkt-line.d.ts +0 -345
- package/dist/wire/pkt-line.d.ts.map +0 -1
- package/dist/wire/pkt-line.js +0 -381
- package/dist/wire/pkt-line.js.map +0 -1
- package/dist/wire/receive-pack.d.ts +0 -1059
- package/dist/wire/receive-pack.d.ts.map +0 -1
- package/dist/wire/receive-pack.js +0 -1414
- package/dist/wire/receive-pack.js.map +0 -1
- package/dist/wire/smart-http.d.ts +0 -799
- package/dist/wire/smart-http.d.ts.map +0 -1
- package/dist/wire/smart-http.js +0 -945
- package/dist/wire/smart-http.js.map +0 -1
- package/dist/wire/upload-pack.d.ts +0 -727
- package/dist/wire/upload-pack.d.ts.map +0 -1
- package/dist/wire/upload-pack.js +0 -1138
- package/dist/wire/upload-pack.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,36 +1,8 @@
|
|
|
1
1
|
# gitx.do
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Git on Cloudflare Durable Objects - A complete git reimplementation for the edge.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
[](https://github.com/dot-do/gitx)
|
|
7
|
-
[](https://www.typescriptlang.org/)
|
|
8
|
-
[](https://opensource.org/licenses/MIT)
|
|
9
|
-
|
|
10
|
-
## Why gitx?
|
|
11
|
-
|
|
12
|
-
**AI agents need version control.** They generate code, iterate on files, need to track changes and roll back mistakes.
|
|
13
|
-
|
|
14
|
-
**gitx is Git reimplemented for Cloudflare Workers.** Full protocol support - pack files, delta compression, smart HTTP. Not a wrapper around git CLI. A complete implementation.
|
|
15
|
-
|
|
16
|
-
**Scales to millions of agents.** Each agent gets its own git repository on Cloudflare's edge network. No shared servers. No rate limits. Just fast, isolated version control at global scale.
|
|
17
|
-
|
|
18
|
-
```typescript
|
|
19
|
-
import git from 'gitx.do'
|
|
20
|
-
|
|
21
|
-
// Initialize a repo
|
|
22
|
-
await git.init('/my-project')
|
|
23
|
-
|
|
24
|
-
// Stage and commit
|
|
25
|
-
await git.add('/my-project', '.')
|
|
26
|
-
await git.commit('/my-project', 'Initial commit')
|
|
27
|
-
|
|
28
|
-
// Branch and merge
|
|
29
|
-
await git.branch('/my-project', 'feature')
|
|
30
|
-
await git.checkout('/my-project', 'feature')
|
|
31
|
-
// ... make changes ...
|
|
32
|
-
await git.merge('/my-project', 'feature')
|
|
33
|
-
```
|
|
5
|
+
This package provides Cloudflare Workers/Durable Objects integration for git. It depends on [@dotdo/gitx](../core) for the pure git implementation.
|
|
34
6
|
|
|
35
7
|
## Installation
|
|
36
8
|
|
|
@@ -38,346 +10,61 @@ await git.merge('/my-project', 'feature')
|
|
|
38
10
|
npm install gitx.do
|
|
39
11
|
```
|
|
40
12
|
|
|
41
|
-
## Quick Start
|
|
42
|
-
|
|
43
|
-
```typescript
|
|
44
|
-
import git from 'gitx.do'
|
|
45
|
-
|
|
46
|
-
// Create a repository
|
|
47
|
-
await git.init('/repo')
|
|
48
|
-
|
|
49
|
-
// Write files and commit
|
|
50
|
-
await git.add('/repo', 'README.md')
|
|
51
|
-
await git.commit('/repo', 'Add readme')
|
|
52
|
-
|
|
53
|
-
// View history
|
|
54
|
-
const log = await git.log('/repo')
|
|
55
|
-
console.log(log.commits)
|
|
56
|
-
|
|
57
|
-
// Create branches
|
|
58
|
-
await git.branch('/repo', 'feature/auth')
|
|
59
|
-
await git.checkout('/repo', 'feature/auth')
|
|
60
|
-
|
|
61
|
-
// View changes
|
|
62
|
-
const diff = await git.diff('/repo', 'main', 'feature/auth')
|
|
63
|
-
const status = await git.status('/repo')
|
|
64
|
-
```
|
|
65
|
-
|
|
66
13
|
## Features
|
|
67
14
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
// Object model
|
|
74
|
-
await git.hashObject('/repo', content, 'blob')
|
|
75
|
-
await git.catFile('/repo', sha, 'blob')
|
|
76
|
-
|
|
77
|
-
// Trees and commits
|
|
78
|
-
const tree = await git.writeTree('/repo')
|
|
79
|
-
const commit = await git.commitTree('/repo', tree, 'message', [parent])
|
|
80
|
-
|
|
81
|
-
// Pack files
|
|
82
|
-
await git.pack('/repo', objects)
|
|
83
|
-
await git.unpack('/repo', packData)
|
|
84
|
-
|
|
85
|
-
// References
|
|
86
|
-
await git.updateRef('/repo', 'refs/heads/main', sha)
|
|
87
|
-
const ref = await git.resolveRef('/repo', 'HEAD')
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### Tiered Storage
|
|
91
|
-
|
|
92
|
-
Hot objects in SQLite. Pack files in R2. You don't think about it.
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
┌────────────────────────────────────────────────────────┐
|
|
96
|
-
│ Hot Tier (SQLite) │ Warm Tier (R2) │
|
|
97
|
-
├───────────────────────────────┼────────────────────────┤
|
|
98
|
-
│ • Recent commits │ • Pack files │
|
|
99
|
-
│ • Active branches │ • Full history │
|
|
100
|
-
│ • Loose objects │ • Large blobs │
|
|
101
|
-
│ • <10ms access │ • <100ms access │
|
|
102
|
-
└───────────────────────────────┴────────────────────────┘
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### Pack File Engine
|
|
106
|
-
|
|
107
|
-
Full packfile v2/v3 support:
|
|
108
|
-
|
|
109
|
-
```typescript
|
|
110
|
-
// Delta compression
|
|
111
|
-
await git.repack('/repo', { deltify: true })
|
|
112
|
-
|
|
113
|
-
// Verify integrity
|
|
114
|
-
await git.fsck('/repo')
|
|
115
|
-
|
|
116
|
-
// Garbage collection
|
|
117
|
-
await git.gc('/repo')
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
- OFS_DELTA and REF_DELTA compression
|
|
121
|
-
- Multi-pack indexes (MIDX)
|
|
122
|
-
- CRC32 verification
|
|
123
|
-
- Thin pack support for network transfer
|
|
124
|
-
|
|
125
|
-
### Wire Protocol
|
|
126
|
-
|
|
127
|
-
Smart HTTP protocol for git clients:
|
|
128
|
-
|
|
129
|
-
```typescript
|
|
130
|
-
// Serve git fetch/push
|
|
131
|
-
app.all('/repo.git/*', (req) => git.serve(req))
|
|
132
|
-
|
|
133
|
-
// Clone works
|
|
134
|
-
// git clone https://your-worker.dev/repo.git
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
- Capability negotiation
|
|
138
|
-
- Side-band progress reporting
|
|
139
|
-
- Multi-ack for efficiency
|
|
140
|
-
- Shallow clone support
|
|
141
|
-
|
|
142
|
-
### Merge & Diff
|
|
143
|
-
|
|
144
|
-
Full three-way merge with conflict detection:
|
|
145
|
-
|
|
146
|
-
```typescript
|
|
147
|
-
// Merge branches
|
|
148
|
-
const result = await git.merge('/repo', 'feature')
|
|
149
|
-
if (result.conflicts) {
|
|
150
|
-
console.log('Conflicts:', result.conflicts)
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// View diff
|
|
154
|
-
const diff = await git.diff('/repo', 'main', 'feature')
|
|
155
|
-
for (const file of diff.files) {
|
|
156
|
-
console.log(file.path, file.additions, file.deletions)
|
|
157
|
-
}
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### CLI Commands
|
|
161
|
-
|
|
162
|
-
Full command-line interface:
|
|
163
|
-
|
|
164
|
-
```typescript
|
|
165
|
-
import { cli } from 'gitx.do/cli'
|
|
166
|
-
|
|
167
|
-
await cli('init /repo')
|
|
168
|
-
await cli('add /repo .')
|
|
169
|
-
await cli('commit /repo -m "message"')
|
|
170
|
-
await cli('log /repo --oneline')
|
|
171
|
-
await cli('branch /repo feature')
|
|
172
|
-
await cli('checkout /repo feature')
|
|
173
|
-
await cli('merge /repo main')
|
|
174
|
-
await cli('status /repo')
|
|
175
|
-
await cli('diff /repo')
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
### MCP Tools
|
|
179
|
-
|
|
180
|
-
Model Context Protocol for AI agents:
|
|
181
|
-
|
|
182
|
-
```typescript
|
|
183
|
-
import { gitTools, invokeTool } from 'gitx.do/mcp'
|
|
184
|
-
|
|
185
|
-
// Available tools
|
|
186
|
-
// git_init, git_add, git_commit, git_log, git_diff, git_status,
|
|
187
|
-
// git_branch, git_checkout, git_merge, git_show, git_blame
|
|
188
|
-
|
|
189
|
-
await invokeTool('git_commit', {
|
|
190
|
-
repo: '/my-project',
|
|
191
|
-
message: 'Fix authentication bug'
|
|
192
|
-
})
|
|
193
|
-
|
|
194
|
-
await invokeTool('git_log', {
|
|
195
|
-
repo: '/my-project',
|
|
196
|
-
limit: 10
|
|
197
|
-
})
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
## Durable Object Integration
|
|
201
|
-
|
|
202
|
-
### As a Standalone DO
|
|
203
|
-
|
|
204
|
-
```typescript
|
|
205
|
-
import { GitDO } from 'gitx.do/do'
|
|
206
|
-
|
|
207
|
-
export { GitDO }
|
|
208
|
-
|
|
209
|
-
export default {
|
|
210
|
-
async fetch(request, env) {
|
|
211
|
-
const id = env.GIT.idFromName('repo-123')
|
|
212
|
-
const stub = env.GIT.get(id)
|
|
213
|
-
return stub.fetch(request)
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
```
|
|
15
|
+
- **Durable Object Integration** - GitRepoDO for full repository management
|
|
16
|
+
- **R2 Storage** - Packfile storage with tiered hot/warm/cold system
|
|
17
|
+
- **MCP Integration** - Model Context Protocol for AI assistant integration
|
|
18
|
+
- **Wire Protocol** - Git Smart HTTP protocol handlers
|
|
19
|
+
- **Mixins** - withGit, withFs for adding git capabilities to any DO
|
|
217
20
|
|
|
218
|
-
|
|
21
|
+
## Usage
|
|
219
22
|
|
|
220
23
|
```typescript
|
|
221
|
-
import {
|
|
222
|
-
import { withGit } from 'gitx.do/do'
|
|
24
|
+
import { GitRepoDO, GitModule, withGit } from 'gitx.do'
|
|
223
25
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
await this.$.git.add('.', 'src/')
|
|
227
|
-
await this.$.git.commit('.', 'Update source files')
|
|
26
|
+
// Export GitRepoDO for full repository management
|
|
27
|
+
export { GitRepoDO }
|
|
228
28
|
|
|
229
|
-
|
|
230
|
-
|
|
29
|
+
// Or use mixins for custom DOs
|
|
30
|
+
class MyDO extends withGit(DurableObject) {
|
|
31
|
+
async doSomething() {
|
|
32
|
+
await this.git.clone('https://github.com/org/repo')
|
|
33
|
+
const status = await this.git.status()
|
|
34
|
+
console.log(status)
|
|
231
35
|
}
|
|
232
36
|
}
|
|
233
37
|
```
|
|
234
38
|
|
|
235
|
-
|
|
39
|
+
## Architecture
|
|
236
40
|
|
|
237
|
-
```toml
|
|
238
|
-
# wrangler.toml
|
|
239
|
-
[[services]]
|
|
240
|
-
binding = "GITX"
|
|
241
|
-
service = "gitx-worker"
|
|
242
41
|
```
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
42
|
+
gitx.do
|
|
43
|
+
├── do/ # Durable Object implementations
|
|
44
|
+
│ ├── GitRepoDO # Full git repository DO
|
|
45
|
+
│ ├── GitModule # Git capability module
|
|
46
|
+
│ ├── FsModule # Filesystem capability
|
|
47
|
+
│ ├── withGit # Git mixin
|
|
48
|
+
│ └── withFs # Fs mixin
|
|
49
|
+
├── storage/ # Storage implementations
|
|
50
|
+
│ ├── r2-pack # R2 packfile storage
|
|
51
|
+
│ ├── tiered # Hot/warm/cold tiering
|
|
52
|
+
│ └── object-index # Object location tracking
|
|
53
|
+
├── wire/ # Git wire protocol
|
|
54
|
+
│ ├── smart-http # HTTP handlers
|
|
55
|
+
│ ├── pkt-line # Packet line format
|
|
56
|
+
│ └── capabilities # Protocol capabilities
|
|
57
|
+
└── mcp/ # MCP integration
|
|
58
|
+
├── tools # MCP tool definitions
|
|
59
|
+
└── adapter # Protocol adapter
|
|
246
60
|
```
|
|
247
61
|
|
|
248
|
-
##
|
|
249
|
-
|
|
250
|
-
### Repository Operations
|
|
251
|
-
|
|
252
|
-
| Method | Description |
|
|
253
|
-
|--------|-------------|
|
|
254
|
-
| `init(path)` | Initialize new repository |
|
|
255
|
-
| `clone(url, path)` | Clone remote repository |
|
|
256
|
-
| `status(path)` | Get working tree status |
|
|
257
|
-
| `log(path, options?)` | View commit history |
|
|
258
|
-
|
|
259
|
-
### Staging & Commits
|
|
260
|
-
|
|
261
|
-
| Method | Description |
|
|
262
|
-
|--------|-------------|
|
|
263
|
-
| `add(path, files)` | Stage files |
|
|
264
|
-
| `commit(path, message)` | Create commit |
|
|
265
|
-
| `reset(path, ref)` | Reset to commit |
|
|
266
|
-
|
|
267
|
-
### Branches & Merging
|
|
268
|
-
|
|
269
|
-
| Method | Description |
|
|
270
|
-
|--------|-------------|
|
|
271
|
-
| `branch(path, name)` | Create branch |
|
|
272
|
-
| `checkout(path, ref)` | Switch branches |
|
|
273
|
-
| `merge(path, branch)` | Merge branch |
|
|
274
|
-
| `rebase(path, onto)` | Rebase branch |
|
|
275
|
-
|
|
276
|
-
### Diff & Blame
|
|
277
|
-
|
|
278
|
-
| Method | Description |
|
|
279
|
-
|--------|-------------|
|
|
280
|
-
| `diff(path, a, b)` | Compare commits |
|
|
281
|
-
| `blame(path, file)` | Line-by-line history |
|
|
282
|
-
| `show(path, ref)` | Show commit details |
|
|
283
|
-
|
|
284
|
-
### Low-Level
|
|
285
|
-
|
|
286
|
-
| Method | Description |
|
|
287
|
-
|--------|-------------|
|
|
288
|
-
| `hashObject(path, data, type)` | Create object |
|
|
289
|
-
| `catFile(path, sha, type)` | Read object |
|
|
290
|
-
| `updateRef(path, ref, sha)` | Update reference |
|
|
291
|
-
| `pack(path, objects)` | Create packfile |
|
|
62
|
+
## Related
|
|
292
63
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
┌─────────────────────────────────────────────────────────┐
|
|
297
|
-
│ gitx.do │
|
|
298
|
-
├─────────────────────────────────────────────────────────┤
|
|
299
|
-
│ Git Commands (add, commit, branch, merge, etc.) │
|
|
300
|
-
├─────────────────────────────────────────────────────────┤
|
|
301
|
-
│ Object Model (blob, tree, commit, tag) │
|
|
302
|
-
├─────────────────────────────────────────────────────────┤
|
|
303
|
-
│ Pack Engine (delta, compression, indexes) │
|
|
304
|
-
├────────────────────┬────────────────────────────────────┤
|
|
305
|
-
│ Hot Tier │ Warm Tier │
|
|
306
|
-
│ (SQLite) │ (R2) │
|
|
307
|
-
│ │ │
|
|
308
|
-
│ • Loose objects │ • Pack files │
|
|
309
|
-
│ • References │ • Large blobs │
|
|
310
|
-
│ • Index │ • Archive │
|
|
311
|
-
└────────────────────┴────────────────────────────────────┘
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
## Comparison
|
|
315
|
-
|
|
316
|
-
| Feature | GitHub | GitLab | gitx.do |
|
|
317
|
-
|---------|--------|--------|---------|
|
|
318
|
-
| **Pricing** | $21/user/month | $29/user/month | Self-hosted |
|
|
319
|
-
| **Storage** | 1GB free | 5GB free | R2 (cheap) |
|
|
320
|
-
| **LFS bandwidth** | $0.0875/GB | Metered | R2 (no egress) |
|
|
321
|
-
| **Full protocol** | Yes | Yes | Yes |
|
|
322
|
-
| **Edge-native** | No | No | Yes |
|
|
323
|
-
| **AI-native API** | No | No | Yes |
|
|
324
|
-
| **Self-hosted** | Enterprise only | Complex | One-click |
|
|
325
|
-
|
|
326
|
-
## Use Cases
|
|
327
|
-
|
|
328
|
-
### AI Agent Version Control
|
|
329
|
-
|
|
330
|
-
Each AI agent gets its own repository:
|
|
331
|
-
|
|
332
|
-
```typescript
|
|
333
|
-
class CodeAgent extends withGit(DO) {
|
|
334
|
-
async generateCode(spec) {
|
|
335
|
-
const code = await this.ai.generate(spec)
|
|
336
|
-
|
|
337
|
-
await this.$.fs.writeFile('src/index.ts', code)
|
|
338
|
-
await this.$.git.add('.', 'src/')
|
|
339
|
-
await this.$.git.commit('.', `Implement: ${spec}`)
|
|
340
|
-
|
|
341
|
-
return this.$.git.log('.', { limit: 1 })
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
### Private Git Hosting
|
|
347
|
-
|
|
348
|
-
Your repositories on your infrastructure:
|
|
349
|
-
|
|
350
|
-
```typescript
|
|
351
|
-
export default GitX({
|
|
352
|
-
name: 'my-repos',
|
|
353
|
-
domain: 'git.mycompany.com',
|
|
354
|
-
})
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
### LFS Without Bandwidth Fees
|
|
358
|
-
|
|
359
|
-
R2 has no egress charges:
|
|
360
|
-
|
|
361
|
-
```typescript
|
|
362
|
-
await git.lfsTrack('/repo', '*.psd')
|
|
363
|
-
await git.lfsPush('/repo')
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
## Performance
|
|
367
|
-
|
|
368
|
-
- **5,684 tests** covering all operations
|
|
369
|
-
- **Full Git protocol** - clone, fetch, push all work
|
|
370
|
-
- **<10ms** for hot tier operations
|
|
371
|
-
- **Global edge** - 300+ Cloudflare locations
|
|
372
|
-
- **Zero cold starts** - Durable Objects
|
|
64
|
+
- [@dotdo/gitx](../core) - Pure git implementation (zero CF deps)
|
|
65
|
+
- [fsx.do](https://fsx.do) - Filesystem for Workers
|
|
66
|
+
- [bashx.do](https://bashx.do) - Shell execution for Workers
|
|
373
67
|
|
|
374
68
|
## License
|
|
375
69
|
|
|
376
70
|
MIT
|
|
377
|
-
|
|
378
|
-
## Links
|
|
379
|
-
|
|
380
|
-
- [GitHub](https://github.com/dot-do/gitx)
|
|
381
|
-
- [Documentation](https://gitx.do)
|
|
382
|
-
- [.do](https://do.org.ai)
|
|
383
|
-
- [Platform.do](https://platform.do)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Logging infrastructure for GitRepoDO.
|
|
3
|
+
*
|
|
4
|
+
* Provides structured logging with configurable levels and output.
|
|
5
|
+
*
|
|
6
|
+
* @module do/logger
|
|
7
|
+
*/
|
|
8
|
+
import { Logger, LogLevel, LogEntry } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* Options for creating a logger.
|
|
11
|
+
*/
|
|
12
|
+
export interface LoggerOptions {
|
|
13
|
+
/** Minimum log level to output */
|
|
14
|
+
minLevel?: LogLevel;
|
|
15
|
+
/** DO namespace for context */
|
|
16
|
+
ns?: string;
|
|
17
|
+
/** DO type for context */
|
|
18
|
+
$type?: string;
|
|
19
|
+
/** Custom log handler */
|
|
20
|
+
handler?: (entry: LogEntry) => void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create a logger instance.
|
|
24
|
+
*
|
|
25
|
+
* @param options - Logger configuration options
|
|
26
|
+
* @returns Logger instance
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const logger = createLogger({ minLevel: LogLevel.INFO, ns: 'my-repo' })
|
|
31
|
+
* logger.info('Repository initialized', { branch: 'main' })
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare function createLogger(options?: LoggerOptions): Logger;
|
|
35
|
+
/**
|
|
36
|
+
* Create a child logger with additional context.
|
|
37
|
+
*
|
|
38
|
+
* @param parent - Parent logger
|
|
39
|
+
* @param context - Additional context to include in all log entries
|
|
40
|
+
* @returns Child logger instance
|
|
41
|
+
*/
|
|
42
|
+
export declare function createChildLogger(parent: Logger, context: Record<string, unknown>): Logger;
|
|
43
|
+
/**
|
|
44
|
+
* No-op logger that discards all messages.
|
|
45
|
+
* Useful for testing or when logging is disabled.
|
|
46
|
+
*/
|
|
47
|
+
export declare const noopLogger: Logger;
|
|
48
|
+
export type { Logger, LogEntry };
|
|
49
|
+
export { LogLevel };
|
|
50
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/do/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAMpD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,+BAA+B;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yBAAyB;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;CACpC;AAqCD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAmDhE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAkBR;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,MAKxB,CAAA;AAGD,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Logging infrastructure for GitRepoDO.
|
|
3
|
+
*
|
|
4
|
+
* Provides structured logging with configurable levels and output.
|
|
5
|
+
*
|
|
6
|
+
* @module do/logger
|
|
7
|
+
*/
|
|
8
|
+
import { LogLevel } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* Default log handler that outputs to console.
|
|
11
|
+
*/
|
|
12
|
+
function defaultLogHandler(entry) {
|
|
13
|
+
const timestamp = new Date(entry.timestamp).toISOString();
|
|
14
|
+
const contextStr = entry.context
|
|
15
|
+
? ` ${JSON.stringify(entry.context)}`
|
|
16
|
+
: '';
|
|
17
|
+
switch (entry.level) {
|
|
18
|
+
case LogLevel.DEBUG:
|
|
19
|
+
console.debug(`[${timestamp}] DEBUG: ${entry.message}${contextStr}`);
|
|
20
|
+
break;
|
|
21
|
+
case LogLevel.INFO:
|
|
22
|
+
console.info(`[${timestamp}] INFO: ${entry.message}${contextStr}`);
|
|
23
|
+
break;
|
|
24
|
+
case LogLevel.WARN:
|
|
25
|
+
console.warn(`[${timestamp}] WARN: ${entry.message}${contextStr}`);
|
|
26
|
+
break;
|
|
27
|
+
case LogLevel.ERROR:
|
|
28
|
+
console.error(`[${timestamp}] ERROR: ${entry.message}${contextStr}`);
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Log level priority for comparison.
|
|
34
|
+
*/
|
|
35
|
+
const LOG_LEVEL_PRIORITY = {
|
|
36
|
+
[LogLevel.DEBUG]: 0,
|
|
37
|
+
[LogLevel.INFO]: 1,
|
|
38
|
+
[LogLevel.WARN]: 2,
|
|
39
|
+
[LogLevel.ERROR]: 3,
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Create a logger instance.
|
|
43
|
+
*
|
|
44
|
+
* @param options - Logger configuration options
|
|
45
|
+
* @returns Logger instance
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const logger = createLogger({ minLevel: LogLevel.INFO, ns: 'my-repo' })
|
|
50
|
+
* logger.info('Repository initialized', { branch: 'main' })
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export function createLogger(options = {}) {
|
|
54
|
+
const { minLevel = LogLevel.INFO, ns, $type, handler = defaultLogHandler, } = options;
|
|
55
|
+
const baseContext = {
|
|
56
|
+
...(ns && { ns }),
|
|
57
|
+
...($type && { $type }),
|
|
58
|
+
};
|
|
59
|
+
function shouldLog(level) {
|
|
60
|
+
return LOG_LEVEL_PRIORITY[level] >= LOG_LEVEL_PRIORITY[minLevel];
|
|
61
|
+
}
|
|
62
|
+
function log(level, message, context) {
|
|
63
|
+
if (!shouldLog(level))
|
|
64
|
+
return;
|
|
65
|
+
const entry = {
|
|
66
|
+
level,
|
|
67
|
+
message,
|
|
68
|
+
timestamp: Date.now(),
|
|
69
|
+
context: context ? { ...baseContext, ...context } : baseContext,
|
|
70
|
+
};
|
|
71
|
+
handler(entry);
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
debug(message, context) {
|
|
75
|
+
log(LogLevel.DEBUG, message, context);
|
|
76
|
+
},
|
|
77
|
+
info(message, context) {
|
|
78
|
+
log(LogLevel.INFO, message, context);
|
|
79
|
+
},
|
|
80
|
+
warn(message, context) {
|
|
81
|
+
log(LogLevel.WARN, message, context);
|
|
82
|
+
},
|
|
83
|
+
error(message, context) {
|
|
84
|
+
log(LogLevel.ERROR, message, context);
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create a child logger with additional context.
|
|
90
|
+
*
|
|
91
|
+
* @param parent - Parent logger
|
|
92
|
+
* @param context - Additional context to include in all log entries
|
|
93
|
+
* @returns Child logger instance
|
|
94
|
+
*/
|
|
95
|
+
export function createChildLogger(parent, context) {
|
|
96
|
+
return {
|
|
97
|
+
debug(message, childContext) {
|
|
98
|
+
parent.debug(message, { ...context, ...childContext });
|
|
99
|
+
},
|
|
100
|
+
info(message, childContext) {
|
|
101
|
+
parent.info(message, { ...context, ...childContext });
|
|
102
|
+
},
|
|
103
|
+
warn(message, childContext) {
|
|
104
|
+
parent.warn(message, { ...context, ...childContext });
|
|
105
|
+
},
|
|
106
|
+
error(message, childContext) {
|
|
107
|
+
parent.error(message, { ...context, ...childContext });
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* No-op logger that discards all messages.
|
|
113
|
+
* Useful for testing or when logging is disabled.
|
|
114
|
+
*/
|
|
115
|
+
export const noopLogger = {
|
|
116
|
+
debug: () => { },
|
|
117
|
+
info: () => { },
|
|
118
|
+
warn: () => { },
|
|
119
|
+
error: () => { },
|
|
120
|
+
};
|
|
121
|
+
export { LogLevel };
|
|
122
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/do/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
* - `git_content`: Staged file content for commits
|
|
17
17
|
* - `exec`: Execution safety settings and policies for BashModule
|
|
18
18
|
*
|
|
19
|
-
* @module
|
|
19
|
+
* @module do/schema
|
|
20
20
|
*
|
|
21
21
|
* @example
|
|
22
22
|
* ```typescript
|
|
23
|
-
* import { SchemaManager, DurableObjectStorage } from './
|
|
23
|
+
* import { SchemaManager, DurableObjectStorage } from './do/schema'
|
|
24
24
|
*
|
|
25
25
|
* // Initialize schema on first access
|
|
26
26
|
* const schemaManager = new SchemaManager(storage)
|
|
@@ -122,7 +122,7 @@ export declare const SCHEMA_VERSION = 1;
|
|
|
122
122
|
* - `idx_git_content_repo_path`: Fast staged file lookup
|
|
123
123
|
* - `idx_exec_name`: Fast lookup by policy name
|
|
124
124
|
*/
|
|
125
|
-
export declare const SCHEMA_SQL = "\n-- Git objects (blobs, trees, commits, tags)\nCREATE TABLE IF NOT EXISTS objects (sha TEXT PRIMARY KEY, type TEXT NOT NULL, size INTEGER NOT NULL, data BLOB NOT NULL, created_at INTEGER);\n\n-- Object location index for tiered storage\n-- Tracks object locations across storage tiers (hot/r2/parquet)\n-- pack_id and offset are used for R2 and Parquet tiers where objects are stored in packfiles\nCREATE TABLE IF NOT EXISTS object_index (sha TEXT PRIMARY KEY, tier TEXT NOT NULL DEFAULT 'hot', pack_id TEXT, offset INTEGER, size INTEGER, type TEXT, updated_at INTEGER);\n\n-- Hot objects cache\nCREATE TABLE IF NOT EXISTS hot_objects (sha TEXT PRIMARY KEY, type TEXT NOT NULL, data BLOB NOT NULL, accessed_at INTEGER, created_at INTEGER);\n\n-- Write-ahead log\nCREATE TABLE IF NOT EXISTS wal (id INTEGER PRIMARY KEY AUTOINCREMENT, operation TEXT NOT NULL, payload BLOB NOT NULL, created_at INTEGER, flushed INTEGER DEFAULT 0);\n\n-- Refs table\nCREATE TABLE IF NOT EXISTS refs (name TEXT PRIMARY KEY, target TEXT NOT NULL, type TEXT DEFAULT 'sha', updated_at INTEGER);\n\n-- Git repository bindings for GitModule integration\n-- Stores repository configuration and sync state\nCREATE TABLE IF NOT EXISTS git (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n repo TEXT NOT NULL UNIQUE,\n path TEXT,\n branch TEXT NOT NULL DEFAULT 'main',\n commit TEXT,\n last_sync INTEGER,\n object_prefix TEXT DEFAULT 'git/objects',\n created_at INTEGER,\n updated_at INTEGER\n);\n\n-- Git branches table for tracking branch state per repository\n-- Each repository can have multiple branches tracked\nCREATE TABLE IF NOT EXISTS git_branches (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n repo_id INTEGER NOT NULL REFERENCES git(id) ON DELETE CASCADE,\n name TEXT NOT NULL,\n head TEXT,\n upstream TEXT,\n tracking INTEGER DEFAULT 0,\n ahead INTEGER DEFAULT 0,\n behind INTEGER DEFAULT 0,\n created_at INTEGER,\n updated_at INTEGER,\n UNIQUE(repo_id, name)\n);\n\n-- Git content table for staged files awaiting commit\n-- Stores file references using integer rowid foreign key for efficient lookups\n-- file_id references the shared files table for unified filesystem integration\nCREATE TABLE IF NOT EXISTS git_content (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n repo_id INTEGER NOT NULL REFERENCES git(id) ON DELETE CASCADE,\n file_id INTEGER REFERENCES files(id) ON DELETE SET NULL,\n path TEXT NOT NULL,\n content BLOB,\n mode TEXT DEFAULT '100644',\n status TEXT NOT NULL DEFAULT 'staged',\n sha TEXT,\n created_at INTEGER,\n updated_at INTEGER,\n UNIQUE(repo_id, path)\n);\n\n-- Exec table for BashModule execution safety settings and policies\n-- Stores blocked commands, confirmation requirements, and execution policies\nCREATE TABLE IF NOT EXISTS exec (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n blocked_commands TEXT,\n require_confirmation INTEGER DEFAULT 1,\n default_timeout INTEGER DEFAULT 30000,\n default_cwd TEXT DEFAULT '/',\n allowed_patterns TEXT,\n denied_patterns TEXT,\n max_concurrent INTEGER DEFAULT 5,\n enabled INTEGER DEFAULT 1,\n created_at INTEGER,\n updated_at INTEGER\n);\n\n-- Indexes\nCREATE INDEX IF NOT EXISTS idx_objects_type ON objects(type);\nCREATE INDEX IF NOT EXISTS idx_wal_flushed ON wal(flushed);\nCREATE INDEX IF NOT EXISTS idx_hot_objects_accessed ON hot_objects(accessed_at);\nCREATE INDEX IF NOT EXISTS idx_object_index_tier ON object_index(tier);\nCREATE INDEX IF NOT EXISTS idx_object_index_pack_id ON object_index(pack_id);\nCREATE INDEX IF NOT EXISTS idx_git_branches_repo ON git_branches(repo_id);\nCREATE INDEX IF NOT EXISTS idx_git_content_repo_path ON git_content(repo_id, path);\nCREATE INDEX IF NOT EXISTS idx_git_content_status ON git_content(status);\nCREATE INDEX IF NOT EXISTS idx_git_content_file_id ON git_content(file_id);\nCREATE INDEX IF NOT EXISTS idx_exec_name ON exec(name);\nCREATE INDEX IF NOT EXISTS idx_exec_enabled ON exec(enabled);\n";
|
|
125
|
+
export declare const SCHEMA_SQL = "\n-- Git objects (blobs, trees, commits, tags)\nCREATE TABLE IF NOT EXISTS objects (sha TEXT PRIMARY KEY, type TEXT NOT NULL, size INTEGER NOT NULL, data BLOB NOT NULL, created_at INTEGER);\n\n-- Object location index for tiered storage\n-- Tracks object locations across storage tiers (hot/r2/parquet)\n-- pack_id and offset are used for R2 and Parquet tiers where objects are stored in packfiles\n-- chunked and chunk_count are used for large blobs (>=2MB) stored in 2MB chunks for DO SQLite cost optimization\nCREATE TABLE IF NOT EXISTS object_index (sha TEXT PRIMARY KEY, tier TEXT NOT NULL DEFAULT 'hot', pack_id TEXT, offset INTEGER, size INTEGER, type TEXT, updated_at INTEGER, chunked INTEGER DEFAULT 0, chunk_count INTEGER DEFAULT 0);\n\n-- Hot objects cache\nCREATE TABLE IF NOT EXISTS hot_objects (sha TEXT PRIMARY KEY, type TEXT NOT NULL, data BLOB NOT NULL, accessed_at INTEGER, created_at INTEGER);\n\n-- Write-ahead log\nCREATE TABLE IF NOT EXISTS wal (id INTEGER PRIMARY KEY AUTOINCREMENT, operation TEXT NOT NULL, payload BLOB NOT NULL, created_at INTEGER, flushed INTEGER DEFAULT 0);\n\n-- Refs table\nCREATE TABLE IF NOT EXISTS refs (name TEXT PRIMARY KEY, target TEXT NOT NULL, type TEXT DEFAULT 'sha', updated_at INTEGER);\n\n-- Git repository bindings for GitModule integration\n-- Stores repository configuration and sync state\nCREATE TABLE IF NOT EXISTS git (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n repo TEXT NOT NULL UNIQUE,\n path TEXT,\n branch TEXT NOT NULL DEFAULT 'main',\n commit TEXT,\n last_sync INTEGER,\n object_prefix TEXT DEFAULT 'git/objects',\n created_at INTEGER,\n updated_at INTEGER\n);\n\n-- Git branches table for tracking branch state per repository\n-- Each repository can have multiple branches tracked\nCREATE TABLE IF NOT EXISTS git_branches (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n repo_id INTEGER NOT NULL REFERENCES git(id) ON DELETE CASCADE,\n name TEXT NOT NULL,\n head TEXT,\n upstream TEXT,\n tracking INTEGER DEFAULT 0,\n ahead INTEGER DEFAULT 0,\n behind INTEGER DEFAULT 0,\n created_at INTEGER,\n updated_at INTEGER,\n UNIQUE(repo_id, name)\n);\n\n-- Git content table for staged files awaiting commit\n-- Stores file references using integer rowid foreign key for efficient lookups\n-- file_id references the shared files table for unified filesystem integration\nCREATE TABLE IF NOT EXISTS git_content (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n repo_id INTEGER NOT NULL REFERENCES git(id) ON DELETE CASCADE,\n file_id INTEGER REFERENCES files(id) ON DELETE SET NULL,\n path TEXT NOT NULL,\n content BLOB,\n mode TEXT DEFAULT '100644',\n status TEXT NOT NULL DEFAULT 'staged',\n sha TEXT,\n created_at INTEGER,\n updated_at INTEGER,\n UNIQUE(repo_id, path)\n);\n\n-- Exec table for BashModule execution safety settings and policies\n-- Stores blocked commands, confirmation requirements, and execution policies\nCREATE TABLE IF NOT EXISTS exec (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n blocked_commands TEXT,\n require_confirmation INTEGER DEFAULT 1,\n default_timeout INTEGER DEFAULT 30000,\n default_cwd TEXT DEFAULT '/',\n allowed_patterns TEXT,\n denied_patterns TEXT,\n max_concurrent INTEGER DEFAULT 5,\n enabled INTEGER DEFAULT 1,\n created_at INTEGER,\n updated_at INTEGER\n);\n\n-- Indexes\nCREATE INDEX IF NOT EXISTS idx_objects_type ON objects(type);\nCREATE INDEX IF NOT EXISTS idx_wal_flushed ON wal(flushed);\nCREATE INDEX IF NOT EXISTS idx_hot_objects_accessed ON hot_objects(accessed_at);\nCREATE INDEX IF NOT EXISTS idx_object_index_tier ON object_index(tier);\nCREATE INDEX IF NOT EXISTS idx_object_index_pack_id ON object_index(pack_id);\nCREATE INDEX IF NOT EXISTS idx_git_branches_repo ON git_branches(repo_id);\nCREATE INDEX IF NOT EXISTS idx_git_content_repo_path ON git_content(repo_id, path);\nCREATE INDEX IF NOT EXISTS idx_git_content_status ON git_content(status);\nCREATE INDEX IF NOT EXISTS idx_git_content_file_id ON git_content(file_id);\nCREATE INDEX IF NOT EXISTS idx_exec_name ON exec(name);\nCREATE INDEX IF NOT EXISTS idx_exec_enabled ON exec(enabled);\n";
|
|
126
126
|
/**
|
|
127
127
|
* Manager for database schema initialization and validation.
|
|
128
128
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/do/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAMH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,GAAG,EAAE;QACH;;;;;;;;;;;;;;;WAeG;QACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG;YAAE,OAAO,IAAI,OAAO,EAAE,CAAA;SAAE,CAAA;KACpE,CAAA;CACF;AAMD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc,IAAI,CAAA;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,UAAU,0iIA+FtB,CAAA;AAeD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,aAAa;IAMZ,OAAO,CAAC,OAAO;IAL3B;;;;OAIG;gBACiB,OAAO,EAAE,oBAAoB;IAEjD;;;;;;;;;;;OAWG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC;;;;;;;;;;;;;;OAcG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKzC;;;;;;;;;;;;;;;;;;OAkBG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CASzC"}
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
* - `git_content`: Staged file content for commits
|
|
17
17
|
* - `exec`: Execution safety settings and policies for BashModule
|
|
18
18
|
*
|
|
19
|
-
* @module
|
|
19
|
+
* @module do/schema
|
|
20
20
|
*
|
|
21
21
|
* @example
|
|
22
22
|
* ```typescript
|
|
23
|
-
* import { SchemaManager, DurableObjectStorage } from './
|
|
23
|
+
* import { SchemaManager, DurableObjectStorage } from './do/schema'
|
|
24
24
|
*
|
|
25
25
|
* // Initialize schema on first access
|
|
26
26
|
* const schemaManager = new SchemaManager(storage)
|
|
@@ -84,7 +84,8 @@ CREATE TABLE IF NOT EXISTS objects (sha TEXT PRIMARY KEY, type TEXT NOT NULL, si
|
|
|
84
84
|
-- Object location index for tiered storage
|
|
85
85
|
-- Tracks object locations across storage tiers (hot/r2/parquet)
|
|
86
86
|
-- pack_id and offset are used for R2 and Parquet tiers where objects are stored in packfiles
|
|
87
|
-
|
|
87
|
+
-- chunked and chunk_count are used for large blobs (>=2MB) stored in 2MB chunks for DO SQLite cost optimization
|
|
88
|
+
CREATE TABLE IF NOT EXISTS object_index (sha TEXT PRIMARY KEY, tier TEXT NOT NULL DEFAULT 'hot', pack_id TEXT, offset INTEGER, size INTEGER, type TEXT, updated_at INTEGER, chunked INTEGER DEFAULT 0, chunk_count INTEGER DEFAULT 0);
|
|
88
89
|
|
|
89
90
|
-- Hot objects cache
|
|
90
91
|
CREATE TABLE IF NOT EXISTS hot_objects (sha TEXT PRIMARY KEY, type TEXT NOT NULL, data BLOB NOT NULL, accessed_at INTEGER, created_at INTEGER);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/do/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAqDH,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAA;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+FzB,CAAA;AAED;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;AAE/H,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,OAAO,aAAa;IAMJ;IALpB;;;;OAIG;IACH,YAAoB,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;IAAG,CAAC;IAErD;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACnC,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,gBAAgB;QACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;QAC3C,OAAO,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAClC,mDAAmD,CACpD,CAAA;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAwB,CAAA;QACrD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAE1C,OAAO,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IACnE,CAAC;CACF"}
|