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/agents/types.d.ts
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
export interface McpServerEntry {
|
|
2
|
-
name: string;
|
|
3
|
-
url: string;
|
|
4
|
-
transport: 'sse' | 'streamable-http';
|
|
5
|
-
headers?: Record<string, string>;
|
|
6
|
-
description?: string;
|
|
7
|
-
}
|
|
8
|
-
export interface SkillFile {
|
|
9
|
-
name: string;
|
|
10
|
-
filename: string;
|
|
11
|
-
content: string;
|
|
12
|
-
description: string;
|
|
13
|
-
appId?: string;
|
|
14
|
-
}
|
|
15
|
-
export interface AgentAdapter {
|
|
16
|
-
/** Display name, e.g. "Claude Code" */
|
|
17
|
-
name: string;
|
|
18
|
-
/** CLI identifier, e.g. "claude-code" */
|
|
19
|
-
slug: string;
|
|
20
|
-
/** Check if this agent is installed */
|
|
21
|
-
detect(): Promise<boolean>;
|
|
22
|
-
/** Write MCP server configs (merge with existing, only touch runwork-* entries) */
|
|
23
|
-
writeMcpServers(servers: McpServerEntry[], scope: 'project' | 'user'): Promise<void>;
|
|
24
|
-
/** Write skill files to agent's skills directory */
|
|
25
|
-
writeSkills(skills: SkillFile[], scope: 'project' | 'user'): Promise<void>;
|
|
26
|
-
/** Write a minimal Runwork hint to the agent's instruction file (CLAUDE.md, AGENTS.md, etc.) */
|
|
27
|
-
writeInstructionHint(hint: string, scope: 'project' | 'user'): Promise<void>;
|
|
28
|
-
/** Whether this agent supports skills/commands */
|
|
29
|
-
supportsSkills(): boolean;
|
|
30
|
-
/** Whether this agent supports MCP config at the given scope */
|
|
31
|
-
supportsMcpScope(scope: 'project' | 'user'): boolean;
|
|
32
|
-
/** True when this agent's skill files overlap with MCP skill_* tools (skip writing app skills when MCP is configured) */
|
|
33
|
-
mcpProvidesSkills?: boolean;
|
|
34
|
-
/** Write team-managed instructions (separate marker block from auto-generated hint) */
|
|
35
|
-
writeTeamInstructions?(instructions: string, scope: 'project' | 'user'): Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* Install the runwork SessionStart hook (or any equivalent platform-managed
|
|
38
|
-
* hook) into the agent's hook directory. Called once per (adapter, scope) by
|
|
39
|
-
* the main sync loop, AFTER writeSkills has fully populated the plugin tree.
|
|
40
|
-
* Separate from writeSkills because writeSkills is also invoked per-skill by
|
|
41
|
-
* the diff executor during push/pull, and hook installation must not be
|
|
42
|
-
* repeated for every skill.
|
|
43
|
-
*
|
|
44
|
-
* Optional - only adapters with a hook system implement it (Claude Code,
|
|
45
|
-
* eventually Claude Desktop Cowork plugin tree).
|
|
46
|
-
*/
|
|
47
|
-
writeBuiltInHooks?(scope: 'project' | 'user'): Promise<void>;
|
|
48
|
-
/**
|
|
49
|
-
* Write agent-specific config overrides from workspace admin (model, permissions).
|
|
50
|
-
*
|
|
51
|
-
* @param config - The full resolved config to apply this sync (already merged
|
|
52
|
-
* with baked defaults and network/minimum settings by the sync loop).
|
|
53
|
-
* @param scope - Project- or user-scope configuration target.
|
|
54
|
-
* @param baseline - Optional. The set of managed entries the previous sync
|
|
55
|
-
* wrote (lastInjected from setup.json). Adapters that lack on-disk markers
|
|
56
|
-
* to distinguish runwork-managed entries from user-added entries (e.g.
|
|
57
|
-
* Cursor's yoloCommandAllowlist) use this to subtract our previous
|
|
58
|
-
* contribution before re-injecting, preserving user edits. Marker-based
|
|
59
|
-
* adapters (Claude Code) can ignore this parameter.
|
|
60
|
-
*/
|
|
61
|
-
writeAgentConfig?(config: AgentConfigOverride, scope: 'project' | 'user', baseline?: {
|
|
62
|
-
allow?: string[];
|
|
63
|
-
deny?: string[];
|
|
64
|
-
}): Promise<void>;
|
|
65
|
-
/**
|
|
66
|
-
* Read the currently-injected managed-block entries for this scope.
|
|
67
|
-
* Used by sync to detect when the user has removed an entry that we
|
|
68
|
-
* previously injected (so we can record it as a sticky opt-out).
|
|
69
|
-
*
|
|
70
|
-
* For marker-based adapters (Claude Code): returns items after the marker.
|
|
71
|
-
* For markerless adapters (Cursor): may return undefined; the sync loop
|
|
72
|
-
* falls back to the `baseline` mechanism (state.lastInjected) for those.
|
|
73
|
-
* Optional — adapters without a permission file at all (Cline) skip this.
|
|
74
|
-
*/
|
|
75
|
-
readManagedBlock?(scope: 'project' | 'user'): Promise<{
|
|
76
|
-
allow?: string[];
|
|
77
|
-
deny?: string[];
|
|
78
|
-
} | undefined>;
|
|
79
|
-
/** Remove all Runwork-managed config, skills, MCP entries, and instruction hints.
|
|
80
|
-
* The manifest lists exactly which resources were synced so only those are removed. */
|
|
81
|
-
cleanup?(scope: 'project' | 'user', manifest?: CleanupManifest): Promise<void>;
|
|
82
|
-
/** Read passive usage stats from local agent files (best-effort, no hooks) */
|
|
83
|
-
readUsageStats?(lastSyncAt: string | null): Promise<AgentUsageStats | null>;
|
|
84
|
-
/** Read which skills were used locally since last sync (best-effort) */
|
|
85
|
-
readSkillUsage?(lastSyncAt: string | null): Promise<SkillUsageEntry[] | null>;
|
|
86
|
-
/** Get the agent's version string (best-effort) */
|
|
87
|
-
readVersion?(): Promise<string | null>;
|
|
88
|
-
/**
|
|
89
|
-
* Build an installable plugin archive for this agent. Implementations
|
|
90
|
-
* generate their agent-specific plugin layout into a temporary directory
|
|
91
|
-
* and zip it to `outputPath`. `teamInstructions` is the merged string of
|
|
92
|
-
* workspace team instructions + per-agent extra instructions (or null if
|
|
93
|
-
* none are configured) — adapters should embed them in the archive so
|
|
94
|
-
* uploaded zips match what a normal sync would write. Only adapters whose
|
|
95
|
-
* target agent has a plugin upload flow implement this (e.g. Claude Desktop).
|
|
96
|
-
*/
|
|
97
|
-
buildPluginZip?(skills: SkillFile[], mcpServers: McpServerEntry[], teamInstructions: string | null, outputPath: string): Promise<void>;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Exact list of resources that Runwork synced to this agent.
|
|
101
|
-
* Cleanup must only remove these specific items, nothing else.
|
|
102
|
-
*/
|
|
103
|
-
export interface CleanupManifest {
|
|
104
|
-
/** Skill directory/file names that were written (kebab-case slugs) */
|
|
105
|
-
skillFilenames: string[];
|
|
106
|
-
/** MCP server entry names that were registered */
|
|
107
|
-
mcpServerNames: string[];
|
|
108
|
-
}
|
|
109
|
-
export interface AgentConfigOverride {
|
|
110
|
-
extraInstructions?: string;
|
|
111
|
-
modelPreference?: string;
|
|
112
|
-
permissionRules?: {
|
|
113
|
-
allow?: string[];
|
|
114
|
-
deny?: string[];
|
|
115
|
-
defaultMode?: string;
|
|
116
|
-
};
|
|
117
|
-
/** Domains to allowlist in the agent's sandbox/network config (e.g. for Cursor CLI sandbox) */
|
|
118
|
-
networkAllowlist?: string[];
|
|
119
|
-
/**
|
|
120
|
-
* Minimum permission levels required for Runwork tools to function.
|
|
121
|
-
* Adapters should only UPGRADE restrictive settings, never downgrade
|
|
122
|
-
* more permissive ones. Keys are agent-specific config field names,
|
|
123
|
-
* values are ordered arrays from most restrictive to least, plus
|
|
124
|
-
* the minimum required value.
|
|
125
|
-
*/
|
|
126
|
-
minimumPermissions?: Array<{
|
|
127
|
-
field: string;
|
|
128
|
-
order: string[];
|
|
129
|
-
minimum: string;
|
|
130
|
-
}>;
|
|
131
|
-
}
|
|
132
|
-
export interface AgentUsageStats {
|
|
133
|
-
hasNewActivity: boolean;
|
|
134
|
-
sessionCount: number;
|
|
135
|
-
messageCount: number;
|
|
136
|
-
toolCallCount: number;
|
|
137
|
-
tokensUsed: number;
|
|
138
|
-
aiLinesAdded: number;
|
|
139
|
-
aiLinesRemoved: number;
|
|
140
|
-
lastActiveAt: string | null;
|
|
141
|
-
modelsUsed?: string[];
|
|
142
|
-
mcpToolCount?: number;
|
|
143
|
-
extra?: Record<string, unknown>;
|
|
144
|
-
}
|
|
145
|
-
export interface SkillUsageEntry {
|
|
146
|
-
skillName: string;
|
|
147
|
-
count: number;
|
|
148
|
-
lastUsedAt: string;
|
|
149
|
-
}
|
|
150
|
-
/** Prefix for MCP server entries managed by runwork */
|
|
151
|
-
export declare const RUNWORK_MCP_PREFIX = "Runwork: ";
|
|
152
|
-
/** Legacy prefix used before human-readable names were introduced */
|
|
153
|
-
export declare const RUNWORK_MCP_PREFIX_LEGACY = "runwork-";
|
|
154
|
-
/**
|
|
155
|
-
* Top-level name for the Runwork workspace tools MCP server.
|
|
156
|
-
* Kept short (no prefix) so agents surface tools as `mcp__Runwork__*`
|
|
157
|
-
* instead of the visually noisy `mcp__Runwork_Workspace_Tools__*`.
|
|
158
|
-
*/
|
|
159
|
-
export declare const RUNWORK_WORKSPACE_MCP_NAME = "Runwork";
|
|
160
|
-
/**
|
|
161
|
-
* Append an auth token to a URL as a query parameter.
|
|
162
|
-
* The server extracts this via its standard token extraction (query param fallback).
|
|
163
|
-
*/
|
|
164
|
-
export declare function appendTokenToUrl(url: string, token: string): string;
|
|
165
|
-
/**
|
|
166
|
-
* Convert a skill display name to a kebab-case slug safe for slash commands.
|
|
167
|
-
* Spaces in skill names break slash command parsing (e.g. "/Write Cold Email"
|
|
168
|
-
* gets parsed as skill "Write" with args "Cold Email").
|
|
169
|
-
*/
|
|
170
|
-
export declare function toSlug(name: string): string;
|
|
171
|
-
export declare function buildSkillMd(skill: SkillFile): string;
|
package/dist/agents/types.js
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/** Prefix for MCP server entries managed by runwork */
|
|
2
|
-
export const RUNWORK_MCP_PREFIX = 'Runwork: ';
|
|
3
|
-
/** Legacy prefix used before human-readable names were introduced */
|
|
4
|
-
export const RUNWORK_MCP_PREFIX_LEGACY = 'runwork-';
|
|
5
|
-
/**
|
|
6
|
-
* Top-level name for the Runwork workspace tools MCP server.
|
|
7
|
-
* Kept short (no prefix) so agents surface tools as `mcp__Runwork__*`
|
|
8
|
-
* instead of the visually noisy `mcp__Runwork_Workspace_Tools__*`.
|
|
9
|
-
*/
|
|
10
|
-
export const RUNWORK_WORKSPACE_MCP_NAME = 'Runwork';
|
|
11
|
-
/**
|
|
12
|
-
* Append an auth token to a URL as a query parameter.
|
|
13
|
-
* The server extracts this via its standard token extraction (query param fallback).
|
|
14
|
-
*/
|
|
15
|
-
export function appendTokenToUrl(url, token) {
|
|
16
|
-
const parsed = new URL(url);
|
|
17
|
-
parsed.searchParams.set('token', token);
|
|
18
|
-
return parsed.toString();
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Convert a skill display name to a kebab-case slug safe for slash commands.
|
|
22
|
-
* Spaces in skill names break slash command parsing (e.g. "/Write Cold Email"
|
|
23
|
-
* gets parsed as skill "Write" with args "Cold Email").
|
|
24
|
-
*/
|
|
25
|
-
export function toSlug(name) {
|
|
26
|
-
return name.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Build a SKILL.md file with YAML frontmatter.
|
|
30
|
-
* Ensures the content always has proper frontmatter for agent discovery.
|
|
31
|
-
* The name field is always kebab-cased to work as a slash command.
|
|
32
|
-
*/
|
|
33
|
-
/**
|
|
34
|
-
* Quote a YAML value if it contains characters that would break parsing
|
|
35
|
-
* (colons, brackets, quotes, leading/trailing spaces, etc.)
|
|
36
|
-
*/
|
|
37
|
-
function yamlQuote(value) {
|
|
38
|
-
if (/[:#\[\]{}|>&*!,?'"]/.test(value) || value !== value.trim()) {
|
|
39
|
-
// Use double quotes, escaping internal double quotes and backslashes
|
|
40
|
-
const escaped = value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
41
|
-
return `"${escaped}"`;
|
|
42
|
-
}
|
|
43
|
-
return value;
|
|
44
|
-
}
|
|
45
|
-
export function buildSkillMd(skill) {
|
|
46
|
-
const description = skill.description || `${skill.name} skill`;
|
|
47
|
-
const slug = toSlug(skill.name);
|
|
48
|
-
const safeDescription = yamlQuote(description);
|
|
49
|
-
if (skill.content.trimStart().startsWith('---\n')) {
|
|
50
|
-
let content = skill.content;
|
|
51
|
-
// Normalize name to kebab-case slug (spaces break slash command parsing)
|
|
52
|
-
content = content.replace(/^(name:\s*)["']?[^"'\n]+["']?\s*$/m, `$1${slug}`);
|
|
53
|
-
// Normalize description: ensure space after colon, strip nested quotes, and quote if needed
|
|
54
|
-
content = content.replace(/^description:\s*(.+)$/m, (_match, rawValue) => {
|
|
55
|
-
// Strip wrapping quotes and escaped quotes from the raw value
|
|
56
|
-
let cleaned = rawValue.trim();
|
|
57
|
-
// Remove outer quotes if present (single or double)
|
|
58
|
-
if ((cleaned.startsWith('"') && cleaned.endsWith('"')) || (cleaned.startsWith("'") && cleaned.endsWith("'"))) {
|
|
59
|
-
cleaned = cleaned.slice(1, -1);
|
|
60
|
-
}
|
|
61
|
-
// Remove escaped quotes left from double-wrapping (e.g. \"value\")
|
|
62
|
-
cleaned = cleaned.replace(/\\"/g, '"');
|
|
63
|
-
// Strip any remaining wrapping quotes after unescaping
|
|
64
|
-
if ((cleaned.startsWith('"') && cleaned.endsWith('"')) || (cleaned.startsWith("'") && cleaned.endsWith("'"))) {
|
|
65
|
-
cleaned = cleaned.slice(1, -1);
|
|
66
|
-
}
|
|
67
|
-
return `description: ${yamlQuote(cleaned)}`;
|
|
68
|
-
});
|
|
69
|
-
const hasDescription = /^description:\s*.+$/m.test(content);
|
|
70
|
-
if (hasDescription)
|
|
71
|
-
return content;
|
|
72
|
-
return content.replace(/^---\n/, `---\nname: ${slug}\ndescription: ${safeDescription}\n`);
|
|
73
|
-
}
|
|
74
|
-
return `---\nname: ${slug}\ndescription: ${safeDescription}\n---\n\n${skill.content}`;
|
|
75
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Append or replace a Runwork instruction hint in an agent's instruction file.
|
|
3
|
-
* If the file contains existing Runwork markers, replaces that section.
|
|
4
|
-
* Otherwise appends the hint at the end.
|
|
5
|
-
*/
|
|
6
|
-
export declare function writeHintToFile(filePath: string, hint: string): void;
|
|
7
|
-
/**
|
|
8
|
-
* Append or replace team instructions in an agent's instruction file.
|
|
9
|
-
* Uses separate markers from the auto-generated hint so both coexist.
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* Remove the Runwork instruction hint from an agent's instruction file.
|
|
13
|
-
* Returns true if something was removed.
|
|
14
|
-
*/
|
|
15
|
-
export declare function removeHintFromFile(filePath: string): boolean;
|
|
16
|
-
/**
|
|
17
|
-
* Remove Runwork team instructions from an agent's instruction file.
|
|
18
|
-
* Returns true if something was removed.
|
|
19
|
-
*/
|
|
20
|
-
export declare function removeTeamInstructionsFromFile(filePath: string): boolean;
|
|
21
|
-
export declare function writeTeamInstructionsToFile(filePath: string, instructions: string): void;
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
2
|
-
import { dirname } from 'path';
|
|
3
|
-
const START_MARKER = '<!-- runwork:start -->';
|
|
4
|
-
const END_MARKER = '<!-- runwork:end -->';
|
|
5
|
-
const TEAM_START_MARKER = '<!-- runwork-team:start -->';
|
|
6
|
-
const TEAM_END_MARKER = '<!-- runwork-team:end -->';
|
|
7
|
-
/**
|
|
8
|
-
* Append or replace a Runwork instruction hint in an agent's instruction file.
|
|
9
|
-
* If the file contains existing Runwork markers, replaces that section.
|
|
10
|
-
* Otherwise appends the hint at the end.
|
|
11
|
-
*/
|
|
12
|
-
export function writeHintToFile(filePath, hint) {
|
|
13
|
-
mkdirSync(dirname(filePath), { recursive: true });
|
|
14
|
-
let content = '';
|
|
15
|
-
if (existsSync(filePath)) {
|
|
16
|
-
content = readFileSync(filePath, 'utf-8');
|
|
17
|
-
}
|
|
18
|
-
const startIdx = content.indexOf(START_MARKER);
|
|
19
|
-
const endIdx = content.indexOf(END_MARKER);
|
|
20
|
-
if (startIdx >= 0 && endIdx >= 0) {
|
|
21
|
-
// Replace existing section
|
|
22
|
-
content = content.substring(0, startIdx) + hint + content.substring(endIdx + END_MARKER.length);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
// Append with spacing
|
|
26
|
-
if (content.length > 0 && !content.endsWith('\n')) {
|
|
27
|
-
content += '\n';
|
|
28
|
-
}
|
|
29
|
-
if (content.length > 0) {
|
|
30
|
-
content += '\n';
|
|
31
|
-
}
|
|
32
|
-
content += hint + '\n';
|
|
33
|
-
}
|
|
34
|
-
writeFileSync(filePath, content);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Append or replace team instructions in an agent's instruction file.
|
|
38
|
-
* Uses separate markers from the auto-generated hint so both coexist.
|
|
39
|
-
*/
|
|
40
|
-
/**
|
|
41
|
-
* Remove the Runwork instruction hint from an agent's instruction file.
|
|
42
|
-
* Returns true if something was removed.
|
|
43
|
-
*/
|
|
44
|
-
export function removeHintFromFile(filePath) {
|
|
45
|
-
if (!existsSync(filePath))
|
|
46
|
-
return false;
|
|
47
|
-
let content = readFileSync(filePath, 'utf-8');
|
|
48
|
-
const startIdx = content.indexOf(START_MARKER);
|
|
49
|
-
const endIdx = content.indexOf(END_MARKER);
|
|
50
|
-
if (startIdx < 0 || endIdx < 0)
|
|
51
|
-
return false;
|
|
52
|
-
content = content.substring(0, startIdx) + content.substring(endIdx + END_MARKER.length);
|
|
53
|
-
// Clean up extra blank lines left behind
|
|
54
|
-
content = content.replace(/\n{3,}/g, '\n\n').trimEnd() + '\n';
|
|
55
|
-
if (content.trim() === '') {
|
|
56
|
-
// File is now empty, could remove it but safer to leave a minimal file
|
|
57
|
-
writeFileSync(filePath, '');
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
writeFileSync(filePath, content);
|
|
61
|
-
}
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Remove Runwork team instructions from an agent's instruction file.
|
|
66
|
-
* Returns true if something was removed.
|
|
67
|
-
*/
|
|
68
|
-
export function removeTeamInstructionsFromFile(filePath) {
|
|
69
|
-
if (!existsSync(filePath))
|
|
70
|
-
return false;
|
|
71
|
-
let content = readFileSync(filePath, 'utf-8');
|
|
72
|
-
const startIdx = content.indexOf(TEAM_START_MARKER);
|
|
73
|
-
const endIdx = content.indexOf(TEAM_END_MARKER);
|
|
74
|
-
if (startIdx < 0 || endIdx < 0)
|
|
75
|
-
return false;
|
|
76
|
-
content = content.substring(0, startIdx) + content.substring(endIdx + TEAM_END_MARKER.length);
|
|
77
|
-
content = content.replace(/\n{3,}/g, '\n\n').trimEnd() + '\n';
|
|
78
|
-
if (content.trim() === '') {
|
|
79
|
-
writeFileSync(filePath, '');
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
writeFileSync(filePath, content);
|
|
83
|
-
}
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
export function writeTeamInstructionsToFile(filePath, instructions) {
|
|
87
|
-
mkdirSync(dirname(filePath), { recursive: true });
|
|
88
|
-
let content = '';
|
|
89
|
-
if (existsSync(filePath)) {
|
|
90
|
-
content = readFileSync(filePath, 'utf-8');
|
|
91
|
-
}
|
|
92
|
-
const block = `${TEAM_START_MARKER}\n${instructions}\n${TEAM_END_MARKER}`;
|
|
93
|
-
const startIdx = content.indexOf(TEAM_START_MARKER);
|
|
94
|
-
const endIdx = content.indexOf(TEAM_END_MARKER);
|
|
95
|
-
if (startIdx >= 0 && endIdx >= 0) {
|
|
96
|
-
content = content.substring(0, startIdx) + block + content.substring(endIdx + TEAM_END_MARKER.length);
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
if (content.length > 0 && !content.endsWith('\n')) {
|
|
100
|
-
content += '\n';
|
|
101
|
-
}
|
|
102
|
-
if (content.length > 0) {
|
|
103
|
-
content += '\n';
|
|
104
|
-
}
|
|
105
|
-
content += block + '\n';
|
|
106
|
-
}
|
|
107
|
-
writeFileSync(filePath, content);
|
|
108
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Read a JSON config file. Returns empty object if file doesn't exist.
|
|
3
|
-
*/
|
|
4
|
-
export declare function readJsonConfig(filePath: string): Record<string, unknown>;
|
|
5
|
-
/**
|
|
6
|
-
* Write a JSON config file, creating parent directories as needed.
|
|
7
|
-
*/
|
|
8
|
-
export declare function writeJsonConfig(filePath: string, config: Record<string, unknown>): void;
|
|
9
|
-
/**
|
|
10
|
-
* Remove all Runwork-managed MCP server entries from a JSON config file.
|
|
11
|
-
* Returns true if any entries were removed.
|
|
12
|
-
*/
|
|
13
|
-
export declare function removeRunworkMcpServers(filePath: string, topKey: string): boolean;
|
|
14
|
-
/**
|
|
15
|
-
* Merge MCP server entries into a JSON config file.
|
|
16
|
-
* Removes all existing runwork-managed entries, adds new ones.
|
|
17
|
-
* Preserves user's non-runwork entries.
|
|
18
|
-
*/
|
|
19
|
-
export declare function mergeJsonMcpServers(filePath: string, servers: Record<string, Record<string, unknown>>, topKey: string): void;
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
2
|
-
import { dirname } from 'path';
|
|
3
|
-
import { RUNWORK_MCP_PREFIX, RUNWORK_MCP_PREFIX_LEGACY, RUNWORK_WORKSPACE_MCP_NAME, } from '../types.js';
|
|
4
|
-
function isRunworkManagedKey(key) {
|
|
5
|
-
return (key === RUNWORK_WORKSPACE_MCP_NAME ||
|
|
6
|
-
key.startsWith(RUNWORK_MCP_PREFIX) ||
|
|
7
|
-
key.startsWith(RUNWORK_MCP_PREFIX_LEGACY));
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Read a JSON config file. Returns empty object if file doesn't exist.
|
|
11
|
-
*/
|
|
12
|
-
export function readJsonConfig(filePath) {
|
|
13
|
-
if (!existsSync(filePath))
|
|
14
|
-
return {};
|
|
15
|
-
try {
|
|
16
|
-
return JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
return {};
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Write a JSON config file, creating parent directories as needed.
|
|
24
|
-
*/
|
|
25
|
-
export function writeJsonConfig(filePath, config) {
|
|
26
|
-
mkdirSync(dirname(filePath), { recursive: true });
|
|
27
|
-
writeFileSync(filePath, JSON.stringify(config, null, 2) + '\n');
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Remove all Runwork-managed MCP server entries from a JSON config file.
|
|
31
|
-
* Returns true if any entries were removed.
|
|
32
|
-
*/
|
|
33
|
-
export function removeRunworkMcpServers(filePath, topKey) {
|
|
34
|
-
if (!existsSync(filePath))
|
|
35
|
-
return false;
|
|
36
|
-
const config = readJsonConfig(filePath);
|
|
37
|
-
const existing = (config[topKey] || {});
|
|
38
|
-
let removed = false;
|
|
39
|
-
for (const key of Object.keys(existing)) {
|
|
40
|
-
if (isRunworkManagedKey(key)) {
|
|
41
|
-
delete existing[key];
|
|
42
|
-
removed = true;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
if (removed) {
|
|
46
|
-
config[topKey] = existing;
|
|
47
|
-
writeJsonConfig(filePath, config);
|
|
48
|
-
}
|
|
49
|
-
return removed;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Merge MCP server entries into a JSON config file.
|
|
53
|
-
* Removes all existing runwork-managed entries, adds new ones.
|
|
54
|
-
* Preserves user's non-runwork entries.
|
|
55
|
-
*/
|
|
56
|
-
export function mergeJsonMcpServers(filePath, servers, topKey) {
|
|
57
|
-
const config = readJsonConfig(filePath);
|
|
58
|
-
const existing = (config[topKey] || {});
|
|
59
|
-
// Remove all Runwork-managed entries (current, legacy, and the bare "Runwork" name)
|
|
60
|
-
for (const key of Object.keys(existing)) {
|
|
61
|
-
if (isRunworkManagedKey(key)) {
|
|
62
|
-
delete existing[key];
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
// Add new runwork entries
|
|
66
|
-
Object.assign(existing, servers);
|
|
67
|
-
config[topKey] = existing;
|
|
68
|
-
writeJsonConfig(filePath, config);
|
|
69
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Merge MCP servers into a Codex config.toml file.
|
|
3
|
-
* Removes existing [mcp_servers.runwork-*] sections, adds new ones.
|
|
4
|
-
*/
|
|
5
|
-
export declare function mergeTomlMcpServers(filePath: string, servers: Record<string, {
|
|
6
|
-
url: string;
|
|
7
|
-
bearerTokenEnvVar?: string;
|
|
8
|
-
}>): void;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
2
|
-
import { dirname } from 'path';
|
|
3
|
-
/**
|
|
4
|
-
* Merge MCP servers into a Codex config.toml file.
|
|
5
|
-
* Removes existing [mcp_servers.runwork-*] sections, adds new ones.
|
|
6
|
-
*/
|
|
7
|
-
export function mergeTomlMcpServers(filePath, servers) {
|
|
8
|
-
mkdirSync(dirname(filePath), { recursive: true });
|
|
9
|
-
let content = existsSync(filePath) ? readFileSync(filePath, 'utf-8') : '';
|
|
10
|
-
// Remove existing runwork-* mcp_servers sections
|
|
11
|
-
content = content.replace(/\[mcp_servers\.runwork-[^\]]*\]\n(?:[^\[]*\n?)*/g, '');
|
|
12
|
-
// Remove trailing blank lines
|
|
13
|
-
content = content.trimEnd();
|
|
14
|
-
// Append new sections
|
|
15
|
-
const sections = [];
|
|
16
|
-
for (const [name, config] of Object.entries(servers)) {
|
|
17
|
-
const lines = [`[mcp_servers.${name}]`, `url = "${config.url}"`];
|
|
18
|
-
if (config.bearerTokenEnvVar) {
|
|
19
|
-
lines.push(`bearer_token_env_var = "${config.bearerTokenEnvVar}"`);
|
|
20
|
-
}
|
|
21
|
-
sections.push(lines.join('\n'));
|
|
22
|
-
}
|
|
23
|
-
if (sections.length > 0) {
|
|
24
|
-
content += '\n\n' + sections.join('\n\n') + '\n';
|
|
25
|
-
}
|
|
26
|
-
writeFileSync(filePath, content);
|
|
27
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { AgentAdapter, CleanupManifest, McpServerEntry, SkillFile } from './types.js';
|
|
2
|
-
export declare class WindsurfAdapter implements AgentAdapter {
|
|
3
|
-
name: string;
|
|
4
|
-
slug: string;
|
|
5
|
-
mcpProvidesSkills: boolean;
|
|
6
|
-
detect(): Promise<boolean>;
|
|
7
|
-
supportsMcpScope(scope: 'project' | 'user'): boolean;
|
|
8
|
-
supportsSkills(): boolean;
|
|
9
|
-
writeMcpServers(servers: McpServerEntry[], _scope: 'project' | 'user'): Promise<void>;
|
|
10
|
-
writeSkills(skills: SkillFile[], scope: 'project' | 'user'): Promise<void>;
|
|
11
|
-
writeTeamInstructions(instructions: string, scope: 'project' | 'user'): Promise<void>;
|
|
12
|
-
writeInstructionHint(hint: string, scope: 'project' | 'user'): Promise<void>;
|
|
13
|
-
cleanup(scope: 'project' | 'user', manifest?: CleanupManifest): Promise<void>;
|
|
14
|
-
}
|
package/dist/agents/windsurf.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readdirSync, unlinkSync, writeFileSync } from 'fs';
|
|
2
|
-
import { join } from 'path';
|
|
3
|
-
import { homedir, platform } from 'os';
|
|
4
|
-
import { whichBinary } from '../utils/which.js';
|
|
5
|
-
import { mergeJsonMcpServers, removeRunworkMcpServers } from './utils/json-config.js';
|
|
6
|
-
function getWindsurfDataDir() {
|
|
7
|
-
if (platform() === 'win32') {
|
|
8
|
-
return join(process.env.APPDATA || join(homedir(), 'AppData', 'Roaming'), 'Codeium', 'windsurf');
|
|
9
|
-
}
|
|
10
|
-
return join(homedir(), '.codeium', 'windsurf');
|
|
11
|
-
}
|
|
12
|
-
function getConfigPath() {
|
|
13
|
-
return join(getWindsurfDataDir(), 'mcp_config.json');
|
|
14
|
-
}
|
|
15
|
-
export class WindsurfAdapter {
|
|
16
|
-
name = 'Windsurf';
|
|
17
|
-
slug = 'windsurf';
|
|
18
|
-
mcpProvidesSkills = true;
|
|
19
|
-
async detect() {
|
|
20
|
-
const os = platform();
|
|
21
|
-
if (os === 'darwin' && existsSync('/Applications/Windsurf.app'))
|
|
22
|
-
return true;
|
|
23
|
-
return !!whichBinary('windsurf');
|
|
24
|
-
}
|
|
25
|
-
supportsMcpScope(scope) {
|
|
26
|
-
return scope === 'user';
|
|
27
|
-
}
|
|
28
|
-
supportsSkills() {
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
async writeMcpServers(servers, _scope) {
|
|
32
|
-
const entries = {};
|
|
33
|
-
for (const s of servers) {
|
|
34
|
-
entries[s.name] = {
|
|
35
|
-
serverUrl: s.url,
|
|
36
|
-
...(s.headers ? { headers: s.headers } : {}),
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
mergeJsonMcpServers(getConfigPath(), entries, 'mcpServers');
|
|
40
|
-
}
|
|
41
|
-
async writeSkills(skills, scope) {
|
|
42
|
-
if (scope === 'user')
|
|
43
|
-
return;
|
|
44
|
-
const rulesDir = join(process.cwd(), '.windsurf', 'rules');
|
|
45
|
-
mkdirSync(rulesDir, { recursive: true });
|
|
46
|
-
for (const skill of skills) {
|
|
47
|
-
const content = `---\ntrigger: manual\n---\n\n${skill.content}`;
|
|
48
|
-
writeFileSync(join(rulesDir, `${skill.filename}.md`), content);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
async writeTeamInstructions(instructions, scope) {
|
|
52
|
-
const filePath = scope === 'project'
|
|
53
|
-
? join(process.cwd(), '.windsurf', 'rules', 'runwork-team.md')
|
|
54
|
-
: join(getWindsurfDataDir(), 'rules', 'runwork-team.md');
|
|
55
|
-
const content = `---\ntrigger: always_on\ndescription: "Team instructions from Runwork workspace"\n---\n\n${instructions}`;
|
|
56
|
-
mkdirSync(join(filePath, '..'), { recursive: true });
|
|
57
|
-
writeFileSync(filePath, content);
|
|
58
|
-
}
|
|
59
|
-
async writeInstructionHint(hint, scope) {
|
|
60
|
-
// Windsurf uses rules files
|
|
61
|
-
const filePath = scope === 'project'
|
|
62
|
-
? join(process.cwd(), '.windsurf', 'rules', 'runwork.md')
|
|
63
|
-
: join(getWindsurfDataDir(), 'rules', 'runwork.md');
|
|
64
|
-
const content = `---\ntrigger: always\n---\n\n${hint}`;
|
|
65
|
-
mkdirSync(join(filePath, '..'), { recursive: true });
|
|
66
|
-
writeFileSync(filePath, content);
|
|
67
|
-
}
|
|
68
|
-
// ── Cleanup (uninstall) ────────────────────────────────────────────
|
|
69
|
-
async cleanup(scope, manifest) {
|
|
70
|
-
// 1. Remove MCP entries (user scope only)
|
|
71
|
-
if (scope === 'user') {
|
|
72
|
-
removeRunworkMcpServers(getConfigPath(), 'mcpServers');
|
|
73
|
-
}
|
|
74
|
-
// 2. Remove rule files
|
|
75
|
-
const rulesDir = scope === 'project'
|
|
76
|
-
? join(process.cwd(), '.windsurf', 'rules')
|
|
77
|
-
: join(getWindsurfDataDir(), 'rules');
|
|
78
|
-
if (existsSync(rulesDir)) {
|
|
79
|
-
for (const file of ['runwork.md', 'runwork-team.md']) {
|
|
80
|
-
const filePath = join(rulesDir, file);
|
|
81
|
-
if (existsSync(filePath)) {
|
|
82
|
-
try {
|
|
83
|
-
unlinkSync(filePath);
|
|
84
|
-
}
|
|
85
|
-
catch { /* best-effort */ }
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
// Remove only skill .md files that we synced
|
|
89
|
-
if (manifest?.skillFilenames.length) {
|
|
90
|
-
const allowed = new Set(manifest.skillFilenames.map(f => `${f}.md`));
|
|
91
|
-
for (const entry of readdirSync(rulesDir)) {
|
|
92
|
-
if (allowed.has(entry)) {
|
|
93
|
-
try {
|
|
94
|
-
unlinkSync(join(rulesDir, entry));
|
|
95
|
-
}
|
|
96
|
-
catch { /* best-effort */ }
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|