@askdkc/kiokuko 0.1.28 → 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.
- package/dist/akinator/agent-task.d.ts.map +1 -1
- package/dist/akinator/agent-task.js +105 -79
- package/dist/akinator/agent-task.js.map +1 -1
- package/dist/akinator/store.d.ts.map +1 -1
- package/dist/akinator/store.js +5 -1
- package/dist/akinator/store.js.map +1 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +26 -2
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/doctor.d.ts +11 -5
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +258 -129
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +3 -0
- package/dist/commands/setup.js.map +1 -1
- package/dist/context/delivery-migration.d.ts +40 -0
- package/dist/context/delivery-migration.d.ts.map +1 -0
- package/dist/context/delivery-migration.js +360 -0
- package/dist/context/delivery-migration.js.map +1 -0
- package/dist/context/delivery.d.ts +2 -0
- package/dist/context/delivery.d.ts.map +1 -1
- package/dist/context/delivery.js +45 -6
- package/dist/context/delivery.js.map +1 -1
- package/dist/context/nudge-store.d.ts +57 -0
- package/dist/context/nudge-store.d.ts.map +1 -0
- package/dist/context/nudge-store.js +227 -0
- package/dist/context/nudge-store.js.map +1 -0
- package/dist/context/nudge-validation.d.ts +26 -0
- package/dist/context/nudge-validation.d.ts.map +1 -0
- package/dist/context/nudge-validation.js +122 -0
- package/dist/context/nudge-validation.js.map +1 -0
- package/dist/context/nudges.d.ts +38 -0
- package/dist/context/nudges.d.ts.map +1 -0
- package/dist/context/nudges.js +131 -0
- package/dist/context/nudges.js.map +1 -0
- package/dist/context/scoped-broker.d.ts.map +1 -1
- package/dist/context/scoped-broker.js +5 -0
- package/dist/context/scoped-broker.js.map +1 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +5 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/gateway/checkpoint-mutation-service.d.ts +33 -0
- package/dist/gateway/checkpoint-mutation-service.d.ts.map +1 -0
- package/dist/gateway/checkpoint-mutation-service.js +513 -0
- package/dist/gateway/checkpoint-mutation-service.js.map +1 -0
- package/dist/gateway/checkpoint-service.d.ts +22 -25
- package/dist/gateway/checkpoint-service.d.ts.map +1 -1
- package/dist/gateway/checkpoint-service.js +26 -209
- package/dist/gateway/checkpoint-service.js.map +1 -1
- package/dist/gateway/nudge-delivery-service.d.ts +21 -0
- package/dist/gateway/nudge-delivery-service.d.ts.map +1 -0
- package/dist/gateway/nudge-delivery-service.js +67 -0
- package/dist/gateway/nudge-delivery-service.js.map +1 -0
- package/dist/ledger/archive.d.ts +2 -1
- package/dist/ledger/archive.d.ts.map +1 -1
- package/dist/ledger/archive.js +109 -8
- package/dist/ledger/archive.js.map +1 -1
- package/dist/ledger/checkpoint-contract.d.ts +3 -3
- package/dist/ledger/maintenance.d.ts +2 -1
- package/dist/ledger/maintenance.d.ts.map +1 -1
- package/dist/ledger/maintenance.js +90 -7
- package/dist/ledger/maintenance.js.map +1 -1
- package/dist/ledger/projection.d.ts +2 -0
- package/dist/ledger/projection.d.ts.map +1 -1
- package/dist/ledger/projection.js +9 -1
- package/dist/ledger/projection.js.map +1 -1
- package/dist/memory/checkpoint-contract.d.ts +6 -6
- package/dist/server/agent-application.d.ts.map +1 -1
- package/dist/server/agent-application.js +18 -4
- package/dist/server/agent-application.js.map +1 -1
- package/dist/server/agent-checkpoint-use-case.d.ts +41 -0
- package/dist/server/agent-checkpoint-use-case.d.ts.map +1 -0
- package/dist/server/agent-checkpoint-use-case.js +158 -0
- package/dist/server/agent-checkpoint-use-case.js.map +1 -0
- package/dist/server/routes/agent-runs.d.ts +11 -4
- package/dist/server/routes/agent-runs.d.ts.map +1 -1
- package/dist/server/routes/agent-runs.js.map +1 -1
- package/dist/server/routes/task5.d.ts.map +1 -1
- package/dist/server/routes/task5.js +29 -91
- package/dist/server/routes/task5.js.map +1 -1
- package/migrations/010_nudge_deliveries.sql +50 -0
- package/migrations/011_nudge_integrity.sql +52 -0
- package/migrations/012_context_delivery_v4.sql +3 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-application.js","sourceRoot":"","sources":["../../src/server/agent-application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"agent-application.js","sourceRoot":"","sources":["../../src/server/agent-application.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { AgentGatewayService } from '../gateway/agent-service.js';
|
|
2
|
+
import type { CheckpointMutationPort, CheckpointMutationResult } from '../gateway/checkpoint-mutation-service.js';
|
|
3
|
+
import type { NudgeDeliveryPort } from '../gateway/nudge-delivery-service.js';
|
|
4
|
+
import type { ContextBroker, ContextBrokerResult } from '../context/broker.js';
|
|
5
|
+
import type { DeliveredNudge } from '../context/nudges.js';
|
|
6
|
+
import type { Recommendation } from '../context/recommendations.js';
|
|
7
|
+
import { successEnvelope } from '../serialization/envelope.js';
|
|
8
|
+
import type { CapabilityGatedIntakeResponse } from './routes/agent-capability-gate.js';
|
|
9
|
+
export interface AgentCheckpointUseCaseDependencies {
|
|
10
|
+
readonly database: import('../db/adapter.js').SqliteDatabase;
|
|
11
|
+
readonly service: AgentGatewayService;
|
|
12
|
+
readonly checkpointMutation: CheckpointMutationPort;
|
|
13
|
+
readonly validateMutationAcknowledgement?: boolean;
|
|
14
|
+
readonly nudgeDelivery: NudgeDeliveryPort;
|
|
15
|
+
readonly broker: ContextBroker;
|
|
16
|
+
readonly enqueueWrite: <T>(operation: () => T | PromiseLike<T>) => Promise<T>;
|
|
17
|
+
}
|
|
18
|
+
export interface AgentCheckpointInput {
|
|
19
|
+
readonly runId: string;
|
|
20
|
+
readonly idempotencyKey: string;
|
|
21
|
+
readonly body: unknown;
|
|
22
|
+
readonly requestBindingHash: string;
|
|
23
|
+
}
|
|
24
|
+
export type AgentCheckpointResponse = Omit<CheckpointMutationResult, 'preliminaryRecommendations'> & {
|
|
25
|
+
readonly recommendations: readonly Recommendation[];
|
|
26
|
+
readonly capabilities: CapabilityGatedIntakeResponse['capabilities'];
|
|
27
|
+
readonly memoryPolicy: CapabilityGatedIntakeResponse['memoryPolicy'];
|
|
28
|
+
readonly warnings: CapabilityGatedIntakeResponse['warnings'];
|
|
29
|
+
readonly nextAction: CapabilityGatedIntakeResponse['nextAction'];
|
|
30
|
+
readonly context: ContextBrokerResult['context'];
|
|
31
|
+
readonly nudge: DeliveredNudge | null;
|
|
32
|
+
readonly untrusted: true;
|
|
33
|
+
readonly requestBindingHash: string;
|
|
34
|
+
};
|
|
35
|
+
export declare class AgentCheckpointUseCase {
|
|
36
|
+
private readonly dependencies;
|
|
37
|
+
constructor(dependencies: AgentCheckpointUseCaseDependencies);
|
|
38
|
+
execute(input: AgentCheckpointInput): Promise<AgentCheckpointResponse>;
|
|
39
|
+
}
|
|
40
|
+
export declare function checkpointSuccessResponse(value: AgentCheckpointResponse): ReturnType<typeof successEnvelope>;
|
|
41
|
+
//# sourceMappingURL=agent-checkpoint-use-case.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-checkpoint-use-case.d.ts","sourceRoot":"","sources":["../../src/server/agent-checkpoint-use-case.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAClH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGpE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AASvF,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,QAAQ,EAAE,OAAO,kBAAkB,EAAE,cAAc,CAAC;IAC7D,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;IACpD,QAAQ,CAAC,+BAA+B,CAAC,EAAE,OAAO,CAAC;IACnD,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/E;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,EAAE,4BAA4B,CAAC,GAAG;IACnG,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IACpD,QAAQ,CAAC,YAAY,EAAE,6BAA6B,CAAC,cAAc,CAAC,CAAC;IACrE,QAAQ,CAAC,YAAY,EAAE,6BAA6B,CAAC,cAAc,CAAC,CAAC;IACrE,QAAQ,CAAC,QAAQ,EAAE,6BAA6B,CAAC,UAAU,CAAC,CAAC;IAC7D,QAAQ,CAAC,UAAU,EAAE,6BAA6B,CAAC,YAAY,CAAC,CAAC;IACjE,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC,CAAC;AA8EF,qBAAa,sBAAsB;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,kCAAkC;IAEvE,OAAO,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,uBAAuB,CAAC;CA2E7E;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,uBAAuB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAE5G"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { KiokukoError } from '../errors.js';
|
|
2
|
+
import { checkpointEligibility } from '../ledger/checkpoint-eligibility.js';
|
|
3
|
+
import { buildRecommendations } from '../context/recommendations.js';
|
|
4
|
+
import { canonicalJson } from '../serialization/validate.js';
|
|
5
|
+
import { successEnvelope } from '../serialization/envelope.js';
|
|
6
|
+
import { assertCapabilityCatalogBinding } from '../akinator/capability-binding.js';
|
|
7
|
+
import { applyAgentCapabilityGate, assertBrokerContextRun, brokerIntakeStatus, deriveBrokerMemoryUseSignal, requestCapabilityCatalog, } from './routes/agent-capability-gate.js';
|
|
8
|
+
function withoutCapabilityCatalog(value) {
|
|
9
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
10
|
+
return value;
|
|
11
|
+
const result = { ...value };
|
|
12
|
+
delete result.capabilities;
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
15
|
+
function checkpointSignalArray(value) {
|
|
16
|
+
if (value === undefined)
|
|
17
|
+
return [];
|
|
18
|
+
if (!Array.isArray(value) || value.some((item) => typeof item !== 'string')) {
|
|
19
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Checkpoint signals are invalid after validation');
|
|
20
|
+
}
|
|
21
|
+
return [...value];
|
|
22
|
+
}
|
|
23
|
+
function checkpointSignals(value) {
|
|
24
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
25
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Checkpoint signals are invalid after validation');
|
|
26
|
+
}
|
|
27
|
+
const request = value;
|
|
28
|
+
return {
|
|
29
|
+
changedPaths: checkpointSignalArray(request.changedPaths),
|
|
30
|
+
errorSignatures: checkpointSignalArray(request.errorSignatures),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function assertActiveCheckpointRun(run) {
|
|
34
|
+
const eligibility = checkpointEligibility(run.status);
|
|
35
|
+
if (eligibility.allowed)
|
|
36
|
+
return;
|
|
37
|
+
throw new KiokukoError('CONFLICT', 'Checkpoint is not allowed for a non-active run', {
|
|
38
|
+
checkpointEligibility: eligibility,
|
|
39
|
+
runStatus: run.status,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function brokerPersistence(dependencies) {
|
|
43
|
+
return {
|
|
44
|
+
enqueueWrite: (operation) => dependencies.enqueueWrite(operation),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function sameTaskProfile(left, right) {
|
|
48
|
+
return left.taskType === right.taskType
|
|
49
|
+
&& left.target === right.target
|
|
50
|
+
&& left.expected === right.expected
|
|
51
|
+
&& left.constraints === right.constraints;
|
|
52
|
+
}
|
|
53
|
+
function checkpointIntegrity() {
|
|
54
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Checkpoint mutation acknowledgement is inconsistent');
|
|
55
|
+
}
|
|
56
|
+
function assertMutationAcknowledgement(mutation, runId) {
|
|
57
|
+
if (mutation.projection === null
|
|
58
|
+
|| mutation.runId !== runId
|
|
59
|
+
|| mutation.acceptedThrough !== mutation.projection.throughSequence
|
|
60
|
+
|| mutation.profileHash !== mutation.projection.profileHash
|
|
61
|
+
|| !sameTaskProfile(mutation.taskProfile, mutation.projection.taskProfile)) {
|
|
62
|
+
checkpointIntegrity();
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
if (canonicalJson(mutation.preliminaryRecommendations)
|
|
66
|
+
!== canonicalJson(buildRecommendations({ projection: mutation.projection, broker: {} }))) {
|
|
67
|
+
checkpointIntegrity();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
checkpointIntegrity();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export class AgentCheckpointUseCase {
|
|
75
|
+
dependencies;
|
|
76
|
+
constructor(dependencies) {
|
|
77
|
+
this.dependencies = dependencies;
|
|
78
|
+
}
|
|
79
|
+
async execute(input) {
|
|
80
|
+
const catalog = requestCapabilityCatalog(input.body);
|
|
81
|
+
const initialRun = this.dependencies.service.readRun({ runId: input.runId });
|
|
82
|
+
assertActiveCheckpointRun(initialRun);
|
|
83
|
+
assertCapabilityCatalogBinding(initialRun.metadata, catalog);
|
|
84
|
+
const serviceRequest = withoutCapabilityCatalog(input.body);
|
|
85
|
+
// The ledger mutation is committed before any broker work starts.
|
|
86
|
+
const mutation = await this.dependencies.enqueueWrite(() => this.dependencies.checkpointMutation.checkpoint({
|
|
87
|
+
runId: input.runId,
|
|
88
|
+
idempotencyKey: input.idempotencyKey,
|
|
89
|
+
request: serviceRequest,
|
|
90
|
+
}));
|
|
91
|
+
if (this.dependencies.validateMutationAcknowledgement !== false) {
|
|
92
|
+
assertMutationAcknowledgement(mutation, input.runId);
|
|
93
|
+
}
|
|
94
|
+
const signals = checkpointSignals(serviceRequest);
|
|
95
|
+
const gated = await this.dependencies.broker.queryGated({
|
|
96
|
+
workspace: 'run-bound',
|
|
97
|
+
runId: input.runId,
|
|
98
|
+
characterBudget: mutation.characterBudget,
|
|
99
|
+
changedPaths: signals.changedPaths,
|
|
100
|
+
errorSignatures: signals.errorSignatures,
|
|
101
|
+
}, (candidate) => {
|
|
102
|
+
assertBrokerContextRun(candidate, input.runId);
|
|
103
|
+
const memoryUse = deriveBrokerMemoryUseSignal(this.dependencies, candidate);
|
|
104
|
+
const value = applyAgentCapabilityGate({
|
|
105
|
+
task: initialRun.title ?? '',
|
|
106
|
+
intakeStatus: brokerIntakeStatus(candidate.status),
|
|
107
|
+
taskProfile: candidate.taskProfile,
|
|
108
|
+
recommendedTags: candidate.recommendedTags,
|
|
109
|
+
catalog,
|
|
110
|
+
broker: candidate,
|
|
111
|
+
memoryUseOverride: memoryUse,
|
|
112
|
+
});
|
|
113
|
+
return {
|
|
114
|
+
persist: value.context !== null || candidate.context === null,
|
|
115
|
+
value,
|
|
116
|
+
assertBeforePersist: () => {
|
|
117
|
+
if (deriveBrokerMemoryUseSignal(this.dependencies, candidate) !== memoryUse) {
|
|
118
|
+
throw new KiokukoError('CONFLICT', 'Memory capability decision changed before context persistence');
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}, brokerPersistence(this.dependencies));
|
|
123
|
+
const finalRun = this.dependencies.service.readRun({ runId: input.runId });
|
|
124
|
+
assertActiveCheckpointRun(finalRun);
|
|
125
|
+
if (finalRun.lastSequence !== gated.broker.acceptedThrough) {
|
|
126
|
+
throw new KiokukoError('CONFLICT', 'Agent run changed while checkpoint context was being prepared');
|
|
127
|
+
}
|
|
128
|
+
const intakeStatus = brokerIntakeStatus(gated.broker.status);
|
|
129
|
+
const projection = gated.broker.projection;
|
|
130
|
+
if (intakeStatus === 'needs_answer' || projection === null) {
|
|
131
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Checkpoint context is not bound to finalized intake');
|
|
132
|
+
}
|
|
133
|
+
const nudge = await this.dependencies.enqueueWrite(() => this.dependencies.nudgeDelivery.deliver({
|
|
134
|
+
runId: input.runId,
|
|
135
|
+
idempotencyKey: input.idempotencyKey,
|
|
136
|
+
throughSequence: gated.broker.acceptedThrough,
|
|
137
|
+
projection,
|
|
138
|
+
recommendations: gated.value.recommendations,
|
|
139
|
+
}));
|
|
140
|
+
const { preliminaryRecommendations: _preliminaryRecommendations, ...mutationResponse } = mutation;
|
|
141
|
+
return {
|
|
142
|
+
...mutationResponse,
|
|
143
|
+
runStatus: finalRun.status,
|
|
144
|
+
intakeStatus,
|
|
145
|
+
taskProfile: { ...gated.broker.taskProfile, source: 'akinator+ledger-revisions' },
|
|
146
|
+
profileHash: gated.broker.profileHash,
|
|
147
|
+
projection,
|
|
148
|
+
...gated.value,
|
|
149
|
+
nudge,
|
|
150
|
+
requestBindingHash: input.requestBindingHash,
|
|
151
|
+
untrusted: true,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
export function checkpointSuccessResponse(value) {
|
|
156
|
+
return successEnvelope('agent.checkpoint', value);
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=agent-checkpoint-use-case.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-checkpoint-use-case.js","sourceRoot":"","sources":["../../src/server/agent-checkpoint-use-case.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
import type { AgentGatewayService } from '../../gateway/agent-service.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { FeedbackService, LegacyCheckpointServicePort } from '../../gateway/checkpoint-service.js';
|
|
3
3
|
import type { ContextBroker } from '../../context/broker.js';
|
|
4
|
+
import type { AgentCheckpointUseCase } from '../agent-checkpoint-use-case.js';
|
|
4
5
|
import type { V1RouteHandler, V1RouteRequest } from '../router.js';
|
|
5
6
|
declare const RUNS_PATH = "/api/v1/agent/runs";
|
|
6
7
|
type QueryField = 'workspace' | 'client' | 'status' | 'cursor' | 'limit' | 'after' | 'type';
|
|
7
|
-
|
|
8
|
+
type CheckpointComposition = {
|
|
9
|
+
readonly agentCheckpoint: AgentCheckpointUseCase;
|
|
10
|
+
readonly checkpointService?: never;
|
|
11
|
+
} | {
|
|
12
|
+
readonly agentCheckpoint?: never;
|
|
13
|
+
readonly checkpointService: LegacyCheckpointServicePort;
|
|
14
|
+
};
|
|
15
|
+
export type AgentRouteContext = {
|
|
8
16
|
readonly database: import('../../db/adapter.js').SqliteDatabase;
|
|
9
17
|
readonly service: AgentGatewayService;
|
|
10
|
-
readonly checkpointService: CheckpointService;
|
|
11
18
|
readonly feedbackService: FeedbackService;
|
|
12
19
|
readonly broker: ContextBroker;
|
|
13
20
|
readonly enqueueWrite: <T>(operation: () => T | PromiseLike<T>) => Promise<T>;
|
|
14
|
-
}
|
|
21
|
+
} & CheckpointComposition;
|
|
15
22
|
export declare function queryParameters(url: URL, allowed: readonly QueryField[]): Map<QueryField, string>;
|
|
16
23
|
export declare function requireNoQuery(url: URL): void;
|
|
17
24
|
export declare function decimalQuery(values: ReadonlyMap<QueryField, string>, field: 'limit' | 'after'): number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runs.d.ts","sourceRoot":"","sources":["../../../src/server/routes/agent-runs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"agent-runs.d.ts","sourceRoot":"","sources":["../../../src/server/routes/agent-runs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AACxG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInE,QAAA,MAAM,SAAS,uBAAuB,CAAC;AAKvC,KAAK,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5F,KAAK,qBAAqB,GACtB;IACE,QAAQ,CAAC,eAAe,EAAE,sBAAsB,CAAC;IACjD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC;CACpC,GACD;IACE,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;CACzD,CAAC;AAEN,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,cAAc,CAAC;IAChE,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/E,GAAG,qBAAqB,CAAC;AAM1B,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAQjG;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAE7C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAOlH;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAW/C;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAalF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAerE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAoE/E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMvF;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runs.js","sourceRoot":"","sources":["../../../src/server/routes/agent-runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-runs.js","sourceRoot":"","sources":["../../../src/server/routes/agent-runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAMlE,OAAO,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,SAAS,GAAG,oBAAoB,CAAC;AACvC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AACrC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AACtC,MAAM,aAAa,GAAG,GAAG,CAAC;AAsB1B,SAAS,OAAO;IACd,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAQ,EAAE,OAA8B;IACtE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,OAAO,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAiB,CAAC;YAAE,OAAO,EAAE,CAAC;QACrE,MAAM,CAAC,GAAG,CAAC,GAAiB,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAQ;IACrC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAuC,EAAE,KAAwB;IAC5F,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,aAAa,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClJ,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,MAAe;IAC5D,MAAM,MAAM,GAAG,GAAG,SAAS,GAAG,CAAC;IAC/B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QACxC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAuB;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK;WACvG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,yBAAyB,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpG,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1D,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,KAAK,iBAAiB;gBAAE,WAAW,IAAI,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,WAAW,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,QAAQ,KAAK,SAAS,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA0B;IAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClE,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;gBACjD,SAAS,EAAE,YAAY;gBACvB,SAAS,EAAE,IAAI;gBACf,cAAc;gBACd,WAAW,EAAE,OAAO,CAAC,IAAI;aAC1B,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBACpE,cAAc;gBACd,OAAO,EAAE,OAAO,CAAC,IAAI;aACtB,CAAC,CAAC,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,4BAA4B,CAC9C,OAAO,EACP,IAAI,EACJ,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,CACvC,CAAC;YACF,OAAO,eAAe,CAAC,YAAY,EAAE,EAAE,GAAG,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAClG,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YACjE,MAAM,KAAK,GAA4B,EAAE,SAAS,EAAE,CAAC;YACrD,KAAK,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,EAAE,CAAC;gBAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,KAAK,KAAK,SAAS;oBAAE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YAChD,CAAC;YACD,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,IAAI,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAC7C,OAAO,eAAe,CAAC,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC7D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACpC,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBACtD,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;oBACjD,SAAS,EAAE,aAAa;oBACxB,SAAS,EAAE,KAAK;oBAChB,cAAc;oBACd,WAAW,EAAE,OAAO,CAAC,IAAI;iBAC1B,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACrE,KAAK;oBACL,cAAc;oBACd,OAAO,EAAE,OAAO,CAAC,IAAI;iBACtB,CAAC,CAAC,CAAC;gBACJ,OAAO,eAAe,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC5B,OAAO,eAAe,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,QAAgB;IACjE,IAAI,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,YAAY,CAAC;IACnE,IAAI,MAAM,KAAK,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACvE,IAAI,MAAM,KAAK,MAAM,IAAI,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC;IAC7F,IAAI,MAAM,KAAK,KAAK,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAC;IACtF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task5.d.ts","sourceRoot":"","sources":["../../../src/server/routes/task5.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"task5.d.ts","sourceRoot":"","sources":["../../../src/server/routes/task5.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAkCzB,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CA0C3E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKnF"}
|
|
@@ -1,48 +1,39 @@
|
|
|
1
|
-
import { assertCapabilityCatalogBinding } from '../../akinator/capability-binding.js';
|
|
2
1
|
import { KiokukoError } from '../../errors.js';
|
|
3
|
-
import { checkpointEligibility } from '../../ledger/checkpoint-eligibility.js';
|
|
4
2
|
import { successEnvelope } from '../../serialization/envelope.js';
|
|
3
|
+
import { AgentCheckpointUseCase } from '../agent-checkpoint-use-case.js';
|
|
5
4
|
import { decodeRunId, requireIdempotencyKey, requireNoQuery, runIdSegment, } from './agent-runs.js';
|
|
6
|
-
import { applyAgentCapabilityGate, assertBrokerContextRun, brokerIntakeStatus, deriveBrokerMemoryUseSignal, requestCapabilityCatalog } from './agent-capability-gate.js';
|
|
7
|
-
import { brokerPersistence } from './task5-support.js';
|
|
8
5
|
import { agentRequestBindingHash } from './request-binding.js';
|
|
9
6
|
const CHECKPOINTS_SUFFIX = 'checkpoints';
|
|
10
7
|
const FEEDBACK_SUFFIX = 'feedback';
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
delete result.capabilities;
|
|
16
|
-
return result;
|
|
17
|
-
}
|
|
18
|
-
function checkpointSignalArray(value) {
|
|
19
|
-
if (value === undefined)
|
|
20
|
-
return [];
|
|
21
|
-
if (!Array.isArray(value) || value.some((item) => typeof item !== 'string')) {
|
|
22
|
-
throw new KiokukoError('INTEGRITY_ERROR', 'Checkpoint signals are invalid after validation');
|
|
23
|
-
}
|
|
24
|
-
return [...value];
|
|
25
|
-
}
|
|
26
|
-
function checkpointSignals(value) {
|
|
27
|
-
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
28
|
-
throw new KiokukoError('INTEGRITY_ERROR', 'Checkpoint signals are invalid after validation');
|
|
8
|
+
function legacyCheckpointUseCase(context) {
|
|
9
|
+
const legacy = context.checkpointService;
|
|
10
|
+
if (legacy === undefined) {
|
|
11
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Agent checkpoint use case is not configured');
|
|
29
12
|
}
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
13
|
+
const checkpointMutation = {
|
|
14
|
+
checkpoint: (input) => {
|
|
15
|
+
const value = legacy.checkpoint(input);
|
|
16
|
+
return {
|
|
17
|
+
...value,
|
|
18
|
+
preliminaryRecommendations: [...(value.recommendations ?? [])],
|
|
19
|
+
};
|
|
20
|
+
},
|
|
34
21
|
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
22
|
+
const nudgeDelivery = {
|
|
23
|
+
deliver: (input) => legacy.deliverNudge(input),
|
|
24
|
+
};
|
|
25
|
+
return new AgentCheckpointUseCase({
|
|
26
|
+
database: context.database,
|
|
27
|
+
service: context.service,
|
|
28
|
+
checkpointMutation,
|
|
29
|
+
validateMutationAcknowledgement: false,
|
|
30
|
+
nudgeDelivery,
|
|
31
|
+
broker: context.broker,
|
|
32
|
+
enqueueWrite: context.enqueueWrite,
|
|
43
33
|
});
|
|
44
34
|
}
|
|
45
35
|
export function createTask5Route(context) {
|
|
36
|
+
const checkpoint = context.agentCheckpoint ?? legacyCheckpointUseCase(context);
|
|
46
37
|
return async (request) => {
|
|
47
38
|
if (request.method === 'POST') {
|
|
48
39
|
const rawCheckpointRunId = runIdSegment(request.url.pathname, CHECKPOINTS_SUFFIX);
|
|
@@ -56,66 +47,13 @@ export function createTask5Route(context) {
|
|
|
56
47
|
idempotencyKey,
|
|
57
48
|
requestBody: request.body,
|
|
58
49
|
});
|
|
59
|
-
const
|
|
60
|
-
const run = context.service.readRun({ runId });
|
|
61
|
-
assertActiveCheckpointRun(run);
|
|
62
|
-
assertCapabilityCatalogBinding(run.metadata, catalog);
|
|
63
|
-
const serviceRequest = withoutCapabilityCatalog(request.body);
|
|
64
|
-
const data = await context.enqueueWrite(() => context.checkpointService.checkpoint({
|
|
50
|
+
const data = await checkpoint.execute({
|
|
65
51
|
runId,
|
|
66
52
|
idempotencyKey,
|
|
67
|
-
|
|
68
|
-
}));
|
|
69
|
-
const signals = checkpointSignals(serviceRequest);
|
|
70
|
-
const brokerInput = {
|
|
71
|
-
workspace: 'run-bound',
|
|
72
|
-
runId,
|
|
73
|
-
characterBudget: data.characterBudget,
|
|
74
|
-
changedPaths: signals.changedPaths,
|
|
75
|
-
errorSignatures: signals.errorSignatures,
|
|
76
|
-
};
|
|
77
|
-
const gated = await context.broker.queryGated(brokerInput, (candidate) => {
|
|
78
|
-
assertBrokerContextRun(candidate, runId);
|
|
79
|
-
const memoryUse = deriveBrokerMemoryUseSignal(context, candidate);
|
|
80
|
-
const value = applyAgentCapabilityGate({
|
|
81
|
-
task: run.title ?? '',
|
|
82
|
-
intakeStatus: brokerIntakeStatus(candidate.status),
|
|
83
|
-
taskProfile: candidate.taskProfile,
|
|
84
|
-
recommendedTags: candidate.recommendedTags,
|
|
85
|
-
catalog,
|
|
86
|
-
broker: candidate,
|
|
87
|
-
memoryUseOverride: memoryUse,
|
|
88
|
-
});
|
|
89
|
-
return {
|
|
90
|
-
persist: value.context !== null || candidate.context === null,
|
|
91
|
-
value,
|
|
92
|
-
assertBeforePersist: () => {
|
|
93
|
-
if (deriveBrokerMemoryUseSignal(context, candidate) !== memoryUse) {
|
|
94
|
-
throw new KiokukoError('CONFLICT', 'Memory capability decision changed before context persistence');
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
}, brokerPersistence(context));
|
|
99
|
-
const finalRun = context.service.readRun({ runId });
|
|
100
|
-
assertActiveCheckpointRun(finalRun);
|
|
101
|
-
if (finalRun.lastSequence !== gated.broker.acceptedThrough) {
|
|
102
|
-
throw new KiokukoError('CONFLICT', 'Agent run changed while checkpoint context was being prepared');
|
|
103
|
-
}
|
|
104
|
-
const intakeStatus = brokerIntakeStatus(gated.broker.status);
|
|
105
|
-
if (intakeStatus === 'needs_answer' || gated.broker.projection === null) {
|
|
106
|
-
throw new KiokukoError('INTEGRITY_ERROR', 'Checkpoint context is not bound to finalized intake');
|
|
107
|
-
}
|
|
108
|
-
const enriched = {
|
|
109
|
-
...data,
|
|
110
|
-
runStatus: finalRun.status,
|
|
111
|
-
intakeStatus,
|
|
112
|
-
taskProfile: { ...gated.broker.taskProfile, source: 'akinator+ledger-revisions' },
|
|
113
|
-
profileHash: gated.broker.profileHash,
|
|
114
|
-
projection: gated.broker.projection,
|
|
115
|
-
...gated.value,
|
|
53
|
+
body: request.body,
|
|
116
54
|
requestBindingHash,
|
|
117
|
-
};
|
|
118
|
-
return successEnvelope('agent.checkpoint',
|
|
55
|
+
});
|
|
56
|
+
return successEnvelope('agent.checkpoint', data);
|
|
119
57
|
}
|
|
120
58
|
const rawFeedbackRunId = runIdSegment(request.url.pathname, FEEDBACK_SUFFIX);
|
|
121
59
|
if (rawFeedbackRunId !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task5.js","sourceRoot":"","sources":["../../../src/server/routes/task5.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"task5.js","sourceRoot":"","sources":["../../../src/server/routes/task5.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
CREATE TABLE nudge_deliveries (
|
|
2
|
+
id TEXT PRIMARY KEY,
|
|
3
|
+
run_id TEXT NOT NULL,
|
|
4
|
+
policy_version TEXT NOT NULL CHECK (length(policy_version) BETWEEN 1 AND 100),
|
|
5
|
+
code TEXT NOT NULL CHECK (length(code) BETWEEN 1 AND 100),
|
|
6
|
+
occurrence_id TEXT NOT NULL CHECK (length(occurrence_id) BETWEEN 1 AND 256),
|
|
7
|
+
checkpoint_id TEXT NOT NULL CHECK (length(checkpoint_id) BETWEEN 1 AND 256),
|
|
8
|
+
through_sequence INTEGER NOT NULL CHECK (through_sequence >= 0),
|
|
9
|
+
priority INTEGER NOT NULL CHECK (priority >= 1),
|
|
10
|
+
evidence_event_ids_json TEXT NOT NULL CHECK (json_valid(evidence_event_ids_json)),
|
|
11
|
+
reference_ids_json TEXT NOT NULL CHECK (json_valid(reference_ids_json)),
|
|
12
|
+
delivered_at TEXT NOT NULL,
|
|
13
|
+
|
|
14
|
+
FOREIGN KEY (run_id)
|
|
15
|
+
REFERENCES ledger_runs(run_id)
|
|
16
|
+
ON DELETE CASCADE,
|
|
17
|
+
|
|
18
|
+
UNIQUE (
|
|
19
|
+
run_id,
|
|
20
|
+
policy_version,
|
|
21
|
+
occurrence_id
|
|
22
|
+
),
|
|
23
|
+
|
|
24
|
+
UNIQUE (
|
|
25
|
+
run_id,
|
|
26
|
+
policy_version,
|
|
27
|
+
checkpoint_id
|
|
28
|
+
)
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
CREATE INDEX nudge_deliveries_run_code_sequence
|
|
32
|
+
ON nudge_deliveries (
|
|
33
|
+
run_id,
|
|
34
|
+
policy_version,
|
|
35
|
+
code,
|
|
36
|
+
through_sequence
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
CREATE INDEX nudge_deliveries_run_sequence
|
|
40
|
+
ON nudge_deliveries (
|
|
41
|
+
run_id,
|
|
42
|
+
through_sequence
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
CREATE INDEX nudge_deliveries_run_checkpoint
|
|
46
|
+
ON nudge_deliveries (
|
|
47
|
+
run_id,
|
|
48
|
+
policy_version,
|
|
49
|
+
checkpoint_id
|
|
50
|
+
);
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
-- Keep the nudge table compatible with the only policy implemented by this
|
|
2
|
+
-- release. Application and archive validation provide the detailed checks;
|
|
3
|
+
-- these triggers protect direct SQL writers and updates as well.
|
|
4
|
+
CREATE TRIGGER nudge_deliveries_integrity_insert
|
|
5
|
+
BEFORE INSERT ON nudge_deliveries
|
|
6
|
+
BEGIN
|
|
7
|
+
SELECT RAISE(ABORT, 'invalid nudge delivery')
|
|
8
|
+
WHERE NEW.policy_version <> 'nudges.v1'
|
|
9
|
+
OR NEW.code NOT IN ('SIDE_EFFECT_OUTCOME_UNKNOWN', 'UNRESOLVED_FAILURE', 'VERIFY_AFTER_MUTATION')
|
|
10
|
+
OR NOT (
|
|
11
|
+
(NEW.code = 'SIDE_EFFECT_OUTCOME_UNKNOWN' AND NEW.priority = 2)
|
|
12
|
+
OR (NEW.code = 'UNRESOLVED_FAILURE' AND NEW.priority = 3)
|
|
13
|
+
OR (NEW.code = 'VERIFY_AFTER_MUTATION' AND NEW.priority = 4)
|
|
14
|
+
)
|
|
15
|
+
OR CASE
|
|
16
|
+
WHEN json_valid(NEW.evidence_event_ids_json)
|
|
17
|
+
THEN json_type(NEW.evidence_event_ids_json) = 'array'
|
|
18
|
+
AND json_array_length(NEW.evidence_event_ids_json) <= 16
|
|
19
|
+
ELSE 0
|
|
20
|
+
END = 0
|
|
21
|
+
OR CASE
|
|
22
|
+
WHEN json_valid(NEW.reference_ids_json)
|
|
23
|
+
THEN json_type(NEW.reference_ids_json) = 'array'
|
|
24
|
+
AND json_array_length(NEW.reference_ids_json) <= 16
|
|
25
|
+
ELSE 0
|
|
26
|
+
END = 0;
|
|
27
|
+
END;
|
|
28
|
+
|
|
29
|
+
CREATE TRIGGER nudge_deliveries_integrity_update
|
|
30
|
+
BEFORE UPDATE OF policy_version, code, priority, evidence_event_ids_json, reference_ids_json ON nudge_deliveries
|
|
31
|
+
BEGIN
|
|
32
|
+
SELECT RAISE(ABORT, 'invalid nudge delivery')
|
|
33
|
+
WHERE NEW.policy_version <> 'nudges.v1'
|
|
34
|
+
OR NEW.code NOT IN ('SIDE_EFFECT_OUTCOME_UNKNOWN', 'UNRESOLVED_FAILURE', 'VERIFY_AFTER_MUTATION')
|
|
35
|
+
OR NOT (
|
|
36
|
+
(NEW.code = 'SIDE_EFFECT_OUTCOME_UNKNOWN' AND NEW.priority = 2)
|
|
37
|
+
OR (NEW.code = 'UNRESOLVED_FAILURE' AND NEW.priority = 3)
|
|
38
|
+
OR (NEW.code = 'VERIFY_AFTER_MUTATION' AND NEW.priority = 4)
|
|
39
|
+
)
|
|
40
|
+
OR CASE
|
|
41
|
+
WHEN json_valid(NEW.evidence_event_ids_json)
|
|
42
|
+
THEN json_type(NEW.evidence_event_ids_json) = 'array'
|
|
43
|
+
AND json_array_length(NEW.evidence_event_ids_json) <= 16
|
|
44
|
+
ELSE 0
|
|
45
|
+
END = 0
|
|
46
|
+
OR CASE
|
|
47
|
+
WHEN json_valid(NEW.reference_ids_json)
|
|
48
|
+
THEN json_type(NEW.reference_ids_json) = 'array'
|
|
49
|
+
AND json_array_length(NEW.reference_ids_json) <= 16
|
|
50
|
+
ELSE 0
|
|
51
|
+
END = 0;
|
|
52
|
+
END;
|