@dsh-enhanced/assistant-goals 0.1.30

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.
Files changed (100) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +274 -0
  3. package/cordis.patch.yml +3 -0
  4. package/lib/budget-store.d.ts +73 -0
  5. package/lib/budget-store.d.ts.map +1 -0
  6. package/lib/budget-store.js +345 -0
  7. package/lib/budget-store.js.map +1 -0
  8. package/lib/budget.d.ts +78 -0
  9. package/lib/budget.d.ts.map +1 -0
  10. package/lib/budget.js +344 -0
  11. package/lib/budget.js.map +1 -0
  12. package/lib/dependency.d.ts +11 -0
  13. package/lib/dependency.d.ts.map +1 -0
  14. package/lib/dependency.js +34 -0
  15. package/lib/dependency.js.map +1 -0
  16. package/lib/event-wait-store.d.ts +56 -0
  17. package/lib/event-wait-store.d.ts.map +1 -0
  18. package/lib/event-wait-store.js +189 -0
  19. package/lib/event-wait-store.js.map +1 -0
  20. package/lib/event-wait.d.ts +47 -0
  21. package/lib/event-wait.d.ts.map +1 -0
  22. package/lib/event-wait.js +372 -0
  23. package/lib/event-wait.js.map +1 -0
  24. package/lib/execution-store.d.ts +23 -0
  25. package/lib/execution-store.d.ts.map +1 -0
  26. package/lib/execution-store.js +207 -0
  27. package/lib/execution-store.js.map +1 -0
  28. package/lib/execution.d.ts +49 -0
  29. package/lib/execution.d.ts.map +1 -0
  30. package/lib/execution.js +438 -0
  31. package/lib/execution.js.map +1 -0
  32. package/lib/feedback.d.ts +63 -0
  33. package/lib/feedback.d.ts.map +1 -0
  34. package/lib/feedback.js +134 -0
  35. package/lib/feedback.js.map +1 -0
  36. package/lib/index.d.ts +27 -0
  37. package/lib/index.d.ts.map +1 -0
  38. package/lib/index.js +9 -0
  39. package/lib/index.js.map +1 -0
  40. package/lib/outcome-store.d.ts +47 -0
  41. package/lib/outcome-store.d.ts.map +1 -0
  42. package/lib/outcome-store.js +271 -0
  43. package/lib/outcome-store.js.map +1 -0
  44. package/lib/outcome.d.ts +77 -0
  45. package/lib/outcome.d.ts.map +1 -0
  46. package/lib/outcome.js +417 -0
  47. package/lib/outcome.js.map +1 -0
  48. package/lib/service.d.ts +363 -0
  49. package/lib/service.d.ts.map +1 -0
  50. package/lib/service.js +1839 -0
  51. package/lib/service.js.map +1 -0
  52. package/lib/store.d.ts +21 -0
  53. package/lib/store.d.ts.map +1 -0
  54. package/lib/store.js +577 -0
  55. package/lib/store.js.map +1 -0
  56. package/lib/strategy-feedback.d.ts +29 -0
  57. package/lib/strategy-feedback.d.ts.map +1 -0
  58. package/lib/strategy-feedback.js +53 -0
  59. package/lib/strategy-feedback.js.map +1 -0
  60. package/lib/strategy-identity.d.ts +11 -0
  61. package/lib/strategy-identity.d.ts.map +1 -0
  62. package/lib/strategy-identity.js +10 -0
  63. package/lib/strategy-identity.js.map +1 -0
  64. package/lib/strategy-store.d.ts +76 -0
  65. package/lib/strategy-store.d.ts.map +1 -0
  66. package/lib/strategy-store.js +277 -0
  67. package/lib/strategy-store.js.map +1 -0
  68. package/lib/strategy.d.ts +56 -0
  69. package/lib/strategy.d.ts.map +1 -0
  70. package/lib/strategy.js +478 -0
  71. package/lib/strategy.js.map +1 -0
  72. package/lib/tools.d.ts +4 -0
  73. package/lib/tools.d.ts.map +1 -0
  74. package/lib/tools.js +130 -0
  75. package/lib/tools.js.map +1 -0
  76. package/lib/types.d.ts +285 -0
  77. package/lib/types.d.ts.map +1 -0
  78. package/lib/types.js +10 -0
  79. package/lib/types.js.map +1 -0
  80. package/lib/verified-artifact.d.ts +72 -0
  81. package/lib/verified-artifact.d.ts.map +1 -0
  82. package/lib/verified-artifact.js +142 -0
  83. package/lib/verified-artifact.js.map +1 -0
  84. package/lib/verified-workflow.d.ts +120 -0
  85. package/lib/verified-workflow.d.ts.map +1 -0
  86. package/lib/verified-workflow.js +253 -0
  87. package/lib/verified-workflow.js.map +1 -0
  88. package/lib/version.d.ts +2 -0
  89. package/lib/version.d.ts.map +1 -0
  90. package/lib/version.js +2 -0
  91. package/lib/version.js.map +1 -0
  92. package/lib/wake-store.d.ts +38 -0
  93. package/lib/wake-store.d.ts.map +1 -0
  94. package/lib/wake-store.js +177 -0
  95. package/lib/wake-store.js.map +1 -0
  96. package/lib/wake.d.ts +45 -0
  97. package/lib/wake.d.ts.map +1 -0
  98. package/lib/wake.js +327 -0
  99. package/lib/wake.js.map +1 -0
  100. package/package.json +143 -0
