@agents-inc/cli 0.32.1
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/CHANGELOG.md +462 -0
- package/LICENSE +21 -0
- package/README.md +179 -0
- package/config/skills-matrix.yaml +926 -0
- package/config/stacks.yaml +2186 -0
- package/dist/chunk-3ZOIOVKT.js +365 -0
- package/dist/chunk-3ZOIOVKT.js.map +1 -0
- package/dist/chunk-4RAY5AOI.js +78 -0
- package/dist/chunk-4RAY5AOI.js.map +1 -0
- package/dist/chunk-5PIKNCZX.js +234 -0
- package/dist/chunk-5PIKNCZX.js.map +1 -0
- package/dist/chunk-66UDJBF6.js +96 -0
- package/dist/chunk-66UDJBF6.js.map +1 -0
- package/dist/chunk-7SOPVGDV.js +24 -0
- package/dist/chunk-7SOPVGDV.js.map +1 -0
- package/dist/chunk-A27LOC4Z.js +95 -0
- package/dist/chunk-A27LOC4Z.js.map +1 -0
- package/dist/chunk-B2UBHA66.js +301 -0
- package/dist/chunk-B2UBHA66.js.map +1 -0
- package/dist/chunk-BZN2Z5P7.js +882 -0
- package/dist/chunk-BZN2Z5P7.js.map +1 -0
- package/dist/chunk-BZQBJP34.js +186 -0
- package/dist/chunk-BZQBJP34.js.map +1 -0
- package/dist/chunk-DC5AK3LW.js +105 -0
- package/dist/chunk-DC5AK3LW.js.map +1 -0
- package/dist/chunk-DHET7RCE.js +50 -0
- package/dist/chunk-DHET7RCE.js.map +1 -0
- package/dist/chunk-EMJ2ZKS7.js +346 -0
- package/dist/chunk-EMJ2ZKS7.js.map +1 -0
- package/dist/chunk-FJQRVFMB.js +48 -0
- package/dist/chunk-FJQRVFMB.js.map +1 -0
- package/dist/chunk-FZGYSLJL.js +85 -0
- package/dist/chunk-FZGYSLJL.js.map +1 -0
- package/dist/chunk-H566H3MQ.js +87 -0
- package/dist/chunk-H566H3MQ.js.map +1 -0
- package/dist/chunk-IYG2LAIM.js +90 -0
- package/dist/chunk-IYG2LAIM.js.map +1 -0
- package/dist/chunk-IZZ4IIEG.js +29 -0
- package/dist/chunk-IZZ4IIEG.js.map +1 -0
- package/dist/chunk-JMVWYAHT.js +63 -0
- package/dist/chunk-JMVWYAHT.js.map +1 -0
- package/dist/chunk-LAPCUV4D.js +191 -0
- package/dist/chunk-LAPCUV4D.js.map +1 -0
- package/dist/chunk-LGUI3PMO.js +109 -0
- package/dist/chunk-LGUI3PMO.js.map +1 -0
- package/dist/chunk-MM7NK5N2.js +4542 -0
- package/dist/chunk-MM7NK5N2.js.map +1 -0
- package/dist/chunk-N6S7ZRIL.js +31 -0
- package/dist/chunk-N6S7ZRIL.js.map +1 -0
- package/dist/chunk-O4D67NN7.js +24 -0
- package/dist/chunk-O4D67NN7.js.map +1 -0
- package/dist/chunk-ODUOU55D.js +56 -0
- package/dist/chunk-ODUOU55D.js.map +1 -0
- package/dist/chunk-OGJIZ6QH.js +497 -0
- package/dist/chunk-OGJIZ6QH.js.map +1 -0
- package/dist/chunk-OMV7TLWD.js +340 -0
- package/dist/chunk-OMV7TLWD.js.map +1 -0
- package/dist/chunk-PBEHPQLK.js +146 -0
- package/dist/chunk-PBEHPQLK.js.map +1 -0
- package/dist/chunk-QPTOIZAT.js +32 -0
- package/dist/chunk-QPTOIZAT.js.map +1 -0
- package/dist/chunk-R3XFQKPG.js +111 -0
- package/dist/chunk-R3XFQKPG.js.map +1 -0
- package/dist/chunk-R74PZWQS.js +69 -0
- package/dist/chunk-R74PZWQS.js.map +1 -0
- package/dist/chunk-SO22IQPY.js +45 -0
- package/dist/chunk-SO22IQPY.js.map +1 -0
- package/dist/chunk-T4EXUIBY.js +19 -0
- package/dist/chunk-T4EXUIBY.js.map +1 -0
- package/dist/chunk-U3IGFMCY.js +31 -0
- package/dist/chunk-U3IGFMCY.js.map +1 -0
- package/dist/chunk-UICL22RT.js +318 -0
- package/dist/chunk-UICL22RT.js.map +1 -0
- package/dist/chunk-UX2H2K2G.js +183 -0
- package/dist/chunk-UX2H2K2G.js.map +1 -0
- package/dist/chunk-W2ZSCZ2U.js +93 -0
- package/dist/chunk-W2ZSCZ2U.js.map +1 -0
- package/dist/chunk-WEUVWHMA.js +189 -0
- package/dist/chunk-WEUVWHMA.js.map +1 -0
- package/dist/chunk-XY3XDVMI.js +15599 -0
- package/dist/chunk-XY3XDVMI.js.map +1 -0
- package/dist/chunk-YND42IXK.js +233 -0
- package/dist/chunk-YND42IXK.js.map +1 -0
- package/dist/chunk-YZTWZVGX.js +41 -0
- package/dist/chunk-YZTWZVGX.js.map +1 -0
- package/dist/chunk-Z4TWOP3H.js +81 -0
- package/dist/chunk-Z4TWOP3H.js.map +1 -0
- package/dist/cli/defaults/agent-mappings.yaml +271 -0
- package/dist/commands/build/marketplace.js +252 -0
- package/dist/commands/build/marketplace.js.map +1 -0
- package/dist/commands/build/plugins.js +114 -0
- package/dist/commands/build/plugins.js.map +1 -0
- package/dist/commands/build/stack.js +153 -0
- package/dist/commands/build/stack.js.map +1 -0
- package/dist/commands/compile.js +354 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/config/get.js +61 -0
- package/dist/commands/config/get.js.map +1 -0
- package/dist/commands/config/index.js +23 -0
- package/dist/commands/config/index.js.map +1 -0
- package/dist/commands/config/path.js +34 -0
- package/dist/commands/config/path.js.map +1 -0
- package/dist/commands/config/set-project.js +61 -0
- package/dist/commands/config/set-project.js.map +1 -0
- package/dist/commands/config/show.js +14 -0
- package/dist/commands/config/show.js.map +1 -0
- package/dist/commands/config/unset-project.js +57 -0
- package/dist/commands/config/unset-project.js.map +1 -0
- package/dist/commands/diff.js +742 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/doctor.js +370 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/edit.js +301 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/eject.js +262 -0
- package/dist/commands/eject.js.map +1 -0
- package/dist/commands/import/skill.js +361 -0
- package/dist/commands/import/skill.js.map +1 -0
- package/dist/commands/info.js +217 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.js +443 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.js +49 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/new/agent.js +224 -0
- package/dist/commands/new/agent.js.map +1 -0
- package/dist/commands/new/skill.js +199 -0
- package/dist/commands/new/skill.js.map +1 -0
- package/dist/commands/outdated.js +176 -0
- package/dist/commands/outdated.js.map +1 -0
- package/dist/commands/search.js +288 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/uninstall.js +302 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.js +304 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.js +389 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/version/bump.js +79 -0
- package/dist/commands/version/bump.js.map +1 -0
- package/dist/commands/version/index.js +54 -0
- package/dist/commands/version/index.js.map +1 -0
- package/dist/commands/version/set.js +86 -0
- package/dist/commands/version/set.js.map +1 -0
- package/dist/commands/version/show.js +54 -0
- package/dist/commands/version/show.js.map +1 -0
- package/dist/components/common/confirm.js +9 -0
- package/dist/components/common/confirm.js.map +1 -0
- package/dist/components/common/confirm.test.js +203 -0
- package/dist/components/common/confirm.test.js.map +1 -0
- package/dist/components/common/message.js +20 -0
- package/dist/components/common/message.js.map +1 -0
- package/dist/components/common/spinner.js +14 -0
- package/dist/components/common/spinner.js.map +1 -0
- package/dist/components/skill-search/skill-search.js +12 -0
- package/dist/components/skill-search/skill-search.js.map +1 -0
- package/dist/components/wizard/category-grid.js +11 -0
- package/dist/components/wizard/category-grid.js.map +1 -0
- package/dist/components/wizard/category-grid.test.js +997 -0
- package/dist/components/wizard/category-grid.test.js.map +1 -0
- package/dist/components/wizard/domain-selection.js +14 -0
- package/dist/components/wizard/domain-selection.js.map +1 -0
- package/dist/components/wizard/help-modal.js +10 -0
- package/dist/components/wizard/help-modal.js.map +1 -0
- package/dist/components/wizard/menu-item.js +10 -0
- package/dist/components/wizard/menu-item.js.map +1 -0
- package/dist/components/wizard/search-modal.js +11 -0
- package/dist/components/wizard/search-modal.js.map +1 -0
- package/dist/components/wizard/search-modal.test.js +218 -0
- package/dist/components/wizard/search-modal.test.js.map +1 -0
- package/dist/components/wizard/section-progress.js +10 -0
- package/dist/components/wizard/section-progress.js.map +1 -0
- package/dist/components/wizard/section-progress.test.js +192 -0
- package/dist/components/wizard/section-progress.test.js.map +1 -0
- package/dist/components/wizard/source-grid.js +14 -0
- package/dist/components/wizard/source-grid.js.map +1 -0
- package/dist/components/wizard/source-grid.test.js +504 -0
- package/dist/components/wizard/source-grid.test.js.map +1 -0
- package/dist/components/wizard/stack-selection.js +17 -0
- package/dist/components/wizard/stack-selection.js.map +1 -0
- package/dist/components/wizard/step-build.js +17 -0
- package/dist/components/wizard/step-build.js.map +1 -0
- package/dist/components/wizard/step-build.test.js +600 -0
- package/dist/components/wizard/step-build.test.js.map +1 -0
- package/dist/components/wizard/step-confirm.js +12 -0
- package/dist/components/wizard/step-confirm.js.map +1 -0
- package/dist/components/wizard/step-confirm.test.js +366 -0
- package/dist/components/wizard/step-confirm.test.js.map +1 -0
- package/dist/components/wizard/step-refine.js +10 -0
- package/dist/components/wizard/step-refine.js.map +1 -0
- package/dist/components/wizard/step-refine.test.js +237 -0
- package/dist/components/wizard/step-refine.test.js.map +1 -0
- package/dist/components/wizard/step-settings.js +17 -0
- package/dist/components/wizard/step-settings.js.map +1 -0
- package/dist/components/wizard/step-settings.test.js +243 -0
- package/dist/components/wizard/step-settings.test.js.map +1 -0
- package/dist/components/wizard/step-sources.js +20 -0
- package/dist/components/wizard/step-sources.js.map +1 -0
- package/dist/components/wizard/step-sources.test.js +294 -0
- package/dist/components/wizard/step-sources.test.js.map +1 -0
- package/dist/components/wizard/step-stack.js +19 -0
- package/dist/components/wizard/step-stack.js.map +1 -0
- package/dist/components/wizard/step-stack.test.js +357 -0
- package/dist/components/wizard/step-stack.test.js.map +1 -0
- package/dist/components/wizard/view-title.js +10 -0
- package/dist/components/wizard/view-title.js.map +1 -0
- package/dist/components/wizard/wizard-layout.js +16 -0
- package/dist/components/wizard/wizard-layout.js.map +1 -0
- package/dist/components/wizard/wizard-tabs.js +14 -0
- package/dist/components/wizard/wizard-tabs.js.map +1 -0
- package/dist/components/wizard/wizard-tabs.test.js +294 -0
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -0
- package/dist/components/wizard/wizard.js +35 -0
- package/dist/components/wizard/wizard.js.map +1 -0
- package/dist/config/skills-matrix.yaml +926 -0
- package/dist/config/stacks.yaml +2186 -0
- package/dist/hooks/init.js +40 -0
- package/dist/hooks/init.js.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/magic-string.es-RGXYGAW3.js +1316 -0
- package/dist/magic-string.es-RGXYGAW3.js.map +1 -0
- package/dist/source-manager-SBPPLOQQ.js +16 -0
- package/dist/source-manager-SBPPLOQQ.js.map +1 -0
- package/dist/src/agents/_templates/agent.liquid +140 -0
- package/dist/src/agents/developer/api-developer/agent.yaml +12 -0
- package/dist/src/agents/developer/api-developer/critical-reminders.md +23 -0
- package/dist/src/agents/developer/api-developer/critical-requirements.md +11 -0
- package/dist/src/agents/developer/api-developer/examples.md +72 -0
- package/dist/src/agents/developer/api-developer/intro.md +22 -0
- package/dist/src/agents/developer/api-developer/output-format.md +359 -0
- package/dist/src/agents/developer/api-developer/workflow.md +471 -0
- package/dist/src/agents/developer/cli-developer/agent.yaml +12 -0
- package/dist/src/agents/developer/cli-developer/critical-reminders.md +28 -0
- package/dist/src/agents/developer/cli-developer/critical-requirements.md +15 -0
- package/dist/src/agents/developer/cli-developer/examples.md +68 -0
- package/dist/src/agents/developer/cli-developer/intro.md +23 -0
- package/dist/src/agents/developer/cli-developer/output-format.md +216 -0
- package/dist/src/agents/developer/cli-developer/workflow.md +509 -0
- package/dist/src/agents/developer/web-architecture/agent.yaml +12 -0
- package/dist/src/agents/developer/web-architecture/critical-reminders.md +27 -0
- package/dist/src/agents/developer/web-architecture/critical-requirements.md +35 -0
- package/dist/src/agents/developer/web-architecture/examples.md +187 -0
- package/dist/src/agents/developer/web-architecture/intro.md +35 -0
- package/dist/src/agents/developer/web-architecture/output-format.md +261 -0
- package/dist/src/agents/developer/web-architecture/workflow.md +599 -0
- package/dist/src/agents/developer/web-developer/agent.yaml +12 -0
- package/dist/src/agents/developer/web-developer/critical-reminders.md +17 -0
- package/dist/src/agents/developer/web-developer/critical-requirements.md +15 -0
- package/dist/src/agents/developer/web-developer/examples.md +109 -0
- package/dist/src/agents/developer/web-developer/intro.md +5 -0
- package/dist/src/agents/developer/web-developer/output-format.md +213 -0
- package/dist/src/agents/developer/web-developer/workflow.md +459 -0
- package/dist/src/agents/meta/agent-summoner/agent.yaml +12 -0
- package/dist/src/agents/meta/agent-summoner/critical-reminders.md +31 -0
- package/dist/src/agents/meta/agent-summoner/critical-requirements.md +27 -0
- package/dist/src/agents/meta/agent-summoner/examples.md +176 -0
- package/dist/src/agents/meta/agent-summoner/intro.md +9 -0
- package/dist/src/agents/meta/agent-summoner/output-format.md +115 -0
- package/dist/src/agents/meta/agent-summoner/workflow.md +1540 -0
- package/dist/src/agents/meta/documentor/agent.yaml +11 -0
- package/dist/src/agents/meta/documentor/critical-reminders.md +23 -0
- package/dist/src/agents/meta/documentor/critical-requirements.md +13 -0
- package/dist/src/agents/meta/documentor/examples.md +147 -0
- package/dist/src/agents/meta/documentor/intro.md +11 -0
- package/dist/src/agents/meta/documentor/output-format.md +237 -0
- package/dist/src/agents/meta/documentor/workflow.md +1271 -0
- package/dist/src/agents/meta/skill-summoner/agent.yaml +13 -0
- package/dist/src/agents/meta/skill-summoner/critical-reminders.md +73 -0
- package/dist/src/agents/meta/skill-summoner/critical-requirements.md +62 -0
- package/dist/src/agents/meta/skill-summoner/examples.md +116 -0
- package/dist/src/agents/meta/skill-summoner/intro.md +5 -0
- package/dist/src/agents/meta/skill-summoner/output-format.md +279 -0
- package/dist/src/agents/meta/skill-summoner/workflow.md +1485 -0
- package/dist/src/agents/migration/cli-migrator/agent.yaml +12 -0
- package/dist/src/agents/migration/cli-migrator/anti-patterns.md +158 -0
- package/dist/src/agents/migration/cli-migrator/conversion-mappings.md +63 -0
- package/dist/src/agents/migration/cli-migrator/critical-reminders.md +17 -0
- package/dist/src/agents/migration/cli-migrator/critical-requirements.md +13 -0
- package/dist/src/agents/migration/cli-migrator/intro.md +15 -0
- package/dist/src/agents/migration/cli-migrator/output-format.md +164 -0
- package/dist/src/agents/migration/cli-migrator/workflow.md +230 -0
- package/dist/src/agents/pattern/pattern-scout/agent.yaml +10 -0
- package/dist/src/agents/pattern/pattern-scout/critical-reminders.md +58 -0
- package/dist/src/agents/pattern/pattern-scout/critical-requirements.md +17 -0
- package/dist/src/agents/pattern/pattern-scout/examples.md +93 -0
- package/dist/src/agents/pattern/pattern-scout/intro.md +3 -0
- package/dist/src/agents/pattern/pattern-scout/output-format.md +196 -0
- package/dist/src/agents/pattern/pattern-scout/workflow.md +1901 -0
- package/dist/src/agents/pattern/web-pattern-critique/agent.yaml +12 -0
- package/dist/src/agents/pattern/web-pattern-critique/critical-reminders.md +13 -0
- package/dist/src/agents/pattern/web-pattern-critique/critical-requirements.md +11 -0
- package/dist/src/agents/pattern/web-pattern-critique/examples.md +56 -0
- package/dist/src/agents/pattern/web-pattern-critique/intro.md +5 -0
- package/dist/src/agents/pattern/web-pattern-critique/output-format.md +257 -0
- package/dist/src/agents/pattern/web-pattern-critique/workflow.md +674 -0
- package/dist/src/agents/planning/web-pm/agent.yaml +12 -0
- package/dist/src/agents/planning/web-pm/critical-reminders.md +21 -0
- package/dist/src/agents/planning/web-pm/critical-requirements.md +17 -0
- package/dist/src/agents/planning/web-pm/examples.md +85 -0
- package/dist/src/agents/planning/web-pm/intro.md +3 -0
- package/dist/src/agents/planning/web-pm/output-format.md +228 -0
- package/dist/src/agents/planning/web-pm/workflow.md +393 -0
- package/dist/src/agents/researcher/api-researcher/agent.yaml +10 -0
- package/dist/src/agents/researcher/api-researcher/critical-reminders.md +27 -0
- package/dist/src/agents/researcher/api-researcher/critical-requirements.md +13 -0
- package/dist/src/agents/researcher/api-researcher/examples.md +116 -0
- package/dist/src/agents/researcher/api-researcher/intro.md +32 -0
- package/dist/src/agents/researcher/api-researcher/output-format.md +135 -0
- package/dist/src/agents/researcher/api-researcher/workflow.md +261 -0
- package/dist/src/agents/researcher/web-researcher/agent.yaml +10 -0
- package/dist/src/agents/researcher/web-researcher/critical-reminders.md +23 -0
- package/dist/src/agents/researcher/web-researcher/critical-requirements.md +11 -0
- package/dist/src/agents/researcher/web-researcher/examples.md +126 -0
- package/dist/src/agents/researcher/web-researcher/intro.md +31 -0
- package/dist/src/agents/researcher/web-researcher/output-format.md +112 -0
- package/dist/src/agents/researcher/web-researcher/workflow.md +322 -0
- package/dist/src/agents/reviewer/api-reviewer/agent.yaml +12 -0
- package/dist/src/agents/reviewer/api-reviewer/critical-reminders.md +16 -0
- package/dist/src/agents/reviewer/api-reviewer/critical-requirements.md +13 -0
- package/dist/src/agents/reviewer/api-reviewer/examples.md +54 -0
- package/dist/src/agents/reviewer/api-reviewer/intro.md +22 -0
- package/dist/src/agents/reviewer/api-reviewer/output-format.md +288 -0
- package/dist/src/agents/reviewer/api-reviewer/workflow.md +369 -0
- package/dist/src/agents/reviewer/cli-reviewer/agent.yaml +12 -0
- package/dist/src/agents/reviewer/cli-reviewer/critical-reminders.md +17 -0
- package/dist/src/agents/reviewer/cli-reviewer/critical-requirements.md +13 -0
- package/dist/src/agents/reviewer/cli-reviewer/examples.md +83 -0
- package/dist/src/agents/reviewer/cli-reviewer/intro.md +21 -0
- package/dist/src/agents/reviewer/cli-reviewer/output-format.md +330 -0
- package/dist/src/agents/reviewer/cli-reviewer/workflow.md +294 -0
- package/dist/src/agents/reviewer/web-reviewer/agent.yaml +12 -0
- package/dist/src/agents/reviewer/web-reviewer/critical-reminders.md +17 -0
- package/dist/src/agents/reviewer/web-reviewer/critical-requirements.md +11 -0
- package/dist/src/agents/reviewer/web-reviewer/examples.md +79 -0
- package/dist/src/agents/reviewer/web-reviewer/intro.md +20 -0
- package/dist/src/agents/reviewer/web-reviewer/output-format.md +253 -0
- package/dist/src/agents/reviewer/web-reviewer/workflow.md +228 -0
- package/dist/src/agents/tester/cli-tester/agent.yaml +12 -0
- package/dist/src/agents/tester/cli-tester/critical-reminders.md +19 -0
- package/dist/src/agents/tester/cli-tester/critical-requirements.md +17 -0
- package/dist/src/agents/tester/cli-tester/examples.md +80 -0
- package/dist/src/agents/tester/cli-tester/intro.md +19 -0
- package/dist/src/agents/tester/cli-tester/output-format.md +232 -0
- package/dist/src/agents/tester/cli-tester/workflow.md +304 -0
- package/dist/src/agents/tester/web-tester/agent.yaml +12 -0
- package/dist/src/agents/tester/web-tester/critical-reminders.md +15 -0
- package/dist/src/agents/tester/web-tester/critical-requirements.md +11 -0
- package/dist/src/agents/tester/web-tester/examples.md +68 -0
- package/dist/src/agents/tester/web-tester/intro.md +18 -0
- package/dist/src/agents/tester/web-tester/output-format.md +252 -0
- package/dist/src/agents/tester/web-tester/workflow.md +507 -0
- package/dist/stores/wizard-store.js +13 -0
- package/dist/stores/wizard-store.js.map +1 -0
- package/dist/stores/wizard-store.test.js +689 -0
- package/dist/stores/wizard-store.test.js.map +1 -0
- package/package.json +134 -0
- package/src/agents/_templates/agent.liquid +140 -0
- package/src/agents/developer/api-developer/agent.yaml +12 -0
- package/src/agents/developer/api-developer/critical-reminders.md +23 -0
- package/src/agents/developer/api-developer/critical-requirements.md +11 -0
- package/src/agents/developer/api-developer/examples.md +72 -0
- package/src/agents/developer/api-developer/intro.md +22 -0
- package/src/agents/developer/api-developer/output-format.md +359 -0
- package/src/agents/developer/api-developer/workflow.md +471 -0
- package/src/agents/developer/cli-developer/agent.yaml +12 -0
- package/src/agents/developer/cli-developer/critical-reminders.md +28 -0
- package/src/agents/developer/cli-developer/critical-requirements.md +15 -0
- package/src/agents/developer/cli-developer/examples.md +68 -0
- package/src/agents/developer/cli-developer/intro.md +23 -0
- package/src/agents/developer/cli-developer/output-format.md +216 -0
- package/src/agents/developer/cli-developer/workflow.md +509 -0
- package/src/agents/developer/web-architecture/agent.yaml +12 -0
- package/src/agents/developer/web-architecture/critical-reminders.md +27 -0
- package/src/agents/developer/web-architecture/critical-requirements.md +35 -0
- package/src/agents/developer/web-architecture/examples.md +187 -0
- package/src/agents/developer/web-architecture/intro.md +35 -0
- package/src/agents/developer/web-architecture/output-format.md +261 -0
- package/src/agents/developer/web-architecture/workflow.md +599 -0
- package/src/agents/developer/web-developer/agent.yaml +12 -0
- package/src/agents/developer/web-developer/critical-reminders.md +17 -0
- package/src/agents/developer/web-developer/critical-requirements.md +15 -0
- package/src/agents/developer/web-developer/examples.md +109 -0
- package/src/agents/developer/web-developer/intro.md +5 -0
- package/src/agents/developer/web-developer/output-format.md +213 -0
- package/src/agents/developer/web-developer/workflow.md +459 -0
- package/src/agents/meta/agent-summoner/agent.yaml +12 -0
- package/src/agents/meta/agent-summoner/critical-reminders.md +31 -0
- package/src/agents/meta/agent-summoner/critical-requirements.md +27 -0
- package/src/agents/meta/agent-summoner/examples.md +176 -0
- package/src/agents/meta/agent-summoner/intro.md +9 -0
- package/src/agents/meta/agent-summoner/output-format.md +115 -0
- package/src/agents/meta/agent-summoner/workflow.md +1540 -0
- package/src/agents/meta/documentor/agent.yaml +11 -0
- package/src/agents/meta/documentor/critical-reminders.md +23 -0
- package/src/agents/meta/documentor/critical-requirements.md +13 -0
- package/src/agents/meta/documentor/examples.md +147 -0
- package/src/agents/meta/documentor/intro.md +11 -0
- package/src/agents/meta/documentor/output-format.md +237 -0
- package/src/agents/meta/documentor/workflow.md +1271 -0
- package/src/agents/meta/skill-summoner/agent.yaml +13 -0
- package/src/agents/meta/skill-summoner/critical-reminders.md +73 -0
- package/src/agents/meta/skill-summoner/critical-requirements.md +62 -0
- package/src/agents/meta/skill-summoner/examples.md +116 -0
- package/src/agents/meta/skill-summoner/intro.md +5 -0
- package/src/agents/meta/skill-summoner/output-format.md +279 -0
- package/src/agents/meta/skill-summoner/workflow.md +1485 -0
- package/src/agents/migration/cli-migrator/agent.yaml +12 -0
- package/src/agents/migration/cli-migrator/anti-patterns.md +158 -0
- package/src/agents/migration/cli-migrator/conversion-mappings.md +63 -0
- package/src/agents/migration/cli-migrator/critical-reminders.md +17 -0
- package/src/agents/migration/cli-migrator/critical-requirements.md +13 -0
- package/src/agents/migration/cli-migrator/intro.md +15 -0
- package/src/agents/migration/cli-migrator/output-format.md +164 -0
- package/src/agents/migration/cli-migrator/workflow.md +230 -0
- package/src/agents/pattern/pattern-scout/agent.yaml +10 -0
- package/src/agents/pattern/pattern-scout/critical-reminders.md +58 -0
- package/src/agents/pattern/pattern-scout/critical-requirements.md +17 -0
- package/src/agents/pattern/pattern-scout/examples.md +93 -0
- package/src/agents/pattern/pattern-scout/intro.md +3 -0
- package/src/agents/pattern/pattern-scout/output-format.md +196 -0
- package/src/agents/pattern/pattern-scout/workflow.md +1901 -0
- package/src/agents/pattern/web-pattern-critique/agent.yaml +12 -0
- package/src/agents/pattern/web-pattern-critique/critical-reminders.md +13 -0
- package/src/agents/pattern/web-pattern-critique/critical-requirements.md +11 -0
- package/src/agents/pattern/web-pattern-critique/examples.md +56 -0
- package/src/agents/pattern/web-pattern-critique/intro.md +5 -0
- package/src/agents/pattern/web-pattern-critique/output-format.md +257 -0
- package/src/agents/pattern/web-pattern-critique/workflow.md +674 -0
- package/src/agents/planning/web-pm/agent.yaml +12 -0
- package/src/agents/planning/web-pm/critical-reminders.md +21 -0
- package/src/agents/planning/web-pm/critical-requirements.md +17 -0
- package/src/agents/planning/web-pm/examples.md +85 -0
- package/src/agents/planning/web-pm/intro.md +3 -0
- package/src/agents/planning/web-pm/output-format.md +228 -0
- package/src/agents/planning/web-pm/workflow.md +393 -0
- package/src/agents/researcher/api-researcher/agent.yaml +10 -0
- package/src/agents/researcher/api-researcher/critical-reminders.md +27 -0
- package/src/agents/researcher/api-researcher/critical-requirements.md +13 -0
- package/src/agents/researcher/api-researcher/examples.md +116 -0
- package/src/agents/researcher/api-researcher/intro.md +32 -0
- package/src/agents/researcher/api-researcher/output-format.md +135 -0
- package/src/agents/researcher/api-researcher/workflow.md +261 -0
- package/src/agents/researcher/web-researcher/agent.yaml +10 -0
- package/src/agents/researcher/web-researcher/critical-reminders.md +23 -0
- package/src/agents/researcher/web-researcher/critical-requirements.md +11 -0
- package/src/agents/researcher/web-researcher/examples.md +126 -0
- package/src/agents/researcher/web-researcher/intro.md +31 -0
- package/src/agents/researcher/web-researcher/output-format.md +112 -0
- package/src/agents/researcher/web-researcher/workflow.md +322 -0
- package/src/agents/reviewer/api-reviewer/agent.yaml +12 -0
- package/src/agents/reviewer/api-reviewer/critical-reminders.md +16 -0
- package/src/agents/reviewer/api-reviewer/critical-requirements.md +13 -0
- package/src/agents/reviewer/api-reviewer/examples.md +54 -0
- package/src/agents/reviewer/api-reviewer/intro.md +22 -0
- package/src/agents/reviewer/api-reviewer/output-format.md +288 -0
- package/src/agents/reviewer/api-reviewer/workflow.md +369 -0
- package/src/agents/reviewer/cli-reviewer/agent.yaml +12 -0
- package/src/agents/reviewer/cli-reviewer/critical-reminders.md +17 -0
- package/src/agents/reviewer/cli-reviewer/critical-requirements.md +13 -0
- package/src/agents/reviewer/cli-reviewer/examples.md +83 -0
- package/src/agents/reviewer/cli-reviewer/intro.md +21 -0
- package/src/agents/reviewer/cli-reviewer/output-format.md +330 -0
- package/src/agents/reviewer/cli-reviewer/workflow.md +294 -0
- package/src/agents/reviewer/web-reviewer/agent.yaml +12 -0
- package/src/agents/reviewer/web-reviewer/critical-reminders.md +17 -0
- package/src/agents/reviewer/web-reviewer/critical-requirements.md +11 -0
- package/src/agents/reviewer/web-reviewer/examples.md +79 -0
- package/src/agents/reviewer/web-reviewer/intro.md +20 -0
- package/src/agents/reviewer/web-reviewer/output-format.md +253 -0
- package/src/agents/reviewer/web-reviewer/workflow.md +228 -0
- package/src/agents/tester/cli-tester/agent.yaml +12 -0
- package/src/agents/tester/cli-tester/critical-reminders.md +19 -0
- package/src/agents/tester/cli-tester/critical-requirements.md +17 -0
- package/src/agents/tester/cli-tester/examples.md +80 -0
- package/src/agents/tester/cli-tester/intro.md +19 -0
- package/src/agents/tester/cli-tester/output-format.md +232 -0
- package/src/agents/tester/cli-tester/workflow.md +304 -0
- package/src/agents/tester/web-tester/agent.yaml +12 -0
- package/src/agents/tester/web-tester/critical-reminders.md +15 -0
- package/src/agents/tester/web-tester/critical-requirements.md +11 -0
- package/src/agents/tester/web-tester/examples.md +68 -0
- package/src/agents/tester/web-tester/intro.md +18 -0
- package/src/agents/tester/web-tester/output-format.md +252 -0
- package/src/agents/tester/web-tester/workflow.md +507 -0
- package/src/schemas/agent-frontmatter.schema.json +84 -0
- package/src/schemas/agent.schema.json +93 -0
- package/src/schemas/hooks.schema.json +47 -0
- package/src/schemas/marketplace.schema.json +119 -0
- package/src/schemas/metadata.schema.json +113 -0
- package/src/schemas/plugin.schema.json +130 -0
- package/src/schemas/project-config.schema.json +125 -0
- package/src/schemas/project-source-config.schema.json +81 -0
- package/src/schemas/skill-frontmatter.schema.json +42 -0
- package/src/schemas/skills-matrix.schema.json +467 -0
- package/src/schemas/stack.schema.json +191 -0
- package/src/schemas/stacks.schema.json +111 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
cliTheme
|
|
4
|
+
} from "./chunk-Z4TWOP3H.js";
|
|
5
|
+
import {
|
|
6
|
+
useTextInput
|
|
7
|
+
} from "./chunk-U3IGFMCY.js";
|
|
8
|
+
import {
|
|
9
|
+
CLI_COLORS,
|
|
10
|
+
UI_LAYOUT,
|
|
11
|
+
UI_SYMBOLS
|
|
12
|
+
} from "./chunk-LAPCUV4D.js";
|
|
13
|
+
import {
|
|
14
|
+
init_esm_shims
|
|
15
|
+
} from "./chunk-DHET7RCE.js";
|
|
16
|
+
|
|
17
|
+
// src/cli/components/skill-search/skill-search.tsx
|
|
18
|
+
init_esm_shims();
|
|
19
|
+
import { useState as useState2, useCallback as useCallback2 } from "react";
|
|
20
|
+
import { Box, Text, useApp, useInput } from "ink";
|
|
21
|
+
import { ThemeProvider } from "@inkjs/ui";
|
|
22
|
+
|
|
23
|
+
// src/cli/components/hooks/use-filtered-results.ts
|
|
24
|
+
init_esm_shims();
|
|
25
|
+
import { useState, useMemo, useEffect, useCallback, useRef } from "react";
|
|
26
|
+
function useFilteredResults({
|
|
27
|
+
items,
|
|
28
|
+
query,
|
|
29
|
+
filterFn,
|
|
30
|
+
maxVisible
|
|
31
|
+
}) {
|
|
32
|
+
const [focusedIndex, setFocusedIndex] = useState(0);
|
|
33
|
+
const [scrollOffset, setScrollOffset] = useState(0);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
setFocusedIndex(0);
|
|
36
|
+
setScrollOffset(0);
|
|
37
|
+
}, [query]);
|
|
38
|
+
const filteredResults = useMemo(() => {
|
|
39
|
+
return items.filter((item) => filterFn(item, query));
|
|
40
|
+
}, [items, query, filterFn]);
|
|
41
|
+
const safeFocusedIndex = Math.min(focusedIndex, Math.max(0, filteredResults.length - 1));
|
|
42
|
+
const focusedItem = filteredResults[safeFocusedIndex];
|
|
43
|
+
const safeFocusedIndexRef = useRef(safeFocusedIndex);
|
|
44
|
+
const scrollOffsetRef = useRef(scrollOffset);
|
|
45
|
+
const resultCountRef = useRef(filteredResults.length);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
safeFocusedIndexRef.current = safeFocusedIndex;
|
|
48
|
+
}, [safeFocusedIndex]);
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
scrollOffsetRef.current = scrollOffset;
|
|
51
|
+
}, [scrollOffset]);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
resultCountRef.current = filteredResults.length;
|
|
54
|
+
}, [filteredResults.length]);
|
|
55
|
+
const moveUp = useCallback(() => {
|
|
56
|
+
const current = safeFocusedIndexRef.current;
|
|
57
|
+
if (current <= 0) return;
|
|
58
|
+
const newIndex = current - 1;
|
|
59
|
+
setFocusedIndex(newIndex);
|
|
60
|
+
if (newIndex < scrollOffsetRef.current) {
|
|
61
|
+
setScrollOffset(newIndex);
|
|
62
|
+
}
|
|
63
|
+
}, []);
|
|
64
|
+
const moveDown = useCallback(() => {
|
|
65
|
+
const current = safeFocusedIndexRef.current;
|
|
66
|
+
if (current >= resultCountRef.current - 1) return;
|
|
67
|
+
const newIndex = current + 1;
|
|
68
|
+
setFocusedIndex(newIndex);
|
|
69
|
+
if (newIndex >= scrollOffsetRef.current + maxVisible) {
|
|
70
|
+
setScrollOffset(newIndex - maxVisible + 1);
|
|
71
|
+
}
|
|
72
|
+
}, [maxVisible]);
|
|
73
|
+
return {
|
|
74
|
+
filteredResults,
|
|
75
|
+
safeFocusedIndex,
|
|
76
|
+
focusedItem,
|
|
77
|
+
scrollOffset,
|
|
78
|
+
moveUp,
|
|
79
|
+
moveDown
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// src/cli/components/skill-search/skill-search.tsx
|
|
84
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
85
|
+
var {
|
|
86
|
+
MAX_VISIBLE_RESULTS,
|
|
87
|
+
DESCRIPTION_WIDTH,
|
|
88
|
+
COPIED_MESSAGE_TIMEOUT_MS,
|
|
89
|
+
FALLBACK_MESSAGE_TIMEOUT_MS
|
|
90
|
+
} = UI_LAYOUT;
|
|
91
|
+
var { CHECKBOX_CHECKED, CHECKBOX_UNCHECKED } = UI_SYMBOLS;
|
|
92
|
+
function matchesQuery(skill, query) {
|
|
93
|
+
if (!query.trim()) return true;
|
|
94
|
+
const lowerQuery = query.toLowerCase();
|
|
95
|
+
if (skill.id.toLowerCase().includes(lowerQuery)) return true;
|
|
96
|
+
if (skill.displayName?.toLowerCase().includes(lowerQuery)) return true;
|
|
97
|
+
if (skill.description.toLowerCase().includes(lowerQuery)) return true;
|
|
98
|
+
if (skill.category.toLowerCase().includes(lowerQuery)) return true;
|
|
99
|
+
if (skill.tags.some((tag) => tag.toLowerCase().includes(lowerQuery))) return true;
|
|
100
|
+
return skill.sourceName.toLowerCase().includes(lowerQuery);
|
|
101
|
+
}
|
|
102
|
+
function truncate(text, maxLength) {
|
|
103
|
+
if (text.length <= maxLength) return text;
|
|
104
|
+
return `${text.slice(0, maxLength - 3)}...`;
|
|
105
|
+
}
|
|
106
|
+
var Header = ({ sourceCount }) => {
|
|
107
|
+
return /* @__PURE__ */ jsxs(
|
|
108
|
+
Box,
|
|
109
|
+
{
|
|
110
|
+
flexDirection: "row",
|
|
111
|
+
justifyContent: "space-between",
|
|
112
|
+
borderStyle: "single",
|
|
113
|
+
borderBottom: false,
|
|
114
|
+
borderLeft: false,
|
|
115
|
+
borderRight: false,
|
|
116
|
+
paddingX: 1,
|
|
117
|
+
children: [
|
|
118
|
+
/* @__PURE__ */ jsx(Text, { bold: true, color: CLI_COLORS.PRIMARY, children: "Search Skills" }),
|
|
119
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
120
|
+
sourceCount,
|
|
121
|
+
" source",
|
|
122
|
+
sourceCount !== 1 ? "s" : ""
|
|
123
|
+
] })
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
);
|
|
127
|
+
};
|
|
128
|
+
var SearchInput = ({ value }) => {
|
|
129
|
+
return /* @__PURE__ */ jsxs(Box, { paddingX: 1, paddingY: 1, children: [
|
|
130
|
+
/* @__PURE__ */ jsxs(Text, { color: CLI_COLORS.FOCUS, children: [
|
|
131
|
+
">",
|
|
132
|
+
" "
|
|
133
|
+
] }),
|
|
134
|
+
/* @__PURE__ */ jsx(Text, { children: value }),
|
|
135
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.FOCUS, children: "_" })
|
|
136
|
+
] });
|
|
137
|
+
};
|
|
138
|
+
var ResultItem = ({ skill, isSelected, isFocused }) => {
|
|
139
|
+
const checkbox = isSelected ? CHECKBOX_CHECKED : CHECKBOX_UNCHECKED;
|
|
140
|
+
const displayName = skill.displayName || skill.id;
|
|
141
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "row", gap: 1, children: [
|
|
142
|
+
/* @__PURE__ */ jsxs(
|
|
143
|
+
Text,
|
|
144
|
+
{
|
|
145
|
+
color: isFocused ? CLI_COLORS.FOCUS : isSelected ? CLI_COLORS.SUCCESS : void 0,
|
|
146
|
+
bold: isFocused,
|
|
147
|
+
backgroundColor: isFocused ? "#333333" : void 0,
|
|
148
|
+
children: [
|
|
149
|
+
" ",
|
|
150
|
+
checkbox,
|
|
151
|
+
" "
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
),
|
|
155
|
+
/* @__PURE__ */ jsx(Box, { width: 14, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: truncate(skill.sourceName, 12) }) }),
|
|
156
|
+
/* @__PURE__ */ jsx(Box, { width: 24, children: /* @__PURE__ */ jsx(Text, { color: isFocused ? CLI_COLORS.FOCUS : void 0, bold: isFocused || isSelected, children: truncate(displayName, 22) }) }),
|
|
157
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: truncate(skill.description, DESCRIPTION_WIDTH) })
|
|
158
|
+
] });
|
|
159
|
+
};
|
|
160
|
+
var ResultsList = ({
|
|
161
|
+
results,
|
|
162
|
+
selectedIds,
|
|
163
|
+
focusedIndex,
|
|
164
|
+
scrollOffset
|
|
165
|
+
}) => {
|
|
166
|
+
const visibleResults = results.slice(scrollOffset, scrollOffset + MAX_VISIBLE_RESULTS);
|
|
167
|
+
if (results.length === 0) {
|
|
168
|
+
return /* @__PURE__ */ jsx(Box, { paddingX: 1, paddingY: 1, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: "No skills found matching your search." }) });
|
|
169
|
+
}
|
|
170
|
+
return /* @__PURE__ */ jsx(
|
|
171
|
+
Box,
|
|
172
|
+
{
|
|
173
|
+
flexDirection: "column",
|
|
174
|
+
borderStyle: "single",
|
|
175
|
+
borderTop: false,
|
|
176
|
+
borderBottom: false,
|
|
177
|
+
paddingX: 1,
|
|
178
|
+
children: visibleResults.map((skill, index) => {
|
|
179
|
+
const actualIndex = scrollOffset + index;
|
|
180
|
+
return /* @__PURE__ */ jsx(
|
|
181
|
+
ResultItem,
|
|
182
|
+
{
|
|
183
|
+
skill,
|
|
184
|
+
isSelected: selectedIds.has(skill.id),
|
|
185
|
+
isFocused: actualIndex === focusedIndex
|
|
186
|
+
},
|
|
187
|
+
skill.id
|
|
188
|
+
);
|
|
189
|
+
})
|
|
190
|
+
}
|
|
191
|
+
);
|
|
192
|
+
};
|
|
193
|
+
var StatusBar = ({ resultCount, selectedCount }) => {
|
|
194
|
+
return /* @__PURE__ */ jsx(Box, { paddingX: 1, children: /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
195
|
+
resultCount,
|
|
196
|
+
" result",
|
|
197
|
+
resultCount !== 1 ? "s" : "",
|
|
198
|
+
selectedCount > 0 && /* @__PURE__ */ jsxs(Text, { color: CLI_COLORS.SUCCESS, children: [
|
|
199
|
+
" | ",
|
|
200
|
+
selectedCount,
|
|
201
|
+
" selected"
|
|
202
|
+
] })
|
|
203
|
+
] }) });
|
|
204
|
+
};
|
|
205
|
+
var Footer = ({ hasSelection }) => {
|
|
206
|
+
return /* @__PURE__ */ jsxs(
|
|
207
|
+
Box,
|
|
208
|
+
{
|
|
209
|
+
flexDirection: "row",
|
|
210
|
+
justifyContent: "center",
|
|
211
|
+
gap: 2,
|
|
212
|
+
borderStyle: "single",
|
|
213
|
+
borderTop: false,
|
|
214
|
+
borderLeft: false,
|
|
215
|
+
borderRight: false,
|
|
216
|
+
paddingX: 1,
|
|
217
|
+
marginTop: 1,
|
|
218
|
+
children: [
|
|
219
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
220
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.UNFOCUSED, children: "j/k" }),
|
|
221
|
+
" navigate"
|
|
222
|
+
] }),
|
|
223
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
224
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.UNFOCUSED, children: "SPACE" }),
|
|
225
|
+
" select"
|
|
226
|
+
] }),
|
|
227
|
+
hasSelection && /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
228
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.SUCCESS, children: "ENTER" }),
|
|
229
|
+
" import"
|
|
230
|
+
] }),
|
|
231
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
232
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.UNFOCUSED, children: "c" }),
|
|
233
|
+
" copy link"
|
|
234
|
+
] }),
|
|
235
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
236
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.WARNING, children: "ESC" }),
|
|
237
|
+
" cancel"
|
|
238
|
+
] })
|
|
239
|
+
]
|
|
240
|
+
}
|
|
241
|
+
);
|
|
242
|
+
};
|
|
243
|
+
var SkillSearch = ({
|
|
244
|
+
skills,
|
|
245
|
+
sourceCount,
|
|
246
|
+
initialQuery = "",
|
|
247
|
+
onComplete,
|
|
248
|
+
onCancel
|
|
249
|
+
}) => {
|
|
250
|
+
const { exit } = useApp();
|
|
251
|
+
const { value: query, handleInput: handleTextInput } = useTextInput(initialQuery);
|
|
252
|
+
const [selectedIds, setSelectedIds] = useState2(/* @__PURE__ */ new Set());
|
|
253
|
+
const [copiedMessage, setCopiedMessage] = useState2(null);
|
|
254
|
+
const {
|
|
255
|
+
filteredResults,
|
|
256
|
+
safeFocusedIndex,
|
|
257
|
+
focusedItem: focusedSkill,
|
|
258
|
+
scrollOffset,
|
|
259
|
+
moveUp,
|
|
260
|
+
moveDown
|
|
261
|
+
} = useFilteredResults({
|
|
262
|
+
items: skills,
|
|
263
|
+
query,
|
|
264
|
+
filterFn: matchesQuery,
|
|
265
|
+
maxVisible: MAX_VISIBLE_RESULTS
|
|
266
|
+
});
|
|
267
|
+
const toggleSelection = useCallback2((skillId) => {
|
|
268
|
+
setSelectedIds((prev) => {
|
|
269
|
+
const next = new Set(prev);
|
|
270
|
+
if (next.has(skillId)) {
|
|
271
|
+
next.delete(skillId);
|
|
272
|
+
} else {
|
|
273
|
+
next.add(skillId);
|
|
274
|
+
}
|
|
275
|
+
return next;
|
|
276
|
+
});
|
|
277
|
+
}, []);
|
|
278
|
+
const copySkillLink = useCallback2(async (skill) => {
|
|
279
|
+
const link = skill.sourceUrl ? `${skill.sourceUrl}/${skill.id}` : skill.id;
|
|
280
|
+
try {
|
|
281
|
+
const encoded = Buffer.from(link).toString("base64");
|
|
282
|
+
process.stdout.write(`\x1B]52;c;${encoded}\x07`);
|
|
283
|
+
setCopiedMessage(`Copied: ${link}`);
|
|
284
|
+
setTimeout(() => setCopiedMessage(null), COPIED_MESSAGE_TIMEOUT_MS);
|
|
285
|
+
} catch {
|
|
286
|
+
setCopiedMessage(`Link: ${link}`);
|
|
287
|
+
setTimeout(() => setCopiedMessage(null), FALLBACK_MESSAGE_TIMEOUT_MS);
|
|
288
|
+
}
|
|
289
|
+
}, []);
|
|
290
|
+
useInput((input, key) => {
|
|
291
|
+
if (key.escape) {
|
|
292
|
+
onCancel();
|
|
293
|
+
exit();
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
if (key.return) {
|
|
297
|
+
if (selectedIds.size > 0) {
|
|
298
|
+
const selectedSkills = filteredResults.filter((s) => selectedIds.has(s.id));
|
|
299
|
+
onComplete({
|
|
300
|
+
selectedSkills,
|
|
301
|
+
cancelled: false
|
|
302
|
+
});
|
|
303
|
+
exit();
|
|
304
|
+
}
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
if (input === " " && focusedSkill) {
|
|
308
|
+
toggleSelection(focusedSkill.id);
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
if ((input === "c" || input === "C") && focusedSkill) {
|
|
312
|
+
void copySkillLink(focusedSkill);
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
const isUp = key.upArrow || input === "k";
|
|
316
|
+
const isDown = key.downArrow || input === "j";
|
|
317
|
+
if (isUp) {
|
|
318
|
+
moveUp();
|
|
319
|
+
}
|
|
320
|
+
if (isDown) {
|
|
321
|
+
moveDown();
|
|
322
|
+
}
|
|
323
|
+
handleTextInput(input, key);
|
|
324
|
+
});
|
|
325
|
+
return /* @__PURE__ */ jsx(ThemeProvider, { theme: cliTheme, children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
326
|
+
/* @__PURE__ */ jsx(Header, { sourceCount }),
|
|
327
|
+
/* @__PURE__ */ jsx(SearchInput, { value: query }),
|
|
328
|
+
/* @__PURE__ */ jsx(
|
|
329
|
+
ResultsList,
|
|
330
|
+
{
|
|
331
|
+
results: filteredResults,
|
|
332
|
+
selectedIds,
|
|
333
|
+
focusedIndex: safeFocusedIndex,
|
|
334
|
+
scrollOffset
|
|
335
|
+
}
|
|
336
|
+
),
|
|
337
|
+
/* @__PURE__ */ jsx(StatusBar, { resultCount: filteredResults.length, selectedCount: selectedIds.size }),
|
|
338
|
+
copiedMessage && /* @__PURE__ */ jsx(Box, { paddingX: 1, children: /* @__PURE__ */ jsx(Text, { color: CLI_COLORS.SUCCESS, children: copiedMessage }) }),
|
|
339
|
+
/* @__PURE__ */ jsx(Footer, { hasSelection: selectedIds.size > 0 })
|
|
340
|
+
] }) });
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
export {
|
|
344
|
+
SkillSearch
|
|
345
|
+
};
|
|
346
|
+
//# sourceMappingURL=chunk-EMJ2ZKS7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/skill-search/skill-search.tsx","../src/cli/components/hooks/use-filtered-results.ts"],"sourcesContent":["import React, { useState, useCallback } from \"react\";\nimport { Box, Text, useApp, useInput } from \"ink\";\nimport { ThemeProvider } from \"@inkjs/ui\";\nimport { cliTheme } from \"../themes/default.js\";\nimport type { ResolvedSkill, SkillId } from \"../../types/index.js\";\nimport { CLI_COLORS, UI_SYMBOLS, UI_LAYOUT } from \"../../consts.js\";\nimport { useTextInput } from \"../hooks/use-text-input.js\";\nimport { useFilteredResults } from \"../hooks/use-filtered-results.js\";\n\nexport type SourcedSkill = ResolvedSkill & {\n sourceName: string;\n sourceUrl?: string;\n};\n\nexport type SkillSearchResult = {\n selectedSkills: SourcedSkill[];\n cancelled: boolean;\n};\n\nexport type SkillSearchProps = {\n skills: SourcedSkill[];\n sourceCount: number;\n initialQuery?: string;\n onComplete: (result: SkillSearchResult) => void;\n onCancel: () => void;\n};\n\nconst {\n MAX_VISIBLE_RESULTS,\n DESCRIPTION_WIDTH,\n COPIED_MESSAGE_TIMEOUT_MS,\n FALLBACK_MESSAGE_TIMEOUT_MS,\n} = UI_LAYOUT;\nconst { CHECKBOX_CHECKED, CHECKBOX_UNCHECKED } = UI_SYMBOLS;\n\nfunction matchesQuery(skill: SourcedSkill, query: string): boolean {\n if (!query.trim()) return true;\n\n const lowerQuery = query.toLowerCase();\n\n if (skill.id.toLowerCase().includes(lowerQuery)) return true;\n if (skill.displayName?.toLowerCase().includes(lowerQuery)) return true;\n if (skill.description.toLowerCase().includes(lowerQuery)) return true;\n if (skill.category.toLowerCase().includes(lowerQuery)) return true;\n if (skill.tags.some((tag) => tag.toLowerCase().includes(lowerQuery))) return true;\n\n return skill.sourceName.toLowerCase().includes(lowerQuery);\n}\n\nfunction truncate(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return `${text.slice(0, maxLength - 3)}...`;\n}\n\ntype HeaderProps = {\n sourceCount: number;\n};\n\nconst Header: React.FC<HeaderProps> = ({ sourceCount }) => {\n return (\n <Box\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n borderStyle=\"single\"\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n paddingX={1}\n >\n <Text bold color={CLI_COLORS.PRIMARY}>\n Search Skills\n </Text>\n <Text dimColor>\n {sourceCount} source{sourceCount !== 1 ? \"s\" : \"\"}\n </Text>\n </Box>\n );\n};\n\ntype SearchInputProps = {\n value: string;\n};\n\nconst SearchInput: React.FC<SearchInputProps> = ({ value }) => {\n return (\n <Box paddingX={1} paddingY={1}>\n <Text color={CLI_COLORS.FOCUS}>{\">\"} </Text>\n <Text>{value}</Text>\n <Text color={CLI_COLORS.FOCUS}>_</Text>\n </Box>\n );\n};\n\ntype ResultItemProps = {\n skill: SourcedSkill;\n isSelected: boolean;\n isFocused: boolean;\n};\n\nconst ResultItem: React.FC<ResultItemProps> = ({ skill, isSelected, isFocused }) => {\n const checkbox = isSelected ? CHECKBOX_CHECKED : CHECKBOX_UNCHECKED;\n const displayName = skill.displayName || skill.id;\n return (\n <Box flexDirection=\"row\" gap={1}>\n <Text\n color={isFocused ? CLI_COLORS.FOCUS : isSelected ? CLI_COLORS.SUCCESS : undefined}\n bold={isFocused}\n backgroundColor={isFocused ? \"#333333\" : undefined}\n >\n {\" \"}\n {checkbox}{\" \"}\n </Text>\n <Box width={14}>\n <Text dimColor>{truncate(skill.sourceName, 12)}</Text>\n </Box>\n <Box width={24}>\n <Text color={isFocused ? CLI_COLORS.FOCUS : undefined} bold={isFocused || isSelected}>\n {truncate(displayName, 22)}\n </Text>\n </Box>\n <Text dimColor>{truncate(skill.description, DESCRIPTION_WIDTH)}</Text>\n </Box>\n );\n};\n\ntype ResultsListProps = {\n results: SourcedSkill[];\n selectedIds: Set<SkillId>;\n focusedIndex: number;\n scrollOffset: number;\n};\n\nconst ResultsList: React.FC<ResultsListProps> = ({\n results,\n selectedIds,\n focusedIndex,\n scrollOffset,\n}) => {\n const visibleResults = results.slice(scrollOffset, scrollOffset + MAX_VISIBLE_RESULTS);\n\n if (results.length === 0) {\n return (\n <Box paddingX={1} paddingY={1}>\n <Text dimColor>No skills found matching your search.</Text>\n </Box>\n );\n }\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderTop={false}\n borderBottom={false}\n paddingX={1}\n >\n {visibleResults.map((skill, index) => {\n const actualIndex = scrollOffset + index;\n return (\n <ResultItem\n key={skill.id}\n skill={skill}\n isSelected={selectedIds.has(skill.id)}\n isFocused={actualIndex === focusedIndex}\n />\n );\n })}\n </Box>\n );\n};\n\ntype StatusBarProps = {\n resultCount: number;\n selectedCount: number;\n};\n\nconst StatusBar: React.FC<StatusBarProps> = ({ resultCount, selectedCount }) => {\n return (\n <Box paddingX={1}>\n <Text dimColor>\n {resultCount} result{resultCount !== 1 ? \"s\" : \"\"}\n {selectedCount > 0 && <Text color={CLI_COLORS.SUCCESS}> | {selectedCount} selected</Text>}\n </Text>\n </Box>\n );\n};\n\ntype FooterProps = {\n hasSelection: boolean;\n};\n\nconst Footer: React.FC<FooterProps> = ({ hasSelection }) => {\n return (\n <Box\n flexDirection=\"row\"\n justifyContent=\"center\"\n gap={2}\n borderStyle=\"single\"\n borderTop={false}\n borderLeft={false}\n borderRight={false}\n paddingX={1}\n marginTop={1}\n >\n <Text dimColor>\n <Text color={CLI_COLORS.UNFOCUSED}>j/k</Text> navigate\n </Text>\n <Text dimColor>\n <Text color={CLI_COLORS.UNFOCUSED}>SPACE</Text> select\n </Text>\n {hasSelection && (\n <Text dimColor>\n <Text color={CLI_COLORS.SUCCESS}>ENTER</Text> import\n </Text>\n )}\n <Text dimColor>\n <Text color={CLI_COLORS.UNFOCUSED}>c</Text> copy link\n </Text>\n <Text dimColor>\n <Text color={CLI_COLORS.WARNING}>ESC</Text> cancel\n </Text>\n </Box>\n );\n};\n\nexport const SkillSearch: React.FC<SkillSearchProps> = ({\n skills,\n sourceCount,\n initialQuery = \"\",\n onComplete,\n onCancel,\n}) => {\n const { exit } = useApp();\n\n const { value: query, handleInput: handleTextInput } = useTextInput(initialQuery);\n const [selectedIds, setSelectedIds] = useState<Set<SkillId>>(new Set());\n const [copiedMessage, setCopiedMessage] = useState<string | null>(null);\n\n const {\n filteredResults,\n safeFocusedIndex,\n focusedItem: focusedSkill,\n scrollOffset,\n moveUp,\n moveDown,\n } = useFilteredResults({\n items: skills,\n query,\n filterFn: matchesQuery,\n maxVisible: MAX_VISIBLE_RESULTS,\n });\n\n const toggleSelection = useCallback((skillId: SkillId) => {\n setSelectedIds((prev) => {\n const next = new Set(prev);\n if (next.has(skillId)) {\n next.delete(skillId);\n } else {\n next.add(skillId);\n }\n return next;\n });\n }, []);\n\n const copySkillLink = useCallback(async (skill: SourcedSkill) => {\n const link = skill.sourceUrl ? `${skill.sourceUrl}/${skill.id}` : skill.id;\n\n try {\n // OSC 52 terminal clipboard escape sequence\n const encoded = Buffer.from(link).toString(\"base64\");\n process.stdout.write(`\\x1b]52;c;${encoded}\\x07`);\n setCopiedMessage(`Copied: ${link}`);\n setTimeout(() => setCopiedMessage(null), COPIED_MESSAGE_TIMEOUT_MS);\n } catch {\n setCopiedMessage(`Link: ${link}`);\n setTimeout(() => setCopiedMessage(null), FALLBACK_MESSAGE_TIMEOUT_MS);\n }\n }, []);\n\n useInput((input, key) => {\n if (key.escape) {\n onCancel();\n exit();\n return;\n }\n\n if (key.return) {\n if (selectedIds.size > 0) {\n const selectedSkills = filteredResults.filter((s) => selectedIds.has(s.id));\n onComplete({\n selectedSkills,\n cancelled: false,\n });\n exit();\n }\n return;\n }\n\n if (input === \" \" && focusedSkill) {\n toggleSelection(focusedSkill.id);\n return;\n }\n\n if ((input === \"c\" || input === \"C\") && focusedSkill) {\n void copySkillLink(focusedSkill);\n return;\n }\n\n const isUp = key.upArrow || input === \"k\";\n const isDown = key.downArrow || input === \"j\";\n\n if (isUp) {\n moveUp();\n }\n\n if (isDown) {\n moveDown();\n }\n\n handleTextInput(input, key);\n });\n\n return (\n <ThemeProvider theme={cliTheme}>\n <Box flexDirection=\"column\">\n <Header sourceCount={sourceCount} />\n <SearchInput value={query} />\n <ResultsList\n results={filteredResults}\n selectedIds={selectedIds}\n focusedIndex={safeFocusedIndex}\n scrollOffset={scrollOffset}\n />\n <StatusBar resultCount={filteredResults.length} selectedCount={selectedIds.size} />\n {copiedMessage && (\n <Box paddingX={1}>\n <Text color={CLI_COLORS.SUCCESS}>{copiedMessage}</Text>\n </Box>\n )}\n <Footer hasSelection={selectedIds.size > 0} />\n </Box>\n </ThemeProvider>\n );\n};\n","import { useState, useMemo, useEffect, useCallback, useRef } from \"react\";\n\ntype UseFilteredResultsOptions<T> = {\n /** Items to filter */\n items: T[];\n /** Current search query */\n query: string;\n /** Filter predicate — returns true if item matches the query */\n filterFn: (item: T, query: string) => boolean;\n /** Number of visible rows in the scrollable viewport */\n maxVisible: number;\n};\n\ntype UseFilteredResultsResult<T> = {\n /** Items that pass the filter */\n filteredResults: T[];\n /** Index clamped to valid range */\n safeFocusedIndex: number;\n /** The item at safeFocusedIndex, or undefined when empty */\n focusedItem: T | undefined;\n /** First visible row offset for windowed rendering */\n scrollOffset: number;\n /** Move focus up one row (clamped, adjusts scroll) */\n moveUp: () => void;\n /** Move focus down one row (clamped, adjusts scroll) */\n moveDown: () => void;\n};\n\n/**\n * Manages filtered list state: query-based filtering, focus tracking,\n * and scroll-offset synchronisation for windowed rendering.\n * Focus and scroll reset automatically when the query changes.\n */\nexport function useFilteredResults<T>({\n items,\n query,\n filterFn,\n maxVisible,\n}: UseFilteredResultsOptions<T>): UseFilteredResultsResult<T> {\n const [focusedIndex, setFocusedIndex] = useState(0);\n const [scrollOffset, setScrollOffset] = useState(0);\n\n useEffect(() => {\n setFocusedIndex(0);\n setScrollOffset(0);\n }, [query]);\n\n const filteredResults = useMemo(() => {\n return items.filter((item) => filterFn(item, query));\n }, [items, query, filterFn]);\n\n const safeFocusedIndex = Math.min(focusedIndex, Math.max(0, filteredResults.length - 1));\n const focusedItem = filteredResults[safeFocusedIndex] as T | undefined;\n\n // Refs for stable callback access (matches use-keyboard-navigation pattern)\n const safeFocusedIndexRef = useRef(safeFocusedIndex);\n const scrollOffsetRef = useRef(scrollOffset);\n const resultCountRef = useRef(filteredResults.length);\n\n useEffect(() => {\n safeFocusedIndexRef.current = safeFocusedIndex;\n }, [safeFocusedIndex]);\n\n useEffect(() => {\n scrollOffsetRef.current = scrollOffset;\n }, [scrollOffset]);\n\n useEffect(() => {\n resultCountRef.current = filteredResults.length;\n }, [filteredResults.length]);\n\n const moveUp = useCallback(() => {\n const current = safeFocusedIndexRef.current;\n if (current <= 0) return;\n const newIndex = current - 1;\n setFocusedIndex(newIndex);\n if (newIndex < scrollOffsetRef.current) {\n setScrollOffset(newIndex);\n }\n }, []);\n\n const moveDown = useCallback(() => {\n const current = safeFocusedIndexRef.current;\n if (current >= resultCountRef.current - 1) return;\n const newIndex = current + 1;\n setFocusedIndex(newIndex);\n if (newIndex >= scrollOffsetRef.current + maxVisible) {\n setScrollOffset(newIndex - maxVisible + 1);\n }\n }, [maxVisible]);\n\n return {\n filteredResults,\n safeFocusedIndex,\n focusedItem,\n scrollOffset,\n moveUp,\n moveDown,\n };\n}\n"],"mappings":"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","names":["useState","useCallback","useState","useCallback"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
CLI_COLORS
|
|
4
|
+
} from "./chunk-LAPCUV4D.js";
|
|
5
|
+
import {
|
|
6
|
+
init_esm_shims
|
|
7
|
+
} from "./chunk-DHET7RCE.js";
|
|
8
|
+
|
|
9
|
+
// src/cli/components/wizard/section-progress.tsx
|
|
10
|
+
init_esm_shims();
|
|
11
|
+
import { Box, Text } from "ink";
|
|
12
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
+
var SectionProgress = ({
|
|
14
|
+
label,
|
|
15
|
+
current,
|
|
16
|
+
index,
|
|
17
|
+
total,
|
|
18
|
+
next
|
|
19
|
+
}) => {
|
|
20
|
+
const isLast = index === total;
|
|
21
|
+
const rightText = isLast ? "Last step" : `Next: ${next}`;
|
|
22
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "row", justifyContent: "space-between", marginBottom: 1, children: [
|
|
23
|
+
/* @__PURE__ */ jsxs(Text, { children: [
|
|
24
|
+
/* @__PURE__ */ jsxs(Text, { bold: true, children: [
|
|
25
|
+
label,
|
|
26
|
+
":"
|
|
27
|
+
] }),
|
|
28
|
+
" ",
|
|
29
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.PRIMARY, children: current })
|
|
30
|
+
] }),
|
|
31
|
+
/* @__PURE__ */ jsxs(Text, { children: [
|
|
32
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
33
|
+
"[",
|
|
34
|
+
index,
|
|
35
|
+
"/",
|
|
36
|
+
total,
|
|
37
|
+
"]"
|
|
38
|
+
] }),
|
|
39
|
+
" ",
|
|
40
|
+
/* @__PURE__ */ jsx(Text, { dimColor: isLast, children: rightText })
|
|
41
|
+
] })
|
|
42
|
+
] });
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export {
|
|
46
|
+
SectionProgress
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=chunk-FJQRVFMB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/section-progress.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { CLI_COLORS } from \"../../consts.js\";\n\ntype SectionProgressProps = {\n label: string;\n current: string;\n /** 1-based */\n index: number;\n total: number;\n next?: string;\n};\n\nexport const SectionProgress: React.FC<SectionProgressProps> = ({\n label,\n current,\n index,\n total,\n next,\n}) => {\n const isLast = index === total;\n const rightText = isLast ? \"Last step\" : `Next: ${next}`;\n\n return (\n <Box flexDirection=\"row\" justifyContent=\"space-between\" marginBottom={1}>\n <Text>\n <Text bold>{label}:</Text> <Text color={CLI_COLORS.PRIMARY}>{current}</Text>\n </Text>\n <Text>\n <Text dimColor>\n [{index}/{total}]\n </Text>{\" \"}\n <Text dimColor={isLast}>{rightText}</Text>\n </Text>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AACA,SAAS,KAAK,YAAY;AAyBlB,SAA2B,KAA3B;AAbD,IAAM,kBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,SAAS,UAAU;AACzB,QAAM,YAAY,SAAS,cAAc,SAAS,IAAI;AAEtD,SACE,qBAAC,OAAI,eAAc,OAAM,gBAAe,iBAAgB,cAAc,GACpE;AAAA,yBAAC,QACC;AAAA,2BAAC,QAAK,MAAI,MAAE;AAAA;AAAA,QAAM;AAAA,SAAC;AAAA,MAAO;AAAA,MAAC,oBAAC,QAAK,OAAO,WAAW,SAAU,mBAAQ;AAAA,OACvE;AAAA,IACA,qBAAC,QACC;AAAA,2BAAC,QAAK,UAAQ,MAAC;AAAA;AAAA,QACX;AAAA,QAAM;AAAA,QAAE;AAAA,QAAM;AAAA,SAClB;AAAA,MAAQ;AAAA,MACR,oBAAC,QAAK,UAAU,QAAS,qBAAU;AAAA,OACrC;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
CLI_COLORS
|
|
4
|
+
} from "./chunk-LAPCUV4D.js";
|
|
5
|
+
import {
|
|
6
|
+
init_esm_shims
|
|
7
|
+
} from "./chunk-DHET7RCE.js";
|
|
8
|
+
|
|
9
|
+
// src/cli/components/wizard/help-modal.tsx
|
|
10
|
+
init_esm_shims();
|
|
11
|
+
import { Box, Text } from "ink";
|
|
12
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
+
var GLOBAL_KEYS = {
|
|
14
|
+
title: "Navigation",
|
|
15
|
+
keys: [
|
|
16
|
+
{ key: "Arrow keys", description: "Move focus" },
|
|
17
|
+
{ key: "SPACE", description: "Toggle selection" },
|
|
18
|
+
{ key: "ENTER", description: "Confirm / continue" },
|
|
19
|
+
{ key: "ESC", description: "Go back" },
|
|
20
|
+
{ key: "TAB", description: "Jump to next section" }
|
|
21
|
+
]
|
|
22
|
+
};
|
|
23
|
+
var GLOBAL_TOGGLES = {
|
|
24
|
+
title: "Global Toggles",
|
|
25
|
+
keys: [
|
|
26
|
+
{ key: "E", description: "Toggle expert mode" },
|
|
27
|
+
{ key: "P", description: "Toggle plugin/local install mode" },
|
|
28
|
+
{ key: "?", description: "Toggle this help" }
|
|
29
|
+
]
|
|
30
|
+
};
|
|
31
|
+
var BUILD_KEYS = {
|
|
32
|
+
title: "Build Step",
|
|
33
|
+
keys: [
|
|
34
|
+
{ key: "D", description: "Toggle skill descriptions" },
|
|
35
|
+
{ key: "A", description: "Accept stack defaults (stack path only)" },
|
|
36
|
+
{ key: "h/j/k/l", description: "Vim-style navigation" }
|
|
37
|
+
]
|
|
38
|
+
};
|
|
39
|
+
var SOURCES_KEYS = {
|
|
40
|
+
title: "Sources Step",
|
|
41
|
+
keys: [{ key: "G", description: "Toggle source settings" }]
|
|
42
|
+
};
|
|
43
|
+
var STEP_SECTIONS = {
|
|
44
|
+
build: BUILD_KEYS,
|
|
45
|
+
sources: SOURCES_KEYS
|
|
46
|
+
};
|
|
47
|
+
var KEY_COLUMN_WIDTH = 14;
|
|
48
|
+
var HelpSectionView = ({ section }) => /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
49
|
+
/* @__PURE__ */ jsx(Text, { bold: true, underline: true, children: section.title }),
|
|
50
|
+
section.keys.map(({ key, description }) => /* @__PURE__ */ jsxs(Box, { children: [
|
|
51
|
+
/* @__PURE__ */ jsx(Box, { width: KEY_COLUMN_WIDTH, children: /* @__PURE__ */ jsxs(Text, { backgroundColor: "black", color: CLI_COLORS.UNFOCUSED, children: [
|
|
52
|
+
" ",
|
|
53
|
+
key,
|
|
54
|
+
" "
|
|
55
|
+
] }) }),
|
|
56
|
+
/* @__PURE__ */ jsx(Text, { children: description })
|
|
57
|
+
] }, key))
|
|
58
|
+
] });
|
|
59
|
+
var HelpModal = ({ currentStep }) => {
|
|
60
|
+
const stepSection = STEP_SECTIONS[currentStep];
|
|
61
|
+
return /* @__PURE__ */ jsxs(
|
|
62
|
+
Box,
|
|
63
|
+
{
|
|
64
|
+
flexDirection: "column",
|
|
65
|
+
borderStyle: "single",
|
|
66
|
+
borderColor: CLI_COLORS.PRIMARY,
|
|
67
|
+
paddingX: 2,
|
|
68
|
+
paddingY: 1,
|
|
69
|
+
marginTop: 1,
|
|
70
|
+
children: [
|
|
71
|
+
/* @__PURE__ */ jsx(Text, { bold: true, color: CLI_COLORS.PRIMARY, children: "Keyboard Shortcuts" }),
|
|
72
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
73
|
+
/* @__PURE__ */ jsx(HelpSectionView, { section: GLOBAL_KEYS }),
|
|
74
|
+
/* @__PURE__ */ jsx(HelpSectionView, { section: GLOBAL_TOGGLES }),
|
|
75
|
+
stepSection && /* @__PURE__ */ jsx(HelpSectionView, { section: stepSection }),
|
|
76
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "Press ESC or ? to close" })
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export {
|
|
83
|
+
HelpModal
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=chunk-FZGYSLJL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/help-modal.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport type { WizardStep } from \"../../stores/wizard-store.js\";\n\ntype HelpSection = {\n title: string;\n keys: { key: string; description: string }[];\n};\n\nconst GLOBAL_KEYS: HelpSection = {\n title: \"Navigation\",\n keys: [\n { key: \"Arrow keys\", description: \"Move focus\" },\n { key: \"SPACE\", description: \"Toggle selection\" },\n { key: \"ENTER\", description: \"Confirm / continue\" },\n { key: \"ESC\", description: \"Go back\" },\n { key: \"TAB\", description: \"Jump to next section\" },\n ],\n};\n\nconst GLOBAL_TOGGLES: HelpSection = {\n title: \"Global Toggles\",\n keys: [\n { key: \"E\", description: \"Toggle expert mode\" },\n { key: \"P\", description: \"Toggle plugin/local install mode\" },\n { key: \"?\", description: \"Toggle this help\" },\n ],\n};\n\nconst BUILD_KEYS: HelpSection = {\n title: \"Build Step\",\n keys: [\n { key: \"D\", description: \"Toggle skill descriptions\" },\n { key: \"A\", description: \"Accept stack defaults (stack path only)\" },\n { key: \"h/j/k/l\", description: \"Vim-style navigation\" },\n ],\n};\n\nconst SOURCES_KEYS: HelpSection = {\n title: \"Sources Step\",\n keys: [{ key: \"G\", description: \"Toggle source settings\" }],\n};\n\nconst STEP_SECTIONS: Partial<Record<WizardStep, HelpSection>> = {\n build: BUILD_KEYS,\n sources: SOURCES_KEYS,\n};\n\nconst KEY_COLUMN_WIDTH = 14;\n\ntype HelpSectionViewProps = {\n section: HelpSection;\n};\n\nconst HelpSectionView: React.FC<HelpSectionViewProps> = ({ section }) => (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold underline>\n {section.title}\n </Text>\n {section.keys.map(({ key, description }) => (\n <Box key={key}>\n <Box width={KEY_COLUMN_WIDTH}>\n <Text backgroundColor=\"black\" color={CLI_COLORS.UNFOCUSED}>\n {\" \"}\n {key}{\" \"}\n </Text>\n </Box>\n <Text>{description}</Text>\n </Box>\n ))}\n </Box>\n);\n\nexport type HelpModalProps = {\n currentStep: WizardStep;\n};\n\nexport const HelpModal: React.FC<HelpModalProps> = ({ currentStep }) => {\n const stepSection = STEP_SECTIONS[currentStep];\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={CLI_COLORS.PRIMARY}\n paddingX={2}\n paddingY={1}\n marginTop={1}\n >\n <Text bold color={CLI_COLORS.PRIMARY}>\n Keyboard Shortcuts\n </Text>\n <Text> </Text>\n\n <HelpSectionView section={GLOBAL_KEYS} />\n <HelpSectionView section={GLOBAL_TOGGLES} />\n {stepSection && <HelpSectionView section={stepSection} />}\n\n <Text dimColor>Press ESC or ? to close</Text>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AACA,SAAS,KAAK,YAAY;AAwDtB,cAMM,YANN;AA/CJ,IAAM,cAA2B;AAAA,EAC/B,OAAO;AAAA,EACP,MAAM;AAAA,IACJ,EAAE,KAAK,cAAc,aAAa,aAAa;AAAA,IAC/C,EAAE,KAAK,SAAS,aAAa,mBAAmB;AAAA,IAChD,EAAE,KAAK,SAAS,aAAa,qBAAqB;AAAA,IAClD,EAAE,KAAK,OAAO,aAAa,UAAU;AAAA,IACrC,EAAE,KAAK,OAAO,aAAa,uBAAuB;AAAA,EACpD;AACF;AAEA,IAAM,iBAA8B;AAAA,EAClC,OAAO;AAAA,EACP,MAAM;AAAA,IACJ,EAAE,KAAK,KAAK,aAAa,qBAAqB;AAAA,IAC9C,EAAE,KAAK,KAAK,aAAa,mCAAmC;AAAA,IAC5D,EAAE,KAAK,KAAK,aAAa,mBAAmB;AAAA,EAC9C;AACF;AAEA,IAAM,aAA0B;AAAA,EAC9B,OAAO;AAAA,EACP,MAAM;AAAA,IACJ,EAAE,KAAK,KAAK,aAAa,4BAA4B;AAAA,IACrD,EAAE,KAAK,KAAK,aAAa,0CAA0C;AAAA,IACnE,EAAE,KAAK,WAAW,aAAa,uBAAuB;AAAA,EACxD;AACF;AAEA,IAAM,eAA4B;AAAA,EAChC,OAAO;AAAA,EACP,MAAM,CAAC,EAAE,KAAK,KAAK,aAAa,yBAAyB,CAAC;AAC5D;AAEA,IAAM,gBAA0D;AAAA,EAC9D,OAAO;AAAA,EACP,SAAS;AACX;AAEA,IAAM,mBAAmB;AAMzB,IAAM,kBAAkD,CAAC,EAAE,QAAQ,MACjE,qBAAC,OAAI,eAAc,UAAS,cAAc,GACxC;AAAA,sBAAC,QAAK,MAAI,MAAC,WAAS,MACjB,kBAAQ,OACX;AAAA,EACC,QAAQ,KAAK,IAAI,CAAC,EAAE,KAAK,YAAY,MACpC,qBAAC,OACC;AAAA,wBAAC,OAAI,OAAO,kBACV,+BAAC,QAAK,iBAAgB,SAAQ,OAAO,WAAW,WAC7C;AAAA;AAAA,MACA;AAAA,MAAK;AAAA,OACR,GACF;AAAA,IACA,oBAAC,QAAM,uBAAY;AAAA,OAPX,GAQV,CACD;AAAA,GACH;AAOK,IAAM,YAAsC,CAAC,EAAE,YAAY,MAAM;AACtE,QAAM,cAAc,cAAc,WAAW;AAE7C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,aAAY;AAAA,MACZ,aAAa,WAAW;AAAA,MACxB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MAEX;AAAA,4BAAC,QAAK,MAAI,MAAC,OAAO,WAAW,SAAS,gCAEtC;AAAA,QACA,oBAAC,QAAK,eAAC;AAAA,QAEP,oBAAC,mBAAgB,SAAS,aAAa;AAAA,QACvC,oBAAC,mBAAgB,SAAS,gBAAgB;AAAA,QACzC,eAAe,oBAAC,mBAAgB,SAAS,aAAa;AAAA,QAEvD,oBAAC,QAAK,UAAQ,MAAC,qCAAuB;AAAA;AAAA;AAAA,EACxC;AAEJ;","names":[]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
useWizardStore
|
|
4
|
+
} from "./chunk-3ZOIOVKT.js";
|
|
5
|
+
import {
|
|
6
|
+
CLI_COLORS
|
|
7
|
+
} from "./chunk-LAPCUV4D.js";
|
|
8
|
+
import {
|
|
9
|
+
init_esm_shims
|
|
10
|
+
} from "./chunk-DHET7RCE.js";
|
|
11
|
+
|
|
12
|
+
// src/cli/components/wizard/domain-selection.tsx
|
|
13
|
+
init_esm_shims();
|
|
14
|
+
import { Box, Text } from "ink";
|
|
15
|
+
import { Select } from "@inkjs/ui";
|
|
16
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
17
|
+
var BACK_VALUE = "_back";
|
|
18
|
+
var CONTINUE_VALUE = "_continue";
|
|
19
|
+
var AVAILABLE_DOMAINS = [
|
|
20
|
+
{ id: "web", label: "Web", description: "Frontend web applications" },
|
|
21
|
+
{
|
|
22
|
+
id: "web-extras",
|
|
23
|
+
label: "Web Extras",
|
|
24
|
+
description: "Animation, files, realtime, PWA, accessibility"
|
|
25
|
+
},
|
|
26
|
+
{ id: "api", label: "API", description: "Backend APIs and services" },
|
|
27
|
+
{ id: "cli", label: "CLI", description: "Command-line tools" },
|
|
28
|
+
{ id: "mobile", label: "Mobile", description: "Mobile applications" }
|
|
29
|
+
];
|
|
30
|
+
var DomainSelection = () => {
|
|
31
|
+
const { selectedDomains, toggleDomain, setStep, setApproach, selectStack } = useWizardStore();
|
|
32
|
+
const handleBack = () => {
|
|
33
|
+
setApproach(null);
|
|
34
|
+
selectStack(null);
|
|
35
|
+
};
|
|
36
|
+
const domainOptions = AVAILABLE_DOMAINS.map((domain) => {
|
|
37
|
+
const isSelected = selectedDomains.includes(domain.id);
|
|
38
|
+
const checkbox = isSelected ? "[\u2713]" : "[ ]";
|
|
39
|
+
return {
|
|
40
|
+
value: domain.id,
|
|
41
|
+
label: `${checkbox} ${domain.label} - ${domain.description}`
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
const options = [
|
|
45
|
+
{ value: BACK_VALUE, label: "\u2190 Back" },
|
|
46
|
+
...domainOptions,
|
|
47
|
+
...selectedDomains.length > 0 ? [
|
|
48
|
+
{
|
|
49
|
+
value: CONTINUE_VALUE,
|
|
50
|
+
label: `\u2192 Continue with ${selectedDomains.length} domain(s)`
|
|
51
|
+
}
|
|
52
|
+
] : []
|
|
53
|
+
];
|
|
54
|
+
const handleSelect = (value) => {
|
|
55
|
+
if (value === BACK_VALUE) {
|
|
56
|
+
handleBack();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (value === CONTINUE_VALUE) {
|
|
60
|
+
if (selectedDomains.length > 0) {
|
|
61
|
+
setStep("build");
|
|
62
|
+
}
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
toggleDomain(value);
|
|
66
|
+
};
|
|
67
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
68
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "Select domains to configure:" }),
|
|
69
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "Select one or more domains, then continue" }),
|
|
70
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Select, { options, onChange: handleSelect }) }),
|
|
71
|
+
selectedDomains.length > 0 ? /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsxs(Text, { children: [
|
|
72
|
+
"Selected: ",
|
|
73
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.PRIMARY, children: selectedDomains.join(", ") })
|
|
74
|
+
] }) }) : /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { color: CLI_COLORS.WARNING, children: "Please select at least one domain" }) }),
|
|
75
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
76
|
+
"\u2191",
|
|
77
|
+
"/",
|
|
78
|
+
"\u2193",
|
|
79
|
+
" navigate ENTER toggle/select ESC back"
|
|
80
|
+
] }) })
|
|
81
|
+
] });
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export {
|
|
85
|
+
DomainSelection
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=chunk-H566H3MQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/domain-selection.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { Select } from \"@inkjs/ui\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type { Domain } from \"../../types/index.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\n\nconst BACK_VALUE = \"_back\";\nconst CONTINUE_VALUE = \"_continue\";\n\nconst AVAILABLE_DOMAINS: Array<{ id: Domain; label: string; description: string }> = [\n { id: \"web\", label: \"Web\", description: \"Frontend web applications\" },\n {\n id: \"web-extras\",\n label: \"Web Extras\",\n description: \"Animation, files, realtime, PWA, accessibility\",\n },\n { id: \"api\", label: \"API\", description: \"Backend APIs and services\" },\n { id: \"cli\", label: \"CLI\", description: \"Command-line tools\" },\n { id: \"mobile\", label: \"Mobile\", description: \"Mobile applications\" },\n];\n\nexport const DomainSelection: React.FC = () => {\n const { selectedDomains, toggleDomain, setStep, setApproach, selectStack } = useWizardStore();\n\n const handleBack = () => {\n setApproach(null);\n selectStack(null);\n };\n\n const domainOptions = AVAILABLE_DOMAINS.map((domain) => {\n const isSelected = selectedDomains.includes(domain.id);\n const checkbox = isSelected ? \"[\\u2713]\" : \"[ ]\";\n return {\n value: domain.id,\n label: `${checkbox} ${domain.label} - ${domain.description}`,\n };\n });\n\n const options = [\n { value: BACK_VALUE, label: \"\\u2190 Back\" },\n ...domainOptions,\n ...(selectedDomains.length > 0\n ? [\n {\n value: CONTINUE_VALUE,\n label: `\\u2192 Continue with ${selectedDomains.length} domain(s)`,\n },\n ]\n : []),\n ];\n\n const handleSelect = (value: string) => {\n if (value === BACK_VALUE) {\n handleBack();\n return;\n }\n\n if (value === CONTINUE_VALUE) {\n if (selectedDomains.length > 0) {\n setStep(\"build\");\n }\n return;\n }\n\n // Toggle domain selection (value comes from Select UI component - data boundary)\n toggleDomain(value as Domain);\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold>Select domains to configure:</Text>\n <Text dimColor>Select one or more domains, then continue</Text>\n <Box marginTop={1}>\n <Select options={options} onChange={handleSelect} />\n </Box>\n {selectedDomains.length > 0 ? (\n <Box marginTop={1}>\n <Text>\n Selected: <Text color={CLI_COLORS.PRIMARY}>{selectedDomains.join(\", \")}</Text>\n </Text>\n </Box>\n ) : (\n <Box marginTop={1}>\n <Text color={CLI_COLORS.WARNING}>Please select at least one domain</Text>\n </Box>\n )}\n <Box marginTop={1}>\n <Text dimColor>\n {\"\\u2191\"}/{\"\\u2193\"} navigate ENTER toggle/select ESC back\n </Text>\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA;AACA,SAAS,KAAK,YAAY;AAC1B,SAAS,cAAc;AAqEjB,cAOI,YAPJ;AAhEN,IAAM,aAAa;AACnB,IAAM,iBAAiB;AAEvB,IAAM,oBAA+E;AAAA,EACnF,EAAE,IAAI,OAAO,OAAO,OAAO,aAAa,4BAA4B;AAAA,EACpE;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,EAAE,IAAI,OAAO,OAAO,OAAO,aAAa,4BAA4B;AAAA,EACpE,EAAE,IAAI,OAAO,OAAO,OAAO,aAAa,qBAAqB;AAAA,EAC7D,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,sBAAsB;AACtE;AAEO,IAAM,kBAA4B,MAAM;AAC7C,QAAM,EAAE,iBAAiB,cAAc,SAAS,aAAa,YAAY,IAAI,eAAe;AAE5F,QAAM,aAAa,MAAM;AACvB,gBAAY,IAAI;AAChB,gBAAY,IAAI;AAAA,EAClB;AAEA,QAAM,gBAAgB,kBAAkB,IAAI,CAAC,WAAW;AACtD,UAAM,aAAa,gBAAgB,SAAS,OAAO,EAAE;AACrD,UAAM,WAAW,aAAa,aAAa;AAC3C,WAAO;AAAA,MACL,OAAO,OAAO;AAAA,MACd,OAAO,GAAG,QAAQ,IAAI,OAAO,KAAK,MAAM,OAAO,WAAW;AAAA,IAC5D;AAAA,EACF,CAAC;AAED,QAAM,UAAU;AAAA,IACd,EAAE,OAAO,YAAY,OAAO,cAAc;AAAA,IAC1C,GAAG;AAAA,IACH,GAAI,gBAAgB,SAAS,IACzB;AAAA,MACE;AAAA,QACE,OAAO;AAAA,QACP,OAAO,wBAAwB,gBAAgB,MAAM;AAAA,MACvD;AAAA,IACF,IACA,CAAC;AAAA,EACP;AAEA,QAAM,eAAe,CAAC,UAAkB;AACtC,QAAI,UAAU,YAAY;AACxB,iBAAW;AACX;AAAA,IACF;AAEA,QAAI,UAAU,gBAAgB;AAC5B,UAAI,gBAAgB,SAAS,GAAG;AAC9B,gBAAQ,OAAO;AAAA,MACjB;AACA;AAAA,IACF;AAGA,iBAAa,KAAe;AAAA,EAC9B;AAEA,SACE,qBAAC,OAAI,eAAc,UACjB;AAAA,wBAAC,QAAK,MAAI,MAAC,0CAA4B;AAAA,IACvC,oBAAC,QAAK,UAAQ,MAAC,uDAAyC;AAAA,IACxD,oBAAC,OAAI,WAAW,GACd,8BAAC,UAAO,SAAkB,UAAU,cAAc,GACpD;AAAA,IACC,gBAAgB,SAAS,IACxB,oBAAC,OAAI,WAAW,GACd,+BAAC,QAAK;AAAA;AAAA,MACM,oBAAC,QAAK,OAAO,WAAW,SAAU,0BAAgB,KAAK,IAAI,GAAE;AAAA,OACzE,GACF,IAEA,oBAAC,OAAI,WAAW,GACd,8BAAC,QAAK,OAAO,WAAW,SAAS,+CAAiC,GACpE;AAAA,IAEF,oBAAC,OAAI,WAAW,GACd,+BAAC,QAAK,UAAQ,MACX;AAAA;AAAA,MAAS;AAAA,MAAE;AAAA,MAAS;AAAA,OACvB,GACF;AAAA,KACF;AAEJ;","names":[]}
|