agent-bober 0.17.0 → 0.18.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +25 -0
- package/README.md +169 -6
- package/dist/chat/answerer.d.ts +17 -0
- package/dist/chat/answerer.d.ts.map +1 -0
- package/dist/chat/answerer.js +52 -0
- package/dist/chat/answerer.js.map +1 -0
- package/dist/chat/approval-cursor.d.ts +25 -0
- package/dist/chat/approval-cursor.d.ts.map +1 -0
- package/dist/chat/approval-cursor.js +61 -0
- package/dist/chat/approval-cursor.js.map +1 -0
- package/dist/chat/approval-reader.d.ts +11 -0
- package/dist/chat/approval-reader.d.ts.map +1 -0
- package/dist/chat/approval-reader.js +20 -0
- package/dist/chat/approval-reader.js.map +1 -0
- package/dist/chat/careful-sidecar.d.ts +15 -0
- package/dist/chat/careful-sidecar.d.ts.map +1 -0
- package/dist/chat/careful-sidecar.js +39 -0
- package/dist/chat/careful-sidecar.js.map +1 -0
- package/dist/chat/chat-session.d.ts +129 -0
- package/dist/chat/chat-session.d.ts.map +1 -0
- package/dist/chat/chat-session.js +470 -0
- package/dist/chat/chat-session.js.map +1 -0
- package/dist/chat/completion-tailer.d.ts +27 -0
- package/dist/chat/completion-tailer.d.ts.map +1 -0
- package/dist/chat/completion-tailer.js +187 -0
- package/dist/chat/completion-tailer.js.map +1 -0
- package/dist/chat/conversation-store.d.ts +22 -0
- package/dist/chat/conversation-store.d.ts.map +1 -0
- package/dist/chat/conversation-store.js +66 -0
- package/dist/chat/conversation-store.js.map +1 -0
- package/dist/chat/cursor-store.d.ts +23 -0
- package/dist/chat/cursor-store.d.ts.map +1 -0
- package/dist/chat/cursor-store.js +42 -0
- package/dist/chat/cursor-store.js.map +1 -0
- package/dist/chat/pid-sidecar.d.ts +22 -0
- package/dist/chat/pid-sidecar.d.ts.map +1 -0
- package/dist/chat/pid-sidecar.js +42 -0
- package/dist/chat/pid-sidecar.js.map +1 -0
- package/dist/chat/roster-reader.d.ts +16 -0
- package/dist/chat/roster-reader.d.ts.map +1 -0
- package/dist/chat/roster-reader.js +39 -0
- package/dist/chat/roster-reader.js.map +1 -0
- package/dist/chat/run-spawner.d.ts +71 -0
- package/dist/chat/run-spawner.d.ts.map +1 -0
- package/dist/chat/run-spawner.js +121 -0
- package/dist/chat/run-spawner.js.map +1 -0
- package/dist/chat/slash-commands.d.ts +36 -0
- package/dist/chat/slash-commands.d.ts.map +1 -0
- package/dist/chat/slash-commands.js +133 -0
- package/dist/chat/slash-commands.js.map +1 -0
- package/dist/chat/steer-cleanup.d.ts +12 -0
- package/dist/chat/steer-cleanup.d.ts.map +1 -0
- package/dist/chat/steer-cleanup.js +60 -0
- package/dist/chat/steer-cleanup.js.map +1 -0
- package/dist/chat/turn-classifier.d.ts +43 -0
- package/dist/chat/turn-classifier.d.ts.map +1 -0
- package/dist/chat/turn-classifier.js +150 -0
- package/dist/chat/turn-classifier.js.map +1 -0
- package/dist/cli/commands/blackboard.d.ts +33 -0
- package/dist/cli/commands/blackboard.d.ts.map +1 -0
- package/dist/cli/commands/blackboard.js +114 -0
- package/dist/cli/commands/blackboard.js.map +1 -0
- package/dist/cli/commands/chat.d.ts +13 -0
- package/dist/cli/commands/chat.d.ts.map +1 -0
- package/dist/cli/commands/chat.js +43 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/evolve.d.ts +18 -0
- package/dist/cli/commands/evolve.d.ts.map +1 -0
- package/dist/cli/commands/evolve.js +72 -0
- package/dist/cli/commands/evolve.js.map +1 -0
- package/dist/cli/commands/facts.d.ts +15 -0
- package/dist/cli/commands/facts.d.ts.map +1 -0
- package/dist/cli/commands/facts.js +213 -0
- package/dist/cli/commands/facts.js.map +1 -0
- package/dist/cli/commands/init.d.ts +9 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +1 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/medical.d.ts +24 -0
- package/dist/cli/commands/medical.d.ts.map +1 -0
- package/dist/cli/commands/medical.js +132 -0
- package/dist/cli/commands/medical.js.map +1 -0
- package/dist/cli/commands/memory.d.ts +2 -1
- package/dist/cli/commands/memory.d.ts.map +1 -1
- package/dist/cli/commands/memory.js +94 -7
- package/dist/cli/commands/memory.js.map +1 -1
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +29 -3
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/replay.d.ts +17 -0
- package/dist/cli/commands/replay.d.ts.map +1 -0
- package/dist/cli/commands/replay.js +261 -0
- package/dist/cli/commands/replay.js.map +1 -0
- package/dist/cli/commands/run.d.ts +9 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +27 -1
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/sprint.d.ts.map +1 -1
- package/dist/cli/commands/sprint.js +17 -3
- package/dist/cli/commands/sprint.js.map +1 -1
- package/dist/cli/commands/update.d.ts +18 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +81 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.js +15 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +8 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/role-providers.d.ts +1 -1
- package/dist/config/role-providers.d.ts.map +1 -1
- package/dist/config/role-providers.js +6 -1
- package/dist/config/role-providers.js.map +1 -1
- package/dist/config/schema.d.ts +467 -222
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +25 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/contracts/eval-result.d.ts +84 -84
- package/dist/contracts/spec.d.ts +28 -28
- package/dist/contracts/sprint-contract.d.ts +4 -4
- package/dist/fleet/critic-deep.d.ts +53 -0
- package/dist/fleet/critic-deep.d.ts.map +1 -0
- package/dist/fleet/critic-deep.js +199 -0
- package/dist/fleet/critic-deep.js.map +1 -0
- package/dist/fleet/decomposer-deep-constants.d.ts +4 -0
- package/dist/fleet/decomposer-deep-constants.d.ts.map +1 -0
- package/dist/fleet/decomposer-deep-constants.js +14 -0
- package/dist/fleet/decomposer-deep-constants.js.map +1 -0
- package/dist/fleet/decomposer-deep-types.d.ts +8 -0
- package/dist/fleet/decomposer-deep-types.d.ts.map +1 -0
- package/dist/fleet/decomposer-deep-types.js +9 -0
- package/dist/fleet/decomposer-deep-types.js.map +1 -0
- package/dist/fleet/decomposer-deep.d.ts +51 -0
- package/dist/fleet/decomposer-deep.d.ts.map +1 -0
- package/dist/fleet/decomposer-deep.js +261 -0
- package/dist/fleet/decomposer-deep.js.map +1 -0
- package/dist/fleet/decomposer.d.ts +22 -0
- package/dist/fleet/decomposer.d.ts.map +1 -0
- package/dist/fleet/decomposer.js +144 -0
- package/dist/fleet/decomposer.js.map +1 -0
- package/dist/fleet/index.d.ts +93 -0
- package/dist/fleet/index.d.ts.map +1 -1
- package/dist/fleet/index.js +230 -2
- package/dist/fleet/index.js.map +1 -1
- package/dist/fleet/manifest-write.d.ts +30 -0
- package/dist/fleet/manifest-write.d.ts.map +1 -0
- package/dist/fleet/manifest-write.js +90 -0
- package/dist/fleet/manifest-write.js.map +1 -0
- package/dist/fleet/manifest.d.ts +6 -6
- package/dist/fleet/shared-blackboard.d.ts +51 -0
- package/dist/fleet/shared-blackboard.d.ts.map +1 -0
- package/dist/fleet/shared-blackboard.js +79 -0
- package/dist/fleet/shared-blackboard.js.map +1 -0
- package/dist/fleet/synthesis.d.ts +16 -0
- package/dist/fleet/synthesis.d.ts.map +1 -0
- package/dist/fleet/synthesis.js +22 -0
- package/dist/fleet/synthesis.js.map +1 -0
- package/dist/fleet/tier-policy.d.ts +18 -0
- package/dist/fleet/tier-policy.d.ts.map +1 -0
- package/dist/fleet/tier-policy.js +53 -0
- package/dist/fleet/tier-policy.js.map +1 -0
- package/dist/fleet/tool-role-guard.d.ts +24 -0
- package/dist/fleet/tool-role-guard.d.ts.map +1 -0
- package/dist/fleet/tool-role-guard.js +55 -0
- package/dist/fleet/tool-role-guard.js.map +1 -0
- package/dist/incident/resolution-verify.d.ts +4 -4
- package/dist/incident/types.d.ts +8 -8
- package/dist/mcp/run-manager.d.ts +9 -1
- package/dist/mcp/run-manager.d.ts.map +1 -1
- package/dist/mcp/run-manager.js.map +1 -1
- package/dist/medical/adapters/apple-health.d.ts +32 -0
- package/dist/medical/adapters/apple-health.d.ts.map +1 -0
- package/dist/medical/adapters/apple-health.js +100 -0
- package/dist/medical/adapters/apple-health.js.map +1 -0
- package/dist/medical/audit.d.ts +31 -0
- package/dist/medical/audit.d.ts.map +1 -0
- package/dist/medical/audit.js +56 -0
- package/dist/medical/audit.js.map +1 -0
- package/dist/medical/consent.d.ts +37 -0
- package/dist/medical/consent.d.ts.map +1 -0
- package/dist/medical/consent.js +73 -0
- package/dist/medical/consent.js.map +1 -0
- package/dist/medical/disclaimer.d.ts +11 -0
- package/dist/medical/disclaimer.d.ts.map +1 -0
- package/dist/medical/disclaimer.js +21 -0
- package/dist/medical/disclaimer.js.map +1 -0
- package/dist/medical/egress.d.ts +30 -0
- package/dist/medical/egress.d.ts.map +1 -0
- package/dist/medical/egress.js +50 -0
- package/dist/medical/egress.js.map +1 -0
- package/dist/medical/engine.d.ts +73 -0
- package/dist/medical/engine.d.ts.map +1 -0
- package/dist/medical/engine.js +333 -0
- package/dist/medical/engine.js.map +1 -0
- package/dist/medical/guardrails.d.ts +47 -0
- package/dist/medical/guardrails.d.ts.map +1 -0
- package/dist/medical/guardrails.js +92 -0
- package/dist/medical/guardrails.js.map +1 -0
- package/dist/medical/health-store.d.ts +80 -0
- package/dist/medical/health-store.d.ts.map +1 -0
- package/dist/medical/health-store.js +204 -0
- package/dist/medical/health-store.js.map +1 -0
- package/dist/medical/inference.d.ts +22 -0
- package/dist/medical/inference.d.ts.map +1 -0
- package/dist/medical/inference.js +39 -0
- package/dist/medical/inference.js.map +1 -0
- package/dist/medical/ingestion.d.ts +33 -0
- package/dist/medical/ingestion.d.ts.map +1 -0
- package/dist/medical/ingestion.js +52 -0
- package/dist/medical/ingestion.js.map +1 -0
- package/dist/medical/numerics.d.ts +66 -0
- package/dist/medical/numerics.d.ts.map +1 -0
- package/dist/medical/numerics.js +216 -0
- package/dist/medical/numerics.js.map +1 -0
- package/dist/medical/red-flag.d.ts +42 -0
- package/dist/medical/red-flag.d.ts.map +1 -0
- package/dist/medical/red-flag.js +161 -0
- package/dist/medical/red-flag.js.map +1 -0
- package/dist/medical/refusal.d.ts +46 -0
- package/dist/medical/refusal.d.ts.map +1 -0
- package/dist/medical/refusal.js +131 -0
- package/dist/medical/refusal.js.map +1 -0
- package/dist/medical/retrieval/grounding-critic.d.ts +34 -0
- package/dist/medical/retrieval/grounding-critic.d.ts.map +1 -0
- package/dist/medical/retrieval/grounding-critic.js +153 -0
- package/dist/medical/retrieval/grounding-critic.js.map +1 -0
- package/dist/medical/retrieval/literature.d.ts +78 -0
- package/dist/medical/retrieval/literature.d.ts.map +1 -0
- package/dist/medical/retrieval/literature.js +292 -0
- package/dist/medical/retrieval/literature.js.map +1 -0
- package/dist/medical/retrieval/medline-source.d.ts +72 -0
- package/dist/medical/retrieval/medline-source.d.ts.map +1 -0
- package/dist/medical/retrieval/medline-source.js +120 -0
- package/dist/medical/retrieval/medline-source.js.map +1 -0
- package/dist/medical/team.d.ts +15 -0
- package/dist/medical/team.d.ts.map +1 -0
- package/dist/medical/team.js +44 -0
- package/dist/medical/team.js.map +1 -0
- package/dist/medical/types.d.ts +175 -0
- package/dist/medical/types.d.ts.map +1 -0
- package/dist/medical/types.js +8 -0
- package/dist/medical/types.js.map +1 -0
- package/dist/medical/whoop/whoop-client.d.ts +114 -0
- package/dist/medical/whoop/whoop-client.d.ts.map +1 -0
- package/dist/medical/whoop/whoop-client.js +226 -0
- package/dist/medical/whoop/whoop-client.js.map +1 -0
- package/dist/medical/whoop/whoop-sync.d.ts +25 -0
- package/dist/medical/whoop/whoop-sync.d.ts.map +1 -0
- package/dist/medical/whoop/whoop-sync.js +97 -0
- package/dist/medical/whoop/whoop-sync.js.map +1 -0
- package/dist/medical/whoop/whoop-token.d.ts +44 -0
- package/dist/medical/whoop/whoop-token.d.ts.map +1 -0
- package/dist/medical/whoop/whoop-token.js +66 -0
- package/dist/medical/whoop/whoop-token.js.map +1 -0
- package/dist/orchestrator/context-handoff.d.ts +60 -60
- package/dist/orchestrator/contract-materialization.d.ts +33 -0
- package/dist/orchestrator/contract-materialization.d.ts.map +1 -0
- package/dist/orchestrator/contract-materialization.js +113 -0
- package/dist/orchestrator/contract-materialization.js.map +1 -0
- package/dist/orchestrator/memory/distill.d.ts +4 -1
- package/dist/orchestrator/memory/distill.d.ts.map +1 -1
- package/dist/orchestrator/memory/distill.js +41 -1
- package/dist/orchestrator/memory/distill.js.map +1 -1
- package/dist/orchestrator/memory/fact-detector.d.ts +61 -0
- package/dist/orchestrator/memory/fact-detector.d.ts.map +1 -0
- package/dist/orchestrator/memory/fact-detector.js +153 -0
- package/dist/orchestrator/memory/fact-detector.js.map +1 -0
- package/dist/orchestrator/memory/fact-judge.d.ts +19 -0
- package/dist/orchestrator/memory/fact-judge.d.ts.map +1 -0
- package/dist/orchestrator/memory/fact-judge.js +121 -0
- package/dist/orchestrator/memory/fact-judge.js.map +1 -0
- package/dist/orchestrator/memory/fact-retrieve.d.ts +52 -0
- package/dist/orchestrator/memory/fact-retrieve.d.ts.map +1 -0
- package/dist/orchestrator/memory/fact-retrieve.js +117 -0
- package/dist/orchestrator/memory/fact-retrieve.js.map +1 -0
- package/dist/orchestrator/memory/hygiene.d.ts +66 -0
- package/dist/orchestrator/memory/hygiene.d.ts.map +1 -0
- package/dist/orchestrator/memory/hygiene.js +153 -0
- package/dist/orchestrator/memory/hygiene.js.map +1 -0
- package/dist/orchestrator/memory/reconcile.d.ts +47 -0
- package/dist/orchestrator/memory/reconcile.d.ts.map +1 -0
- package/dist/orchestrator/memory/reconcile.js +116 -0
- package/dist/orchestrator/memory/reconcile.js.map +1 -0
- package/dist/orchestrator/memory/retrieve.d.ts +5 -3
- package/dist/orchestrator/memory/retrieve.d.ts.map +1 -1
- package/dist/orchestrator/memory/retrieve.js +9 -6
- package/dist/orchestrator/memory/retrieve.js.map +1 -1
- package/dist/orchestrator/pipeline.d.ts +19 -3
- package/dist/orchestrator/pipeline.d.ts.map +1 -1
- package/dist/orchestrator/pipeline.js +63 -52
- package/dist/orchestrator/pipeline.js.map +1 -1
- package/dist/orchestrator/planner-agent.d.ts.map +1 -1
- package/dist/orchestrator/planner-agent.js +16 -1
- package/dist/orchestrator/planner-agent.js.map +1 -1
- package/dist/orchestrator/selfimprove/eval-guards.d.ts +51 -0
- package/dist/orchestrator/selfimprove/eval-guards.d.ts.map +1 -0
- package/dist/orchestrator/selfimprove/eval-guards.js +120 -0
- package/dist/orchestrator/selfimprove/eval-guards.js.map +1 -0
- package/dist/orchestrator/selfimprove/gepa.d.ts +74 -0
- package/dist/orchestrator/selfimprove/gepa.d.ts.map +1 -0
- package/dist/orchestrator/selfimprove/gepa.js +227 -0
- package/dist/orchestrator/selfimprove/gepa.js.map +1 -0
- package/dist/orchestrator/selfimprove/replay-harness.d.ts +65 -0
- package/dist/orchestrator/selfimprove/replay-harness.d.ts.map +1 -0
- package/dist/orchestrator/selfimprove/replay-harness.js +134 -0
- package/dist/orchestrator/selfimprove/replay-harness.js.map +1 -0
- package/dist/orchestrator/selfimprove/replay-store.d.ts +45 -0
- package/dist/orchestrator/selfimprove/replay-store.d.ts.map +1 -0
- package/dist/orchestrator/selfimprove/replay-store.js +119 -0
- package/dist/orchestrator/selfimprove/replay-store.js.map +1 -0
- package/dist/orchestrator/selfimprove/replay-types.d.ts +32 -0
- package/dist/orchestrator/selfimprove/replay-types.d.ts.map +1 -0
- package/dist/orchestrator/selfimprove/replay-types.js +15 -0
- package/dist/orchestrator/selfimprove/replay-types.js.map +1 -0
- package/dist/orchestrator/workflow/engine.d.ts +3 -1
- package/dist/orchestrator/workflow/engine.d.ts.map +1 -1
- package/dist/orchestrator/workflow/selector.d.ts +18 -0
- package/dist/orchestrator/workflow/selector.d.ts.map +1 -1
- package/dist/orchestrator/workflow/selector.js +41 -0
- package/dist/orchestrator/workflow/selector.js.map +1 -1
- package/dist/orchestrator/workflow/ts-engine.d.ts +3 -1
- package/dist/orchestrator/workflow/ts-engine.d.ts.map +1 -1
- package/dist/orchestrator/workflow/ts-engine.js +2 -2
- package/dist/orchestrator/workflow/ts-engine.js.map +1 -1
- package/dist/orchestrator/workflow/workflow-engine.d.ts +3 -1
- package/dist/orchestrator/workflow/workflow-engine.d.ts.map +1 -1
- package/dist/orchestrator/workflow/workflow-engine.js +3 -3
- package/dist/orchestrator/workflow/workflow-engine.js.map +1 -1
- package/dist/state/facts.d.ts +110 -0
- package/dist/state/facts.d.ts.map +1 -0
- package/dist/state/facts.js +208 -0
- package/dist/state/facts.js.map +1 -0
- package/dist/state/guidance.d.ts +37 -0
- package/dist/state/guidance.d.ts.map +1 -0
- package/dist/state/guidance.js +144 -0
- package/dist/state/guidance.js.map +1 -0
- package/dist/state/history.d.ts +2 -2
- package/dist/state/index.d.ts +1 -1
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +1 -1
- package/dist/state/index.js.map +1 -1
- package/dist/state/memory.d.ts +43 -11
- package/dist/state/memory.d.ts.map +1 -1
- package/dist/state/memory.js +93 -15
- package/dist/state/memory.js.map +1 -1
- package/dist/state/pause.d.ts +47 -0
- package/dist/state/pause.d.ts.map +1 -0
- package/dist/state/pause.js +146 -0
- package/dist/state/pause.js.map +1 -0
- package/dist/state/sprint-state.d.ts +8 -0
- package/dist/state/sprint-state.d.ts.map +1 -1
- package/dist/state/sprint-state.js +32 -1
- package/dist/state/sprint-state.js.map +1 -1
- package/dist/teams/registry.d.ts +16 -0
- package/dist/teams/registry.d.ts.map +1 -0
- package/dist/teams/registry.js +53 -0
- package/dist/teams/registry.js.map +1 -0
- package/dist/teams/types.d.ts +25 -0
- package/dist/teams/types.d.ts.map +1 -0
- package/dist/teams/types.js +2 -0
- package/dist/teams/types.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import Database from "better-sqlite3";
|
|
3
|
+
import { ReplayCaseSchema, } from "./replay-types.js";
|
|
4
|
+
// ── Deterministic id ──────────────────────────────────────────────────
|
|
5
|
+
/**
|
|
6
|
+
* Derive a deterministic 16-char hex case id from the case signature.
|
|
7
|
+
* caseId = sha256(`${contractId}|${iteration}|${diffDigest}`).slice(0,16)
|
|
8
|
+
* MIRRORS factId at src/state/facts.ts:58-69.
|
|
9
|
+
*
|
|
10
|
+
* NOTE: tCaptured is intentionally EXCLUDED from the hash so the id stays
|
|
11
|
+
* stable across captures — only a change in diffDigest changes the id.
|
|
12
|
+
* Identical inputs always produce the same id — no wall-clock dependency.
|
|
13
|
+
*/
|
|
14
|
+
export function caseId(contractId, iteration, diffDigest) {
|
|
15
|
+
return createHash("sha256")
|
|
16
|
+
.update(`${contractId}|${iteration}|${diffDigest}`)
|
|
17
|
+
.digest("hex")
|
|
18
|
+
.slice(0, 16);
|
|
19
|
+
}
|
|
20
|
+
function rowToRecord(row) {
|
|
21
|
+
return {
|
|
22
|
+
caseId: row.case_id,
|
|
23
|
+
contractId: row.contract_id,
|
|
24
|
+
iteration: row.iteration,
|
|
25
|
+
baselineVerdict: row.baseline_verdict,
|
|
26
|
+
diffDigest: row.diff_digest,
|
|
27
|
+
evalDetailsJson: row.eval_details_json,
|
|
28
|
+
tCaptured: row.t_captured,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// ── ReplayStore ───────────────────────────────────────────────────────
|
|
32
|
+
/**
|
|
33
|
+
* SQLite-backed replay case store.
|
|
34
|
+
*
|
|
35
|
+
* PURE: Never calls Date.now() or new Date() — every timestamp is a parameter.
|
|
36
|
+
* Hidden behind this interface so the driver (better-sqlite3) is swappable.
|
|
37
|
+
*
|
|
38
|
+
* bober: in-memory or file-backed via better-sqlite3 (synchronous); swap for
|
|
39
|
+
* node:sqlite when engines.node is raised to >=22.5.
|
|
40
|
+
*/
|
|
41
|
+
export class ReplayStore {
|
|
42
|
+
db;
|
|
43
|
+
constructor(dbPath) {
|
|
44
|
+
this.db = new Database(dbPath);
|
|
45
|
+
this.db.exec(`
|
|
46
|
+
CREATE TABLE IF NOT EXISTS replay_cases (
|
|
47
|
+
case_id TEXT PRIMARY KEY,
|
|
48
|
+
contract_id TEXT NOT NULL,
|
|
49
|
+
iteration INTEGER NOT NULL,
|
|
50
|
+
baseline_verdict TEXT NOT NULL,
|
|
51
|
+
diff_digest TEXT NOT NULL,
|
|
52
|
+
eval_details_json TEXT NOT NULL,
|
|
53
|
+
t_captured TEXT NOT NULL
|
|
54
|
+
);
|
|
55
|
+
`);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Insert or replace a replay case. Validates input with ReplayCaseSchema and
|
|
59
|
+
* derives the deterministic caseId. Returns the persisted ReplayCaseRecord.
|
|
60
|
+
*/
|
|
61
|
+
putCase(input) {
|
|
62
|
+
const result = ReplayCaseSchema.safeParse(input);
|
|
63
|
+
if (!result.success) {
|
|
64
|
+
const issues = result.error.issues
|
|
65
|
+
.map((i) => ` - ${i.path.join(".")}: ${i.message}`)
|
|
66
|
+
.join("\n");
|
|
67
|
+
throw new Error(`Invalid replay case input:\n${issues}`);
|
|
68
|
+
}
|
|
69
|
+
const data = result.data;
|
|
70
|
+
const id = caseId(data.contractId, data.iteration, data.diffDigest);
|
|
71
|
+
this.db
|
|
72
|
+
.prepare(`INSERT OR REPLACE INTO replay_cases
|
|
73
|
+
(case_id, contract_id, iteration, baseline_verdict, diff_digest, eval_details_json, t_captured)
|
|
74
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`)
|
|
75
|
+
.run(id, data.contractId, data.iteration, data.baselineVerdict, data.diffDigest, data.evalDetailsJson, data.tCaptured);
|
|
76
|
+
return {
|
|
77
|
+
caseId: id,
|
|
78
|
+
contractId: data.contractId,
|
|
79
|
+
iteration: data.iteration,
|
|
80
|
+
baselineVerdict: data.baselineVerdict,
|
|
81
|
+
diffDigest: data.diffDigest,
|
|
82
|
+
evalDetailsJson: data.evalDetailsJson,
|
|
83
|
+
tCaptured: data.tCaptured,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Return a single replay case by its id.
|
|
88
|
+
* Returns null if not found.
|
|
89
|
+
*/
|
|
90
|
+
getCase(id) {
|
|
91
|
+
const row = this.db
|
|
92
|
+
.prepare(`SELECT * FROM replay_cases WHERE case_id = ?`)
|
|
93
|
+
.get(id);
|
|
94
|
+
return row ? rowToRecord(row) : null;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Return all replay cases ordered by t_captured ascending.
|
|
98
|
+
*/
|
|
99
|
+
listCases() {
|
|
100
|
+
const rows = this.db
|
|
101
|
+
.prepare(`SELECT * FROM replay_cases ORDER BY t_captured ASC`)
|
|
102
|
+
.all();
|
|
103
|
+
return rows.map(rowToRecord);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Return the baseline verdict for a case id, or null if not found.
|
|
107
|
+
*/
|
|
108
|
+
getBaselineVerdict(id) {
|
|
109
|
+
const row = this.db
|
|
110
|
+
.prepare(`SELECT baseline_verdict FROM replay_cases WHERE case_id = ?`)
|
|
111
|
+
.get(id);
|
|
112
|
+
return row?.baseline_verdict ?? null;
|
|
113
|
+
}
|
|
114
|
+
/** Close the underlying database connection. */
|
|
115
|
+
close() {
|
|
116
|
+
this.db.close();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=replay-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-store.js","sourceRoot":"","sources":["../../../src/orchestrator/selfimprove/replay-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Zod schema for a replay case input — mirrors FactSchema in src/state/facts.ts.
|
|
4
|
+
* All timestamps are ISO 8601 strings; the store never reads the clock.
|
|
5
|
+
*/
|
|
6
|
+
export declare const ReplayCaseSchema: z.ZodObject<{
|
|
7
|
+
contractId: z.ZodString;
|
|
8
|
+
iteration: z.ZodNumber;
|
|
9
|
+
baselineVerdict: z.ZodEnum<["pass", "fail"]>;
|
|
10
|
+
diffDigest: z.ZodString;
|
|
11
|
+
evalDetailsJson: z.ZodString;
|
|
12
|
+
tCaptured: z.ZodString;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
contractId: string;
|
|
15
|
+
iteration: number;
|
|
16
|
+
baselineVerdict: "pass" | "fail";
|
|
17
|
+
diffDigest: string;
|
|
18
|
+
evalDetailsJson: string;
|
|
19
|
+
tCaptured: string;
|
|
20
|
+
}, {
|
|
21
|
+
contractId: string;
|
|
22
|
+
iteration: number;
|
|
23
|
+
baselineVerdict: "pass" | "fail";
|
|
24
|
+
diffDigest: string;
|
|
25
|
+
evalDetailsJson: string;
|
|
26
|
+
tCaptured: string;
|
|
27
|
+
}>;
|
|
28
|
+
export type ReplayCaseInput = z.infer<typeof ReplayCaseSchema>;
|
|
29
|
+
export interface ReplayCaseRecord extends ReplayCaseInput {
|
|
30
|
+
caseId: string;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=replay-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-types.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/selfimprove/replay-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;EAO3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAI/D,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
// ── Schema ────────────────────────────────────────────────────────────
|
|
3
|
+
/**
|
|
4
|
+
* Zod schema for a replay case input — mirrors FactSchema in src/state/facts.ts.
|
|
5
|
+
* All timestamps are ISO 8601 strings; the store never reads the clock.
|
|
6
|
+
*/
|
|
7
|
+
export const ReplayCaseSchema = z.object({
|
|
8
|
+
contractId: z.string().min(1),
|
|
9
|
+
iteration: z.number().int(),
|
|
10
|
+
baselineVerdict: z.enum(["pass", "fail"]),
|
|
11
|
+
diffDigest: z.string().min(1),
|
|
12
|
+
evalDetailsJson: z.string(),
|
|
13
|
+
tCaptured: z.string().datetime(),
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=replay-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-types.js","sourceRoot":"","sources":["../../../src/orchestrator/selfimprove/replay-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,yEAAyE;AAEzE;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC3B,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC"}
|
|
@@ -5,6 +5,8 @@ export type PipelineEngineName = "ts" | "skill" | "workflow";
|
|
|
5
5
|
/** Interface every pipeline engine implementation must satisfy. */
|
|
6
6
|
export interface PipelineEngine {
|
|
7
7
|
readonly name: PipelineEngineName;
|
|
8
|
-
run(userPrompt: string, projectRoot: string, config: BoberConfig
|
|
8
|
+
run(userPrompt: string, projectRoot: string, config: BoberConfig, opts?: {
|
|
9
|
+
runId?: string;
|
|
10
|
+
}): Promise<PipelineResult>;
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/workflow/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIrD,0FAA0F;AAC1F,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,OAAO,GAAG,UAAU,CAAC;AAE7D,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,GAAG,CACD,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/workflow/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIrD,0FAA0F;AAC1F,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,OAAO,GAAG,UAAU,CAAC;AAE7D,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,GAAG,CACD,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACxB,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { BoberConfig } from "../../config/schema.js";
|
|
2
2
|
import type { PipelineEngine, PipelineEngineName } from "./engine.js";
|
|
3
|
+
import type { Team } from "../../teams/types.js";
|
|
3
4
|
/**
|
|
4
5
|
* Pure resolver — returns the engine name without instantiating an engine.
|
|
5
6
|
*
|
|
@@ -23,4 +24,21 @@ export declare function resolveEngineName(config: BoberConfig): PipelineEngineNa
|
|
|
23
24
|
* - 'skill' remains on TsPipelineEngine (no skill engine this sprint — non-goal).
|
|
24
25
|
*/
|
|
25
26
|
export declare function selectPipelineEngine(config: BoberConfig): PipelineEngine;
|
|
27
|
+
/**
|
|
28
|
+
* Pure resolver — returns the engine name for a team, using team.pipelineShape
|
|
29
|
+
* as the requested engine, then applying the SAME downgrade pipeline as
|
|
30
|
+
* resolveEngineName (ineligible or mode='careful' → 'ts').
|
|
31
|
+
*
|
|
32
|
+
* The downgrade log line is byte-identical to resolveEngineName's (selector.ts:29-31).
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveEngineNameForTeam(team: Team, config: BoberConfig): PipelineEngineName;
|
|
35
|
+
/**
|
|
36
|
+
* Resolve a Team's pipelineShape to a PipelineEngine instance.
|
|
37
|
+
*
|
|
38
|
+
* Applies the same downgrade rules as selectPipelineEngine (via resolveEngineNameForTeam),
|
|
39
|
+
* and uses the same exhaustive switch over PipelineEngineName. The programming team's
|
|
40
|
+
* pipelineShape === resolveEngineName(config) by construction (registry.ts:68), so this
|
|
41
|
+
* is byte-for-byte identical to selectPipelineEngine(config) for the programming team.
|
|
42
|
+
*/
|
|
43
|
+
export declare function selectPipelineEngineForTeam(team: Team, config: BoberConfig): PipelineEngine;
|
|
26
44
|
//# sourceMappingURL=selector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/workflow/selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/workflow/selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAItE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAIjD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,kBAAkB,CAezE;AAID;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,CAaxE;AAID;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,WAAW,GAClB,kBAAkB,CAepB;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,WAAW,GAClB,cAAc,CAYhB"}
|
|
@@ -51,4 +51,45 @@ export function selectPipelineEngine(config) {
|
|
|
51
51
|
return new WorkflowEngine();
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
+
// ── Team-aware selection ───────────────────────────────────────────
|
|
55
|
+
/**
|
|
56
|
+
* Pure resolver — returns the engine name for a team, using team.pipelineShape
|
|
57
|
+
* as the requested engine, then applying the SAME downgrade pipeline as
|
|
58
|
+
* resolveEngineName (ineligible or mode='careful' → 'ts').
|
|
59
|
+
*
|
|
60
|
+
* The downgrade log line is byte-identical to resolveEngineName's (selector.ts:29-31).
|
|
61
|
+
*/
|
|
62
|
+
export function resolveEngineNameForTeam(team, config) {
|
|
63
|
+
const requested = team.pipelineShape;
|
|
64
|
+
if (requested === "workflow") {
|
|
65
|
+
const eligible = isWorkflowEligible(config);
|
|
66
|
+
const careful = config.pipeline?.mode === "careful";
|
|
67
|
+
if (!eligible || careful) {
|
|
68
|
+
logger.info(`Workflow engine requested but ${!eligible ? "ineligible" : "mode='careful'"}; downgrading to 'ts'.`);
|
|
69
|
+
return "ts";
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return requested;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Resolve a Team's pipelineShape to a PipelineEngine instance.
|
|
76
|
+
*
|
|
77
|
+
* Applies the same downgrade rules as selectPipelineEngine (via resolveEngineNameForTeam),
|
|
78
|
+
* and uses the same exhaustive switch over PipelineEngineName. The programming team's
|
|
79
|
+
* pipelineShape === resolveEngineName(config) by construction (registry.ts:68), so this
|
|
80
|
+
* is byte-for-byte identical to selectPipelineEngine(config) for the programming team.
|
|
81
|
+
*/
|
|
82
|
+
export function selectPipelineEngineForTeam(team, config) {
|
|
83
|
+
const name = resolveEngineNameForTeam(team, config);
|
|
84
|
+
switch (name) {
|
|
85
|
+
case "ts":
|
|
86
|
+
return new TsPipelineEngine();
|
|
87
|
+
case "skill":
|
|
88
|
+
// Skill engine deferred (non-goal); falls through to TS.
|
|
89
|
+
return new TsPipelineEngine();
|
|
90
|
+
case "workflow":
|
|
91
|
+
// Reachable only when resolveEngineNameForTeam returns 'workflow' (eligible + not careful).
|
|
92
|
+
return new WorkflowEngine();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
54
95
|
//# sourceMappingURL=selector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selector.js","sourceRoot":"","sources":["../../../src/orchestrator/workflow/selector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"selector.js","sourceRoot":"","sources":["../../../src/orchestrator/workflow/selector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,sEAAsE;AAEtE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,SAAS,GAAuB,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC;IAEtE,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,KAAK,SAAS,CAAC;QACpD,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CACT,iCAAiC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,wBAAwB,CACrG,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,sEAAsE;AAEtE;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,IAAI;YACP,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,KAAK,OAAO;YACV,qEAAqE;YACrE,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,KAAK,UAAU;YACb,qFAAqF;YACrF,mFAAmF;YACnF,OAAO,IAAI,cAAc,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED,sEAAsE;AAEtE;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAU,EACV,MAAmB;IAEnB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;IAErC,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,KAAK,SAAS,CAAC;QACpD,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CACT,iCAAiC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,wBAAwB,CACrG,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAU,EACV,MAAmB;IAEnB,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,IAAI;YACP,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,KAAK,OAAO;YACV,yDAAyD;YACzD,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,KAAK,UAAU;YACb,4FAA4F;YAC5F,OAAO,IAAI,cAAc,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -8,6 +8,8 @@ import type { PipelineEngine, PipelineEngineName } from "./engine.js";
|
|
|
8
8
|
*/
|
|
9
9
|
export declare class TsPipelineEngine implements PipelineEngine {
|
|
10
10
|
readonly name: PipelineEngineName;
|
|
11
|
-
run(userPrompt: string, projectRoot: string, config: BoberConfig
|
|
11
|
+
run(userPrompt: string, projectRoot: string, config: BoberConfig, opts?: {
|
|
12
|
+
runId?: string;
|
|
13
|
+
}): Promise<PipelineResult>;
|
|
12
14
|
}
|
|
13
15
|
//# sourceMappingURL=ts-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ts-engine.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/workflow/ts-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAItE;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,cAAc;IACrD,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAQ;IAEzC,GAAG,CACD,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"ts-engine.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/workflow/ts-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAItE;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,cAAc;IACrD,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAQ;IAEzC,GAAG,CACD,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACxB,OAAO,CAAC,cAAc,CAAC;CAG3B"}
|
|
@@ -7,8 +7,8 @@ import { runTsPipeline } from "../pipeline.js";
|
|
|
7
7
|
*/
|
|
8
8
|
export class TsPipelineEngine {
|
|
9
9
|
name = "ts";
|
|
10
|
-
run(userPrompt, projectRoot, config) {
|
|
11
|
-
return runTsPipeline(userPrompt, projectRoot, config);
|
|
10
|
+
run(userPrompt, projectRoot, config, opts) {
|
|
11
|
+
return runTsPipeline(userPrompt, projectRoot, config, opts);
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=ts-engine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ts-engine.js","sourceRoot":"","sources":["../../../src/orchestrator/workflow/ts-engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAI/C,sEAAsE;AAEtE;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAuB,IAAI,CAAC;IAEzC,GAAG,CACD,UAAkB,EAClB,WAAmB,EACnB,MAAmB;
|
|
1
|
+
{"version":3,"file":"ts-engine.js","sourceRoot":"","sources":["../../../src/orchestrator/workflow/ts-engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAI/C,sEAAsE;AAEtE;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAuB,IAAI,CAAC;IAEzC,GAAG,CACD,UAAkB,EAClB,WAAmB,EACnB,MAAmB,EACnB,IAAyB;QAEzB,OAAO,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;CACF"}
|
|
@@ -25,7 +25,9 @@ export declare class WorkflowEngine implements PipelineEngine {
|
|
|
25
25
|
* spawning real LLM agents.
|
|
26
26
|
*/
|
|
27
27
|
constructor(tsEngineFactory?: () => PipelineEngine);
|
|
28
|
-
run(userPrompt: string, projectRoot: string, config: BoberConfig
|
|
28
|
+
run(userPrompt: string, projectRoot: string, config: BoberConfig, opts?: {
|
|
29
|
+
runId?: string;
|
|
30
|
+
}): Promise<PipelineResult>;
|
|
29
31
|
private invoke;
|
|
30
32
|
}
|
|
31
33
|
//# sourceMappingURL=workflow-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-engine.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/workflow/workflow-engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAWtE;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,YAAW,cAAc;IASjD,OAAO,CAAC,QAAQ,CAAC,eAAe;IARlC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAc;IAE/C;;;;OAIG;gBAEgB,eAAe,GAAE,MAAM,cAChB;IAGpB,GAAG,CACP,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"workflow-engine.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/workflow/workflow-engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAWtE;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,YAAW,cAAc;IASjD,OAAO,CAAC,QAAQ,CAAC,eAAe;IARlC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAc;IAE/C;;;;OAIG;gBAEgB,eAAe,GAAE,MAAM,cAChB;IAGpB,GAAG,CACP,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACxB,OAAO,CAAC,cAAc,CAAC;YAwCZ,MAAM;CAKrB"}
|
|
@@ -33,11 +33,11 @@ export class WorkflowEngine {
|
|
|
33
33
|
constructor(tsEngineFactory = () => new TsPipelineEngine()) {
|
|
34
34
|
this.tsEngineFactory = tsEngineFactory;
|
|
35
35
|
}
|
|
36
|
-
async run(userPrompt, projectRoot, config) {
|
|
36
|
+
async run(userPrompt, projectRoot, config, opts) {
|
|
37
37
|
// ── STEP 1: Eligibility check FIRST (avoids MissingKnobError on downgrade path) ──
|
|
38
38
|
if (!isWorkflowEligible(config)) {
|
|
39
39
|
logger.info("workflow runtime unavailable — re-dispatching TS engine");
|
|
40
|
-
return this.tsEngineFactory().run(userPrompt, projectRoot, config);
|
|
40
|
+
return this.tsEngineFactory().run(userPrompt, projectRoot, config, opts);
|
|
41
41
|
}
|
|
42
42
|
// ── STEP 2: Reconstruct cursor (read-only — writes nothing) ────────────────
|
|
43
43
|
// specId is derived from config or empty — invoke is dormant so this is
|
|
@@ -54,7 +54,7 @@ export class WorkflowEngine {
|
|
|
54
54
|
catch (e) {
|
|
55
55
|
if (e instanceof WorkflowUnavailableError) {
|
|
56
56
|
logger.info("workflow runtime unavailable — re-dispatching TS engine");
|
|
57
|
-
return this.tsEngineFactory().run(userPrompt, projectRoot, config);
|
|
57
|
+
return this.tsEngineFactory().run(userPrompt, projectRoot, config, opts);
|
|
58
58
|
}
|
|
59
59
|
throw e;
|
|
60
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-engine.js","sourceRoot":"","sources":["../../../src/orchestrator/workflow/workflow-engine.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAItE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAGvD,uEAAuE;AAEvE;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,cAAc;IASN;IARV,IAAI,GAAuB,UAAU,CAAC;IAE/C;;;;OAIG;IACH,YACmB,kBAAwC,GAAG,EAAE,CAC5D,IAAI,gBAAgB,EAAE;QADP,oBAAe,GAAf,eAAe,CACR;IACvB,CAAC;IAEJ,KAAK,CAAC,GAAG,CACP,UAAkB,EAClB,WAAmB,EACnB,MAAmB;
|
|
1
|
+
{"version":3,"file":"workflow-engine.js","sourceRoot":"","sources":["../../../src/orchestrator/workflow/workflow-engine.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAItE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAGvD,uEAAuE;AAEvE;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,cAAc;IASN;IARV,IAAI,GAAuB,UAAU,CAAC;IAE/C;;;;OAIG;IACH,YACmB,kBAAwC,GAAG,EAAE,CAC5D,IAAI,gBAAgB,EAAE;QADP,oBAAe,GAAf,eAAe,CACR;IACvB,CAAC;IAEJ,KAAK,CAAC,GAAG,CACP,UAAkB,EAClB,WAAmB,EACnB,MAAmB,EACnB,IAAyB;QAEzB,oFAAoF;QACpF,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CACT,yDAAyD,CAC1D,CAAC;YACF,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3E,CAAC;QAED,8EAA8E;QAC9E,wEAAwE;QACxE,6EAA6E;QAC7E,MAAM,MAAM,GAAI,MAAM,CAAC,OAA2C,EAAE,MAAM,IAAI,EAAE,CAAC;QACjF,MAAM,MAAM,GAAG,MAAM,IAAI,yBAAyB,EAAE,CAAC,WAAW,CAC9D,WAAW,EACX,MAAM,CACP,CAAC;QAEF,+EAA+E;QAC/E,MAAM,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAE5E,8EAA8E;QAC9E,IAAI,CAAC;YACH,MAAM,MAAM,GAAsB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1D,OAAO,MAAM,IAAI,gBAAgB,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,wBAAwB,EAAE,CAAC;gBAC1C,MAAM,CAAC,IAAI,CACT,yDAAyD,CAC1D,CAAC;gBACF,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,EAAE;IACF,gFAAgF;IAChF,gFAAgF;IACxE,KAAK,CAAC,MAAM,CAAC,KAAmB;QACtC,MAAM,IAAI,wBAAwB,CAChC,+DAA+D,CAChE,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export { writeFact } from "../orchestrator/memory/reconcile.js";
|
|
3
|
+
export type { ReconcileAction } from "../orchestrator/memory/reconcile.js";
|
|
4
|
+
/**
|
|
5
|
+
* Zod schema for a fact input — mirrors LessonEntrySchema in memory.ts.
|
|
6
|
+
* All timestamps are ISO 8601 strings; the store never reads the clock.
|
|
7
|
+
*/
|
|
8
|
+
export declare const FactSchema: z.ZodObject<{
|
|
9
|
+
scope: z.ZodString;
|
|
10
|
+
subject: z.ZodString;
|
|
11
|
+
predicate: z.ZodString;
|
|
12
|
+
value: z.ZodString;
|
|
13
|
+
confidence: z.ZodDefault<z.ZodNumber>;
|
|
14
|
+
sourceRunId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
15
|
+
tValid: z.ZodString;
|
|
16
|
+
tCreated: z.ZodString;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
value: string;
|
|
19
|
+
scope: string;
|
|
20
|
+
subject: string;
|
|
21
|
+
predicate: string;
|
|
22
|
+
confidence: number;
|
|
23
|
+
sourceRunId: string | null;
|
|
24
|
+
tValid: string;
|
|
25
|
+
tCreated: string;
|
|
26
|
+
}, {
|
|
27
|
+
value: string;
|
|
28
|
+
scope: string;
|
|
29
|
+
subject: string;
|
|
30
|
+
predicate: string;
|
|
31
|
+
tValid: string;
|
|
32
|
+
tCreated: string;
|
|
33
|
+
confidence?: number | undefined;
|
|
34
|
+
sourceRunId?: string | null | undefined;
|
|
35
|
+
}>;
|
|
36
|
+
export type FactInput = z.infer<typeof FactSchema>;
|
|
37
|
+
export interface FactRecord {
|
|
38
|
+
id: string;
|
|
39
|
+
scope: string;
|
|
40
|
+
subject: string;
|
|
41
|
+
predicate: string;
|
|
42
|
+
value: string;
|
|
43
|
+
confidence: number;
|
|
44
|
+
sourceRunId: string | null;
|
|
45
|
+
tValid: string;
|
|
46
|
+
tInvalid: string | null;
|
|
47
|
+
tCreated: string;
|
|
48
|
+
tInvalidated: string | null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Derive a deterministic 16-char hex fact id from the fact signature.
|
|
52
|
+
* Mirrors lessonIdFromSignature in src/orchestrator/memory/distill.ts:88-99.
|
|
53
|
+
* Identical inputs always produce the same id — no wall-clock dependency.
|
|
54
|
+
*/
|
|
55
|
+
export declare function factId(scope: string, subject: string, predicate: string, value: string, tCreated: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Resolve the absolute path to facts.db for the given project root and namespace.
|
|
58
|
+
* Uses the same memoryDir mapping rule as memory.ts (no duplication).
|
|
59
|
+
*/
|
|
60
|
+
export declare function factsDbPath(projectRoot: string, namespace?: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* Ensure the directory that will hold the DB file exists.
|
|
63
|
+
* Must be called by the CLI handler before constructing a file-backed FactStore.
|
|
64
|
+
* Not needed for ':memory:' paths.
|
|
65
|
+
*/
|
|
66
|
+
export declare function ensureFactsDir(projectRoot: string, namespace?: string): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Bi-temporal SQLite-backed fact store.
|
|
69
|
+
*
|
|
70
|
+
* PURE: Never calls Date.now() or new Date() — every timestamp is a parameter.
|
|
71
|
+
* Hidden behind this interface so the driver (better-sqlite3) is swappable.
|
|
72
|
+
*
|
|
73
|
+
* bober: in-memory or file-backed via better-sqlite3 (synchronous); swap for
|
|
74
|
+
* node:sqlite when engines.node is raised to >=22.5.
|
|
75
|
+
*/
|
|
76
|
+
export declare class FactStore {
|
|
77
|
+
private db;
|
|
78
|
+
constructor(dbPath: string);
|
|
79
|
+
/**
|
|
80
|
+
* Insert a new fact. Validates input with FactSchema and derives the
|
|
81
|
+
* deterministic id. Returns the persisted FactRecord.
|
|
82
|
+
*/
|
|
83
|
+
insertFact(input: FactInput): FactRecord;
|
|
84
|
+
/**
|
|
85
|
+
* Return all active (non-invalidated) facts matching the given scope.
|
|
86
|
+
* Optionally filtered by subject and/or predicate.
|
|
87
|
+
* Active = t_invalidated IS NULL.
|
|
88
|
+
*/
|
|
89
|
+
getActiveFacts(scope: string, subject?: string, predicate?: string): FactRecord[];
|
|
90
|
+
/**
|
|
91
|
+
* Return a single fact by its id regardless of invalidation status.
|
|
92
|
+
* Returns null if not found.
|
|
93
|
+
*/
|
|
94
|
+
getFact(id: string): FactRecord | null;
|
|
95
|
+
/**
|
|
96
|
+
* Soft-delete a fact by setting t_invalidated.
|
|
97
|
+
* Returns true if the fact was invalidated, false if it was already invalidated or not found.
|
|
98
|
+
* Never deletes rows.
|
|
99
|
+
*/
|
|
100
|
+
invalidateFact(id: string, tInvalidated: string): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Supersede a fact: set BOTH t_invalidated (record-time) AND t_invalid (world-time end).
|
|
103
|
+
* Used by reconcile on UPDATE to carry both bi-temporal closure fields.
|
|
104
|
+
* Returns true if the row was updated; false if not found or already invalidated.
|
|
105
|
+
*/
|
|
106
|
+
supersedeFact(id: string, tInvalidated: string, tInvalid: string): boolean;
|
|
107
|
+
/** Close the underlying database connection. */
|
|
108
|
+
close(): void;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=facts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../src/state/facts.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAI3E;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;EASrB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAInD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAID;;;;GAIG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,MAAM,CAKR;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAEf;AAoCD;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAAe;gBAEb,MAAM,EAAE,MAAM;IAqB1B;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU;IA4CxC;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;IAqCjF;;;OAGG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAOtC;;;;OAIG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAWzD;;;;OAIG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAW1E,gDAAgD;IAChD,KAAK,IAAI,IAAI;CAGd"}
|