@dtt_siye/atool 1.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 +21 -0
- package/README.md +235 -0
- package/VERSION +1 -0
- package/agents/code-reviewer.md +29 -0
- package/bin/atool.js +235 -0
- package/bin/postinstall.js +23 -0
- package/hooks/doc-sync-reminder +155 -0
- package/hooks/hooks-cursor.json +37 -0
- package/hooks/hooks.json +37 -0
- package/hooks/prompt-guard +135 -0
- package/hooks/session-start +286 -0
- package/install.sh +603 -0
- package/lib/analyze-source.sh +1265 -0
- package/lib/common.sh +1041 -0
- package/lib/compute-importance.sh +598 -0
- package/lib/detect-stack.sh +354 -0
- package/lib/generate-visualization.sh +266 -0
- package/lib/install-claude.sh +43 -0
- package/lib/install-cursor.sh +281 -0
- package/lib/install-hooks.sh +285 -0
- package/lib/install-kiro.sh +543 -0
- package/lib/install-mcp.sh +99 -0
- package/lib/install-skills.sh +129 -0
- package/lib/knowledge-graph.sh +1014 -0
- package/lib/multi-dimensional-analysis.sh +413 -0
- package/lib/pre-scan.sh +1045 -0
- package/lib/project-init.sh +552 -0
- package/lib/visualization-template.html +545 -0
- package/mcp/recommended.json +24 -0
- package/package.json +39 -0
- package/skills/_superpowers/.claude-plugin/marketplace.json +20 -0
- package/skills/_superpowers/.claude-plugin/plugin.json +20 -0
- package/skills/_superpowers/.codex/INSTALL.md +67 -0
- package/skills/_superpowers/.cursor-plugin/plugin.json +25 -0
- package/skills/_superpowers/.gitattributes +18 -0
- package/skills/_superpowers/.github/FUNDING.yml +3 -0
- package/skills/_superpowers/.github/ISSUE_TEMPLATE/bug_report.md +52 -0
- package/skills/_superpowers/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/skills/_superpowers/.github/ISSUE_TEMPLATE/feature_request.md +34 -0
- package/skills/_superpowers/.github/ISSUE_TEMPLATE/platform_support.md +23 -0
- package/skills/_superpowers/.github/PULL_REQUEST_TEMPLATE.md +87 -0
- package/skills/_superpowers/.opencode/INSTALL.md +83 -0
- package/skills/_superpowers/.opencode/plugins/superpowers.js +107 -0
- package/skills/_superpowers/CHANGELOG.md +13 -0
- package/skills/_superpowers/CODE_OF_CONDUCT.md +128 -0
- package/skills/_superpowers/GEMINI.md +2 -0
- package/skills/_superpowers/LICENSE +21 -0
- package/skills/_superpowers/README.md +187 -0
- package/skills/_superpowers/RELEASE-NOTES.md +1083 -0
- package/skills/_superpowers/agents/code-reviewer.md +48 -0
- package/skills/_superpowers/commands/brainstorm.md +5 -0
- package/skills/_superpowers/commands/execute-plan.md +5 -0
- package/skills/_superpowers/commands/write-plan.md +5 -0
- package/skills/_superpowers/docs/README.codex.md +126 -0
- package/skills/_superpowers/docs/README.opencode.md +130 -0
- package/skills/_superpowers/docs/plans/2025-11-22-opencode-support-design.md +294 -0
- package/skills/_superpowers/docs/plans/2025-11-22-opencode-support-implementation.md +1095 -0
- package/skills/_superpowers/docs/plans/2025-11-28-skills-improvements-from-user-feedback.md +711 -0
- package/skills/_superpowers/docs/plans/2026-01-17-visual-brainstorming.md +571 -0
- package/skills/_superpowers/docs/superpowers/plans/2026-01-22-document-review-system.md +301 -0
- package/skills/_superpowers/docs/superpowers/plans/2026-02-19-visual-brainstorming-refactor.md +523 -0
- package/skills/_superpowers/docs/superpowers/plans/2026-03-11-zero-dep-brainstorm-server.md +479 -0
- package/skills/_superpowers/docs/superpowers/plans/2026-03-23-codex-app-compatibility.md +564 -0
- package/skills/_superpowers/docs/superpowers/specs/2026-01-22-document-review-system-design.md +136 -0
- package/skills/_superpowers/docs/superpowers/specs/2026-02-19-visual-brainstorming-refactor-design.md +162 -0
- package/skills/_superpowers/docs/superpowers/specs/2026-03-11-zero-dep-brainstorm-server-design.md +118 -0
- package/skills/_superpowers/docs/superpowers/specs/2026-03-23-codex-app-compatibility-design.md +244 -0
- package/skills/_superpowers/docs/testing.md +303 -0
- package/skills/_superpowers/docs/windows/polyglot-hooks.md +212 -0
- package/skills/_superpowers/gemini-extension.json +6 -0
- package/skills/_superpowers/hooks/hooks-cursor.json +10 -0
- package/skills/_superpowers/hooks/hooks.json +16 -0
- package/skills/_superpowers/hooks/run-hook.cmd +46 -0
- package/skills/_superpowers/hooks/session-start +57 -0
- package/skills/_superpowers/package.json +6 -0
- package/skills/_superpowers/skills/brainstorming/SKILL.md +164 -0
- package/skills/_superpowers/skills/brainstorming/scripts/frame-template.html +214 -0
- package/skills/_superpowers/skills/brainstorming/scripts/helper.js +88 -0
- package/skills/_superpowers/skills/brainstorming/scripts/server.cjs +354 -0
- package/skills/_superpowers/skills/brainstorming/scripts/start-server.sh +148 -0
- package/skills/_superpowers/skills/brainstorming/scripts/stop-server.sh +56 -0
- package/skills/_superpowers/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/skills/_superpowers/skills/brainstorming/visual-companion.md +287 -0
- package/skills/_superpowers/skills/dispatching-parallel-agents/SKILL.md +182 -0
- package/skills/_superpowers/skills/executing-plans/SKILL.md +70 -0
- package/skills/_superpowers/skills/finishing-a-development-branch/SKILL.md +200 -0
- package/skills/_superpowers/skills/receiving-code-review/SKILL.md +213 -0
- package/skills/_superpowers/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/_superpowers/skills/requesting-code-review/code-reviewer.md +146 -0
- package/skills/_superpowers/skills/subagent-driven-development/SKILL.md +277 -0
- package/skills/_superpowers/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/_superpowers/skills/subagent-driven-development/implementer-prompt.md +113 -0
- package/skills/_superpowers/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/_superpowers/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/skills/_superpowers/skills/systematic-debugging/SKILL.md +296 -0
- package/skills/_superpowers/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/skills/_superpowers/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/skills/_superpowers/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/skills/_superpowers/skills/systematic-debugging/find-polluter.sh +63 -0
- package/skills/_superpowers/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/skills/_superpowers/skills/systematic-debugging/test-academic.md +14 -0
- package/skills/_superpowers/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/skills/_superpowers/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/skills/_superpowers/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/skills/_superpowers/skills/test-driven-development/SKILL.md +371 -0
- package/skills/_superpowers/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/skills/_superpowers/skills/using-git-worktrees/SKILL.md +218 -0
- package/skills/_superpowers/skills/using-superpowers/SKILL.md +115 -0
- package/skills/_superpowers/skills/using-superpowers/references/codex-tools.md +100 -0
- package/skills/_superpowers/skills/using-superpowers/references/gemini-tools.md +33 -0
- package/skills/_superpowers/skills/verification-before-completion/SKILL.md +139 -0
- package/skills/_superpowers/skills/writing-plans/SKILL.md +152 -0
- package/skills/_superpowers/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/skills/_superpowers/skills/writing-skills/SKILL.md +655 -0
- package/skills/_superpowers/skills/writing-skills/anthropic-best-practices.md +1150 -0
- package/skills/_superpowers/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
- package/skills/_superpowers/skills/writing-skills/graphviz-conventions.dot +172 -0
- package/skills/_superpowers/skills/writing-skills/persuasion-principles.md +187 -0
- package/skills/_superpowers/skills/writing-skills/render-graphs.js +168 -0
- package/skills/_superpowers/skills/writing-skills/testing-skills-with-subagents.md +384 -0
- package/skills/_superpowers/tests/brainstorm-server/package-lock.json +36 -0
- package/skills/_superpowers/tests/brainstorm-server/package.json +10 -0
- package/skills/_superpowers/tests/brainstorm-server/server.test.js +427 -0
- package/skills/_superpowers/tests/brainstorm-server/windows-lifecycle.test.sh +351 -0
- package/skills/_superpowers/tests/brainstorm-server/ws-protocol.test.js +392 -0
- package/skills/_superpowers/tests/claude-code/README.md +158 -0
- package/skills/_superpowers/tests/claude-code/analyze-token-usage.py +168 -0
- package/skills/_superpowers/tests/claude-code/run-skill-tests.sh +187 -0
- package/skills/_superpowers/tests/claude-code/test-document-review-system.sh +177 -0
- package/skills/_superpowers/tests/claude-code/test-helpers.sh +202 -0
- package/skills/_superpowers/tests/claude-code/test-subagent-driven-development-integration.sh +314 -0
- package/skills/_superpowers/tests/claude-code/test-subagent-driven-development.sh +165 -0
- package/skills/_superpowers/tests/explicit-skill-requests/prompts/action-oriented.txt +3 -0
- package/skills/_superpowers/tests/explicit-skill-requests/prompts/after-planning-flow.txt +17 -0
- package/skills/_superpowers/tests/explicit-skill-requests/prompts/claude-suggested-it.txt +11 -0
- package/skills/_superpowers/tests/explicit-skill-requests/prompts/i-know-what-sdd-means.txt +8 -0
- package/skills/_superpowers/tests/explicit-skill-requests/prompts/mid-conversation-execute-plan.txt +3 -0
- package/skills/_superpowers/tests/explicit-skill-requests/prompts/please-use-brainstorming.txt +1 -0
- package/skills/_superpowers/tests/explicit-skill-requests/prompts/skip-formalities.txt +3 -0
- package/skills/_superpowers/tests/explicit-skill-requests/prompts/subagent-driven-development-please.txt +1 -0
- package/skills/_superpowers/tests/explicit-skill-requests/prompts/use-systematic-debugging.txt +1 -0
- package/skills/_superpowers/tests/explicit-skill-requests/run-all.sh +70 -0
- package/skills/_superpowers/tests/explicit-skill-requests/run-claude-describes-sdd.sh +100 -0
- package/skills/_superpowers/tests/explicit-skill-requests/run-extended-multiturn-test.sh +113 -0
- package/skills/_superpowers/tests/explicit-skill-requests/run-haiku-test.sh +144 -0
- package/skills/_superpowers/tests/explicit-skill-requests/run-multiturn-test.sh +143 -0
- package/skills/_superpowers/tests/explicit-skill-requests/run-test.sh +136 -0
- package/skills/_superpowers/tests/opencode/run-tests.sh +163 -0
- package/skills/_superpowers/tests/opencode/setup.sh +73 -0
- package/skills/_superpowers/tests/opencode/test-plugin-loading.sh +72 -0
- package/skills/_superpowers/tests/opencode/test-priority.sh +198 -0
- package/skills/_superpowers/tests/opencode/test-tools.sh +104 -0
- package/skills/_superpowers/tests/skill-triggering/prompts/dispatching-parallel-agents.txt +8 -0
- package/skills/_superpowers/tests/skill-triggering/prompts/executing-plans.txt +1 -0
- package/skills/_superpowers/tests/skill-triggering/prompts/requesting-code-review.txt +3 -0
- package/skills/_superpowers/tests/skill-triggering/prompts/systematic-debugging.txt +11 -0
- package/skills/_superpowers/tests/skill-triggering/prompts/test-driven-development.txt +7 -0
- package/skills/_superpowers/tests/skill-triggering/prompts/writing-plans.txt +10 -0
- package/skills/_superpowers/tests/skill-triggering/run-all.sh +60 -0
- package/skills/_superpowers/tests/skill-triggering/run-test.sh +88 -0
- package/skills/_superpowers/tests/subagent-driven-dev/go-fractals/design.md +81 -0
- package/skills/_superpowers/tests/subagent-driven-dev/go-fractals/plan.md +172 -0
- package/skills/_superpowers/tests/subagent-driven-dev/go-fractals/scaffold.sh +45 -0
- package/skills/_superpowers/tests/subagent-driven-dev/run-test.sh +106 -0
- package/skills/_superpowers/tests/subagent-driven-dev/svelte-todo/design.md +70 -0
- package/skills/_superpowers/tests/subagent-driven-dev/svelte-todo/plan.md +222 -0
- package/skills/_superpowers/tests/subagent-driven-dev/svelte-todo/scaffold.sh +46 -0
- package/skills/ai-project-architecture/SKILL.md +632 -0
- package/skills/ai-project-architecture/reference/structure-rules.md +406 -0
- package/skills/ai-project-architecture/templates/compliance-report.md +300 -0
- package/skills/ai-project-architecture/templates/migration-plan.md +433 -0
- package/skills/ai-project-architecture/templates/verification-checklist.md +408 -0
- package/skills/android-conventions/SKILL.md +125 -0
- package/skills/atool-init/SKILL.md +141 -0
- package/skills/clarify-before-build/SKILL.md +107 -0
- package/skills/code-review/SKILL.md +406 -0
- package/skills/code-review/rules/architecture.md +285 -0
- package/skills/code-review/rules/coupling-cohesion.md +309 -0
- package/skills/code-review/rules/dead-code.md +115 -0
- package/skills/code-review/rules/deprecation-debt.md +279 -0
- package/skills/code-review/rules/duplication.md +104 -0
- package/skills/code-review/rules/error-security.md +143 -0
- package/skills/code-review/rules/maintainability.md +203 -0
- package/skills/code-review/rules/quality.md +158 -0
- package/skills/devops-conventions/SKILL.md +205 -0
- package/skills/doc-coauthoring/SKILL.md +392 -0
- package/skills/doc-standards-enforcer/SKILL.md +290 -0
- package/skills/doc-standards-enforcer/examples/valid-document-example.md +67 -0
- package/skills/doc-standards-enforcer/references/101-standards-summary.md +318 -0
- package/skills/doc-standards-enforcer/scripts/check_references.py +175 -0
- package/skills/doc-standards-enforcer/scripts/fix_common_issues.py +303 -0
- package/skills/doc-standards-enforcer/scripts/validate_doc_standards.py +332 -0
- package/skills/docx/LICENSE.txt +30 -0
- package/skills/docx/SKILL.md +200 -0
- package/skills/docx/docx-js.md +350 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/docx/ooxml/scripts/pack.py +159 -0
- package/skills/docx/ooxml/scripts/unpack.py +29 -0
- package/skills/docx/ooxml/scripts/validate.py +69 -0
- package/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/docx/ooxml/scripts/validation/base.py +951 -0
- package/skills/docx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/docx/ooxml.md +610 -0
- package/skills/docx/scripts/__init__.py +1 -0
- package/skills/docx/scripts/document.py +1276 -0
- package/skills/docx/scripts/templates/comments.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/docx/scripts/templates/people.xml +3 -0
- package/skills/docx/scripts/utilities.py +374 -0
- package/skills/flutter-conventions/SKILL.md +70 -0
- package/skills/go-conventions/SKILL.md +230 -0
- package/skills/harmony-conventions/SKILL.md +156 -0
- package/skills/java-conventions/SKILL.md +277 -0
- package/skills/pdf/LICENSE.txt +30 -0
- package/skills/pdf/SKILL.md +297 -0
- package/skills/pdf/forms.md +205 -0
- package/skills/pdf/reference.md +612 -0
- package/skills/pdf/scripts/check_bounding_boxes.py +70 -0
- package/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/skills/pdf/scripts/check_fillable_fields.py +12 -0
- package/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
- package/skills/pdf/scripts/create_validation_image.py +41 -0
- package/skills/pdf/scripts/extract_form_field_info.py +152 -0
- package/skills/pdf/scripts/fill_fillable_fields.py +114 -0
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/skills/pptx/LICENSE.txt +30 -0
- package/skills/pptx/SKILL.md +487 -0
- package/skills/pptx/html2pptx.md +625 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/pptx/ooxml/scripts/pack.py +159 -0
- package/skills/pptx/ooxml/scripts/unpack.py +29 -0
- package/skills/pptx/ooxml/scripts/validate.py +69 -0
- package/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/pptx/ooxml/scripts/validation/base.py +951 -0
- package/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/pptx/ooxml.md +427 -0
- package/skills/pptx/scripts/html2pptx.js +979 -0
- package/skills/pptx/scripts/inventory.py +1020 -0
- package/skills/pptx/scripts/rearrange.py +231 -0
- package/skills/pptx/scripts/replace.py +385 -0
- package/skills/pptx/scripts/thumbnail.py +450 -0
- package/skills/project-analyze/SKILL.md +270 -0
- package/skills/project-analyze/phases/phase0-discovery.md +278 -0
- package/skills/project-analyze/phases/phase0.5-prescan.md +139 -0
- package/skills/project-analyze/phases/phase1-inventory.md +94 -0
- package/skills/project-analyze/phases/phase2-deep-analysis.md +249 -0
- package/skills/project-analyze/phases/phase2a-l4-analysis.md +94 -0
- package/skills/project-analyze/phases/phase2b-l5-analysis.md +97 -0
- package/skills/project-analyze/phases/phase3-knowledge-graph.md +120 -0
- package/skills/project-analyze/phases/phase3a-multi-dimensional.md +61 -0
- package/skills/project-analyze/phases/phase4-code-quality.md +81 -0
- package/skills/project-analyze/phases/phase5-synthesis.md +284 -0
- package/skills/project-analyze/phases/phase6-validation.md +179 -0
- package/skills/project-analyze/prompts/code-review-agent.md +122 -0
- package/skills/project-analyze/prompts/deep-analysis-agent.md +107 -0
- package/skills/project-analyze/prompts/inventory-agent.md +67 -0
- package/skills/project-analyze/prompts/l4-analysis-agent.md +98 -0
- package/skills/project-analyze/rules/android.md +282 -0
- package/skills/project-analyze/rules/devops.md +443 -0
- package/skills/project-analyze/rules/generic.md +243 -0
- package/skills/project-analyze/rules/go.md +289 -0
- package/skills/project-analyze/rules/harmony.md +257 -0
- package/skills/project-analyze/rules/java.md +507 -0
- package/skills/project-analyze/rules/mobile-flutter.md +315 -0
- package/skills/project-analyze/rules/mobile-react-native.md +283 -0
- package/skills/project-analyze/rules/mobile-swift.md +323 -0
- package/skills/project-analyze/rules/python.md +317 -0
- package/skills/project-analyze/rules/rust-tauri.md +243 -0
- package/skills/project-analyze/rules/rust.md +296 -0
- package/skills/project-analyze/rules/web-nextjs.md +364 -0
- package/skills/project-analyze/rules/web-react.md +298 -0
- package/skills/project-analyze/rules/web-vue.md +378 -0
- package/skills/project-analyze/rules/web.md +390 -0
- package/skills/project-query/SKILL.md +224 -0
- package/skills/project-query/rules/query-templates.md +212 -0
- package/skills/python-conventions/SKILL.md +169 -0
- package/skills/react-native-conventions/SKILL.md +73 -0
- package/skills/requirements-writer/README.md +153 -0
- package/skills/requirements-writer/SKILL.md +341 -0
- package/skills/requirements-writer/examples/prd-outline-example.md +217 -0
- package/skills/requirements-writer/templates/module-prd-template.md +362 -0
- package/skills/requirements-writer/templates/prd-outline-template.md +185 -0
- package/skills/requirements-writer/templates/user-story-template.md +1125 -0
- package/skills/rust-conventions/SKILL.md +361 -0
- package/skills/smart-dispatch/SKILL.md +296 -0
- package/skills/smart-dispatch/implementer-prompt.md +146 -0
- package/skills/smart-dispatch/reviewer-prompt.md +199 -0
- package/skills/software-architecture/SKILL.md +278 -0
- package/skills/swift-conventions/SKILL.md +72 -0
- package/skills/ui-ux-pro/SKILL.md +140 -0
- package/skills/verification-before-completion/SKILL.md +119 -0
- package/skills/web-conventions/SKILL.md +259 -0
- package/skills/webapp-testing/LICENSE.txt +202 -0
- package/skills/webapp-testing/SKILL.md +97 -0
- package/skills/webapp-testing/examples/console_logging.py +35 -0
- package/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/webapp-testing/scripts/with_server.py +106 -0
- package/skills/writing-plans/SKILL.md +144 -0
- package/skills/xlsx/LICENSE.txt +30 -0
- package/skills/xlsx/SKILL.md +292 -0
- package/skills/xlsx/recalc.py +178 -0
- package/templates/CLAUDE.md.android +57 -0
- package/templates/CLAUDE.md.devops +50 -0
- package/templates/CLAUDE.md.generic +34 -0
- package/templates/CLAUDE.md.go +67 -0
- package/templates/CLAUDE.md.harmony +54 -0
- package/templates/CLAUDE.md.java +56 -0
- package/templates/CLAUDE.md.mobile-flutter +38 -0
- package/templates/CLAUDE.md.mobile-react-native +37 -0
- package/templates/CLAUDE.md.mobile-swift +40 -0
- package/templates/CLAUDE.md.python +65 -0
- package/templates/CLAUDE.md.rust +68 -0
- package/templates/CLAUDE.md.rust-tauri +120 -0
- package/templates/CLAUDE.md.web +63 -0
- package/templates/COMPONENT.md.android +58 -0
- package/templates/COMPONENT.md.devops +54 -0
- package/templates/COMPONENT.md.generic +35 -0
- package/templates/COMPONENT.md.go +59 -0
- package/templates/COMPONENT.md.harmony +63 -0
- package/templates/COMPONENT.md.java +69 -0
- package/templates/COMPONENT.md.mobile-flutter +56 -0
- package/templates/COMPONENT.md.mobile-react-native +55 -0
- package/templates/COMPONENT.md.mobile-swift +56 -0
- package/templates/COMPONENT.md.python +67 -0
- package/templates/COMPONENT.md.rust +57 -0
- package/templates/COMPONENT.md.rust-tauri +66 -0
- package/templates/COMPONENT.md.web +39 -0
- package/templates/README.md.android +71 -0
- package/templates/README.md.devops +68 -0
- package/templates/README.md.generic +39 -0
- package/templates/README.md.go +70 -0
- package/templates/README.md.harmony +72 -0
- package/templates/README.md.java +73 -0
- package/templates/README.md.mobile-flutter +69 -0
- package/templates/README.md.mobile-react-native +65 -0
- package/templates/README.md.mobile-swift +69 -0
- package/templates/README.md.monorepo +59 -0
- package/templates/README.md.python +66 -0
- package/templates/README.md.rust +69 -0
- package/templates/README.md.rust-tauri +149 -0
- package/templates/README.md.web +94 -0
- package/templates/UI_STYLE.md.android +74 -0
- package/templates/UI_STYLE.md.devops +50 -0
- package/templates/UI_STYLE.md.generic +31 -0
- package/templates/UI_STYLE.md.go +49 -0
- package/templates/UI_STYLE.md.harmony +71 -0
- package/templates/UI_STYLE.md.java +61 -0
- package/templates/UI_STYLE.md.mobile-flutter +70 -0
- package/templates/UI_STYLE.md.mobile-react-native +71 -0
- package/templates/UI_STYLE.md.mobile-swift +71 -0
- package/templates/UI_STYLE.md.python +58 -0
- package/templates/UI_STYLE.md.rust +52 -0
- package/templates/UI_STYLE.md.rust-tauri +102 -0
- package/templates/UI_STYLE.md.web +92 -0
- package/templates/cursor-rules.android.mdc +33 -0
- package/templates/cursor-rules.devops.mdc +32 -0
- package/templates/cursor-rules.generic.mdc +25 -0
- package/templates/cursor-rules.go.mdc +34 -0
- package/templates/cursor-rules.harmony.mdc +30 -0
- package/templates/cursor-rules.java.mdc +30 -0
- package/templates/cursor-rules.mobile-flutter.mdc +42 -0
- package/templates/cursor-rules.mobile-react-native.mdc +43 -0
- package/templates/cursor-rules.mobile-swift.mdc +42 -0
- package/templates/cursor-rules.python.mdc +33 -0
- package/templates/cursor-rules.rust-tauri.mdc +67 -0
- package/templates/cursor-rules.rust.mdc +30 -0
- package/templates/cursor-rules.web.mdc +30 -0
- package/templates/kiro-steering.android.md +39 -0
- package/templates/kiro-steering.devops.md +32 -0
- package/templates/kiro-steering.generic.md +28 -0
- package/templates/kiro-steering.go.md +41 -0
- package/templates/kiro-steering.harmony.md +36 -0
- package/templates/kiro-steering.java.md +37 -0
- package/templates/kiro-steering.mobile-flutter.md +73 -0
- package/templates/kiro-steering.mobile-react-native.md +71 -0
- package/templates/kiro-steering.mobile-swift.md +62 -0
- package/templates/kiro-steering.python.md +34 -0
- package/templates/kiro-steering.rust-tauri.md +50 -0
- package/templates/kiro-steering.rust.md +36 -0
- package/templates/kiro-steering.web.md +41 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Visual Brainstorming Refactor: Browser Displays, Terminal Commands
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-02-19
|
|
4
|
+
**Status:** Approved
|
|
5
|
+
**Scope:** `lib/brainstorm-server/`, `skills/brainstorming/visual-companion.md`, `tests/brainstorm-server/`
|
|
6
|
+
|
|
7
|
+
## Problem
|
|
8
|
+
|
|
9
|
+
During visual brainstorming, Claude runs `wait-for-feedback.sh` as a background task and blocks on `TaskOutput(block=true, timeout=600s)`. This seizes the TUI entirely — the user cannot type to Claude while visual brainstorming is running. The browser becomes the only input channel.
|
|
10
|
+
|
|
11
|
+
Claude Code's execution model is turn-based. There is no way for Claude to listen on two channels simultaneously within a single turn. The blocking `TaskOutput` pattern was the wrong primitive — it simulates event-driven behavior the platform doesn't support.
|
|
12
|
+
|
|
13
|
+
## Design
|
|
14
|
+
|
|
15
|
+
### Core Model
|
|
16
|
+
|
|
17
|
+
**Browser = interactive display.** Shows mockups, lets the user click to select options. Selections are recorded server-side.
|
|
18
|
+
|
|
19
|
+
**Terminal = conversation channel.** Always unblocked, always available. The user talks to Claude here.
|
|
20
|
+
|
|
21
|
+
### The Loop
|
|
22
|
+
|
|
23
|
+
1. Claude writes an HTML file to the session directory
|
|
24
|
+
2. Server detects it via chokidar, pushes WebSocket reload to the browser (unchanged)
|
|
25
|
+
3. Claude ends its turn — tells the user to check the browser and respond in the terminal
|
|
26
|
+
4. User looks at browser, optionally clicks to select an option, then types feedback in the terminal
|
|
27
|
+
5. On the next turn, Claude reads `$SCREEN_DIR/.events` for the browser interaction stream (clicks, selections), merges with the terminal text
|
|
28
|
+
6. Iterate or advance
|
|
29
|
+
|
|
30
|
+
No background tasks. No `TaskOutput` blocking. No polling scripts.
|
|
31
|
+
|
|
32
|
+
### Key Deletion: `wait-for-feedback.sh`
|
|
33
|
+
|
|
34
|
+
Deleted entirely. Its purpose was to bridge "server logs events to stdout" and "Claude needs to receive those events." The `.events` file replaces this — the server writes user interaction events directly, and Claude reads them with whatever file-reading mechanism the platform provides.
|
|
35
|
+
|
|
36
|
+
### Key Addition: `.events` File (Per-Screen Event Stream)
|
|
37
|
+
|
|
38
|
+
The server writes all user interaction events to `$SCREEN_DIR/.events`, one JSON object per line. This gives Claude the full interaction stream for the current screen — not just the final selection, but the user's exploration path (clicked A, then B, settled on C).
|
|
39
|
+
|
|
40
|
+
Example contents after a user explores options:
|
|
41
|
+
|
|
42
|
+
```jsonl
|
|
43
|
+
{"type":"click","choice":"a","text":"Option A - Preset-First Wizard","timestamp":1706000101}
|
|
44
|
+
{"type":"click","choice":"c","text":"Option C - Manual Config","timestamp":1706000108}
|
|
45
|
+
{"type":"click","choice":"b","text":"Option B - Hybrid Approach","timestamp":1706000115}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
- Append-only within a screen. Each user event is appended as a new line.
|
|
49
|
+
- The file is cleared (deleted) when chokidar detects a new HTML file (new screen pushed), preventing stale events from carrying over.
|
|
50
|
+
- If the file doesn't exist when Claude reads it, no browser interaction occurred — Claude uses only the terminal text.
|
|
51
|
+
- The file contains only user events (`click`, etc.) — not server lifecycle events (`server-started`, `screen-added`). This keeps it small and focused.
|
|
52
|
+
- Claude can read the full stream to understand the user's exploration pattern, or just look at the last `choice` event for the final selection.
|
|
53
|
+
|
|
54
|
+
## Changes by File
|
|
55
|
+
|
|
56
|
+
### `index.js` (server)
|
|
57
|
+
|
|
58
|
+
**A. Write user events to `.events` file.**
|
|
59
|
+
|
|
60
|
+
In the WebSocket `message` handler, after logging the event to stdout: append the event as a JSON line to `$SCREEN_DIR/.events` via `fs.appendFileSync`. Only write user interaction events (those with `source: 'user-event'`), not server lifecycle events.
|
|
61
|
+
|
|
62
|
+
**B. Clear `.events` on new screen.**
|
|
63
|
+
|
|
64
|
+
In the chokidar `add` handler (new `.html` file detected), delete `$SCREEN_DIR/.events` if it exists. This is the definitive "new screen" signal — better than clearing on GET `/` which fires on every reload.
|
|
65
|
+
|
|
66
|
+
**C. Replace `wrapInFrame` content injection.**
|
|
67
|
+
|
|
68
|
+
The current regex anchors on `<div class="feedback-footer">`, which is being removed. Replace with a comment placeholder: remove the existing default content inside `#claude-content` (the `<h2>Visual Brainstorming</h2>` and subtitle paragraph) and replace with a single `<!-- CONTENT -->` marker. Content injection becomes `frameTemplate.replace('<!-- CONTENT -->', content)`. Simpler and won't break if template formatting changes.
|
|
69
|
+
|
|
70
|
+
### `frame-template.html` (UI frame)
|
|
71
|
+
|
|
72
|
+
**Remove:**
|
|
73
|
+
- The `feedback-footer` div (textarea, Send button, label, `.feedback-row`)
|
|
74
|
+
- Associated CSS (`.feedback-footer`, `.feedback-footer label`, `.feedback-row`, textarea and button styles within it)
|
|
75
|
+
|
|
76
|
+
**Add:**
|
|
77
|
+
- `<!-- CONTENT -->` placeholder inside `#claude-content`, replacing the default text
|
|
78
|
+
- A selection indicator bar where the footer was, with two states:
|
|
79
|
+
- Default: "Click an option above, then return to the terminal"
|
|
80
|
+
- After selection: "Option B selected — return to terminal to continue"
|
|
81
|
+
- CSS for the indicator bar (subtle, similar visual weight to the existing header)
|
|
82
|
+
|
|
83
|
+
**Keep unchanged:**
|
|
84
|
+
- Header bar with "Brainstorm Companion" title and connection status
|
|
85
|
+
- `.main` wrapper and `#claude-content` container
|
|
86
|
+
- All component CSS (`.options`, `.cards`, `.mockup`, `.split`, `.pros-cons`, placeholders, mock elements)
|
|
87
|
+
- Dark/light theme variables and media query
|
|
88
|
+
|
|
89
|
+
### `helper.js` (client-side script)
|
|
90
|
+
|
|
91
|
+
**Remove:**
|
|
92
|
+
- `sendToClaude()` function and the "Sent to Claude" page takeover
|
|
93
|
+
- `window.send()` function (was tied to the removed Send button)
|
|
94
|
+
- Form submission handler — no purpose without the feedback textarea, adds log noise
|
|
95
|
+
- Input change handler — same reason
|
|
96
|
+
- `pageshow` event listener (was added to fix textarea persistence — no textarea anymore)
|
|
97
|
+
|
|
98
|
+
**Keep:**
|
|
99
|
+
- WebSocket connection, reconnect logic, event queue
|
|
100
|
+
- Reload handler (`window.location.reload()` on server push)
|
|
101
|
+
- `window.toggleSelect()` for selection highlighting
|
|
102
|
+
- `window.selectedChoice` tracking
|
|
103
|
+
- `window.brainstorm.send()` and `window.brainstorm.choice()` — these are distinct from the removed `window.send()`. They call `sendEvent` which logs to the server via WebSocket. Useful for custom full-document pages.
|
|
104
|
+
|
|
105
|
+
**Narrow:**
|
|
106
|
+
- Click handler: capture only `[data-choice]` clicks, not all buttons/links. The broad capture was needed when the browser was a feedback channel; now it's just for selection tracking.
|
|
107
|
+
|
|
108
|
+
**Add:**
|
|
109
|
+
- On `data-choice` click, update the selection indicator bar text to show which option was selected.
|
|
110
|
+
|
|
111
|
+
**Remove from `window.brainstorm` API:**
|
|
112
|
+
- `brainstorm.sendToClaude` — no longer exists
|
|
113
|
+
|
|
114
|
+
### `visual-companion.md` (skill instructions)
|
|
115
|
+
|
|
116
|
+
**Rewrite "The Loop" section** to the non-blocking flow described above. Remove all references to:
|
|
117
|
+
- `wait-for-feedback.sh`
|
|
118
|
+
- `TaskOutput` blocking
|
|
119
|
+
- Timeout/retry logic (600s timeout, 30-minute cap)
|
|
120
|
+
- "User Feedback Format" section describing `send-to-claude` JSON
|
|
121
|
+
|
|
122
|
+
**Replace with:**
|
|
123
|
+
- The new loop (write HTML → end turn → user responds in terminal → read `.events` → iterate)
|
|
124
|
+
- `.events` file format documentation
|
|
125
|
+
- Guidance that the terminal message is the primary feedback; `.events` provides the full browser interaction stream for additional context
|
|
126
|
+
|
|
127
|
+
**Keep:**
|
|
128
|
+
- Server startup/shutdown instructions
|
|
129
|
+
- Content fragment vs full document guidance
|
|
130
|
+
- CSS class reference and available components
|
|
131
|
+
- Design tips (scale fidelity to the question, 2-4 options per screen, etc.)
|
|
132
|
+
|
|
133
|
+
### `wait-for-feedback.sh`
|
|
134
|
+
|
|
135
|
+
**Deleted entirely.**
|
|
136
|
+
|
|
137
|
+
### `tests/brainstorm-server/server.test.js`
|
|
138
|
+
|
|
139
|
+
Tests that need updating:
|
|
140
|
+
- Test asserting `feedback-footer` presence in fragment responses — update to assert the selection indicator bar or `<!-- CONTENT -->` replacement
|
|
141
|
+
- Test asserting `helper.js` contains `send` — update to reflect narrowed API
|
|
142
|
+
- Test asserting `sendToClaude` CSS variable usage — remove (function no longer exists)
|
|
143
|
+
|
|
144
|
+
## Platform Compatibility
|
|
145
|
+
|
|
146
|
+
The server code (`index.js`, `helper.js`, `frame-template.html`) is fully platform-agnostic — pure Node.js and browser JavaScript. No Claude Code-specific references. Already proven to work on Codex via background terminal interaction.
|
|
147
|
+
|
|
148
|
+
The skill instructions (`visual-companion.md`) are the platform-adaptive layer. Each platform's Claude uses its own tools to start the server, read `.events`, etc. The non-blocking model works naturally across platforms since it doesn't depend on any platform-specific blocking primitive.
|
|
149
|
+
|
|
150
|
+
## What This Enables
|
|
151
|
+
|
|
152
|
+
- **TUI always responsive** during visual brainstorming
|
|
153
|
+
- **Mixed input** — click in browser + type in terminal, naturally merged
|
|
154
|
+
- **Graceful degradation** — browser down or user doesn't open it? Terminal still works
|
|
155
|
+
- **Simpler architecture** — no background tasks, no polling scripts, no timeout management
|
|
156
|
+
- **Cross-platform** — same server code works on Claude Code, Codex, and any future platform
|
|
157
|
+
|
|
158
|
+
## What This Drops
|
|
159
|
+
|
|
160
|
+
- **Pure-browser feedback workflow** — user must return to the terminal to continue. The selection indicator bar guides them, but it's one extra step compared to the old click-Send-and-wait flow.
|
|
161
|
+
- **Inline text feedback from browser** — the textarea is gone. All text feedback goes through the terminal. This is intentional — the terminal is a better text input channel than a small textarea in a frame.
|
|
162
|
+
- **Immediate response on browser Send** — the old system had Claude respond the moment the user clicked Send. Now there's a gap while the user switches to the terminal. In practice this is seconds, and the user gets to add context in their terminal message.
|
package/skills/_superpowers/docs/superpowers/specs/2026-03-11-zero-dep-brainstorm-server-design.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Zero-Dependency Brainstorm Server
|
|
2
|
+
|
|
3
|
+
Replace the brainstorm companion server's vendored node_modules (express, ws, chokidar — 714 tracked files) with a single zero-dependency `server.js` using only Node.js built-ins.
|
|
4
|
+
|
|
5
|
+
## Motivation
|
|
6
|
+
|
|
7
|
+
Vendoring node_modules into the git repo creates a supply chain risk: frozen dependencies don't get security patches, 714 files of third-party code are committed without audit, and modifications to vendored code look like normal commits. While the actual risk is low (localhost-only dev server), eliminating it is straightforward.
|
|
8
|
+
|
|
9
|
+
## Architecture
|
|
10
|
+
|
|
11
|
+
A single `server.js` file (~250-300 lines) using `http`, `crypto`, `fs`, and `path`. The file serves two roles:
|
|
12
|
+
|
|
13
|
+
- **When run directly** (`node server.js`): starts the HTTP/WebSocket server
|
|
14
|
+
- **When required** (`require('./server.js')`): exports WebSocket protocol functions for unit testing
|
|
15
|
+
|
|
16
|
+
### WebSocket Protocol
|
|
17
|
+
|
|
18
|
+
Implements RFC 6455 for text frames only:
|
|
19
|
+
|
|
20
|
+
**Handshake:** Compute `Sec-WebSocket-Accept` from client's `Sec-WebSocket-Key` using SHA-1 + the RFC 6455 magic GUID. Return 101 Switching Protocols.
|
|
21
|
+
|
|
22
|
+
**Frame decoding (client to server):** Handle three masked length encodings:
|
|
23
|
+
- Small: payload < 126 bytes
|
|
24
|
+
- Medium: 126-65535 bytes (16-bit extended)
|
|
25
|
+
- Large: > 65535 bytes (64-bit extended)
|
|
26
|
+
|
|
27
|
+
XOR-unmask payload using 4-byte mask key. Return `{ opcode, payload, bytesConsumed }` or `null` for incomplete buffers. Reject unmasked frames.
|
|
28
|
+
|
|
29
|
+
**Frame encoding (server to client):** Unmasked frames with the same three length encodings.
|
|
30
|
+
|
|
31
|
+
**Opcodes handled:** TEXT (0x01), CLOSE (0x08), PING (0x09), PONG (0x0A). Unrecognized opcodes get a close frame with status 1003 (Unsupported Data).
|
|
32
|
+
|
|
33
|
+
**Deliberately skipped:** Binary frames, fragmented messages, extensions (permessage-deflate), subprotocols. These are unnecessary for small JSON text messages between localhost clients. Extensions and subprotocols are negotiated in the handshake — by not advertising them, they are never active.
|
|
34
|
+
|
|
35
|
+
**Buffer accumulation:** Each connection maintains a buffer. On `data`, append and loop `decodeFrame` until it returns null or buffer is empty.
|
|
36
|
+
|
|
37
|
+
### HTTP Server
|
|
38
|
+
|
|
39
|
+
Three routes:
|
|
40
|
+
|
|
41
|
+
1. **`GET /`** — Serve newest `.html` from screen directory by mtime. Detect full documents vs fragments, wrap fragments in frame template, inject helper.js. Return `text/html`. When no `.html` files exist, serve a hardcoded waiting page ("Waiting for Claude to push a screen...") with helper.js injected.
|
|
42
|
+
2. **`GET /files/*`** — Serve static files from screen directory with MIME type lookup from a hardcoded extension map (html, css, js, png, jpg, gif, svg, json). Return 404 if not found.
|
|
43
|
+
3. **Everything else** — 404.
|
|
44
|
+
|
|
45
|
+
WebSocket upgrade handled via the `'upgrade'` event on the HTTP server, separate from the request handler.
|
|
46
|
+
|
|
47
|
+
### Configuration
|
|
48
|
+
|
|
49
|
+
Environment variables (all optional):
|
|
50
|
+
|
|
51
|
+
- `BRAINSTORM_PORT` — port to bind (default: random high port 49152-65535)
|
|
52
|
+
- `BRAINSTORM_HOST` — interface to bind (default: `127.0.0.1`)
|
|
53
|
+
- `BRAINSTORM_URL_HOST` — hostname for the URL in startup JSON (default: `localhost` when host is `127.0.0.1`, otherwise same as host)
|
|
54
|
+
- `BRAINSTORM_DIR` — screen directory path (default: `/tmp/brainstorm`)
|
|
55
|
+
|
|
56
|
+
### Startup Sequence
|
|
57
|
+
|
|
58
|
+
1. Create `SCREEN_DIR` if it doesn't exist (`mkdirSync` recursive)
|
|
59
|
+
2. Load frame template and helper.js from `__dirname`
|
|
60
|
+
3. Start HTTP server on configured host/port
|
|
61
|
+
4. Start `fs.watch` on `SCREEN_DIR`
|
|
62
|
+
5. On successful listen, log `server-started` JSON to stdout: `{ type, port, host, url_host, url, screen_dir }`
|
|
63
|
+
6. Write the same JSON to `SCREEN_DIR/.server-info` so agents can find connection details when stdout is hidden (background execution)
|
|
64
|
+
|
|
65
|
+
### Application-Level WebSocket Messages
|
|
66
|
+
|
|
67
|
+
When a TEXT frame arrives from a client:
|
|
68
|
+
|
|
69
|
+
1. Parse as JSON. If parsing fails, log to stderr and continue.
|
|
70
|
+
2. Log to stdout as `{ source: 'user-event', ...event }`.
|
|
71
|
+
3. If the event contains a `choice` property, append the JSON to `SCREEN_DIR/.events` (one line per event).
|
|
72
|
+
|
|
73
|
+
### File Watching
|
|
74
|
+
|
|
75
|
+
`fs.watch(SCREEN_DIR)` replaces chokidar. On HTML file events:
|
|
76
|
+
|
|
77
|
+
- On new file (`rename` event for a file that exists): delete `.events` file if present (`unlinkSync`), log `screen-added` to stdout as JSON
|
|
78
|
+
- On file change (`change` event): log `screen-updated` to stdout as JSON (do NOT clear `.events`)
|
|
79
|
+
- Both events: send `{ type: 'reload' }` to all connected WebSocket clients
|
|
80
|
+
|
|
81
|
+
Debounce per-filename with ~100ms timeout to prevent duplicate events (common on macOS and Linux).
|
|
82
|
+
|
|
83
|
+
### Error Handling
|
|
84
|
+
|
|
85
|
+
- Malformed JSON from WebSocket clients: log to stderr, continue
|
|
86
|
+
- Unhandled opcodes: close with status 1003
|
|
87
|
+
- Client disconnects: remove from broadcast set
|
|
88
|
+
- `fs.watch` errors: log to stderr, continue
|
|
89
|
+
- No graceful shutdown logic — shell scripts handle process lifecycle via SIGTERM
|
|
90
|
+
|
|
91
|
+
## What Changes
|
|
92
|
+
|
|
93
|
+
| Before | After |
|
|
94
|
+
|---|---|
|
|
95
|
+
| `index.js` + `package.json` + `package-lock.json` + 714 `node_modules` files | `server.js` (single file) |
|
|
96
|
+
| express, ws, chokidar dependencies | none |
|
|
97
|
+
| No static file serving | `/files/*` serves from screen directory |
|
|
98
|
+
|
|
99
|
+
## What Stays the Same
|
|
100
|
+
|
|
101
|
+
- `helper.js` — no changes
|
|
102
|
+
- `frame-template.html` — no changes
|
|
103
|
+
- `start-server.sh` — one-line update: `index.js` to `server.js`
|
|
104
|
+
- `stop-server.sh` — no changes
|
|
105
|
+
- `visual-companion.md` — no changes
|
|
106
|
+
- All existing server behavior and external contract
|
|
107
|
+
|
|
108
|
+
## Platform Compatibility
|
|
109
|
+
|
|
110
|
+
- `server.js` uses only cross-platform Node built-ins
|
|
111
|
+
- `fs.watch` is reliable for single flat directories on macOS, Linux, and Windows
|
|
112
|
+
- Shell scripts require bash (Git Bash on Windows, which is required for Claude Code)
|
|
113
|
+
|
|
114
|
+
## Testing
|
|
115
|
+
|
|
116
|
+
**Unit tests** (`ws-protocol.test.js`): Test WebSocket frame encoding/decoding, handshake computation, and protocol edge cases directly by requiring `server.js` exports.
|
|
117
|
+
|
|
118
|
+
**Integration tests** (`server.test.js`): Test full server behavior — HTTP serving, WebSocket communication, file watching, brainstorming workflow. Uses `ws` npm package as a test-only client dependency (not shipped to end users).
|
package/skills/_superpowers/docs/superpowers/specs/2026-03-23-codex-app-compatibility-design.md
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
# Codex App Compatibility: Worktree and Finishing Skill Adaptation
|
|
2
|
+
|
|
3
|
+
Make superpowers skills work in the Codex App's sandboxed worktree environment without breaking existing Claude Code or Codex CLI behavior.
|
|
4
|
+
|
|
5
|
+
**Ticket:** PRI-823
|
|
6
|
+
|
|
7
|
+
## Motivation
|
|
8
|
+
|
|
9
|
+
The Codex App runs agents inside git worktrees it manages — detached HEAD, located under `$CODEX_HOME/worktrees/`, with a Seatbelt sandbox that blocks `git checkout -b`, `git push`, and network access. Three superpowers skills assume unrestricted git access: `using-git-worktrees` creates manual worktrees with named branches, `finishing-a-development-branch` merges/pushes/PRs by branch name, and `subagent-driven-development` requires both.
|
|
10
|
+
|
|
11
|
+
The Codex CLI (open source terminal tool) does NOT have this conflict — it has no built-in worktree management. Our manual worktree approach fills an isolation gap there. The problem is specifically with the Codex App.
|
|
12
|
+
|
|
13
|
+
## Empirical Findings
|
|
14
|
+
|
|
15
|
+
Tested in the Codex App on 2026-03-23:
|
|
16
|
+
|
|
17
|
+
| Operation | workspace-write sandbox | Full access sandbox |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| `git add` | Works | Works |
|
|
20
|
+
| `git commit` | Works | Works |
|
|
21
|
+
| `git checkout -b` | **Blocked** (can't write `.git/refs/heads/`) | Works |
|
|
22
|
+
| `git push` | **Blocked** (network + `.git/refs/remotes/`) | Works |
|
|
23
|
+
| `gh pr create` | **Blocked** (network) | Works |
|
|
24
|
+
| `git status/diff/log` | Works | Works |
|
|
25
|
+
|
|
26
|
+
Additional findings:
|
|
27
|
+
- `spawn_agent` subagents **share** the parent thread's filesystem (confirmed via marker file test)
|
|
28
|
+
- "Create branch" button appears in the App header regardless of which branch the worktree was started from
|
|
29
|
+
- The App's native finishing flow: Create branch → Commit modal → Commit and push / Commit and create PR
|
|
30
|
+
- `network_access = true` config is silently broken on macOS (issue #10390)
|
|
31
|
+
|
|
32
|
+
## Design: Read-Only Environment Detection
|
|
33
|
+
|
|
34
|
+
Three read-only git commands detect the environment without side effects:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
|
|
38
|
+
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
|
|
39
|
+
BRANCH=$(git branch --show-current)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Two signals derived:
|
|
43
|
+
|
|
44
|
+
- **IN_LINKED_WORKTREE:** `GIT_DIR != GIT_COMMON` — the agent is in a worktree created by something else (Codex App, Claude Code Agent tool, previous skill run, or the user)
|
|
45
|
+
- **ON_DETACHED_HEAD:** `BRANCH` is empty — no named branch exists
|
|
46
|
+
|
|
47
|
+
Why `git-dir != git-common-dir` instead of checking `show-toplevel`:
|
|
48
|
+
- In a normal repo, both resolve to the same `.git` directory
|
|
49
|
+
- In a linked worktree, `git-dir` is `.git/worktrees/<name>` while `git-common-dir` is `.git`
|
|
50
|
+
- In a submodule, both are equal — avoiding a false positive that `show-toplevel` would produce
|
|
51
|
+
- Resolving via `cd && pwd -P` handles the relative-path problem (`git-common-dir` returns `.git` relative in normal repos but absolute in worktrees) and symlinks (macOS `/tmp` → `/private/tmp`)
|
|
52
|
+
|
|
53
|
+
### Decision Matrix
|
|
54
|
+
|
|
55
|
+
| Linked Worktree? | Detached HEAD? | Environment | Action |
|
|
56
|
+
|---|---|---|---|
|
|
57
|
+
| No | No | Claude Code / Codex CLI / normal git | Full skill behavior (unchanged) |
|
|
58
|
+
| Yes | Yes | Codex App worktree (workspace-write) | Skip worktree creation; handoff payload at finish |
|
|
59
|
+
| Yes | No | Codex App (Full access) or manual worktree | Skip worktree creation; full finishing flow |
|
|
60
|
+
| No | Yes | Unusual (manual detached HEAD) | Create worktree normally; warn at finish |
|
|
61
|
+
|
|
62
|
+
## Changes
|
|
63
|
+
|
|
64
|
+
### 1. `using-git-worktrees/SKILL.md` — Add Step 0 (~12 lines)
|
|
65
|
+
|
|
66
|
+
New section between "Overview" and "Directory Selection Process":
|
|
67
|
+
|
|
68
|
+
**Step 0: Check if Already in an Isolated Workspace**
|
|
69
|
+
|
|
70
|
+
Run the detection commands. If `GIT_DIR != GIT_COMMON`, skip worktree creation entirely. Instead:
|
|
71
|
+
1. Skip to "Run Project Setup" subsection under Creation Steps — `npm install` etc. is idempotent, worth running for safety
|
|
72
|
+
2. Then "Verify Clean Baseline" — run tests
|
|
73
|
+
3. Report with branch state:
|
|
74
|
+
- On a branch: "Already in an isolated workspace at `<path>` on branch `<name>`. Tests passing. Ready to implement."
|
|
75
|
+
- Detached HEAD: "Already in an isolated workspace at `<path>` (detached HEAD, externally managed). Tests passing. Note: branch creation needed at finish time. Ready to implement."
|
|
76
|
+
|
|
77
|
+
If `GIT_DIR == GIT_COMMON`, proceed with the full worktree creation flow (unchanged).
|
|
78
|
+
|
|
79
|
+
Safety verification (.gitignore check) is skipped when Step 0 fires — irrelevant for externally-created worktrees.
|
|
80
|
+
|
|
81
|
+
Update the Integration section's "Called by" entries. Change the description on each from context-specific text to: "Ensures isolated workspace (creates one or verifies existing)". For example, the `subagent-driven-development` entry changes from "REQUIRED: Set up isolated workspace before starting" to "REQUIRED: Ensures isolated workspace (creates one or verifies existing)".
|
|
82
|
+
|
|
83
|
+
**Sandbox fallback:** If `GIT_DIR == GIT_COMMON` and the skill proceeds to Creation Steps, but `git worktree add -b` fails with a permission error (e.g., Seatbelt sandbox denial), treat this as a late-detected restricted environment. Fall back to the Step 0 "already in workspace" behavior — skip creation, run setup and baseline tests in the current directory, report accordingly.
|
|
84
|
+
|
|
85
|
+
After reporting in Step 0, STOP. Do not continue to Directory Selection or Creation Steps.
|
|
86
|
+
|
|
87
|
+
**Everything else unchanged:** Directory Selection, Safety Verification, Creation Steps, Project Setup, Baseline Tests, Quick Reference, Common Mistakes, Red Flags.
|
|
88
|
+
|
|
89
|
+
### 2. `finishing-a-development-branch/SKILL.md` — Add Step 1.5 + cleanup guard (~20 lines)
|
|
90
|
+
|
|
91
|
+
**Step 1.5: Detect Environment** (after Step 1 "Verify Tests", before Step 2 "Determine Base Branch")
|
|
92
|
+
|
|
93
|
+
Run the detection commands. Three paths:
|
|
94
|
+
|
|
95
|
+
- **Path A** skips Steps 2 and 3 entirely (no base branch or options needed).
|
|
96
|
+
- **Paths B and C** proceed through Step 2 (Determine Base Branch) and Step 3 (Present Options) as normal.
|
|
97
|
+
|
|
98
|
+
**Path A — Externally managed worktree + detached HEAD** (`GIT_DIR != GIT_COMMON` AND `BRANCH` empty):
|
|
99
|
+
|
|
100
|
+
First, ensure all work is staged and committed (`git add` + `git commit`). The Codex App's finishing controls operate on committed work.
|
|
101
|
+
|
|
102
|
+
Then present this to the user (do NOT present the 4-option menu):
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
Implementation complete. All tests passing.
|
|
106
|
+
Current HEAD: <full-commit-sha>
|
|
107
|
+
|
|
108
|
+
This workspace is externally managed (detached HEAD).
|
|
109
|
+
I cannot create branches, push, or open PRs from here.
|
|
110
|
+
|
|
111
|
+
⚠ These commits are on a detached HEAD. If you do not create a branch,
|
|
112
|
+
they may be lost when this workspace is cleaned up.
|
|
113
|
+
|
|
114
|
+
If your host application provides these controls:
|
|
115
|
+
- "Create branch" — to name a branch, then commit/push/PR
|
|
116
|
+
- "Hand off to local" — to move changes to your local checkout
|
|
117
|
+
|
|
118
|
+
Suggested branch name: <ticket-id/short-description>
|
|
119
|
+
Suggested commit message: <summary-of-work>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Branch name derivation: use the ticket ID if available (e.g., `pri-823/codex-compat`), otherwise slugify the first 5 words of the plan title, otherwise omit the suggestion. Avoid including sensitive content (vulnerability descriptions, customer names) in branch names.
|
|
123
|
+
|
|
124
|
+
Skip to Step 5 (cleanup is a no-op for externally managed worktrees).
|
|
125
|
+
|
|
126
|
+
**Path B — Externally managed worktree + named branch** (`GIT_DIR != GIT_COMMON` AND `BRANCH` exists):
|
|
127
|
+
|
|
128
|
+
Present the 4-option menu as normal. (The Step 5 cleanup guard will re-detect the externally managed state independently.)
|
|
129
|
+
|
|
130
|
+
**Path C — Normal environment** (`GIT_DIR == GIT_COMMON`):
|
|
131
|
+
|
|
132
|
+
Present the 4-option menu as today (unchanged).
|
|
133
|
+
|
|
134
|
+
**Step 5 cleanup guard:**
|
|
135
|
+
|
|
136
|
+
Re-run the `GIT_DIR` vs `GIT_COMMON` detection at cleanup time (do not rely on earlier skill output — the finishing skill may run in a different session). If `GIT_DIR != GIT_COMMON`, skip `git worktree remove` — the host environment owns this workspace.
|
|
137
|
+
|
|
138
|
+
Otherwise, check and remove as today. Note: the existing Step 5 text says "For Options 1, 2, 4" but the Quick Reference table and Common Mistakes section say "Options 1 & 4 only." The new guard is added before this existing logic and does not change which options trigger cleanup.
|
|
139
|
+
|
|
140
|
+
**Everything else unchanged:** Options 1-4 logic, Quick Reference, Common Mistakes, Red Flags.
|
|
141
|
+
|
|
142
|
+
### 3. `subagent-driven-development/SKILL.md` and `executing-plans/SKILL.md` — 1 line edit each
|
|
143
|
+
|
|
144
|
+
Both skills have an identical Integration section line. Change from:
|
|
145
|
+
```
|
|
146
|
+
- superpowers:using-git-worktrees - REQUIRED: Set up isolated workspace before starting
|
|
147
|
+
```
|
|
148
|
+
To:
|
|
149
|
+
```
|
|
150
|
+
- superpowers:using-git-worktrees - REQUIRED: Ensures isolated workspace (creates one or verifies existing)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Everything else unchanged:** Dispatch/review loop, prompt templates, model selection, status handling, red flags.
|
|
154
|
+
|
|
155
|
+
### 4. `codex-tools.md` — Add environment detection docs (~15 lines)
|
|
156
|
+
|
|
157
|
+
Two new sections at the end:
|
|
158
|
+
|
|
159
|
+
**Environment Detection:**
|
|
160
|
+
|
|
161
|
+
```markdown
|
|
162
|
+
## Environment Detection
|
|
163
|
+
|
|
164
|
+
Skills that create worktrees or finish branches should detect their
|
|
165
|
+
environment with read-only git commands before proceeding:
|
|
166
|
+
|
|
167
|
+
\```bash
|
|
168
|
+
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
|
|
169
|
+
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
|
|
170
|
+
BRANCH=$(git branch --show-current)
|
|
171
|
+
\```
|
|
172
|
+
|
|
173
|
+
- `GIT_DIR != GIT_COMMON` → already in a linked worktree (skip creation)
|
|
174
|
+
- `BRANCH` empty → detached HEAD (cannot branch/push/PR from sandbox)
|
|
175
|
+
|
|
176
|
+
See `using-git-worktrees` Step 0 and `finishing-a-development-branch`
|
|
177
|
+
Step 1.5 for how each skill uses these signals.
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Codex App Finishing:**
|
|
181
|
+
|
|
182
|
+
```markdown
|
|
183
|
+
## Codex App Finishing
|
|
184
|
+
|
|
185
|
+
When the sandbox blocks branch/push operations (detached HEAD in an
|
|
186
|
+
externally managed worktree), the agent commits all work and informs
|
|
187
|
+
the user to use the App's native controls:
|
|
188
|
+
|
|
189
|
+
- **"Create branch"** — names the branch, then commit/push/PR via App UI
|
|
190
|
+
- **"Hand off to local"** — transfers work to the user's local checkout
|
|
191
|
+
|
|
192
|
+
The agent can still run tests, stage files, and output suggested branch
|
|
193
|
+
names, commit messages, and PR descriptions for the user to copy.
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## What Does NOT Change
|
|
197
|
+
|
|
198
|
+
- `implementer-prompt.md`, `spec-reviewer-prompt.md`, `code-quality-reviewer-prompt.md` — subagent prompts untouched
|
|
199
|
+
- `executing-plans/SKILL.md` — only the 1-line Integration description changes (same as `subagent-driven-development`); all runtime behavior is unchanged
|
|
200
|
+
- `dispatching-parallel-agents/SKILL.md` — no worktree or finishing operations
|
|
201
|
+
- `.codex/INSTALL.md` — installation process unchanged
|
|
202
|
+
- The 4-option finishing menu — preserved exactly for Claude Code and Codex CLI
|
|
203
|
+
- The full worktree creation flow — preserved exactly for non-worktree environments
|
|
204
|
+
- Subagent dispatch/review/iterate loop — unchanged (filesystem sharing confirmed)
|
|
205
|
+
|
|
206
|
+
## Scope Summary
|
|
207
|
+
|
|
208
|
+
| File | Change |
|
|
209
|
+
|---|---|
|
|
210
|
+
| `skills/using-git-worktrees/SKILL.md` | +12 lines (Step 0) |
|
|
211
|
+
| `skills/finishing-a-development-branch/SKILL.md` | +20 lines (Step 1.5 + cleanup guard) |
|
|
212
|
+
| `skills/subagent-driven-development/SKILL.md` | 1 line edit |
|
|
213
|
+
| `skills/executing-plans/SKILL.md` | 1 line edit |
|
|
214
|
+
| `skills/using-superpowers/references/codex-tools.md` | +15 lines |
|
|
215
|
+
|
|
216
|
+
~50 lines added/changed across 5 files. Zero new files. Zero breaking changes.
|
|
217
|
+
|
|
218
|
+
## Future Considerations
|
|
219
|
+
|
|
220
|
+
If a third skill needs the same detection pattern, extract it into a shared `references/environment-detection.md` file (Approach B). Not needed now — only 2 skills use it.
|
|
221
|
+
|
|
222
|
+
## Test Plan
|
|
223
|
+
|
|
224
|
+
### Automated (run in Claude Code after implementation)
|
|
225
|
+
|
|
226
|
+
1. Normal repo detection — assert IN_LINKED_WORKTREE=false
|
|
227
|
+
2. Linked worktree detection — `git worktree add` test worktree, assert IN_LINKED_WORKTREE=true
|
|
228
|
+
3. Detached HEAD detection — `git checkout --detach`, assert ON_DETACHED_HEAD=true
|
|
229
|
+
4. Finishing skill handoff output — verify handoff message (not 4-option menu) in restricted environment
|
|
230
|
+
5. **Step 5 cleanup guard** — create a linked worktree (`git worktree add /tmp/test-cleanup -b test-cleanup`), `cd` into it, run the Step 5 cleanup detection (`GIT_DIR` vs `GIT_COMMON`), assert it would NOT call `git worktree remove`. Then `cd` back to main repo, run the same detection, assert it WOULD call `git worktree remove`. Clean up test worktree afterward.
|
|
231
|
+
|
|
232
|
+
### Manual Codex App Tests (5 tests)
|
|
233
|
+
|
|
234
|
+
1. Detection in Worktree thread (workspace-write) — verify GIT_DIR != GIT_COMMON, empty branch
|
|
235
|
+
2. Detection in Worktree thread (Full access) — same detection, different sandbox behavior
|
|
236
|
+
3. Finishing skill handoff format — verify agent emits handoff payload, not 4-option menu
|
|
237
|
+
4. Full lifecycle — detection → commit → finishing detection → correct behavior → cleanup
|
|
238
|
+
5. **Sandbox fallback in Local thread** — Start a Codex App **Local thread** (workspace-write sandbox). Prompt: "Use the superpowers skill `using-git-worktrees` to set up an isolated workspace for implementing a small change." Pre-check: `git checkout -b test-sandbox-check` should fail with `Operation not permitted`. Expected: the skill detects `GIT_DIR == GIT_COMMON` (normal repo), attempts `git worktree add -b`, hits Seatbelt denial, falls back to Step 0 "already in workspace" behavior — runs setup, baseline tests, reports ready from current directory. Pass: agent recovers gracefully without cryptic error messages. Fail: agent prints raw Seatbelt error, retries, or gives up with confusing output.
|
|
239
|
+
|
|
240
|
+
### Regression
|
|
241
|
+
|
|
242
|
+
- Existing Claude Code skill-triggering tests still pass
|
|
243
|
+
- Existing subagent-driven-development integration tests still pass
|
|
244
|
+
- Normal Claude Code session: full worktree creation + 4-option finishing still works
|