@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,587 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yujin Forge -- chat tool catalog.
|
|
3
|
+
*
|
|
4
|
+
* The chat panel exposes a set of `forge.*` tools that Claude can
|
|
5
|
+
* call via Anthropic's tool_use protocol. Each tool has:
|
|
6
|
+
*
|
|
7
|
+
* - A JSON-schema description Claude consumes.
|
|
8
|
+
* - A pure implementation that takes the tool args + the chat
|
|
9
|
+
* context (project root + license state) and returns a
|
|
10
|
+
* serialisable result.
|
|
11
|
+
* - A `requires_approval` flag. Read-only tools auto-execute;
|
|
12
|
+
* write-class tools queue an approval request in the chat UI.
|
|
13
|
+
*
|
|
14
|
+
* Tonight's slice (v0.3.0 differentiator, foundation only):
|
|
15
|
+
*
|
|
16
|
+
* - `forge.read_manifest` -- read manifest.json from the project
|
|
17
|
+
* root and return the elements array (or a slice when the LLM
|
|
18
|
+
* asks for a specific plugin slug).
|
|
19
|
+
*
|
|
20
|
+
* Pending slices (not in this commit):
|
|
21
|
+
* - `forge.write_component(path, source)` -- write-class, approval
|
|
22
|
+
* gated.
|
|
23
|
+
* - `forge.run_tests(pattern)` -- exec `npm test -- <pattern>`.
|
|
24
|
+
* - `forge.run_migration_step(step_id)` -- atomic AST mutation.
|
|
25
|
+
* - `forge.consult_nac_spec(query)` -- RAG over docs/SPEC.md.
|
|
26
|
+
* - Wire into ClaudeClient's chat() via tool_use payload.
|
|
27
|
+
* - Approval-flow UI in src/chat/panel.ts.
|
|
28
|
+
*
|
|
29
|
+
* Pure: no Anthropic call, no UI dependency. Easy to unit-test.
|
|
30
|
+
*
|
|
31
|
+
* ASCII-only.
|
|
32
|
+
*/
|
|
33
|
+
import { promises as fs } from 'node:fs';
|
|
34
|
+
import path from 'node:path';
|
|
35
|
+
import { CREATE_GITHUB_REPO_SPEC, CLONE_REPO_SPEC, BRANCH_STATUS_SPEC, runCreateGithubRepo, runCloneRepo, runBranchStatus, } from './tools/github.js';
|
|
36
|
+
import { GIT_COMMIT_SPEC, GIT_PUSH_SPEC, GIT_PULL_SPEC, GIT_LOG_SPEC, runGitCommit, runGitPush, runGitPull, runGitLog, } from './tools/git.js';
|
|
37
|
+
import { RUN_APP_SPEC, STOP_APP_SPEC, RESTART_APP_SPEC, runApp, stopApp, restartApp, } from './tools/lifecycle.js';
|
|
38
|
+
import { READER_OPEN_SPEC, READER_LIST_DOCS_SPEC, READER_READ_SECTION_SPEC, READER_NEXT_BLOCK_SPEC, READER_SEARCH_SPEC, READER_BOOKMARK_SET_SPEC, READER_BOOKMARK_JUMP_SPEC, READER_RECAP_SPEC, runReaderOpen, runReaderListDocuments, runReaderReadSection, runReaderNextBlock, runReaderSearch, runReaderBookmarkSet, runReaderBookmarkJump, runReaderRecap, } from './tools/reader.js';
|
|
39
|
+
import { MANUAL_OPEN_SPEC, runManualOpen, } from './tools/manual.js';
|
|
40
|
+
/* ============================================================
|
|
41
|
+
* forge.read_manifest
|
|
42
|
+
* ============================================================ */
|
|
43
|
+
export const READ_MANIFEST_SPEC = {
|
|
44
|
+
name: 'forge.read_manifest',
|
|
45
|
+
description: 'Read the NAC-3 manifest from the active project. Returns the manifest JSON (plugin_slug, version, elements array). Optionally filter to a specific plugin slug via the `plugin_slug` argument.',
|
|
46
|
+
input_schema: {
|
|
47
|
+
type: 'object',
|
|
48
|
+
properties: {
|
|
49
|
+
plugin_slug: {
|
|
50
|
+
type: 'string',
|
|
51
|
+
description: 'Optional filter. When present, returns only elements whose data-nac-id starts with this slug + "."',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
required: [],
|
|
55
|
+
},
|
|
56
|
+
requires_approval: false,
|
|
57
|
+
};
|
|
58
|
+
export async function runReadManifest(args, ctx) {
|
|
59
|
+
const manifestPath = path.join(ctx.projectRoot, 'manifest.json');
|
|
60
|
+
let raw;
|
|
61
|
+
try {
|
|
62
|
+
raw = await fs.readFile(manifestPath, 'utf-8');
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
/* Try public/nac-manifest.json (the SPA wiring path). */
|
|
66
|
+
const altPath = path.join(ctx.projectRoot, 'public', 'nac-manifest.json');
|
|
67
|
+
try {
|
|
68
|
+
raw = await fs.readFile(altPath, 'utf-8');
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return {
|
|
72
|
+
tool: READ_MANIFEST_SPEC.name,
|
|
73
|
+
result: { error: 'manifest.json not found in project root or public/' },
|
|
74
|
+
is_error: true,
|
|
75
|
+
display: 'manifest not found',
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
let parsed;
|
|
80
|
+
try {
|
|
81
|
+
parsed = JSON.parse(raw);
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
return {
|
|
85
|
+
tool: READ_MANIFEST_SPEC.name,
|
|
86
|
+
result: { error: 'manifest.json is not valid JSON: ' + (e instanceof Error ? e.message : String(e)) },
|
|
87
|
+
is_error: true,
|
|
88
|
+
display: 'manifest is malformed',
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (args.plugin_slug && Array.isArray(parsed.elements)) {
|
|
92
|
+
const prefix = args.plugin_slug + '.';
|
|
93
|
+
parsed = {
|
|
94
|
+
...parsed,
|
|
95
|
+
elements: parsed.elements.filter((el) => typeof el?.id === 'string' && el.id.startsWith(prefix)),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
tool: READ_MANIFEST_SPEC.name,
|
|
100
|
+
result: parsed,
|
|
101
|
+
display: 'read ' + (Array.isArray(parsed.elements) ? parsed.elements.length : 0) + ' element(s) from manifest',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/* ============================================================
|
|
105
|
+
* forge.consult_nac_spec
|
|
106
|
+
* ============================================================ */
|
|
107
|
+
export const CONSULT_NAC_SPEC = {
|
|
108
|
+
name: 'forge.consult_nac_spec',
|
|
109
|
+
description: 'Search the NAC-3 specification (docs/SPEC.md in the project) for paragraphs matching a free-text query. Returns up to 5 matches with their section headings + snippet. Useful when the chat needs to ground its answer in the canonical contract.',
|
|
110
|
+
input_schema: {
|
|
111
|
+
type: 'object',
|
|
112
|
+
properties: {
|
|
113
|
+
query: {
|
|
114
|
+
type: 'string',
|
|
115
|
+
description: 'Free-text query (case-insensitive). Matches against paragraph contents AND nearest section heading.',
|
|
116
|
+
},
|
|
117
|
+
max_results: {
|
|
118
|
+
type: 'number',
|
|
119
|
+
description: 'Maximum number of matches to return. Default 5.',
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
required: ['query'],
|
|
123
|
+
},
|
|
124
|
+
requires_approval: false,
|
|
125
|
+
};
|
|
126
|
+
export async function runConsultNacSpec(args, ctx) {
|
|
127
|
+
const query = (args.query || '').trim();
|
|
128
|
+
if (!query) {
|
|
129
|
+
return {
|
|
130
|
+
tool: CONSULT_NAC_SPEC.name,
|
|
131
|
+
result: { error: 'query is required and must be non-empty' },
|
|
132
|
+
is_error: true,
|
|
133
|
+
display: 'empty query',
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
const max = clampMax(args.max_results);
|
|
137
|
+
/* Prefer the project-local SPEC if present; fall back to the
|
|
138
|
+
Forge install's SPEC. Both are markdown. */
|
|
139
|
+
const candidates = [
|
|
140
|
+
path.join(ctx.projectRoot, 'docs', 'SPEC.md'),
|
|
141
|
+
path.join(ctx.projectRoot, 'SPEC.md'),
|
|
142
|
+
];
|
|
143
|
+
let body = null;
|
|
144
|
+
let sourcePath = '';
|
|
145
|
+
for (const p of candidates) {
|
|
146
|
+
try {
|
|
147
|
+
body = await fs.readFile(p, 'utf-8');
|
|
148
|
+
sourcePath = p;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
if (err.code !== 'ENOENT') {
|
|
153
|
+
return {
|
|
154
|
+
tool: CONSULT_NAC_SPEC.name,
|
|
155
|
+
result: { error: 'reading ' + p + ': ' + (err instanceof Error ? err.message : String(err)) },
|
|
156
|
+
is_error: true,
|
|
157
|
+
display: 'spec read failed',
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (body === null) {
|
|
163
|
+
return {
|
|
164
|
+
tool: CONSULT_NAC_SPEC.name,
|
|
165
|
+
result: { error: 'no docs/SPEC.md or SPEC.md in project root' },
|
|
166
|
+
is_error: true,
|
|
167
|
+
display: 'spec not found',
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
const hits = searchSpec(body, query, max);
|
|
171
|
+
return {
|
|
172
|
+
tool: CONSULT_NAC_SPEC.name,
|
|
173
|
+
result: { source: sourcePath, hits },
|
|
174
|
+
display: 'found ' + hits.length + ' match(es) for "' + query.slice(0, 60) + '"',
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/** Split markdown body into (heading, paragraph) pairs, score
|
|
178
|
+
* each paragraph against the query, return top-N hits. Pure +
|
|
179
|
+
* exported for tests. */
|
|
180
|
+
export function searchSpec(body, query, max = 5) {
|
|
181
|
+
const tokens = normaliseQuery(query);
|
|
182
|
+
if (tokens.length === 0)
|
|
183
|
+
return [];
|
|
184
|
+
/* Paragraphs are separated by blank lines. Track the nearest
|
|
185
|
+
heading as we walk top-down. */
|
|
186
|
+
const blocks = body.split(/\r?\n\s*\r?\n/);
|
|
187
|
+
let currentHeading = '(top of file)';
|
|
188
|
+
const hits = [];
|
|
189
|
+
for (const block of blocks) {
|
|
190
|
+
const trimmed = block.trim();
|
|
191
|
+
if (!trimmed)
|
|
192
|
+
continue;
|
|
193
|
+
const headingMatch = trimmed.match(/^(#{1,3})\s+(.+)$/m);
|
|
194
|
+
if (headingMatch && trimmed.startsWith('#')) {
|
|
195
|
+
currentHeading = headingMatch[2]?.trim() ?? currentHeading;
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
const lower = trimmed.toLowerCase();
|
|
199
|
+
let score = 0;
|
|
200
|
+
for (const t of tokens) {
|
|
201
|
+
if (lower.includes(t))
|
|
202
|
+
score++;
|
|
203
|
+
}
|
|
204
|
+
if (score > 0) {
|
|
205
|
+
hits.push({
|
|
206
|
+
heading: currentHeading,
|
|
207
|
+
snippet: trimmed.length > 240 ? trimmed.slice(0, 240) + '...' : trimmed,
|
|
208
|
+
score,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
hits.sort((a, b) => b.score - a.score);
|
|
213
|
+
return hits.slice(0, max);
|
|
214
|
+
}
|
|
215
|
+
function normaliseQuery(q) {
|
|
216
|
+
return q
|
|
217
|
+
.toLowerCase()
|
|
218
|
+
.split(/[^a-z0-9_]+/)
|
|
219
|
+
.filter((t) => t.length >= 3);
|
|
220
|
+
}
|
|
221
|
+
function clampMax(n) {
|
|
222
|
+
if (typeof n !== 'number' || !Number.isFinite(n))
|
|
223
|
+
return 5;
|
|
224
|
+
if (n < 1)
|
|
225
|
+
return 1;
|
|
226
|
+
if (n > 20)
|
|
227
|
+
return 20;
|
|
228
|
+
return Math.floor(n);
|
|
229
|
+
}
|
|
230
|
+
/* ============================================================
|
|
231
|
+
* forge.list_files
|
|
232
|
+
* ============================================================ */
|
|
233
|
+
export const LIST_FILES_SPEC = {
|
|
234
|
+
name: 'forge.list_files',
|
|
235
|
+
description: 'List source files under a directory of the active project. Bounded read-only walk with a hard cap on file count + a glob filter for the basename. Useful when the chat needs to know what is in the project before opening anything.',
|
|
236
|
+
input_schema: {
|
|
237
|
+
type: 'object',
|
|
238
|
+
properties: {
|
|
239
|
+
subdir: {
|
|
240
|
+
type: 'string',
|
|
241
|
+
description: 'Subdirectory relative to the project root. Default "src". The walk refuses absolute paths + path traversals (../).',
|
|
242
|
+
},
|
|
243
|
+
glob: {
|
|
244
|
+
type: 'string',
|
|
245
|
+
description: 'Optional basename glob (e.g. "*.tsx", "*.css"). Matched case-insensitively against the file basename only.',
|
|
246
|
+
},
|
|
247
|
+
max_files: {
|
|
248
|
+
type: 'number',
|
|
249
|
+
description: 'Hard cap on the number of files returned. Default 100, max 500.',
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
required: [],
|
|
253
|
+
},
|
|
254
|
+
requires_approval: false,
|
|
255
|
+
};
|
|
256
|
+
const SKIP_DIRS = new Set([
|
|
257
|
+
'node_modules', 'dist', '.git', '.next', '.cache', '.yujin-forge',
|
|
258
|
+
'build', 'coverage', '.turbo', '.vercel',
|
|
259
|
+
]);
|
|
260
|
+
export async function runListFiles(args, ctx) {
|
|
261
|
+
const sub = (args.subdir || 'src').trim();
|
|
262
|
+
if (path.isAbsolute(sub) || sub.includes('..')) {
|
|
263
|
+
return {
|
|
264
|
+
tool: LIST_FILES_SPEC.name,
|
|
265
|
+
result: { error: 'subdir must be relative and contained within the project root' },
|
|
266
|
+
is_error: true,
|
|
267
|
+
display: 'invalid subdir',
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
const cap = clampListMax(args.max_files);
|
|
271
|
+
const matcher = compileBasenameGlob(args.glob);
|
|
272
|
+
const root = path.join(ctx.projectRoot, sub);
|
|
273
|
+
const out = [];
|
|
274
|
+
let truncated = false;
|
|
275
|
+
async function walk(dir, relBase) {
|
|
276
|
+
if (truncated)
|
|
277
|
+
return;
|
|
278
|
+
let entries;
|
|
279
|
+
try {
|
|
280
|
+
entries = await fs.readdir(dir, { withFileTypes: true });
|
|
281
|
+
}
|
|
282
|
+
catch (err) {
|
|
283
|
+
const code = err.code;
|
|
284
|
+
if (code === 'ENOENT') {
|
|
285
|
+
throw new Error('subdir not found: ' + sub);
|
|
286
|
+
}
|
|
287
|
+
throw err;
|
|
288
|
+
}
|
|
289
|
+
entries.sort((a, b) => a.name.localeCompare(b.name));
|
|
290
|
+
for (const e of entries) {
|
|
291
|
+
if (truncated)
|
|
292
|
+
return;
|
|
293
|
+
if (SKIP_DIRS.has(e.name))
|
|
294
|
+
continue;
|
|
295
|
+
const full = path.join(dir, e.name);
|
|
296
|
+
const rel = relBase ? (relBase + '/' + e.name) : e.name;
|
|
297
|
+
if (e.isDirectory()) {
|
|
298
|
+
await walk(full, rel);
|
|
299
|
+
}
|
|
300
|
+
else if (e.isFile()) {
|
|
301
|
+
if (matcher && !matcher(e.name))
|
|
302
|
+
continue;
|
|
303
|
+
try {
|
|
304
|
+
const stat = await fs.stat(full);
|
|
305
|
+
out.push({ path: rel, size: stat.size });
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
/* Race with deletion; skip. */
|
|
309
|
+
}
|
|
310
|
+
if (out.length >= cap) {
|
|
311
|
+
truncated = true;
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
try {
|
|
318
|
+
await walk(root, '');
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
return {
|
|
322
|
+
tool: LIST_FILES_SPEC.name,
|
|
323
|
+
result: { error: err instanceof Error ? err.message : String(err) },
|
|
324
|
+
is_error: true,
|
|
325
|
+
display: 'walk failed',
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
return {
|
|
329
|
+
tool: LIST_FILES_SPEC.name,
|
|
330
|
+
result: { subdir: sub, files: out, truncated },
|
|
331
|
+
display: 'listed ' + out.length + ' file(s)' + (truncated ? ' (truncated at cap=' + cap + ')' : ''),
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
function clampListMax(n) {
|
|
335
|
+
if (typeof n !== 'number' || !Number.isFinite(n))
|
|
336
|
+
return 100;
|
|
337
|
+
if (n < 1)
|
|
338
|
+
return 1;
|
|
339
|
+
if (n > 500)
|
|
340
|
+
return 500;
|
|
341
|
+
return Math.floor(n);
|
|
342
|
+
}
|
|
343
|
+
/** Compile a glob like "*.tsx" / "App.*" into a basename matcher.
|
|
344
|
+
* Only handles "*" and "?" -- enough for the common adopter case
|
|
345
|
+
* and keeps the implementation dependency-free.
|
|
346
|
+
* Exported for tests. */
|
|
347
|
+
export function compileBasenameGlob(glob) {
|
|
348
|
+
if (!glob || glob.trim() === '')
|
|
349
|
+
return null;
|
|
350
|
+
const re = new RegExp('^' + glob.trim()
|
|
351
|
+
.toLowerCase()
|
|
352
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
353
|
+
.replace(/\*/g, '.*')
|
|
354
|
+
.replace(/\?/g, '.') + '$');
|
|
355
|
+
return (name) => re.test(name.toLowerCase());
|
|
356
|
+
}
|
|
357
|
+
/* ============================================================
|
|
358
|
+
* forge.read_file
|
|
359
|
+
* ============================================================ */
|
|
360
|
+
export const READ_FILE_SPEC = {
|
|
361
|
+
name: 'forge.read_file',
|
|
362
|
+
description: 'Read a single source file from the active project. Path must be relative to the project root and stay within it. Refuses binary files (NUL byte detection) and files larger than max_bytes (default 64KB). Use forge.list_files first when you do not already know the path.',
|
|
363
|
+
input_schema: {
|
|
364
|
+
type: 'object',
|
|
365
|
+
properties: {
|
|
366
|
+
path: {
|
|
367
|
+
type: 'string',
|
|
368
|
+
description: 'Project-relative path. Forward slashes. Forbidden: absolute paths, .. traversal.',
|
|
369
|
+
},
|
|
370
|
+
max_bytes: {
|
|
371
|
+
type: 'number',
|
|
372
|
+
description: 'Hard cap on returned bytes. Default 65536. Max 262144 (256KB).',
|
|
373
|
+
},
|
|
374
|
+
},
|
|
375
|
+
required: ['path'],
|
|
376
|
+
},
|
|
377
|
+
requires_approval: false,
|
|
378
|
+
};
|
|
379
|
+
const READ_FILE_DEFAULT_CAP = 65536;
|
|
380
|
+
const READ_FILE_MAX_CAP = 262144;
|
|
381
|
+
export async function runReadFile(args, ctx) {
|
|
382
|
+
const rel = (args.path || '').trim();
|
|
383
|
+
if (!rel) {
|
|
384
|
+
return {
|
|
385
|
+
tool: READ_FILE_SPEC.name,
|
|
386
|
+
result: { error: 'path is required and must be non-empty' },
|
|
387
|
+
is_error: true,
|
|
388
|
+
display: 'empty path',
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
if (path.isAbsolute(rel) || rel.split(/[\\/]/).includes('..')) {
|
|
392
|
+
return {
|
|
393
|
+
tool: READ_FILE_SPEC.name,
|
|
394
|
+
result: { error: 'path must be relative and contained within the project root' },
|
|
395
|
+
is_error: true,
|
|
396
|
+
display: 'invalid path',
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
const cap = clampReadCap(args.max_bytes);
|
|
400
|
+
const full = path.resolve(ctx.projectRoot, rel);
|
|
401
|
+
/* Defense in depth: even after the .. guard, resolve and re-check
|
|
402
|
+
against the projectRoot prefix in case path module normalisations
|
|
403
|
+
produce something surprising. */
|
|
404
|
+
const projAbs = path.resolve(ctx.projectRoot);
|
|
405
|
+
if (!full.startsWith(projAbs + path.sep) && full !== projAbs) {
|
|
406
|
+
return {
|
|
407
|
+
tool: READ_FILE_SPEC.name,
|
|
408
|
+
result: { error: 'path escapes project root after normalisation' },
|
|
409
|
+
is_error: true,
|
|
410
|
+
display: 'escape attempt',
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
let buf;
|
|
414
|
+
let truncated = false;
|
|
415
|
+
try {
|
|
416
|
+
const handle = await fs.open(full, 'r');
|
|
417
|
+
try {
|
|
418
|
+
const stat = await handle.stat();
|
|
419
|
+
if (!stat.isFile()) {
|
|
420
|
+
await handle.close();
|
|
421
|
+
return {
|
|
422
|
+
tool: READ_FILE_SPEC.name,
|
|
423
|
+
result: { error: 'not a regular file' },
|
|
424
|
+
is_error: true,
|
|
425
|
+
display: 'not a file',
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
const size = stat.size;
|
|
429
|
+
const toRead = Math.min(size, cap);
|
|
430
|
+
truncated = size > cap;
|
|
431
|
+
buf = Buffer.alloc(toRead);
|
|
432
|
+
await handle.read(buf, 0, toRead, 0);
|
|
433
|
+
}
|
|
434
|
+
finally {
|
|
435
|
+
await handle.close();
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
catch (err) {
|
|
439
|
+
const code = err.code;
|
|
440
|
+
if (code === 'ENOENT') {
|
|
441
|
+
return {
|
|
442
|
+
tool: READ_FILE_SPEC.name,
|
|
443
|
+
result: { error: 'file not found: ' + rel },
|
|
444
|
+
is_error: true,
|
|
445
|
+
display: 'not found',
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
return {
|
|
449
|
+
tool: READ_FILE_SPEC.name,
|
|
450
|
+
result: { error: err instanceof Error ? err.message : String(err) },
|
|
451
|
+
is_error: true,
|
|
452
|
+
display: 'read failed',
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
/* NUL byte in the first 8KB is the classic binary heuristic.
|
|
456
|
+
Sampling a slice keeps the check fast on the cap-sized buffer. */
|
|
457
|
+
const sample = buf.subarray(0, Math.min(buf.length, 8192));
|
|
458
|
+
if (sample.indexOf(0) !== -1) {
|
|
459
|
+
return {
|
|
460
|
+
tool: READ_FILE_SPEC.name,
|
|
461
|
+
result: { error: 'binary file (NUL byte detected); read_file refuses non-text content', path: rel },
|
|
462
|
+
is_error: true,
|
|
463
|
+
display: 'binary',
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
const content = buf.toString('utf-8');
|
|
467
|
+
return {
|
|
468
|
+
tool: READ_FILE_SPEC.name,
|
|
469
|
+
result: {
|
|
470
|
+
path: rel,
|
|
471
|
+
content,
|
|
472
|
+
bytes: buf.length,
|
|
473
|
+
truncated,
|
|
474
|
+
},
|
|
475
|
+
display: 'read ' + buf.length + ' byte(s)' + (truncated ? ' (truncated at cap=' + cap + ')' : '') + ' from ' + rel,
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
function clampReadCap(n) {
|
|
479
|
+
if (typeof n !== 'number' || !Number.isFinite(n))
|
|
480
|
+
return READ_FILE_DEFAULT_CAP;
|
|
481
|
+
if (n < 1)
|
|
482
|
+
return 1;
|
|
483
|
+
if (n > READ_FILE_MAX_CAP)
|
|
484
|
+
return READ_FILE_MAX_CAP;
|
|
485
|
+
return Math.floor(n);
|
|
486
|
+
}
|
|
487
|
+
/* ============================================================
|
|
488
|
+
* Registry
|
|
489
|
+
* ============================================================ */
|
|
490
|
+
export const FORGE_TOOL_SPECS = [
|
|
491
|
+
READ_MANIFEST_SPEC,
|
|
492
|
+
CONSULT_NAC_SPEC,
|
|
493
|
+
LIST_FILES_SPEC,
|
|
494
|
+
READ_FILE_SPEC,
|
|
495
|
+
/* GitHub tools (V1.11). create_repo + clone_repo are write-class
|
|
496
|
+
and carry requires_approval=true; branch_status is read-only. */
|
|
497
|
+
CREATE_GITHUB_REPO_SPEC,
|
|
498
|
+
CLONE_REPO_SPEC,
|
|
499
|
+
BRANCH_STATUS_SPEC,
|
|
500
|
+
/* Local git tools (V1.12). commit / push / pull are write-class;
|
|
501
|
+
log is read-only. push --force triggers V1.10 liveness via
|
|
502
|
+
the dispatcher's irreversible classification. */
|
|
503
|
+
GIT_COMMIT_SPEC,
|
|
504
|
+
GIT_PUSH_SPEC,
|
|
505
|
+
GIT_PULL_SPEC,
|
|
506
|
+
GIT_LOG_SPEC,
|
|
507
|
+
/* App lifecycle tools (V1.13). All three are write-class
|
|
508
|
+
(they spawn / kill child processes). */
|
|
509
|
+
RUN_APP_SPEC,
|
|
510
|
+
STOP_APP_SPEC,
|
|
511
|
+
RESTART_APP_SPEC,
|
|
512
|
+
/* Reader tools (V1.28). All read-only; the reader does
|
|
513
|
+
not write to the project, it parses + remembers state +
|
|
514
|
+
answers queries. */
|
|
515
|
+
READER_OPEN_SPEC,
|
|
516
|
+
READER_LIST_DOCS_SPEC,
|
|
517
|
+
READER_READ_SECTION_SPEC,
|
|
518
|
+
READER_NEXT_BLOCK_SPEC,
|
|
519
|
+
READER_SEARCH_SPEC,
|
|
520
|
+
READER_BOOKMARK_SET_SPEC,
|
|
521
|
+
READER_BOOKMARK_JUMP_SPEC,
|
|
522
|
+
READER_RECAP_SPEC,
|
|
523
|
+
/* Manual tool (Fase F.7 / F.8 -- 10-language HTML manuals
|
|
524
|
+
resolved by user language). Read-only, requires_approval=false. */
|
|
525
|
+
MANUAL_OPEN_SPEC,
|
|
526
|
+
/* More tools land in follow-up commits per the docstring. */
|
|
527
|
+
];
|
|
528
|
+
/** Dispatch a tool by name with the args Anthropic returned. Returns
|
|
529
|
+
* a ToolResult ready to be serialised into a tool_result block. */
|
|
530
|
+
export async function runForgeTool(name, args, ctx) {
|
|
531
|
+
switch (name) {
|
|
532
|
+
case READ_MANIFEST_SPEC.name:
|
|
533
|
+
return runReadManifest(args, ctx);
|
|
534
|
+
case CONSULT_NAC_SPEC.name:
|
|
535
|
+
return runConsultNacSpec(args, ctx);
|
|
536
|
+
case LIST_FILES_SPEC.name:
|
|
537
|
+
return runListFiles(args, ctx);
|
|
538
|
+
case READ_FILE_SPEC.name:
|
|
539
|
+
return runReadFile(args, ctx);
|
|
540
|
+
case CREATE_GITHUB_REPO_SPEC.name:
|
|
541
|
+
return runCreateGithubRepo(args, ctx);
|
|
542
|
+
case CLONE_REPO_SPEC.name:
|
|
543
|
+
return runCloneRepo(args, ctx);
|
|
544
|
+
case BRANCH_STATUS_SPEC.name:
|
|
545
|
+
return runBranchStatus(args, ctx);
|
|
546
|
+
case GIT_COMMIT_SPEC.name:
|
|
547
|
+
return runGitCommit(args, ctx);
|
|
548
|
+
case GIT_PUSH_SPEC.name:
|
|
549
|
+
return runGitPush(args, ctx);
|
|
550
|
+
case GIT_PULL_SPEC.name:
|
|
551
|
+
return runGitPull(args, ctx);
|
|
552
|
+
case GIT_LOG_SPEC.name:
|
|
553
|
+
return runGitLog(args, ctx);
|
|
554
|
+
case RUN_APP_SPEC.name:
|
|
555
|
+
return runApp(args, ctx);
|
|
556
|
+
case STOP_APP_SPEC.name:
|
|
557
|
+
return stopApp(args, ctx);
|
|
558
|
+
case RESTART_APP_SPEC.name:
|
|
559
|
+
return restartApp(args, ctx);
|
|
560
|
+
case READER_OPEN_SPEC.name:
|
|
561
|
+
return runReaderOpen(args, ctx);
|
|
562
|
+
case READER_LIST_DOCS_SPEC.name:
|
|
563
|
+
return runReaderListDocuments();
|
|
564
|
+
case READER_READ_SECTION_SPEC.name:
|
|
565
|
+
return runReaderReadSection(args);
|
|
566
|
+
case READER_NEXT_BLOCK_SPEC.name:
|
|
567
|
+
return runReaderNextBlock(args);
|
|
568
|
+
case READER_SEARCH_SPEC.name:
|
|
569
|
+
return runReaderSearch(args);
|
|
570
|
+
case READER_BOOKMARK_SET_SPEC.name:
|
|
571
|
+
return runReaderBookmarkSet(args);
|
|
572
|
+
case READER_BOOKMARK_JUMP_SPEC.name:
|
|
573
|
+
return runReaderBookmarkJump(args);
|
|
574
|
+
case READER_RECAP_SPEC.name:
|
|
575
|
+
return runReaderRecap(args);
|
|
576
|
+
case MANUAL_OPEN_SPEC.name:
|
|
577
|
+
return runManualOpen(args, ctx);
|
|
578
|
+
default:
|
|
579
|
+
return {
|
|
580
|
+
tool: name,
|
|
581
|
+
result: { error: 'unknown tool: ' + name },
|
|
582
|
+
is_error: true,
|
|
583
|
+
display: 'unknown tool',
|
|
584
|
+
};
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/chat/tools.ts"],"names":[],"mappings":"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"}
|