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
package/dist/commands/agents.js
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { requireAuth } from '../auth/store.js';
|
|
3
|
-
import { ApiClient } from '../api/client.js';
|
|
4
|
-
import { resolveWorkspace, resolveApp } from '../workspace/resolve.js';
|
|
5
|
-
import { shouldOutputJson, jsonOut } from '../utils/output.js';
|
|
6
|
-
function truncate(text, max) {
|
|
7
|
-
if (!text)
|
|
8
|
-
return '';
|
|
9
|
-
const first = text.split('\n')[0];
|
|
10
|
-
if (first.length <= max)
|
|
11
|
-
return first;
|
|
12
|
-
return first.slice(0, max - 3) + '...';
|
|
13
|
-
}
|
|
14
|
-
const listCommand = new Command('list')
|
|
15
|
-
.description('List agents in workspace')
|
|
16
|
-
.option('--workspace <id>', 'Workspace ID')
|
|
17
|
-
.option('--app <id>', 'Filter by app name or ID')
|
|
18
|
-
.action(async (opts, command) => {
|
|
19
|
-
const useJson = shouldOutputJson(command.optsWithGlobals().json);
|
|
20
|
-
const credentials = requireAuth();
|
|
21
|
-
const client = new ApiClient(credentials);
|
|
22
|
-
const { workspaceId, workspaceName } = await resolveWorkspace(client, opts);
|
|
23
|
-
try {
|
|
24
|
-
let agents = await client.listAgents(workspaceId);
|
|
25
|
-
if (opts.app) {
|
|
26
|
-
agents = agents.filter(a => a.appId === opts.app || a.appName === opts.app);
|
|
27
|
-
}
|
|
28
|
-
if (useJson) {
|
|
29
|
-
jsonOut({ agents });
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
if (agents.length === 0) {
|
|
33
|
-
console.log('No agents found in this workspace.');
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
console.log(`\nWorkspace: ${workspaceName || workspaceId}\n`);
|
|
37
|
-
console.log(' ' +
|
|
38
|
-
'Name'.padEnd(24) +
|
|
39
|
-
'Type'.padEnd(16) +
|
|
40
|
-
'App'.padEnd(20) +
|
|
41
|
-
'Description'.padEnd(42) +
|
|
42
|
-
'Integrations'.padEnd(20) +
|
|
43
|
-
'Entities'.padEnd(20) +
|
|
44
|
-
'Mode');
|
|
45
|
-
console.log(' ' + '-'.repeat(140));
|
|
46
|
-
for (const a of agents) {
|
|
47
|
-
const name = a.agentName.padEnd(24);
|
|
48
|
-
const type = a.type.padEnd(16);
|
|
49
|
-
const app = truncate(a.appName, 18).padEnd(20);
|
|
50
|
-
const desc = truncate(a.description, 40).padEnd(42);
|
|
51
|
-
const integrations = (a.integrations?.join(', ') || '').padEnd(20);
|
|
52
|
-
const entities = (a.entities?.join(', ') || '').padEnd(20);
|
|
53
|
-
const mode = a.deploymentMode || '';
|
|
54
|
-
console.log(` ${name}${type}${app}${desc}${integrations}${entities}${mode}`);
|
|
55
|
-
}
|
|
56
|
-
console.log('');
|
|
57
|
-
}
|
|
58
|
-
catch (err) {
|
|
59
|
-
console.error('Failed to list agents:', err instanceof Error ? err.message : err);
|
|
60
|
-
process.exit(1);
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
const statusCommand = new Command('status')
|
|
64
|
-
.description('Get status of a specific agent')
|
|
65
|
-
.argument('<name>', 'Agent name')
|
|
66
|
-
.option('--workspace <id>', 'Workspace ID')
|
|
67
|
-
.option('--app <id>', 'App name or ID (required)')
|
|
68
|
-
.action(async (name, opts, command) => {
|
|
69
|
-
const useJson = shouldOutputJson(command.optsWithGlobals().json);
|
|
70
|
-
const credentials = requireAuth();
|
|
71
|
-
const client = new ApiClient(credentials);
|
|
72
|
-
const { workspaceId } = await resolveWorkspace(client, opts);
|
|
73
|
-
const { appId } = await resolveApp(client, workspaceId, opts);
|
|
74
|
-
try {
|
|
75
|
-
const status = await client.getAgentStatus(workspaceId, name, appId);
|
|
76
|
-
if (useJson) {
|
|
77
|
-
jsonOut({ status });
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
console.log(JSON.stringify(status, null, 2));
|
|
81
|
-
}
|
|
82
|
-
catch (err) {
|
|
83
|
-
console.error('Failed to get agent status:', err instanceof Error ? err.message : err);
|
|
84
|
-
process.exit(1);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
const executionsCommand = new Command('executions')
|
|
88
|
-
.description('List agent execution history for workspace')
|
|
89
|
-
.option('--workspace <id>', 'Workspace ID')
|
|
90
|
-
.action(async (opts, command) => {
|
|
91
|
-
const useJson = shouldOutputJson(command.optsWithGlobals().json);
|
|
92
|
-
const credentials = requireAuth();
|
|
93
|
-
const client = new ApiClient(credentials);
|
|
94
|
-
const { workspaceId } = await resolveWorkspace(client, opts);
|
|
95
|
-
try {
|
|
96
|
-
const executions = await client.listAgentExecutions(workspaceId);
|
|
97
|
-
if (useJson) {
|
|
98
|
-
jsonOut({ executions });
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
if (executions.length === 0) {
|
|
102
|
-
console.log('No agent executions found.');
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
console.log(' ' +
|
|
106
|
-
'Session ID'.padEnd(36) +
|
|
107
|
-
'Agent'.padEnd(22) +
|
|
108
|
-
'App'.padEnd(22) +
|
|
109
|
-
'Prompt'.padEnd(52) +
|
|
110
|
-
'Status'.padEnd(12) +
|
|
111
|
-
'Duration'.padEnd(12) +
|
|
112
|
-
'Usage');
|
|
113
|
-
console.log(' ' + '-'.repeat(160));
|
|
114
|
-
for (const e of executions) {
|
|
115
|
-
const sessionId = e.sessionId.padEnd(36);
|
|
116
|
-
const agent = truncate(e.agentName, 20).padEnd(22);
|
|
117
|
-
const app = truncate(e.appId, 20).padEnd(22);
|
|
118
|
-
const prompt = truncate(e.prompt, 50).padEnd(52);
|
|
119
|
-
const status = e.status.padEnd(12);
|
|
120
|
-
const duration = e.durationMs != null ? `${e.durationMs}ms` : '';
|
|
121
|
-
const usage = e.usage
|
|
122
|
-
? `${e.usage.inputTokens}/${e.usage.outputTokens}`
|
|
123
|
-
: '';
|
|
124
|
-
console.log(` ${sessionId}${agent}${app}${prompt}${status}${duration.padEnd(12)}${usage}`);
|
|
125
|
-
}
|
|
126
|
-
console.log('');
|
|
127
|
-
}
|
|
128
|
-
catch (err) {
|
|
129
|
-
console.error('Failed to list agent executions:', err instanceof Error ? err.message : err);
|
|
130
|
-
process.exit(1);
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
const executionCommand = new Command('execution')
|
|
134
|
-
.description('Get execution stream for a specific session')
|
|
135
|
-
.argument('<sessionId>', 'Session ID')
|
|
136
|
-
.option('--workspace <id>', 'Workspace ID')
|
|
137
|
-
.action(async (sessionId, opts, command) => {
|
|
138
|
-
const useJson = shouldOutputJson(command.optsWithGlobals().json);
|
|
139
|
-
const credentials = requireAuth();
|
|
140
|
-
const client = new ApiClient(credentials);
|
|
141
|
-
const { workspaceId } = await resolveWorkspace(client, opts);
|
|
142
|
-
try {
|
|
143
|
-
const stream = await client.getAgentExecutionStream(workspaceId, sessionId);
|
|
144
|
-
if (useJson) {
|
|
145
|
-
jsonOut({ stream });
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
process.stdout.write(stream);
|
|
149
|
-
}
|
|
150
|
-
catch (err) {
|
|
151
|
-
console.error('Failed to get agent execution stream:', err instanceof Error ? err.message : err);
|
|
152
|
-
process.exit(1);
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
export const agentsCommand = new Command('agents')
|
|
156
|
-
.description('Manage workspace agents and execution history')
|
|
157
|
-
.addCommand(listCommand)
|
|
158
|
-
.addCommand(statusCommand)
|
|
159
|
-
.addCommand(executionsCommand)
|
|
160
|
-
.addCommand(executionCommand);
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { requireAuth } from '../auth/store.js';
|
|
3
|
-
import { ApiClient } from '../api/client.js';
|
|
4
|
-
import { resolveWorkspace, resolveApp } from '../workspace/resolve.js';
|
|
5
|
-
import { shouldOutputJson, jsonOut } from '../utils/output.js';
|
|
6
|
-
import { promptInput } from '../utils/prompt.js';
|
|
7
|
-
const listCommand = new Command('list')
|
|
8
|
-
.description('List API keys for the workspace')
|
|
9
|
-
.option('--workspace <id>', 'Workspace ID')
|
|
10
|
-
.action(async (opts, command) => {
|
|
11
|
-
const useJson = shouldOutputJson(command.optsWithGlobals().json);
|
|
12
|
-
const credentials = requireAuth();
|
|
13
|
-
const client = new ApiClient(credentials);
|
|
14
|
-
const { workspaceId, workspaceName } = await resolveWorkspace(client, opts);
|
|
15
|
-
try {
|
|
16
|
-
const apiKeys = await client.listApiKeys(workspaceId);
|
|
17
|
-
if (useJson) {
|
|
18
|
-
jsonOut({ apiKeys });
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
if (apiKeys.length === 0) {
|
|
22
|
-
console.log('No API keys found in this workspace.');
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
console.log(`\nWorkspace: ${workspaceName || workspaceId}\n`);
|
|
26
|
-
console.log(` ${'Name'.padEnd(24)} ${'Key Prefix'.padEnd(16)} ${'App'.padEnd(20)} ${'Active'.padEnd(8)} ${'Requests'.padEnd(10)} ${'Last Used'.padEnd(22)} Created`);
|
|
27
|
-
console.log(' ' + '-'.repeat(112));
|
|
28
|
-
for (const k of apiKeys) {
|
|
29
|
-
const prefix = `${k.keyPrefix}...`;
|
|
30
|
-
const appLabel = k.appId ? k.appId : 'all';
|
|
31
|
-
const active = k.isActive ? 'yes' : 'no';
|
|
32
|
-
const requests = k.requestCount !== undefined ? String(k.requestCount) : '-';
|
|
33
|
-
const lastUsed = k.lastUsedAt ? new Date(k.lastUsedAt).toLocaleString() : '-';
|
|
34
|
-
const created = new Date(k.createdAt).toLocaleString();
|
|
35
|
-
console.log(` ${k.name.padEnd(24)} ${prefix.padEnd(16)} ${appLabel.padEnd(20)} ${active.padEnd(8)} ${requests.padEnd(10)} ${lastUsed.padEnd(22)} ${created}`);
|
|
36
|
-
}
|
|
37
|
-
console.log('');
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
console.error('Failed to list API keys:', err instanceof Error ? err.message : err);
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
const createCommand = new Command('create')
|
|
45
|
-
.description('Create a new API key')
|
|
46
|
-
.option('--workspace <id>', 'Workspace ID')
|
|
47
|
-
.option('--name <name>', 'API key name')
|
|
48
|
-
.option('--app <id>', 'Restrict key to a specific app (name or ID)')
|
|
49
|
-
.option('--scopes <scopes>', 'Comma-separated list of scopes')
|
|
50
|
-
.action(async (opts, command) => {
|
|
51
|
-
const useJson = shouldOutputJson(command.optsWithGlobals().json);
|
|
52
|
-
const credentials = requireAuth();
|
|
53
|
-
const client = new ApiClient(credentials);
|
|
54
|
-
const { workspaceId } = await resolveWorkspace(client, opts);
|
|
55
|
-
let name = opts.name ?? '';
|
|
56
|
-
if (!name) {
|
|
57
|
-
if (process.stdout.isTTY) {
|
|
58
|
-
name = await promptInput('API key name:');
|
|
59
|
-
if (!name) {
|
|
60
|
-
console.error('API key name is required.');
|
|
61
|
-
process.exit(1);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
console.error('API key name is required. Use --name flag.');
|
|
66
|
-
process.exit(1);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
let appId;
|
|
70
|
-
if (opts.app) {
|
|
71
|
-
const resolved = await resolveApp(client, workspaceId, { app: opts.app });
|
|
72
|
-
appId = resolved.appId;
|
|
73
|
-
}
|
|
74
|
-
const scopes = opts.scopes
|
|
75
|
-
? opts.scopes.split(',').map((s) => s.trim()).filter(Boolean)
|
|
76
|
-
: undefined;
|
|
77
|
-
try {
|
|
78
|
-
const result = await client.createApiKey(workspaceId, { name, appId, scopes });
|
|
79
|
-
if (useJson) {
|
|
80
|
-
jsonOut({ apiKey: result });
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
console.log(`\nAPI key created: ${result.name}`);
|
|
84
|
-
console.log(`\n Key: ${result.key}`);
|
|
85
|
-
console.log(`\n WARNING: Save this key now - it cannot be retrieved again.\n`);
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
console.error('Failed to create API key:', err instanceof Error ? err.message : err);
|
|
89
|
-
process.exit(1);
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
export const apiKeysCommand = new Command('api-keys')
|
|
93
|
-
.description('Manage workspace API keys')
|
|
94
|
-
.addCommand(listCommand)
|
|
95
|
-
.addCommand(createCommand);
|
package/dist/commands/apps.d.ts
DELETED
package/dist/commands/apps.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { requireAuth } from '../auth/store.js';
|
|
3
|
-
import { ApiClient } from '../api/client.js';
|
|
4
|
-
import { resolveWorkspace, resolveApp } from '../workspace/resolve.js';
|
|
5
|
-
import { shouldOutputJson, jsonOut } from '../utils/output.js';
|
|
6
|
-
import { fetchAppInfo, printAppInfo } from '../utils/app-info.js';
|
|
7
|
-
import { runCreateFlow } from './init.js';
|
|
8
|
-
const listCommand = new Command('list')
|
|
9
|
-
.description('List apps in workspace')
|
|
10
|
-
.option('--workspace <id>', 'Workspace ID')
|
|
11
|
-
.action(async (opts, command) => {
|
|
12
|
-
const useJson = shouldOutputJson(command.optsWithGlobals().json);
|
|
13
|
-
const credentials = requireAuth();
|
|
14
|
-
const client = new ApiClient(credentials);
|
|
15
|
-
const { workspaceId, workspaceName } = await resolveWorkspace(client, opts);
|
|
16
|
-
try {
|
|
17
|
-
const apps = await client.listApps(workspaceId);
|
|
18
|
-
if (useJson) {
|
|
19
|
-
jsonOut({ apps });
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
if (apps.length === 0) {
|
|
23
|
-
console.log('No apps in this workspace.');
|
|
24
|
-
console.log('Create one with: runwork create <name>');
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
console.log(`\nWorkspace: ${workspaceName || workspaceId}\n`);
|
|
28
|
-
console.log(` ${'Name'.padEnd(28)} ${'ID'.padEnd(38)} Status`);
|
|
29
|
-
console.log(' ' + '-'.repeat(80));
|
|
30
|
-
for (const app of apps) {
|
|
31
|
-
console.log(` ${(app.name || '').padEnd(28)} ${app.id}`);
|
|
32
|
-
}
|
|
33
|
-
console.log('');
|
|
34
|
-
}
|
|
35
|
-
catch (err) {
|
|
36
|
-
console.error('Failed to list apps:', err instanceof Error ? err.message : err);
|
|
37
|
-
process.exit(1);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
const createCommand = new Command('create')
|
|
41
|
-
.description('Create a new Runwork app')
|
|
42
|
-
.argument('[name]', 'App name')
|
|
43
|
-
.action(async (name) => {
|
|
44
|
-
await runCreateFlow(name);
|
|
45
|
-
});
|
|
46
|
-
const infoCommand = new Command('info')
|
|
47
|
-
.description('Show detailed app info, preview status, and registries')
|
|
48
|
-
.argument('[app]', 'App ID, name, or slug')
|
|
49
|
-
.option('--workspace <id>', 'Workspace ID')
|
|
50
|
-
.action(async (appArg, opts, command) => {
|
|
51
|
-
const useJson = shouldOutputJson(command.optsWithGlobals().json);
|
|
52
|
-
const credentials = requireAuth();
|
|
53
|
-
const client = new ApiClient(credentials);
|
|
54
|
-
const { workspaceId, workspaceName } = await resolveWorkspace(client, opts);
|
|
55
|
-
const { appId, appName } = await resolveApp(client, workspaceId, { app: appArg });
|
|
56
|
-
let appSlug = appName;
|
|
57
|
-
try {
|
|
58
|
-
const appData = await client.getApp(appId);
|
|
59
|
-
appSlug = appData.slug || appName;
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
// Fall back to appName as slug
|
|
63
|
-
}
|
|
64
|
-
const data = await fetchAppInfo(client, {
|
|
65
|
-
appId,
|
|
66
|
-
appName,
|
|
67
|
-
appSlug,
|
|
68
|
-
workspaceId,
|
|
69
|
-
workspaceName,
|
|
70
|
-
baseUrl: credentials.baseUrl || 'https://runwork.ai',
|
|
71
|
-
});
|
|
72
|
-
if (useJson) {
|
|
73
|
-
jsonOut(data);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
printAppInfo(data);
|
|
77
|
-
});
|
|
78
|
-
export const appsCommand = new Command('apps')
|
|
79
|
-
.description('Manage workspace apps')
|
|
80
|
-
.addCommand(listCommand)
|
|
81
|
-
.addCommand(createCommand)
|
|
82
|
-
.addCommand(infoCommand);
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { existsSync, readFileSync } from 'fs';
|
|
3
|
-
import { resolve, join } from 'path';
|
|
4
|
-
import { homedir } from 'os';
|
|
5
|
-
import { requireAuth } from '../auth/store.js';
|
|
6
|
-
import { ApiClient } from '../api/client.js';
|
|
7
|
-
import { getAdapterBySlug } from '../agents/detect.js';
|
|
8
|
-
import { RUNWORK_MCP_PREFIX, RUNWORK_WORKSPACE_MCP_NAME } from '../agents/types.js';
|
|
9
|
-
import { generateIntroSkill, buildAppSkillDescription } from '../agents/intro-skill.js';
|
|
10
|
-
function loadSetupState(filePath) {
|
|
11
|
-
if (!existsSync(filePath))
|
|
12
|
-
return null;
|
|
13
|
-
try {
|
|
14
|
-
return JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
export const buildPluginCommand = new Command('build-plugin')
|
|
21
|
-
.description('Build an installable plugin archive for an agent (e.g. Claude Desktop)')
|
|
22
|
-
.requiredOption('--agent <slug>', 'Target agent slug (e.g. claude-desktop)')
|
|
23
|
-
.option('--output <path>', 'Output zip path', 'runwork-plugin.zip')
|
|
24
|
-
.action(async (opts) => {
|
|
25
|
-
const adapter = getAdapterBySlug(opts.agent);
|
|
26
|
-
if (!adapter) {
|
|
27
|
-
console.error(`Unknown agent: ${opts.agent}`);
|
|
28
|
-
process.exit(1);
|
|
29
|
-
}
|
|
30
|
-
if (!adapter.buildPluginZip) {
|
|
31
|
-
console.error(`Agent "${adapter.name}" does not support plugin zip build.`);
|
|
32
|
-
process.exit(1);
|
|
33
|
-
}
|
|
34
|
-
const credentials = requireAuth();
|
|
35
|
-
// Find the first available setup state so we know which workspace to
|
|
36
|
-
// pull content from. We don't care about project vs user scope here —
|
|
37
|
-
// plugin archives are always user-scoped for the agent they're uploaded to.
|
|
38
|
-
const projectStatePath = join(process.cwd(), '.runwork', 'setup.json');
|
|
39
|
-
const userStatePath = join(homedir(), '.runwork', 'setup.json');
|
|
40
|
-
const state = loadSetupState(projectStatePath) ?? loadSetupState(userStatePath);
|
|
41
|
-
if (!state) {
|
|
42
|
-
console.error('No setup state found. Run `runwork setup` first.');
|
|
43
|
-
process.exit(1);
|
|
44
|
-
}
|
|
45
|
-
const client = new ApiClient(credentials);
|
|
46
|
-
// Refresh workspace name/slug if missing or stale (matches sync behavior).
|
|
47
|
-
if (!state.workspaceName || state.workspaceName === state.workspaceId || !state.workspaceSlug) {
|
|
48
|
-
try {
|
|
49
|
-
const workspaces = await client.listWorkspaces();
|
|
50
|
-
const ws = workspaces.find((w) => w.id === state.workspaceId);
|
|
51
|
-
if (ws?.name)
|
|
52
|
-
state.workspaceName = ws.name;
|
|
53
|
-
if (ws?.slug)
|
|
54
|
-
state.workspaceSlug = ws.slug;
|
|
55
|
-
}
|
|
56
|
-
catch {
|
|
57
|
-
/* best-effort */
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
console.log(`Building plugin for ${adapter.name} from workspace ${state.workspaceName || state.workspaceId}...`);
|
|
61
|
-
// Fetch the same inputs sync uses. The plugin archive must contain
|
|
62
|
-
// identical content to what sync would write into the plugin directory,
|
|
63
|
-
// including workspace team instructions + per-agent extra instructions.
|
|
64
|
-
const [allSkills, mcpServers, externalSkills, registries, connectedIntegrations, onboardingConfig,] = await Promise.all([
|
|
65
|
-
client.listWorkspaceSkills(state.workspaceId, true),
|
|
66
|
-
client.listMcpServers(state.workspaceId),
|
|
67
|
-
client.listExternalSkills(state.workspaceId),
|
|
68
|
-
client.getWorkspaceAll(state.workspaceId).catch(() => null),
|
|
69
|
-
client
|
|
70
|
-
.listConnectedIntegrations(state.workspaceId)
|
|
71
|
-
.then((list) => list.map((i) => i.canonicalId ?? i.integrationId))
|
|
72
|
-
.catch(() => []),
|
|
73
|
-
client.getOnboardingConfig(state.workspaceId).catch(() => null),
|
|
74
|
-
]);
|
|
75
|
-
const baseUrl = credentials.baseUrl || 'https://runwork.ai';
|
|
76
|
-
const mcpEntries = mcpServers
|
|
77
|
-
.filter((s) => s.enabled)
|
|
78
|
-
.map((s) => ({
|
|
79
|
-
name: `${RUNWORK_MCP_PREFIX}${s.name}`,
|
|
80
|
-
url: s.url,
|
|
81
|
-
transport: s.transport,
|
|
82
|
-
headers: { Authorization: `Bearer ${credentials.apiKey}` },
|
|
83
|
-
description: `Runwork MCP server: ${s.name}. Provides tools for interacting with this workspace resource.`,
|
|
84
|
-
}));
|
|
85
|
-
mcpEntries.push({
|
|
86
|
-
name: RUNWORK_WORKSPACE_MCP_NAME,
|
|
87
|
-
url: `${baseUrl}/api/workspaces/${state.workspaceId}/mcp`,
|
|
88
|
-
transport: 'streamable-http',
|
|
89
|
-
headers: { Authorization: `Bearer ${credentials.apiKey}` },
|
|
90
|
-
description: "Runwork workspace tools: query entities, trigger workflows, manage integrations, run agents, and access shared data across your team's apps.",
|
|
91
|
-
});
|
|
92
|
-
const remoteSkills = [];
|
|
93
|
-
for (const s of externalSkills) {
|
|
94
|
-
remoteSkills.push({ name: s.name, content: s.content, source: 'external' });
|
|
95
|
-
}
|
|
96
|
-
for (const s of allSkills) {
|
|
97
|
-
if (s.type === 'app' && s.appId && s.content?.trim()) {
|
|
98
|
-
remoteSkills.push({ name: s.name, content: s.content, source: 'app', appId: s.appId });
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
const introSkill = generateIntroSkill({
|
|
102
|
-
workspaceName: state.workspaceName || state.workspaceId,
|
|
103
|
-
workspaceId: state.workspaceId,
|
|
104
|
-
workspaceSlug: state.workspaceSlug,
|
|
105
|
-
registries,
|
|
106
|
-
connectedIntegrations,
|
|
107
|
-
mcpServerCount: mcpEntries.length,
|
|
108
|
-
skillCount: remoteSkills.length,
|
|
109
|
-
mcpServerNames: mcpEntries.map((e) => e.name.replace(RUNWORK_MCP_PREFIX, '')),
|
|
110
|
-
skillNames: remoteSkills.map((s) => s.name),
|
|
111
|
-
});
|
|
112
|
-
// When the adapter exposes skills through MCP already, skip duplicating
|
|
113
|
-
// app skills into the plugin — same rule sync applies per-adapter.
|
|
114
|
-
const skipAppSkills = adapter.mcpProvidesSkills && mcpEntries.length > 0;
|
|
115
|
-
const skillFiles = [
|
|
116
|
-
introSkill,
|
|
117
|
-
...remoteSkills
|
|
118
|
-
.filter((s) => !(skipAppSkills && s.source === 'app'))
|
|
119
|
-
.map((s) => ({
|
|
120
|
-
name: s.name,
|
|
121
|
-
filename: s.name.toLowerCase().replace(/[^a-z0-9]+/g, '-'),
|
|
122
|
-
content: s.content,
|
|
123
|
-
description: s.source === 'app'
|
|
124
|
-
? buildAppSkillDescription(s.name, registries) || `${s.name} - Runwork workspace application`
|
|
125
|
-
: `${s.name} - Runwork workspace skill`,
|
|
126
|
-
})),
|
|
127
|
-
];
|
|
128
|
-
// Merge team instructions + per-agent extra instructions (same rule as sync).
|
|
129
|
-
const teamInstructions = onboardingConfig?.config?.teamInstructions;
|
|
130
|
-
const agentExtra = onboardingConfig?.config?.agentConfigs?.[adapter.slug]?.extraInstructions;
|
|
131
|
-
const mergedInstructions = [teamInstructions, agentExtra].filter(Boolean).join('\n\n') || null;
|
|
132
|
-
const outputPath = resolve(opts.output);
|
|
133
|
-
await adapter.buildPluginZip(skillFiles, mcpEntries, mergedInstructions, outputPath);
|
|
134
|
-
console.log(`Wrote ${outputPath}`);
|
|
135
|
-
});
|
package/dist/commands/clone.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { ApiClient } from '../api/client.js';
|
|
3
|
-
import type { Credentials, AppInfo } from '../types.js';
|
|
4
|
-
import { type SyncErrorReason } from '../git/classify-sync-error.js';
|
|
5
|
-
/**
|
|
6
|
-
* Outcome of overlaying the app's git-tracked source on top of the template.
|
|
7
|
-
* `pulled: false` with `reason: 'empty-remote'` is the expected, benign state
|
|
8
|
-
* for a brand-new app (nothing pushed yet). Any other `reason` is a real
|
|
9
|
-
* failure that left a template-only scaffold -- the caller must NOT report
|
|
10
|
-
* success, since editing it would edit the wrong code (friction log #1).
|
|
11
|
-
*/
|
|
12
|
-
export interface CloneSource {
|
|
13
|
-
pulled: boolean;
|
|
14
|
-
reason?: 'empty-remote' | SyncErrorReason;
|
|
15
|
-
detail?: string;
|
|
16
|
-
}
|
|
17
|
-
export interface CloneResult {
|
|
18
|
-
appId: string;
|
|
19
|
-
appName: string;
|
|
20
|
-
slug: string;
|
|
21
|
-
directory: string;
|
|
22
|
-
workspaceId: string;
|
|
23
|
-
workspaceName: string;
|
|
24
|
-
source: CloneSource;
|
|
25
|
-
}
|
|
26
|
-
export declare function execClone(client: ApiClient, app: AppInfo, directory?: string, creds?: Credentials | null): Promise<CloneResult>;
|
|
27
|
-
/**
|
|
28
|
-
* Turn a failed-pull error into a CloneSource: an empty remote (benign,
|
|
29
|
-
* brand-new app) vs a classified real failure (auth/network/no-remote) that
|
|
30
|
-
* leaves a template-only scaffold.
|
|
31
|
-
*/
|
|
32
|
-
export declare function pullOutcomeFromError(err: unknown): CloneSource;
|
|
33
|
-
/**
|
|
34
|
-
* A clone is a real failure -- a template-only scaffold rather than the app's
|
|
35
|
-
* code -- when the source pull didn't happen for any reason other than an
|
|
36
|
-
* empty remote. Callers must not report success in that case.
|
|
37
|
-
*/
|
|
38
|
-
export declare function isCloneSourceFailure(source: CloneSource): boolean;
|
|
39
|
-
/**
|
|
40
|
-
* Reconcile positional args with --app. When --app is provided, the first
|
|
41
|
-
* positional argument is intended as the *directory* -- not another appId
|
|
42
|
-
* -- because the app is already disambiguated by the option. Without this,
|
|
43
|
-
* `runwork clone --app foo C:\path\to\dir` ends up parsing `C:\path\to\dir`
|
|
44
|
-
* as `appId` (which is then ignored because `--app` wins), leaving
|
|
45
|
-
* `directory` undefined and silently cloning into the slug under cwd.
|
|
46
|
-
*/
|
|
47
|
-
export declare function normalizeCloneArgs(appId: string | undefined, directory: string | undefined, options: {
|
|
48
|
-
app?: string;
|
|
49
|
-
} | undefined): {
|
|
50
|
-
appId: string | undefined;
|
|
51
|
-
directory: string | undefined;
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* Help epilogue shown under `runwork clone --help`. Agents tend to read help
|
|
55
|
-
* before running, so we surface the restricted-mount caveat (friction log #9)
|
|
56
|
-
* here. Exported so it can be asserted on directly (commander's help-text
|
|
57
|
-
* hooks aren't reflected by `helpInformation()`).
|
|
58
|
-
*/
|
|
59
|
-
export declare const RESTRICTED_FS_HELP = "\nNote for AI agents: clone into a normal working directory. Some sandboxed\n\"outputs\" mounts (e.g. certain agent environments) disallow the unlink\noperations git uses for pack files, which can corrupt the repo with errors\nlike \"unable to unlink '.git/objects/pack/...': Operation not permitted\". If\nyou hit that, clone into your home directory or another standard path instead.";
|
|
60
|
-
export declare const cloneCommand: Command;
|