@nac3/forge-cli 0.2.0-alpha.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/LICENSE +45 -0
- package/README.md +371 -0
- package/dist/bin/yf.d.ts +5 -0
- package/dist/bin/yf.d.ts.map +1 -0
- package/dist/bin/yf.js +86 -0
- package/dist/bin/yf.js.map +1 -0
- package/dist/chat/claude.d.ts +100 -0
- package/dist/chat/claude.d.ts.map +1 -0
- package/dist/chat/claude.js +228 -0
- package/dist/chat/claude.js.map +1 -0
- package/dist/chat/ingest_session.d.ts +97 -0
- package/dist/chat/ingest_session.d.ts.map +1 -0
- package/dist/chat/ingest_session.js +99 -0
- package/dist/chat/ingest_session.js.map +1 -0
- package/dist/chat/panel.d.ts +15 -0
- package/dist/chat/panel.d.ts.map +1 -0
- package/dist/chat/panel.js +1526 -0
- package/dist/chat/panel.js.map +1 -0
- package/dist/chat/persistence.d.ts +37 -0
- package/dist/chat/persistence.d.ts.map +1 -0
- package/dist/chat/persistence.js +91 -0
- package/dist/chat/persistence.js.map +1 -0
- package/dist/chat/server.d.ts +34 -0
- package/dist/chat/server.d.ts.map +1 -0
- package/dist/chat/server.js +1540 -0
- package/dist/chat/server.js.map +1 -0
- package/dist/chat/spec_extract.d.ts +35 -0
- package/dist/chat/spec_extract.d.ts.map +1 -0
- package/dist/chat/spec_extract.js +152 -0
- package/dist/chat/spec_extract.js.map +1 -0
- package/dist/chat/spec_plan.d.ts +65 -0
- package/dist/chat/spec_plan.d.ts.map +1 -0
- package/dist/chat/spec_plan.js +160 -0
- package/dist/chat/spec_plan.js.map +1 -0
- package/dist/chat/spec_scaffold.d.ts +95 -0
- package/dist/chat/spec_scaffold.d.ts.map +1 -0
- package/dist/chat/spec_scaffold.js +220 -0
- package/dist/chat/spec_scaffold.js.map +1 -0
- package/dist/chat/tools/git.d.ts +59 -0
- package/dist/chat/tools/git.d.ts.map +1 -0
- package/dist/chat/tools/git.js +313 -0
- package/dist/chat/tools/git.js.map +1 -0
- package/dist/chat/tools/github.d.ts +59 -0
- package/dist/chat/tools/github.d.ts.map +1 -0
- package/dist/chat/tools/github.js +310 -0
- package/dist/chat/tools/github.js.map +1 -0
- package/dist/chat/tools/lifecycle.d.ts +82 -0
- package/dist/chat/tools/lifecycle.d.ts.map +1 -0
- package/dist/chat/tools/lifecycle.js +295 -0
- package/dist/chat/tools/lifecycle.js.map +1 -0
- package/dist/chat/tools/manual.d.ts +26 -0
- package/dist/chat/tools/manual.d.ts.map +1 -0
- package/dist/chat/tools/manual.js +164 -0
- package/dist/chat/tools/manual.js.map +1 -0
- package/dist/chat/tools/reader.d.ts +80 -0
- package/dist/chat/tools/reader.d.ts.map +1 -0
- package/dist/chat/tools/reader.js +471 -0
- package/dist/chat/tools/reader.js.map +1 -0
- package/dist/chat/tools.d.ts +106 -0
- package/dist/chat/tools.d.ts.map +1 -0
- package/dist/chat/tools.js +587 -0
- package/dist/chat/tools.js.map +1 -0
- package/dist/codegen/e2e.d.ts +106 -0
- package/dist/codegen/e2e.d.ts.map +1 -0
- package/dist/codegen/e2e.js +931 -0
- package/dist/codegen/e2e.js.map +1 -0
- package/dist/codegen/v3_flow_emit.d.ts +70 -0
- package/dist/codegen/v3_flow_emit.d.ts.map +1 -0
- package/dist/codegen/v3_flow_emit.js +225 -0
- package/dist/codegen/v3_flow_emit.js.map +1 -0
- package/dist/commands/_stub.d.ts +2 -0
- package/dist/commands/_stub.d.ts.map +1 -0
- package/dist/commands/_stub.js +21 -0
- package/dist/commands/_stub.js.map +1 -0
- package/dist/commands/app.d.ts +31 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +331 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/chat.d.ts +18 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +76 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/deploy.d.ts +21 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +121 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/doctor.d.ts +14 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +280 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/figma.d.ts +32 -0
- package/dist/commands/figma.d.ts.map +1 -0
- package/dist/commands/figma.js +141 -0
- package/dist/commands/figma.js.map +1 -0
- package/dist/commands/gen-flow-tests.d.ts +8 -0
- package/dist/commands/gen-flow-tests.d.ts.map +1 -0
- package/dist/commands/gen-flow-tests.js +78 -0
- package/dist/commands/gen-flow-tests.js.map +1 -0
- package/dist/commands/gen-tests.d.ts +9 -0
- package/dist/commands/gen-tests.d.ts.map +1 -0
- package/dist/commands/gen-tests.js +118 -0
- package/dist/commands/gen-tests.js.map +1 -0
- package/dist/commands/license.d.ts +14 -0
- package/dist/commands/license.d.ts.map +1 -0
- package/dist/commands/license.js +182 -0
- package/dist/commands/license.js.map +1 -0
- package/dist/commands/log.d.ts +19 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +101 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/migrate.d.ts +118 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +1410 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/mobile.d.ts +27 -0
- package/dist/commands/mobile.d.ts.map +1 -0
- package/dist/commands/mobile.js +90 -0
- package/dist/commands/mobile.js.map +1 -0
- package/dist/commands/new.d.ts +32 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +107 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/pilot.d.ts +8 -0
- package/dist/commands/pilot.d.ts.map +1 -0
- package/dist/commands/pilot.js +104 -0
- package/dist/commands/pilot.js.map +1 -0
- package/dist/commands/projects.d.ts +21 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +238 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/publish.d.ts +35 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +194 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/repo.d.ts +59 -0
- package/dist/commands/repo.d.ts.map +1 -0
- package/dist/commands/repo.js +178 -0
- package/dist/commands/repo.js.map +1 -0
- package/dist/commands/review-screens.d.ts +28 -0
- package/dist/commands/review-screens.d.ts.map +1 -0
- package/dist/commands/review-screens.js +345 -0
- package/dist/commands/review-screens.js.map +1 -0
- package/dist/commands/scenarios.d.ts +23 -0
- package/dist/commands/scenarios.d.ts.map +1 -0
- package/dist/commands/scenarios.js +304 -0
- package/dist/commands/scenarios.js.map +1 -0
- package/dist/commands/ship.d.ts +18 -0
- package/dist/commands/ship.d.ts.map +1 -0
- package/dist/commands/ship.js +41 -0
- package/dist/commands/ship.js.map +1 -0
- package/dist/commands/test.d.ts +29 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +62 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/tunnel.d.ts +22 -0
- package/dist/commands/tunnel.d.ts.map +1 -0
- package/dist/commands/tunnel.js +77 -0
- package/dist/commands/tunnel.js.map +1 -0
- package/dist/commands/validate.d.ts +14 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +51 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/vault.d.ts +32 -0
- package/dist/commands/vault.d.ts.map +1 -0
- package/dist/commands/vault.js +489 -0
- package/dist/commands/vault.js.map +1 -0
- package/dist/commands/voice.d.ts +16 -0
- package/dist/commands/voice.d.ts.map +1 -0
- package/dist/commands/voice.js +69 -0
- package/dist/commands/voice.js.map +1 -0
- package/dist/core/cascade_router.d.ts +90 -0
- package/dist/core/cascade_router.d.ts.map +1 -0
- package/dist/core/cascade_router.js +131 -0
- package/dist/core/cascade_router.js.map +1 -0
- package/dist/core/cf_tunnel.d.ts +52 -0
- package/dist/core/cf_tunnel.d.ts.map +1 -0
- package/dist/core/cf_tunnel.js +134 -0
- package/dist/core/cf_tunnel.js.map +1 -0
- package/dist/core/gha_dispatcher.d.ts +48 -0
- package/dist/core/gha_dispatcher.d.ts.map +1 -0
- package/dist/core/gha_dispatcher.js +198 -0
- package/dist/core/gha_dispatcher.js.map +1 -0
- package/dist/core/logger.d.ts +89 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +245 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/mode.d.ts +26 -0
- package/dist/core/mode.d.ts.map +1 -0
- package/dist/core/mode.js +122 -0
- package/dist/core/mode.js.map +1 -0
- package/dist/core/pairing.d.ts +40 -0
- package/dist/core/pairing.d.ts.map +1 -0
- package/dist/core/pairing.js +145 -0
- package/dist/core/pairing.js.map +1 -0
- package/dist/core/pilot_setup.d.ts +29 -0
- package/dist/core/pilot_setup.d.ts.map +1 -0
- package/dist/core/pilot_setup.js +119 -0
- package/dist/core/pilot_setup.js.map +1 -0
- package/dist/core/polar.d.ts +81 -0
- package/dist/core/polar.d.ts.map +1 -0
- package/dist/core/polar.js +175 -0
- package/dist/core/polar.js.map +1 -0
- package/dist/core/project_picker.d.ts +56 -0
- package/dist/core/project_picker.d.ts.map +1 -0
- package/dist/core/project_picker.js +86 -0
- package/dist/core/project_picker.js.map +1 -0
- package/dist/core/projects.d.ts +58 -0
- package/dist/core/projects.d.ts.map +1 -0
- package/dist/core/projects.js +146 -0
- package/dist/core/projects.js.map +1 -0
- package/dist/core/projects_sync.d.ts +80 -0
- package/dist/core/projects_sync.d.ts.map +1 -0
- package/dist/core/projects_sync.js +278 -0
- package/dist/core/projects_sync.js.map +1 -0
- package/dist/core/remote_runner.d.ts +70 -0
- package/dist/core/remote_runner.d.ts.map +1 -0
- package/dist/core/remote_runner.js +133 -0
- package/dist/core/remote_runner.js.map +1 -0
- package/dist/core/repo_state.d.ts +24 -0
- package/dist/core/repo_state.d.ts.map +1 -0
- package/dist/core/repo_state.js +109 -0
- package/dist/core/repo_state.js.map +1 -0
- package/dist/core/target.d.ts +31 -0
- package/dist/core/target.d.ts.map +1 -0
- package/dist/core/target.js +121 -0
- package/dist/core/target.js.map +1 -0
- package/dist/deploy/aws.d.ts +43 -0
- package/dist/deploy/aws.d.ts.map +1 -0
- package/dist/deploy/aws.js +173 -0
- package/dist/deploy/aws.js.map +1 -0
- package/dist/figma/api.d.ts +35 -0
- package/dist/figma/api.d.ts.map +1 -0
- package/dist/figma/api.js +40 -0
- package/dist/figma/api.js.map +1 -0
- package/dist/figma/decorator.d.ts +74 -0
- package/dist/figma/decorator.d.ts.map +1 -0
- package/dist/figma/decorator.js +210 -0
- package/dist/figma/decorator.js.map +1 -0
- package/dist/figma/heuristics.d.ts +29 -0
- package/dist/figma/heuristics.d.ts.map +1 -0
- package/dist/figma/heuristics.js +110 -0
- package/dist/figma/heuristics.js.map +1 -0
- package/dist/figma/normalize.d.ts +33 -0
- package/dist/figma/normalize.d.ts.map +1 -0
- package/dist/figma/normalize.js +101 -0
- package/dist/figma/normalize.js.map +1 -0
- package/dist/figma/tokens.d.ts +23 -0
- package/dist/figma/tokens.d.ts.map +1 -0
- package/dist/figma/tokens.js +111 -0
- package/dist/figma/tokens.js.map +1 -0
- package/dist/figma/types.d.ts +118 -0
- package/dist/figma/types.d.ts.map +1 -0
- package/dist/figma/types.js +12 -0
- package/dist/figma/types.js.map +1 -0
- package/dist/i18n/index.d.ts +48 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +135 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/types.d.ts +52 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +85 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/lan/mdns_packet.d.ts +74 -0
- package/dist/lan/mdns_packet.d.ts.map +1 -0
- package/dist/lan/mdns_packet.js +247 -0
- package/dist/lan/mdns_packet.js.map +1 -0
- package/dist/lan/mdns_service.d.ts +102 -0
- package/dist/lan/mdns_service.d.ts.map +1 -0
- package/dist/lan/mdns_service.js +206 -0
- package/dist/lan/mdns_service.js.map +1 -0
- package/dist/license/activate.d.ts +33 -0
- package/dist/license/activate.d.ts.map +1 -0
- package/dist/license/activate.js +135 -0
- package/dist/license/activate.js.map +1 -0
- package/dist/license/fingerprint.d.ts +2 -0
- package/dist/license/fingerprint.d.ts.map +1 -0
- package/dist/license/fingerprint.js +29 -0
- package/dist/license/fingerprint.js.map +1 -0
- package/dist/license/hito4_client.d.ts +24 -0
- package/dist/license/hito4_client.d.ts.map +1 -0
- package/dist/license/hito4_client.js +103 -0
- package/dist/license/hito4_client.js.map +1 -0
- package/dist/license/index.d.ts +22 -0
- package/dist/license/index.d.ts.map +1 -0
- package/dist/license/index.js +125 -0
- package/dist/license/index.js.map +1 -0
- package/dist/license/types.d.ts +38 -0
- package/dist/license/types.d.ts.map +1 -0
- package/dist/license/types.js +9 -0
- package/dist/license/types.js.map +1 -0
- package/dist/migrate/ai-apply.d.ts +198 -0
- package/dist/migrate/ai-apply.d.ts.map +1 -0
- package/dist/migrate/ai-apply.js +833 -0
- package/dist/migrate/ai-apply.js.map +1 -0
- package/dist/migrate/ai-decorator.d.ts +87 -0
- package/dist/migrate/ai-decorator.d.ts.map +1 -0
- package/dist/migrate/ai-decorator.js +203 -0
- package/dist/migrate/ai-decorator.js.map +1 -0
- package/dist/migrate/apply.d.ts +28 -0
- package/dist/migrate/apply.d.ts.map +1 -0
- package/dist/migrate/apply.js +119 -0
- package/dist/migrate/apply.js.map +1 -0
- package/dist/migrate/audit.d.ts +9 -0
- package/dist/migrate/audit.d.ts.map +1 -0
- package/dist/migrate/audit.js +197 -0
- package/dist/migrate/audit.js.map +1 -0
- package/dist/migrate/diff.d.ts +28 -0
- package/dist/migrate/diff.d.ts.map +1 -0
- package/dist/migrate/diff.js +154 -0
- package/dist/migrate/diff.js.map +1 -0
- package/dist/migrate/html-orchestrator.d.ts +81 -0
- package/dist/migrate/html-orchestrator.d.ts.map +1 -0
- package/dist/migrate/html-orchestrator.js +233 -0
- package/dist/migrate/html-orchestrator.js.map +1 -0
- package/dist/migrate/html-walker.d.ts +93 -0
- package/dist/migrate/html-walker.d.ts.map +1 -0
- package/dist/migrate/html-walker.js +288 -0
- package/dist/migrate/html-walker.js.map +1 -0
- package/dist/migrate/js-template-walker.d.ts +118 -0
- package/dist/migrate/js-template-walker.d.ts.map +1 -0
- package/dist/migrate/js-template-walker.js +644 -0
- package/dist/migrate/js-template-walker.js.map +1 -0
- package/dist/migrate/manifest-validator.d.ts +30 -0
- package/dist/migrate/manifest-validator.d.ts.map +1 -0
- package/dist/migrate/manifest-validator.js +261 -0
- package/dist/migrate/manifest-validator.js.map +1 -0
- package/dist/migrate/overrides.d.ts +58 -0
- package/dist/migrate/overrides.d.ts.map +1 -0
- package/dist/migrate/overrides.js +193 -0
- package/dist/migrate/overrides.js.map +1 -0
- package/dist/migrate/plugin-scope.d.ts +42 -0
- package/dist/migrate/plugin-scope.d.ts.map +1 -0
- package/dist/migrate/plugin-scope.js +94 -0
- package/dist/migrate/plugin-scope.js.map +1 -0
- package/dist/migrate/types.d.ts +45 -0
- package/dist/migrate/types.d.ts.map +1 -0
- package/dist/migrate/types.js +9 -0
- package/dist/migrate/types.js.map +1 -0
- package/dist/migrate/verb-inference.d.ts +37 -0
- package/dist/migrate/verb-inference.d.ts.map +1 -0
- package/dist/migrate/verb-inference.js +274 -0
- package/dist/migrate/verb-inference.js.map +1 -0
- package/dist/nac3/attrs.d.ts +87 -0
- package/dist/nac3/attrs.d.ts.map +1 -0
- package/dist/nac3/attrs.js +134 -0
- package/dist/nac3/attrs.js.map +1 -0
- package/dist/nac3/scenario_dsl.d.ts +71 -0
- package/dist/nac3/scenario_dsl.d.ts.map +1 -0
- package/dist/nac3/scenario_dsl.js +191 -0
- package/dist/nac3/scenario_dsl.js.map +1 -0
- package/dist/nac3/tokens.d.ts +126 -0
- package/dist/nac3/tokens.d.ts.map +1 -0
- package/dist/nac3/tokens.js +138 -0
- package/dist/nac3/tokens.js.map +1 -0
- package/dist/reader/parsers/csv.d.ts +42 -0
- package/dist/reader/parsers/csv.d.ts.map +1 -0
- package/dist/reader/parsers/csv.js +221 -0
- package/dist/reader/parsers/csv.js.map +1 -0
- package/dist/reader/parsers/docx.d.ts +31 -0
- package/dist/reader/parsers/docx.d.ts.map +1 -0
- package/dist/reader/parsers/docx.js +51 -0
- package/dist/reader/parsers/docx.js.map +1 -0
- package/dist/reader/parsers/epub.d.ts +39 -0
- package/dist/reader/parsers/epub.d.ts.map +1 -0
- package/dist/reader/parsers/epub.js +265 -0
- package/dist/reader/parsers/epub.js.map +1 -0
- package/dist/reader/parsers/html.d.ts +40 -0
- package/dist/reader/parsers/html.d.ts.map +1 -0
- package/dist/reader/parsers/html.js +386 -0
- package/dist/reader/parsers/html.js.map +1 -0
- package/dist/reader/parsers/md.d.ts +30 -0
- package/dist/reader/parsers/md.d.ts.map +1 -0
- package/dist/reader/parsers/md.js +199 -0
- package/dist/reader/parsers/md.js.map +1 -0
- package/dist/reader/parsers/pdf.d.ts +39 -0
- package/dist/reader/parsers/pdf.d.ts.map +1 -0
- package/dist/reader/parsers/pdf.js +220 -0
- package/dist/reader/parsers/pdf.js.map +1 -0
- package/dist/reader/parsers/rtf.d.ts +37 -0
- package/dist/reader/parsers/rtf.d.ts.map +1 -0
- package/dist/reader/parsers/rtf.js +347 -0
- package/dist/reader/parsers/rtf.js.map +1 -0
- package/dist/reader/parsers/source.d.ts +32 -0
- package/dist/reader/parsers/source.d.ts.map +1 -0
- package/dist/reader/parsers/source.js +122 -0
- package/dist/reader/parsers/source.js.map +1 -0
- package/dist/reader/parsers/txt.d.ts +25 -0
- package/dist/reader/parsers/txt.d.ts.map +1 -0
- package/dist/reader/parsers/txt.js +56 -0
- package/dist/reader/parsers/txt.js.map +1 -0
- package/dist/reader/parsers/xlsx.d.ts +33 -0
- package/dist/reader/parsers/xlsx.d.ts.map +1 -0
- package/dist/reader/parsers/xlsx.js +143 -0
- package/dist/reader/parsers/xlsx.js.map +1 -0
- package/dist/reader/registry.d.ts +39 -0
- package/dist/reader/registry.d.ts.map +1 -0
- package/dist/reader/registry.js +172 -0
- package/dist/reader/registry.js.map +1 -0
- package/dist/reader/search.d.ts +27 -0
- package/dist/reader/search.d.ts.map +1 -0
- package/dist/reader/search.js +77 -0
- package/dist/reader/search.js.map +1 -0
- package/dist/reader/state.d.ts +56 -0
- package/dist/reader/state.d.ts.map +1 -0
- package/dist/reader/state.js +179 -0
- package/dist/reader/state.js.map +1 -0
- package/dist/reader/types.d.ts +119 -0
- package/dist/reader/types.d.ts.map +1 -0
- package/dist/reader/types.js +23 -0
- package/dist/reader/types.js.map +1 -0
- package/dist/ship/run.d.ts +26 -0
- package/dist/ship/run.d.ts.map +1 -0
- package/dist/ship/run.js +123 -0
- package/dist/ship/run.js.map +1 -0
- package/dist/template/index.d.ts +50 -0
- package/dist/template/index.d.ts.map +1 -0
- package/dist/template/index.js +140 -0
- package/dist/template/index.js.map +1 -0
- package/dist/ui/colors.d.ts +13 -0
- package/dist/ui/colors.d.ts.map +1 -0
- package/dist/ui/colors.js +26 -0
- package/dist/ui/colors.js.map +1 -0
- package/dist/validate/index.d.ts +19 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +181 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/vault/catalog.d.ts +55 -0
- package/dist/vault/catalog.d.ts.map +1 -0
- package/dist/vault/catalog.js +424 -0
- package/dist/vault/catalog.js.map +1 -0
- package/dist/vault/crypto.d.ts +82 -0
- package/dist/vault/crypto.d.ts.map +1 -0
- package/dist/vault/crypto.js +173 -0
- package/dist/vault/crypto.js.map +1 -0
- package/dist/vault/git_askpass.d.ts +26 -0
- package/dist/vault/git_askpass.d.ts.map +1 -0
- package/dist/vault/git_askpass.js +104 -0
- package/dist/vault/git_askpass.js.map +1 -0
- package/dist/vault/migrator.d.ts +57 -0
- package/dist/vault/migrator.d.ts.map +1 -0
- package/dist/vault/migrator.js +204 -0
- package/dist/vault/migrator.js.map +1 -0
- package/dist/vault/redactor.d.ts +73 -0
- package/dist/vault/redactor.d.ts.map +1 -0
- package/dist/vault/redactor.js +182 -0
- package/dist/vault/redactor.js.map +1 -0
- package/dist/vault/store.d.ts +132 -0
- package/dist/vault/store.d.ts.map +1 -0
- package/dist/vault/store.js +335 -0
- package/dist/vault/store.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/dist/voice/chunker.d.ts +43 -0
- package/dist/voice/chunker.d.ts.map +1 -0
- package/dist/voice/chunker.js +133 -0
- package/dist/voice/chunker.js.map +1 -0
- package/dist/voice/config.d.ts +14 -0
- package/dist/voice/config.d.ts.map +1 -0
- package/dist/voice/config.js +51 -0
- package/dist/voice/config.js.map +1 -0
- package/dist/voice/intents.d.ts +71 -0
- package/dist/voice/intents.d.ts.map +1 -0
- package/dist/voice/intents.js +0 -0
- package/dist/voice/intents.js.map +1 -0
- package/dist/voice/providers/elevenlabs.d.ts +53 -0
- package/dist/voice/providers/elevenlabs.d.ts.map +1 -0
- package/dist/voice/providers/elevenlabs.js +159 -0
- package/dist/voice/providers/elevenlabs.js.map +1 -0
- package/dist/voice/providers/google.d.ts +56 -0
- package/dist/voice/providers/google.d.ts.map +1 -0
- package/dist/voice/providers/google.js +253 -0
- package/dist/voice/providers/google.js.map +1 -0
- package/dist/voice/providers/whisper.d.ts +44 -0
- package/dist/voice/providers/whisper.d.ts.map +1 -0
- package/dist/voice/providers/whisper.js +179 -0
- package/dist/voice/providers/whisper.js.map +1 -0
- package/dist/voice/registry.d.ts +35 -0
- package/dist/voice/registry.d.ts.map +1 -0
- package/dist/voice/registry.js +48 -0
- package/dist/voice/registry.js.map +1 -0
- package/dist/voice/router.d.ts +62 -0
- package/dist/voice/router.d.ts.map +1 -0
- package/dist/voice/router.js +175 -0
- package/dist/voice/router.js.map +1 -0
- package/dist/voice/types.d.ts +116 -0
- package/dist/voice/types.d.ts.map +1 -0
- package/dist/voice/types.js +22 -0
- package/dist/voice/types.js.map +1 -0
- package/dist/voice/voiceprint/enrollment.d.ts +36 -0
- package/dist/voice/voiceprint/enrollment.d.ts.map +1 -0
- package/dist/voice/voiceprint/enrollment.js +71 -0
- package/dist/voice/voiceprint/enrollment.js.map +1 -0
- package/dist/voice/voiceprint/identify.d.ts +16 -0
- package/dist/voice/voiceprint/identify.d.ts.map +1 -0
- package/dist/voice/voiceprint/identify.js +20 -0
- package/dist/voice/voiceprint/identify.js.map +1 -0
- package/dist/voice/voiceprint/liveness.d.ts +90 -0
- package/dist/voice/voiceprint/liveness.d.ts.map +1 -0
- package/dist/voice/voiceprint/liveness.js +251 -0
- package/dist/voice/voiceprint/liveness.js.map +1 -0
- package/dist/voice/voiceprint/match.d.ts +54 -0
- package/dist/voice/voiceprint/match.d.ts.map +1 -0
- package/dist/voice/voiceprint/match.js +88 -0
- package/dist/voice/voiceprint/match.js.map +1 -0
- package/dist/voice/voiceprint/providers/local-mfcc-stub.d.ts +44 -0
- package/dist/voice/voiceprint/providers/local-mfcc-stub.d.ts.map +1 -0
- package/dist/voice/voiceprint/providers/local-mfcc-stub.js +92 -0
- package/dist/voice/voiceprint/providers/local-mfcc-stub.js.map +1 -0
- package/dist/voice/voiceprint/store.d.ts +60 -0
- package/dist/voice/voiceprint/store.d.ts.map +1 -0
- package/dist/voice/voiceprint/store.js +155 -0
- package/dist/voice/voiceprint/store.js.map +1 -0
- package/dist/voice/voiceprint/trust.d.ts +90 -0
- package/dist/voice/voiceprint/trust.d.ts.map +1 -0
- package/dist/voice/voiceprint/trust.js +150 -0
- package/dist/voice/voiceprint/trust.js.map +1 -0
- package/dist/voice/voiceprint/types.d.ts +100 -0
- package/dist/voice/voiceprint/types.d.ts.map +1 -0
- package/dist/voice/voiceprint/types.js +23 -0
- package/dist/voice/voiceprint/types.js.map +1 -0
- package/dist/voice/wake.d.ts +64 -0
- package/dist/voice/wake.d.ts.map +1 -0
- package/dist/voice/wake.js +143 -0
- package/dist/voice/wake.js.map +1 -0
- package/docs/manuals/manual.ar.html +91 -0
- package/docs/manuals/manual.de.html +100 -0
- package/docs/manuals/manual.en.html +118 -0
- package/docs/manuals/manual.es.html +120 -0
- package/docs/manuals/manual.fr.html +102 -0
- package/docs/manuals/manual.hi.html +93 -0
- package/docs/manuals/manual.it.html +93 -0
- package/docs/manuals/manual.ja.html +97 -0
- package/docs/manuals/manual.pt.html +103 -0
- package/docs/manuals/manual.zh.html +89 -0
- package/package.json +94 -0
- package/src/i18n/catalogs/ar.json +86 -0
- package/src/i18n/catalogs/de.json +86 -0
- package/src/i18n/catalogs/en.json +86 -0
- package/src/i18n/catalogs/es.json +86 -0
- package/src/i18n/catalogs/fr.json +86 -0
- package/src/i18n/catalogs/hi.json +86 -0
- package/src/i18n/catalogs/it.json +86 -0
- package/src/i18n/catalogs/ja.json +86 -0
- package/src/i18n/catalogs/pt.json +86 -0
- package/src/i18n/catalogs/zh.json +86 -0
- package/templates/react-app/README.md +43 -0
- package/templates/react-app/index.html +12 -0
- package/templates/react-app/package.json +35 -0
- package/templates/react-app/src/App.tsx +106 -0
- package/templates/react-app/src/main.tsx +21 -0
- package/templates/react-app/src/nac/manifest.ts +46 -0
- package/templates/react-app/src/styles.css +68 -0
- package/templates/react-app/tsconfig.json +19 -0
- package/templates/react-app/vite.config.ts +12 -0
- package/templates/react-app/yujin.forge.json +15 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* yf gen-tests <dir> [--framework <name>] [--all] [--base-url <url>] [--overwrite]
|
|
3
|
+
*
|
|
4
|
+
* Reads <dir>/manifest.json, builds a TestPlan covering every
|
|
5
|
+
* manifest element, then emits the test suite in the requested
|
|
6
|
+
* framework's syntax.
|
|
7
|
+
*
|
|
8
|
+
* Multi-framework support reflects the reality that target teams
|
|
9
|
+
* already have a test framework. Forge does NOT mandate one.
|
|
10
|
+
*
|
|
11
|
+
* Auto-detection: if --framework is omitted, inspect <dir> for
|
|
12
|
+
* existing config files (playwright.config.ts, cypress.config.ts,
|
|
13
|
+
* vitest.config.ts, wdio.conf.ts) and pick that. If multiple are
|
|
14
|
+
* present and none is selected explicitly, list them and require
|
|
15
|
+
* the user to pick.
|
|
16
|
+
*/
|
|
17
|
+
import { promises as fs } from 'node:fs';
|
|
18
|
+
import path from 'node:path';
|
|
19
|
+
import { c, header } from '../ui/colors.js';
|
|
20
|
+
import { planFromManifest, detectFramework, generateTests, ALL_FRAMEWORKS, } from '../codegen/e2e.js';
|
|
21
|
+
export function registerGenTestsCommand(program) {
|
|
22
|
+
program
|
|
23
|
+
.command('gen-tests <dir>')
|
|
24
|
+
.description('Generate an e2e test corpus from a NAC-3 decorated app\'s manifest.')
|
|
25
|
+
.option('--framework <name>', 'playwright | cypress | vitest | wdio | all | csv (default: auto-detect)')
|
|
26
|
+
.option('--base-url <url>', 'URL the tests should navigate to (default: http://localhost:3000)')
|
|
27
|
+
.option('--overwrite', 'overwrite existing test files instead of skipping')
|
|
28
|
+
.action(async (dir, opts) => {
|
|
29
|
+
await runGenTests(dir, opts);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function parseFrameworkArg(raw) {
|
|
33
|
+
if (!raw)
|
|
34
|
+
return null;
|
|
35
|
+
if (raw === 'all')
|
|
36
|
+
return 'all';
|
|
37
|
+
const items = raw.split(',').map((s) => s.trim()).filter(Boolean);
|
|
38
|
+
const valid = [];
|
|
39
|
+
for (const item of items) {
|
|
40
|
+
if (ALL_FRAMEWORKS.includes(item))
|
|
41
|
+
valid.push(item);
|
|
42
|
+
else
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return valid.length > 0 ? valid : null;
|
|
46
|
+
}
|
|
47
|
+
export async function runGenTests(dir, opts) {
|
|
48
|
+
header('Yujin Forge -- e2e test corpus generator');
|
|
49
|
+
console.log('');
|
|
50
|
+
const targetDir = path.resolve(process.cwd(), dir);
|
|
51
|
+
const manifestPath = path.join(targetDir, 'manifest.json');
|
|
52
|
+
const ok = await fs.stat(manifestPath).then(() => true, () => false);
|
|
53
|
+
if (!ok) {
|
|
54
|
+
console.error(c.error('No manifest.json found in: ' + targetDir));
|
|
55
|
+
console.error(c.dim('Run `yf migrate <repo> --ai-silent` first to produce one.'));
|
|
56
|
+
process.exitCode = 1;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
/* Resolve framework. */
|
|
60
|
+
let frameworks;
|
|
61
|
+
const arg = parseFrameworkArg(opts.framework);
|
|
62
|
+
if (arg === 'all') {
|
|
63
|
+
frameworks = [...ALL_FRAMEWORKS];
|
|
64
|
+
}
|
|
65
|
+
else if (arg && arg.length > 0) {
|
|
66
|
+
frameworks = arg;
|
|
67
|
+
}
|
|
68
|
+
else if (opts.framework) {
|
|
69
|
+
console.error(c.error('Unknown --framework value: ' + opts.framework));
|
|
70
|
+
console.error(c.dim('Supported: ' + ALL_FRAMEWORKS.join(', ') + ', all, or csv.'));
|
|
71
|
+
process.exitCode = 1;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
/* Auto-detect from target dir. */
|
|
76
|
+
const detected = await detectFramework(targetDir);
|
|
77
|
+
if (!detected) {
|
|
78
|
+
console.error(c.error('Could not auto-detect a test framework in: ' + targetDir));
|
|
79
|
+
console.error(c.dim('Pass --framework <name> explicitly. Supported: ' + ALL_FRAMEWORKS.join(', ') + '.'));
|
|
80
|
+
process.exitCode = 1;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
frameworks = [detected];
|
|
84
|
+
console.log(c.dim('Auto-detected framework: ') + c.brand(detected));
|
|
85
|
+
}
|
|
86
|
+
/* Build plan. */
|
|
87
|
+
const manifest = JSON.parse(await fs.readFile(manifestPath, 'utf-8'));
|
|
88
|
+
const plan = planFromManifest(manifest, { pageUrlToken: opts.baseUrl || 'http://localhost:3000' });
|
|
89
|
+
console.log(c.dim('Manifest: ') + manifestPath);
|
|
90
|
+
console.log(c.dim('Plugin slug: ') + plan.plugin);
|
|
91
|
+
console.log(c.dim('Manifest elements: ') + plan.total_elements);
|
|
92
|
+
console.log(c.dim('Surface exercised: ') + plan.exercised_elements + ' / ' + plan.total_elements);
|
|
93
|
+
console.log(c.dim('Test cases: ') + plan.cases.length);
|
|
94
|
+
console.log(c.dim('Frameworks: ') + frameworks.join(', '));
|
|
95
|
+
console.log('');
|
|
96
|
+
const framework = frameworks.length === 1
|
|
97
|
+
? frameworks[0]
|
|
98
|
+
: frameworks;
|
|
99
|
+
const genOpts = {
|
|
100
|
+
outDir: targetDir,
|
|
101
|
+
framework,
|
|
102
|
+
baseUrl: opts.baseUrl,
|
|
103
|
+
overwrite: !!opts.overwrite,
|
|
104
|
+
};
|
|
105
|
+
const results = await generateTests(plan, genOpts);
|
|
106
|
+
for (const r of results) {
|
|
107
|
+
console.log(c.success(r.framework) + c.dim(': ') + r.filesWritten.length + ' file(s) written, ' + r.filesSkipped.length + ' skipped.');
|
|
108
|
+
for (const f of r.filesWritten)
|
|
109
|
+
console.log(' ' + c.success('+') + ' ' + f);
|
|
110
|
+
for (const f of r.filesSkipped)
|
|
111
|
+
console.log(' ' + c.dim('. ') + f + c.dim(' (exists, pass --overwrite to replace)'));
|
|
112
|
+
}
|
|
113
|
+
console.log('');
|
|
114
|
+
console.log(c.success('Coverage: ') + plan.exercised_elements + ' / ' + plan.total_elements + ' manifest elements exercised.');
|
|
115
|
+
console.log(c.dim('Coverage metric: "agent-relevant surface" -- one test per (nac_id, role, verb) tuple.'));
|
|
116
|
+
console.log(c.dim('This is the honest claim; do NOT report this as line-coverage.'));
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=gen-tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gen-tests.js","sourceRoot":"","sources":["../../src/commands/gen-tests.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `yf license <action>` -- license-lifecycle subcommands. Action
|
|
3
|
+
* is one of: activate, status, revoke.
|
|
4
|
+
*
|
|
5
|
+
* `status` is implemented today (reads the local cache).
|
|
6
|
+
* `activate` + `revoke` ship with the License client milestone.
|
|
7
|
+
*/
|
|
8
|
+
import type { Command } from 'commander';
|
|
9
|
+
export interface LicenseOptions {
|
|
10
|
+
key?: string;
|
|
11
|
+
json?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function registerLicenseCommand(program: Command): void;
|
|
14
|
+
//# sourceMappingURL=license.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/commands/license.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+J7D"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { c, header } from '../ui/colors.js';
|
|
2
|
+
import { loadLicense, isPaidSeat, isTrialActive } from '../license/index.js';
|
|
3
|
+
import { activate, revoke, InvalidLicenseKeyError } from '../license/activate.js';
|
|
4
|
+
import { readLicense as readPolarLicense, writeLicense as writePolarLicense, buildCheckoutUrl as buildPolarCheckoutUrl, describeLicense as describePolarLicense, isActive as isPolarActive, } from '../core/polar.js';
|
|
5
|
+
export function registerLicenseCommand(program) {
|
|
6
|
+
const cmd = program
|
|
7
|
+
.command('license')
|
|
8
|
+
.description('Activate, inspect, or revoke a Yujin Forge license.');
|
|
9
|
+
cmd
|
|
10
|
+
.command('status')
|
|
11
|
+
.description('Print the current license state (JWT seat + Polar subscription).')
|
|
12
|
+
.option('--json', 'emit JSON instead of human-readable output')
|
|
13
|
+
.action(async (opts) => {
|
|
14
|
+
const lic = await loadLicense();
|
|
15
|
+
const polar = await readPolarLicense();
|
|
16
|
+
if (opts.json) {
|
|
17
|
+
process.stdout.write(JSON.stringify({ jwt_seat: lic, polar }, null, 2) + '\n');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
header('Yujin Forge -- license status');
|
|
21
|
+
console.log('');
|
|
22
|
+
console.log(' JWT seat: ' + colorStatus(lic.status) + c.dim(' (' + lic.source + ')'));
|
|
23
|
+
if (isPaidSeat(lic)) {
|
|
24
|
+
console.log(' Seat email: ' + (lic.seat?.email ?? c.dim('(unknown)')));
|
|
25
|
+
console.log(' Expires: ' + (lic.seat?.expiresAt ?? c.dim('(no expiry)')));
|
|
26
|
+
}
|
|
27
|
+
else if (isTrialActive(lic)) {
|
|
28
|
+
console.log(' Trial ends: ' + (lic.trial?.endsAt ?? c.dim('(unknown)')));
|
|
29
|
+
console.log(' Days left: ' + (lic.trial?.daysLeft ?? 0));
|
|
30
|
+
}
|
|
31
|
+
console.log('');
|
|
32
|
+
console.log(' Polar plan: ' + colorPolarPlan(polar.plan));
|
|
33
|
+
console.log(' ' + describePolarLicense(polar));
|
|
34
|
+
if (!isPolarActive(polar) && !isPaidSeat(lic)) {
|
|
35
|
+
console.log('');
|
|
36
|
+
console.log(' ' + c.warn('No active subscription.'));
|
|
37
|
+
console.log(' Run ' + c.code('yf license activate') + ' to open the Polar checkout.');
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
cmd
|
|
41
|
+
.command('activate')
|
|
42
|
+
.description('Install a JWT seat key OR open the Polar checkout (no key supplied).')
|
|
43
|
+
.option('-k, --key <key>', 'paid seat key issued by the parent server')
|
|
44
|
+
.option('--user-handle <handle>', 'email or username to bind the Polar subscription to')
|
|
45
|
+
.action(async (opts) => {
|
|
46
|
+
const key = (opts.key ?? '').trim();
|
|
47
|
+
if (key === '') {
|
|
48
|
+
/* No JWT supplied -- redirect to Polar checkout. */
|
|
49
|
+
const url = buildPolarCheckoutUrl(opts.userHandle);
|
|
50
|
+
header('Yujin Forge -- attach payment method');
|
|
51
|
+
console.log('');
|
|
52
|
+
console.log(' Open this URL to attach a card + start the 7-day free window:');
|
|
53
|
+
console.log(' ' + c.code(url));
|
|
54
|
+
console.log('');
|
|
55
|
+
console.log(c.dim(' - Day 1-7: free, cancel any time with ') + c.code('yf license cancel'));
|
|
56
|
+
console.log(c.dim(' - Day 8: first USD 10 charge (auto)'));
|
|
57
|
+
console.log(c.dim(' Once the Polar webhook fires, ~/.yujin-forge/license.json'));
|
|
58
|
+
console.log(c.dim(' is updated automatically. Run `yf license status` to confirm.'));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const res = await activate(key);
|
|
63
|
+
header('Yujin Forge -- license activated');
|
|
64
|
+
console.log('');
|
|
65
|
+
console.log(' Seat email: ' + (res.seat.email ?? c.dim('(not bound to email)')));
|
|
66
|
+
console.log(' Expires: ' + (res.seat.expiresAt ?? c.dim('(no expiry)')));
|
|
67
|
+
console.log(' Fingerprint: ' + c.dim(res.seat.machineFingerprint));
|
|
68
|
+
console.log(' Stored at: ' + c.dim(res.path));
|
|
69
|
+
console.log('');
|
|
70
|
+
console.log(c.success('License installed. Commercial features unlocked.'));
|
|
71
|
+
console.log(c.dim('Server-side validation runs every 24h once the license server is live.'));
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
if (err instanceof InvalidLicenseKeyError) {
|
|
75
|
+
console.error(c.error('Invalid license key: ') + err.message);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.error(c.error(err instanceof Error ? err.message : String(err)));
|
|
79
|
+
}
|
|
80
|
+
process.exitCode = 1;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
cmd
|
|
84
|
+
.command('revoke')
|
|
85
|
+
.description('Remove the local license cache (return to trial mode).')
|
|
86
|
+
.action(async (_opts) => {
|
|
87
|
+
const removed = await revoke();
|
|
88
|
+
header('Yujin Forge -- license revoked');
|
|
89
|
+
console.log('');
|
|
90
|
+
if (removed) {
|
|
91
|
+
console.log(c.success('License removed. Falling back to trial semantics.'));
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
console.log(c.dim('No license was installed -- nothing to do.'));
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
cmd
|
|
98
|
+
.command('cancel')
|
|
99
|
+
.description('Cancel the Polar subscription. Access continues until the current billing date.')
|
|
100
|
+
.action(async () => {
|
|
101
|
+
const polar = await readPolarLicense();
|
|
102
|
+
header('Yujin Forge -- cancel subscription');
|
|
103
|
+
console.log('');
|
|
104
|
+
if (polar.plan === 'none') {
|
|
105
|
+
console.log(c.dim('No subscription on file. Nothing to cancel.'));
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (polar.plan === 'institutional' || polar.plan === 'gifted' || polar.plan === 'free-public') {
|
|
109
|
+
console.log(c.warn('Free seats are not Polar-billed. Nothing to cancel.'));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (polar.plan === 'cancelled') {
|
|
113
|
+
console.log(c.dim('Subscription already cancelled.'));
|
|
114
|
+
console.log(' ' + describePolarLicense(polar));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
/* Mark cancelled. Access continues until cancel_grace_until
|
|
118
|
+
* (trial path) or expires_at (paid path). */
|
|
119
|
+
const next = {
|
|
120
|
+
...polar,
|
|
121
|
+
plan: 'cancelled',
|
|
122
|
+
expires_at: polar.plan === 'trial'
|
|
123
|
+
? (polar.cancel_grace_until ?? polar.bills_first_on ?? null)
|
|
124
|
+
: (polar.expires_at ?? null),
|
|
125
|
+
};
|
|
126
|
+
await writePolarLicense(next);
|
|
127
|
+
console.log(c.success('Subscription cancelled.'));
|
|
128
|
+
console.log(' ' + describePolarLicense(next));
|
|
129
|
+
console.log('');
|
|
130
|
+
console.log(c.dim('Run ') + c.code('yf license resubscribe') + c.dim(' to reactivate while access is still live.'));
|
|
131
|
+
});
|
|
132
|
+
cmd
|
|
133
|
+
.command('resubscribe')
|
|
134
|
+
.description('Re-activate a cancelled Polar subscription (or open checkout if expired).')
|
|
135
|
+
.action(async () => {
|
|
136
|
+
const polar = await readPolarLicense();
|
|
137
|
+
header('Yujin Forge -- resubscribe');
|
|
138
|
+
console.log('');
|
|
139
|
+
if (polar.plan !== 'cancelled') {
|
|
140
|
+
console.log(c.dim('Current plan is "' + polar.plan + '". Resubscribe is only for cancelled plans.'));
|
|
141
|
+
if (polar.plan === 'none') {
|
|
142
|
+
console.log(' Run ' + c.code('yf license activate') + ' to start a new subscription.');
|
|
143
|
+
}
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const stillActive = isPolarActive(polar);
|
|
147
|
+
if (stillActive) {
|
|
148
|
+
/* Inside the original billing period -- flip back to paid
|
|
149
|
+
* without re-running checkout. */
|
|
150
|
+
const next = { ...polar, plan: 'paid' };
|
|
151
|
+
await writePolarLicense(next);
|
|
152
|
+
console.log(c.success('Reactivated as paid. Next bill keeps the original date.'));
|
|
153
|
+
console.log(' ' + describePolarLicense(next));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
/* Past the grace period -- the user needs a fresh Polar
|
|
157
|
+
* checkout (the subscription on Polar is dead). */
|
|
158
|
+
const url = buildPolarCheckoutUrl(polar.user_handle);
|
|
159
|
+
console.log(c.warn('Your previous billing period has expired.'));
|
|
160
|
+
console.log(' Open this URL to start a fresh subscription:');
|
|
161
|
+
console.log(' ' + c.code(url));
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
function colorStatus(s) {
|
|
165
|
+
if (s === 'paid')
|
|
166
|
+
return c.success(s);
|
|
167
|
+
if (s === 'trial')
|
|
168
|
+
return c.info(s);
|
|
169
|
+
if (s === 'expired')
|
|
170
|
+
return c.warn(s);
|
|
171
|
+
return c.error(s);
|
|
172
|
+
}
|
|
173
|
+
function colorPolarPlan(p) {
|
|
174
|
+
if (p === 'paid' || p === 'institutional' || p === 'gifted' || p === 'free-public')
|
|
175
|
+
return c.success(p);
|
|
176
|
+
if (p === 'trial')
|
|
177
|
+
return c.info(p);
|
|
178
|
+
if (p === 'cancelled')
|
|
179
|
+
return c.warn(p);
|
|
180
|
+
return c.error(p);
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=license.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/commands/license.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `yf log` -- runtime knobs for the SQ.K logger.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands (MVP):
|
|
5
|
+
* yf log level Print the active default + scope overrides.
|
|
6
|
+
* yf log level <scope> <level> Override a scope (current process only).
|
|
7
|
+
* yf log level --reset <scope> Clear the override.
|
|
8
|
+
* yf log scopes List well-known scopes.
|
|
9
|
+
*
|
|
10
|
+
* Bigger items deferred (see docs/PENDING_AND_SQ_LESSONS.md SQ.K):
|
|
11
|
+
* - `yf log capture --since 10m` Bundle a time-windowed dump.
|
|
12
|
+
* - `yf log tail <scope>` Stream the persistent file.
|
|
13
|
+
* - `--persist` flag to write the override to disk.
|
|
14
|
+
*
|
|
15
|
+
* ASCII-only.
|
|
16
|
+
*/
|
|
17
|
+
import type { Command } from 'commander';
|
|
18
|
+
export declare function registerLogCommand(program: Command): void;
|
|
19
|
+
//# sourceMappingURL=log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoFzD"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { c, header } from '../ui/colors.js';
|
|
2
|
+
import { setScopeLevel, levelForScope, currentDefaultLevel, LEVELS, } from '../core/logger.js';
|
|
3
|
+
const KNOWN_SCOPES = [
|
|
4
|
+
{ scope: 'state_channel', purpose: 'Cross-device PubSub long-poll loop' },
|
|
5
|
+
{ scope: 'cascade_router', purpose: 'laptop -> CF tunnel -> GHA fallback' },
|
|
6
|
+
{ scope: 'voice_loop', purpose: 'idle / listening / speaking FSM' },
|
|
7
|
+
{ scope: 'polar_webhook', purpose: 'Polar webhook receiver (server-side)' },
|
|
8
|
+
{ scope: 'brain_client', purpose: 'HITO 4 callFlow / fetchServerLicense' },
|
|
9
|
+
{ scope: 'hito4.flow_router', purpose: 'Server-side flow dispatch' },
|
|
10
|
+
{ scope: 'pairing', purpose: 'Mobile pair / unpair / encrypt' },
|
|
11
|
+
{ scope: 'lan_browse', purpose: 'mDNS / polling discovery' },
|
|
12
|
+
];
|
|
13
|
+
function isValidLevel(v) {
|
|
14
|
+
return LEVELS.includes(v);
|
|
15
|
+
}
|
|
16
|
+
export function registerLogCommand(program) {
|
|
17
|
+
const root = program
|
|
18
|
+
.command('log')
|
|
19
|
+
.description('Runtime knobs for the logging subsystem (SQ.K MVP).');
|
|
20
|
+
root
|
|
21
|
+
.command('level [scope] [level]')
|
|
22
|
+
.description('Print or set log level (current process). Without args, prints the active config.')
|
|
23
|
+
.option('--reset', 'clear the override for the given scope')
|
|
24
|
+
.option('--json', 'machine-readable output')
|
|
25
|
+
.action((scope, level, opts) => {
|
|
26
|
+
if (opts.reset) {
|
|
27
|
+
if (!scope) {
|
|
28
|
+
console.error(c.error('--reset requires a scope'));
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
setScopeLevel(scope, null);
|
|
33
|
+
if (opts.json) {
|
|
34
|
+
process.stdout.write(JSON.stringify({ ok: true, scope, reset: true }) + '\n');
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.log(c.success('+') + ' override cleared on scope ' + c.dim(scope));
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (scope && level) {
|
|
42
|
+
if (!isValidLevel(level)) {
|
|
43
|
+
console.error(c.error('invalid level "' + level + '" (must be one of: ' + LEVELS.join(', ') + ')'));
|
|
44
|
+
process.exitCode = 1;
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
setScopeLevel(scope, level);
|
|
48
|
+
if (opts.json) {
|
|
49
|
+
process.stdout.write(JSON.stringify({ ok: true, scope, level }) + '\n');
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
console.log(c.success('+') + ' scope ' + c.brand(scope) + ' -> ' + c.info(level));
|
|
53
|
+
}
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
/* No mutation -- just print state. */
|
|
57
|
+
const def = currentDefaultLevel();
|
|
58
|
+
if (opts.json) {
|
|
59
|
+
process.stdout.write(JSON.stringify({
|
|
60
|
+
ok: true,
|
|
61
|
+
default_level: def,
|
|
62
|
+
known_scopes: KNOWN_SCOPES.map((k) => ({
|
|
63
|
+
scope: k.scope, level: levelForScope(k.scope),
|
|
64
|
+
})),
|
|
65
|
+
}, null, 2) + '\n');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
header('Yujin Forge -- log levels');
|
|
69
|
+
console.log('');
|
|
70
|
+
console.log(' Default level: ' + c.brand(def));
|
|
71
|
+
console.log('');
|
|
72
|
+
console.log(' Scope Level');
|
|
73
|
+
console.log(' ' + '-'.repeat(50));
|
|
74
|
+
for (const k of KNOWN_SCOPES) {
|
|
75
|
+
const lvl = levelForScope(k.scope);
|
|
76
|
+
const overridden = lvl !== def;
|
|
77
|
+
const lvlStr = overridden ? c.info(lvl) : c.dim(lvl);
|
|
78
|
+
console.log(' ' + k.scope.padEnd(32) + ' ' + lvlStr);
|
|
79
|
+
}
|
|
80
|
+
console.log('');
|
|
81
|
+
console.log(c.dim(' Override: yf log level <scope> <level>'));
|
|
82
|
+
console.log(c.dim(' Reset: yf log level --reset <scope>'));
|
|
83
|
+
console.log(c.dim(' N.B. overrides apply to the current process only -- restart resets.'));
|
|
84
|
+
});
|
|
85
|
+
root
|
|
86
|
+
.command('scopes')
|
|
87
|
+
.description('List the well-known scopes + their purpose.')
|
|
88
|
+
.option('--json', 'machine-readable output')
|
|
89
|
+
.action((opts) => {
|
|
90
|
+
if (opts.json) {
|
|
91
|
+
process.stdout.write(JSON.stringify(KNOWN_SCOPES, null, 2) + '\n');
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
header('Yujin Forge -- log scopes');
|
|
95
|
+
console.log('');
|
|
96
|
+
for (const k of KNOWN_SCOPES) {
|
|
97
|
+
console.log(' ' + c.brand(k.scope.padEnd(32)) + c.dim(' ' + k.purpose));
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `yf migrate <repo> --audit` -- produce an audit report.
|
|
3
|
+
* `yf migrate <repo> --apply` -- run the AST migration (.tsx/.jsx).
|
|
4
|
+
* `yf migrate <repo> --html` -- silent HTML walker (auto-apply).
|
|
5
|
+
* `yf migrate <repo> --assisted` -- HTML walker with CLI prompts for
|
|
6
|
+
* low-confidence candidates.
|
|
7
|
+
*
|
|
8
|
+
* Audit is read-only + free for everyone (the SPEC carves it out
|
|
9
|
+
* as a pre-purchase funnel surface). Apply / html / assisted are
|
|
10
|
+
* gated on a paid seat.
|
|
11
|
+
*/
|
|
12
|
+
import type { Command } from 'commander';
|
|
13
|
+
import { type AiMode, type AiDecorateFn } from '../migrate/ai-decorator.js';
|
|
14
|
+
export interface MigrateOptions {
|
|
15
|
+
audit?: boolean;
|
|
16
|
+
apply?: boolean;
|
|
17
|
+
yes?: boolean;
|
|
18
|
+
out?: string;
|
|
19
|
+
subdir?: string;
|
|
20
|
+
dryRun?: boolean;
|
|
21
|
+
html?: boolean;
|
|
22
|
+
assisted?: boolean;
|
|
23
|
+
threshold?: string;
|
|
24
|
+
aiSilent?: boolean;
|
|
25
|
+
aiAssisted?: boolean;
|
|
26
|
+
aiModel?: string;
|
|
27
|
+
aiHint?: string;
|
|
28
|
+
aiOut?: string;
|
|
29
|
+
withPilot?: boolean;
|
|
30
|
+
aiSearch?: string;
|
|
31
|
+
aiOverride?: string;
|
|
32
|
+
noOverrides?: boolean;
|
|
33
|
+
aiApply?: boolean;
|
|
34
|
+
aiPluginSlug?: string;
|
|
35
|
+
aiConcurrency?: string;
|
|
36
|
+
withI18nTags?: boolean;
|
|
37
|
+
i18nLangs?: string;
|
|
38
|
+
multiPage?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export declare function registerMigrateCommand(program: Command): void;
|
|
41
|
+
export declare function runAudit(repo: string, opts: MigrateOptions): Promise<void>;
|
|
42
|
+
export declare function runApply(repo: string, opts: MigrateOptions): Promise<void>;
|
|
43
|
+
export declare function runSilentHtml(repo: string, opts: MigrateOptions): Promise<void>;
|
|
44
|
+
export declare function runAssistedHtml(repo: string, opts: MigrateOptions): Promise<void>;
|
|
45
|
+
export declare function runAiHtml(repo: string, opts: MigrateOptions, mode: AiMode): Promise<void>;
|
|
46
|
+
export interface MultiPagePlanItem {
|
|
47
|
+
/** Absolute path of the source .html file. */
|
|
48
|
+
htmlPath: string;
|
|
49
|
+
/** Relative basename used for the output file + sidecar manifest. */
|
|
50
|
+
basename: string;
|
|
51
|
+
/** Path the decorated HTML will land at. */
|
|
52
|
+
outHtmlPath: string;
|
|
53
|
+
/** Path the sidecar manifest will land at. */
|
|
54
|
+
outManifestPath: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Build the plan of pages a multi-page run would touch. Pure +
|
|
58
|
+
* testable: no LLM calls, no writes. Exported so the test suite can
|
|
59
|
+
* exercise the directory-walk logic against a fixture.
|
|
60
|
+
*/
|
|
61
|
+
export declare function planMultiPageHtml(baseDir: string, outDir: string): Promise<MultiPagePlanItem[]>;
|
|
62
|
+
export interface RunMultiPageOptions {
|
|
63
|
+
baseDir: string;
|
|
64
|
+
outDir: string;
|
|
65
|
+
mode: AiMode;
|
|
66
|
+
pluginHint?: string;
|
|
67
|
+
model?: string;
|
|
68
|
+
dryRun: boolean;
|
|
69
|
+
withPilot: boolean;
|
|
70
|
+
/** DI seam: lets tests stub the network round-trip. Defaults to the
|
|
71
|
+
real aiDecorate from ai-decorator.ts. */
|
|
72
|
+
decorator?: AiDecorateFn;
|
|
73
|
+
}
|
|
74
|
+
export interface RunMultiPageResult {
|
|
75
|
+
plan: MultiPagePlanItem[];
|
|
76
|
+
/** Per-page decoration result. */
|
|
77
|
+
pages: Array<{
|
|
78
|
+
item: MultiPagePlanItem;
|
|
79
|
+
plugin_slug: string;
|
|
80
|
+
manifest_json: string;
|
|
81
|
+
decorated_html: string;
|
|
82
|
+
diff: string;
|
|
83
|
+
ambiguities_count: number;
|
|
84
|
+
tokens_in: number;
|
|
85
|
+
tokens_out: number;
|
|
86
|
+
cost_usd: number;
|
|
87
|
+
latency_ms: number;
|
|
88
|
+
}>;
|
|
89
|
+
/** Canonical plugin slug, taken from the first page (or pluginHint
|
|
90
|
+
when set). */
|
|
91
|
+
plugin_slug: string;
|
|
92
|
+
total_tokens_in: number;
|
|
93
|
+
total_tokens_out: number;
|
|
94
|
+
total_cost_usd: number;
|
|
95
|
+
total_latency_ms: number;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Decorate every .html file in `baseDir`, share a plugin_slug across
|
|
99
|
+
* pages, write per-page outputs. Pure + DI-friendly so the call site
|
|
100
|
+
* (`runAiHtmlMultiPage`) can stay terse and the test suite can drive
|
|
101
|
+
* it without hitting the network.
|
|
102
|
+
*/
|
|
103
|
+
export declare function decorateMultiPageHtml(opts: RunMultiPageOptions): Promise<RunMultiPageResult>;
|
|
104
|
+
export declare function runAiHtmlMultiPage(repo: string, opts: MigrateOptions, mode: AiMode): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* `yf migrate <repo> --ai-search "<query>"` -- list manifest
|
|
107
|
+
* elements matching the free-text query, ranked by relevance.
|
|
108
|
+
* Useful before running --ai-override to find the right nac_id.
|
|
109
|
+
*/
|
|
110
|
+
export declare function runAiSearch(repo: string, opts: MigrateOptions): Promise<void>;
|
|
111
|
+
/**
|
|
112
|
+
* `yf migrate <repo> --ai-override <nacId>` -- interactively
|
|
113
|
+
* re-decorate one element. Writes the override to overrides.json AND
|
|
114
|
+
* applies it immediately to index.html + manifest.json.
|
|
115
|
+
*/
|
|
116
|
+
export declare function runAiOverride(repo: string, opts: MigrateOptions): Promise<void>;
|
|
117
|
+
export declare function runAiApply(repo: string, opts: MigrateOptions): Promise<void>;
|
|
118
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
|