opencode-skills-collection 4.1.14 → 4.1.16
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/bundled-skills/.antigravity-install-manifest.json +4 -1
- package/bundled-skills/00-andruia-consultant/SKILL.md +23 -10
- package/bundled-skills/10-andruia-skill-smith/SKILL.md +18 -14
- package/bundled-skills/20-andruia-niche-intelligence/SKILL.md +40 -15
- package/bundled-skills/360-feedback-system/SKILL.md +7 -10
- package/bundled-skills/3d-web-experience/SKILL.md +91 -47
- package/bundled-skills/acceptance-orchestrator/SKILL.md +6 -7
- package/bundled-skills/access-matrix/SKILL.md +8 -7
- package/bundled-skills/accessibility-compliance-accessibility-audit/SKILL.md +10 -4
- package/bundled-skills/accessibility-compliance-accessibility-audit/resources/implementation-playbook.md +29 -76
- package/bundled-skills/accesslint-audit/SKILL.md +13 -7
- package/bundled-skills/accesslint-diff/SKILL.md +15 -47
- package/bundled-skills/accesslint-scan/SKILL.md +24 -8
- package/bundled-skills/activecampaign-automation/SKILL.md +8 -4
- package/bundled-skills/ad-campaign-analyzer/SKILL.md +11 -9
- package/bundled-skills/address-github-comments/SKILL.md +12 -6
- package/bundled-skills/adhx/SKILL.md +12 -9
- package/bundled-skills/admin-access-register/SKILL.md +20 -26
- package/bundled-skills/advanced-analytics-dashboard/SKILL.md +12 -13
- package/bundled-skills/advanced-evaluation/SKILL.md +21 -44
- package/bundled-skills/aegisops-ai/SKILL.md +19 -19
- package/bundled-skills/agent-creator/SKILL.md +13 -14
- package/bundled-skills/agent-evals/SKILL.md +27 -22
- package/bundled-skills/agent-framework-azure-ai-py/SKILL.md +3 -0
- package/bundled-skills/agent-framework-azure-ai-py/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/agent-framework-azure-ai-py/UPSTREAM-NOTICE.md +14 -0
- package/bundled-skills/agent-framework-azure-ai-py/references/advanced.md +512 -0
- package/bundled-skills/agent-framework-azure-ai-py/references/mcp.md +301 -0
- package/bundled-skills/agent-framework-azure-ai-py/references/threads.md +300 -0
- package/bundled-skills/agent-framework-azure-ai-py/references/tools.md +278 -0
- package/bundled-skills/agent-manager-skill/SKILL.md +10 -4
- package/bundled-skills/agent-memory/SKILL.md +39 -8
- package/bundled-skills/agent-memory-mcp/SKILL.md +11 -2
- package/bundled-skills/agent-memory-systems/SKILL.md +13 -28
- package/bundled-skills/agent-memory-systems/references/detailed-guide.md +59 -257
- package/bundled-skills/agent-orchestration-improve-agent/SKILL.md +12 -7
- package/bundled-skills/agent-orchestration-multi-agent-optimize/SKILL.md +14 -24
- package/bundled-skills/agent-orchestrator/SKILL.md +30 -20
- package/bundled-skills/agent-orchestrator/references/capability-taxonomy.md +9 -9
- package/bundled-skills/agent-orchestrator/references/orchestration-patterns.md +2 -2
- package/bundled-skills/agent-orchestrator/scripts/match_skills.py +49 -51
- package/bundled-skills/agent-orchestrator/scripts/orchestrate.py +71 -32
- package/bundled-skills/agent-orchestrator/scripts/scan_registry.py +92 -68
- package/bundled-skills/agent-self-scheduling/SKILL.md +11 -8
- package/bundled-skills/agent-squad/alex/SKILL.md +6 -1
- package/bundled-skills/agent-squad/aria/SKILL.md +7 -2
- package/bundled-skills/agent-squad/dep/SKILL.md +11 -4
- package/bundled-skills/agent-squad/luna/SKILL.md +10 -5
- package/bundled-skills/agent-squad/mason/SKILL.md +10 -5
- package/bundled-skills/agent-squad/max/SKILL.md +10 -3
- package/bundled-skills/agent-squad/quinn/SKILL.md +12 -5
- package/bundled-skills/agent-squad/rex/SKILL.md +7 -2
- package/bundled-skills/agentflow/SKILL.md +22 -15
- package/bundled-skills/agentfolio/SKILL.md +3 -2
- package/bundled-skills/agentic-actions-auditor/SKILL.md +35 -27
- package/bundled-skills/agentmail/SKILL.md +33 -58
- package/bundled-skills/agents-md/SKILL.md +1 -3
- package/bundled-skills/agents-v2-py/SKILL.md +57 -58
- package/bundled-skills/agenttrace-session-audit/SKILL.md +3 -2
- package/bundled-skills/agy-auto/SKILL.md +11 -10
- package/bundled-skills/ai-agent-development/SKILL.md +6 -0
- package/bundled-skills/ai-agent-evaluation-benchmarking/SKILL.md +15 -10
- package/bundled-skills/ai-agent-tool-routing/SKILL.md +98 -116
- package/bundled-skills/ai-agents-architect/SKILL.md +2 -2
- package/bundled-skills/ai-analyzer/SKILL.md +25 -10
- package/bundled-skills/ai-code-generation-guardrails/SKILL.md +99 -126
- package/bundled-skills/ai-dev-jobs-mcp/SKILL.md +8 -4
- package/bundled-skills/ai-engineer/SKILL.md +13 -7
- package/bundled-skills/ai-engineering-toolkit/SKILL.md +11 -7
- package/bundled-skills/ai-headshot-studio/SKILL.md +9 -7
- package/bundled-skills/ai-image-generation-studio/SKILL.md +9 -7
- package/bundled-skills/ai-inference-service-mesh/SKILL.md +18 -43
- package/bundled-skills/ai-logo-maker/SKILL.md +8 -4
- package/bundled-skills/ai-loop/SKILL.md +4 -4
- package/bundled-skills/ai-ml/SKILL.md +4 -0
- package/bundled-skills/ai-multilingual-dubbing/SKILL.md +9 -3
- package/bundled-skills/ai-native-cli/SKILL.md +10 -7
- package/bundled-skills/ai-photo-restyler/SKILL.md +8 -4
- package/bundled-skills/ai-pipeline-orchestration/SKILL.md +36 -18
- package/bundled-skills/ai-podcast-voiceover/SKILL.md +9 -3
- package/bundled-skills/ai-prompt-regression-testing/SKILL.md +100 -112
- package/bundled-skills/ai-red-teaming/SKILL.md +55 -35
- package/bundled-skills/ai-security-hardening/SKILL.md +17 -25
- package/bundled-skills/ai-sre-incident-response/SKILL.md +13 -12
- package/bundled-skills/ai-studio-image/SKILL.md +8 -0
- package/bundled-skills/akf-trust-metadata/SKILL.md +8 -2
- package/bundled-skills/alerting-oncall/SKILL.md +1 -0
- package/bundled-skills/alerting-oncall/references/details.md +1 -5
- package/bundled-skills/alpha-vantage/SKILL.md +0 -4
- package/bundled-skills/angular-migration/SKILL.md +14 -0
- package/bundled-skills/animejs-animation/SKILL.md +8 -3
- package/bundled-skills/anti-deception/SKILL.md +5 -3
- package/bundled-skills/anti-reversing-techniques/SKILL.md +1 -1
- package/bundled-skills/anti-sleep/SKILL.md +4 -2
- package/bundled-skills/antigravity-design-expert/SKILL.md +3 -3
- package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +9 -2
- package/bundled-skills/api-analyzer/SKILL.md +7 -29
- package/bundled-skills/api-contract-testing/SKILL.md +116 -0
- package/bundled-skills/api-designer/SKILL.md +9 -0
- package/bundled-skills/api-documentation/SKILL.md +7 -1
- package/bundled-skills/api-integration/SKILL.md +6 -22
- package/bundled-skills/api-rate-limit-handler/SKILL.md +34 -27
- package/bundled-skills/api-sdk-generator/SKILL.md +0 -21
- package/bundled-skills/api-testing-observability-api-mock/resources/implementation-playbook.md +31 -11
- package/bundled-skills/apk-reverse/SKILL.md +14 -0
- package/bundled-skills/apk-reverse/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/apk-reverse/UPSTREAM-NOTICE.md +11 -0
- package/bundled-skills/apk-reverse/scripts/manifest-summary.ps1 +80 -0
- package/bundled-skills/architecture-review/SKILL.md +4 -4
- package/bundled-skills/arm-cortex-expert/SKILL.md +0 -1
- package/bundled-skills/arrowspace/SKILL.md +23 -21
- package/bundled-skills/ask-questions-if-underspecified/SKILL.md +4 -4
- package/bundled-skills/audit-logging/SKILL.md +10 -77
- package/bundled-skills/automated-triage/SKILL.md +3 -0
- package/bundled-skills/automated-triage/UPSTREAM-LICENSE.txt +201 -0
- package/bundled-skills/automated-triage/UPSTREAM-NOTICE.md +12 -0
- package/bundled-skills/automated-triage/references/triage-example.md +115 -0
- package/bundled-skills/automated-triage/references/triage-stages.md +141 -0
- package/bundled-skills/avoid-ai-writing/SKILL.md +4 -2
- package/bundled-skills/awareness-stage-mapper/SKILL.md +17 -9
- package/bundled-skills/aws-cdk-development/SKILL.md +7 -0
- package/bundled-skills/aws-cdk-development/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/aws-cdk-development/UPSTREAM-NOTICE.md +14 -0
- package/bundled-skills/aws-cdk-development/references/cdk-patterns.md +431 -0
- package/bundled-skills/aws-cdk-development/scripts/validate-stack.sh +247 -0
- package/bundled-skills/aws-skills/SKILL.md +16 -21
- package/bundled-skills/aws-sst-development/SKILL.md +3 -0
- package/bundled-skills/aws-sst-development/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/aws-sst-development/UPSTREAM-NOTICE.md +13 -0
- package/bundled-skills/aws-sst-development/references/authoring.md +506 -0
- package/bundled-skills/aws-sst-development/references/deploy-and-troubleshoot.md +182 -0
- package/bundled-skills/aws-sst-development/references/testing.md +126 -0
- package/bundled-skills/awt-e2e-testing/SKILL.md +7 -1
- package/bundled-skills/azd-deployment/SKILL.md +45 -51
- package/bundled-skills/azure-ai-agents-persistent-java/SKILL.md +35 -19
- package/bundled-skills/azure-ai-projects-py/SKILL.md +7 -0
- package/bundled-skills/azure-ai-projects-py/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/azure-ai-projects-py/UPSTREAM-NOTICE.md +23 -0
- package/bundled-skills/azure-ai-projects-py/references/agents.md +295 -0
- package/bundled-skills/azure-ai-projects-py/references/api-reference.md +1150 -0
- package/bundled-skills/azure-ai-projects-py/references/async-patterns.md +258 -0
- package/bundled-skills/azure-ai-projects-py/references/built-in-evaluators.md +427 -0
- package/bundled-skills/azure-ai-projects-py/references/connections.md +203 -0
- package/bundled-skills/azure-ai-projects-py/references/custom-evaluators.md +450 -0
- package/bundled-skills/azure-ai-projects-py/references/datasets-indexes.md +177 -0
- package/bundled-skills/azure-ai-projects-py/references/deployments.md +134 -0
- package/bundled-skills/azure-ai-projects-py/references/evaluation.md +349 -0
- package/bundled-skills/azure-ai-projects-py/references/tools.md +464 -0
- package/bundled-skills/azure-ai-projects-py/scripts/run_batch_evaluation.py +409 -0
- package/bundled-skills/azure-ai-transcription-py/SKILL.md +30 -50
- package/bundled-skills/azure-ai-voicelive-py/SKILL.md +3 -0
- package/bundled-skills/azure-ai-voicelive-py/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/azure-ai-voicelive-py/UPSTREAM-NOTICE.md +15 -0
- package/bundled-skills/azure-ai-voicelive-py/references/api-reference.md +344 -0
- package/bundled-skills/azure-ai-voicelive-py/references/examples.md +558 -0
- package/bundled-skills/azure-ai-voicelive-py/references/models.md +737 -0
- package/bundled-skills/azure-communication-callingserver-java/SKILL.md +10 -9
- package/bundled-skills/azure-cosmos-db-py/SKILL.md +7 -0
- package/bundled-skills/azure-cosmos-db-py/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/azure-cosmos-db-py/UPSTREAM-NOTICE.md +20 -0
- package/bundled-skills/azure-cosmos-db-py/assets/conftest_template.py +332 -0
- package/bundled-skills/azure-cosmos-db-py/assets/cosmos_client_template.py +225 -0
- package/bundled-skills/azure-cosmos-db-py/assets/service_template.py +314 -0
- package/bundled-skills/azure-cosmos-db-py/references/client-setup.md +214 -0
- package/bundled-skills/azure-cosmos-db-py/references/error-handling.md +382 -0
- package/bundled-skills/azure-cosmos-db-py/references/partitioning.md +270 -0
- package/bundled-skills/azure-cosmos-db-py/references/service-layer.md +305 -0
- package/bundled-skills/azure-cosmos-db-py/references/testing.md +495 -0
- package/bundled-skills/azure-cosmos-py/SKILL.md +11 -0
- package/bundled-skills/azure-cosmos-py/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/azure-cosmos-py/UPSTREAM-NOTICE.md +14 -0
- package/bundled-skills/azure-cosmos-py/references/partitioning.md +346 -0
- package/bundled-skills/azure-cosmos-py/references/query-patterns.md +395 -0
- package/bundled-skills/azure-cosmos-rust/SKILL.md +30 -22
- package/bundled-skills/azure-eventhub-py/SKILL.md +7 -0
- package/bundled-skills/azure-eventhub-py/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/azure-eventhub-py/UPSTREAM-NOTICE.md +15 -0
- package/bundled-skills/azure-eventhub-py/references/checkpointing.md +312 -0
- package/bundled-skills/azure-eventhub-py/references/partitions.md +346 -0
- package/bundled-skills/azure-eventhub-py/scripts/setup_consumer.py +422 -0
- package/bundled-skills/azure-eventhub-rust/SKILL.md +28 -13
- package/bundled-skills/azure-identity-rust/SKILL.md +16 -10
- package/bundled-skills/azure-keyvault-keys-rust/SKILL.md +13 -8
- package/bundled-skills/azure-keyvault-secrets-rust/SKILL.md +12 -6
- package/bundled-skills/azure-mgmt-apimanagement-dotnet/SKILL.md +11 -0
- package/bundled-skills/azure-mgmt-apimanagement-dotnet/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/azure-mgmt-apimanagement-dotnet/UPSTREAM-NOTICE.md +15 -0
- package/bundled-skills/azure-mgmt-apimanagement-dotnet/references/apis-operations.md +168 -0
- package/bundled-skills/azure-mgmt-apimanagement-dotnet/references/products-subscriptions.md +173 -0
- package/bundled-skills/azure-mgmt-apimanagement-dotnet/references/service-management.md +154 -0
- package/bundled-skills/azure-resource-manager-cosmosdb-dotnet/SKILL.md +3 -0
- package/bundled-skills/azure-resource-manager-cosmosdb-dotnet/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/azure-resource-manager-cosmosdb-dotnet/UPSTREAM-NOTICE.md +15 -0
- package/bundled-skills/azure-resource-manager-cosmosdb-dotnet/references/account-management.md +279 -0
- package/bundled-skills/azure-resource-manager-cosmosdb-dotnet/references/sql-resources.md +373 -0
- package/bundled-skills/azure-resource-manager-cosmosdb-dotnet/references/throughput.md +308 -0
- package/bundled-skills/azure-resource-manager-sql-dotnet/SKILL.md +3 -0
- package/bundled-skills/azure-resource-manager-sql-dotnet/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/azure-resource-manager-sql-dotnet/UPSTREAM-NOTICE.md +15 -0
- package/bundled-skills/azure-resource-manager-sql-dotnet/references/database-operations.md +268 -0
- package/bundled-skills/azure-resource-manager-sql-dotnet/references/elastic-pools.md +234 -0
- package/bundled-skills/azure-resource-manager-sql-dotnet/references/server-management.md +192 -0
- package/bundled-skills/azure-search-documents-dotnet/SKILL.md +3 -0
- package/bundled-skills/azure-search-documents-dotnet/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/azure-search-documents-dotnet/UPSTREAM-NOTICE.md +14 -0
- package/bundled-skills/azure-search-documents-dotnet/references/semantic-search.md +241 -0
- package/bundled-skills/azure-search-documents-dotnet/references/vector-search.md +236 -0
- package/bundled-skills/azure-servicebus-py/SKILL.md +7 -0
- package/bundled-skills/azure-servicebus-py/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/azure-servicebus-py/UPSTREAM-NOTICE.md +15 -0
- package/bundled-skills/azure-servicebus-py/references/dead-letter.md +418 -0
- package/bundled-skills/azure-servicebus-py/references/patterns.md +405 -0
- package/bundled-skills/azure-servicebus-py/scripts/setup_servicebus.py +384 -0
- package/bundled-skills/azure-speech-to-text-rest-py/SKILL.md +3 -0
- package/bundled-skills/azure-speech-to-text-rest-py/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/azure-speech-to-text-rest-py/UPSTREAM-NOTICE.md +13 -0
- package/bundled-skills/azure-speech-to-text-rest-py/references/pronunciation-assessment.md +276 -0
- package/bundled-skills/azure-storage-blob-rust/SKILL.md +29 -21
- package/bundled-skills/baseline-ui/SKILL.md +2 -2
- package/bundled-skills/bash-scripting/SKILL.md +10 -2
- package/bundled-skills/bazel-build-optimization/SKILL.md +0 -1
- package/bundled-skills/bdistill-behavioral-xray/SKILL.md +5 -5
- package/bundled-skills/bdistill-knowledge-extraction/SKILL.md +9 -6
- package/bundled-skills/beautiful-prose/SKILL.md +1 -2
- package/bundled-skills/bevy-ecs-expert/SKILL.md +9 -7
- package/bundled-skills/billing-automation/resources/implementation-playbook.md +56 -513
- package/bundled-skills/binary-analysis-patterns/SKILL.md +0 -1
- package/bundled-skills/biopython/SKILL.md +3 -0
- package/bundled-skills/biopython/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/biopython/UPSTREAM-NOTICE.md +17 -0
- package/bundled-skills/biopython/references/advanced.md +577 -0
- package/bundled-skills/biopython/references/alignment.md +368 -0
- package/bundled-skills/biopython/references/blast.md +455 -0
- package/bundled-skills/biopython/references/databases.md +487 -0
- package/bundled-skills/biopython/references/phylogenetics.md +566 -0
- package/bundled-skills/biopython/references/sequence_io.md +285 -0
- package/bundled-skills/biopython/references/structure.md +564 -0
- package/bundled-skills/blockchain-developer/SKILL.md +0 -1
- package/bundled-skills/blueprint/SKILL.md +6 -8
- package/bundled-skills/brain-to-docs/SKILL.md +4 -4
- package/bundled-skills/brand-growth-system-builder/SKILL.md +10 -0
- package/bundled-skills/brand-perception-psychologist/SKILL.md +16 -8
- package/bundled-skills/browser-bridge/SKILL.md +101 -0
- package/bundled-skills/build/SKILL.md +15 -10
- package/bundled-skills/build/references/detailed-guide.md +38 -14
- package/bundled-skills/burpsuite-project-parser/SKILL.md +7 -0
- package/bundled-skills/buywhere-product-catalog/SKILL.md +6 -5
- package/bundled-skills/c-pro/SKILL.md +8 -6
- package/bundled-skills/c4-architecture-c4-architecture/SKILL.md +0 -1
- package/bundled-skills/c4-code/SKILL.md +0 -1
- package/bundled-skills/c4-component/SKILL.md +0 -1
- package/bundled-skills/c4-container/SKILL.md +0 -1
- package/bundled-skills/c4-context/SKILL.md +0 -1
- package/bundled-skills/cdk-patterns/SKILL.md +7 -0
- package/bundled-skills/changelog-entry/SKILL.md +6 -4
- package/bundled-skills/check-identity-pack/SKILL.md +7 -8
- package/bundled-skills/chrome-extension-developer/SKILL.md +8 -4
- package/bundled-skills/ci-cd-and-automation/SKILL.md +15 -3
- package/bundled-skills/cirq/SKILL.md +3 -0
- package/bundled-skills/cirq/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/cirq/UPSTREAM-NOTICE.md +16 -0
- package/bundled-skills/cirq/references/building.md +307 -0
- package/bundled-skills/cirq/references/experiments.md +572 -0
- package/bundled-skills/cirq/references/hardware.md +527 -0
- package/bundled-skills/cirq/references/noise.md +514 -0
- package/bundled-skills/cirq/references/simulation.md +353 -0
- package/bundled-skills/cirq/references/transformation.md +416 -0
- package/bundled-skills/cis-benchmarks/SKILL.md +16 -9
- package/bundled-skills/clarvia-aeo-check/SKILL.md +9 -9
- package/bundled-skills/claude-ally-health/SKILL.md +17 -6
- package/bundled-skills/claude-code-guide/SKILL.md +9 -5
- package/bundled-skills/claude-scientific-skills/SKILL.md +15 -3
- package/bundled-skills/claude-speed-reader/SKILL.md +13 -3
- package/bundled-skills/claude-win11-speckit-update-skill/SKILL.md +13 -7
- package/bundled-skills/cline-pilot/SKILL.md +10 -0
- package/bundled-skills/closed-loop-delivery/SKILL.md +7 -7
- package/bundled-skills/cloud-architect/SKILL.md +0 -1
- package/bundled-skills/cloudflare-workers-expert/SKILL.md +6 -5
- package/bundled-skills/cloudformation-best-practices/SKILL.md +4 -3
- package/bundled-skills/cmux/SKILL.md +8 -0
- package/bundled-skills/code-refactoring-context-restore/SKILL.md +1 -1
- package/bundled-skills/code-review-ai-ai-review/SKILL.md +8 -1
- package/bundled-skills/code-review-and-quality/SKILL.md +9 -0
- package/bundled-skills/code-reviewer/SKILL.md +0 -1
- package/bundled-skills/codex-review/SKILL.md +3 -2
- package/bundled-skills/commit/SKILL.md +12 -11
- package/bundled-skills/comprehensive-review-full-review/SKILL.md +0 -1
- package/bundled-skills/computer-vision-expert/SKILL.md +9 -8
- package/bundled-skills/concise-planning/SKILL.md +7 -7
- package/bundled-skills/conductor-implement/SKILL.md +0 -1
- package/bundled-skills/conductor-new-track/SKILL.md +0 -1
- package/bundled-skills/conductor-revert/SKILL.md +0 -1
- package/bundled-skills/conductor-setup/SKILL.md +42 -25
- package/bundled-skills/conductor-status/SKILL.md +0 -1
- package/bundled-skills/conductor-validator/SKILL.md +15 -19
- package/bundled-skills/constant-time-analysis/SKILL.md +3 -0
- package/bundled-skills/constant-time-analysis/UPSTREAM-LICENSE.txt +427 -0
- package/bundled-skills/constant-time-analysis/UPSTREAM-NOTICE.md +18 -0
- package/bundled-skills/constant-time-analysis/references/compiled.md +129 -0
- package/bundled-skills/constant-time-analysis/references/javascript.md +136 -0
- package/bundled-skills/constant-time-analysis/references/kotlin.md +252 -0
- package/bundled-skills/constant-time-analysis/references/php.md +172 -0
- package/bundled-skills/constant-time-analysis/references/python.md +179 -0
- package/bundled-skills/constant-time-analysis/references/ruby.md +198 -0
- package/bundled-skills/constant-time-analysis/references/swift.md +288 -0
- package/bundled-skills/constant-time-analysis/references/vm-compiled.md +354 -0
- package/bundled-skills/container-hardening/SKILL.md +23 -24
- package/bundled-skills/content-marketer/SKILL.md +0 -1
- package/bundled-skills/content-strategy/SKILL.md +1 -1
- package/bundled-skills/content-strategy/references/headless-cms.md +5 -3
- package/bundled-skills/context-kit/SKILL.md +8 -0
- package/bundled-skills/context-management-context-restore/SKILL.md +1 -1
- package/bundled-skills/context-management-context-save/SKILL.md +0 -1
- package/bundled-skills/context-manager/SKILL.md +0 -1
- package/bundled-skills/context7-auto-research/SKILL.md +3 -3
- package/bundled-skills/copy-editing/SKILL.md +4 -0
- package/bundled-skills/copywriting-psychologist/SKILL.md +17 -9
- package/bundled-skills/cost-optimization/SKILL.md +11 -1
- package/bundled-skills/cost-optimization/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/cost-optimization/UPSTREAM-NOTICE.md +11 -0
- package/bundled-skills/cost-optimization/references/tagging-standards.md +23 -0
- package/bundled-skills/cowork-to-code-bridge/SKILL.md +9 -0
- package/bundled-skills/create-issue-gate/SKILL.md +5 -5
- package/bundled-skills/create-pr/SKILL.md +2 -0
- package/bundled-skills/crossframe-suite/SKILL.md +8 -0
- package/bundled-skills/crypto-bd-agent/SKILL.md +1 -2
- package/bundled-skills/csharp-pro/SKILL.md +5 -7
- package/bundled-skills/csv-manual-export/SKILL.md +1 -2
- package/bundled-skills/customer-psychographic-profiler/SKILL.md +16 -8
- package/bundled-skills/customer-support/SKILL.md +0 -1
- package/bundled-skills/data-engineering-data-driven-feature/SKILL.md +0 -1
- package/bundled-skills/data-privacy-controls/SKILL.md +10 -19
- package/bundled-skills/data-storytelling/SKILL.md +4 -2
- package/bundled-skills/database-admin/SKILL.md +0 -1
- package/bundled-skills/database-design/SKILL.md +5 -1
- package/bundled-skills/database-design/database-selection.md +1 -1
- package/bundled-skills/database-design/orm-selection.md +1 -1
- package/bundled-skills/database-design/scripts/schema_validator.py +17 -8
- package/bundled-skills/database-migration/SKILL.md +14 -1
- package/bundled-skills/database-migrations-sql-migrations/resources/implementation-playbook.md +31 -283
- package/bundled-skills/database-optimizer/SKILL.md +0 -1
- package/bundled-skills/debug-buttercup/SKILL.md +8 -0
- package/bundled-skills/debugger/SKILL.md +4 -3
- package/bundled-skills/debugging-toolkit/SKILL.md +2 -2
- package/bundled-skills/debugging-toolkit-smart-debug/SKILL.md +14 -10
- package/bundled-skills/deep-research/SKILL.md +24 -13
- package/bundled-skills/deep-research/UPSTREAM-LICENSE.txt +190 -0
- package/bundled-skills/deep-research/UPSTREAM-NOTICE.md +11 -0
- package/bundled-skills/deep-research/requirements.txt +2 -0
- package/bundled-skills/deep-research/scripts/research.py +802 -0
- package/bundled-skills/defi-protocol-templates/SKILL.md +16 -1
- package/bundled-skills/defuddle/SKILL.md +9 -6
- package/bundled-skills/delegating-to-agents/SKILL.md +12 -13
- package/bundled-skills/dependency-management-deps-audit/resources/implementation-playbook.md +32 -289
- package/bundled-skills/dependency-upgrade/SKILL.md +14 -1
- package/bundled-skills/deployment-pipeline-design/SKILL.md +11 -111
- package/bundled-skills/deployment-validation-config-validate/SKILL.md +1 -1
- package/bundled-skills/deprecation-and-migration/SKILL.md +5 -3
- package/bundled-skills/design-orchestration/SKILL.md +4 -4
- package/bundled-skills/design-spells/SKILL.md +4 -4
- package/bundled-skills/detect-ai-text/SKILL.md +4 -4
- package/bundled-skills/deterministic-design/SKILL.md +5 -4
- package/bundled-skills/devcontainer-setup/SKILL.md +3 -0
- package/bundled-skills/devcontainer-setup/UPSTREAM-LICENSE.txt +427 -0
- package/bundled-skills/devcontainer-setup/UPSTREAM-NOTICE.md +12 -0
- package/bundled-skills/devcontainer-setup/references/dockerfile-best-practices.md +102 -0
- package/bundled-skills/devcontainer-setup/references/features-vs-dockerfile.md +22 -0
- package/bundled-skills/diagram-generator/SKILL.md +6 -0
- package/bundled-skills/diagram-generator/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/diagram-generator/UPSTREAM-NOTICE.md +11 -0
- package/bundled-skills/diagram-generator/scripts/render_diagram.py +169 -0
- package/bundled-skills/django-access-review/SKILL.md +20 -12
- package/bundled-skills/django-perf-review/SKILL.md +1 -1
- package/bundled-skills/doc-coauthoring/SKILL.md +1 -1
- package/bundled-skills/doc2math/SKILL.md +10 -9
- package/bundled-skills/docker-compose/SKILL.md +17 -11
- package/bundled-skills/docker-expert/SKILL.md +57 -53
- package/bundled-skills/docker-management/SKILL.md +17 -13
- package/bundled-skills/docs-architect/SKILL.md +0 -1
- package/bundled-skills/docs-generator/SKILL.md +7 -1
- package/bundled-skills/docs-generator/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/docs-generator/UPSTREAM-NOTICE.md +15 -0
- package/bundled-skills/docs-generator/scripts/case-init.ps1 +379 -0
- package/bundled-skills/docs-generator/scripts/lib/HostRuntime.ps1 +58 -0
- package/bundled-skills/docs-generator/scripts/lib/WorkRoot.ps1 +33 -0
- package/bundled-skills/documentation/SKILL.md +5 -1
- package/bundled-skills/documentation-and-adrs/SKILL.md +7 -5
- package/bundled-skills/documentation-templates/SKILL.md +8 -6
- package/bundled-skills/dotnet-architect/SKILL.md +0 -1
- package/bundled-skills/doubt-driven-development/SKILL.md +8 -0
- package/bundled-skills/dx-optimizer/SKILL.md +8 -8
- package/bundled-skills/e2e-testing/SKILL.md +4 -0
- package/bundled-skills/eas-workflows/SKILL.md +60 -27
- package/bundled-skills/eas-workflows/agents/openai.yaml +1 -1
- package/bundled-skills/eas-workflows/scripts/fetch.js +131 -82
- package/bundled-skills/eas-workflows/scripts/package.json +4 -0
- package/bundled-skills/elixir-pro/SKILL.md +5 -7
- package/bundled-skills/emblemai-crypto-wallet/SKILL.md +7 -6
- package/bundled-skills/emotional-arc-designer/SKILL.md +17 -9
- package/bundled-skills/error-debugging-multi-agent-review/SKILL.md +1 -1
- package/bundled-skills/error-detective/SKILL.md +7 -3
- package/bundled-skills/error-diagnostics-smart-debug/SKILL.md +14 -10
- package/bundled-skills/error-handling-patterns/resources/implementation-playbook.md +21 -72
- package/bundled-skills/event-sourcing-architect/SKILL.md +4 -3
- package/bundled-skills/exa-search/SKILL.md +4 -2
- package/bundled-skills/executing-plans/SKILL.md +8 -8
- package/bundled-skills/expo-ui-jetpack-compose/SKILL.md +4 -7
- package/bundled-skills/expo-ui-swift-ui/SKILL.md +5 -8
- package/bundled-skills/fact-check-x-unified/SKILL.md +25 -15
- package/bundled-skills/fact-check-x-unified/UPSTREAM-NOTICE.md +9 -0
- package/bundled-skills/fact-check-x-unified/scripts/fact_check_x.py +10 -5
- package/bundled-skills/fact-check-x-unified/scripts/trusted_search_config.py +49 -8
- package/bundled-skills/fact-check-x-unified/tests/smoke_test.py +1 -1
- package/bundled-skills/fact-check-x-unified/tests/trusted_search_config_test.py +8 -2
- package/bundled-skills/fal-audio/SKILL.md +16 -6
- package/bundled-skills/fal-generate/SKILL.md +16 -6
- package/bundled-skills/fal-image-edit/SKILL.md +16 -6
- package/bundled-skills/fal-platform/SKILL.md +12 -4
- package/bundled-skills/fal-upscale/SKILL.md +12 -4
- package/bundled-skills/fal-workflow/SKILL.md +24 -6
- package/bundled-skills/family-health-analyzer/SKILL.md +17 -16
- package/bundled-skills/fastapi-router-py/SKILL.md +3 -0
- package/bundled-skills/fastapi-router-py/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/fastapi-router-py/UPSTREAM-NOTICE.md +11 -0
- package/bundled-skills/fastapi-router-py/assets/template.py +147 -0
- package/bundled-skills/fda-food-safety-auditor/SKILL.md +9 -8
- package/bundled-skills/fda-medtech-compliance-auditor/SKILL.md +8 -8
- package/bundled-skills/ffuf-claude-skill/SKILL.md +18 -3
- package/bundled-skills/file-organizer/SKILL.md +1 -1
- package/bundled-skills/find-bugs/SKILL.md +4 -4
- package/bundled-skills/find-matching-tenders/SKILL.md +12 -11
- package/bundled-skills/firecrawl-scraper/SKILL.md +4 -2
- package/bundled-skills/firmware-analyst/SKILL.md +10 -1
- package/bundled-skills/fix-review/SKILL.md +5 -1
- package/bundled-skills/fp-either-ref/SKILL.md +10 -4
- package/bundled-skills/fp-option-ref/SKILL.md +12 -6
- package/bundled-skills/fp-pipe-ref/SKILL.md +7 -1
- package/bundled-skills/fp-taskeither-ref/SKILL.md +28 -10
- package/bundled-skills/fp-types-ref/SKILL.md +8 -2
- package/bundled-skills/framework-migration-legacy-modernize/SKILL.md +0 -1
- package/bundled-skills/free-design-resources/SKILL.md +8 -0
- package/bundled-skills/frontend-api-integration-patterns/SKILL.md +11 -8
- package/bundled-skills/frontend-data-contracts/SKILL.md +5 -1
- package/bundled-skills/frontend-mobile-development-component-scaffold/SKILL.md +1 -1
- package/bundled-skills/frontend-mobile-security-xss-scan/SKILL.md +1 -1
- package/bundled-skills/frontend-slides/SKILL.md +1 -0
- package/bundled-skills/frontend-slides-frontend-slides/SKILL.md +15 -0
- package/bundled-skills/frontend-slides-frontend-slides/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/frontend-slides-frontend-slides/UPSTREAM-NOTICE.md +14 -0
- package/bundled-skills/frontend-slides-frontend-slides/scripts/export-pdf.sh +390 -0
- package/bundled-skills/frontend-slides-frontend-slides/scripts/extract-pptx.py +96 -0
- package/bundled-skills/frontend-slides-frontend-slides/scripts/lib/confined-server.mjs +113 -0
- package/bundled-skills/frontend-ui-engineering/SKILL.md +8 -0
- package/bundled-skills/full-output-enforcement/SKILL.md +20 -9
- package/bundled-skills/full-stack-orchestration-full-stack-feature/SKILL.md +0 -1
- package/bundled-skills/game-development/2d-games/SKILL.md +3 -3
- package/bundled-skills/game-development/3d-games/SKILL.md +8 -4
- package/bundled-skills/game-development/game-design/SKILL.md +8 -4
- package/bundled-skills/game-development/mobile-games/SKILL.md +10 -6
- package/bundled-skills/game-development/multiplayer/SKILL.md +9 -5
- package/bundled-skills/game-development/pc-games/SKILL.md +6 -2
- package/bundled-skills/game-development/vr-ar/SKILL.md +12 -6
- package/bundled-skills/gh-review-requests/SKILL.md +14 -42
- package/bundled-skills/gha-security-review/SKILL.md +3 -0
- package/bundled-skills/gha-security-review/UPSTREAM-LICENSE.txt +190 -0
- package/bundled-skills/gha-security-review/UPSTREAM-NOTICE.md +19 -0
- package/bundled-skills/gha-security-review/references/ai-prompt-injection-via-ci.md +181 -0
- package/bundled-skills/gha-security-review/references/comment-triggered-commands.md +195 -0
- package/bundled-skills/gha-security-review/references/credential-escalation.md +225 -0
- package/bundled-skills/gha-security-review/references/expression-injection.md +287 -0
- package/bundled-skills/gha-security-review/references/permissions-and-secrets.md +265 -0
- package/bundled-skills/gha-security-review/references/pwn-request.md +212 -0
- package/bundled-skills/gha-security-review/references/real-world-attacks.md +298 -0
- package/bundled-skills/gha-security-review/references/runner-infrastructure.md +268 -0
- package/bundled-skills/gha-security-review/references/supply-chain.md +225 -0
- package/bundled-skills/git-advanced-workflows/SKILL.md +19 -12
- package/bundled-skills/git-commit-message/SKILL.md +2 -2
- package/bundled-skills/git-pr-review/SKILL.md +6 -9
- package/bundled-skills/git-pr-workflows-onboard/SKILL.md +0 -1
- package/bundled-skills/git-pr-workflows-pr-enhance/SKILL.md +1 -1
- package/bundled-skills/github-actions/SKILL.md +20 -24
- package/bundled-skills/github-actions-debugger/SKILL.md +7 -3
- package/bundled-skills/github-issue-creator/SKILL.md +12 -12
- package/bundled-skills/gitlab-ci-patterns/SKILL.md +5 -7
- package/bundled-skills/global-chat-agent-discovery/SKILL.md +12 -7
- package/bundled-skills/gmail-automation/SKILL.md +9 -0
- package/bundled-skills/godot-4-migration/SKILL.md +12 -4
- package/bundled-skills/google-calendar-automation/SKILL.md +23 -145
- package/bundled-skills/google-docs-automation/SKILL.md +1 -1
- package/bundled-skills/google-drive-automation/SKILL.md +9 -0
- package/bundled-skills/google-sheets-automation/SKILL.md +1 -1
- package/bundled-skills/google-slides-automation/SKILL.md +1 -1
- package/bundled-skills/graphql-architect/SKILL.md +0 -1
- package/bundled-skills/grill-me/SKILL.md +3 -1
- package/bundled-skills/grill-with-docs/SKILL.md +3 -1
- package/bundled-skills/grilling/SKILL.md +1 -1
- package/bundled-skills/handoff/SKILL.md +5 -1
- package/bundled-skills/haskell-pro/SKILL.md +3 -4
- package/bundled-skills/headline-psychologist/SKILL.md +16 -8
- package/bundled-skills/hf-mem/SKILL.md +9 -1
- package/bundled-skills/hosted-agents-v2-py/SKILL.md +56 -57
- package/bundled-skills/hr-pro/SKILL.md +0 -1
- package/bundled-skills/hugging-face-jobs/SKILL.md +0 -1
- package/bundled-skills/hugging-face-tool-builder/SKILL.md +16 -2
- package/bundled-skills/hybrid-cloud-architect/SKILL.md +0 -1
- package/bundled-skills/hybrid-cloud-networking/SKILL.md +11 -1
- package/bundled-skills/hybrid-cloud-networking/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/hybrid-cloud-networking/UPSTREAM-NOTICE.md +11 -0
- package/bundled-skills/hybrid-cloud-networking/references/direct-connect.md +17 -0
- package/bundled-skills/hyperexecute-skill/SKILL.md +7 -0
- package/bundled-skills/hyperexecute-skill/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/hyperexecute-skill/UPSTREAM-NOTICE.md +16 -0
- package/bundled-skills/hyperexecute-skill/scripts/build-command.js +57 -0
- package/bundled-skills/hyperexecute-skill/scripts/doctor.js +81 -0
- package/bundled-skills/hyperexecute-skill/scripts/summarize-artifacts.js +63 -0
- package/bundled-skills/hyperexecute-skill/scripts/validate-config.js +72 -0
- package/bundled-skills/iconsax-library/SKILL.md +6 -4
- package/bundled-skills/ida-reverse/SKILL.md +13 -0
- package/bundled-skills/ida-reverse/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/ida-reverse/UPSTREAM-NOTICE.md +13 -0
- package/bundled-skills/ida-reverse/scripts/IdaOpenHelpers.ps1 +115 -0
- package/bundled-skills/ida-reverse/scripts/open.ps1 +378 -0
- package/bundled-skills/ida-reverse/scripts/start-gui.ps1 +105 -0
- package/bundled-skills/idea-evaluator/idea-evaluator-con/SKILL.md +4 -2
- package/bundled-skills/idea-evaluator/idea-evaluator-pro/SKILL.md +5 -3
- package/bundled-skills/identity-mirror/SKILL.md +16 -8
- package/bundled-skills/imagen/SKILL.md +15 -5
- package/bundled-skills/imagen/UPSTREAM-LICENSE.txt +190 -0
- package/bundled-skills/imagen/UPSTREAM-NOTICE.md +5 -0
- package/bundled-skills/imagen/scripts/generate_image.py +241 -0
- package/bundled-skills/implement/SKILL.md +4 -4
- package/bundled-skills/incident-response-incident-response/SKILL.md +0 -1
- package/bundled-skills/incident-response-smart-fix/SKILL.md +1 -1
- package/bundled-skills/incident-runbook-templates/SKILL.md +22 -16
- package/bundled-skills/incremental-implementation/SKILL.md +8 -0
- package/bundled-skills/infinite-gratitude/SKILL.md +6 -2
- package/bundled-skills/internal-comms/SKILL.md +1 -1
- package/bundled-skills/interview-coach/SKILL.md +7 -4
- package/bundled-skills/istio-traffic-management/SKILL.md +0 -1
- package/bundled-skills/iterate-pr/SKILL.md +9 -0
- package/bundled-skills/java-pro/SKILL.md +0 -1
- package/bundled-skills/javascript-pro/SKILL.md +1 -1
- package/bundled-skills/javascript-typescript-typescript-scaffold/SKILL.md +1 -1
- package/bundled-skills/julia-pro/SKILL.md +0 -1
- package/bundled-skills/k8s-security-policies/SKILL.md +8 -1
- package/bundled-skills/kotler-macro-analyzer/SKILL.md +4 -0
- package/bundled-skills/kotlin-coroutines-expert/SKILL.md +8 -5
- package/bundled-skills/kubernetes-deployment/SKILL.md +5 -1
- package/bundled-skills/kubernetes-hardening/SKILL.md +9 -1
- package/bundled-skills/langchain-architecture/SKILL.md +15 -1
- package/bundled-skills/legacy-modernizer/SKILL.md +4 -5
- package/bundled-skills/legal-advisor/SKILL.md +9 -6
- package/bundled-skills/lightning-architecture-review/SKILL.md +6 -6
- package/bundled-skills/lightning-channel-factories/SKILL.md +6 -6
- package/bundled-skills/lightning-factory-explainer/SKILL.md +5 -5
- package/bundled-skills/linkerd-patterns/SKILL.md +0 -1
- package/bundled-skills/linux-hardening/SKILL.md +24 -23
- package/bundled-skills/llm-application-dev-ai-assistant/SKILL.md +1 -1
- package/bundled-skills/llm-application-dev-langchain-agent/SKILL.md +0 -1
- package/bundled-skills/llm-application-dev-prompt-optimize/SKILL.md +1 -1
- package/bundled-skills/llm-evaluation/SKILL.md +50 -62
- package/bundled-skills/llm-evaluation/references/benchmarking.md +35 -0
- package/bundled-skills/logic-review/SKILL.md +8 -0
- package/bundled-skills/longbridge/SKILL.md +8 -4
- package/bundled-skills/longbridge-content/SKILL.md +3 -0
- package/bundled-skills/longbridge-content/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/longbridge-content/UPSTREAM-NOTICE.md +15 -0
- package/bundled-skills/longbridge-content/references/filing.md +48 -0
- package/bundled-skills/longbridge-content/references/news.md +118 -0
- package/bundled-skills/longbridge-content/references/regulatory-kb.md +128 -0
- package/bundled-skills/longbridge-content/references/sec-filings.md +113 -0
- package/bundled-skills/longbridge-content/references/topic.md +53 -0
- package/bundled-skills/longbridge-fundamentals/SKILL.md +3 -0
- package/bundled-skills/longbridge-fundamentals/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/longbridge-fundamentals/UPSTREAM-NOTICE.md +31 -0
- package/bundled-skills/longbridge-fundamentals/references/behavioral-finance.md +108 -0
- package/bundled-skills/longbridge-fundamentals/references/business-segments.md +50 -0
- package/bundled-skills/longbridge-fundamentals/references/company.md +39 -0
- package/bundled-skills/longbridge-fundamentals/references/compare.md +49 -0
- package/bundled-skills/longbridge-fundamentals/references/corp-action.md +42 -0
- package/bundled-skills/longbridge-fundamentals/references/corporate-events.md +89 -0
- package/bundled-skills/longbridge-fundamentals/references/corporate.md +64 -0
- package/bundled-skills/longbridge-fundamentals/references/dcf.md +103 -0
- package/bundled-skills/longbridge-fundamentals/references/dividend.md +51 -0
- package/bundled-skills/longbridge-fundamentals/references/executive.md +39 -0
- package/bundled-skills/longbridge-fundamentals/references/financial-report.md +88 -0
- package/bundled-skills/longbridge-fundamentals/references/financial-statement.md +49 -0
- package/bundled-skills/longbridge-fundamentals/references/industry-valuation.md +86 -0
- package/bundled-skills/longbridge-fundamentals/references/invest-relation.md +39 -0
- package/bundled-skills/longbridge-fundamentals/references/main-business-analysis.md +654 -0
- package/bundled-skills/longbridge-fundamentals/references/operating.md +42 -0
- package/bundled-skills/longbridge-fundamentals/references/smallcap-growth.md +72 -0
- package/bundled-skills/longbridge-fundamentals/references/valuation-methodology.md +86 -0
- package/bundled-skills/longbridge-fundamentals/references/valuation-rank.md +57 -0
- package/bundled-skills/longbridge-fundamentals/references/valuation.md +86 -0
- package/bundled-skills/longbridge-fundamentals/references/value-screen.md +71 -0
- package/bundled-skills/longbridge-market-data/SKILL.md +3 -0
- package/bundled-skills/longbridge-market-data/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/longbridge-market-data/UPSTREAM-NOTICE.md +28 -0
- package/bundled-skills/longbridge-market-data/references/adr-premium.md +63 -0
- package/bundled-skills/longbridge-market-data/references/ah-premium.md +67 -0
- package/bundled-skills/longbridge-market-data/references/capital.md +48 -0
- package/bundled-skills/longbridge-market-data/references/depth.md +40 -0
- package/bundled-skills/longbridge-market-data/references/exchange-rate.md +35 -0
- package/bundled-skills/longbridge-market-data/references/fx-carry.md +59 -0
- package/bundled-skills/longbridge-market-data/references/intraday.md +47 -0
- package/bundled-skills/longbridge-market-data/references/ipo.md +48 -0
- package/bundled-skills/longbridge-market-data/references/kline.md +62 -0
- package/bundled-skills/longbridge-market-data/references/market-status.md +35 -0
- package/bundled-skills/longbridge-market-data/references/market-temp.md +53 -0
- package/bundled-skills/longbridge-market-data/references/participants.md +35 -0
- package/bundled-skills/longbridge-market-data/references/quote.md +78 -0
- package/bundled-skills/longbridge-market-data/references/security-list.md +36 -0
- package/bundled-skills/longbridge-market-data/references/subscriptions.md +23 -0
- package/bundled-skills/longbridge-market-data/references/trade-stats.md +39 -0
- package/bundled-skills/longbridge-market-data/references/trades.md +44 -0
- package/bundled-skills/longbridge-market-data/references/trading.md +40 -0
- package/bundled-skills/loss-aversion-designer/SKILL.md +16 -8
- package/bundled-skills/m365-agents-dotnet/SKILL.md +8 -0
- package/bundled-skills/m365-agents-py/SKILL.md +8 -0
- package/bundled-skills/m365-agents-ts/SKILL.md +8 -0
- package/bundled-skills/machine-learning-ops-ml-pipeline/SKILL.md +0 -1
- package/bundled-skills/macos-screen-recorder/SKILL.md +5 -1
- package/bundled-skills/magic-animator/SKILL.md +4 -2
- package/bundled-skills/magic-ui-generator/SKILL.md +7 -5
- package/bundled-skills/makepad-animation/SKILL.md +8 -0
- package/bundled-skills/makepad-basics/SKILL.md +9 -0
- package/bundled-skills/makepad-deployment/SKILL.md +18 -0
- package/bundled-skills/makepad-dsl/SKILL.md +9 -0
- package/bundled-skills/makepad-event-action/SKILL.md +9 -0
- package/bundled-skills/makepad-font/SKILL.md +8 -0
- package/bundled-skills/makepad-layout/SKILL.md +9 -0
- package/bundled-skills/makepad-platform/SKILL.md +8 -0
- package/bundled-skills/makepad-reference/SKILL.md +5 -3
- package/bundled-skills/makepad-shaders/SKILL.md +9 -0
- package/bundled-skills/makepad-skills/SKILL.md +11 -5
- package/bundled-skills/makepad-splash/SKILL.md +8 -0
- package/bundled-skills/makepad-widgets/SKILL.md +10 -0
- package/bundled-skills/manifest/SKILL.md +20 -113
- package/bundled-skills/markdown-rendering/SKILL.md +3 -3
- package/bundled-skills/market-sizing-analysis/SKILL.md +13 -24
- package/bundled-skills/market-sizing-analysis/examples/saas-market-sizing.md +20 -337
- package/bundled-skills/market-sizing-analysis/references/data-sources.md +10 -22
- package/bundled-skills/markstream-angular/SKILL.md +3 -1
- package/bundled-skills/markstream-nuxt/SKILL.md +3 -1
- package/bundled-skills/markstream-react/SKILL.md +5 -1
- package/bundled-skills/markstream-svelte/SKILL.md +3 -1
- package/bundled-skills/markstream-vue/SKILL.md +3 -1
- package/bundled-skills/markstream-vue2/SKILL.md +5 -1
- package/bundled-skills/markstream-vue2-cli/SKILL.md +5 -1
- package/bundled-skills/markstream-vue2-vite/SKILL.md +5 -1
- package/bundled-skills/matplotlib/SKILL.md +5 -0
- package/bundled-skills/matplotlib/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/matplotlib/UPSTREAM-NOTICE.md +16 -0
- package/bundled-skills/matplotlib/references/api_reference.md +412 -0
- package/bundled-skills/matplotlib/references/common_issues.md +563 -0
- package/bundled-skills/matplotlib/references/plot_types.md +476 -0
- package/bundled-skills/matplotlib/references/styling_guide.md +589 -0
- package/bundled-skills/matplotlib/scripts/plot_template.py +401 -0
- package/bundled-skills/matplotlib/scripts/style_configurator.py +412 -0
- package/bundled-skills/mcd-secret-menu-lab/SKILL.md +110 -0
- package/bundled-skills/mcp-server-security/SKILL.md +17 -11
- package/bundled-skills/mcp-server-security/references/details.md +51 -90
- package/bundled-skills/memory-forensics/SKILL.md +0 -1
- package/bundled-skills/mermaid-expert/SKILL.md +5 -4
- package/bundled-skills/minecraft-bukkit-pro/SKILL.md +0 -1
- package/bundled-skills/mirrord/SKILL.md +5 -3
- package/bundled-skills/ml-engineer/SKILL.md +0 -1
- package/bundled-skills/ml-pipeline-workflow/SKILL.md +10 -1
- package/bundled-skills/mlops-engineer/SKILL.md +0 -1
- package/bundled-skills/mobile-security-coder/SKILL.md +0 -1
- package/bundled-skills/monopoly/SKILL.md +12 -0
- package/bundled-skills/monopoly/security-checklist/SKILL.md +9 -7
- package/bundled-skills/monorepo-architect/SKILL.md +5 -4
- package/bundled-skills/monte-carlo-analyze-root-cause/SKILL.md +4 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/UPSTREAM-LICENSE.txt +201 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/UPSTREAM-NOTICE.md +19 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/references/common-root-causes.md +79 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/references/data-exploration.md +149 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/references/etl-failure-investigation.md +67 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/references/field-anomaly-investigation.md +107 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/references/freshness-investigation.md +67 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/references/intake-no-incident.md +67 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/references/query-change-investigation.md +55 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/references/schema-investigation.md +48 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/references/volume-investigation.md +53 -0
- package/bundled-skills/monte-carlo-asset-health/SKILL.md +4 -0
- package/bundled-skills/monte-carlo-asset-health/UPSTREAM-LICENSE.txt +201 -0
- package/bundled-skills/monte-carlo-asset-health/UPSTREAM-NOTICE.md +12 -0
- package/bundled-skills/monte-carlo-asset-health/references/parameters.md +111 -0
- package/bundled-skills/monte-carlo-asset-health/references/workflows.md +132 -0
- package/bundled-skills/monte-carlo-monitoring-advisor/SKILL.md +3 -0
- package/bundled-skills/monte-carlo-monitoring-advisor/UPSTREAM-LICENSE.txt +201 -0
- package/bundled-skills/monte-carlo-monitoring-advisor/UPSTREAM-NOTICE.md +12 -0
- package/bundled-skills/monte-carlo-monitoring-advisor/references/agent-monitor-creation.md +471 -0
- package/bundled-skills/monte-carlo-monitoring-advisor/references/data-monitor-creation.md +272 -0
- package/bundled-skills/monte-carlo-performance-diagnosis/SKILL.md +3 -0
- package/bundled-skills/monte-carlo-performance-diagnosis/UPSTREAM-LICENSE.txt +201 -0
- package/bundled-skills/monte-carlo-performance-diagnosis/UPSTREAM-NOTICE.md +12 -0
- package/bundled-skills/monte-carlo-performance-diagnosis/references/investigation-tiers.md +110 -0
- package/bundled-skills/monte-carlo-performance-diagnosis/references/query-analysis.md +50 -0
- package/bundled-skills/monte-carlo-remediation/SKILL.md +3 -0
- package/bundled-skills/monte-carlo-remediation/UPSTREAM-LICENSE.txt +201 -0
- package/bundled-skills/monte-carlo-remediation/UPSTREAM-NOTICE.md +13 -0
- package/bundled-skills/monte-carlo-remediation/references/patterns.md +295 -0
- package/bundled-skills/monte-carlo-remediation/references/safety.md +160 -0
- package/bundled-skills/monte-carlo-remediation/references/tool-discovery.md +172 -0
- package/bundled-skills/monte-carlo-storage-cost-analysis/SKILL.md +3 -0
- package/bundled-skills/monte-carlo-storage-cost-analysis/UPSTREAM-LICENSE.txt +201 -0
- package/bundled-skills/monte-carlo-storage-cost-analysis/UPSTREAM-NOTICE.md +11 -0
- package/bundled-skills/monte-carlo-storage-cost-analysis/references/output-structure.md +93 -0
- package/bundled-skills/mtls-configuration/SKILL.md +0 -1
- package/bundled-skills/multi-cloud-architecture/SKILL.md +3 -1
- package/bundled-skills/multi-cloud-architecture/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/multi-cloud-architecture/UPSTREAM-NOTICE.md +12 -0
- package/bundled-skills/multi-cloud-architecture/references/multi-cloud-patterns.md +26 -0
- package/bundled-skills/multi-cloud-architecture/references/service-comparison.md +35 -0
- package/bundled-skills/nanobanana-ppt-skills/SKILL.md +13 -4
- package/bundled-skills/native-data-fetching/references/detailed-guide.md +42 -23
- package/bundled-skills/native-data-fetching/references/expo-router-loaders.md +36 -29
- package/bundled-skills/nerdzao-elite/SKILL.md +9 -5
- package/bundled-skills/nerdzao-elite-gemini-high/SKILL.md +7 -3
- package/bundled-skills/network-engineer/SKILL.md +0 -1
- package/bundled-skills/networkx/SKILL.md +3 -0
- package/bundled-skills/networkx/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/networkx/UPSTREAM-NOTICE.md +15 -0
- package/bundled-skills/networkx/references/algorithms.md +383 -0
- package/bundled-skills/networkx/references/generators.md +378 -0
- package/bundled-skills/networkx/references/graph-basics.md +283 -0
- package/bundled-skills/networkx/references/io.md +441 -0
- package/bundled-skills/networkx/references/visualization.md +529 -0
- package/bundled-skills/new-rails-project/SKILL.md +4 -2
- package/bundled-skills/news-sentiment-engine/SKILL.md +13 -28
- package/bundled-skills/nft-standards/SKILL.md +15 -1
- package/bundled-skills/nsfw-ai-spicyapi/SKILL.md +8 -0
- package/bundled-skills/nx-workspace-patterns/SKILL.md +0 -1
- package/bundled-skills/objection-preemptor/SKILL.md +16 -8
- package/bundled-skills/observability-monitoring-monitor-setup/SKILL.md +1 -1
- package/bundled-skills/obsidian-cli/SKILL.md +4 -2
- package/bundled-skills/odoo-module-developer/SKILL.md +4 -1
- package/bundled-skills/odoo-orm-expert/SKILL.md +4 -2
- package/bundled-skills/odw/SKILL.md +8 -0
- package/bundled-skills/offensive-osint/SKILL.md +76 -70
- package/bundled-skills/offensive-osint/UPSTREAM-LICENSE.txt +395 -0
- package/bundled-skills/offensive-osint/UPSTREAM-NOTICE.md +26 -0
- package/bundled-skills/offensive-osint/references/breach-and-credentials.md +130 -0
- package/bundled-skills/offensive-osint/references/dork-corpus.md +182 -0
- package/bundled-skills/offensive-osint/references/helpers-and-automation.md +266 -0
- package/bundled-skills/offensive-osint/references/identity-fabric.md +309 -0
- package/bundled-skills/offensive-osint/references/people-osint.md +107 -0
- package/bundled-skills/offensive-osint/references/probes-and-wordlists.md +1269 -0
- package/bundled-skills/offensive-osint/references/recon-stack.md +284 -0
- package/bundled-skills/offensive-osint/references/recon-techniques.md +343 -0
- package/bundled-skills/offensive-osint/references/saas-public-surfaces.md +140 -0
- package/bundled-skills/offensive-osint/references/secret-patterns.md +71 -0
- package/bundled-skills/offensive-osint/references/secret-validators.md +334 -0
- package/bundled-skills/offensive-osint/references/sector-notes.md +74 -0
- package/bundled-skills/offensive-osint/references/severity-matrix.md +112 -0
- package/bundled-skills/offensive-osint/references/specialized-osint.md +204 -0
- package/bundled-skills/offensive-osint/references/tooling-install.md +190 -0
- package/bundled-skills/offers/SKILL.md +1 -1
- package/bundled-skills/omp-delegate/SKILL.md +5 -1
- package/bundled-skills/omp-delegate/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/omp-delegate/UPSTREAM-NOTICE.md +13 -0
- package/bundled-skills/omp-delegate/scripts/relay.mjs +823 -0
- package/bundled-skills/on-call-handoff-patterns/SKILL.md +8 -6
- package/bundled-skills/onboarding/SKILL.md +1 -1
- package/bundled-skills/onboarding-cro/SKILL.md +7 -3
- package/bundled-skills/open-source-marketing/SKILL.md +1 -1
- package/bundled-skills/opencode-delegate/SKILL.md +5 -1
- package/bundled-skills/opencode-delegate/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/opencode-delegate/UPSTREAM-NOTICE.md +13 -0
- package/bundled-skills/opencode-delegate/scripts/relay.mjs +781 -0
- package/bundled-skills/page-cro/SKILL.md +14 -110
- package/bundled-skills/payment-integration/SKILL.md +0 -1
- package/bundled-skills/paypal-integration/SKILL.md +3 -1
- package/bundled-skills/pentest-tools/src-hunter/SKILL.md +8 -0
- package/bundled-skills/performance-engineer/SKILL.md +1 -1
- package/bundled-skills/performance-optimization/SKILL.md +8 -0
- package/bundled-skills/performance-testing-review-ai-review/SKILL.md +8 -1
- package/bundled-skills/performance-testing-review-multi-agent-review/SKILL.md +1 -1
- package/bundled-skills/php-pro/SKILL.md +0 -1
- package/bundled-skills/pi-delegate/SKILL.md +5 -1
- package/bundled-skills/pi-delegate/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/pi-delegate/UPSTREAM-NOTICE.md +13 -0
- package/bundled-skills/pi-delegate/scripts/relay.mjs +822 -0
- package/bundled-skills/pitch-psychologist/SKILL.md +19 -11
- package/bundled-skills/planning-and-task-breakdown/SKILL.md +8 -0
- package/bundled-skills/playwright-java/SKILL.md +14 -0
- package/bundled-skills/podcast-generation/SKILL.md +3 -0
- package/bundled-skills/podcast-generation/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/podcast-generation/UPSTREAM-NOTICE.md +13 -0
- package/bundled-skills/podcast-generation/references/architecture.md +87 -0
- package/bundled-skills/podcast-generation/references/code-examples.md +189 -0
- package/bundled-skills/podcast-generation/scripts/pcm_to_wav.py +73 -0
- package/bundled-skills/polars/SKILL.md +3 -0
- package/bundled-skills/polars/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/polars/UPSTREAM-NOTICE.md +16 -0
- package/bundled-skills/polars/references/best_practices.md +649 -0
- package/bundled-skills/polars/references/core_concepts.md +378 -0
- package/bundled-skills/polars/references/io_guide.md +557 -0
- package/bundled-skills/polars/references/operations.md +602 -0
- package/bundled-skills/polars/references/pandas_migration.md +417 -0
- package/bundled-skills/polars/references/transformations.md +549 -0
- package/bundled-skills/polis-protocol-a-self-optimizing-city-of-agents/SKILL.md +3 -0
- package/bundled-skills/polis-protocol-a-self-optimizing-city-of-agents/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/polis-protocol-a-self-optimizing-city-of-agents/UPSTREAM-NOTICE.md +18 -0
- package/bundled-skills/polis-protocol-a-self-optimizing-city-of-agents/references/amendments.md +146 -0
- package/bundled-skills/polis-protocol-a-self-optimizing-city-of-agents/references/protocol-spec.md +506 -0
- package/bundled-skills/polis-protocol-a-self-optimizing-city-of-agents/references/routing.md +227 -0
- package/bundled-skills/polis-protocol-a-self-optimizing-city-of-agents/references/templates.md +438 -0
- package/bundled-skills/polis-protocol-a-self-optimizing-city-of-agents/references/troubleshooting.md +216 -0
- package/bundled-skills/polis-protocol-a-self-optimizing-city-of-agents/scripts/init_polis.py +559 -0
- package/bundled-skills/polis-protocol-a-self-optimizing-city-of-agents/scripts/route_contract.py +19 -0
- package/bundled-skills/polis-protocol-a-self-optimizing-city-of-agents/templates/POLIS_CONSTITUTION.md +293 -0
- package/bundled-skills/posix-shell-pro/SKILL.md +0 -1
- package/bundled-skills/power-user-cultivation/SKILL.md +1 -1
- package/bundled-skills/presentation-deck/SKILL.md +4 -4
- package/bundled-skills/presentation-deck/references/related-skills.md +1 -1
- package/bundled-skills/price-psychology-strategist/SKILL.md +17 -9
- package/bundled-skills/pricing/SKILL.md +1 -1
- package/bundled-skills/product-marketing/SKILL.md +1 -1
- package/bundled-skills/prometheus-configuration/SKILL.md +11 -1
- package/bundled-skills/prompt-engineering-patterns/SKILL.md +0 -1
- package/bundled-skills/public-relations/SKILL.md +1 -1
- package/bundled-skills/pubmed-database/SKILL.md +10 -0
- package/bundled-skills/pypict-skill/SKILL.md +18 -5
- package/bundled-skills/python-testing-patterns/resources/implementation-playbook.md +13 -4
- package/bundled-skills/qiskit/SKILL.md +3 -0
- package/bundled-skills/qiskit/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/qiskit/UPSTREAM-NOTICE.md +18 -0
- package/bundled-skills/qiskit/references/algorithms.md +607 -0
- package/bundled-skills/qiskit/references/backends.md +433 -0
- package/bundled-skills/qiskit/references/circuits.md +197 -0
- package/bundled-skills/qiskit/references/patterns.md +533 -0
- package/bundled-skills/qiskit/references/primitives.md +277 -0
- package/bundled-skills/qiskit/references/setup.md +99 -0
- package/bundled-skills/qiskit/references/transpilation.md +286 -0
- package/bundled-skills/qiskit/references/visualization.md +415 -0
- package/bundled-skills/qoder-delegate/SKILL.md +5 -1
- package/bundled-skills/qoder-delegate/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/qoder-delegate/UPSTREAM-NOTICE.md +13 -0
- package/bundled-skills/qoder-delegate/scripts/relay.mjs +698 -0
- package/bundled-skills/quant-analyst/SKILL.md +0 -1
- package/bundled-skills/radare2/SKILL.md +9 -0
- package/bundled-skills/react-flow-node-ts/SKILL.md +3 -0
- package/bundled-skills/react-flow-node-ts/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/react-flow-node-ts/UPSTREAM-NOTICE.md +12 -0
- package/bundled-skills/react-flow-node-ts/assets/template.tsx +108 -0
- package/bundled-skills/react-flow-node-ts/assets/types.template.ts +34 -0
- package/bundled-skills/react-state-management/SKILL.md +0 -1
- package/bundled-skills/read-all-adrs/SKILL.md +3 -4
- package/bundled-skills/recsys-pipeline-architect/SKILL.md +8 -0
- package/bundled-skills/reference-builder/SKILL.md +0 -1
- package/bundled-skills/reverse-engineer-anything/SKILL.md +4 -0
- package/bundled-skills/riffkit/SKILL.md +22 -13
- package/bundled-skills/risk-manager/SKILL.md +0 -1
- package/bundled-skills/robius-app-architecture/SKILL.md +10 -0
- package/bundled-skills/robius-event-action/SKILL.md +10 -0
- package/bundled-skills/robius-matrix-integration/SKILL.md +10 -0
- package/bundled-skills/robius-state-management/SKILL.md +10 -0
- package/bundled-skills/robius-widget-patterns/SKILL.md +10 -0
- package/bundled-skills/ruby-pro/SKILL.md +0 -1
- package/bundled-skills/scala-pro/SKILL.md +0 -1
- package/bundled-skills/scanpy/SKILL.md +3 -0
- package/bundled-skills/scanpy/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/scanpy/UPSTREAM-NOTICE.md +15 -0
- package/bundled-skills/scanpy/assets/analysis_template.py +295 -0
- package/bundled-skills/scanpy/references/api_reference.md +251 -0
- package/bundled-skills/scanpy/references/plotting_guide.md +352 -0
- package/bundled-skills/scanpy/references/standard_workflow.md +206 -0
- package/bundled-skills/scanpy/scripts/qc_analysis.py +200 -0
- package/bundled-skills/scarcity-urgency-psychologist/SKILL.md +16 -8
- package/bundled-skills/score-eval/SKILL.md +29 -18
- package/bundled-skills/search-specialist/SKILL.md +0 -1
- package/bundled-skills/security-bluebook-builder/SKILL.md +9 -1
- package/bundled-skills/security-compliance-compliance-check/resources/implementation-playbook.md +46 -177
- package/bundled-skills/security-requirement-extraction/resources/implementation-playbook.md +8 -6
- package/bundled-skills/senior-fullstack/SKILL.md +24 -200
- package/bundled-skills/senior-fullstack/references/architecture_patterns.md +4 -100
- package/bundled-skills/senior-fullstack/references/development_workflows.md +4 -100
- package/bundled-skills/senior-fullstack/references/tech_stack_guide.md +4 -100
- package/bundled-skills/senior-fullstack/scripts/code_quality_analyzer.py +5 -13
- package/bundled-skills/senior-fullstack/scripts/fullstack_scaffolder.py +5 -13
- package/bundled-skills/senior-fullstack/scripts/project_scaffolder.py +5 -13
- package/bundled-skills/seo-authority-builder/SKILL.md +0 -1
- package/bundled-skills/seo-cannibalization-detector/SKILL.md +6 -2
- package/bundled-skills/seo-content/SKILL.md +8 -0
- package/bundled-skills/seo-content-auditor/SKILL.md +3 -1
- package/bundled-skills/seo-content-refresher/SKILL.md +8 -4
- package/bundled-skills/seo-directory-backlinks/SKILL.md +8 -0
- package/bundled-skills/seo-image-gen/SKILL.md +14 -0
- package/bundled-skills/seo-keyword-strategist/SKILL.md +0 -1
- package/bundled-skills/seo-meta-optimizer/SKILL.md +0 -1
- package/bundled-skills/seo-schema/SKILL.md +8 -0
- package/bundled-skills/seo-snippet-hunter/SKILL.md +0 -1
- package/bundled-skills/seo-structure-architect/SKILL.md +6 -2
- package/bundled-skills/sequence-psychologist/SKILL.md +16 -8
- package/bundled-skills/service-mesh-expert/SKILL.md +0 -1
- package/bundled-skills/service-mesh-observability/SKILL.md +0 -1
- package/bundled-skills/sharp-edges/SKILL.md +3 -0
- package/bundled-skills/sharp-edges/UPSTREAM-LICENSE.txt +427 -0
- package/bundled-skills/sharp-edges/UPSTREAM-NOTICE.md +26 -0
- package/bundled-skills/sharp-edges/references/auth-patterns.md +252 -0
- package/bundled-skills/sharp-edges/references/case-studies.md +274 -0
- package/bundled-skills/sharp-edges/references/config-patterns.md +333 -0
- package/bundled-skills/sharp-edges/references/crypto-apis.md +190 -0
- package/bundled-skills/sharp-edges/references/lang-c.md +205 -0
- package/bundled-skills/sharp-edges/references/lang-csharp.md +285 -0
- package/bundled-skills/sharp-edges/references/lang-go.md +270 -0
- package/bundled-skills/sharp-edges/references/lang-java.md +263 -0
- package/bundled-skills/sharp-edges/references/lang-javascript.md +269 -0
- package/bundled-skills/sharp-edges/references/lang-kotlin.md +265 -0
- package/bundled-skills/sharp-edges/references/lang-php.md +245 -0
- package/bundled-skills/sharp-edges/references/lang-python.md +274 -0
- package/bundled-skills/sharp-edges/references/lang-ruby.md +273 -0
- package/bundled-skills/sharp-edges/references/lang-rust.md +272 -0
- package/bundled-skills/sharp-edges/references/lang-swift.md +287 -0
- package/bundled-skills/sharp-edges/references/language-specific.md +588 -0
- package/bundled-skills/shellcheck-configuration/SKILL.md +0 -1
- package/bundled-skills/shipping-and-launch/SKILL.md +11 -0
- package/bundled-skills/skill-scanner/SKILL.md +23 -14
- package/bundled-skills/skill-scanner/UPSTREAM-LICENSE.txt +190 -0
- package/bundled-skills/skill-scanner/UPSTREAM-NOTICE.md +14 -0
- package/bundled-skills/skill-scanner/references/dangerous-code-patterns.md +194 -0
- package/bundled-skills/skill-scanner/references/permission-analysis.md +93 -0
- package/bundled-skills/skill-scanner/references/prompt-injection-patterns.md +157 -0
- package/bundled-skills/skill-scanner/scripts/scan_skill.py +800 -0
- package/bundled-skills/skill-seekers/SKILL.md +16 -20
- package/bundled-skills/slideops/SKILL.md +3 -0
- package/bundled-skills/slideops/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/slideops/UPSTREAM-NOTICE.md +16 -0
- package/bundled-skills/slideops/assets/template.html +536 -0
- package/bundled-skills/slideops/references/automation.md +185 -0
- package/bundled-skills/slideops/references/diagrams.md +92 -0
- package/bundled-skills/slideops/references/verification.md +124 -0
- package/bundled-skills/slideops/scripts/check.py +501 -0
- package/bundled-skills/slideops/scripts/cite.py +143 -0
- package/bundled-skills/social-proof-architect/SKILL.md +17 -9
- package/bundled-skills/spark-optimization/SKILL.md +0 -1
- package/bundled-skills/speckit-updater/SKILL.md +7 -0
- package/bundled-skills/speed/SKILL.md +16 -14
- package/bundled-skills/sred-project-organizer/SKILL.md +7 -0
- package/bundled-skills/startup-analyst/SKILL.md +0 -1
- package/bundled-skills/startup-business-analyst-business-case/SKILL.md +0 -1
- package/bundled-skills/startup-business-analyst-financial-projections/SKILL.md +0 -1
- package/bundled-skills/startup-business-analyst-market-opportunity/SKILL.md +0 -1
- package/bundled-skills/startup-financial-modeling/SKILL.md +16 -25
- package/bundled-skills/subject-line-psychologist/SKILL.md +16 -8
- package/bundled-skills/superpowers-lab/SKILL.md +15 -20
- package/bundled-skills/supply-chain-security/SKILL.md +6 -14
- package/bundled-skills/supply-chain-security/references/cicd-pipeline-security.md +3 -39
- package/bundled-skills/swiftui-ui-patterns/SKILL.md +4 -0
- package/bundled-skills/swiftui-ui-patterns/references/async-state.md +14 -8
- package/bundled-skills/swiftui-ui-patterns/references/controls.md +1 -1
- package/bundled-skills/swiftui-ui-patterns/references/form.md +22 -4
- package/bundled-skills/swiftui-ui-patterns/references/lightweight-clients.md +3 -3
- package/bundled-skills/swiftui-ui-patterns/references/list.md +2 -2
- package/bundled-skills/swiftui-ui-patterns/references/matched-transitions.md +3 -1
- package/bundled-skills/swiftui-ui-patterns/references/media.md +3 -0
- package/bundled-skills/swiftui-ui-patterns/references/overlay.md +8 -3
- package/bundled-skills/swiftui-ui-patterns/references/performance.md +2 -5
- package/bundled-skills/swiftui-ui-patterns/references/scroll-reveal.md +3 -1
- package/bundled-skills/swiftui-ui-patterns/references/searchable.md +23 -7
- package/bundled-skills/swiftui-ui-patterns/references/sheets.md +16 -10
- package/bundled-skills/swiftui-ui-patterns/references/split-views.md +4 -1
- package/bundled-skills/systematic-debugging/condition-based-waiting-example.ts +30 -144
- package/bundled-skills/systematic-debugging/condition-based-waiting.md +1 -1
- package/bundled-skills/tdd-orchestrator/SKILL.md +0 -1
- package/bundled-skills/team-composition-analysis/SKILL.md +9 -1
- package/bundled-skills/technical-tutorials/SKILL.md +1 -1
- package/bundled-skills/temporal-python-pro/SKILL.md +0 -1
- package/bundled-skills/temporal-python-testing/SKILL.md +0 -1
- package/bundled-skills/terraform-module-library/SKILL.md +11 -1
- package/bundled-skills/test-automator/SKILL.md +0 -1
- package/bundled-skills/testing-patterns/SKILL.md +8 -9
- package/bundled-skills/trust-calibrator/SKILL.md +16 -8
- package/bundled-skills/tune-monitor/SKILL.md +3 -0
- package/bundled-skills/tune-monitor/UPSTREAM-LICENSE.txt +201 -0
- package/bundled-skills/tune-monitor/UPSTREAM-NOTICE.md +14 -0
- package/bundled-skills/tune-monitor/references/custom-sql-monitor.md +112 -0
- package/bundled-skills/tune-monitor/references/metric-monitor.md +118 -0
- package/bundled-skills/tune-monitor/references/table-monitor.md +138 -0
- package/bundled-skills/tune-monitor/references/validation-monitor.md +132 -0
- package/bundled-skills/turborepo-caching/SKILL.md +0 -1
- package/bundled-skills/tutorial-engineer/SKILL.md +0 -1
- package/bundled-skills/typescript-expert/SKILL.md +10 -8
- package/bundled-skills/typescript-expert/scripts/ts_diagnostic.py +48 -15
- package/bundled-skills/ui-ux-designer/SKILL.md +0 -1
- package/bundled-skills/ui-visual-validator/SKILL.md +0 -1
- package/bundled-skills/uniprot-database/SKILL.md +8 -0
- package/bundled-skills/unity-developer/SKILL.md +0 -1
- package/bundled-skills/usage-based-pricing/SKILL.md +4 -2
- package/bundled-skills/usage-based-pricing/references/detailed-guide.md +11 -9
- package/bundled-skills/using-agent-skills/SKILL.md +4 -1
- package/bundled-skills/using-agent-skills/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/using-agent-skills/UPSTREAM-NOTICE.md +11 -0
- package/bundled-skills/using-agent-skills/references/definition-of-done.md +67 -0
- package/bundled-skills/using-neon/SKILL.md +21 -0
- package/bundled-skills/ux-persuasion-engineer/SKILL.md +16 -8
- package/bundled-skills/variant-analysis/SKILL.md +10 -0
- package/bundled-skills/vexor-cli/SKILL.md +8 -0
- package/bundled-skills/vibe-delegate/SKILL.md +5 -1
- package/bundled-skills/vibe-delegate/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/vibe-delegate/UPSTREAM-NOTICE.md +13 -0
- package/bundled-skills/vibe-delegate/scripts/relay.mjs +773 -0
- package/bundled-skills/video-content-extractor/SKILL.md +8 -0
- package/bundled-skills/visual-emotion-engineer/SKILL.md +17 -9
- package/bundled-skills/warp-delegate/SKILL.md +5 -1
- package/bundled-skills/warp-delegate/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/warp-delegate/UPSTREAM-NOTICE.md +13 -0
- package/bundled-skills/warp-delegate/scripts/relay.mjs +837 -0
- package/bundled-skills/wcag-audit-patterns/resources/implementation-playbook.md +26 -41
- package/bundled-skills/web-performance-optimization/SKILL.md +15 -15
- package/bundled-skills/web-performance-optimization/references/detailed-guide.md +12 -7
- package/bundled-skills/web3-testing/SKILL.md +16 -1
- package/bundled-skills/workflow-orchestration-patterns/SKILL.md +1 -2
- package/bundled-skills/zcode-delegate/SKILL.md +11 -3
- package/bundled-skills/zcode-delegate/UPSTREAM-LICENSE.txt +21 -0
- package/bundled-skills/zcode-delegate/UPSTREAM-NOTICE.md +13 -0
- package/bundled-skills/zcode-delegate/references/dispatch-and-poll.md +4 -4
- package/bundled-skills/zcode-delegate/scripts/relay.mjs +1043 -0
- package/package.json +1 -1
- package/skills_index.json +240 -160
- package/bundled-skills/api-security-testing/SKILL.md +0 -176
|
@@ -0,0 +1,837 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* delegate-skills · warp-delegate · relay.mjs
|
|
4
|
+
*
|
|
5
|
+
* Dispatch a self-contained brief to the Warp Agent CLI (`oz agent run
|
|
6
|
+
* --output-format ndjson`), capture the newline-delimited JSON event stream,
|
|
7
|
+
* and write a structured result the orchestrating agent can review. The
|
|
8
|
+
* orchestrator runs this one command and reads the result JSON — every
|
|
9
|
+
* Warp-specific mechanic lives in here, which keeps the skill
|
|
10
|
+
* orchestrator-agnostic.
|
|
11
|
+
*
|
|
12
|
+
* Trust posture: relay.mjs itself makes no network calls, reads or writes no
|
|
13
|
+
* credentials, and sends no telemetry; it has no dependencies (Node built-ins
|
|
14
|
+
* only). It shells out only to `oz` and `git`, plus the platform
|
|
15
|
+
* process-termination utility when a Windows process-tree kill requires one.
|
|
16
|
+
* The `oz` process it launches does authenticate — exactly as you do at the
|
|
17
|
+
* terminal. Read this file before you run it.
|
|
18
|
+
*
|
|
19
|
+
* Brief delivery: `oz agent run` requires one of --prompt/--saved-prompt/
|
|
20
|
+
* --task-id/--skill, and its -f/--file config path does NOT satisfy that
|
|
21
|
+
* requirement, so the brief rides argv as the --prompt value. Two consequences
|
|
22
|
+
* the other relays in this package do not have: the brief is visible in the
|
|
23
|
+
* host process list while the run is live, and a very large brief can hit the
|
|
24
|
+
* OS argv limit. Keep secrets out of the brief — reference workspace files or
|
|
25
|
+
* environment variables instead — and on a shared machine prefer a short brief
|
|
26
|
+
* that points `oz` at files in the repo. Because the brief rides argv, this
|
|
27
|
+
* relay never launches `oz` through a shell on any platform.
|
|
28
|
+
*
|
|
29
|
+
* Workspace snapshots: `oz agent run` uploads an end-of-run workspace snapshot
|
|
30
|
+
* by default. The relay does not change that default — it is the CLI's own
|
|
31
|
+
* behavior — but --no-snapshot forwards Warp's flag when you do not want the
|
|
32
|
+
* upload. Decide deliberately for private repositories.
|
|
33
|
+
*
|
|
34
|
+
* It deliberately does NOT commit. Committing is always the orchestrator's job
|
|
35
|
+
* — after it reviews the diff and re-runs the project gates.
|
|
36
|
+
*
|
|
37
|
+
* Autonomy: `oz agent run` has NO sandbox, NO permission mode, and NO
|
|
38
|
+
* read-only mode. A headless run reads, writes, edits, and executes commands
|
|
39
|
+
* with the user's own permissions and never prompts. This relay therefore
|
|
40
|
+
* offers no --read-only flag: there is nothing in the CLI to enforce it, and
|
|
41
|
+
* advertising one would be a lie. (`--auto-approve` belongs to the interactive
|
|
42
|
+
* `warp` TUI, not to `oz agent run`.) The diff reported in `touchedFiles` is
|
|
43
|
+
* the record of what changed — inspect it after every run.
|
|
44
|
+
*
|
|
45
|
+
* Usage:
|
|
46
|
+
* node relay.mjs --brief <file> [options]
|
|
47
|
+
* cat brief.txt | node relay.mjs [options]
|
|
48
|
+
*
|
|
49
|
+
* Options:
|
|
50
|
+
* --brief <file> Path to the brief. If omitted, read it from stdin.
|
|
51
|
+
* --cd <dir> Working root for oz (default: current directory).
|
|
52
|
+
* --lane <name> Fleet lane from delegate-setup config (dials apply; explicit flags win).
|
|
53
|
+
* --model <id> Warp model id (default: Warp's own). See `oz model list`.
|
|
54
|
+
* --profile <id> Warp agent profile id.
|
|
55
|
+
* --name <name> Label for the run (Warp's `--name`).
|
|
56
|
+
* --conversation <id> Continue an existing Warp conversation; send only the delta brief.
|
|
57
|
+
* --skill <spec> Warp skill used as the base prompt (`name`, `repo:name`, `org/repo:name`).
|
|
58
|
+
* --mcp <spec> MCP server config path or inline JSON. Repeatable.
|
|
59
|
+
* --no-snapshot Forward Warp's --no-snapshot (disable the end-of-run snapshot upload).
|
|
60
|
+
* --timeout <dur> Relay-side watchdog (default: 30m). Durations use h/m/s strings.
|
|
61
|
+
* --out-dir <dir> Where to write run artifacts (default: a fresh dir
|
|
62
|
+
* under the system temp dir).
|
|
63
|
+
* -h, --help Show this help.
|
|
64
|
+
*
|
|
65
|
+
* Result: written to <out-dir>/result.json and summarized on stdout —
|
|
66
|
+
* status, exitCode, signal, ozVersion, runId, runUrl, conversationId,
|
|
67
|
+
* finalMessage (the agent's own report), model, touchedFiles (git porcelain,
|
|
68
|
+
* null if git cannot report), snapshotDisabled, and paths to brief.txt,
|
|
69
|
+
* final.txt, events.jsonl, and stderr.txt.
|
|
70
|
+
*
|
|
71
|
+
* Exit codes: a pre-run usage error (bad/missing args, empty brief) exits 2
|
|
72
|
+
* before any run and writes no result file; a missing `oz` binary exits 127;
|
|
73
|
+
* otherwise the exit code mirrors oz's own (0 success, non-zero failure),
|
|
74
|
+
* except a stream-reported agent error exits 1 even if oz exits 0. If the child
|
|
75
|
+
* dies on a signal, the exit code is 128 plus the signal number and
|
|
76
|
+
* `result.json` records the signal. Once the brief validates, `result.json` is
|
|
77
|
+
* written on every outcome — completed, failed, timeout (the --timeout watchdog
|
|
78
|
+
* fired, or the bounded --version preflight hung), aborted (the relay itself
|
|
79
|
+
* was killed and forwarded the kill to oz), or warp_unavailable.
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
import {spawn, execFileSync, spawnSync } from "node:child_process";
|
|
83
|
+
import {
|
|
84
|
+
appendFileSync,
|
|
85
|
+
existsSync,
|
|
86
|
+
mkdirSync,
|
|
87
|
+
readFileSync,
|
|
88
|
+
renameSync,
|
|
89
|
+
rmSync,
|
|
90
|
+
statSync,
|
|
91
|
+
writeFileSync,
|
|
92
|
+
} from "node:fs";
|
|
93
|
+
import {join, resolve, basename, dirname } from "node:path";
|
|
94
|
+
import { fileURLToPath } from "node:url";
|
|
95
|
+
import { constants, tmpdir } from "node:os";
|
|
96
|
+
import { StringDecoder } from "node:string_decoder";
|
|
97
|
+
const MAX_BUFFERED_CHARS = 1_048_576;
|
|
98
|
+
|
|
99
|
+
const DEFAULT_TIMEOUT = "30m";
|
|
100
|
+
const MAX_TIMER_MS = 2_147_483_647;
|
|
101
|
+
const VERSION_TIMEOUT_MS = 10_000;
|
|
102
|
+
// Values that ride argv beside the brief. `oz` is launched without a shell, so
|
|
103
|
+
// the risk is not quoting but flag injection: a value starting with "-" would be
|
|
104
|
+
// read by oz as another option. Require a leading alphanumeric.
|
|
105
|
+
const SAFE_TOKEN = /^[A-Za-z0-9][A-Za-z0-9._:/-]*$/;
|
|
106
|
+
|
|
107
|
+
const IMPLEMENTER_KEY = "warp";
|
|
108
|
+
|
|
109
|
+
function makeEventScanner(onObject) {
|
|
110
|
+
let buf = "";
|
|
111
|
+
let index = 0;
|
|
112
|
+
let depth = 0;
|
|
113
|
+
let start = -1;
|
|
114
|
+
let inString = false;
|
|
115
|
+
let escaped = false;
|
|
116
|
+
return (chunk) => {
|
|
117
|
+
if (!chunk) return;
|
|
118
|
+
buf += chunk;
|
|
119
|
+
for (;;) {
|
|
120
|
+
while (index < buf.length) {
|
|
121
|
+
const ch = buf[index];
|
|
122
|
+
// Only track strings inside an object (depth > 0). At depth 0 we are
|
|
123
|
+
// skipping a junk prefix, and an unmatched `"` there must not swallow the
|
|
124
|
+
// real `{...}` that follows in the same chunk.
|
|
125
|
+
if (inString) {
|
|
126
|
+
if (escaped) escaped = false;
|
|
127
|
+
else if (ch === "\\") escaped = true;
|
|
128
|
+
else if (ch === '"') inString = false;
|
|
129
|
+
} else if (ch === '"') {
|
|
130
|
+
if (depth > 0) inString = true;
|
|
131
|
+
} else if (ch === "{") {
|
|
132
|
+
if (depth === 0) start = index;
|
|
133
|
+
depth += 1;
|
|
134
|
+
} else if (ch === "}") {
|
|
135
|
+
if (depth > 0) {
|
|
136
|
+
depth -= 1;
|
|
137
|
+
if (depth === 0 && start !== -1) {
|
|
138
|
+
const slice = buf.slice(start, index + 1);
|
|
139
|
+
try { onObject(JSON.parse(slice)); } catch { /* skip malformed */ }
|
|
140
|
+
start = -1;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
index += 1;
|
|
145
|
+
}
|
|
146
|
+
if (depth === 0 || start === -1 || buf.length - start <= MAX_BUFFERED_CHARS) break;
|
|
147
|
+
// A complete object may exceed the retained-input cap within this chunk.
|
|
148
|
+
// Drop only an oversized partial, then rescan its suffix so a later
|
|
149
|
+
// concatenated event is not lost.
|
|
150
|
+
buf = buf.slice(start + MAX_BUFFERED_CHARS);
|
|
151
|
+
index = 0;
|
|
152
|
+
start = -1;
|
|
153
|
+
depth = 0;
|
|
154
|
+
inString = false;
|
|
155
|
+
escaped = false;
|
|
156
|
+
}
|
|
157
|
+
if (depth > 0 && start !== -1) {
|
|
158
|
+
if (start > 0) {
|
|
159
|
+
buf = buf.slice(start);
|
|
160
|
+
index -= start;
|
|
161
|
+
start = 0;
|
|
162
|
+
}
|
|
163
|
+
} else {
|
|
164
|
+
buf = "";
|
|
165
|
+
index = 0;
|
|
166
|
+
start = -1;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function applyFleetLane(opts, flagged) {
|
|
172
|
+
if (!opts.lane) return;
|
|
173
|
+
const script = join(dirname(fileURLToPath(import.meta.url)), "../../delegate-setup/scripts/lane.mjs");
|
|
174
|
+
if (!existsSync(script)) {
|
|
175
|
+
fail("--lane requires the delegate-setup skill installed beside this relay");
|
|
176
|
+
}
|
|
177
|
+
const r = spawnSync(
|
|
178
|
+
process.execPath,
|
|
179
|
+
[script, "resolve", "--cwd", opts.cd, "--lane", opts.lane, "--implementer", IMPLEMENTER_KEY],
|
|
180
|
+
{ encoding: "utf8", env: process.env },
|
|
181
|
+
);
|
|
182
|
+
if (r.error) fail(`lane resolve failed: ${r.error.message}`);
|
|
183
|
+
if (r.status !== 0) {
|
|
184
|
+
fail((r.stderr || "lane resolve failed").trim().replace(/^lane\.mjs:\s*/, ""));
|
|
185
|
+
}
|
|
186
|
+
let resolved;
|
|
187
|
+
try {
|
|
188
|
+
const lines = (r.stdout || "").trim().split("\n").filter(Boolean);
|
|
189
|
+
resolved = JSON.parse(lines[lines.length - 1]);
|
|
190
|
+
} catch {
|
|
191
|
+
fail("lane resolve returned invalid JSON");
|
|
192
|
+
}
|
|
193
|
+
opts.laneSource = resolved.source;
|
|
194
|
+
for (const [field, value] of Object.entries(resolved.dials || {})) {
|
|
195
|
+
if (flagged.has(field)) continue;
|
|
196
|
+
// Warp exposes no read-only, sandbox, or permission-mode flag on `oz agent
|
|
197
|
+
// run`, so those dials cannot be honoured here. Dropping one silently would
|
|
198
|
+
// run a lane the user believes is restricted, so refuse instead.
|
|
199
|
+
if (["readOnly", "sandbox", "permissionMode", "force", "effort", "variant", "provider"].includes(field)) {
|
|
200
|
+
fail(`lane "${opts.lane}" sets the ${field} dial, which the Warp Agent CLI has no flag for; remove it from the lane or use a different implementer`);
|
|
201
|
+
}
|
|
202
|
+
opts[field] = value;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function fail(message, code = 2) {
|
|
207
|
+
process.stderr.write(`relay: ${message}\n`);
|
|
208
|
+
process.exit(code);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
function parseDuration(duration) {
|
|
212
|
+
const match = /^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/.exec(duration);
|
|
213
|
+
if (!match || (!match[1] && !match[2] && !match[3])) return null;
|
|
214
|
+
try {
|
|
215
|
+
const seconds =
|
|
216
|
+
BigInt(match[1] || 0) * 3600n +
|
|
217
|
+
BigInt(match[2] || 0) * 60n +
|
|
218
|
+
BigInt(match[3] || 0);
|
|
219
|
+
const milliseconds = seconds * 1000n;
|
|
220
|
+
if (milliseconds <= 0n || milliseconds > BigInt(MAX_TIMER_MS)) return null;
|
|
221
|
+
return Number(milliseconds);
|
|
222
|
+
} catch {
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function parseArgs(argv) {
|
|
228
|
+
const flagged = new Set();
|
|
229
|
+
const opts = {
|
|
230
|
+
lane: null,
|
|
231
|
+
laneSource: null,
|
|
232
|
+
brief: null,
|
|
233
|
+
cd: process.cwd(),
|
|
234
|
+
model: null,
|
|
235
|
+
profile: null,
|
|
236
|
+
name: null,
|
|
237
|
+
conversation: null,
|
|
238
|
+
skill: null,
|
|
239
|
+
mcp: [],
|
|
240
|
+
noSnapshot: false,
|
|
241
|
+
timeout: DEFAULT_TIMEOUT,
|
|
242
|
+
outDir: null,
|
|
243
|
+
};
|
|
244
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
245
|
+
const arg = argv[i];
|
|
246
|
+
const next = () => {
|
|
247
|
+
const value = argv[i + 1];
|
|
248
|
+
if (value === undefined) fail(`${arg} requires a value`);
|
|
249
|
+
i += 1;
|
|
250
|
+
return value;
|
|
251
|
+
};
|
|
252
|
+
switch (arg) {
|
|
253
|
+
case "-h":
|
|
254
|
+
case "--help":
|
|
255
|
+
process.stdout.write(headerComment());
|
|
256
|
+
process.exit(0);
|
|
257
|
+
break;
|
|
258
|
+
case "--brief": opts.brief = next(); break;
|
|
259
|
+
case "--cd": opts.cd = resolve(next()); break;
|
|
260
|
+
case "--lane": opts.lane = next(); break;
|
|
261
|
+
case "--model": opts.model = next(); flagged.add("model"); break;
|
|
262
|
+
case "--profile": opts.profile = next(); break;
|
|
263
|
+
case "--name": opts.name = next(); break;
|
|
264
|
+
case "--conversation": opts.conversation = next(); break;
|
|
265
|
+
case "--skill": opts.skill = next(); break;
|
|
266
|
+
case "--mcp": opts.mcp.push(next()); break;
|
|
267
|
+
case "--no-snapshot": opts.noSnapshot = true; break;
|
|
268
|
+
case "--timeout": opts.timeout = next(); flagged.add("timeout"); break;
|
|
269
|
+
case "--out-dir": opts.outDir = resolve(next()); break;
|
|
270
|
+
default:
|
|
271
|
+
fail(`unknown option: ${arg}`);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
applyFleetLane(opts, flagged);
|
|
275
|
+
for (const flag of ["model", "profile", "conversation"]) {
|
|
276
|
+
if (opts[flag] !== null && !SAFE_TOKEN.test(opts[flag])) {
|
|
277
|
+
fail(`--${flag} value contains unsupported characters (allowed: letters, digits, . _ : / -)`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// --skill and --mcp legitimately carry characters the token rule rejects (an
|
|
281
|
+
// inline MCP JSON blob, a path). Only a leading "-" is dangerous: oz would
|
|
282
|
+
// read the value as the next option.
|
|
283
|
+
for (const [flag, values] of [["skill", opts.skill === null ? [] : [opts.skill]], ["mcp", opts.mcp]]) {
|
|
284
|
+
for (const value of values) {
|
|
285
|
+
if (value === "" || value.startsWith("-")) {
|
|
286
|
+
fail(`--${flag} value must be non-empty and must not start with "-"`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (opts.name !== null && (opts.name === "" || opts.name.startsWith("-"))) {
|
|
291
|
+
fail('--name value must be non-empty and must not start with "-"');
|
|
292
|
+
}
|
|
293
|
+
if (parseDuration(opts.timeout) === null) {
|
|
294
|
+
fail(`--timeout "${opts.timeout}" is not a duration; use h/m/s strings like 30m, 90s, or 1h30m`);
|
|
295
|
+
}
|
|
296
|
+
if (parseDuration(opts.timeout) === 0) fail("--timeout must be greater than zero");
|
|
297
|
+
// setTimeout overflows past 2^31 - 1 ms (~24.8 days) and fires immediately,
|
|
298
|
+
// which would read as an instant spurious timeout — reject it up front.
|
|
299
|
+
if (parseDuration(opts.timeout) > 2_147_483_647) {
|
|
300
|
+
fail(`--timeout "${opts.timeout}" exceeds the maximum schedulable watchdog (~24.8 days)`);
|
|
301
|
+
}
|
|
302
|
+
if (!existsSync(opts.cd) || !statSync(opts.cd).isDirectory()) {
|
|
303
|
+
fail(`working directory not found: ${opts.cd}`);
|
|
304
|
+
}
|
|
305
|
+
return opts;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
function headerComment() {
|
|
309
|
+
// The leading block comment doubles as --help text.
|
|
310
|
+
const src = readFileSync(new URL(import.meta.url), "utf8");
|
|
311
|
+
const match = src.match(/\/\*\*([\s\S]*?)\*\//);
|
|
312
|
+
if (!match) return "relay.mjs - dispatch a brief to oz agent run\n";
|
|
313
|
+
return `${match[1].replace(/^\s*\* ?/gm, "").trim()}\n`;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
function readBrief(opts) {
|
|
317
|
+
if (opts.brief) {
|
|
318
|
+
if (!existsSync(opts.brief)) fail(`brief file not found: ${opts.brief}`);
|
|
319
|
+
return readFileSync(opts.brief, "utf8");
|
|
320
|
+
}
|
|
321
|
+
if (process.stdin.isTTY) {
|
|
322
|
+
fail("no --brief given and stdin is a TTY; pass --brief <file> or pipe the brief on stdin");
|
|
323
|
+
}
|
|
324
|
+
try {
|
|
325
|
+
return readFileSync(0, "utf8");
|
|
326
|
+
} catch {
|
|
327
|
+
return "";
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
function killChild(child, signal = "SIGTERM") {
|
|
332
|
+
if (!child || !child.pid) return;
|
|
333
|
+
if (process.platform === "win32") {
|
|
334
|
+
if (signal !== "SIGTERM") return;
|
|
335
|
+
try {
|
|
336
|
+
execFileSync("taskkill", ["/pid", String(child.pid), "/t", "/f"], {
|
|
337
|
+
stdio: ["ignore", "ignore", "inherit"],
|
|
338
|
+
});
|
|
339
|
+
} catch {
|
|
340
|
+
// The process tree already exited.
|
|
341
|
+
}
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
try {
|
|
345
|
+
process.kill(-child.pid, signal);
|
|
346
|
+
} catch {
|
|
347
|
+
try {
|
|
348
|
+
child.kill(signal);
|
|
349
|
+
} catch {
|
|
350
|
+
// The process group already exited.
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
async function probeOzVersion(timeoutMs, onChild) {
|
|
356
|
+
const limit = Math.min(timeoutMs, VERSION_TIMEOUT_MS);
|
|
357
|
+
const runProbe = (command, argv, options = {}) => new Promise((resolveProbe) => {
|
|
358
|
+
const child = spawn(command, argv, {
|
|
359
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
360
|
+
detached: process.platform !== "win32",
|
|
361
|
+
...options,
|
|
362
|
+
});
|
|
363
|
+
onChild(child);
|
|
364
|
+
let stdout = "";
|
|
365
|
+
let stderr = "";
|
|
366
|
+
let settled = false;
|
|
367
|
+
let timedOut = false;
|
|
368
|
+
let timer;
|
|
369
|
+
const finish = (result) => {
|
|
370
|
+
if (settled) return;
|
|
371
|
+
settled = true;
|
|
372
|
+
clearTimeout(timer);
|
|
373
|
+
resolveProbe({ stdout, stderr, ...result });
|
|
374
|
+
};
|
|
375
|
+
child.stdout.on("data", (chunk) => { stdout += chunk; });
|
|
376
|
+
child.stderr.on("data", (chunk) => { stderr += chunk; });
|
|
377
|
+
child.on("error", (error) => finish({ code: null, error, timedOut: false }));
|
|
378
|
+
child.on("close", (code) => finish({ code, error: null, timedOut }));
|
|
379
|
+
timer = setTimeout(() => {
|
|
380
|
+
timedOut = true;
|
|
381
|
+
killChild(child, process.platform === "win32" ? "SIGTERM" : "SIGKILL");
|
|
382
|
+
}, limit);
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
// `oz` installs as a native binary on the platforms this relay targets, so
|
|
386
|
+
// there is no .cmd shim to resolve and the probe runs without a shell — the
|
|
387
|
+
// same launch discipline the dispatch uses because the brief rides argv.
|
|
388
|
+
const probe = await runProbe("oz", ["--version"]);
|
|
389
|
+
if (probe.timedOut) {
|
|
390
|
+
return { version: null, error: Object.assign(new Error("oz --version timed out"), { code: "ETIMEDOUT", stderr: probe.stderr }) };
|
|
391
|
+
}
|
|
392
|
+
if (probe.error && probe.error.code === "ENOENT") return { version: null, error: null };
|
|
393
|
+
if (probe.error) return { version: null, error: probe.error };
|
|
394
|
+
if (probe.code !== 0) {
|
|
395
|
+
return { version: null, error: Object.assign(new Error("oz --version failed"), { status: probe.code, stderr: probe.stderr }) };
|
|
396
|
+
}
|
|
397
|
+
return { version: probe.stdout.trim() || "unknown", error: null };
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
function gitTouchedFiles(cwd) {
|
|
401
|
+
try {
|
|
402
|
+
const output = execFileSync("git", ["status", "--porcelain"], {
|
|
403
|
+
cwd,
|
|
404
|
+
encoding: "utf8",
|
|
405
|
+
timeout: 10_000,
|
|
406
|
+
killSignal: "SIGKILL",
|
|
407
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
408
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
409
|
+
});
|
|
410
|
+
return output.split("\n").map((line) => line.trimEnd()).filter(Boolean);
|
|
411
|
+
} catch {
|
|
412
|
+
return null;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
function timestamp() {
|
|
417
|
+
return new Date().toISOString().replace(/[:.]/g, "-");
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
function buildArgv(opts, brief) {
|
|
421
|
+
// ndjson streams one event object per line, so a long run reports progress
|
|
422
|
+
// instead of buffering to the end. The brief is the --prompt value: `oz agent
|
|
423
|
+
// run` requires one of --prompt/--saved-prompt/--task-id/--skill, and -f/--file
|
|
424
|
+
// does not satisfy that requirement.
|
|
425
|
+
const argv = ["agent", "run", "--output-format", "ndjson", "--cwd", opts.cd];
|
|
426
|
+
if (opts.model) argv.push("--model", opts.model);
|
|
427
|
+
if (opts.profile) argv.push("--profile", opts.profile);
|
|
428
|
+
if (opts.name) argv.push("--name", opts.name);
|
|
429
|
+
if (opts.conversation) argv.push("--conversation", opts.conversation);
|
|
430
|
+
if (opts.skill) argv.push("--skill", opts.skill);
|
|
431
|
+
for (const spec of opts.mcp) argv.push("--mcp", spec);
|
|
432
|
+
if (opts.noSnapshot) argv.push("--no-snapshot");
|
|
433
|
+
argv.push("--prompt", brief);
|
|
434
|
+
return argv;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* Pull agent-visible text out of one ndjson event.
|
|
439
|
+
*
|
|
440
|
+
* Verified against a live edit run on oz 0.2026.05.27: the report is carried by
|
|
441
|
+
* `{"type":"agent","text":…}` events, and system events are `type: "system"`
|
|
442
|
+
* with an `event_type` of `run_started` / `conversation_started`.
|
|
443
|
+
*
|
|
444
|
+
* `agent_reasoning` events carry a `text` field of the SAME shape but hold the
|
|
445
|
+
* model's private reasoning, not its report — matching on `text` alone splices
|
|
446
|
+
* that reasoning into finalMessage. They are dropped by type. Tool traffic
|
|
447
|
+
* (`tool_call`, `tool_result`, `tool_error`) carries no `text` and so needs no
|
|
448
|
+
* exclusion; it stays in events.jsonl.
|
|
449
|
+
*
|
|
450
|
+
* Everything past that stays tolerant rather than pinned to `type === "agent"`,
|
|
451
|
+
* so a renamed or added output event still reports instead of yielding an empty
|
|
452
|
+
* finalMessage; events.jsonl always keeps the raw stream.
|
|
453
|
+
*/
|
|
454
|
+
function collectText(event, push) {
|
|
455
|
+
if (!event || typeof event !== "object") return;
|
|
456
|
+
if (event.type === "system" || event.type === "agent_reasoning") return;
|
|
457
|
+
const pushString = (value) => { if (typeof value === "string" && value.trim()) push(value); };
|
|
458
|
+
if (typeof event.agent_output === "string") { pushString(event.agent_output); return; }
|
|
459
|
+
if (typeof event.text === "string") { pushString(event.text); return; }
|
|
460
|
+
if (typeof event.content === "string") { pushString(event.content); return; }
|
|
461
|
+
if (Array.isArray(event.content)) {
|
|
462
|
+
for (const part of event.content) if (part && part.type === "text") pushString(part.text);
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
const message = event.message;
|
|
466
|
+
if (message && typeof message === "object") {
|
|
467
|
+
if (typeof message.content === "string") { pushString(message.content); return; }
|
|
468
|
+
if (Array.isArray(message.content)) {
|
|
469
|
+
for (const part of message.content) if (part && part.type === "text") pushString(part.text);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
function prepareRunDir(opts, brief) {
|
|
475
|
+
const startedAt = new Date().toISOString();
|
|
476
|
+
const outDir = opts.outDir || join(tmpdir(), "delegate-relay", `${basename(opts.cd) || "repo"}-${timestamp()}`);
|
|
477
|
+
mkdirSync(outDir, { recursive: true });
|
|
478
|
+
const run = {
|
|
479
|
+
startedAt,
|
|
480
|
+
briefPath: join(outDir, "brief.txt"),
|
|
481
|
+
finalPath: join(outDir, "final.txt"),
|
|
482
|
+
eventsPath: join(outDir, "events.jsonl"),
|
|
483
|
+
stderrPath: join(outDir, "stderr.txt"),
|
|
484
|
+
resultPath: join(outDir, "result.json"),
|
|
485
|
+
};
|
|
486
|
+
// A reused --out-dir must not leak a previous run's artifacts into this one.
|
|
487
|
+
rmSync(run.finalPath, { force: true });
|
|
488
|
+
rmSync(run.resultPath, { force: true });
|
|
489
|
+
writeFileSync(run.briefPath, brief, "utf8");
|
|
490
|
+
writeFileSync(run.eventsPath, "", "utf8");
|
|
491
|
+
writeFileSync(run.stderrPath, "", "utf8");
|
|
492
|
+
return run;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
function makeResultWriter(opts, version, run) {
|
|
496
|
+
return (extra) => {
|
|
497
|
+
const result = {
|
|
498
|
+
schema: "delegate-relay.result.v1",
|
|
499
|
+
lane: opts.lane,
|
|
500
|
+
laneSource: opts.laneSource,
|
|
501
|
+
tool: "oz",
|
|
502
|
+
workdir: opts.cd,
|
|
503
|
+
model: opts.model,
|
|
504
|
+
profile: opts.profile,
|
|
505
|
+
snapshotDisabled: opts.noSnapshot,
|
|
506
|
+
resumed: Boolean(opts.conversation),
|
|
507
|
+
ozVersion: version,
|
|
508
|
+
startedAt: run.startedAt,
|
|
509
|
+
finishedAt: new Date().toISOString(),
|
|
510
|
+
briefPath: run.briefPath,
|
|
511
|
+
finalPath: existsSync(run.finalPath) ? run.finalPath : null,
|
|
512
|
+
eventsPath: run.eventsPath,
|
|
513
|
+
stderrPath: run.stderrPath,
|
|
514
|
+
...extra,
|
|
515
|
+
};
|
|
516
|
+
// Atomic write: a polling orchestrator never reads a half-written result.
|
|
517
|
+
const temporary = `${run.resultPath}.${process.pid}.tmp`;
|
|
518
|
+
writeFileSync(temporary, `${JSON.stringify(result, null, 2)}\n`, "utf8");
|
|
519
|
+
renameSync(temporary, run.resultPath);
|
|
520
|
+
return result;
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
function reportUnavailable(writeResult, resultPath) {
|
|
525
|
+
const result = writeResult({
|
|
526
|
+
status: "warp_unavailable",
|
|
527
|
+
exitCode: 127,
|
|
528
|
+
signal: null,
|
|
529
|
+
runId: null,
|
|
530
|
+
runUrl: null,
|
|
531
|
+
conversationId: null,
|
|
532
|
+
stderrTail: [],
|
|
533
|
+
finalMessage: "",
|
|
534
|
+
touchedFiles: null,
|
|
535
|
+
});
|
|
536
|
+
printSummary(result, resultPath);
|
|
537
|
+
process.stderr.write("relay: `oz` not found on PATH. Install the Warp Agent CLI (https://docs.warp.dev/cli/), then authenticate with `oz login` (or set WARP_API_KEY on a headless host).\n");
|
|
538
|
+
process.exit(127);
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
function reportVersionFailure(writeResult, run, error, timeoutMs) {
|
|
542
|
+
const timedOut = error && error.code === "ETIMEDOUT";
|
|
543
|
+
const stderr = String((error && error.stderr) || "").trim();
|
|
544
|
+
if (stderr) writeFileSync(run.stderrPath, `${stderr}\n`, "utf8");
|
|
545
|
+
const message = timedOut
|
|
546
|
+
? `oz --version preflight timed out after ${Math.min(timeoutMs, VERSION_TIMEOUT_MS)}ms; oz was not dispatched`
|
|
547
|
+
: `oz --version preflight failed${Number.isInteger(error && error.status) ? ` with exit ${error.status}` : ""}; oz was not dispatched`;
|
|
548
|
+
const result = writeResult({
|
|
549
|
+
status: timedOut ? "timeout" : "failed",
|
|
550
|
+
exitCode: timedOut ? 124 : Number.isInteger(error && error.status) ? error.status : 1,
|
|
551
|
+
signal: null,
|
|
552
|
+
runId: null,
|
|
553
|
+
runUrl: null,
|
|
554
|
+
conversationId: null,
|
|
555
|
+
finalMessage: "",
|
|
556
|
+
touchedFiles: null,
|
|
557
|
+
stderrTail: stderr ? stderr.split("\n").slice(-20) : [],
|
|
558
|
+
error: message,
|
|
559
|
+
});
|
|
560
|
+
printSummary(result, run.resultPath);
|
|
561
|
+
process.stderr.write(`relay: ${message}\n`);
|
|
562
|
+
process.exit(result.exitCode);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
function installPreflightSignalHandlers(opts, run, writeResult, getChild) {
|
|
566
|
+
let active = true;
|
|
567
|
+
const handlers = new Map();
|
|
568
|
+
for (const sig of ["SIGTERM", "SIGINT", "SIGHUP"]) {
|
|
569
|
+
const handler = () => {
|
|
570
|
+
if (!active) return;
|
|
571
|
+
active = false;
|
|
572
|
+
const result = writeResult({
|
|
573
|
+
status: "aborted",
|
|
574
|
+
exitCode: 128 + (constants.signals[sig] || 15),
|
|
575
|
+
signal: sig,
|
|
576
|
+
runId: null,
|
|
577
|
+
runUrl: null,
|
|
578
|
+
conversationId: null,
|
|
579
|
+
stderrTail: [],
|
|
580
|
+
finalMessage: "",
|
|
581
|
+
touchedFiles: gitTouchedFiles(opts.cd),
|
|
582
|
+
error: `the relay was killed by ${sig} during the oz version preflight; oz was not dispatched`,
|
|
583
|
+
});
|
|
584
|
+
printSummary(result, run.resultPath);
|
|
585
|
+
const child = getChild();
|
|
586
|
+
if (child) killChild(child, process.platform === "win32" ? "SIGTERM" : "SIGKILL");
|
|
587
|
+
process.exit(result.exitCode);
|
|
588
|
+
};
|
|
589
|
+
handlers.set(sig, handler);
|
|
590
|
+
process.on(sig, handler);
|
|
591
|
+
}
|
|
592
|
+
return () => {
|
|
593
|
+
active = false;
|
|
594
|
+
for (const [sig, handler] of handlers) process.removeListener(sig, handler);
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
function dispatchToOz(opts, brief, run, writeResult) {
|
|
599
|
+
const child = spawn("oz", buildArgv(opts, brief), {
|
|
600
|
+
cwd: opts.cd,
|
|
601
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
602
|
+
// Never shell:true. The brief is an argv value here, and a shell would
|
|
603
|
+
// reinterpret it. `oz` is a native binary, so no shim resolution needs one.
|
|
604
|
+
detached: process.platform !== "win32", // POSIX: lead a new process group so killChild can fell the whole tree
|
|
605
|
+
});
|
|
606
|
+
|
|
607
|
+
let runId = null;
|
|
608
|
+
let runUrl = null;
|
|
609
|
+
let conversationId = null;
|
|
610
|
+
let streamError = null;
|
|
611
|
+
const textChunks = [];
|
|
612
|
+
const stderrTail = [];
|
|
613
|
+
const scan = makeEventScanner((event) => {
|
|
614
|
+
if (event && typeof event === "object") {
|
|
615
|
+
if (typeof event.run_id === "string") runId = event.run_id;
|
|
616
|
+
if (typeof event.run_url === "string") runUrl = event.run_url;
|
|
617
|
+
if (typeof event.conversation_id === "string") conversationId = event.conversation_id;
|
|
618
|
+
if (event.type === "error" || event.event_type === "run_failed") {
|
|
619
|
+
const detail = typeof event.message === "string" ? event.message
|
|
620
|
+
: typeof event.error === "string" ? event.error : null;
|
|
621
|
+
streamError = detail || `oz reported ${event.event_type || event.type}`;
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
collectText(event, (text) => textChunks.push(text));
|
|
625
|
+
});
|
|
626
|
+
|
|
627
|
+
// Decode across chunk boundaries: a multibyte UTF-8 character split between
|
|
628
|
+
// two data events would otherwise decode as U+FFFD and corrupt the report.
|
|
629
|
+
// Files get the raw bytes; only in-memory parsing goes through the decoders.
|
|
630
|
+
const stdoutDecoder = new StringDecoder("utf8");
|
|
631
|
+
const stderrDecoder = new StringDecoder("utf8");
|
|
632
|
+
|
|
633
|
+
child.stdout.on("data", (chunk) => {
|
|
634
|
+
appendFileSync(run.eventsPath, chunk);
|
|
635
|
+
scan(stdoutDecoder.write(chunk));
|
|
636
|
+
});
|
|
637
|
+
|
|
638
|
+
child.stderr.on("data", (chunk) => {
|
|
639
|
+
process.stderr.write(chunk);
|
|
640
|
+
appendFileSync(run.stderrPath, chunk);
|
|
641
|
+
const text = stderrDecoder.write(chunk);
|
|
642
|
+
for (const line of text.split("\n")) {
|
|
643
|
+
if (line.trim()) stderrTail.push(line.trimEnd());
|
|
644
|
+
}
|
|
645
|
+
while (stderrTail.length > 20) stderrTail.shift();
|
|
646
|
+
});
|
|
647
|
+
|
|
648
|
+
const assembleFinal = () => {
|
|
649
|
+
const message = textChunks.join("\n\n");
|
|
650
|
+
if (message) writeFileSync(run.finalPath, message, "utf8");
|
|
651
|
+
return message;
|
|
652
|
+
};
|
|
653
|
+
|
|
654
|
+
let settled = false;
|
|
655
|
+
let watchdogFired = false;
|
|
656
|
+
let sigkillTimer = null;
|
|
657
|
+
const timeoutMs = parseDuration(opts.timeout) ?? parseDuration(DEFAULT_TIMEOUT);
|
|
658
|
+
const watchdogTimer = setTimeout(() => {
|
|
659
|
+
watchdogFired = true;
|
|
660
|
+
child.once("exit", () => {
|
|
661
|
+
child.stdout.destroy();
|
|
662
|
+
child.stderr.destroy();
|
|
663
|
+
});
|
|
664
|
+
killChild(child);
|
|
665
|
+
sigkillTimer = setTimeout(() => {
|
|
666
|
+
if (!settled) killChild(child, "SIGKILL");
|
|
667
|
+
}, 10_000);
|
|
668
|
+
}, timeoutMs);
|
|
669
|
+
|
|
670
|
+
const clearWatchdog = () => {
|
|
671
|
+
clearTimeout(watchdogTimer);
|
|
672
|
+
if (sigkillTimer) clearTimeout(sigkillTimer);
|
|
673
|
+
};
|
|
674
|
+
|
|
675
|
+
// The relay's own death must still produce a result: without this, a kill from the
|
|
676
|
+
// orchestrator's side (its command timeout, a stopped task, a closed terminal) writes
|
|
677
|
+
// no result.json and leaves the oz child running or dying mid-edit with nothing
|
|
678
|
+
// recording why. SIGTERM/SIGHUP registration is a no-op on Windows; SIGINT works there.
|
|
679
|
+
for (const sig of ["SIGTERM", "SIGINT", "SIGHUP"]) {
|
|
680
|
+
process.on(sig, () => {
|
|
681
|
+
if (settled) return;
|
|
682
|
+
settled = true;
|
|
683
|
+
clearWatchdog();
|
|
684
|
+
const abortedFields = {
|
|
685
|
+
status: "aborted",
|
|
686
|
+
exitCode: 128 + (constants.signals[sig] || 15),
|
|
687
|
+
signal: sig,
|
|
688
|
+
runId,
|
|
689
|
+
runUrl,
|
|
690
|
+
conversationId,
|
|
691
|
+
finalMessage: assembleFinal(),
|
|
692
|
+
touchedFiles: gitTouchedFiles(opts.cd),
|
|
693
|
+
stderrTail: stderrTail.slice(-20),
|
|
694
|
+
error: `the relay was killed by ${sig}; oz was terminated with it — inspect the working tree before re-dispatching`,
|
|
695
|
+
};
|
|
696
|
+
const result = writeResult(abortedFields);
|
|
697
|
+
printSummary(result, run.resultPath);
|
|
698
|
+
killChild(child);
|
|
699
|
+
setTimeout(() => {
|
|
700
|
+
killChild(child, "SIGKILL");
|
|
701
|
+
// the child may flush files during the grace window; refresh the snapshot so the
|
|
702
|
+
// artifact matches the tree the orchestrator will actually find
|
|
703
|
+
writeResult({ ...abortedFields, touchedFiles: gitTouchedFiles(opts.cd) });
|
|
704
|
+
process.exit(result.exitCode);
|
|
705
|
+
}, 2000);
|
|
706
|
+
});
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
// A grandchild that outlives warp and inherited the pipes keeps stdout/stderr open, so
|
|
710
|
+
// "close" never fires and the relay waits forever, writing no result. Once warp itself is
|
|
711
|
+
// gone the pipes hold nothing we still need, so drop them after a short drain grace and let
|
|
712
|
+
// "close" run. This is the normal-exit twin of the stream teardown the watchdog already
|
|
713
|
+
// does on the timeout path.
|
|
714
|
+
child.once("exit", () => {
|
|
715
|
+
// The implementer already exited. Leaving the watchdog armed lets a drain that
|
|
716
|
+
// overlaps the remaining budget fire, set watchdogFired, and report timeout.
|
|
717
|
+
if (!watchdogFired) clearWatchdog();
|
|
718
|
+
const drain = setTimeout(() => {
|
|
719
|
+
if (settled) return;
|
|
720
|
+
child.stdout.destroy();
|
|
721
|
+
child.stderr.destroy();
|
|
722
|
+
}, 500);
|
|
723
|
+
if (typeof drain.unref === "function") drain.unref();
|
|
724
|
+
});
|
|
725
|
+
|
|
726
|
+
child.on("error", (err) => {
|
|
727
|
+
if (settled) return;
|
|
728
|
+
settled = true;
|
|
729
|
+
clearWatchdog();
|
|
730
|
+
const result = writeResult({
|
|
731
|
+
status: "failed",
|
|
732
|
+
exitCode: 1,
|
|
733
|
+
signal: null,
|
|
734
|
+
runId,
|
|
735
|
+
runUrl,
|
|
736
|
+
conversationId,
|
|
737
|
+
finalMessage: assembleFinal(),
|
|
738
|
+
touchedFiles: gitTouchedFiles(opts.cd),
|
|
739
|
+
stderrTail: stderrTail.slice(-20),
|
|
740
|
+
error: String(err && err.message ? err.message : err),
|
|
741
|
+
});
|
|
742
|
+
printSummary(result, run.resultPath);
|
|
743
|
+
process.exit(1);
|
|
744
|
+
});
|
|
745
|
+
|
|
746
|
+
child.on("close", (code, signal) => {
|
|
747
|
+
if (settled) return;
|
|
748
|
+
settled = true;
|
|
749
|
+
clearWatchdog();
|
|
750
|
+
// a descendant that ignored SIGTERM must not outlive the timeout report: once the
|
|
751
|
+
// parent is down, sweep the group (no-op where taskkill already felled the tree)
|
|
752
|
+
if (watchdogFired) killChild(child, "SIGKILL");
|
|
753
|
+
// A timed-out run is failed even if oz handles SIGTERM by exiting 0 —
|
|
754
|
+
// orchestrators key off status and the relay exit code.
|
|
755
|
+
const succeeded = code === 0 && !watchdogFired && !streamError;
|
|
756
|
+
const mapped = code ?? (constants.signals[signal] ? 128 + constants.signals[signal] : 1);
|
|
757
|
+
const exitCode = succeeded ? 0 : mapped === 0 ? 1 : mapped;
|
|
758
|
+
const result = writeResult({
|
|
759
|
+
status: succeeded ? "completed" : watchdogFired ? "timeout" : "failed",
|
|
760
|
+
exitCode,
|
|
761
|
+
signal: signal ?? null,
|
|
762
|
+
runId,
|
|
763
|
+
runUrl,
|
|
764
|
+
conversationId,
|
|
765
|
+
finalMessage: assembleFinal(),
|
|
766
|
+
touchedFiles: gitTouchedFiles(opts.cd),
|
|
767
|
+
...(succeeded ? {} : { stderrTail: stderrTail.slice(-20) }),
|
|
768
|
+
...(watchdogFired ? { error: `oz did not finish within --timeout ${opts.timeout}; killed by the relay watchdog` } : {}),
|
|
769
|
+
...(!watchdogFired && streamError ? { error: streamError } : {}),
|
|
770
|
+
});
|
|
771
|
+
printSummary(result, run.resultPath);
|
|
772
|
+
process.exit(result.exitCode);
|
|
773
|
+
});
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
async function main() {
|
|
777
|
+
const opts = parseArgs(process.argv.slice(2));
|
|
778
|
+
const brief = readBrief(opts);
|
|
779
|
+
if (!brief.trim()) fail("empty brief (pass --brief <file> or pipe the brief on stdin)");
|
|
780
|
+
|
|
781
|
+
const timeoutMs = parseDuration(opts.timeout) ?? parseDuration(DEFAULT_TIMEOUT);
|
|
782
|
+
const run = prepareRunDir(opts, brief);
|
|
783
|
+
let writeResult = makeResultWriter(opts, null, run);
|
|
784
|
+
let preflightChild = null;
|
|
785
|
+
const clearPreflightSignals = installPreflightSignalHandlers(opts, run, writeResult, () => preflightChild);
|
|
786
|
+
const probe = await probeOzVersion(timeoutMs, (child) => { preflightChild = child; });
|
|
787
|
+
writeResult = makeResultWriter(opts, probe.version, run);
|
|
788
|
+
if (!probe.version && !probe.error) {
|
|
789
|
+
clearPreflightSignals();
|
|
790
|
+
reportUnavailable(writeResult, run.resultPath);
|
|
791
|
+
return;
|
|
792
|
+
}
|
|
793
|
+
if (!probe.version) {
|
|
794
|
+
clearPreflightSignals();
|
|
795
|
+
reportVersionFailure(writeResult, run, probe.error, timeoutMs);
|
|
796
|
+
return;
|
|
797
|
+
}
|
|
798
|
+
clearPreflightSignals();
|
|
799
|
+
dispatchToOz(opts, brief, run, writeResult);
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
function printSummary(result, resultPath) {
|
|
803
|
+
const lines = [];
|
|
804
|
+
lines.push("");
|
|
805
|
+
lines.push(`relay: ${result.status} (exit ${result.exitCode}${result.signal ? `, killed by ${result.signal}` : ""}) · oz ${result.ozVersion ?? "?"}`);
|
|
806
|
+
if (result.signal === "SIGKILL" && result.status === "failed") lines.push("hint: the host killed the process (commonly the OOM killer or a supervisor timeout) — this is not an oz error; check host memory and re-dispatch, or split the task into smaller briefs.");
|
|
807
|
+
if (result.signal === "SIGTERM" && result.status === "failed") lines.push("hint: something outside the relay terminated oz (a supervisor, the session ending, or a manual kill) — when the relay itself does the killing it reports status \"timeout\" or \"aborted\" instead; inspect the working tree before re-dispatching.");
|
|
808
|
+
lines.push("mode: full local tool access — the Warp Agent CLI has no sandbox, permission mode, or read-only run");
|
|
809
|
+
if (result.snapshotDisabled) lines.push("mode: end-of-run workspace snapshot upload disabled (--no-snapshot)");
|
|
810
|
+
if (result.resumed) lines.push("mode: continued an existing conversation");
|
|
811
|
+
if (result.model) lines.push(`model: ${result.model}`);
|
|
812
|
+
if (result.conversationId) lines.push(`conversation id (continue with: --conversation ${result.conversationId}): ${result.conversationId}`);
|
|
813
|
+
if (result.runId) lines.push(`run id: ${result.runId}`);
|
|
814
|
+
if (result.runUrl) lines.push(`run url: ${result.runUrl}`);
|
|
815
|
+
const touched = result.touchedFiles;
|
|
816
|
+
if (touched === null) {
|
|
817
|
+
lines.push("touched files: git unavailable - inspect the working tree directly");
|
|
818
|
+
} else {
|
|
819
|
+
lines.push(`touched files: ${touched.length}`);
|
|
820
|
+
for (const file of touched.slice(0, 40)) lines.push(` ${file}`);
|
|
821
|
+
if (touched.length > 40) lines.push(` ... and ${touched.length - 40} more`);
|
|
822
|
+
}
|
|
823
|
+
if (result.stderrTail && result.stderrTail.length) {
|
|
824
|
+
lines.push("last stderr:");
|
|
825
|
+
for (const line of result.stderrTail.slice(-8)) lines.push(` ${line}`);
|
|
826
|
+
}
|
|
827
|
+
lines.push("");
|
|
828
|
+
lines.push("--- oz final report ---");
|
|
829
|
+
lines.push(result.finalMessage || "(no final message captured — read events.jsonl for the raw stream)");
|
|
830
|
+
lines.push("--- end report ---");
|
|
831
|
+
lines.push("");
|
|
832
|
+
lines.push(`result: ${resultPath}`);
|
|
833
|
+
lines.push("relay does not commit. Review the diff, re-run the project gates yourself, then commit from the orchestrator.");
|
|
834
|
+
process.stdout.write(`${lines.join("\n")}\n`);
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
main();
|