@a5c-ai/babysitter-sdk 0.0.186 → 0.0.187-staging.02141cfa
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/dist/breakpoints/evaluator.d.ts +25 -0
- package/dist/breakpoints/evaluator.d.ts.map +1 -0
- package/dist/breakpoints/evaluator.js +72 -0
- package/dist/breakpoints/index.d.ts +7 -0
- package/dist/breakpoints/index.d.ts.map +1 -0
- package/dist/breakpoints/index.js +16 -0
- package/dist/breakpoints/patterns.d.ts +24 -0
- package/dist/breakpoints/patterns.d.ts.map +1 -0
- package/dist/breakpoints/patterns.js +88 -0
- package/dist/breakpoints/rules.d.ts +26 -0
- package/dist/breakpoints/rules.d.ts.map +1 -0
- package/dist/breakpoints/rules.js +110 -0
- package/dist/breakpoints/types.d.ts +48 -0
- package/dist/breakpoints/types.d.ts.map +1 -0
- package/dist/breakpoints/types.js +7 -0
- package/dist/cli/commandRegistry.d.ts +27 -0
- package/dist/cli/commandRegistry.d.ts.map +1 -0
- package/dist/cli/commandRegistry.js +125 -0
- package/dist/cli/commands/breakpointRules.d.ts +26 -0
- package/dist/cli/commands/breakpointRules.d.ts.map +1 -0
- package/dist/cli/commands/breakpointRules.js +219 -0
- package/dist/cli/commands/costStats.d.ts +13 -0
- package/dist/cli/commands/costStats.d.ts.map +1 -0
- package/dist/cli/commands/costStats.js +319 -0
- package/dist/cli/commands/harnessCreateRun.d.ts.map +1 -1
- package/dist/cli/commands/harnessCreateRun.js +13 -9
- package/dist/cli/commands/harnessPhase1.d.ts +1 -0
- package/dist/cli/commands/harnessPhase1.d.ts.map +1 -1
- package/dist/cli/commands/harnessPhase1.js +12 -12
- package/dist/cli/commands/harnessPhase2.d.ts +8 -0
- package/dist/cli/commands/harnessPhase2.d.ts.map +1 -1
- package/dist/cli/commands/harnessPhase2.js +289 -75
- package/dist/cli/commands/harnessPrompts.d.ts +1 -0
- package/dist/cli/commands/harnessPrompts.d.ts.map +1 -1
- package/dist/cli/commands/harnessPrompts.js +13 -0
- package/dist/cli/commands/harnessResumeRun.d.ts +1 -0
- package/dist/cli/commands/harnessResumeRun.d.ts.map +1 -1
- package/dist/cli/commands/harnessResumeRun.js +13 -11
- package/dist/cli/commands/harnessUtils.d.ts +18 -5
- package/dist/cli/commands/harnessUtils.d.ts.map +1 -1
- package/dist/cli/commands/harnessUtils.js +25 -8
- package/dist/cli/commands/instructions.d.ts +1 -0
- package/dist/cli/commands/instructions.d.ts.map +1 -1
- package/dist/cli/commands/instructions.js +38 -5
- package/dist/cli/commands/session.d.ts.map +1 -1
- package/dist/cli/commands/session.js +2 -0
- package/dist/cli/commands/tui.d.ts +24 -0
- package/dist/cli/commands/tui.d.ts.map +1 -0
- package/dist/cli/commands/tui.js +579 -0
- package/dist/cli/commands/tuiSession.d.ts +35 -0
- package/dist/cli/commands/tuiSession.d.ts.map +1 -0
- package/dist/cli/commands/tuiSession.js +89 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +234 -11
- package/dist/config/defaults.d.ts +10 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +19 -0
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -1
- package/dist/cost/claudeCodeParser.d.ts +81 -0
- package/dist/cost/claudeCodeParser.d.ts.map +1 -0
- package/dist/cost/claudeCodeParser.js +232 -0
- package/dist/cost/collector.d.ts +42 -0
- package/dist/cost/collector.d.ts.map +1 -0
- package/dist/cost/collector.js +105 -0
- package/dist/cost/effectCost.d.ts +21 -0
- package/dist/cost/effectCost.d.ts.map +1 -0
- package/dist/cost/effectCost.js +26 -0
- package/dist/cost/index.d.ts +19 -0
- package/dist/cost/index.d.ts.map +1 -0
- package/dist/cost/index.js +39 -0
- package/dist/cost/journal.d.ts +40 -0
- package/dist/cost/journal.d.ts.map +1 -0
- package/dist/cost/journal.js +137 -0
- package/dist/cost/types.d.ts +164 -0
- package/dist/cost/types.d.ts.map +1 -0
- package/dist/cost/types.js +231 -0
- package/dist/dashboard/colors.d.ts +26 -0
- package/dist/dashboard/colors.d.ts.map +1 -0
- package/dist/dashboard/colors.js +38 -0
- package/dist/dashboard/components/BreakpointApproval.d.ts +25 -0
- package/dist/dashboard/components/BreakpointApproval.d.ts.map +1 -0
- package/dist/dashboard/components/BreakpointApproval.js +77 -0
- package/dist/dashboard/components/EffectTree.d.ts +17 -0
- package/dist/dashboard/components/EffectTree.d.ts.map +1 -0
- package/dist/dashboard/components/EffectTree.js +53 -0
- package/dist/dashboard/components/KeyValue.d.ts +7 -0
- package/dist/dashboard/components/KeyValue.d.ts.map +1 -0
- package/dist/dashboard/components/KeyValue.js +19 -0
- package/dist/dashboard/components/ProgressBar.d.ts +7 -0
- package/dist/dashboard/components/ProgressBar.d.ts.map +1 -0
- package/dist/dashboard/components/ProgressBar.js +34 -0
- package/dist/dashboard/components/StatusBadge.d.ts +4 -0
- package/dist/dashboard/components/StatusBadge.d.ts.map +1 -0
- package/dist/dashboard/components/StatusBadge.js +28 -0
- package/dist/dashboard/components/StatusLine.d.ts +13 -0
- package/dist/dashboard/components/StatusLine.d.ts.map +1 -0
- package/dist/dashboard/components/StatusLine.js +70 -0
- package/dist/dashboard/components/StructuredDiff.d.ts +6 -0
- package/dist/dashboard/components/StructuredDiff.d.ts.map +1 -0
- package/dist/dashboard/components/StructuredDiff.js +47 -0
- package/dist/dashboard/components/Table.d.ts +5 -0
- package/dist/dashboard/components/Table.d.ts.map +1 -0
- package/dist/dashboard/components/Table.js +25 -0
- package/dist/dashboard/components/index.d.ts +11 -0
- package/dist/dashboard/components/index.d.ts.map +1 -0
- package/dist/dashboard/components/index.js +25 -0
- package/dist/dashboard/components/messages/EffectRequestedMessage.d.ts +3 -0
- package/dist/dashboard/components/messages/EffectRequestedMessage.d.ts.map +1 -0
- package/dist/dashboard/components/messages/EffectRequestedMessage.js +21 -0
- package/dist/dashboard/components/messages/EffectResolvedMessage.d.ts +3 -0
- package/dist/dashboard/components/messages/EffectResolvedMessage.d.ts.map +1 -0
- package/dist/dashboard/components/messages/EffectResolvedMessage.js +20 -0
- package/dist/dashboard/components/messages/EventMessage.d.ts +3 -0
- package/dist/dashboard/components/messages/EventMessage.d.ts.map +1 -0
- package/dist/dashboard/components/messages/EventMessage.js +27 -0
- package/dist/dashboard/components/messages/RunCompletedMessage.d.ts +3 -0
- package/dist/dashboard/components/messages/RunCompletedMessage.d.ts.map +1 -0
- package/dist/dashboard/components/messages/RunCompletedMessage.js +17 -0
- package/dist/dashboard/components/messages/RunCreatedMessage.d.ts +3 -0
- package/dist/dashboard/components/messages/RunCreatedMessage.d.ts.map +1 -0
- package/dist/dashboard/components/messages/RunCreatedMessage.js +18 -0
- package/dist/dashboard/components/messages/RunFailedMessage.d.ts +3 -0
- package/dist/dashboard/components/messages/RunFailedMessage.d.ts.map +1 -0
- package/dist/dashboard/components/messages/RunFailedMessage.js +23 -0
- package/dist/dashboard/components/messages/index.d.ts +8 -0
- package/dist/dashboard/components/messages/index.d.ts.map +1 -0
- package/dist/dashboard/components/messages/index.js +15 -0
- package/dist/dashboard/components/messages/types.d.ts +9 -0
- package/dist/dashboard/components/messages/types.d.ts.map +1 -0
- package/dist/dashboard/components/messages/types.js +5 -0
- package/dist/dashboard/diffParser.d.ts +20 -0
- package/dist/dashboard/diffParser.d.ts.map +1 -0
- package/dist/dashboard/diffParser.js +58 -0
- package/dist/dashboard/index.d.ts +13 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +34 -0
- package/dist/dashboard/ink/App.d.ts +31 -0
- package/dist/dashboard/ink/App.d.ts.map +1 -0
- package/dist/dashboard/ink/App.js +66 -0
- package/dist/dashboard/ink/components/Message.d.ts +17 -0
- package/dist/dashboard/ink/components/Message.d.ts.map +1 -0
- package/dist/dashboard/ink/components/Message.js +161 -0
- package/dist/dashboard/ink/components/MessagePane.d.ts +22 -0
- package/dist/dashboard/ink/components/MessagePane.d.ts.map +1 -0
- package/dist/dashboard/ink/components/MessagePane.js +154 -0
- package/dist/dashboard/ink/components/PromptBar.d.ts +25 -0
- package/dist/dashboard/ink/components/PromptBar.d.ts.map +1 -0
- package/dist/dashboard/ink/components/PromptBar.js +133 -0
- package/dist/dashboard/ink/components/RunningIndicator.d.ts +25 -0
- package/dist/dashboard/ink/components/RunningIndicator.d.ts.map +1 -0
- package/dist/dashboard/ink/components/RunningIndicator.js +38 -0
- package/dist/dashboard/ink/components/StatusBar.d.ts +25 -0
- package/dist/dashboard/ink/components/StatusBar.d.ts.map +1 -0
- package/dist/dashboard/ink/components/StatusBar.js +99 -0
- package/dist/dashboard/ink/components/index.d.ts +17 -0
- package/dist/dashboard/ink/components/index.d.ts.map +1 -0
- package/dist/dashboard/ink/components/index.js +19 -0
- package/dist/dashboard/ink/contexts/ClockContext.d.ts +26 -0
- package/dist/dashboard/ink/contexts/ClockContext.d.ts.map +1 -0
- package/dist/dashboard/ink/contexts/ClockContext.js +43 -0
- package/dist/dashboard/ink/contexts/InkContext.d.ts +58 -0
- package/dist/dashboard/ink/contexts/InkContext.d.ts.map +1 -0
- package/dist/dashboard/ink/contexts/InkContext.js +77 -0
- package/dist/dashboard/ink/contexts/SessionContext.d.ts +54 -0
- package/dist/dashboard/ink/contexts/SessionContext.d.ts.map +1 -0
- package/dist/dashboard/ink/contexts/SessionContext.js +87 -0
- package/dist/dashboard/ink/contexts/ThemeContext.d.ts +17 -0
- package/dist/dashboard/ink/contexts/ThemeContext.d.ts.map +1 -0
- package/dist/dashboard/ink/contexts/ThemeContext.js +46 -0
- package/dist/dashboard/ink/hooks/useClock.d.ts +14 -0
- package/dist/dashboard/ink/hooks/useClock.d.ts.map +1 -0
- package/dist/dashboard/ink/hooks/useClock.js +13 -0
- package/dist/dashboard/ink/hooks/useSession.d.ts +14 -0
- package/dist/dashboard/ink/hooks/useSession.d.ts.map +1 -0
- package/dist/dashboard/ink/hooks/useSession.js +13 -0
- package/dist/dashboard/ink/hooks/useTheme.d.ts +8 -0
- package/dist/dashboard/ink/hooks/useTheme.d.ts.map +1 -0
- package/dist/dashboard/ink/hooks/useTheme.js +12 -0
- package/dist/dashboard/ink/index.d.ts +12 -0
- package/dist/dashboard/ink/index.d.ts.map +1 -0
- package/dist/dashboard/ink/index.js +12 -0
- package/dist/dashboard/ink/render.d.ts +31 -0
- package/dist/dashboard/ink/render.d.ts.map +1 -0
- package/dist/dashboard/ink/render.js +93 -0
- package/dist/dashboard/ink/types.d.ts +104 -0
- package/dist/dashboard/ink/types.d.ts.map +1 -0
- package/dist/dashboard/ink/types.js +8 -0
- package/dist/dashboard/render.d.ts +20 -0
- package/dist/dashboard/render.d.ts.map +1 -0
- package/dist/dashboard/render.js +30 -0
- package/dist/governance/bridge.d.ts +17 -0
- package/dist/governance/bridge.d.ts.map +1 -0
- package/dist/governance/bridge.js +46 -0
- package/dist/governance/builtins.d.ts +25 -0
- package/dist/governance/builtins.d.ts.map +1 -0
- package/dist/governance/builtins.js +67 -0
- package/dist/governance/engine.d.ts +20 -0
- package/dist/governance/engine.d.ts.map +1 -0
- package/dist/governance/engine.js +124 -0
- package/dist/governance/index.d.ts +11 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +25 -0
- package/dist/governance/logging.d.ts +18 -0
- package/dist/governance/logging.d.ts.map +1 -0
- package/dist/governance/logging.js +83 -0
- package/dist/governance/types.d.ts +106 -0
- package/dist/governance/types.d.ts.map +1 -0
- package/dist/governance/types.js +13 -0
- package/dist/harness/agenticTools.d.ts +7 -1
- package/dist/harness/agenticTools.d.ts.map +1 -1
- package/dist/harness/agenticTools.js +419 -17
- package/dist/harness/backgroundProcessRegistry.d.ts +63 -0
- package/dist/harness/backgroundProcessRegistry.d.ts.map +1 -0
- package/dist/harness/backgroundProcessRegistry.js +199 -0
- package/dist/harness/backgroundTracker.d.ts +64 -0
- package/dist/harness/backgroundTracker.d.ts.map +1 -0
- package/dist/harness/backgroundTracker.js +107 -0
- package/dist/harness/claudeCode.d.ts +1 -1
- package/dist/harness/claudeCode.d.ts.map +1 -1
- package/dist/harness/claudeCode.js +134 -35
- package/dist/harness/codex.d.ts.map +1 -1
- package/dist/harness/codex.js +1 -0
- package/dist/harness/cursor.d.ts.map +1 -1
- package/dist/harness/cursor.js +3 -1
- package/dist/harness/discovery.d.ts.map +1 -1
- package/dist/harness/discovery.js +8 -1
- package/dist/harness/geminiCli.d.ts.map +1 -1
- package/dist/harness/geminiCli.js +3 -1
- package/dist/harness/githubCopilot.d.ts.map +1 -1
- package/dist/harness/githubCopilot.js +3 -1
- package/dist/harness/index.d.ts +5 -2
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +9 -1
- package/dist/harness/invoker.d.ts +16 -0
- package/dist/harness/invoker.d.ts.map +1 -1
- package/dist/harness/invoker.js +71 -0
- package/dist/harness/ohMyPi.d.ts.map +1 -1
- package/dist/harness/ohMyPi.js +1 -0
- package/dist/harness/openclaw.d.ts +20 -0
- package/dist/harness/openclaw.d.ts.map +1 -0
- package/dist/harness/openclaw.js +340 -0
- package/dist/harness/opencode.d.ts.map +1 -1
- package/dist/harness/opencode.js +77 -5
- package/dist/harness/pi.d.ts.map +1 -1
- package/dist/harness/pi.js +1 -0
- package/dist/harness/registry.d.ts.map +1 -1
- package/dist/harness/registry.js +2 -0
- package/dist/harness/streamingCapture.d.ts +44 -0
- package/dist/harness/streamingCapture.d.ts.map +1 -0
- package/dist/harness/streamingCapture.js +249 -0
- package/dist/harness/types.d.ts +15 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/hooks/dispatcher.d.ts +9 -0
- package/dist/hooks/dispatcher.d.ts.map +1 -1
- package/dist/hooks/dispatcher.js +94 -0
- package/dist/hooks/index.d.ts +2 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/logging/runLogger.js +2 -2
- package/dist/mcp/tools/runs.d.ts.map +1 -1
- package/dist/mcp/tools/runs.js +9 -0
- package/dist/mcp/tools/sessions.d.ts.map +1 -1
- package/dist/mcp/tools/sessions.js +2 -0
- package/dist/processLibrary/active.js +1 -1
- package/dist/prompts/babysitterMdDiscovery.d.ts +38 -0
- package/dist/prompts/babysitterMdDiscovery.d.ts.map +1 -0
- package/dist/prompts/babysitterMdDiscovery.js +150 -0
- package/dist/prompts/compose.d.ts.map +1 -1
- package/dist/prompts/compose.js +5 -0
- package/dist/prompts/context.d.ts +4 -0
- package/dist/prompts/context.d.ts.map +1 -1
- package/dist/prompts/context.js +45 -8
- package/dist/prompts/index.d.ts +3 -2
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +11 -1
- package/dist/prompts/parts/index.d.ts +3 -0
- package/dist/prompts/parts/index.d.ts.map +1 -1
- package/dist/prompts/parts/index.js +7 -1
- package/dist/prompts/parts/parallelPhaseDetection.d.ts +6 -0
- package/dist/prompts/parts/parallelPhaseDetection.d.ts.map +1 -0
- package/dist/prompts/parts/parallelPhaseDetection.js +10 -0
- package/dist/prompts/parts/projectInstructions.d.ts +8 -0
- package/dist/prompts/parts/projectInstructions.d.ts.map +1 -0
- package/dist/prompts/parts/projectInstructions.js +28 -0
- package/dist/prompts/parts/runOverlapDetection.d.ts +6 -0
- package/dist/prompts/parts/runOverlapDetection.d.ts.map +1 -0
- package/dist/prompts/parts/runOverlapDetection.js +10 -0
- package/dist/prompts/strata.d.ts +39 -0
- package/dist/prompts/strata.d.ts.map +1 -0
- package/dist/prompts/strata.js +139 -0
- package/dist/prompts/templates/breakpoint-handling.md +37 -1
- package/dist/prompts/templates/commands/doctor.md +9 -9
- package/dist/prompts/templates/intent-fidelity-checks.md +3 -1
- package/dist/prompts/templates/parallel-phase-detection.md +59 -0
- package/dist/prompts/templates/process-creation.md +9 -2
- package/dist/prompts/templates/process-guidelines.md +6 -3
- package/dist/prompts/templates/run-overlap-detection.md +63 -0
- package/dist/prompts/templates/task-examples.md +47 -0
- package/dist/prompts/templates/task-kinds.md +45 -3
- package/dist/prompts/types.d.ts +28 -0
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/runtime/asyncEffects.d.ts +22 -0
- package/dist/runtime/asyncEffects.d.ts.map +1 -0
- package/dist/runtime/asyncEffects.js +86 -0
- package/dist/runtime/commitEffectResult.d.ts +9 -0
- package/dist/runtime/commitEffectResult.d.ts.map +1 -1
- package/dist/runtime/commitEffectResult.js +59 -0
- package/dist/runtime/createRun.d.ts.map +1 -1
- package/dist/runtime/createRun.js +11 -0
- package/dist/runtime/effectGroupRegistry.d.ts +57 -0
- package/dist/runtime/effectGroupRegistry.d.ts.map +1 -0
- package/dist/runtime/effectGroupRegistry.js +107 -0
- package/dist/runtime/exceptions.d.ts +5 -0
- package/dist/runtime/exceptions.d.ts.map +1 -1
- package/dist/runtime/exceptions.js +13 -1
- package/dist/runtime/index.d.ts +2 -2
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +3 -1
- package/dist/runtime/intrinsics/breakpoint.d.ts +5 -0
- package/dist/runtime/intrinsics/breakpoint.d.ts.map +1 -1
- package/dist/runtime/intrinsics/breakpoint.js +50 -8
- package/dist/runtime/intrinsics/parallel.d.ts +5 -1
- package/dist/runtime/intrinsics/parallel.d.ts.map +1 -1
- package/dist/runtime/intrinsics/parallel.js +124 -18
- package/dist/runtime/intrinsics/parallelGroup.d.ts +16 -0
- package/dist/runtime/intrinsics/parallelGroup.d.ts.map +1 -0
- package/dist/runtime/intrinsics/parallelGroup.js +105 -0
- package/dist/runtime/intrinsics/task.d.ts +2 -0
- package/dist/runtime/intrinsics/task.d.ts.map +1 -1
- package/dist/runtime/intrinsics/task.js +64 -1
- package/dist/runtime/orchestrateIteration.d.ts.map +1 -1
- package/dist/runtime/orchestrateIteration.js +48 -0
- package/dist/runtime/replay/effectIndex.d.ts +3 -0
- package/dist/runtime/replay/effectIndex.d.ts.map +1 -1
- package/dist/runtime/replay/effectIndex.js +74 -0
- package/dist/runtime/replay/stateCache.js +1 -1
- package/dist/runtime/schemaValidator.d.ts +16 -0
- package/dist/runtime/schemaValidator.d.ts.map +1 -0
- package/dist/runtime/schemaValidator.js +92 -0
- package/dist/runtime/types.d.ts +34 -1
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/session/context.d.ts +22 -0
- package/dist/session/context.d.ts.map +1 -0
- package/dist/session/context.js +108 -0
- package/dist/session/index.d.ts +3 -2
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +8 -1
- package/dist/session/parse.d.ts.map +1 -1
- package/dist/session/parse.js +7 -0
- package/dist/session/types.d.ts +15 -1
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/write.d.ts +20 -0
- package/dist/session/write.d.ts.map +1 -1
- package/dist/session/write.js +44 -0
- package/dist/storage/createRunDir.d.ts.map +1 -1
- package/dist/storage/createRunDir.js +4 -0
- package/dist/storage/icloudWarning.d.ts +6 -0
- package/dist/storage/icloudWarning.d.ts.map +1 -0
- package/dist/storage/icloudWarning.js +84 -0
- package/dist/storage/journal.d.ts.map +1 -1
- package/dist/storage/journal.js +2 -0
- package/dist/storage/types.d.ts +6 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/tasks/batching.d.ts +6 -1
- package/dist/tasks/batching.d.ts.map +1 -1
- package/dist/tasks/batching.js +33 -8
- package/dist/tasks/effectGroup.d.ts +19 -0
- package/dist/tasks/effectGroup.d.ts.map +1 -0
- package/dist/tasks/effectGroup.js +58 -0
- package/dist/tasks/grouping.d.ts +19 -0
- package/dist/tasks/grouping.d.ts.map +1 -0
- package/dist/tasks/grouping.js +54 -0
- package/dist/tasks/index.d.ts +1 -0
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +1 -0
- package/dist/tasks/partitioning.d.ts +11 -0
- package/dist/tasks/partitioning.d.ts.map +1 -0
- package/dist/tasks/partitioning.js +20 -0
- package/dist/tasks/registry.d.ts +1 -1
- package/dist/tasks/registry.d.ts.map +1 -1
- package/dist/tasks/serializer.d.ts +3 -1
- package/dist/tasks/serializer.d.ts.map +1 -1
- package/dist/tasks/serializer.js +1 -0
- package/package.json +6 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-approval evaluator.
|
|
3
|
+
*
|
|
4
|
+
* Precedence (highest wins):
|
|
5
|
+
* 1. never-auto-approve rule match
|
|
6
|
+
* 2. alwaysBreakOn profile tags
|
|
7
|
+
* 3. auto-approve rule match
|
|
8
|
+
* 4. autoApproveAfterN threshold (consecutive approvals from journal history)
|
|
9
|
+
* 5. prompt (default — no auto-approval)
|
|
10
|
+
*/
|
|
11
|
+
import type { BreakpointRule, AutoApprovalResult } from "./types";
|
|
12
|
+
import type { BreakpointConfig } from "../profiles/types";
|
|
13
|
+
export interface EvaluateAutoApprovalOptions {
|
|
14
|
+
breakpointId: string;
|
|
15
|
+
tags?: string[];
|
|
16
|
+
expert?: string;
|
|
17
|
+
rules: BreakpointRule[];
|
|
18
|
+
profileConfig?: BreakpointConfig;
|
|
19
|
+
/** Number of consecutive past approvals for this breakpointId. */
|
|
20
|
+
consecutiveApprovals?: number;
|
|
21
|
+
/** autoApproveAfterN from breakpoint definition (-1 = disabled). */
|
|
22
|
+
autoApproveAfterN?: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function evaluateAutoApproval(options: EvaluateAutoApprovalOptions): AutoApprovalResult;
|
|
25
|
+
//# sourceMappingURL=evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/breakpoints/evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,kEAAkE;IAClE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,kBAAkB,CAqE7F"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-approval evaluator.
|
|
4
|
+
*
|
|
5
|
+
* Precedence (highest wins):
|
|
6
|
+
* 1. never-auto-approve rule match
|
|
7
|
+
* 2. alwaysBreakOn profile tags
|
|
8
|
+
* 3. auto-approve rule match
|
|
9
|
+
* 4. autoApproveAfterN threshold (consecutive approvals from journal history)
|
|
10
|
+
* 5. prompt (default — no auto-approval)
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.evaluateAutoApproval = evaluateAutoApproval;
|
|
14
|
+
const patterns_1 = require("./patterns");
|
|
15
|
+
function evaluateAutoApproval(options) {
|
|
16
|
+
const { breakpointId, tags, expert, rules, profileConfig, consecutiveApprovals = 0, autoApproveAfterN = -1, } = options;
|
|
17
|
+
const attributes = { tags, expert };
|
|
18
|
+
// 1. Check never-auto-approve rules (highest precedence)
|
|
19
|
+
for (const rule of rules) {
|
|
20
|
+
if (rule.action !== "never-auto-approve")
|
|
21
|
+
continue;
|
|
22
|
+
const pattern = (0, patterns_1.parsePattern)(rule.pattern);
|
|
23
|
+
if ((0, patterns_1.matchPattern)(pattern, breakpointId, attributes)) {
|
|
24
|
+
return {
|
|
25
|
+
recommended: false,
|
|
26
|
+
reason: `Blocked by never-auto-approve rule: ${rule.id}`,
|
|
27
|
+
matchedRule: rule.id,
|
|
28
|
+
consecutiveApprovals,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// 2. Check alwaysBreakOn profile tags
|
|
33
|
+
if (profileConfig?.alwaysBreakOn && tags) {
|
|
34
|
+
for (const alwaysTag of profileConfig.alwaysBreakOn) {
|
|
35
|
+
if (tags.includes(alwaysTag)) {
|
|
36
|
+
return {
|
|
37
|
+
recommended: false,
|
|
38
|
+
reason: `Blocked by alwaysBreakOn tag: ${alwaysTag}`,
|
|
39
|
+
consecutiveApprovals,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// 3. Check auto-approve rules
|
|
45
|
+
for (const rule of rules) {
|
|
46
|
+
if (rule.action !== "auto-approve")
|
|
47
|
+
continue;
|
|
48
|
+
const pattern = (0, patterns_1.parsePattern)(rule.pattern);
|
|
49
|
+
if ((0, patterns_1.matchPattern)(pattern, breakpointId, attributes)) {
|
|
50
|
+
return {
|
|
51
|
+
recommended: true,
|
|
52
|
+
reason: `Matched auto-approve rule: ${rule.id}`,
|
|
53
|
+
matchedRule: rule.id,
|
|
54
|
+
consecutiveApprovals,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// 4. Check autoApproveAfterN threshold
|
|
59
|
+
if (autoApproveAfterN > 0 && consecutiveApprovals >= autoApproveAfterN) {
|
|
60
|
+
return {
|
|
61
|
+
recommended: true,
|
|
62
|
+
reason: `Auto-approved after ${consecutiveApprovals} consecutive approvals (threshold: ${autoApproveAfterN})`,
|
|
63
|
+
consecutiveApprovals,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// 5. Default: prompt (no auto-approval)
|
|
67
|
+
return {
|
|
68
|
+
recommended: false,
|
|
69
|
+
reason: "No matching auto-approval rule",
|
|
70
|
+
consecutiveApprovals,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { BreakpointRule, BreakpointRuleAction, BreakpointRulesFile, AutoApprovalResult, BreakpointPattern, AttributePredicate, PredicateOp, } from "./types";
|
|
2
|
+
export { BREAKPOINT_RULES_SCHEMA_VERSION } from "./types";
|
|
3
|
+
export { parsePattern, matchPattern } from "./patterns";
|
|
4
|
+
export { readRules, writeRules, addRule, removeRule, listRules } from "./rules";
|
|
5
|
+
export { evaluateAutoApproval } from "./evaluator";
|
|
6
|
+
export type { EvaluateAutoApprovalOptions } from "./evaluator";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/breakpoints/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.evaluateAutoApproval = exports.listRules = exports.removeRule = exports.addRule = exports.writeRules = exports.readRules = exports.matchPattern = exports.parsePattern = exports.BREAKPOINT_RULES_SCHEMA_VERSION = void 0;
|
|
4
|
+
var types_1 = require("./types");
|
|
5
|
+
Object.defineProperty(exports, "BREAKPOINT_RULES_SCHEMA_VERSION", { enumerable: true, get: function () { return types_1.BREAKPOINT_RULES_SCHEMA_VERSION; } });
|
|
6
|
+
var patterns_1 = require("./patterns");
|
|
7
|
+
Object.defineProperty(exports, "parsePattern", { enumerable: true, get: function () { return patterns_1.parsePattern; } });
|
|
8
|
+
Object.defineProperty(exports, "matchPattern", { enumerable: true, get: function () { return patterns_1.matchPattern; } });
|
|
9
|
+
var rules_1 = require("./rules");
|
|
10
|
+
Object.defineProperty(exports, "readRules", { enumerable: true, get: function () { return rules_1.readRules; } });
|
|
11
|
+
Object.defineProperty(exports, "writeRules", { enumerable: true, get: function () { return rules_1.writeRules; } });
|
|
12
|
+
Object.defineProperty(exports, "addRule", { enumerable: true, get: function () { return rules_1.addRule; } });
|
|
13
|
+
Object.defineProperty(exports, "removeRule", { enumerable: true, get: function () { return rules_1.removeRule; } });
|
|
14
|
+
Object.defineProperty(exports, "listRules", { enumerable: true, get: function () { return rules_1.listRules; } });
|
|
15
|
+
var evaluator_1 = require("./evaluator");
|
|
16
|
+
Object.defineProperty(exports, "evaluateAutoApproval", { enumerable: true, get: function () { return evaluator_1.evaluateAutoApproval; } });
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern parsing and matching for breakpoint auto-approval rules.
|
|
3
|
+
*
|
|
4
|
+
* Pattern syntax:
|
|
5
|
+
* <id-glob> — e.g., "confirm.*"
|
|
6
|
+
* <id-glob>(<predicate> [AND ...]) — e.g., "*.review(tags contains 'design')"
|
|
7
|
+
*
|
|
8
|
+
* Id-glob supports * as a wildcard matching any segment(s).
|
|
9
|
+
* Attribute predicates: "tags contains '<value>'" or "expert = '<value>'"
|
|
10
|
+
* Multiple predicates joined with AND.
|
|
11
|
+
*/
|
|
12
|
+
import type { BreakpointPattern } from "./types";
|
|
13
|
+
/**
|
|
14
|
+
* Parse a pattern string into a structured BreakpointPattern.
|
|
15
|
+
*/
|
|
16
|
+
export declare function parsePattern(raw: string): BreakpointPattern;
|
|
17
|
+
/**
|
|
18
|
+
* Match a breakpointId and attributes against a parsed pattern.
|
|
19
|
+
*/
|
|
20
|
+
export declare function matchPattern(pattern: BreakpointPattern, breakpointId: string, attributes: {
|
|
21
|
+
tags?: string[];
|
|
22
|
+
expert?: string;
|
|
23
|
+
}): boolean;
|
|
24
|
+
//# sourceMappingURL=patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/breakpoints/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAsB,iBAAiB,EAAe,MAAM,SAAS,CAAC;AAElF;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAsB3D;AAwBD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,iBAAiB,EAC1B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,OAAO,CAYT"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pattern parsing and matching for breakpoint auto-approval rules.
|
|
4
|
+
*
|
|
5
|
+
* Pattern syntax:
|
|
6
|
+
* <id-glob> — e.g., "confirm.*"
|
|
7
|
+
* <id-glob>(<predicate> [AND ...]) — e.g., "*.review(tags contains 'design')"
|
|
8
|
+
*
|
|
9
|
+
* Id-glob supports * as a wildcard matching any segment(s).
|
|
10
|
+
* Attribute predicates: "tags contains '<value>'" or "expert = '<value>'"
|
|
11
|
+
* Multiple predicates joined with AND.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.parsePattern = parsePattern;
|
|
15
|
+
exports.matchPattern = matchPattern;
|
|
16
|
+
/**
|
|
17
|
+
* Parse a pattern string into a structured BreakpointPattern.
|
|
18
|
+
*/
|
|
19
|
+
function parsePattern(raw) {
|
|
20
|
+
const trimmed = raw.trim();
|
|
21
|
+
const parenOpen = trimmed.indexOf("(");
|
|
22
|
+
if (parenOpen === -1) {
|
|
23
|
+
return { idGlob: trimmed, predicates: [] };
|
|
24
|
+
}
|
|
25
|
+
const parenClose = trimmed.lastIndexOf(")");
|
|
26
|
+
if (parenClose === -1 || parenClose <= parenOpen) {
|
|
27
|
+
throw new Error(`Invalid pattern: unmatched parenthesis in "${raw}"`);
|
|
28
|
+
}
|
|
29
|
+
const idGlob = trimmed.slice(0, parenOpen).trim();
|
|
30
|
+
const predicateStr = trimmed.slice(parenOpen + 1, parenClose).trim();
|
|
31
|
+
if (!predicateStr) {
|
|
32
|
+
return { idGlob, predicates: [] };
|
|
33
|
+
}
|
|
34
|
+
const predicates = parsePredicates(predicateStr);
|
|
35
|
+
return { idGlob, predicates };
|
|
36
|
+
}
|
|
37
|
+
function parsePredicates(str) {
|
|
38
|
+
// Split on " AND " (case-insensitive)
|
|
39
|
+
const parts = str.split(/\s+AND\s+/i);
|
|
40
|
+
return parts.map(parseSinglePredicate);
|
|
41
|
+
}
|
|
42
|
+
function parseSinglePredicate(str) {
|
|
43
|
+
const trimmed = str.trim();
|
|
44
|
+
// Match: attr contains 'value' or attr = 'value'
|
|
45
|
+
const match = trimmed.match(/^(\w+)\s+(contains|=)\s+'([^']*)'$/);
|
|
46
|
+
if (!match) {
|
|
47
|
+
throw new Error(`Invalid predicate: "${trimmed}". Expected: attr contains 'value' or attr = 'value'`);
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
attr: match[1],
|
|
51
|
+
op: match[2],
|
|
52
|
+
value: match[3],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Match a breakpointId and attributes against a parsed pattern.
|
|
57
|
+
*/
|
|
58
|
+
function matchPattern(pattern, breakpointId, attributes) {
|
|
59
|
+
if (!matchGlob(pattern.idGlob, breakpointId)) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
for (const pred of pattern.predicates) {
|
|
63
|
+
if (!matchPredicate(pred, attributes)) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Simple glob matching with * wildcards.
|
|
71
|
+
* Each * matches zero or more characters (including dots).
|
|
72
|
+
*/
|
|
73
|
+
function matchGlob(glob, value) {
|
|
74
|
+
// Escape regex special chars except *, then replace * with .*
|
|
75
|
+
const escaped = glob.replace(/[.+?^${}()|[\]\\]/g, "\\$&");
|
|
76
|
+
const regexStr = "^" + escaped.replace(/\*/g, ".*") + "$";
|
|
77
|
+
return new RegExp(regexStr).test(value);
|
|
78
|
+
}
|
|
79
|
+
function matchPredicate(pred, attributes) {
|
|
80
|
+
if (pred.attr === "tags" && pred.op === "contains") {
|
|
81
|
+
return Array.isArray(attributes.tags) && attributes.tags.includes(pred.value);
|
|
82
|
+
}
|
|
83
|
+
if (pred.attr === "expert" && pred.op === "=") {
|
|
84
|
+
return attributes.expert === pred.value;
|
|
85
|
+
}
|
|
86
|
+
// Unknown attribute — no match
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rules CRUD for breakpoint auto-approval.
|
|
3
|
+
* Rules stored at ~/.a5c/breakpoint-approvals/rules.json with atomic writes.
|
|
4
|
+
*/
|
|
5
|
+
import type { BreakpointRule } from "./types";
|
|
6
|
+
/**
|
|
7
|
+
* Read rules from the rules file. Returns empty array if file doesn't exist.
|
|
8
|
+
*/
|
|
9
|
+
export declare function readRules(rulesPath?: string): Promise<BreakpointRule[]>;
|
|
10
|
+
/**
|
|
11
|
+
* Write rules to the rules file atomically.
|
|
12
|
+
*/
|
|
13
|
+
export declare function writeRules(rules: BreakpointRule[], rulesPath?: string): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Add a rule. Deduplicates by rule id.
|
|
16
|
+
*/
|
|
17
|
+
export declare function addRule(rule: BreakpointRule, rulesPath?: string): Promise<BreakpointRule[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Remove a rule by id. Returns the updated list.
|
|
20
|
+
*/
|
|
21
|
+
export declare function removeRule(ruleId: string, rulesPath?: string): Promise<BreakpointRule[]>;
|
|
22
|
+
/**
|
|
23
|
+
* List all rules.
|
|
24
|
+
*/
|
|
25
|
+
export declare function listRules(rulesPath?: string): Promise<BreakpointRule[]>;
|
|
26
|
+
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/breakpoints/rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAuB,MAAM,SAAS,CAAC;AAOnE;;GAEG;AACH,wBAAsB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAe7E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3F;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAMjG;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAK9F;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAE7E"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Rules CRUD for breakpoint auto-approval.
|
|
4
|
+
* Rules stored at ~/.a5c/breakpoint-approvals/rules.json with atomic writes.
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.readRules = readRules;
|
|
41
|
+
exports.writeRules = writeRules;
|
|
42
|
+
exports.addRule = addRule;
|
|
43
|
+
exports.removeRule = removeRule;
|
|
44
|
+
exports.listRules = listRules;
|
|
45
|
+
const node_fs_1 = require("node:fs");
|
|
46
|
+
const os = __importStar(require("node:os"));
|
|
47
|
+
const path = __importStar(require("node:path"));
|
|
48
|
+
const atomic_1 = require("../storage/atomic");
|
|
49
|
+
const types_1 = require("./types");
|
|
50
|
+
function defaultRulesPath() {
|
|
51
|
+
return path.join(os.homedir(), ".a5c", "breakpoint-approvals", "rules.json");
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Read rules from the rules file. Returns empty array if file doesn't exist.
|
|
55
|
+
*/
|
|
56
|
+
async function readRules(rulesPath) {
|
|
57
|
+
const filePath = rulesPath ?? defaultRulesPath();
|
|
58
|
+
try {
|
|
59
|
+
const raw = await node_fs_1.promises.readFile(filePath, "utf-8");
|
|
60
|
+
const parsed = JSON.parse(raw);
|
|
61
|
+
if (!Array.isArray(parsed.rules)) {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
return parsed.rules;
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (err.code === "ENOENT") {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Write rules to the rules file atomically.
|
|
75
|
+
*/
|
|
76
|
+
async function writeRules(rules, rulesPath) {
|
|
77
|
+
const filePath = rulesPath ?? defaultRulesPath();
|
|
78
|
+
const dir = path.dirname(filePath);
|
|
79
|
+
await node_fs_1.promises.mkdir(dir, { recursive: true });
|
|
80
|
+
const data = {
|
|
81
|
+
schemaVersion: types_1.BREAKPOINT_RULES_SCHEMA_VERSION,
|
|
82
|
+
rules,
|
|
83
|
+
};
|
|
84
|
+
await (0, atomic_1.writeFileAtomic)(filePath, JSON.stringify(data, null, 2) + "\n");
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Add a rule. Deduplicates by rule id.
|
|
88
|
+
*/
|
|
89
|
+
async function addRule(rule, rulesPath) {
|
|
90
|
+
const existing = await readRules(rulesPath);
|
|
91
|
+
const filtered = existing.filter(r => r.id !== rule.id);
|
|
92
|
+
filtered.push(rule);
|
|
93
|
+
await writeRules(filtered, rulesPath);
|
|
94
|
+
return filtered;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Remove a rule by id. Returns the updated list.
|
|
98
|
+
*/
|
|
99
|
+
async function removeRule(ruleId, rulesPath) {
|
|
100
|
+
const existing = await readRules(rulesPath);
|
|
101
|
+
const filtered = existing.filter(r => r.id !== ruleId);
|
|
102
|
+
await writeRules(filtered, rulesPath);
|
|
103
|
+
return filtered;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* List all rules.
|
|
107
|
+
*/
|
|
108
|
+
async function listRules(rulesPath) {
|
|
109
|
+
return readRules(rulesPath);
|
|
110
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Breakpoint auto-approval types.
|
|
3
|
+
*/
|
|
4
|
+
export type BreakpointRuleAction = "auto-approve" | "never-auto-approve";
|
|
5
|
+
export interface BreakpointRule {
|
|
6
|
+
/** Unique rule identifier (UUID or slug). */
|
|
7
|
+
id: string;
|
|
8
|
+
/** Pattern to match breakpointIds. Supports glob with attribute predicates. */
|
|
9
|
+
pattern: string;
|
|
10
|
+
/** Action to take when pattern matches. */
|
|
11
|
+
action: BreakpointRuleAction;
|
|
12
|
+
/** ISO timestamp when rule was created. */
|
|
13
|
+
createdAt: string;
|
|
14
|
+
/** Who created the rule (e.g., "user", "agent", "analyze-history"). */
|
|
15
|
+
createdBy: string;
|
|
16
|
+
/** Source context (e.g., "cli", "process:xyz"). */
|
|
17
|
+
source?: string;
|
|
18
|
+
/** Human-readable note about why this rule exists. */
|
|
19
|
+
note?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface BreakpointRulesFile {
|
|
22
|
+
schemaVersion: string;
|
|
23
|
+
rules: BreakpointRule[];
|
|
24
|
+
}
|
|
25
|
+
export interface AutoApprovalResult {
|
|
26
|
+
/** Whether auto-approval is recommended. */
|
|
27
|
+
recommended: boolean;
|
|
28
|
+
/** Human-readable reason for the recommendation. */
|
|
29
|
+
reason: string;
|
|
30
|
+
/** ID of the matched rule, if any. */
|
|
31
|
+
matchedRule?: string;
|
|
32
|
+
/** Number of consecutive approvals for this breakpointId. */
|
|
33
|
+
consecutiveApprovals?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface BreakpointPattern {
|
|
36
|
+
/** The id-glob portion (e.g., "confirm.*", "gate.prerequisites"). */
|
|
37
|
+
idGlob: string;
|
|
38
|
+
/** Attribute predicates (e.g., [{ attr: "tags", op: "contains", value: "design" }]). */
|
|
39
|
+
predicates: AttributePredicate[];
|
|
40
|
+
}
|
|
41
|
+
export type PredicateOp = "contains" | "=";
|
|
42
|
+
export interface AttributePredicate {
|
|
43
|
+
attr: string;
|
|
44
|
+
op: PredicateOp;
|
|
45
|
+
value: string;
|
|
46
|
+
}
|
|
47
|
+
export declare const BREAKPOINT_RULES_SCHEMA_VERSION = "2026.01.breakpoint-rules-v1";
|
|
48
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/breakpoints/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,oBAAoB,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,MAAM,EAAE,oBAAoB,CAAC;IAC7B,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,WAAW,EAAE,OAAO,CAAC;IACrB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,UAAU,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,GAAG,CAAC;AAE3C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,WAAW,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,+BAA+B,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command registry for discoverability (GAP-UX-011).
|
|
3
|
+
* Provides search and contextual suggestions across all babysitter CLI commands.
|
|
4
|
+
*/
|
|
5
|
+
export interface CommandInfo {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
aliases?: string[];
|
|
9
|
+
category: CommandCategory;
|
|
10
|
+
usage?: string;
|
|
11
|
+
}
|
|
12
|
+
export type CommandCategory = "run" | "task" | "session" | "harness" | "plugin" | "config" | "debug" | "help" | "tui";
|
|
13
|
+
export interface RunContext {
|
|
14
|
+
hasRun?: boolean;
|
|
15
|
+
hasPendingEffects?: boolean;
|
|
16
|
+
runStatus?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare const COMMAND_REGISTRY: CommandInfo[];
|
|
19
|
+
/**
|
|
20
|
+
* Search commands by name, description, or alias. Case-insensitive fuzzy match.
|
|
21
|
+
*/
|
|
22
|
+
export declare function searchCommands(query: string): CommandInfo[];
|
|
23
|
+
/**
|
|
24
|
+
* Suggest commands based on current run context.
|
|
25
|
+
*/
|
|
26
|
+
export declare function suggestCommands(context: RunContext): CommandInfo[];
|
|
27
|
+
//# sourceMappingURL=commandRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandRegistry.d.ts","sourceRoot":"","sources":["../../src/cli/commandRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GACvB,KAAK,GACL,MAAM,GACN,SAAS,GACT,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,MAAM,GACN,KAAK,CAAC;AAEV,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,EAAE,WAAW,EAoEzC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAW3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW,EAAE,CAuDlE"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Command registry for discoverability (GAP-UX-011).
|
|
4
|
+
* Provides search and contextual suggestions across all babysitter CLI commands.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.COMMAND_REGISTRY = void 0;
|
|
8
|
+
exports.searchCommands = searchCommands;
|
|
9
|
+
exports.suggestCommands = suggestCommands;
|
|
10
|
+
exports.COMMAND_REGISTRY = [
|
|
11
|
+
// Run commands
|
|
12
|
+
{ name: "run:create", description: "Create a new run with process and inputs", category: "run", usage: "babysitter run:create --process-id <id> --entry <path>" },
|
|
13
|
+
{ name: "run:iterate", description: "Execute one orchestration iteration", category: "run", usage: "babysitter run:iterate <runDir>" },
|
|
14
|
+
{ name: "run:status", description: "Show run status, metadata, and pending effects", category: "run", aliases: ["status"], usage: "babysitter run:status <runDir>" },
|
|
15
|
+
{ name: "run:events", description: "Show journal events for a run", category: "run", aliases: ["events"], usage: "babysitter run:events <runDir> --limit 50" },
|
|
16
|
+
{ name: "run:rebuild-state", description: "Rebuild derived state cache from journal", category: "run", usage: "babysitter run:rebuild-state <runDir>" },
|
|
17
|
+
{ name: "run:repair-journal", description: "Repair corrupted journal entries", category: "run", usage: "babysitter run:repair-journal <runDir>" },
|
|
18
|
+
{ name: "run:execute-tasks", description: "Execute pending tasks in a run", category: "run" },
|
|
19
|
+
// Task commands
|
|
20
|
+
{ name: "task:post", description: "Post an effect result (task, breakpoint, sleep)", category: "task", usage: "babysitter task:post <runDir> <effectId> --status ok --value-inline '{...}'" },
|
|
21
|
+
{ name: "task:list", description: "List tasks/effects in a run", category: "task", aliases: ["tasks"], usage: "babysitter task:list <runDir> --pending" },
|
|
22
|
+
{ name: "task:show", description: "Show task definition and result details", category: "task", usage: "babysitter task:show <runDir> <effectId>" },
|
|
23
|
+
// Session commands
|
|
24
|
+
{ name: "session:init", description: "Initialize a new orchestration session", category: "session" },
|
|
25
|
+
{ name: "session:associate", description: "Associate session with a run", category: "session" },
|
|
26
|
+
{ name: "session:resume", description: "Resume an existing session", category: "session" },
|
|
27
|
+
{ name: "session:state", description: "Show current session state", category: "session" },
|
|
28
|
+
{ name: "session:update", description: "Update session state", category: "session" },
|
|
29
|
+
// Harness commands
|
|
30
|
+
{ name: "harness:discover", description: "Discover installed harness CLIs", category: "harness", aliases: ["harness:list"] },
|
|
31
|
+
{ name: "harness:invoke", description: "Invoke a harness CLI with a prompt", category: "harness" },
|
|
32
|
+
{ name: "harness:create-run", description: "Create and run an orchestration session", category: "harness", aliases: ["harness:call"] },
|
|
33
|
+
{ name: "harness:resume-run", description: "Resume an existing orchestration run", category: "harness", aliases: ["harness:resume"] },
|
|
34
|
+
{ name: "harness:yolo", description: "Create run in non-interactive mode", category: "harness" },
|
|
35
|
+
{ name: "harness:plan", description: "Create run, stop after planning phase", category: "harness" },
|
|
36
|
+
{ name: "harness:observe", description: "Launch real-time observer dashboard", category: "harness", usage: "babysitter harness:observe [--workspace <dir>] [--tui]" },
|
|
37
|
+
{ name: "tui:session", description: "Launch interactive session TUI (Ink-based)", category: "tui", usage: "babysitter tui:session [--run-id <id>] [--verbosity minimal|normal|verbose] [--workspace <dir>] [--harness <name>]" },
|
|
38
|
+
{ name: "harness:doctor", description: "Diagnose run health issues", category: "harness" },
|
|
39
|
+
{ name: "harness:retrospect", description: "Analyze past runs for insights", category: "harness" },
|
|
40
|
+
{ name: "harness:cleanup", description: "Clean up old runs and artifacts", category: "harness" },
|
|
41
|
+
// Plugin commands
|
|
42
|
+
{ name: "plugin:install", description: "Install a plugin", category: "plugin" },
|
|
43
|
+
{ name: "plugin:uninstall", description: "Uninstall a plugin", category: "plugin" },
|
|
44
|
+
{ name: "plugin:update", description: "Update a plugin", category: "plugin" },
|
|
45
|
+
{ name: "plugin:list-installed", description: "List installed plugins", category: "plugin" },
|
|
46
|
+
{ name: "plugin:list-plugins", description: "List available plugins from marketplace", category: "plugin" },
|
|
47
|
+
{ name: "plugin:add-marketplace", description: "Add a plugin marketplace", category: "plugin" },
|
|
48
|
+
// Config commands
|
|
49
|
+
{ name: "configure", description: "Configure babysitter settings", category: "config" },
|
|
50
|
+
{ name: "compression:status", description: "Show compression layer status", category: "config" },
|
|
51
|
+
{ name: "compression:toggle", description: "Toggle a compression layer on/off", category: "config" },
|
|
52
|
+
{ name: "compression:set", description: "Set a compression config value", category: "config" },
|
|
53
|
+
{ name: "compression:reset", description: "Reset compression config to defaults", category: "config" },
|
|
54
|
+
{ name: "breakpoint:approve-rule", description: "Add breakpoint auto-approval rule", category: "config" },
|
|
55
|
+
{ name: "breakpoint:list-rules", description: "List breakpoint auto-approval rules", category: "config" },
|
|
56
|
+
{ name: "breakpoint:remove-rule", description: "Remove a breakpoint auto-approval rule", category: "config" },
|
|
57
|
+
{ name: "tokens:stats", description: "Show token usage statistics", category: "config" },
|
|
58
|
+
{ name: "profile:read", description: "Read user or project profile", category: "config" },
|
|
59
|
+
{ name: "profile:write", description: "Write user or project profile", category: "config" },
|
|
60
|
+
// Debug commands
|
|
61
|
+
{ name: "log", description: "Write structured log entry", category: "debug" },
|
|
62
|
+
{ name: "hook:log", description: "Log hook execution", category: "debug" },
|
|
63
|
+
{ name: "hook:run", description: "Execute a hook manually", category: "debug" },
|
|
64
|
+
{ name: "health", description: "Show system health status", category: "debug" },
|
|
65
|
+
{ name: "mcp:serve", description: "Start MCP server over stdio", category: "debug" },
|
|
66
|
+
// Help commands
|
|
67
|
+
{ name: "help", description: "Show help for babysitter commands", category: "help" },
|
|
68
|
+
{ name: "version", description: "Show babysitter SDK version", category: "help", aliases: ["-v", "--version"] },
|
|
69
|
+
{ name: "instructions:babysit-skill", description: "Generate babysit skill instructions", category: "help" },
|
|
70
|
+
{ name: "instructions:orchestrate", description: "Generate orchestration instructions", category: "help" },
|
|
71
|
+
];
|
|
72
|
+
/**
|
|
73
|
+
* Search commands by name, description, or alias. Case-insensitive fuzzy match.
|
|
74
|
+
*/
|
|
75
|
+
function searchCommands(query) {
|
|
76
|
+
if (!query || query.trim().length === 0)
|
|
77
|
+
return [];
|
|
78
|
+
const q = query.toLowerCase().trim();
|
|
79
|
+
return exports.COMMAND_REGISTRY.filter((cmd) => {
|
|
80
|
+
if (cmd.name.toLowerCase().includes(q))
|
|
81
|
+
return true;
|
|
82
|
+
if (cmd.description.toLowerCase().includes(q))
|
|
83
|
+
return true;
|
|
84
|
+
if (cmd.aliases?.some((a) => a.toLowerCase().includes(q)))
|
|
85
|
+
return true;
|
|
86
|
+
// Match category
|
|
87
|
+
if (cmd.category.toLowerCase().includes(q))
|
|
88
|
+
return true;
|
|
89
|
+
return false;
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Suggest commands based on current run context.
|
|
94
|
+
*/
|
|
95
|
+
function suggestCommands(context) {
|
|
96
|
+
const suggestions = [];
|
|
97
|
+
if (!context.hasRun) {
|
|
98
|
+
// No active run — suggest creation
|
|
99
|
+
suggestions.push(...exports.COMMAND_REGISTRY.filter((c) => c.name === "run:create" || c.name === "harness:create-run" || c.name === "harness:discover"));
|
|
100
|
+
return suggestions;
|
|
101
|
+
}
|
|
102
|
+
if (context.hasPendingEffects) {
|
|
103
|
+
// Has pending effects — suggest posting results
|
|
104
|
+
suggestions.push(...exports.COMMAND_REGISTRY.filter((c) => c.name === "task:post" || c.name === "task:list" || c.name === "task:show"));
|
|
105
|
+
}
|
|
106
|
+
if (context.runStatus === "failed") {
|
|
107
|
+
// Failed run — suggest recovery
|
|
108
|
+
suggestions.push(...exports.COMMAND_REGISTRY.filter((c) => c.name === "run:rebuild-state" || c.name === "run:repair-journal" || c.name === "harness:doctor"));
|
|
109
|
+
}
|
|
110
|
+
if (context.runStatus === "completed") {
|
|
111
|
+
suggestions.push(...exports.COMMAND_REGISTRY.filter((c) => c.name === "run:events" || c.name === "harness:retrospect" || c.name === "tokens:stats"));
|
|
112
|
+
}
|
|
113
|
+
// Always suggest status and iterate for active runs
|
|
114
|
+
if (context.hasRun) {
|
|
115
|
+
suggestions.push(...exports.COMMAND_REGISTRY.filter((c) => c.name === "run:status" || c.name === "run:iterate"));
|
|
116
|
+
}
|
|
117
|
+
// Deduplicate
|
|
118
|
+
const seen = new Set();
|
|
119
|
+
return suggestions.filter((s) => {
|
|
120
|
+
if (seen.has(s.name))
|
|
121
|
+
return false;
|
|
122
|
+
seen.add(s.name);
|
|
123
|
+
return true;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* breakpoint:* commands — Manage breakpoint auto-approval rules.
|
|
3
|
+
*
|
|
4
|
+
* Commands:
|
|
5
|
+
* breakpoint:approve-rule <pattern> [--action auto-approve|never-auto-approve] [--source <source>] [--note <note>] [--json]
|
|
6
|
+
* breakpoint:remove-rule <ruleId> [--json]
|
|
7
|
+
* breakpoint:list-rules [--json]
|
|
8
|
+
* breakpoint:should-auto-approve <breakpointId> [--tags <csv>] [--expert <expert>] [--json]
|
|
9
|
+
* breakpoint:history [--breakpoint-id <id>] [--runs-dir <dir>] [--limit <n>] [--json]
|
|
10
|
+
*/
|
|
11
|
+
export interface BreakpointCommandArgs {
|
|
12
|
+
subcommand: string;
|
|
13
|
+
pattern?: string;
|
|
14
|
+
ruleId?: string;
|
|
15
|
+
breakpointId?: string;
|
|
16
|
+
action?: string;
|
|
17
|
+
source?: string;
|
|
18
|
+
note?: string;
|
|
19
|
+
tags?: string;
|
|
20
|
+
expert?: string;
|
|
21
|
+
runsDir?: string;
|
|
22
|
+
limit?: number;
|
|
23
|
+
json: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function handleBreakpointCommand(args: BreakpointCommandArgs): Promise<number>;
|
|
26
|
+
//# sourceMappingURL=breakpointRules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breakpointRules.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/breakpointRules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB1F"}
|