@ccoalm/ccl-skills 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +49 -0
- package/dist/assets/marketplace/.agents/plugins/marketplace.json +12 -0
- package/dist/assets/marketplace/.claude-plugin/marketplace.json +13 -0
- package/dist/assets/marketplace/marketplace-manifest.json +12 -0
- package/dist/assets/marketplace/plugins/ccl-skills/.claude-plugin/marketplace.json +16 -0
- package/dist/assets/marketplace/plugins/ccl-skills/.claude-plugin/plugin.json +5 -0
- package/dist/assets/marketplace/plugins/ccl-skills/.codex-plugin/plugin.json +5 -0
- package/dist/assets/marketplace/plugins/ccl-skills/.worktree-only +3 -0
- package/dist/assets/marketplace/plugins/ccl-skills/agent-context/session-start.md +45 -0
- package/dist/assets/marketplace/plugins/ccl-skills/agent-context/subagent-start.md +12 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/AGENTS.md +19 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/guard-delegation-owner.sh +125 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/guard-edit-isolation.sh +102 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/guard-merge-authorization.sh +1156 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/hooks.json +131 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/merge-authorization-prompt.sh +142 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/owner-dispatch-guard.sh +12 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/owner-dispatch-stop.sh +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/remind-post-merge-cleanup.sh +144 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/session-context.sh +87 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/session-start.sh +86 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/skill-extraction-gate-stop.sh +69 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/subagent-start.sh +26 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_guard_delegation_owner.sh +329 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_guard_edit_isolation.sh +322 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_guard_merge_authorization.sh +902 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_merge_authorization_prompt.sh +178 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_remind_post_merge_cleanup.sh +121 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_session_start.sh +170 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/AGENTS.md +17 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/ccl-skills.ts +564 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-install-skills.md +14 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-update-skills.md +44 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-verify-skills.md +109 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-worktree-check.md +36 -0
- package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/AGENTS.md +28 -0
- package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/README.md +276 -0
- package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/owner-dispatch.example.json +10 -0
- package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/owner-dispatch.sh +1307 -0
- package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/test.sh +941 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/agents-file-coverage-gate/SKILL.md +45 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/agents-file-coverage-gate/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/SKILL.md +188 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/android-dev.md +92 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/flutter-dev.md +80 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/ios-dev.md +72 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/kotlin-multiplatform.md +93 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/mobile-platform-boundaries.md +77 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/mobile-quality-release.md +77 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/source-evidence-map.md +64 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/SKILL.md +353 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/client-routing.md +419 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/manual-invocation-and-prompts.md +126 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/staged-review-contract.md +197 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/timeout-auth-and-capabilities.md +179 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/AGENTS.md +98 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/classify_envelope.py +93 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/classify_timeout_exit.sh +15 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/claude_review.sh +1438 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/codex_review.sh +324 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/concern_excerpt.py +295 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/egress_schema.py +214 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/init_policy_matrix.py +642 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/kimi_packet_mcp.py +181 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/kimi_review.sh +1165 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/opencode_review.sh +1190 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_cli_review.py +946 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_opencode_review.py +474 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_probe_result.py +1899 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_review_json.py +200 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/review_gate.py +2845 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/review_gate.sh +6 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/run_claude_capture.py +71 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/runtime-surface-verification-design.md +53 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_classify_envelope.sh +68 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_claude_review_probe.sh +2311 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_cli_review_wrappers.sh +1832 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_code_review_identity.sh +73 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_concern_excerpt.sh +245 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_egress_schema.sh +177 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_init_policy_matrix.sh +272 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_kimi_packet_mcp.py +195 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_opencode_review_concurrency.sh +120 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_opencode_review_retry.sh +1005 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_parse_opencode_review.sh +258 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_parse_probe_result.sh +574 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_parse_review_json.sh +349 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_client_compat.py +434 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_client_order.sh +264 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_gate.sh +2412 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/verify_native_skill_binding.py +123 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/SKILL.md +153 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/references/diagnosis-playbook.md +54 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/references/prevention-routing.md +36 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/feature-risk-router/SKILL.md +69 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/feature-risk-router/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/feature-risk-router/references/security-review-gate.md +41 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/SKILL.md +165 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/api-security-boundaries.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/architecture-playbook.md +160 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/artifact-generation-architecture.md +37 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/audit-history-architecture.md +29 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/bulk-workflow-architecture.md +33 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/config-rule-routing-architecture.md +34 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/cross-cutting-concerns.md +72 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/data-modeling-and-migrations.md +79 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/data-platform-architecture.md +210 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/dependency-platform.md +105 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/developer-tooling-architecture.md +38 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/error-contract-architecture.md +36 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/event-driven-architecture.md +260 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/http-gateway-architecture.md +74 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/mq-consumer-architecture.md +38 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/multi-tenant-isolation.md +275 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/notification-architecture.md +25 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/ops-checklist.md +57 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/performance-capacity-architecture.md +38 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/protobuf-contract-architecture.md +119 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/redis-cache-coordination.md +93 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/release-runtime-readiness.md +65 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/replay-comparison-architecture.md +26 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/runtime-observability.md +94 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/service-scaffold.md +76 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/source-evidence-map.md +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/workflow-state-architecture.md +38 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/SKILL.md +159 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/artifact-generation-patterns.md +37 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/audit-history-patterns.md +28 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/bulk-import-export-patterns.md +56 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/config-rule-routing-patterns.md +38 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/data-access-patterns.md +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/db-schema-and-dal-patterns.md +109 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/dependency-client-patterns.md +130 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/developer-tooling-patterns.md +70 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/domain-feature-patterns.md +78 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/engineering-patterns.md +119 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/error-contract-patterns.md +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/feature-playbook.md +61 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/http-gateway-client-patterns.md +76 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/mq-consumer-patterns.md +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/notification-patterns.md +42 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/observability-implementation-patterns.md +101 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/performance-capacity-patterns.md +44 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/protobuf-contract-patterns.md +72 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/public-api-integration-patterns.md +56 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/quality-and-testing-patterns.md +91 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/redis-cache-lock-patterns.md +123 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/release-ops-patterns.md +112 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/reliability-patterns.md +83 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/replay-comparison-patterns.md +32 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/scaffold-and-codegen.md +86 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/source-evidence-map.md +54 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/state-machine-task-patterns.md +45 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/grill-me/SKILL.md +80 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/grill-me/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/SKILL.md +117 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-approval-auto-reviewer.md +106 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-command-sandbox.md +441 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-context-freshness.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-credentials-auth.md +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-extensions-skills.md +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-file-edit-protocol.md +129 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-ide-integration.md +5 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-input-ingestion.md +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-instruction-composition.md +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-lifecycle-hooks.md +92 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-messaging.md +5 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-runtime-bootstrap.md +5 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-session-persistence.md +448 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-task-orchestration.md +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-tool-dispatch.md +123 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-turn-lifecycle.md +131 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/inference-capacity-operations.md +162 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/llm-client-gateway.md +156 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/model-prompt-evaluation.md +146 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/retrieval-agent-safety.md +273 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/SKILL.md +202 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/contracts-and-state.md +62 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/cross-stack-alignment.md +94 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/framework-choice.md +76 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/online-practice-uptake.md +56 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/platform-capabilities.md +91 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/product-page-checklist.md +40 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/qa-release.md +72 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/source-evidence-map.md +82 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-agent-delegation/SKILL.md +103 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-agent-delegation/agents/openai.yaml +5 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-agent-delegation/references/multi-agent-delegation-playbook.md +100 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/SKILL.md +70 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/references/public-data-acquisition.md +549 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/references/public-disclosure-channels.md +97 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/references/research-prompts.md +66 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/scripts/AGENTS.md +32 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/scripts/test-public-data-acquisition-recipes.sh +379 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/SKILL.md +244 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/alerting-and-on-call.md +76 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/framework-middleware-checklist.md +142 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/infra-component-deployment.md +268 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/log-correlation-recipe.md +124 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/log-schema-canonical.md +208 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/metrics-conventions.md +105 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/obs-stack-architecture.md +107 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/sli-slo-design.md +95 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/source-register.md +11 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/SKILL.md +303 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/canary-and-rollout-strategy.md +163 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/config-center-via-etcd.md +245 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/custom-control-plane-boundary.md +298 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/deploy-cli-concrete-recipe.md +312 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/deploy-pipeline.md +165 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/env-and-lane-matrix.md +126 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/lane-orchestration-control-plane.md +383 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/multi-region-and-cluster.md +135 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/promotion-gate-and-review.md +149 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/python-package-registry-release.md +462 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/rollback-playbook.md +123 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/secret-and-config-management.md +231 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/version-authority-and-deprecation.md +21 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/SKILL.md +276 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/dual-sidecar-and-traffic-config-center.md +127 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/framework-middleware.md +143 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/grpc-authority-workaround.md +90 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/http-response-envelope-contract.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/mesh-architecture.md +127 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/multi-env-routing.md +192 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/protobuf-http-contract-signals.md +64 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/retry-timeout-circuit-breaker.md +124 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/rpc-framework-recipe.md +494 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/service-discovery-choice.md +113 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/service-discovery-migration-playbook.md +231 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/service-discovery-recipe.md +131 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/SKILL.md +235 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/adr-convention.md +146 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-checklist.md +30 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-evaluation-report-template.md +25 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-execution-spec.md +108 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-sop.md +457 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-templates.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/artifact-egress-confidentiality.md +58 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/code-review-checklist.md +86 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/cross-repo-coordination.md +46 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/delivery-lifecycle.md +192 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/design-review-gate-mechanics.md +62 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/design-routing-and-readiness.md +45 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/diagnostic-spec-match-gate.md +36 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/dispatch-owner-skills.md +35 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/dormant-code-activation.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/existing-project-assessment-report.md +223 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/external-skill-augmentation.md +46 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/feature-deprecation-cascade.md +15 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/high-risk-resilience-gates.md +73 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/implementation-completeness-and-minimality.md +120 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/implementation-entry-reentry-gate.md +122 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/modular-monolith-heuristic.md +105 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/pre-final-continuation-gate.md +115 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/problem-resolution-and-learning.md +62 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/quality-attributes.md +112 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/quality-remediation-program.md +88 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/rd-standards-doc-family-checklist.md +27 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/refactoring-discipline.md +52 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/review-reception.md +34 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/shared-gate-artifact-classification.md +76 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/source-evidence-map.md +31 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/status-tracker-sync.md +77 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/sync-spec-repo-contract.md +25 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/verify-developer-experience.md +34 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/worktree-mechanics.md +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/scripts/AGENTS.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/scripts/check-agent-contract-coverage.sh +213 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/SKILL.md +136 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/agents/openai.yaml +9 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/analytics-visualization-interactions.md +206 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/behavioral-aesthetic-logic.md +108 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/complex-creation-interactions.md +194 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-execution-checklist.md +214 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-impl-naming-and-versioning.md +53 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-intake-and-acceptance.md +129 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-system-source-of-truth.md +97 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/external-ui-ux-quality-benchmarks.md +79 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/frontend-code-evidence-map.md +63 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/interaction-design-patterns.md +146 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/layout-recipes-and-screenshot-acceptance.md +250 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/multi-project-token-consistency.md +237 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/multi-stack-strategy.md +65 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/operational-processing-workflows.md +237 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/platform-mobile-patterns.md +324 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/platform-web-desktop-patterns.md +456 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/product-lifecycle-acceptance-and-iteration.md +114 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/product-surface-patterns.md +79 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/resource-management-interactions.md +113 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/scenario-community-patterns.md +133 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/source-map.md +130 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/tokens-and-components.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/trust-sensitive-ai-and-data-patterns.md +96 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/ui-ux-audit.md +106 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/ui-ux-design-development.md +176 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/visual-craft.md +111 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/SKILL.md +157 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/ai-service-integration-boundaries.md +57 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/api-contract-and-schema.md +62 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/api-security-boundaries.md +39 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/architecture-playbook.md +46 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/async-execution-model.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/background-jobs-and-scheduling.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/batch-and-pipeline-architecture.md +11 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/config-secrets-runtime.md +22 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/data-modeling-and-migrations.md +64 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/data-platform-architecture.md +211 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/event-driven-architecture.md +263 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/multi-tenant-isolation.md +281 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/observability-and-ops.md +26 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/packaging-runtime-readiness.md +20 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/redis-cache-coordination.md +41 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/reliability-and-error-contract.md +17 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/source-evidence-map.md +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/web-framework-boundaries.md +26 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/SKILL.md +143 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/ai-service-wiring-patterns.md +16 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/async-and-worker-patterns.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/background-job-patterns.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/batch-and-artifact-patterns.md +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/dependency-client-patterns.md +39 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/error-handling-patterns.md +26 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/feature-playbook.md +43 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/observability-implementation-patterns.md +31 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/project-structure-and-tooling.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/public-api-security-patterns.md +52 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/redis-cache-lock-patterns.md +78 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/schema-and-validation-patterns.md +23 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/source-evidence-map.md +56 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/sqlalchemy-and-migrations-patterns.md +99 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/testing-and-quality-patterns.md +61 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/web-framework-patterns.md +35 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/SKILL.md +91 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/config-runtime-readback.md +20 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/mr-merge-authorization.md +31 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/post-release-env-reset.md +31 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/release-closeout-evidence.md +20 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/release-scope-confirmation.md +21 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/tag-and-prod-pipeline-gate.md +20 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/test-scope-prompt.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/watcher-discipline.md +14 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/SKILL.md +64 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/references/comment-safe-release-doc.md +19 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/references/release-evidence-workflow.md +23 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/references/release-testing-scope-section.md +15 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-baseline/SKILL.md +87 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-baseline/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/SKILL.md +130 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/references/prd-composition-contract.md +35 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/references/requirement-closure-contract.md +86 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/references/security-four-questions.md +38 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-intent/SKILL.md +91 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-intent/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-scope/SKILL.md +88 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-scope/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/SKILL.md +337 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/analysis-parse-fix-test-challenge-replay.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/attribution-verification.md +69 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/bootstrap-slim-c3-obligation-table.md +112 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/coverage-exhaustion-traps.md +45 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/description-authoring.md +162 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/dual-track-review-gate.md +507 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/eval-routing.md +86 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/evidence-card-template.md +51 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/example-domain-preselect.md +79 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/external-practice-controls.md +57 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/extraction-lifecycle-handoff.md +65 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/extraction-quickstart.md +194 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/firing-point-placement.md +75 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/harness-patterns-and-eval.md +286 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/incident-postmortem-extraction.md +190 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/l0-l1-l2-routing.md +114 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/online-skill-review.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/parallel-stack-references-pattern.md +164 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/r0-leakage-audit.md +90 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/recurring-anti-patterns-checklist.md +320 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/resume-paused-delivery.md +16 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/review-feedback-mining.md +33 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/review-finding-standards.md +57 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/review-rubric.md +40 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/rule-consolidation.md +118 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/skill-listing-budget.md +19 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-register.md +254 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-to-skill-extraction.md +658 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/two-source-extraction-pattern.md +167 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/uiux-judgment-extraction.md +179 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/uiux-routing-map.md +51 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/validation-and-landing.md +180 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/AGENTS.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-ccl-skills.sh +1452 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-evidence-card-leak.sh +491 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-mr-target-freshness.sh +173 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-size-budget.sh +488 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-sync-pointers.sh +419 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-golden-trace.rb +197 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-health.rb +327 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-routing-bank.rb +401 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-routing.rb +248 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/generic-r0-leak-scan.sh +282 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/governing-chain-diff.py +321 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/impact-chain-gate.rb +964 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/register-firing-path-resolution.rb +708 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/skill-behavior-eval.py +540 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/source-register-lifecycle.rb +51 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/source-register-pending-status.rb +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_ai_coding_implementation_gates.sh +829 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_impact_chain_refscripts.sh +1203 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_r0_status.sh +75 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_register_pending_exclusion.sh +137 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_regressions.sh +173 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_route_drift.sh +377 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_size_budget.sh +833 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_skill_catalog.sh +491 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_source_register_lifecycle.sh +114 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_mr_target_freshness.sh +261 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_sync_pointers.sh +538 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_controlled_escalation_pins.sh +154 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_grader_diagnostics.sh +190 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_surface_binding.sh +178 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_prose_target.sh +86 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_generic_r0_leak_scan.sh +131 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_git_identity_predicate_gate.sh +243 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_governing_chain_diff.sh +419 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_gate_dateless_host.sh +120 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_resolution.sh +724 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_wiring.sh +414 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_regression_runner_registration.sh +34 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_routing_bank_integrity.sh +205 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_routing_pointer_integrity.sh +194 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_skill_credential_cwd.sh +61 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_skill_cross_refs.sh +111 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_skill_root_depth.sh +53 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/validate-skill.sh +257 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/SKILL.md +98 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/references/input-state-machines.md +36 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/references/streaming-rich-output.md +130 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/references/terminal-side-channels.md +96 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/SKILL.md +408 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/AGENTS.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/bitable-setup.md +573 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/ci_templates/README.md +120 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/ci_templates/github-actions.yml +119 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/ci_templates/gitlab-ci.yml +76 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/ci_templates/jenkins.Jenkinsfile +106 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/classical-test-design-techniques.md +279 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/gen_report.py +2807 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/makefile-template.md +200 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/report-config-schema.md +272 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/run_pytestless.py +475 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/source-to-case-workflows.md +258 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc-marker-conventions.md +316 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc-review-and-prioritization.md +145 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/AGENTS.md +16 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/tc.dart +129 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/tc.go +197 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/tc.py +135 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/tc.ts +285 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/test_gen_report.py +2144 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/update-lifecycle.md +62 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/SKILL.md +212 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/ci-fixtures-and-flake-control.md +75 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/client-runtime-test-matrices.md +50 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/data-and-workflow-testing.md +34 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/design-closed-contract-oracles.md +31 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/e2e-real-flow-testing.md +71 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/fitness-functions.md +240 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/integration-contract-testing.md +235 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/non-functional-specialized-scenarios.md +296 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/rd-testing-standard-template.md +126 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/run-killing-mutation-walk.md +43 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/scenario-testing.md +136 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/source-evidence-map.md +59 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/structured-tc-input-translation.md +67 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/test-code-authoring-patterns.md +392 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/test-data-and-determinism.md +39 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/test-topology-and-commands.md +92 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/unit-testing.md +46 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/vendored-contract-drift-checklist.md +64 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/verify-enforcement-mechanisms.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/AGENTS.md +17 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/client-terminal-ansi-check.py +140 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/client-terminal-ansi-check.test.sh +75 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/lang-basics-ast-check.py +170 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/lang-basics-ast-check.test.sh +87 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/lang-basics-go-check.go +198 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/lang-basics-go-check.test.sh +109 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/test_mutation_backup_recipe.sh +237 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/SKILL.md +184 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/comment-safe-feishu.md +93 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/cross-model-co-review.md +3 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/delivery-face-closeout.md +60 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/doc-charter-first.md +17 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/session-vantage-leakage.md +58 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/SKILL.md +126 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/complex-workspace-patterns.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/embedded-h5-in-host.md +87 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/react-architecture.md +194 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/source-evidence-map.md +60 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/web-quality-release.md +190 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/web-ui-quality.md +83 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/SKILL.md +179 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/references/shared-branch-rebase.md +25 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/AGENTS.md +23 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/test_worktree_status.sh +207 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/test_worktree_sweep.sh +481 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/worktree-status.sh +325 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/worktree-sweep.sh +245 -0
- package/dist/assets/release.json +2797 -0
- package/dist/claude-adapter.d.ts +9 -0
- package/dist/claude-adapter.js +240 -0
- package/dist/cli-worker.d.ts +1 -0
- package/dist/cli-worker.js +32 -0
- package/dist/cli.d.ts +22 -0
- package/dist/cli.js +214 -0
- package/dist/codex-host.d.ts +30 -0
- package/dist/codex-host.js +162 -0
- package/dist/fs-safe.d.ts +21 -0
- package/dist/fs-safe.js +241 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/manifest.d.ts +8 -0
- package/dist/manifest.js +135 -0
- package/dist/opencode-adapter.d.ts +10 -0
- package/dist/opencode-adapter.js +416 -0
- package/dist/operations.d.ts +3 -0
- package/dist/operations.js +956 -0
- package/dist/paths.d.ts +20 -0
- package/dist/paths.js +4 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.js +1 -0
- package/dist/unified.d.ts +4 -0
- package/dist/unified.js +64 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +5 -0
- package/package.json +35 -0
|
@@ -0,0 +1,956 @@
|
|
|
1
|
+
import { copyFileSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, rmdirSync, } from "node:fs";
|
|
2
|
+
import { dirname, join, relative, resolve, sep } from "node:path";
|
|
3
|
+
import { acquireLock, assertSafeRoot, atomicJson, canonicalAlias, contained, copyRegularTree, durableRename, durableUnlink, verifyTree, } from "./fs-safe.js";
|
|
4
|
+
import { checkHost, marketplaceAdd, marketplaceRemove, pluginAdd, pluginRemove, publicState, } from "./codex-host.js";
|
|
5
|
+
import { manifestFor, MetadataError, readManifest, readRelease, } from "./manifest.js";
|
|
6
|
+
import { paths, } from "./paths.js";
|
|
7
|
+
import { compare } from "./version.js";
|
|
8
|
+
const pending = (message, details = {}) => ({
|
|
9
|
+
code: 3,
|
|
10
|
+
status: "installed-hooks-pending",
|
|
11
|
+
message,
|
|
12
|
+
trust: "pending-unverified",
|
|
13
|
+
details,
|
|
14
|
+
});
|
|
15
|
+
const activePath = (root, active) => join(root, active);
|
|
16
|
+
const marketPath = (root, active) => join(activePath(root, active), "marketplace");
|
|
17
|
+
function writeJournal(path, value, context = {}) {
|
|
18
|
+
atomicJson(path, { schema: 1, startedAt: new Date().toISOString(), ...value }, context.fs);
|
|
19
|
+
}
|
|
20
|
+
function journal(path, root) {
|
|
21
|
+
try {
|
|
22
|
+
const value = JSON.parse(readFileSync(path, "utf8"));
|
|
23
|
+
if (value.schema !== 1 ||
|
|
24
|
+
typeof value.operation !== "string" ||
|
|
25
|
+
typeof value.step !== "string" ||
|
|
26
|
+
typeof value.startedAt !== "string")
|
|
27
|
+
return null;
|
|
28
|
+
if (value.completed &&
|
|
29
|
+
!value.completed.every((item) => typeof item === "string"))
|
|
30
|
+
return null;
|
|
31
|
+
if (value.deletedFiles &&
|
|
32
|
+
!value.deletedFiles.every((item) => typeof item === "string" &&
|
|
33
|
+
!item.startsWith("/") &&
|
|
34
|
+
!item.split(sep).includes("..")))
|
|
35
|
+
return null;
|
|
36
|
+
if (value.trashPath &&
|
|
37
|
+
(!value.trashPath.startsWith(".trash-") ||
|
|
38
|
+
value.trashPath.includes(sep) ||
|
|
39
|
+
contained(root, value.trashPath) !== join(root, value.trashPath)))
|
|
40
|
+
return null;
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function interrupted(context, name) {
|
|
48
|
+
return (context.checkpoint?.(name) === true ||
|
|
49
|
+
context.isInterrupted?.(name) === true);
|
|
50
|
+
}
|
|
51
|
+
function interruption(result) {
|
|
52
|
+
return { ...result, code: 130, interrupted: true };
|
|
53
|
+
}
|
|
54
|
+
function symlinkBelow(root) {
|
|
55
|
+
if (!existsSync(root))
|
|
56
|
+
return null;
|
|
57
|
+
for (const entry of readdirSync(root, { withFileTypes: true })) {
|
|
58
|
+
const path = join(root, entry.name);
|
|
59
|
+
if (lstatSync(path).isSymbolicLink())
|
|
60
|
+
return path;
|
|
61
|
+
if (entry.isDirectory()) {
|
|
62
|
+
const found = symlinkBelow(path);
|
|
63
|
+
if (found)
|
|
64
|
+
return found;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
function exactState(codexHome, source, plugin) {
|
|
70
|
+
const state = publicState(codexHome);
|
|
71
|
+
return (state.status === "known" &&
|
|
72
|
+
(state.marketplaceSource
|
|
73
|
+
? canonicalAlias(state.marketplaceSource)
|
|
74
|
+
: null) === (source ? canonicalAlias(resolve(source)) : null) &&
|
|
75
|
+
state.plugin === plugin);
|
|
76
|
+
}
|
|
77
|
+
function removeRegistration(codexHome) {
|
|
78
|
+
const state = publicState(codexHome);
|
|
79
|
+
if (state.status === "unknown")
|
|
80
|
+
return false;
|
|
81
|
+
if (state.plugin && pluginRemove(codexHome).status !== 0)
|
|
82
|
+
return false;
|
|
83
|
+
const afterPlugin = publicState(codexHome);
|
|
84
|
+
if (afterPlugin.status === "unknown")
|
|
85
|
+
return false;
|
|
86
|
+
if (afterPlugin.marketplace && marketplaceRemove(codexHome).status !== 0)
|
|
87
|
+
return false;
|
|
88
|
+
return exactState(codexHome, null, false);
|
|
89
|
+
}
|
|
90
|
+
function restoreOld(codexHome, source) {
|
|
91
|
+
if (!removeRegistration(codexHome))
|
|
92
|
+
return false;
|
|
93
|
+
if (marketplaceAdd(source, codexHome).status !== 0)
|
|
94
|
+
return false;
|
|
95
|
+
if (pluginAdd(codexHome).status !== 0)
|
|
96
|
+
return false;
|
|
97
|
+
return exactState(codexHome, source, true);
|
|
98
|
+
}
|
|
99
|
+
function removeEmptyTree(root, files) {
|
|
100
|
+
const dirs = new Set(files.map((f) => dirname(join(root, f.path))));
|
|
101
|
+
for (const dir of [...dirs].sort((a, b) => b.length - a.length)) {
|
|
102
|
+
try {
|
|
103
|
+
rmdirSync(dir);
|
|
104
|
+
}
|
|
105
|
+
catch { }
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
rmdirSync(root);
|
|
109
|
+
}
|
|
110
|
+
catch { }
|
|
111
|
+
}
|
|
112
|
+
function remainingErrors(root, snapshot, deleted) {
|
|
113
|
+
const deletedSet = new Set(deleted), remaining = snapshot.ownedFiles.filter((file) => !deletedSet.has(file.path)), errors = verifyTree(root, remaining);
|
|
114
|
+
for (const file of deleted)
|
|
115
|
+
if (existsSync(contained(root, file)))
|
|
116
|
+
errors.push(`${file}: recorded deleted but exists`);
|
|
117
|
+
return errors;
|
|
118
|
+
}
|
|
119
|
+
function deleteTrash(path, snapshot, operation, committed, deleted, context) {
|
|
120
|
+
const p = paths(context), errors = [];
|
|
121
|
+
for (const file of [...snapshot.ownedFiles].sort((a, b) => b.path.length - a.path.length)) {
|
|
122
|
+
if (deleted.includes(file.path))
|
|
123
|
+
continue;
|
|
124
|
+
const target = contained(path, file.path);
|
|
125
|
+
try {
|
|
126
|
+
durableUnlink(target, context.fs, "trash-unlink");
|
|
127
|
+
deleted.push(file.path);
|
|
128
|
+
writeJournal(p.journal, {
|
|
129
|
+
operation,
|
|
130
|
+
step: "trash-deleting",
|
|
131
|
+
trashPath: relative(p.root, path),
|
|
132
|
+
snapshot,
|
|
133
|
+
completed: ["trash-renamed"],
|
|
134
|
+
deletedFiles: [...deleted],
|
|
135
|
+
committed,
|
|
136
|
+
}, context);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
errors.push(`${file.path}: ${String(error)}`);
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (!errors.length)
|
|
144
|
+
removeEmptyTree(path, snapshot.ownedFiles);
|
|
145
|
+
return errors;
|
|
146
|
+
}
|
|
147
|
+
function quarantine(path, snapshot, operation, context) {
|
|
148
|
+
if (!existsSync(path))
|
|
149
|
+
return { errors: [] };
|
|
150
|
+
const errors = verifyTree(path, snapshot.ownedFiles);
|
|
151
|
+
if (errors.length)
|
|
152
|
+
return { errors };
|
|
153
|
+
const p = paths(context), trashRel = `.trash-${operation}-${snapshot.snapshotHash}`, trash = contained(p.root, trashRel), committed = operation === "prune";
|
|
154
|
+
if (existsSync(trash))
|
|
155
|
+
return { errors: ["trash path already exists"] };
|
|
156
|
+
try {
|
|
157
|
+
durableRename(path, trash, context.fs, "quarantine-rename");
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
const renamed = !existsSync(path) && existsSync(trash);
|
|
161
|
+
writeJournal(p.journal, {
|
|
162
|
+
operation,
|
|
163
|
+
step: renamed ? "trash-renamed" : "quarantine-rename-failed",
|
|
164
|
+
trashPath: renamed ? trashRel : undefined,
|
|
165
|
+
snapshot,
|
|
166
|
+
completed: renamed ? ["trash-renamed"] : [],
|
|
167
|
+
deletedFiles: [],
|
|
168
|
+
error: String(error),
|
|
169
|
+
committed,
|
|
170
|
+
}, context);
|
|
171
|
+
return { errors: [String(error)], trash: renamed ? trash : undefined };
|
|
172
|
+
}
|
|
173
|
+
writeJournal(p.journal, {
|
|
174
|
+
operation,
|
|
175
|
+
step: "trash-renamed",
|
|
176
|
+
trashPath: trashRel,
|
|
177
|
+
snapshot,
|
|
178
|
+
completed: ["trash-renamed"],
|
|
179
|
+
deletedFiles: [],
|
|
180
|
+
committed,
|
|
181
|
+
}, context);
|
|
182
|
+
return {
|
|
183
|
+
errors: deleteTrash(trash, snapshot, operation, committed, [], context),
|
|
184
|
+
trash,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function cleanupCandidate(path, files, context) {
|
|
188
|
+
if (!existsSync(path))
|
|
189
|
+
return [];
|
|
190
|
+
const errors = verifyTree(path, files);
|
|
191
|
+
if (errors.length)
|
|
192
|
+
return errors;
|
|
193
|
+
for (const file of [...files].sort((a, b) => b.path.length - a.path.length))
|
|
194
|
+
try {
|
|
195
|
+
durableUnlink(contained(path, file.path), context.fs);
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
return [`${file.path}: ${String(error)}`];
|
|
199
|
+
}
|
|
200
|
+
removeEmptyTree(path, files);
|
|
201
|
+
return [];
|
|
202
|
+
}
|
|
203
|
+
function resumeJournal(context) {
|
|
204
|
+
const p = paths(context), j = journal(p.journal, p.root);
|
|
205
|
+
if (!j)
|
|
206
|
+
return {
|
|
207
|
+
code: 5,
|
|
208
|
+
status: "partial-journal",
|
|
209
|
+
message: "operation journal is malformed",
|
|
210
|
+
};
|
|
211
|
+
if (j.step === "committed" || j.step === "journal-unlink-failed") {
|
|
212
|
+
if (j.operation !== "install" && j.operation !== "update")
|
|
213
|
+
return {
|
|
214
|
+
code: 5,
|
|
215
|
+
status: "partial-journal",
|
|
216
|
+
message: "committed journal operation is invalid",
|
|
217
|
+
};
|
|
218
|
+
const manifest = readManifest(p.manifest);
|
|
219
|
+
if (!manifest ||
|
|
220
|
+
!exactState(p.codexHome, marketPath(p.root, manifest.active.path), true))
|
|
221
|
+
return {
|
|
222
|
+
code: 5,
|
|
223
|
+
status: "partial-journal",
|
|
224
|
+
message: "committed journal does not match public and manifest state",
|
|
225
|
+
};
|
|
226
|
+
try {
|
|
227
|
+
durableUnlink(p.journal, context.fs, "journal-unlink");
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
return {
|
|
232
|
+
code: 5,
|
|
233
|
+
status: "committed-stale-journal",
|
|
234
|
+
message: "committed state is intact; stale journal cleanup failed",
|
|
235
|
+
details: { error: String(error) },
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (j.operation === "uninstall" &&
|
|
240
|
+
j.step === "quarantine-rename-failed" &&
|
|
241
|
+
j.snapshot) {
|
|
242
|
+
if (!exactState(p.codexHome, null, false))
|
|
243
|
+
return {
|
|
244
|
+
code: 5,
|
|
245
|
+
status: "partial",
|
|
246
|
+
message: "uninstall resume requires absent public state",
|
|
247
|
+
};
|
|
248
|
+
const q = quarantine(activePath(p.root, j.snapshot.path), j.snapshot, "uninstall", context);
|
|
249
|
+
if (q.errors.length)
|
|
250
|
+
return {
|
|
251
|
+
code: 5,
|
|
252
|
+
status: "partial",
|
|
253
|
+
message: "registration removed; local cleanup requires resume",
|
|
254
|
+
details: { errors: q.errors, trashPath: q.trash },
|
|
255
|
+
};
|
|
256
|
+
try {
|
|
257
|
+
if (existsSync(p.manifest))
|
|
258
|
+
durableUnlink(p.manifest, context.fs, "manifest-unlink");
|
|
259
|
+
durableUnlink(p.journal, context.fs, "journal-unlink");
|
|
260
|
+
rmSync(p.root, { recursive: true });
|
|
261
|
+
return {
|
|
262
|
+
code: 0,
|
|
263
|
+
status: "uninstalled",
|
|
264
|
+
message: "resumed verified uninstall cleanup",
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
return {
|
|
269
|
+
code: 5,
|
|
270
|
+
status: "partial",
|
|
271
|
+
message: "uninstall cleanup completed but metadata remains",
|
|
272
|
+
details: { error: String(error) },
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
if (j.trashPath && j.snapshot) {
|
|
277
|
+
const trash = contained(p.root, j.trashPath), deleted = j.deletedFiles || [], errors = remainingErrors(trash, j.snapshot, deleted);
|
|
278
|
+
if (errors.length)
|
|
279
|
+
return {
|
|
280
|
+
code: 5,
|
|
281
|
+
status: "unknown-trash",
|
|
282
|
+
message: "trash metadata verification failed",
|
|
283
|
+
details: { errors },
|
|
284
|
+
};
|
|
285
|
+
const deletion = deleteTrash(trash, j.snapshot, j.operation, !!j.committed, [...deleted], context);
|
|
286
|
+
if (deletion.length)
|
|
287
|
+
return {
|
|
288
|
+
code: 5,
|
|
289
|
+
status: j.committed ? "committed-stale-cleanup" : "partial",
|
|
290
|
+
message: "trash cleanup remains incomplete",
|
|
291
|
+
details: { errors: deletion },
|
|
292
|
+
};
|
|
293
|
+
if (j.operation === "uninstall") {
|
|
294
|
+
try {
|
|
295
|
+
if (existsSync(p.manifest))
|
|
296
|
+
durableUnlink(p.manifest, context.fs, "manifest-unlink");
|
|
297
|
+
durableUnlink(p.journal, context.fs, "journal-unlink");
|
|
298
|
+
rmSync(p.root, { recursive: true });
|
|
299
|
+
return {
|
|
300
|
+
code: 0,
|
|
301
|
+
status: "uninstalled",
|
|
302
|
+
message: "resumed verified uninstall cleanup",
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
return {
|
|
307
|
+
code: 5,
|
|
308
|
+
status: "partial",
|
|
309
|
+
message: "uninstall cleanup completed but metadata remains",
|
|
310
|
+
details: { error: String(error) },
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
try {
|
|
315
|
+
durableUnlink(p.journal, context.fs, "journal-unlink");
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
return {
|
|
319
|
+
code: 5,
|
|
320
|
+
status: j.committed ? "committed-stale-journal" : "partial",
|
|
321
|
+
message: "cleanup completed but journal remains",
|
|
322
|
+
details: { error: String(error) },
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
return {
|
|
328
|
+
code: 5,
|
|
329
|
+
status: "partial-journal",
|
|
330
|
+
message: "an incomplete operation journal requires repair",
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
function rollbackResult(operation, old, candidate, candidateFiles, error, context) {
|
|
334
|
+
const p = paths(context);
|
|
335
|
+
const oldSource = old ? marketPath(p.root, old.active.path) : null;
|
|
336
|
+
const restored = old && oldSource
|
|
337
|
+
? restoreOld(p.codexHome, oldSource)
|
|
338
|
+
: removeRegistration(p.codexHome);
|
|
339
|
+
if (!restored) {
|
|
340
|
+
writeJournal(p.journal, {
|
|
341
|
+
operation,
|
|
342
|
+
step: "rollback-partial",
|
|
343
|
+
oldSource,
|
|
344
|
+
candidateSource: join(candidate, "marketplace"),
|
|
345
|
+
error,
|
|
346
|
+
});
|
|
347
|
+
return {
|
|
348
|
+
code: 5,
|
|
349
|
+
status: "partial",
|
|
350
|
+
message: `${operation} failed and rollback finality is unknown`,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
const cleanup = cleanupCandidate(candidate, candidateFiles, context);
|
|
354
|
+
if (cleanup.length === 0) {
|
|
355
|
+
rmSync(p.journal, { force: true });
|
|
356
|
+
return {
|
|
357
|
+
code: 1,
|
|
358
|
+
status: "rolled-back",
|
|
359
|
+
message: `${operation} failed; prior public state was restored`,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
writeJournal(p.journal, {
|
|
363
|
+
operation,
|
|
364
|
+
step: "rollback-partial",
|
|
365
|
+
oldSource,
|
|
366
|
+
candidateSource: join(candidate, "marketplace"),
|
|
367
|
+
error: `${error}${cleanup.length ? `; cleanup: ${cleanup.join(", ")}` : ""}`,
|
|
368
|
+
});
|
|
369
|
+
return {
|
|
370
|
+
code: 5,
|
|
371
|
+
status: "partial",
|
|
372
|
+
message: `${operation} failed and rollback finality is unknown`,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
function conflict(command, context) {
|
|
376
|
+
const p = paths(context), manifest = readManifest(p.manifest), state = publicState(p.codexHome);
|
|
377
|
+
if (state.status === "unknown")
|
|
378
|
+
return {
|
|
379
|
+
code: 3,
|
|
380
|
+
status: "host-state-unknown",
|
|
381
|
+
message: "Codex public state could not be verified",
|
|
382
|
+
};
|
|
383
|
+
if (state.legacy)
|
|
384
|
+
return {
|
|
385
|
+
code: 3,
|
|
386
|
+
status: "legacy-plugin-conflict",
|
|
387
|
+
message: "Git-backed ccl-skills plugin is installed",
|
|
388
|
+
};
|
|
389
|
+
const legacy = symlinkBelow(join(p.codexHome, "skills"));
|
|
390
|
+
if (legacy && /ccl-skills/.test(legacy))
|
|
391
|
+
return {
|
|
392
|
+
code: 3,
|
|
393
|
+
status: "legacy-skill-symlink",
|
|
394
|
+
message: `legacy ccl-skills symlink exists: ${legacy}`,
|
|
395
|
+
};
|
|
396
|
+
const managed = symlinkBelow(p.root);
|
|
397
|
+
if (managed)
|
|
398
|
+
return {
|
|
399
|
+
code: 3,
|
|
400
|
+
status: "symlink-conflict",
|
|
401
|
+
message: `managed path contains symlink: ${managed}`,
|
|
402
|
+
};
|
|
403
|
+
if (!manifest && (state.marketplace || state.plugin))
|
|
404
|
+
return {
|
|
405
|
+
code: 3,
|
|
406
|
+
status: "unowned-registration",
|
|
407
|
+
message: "ccl-skills-npm is registered without an owned manifest",
|
|
408
|
+
};
|
|
409
|
+
if (command !== "doctor" && existsSync(p.journal))
|
|
410
|
+
return {
|
|
411
|
+
code: 5,
|
|
412
|
+
status: "partial-journal",
|
|
413
|
+
message: "an incomplete operation journal requires repair",
|
|
414
|
+
};
|
|
415
|
+
return null;
|
|
416
|
+
}
|
|
417
|
+
function doctor(context) {
|
|
418
|
+
const p = paths(context);
|
|
419
|
+
try {
|
|
420
|
+
assertSafeRoot(p.codexHome, p.root);
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
return { code: 3, status: "safety-refusal", message: String(error) };
|
|
424
|
+
}
|
|
425
|
+
const host = checkHost(p.codexHome);
|
|
426
|
+
if (!host.ok)
|
|
427
|
+
return { code: 4, status: `host-${host.kind}`, message: host.message };
|
|
428
|
+
if (existsSync(p.journal)) {
|
|
429
|
+
const repair = resumeJournal(context);
|
|
430
|
+
if (repair)
|
|
431
|
+
return repair;
|
|
432
|
+
}
|
|
433
|
+
const unknownTrash = existsSync(p.root)
|
|
434
|
+
? readdirSync(p.root).filter((name) => name.startsWith(".trash-"))
|
|
435
|
+
: [];
|
|
436
|
+
if (unknownTrash.length)
|
|
437
|
+
return {
|
|
438
|
+
code: 5,
|
|
439
|
+
status: "unknown-trash",
|
|
440
|
+
message: "unreferenced trash requires manual ownership verification",
|
|
441
|
+
details: { trash: unknownTrash },
|
|
442
|
+
};
|
|
443
|
+
const problem = conflict("doctor", context);
|
|
444
|
+
if (problem)
|
|
445
|
+
return problem;
|
|
446
|
+
const manifest = readManifest(p.manifest);
|
|
447
|
+
if (!manifest)
|
|
448
|
+
return {
|
|
449
|
+
code: 3,
|
|
450
|
+
status: "absent",
|
|
451
|
+
message: "ccl-skills is not installed",
|
|
452
|
+
trust: "pending-unverified",
|
|
453
|
+
};
|
|
454
|
+
const drift = verifyTree(activePath(p.root, manifest.active.path), manifest.active.ownedFiles);
|
|
455
|
+
if (drift.length)
|
|
456
|
+
return {
|
|
457
|
+
code: 3,
|
|
458
|
+
status: "owned-drift",
|
|
459
|
+
message: "owned files are missing or modified",
|
|
460
|
+
details: { drift },
|
|
461
|
+
};
|
|
462
|
+
if (!exactState(p.codexHome, marketPath(p.root, manifest.active.path), true))
|
|
463
|
+
return {
|
|
464
|
+
code: 3,
|
|
465
|
+
status: "public-state-mismatch",
|
|
466
|
+
message: "owned files exist but Codex registration does not match the manifest",
|
|
467
|
+
};
|
|
468
|
+
return pending("plugin is installed; hooks trust is pending/unverified", {
|
|
469
|
+
version: manifest.active.version,
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
function installOrUpdate(command, options, context) {
|
|
473
|
+
const p = paths(context);
|
|
474
|
+
try {
|
|
475
|
+
assertSafeRoot(p.codexHome, p.root, true);
|
|
476
|
+
}
|
|
477
|
+
catch (error) {
|
|
478
|
+
return { code: 3, status: "safety-refusal", message: String(error) };
|
|
479
|
+
}
|
|
480
|
+
const host = checkHost(p.codexHome);
|
|
481
|
+
if (!host.ok)
|
|
482
|
+
return { code: 4, status: `host-${host.kind}`, message: host.message };
|
|
483
|
+
if (existsSync(p.journal)) {
|
|
484
|
+
const repair = resumeJournal(context);
|
|
485
|
+
if (repair)
|
|
486
|
+
return repair;
|
|
487
|
+
}
|
|
488
|
+
const problem = conflict(command, context);
|
|
489
|
+
if (problem)
|
|
490
|
+
return problem;
|
|
491
|
+
const old = readManifest(p.manifest), release = readRelease(p.release);
|
|
492
|
+
if (command === "update" && !old)
|
|
493
|
+
return {
|
|
494
|
+
code: 3,
|
|
495
|
+
status: "not-installed",
|
|
496
|
+
message: "update requires an existing owned installation",
|
|
497
|
+
};
|
|
498
|
+
if (old) {
|
|
499
|
+
const drift = verifyTree(activePath(p.root, old.active.path), old.active.ownedFiles);
|
|
500
|
+
if (drift.length)
|
|
501
|
+
return {
|
|
502
|
+
code: 3,
|
|
503
|
+
status: "owned-drift",
|
|
504
|
+
message: "owned files drifted",
|
|
505
|
+
details: { drift },
|
|
506
|
+
};
|
|
507
|
+
if (!exactState(p.codexHome, marketPath(p.root, old.active.path), true))
|
|
508
|
+
return {
|
|
509
|
+
code: 3,
|
|
510
|
+
status: "public-state-mismatch",
|
|
511
|
+
message: "public state does not match the owned manifest",
|
|
512
|
+
};
|
|
513
|
+
const comparison = compare(release.version, old.active.version);
|
|
514
|
+
if (comparison === 0)
|
|
515
|
+
return command === "install"
|
|
516
|
+
? {
|
|
517
|
+
...doctor(context),
|
|
518
|
+
message: "same version is already installed; hooks trust remains pending/unverified",
|
|
519
|
+
}
|
|
520
|
+
: doctor(context);
|
|
521
|
+
if (command === "install")
|
|
522
|
+
return {
|
|
523
|
+
code: 3,
|
|
524
|
+
status: "use-update",
|
|
525
|
+
message: "an owned version exists; use update",
|
|
526
|
+
};
|
|
527
|
+
if (comparison < 0 && !options.allowDowngrade)
|
|
528
|
+
return {
|
|
529
|
+
code: 3,
|
|
530
|
+
status: "downgrade-refused",
|
|
531
|
+
message: "newer version is installed; pass --allow-downgrade --yes",
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
if (command === "update" && !options.yes)
|
|
535
|
+
return {
|
|
536
|
+
code: 0,
|
|
537
|
+
status: "dry-run",
|
|
538
|
+
message: "update preview",
|
|
539
|
+
plan: [
|
|
540
|
+
"prepare immutable snapshot",
|
|
541
|
+
"replace Codex registration",
|
|
542
|
+
"verify exact candidate source",
|
|
543
|
+
"commit active/previous manifest pointers",
|
|
544
|
+
],
|
|
545
|
+
};
|
|
546
|
+
if (options.allowDowngrade && !options.yes)
|
|
547
|
+
return {
|
|
548
|
+
code: 2,
|
|
549
|
+
status: "usage",
|
|
550
|
+
message: "--allow-downgrade requires --yes",
|
|
551
|
+
};
|
|
552
|
+
const snapshotRel = join("snapshots", release.snapshotHash), snapshot = contained(p.root, snapshotRel);
|
|
553
|
+
let unlock;
|
|
554
|
+
try {
|
|
555
|
+
unlock = acquireLock(p.lock);
|
|
556
|
+
}
|
|
557
|
+
catch {
|
|
558
|
+
return {
|
|
559
|
+
code: 3,
|
|
560
|
+
status: "lock-contended",
|
|
561
|
+
message: "another operation holds the lock",
|
|
562
|
+
};
|
|
563
|
+
}
|
|
564
|
+
let candidateCreated = false;
|
|
565
|
+
try {
|
|
566
|
+
if (interrupted(context, "before-first-mutation"))
|
|
567
|
+
return interruption({
|
|
568
|
+
code: 1,
|
|
569
|
+
status: "rolled-back",
|
|
570
|
+
message: "interrupted before mutation",
|
|
571
|
+
});
|
|
572
|
+
mkdirSync(p.root, { recursive: true });
|
|
573
|
+
if (existsSync(snapshot)) {
|
|
574
|
+
const drift = verifyTree(snapshot, release.files);
|
|
575
|
+
if (drift.length)
|
|
576
|
+
return {
|
|
577
|
+
code: 3,
|
|
578
|
+
status: "snapshot-drift",
|
|
579
|
+
message: "existing snapshot failed verification",
|
|
580
|
+
details: { drift },
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
else {
|
|
584
|
+
const staging = contained(p.root, join("snapshots", `.staging-${release.snapshotHash}-${process.pid}`));
|
|
585
|
+
rmSync(staging, { recursive: true, force: true });
|
|
586
|
+
copyRegularTree(join(p.assets, "marketplace"), join(staging, "marketplace"));
|
|
587
|
+
const drift = verifyTree(staging, release.files);
|
|
588
|
+
if (drift.length) {
|
|
589
|
+
rmSync(staging, { recursive: true, force: true });
|
|
590
|
+
return {
|
|
591
|
+
code: 3,
|
|
592
|
+
status: "safety-refusal",
|
|
593
|
+
message: "staged snapshot failed verification",
|
|
594
|
+
details: { drift },
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
renameSync(staging, snapshot);
|
|
598
|
+
candidateCreated = true;
|
|
599
|
+
}
|
|
600
|
+
const candidateMarket = join(snapshot, "marketplace"), hidden = join(candidateMarket, ".agents/plugins/marketplace.json"), carrier = join(candidateMarket, "marketplace-manifest.json");
|
|
601
|
+
if (!existsSync(hidden)) {
|
|
602
|
+
if (!existsSync(carrier))
|
|
603
|
+
throw new Error("packed marketplace manifest carrier is missing");
|
|
604
|
+
mkdirSync(join(candidateMarket, ".agents/plugins"), { recursive: true });
|
|
605
|
+
copyFileSync(carrier, hidden);
|
|
606
|
+
}
|
|
607
|
+
const oldSource = old ? marketPath(p.root, old.active.path) : null;
|
|
608
|
+
writeJournal(p.journal, {
|
|
609
|
+
operation: command,
|
|
610
|
+
step: "candidate-prepared",
|
|
611
|
+
oldSource,
|
|
612
|
+
candidateSource: candidateMarket,
|
|
613
|
+
completed: ["candidate-prepared"],
|
|
614
|
+
});
|
|
615
|
+
if (old && pluginRemove(p.codexHome).status !== 0)
|
|
616
|
+
return rollbackResult(command, old, snapshot, release.files, "old plugin remove failed", context);
|
|
617
|
+
if (old)
|
|
618
|
+
writeJournal(p.journal, {
|
|
619
|
+
operation: command,
|
|
620
|
+
step: "old-plugin-removed",
|
|
621
|
+
oldSource,
|
|
622
|
+
candidateSource: candidateMarket,
|
|
623
|
+
completed: ["candidate-prepared", "old-plugin-removed"],
|
|
624
|
+
});
|
|
625
|
+
if (old && interrupted(context, "after-old-plugin-remove"))
|
|
626
|
+
return interruption(rollbackResult(command, old, snapshot, release.files, "interrupted after old plugin remove", context));
|
|
627
|
+
if (old && marketplaceRemove(p.codexHome).status !== 0)
|
|
628
|
+
return rollbackResult(command, old, snapshot, release.files, "old marketplace remove failed", context);
|
|
629
|
+
if (old)
|
|
630
|
+
writeJournal(p.journal, {
|
|
631
|
+
operation: command,
|
|
632
|
+
step: "old-marketplace-removed",
|
|
633
|
+
oldSource,
|
|
634
|
+
candidateSource: candidateMarket,
|
|
635
|
+
completed: [
|
|
636
|
+
"candidate-prepared",
|
|
637
|
+
"old-plugin-removed",
|
|
638
|
+
"old-marketplace-removed",
|
|
639
|
+
],
|
|
640
|
+
});
|
|
641
|
+
if (old && interrupted(context, "after-old-marketplace-remove"))
|
|
642
|
+
return interruption(rollbackResult(command, old, snapshot, release.files, "interrupted after old marketplace remove", context));
|
|
643
|
+
if (marketplaceAdd(candidateMarket, p.codexHome).status !== 0)
|
|
644
|
+
return rollbackResult(command, old, snapshot, release.files, "candidate marketplace add failed", context);
|
|
645
|
+
writeJournal(p.journal, {
|
|
646
|
+
operation: command,
|
|
647
|
+
step: "candidate-marketplace-added",
|
|
648
|
+
oldSource,
|
|
649
|
+
candidateSource: candidateMarket,
|
|
650
|
+
completed: [
|
|
651
|
+
"candidate-prepared",
|
|
652
|
+
"old-plugin-removed",
|
|
653
|
+
"old-marketplace-removed",
|
|
654
|
+
"candidate-marketplace-added",
|
|
655
|
+
],
|
|
656
|
+
});
|
|
657
|
+
if (interrupted(context, "after-candidate-marketplace-add"))
|
|
658
|
+
return interruption(rollbackResult(command, old, snapshot, release.files, "interrupted after candidate marketplace add", context));
|
|
659
|
+
if (pluginAdd(p.codexHome).status !== 0)
|
|
660
|
+
return rollbackResult(command, old, snapshot, release.files, "candidate plugin add failed", context);
|
|
661
|
+
writeJournal(p.journal, {
|
|
662
|
+
operation: command,
|
|
663
|
+
step: "candidate-plugin-added",
|
|
664
|
+
oldSource,
|
|
665
|
+
candidateSource: candidateMarket,
|
|
666
|
+
completed: [
|
|
667
|
+
"candidate-prepared",
|
|
668
|
+
"old-plugin-removed",
|
|
669
|
+
"old-marketplace-removed",
|
|
670
|
+
"candidate-marketplace-added",
|
|
671
|
+
"candidate-plugin-added",
|
|
672
|
+
],
|
|
673
|
+
});
|
|
674
|
+
if (interrupted(context, "after-candidate-plugin-add"))
|
|
675
|
+
return interruption(rollbackResult(command, old, snapshot, release.files, "interrupted after candidate plugin add", context));
|
|
676
|
+
if (!exactState(p.codexHome, candidateMarket, true))
|
|
677
|
+
return rollbackResult(command, old, snapshot, release.files, "candidate public verification failed", context);
|
|
678
|
+
writeJournal(p.journal, {
|
|
679
|
+
operation: command,
|
|
680
|
+
step: "candidate-verified",
|
|
681
|
+
oldSource,
|
|
682
|
+
candidateSource: candidateMarket,
|
|
683
|
+
completed: [
|
|
684
|
+
"candidate-prepared",
|
|
685
|
+
"old-removed",
|
|
686
|
+
"candidate-added",
|
|
687
|
+
"candidate-verified",
|
|
688
|
+
],
|
|
689
|
+
});
|
|
690
|
+
if (interrupted(context, "after-public-verify-before-manifest"))
|
|
691
|
+
return interruption(rollbackResult(command, old, snapshot, release.files, "interrupted before manifest commit", context));
|
|
692
|
+
try {
|
|
693
|
+
atomicJson(p.manifest, manifestFor(release, snapshotRel, old?.active || null), context.fs);
|
|
694
|
+
}
|
|
695
|
+
catch (error) {
|
|
696
|
+
return {
|
|
697
|
+
code: 5,
|
|
698
|
+
status: "partial",
|
|
699
|
+
message: "manifest durability is unknown; journal retained",
|
|
700
|
+
details: { error: String(error) },
|
|
701
|
+
};
|
|
702
|
+
}
|
|
703
|
+
writeJournal(p.journal, {
|
|
704
|
+
operation: command,
|
|
705
|
+
step: "committed",
|
|
706
|
+
oldSource,
|
|
707
|
+
candidateSource: candidateMarket,
|
|
708
|
+
completed: ["manifest-committed"],
|
|
709
|
+
committed: true,
|
|
710
|
+
}, context);
|
|
711
|
+
const interruptedAfterCommit = interrupted(context, "after-manifest-commit");
|
|
712
|
+
const retainedDrift = [];
|
|
713
|
+
if (old?.previous) {
|
|
714
|
+
const obsolete = activePath(p.root, old.previous.path);
|
|
715
|
+
const errors = verifyTree(obsolete, old.previous.ownedFiles);
|
|
716
|
+
if (errors.length) {
|
|
717
|
+
retainedDrift.push(...errors);
|
|
718
|
+
atomicJson(join(p.root, "ownership-evidence.json"), { schema: 1, snapshot: old.previous, drift: errors }, context.fs);
|
|
719
|
+
}
|
|
720
|
+
else {
|
|
721
|
+
const q = quarantine(obsolete, old.previous, "prune", context);
|
|
722
|
+
if (q.errors.length)
|
|
723
|
+
return {
|
|
724
|
+
code: 5,
|
|
725
|
+
status: "committed-stale-cleanup",
|
|
726
|
+
message: "new version committed; obsolete snapshot cleanup requires resume",
|
|
727
|
+
details: { errors: q.errors, trashPath: q.trash },
|
|
728
|
+
};
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
try {
|
|
732
|
+
durableUnlink(p.journal, context.fs, "journal-unlink");
|
|
733
|
+
}
|
|
734
|
+
catch (error) {
|
|
735
|
+
writeJournal(p.journal, {
|
|
736
|
+
operation: command,
|
|
737
|
+
step: "journal-unlink-failed",
|
|
738
|
+
committed: true,
|
|
739
|
+
error: String(error),
|
|
740
|
+
}, context);
|
|
741
|
+
return {
|
|
742
|
+
code: 5,
|
|
743
|
+
status: "committed-stale-journal",
|
|
744
|
+
message: "new version committed; stale journal requires cleanup",
|
|
745
|
+
};
|
|
746
|
+
}
|
|
747
|
+
const result = pending("plugin installed and publicly verified; hooks trust is pending/unverified", { version: release.version, retainedDrift });
|
|
748
|
+
return interruptedAfterCommit
|
|
749
|
+
? interruption({
|
|
750
|
+
...result,
|
|
751
|
+
status: "committed",
|
|
752
|
+
message: "interrupted after manifest commit; new state remains active",
|
|
753
|
+
})
|
|
754
|
+
: result;
|
|
755
|
+
}
|
|
756
|
+
catch (error) {
|
|
757
|
+
if (!candidateCreated)
|
|
758
|
+
writeJournal(p.journal, {
|
|
759
|
+
operation: command,
|
|
760
|
+
step: "exception",
|
|
761
|
+
error: String(error),
|
|
762
|
+
});
|
|
763
|
+
return rollbackResult(command, old, snapshot, release.files, String(error), context);
|
|
764
|
+
}
|
|
765
|
+
finally {
|
|
766
|
+
unlock();
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
function uninstall(options, context) {
|
|
770
|
+
const p = paths(context);
|
|
771
|
+
if (!options.yes)
|
|
772
|
+
return {
|
|
773
|
+
code: 0,
|
|
774
|
+
status: "dry-run",
|
|
775
|
+
message: "uninstall preview",
|
|
776
|
+
plan: [
|
|
777
|
+
"verify ownership and exact public state",
|
|
778
|
+
"remove plugin and marketplace",
|
|
779
|
+
"verify absent",
|
|
780
|
+
"delete only verified owned files",
|
|
781
|
+
],
|
|
782
|
+
};
|
|
783
|
+
try {
|
|
784
|
+
assertSafeRoot(p.codexHome, p.root);
|
|
785
|
+
}
|
|
786
|
+
catch (error) {
|
|
787
|
+
return { code: 3, status: "safety-refusal", message: String(error) };
|
|
788
|
+
}
|
|
789
|
+
if (existsSync(p.journal)) {
|
|
790
|
+
const repair = resumeJournal(context);
|
|
791
|
+
if (repair)
|
|
792
|
+
return repair;
|
|
793
|
+
}
|
|
794
|
+
const problem = conflict("uninstall", context);
|
|
795
|
+
if (problem)
|
|
796
|
+
return problem;
|
|
797
|
+
const manifest = readManifest(p.manifest);
|
|
798
|
+
if (!manifest)
|
|
799
|
+
return { code: 0, status: "absent", message: "nothing to uninstall" };
|
|
800
|
+
const active = activePath(p.root, manifest.active.path), source = marketPath(p.root, manifest.active.path), drift = verifyTree(active, manifest.active.ownedFiles);
|
|
801
|
+
if (drift.length)
|
|
802
|
+
return {
|
|
803
|
+
code: 3,
|
|
804
|
+
status: "modified-owned-files",
|
|
805
|
+
message: "modified owned files were retained with ownership evidence",
|
|
806
|
+
details: { drift },
|
|
807
|
+
};
|
|
808
|
+
if (!exactState(p.codexHome, source, true))
|
|
809
|
+
return {
|
|
810
|
+
code: 3,
|
|
811
|
+
status: "public-state-mismatch",
|
|
812
|
+
message: "public state does not match the owned manifest",
|
|
813
|
+
};
|
|
814
|
+
let unlock;
|
|
815
|
+
try {
|
|
816
|
+
unlock = acquireLock(p.lock);
|
|
817
|
+
}
|
|
818
|
+
catch {
|
|
819
|
+
return {
|
|
820
|
+
code: 3,
|
|
821
|
+
status: "lock-contended",
|
|
822
|
+
message: "another operation holds the lock",
|
|
823
|
+
};
|
|
824
|
+
}
|
|
825
|
+
try {
|
|
826
|
+
writeJournal(p.journal, {
|
|
827
|
+
operation: "uninstall",
|
|
828
|
+
step: "started",
|
|
829
|
+
oldSource: source,
|
|
830
|
+
completed: [],
|
|
831
|
+
}, context);
|
|
832
|
+
const rollback = (wasInterrupted) => {
|
|
833
|
+
const restored = restoreOld(p.codexHome, source);
|
|
834
|
+
let result;
|
|
835
|
+
if (restored) {
|
|
836
|
+
rmSync(p.journal, { force: true });
|
|
837
|
+
result = {
|
|
838
|
+
code: 1,
|
|
839
|
+
status: "rolled-back",
|
|
840
|
+
message: `uninstall ${wasInterrupted ? "interrupted" : "failed"}; prior public state was restored`,
|
|
841
|
+
};
|
|
842
|
+
}
|
|
843
|
+
else {
|
|
844
|
+
writeJournal(p.journal, {
|
|
845
|
+
operation: "uninstall",
|
|
846
|
+
step: "restore-partial",
|
|
847
|
+
oldSource: source,
|
|
848
|
+
error: "public removal or restore failed",
|
|
849
|
+
}, context);
|
|
850
|
+
result = {
|
|
851
|
+
code: 5,
|
|
852
|
+
status: "partial",
|
|
853
|
+
message: `uninstall ${wasInterrupted ? "interrupted" : "failed"} and restore finality is unknown`,
|
|
854
|
+
};
|
|
855
|
+
}
|
|
856
|
+
return wasInterrupted ? interruption(result) : result;
|
|
857
|
+
};
|
|
858
|
+
if (pluginRemove(p.codexHome).status !== 0)
|
|
859
|
+
return rollback(false);
|
|
860
|
+
writeJournal(p.journal, {
|
|
861
|
+
operation: "uninstall",
|
|
862
|
+
step: "old-plugin-removed",
|
|
863
|
+
oldSource: source,
|
|
864
|
+
completed: ["old-plugin-removed"],
|
|
865
|
+
}, context);
|
|
866
|
+
if (interrupted(context, "after-uninstall-plugin-remove"))
|
|
867
|
+
return rollback(true);
|
|
868
|
+
if (marketplaceRemove(p.codexHome).status !== 0)
|
|
869
|
+
return rollback(false);
|
|
870
|
+
writeJournal(p.journal, {
|
|
871
|
+
operation: "uninstall",
|
|
872
|
+
step: "old-marketplace-removed",
|
|
873
|
+
oldSource: source,
|
|
874
|
+
completed: ["old-plugin-removed", "old-marketplace-removed"],
|
|
875
|
+
}, context);
|
|
876
|
+
if (interrupted(context, "after-uninstall-marketplace-remove"))
|
|
877
|
+
return rollback(true);
|
|
878
|
+
if (!exactState(p.codexHome, null, false)) {
|
|
879
|
+
const restored = restoreOld(p.codexHome, source);
|
|
880
|
+
if (restored) {
|
|
881
|
+
rmSync(p.journal, { force: true });
|
|
882
|
+
return {
|
|
883
|
+
code: 1,
|
|
884
|
+
status: "rolled-back",
|
|
885
|
+
message: "uninstall failed; prior public state was restored",
|
|
886
|
+
};
|
|
887
|
+
}
|
|
888
|
+
writeJournal(p.journal, {
|
|
889
|
+
operation: "uninstall",
|
|
890
|
+
step: "restore-partial",
|
|
891
|
+
oldSource: source,
|
|
892
|
+
error: "public removal or restore failed",
|
|
893
|
+
});
|
|
894
|
+
return {
|
|
895
|
+
code: 5,
|
|
896
|
+
status: "partial",
|
|
897
|
+
message: "uninstall failed and restore finality is unknown",
|
|
898
|
+
};
|
|
899
|
+
}
|
|
900
|
+
writeJournal(p.journal, {
|
|
901
|
+
operation: "uninstall",
|
|
902
|
+
step: "public-absent-committed",
|
|
903
|
+
oldSource: source,
|
|
904
|
+
completed: [
|
|
905
|
+
"old-plugin-removed",
|
|
906
|
+
"old-marketplace-removed",
|
|
907
|
+
"public-absent-committed",
|
|
908
|
+
],
|
|
909
|
+
committed: true,
|
|
910
|
+
}, context);
|
|
911
|
+
const interruptedCommitted = interrupted(context, "after-uninstall-public-absent-commit");
|
|
912
|
+
const snapshots = [manifest.active, manifest.previous].filter(Boolean);
|
|
913
|
+
for (const snapshot of snapshots) {
|
|
914
|
+
const q = quarantine(activePath(p.root, snapshot.path), snapshot, "uninstall", context);
|
|
915
|
+
if (q.errors.length) {
|
|
916
|
+
const stale = {
|
|
917
|
+
code: 5,
|
|
918
|
+
status: "committed-stale-cleanup",
|
|
919
|
+
message: "registration removal committed; local cleanup requires resume",
|
|
920
|
+
details: { errors: q.errors, trashPath: q.trash },
|
|
921
|
+
};
|
|
922
|
+
return interruptedCommitted ? interruption(stale) : stale;
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
durableUnlink(p.manifest, context.fs);
|
|
926
|
+
durableUnlink(p.journal, context.fs);
|
|
927
|
+
rmSync(p.root, { recursive: true });
|
|
928
|
+
const result = {
|
|
929
|
+
code: 0,
|
|
930
|
+
status: "uninstalled",
|
|
931
|
+
message: "Codex registration removed and verified owned files deleted",
|
|
932
|
+
};
|
|
933
|
+
return interruptedCommitted ? interruption(result) : result;
|
|
934
|
+
}
|
|
935
|
+
finally {
|
|
936
|
+
unlock();
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
export function run(command, options = {}, context = {}) {
|
|
940
|
+
try {
|
|
941
|
+
if (command === "doctor")
|
|
942
|
+
return doctor(context);
|
|
943
|
+
if (command === "install")
|
|
944
|
+
return installOrUpdate("install", options, context);
|
|
945
|
+
if (command === "update")
|
|
946
|
+
return installOrUpdate("update", options, context);
|
|
947
|
+
if (command === "uninstall")
|
|
948
|
+
return uninstall(options, context);
|
|
949
|
+
return { code: 2, status: "usage", message: "unknown command" };
|
|
950
|
+
}
|
|
951
|
+
catch (error) {
|
|
952
|
+
if (error instanceof MetadataError)
|
|
953
|
+
return { code: 3, status: "safety-refusal", message: error.message };
|
|
954
|
+
return { code: 5, status: "partial", message: String(error) };
|
|
955
|
+
}
|
|
956
|
+
}
|