opencode-repos 0.3.0 → 0.3.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/index.ts +25 -11
- package/package.json +27 -27
- package/src/__tests__/git.test.ts +33 -2
- package/src/git.ts +32 -5
- package/.sisyphus/boulder.json +0 -8
- package/.sisyphus/notepads/opencode-repos/decisions.md +0 -15
- package/.sisyphus/notepads/opencode-repos/learnings.md +0 -384
- package/.sisyphus/plans/opencode-repos.md +0 -987
- package/.tmux-sessionizer +0 -8
- package/TODO.md +0 -3
- package/oh-my-opencode/.github/FUNDING.yml +0 -15
- package/oh-my-opencode/.github/ISSUE_TEMPLATE/bug_report.yml +0 -129
- package/oh-my-opencode/.github/ISSUE_TEMPLATE/config.yml +0 -8
- package/oh-my-opencode/.github/ISSUE_TEMPLATE/feature_request.yml +0 -100
- package/oh-my-opencode/.github/ISSUE_TEMPLATE/general.yml +0 -83
- package/oh-my-opencode/.github/assets/google.jpg +0 -0
- package/oh-my-opencode/.github/assets/hero.jpg +0 -0
- package/oh-my-opencode/.github/assets/indent.jpg +0 -0
- package/oh-my-opencode/.github/assets/microsoft.jpg +0 -0
- package/oh-my-opencode/.github/assets/omo.png +0 -0
- package/oh-my-opencode/.github/assets/orchestrator-atlas.png +0 -0
- package/oh-my-opencode/.github/assets/sisyphus.png +0 -0
- package/oh-my-opencode/.github/assets/sisyphuslabs.png +0 -0
- package/oh-my-opencode/.github/pull_request_template.md +0 -34
- package/oh-my-opencode/.github/workflows/ci.yml +0 -138
- package/oh-my-opencode/.github/workflows/cla.yml +0 -41
- package/oh-my-opencode/.github/workflows/lint-workflows.yml +0 -22
- package/oh-my-opencode/.github/workflows/publish.yml +0 -165
- package/oh-my-opencode/.github/workflows/sisyphus-agent.yml +0 -500
- package/oh-my-opencode/.opencode/background-tasks.json +0 -27
- package/oh-my-opencode/.opencode/command/get-unpublished-changes.md +0 -84
- package/oh-my-opencode/.opencode/command/omomomo.md +0 -37
- package/oh-my-opencode/.opencode/command/publish.md +0 -257
- package/oh-my-opencode/AGENTS.md +0 -179
- package/oh-my-opencode/CLA.md +0 -58
- package/oh-my-opencode/CONTRIBUTING.md +0 -268
- package/oh-my-opencode/LICENSE.md +0 -82
- package/oh-my-opencode/README.ja.md +0 -370
- package/oh-my-opencode/README.md +0 -376
- package/oh-my-opencode/README.zh-cn.md +0 -380
- package/oh-my-opencode/assets/oh-my-opencode.schema.json +0 -2171
- package/oh-my-opencode/bin/oh-my-opencode.js +0 -80
- package/oh-my-opencode/bin/platform.js +0 -38
- package/oh-my-opencode/bin/platform.test.ts +0 -148
- package/oh-my-opencode/bun.lock +0 -314
- package/oh-my-opencode/bunfig.toml +0 -2
- package/oh-my-opencode/docs/category-skill-guide.md +0 -200
- package/oh-my-opencode/docs/cli-guide.md +0 -272
- package/oh-my-opencode/docs/configurations.md +0 -654
- package/oh-my-opencode/docs/features.md +0 -550
- package/oh-my-opencode/docs/guide/installation.md +0 -288
- package/oh-my-opencode/docs/guide/overview.md +0 -97
- package/oh-my-opencode/docs/guide/understanding-orchestration-system.md +0 -445
- package/oh-my-opencode/docs/orchestration-guide.md +0 -152
- package/oh-my-opencode/docs/ultrawork-manifesto.md +0 -197
- package/oh-my-opencode/package.json +0 -89
- package/oh-my-opencode/packages/darwin-arm64/bin/.gitkeep +0 -0
- package/oh-my-opencode/packages/darwin-arm64/package.json +0 -22
- package/oh-my-opencode/packages/darwin-x64/bin/.gitkeep +0 -0
- package/oh-my-opencode/packages/darwin-x64/package.json +0 -22
- package/oh-my-opencode/packages/linux-arm64/bin/.gitkeep +0 -0
- package/oh-my-opencode/packages/linux-arm64/package.json +0 -25
- package/oh-my-opencode/packages/linux-arm64-musl/bin/.gitkeep +0 -0
- package/oh-my-opencode/packages/linux-arm64-musl/package.json +0 -25
- package/oh-my-opencode/packages/linux-x64/bin/.gitkeep +0 -0
- package/oh-my-opencode/packages/linux-x64/package.json +0 -25
- package/oh-my-opencode/packages/linux-x64-musl/bin/.gitkeep +0 -0
- package/oh-my-opencode/packages/linux-x64-musl/package.json +0 -25
- package/oh-my-opencode/packages/windows-x64/bin/.gitkeep +0 -0
- package/oh-my-opencode/packages/windows-x64/package.json +0 -22
- package/oh-my-opencode/postinstall.mjs +0 -43
- package/oh-my-opencode/script/build-binaries.ts +0 -103
- package/oh-my-opencode/script/build-schema.ts +0 -28
- package/oh-my-opencode/script/generate-changelog.ts +0 -92
- package/oh-my-opencode/script/publish.ts +0 -344
- package/oh-my-opencode/signatures/cla.json +0 -676
- package/oh-my-opencode/src/agents/AGENTS.md +0 -67
- package/oh-my-opencode/src/agents/atlas.ts +0 -1383
- package/oh-my-opencode/src/agents/dynamic-agent-prompt-builder.ts +0 -400
- package/oh-my-opencode/src/agents/explore.ts +0 -122
- package/oh-my-opencode/src/agents/index.ts +0 -13
- package/oh-my-opencode/src/agents/librarian.ts +0 -326
- package/oh-my-opencode/src/agents/metis.ts +0 -315
- package/oh-my-opencode/src/agents/momus.test.ts +0 -57
- package/oh-my-opencode/src/agents/momus.ts +0 -444
- package/oh-my-opencode/src/agents/multimodal-looker.ts +0 -56
- package/oh-my-opencode/src/agents/oracle.ts +0 -122
- package/oh-my-opencode/src/agents/prometheus-prompt.test.ts +0 -22
- package/oh-my-opencode/src/agents/prometheus-prompt.ts +0 -1196
- package/oh-my-opencode/src/agents/sisyphus-junior.test.ts +0 -232
- package/oh-my-opencode/src/agents/sisyphus-junior.ts +0 -134
- package/oh-my-opencode/src/agents/sisyphus.ts +0 -633
- package/oh-my-opencode/src/agents/types.ts +0 -80
- package/oh-my-opencode/src/agents/utils.test.ts +0 -311
- package/oh-my-opencode/src/agents/utils.ts +0 -240
- package/oh-my-opencode/src/cli/AGENTS.md +0 -91
- package/oh-my-opencode/src/cli/config-manager.test.ts +0 -364
- package/oh-my-opencode/src/cli/config-manager.ts +0 -641
- package/oh-my-opencode/src/cli/doctor/checks/auth.test.ts +0 -114
- package/oh-my-opencode/src/cli/doctor/checks/auth.ts +0 -115
- package/oh-my-opencode/src/cli/doctor/checks/config.test.ts +0 -103
- package/oh-my-opencode/src/cli/doctor/checks/config.ts +0 -123
- package/oh-my-opencode/src/cli/doctor/checks/dependencies.test.ts +0 -152
- package/oh-my-opencode/src/cli/doctor/checks/dependencies.ts +0 -163
- package/oh-my-opencode/src/cli/doctor/checks/gh.test.ts +0 -151
- package/oh-my-opencode/src/cli/doctor/checks/gh.ts +0 -171
- package/oh-my-opencode/src/cli/doctor/checks/index.ts +0 -34
- package/oh-my-opencode/src/cli/doctor/checks/lsp.test.ts +0 -134
- package/oh-my-opencode/src/cli/doctor/checks/lsp.ts +0 -77
- package/oh-my-opencode/src/cli/doctor/checks/mcp.test.ts +0 -115
- package/oh-my-opencode/src/cli/doctor/checks/mcp.ts +0 -128
- package/oh-my-opencode/src/cli/doctor/checks/opencode.test.ts +0 -227
- package/oh-my-opencode/src/cli/doctor/checks/opencode.ts +0 -178
- package/oh-my-opencode/src/cli/doctor/checks/plugin.test.ts +0 -109
- package/oh-my-opencode/src/cli/doctor/checks/plugin.ts +0 -124
- package/oh-my-opencode/src/cli/doctor/checks/version.test.ts +0 -148
- package/oh-my-opencode/src/cli/doctor/checks/version.ts +0 -135
- package/oh-my-opencode/src/cli/doctor/constants.ts +0 -72
- package/oh-my-opencode/src/cli/doctor/formatter.test.ts +0 -218
- package/oh-my-opencode/src/cli/doctor/formatter.ts +0 -140
- package/oh-my-opencode/src/cli/doctor/index.ts +0 -11
- package/oh-my-opencode/src/cli/doctor/runner.test.ts +0 -153
- package/oh-my-opencode/src/cli/doctor/runner.ts +0 -132
- package/oh-my-opencode/src/cli/doctor/types.ts +0 -113
- package/oh-my-opencode/src/cli/get-local-version/formatter.ts +0 -66
- package/oh-my-opencode/src/cli/get-local-version/index.ts +0 -106
- package/oh-my-opencode/src/cli/get-local-version/types.ts +0 -14
- package/oh-my-opencode/src/cli/index.ts +0 -153
- package/oh-my-opencode/src/cli/install.ts +0 -523
- package/oh-my-opencode/src/cli/model-fallback.ts +0 -246
- package/oh-my-opencode/src/cli/run/completion.test.ts +0 -170
- package/oh-my-opencode/src/cli/run/completion.ts +0 -79
- package/oh-my-opencode/src/cli/run/events.test.ts +0 -155
- package/oh-my-opencode/src/cli/run/events.ts +0 -325
- package/oh-my-opencode/src/cli/run/index.ts +0 -2
- package/oh-my-opencode/src/cli/run/runner.ts +0 -159
- package/oh-my-opencode/src/cli/run/types.ts +0 -76
- package/oh-my-opencode/src/cli/types.ts +0 -40
- package/oh-my-opencode/src/config/index.ts +0 -26
- package/oh-my-opencode/src/config/schema.test.ts +0 -444
- package/oh-my-opencode/src/config/schema.ts +0 -339
- package/oh-my-opencode/src/features/AGENTS.md +0 -77
- package/oh-my-opencode/src/features/background-agent/concurrency.test.ts +0 -418
- package/oh-my-opencode/src/features/background-agent/concurrency.ts +0 -137
- package/oh-my-opencode/src/features/background-agent/index.ts +0 -3
- package/oh-my-opencode/src/features/background-agent/manager.test.ts +0 -1928
- package/oh-my-opencode/src/features/background-agent/manager.ts +0 -1335
- package/oh-my-opencode/src/features/background-agent/types.ts +0 -66
- package/oh-my-opencode/src/features/boulder-state/constants.ts +0 -13
- package/oh-my-opencode/src/features/boulder-state/index.ts +0 -3
- package/oh-my-opencode/src/features/boulder-state/storage.test.ts +0 -250
- package/oh-my-opencode/src/features/boulder-state/storage.ts +0 -150
- package/oh-my-opencode/src/features/boulder-state/types.ts +0 -26
- package/oh-my-opencode/src/features/builtin-commands/commands.ts +0 -89
- package/oh-my-opencode/src/features/builtin-commands/index.ts +0 -2
- package/oh-my-opencode/src/features/builtin-commands/templates/init-deep.ts +0 -300
- package/oh-my-opencode/src/features/builtin-commands/templates/ralph-loop.ts +0 -38
- package/oh-my-opencode/src/features/builtin-commands/templates/refactor.ts +0 -619
- package/oh-my-opencode/src/features/builtin-commands/templates/start-work.ts +0 -72
- package/oh-my-opencode/src/features/builtin-commands/types.ts +0 -9
- package/oh-my-opencode/src/features/builtin-skills/frontend-ui-ux/SKILL.md +0 -78
- package/oh-my-opencode/src/features/builtin-skills/git-master/SKILL.md +0 -1105
- package/oh-my-opencode/src/features/builtin-skills/index.ts +0 -2
- package/oh-my-opencode/src/features/builtin-skills/skills.ts +0 -1203
- package/oh-my-opencode/src/features/builtin-skills/types.ts +0 -16
- package/oh-my-opencode/src/features/claude-code-agent-loader/index.ts +0 -2
- package/oh-my-opencode/src/features/claude-code-agent-loader/loader.ts +0 -90
- package/oh-my-opencode/src/features/claude-code-agent-loader/types.ts +0 -17
- package/oh-my-opencode/src/features/claude-code-command-loader/index.ts +0 -2
- package/oh-my-opencode/src/features/claude-code-command-loader/loader.ts +0 -144
- package/oh-my-opencode/src/features/claude-code-command-loader/types.ts +0 -46
- package/oh-my-opencode/src/features/claude-code-mcp-loader/env-expander.ts +0 -27
- package/oh-my-opencode/src/features/claude-code-mcp-loader/index.ts +0 -11
- package/oh-my-opencode/src/features/claude-code-mcp-loader/loader.test.ts +0 -162
- package/oh-my-opencode/src/features/claude-code-mcp-loader/loader.ts +0 -113
- package/oh-my-opencode/src/features/claude-code-mcp-loader/transformer.ts +0 -53
- package/oh-my-opencode/src/features/claude-code-mcp-loader/types.ts +0 -42
- package/oh-my-opencode/src/features/claude-code-plugin-loader/index.ts +0 -3
- package/oh-my-opencode/src/features/claude-code-plugin-loader/loader.ts +0 -486
- package/oh-my-opencode/src/features/claude-code-plugin-loader/types.ts +0 -210
- package/oh-my-opencode/src/features/claude-code-session-state/index.ts +0 -1
- package/oh-my-opencode/src/features/claude-code-session-state/state.test.ts +0 -126
- package/oh-my-opencode/src/features/claude-code-session-state/state.ts +0 -37
- package/oh-my-opencode/src/features/context-injector/collector.test.ts +0 -330
- package/oh-my-opencode/src/features/context-injector/collector.ts +0 -85
- package/oh-my-opencode/src/features/context-injector/index.ts +0 -14
- package/oh-my-opencode/src/features/context-injector/injector.test.ts +0 -122
- package/oh-my-opencode/src/features/context-injector/injector.ts +0 -167
- package/oh-my-opencode/src/features/context-injector/types.ts +0 -91
- package/oh-my-opencode/src/features/hook-message-injector/constants.ts +0 -6
- package/oh-my-opencode/src/features/hook-message-injector/index.ts +0 -4
- package/oh-my-opencode/src/features/hook-message-injector/injector.ts +0 -195
- package/oh-my-opencode/src/features/hook-message-injector/types.ts +0 -47
- package/oh-my-opencode/src/features/opencode-skill-loader/async-loader.test.ts +0 -448
- package/oh-my-opencode/src/features/opencode-skill-loader/async-loader.ts +0 -180
- package/oh-my-opencode/src/features/opencode-skill-loader/blocking.test.ts +0 -210
- package/oh-my-opencode/src/features/opencode-skill-loader/blocking.ts +0 -62
- package/oh-my-opencode/src/features/opencode-skill-loader/discover-worker.ts +0 -59
- package/oh-my-opencode/src/features/opencode-skill-loader/index.ts +0 -4
- package/oh-my-opencode/src/features/opencode-skill-loader/loader.test.ts +0 -273
- package/oh-my-opencode/src/features/opencode-skill-loader/loader.ts +0 -259
- package/oh-my-opencode/src/features/opencode-skill-loader/merger.ts +0 -267
- package/oh-my-opencode/src/features/opencode-skill-loader/skill-content.test.ts +0 -267
- package/oh-my-opencode/src/features/opencode-skill-loader/skill-content.ts +0 -206
- package/oh-my-opencode/src/features/opencode-skill-loader/types.ts +0 -38
- package/oh-my-opencode/src/features/skill-mcp-manager/env-cleaner.test.ts +0 -201
- package/oh-my-opencode/src/features/skill-mcp-manager/env-cleaner.ts +0 -27
- package/oh-my-opencode/src/features/skill-mcp-manager/index.ts +0 -2
- package/oh-my-opencode/src/features/skill-mcp-manager/manager.test.ts +0 -611
- package/oh-my-opencode/src/features/skill-mcp-manager/manager.ts +0 -520
- package/oh-my-opencode/src/features/skill-mcp-manager/types.ts +0 -14
- package/oh-my-opencode/src/features/task-toast-manager/index.ts +0 -2
- package/oh-my-opencode/src/features/task-toast-manager/manager.test.ts +0 -249
- package/oh-my-opencode/src/features/task-toast-manager/manager.ts +0 -215
- package/oh-my-opencode/src/features/task-toast-manager/types.ts +0 -24
- package/oh-my-opencode/src/hooks/AGENTS.md +0 -73
- package/oh-my-opencode/src/hooks/agent-usage-reminder/constants.ts +0 -54
- package/oh-my-opencode/src/hooks/agent-usage-reminder/index.ts +0 -109
- package/oh-my-opencode/src/hooks/agent-usage-reminder/storage.ts +0 -42
- package/oh-my-opencode/src/hooks/agent-usage-reminder/types.ts +0 -6
- package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/executor.test.ts +0 -307
- package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/executor.ts +0 -485
- package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/index.ts +0 -151
- package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/parser.ts +0 -201
- package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/pruning-deduplication.test.ts +0 -33
- package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/pruning-deduplication.ts +0 -184
- package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/pruning-types.ts +0 -44
- package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/storage.test.ts +0 -77
- package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/storage.ts +0 -250
- package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/types.ts +0 -42
- package/oh-my-opencode/src/hooks/atlas/index.test.ts +0 -953
- package/oh-my-opencode/src/hooks/atlas/index.ts +0 -771
- package/oh-my-opencode/src/hooks/auto-slash-command/constants.ts +0 -12
- package/oh-my-opencode/src/hooks/auto-slash-command/detector.test.ts +0 -296
- package/oh-my-opencode/src/hooks/auto-slash-command/detector.ts +0 -65
- package/oh-my-opencode/src/hooks/auto-slash-command/executor.ts +0 -205
- package/oh-my-opencode/src/hooks/auto-slash-command/index.test.ts +0 -254
- package/oh-my-opencode/src/hooks/auto-slash-command/index.ts +0 -89
- package/oh-my-opencode/src/hooks/auto-slash-command/types.ts +0 -23
- package/oh-my-opencode/src/hooks/auto-update-checker/cache.ts +0 -93
- package/oh-my-opencode/src/hooks/auto-update-checker/checker.test.ts +0 -24
- package/oh-my-opencode/src/hooks/auto-update-checker/checker.ts +0 -284
- package/oh-my-opencode/src/hooks/auto-update-checker/constants.ts +0 -64
- package/oh-my-opencode/src/hooks/auto-update-checker/index.test.ts +0 -254
- package/oh-my-opencode/src/hooks/auto-update-checker/index.ts +0 -260
- package/oh-my-opencode/src/hooks/auto-update-checker/types.ts +0 -29
- package/oh-my-opencode/src/hooks/background-compaction/index.ts +0 -87
- package/oh-my-opencode/src/hooks/background-notification/index.ts +0 -28
- package/oh-my-opencode/src/hooks/background-notification/types.ts +0 -5
- package/oh-my-opencode/src/hooks/claude-code-hooks/AGENTS.md +0 -70
- package/oh-my-opencode/src/hooks/claude-code-hooks/config-loader.ts +0 -107
- package/oh-my-opencode/src/hooks/claude-code-hooks/config.ts +0 -103
- package/oh-my-opencode/src/hooks/claude-code-hooks/index.ts +0 -401
- package/oh-my-opencode/src/hooks/claude-code-hooks/plugin-config.ts +0 -12
- package/oh-my-opencode/src/hooks/claude-code-hooks/post-tool-use.ts +0 -199
- package/oh-my-opencode/src/hooks/claude-code-hooks/pre-compact.ts +0 -109
- package/oh-my-opencode/src/hooks/claude-code-hooks/pre-tool-use.ts +0 -172
- package/oh-my-opencode/src/hooks/claude-code-hooks/stop.ts +0 -118
- package/oh-my-opencode/src/hooks/claude-code-hooks/todo.ts +0 -76
- package/oh-my-opencode/src/hooks/claude-code-hooks/tool-input-cache.ts +0 -47
- package/oh-my-opencode/src/hooks/claude-code-hooks/transcript.ts +0 -252
- package/oh-my-opencode/src/hooks/claude-code-hooks/types.ts +0 -204
- package/oh-my-opencode/src/hooks/claude-code-hooks/user-prompt-submit.ts +0 -117
- package/oh-my-opencode/src/hooks/comment-checker/cli.test.ts +0 -68
- package/oh-my-opencode/src/hooks/comment-checker/cli.ts +0 -221
- package/oh-my-opencode/src/hooks/comment-checker/downloader.ts +0 -196
- package/oh-my-opencode/src/hooks/comment-checker/index.ts +0 -171
- package/oh-my-opencode/src/hooks/comment-checker/types.ts +0 -33
- package/oh-my-opencode/src/hooks/compaction-context-injector/index.ts +0 -61
- package/oh-my-opencode/src/hooks/context-window-monitor.ts +0 -99
- package/oh-my-opencode/src/hooks/delegate-task-retry/index.test.ts +0 -119
- package/oh-my-opencode/src/hooks/delegate-task-retry/index.ts +0 -136
- package/oh-my-opencode/src/hooks/directory-agents-injector/constants.ts +0 -9
- package/oh-my-opencode/src/hooks/directory-agents-injector/index.ts +0 -182
- package/oh-my-opencode/src/hooks/directory-agents-injector/storage.ts +0 -48
- package/oh-my-opencode/src/hooks/directory-agents-injector/types.ts +0 -5
- package/oh-my-opencode/src/hooks/directory-readme-injector/constants.ts +0 -9
- package/oh-my-opencode/src/hooks/directory-readme-injector/index.ts +0 -177
- package/oh-my-opencode/src/hooks/directory-readme-injector/storage.ts +0 -48
- package/oh-my-opencode/src/hooks/directory-readme-injector/types.ts +0 -5
- package/oh-my-opencode/src/hooks/edit-error-recovery/index.test.ts +0 -126
- package/oh-my-opencode/src/hooks/edit-error-recovery/index.ts +0 -57
- package/oh-my-opencode/src/hooks/empty-task-response-detector.ts +0 -27
- package/oh-my-opencode/src/hooks/index.ts +0 -32
- package/oh-my-opencode/src/hooks/interactive-bash-session/constants.ts +0 -15
- package/oh-my-opencode/src/hooks/interactive-bash-session/index.ts +0 -262
- package/oh-my-opencode/src/hooks/interactive-bash-session/storage.ts +0 -59
- package/oh-my-opencode/src/hooks/interactive-bash-session/types.ts +0 -11
- package/oh-my-opencode/src/hooks/keyword-detector/constants.ts +0 -300
- package/oh-my-opencode/src/hooks/keyword-detector/detector.ts +0 -52
- package/oh-my-opencode/src/hooks/keyword-detector/index.test.ts +0 -529
- package/oh-my-opencode/src/hooks/keyword-detector/index.ts +0 -100
- package/oh-my-opencode/src/hooks/keyword-detector/types.ts +0 -4
- package/oh-my-opencode/src/hooks/non-interactive-env/constants.ts +0 -70
- package/oh-my-opencode/src/hooks/non-interactive-env/detector.ts +0 -19
- package/oh-my-opencode/src/hooks/non-interactive-env/index.test.ts +0 -323
- package/oh-my-opencode/src/hooks/non-interactive-env/index.ts +0 -63
- package/oh-my-opencode/src/hooks/non-interactive-env/types.ts +0 -3
- package/oh-my-opencode/src/hooks/prometheus-md-only/constants.ts +0 -32
- package/oh-my-opencode/src/hooks/prometheus-md-only/index.test.ts +0 -488
- package/oh-my-opencode/src/hooks/prometheus-md-only/index.ts +0 -136
- package/oh-my-opencode/src/hooks/ralph-loop/constants.ts +0 -5
- package/oh-my-opencode/src/hooks/ralph-loop/index.test.ts +0 -835
- package/oh-my-opencode/src/hooks/ralph-loop/index.ts +0 -417
- package/oh-my-opencode/src/hooks/ralph-loop/storage.ts +0 -115
- package/oh-my-opencode/src/hooks/ralph-loop/types.ts +0 -19
- package/oh-my-opencode/src/hooks/rules-injector/constants.ts +0 -30
- package/oh-my-opencode/src/hooks/rules-injector/finder.test.ts +0 -381
- package/oh-my-opencode/src/hooks/rules-injector/finder.ts +0 -263
- package/oh-my-opencode/src/hooks/rules-injector/index.ts +0 -223
- package/oh-my-opencode/src/hooks/rules-injector/matcher.ts +0 -63
- package/oh-my-opencode/src/hooks/rules-injector/parser.test.ts +0 -226
- package/oh-my-opencode/src/hooks/rules-injector/parser.ts +0 -211
- package/oh-my-opencode/src/hooks/rules-injector/storage.ts +0 -59
- package/oh-my-opencode/src/hooks/rules-injector/types.ts +0 -57
- package/oh-my-opencode/src/hooks/session-notification-utils.ts +0 -140
- package/oh-my-opencode/src/hooks/session-notification.test.ts +0 -361
- package/oh-my-opencode/src/hooks/session-notification.ts +0 -330
- package/oh-my-opencode/src/hooks/session-recovery/constants.ts +0 -10
- package/oh-my-opencode/src/hooks/session-recovery/index.test.ts +0 -223
- package/oh-my-opencode/src/hooks/session-recovery/index.ts +0 -435
- package/oh-my-opencode/src/hooks/session-recovery/storage.ts +0 -390
- package/oh-my-opencode/src/hooks/session-recovery/types.ts +0 -98
- package/oh-my-opencode/src/hooks/start-work/index.test.ts +0 -402
- package/oh-my-opencode/src/hooks/start-work/index.ts +0 -242
- package/oh-my-opencode/src/hooks/task-resume-info/index.ts +0 -36
- package/oh-my-opencode/src/hooks/think-mode/detector.ts +0 -57
- package/oh-my-opencode/src/hooks/think-mode/index.test.ts +0 -353
- package/oh-my-opencode/src/hooks/think-mode/index.ts +0 -89
- package/oh-my-opencode/src/hooks/think-mode/switcher.test.ts +0 -461
- package/oh-my-opencode/src/hooks/think-mode/switcher.ts +0 -222
- package/oh-my-opencode/src/hooks/think-mode/types.ts +0 -21
- package/oh-my-opencode/src/hooks/thinking-block-validator/index.ts +0 -171
- package/oh-my-opencode/src/hooks/todo-continuation-enforcer.test.ts +0 -876
- package/oh-my-opencode/src/hooks/todo-continuation-enforcer.ts +0 -480
- package/oh-my-opencode/src/hooks/tool-output-truncator.test.ts +0 -168
- package/oh-my-opencode/src/hooks/tool-output-truncator.ts +0 -61
- package/oh-my-opencode/src/index.ts +0 -589
- package/oh-my-opencode/src/mcp/AGENTS.md +0 -70
- package/oh-my-opencode/src/mcp/context7.ts +0 -6
- package/oh-my-opencode/src/mcp/grep-app.ts +0 -6
- package/oh-my-opencode/src/mcp/index.test.ts +0 -86
- package/oh-my-opencode/src/mcp/index.ts +0 -32
- package/oh-my-opencode/src/mcp/types.ts +0 -9
- package/oh-my-opencode/src/mcp/websearch.ts +0 -10
- package/oh-my-opencode/src/plugin-config.test.ts +0 -119
- package/oh-my-opencode/src/plugin-config.ts +0 -135
- package/oh-my-opencode/src/plugin-handlers/config-handler.test.ts +0 -103
- package/oh-my-opencode/src/plugin-handlers/config-handler.ts +0 -399
- package/oh-my-opencode/src/plugin-handlers/index.ts +0 -1
- package/oh-my-opencode/src/plugin-state.ts +0 -30
- package/oh-my-opencode/src/shared/AGENTS.md +0 -63
- package/oh-my-opencode/src/shared/agent-tool-restrictions.ts +0 -44
- package/oh-my-opencode/src/shared/agent-variant.test.ts +0 -83
- package/oh-my-opencode/src/shared/agent-variant.ts +0 -40
- package/oh-my-opencode/src/shared/claude-config-dir.test.ts +0 -60
- package/oh-my-opencode/src/shared/claude-config-dir.ts +0 -11
- package/oh-my-opencode/src/shared/command-executor.ts +0 -225
- package/oh-my-opencode/src/shared/config-errors.ts +0 -18
- package/oh-my-opencode/src/shared/config-path.ts +0 -47
- package/oh-my-opencode/src/shared/data-path.ts +0 -22
- package/oh-my-opencode/src/shared/deep-merge.test.ts +0 -336
- package/oh-my-opencode/src/shared/deep-merge.ts +0 -53
- package/oh-my-opencode/src/shared/dynamic-truncator.ts +0 -193
- package/oh-my-opencode/src/shared/external-plugin-detector.test.ts +0 -133
- package/oh-my-opencode/src/shared/external-plugin-detector.ts +0 -132
- package/oh-my-opencode/src/shared/file-reference-resolver.ts +0 -85
- package/oh-my-opencode/src/shared/file-utils.ts +0 -40
- package/oh-my-opencode/src/shared/first-message-variant.test.ts +0 -32
- package/oh-my-opencode/src/shared/first-message-variant.ts +0 -28
- package/oh-my-opencode/src/shared/frontmatter.test.ts +0 -262
- package/oh-my-opencode/src/shared/frontmatter.ts +0 -31
- package/oh-my-opencode/src/shared/hook-disabled.ts +0 -22
- package/oh-my-opencode/src/shared/index.ts +0 -29
- package/oh-my-opencode/src/shared/jsonc-parser.test.ts +0 -266
- package/oh-my-opencode/src/shared/jsonc-parser.ts +0 -66
- package/oh-my-opencode/src/shared/logger.ts +0 -20
- package/oh-my-opencode/src/shared/migration.test.ts +0 -602
- package/oh-my-opencode/src/shared/migration.ts +0 -191
- package/oh-my-opencode/src/shared/model-resolver.test.ts +0 -101
- package/oh-my-opencode/src/shared/model-resolver.ts +0 -35
- package/oh-my-opencode/src/shared/model-sanitizer.ts +0 -12
- package/oh-my-opencode/src/shared/opencode-config-dir.test.ts +0 -318
- package/oh-my-opencode/src/shared/opencode-config-dir.ts +0 -142
- package/oh-my-opencode/src/shared/opencode-version.test.ts +0 -223
- package/oh-my-opencode/src/shared/opencode-version.ts +0 -72
- package/oh-my-opencode/src/shared/pattern-matcher.ts +0 -29
- package/oh-my-opencode/src/shared/permission-compat.test.ts +0 -134
- package/oh-my-opencode/src/shared/permission-compat.ts +0 -77
- package/oh-my-opencode/src/shared/session-cursor.test.ts +0 -66
- package/oh-my-opencode/src/shared/session-cursor.ts +0 -85
- package/oh-my-opencode/src/shared/shell-env.test.ts +0 -278
- package/oh-my-opencode/src/shared/shell-env.ts +0 -111
- package/oh-my-opencode/src/shared/snake-case.ts +0 -49
- package/oh-my-opencode/src/shared/system-directive.ts +0 -40
- package/oh-my-opencode/src/shared/tool-name.ts +0 -26
- package/oh-my-opencode/src/shared/zip-extractor.ts +0 -83
- package/oh-my-opencode/src/tools/AGENTS.md +0 -74
- package/oh-my-opencode/src/tools/ast-grep/cli.ts +0 -230
- package/oh-my-opencode/src/tools/ast-grep/constants.ts +0 -261
- package/oh-my-opencode/src/tools/ast-grep/downloader.ts +0 -128
- package/oh-my-opencode/src/tools/ast-grep/index.ts +0 -13
- package/oh-my-opencode/src/tools/ast-grep/tools.ts +0 -112
- package/oh-my-opencode/src/tools/ast-grep/types.ts +0 -61
- package/oh-my-opencode/src/tools/ast-grep/utils.ts +0 -102
- package/oh-my-opencode/src/tools/background-task/constants.ts +0 -7
- package/oh-my-opencode/src/tools/background-task/index.ts +0 -7
- package/oh-my-opencode/src/tools/background-task/tools.ts +0 -479
- package/oh-my-opencode/src/tools/background-task/types.ts +0 -16
- package/oh-my-opencode/src/tools/call-omo-agent/constants.ts +0 -7
- package/oh-my-opencode/src/tools/call-omo-agent/index.ts +0 -3
- package/oh-my-opencode/src/tools/call-omo-agent/tools.ts +0 -338
- package/oh-my-opencode/src/tools/call-omo-agent/types.ts +0 -27
- package/oh-my-opencode/src/tools/delegate-task/constants.ts +0 -205
- package/oh-my-opencode/src/tools/delegate-task/index.ts +0 -3
- package/oh-my-opencode/src/tools/delegate-task/tools.test.ts +0 -1575
- package/oh-my-opencode/src/tools/delegate-task/tools.ts +0 -885
- package/oh-my-opencode/src/tools/delegate-task/types.ts +0 -9
- package/oh-my-opencode/src/tools/glob/cli.test.ts +0 -158
- package/oh-my-opencode/src/tools/glob/cli.ts +0 -191
- package/oh-my-opencode/src/tools/glob/constants.ts +0 -12
- package/oh-my-opencode/src/tools/glob/index.ts +0 -3
- package/oh-my-opencode/src/tools/glob/tools.ts +0 -41
- package/oh-my-opencode/src/tools/glob/types.ts +0 -22
- package/oh-my-opencode/src/tools/glob/utils.ts +0 -26
- package/oh-my-opencode/src/tools/grep/cli.ts +0 -229
- package/oh-my-opencode/src/tools/grep/constants.ts +0 -127
- package/oh-my-opencode/src/tools/grep/downloader.test.ts +0 -103
- package/oh-my-opencode/src/tools/grep/downloader.ts +0 -145
- package/oh-my-opencode/src/tools/grep/index.ts +0 -3
- package/oh-my-opencode/src/tools/grep/tools.ts +0 -40
- package/oh-my-opencode/src/tools/grep/types.ts +0 -39
- package/oh-my-opencode/src/tools/grep/utils.ts +0 -53
- package/oh-my-opencode/src/tools/index.ts +0 -72
- package/oh-my-opencode/src/tools/interactive-bash/constants.ts +0 -18
- package/oh-my-opencode/src/tools/interactive-bash/index.ts +0 -4
- package/oh-my-opencode/src/tools/interactive-bash/tools.ts +0 -126
- package/oh-my-opencode/src/tools/interactive-bash/utils.ts +0 -71
- package/oh-my-opencode/src/tools/look-at/constants.ts +0 -3
- package/oh-my-opencode/src/tools/look-at/index.ts +0 -3
- package/oh-my-opencode/src/tools/look-at/tools.test.ts +0 -73
- package/oh-my-opencode/src/tools/look-at/tools.ts +0 -173
- package/oh-my-opencode/src/tools/look-at/types.ts +0 -4
- package/oh-my-opencode/src/tools/lsp/client.ts +0 -596
- package/oh-my-opencode/src/tools/lsp/config.test.ts +0 -130
- package/oh-my-opencode/src/tools/lsp/config.ts +0 -285
- package/oh-my-opencode/src/tools/lsp/constants.ts +0 -390
- package/oh-my-opencode/src/tools/lsp/index.ts +0 -7
- package/oh-my-opencode/src/tools/lsp/tools.ts +0 -261
- package/oh-my-opencode/src/tools/lsp/types.ts +0 -124
- package/oh-my-opencode/src/tools/lsp/utils.ts +0 -406
- package/oh-my-opencode/src/tools/session-manager/constants.ts +0 -97
- package/oh-my-opencode/src/tools/session-manager/index.ts +0 -3
- package/oh-my-opencode/src/tools/session-manager/storage.test.ts +0 -315
- package/oh-my-opencode/src/tools/session-manager/storage.ts +0 -238
- package/oh-my-opencode/src/tools/session-manager/tools.test.ts +0 -124
- package/oh-my-opencode/src/tools/session-manager/tools.ts +0 -146
- package/oh-my-opencode/src/tools/session-manager/types.ts +0 -99
- package/oh-my-opencode/src/tools/session-manager/utils.test.ts +0 -160
- package/oh-my-opencode/src/tools/session-manager/utils.ts +0 -199
- package/oh-my-opencode/src/tools/skill/constants.ts +0 -8
- package/oh-my-opencode/src/tools/skill/index.ts +0 -3
- package/oh-my-opencode/src/tools/skill/tools.test.ts +0 -239
- package/oh-my-opencode/src/tools/skill/tools.ts +0 -200
- package/oh-my-opencode/src/tools/skill/types.ts +0 -31
- package/oh-my-opencode/src/tools/skill-mcp/constants.ts +0 -3
- package/oh-my-opencode/src/tools/skill-mcp/index.ts +0 -3
- package/oh-my-opencode/src/tools/skill-mcp/tools.test.ts +0 -215
- package/oh-my-opencode/src/tools/skill-mcp/tools.ts +0 -172
- package/oh-my-opencode/src/tools/skill-mcp/types.ts +0 -8
- package/oh-my-opencode/src/tools/slashcommand/index.ts +0 -2
- package/oh-my-opencode/src/tools/slashcommand/tools.ts +0 -252
- package/oh-my-opencode/src/tools/slashcommand/types.ts +0 -28
- package/oh-my-opencode/test-setup.ts +0 -6
- package/oh-my-opencode/tsconfig.json +0 -20
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "bun:test"
|
|
2
|
-
import { resolveSkillContent, resolveMultipleSkills, resolveSkillContentAsync, resolveMultipleSkillsAsync } from "./skill-content"
|
|
3
|
-
|
|
4
|
-
describe("resolveSkillContent", () => {
|
|
5
|
-
it("should return template for existing skill", () => {
|
|
6
|
-
// #given: builtin skills with 'frontend-ui-ux' skill
|
|
7
|
-
// #when: resolving content for 'frontend-ui-ux'
|
|
8
|
-
const result = resolveSkillContent("frontend-ui-ux")
|
|
9
|
-
|
|
10
|
-
// #then: returns template string
|
|
11
|
-
expect(result).not.toBeNull()
|
|
12
|
-
expect(typeof result).toBe("string")
|
|
13
|
-
expect(result).toContain("Role: Designer-Turned-Developer")
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
it("should return template for 'playwright' skill", () => {
|
|
17
|
-
// #given: builtin skills with 'playwright' skill
|
|
18
|
-
// #when: resolving content for 'playwright'
|
|
19
|
-
const result = resolveSkillContent("playwright")
|
|
20
|
-
|
|
21
|
-
// #then: returns template string
|
|
22
|
-
expect(result).not.toBeNull()
|
|
23
|
-
expect(typeof result).toBe("string")
|
|
24
|
-
expect(result).toContain("Playwright Browser Automation")
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
it("should return null for non-existent skill", () => {
|
|
28
|
-
// #given: builtin skills without 'nonexistent' skill
|
|
29
|
-
// #when: resolving content for 'nonexistent'
|
|
30
|
-
const result = resolveSkillContent("nonexistent")
|
|
31
|
-
|
|
32
|
-
// #then: returns null
|
|
33
|
-
expect(result).toBeNull()
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
it("should return null for empty string", () => {
|
|
37
|
-
// #given: builtin skills
|
|
38
|
-
// #when: resolving content for empty string
|
|
39
|
-
const result = resolveSkillContent("")
|
|
40
|
-
|
|
41
|
-
// #then: returns null
|
|
42
|
-
expect(result).toBeNull()
|
|
43
|
-
})
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
describe("resolveMultipleSkills", () => {
|
|
47
|
-
it("should resolve all existing skills", () => {
|
|
48
|
-
// #given: list of existing skill names
|
|
49
|
-
const skillNames = ["frontend-ui-ux", "playwright"]
|
|
50
|
-
|
|
51
|
-
// #when: resolving multiple skills
|
|
52
|
-
const result = resolveMultipleSkills(skillNames)
|
|
53
|
-
|
|
54
|
-
// #then: all skills resolved, none not found
|
|
55
|
-
expect(result.resolved.size).toBe(2)
|
|
56
|
-
expect(result.notFound).toEqual([])
|
|
57
|
-
expect(result.resolved.get("frontend-ui-ux")).toContain("Designer-Turned-Developer")
|
|
58
|
-
expect(result.resolved.get("playwright")).toContain("Playwright Browser Automation")
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
it("should handle partial success - some skills not found", () => {
|
|
62
|
-
// #given: list with existing and non-existing skills
|
|
63
|
-
const skillNames = ["frontend-ui-ux", "nonexistent", "playwright", "another-missing"]
|
|
64
|
-
|
|
65
|
-
// #when: resolving multiple skills
|
|
66
|
-
const result = resolveMultipleSkills(skillNames)
|
|
67
|
-
|
|
68
|
-
// #then: resolves existing skills, lists not found skills
|
|
69
|
-
expect(result.resolved.size).toBe(2)
|
|
70
|
-
expect(result.notFound).toEqual(["nonexistent", "another-missing"])
|
|
71
|
-
expect(result.resolved.get("frontend-ui-ux")).toContain("Designer-Turned-Developer")
|
|
72
|
-
expect(result.resolved.get("playwright")).toContain("Playwright Browser Automation")
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
it("should handle empty array", () => {
|
|
76
|
-
// #given: empty skill names list
|
|
77
|
-
const skillNames: string[] = []
|
|
78
|
-
|
|
79
|
-
// #when: resolving multiple skills
|
|
80
|
-
const result = resolveMultipleSkills(skillNames)
|
|
81
|
-
|
|
82
|
-
// #then: returns empty resolved and notFound
|
|
83
|
-
expect(result.resolved.size).toBe(0)
|
|
84
|
-
expect(result.notFound).toEqual([])
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
it("should handle all skills not found", () => {
|
|
88
|
-
// #given: list of non-existing skills
|
|
89
|
-
const skillNames = ["skill-one", "skill-two", "skill-three"]
|
|
90
|
-
|
|
91
|
-
// #when: resolving multiple skills
|
|
92
|
-
const result = resolveMultipleSkills(skillNames)
|
|
93
|
-
|
|
94
|
-
// #then: no skills resolved, all in notFound
|
|
95
|
-
expect(result.resolved.size).toBe(0)
|
|
96
|
-
expect(result.notFound).toEqual(["skill-one", "skill-two", "skill-three"])
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
it("should preserve skill order in resolved map", () => {
|
|
100
|
-
// #given: list of skill names in specific order
|
|
101
|
-
const skillNames = ["playwright", "frontend-ui-ux"]
|
|
102
|
-
|
|
103
|
-
// #when: resolving multiple skills
|
|
104
|
-
const result = resolveMultipleSkills(skillNames)
|
|
105
|
-
|
|
106
|
-
// #then: map contains skills with expected keys
|
|
107
|
-
expect(result.resolved.has("playwright")).toBe(true)
|
|
108
|
-
expect(result.resolved.has("frontend-ui-ux")).toBe(true)
|
|
109
|
-
expect(result.resolved.size).toBe(2)
|
|
110
|
-
})
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
describe("resolveSkillContentAsync", () => {
|
|
114
|
-
it("should return template for builtin skill", async () => {
|
|
115
|
-
// #given: builtin skill 'frontend-ui-ux'
|
|
116
|
-
// #when: resolving content async
|
|
117
|
-
const result = await resolveSkillContentAsync("frontend-ui-ux")
|
|
118
|
-
|
|
119
|
-
// #then: returns template string
|
|
120
|
-
expect(result).not.toBeNull()
|
|
121
|
-
expect(typeof result).toBe("string")
|
|
122
|
-
expect(result).toContain("Role: Designer-Turned-Developer")
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
it("should return null for non-existent skill", async () => {
|
|
126
|
-
// #given: non-existent skill name
|
|
127
|
-
// #when: resolving content async
|
|
128
|
-
const result = await resolveSkillContentAsync("definitely-not-a-skill-12345")
|
|
129
|
-
|
|
130
|
-
// #then: returns null
|
|
131
|
-
expect(result).toBeNull()
|
|
132
|
-
})
|
|
133
|
-
})
|
|
134
|
-
|
|
135
|
-
describe("resolveMultipleSkillsAsync", () => {
|
|
136
|
-
it("should resolve builtin skills", async () => {
|
|
137
|
-
// #given: builtin skill names
|
|
138
|
-
const skillNames = ["playwright", "frontend-ui-ux"]
|
|
139
|
-
|
|
140
|
-
// #when: resolving multiple skills async
|
|
141
|
-
const result = await resolveMultipleSkillsAsync(skillNames)
|
|
142
|
-
|
|
143
|
-
// #then: all builtin skills resolved
|
|
144
|
-
expect(result.resolved.size).toBe(2)
|
|
145
|
-
expect(result.notFound).toEqual([])
|
|
146
|
-
expect(result.resolved.get("playwright")).toContain("Playwright Browser Automation")
|
|
147
|
-
expect(result.resolved.get("frontend-ui-ux")).toContain("Designer-Turned-Developer")
|
|
148
|
-
})
|
|
149
|
-
|
|
150
|
-
it("should handle partial success with non-existent skills", async () => {
|
|
151
|
-
// #given: mix of existing and non-existing skills
|
|
152
|
-
const skillNames = ["playwright", "nonexistent-skill-12345"]
|
|
153
|
-
|
|
154
|
-
// #when: resolving multiple skills async
|
|
155
|
-
const result = await resolveMultipleSkillsAsync(skillNames)
|
|
156
|
-
|
|
157
|
-
// #then: existing skills resolved, non-existing in notFound
|
|
158
|
-
expect(result.resolved.size).toBe(1)
|
|
159
|
-
expect(result.notFound).toEqual(["nonexistent-skill-12345"])
|
|
160
|
-
expect(result.resolved.get("playwright")).toContain("Playwright Browser Automation")
|
|
161
|
-
})
|
|
162
|
-
|
|
163
|
-
it("should NOT inject watermark when both options are disabled", async () => {
|
|
164
|
-
// #given: git-master skill with watermark disabled
|
|
165
|
-
const skillNames = ["git-master"]
|
|
166
|
-
const options = {
|
|
167
|
-
gitMasterConfig: {
|
|
168
|
-
commit_footer: false,
|
|
169
|
-
include_co_authored_by: false,
|
|
170
|
-
},
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// #when: resolving with git-master config
|
|
174
|
-
const result = await resolveMultipleSkillsAsync(skillNames, options)
|
|
175
|
-
|
|
176
|
-
// #then: no watermark section injected
|
|
177
|
-
expect(result.resolved.size).toBe(1)
|
|
178
|
-
expect(result.notFound).toEqual([])
|
|
179
|
-
const gitMasterContent = result.resolved.get("git-master")
|
|
180
|
-
expect(gitMasterContent).not.toContain("Ultraworked with")
|
|
181
|
-
expect(gitMasterContent).not.toContain("Co-authored-by: Sisyphus")
|
|
182
|
-
})
|
|
183
|
-
|
|
184
|
-
it("should inject watermark when enabled (default)", async () => {
|
|
185
|
-
// #given: git-master skill with default config (watermark enabled)
|
|
186
|
-
const skillNames = ["git-master"]
|
|
187
|
-
const options = {
|
|
188
|
-
gitMasterConfig: {
|
|
189
|
-
commit_footer: true,
|
|
190
|
-
include_co_authored_by: true,
|
|
191
|
-
},
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// #when: resolving with git-master config
|
|
195
|
-
const result = await resolveMultipleSkillsAsync(skillNames, options)
|
|
196
|
-
|
|
197
|
-
// #then: watermark section is injected
|
|
198
|
-
expect(result.resolved.size).toBe(1)
|
|
199
|
-
const gitMasterContent = result.resolved.get("git-master")
|
|
200
|
-
expect(gitMasterContent).toContain("Ultraworked with [Sisyphus]")
|
|
201
|
-
expect(gitMasterContent).toContain("Co-authored-by: Sisyphus")
|
|
202
|
-
})
|
|
203
|
-
|
|
204
|
-
it("should inject only footer when co-author is disabled", async () => {
|
|
205
|
-
// #given: git-master skill with only footer enabled
|
|
206
|
-
const skillNames = ["git-master"]
|
|
207
|
-
const options = {
|
|
208
|
-
gitMasterConfig: {
|
|
209
|
-
commit_footer: true,
|
|
210
|
-
include_co_authored_by: false,
|
|
211
|
-
},
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// #when: resolving with git-master config
|
|
215
|
-
const result = await resolveMultipleSkillsAsync(skillNames, options)
|
|
216
|
-
|
|
217
|
-
// #then: only footer is injected
|
|
218
|
-
const gitMasterContent = result.resolved.get("git-master")
|
|
219
|
-
expect(gitMasterContent).toContain("Ultraworked with [Sisyphus]")
|
|
220
|
-
expect(gitMasterContent).not.toContain("Co-authored-by: Sisyphus")
|
|
221
|
-
})
|
|
222
|
-
|
|
223
|
-
it("should inject watermark by default when no config provided", async () => {
|
|
224
|
-
// #given: git-master skill with NO config (default behavior)
|
|
225
|
-
const skillNames = ["git-master"]
|
|
226
|
-
|
|
227
|
-
// #when: resolving without any gitMasterConfig
|
|
228
|
-
const result = await resolveMultipleSkillsAsync(skillNames)
|
|
229
|
-
|
|
230
|
-
// #then: watermark is injected (default is ON)
|
|
231
|
-
expect(result.resolved.size).toBe(1)
|
|
232
|
-
const gitMasterContent = result.resolved.get("git-master")
|
|
233
|
-
expect(gitMasterContent).toContain("Ultraworked with [Sisyphus]")
|
|
234
|
-
expect(gitMasterContent).toContain("Co-authored-by: Sisyphus")
|
|
235
|
-
})
|
|
236
|
-
|
|
237
|
-
it("should inject only co-author when footer is disabled", async () => {
|
|
238
|
-
// #given: git-master skill with only co-author enabled
|
|
239
|
-
const skillNames = ["git-master"]
|
|
240
|
-
const options = {
|
|
241
|
-
gitMasterConfig: {
|
|
242
|
-
commit_footer: false,
|
|
243
|
-
include_co_authored_by: true,
|
|
244
|
-
},
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// #when: resolving with git-master config
|
|
248
|
-
const result = await resolveMultipleSkillsAsync(skillNames, options)
|
|
249
|
-
|
|
250
|
-
// #then: only co-author is injected
|
|
251
|
-
const gitMasterContent = result.resolved.get("git-master")
|
|
252
|
-
expect(gitMasterContent).not.toContain("Ultraworked with [Sisyphus]")
|
|
253
|
-
expect(gitMasterContent).toContain("Co-authored-by: Sisyphus")
|
|
254
|
-
})
|
|
255
|
-
|
|
256
|
-
it("should handle empty array", async () => {
|
|
257
|
-
// #given: empty skill names
|
|
258
|
-
const skillNames: string[] = []
|
|
259
|
-
|
|
260
|
-
// #when: resolving multiple skills async
|
|
261
|
-
const result = await resolveMultipleSkillsAsync(skillNames)
|
|
262
|
-
|
|
263
|
-
// #then: empty results
|
|
264
|
-
expect(result.resolved.size).toBe(0)
|
|
265
|
-
expect(result.notFound).toEqual([])
|
|
266
|
-
})
|
|
267
|
-
})
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
import { createBuiltinSkills } from "../builtin-skills/skills"
|
|
2
|
-
import { discoverSkills } from "./loader"
|
|
3
|
-
import type { LoadedSkill } from "./types"
|
|
4
|
-
import { parseFrontmatter } from "../../shared/frontmatter"
|
|
5
|
-
import { readFileSync } from "node:fs"
|
|
6
|
-
import type { GitMasterConfig } from "../../config/schema"
|
|
7
|
-
|
|
8
|
-
export interface SkillResolutionOptions {
|
|
9
|
-
gitMasterConfig?: GitMasterConfig
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
let cachedSkills: LoadedSkill[] | null = null
|
|
13
|
-
|
|
14
|
-
function clearSkillCache(): void {
|
|
15
|
-
cachedSkills = null
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
async function getAllSkills(): Promise<LoadedSkill[]> {
|
|
19
|
-
if (cachedSkills) return cachedSkills
|
|
20
|
-
|
|
21
|
-
const [discoveredSkills, builtinSkillDefs] = await Promise.all([
|
|
22
|
-
discoverSkills({ includeClaudeCodePaths: true }),
|
|
23
|
-
Promise.resolve(createBuiltinSkills()),
|
|
24
|
-
])
|
|
25
|
-
|
|
26
|
-
const builtinSkillsAsLoaded: LoadedSkill[] = builtinSkillDefs.map((skill) => ({
|
|
27
|
-
name: skill.name,
|
|
28
|
-
definition: {
|
|
29
|
-
name: skill.name,
|
|
30
|
-
description: skill.description,
|
|
31
|
-
template: skill.template,
|
|
32
|
-
model: skill.model,
|
|
33
|
-
agent: skill.agent,
|
|
34
|
-
subtask: skill.subtask,
|
|
35
|
-
},
|
|
36
|
-
scope: "builtin" as const,
|
|
37
|
-
license: skill.license,
|
|
38
|
-
compatibility: skill.compatibility,
|
|
39
|
-
metadata: skill.metadata as Record<string, string> | undefined,
|
|
40
|
-
allowedTools: skill.allowedTools,
|
|
41
|
-
mcpConfig: skill.mcpConfig,
|
|
42
|
-
}))
|
|
43
|
-
|
|
44
|
-
const discoveredNames = new Set(discoveredSkills.map((s) => s.name))
|
|
45
|
-
const uniqueBuiltins = builtinSkillsAsLoaded.filter((s) => !discoveredNames.has(s.name))
|
|
46
|
-
|
|
47
|
-
cachedSkills = [...discoveredSkills, ...uniqueBuiltins]
|
|
48
|
-
return cachedSkills
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
async function extractSkillTemplate(skill: LoadedSkill): Promise<string> {
|
|
52
|
-
if (skill.path) {
|
|
53
|
-
const content = readFileSync(skill.path, "utf-8")
|
|
54
|
-
const { body } = parseFrontmatter(content)
|
|
55
|
-
return body.trim()
|
|
56
|
-
}
|
|
57
|
-
return skill.definition.template || ""
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export { clearSkillCache, getAllSkills, extractSkillTemplate }
|
|
61
|
-
|
|
62
|
-
export function injectGitMasterConfig(template: string, config?: GitMasterConfig): string {
|
|
63
|
-
const commitFooter = config?.commit_footer ?? true
|
|
64
|
-
const includeCoAuthoredBy = config?.include_co_authored_by ?? true
|
|
65
|
-
|
|
66
|
-
if (!commitFooter && !includeCoAuthoredBy) {
|
|
67
|
-
return template
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const sections: string[] = []
|
|
71
|
-
|
|
72
|
-
sections.push(`### 5.5 Commit Footer & Co-Author`)
|
|
73
|
-
sections.push(``)
|
|
74
|
-
sections.push(`Add Sisyphus attribution to EVERY commit:`)
|
|
75
|
-
sections.push(``)
|
|
76
|
-
|
|
77
|
-
if (commitFooter) {
|
|
78
|
-
sections.push(`1. **Footer in commit body:**`)
|
|
79
|
-
sections.push("```")
|
|
80
|
-
sections.push(`Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)`)
|
|
81
|
-
sections.push("```")
|
|
82
|
-
sections.push(``)
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if (includeCoAuthoredBy) {
|
|
86
|
-
sections.push(`${commitFooter ? "2" : "1"}. **Co-authored-by trailer:**`)
|
|
87
|
-
sections.push("```")
|
|
88
|
-
sections.push(`Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>`)
|
|
89
|
-
sections.push("```")
|
|
90
|
-
sections.push(``)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
if (commitFooter && includeCoAuthoredBy) {
|
|
94
|
-
sections.push(`**Example (both enabled):**`)
|
|
95
|
-
sections.push("```bash")
|
|
96
|
-
sections.push(`git commit -m "{Commit Message}" -m "Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)" -m "Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>"`)
|
|
97
|
-
sections.push("```")
|
|
98
|
-
} else if (commitFooter) {
|
|
99
|
-
sections.push(`**Example:**`)
|
|
100
|
-
sections.push("```bash")
|
|
101
|
-
sections.push(`git commit -m "{Commit Message}" -m "Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)"`)
|
|
102
|
-
sections.push("```")
|
|
103
|
-
} else if (includeCoAuthoredBy) {
|
|
104
|
-
sections.push(`**Example:**`)
|
|
105
|
-
sections.push("```bash")
|
|
106
|
-
sections.push(`git commit -m "{Commit Message}" -m "Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>"`)
|
|
107
|
-
sections.push("```")
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
const injection = sections.join("\n")
|
|
111
|
-
|
|
112
|
-
const insertionPoint = template.indexOf("```\n</execution>")
|
|
113
|
-
if (insertionPoint !== -1) {
|
|
114
|
-
return template.slice(0, insertionPoint) + "```\n\n" + injection + "\n</execution>" + template.slice(insertionPoint + "```\n</execution>".length)
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return template + "\n\n" + injection
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export function resolveSkillContent(skillName: string, options?: SkillResolutionOptions): string | null {
|
|
121
|
-
const skills = createBuiltinSkills()
|
|
122
|
-
const skill = skills.find((s) => s.name === skillName)
|
|
123
|
-
if (!skill) return null
|
|
124
|
-
|
|
125
|
-
if (skillName === "git-master") {
|
|
126
|
-
return injectGitMasterConfig(skill.template, options?.gitMasterConfig)
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return skill.template
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
export function resolveMultipleSkills(skillNames: string[], options?: SkillResolutionOptions): {
|
|
133
|
-
resolved: Map<string, string>
|
|
134
|
-
notFound: string[]
|
|
135
|
-
} {
|
|
136
|
-
const skills = createBuiltinSkills()
|
|
137
|
-
const skillMap = new Map(skills.map((s) => [s.name, s.template]))
|
|
138
|
-
|
|
139
|
-
const resolved = new Map<string, string>()
|
|
140
|
-
const notFound: string[] = []
|
|
141
|
-
|
|
142
|
-
for (const name of skillNames) {
|
|
143
|
-
const template = skillMap.get(name)
|
|
144
|
-
if (template) {
|
|
145
|
-
if (name === "git-master") {
|
|
146
|
-
resolved.set(name, injectGitMasterConfig(template, options?.gitMasterConfig))
|
|
147
|
-
} else {
|
|
148
|
-
resolved.set(name, template)
|
|
149
|
-
}
|
|
150
|
-
} else {
|
|
151
|
-
notFound.push(name)
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return { resolved, notFound }
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
export async function resolveSkillContentAsync(
|
|
159
|
-
skillName: string,
|
|
160
|
-
options?: SkillResolutionOptions
|
|
161
|
-
): Promise<string | null> {
|
|
162
|
-
const allSkills = await getAllSkills()
|
|
163
|
-
const skill = allSkills.find((s) => s.name === skillName)
|
|
164
|
-
if (!skill) return null
|
|
165
|
-
|
|
166
|
-
const template = await extractSkillTemplate(skill)
|
|
167
|
-
|
|
168
|
-
if (skillName === "git-master") {
|
|
169
|
-
return injectGitMasterConfig(template, options?.gitMasterConfig)
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
return template
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
export async function resolveMultipleSkillsAsync(
|
|
176
|
-
skillNames: string[],
|
|
177
|
-
options?: SkillResolutionOptions
|
|
178
|
-
): Promise<{
|
|
179
|
-
resolved: Map<string, string>
|
|
180
|
-
notFound: string[]
|
|
181
|
-
}> {
|
|
182
|
-
const allSkills = await getAllSkills()
|
|
183
|
-
const skillMap = new Map<string, LoadedSkill>()
|
|
184
|
-
for (const skill of allSkills) {
|
|
185
|
-
skillMap.set(skill.name, skill)
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
const resolved = new Map<string, string>()
|
|
189
|
-
const notFound: string[] = []
|
|
190
|
-
|
|
191
|
-
for (const name of skillNames) {
|
|
192
|
-
const skill = skillMap.get(name)
|
|
193
|
-
if (skill) {
|
|
194
|
-
const template = await extractSkillTemplate(skill)
|
|
195
|
-
if (name === "git-master") {
|
|
196
|
-
resolved.set(name, injectGitMasterConfig(template, options?.gitMasterConfig))
|
|
197
|
-
} else {
|
|
198
|
-
resolved.set(name, template)
|
|
199
|
-
}
|
|
200
|
-
} else {
|
|
201
|
-
notFound.push(name)
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
return { resolved, notFound }
|
|
206
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { CommandDefinition } from "../claude-code-command-loader/types"
|
|
2
|
-
import type { SkillMcpConfig } from "../skill-mcp-manager/types"
|
|
3
|
-
|
|
4
|
-
export type SkillScope = "builtin" | "config" | "user" | "project" | "opencode" | "opencode-project"
|
|
5
|
-
|
|
6
|
-
export interface SkillMetadata {
|
|
7
|
-
name?: string
|
|
8
|
-
description?: string
|
|
9
|
-
model?: string
|
|
10
|
-
"argument-hint"?: string
|
|
11
|
-
agent?: string
|
|
12
|
-
subtask?: boolean
|
|
13
|
-
license?: string
|
|
14
|
-
compatibility?: string
|
|
15
|
-
metadata?: Record<string, string>
|
|
16
|
-
"allowed-tools"?: string
|
|
17
|
-
mcp?: SkillMcpConfig
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface LazyContentLoader {
|
|
21
|
-
loaded: boolean
|
|
22
|
-
content?: string
|
|
23
|
-
load: () => Promise<string>
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export interface LoadedSkill {
|
|
27
|
-
name: string
|
|
28
|
-
path?: string
|
|
29
|
-
resolvedPath?: string
|
|
30
|
-
definition: CommandDefinition
|
|
31
|
-
scope: SkillScope
|
|
32
|
-
license?: string
|
|
33
|
-
compatibility?: string
|
|
34
|
-
metadata?: Record<string, string>
|
|
35
|
-
allowedTools?: string[]
|
|
36
|
-
mcpConfig?: SkillMcpConfig
|
|
37
|
-
lazyContent?: LazyContentLoader
|
|
38
|
-
}
|