usesteady 0.1.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 +186 -0
- package/README.md +724 -0
- package/bin/use-steady.js +13 -0
- package/dist/server-store.d.ts +68 -0
- package/dist/server-store.d.ts.map +1 -0
- package/dist/server-store.js +133 -0
- package/dist/server-store.js.map +1 -0
- package/dist/server.d.ts +35 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +569 -0
- package/dist/server.js.map +1 -0
- package/dist/src/claude/adapters/api-adapter.d.ts +99 -0
- package/dist/src/claude/adapters/api-adapter.d.ts.map +1 -0
- package/dist/src/claude/adapters/api-adapter.js +415 -0
- package/dist/src/claude/adapters/api-adapter.js.map +1 -0
- package/dist/src/claude/adapters/stub-adapter.d.ts +73 -0
- package/dist/src/claude/adapters/stub-adapter.d.ts.map +1 -0
- package/dist/src/claude/adapters/stub-adapter.js +114 -0
- package/dist/src/claude/adapters/stub-adapter.js.map +1 -0
- package/dist/src/claude/artifact-mapper.d.ts +85 -0
- package/dist/src/claude/artifact-mapper.d.ts.map +1 -0
- package/dist/src/claude/artifact-mapper.js +187 -0
- package/dist/src/claude/artifact-mapper.js.map +1 -0
- package/dist/src/claude/delivery-gate.d.ts +136 -0
- package/dist/src/claude/delivery-gate.d.ts.map +1 -0
- package/dist/src/claude/delivery-gate.js +231 -0
- package/dist/src/claude/delivery-gate.js.map +1 -0
- package/dist/src/claude/index.d.ts +24 -0
- package/dist/src/claude/index.d.ts.map +1 -0
- package/dist/src/claude/index.js +23 -0
- package/dist/src/claude/index.js.map +1 -0
- package/dist/src/claude/types.d.ts +223 -0
- package/dist/src/claude/types.d.ts.map +1 -0
- package/dist/src/claude/types.js +64 -0
- package/dist/src/claude/types.js.map +1 -0
- package/dist/src/control/compiler.d.ts +125 -0
- package/dist/src/control/compiler.d.ts.map +1 -0
- package/dist/src/control/compiler.js +179 -0
- package/dist/src/control/compiler.js.map +1 -0
- package/dist/src/control/constraints.d.ts +42 -0
- package/dist/src/control/constraints.d.ts.map +1 -0
- package/dist/src/control/constraints.js +116 -0
- package/dist/src/control/constraints.js.map +1 -0
- package/dist/src/control/drift-detector.d.ts +49 -0
- package/dist/src/control/drift-detector.d.ts.map +1 -0
- package/dist/src/control/drift-detector.js +115 -0
- package/dist/src/control/drift-detector.js.map +1 -0
- package/dist/src/control/index.d.ts +44 -0
- package/dist/src/control/index.d.ts.map +1 -0
- package/dist/src/control/index.js +40 -0
- package/dist/src/control/index.js.map +1 -0
- package/dist/src/control/types.d.ts +144 -0
- package/dist/src/control/types.d.ts.map +1 -0
- package/dist/src/control/types.js +57 -0
- package/dist/src/control/types.js.map +1 -0
- package/dist/src/cursor/adapters/inprocess-adapter.d.ts +78 -0
- package/dist/src/cursor/adapters/inprocess-adapter.d.ts.map +1 -0
- package/dist/src/cursor/adapters/inprocess-adapter.js +308 -0
- package/dist/src/cursor/adapters/inprocess-adapter.js.map +1 -0
- package/dist/src/cursor/adapters/stub-adapter.d.ts +75 -0
- package/dist/src/cursor/adapters/stub-adapter.d.ts.map +1 -0
- package/dist/src/cursor/adapters/stub-adapter.js +120 -0
- package/dist/src/cursor/adapters/stub-adapter.js.map +1 -0
- package/dist/src/cursor/artifact-mapper.d.ts +81 -0
- package/dist/src/cursor/artifact-mapper.d.ts.map +1 -0
- package/dist/src/cursor/artifact-mapper.js +203 -0
- package/dist/src/cursor/artifact-mapper.js.map +1 -0
- package/dist/src/cursor/delivery-gate.d.ts +144 -0
- package/dist/src/cursor/delivery-gate.d.ts.map +1 -0
- package/dist/src/cursor/delivery-gate.js +208 -0
- package/dist/src/cursor/delivery-gate.js.map +1 -0
- package/dist/src/cursor/glob-matcher.d.ts +30 -0
- package/dist/src/cursor/glob-matcher.d.ts.map +1 -0
- package/dist/src/cursor/glob-matcher.js +68 -0
- package/dist/src/cursor/glob-matcher.js.map +1 -0
- package/dist/src/cursor/index.d.ts +43 -0
- package/dist/src/cursor/index.d.ts.map +1 -0
- package/dist/src/cursor/index.js +44 -0
- package/dist/src/cursor/index.js.map +1 -0
- package/dist/src/cursor/ocd-evaluator.d.ts +89 -0
- package/dist/src/cursor/ocd-evaluator.d.ts.map +1 -0
- package/dist/src/cursor/ocd-evaluator.js +142 -0
- package/dist/src/cursor/ocd-evaluator.js.map +1 -0
- package/dist/src/cursor/types.d.ts +309 -0
- package/dist/src/cursor/types.d.ts.map +1 -0
- package/dist/src/cursor/types.js +48 -0
- package/dist/src/cursor/types.js.map +1 -0
- package/dist/src/execution/claude/claude-execution-coordinator.d.ts +164 -0
- package/dist/src/execution/claude/claude-execution-coordinator.d.ts.map +1 -0
- package/dist/src/execution/claude/claude-execution-coordinator.js +198 -0
- package/dist/src/execution/claude/claude-execution-coordinator.js.map +1 -0
- package/dist/src/execution/claude/index.d.ts +13 -0
- package/dist/src/execution/claude/index.d.ts.map +1 -0
- package/dist/src/execution/claude/index.js +12 -0
- package/dist/src/execution/claude/index.js.map +1 -0
- package/dist/src/execution/cursor/cursor-execution-coordinator.d.ts +216 -0
- package/dist/src/execution/cursor/cursor-execution-coordinator.d.ts.map +1 -0
- package/dist/src/execution/cursor/cursor-execution-coordinator.js +233 -0
- package/dist/src/execution/cursor/cursor-execution-coordinator.js.map +1 -0
- package/dist/src/execution/cursor/index.d.ts +20 -0
- package/dist/src/execution/cursor/index.d.ts.map +1 -0
- package/dist/src/execution/cursor/index.js +18 -0
- package/dist/src/execution/cursor/index.js.map +1 -0
- package/dist/src/execution/reminders/index.d.ts +11 -0
- package/dist/src/execution/reminders/index.d.ts.map +1 -0
- package/dist/src/execution/reminders/index.js +9 -0
- package/dist/src/execution/reminders/index.js.map +1 -0
- package/dist/src/execution/reminders/reminder-execution-coordinator.d.ts +125 -0
- package/dist/src/execution/reminders/reminder-execution-coordinator.d.ts.map +1 -0
- package/dist/src/execution/reminders/reminder-execution-coordinator.js +129 -0
- package/dist/src/execution/reminders/reminder-execution-coordinator.js.map +1 -0
- package/dist/src/execution/reminders/reminder-execution-types.d.ts +161 -0
- package/dist/src/execution/reminders/reminder-execution-types.d.ts.map +1 -0
- package/dist/src/execution/reminders/reminder-execution-types.js +39 -0
- package/dist/src/execution/reminders/reminder-execution-types.js.map +1 -0
- package/dist/src/execution/reminders/reminder-execution-validator.d.ts +45 -0
- package/dist/src/execution/reminders/reminder-execution-validator.d.ts.map +1 -0
- package/dist/src/execution/reminders/reminder-execution-validator.js +92 -0
- package/dist/src/execution/reminders/reminder-execution-validator.js.map +1 -0
- package/dist/src/execution/reminders/reminder-executor.d.ts +62 -0
- package/dist/src/execution/reminders/reminder-executor.d.ts.map +1 -0
- package/dist/src/execution/reminders/reminder-executor.js +113 -0
- package/dist/src/execution/reminders/reminder-executor.js.map +1 -0
- package/dist/src/execution/reminders/reminder-time-parser.d.ts +41 -0
- package/dist/src/execution/reminders/reminder-time-parser.d.ts.map +1 -0
- package/dist/src/execution/reminders/reminder-time-parser.js +113 -0
- package/dist/src/execution/reminders/reminder-time-parser.js.map +1 -0
- package/dist/src/friction/auto-capture.d.ts +38 -0
- package/dist/src/friction/auto-capture.d.ts.map +1 -0
- package/dist/src/friction/auto-capture.js +133 -0
- package/dist/src/friction/auto-capture.js.map +1 -0
- package/dist/src/friction/client.d.ts +39 -0
- package/dist/src/friction/client.d.ts.map +1 -0
- package/dist/src/friction/client.js +165 -0
- package/dist/src/friction/client.js.map +1 -0
- package/dist/src/friction/config.d.ts +16 -0
- package/dist/src/friction/config.d.ts.map +1 -0
- package/dist/src/friction/config.js +56 -0
- package/dist/src/friction/config.js.map +1 -0
- package/dist/src/friction/github-auth.d.ts +41 -0
- package/dist/src/friction/github-auth.d.ts.map +1 -0
- package/dist/src/friction/github-auth.js +155 -0
- package/dist/src/friction/github-auth.js.map +1 -0
- package/dist/src/friction/github-issues.d.ts +51 -0
- package/dist/src/friction/github-issues.d.ts.map +1 -0
- package/dist/src/friction/github-issues.js +118 -0
- package/dist/src/friction/github-issues.js.map +1 -0
- package/dist/src/friction/payout-ledger.d.ts +45 -0
- package/dist/src/friction/payout-ledger.d.ts.map +1 -0
- package/dist/src/friction/payout-ledger.js +111 -0
- package/dist/src/friction/payout-ledger.js.map +1 -0
- package/dist/src/friction/queue.d.ts +42 -0
- package/dist/src/friction/queue.d.ts.map +1 -0
- package/dist/src/friction/queue.js +179 -0
- package/dist/src/friction/queue.js.map +1 -0
- package/dist/src/friction/reviewer.d.ts +42 -0
- package/dist/src/friction/reviewer.d.ts.map +1 -0
- package/dist/src/friction/reviewer.js +269 -0
- package/dist/src/friction/reviewer.js.map +1 -0
- package/dist/src/friction/types.d.ts +63 -0
- package/dist/src/friction/types.d.ts.map +1 -0
- package/dist/src/friction/types.js +18 -0
- package/dist/src/friction/types.js.map +1 -0
- package/dist/src/history/index.d.ts +39 -0
- package/dist/src/history/index.d.ts.map +1 -0
- package/dist/src/history/index.js +41 -0
- package/dist/src/history/index.js.map +1 -0
- package/dist/src/history/session-chain.d.ts +36 -0
- package/dist/src/history/session-chain.d.ts.map +1 -0
- package/dist/src/history/session-chain.js +91 -0
- package/dist/src/history/session-chain.js.map +1 -0
- package/dist/src/history/types.d.ts +130 -0
- package/dist/src/history/types.d.ts.map +1 -0
- package/dist/src/history/types.js +32 -0
- package/dist/src/history/types.js.map +1 -0
- package/dist/src/history/workflow-history.d.ts +48 -0
- package/dist/src/history/workflow-history.d.ts.map +1 -0
- package/dist/src/history/workflow-history.js +116 -0
- package/dist/src/history/workflow-history.js.map +1 -0
- package/dist/src/index.d.ts +88 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +58 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/intake/classify-intent-state.d.ts +20 -0
- package/dist/src/intake/classify-intent-state.d.ts.map +1 -0
- package/dist/src/intake/classify-intent-state.js +29 -0
- package/dist/src/intake/classify-intent-state.js.map +1 -0
- package/dist/src/intake/intake-service.d.ts +105 -0
- package/dist/src/intake/intake-service.d.ts.map +1 -0
- package/dist/src/intake/intake-service.js +407 -0
- package/dist/src/intake/intake-service.js.map +1 -0
- package/dist/src/intake/response-planner.d.ts +25 -0
- package/dist/src/intake/response-planner.d.ts.map +1 -0
- package/dist/src/intake/response-planner.js +52 -0
- package/dist/src/intake/response-planner.js.map +1 -0
- package/dist/src/intake/signal-extractor.d.ts +25 -0
- package/dist/src/intake/signal-extractor.d.ts.map +1 -0
- package/dist/src/intake/signal-extractor.js +42 -0
- package/dist/src/intake/signal-extractor.js.map +1 -0
- package/dist/src/intake/trace.d.ts +157 -0
- package/dist/src/intake/trace.d.ts.map +1 -0
- package/dist/src/intake/trace.js +38 -0
- package/dist/src/intake/trace.js.map +1 -0
- package/dist/src/intake/types.d.ts +70 -0
- package/dist/src/intake/types.d.ts.map +1 -0
- package/dist/src/intake/types.js +30 -0
- package/dist/src/intake/types.js.map +1 -0
- package/dist/src/interaction/defaults.d.ts +12 -0
- package/dist/src/interaction/defaults.d.ts.map +1 -0
- package/dist/src/interaction/defaults.js +26 -0
- package/dist/src/interaction/defaults.js.map +1 -0
- package/dist/src/interaction/guidance-order.d.ts +53 -0
- package/dist/src/interaction/guidance-order.d.ts.map +1 -0
- package/dist/src/interaction/guidance-order.js +131 -0
- package/dist/src/interaction/guidance-order.js.map +1 -0
- package/dist/src/interaction/observe.d.ts +57 -0
- package/dist/src/interaction/observe.d.ts.map +1 -0
- package/dist/src/interaction/observe.js +77 -0
- package/dist/src/interaction/observe.js.map +1 -0
- package/dist/src/interaction/selectors.d.ts +16 -0
- package/dist/src/interaction/selectors.d.ts.map +1 -0
- package/dist/src/interaction/selectors.js +23 -0
- package/dist/src/interaction/selectors.js.map +1 -0
- package/dist/src/interaction/types.d.ts +105 -0
- package/dist/src/interaction/types.d.ts.map +1 -0
- package/dist/src/interaction/types.js +48 -0
- package/dist/src/interaction/types.js.map +1 -0
- package/dist/src/interaction/updater.d.ts +22 -0
- package/dist/src/interaction/updater.d.ts.map +1 -0
- package/dist/src/interaction/updater.js +87 -0
- package/dist/src/interaction/updater.js.map +1 -0
- package/dist/src/present/boundary-explanation/boundary-explanation-detector.d.ts +48 -0
- package/dist/src/present/boundary-explanation/boundary-explanation-detector.d.ts.map +1 -0
- package/dist/src/present/boundary-explanation/boundary-explanation-detector.js +107 -0
- package/dist/src/present/boundary-explanation/boundary-explanation-detector.js.map +1 -0
- package/dist/src/present/boundary-explanation/boundary-explanation-types.d.ts +43 -0
- package/dist/src/present/boundary-explanation/boundary-explanation-types.d.ts.map +1 -0
- package/dist/src/present/boundary-explanation/boundary-explanation-types.js +20 -0
- package/dist/src/present/boundary-explanation/boundary-explanation-types.js.map +1 -0
- package/dist/src/present/boundary-explanation/index.d.ts +10 -0
- package/dist/src/present/boundary-explanation/index.d.ts.map +1 -0
- package/dist/src/present/boundary-explanation/index.js +2 -0
- package/dist/src/present/boundary-explanation/index.js.map +1 -0
- package/dist/src/present/control-visibility/control-visibility-assertions.d.ts +70 -0
- package/dist/src/present/control-visibility/control-visibility-assertions.d.ts.map +1 -0
- package/dist/src/present/control-visibility/control-visibility-assertions.js +138 -0
- package/dist/src/present/control-visibility/control-visibility-assertions.js.map +1 -0
- package/dist/src/present/control-visibility/control-visibility-evaluator.d.ts +67 -0
- package/dist/src/present/control-visibility/control-visibility-evaluator.d.ts.map +1 -0
- package/dist/src/present/control-visibility/control-visibility-evaluator.js +146 -0
- package/dist/src/present/control-visibility/control-visibility-evaluator.js.map +1 -0
- package/dist/src/present/control-visibility/control-visibility-types.d.ts +113 -0
- package/dist/src/present/control-visibility/control-visibility-types.d.ts.map +1 -0
- package/dist/src/present/control-visibility/control-visibility-types.js +24 -0
- package/dist/src/present/control-visibility/control-visibility-types.js.map +1 -0
- package/dist/src/present/control-visibility/index.d.ts +16 -0
- package/dist/src/present/control-visibility/index.d.ts.map +1 -0
- package/dist/src/present/control-visibility/index.js +15 -0
- package/dist/src/present/control-visibility/index.js.map +1 -0
- package/dist/src/present/format.d.ts +57 -0
- package/dist/src/present/format.d.ts.map +1 -0
- package/dist/src/present/format.js +150 -0
- package/dist/src/present/format.js.map +1 -0
- package/dist/src/present/present-coordinator.d.ts +153 -0
- package/dist/src/present/present-coordinator.d.ts.map +1 -0
- package/dist/src/present/present-coordinator.js +213 -0
- package/dist/src/present/present-coordinator.js.map +1 -0
- package/dist/src/present/reminders/index.d.ts +22 -0
- package/dist/src/present/reminders/index.d.ts.map +1 -0
- package/dist/src/present/reminders/index.js +22 -0
- package/dist/src/present/reminders/index.js.map +1 -0
- package/dist/src/present/reminders/reminder-presenter.d.ts +76 -0
- package/dist/src/present/reminders/reminder-presenter.d.ts.map +1 -0
- package/dist/src/present/reminders/reminder-presenter.js +359 -0
- package/dist/src/present/reminders/reminder-presenter.js.map +1 -0
- package/dist/src/present/reminders/reminder-renderer.d.ts +82 -0
- package/dist/src/present/reminders/reminder-renderer.d.ts.map +1 -0
- package/dist/src/present/reminders/reminder-renderer.js +136 -0
- package/dist/src/present/reminders/reminder-renderer.js.map +1 -0
- package/dist/src/present/reminders/reminder-types.d.ts +131 -0
- package/dist/src/present/reminders/reminder-types.d.ts.map +1 -0
- package/dist/src/present/reminders/reminder-types.js +29 -0
- package/dist/src/present/reminders/reminder-types.js.map +1 -0
- package/dist/src/present/types.d.ts +114 -0
- package/dist/src/present/types.d.ts.map +1 -0
- package/dist/src/present/types.js +18 -0
- package/dist/src/present/types.js.map +1 -0
- package/dist/src/product/claude-product-session.d.ts +146 -0
- package/dist/src/product/claude-product-session.d.ts.map +1 -0
- package/dist/src/product/claude-product-session.js +362 -0
- package/dist/src/product/claude-product-session.js.map +1 -0
- package/dist/src/product/cursor-product-session.d.ts +211 -0
- package/dist/src/product/cursor-product-session.d.ts.map +1 -0
- package/dist/src/product/cursor-product-session.js +390 -0
- package/dist/src/product/cursor-product-session.js.map +1 -0
- package/dist/src/product/index.d.ts +28 -0
- package/dist/src/product/index.d.ts.map +1 -0
- package/dist/src/product/index.js +22 -0
- package/dist/src/product/index.js.map +1 -0
- package/dist/src/product/session-resilience/index.d.ts +17 -0
- package/dist/src/product/session-resilience/index.d.ts.map +1 -0
- package/dist/src/product/session-resilience/index.js +15 -0
- package/dist/src/product/session-resilience/index.js.map +1 -0
- package/dist/src/product/session-resilience/session-serializer.d.ts +43 -0
- package/dist/src/product/session-resilience/session-serializer.d.ts.map +1 -0
- package/dist/src/product/session-resilience/session-serializer.js +84 -0
- package/dist/src/product/session-resilience/session-serializer.js.map +1 -0
- package/dist/src/product/session-resilience/session-snapshot-types.d.ts +35 -0
- package/dist/src/product/session-resilience/session-snapshot-types.d.ts.map +1 -0
- package/dist/src/product/session-resilience/session-snapshot-types.js +21 -0
- package/dist/src/product/session-resilience/session-snapshot-types.js.map +1 -0
- package/dist/src/product/session-resilience/session-staleness.d.ts +54 -0
- package/dist/src/product/session-resilience/session-staleness.d.ts.map +1 -0
- package/dist/src/product/session-resilience/session-staleness.js +62 -0
- package/dist/src/product/session-resilience/session-staleness.js.map +1 -0
- package/dist/src/product/session-resilience/session-summary.d.ts +40 -0
- package/dist/src/product/session-resilience/session-summary.d.ts.map +1 -0
- package/dist/src/product/session-resilience/session-summary.js +72 -0
- package/dist/src/product/session-resilience/session-summary.js.map +1 -0
- package/dist/src/prv/patterns.d.ts +32 -0
- package/dist/src/prv/patterns.d.ts.map +1 -0
- package/dist/src/prv/patterns.js +40 -0
- package/dist/src/prv/patterns.js.map +1 -0
- package/dist/src/prv/prv.d.ts +13 -0
- package/dist/src/prv/prv.d.ts.map +1 -0
- package/dist/src/prv/prv.js +22 -0
- package/dist/src/prv/prv.js.map +1 -0
- package/dist/src/prv/types.d.ts +26 -0
- package/dist/src/prv/types.d.ts.map +1 -0
- package/dist/src/prv/types.js +15 -0
- package/dist/src/prv/types.js.map +1 -0
- package/dist/src/safety/detectors/arbitrary-exec.detector.d.ts +3 -0
- package/dist/src/safety/detectors/arbitrary-exec.detector.d.ts.map +1 -0
- package/dist/src/safety/detectors/arbitrary-exec.detector.js +31 -0
- package/dist/src/safety/detectors/arbitrary-exec.detector.js.map +1 -0
- package/dist/src/safety/detectors/bulk-data-exfil.detector.d.ts +21 -0
- package/dist/src/safety/detectors/bulk-data-exfil.detector.d.ts.map +1 -0
- package/dist/src/safety/detectors/bulk-data-exfil.detector.js +90 -0
- package/dist/src/safety/detectors/bulk-data-exfil.detector.js.map +1 -0
- package/dist/src/safety/detectors/destructive.detector.d.ts +3 -0
- package/dist/src/safety/detectors/destructive.detector.d.ts.map +1 -0
- package/dist/src/safety/detectors/destructive.detector.js +28 -0
- package/dist/src/safety/detectors/destructive.detector.js.map +1 -0
- package/dist/src/safety/detectors/evasion.detector.d.ts +3 -0
- package/dist/src/safety/detectors/evasion.detector.d.ts.map +1 -0
- package/dist/src/safety/detectors/evasion.detector.js +28 -0
- package/dist/src/safety/detectors/evasion.detector.js.map +1 -0
- package/dist/src/safety/detectors/secret-access.detector.d.ts +31 -0
- package/dist/src/safety/detectors/secret-access.detector.d.ts.map +1 -0
- package/dist/src/safety/detectors/secret-access.detector.js +78 -0
- package/dist/src/safety/detectors/secret-access.detector.js.map +1 -0
- package/dist/src/safety/registry.d.ts +9 -0
- package/dist/src/safety/registry.d.ts.map +1 -0
- package/dist/src/safety/registry.js +22 -0
- package/dist/src/safety/registry.js.map +1 -0
- package/dist/src/safety/safety-gate.d.ts +16 -0
- package/dist/src/safety/safety-gate.d.ts.map +1 -0
- package/dist/src/safety/safety-gate.js +26 -0
- package/dist/src/safety/safety-gate.js.map +1 -0
- package/dist/src/safety/types.d.ts +35 -0
- package/dist/src/safety/types.d.ts.map +1 -0
- package/dist/src/safety/types.js +14 -0
- package/dist/src/safety/types.js.map +1 -0
- package/dist/src/shell/claude-shell.d.ts +63 -0
- package/dist/src/shell/claude-shell.d.ts.map +1 -0
- package/dist/src/shell/claude-shell.js +81 -0
- package/dist/src/shell/claude-shell.js.map +1 -0
- package/dist/src/shell/cli/friction-admin.d.ts +14 -0
- package/dist/src/shell/cli/friction-admin.d.ts.map +1 -0
- package/dist/src/shell/cli/friction-admin.js +276 -0
- package/dist/src/shell/cli/friction-admin.js.map +1 -0
- package/dist/src/shell/cli/friction-report.d.ts +16 -0
- package/dist/src/shell/cli/friction-report.d.ts.map +1 -0
- package/dist/src/shell/cli/friction-report.js +156 -0
- package/dist/src/shell/cli/friction-report.js.map +1 -0
- package/dist/src/shell/cli/main.d.ts +68 -0
- package/dist/src/shell/cli/main.d.ts.map +1 -0
- package/dist/src/shell/cli/main.js +488 -0
- package/dist/src/shell/cli/main.js.map +1 -0
- package/dist/src/shell/cli/use-steady.d.ts +26 -0
- package/dist/src/shell/cli/use-steady.d.ts.map +1 -0
- package/dist/src/shell/cli/use-steady.js +117 -0
- package/dist/src/shell/cli/use-steady.js.map +1 -0
- package/dist/src/shell/cursor-shell.d.ts +63 -0
- package/dist/src/shell/cursor-shell.d.ts.map +1 -0
- package/dist/src/shell/cursor-shell.js +88 -0
- package/dist/src/shell/cursor-shell.js.map +1 -0
- package/dist/src/shell/defaults.d.ts +51 -0
- package/dist/src/shell/defaults.d.ts.map +1 -0
- package/dist/src/shell/defaults.js +78 -0
- package/dist/src/shell/defaults.js.map +1 -0
- package/dist/src/shell/history-render.d.ts +56 -0
- package/dist/src/shell/history-render.d.ts.map +1 -0
- package/dist/src/shell/history-render.js +166 -0
- package/dist/src/shell/history-render.js.map +1 -0
- package/dist/src/shell/index.d.ts +43 -0
- package/dist/src/shell/index.d.ts.map +1 -0
- package/dist/src/shell/index.js +45 -0
- package/dist/src/shell/index.js.map +1 -0
- package/dist/src/shell/render.d.ts +42 -0
- package/dist/src/shell/render.d.ts.map +1 -0
- package/dist/src/shell/render.js +122 -0
- package/dist/src/shell/render.js.map +1 -0
- package/dist/src/shell/types.d.ts +46 -0
- package/dist/src/shell/types.d.ts.map +1 -0
- package/dist/src/shell/types.js +19 -0
- package/dist/src/shell/types.js.map +1 -0
- package/dist/src/shell/workflow-defaults.d.ts +23 -0
- package/dist/src/shell/workflow-defaults.d.ts.map +1 -0
- package/dist/src/shell/workflow-defaults.js +27 -0
- package/dist/src/shell/workflow-defaults.js.map +1 -0
- package/dist/src/shell/workflow-render.d.ts +54 -0
- package/dist/src/shell/workflow-render.d.ts.map +1 -0
- package/dist/src/shell/workflow-render.js +319 -0
- package/dist/src/shell/workflow-render.js.map +1 -0
- package/dist/src/shell/workflow-shell.d.ts +110 -0
- package/dist/src/shell/workflow-shell.d.ts.map +1 -0
- package/dist/src/shell/workflow-shell.js +180 -0
- package/dist/src/shell/workflow-shell.js.map +1 -0
- package/dist/src/skills/audit.d.ts +118 -0
- package/dist/src/skills/audit.d.ts.map +1 -0
- package/dist/src/skills/audit.js +147 -0
- package/dist/src/skills/audit.js.map +1 -0
- package/dist/src/skills/invocation.d.ts +131 -0
- package/dist/src/skills/invocation.d.ts.map +1 -0
- package/dist/src/skills/invocation.js +165 -0
- package/dist/src/skills/invocation.js.map +1 -0
- package/dist/src/skills/loader.d.ts +70 -0
- package/dist/src/skills/loader.d.ts.map +1 -0
- package/dist/src/skills/loader.js +220 -0
- package/dist/src/skills/loader.js.map +1 -0
- package/dist/src/skills/local-recovery-adapter.d.ts +49 -0
- package/dist/src/skills/local-recovery-adapter.d.ts.map +1 -0
- package/dist/src/skills/local-recovery-adapter.js +184 -0
- package/dist/src/skills/local-recovery-adapter.js.map +1 -0
- package/dist/src/skills/parser.d.ts +53 -0
- package/dist/src/skills/parser.d.ts.map +1 -0
- package/dist/src/skills/parser.js +336 -0
- package/dist/src/skills/parser.js.map +1 -0
- package/dist/src/skills/registry.d.ts +123 -0
- package/dist/src/skills/registry.d.ts.map +1 -0
- package/dist/src/skills/registry.js +144 -0
- package/dist/src/skills/registry.js.map +1 -0
- package/dist/src/skills/types.d.ts +242 -0
- package/dist/src/skills/types.d.ts.map +1 -0
- package/dist/src/skills/types.js +50 -0
- package/dist/src/skills/types.js.map +1 -0
- package/dist/src/skills/validator.d.ts +31 -0
- package/dist/src/skills/validator.d.ts.map +1 -0
- package/dist/src/skills/validator.js +366 -0
- package/dist/src/skills/validator.js.map +1 -0
- package/dist/src/ucp/envelope.d.ts +165 -0
- package/dist/src/ucp/envelope.d.ts.map +1 -0
- package/dist/src/ucp/envelope.js +241 -0
- package/dist/src/ucp/envelope.js.map +1 -0
- package/dist/src/ucp/hashes.d.ts +36 -0
- package/dist/src/ucp/hashes.d.ts.map +1 -0
- package/dist/src/ucp/hashes.js +59 -0
- package/dist/src/ucp/hashes.js.map +1 -0
- package/dist/src/ucp/mappers/map-artifact.d.ts +58 -0
- package/dist/src/ucp/mappers/map-artifact.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-artifact.js +51 -0
- package/dist/src/ucp/mappers/map-artifact.js.map +1 -0
- package/dist/src/ucp/mappers/map-change-interpretation.d.ts +12 -0
- package/dist/src/ucp/mappers/map-change-interpretation.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-change-interpretation.js +18 -0
- package/dist/src/ucp/mappers/map-change-interpretation.js.map +1 -0
- package/dist/src/ucp/mappers/map-completion.d.ts +10 -0
- package/dist/src/ucp/mappers/map-completion.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-completion.js +24 -0
- package/dist/src/ucp/mappers/map-completion.js.map +1 -0
- package/dist/src/ucp/mappers/map-context.d.ts +9 -0
- package/dist/src/ucp/mappers/map-context.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-context.js +13 -0
- package/dist/src/ucp/mappers/map-context.js.map +1 -0
- package/dist/src/ucp/mappers/map-debug-trace.d.ts +10 -0
- package/dist/src/ucp/mappers/map-debug-trace.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-debug-trace.js +18 -0
- package/dist/src/ucp/mappers/map-debug-trace.js.map +1 -0
- package/dist/src/ucp/mappers/map-disambiguation.d.ts +10 -0
- package/dist/src/ucp/mappers/map-disambiguation.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-disambiguation.js +21 -0
- package/dist/src/ucp/mappers/map-disambiguation.js.map +1 -0
- package/dist/src/ucp/mappers/map-execution-trace.d.ts +64 -0
- package/dist/src/ucp/mappers/map-execution-trace.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-execution-trace.js +57 -0
- package/dist/src/ucp/mappers/map-execution-trace.js.map +1 -0
- package/dist/src/ucp/mappers/map-intent-interpretation.d.ts +11 -0
- package/dist/src/ucp/mappers/map-intent-interpretation.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-intent-interpretation.js +17 -0
- package/dist/src/ucp/mappers/map-intent-interpretation.js.map +1 -0
- package/dist/src/ucp/mappers/map-intent.d.ts +9 -0
- package/dist/src/ucp/mappers/map-intent.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-intent.js +11 -0
- package/dist/src/ucp/mappers/map-intent.js.map +1 -0
- package/dist/src/ucp/mappers/map-prv.d.ts +10 -0
- package/dist/src/ucp/mappers/map-prv.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-prv.js +14 -0
- package/dist/src/ucp/mappers/map-prv.js.map +1 -0
- package/dist/src/ucp/mappers/map-reminder-execution.d.ts +57 -0
- package/dist/src/ucp/mappers/map-reminder-execution.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-reminder-execution.js +69 -0
- package/dist/src/ucp/mappers/map-reminder-execution.js.map +1 -0
- package/dist/src/ucp/mappers/map-replay-report.d.ts +81 -0
- package/dist/src/ucp/mappers/map-replay-report.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-replay-report.js +76 -0
- package/dist/src/ucp/mappers/map-replay-report.js.map +1 -0
- package/dist/src/ucp/mappers/map-response.d.ts +13 -0
- package/dist/src/ucp/mappers/map-response.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-response.js +25 -0
- package/dist/src/ucp/mappers/map-response.js.map +1 -0
- package/dist/src/ucp/mappers/map-safety.d.ts +14 -0
- package/dist/src/ucp/mappers/map-safety.d.ts.map +1 -0
- package/dist/src/ucp/mappers/map-safety.js +22 -0
- package/dist/src/ucp/mappers/map-safety.js.map +1 -0
- package/dist/src/ucp/persistence/index.d.ts +24 -0
- package/dist/src/ucp/persistence/index.d.ts.map +1 -0
- package/dist/src/ucp/persistence/index.js +22 -0
- package/dist/src/ucp/persistence/index.js.map +1 -0
- package/dist/src/ucp/persistence/query.d.ts +164 -0
- package/dist/src/ucp/persistence/query.d.ts.map +1 -0
- package/dist/src/ucp/persistence/query.js +240 -0
- package/dist/src/ucp/persistence/query.js.map +1 -0
- package/dist/src/ucp/persistence/reader.d.ts +43 -0
- package/dist/src/ucp/persistence/reader.d.ts.map +1 -0
- package/dist/src/ucp/persistence/reader.js +104 -0
- package/dist/src/ucp/persistence/reader.js.map +1 -0
- package/dist/src/ucp/persistence/store.d.ts +77 -0
- package/dist/src/ucp/persistence/store.d.ts.map +1 -0
- package/dist/src/ucp/persistence/store.js +177 -0
- package/dist/src/ucp/persistence/store.js.map +1 -0
- package/dist/src/ucp/persistence/write.d.ts +48 -0
- package/dist/src/ucp/persistence/write.d.ts.map +1 -0
- package/dist/src/ucp/persistence/write.js +59 -0
- package/dist/src/ucp/persistence/write.js.map +1 -0
- package/dist/src/ucp/projection.d.ts +146 -0
- package/dist/src/ucp/projection.d.ts.map +1 -0
- package/dist/src/ucp/projection.js +139 -0
- package/dist/src/ucp/projection.js.map +1 -0
- package/dist/src/ucp/types.d.ts +585 -0
- package/dist/src/ucp/types.d.ts.map +1 -0
- package/dist/src/ucp/types.js +57 -0
- package/dist/src/ucp/types.js.map +1 -0
- package/dist/src/understand/completion/completion.d.ts +26 -0
- package/dist/src/understand/completion/completion.d.ts.map +1 -0
- package/dist/src/understand/completion/completion.js +45 -0
- package/dist/src/understand/completion/completion.js.map +1 -0
- package/dist/src/understand/completion/rules.d.ts +61 -0
- package/dist/src/understand/completion/rules.d.ts.map +1 -0
- package/dist/src/understand/completion/rules.js +268 -0
- package/dist/src/understand/completion/rules.js.map +1 -0
- package/dist/src/understand/completion/types.d.ts +68 -0
- package/dist/src/understand/completion/types.d.ts.map +1 -0
- package/dist/src/understand/completion/types.js +34 -0
- package/dist/src/understand/completion/types.js.map +1 -0
- package/dist/src/understand/context/context-alignment.d.ts +18 -0
- package/dist/src/understand/context/context-alignment.d.ts.map +1 -0
- package/dist/src/understand/context/context-alignment.js +61 -0
- package/dist/src/understand/context/context-alignment.js.map +1 -0
- package/dist/src/understand/context/types.d.ts +20 -0
- package/dist/src/understand/context/types.d.ts.map +1 -0
- package/dist/src/understand/context/types.js +13 -0
- package/dist/src/understand/context/types.js.map +1 -0
- package/dist/src/understand/disambiguation/detectors/missing-context.detector.d.ts +12 -0
- package/dist/src/understand/disambiguation/detectors/missing-context.detector.d.ts.map +1 -0
- package/dist/src/understand/disambiguation/detectors/missing-context.detector.js +60 -0
- package/dist/src/understand/disambiguation/detectors/missing-context.detector.js.map +1 -0
- package/dist/src/understand/disambiguation/detectors/overloaded-term.detector.d.ts +13 -0
- package/dist/src/understand/disambiguation/detectors/overloaded-term.detector.d.ts.map +1 -0
- package/dist/src/understand/disambiguation/detectors/overloaded-term.detector.js +57 -0
- package/dist/src/understand/disambiguation/detectors/overloaded-term.detector.js.map +1 -0
- package/dist/src/understand/disambiguation/detectors/typo-adjacent.detector.d.ts +16 -0
- package/dist/src/understand/disambiguation/detectors/typo-adjacent.detector.d.ts.map +1 -0
- package/dist/src/understand/disambiguation/detectors/typo-adjacent.detector.js +56 -0
- package/dist/src/understand/disambiguation/detectors/typo-adjacent.detector.js.map +1 -0
- package/dist/src/understand/disambiguation/registry.d.ts +14 -0
- package/dist/src/understand/disambiguation/registry.d.ts.map +1 -0
- package/dist/src/understand/disambiguation/registry.js +27 -0
- package/dist/src/understand/disambiguation/registry.js.map +1 -0
- package/dist/src/understand/disambiguation/types.d.ts +34 -0
- package/dist/src/understand/disambiguation/types.d.ts.map +1 -0
- package/dist/src/understand/disambiguation/types.js +15 -0
- package/dist/src/understand/disambiguation/types.js.map +1 -0
- package/dist/src/understand/intent-interpretation/intent-interpretation.d.ts +86 -0
- package/dist/src/understand/intent-interpretation/intent-interpretation.d.ts.map +1 -0
- package/dist/src/understand/intent-interpretation/intent-interpretation.js +141 -0
- package/dist/src/understand/intent-interpretation/intent-interpretation.js.map +1 -0
- package/dist/src/understand/intent-interpretation/interpreters/color-intent.interpreter.d.ts +33 -0
- package/dist/src/understand/intent-interpretation/interpreters/color-intent.interpreter.d.ts.map +1 -0
- package/dist/src/understand/intent-interpretation/interpreters/color-intent.interpreter.js +66 -0
- package/dist/src/understand/intent-interpretation/interpreters/color-intent.interpreter.js.map +1 -0
- package/dist/src/understand/intent-interpretation/interpreters/config-intent.interpreter.d.ts +20 -0
- package/dist/src/understand/intent-interpretation/interpreters/config-intent.interpreter.d.ts.map +1 -0
- package/dist/src/understand/intent-interpretation/interpreters/config-intent.interpreter.js +80 -0
- package/dist/src/understand/intent-interpretation/interpreters/config-intent.interpreter.js.map +1 -0
- package/dist/src/understand/intent-interpretation/interpreters/text-intent.interpreter.d.ts +25 -0
- package/dist/src/understand/intent-interpretation/interpreters/text-intent.interpreter.d.ts.map +1 -0
- package/dist/src/understand/intent-interpretation/interpreters/text-intent.interpreter.js +47 -0
- package/dist/src/understand/intent-interpretation/interpreters/text-intent.interpreter.js.map +1 -0
- package/dist/src/understand/intent-interpretation/interpreters/workflow-intent.interpreter.d.ts +35 -0
- package/dist/src/understand/intent-interpretation/interpreters/workflow-intent.interpreter.d.ts.map +1 -0
- package/dist/src/understand/intent-interpretation/interpreters/workflow-intent.interpreter.js +89 -0
- package/dist/src/understand/intent-interpretation/interpreters/workflow-intent.interpreter.js.map +1 -0
- package/dist/src/understand/intent-interpretation/registry.d.ts +18 -0
- package/dist/src/understand/intent-interpretation/registry.d.ts.map +1 -0
- package/dist/src/understand/intent-interpretation/registry.js +26 -0
- package/dist/src/understand/intent-interpretation/registry.js.map +1 -0
- package/dist/src/understand/intent-interpretation/types.d.ts +83 -0
- package/dist/src/understand/intent-interpretation/types.d.ts.map +1 -0
- package/dist/src/understand/intent-interpretation/types.js +40 -0
- package/dist/src/understand/intent-interpretation/types.js.map +1 -0
- package/dist/src/understand/interpretation/intent.d.ts +72 -0
- package/dist/src/understand/interpretation/intent.d.ts.map +1 -0
- package/dist/src/understand/interpretation/intent.js +414 -0
- package/dist/src/understand/interpretation/intent.js.map +1 -0
- package/dist/src/understand/interpretation/interpretation.d.ts +26 -0
- package/dist/src/understand/interpretation/interpretation.d.ts.map +1 -0
- package/dist/src/understand/interpretation/interpretation.js +43 -0
- package/dist/src/understand/interpretation/interpretation.js.map +1 -0
- package/dist/src/understand/interpretation/parser.d.ts +20 -0
- package/dist/src/understand/interpretation/parser.d.ts.map +1 -0
- package/dist/src/understand/interpretation/parser.js +88 -0
- package/dist/src/understand/interpretation/parser.js.map +1 -0
- package/dist/src/understand/interpretation/rules.d.ts +19 -0
- package/dist/src/understand/interpretation/rules.d.ts.map +1 -0
- package/dist/src/understand/interpretation/rules.js +222 -0
- package/dist/src/understand/interpretation/rules.js.map +1 -0
- package/dist/src/understand/interpretation/types.d.ts +90 -0
- package/dist/src/understand/interpretation/types.d.ts.map +1 -0
- package/dist/src/understand/interpretation/types.js +29 -0
- package/dist/src/understand/interpretation/types.js.map +1 -0
- package/dist/src/understand/shared/types.d.ts +13 -0
- package/dist/src/understand/shared/types.d.ts.map +1 -0
- package/dist/src/understand/shared/types.js +9 -0
- package/dist/src/understand/shared/types.js.map +1 -0
- package/dist/src/understand/silent-guidance/index.d.ts +4 -0
- package/dist/src/understand/silent-guidance/index.d.ts.map +1 -0
- package/dist/src/understand/silent-guidance/index.js +3 -0
- package/dist/src/understand/silent-guidance/index.js.map +1 -0
- package/dist/src/understand/silent-guidance/selector.d.ts +44 -0
- package/dist/src/understand/silent-guidance/selector.d.ts.map +1 -0
- package/dist/src/understand/silent-guidance/selector.js +158 -0
- package/dist/src/understand/silent-guidance/selector.js.map +1 -0
- package/dist/src/understand/silent-guidance/templates.d.ts +31 -0
- package/dist/src/understand/silent-guidance/templates.d.ts.map +1 -0
- package/dist/src/understand/silent-guidance/templates.js +109 -0
- package/dist/src/understand/silent-guidance/templates.js.map +1 -0
- package/dist/src/understand/silent-guidance/types.d.ts +36 -0
- package/dist/src/understand/silent-guidance/types.d.ts.map +1 -0
- package/dist/src/understand/silent-guidance/types.js +2 -0
- package/dist/src/understand/silent-guidance/types.js.map +1 -0
- package/dist/src/workflow/coordinator.d.ts +197 -0
- package/dist/src/workflow/coordinator.d.ts.map +1 -0
- package/dist/src/workflow/coordinator.js +682 -0
- package/dist/src/workflow/coordinator.js.map +1 -0
- package/dist/src/workflow/index.d.ts +30 -0
- package/dist/src/workflow/index.d.ts.map +1 -0
- package/dist/src/workflow/index.js +30 -0
- package/dist/src/workflow/index.js.map +1 -0
- package/dist/src/workflow/types.d.ts +213 -0
- package/dist/src/workflow/types.d.ts.map +1 -0
- package/dist/src/workflow/types.js +27 -0
- package/dist/src/workflow/types.js.map +1 -0
- package/package.json +54 -0
- package/ui/README.md +73 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic intent normalizer — P0 natural-language normalization.
|
|
3
|
+
*
|
|
4
|
+
* Combines broad natural-language verb coverage (create, mkdir, scaffold,
|
|
5
|
+
* spin up…) with a looksLikePath() safety gate that blocks ambiguous or
|
|
6
|
+
* nonsense captures before they reach the execution pipeline.
|
|
7
|
+
*
|
|
8
|
+
* Design decisions locked:
|
|
9
|
+
* – No AI / model calls
|
|
10
|
+
* – Class 1: leading polite-prefix stripping (please, can you, could you,
|
|
11
|
+
* i need, i want to) — only the leading softener is removed, never
|
|
12
|
+
* mid-sentence words
|
|
13
|
+
* – Class 2: article/noise tolerance for rename ("the file X") and delete
|
|
14
|
+
* ("the X folder") — surgical patterns, not general NL parsing
|
|
15
|
+
* – Class 3 intentional gap: "make a folder for X" stays null — "for X"
|
|
16
|
+
* is ambiguous (purpose vs. name) and belongs in a clarification card
|
|
17
|
+
* – looksLikePath() gate: all NL-captured names must look like real paths
|
|
18
|
+
* – extractPathFromTail() is intentionally absent from NL matchers;
|
|
19
|
+
* only explicit CLI commands (mkdir, touch, mv, rm) are unguarded
|
|
20
|
+
* – Reversed patterns ("create X folder") use looksLikePath; multi-word
|
|
21
|
+
* captures like "some structure to the" are automatically rejected
|
|
22
|
+
* – Broad delete matching restricted to tokens with extension or separator
|
|
23
|
+
* (bare nouns require an explicit type keyword)
|
|
24
|
+
* – If normalisation fails, caller falls through to strict parser
|
|
25
|
+
* – No change to authority model or execution scope
|
|
26
|
+
*/
|
|
27
|
+
import type { ParsedChange } from "./types.js";
|
|
28
|
+
export type ParsedIntent = {
|
|
29
|
+
readonly kind: "create_dir";
|
|
30
|
+
readonly path: string;
|
|
31
|
+
} | {
|
|
32
|
+
readonly kind: "create_file";
|
|
33
|
+
readonly path: string;
|
|
34
|
+
readonly content?: string;
|
|
35
|
+
} | {
|
|
36
|
+
readonly kind: "rename";
|
|
37
|
+
readonly from: string;
|
|
38
|
+
readonly to: string;
|
|
39
|
+
} | {
|
|
40
|
+
readonly kind: "delete";
|
|
41
|
+
readonly path: string;
|
|
42
|
+
} | {
|
|
43
|
+
readonly kind: "replace";
|
|
44
|
+
readonly find: string;
|
|
45
|
+
readonly replace: string;
|
|
46
|
+
readonly file: string;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Convert a free-form user string into a structured ParsedIntent.
|
|
50
|
+
*
|
|
51
|
+
* Returns null when:
|
|
52
|
+
* - The input is empty or whitespace
|
|
53
|
+
* - The input is ambiguous or vague (no recognised operation + valid path)
|
|
54
|
+
* - A required field (path, from/to, etc.) cannot be determined safely
|
|
55
|
+
*
|
|
56
|
+
* On null the caller falls through to the strict canonical parser.
|
|
57
|
+
*/
|
|
58
|
+
export declare function normalizeIntent(raw: string): ParsedIntent | null;
|
|
59
|
+
/**
|
|
60
|
+
* Convert a ParsedIntent into the canonical ParsedChange used by the execution
|
|
61
|
+
* pipeline (FsChange | ReplaceChange).
|
|
62
|
+
*
|
|
63
|
+
* This is the only bridge between the normalizer and the execution path.
|
|
64
|
+
* No new execution paths are introduced here.
|
|
65
|
+
*/
|
|
66
|
+
export declare function intentToChange(intent: ParsedIntent): ParsedChange;
|
|
67
|
+
/**
|
|
68
|
+
* Human-readable "SYSTEM WILL:" description for a ParsedIntent.
|
|
69
|
+
* Used in the UI approval frame to surface normalised intent to the user.
|
|
70
|
+
*/
|
|
71
|
+
export declare function describeIntent(intent: ParsedIntent): string;
|
|
72
|
+
//# sourceMappingURL=intent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../../../src/understand/interpretation/intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,YAAY,CAAC;AAIxE,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAClF;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAK,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AA+U7G;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAmBhE;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAmCjE;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQ3D"}
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic intent normalizer — P0 natural-language normalization.
|
|
3
|
+
*
|
|
4
|
+
* Combines broad natural-language verb coverage (create, mkdir, scaffold,
|
|
5
|
+
* spin up…) with a looksLikePath() safety gate that blocks ambiguous or
|
|
6
|
+
* nonsense captures before they reach the execution pipeline.
|
|
7
|
+
*
|
|
8
|
+
* Design decisions locked:
|
|
9
|
+
* – No AI / model calls
|
|
10
|
+
* – Class 1: leading polite-prefix stripping (please, can you, could you,
|
|
11
|
+
* i need, i want to) — only the leading softener is removed, never
|
|
12
|
+
* mid-sentence words
|
|
13
|
+
* – Class 2: article/noise tolerance for rename ("the file X") and delete
|
|
14
|
+
* ("the X folder") — surgical patterns, not general NL parsing
|
|
15
|
+
* – Class 3 intentional gap: "make a folder for X" stays null — "for X"
|
|
16
|
+
* is ambiguous (purpose vs. name) and belongs in a clarification card
|
|
17
|
+
* – looksLikePath() gate: all NL-captured names must look like real paths
|
|
18
|
+
* – extractPathFromTail() is intentionally absent from NL matchers;
|
|
19
|
+
* only explicit CLI commands (mkdir, touch, mv, rm) are unguarded
|
|
20
|
+
* – Reversed patterns ("create X folder") use looksLikePath; multi-word
|
|
21
|
+
* captures like "some structure to the" are automatically rejected
|
|
22
|
+
* – Broad delete matching restricted to tokens with extension or separator
|
|
23
|
+
* (bare nouns require an explicit type keyword)
|
|
24
|
+
* – If normalisation fails, caller falls through to strict parser
|
|
25
|
+
* – No change to authority model or execution scope
|
|
26
|
+
*/
|
|
27
|
+
// ─── Path safety gate ─────────────────────────────────────────────────────────
|
|
28
|
+
/**
|
|
29
|
+
* Returns true only when a captured string plausibly looks like a filesystem
|
|
30
|
+
* path. This is the core guard that prevents ambiguous NL prose (e.g.
|
|
31
|
+
* "some structure to the") from being accepted as a directory name.
|
|
32
|
+
*
|
|
33
|
+
* Accepts:
|
|
34
|
+
* clean identifier "test", "components", "MyApp", "my-app"
|
|
35
|
+
* path with slashes "src/utils", "lib/auth/index"
|
|
36
|
+
* name with extension "README.md", "App.tsx", "config.json"
|
|
37
|
+
* dotfile ".gitignore", ".env"
|
|
38
|
+
*
|
|
39
|
+
* Rejects:
|
|
40
|
+
* empty string, strings with spaces, strings that are pure prose
|
|
41
|
+
*/
|
|
42
|
+
function looksLikePath(s) {
|
|
43
|
+
if (!s || s.length === 0)
|
|
44
|
+
return false;
|
|
45
|
+
if (s.includes(" "))
|
|
46
|
+
return false;
|
|
47
|
+
if (/\.[a-zA-Z0-9]{1,10}$/.test(s))
|
|
48
|
+
return true; // has extension
|
|
49
|
+
if (s.includes("/") || s.includes("\\"))
|
|
50
|
+
return true; // path separator
|
|
51
|
+
if (/^[a-zA-Z0-9_\-.]+$/.test(s))
|
|
52
|
+
return true; // clean identifier
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
56
|
+
/** Collapse internal whitespace and trim. */
|
|
57
|
+
function collapseSpaces(s) {
|
|
58
|
+
return s.replace(/\s+/g, " ").trim();
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Class 1 — Strip a single leading polite softener.
|
|
62
|
+
*
|
|
63
|
+
* Only the leading prefix is removed, never words mid-sentence.
|
|
64
|
+
* Supported prefixes: please, can you, could you, i need [to], i want to.
|
|
65
|
+
*
|
|
66
|
+
* Examples:
|
|
67
|
+
* "please create folder utils" → "create folder utils"
|
|
68
|
+
* "can you create a folder called utils" → "create a folder called utils"
|
|
69
|
+
* "i need a folder called auth" → "a folder called auth"
|
|
70
|
+
* "i want to rename old.ts to new.ts" → "rename old.ts to new.ts"
|
|
71
|
+
* "i need to delete src/old.ts" → "delete src/old.ts"
|
|
72
|
+
*/
|
|
73
|
+
const POLITE_PREFIX = /^(?:please\s+|can\s+you\s+|could\s+you\s+|i\s+need\s+(?:to\s+)?|i\s+want\s+to\s+)/i;
|
|
74
|
+
function stripLeadingPrefix(s) {
|
|
75
|
+
return s.replace(POLITE_PREFIX, "").trimStart();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Extract the content of the first quoted segment (double, single, backtick).
|
|
79
|
+
* Allows quoted paths that contain spaces.
|
|
80
|
+
*/
|
|
81
|
+
function extractQuoted(input) {
|
|
82
|
+
const dq = /"([^"]+)"/.exec(input);
|
|
83
|
+
if (dq?.[1])
|
|
84
|
+
return dq[1].trim();
|
|
85
|
+
const sq = /'([^']+)'/.exec(input);
|
|
86
|
+
if (sq?.[1])
|
|
87
|
+
return sq[1].trim();
|
|
88
|
+
const bq = /`([^`]+)`/.exec(input);
|
|
89
|
+
if (bq?.[1])
|
|
90
|
+
return bq[1].trim();
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Clean a raw capture-group value and apply looksLikePath.
|
|
95
|
+
*
|
|
96
|
+
* Order:
|
|
97
|
+
* 1. Try quoted extraction (allows space-containing paths)
|
|
98
|
+
* 2. Strip NL filler prefixes (called/named/as)
|
|
99
|
+
* 3. Apply looksLikePath gate — rejects multi-word prose, pure nouns, etc.
|
|
100
|
+
*/
|
|
101
|
+
function cleanPath(raw) {
|
|
102
|
+
if (!raw)
|
|
103
|
+
return null;
|
|
104
|
+
const trimmed = raw.trim();
|
|
105
|
+
if (!trimmed)
|
|
106
|
+
return null;
|
|
107
|
+
// Quoted paths bypass the looksLikePath check (user explicitly delimited them)
|
|
108
|
+
const quoted = extractQuoted(trimmed);
|
|
109
|
+
if (quoted && quoted.length > 0)
|
|
110
|
+
return quoted;
|
|
111
|
+
// Strip common filler prefixes before validating
|
|
112
|
+
const stripped = trimmed
|
|
113
|
+
.replace(/^(?:called|named|as)\s+/i, "")
|
|
114
|
+
.replace(/[.?!]+$/, "")
|
|
115
|
+
.trim();
|
|
116
|
+
if (!stripped)
|
|
117
|
+
return null;
|
|
118
|
+
return looksLikePath(stripped) ? stripped : null;
|
|
119
|
+
}
|
|
120
|
+
// ─── matchCreateDir ───────────────────────────────────────────────────────────
|
|
121
|
+
// Forward: verb + [a] + dir-keyword + [called/named] + name
|
|
122
|
+
// Covers: "create folder test", "initialize directory src/utils", "scaffold folder components"
|
|
123
|
+
const CREATE_DIR_FORWARD = [
|
|
124
|
+
/^(?:create|make|add|new|init|initialize|scaffold|generate|setup)\s+(?:a\s+)?(?:folder|directory|dir)\s+(?:(?:called|named)\s+)?(?<p>.+)$/i,
|
|
125
|
+
// "a new" adjective form — "called/named" is REQUIRED after the keyword to prevent
|
|
126
|
+
// "initialize a new folder structure" from matching with path="structure"
|
|
127
|
+
/^(?:create|make|add|init|initialize|scaffold|generate|setup)\s+a\s+new\s+(?:folder|directory|dir)\s+(?:called|named)\s+(?<p>.+)$/i,
|
|
128
|
+
// "set up" and "spin up" contain a space — listed separately to avoid regex complexity
|
|
129
|
+
/^(?:set\s+up|spin\s+up)\s+(?:a\s+)?(?:folder|directory|dir)\s+(?:(?:called|named)\s+)?(?<p>.+)$/i,
|
|
130
|
+
// No-verb form — produced by polite-prefix stripping ("i need a folder called auth"
|
|
131
|
+
// → "a folder called auth"). "called/named" is REQUIRED; there is no action verb
|
|
132
|
+
// to act as an anchor so we need the strongest possible discriminator.
|
|
133
|
+
/^a[n]?\s+(?:new\s+)?(?:folder|directory|dir)\s+(?:called|named)\s+(?<p>.+)$/i,
|
|
134
|
+
];
|
|
135
|
+
// Reversed: verb + [a] + name + dir-keyword
|
|
136
|
+
// Covers: "create a test folder", "make a components folder", "add utils directory"
|
|
137
|
+
// Only the most natural-sounding verbs — not "scaffold a foo folder"
|
|
138
|
+
const CREATE_DIR_REVERSED = [
|
|
139
|
+
/^(?:create|make|add)\s+(?:a\s+)?(?<p>.+?)\s+(?:folder|directory|dir)$/i,
|
|
140
|
+
];
|
|
141
|
+
function matchCreateDir(raw) {
|
|
142
|
+
// 1. CLI-native: mkdir <path> (unguarded — user intentionally typed CLI syntax)
|
|
143
|
+
const mkdirM = /^mkdir\s+(?<p>.+)$/i.exec(raw);
|
|
144
|
+
if (mkdirM?.groups?.p) {
|
|
145
|
+
const p = mkdirM.groups.p.trim();
|
|
146
|
+
return p ? { kind: "create_dir", path: p } : null;
|
|
147
|
+
}
|
|
148
|
+
// 2. Forward: verb + keyword + name (cleanPath applies looksLikePath gate)
|
|
149
|
+
for (const pat of CREATE_DIR_FORWARD) {
|
|
150
|
+
const m = pat.exec(raw);
|
|
151
|
+
if (m?.groups?.p) {
|
|
152
|
+
const path = cleanPath(m.groups.p);
|
|
153
|
+
if (path)
|
|
154
|
+
return { kind: "create_dir", path };
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// 3. Reversed: verb + name + keyword
|
|
158
|
+
// Multi-word captures like "some structure to the" fail looksLikePath ✓
|
|
159
|
+
for (const pat of CREATE_DIR_REVERSED) {
|
|
160
|
+
const m = pat.exec(raw);
|
|
161
|
+
if (m?.groups?.p) {
|
|
162
|
+
const path = cleanPath(m.groups.p);
|
|
163
|
+
if (path)
|
|
164
|
+
return { kind: "create_dir", path };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
// ─── matchCreateFile ──────────────────────────────────────────────────────────
|
|
170
|
+
// [a] + [new/empty/blank] adjective slot — "create a new file", "make an empty file called x"
|
|
171
|
+
const CREATE_FILE_FORWARD = [
|
|
172
|
+
/^(?:create|make|add|new|write)\s+(?:a[n]?\s+)?(?:new|empty|blank)?\s*file\s+(?:(?:called|named)\s+)?(?<p>.+)$/i,
|
|
173
|
+
// No-verb form — produced by polite-prefix stripping ("i need a file called X")
|
|
174
|
+
// "called/named" is REQUIRED as the discriminating anchor.
|
|
175
|
+
/^a[n]?\s+(?:new|empty|blank)?\s*file\s+(?:called|named)\s+(?<p>.+)$/i,
|
|
176
|
+
];
|
|
177
|
+
const CREATE_FILE_REVERSED = [
|
|
178
|
+
/^(?:create|make|add)\s+(?:a\s+)?(?<p>.+?)\s+file$/i,
|
|
179
|
+
];
|
|
180
|
+
function matchCreateFile(raw) {
|
|
181
|
+
// 1. CLI-native: touch <path> (unguarded)
|
|
182
|
+
const touchM = /^touch\s+(?<p>.+)$/i.exec(raw);
|
|
183
|
+
if (touchM?.groups?.p) {
|
|
184
|
+
const p = touchM.groups.p.trim();
|
|
185
|
+
return p ? { kind: "create_file", path: p } : null;
|
|
186
|
+
}
|
|
187
|
+
// 2. Forward: verb + "file" + name
|
|
188
|
+
for (const pat of CREATE_FILE_FORWARD) {
|
|
189
|
+
const m = pat.exec(raw);
|
|
190
|
+
if (m?.groups?.p) {
|
|
191
|
+
const path = cleanPath(m.groups.p);
|
|
192
|
+
if (path)
|
|
193
|
+
return { kind: "create_file", path };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// 3. Reversed: verb + name + "file"
|
|
197
|
+
// "create a README.md file" — looksLikePath gate blocks prose captures
|
|
198
|
+
for (const pat of CREATE_FILE_REVERSED) {
|
|
199
|
+
const m = pat.exec(raw);
|
|
200
|
+
if (m?.groups?.p) {
|
|
201
|
+
const path = cleanPath(m.groups.p);
|
|
202
|
+
if (path)
|
|
203
|
+
return { kind: "create_file", path };
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
// ─── matchRename ──────────────────────────────────────────────────────────────
|
|
209
|
+
function matchRename(raw) {
|
|
210
|
+
// 1. CLI-native: mv <from> <to> (unguarded — expects exactly two tokens)
|
|
211
|
+
const mvM = /^mv\s+(\S+)\s+(\S+)$/i.exec(raw);
|
|
212
|
+
if (mvM?.[1] && mvM?.[2]) {
|
|
213
|
+
return { kind: "rename", from: mvM[1], to: mvM[2] };
|
|
214
|
+
}
|
|
215
|
+
// 1b. Quoted paths — rename "from path" to "to path"
|
|
216
|
+
// Allows space-containing filenames: rename "my file.ts" to "your file.ts"
|
|
217
|
+
// Double-quote form:
|
|
218
|
+
const dqM = /^(?:rename|move)\s+"([^"]+)"\s+to\s+"([^"]+)"$/i.exec(raw);
|
|
219
|
+
if (dqM?.[1] && dqM?.[2]) {
|
|
220
|
+
return { kind: "rename", from: dqM[1].trim(), to: dqM[2].trim() };
|
|
221
|
+
}
|
|
222
|
+
// Single-quote form:
|
|
223
|
+
const sqM = /^(?:rename|move)\s+'([^']+)'\s+to\s+'([^']+)'$/i.exec(raw);
|
|
224
|
+
if (sqM?.[1] && sqM?.[2]) {
|
|
225
|
+
return { kind: "rename", from: sqM[1].trim(), to: sqM[2].trim() };
|
|
226
|
+
}
|
|
227
|
+
// 2. rename/move <path> to <path>
|
|
228
|
+
// Class 2: optional "the file|folder|directory" article noise before the source path
|
|
229
|
+
// "rename the file old.ts to new.ts" → from="old.ts", to="new.ts"
|
|
230
|
+
const m = /^(?:rename|move)\s+(?:the\s+(?:file|folder|directory)\s+)?(\S+(?:\/\S+)*)\s+to\s+(\S+(?:\/\S+)*)$/i.exec(raw);
|
|
231
|
+
if (m?.[1] && m?.[2]) {
|
|
232
|
+
return { kind: "rename", from: m[1], to: m[2] };
|
|
233
|
+
}
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
// ─── matchDelete ──────────────────────────────────────────────────────────────
|
|
237
|
+
function matchDelete(raw) {
|
|
238
|
+
// 1. CLI-native: rm <path> (unguarded)
|
|
239
|
+
const rmM = /^rm\s+(?<p>.+)$/i.exec(raw);
|
|
240
|
+
if (rmM?.groups?.p) {
|
|
241
|
+
const p = rmM.groups.p.trim();
|
|
242
|
+
return p ? { kind: "delete", path: p } : null;
|
|
243
|
+
}
|
|
244
|
+
// 2. Class 2: "delete the X folder" / "remove the X file"
|
|
245
|
+
// Article noise before a single-token path and an explicit type keyword.
|
|
246
|
+
// Single-token constraint (`\S+`) prevents multi-word captures; looksLikePath
|
|
247
|
+
// rejects bare prose nouns. "delete the old stuff folder" fails because
|
|
248
|
+
// `\S+` only captures "old" and then `\s+folder$` can't match " stuff folder".
|
|
249
|
+
const articleM = /^(?:delete|remove)\s+the\s+(\S+)\s+(?:file|folder|directory|dir)$/i.exec(raw);
|
|
250
|
+
if (articleM?.[1]) {
|
|
251
|
+
const path = cleanPath(articleM[1]);
|
|
252
|
+
if (path)
|
|
253
|
+
return { kind: "delete", path };
|
|
254
|
+
}
|
|
255
|
+
// 3. Explicit keyword: delete/remove [the] file|folder|directory <name>
|
|
256
|
+
// "delete file src/unused.ts" "remove folder temp" "remove directory build"
|
|
257
|
+
// "remove the file temp.txt" "delete the folder build" (Class 2 — keyword-first)
|
|
258
|
+
// cleanPath gate: "delete folder the old stuff" → looksLikePath fails ✓
|
|
259
|
+
const kwM = /^(?:delete|remove)\s+(?:the\s+)?(?:file|folder|directory|dir)\s+(?<p>.+)$/i.exec(raw);
|
|
260
|
+
if (kwM?.groups?.p) {
|
|
261
|
+
const path = cleanPath(kwM.groups.p);
|
|
262
|
+
if (path)
|
|
263
|
+
return { kind: "delete", path };
|
|
264
|
+
}
|
|
265
|
+
// 4. Bare path: delete/remove <single-token-path>
|
|
266
|
+
// Restricted to tokens with an extension OR path separator.
|
|
267
|
+
// This intentionally rejects bare identifiers like "delete cache" or
|
|
268
|
+
// "delete everything" — single nouns are too ambiguous without a keyword.
|
|
269
|
+
const bareM = /^(?:delete|remove)\s+(\S+)$/i.exec(raw);
|
|
270
|
+
if (bareM?.[1]) {
|
|
271
|
+
const candidate = bareM[1];
|
|
272
|
+
const hasExt = /\.[a-zA-Z0-9]{1,10}$/.test(candidate);
|
|
273
|
+
const hasSep = candidate.includes("/") || candidate.includes("\\");
|
|
274
|
+
if (hasExt || hasSep) {
|
|
275
|
+
return { kind: "delete", path: candidate };
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
// ─── matchReplace ─────────────────────────────────────────────────────────────
|
|
281
|
+
function matchReplace(raw) {
|
|
282
|
+
// replace "X" with "Y" in file (double quotes)
|
|
283
|
+
const rdq = /^replace\s+"([^"]+)"\s+with\s+"([^"]+)"\s+in\s+(\S+(?:\/\S+)*)$/i.exec(raw);
|
|
284
|
+
if (rdq?.[1] && rdq?.[2] && rdq?.[3]) {
|
|
285
|
+
return { kind: "replace", find: rdq[1], replace: rdq[2], file: rdq[3] };
|
|
286
|
+
}
|
|
287
|
+
// replace 'X' with 'Y' in file (single quotes)
|
|
288
|
+
const rsq = /^replace\s+'([^']+)'\s+with\s+'([^']+)'\s+in\s+(\S+(?:\/\S+)*)$/i.exec(raw);
|
|
289
|
+
if (rsq?.[1] && rsq?.[2] && rsq?.[3]) {
|
|
290
|
+
return { kind: "replace", find: rsq[1], replace: rsq[2], file: rsq[3] };
|
|
291
|
+
}
|
|
292
|
+
// change "X" to "Y" in file (double quotes, natural phrasing)
|
|
293
|
+
const cdq = /^change\s+"([^"]+)"\s+to\s+"([^"]+)"\s+in\s+(\S+(?:\/\S+)*)$/i.exec(raw);
|
|
294
|
+
if (cdq?.[1] && cdq?.[2] && cdq?.[3]) {
|
|
295
|
+
return { kind: "replace", find: cdq[1], replace: cdq[2], file: cdq[3] };
|
|
296
|
+
}
|
|
297
|
+
// change 'X' to 'Y' in file (single quotes)
|
|
298
|
+
const csq = /^change\s+'([^']+)'\s+to\s+'([^']+)'\s+in\s+(\S+(?:\/\S+)*)$/i.exec(raw);
|
|
299
|
+
if (csq?.[1] && csq?.[2] && csq?.[3]) {
|
|
300
|
+
return { kind: "replace", find: csq[1], replace: csq[2], file: csq[3] };
|
|
301
|
+
}
|
|
302
|
+
// Unquoted single-token forms — "change foo to bar in App.tsx"
|
|
303
|
+
// and "replace foo with bar in App.tsx"
|
|
304
|
+
//
|
|
305
|
+
// Safety constraints (both must hold):
|
|
306
|
+
// 1. find and replace are single non-space tokens (\S+) — multi-word values
|
|
307
|
+
// fail to match, e.g. "change old button text to new one in App.tsx" → null
|
|
308
|
+
// 2. file must have a recognised extension OR a path separator — bare words
|
|
309
|
+
// like "production" or "config" are rejected to prevent over-matching prose.
|
|
310
|
+
// This is intentionally stricter than looksLikePath's clean-identifier check.
|
|
311
|
+
const unquotedChange = /^change\s+(\S+)\s+to\s+(\S+)\s+in\s+(\S+)$/i.exec(raw);
|
|
312
|
+
if (unquotedChange?.[1] && unquotedChange?.[2] && unquotedChange?.[3]) {
|
|
313
|
+
const file = unquotedChange[3];
|
|
314
|
+
const hasExt = /\.[a-zA-Z0-9]{1,10}$/.test(file);
|
|
315
|
+
const hasSep = file.includes("/") || file.includes("\\");
|
|
316
|
+
if (hasExt || hasSep) {
|
|
317
|
+
return { kind: "replace", find: unquotedChange[1], replace: unquotedChange[2], file };
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
const unquotedReplace = /^replace\s+(\S+)\s+with\s+(\S+)\s+in\s+(\S+)$/i.exec(raw);
|
|
321
|
+
if (unquotedReplace?.[1] && unquotedReplace?.[2] && unquotedReplace?.[3]) {
|
|
322
|
+
const file = unquotedReplace[3];
|
|
323
|
+
const hasExt = /\.[a-zA-Z0-9]{1,10}$/.test(file);
|
|
324
|
+
const hasSep = file.includes("/") || file.includes("\\");
|
|
325
|
+
if (hasExt || hasSep) {
|
|
326
|
+
return { kind: "replace", find: unquotedReplace[1], replace: unquotedReplace[2], file };
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
// ─── normalizeIntent ──────────────────────────────────────────────────────────
|
|
332
|
+
/**
|
|
333
|
+
* Convert a free-form user string into a structured ParsedIntent.
|
|
334
|
+
*
|
|
335
|
+
* Returns null when:
|
|
336
|
+
* - The input is empty or whitespace
|
|
337
|
+
* - The input is ambiguous or vague (no recognised operation + valid path)
|
|
338
|
+
* - A required field (path, from/to, etc.) cannot be determined safely
|
|
339
|
+
*
|
|
340
|
+
* On null the caller falls through to the strict canonical parser.
|
|
341
|
+
*/
|
|
342
|
+
export function normalizeIntent(raw) {
|
|
343
|
+
const collapsed = collapseSpaces(raw);
|
|
344
|
+
if (!collapsed)
|
|
345
|
+
return null;
|
|
346
|
+
// Class 1: strip a single leading polite softener before matching.
|
|
347
|
+
// Only the social wrapper is removed; mid-sentence words are untouched.
|
|
348
|
+
const input = collapseSpaces(stripLeadingPrefix(collapsed));
|
|
349
|
+
if (!input)
|
|
350
|
+
return null;
|
|
351
|
+
// replace/change must be tested first — the verb "replace" is also a
|
|
352
|
+
// file-like create verb in some patterns; checking it first avoids ambiguity.
|
|
353
|
+
return (matchReplace(input) ??
|
|
354
|
+
matchCreateDir(input) ??
|
|
355
|
+
matchCreateFile(input) ??
|
|
356
|
+
matchRename(input) ??
|
|
357
|
+
matchDelete(input) ??
|
|
358
|
+
null);
|
|
359
|
+
}
|
|
360
|
+
// ─── intentToChange ───────────────────────────────────────────────────────────
|
|
361
|
+
/**
|
|
362
|
+
* Convert a ParsedIntent into the canonical ParsedChange used by the execution
|
|
363
|
+
* pipeline (FsChange | ReplaceChange).
|
|
364
|
+
*
|
|
365
|
+
* This is the only bridge between the normalizer and the execution path.
|
|
366
|
+
* No new execution paths are introduced here.
|
|
367
|
+
*/
|
|
368
|
+
export function intentToChange(intent) {
|
|
369
|
+
switch (intent.kind) {
|
|
370
|
+
case "create_dir":
|
|
371
|
+
return {
|
|
372
|
+
operationType: "create_dir",
|
|
373
|
+
dirPath: intent.path,
|
|
374
|
+
};
|
|
375
|
+
case "create_file":
|
|
376
|
+
return {
|
|
377
|
+
operationType: "write_file",
|
|
378
|
+
filePath: intent.path,
|
|
379
|
+
content: intent.content ?? "",
|
|
380
|
+
};
|
|
381
|
+
case "rename":
|
|
382
|
+
return {
|
|
383
|
+
operationType: "rename",
|
|
384
|
+
filePath: intent.from,
|
|
385
|
+
newPath: intent.to,
|
|
386
|
+
};
|
|
387
|
+
case "delete":
|
|
388
|
+
return {
|
|
389
|
+
operationType: "delete_file",
|
|
390
|
+
filePath: intent.path,
|
|
391
|
+
};
|
|
392
|
+
case "replace":
|
|
393
|
+
return {
|
|
394
|
+
oldValue: intent.find,
|
|
395
|
+
newValue: intent.replace,
|
|
396
|
+
filePath: intent.file,
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
// ─── describeIntent ───────────────────────────────────────────────────────────
|
|
401
|
+
/**
|
|
402
|
+
* Human-readable "SYSTEM WILL:" description for a ParsedIntent.
|
|
403
|
+
* Used in the UI approval frame to surface normalised intent to the user.
|
|
404
|
+
*/
|
|
405
|
+
export function describeIntent(intent) {
|
|
406
|
+
switch (intent.kind) {
|
|
407
|
+
case "create_dir": return `Create directory: ./${intent.path}`;
|
|
408
|
+
case "create_file": return `Create file: ./${intent.path}`;
|
|
409
|
+
case "rename": return `Rename path: ${intent.from} → ${intent.to}`;
|
|
410
|
+
case "delete": return `Delete path: ./${intent.path}`;
|
|
411
|
+
case "replace": return `Replace text in: ${intent.file}`;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../../../src/understand/interpretation/intent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Change Interpretation orchestrator — v1.
|
|
3
|
+
*
|
|
4
|
+
* CONTRACT:
|
|
5
|
+
* Interpretation is ADVISORY. It does not alter the execute/guide/refuse
|
|
6
|
+
* decision produced by the intake pipeline. It describes what the human
|
|
7
|
+
* will experience from the change.
|
|
8
|
+
*
|
|
9
|
+
* Returns null when:
|
|
10
|
+
* - Input cannot be parsed as a structured change command
|
|
11
|
+
* - No rule matches the parsed change (change type is outside v1 scope)
|
|
12
|
+
*
|
|
13
|
+
* v1 scope:
|
|
14
|
+
* - Tailwind / CSS color changes
|
|
15
|
+
* - Text literal changes
|
|
16
|
+
* - Simple config value changes
|
|
17
|
+
*
|
|
18
|
+
* Future scope (not implemented in v1):
|
|
19
|
+
* - Structural code changes
|
|
20
|
+
* - Import / dependency changes
|
|
21
|
+
* - Multi-file changes
|
|
22
|
+
* - Logic / control-flow changes
|
|
23
|
+
*/
|
|
24
|
+
import type { InterpretationResult } from "./types.js";
|
|
25
|
+
export declare function interpretChange(input: string): InterpretationResult | null;
|
|
26
|
+
//# sourceMappingURL=interpretation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpretation.d.ts","sourceRoot":"","sources":["../../../../src/understand/interpretation/interpretation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKvD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAe1E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Change Interpretation orchestrator — v1.
|
|
3
|
+
*
|
|
4
|
+
* CONTRACT:
|
|
5
|
+
* Interpretation is ADVISORY. It does not alter the execute/guide/refuse
|
|
6
|
+
* decision produced by the intake pipeline. It describes what the human
|
|
7
|
+
* will experience from the change.
|
|
8
|
+
*
|
|
9
|
+
* Returns null when:
|
|
10
|
+
* - Input cannot be parsed as a structured change command
|
|
11
|
+
* - No rule matches the parsed change (change type is outside v1 scope)
|
|
12
|
+
*
|
|
13
|
+
* v1 scope:
|
|
14
|
+
* - Tailwind / CSS color changes
|
|
15
|
+
* - Text literal changes
|
|
16
|
+
* - Simple config value changes
|
|
17
|
+
*
|
|
18
|
+
* Future scope (not implemented in v1):
|
|
19
|
+
* - Structural code changes
|
|
20
|
+
* - Import / dependency changes
|
|
21
|
+
* - Multi-file changes
|
|
22
|
+
* - Logic / control-flow changes
|
|
23
|
+
*/
|
|
24
|
+
import { isFsChange } from "./types.js";
|
|
25
|
+
import { parseChange } from "./parser.js";
|
|
26
|
+
import { ALL_INTERPRETATION_RULES } from "./rules.js";
|
|
27
|
+
export function interpretChange(input) {
|
|
28
|
+
const parsed = parseChange(input);
|
|
29
|
+
if (parsed === null)
|
|
30
|
+
return null;
|
|
31
|
+
// FS operations have no interpretation rules — their intent is fully explicit.
|
|
32
|
+
if (isFsChange(parsed))
|
|
33
|
+
return null;
|
|
34
|
+
for (const rule of ALL_INTERPRETATION_RULES) {
|
|
35
|
+
if (rule.matches(parsed)) {
|
|
36
|
+
const result = rule.interpret(parsed);
|
|
37
|
+
if (result !== null)
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=interpretation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpretation.js","sourceRoot":"","sources":["../../../../src/understand/interpretation/interpretation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEjC,+EAA+E;IAC/E,IAAI,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,wBAAwB,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,MAAM,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Change command parser.
|
|
3
|
+
*
|
|
4
|
+
* Supported formats — text replacement:
|
|
5
|
+
* replace "X" with "Y" in <file>
|
|
6
|
+
* patch <file> search="X" replace="Y"
|
|
7
|
+
*
|
|
8
|
+
* Supported formats — filesystem operations:
|
|
9
|
+
* create (folder|directory) <path>
|
|
10
|
+
* create file <path>
|
|
11
|
+
* rename <path> to <newPath>
|
|
12
|
+
* (delete|remove) (file|folder|directory)? <path>
|
|
13
|
+
*
|
|
14
|
+
* Returns null for any other input shape.
|
|
15
|
+
*/
|
|
16
|
+
import type { ParsedChange } from "./types.js";
|
|
17
|
+
export declare function parseChange(input: string): ParsedChange | null;
|
|
18
|
+
/** Extract the filename from a path without importing node:path. */
|
|
19
|
+
export declare function basename(filePath: string): string;
|
|
20
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../src/understand/interpretation/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAqC/C,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAyD9D;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD"}
|