@@ -0,0 +1,29 @@
1
+ import { type GoalStepFeedback } from './feedback.js';
2
+ import type { GoalBudgetRunUsage } from './budget-store.js';
3
+ import type { StrategyRecord } from './strategy-store.js';
4
+ import type { GoalExecutionRun, GoalRecord } from './types.js';
5
+ export interface GoalStrategyAssessment {
6
+ readonly id: string;
7
+ readonly kind: StrategyRecord['intent']['kind'];
8
+ readonly state: StrategyRecord['state'];
9
+ readonly outcome?: StrategyRecord['outcome'];
10
+ readonly terminationReason?: StrategyRecord['terminationReason'];
11
+ readonly durationMs?: number;
12
+ readonly definitionCurrent: boolean;
13
+ readonly parentRunId: string;
14
+ readonly parentSessionId: string;
15
+ /** Correlation to one exact execution, never causal credit or a strategy verdict. */
16
+ readonly attribution: 'same-parent-step-only';
17
+ readonly parentStep: GoalStepFeedback | null;
18
+ readonly nextAction: 'reconcile-execution' | 'inspect-strategy-execution' | 'await-parent-verification' | 'inspect-parent-verification' | 'revise-solution' | 'review-remaining-goal' | 'plan-current-definition';
19
+ readonly children: ReadonlyArray<Readonly<StrategyRecord['children'][number] & {
20
+ usage?: Readonly<GoalBudgetRunUsage>;
21
+ }>>;
22
+ }
23
+ export interface GoalStrategyHistory {
24
+ readonly available: true;
25
+ readonly records: readonly GoalStrategyAssessment[];
26
+ }
27
+ /** Read-only association. It revalidates the exact parent's independent receipt on every read. */
28
+ export declare function buildGoalStrategyHistory(goal: GoalRecord, strategies: readonly StrategyRecord[], runs: readonly GoalExecutionRun[], lookup: ((id: string) => unknown) | undefined, usage: (runId: string) => Readonly<GoalBudgetRunUsage> | undefined, now: number): GoalStrategyHistory;
29
+ //# sourceMappingURL=strategy-feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-feedback.d.ts","sourceRoot":"","sources":["../src/strategy-feedback.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE9D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;IAC/C,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;IAC5C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAA;IAChE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,qFAAqF;IACrF,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAA;IAC7C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC5C,QAAQ,CAAC,UAAU,EAAE,qBAAqB,GAAG,4BAA4B,GAAG,2BAA2B,GACnG,6BAA6B,GAAG,iBAAiB,GAAG,uBAAuB,GAAG,yBAAyB,CAAA;IAC3G,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAC,CAAC,CAAA;CAC1H;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAA;CACpD;AAMD,kGAAkG;AAClG,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,SAAS,cAAc,EAAE,EACrC,IAAI,EAAE,SAAS,gBAAgB,EAAE,EACjC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,EAC7C,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC,kBAAkB,CAAC,GAAG,SAAS,EAClE,GAAG,EAAE,MAAM,GACV,mBAAmB,CAyCrB"}
@@ -0,0 +1,53 @@
1
+ import { acceptanceCanonicalJson } from '@dsh-enhanced/task-acceptance-contract';
2
+ import { buildGoalFeedback } from './feedback.js';
3
+ const same = (left, right) => {
4
+ try {
5
+ return acceptanceCanonicalJson(left) === acceptanceCanonicalJson(right);
6
+ }
7
+ catch {
8
+ return false;
9
+ }
10
+ };
11
+ /** Read-only association. It revalidates the exact parent's independent receipt on every read. */
12
+ export function buildGoalStrategyHistory(goal, strategies, runs, lookup, usage, now) {
13
+ const records = strategies.slice(0, 32).filter(value => value.intent.goalId === goal.id && same(value.intent.scope, goal.scope)).slice(0, 3).map(value => {
14
+ const intent = value.intent;
15
+ const matches = runs.slice(0, 50).filter(run => run.intent.runId === intent.parentRunId
16
+ && run.intent.task.goal.runId === intent.parentRunId && run.intent.task.ref === intent.parentRunId
17
+ && run.intent.task.goal.sessionId === intent.parentSessionId && intent.parentSessionId === goal.native.sessionId
18
+ && run.intent.task.goal.nativeGoalId === goal.native.goalId && run.intent.task.goal.id === goal.id
19
+ && run.intent.task.goal.definitionVersion === intent.definitionVersion && run.intent.task.goal.definitionDigest === intent.definitionDigest
20
+ && same(run.intent.scope, intent.scope)
21
+ && run.dispatchedAt !== undefined && run.dispatchedAt <= intent.createdAt
22
+ && intent.createdAt < run.intent.admission.expiresAt && intent.expiresAt <= run.intent.admission.expiresAt);
23
+ // Duplicate or absent parents are not resolved by picking whichever receipt passed.
24
+ const assessed = matches.length === 1
25
+ ? buildGoalFeedback(goal, matches, lookup, now).verification.history[0] ?? null : null;
26
+ const parentStep = assessed === null ? null : Object.freeze({ ...assessed,
27
+ criteria: Object.freeze(assessed.criteria.slice(0, 3)), criteriaTruncated: assessed.criteriaTruncated || assessed.criteria.length > 3,
28
+ });
29
+ const definitionCurrent = intent.definitionVersion === goal.definition.version && intent.definitionDigest === goal.definition.digest;
30
+ const nextAction = value.state === 'unknown' || value.children.some(child => !child.quiescent)
31
+ || parentStep?.execution?.quiescent === false ? 'reconcile-execution'
32
+ : !definitionCurrent ? 'plan-current-definition'
33
+ : value.outcome === 'execution-failed' || value.outcome === 'cancelled' ? 'inspect-strategy-execution'
34
+ : value.state === 'prepared' || value.state === 'starting' || parentStep?.status === 'pending' ? 'await-parent-verification'
35
+ : parentStep?.status === 'not-achieved' ? 'revise-solution'
36
+ : parentStep?.status === 'achieved' ? 'review-remaining-goal' : 'inspect-parent-verification';
37
+ return Object.freeze({ id: intent.id, kind: intent.kind, state: value.state,
38
+ ...(value.outcome === undefined ? {} : { outcome: value.outcome }),
39
+ ...(value.terminationReason === undefined ? {} : { terminationReason: value.terminationReason }),
40
+ ...(value.completedAt === undefined ? {} : { durationMs: value.completedAt - intent.createdAt }),
41
+ definitionCurrent, parentRunId: intent.parentRunId, parentSessionId: intent.parentSessionId,
42
+ attribution: 'same-parent-step-only', parentStep, nextAction,
43
+ children: Object.freeze(value.children.map(child => {
44
+ const measured = usage(`strategy-${child.sessionId}`);
45
+ const diagnostics = child.diagnostics === undefined ? undefined : Object.freeze({ ...child.diagnostics,
46
+ ...(child.diagnostics.failure === undefined ? {} : { failure: Object.freeze({ ...child.diagnostics.failure }) }),
47
+ });
48
+ return Object.freeze({ ...child, ...(diagnostics === undefined ? {} : { diagnostics }), ...(measured === undefined ? {} : { usage: Object.freeze({ ...measured }) }) });
49
+ })), });
50
+ });
51
+ return Object.freeze({ available: true, records: Object.freeze(records) });
52
+ }
53
+ //# sourceMappingURL=strategy-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-feedback.js","sourceRoot":"","sources":["../src/strategy-feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Agent } from '@deepseek-ai/dsh-agent';
2
+ export declare const STRATEGY_PROVIDER = "assistant-goals-strategy/v1";
3
+ /** The native provider appends its hidden descriptor before the first request. */
4
+ export declare function strategyDescriptor(agent: Agent): {
5
+ version: number;
6
+ mode: string;
7
+ provider: string;
8
+ label?: string;
9
+ } | undefined;
10
+ export declare function isStrategyChild(agent: Agent): boolean;
11
+ //# sourceMappingURL=strategy-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-identity.d.ts","sourceRoot":"","sources":["../src/strategy-identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnD,eAAO,MAAM,iBAAiB,gCAAgC,CAAA;AAE9D,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAGhI;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAErD"}
@@ -0,0 +1,10 @@
1
+ export const STRATEGY_PROVIDER = 'assistant-goals-strategy/v1';
2
+ /** The native provider appends its hidden descriptor before the first request. */
3
+ export function strategyDescriptor(agent) {
4
+ const event = agent.session.snapshotEvents().find(value => String(value.type) === 'subagent/descriptor');
5
+ return event?.data;
6
+ }
7
+ export function isStrategyChild(agent) {
8
+ return strategyDescriptor(agent)?.provider === STRATEGY_PROVIDER;
9
+ }
10
+ //# sourceMappingURL=strategy-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-identity.js","sourceRoot":"","sources":["../src/strategy-identity.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,6BAA6B,CAAA;AAE9D,kFAAkF;AAClF,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,qBAAqB,CAAC,CAAA;IACxG,OAAO,KAAK,EAAE,IAAuF,CAAA;AACvG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,OAAO,kBAAkB,CAAC,KAAK,CAAC,EAAE,QAAQ,KAAK,iBAAiB,CAAA;AAClE,CAAC"}
@@ -0,0 +1,76 @@
1
+ import type { GoalScope } from './types.js';
2
+ export type StrategyScope = GoalScope;
3
+ export type StrategyKind = 'investigate' | 'review' | 'compare';
4
+ export interface StrategyIntent {
5
+ id: string;
6
+ goalId: string;
7
+ parentRunId: string;
8
+ parentSessionId: string;
9
+ definitionVersion: number;
10
+ definitionDigest: string;
11
+ scope: GoalScope;
12
+ kind: StrategyKind;
13
+ requestDigest: string;
14
+ provider: string;
15
+ model: string;
16
+ maxChildren: number;
17
+ maxDurationMs: number;
18
+ createdAt: number;
19
+ expiresAt: number;
20
+ }
21
+ export interface StrategyRecord {
22
+ intent: StrategyIntent;
23
+ state: 'prepared' | 'starting' | 'settled' | 'unknown';
24
+ version: number;
25
+ children: Array<{
26
+ sessionId: string;
27
+ stopReason: string;
28
+ quiescent: boolean;
29
+ diagnostics?: StrategyChildDiagnostics;
30
+ }>;
31
+ completedAt?: number;
32
+ outcome?: 'advice' | 'execution-failed' | 'cancelled' | 'unknown';
33
+ outputDigest?: string;
34
+ terminationReason?: StrategyTerminationReason;
35
+ }
36
+ export interface StrategyChildDiagnostics {
37
+ toolRejections: number;
38
+ output: 'not-observed' | 'accepted' | 'empty-or-oversized';
39
+ failure?: StrategyFailure;
40
+ }
41
+ export interface StrategyFailure {
42
+ stage: 'admission' | 'request-limit' | 'meter' | 'reserve' | 'stream' | 'usage' | 'settlement';
43
+ dispatched: boolean;
44
+ }
45
+ export type StrategyTerminationReason = 'deadline' | 'parent-authority-changed' | 'cancelled' | 'execution-failed' | 'unconfirmed-stop' | 'completed' | 'recovered-unknown' | 'unknown';
46
+ type Settlement = {
47
+ children: Array<{
48
+ sessionId: string;
49
+ stopReason: string;
50
+ quiescent: boolean;
51
+ diagnostics: StrategyChildDiagnostics;
52
+ }>;
53
+ outcome: 'advice' | 'execution-failed' | 'cancelled' | 'unknown';
54
+ outputDigest?: string;
55
+ quiescent: boolean;
56
+ terminationReason: StrategyTerminationReason;
57
+ };
58
+ /** Private durable ledger. A recovered intent is terminally unknown and is never replayed. */
59
+ export declare class GoalStrategyStore {
60
+ #private;
61
+ constructor(path: string);
62
+ prepare(input: StrategyIntent): {
63
+ record: StrategyRecord;
64
+ created: boolean;
65
+ };
66
+ /** Persists the provider-construction attempt before the native driver starts it. */
67
+ dispatch(id: string, expectedVersion: number, now: number): StrategyRecord;
68
+ bindChild(id: string, expectedVersion: number, sessionId: string, now: number): StrategyRecord;
69
+ settle(id: string, expectedVersion: number, input: Settlement, now: number): StrategyRecord;
70
+ inspect(scope: StrategyScope, id: string): StrategyRecord | undefined;
71
+ list(scope: StrategyScope, goalId: string, limit?: number): readonly StrategyRecord[];
72
+ recoverIncomplete(now: number): void;
73
+ close(): void;
74
+ }
75
+ export {};
76
+ //# sourceMappingURL=strategy-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-store.d.ts","sourceRoot":"","sources":["../src/strategy-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,277 @@
1
+ import { DatabaseSync } from 'node:sqlite';
2
+ import { acceptanceCanonicalJson, acceptanceDigest } from '@dsh-enhanced/task-acceptance-contract';
3
+ import { GoalStoreError } from './types.js';
4
+ import { prepareGoalStoreDatabaseFile } from './store.js';
5
+ const idPattern = /^[A-Za-z0-9_.:-]{1,512}$/u;
6
+ const digestPattern = /^[a-f0-9]{64}$/u;
7
+ const states = new Set(['prepared', 'starting', 'settled', 'unknown']);
8
+ const outcomes = new Set(['advice', 'execution-failed', 'cancelled', 'unknown']);
9
+ const terminationReasons = new Set(['deadline', 'parent-authority-changed', 'cancelled', 'execution-failed', 'unconfirmed-stop', 'completed', 'recovered-unknown', 'unknown']);
10
+ const failureStages = new Set(['admission', 'request-limit', 'meter', 'reserve', 'stream', 'usage', 'settlement']);
11
+ function fail(code) { throw new GoalStoreError(code); }
12
+ const parse = (value) => { try {
13
+ return JSON.parse(value);
14
+ }
15
+ catch {
16
+ return fail('schema');
17
+ } };
18
+ const same = (left, right) => acceptanceDigest(left) === acceptanceDigest(right);
19
+ const freeze = (value) => { if (value && typeof value === 'object') {
20
+ for (const child of Object.values(value))
21
+ freeze(child);
22
+ Object.freeze(value);
23
+ } ; return value; };
24
+ const clone = (value) => freeze(JSON.parse(JSON.stringify(value)));
25
+ const text = (value, maximum = 512) => typeof value === 'string' && value.length > 0 && value.length <= maximum;
26
+ const time = (value) => typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
27
+ const positive = (value, maximum = Number.MAX_SAFE_INTEGER) => typeof value === 'number' && Number.isSafeInteger(value) && value >= 1 && value <= maximum;
28
+ function scopeInput(value) {
29
+ if (!value || typeof value !== 'object' || Array.isArray(value) || Object.keys(value).length !== 5)
30
+ fail('invalid-input');
31
+ const scope = value;
32
+ if (!text(scope.principalId) || !text(scope.principalRecordId) || !positive(scope.principalVersion, 1_000_000_000) || !text(scope.workspace, 4096) || !scope.workspace.startsWith('/') || !text(scope.preset))
33
+ fail('invalid-input');
34
+ return clone({ principalId: scope.principalId, principalRecordId: scope.principalRecordId, principalVersion: scope.principalVersion, workspace: scope.workspace, preset: scope.preset });
35
+ }
36
+ function intentInput(value) {
37
+ if (!value || typeof value !== 'object' || Array.isArray(value) || Object.keys(value).length !== 15)
38
+ fail('invalid-input');
39
+ const input = value;
40
+ if (![input.id, input.goalId, input.parentRunId, input.parentSessionId].every(item => typeof item === 'string' && idPattern.test(item))
41
+ || !positive(input.definitionVersion, 1_000_000_000) || !digestPattern.test(input.definitionDigest) || !digestPattern.test(input.requestDigest)
42
+ || !['investigate', 'review', 'compare'].includes(input.kind) || !text(input.provider) || !text(input.model)
43
+ || !positive(input.maxChildren, 2) || !positive(input.maxDurationMs, 300_000) || !time(input.createdAt) || !time(input.expiresAt)
44
+ || input.expiresAt <= input.createdAt || input.expiresAt - input.createdAt > input.maxDurationMs)
45
+ fail('invalid-input');
46
+ const scope = scopeInput(input.scope);
47
+ return clone({ id: input.id, goalId: input.goalId, parentRunId: input.parentRunId, parentSessionId: input.parentSessionId, definitionVersion: input.definitionVersion, definitionDigest: input.definitionDigest, scope, kind: input.kind, requestDigest: input.requestDigest, provider: input.provider, model: input.model, maxChildren: input.maxChildren, maxDurationMs: input.maxDurationMs, createdAt: input.createdAt, expiresAt: input.expiresAt });
48
+ }
49
+ function diagnosticsInput(value) {
50
+ if (!value || typeof value !== 'object' || Array.isArray(value) || ![2, 3].includes(Object.keys(value).length))
51
+ fail('invalid-input');
52
+ const input = value;
53
+ if (!Object.keys(input).every(key => key === 'toolRejections' || key === 'output' || key === 'failure')
54
+ || !Object.keys(input).includes('toolRejections') || !Object.keys(input).includes('output')
55
+ || !Number.isSafeInteger(input.toolRejections) || input.toolRejections < 0 || input.toolRejections > 1_000_000
56
+ || !['not-observed', 'accepted', 'empty-or-oversized'].includes(input.output))
57
+ fail('invalid-input');
58
+ if (input.failure !== undefined && (!input.failure || typeof input.failure !== 'object' || Array.isArray(input.failure)
59
+ || !same(Object.keys(input.failure).sort(), ['dispatched', 'stage']) || !failureStages.has(input.failure.stage) || typeof input.failure.dispatched !== 'boolean'))
60
+ fail('invalid-input');
61
+ return clone({ toolRejections: input.toolRejections, output: input.output, ...(input.failure === undefined ? {} : { failure: { stage: input.failure.stage, dispatched: input.failure.dispatched } }) });
62
+ }
63
+ function childrenInput(value, maximum) {
64
+ if (!Array.isArray(value) || value.length > maximum)
65
+ fail('invalid-input');
66
+ const children = value.map(child => {
67
+ if (!child || typeof child !== 'object' || Array.isArray(child) || ![3, 4].includes(Object.keys(child).length))
68
+ fail('invalid-input');
69
+ const input = child;
70
+ if (!Object.keys(input).every(key => key === 'sessionId' || key === 'stopReason' || key === 'quiescent' || key === 'diagnostics')
71
+ || (typeof input.sessionId !== 'string' || !idPattern.test(input.sessionId)) || !text(input.stopReason) || typeof input.quiescent !== 'boolean')
72
+ fail('invalid-input');
73
+ return { sessionId: input.sessionId, stopReason: input.stopReason, quiescent: input.quiescent, ...(input.diagnostics === undefined ? {} : { diagnostics: diagnosticsInput(input.diagnostics) }) };
74
+ });
75
+ if (new Set(children.map(child => child.sessionId)).size !== children.length)
76
+ fail('invalid-input');
77
+ return clone(children);
78
+ }
79
+ function settlementInput(value, maxChildren) {
80
+ if (!value || typeof value !== 'object' || Array.isArray(value) || ![4, 5].includes(Object.keys(value).length))
81
+ fail('invalid-input');
82
+ const input = value;
83
+ const keys = Object.keys(input);
84
+ if (!keys.every(key => ['children', 'outcome', 'outputDigest', 'quiescent', 'terminationReason'].includes(key)) || !keys.includes('children') || !keys.includes('outcome') || !keys.includes('quiescent') || !keys.includes('terminationReason') || (keys.length === 5 && !keys.includes('outputDigest'))
85
+ || !outcomes.has(input.outcome) || !terminationReasons.has(input.terminationReason) || typeof input.quiescent !== 'boolean' || (input.outputDigest !== undefined && !digestPattern.test(input.outputDigest)))
86
+ fail('invalid-input');
87
+ const children = childrenInput(input.children, maxChildren);
88
+ if (children.some(child => child.diagnostics === undefined))
89
+ fail('invalid-input');
90
+ return clone({ children: children, outcome: input.outcome, ...(input.outputDigest === undefined ? {} : { outputDigest: input.outputDigest }), quiescent: input.quiescent, terminationReason: input.terminationReason });
91
+ }
92
+ function record(row) {
93
+ const intent = intentInput(parse(row.intent_json));
94
+ if (!states.has(row.state) || !positive(row.version, 1_000_000_000) || row.scope_key !== acceptanceCanonicalJson(intent.scope) || row.goal_id !== intent.goalId || row.created_at !== intent.createdAt)
95
+ fail('schema');
96
+ const children = childrenInput(parse(row.children_json), intent.maxChildren);
97
+ const completedAt = row.completed_at === null ? undefined : time(row.completed_at) ? row.completed_at : fail('schema');
98
+ const outcome = row.outcome === null ? undefined : outcomes.has(row.outcome) ? row.outcome : fail('schema');
99
+ const outputDigest = row.output_digest === null ? undefined : digestPattern.test(row.output_digest) ? row.output_digest : fail('schema');
100
+ const terminationReason = row.termination_reason === null ? undefined : terminationReasons.has(row.termination_reason) ? row.termination_reason : fail('schema');
101
+ if (row.state === 'prepared' && (children.length !== 0 || completedAt !== undefined || outcome !== undefined || outputDigest !== undefined || terminationReason !== undefined))
102
+ fail('schema');
103
+ if (row.state === 'starting' && (completedAt !== undefined || outcome !== undefined || outputDigest !== undefined || terminationReason !== undefined))
104
+ fail('schema');
105
+ if ((row.state === 'settled' || row.state === 'unknown') && (completedAt === undefined || outcome === undefined || terminationReason === undefined || completedAt < intent.createdAt))
106
+ fail('schema');
107
+ if (row.state === 'unknown' && outcome !== 'unknown')
108
+ fail('schema');
109
+ return freeze({ intent, state: row.state, version: row.version, children, ...(completedAt === undefined ? {} : { completedAt }), ...(outcome === undefined ? {} : { outcome }), ...(outputDigest === undefined ? {} : { outputDigest }), ...(terminationReason === undefined ? {} : { terminationReason }) });
110
+ }
111
+ /** Private durable ledger. A recovered intent is terminally unknown and is never replayed. */
112
+ export class GoalStrategyStore {
113
+ #database;
114
+ constructor(path) {
115
+ if (path !== ':memory:')
116
+ prepareGoalStoreDatabaseFile(path);
117
+ this.#database = new DatabaseSync(path, { enableForeignKeyConstraints: true });
118
+ try {
119
+ this.#database.exec('PRAGMA foreign_keys = ON; PRAGMA busy_timeout = 250; PRAGMA journal_mode = WAL; PRAGMA synchronous = FULL;');
120
+ const version = this.#database.prepare('PRAGMA user_version').get().user_version;
121
+ const tables = this.#database.prepare("SELECT name FROM sqlite_schema WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name").all().map(row => row.name);
122
+ if (version === 0 && tables.length === 0)
123
+ this.#database.exec(`BEGIN IMMEDIATE;
124
+ CREATE TABLE goal_strategy_records (id TEXT PRIMARY KEY, intent_json TEXT NOT NULL, state TEXT NOT NULL CHECK(state IN ('prepared','starting','settled','unknown')), version INTEGER NOT NULL, children_json TEXT NOT NULL, completed_at INTEGER, outcome TEXT CHECK(outcome IN ('advice','execution-failed','cancelled','unknown')), output_digest TEXT, scope_key TEXT NOT NULL, goal_id TEXT NOT NULL, created_at INTEGER NOT NULL, termination_reason TEXT CHECK(termination_reason IN ('deadline','parent-authority-changed','cancelled','execution-failed','unconfirmed-stop','completed','recovered-unknown','unknown'))) STRICT;
125
+ CREATE INDEX goal_strategy_scope_goal_created ON goal_strategy_records(scope_key, goal_id, created_at DESC, id ASC);
126
+ PRAGMA user_version = 2; COMMIT;`);
127
+ else if (version === 1 && same(tables, ['goal_strategy_records'])) {
128
+ this.#database.exec('BEGIN IMMEDIATE;');
129
+ try {
130
+ this.#validate(true);
131
+ this.#database.exec(`
132
+ ALTER TABLE goal_strategy_records ADD COLUMN termination_reason TEXT CHECK(termination_reason IN ('deadline','parent-authority-changed','cancelled','execution-failed','unconfirmed-stop','completed','recovered-unknown','unknown'));
133
+ UPDATE goal_strategy_records SET termination_reason = CASE WHEN state IN ('settled', 'unknown') THEN 'unknown' ELSE NULL END;
134
+ PRAGMA user_version = 2;`);
135
+ this.#validate();
136
+ this.#database.exec('COMMIT;');
137
+ }
138
+ catch (error) {
139
+ try {
140
+ this.#database.exec('ROLLBACK;');
141
+ }
142
+ catch { }
143
+ ;
144
+ throw error;
145
+ }
146
+ }
147
+ else if (version !== 2 || !same(tables, ['goal_strategy_records']))
148
+ fail('schema');
149
+ this.#validate();
150
+ if (path !== ':memory:')
151
+ prepareGoalStoreDatabaseFile(path);
152
+ }
153
+ catch (error) {
154
+ this.#database.close();
155
+ throw error;
156
+ }
157
+ }
158
+ #validate(legacy = false) {
159
+ const columns = this.#database.prepare('PRAGMA table_info(goal_strategy_records)').all().map(row => row.name);
160
+ const schema = this.#database.prepare("SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = 'goal_strategy_records'").get();
161
+ if (!schema || !same(columns, ['id', 'intent_json', 'state', 'version', 'children_json', 'completed_at', 'outcome', 'output_digest', 'scope_key', 'goal_id', 'created_at', ...(legacy ? [] : ['termination_reason'])]) || !/\bSTRICT\b/u.test(schema.sql))
162
+ fail('schema');
163
+ const index = this.#database.prepare("SELECT name FROM sqlite_schema WHERE type = 'index' AND name = 'goal_strategy_scope_goal_created'").get();
164
+ if (!index)
165
+ fail('schema');
166
+ const check = this.#database.prepare('PRAGMA quick_check').get();
167
+ if (check.quick_check !== 'ok')
168
+ fail('schema');
169
+ for (const row of this.#database.prepare(`SELECT id, intent_json, state, version, children_json, completed_at, outcome, output_digest, ${legacy ? "CASE WHEN state IN ('settled', 'unknown') THEN 'unknown' ELSE NULL END AS termination_reason" : 'termination_reason'}, scope_key, goal_id, created_at FROM goal_strategy_records`).all()) {
170
+ const value = record(row);
171
+ if (value.intent.id !== row.id)
172
+ fail('schema');
173
+ }
174
+ }
175
+ #get(id) {
176
+ const row = this.#database.prepare('SELECT id, intent_json, state, version, children_json, completed_at, outcome, output_digest, termination_reason, scope_key, goal_id, created_at FROM goal_strategy_records WHERE id = ?').get(id);
177
+ return row === undefined ? undefined : record(row);
178
+ }
179
+ #write(sql, ...values) { try {
180
+ return Number(this.#database.prepare(sql).run(...values).changes);
181
+ }
182
+ catch {
183
+ fail('conflict');
184
+ } }
185
+ prepare(input) {
186
+ const intent = intentInput(input);
187
+ this.#database.exec('BEGIN IMMEDIATE;');
188
+ try {
189
+ const existing = this.#get(intent.id);
190
+ if (existing) {
191
+ if (!same(existing.intent, intent))
192
+ fail('conflict');
193
+ this.#database.exec('COMMIT;');
194
+ return freeze({ record: existing, created: false });
195
+ }
196
+ this.#write("INSERT INTO goal_strategy_records(id, intent_json, state, version, children_json, scope_key, goal_id, created_at) VALUES (?, ?, 'prepared', 1, '[]', ?, ?, ?)", intent.id, JSON.stringify(intent), acceptanceCanonicalJson(intent.scope), intent.goalId, intent.createdAt);
197
+ const result = this.#get(intent.id);
198
+ this.#database.exec('COMMIT;');
199
+ return freeze({ record: result, created: true });
200
+ }
201
+ catch (error) {
202
+ try {
203
+ this.#database.exec('ROLLBACK;');
204
+ }
205
+ catch { }
206
+ throw error;
207
+ }
208
+ }
209
+ /** Persists the provider-construction attempt before the native driver starts it. */
210
+ dispatch(id, expectedVersion, now) {
211
+ if (!idPattern.test(id) || !positive(expectedVersion, 1_000_000_000) || !time(now))
212
+ fail('invalid-input');
213
+ const found = this.#get(id);
214
+ if (!found)
215
+ fail('not-found');
216
+ if (found.state !== 'prepared' || found.version !== expectedVersion || now < found.intent.createdAt || now >= found.intent.expiresAt)
217
+ fail('conflict');
218
+ if (this.#write("UPDATE goal_strategy_records SET state = 'starting', version = version + 1 WHERE id = ? AND state = 'prepared' AND version = ?", id, expectedVersion) !== 1)
219
+ fail('conflict');
220
+ return this.#get(id);
221
+ }
222
+ bindChild(id, expectedVersion, sessionId, now) {
223
+ if (!idPattern.test(id) || !positive(expectedVersion, 1_000_000_000) || !idPattern.test(sessionId) || !time(now))
224
+ fail('invalid-input');
225
+ const found = this.#get(id);
226
+ if (!found)
227
+ fail('not-found');
228
+ if (found.state !== 'starting' || found.version !== expectedVersion || now < found.intent.createdAt || now >= found.intent.expiresAt || found.children.length >= found.intent.maxChildren || found.children.some(child => child.sessionId === sessionId))
229
+ fail('conflict');
230
+ const children = [...found.children, { sessionId, stopReason: 'pending', quiescent: false, diagnostics: { toolRejections: 0, output: 'not-observed' } }];
231
+ if (this.#write("UPDATE goal_strategy_records SET children_json = ?, version = version + 1 WHERE id = ? AND state = 'starting' AND version = ?", JSON.stringify(children), id, expectedVersion) !== 1)
232
+ fail('conflict');
233
+ return this.#get(id);
234
+ }
235
+ settle(id, expectedVersion, input, now) {
236
+ if (!idPattern.test(id) || !positive(expectedVersion, 1_000_000_000) || !time(now))
237
+ fail('invalid-input');
238
+ const found = this.#get(id);
239
+ if (!found)
240
+ fail('not-found');
241
+ const value = settlementInput(input, found.intent.maxChildren);
242
+ if (found.state !== 'starting' || found.version !== expectedVersion || now < found.intent.createdAt)
243
+ fail('conflict');
244
+ const bound = new Set(found.children.map(child => child.sessionId));
245
+ const settled = new Set(value.children.map(child => child.sessionId));
246
+ if (bound.size !== settled.size || [...bound].some(sessionId => !settled.has(sessionId)) || (bound.size === 0 && value.outcome === 'advice'))
247
+ fail('conflict');
248
+ const incomplete = value.children.some(child => child.stopReason === 'pending' || !child.quiescent);
249
+ const state = value.quiescent && !incomplete && value.outcome !== 'unknown' ? 'settled' : 'unknown';
250
+ const outcome = state === 'settled' ? value.outcome : 'unknown';
251
+ const outputDigest = state === 'settled' ? value.outputDigest ?? null : null;
252
+ if (this.#write('UPDATE goal_strategy_records SET state = ?, version = version + 1, children_json = ?, completed_at = ?, outcome = ?, output_digest = ?, termination_reason = ? WHERE id = ? AND state = \'starting\' AND version = ?', state, JSON.stringify(value.children), now, outcome, outputDigest, value.terminationReason, id, expectedVersion) !== 1)
253
+ fail('conflict');
254
+ return this.#get(id);
255
+ }
256
+ inspect(scope, id) {
257
+ if (!idPattern.test(id))
258
+ fail('invalid-input');
259
+ const key = acceptanceCanonicalJson(scopeInput(scope));
260
+ const row = this.#database.prepare('SELECT id, intent_json, state, version, children_json, completed_at, outcome, output_digest, termination_reason, scope_key, goal_id, created_at FROM goal_strategy_records WHERE id = ? AND scope_key = ?').get(id, key);
261
+ return row === undefined ? undefined : record(row);
262
+ }
263
+ list(scope, goalId, limit = 20) {
264
+ if (!idPattern.test(goalId) || !positive(limit, 100))
265
+ fail('invalid-input');
266
+ const key = acceptanceCanonicalJson(scopeInput(scope));
267
+ const rows = this.#database.prepare('SELECT id, intent_json, state, version, children_json, completed_at, outcome, output_digest, termination_reason, scope_key, goal_id, created_at FROM goal_strategy_records WHERE scope_key = ? AND goal_id = ? ORDER BY created_at DESC, id ASC LIMIT ?').all(key, goalId, limit);
268
+ return freeze(rows.map(record));
269
+ }
270
+ recoverIncomplete(now) {
271
+ if (!time(now))
272
+ fail('invalid-input');
273
+ this.#write("UPDATE goal_strategy_records SET state = 'unknown', version = version + 1, completed_at = ?, outcome = 'unknown', output_digest = NULL, termination_reason = 'recovered-unknown' WHERE state IN ('prepared', 'starting')", now);
274
+ }
275
+ close() { this.#database.close(); }
276
+ }
277
+ //# sourceMappingURL=strategy-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-store.js","sourceRoot":"","sources":["../src/strategy-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { Agent } from '@deepseek-ai/dsh-agent';
3
+ import type { GoalBudgetRuntime } from './budget.js';
4
+ import type { StrategyChildDiagnostics, StrategyKind, StrategyRecord, StrategyTerminationReason } from './strategy-store.js';
5
+ import type { GoalExecutionRun, GoalRecord, GoalScope } from './types.js';
6
+ export interface GoalStrategyConfig {
7
+ maxDurationMs: number;
8
+ maxPromptBytes: number;
9
+ maxOutputBytes: number;
10
+ maxRunsPerGoal: number;
11
+ }
12
+ export interface GoalStrategyInput {
13
+ kind: StrategyKind;
14
+ question: string;
15
+ context?: string;
16
+ }
17
+ export interface GoalStrategyResult {
18
+ strategyId: string;
19
+ outcome: 'advice' | 'execution-failed' | 'cancelled' | 'unknown';
20
+ advice: string[];
21
+ terminationReason: StrategyTerminationReason;
22
+ children: Array<{
23
+ sessionId: string;
24
+ stopReason: string;
25
+ quiescent: boolean;
26
+ diagnostics?: StrategyChildDiagnostics;
27
+ }>;
28
+ unverified: true;
29
+ }
30
+ /** Strict, side-effect-free configuration boundary used by service preauthorization. */
31
+ export declare function validateGoalStrategyConfig(input?: Partial<GoalStrategyConfig>): Readonly<GoalStrategyConfig>;
32
+ /** Detach only finite plain strings; no caller-owned objects reach a strategy child. */
33
+ export declare function validateGoalStrategyInput(input: unknown): Readonly<GoalStrategyInput>;
34
+ type Current = {
35
+ record: GoalRecord;
36
+ run: GoalExecutionRun;
37
+ signal: AbortSignal;
38
+ };
39
+ /**
40
+ * Host-only one-shot strategy runner. Strategy output is deliberately advice
41
+ * only: it never feeds a verifier or changes a goal's native lifecycle.
42
+ */
43
+ export declare class GoalStrategyRuntime {
44
+ #private;
45
+ private readonly ctx;
46
+ readonly config: Readonly<GoalStrategyConfig>;
47
+ private readonly callbacks;
48
+ constructor(ctx: Context, path: string, config: Readonly<GoalStrategyConfig>, callbacks: {
49
+ current(parent: Agent): Current;
50
+ budget: GoalBudgetRuntime;
51
+ });
52
+ list: (scope: GoalScope, goalId: string) => readonly StrategyRecord[];
53
+ run(parent: Agent, raw: GoalStrategyInput, signal: AbortSignal): Promise<GoalStrategyResult>;
54
+ }
55
+ export {};
56
+ //# sourceMappingURL=strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAMnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGpD,OAAO,KAAK,EAAE,wBAAwB,EAAE,YAAY,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC5H,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEzE,MAAM,WAAW,kBAAkB;IAAG,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE;AACrI,MAAM,WAAW,iBAAiB;IAAG,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AAC7F,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,QAAQ,GAAG,kBAAkB,GAAG,WAAW,GAAG,SAAS,CAAA;IAChE,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,iBAAiB,EAAE,yBAAyB,CAAA;IAC5C,QAAQ,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,wBAAwB,CAAA;KAAE,CAAC,CAAA;IACtH,UAAU,EAAE,IAAI,CAAA;CACjB;AAOD,wFAAwF;AACxF,wBAAgB,0BAA0B,CAAC,KAAK,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAOhH;AAED,wFAAwF;AACxF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAOrF;AAED,KAAK,OAAO,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAA;AA0BjF;;;GAGG;AACH,qBAAa,mBAAmB;;IAc5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAEpB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAHT,GAAG,EAAE,OAAO,EAC7B,IAAI,EAAE,MAAM,EACH,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAC5B,SAAS,EAAE;QAAE,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAA;KAAE;IAuD5F,IAAI,GAAI,OAAO,SAAS,EAAE,QAAQ,MAAM,KAAG,SAAS,cAAc,EAAE,CAA4D;IAE1H,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA2QnG"}