@astryxdesign/cli 0.7.2-canary.fe2c655 → 0.7.3-canary.02f5fe4
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 +119 -0
- package/README.md +216 -162
- package/api/build/_adapter.d.mts +66 -0
- package/api/build/_adapter.mjs +139 -4
- package/api/build/blocks/blocks.d.mts +92 -0
- package/api/build/blocks/blocks.mjs +528 -0
- package/api/build/blocks/blocks.test.mjs +238 -0
- package/api/build/blocks/blocks.weights.json +1 -0
- package/api/build/build.doc.mjs +4 -0
- package/api/build/build.mjs +25 -6
- package/api/build/build.type.mjs +1 -1
- package/api/build/help/help.mjs +1 -1
- package/api/build/kit/answer.d.mts +18 -0
- package/api/build/kit/answer.mjs +195 -0
- package/api/build/kit/answer.test.mjs +108 -0
- package/api/build/kit/kind.d.mts +25 -0
- package/api/build/kit/kind.mjs +170 -0
- package/api/build/kit/kit.d.mts +2 -4
- package/api/build/kit/kit.mjs +8 -406
- package/api/build/kit/rank.d.mts +3 -32
- package/api/build/kit/rank.mjs +25 -342
- package/api/build/kit/rank.test.mjs +2 -1
- package/api/build/kit/signals.d.mts +79 -0
- package/api/build/kit/signals.mjs +295 -0
- package/api/build/kit/start.d.mts +32 -0
- package/api/build/kit/start.mjs +163 -0
- package/api/build/kit/words.d.mts +72 -0
- package/api/build/kit/words.mjs +202 -0
- package/api/build/tree.d.mts +20 -0
- package/api/build/tree.mjs +53 -0
- package/api/build/tree.test.mjs +185 -0
- package/api/build/tree.weights.json +1 -0
- package/api/component/_adapter.d.mts +72 -1
- package/api/component/_adapter.mjs +251 -23
- package/api/component/component-replacement.test.mjs +1 -0
- package/api/component/component.doc.mjs +6 -1
- package/api/component/component.mjs +97 -16
- package/api/component/component.test.mjs +95 -0
- package/api/component/doc-links.test.mjs +386 -0
- package/api/component/integration-export-name.test.mjs +644 -0
- package/api/component/list/list.mjs +42 -4
- package/api/discover/_adapter.d.mts +131 -12
- package/api/discover/_adapter.mjs +520 -34
- package/api/discover/_adapter.test.mjs +641 -17
- package/api/discover/_catalog-view.d.mts +16 -5
- package/api/discover/_catalog-view.mjs +32 -8
- package/api/discover/detail/doc/doc.mjs +9 -1
- package/api/discover/discover.d.mts +11 -0
- package/api/discover/discover.doc.mjs +9 -7
- package/api/discover/discover.mjs +120 -19
- package/api/discover/discover.type.d.mts +20 -7
- package/api/discover/discover.type.mjs +17 -7
- package/api/discover/list/list.d.mts +4 -3
- package/api/discover/list/list.mjs +17 -10
- package/api/docs/_adapter.d.mts +76 -2
- package/api/docs/_adapter.mjs +630 -34
- package/api/docs/docs-homes.test.mjs +127 -0
- package/api/docs/docs.doc.mjs +5 -4
- package/api/docs/docs.mjs +2 -1
- package/api/docs/docs.test.mjs +39 -20
- package/api/docs/integration-tree.test.mjs +42 -20
- package/api/docs/integrationDocs.test.mjs +125 -1
- package/api/docs/list/list.mjs +12 -2
- package/api/docs/namespace-section.test.mjs +6 -6
- package/api/docs/reference-blocks.test.mjs +3 -5
- package/api/doctor/_adapter.d.mts +128 -0
- package/api/doctor/_adapter.mjs +253 -4
- package/api/doctor/doctor.d.mts +217 -0
- package/api/doctor/doctor.doc.mjs +3 -2
- package/api/doctor/doctor.mjs +691 -52
- package/api/doctor/doctor.test.mjs +267 -18
- package/api/doctor/release-checks.test.mjs +156 -0
- package/api/doctor/theme-checks.mjs +17 -4
- package/api/doctor/theme-checks.test.mjs +223 -7
- package/api/error.d.mts +10 -0
- package/api/error.mjs +25 -0
- package/api/gap-report/gap-report.d.mts +3 -0
- package/api/gap-report/gap-report.doc.mjs +11 -3
- package/api/gap-report/gap-report.mjs +219 -52
- package/api/gap-report/gap-report.test.mjs +233 -0
- package/api/gap-report/gap-report.type.d.mts +41 -0
- package/api/gap-report/gap-report.type.mjs +18 -0
- package/api/hook/_adapter.mjs +3 -11
- package/api/hook/hook.doc.mjs +4 -0
- package/api/hook/hook.mjs +1 -1
- package/api/hook/list/list.d.mts +1 -1
- package/api/index.d.mts +2 -0
- package/api/index.mjs +2 -0
- package/api/init/_adapter.d.mts +22 -0
- package/api/init/_adapter.mjs +59 -0
- package/api/init/init.d.mts +7 -5
- package/api/init/init.doc.mjs +45 -10
- package/api/init/init.mjs +28 -4
- package/api/init/init.test.mjs +18 -2
- package/api/init/init.type.d.mts +50 -5
- package/api/init/init.type.mjs +39 -5
- package/api/init/remove/remove.mjs +17 -4
- package/api/init/remove/remove.test.mjs +114 -2
- package/api/init/run/run.d.mts +1 -1
- package/api/init/run/run.mjs +86 -12
- package/api/init/user/user.d.mts +14 -0
- package/api/init/user/user.mjs +87 -0
- package/api/init/user/user.test.mjs +232 -0
- package/api/integration/_adapter.d.mts +53 -0
- package/api/integration/_adapter.mjs +132 -0
- package/api/integration/add-contribution.component-names.test.mjs +66 -0
- package/api/integration/add-contribution.mjs +8 -4
- package/api/integration/add-contribution.test.mjs +4 -2
- package/api/integration/authoring-checks.mjs +192 -14
- package/api/integration/authoring-checks.test.mjs +1028 -0
- package/api/integration/authoring-checks.type.d.mts +143 -0
- package/api/integration/authoring-checks.type.mjs +74 -2
- package/api/integration/check/check.d.mts +96 -0
- package/api/integration/check/check.mjs +357 -0
- package/api/integration/check/check.test.mjs +489 -0
- package/api/integration/integration-check.type.d.mts +118 -0
- package/api/integration/integration-check.type.mjs +84 -0
- package/api/integration/integrationCheck.doc.d.mts +10 -0
- package/api/integration/integrationCheck.doc.mjs +73 -0
- package/api/integration/integrationComponentConflicts.doc.mjs +45 -6
- package/api/integration/integrationDocConflicts.doc.mjs +22 -5
- package/api/integration/pack-check.mjs +486 -123
- package/api/integration/pack-check.test.mjs +817 -10
- package/api/integration/validate-integration-case-disk.test.mjs +111 -0
- package/api/integration/validate-integration-fixes.test.mjs +73 -5
- package/api/integration/validate-integration-gaps.test.mjs +1975 -0
- package/api/integration/validate-integration.d.mts +23 -2
- package/api/integration/validate-integration.mjs +358 -45
- package/api/integration/validate-integration.test.mjs +88 -8
- package/api/integration/validate-integration.type.d.mts +105 -0
- package/api/integration/validate-integration.type.mjs +79 -1
- package/api/integration/validate-unread-theme-folders.test.mjs +3 -2
- package/api/integration/validateIntegration.doc.mjs +19 -3
- package/api/search/ORDERING.md +28 -0
- package/api/search/_adapter.d.mts +91 -0
- package/api/search/_adapter.mjs +172 -0
- package/api/search/_adapter.test.mjs +173 -0
- package/api/search/_candidate-score.d.mts +40 -0
- package/api/search/_candidate-score.mjs +238 -0
- package/api/search/_cards.json +6098 -0
- package/api/search/_compound.d.mts +50 -0
- package/api/search/_compound.mjs +170 -0
- package/api/search/_doc-searcher.d.mts +4 -0
- package/api/search/_doc-searcher.mjs +23 -0
- package/api/search/_doc-searcher.test.mjs +36 -0
- package/api/search/_doc-searcher.weights.json +1 -0
- package/api/search/_doc-text.d.mts +30 -0
- package/api/search/_doc-text.mjs +87 -0
- package/api/search/_entries.d.mts +63 -0
- package/api/search/_entries.mjs +232 -0
- package/api/search/_entries.test.mjs +48 -0
- package/api/search/_features.d.mts +35 -0
- package/api/search/_features.mjs +155 -0
- package/api/search/_gather-components.d.mts +26 -0
- package/api/search/_gather-components.mjs +284 -0
- package/api/search/_gather-docs.d.mts +20 -0
- package/api/search/_gather-docs.mjs +254 -0
- package/api/search/_gather-hooks.d.mts +12 -0
- package/api/search/_gather-hooks.mjs +52 -0
- package/api/search/_gather-templates.d.mts +25 -0
- package/api/search/_gather-templates.mjs +107 -0
- package/api/search/_lexical.d.mts +135 -0
- package/api/search/_lexical.mjs +351 -0
- package/api/search/_main-searcher.d.mts +19 -0
- package/api/search/_main-searcher.mjs +115 -0
- package/api/search/_main-searcher.test.mjs +106 -0
- package/api/search/_main-searcher.weights.json +1 -0
- package/api/search/_module-doc.d.mts +32 -0
- package/api/search/_module-doc.mjs +78 -0
- package/api/search/_order.d.mts +32 -0
- package/api/search/_order.mjs +162 -0
- package/api/search/_order.test.mjs +72 -0
- package/api/search/_priority.d.mts +50 -0
- package/api/search/_priority.mjs +139 -0
- package/api/search/_query-words.d.mts +25 -0
- package/api/search/_query-words.mjs +92 -0
- package/api/search/_query.d.mts +65 -0
- package/api/search/_query.mjs +176 -0
- package/api/search/_result.d.mts +97 -0
- package/api/search/_result.mjs +150 -0
- package/api/search/_score.d.mts +60 -0
- package/api/search/_score.mjs +283 -0
- package/api/search/_synonyms.d.mts +21 -0
- package/api/search/_synonyms.mjs +67 -0
- package/api/search/_template-searcher.d.mts +4 -0
- package/api/search/_template-searcher.mjs +23 -0
- package/api/search/_template-searcher.test.mjs +40 -0
- package/api/search/_template-searcher.weights.json +1 -0
- package/api/search/_titles.d.mts +33 -0
- package/api/search/_titles.mjs +65 -0
- package/api/search/_words.d.mts +64 -0
- package/api/search/_words.mjs +157 -0
- package/api/search/search.d.mts +22 -236
- package/api/search/search.doc.mjs +14 -7
- package/api/search/search.domain-priority.test.mjs +108 -18
- package/api/search/search.integration-check.test.mjs +24 -0
- package/api/search/search.mjs +59 -1904
- package/api/search/search.test.mjs +193 -15
- package/api/search/search.type.d.mts +20 -2
- package/api/search/search.type.mjs +12 -2
- package/api/search/tree.d.mts +15 -0
- package/api/search/tree.mjs +40 -0
- package/api/search/tree.test.mjs +66 -0
- package/api/search/tree.weights.json +1 -0
- package/api/swizzle/_adapter.mjs +2 -2
- package/api/swizzle/copy/copy.mjs +29 -15
- package/api/template/template-integration.test.mjs +1 -1
- package/api/template/template.mjs +5 -1
- package/api/template/template.test.mjs +120 -3
- package/api/theme/_adapter.d.mts +16 -0
- package/api/theme/_adapter.mjs +32 -5
- package/api/theme/build/build.d.mts +2 -1
- package/api/theme/build/build.family.test.mjs +64 -0
- package/api/theme/build/build.mjs +250 -38
- package/api/theme/build/build.packed-old-core.test.mjs +21 -3
- package/api/theme/build/font-warning.mjs +5 -3
- package/api/theme/build/font-warning.test.mjs +2 -1
- package/api/theme/remove/remove.test.mjs +2 -2
- package/api/theme/targets/targets.mjs +3 -10
- package/api/theme/themeBuild.doc.mjs +4 -4
- package/api/theme/themeTargets.doc.mjs +4 -0
- package/api/theme/use/use.test.mjs +1 -1
- package/api/upgrade/_adapter.d.mts +97 -11
- package/api/upgrade/_adapter.mjs +315 -32
- package/api/upgrade/registry/registry.d.mts +10 -4
- package/api/upgrade/registry/registry.mjs +33 -16
- package/api/upgrade/registry/registry.test.mjs +85 -0
- package/api/upgrade/run/cli-behind-core.test.mjs +438 -0
- package/api/upgrade/run/run.d.mts +4 -2
- package/api/upgrade/run/run.mjs +48 -4
- package/api/upgrade/run/run.test.mjs +417 -3
- package/api/upgrade/status/status.d.mts +21 -5
- package/api/upgrade/status/status.mjs +45 -8
- package/api/upgrade/upgrade.doc.mjs +16 -8
- package/api/upgrade/upgrade.mjs +18 -3
- package/api/upgrade/upgrade.test.mjs +194 -0
- package/api/upgrade/upgrade.type.d.mts +28 -3
- package/api/upgrade/upgrade.type.mjs +24 -7
- package/assets/codemods/__tests__/registry.test.mjs +1 -0
- package/assets/codemods/registry.mjs +1 -0
- package/assets/codemods/runner.mjs +7 -1
- package/assets/codemods/transforms/v0.7.0/__tests__/validate-data-token-ownership.test.mjs +11 -0
- package/assets/codemods/transforms/v0.7.0/validate-data-token-ownership.mjs +3 -3
- package/assets/codemods/transforms/v0.7.2/__tests__/migrate-list-edge-compensation-to-edge.test.mjs +120 -0
- package/assets/codemods/transforms/v0.7.2/index.mjs +20 -0
- package/assets/codemods/transforms/v0.7.2/migrate-list-edge-compensation-to-edge.mjs +198 -0
- package/assets/discover/official-packages.json +367 -0
- package/assets/docs/README.md +10 -0
- package/assets/docs/author-a-theme.doc.mjs +5 -5
- package/assets/docs/browser-support.doc.mjs +1 -1
- package/assets/docs/getting-started.doc.mjs +26 -6
- package/assets/docs/is-my-code-good.doc.mjs +287 -0
- package/assets/docs/styling-overview.doc.mjs +1 -1
- package/assets/docs/theme.doc.dense.mjs +1 -1
- package/assets/docs/theme.doc.mjs +2 -2
- package/assets/docs/theme.doc.zh.mjs +1 -1
- package/assets/docs/tree/add-a-component.doc.mjs +22 -2
- package/assets/docs/tree/add-a-theme.doc.mjs +14 -4
- package/assets/docs/tree/add-a-topic.doc.mjs +54 -9
- package/assets/docs/tree/agent-guidance.doc.mjs +19 -5
- package/assets/docs/tree/api.doc.mjs +6 -0
- package/assets/docs/tree/authoring.doc.mjs +61 -0
- package/assets/docs/tree/block-template.doc.mjs +8 -20
- package/assets/docs/tree/build-the-template.doc.mjs +1 -1
- package/assets/docs/tree/building-blocks.doc.mjs +6 -2
- package/assets/docs/tree/check-the-props.doc.mjs +201 -0
- package/assets/docs/tree/check-your-docs.doc.mjs +69 -11
- package/assets/docs/tree/checks.doc.mjs +32 -24
- package/assets/docs/tree/ci-and-containers.doc.mjs +101 -0
- package/assets/docs/tree/cli-command.doc.mjs +142 -0
- package/assets/docs/tree/cli.doc.mjs +7 -1
- package/assets/docs/tree/codemods.doc.mjs +17 -7
- package/assets/docs/tree/commands.doc.mjs +7 -1
- package/assets/docs/tree/component-family.doc.mjs +8 -6
- package/assets/docs/tree/component-imports.doc.mjs +21 -3
- package/assets/docs/tree/components.doc.mjs +7 -1
- package/assets/docs/tree/computer-agent-guide.doc.mjs +160 -0
- package/assets/docs/tree/computer-integrations.doc.mjs +93 -0
- package/assets/docs/tree/configuration.doc.mjs +8 -4
- package/assets/docs/tree/debug-and-gap-reports.doc.mjs +41 -22
- package/assets/docs/tree/define-the-theme.doc.mjs +7 -6
- package/assets/docs/tree/describe-the-component.doc.mjs +3 -3
- package/assets/docs/tree/docs.doc.mjs +9 -3
- package/assets/docs/tree/document-the-template.doc.mjs +1 -1
- package/assets/docs/tree/document-the-theme.doc.mjs +4 -4
- package/assets/docs/tree/export-template-assets.doc.mjs +1 -1
- package/assets/docs/tree/extend-or-replace.doc.mjs +19 -9
- package/assets/docs/{authoring.doc.mjs → tree/field-reference.doc.mjs} +4 -3
- package/assets/docs/tree/fonts-and-assets.doc.mjs +3 -3
- package/assets/docs/tree/generate-a-palette.doc.mjs +8 -6
- package/assets/docs/tree/global-integrations.doc.mjs +124 -0
- package/assets/docs/tree/global.doc.mjs +131 -0
- package/assets/docs/tree/grade-template-with-agent.doc.mjs +5 -5
- package/assets/docs/tree/help.doc.mjs +2 -2
- package/assets/docs/tree/host-entry.doc.mjs +128 -0
- package/assets/docs/tree/install-once.doc.mjs +105 -0
- package/assets/docs/tree/layout-spacing.doc.mjs +2 -3
- package/assets/docs/tree/layout.doc.mjs +6 -6
- package/assets/docs/tree/links.doc.mjs +7 -6
- package/assets/docs/tree/migration-setup.doc.mjs +3 -2
- package/assets/docs/tree/migration-verification.doc.mjs +0 -1
- package/assets/docs/tree/migration.doc.mjs +0 -1
- package/assets/docs/tree/monorepos.doc.mjs +84 -0
- package/assets/docs/tree/package-and-test.doc.mjs +1 -1
- package/assets/docs/tree/page-template.doc.mjs +4 -8
- package/assets/docs/tree/problems.doc.mjs +205 -0
- package/assets/docs/tree/project-global-or-both.doc.mjs +131 -0
- package/assets/docs/tree/publishing.doc.mjs +6 -6
- package/assets/docs/tree/quick-start.doc.mjs +54 -28
- package/assets/docs/tree/reference.doc.mjs +192 -0
- package/assets/docs/tree/replace-a-core-component.doc.mjs +15 -7
- package/assets/docs/tree/replace-a-core-template.doc.mjs +10 -12
- package/assets/docs/tree/scaffold.doc.mjs +1 -1
- package/assets/docs/tree/sections-and-placement.doc.mjs +9 -11
- package/assets/docs/tree/see-it-in-an-app.doc.mjs +17 -5
- package/assets/docs/tree/ship.doc.mjs +2 -2
- package/assets/docs/tree/short-and-findable.doc.mjs +9 -8
- package/assets/docs/tree/single-component.doc.mjs +15 -6
- package/assets/docs/tree/start-a-template.doc.mjs +18 -8
- package/assets/docs/tree/subcomponent.doc.mjs +6 -6
- package/assets/docs/tree/template-assets.doc.mjs +2 -2
- package/assets/docs/tree/template-doc-overview.doc.mjs +6 -17
- package/assets/docs/tree/template-fonts.doc.mjs +1 -1
- package/assets/docs/tree/template-grading-rubric.doc.mjs +17 -38
- package/assets/docs/tree/template-icons.doc.mjs +1 -1
- package/assets/docs/tree/template-images-media.doc.mjs +1 -1
- package/assets/docs/tree/template-styles.doc.mjs +2 -2
- package/assets/docs/tree/templates.doc.mjs +7 -1
- package/assets/docs/tree/test-in-an-app.doc.mjs +7 -7
- package/assets/docs/tree/test-template-in-app.doc.mjs +5 -5
- package/assets/docs/tree/themes.doc.mjs +5 -1
- package/assets/docs/tree/tokens-and-setup.doc.mjs +19 -15
- package/assets/docs/tree/tokens-data.doc.mjs +2 -2
- package/assets/docs/tree/troubleshooting.doc.mjs +29 -13
- package/assets/docs/tree/type-scale.doc.mjs +3 -3
- package/assets/docs/tree/uninstall.doc.mjs +109 -0
- package/assets/docs/tree/updates.doc.mjs +92 -0
- package/assets/docs/tree/upgrading.doc.mjs +6 -6
- package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +15 -3
- package/assets/docs/tree/verify-packed-template.doc.mjs +3 -3
- package/assets/docs/tree/versioning.doc.mjs +14 -9
- package/assets/docs/tree/who-answers.doc.mjs +119 -0
- package/assets/docs/tree/write-good-templates.doc.mjs +1 -1
- package/assets/docs/tree/write-the-template-file.doc.mjs +7 -6
- package/assets/docs/use-a-theme.doc.mjs +2 -2
- package/assets/docs/use-integrations.doc.mjs +120 -0
- package/assets/docs/working-with-ai.doc.mjs +70 -13
- package/assets/templates/themes/butter/butterTheme.ts +4 -2
- package/assets/templates/themes/stone/stoneTheme.ts +4 -2
- package/assets/templates/themes/y2k/y2kTheme.ts +4 -2
- package/assets/theme.template.ts +1 -1
- package/authoring/codemod/codemod.doc.mjs +7 -3
- package/authoring/config/config.doc.mjs +9 -6
- package/authoring/config/type.ts +4 -2
- package/authoring/debug/parse.d.mts +5 -5
- package/authoring/discover/discover.doc.mjs +7 -1
- package/authoring/doctypes/_schema.d.mts +8 -3
- package/authoring/doctypes/_schema.mjs +1 -0
- package/authoring/doctypes/base/graph-fields.doc.mjs +6 -4
- package/authoring/doctypes/command/command.doc.mjs +20 -12
- package/authoring/doctypes/command/type.ts +14 -0
- package/authoring/doctypes/component/component.doc.mjs +30 -27
- package/authoring/doctypes/component/type.ts +21 -8
- package/authoring/doctypes/enum/enum.doc.mjs +7 -4
- package/authoring/doctypes/function/function.doc.mjs +9 -8
- package/authoring/doctypes/hook/hook.doc.mjs +5 -4
- package/authoring/doctypes/hook/type.ts +4 -0
- package/authoring/doctypes/namespace/namespace.doc.mjs +7 -6
- package/authoring/doctypes/reference/reference.doc.mjs +12 -11
- package/authoring/doctypes/schema/schema.doc.mjs +10 -10
- package/authoring/doctypes/template/integration-template.doc.d.mts +11 -0
- package/authoring/doctypes/template/integration-template.doc.mjs +49 -0
- package/authoring/doctypes/template/parse.d.mts +6 -2
- package/authoring/doctypes/template/parse.mjs +3 -1
- package/authoring/doctypes/template/template.doc.mjs +3 -3
- package/authoring/doctypes/template/type.ts +22 -0
- package/authoring/doctypes/theme/theme.doc.mjs +2 -2
- package/authoring/gap-report/gap-report.doc.mjs +2 -2
- package/authoring/identity/identity.doc.mjs +3 -3
- package/authoring/index.d.ts +2 -0
- package/authoring/integration/integration.doc.mjs +30 -6
- package/authoring/integration/parse.test.mjs +21 -0
- package/authoring/integration/schema.d.mts +16 -3
- package/authoring/integration/schema.mjs +34 -2
- package/authoring/integration/type.ts +13 -1
- package/clients/cli/bin/astryx.mjs +11 -65
- package/clients/cli/cli-command.test.mjs +166 -0
- package/clients/cli/command-result-coverage.test.mjs +6 -5
- package/clients/cli/commands/blog.doc.mjs +1 -0
- package/clients/cli/commands/build-theme.batch-report.test.mjs +17 -3
- package/clients/cli/commands/build-theme.color-scheme.test.mjs +1 -1
- package/clients/cli/commands/build-theme.font-warning.test.mjs +3 -3
- package/clients/cli/commands/build-theme.path-safety.test.mjs +224 -6
- package/clients/cli/commands/build-theme.registry.test.mjs +5 -2
- package/clients/cli/commands/build.doc.mjs +1 -0
- package/clients/cli/commands/build.exit-codes-doc.test.mjs +4 -0
- package/clients/cli/commands/cli-postinstall.test.mjs +49 -1
- package/clients/cli/commands/component.doc.mjs +1 -0
- package/clients/cli/commands/{component/index.mjs → component.mjs} +37 -37
- package/clients/cli/commands/component.test.mjs +6 -6
- package/clients/cli/commands/discover.broken-integration.test.mjs +11 -7
- package/clients/cli/commands/discover.doc.mjs +9 -1
- package/clients/cli/commands/discover.mjs +144 -93
- package/clients/cli/commands/discover.no-source.test.mjs +448 -33
- package/clients/cli/commands/discover.sources.test.mjs +20 -1
- package/clients/cli/commands/docs.doc.mjs +3 -2
- package/clients/cli/commands/docs.mjs +50 -20
- package/clients/cli/commands/docs.test.mjs +16 -16
- package/clients/cli/commands/doctor-integration-components.doc.mjs +19 -4
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +20 -5
- package/clients/cli/commands/doctor-integration-templates.doc.mjs +1 -0
- package/clients/cli/commands/doctor-integration-validate.doc.mjs +22 -2
- package/clients/cli/commands/doctor-integration.test.mjs +936 -3
- package/clients/cli/commands/doctor.doc.mjs +12 -2
- package/clients/cli/commands/doctor.mjs +332 -7
- package/clients/cli/commands/doctor.test.mjs +75 -4
- package/clients/cli/commands/gap-report.doc.mjs +15 -2
- package/clients/cli/commands/gap-report.mjs +24 -2
- package/clients/cli/commands/gap-report.test.mjs +79 -0
- package/clients/cli/commands/hook.doc.mjs +1 -0
- package/clients/cli/commands/{hook/index.mjs → hook.mjs} +22 -22
- package/clients/cli/commands/import-hint-correctness.test.mjs +1 -1
- package/clients/cli/commands/init.behavior.test.mjs +235 -1
- package/clients/cli/commands/init.doc.mjs +55 -10
- package/clients/cli/commands/init.flag-help.test.mjs +1 -0
- package/clients/cli/commands/init.mjs +2 -2
- package/clients/cli/commands/integration-add.doc.mjs +7 -0
- package/clients/cli/commands/integration-authoring.test.mjs +49 -3
- package/clients/cli/commands/integration-check.doc.mjs +93 -0
- package/clients/cli/commands/integration-check.test.mjs +489 -0
- package/clients/cli/commands/integration-pack.doc.mjs +8 -1
- package/clients/cli/commands/integration-verify.doc.mjs +8 -1
- package/clients/cli/commands/integration.doc.mjs +6 -2
- package/clients/cli/commands/integration.mjs +119 -7
- package/clients/cli/commands/json-contract.test.mjs +11 -2
- package/clients/cli/commands/manifest.doc.mjs +2 -1
- package/clients/cli/commands/manifest.mjs +67 -0
- package/clients/cli/commands/outside-project.test.mjs +874 -0
- package/clients/cli/commands/postinstall.doc.mjs +23 -0
- package/clients/cli/commands/postinstall.mjs +31 -0
- package/clients/cli/commands/search.doc.mjs +1 -0
- package/clients/cli/commands/search.mjs +16 -11
- package/clients/cli/commands/search.test.mjs +429 -296
- package/clients/cli/commands/setup-nudge.test.mjs +180 -2
- package/clients/cli/commands/swizzle.doc.mjs +7 -0
- package/clients/cli/commands/swizzle.mjs +5 -3
- package/clients/cli/commands/swizzle.routing.test.mjs +19 -2
- package/clients/cli/commands/template.doc.mjs +1 -0
- package/clients/cli/commands/text-json-parity.test.mjs +5 -0
- package/clients/cli/commands/theme-add-lifecycle.test.mjs +3 -3
- package/clients/cli/commands/theme-add.doc.mjs +8 -1
- package/clients/cli/commands/theme-build.doc.mjs +3 -2
- package/clients/cli/commands/theme-eject.doc.mjs +1 -0
- package/clients/cli/commands/theme-list.behavior.test.mjs +6 -0
- package/clients/cli/commands/theme-list.doc.mjs +1 -0
- package/clients/cli/commands/theme-palette-generate.doc.mjs +1 -0
- package/clients/cli/commands/theme-remove.doc.mjs +7 -0
- package/clients/cli/commands/theme-targets.doc.mjs +1 -0
- package/clients/cli/commands/theme-template.doc.mjs +1 -0
- package/clients/cli/commands/theme-use.doc.mjs +7 -0
- package/clients/cli/commands/{build-theme.mjs → theme.mjs} +27 -14
- package/clients/cli/commands/upgrade.config-ordering.test.mjs +2 -1
- package/clients/cli/commands/upgrade.doc.mjs +26 -3
- package/clients/cli/commands/upgrade.file-protection.test.mjs +3 -2
- package/clients/cli/commands/upgrade.hook-output.test.mjs +2 -1
- package/clients/cli/commands/upgrade.mjs +9 -2
- package/clients/cli/commands/upgrade.older-cli.test.mjs +160 -0
- package/clients/cli/commands/upgrade.subfolder-path.test.mjs +97 -0
- package/clients/cli/index.mjs +156 -100
- package/clients/cli/lib/cli-error.mjs +4 -1
- package/clients/cli/lib/component-format.mjs +1 -1
- package/clients/cli/lib/component-format.test.mjs +1 -1
- package/clients/cli/lib/define-command.mjs +14 -9
- package/clients/cli/lib/exit-codes.test.mjs +5 -0
- package/clients/cli/lib/json-shim.mjs +3 -1
- package/clients/cli/lib/manifest.d.ts +9 -0
- package/clients/cli/lib/manifest.mjs +17 -1
- package/clients/cli/lib/manifest.test.mjs +37 -0
- package/clients/cli/lib/welcome-box.mjs +50 -0
- package/clients/cli/run.mjs +108 -0
- package/foundation/agent-docs/agent-doc-state.d.mts +67 -13
- package/foundation/agent-docs/agent-doc-state.mjs +123 -14
- package/foundation/agent-docs/agent-docs.d.mts +104 -15
- package/foundation/agent-docs/agent-docs.mjs +1028 -114
- package/foundation/agent-docs/agent-docs.path-safety.test.mjs +1239 -17
- package/foundation/agent-docs/agent-docs.test.mjs +683 -39
- package/foundation/agent-docs/computer-agent-text.d.mts +170 -0
- package/foundation/agent-docs/computer-agent-text.mjs +750 -0
- package/foundation/agent-docs/computer-agent-text.test.mjs +699 -0
- package/foundation/config/project.d.mts +35 -3
- package/foundation/config/project.mjs +243 -26
- package/foundation/config/project.test.mjs +122 -0
- package/foundation/config/theme-state.mjs +5 -4
- package/foundation/discovery/authoring-self-docs.d.mts +7 -0
- package/foundation/discovery/authoring-self-docs.mjs +17 -4
- package/foundation/discovery/authoring-self-docs.test.mjs +15 -3
- package/foundation/discovery/authoring-surface.d.mts +1 -1
- package/foundation/discovery/authoring-surface.mjs +2 -2
- package/foundation/discovery/authoring-surface.test.mjs +1 -1
- package/foundation/discovery/cli-self-docs.d.mts +2 -1
- package/foundation/discovery/cli-self-docs.mjs +22 -4
- package/foundation/discovery/cli-self-docs.test.mjs +3 -2
- package/foundation/discovery/component-discovery.d.mts +227 -10
- package/foundation/discovery/component-discovery.export-names.test.mjs +760 -0
- package/foundation/discovery/component-discovery.mjs +940 -57
- package/foundation/discovery/component-discovery.test.mjs +96 -0
- package/foundation/discovery/component-loader.d.mts +1 -1
- package/foundation/discovery/component-replacement.mjs +20 -1
- package/foundation/discovery/component-replacement.test.mjs +40 -0
- package/foundation/discovery/copied-passages.d.mts +216 -0
- package/foundation/discovery/copied-passages.mjs +720 -0
- package/foundation/discovery/copied-passages.test.mjs +124 -0
- package/foundation/discovery/doc-consistency.d.mts +34 -0
- package/foundation/discovery/doc-consistency.mjs +513 -0
- package/foundation/discovery/doc-consistency.test.mjs +347 -0
- package/foundation/discovery/doc-fluff.d.mts +112 -0
- package/foundation/discovery/doc-fluff.mjs +328 -0
- package/foundation/discovery/doc-fluff.test.mjs +142 -0
- package/foundation/discovery/doc-types.d.mts +157 -0
- package/foundation/discovery/doc-types.mjs +1231 -0
- package/foundation/discovery/doc-types.test.mjs +744 -0
- package/foundation/discovery/docs-discovery.d.mts +88 -0
- package/foundation/discovery/docs-discovery.mjs +97 -3
- package/foundation/discovery/integration-doc-files.d.mts +22 -0
- package/foundation/discovery/integration-doc-files.mjs +231 -0
- package/foundation/discovery/integration-doc-files.test.mjs +246 -0
- package/foundation/discovery/module-exports.d.mts +68 -0
- package/foundation/discovery/module-exports.mjs +609 -31
- package/foundation/discovery/module-exports.test.mjs +172 -0
- package/foundation/discovery/package-tsconfig.d.mts +14 -0
- package/foundation/discovery/package-tsconfig.mjs +228 -0
- package/foundation/discovery/package-tsconfig.test.mjs +210 -0
- package/foundation/discovery/project-typescript.d.mts +32 -0
- package/foundation/discovery/project-typescript.mjs +89 -0
- package/foundation/discovery/prop-drift.d.mts +297 -0
- package/foundation/discovery/prop-drift.mjs +2428 -0
- package/foundation/discovery/prop-drift.test.mjs +2337 -0
- package/foundation/discovery/runner-allowlist.d.mts +38 -0
- package/foundation/discovery/runner-allowlist.mjs +51 -0
- package/foundation/discovery/runner-commands.d.mts +77 -0
- package/foundation/discovery/runner-commands.mjs +294 -0
- package/foundation/discovery/runner-commands.test.mjs +128 -0
- package/foundation/discovery/stray-pointers.d.mts +52 -0
- package/foundation/discovery/stray-pointers.mjs +293 -0
- package/foundation/discovery/stray-pointers.test.mjs +86 -0
- package/foundation/discovery/template-adapter.mjs +92 -6
- package/foundation/discovery/template-needs.mjs +6 -46
- package/foundation/discovery/theme-discovery.mjs +147 -3
- package/foundation/discovery/theme-imports.mjs +8 -4
- package/foundation/discovery/theme-imports.test.mjs +1 -1
- package/foundation/discovery/type-match.d.mts +53 -0
- package/foundation/discovery/type-match.mjs +660 -0
- package/foundation/discovery/type-match.test.mjs +169 -0
- package/foundation/discovery/type-text.d.mts +68 -0
- package/foundation/discovery/type-text.mjs +658 -0
- package/foundation/discovery/type-text.test.mjs +196 -0
- package/foundation/discovery/unresolved-references.d.mts +62 -0
- package/foundation/discovery/unresolved-references.mjs +790 -0
- package/foundation/discovery/unresolved-references.test.mjs +567 -0
- package/foundation/doc-compiler/doc-loads.test.mjs +84 -10
- package/foundation/doc-compiler/inputs.mjs +27 -1
- package/foundation/doc-compiler/inputs.test.mjs +0 -1
- package/foundation/doc-compiler/links.d.mts +41 -5
- package/foundation/doc-compiler/links.mjs +167 -28
- package/foundation/doc-compiler/links.test.mjs +97 -4
- package/foundation/doc-compiler/read.d.mts +1 -1
- package/foundation/doc-compiler/read.mjs +59 -1
- package/foundation/doc-compiler/read.test.mjs +11 -2
- package/foundation/doc-compiler/split-topic-keywords.test.mjs +3 -2
- package/foundation/doc-compiler/tree.d.mts +32 -6
- package/foundation/doc-compiler/tree.mjs +107 -44
- package/foundation/doc-compiler/tree.test.mjs +14 -7
- package/foundation/env/cli-command.d.mts +83 -0
- package/foundation/env/cli-command.mjs +152 -0
- package/foundation/env/cli-command.test.mjs +129 -0
- package/foundation/env/node-version.test.mjs +15 -3
- package/foundation/env/package-manager.d.mts +93 -9
- package/foundation/env/package-manager.global.test.mjs +66 -0
- package/foundation/env/package-manager.mjs +184 -13
- package/foundation/env/package-manager.test.mjs +341 -15
- package/foundation/env/project-scope.d.mts +9 -0
- package/foundation/env/project-scope.mjs +33 -0
- package/foundation/env/search-path.d.mts +42 -0
- package/foundation/env/search-path.mjs +205 -0
- package/foundation/env/search-path.test.mjs +122 -0
- package/foundation/env/user-dirs.d.mts +39 -0
- package/foundation/env/user-dirs.mjs +93 -0
- package/foundation/env/user-dirs.test.mjs +72 -0
- package/foundation/env/user-settings.d.mts +46 -0
- package/foundation/env/user-settings.mjs +106 -0
- package/foundation/env/user-settings.test.mjs +64 -0
- package/foundation/fs/file-protection.mjs +15 -1
- package/foundation/fs/module-loader.d.mts +2 -1
- package/foundation/fs/module-loader.mjs +60 -4
- package/foundation/fs/module-loader.stdout.test.mjs +3 -2
- package/foundation/fs/module-loader.test.mjs +194 -0
- package/foundation/fs/path-compare.d.mts +33 -0
- package/foundation/fs/path-compare.mjs +73 -0
- package/foundation/fs/paths.d.mts +122 -4
- package/foundation/fs/paths.mjs +675 -29
- package/foundation/fs/paths.test.mjs +439 -54
- package/foundation/fs/read-record.d.mts +18 -0
- package/foundation/fs/read-record.mjs +131 -0
- package/foundation/fs/read-record.test.mjs +77 -0
- package/foundation/integrations/autolink.d.mts +2 -1
- package/foundation/integrations/autolink.mjs +4 -13
- package/foundation/integrations/cli-peer-version.d.mts +36 -0
- package/foundation/integrations/cli-peer-version.mjs +132 -0
- package/foundation/integrations/cli-peer-version.test.mjs +354 -0
- package/foundation/integrations/computer-integrations.d.mts +81 -0
- package/foundation/integrations/computer-integrations.mjs +345 -0
- package/foundation/integrations/computer-integrations.test.mjs +292 -0
- package/foundation/integrations/contribution-inventory.d.mts +26 -20
- package/foundation/integrations/contribution-inventory.mjs +97 -8
- package/foundation/integrations/exports-subpaths.d.mts +57 -0
- package/foundation/integrations/exports-subpaths.mjs +113 -0
- package/foundation/integrations/integration-warnings.mjs +3 -2
- package/foundation/integrations/integration-warnings.test.mjs +8 -9
- package/foundation/integrations/integrations.d.mts +51 -1
- package/foundation/integrations/integrations.mjs +106 -4
- package/foundation/integrations/issue.ts +6 -0
- package/foundation/integrations/public-imports.d.mts +118 -0
- package/foundation/integrations/public-imports.mjs +1769 -0
- package/foundation/integrations/public-imports.test.mjs +1793 -0
- package/foundation/integrations/validate-contributions.d.mts +117 -0
- package/foundation/integrations/validate-contributions.mjs +1209 -14
- package/foundation/release/agent-text-worker.d.mts +4 -0
- package/foundation/release/agent-text-worker.mjs +52 -0
- package/foundation/release/cache.d.mts +310 -0
- package/foundation/release/cache.mjs +1216 -0
- package/foundation/release/cache.test.mjs +923 -0
- package/foundation/release/choose.d.mts +207 -0
- package/foundation/release/choose.mjs +677 -0
- package/foundation/release/choose.test.mjs +427 -0
- package/foundation/release/core-worker.d.mts +4 -0
- package/foundation/release/core-worker.mjs +38 -0
- package/foundation/release/global-state.d.mts +263 -0
- package/foundation/release/global-state.mjs +474 -0
- package/foundation/release/global-state.test.mjs +381 -0
- package/foundation/release/handoff.d.mts +79 -0
- package/foundation/release/handoff.e2e.test.mjs +278 -0
- package/foundation/release/handoff.mjs +524 -0
- package/foundation/release/lock-lease.d.mts +23 -0
- package/foundation/release/lock-lease.mjs +80 -0
- package/foundation/release/notices.d.mts +307 -0
- package/foundation/release/notices.mjs +707 -0
- package/foundation/release/notices.test.mjs +586 -0
- package/foundation/release/npm-guard.d.mts +4 -0
- package/foundation/release/npm-guard.mjs +126 -0
- package/foundation/release/project.d.mts +141 -0
- package/foundation/release/project.mjs +466 -0
- package/foundation/release/project.test.mjs +288 -0
- package/foundation/release/refresh-worker.d.mts +4 -0
- package/foundation/release/refresh-worker.mjs +27 -0
- package/foundation/release/run-context.d.mts +47 -0
- package/foundation/release/run-context.mjs +163 -0
- package/foundation/release/update-notice-env.d.mts +28 -0
- package/foundation/release/update-notice-env.mjs +39 -0
- package/foundation/response/base.d.ts +26 -3
- package/foundation/response/error-codes.d.mts +3 -1
- package/foundation/response/error-codes.doc.mjs +12 -0
- package/foundation/response/error-codes.mjs +17 -0
- package/foundation/response/error-codes.test.mjs +2 -0
- package/foundation/response/json-contract.test.mjs +7 -2
- package/foundation/response/json.mjs +4 -1
- package/foundation/response/response-types.doc.mjs +22 -11
- package/foundation/response/response-types.doc.test.mjs +46 -0
- package/foundation/response/response.doc.mjs +3 -3
- package/foundation/route/route.d.mts +285 -0
- package/foundation/route/route.mjs +324 -0
- package/foundation/route/route.test.mjs +153 -0
- package/foundation/runtime/hosted-runtime.test.mjs +403 -0
- package/foundation/runtime/locked-versions.d.mts +32 -0
- package/foundation/runtime/locked-versions.mjs +65 -0
- package/foundation/runtime/package-root.d.mts +91 -0
- package/foundation/runtime/package-root.mjs +174 -0
- package/foundation/runtime/package-set.d.mts +62 -0
- package/foundation/runtime/package-set.mjs +130 -0
- package/foundation/runtime/package-set.test.mjs +432 -0
- package/foundation/text/string-utils.d.mts +2 -1
- package/foundation/text/string-utils.mjs +16 -5
- package/foundation/text/suggest-order.d.mts +72 -0
- package/foundation/text/suggest-order.mjs +363 -0
- package/foundation/text/suggest-order.test.mjs +259 -0
- package/foundation/xle/browser-imports.test.mjs +74 -0
- package/foundation/xle/registry.mjs +4 -0
- package/foundation/xle/registry.test.mjs +28 -0
- package/host/door-conformance.test.mjs +274 -0
- package/host/index.d.ts +116 -0
- package/host/index.mjs +295 -0
- package/host/index.test.mjs +302 -0
- package/package.json +16 -11
- package/scripts/postinstall.mjs +24 -5
- package/assets/docs/tree/integrations.doc.mjs +0 -40
package/api/hook/_adapter.mjs
CHANGED
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
* @position api/hook/_adapter.mjs — shared by ./list, ./detail, ./detail/params
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import {requireCoreDir} from '../../foundation/fs/paths.mjs';
|
|
18
18
|
import {
|
|
19
19
|
findHookDoc,
|
|
20
20
|
getAllHookNames,
|
|
21
21
|
} from '../../foundation/discovery/hook-discovery.mjs';
|
|
22
22
|
import {loadDocs} from '../../foundation/discovery/component-loader.mjs';
|
|
23
23
|
import {levenshteinDistance} from '../../foundation/text/string-utils.mjs';
|
|
24
|
-
import {AstryxError} from '../error.mjs';
|
|
24
|
+
import {AstryxError, coreDirOrThrow} from '../error.mjs';
|
|
25
25
|
import {ERROR_CODES} from '../../foundation/response/error-codes.mjs';
|
|
26
26
|
|
|
27
27
|
/** The package that owns Core's components, hooks, and codemods. */
|
|
@@ -34,15 +34,7 @@ export {CORE_PROVIDER_ID as CORE_PACKAGE} from '../../foundation/identity/provid
|
|
|
34
34
|
* @returns {string} Absolute path to the core package directory.
|
|
35
35
|
*/
|
|
36
36
|
export function resolveCoreDir(cwd) {
|
|
37
|
-
|
|
38
|
-
if (!coreDir) {
|
|
39
|
-
throw new AstryxError(
|
|
40
|
-
'Could not find @astryxdesign/core package',
|
|
41
|
-
undefined,
|
|
42
|
-
ERROR_CODES.ERR_CORE_NOT_FOUND,
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
return coreDir;
|
|
37
|
+
return coreDirOrThrow(requireCoreDir, cwd);
|
|
46
38
|
}
|
|
47
39
|
|
|
48
40
|
/**
|
package/api/hook/hook.doc.mjs
CHANGED
|
@@ -90,6 +90,10 @@ export const doc = {
|
|
|
90
90
|
code: 'ERR_CORE_NOT_FOUND',
|
|
91
91
|
when: '@astryxdesign/core cannot be resolved from cwd',
|
|
92
92
|
},
|
|
93
|
+
{
|
|
94
|
+
code: 'ERR_VERSIONS_UNAVAILABLE',
|
|
95
|
+
when: 'outside a project, or in a project with nothing installed, the Core of the release that answers is not beside it or cached, and cannot be installed into the per-user cache (offline, a registry without it, or an unwritable cache)',
|
|
96
|
+
},
|
|
93
97
|
{
|
|
94
98
|
code: 'ERR_UNKNOWN_CATEGORY',
|
|
95
99
|
when: 'options.category is not a string or matches no known category',
|
package/api/hook/hook.mjs
CHANGED
|
@@ -43,7 +43,7 @@ export async function hook(name, options = {}) {
|
|
|
43
43
|
zh = false,
|
|
44
44
|
} = options;
|
|
45
45
|
|
|
46
|
-
// Default detail level mirrors the CLI (see commands/hook
|
|
46
|
+
// Default detail level mirrors the CLI (see commands/hook.mjs):
|
|
47
47
|
// single-hook views default to 'full', list-style views (--list,
|
|
48
48
|
// --category, or no name) default to 'brief' (scannable name lists).
|
|
49
49
|
// Keeping this in sync with the CLI is what the API↔CLI parity test checks.
|
package/api/hook/list/list.d.mts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
export function list({ cwd, category, detail, zh, lang, }?: {
|
|
14
14
|
cwd?: string | undefined;
|
|
15
15
|
category?: string | undefined;
|
|
16
|
-
detail?: "
|
|
16
|
+
detail?: "names" | "compact" | "full" | "brief" | undefined;
|
|
17
17
|
zh?: boolean | undefined;
|
|
18
18
|
lang?: string | null | undefined;
|
|
19
19
|
}): Promise<import("../hook.type.mjs").HookListResponse>;
|
package/api/index.d.mts
CHANGED
|
@@ -16,6 +16,7 @@ export { init } from "./init/init.mjs";
|
|
|
16
16
|
export { doctor } from "./doctor/doctor.mjs";
|
|
17
17
|
export { integrationAddTheme } from "./integration/add-theme.mjs";
|
|
18
18
|
export { integrationPackCheck } from "./integration/pack-check.mjs";
|
|
19
|
+
export { integrationCheck } from "./integration/check/check.mjs";
|
|
19
20
|
export { AstryxError } from "./error.mjs";
|
|
20
21
|
export { logger } from "./logger.mjs";
|
|
21
22
|
export * from "../foundation/response/batch.type.mjs";
|
|
@@ -37,6 +38,7 @@ export * from "./integration/integration-authoring.type.mjs";
|
|
|
37
38
|
export * from "./integration/pack-check.type.mjs";
|
|
38
39
|
export * from "./integration/validate-integration.type.mjs";
|
|
39
40
|
export * from "./integration/authoring-checks.type.mjs";
|
|
41
|
+
export * from "./integration/integration-check.type.mjs";
|
|
40
42
|
export type Logger = import("./logger.mjs").Logger;
|
|
41
43
|
export { themeBuild, themeAdd, themeRemove, themeUse, themeEject, themeTemplate, themeList, themeListAvailable, themeListCopySources, themeTargets, themePaletteGenerate, generateTonalPalette, listThemes } from "./theme/theme.mjs";
|
|
42
44
|
export { integrationAdd, integrationAddAgentDoc, integrationAddCodemod, integrationAddComponent, integrationAddDoc, integrationAddTemplate } from "./integration/add-contribution.mjs";
|
package/api/index.mjs
CHANGED
|
@@ -67,6 +67,7 @@ export {
|
|
|
67
67
|
integrationComponentConflicts,
|
|
68
68
|
integrationDocConflicts,
|
|
69
69
|
} from './integration/authoring-checks.mjs';
|
|
70
|
+
export {integrationCheck} from './integration/check/check.mjs';
|
|
70
71
|
export {AstryxError} from './error.mjs';
|
|
71
72
|
// The one shared logger: the `logger` instance side-effecting commands write
|
|
72
73
|
// through, plus its generated `Logger` type. Part of the public surface so an
|
|
@@ -100,3 +101,4 @@ export * from './integration/integration-authoring.type.mjs';
|
|
|
100
101
|
export * from './integration/pack-check.type.mjs';
|
|
101
102
|
export * from './integration/validate-integration.type.mjs';
|
|
102
103
|
export * from './integration/authoring-checks.type.mjs';
|
|
104
|
+
export * from './integration/integration-check.type.mjs';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
|
|
2
|
+
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Write or refresh the computer-level agent text, or remove it, and record
|
|
6
|
+
* the setting and the links Astryx made; after a write, record the release
|
|
7
|
+
* that wrote it.
|
|
8
|
+
* @param {{remove: boolean}} options
|
|
9
|
+
* @returns {{home: string, command: string, files: import('./init.type.mjs').InitUserFile[], cliOnSearchPath: boolean}}
|
|
10
|
+
*/
|
|
11
|
+
export function applyComputerAgentText({ remove }: {
|
|
12
|
+
remove: boolean;
|
|
13
|
+
}): {
|
|
14
|
+
home: string;
|
|
15
|
+
command: string;
|
|
16
|
+
files: import("./init.type.mjs").InitUserFile[];
|
|
17
|
+
cliOnSearchPath: boolean;
|
|
18
|
+
};
|
|
19
|
+
import { COMPUTER_COMMAND } from '../../foundation/agent-docs/computer-agent-text.mjs';
|
|
20
|
+
import { COMPUTER_INSTALL_STEP } from '../../foundation/agent-docs/computer-agent-text.mjs';
|
|
21
|
+
import { displayHomePath } from '../../foundation/agent-docs/computer-agent-text.mjs';
|
|
22
|
+
export { COMPUTER_COMMAND, COMPUTER_INSTALL_STEP, displayHomePath };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file Environment adapter for `init --user`: the home folder, the settings
|
|
5
|
+
* file, the per-user state, and the search path (spec AST-081 FR7, FR8;
|
|
6
|
+
* architecture:cli-surface INV21).
|
|
7
|
+
*
|
|
8
|
+
* @input the home folder, the settings file, the search path
|
|
9
|
+
* @output the computer-level agent text written or removed, with the setting
|
|
10
|
+
* and the links recorded
|
|
11
|
+
* @position packages/cli/api/init — imported by the user leaf only
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import * as os from 'node:os';
|
|
15
|
+
import {
|
|
16
|
+
COMPUTER_COMMAND,
|
|
17
|
+
COMPUTER_INSTALL_STEP,
|
|
18
|
+
astryxOnSearchPath,
|
|
19
|
+
computerAgentCommand,
|
|
20
|
+
displayHomePath,
|
|
21
|
+
removeComputerAgentText,
|
|
22
|
+
writeComputerAgentText,
|
|
23
|
+
} from '../../foundation/agent-docs/computer-agent-text.mjs';
|
|
24
|
+
import {
|
|
25
|
+
computerAgentTextSettings,
|
|
26
|
+
recordComputerAgentTextSettings,
|
|
27
|
+
} from '../../foundation/env/user-settings.mjs';
|
|
28
|
+
import {recordAgentTextWritten} from '../../foundation/release/global-state.mjs';
|
|
29
|
+
import {cliVersion} from '../../foundation/release/run-context.mjs';
|
|
30
|
+
|
|
31
|
+
export {COMPUTER_COMMAND, COMPUTER_INSTALL_STEP, displayHomePath};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Write or refresh the computer-level agent text, or remove it, and record
|
|
35
|
+
* the setting and the links Astryx made; after a write, record the release
|
|
36
|
+
* that wrote it.
|
|
37
|
+
* @param {{remove: boolean}} options
|
|
38
|
+
* @returns {{home: string, command: string, files: import('./init.type.mjs').InitUserFile[], cliOnSearchPath: boolean}}
|
|
39
|
+
*/
|
|
40
|
+
export function applyComputerAgentText({remove}) {
|
|
41
|
+
const home = os.homedir();
|
|
42
|
+
const command = computerAgentCommand();
|
|
43
|
+
const recorded = computerAgentTextSettings().links;
|
|
44
|
+
/** @type {import('./init.type.mjs').InitUserFile[]} */
|
|
45
|
+
let files;
|
|
46
|
+
if (remove) {
|
|
47
|
+
files = removeComputerAgentText({home, links: recorded});
|
|
48
|
+
recordComputerAgentTextSettings({install: false, links: []});
|
|
49
|
+
} else {
|
|
50
|
+
const written = writeComputerAgentText({home, command});
|
|
51
|
+
files = written.rows;
|
|
52
|
+
recordComputerAgentTextSettings({
|
|
53
|
+
install: true,
|
|
54
|
+
links: [...new Set([...recorded, ...written.links])],
|
|
55
|
+
});
|
|
56
|
+
recordAgentTextWritten(cliVersion());
|
|
57
|
+
}
|
|
58
|
+
return {home, command, files, cliOnSearchPath: astryxOnSearchPath()};
|
|
59
|
+
}
|
package/api/init/init.d.mts
CHANGED
|
@@ -9,19 +9,21 @@
|
|
|
9
9
|
* @typedef {import('./init.type.mjs').InitRunData} InitRunData
|
|
10
10
|
*/
|
|
11
11
|
/**
|
|
12
|
-
* Run the non-interactive init flow. Dispatches to the
|
|
13
|
-
* `--
|
|
14
|
-
*
|
|
12
|
+
* Run the non-interactive init flow. Dispatches to the user leaf when
|
|
13
|
+
* `--user` is set (it writes, or with `--remove-agents` removes, the
|
|
14
|
+
* computer-level agent text and nothing in the folder), to the remove leaf
|
|
15
|
+
* when `--remove-agents` is set, otherwise to the install (run) leaf, and
|
|
16
|
+
* returns that leaf's receipt. Progress is emitted through `logger` (silent by
|
|
15
17
|
* default); unknown feature or template names throw AstryxError with a stable
|
|
16
18
|
* code.
|
|
17
19
|
*
|
|
18
20
|
* @param {InitOptions} [options]
|
|
19
21
|
* @param {{cwd?: string}} [ctx]
|
|
20
|
-
* @returns {Promise<import('./init.type.mjs').InitRunResponse | import('./init.type.mjs').InitRemoveResponse>}
|
|
22
|
+
* @returns {Promise<import('./init.type.mjs').InitRunResponse | import('./init.type.mjs').InitRemoveResponse | import('./init.type.mjs').InitUserResponse>}
|
|
21
23
|
*/
|
|
22
24
|
export function init(options?: InitOptions, { cwd }?: {
|
|
23
25
|
cwd?: string;
|
|
24
|
-
}): Promise<import("./init.type.mjs").InitRunResponse | import("./init.type.mjs").InitRemoveResponse>;
|
|
26
|
+
}): Promise<import("./init.type.mjs").InitRunResponse | import("./init.type.mjs").InitRemoveResponse | import("./init.type.mjs").InitUserResponse>;
|
|
25
27
|
export { getNextSteps } from "./run/run.mjs";
|
|
26
28
|
/**
|
|
27
29
|
* Re-exported types so callers can keep referencing them off the init barrel
|
package/api/init/init.doc.mjs
CHANGED
|
@@ -17,14 +17,29 @@ export const doc = {
|
|
|
17
17
|
'Non-interactive project setup: install agent docs and point at the theme + build workflows.',
|
|
18
18
|
description:
|
|
19
19
|
'Sets a project up with NO prompts, so it behaves identically for humans, ' +
|
|
20
|
-
'agents, CI, and piped I/O. By default it
|
|
21
|
-
'
|
|
20
|
+
'agents, CI, and piped I/O. By default it writes the agent-docs cheat sheet, ' +
|
|
21
|
+
'including guidance from configured integrations, at the project root (the nearest ' +
|
|
22
|
+
'package.json that declares an @astryxdesign package, else the nearest package.json, ' +
|
|
23
|
+
'searching no higher than the repository root): to AGENTS.md, ' +
|
|
24
|
+
"to the project's Claude Code file (CLAUDE.md, else .claude/CLAUDE.md; when CLAUDE.md " +
|
|
25
|
+
'exists, a block in .claude/CLAUDE.md is removed, unless the project ignores CLAUDE.md, in which case a ' +
|
|
26
|
+
'.claude/CLAUDE.md the project commits keeps a copy), and as a ' +
|
|
27
|
+
'one-line import of AGENTS.md in GEMINI.md unless GEMINI.md already imports it. ' +
|
|
28
|
+
'In the home folder, or in a settings folder in it outside a project, it writes none: every ' +
|
|
29
|
+
'folder of the home folder whose name starts with a dot is a settings folder, and such a folder itself never ' +
|
|
30
|
+
'counts as a project, even with a package.json; a folder below it with a package.json does. ' +
|
|
31
|
+
'The managed block is Astryx-owned: it is written, refreshed, and removed whatever ignore rules ' +
|
|
32
|
+
'or generated markers say, and the text around it is never changed. It then ' +
|
|
22
33
|
"prints getting-started guidance; `features` / `all` print only the chosen features' " +
|
|
23
34
|
'guidance instead (the theme feature also writes the annotated theme template). ' +
|
|
24
|
-
'With `removeAgents` it removes the managed agent-docs block instead of installing.'
|
|
35
|
+
'With `removeAgents` it removes the managed agent-docs block, at the project root and in `ctx.cwd`, instead of installing. ' +
|
|
36
|
+
'Outside a project it writes the same files but prints no getting-started steps and no step that adds a theme to an app, since those set up a project the folder does not have. ' +
|
|
37
|
+
"With `user` it sets up the computer instead of the folder: it writes the computer-level agent text, one skill file at `~/.agents/skills/astryx/SKILL.md`, linked into the skill folders of agents that read only their own (`~/.claude/skills` always; Kiro, Windsurf, Letta, Xcode's coding assistant, and `~/.config/agents/skills` when that folder exists), with a managed copy for Continue, whose scanner skips links,, telling agents anywhere on the computer that Astryx is there and when to use it; with `user` and `removeAgents` it removes the file and the links it made and records that the text is turned off. " +
|
|
38
|
+
'The CLI installed for the computer refreshes the file in the background after each upgrade; package install scripts, project setup, and upgrade never write it.' +
|
|
39
|
+
" In global mode: with `cwd` outside a project, it writes the agent docs and prints no getting-started steps; `user` writes only the agent guide for the computer, in the home folder, and touches nothing in `cwd`. See {@link namespace:global} and {@link generic:computer-agent-guide}.",
|
|
25
40
|
importPath: '@astryxdesign/cli/api',
|
|
26
41
|
signature:
|
|
27
|
-
'init(options?: InitOptions, ctx?: {cwd?: string}): Promise<InitRunResponse | InitRemoveResponse>',
|
|
42
|
+
'init(options?: InitOptions, ctx?: {cwd?: string}): Promise<InitRunResponse | InitRemoveResponse | InitUserResponse>',
|
|
28
43
|
keywords: ['init', 'setup', 'install', 'scaffold', 'agents', 'bootstrap'],
|
|
29
44
|
params: [
|
|
30
45
|
{
|
|
@@ -41,13 +56,27 @@ export const doc = {
|
|
|
41
56
|
{
|
|
42
57
|
name: 'options.removeAgents',
|
|
43
58
|
type: 'boolean',
|
|
44
|
-
description:
|
|
59
|
+
description:
|
|
60
|
+
'Remove the managed agent-docs block, at the project root and in `ctx.cwd`, instead of installing. With `user`, remove the computer-level agent text instead.',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'options.user',
|
|
64
|
+
type: 'boolean',
|
|
65
|
+
description:
|
|
66
|
+
"Write or refresh the computer-level agent text instead of setting up `ctx.cwd`: one skill file at `~/.agents/skills/astryx/SKILL.md` in the current user's home folder, linked (a folder symlink with a relative target, a junction on Windows, or a copy where neither can be made) into `~/.claude/skills/astryx`, and into the skills folder of Kiro, Windsurf, Letta, Xcode's coding assistant, and `~/.config/agents/skills` when that folder exists; Continue, whose scanner skips links, gets a managed copy, refreshed with the file. " +
|
|
67
|
+
'The text uses the `astryx` command, or the command of the host that started the run; an integration\'s `cliCommand` never applies. ' +
|
|
68
|
+
'Records the links it made, or with `removeAgents` that the text is turned off, in `astryx/settings.json` in the per-user configuration folder. ' +
|
|
69
|
+
'A file without the Astryx markers, one edited since Astryx wrote it, or a symlink, is kept as it is, and so is anything at a link target that Astryx did not create. When no `astryx` command on the computer runs the Astryx CLI, the text is still written and the receipt carries a warning to install the CLI for the computer (`npm i -g @astryxdesign/cli`). ' +
|
|
70
|
+
'Cannot be combined with `features`, `all`, `agent`, or `agentDocsPath`.',
|
|
45
71
|
},
|
|
46
72
|
{
|
|
47
73
|
name: 'options.agent',
|
|
48
74
|
type: 'string',
|
|
49
75
|
description:
|
|
50
|
-
'Agent preset: claude, cursor, codex, hermes, muse, all.
|
|
76
|
+
'Agent preset: claude, cursor, codex, hermes, muse, all. `all` writes every existing agent doc except GEMINI.md, ' +
|
|
77
|
+
'which keeps its one-line import of AGENTS.md. With claude and all, when CLAUDE.md gets the block, a block in ' +
|
|
78
|
+
'.claude/CLAUDE.md is removed, unless the project ignores CLAUDE.md, in which case a .claude/CLAUDE.md the ' +
|
|
79
|
+
'project commits gets a copy too. Used only when the agents feature runs. Refused with `user`.',
|
|
51
80
|
},
|
|
52
81
|
{
|
|
53
82
|
name: 'options.agentDocsPath',
|
|
@@ -71,22 +100,27 @@ export const doc = {
|
|
|
71
100
|
{
|
|
72
101
|
type: 'init.run',
|
|
73
102
|
description:
|
|
74
|
-
'The install receipt: the `mode` (`default` | `features`), the features run, agent-doc files written, any soft docsError, the theme-template outcome (`created` | `skipped` | `failed`) plus its path, the page-template outcome (`workflow` | `created` | `skipped`) plus its path, and whether the next-steps were emitted.',
|
|
103
|
+
'The install receipt: the `mode` (`default` | `features`), the features run, agent-doc files written, any soft docsError, the theme-template outcome (`created` | `skipped` | `failed`) plus its path, the page-template outcome (`workflow` | `created` | `skipped`) plus its path, and whether the next-steps were emitted (never outside a project).',
|
|
75
104
|
},
|
|
76
105
|
{
|
|
77
106
|
type: 'init.remove',
|
|
78
107
|
description:
|
|
79
108
|
'The removal receipt, returned when `removeAgents` is set: `data.removed` is true when a managed agent-docs block was found and removed, and false when there was none to remove.',
|
|
80
109
|
},
|
|
110
|
+
{
|
|
111
|
+
type: 'init.user',
|
|
112
|
+
description:
|
|
113
|
+
'The computer-level agent text receipt, returned when `user` is set: `data.files`, one `{path, action, reason?}` per path acted on (`~/.agents/skills/astryx/SKILL.md`, then each link to its folder, such as `~/.claude/skills/astryx`; action `written` | `linked` | `unchanged` | `removed` | `absent` | `kept`; `reason` on `kept`: `edited` | `not-astryx`), `data.command` (the command the text names), and `data.warnings`.',
|
|
114
|
+
},
|
|
81
115
|
],
|
|
82
116
|
throws: [
|
|
83
117
|
{
|
|
84
118
|
code: 'ERR_INVALID_ARGUMENT',
|
|
85
|
-
|
|
119
|
+
when: '--remove-agents is combined with --features, --all, --agent, or --agent-docs-path; --user is combined with --features, --all, --agent, or --agent-docs-path; or --all is combined with --features',
|
|
86
120
|
},
|
|
87
121
|
{
|
|
88
122
|
code: 'ERR_UNKNOWN_AGENT',
|
|
89
|
-
|
|
123
|
+
when: 'the agents feature runs (default mode, features includes agents, or all) and `agent` is not one of claude, cursor, codex, hermes, muse, all',
|
|
90
124
|
},
|
|
91
125
|
{
|
|
92
126
|
code: 'ERR_UNKNOWN_FEATURE',
|
|
@@ -102,13 +136,14 @@ export const doc = {
|
|
|
102
136
|
},
|
|
103
137
|
{
|
|
104
138
|
code: 'ERR_PATH_TRAVERSAL',
|
|
105
|
-
when: 'the template output path resolves outside cwd (for example through a symlinked src directory), or, with removeAgents, a managed agent-docs file resolves outside
|
|
139
|
+
when: 'the template output path resolves outside cwd (for example through a symlinked src directory), or, with removeAgents, a managed agent-docs file in cwd, or at the project root when run there, resolves outside that folder through a symlink (run below the root, a project-root file is left as it is with a note)',
|
|
106
140
|
},
|
|
107
141
|
],
|
|
108
142
|
examples: [
|
|
109
143
|
{label: 'Default setup', code: 'const r = await init();'},
|
|
110
144
|
{label: 'All features', code: 'await init({all: true});'},
|
|
111
145
|
{label: 'Remove agent docs', code: 'await init({removeAgents: true});'},
|
|
146
|
+
{label: 'Agent text for the whole computer', code: 'const r = await init({user: true});\nfor (const w of r.data.warnings) console.warn(w);'},
|
|
112
147
|
],
|
|
113
148
|
command: 'init',
|
|
114
149
|
related: ['doctor', 'upgrade', 'build', 'themeTemplate'],
|
package/api/init/init.mjs
CHANGED
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
* install path (agent-docs, theme +
|
|
11
11
|
* page-building guidance, template)
|
|
12
12
|
* - `init.remove` (remove/remove.mjs) — the `--remove-agents` path
|
|
13
|
+
* - `init.user` (user/user.mjs) — the `--user` path: the
|
|
14
|
+
* computer-level agent text, written
|
|
15
|
+
* or (with `--remove-agents`) removed
|
|
13
16
|
*
|
|
14
17
|
* This module also re-exports the leaf symbols the CLI + tests import by name
|
|
15
18
|
* (`getNextSteps`) so api/index.mjs, the command handler
|
|
@@ -18,6 +21,7 @@
|
|
|
18
21
|
|
|
19
22
|
import {run} from './run/run.mjs';
|
|
20
23
|
import {remove} from './remove/remove.mjs';
|
|
24
|
+
import {user} from './user/user.mjs';
|
|
21
25
|
import {AstryxError} from '../error.mjs';
|
|
22
26
|
import {ERROR_CODES} from '../../foundation/response/error-codes.mjs';
|
|
23
27
|
|
|
@@ -32,17 +36,37 @@ export {getNextSteps} from './run/run.mjs';
|
|
|
32
36
|
*/
|
|
33
37
|
|
|
34
38
|
/**
|
|
35
|
-
* Run the non-interactive init flow. Dispatches to the
|
|
36
|
-
* `--
|
|
37
|
-
*
|
|
39
|
+
* Run the non-interactive init flow. Dispatches to the user leaf when
|
|
40
|
+
* `--user` is set (it writes, or with `--remove-agents` removes, the
|
|
41
|
+
* computer-level agent text and nothing in the folder), to the remove leaf
|
|
42
|
+
* when `--remove-agents` is set, otherwise to the install (run) leaf, and
|
|
43
|
+
* returns that leaf's receipt. Progress is emitted through `logger` (silent by
|
|
38
44
|
* default); unknown feature or template names throw AstryxError with a stable
|
|
39
45
|
* code.
|
|
40
46
|
*
|
|
41
47
|
* @param {InitOptions} [options]
|
|
42
48
|
* @param {{cwd?: string}} [ctx]
|
|
43
|
-
* @returns {Promise<import('./init.type.mjs').InitRunResponse | import('./init.type.mjs').InitRemoveResponse>}
|
|
49
|
+
* @returns {Promise<import('./init.type.mjs').InitRunResponse | import('./init.type.mjs').InitRemoveResponse | import('./init.type.mjs').InitUserResponse>}
|
|
44
50
|
*/
|
|
45
51
|
export async function init(options = {}, {cwd = process.cwd()} = {}) {
|
|
52
|
+
if (options.user) {
|
|
53
|
+
// Its own path: fixed files in the home folder, never the project
|
|
54
|
+
// agent-docs resolution, so it works the same in every folder.
|
|
55
|
+
const refused = [
|
|
56
|
+
options.features ? '--features' : null,
|
|
57
|
+
options.all ? '--all' : null,
|
|
58
|
+
options.agentDocsPath ? '--agent-docs-path' : null,
|
|
59
|
+
options.agent ? '--agent' : null,
|
|
60
|
+
].filter(Boolean);
|
|
61
|
+
if (refused.length > 0) {
|
|
62
|
+
throw new AstryxError(
|
|
63
|
+
`\`--user\` cannot be combined with ${refused.join(', ')}: it writes one skill file for every agent on the computer, linked into the folders agents read, with no features, agents, or path to choose.`,
|
|
64
|
+
undefined,
|
|
65
|
+
ERROR_CODES.ERR_INVALID_ARGUMENT,
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
return user({remove: Boolean(options.removeAgents)});
|
|
69
|
+
}
|
|
46
70
|
if (options.removeAgents) {
|
|
47
71
|
const ignored = [
|
|
48
72
|
options.features ? '--features' : null,
|
package/api/init/init.test.mjs
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
import {describe, it, expect, beforeEach, afterEach, vi} from 'vitest';
|
|
12
12
|
import * as fs from 'node:fs';
|
|
13
|
+
import * as os from 'node:os';
|
|
13
14
|
import * as path from 'node:path';
|
|
14
15
|
import {init, getNextSteps} from './init.mjs';
|
|
15
16
|
import {logger} from '../logger.mjs';
|
|
@@ -21,7 +22,8 @@ const MARKER_START = '<!-- ASTRYX:START -->';
|
|
|
21
22
|
let tmpDir;
|
|
22
23
|
|
|
23
24
|
beforeEach(() => {
|
|
24
|
-
|
|
25
|
+
// Outside any package: init writes agent docs at the nearest package.json.
|
|
26
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'astryx-init-api-'));
|
|
25
27
|
});
|
|
26
28
|
|
|
27
29
|
afterEach(() => {
|
|
@@ -30,6 +32,18 @@ afterEach(() => {
|
|
|
30
32
|
|
|
31
33
|
/** @param {string} rel */
|
|
32
34
|
const read = rel => fs.readFileSync(path.join(tmpDir, rel), 'utf8');
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Make tmpDir a project that declares Astryx: a folder that declares nothing
|
|
38
|
+
* is outside a project, where init prints no getting-started steps (spec
|
|
39
|
+
* AST-081 FR3).
|
|
40
|
+
*/
|
|
41
|
+
function asProject() {
|
|
42
|
+
fs.writeFileSync(
|
|
43
|
+
path.join(tmpDir, 'package.json'),
|
|
44
|
+
JSON.stringify({name: 'app', dependencies: {'@astryxdesign/core': '*'}}),
|
|
45
|
+
);
|
|
46
|
+
}
|
|
33
47
|
/** @param {string} rel */
|
|
34
48
|
const exists = rel => fs.existsSync(path.join(tmpDir, rel));
|
|
35
49
|
|
|
@@ -58,6 +72,7 @@ function writeIntegration() {
|
|
|
58
72
|
|
|
59
73
|
describe('init() — receipts + side effects', () => {
|
|
60
74
|
it('default mode installs AGENTS.md and returns an init.run receipt', async () => {
|
|
75
|
+
asProject();
|
|
61
76
|
const res = await init({}, {cwd: tmpDir});
|
|
62
77
|
expect(res.type).toBe('init.run');
|
|
63
78
|
if (res.type !== 'init.run') return;
|
|
@@ -217,6 +232,7 @@ describe('init() — logger', () => {
|
|
|
217
232
|
});
|
|
218
233
|
|
|
219
234
|
it('emits the install line + full next-steps through the shared logger', async () => {
|
|
235
|
+
asProject();
|
|
220
236
|
/** @type {string[]} */
|
|
221
237
|
const lines = [];
|
|
222
238
|
const logSpy = vi.spyOn(console, 'log').mockImplementation((...a) => lines.push(a.join(' ')));
|
|
@@ -243,7 +259,7 @@ describe('init() — ASCII output', () => {
|
|
|
243
259
|
const lines = [];
|
|
244
260
|
const logSpy = vi.spyOn(console, 'log').mockImplementation((...a) => lines.push(a.join(' ')));
|
|
245
261
|
const errSpy = vi.spyOn(console, 'error').mockImplementation((...a) => lines.push(a.join(' ')));
|
|
246
|
-
const empty = fs.mkdtempSync(path.join(
|
|
262
|
+
const empty = fs.mkdtempSync(path.join(os.tmpdir(), 'astryx-init-remove-'));
|
|
247
263
|
logger.setSilent(false);
|
|
248
264
|
try {
|
|
249
265
|
await init({}, {cwd: tmpDir});
|
package/api/init/init.type.d.mts
CHANGED
|
@@ -11,11 +11,11 @@ export type InitRunData = {
|
|
|
11
11
|
*/
|
|
12
12
|
features: string[];
|
|
13
13
|
/**
|
|
14
|
-
* Agent-doc files written (empty if agents weren't run or install failed).
|
|
14
|
+
* Agent-doc files written, relative to the directory init ran in (empty if agents weren't run or install failed). Without --agent-docs-path they sit at the project root: the nearest folder at or above it whose package.json declares an Astryx package, else the nearest with any package.json, within its repository and never the home folder; with none, the directory init ran in.
|
|
15
15
|
*/
|
|
16
16
|
docsWritten: string[];
|
|
17
17
|
/**
|
|
18
|
-
* Soft agent-docs failure, if any. `path-safety` also implies a non-zero exit.
|
|
18
|
+
* Soft agent-docs failure, if any. `path-safety` also implies a non-zero exit. `install-failed` carries a message when init wrote no agent docs (the home folder, or a settings folder in it outside a project) or skipped a file that resolves outside the project; docsWritten then lists what was written.
|
|
19
19
|
*/
|
|
20
20
|
docsError: {
|
|
21
21
|
kind: "path-safety" | "install-failed";
|
|
@@ -42,7 +42,7 @@ export type InitRunData = {
|
|
|
42
42
|
*/
|
|
43
43
|
templatePath: string | null;
|
|
44
44
|
/**
|
|
45
|
-
* Whether the getting-started "Next steps" were emitted (default mode).
|
|
45
|
+
* Whether the getting-started "Next steps" were emitted (default mode inside a project; false outside one).
|
|
46
46
|
*/
|
|
47
47
|
nextSteps: boolean;
|
|
48
48
|
};
|
|
@@ -59,6 +59,47 @@ export type InitRemoveResponse = {
|
|
|
59
59
|
removed: boolean;
|
|
60
60
|
};
|
|
61
61
|
};
|
|
62
|
+
/**
|
|
63
|
+
* What `init --user` did with one file of the computer-level agent text.
|
|
64
|
+
* `written`: created or refreshed. `unchanged`: already this release's text.
|
|
65
|
+
* `removed`: deleted (with `--remove-agents`). `absent`: nothing to remove.
|
|
66
|
+
* `kept`: a file left as it is, because a person edited it or Astryx did not
|
|
67
|
+
* write it (see `reason`).
|
|
68
|
+
*/
|
|
69
|
+
export type InitUserAction = "written" | "linked" | "unchanged" | "removed" | "absent" | "kept";
|
|
70
|
+
export type InitUserFile = {
|
|
71
|
+
/**
|
|
72
|
+
* Absolute path in the home folder: the skill file,
|
|
73
|
+
* or a link to its folder.
|
|
74
|
+
*/
|
|
75
|
+
path: string;
|
|
76
|
+
action: InitUserAction;
|
|
77
|
+
/**
|
|
78
|
+
* Only on `kept`: `edited`, the
|
|
79
|
+
* text no longer matches the hash Astryx recorded in it; `not-astryx`, it
|
|
80
|
+
* has no Astryx markers or is a symlink, or a link target holds something
|
|
81
|
+
* Astryx did not create.
|
|
82
|
+
*/
|
|
83
|
+
reason?: "edited" | "not-astryx" | undefined;
|
|
84
|
+
};
|
|
85
|
+
export type InitUserData = {
|
|
86
|
+
/**
|
|
87
|
+
* One row per path acted on: `~/.agents/skills/astryx/SKILL.md` first, then each link to its folder: `~/.claude/skills/astryx` always, and another agent's skills folder when that agent's folder exists (`linked`, or `unchanged` when the link is already there). Removal removes the file and the links Astryx made.
|
|
88
|
+
*/
|
|
89
|
+
files: InitUserFile[];
|
|
90
|
+
/**
|
|
91
|
+
* The command the text tells agents to run: `astryx`, or the host's command when a host started the run.
|
|
92
|
+
*/
|
|
93
|
+
command: string;
|
|
94
|
+
/**
|
|
95
|
+
* Non-fatal notes, such as no `astryx` on the computer that runs the Astryx CLI.
|
|
96
|
+
*/
|
|
97
|
+
warnings: string[];
|
|
98
|
+
};
|
|
99
|
+
export type InitUserResponse = {
|
|
100
|
+
type: "init.user";
|
|
101
|
+
data: InitUserData;
|
|
102
|
+
};
|
|
62
103
|
/**
|
|
63
104
|
* Options for `init()`.
|
|
64
105
|
*/
|
|
@@ -72,11 +113,15 @@ export type InitOptions = {
|
|
|
72
113
|
*/
|
|
73
114
|
all?: boolean | undefined;
|
|
74
115
|
/**
|
|
75
|
-
* Remove the managed agent-docs block instead of installing.
|
|
116
|
+
* Remove the managed agent-docs block, at the project root and in the folder init runs in, instead of installing; with `user`, remove the computer-level agent text.
|
|
76
117
|
*/
|
|
77
118
|
removeAgents?: boolean | undefined;
|
|
78
119
|
/**
|
|
79
|
-
*
|
|
120
|
+
* Write the computer-level agent text (`~/.agents/skills/astryx/SKILL.md`, linked into `~/.claude/skills` and the skill folders of other installed tools, with a copy for Continue) instead of setting up the folder.
|
|
121
|
+
*/
|
|
122
|
+
user?: boolean | undefined;
|
|
123
|
+
/**
|
|
124
|
+
* Agent preset: claude, cursor, codex, hermes, muse, all. Refused with `user`.
|
|
80
125
|
*/
|
|
81
126
|
agent?: string | undefined;
|
|
82
127
|
/**
|
package/api/init/init.type.mjs
CHANGED
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
* @typedef {object} InitRunData
|
|
11
11
|
* @property {'default' | 'features'} mode `default` (no flags) or `features` (--features/--all).
|
|
12
12
|
* @property {string[]} features Features that were run, in order.
|
|
13
|
-
* @property {string[]} docsWritten Agent-doc files written (empty if agents weren't run or install failed).
|
|
14
|
-
* @property {{kind: 'path-safety' | 'install-failed', message?: string} | null} docsError Soft agent-docs failure, if any. `path-safety` also implies a non-zero exit.
|
|
13
|
+
* @property {string[]} docsWritten Agent-doc files written, relative to the directory init ran in (empty if agents weren't run or install failed). Without --agent-docs-path they sit at the project root: the nearest folder at or above it whose package.json declares an Astryx package, else the nearest with any package.json, within its repository and never the home folder; with none, the directory init ran in.
|
|
14
|
+
* @property {{kind: 'path-safety' | 'install-failed', message?: string} | null} docsError Soft agent-docs failure, if any. `path-safety` also implies a non-zero exit. `install-failed` carries a message when init wrote no agent docs (the home folder, or a settings folder in it outside a project) or skipped a file that resolves outside the project; docsWritten then lists what was written.
|
|
15
15
|
* @property {boolean} theme Whether the theme feature ran.
|
|
16
16
|
* @property {'created' | 'skipped' | 'failed' | null} themeTemplate Outcome of writing the annotated theme template (`skipped` = a file was already there).
|
|
17
17
|
* @property {string | null} themeTemplatePath Relative output path when `themeTemplate === 'created'`.
|
|
18
18
|
* @property {'workflow' | 'created' | 'skipped' | null} template Template outcome (`workflow` is the CLI default; `created`/`skipped` are programmatic).
|
|
19
19
|
* @property {string | null} templatePath Relative output path when `template === 'created'`.
|
|
20
|
-
* @property {boolean} nextSteps Whether the getting-started "Next steps" were emitted (default mode).
|
|
20
|
+
* @property {boolean} nextSteps Whether the getting-started "Next steps" were emitted (default mode inside a project; false outside one).
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -32,13 +32,47 @@
|
|
|
32
32
|
* @property {{removed: boolean}} data False when no managed agent-docs block was found, so nothing was removed.
|
|
33
33
|
*/
|
|
34
34
|
|
|
35
|
+
/**
|
|
36
|
+
* What `init --user` did with one file of the computer-level agent text.
|
|
37
|
+
* `written`: created or refreshed. `unchanged`: already this release's text.
|
|
38
|
+
* `removed`: deleted (with `--remove-agents`). `absent`: nothing to remove.
|
|
39
|
+
* `kept`: a file left as it is, because a person edited it or Astryx did not
|
|
40
|
+
* write it (see `reason`).
|
|
41
|
+
* @typedef {'written' | 'linked' | 'unchanged' | 'removed' | 'absent' | 'kept'} InitUserAction
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @typedef {object} InitUserFile
|
|
46
|
+
* @property {string} path Absolute path in the home folder: the skill file,
|
|
47
|
+
* or a link to its folder.
|
|
48
|
+
* @property {InitUserAction} action
|
|
49
|
+
* @property {'edited' | 'not-astryx'} [reason] Only on `kept`: `edited`, the
|
|
50
|
+
* text no longer matches the hash Astryx recorded in it; `not-astryx`, it
|
|
51
|
+
* has no Astryx markers or is a symlink, or a link target holds something
|
|
52
|
+
* Astryx did not create.
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @typedef {object} InitUserData
|
|
57
|
+
* @property {InitUserFile[]} files One row per path acted on: `~/.agents/skills/astryx/SKILL.md` first, then each link to its folder: `~/.claude/skills/astryx` always, and another agent's skills folder when that agent's folder exists (`linked`, or `unchanged` when the link is already there). Removal removes the file and the links Astryx made.
|
|
58
|
+
* @property {string} command The command the text tells agents to run: `astryx`, or the host's command when a host started the run.
|
|
59
|
+
* @property {string[]} warnings Non-fatal notes, such as no `astryx` on the computer that runs the Astryx CLI.
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @typedef {object} InitUserResponse
|
|
64
|
+
* @property {'init.user'} type
|
|
65
|
+
* @property {InitUserData} data
|
|
66
|
+
*/
|
|
67
|
+
|
|
35
68
|
/**
|
|
36
69
|
* Options for `init()`.
|
|
37
70
|
* @typedef {object} InitOptions
|
|
38
71
|
* @property {string} [features] Comma-separated features to install (agents, theme, template).
|
|
39
72
|
* @property {boolean} [all] Install all features.
|
|
40
|
-
* @property {boolean} [removeAgents] Remove the managed agent-docs block instead of installing.
|
|
41
|
-
* @property {
|
|
73
|
+
* @property {boolean} [removeAgents] Remove the managed agent-docs block, at the project root and in the folder init runs in, instead of installing; with `user`, remove the computer-level agent text.
|
|
74
|
+
* @property {boolean} [user] Write the computer-level agent text (`~/.agents/skills/astryx/SKILL.md`, linked into `~/.claude/skills` and the skill folders of other installed tools, with a copy for Continue) instead of setting up the folder.
|
|
75
|
+
* @property {string} [agent] Agent preset: claude, cursor, codex, hermes, muse, all. Refused with `user`.
|
|
42
76
|
* @property {string | string[]} [agentDocsPath] Explicit agent-docs file path(s).
|
|
43
77
|
* @property {string} [templateName] Scaffold a named page template (programmatic only; the CLI never sets it).
|
|
44
78
|
*/
|
|
@@ -4,15 +4,16 @@
|
|
|
4
4
|
* @file init.remove leaf — the `--remove-agents` path behind `astryx init`.
|
|
5
5
|
*
|
|
6
6
|
* `remove(ctx)` deletes the managed agent-docs block from every agent-doc file
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* at the project root, where init writes it, and in the working folder, and
|
|
8
|
+
* returns an `init.remove` receipt. The removal engine lives in
|
|
9
|
+
* foundation/agent-docs; this leaf only wires the cwd.
|
|
9
10
|
*
|
|
10
11
|
* Note: removeAgentDocs() still logs its own per-file lines via humanLog
|
|
11
12
|
* (shared lib behavior) — so a programmatic remove is not perfectly silent yet.
|
|
12
13
|
* Threading a logger through agent-docs is a separate cleanup.
|
|
13
14
|
*/
|
|
14
15
|
|
|
15
|
-
import {
|
|
16
|
+
import {removeProjectAgentDocs} from '../../../foundation/agent-docs/agent-docs.mjs';
|
|
16
17
|
import {logger} from '../../logger.mjs';
|
|
17
18
|
|
|
18
19
|
/**
|
|
@@ -23,7 +24,19 @@ import {logger} from '../../logger.mjs';
|
|
|
23
24
|
* @returns {Promise<import('../init.type.mjs').InitRemoveResponse>}
|
|
24
25
|
*/
|
|
25
26
|
export async function remove({cwd = process.cwd()} = {}) {
|
|
26
|
-
|
|
27
|
+
/** @type {string[]} */
|
|
28
|
+
const skipped = [];
|
|
29
|
+
const removedFrom = removeProjectAgentDocs(cwd, {
|
|
30
|
+
onSkipped: (rel, reason) => skipped.push(`${rel} (${reason})`),
|
|
31
|
+
});
|
|
32
|
+
if (skipped.length > 0) {
|
|
33
|
+
// Below the project root, as install does there (0.7.x touched only the
|
|
34
|
+
// working folder): a root agent file outside the project is left alone.
|
|
35
|
+
logger.warn(
|
|
36
|
+
`Note: Left as ${skipped.length === 1 ? 'it is' : 'they are'}: ${skipped.join('; ')}. ` +
|
|
37
|
+
'To remove the Astryx block there, delete it by hand.',
|
|
38
|
+
);
|
|
39
|
+
}
|
|
27
40
|
const removed = removedFrom.length > 0;
|
|
28
41
|
logger.log(
|
|
29
42
|
removed
|