@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,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* App lifecycle tools (V1.13 of HITO 1).
|
|
3
|
+
*
|
|
4
|
+
* Three tools:
|
|
5
|
+
* - forge.run_app(repo_dir?, command?, wait_for_url_ms?)
|
|
6
|
+
* - forge.stop_app(pid?)
|
|
7
|
+
* - forge.restart_app(repo_dir?, command?)
|
|
8
|
+
*
|
|
9
|
+
* Single-process model: at most one app runs per chat session.
|
|
10
|
+
* Multi-app concurrency is a v0.4+ slice.
|
|
11
|
+
*
|
|
12
|
+
* Spawn detection (when no explicit command is given):
|
|
13
|
+
* 1. Read package.json scripts.
|
|
14
|
+
* 2. Prefer `dev`, then `start`, then `serve`. Refuse loudly
|
|
15
|
+
* when none exist.
|
|
16
|
+
* 3. Run via the matching package manager
|
|
17
|
+
* (pnpm-lock.yaml -> pnpm, yarn.lock -> yarn, default
|
|
18
|
+
* npm).
|
|
19
|
+
*
|
|
20
|
+
* URL detection is best-effort: monitor stdout for up to
|
|
21
|
+
* wait_for_url_ms (default 5000) looking for the typical
|
|
22
|
+
* "http://localhost:<port>" pattern. When found, return it;
|
|
23
|
+
* else return null with a note in the result.
|
|
24
|
+
*
|
|
25
|
+
* Loud failures per ROADMAP sec 12.2.
|
|
26
|
+
*
|
|
27
|
+
* ASCII-only.
|
|
28
|
+
*/
|
|
29
|
+
import { spawn } from 'node:child_process';
|
|
30
|
+
import path from 'node:path';
|
|
31
|
+
import { promises as fs } from 'node:fs';
|
|
32
|
+
const DEFAULT_WAIT_MS = 5000;
|
|
33
|
+
const MAX_WAIT_MS = 30_000;
|
|
34
|
+
/** Process registry. Single-entry. */
|
|
35
|
+
let active = null;
|
|
36
|
+
/* ============================================================
|
|
37
|
+
* Specs
|
|
38
|
+
* ============================================================ */
|
|
39
|
+
export const RUN_APP_SPEC = {
|
|
40
|
+
name: 'forge.run_app',
|
|
41
|
+
description: 'Launch the project dev server. Auto-detects the package manager (npm / yarn / pnpm) and the script (dev / start / serve). Returns pid + best-effort URL.',
|
|
42
|
+
input_schema: {
|
|
43
|
+
type: 'object',
|
|
44
|
+
properties: {
|
|
45
|
+
repo_dir: { type: 'string', description: 'Path to the project root. Default: projectRoot.' },
|
|
46
|
+
command: { type: 'string', description: 'Explicit script name (e.g. "dev", "build:watch"). When omitted, autoselected.' },
|
|
47
|
+
wait_for_url_ms: { type: 'number', description: 'How long to monitor stdout for a URL (default 5000, max 30000).' },
|
|
48
|
+
},
|
|
49
|
+
required: [],
|
|
50
|
+
},
|
|
51
|
+
requires_approval: true,
|
|
52
|
+
};
|
|
53
|
+
export const STOP_APP_SPEC = {
|
|
54
|
+
name: 'forge.stop_app',
|
|
55
|
+
description: 'Stop the running app spawned by forge.run_app. Returns the final logs tail.',
|
|
56
|
+
input_schema: {
|
|
57
|
+
type: 'object',
|
|
58
|
+
properties: {
|
|
59
|
+
pid: { type: 'number', description: 'PID to stop. Default: the active one.' },
|
|
60
|
+
},
|
|
61
|
+
required: [],
|
|
62
|
+
},
|
|
63
|
+
requires_approval: true,
|
|
64
|
+
};
|
|
65
|
+
export const RESTART_APP_SPEC = {
|
|
66
|
+
name: 'forge.restart_app',
|
|
67
|
+
description: 'Stop the running app + relaunch with the same (or new) options.',
|
|
68
|
+
input_schema: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
properties: {
|
|
71
|
+
repo_dir: { type: 'string', description: 'Path. Default: previous app dir, then projectRoot.' },
|
|
72
|
+
command: { type: 'string', description: 'Script. Default: previous.' },
|
|
73
|
+
wait_for_url_ms: { type: 'number' },
|
|
74
|
+
},
|
|
75
|
+
required: [],
|
|
76
|
+
},
|
|
77
|
+
requires_approval: true,
|
|
78
|
+
};
|
|
79
|
+
/* ============================================================
|
|
80
|
+
* Implementations
|
|
81
|
+
* ============================================================ */
|
|
82
|
+
function defaultReadFile(p) {
|
|
83
|
+
return fs.readFile(p, 'utf-8');
|
|
84
|
+
}
|
|
85
|
+
async function defaultExists(p) {
|
|
86
|
+
try {
|
|
87
|
+
await fs.stat(p);
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function defaultSpawner(cmd, args, cwd) {
|
|
95
|
+
const proc = spawn(cmd, args, { cwd, stdio: ['ignore', 'pipe', 'pipe'], shell: process.platform === 'win32' });
|
|
96
|
+
return proc;
|
|
97
|
+
}
|
|
98
|
+
const URL_PATTERN = /\bhttps?:\/\/(?:localhost|127\.0\.0\.1)(?::\d+)?(?:\/[^\s]*)?/;
|
|
99
|
+
async function detectCommand(repoDir, scriptOverride, deps) {
|
|
100
|
+
const exists = deps.fileExists ?? defaultExists;
|
|
101
|
+
const readFile = deps.readFile ?? defaultReadFile;
|
|
102
|
+
const pkgPath = path.join(repoDir, 'package.json');
|
|
103
|
+
if (!(await exists(pkgPath))) {
|
|
104
|
+
return { error: 'no package.json in ' + repoDir };
|
|
105
|
+
}
|
|
106
|
+
let pkg;
|
|
107
|
+
try {
|
|
108
|
+
pkg = JSON.parse(await readFile(pkgPath));
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
return { error: 'invalid package.json: ' + (err instanceof Error ? err.message : String(err)) };
|
|
112
|
+
}
|
|
113
|
+
const scripts = pkg.scripts ?? {};
|
|
114
|
+
let script = scriptOverride;
|
|
115
|
+
if (!script) {
|
|
116
|
+
for (const candidate of ['dev', 'start', 'serve']) {
|
|
117
|
+
if (typeof scripts[candidate] === 'string') {
|
|
118
|
+
script = candidate;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (!script) {
|
|
123
|
+
return { error: 'no dev/start/serve script in package.json -- pass an explicit command' };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else if (typeof scripts[script] !== 'string') {
|
|
127
|
+
return { error: 'script "' + script + '" not found in package.json scripts' };
|
|
128
|
+
}
|
|
129
|
+
/* Package manager detection. */
|
|
130
|
+
let pm = 'npm';
|
|
131
|
+
if (await exists(path.join(repoDir, 'pnpm-lock.yaml')))
|
|
132
|
+
pm = 'pnpm';
|
|
133
|
+
else if (await exists(path.join(repoDir, 'yarn.lock')))
|
|
134
|
+
pm = 'yarn';
|
|
135
|
+
return {
|
|
136
|
+
cmd: pm,
|
|
137
|
+
args: pm === 'npm' ? ['run', script] : pm === 'yarn' ? ['run', script] : [script],
|
|
138
|
+
script,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
export async function runApp(args, ctx, deps = {}) {
|
|
142
|
+
if (active) {
|
|
143
|
+
return {
|
|
144
|
+
tool: RUN_APP_SPEC.name,
|
|
145
|
+
result: { error: 'an app is already running (pid ' + active.app.pid + '). Call forge.stop_app first.' },
|
|
146
|
+
is_error: true,
|
|
147
|
+
display: 'already running',
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
const repoDir = args.repo_dir
|
|
151
|
+
? (path.isAbsolute(args.repo_dir) ? args.repo_dir : path.join(ctx.projectRoot, args.repo_dir))
|
|
152
|
+
: ctx.projectRoot;
|
|
153
|
+
const stat = await fs.stat(repoDir).catch(() => null);
|
|
154
|
+
if (!stat || !stat.isDirectory()) {
|
|
155
|
+
return { tool: RUN_APP_SPEC.name, result: { error: 'repo_dir does not exist or is not a directory: ' + repoDir }, is_error: true, display: 'bad repo_dir' };
|
|
156
|
+
}
|
|
157
|
+
const det = await detectCommand(repoDir, args.command, deps);
|
|
158
|
+
if ('error' in det) {
|
|
159
|
+
return { tool: RUN_APP_SPEC.name, result: { error: det.error }, is_error: true, display: 'spawn detect failed' };
|
|
160
|
+
}
|
|
161
|
+
const spawner = deps.spawner ?? defaultSpawner;
|
|
162
|
+
const proc = spawner(det.cmd, det.args, repoDir);
|
|
163
|
+
if (typeof proc.pid !== 'number') {
|
|
164
|
+
return { tool: RUN_APP_SPEC.name, result: { error: 'failed to spawn ' + det.cmd + ' ' + det.args.join(' ') }, is_error: true, display: 'spawn failed' };
|
|
165
|
+
}
|
|
166
|
+
const app = {
|
|
167
|
+
pid: proc.pid,
|
|
168
|
+
repo_dir: repoDir,
|
|
169
|
+
command: [det.cmd, ...det.args],
|
|
170
|
+
started_at: new Date().toISOString(),
|
|
171
|
+
url: null,
|
|
172
|
+
recent_logs: '',
|
|
173
|
+
};
|
|
174
|
+
active = { proc: proc, app };
|
|
175
|
+
/* Bound the captured logs. */
|
|
176
|
+
function appendLog(s) {
|
|
177
|
+
app.recent_logs = (app.recent_logs + s).slice(-16384);
|
|
178
|
+
}
|
|
179
|
+
/* URL detection: monitor stdout + stderr up to wait_for_url_ms. */
|
|
180
|
+
const waitMs = Math.min(Math.max(args.wait_for_url_ms ?? DEFAULT_WAIT_MS, 0), MAX_WAIT_MS);
|
|
181
|
+
const urlFound = new Promise((resolve) => {
|
|
182
|
+
let resolved = false;
|
|
183
|
+
const timer = setTimeout(() => {
|
|
184
|
+
if (!resolved) {
|
|
185
|
+
resolved = true;
|
|
186
|
+
resolve(null);
|
|
187
|
+
}
|
|
188
|
+
}, waitMs);
|
|
189
|
+
const onChunk = (chunk) => {
|
|
190
|
+
const s = String(chunk);
|
|
191
|
+
appendLog(s);
|
|
192
|
+
const m = s.match(URL_PATTERN);
|
|
193
|
+
if (m && !resolved) {
|
|
194
|
+
resolved = true;
|
|
195
|
+
clearTimeout(timer);
|
|
196
|
+
resolve(m[0]);
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
if (proc.stdout)
|
|
200
|
+
proc.stdout.on('data', onChunk);
|
|
201
|
+
if (proc.stderr)
|
|
202
|
+
proc.stderr.on('data', onChunk);
|
|
203
|
+
});
|
|
204
|
+
/* Wire close so we clear active on graceful exit. */
|
|
205
|
+
proc.on('close', (code) => {
|
|
206
|
+
appendLog('\n[process exited with code ' + code + ']\n');
|
|
207
|
+
if (active && active.proc === proc) {
|
|
208
|
+
active = null;
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
proc.on('error', (err) => {
|
|
212
|
+
appendLog('\n[process error: ' + (err && err.message ? err.message : String(err)) + ']\n');
|
|
213
|
+
});
|
|
214
|
+
const url = await urlFound;
|
|
215
|
+
app.url = url;
|
|
216
|
+
return {
|
|
217
|
+
tool: RUN_APP_SPEC.name,
|
|
218
|
+
result: {
|
|
219
|
+
pid: app.pid,
|
|
220
|
+
repo_dir: app.repo_dir,
|
|
221
|
+
command: app.command,
|
|
222
|
+
started_at: app.started_at,
|
|
223
|
+
url,
|
|
224
|
+
url_detected: url !== null,
|
|
225
|
+
recent_logs_tail: app.recent_logs.slice(-2048),
|
|
226
|
+
},
|
|
227
|
+
display: url
|
|
228
|
+
? 'app running pid ' + app.pid + ' at ' + url
|
|
229
|
+
: 'app spawned pid ' + app.pid + ' -- URL not detected in ' + waitMs + 'ms (check logs)',
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
export async function stopApp(args, _ctx, _deps = {}) {
|
|
233
|
+
if (!active) {
|
|
234
|
+
return {
|
|
235
|
+
tool: STOP_APP_SPEC.name,
|
|
236
|
+
result: { error: 'no app is running' },
|
|
237
|
+
is_error: true,
|
|
238
|
+
display: 'nothing to stop',
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
if (args.pid !== undefined && args.pid !== active.app.pid) {
|
|
242
|
+
return {
|
|
243
|
+
tool: STOP_APP_SPEC.name,
|
|
244
|
+
result: { error: 'pid mismatch: requested ' + args.pid + ', active is ' + active.app.pid },
|
|
245
|
+
is_error: true,
|
|
246
|
+
display: 'pid mismatch',
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
const app = active.app;
|
|
250
|
+
const proc = active.proc;
|
|
251
|
+
active = null;
|
|
252
|
+
/* SIGTERM first; many dev servers handle it gracefully. */
|
|
253
|
+
try {
|
|
254
|
+
proc.kill('SIGTERM');
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
return {
|
|
258
|
+
tool: STOP_APP_SPEC.name,
|
|
259
|
+
result: { error: 'kill failed: ' + (err instanceof Error ? err.message : String(err)) },
|
|
260
|
+
is_error: true,
|
|
261
|
+
display: 'kill failed',
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
tool: STOP_APP_SPEC.name,
|
|
266
|
+
result: {
|
|
267
|
+
pid: app.pid,
|
|
268
|
+
repo_dir: app.repo_dir,
|
|
269
|
+
command: app.command,
|
|
270
|
+
stopped_at: new Date().toISOString(),
|
|
271
|
+
recent_logs_tail: app.recent_logs.slice(-2048),
|
|
272
|
+
},
|
|
273
|
+
display: 'stopped pid ' + app.pid,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
export async function restartApp(args, ctx, deps = {}) {
|
|
277
|
+
const prev = active;
|
|
278
|
+
if (prev) {
|
|
279
|
+
await stopApp({}, ctx, deps);
|
|
280
|
+
}
|
|
281
|
+
/* Inherit the previous repo_dir / command if the caller did
|
|
282
|
+
not supply new ones. */
|
|
283
|
+
const repoDir = args.repo_dir ?? (prev ? prev.app.repo_dir : undefined);
|
|
284
|
+
const command = args.command ?? (prev ? prev.app.command[2] : undefined); /* pm script slot */
|
|
285
|
+
return runApp({
|
|
286
|
+
...(repoDir ? { repo_dir: repoDir } : {}),
|
|
287
|
+
...(command ? { command } : {}),
|
|
288
|
+
...(args.wait_for_url_ms !== undefined ? { wait_for_url_ms: args.wait_for_url_ms } : {}),
|
|
289
|
+
}, ctx, deps);
|
|
290
|
+
}
|
|
291
|
+
/** Test seam: reset the singleton between test cases. */
|
|
292
|
+
export function _resetLifecycleForTests() {
|
|
293
|
+
active = null;
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/chat/tools/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* forge.manual.open chat tool (Fase F.7 of HITO 1 extension).
|
|
3
|
+
*
|
|
4
|
+
* Resolves the user's chosen language (or the explicitly
|
|
5
|
+
* requested one) to the HTML manual under docs/manuals/, opens
|
|
6
|
+
* it through the existing reader pipeline (V1.19 HTML parser),
|
|
7
|
+
* and surfaces the reader session so subsequent next_block /
|
|
8
|
+
* search / bookmark calls operate on the manual just like any
|
|
9
|
+
* other document.
|
|
10
|
+
*
|
|
11
|
+
* The actual document parsing reuses the existing reader; this
|
|
12
|
+
* tool just resolves the manual path by language and delegates.
|
|
13
|
+
*
|
|
14
|
+
* ASCII-only.
|
|
15
|
+
*/
|
|
16
|
+
import type { ToolContext, ToolResult, ToolSpec } from '../tools.js';
|
|
17
|
+
import { type SupportedLanguage } from '../../i18n/index.js';
|
|
18
|
+
export declare const MANUAL_OPEN_SPEC: ToolSpec;
|
|
19
|
+
export declare function runManualOpen(args: {
|
|
20
|
+
lang?: string;
|
|
21
|
+
} | undefined, ctx: ToolContext): Promise<ToolResult>;
|
|
22
|
+
/** List which manuals are present on disk -- handy for yf
|
|
23
|
+
* doctor + for the panel's language selector to surface
|
|
24
|
+
* installation gaps. */
|
|
25
|
+
export declare function listAvailableManuals(packageDir?: string): Promise<SupportedLanguage[]>;
|
|
26
|
+
//# sourceMappingURL=manual.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual.d.ts","sourceRoot":"","sources":["../../../src/chat/tools/manual.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIrE,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,qBAAqB,CAAC;AAgC7B,eAAO,MAAM,gBAAgB,EAAE,QAe9B,CAAC;AA4CF,wBAAsB,aAAa,CACjC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EACnC,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CAyCrB;AAED;;yBAEyB;AACzB,wBAAsB,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkB5F"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* forge.manual.open chat tool (Fase F.7 of HITO 1 extension).
|
|
3
|
+
*
|
|
4
|
+
* Resolves the user's chosen language (or the explicitly
|
|
5
|
+
* requested one) to the HTML manual under docs/manuals/, opens
|
|
6
|
+
* it through the existing reader pipeline (V1.19 HTML parser),
|
|
7
|
+
* and surfaces the reader session so subsequent next_block /
|
|
8
|
+
* search / bookmark calls operate on the manual just like any
|
|
9
|
+
* other document.
|
|
10
|
+
*
|
|
11
|
+
* The actual document parsing reuses the existing reader; this
|
|
12
|
+
* tool just resolves the manual path by language and delegates.
|
|
13
|
+
*
|
|
14
|
+
* ASCII-only.
|
|
15
|
+
*/
|
|
16
|
+
import path from 'node:path';
|
|
17
|
+
import { promises as fs } from 'node:fs';
|
|
18
|
+
import { fileURLToPath } from 'node:url';
|
|
19
|
+
import { runReaderOpen, } from './reader.js';
|
|
20
|
+
import { normaliseLanguageTag, SUPPORTED_LANGUAGES, currentLanguage, } from '../../i18n/index.js';
|
|
21
|
+
/** Resolve the manual base directory relative to THIS module
|
|
22
|
+
* (independent of process.cwd()). Tries, in order:
|
|
23
|
+
*
|
|
24
|
+
* 1. Installed package layout: when this file is at
|
|
25
|
+
* <pkg>/dist/chat/tools/manual.js, the manuals are at
|
|
26
|
+
* <pkg>/docs/manuals/. The `files` glob in package.json
|
|
27
|
+
* ships docs/manuals/ inside the tarball.
|
|
28
|
+
* 2. Dev (tsx) layout: when this file is at
|
|
29
|
+
* <repo>/src/chat/tools/manual.ts, the manuals are at
|
|
30
|
+
* <repo>/docs/manuals/.
|
|
31
|
+
* 3. cwd-relative (last-resort dev fallback). */
|
|
32
|
+
function manualBaseDirs() {
|
|
33
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
34
|
+
/* dist/chat/tools/manual.js -> ../../../docs/manuals/ (installed)
|
|
35
|
+
src/chat/tools/manual.ts -> ../../../docs/manuals/ (dev via tsx)
|
|
36
|
+
Same relative depth -- the parent layout is identical. */
|
|
37
|
+
const moduleRelative = path.resolve(here, '..', '..', '..', 'docs', 'manuals');
|
|
38
|
+
return [
|
|
39
|
+
moduleRelative,
|
|
40
|
+
/* Last-resort fallback when someone invokes the tool from
|
|
41
|
+
a tree that contains a docs/manuals/ at the cwd root. */
|
|
42
|
+
path.join(process.cwd(), 'docs', 'manuals'),
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
const MANUAL_PATH_CANDIDATES = (lang) => {
|
|
46
|
+
const fname = 'manual.' + lang + '.html';
|
|
47
|
+
return manualBaseDirs().map((dir) => path.join(dir, fname));
|
|
48
|
+
};
|
|
49
|
+
export const MANUAL_OPEN_SPEC = {
|
|
50
|
+
name: 'forge.manual.open',
|
|
51
|
+
description: 'Open the Yujin Forge user manual in the requested language (default: current user language). Resolves to docs/manuals/manual.<lang>.html and opens it through the reader pipeline so the user can navigate by voice. Available languages: es, en, pt, fr, ja, zh, hi, ar, de, it.',
|
|
52
|
+
input_schema: {
|
|
53
|
+
type: 'object',
|
|
54
|
+
properties: {
|
|
55
|
+
lang: {
|
|
56
|
+
type: 'string',
|
|
57
|
+
description: 'Language code (es, en, pt, fr, ja, zh, hi, ar, de, it). Optional; defaults to the current panel language.',
|
|
58
|
+
enum: ['es', 'en', 'pt', 'fr', 'ja', 'zh', 'hi', 'ar', 'de', 'it'],
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
required: [],
|
|
62
|
+
},
|
|
63
|
+
requires_approval: false,
|
|
64
|
+
};
|
|
65
|
+
/** Resolve which language to serve. Priority:
|
|
66
|
+
* 1. Explicit args.lang (normalised).
|
|
67
|
+
* 2. The panel's current language.
|
|
68
|
+
* 3. Spanish (default).
|
|
69
|
+
*
|
|
70
|
+
* Then verify the HTML file actually exists on disk; fall
|
|
71
|
+
* back to Spanish if the user-requested locale is missing.
|
|
72
|
+
* If even Spanish is missing, throw -- the install is broken. */
|
|
73
|
+
async function resolveManualPath(reqLang, packageDir) {
|
|
74
|
+
const requested = reqLang
|
|
75
|
+
? normaliseLanguageTag(reqLang)
|
|
76
|
+
: currentLanguage();
|
|
77
|
+
const order = [requested];
|
|
78
|
+
if (requested !== 'es')
|
|
79
|
+
order.push('es');
|
|
80
|
+
for (const lang of order) {
|
|
81
|
+
const candidates = MANUAL_PATH_CANDIDATES(lang);
|
|
82
|
+
if (packageDir) {
|
|
83
|
+
candidates.push(path.join(packageDir, 'docs', 'manuals', 'manual.' + lang + '.html'));
|
|
84
|
+
}
|
|
85
|
+
for (const candidate of candidates) {
|
|
86
|
+
try {
|
|
87
|
+
await fs.access(candidate);
|
|
88
|
+
return {
|
|
89
|
+
path: candidate,
|
|
90
|
+
lang,
|
|
91
|
+
fellBack: lang !== requested,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
/* try next candidate */
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
throw new Error('manual.open: no manual HTML found for any language. Tried: '
|
|
100
|
+
+ order.join(', ') + '. Reinstall the package or check the docs/manuals/ directory.');
|
|
101
|
+
}
|
|
102
|
+
export async function runManualOpen(args, ctx) {
|
|
103
|
+
/* Resolve absolute path; ToolContext does not carry an
|
|
104
|
+
install dir today, so we fall through to cwd + a probed
|
|
105
|
+
parent in MANUAL_PATH_CANDIDATES. */
|
|
106
|
+
let resolved;
|
|
107
|
+
try {
|
|
108
|
+
resolved = await resolveManualPath(args?.lang, undefined);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
return {
|
|
112
|
+
tool: MANUAL_OPEN_SPEC.name,
|
|
113
|
+
result: { error: err instanceof Error ? err.message : String(err) },
|
|
114
|
+
is_error: true,
|
|
115
|
+
display: 'manual not found',
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/* Reuse runReaderOpen so the manual goes through the same
|
|
119
|
+
session machinery -- the user can then say "siguiente" /
|
|
120
|
+
"buscar X" / "marcame aca" on the manual just like any
|
|
121
|
+
other document. The path passed in is absolute. */
|
|
122
|
+
const readerResult = await runReaderOpen({ path: resolved.path }, ctx);
|
|
123
|
+
if (readerResult.is_error)
|
|
124
|
+
return readerResult;
|
|
125
|
+
/* Decorate the result with manual-specific metadata so the
|
|
126
|
+
panel + the chat can surface which language was served and
|
|
127
|
+
whether we fell back. */
|
|
128
|
+
const enriched = {
|
|
129
|
+
...readerResult.result,
|
|
130
|
+
manual_lang: resolved.lang,
|
|
131
|
+
manual_fell_back: resolved.fellBack,
|
|
132
|
+
manual_path: resolved.path,
|
|
133
|
+
};
|
|
134
|
+
return {
|
|
135
|
+
tool: MANUAL_OPEN_SPEC.name,
|
|
136
|
+
result: enriched,
|
|
137
|
+
display: 'manual opened: ' + resolved.lang
|
|
138
|
+
+ (resolved.fellBack ? ' (fell back from ' + (args?.lang || 'unknown') + ')' : ''),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/** List which manuals are present on disk -- handy for yf
|
|
142
|
+
* doctor + for the panel's language selector to surface
|
|
143
|
+
* installation gaps. */
|
|
144
|
+
export async function listAvailableManuals(packageDir) {
|
|
145
|
+
const present = [];
|
|
146
|
+
for (const lang of SUPPORTED_LANGUAGES) {
|
|
147
|
+
const candidates = MANUAL_PATH_CANDIDATES(lang);
|
|
148
|
+
if (packageDir) {
|
|
149
|
+
candidates.push(path.join(packageDir, 'docs', 'manuals', 'manual.' + lang + '.html'));
|
|
150
|
+
}
|
|
151
|
+
for (const candidate of candidates) {
|
|
152
|
+
try {
|
|
153
|
+
await fs.access(candidate);
|
|
154
|
+
present.push(lang);
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
/* try next */
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return present;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=manual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual.js","sourceRoot":"","sources":["../../../src/chat/tools/manual.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reader chat tools (V1.28 of HITO 1).
|
|
3
|
+
*
|
|
4
|
+
* Exposes the reader subsystem (V1.14+) to the chat catalog.
|
|
5
|
+
* Single shared session map at module scope so the user can
|
|
6
|
+
* open a doc in one chat turn and continue navigating it in
|
|
7
|
+
* the next.
|
|
8
|
+
*
|
|
9
|
+
* Tools:
|
|
10
|
+
* forge.reader.open(path)
|
|
11
|
+
* forge.reader.list_documents()
|
|
12
|
+
* forge.reader.read_section(doc_id, index?)
|
|
13
|
+
* forge.reader.next_block(doc_id)
|
|
14
|
+
* forge.reader.search(doc_id, query, max?)
|
|
15
|
+
* forge.reader.bookmark_set(doc_id, name)
|
|
16
|
+
* forge.reader.bookmark_jump(doc_id, name)
|
|
17
|
+
* forge.reader.recap(doc_id, window?)
|
|
18
|
+
*
|
|
19
|
+
* All read-only (requires_approval=false). The reader does
|
|
20
|
+
* not write to the project; it parses + remembers state +
|
|
21
|
+
* answers queries.
|
|
22
|
+
*
|
|
23
|
+
* Loud failures per ROADMAP sec 12.2.
|
|
24
|
+
*
|
|
25
|
+
* ASCII-only.
|
|
26
|
+
*/
|
|
27
|
+
import type { ToolContext, ToolResult, ToolSpec } from '../tools.js';
|
|
28
|
+
/** V1.26b -- Claude-backed recap summariser. Optional DI seam.
|
|
29
|
+
* When the chat server boots with a Claude client, it calls
|
|
30
|
+
* setRecapSummarizer() to install the summariser; otherwise
|
|
31
|
+
* mode='summary' calls return a loud error pointing the
|
|
32
|
+
* caller at the env flag + config.
|
|
33
|
+
*
|
|
34
|
+
* Gated by env var YF_ENABLE_CLAUDE_RECAP=1 so even an
|
|
35
|
+
* installed summariser will NOT fire by accident -- the
|
|
36
|
+
* user has to opt in once per machine. */
|
|
37
|
+
export type RecapSummarizer = (blocks: string[], options: {
|
|
38
|
+
language?: string;
|
|
39
|
+
}) => Promise<string>;
|
|
40
|
+
export declare function setRecapSummarizer(impl: RecapSummarizer | null): void;
|
|
41
|
+
/** Test seam. */
|
|
42
|
+
export declare function _resetReaderForTests(): void;
|
|
43
|
+
export declare const READER_OPEN_SPEC: ToolSpec;
|
|
44
|
+
export declare const READER_LIST_DOCS_SPEC: ToolSpec;
|
|
45
|
+
export declare const READER_READ_SECTION_SPEC: ToolSpec;
|
|
46
|
+
export declare const READER_NEXT_BLOCK_SPEC: ToolSpec;
|
|
47
|
+
export declare const READER_SEARCH_SPEC: ToolSpec;
|
|
48
|
+
export declare const READER_BOOKMARK_SET_SPEC: ToolSpec;
|
|
49
|
+
export declare const READER_BOOKMARK_JUMP_SPEC: ToolSpec;
|
|
50
|
+
export declare const READER_RECAP_SPEC: ToolSpec;
|
|
51
|
+
export declare function runReaderOpen(args: {
|
|
52
|
+
path: string;
|
|
53
|
+
}, ctx: ToolContext): Promise<ToolResult>;
|
|
54
|
+
export declare function runReaderListDocuments(): Promise<ToolResult>;
|
|
55
|
+
export declare function runReaderReadSection(args: {
|
|
56
|
+
doc_id: string;
|
|
57
|
+
index?: number;
|
|
58
|
+
}): Promise<ToolResult>;
|
|
59
|
+
export declare function runReaderNextBlock(args: {
|
|
60
|
+
doc_id: string;
|
|
61
|
+
}): Promise<ToolResult>;
|
|
62
|
+
export declare function runReaderSearch(args: {
|
|
63
|
+
doc_id: string;
|
|
64
|
+
query: string;
|
|
65
|
+
max?: number;
|
|
66
|
+
}): Promise<ToolResult>;
|
|
67
|
+
export declare function runReaderBookmarkSet(args: {
|
|
68
|
+
doc_id: string;
|
|
69
|
+
name: string;
|
|
70
|
+
}): Promise<ToolResult>;
|
|
71
|
+
export declare function runReaderBookmarkJump(args: {
|
|
72
|
+
doc_id: string;
|
|
73
|
+
name: string;
|
|
74
|
+
}): Promise<ToolResult>;
|
|
75
|
+
export declare function runReaderRecap(args: {
|
|
76
|
+
doc_id: string;
|
|
77
|
+
window?: number;
|
|
78
|
+
mode?: 'literal' | 'summary';
|
|
79
|
+
}): Promise<ToolResult>;
|
|
80
|
+
//# sourceMappingURL=reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../../src/chat/tools/reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAkBrE;;;;;;;;2CAQ2C;AAC3C,MAAM,MAAM,eAAe,GAAG,CAC5B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAC3B,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAErE;AAED,iBAAiB;AACjB,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C;AAMD,eAAO,MAAM,gBAAgB,EAAE,QAW9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,QAKnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,QAYtC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAWpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,QAahC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,QAYtC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,QAYvC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,QAa/B,CAAC;AAYF,wBAAsB,aAAa,CACjC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACtB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CA0CrB;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,UAAU,CAAC,CAelE;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAmCxG;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAwCtF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAehH;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAgBtG;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAevG;AAoBD,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CA4FjI"}
|