compound-engineering-pi 0.2.3
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/LICENSE +21 -0
- package/README.md +124 -0
- package/bin/compound-engineering-pi +12 -0
- package/bin/compound-plugin +12 -0
- package/compound-engineering-pi +12 -0
- package/compound-plugin +5 -0
- package/docs/pi.md +152 -0
- package/extensions/compound-engineering-compat.ts +452 -0
- package/package.json +84 -0
- package/pi-resources/compound-engineering/mcporter.json +7 -0
- package/plugins/coding-tutor/.claude-plugin/plugin.json +9 -0
- package/plugins/coding-tutor/README.md +37 -0
- package/plugins/coding-tutor/commands/quiz-me.md +1 -0
- package/plugins/coding-tutor/commands/sync-tutorials.md +25 -0
- package/plugins/coding-tutor/commands/teach-me.md +1 -0
- package/plugins/coding-tutor/skills/coding-tutor/SKILL.md +214 -0
- package/plugins/coding-tutor/skills/coding-tutor/scripts/create_tutorial.py +207 -0
- package/plugins/coding-tutor/skills/coding-tutor/scripts/index_tutorials.py +193 -0
- package/plugins/coding-tutor/skills/coding-tutor/scripts/quiz_priority.py +190 -0
- package/plugins/coding-tutor/skills/coding-tutor/scripts/setup_tutorials.py +118 -0
- package/plugins/compound-engineering/.claude-plugin/plugin.json +33 -0
- package/plugins/compound-engineering/CHANGELOG.md +457 -0
- package/plugins/compound-engineering/CLAUDE.md +89 -0
- package/plugins/compound-engineering/LICENSE +21 -0
- package/plugins/compound-engineering/README.md +232 -0
- package/plugins/compound-engineering/agents/design/design-implementation-reviewer.md +109 -0
- package/plugins/compound-engineering/agents/design/design-iterator.md +224 -0
- package/plugins/compound-engineering/agents/design/figma-design-sync.md +190 -0
- package/plugins/compound-engineering/agents/docs/ankane-readme-writer.md +65 -0
- package/plugins/compound-engineering/agents/research/best-practices-researcher.md +126 -0
- package/plugins/compound-engineering/agents/research/framework-docs-researcher.md +106 -0
- package/plugins/compound-engineering/agents/research/git-history-analyzer.md +59 -0
- package/plugins/compound-engineering/agents/research/learnings-researcher.md +264 -0
- package/plugins/compound-engineering/agents/research/repo-research-analyst.md +135 -0
- package/plugins/compound-engineering/agents/review/agent-native-reviewer.md +261 -0
- package/plugins/compound-engineering/agents/review/architecture-strategist.md +67 -0
- package/plugins/compound-engineering/agents/review/code-simplicity-reviewer.md +101 -0
- package/plugins/compound-engineering/agents/review/data-integrity-guardian.md +85 -0
- package/plugins/compound-engineering/agents/review/data-migration-expert.md +112 -0
- package/plugins/compound-engineering/agents/review/deployment-verification-agent.md +174 -0
- package/plugins/compound-engineering/agents/review/dhh-rails-reviewer.md +66 -0
- package/plugins/compound-engineering/agents/review/julik-frontend-races-reviewer.md +221 -0
- package/plugins/compound-engineering/agents/review/kieran-python-reviewer.md +133 -0
- package/plugins/compound-engineering/agents/review/kieran-rails-reviewer.md +115 -0
- package/plugins/compound-engineering/agents/review/kieran-typescript-reviewer.md +124 -0
- package/plugins/compound-engineering/agents/review/pattern-recognition-specialist.md +72 -0
- package/plugins/compound-engineering/agents/review/performance-oracle.md +137 -0
- package/plugins/compound-engineering/agents/review/schema-drift-detector.md +154 -0
- package/plugins/compound-engineering/agents/review/security-sentinel.md +114 -0
- package/plugins/compound-engineering/agents/workflow/bug-reproduction-validator.md +82 -0
- package/plugins/compound-engineering/agents/workflow/every-style-editor.md +64 -0
- package/plugins/compound-engineering/agents/workflow/lint.md +16 -0
- package/plugins/compound-engineering/agents/workflow/pr-comment-resolver.md +84 -0
- package/plugins/compound-engineering/agents/workflow/spec-flow-analyzer.md +134 -0
- package/plugins/compound-engineering/commands/agent-native-audit.md +278 -0
- package/plugins/compound-engineering/commands/changelog.md +138 -0
- package/plugins/compound-engineering/commands/create-agent-skill.md +9 -0
- package/plugins/compound-engineering/commands/deepen-plan.md +546 -0
- package/plugins/compound-engineering/commands/deploy-docs.md +113 -0
- package/plugins/compound-engineering/commands/feature-video.md +342 -0
- package/plugins/compound-engineering/commands/generate_command.md +163 -0
- package/plugins/compound-engineering/commands/heal-skill.md +143 -0
- package/plugins/compound-engineering/commands/lfg.md +20 -0
- package/plugins/compound-engineering/commands/release-docs.md +212 -0
- package/plugins/compound-engineering/commands/report-bug.md +151 -0
- package/plugins/compound-engineering/commands/reproduce-bug.md +100 -0
- package/plugins/compound-engineering/commands/resolve_parallel.md +35 -0
- package/plugins/compound-engineering/commands/resolve_todo_parallel.md +37 -0
- package/plugins/compound-engineering/commands/slfg.md +32 -0
- package/plugins/compound-engineering/commands/technical_review.md +8 -0
- package/plugins/compound-engineering/commands/test-browser.md +339 -0
- package/plugins/compound-engineering/commands/test-xcode.md +332 -0
- package/plugins/compound-engineering/commands/triage.md +311 -0
- package/plugins/compound-engineering/commands/workflows/brainstorm.md +124 -0
- package/plugins/compound-engineering/commands/workflows/compound.md +239 -0
- package/plugins/compound-engineering/commands/workflows/plan.md +551 -0
- package/plugins/compound-engineering/commands/workflows/review.md +526 -0
- package/plugins/compound-engineering/commands/workflows/work.md +433 -0
- package/plugins/compound-engineering/skills/agent-browser/SKILL.md +223 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/SKILL.md +435 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/action-parity-discipline.md +409 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/agent-execution-patterns.md +467 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/agent-native-testing.md +582 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/architecture-patterns.md +478 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/dynamic-context-injection.md +338 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/files-universal-interface.md +301 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +359 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/mcp-tool-design.md +506 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/mobile-patterns.md +871 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/product-implications.md +443 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +317 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/self-modification.md +269 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/shared-workspace-architecture.md +680 -0
- package/plugins/compound-engineering/skills/agent-native-architecture/references/system-prompt-design.md +250 -0
- package/plugins/compound-engineering/skills/andrew-kane-gem-writer/SKILL.md +184 -0
- package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
- package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
- package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
- package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/resources.md +119 -0
- package/plugins/compound-engineering/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
- package/plugins/compound-engineering/skills/brainstorming/SKILL.md +190 -0
- package/plugins/compound-engineering/skills/compound-docs/SKILL.md +511 -0
- package/plugins/compound-engineering/skills/compound-docs/assets/critical-pattern-template.md +34 -0
- package/plugins/compound-engineering/skills/compound-docs/assets/resolution-template.md +93 -0
- package/plugins/compound-engineering/skills/compound-docs/references/yaml-schema.md +65 -0
- package/plugins/compound-engineering/skills/compound-docs/schema.yaml +176 -0
- package/plugins/compound-engineering/skills/create-agent-skills/SKILL.md +275 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/api-security.md +226 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/be-clear-and-direct.md +531 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/best-practices.md +404 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/common-patterns.md +595 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/core-principles.md +437 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/executable-code.md +175 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/iteration-and-testing.md +474 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/official-spec.md +134 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/recommended-structure.md +168 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/skill-structure.md +152 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/using-scripts.md +113 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/using-templates.md +112 -0
- package/plugins/compound-engineering/skills/create-agent-skills/references/workflows-and-validation.md +510 -0
- package/plugins/compound-engineering/skills/create-agent-skills/templates/router-skill.md +73 -0
- package/plugins/compound-engineering/skills/create-agent-skills/templates/simple-skill.md +33 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-reference.md +96 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-script.md +93 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-template.md +74 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/add-workflow.md +120 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/audit-skill.md +138 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/create-domain-expertise-skill.md +605 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/create-new-skill.md +191 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/get-guidance.md +121 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/upgrade-to-router.md +161 -0
- package/plugins/compound-engineering/skills/create-agent-skills/workflows/verify-skill.md +204 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/SKILL.md +185 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/references/architecture.md +653 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/references/controllers.md +303 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/references/frontend.md +510 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/references/gems.md +266 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/references/models.md +359 -0
- package/plugins/compound-engineering/skills/dhh-rails-style/references/testing.md +338 -0
- package/plugins/compound-engineering/skills/document-review/SKILL.md +87 -0
- package/plugins/compound-engineering/skills/dspy-ruby/SKILL.md +737 -0
- package/plugins/compound-engineering/skills/dspy-ruby/assets/config-template.rb +187 -0
- package/plugins/compound-engineering/skills/dspy-ruby/assets/module-template.rb +300 -0
- package/plugins/compound-engineering/skills/dspy-ruby/assets/signature-template.rb +221 -0
- package/plugins/compound-engineering/skills/dspy-ruby/references/core-concepts.md +674 -0
- package/plugins/compound-engineering/skills/dspy-ruby/references/observability.md +366 -0
- package/plugins/compound-engineering/skills/dspy-ruby/references/optimization.md +603 -0
- package/plugins/compound-engineering/skills/dspy-ruby/references/providers.md +418 -0
- package/plugins/compound-engineering/skills/dspy-ruby/references/toolsets.md +502 -0
- package/plugins/compound-engineering/skills/every-style-editor/SKILL.md +134 -0
- package/plugins/compound-engineering/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
- package/plugins/compound-engineering/skills/file-todos/SKILL.md +252 -0
- package/plugins/compound-engineering/skills/file-todos/assets/todo-template.md +155 -0
- package/plugins/compound-engineering/skills/frontend-design/SKILL.md +42 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/SKILL.md +237 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/requirements.txt +2 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/scripts/compose_images.py +157 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/scripts/edit_image.py +144 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/scripts/gemini_images.py +263 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/scripts/generate_image.py +133 -0
- package/plugins/compound-engineering/skills/gemini-imagegen/scripts/multi_turn_chat.py +216 -0
- package/plugins/compound-engineering/skills/git-worktree/SKILL.md +302 -0
- package/plugins/compound-engineering/skills/git-worktree/scripts/worktree-manager.sh +337 -0
- package/plugins/compound-engineering/skills/orchestrating-swarms/SKILL.md +1718 -0
- package/plugins/compound-engineering/skills/rclone/SKILL.md +150 -0
- package/plugins/compound-engineering/skills/rclone/scripts/check_setup.sh +60 -0
- package/plugins/compound-engineering/skills/resolve-pr-parallel/SKILL.md +89 -0
- package/plugins/compound-engineering/skills/resolve-pr-parallel/scripts/get-pr-comments +68 -0
- package/plugins/compound-engineering/skills/resolve-pr-parallel/scripts/resolve-pr-thread +23 -0
- package/plugins/compound-engineering/skills/skill-creator/SKILL.md +210 -0
- package/plugins/compound-engineering/skills/skill-creator/scripts/init_skill.py +303 -0
- package/plugins/compound-engineering/skills/skill-creator/scripts/package_skill.py +110 -0
- package/plugins/compound-engineering/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/prompts/deepen-plan.md +549 -0
- package/prompts/feature-video.md +341 -0
- package/prompts/resolve_todo_parallel.md +36 -0
- package/prompts/test-browser.md +342 -0
- package/prompts/workflows-brainstorm.md +123 -0
- package/prompts/workflows-compound.md +238 -0
- package/prompts/workflows-plan.md +550 -0
- package/prompts/workflows-review.md +529 -0
- package/prompts/workflows-work.md +432 -0
- package/skills/agent-browser/SKILL.md +223 -0
- package/skills/agent-native-architecture/SKILL.md +435 -0
- package/skills/agent-native-architecture/references/action-parity-discipline.md +409 -0
- package/skills/agent-native-architecture/references/agent-execution-patterns.md +467 -0
- package/skills/agent-native-architecture/references/agent-native-testing.md +582 -0
- package/skills/agent-native-architecture/references/architecture-patterns.md +478 -0
- package/skills/agent-native-architecture/references/dynamic-context-injection.md +338 -0
- package/skills/agent-native-architecture/references/files-universal-interface.md +301 -0
- package/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +359 -0
- package/skills/agent-native-architecture/references/mcp-tool-design.md +506 -0
- package/skills/agent-native-architecture/references/mobile-patterns.md +871 -0
- package/skills/agent-native-architecture/references/product-implications.md +443 -0
- package/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +317 -0
- package/skills/agent-native-architecture/references/self-modification.md +269 -0
- package/skills/agent-native-architecture/references/shared-workspace-architecture.md +680 -0
- package/skills/agent-native-architecture/references/system-prompt-design.md +250 -0
- package/skills/agent-native-reviewer/SKILL.md +260 -0
- package/skills/andrew-kane-gem-writer/SKILL.md +184 -0
- package/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
- package/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
- package/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
- package/skills/andrew-kane-gem-writer/references/resources.md +119 -0
- package/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
- package/skills/ankane-readme-writer/SKILL.md +63 -0
- package/skills/architecture-strategist/SKILL.md +66 -0
- package/skills/best-practices-researcher/SKILL.md +125 -0
- package/skills/brainstorming/SKILL.md +190 -0
- package/skills/bug-reproduction-validator/SKILL.md +81 -0
- package/skills/code-simplicity-reviewer/SKILL.md +100 -0
- package/skills/compound-docs/SKILL.md +511 -0
- package/skills/compound-docs/assets/critical-pattern-template.md +34 -0
- package/skills/compound-docs/assets/resolution-template.md +93 -0
- package/skills/compound-docs/references/yaml-schema.md +65 -0
- package/skills/compound-docs/schema.yaml +176 -0
- package/skills/create-agent-skills/SKILL.md +275 -0
- package/skills/create-agent-skills/references/api-security.md +226 -0
- package/skills/create-agent-skills/references/be-clear-and-direct.md +531 -0
- package/skills/create-agent-skills/references/best-practices.md +404 -0
- package/skills/create-agent-skills/references/common-patterns.md +595 -0
- package/skills/create-agent-skills/references/core-principles.md +437 -0
- package/skills/create-agent-skills/references/executable-code.md +175 -0
- package/skills/create-agent-skills/references/iteration-and-testing.md +474 -0
- package/skills/create-agent-skills/references/official-spec.md +134 -0
- package/skills/create-agent-skills/references/recommended-structure.md +168 -0
- package/skills/create-agent-skills/references/skill-structure.md +152 -0
- package/skills/create-agent-skills/references/using-scripts.md +113 -0
- package/skills/create-agent-skills/references/using-templates.md +112 -0
- package/skills/create-agent-skills/references/workflows-and-validation.md +510 -0
- package/skills/create-agent-skills/templates/router-skill.md +73 -0
- package/skills/create-agent-skills/templates/simple-skill.md +33 -0
- package/skills/create-agent-skills/workflows/add-reference.md +96 -0
- package/skills/create-agent-skills/workflows/add-script.md +93 -0
- package/skills/create-agent-skills/workflows/add-template.md +74 -0
- package/skills/create-agent-skills/workflows/add-workflow.md +120 -0
- package/skills/create-agent-skills/workflows/audit-skill.md +138 -0
- package/skills/create-agent-skills/workflows/create-domain-expertise-skill.md +605 -0
- package/skills/create-agent-skills/workflows/create-new-skill.md +191 -0
- package/skills/create-agent-skills/workflows/get-guidance.md +121 -0
- package/skills/create-agent-skills/workflows/upgrade-to-router.md +161 -0
- package/skills/create-agent-skills/workflows/verify-skill.md +204 -0
- package/skills/data-integrity-guardian/SKILL.md +84 -0
- package/skills/data-migration-expert/SKILL.md +111 -0
- package/skills/deployment-verification-agent/SKILL.md +173 -0
- package/skills/design-implementation-reviewer/SKILL.md +107 -0
- package/skills/design-iterator/SKILL.md +222 -0
- package/skills/dhh-rails-reviewer/SKILL.md +65 -0
- package/skills/dhh-rails-style/SKILL.md +185 -0
- package/skills/dhh-rails-style/references/architecture.md +653 -0
- package/skills/dhh-rails-style/references/controllers.md +303 -0
- package/skills/dhh-rails-style/references/frontend.md +510 -0
- package/skills/dhh-rails-style/references/gems.md +266 -0
- package/skills/dhh-rails-style/references/models.md +359 -0
- package/skills/dhh-rails-style/references/testing.md +338 -0
- package/skills/document-review/SKILL.md +87 -0
- package/skills/dspy-ruby/SKILL.md +737 -0
- package/skills/dspy-ruby/assets/config-template.rb +187 -0
- package/skills/dspy-ruby/assets/module-template.rb +300 -0
- package/skills/dspy-ruby/assets/signature-template.rb +221 -0
- package/skills/dspy-ruby/references/core-concepts.md +674 -0
- package/skills/dspy-ruby/references/observability.md +366 -0
- package/skills/dspy-ruby/references/optimization.md +603 -0
- package/skills/dspy-ruby/references/providers.md +418 -0
- package/skills/dspy-ruby/references/toolsets.md +502 -0
- package/skills/every-style-editor/SKILL.md +134 -0
- package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
- package/skills/every-style-editor-2/SKILL.md +62 -0
- package/skills/figma-design-sync/SKILL.md +188 -0
- package/skills/file-todos/SKILL.md +252 -0
- package/skills/file-todos/assets/todo-template.md +155 -0
- package/skills/framework-docs-researcher/SKILL.md +105 -0
- package/skills/frontend-design/SKILL.md +42 -0
- package/skills/gemini-imagegen/SKILL.md +237 -0
- package/skills/gemini-imagegen/requirements.txt +2 -0
- package/skills/gemini-imagegen/scripts/compose_images.py +157 -0
- package/skills/gemini-imagegen/scripts/edit_image.py +144 -0
- package/skills/gemini-imagegen/scripts/gemini_images.py +263 -0
- package/skills/gemini-imagegen/scripts/generate_image.py +133 -0
- package/skills/gemini-imagegen/scripts/multi_turn_chat.py +216 -0
- package/skills/git-history-analyzer/SKILL.md +58 -0
- package/skills/git-worktree/SKILL.md +302 -0
- package/skills/git-worktree/scripts/worktree-manager.sh +337 -0
- package/skills/julik-frontend-races-reviewer/SKILL.md +220 -0
- package/skills/kieran-python-reviewer/SKILL.md +132 -0
- package/skills/kieran-rails-reviewer/SKILL.md +114 -0
- package/skills/kieran-typescript-reviewer/SKILL.md +123 -0
- package/skills/learnings-researcher/SKILL.md +263 -0
- package/skills/lint/SKILL.md +14 -0
- package/skills/orchestrating-swarms/SKILL.md +1718 -0
- package/skills/pattern-recognition-specialist/SKILL.md +71 -0
- package/skills/performance-oracle/SKILL.md +136 -0
- package/skills/pr-comment-resolver/SKILL.md +82 -0
- package/skills/rclone/SKILL.md +150 -0
- package/skills/rclone/scripts/check_setup.sh +60 -0
- package/skills/repo-research-analyst/SKILL.md +134 -0
- package/skills/resolve_pr_parallel/SKILL.md +89 -0
- package/skills/resolve_pr_parallel/scripts/get-pr-comments +68 -0
- package/skills/resolve_pr_parallel/scripts/resolve-pr-thread +23 -0
- package/skills/schema-drift-detector/SKILL.md +153 -0
- package/skills/security-sentinel/SKILL.md +113 -0
- package/skills/skill-creator/SKILL.md +210 -0
- package/skills/skill-creator/scripts/init_skill.py +303 -0
- package/skills/skill-creator/scripts/package_skill.py +110 -0
- package/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/skills/spec-flow-analyzer/SKILL.md +133 -0
- package/src/commands/convert.ts +183 -0
- package/src/commands/install.ts +273 -0
- package/src/commands/list.ts +37 -0
- package/src/commands/sync.ts +89 -0
- package/src/converters/claude-to-codex.ts +182 -0
- package/src/converters/claude-to-opencode.ts +395 -0
- package/src/converters/claude-to-pi.ts +205 -0
- package/src/index.ts +22 -0
- package/src/parsers/claude-home.ts +65 -0
- package/src/parsers/claude.ts +252 -0
- package/src/sync/codex.ts +92 -0
- package/src/sync/opencode.ts +75 -0
- package/src/sync/pi.ts +88 -0
- package/src/targets/codex.ts +96 -0
- package/src/targets/index.ts +38 -0
- package/src/targets/opencode.ts +57 -0
- package/src/targets/pi.ts +131 -0
- package/src/templates/pi/compat-extension.ts +452 -0
- package/src/types/claude.ts +90 -0
- package/src/types/codex.ts +23 -0
- package/src/types/opencode.ts +54 -0
- package/src/types/pi.ts +40 -0
- package/src/utils/codex-agents.ts +64 -0
- package/src/utils/files.ts +77 -0
- package/src/utils/frontmatter.ts +65 -0
- package/src/utils/symlink.ts +43 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
# DSPy.rb Observability
|
|
2
|
+
|
|
3
|
+
DSPy.rb provides an event-driven observability system built on OpenTelemetry. The system replaces monkey-patching with structured event emission, pluggable listeners, automatic span creation, and non-blocking Langfuse export.
|
|
4
|
+
|
|
5
|
+
## Event System
|
|
6
|
+
|
|
7
|
+
### Emitting Events
|
|
8
|
+
|
|
9
|
+
Emit structured events with `DSPy.event`:
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
DSPy.event('lm.tokens', {
|
|
13
|
+
'gen_ai.system' => 'openai',
|
|
14
|
+
'gen_ai.request.model' => 'gpt-4',
|
|
15
|
+
input_tokens: 150,
|
|
16
|
+
output_tokens: 50,
|
|
17
|
+
total_tokens: 200
|
|
18
|
+
})
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Event names are **strings** with dot-separated namespaces (e.g., `'llm.generate'`, `'react.iteration_complete'`, `'chain_of_thought.reasoning_complete'`). Do not use symbols for event names.
|
|
22
|
+
|
|
23
|
+
Attributes must be JSON-serializable. DSPy automatically merges context (trace ID, module stack) and creates OpenTelemetry spans.
|
|
24
|
+
|
|
25
|
+
### Global Subscriptions
|
|
26
|
+
|
|
27
|
+
Subscribe to events across the entire application with `DSPy.events.subscribe`:
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
# Exact event name
|
|
31
|
+
subscription_id = DSPy.events.subscribe('lm.tokens') do |event_name, attrs|
|
|
32
|
+
puts "Tokens used: #{attrs[:total_tokens]}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Wildcard pattern -- matches llm.generate, llm.stream, etc.
|
|
36
|
+
DSPy.events.subscribe('llm.*') do |event_name, attrs|
|
|
37
|
+
track_llm_usage(attrs)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Catch-all wildcard
|
|
41
|
+
DSPy.events.subscribe('*') do |event_name, attrs|
|
|
42
|
+
log_everything(event_name, attrs)
|
|
43
|
+
end
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Use global subscriptions for cross-cutting concerns: observability exporters (Langfuse, Datadog), centralized logging, metrics collection.
|
|
47
|
+
|
|
48
|
+
### Module-Scoped Subscriptions
|
|
49
|
+
|
|
50
|
+
Declare listeners inside a `DSPy::Module` subclass. Subscriptions automatically scope to the module instance and its descendants:
|
|
51
|
+
|
|
52
|
+
```ruby
|
|
53
|
+
class ResearchReport < DSPy::Module
|
|
54
|
+
subscribe 'lm.tokens', :track_tokens, scope: :descendants
|
|
55
|
+
|
|
56
|
+
def initialize
|
|
57
|
+
super
|
|
58
|
+
@outliner = DSPy::Predict.new(OutlineSignature)
|
|
59
|
+
@writer = DSPy::Predict.new(SectionWriterSignature)
|
|
60
|
+
@token_count = 0
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def forward(question:)
|
|
64
|
+
outline = @outliner.call(question: question)
|
|
65
|
+
outline.sections.map do |title|
|
|
66
|
+
draft = @writer.call(question: question, section_title: title)
|
|
67
|
+
{ title: title, body: draft.paragraph }
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def track_tokens(_event, attrs)
|
|
72
|
+
@token_count += attrs.fetch(:total_tokens, 0)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The `scope:` parameter accepts:
|
|
78
|
+
- `:descendants` (default) -- receives events from the module **and** every nested module invoked inside it.
|
|
79
|
+
- `DSPy::Module::SubcriptionScope::SelfOnly` -- restricts delivery to events emitted by the module instance itself; ignores descendants.
|
|
80
|
+
|
|
81
|
+
Inspect active subscriptions with `registered_module_subscriptions`. Tear down with `unsubscribe_module_events`.
|
|
82
|
+
|
|
83
|
+
### Unsubscribe and Cleanup
|
|
84
|
+
|
|
85
|
+
Remove a global listener by subscription ID:
|
|
86
|
+
|
|
87
|
+
```ruby
|
|
88
|
+
id = DSPy.events.subscribe('llm.*') { |name, attrs| }
|
|
89
|
+
DSPy.events.unsubscribe(id)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Build tracker classes that manage their own subscription lifecycle:
|
|
93
|
+
|
|
94
|
+
```ruby
|
|
95
|
+
class TokenBudgetTracker
|
|
96
|
+
def initialize(budget:)
|
|
97
|
+
@budget = budget
|
|
98
|
+
@usage = 0
|
|
99
|
+
@subscriptions = []
|
|
100
|
+
@subscriptions << DSPy.events.subscribe('lm.tokens') do |_event, attrs|
|
|
101
|
+
@usage += attrs.fetch(:total_tokens, 0)
|
|
102
|
+
warn("Budget hit") if @usage >= @budget
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def unsubscribe
|
|
107
|
+
@subscriptions.each { |id| DSPy.events.unsubscribe(id) }
|
|
108
|
+
@subscriptions.clear
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Clearing Listeners in Tests
|
|
114
|
+
|
|
115
|
+
Call `DSPy.events.clear_listeners` in `before`/`after` blocks to prevent cross-contamination between test cases:
|
|
116
|
+
|
|
117
|
+
```ruby
|
|
118
|
+
RSpec.configure do |config|
|
|
119
|
+
config.after(:each) { DSPy.events.clear_listeners }
|
|
120
|
+
end
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## dspy-o11y Gems
|
|
124
|
+
|
|
125
|
+
Three gems compose the observability stack:
|
|
126
|
+
|
|
127
|
+
| Gem | Purpose |
|
|
128
|
+
|---|---|
|
|
129
|
+
| `dspy` | Core event bus (`DSPy.event`, `DSPy.events`) -- always available |
|
|
130
|
+
| `dspy-o11y` | OpenTelemetry spans, `AsyncSpanProcessor`, `DSPy::Context.with_span` helpers |
|
|
131
|
+
| `dspy-o11y-langfuse` | Langfuse adapter -- configures OTLP exporter targeting Langfuse endpoints |
|
|
132
|
+
|
|
133
|
+
### Installation
|
|
134
|
+
|
|
135
|
+
```ruby
|
|
136
|
+
# Gemfile
|
|
137
|
+
gem 'dspy'
|
|
138
|
+
gem 'dspy-o11y' # core spans + helpers
|
|
139
|
+
gem 'dspy-o11y-langfuse' # Langfuse/OpenTelemetry adapter (optional)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
If the optional gems are absent, DSPy falls back to logging-only mode with no errors.
|
|
143
|
+
|
|
144
|
+
## Langfuse Integration
|
|
145
|
+
|
|
146
|
+
### Environment Variables
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Required
|
|
150
|
+
export LANGFUSE_PUBLIC_KEY=pk-lf-your-public-key
|
|
151
|
+
export LANGFUSE_SECRET_KEY=sk-lf-your-secret-key
|
|
152
|
+
|
|
153
|
+
# Optional (defaults to https://cloud.langfuse.com)
|
|
154
|
+
export LANGFUSE_HOST=https://us.cloud.langfuse.com
|
|
155
|
+
|
|
156
|
+
# Tuning (optional)
|
|
157
|
+
export DSPY_TELEMETRY_BATCH_SIZE=100 # spans per export batch (default 100)
|
|
158
|
+
export DSPY_TELEMETRY_QUEUE_SIZE=1000 # max queued spans (default 1000)
|
|
159
|
+
export DSPY_TELEMETRY_EXPORT_INTERVAL=60 # seconds between timed exports (default 60)
|
|
160
|
+
export DSPY_TELEMETRY_SHUTDOWN_TIMEOUT=10 # seconds to drain on shutdown (default 10)
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Automatic Configuration
|
|
164
|
+
|
|
165
|
+
Call `DSPy::Observability.configure!` once at boot (it is already called automatically when `require 'dspy'` runs and Langfuse env vars are present):
|
|
166
|
+
|
|
167
|
+
```ruby
|
|
168
|
+
require 'dspy'
|
|
169
|
+
# If LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY are set,
|
|
170
|
+
# DSPy::Observability.configure! runs automatically and:
|
|
171
|
+
# 1. Configures the OpenTelemetry SDK with an OTLP exporter
|
|
172
|
+
# 2. Creates dual output: structured logs AND OpenTelemetry spans
|
|
173
|
+
# 3. Exports spans to Langfuse using proper authentication
|
|
174
|
+
# 4. Falls back gracefully if gems are missing
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Verify status with `DSPy::Observability.enabled?`.
|
|
178
|
+
|
|
179
|
+
### Automatic Tracing
|
|
180
|
+
|
|
181
|
+
With observability enabled, every `DSPy::Module#forward` call, LM request, and tool invocation creates properly nested spans. Langfuse receives hierarchical traces:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
Trace: abc-123-def
|
|
185
|
+
+-- ChainOfThought.forward [2000ms] (observation type: chain)
|
|
186
|
+
+-- llm.generate [1000ms] (observation type: generation)
|
|
187
|
+
Model: gpt-4-0613
|
|
188
|
+
Tokens: 100 in / 50 out / 150 total
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
DSPy maps module classes to Langfuse observation types automatically via `DSPy::ObservationType.for_module_class`:
|
|
192
|
+
|
|
193
|
+
| Module | Observation Type |
|
|
194
|
+
|---|---|
|
|
195
|
+
| `DSPy::LM` (raw chat) | `generation` |
|
|
196
|
+
| `DSPy::ChainOfThought` | `chain` |
|
|
197
|
+
| `DSPy::ReAct` | `agent` |
|
|
198
|
+
| Tool invocations | `tool` |
|
|
199
|
+
| Memory/retrieval | `retriever` |
|
|
200
|
+
| Embedding engines | `embedding` |
|
|
201
|
+
| Evaluation modules | `evaluator` |
|
|
202
|
+
| Generic operations | `span` |
|
|
203
|
+
|
|
204
|
+
## Score Reporting
|
|
205
|
+
|
|
206
|
+
### DSPy.score API
|
|
207
|
+
|
|
208
|
+
Report evaluation scores with `DSPy.score`:
|
|
209
|
+
|
|
210
|
+
```ruby
|
|
211
|
+
# Numeric (default)
|
|
212
|
+
DSPy.score('accuracy', 0.95)
|
|
213
|
+
|
|
214
|
+
# With comment
|
|
215
|
+
DSPy.score('relevance', 0.87, comment: 'High semantic similarity')
|
|
216
|
+
|
|
217
|
+
# Boolean
|
|
218
|
+
DSPy.score('is_valid', 1, data_type: DSPy::Scores::DataType::Boolean)
|
|
219
|
+
|
|
220
|
+
# Categorical
|
|
221
|
+
DSPy.score('sentiment', 'positive', data_type: DSPy::Scores::DataType::Categorical)
|
|
222
|
+
|
|
223
|
+
# Explicit trace binding
|
|
224
|
+
DSPy.score('accuracy', 0.95, trace_id: 'custom-trace-id')
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Available data types: `DSPy::Scores::DataType::Numeric`, `::Boolean`, `::Categorical`.
|
|
228
|
+
|
|
229
|
+
### score.create Events
|
|
230
|
+
|
|
231
|
+
Every `DSPy.score` call emits a `'score.create'` event. Subscribe to react:
|
|
232
|
+
|
|
233
|
+
```ruby
|
|
234
|
+
DSPy.events.subscribe('score.create') do |event_name, attrs|
|
|
235
|
+
puts "#{attrs[:score_name]} = #{attrs[:score_value]}"
|
|
236
|
+
# Also available: attrs[:score_id], attrs[:score_data_type],
|
|
237
|
+
# attrs[:score_comment], attrs[:trace_id], attrs[:observation_id],
|
|
238
|
+
# attrs[:timestamp]
|
|
239
|
+
end
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Async Langfuse Export with DSPy::Scores::Exporter
|
|
243
|
+
|
|
244
|
+
Configure the exporter to send scores to Langfuse in the background:
|
|
245
|
+
|
|
246
|
+
```ruby
|
|
247
|
+
exporter = DSPy::Scores::Exporter.configure(
|
|
248
|
+
public_key: ENV['LANGFUSE_PUBLIC_KEY'],
|
|
249
|
+
secret_key: ENV['LANGFUSE_SECRET_KEY'],
|
|
250
|
+
host: 'https://cloud.langfuse.com'
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
# Scores are now exported automatically via a background Thread::Queue
|
|
254
|
+
DSPy.score('accuracy', 0.95)
|
|
255
|
+
|
|
256
|
+
# Shut down gracefully (waits up to 5 seconds by default)
|
|
257
|
+
exporter.shutdown
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
The exporter subscribes to `'score.create'` events internally, queues them for async processing, and retries with exponential backoff on failure.
|
|
261
|
+
|
|
262
|
+
### Automatic Export with DSPy::Evals
|
|
263
|
+
|
|
264
|
+
Pass `export_scores: true` to `DSPy::Evals` to export per-example scores and an aggregate batch score automatically:
|
|
265
|
+
|
|
266
|
+
```ruby
|
|
267
|
+
evaluator = DSPy::Evals.new(
|
|
268
|
+
program,
|
|
269
|
+
metric: my_metric,
|
|
270
|
+
export_scores: true,
|
|
271
|
+
score_name: 'qa_accuracy'
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
result = evaluator.evaluate(test_examples)
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## DSPy::Context.with_span
|
|
278
|
+
|
|
279
|
+
Create manual spans for custom operations. Requires `dspy-o11y`.
|
|
280
|
+
|
|
281
|
+
```ruby
|
|
282
|
+
DSPy::Context.with_span(operation: 'custom.retrieval', 'retrieval.source' => 'pinecone') do |span|
|
|
283
|
+
results = pinecone_client.query(embedding)
|
|
284
|
+
span&.set_attribute('retrieval.count', results.size) if span
|
|
285
|
+
results
|
|
286
|
+
end
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Pass semantic attributes as keyword arguments alongside `operation:`. The block receives an OpenTelemetry span object (or `nil` when observability is disabled). The span automatically nests under the current parent span and records `duration.ms`, `langfuse.observation.startTime`, and `langfuse.observation.endTime`.
|
|
290
|
+
|
|
291
|
+
Assign a Langfuse observation type to custom spans:
|
|
292
|
+
|
|
293
|
+
```ruby
|
|
294
|
+
DSPy::Context.with_span(
|
|
295
|
+
operation: 'evaluate.batch',
|
|
296
|
+
**DSPy::ObservationType::Evaluator.langfuse_attributes,
|
|
297
|
+
'batch.size' => examples.length
|
|
298
|
+
) do |span|
|
|
299
|
+
run_evaluation(examples)
|
|
300
|
+
end
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Scores reported inside a `with_span` block automatically inherit the current trace context.
|
|
304
|
+
|
|
305
|
+
## Module Stack Metadata
|
|
306
|
+
|
|
307
|
+
When `DSPy::Module#forward` runs, the context layer maintains a module stack. Every event includes:
|
|
308
|
+
|
|
309
|
+
```ruby
|
|
310
|
+
{
|
|
311
|
+
module_path: [
|
|
312
|
+
{ id: "root_uuid", class: "DeepSearch", label: nil },
|
|
313
|
+
{ id: "planner_uuid", class: "DSPy::Predict", label: "planner" }
|
|
314
|
+
],
|
|
315
|
+
module_root: { id: "root_uuid", class: "DeepSearch", label: nil },
|
|
316
|
+
module_leaf: { id: "planner_uuid", class: "DSPy::Predict", label: "planner" },
|
|
317
|
+
module_scope: {
|
|
318
|
+
ancestry_token: "root_uuid>planner_uuid",
|
|
319
|
+
depth: 2
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
| Key | Meaning |
|
|
325
|
+
|---|---|
|
|
326
|
+
| `module_path` | Ordered array of `{id, class, label}` entries from root to leaf |
|
|
327
|
+
| `module_root` | The outermost module in the current call chain |
|
|
328
|
+
| `module_leaf` | The innermost (currently executing) module |
|
|
329
|
+
| `module_scope.ancestry_token` | Stable string of joined UUIDs representing the nesting path |
|
|
330
|
+
| `module_scope.depth` | Integer depth of the current module in the stack |
|
|
331
|
+
|
|
332
|
+
Labels are set via `module_scope_label=` on a module instance or derived automatically from named predictors. Use this metadata to power Langfuse filters, scoped metrics, or custom event routing.
|
|
333
|
+
|
|
334
|
+
## Dedicated Export Worker
|
|
335
|
+
|
|
336
|
+
The `DSPy::Observability::AsyncSpanProcessor` (from `dspy-o11y`) keeps telemetry export off the hot path:
|
|
337
|
+
|
|
338
|
+
- Runs on a `Concurrent::SingleThreadExecutor` -- LLM workflows never compete with OTLP networking.
|
|
339
|
+
- Buffers finished spans in a `Thread::Queue` (max size configurable via `DSPY_TELEMETRY_QUEUE_SIZE`).
|
|
340
|
+
- Drains spans in batches of `DSPY_TELEMETRY_BATCH_SIZE` (default 100). When the queue reaches batch size, an immediate async export fires.
|
|
341
|
+
- A background timer thread triggers periodic export every `DSPY_TELEMETRY_EXPORT_INTERVAL` seconds (default 60).
|
|
342
|
+
- Applies exponential backoff (`0.1 * 2^attempt` seconds) on export failures, up to `DEFAULT_MAX_RETRIES` (3).
|
|
343
|
+
- On shutdown, flushes all remaining spans within `DSPY_TELEMETRY_SHUTDOWN_TIMEOUT` seconds, then terminates the executor.
|
|
344
|
+
- Drops the oldest span when the queue is full, logging `'observability.span_dropped'`.
|
|
345
|
+
|
|
346
|
+
No application code interacts with the processor directly. Configure it entirely through environment variables.
|
|
347
|
+
|
|
348
|
+
## Built-in Events Reference
|
|
349
|
+
|
|
350
|
+
| Event Name | Emitted By | Key Attributes |
|
|
351
|
+
|---|---|---|
|
|
352
|
+
| `lm.tokens` | `DSPy::LM` | `gen_ai.system`, `gen_ai.request.model`, `input_tokens`, `output_tokens`, `total_tokens` |
|
|
353
|
+
| `chain_of_thought.reasoning_complete` | `DSPy::ChainOfThought` | `dspy.signature`, `cot.reasoning_steps`, `cot.reasoning_length`, `cot.has_reasoning` |
|
|
354
|
+
| `react.iteration_complete` | `DSPy::ReAct` | `iteration`, `thought`, `action`, `observation` |
|
|
355
|
+
| `codeact.iteration_complete` | `dspy-code_act` gem | `iteration`, `code_executed`, `execution_result` |
|
|
356
|
+
| `optimization.trial_complete` | Teleprompters (MIPROv2) | `trial_number`, `score` |
|
|
357
|
+
| `score.create` | `DSPy.score` | `score_name`, `score_value`, `score_data_type`, `trace_id` |
|
|
358
|
+
| `span.start` | `DSPy::Context.with_span` | `trace_id`, `span_id`, `parent_span_id`, `operation` |
|
|
359
|
+
|
|
360
|
+
## Best Practices
|
|
361
|
+
|
|
362
|
+
- Use dot-separated string names for events. Follow OpenTelemetry `gen_ai.*` conventions for LLM attributes.
|
|
363
|
+
- Always call `unsubscribe` (or `unsubscribe_module_events` for scoped subscriptions) when a tracker is no longer needed to prevent memory leaks.
|
|
364
|
+
- Call `DSPy.events.clear_listeners` in test teardown to avoid cross-contamination.
|
|
365
|
+
- Wrap risky listener logic in a rescue block. The event system isolates listener failures, but explicit rescue prevents silent swallowing of domain errors.
|
|
366
|
+
- Prefer module-scoped `subscribe` for agent internals. Reserve global `DSPy.events.subscribe` for infrastructure-level concerns.
|