@growthub/cli 0.6.5 → 0.6.7
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/dist/index.js +30193 -1098
- package/package.json +1 -4
- package/dist/__tests__/agent-jwt-env.test.d.ts +0 -2
- package/dist/__tests__/agent-jwt-env.test.d.ts.map +0 -1
- package/dist/__tests__/agent-jwt-env.test.js +0 -57
- package/dist/__tests__/agent-jwt-env.test.js.map +0 -1
- package/dist/__tests__/allowed-hostname.test.d.ts +0 -2
- package/dist/__tests__/allowed-hostname.test.d.ts.map +0 -1
- package/dist/__tests__/allowed-hostname.test.js +0 -75
- package/dist/__tests__/allowed-hostname.test.js.map +0 -1
- package/dist/__tests__/auth-login-flow.test.d.ts +0 -2
- package/dist/__tests__/auth-login-flow.test.d.ts.map +0 -1
- package/dist/__tests__/auth-login-flow.test.js +0 -62
- package/dist/__tests__/auth-login-flow.test.js.map +0 -1
- package/dist/__tests__/auth-session.test.d.ts +0 -2
- package/dist/__tests__/auth-session.test.d.ts.map +0 -1
- package/dist/__tests__/auth-session.test.js +0 -128
- package/dist/__tests__/auth-session.test.js.map +0 -1
- package/dist/__tests__/common.test.d.ts +0 -2
- package/dist/__tests__/common.test.d.ts.map +0 -1
- package/dist/__tests__/common.test.js +0 -73
- package/dist/__tests__/common.test.js.map +0 -1
- package/dist/__tests__/company-delete.test.d.ts +0 -2
- package/dist/__tests__/company-delete.test.d.ts.map +0 -1
- package/dist/__tests__/company-delete.test.js +0 -78
- package/dist/__tests__/company-delete.test.js.map +0 -1
- package/dist/__tests__/context.test.d.ts +0 -2
- package/dist/__tests__/context.test.d.ts.map +0 -1
- package/dist/__tests__/context.test.js +0 -50
- package/dist/__tests__/context.test.js.map +0 -1
- package/dist/__tests__/create-growthub-local-installer.test.d.ts +0 -21
- package/dist/__tests__/create-growthub-local-installer.test.d.ts.map +0 -1
- package/dist/__tests__/create-growthub-local-installer.test.js +0 -205
- package/dist/__tests__/create-growthub-local-installer.test.js.map +0 -1
- package/dist/__tests__/data-dir.test.d.ts +0 -2
- package/dist/__tests__/data-dir.test.d.ts.map +0 -1
- package/dist/__tests__/data-dir.test.js +0 -61
- package/dist/__tests__/data-dir.test.js.map +0 -1
- package/dist/__tests__/doctor.test.d.ts +0 -2
- package/dist/__tests__/doctor.test.d.ts.map +0 -1
- package/dist/__tests__/doctor.test.js +0 -93
- package/dist/__tests__/doctor.test.js.map +0 -1
- package/dist/__tests__/effective-profile.test.d.ts +0 -2
- package/dist/__tests__/effective-profile.test.d.ts.map +0 -1
- package/dist/__tests__/effective-profile.test.js +0 -91
- package/dist/__tests__/effective-profile.test.js.map +0 -1
- package/dist/__tests__/execute-hosted-pipeline.test.d.ts +0 -2
- package/dist/__tests__/execute-hosted-pipeline.test.d.ts.map +0 -1
- package/dist/__tests__/execute-hosted-pipeline.test.js +0 -131
- package/dist/__tests__/execute-hosted-pipeline.test.js.map +0 -1
- package/dist/__tests__/fork-policy.test.d.ts +0 -12
- package/dist/__tests__/fork-policy.test.d.ts.map +0 -1
- package/dist/__tests__/fork-policy.test.js +0 -132
- package/dist/__tests__/fork-policy.test.js.map +0 -1
- package/dist/__tests__/fork-trace.test.d.ts +0 -12
- package/dist/__tests__/fork-trace.test.d.ts.map +0 -1
- package/dist/__tests__/fork-trace.test.js +0 -90
- package/dist/__tests__/fork-trace.test.js.map +0 -1
- package/dist/__tests__/home-paths.test.d.ts +0 -2
- package/dist/__tests__/home-paths.test.d.ts.map +0 -1
- package/dist/__tests__/home-paths.test.js +0 -32
- package/dist/__tests__/home-paths.test.js.map +0 -1
- package/dist/__tests__/hosted-execution-client.test.d.ts +0 -2
- package/dist/__tests__/hosted-execution-client.test.d.ts.map +0 -1
- package/dist/__tests__/hosted-execution-client.test.js +0 -100
- package/dist/__tests__/hosted-execution-client.test.js.map +0 -1
- package/dist/__tests__/http.test.d.ts +0 -2
- package/dist/__tests__/http.test.d.ts.map +0 -1
- package/dist/__tests__/http.test.js +0 -42
- package/dist/__tests__/http.test.js.map +0 -1
- package/dist/__tests__/integrations-github-resolver.test.d.ts +0 -14
- package/dist/__tests__/integrations-github-resolver.test.d.ts.map +0 -1
- package/dist/__tests__/integrations-github-resolver.test.js +0 -103
- package/dist/__tests__/integrations-github-resolver.test.js.map +0 -1
- package/dist/__tests__/kit-command.test.d.ts +0 -2
- package/dist/__tests__/kit-command.test.d.ts.map +0 -1
- package/dist/__tests__/kit-command.test.js +0 -134
- package/dist/__tests__/kit-command.test.js.map +0 -1
- package/dist/__tests__/kit-core.test.d.ts +0 -17
- package/dist/__tests__/kit-core.test.d.ts.map +0 -1
- package/dist/__tests__/kit-core.test.js +0 -403
- package/dist/__tests__/kit-core.test.js.map +0 -1
- package/dist/__tests__/kit-fork-command.test.d.ts +0 -11
- package/dist/__tests__/kit-fork-command.test.d.ts.map +0 -1
- package/dist/__tests__/kit-fork-command.test.js +0 -183
- package/dist/__tests__/kit-fork-command.test.js.map +0 -1
- package/dist/__tests__/kit-fork-phase-1.test.d.ts +0 -13
- package/dist/__tests__/kit-fork-phase-1.test.d.ts.map +0 -1
- package/dist/__tests__/kit-fork-phase-1.test.js +0 -220
- package/dist/__tests__/kit-fork-phase-1.test.js.map +0 -1
- package/dist/__tests__/kit-fork-registry.test.d.ts +0 -8
- package/dist/__tests__/kit-fork-registry.test.d.ts.map +0 -1
- package/dist/__tests__/kit-fork-registry.test.js +0 -183
- package/dist/__tests__/kit-fork-registry.test.js.map +0 -1
- package/dist/__tests__/kit-fork-sync-agent.test.d.ts +0 -13
- package/dist/__tests__/kit-fork-sync-agent.test.d.ts.map +0 -1
- package/dist/__tests__/kit-fork-sync-agent.test.js +0 -262
- package/dist/__tests__/kit-fork-sync-agent.test.js.map +0 -1
- package/dist/__tests__/kit-fork-sync.test.d.ts +0 -12
- package/dist/__tests__/kit-fork-sync.test.d.ts.map +0 -1
- package/dist/__tests__/kit-fork-sync.test.js +0 -455
- package/dist/__tests__/kit-fork-sync.test.js.map +0 -1
- package/dist/__tests__/kit-zernio-social.test.d.ts +0 -16
- package/dist/__tests__/kit-zernio-social.test.d.ts.map +0 -1
- package/dist/__tests__/kit-zernio-social.test.js +0 -528
- package/dist/__tests__/kit-zernio-social.test.js.map +0 -1
- package/dist/__tests__/kit.test.d.ts +0 -2
- package/dist/__tests__/kit.test.d.ts.map +0 -1
- package/dist/__tests__/kit.test.js +0 -359
- package/dist/__tests__/kit.test.js.map +0 -1
- package/dist/__tests__/native-intelligence-normalizer.test.d.ts +0 -2
- package/dist/__tests__/native-intelligence-normalizer.test.d.ts.map +0 -1
- package/dist/__tests__/native-intelligence-normalizer.test.js +0 -200
- package/dist/__tests__/native-intelligence-normalizer.test.js.map +0 -1
- package/dist/__tests__/native-intelligence-planner.test.d.ts +0 -2
- package/dist/__tests__/native-intelligence-planner.test.d.ts.map +0 -1
- package/dist/__tests__/native-intelligence-planner.test.js +0 -208
- package/dist/__tests__/native-intelligence-planner.test.js.map +0 -1
- package/dist/__tests__/native-intelligence-recommender.test.d.ts +0 -2
- package/dist/__tests__/native-intelligence-recommender.test.d.ts.map +0 -1
- package/dist/__tests__/native-intelligence-recommender.test.js +0 -212
- package/dist/__tests__/native-intelligence-recommender.test.js.map +0 -1
- package/dist/__tests__/native-intelligence-summarizer.test.d.ts +0 -2
- package/dist/__tests__/native-intelligence-summarizer.test.d.ts.map +0 -1
- package/dist/__tests__/native-intelligence-summarizer.test.js +0 -195
- package/dist/__tests__/native-intelligence-summarizer.test.js.map +0 -1
- package/dist/__tests__/open-agents.test.d.ts +0 -2
- package/dist/__tests__/open-agents.test.d.ts.map +0 -1
- package/dist/__tests__/open-agents.test.js +0 -174
- package/dist/__tests__/open-agents.test.js.map +0 -1
- package/dist/__tests__/progress.test.d.ts +0 -5
- package/dist/__tests__/progress.test.d.ts.map +0 -1
- package/dist/__tests__/progress.test.js +0 -55
- package/dist/__tests__/progress.test.js.map +0 -1
- package/dist/__tests__/qwen-code.test.d.ts +0 -2
- package/dist/__tests__/qwen-code.test.d.ts.map +0 -1
- package/dist/__tests__/qwen-code.test.js +0 -125
- package/dist/__tests__/qwen-code.test.js.map +0 -1
- package/dist/__tests__/source-import-agent.test.d.ts +0 -9
- package/dist/__tests__/source-import-agent.test.d.ts.map +0 -1
- package/dist/__tests__/source-import-agent.test.js +0 -124
- package/dist/__tests__/source-import-agent.test.js.map +0 -1
- package/dist/__tests__/source-import-detect.test.d.ts +0 -8
- package/dist/__tests__/source-import-detect.test.d.ts.map +0 -1
- package/dist/__tests__/source-import-detect.test.js +0 -91
- package/dist/__tests__/source-import-detect.test.js.map +0 -1
- package/dist/__tests__/source-import-plan.test.d.ts +0 -8
- package/dist/__tests__/source-import-plan.test.d.ts.map +0 -1
- package/dist/__tests__/source-import-plan.test.js +0 -170
- package/dist/__tests__/source-import-plan.test.js.map +0 -1
- package/dist/__tests__/source-import-security.test.d.ts +0 -8
- package/dist/__tests__/source-import-security.test.d.ts.map +0 -1
- package/dist/__tests__/source-import-security.test.js +0 -111
- package/dist/__tests__/source-import-security.test.js.map +0 -1
- package/dist/__tests__/source-import-skills-source.test.d.ts +0 -11
- package/dist/__tests__/source-import-skills-source.test.d.ts.map +0 -1
- package/dist/__tests__/source-import-skills-source.test.js +0 -181
- package/dist/__tests__/source-import-skills-source.test.js.map +0 -1
- package/dist/__tests__/table-renderer.test.d.ts +0 -12
- package/dist/__tests__/table-renderer.test.d.ts.map +0 -1
- package/dist/__tests__/table-renderer.test.js +0 -86
- package/dist/__tests__/table-renderer.test.js.map +0 -1
- package/dist/__tests__/worktree.test.d.ts +0 -2
- package/dist/__tests__/worktree.test.d.ts.map +0 -1
- package/dist/__tests__/worktree.test.js +0 -399
- package/dist/__tests__/worktree.test.js.map +0 -1
- package/dist/adapters/http/format-event.d.ts +0 -2
- package/dist/adapters/http/format-event.d.ts.map +0 -1
- package/dist/adapters/http/format-event.js +0 -6
- package/dist/adapters/http/format-event.js.map +0 -1
- package/dist/adapters/http/index.d.ts +0 -3
- package/dist/adapters/http/index.d.ts.map +0 -1
- package/dist/adapters/http/index.js +0 -6
- package/dist/adapters/http/index.js.map +0 -1
- package/dist/adapters/index.d.ts +0 -3
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -2
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/open-agents/format-event.d.ts +0 -2
- package/dist/adapters/open-agents/format-event.d.ts.map +0 -1
- package/dist/adapters/open-agents/format-event.js +0 -39
- package/dist/adapters/open-agents/format-event.js.map +0 -1
- package/dist/adapters/open-agents/index.d.ts +0 -3
- package/dist/adapters/open-agents/index.d.ts.map +0 -1
- package/dist/adapters/open-agents/index.js +0 -6
- package/dist/adapters/open-agents/index.js.map +0 -1
- package/dist/adapters/process/format-event.d.ts +0 -2
- package/dist/adapters/process/format-event.d.ts.map +0 -1
- package/dist/adapters/process/format-event.js +0 -6
- package/dist/adapters/process/format-event.js.map +0 -1
- package/dist/adapters/process/index.d.ts +0 -3
- package/dist/adapters/process/index.d.ts.map +0 -1
- package/dist/adapters/process/index.js +0 -6
- package/dist/adapters/process/index.js.map +0 -1
- package/dist/adapters/qwen/format-event.d.ts +0 -8
- package/dist/adapters/qwen/format-event.d.ts.map +0 -1
- package/dist/adapters/qwen/format-event.js +0 -28
- package/dist/adapters/qwen/format-event.js.map +0 -1
- package/dist/adapters/qwen/index.d.ts +0 -3
- package/dist/adapters/qwen/index.d.ts.map +0 -1
- package/dist/adapters/qwen/index.js +0 -6
- package/dist/adapters/qwen/index.js.map +0 -1
- package/dist/adapters/registry.d.ts +0 -3
- package/dist/adapters/registry.d.ts.map +0 -1
- package/dist/adapters/registry.js +0 -56
- package/dist/adapters/registry.js.map +0 -1
- package/dist/auth/effective-profile.d.ts +0 -61
- package/dist/auth/effective-profile.d.ts.map +0 -1
- package/dist/auth/effective-profile.js +0 -127
- package/dist/auth/effective-profile.js.map +0 -1
- package/dist/auth/hosted-client.d.ts +0 -107
- package/dist/auth/hosted-client.d.ts.map +0 -1
- package/dist/auth/hosted-client.js +0 -140
- package/dist/auth/hosted-client.js.map +0 -1
- package/dist/auth/hosted-integrations.d.ts +0 -33
- package/dist/auth/hosted-integrations.d.ts.map +0 -1
- package/dist/auth/hosted-integrations.js +0 -51
- package/dist/auth/hosted-integrations.js.map +0 -1
- package/dist/auth/login-flow.d.ts +0 -27
- package/dist/auth/login-flow.d.ts.map +0 -1
- package/dist/auth/login-flow.js +0 -212
- package/dist/auth/login-flow.js.map +0 -1
- package/dist/auth/overlay-store.d.ts +0 -52
- package/dist/auth/overlay-store.d.ts.map +0 -1
- package/dist/auth/overlay-store.js +0 -123
- package/dist/auth/overlay-store.js.map +0 -1
- package/dist/auth/paths.d.ts +0 -15
- package/dist/auth/paths.d.ts.map +0 -1
- package/dist/auth/paths.js +0 -27
- package/dist/auth/paths.js.map +0 -1
- package/dist/auth/session-store.d.ts +0 -35
- package/dist/auth/session-store.d.ts.map +0 -1
- package/dist/auth/session-store.js +0 -73
- package/dist/auth/session-store.js.map +0 -1
- package/dist/auth/workflow-access.d.ts +0 -7
- package/dist/auth/workflow-access.d.ts.map +0 -1
- package/dist/auth/workflow-access.js +0 -27
- package/dist/auth/workflow-access.js.map +0 -1
- package/dist/checks/agent-jwt-secret-check.d.ts +0 -3
- package/dist/checks/agent-jwt-secret-check.d.ts.map +0 -1
- package/dist/checks/agent-jwt-secret-check.js +0 -31
- package/dist/checks/agent-jwt-secret-check.js.map +0 -1
- package/dist/checks/config-check.d.ts +0 -3
- package/dist/checks/config-check.d.ts.map +0 -1
- package/dist/checks/config-check.js +0 -31
- package/dist/checks/config-check.js.map +0 -1
- package/dist/checks/database-check.d.ts +0 -4
- package/dist/checks/database-check.d.ts.map +0 -1
- package/dist/checks/database-check.js +0 -54
- package/dist/checks/database-check.js.map +0 -1
- package/dist/checks/deployment-auth-check.d.ts +0 -4
- package/dist/checks/deployment-auth-check.d.ts.map +0 -1
- package/dist/checks/deployment-auth-check.js +0 -83
- package/dist/checks/deployment-auth-check.js.map +0 -1
- package/dist/checks/index.d.ts +0 -18
- package/dist/checks/index.d.ts.map +0 -1
- package/dist/checks/index.js +0 -10
- package/dist/checks/index.js.map +0 -1
- package/dist/checks/llm-check.d.ts +0 -4
- package/dist/checks/llm-check.d.ts.map +0 -1
- package/dist/checks/llm-check.js +0 -80
- package/dist/checks/llm-check.js.map +0 -1
- package/dist/checks/log-check.d.ts +0 -4
- package/dist/checks/log-check.d.ts.map +0 -1
- package/dist/checks/log-check.js +0 -27
- package/dist/checks/log-check.js.map +0 -1
- package/dist/checks/path-resolver.d.ts +0 -2
- package/dist/checks/path-resolver.d.ts.map +0 -1
- package/dist/checks/path-resolver.js +0 -2
- package/dist/checks/path-resolver.js.map +0 -1
- package/dist/checks/port-check.d.ts +0 -4
- package/dist/checks/port-check.d.ts.map +0 -1
- package/dist/checks/port-check.js +0 -20
- package/dist/checks/port-check.js.map +0 -1
- package/dist/checks/secrets-check.d.ts +0 -4
- package/dist/checks/secrets-check.d.ts.map +0 -1
- package/dist/checks/secrets-check.js +0 -123
- package/dist/checks/secrets-check.js.map +0 -1
- package/dist/checks/storage-check.d.ts +0 -4
- package/dist/checks/storage-check.d.ts.map +0 -1
- package/dist/checks/storage-check.js +0 -46
- package/dist/checks/storage-check.js.map +0 -1
- package/dist/client/context.d.ts +0 -21
- package/dist/client/context.d.ts.map +0 -1
- package/dist/client/context.js +0 -136
- package/dist/client/context.js.map +0 -1
- package/dist/client/http.d.ts +0 -29
- package/dist/client/http.d.ts.map +0 -1
- package/dist/client/http.js +0 -120
- package/dist/client/http.js.map +0 -1
- package/dist/commands/allowed-hostname.d.ts +0 -4
- package/dist/commands/allowed-hostname.d.ts.map +0 -1
- package/dist/commands/allowed-hostname.js +0 -31
- package/dist/commands/allowed-hostname.js.map +0 -1
- package/dist/commands/artifact.d.ts +0 -12
- package/dist/commands/artifact.d.ts.map +0 -1
- package/dist/commands/artifact.js +0 -167
- package/dist/commands/artifact.js.map +0 -1
- package/dist/commands/auth-bootstrap-ceo.d.ts +0 -8
- package/dist/commands/auth-bootstrap-ceo.d.ts.map +0 -1
- package/dist/commands/auth-bootstrap-ceo.js +0 -108
- package/dist/commands/auth-bootstrap-ceo.js.map +0 -1
- package/dist/commands/auth-login.d.ts +0 -24
- package/dist/commands/auth-login.d.ts.map +0 -1
- package/dist/commands/auth-login.js +0 -270
- package/dist/commands/auth-login.js.map +0 -1
- package/dist/commands/capability.d.ts +0 -15
- package/dist/commands/capability.d.ts.map +0 -1
- package/dist/commands/capability.js +0 -366
- package/dist/commands/capability.js.map +0 -1
- package/dist/commands/client/activity.d.ts +0 -3
- package/dist/commands/client/activity.d.ts.map +0 -1
- package/dist/commands/client/activity.js +0 -49
- package/dist/commands/client/activity.js.map +0 -1
- package/dist/commands/client/agent.d.ts +0 -3
- package/dist/commands/client/agent.d.ts.map +0 -1
- package/dist/commands/client/agent.js +0 -224
- package/dist/commands/client/agent.js.map +0 -1
- package/dist/commands/client/approval.d.ts +0 -3
- package/dist/commands/client/approval.d.ts.map +0 -1
- package/dist/commands/client/approval.js +0 -193
- package/dist/commands/client/approval.js.map +0 -1
- package/dist/commands/client/common.d.ts +0 -33
- package/dist/commands/client/common.d.ts.map +0 -1
- package/dist/commands/client/common.js +0 -140
- package/dist/commands/client/common.js.map +0 -1
- package/dist/commands/client/company.d.ts +0 -14
- package/dist/commands/client/company.d.ts.map +0 -1
- package/dist/commands/client/company.js +0 -346
- package/dist/commands/client/company.js.map +0 -1
- package/dist/commands/client/context.d.ts +0 -3
- package/dist/commands/client/context.d.ts.map +0 -1
- package/dist/commands/client/context.js +0 -92
- package/dist/commands/client/context.js.map +0 -1
- package/dist/commands/client/dashboard.d.ts +0 -3
- package/dist/commands/client/dashboard.d.ts.map +0 -1
- package/dist/commands/client/dashboard.js +0 -19
- package/dist/commands/client/dashboard.js.map +0 -1
- package/dist/commands/client/issue.d.ts +0 -3
- package/dist/commands/client/issue.d.ts.map +0 -1
- package/dist/commands/client/issue.js +0 -229
- package/dist/commands/client/issue.js.map +0 -1
- package/dist/commands/client/plugin.d.ts +0 -3
- package/dist/commands/client/plugin.d.ts.map +0 -1
- package/dist/commands/client/plugin.js +0 -252
- package/dist/commands/client/plugin.js.map +0 -1
- package/dist/commands/configure.d.ts +0 -5
- package/dist/commands/configure.d.ts.map +0 -1
- package/dist/commands/configure.js +0 -167
- package/dist/commands/configure.js.map +0 -1
- package/dist/commands/db-backup.d.ts +0 -10
- package/dist/commands/db-backup.d.ts.map +0 -1
- package/dist/commands/db-backup.js +0 -74
- package/dist/commands/db-backup.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -10
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -154
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/env.d.ts +0 -4
- package/dist/commands/env.d.ts.map +0 -1
- package/dist/commands/env.js +0 -355
- package/dist/commands/env.js.map +0 -1
- package/dist/commands/fleet.d.ts +0 -39
- package/dist/commands/fleet.d.ts.map +0 -1
- package/dist/commands/fleet.js +0 -281
- package/dist/commands/fleet.js.map +0 -1
- package/dist/commands/github.d.ts +0 -29
- package/dist/commands/github.d.ts.map +0 -1
- package/dist/commands/github.js +0 -205
- package/dist/commands/github.js.map +0 -1
- package/dist/commands/gtm.d.ts +0 -3
- package/dist/commands/gtm.d.ts.map +0 -1
- package/dist/commands/gtm.js +0 -134
- package/dist/commands/gtm.js.map +0 -1
- package/dist/commands/heartbeat-run.d.ts +0 -16
- package/dist/commands/heartbeat-run.d.ts.map +0 -1
- package/dist/commands/heartbeat-run.js +0 -294
- package/dist/commands/heartbeat-run.js.map +0 -1
- package/dist/commands/integrations.d.ts +0 -20
- package/dist/commands/integrations.d.ts.map +0 -1
- package/dist/commands/integrations.js +0 -98
- package/dist/commands/integrations.js.map +0 -1
- package/dist/commands/kit-fork-remote.d.ts +0 -46
- package/dist/commands/kit-fork-remote.d.ts.map +0 -1
- package/dist/commands/kit-fork-remote.js +0 -489
- package/dist/commands/kit-fork-remote.js.map +0 -1
- package/dist/commands/kit-fork.d.ts +0 -39
- package/dist/commands/kit-fork.d.ts.map +0 -1
- package/dist/commands/kit-fork.js +0 -1338
- package/dist/commands/kit-fork.js.map +0 -1
- package/dist/commands/kit.d.ts +0 -7
- package/dist/commands/kit.d.ts.map +0 -1
- package/dist/commands/kit.js +0 -585
- package/dist/commands/kit.js.map +0 -1
- package/dist/commands/onboard.d.ts +0 -9
- package/dist/commands/onboard.d.ts.map +0 -1
- package/dist/commands/onboard.js +0 -425
- package/dist/commands/onboard.js.map +0 -1
- package/dist/commands/open-agents.d.ts +0 -19
- package/dist/commands/open-agents.d.ts.map +0 -1
- package/dist/commands/open-agents.js +0 -689
- package/dist/commands/open-agents.js.map +0 -1
- package/dist/commands/pipeline.d.ts +0 -20
- package/dist/commands/pipeline.d.ts.map +0 -1
- package/dist/commands/pipeline.js +0 -863
- package/dist/commands/pipeline.js.map +0 -1
- package/dist/commands/profile.d.ts +0 -3
- package/dist/commands/profile.d.ts.map +0 -1
- package/dist/commands/profile.js +0 -282
- package/dist/commands/profile.js.map +0 -1
- package/dist/commands/qwen-code.d.ts +0 -19
- package/dist/commands/qwen-code.d.ts.map +0 -1
- package/dist/commands/qwen-code.js +0 -286
- package/dist/commands/qwen-code.js.map +0 -1
- package/dist/commands/run.d.ts +0 -9
- package/dist/commands/run.d.ts.map +0 -1
- package/dist/commands/run.js +0 -156
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/source-import-discovery.d.ts +0 -28
- package/dist/commands/source-import-discovery.d.ts.map +0 -1
- package/dist/commands/source-import-discovery.js +0 -327
- package/dist/commands/source-import-discovery.js.map +0 -1
- package/dist/commands/starter.d.ts +0 -27
- package/dist/commands/starter.d.ts.map +0 -1
- package/dist/commands/starter.js +0 -358
- package/dist/commands/starter.js.map +0 -1
- package/dist/commands/status.d.ts +0 -18
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -84
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/template.d.ts +0 -18
- package/dist/commands/template.d.ts.map +0 -1
- package/dist/commands/template.js +0 -341
- package/dist/commands/template.js.map +0 -1
- package/dist/commands/workflow.d.ts +0 -24
- package/dist/commands/workflow.d.ts.map +0 -1
- package/dist/commands/workflow.js +0 -1350
- package/dist/commands/workflow.js.map +0 -1
- package/dist/commands/worktree-lib.d.ts +0 -49
- package/dist/commands/worktree-lib.d.ts.map +0 -1
- package/dist/commands/worktree-lib.js +0 -220
- package/dist/commands/worktree-lib.js.map +0 -1
- package/dist/commands/worktree.d.ts +0 -60
- package/dist/commands/worktree.d.ts.map +0 -1
- package/dist/commands/worktree.js +0 -874
- package/dist/commands/worktree.js.map +0 -1
- package/dist/config/data-dir.d.ts +0 -12
- package/dist/config/data-dir.d.ts.map +0 -1
- package/dist/config/data-dir.js +0 -25
- package/dist/config/data-dir.js.map +0 -1
- package/dist/config/env.d.ts +0 -15
- package/dist/config/env.d.ts.map +0 -1
- package/dist/config/env.js +0 -105
- package/dist/config/env.js.map +0 -1
- package/dist/config/github-home.d.ts +0 -17
- package/dist/config/github-home.d.ts.map +0 -1
- package/dist/config/github-home.js +0 -29
- package/dist/config/github-home.js.map +0 -1
- package/dist/config/home.d.ts +0 -23
- package/dist/config/home.d.ts.map +0 -1
- package/dist/config/home.js +0 -65
- package/dist/config/home.js.map +0 -1
- package/dist/config/hostnames.d.ts +0 -3
- package/dist/config/hostnames.d.ts.map +0 -1
- package/dist/config/hostnames.js +0 -27
- package/dist/config/hostnames.js.map +0 -1
- package/dist/config/kit-forks-home.d.ts +0 -26
- package/dist/config/kit-forks-home.d.ts.map +0 -1
- package/dist/config/kit-forks-home.js +0 -44
- package/dist/config/kit-forks-home.js.map +0 -1
- package/dist/config/schema.d.ts +0 -2
- package/dist/config/schema.d.ts.map +0 -1
- package/dist/config/schema.js +0 -2
- package/dist/config/schema.js.map +0 -1
- package/dist/config/secrets-key.d.ts +0 -16
- package/dist/config/secrets-key.d.ts.map +0 -1
- package/dist/config/secrets-key.js +0 -34
- package/dist/config/secrets-key.js.map +0 -1
- package/dist/config/store.d.ts +0 -6
- package/dist/config/store.d.ts.map +0 -1
- package/dist/config/store.js +0 -102
- package/dist/config/store.js.map +0 -1
- package/dist/fleet/agent-plan.d.ts +0 -20
- package/dist/fleet/agent-plan.d.ts.map +0 -1
- package/dist/fleet/agent-plan.js +0 -61
- package/dist/fleet/agent-plan.js.map +0 -1
- package/dist/fleet/approvals.d.ts +0 -10
- package/dist/fleet/approvals.d.ts.map +0 -1
- package/dist/fleet/approvals.js +0 -33
- package/dist/fleet/approvals.js.map +0 -1
- package/dist/fleet/drift-summary.d.ts +0 -13
- package/dist/fleet/drift-summary.d.ts.map +0 -1
- package/dist/fleet/drift-summary.js +0 -120
- package/dist/fleet/drift-summary.js.map +0 -1
- package/dist/fleet/summary.d.ts +0 -9
- package/dist/fleet/summary.d.ts.map +0 -1
- package/dist/fleet/summary.js +0 -161
- package/dist/fleet/summary.js.map +0 -1
- package/dist/fleet/types.d.ts +0 -149
- package/dist/fleet/types.d.ts.map +0 -1
- package/dist/fleet/types.js +0 -12
- package/dist/fleet/types.js.map +0 -1
- package/dist/github/client.d.ts +0 -42
- package/dist/github/client.d.ts.map +0 -1
- package/dist/github/client.js +0 -174
- package/dist/github/client.js.map +0 -1
- package/dist/github/token-store.d.ts +0 -11
- package/dist/github/token-store.d.ts.map +0 -1
- package/dist/github/token-store.js +0 -74
- package/dist/github/token-store.js.map +0 -1
- package/dist/github/types.d.ts +0 -69
- package/dist/github/types.d.ts.map +0 -1
- package/dist/github/types.js +0 -8
- package/dist/github/types.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/integrations/bridge.d.ts +0 -43
- package/dist/integrations/bridge.d.ts.map +0 -1
- package/dist/integrations/bridge.js +0 -148
- package/dist/integrations/bridge.js.map +0 -1
- package/dist/integrations/github-resolver.d.ts +0 -31
- package/dist/integrations/github-resolver.d.ts.map +0 -1
- package/dist/integrations/github-resolver.js +0 -44
- package/dist/integrations/github-resolver.js.map +0 -1
- package/dist/integrations/types.d.ts +0 -46
- package/dist/integrations/types.d.ts.map +0 -1
- package/dist/integrations/types.js +0 -11
- package/dist/integrations/types.js.map +0 -1
- package/dist/kits/catalog.d.ts +0 -12
- package/dist/kits/catalog.d.ts.map +0 -1
- package/dist/kits/catalog.js +0 -93
- package/dist/kits/catalog.js.map +0 -1
- package/dist/kits/contract.d.ts +0 -153
- package/dist/kits/contract.d.ts.map +0 -1
- package/dist/kits/contract.js +0 -89
- package/dist/kits/contract.js.map +0 -1
- package/dist/kits/core/adapter-core/contracts.d.ts +0 -108
- package/dist/kits/core/adapter-core/contracts.d.ts.map +0 -1
- package/dist/kits/core/adapter-core/contracts.js +0 -17
- package/dist/kits/core/adapter-core/contracts.js.map +0 -1
- package/dist/kits/core/adapter-core/env-gate.d.ts +0 -29
- package/dist/kits/core/adapter-core/env-gate.d.ts.map +0 -1
- package/dist/kits/core/adapter-core/env-gate.js +0 -143
- package/dist/kits/core/adapter-core/env-gate.js.map +0 -1
- package/dist/kits/core/adapter-core/fork-inspector.d.ts +0 -42
- package/dist/kits/core/adapter-core/fork-inspector.d.ts.map +0 -1
- package/dist/kits/core/adapter-core/fork-inspector.js +0 -141
- package/dist/kits/core/adapter-core/fork-inspector.js.map +0 -1
- package/dist/kits/core/adapter-core/index.d.ts +0 -20
- package/dist/kits/core/adapter-core/index.d.ts.map +0 -1
- package/dist/kits/core/adapter-core/index.js +0 -13
- package/dist/kits/core/adapter-core/index.js.map +0 -1
- package/dist/kits/core/adapter-core/output-contract.d.ts +0 -25
- package/dist/kits/core/adapter-core/output-contract.d.ts.map +0 -1
- package/dist/kits/core/adapter-core/output-contract.js +0 -114
- package/dist/kits/core/adapter-core/output-contract.js.map +0 -1
- package/dist/kits/core/adapter-core/provider-adapter.d.ts +0 -26
- package/dist/kits/core/adapter-core/provider-adapter.d.ts.map +0 -1
- package/dist/kits/core/adapter-core/provider-adapter.js +0 -119
- package/dist/kits/core/adapter-core/provider-adapter.js.map +0 -1
- package/dist/kits/core/adapter-core/runtime-surface.d.ts +0 -25
- package/dist/kits/core/adapter-core/runtime-surface.d.ts.map +0 -1
- package/dist/kits/core/adapter-core/runtime-surface.js +0 -100
- package/dist/kits/core/adapter-core/runtime-surface.js.map +0 -1
- package/dist/kits/core/adapter-core/setup-validation.d.ts +0 -28
- package/dist/kits/core/adapter-core/setup-validation.d.ts.map +0 -1
- package/dist/kits/core/adapter-core/setup-validation.js +0 -145
- package/dist/kits/core/adapter-core/setup-validation.js.map +0 -1
- package/dist/kits/core/factory/index.d.ts +0 -25
- package/dist/kits/core/factory/index.d.ts.map +0 -1
- package/dist/kits/core/factory/index.js +0 -21
- package/dist/kits/core/factory/index.js.map +0 -1
- package/dist/kits/core/factory/operator-kit.d.ts +0 -50
- package/dist/kits/core/factory/operator-kit.d.ts.map +0 -1
- package/dist/kits/core/factory/operator-kit.js +0 -88
- package/dist/kits/core/factory/operator-kit.js.map +0 -1
- package/dist/kits/core/factory/ops-kit.d.ts +0 -57
- package/dist/kits/core/factory/ops-kit.d.ts.map +0 -1
- package/dist/kits/core/factory/ops-kit.js +0 -115
- package/dist/kits/core/factory/ops-kit.js.map +0 -1
- package/dist/kits/core/factory/studio-kit.d.ts +0 -39
- package/dist/kits/core/factory/studio-kit.d.ts.map +0 -1
- package/dist/kits/core/factory/studio-kit.js +0 -96
- package/dist/kits/core/factory/studio-kit.js.map +0 -1
- package/dist/kits/core/factory/workflow-kit.d.ts +0 -57
- package/dist/kits/core/factory/workflow-kit.d.ts.map +0 -1
- package/dist/kits/core/factory/workflow-kit.js +0 -107
- package/dist/kits/core/factory/workflow-kit.js.map +0 -1
- package/dist/kits/core/index.d.ts +0 -25
- package/dist/kits/core/index.d.ts.map +0 -1
- package/dist/kits/core/index.js +0 -111
- package/dist/kits/core/index.js.map +0 -1
- package/dist/kits/core/types/index.d.ts +0 -65
- package/dist/kits/core/types/index.d.ts.map +0 -1
- package/dist/kits/core/types/index.js +0 -49
- package/dist/kits/core/types/index.js.map +0 -1
- package/dist/kits/core/validation/index.d.ts +0 -42
- package/dist/kits/core/validation/index.d.ts.map +0 -1
- package/dist/kits/core/validation/index.js +0 -128
- package/dist/kits/core/validation/index.js.map +0 -1
- package/dist/kits/fork-policy.d.ts +0 -78
- package/dist/kits/fork-policy.d.ts.map +0 -1
- package/dist/kits/fork-policy.js +0 -92
- package/dist/kits/fork-policy.js.map +0 -1
- package/dist/kits/fork-registry.d.ts +0 -54
- package/dist/kits/fork-registry.d.ts.map +0 -1
- package/dist/kits/fork-registry.js +0 -201
- package/dist/kits/fork-registry.js.map +0 -1
- package/dist/kits/fork-remote.d.ts +0 -52
- package/dist/kits/fork-remote.d.ts.map +0 -1
- package/dist/kits/fork-remote.js +0 -116
- package/dist/kits/fork-remote.js.map +0 -1
- package/dist/kits/fork-sync-agent.d.ts +0 -51
- package/dist/kits/fork-sync-agent.d.ts.map +0 -1
- package/dist/kits/fork-sync-agent.js +0 -435
- package/dist/kits/fork-sync-agent.js.map +0 -1
- package/dist/kits/fork-sync.d.ts +0 -32
- package/dist/kits/fork-sync.d.ts.map +0 -1
- package/dist/kits/fork-sync.js +0 -590
- package/dist/kits/fork-sync.js.map +0 -1
- package/dist/kits/fork-trace.d.ts +0 -29
- package/dist/kits/fork-trace.d.ts.map +0 -1
- package/dist/kits/fork-trace.js +0 -54
- package/dist/kits/fork-trace.js.map +0 -1
- package/dist/kits/fork-types.d.ts +0 -198
- package/dist/kits/fork-types.d.ts.map +0 -1
- package/dist/kits/fork-types.js +0 -16
- package/dist/kits/fork-types.js.map +0 -1
- package/dist/kits/service.d.ts +0 -63
- package/dist/kits/service.d.ts.map +0 -1
- package/dist/kits/service.js +0 -630
- package/dist/kits/service.js.map +0 -1
- package/dist/prompts/database.d.ts +0 -3
- package/dist/prompts/database.d.ts.map +0 -1
- package/dist/prompts/database.js +0 -144
- package/dist/prompts/database.js.map +0 -1
- package/dist/prompts/llm.d.ts +0 -3
- package/dist/prompts/llm.d.ts.map +0 -1
- package/dist/prompts/llm.js +0 -37
- package/dist/prompts/llm.js.map +0 -1
- package/dist/prompts/logging.d.ts +0 -3
- package/dist/prompts/logging.d.ts.map +0 -1
- package/dist/prompts/logging.js +0 -31
- package/dist/prompts/logging.js.map +0 -1
- package/dist/prompts/secrets.d.ts +0 -4
- package/dist/prompts/secrets.d.ts.map +0 -1
- package/dist/prompts/secrets.js +0 -85
- package/dist/prompts/secrets.js.map +0 -1
- package/dist/prompts/server.d.ts +0 -9
- package/dist/prompts/server.d.ts.map +0 -1
- package/dist/prompts/server.js +0 -154
- package/dist/prompts/server.js.map +0 -1
- package/dist/prompts/storage.d.ts +0 -4
- package/dist/prompts/storage.d.ts.map +0 -1
- package/dist/prompts/storage.js +0 -129
- package/dist/prompts/storage.js.map +0 -1
- package/dist/runtime/agent-harness/auth-store.d.ts +0 -8
- package/dist/runtime/agent-harness/auth-store.d.ts.map +0 -1
- package/dist/runtime/agent-harness/auth-store.js +0 -92
- package/dist/runtime/agent-harness/auth-store.js.map +0 -1
- package/dist/runtime/artifact-contracts/index.d.ts +0 -47
- package/dist/runtime/artifact-contracts/index.d.ts.map +0 -1
- package/dist/runtime/artifact-contracts/index.js +0 -153
- package/dist/runtime/artifact-contracts/index.js.map +0 -1
- package/dist/runtime/artifact-contracts/types.d.ts +0 -82
- package/dist/runtime/artifact-contracts/types.d.ts.map +0 -1
- package/dist/runtime/artifact-contracts/types.js +0 -16
- package/dist/runtime/artifact-contracts/types.js.map +0 -1
- package/dist/runtime/cms-capability-registry/index.d.ts +0 -30
- package/dist/runtime/cms-capability-registry/index.d.ts.map +0 -1
- package/dist/runtime/cms-capability-registry/index.js +0 -183
- package/dist/runtime/cms-capability-registry/index.js.map +0 -1
- package/dist/runtime/cms-capability-registry/types.d.ts +0 -109
- package/dist/runtime/cms-capability-registry/types.d.ts.map +0 -1
- package/dist/runtime/cms-capability-registry/types.js +0 -19
- package/dist/runtime/cms-capability-registry/types.js.map +0 -1
- package/dist/runtime/cms-node-contracts/compile.d.ts +0 -6
- package/dist/runtime/cms-node-contracts/compile.d.ts.map +0 -1
- package/dist/runtime/cms-node-contracts/compile.js +0 -57
- package/dist/runtime/cms-node-contracts/compile.js.map +0 -1
- package/dist/runtime/cms-node-contracts/index.d.ts +0 -6
- package/dist/runtime/cms-node-contracts/index.d.ts.map +0 -1
- package/dist/runtime/cms-node-contracts/index.js +0 -5
- package/dist/runtime/cms-node-contracts/index.js.map +0 -1
- package/dist/runtime/cms-node-contracts/introspect.d.ts +0 -5
- package/dist/runtime/cms-node-contracts/introspect.d.ts.map +0 -1
- package/dist/runtime/cms-node-contracts/introspect.js +0 -61
- package/dist/runtime/cms-node-contracts/introspect.js.map +0 -1
- package/dist/runtime/cms-node-contracts/normalize.d.ts +0 -5
- package/dist/runtime/cms-node-contracts/normalize.d.ts.map +0 -1
- package/dist/runtime/cms-node-contracts/normalize.js +0 -112
- package/dist/runtime/cms-node-contracts/normalize.js.map +0 -1
- package/dist/runtime/cms-node-contracts/presenter.d.ts +0 -9
- package/dist/runtime/cms-node-contracts/presenter.d.ts.map +0 -1
- package/dist/runtime/cms-node-contracts/presenter.js +0 -117
- package/dist/runtime/cms-node-contracts/presenter.js.map +0 -1
- package/dist/runtime/cms-node-contracts/types.d.ts +0 -76
- package/dist/runtime/cms-node-contracts/types.d.ts.map +0 -1
- package/dist/runtime/cms-node-contracts/types.js +0 -2
- package/dist/runtime/cms-node-contracts/types.js.map +0 -1
- package/dist/runtime/dynamic-registry-pipeline/index.d.ts +0 -41
- package/dist/runtime/dynamic-registry-pipeline/index.d.ts.map +0 -1
- package/dist/runtime/dynamic-registry-pipeline/index.js +0 -224
- package/dist/runtime/dynamic-registry-pipeline/index.js.map +0 -1
- package/dist/runtime/dynamic-registry-pipeline/types.d.ts +0 -61
- package/dist/runtime/dynamic-registry-pipeline/types.d.ts.map +0 -1
- package/dist/runtime/dynamic-registry-pipeline/types.js +0 -14
- package/dist/runtime/dynamic-registry-pipeline/types.js.map +0 -1
- package/dist/runtime/hosted-execution-client/index.d.ts +0 -45
- package/dist/runtime/hosted-execution-client/index.d.ts.map +0 -1
- package/dist/runtime/hosted-execution-client/index.js +0 -527
- package/dist/runtime/hosted-execution-client/index.js.map +0 -1
- package/dist/runtime/hosted-execution-client/types.d.ts +0 -125
- package/dist/runtime/hosted-execution-client/types.d.ts.map +0 -1
- package/dist/runtime/hosted-execution-client/types.js +0 -9
- package/dist/runtime/hosted-execution-client/types.js.map +0 -1
- package/dist/runtime/index.d.ts +0 -24
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js +0 -24
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/machine-capability-resolver/index.d.ts +0 -32
- package/dist/runtime/machine-capability-resolver/index.d.ts.map +0 -1
- package/dist/runtime/machine-capability-resolver/index.js +0 -131
- package/dist/runtime/machine-capability-resolver/index.js.map +0 -1
- package/dist/runtime/machine-capability-resolver/types.d.ts +0 -46
- package/dist/runtime/machine-capability-resolver/types.d.ts.map +0 -1
- package/dist/runtime/machine-capability-resolver/types.js +0 -13
- package/dist/runtime/machine-capability-resolver/types.js.map +0 -1
- package/dist/runtime/native-intelligence/contract.d.ts +0 -174
- package/dist/runtime/native-intelligence/contract.d.ts.map +0 -1
- package/dist/runtime/native-intelligence/contract.js +0 -23
- package/dist/runtime/native-intelligence/contract.js.map +0 -1
- package/dist/runtime/native-intelligence/index.d.ts +0 -38
- package/dist/runtime/native-intelligence/index.d.ts.map +0 -1
- package/dist/runtime/native-intelligence/index.js +0 -121
- package/dist/runtime/native-intelligence/index.js.map +0 -1
- package/dist/runtime/native-intelligence/normalizer.d.ts +0 -22
- package/dist/runtime/native-intelligence/normalizer.d.ts.map +0 -1
- package/dist/runtime/native-intelligence/normalizer.js +0 -307
- package/dist/runtime/native-intelligence/normalizer.js.map +0 -1
- package/dist/runtime/native-intelligence/planner.d.ts +0 -22
- package/dist/runtime/native-intelligence/planner.d.ts.map +0 -1
- package/dist/runtime/native-intelligence/planner.js +0 -312
- package/dist/runtime/native-intelligence/planner.js.map +0 -1
- package/dist/runtime/native-intelligence/provider.d.ts +0 -27
- package/dist/runtime/native-intelligence/provider.d.ts.map +0 -1
- package/dist/runtime/native-intelligence/provider.js +0 -221
- package/dist/runtime/native-intelligence/provider.js.map +0 -1
- package/dist/runtime/native-intelligence/recommender.d.ts +0 -23
- package/dist/runtime/native-intelligence/recommender.d.ts.map +0 -1
- package/dist/runtime/native-intelligence/recommender.js +0 -299
- package/dist/runtime/native-intelligence/recommender.js.map +0 -1
- package/dist/runtime/native-intelligence/summarizer.d.ts +0 -22
- package/dist/runtime/native-intelligence/summarizer.d.ts.map +0 -1
- package/dist/runtime/native-intelligence/summarizer.js +0 -228
- package/dist/runtime/native-intelligence/summarizer.js.map +0 -1
- package/dist/runtime/open-agents/contract.d.ts +0 -58
- package/dist/runtime/open-agents/contract.d.ts.map +0 -1
- package/dist/runtime/open-agents/contract.js +0 -26
- package/dist/runtime/open-agents/contract.js.map +0 -1
- package/dist/runtime/open-agents/index.d.ts +0 -15
- package/dist/runtime/open-agents/index.d.ts.map +0 -1
- package/dist/runtime/open-agents/index.js +0 -72
- package/dist/runtime/open-agents/index.js.map +0 -1
- package/dist/runtime/open-agents/provider.d.ts +0 -32
- package/dist/runtime/open-agents/provider.d.ts.map +0 -1
- package/dist/runtime/open-agents/provider.js +0 -190
- package/dist/runtime/open-agents/provider.js.map +0 -1
- package/dist/runtime/qwen-code/contract.d.ts +0 -79
- package/dist/runtime/qwen-code/contract.d.ts.map +0 -1
- package/dist/runtime/qwen-code/contract.js +0 -40
- package/dist/runtime/qwen-code/contract.js.map +0 -1
- package/dist/runtime/qwen-code/health.d.ts +0 -11
- package/dist/runtime/qwen-code/health.d.ts.map +0 -1
- package/dist/runtime/qwen-code/health.js +0 -111
- package/dist/runtime/qwen-code/health.js.map +0 -1
- package/dist/runtime/qwen-code/index.d.ts +0 -26
- package/dist/runtime/qwen-code/index.d.ts.map +0 -1
- package/dist/runtime/qwen-code/index.js +0 -93
- package/dist/runtime/qwen-code/index.js.map +0 -1
- package/dist/runtime/qwen-code/provider.d.ts +0 -23
- package/dist/runtime/qwen-code/provider.d.ts.map +0 -1
- package/dist/runtime/qwen-code/provider.js +0 -134
- package/dist/runtime/qwen-code/provider.js.map +0 -1
- package/dist/runtime/workflow-hygiene/index.d.ts +0 -4
- package/dist/runtime/workflow-hygiene/index.d.ts.map +0 -1
- package/dist/runtime/workflow-hygiene/index.js +0 -3
- package/dist/runtime/workflow-hygiene/index.js.map +0 -1
- package/dist/runtime/workflow-hygiene/labels.d.ts +0 -4
- package/dist/runtime/workflow-hygiene/labels.d.ts.map +0 -1
- package/dist/runtime/workflow-hygiene/labels.js +0 -64
- package/dist/runtime/workflow-hygiene/labels.js.map +0 -1
- package/dist/runtime/workflow-hygiene/summaries.d.ts +0 -11
- package/dist/runtime/workflow-hygiene/summaries.d.ts.map +0 -1
- package/dist/runtime/workflow-hygiene/summaries.js +0 -17
- package/dist/runtime/workflow-hygiene/summaries.js.map +0 -1
- package/dist/runtime/workflow-hygiene/types.d.ts +0 -12
- package/dist/runtime/workflow-hygiene/types.d.ts.map +0 -1
- package/dist/runtime/workflow-hygiene/types.js +0 -2
- package/dist/runtime/workflow-hygiene/types.js.map +0 -1
- package/dist/starter/init.d.ts +0 -18
- package/dist/starter/init.d.ts.map +0 -1
- package/dist/starter/init.js +0 -108
- package/dist/starter/init.js.map +0 -1
- package/dist/starter/source-import/agent.d.ts +0 -60
- package/dist/starter/source-import/agent.d.ts.map +0 -1
- package/dist/starter/source-import/agent.js +0 -302
- package/dist/starter/source-import/agent.js.map +0 -1
- package/dist/starter/source-import/detect.d.ts +0 -20
- package/dist/starter/source-import/detect.d.ts.map +0 -1
- package/dist/starter/source-import/detect.js +0 -197
- package/dist/starter/source-import/detect.js.map +0 -1
- package/dist/starter/source-import/github-source.d.ts +0 -66
- package/dist/starter/source-import/github-source.d.ts.map +0 -1
- package/dist/starter/source-import/github-source.js +0 -233
- package/dist/starter/source-import/github-source.js.map +0 -1
- package/dist/starter/source-import/index.d.ts +0 -31
- package/dist/starter/source-import/index.d.ts.map +0 -1
- package/dist/starter/source-import/index.js +0 -31
- package/dist/starter/source-import/index.js.map +0 -1
- package/dist/starter/source-import/materialize.d.ts +0 -61
- package/dist/starter/source-import/materialize.d.ts.map +0 -1
- package/dist/starter/source-import/materialize.js +0 -260
- package/dist/starter/source-import/materialize.js.map +0 -1
- package/dist/starter/source-import/plan.d.ts +0 -39
- package/dist/starter/source-import/plan.d.ts.map +0 -1
- package/dist/starter/source-import/plan.js +0 -158
- package/dist/starter/source-import/plan.js.map +0 -1
- package/dist/starter/source-import/security.d.ts +0 -42
- package/dist/starter/source-import/security.d.ts.map +0 -1
- package/dist/starter/source-import/security.js +0 -323
- package/dist/starter/source-import/security.js.map +0 -1
- package/dist/starter/source-import/skills-source.d.ts +0 -28
- package/dist/starter/source-import/skills-source.d.ts.map +0 -1
- package/dist/starter/source-import/skills-source.js +0 -419
- package/dist/starter/source-import/skills-source.js.map +0 -1
- package/dist/starter/source-import/summarize.d.ts +0 -25
- package/dist/starter/source-import/summarize.d.ts.map +0 -1
- package/dist/starter/source-import/summarize.js +0 -107
- package/dist/starter/source-import/summarize.js.map +0 -1
- package/dist/starter/source-import/types.d.ts +0 -357
- package/dist/starter/source-import/types.d.ts.map +0 -1
- package/dist/starter/source-import/types.js +0 -28
- package/dist/starter/source-import/types.js.map +0 -1
- package/dist/starter/types.d.ts +0 -46
- package/dist/starter/types.d.ts.map +0 -1
- package/dist/starter/types.js +0 -11
- package/dist/starter/types.js.map +0 -1
- package/dist/status/probes.d.ts +0 -25
- package/dist/status/probes.d.ts.map +0 -1
- package/dist/status/probes.js +0 -297
- package/dist/status/probes.js.map +0 -1
- package/dist/status/runner.d.ts +0 -18
- package/dist/status/runner.d.ts.map +0 -1
- package/dist/status/runner.js +0 -185
- package/dist/status/runner.js.map +0 -1
- package/dist/status/types.d.ts +0 -60
- package/dist/status/types.d.ts.map +0 -1
- package/dist/status/types.js +0 -13
- package/dist/status/types.js.map +0 -1
- package/dist/templates/catalog.d.ts +0 -12
- package/dist/templates/catalog.d.ts.map +0 -1
- package/dist/templates/catalog.js +0 -226
- package/dist/templates/catalog.js.map +0 -1
- package/dist/templates/contract.d.ts +0 -62
- package/dist/templates/contract.d.ts.map +0 -1
- package/dist/templates/contract.js +0 -12
- package/dist/templates/contract.js.map +0 -1
- package/dist/templates/index.d.ts +0 -5
- package/dist/templates/index.d.ts.map +0 -1
- package/dist/templates/index.js +0 -2
- package/dist/templates/index.js.map +0 -1
- package/dist/templates/service.d.ts +0 -19
- package/dist/templates/service.d.ts.map +0 -1
- package/dist/templates/service.js +0 -132
- package/dist/templates/service.js.map +0 -1
- package/dist/utils/banner.d.ts +0 -2
- package/dist/utils/banner.d.ts.map +0 -1
- package/dist/utils/banner.js.map +0 -1
- package/dist/utils/net.d.ts +0 -5
- package/dist/utils/net.d.ts.map +0 -1
- package/dist/utils/net.js +0 -19
- package/dist/utils/net.js.map +0 -1
- package/dist/utils/path-resolver.d.ts +0 -2
- package/dist/utils/path-resolver.d.ts.map +0 -1
- package/dist/utils/path-resolver.js +0 -22
- package/dist/utils/path-resolver.js.map +0 -1
- package/dist/utils/progress.d.ts +0 -24
- package/dist/utils/progress.d.ts.map +0 -1
- package/dist/utils/progress.js +0 -57
- package/dist/utils/progress.js.map +0 -1
- package/dist/utils/table-renderer.d.ts +0 -28
- package/dist/utils/table-renderer.d.ts.map +0 -1
- package/dist/utils/table-renderer.js +0 -83
- package/dist/utils/table-renderer.js.map +0 -1
|
@@ -1,874 +0,0 @@
|
|
|
1
|
-
import { chmodSync, copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, readlinkSync, rmSync, statSync, symlinkSync, writeFileSync, } from "node:fs";
|
|
2
|
-
import os from "node:os";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { execFileSync } from "node:child_process";
|
|
5
|
-
import { createServer } from "node:net";
|
|
6
|
-
import * as p from "@clack/prompts";
|
|
7
|
-
import pc from "picocolors";
|
|
8
|
-
import { eq } from "drizzle-orm";
|
|
9
|
-
import { applyPendingMigrations, createDb, ensurePostgresDatabase, formatDatabaseBackupResult, projectWorkspaces, runDatabaseBackup, runDatabaseRestore, } from "@paperclipai/db";
|
|
10
|
-
import { ensureAgentJwtSecret, loadPaperclipEnvFile, mergePaperclipEnvEntries, readPaperclipEnvEntries, resolvePaperclipEnvFile } from "../config/env.js";
|
|
11
|
-
import { expandHomePrefix } from "../config/home.js";
|
|
12
|
-
import { readConfig, resolveConfigPath, writeConfig } from "../config/store.js";
|
|
13
|
-
import { printPaperclipCliBanner } from "../utils/banner.js";
|
|
14
|
-
import { resolveRuntimeLikePath } from "../utils/path-resolver.js";
|
|
15
|
-
import { buildWorktreeConfig, buildWorktreeEnvEntries, DEFAULT_WORKTREE_HOME, formatShellExports, generateWorktreeColor, isWorktreeSeedMode, resolveSuggestedWorktreeName, resolveWorktreeSeedPlan, resolveWorktreeLocalPaths, sanitizeWorktreeInstanceId, } from "./worktree-lib.js";
|
|
16
|
-
function nonEmpty(value) {
|
|
17
|
-
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
18
|
-
}
|
|
19
|
-
function isCurrentSourceConfigPath(sourceConfigPath) {
|
|
20
|
-
const currentConfigPath = process.env.PAPERCLIP_CONFIG;
|
|
21
|
-
if (!currentConfigPath || currentConfigPath.trim().length === 0) {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
return path.resolve(currentConfigPath) === path.resolve(sourceConfigPath);
|
|
25
|
-
}
|
|
26
|
-
const WORKTREE_NAME_PREFIX = "paperclip-";
|
|
27
|
-
function resolveWorktreeMakeName(name) {
|
|
28
|
-
const value = nonEmpty(name);
|
|
29
|
-
if (!value) {
|
|
30
|
-
throw new Error("Worktree name is required.");
|
|
31
|
-
}
|
|
32
|
-
if (!/^[A-Za-z0-9._-]+$/.test(value)) {
|
|
33
|
-
throw new Error("Worktree name must contain only letters, numbers, dots, underscores, or dashes.");
|
|
34
|
-
}
|
|
35
|
-
return value.startsWith(WORKTREE_NAME_PREFIX) ? value : `${WORKTREE_NAME_PREFIX}${value}`;
|
|
36
|
-
}
|
|
37
|
-
function resolveWorktreeHome(explicit) {
|
|
38
|
-
return explicit ?? process.env.PAPERCLIP_WORKTREES_DIR ?? DEFAULT_WORKTREE_HOME;
|
|
39
|
-
}
|
|
40
|
-
function resolveWorktreeStartPoint(explicit) {
|
|
41
|
-
return explicit ?? nonEmpty(process.env.PAPERCLIP_WORKTREE_START_POINT) ?? undefined;
|
|
42
|
-
}
|
|
43
|
-
export function resolveWorktreeMakeTargetPath(name) {
|
|
44
|
-
return path.resolve(os.homedir(), resolveWorktreeMakeName(name));
|
|
45
|
-
}
|
|
46
|
-
function extractExecSyncErrorMessage(error) {
|
|
47
|
-
if (!error || typeof error !== "object") {
|
|
48
|
-
return error instanceof Error ? error.message : null;
|
|
49
|
-
}
|
|
50
|
-
const stderr = "stderr" in error ? error.stderr : null;
|
|
51
|
-
if (typeof stderr === "string") {
|
|
52
|
-
return nonEmpty(stderr);
|
|
53
|
-
}
|
|
54
|
-
if (stderr instanceof Buffer) {
|
|
55
|
-
return nonEmpty(stderr.toString("utf8"));
|
|
56
|
-
}
|
|
57
|
-
return error instanceof Error ? nonEmpty(error.message) : null;
|
|
58
|
-
}
|
|
59
|
-
function localBranchExists(cwd, branchName) {
|
|
60
|
-
try {
|
|
61
|
-
execFileSync("git", ["show-ref", "--verify", "--quiet", `refs/heads/${branchName}`], {
|
|
62
|
-
cwd,
|
|
63
|
-
stdio: "ignore",
|
|
64
|
-
});
|
|
65
|
-
return true;
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
export function resolveGitWorktreeAddArgs(input) {
|
|
72
|
-
if (input.branchExists && !input.startPoint) {
|
|
73
|
-
return ["worktree", "add", input.targetPath, input.branchName];
|
|
74
|
-
}
|
|
75
|
-
const commitish = input.startPoint ?? "HEAD";
|
|
76
|
-
return ["worktree", "add", "-b", input.branchName, input.targetPath, commitish];
|
|
77
|
-
}
|
|
78
|
-
function readPidFilePort(postmasterPidFile) {
|
|
79
|
-
if (!existsSync(postmasterPidFile))
|
|
80
|
-
return null;
|
|
81
|
-
try {
|
|
82
|
-
const lines = readFileSync(postmasterPidFile, "utf8").split("\n");
|
|
83
|
-
const port = Number(lines[3]?.trim());
|
|
84
|
-
return Number.isInteger(port) && port > 0 ? port : null;
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
function readRunningPostmasterPid(postmasterPidFile) {
|
|
91
|
-
if (!existsSync(postmasterPidFile))
|
|
92
|
-
return null;
|
|
93
|
-
try {
|
|
94
|
-
const pid = Number(readFileSync(postmasterPidFile, "utf8").split("\n")[0]?.trim());
|
|
95
|
-
if (!Number.isInteger(pid) || pid <= 0)
|
|
96
|
-
return null;
|
|
97
|
-
process.kill(pid, 0);
|
|
98
|
-
return pid;
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
async function isPortAvailable(port) {
|
|
105
|
-
return await new Promise((resolve) => {
|
|
106
|
-
const server = createServer();
|
|
107
|
-
server.unref();
|
|
108
|
-
server.once("error", () => resolve(false));
|
|
109
|
-
server.listen(port, "127.0.0.1", () => {
|
|
110
|
-
server.close(() => resolve(true));
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
async function findAvailablePort(preferredPort, reserved = new Set()) {
|
|
115
|
-
let port = Math.max(1, Math.trunc(preferredPort));
|
|
116
|
-
while (reserved.has(port) || !(await isPortAvailable(port))) {
|
|
117
|
-
port += 1;
|
|
118
|
-
}
|
|
119
|
-
return port;
|
|
120
|
-
}
|
|
121
|
-
function detectGitBranchName(cwd) {
|
|
122
|
-
try {
|
|
123
|
-
const value = execFileSync("git", ["branch", "--show-current"], {
|
|
124
|
-
cwd,
|
|
125
|
-
encoding: "utf8",
|
|
126
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
127
|
-
}).trim();
|
|
128
|
-
return nonEmpty(value);
|
|
129
|
-
}
|
|
130
|
-
catch {
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
function detectGitWorkspaceInfo(cwd) {
|
|
135
|
-
try {
|
|
136
|
-
const root = execFileSync("git", ["rev-parse", "--show-toplevel"], {
|
|
137
|
-
cwd,
|
|
138
|
-
encoding: "utf8",
|
|
139
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
140
|
-
}).trim();
|
|
141
|
-
const commonDirRaw = execFileSync("git", ["rev-parse", "--git-common-dir"], {
|
|
142
|
-
cwd: root,
|
|
143
|
-
encoding: "utf8",
|
|
144
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
145
|
-
}).trim();
|
|
146
|
-
const gitDirRaw = execFileSync("git", ["rev-parse", "--git-dir"], {
|
|
147
|
-
cwd: root,
|
|
148
|
-
encoding: "utf8",
|
|
149
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
150
|
-
}).trim();
|
|
151
|
-
const hooksPathRaw = execFileSync("git", ["rev-parse", "--git-path", "hooks"], {
|
|
152
|
-
cwd: root,
|
|
153
|
-
encoding: "utf8",
|
|
154
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
155
|
-
}).trim();
|
|
156
|
-
return {
|
|
157
|
-
root: path.resolve(root),
|
|
158
|
-
commonDir: path.resolve(root, commonDirRaw),
|
|
159
|
-
gitDir: path.resolve(root, gitDirRaw),
|
|
160
|
-
hooksPath: path.resolve(root, hooksPathRaw),
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
function copyDirectoryContents(sourceDir, targetDir) {
|
|
168
|
-
if (!existsSync(sourceDir))
|
|
169
|
-
return false;
|
|
170
|
-
const entries = readdirSync(sourceDir, { withFileTypes: true });
|
|
171
|
-
if (entries.length === 0)
|
|
172
|
-
return false;
|
|
173
|
-
mkdirSync(targetDir, { recursive: true });
|
|
174
|
-
let copied = false;
|
|
175
|
-
for (const entry of entries) {
|
|
176
|
-
const sourcePath = path.resolve(sourceDir, entry.name);
|
|
177
|
-
const targetPath = path.resolve(targetDir, entry.name);
|
|
178
|
-
if (entry.isDirectory()) {
|
|
179
|
-
mkdirSync(targetPath, { recursive: true });
|
|
180
|
-
copyDirectoryContents(sourcePath, targetPath);
|
|
181
|
-
copied = true;
|
|
182
|
-
continue;
|
|
183
|
-
}
|
|
184
|
-
if (entry.isSymbolicLink()) {
|
|
185
|
-
rmSync(targetPath, { recursive: true, force: true });
|
|
186
|
-
symlinkSync(readlinkSync(sourcePath), targetPath);
|
|
187
|
-
copied = true;
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
copyFileSync(sourcePath, targetPath);
|
|
191
|
-
try {
|
|
192
|
-
chmodSync(targetPath, statSync(sourcePath).mode & 0o777);
|
|
193
|
-
}
|
|
194
|
-
catch {
|
|
195
|
-
// best effort
|
|
196
|
-
}
|
|
197
|
-
copied = true;
|
|
198
|
-
}
|
|
199
|
-
return copied;
|
|
200
|
-
}
|
|
201
|
-
export function copyGitHooksToWorktreeGitDir(cwd) {
|
|
202
|
-
const workspace = detectGitWorkspaceInfo(cwd);
|
|
203
|
-
if (!workspace)
|
|
204
|
-
return null;
|
|
205
|
-
const sourceHooksPath = workspace.hooksPath;
|
|
206
|
-
const targetHooksPath = path.resolve(workspace.gitDir, "hooks");
|
|
207
|
-
if (sourceHooksPath === targetHooksPath) {
|
|
208
|
-
return {
|
|
209
|
-
sourceHooksPath,
|
|
210
|
-
targetHooksPath,
|
|
211
|
-
copied: false,
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
return {
|
|
215
|
-
sourceHooksPath,
|
|
216
|
-
targetHooksPath,
|
|
217
|
-
copied: copyDirectoryContents(sourceHooksPath, targetHooksPath),
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
export function rebindWorkspaceCwd(input) {
|
|
221
|
-
const sourceRepoRoot = path.resolve(input.sourceRepoRoot);
|
|
222
|
-
const targetRepoRoot = path.resolve(input.targetRepoRoot);
|
|
223
|
-
const workspaceCwd = path.resolve(input.workspaceCwd);
|
|
224
|
-
const relative = path.relative(sourceRepoRoot, workspaceCwd);
|
|
225
|
-
if (!relative || relative === "") {
|
|
226
|
-
return targetRepoRoot;
|
|
227
|
-
}
|
|
228
|
-
if (relative.startsWith("..") || path.isAbsolute(relative)) {
|
|
229
|
-
return null;
|
|
230
|
-
}
|
|
231
|
-
return path.resolve(targetRepoRoot, relative);
|
|
232
|
-
}
|
|
233
|
-
async function rebindSeededProjectWorkspaces(input) {
|
|
234
|
-
const targetRepo = detectGitWorkspaceInfo(input.currentCwd);
|
|
235
|
-
if (!targetRepo)
|
|
236
|
-
return [];
|
|
237
|
-
const db = createDb(input.targetConnectionString);
|
|
238
|
-
const closableDb = db;
|
|
239
|
-
try {
|
|
240
|
-
const rows = await db
|
|
241
|
-
.select({
|
|
242
|
-
id: projectWorkspaces.id,
|
|
243
|
-
name: projectWorkspaces.name,
|
|
244
|
-
cwd: projectWorkspaces.cwd,
|
|
245
|
-
})
|
|
246
|
-
.from(projectWorkspaces);
|
|
247
|
-
const rebound = [];
|
|
248
|
-
for (const row of rows) {
|
|
249
|
-
const workspaceCwd = nonEmpty(row.cwd);
|
|
250
|
-
if (!workspaceCwd)
|
|
251
|
-
continue;
|
|
252
|
-
const sourceRepo = detectGitWorkspaceInfo(workspaceCwd);
|
|
253
|
-
if (!sourceRepo)
|
|
254
|
-
continue;
|
|
255
|
-
if (sourceRepo.commonDir !== targetRepo.commonDir)
|
|
256
|
-
continue;
|
|
257
|
-
const reboundCwd = rebindWorkspaceCwd({
|
|
258
|
-
sourceRepoRoot: sourceRepo.root,
|
|
259
|
-
targetRepoRoot: targetRepo.root,
|
|
260
|
-
workspaceCwd,
|
|
261
|
-
});
|
|
262
|
-
if (!reboundCwd)
|
|
263
|
-
continue;
|
|
264
|
-
const normalizedCurrent = path.resolve(workspaceCwd);
|
|
265
|
-
if (reboundCwd === normalizedCurrent)
|
|
266
|
-
continue;
|
|
267
|
-
if (!existsSync(reboundCwd))
|
|
268
|
-
continue;
|
|
269
|
-
await db
|
|
270
|
-
.update(projectWorkspaces)
|
|
271
|
-
.set({
|
|
272
|
-
cwd: reboundCwd,
|
|
273
|
-
updatedAt: new Date(),
|
|
274
|
-
})
|
|
275
|
-
.where(eq(projectWorkspaces.id, row.id));
|
|
276
|
-
rebound.push({
|
|
277
|
-
name: row.name,
|
|
278
|
-
fromCwd: normalizedCurrent,
|
|
279
|
-
toCwd: reboundCwd,
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
return rebound;
|
|
283
|
-
}
|
|
284
|
-
finally {
|
|
285
|
-
await closableDb.$client?.end?.({ timeout: 5 }).catch(() => undefined);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
export function resolveSourceConfigPath(opts) {
|
|
289
|
-
if (opts.sourceConfigPathOverride)
|
|
290
|
-
return path.resolve(opts.sourceConfigPathOverride);
|
|
291
|
-
if (opts.fromConfig)
|
|
292
|
-
return path.resolve(opts.fromConfig);
|
|
293
|
-
if (!opts.fromDataDir && !opts.fromInstance) {
|
|
294
|
-
return resolveConfigPath();
|
|
295
|
-
}
|
|
296
|
-
const sourceHome = path.resolve(expandHomePrefix(opts.fromDataDir ?? "~/.paperclip"));
|
|
297
|
-
const sourceInstanceId = sanitizeWorktreeInstanceId(opts.fromInstance ?? "default");
|
|
298
|
-
return path.resolve(sourceHome, "instances", sourceInstanceId, "config.json");
|
|
299
|
-
}
|
|
300
|
-
function resolveSourceConnectionString(config, envEntries, portOverride) {
|
|
301
|
-
if (config.database.mode === "postgres") {
|
|
302
|
-
const connectionString = nonEmpty(envEntries.DATABASE_URL) ?? nonEmpty(config.database.connectionString);
|
|
303
|
-
if (!connectionString) {
|
|
304
|
-
throw new Error("Source instance uses postgres mode but has no connection string in config or adjacent .env.");
|
|
305
|
-
}
|
|
306
|
-
return connectionString;
|
|
307
|
-
}
|
|
308
|
-
const port = portOverride ?? config.database.embeddedPostgresPort;
|
|
309
|
-
return `postgres://paperclip:paperclip@127.0.0.1:${port}/paperclip`;
|
|
310
|
-
}
|
|
311
|
-
export function copySeededSecretsKey(input) {
|
|
312
|
-
if (input.sourceConfig.secrets.provider !== "local_encrypted") {
|
|
313
|
-
return;
|
|
314
|
-
}
|
|
315
|
-
mkdirSync(path.dirname(input.targetKeyFilePath), { recursive: true });
|
|
316
|
-
const allowProcessEnvFallback = isCurrentSourceConfigPath(input.sourceConfigPath);
|
|
317
|
-
const sourceInlineMasterKey = nonEmpty(input.sourceEnvEntries.PAPERCLIP_SECRETS_MASTER_KEY) ??
|
|
318
|
-
(allowProcessEnvFallback ? nonEmpty(process.env.PAPERCLIP_SECRETS_MASTER_KEY) : null);
|
|
319
|
-
if (sourceInlineMasterKey) {
|
|
320
|
-
writeFileSync(input.targetKeyFilePath, sourceInlineMasterKey, {
|
|
321
|
-
encoding: "utf8",
|
|
322
|
-
mode: 0o600,
|
|
323
|
-
});
|
|
324
|
-
try {
|
|
325
|
-
chmodSync(input.targetKeyFilePath, 0o600);
|
|
326
|
-
}
|
|
327
|
-
catch {
|
|
328
|
-
// best effort
|
|
329
|
-
}
|
|
330
|
-
return;
|
|
331
|
-
}
|
|
332
|
-
const sourceKeyFileOverride = nonEmpty(input.sourceEnvEntries.PAPERCLIP_SECRETS_MASTER_KEY_FILE) ??
|
|
333
|
-
(allowProcessEnvFallback ? nonEmpty(process.env.PAPERCLIP_SECRETS_MASTER_KEY_FILE) : null);
|
|
334
|
-
const sourceConfiguredKeyPath = sourceKeyFileOverride ?? input.sourceConfig.secrets.localEncrypted.keyFilePath;
|
|
335
|
-
const sourceKeyFilePath = resolveRuntimeLikePath(sourceConfiguredKeyPath, input.sourceConfigPath);
|
|
336
|
-
if (!existsSync(sourceKeyFilePath)) {
|
|
337
|
-
throw new Error(`Cannot seed worktree database because source local_encrypted secrets key was not found at ${sourceKeyFilePath}.`);
|
|
338
|
-
}
|
|
339
|
-
copyFileSync(sourceKeyFilePath, input.targetKeyFilePath);
|
|
340
|
-
try {
|
|
341
|
-
chmodSync(input.targetKeyFilePath, 0o600);
|
|
342
|
-
}
|
|
343
|
-
catch {
|
|
344
|
-
// best effort
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
async function ensureEmbeddedPostgres(dataDir, preferredPort) {
|
|
348
|
-
const moduleName = "embedded-postgres";
|
|
349
|
-
let EmbeddedPostgres;
|
|
350
|
-
try {
|
|
351
|
-
const mod = await import(moduleName);
|
|
352
|
-
EmbeddedPostgres = mod.default;
|
|
353
|
-
}
|
|
354
|
-
catch {
|
|
355
|
-
throw new Error("Embedded PostgreSQL support requires dependency `embedded-postgres`. Reinstall dependencies and try again.");
|
|
356
|
-
}
|
|
357
|
-
const postmasterPidFile = path.resolve(dataDir, "postmaster.pid");
|
|
358
|
-
const runningPid = readRunningPostmasterPid(postmasterPidFile);
|
|
359
|
-
if (runningPid) {
|
|
360
|
-
return {
|
|
361
|
-
port: readPidFilePort(postmasterPidFile) ?? preferredPort,
|
|
362
|
-
startedByThisProcess: false,
|
|
363
|
-
stop: async () => { },
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
const port = await findAvailablePort(preferredPort);
|
|
367
|
-
const instance = new EmbeddedPostgres({
|
|
368
|
-
databaseDir: dataDir,
|
|
369
|
-
user: "paperclip",
|
|
370
|
-
password: "paperclip",
|
|
371
|
-
port,
|
|
372
|
-
persistent: true,
|
|
373
|
-
initdbFlags: ["--encoding=UTF8", "--locale=C"],
|
|
374
|
-
onLog: () => { },
|
|
375
|
-
onError: () => { },
|
|
376
|
-
});
|
|
377
|
-
if (!existsSync(path.resolve(dataDir, "PG_VERSION"))) {
|
|
378
|
-
await instance.initialise();
|
|
379
|
-
}
|
|
380
|
-
if (existsSync(postmasterPidFile)) {
|
|
381
|
-
rmSync(postmasterPidFile, { force: true });
|
|
382
|
-
}
|
|
383
|
-
await instance.start();
|
|
384
|
-
return {
|
|
385
|
-
port,
|
|
386
|
-
startedByThisProcess: true,
|
|
387
|
-
stop: async () => {
|
|
388
|
-
await instance.stop();
|
|
389
|
-
},
|
|
390
|
-
};
|
|
391
|
-
}
|
|
392
|
-
async function seedWorktreeDatabase(input) {
|
|
393
|
-
const seedPlan = resolveWorktreeSeedPlan(input.seedMode);
|
|
394
|
-
const sourceEnvFile = resolvePaperclipEnvFile(input.sourceConfigPath);
|
|
395
|
-
const sourceEnvEntries = readPaperclipEnvEntries(sourceEnvFile);
|
|
396
|
-
copySeededSecretsKey({
|
|
397
|
-
sourceConfigPath: input.sourceConfigPath,
|
|
398
|
-
sourceConfig: input.sourceConfig,
|
|
399
|
-
sourceEnvEntries,
|
|
400
|
-
targetKeyFilePath: input.targetPaths.secretsKeyFilePath,
|
|
401
|
-
});
|
|
402
|
-
let sourceHandle = null;
|
|
403
|
-
let targetHandle = null;
|
|
404
|
-
try {
|
|
405
|
-
if (input.sourceConfig.database.mode === "embedded-postgres") {
|
|
406
|
-
sourceHandle = await ensureEmbeddedPostgres(input.sourceConfig.database.embeddedPostgresDataDir, input.sourceConfig.database.embeddedPostgresPort);
|
|
407
|
-
}
|
|
408
|
-
const sourceConnectionString = resolveSourceConnectionString(input.sourceConfig, sourceEnvEntries, sourceHandle?.port);
|
|
409
|
-
const backup = await runDatabaseBackup({
|
|
410
|
-
connectionString: sourceConnectionString,
|
|
411
|
-
backupDir: path.resolve(input.targetPaths.backupDir, "seed"),
|
|
412
|
-
retentionDays: 7,
|
|
413
|
-
filenamePrefix: `${input.instanceId}-seed`,
|
|
414
|
-
includeMigrationJournal: true,
|
|
415
|
-
excludeTables: seedPlan.excludedTables,
|
|
416
|
-
nullifyColumns: seedPlan.nullifyColumns,
|
|
417
|
-
});
|
|
418
|
-
targetHandle = await ensureEmbeddedPostgres(input.targetConfig.database.embeddedPostgresDataDir, input.targetConfig.database.embeddedPostgresPort);
|
|
419
|
-
const adminConnectionString = `postgres://paperclip:paperclip@127.0.0.1:${targetHandle.port}/postgres`;
|
|
420
|
-
await ensurePostgresDatabase(adminConnectionString, "paperclip");
|
|
421
|
-
const targetConnectionString = `postgres://paperclip:paperclip@127.0.0.1:${targetHandle.port}/paperclip`;
|
|
422
|
-
await runDatabaseRestore({
|
|
423
|
-
connectionString: targetConnectionString,
|
|
424
|
-
backupFile: backup.backupFile,
|
|
425
|
-
});
|
|
426
|
-
await applyPendingMigrations(targetConnectionString);
|
|
427
|
-
const reboundWorkspaces = await rebindSeededProjectWorkspaces({
|
|
428
|
-
targetConnectionString,
|
|
429
|
-
currentCwd: input.targetPaths.cwd,
|
|
430
|
-
});
|
|
431
|
-
return {
|
|
432
|
-
backupSummary: formatDatabaseBackupResult(backup),
|
|
433
|
-
reboundWorkspaces,
|
|
434
|
-
};
|
|
435
|
-
}
|
|
436
|
-
finally {
|
|
437
|
-
if (targetHandle?.startedByThisProcess) {
|
|
438
|
-
await targetHandle.stop();
|
|
439
|
-
}
|
|
440
|
-
if (sourceHandle?.startedByThisProcess) {
|
|
441
|
-
await sourceHandle.stop();
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
async function runWorktreeInit(opts) {
|
|
446
|
-
const cwd = process.cwd();
|
|
447
|
-
const worktreeName = resolveSuggestedWorktreeName(cwd, opts.name ?? detectGitBranchName(cwd) ?? undefined);
|
|
448
|
-
const seedMode = opts.seedMode ?? "minimal";
|
|
449
|
-
if (!isWorktreeSeedMode(seedMode)) {
|
|
450
|
-
throw new Error(`Unsupported seed mode "${seedMode}". Expected one of: minimal, full.`);
|
|
451
|
-
}
|
|
452
|
-
const instanceId = sanitizeWorktreeInstanceId(opts.instance ?? worktreeName);
|
|
453
|
-
const paths = resolveWorktreeLocalPaths({
|
|
454
|
-
cwd,
|
|
455
|
-
homeDir: resolveWorktreeHome(opts.home),
|
|
456
|
-
instanceId,
|
|
457
|
-
});
|
|
458
|
-
const branding = {
|
|
459
|
-
name: worktreeName,
|
|
460
|
-
color: generateWorktreeColor(),
|
|
461
|
-
};
|
|
462
|
-
const sourceConfigPath = resolveSourceConfigPath(opts);
|
|
463
|
-
const sourceConfig = existsSync(sourceConfigPath) ? readConfig(sourceConfigPath) : null;
|
|
464
|
-
if ((existsSync(paths.configPath) || existsSync(paths.instanceRoot)) && !opts.force) {
|
|
465
|
-
throw new Error(`Worktree config already exists at ${paths.configPath} or instance data exists at ${paths.instanceRoot}. Re-run with --force to replace it.`);
|
|
466
|
-
}
|
|
467
|
-
if (opts.force) {
|
|
468
|
-
rmSync(paths.repoConfigDir, { recursive: true, force: true });
|
|
469
|
-
rmSync(paths.instanceRoot, { recursive: true, force: true });
|
|
470
|
-
}
|
|
471
|
-
const preferredServerPort = opts.serverPort ?? ((sourceConfig?.server.port ?? 3100) + 1);
|
|
472
|
-
const serverPort = await findAvailablePort(preferredServerPort);
|
|
473
|
-
const preferredDbPort = opts.dbPort ?? ((sourceConfig?.database.embeddedPostgresPort ?? 54329) + 1);
|
|
474
|
-
const databasePort = await findAvailablePort(preferredDbPort, new Set([serverPort]));
|
|
475
|
-
const targetConfig = buildWorktreeConfig({
|
|
476
|
-
sourceConfig,
|
|
477
|
-
paths,
|
|
478
|
-
serverPort,
|
|
479
|
-
databasePort,
|
|
480
|
-
});
|
|
481
|
-
writeConfig(targetConfig, paths.configPath);
|
|
482
|
-
const sourceEnvEntries = readPaperclipEnvEntries(resolvePaperclipEnvFile(sourceConfigPath));
|
|
483
|
-
const existingAgentJwtSecret = nonEmpty(sourceEnvEntries.PAPERCLIP_AGENT_JWT_SECRET) ??
|
|
484
|
-
nonEmpty(process.env.PAPERCLIP_AGENT_JWT_SECRET);
|
|
485
|
-
mergePaperclipEnvEntries({
|
|
486
|
-
...buildWorktreeEnvEntries(paths, branding),
|
|
487
|
-
...(existingAgentJwtSecret ? { PAPERCLIP_AGENT_JWT_SECRET: existingAgentJwtSecret } : {}),
|
|
488
|
-
}, paths.envPath);
|
|
489
|
-
ensureAgentJwtSecret(paths.configPath);
|
|
490
|
-
loadPaperclipEnvFile(paths.configPath);
|
|
491
|
-
const copiedGitHooks = copyGitHooksToWorktreeGitDir(cwd);
|
|
492
|
-
let seedSummary = null;
|
|
493
|
-
let reboundWorkspaceSummary = [];
|
|
494
|
-
if (opts.seed !== false) {
|
|
495
|
-
if (!sourceConfig) {
|
|
496
|
-
throw new Error(`Cannot seed worktree database because source config was not found at ${sourceConfigPath}. Use --no-seed or provide --from-config.`);
|
|
497
|
-
}
|
|
498
|
-
const spinner = p.spinner();
|
|
499
|
-
spinner.start(`Seeding isolated worktree database from source instance (${seedMode})...`);
|
|
500
|
-
try {
|
|
501
|
-
const seeded = await seedWorktreeDatabase({
|
|
502
|
-
sourceConfigPath,
|
|
503
|
-
sourceConfig,
|
|
504
|
-
targetConfig,
|
|
505
|
-
targetPaths: paths,
|
|
506
|
-
instanceId,
|
|
507
|
-
seedMode,
|
|
508
|
-
});
|
|
509
|
-
seedSummary = seeded.backupSummary;
|
|
510
|
-
reboundWorkspaceSummary = seeded.reboundWorkspaces;
|
|
511
|
-
spinner.stop(`Seeded isolated worktree database (${seedMode}).`);
|
|
512
|
-
}
|
|
513
|
-
catch (error) {
|
|
514
|
-
spinner.stop(pc.red("Failed to seed worktree database."));
|
|
515
|
-
throw error;
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
p.log.message(pc.dim(`Repo config: ${paths.configPath}`));
|
|
519
|
-
p.log.message(pc.dim(`Repo env: ${paths.envPath}`));
|
|
520
|
-
p.log.message(pc.dim(`Isolated home: ${paths.homeDir}`));
|
|
521
|
-
p.log.message(pc.dim(`Instance: ${paths.instanceId}`));
|
|
522
|
-
p.log.message(pc.dim(`Worktree badge: ${branding.name} (${branding.color})`));
|
|
523
|
-
p.log.message(pc.dim(`Server port: ${serverPort} | DB port: ${databasePort}`));
|
|
524
|
-
if (copiedGitHooks?.copied) {
|
|
525
|
-
p.log.message(pc.dim(`Mirrored git hooks: ${copiedGitHooks.sourceHooksPath} -> ${copiedGitHooks.targetHooksPath}`));
|
|
526
|
-
}
|
|
527
|
-
if (seedSummary) {
|
|
528
|
-
p.log.message(pc.dim(`Seed mode: ${seedMode}`));
|
|
529
|
-
p.log.message(pc.dim(`Seed snapshot: ${seedSummary}`));
|
|
530
|
-
for (const rebound of reboundWorkspaceSummary) {
|
|
531
|
-
p.log.message(pc.dim(`Rebound workspace ${rebound.name}: ${rebound.fromCwd} -> ${rebound.toCwd}`));
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
p.outro(pc.green(`Worktree ready. Run Paperclip inside this repo and the CLI/server will use ${paths.instanceId} automatically.`));
|
|
535
|
-
}
|
|
536
|
-
export async function worktreeInitCommand(opts) {
|
|
537
|
-
printPaperclipCliBanner();
|
|
538
|
-
p.intro(pc.bgCyan(pc.black(" paperclipai worktree init ")));
|
|
539
|
-
await runWorktreeInit(opts);
|
|
540
|
-
}
|
|
541
|
-
export async function worktreeMakeCommand(nameArg, opts) {
|
|
542
|
-
printPaperclipCliBanner();
|
|
543
|
-
p.intro(pc.bgCyan(pc.black(" paperclipai worktree:make ")));
|
|
544
|
-
const name = resolveWorktreeMakeName(nameArg);
|
|
545
|
-
const startPoint = resolveWorktreeStartPoint(opts.startPoint);
|
|
546
|
-
const sourceCwd = process.cwd();
|
|
547
|
-
const sourceConfigPath = resolveSourceConfigPath(opts);
|
|
548
|
-
const targetPath = resolveWorktreeMakeTargetPath(name);
|
|
549
|
-
if (existsSync(targetPath)) {
|
|
550
|
-
throw new Error(`Target path already exists: ${targetPath}`);
|
|
551
|
-
}
|
|
552
|
-
mkdirSync(path.dirname(targetPath), { recursive: true });
|
|
553
|
-
if (startPoint) {
|
|
554
|
-
const [remote] = startPoint.split("/", 1);
|
|
555
|
-
try {
|
|
556
|
-
execFileSync("git", ["fetch", remote], {
|
|
557
|
-
cwd: sourceCwd,
|
|
558
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
559
|
-
});
|
|
560
|
-
}
|
|
561
|
-
catch (error) {
|
|
562
|
-
throw new Error(`Failed to fetch from remote "${remote}": ${extractExecSyncErrorMessage(error) ?? String(error)}`);
|
|
563
|
-
}
|
|
564
|
-
}
|
|
565
|
-
const worktreeArgs = resolveGitWorktreeAddArgs({
|
|
566
|
-
branchName: name,
|
|
567
|
-
targetPath,
|
|
568
|
-
branchExists: !startPoint && localBranchExists(sourceCwd, name),
|
|
569
|
-
startPoint,
|
|
570
|
-
});
|
|
571
|
-
const spinner = p.spinner();
|
|
572
|
-
spinner.start(`Creating git worktree at ${targetPath}...`);
|
|
573
|
-
try {
|
|
574
|
-
execFileSync("git", worktreeArgs, {
|
|
575
|
-
cwd: sourceCwd,
|
|
576
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
577
|
-
});
|
|
578
|
-
spinner.stop(`Created git worktree at ${targetPath}.`);
|
|
579
|
-
}
|
|
580
|
-
catch (error) {
|
|
581
|
-
spinner.stop(pc.red("Failed to create git worktree."));
|
|
582
|
-
throw new Error(extractExecSyncErrorMessage(error) ?? String(error));
|
|
583
|
-
}
|
|
584
|
-
const installSpinner = p.spinner();
|
|
585
|
-
installSpinner.start("Installing dependencies...");
|
|
586
|
-
try {
|
|
587
|
-
execFileSync("pnpm", ["install"], {
|
|
588
|
-
cwd: targetPath,
|
|
589
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
590
|
-
});
|
|
591
|
-
installSpinner.stop("Installed dependencies.");
|
|
592
|
-
}
|
|
593
|
-
catch (error) {
|
|
594
|
-
installSpinner.stop(pc.yellow("Failed to install dependencies (continuing anyway)."));
|
|
595
|
-
p.log.warning(extractExecSyncErrorMessage(error) ?? String(error));
|
|
596
|
-
}
|
|
597
|
-
const originalCwd = process.cwd();
|
|
598
|
-
try {
|
|
599
|
-
process.chdir(targetPath);
|
|
600
|
-
await runWorktreeInit({
|
|
601
|
-
...opts,
|
|
602
|
-
name,
|
|
603
|
-
sourceConfigPathOverride: sourceConfigPath,
|
|
604
|
-
});
|
|
605
|
-
}
|
|
606
|
-
catch (error) {
|
|
607
|
-
throw error;
|
|
608
|
-
}
|
|
609
|
-
finally {
|
|
610
|
-
process.chdir(originalCwd);
|
|
611
|
-
}
|
|
612
|
-
// Run bootstrap to build linked packages and validate runtime readiness
|
|
613
|
-
const bootstrapScript = path.resolve(sourceCwd, "scripts/worktree-bootstrap.mjs");
|
|
614
|
-
if (existsSync(bootstrapScript)) {
|
|
615
|
-
p.log.message(pc.dim(`Running worktree bootstrap in ${targetPath}...`));
|
|
616
|
-
try {
|
|
617
|
-
execFileSync("node", [bootstrapScript], { cwd: targetPath, stdio: "inherit" });
|
|
618
|
-
}
|
|
619
|
-
catch (error) {
|
|
620
|
-
p.log.warning(`Bootstrap failed: ${extractExecSyncErrorMessage(error) ?? String(error)}`);
|
|
621
|
-
}
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
function parseGitWorktreeList(cwd) {
|
|
625
|
-
const raw = execFileSync("git", ["worktree", "list", "--porcelain"], {
|
|
626
|
-
cwd,
|
|
627
|
-
encoding: "utf8",
|
|
628
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
629
|
-
});
|
|
630
|
-
const entries = [];
|
|
631
|
-
let current = {};
|
|
632
|
-
for (const line of raw.split("\n")) {
|
|
633
|
-
if (line.startsWith("worktree ")) {
|
|
634
|
-
current = { worktree: line.slice("worktree ".length) };
|
|
635
|
-
}
|
|
636
|
-
else if (line.startsWith("branch ")) {
|
|
637
|
-
current.branch = line.slice("branch ".length);
|
|
638
|
-
}
|
|
639
|
-
else if (line === "bare") {
|
|
640
|
-
current.bare = true;
|
|
641
|
-
}
|
|
642
|
-
else if (line === "detached") {
|
|
643
|
-
current.detached = true;
|
|
644
|
-
}
|
|
645
|
-
else if (line === "" && current.worktree) {
|
|
646
|
-
entries.push({
|
|
647
|
-
worktree: current.worktree,
|
|
648
|
-
branch: current.branch ?? null,
|
|
649
|
-
bare: current.bare ?? false,
|
|
650
|
-
detached: current.detached ?? false,
|
|
651
|
-
});
|
|
652
|
-
current = {};
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
if (current.worktree) {
|
|
656
|
-
entries.push({
|
|
657
|
-
worktree: current.worktree,
|
|
658
|
-
branch: current.branch ?? null,
|
|
659
|
-
bare: current.bare ?? false,
|
|
660
|
-
detached: current.detached ?? false,
|
|
661
|
-
});
|
|
662
|
-
}
|
|
663
|
-
return entries;
|
|
664
|
-
}
|
|
665
|
-
function branchHasUniqueCommits(cwd, branchName) {
|
|
666
|
-
try {
|
|
667
|
-
const output = execFileSync("git", ["log", "--oneline", branchName, "--not", "--remotes", "--exclude", `refs/heads/${branchName}`, "--branches"], { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] }).trim();
|
|
668
|
-
return output.length > 0;
|
|
669
|
-
}
|
|
670
|
-
catch {
|
|
671
|
-
return false;
|
|
672
|
-
}
|
|
673
|
-
}
|
|
674
|
-
function branchExistsOnAnyRemote(cwd, branchName) {
|
|
675
|
-
try {
|
|
676
|
-
const output = execFileSync("git", ["branch", "-r", "--list", `*/${branchName}`], { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] }).trim();
|
|
677
|
-
return output.length > 0;
|
|
678
|
-
}
|
|
679
|
-
catch {
|
|
680
|
-
return false;
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
|
-
function worktreePathHasUncommittedChanges(worktreePath) {
|
|
684
|
-
try {
|
|
685
|
-
const output = execFileSync("git", ["status", "--porcelain"], { cwd: worktreePath, encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] }).trim();
|
|
686
|
-
return output.length > 0;
|
|
687
|
-
}
|
|
688
|
-
catch {
|
|
689
|
-
return false;
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
export async function worktreeCleanupCommand(nameArg, opts) {
|
|
693
|
-
printPaperclipCliBanner();
|
|
694
|
-
p.intro(pc.bgCyan(pc.black(" paperclipai worktree:cleanup ")));
|
|
695
|
-
const name = resolveWorktreeMakeName(nameArg);
|
|
696
|
-
const sourceCwd = process.cwd();
|
|
697
|
-
const targetPath = resolveWorktreeMakeTargetPath(name);
|
|
698
|
-
const instanceId = sanitizeWorktreeInstanceId(opts.instance ?? name);
|
|
699
|
-
const homeDir = path.resolve(expandHomePrefix(resolveWorktreeHome(opts.home)));
|
|
700
|
-
const instanceRoot = path.resolve(homeDir, "instances", instanceId);
|
|
701
|
-
// ── 1. Assess current state ──────────────────────────────────────────
|
|
702
|
-
const hasBranch = localBranchExists(sourceCwd, name);
|
|
703
|
-
const hasTargetDir = existsSync(targetPath);
|
|
704
|
-
const hasInstanceData = existsSync(instanceRoot);
|
|
705
|
-
const worktrees = parseGitWorktreeList(sourceCwd);
|
|
706
|
-
const linkedWorktree = worktrees.find((wt) => wt.branch === `refs/heads/${name}` || path.resolve(wt.worktree) === path.resolve(targetPath));
|
|
707
|
-
if (!hasBranch && !hasTargetDir && !hasInstanceData && !linkedWorktree) {
|
|
708
|
-
p.log.info("Nothing to clean up — no branch, worktree directory, or instance data found.");
|
|
709
|
-
p.outro(pc.green("Already clean."));
|
|
710
|
-
return;
|
|
711
|
-
}
|
|
712
|
-
// ── 2. Safety checks ────────────────────────────────────────────────
|
|
713
|
-
const problems = [];
|
|
714
|
-
if (hasBranch && branchHasUniqueCommits(sourceCwd, name)) {
|
|
715
|
-
const onRemote = branchExistsOnAnyRemote(sourceCwd, name);
|
|
716
|
-
if (onRemote) {
|
|
717
|
-
p.log.info(`Branch "${name}" has unique local commits, but the branch also exists on a remote — safe to delete locally.`);
|
|
718
|
-
}
|
|
719
|
-
else {
|
|
720
|
-
problems.push(`Branch "${name}" has commits not found on any other branch or remote. ` +
|
|
721
|
-
`Deleting it will lose work. Push it first, or use --force.`);
|
|
722
|
-
}
|
|
723
|
-
}
|
|
724
|
-
if (hasTargetDir && worktreePathHasUncommittedChanges(targetPath)) {
|
|
725
|
-
problems.push(`Worktree directory ${targetPath} has uncommitted changes. Commit or stash first, or use --force.`);
|
|
726
|
-
}
|
|
727
|
-
if (problems.length > 0 && !opts.force) {
|
|
728
|
-
for (const problem of problems) {
|
|
729
|
-
p.log.error(problem);
|
|
730
|
-
}
|
|
731
|
-
throw new Error("Safety checks failed. Resolve the issues above or re-run with --force.");
|
|
732
|
-
}
|
|
733
|
-
if (problems.length > 0 && opts.force) {
|
|
734
|
-
for (const problem of problems) {
|
|
735
|
-
p.log.warning(`Overridden by --force: ${problem}`);
|
|
736
|
-
}
|
|
737
|
-
}
|
|
738
|
-
// ── 3. Clean up (idempotent steps) ──────────────────────────────────
|
|
739
|
-
// 3a. Remove the git worktree registration
|
|
740
|
-
if (linkedWorktree) {
|
|
741
|
-
const worktreeDirExists = existsSync(linkedWorktree.worktree);
|
|
742
|
-
const spinner = p.spinner();
|
|
743
|
-
if (worktreeDirExists) {
|
|
744
|
-
spinner.start(`Removing git worktree at ${linkedWorktree.worktree}...`);
|
|
745
|
-
try {
|
|
746
|
-
const removeArgs = ["worktree", "remove", linkedWorktree.worktree];
|
|
747
|
-
if (opts.force)
|
|
748
|
-
removeArgs.push("--force");
|
|
749
|
-
execFileSync("git", removeArgs, {
|
|
750
|
-
cwd: sourceCwd,
|
|
751
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
752
|
-
});
|
|
753
|
-
spinner.stop(`Removed git worktree at ${linkedWorktree.worktree}.`);
|
|
754
|
-
}
|
|
755
|
-
catch (error) {
|
|
756
|
-
spinner.stop(pc.yellow(`Could not remove worktree cleanly, will prune instead.`));
|
|
757
|
-
p.log.warning(extractExecSyncErrorMessage(error) ?? String(error));
|
|
758
|
-
}
|
|
759
|
-
}
|
|
760
|
-
else {
|
|
761
|
-
spinner.start("Pruning stale worktree entry...");
|
|
762
|
-
execFileSync("git", ["worktree", "prune"], {
|
|
763
|
-
cwd: sourceCwd,
|
|
764
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
765
|
-
});
|
|
766
|
-
spinner.stop("Pruned stale worktree entry.");
|
|
767
|
-
}
|
|
768
|
-
}
|
|
769
|
-
else {
|
|
770
|
-
// Even without a linked worktree, prune to clean up any orphaned entries
|
|
771
|
-
execFileSync("git", ["worktree", "prune"], {
|
|
772
|
-
cwd: sourceCwd,
|
|
773
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
774
|
-
});
|
|
775
|
-
}
|
|
776
|
-
// 3b. Remove the worktree directory if it still exists (e.g. partial creation)
|
|
777
|
-
if (existsSync(targetPath)) {
|
|
778
|
-
const spinner = p.spinner();
|
|
779
|
-
spinner.start(`Removing worktree directory ${targetPath}...`);
|
|
780
|
-
rmSync(targetPath, { recursive: true, force: true });
|
|
781
|
-
spinner.stop(`Removed worktree directory ${targetPath}.`);
|
|
782
|
-
}
|
|
783
|
-
// 3c. Delete the local branch (now safe — worktree is gone)
|
|
784
|
-
if (localBranchExists(sourceCwd, name)) {
|
|
785
|
-
const spinner = p.spinner();
|
|
786
|
-
spinner.start(`Deleting local branch "${name}"...`);
|
|
787
|
-
try {
|
|
788
|
-
const deleteFlag = opts.force ? "-D" : "-d";
|
|
789
|
-
execFileSync("git", ["branch", deleteFlag, name], {
|
|
790
|
-
cwd: sourceCwd,
|
|
791
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
792
|
-
});
|
|
793
|
-
spinner.stop(`Deleted local branch "${name}".`);
|
|
794
|
-
}
|
|
795
|
-
catch (error) {
|
|
796
|
-
spinner.stop(pc.yellow(`Could not delete branch "${name}".`));
|
|
797
|
-
p.log.warning(extractExecSyncErrorMessage(error) ?? String(error));
|
|
798
|
-
}
|
|
799
|
-
}
|
|
800
|
-
// 3d. Remove instance data
|
|
801
|
-
if (existsSync(instanceRoot)) {
|
|
802
|
-
const spinner = p.spinner();
|
|
803
|
-
spinner.start(`Removing instance data at ${instanceRoot}...`);
|
|
804
|
-
rmSync(instanceRoot, { recursive: true, force: true });
|
|
805
|
-
spinner.stop(`Removed instance data at ${instanceRoot}.`);
|
|
806
|
-
}
|
|
807
|
-
p.outro(pc.green("Cleanup complete."));
|
|
808
|
-
}
|
|
809
|
-
export async function worktreeEnvCommand(opts) {
|
|
810
|
-
const configPath = resolveConfigPath(opts.config);
|
|
811
|
-
const envPath = resolvePaperclipEnvFile(configPath);
|
|
812
|
-
const envEntries = readPaperclipEnvEntries(envPath);
|
|
813
|
-
const out = {
|
|
814
|
-
PAPERCLIP_CONFIG: configPath,
|
|
815
|
-
...(envEntries.PAPERCLIP_HOME ? { PAPERCLIP_HOME: envEntries.PAPERCLIP_HOME } : {}),
|
|
816
|
-
...(envEntries.PAPERCLIP_INSTANCE_ID ? { PAPERCLIP_INSTANCE_ID: envEntries.PAPERCLIP_INSTANCE_ID } : {}),
|
|
817
|
-
...(envEntries.PAPERCLIP_CONTEXT ? { PAPERCLIP_CONTEXT: envEntries.PAPERCLIP_CONTEXT } : {}),
|
|
818
|
-
...envEntries,
|
|
819
|
-
};
|
|
820
|
-
if (opts.json) {
|
|
821
|
-
console.log(JSON.stringify(out, null, 2));
|
|
822
|
-
return;
|
|
823
|
-
}
|
|
824
|
-
console.log(formatShellExports(out));
|
|
825
|
-
}
|
|
826
|
-
export function registerWorktreeCommands(program) {
|
|
827
|
-
const worktree = program.command("worktree").description("Worktree-local Paperclip instance helpers");
|
|
828
|
-
program
|
|
829
|
-
.command("worktree:make")
|
|
830
|
-
.description("Create ~/NAME as a git worktree, then initialize an isolated Paperclip instance inside it")
|
|
831
|
-
.argument("<name>", "Worktree name — auto-prefixed with paperclip- if needed (created at ~/paperclip-NAME)")
|
|
832
|
-
.option("--start-point <ref>", "Remote ref to base the new branch on (env: PAPERCLIP_WORKTREE_START_POINT)")
|
|
833
|
-
.option("--instance <id>", "Explicit isolated instance id")
|
|
834
|
-
.option("--home <path>", `Home root for worktree instances (env: PAPERCLIP_WORKTREES_DIR, default: ${DEFAULT_WORKTREE_HOME})`)
|
|
835
|
-
.option("--from-config <path>", "Source config.json to seed from")
|
|
836
|
-
.option("--from-data-dir <path>", "Source PAPERCLIP_HOME used when deriving the source config")
|
|
837
|
-
.option("--from-instance <id>", "Source instance id when deriving the source config", "default")
|
|
838
|
-
.option("--server-port <port>", "Preferred server port", (value) => Number(value))
|
|
839
|
-
.option("--db-port <port>", "Preferred embedded Postgres port", (value) => Number(value))
|
|
840
|
-
.option("--seed-mode <mode>", "Seed profile: minimal or full (default: minimal)", "minimal")
|
|
841
|
-
.option("--no-seed", "Skip database seeding from the source instance")
|
|
842
|
-
.option("--force", "Replace existing repo-local config and isolated instance data", false)
|
|
843
|
-
.action(worktreeMakeCommand);
|
|
844
|
-
worktree
|
|
845
|
-
.command("init")
|
|
846
|
-
.description("Create repo-local config/env and an isolated instance for this worktree")
|
|
847
|
-
.option("--name <name>", "Display name used to derive the instance id")
|
|
848
|
-
.option("--instance <id>", "Explicit isolated instance id")
|
|
849
|
-
.option("--home <path>", `Home root for worktree instances (env: PAPERCLIP_WORKTREES_DIR, default: ${DEFAULT_WORKTREE_HOME})`)
|
|
850
|
-
.option("--from-config <path>", "Source config.json to seed from")
|
|
851
|
-
.option("--from-data-dir <path>", "Source PAPERCLIP_HOME used when deriving the source config")
|
|
852
|
-
.option("--from-instance <id>", "Source instance id when deriving the source config", "default")
|
|
853
|
-
.option("--server-port <port>", "Preferred server port", (value) => Number(value))
|
|
854
|
-
.option("--db-port <port>", "Preferred embedded Postgres port", (value) => Number(value))
|
|
855
|
-
.option("--seed-mode <mode>", "Seed profile: minimal or full (default: minimal)", "minimal")
|
|
856
|
-
.option("--no-seed", "Skip database seeding from the source instance")
|
|
857
|
-
.option("--force", "Replace existing repo-local config and isolated instance data", false)
|
|
858
|
-
.action(worktreeInitCommand);
|
|
859
|
-
worktree
|
|
860
|
-
.command("env")
|
|
861
|
-
.description("Print shell exports for the current worktree-local Paperclip instance")
|
|
862
|
-
.option("-c, --config <path>", "Path to config file")
|
|
863
|
-
.option("--json", "Print JSON instead of shell exports")
|
|
864
|
-
.action(worktreeEnvCommand);
|
|
865
|
-
program
|
|
866
|
-
.command("worktree:cleanup")
|
|
867
|
-
.description("Safely remove a worktree, its branch, and its isolated instance data")
|
|
868
|
-
.argument("<name>", "Worktree name — auto-prefixed with paperclip- if needed")
|
|
869
|
-
.option("--instance <id>", "Explicit instance id (if different from the worktree name)")
|
|
870
|
-
.option("--home <path>", `Home root for worktree instances (env: PAPERCLIP_WORKTREES_DIR, default: ${DEFAULT_WORKTREE_HOME})`)
|
|
871
|
-
.option("--force", "Bypass safety checks (uncommitted changes, unique commits)", false)
|
|
872
|
-
.action(worktreeCleanupCommand);
|
|
873
|
-
}
|
|
874
|
-
//# sourceMappingURL=worktree.js.map
|