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,276 @@
|
|
|
1
|
+
// Copyright 2026 Shortgigs LLC. PROPRIETARY — NOT FOR PUBLIC DISTRIBUTION.
|
|
2
|
+
// This file is gitignored and intentionally absent from the public npm package.
|
|
3
|
+
// It belongs in the shortgigs/usesteady-ops private repo for production use.
|
|
4
|
+
/**
|
|
5
|
+
* src/shell/cli/friction-admin.ts
|
|
6
|
+
*
|
|
7
|
+
* Admin CLI for friction report review and payout management.
|
|
8
|
+
*
|
|
9
|
+
* Usage (via `usesteady admin friction <sub>`):
|
|
10
|
+
* usesteady admin friction list List pending friction issues
|
|
11
|
+
* usesteady admin friction review AI-classify + approve/reject interactively
|
|
12
|
+
* usesteady admin friction review --dry-run AI-classify only, no writes
|
|
13
|
+
* usesteady admin friction payouts Show payout ledger
|
|
14
|
+
* usesteady admin friction payouts --pending Show only unpaid approved entries
|
|
15
|
+
*/
|
|
16
|
+
import * as readline from "node:readline";
|
|
17
|
+
import { readAuth, readConfig } from "../../friction/config.js";
|
|
18
|
+
import { fetchPendingIssues, postComment, swapLabel, closeIssue } from "../../friction/github-issues.js";
|
|
19
|
+
import { classifyBatch, loadAnthropicKey } from "../../friction/reviewer.js";
|
|
20
|
+
import { recordDecision, pendingPayouts, allDecisions, ledgerStats } from "../../friction/payout-ledger.js";
|
|
21
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
22
|
+
const RESET = "\x1b[0m";
|
|
23
|
+
const BOLD = "\x1b[1m";
|
|
24
|
+
const GREEN = "\x1b[32m";
|
|
25
|
+
const RED = "\x1b[31m";
|
|
26
|
+
const YELLOW = "\x1b[33m";
|
|
27
|
+
const CYAN = "\x1b[36m";
|
|
28
|
+
const DIM = "\x1b[2m";
|
|
29
|
+
function col(text, color) {
|
|
30
|
+
return `${color}${text}${RESET}`;
|
|
31
|
+
}
|
|
32
|
+
function hr(char = "─", width = 60) {
|
|
33
|
+
return char.repeat(width);
|
|
34
|
+
}
|
|
35
|
+
function pad(s, n) {
|
|
36
|
+
return s.length >= n ? s.slice(0, n - 1) + "…" : s.padEnd(n);
|
|
37
|
+
}
|
|
38
|
+
function decisionColor(d) {
|
|
39
|
+
if (d === "approved")
|
|
40
|
+
return GREEN;
|
|
41
|
+
if (d === "rejected")
|
|
42
|
+
return RED;
|
|
43
|
+
return YELLOW;
|
|
44
|
+
}
|
|
45
|
+
/** Ask the user a single-key question interactively. */
|
|
46
|
+
async function prompt(question, choices) {
|
|
47
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
48
|
+
return new Promise(resolve => {
|
|
49
|
+
const ask = () => {
|
|
50
|
+
rl.question(`${question} [${choices.join("/")}]: `, (ans) => {
|
|
51
|
+
const a = ans.trim().toLowerCase();
|
|
52
|
+
if (choices.includes(a)) {
|
|
53
|
+
rl.close();
|
|
54
|
+
resolve(a);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
ask();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
ask();
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function buildVerdictComment(issue, verdict, final) {
|
|
65
|
+
const header = final === "approved"
|
|
66
|
+
? `## Friction Review — ✅ APPROVED`
|
|
67
|
+
: `## Friction Review — ❌ REJECTED`;
|
|
68
|
+
const payoutNote = final === "approved"
|
|
69
|
+
? `\n**Payout:** We will reach out to @${issue.user.login} to arrange payment within 14 days.`
|
|
70
|
+
: `\n**Note:** This report does not meet the payout criteria. No payment will be issued.`;
|
|
71
|
+
return [
|
|
72
|
+
header,
|
|
73
|
+
``,
|
|
74
|
+
`**Decision:** ${final}`,
|
|
75
|
+
`**Confidence:** ${verdict.confidence}%`,
|
|
76
|
+
`**Reason:** ${verdict.reason}`,
|
|
77
|
+
payoutNote,
|
|
78
|
+
``,
|
|
79
|
+
`---`,
|
|
80
|
+
`_Reviewed by UseSteady Friction Reviewer — ${new Date().toISOString()}_`,
|
|
81
|
+
].join("\n");
|
|
82
|
+
}
|
|
83
|
+
// ─── Sub-commands ─────────────────────────────────────────────────────────────
|
|
84
|
+
async function cmdList(repo, token) {
|
|
85
|
+
process.stdout.write(`\n${BOLD} Pending friction reports — ${repo}${RESET}\n`);
|
|
86
|
+
process.stdout.write(` ${hr()}\n\n`);
|
|
87
|
+
const issues = await fetchPendingIssues(repo, token);
|
|
88
|
+
if (issues.length === 0) {
|
|
89
|
+
process.stdout.write(` ${DIM}No pending issues.${RESET}\n\n`);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
process.stdout.write(` ${BOLD}${pad("#", 5)}${pad("Kind", 18)}${pad("Task / Notes", 38)}${pad("Reporter", 18)}${RESET}\n`);
|
|
93
|
+
process.stdout.write(` ${hr()}\n`);
|
|
94
|
+
for (const issue of issues) {
|
|
95
|
+
const kindMatch = issue.body.match(/\*\*Type:\*\*\s*(.+)/);
|
|
96
|
+
const kind = kindMatch?.[1]?.trim() ?? "?";
|
|
97
|
+
const taskMatch = issue.body.match(/ - (.+)/);
|
|
98
|
+
const notesMatch = issue.body.match(/\*\*Type:\*\*.*\n.*\n.*\n.*\n.*\n\n.*\n([\s\S]*?)\n###/);
|
|
99
|
+
const task = taskMatch?.[1]?.trim() ?? notesMatch?.[1]?.trim() ?? issue.title;
|
|
100
|
+
process.stdout.write(` ${pad(String(issue.number), 5)}${pad(kind, 18)}${col(pad(task, 38), CYAN)}${DIM}@${issue.user.login}${RESET}\n`);
|
|
101
|
+
}
|
|
102
|
+
process.stdout.write(`\n ${DIM}Total: ${issues.length} pending${RESET}\n\n`);
|
|
103
|
+
}
|
|
104
|
+
async function cmdReview(repo, token, dryRun, autoMode) {
|
|
105
|
+
process.stdout.write(`\n${BOLD} Friction Review${dryRun ? " (dry-run)" : ""}${RESET}\n`);
|
|
106
|
+
process.stdout.write(` ${hr()}\n\n`);
|
|
107
|
+
const issues = await fetchPendingIssues(repo, token);
|
|
108
|
+
if (issues.length === 0) {
|
|
109
|
+
process.stdout.write(` ${DIM}Nothing to review.${RESET}\n\n`);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const classifierMode = loadAnthropicKey() ? "Claude AI (claude-haiku-4-5)" : "rule-based heuristics (set ANTHROPIC_API_KEY for AI)";
|
|
113
|
+
process.stdout.write(` Fetched ${issues.length} pending issues. Running classifier [${classifierMode}]...\n\n`);
|
|
114
|
+
const results = await classifyBatch(issues);
|
|
115
|
+
// Print the AI summary table
|
|
116
|
+
process.stdout.write(` ${BOLD}${pad("#", 5)}${pad("AI Verdict", 12)}${pad("Conf", 6)}${pad("Task input", 32)}${pad("Reason", 44)}${RESET}\n`);
|
|
117
|
+
process.stdout.write(` ${hr(undefined, 100)}\n`);
|
|
118
|
+
for (const { issue, verdict } of results) {
|
|
119
|
+
const taskMatch = issue.body.match(/ - (.+)/);
|
|
120
|
+
const notesMatch = issue.body.match(/Reporter notes: (.+)/);
|
|
121
|
+
const task = taskMatch?.[1]?.trim() ?? notesMatch?.[1]?.trim() ?? "—";
|
|
122
|
+
process.stdout.write(` ${pad(String(issue.number), 5)}` +
|
|
123
|
+
`${col(pad(verdict.decision.toUpperCase(), 12), decisionColor(verdict.decision))}` +
|
|
124
|
+
`${pad(verdict.confidence + "%", 6)}` +
|
|
125
|
+
`${col(pad(task, 32), CYAN)}` +
|
|
126
|
+
`${DIM}${pad(verdict.reason, 44)}${RESET}\n`);
|
|
127
|
+
}
|
|
128
|
+
process.stdout.write(`\n`);
|
|
129
|
+
if (dryRun) {
|
|
130
|
+
process.stdout.write(` ${DIM}Dry-run — no changes written.${RESET}\n\n`);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
let approved = 0;
|
|
134
|
+
let rejected = 0;
|
|
135
|
+
let skipped = 0;
|
|
136
|
+
if (autoMode) {
|
|
137
|
+
process.stdout.write(` ${BOLD}Auto mode — committing AI verdicts (skip = no action):${RESET}\n\n`);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
process.stdout.write(` ${BOLD}Review each issue:${RESET}\n`);
|
|
141
|
+
process.stdout.write(` ${DIM}a = approve r = reject s = skip q = quit${RESET}\n\n`);
|
|
142
|
+
}
|
|
143
|
+
for (const { issue, verdict } of results) {
|
|
144
|
+
const taskMatch = issue.body.match(/ - (.+)/);
|
|
145
|
+
const task = taskMatch?.[1]?.trim() ?? issue.title;
|
|
146
|
+
process.stdout.write(`\n ${BOLD}#${issue.number}${RESET} ${col(task, CYAN)}\n`);
|
|
147
|
+
process.stdout.write(` AI: ${col(verdict.decision.toUpperCase(), decisionColor(verdict.decision))} (${verdict.confidence}%) — ${DIM}${verdict.reason}${RESET}\n`);
|
|
148
|
+
process.stdout.write(` ${DIM}${issue.html_url}${RESET}\n`);
|
|
149
|
+
let finalDecision;
|
|
150
|
+
if (autoMode) {
|
|
151
|
+
// In auto mode, commit the AI verdict directly (skip = no action)
|
|
152
|
+
finalDecision = verdict.decision;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
const ans = await prompt(` Decision`, ["a", "r", "s", "q"]).catch(() => "q");
|
|
156
|
+
if (ans === "q") {
|
|
157
|
+
process.stdout.write(`\n ${YELLOW}Aborted.${RESET}\n\n`);
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
finalDecision = ans === "a" ? "approved" : ans === "r" ? "rejected" : "skip";
|
|
161
|
+
}
|
|
162
|
+
if (finalDecision === "skip") {
|
|
163
|
+
skipped++;
|
|
164
|
+
process.stdout.write(` ${DIM}Skipped.${RESET}\n`);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
const committedDecision = finalDecision;
|
|
168
|
+
const verdictComment = buildVerdictComment(issue, verdict, committedDecision);
|
|
169
|
+
process.stdout.write(` Writing to GitHub...`);
|
|
170
|
+
try {
|
|
171
|
+
// Post comment
|
|
172
|
+
await postComment(repo, issue.number, verdictComment, token);
|
|
173
|
+
// Swap label
|
|
174
|
+
await swapLabel(repo, issue.number, "status/pending", `status/${committedDecision}`, token);
|
|
175
|
+
// Close if rejected
|
|
176
|
+
if (committedDecision === "rejected") {
|
|
177
|
+
await closeIssue(repo, issue.number, token);
|
|
178
|
+
}
|
|
179
|
+
// Write to payout ledger
|
|
180
|
+
recordDecision({
|
|
181
|
+
githubLogin: issue.user.login,
|
|
182
|
+
issueNumber: issue.number,
|
|
183
|
+
issueUrl: issue.html_url,
|
|
184
|
+
verdict: committedDecision,
|
|
185
|
+
verdictReason: verdict.reason,
|
|
186
|
+
confidence: verdict.confidence,
|
|
187
|
+
});
|
|
188
|
+
if (committedDecision === "approved")
|
|
189
|
+
approved++;
|
|
190
|
+
else
|
|
191
|
+
rejected++;
|
|
192
|
+
process.stdout.write(` ${col("done", GREEN)}\n`);
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
process.stdout.write(` ${col("ERROR: " + String(err), RED)}\n`);
|
|
196
|
+
}
|
|
197
|
+
// Small pause between GitHub writes
|
|
198
|
+
await new Promise(r => setTimeout(r, 300));
|
|
199
|
+
}
|
|
200
|
+
process.stdout.write(`\n ${hr()}\n`);
|
|
201
|
+
process.stdout.write(` ${GREEN}Approved: ${approved}${RESET} ` +
|
|
202
|
+
`${RED}Rejected: ${rejected}${RESET} ` +
|
|
203
|
+
`${DIM}Skipped: ${skipped}${RESET}\n\n`);
|
|
204
|
+
if (approved > 0) {
|
|
205
|
+
process.stdout.write(` ${BOLD}Approved reporters are now in the payout ledger.${RESET}\n`);
|
|
206
|
+
process.stdout.write(` Run ${CYAN}usesteady admin friction payouts${RESET} to review.\n\n`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async function cmdPayouts(pendingOnly) {
|
|
210
|
+
process.stdout.write(`\n${BOLD} Payout Ledger${RESET}\n`);
|
|
211
|
+
process.stdout.write(` ${hr()}\n\n`);
|
|
212
|
+
const stats = ledgerStats();
|
|
213
|
+
const records = pendingOnly ? pendingPayouts() : allDecisions();
|
|
214
|
+
process.stdout.write(` ${GREEN}Approved: ${stats.approved}${RESET} ` +
|
|
215
|
+
`${RED}Rejected: ${stats.rejected}${RESET} ` +
|
|
216
|
+
`${YELLOW}Pending payout: ${stats.pendingPayout}${RESET} ` +
|
|
217
|
+
`${DIM}Paid: ${stats.paid}${RESET}\n\n`);
|
|
218
|
+
if (records.length === 0) {
|
|
219
|
+
process.stdout.write(` ${DIM}No ${pendingOnly ? "pending payout" : ""} records.${RESET}\n\n`);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
process.stdout.write(` ${BOLD}${pad("Issue", 8)}${pad("Reporter", 22)}${pad("Verdict", 12)}${pad("Decided", 24)}${pad("Paid", 12)}${RESET}\n`);
|
|
223
|
+
process.stdout.write(` ${hr(undefined, 78)}\n`);
|
|
224
|
+
for (const r of records) {
|
|
225
|
+
const vColor = r.verdict === "approved" ? GREEN : RED;
|
|
226
|
+
const paid = r.paidAt ? col("YES", GREEN) : col("pending", DIM);
|
|
227
|
+
process.stdout.write(` ${pad("#" + String(r.issueNumber), 8)}` +
|
|
228
|
+
`${col(pad("@" + r.githubLogin, 22), CYAN)}` +
|
|
229
|
+
`${col(pad(r.verdict.toUpperCase(), 12), vColor)}` +
|
|
230
|
+
`${DIM}${pad(r.decidedAt.slice(0, 19).replace("T", " "), 24)}${RESET}` +
|
|
231
|
+
`${paid}\n`);
|
|
232
|
+
}
|
|
233
|
+
process.stdout.write(`\n`);
|
|
234
|
+
}
|
|
235
|
+
// ─── Entry point ──────────────────────────────────────────────────────────────
|
|
236
|
+
export async function runAdmin(args) {
|
|
237
|
+
const [, sub, ...flags] = args; // args[0] = "friction"
|
|
238
|
+
const dryRun = flags.includes("--dry-run");
|
|
239
|
+
const autoMode = flags.includes("--auto");
|
|
240
|
+
const pendingOnly = flags.includes("--pending");
|
|
241
|
+
const auth = readAuth();
|
|
242
|
+
const config = readConfig();
|
|
243
|
+
if (!auth?.githubToken) {
|
|
244
|
+
process.stderr.write("\n usesteady admin: no GitHub token found.\n" +
|
|
245
|
+
" Run `usesteady report --auth` first to authenticate.\n\n");
|
|
246
|
+
process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
const repo = config.frictionRepo;
|
|
249
|
+
const token = auth.githubToken;
|
|
250
|
+
switch (sub) {
|
|
251
|
+
case "list":
|
|
252
|
+
await cmdList(repo, token);
|
|
253
|
+
break;
|
|
254
|
+
case "review":
|
|
255
|
+
await cmdReview(repo, token, dryRun, autoMode);
|
|
256
|
+
break;
|
|
257
|
+
case "payouts":
|
|
258
|
+
await cmdPayouts(pendingOnly);
|
|
259
|
+
break;
|
|
260
|
+
default:
|
|
261
|
+
process.stdout.write([
|
|
262
|
+
"",
|
|
263
|
+
" usesteady admin friction <sub>",
|
|
264
|
+
"",
|
|
265
|
+
" Subcommands:",
|
|
266
|
+
" list List all status/pending friction issues",
|
|
267
|
+
" review AI-classify + interactively approve/reject",
|
|
268
|
+
" review --dry-run AI-classify only, no writes to GitHub",
|
|
269
|
+
" review --auto AI-classify and auto-commit all verdicts",
|
|
270
|
+
" payouts Show full payout ledger",
|
|
271
|
+
" payouts --pending Show only unpaid approved entries",
|
|
272
|
+
"",
|
|
273
|
+
].join("\n"));
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=friction-admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"friction-admin.js","sourceRoot":"","sources":["../../../../src/shell/cli/friction-admin.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,gFAAgF;AAChF,6EAA6E;AAC7E;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,QAAQ,MAA2C,eAAe,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAgC,0BAA0B,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAoB,4BAA4B,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAI5G,iFAAiF;AAEjF,MAAM,KAAK,GAAI,SAAS,CAAC;AACzB,MAAM,IAAI,GAAK,SAAS,CAAC;AACzB,MAAM,KAAK,GAAI,UAAU,CAAC;AAC1B,MAAM,GAAG,GAAM,UAAU,CAAC;AAC1B,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,IAAI,GAAK,UAAU,CAAC;AAC1B,MAAM,GAAG,GAAM,SAAS,CAAC;AAEzB,SAAS,GAAG,CAAC,IAAY,EAAE,KAAa;IACtC,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,EAAE,CAAC,IAAI,GAAG,GAAG,EAAE,KAAK,GAAG,EAAE;IAChC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS;IAC/B,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,aAAa,CAAC,CAAS;IAC9B,IAAI,CAAC,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC,KAAK,UAAU;QAAE,OAAO,GAAG,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wDAAwD;AACxD,KAAK,UAAU,MAAM,CAAC,QAAgB,EAAE,OAAiB;IACvD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,GAAG,GAAG,GAAG,EAAE;YACf,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC1D,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACnC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxB,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,CAAC,CAAC,CAAC;gBACb,CAAC;qBAAM,CAAC;oBACN,GAAG,EAAE,CAAC;gBACR,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,GAAG,EAAE,CAAC;IACR,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAoB,EACpB,OAAsB,EACtB,KAAgC;IAEhC,MAAM,MAAM,GAAG,KAAK,KAAK,UAAU;QACjC,CAAC,CAAC,iCAAiC;QACnC,CAAC,CAAC,iCAAiC,CAAC;IAEtC,MAAM,UAAU,GAAG,KAAK,KAAK,UAAU;QACrC,CAAC,CAAC,uCAAuC,KAAK,CAAC,IAAI,CAAC,KAAK,qCAAqC;QAC9F,CAAC,CAAC,uFAAuF,CAAC;IAE5F,OAAO;QACL,MAAM;QACN,EAAE;QACF,iBAAiB,KAAK,EAAE;QACxB,mBAAmB,OAAO,CAAC,UAAU,GAAG;QACxC,eAAe,OAAO,CAAC,MAAM,EAAE;QAC/B,UAAU;QACV,EAAE;QACF,KAAK;QACL,8CAA8C,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG;KAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,iFAAiF;AAEjF,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,KAAa;IAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,gCAAgC,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;IAChF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAErD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,qBAAqB,KAAK,MAAM,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CACtG,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IAEpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAQ,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC;QAChD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC9F,MAAM,IAAI,GAAQ,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC;QAEnF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CACnH,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,MAAM,CAAC,MAAM,WAAW,KAAK,MAAM,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,IAAe,EACf,KAAe,EACf,MAAgB,EAChB,QAAiB;IAEjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,oBAAoB,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;IAC1F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAErD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,qBAAqB,KAAK,MAAM,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,sDAAsD,CAAC;IACpI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,MAAM,wCAAwC,cAAc,UAAU,CAAC,CAAC;IAEjH,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;IAE5C,6BAA6B;IAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CACzH,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAElD,KAAK,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC;QAEtE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;YACnC,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE;YAClF,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE;YACrC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE;YAC7B,GAAG,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAC7C,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,gCAAgC,KAAK,MAAM,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAI,CAAC,CAAC;IAEjB,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,yDAAyD,KAAK,MAAM,CAAC,CAAC;IACtG,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,qBAAqB,KAAK,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,8CAA8C,KAAK,MAAM,CAAC,CAAC;IAC1F,CAAC;IAED,KAAK,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;QACzC,MAAM,SAAS,GAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,IAAI,GAAS,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC;QAEzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,OAAO,CAAC,UAAU,SAAS,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC,CAAC;QACpK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,IAAI,CAAC,CAAC;QAE5D,IAAI,aAA+C,CAAC;QAEpD,IAAI,QAAQ,EAAE,CAAC;YACb,kEAAkE;YAClE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YAE9E,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;gBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,MAAM,WAAW,KAAK,MAAM,CAAC,CAAC;gBAC1D,MAAM;YACR,CAAC;YAED,aAAa,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/E,CAAC;QAED,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,KAAK,IAAI,CAAC,CAAC;YACnD,SAAS;QACX,CAAC;QAED,MAAM,iBAAiB,GAA4B,aAAa,CAAC;QACjE,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAE/C,IAAI,CAAC;YACH,eAAe;YACf,MAAM,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;YAE7D,aAAa;YACb,MAAM,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,iBAAiB,EAAE,EAAE,KAAK,CAAC,CAAC;YAE5F,oBAAoB;YACpB,IAAI,iBAAiB,KAAK,UAAU,EAAE,CAAC;gBACrC,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;YAED,yBAAyB;YACzB,cAAc,CAAC;gBACb,WAAW,EAAI,KAAK,CAAC,IAAI,CAAC,KAAK;gBAC/B,WAAW,EAAI,KAAK,CAAC,MAAM;gBAC3B,QAAQ,EAAO,KAAK,CAAC,QAAQ;gBAC7B,OAAO,EAAQ,iBAAiB;gBAChC,aAAa,EAAE,OAAO,CAAC,MAAM;gBAC7B,UAAU,EAAK,OAAO,CAAC,UAAU;aAClC,CAAC,CAAC;YAEH,IAAI,iBAAiB,KAAK,UAAU;gBAAE,QAAQ,EAAE,CAAC;;gBAC5C,QAAQ,EAAE,CAAC;YAEhB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAClE,CAAC;QAED,oCAAoC;QACpC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,KAAK,aAAa,QAAQ,GAAG,KAAK,IAAI;QAC3C,GAAG,GAAG,aAAa,QAAQ,GAAG,KAAK,IAAI;QACvC,GAAG,GAAG,YAAY,OAAO,GAAG,KAAK,MAAM,CACxC,CAAC;IAEF,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,mDAAmD,KAAK,IAAI,CAAC,CAAC;QAC5F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,mCAAmC,KAAK,iBAAiB,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,WAAoB;IAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,kBAAkB,KAAK,IAAI,CAAC,CAAC;IAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAEtC,MAAM,KAAK,GAAK,WAAW,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IAEhE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,KAAK,aAAa,KAAK,CAAC,QAAQ,GAAG,KAAK,IAAI;QACjD,GAAG,GAAG,aAAa,KAAK,CAAC,QAAQ,GAAG,KAAK,IAAI;QAC7C,GAAG,MAAM,mBAAmB,KAAK,CAAC,aAAa,GAAG,KAAK,IAAI;QAC3D,GAAG,GAAG,SAAS,KAAK,CAAC,IAAI,GAAG,KAAK,MAAM,CACxC,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC,CAAC;QAC/F,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAC1H,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAEjD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;QACtD,MAAM,IAAI,GAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE;YAC1C,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE;YAC5C,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE;YAClD,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE;YACtE,GAAG,IAAI,IAAI,CACZ,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,uBAAuB;IACvD,MAAM,MAAM,GAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAK,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEhD,MAAM,IAAI,GAAK,QAAQ,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,+CAA+C;YAC/C,4DAA4D,CAC7D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAI,MAAM,CAAC,YAAY,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;IAE/B,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM;YACT,MAAM,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC3B,MAAM;QAER,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC/C,MAAM;QAER,KAAK,SAAS;YACZ,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;YAC9B,MAAM;QAER;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBACnB,EAAE;gBACF,kCAAkC;gBAClC,EAAE;gBACF,gBAAgB;gBAChB,oEAAoE;gBACpE,uEAAuE;gBACvE,kEAAkE;gBAClE,qEAAqE;gBACrE,oDAAoD;gBACpD,8DAA8D;gBAC9D,EAAE;aACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/shell/cli/friction-report.ts
|
|
3
|
+
*
|
|
4
|
+
* `usesteady report` — interactive friction report CLI.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* usesteady report # guided interactive prompt
|
|
8
|
+
* usesteady report --auth # re-authenticate with GitHub
|
|
9
|
+
* usesteady report --status # show queue stats
|
|
10
|
+
*
|
|
11
|
+
* This is a public module (open source). No private collection URLs
|
|
12
|
+
* or admin credentials appear here — everything private lives in
|
|
13
|
+
* the private ops repo.
|
|
14
|
+
*/
|
|
15
|
+
export declare function runReport(args: string[]): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=friction-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"friction-report.d.ts","sourceRoot":"","sources":["../../../../src/shell/cli/friction-report.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AAoFH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuF7D"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// Copyright 2026 Shortgigs LLC. Licensed under the Apache License, Version 2.0.
|
|
2
|
+
/**
|
|
3
|
+
* src/shell/cli/friction-report.ts
|
|
4
|
+
*
|
|
5
|
+
* `usesteady report` — interactive friction report CLI.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* usesteady report # guided interactive prompt
|
|
9
|
+
* usesteady report --auth # re-authenticate with GitHub
|
|
10
|
+
* usesteady report --status # show queue stats
|
|
11
|
+
*
|
|
12
|
+
* This is a public module (open source). No private collection URLs
|
|
13
|
+
* or admin credentials appear here — everything private lives in
|
|
14
|
+
* the private ops repo.
|
|
15
|
+
*/
|
|
16
|
+
import * as readline from "node:readline";
|
|
17
|
+
import { readAuth, readConfig } from "../../friction/config.js";
|
|
18
|
+
import { runDeviceFlow } from "../../friction/github-auth.js";
|
|
19
|
+
import { captureManualReport } from "../../friction/auto-capture.js";
|
|
20
|
+
import { flushQueue } from "../../friction/client.js";
|
|
21
|
+
import { queueStats } from "../../friction/queue.js";
|
|
22
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
23
|
+
function print(msg) {
|
|
24
|
+
process.stdout.write(msg + "\n");
|
|
25
|
+
}
|
|
26
|
+
function ask(rl, question) {
|
|
27
|
+
return new Promise((resolve) => rl.question(question, resolve));
|
|
28
|
+
}
|
|
29
|
+
function clearLine() {
|
|
30
|
+
process.stdout.write("\r\x1B[K");
|
|
31
|
+
}
|
|
32
|
+
// ─── Auth ─────────────────────────────────────────────────────────────────────
|
|
33
|
+
async function ensureAuth() {
|
|
34
|
+
const existing = readAuth();
|
|
35
|
+
if (existing?.githubToken && existing?.githubLogin) {
|
|
36
|
+
return existing.githubLogin;
|
|
37
|
+
}
|
|
38
|
+
print("");
|
|
39
|
+
print(" To submit a friction report, connect your GitHub account.");
|
|
40
|
+
print(" This lets Shortgigs LLC identify you for payout and notify you of decisions.");
|
|
41
|
+
print("");
|
|
42
|
+
let waitDots = 0;
|
|
43
|
+
const token = await runDeviceFlow({
|
|
44
|
+
onCode: ({ userCode, verificationUri }) => {
|
|
45
|
+
print(` 1. Open: ${verificationUri}`);
|
|
46
|
+
print(` 2. Enter code: ${userCode}`);
|
|
47
|
+
print("");
|
|
48
|
+
print(" Waiting for authorization...");
|
|
49
|
+
},
|
|
50
|
+
onWaiting: () => {
|
|
51
|
+
clearLine();
|
|
52
|
+
waitDots = (waitDots + 1) % 4;
|
|
53
|
+
process.stdout.write(` Waiting${"...".slice(0, waitDots + 1)} `);
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
clearLine();
|
|
57
|
+
print(`\n Authenticated as @${token.githubLogin}`);
|
|
58
|
+
if (token.githubEmail)
|
|
59
|
+
print(` Email: ${token.githubEmail}`);
|
|
60
|
+
print("");
|
|
61
|
+
return token.githubLogin;
|
|
62
|
+
}
|
|
63
|
+
async function selectKind(rl) {
|
|
64
|
+
print(" What kind of friction are you reporting?");
|
|
65
|
+
print("");
|
|
66
|
+
print(" 1. Something in the UI confused or blocked me");
|
|
67
|
+
print(" 2. Install or startup problem (npm install, usesteady ui)");
|
|
68
|
+
print(" 3. Something else");
|
|
69
|
+
print("");
|
|
70
|
+
const answer = (await ask(rl, " Choice [1-3]: ")).trim();
|
|
71
|
+
switch (answer) {
|
|
72
|
+
case "1": return "ux-block";
|
|
73
|
+
case "2": return "install-error";
|
|
74
|
+
default: return "manual-cli";
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// ─── Main report flow ─────────────────────────────────────────────────────────
|
|
78
|
+
export async function runReport(args) {
|
|
79
|
+
const isAuth = args.includes("--auth");
|
|
80
|
+
const isStatus = args.includes("--status");
|
|
81
|
+
// ── Status mode ──
|
|
82
|
+
if (isStatus) {
|
|
83
|
+
const stats = queueStats();
|
|
84
|
+
print("");
|
|
85
|
+
print(" Friction queue status:");
|
|
86
|
+
print(` Pending: ${stats.pending}`);
|
|
87
|
+
print(` Submitted: ${stats.submitted}`);
|
|
88
|
+
print(` Failed: ${stats.failed}`);
|
|
89
|
+
print("");
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// ── Re-auth mode ──
|
|
93
|
+
if (isAuth) {
|
|
94
|
+
await ensureAuth();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
print("");
|
|
98
|
+
print(" UseSteady — Friction Report");
|
|
99
|
+
print(" ─────────────────────────────────────────");
|
|
100
|
+
print("");
|
|
101
|
+
print(" Friction reports help improve UseSteady.");
|
|
102
|
+
print(" Verified reports earn a payout from Shortgigs LLC.");
|
|
103
|
+
print("");
|
|
104
|
+
// ── Ensure GitHub auth ──
|
|
105
|
+
let githubLogin;
|
|
106
|
+
try {
|
|
107
|
+
githubLogin = await ensureAuth();
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
process.stderr.write(`\n Auth failed: ${String(err)}\n\n`);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
const rl = readline.createInterface({
|
|
114
|
+
input: process.stdin,
|
|
115
|
+
output: process.stdout,
|
|
116
|
+
});
|
|
117
|
+
try {
|
|
118
|
+
// ── Kind selection ──
|
|
119
|
+
const kind = await selectKind(rl);
|
|
120
|
+
// ── Description ──
|
|
121
|
+
print("");
|
|
122
|
+
print(" Describe the friction in 1-3 sentences.");
|
|
123
|
+
print(" What did you expect? What happened instead?");
|
|
124
|
+
print("");
|
|
125
|
+
const notes = (await ask(rl, " > ")).trim();
|
|
126
|
+
if (!notes) {
|
|
127
|
+
print("\n No description entered. Cancelled.\n");
|
|
128
|
+
rl.close();
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
rl.close();
|
|
132
|
+
// ── Enqueue ──
|
|
133
|
+
const id = captureManualReport({ kind, notes, context: {} });
|
|
134
|
+
print("");
|
|
135
|
+
print(" Report queued locally.");
|
|
136
|
+
print(` ID: ${id}`);
|
|
137
|
+
print("");
|
|
138
|
+
print(" Submitting to Shortgigs LLC...");
|
|
139
|
+
const config = readConfig();
|
|
140
|
+
const n = await flushQueue(config);
|
|
141
|
+
if (n > 0) {
|
|
142
|
+
print(` Submitted. @${githubLogin} will be notified of the decision via GitHub.`);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
print(" Could not submit right now — saved locally and will retry automatically.");
|
|
146
|
+
print(" Run `usesteady report --status` to check queue.");
|
|
147
|
+
}
|
|
148
|
+
print("");
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
rl.close();
|
|
152
|
+
process.stderr.write(`\n Report failed: ${String(err)}\n\n`);
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=friction-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"friction-report.js","sourceRoot":"","sources":["../../../../src/shell/cli/friction-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 9A + 9E + 10C: Product Shell — CLI main loop.
|
|
3
|
+
*
|
|
4
|
+
* ── Purpose ───────────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* A thin readline loop that drives CursorProductSession, ClaudeProductSession,
|
|
7
|
+
* or a WorkflowRun end-to-end from the terminal.
|
|
8
|
+
*
|
|
9
|
+
* This is the only file in the shell layer with I/O. Everything else is pure.
|
|
10
|
+
*
|
|
11
|
+
* ── Usage ─────────────────────────────────────────────────────────────────────
|
|
12
|
+
*
|
|
13
|
+
* npx tsx src/shell/cli/main.ts cursor [workspace-root]
|
|
14
|
+
* npx tsx src/shell/cli/main.ts claude
|
|
15
|
+
* npx tsx src/shell/cli/main.ts workflow [spec.json] [workspace-root]
|
|
16
|
+
* npx tsx src/shell/cli/main.ts history [store-dir]
|
|
17
|
+
*
|
|
18
|
+
* workflow spec.json format:
|
|
19
|
+
* {
|
|
20
|
+
* "name": "My workflow",
|
|
21
|
+
* "tasks": [
|
|
22
|
+
* { "input": "replace X with Y in src/Button.tsx", "label": "Optional label" },
|
|
23
|
+
* { "input": "...", "runtime": "claude" }
|
|
24
|
+
* ],
|
|
25
|
+
* "defaultRuntime": "cursor",
|
|
26
|
+
* "maxRetries": 2
|
|
27
|
+
* }
|
|
28
|
+
* If no spec.json is provided, the CLI prompts H to build a spec interactively.
|
|
29
|
+
*
|
|
30
|
+
* Environment variables (Claude runtime):
|
|
31
|
+
* ANTHROPIC_API_KEY — required for real Claude calls
|
|
32
|
+
* USESTEADY_USE_CLAUDE=true — opt-in to live API; stub otherwise
|
|
33
|
+
*
|
|
34
|
+
* ── Loop contract ─────────────────────────────────────────────────────────────
|
|
35
|
+
*
|
|
36
|
+
* Single-session (cursor / claude):
|
|
37
|
+
* 1. submit() — run intake + prepare
|
|
38
|
+
* 2. render() — print phase header + display + prompt (if any)
|
|
39
|
+
* 3. read answer — y/n for confirm, number for choose
|
|
40
|
+
* 4. advance() — call appropriate session function(s)
|
|
41
|
+
* 5. render() again — print result
|
|
42
|
+
* 6. start new session
|
|
43
|
+
*
|
|
44
|
+
* Workflow (Phase 9E + 11D, WS6 generic loop):
|
|
45
|
+
* 1. createWorkflowRun() → "reviewing" — H reviews the full task list first
|
|
46
|
+
* 2. renderWorkflowFrame() — print phase header + task detail + prompt
|
|
47
|
+
* 3. dispatch on frame.prompt?.kind — confirm or choose, no runtime branching
|
|
48
|
+
* 4. advanceWorkflowOnConfirm (reviewing → startWorkflow / cancelWorkflow)
|
|
49
|
+
* advanceWorkflowOnConfirm / advanceWorkflowOnChoice (task execution)
|
|
50
|
+
* 5. loop until isWorkflowTerminal()
|
|
51
|
+
*
|
|
52
|
+
* "exit" at the input prompt quits the loop.
|
|
53
|
+
*
|
|
54
|
+
* ── What this loop does NOT do ────────────────────────────────────────────────
|
|
55
|
+
*
|
|
56
|
+
* NOT evaluate policy — policy comes from defaults.ts / DEFAULT_WORKFLOW_POLICIES
|
|
57
|
+
* NOT decide approval — reads from user, passes to session / coordinator
|
|
58
|
+
* NOT manage sessions — each command = new session; each workflow run = new run
|
|
59
|
+
*/
|
|
60
|
+
import type { WorkflowSpec } from "../../workflow/types.js";
|
|
61
|
+
/**
|
|
62
|
+
* Load a WorkflowSpec from a JSON file.
|
|
63
|
+
*
|
|
64
|
+
* Validates required fields; throws with a clear message on malformed input.
|
|
65
|
+
* Exported for unit testing (pure function — no readline).
|
|
66
|
+
*/
|
|
67
|
+
export declare function loadWorkflowSpecFromFile(filePath: string): WorkflowSpec;
|
|
68
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../src/shell/cli/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AA8CH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAiL5D;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CA+DvE"}
|