@enbox/gitd 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +177 -0
- package/README.md +134 -0
- package/dist/esm/ci.js +76 -0
- package/dist/esm/ci.js.map +1 -0
- package/dist/esm/cli/agent.js +86 -0
- package/dist/esm/cli/agent.js.map +1 -0
- package/dist/esm/cli/commands/ci.js +278 -0
- package/dist/esm/cli/commands/ci.js.map +1 -0
- package/dist/esm/cli/commands/clone.js +77 -0
- package/dist/esm/cli/commands/clone.js.map +1 -0
- package/dist/esm/cli/commands/daemon.js +132 -0
- package/dist/esm/cli/commands/daemon.js.map +1 -0
- package/dist/esm/cli/commands/github-api.js +36 -0
- package/dist/esm/cli/commands/github-api.js.map +1 -0
- package/dist/esm/cli/commands/init.js +69 -0
- package/dist/esm/cli/commands/init.js.map +1 -0
- package/dist/esm/cli/commands/issue.js +293 -0
- package/dist/esm/cli/commands/issue.js.map +1 -0
- package/dist/esm/cli/commands/log.js +90 -0
- package/dist/esm/cli/commands/log.js.map +1 -0
- package/dist/esm/cli/commands/migrate.js +444 -0
- package/dist/esm/cli/commands/migrate.js.map +1 -0
- package/dist/esm/cli/commands/notification.js +141 -0
- package/dist/esm/cli/commands/notification.js.map +1 -0
- package/dist/esm/cli/commands/org.js +353 -0
- package/dist/esm/cli/commands/org.js.map +1 -0
- package/dist/esm/cli/commands/patch.js +375 -0
- package/dist/esm/cli/commands/patch.js.map +1 -0
- package/dist/esm/cli/commands/registry.js +501 -0
- package/dist/esm/cli/commands/registry.js.map +1 -0
- package/dist/esm/cli/commands/release.js +197 -0
- package/dist/esm/cli/commands/release.js.map +1 -0
- package/dist/esm/cli/commands/repo.js +148 -0
- package/dist/esm/cli/commands/repo.js.map +1 -0
- package/dist/esm/cli/commands/serve.js +148 -0
- package/dist/esm/cli/commands/serve.js.map +1 -0
- package/dist/esm/cli/commands/setup.js +92 -0
- package/dist/esm/cli/commands/setup.js.map +1 -0
- package/dist/esm/cli/commands/shim.js +75 -0
- package/dist/esm/cli/commands/shim.js.map +1 -0
- package/dist/esm/cli/commands/social.js +206 -0
- package/dist/esm/cli/commands/social.js.map +1 -0
- package/dist/esm/cli/commands/web.js +36 -0
- package/dist/esm/cli/commands/web.js.map +1 -0
- package/dist/esm/cli/commands/wiki.js +185 -0
- package/dist/esm/cli/commands/wiki.js.map +1 -0
- package/dist/esm/cli/flags.js +29 -0
- package/dist/esm/cli/flags.js.map +1 -0
- package/dist/esm/cli/main.js +331 -0
- package/dist/esm/cli/main.js.map +1 -0
- package/dist/esm/cli/repo-context.js +53 -0
- package/dist/esm/cli/repo-context.js.map +1 -0
- package/dist/esm/daemon/adapter.js +18 -0
- package/dist/esm/daemon/adapter.js.map +1 -0
- package/dist/esm/daemon/adapters/github.js +112 -0
- package/dist/esm/daemon/adapters/github.js.map +1 -0
- package/dist/esm/daemon/adapters/go.js +51 -0
- package/dist/esm/daemon/adapters/go.js.map +1 -0
- package/dist/esm/daemon/adapters/index.js +32 -0
- package/dist/esm/daemon/adapters/index.js.map +1 -0
- package/dist/esm/daemon/adapters/npm.js +51 -0
- package/dist/esm/daemon/adapters/npm.js.map +1 -0
- package/dist/esm/daemon/adapters/oci.js +62 -0
- package/dist/esm/daemon/adapters/oci.js.map +1 -0
- package/dist/esm/daemon/index.js +12 -0
- package/dist/esm/daemon/index.js.map +1 -0
- package/dist/esm/daemon/server.js +167 -0
- package/dist/esm/daemon/server.js.map +1 -0
- package/dist/esm/git-remote/credential-helper.js +106 -0
- package/dist/esm/git-remote/credential-helper.js.map +1 -0
- package/dist/esm/git-remote/credential-main.js +109 -0
- package/dist/esm/git-remote/credential-main.js.map +1 -0
- package/dist/esm/git-remote/index.js +10 -0
- package/dist/esm/git-remote/index.js.map +1 -0
- package/dist/esm/git-remote/main.js +78 -0
- package/dist/esm/git-remote/main.js.map +1 -0
- package/dist/esm/git-remote/parse-url.js +60 -0
- package/dist/esm/git-remote/parse-url.js.map +1 -0
- package/dist/esm/git-remote/resolve.js +175 -0
- package/dist/esm/git-remote/resolve.js.map +1 -0
- package/dist/esm/git-remote/service.js +82 -0
- package/dist/esm/git-remote/service.js.map +1 -0
- package/dist/esm/git-server/auth.js +211 -0
- package/dist/esm/git-server/auth.js.map +1 -0
- package/dist/esm/git-server/bundle-restore.js +180 -0
- package/dist/esm/git-server/bundle-restore.js.map +1 -0
- package/dist/esm/git-server/bundle-sync.js +233 -0
- package/dist/esm/git-server/bundle-sync.js.map +1 -0
- package/dist/esm/git-server/did-service.js +73 -0
- package/dist/esm/git-server/did-service.js.map +1 -0
- package/dist/esm/git-server/git-backend.js +186 -0
- package/dist/esm/git-server/git-backend.js.map +1 -0
- package/dist/esm/git-server/http-handler.js +295 -0
- package/dist/esm/git-server/http-handler.js.map +1 -0
- package/dist/esm/git-server/index.js +16 -0
- package/dist/esm/git-server/index.js.map +1 -0
- package/dist/esm/git-server/push-authorizer.js +62 -0
- package/dist/esm/git-server/push-authorizer.js.map +1 -0
- package/dist/esm/git-server/ref-sync.js +132 -0
- package/dist/esm/git-server/ref-sync.js.map +1 -0
- package/dist/esm/git-server/server.js +185 -0
- package/dist/esm/git-server/server.js.map +1 -0
- package/dist/esm/git-server/verify.js +109 -0
- package/dist/esm/git-server/verify.js.map +1 -0
- package/dist/esm/github-shim/helpers.js +273 -0
- package/dist/esm/github-shim/helpers.js.map +1 -0
- package/dist/esm/github-shim/index.js +13 -0
- package/dist/esm/github-shim/index.js.map +1 -0
- package/dist/esm/github-shim/issues.js +318 -0
- package/dist/esm/github-shim/issues.js.map +1 -0
- package/dist/esm/github-shim/pulls.js +423 -0
- package/dist/esm/github-shim/pulls.js.map +1 -0
- package/dist/esm/github-shim/releases.js +154 -0
- package/dist/esm/github-shim/releases.js.map +1 -0
- package/dist/esm/github-shim/repos.js +86 -0
- package/dist/esm/github-shim/repos.js.map +1 -0
- package/dist/esm/github-shim/server.js +351 -0
- package/dist/esm/github-shim/server.js.map +1 -0
- package/dist/esm/github-shim/users.js +61 -0
- package/dist/esm/github-shim/users.js.map +1 -0
- package/dist/esm/index.js +26 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/indexer/api.js +132 -0
- package/dist/esm/indexer/api.js.map +1 -0
- package/dist/esm/indexer/crawler.js +256 -0
- package/dist/esm/indexer/crawler.js.map +1 -0
- package/dist/esm/indexer/index.js +9 -0
- package/dist/esm/indexer/index.js.map +1 -0
- package/dist/esm/indexer/main.js +76 -0
- package/dist/esm/indexer/main.js.map +1 -0
- package/dist/esm/indexer/store.js +334 -0
- package/dist/esm/indexer/store.js.map +1 -0
- package/dist/esm/issues.js +133 -0
- package/dist/esm/issues.js.map +1 -0
- package/dist/esm/notifications.js +47 -0
- package/dist/esm/notifications.js.map +1 -0
- package/dist/esm/org.js +90 -0
- package/dist/esm/org.js.map +1 -0
- package/dist/esm/patches.js +136 -0
- package/dist/esm/patches.js.map +1 -0
- package/dist/esm/refs.js +54 -0
- package/dist/esm/refs.js.map +1 -0
- package/dist/esm/registry.js +81 -0
- package/dist/esm/registry.js.map +1 -0
- package/dist/esm/releases.js +78 -0
- package/dist/esm/releases.js.map +1 -0
- package/dist/esm/repo.js +150 -0
- package/dist/esm/repo.js.map +1 -0
- package/dist/esm/resolver/index.js +10 -0
- package/dist/esm/resolver/index.js.map +1 -0
- package/dist/esm/resolver/resolve.js +189 -0
- package/dist/esm/resolver/resolve.js.map +1 -0
- package/dist/esm/resolver/trust-chain.js +155 -0
- package/dist/esm/resolver/trust-chain.js.map +1 -0
- package/dist/esm/resolver/verify.js +186 -0
- package/dist/esm/resolver/verify.js.map +1 -0
- package/dist/esm/shims/go/index.js +9 -0
- package/dist/esm/shims/go/index.js.map +1 -0
- package/dist/esm/shims/go/proxy.js +275 -0
- package/dist/esm/shims/go/proxy.js.map +1 -0
- package/dist/esm/shims/go/server.js +70 -0
- package/dist/esm/shims/go/server.js.map +1 -0
- package/dist/esm/shims/index.js +15 -0
- package/dist/esm/shims/index.js.map +1 -0
- package/dist/esm/shims/npm/index.js +9 -0
- package/dist/esm/shims/npm/index.js.map +1 -0
- package/dist/esm/shims/npm/registry.js +234 -0
- package/dist/esm/shims/npm/registry.js.map +1 -0
- package/dist/esm/shims/npm/server.js +72 -0
- package/dist/esm/shims/npm/server.js.map +1 -0
- package/dist/esm/shims/oci/index.js +9 -0
- package/dist/esm/shims/oci/index.js.map +1 -0
- package/dist/esm/shims/oci/registry.js +276 -0
- package/dist/esm/shims/oci/registry.js.map +1 -0
- package/dist/esm/shims/oci/server.js +82 -0
- package/dist/esm/shims/oci/server.js.map +1 -0
- package/dist/esm/social.js +70 -0
- package/dist/esm/social.js.map +1 -0
- package/dist/esm/web/html.js +123 -0
- package/dist/esm/web/html.js.map +1 -0
- package/dist/esm/web/index.js +7 -0
- package/dist/esm/web/index.js.map +1 -0
- package/dist/esm/web/routes.js +420 -0
- package/dist/esm/web/routes.js.map +1 -0
- package/dist/esm/web/server.js +225 -0
- package/dist/esm/web/server.js.map +1 -0
- package/dist/esm/wiki.js +63 -0
- package/dist/esm/wiki.js.map +1 -0
- package/dist/types/ci.d.ts +203 -0
- package/dist/types/ci.d.ts.map +1 -0
- package/dist/types/cli/agent.d.ts +59 -0
- package/dist/types/cli/agent.d.ts.map +1 -0
- package/dist/types/cli/commands/ci.d.ts +16 -0
- package/dist/types/cli/commands/ci.d.ts.map +1 -0
- package/dist/types/cli/commands/clone.d.ts +13 -0
- package/dist/types/cli/commands/clone.d.ts.map +1 -0
- package/dist/types/cli/commands/daemon.d.ts +29 -0
- package/dist/types/cli/commands/daemon.d.ts.map +1 -0
- package/dist/types/cli/commands/github-api.d.ts +14 -0
- package/dist/types/cli/commands/github-api.d.ts.map +1 -0
- package/dist/types/cli/commands/init.d.ts +11 -0
- package/dist/types/cli/commands/init.d.ts.map +1 -0
- package/dist/types/cli/commands/issue.d.ts +16 -0
- package/dist/types/cli/commands/issue.d.ts.map +1 -0
- package/dist/types/cli/commands/log.d.ts +13 -0
- package/dist/types/cli/commands/log.d.ts.map +1 -0
- package/dist/types/cli/commands/migrate.d.ts +19 -0
- package/dist/types/cli/commands/migrate.d.ts.map +1 -0
- package/dist/types/cli/commands/notification.d.ts +16 -0
- package/dist/types/cli/commands/notification.d.ts.map +1 -0
- package/dist/types/cli/commands/org.d.ts +19 -0
- package/dist/types/cli/commands/org.d.ts.map +1 -0
- package/dist/types/cli/commands/patch.d.ts +17 -0
- package/dist/types/cli/commands/patch.d.ts.map +1 -0
- package/dist/types/cli/commands/registry.d.ts +25 -0
- package/dist/types/cli/commands/registry.d.ts.map +1 -0
- package/dist/types/cli/commands/release.d.ts +13 -0
- package/dist/types/cli/commands/release.d.ts.map +1 -0
- package/dist/types/cli/commands/repo.d.ts +15 -0
- package/dist/types/cli/commands/repo.d.ts.map +1 -0
- package/dist/types/cli/commands/serve.d.ts +22 -0
- package/dist/types/cli/commands/serve.d.ts.map +1 -0
- package/dist/types/cli/commands/setup.d.ts +16 -0
- package/dist/types/cli/commands/setup.d.ts.map +1 -0
- package/dist/types/cli/commands/shim.d.ts +16 -0
- package/dist/types/cli/commands/shim.d.ts.map +1 -0
- package/dist/types/cli/commands/social.d.ts +19 -0
- package/dist/types/cli/commands/social.d.ts.map +1 -0
- package/dist/types/cli/commands/web.d.ts +14 -0
- package/dist/types/cli/commands/web.d.ts.map +1 -0
- package/dist/types/cli/commands/wiki.d.ts +14 -0
- package/dist/types/cli/commands/wiki.d.ts.map +1 -0
- package/dist/types/cli/flags.d.ts +16 -0
- package/dist/types/cli/flags.d.ts.map +1 -0
- package/dist/types/cli/main.d.ts +69 -0
- package/dist/types/cli/main.d.ts.map +1 -0
- package/dist/types/cli/repo-context.d.ts +30 -0
- package/dist/types/cli/repo-context.d.ts.map +1 -0
- package/dist/types/daemon/adapter.d.ts +74 -0
- package/dist/types/daemon/adapter.d.ts.map +1 -0
- package/dist/types/daemon/adapters/github.d.ts +10 -0
- package/dist/types/daemon/adapters/github.d.ts.map +1 -0
- package/dist/types/daemon/adapters/go.d.ts +10 -0
- package/dist/types/daemon/adapters/go.d.ts.map +1 -0
- package/dist/types/daemon/adapters/index.d.ts +22 -0
- package/dist/types/daemon/adapters/index.d.ts.map +1 -0
- package/dist/types/daemon/adapters/npm.d.ts +10 -0
- package/dist/types/daemon/adapters/npm.d.ts.map +1 -0
- package/dist/types/daemon/adapters/oci.d.ts +10 -0
- package/dist/types/daemon/adapters/oci.d.ts.map +1 -0
- package/dist/types/daemon/index.d.ts +14 -0
- package/dist/types/daemon/index.d.ts.map +1 -0
- package/dist/types/daemon/server.d.ts +55 -0
- package/dist/types/daemon/server.d.ts.map +1 -0
- package/dist/types/git-remote/credential-helper.d.ts +49 -0
- package/dist/types/git-remote/credential-helper.d.ts.map +1 -0
- package/dist/types/git-remote/credential-main.d.ts +24 -0
- package/dist/types/git-remote/credential-main.d.ts.map +1 -0
- package/dist/types/git-remote/index.d.ts +10 -0
- package/dist/types/git-remote/index.d.ts.map +1 -0
- package/dist/types/git-remote/main.d.ts +23 -0
- package/dist/types/git-remote/main.d.ts.map +1 -0
- package/dist/types/git-remote/parse-url.d.ts +32 -0
- package/dist/types/git-remote/parse-url.d.ts.map +1 -0
- package/dist/types/git-remote/resolve.d.ts +30 -0
- package/dist/types/git-remote/resolve.d.ts.map +1 -0
- package/dist/types/git-remote/service.d.ts +75 -0
- package/dist/types/git-remote/service.d.ts.map +1 -0
- package/dist/types/git-server/auth.d.ts +129 -0
- package/dist/types/git-server/auth.d.ts.map +1 -0
- package/dist/types/git-server/bundle-restore.d.ts +48 -0
- package/dist/types/git-server/bundle-restore.d.ts.map +1 -0
- package/dist/types/git-server/bundle-sync.d.ts +90 -0
- package/dist/types/git-server/bundle-sync.d.ts.map +1 -0
- package/dist/types/git-server/did-service.d.ts +26 -0
- package/dist/types/git-server/did-service.d.ts.map +1 -0
- package/dist/types/git-server/git-backend.d.ts +84 -0
- package/dist/types/git-server/git-backend.d.ts.map +1 -0
- package/dist/types/git-server/http-handler.d.ts +73 -0
- package/dist/types/git-server/http-handler.d.ts.map +1 -0
- package/dist/types/git-server/index.d.ts +16 -0
- package/dist/types/git-server/index.d.ts.map +1 -0
- package/dist/types/git-server/push-authorizer.d.ts +38 -0
- package/dist/types/git-server/push-authorizer.d.ts.map +1 -0
- package/dist/types/git-server/ref-sync.d.ts +52 -0
- package/dist/types/git-server/ref-sync.d.ts.map +1 -0
- package/dist/types/git-server/server.d.ts +70 -0
- package/dist/types/git-server/server.d.ts.map +1 -0
- package/dist/types/git-server/verify.d.ts +12 -0
- package/dist/types/git-server/verify.d.ts.map +1 -0
- package/dist/types/github-shim/helpers.d.ts +108 -0
- package/dist/types/github-shim/helpers.d.ts.map +1 -0
- package/dist/types/github-shim/index.d.ts +15 -0
- package/dist/types/github-shim/index.d.ts.map +1 -0
- package/dist/types/github-shim/issues.d.ts +24 -0
- package/dist/types/github-shim/issues.d.ts.map +1 -0
- package/dist/types/github-shim/pulls.d.ts +31 -0
- package/dist/types/github-shim/pulls.d.ts.map +1 -0
- package/dist/types/github-shim/releases.d.ts +18 -0
- package/dist/types/github-shim/releases.d.ts.map +1 -0
- package/dist/types/github-shim/repos.d.ts +21 -0
- package/dist/types/github-shim/repos.d.ts.map +1 -0
- package/dist/types/github-shim/server.d.ts +53 -0
- package/dist/types/github-shim/server.d.ts.map +1 -0
- package/dist/types/github-shim/users.d.ts +17 -0
- package/dist/types/github-shim/users.d.ts.map +1 -0
- package/dist/types/index.d.ts +26 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/indexer/api.d.ts +32 -0
- package/dist/types/indexer/api.d.ts.map +1 -0
- package/dist/types/indexer/crawler.d.ts +72 -0
- package/dist/types/indexer/crawler.d.ts.map +1 -0
- package/dist/types/indexer/index.d.ts +12 -0
- package/dist/types/indexer/index.d.ts.map +1 -0
- package/dist/types/indexer/main.d.ts +21 -0
- package/dist/types/indexer/main.d.ts.map +1 -0
- package/dist/types/indexer/store.d.ts +168 -0
- package/dist/types/indexer/store.d.ts.map +1 -0
- package/dist/types/issues.d.ts +395 -0
- package/dist/types/issues.d.ts.map +1 -0
- package/dist/types/notifications.d.ts +93 -0
- package/dist/types/notifications.d.ts.map +1 -0
- package/dist/types/org.d.ts +232 -0
- package/dist/types/org.d.ts.map +1 -0
- package/dist/types/patches.d.ts +410 -0
- package/dist/types/patches.d.ts.map +1 -0
- package/dist/types/refs.d.ts +114 -0
- package/dist/types/refs.d.ts.map +1 -0
- package/dist/types/registry.d.ts +212 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/releases.d.ts +204 -0
- package/dist/types/releases.d.ts.map +1 -0
- package/dist/types/repo.d.ts +450 -0
- package/dist/types/repo.d.ts.map +1 -0
- package/dist/types/resolver/index.d.ts +13 -0
- package/dist/types/resolver/index.d.ts.map +1 -0
- package/dist/types/resolver/resolve.d.ts +80 -0
- package/dist/types/resolver/resolve.d.ts.map +1 -0
- package/dist/types/resolver/trust-chain.d.ts +54 -0
- package/dist/types/resolver/trust-chain.d.ts.map +1 -0
- package/dist/types/resolver/verify.d.ts +62 -0
- package/dist/types/resolver/verify.d.ts.map +1 -0
- package/dist/types/shims/go/index.d.ts +11 -0
- package/dist/types/shims/go/index.d.ts.map +1 -0
- package/dist/types/shims/go/proxy.d.ts +51 -0
- package/dist/types/shims/go/proxy.d.ts.map +1 -0
- package/dist/types/shims/go/server.d.ts +23 -0
- package/dist/types/shims/go/server.d.ts.map +1 -0
- package/dist/types/shims/index.d.ts +18 -0
- package/dist/types/shims/index.d.ts.map +1 -0
- package/dist/types/shims/npm/index.d.ts +11 -0
- package/dist/types/shims/npm/index.d.ts.map +1 -0
- package/dist/types/shims/npm/registry.d.ts +46 -0
- package/dist/types/shims/npm/registry.d.ts.map +1 -0
- package/dist/types/shims/npm/server.d.ts +23 -0
- package/dist/types/shims/npm/server.d.ts.map +1 -0
- package/dist/types/shims/oci/index.d.ts +11 -0
- package/dist/types/shims/oci/index.d.ts.map +1 -0
- package/dist/types/shims/oci/registry.d.ts +56 -0
- package/dist/types/shims/oci/registry.d.ts.map +1 -0
- package/dist/types/shims/oci/server.d.ts +23 -0
- package/dist/types/shims/oci/server.d.ts.map +1 -0
- package/dist/types/social.d.ts +162 -0
- package/dist/types/social.d.ts.map +1 -0
- package/dist/types/web/html.d.ts +23 -0
- package/dist/types/web/html.d.ts.map +1 -0
- package/dist/types/web/index.d.ts +8 -0
- package/dist/types/web/index.d.ts.map +1 -0
- package/dist/types/web/routes.d.ts +21 -0
- package/dist/types/web/routes.d.ts.map +1 -0
- package/dist/types/web/server.d.ts +38 -0
- package/dist/types/web/server.d.ts.map +1 -0
- package/dist/types/wiki.d.ts +143 -0
- package/dist/types/wiki.d.ts.map +1 -0
- package/package.json +108 -0
- package/schemas/ci/check-run.json +23 -0
- package/schemas/ci/check-suite.json +23 -0
- package/schemas/issues/assignment.json +17 -0
- package/schemas/issues/comment.json +14 -0
- package/schemas/issues/issue.json +20 -0
- package/schemas/issues/label.json +17 -0
- package/schemas/issues/reaction.json +14 -0
- package/schemas/issues/status-change.json +14 -0
- package/schemas/notifications/notification.json +20 -0
- package/schemas/org/org-member.json +17 -0
- package/schemas/org/org.json +26 -0
- package/schemas/org/team-member.json +17 -0
- package/schemas/org/team.json +17 -0
- package/schemas/patches/merge-result.json +14 -0
- package/schemas/patches/patch-status-change.json +14 -0
- package/schemas/patches/patch.json +20 -0
- package/schemas/patches/review-comment.json +17 -0
- package/schemas/patches/review.json +14 -0
- package/schemas/patches/revision.json +30 -0
- package/schemas/refs/git-ref.json +32 -0
- package/schemas/registry/attestation.json +23 -0
- package/schemas/registry/package-version.json +23 -0
- package/schemas/registry/package.json +32 -0
- package/schemas/releases/release.json +17 -0
- package/schemas/repo/collaborator.json +17 -0
- package/schemas/repo/repo.json +35 -0
- package/schemas/repo/settings.json +39 -0
- package/schemas/repo/topic.json +14 -0
- package/schemas/repo/webhook.json +26 -0
- package/schemas/social/activity.json +23 -0
- package/schemas/social/follow.json +17 -0
- package/schemas/social/star.json +20 -0
- package/schemas/wiki/wiki-history.json +20 -0
- package/schemas/wiki/wiki-page.json +17 -0
- package/src/ci.ts +118 -0
- package/src/cli/agent.ts +117 -0
- package/src/cli/commands/ci.ts +300 -0
- package/src/cli/commands/clone.ts +78 -0
- package/src/cli/commands/daemon.ts +129 -0
- package/src/cli/commands/github-api.ts +30 -0
- package/src/cli/commands/init.ts +69 -0
- package/src/cli/commands/issue.ts +321 -0
- package/src/cli/commands/log.ts +106 -0
- package/src/cli/commands/migrate.ts +525 -0
- package/src/cli/commands/notification.ts +148 -0
- package/src/cli/commands/org.ts +381 -0
- package/src/cli/commands/patch.ts +413 -0
- package/src/cli/commands/registry.ts +542 -0
- package/src/cli/commands/release.ts +189 -0
- package/src/cli/commands/repo.ts +160 -0
- package/src/cli/commands/serve.ts +153 -0
- package/src/cli/commands/setup.ts +97 -0
- package/src/cli/commands/shim.ts +79 -0
- package/src/cli/commands/social.ts +221 -0
- package/src/cli/commands/web.ts +30 -0
- package/src/cli/commands/wiki.ts +199 -0
- package/src/cli/flags.ts +28 -0
- package/src/cli/main.ts +350 -0
- package/src/cli/repo-context.ts +55 -0
- package/src/daemon/adapter.ts +95 -0
- package/src/daemon/adapters/github.ts +86 -0
- package/src/daemon/adapters/go.ts +47 -0
- package/src/daemon/adapters/index.ts +36 -0
- package/src/daemon/adapters/npm.ts +47 -0
- package/src/daemon/adapters/oci.ts +59 -0
- package/src/daemon/index.ts +16 -0
- package/src/daemon/server.ts +204 -0
- package/src/git-remote/credential-helper.ts +114 -0
- package/src/git-remote/credential-main.ts +118 -0
- package/src/git-remote/index.ts +10 -0
- package/src/git-remote/main.ts +74 -0
- package/src/git-remote/parse-url.ts +81 -0
- package/src/git-remote/resolve.ts +207 -0
- package/src/git-remote/service.ts +126 -0
- package/src/git-server/auth.ts +308 -0
- package/src/git-server/bundle-restore.ts +217 -0
- package/src/git-server/bundle-sync.ts +300 -0
- package/src/git-server/did-service.ts +77 -0
- package/src/git-server/git-backend.ts +222 -0
- package/src/git-server/http-handler.ts +386 -0
- package/src/git-server/index.ts +16 -0
- package/src/git-server/push-authorizer.ts +77 -0
- package/src/git-server/ref-sync.ts +166 -0
- package/src/git-server/server.ts +236 -0
- package/src/git-server/verify.ts +116 -0
- package/src/github-shim/helpers.ts +311 -0
- package/src/github-shim/index.ts +35 -0
- package/src/github-shim/issues.ts +389 -0
- package/src/github-shim/pulls.ts +500 -0
- package/src/github-shim/releases.ts +185 -0
- package/src/github-shim/repos.ts +95 -0
- package/src/github-shim/server.ts +334 -0
- package/src/github-shim/users.ts +63 -0
- package/src/index.ts +26 -0
- package/src/indexer/api.ts +162 -0
- package/src/indexer/crawler.ts +290 -0
- package/src/indexer/index.ts +22 -0
- package/src/indexer/main.ts +83 -0
- package/src/indexer/store.ts +408 -0
- package/src/issues.ts +200 -0
- package/src/notifications.ts +80 -0
- package/src/org.ts +147 -0
- package/src/patches.ts +203 -0
- package/src/refs.ts +94 -0
- package/src/registry.ts +132 -0
- package/src/releases.ts +124 -0
- package/src/repo.ts +234 -0
- package/src/resolver/index.ts +42 -0
- package/src/resolver/resolve.ts +244 -0
- package/src/resolver/trust-chain.ts +217 -0
- package/src/resolver/verify.ts +237 -0
- package/src/shims/go/index.ts +14 -0
- package/src/shims/go/proxy.ts +336 -0
- package/src/shims/go/server.ts +82 -0
- package/src/shims/index.ts +20 -0
- package/src/shims/npm/index.ts +14 -0
- package/src/shims/npm/registry.ts +288 -0
- package/src/shims/npm/server.ts +84 -0
- package/src/shims/oci/index.ts +14 -0
- package/src/shims/oci/registry.ts +334 -0
- package/src/shims/oci/server.ts +94 -0
- package/src/social.ts +116 -0
- package/src/web/html.ts +120 -0
- package/src/web/index.ts +8 -0
- package/src/web/routes.ts +449 -0
- package/src/web/server.ts +256 -0
- package/src/wiki.ts +102 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gitd release` — create, list, and show releases with immutable assets.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* gitd release create <tag> [--name <name>] [--body <text>] [--commit <sha>] [--prerelease] [--draft]
|
|
6
|
+
* gitd release show <tag>
|
|
7
|
+
* gitd release list [--limit <n>]
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { AgentContext } from '../agent.js';
|
|
13
|
+
|
|
14
|
+
import { DateSort } from '@enbox/dwn-sdk-js';
|
|
15
|
+
|
|
16
|
+
import { flagValue } from '../flags.js';
|
|
17
|
+
import { getRepoContextId } from '../repo-context.js';
|
|
18
|
+
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Sub-command dispatch
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
|
|
23
|
+
export async function releaseCommand(ctx: AgentContext, args: string[]): Promise<void> {
|
|
24
|
+
const sub = args[0];
|
|
25
|
+
const rest = args.slice(1);
|
|
26
|
+
|
|
27
|
+
switch (sub) {
|
|
28
|
+
case 'create': return releaseCreate(ctx, rest);
|
|
29
|
+
case 'show': return releaseShow(ctx, rest);
|
|
30
|
+
case 'list':
|
|
31
|
+
case 'ls': return releaseList(ctx, rest);
|
|
32
|
+
default:
|
|
33
|
+
console.error('Usage: gitd release <create|show|list>');
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// release create
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
|
|
42
|
+
async function releaseCreate(ctx: AgentContext, args: string[]): Promise<void> {
|
|
43
|
+
const tagName = args[0];
|
|
44
|
+
const name = flagValue(args, '--name') ?? tagName;
|
|
45
|
+
const body = flagValue(args, '--body') ?? '';
|
|
46
|
+
const commitSha = flagValue(args, '--commit');
|
|
47
|
+
const prerelease = args.includes('--prerelease');
|
|
48
|
+
const draft = args.includes('--draft');
|
|
49
|
+
|
|
50
|
+
if (!tagName) {
|
|
51
|
+
console.error('Usage: gitd release create <tag> [--name <name>] [--body <text>] [--commit <sha>] [--prerelease] [--draft]');
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const repoContextId = await getRepoContextId(ctx);
|
|
56
|
+
|
|
57
|
+
const tags: Record<string, unknown> = { tagName };
|
|
58
|
+
if (commitSha) { tags.commitSha = commitSha; }
|
|
59
|
+
if (prerelease) { tags.prerelease = true; }
|
|
60
|
+
if (draft) { tags.draft = true; }
|
|
61
|
+
|
|
62
|
+
const { status, record } = await ctx.releases.records.create('repo/release' as any, {
|
|
63
|
+
data : { name, body },
|
|
64
|
+
tags,
|
|
65
|
+
parentContextId : repoContextId,
|
|
66
|
+
} as any);
|
|
67
|
+
|
|
68
|
+
if (status.code >= 300) {
|
|
69
|
+
console.error(`Failed to create release: ${status.code} ${status.detail}`);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
console.log(`Created release ${tagName}${name !== tagName ? ` ("${name}")` : ''}`);
|
|
74
|
+
console.log(` Record ID: ${record.id}`);
|
|
75
|
+
if (prerelease) { console.log(' Pre-release: yes'); }
|
|
76
|
+
if (draft) { console.log(' Draft: yes'); }
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
// release show
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
|
|
83
|
+
async function releaseShow(ctx: AgentContext, args: string[]): Promise<void> {
|
|
84
|
+
const tagName = args[0];
|
|
85
|
+
if (!tagName) {
|
|
86
|
+
console.error('Usage: gitd release show <tag>');
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const repoContextId = await getRepoContextId(ctx);
|
|
91
|
+
const release = await findReleaseByTag(ctx, repoContextId, tagName);
|
|
92
|
+
if (!release) {
|
|
93
|
+
console.error(`Release ${tagName} not found.`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const data = await release.data.json();
|
|
98
|
+
const tags = release.tags as Record<string, unknown> | undefined;
|
|
99
|
+
const date = release.dateCreated?.slice(0, 10) ?? '';
|
|
100
|
+
const commit = tags?.commitSha as string | undefined;
|
|
101
|
+
const prerelease = tags?.prerelease === true;
|
|
102
|
+
const draft = tags?.draft === true;
|
|
103
|
+
|
|
104
|
+
console.log(`Release: ${data.name ?? tagName}`);
|
|
105
|
+
console.log(` Tag: ${tags?.tagName ?? tagName}`);
|
|
106
|
+
if (commit) { console.log(` Commit: ${commit}`); }
|
|
107
|
+
console.log(` Created: ${date}`);
|
|
108
|
+
if (prerelease) { console.log(' Pre-release: yes'); }
|
|
109
|
+
if (draft) { console.log(' Draft: yes'); }
|
|
110
|
+
console.log(` ID: ${release.id}`);
|
|
111
|
+
|
|
112
|
+
if (data.body) {
|
|
113
|
+
console.log('');
|
|
114
|
+
console.log(` ${data.body}`);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Fetch assets.
|
|
118
|
+
const { records: assets } = await ctx.releases.records.query('repo/release/asset' as any, {
|
|
119
|
+
filter: { contextId: release.contextId },
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
if (assets.length > 0) {
|
|
123
|
+
console.log('');
|
|
124
|
+
console.log(` Assets (${assets.length}):`);
|
|
125
|
+
for (const asset of assets) {
|
|
126
|
+
const assetTags = asset.tags as Record<string, unknown> | undefined;
|
|
127
|
+
const filename = assetTags?.filename ?? 'unknown';
|
|
128
|
+
const size = assetTags?.size as number | undefined;
|
|
129
|
+
const sizeStr = size ? ` (${formatBytes(size)})` : '';
|
|
130
|
+
console.log(` ${filename}${sizeStr}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
// release list
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
|
|
139
|
+
async function releaseList(ctx: AgentContext, args: string[]): Promise<void> {
|
|
140
|
+
const limit = parseInt(flagValue(args, '--limit') ?? '20', 10);
|
|
141
|
+
const repoContextId = await getRepoContextId(ctx);
|
|
142
|
+
|
|
143
|
+
const { records } = await ctx.releases.records.query('repo/release' as any, {
|
|
144
|
+
filter : { contextId: repoContextId },
|
|
145
|
+
dateSort : DateSort.CreatedDescending,
|
|
146
|
+
pagination : { limit },
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
if (records.length === 0) {
|
|
150
|
+
console.log('No releases found.');
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
console.log(`Releases (${records.length}):\n`);
|
|
155
|
+
for (const rec of records) {
|
|
156
|
+
const data = await rec.data.json();
|
|
157
|
+
const tags = rec.tags as Record<string, unknown> | undefined;
|
|
158
|
+
const tagName = tags?.tagName ?? '?';
|
|
159
|
+
const date = rec.dateCreated?.slice(0, 10) ?? '';
|
|
160
|
+
const prerelease = tags?.prerelease === true ? ' [pre-release]' : '';
|
|
161
|
+
const draft = tags?.draft === true ? ' [draft]' : '';
|
|
162
|
+
console.log(` ${String(tagName).padEnd(20)} ${data.name ?? ''}${prerelease}${draft} ${date}`);
|
|
163
|
+
console.log(`${''.padEnd(22)}id: ${rec.id}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
// Helpers
|
|
169
|
+
// ---------------------------------------------------------------------------
|
|
170
|
+
|
|
171
|
+
async function findReleaseByTag(
|
|
172
|
+
ctx: AgentContext,
|
|
173
|
+
repoContextId: string,
|
|
174
|
+
tagName: string,
|
|
175
|
+
): Promise<any | undefined> {
|
|
176
|
+
const { records } = await ctx.releases.records.query('repo/release' as any, {
|
|
177
|
+
filter: {
|
|
178
|
+
contextId : repoContextId,
|
|
179
|
+
tags : { tagName },
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
return records[0];
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function formatBytes(bytes: number): string {
|
|
186
|
+
if (bytes < 1024) { return `${bytes} B`; }
|
|
187
|
+
if (bytes < 1024 * 1024) { return `${(bytes / 1024).toFixed(1)} KB`; }
|
|
188
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
189
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gitd repo` — repository management commands.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* gitd repo info Show repository metadata
|
|
6
|
+
* gitd repo add-collaborator <did> <role> Grant a role
|
|
7
|
+
* gitd repo remove-collaborator <did> Revoke a collaborator role
|
|
8
|
+
*
|
|
9
|
+
* Roles: maintainer, triager, contributor
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { AgentContext } from '../agent.js';
|
|
15
|
+
|
|
16
|
+
import { flagValue } from '../flags.js';
|
|
17
|
+
import { getRepoContextId } from '../repo-context.js';
|
|
18
|
+
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Valid roles
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
|
|
23
|
+
const VALID_ROLES = ['maintainer', 'triager', 'contributor'] as const;
|
|
24
|
+
type Role = typeof VALID_ROLES[number];
|
|
25
|
+
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Sub-command dispatch
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
|
|
30
|
+
export async function repoCommand(ctx: AgentContext, args: string[]): Promise<void> {
|
|
31
|
+
const sub = args[0];
|
|
32
|
+
const rest = args.slice(1);
|
|
33
|
+
|
|
34
|
+
switch (sub) {
|
|
35
|
+
case 'info': return repoInfo(ctx);
|
|
36
|
+
case 'add-collaborator': return addCollaborator(ctx, rest);
|
|
37
|
+
case 'remove-collaborator': return removeCollaborator(ctx, rest);
|
|
38
|
+
default:
|
|
39
|
+
console.error('Usage: gitd repo <info|add-collaborator|remove-collaborator>');
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// repo info
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
|
|
48
|
+
async function repoInfo(ctx: AgentContext): Promise<void> {
|
|
49
|
+
const { records } = await ctx.repo.records.query('repo');
|
|
50
|
+
|
|
51
|
+
if (records.length === 0) {
|
|
52
|
+
console.error('No repository found. Run `gitd init <name>` first.');
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const record = records[0];
|
|
57
|
+
const data = await record.data.json();
|
|
58
|
+
|
|
59
|
+
console.log(`Repository: ${data.name}`);
|
|
60
|
+
console.log(` DID: ${ctx.did}`);
|
|
61
|
+
console.log(` Record ID: ${record.id}`);
|
|
62
|
+
console.log(` Context ID: ${record.contextId}`);
|
|
63
|
+
console.log(` Default Branch: ${data.defaultBranch}`);
|
|
64
|
+
if (data.description) {
|
|
65
|
+
console.log(` Description: ${data.description}`);
|
|
66
|
+
}
|
|
67
|
+
if (data.dwnEndpoints?.length > 0) {
|
|
68
|
+
console.log(` DWN Endpoints: ${data.dwnEndpoints.join(', ')}`);
|
|
69
|
+
}
|
|
70
|
+
if (data.gitEndpoints && data.gitEndpoints.length > 0) {
|
|
71
|
+
console.log(` Git Endpoints: ${data.gitEndpoints.join(', ')}`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// List collaborators per role.
|
|
75
|
+
for (const role of VALID_ROLES) {
|
|
76
|
+
const { records: collabs } = await ctx.repo.records.query(`repo/${role}` as any);
|
|
77
|
+
if (collabs.length > 0) {
|
|
78
|
+
console.log(`\n ${role}s:`);
|
|
79
|
+
for (const collab of collabs) {
|
|
80
|
+
const collabData = await collab.data.json();
|
|
81
|
+
const alias = collabData.alias ? ` (${collabData.alias})` : '';
|
|
82
|
+
console.log(` - ${collabData.did}${alias}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
// repo add-collaborator
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
|
|
92
|
+
async function addCollaborator(ctx: AgentContext, args: string[]): Promise<void> {
|
|
93
|
+
const did = args[0];
|
|
94
|
+
const role = args[1] as Role | undefined;
|
|
95
|
+
const alias = flagValue(args, '--alias') ?? flagValue(args, '-a');
|
|
96
|
+
|
|
97
|
+
if (!did || !role) {
|
|
98
|
+
console.error('Usage: gitd repo add-collaborator <did> <role> [--alias <name>]');
|
|
99
|
+
console.error(` Roles: ${VALID_ROLES.join(', ')}`);
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (!VALID_ROLES.includes(role)) {
|
|
104
|
+
console.error(`Invalid role: ${role}. Must be one of: ${VALID_ROLES.join(', ')}`);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const repoContextId = await getRepoContextId(ctx);
|
|
109
|
+
|
|
110
|
+
const { status, record } = await ctx.repo.records.create(`repo/${role}` as any, {
|
|
111
|
+
data : { did, alias: alias ?? '' },
|
|
112
|
+
tags : { did },
|
|
113
|
+
parentContextId : repoContextId,
|
|
114
|
+
recipient : did,
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
if (status.code >= 300) {
|
|
118
|
+
console.error(`Failed to add collaborator: ${status.code} ${status.detail}`);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
console.log(`Added ${role}: ${did}`);
|
|
123
|
+
console.log(` Record ID: ${record.id}`);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
// repo remove-collaborator
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
|
|
130
|
+
async function removeCollaborator(ctx: AgentContext, args: string[]): Promise<void> {
|
|
131
|
+
const did = args[0];
|
|
132
|
+
|
|
133
|
+
if (!did) {
|
|
134
|
+
console.error('Usage: gitd repo remove-collaborator <did>');
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
let found = false;
|
|
139
|
+
|
|
140
|
+
for (const role of VALID_ROLES) {
|
|
141
|
+
const { records: collabs } = await ctx.repo.records.query(`repo/${role}` as any, {
|
|
142
|
+
filter: { tags: { did } },
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
for (const collab of collabs) {
|
|
146
|
+
const { status } = await collab.delete();
|
|
147
|
+
if (status.code < 300) {
|
|
148
|
+
console.log(`Removed ${role} role for ${did} (recordId: ${collab.id})`);
|
|
149
|
+
found = true;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (!found) {
|
|
155
|
+
console.error(`No collaborator roles found for DID: ${did}`);
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gitd serve` — start the git transport sidecar server.
|
|
3
|
+
*
|
|
4
|
+
* Starts a smart HTTP git server that serves bare repositories and
|
|
5
|
+
* authenticates pushes using DID-signed tokens. After each successful
|
|
6
|
+
* push, git refs are mirrored to DWN records via ForgeRefsProtocol and
|
|
7
|
+
* a git bundle is synced to a DWN record via ForgeRepoProtocol.
|
|
8
|
+
*
|
|
9
|
+
* Usage: gitd serve [--port <port>] [--repos <path>] [--prefix <path>]
|
|
10
|
+
* [--public-url <url>]
|
|
11
|
+
*
|
|
12
|
+
* Environment:
|
|
13
|
+
* GITD_PORT — server port (default: 9418)
|
|
14
|
+
* GITD_REPOS — base path for bare repos (default: ./repos)
|
|
15
|
+
* GITD_PREFIX — URL path prefix (default: none)
|
|
16
|
+
* GITD_PUBLIC_URL — public URL for the server (enables DID service registration)
|
|
17
|
+
*
|
|
18
|
+
* @module
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import type { AgentContext } from '../agent.js';
|
|
22
|
+
|
|
23
|
+
import { createBundleSyncer } from '../../git-server/bundle-sync.js';
|
|
24
|
+
import { createDidSignatureVerifier } from '../../git-server/verify.js';
|
|
25
|
+
import { createDwnPushAuthorizer } from '../../git-server/push-authorizer.js';
|
|
26
|
+
import { createGitServer } from '../../git-server/server.js';
|
|
27
|
+
import { createPushAuthenticator } from '../../git-server/auth.js';
|
|
28
|
+
import { createRefSyncer } from '../../git-server/ref-sync.js';
|
|
29
|
+
import { getRepoContext } from '../repo-context.js';
|
|
30
|
+
import { registerGitService } from '../../git-server/did-service.js';
|
|
31
|
+
import { restoreFromBundles } from '../../git-server/bundle-restore.js';
|
|
32
|
+
import { flagValue, parsePort } from '../flags.js';
|
|
33
|
+
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Command
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
|
|
38
|
+
export async function serveCommand(ctx: AgentContext, args: string[]): Promise<void> {
|
|
39
|
+
const port = parsePort(flagValue(args, '--port') ?? process.env.GITD_PORT ?? '9418');
|
|
40
|
+
const basePath = flagValue(args, '--repos') ?? process.env.GITD_REPOS ?? './repos';
|
|
41
|
+
const pathPrefix = flagValue(args, '--prefix') ?? process.env.GITD_PREFIX;
|
|
42
|
+
const publicUrl = flagValue(args, '--public-url') ?? process.env.GITD_PUBLIC_URL;
|
|
43
|
+
|
|
44
|
+
// Look up the repo context (contextId + visibility) for ref/bundle syncing.
|
|
45
|
+
const { contextId: repoContextId, visibility } = await getRepoContext(ctx);
|
|
46
|
+
|
|
47
|
+
// DID-based signature verification for push tokens.
|
|
48
|
+
const verifySignature = createDidSignatureVerifier();
|
|
49
|
+
|
|
50
|
+
// DWN-based push authorization — checks role records.
|
|
51
|
+
const authorizePush = createDwnPushAuthorizer({
|
|
52
|
+
repo : ctx.repo,
|
|
53
|
+
ownerDid : ctx.did,
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const authenticatePush = createPushAuthenticator({
|
|
57
|
+
verifySignature,
|
|
58
|
+
authorizePush,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// Post-push callbacks — run ref sync and bundle sync after each push.
|
|
62
|
+
const syncRefs = createRefSyncer({
|
|
63
|
+
refs : ctx.refs,
|
|
64
|
+
repoContextId : repoContextId,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
const syncBundle = createBundleSyncer({
|
|
68
|
+
repo : ctx.repo,
|
|
69
|
+
repoContextId : repoContextId,
|
|
70
|
+
visibility,
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Compose both post-push callbacks into a single handler.
|
|
74
|
+
const onPushComplete = async (did: string, repo: string, repoPath: string): Promise<void> => {
|
|
75
|
+
await Promise.all([
|
|
76
|
+
syncRefs(did, repo, repoPath),
|
|
77
|
+
syncBundle(did, repo, repoPath),
|
|
78
|
+
]);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// Auto-restore repos from DWN bundles when not found on disk.
|
|
82
|
+
const onRepoNotFound = async (_did: string, _repo: string, repoPath: string): Promise<boolean> => {
|
|
83
|
+
console.log(`Restoring repo from DWN bundles → ${repoPath}`);
|
|
84
|
+
const result = await restoreFromBundles({ repo: ctx.repo, repoPath });
|
|
85
|
+
if (result.success) {
|
|
86
|
+
console.log(`Restored ${result.bundlesApplied} bundle(s), tip: ${result.tipCommit}`);
|
|
87
|
+
} else {
|
|
88
|
+
console.error(`Bundle restore failed: ${result.error}`);
|
|
89
|
+
}
|
|
90
|
+
return result.success;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const server = await createGitServer({
|
|
94
|
+
basePath,
|
|
95
|
+
port,
|
|
96
|
+
pathPrefix,
|
|
97
|
+
authenticatePush,
|
|
98
|
+
onPushComplete,
|
|
99
|
+
onRepoNotFound,
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// Register the git endpoint in the DID document (if public URL is provided).
|
|
103
|
+
if (publicUrl) {
|
|
104
|
+
try {
|
|
105
|
+
await registerGitService(ctx.web5, publicUrl);
|
|
106
|
+
console.log(`Registered GitTransport service: ${publicUrl}`);
|
|
107
|
+
|
|
108
|
+
// Update the repo record with the git endpoint.
|
|
109
|
+
const { records } = await ctx.repo.records.query('repo');
|
|
110
|
+
if (records.length > 0) {
|
|
111
|
+
const record = records[0];
|
|
112
|
+
const data = await record.data.json();
|
|
113
|
+
const gitEndpoints = data.gitEndpoints ?? [];
|
|
114
|
+
if (!gitEndpoints.includes(publicUrl)) {
|
|
115
|
+
gitEndpoints.push(publicUrl);
|
|
116
|
+
await record.update({
|
|
117
|
+
data: { ...data, gitEndpoints },
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
} catch (err) {
|
|
122
|
+
console.warn(`Warning: Could not register git service: ${(err as Error).message}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
console.log(`gitd server listening on port ${server.port}`);
|
|
127
|
+
console.log(` DID: ${ctx.did}`);
|
|
128
|
+
console.log(` Repos: ${basePath}`);
|
|
129
|
+
if (pathPrefix) {
|
|
130
|
+
console.log(` Prefix: ${pathPrefix}`);
|
|
131
|
+
}
|
|
132
|
+
if (publicUrl) {
|
|
133
|
+
console.log(` Public: ${publicUrl}`);
|
|
134
|
+
}
|
|
135
|
+
console.log('');
|
|
136
|
+
console.log(`Clone URL: git clone http://localhost:${server.port}/${ctx.did}/<repo>`);
|
|
137
|
+
if (publicUrl) {
|
|
138
|
+
console.log(`Public: git clone did::${ctx.did}/<repo>`);
|
|
139
|
+
}
|
|
140
|
+
console.log('');
|
|
141
|
+
console.log('Press Ctrl+C to stop.');
|
|
142
|
+
|
|
143
|
+
// Keep the process alive.
|
|
144
|
+
await new Promise<void>(() => {
|
|
145
|
+
process.on('SIGINT', async () => {
|
|
146
|
+
console.log('\nShutting down...');
|
|
147
|
+
await server.stop();
|
|
148
|
+
process.exit(0);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gitd setup` — configure git to use DID-based remotes and push auth.
|
|
3
|
+
*
|
|
4
|
+
* Creates symlinks for `git-remote-did` and `git-remote-did-credential` in
|
|
5
|
+
* a directory on the user's PATH, and configures the git credential helper
|
|
6
|
+
* for any host using the DID transport.
|
|
7
|
+
*
|
|
8
|
+
* Usage: gitd setup [--bin-dir <path>]
|
|
9
|
+
*
|
|
10
|
+
* The default bin directory is `~/.gitd/bin`. The command also ensures
|
|
11
|
+
* that directory is in the user's PATH (prints instructions if not).
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { homedir } from 'node:os';
|
|
17
|
+
import { existsSync, mkdirSync, symlinkSync, unlinkSync } from 'node:fs';
|
|
18
|
+
import { join, resolve } from 'node:path';
|
|
19
|
+
|
|
20
|
+
import { flagValue } from '../flags.js';
|
|
21
|
+
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Constants
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
|
|
26
|
+
const DEFAULT_BIN_DIR = join(homedir(), '.gitd', 'bin');
|
|
27
|
+
|
|
28
|
+
/** Binary names that must be on PATH for git DID transport to work. */
|
|
29
|
+
const BINARIES = ['git-remote-did', 'git-remote-did-credential'] as const;
|
|
30
|
+
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Command
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
export async function setupCommand(args: string[]): Promise<void> {
|
|
36
|
+
const binDir = flagValue(args, '--bin-dir') ?? DEFAULT_BIN_DIR;
|
|
37
|
+
|
|
38
|
+
// Ensure the bin directory exists.
|
|
39
|
+
mkdirSync(binDir, { recursive: true });
|
|
40
|
+
|
|
41
|
+
// Find the dist directory — relative to this compiled file.
|
|
42
|
+
// In the installed package: dist/esm/cli/commands/setup.js
|
|
43
|
+
// Binary sources: dist/esm/git-remote/main.js
|
|
44
|
+
// dist/esm/git-remote/credential-main.js
|
|
45
|
+
const thisFile = new URL(import.meta.url).pathname;
|
|
46
|
+
const distEsm = resolve(thisFile, '..', '..', '..');
|
|
47
|
+
const remoteBin = join(distEsm, 'git-remote', 'main.js');
|
|
48
|
+
const credentialBin = join(distEsm, 'git-remote', 'credential-main.js');
|
|
49
|
+
|
|
50
|
+
const sourceMap: Record<string, string> = {
|
|
51
|
+
'git-remote-did' : remoteBin,
|
|
52
|
+
'git-remote-did-credential' : credentialBin,
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
for (const name of BINARIES) {
|
|
56
|
+
const linkPath = join(binDir, name);
|
|
57
|
+
const target = sourceMap[name];
|
|
58
|
+
|
|
59
|
+
if (!existsSync(target)) {
|
|
60
|
+
console.error(`Warning: source binary not found at ${target}`);
|
|
61
|
+
console.error(' Run `bun run build` first, or install @enbox/gitd globally.');
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Remove existing symlink if present.
|
|
66
|
+
if (existsSync(linkPath)) {
|
|
67
|
+
unlinkSync(linkPath);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
symlinkSync(target, linkPath);
|
|
71
|
+
console.log(` Linked: ${name} -> ${target}`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Check if binDir is on PATH.
|
|
75
|
+
const pathDirs = (process.env.PATH ?? '').split(':');
|
|
76
|
+
const onPath = pathDirs.some((d) => resolve(d) === resolve(binDir));
|
|
77
|
+
|
|
78
|
+
console.log('');
|
|
79
|
+
if (onPath) {
|
|
80
|
+
console.log(`Setup complete. ${binDir} is already on your PATH.`);
|
|
81
|
+
} else {
|
|
82
|
+
console.log('Setup complete. Add the bin directory to your PATH:');
|
|
83
|
+
console.log('');
|
|
84
|
+
console.log(` export PATH="${binDir}:$PATH"`);
|
|
85
|
+
console.log('');
|
|
86
|
+
console.log('Add that line to your ~/.bashrc or ~/.zshrc to make it permanent.');
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
console.log('');
|
|
90
|
+
console.log('You can now clone repos via DID:');
|
|
91
|
+
console.log(' git clone did::<did>/<repo>');
|
|
92
|
+
console.log('');
|
|
93
|
+
console.log('Or use the convenience wrapper:');
|
|
94
|
+
console.log(' gitd clone <did>/<repo>');
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gitd shim` — start a package manager / registry compatibility shim.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* gitd shim npm [--port 4873] Start npm registry shim
|
|
6
|
+
* gitd shim go [--port 4874] Start Go module proxy shim
|
|
7
|
+
* gitd shim oci [--port 5555] Start OCI/Docker registry shim
|
|
8
|
+
*
|
|
9
|
+
* Each shim starts a local HTTP proxy that speaks the native protocol of
|
|
10
|
+
* the ecosystem tool, resolving DID-scoped packages from DWN records.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import type { AgentContext } from '../agent.js';
|
|
16
|
+
|
|
17
|
+
import { startGoShim } from '../../shims/go/server.js';
|
|
18
|
+
import { startNpmShim } from '../../shims/npm/server.js';
|
|
19
|
+
import { startOciShim } from '../../shims/oci/server.js';
|
|
20
|
+
import { flagValue, parsePort } from '../flags.js';
|
|
21
|
+
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Default ports
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
|
|
26
|
+
const DEFAULT_NPM_PORT = '4873';
|
|
27
|
+
const DEFAULT_GO_PORT = '4874';
|
|
28
|
+
const DEFAULT_OCI_PORT = '5555';
|
|
29
|
+
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Command
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
|
|
34
|
+
export async function shimCommand(ctx: AgentContext, args: string[]): Promise<void> {
|
|
35
|
+
const sub = args[0];
|
|
36
|
+
const rest = args.slice(1);
|
|
37
|
+
|
|
38
|
+
switch (sub) {
|
|
39
|
+
case 'npm': {
|
|
40
|
+
const port = parsePort(
|
|
41
|
+
flagValue(rest, '--port') ?? process.env.GITD_NPM_SHIM_PORT ?? DEFAULT_NPM_PORT,
|
|
42
|
+
);
|
|
43
|
+
console.log('Starting npm registry shim...');
|
|
44
|
+
startNpmShim({ ctx, port });
|
|
45
|
+
await new Promise(() => {});
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
case 'go': {
|
|
50
|
+
const port = parsePort(
|
|
51
|
+
flagValue(rest, '--port') ?? process.env.GITD_GO_SHIM_PORT ?? DEFAULT_GO_PORT,
|
|
52
|
+
);
|
|
53
|
+
console.log('Starting Go module proxy shim...');
|
|
54
|
+
startGoShim({ ctx, port });
|
|
55
|
+
await new Promise(() => {});
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
case 'oci':
|
|
60
|
+
case 'docker': {
|
|
61
|
+
const port = parsePort(
|
|
62
|
+
flagValue(rest, '--port') ?? process.env.GITD_OCI_SHIM_PORT ?? DEFAULT_OCI_PORT,
|
|
63
|
+
);
|
|
64
|
+
console.log('Starting OCI/Docker registry shim...');
|
|
65
|
+
startOciShim({ ctx, port });
|
|
66
|
+
await new Promise(() => {});
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
default:
|
|
71
|
+
console.error('Usage: gitd shim <npm|go|oci> [--port <port>]');
|
|
72
|
+
console.error('');
|
|
73
|
+
console.error('Shims:');
|
|
74
|
+
console.error(` npm npm registry proxy (default port: ${DEFAULT_NPM_PORT})`);
|
|
75
|
+
console.error(` go Go module proxy (default port: ${DEFAULT_GO_PORT})`);
|
|
76
|
+
console.error(` oci OCI/Docker registry proxy (default port: ${DEFAULT_OCI_PORT})`);
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
}
|