runwork 0.15.0 → 0.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +19272 -116
- package/package.json +4 -4
- package/dist/__tests__/curl-parser.test.d.ts +0 -1
- package/dist/__tests__/curl-parser.test.js +0 -250
- package/dist/__tests__/install-scripts.test.d.ts +0 -1
- package/dist/__tests__/install-scripts.test.js +0 -280
- package/dist/__tests__/types-manager.test.d.ts +0 -1
- package/dist/__tests__/types-manager.test.js +0 -89
- package/dist/agents/__tests__/chatgpt-registry.test.d.ts +0 -1
- package/dist/agents/__tests__/chatgpt-registry.test.js +0 -61
- package/dist/agents/__tests__/claude-code-managed-block.test.d.ts +0 -1
- package/dist/agents/__tests__/claude-code-managed-block.test.js +0 -97
- package/dist/agents/__tests__/claude-code-plugin.test.d.ts +0 -1
- package/dist/agents/__tests__/claude-code-plugin.test.js +0 -47
- package/dist/agents/__tests__/claude-code-stats.test.d.ts +0 -1
- package/dist/agents/__tests__/claude-code-stats.test.js +0 -390
- package/dist/agents/__tests__/claude-desktop-memory.test.d.ts +0 -1
- package/dist/agents/__tests__/claude-desktop-memory.test.js +0 -154
- package/dist/agents/__tests__/claude-desktop-plugin-tree.test.d.ts +0 -1
- package/dist/agents/__tests__/claude-desktop-plugin-tree.test.js +0 -161
- package/dist/agents/__tests__/claude-desktop-plugin.test.d.ts +0 -1
- package/dist/agents/__tests__/claude-desktop-plugin.test.js +0 -117
- package/dist/agents/__tests__/claude-desktop-rpm.test.d.ts +0 -1
- package/dist/agents/__tests__/claude-desktop-rpm.test.js +0 -126
- package/dist/agents/__tests__/claude-desktop-stats.test.d.ts +0 -1
- package/dist/agents/__tests__/claude-desktop-stats.test.js +0 -280
- package/dist/agents/__tests__/codex-instructions.test.d.ts +0 -1
- package/dist/agents/__tests__/codex-instructions.test.js +0 -57
- package/dist/agents/__tests__/codex-minimum-permissions.test.d.ts +0 -1
- package/dist/agents/__tests__/codex-minimum-permissions.test.js +0 -82
- package/dist/agents/__tests__/codex-stats.test.d.ts +0 -1
- package/dist/agents/__tests__/codex-stats.test.js +0 -370
- package/dist/agents/__tests__/cursor-merge.test.d.ts +0 -1
- package/dist/agents/__tests__/cursor-merge.test.js +0 -66
- package/dist/agents/__tests__/cursor-stats.test.d.ts +0 -1
- package/dist/agents/__tests__/cursor-stats.test.js +0 -183
- package/dist/agents/__tests__/defaults-merge.test.d.ts +0 -1
- package/dist/agents/__tests__/defaults-merge.test.js +0 -268
- package/dist/agents/__tests__/detection.test.d.ts +0 -1
- package/dist/agents/__tests__/detection.test.js +0 -89
- package/dist/agents/__tests__/graceful-degradation.test.d.ts +0 -1
- package/dist/agents/__tests__/graceful-degradation.test.js +0 -129
- package/dist/agents/__tests__/instruction-hint.test.d.ts +0 -1
- package/dist/agents/__tests__/instruction-hint.test.js +0 -69
- package/dist/agents/__tests__/intro-skill.test.d.ts +0 -1
- package/dist/agents/__tests__/intro-skill.test.js +0 -193
- package/dist/agents/__tests__/schema-validation.test.d.ts +0 -1
- package/dist/agents/__tests__/schema-validation.test.js +0 -212
- package/dist/agents/__tests__/skill-slug.test.d.ts +0 -1
- package/dist/agents/__tests__/skill-slug.test.js +0 -77
- package/dist/agents/claude-code.d.ts +0 -53
- package/dist/agents/claude-code.js +0 -754
- package/dist/agents/claude-desktop-plugin-tree.d.ts +0 -59
- package/dist/agents/claude-desktop-plugin-tree.js +0 -143
- package/dist/agents/claude-desktop.d.ts +0 -47
- package/dist/agents/claude-desktop.js +0 -684
- package/dist/agents/cline.d.ts +0 -15
- package/dist/agents/cline.js +0 -130
- package/dist/agents/codex.d.ts +0 -44
- package/dist/agents/codex.js +0 -453
- package/dist/agents/conversation-skills.d.ts +0 -18
- package/dist/agents/conversation-skills.js +0 -229
- package/dist/agents/cursor.d.ts +0 -48
- package/dist/agents/cursor.js +0 -324
- package/dist/agents/default-config.d.ts +0 -30
- package/dist/agents/default-config.js +0 -67
- package/dist/agents/defaults-merge.d.ts +0 -72
- package/dist/agents/defaults-merge.js +0 -131
- package/dist/agents/detect.d.ts +0 -4
- package/dist/agents/detect.js +0 -67
- package/dist/agents/detection.d.ts +0 -18
- package/dist/agents/detection.js +0 -94
- package/dist/agents/gemini.d.ts +0 -15
- package/dist/agents/gemini.js +0 -122
- package/dist/agents/generic-adapter.d.ts +0 -25
- package/dist/agents/generic-adapter.js +0 -151
- package/dist/agents/intro-skill.d.ts +0 -45
- package/dist/agents/intro-skill.js +0 -447
- package/dist/agents/registry-data.d.ts +0 -192
- package/dist/agents/registry-data.js +0 -669
- package/dist/agents/registry.d.ts +0 -13
- package/dist/agents/registry.js +0 -36
- package/dist/agents/runtime-detection.d.ts +0 -82
- package/dist/agents/runtime-detection.js +0 -271
- package/dist/agents/session-start-hook.d.ts +0 -37
- package/dist/agents/session-start-hook.js +0 -159
- package/dist/agents/types.d.ts +0 -171
- package/dist/agents/types.js +0 -75
- package/dist/agents/utils/instruction-hint.d.ts +0 -21
- package/dist/agents/utils/instruction-hint.js +0 -108
- package/dist/agents/utils/json-config.d.ts +0 -19
- package/dist/agents/utils/json-config.js +0 -69
- package/dist/agents/utils/toml-config.d.ts +0 -8
- package/dist/agents/utils/toml-config.js +0 -27
- package/dist/agents/windsurf.d.ts +0 -14
- package/dist/agents/windsurf.js +0 -102
- package/dist/api/__tests__/client.test.d.ts +0 -1
- package/dist/api/__tests__/client.test.js +0 -272
- package/dist/api/client.d.ts +0 -326
- package/dist/api/client.js +0 -427
- package/dist/auth/__tests__/login-flow.test.d.ts +0 -1
- package/dist/auth/__tests__/login-flow.test.js +0 -101
- package/dist/auth/__tests__/store.test.d.ts +0 -1
- package/dist/auth/__tests__/store.test.js +0 -132
- package/dist/auth/login-flow.d.ts +0 -26
- package/dist/auth/login-flow.js +0 -137
- package/dist/auth/store.d.ts +0 -5
- package/dist/auth/store.js +0 -62
- package/dist/commands/__tests__/clone-args.test.d.ts +0 -1
- package/dist/commands/__tests__/clone-args.test.js +0 -51
- package/dist/commands/__tests__/clone-source-result.test.d.ts +0 -1
- package/dist/commands/__tests__/clone-source-result.test.js +0 -45
- package/dist/commands/__tests__/info-merge.test.d.ts +0 -1
- package/dist/commands/__tests__/info-merge.test.js +0 -55
- package/dist/commands/__tests__/mcp-entries.test.d.ts +0 -1
- package/dist/commands/__tests__/mcp-entries.test.js +0 -48
- package/dist/commands/__tests__/setup-persona.test.d.ts +0 -1
- package/dist/commands/__tests__/setup-persona.test.js +0 -31
- package/dist/commands/__tests__/setup.test.d.ts +0 -1
- package/dist/commands/__tests__/setup.test.js +0 -81
- package/dist/commands/__tests__/sync-redetect.test.d.ts +0 -1
- package/dist/commands/__tests__/sync-redetect.test.js +0 -96
- package/dist/commands/__tests__/sync-telemetry.test.d.ts +0 -1
- package/dist/commands/__tests__/sync-telemetry.test.js +0 -281
- package/dist/commands/__tests__/upgrade.test.d.ts +0 -1
- package/dist/commands/__tests__/upgrade.test.js +0 -157
- package/dist/commands/agents.d.ts +0 -2
- package/dist/commands/agents.js +0 -160
- package/dist/commands/api-keys.d.ts +0 -2
- package/dist/commands/api-keys.js +0 -95
- package/dist/commands/apps.d.ts +0 -2
- package/dist/commands/apps.js +0 -82
- package/dist/commands/build-plugin.d.ts +0 -2
- package/dist/commands/build-plugin.js +0 -135
- package/dist/commands/clone.d.ts +0 -60
- package/dist/commands/clone.js +0 -271
- package/dist/commands/components.d.ts +0 -2
- package/dist/commands/components.js +0 -43
- package/dist/commands/deploy.d.ts +0 -2
- package/dist/commands/deploy.js +0 -279
- package/dist/commands/dev.d.ts +0 -11
- package/dist/commands/dev.js +0 -1011
- package/dist/commands/doctor.d.ts +0 -2
- package/dist/commands/doctor.js +0 -230
- package/dist/commands/endpoints.d.ts +0 -2
- package/dist/commands/endpoints.js +0 -189
- package/dist/commands/entities.d.ts +0 -2
- package/dist/commands/entities.js +0 -198
- package/dist/commands/files.d.ts +0 -2
- package/dist/commands/files.js +0 -193
- package/dist/commands/inbox.d.ts +0 -11
- package/dist/commands/inbox.js +0 -60
- package/dist/commands/info.d.ts +0 -178
- package/dist/commands/info.js +0 -455
- package/dist/commands/init.d.ts +0 -21
- package/dist/commands/init.js +0 -185
- package/dist/commands/integrations.d.ts +0 -2
- package/dist/commands/integrations.js +0 -233
- package/dist/commands/login.d.ts +0 -2
- package/dist/commands/login.js +0 -44
- package/dist/commands/logout.d.ts +0 -2
- package/dist/commands/logout.js +0 -13
- package/dist/commands/logs.d.ts +0 -2
- package/dist/commands/logs.js +0 -232
- package/dist/commands/mcp-entries.d.ts +0 -13
- package/dist/commands/mcp-entries.js +0 -26
- package/dist/commands/mcp.d.ts +0 -2
- package/dist/commands/mcp.js +0 -245
- package/dist/commands/open.d.ts +0 -2
- package/dist/commands/open.js +0 -53
- package/dist/commands/resume.d.ts +0 -2
- package/dist/commands/resume.js +0 -289
- package/dist/commands/save-convo.d.ts +0 -8
- package/dist/commands/save-convo.js +0 -20
- package/dist/commands/schedules.d.ts +0 -2
- package/dist/commands/schedules.js +0 -221
- package/dist/commands/setup.d.ts +0 -27
- package/dist/commands/setup.js +0 -177
- package/dist/commands/share-convo.d.ts +0 -24
- package/dist/commands/share-convo.js +0 -167
- package/dist/commands/skills.d.ts +0 -2
- package/dist/commands/skills.js +0 -352
- package/dist/commands/sync-telemetry.d.ts +0 -33
- package/dist/commands/sync-telemetry.js +0 -186
- package/dist/commands/sync.d.ts +0 -37
- package/dist/commands/sync.js +0 -702
- package/dist/commands/uninstall.d.ts +0 -2
- package/dist/commands/uninstall.js +0 -145
- package/dist/commands/upgrade.d.ts +0 -14
- package/dist/commands/upgrade.js +0 -217
- package/dist/commands/validate.d.ts +0 -2
- package/dist/commands/validate.js +0 -89
- package/dist/commands/welcome.d.ts +0 -1
- package/dist/commands/welcome.js +0 -86
- package/dist/commands/workflows.d.ts +0 -2
- package/dist/commands/workflows.js +0 -187
- package/dist/deploy/__tests__/deploy-state.test.d.ts +0 -1
- package/dist/deploy/__tests__/deploy-state.test.js +0 -80
- package/dist/deploy/__tests__/deploy-status.test.d.ts +0 -1
- package/dist/deploy/__tests__/deploy-status.test.js +0 -41
- package/dist/deploy/__tests__/detach-args.test.d.ts +0 -1
- package/dist/deploy/__tests__/detach-args.test.js +0 -30
- package/dist/deploy/deploy-state.d.ts +0 -36
- package/dist/deploy/deploy-state.js +0 -63
- package/dist/deploy/deploy-status.d.ts +0 -21
- package/dist/deploy/deploy-status.js +0 -36
- package/dist/deploy/detach.d.ts +0 -32
- package/dist/deploy/detach.js +0 -71
- package/dist/dev/__tests__/attach.test.d.ts +0 -1
- package/dist/dev/__tests__/attach.test.js +0 -296
- package/dist/dev/__tests__/detach.test.d.ts +0 -1
- package/dist/dev/__tests__/detach.test.js +0 -404
- package/dist/dev/__tests__/preview-url-poller.test.d.ts +0 -1
- package/dist/dev/__tests__/preview-url-poller.test.js +0 -149
- package/dist/dev/__tests__/session.test.d.ts +0 -1
- package/dist/dev/__tests__/session.test.js +0 -446
- package/dist/dev/__tests__/startup-sync.test.d.ts +0 -1
- package/dist/dev/__tests__/startup-sync.test.js +0 -32
- package/dist/dev/__tests__/stop.test.d.ts +0 -1
- package/dist/dev/__tests__/stop.test.js +0 -172
- package/dist/dev/attach.d.ts +0 -120
- package/dist/dev/attach.js +0 -269
- package/dist/dev/detach.d.ts +0 -187
- package/dist/dev/detach.js +0 -292
- package/dist/dev/preview-url-poller.d.ts +0 -35
- package/dist/dev/preview-url-poller.js +0 -50
- package/dist/dev/session.d.ts +0 -175
- package/dist/dev/session.js +0 -258
- package/dist/dev/startup-sync.d.ts +0 -23
- package/dist/dev/startup-sync.js +0 -14
- package/dist/dev/stop.d.ts +0 -52
- package/dist/dev/stop.js +0 -101
- package/dist/devtools/registry-data.d.ts +0 -46
- package/dist/devtools/registry-data.js +0 -40
- package/dist/generated/bundled-types.d.ts +0 -1
- package/dist/generated/bundled-types.js +0 -46
- package/dist/generated/version.d.ts +0 -1
- package/dist/generated/version.js +0 -2
- package/dist/git/__tests__/auto-commit.test.d.ts +0 -1
- package/dist/git/__tests__/auto-commit.test.js +0 -431
- package/dist/git/__tests__/classify-sync-error.test.d.ts +0 -1
- package/dist/git/__tests__/classify-sync-error.test.js +0 -57
- package/dist/git/__tests__/credential-helper-e2e.test.d.ts +0 -21
- package/dist/git/__tests__/credential-helper-e2e.test.js +0 -195
- package/dist/git/__tests__/credentials.test.d.ts +0 -1
- package/dist/git/__tests__/credentials.test.js +0 -141
- package/dist/git/__tests__/deploy-guard.test.d.ts +0 -1
- package/dist/git/__tests__/deploy-guard.test.js +0 -61
- package/dist/git/__tests__/ensure-git-credential-helper.test.d.ts +0 -1
- package/dist/git/__tests__/ensure-git-credential-helper.test.js +0 -133
- package/dist/git/__tests__/ensure-runwork-remote.test.d.ts +0 -1
- package/dist/git/__tests__/ensure-runwork-remote.test.js +0 -109
- package/dist/git/__tests__/identity.test.d.ts +0 -1
- package/dist/git/__tests__/identity.test.js +0 -146
- package/dist/git/__tests__/manifest.test.d.ts +0 -1
- package/dist/git/__tests__/manifest.test.js +0 -446
- package/dist/git/__tests__/preflight-resolution.test.d.ts +0 -1
- package/dist/git/__tests__/preflight-resolution.test.js +0 -366
- package/dist/git/__tests__/preflight.test.d.ts +0 -1
- package/dist/git/__tests__/preflight.test.js +0 -36
- package/dist/git/__tests__/repo-config.test.d.ts +0 -1
- package/dist/git/__tests__/repo-config.test.js +0 -26
- package/dist/git/__tests__/sync.test.d.ts +0 -1
- package/dist/git/__tests__/sync.test.js +0 -405
- package/dist/git/auto-commit.d.ts +0 -35
- package/dist/git/auto-commit.js +0 -293
- package/dist/git/classify-sync-error.d.ts +0 -21
- package/dist/git/classify-sync-error.js +0 -111
- package/dist/git/credentials.d.ts +0 -75
- package/dist/git/credentials.js +0 -164
- package/dist/git/critical-files.d.ts +0 -20
- package/dist/git/critical-files.js +0 -68
- package/dist/git/deploy-guard.d.ts +0 -53
- package/dist/git/deploy-guard.js +0 -78
- package/dist/git/identity.d.ts +0 -44
- package/dist/git/identity.js +0 -133
- package/dist/git/preflight.d.ts +0 -57
- package/dist/git/preflight.js +0 -276
- package/dist/git/remote.d.ts +0 -37
- package/dist/git/remote.js +0 -75
- package/dist/git/repo-config.d.ts +0 -8
- package/dist/git/repo-config.js +0 -29
- package/dist/git/sync.d.ts +0 -15
- package/dist/git/sync.js +0 -159
- package/dist/health/__tests__/checks.test.d.ts +0 -1
- package/dist/health/__tests__/checks.test.js +0 -357
- package/dist/health/__tests__/cli-distribution-checks.test.d.ts +0 -1
- package/dist/health/__tests__/cli-distribution-checks.test.js +0 -196
- package/dist/health/__tests__/fix.test.d.ts +0 -1
- package/dist/health/__tests__/fix.test.js +0 -72
- package/dist/health/__tests__/runner-filter.test.d.ts +0 -1
- package/dist/health/__tests__/runner-filter.test.js +0 -61
- package/dist/health/checks.d.ts +0 -42
- package/dist/health/checks.js +0 -636
- package/dist/health/fix.d.ts +0 -22
- package/dist/health/fix.js +0 -62
- package/dist/health/runner.d.ts +0 -8
- package/dist/health/runner.js +0 -47
- package/dist/health/types.d.ts +0 -12
- package/dist/health/types.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/logs/__tests__/tailer-format.test.d.ts +0 -1
- package/dist/logs/__tests__/tailer-format.test.js +0 -43
- package/dist/logs/tailer.d.ts +0 -17
- package/dist/logs/tailer.js +0 -217
- package/dist/sync/__tests__/change-detect.test.d.ts +0 -1
- package/dist/sync/__tests__/change-detect.test.js +0 -123
- package/dist/sync/__tests__/hash.test.d.ts +0 -1
- package/dist/sync/__tests__/hash.test.js +0 -18
- package/dist/sync/change-detect.d.ts +0 -19
- package/dist/sync/change-detect.js +0 -136
- package/dist/sync/conflict-ui.d.ts +0 -5
- package/dist/sync/conflict-ui.js +0 -78
- package/dist/sync/executor.d.ts +0 -23
- package/dist/sync/executor.js +0 -102
- package/dist/sync/hash.d.ts +0 -1
- package/dist/sync/hash.js +0 -4
- package/dist/sync/types.d.ts +0 -24
- package/dist/sync/types.js +0 -1
- package/dist/template/manifest.d.ts +0 -17
- package/dist/template/manifest.js +0 -145
- package/dist/tools/types.d.ts +0 -52
- package/dist/tools/types.js +0 -8
- package/dist/types-manager.d.ts +0 -1
- package/dist/types-manager.js +0 -35
- package/dist/types.d.ts +0 -349
- package/dist/types.js +0 -1
- package/dist/ui/__tests__/banner.test.d.ts +0 -1
- package/dist/ui/__tests__/banner.test.js +0 -98
- package/dist/ui/__tests__/colors.test.d.ts +0 -1
- package/dist/ui/__tests__/colors.test.js +0 -22
- package/dist/ui/__tests__/keyboard.test.d.ts +0 -1
- package/dist/ui/__tests__/keyboard.test.js +0 -34
- package/dist/ui/__tests__/status-line.test.d.ts +0 -1
- package/dist/ui/__tests__/status-line.test.js +0 -54
- package/dist/ui/banner.d.ts +0 -29
- package/dist/ui/banner.js +0 -153
- package/dist/ui/colors.d.ts +0 -4
- package/dist/ui/colors.js +0 -7
- package/dist/ui/keyboard.d.ts +0 -12
- package/dist/ui/keyboard.js +0 -61
- package/dist/ui/status-line.d.ts +0 -6
- package/dist/ui/status-line.js +0 -53
- package/dist/utils/__tests__/format-error.test.d.ts +0 -1
- package/dist/utils/__tests__/format-error.test.js +0 -43
- package/dist/utils/__tests__/help-json.test.d.ts +0 -1
- package/dist/utils/__tests__/help-json.test.js +0 -39
- package/dist/utils/__tests__/http.test.d.ts +0 -1
- package/dist/utils/__tests__/http.test.js +0 -381
- package/dist/utils/__tests__/ignore-matcher.test.d.ts +0 -1
- package/dist/utils/__tests__/ignore-matcher.test.js +0 -205
- package/dist/utils/__tests__/output.test.d.ts +0 -1
- package/dist/utils/__tests__/output.test.js +0 -38
- package/dist/utils/__tests__/prompt.test.d.ts +0 -1
- package/dist/utils/__tests__/prompt.test.js +0 -27
- package/dist/utils/__tests__/resolve.test.d.ts +0 -1
- package/dist/utils/__tests__/resolve.test.js +0 -95
- package/dist/utils/__tests__/sqlite.test.d.ts +0 -1
- package/dist/utils/__tests__/sqlite.test.js +0 -89
- package/dist/utils/agent-guidance.d.ts +0 -47
- package/dist/utils/agent-guidance.js +0 -128
- package/dist/utils/app-info.d.ts +0 -70
- package/dist/utils/app-info.js +0 -167
- package/dist/utils/curl-parser.d.ts +0 -12
- package/dist/utils/curl-parser.js +0 -162
- package/dist/utils/data-input.d.ts +0 -1
- package/dist/utils/data-input.js +0 -38
- package/dist/utils/format-error.d.ts +0 -10
- package/dist/utils/format-error.js +0 -38
- package/dist/utils/fs.d.ts +0 -5
- package/dist/utils/fs.js +0 -23
- package/dist/utils/help-json.d.ts +0 -70
- package/dist/utils/help-json.js +0 -88
- package/dist/utils/http.d.ts +0 -46
- package/dist/utils/http.js +0 -421
- package/dist/utils/ignore-matcher.d.ts +0 -47
- package/dist/utils/ignore-matcher.js +0 -132
- package/dist/utils/output.d.ts +0 -17
- package/dist/utils/output.js +0 -27
- package/dist/utils/prompt.d.ts +0 -5
- package/dist/utils/prompt.js +0 -42
- package/dist/utils/resolve.d.ts +0 -12
- package/dist/utils/resolve.js +0 -52
- package/dist/utils/setup-state.d.ts +0 -3
- package/dist/utils/setup-state.js +0 -19
- package/dist/utils/sqlite-adapter.d.ts +0 -48
- package/dist/utils/sqlite-adapter.js +0 -147
- package/dist/utils/sqlite.d.ts +0 -14
- package/dist/utils/sqlite.js +0 -14
- package/dist/utils/subprocess.d.ts +0 -19
- package/dist/utils/subprocess.js +0 -27
- package/dist/utils/which.d.ts +0 -14
- package/dist/utils/which.js +0 -47
- package/dist/utils/zip.d.ts +0 -7
- package/dist/utils/zip.js +0 -42
- package/dist/validate/__tests__/validate.test.d.ts +0 -1
- package/dist/validate/__tests__/validate.test.js +0 -42
- package/dist/validate/freshness.d.ts +0 -28
- package/dist/validate/freshness.js +0 -48
- package/dist/validate/preview.d.ts +0 -21
- package/dist/validate/preview.js +0 -39
- package/dist/workspace/resolve.d.ts +0 -19
- package/dist/workspace/resolve.js +0 -100
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Files that must survive a remote sync. The sync path can rebase or, as a
|
|
3
|
-
* last resort, merge with `-X theirs` (remote wins) to reconcile diverged
|
|
4
|
-
* histories. If the remote tip is missing one of these (e.g. right after a
|
|
5
|
-
* fresh init, or a server-side reconcile), the merge can delete the local
|
|
6
|
-
* copy. Losing `.runwork.json` in particular bricks the app for the CLI
|
|
7
|
-
* ("not a Runwork app"). We snapshot these before the sync and restore any
|
|
8
|
-
* the sync removed.
|
|
9
|
-
*
|
|
10
|
-
* Shared by `runwork dev` (startup sync) and `runwork deploy` so both protect
|
|
11
|
-
* the same set with identical logic.
|
|
12
|
-
*/
|
|
13
|
-
export declare const CRITICAL_FILES: readonly [".runwork.json", "blueprint.json", ".gitignore"];
|
|
14
|
-
export interface CriticalSnapshot {
|
|
15
|
-
path: string;
|
|
16
|
-
contents: string;
|
|
17
|
-
}
|
|
18
|
-
export declare function snapshotCriticalFiles(cwd: string): CriticalSnapshot[];
|
|
19
|
-
export declare function restoreMissingCriticalFiles(cwd: string, snapshots: CriticalSnapshot[]): string[];
|
|
20
|
-
export declare function commitAndPushRestoredFiles(cwd: string, files: string[]): boolean;
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { execFileSync } from '../utils/subprocess.js';
|
|
2
|
-
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
3
|
-
import { join } from 'path';
|
|
4
|
-
/**
|
|
5
|
-
* Files that must survive a remote sync. The sync path can rebase or, as a
|
|
6
|
-
* last resort, merge with `-X theirs` (remote wins) to reconcile diverged
|
|
7
|
-
* histories. If the remote tip is missing one of these (e.g. right after a
|
|
8
|
-
* fresh init, or a server-side reconcile), the merge can delete the local
|
|
9
|
-
* copy. Losing `.runwork.json` in particular bricks the app for the CLI
|
|
10
|
-
* ("not a Runwork app"). We snapshot these before the sync and restore any
|
|
11
|
-
* the sync removed.
|
|
12
|
-
*
|
|
13
|
-
* Shared by `runwork dev` (startup sync) and `runwork deploy` so both protect
|
|
14
|
-
* the same set with identical logic.
|
|
15
|
-
*/
|
|
16
|
-
export const CRITICAL_FILES = ['.runwork.json', 'blueprint.json', '.gitignore'];
|
|
17
|
-
export function snapshotCriticalFiles(cwd) {
|
|
18
|
-
const snapshots = [];
|
|
19
|
-
for (const rel of CRITICAL_FILES) {
|
|
20
|
-
const abs = join(cwd, rel);
|
|
21
|
-
if (!existsSync(abs))
|
|
22
|
-
continue;
|
|
23
|
-
try {
|
|
24
|
-
snapshots.push({ path: rel, contents: readFileSync(abs, 'utf-8') });
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
// Best-effort: skip unreadable files.
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return snapshots;
|
|
31
|
-
}
|
|
32
|
-
export function restoreMissingCriticalFiles(cwd, snapshots) {
|
|
33
|
-
const restored = [];
|
|
34
|
-
for (const snap of snapshots) {
|
|
35
|
-
const abs = join(cwd, snap.path);
|
|
36
|
-
if (existsSync(abs))
|
|
37
|
-
continue;
|
|
38
|
-
try {
|
|
39
|
-
writeFileSync(abs, snap.contents, 'utf-8');
|
|
40
|
-
restored.push(snap.path);
|
|
41
|
-
}
|
|
42
|
-
catch {
|
|
43
|
-
// Best-effort: skip files we cannot write back.
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return restored;
|
|
47
|
-
}
|
|
48
|
-
export function commitAndPushRestoredFiles(cwd, files) {
|
|
49
|
-
if (files.length === 0)
|
|
50
|
-
return false;
|
|
51
|
-
try {
|
|
52
|
-
execFileSync('git', ['add', '--', ...files], { cwd, stdio: 'pipe' });
|
|
53
|
-
execFileSync('git', ['commit', '-m', 'chore: restore critical files removed by sync'], { cwd, stdio: 'pipe' });
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
try {
|
|
59
|
-
// `HEAD:main` so the push works regardless of local branch name.
|
|
60
|
-
execFileSync('git', ['push', 'runwork', 'HEAD:main'], { cwd, stdio: 'pipe' });
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// Push failures are non-fatal: the local copy is restored, and the
|
|
65
|
-
// restoration commit will be pushed with the next auto-sync cycle.
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deploy guard: detect whether `runwork deploy` is about to commit and
|
|
3
|
-
* deploy code that the preview does not reflect, and decide whether to
|
|
4
|
-
* warn the user about it.
|
|
5
|
-
*
|
|
6
|
-
* The preview reflects the last *pushed* commit. When an auto-syncing
|
|
7
|
-
* `runwork dev` session is running, its file watcher commits and pushes
|
|
8
|
-
* continuously, so the working tree, the remote, and the preview stay in
|
|
9
|
-
* lockstep and there is nothing to warn about. But when there is no
|
|
10
|
-
* session, or the session is `--no-sync` (manual git), a dirty or
|
|
11
|
-
* ahead-of-remote working tree means the deploy will ship code the user
|
|
12
|
-
* never saw in the preview. That is the case we warn on.
|
|
13
|
-
*
|
|
14
|
-
* The pure decision (`shouldWarnBeforeDeploy`) is separated from the git
|
|
15
|
-
* and session IO so it can be unit-tested without a repo or session file.
|
|
16
|
-
*/
|
|
17
|
-
import { type SessionState } from '../dev/session.js';
|
|
18
|
-
export interface WorkingTreeStatus {
|
|
19
|
-
/** `git status --porcelain` reported at least one entry (tracked or untracked). */
|
|
20
|
-
dirty: boolean;
|
|
21
|
-
/** Local HEAD has commits not present on `runwork/main`. */
|
|
22
|
-
ahead: boolean;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Whether the working tree diverges from what the preview shows.
|
|
26
|
-
* "Dirty" = uncommitted changes; "ahead" = committed but unpushed.
|
|
27
|
-
*/
|
|
28
|
-
export declare function isDirtyOrAhead(status: WorkingTreeStatus): boolean;
|
|
29
|
-
/**
|
|
30
|
-
* Decide whether to warn before deploying.
|
|
31
|
-
*
|
|
32
|
-
* We warn only when the tree diverges from the preview AND no
|
|
33
|
-
* auto-syncing dev session is keeping things in lockstep. A live session
|
|
34
|
-
* whose `noSync` is not true owns commits/pushes, so it is suppressed; a
|
|
35
|
-
* `noSync` session (or no session at all) does not, so we warn.
|
|
36
|
-
*/
|
|
37
|
-
export declare function shouldWarnBeforeDeploy(status: WorkingTreeStatus, session: SessionState): boolean;
|
|
38
|
-
/**
|
|
39
|
-
* Probe the working tree via git. `dirty` includes untracked files (a new
|
|
40
|
-
* file the user added is still not in the preview). `ahead` counts local
|
|
41
|
-
* commits not on `runwork/main`; a missing remote ref is treated as not
|
|
42
|
-
* ahead (no baseline to compare against, and the push step handles it).
|
|
43
|
-
*/
|
|
44
|
-
export declare function readWorkingTreeStatus(cwd: string): WorkingTreeStatus;
|
|
45
|
-
/**
|
|
46
|
-
* End-to-end guard decision against the real repo and session file.
|
|
47
|
-
* Returns the status alongside the warn decision so callers can include
|
|
48
|
-
* the specifics (dirty / ahead) in their message.
|
|
49
|
-
*/
|
|
50
|
-
export declare function evaluateDeployGuard(cwd: string, appId: string): {
|
|
51
|
-
status: WorkingTreeStatus;
|
|
52
|
-
warn: boolean;
|
|
53
|
-
};
|
package/dist/git/deploy-guard.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deploy guard: detect whether `runwork deploy` is about to commit and
|
|
3
|
-
* deploy code that the preview does not reflect, and decide whether to
|
|
4
|
-
* warn the user about it.
|
|
5
|
-
*
|
|
6
|
-
* The preview reflects the last *pushed* commit. When an auto-syncing
|
|
7
|
-
* `runwork dev` session is running, its file watcher commits and pushes
|
|
8
|
-
* continuously, so the working tree, the remote, and the preview stay in
|
|
9
|
-
* lockstep and there is nothing to warn about. But when there is no
|
|
10
|
-
* session, or the session is `--no-sync` (manual git), a dirty or
|
|
11
|
-
* ahead-of-remote working tree means the deploy will ship code the user
|
|
12
|
-
* never saw in the preview. That is the case we warn on.
|
|
13
|
-
*
|
|
14
|
-
* The pure decision (`shouldWarnBeforeDeploy`) is separated from the git
|
|
15
|
-
* and session IO so it can be unit-tested without a repo or session file.
|
|
16
|
-
*/
|
|
17
|
-
import { execFileSync } from '../utils/subprocess.js';
|
|
18
|
-
import { getSessionState } from '../dev/session.js';
|
|
19
|
-
/**
|
|
20
|
-
* Whether the working tree diverges from what the preview shows.
|
|
21
|
-
* "Dirty" = uncommitted changes; "ahead" = committed but unpushed.
|
|
22
|
-
*/
|
|
23
|
-
export function isDirtyOrAhead(status) {
|
|
24
|
-
return status.dirty || status.ahead;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Decide whether to warn before deploying.
|
|
28
|
-
*
|
|
29
|
-
* We warn only when the tree diverges from the preview AND no
|
|
30
|
-
* auto-syncing dev session is keeping things in lockstep. A live session
|
|
31
|
-
* whose `noSync` is not true owns commits/pushes, so it is suppressed; a
|
|
32
|
-
* `noSync` session (or no session at all) does not, so we warn.
|
|
33
|
-
*/
|
|
34
|
-
export function shouldWarnBeforeDeploy(status, session) {
|
|
35
|
-
if (!isDirtyOrAhead(status))
|
|
36
|
-
return false;
|
|
37
|
-
if (session.state === 'alive' && session.file.noSync !== true) {
|
|
38
|
-
// An auto-syncing watcher keeps the preview in lockstep with the tree.
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Probe the working tree via git. `dirty` includes untracked files (a new
|
|
45
|
-
* file the user added is still not in the preview). `ahead` counts local
|
|
46
|
-
* commits not on `runwork/main`; a missing remote ref is treated as not
|
|
47
|
-
* ahead (no baseline to compare against, and the push step handles it).
|
|
48
|
-
*/
|
|
49
|
-
export function readWorkingTreeStatus(cwd) {
|
|
50
|
-
let dirty = false;
|
|
51
|
-
try {
|
|
52
|
-
const porcelain = execFileSync('git', ['status', '--porcelain'], { cwd, encoding: 'utf-8' });
|
|
53
|
-
dirty = porcelain.trim().length > 0;
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
// Not a git repo yet, or git unavailable. Nothing meaningful to warn about.
|
|
57
|
-
}
|
|
58
|
-
let ahead = false;
|
|
59
|
-
try {
|
|
60
|
-
const count = execFileSync('git', ['rev-list', '--count', 'runwork/main..HEAD'], { cwd, encoding: 'utf-8' });
|
|
61
|
-
ahead = parseInt(count.trim(), 10) > 0;
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// `runwork/main` does not exist locally (never fetched) or no HEAD yet.
|
|
65
|
-
// Treat as not ahead: there is no pushed baseline to diverge from.
|
|
66
|
-
}
|
|
67
|
-
return { dirty, ahead };
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* End-to-end guard decision against the real repo and session file.
|
|
71
|
-
* Returns the status alongside the warn decision so callers can include
|
|
72
|
-
* the specifics (dirty / ahead) in their message.
|
|
73
|
-
*/
|
|
74
|
-
export function evaluateDeployGuard(cwd, appId) {
|
|
75
|
-
const status = readWorkingTreeStatus(cwd);
|
|
76
|
-
const session = getSessionState(cwd, appId);
|
|
77
|
-
return { status, warn: shouldWarnBeforeDeploy(status, session) };
|
|
78
|
-
}
|
package/dist/git/identity.d.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { Credentials } from '../types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Derive a human-friendly display name from an email address. Used when the
|
|
4
|
-
* credentials store only has the email (which is the common case). e.g.
|
|
5
|
-
* "oytun@motaword.com" -> "Oytun"; "anna.maria@example.com" -> "Anna Maria".
|
|
6
|
-
*/
|
|
7
|
-
declare function deriveNameFromEmail(email: string): string;
|
|
8
|
-
declare function pickIdentity(creds?: Credentials | null): {
|
|
9
|
-
email: string;
|
|
10
|
-
name: string;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Ensure the repository at `cwd` has a usable git identity (user.email and
|
|
14
|
-
* user.name) and that, whenever possible, commits are attributed to the
|
|
15
|
-
* authenticated Runwork user.
|
|
16
|
-
*
|
|
17
|
-
* Precedence:
|
|
18
|
-
* 1. If we have usable Runwork credentials, always write local-scoped
|
|
19
|
-
* `user.email` / `user.name` from those credentials. Commits to a
|
|
20
|
-
* Runwork remote should be attributable to the logged-in Runwork user,
|
|
21
|
-
* not to whatever generic identity the developer uses for unrelated
|
|
22
|
-
* personal repos.
|
|
23
|
-
* 2. If credentials are missing or are an unusable placeholder
|
|
24
|
-
* (e.g. API-key login), fall back to any existing global / system
|
|
25
|
-
* configuration so the user's pre-existing identity still works.
|
|
26
|
-
* 3. If neither credentials nor any existing config are available, write a
|
|
27
|
-
* synthetic local identity so the inevitable `git commit` does not fail
|
|
28
|
-
* on a fresh Windows / minimal-container install with the classic
|
|
29
|
-
* `unable to auto-detect email address` error.
|
|
30
|
-
*
|
|
31
|
-
* Local scope (`git config --local`) is mandatory: we never touch the user's
|
|
32
|
-
* global config so we cannot disturb identities they use elsewhere.
|
|
33
|
-
*
|
|
34
|
-
* Safe to call multiple times; it short-circuits when the desired identity
|
|
35
|
-
* is already in place.
|
|
36
|
-
*/
|
|
37
|
-
export declare function ensureGitIdentity(cwd: string, creds?: Credentials | null): void;
|
|
38
|
-
export declare const __testing: {
|
|
39
|
-
deriveNameFromEmail: typeof deriveNameFromEmail;
|
|
40
|
-
pickIdentity: typeof pickIdentity;
|
|
41
|
-
FALLBACK_EMAIL: string;
|
|
42
|
-
FALLBACK_NAME: string;
|
|
43
|
-
};
|
|
44
|
-
export {};
|
package/dist/git/identity.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { execFileSync } from '../utils/subprocess.js';
|
|
2
|
-
/**
|
|
3
|
-
* Default identity used when we cannot derive anything better from the
|
|
4
|
-
* authenticated credentials. Local-scoped, never written to global config,
|
|
5
|
-
* so it does not leak into other repositories on the user's machine.
|
|
6
|
-
*/
|
|
7
|
-
const FALLBACK_EMAIL = 'runwork-cli@runwork.local';
|
|
8
|
-
const FALLBACK_NAME = 'Runwork User';
|
|
9
|
-
/**
|
|
10
|
-
* Derive a human-friendly display name from an email address. Used when the
|
|
11
|
-
* credentials store only has the email (which is the common case). e.g.
|
|
12
|
-
* "oytun@motaword.com" -> "Oytun"; "anna.maria@example.com" -> "Anna Maria".
|
|
13
|
-
*/
|
|
14
|
-
function deriveNameFromEmail(email) {
|
|
15
|
-
const local = email.split('@')[0] ?? '';
|
|
16
|
-
if (!local)
|
|
17
|
-
return FALLBACK_NAME;
|
|
18
|
-
const cleaned = local.replace(/[._+-]+/g, ' ').trim();
|
|
19
|
-
if (!cleaned)
|
|
20
|
-
return FALLBACK_NAME;
|
|
21
|
-
return cleaned
|
|
22
|
-
.split(/\s+/)
|
|
23
|
-
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
24
|
-
.join(' ');
|
|
25
|
-
}
|
|
26
|
-
function isUsableEmail(value) {
|
|
27
|
-
if (!value)
|
|
28
|
-
return false;
|
|
29
|
-
// Reject the "api-key-auth" placeholder used by API-key login flows.
|
|
30
|
-
if (!value.includes('@'))
|
|
31
|
-
return false;
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
function pickIdentity(creds) {
|
|
35
|
-
const email = isUsableEmail(creds?.email) ? creds.email : FALLBACK_EMAIL;
|
|
36
|
-
const name = email === FALLBACK_EMAIL ? FALLBACK_NAME : deriveNameFromEmail(email);
|
|
37
|
-
return { email, name };
|
|
38
|
-
}
|
|
39
|
-
function readGitConfig(cwd, key) {
|
|
40
|
-
try {
|
|
41
|
-
const value = execFileSync('git', ['config', '--get', key], { cwd, stdio: ['ignore', 'pipe', 'ignore'] });
|
|
42
|
-
return value.toString('utf-8').trim();
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
return '';
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
function readLocalGitConfig(cwd, key) {
|
|
49
|
-
try {
|
|
50
|
-
const value = execFileSync('git', ['config', '--local', '--get', key], { cwd, stdio: ['ignore', 'pipe', 'ignore'] });
|
|
51
|
-
return value.toString('utf-8').trim();
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
return '';
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Ensure the repository at `cwd` has a usable git identity (user.email and
|
|
59
|
-
* user.name) and that, whenever possible, commits are attributed to the
|
|
60
|
-
* authenticated Runwork user.
|
|
61
|
-
*
|
|
62
|
-
* Precedence:
|
|
63
|
-
* 1. If we have usable Runwork credentials, always write local-scoped
|
|
64
|
-
* `user.email` / `user.name` from those credentials. Commits to a
|
|
65
|
-
* Runwork remote should be attributable to the logged-in Runwork user,
|
|
66
|
-
* not to whatever generic identity the developer uses for unrelated
|
|
67
|
-
* personal repos.
|
|
68
|
-
* 2. If credentials are missing or are an unusable placeholder
|
|
69
|
-
* (e.g. API-key login), fall back to any existing global / system
|
|
70
|
-
* configuration so the user's pre-existing identity still works.
|
|
71
|
-
* 3. If neither credentials nor any existing config are available, write a
|
|
72
|
-
* synthetic local identity so the inevitable `git commit` does not fail
|
|
73
|
-
* on a fresh Windows / minimal-container install with the classic
|
|
74
|
-
* `unable to auto-detect email address` error.
|
|
75
|
-
*
|
|
76
|
-
* Local scope (`git config --local`) is mandatory: we never touch the user's
|
|
77
|
-
* global config so we cannot disturb identities they use elsewhere.
|
|
78
|
-
*
|
|
79
|
-
* Safe to call multiple times; it short-circuits when the desired identity
|
|
80
|
-
* is already in place.
|
|
81
|
-
*/
|
|
82
|
-
export function ensureGitIdentity(cwd, creds) {
|
|
83
|
-
// Only act on actual git repos; refuse silently if `cwd` has no .git.
|
|
84
|
-
try {
|
|
85
|
-
execFileSync('git', ['rev-parse', '--git-dir'], { cwd, stdio: 'pipe' });
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
const credsUsable = isUsableEmail(creds?.email);
|
|
91
|
-
// Path 1: real Runwork credentials -- always overwrite local config so the
|
|
92
|
-
// commit is attributed to the Runwork user, regardless of global state.
|
|
93
|
-
if (credsUsable) {
|
|
94
|
-
const { email, name } = pickIdentity(creds);
|
|
95
|
-
const existingLocalEmail = readLocalGitConfig(cwd, 'user.email');
|
|
96
|
-
const existingLocalName = readLocalGitConfig(cwd, 'user.name');
|
|
97
|
-
if (existingLocalEmail !== email) {
|
|
98
|
-
try {
|
|
99
|
-
execFileSync('git', ['config', '--local', 'user.email', email], { cwd, stdio: 'pipe' });
|
|
100
|
-
}
|
|
101
|
-
catch { /* read-only fs */ }
|
|
102
|
-
}
|
|
103
|
-
if (existingLocalName !== name) {
|
|
104
|
-
try {
|
|
105
|
-
execFileSync('git', ['config', '--local', 'user.name', name], { cwd, stdio: 'pipe' });
|
|
106
|
-
}
|
|
107
|
-
catch { /* read-only fs */ }
|
|
108
|
-
}
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
// Path 2: no usable creds. Respect any pre-existing identity (global/local).
|
|
112
|
-
const existingEmail = readGitConfig(cwd, 'user.email');
|
|
113
|
-
const existingName = readGitConfig(cwd, 'user.name');
|
|
114
|
-
if (existingEmail && existingName)
|
|
115
|
-
return;
|
|
116
|
-
// Path 3: no creds AND no existing identity -- seed a synthetic fallback
|
|
117
|
-
// so commits do not fail on a fresh machine.
|
|
118
|
-
const { email, name } = pickIdentity(creds);
|
|
119
|
-
if (!existingEmail) {
|
|
120
|
-
try {
|
|
121
|
-
execFileSync('git', ['config', '--local', 'user.email', email], { cwd, stdio: 'pipe' });
|
|
122
|
-
}
|
|
123
|
-
catch { /* read-only fs */ }
|
|
124
|
-
}
|
|
125
|
-
if (!existingName) {
|
|
126
|
-
try {
|
|
127
|
-
execFileSync('git', ['config', '--local', 'user.name', name], { cwd, stdio: 'pipe' });
|
|
128
|
-
}
|
|
129
|
-
catch { /* read-only fs */ }
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
// Exported for unit tests so we do not have to re-derive expectations there.
|
|
133
|
-
export const __testing = { deriveNameFromEmail, pickIdentity, FALLBACK_EMAIL, FALLBACK_NAME };
|
package/dist/git/preflight.d.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
export type GitSource = 'PATH' | 'where' | 'registry' | 'canonical';
|
|
2
|
-
export interface GitProbe {
|
|
3
|
-
installed: boolean;
|
|
4
|
-
/** Trimmed `git --version` output when detected; undefined otherwise. */
|
|
5
|
-
version?: string;
|
|
6
|
-
/** Resolved binary path; 'git' when bare PATH lookup worked, absolute when discovered via fallback. */
|
|
7
|
-
path?: string;
|
|
8
|
-
/** How we resolved the binary -- useful for `runwork doctor --verbose` diagnostics. */
|
|
9
|
-
source?: GitSource;
|
|
10
|
-
/** Underlying error for diagnostics (most often ENOENT on a missing git binary). */
|
|
11
|
-
error?: NodeJS.ErrnoException;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Probe whether `git` is callable from this process.
|
|
15
|
-
*
|
|
16
|
-
* Strategy:
|
|
17
|
-
* 1. Try a bare `git --version` -- the common path on macOS, Linux, and
|
|
18
|
-
* most Windows installs.
|
|
19
|
-
* 2. On Windows, fall back to `where.exe git` (uses the same PATH +
|
|
20
|
-
* PATHEXT rules cmd.exe applies, which are more permissive than
|
|
21
|
-
* Bun's spawn lookup in standalone-compiled binaries).
|
|
22
|
-
* 3. On Windows, finally probe canonical install paths under
|
|
23
|
-
* %ProgramFiles%, %ProgramFiles(x86)%, %LOCALAPPDATA%\Programs.
|
|
24
|
-
*
|
|
25
|
-
* When step 2 or 3 succeeds, we prepend the resolved directory to
|
|
26
|
-
* process.env.PATH so the ~50 other call sites that do
|
|
27
|
-
* `execFileSync('git', ...)` automatically benefit, without rewriting
|
|
28
|
-
* each one. Result is cached for the lifetime of the process.
|
|
29
|
-
*/
|
|
30
|
-
export declare function probeGit(): GitProbe;
|
|
31
|
-
/**
|
|
32
|
-
* Reset the cached probe result. Exposed for tests and for `runwork doctor`
|
|
33
|
-
* when it wants to re-check after a guided install.
|
|
34
|
-
*/
|
|
35
|
-
export declare function resetGitProbeCache(): void;
|
|
36
|
-
/**
|
|
37
|
-
* Extract a short numeric version (e.g. "2.43.0") from a `git --version`
|
|
38
|
-
* output line. Returns null if no number could be parsed.
|
|
39
|
-
*/
|
|
40
|
-
export declare function parseGitVersion(versionLine: string | undefined): string | null;
|
|
41
|
-
/**
|
|
42
|
-
* Build a beginner-friendly message explaining how to recover from a missing
|
|
43
|
-
* git binary. Includes a Windows-specific hint because the most common
|
|
44
|
-
* scenario there is "winget install Git.Git just succeeded but this shell's
|
|
45
|
-
* PATH was cached at launch" -- restarting the shell fixes it without a
|
|
46
|
-
* second install attempt.
|
|
47
|
-
*
|
|
48
|
-
* If a probe error is supplied, the underlying message is appended so users
|
|
49
|
-
* can see *why* detection failed (ENOENT vs EACCES vs something else).
|
|
50
|
-
*/
|
|
51
|
-
export declare function buildMissingGitMessage(commandName: string, probe?: GitProbe): string;
|
|
52
|
-
/**
|
|
53
|
-
* Convenience wrapper for command entry points: probe git, and if it's
|
|
54
|
-
* missing, print the beginner-friendly message and exit with code 1.
|
|
55
|
-
* Returns void on success so callers can early-return on failure.
|
|
56
|
-
*/
|
|
57
|
-
export declare function requireGit(commandName: string): void;
|