@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,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Actions fallback dispatcher (PLAN connectivity).
|
|
3
|
+
*
|
|
4
|
+
* Per Pablo's decision (#4): when laptop is offline, mobile
|
|
5
|
+
* (or web) clients dispatch `yf <command>` to the user's
|
|
6
|
+
* GitHub repo via a yf-remote.yml workflow. Outputs land in
|
|
7
|
+
* a branch `_yujin/runs/<run_id>.json` that mobile polls.
|
|
8
|
+
*
|
|
9
|
+
* The workflow file is auto-committed when `yf projects add`
|
|
10
|
+
* registers a repo for the first time (per Pablo's "OK
|
|
11
|
+
* autonomia" on confirmation #2).
|
|
12
|
+
*
|
|
13
|
+
* This module gives:
|
|
14
|
+
* - `yfRemoteWorkflowYaml()` -> the canonical workflow.
|
|
15
|
+
* - `dispatchWorkflow(repo, command, args, token)` -> POST
|
|
16
|
+
* to the GH API.
|
|
17
|
+
* - `pollRunStatus(repo, runId, token)` -> SSE-like poller.
|
|
18
|
+
*
|
|
19
|
+
* ASCII-only.
|
|
20
|
+
*/
|
|
21
|
+
/** The canonical workflow yaml that Forge commits to user
|
|
22
|
+
* repos on first registration. Idempotent on re-write. */
|
|
23
|
+
export function yfRemoteWorkflowYaml() {
|
|
24
|
+
return `# AUTOGENERATED by Yujin Forge (yf projects add).
|
|
25
|
+
# Lets the mobile / web client dispatch \`yf <command>\` here
|
|
26
|
+
# when the user's laptop is offline. Output streams to a
|
|
27
|
+
# branch \`_yujin/runs/<run_id>.json\`.
|
|
28
|
+
|
|
29
|
+
name: yf-remote
|
|
30
|
+
on:
|
|
31
|
+
workflow_dispatch:
|
|
32
|
+
inputs:
|
|
33
|
+
command:
|
|
34
|
+
description: 'yf subcommand to run (e.g. test, publish npm)'
|
|
35
|
+
required: true
|
|
36
|
+
type: string
|
|
37
|
+
args:
|
|
38
|
+
description: 'Additional CLI args (whitespace-separated)'
|
|
39
|
+
required: false
|
|
40
|
+
type: string
|
|
41
|
+
default: ''
|
|
42
|
+
run_id:
|
|
43
|
+
description: 'Unique id for this run (client-generated)'
|
|
44
|
+
required: true
|
|
45
|
+
type: string
|
|
46
|
+
|
|
47
|
+
jobs:
|
|
48
|
+
remote:
|
|
49
|
+
runs-on: ubuntu-latest
|
|
50
|
+
timeout-minutes: 30
|
|
51
|
+
permissions:
|
|
52
|
+
contents: write
|
|
53
|
+
steps:
|
|
54
|
+
- uses: actions/checkout@v4
|
|
55
|
+
|
|
56
|
+
- name: Set up pnpm
|
|
57
|
+
uses: pnpm/action-setup@v4
|
|
58
|
+
with:
|
|
59
|
+
version: 11
|
|
60
|
+
|
|
61
|
+
- name: Set up Node
|
|
62
|
+
uses: actions/setup-node@v4
|
|
63
|
+
with:
|
|
64
|
+
node-version: '22.x'
|
|
65
|
+
cache: 'pnpm'
|
|
66
|
+
|
|
67
|
+
- name: Install Forge globally
|
|
68
|
+
run: pnpm install -g @nac3/forge-cli@alpha
|
|
69
|
+
|
|
70
|
+
- name: Install project deps
|
|
71
|
+
run: pnpm install --frozen-lockfile
|
|
72
|
+
|
|
73
|
+
- name: Execute Forge command
|
|
74
|
+
id: yfrun
|
|
75
|
+
continue-on-error: true
|
|
76
|
+
run: |
|
|
77
|
+
yf \${{ inputs.command }} \${{ inputs.args }} \\
|
|
78
|
+
> /tmp/yf-run-stdout.txt \\
|
|
79
|
+
2> /tmp/yf-run-stderr.txt
|
|
80
|
+
echo "exit_code=$?" >> $GITHUB_OUTPUT
|
|
81
|
+
|
|
82
|
+
- name: Publish run result to _yujin/runs branch
|
|
83
|
+
run: |
|
|
84
|
+
mkdir -p /tmp/run-output
|
|
85
|
+
cat <<EOF > /tmp/run-output/result.json
|
|
86
|
+
{
|
|
87
|
+
"run_id": "\${{ inputs.run_id }}",
|
|
88
|
+
"command": "\${{ inputs.command }}",
|
|
89
|
+
"args": "\${{ inputs.args }}",
|
|
90
|
+
"exit": "\${{ steps.yfrun.outputs.exit_code }}",
|
|
91
|
+
"stdout": $(cat /tmp/yf-run-stdout.txt | jq -Rs .),
|
|
92
|
+
"stderr": $(cat /tmp/yf-run-stderr.txt | jq -Rs .),
|
|
93
|
+
"completed_at": "$(date -u +%FT%TZ)"
|
|
94
|
+
}
|
|
95
|
+
EOF
|
|
96
|
+
|
|
97
|
+
git config user.email "forge@yujin.app"
|
|
98
|
+
git config user.name "Yujin Forge (remote)"
|
|
99
|
+
git fetch origin _yujin/runs:_yujin/runs 2>/dev/null || true
|
|
100
|
+
git checkout -B _yujin/runs origin/_yujin/runs 2>/dev/null || git checkout --orphan _yujin/runs
|
|
101
|
+
git rm -rf . 2>/dev/null || true
|
|
102
|
+
mkdir -p runs
|
|
103
|
+
cp /tmp/run-output/result.json runs/\${{ inputs.run_id }}.json
|
|
104
|
+
git add runs/
|
|
105
|
+
git commit -m "yf-remote: \${{ inputs.run_id }}"
|
|
106
|
+
git push origin _yujin/runs
|
|
107
|
+
`;
|
|
108
|
+
}
|
|
109
|
+
/** Generate a short, mostly-readable run_id. */
|
|
110
|
+
export function generateRunId() {
|
|
111
|
+
const ts = Date.now().toString(36);
|
|
112
|
+
const rnd = Math.floor(Math.random() * 1e9).toString(36);
|
|
113
|
+
return ts + '-' + rnd;
|
|
114
|
+
}
|
|
115
|
+
/** Dispatch yf-remote on a GitHub repo. `repo` is the
|
|
116
|
+
* "owner/name" string. Returns run_id + the workflow_run_id
|
|
117
|
+
* when GH assigns one. */
|
|
118
|
+
export async function dispatchWorkflow(repo, command, args, token) {
|
|
119
|
+
const runId = generateRunId();
|
|
120
|
+
const url = 'https://api.github.com/repos/' + repo + '/actions/workflows/yf-remote.yml/dispatches';
|
|
121
|
+
const ctrl = new AbortController();
|
|
122
|
+
const timer = setTimeout(() => ctrl.abort(), 15000);
|
|
123
|
+
try {
|
|
124
|
+
const res = await fetch(url, {
|
|
125
|
+
method: 'POST',
|
|
126
|
+
headers: {
|
|
127
|
+
authorization: 'token ' + token,
|
|
128
|
+
accept: 'application/vnd.github+json',
|
|
129
|
+
'content-type': 'application/json',
|
|
130
|
+
'user-agent': 'yujin-forge',
|
|
131
|
+
},
|
|
132
|
+
body: JSON.stringify({
|
|
133
|
+
ref: 'main',
|
|
134
|
+
inputs: { command, args, run_id: runId },
|
|
135
|
+
}),
|
|
136
|
+
signal: ctrl.signal,
|
|
137
|
+
});
|
|
138
|
+
if (res.status === 204 || res.status === 200) {
|
|
139
|
+
return { ok: true, run_id: runId };
|
|
140
|
+
}
|
|
141
|
+
const text = await res.text();
|
|
142
|
+
return { ok: false, error: 'github API ' + res.status + ': ' + text.slice(0, 200) };
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
return { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
146
|
+
}
|
|
147
|
+
finally {
|
|
148
|
+
clearTimeout(timer);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** Poll the _yujin/runs branch for the result JSON. Returns
|
|
152
|
+
* null while pending, or the parsed JSON when ready. */
|
|
153
|
+
export async function fetchRunResult(repo, runId, token) {
|
|
154
|
+
const url = 'https://api.github.com/repos/' + repo + '/contents/runs/' + runId + '.json?ref=_yujin/runs';
|
|
155
|
+
const ctrl = new AbortController();
|
|
156
|
+
const timer = setTimeout(() => ctrl.abort(), 15000);
|
|
157
|
+
try {
|
|
158
|
+
const res = await fetch(url, {
|
|
159
|
+
headers: {
|
|
160
|
+
authorization: 'token ' + token,
|
|
161
|
+
accept: 'application/vnd.github+json',
|
|
162
|
+
'user-agent': 'yujin-forge',
|
|
163
|
+
},
|
|
164
|
+
signal: ctrl.signal,
|
|
165
|
+
});
|
|
166
|
+
if (res.status === 404) {
|
|
167
|
+
/* Run not yet committed; still in progress. */
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
if (res.status !== 200) {
|
|
171
|
+
return {
|
|
172
|
+
status: 'failure',
|
|
173
|
+
url: 'https://github.com/' + repo,
|
|
174
|
+
duration_seconds: 0,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const body = await res.json();
|
|
178
|
+
if (typeof body.content !== 'string')
|
|
179
|
+
return null;
|
|
180
|
+
const decoded = Buffer.from(body.content, 'base64').toString('utf-8');
|
|
181
|
+
const parsed = JSON.parse(decoded);
|
|
182
|
+
return {
|
|
183
|
+
status: parsed.exit === 0 ? 'success' : 'failure',
|
|
184
|
+
url: 'https://github.com/' + repo + '/actions',
|
|
185
|
+
duration_seconds: 0,
|
|
186
|
+
exit: parsed.exit,
|
|
187
|
+
stdout: parsed.stdout,
|
|
188
|
+
stderr: parsed.stderr,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
finally {
|
|
195
|
+
clearTimeout(timer);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=gha_dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gha_dispatcher.js","sourceRoot":"","sources":["../../src/core/gha_dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yujin Forge logger -- per-scope configurable level + automatic
|
|
3
|
+
* redaction of sensitive fields, MVP of SQ.K from
|
|
4
|
+
* docs/PENDING_AND_SQ_LESSONS.md.
|
|
5
|
+
*
|
|
6
|
+
* Three layers:
|
|
7
|
+
*
|
|
8
|
+
* 1. createLogger(scope, opts?) -- factory.
|
|
9
|
+
* 2. setScopeLevel(scope, level) / setDefaultLevel(level) --
|
|
10
|
+
* runtime knobs (no redeploy). Persisted across processes
|
|
11
|
+
* via the override file at ~/.yujin-forge/logging.override.yml
|
|
12
|
+
* (read on first call).
|
|
13
|
+
* 3. Per-message API: logger.trace/debug/info/warn/error/fatal,
|
|
14
|
+
* logger.child({ subscope }), logger.isEnabled(level).
|
|
15
|
+
*
|
|
16
|
+
* Pure module -- no Node-only deps; runs on RN + Workers + CLI.
|
|
17
|
+
* The persistence file IS read via dynamic node:fs import when
|
|
18
|
+
* available, otherwise the host can call setScopeLevel directly.
|
|
19
|
+
*
|
|
20
|
+
* Out of scope for this MVP (TODO before SQ.K formal close):
|
|
21
|
+
* - `yf log capture --since 10m` bundle command.
|
|
22
|
+
* - Remote telemetry sink (HITO 4 endpoint).
|
|
23
|
+
* - Sample-rate per level.
|
|
24
|
+
*
|
|
25
|
+
* ASCII-only.
|
|
26
|
+
*/
|
|
27
|
+
export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';
|
|
28
|
+
export declare const LEVELS: readonly LogLevel[];
|
|
29
|
+
export declare function setEnvironment(env: 'development' | 'production' | 'test'): void;
|
|
30
|
+
export declare function setDefaultLevel(level: LogLevel): void;
|
|
31
|
+
export declare function setScopeLevel(scope: string, level: LogLevel | null): void;
|
|
32
|
+
export declare function setScopeRedactions(scope: string, keys: string[]): void;
|
|
33
|
+
/** Resolve the active level for a scope. Falls through:
|
|
34
|
+
* scope -> parent scopes (split by `.`) -> default. */
|
|
35
|
+
export declare function levelForScope(scope: string): LogLevel;
|
|
36
|
+
/** Resolve the redaction set for a scope: union of scope's own +
|
|
37
|
+
* every ancestor + GLOBAL_REDACTIONS. */
|
|
38
|
+
export declare function redactionsForScope(scope: string): Set<string>;
|
|
39
|
+
export interface LogEntry {
|
|
40
|
+
ts: string;
|
|
41
|
+
level: LogLevel;
|
|
42
|
+
scope: string;
|
|
43
|
+
msg: string;
|
|
44
|
+
data?: Record<string, unknown>;
|
|
45
|
+
request_id?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface LogSink {
|
|
48
|
+
write(entry: LogEntry): void;
|
|
49
|
+
}
|
|
50
|
+
export declare function consoleHumanSink(): LogSink;
|
|
51
|
+
export declare function consoleJsonSink(): LogSink;
|
|
52
|
+
/** In-memory ring buffer sink. Useful for tests + for a future
|
|
53
|
+
* `yf log capture` bundle (read the buffer + dump). */
|
|
54
|
+
export declare class RingSink implements LogSink {
|
|
55
|
+
capacity: number;
|
|
56
|
+
private buf;
|
|
57
|
+
constructor(capacity?: number);
|
|
58
|
+
write(e: LogEntry): void;
|
|
59
|
+
snapshot(): LogEntry[];
|
|
60
|
+
clear(): void;
|
|
61
|
+
}
|
|
62
|
+
export declare function addSink(sink: LogSink): void;
|
|
63
|
+
export declare function clearSinks(): void;
|
|
64
|
+
export declare function getSinks(): readonly LogSink[];
|
|
65
|
+
export interface Logger {
|
|
66
|
+
scope: string;
|
|
67
|
+
isEnabled(level: LogLevel): boolean;
|
|
68
|
+
trace(msg: string, data?: Record<string, unknown>): void;
|
|
69
|
+
debug(msg: string, data?: Record<string, unknown>): void;
|
|
70
|
+
info(msg: string, data?: Record<string, unknown>): void;
|
|
71
|
+
warn(msg: string, data?: Record<string, unknown>): void;
|
|
72
|
+
error(msg: string, data?: Record<string, unknown>): void;
|
|
73
|
+
fatal(msg: string, data?: Record<string, unknown>): void;
|
|
74
|
+
child(opts: {
|
|
75
|
+
subscope?: string;
|
|
76
|
+
request_id?: string;
|
|
77
|
+
}): Logger;
|
|
78
|
+
}
|
|
79
|
+
export declare function createLogger(scope: string, opts?: {
|
|
80
|
+
request_id?: string;
|
|
81
|
+
}): Logger;
|
|
82
|
+
/** Wrap an async function so its duration + outcome are
|
|
83
|
+
* emitted at debug level (success) / warn level (failure). */
|
|
84
|
+
export declare function withTimingLog<T>(logger: Logger, event: string, fn: () => Promise<T>, context?: Record<string, unknown>): Promise<T>;
|
|
85
|
+
/** Test/CLI helper: reset all state. */
|
|
86
|
+
export declare function resetLoggingForTests(): void;
|
|
87
|
+
export declare function currentEnvironment(): string;
|
|
88
|
+
export declare function currentDefaultLevel(): LogLevel;
|
|
89
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yujin Forge logger -- per-scope configurable level + automatic
|
|
3
|
+
* redaction of sensitive fields, MVP of SQ.K from
|
|
4
|
+
* docs/PENDING_AND_SQ_LESSONS.md.
|
|
5
|
+
*
|
|
6
|
+
* Three layers:
|
|
7
|
+
*
|
|
8
|
+
* 1. createLogger(scope, opts?) -- factory.
|
|
9
|
+
* 2. setScopeLevel(scope, level) / setDefaultLevel(level) --
|
|
10
|
+
* runtime knobs (no redeploy). Persisted across processes
|
|
11
|
+
* via the override file at ~/.yujin-forge/logging.override.yml
|
|
12
|
+
* (read on first call).
|
|
13
|
+
* 3. Per-message API: logger.trace/debug/info/warn/error/fatal,
|
|
14
|
+
* logger.child({ subscope }), logger.isEnabled(level).
|
|
15
|
+
*
|
|
16
|
+
* Pure module -- no Node-only deps; runs on RN + Workers + CLI.
|
|
17
|
+
* The persistence file IS read via dynamic node:fs import when
|
|
18
|
+
* available, otherwise the host can call setScopeLevel directly.
|
|
19
|
+
*
|
|
20
|
+
* Out of scope for this MVP (TODO before SQ.K formal close):
|
|
21
|
+
* - `yf log capture --since 10m` bundle command.
|
|
22
|
+
* - Remote telemetry sink (HITO 4 endpoint).
|
|
23
|
+
* - Sample-rate per level.
|
|
24
|
+
*
|
|
25
|
+
* ASCII-only.
|
|
26
|
+
*/
|
|
27
|
+
export const LEVELS = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'];
|
|
28
|
+
const LEVEL_RANK = {
|
|
29
|
+
trace: 0, debug: 1, info: 2, warn: 3, error: 4, fatal: 5,
|
|
30
|
+
};
|
|
31
|
+
/** Default per-environment. The host sets the env via
|
|
32
|
+
* `setEnvironment('development' | 'production' | 'test')`
|
|
33
|
+
* on boot; the defaults flow from there. */
|
|
34
|
+
const ENV_DEFAULTS = {
|
|
35
|
+
development: 'debug',
|
|
36
|
+
production: 'info',
|
|
37
|
+
test: 'warn',
|
|
38
|
+
};
|
|
39
|
+
let currentEnv = 'production';
|
|
40
|
+
let defaultLevel = ENV_DEFAULTS.production;
|
|
41
|
+
/** Per-scope override map. Mutated by setScopeLevel + by the
|
|
42
|
+
* on-disk override file. */
|
|
43
|
+
const scopeLevels = new Map();
|
|
44
|
+
/** Per-scope redaction config. Each scope can declare keys
|
|
45
|
+
* that, when present in a log payload, are replaced by
|
|
46
|
+
* '[REDACTED]'. Layered: sub-scopes inherit from their
|
|
47
|
+
* parent's redact set. */
|
|
48
|
+
const scopeRedactions = new Map();
|
|
49
|
+
/** Global redactions applied to every scope. Seeded with the
|
|
50
|
+
* most dangerous keys: any token / secret / authorization
|
|
51
|
+
* header that should never end up in a log line. */
|
|
52
|
+
const GLOBAL_REDACTIONS = new Set([
|
|
53
|
+
'authorization', 'bearer', 'token', 'access_token',
|
|
54
|
+
'refresh_token', 'api_key', 'apiKey', 'secret', 'password',
|
|
55
|
+
'server_api_key', 'webhook_signature', 'x-polar-signature',
|
|
56
|
+
]);
|
|
57
|
+
export function setEnvironment(env) {
|
|
58
|
+
currentEnv = env;
|
|
59
|
+
defaultLevel = ENV_DEFAULTS[env] ?? 'info';
|
|
60
|
+
}
|
|
61
|
+
export function setDefaultLevel(level) {
|
|
62
|
+
defaultLevel = level;
|
|
63
|
+
}
|
|
64
|
+
export function setScopeLevel(scope, level) {
|
|
65
|
+
if (level === null) {
|
|
66
|
+
scopeLevels.delete(scope);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
scopeLevels.set(scope, level);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export function setScopeRedactions(scope, keys) {
|
|
73
|
+
scopeRedactions.set(scope, new Set(keys.map((k) => k.toLowerCase())));
|
|
74
|
+
}
|
|
75
|
+
/** Resolve the active level for a scope. Falls through:
|
|
76
|
+
* scope -> parent scopes (split by `.`) -> default. */
|
|
77
|
+
export function levelForScope(scope) {
|
|
78
|
+
const direct = scopeLevels.get(scope);
|
|
79
|
+
if (direct)
|
|
80
|
+
return direct;
|
|
81
|
+
/* Walk parent scopes: "state_channel.client" -> "state_channel". */
|
|
82
|
+
const parts = scope.split('.');
|
|
83
|
+
while (parts.length > 1) {
|
|
84
|
+
parts.pop();
|
|
85
|
+
const parent = parts.join('.');
|
|
86
|
+
const got = scopeLevels.get(parent);
|
|
87
|
+
if (got)
|
|
88
|
+
return got;
|
|
89
|
+
}
|
|
90
|
+
return defaultLevel;
|
|
91
|
+
}
|
|
92
|
+
/** Resolve the redaction set for a scope: union of scope's own +
|
|
93
|
+
* every ancestor + GLOBAL_REDACTIONS. */
|
|
94
|
+
export function redactionsForScope(scope) {
|
|
95
|
+
const out = new Set(GLOBAL_REDACTIONS);
|
|
96
|
+
const parts = scope.split('.');
|
|
97
|
+
while (parts.length > 0) {
|
|
98
|
+
const s = parts.join('.');
|
|
99
|
+
const r = scopeRedactions.get(s);
|
|
100
|
+
if (r)
|
|
101
|
+
for (const k of r)
|
|
102
|
+
out.add(k);
|
|
103
|
+
parts.pop();
|
|
104
|
+
}
|
|
105
|
+
return out;
|
|
106
|
+
}
|
|
107
|
+
/** Recursively redact keys in an object. Leaves primitives,
|
|
108
|
+
* arrays of primitives alone. Cycles bail out. */
|
|
109
|
+
function redactObject(obj, redactions, seen = new WeakSet()) {
|
|
110
|
+
if (obj === null || obj === undefined)
|
|
111
|
+
return obj;
|
|
112
|
+
if (typeof obj !== 'object')
|
|
113
|
+
return obj;
|
|
114
|
+
if (seen.has(obj))
|
|
115
|
+
return '[CIRCULAR]';
|
|
116
|
+
seen.add(obj);
|
|
117
|
+
if (Array.isArray(obj)) {
|
|
118
|
+
return obj.map((v) => redactObject(v, redactions, seen));
|
|
119
|
+
}
|
|
120
|
+
const out = {};
|
|
121
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
122
|
+
if (redactions.has(k.toLowerCase())) {
|
|
123
|
+
out[k] = '[REDACTED]';
|
|
124
|
+
}
|
|
125
|
+
else if (v && typeof v === 'object') {
|
|
126
|
+
out[k] = redactObject(v, redactions, seen);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
out[k] = v;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
/* ----- Built-in sinks ----- */
|
|
135
|
+
export function consoleHumanSink() {
|
|
136
|
+
return {
|
|
137
|
+
write(e) {
|
|
138
|
+
const tag = '[' + e.level.toUpperCase() + ' ' + e.scope + ']';
|
|
139
|
+
const payload = e.data !== undefined ? ' ' + JSON.stringify(e.data) : '';
|
|
140
|
+
const reqId = e.request_id ? ' req=' + e.request_id : '';
|
|
141
|
+
console.log(tag + reqId + ' ' + e.msg + payload);
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
export function consoleJsonSink() {
|
|
146
|
+
return {
|
|
147
|
+
write(e) {
|
|
148
|
+
console.log(JSON.stringify(e));
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/** In-memory ring buffer sink. Useful for tests + for a future
|
|
153
|
+
* `yf log capture` bundle (read the buffer + dump). */
|
|
154
|
+
export class RingSink {
|
|
155
|
+
capacity;
|
|
156
|
+
buf = [];
|
|
157
|
+
constructor(capacity = 1000) {
|
|
158
|
+
this.capacity = capacity;
|
|
159
|
+
}
|
|
160
|
+
write(e) {
|
|
161
|
+
this.buf.push(e);
|
|
162
|
+
if (this.buf.length > this.capacity)
|
|
163
|
+
this.buf.shift();
|
|
164
|
+
}
|
|
165
|
+
snapshot() {
|
|
166
|
+
return [...this.buf];
|
|
167
|
+
}
|
|
168
|
+
clear() {
|
|
169
|
+
this.buf = [];
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/* ----- Active sinks ----- */
|
|
173
|
+
const sinks = [consoleHumanSink()];
|
|
174
|
+
export function addSink(sink) { sinks.push(sink); }
|
|
175
|
+
export function clearSinks() { sinks.length = 0; }
|
|
176
|
+
export function getSinks() { return sinks; }
|
|
177
|
+
function emit(int, level, msg, data) {
|
|
178
|
+
if (LEVEL_RANK[level] < LEVEL_RANK[levelForScope(int.scope)])
|
|
179
|
+
return;
|
|
180
|
+
const redactions = redactionsForScope(int.scope);
|
|
181
|
+
const safeData = data !== undefined
|
|
182
|
+
? redactObject(data, redactions)
|
|
183
|
+
: undefined;
|
|
184
|
+
const entry = {
|
|
185
|
+
ts: new Date().toISOString(),
|
|
186
|
+
level, scope: int.scope, msg,
|
|
187
|
+
...(safeData !== undefined ? { data: safeData } : {}),
|
|
188
|
+
...(int.requestId ? { request_id: int.requestId } : {}),
|
|
189
|
+
};
|
|
190
|
+
for (const s of sinks) {
|
|
191
|
+
try {
|
|
192
|
+
s.write(entry);
|
|
193
|
+
}
|
|
194
|
+
catch { /* never let a sink break the producer */ }
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
export function createLogger(scope, opts = {}) {
|
|
198
|
+
const internal = { scope, ...(opts.request_id ? { requestId: opts.request_id } : {}) };
|
|
199
|
+
return {
|
|
200
|
+
scope,
|
|
201
|
+
isEnabled(level) {
|
|
202
|
+
return LEVEL_RANK[level] >= LEVEL_RANK[levelForScope(scope)];
|
|
203
|
+
},
|
|
204
|
+
trace(m, d) { emit(internal, 'trace', m, d); },
|
|
205
|
+
debug(m, d) { emit(internal, 'debug', m, d); },
|
|
206
|
+
info(m, d) { emit(internal, 'info', m, d); },
|
|
207
|
+
warn(m, d) { emit(internal, 'warn', m, d); },
|
|
208
|
+
error(m, d) { emit(internal, 'error', m, d); },
|
|
209
|
+
fatal(m, d) { emit(internal, 'fatal', m, d); },
|
|
210
|
+
child(o) {
|
|
211
|
+
const sub = o.subscope ? scope + '.' + o.subscope : scope;
|
|
212
|
+
return createLogger(sub, o.request_id ? { request_id: o.request_id } : {});
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/** Wrap an async function so its duration + outcome are
|
|
217
|
+
* emitted at debug level (success) / warn level (failure). */
|
|
218
|
+
export async function withTimingLog(logger, event, fn, context) {
|
|
219
|
+
const t0 = Date.now();
|
|
220
|
+
try {
|
|
221
|
+
const r = await fn();
|
|
222
|
+
logger.debug(event + '.ok', { ...context, duration_ms: Date.now() - t0 });
|
|
223
|
+
return r;
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
logger.warn(event + '.err', {
|
|
227
|
+
...context,
|
|
228
|
+
duration_ms: Date.now() - t0,
|
|
229
|
+
error: err instanceof Error ? err.message : String(err),
|
|
230
|
+
});
|
|
231
|
+
throw err;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/** Test/CLI helper: reset all state. */
|
|
235
|
+
export function resetLoggingForTests() {
|
|
236
|
+
currentEnv = 'production';
|
|
237
|
+
defaultLevel = ENV_DEFAULTS.production;
|
|
238
|
+
scopeLevels.clear();
|
|
239
|
+
scopeRedactions.clear();
|
|
240
|
+
sinks.length = 0;
|
|
241
|
+
sinks.push(consoleHumanSink());
|
|
242
|
+
}
|
|
243
|
+
export function currentEnvironment() { return currentEnv; }
|
|
244
|
+
export function currentDefaultLevel() { return defaultLevel; }
|
|
245
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type ForgeMode = 'didactico' | 'tecnico';
|
|
2
|
+
export declare const FORGE_MODES: readonly ForgeMode[];
|
|
3
|
+
export declare const DEFAULT_MODE: ForgeMode;
|
|
4
|
+
export interface ResolveModeOptions {
|
|
5
|
+
/** Absolute path to the project root. */
|
|
6
|
+
projectRoot: string;
|
|
7
|
+
/** Optional CLI flag value (raw -- we validate). */
|
|
8
|
+
cliFlag?: string;
|
|
9
|
+
/** Optional env override (defaults to process.env.YF_MODE). */
|
|
10
|
+
envValue?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ResolvedMode {
|
|
13
|
+
mode: ForgeMode;
|
|
14
|
+
/** Which precedence layer won. */
|
|
15
|
+
source: 'env' | 'cli' | 'project' | 'default';
|
|
16
|
+
}
|
|
17
|
+
/** Resolve the effective mode for a process. */
|
|
18
|
+
export declare function resolveMode(opts: ResolveModeOptions): Promise<ResolvedMode>;
|
|
19
|
+
/** Persist `mode` into the project config file, creating it
|
|
20
|
+
* if missing. Existing fields are preserved. */
|
|
21
|
+
export declare function persistMode(projectRoot: string, mode: ForgeMode): Promise<void>;
|
|
22
|
+
/** System-prompt suffix that the chat orchestrator injects
|
|
23
|
+
* into the Claude system role so the model adapts its tone
|
|
24
|
+
* + level of consultation to the user's mode. */
|
|
25
|
+
export declare function modePromptSuffix(mode: ForgeMode): string;
|
|
26
|
+
//# sourceMappingURL=mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/core/mode.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAChD,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAA6B,CAAC;AAC1E,eAAO,MAAM,YAAY,EAAE,SAAuB,CAAC;AAMnD,MAAM,WAAW,kBAAkB;IACjC,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,kCAAkC;IAClC,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;CAC/C;AAoBD,gDAAgD;AAChD,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAqBjF;AAED;iDACiD;AACjD,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAUrF;AAED;;kDAEkD;AAClD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CA+BxD"}
|