@roackb2/heddle 1.4.0 → 1.5.0
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/README.md +10 -2
- package/dist/examples/conversation-engine.js +2 -2
- package/dist/examples/conversation-engine.js.map +1 -1
- package/dist/examples/cyberloop-observer.js +2 -2
- package/dist/examples/cyberloop-observer.js.map +1 -1
- package/dist/examples/heartbeat-scheduler.js +15 -11
- package/dist/examples/heartbeat-scheduler.js.map +1 -1
- package/dist/examples/heartbeat.js +5 -5
- package/dist/examples/heartbeat.js.map +1 -1
- package/dist/examples/host-events.js +4 -4
- package/dist/examples/host-events.js.map +1 -1
- package/dist/examples/programmatic-loop.js +5 -6
- package/dist/examples/programmatic-loop.js.map +1 -1
- package/dist/examples/repo-investigator.js +2 -2
- package/dist/examples/repo-investigator.js.map +1 -1
- package/dist/src/cli/ask.d.ts +1 -1
- package/dist/src/cli/ask.d.ts.map +1 -1
- package/dist/src/cli/ask.js +6 -6
- package/dist/src/cli/ask.js.map +1 -1
- package/dist/src/cli/chat/adapters/slash-command-context.d.ts.map +1 -1
- package/dist/src/cli/chat/adapters/slash-command-context.js +5 -5
- package/dist/src/cli/chat/adapters/slash-command-context.js.map +1 -1
- package/dist/src/cli/chat/components/RuntimeHostInterstitial.d.ts +1 -1
- package/dist/src/cli/chat/components/RuntimeHostInterstitial.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell.d.ts +1 -2
- package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell.js +6 -7
- package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell.js.map +1 -1
- package/dist/src/cli/chat/hooks/controllers/run/tui-run-loop-events.d.ts +1 -1
- package/dist/src/cli/chat/hooks/controllers/run/tui-run-loop-events.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/controllers/run/tui-tool-approval.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/controllers/run/tui-tool-approval.js +7 -8
- package/dist/src/cli/chat/hooks/controllers/run/tui-tool-approval.js.map +1 -1
- package/dist/src/cli/chat/hooks/controllers/useAgentRunController.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/controllers/useAgentRunController.js +9 -9
- package/dist/src/cli/chat/hooks/controllers/useAgentRunController.js.map +1 -1
- package/dist/src/cli/chat/hooks/useChatSessions.js +2 -2
- package/dist/src/cli/chat/hooks/useChatSessions.js.map +1 -1
- package/dist/src/cli/chat/hooks/useChatStatusSummary.d.ts +1 -1
- package/dist/src/cli/chat/hooks/useChatStatusSummary.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/useProjectApprovals.d.ts +2 -2
- package/dist/src/cli/chat/hooks/useProjectApprovals.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/useProjectApprovals.js +17 -8
- package/dist/src/cli/chat/hooks/useProjectApprovals.js.map +1 -1
- package/dist/src/cli/chat/utils/runtime.d.ts +2 -2
- package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
- package/dist/src/cli/chat/utils/runtime.js +8 -8
- package/dist/src/cli/chat/utils/runtime.js.map +1 -1
- package/dist/src/cli/heartbeat/output.d.ts +2 -2
- package/dist/src/cli/heartbeat/output.d.ts.map +1 -1
- package/dist/src/cli/heartbeat/output.js +7 -5
- package/dist/src/cli/heartbeat/output.js.map +1 -1
- package/dist/src/cli/heartbeat/store.js +2 -2
- package/dist/src/cli/heartbeat/store.js.map +1 -1
- package/dist/src/cli/heartbeat/task-commands.js +42 -30
- package/dist/src/cli/heartbeat/task-commands.js.map +1 -1
- package/dist/src/cli/heartbeat/types.d.ts +1 -1
- package/dist/src/cli/heartbeat/types.d.ts.map +1 -1
- package/dist/src/cli/heartbeat/worker.d.ts.map +1 -1
- package/dist/src/cli/heartbeat/worker.js +26 -17
- package/dist/src/cli/heartbeat/worker.js.map +1 -1
- package/dist/src/cli/main.js +12 -12
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/remote/control-plane-client.d.ts +10 -10
- package/dist/src/cli/remote/control-plane-client.d.ts.map +1 -1
- package/dist/src/core/agent/constants.d.ts +4 -0
- package/dist/src/core/agent/constants.d.ts.map +1 -0
- package/dist/src/core/agent/constants.js +4 -0
- package/dist/src/core/agent/constants.js.map +1 -0
- package/dist/src/core/agent/context/index.d.ts +3 -0
- package/dist/src/core/agent/context/index.d.ts.map +1 -0
- package/dist/src/core/agent/context/index.js +2 -0
- package/dist/src/core/agent/context/index.js.map +1 -0
- package/dist/src/core/agent/context/run-context-builder.d.ts +11 -0
- package/dist/src/core/agent/context/run-context-builder.d.ts.map +1 -0
- package/dist/src/core/agent/context/run-context-builder.js +76 -0
- package/dist/src/core/agent/context/run-context-builder.js.map +1 -0
- package/dist/src/core/agent/context/types.d.ts +11 -0
- package/dist/src/core/agent/context/types.d.ts.map +1 -0
- package/dist/src/core/agent/context/types.js +2 -0
- package/dist/src/core/agent/context/types.js.map +1 -0
- package/dist/src/core/agent/finish/index.d.ts +3 -0
- package/dist/src/core/agent/finish/index.d.ts.map +1 -0
- package/dist/src/core/agent/finish/index.js +2 -0
- package/dist/src/core/agent/finish/index.js.map +1 -0
- package/dist/src/core/agent/finish/run-finisher.d.ts +16 -0
- package/dist/src/core/agent/finish/run-finisher.d.ts.map +1 -0
- package/dist/src/core/agent/finish/run-finisher.js +67 -0
- package/dist/src/core/agent/finish/run-finisher.js.map +1 -0
- package/dist/src/core/agent/finish/types.d.ts +23 -0
- package/dist/src/core/agent/finish/types.d.ts.map +1 -0
- package/dist/src/core/agent/finish/types.js +2 -0
- package/dist/src/core/agent/finish/types.js.map +1 -0
- package/dist/src/core/agent/history/history-sanitizer.d.ts +15 -0
- package/dist/src/core/agent/history/history-sanitizer.d.ts.map +1 -0
- package/dist/src/core/agent/history/history-sanitizer.js +40 -0
- package/dist/src/core/agent/history/history-sanitizer.js.map +1 -0
- package/dist/src/core/agent/history/index.d.ts +3 -0
- package/dist/src/core/agent/history/index.d.ts.map +1 -0
- package/dist/src/core/agent/history/index.js +2 -0
- package/dist/src/core/agent/history/index.js.map +1 -0
- package/dist/src/core/agent/history/types.d.ts +16 -0
- package/dist/src/core/agent/history/types.d.ts.map +1 -0
- package/dist/src/core/agent/history/types.js +2 -0
- package/dist/src/core/agent/history/types.js.map +1 -0
- package/dist/src/core/agent/index.d.ts +3 -0
- package/dist/src/core/agent/index.d.ts.map +1 -0
- package/dist/src/core/agent/index.js +2 -0
- package/dist/src/core/agent/index.js.map +1 -0
- package/dist/src/core/agent/memory/index.d.ts +3 -0
- package/dist/src/core/agent/memory/index.d.ts.map +1 -0
- package/dist/src/core/agent/memory/index.js +2 -0
- package/dist/src/core/agent/memory/index.js.map +1 -0
- package/dist/src/core/agent/memory/memory-checkpoint-tracker.d.ts +16 -0
- package/dist/src/core/agent/memory/memory-checkpoint-tracker.d.ts.map +1 -0
- package/dist/src/core/agent/memory/memory-checkpoint-tracker.js +92 -0
- package/dist/src/core/agent/memory/memory-checkpoint-tracker.js.map +1 -0
- package/dist/src/core/agent/memory/types.d.ts +13 -0
- package/dist/src/core/agent/memory/types.d.ts.map +1 -0
- package/dist/src/core/agent/memory/types.js +2 -0
- package/dist/src/core/agent/memory/types.js.map +1 -0
- package/dist/src/core/agent/model/index.d.ts +3 -0
- package/dist/src/core/agent/model/index.d.ts.map +1 -0
- package/dist/src/core/agent/model/index.js +2 -0
- package/dist/src/core/agent/model/index.js.map +1 -0
- package/dist/src/core/agent/model/model-turn-service.d.ts +12 -0
- package/dist/src/core/agent/model/model-turn-service.d.ts.map +1 -0
- package/dist/src/core/agent/model/model-turn-service.js +103 -0
- package/dist/src/core/agent/model/model-turn-service.js.map +1 -0
- package/dist/src/core/agent/model/types.d.ts +12 -0
- package/dist/src/core/agent/model/types.d.ts.map +1 -0
- package/dist/src/core/agent/model/types.js +2 -0
- package/dist/src/core/agent/model/types.js.map +1 -0
- package/dist/src/core/agent/mutation/index.d.ts +3 -0
- package/dist/src/core/agent/mutation/index.d.ts.map +1 -0
- package/dist/src/core/agent/mutation/index.js +2 -0
- package/dist/src/core/agent/mutation/index.js.map +1 -0
- package/dist/src/core/agent/mutation/mutation-tracker.d.ts +20 -0
- package/dist/src/core/agent/mutation/mutation-tracker.d.ts.map +1 -0
- package/dist/src/core/agent/mutation/mutation-tracker.js +75 -0
- package/dist/src/core/agent/mutation/mutation-tracker.js.map +1 -0
- package/dist/src/core/agent/mutation/types.d.ts +13 -0
- package/dist/src/core/agent/mutation/types.d.ts.map +1 -0
- package/dist/src/core/agent/mutation/types.js +2 -0
- package/dist/src/core/agent/mutation/types.js.map +1 -0
- package/dist/src/core/agent/planning/index.d.ts +3 -0
- package/dist/src/core/agent/planning/index.d.ts.map +1 -0
- package/dist/src/core/agent/planning/index.js +2 -0
- package/dist/src/core/agent/planning/index.js.map +1 -0
- package/dist/src/core/agent/planning/plan-state-parser.d.ts +9 -0
- package/dist/src/core/agent/planning/plan-state-parser.d.ts.map +1 -0
- package/dist/src/core/agent/planning/plan-state-parser.js +35 -0
- package/dist/src/core/agent/planning/plan-state-parser.js.map +1 -0
- package/dist/src/core/agent/planning/types.d.ts +7 -0
- package/dist/src/core/agent/planning/types.d.ts.map +1 -0
- package/dist/src/core/agent/planning/types.js +2 -0
- package/dist/src/core/agent/planning/types.js.map +1 -0
- package/dist/src/core/agent/service.d.ts +10 -0
- package/dist/src/core/agent/service.d.ts.map +1 -0
- package/dist/src/core/agent/service.js +44 -0
- package/dist/src/core/agent/service.js.map +1 -0
- package/dist/src/core/agent/tools/index.d.ts +4 -0
- package/dist/src/core/agent/tools/index.d.ts.map +1 -0
- package/dist/src/core/agent/tools/index.js +3 -0
- package/dist/src/core/agent/tools/index.js.map +1 -0
- package/dist/src/core/agent/tools/tool-dispatcher.d.ts +47 -0
- package/dist/src/core/agent/tools/tool-dispatcher.d.ts.map +1 -0
- package/dist/src/core/agent/tools/tool-dispatcher.js +123 -0
- package/dist/src/core/agent/tools/tool-dispatcher.js.map +1 -0
- package/dist/src/core/agent/tools/tool-turn-service.d.ts +13 -0
- package/dist/src/core/agent/tools/tool-turn-service.d.ts.map +1 -0
- package/dist/src/core/agent/tools/tool-turn-service.js +129 -0
- package/dist/src/core/agent/tools/tool-turn-service.js.map +1 -0
- package/dist/src/core/agent/tools/types.d.ts +19 -0
- package/dist/src/core/agent/tools/types.d.ts.map +1 -0
- package/dist/src/core/agent/tools/types.js +2 -0
- package/dist/src/core/agent/tools/types.js.map +1 -0
- package/dist/src/core/agent/types.d.ts +83 -0
- package/dist/src/core/agent/types.d.ts.map +1 -0
- package/dist/src/core/agent/types.js +2 -0
- package/dist/src/core/agent/types.js.map +1 -0
- package/dist/src/core/agent/utils/abort.d.ts +2 -0
- package/dist/src/core/agent/utils/abort.d.ts.map +1 -0
- package/dist/src/core/agent/utils/abort.js +9 -0
- package/dist/src/core/agent/utils/abort.js.map +1 -0
- package/dist/src/core/agent/utils/index.d.ts +4 -0
- package/dist/src/core/agent/utils/index.d.ts.map +1 -0
- package/dist/src/core/agent/utils/index.js +4 -0
- package/dist/src/core/agent/utils/index.js.map +1 -0
- package/dist/src/core/agent/utils/serialization.d.ts +2 -0
- package/dist/src/core/agent/utils/serialization.d.ts.map +1 -0
- package/dist/src/core/agent/utils/serialization.js +11 -0
- package/dist/src/core/agent/utils/serialization.js.map +1 -0
- package/dist/src/core/agent/utils/tool-input.d.ts +3 -0
- package/dist/src/core/agent/utils/tool-input.d.ts.map +1 -0
- package/dist/src/core/agent/{util.js → utils/tool-input.js} +1 -28
- package/dist/src/core/agent/utils/tool-input.js.map +1 -0
- package/dist/src/core/approvals/index.d.ts +5 -0
- package/dist/src/core/approvals/index.d.ts.map +1 -0
- package/dist/src/core/approvals/index.js +4 -0
- package/dist/src/core/approvals/index.js.map +1 -0
- package/dist/src/core/approvals/pending-approval.d.ts +17 -0
- package/dist/src/core/approvals/pending-approval.d.ts.map +1 -0
- package/dist/src/core/approvals/pending-approval.js +27 -0
- package/dist/src/core/approvals/pending-approval.js.map +1 -0
- package/dist/src/core/approvals/policies.d.ts +20 -0
- package/dist/src/core/approvals/policies.d.ts.map +1 -0
- package/dist/src/core/approvals/policies.js +56 -0
- package/dist/src/core/approvals/policies.js.map +1 -0
- package/dist/src/core/approvals/remembered-rules/codec.d.ts +17 -0
- package/dist/src/core/approvals/remembered-rules/codec.d.ts.map +1 -0
- package/dist/src/core/approvals/remembered-rules/codec.js +117 -0
- package/dist/src/core/approvals/remembered-rules/codec.js.map +1 -0
- package/dist/src/core/approvals/remembered-rules/index.d.ts +5 -0
- package/dist/src/core/approvals/remembered-rules/index.d.ts.map +1 -0
- package/dist/src/core/approvals/remembered-rules/index.js +4 -0
- package/dist/src/core/approvals/remembered-rules/index.js.map +1 -0
- package/dist/src/core/approvals/remembered-rules/repository.d.ts +11 -0
- package/dist/src/core/approvals/remembered-rules/repository.d.ts.map +1 -0
- package/dist/src/core/approvals/remembered-rules/repository.js +29 -0
- package/dist/src/core/approvals/remembered-rules/repository.js.map +1 -0
- package/dist/src/core/approvals/remembered-rules/schemas.d.ts +55 -0
- package/dist/src/core/approvals/remembered-rules/schemas.d.ts.map +1 -0
- package/dist/src/core/approvals/remembered-rules/schemas.js +24 -0
- package/dist/src/core/approvals/remembered-rules/schemas.js.map +1 -0
- package/dist/src/core/approvals/remembered-rules/service.d.ts +28 -0
- package/dist/src/core/approvals/remembered-rules/service.d.ts.map +1 -0
- package/dist/src/core/approvals/remembered-rules/service.js +200 -0
- package/dist/src/core/approvals/remembered-rules/service.js.map +1 -0
- package/dist/src/core/approvals/remembered-rules/types.d.ts +12 -0
- package/dist/src/core/approvals/remembered-rules/types.d.ts.map +1 -0
- package/dist/src/core/approvals/remembered-rules/types.js +2 -0
- package/dist/src/core/approvals/remembered-rules/types.js.map +1 -0
- package/dist/src/core/approvals/service.d.ts +13 -0
- package/dist/src/core/approvals/service.d.ts.map +1 -0
- package/dist/src/core/approvals/service.js +45 -0
- package/dist/src/core/approvals/service.js.map +1 -0
- package/dist/src/core/approvals/types.d.ts +24 -1
- package/dist/src/core/approvals/types.d.ts.map +1 -1
- package/dist/src/core/chat/engine/compaction/summarizer/service.d.ts.map +1 -1
- package/dist/src/core/chat/engine/compaction/summarizer/service.js +4 -4
- package/dist/src/core/chat/engine/compaction/summarizer/service.js.map +1 -1
- package/dist/src/core/chat/engine/compaction/types.d.ts +1 -1
- package/dist/src/core/chat/engine/compaction/types.d.ts.map +1 -1
- package/dist/src/core/chat/engine/turns/context/turn-context-builder.js +2 -2
- package/dist/src/core/chat/engine/turns/context/turn-context-builder.js.map +1 -1
- package/dist/src/core/chat/engine/turns/host/types.d.ts +2 -2
- package/dist/src/core/chat/engine/turns/host/types.d.ts.map +1 -1
- package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.d.ts +1 -1
- package/dist/src/core/chat/engine/turns/memory/types.d.ts +2 -2
- package/dist/src/core/chat/engine/turns/memory/types.d.ts.map +1 -1
- package/dist/src/core/chat/engine/turns/persistence/types.d.ts +2 -2
- package/dist/src/core/chat/engine/turns/persistence/types.d.ts.map +1 -1
- package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.d.ts.map +1 -1
- package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.js +5 -5
- package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.js.map +1 -1
- package/dist/src/core/chat/engine/turns/runtime/types.d.ts +1 -1
- package/dist/src/core/chat/engine/turns/runtime/types.d.ts.map +1 -1
- package/dist/src/core/chat/engine/turns/service.js +2 -2
- package/dist/src/core/chat/engine/turns/service.js.map +1 -1
- package/dist/src/core/chat/engine/turns/types.d.ts +4 -4
- package/dist/src/core/chat/engine/turns/types.d.ts.map +1 -1
- package/dist/src/core/chat/engine/types.d.ts +1 -1
- package/dist/src/core/commands/slash/modules/context.d.ts +2 -2
- package/dist/src/core/commands/slash/modules/context.d.ts.map +1 -1
- package/dist/src/core/commands/slash/modules/heartbeat/heartbeat-commands.d.ts +1 -1
- package/dist/src/core/commands/slash/modules/heartbeat/heartbeat-commands.d.ts.map +1 -1
- package/dist/src/core/commands/slash/modules/heartbeat/heartbeat-commands.js +20 -18
- package/dist/src/core/commands/slash/modules/heartbeat/heartbeat-commands.js.map +1 -1
- package/dist/src/core/heartbeat/checkpoint/index.d.ts +4 -0
- package/dist/src/core/heartbeat/checkpoint/index.d.ts.map +1 -0
- package/dist/src/core/heartbeat/checkpoint/index.js +3 -0
- package/dist/src/core/heartbeat/checkpoint/index.js.map +1 -0
- package/dist/src/core/heartbeat/checkpoint/repository.d.ts +9 -0
- package/dist/src/core/heartbeat/checkpoint/repository.d.ts.map +1 -0
- package/dist/src/core/heartbeat/checkpoint/repository.js +33 -0
- package/dist/src/core/heartbeat/checkpoint/repository.js.map +1 -0
- package/dist/src/core/heartbeat/checkpoint/service.d.ts +5 -0
- package/dist/src/core/heartbeat/checkpoint/service.d.ts.map +1 -0
- package/dist/src/core/heartbeat/checkpoint/service.js +24 -0
- package/dist/src/core/heartbeat/checkpoint/service.js.map +1 -0
- package/dist/src/core/heartbeat/checkpoint/types.d.ts +17 -0
- package/dist/src/core/heartbeat/checkpoint/types.d.ts.map +1 -0
- package/dist/src/core/heartbeat/checkpoint/types.js +2 -0
- package/dist/src/core/heartbeat/checkpoint/types.js.map +1 -0
- package/dist/src/core/heartbeat/index.d.ts +11 -0
- package/dist/src/core/heartbeat/index.d.ts.map +1 -0
- package/dist/src/core/heartbeat/index.js +6 -0
- package/dist/src/core/heartbeat/index.js.map +1 -0
- package/dist/src/core/heartbeat/scheduler/index.d.ts +4 -0
- package/dist/src/core/heartbeat/scheduler/index.d.ts.map +1 -0
- package/dist/src/core/heartbeat/scheduler/index.js +3 -0
- package/dist/src/core/heartbeat/scheduler/index.js.map +1 -0
- package/dist/src/core/heartbeat/scheduler/runner.d.ts +19 -0
- package/dist/src/core/heartbeat/scheduler/runner.d.ts.map +1 -0
- package/dist/src/core/heartbeat/scheduler/runner.js +16 -0
- package/dist/src/core/heartbeat/scheduler/runner.js.map +1 -0
- package/dist/src/core/heartbeat/scheduler/service.d.ts +8 -0
- package/dist/src/core/heartbeat/scheduler/service.d.ts.map +1 -0
- package/dist/src/core/heartbeat/scheduler/service.js +125 -0
- package/dist/src/core/heartbeat/scheduler/service.js.map +1 -0
- package/dist/src/core/{runtime/heartbeat-scheduler.d.ts → heartbeat/scheduler/types.d.ts} +5 -18
- package/dist/src/core/heartbeat/scheduler/types.d.ts.map +1 -0
- package/dist/src/core/heartbeat/scheduler/types.js +2 -0
- package/dist/src/core/heartbeat/scheduler/types.js.map +1 -0
- package/dist/src/core/heartbeat/tasks/index.d.ts +4 -0
- package/dist/src/core/heartbeat/tasks/index.d.ts.map +1 -0
- package/dist/src/core/heartbeat/tasks/index.js +3 -0
- package/dist/src/core/heartbeat/tasks/index.js.map +1 -0
- package/dist/src/core/heartbeat/tasks/repository.d.ts +24 -0
- package/dist/src/core/heartbeat/tasks/repository.d.ts.map +1 -0
- package/dist/src/core/heartbeat/tasks/repository.js +116 -0
- package/dist/src/core/heartbeat/tasks/repository.js.map +1 -0
- package/dist/src/core/heartbeat/tasks/schemas.d.ts +212 -0
- package/dist/src/core/heartbeat/tasks/schemas.d.ts.map +1 -0
- package/dist/src/core/heartbeat/tasks/schemas.js +78 -0
- package/dist/src/core/heartbeat/tasks/schemas.js.map +1 -0
- package/dist/src/core/heartbeat/tasks/task-state.d.ts +33 -0
- package/dist/src/core/heartbeat/tasks/task-state.d.ts.map +1 -0
- package/dist/src/core/heartbeat/tasks/task-state.js +122 -0
- package/dist/src/core/heartbeat/tasks/task-state.js.map +1 -0
- package/dist/src/core/{runtime/heartbeat-task-store.d.ts → heartbeat/tasks/types.d.ts} +24 -29
- package/dist/src/core/heartbeat/tasks/types.d.ts.map +1 -0
- package/dist/src/core/heartbeat/tasks/types.js +2 -0
- package/dist/src/core/heartbeat/tasks/types.js.map +1 -0
- package/dist/src/core/heartbeat/views/index.d.ts +4 -0
- package/dist/src/core/heartbeat/views/index.d.ts.map +1 -0
- package/dist/src/core/heartbeat/views/index.js +3 -0
- package/dist/src/core/heartbeat/views/index.js.map +1 -0
- package/dist/src/core/heartbeat/views/lucid-presenter.d.ts +20 -0
- package/dist/src/core/heartbeat/views/lucid-presenter.d.ts.map +1 -0
- package/dist/src/core/heartbeat/views/lucid-presenter.js +112 -0
- package/dist/src/core/heartbeat/views/lucid-presenter.js.map +1 -0
- package/dist/src/core/heartbeat/views/presenter.d.ts +22 -0
- package/dist/src/core/heartbeat/views/presenter.d.ts.map +1 -0
- package/dist/src/core/heartbeat/views/presenter.js +50 -0
- package/dist/src/core/heartbeat/views/presenter.js.map +1 -0
- package/dist/src/core/{runtime/heartbeat-lucid.d.ts → heartbeat/views/types.d.ts} +24 -8
- package/dist/src/core/heartbeat/views/types.d.ts.map +1 -0
- package/dist/src/core/heartbeat/views/types.js +2 -0
- package/dist/src/core/heartbeat/views/types.js.map +1 -0
- package/dist/src/core/heartbeat/wake/decision.d.ts +13 -0
- package/dist/src/core/heartbeat/wake/decision.d.ts.map +1 -0
- package/dist/src/core/heartbeat/wake/decision.js +24 -0
- package/dist/src/core/heartbeat/wake/decision.js.map +1 -0
- package/dist/src/core/heartbeat/wake/index.d.ts +5 -0
- package/dist/src/core/heartbeat/wake/index.d.ts.map +1 -0
- package/dist/src/core/heartbeat/wake/index.js +4 -0
- package/dist/src/core/heartbeat/wake/index.js.map +1 -0
- package/dist/src/core/heartbeat/wake/prompt.d.ts +11 -0
- package/dist/src/core/heartbeat/wake/prompt.d.ts.map +1 -0
- package/dist/src/core/heartbeat/wake/prompt.js +39 -0
- package/dist/src/core/heartbeat/wake/prompt.js.map +1 -0
- package/dist/src/core/heartbeat/wake/service.d.ts +6 -0
- package/dist/src/core/heartbeat/wake/service.d.ts.map +1 -0
- package/dist/src/core/heartbeat/wake/service.js +75 -0
- package/dist/src/core/heartbeat/wake/service.js.map +1 -0
- package/dist/src/core/heartbeat/wake/types.d.ts +33 -0
- package/dist/src/core/heartbeat/wake/types.d.ts.map +1 -0
- package/dist/src/core/heartbeat/wake/types.js +2 -0
- package/dist/src/core/heartbeat/wake/types.js.map +1 -0
- package/dist/src/core/llm/factory.js +2 -2
- package/dist/src/core/llm/factory.js.map +1 -1
- package/dist/src/core/llm/model-policy.d.ts +1 -1
- package/dist/src/core/llm/model-policy.d.ts.map +1 -1
- package/dist/src/core/memory/maintainer.js +2 -2
- package/dist/src/core/memory/maintainer.js.map +1 -1
- package/dist/src/core/observability/conversation-activity.d.ts +1 -1
- package/dist/src/core/observability/conversation-activity.d.ts.map +1 -1
- package/dist/src/core/runtime/credentials/index.d.ts +3 -0
- package/dist/src/core/runtime/credentials/index.d.ts.map +1 -0
- package/dist/src/core/runtime/credentials/index.js +2 -0
- package/dist/src/core/runtime/credentials/index.js.map +1 -0
- package/dist/src/core/runtime/credentials/service.d.ts +22 -0
- package/dist/src/core/runtime/credentials/service.d.ts.map +1 -0
- package/dist/src/core/runtime/credentials/service.js +83 -0
- package/dist/src/core/runtime/credentials/service.js.map +1 -0
- package/dist/src/core/runtime/credentials/types.d.ts +22 -0
- package/dist/src/core/runtime/credentials/types.d.ts.map +1 -0
- package/dist/src/core/runtime/credentials/types.js +2 -0
- package/dist/src/core/runtime/credentials/types.js.map +1 -0
- package/dist/src/core/runtime/daemon/host-resolver.d.ts +7 -0
- package/dist/src/core/runtime/daemon/host-resolver.d.ts.map +1 -0
- package/dist/src/core/runtime/daemon/host-resolver.js +61 -0
- package/dist/src/core/runtime/daemon/host-resolver.js.map +1 -0
- package/dist/src/core/runtime/daemon/index.d.ts +6 -0
- package/dist/src/core/runtime/daemon/index.d.ts.map +1 -0
- package/dist/src/core/runtime/daemon/index.js +5 -0
- package/dist/src/core/runtime/daemon/index.js.map +1 -0
- package/dist/src/core/runtime/daemon/messages.d.ts +13 -0
- package/dist/src/core/runtime/daemon/messages.d.ts.map +1 -0
- package/dist/src/core/runtime/daemon/messages.js +43 -0
- package/dist/src/core/runtime/daemon/messages.js.map +1 -0
- package/dist/src/core/runtime/daemon/registry-repository.d.ts +12 -0
- package/dist/src/core/runtime/daemon/registry-repository.d.ts.map +1 -0
- package/dist/src/core/runtime/daemon/registry-repository.js +33 -0
- package/dist/src/core/runtime/daemon/registry-repository.js.map +1 -0
- package/dist/src/core/runtime/daemon/registry-service.d.ts +16 -0
- package/dist/src/core/runtime/daemon/registry-service.d.ts.map +1 -0
- package/dist/src/core/runtime/daemon/registry-service.js +141 -0
- package/dist/src/core/runtime/daemon/registry-service.js.map +1 -0
- package/dist/src/core/runtime/daemon/schemas.d.ts +96 -0
- package/dist/src/core/runtime/daemon/schemas.d.ts.map +1 -0
- package/dist/src/core/runtime/daemon/schemas.js +36 -0
- package/dist/src/core/runtime/daemon/schemas.js.map +1 -0
- package/dist/src/core/runtime/daemon/types.d.ts +66 -0
- package/dist/src/core/runtime/daemon/types.d.ts.map +1 -0
- package/dist/src/core/runtime/daemon/types.js +2 -0
- package/dist/src/core/runtime/daemon/types.js.map +1 -0
- package/dist/src/core/runtime/loop/checkpoint.d.ts +33 -0
- package/dist/src/core/runtime/loop/checkpoint.d.ts.map +1 -0
- package/dist/src/core/runtime/loop/checkpoint.js +69 -0
- package/dist/src/core/runtime/loop/checkpoint.js.map +1 -0
- package/dist/src/core/runtime/loop/index.d.ts +4 -0
- package/dist/src/core/runtime/loop/index.d.ts.map +1 -0
- package/dist/src/core/runtime/loop/index.js +3 -0
- package/dist/src/core/runtime/loop/index.js.map +1 -0
- package/dist/src/core/runtime/loop/service.d.ts +11 -0
- package/dist/src/core/runtime/loop/service.d.ts.map +1 -0
- package/dist/src/core/runtime/loop/service.js +179 -0
- package/dist/src/core/runtime/loop/service.js.map +1 -0
- package/dist/src/core/runtime/{events.d.ts → loop/types.d.ts} +38 -38
- package/dist/src/core/runtime/loop/types.d.ts.map +1 -0
- package/dist/src/core/runtime/loop/types.js +2 -0
- package/dist/src/core/runtime/loop/types.js.map +1 -0
- package/dist/src/core/runtime/tools/index.d.ts +3 -0
- package/dist/src/core/runtime/tools/index.d.ts.map +1 -0
- package/dist/src/core/runtime/tools/index.js +2 -0
- package/dist/src/core/runtime/tools/index.js.map +1 -0
- package/dist/src/core/runtime/tools/service.d.ts +11 -0
- package/dist/src/core/runtime/tools/service.d.ts.map +1 -0
- package/dist/src/core/runtime/tools/service.js +54 -0
- package/dist/src/core/runtime/tools/service.js.map +1 -0
- package/dist/src/core/runtime/{default-tools.d.ts → tools/types.d.ts} +2 -4
- package/dist/src/core/runtime/tools/types.d.ts.map +1 -0
- package/dist/src/core/runtime/tools/types.js +2 -0
- package/dist/src/core/runtime/tools/types.js.map +1 -0
- package/dist/src/core/runtime/workspaces/index.d.ts +5 -0
- package/dist/src/core/runtime/workspaces/index.d.ts.map +1 -0
- package/dist/src/core/runtime/workspaces/index.js +4 -0
- package/dist/src/core/runtime/workspaces/index.js.map +1 -0
- package/dist/src/core/runtime/workspaces/repository.d.ts +14 -0
- package/dist/src/core/runtime/workspaces/repository.d.ts.map +1 -0
- package/dist/src/core/runtime/workspaces/repository.js +38 -0
- package/dist/src/core/runtime/workspaces/repository.js.map +1 -0
- package/dist/src/core/runtime/workspaces/schemas.d.ts +42 -0
- package/dist/src/core/runtime/workspaces/schemas.d.ts.map +1 -0
- package/dist/src/core/runtime/workspaces/schemas.js +26 -0
- package/dist/src/core/runtime/workspaces/schemas.js.map +1 -0
- package/dist/src/core/runtime/workspaces/service.d.ts +15 -0
- package/dist/src/core/runtime/workspaces/service.d.ts.map +1 -0
- package/dist/src/core/runtime/workspaces/service.js +177 -0
- package/dist/src/core/runtime/workspaces/service.js.map +1 -0
- package/dist/src/core/runtime/workspaces/types.d.ts +42 -0
- package/dist/src/core/runtime/workspaces/types.d.ts.map +1 -0
- package/dist/src/core/runtime/workspaces/types.js +2 -0
- package/dist/src/core/runtime/workspaces/types.js.map +1 -0
- package/dist/src/core/tools/toolkit.d.ts +1 -1
- package/dist/src/core/tools/toolkit.d.ts.map +1 -1
- package/dist/src/core/tools/toolkits/external-context/view-image.d.ts +1 -1
- package/dist/src/core/tools/toolkits/external-context/view-image.d.ts.map +1 -1
- package/dist/src/core/tools/toolkits/external-context/view-image.js +2 -2
- package/dist/src/core/tools/toolkits/external-context/view-image.js.map +1 -1
- package/dist/src/core/tools/toolkits/external-context/web-search.d.ts +1 -1
- package/dist/src/core/tools/toolkits/external-context/web-search.d.ts.map +1 -1
- package/dist/src/core/tools/toolkits/external-context/web-search.js +2 -2
- package/dist/src/core/tools/toolkits/external-context/web-search.js.map +1 -1
- package/dist/src/core/types.d.ts +1 -1
- package/dist/src/index.d.ts +24 -26
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -14
- package/dist/src/index.js.map +1 -1
- package/dist/src/integrations/cyberloop.d.ts +5 -4
- package/dist/src/integrations/cyberloop.d.ts.map +1 -1
- package/dist/src/integrations/cyberloop.js.map +1 -1
- package/dist/src/server/app.js +5 -5
- package/dist/src/server/app.js.map +1 -1
- package/dist/src/server/features/control-plane/controllers/ask.js +3 -3
- package/dist/src/server/features/control-plane/controllers/ask.js.map +1 -1
- package/dist/src/server/features/control-plane/controllers/chat-session-events.d.ts +1 -1
- package/dist/src/server/features/control-plane/controllers/chat-session-events.d.ts.map +1 -1
- package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.d.ts.map +1 -1
- package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.js +7 -7
- package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.js.map +1 -1
- package/dist/src/server/features/control-plane/controllers/control-plane-state.js +7 -7
- package/dist/src/server/features/control-plane/controllers/control-plane-state.js.map +1 -1
- package/dist/src/server/features/control-plane/controllers/heartbeat.d.ts +6 -5
- package/dist/src/server/features/control-plane/controllers/heartbeat.d.ts.map +1 -1
- package/dist/src/server/features/control-plane/controllers/heartbeat.js +31 -19
- package/dist/src/server/features/control-plane/controllers/heartbeat.js.map +1 -1
- package/dist/src/server/features/control-plane/router.d.ts +7 -7
- package/dist/src/server/features/control-plane/router.js +9 -9
- package/dist/src/server/features/control-plane/router.js.map +1 -1
- package/dist/src/server/features/control-plane/types.d.ts +5 -5
- package/dist/src/server/features/control-plane/types.d.ts.map +1 -1
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +7 -7
- package/dist/src/server/index.js.map +1 -1
- package/dist/src/server/router.d.ts +9 -9
- package/dist/src/server/types.d.ts +2 -2
- package/dist/src/server/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/src/cli/chat/state/approval-rules.d.ts +0 -3
- package/dist/src/cli/chat/state/approval-rules.d.ts.map +0 -1
- package/dist/src/cli/chat/state/approval-rules.js +0 -2
- package/dist/src/cli/chat/state/approval-rules.js.map +0 -1
- package/dist/src/core/agent/history.d.ts +0 -3
- package/dist/src/core/agent/history.d.ts.map +0 -1
- package/dist/src/core/agent/history.js +0 -36
- package/dist/src/core/agent/history.js.map +0 -1
- package/dist/src/core/agent/mutation-tracking.d.ts +0 -13
- package/dist/src/core/agent/mutation-tracking.d.ts.map +0 -1
- package/dist/src/core/agent/mutation-tracking.js +0 -71
- package/dist/src/core/agent/mutation-tracking.js.map +0 -1
- package/dist/src/core/agent/post-mutation.d.ts +0 -8
- package/dist/src/core/agent/post-mutation.d.ts.map +0 -1
- package/dist/src/core/agent/post-mutation.js +0 -9
- package/dist/src/core/agent/post-mutation.js.map +0 -1
- package/dist/src/core/agent/progress-reminders.d.ts +0 -10
- package/dist/src/core/agent/progress-reminders.d.ts.map +0 -1
- package/dist/src/core/agent/progress-reminders.js +0 -13
- package/dist/src/core/agent/progress-reminders.js.map +0 -1
- package/dist/src/core/agent/run-agent.d.ts +0 -41
- package/dist/src/core/agent/run-agent.d.ts.map +0 -1
- package/dist/src/core/agent/run-agent.js +0 -490
- package/dist/src/core/agent/run-agent.js.map +0 -1
- package/dist/src/core/agent/tool-dispatch.d.ts +0 -36
- package/dist/src/core/agent/tool-dispatch.d.ts.map +0 -1
- package/dist/src/core/agent/tool-dispatch.js +0 -120
- package/dist/src/core/agent/tool-dispatch.js.map +0 -1
- package/dist/src/core/agent/util.d.ts +0 -6
- package/dist/src/core/agent/util.d.ts.map +0 -1
- package/dist/src/core/agent/util.js.map +0 -1
- package/dist/src/core/approvals/default-policies.d.ts +0 -10
- package/dist/src/core/approvals/default-policies.d.ts.map +0 -1
- package/dist/src/core/approvals/default-policies.js +0 -37
- package/dist/src/core/approvals/default-policies.js.map +0 -1
- package/dist/src/core/approvals/policy-chain.d.ts +0 -9
- package/dist/src/core/approvals/policy-chain.d.ts.map +0 -1
- package/dist/src/core/approvals/policy-chain.js +0 -36
- package/dist/src/core/approvals/policy-chain.js.map +0 -1
- package/dist/src/core/approvals/remembered-rules.d.ts +0 -22
- package/dist/src/core/approvals/remembered-rules.d.ts.map +0 -1
- package/dist/src/core/approvals/remembered-rules.js +0 -284
- package/dist/src/core/approvals/remembered-rules.js.map +0 -1
- package/dist/src/core/approvals/surface.d.ts +0 -20
- package/dist/src/core/approvals/surface.d.ts.map +0 -1
- package/dist/src/core/approvals/surface.js +0 -22
- package/dist/src/core/approvals/surface.js.map +0 -1
- package/dist/src/core/runtime/agent-loop.d.ts +0 -45
- package/dist/src/core/runtime/agent-loop.d.ts.map +0 -1
- package/dist/src/core/runtime/agent-loop.js +0 -200
- package/dist/src/core/runtime/agent-loop.js.map +0 -1
- package/dist/src/core/runtime/api-keys.d.ts +0 -35
- package/dist/src/core/runtime/api-keys.d.ts.map +0 -1
- package/dist/src/core/runtime/api-keys.js +0 -78
- package/dist/src/core/runtime/api-keys.js.map +0 -1
- package/dist/src/core/runtime/daemon-registry.d.ts +0 -44
- package/dist/src/core/runtime/daemon-registry.d.ts.map +0 -1
- package/dist/src/core/runtime/daemon-registry.js +0 -147
- package/dist/src/core/runtime/daemon-registry.js.map +0 -1
- package/dist/src/core/runtime/default-tools.d.ts.map +0 -1
- package/dist/src/core/runtime/default-tools.js +0 -49
- package/dist/src/core/runtime/default-tools.js.map +0 -1
- package/dist/src/core/runtime/events.d.ts.map +0 -1
- package/dist/src/core/runtime/events.js +0 -41
- package/dist/src/core/runtime/events.js.map +0 -1
- package/dist/src/core/runtime/heartbeat-lucid.d.ts.map +0 -1
- package/dist/src/core/runtime/heartbeat-lucid.js +0 -188
- package/dist/src/core/runtime/heartbeat-lucid.js.map +0 -1
- package/dist/src/core/runtime/heartbeat-scheduler.d.ts.map +0 -1
- package/dist/src/core/runtime/heartbeat-scheduler.js +0 -135
- package/dist/src/core/runtime/heartbeat-scheduler.js.map +0 -1
- package/dist/src/core/runtime/heartbeat-store.d.ts +0 -20
- package/dist/src/core/runtime/heartbeat-store.d.ts.map +0 -1
- package/dist/src/core/runtime/heartbeat-store.js +0 -42
- package/dist/src/core/runtime/heartbeat-store.js.map +0 -1
- package/dist/src/core/runtime/heartbeat-task-state.d.ts +0 -5
- package/dist/src/core/runtime/heartbeat-task-state.d.ts.map +0 -1
- package/dist/src/core/runtime/heartbeat-task-state.js +0 -81
- package/dist/src/core/runtime/heartbeat-task-state.js.map +0 -1
- package/dist/src/core/runtime/heartbeat-task-store.d.ts.map +0 -1
- package/dist/src/core/runtime/heartbeat-task-store.js +0 -96
- package/dist/src/core/runtime/heartbeat-task-store.js.map +0 -1
- package/dist/src/core/runtime/heartbeat-views.d.ts +0 -52
- package/dist/src/core/runtime/heartbeat-views.d.ts.map +0 -1
- package/dist/src/core/runtime/heartbeat-views.js +0 -62
- package/dist/src/core/runtime/heartbeat-views.js.map +0 -1
- package/dist/src/core/runtime/heartbeat.d.ts +0 -41
- package/dist/src/core/runtime/heartbeat.d.ts.map +0 -1
- package/dist/src/core/runtime/heartbeat.js +0 -113
- package/dist/src/core/runtime/heartbeat.js.map +0 -1
- package/dist/src/core/runtime/runtime-hosts.d.ts +0 -30
- package/dist/src/core/runtime/runtime-hosts.d.ts.map +0 -1
- package/dist/src/core/runtime/runtime-hosts.js +0 -95
- package/dist/src/core/runtime/runtime-hosts.js.map +0 -1
- package/dist/src/core/runtime/workspaces.d.ts +0 -55
- package/dist/src/core/runtime/workspaces.d.ts.map +0 -1
- package/dist/src/core/runtime/workspaces.js +0 -168
- package/dist/src/core/runtime/workspaces.js.map +0 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ToolCall } from '../../core/types.js';
|
|
2
|
+
import type { ToolApprovalPolicy, ToolApprovalPolicyContext, ToolApprovalSurface } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Owns reusable approval policy constructors and the default policy chain.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ToolApprovalPolicies {
|
|
7
|
+
static default(): ToolApprovalPolicy[];
|
|
8
|
+
static toolRequiresApproval(): ToolApprovalPolicy;
|
|
9
|
+
static outsideWorkspaceInspection(): ToolApprovalPolicy;
|
|
10
|
+
static rememberedProjectRule(args: {
|
|
11
|
+
isApproved: (context: ToolApprovalPolicyContext) => boolean;
|
|
12
|
+
reason?: string;
|
|
13
|
+
}): ToolApprovalPolicy;
|
|
14
|
+
static humanSurface(surface: ToolApprovalSurface): ToolApprovalPolicy;
|
|
15
|
+
static isOutsideWorkspaceInspectionCall(args: {
|
|
16
|
+
call: ToolCall;
|
|
17
|
+
workspaceRoot?: string;
|
|
18
|
+
}): boolean;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=policies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../../../src/core/approvals/policies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAErG;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,OAAO,IAAI,kBAAkB,EAAE;IAOtC,MAAM,CAAC,oBAAoB,IAAI,kBAAkB;IAKjD,MAAM,CAAC,0BAA0B,IAAI,kBAAkB;IAOvD,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE;QACjC,UAAU,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC;QAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,kBAAkB;IAOtB,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB;IASrE,MAAM,CAAC,gCAAgC,CAAC,IAAI,EAAE;QAC5C,IAAI,EAAE,QAAQ,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO;CAyBZ"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { isAbsolute, relative, resolve } from 'node:path';
|
|
2
|
+
/**
|
|
3
|
+
* Owns reusable approval policy constructors and the default policy chain.
|
|
4
|
+
*/
|
|
5
|
+
export class ToolApprovalPolicies {
|
|
6
|
+
static default() {
|
|
7
|
+
return [
|
|
8
|
+
ToolApprovalPolicies.toolRequiresApproval(),
|
|
9
|
+
ToolApprovalPolicies.outsideWorkspaceInspection(),
|
|
10
|
+
];
|
|
11
|
+
}
|
|
12
|
+
static toolRequiresApproval() {
|
|
13
|
+
return ({ tool }) => tool.requiresApproval ? { type: 'request', reason: `${tool.name} requires approval` } : undefined;
|
|
14
|
+
}
|
|
15
|
+
static outsideWorkspaceInspection() {
|
|
16
|
+
return ({ call, workspaceRoot }) => ToolApprovalPolicies.isOutsideWorkspaceInspectionCall({ call, workspaceRoot }) ?
|
|
17
|
+
{ type: 'request', reason: `${call.tool} targets a path outside the workspace` }
|
|
18
|
+
: undefined;
|
|
19
|
+
}
|
|
20
|
+
static rememberedProjectRule(args) {
|
|
21
|
+
return (context) => args.isApproved(context) ?
|
|
22
|
+
{ type: 'allow', reason: args.reason ?? 'Approved by saved project rule' }
|
|
23
|
+
: undefined;
|
|
24
|
+
}
|
|
25
|
+
static humanSurface(surface) {
|
|
26
|
+
return async (context) => {
|
|
27
|
+
const decision = await surface(context);
|
|
28
|
+
return decision.approved ?
|
|
29
|
+
{ type: 'allow', reason: decision.reason }
|
|
30
|
+
: { type: 'deny', reason: decision.reason };
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
static isOutsideWorkspaceInspectionCall(args) {
|
|
34
|
+
const { call, workspaceRoot = process.cwd() } = args;
|
|
35
|
+
if (!['read_file', 'list_files', 'search_files', 'edit_file'].includes(call.tool)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
const input = call.input;
|
|
39
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
const record = input;
|
|
43
|
+
const rawPath = typeof record.path === 'string'
|
|
44
|
+
? record.path
|
|
45
|
+
: call.tool === 'search_files' ? '.'
|
|
46
|
+
: undefined;
|
|
47
|
+
if (!rawPath) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
const resolvedWorkspaceRoot = resolve(workspaceRoot);
|
|
51
|
+
const resolvedTarget = resolve(resolvedWorkspaceRoot, rawPath);
|
|
52
|
+
const relativeTarget = relative(resolvedWorkspaceRoot, resolvedTarget);
|
|
53
|
+
return relativeTarget.startsWith('..') || isAbsolute(relativeTarget);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=policies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policies.js","sourceRoot":"","sources":["../../../../src/core/approvals/policies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ProjectApprovalRule } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Owns persisted approval-rule JSON validation and tolerant legacy parsing.
|
|
4
|
+
*
|
|
5
|
+
* Reads are forgiving so a malformed or older approval file does not crash the
|
|
6
|
+
* host. Writes are strict and go through the same Zod schema used for reads.
|
|
7
|
+
*/
|
|
8
|
+
export declare class ProjectApprovalRuleCodec {
|
|
9
|
+
static parseList(value: unknown): ProjectApprovalRule[];
|
|
10
|
+
static serialize(rules: ProjectApprovalRule[]): string;
|
|
11
|
+
private static parseRule;
|
|
12
|
+
private static parseShellRule;
|
|
13
|
+
private static dedupeRules;
|
|
14
|
+
private static normalizeShellCapability;
|
|
15
|
+
private static readonly SHELL_CAPABILITIES;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../../../../src/core/approvals/remembered-rules/codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAKtD;;;;;GAKG;AACH,qBAAa,wBAAwB;IACnC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,EAAE;IAUvD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,MAAM;IAItD,OAAO,CAAC,MAAM,CAAC,SAAS;IA+CxB,OAAO,CAAC,MAAM,CAAC,cAAc;IAmC7B,OAAO,CAAC,MAAM,CAAC,WAAW;IAa1B,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAMvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAcvC;CACJ"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { ProjectApprovalRules } from './service.js';
|
|
2
|
+
import { ProjectApprovalRuleCandidateSchema, ProjectApprovalRuleListSchema } from './schemas.js';
|
|
3
|
+
/**
|
|
4
|
+
* Owns persisted approval-rule JSON validation and tolerant legacy parsing.
|
|
5
|
+
*
|
|
6
|
+
* Reads are forgiving so a malformed or older approval file does not crash the
|
|
7
|
+
* host. Writes are strict and go through the same Zod schema used for reads.
|
|
8
|
+
*/
|
|
9
|
+
export class ProjectApprovalRuleCodec {
|
|
10
|
+
static parseList(value) {
|
|
11
|
+
if (!Array.isArray(value)) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
return ProjectApprovalRuleCodec.dedupeRules(value.flatMap((rule) => ProjectApprovalRuleCodec.parseRule(rule)));
|
|
15
|
+
}
|
|
16
|
+
static serialize(rules) {
|
|
17
|
+
return `${JSON.stringify(ProjectApprovalRuleListSchema.parse(rules), null, 2)}\n`;
|
|
18
|
+
}
|
|
19
|
+
static parseRule(value) {
|
|
20
|
+
const parsed = ProjectApprovalRuleCandidateSchema.safeParse(value);
|
|
21
|
+
if (!parsed.success) {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
const candidate = parsed.data;
|
|
25
|
+
if (candidate.tool === 'run_shell_mutate' && typeof candidate.command === 'string' && typeof candidate.createdAt === 'string') {
|
|
26
|
+
return ProjectApprovalRuleCodec.parseShellRule({
|
|
27
|
+
mode: candidate.mode,
|
|
28
|
+
command: candidate.command,
|
|
29
|
+
scope: candidate.scope,
|
|
30
|
+
capability: candidate.capability,
|
|
31
|
+
createdAt: candidate.createdAt,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
if (candidate.tool === 'edit_file' && candidate.mode === 'tool' && typeof candidate.createdAt === 'string') {
|
|
35
|
+
return [{
|
|
36
|
+
tool: 'edit_file',
|
|
37
|
+
mode: 'tool',
|
|
38
|
+
command: '*',
|
|
39
|
+
scope: 'workspace',
|
|
40
|
+
capability: 'file_edit',
|
|
41
|
+
createdAt: candidate.createdAt,
|
|
42
|
+
}];
|
|
43
|
+
}
|
|
44
|
+
if ((candidate.tool === 'read_file' || candidate.tool === 'list_files') &&
|
|
45
|
+
candidate.mode === 'exact' &&
|
|
46
|
+
typeof candidate.command === 'string' &&
|
|
47
|
+
typeof candidate.createdAt === 'string') {
|
|
48
|
+
return [{
|
|
49
|
+
tool: candidate.tool,
|
|
50
|
+
mode: 'exact',
|
|
51
|
+
command: ProjectApprovalRules.normalizePath(candidate.command),
|
|
52
|
+
scope: 'outside_workspace',
|
|
53
|
+
capability: 'file_inspection',
|
|
54
|
+
createdAt: candidate.createdAt,
|
|
55
|
+
}];
|
|
56
|
+
}
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
static parseShellRule(value) {
|
|
60
|
+
if (value.mode === 'exact' || value.mode === 'prefix') {
|
|
61
|
+
return [{
|
|
62
|
+
tool: 'run_shell_mutate',
|
|
63
|
+
mode: value.mode,
|
|
64
|
+
command: ProjectApprovalRules.normalizeCommand(value.command),
|
|
65
|
+
scope: value.scope === 'external' ? 'external' : value.scope === 'inspect' ? 'inspect' : 'workspace',
|
|
66
|
+
capability: ProjectApprovalRuleCodec.normalizeShellCapability(value.capability),
|
|
67
|
+
createdAt: value.createdAt,
|
|
68
|
+
}];
|
|
69
|
+
}
|
|
70
|
+
const normalizedCommand = ProjectApprovalRules.normalizeCommand(value.command);
|
|
71
|
+
const legacyVerificationPrefix = ProjectApprovalRules.buildLegacyVerificationPrefix(normalizedCommand);
|
|
72
|
+
if (legacyVerificationPrefix) {
|
|
73
|
+
return [{
|
|
74
|
+
tool: 'run_shell_mutate',
|
|
75
|
+
mode: 'prefix',
|
|
76
|
+
command: legacyVerificationPrefix,
|
|
77
|
+
scope: 'workspace',
|
|
78
|
+
capability: 'verification',
|
|
79
|
+
createdAt: value.createdAt,
|
|
80
|
+
}];
|
|
81
|
+
}
|
|
82
|
+
const migrated = ProjectApprovalRules.createForCommand(normalizedCommand);
|
|
83
|
+
return [{ ...migrated, createdAt: value.createdAt }];
|
|
84
|
+
}
|
|
85
|
+
static dedupeRules(rules) {
|
|
86
|
+
const seen = new Set();
|
|
87
|
+
return rules.filter((rule) => {
|
|
88
|
+
const key = `${rule.tool}:${rule.mode}:${rule.command}`;
|
|
89
|
+
if (seen.has(key)) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
seen.add(key);
|
|
93
|
+
return true;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
static normalizeShellCapability(value) {
|
|
97
|
+
return ProjectApprovalRuleCodec.SHELL_CAPABILITIES.has(value)
|
|
98
|
+
? value
|
|
99
|
+
: 'unknown_workspace';
|
|
100
|
+
}
|
|
101
|
+
static SHELL_CAPABILITIES = new Set([
|
|
102
|
+
'workspace_listing',
|
|
103
|
+
'file_inspection',
|
|
104
|
+
'workspace_search',
|
|
105
|
+
'structured_inspection',
|
|
106
|
+
'environment_inspection',
|
|
107
|
+
'git_inspection',
|
|
108
|
+
'dependency',
|
|
109
|
+
'verification',
|
|
110
|
+
'formatting',
|
|
111
|
+
'file_operation',
|
|
112
|
+
'git_staging',
|
|
113
|
+
'project_script',
|
|
114
|
+
'unknown_workspace',
|
|
115
|
+
]);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../../../../src/core/approvals/remembered-rules/codec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kCAAkC,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAEjG;;;;;GAKG;AACH,MAAM,OAAO,wBAAwB;IACnC,MAAM,CAAC,SAAS,CAAC,KAAc;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,wBAAwB,CAAC,WAAW,CACzC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAClE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAA4B;QAC3C,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,6BAA6B,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACpF,CAAC;IAEO,MAAM,CAAC,SAAS,CAAC,KAAc;QACrC,MAAM,MAAM,GAAG,kCAAkC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;QAC9B,IAAI,SAAS,CAAC,IAAI,KAAK,kBAAkB,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9H,OAAO,wBAAwB,CAAC,cAAc,CAAC;gBAC7C,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,UAAU,EAAE,SAAS,CAAC,UAAU;gBAChC,SAAS,EAAE,SAAS,CAAC,SAAS;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3G,OAAO,CAAC;oBACN,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,GAAG;oBACZ,KAAK,EAAE,WAAW;oBAClB,UAAU,EAAE,WAAW;oBACvB,SAAS,EAAE,SAAS,CAAC,SAAS;iBAC/B,CAAC,CAAC;QACL,CAAC;QAED,IACE,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,CAAC;YACnE,SAAS,CAAC,IAAI,KAAK,OAAO;YAC1B,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;YACrC,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,EACvC,CAAC;YACD,OAAO,CAAC;oBACN,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,oBAAoB,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC;oBAC9D,KAAK,EAAE,mBAAmB;oBAC1B,UAAU,EAAE,iBAAiB;oBAC7B,SAAS,EAAE,SAAS,CAAC,SAAS;iBAC/B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,KAM7B;QACC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtD,OAAO,CAAC;oBACN,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;oBAC7D,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;oBACpG,UAAU,EAAE,wBAAwB,CAAC,wBAAwB,CAAC,KAAK,CAAC,UAAU,CAAC;oBAC/E,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/E,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,6BAA6B,CAAC,iBAAiB,CAAC,CAAC;QACvG,IAAI,wBAAwB,EAAE,CAAC;YAC7B,OAAO,CAAC;oBACN,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,KAAK,EAAE,WAAW;oBAClB,UAAU,EAAE,cAAc;oBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QAC1E,OAAO,CAAC,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,KAA4B;QACrD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,wBAAwB,CAAC,KAAyB;QAC/D,OAAO,wBAAwB,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAA2B,CAAC;YACjF,CAAC,CAAC,KAA2B;YAC7B,CAAC,CAAC,mBAAmB,CAAC;IAC1B,CAAC;IAEO,MAAM,CAAU,kBAAkB,GAAG,IAAI,GAAG,CAAqB;QACvE,mBAAmB;QACnB,iBAAiB;QACjB,kBAAkB;QAClB,uBAAuB;QACvB,wBAAwB;QACxB,gBAAgB;QAChB,YAAY;QACZ,cAAc;QACd,YAAY;QACZ,gBAAgB;QAChB,aAAa;QACb,gBAAgB;QAChB,mBAAmB;KACpB,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { ProjectApprovalRuleCodec } from './codec.js';
|
|
2
|
+
export { FileProjectApprovalRuleRepository } from './repository.js';
|
|
3
|
+
export { ProjectApprovalRules } from './service.js';
|
|
4
|
+
export type { ApprovalMode, ApprovalRuleTool, ProjectApprovalRule } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/approvals/remembered-rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,iCAAiC,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/approvals/remembered-rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,iCAAiC,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ProjectApprovalRule } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Owns file IO for remembered project approval rules.
|
|
4
|
+
*/
|
|
5
|
+
export declare class FileProjectApprovalRuleRepository {
|
|
6
|
+
private readonly filePath;
|
|
7
|
+
constructor(filePath: string);
|
|
8
|
+
list(): ProjectApprovalRule[];
|
|
9
|
+
save(rules: ProjectApprovalRule[]): void;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../src/core/approvals/remembered-rules/repository.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;GAEG;AACH,qBAAa,iCAAiC;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAE7C,IAAI,IAAI,mBAAmB,EAAE;IAe7B,IAAI,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,IAAI;CAIzC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
import { ProjectApprovalRuleCodec } from './codec.js';
|
|
4
|
+
/**
|
|
5
|
+
* Owns file IO for remembered project approval rules.
|
|
6
|
+
*/
|
|
7
|
+
export class FileProjectApprovalRuleRepository {
|
|
8
|
+
filePath;
|
|
9
|
+
constructor(filePath) {
|
|
10
|
+
this.filePath = filePath;
|
|
11
|
+
}
|
|
12
|
+
list() {
|
|
13
|
+
try {
|
|
14
|
+
if (!existsSync(this.filePath)) {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
return ProjectApprovalRuleCodec.parseList(JSON.parse(readFileSync(this.filePath, 'utf8')));
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
process.stderr.write(`Failed to load project approval rules from ${this.filePath}: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
save(rules) {
|
|
25
|
+
mkdirSync(dirname(this.filePath), { recursive: true });
|
|
26
|
+
writeFileSync(this.filePath, ProjectApprovalRuleCodec.serialize(rules));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../../src/core/approvals/remembered-rules/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAGtD;;GAEG;AACH,MAAM,OAAO,iCAAiC;IACf;IAA7B,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAEjD,IAAI;QACF,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAY,CAAC,CAAC;QACxG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8CAA8C,IAAI,CAAC,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAC3H,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAA4B;QAC/B,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,wBAAwB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,CAAC;CACF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const ApprovalModeSchema: z.ZodEnum<{
|
|
3
|
+
tool: "tool";
|
|
4
|
+
exact: "exact";
|
|
5
|
+
prefix: "prefix";
|
|
6
|
+
}>;
|
|
7
|
+
export declare const ApprovalRuleToolSchema: z.ZodEnum<{
|
|
8
|
+
list_files: "list_files";
|
|
9
|
+
read_file: "read_file";
|
|
10
|
+
edit_file: "edit_file";
|
|
11
|
+
run_shell_mutate: "run_shell_mutate";
|
|
12
|
+
}>;
|
|
13
|
+
export declare const ProjectApprovalRuleSchema: z.ZodObject<{
|
|
14
|
+
tool: z.ZodEnum<{
|
|
15
|
+
list_files: "list_files";
|
|
16
|
+
read_file: "read_file";
|
|
17
|
+
edit_file: "edit_file";
|
|
18
|
+
run_shell_mutate: "run_shell_mutate";
|
|
19
|
+
}>;
|
|
20
|
+
mode: z.ZodEnum<{
|
|
21
|
+
tool: "tool";
|
|
22
|
+
exact: "exact";
|
|
23
|
+
prefix: "prefix";
|
|
24
|
+
}>;
|
|
25
|
+
command: z.ZodString;
|
|
26
|
+
scope: z.ZodString;
|
|
27
|
+
capability: z.ZodString;
|
|
28
|
+
createdAt: z.ZodString;
|
|
29
|
+
}, z.core.$strip>;
|
|
30
|
+
export declare const ProjectApprovalRuleListSchema: z.ZodArray<z.ZodObject<{
|
|
31
|
+
tool: z.ZodEnum<{
|
|
32
|
+
list_files: "list_files";
|
|
33
|
+
read_file: "read_file";
|
|
34
|
+
edit_file: "edit_file";
|
|
35
|
+
run_shell_mutate: "run_shell_mutate";
|
|
36
|
+
}>;
|
|
37
|
+
mode: z.ZodEnum<{
|
|
38
|
+
tool: "tool";
|
|
39
|
+
exact: "exact";
|
|
40
|
+
prefix: "prefix";
|
|
41
|
+
}>;
|
|
42
|
+
command: z.ZodString;
|
|
43
|
+
scope: z.ZodString;
|
|
44
|
+
capability: z.ZodString;
|
|
45
|
+
createdAt: z.ZodString;
|
|
46
|
+
}, z.core.$strip>>;
|
|
47
|
+
export declare const ProjectApprovalRuleCandidateSchema: z.ZodObject<{
|
|
48
|
+
tool: z.ZodOptional<z.ZodString>;
|
|
49
|
+
mode: z.ZodOptional<z.ZodString>;
|
|
50
|
+
command: z.ZodOptional<z.ZodString>;
|
|
51
|
+
scope: z.ZodOptional<z.ZodString>;
|
|
52
|
+
capability: z.ZodOptional<z.ZodString>;
|
|
53
|
+
createdAt: z.ZodOptional<z.ZodString>;
|
|
54
|
+
}, z.core.$loose>;
|
|
55
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../../src/core/approvals/remembered-rules/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;;;;EACsC,CAAC;AAEtE,eAAO,MAAM,sBAAsB;;;;;EACyB,CAAC;AAE7D,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;iBAOoB,CAAC;AAE3D,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;kBACyB,CAAC;AAEpE,eAAO,MAAM,kCAAkC;;;;;;;iBAO2C,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const ApprovalModeSchema = z.enum(['exact', 'prefix', 'tool'])
|
|
3
|
+
.describe('How the remembered approval matches future tool calls.');
|
|
4
|
+
export const ApprovalRuleToolSchema = z.enum(['run_shell_mutate', 'edit_file', 'read_file', 'list_files'])
|
|
5
|
+
.describe('Tool covered by the remembered approval rule.');
|
|
6
|
+
export const ProjectApprovalRuleSchema = z.object({
|
|
7
|
+
tool: ApprovalRuleToolSchema,
|
|
8
|
+
mode: ApprovalModeSchema,
|
|
9
|
+
command: z.string().describe('Normalized command, path, or wildcard target covered by the rule.'),
|
|
10
|
+
scope: z.string().describe('Execution or file scope covered by the approval.'),
|
|
11
|
+
capability: z.string().describe('Capability category covered by the approval.'),
|
|
12
|
+
createdAt: z.string().describe('ISO timestamp for when the rule was created.'),
|
|
13
|
+
}).describe('Persisted remembered project approval rule.');
|
|
14
|
+
export const ProjectApprovalRuleListSchema = z.array(ProjectApprovalRuleSchema)
|
|
15
|
+
.describe('Persisted list of remembered project approval rules.');
|
|
16
|
+
export const ProjectApprovalRuleCandidateSchema = z.object({
|
|
17
|
+
tool: z.string().optional().describe('Persisted tool name from current or legacy approval data.'),
|
|
18
|
+
mode: z.string().optional().describe('Persisted match mode from current or legacy approval data.'),
|
|
19
|
+
command: z.string().optional().describe('Persisted command, path, or wildcard target.'),
|
|
20
|
+
scope: z.string().optional().describe('Persisted execution or file scope.'),
|
|
21
|
+
capability: z.string().optional().describe('Persisted capability category.'),
|
|
22
|
+
createdAt: z.string().optional().describe('Persisted creation timestamp.'),
|
|
23
|
+
}).passthrough().describe('Tolerant approval-rule candidate used when reading disk data.');
|
|
24
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../../src/core/approvals/remembered-rules/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;KAClE,QAAQ,CAAC,wDAAwD,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;KACvG,QAAQ,CAAC,+CAA+C,CAAC,CAAC;AAE7D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,sBAAsB;IAC5B,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;IACjG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IAC9E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAC/E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;CAC/E,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC,CAAC;AAE3D,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC;KAC5E,QAAQ,CAAC,sDAAsD,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC;IACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;IACjG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;IAClG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAC3E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC5E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC3E,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ToolCall } from '../../../core/types.js';
|
|
2
|
+
import type { ProjectApprovalRule } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Owns remembered approval rule semantics: target extraction, matching,
|
|
5
|
+
* normalization, rule creation, and user-facing descriptions.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ProjectApprovalRules {
|
|
8
|
+
static normalizeCommand(command: string): string;
|
|
9
|
+
static findMatching(args: {
|
|
10
|
+
rules: ProjectApprovalRule[];
|
|
11
|
+
tool: string;
|
|
12
|
+
input: unknown;
|
|
13
|
+
}): ProjectApprovalRule | undefined;
|
|
14
|
+
static createForCommand(command: string): ProjectApprovalRule;
|
|
15
|
+
static createForCall(call: ToolCall): ProjectApprovalRule | undefined;
|
|
16
|
+
static describe(rule: ProjectApprovalRule): string;
|
|
17
|
+
static extractTarget(args: {
|
|
18
|
+
tool: string;
|
|
19
|
+
input: unknown;
|
|
20
|
+
}): string | undefined;
|
|
21
|
+
static normalizePath(path: string): string;
|
|
22
|
+
static buildLegacyVerificationPrefix(command: string): string | undefined;
|
|
23
|
+
private static createShellRule;
|
|
24
|
+
private static shouldUseVerificationPrefixApproval;
|
|
25
|
+
private static buildVerificationPrefix;
|
|
26
|
+
private static canonicalizeVerificationCommand;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../../src/core/approvals/remembered-rules/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAOhD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIhD,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE;QACxB,KAAK,EAAE,mBAAmB,EAAE,CAAC;QAC7B,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;KAChB,GAAG,mBAAmB,GAAG,SAAS;IA0BnC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB;IAI7D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,mBAAmB,GAAG,SAAS;IAgCrE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM;IAgBlD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;KAChB,GAAG,MAAM,GAAG,SAAS;IA8BtB,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAS1C,MAAM,CAAC,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAczE,OAAO,CAAC,MAAM,CAAC,eAAe;IAuC9B,OAAO,CAAC,MAAM,CAAC,mCAAmC;IAYlD,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAqBtC,OAAO,CAAC,MAAM,CAAC,+BAA+B;CAgC/C"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { classifyShellCommandPolicy, DEFAULT_MUTATE_RULES, } from '../../../core/tools/toolkits/shell-process/run-shell.js';
|
|
2
|
+
/**
|
|
3
|
+
* Owns remembered approval rule semantics: target extraction, matching,
|
|
4
|
+
* normalization, rule creation, and user-facing descriptions.
|
|
5
|
+
*/
|
|
6
|
+
export class ProjectApprovalRules {
|
|
7
|
+
static normalizeCommand(command) {
|
|
8
|
+
return ProjectApprovalRules.canonicalizeVerificationCommand(command.trim().replace(/\s+/g, ' '));
|
|
9
|
+
}
|
|
10
|
+
static findMatching(args) {
|
|
11
|
+
const target = ProjectApprovalRules.extractTarget({
|
|
12
|
+
tool: args.tool,
|
|
13
|
+
input: args.input,
|
|
14
|
+
});
|
|
15
|
+
if (!target) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
return args.rules.find((rule) => {
|
|
19
|
+
if (rule.tool !== args.tool) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
if (rule.mode === 'tool') {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (rule.mode === 'prefix') {
|
|
26
|
+
return target === rule.command || target.startsWith(`${rule.command} `);
|
|
27
|
+
}
|
|
28
|
+
return rule.command === target;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
static createForCommand(command) {
|
|
32
|
+
return ProjectApprovalRules.createShellRule(ProjectApprovalRules.normalizeCommand(command));
|
|
33
|
+
}
|
|
34
|
+
static createForCall(call) {
|
|
35
|
+
if (call.tool === 'edit_file') {
|
|
36
|
+
return {
|
|
37
|
+
tool: 'edit_file',
|
|
38
|
+
mode: 'tool',
|
|
39
|
+
command: '*',
|
|
40
|
+
scope: 'workspace',
|
|
41
|
+
capability: 'file_edit',
|
|
42
|
+
createdAt: new Date().toISOString(),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
if (call.tool === 'read_file' || call.tool === 'list_files') {
|
|
46
|
+
const target = ProjectApprovalRules.extractTarget({ tool: call.tool, input: call.input });
|
|
47
|
+
return target ? {
|
|
48
|
+
tool: call.tool,
|
|
49
|
+
mode: 'exact',
|
|
50
|
+
command: target,
|
|
51
|
+
scope: 'outside_workspace',
|
|
52
|
+
capability: 'file_inspection',
|
|
53
|
+
createdAt: new Date().toISOString(),
|
|
54
|
+
} : undefined;
|
|
55
|
+
}
|
|
56
|
+
if (call.tool !== 'run_shell_mutate') {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
const target = ProjectApprovalRules.extractTarget({ tool: call.tool, input: call.input });
|
|
60
|
+
return target ? ProjectApprovalRules.createShellRule(target) : undefined;
|
|
61
|
+
}
|
|
62
|
+
static describe(rule) {
|
|
63
|
+
if (rule.tool === 'edit_file') {
|
|
64
|
+
return 'allow edit_file for this project';
|
|
65
|
+
}
|
|
66
|
+
if (rule.tool === 'read_file' || rule.tool === 'list_files') {
|
|
67
|
+
return `allow ${rule.tool} for this project`;
|
|
68
|
+
}
|
|
69
|
+
if (rule.mode === 'prefix') {
|
|
70
|
+
return `allow ${rule.command} command family for this project`;
|
|
71
|
+
}
|
|
72
|
+
return 'allow exact command';
|
|
73
|
+
}
|
|
74
|
+
static extractTarget(args) {
|
|
75
|
+
if (args.tool === 'run_shell_mutate') {
|
|
76
|
+
if (typeof args.input === 'string') {
|
|
77
|
+
return ProjectApprovalRules.normalizeCommand(args.input);
|
|
78
|
+
}
|
|
79
|
+
if (!args.input || typeof args.input !== 'object' || Array.isArray(args.input)) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
const command = args.input.command;
|
|
83
|
+
return typeof command === 'string' && command.trim() ? ProjectApprovalRules.normalizeCommand(command) : undefined;
|
|
84
|
+
}
|
|
85
|
+
if (args.tool === 'edit_file' || args.tool === 'read_file' || args.tool === 'list_files') {
|
|
86
|
+
if (typeof args.input === 'string') {
|
|
87
|
+
return ProjectApprovalRules.normalizePath(args.input);
|
|
88
|
+
}
|
|
89
|
+
if (!args.input || typeof args.input !== 'object' || Array.isArray(args.input)) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const path = args.input.path;
|
|
93
|
+
return typeof path === 'string' && path.trim() ? ProjectApprovalRules.normalizePath(path) : undefined;
|
|
94
|
+
}
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
static normalizePath(path) {
|
|
98
|
+
const trimmed = path.trim();
|
|
99
|
+
if (trimmed === './' || trimmed === '.') {
|
|
100
|
+
return '.';
|
|
101
|
+
}
|
|
102
|
+
return trimmed.replace(/\/+$/, '') || '.';
|
|
103
|
+
}
|
|
104
|
+
static buildLegacyVerificationPrefix(command) {
|
|
105
|
+
const argv = command.split(' ').filter(Boolean);
|
|
106
|
+
if (argv[0] !== 'yarn') {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
const subcommand = argv[1];
|
|
110
|
+
if (subcommand === 'test' || subcommand === 'build' || subcommand === 'lint' || subcommand === 'vitest') {
|
|
111
|
+
return `yarn ${subcommand}`;
|
|
112
|
+
}
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
static createShellRule(command) {
|
|
116
|
+
const policy = classifyShellCommandPolicy(command, {
|
|
117
|
+
toolName: 'run_shell_mutate',
|
|
118
|
+
rules: DEFAULT_MUTATE_RULES,
|
|
119
|
+
allowUnknown: true,
|
|
120
|
+
});
|
|
121
|
+
if (!('error' in policy) && ProjectApprovalRules.shouldUseVerificationPrefixApproval(command, policy.scope, policy.capability)) {
|
|
122
|
+
return {
|
|
123
|
+
tool: 'run_shell_mutate',
|
|
124
|
+
mode: 'prefix',
|
|
125
|
+
command: ProjectApprovalRules.buildVerificationPrefix(command),
|
|
126
|
+
scope: policy.scope,
|
|
127
|
+
capability: policy.capability,
|
|
128
|
+
createdAt: new Date().toISOString(),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
if (!('error' in policy)) {
|
|
132
|
+
return {
|
|
133
|
+
tool: 'run_shell_mutate',
|
|
134
|
+
mode: 'exact',
|
|
135
|
+
command,
|
|
136
|
+
scope: policy.scope,
|
|
137
|
+
capability: policy.capability,
|
|
138
|
+
createdAt: new Date().toISOString(),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
tool: 'run_shell_mutate',
|
|
143
|
+
mode: 'exact',
|
|
144
|
+
command,
|
|
145
|
+
scope: 'workspace',
|
|
146
|
+
capability: 'unknown_workspace',
|
|
147
|
+
createdAt: new Date().toISOString(),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
static shouldUseVerificationPrefixApproval(command, scope, capability) {
|
|
151
|
+
if (scope !== 'workspace' || capability !== 'verification') {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
return ProjectApprovalRules.buildVerificationPrefix(command) !== command;
|
|
155
|
+
}
|
|
156
|
+
static buildVerificationPrefix(command) {
|
|
157
|
+
const argv = command.split(' ').filter(Boolean);
|
|
158
|
+
if (argv.length === 0) {
|
|
159
|
+
return command;
|
|
160
|
+
}
|
|
161
|
+
if (argv[0] === 'yarn' && typeof argv[1] === 'string' && !argv[1].startsWith('-')) {
|
|
162
|
+
return `${argv[0]} ${argv[1]}`;
|
|
163
|
+
}
|
|
164
|
+
if (argv[0] === 'vitest' && typeof argv[1] === 'string' && !argv[1].startsWith('-')) {
|
|
165
|
+
return `${argv[0]} ${argv[1]}`;
|
|
166
|
+
}
|
|
167
|
+
if (argv[0] === 'tsc') {
|
|
168
|
+
return 'tsc';
|
|
169
|
+
}
|
|
170
|
+
return command;
|
|
171
|
+
}
|
|
172
|
+
static canonicalizeVerificationCommand(command) {
|
|
173
|
+
const argv = command.split(' ').filter(Boolean);
|
|
174
|
+
if (argv.length === 0) {
|
|
175
|
+
return command;
|
|
176
|
+
}
|
|
177
|
+
if (argv[0] === 'npx' && typeof argv[1] === 'string') {
|
|
178
|
+
if (argv[1] === 'tsc') {
|
|
179
|
+
return ['tsc', ...argv.slice(2)].join(' ');
|
|
180
|
+
}
|
|
181
|
+
if (argv[1] === 'vitest') {
|
|
182
|
+
return ['vitest', ...argv.slice(2)].join(' ');
|
|
183
|
+
}
|
|
184
|
+
if (argv[1] === 'eslint') {
|
|
185
|
+
return ['eslint', ...argv.slice(2)].join(' ');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (argv[0] === './node_modules/.bin/tsc' || argv[0] === 'node_modules/.bin/tsc') {
|
|
189
|
+
return ['tsc', ...argv.slice(1)].join(' ');
|
|
190
|
+
}
|
|
191
|
+
if (argv[0] === './node_modules/.bin/vitest' || argv[0] === 'node_modules/.bin/vitest') {
|
|
192
|
+
return ['vitest', ...argv.slice(1)].join(' ');
|
|
193
|
+
}
|
|
194
|
+
if (argv[0] === './node_modules/.bin/eslint' || argv[0] === 'node_modules/.bin/eslint') {
|
|
195
|
+
return ['eslint', ...argv.slice(1)].join(' ');
|
|
196
|
+
}
|
|
197
|
+
return command;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=service.js.map
|