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,145 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { existsSync, readFileSync, rmSync, unlinkSync } from 'fs';
|
|
3
|
-
import { join } from 'path';
|
|
4
|
-
import { homedir } from 'os';
|
|
5
|
-
import { getAdapterBySlug } from '../agents/detect.js';
|
|
6
|
-
import { promptConfirm } from '../utils/prompt.js';
|
|
7
|
-
function loadSetupState(filePath) {
|
|
8
|
-
if (!existsSync(filePath))
|
|
9
|
-
return null;
|
|
10
|
-
try {
|
|
11
|
-
return JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
12
|
-
}
|
|
13
|
-
catch {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
export const uninstallCommand = new Command('uninstall')
|
|
18
|
-
.description('Remove all Runwork configuration from local agents (MCP servers, skills, instructions)')
|
|
19
|
-
.option('-y, --yes', 'Skip confirmation prompt')
|
|
20
|
-
.option('--keep-auth', 'Keep authentication credentials (only remove agent configs)')
|
|
21
|
-
.action(async (opts) => {
|
|
22
|
-
const projectStatePath = join(process.cwd(), '.runwork', 'setup.json');
|
|
23
|
-
const userStatePath = join(homedir(), '.runwork', 'setup.json');
|
|
24
|
-
const projectState = loadSetupState(projectStatePath);
|
|
25
|
-
const userState = loadSetupState(userStatePath);
|
|
26
|
-
if (!projectState && !userState) {
|
|
27
|
-
console.error('No setup state found. Nothing to uninstall.');
|
|
28
|
-
process.exit(0);
|
|
29
|
-
}
|
|
30
|
-
// Collect all configured agents across both scopes
|
|
31
|
-
const agentSlugs = new Set();
|
|
32
|
-
if (projectState) {
|
|
33
|
-
for (const slug of projectState.configuredAgents)
|
|
34
|
-
agentSlugs.add(slug);
|
|
35
|
-
}
|
|
36
|
-
if (userState) {
|
|
37
|
-
for (const slug of userState.configuredAgents)
|
|
38
|
-
agentSlugs.add(slug);
|
|
39
|
-
}
|
|
40
|
-
console.log('\nThis will remove all Runwork configuration from your local agents:\n');
|
|
41
|
-
if (agentSlugs.size > 0) {
|
|
42
|
-
console.log(' Agents to clean:');
|
|
43
|
-
for (const slug of agentSlugs) {
|
|
44
|
-
const adapter = getAdapterBySlug(slug);
|
|
45
|
-
console.log(` - ${adapter?.name ?? slug}`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
console.log('\n What will be removed:');
|
|
49
|
-
console.log(' - MCP server registrations');
|
|
50
|
-
console.log(' - Synced skills and instruction hints');
|
|
51
|
-
console.log(' - Team instructions');
|
|
52
|
-
console.log(' - Agent config overrides (model, permissions)');
|
|
53
|
-
console.log(' - Plugin registrations (Claude Code, Claude Desktop)');
|
|
54
|
-
if (opts.keepAuth) {
|
|
55
|
-
console.log(' - Setup state (keeping auth credentials)');
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
console.log(' - Setup state and auth credentials (~/.runwork/)');
|
|
59
|
-
}
|
|
60
|
-
console.log('');
|
|
61
|
-
if (!opts.yes) {
|
|
62
|
-
const confirmed = await promptConfirm('Proceed with uninstall?');
|
|
63
|
-
if (!confirmed) {
|
|
64
|
-
console.log('Cancelled.');
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
let cleanedAgents = 0;
|
|
69
|
-
let errors = 0;
|
|
70
|
-
// Process each setup state (project and/or user)
|
|
71
|
-
const entries = [];
|
|
72
|
-
if (projectState)
|
|
73
|
-
entries.push({ state: projectState, statePath: projectStatePath, label: 'project' });
|
|
74
|
-
if (userState)
|
|
75
|
-
entries.push({ state: userState, statePath: userStatePath, label: 'user' });
|
|
76
|
-
for (const { state, label } of entries) {
|
|
77
|
-
const scopes = state.scope === 'both'
|
|
78
|
-
? ['project', 'user']
|
|
79
|
-
: [state.scope];
|
|
80
|
-
// Build manifest from sync state so adapters only remove what we synced
|
|
81
|
-
const manifest = {
|
|
82
|
-
skillFilenames: state.skillFilenames ?? state.skills.map(s => s.toLowerCase().replace(/[^a-z0-9]+/g, '-')),
|
|
83
|
-
mcpServerNames: state.mcpServers ?? [],
|
|
84
|
-
};
|
|
85
|
-
for (const slug of state.configuredAgents) {
|
|
86
|
-
const adapter = getAdapterBySlug(slug);
|
|
87
|
-
if (!adapter) {
|
|
88
|
-
console.warn(` [${slug}] Adapter not found, skipping.`);
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
for (const scope of scopes) {
|
|
92
|
-
try {
|
|
93
|
-
if (adapter.cleanup) {
|
|
94
|
-
await adapter.cleanup(scope, manifest);
|
|
95
|
-
console.log(` [${adapter.name}] Cleaned up (${scope})`);
|
|
96
|
-
cleanedAgents++;
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
console.log(` [${adapter.name}] No cleanup handler, skipping (${scope})`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
catch (err) {
|
|
103
|
-
console.warn(` [${adapter.name}] Cleanup failed (${scope}): ${err instanceof Error ? err.message : err}`);
|
|
104
|
-
errors++;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
// Remove setup state
|
|
109
|
-
const stateDir = label === 'project'
|
|
110
|
-
? join(process.cwd(), '.runwork')
|
|
111
|
-
: join(homedir(), '.runwork');
|
|
112
|
-
if (opts.keepAuth && label === 'user') {
|
|
113
|
-
// Only remove setup.json, keep credentials and other files
|
|
114
|
-
const setupFile = join(stateDir, 'setup.json');
|
|
115
|
-
if (existsSync(setupFile)) {
|
|
116
|
-
try {
|
|
117
|
-
unlinkSync(setupFile);
|
|
118
|
-
console.log(` Removed ${setupFile} (kept credentials)`);
|
|
119
|
-
}
|
|
120
|
-
catch (err) {
|
|
121
|
-
console.warn(` Failed to remove ${setupFile}: ${err instanceof Error ? err.message : err}`);
|
|
122
|
-
errors++;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
else if (existsSync(stateDir)) {
|
|
127
|
-
try {
|
|
128
|
-
rmSync(stateDir, { recursive: true, force: true });
|
|
129
|
-
console.log(` Removed ${stateDir}`);
|
|
130
|
-
}
|
|
131
|
-
catch (err) {
|
|
132
|
-
console.warn(` Failed to remove ${stateDir}: ${err instanceof Error ? err.message : err}`);
|
|
133
|
-
errors++;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
console.log('');
|
|
138
|
-
if (errors > 0) {
|
|
139
|
-
console.log(`Uninstall completed with ${errors} warning${errors > 1 ? 's' : ''}. ${cleanedAgents} agent${cleanedAgents > 1 ? 's' : ''} cleaned.`);
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
console.log(`Uninstall complete. ${cleanedAgents} agent${cleanedAgents > 1 ? 's' : ''} cleaned.`);
|
|
143
|
-
}
|
|
144
|
-
console.log('Run `runwork setup` to reconfigure at any time.');
|
|
145
|
-
});
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
declare function fetchLatestVersion(): Promise<string | null>;
|
|
3
|
-
type InstallMethod = 'brew' | 'npm' | 'bun' | 'pnpm' | 'yarn' | 'volta' | 'binary';
|
|
4
|
-
declare function detectInstallMethod(): InstallMethod;
|
|
5
|
-
export declare const upgradeCommand: Command;
|
|
6
|
-
export declare const __internal: {
|
|
7
|
-
BASE_URL: string;
|
|
8
|
-
LATEST_JSON_URL: string;
|
|
9
|
-
INSTALL_SH_URL: string;
|
|
10
|
-
INSTALL_PS1_URL: string;
|
|
11
|
-
fetchLatestVersion: typeof fetchLatestVersion;
|
|
12
|
-
detectInstallMethod: typeof detectInstallMethod;
|
|
13
|
-
};
|
|
14
|
-
export {};
|
package/dist/commands/upgrade.js
DELETED
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { execFileSync } from 'child_process';
|
|
3
|
-
import { platform as osPlatform, tmpdir } from 'os';
|
|
4
|
-
import { mkdtempSync, writeFileSync, rmSync } from 'fs';
|
|
5
|
-
import { join } from 'path';
|
|
6
|
-
import { VERSION } from '../generated/version.js';
|
|
7
|
-
import { httpFetch } from '../utils/http.js';
|
|
8
|
-
const BASE_URL = 'https://runwork.ai';
|
|
9
|
-
const LATEST_JSON_URL = `${BASE_URL}/cli/latest.json`;
|
|
10
|
-
const INSTALL_SH_URL = `${BASE_URL}/install.sh`;
|
|
11
|
-
const INSTALL_PS1_URL = `${BASE_URL}/install.ps1`;
|
|
12
|
-
async function fetchLatestVersion() {
|
|
13
|
-
try {
|
|
14
|
-
const response = await httpFetch(LATEST_JSON_URL, { cache: 'no-store' });
|
|
15
|
-
if (!response.ok)
|
|
16
|
-
return null;
|
|
17
|
-
const data = await response.json();
|
|
18
|
-
return data.version?.replace(/^v/, '') || null;
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
function detectInstallMethod() {
|
|
25
|
-
try {
|
|
26
|
-
const binaryPath = process.argv[1] || '';
|
|
27
|
-
// Homebrew: /opt/homebrew/Cellar/runwork/... or /usr/local/Cellar/runwork/...
|
|
28
|
-
if (binaryPath.includes('/Cellar/runwork/') || binaryPath.includes('/homebrew/')) {
|
|
29
|
-
return 'brew';
|
|
30
|
-
}
|
|
31
|
-
// Volta: ~/.volta/tools/image/packages/runwork/...
|
|
32
|
-
if (binaryPath.includes('/.volta/')) {
|
|
33
|
-
return 'volta';
|
|
34
|
-
}
|
|
35
|
-
// Bun global: ~/.bun/install/global/... or ~/.bun/bin/...
|
|
36
|
-
if (binaryPath.includes('/.bun/')) {
|
|
37
|
-
return 'bun';
|
|
38
|
-
}
|
|
39
|
-
// pnpm global: ~/.local/share/pnpm/... or pnpm/global/...
|
|
40
|
-
if (binaryPath.includes('/pnpm/') || binaryPath.includes('/.pnpm/')) {
|
|
41
|
-
return 'pnpm';
|
|
42
|
-
}
|
|
43
|
-
// Yarn global: ~/.yarn/bin/... or ~/.config/yarn/global/...
|
|
44
|
-
if (binaryPath.includes('/.yarn/') || binaryPath.includes('/yarn/global/')) {
|
|
45
|
-
return 'yarn';
|
|
46
|
-
}
|
|
47
|
-
// npm global: node_modules or /lib/node/ in path
|
|
48
|
-
if (binaryPath.includes('node_modules') || binaryPath.includes('/lib/node/')) {
|
|
49
|
-
return 'npm';
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
// Fall through to binary
|
|
54
|
-
}
|
|
55
|
-
return 'binary';
|
|
56
|
-
}
|
|
57
|
-
async function upgradeBinary() {
|
|
58
|
-
const isWindows = osPlatform() === 'win32';
|
|
59
|
-
if (isWindows) {
|
|
60
|
-
console.log('\nUpgrading via PowerShell installer...\n');
|
|
61
|
-
const response = await httpFetch(INSTALL_PS1_URL, { cache: 'no-store' });
|
|
62
|
-
if (!response.ok) {
|
|
63
|
-
throw new Error(`Failed to download install.ps1: HTTP ${response.status}`);
|
|
64
|
-
}
|
|
65
|
-
const script = await response.text();
|
|
66
|
-
// Write the script to a temp file and invoke it with `-File`. This is more
|
|
67
|
-
// robust than `-Command` because it avoids PowerShell's quoting rules for
|
|
68
|
-
// multi-line strings with embedded single or double quotes.
|
|
69
|
-
const tmpDir = mkdtempSync(join(tmpdir(), 'runwork-upgrade-'));
|
|
70
|
-
const scriptPath = join(tmpDir, 'install.ps1');
|
|
71
|
-
try {
|
|
72
|
-
writeFileSync(scriptPath, script);
|
|
73
|
-
execFileSync('powershell', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', scriptPath], { stdio: 'inherit' });
|
|
74
|
-
}
|
|
75
|
-
finally {
|
|
76
|
-
try {
|
|
77
|
-
rmSync(tmpDir, { recursive: true, force: true });
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
/* best-effort cleanup */
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
console.log('\nUpgraded successfully.');
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
console.log('\nUpgrading via install.sh...\n');
|
|
87
|
-
const response = await httpFetch(INSTALL_SH_URL, { cache: 'no-store' });
|
|
88
|
-
if (!response.ok) {
|
|
89
|
-
throw new Error(`Failed to download install.sh: HTTP ${response.status}`);
|
|
90
|
-
}
|
|
91
|
-
const script = await response.text();
|
|
92
|
-
execFileSync('sh', ['-s'], { input: script, stdio: ['pipe', 'inherit', 'inherit'] });
|
|
93
|
-
console.log('\nUpgraded successfully.');
|
|
94
|
-
}
|
|
95
|
-
export const upgradeCommand = new Command('upgrade')
|
|
96
|
-
.description('Upgrade Runwork CLI to the latest version')
|
|
97
|
-
.option('--check', 'Check for updates without installing')
|
|
98
|
-
.action(async (options) => {
|
|
99
|
-
console.log(`Current version: ${VERSION}`);
|
|
100
|
-
const latest = await fetchLatestVersion();
|
|
101
|
-
if (!latest) {
|
|
102
|
-
console.error(`Could not fetch latest version from ${LATEST_JSON_URL}.`);
|
|
103
|
-
console.error('Check your network and that runwork.ai is reachable.');
|
|
104
|
-
process.exit(1);
|
|
105
|
-
}
|
|
106
|
-
if (latest === VERSION) {
|
|
107
|
-
console.log(`Already on the latest version (${VERSION}).`);
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
console.log(`Latest version: ${latest}`);
|
|
111
|
-
if (options.check) {
|
|
112
|
-
console.log(`\nRun \`runwork upgrade\` to install the update.`);
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
const method = detectInstallMethod();
|
|
116
|
-
if (method === 'brew') {
|
|
117
|
-
console.log('\nDetected installation method: brew');
|
|
118
|
-
console.log('Upgrading via Homebrew...\n');
|
|
119
|
-
try {
|
|
120
|
-
execFileSync('brew', ['update', '--quiet'], { stdio: 'inherit' });
|
|
121
|
-
execFileSync('brew', ['upgrade', 'runwork'], { stdio: 'inherit' });
|
|
122
|
-
console.log('\nUpgraded successfully via Homebrew.');
|
|
123
|
-
}
|
|
124
|
-
catch {
|
|
125
|
-
console.error('\nHomebrew upgrade failed. Try manually: brew update && brew upgrade runwork');
|
|
126
|
-
process.exit(1);
|
|
127
|
-
}
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
if (method === 'bun') {
|
|
131
|
-
console.log('\nDetected installation method: bun');
|
|
132
|
-
console.log('Upgrading via bun...\n');
|
|
133
|
-
try {
|
|
134
|
-
execFileSync('bun', ['install', '-g', 'runwork@latest'], { stdio: 'inherit' });
|
|
135
|
-
console.log('\nUpgraded successfully via bun.');
|
|
136
|
-
}
|
|
137
|
-
catch {
|
|
138
|
-
console.error('\nbun upgrade failed. Try manually: bun install -g runwork@latest');
|
|
139
|
-
process.exit(1);
|
|
140
|
-
}
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
if (method === 'pnpm') {
|
|
144
|
-
console.log('\nDetected installation method: pnpm');
|
|
145
|
-
console.log('Upgrading via pnpm...\n');
|
|
146
|
-
try {
|
|
147
|
-
execFileSync('pnpm', ['update', '-g', 'runwork'], { stdio: 'inherit' });
|
|
148
|
-
console.log('\nUpgraded successfully via pnpm.');
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
console.error('\npnpm upgrade failed. Try manually: pnpm update -g runwork');
|
|
152
|
-
process.exit(1);
|
|
153
|
-
}
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
if (method === 'yarn') {
|
|
157
|
-
console.log('\nDetected installation method: yarn');
|
|
158
|
-
console.log('Upgrading via yarn...\n');
|
|
159
|
-
try {
|
|
160
|
-
execFileSync('yarn', ['global', 'upgrade', 'runwork'], { stdio: 'inherit' });
|
|
161
|
-
console.log('\nUpgraded successfully via yarn.');
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
console.error('\nyarn upgrade failed. Try manually: yarn global upgrade runwork');
|
|
165
|
-
process.exit(1);
|
|
166
|
-
}
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
if (method === 'volta') {
|
|
170
|
-
console.log('\nDetected installation method: volta');
|
|
171
|
-
console.log('Upgrading via Volta...\n');
|
|
172
|
-
try {
|
|
173
|
-
execFileSync('volta', ['install', 'runwork@latest'], { stdio: 'inherit' });
|
|
174
|
-
console.log('\nUpgraded successfully via Volta.');
|
|
175
|
-
}
|
|
176
|
-
catch {
|
|
177
|
-
console.error('\nVolta upgrade failed. Try manually: volta install runwork@latest');
|
|
178
|
-
process.exit(1);
|
|
179
|
-
}
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
if (method === 'npm') {
|
|
183
|
-
console.log('\nDetected installation method: npm');
|
|
184
|
-
console.log('Upgrading via npm...\n');
|
|
185
|
-
try {
|
|
186
|
-
execFileSync('npm', ['update', '-g', 'runwork'], { stdio: 'inherit' });
|
|
187
|
-
console.log('\nUpgraded successfully via npm.');
|
|
188
|
-
}
|
|
189
|
-
catch {
|
|
190
|
-
console.error('\nnpm upgrade failed. Try manually: npm update -g runwork');
|
|
191
|
-
process.exit(1);
|
|
192
|
-
}
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
// Binary install: first-party runwork.ai installer.
|
|
196
|
-
try {
|
|
197
|
-
await upgradeBinary();
|
|
198
|
-
}
|
|
199
|
-
catch (err) {
|
|
200
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
201
|
-
console.error(`\nUpgrade failed: ${message}`);
|
|
202
|
-
const manualCmd = osPlatform() === 'win32'
|
|
203
|
-
? `irm ${INSTALL_PS1_URL} | iex`
|
|
204
|
-
: `curl -fsSL ${INSTALL_SH_URL} | sh`;
|
|
205
|
-
console.error(`Try manually: ${manualCmd}`);
|
|
206
|
-
process.exit(1);
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
// Exported for tests
|
|
210
|
-
export const __internal = {
|
|
211
|
-
BASE_URL,
|
|
212
|
-
LATEST_JSON_URL,
|
|
213
|
-
INSTALL_SH_URL,
|
|
214
|
-
INSTALL_PS1_URL,
|
|
215
|
-
fetchLatestVersion,
|
|
216
|
-
detectInstallMethod,
|
|
217
|
-
};
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { readFileSync, existsSync } from 'fs';
|
|
3
|
-
import { requireAuth } from '../auth/store.js';
|
|
4
|
-
import { ApiClient } from '../api/client.js';
|
|
5
|
-
import { shouldOutputJson, jsonOut } from '../utils/output.js';
|
|
6
|
-
import { bold, dim, green, yellow, red } from '../ui/colors.js';
|
|
7
|
-
import { requireGit } from '../git/preflight.js';
|
|
8
|
-
import { getGitFreshness } from '../validate/freshness.js';
|
|
9
|
-
import { checkPreview } from '../validate/preview.js';
|
|
10
|
-
const BUILD_FOLLOWUP = 'In-sandbox typecheck/lint requires a worker exec endpoint (not yet available). The preview error-overlay check is used as a build proxy.';
|
|
11
|
-
export const validateCommand = new Command('validate')
|
|
12
|
-
.description('Validate the app before deploy: git sync state + preview liveness (no local deps needed)')
|
|
13
|
-
.action(async (_opts, command) => {
|
|
14
|
-
const useJson = shouldOutputJson(command.optsWithGlobals().json);
|
|
15
|
-
const cwd = process.cwd();
|
|
16
|
-
if (!existsSync('.runwork.json')) {
|
|
17
|
-
if (useJson) {
|
|
18
|
-
jsonOut({ success: false, command: 'validate', error: 'No .runwork.json found. Run inside a Runwork app.' });
|
|
19
|
-
process.exit(1);
|
|
20
|
-
}
|
|
21
|
-
console.error('No .runwork.json found. Run `runwork validate` inside a Runwork app.');
|
|
22
|
-
process.exit(1);
|
|
23
|
-
}
|
|
24
|
-
requireGit('validate');
|
|
25
|
-
const config = JSON.parse(readFileSync('.runwork.json', 'utf-8'));
|
|
26
|
-
const creds = requireAuth();
|
|
27
|
-
const client = new ApiClient(creds);
|
|
28
|
-
const sync = getGitFreshness(cwd);
|
|
29
|
-
// Best-effort: ask the server for the current preview URL. No running
|
|
30
|
-
// preview is not a failure -- the preview check is simply skipped.
|
|
31
|
-
let previewUrl = null;
|
|
32
|
-
try {
|
|
33
|
-
const status = await client.getDevStatus(config.appId);
|
|
34
|
-
previewUrl = status.previewUrl || null;
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
/* no active session -- preview check skipped */
|
|
38
|
-
}
|
|
39
|
-
const preview = await checkPreview(previewUrl);
|
|
40
|
-
// Overall: fail only on a concrete problem -- the preview is down or
|
|
41
|
-
// serving a broken build. Local commits not yet deployed are informational.
|
|
42
|
-
const ok = preview.url === null ? true : preview.responds && !preview.errorDetected;
|
|
43
|
-
const result = { sync, preview, build: { checked: false, reason: BUILD_FOLLOWUP }, ok };
|
|
44
|
-
if (useJson) {
|
|
45
|
-
jsonOut({ success: ok, command: 'validate', result });
|
|
46
|
-
if (!ok)
|
|
47
|
-
process.exit(1);
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
console.log('');
|
|
51
|
-
console.log(bold('runwork validate'));
|
|
52
|
-
console.log('');
|
|
53
|
-
// Sync
|
|
54
|
-
if (sync.inSync) {
|
|
55
|
-
console.log(` ${green('[ok]')} Sync ${dim('local matches the deploy remote, working tree clean')}`);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
const bits = [];
|
|
59
|
-
if (sync.uncommitted)
|
|
60
|
-
bits.push('uncommitted changes');
|
|
61
|
-
if (sync.ahead > 0)
|
|
62
|
-
bits.push(`${sync.ahead} commit(s) not yet pushed/deployed`);
|
|
63
|
-
if (sync.behind > 0)
|
|
64
|
-
bits.push(`${sync.behind} commit(s) behind the remote`);
|
|
65
|
-
if (!sync.remoteSha)
|
|
66
|
-
bits.push('no runwork/main ref (push or run dev first)');
|
|
67
|
-
console.log(` ${yellow('[info]')} Sync ${dim(bits.join('; ') || 'not in sync')}`);
|
|
68
|
-
}
|
|
69
|
-
// Preview
|
|
70
|
-
if (!preview.url) {
|
|
71
|
-
console.log(` ${dim('[skip]')} Preview ${dim('no preview running (start `runwork dev`)')}`);
|
|
72
|
-
}
|
|
73
|
-
else if (!preview.responds) {
|
|
74
|
-
console.log(` ${red('[FAIL]')} Preview ${dim(`not responding${preview.error ? `: ${preview.error}` : ` (status ${preview.status})`}`)}`);
|
|
75
|
-
}
|
|
76
|
-
else if (preview.errorDetected) {
|
|
77
|
-
console.log(` ${red('[FAIL]')} Preview ${dim('serving a build error overlay -- the app does not compile')}`);
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
console.log(` ${green('[ok]')} Preview ${dim(`live and serving a working build (status ${preview.status})`)}`);
|
|
81
|
-
}
|
|
82
|
-
// Build (proxy)
|
|
83
|
-
console.log(` ${dim('[note]')} Build ${dim(BUILD_FOLLOWUP)}`);
|
|
84
|
-
console.log('');
|
|
85
|
-
console.log(ok ? green(' validate: ok') : red(' validate: FAILED'));
|
|
86
|
-
console.log('');
|
|
87
|
-
if (!ok)
|
|
88
|
-
process.exit(1);
|
|
89
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function runWelcomeWizard(): Promise<void>;
|
package/dist/commands/welcome.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { basename } from 'path';
|
|
2
|
-
import { getCredentials } from '../auth/store.js';
|
|
3
|
-
import { performLogin } from '../auth/login-flow.js';
|
|
4
|
-
import { ApiClient } from '../api/client.js';
|
|
5
|
-
import { promptSelect, promptInput, promptConfirm } from '../utils/prompt.js';
|
|
6
|
-
import { getWelcomeBanner, runAgentWizard } from '../ui/banner.js';
|
|
7
|
-
import { cyan, dim, green } from '../ui/colors.js';
|
|
8
|
-
export async function runWelcomeWizard() {
|
|
9
|
-
// Step 1: Welcome
|
|
10
|
-
console.log(getWelcomeBanner());
|
|
11
|
-
// Step 2: Login
|
|
12
|
-
let creds = getCredentials();
|
|
13
|
-
if (creds) {
|
|
14
|
-
console.log(green(` Already logged in as ${creds.email}.`));
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
console.log('Opening your browser to log in...');
|
|
18
|
-
console.log('');
|
|
19
|
-
creds = await performLogin();
|
|
20
|
-
}
|
|
21
|
-
// Step 3: Init or Clone
|
|
22
|
-
console.log('');
|
|
23
|
-
const action = await promptSelect('What would you like to do?', [
|
|
24
|
-
{ label: 'Create a new app', value: 'init' },
|
|
25
|
-
{ label: 'Clone an existing app', value: 'clone' },
|
|
26
|
-
]);
|
|
27
|
-
const client = new ApiClient(creds);
|
|
28
|
-
let appDir;
|
|
29
|
-
if (action.value === 'init') {
|
|
30
|
-
const appName = await promptInput('App name');
|
|
31
|
-
if (!appName) {
|
|
32
|
-
console.error('App name is required.');
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
const workspaces = await client.listWorkspaces();
|
|
36
|
-
if (workspaces.length === 0) {
|
|
37
|
-
console.error('No workspaces found. Create one at runwork.ai first.');
|
|
38
|
-
process.exit(1);
|
|
39
|
-
}
|
|
40
|
-
let workspace;
|
|
41
|
-
if (workspaces.length === 1) {
|
|
42
|
-
workspace = workspaces[0];
|
|
43
|
-
console.log(dim(` Using workspace: ${workspace.name}`));
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
console.log('');
|
|
47
|
-
console.log('A workspace is where your apps live. Pick one:');
|
|
48
|
-
const choice = await promptSelect('Select workspace:', workspaces.map(w => ({ label: w.name, value: w })));
|
|
49
|
-
workspace = choice.value;
|
|
50
|
-
}
|
|
51
|
-
console.log('');
|
|
52
|
-
console.log(`Creating ${cyan(appName)} in workspace ${cyan(workspace.name)}...`);
|
|
53
|
-
const { execInit } = await import('./init.js');
|
|
54
|
-
const initResult = await execInit(client, appName, workspace, {}, creds);
|
|
55
|
-
appDir = initResult.directory;
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
const apps = await client.listApps();
|
|
59
|
-
if (apps.length === 0) {
|
|
60
|
-
console.error('No apps found. Choose "Create a new app" instead.');
|
|
61
|
-
process.exit(1);
|
|
62
|
-
}
|
|
63
|
-
const choice = await promptSelect('Select app to clone:', apps.map(a => ({ label: `${a.name} (${a.workspaceName})`, value: a })));
|
|
64
|
-
const { execClone } = await import('./clone.js');
|
|
65
|
-
const cloneResult = await execClone(client, choice.value, undefined, creds);
|
|
66
|
-
appDir = cloneResult.directory;
|
|
67
|
-
}
|
|
68
|
-
// Step 4: Agent guidance
|
|
69
|
-
await runAgentWizard(appDir);
|
|
70
|
-
// Step 5: Offer to start dev
|
|
71
|
-
console.log('');
|
|
72
|
-
const startDev = await promptConfirm('Start developing now?');
|
|
73
|
-
if (startDev) {
|
|
74
|
-
console.log('');
|
|
75
|
-
console.log(dim(` Tip: Open another terminal and launch your AI agent in ${cyan(appDir)}`));
|
|
76
|
-
console.log('');
|
|
77
|
-
process.chdir(appDir);
|
|
78
|
-
const { execDev } = await import('./dev.js');
|
|
79
|
-
await execDev();
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
const slug = basename(appDir) || appDir;
|
|
83
|
-
console.log('');
|
|
84
|
-
console.log(`Next: ${cyan(`cd ${slug} && runwork dev`)}`);
|
|
85
|
-
}
|
|
86
|
-
}
|