@askdkc/kiokuko 0.1.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/LICENSE +21 -0
- package/README.ja.md +112 -0
- package/README.ko.md +112 -0
- package/README.md +147 -0
- package/README.zh-CN.md +112 -0
- package/dist/agent-file/atomic-write.d.ts +6 -0
- package/dist/agent-file/atomic-write.d.ts.map +1 -0
- package/dist/agent-file/atomic-write.js +36 -0
- package/dist/agent-file/atomic-write.js.map +1 -0
- package/dist/agent-file/managed-block.d.ts +12 -0
- package/dist/agent-file/managed-block.d.ts.map +1 -0
- package/dist/agent-file/managed-block.js +56 -0
- package/dist/agent-file/managed-block.js.map +1 -0
- package/dist/agent-file/render.d.ts +14 -0
- package/dist/agent-file/render.d.ts.map +1 -0
- package/dist/agent-file/render.js +41 -0
- package/dist/agent-file/render.js.map +1 -0
- package/dist/akinator/domain.d.ts +25 -0
- package/dist/akinator/domain.d.ts.map +1 -0
- package/dist/akinator/domain.js +255 -0
- package/dist/akinator/domain.js.map +1 -0
- package/dist/akinator/orchestrator.d.ts +8 -0
- package/dist/akinator/orchestrator.d.ts.map +1 -0
- package/dist/akinator/orchestrator.js +11 -0
- package/dist/akinator/orchestrator.js.map +1 -0
- package/dist/akinator/service.d.ts +35 -0
- package/dist/akinator/service.d.ts.map +1 -0
- package/dist/akinator/service.js +296 -0
- package/dist/akinator/service.js.map +1 -0
- package/dist/akinator/store.d.ts +96 -0
- package/dist/akinator/store.d.ts.map +1 -0
- package/dist/akinator/store.js +583 -0
- package/dist/akinator/store.js.map +1 -0
- package/dist/akinator/types.d.ts +49 -0
- package/dist/akinator/types.d.ts.map +1 -0
- package/dist/akinator/types.js +2 -0
- package/dist/akinator/types.js.map +1 -0
- package/dist/bin/kiokuko.d.ts +3 -0
- package/dist/bin/kiokuko.d.ts.map +1 -0
- package/dist/bin/kiokuko.js +6 -0
- package/dist/bin/kiokuko.js.map +1 -0
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +362 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/runtime-discovery.d.ts +15 -0
- package/dist/client/runtime-discovery.d.ts.map +1 -0
- package/dist/client/runtime-discovery.js +45 -0
- package/dist/client/runtime-discovery.js.map +1 -0
- package/dist/client/server-client.d.ts +20 -0
- package/dist/client/server-client.d.ts.map +1 -0
- package/dist/client/server-client.js +424 -0
- package/dist/client/server-client.js.map +1 -0
- package/dist/commands/agent.d.ts +10 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +283 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/backup.d.ts +5 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +14 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/call.d.ts +7 -0
- package/dist/commands/call.d.ts.map +1 -0
- package/dist/commands/call.js +10 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/doctor.d.ts +31 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +142 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/export.d.ts +21 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +68 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import.d.ts +15 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +265 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +26 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/ledger.d.ts +7 -0
- package/dist/commands/ledger.d.ts.map +1 -0
- package/dist/commands/ledger.js +66 -0
- package/dist/commands/ledger.js.map +1 -0
- package/dist/commands/link.d.ts +6 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +6 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/promote.d.ts +6 -0
- package/dist/commands/promote.d.ts.map +1 -0
- package/dist/commands/promote.js +6 -0
- package/dist/commands/promote.js.map +1 -0
- package/dist/commands/purge.d.ts +10 -0
- package/dist/commands/purge.d.ts.map +1 -0
- package/dist/commands/purge.js +26 -0
- package/dist/commands/purge.js.map +1 -0
- package/dist/commands/read.d.ts +6 -0
- package/dist/commands/read.d.ts.map +1 -0
- package/dist/commands/read.js +4 -0
- package/dist/commands/read.js.map +1 -0
- package/dist/commands/recall.d.ts +6 -0
- package/dist/commands/recall.d.ts.map +1 -0
- package/dist/commands/recall.js +4 -0
- package/dist/commands/recall.js.map +1 -0
- package/dist/commands/record.d.ts +6 -0
- package/dist/commands/record.d.ts.map +1 -0
- package/dist/commands/record.js +4 -0
- package/dist/commands/record.js.map +1 -0
- package/dist/commands/search.d.ts +6 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +4 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/serve.d.ts +34 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +120 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/server-status.d.ts +20 -0
- package/dist/commands/server-status.d.ts.map +1 -0
- package/dist/commands/server-status.js +21 -0
- package/dist/commands/server-status.js.map +1 -0
- package/dist/commands/server.d.ts +13 -0
- package/dist/commands/server.d.ts.map +1 -0
- package/dist/commands/server.js +89 -0
- package/dist/commands/server.js.map +1 -0
- package/dist/commands/setup.d.ts +32 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +121 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/supersede.d.ts +6 -0
- package/dist/commands/supersede.d.ts.map +1 -0
- package/dist/commands/supersede.js +6 -0
- package/dist/commands/supersede.js.map +1 -0
- package/dist/commands/use.d.ts +28 -0
- package/dist/commands/use.d.ts.map +1 -0
- package/dist/commands/use.js +176 -0
- package/dist/commands/use.js.map +1 -0
- package/dist/config/paths.d.ts +18 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +104 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/project-config.d.ts +10 -0
- package/dist/config/project-config.d.ts.map +1 -0
- package/dist/config/project-config.js +59 -0
- package/dist/config/project-config.js.map +1 -0
- package/dist/context/broker.d.ts +80 -0
- package/dist/context/broker.d.ts.map +1 -0
- package/dist/context/broker.js +437 -0
- package/dist/context/broker.js.map +1 -0
- package/dist/context/delivery.d.ts +66 -0
- package/dist/context/delivery.d.ts.map +1 -0
- package/dist/context/delivery.js +758 -0
- package/dist/context/delivery.js.map +1 -0
- package/dist/context/feedback.d.ts +75 -0
- package/dist/context/feedback.d.ts.map +1 -0
- package/dist/context/feedback.js +997 -0
- package/dist/context/feedback.js.map +1 -0
- package/dist/context/ranking.d.ts +98 -0
- package/dist/context/ranking.d.ts.map +1 -0
- package/dist/context/ranking.js +513 -0
- package/dist/context/ranking.js.map +1 -0
- package/dist/context/recommendations.d.ts +85 -0
- package/dist/context/recommendations.d.ts.map +1 -0
- package/dist/context/recommendations.js +342 -0
- package/dist/context/recommendations.js.map +1 -0
- package/dist/db/adapter.d.ts +25 -0
- package/dist/db/adapter.d.ts.map +1 -0
- package/dist/db/adapter.js +37 -0
- package/dist/db/adapter.js.map +1 -0
- package/dist/db/capabilities.d.ts +13 -0
- package/dist/db/capabilities.d.ts.map +1 -0
- package/dist/db/capabilities.js +25 -0
- package/dist/db/capabilities.js.map +1 -0
- package/dist/db/connection.d.ts +6 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +42 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/migrate.d.ts +9 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +102 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/transaction.d.ts +4 -0
- package/dist/db/transaction.d.ts.map +1 -0
- package/dist/db/transaction.js +39 -0
- package/dist/db/transaction.js.map +1 -0
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +32 -0
- package/dist/errors.js.map +1 -0
- package/dist/gateway/agent-service.d.ts +69 -0
- package/dist/gateway/agent-service.d.ts.map +1 -0
- package/dist/gateway/agent-service.js +581 -0
- package/dist/gateway/agent-service.js.map +1 -0
- package/dist/gateway/checkpoint-service.d.ts +42 -0
- package/dist/gateway/checkpoint-service.d.ts.map +1 -0
- package/dist/gateway/checkpoint-service.js +295 -0
- package/dist/gateway/checkpoint-service.js.map +1 -0
- package/dist/knowledge/sources.d.ts +72 -0
- package/dist/knowledge/sources.d.ts.map +1 -0
- package/dist/knowledge/sources.js +406 -0
- package/dist/knowledge/sources.js.map +1 -0
- package/dist/ledger/archive.d.ts +50 -0
- package/dist/ledger/archive.d.ts.map +1 -0
- package/dist/ledger/archive.js +1072 -0
- package/dist/ledger/archive.js.map +1 -0
- package/dist/ledger/hash.d.ts +22 -0
- package/dist/ledger/hash.d.ts.map +1 -0
- package/dist/ledger/hash.js +25 -0
- package/dist/ledger/hash.js.map +1 -0
- package/dist/ledger/maintenance.d.ts +78 -0
- package/dist/ledger/maintenance.d.ts.map +1 -0
- package/dist/ledger/maintenance.js +683 -0
- package/dist/ledger/maintenance.js.map +1 -0
- package/dist/ledger/projection.d.ts +37 -0
- package/dist/ledger/projection.d.ts.map +1 -0
- package/dist/ledger/projection.js +307 -0
- package/dist/ledger/projection.js.map +1 -0
- package/dist/ledger/promotion.d.ts +28 -0
- package/dist/ledger/promotion.d.ts.map +1 -0
- package/dist/ledger/promotion.js +308 -0
- package/dist/ledger/promotion.js.map +1 -0
- package/dist/ledger/query.d.ts +55 -0
- package/dist/ledger/query.d.ts.map +1 -0
- package/dist/ledger/query.js +321 -0
- package/dist/ledger/query.js.map +1 -0
- package/dist/ledger/redaction.d.ts +8 -0
- package/dist/ledger/redaction.d.ts.map +1 -0
- package/dist/ledger/redaction.js +40 -0
- package/dist/ledger/redaction.js.map +1 -0
- package/dist/ledger/store.d.ts +46 -0
- package/dist/ledger/store.d.ts.map +1 -0
- package/dist/ledger/store.js +324 -0
- package/dist/ledger/store.js.map +1 -0
- package/dist/ledger/types.d.ts +119 -0
- package/dist/ledger/types.d.ts.map +1 -0
- package/dist/ledger/types.js +22 -0
- package/dist/ledger/types.js.map +1 -0
- package/dist/ledger/validate.d.ts +10 -0
- package/dist/ledger/validate.d.ts.map +1 -0
- package/dist/ledger/validate.js +183 -0
- package/dist/ledger/validate.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +86 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/memory/audit.d.ts +14 -0
- package/dist/memory/audit.d.ts.map +1 -0
- package/dist/memory/audit.js +16 -0
- package/dist/memory/audit.js.map +1 -0
- package/dist/memory/entries.d.ts +65 -0
- package/dist/memory/entries.d.ts.map +1 -0
- package/dist/memory/entries.js +200 -0
- package/dist/memory/entries.js.map +1 -0
- package/dist/memory/lifecycle.d.ts +29 -0
- package/dist/memory/lifecycle.d.ts.map +1 -0
- package/dist/memory/lifecycle.js +61 -0
- package/dist/memory/lifecycle.js.map +1 -0
- package/dist/memory/retrieval.d.ts +44 -0
- package/dist/memory/retrieval.d.ts.map +1 -0
- package/dist/memory/retrieval.js +174 -0
- package/dist/memory/retrieval.js.map +1 -0
- package/dist/memory/scoped-memory.d.ts +41 -0
- package/dist/memory/scoped-memory.d.ts.map +1 -0
- package/dist/memory/scoped-memory.js +65 -0
- package/dist/memory/scoped-memory.js.map +1 -0
- package/dist/memory/secrets.d.ts +6 -0
- package/dist/memory/secrets.d.ts.map +1 -0
- package/dist/memory/secrets.js +17 -0
- package/dist/memory/secrets.js.map +1 -0
- package/dist/memory/workspaces.d.ts +17 -0
- package/dist/memory/workspaces.d.ts.map +1 -0
- package/dist/memory/workspaces.js +92 -0
- package/dist/memory/workspaces.js.map +1 -0
- package/dist/repository/binding.d.ts +19 -0
- package/dist/repository/binding.d.ts.map +1 -0
- package/dist/repository/binding.js +78 -0
- package/dist/repository/binding.js.map +1 -0
- package/dist/repository/detect-root.d.ts +12 -0
- package/dist/repository/detect-root.d.ts.map +1 -0
- package/dist/repository/detect-root.js +57 -0
- package/dist/repository/detect-root.js.map +1 -0
- package/dist/repository/git-origin.d.ts +2 -0
- package/dist/repository/git-origin.d.ts.map +1 -0
- package/dist/repository/git-origin.js +15 -0
- package/dist/repository/git-origin.js.map +1 -0
- package/dist/repository/identity.d.ts +19 -0
- package/dist/repository/identity.d.ts.map +1 -0
- package/dist/repository/identity.js +23 -0
- package/dist/repository/identity.js.map +1 -0
- package/dist/repository/remote-url.d.ts +4 -0
- package/dist/repository/remote-url.d.ts.map +1 -0
- package/dist/repository/remote-url.js +36 -0
- package/dist/repository/remote-url.js.map +1 -0
- package/dist/security/sanitize.d.ts +4 -0
- package/dist/security/sanitize.d.ts.map +1 -0
- package/dist/security/sanitize.js +174 -0
- package/dist/security/sanitize.js.map +1 -0
- package/dist/serialization/envelope.d.ts +20 -0
- package/dist/serialization/envelope.d.ts.map +1 -0
- package/dist/serialization/envelope.js +11 -0
- package/dist/serialization/envelope.js.map +1 -0
- package/dist/serialization/validate.d.ts +31 -0
- package/dist/serialization/validate.d.ts.map +1 -0
- package/dist/serialization/validate.js +168 -0
- package/dist/serialization/validate.js.map +1 -0
- package/dist/server/agent-application.d.ts +6 -0
- package/dist/server/agent-application.d.ts.map +1 -0
- package/dist/server/agent-application.js +60 -0
- package/dist/server/agent-application.js.map +1 -0
- package/dist/server/app.d.ts +5 -0
- package/dist/server/app.d.ts.map +1 -0
- package/dist/server/app.js +87 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/auth.d.ts +2 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/auth.js +22 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/http.d.ts +69 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +349 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/idempotency.d.ts +12 -0
- package/dist/server/idempotency.d.ts.map +1 -0
- package/dist/server/idempotency.js +210 -0
- package/dist/server/idempotency.js.map +1 -0
- package/dist/server/instance-lock.d.ts +17 -0
- package/dist/server/instance-lock.d.ts.map +1 -0
- package/dist/server/instance-lock.js +118 -0
- package/dist/server/instance-lock.js.map +1 -0
- package/dist/server/router.d.ts +29 -0
- package/dist/server/router.d.ts.map +1 -0
- package/dist/server/router.js +112 -0
- package/dist/server/router.js.map +1 -0
- package/dist/server/routes/agent-events.d.ts +5 -0
- package/dist/server/routes/agent-events.d.ts.map +1 -0
- package/dist/server/routes/agent-events.js +46 -0
- package/dist/server/routes/agent-events.js.map +1 -0
- package/dist/server/routes/agent-intake.d.ts +5 -0
- package/dist/server/routes/agent-intake.d.ts.map +1 -0
- package/dist/server/routes/agent-intake.js +42 -0
- package/dist/server/routes/agent-intake.js.map +1 -0
- package/dist/server/routes/agent-promotions.d.ts +5 -0
- package/dist/server/routes/agent-promotions.d.ts.map +1 -0
- package/dist/server/routes/agent-promotions.js +52 -0
- package/dist/server/routes/agent-promotions.js.map +1 -0
- package/dist/server/routes/agent-runs.d.ts +25 -0
- package/dist/server/routes/agent-runs.d.ts.map +1 -0
- package/dist/server/routes/agent-runs.js +151 -0
- package/dist/server/routes/agent-runs.js.map +1 -0
- package/dist/server/routes/task5-support.d.ts +11 -0
- package/dist/server/routes/task5-support.d.ts.map +1 -0
- package/dist/server/routes/task5-support.js +22 -0
- package/dist/server/routes/task5-support.js.map +1 -0
- package/dist/server/routes/task5.d.ts +5 -0
- package/dist/server/routes/task5.d.ts.map +1 -0
- package/dist/server/routes/task5.js +72 -0
- package/dist/server/routes/task5.js.map +1 -0
- package/dist/server/runtime-descriptor.d.ts +24 -0
- package/dist/server/runtime-descriptor.d.ts.map +1 -0
- package/dist/server/runtime-descriptor.js +156 -0
- package/dist/server/runtime-descriptor.js.map +1 -0
- package/dist/server/write-queue.d.ts +20 -0
- package/dist/server/write-queue.d.ts.map +1 -0
- package/dist/server/write-queue.js +83 -0
- package/dist/server/write-queue.js.map +1 -0
- package/dist/setup/managed-text.d.ts +6 -0
- package/dist/setup/managed-text.d.ts.map +1 -0
- package/dist/setup/managed-text.js +42 -0
- package/dist/setup/managed-text.js.map +1 -0
- package/dist/setup/opencode-config.d.ts +3 -0
- package/dist/setup/opencode-config.d.ts.map +1 -0
- package/dist/setup/opencode-config.js +26 -0
- package/dist/setup/opencode-config.js.map +1 -0
- package/dist/setup/render.d.ts +8 -0
- package/dist/setup/render.d.ts.map +1 -0
- package/dist/setup/render.js +45 -0
- package/dist/setup/render.js.map +1 -0
- package/dist/web/server.d.ts +16 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +424 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/ui.d.ts +2 -0
- package/dist/web/ui.d.ts.map +1 -0
- package/dist/web/ui.js +271 -0
- package/dist/web/ui.js.map +1 -0
- package/migrations/001_initial.sql +89 -0
- package/migrations/002_fts.sql +66 -0
- package/migrations/003_akinator.sql +30 -0
- package/migrations/004_agent_gateway.sql +259 -0
- package/package.json +45 -0
- package/templates/AGENTS.md +29 -0
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { withImmediateTransaction } from '../db/transaction.js';
|
|
3
|
+
import { KiokukoError } from '../errors.js';
|
|
4
|
+
import { executeIdempotentInTransaction } from '../server/idempotency.js';
|
|
5
|
+
import { sanitizeAnswer, sanitizeEvent, sanitizeRunMetadata, sanitizeTask } from '../ledger/redaction.js';
|
|
6
|
+
import { validateEventBatch, validateTimestamp } from '../ledger/validate.js';
|
|
7
|
+
import { CAPTURE_PROFILES, COVERAGE_LEVELS, MAX_BATCH_EVENTS, MAX_ID_LENGTH, } from '../ledger/types.js';
|
|
8
|
+
import { LedgerStore } from '../ledger/store.js';
|
|
9
|
+
import { listLedgerEvents, listLedgerRuns, readLedgerRun } from '../ledger/query.js';
|
|
10
|
+
import { evaluateProfile, profileHash } from '../akinator/domain.js';
|
|
11
|
+
import { answerAkinatorInTransaction, startAkinatorInTransaction, } from '../akinator/service.js';
|
|
12
|
+
import { finalizeRunIntakeLink, insertRunIntakeLink, markRunIntakeProfileSource, readAkinatorSession, readRunIntakeLink, } from '../akinator/store.js';
|
|
13
|
+
const PROFILE_FIELDS = ['taskType', 'target', 'expected', 'constraints'];
|
|
14
|
+
const INTAKE_EVENT_TYPES = new Set([
|
|
15
|
+
'intake.started', 'intake.answered', 'intake.ready', 'intake.exhausted',
|
|
16
|
+
]);
|
|
17
|
+
const TERMINAL_STATUS_VALUES = ['completed', 'failed', 'cancelled', 'interrupted'];
|
|
18
|
+
const CONTROL_CHARACTERS = /\p{Cc}/u;
|
|
19
|
+
function validation() {
|
|
20
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Invalid gateway request');
|
|
21
|
+
}
|
|
22
|
+
function conflict(message = 'Gateway operation conflicts with the current run state') {
|
|
23
|
+
throw new KiokukoError('CONFLICT', message);
|
|
24
|
+
}
|
|
25
|
+
function notFound() {
|
|
26
|
+
throw new KiokukoError('NOT_FOUND', 'Ledger run not found');
|
|
27
|
+
}
|
|
28
|
+
function isPlainObject(value) {
|
|
29
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
30
|
+
return false;
|
|
31
|
+
try {
|
|
32
|
+
const prototype = Object.getPrototypeOf(value);
|
|
33
|
+
return prototype === Object.prototype || prototype === null;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function isCanonicalArrayIndex(value) {
|
|
40
|
+
if (value === '0')
|
|
41
|
+
return true;
|
|
42
|
+
if (!/^[1-9]\d*$/u.test(value))
|
|
43
|
+
return false;
|
|
44
|
+
const index = Number(value);
|
|
45
|
+
return Number.isSafeInteger(index) && index < 4_294_967_295 && String(index) === value;
|
|
46
|
+
}
|
|
47
|
+
function assertJsonValue(value, ancestors = new WeakSet()) {
|
|
48
|
+
if (value === null || typeof value === 'boolean' || typeof value === 'string')
|
|
49
|
+
return;
|
|
50
|
+
if (typeof value === 'number') {
|
|
51
|
+
if (!Number.isFinite(value))
|
|
52
|
+
validation();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (typeof value !== 'object' || ancestors.has(value))
|
|
56
|
+
validation();
|
|
57
|
+
ancestors.add(value);
|
|
58
|
+
try {
|
|
59
|
+
let keys;
|
|
60
|
+
try {
|
|
61
|
+
keys = Reflect.ownKeys(value);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
validation();
|
|
65
|
+
}
|
|
66
|
+
if (Array.isArray(value)) {
|
|
67
|
+
for (const key of keys) {
|
|
68
|
+
if (typeof key !== 'string' || (key !== 'length' && !isCanonicalArrayIndex(key)))
|
|
69
|
+
validation();
|
|
70
|
+
}
|
|
71
|
+
for (const item of value)
|
|
72
|
+
assertJsonValue(item, ancestors);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
if (!isPlainObject(value))
|
|
76
|
+
validation();
|
|
77
|
+
for (const key of keys)
|
|
78
|
+
if (typeof key !== 'string')
|
|
79
|
+
validation();
|
|
80
|
+
for (const key of Object.keys(value))
|
|
81
|
+
assertJsonValue(value[key], ancestors);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
if (error instanceof KiokukoError)
|
|
86
|
+
throw error;
|
|
87
|
+
validation();
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
ancestors.delete(value);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function object(value) {
|
|
94
|
+
if (!isPlainObject(value))
|
|
95
|
+
validation();
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
function jsonObject(value) {
|
|
99
|
+
assertJsonValue(value);
|
|
100
|
+
if (!isPlainObject(value))
|
|
101
|
+
validation();
|
|
102
|
+
return value;
|
|
103
|
+
}
|
|
104
|
+
function jsonResult(value) {
|
|
105
|
+
assertJsonValue(value);
|
|
106
|
+
return value;
|
|
107
|
+
}
|
|
108
|
+
function typedResult(value) {
|
|
109
|
+
return value;
|
|
110
|
+
}
|
|
111
|
+
function executeGateway(database, input, operation) {
|
|
112
|
+
return typedResult(executeIdempotentInTransaction(database, input, () => jsonResult(operation())));
|
|
113
|
+
}
|
|
114
|
+
function knownFields(value, allowed) {
|
|
115
|
+
const set = new Set(allowed);
|
|
116
|
+
if (Object.keys(value).some((field) => !set.has(field)))
|
|
117
|
+
validation();
|
|
118
|
+
}
|
|
119
|
+
function boundedString(value, max) {
|
|
120
|
+
if (typeof value !== 'string' || value.trim().length === 0 || value.length > max || CONTROL_CHARACTERS.test(value))
|
|
121
|
+
validation();
|
|
122
|
+
return value;
|
|
123
|
+
}
|
|
124
|
+
function enumValue(value, allowed) {
|
|
125
|
+
if (typeof value !== 'string' || !allowed.includes(value))
|
|
126
|
+
validation();
|
|
127
|
+
return value;
|
|
128
|
+
}
|
|
129
|
+
function nullableString(value, max) {
|
|
130
|
+
if (value === null)
|
|
131
|
+
return null;
|
|
132
|
+
return boundedString(value, max);
|
|
133
|
+
}
|
|
134
|
+
function optionalString(value, max) {
|
|
135
|
+
if (value === undefined)
|
|
136
|
+
return undefined;
|
|
137
|
+
return boundedString(value, max);
|
|
138
|
+
}
|
|
139
|
+
function profileHints(value) {
|
|
140
|
+
if (value === undefined)
|
|
141
|
+
return { taskType: null, target: null, expected: null, constraints: null };
|
|
142
|
+
const input = object(value);
|
|
143
|
+
knownFields(input, PROFILE_FIELDS);
|
|
144
|
+
const taskType = input.taskType === undefined || input.taskType === null
|
|
145
|
+
? null
|
|
146
|
+
: enumValue(input.taskType, ['build', 'debug', 'research', 'review', 'devops', 'writing', 'analysis']);
|
|
147
|
+
const target = input.target === undefined ? null : nullableString(input.target, 16 * 1024);
|
|
148
|
+
const expected = input.expected === undefined ? null : nullableString(input.expected, 16 * 1024);
|
|
149
|
+
const constraints = input.constraints === undefined ? null : nullableString(input.constraints, 16 * 1024);
|
|
150
|
+
return { taskType, target, expected, constraints };
|
|
151
|
+
}
|
|
152
|
+
function normalizeOpenRequest(value) {
|
|
153
|
+
assertJsonValue(value);
|
|
154
|
+
const input = object(value);
|
|
155
|
+
knownFields(input, ['apiVersion', 'workspace', 'client', 'task', 'captureProfile', 'coverage', 'metadata', 'parentRunId', 'startedAt']);
|
|
156
|
+
if (input.apiVersion !== '1')
|
|
157
|
+
validation();
|
|
158
|
+
const workspace = boundedString(input.workspace, 16 * 1024);
|
|
159
|
+
const clientInput = object(input.client);
|
|
160
|
+
knownFields(clientInput, ['kind', 'version', 'sessionId']);
|
|
161
|
+
const client = {
|
|
162
|
+
kind: boundedString(clientInput.kind, MAX_ID_LENGTH),
|
|
163
|
+
...(clientInput.version === undefined ? {} : { version: boundedString(clientInput.version, MAX_ID_LENGTH) }),
|
|
164
|
+
...(clientInput.sessionId === undefined ? {} : { sessionId: boundedString(clientInput.sessionId, MAX_ID_LENGTH) }),
|
|
165
|
+
};
|
|
166
|
+
const taskInput = object(input.task);
|
|
167
|
+
knownFields(taskInput, ['title', 'query', 'profileHints']);
|
|
168
|
+
const task = {
|
|
169
|
+
title: boundedString(taskInput.title, 16 * 1024),
|
|
170
|
+
query: boundedString(taskInput.query, 16 * 1024),
|
|
171
|
+
profileHints: profileHints(taskInput.profileHints),
|
|
172
|
+
};
|
|
173
|
+
const coverageInput = object(input.coverage);
|
|
174
|
+
const coverageFields = ['run', 'tool', 'command', 'file', 'approval'];
|
|
175
|
+
knownFields(coverageInput, coverageFields);
|
|
176
|
+
const coverage = {};
|
|
177
|
+
for (const field of coverageFields)
|
|
178
|
+
coverage[field] = enumValue(coverageInput[field], COVERAGE_LEVELS);
|
|
179
|
+
const metadataValue = input.metadata === undefined ? {} : object(input.metadata);
|
|
180
|
+
assertJsonValue(metadataValue);
|
|
181
|
+
const metadata = metadataValue;
|
|
182
|
+
const startedAt = optionalString(input.startedAt, 64);
|
|
183
|
+
if (startedAt !== undefined)
|
|
184
|
+
validateTimestamp(startedAt, 'startedAt');
|
|
185
|
+
return {
|
|
186
|
+
apiVersion: '1',
|
|
187
|
+
workspace,
|
|
188
|
+
client,
|
|
189
|
+
task,
|
|
190
|
+
captureProfile: enumValue(input.captureProfile, CAPTURE_PROFILES),
|
|
191
|
+
coverage,
|
|
192
|
+
metadata,
|
|
193
|
+
...(input.parentRunId === undefined ? {} : { parentRunId: boundedString(input.parentRunId, MAX_ID_LENGTH) }),
|
|
194
|
+
...(startedAt === undefined ? {} : { startedAt }),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function operationEnvelope(value) {
|
|
198
|
+
assertJsonValue(value);
|
|
199
|
+
const input = object(value);
|
|
200
|
+
knownFields(input, ['idempotencyKey', 'request']);
|
|
201
|
+
return {
|
|
202
|
+
idempotencyKey: boundedString(input.idempotencyKey, 256),
|
|
203
|
+
request: input.request,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function runEnvelope(value) {
|
|
207
|
+
assertJsonValue(value);
|
|
208
|
+
const input = object(value);
|
|
209
|
+
knownFields(input, ['runId', 'idempotencyKey', 'request']);
|
|
210
|
+
return {
|
|
211
|
+
runId: boundedString(input.runId, MAX_ID_LENGTH),
|
|
212
|
+
idempotencyKey: boundedString(input.idempotencyKey, 256),
|
|
213
|
+
request: input.request,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
function readRunInput(value) {
|
|
217
|
+
assertJsonValue(value);
|
|
218
|
+
const input = object(value);
|
|
219
|
+
knownFields(input, ['runId']);
|
|
220
|
+
return { runId: boundedString(input.runId, MAX_ID_LENGTH) };
|
|
221
|
+
}
|
|
222
|
+
function answerRequest(value, workspace) {
|
|
223
|
+
assertJsonValue(value);
|
|
224
|
+
const input = object(value);
|
|
225
|
+
knownFields(input, ['apiVersion', 'questionId', 'value']);
|
|
226
|
+
if (input.apiVersion !== '1')
|
|
227
|
+
validation();
|
|
228
|
+
const questionId = boundedString(input.questionId, MAX_ID_LENGTH);
|
|
229
|
+
if (typeof input.value !== 'string')
|
|
230
|
+
validation();
|
|
231
|
+
const sanitized = sanitizeAnswer({ apiVersion: '1', questionId, value: input.value }, { workspace });
|
|
232
|
+
if (typeof sanitized.value.value !== 'string')
|
|
233
|
+
validation();
|
|
234
|
+
const normalized = sanitized.value;
|
|
235
|
+
const answer = { apiVersion: '1', questionId: normalized.questionId, value: normalized.value };
|
|
236
|
+
return { value: answer, hashRequest: jsonObject(answer) };
|
|
237
|
+
}
|
|
238
|
+
function sanitizeEventArray(value, workspace) {
|
|
239
|
+
if (!Array.isArray(value))
|
|
240
|
+
validation();
|
|
241
|
+
if (value.length === 0 || value.length > MAX_BATCH_EVENTS)
|
|
242
|
+
validation();
|
|
243
|
+
const validated = validateEventBatch({ events: value });
|
|
244
|
+
return validated.map((event) => sanitizeEvent(event, { workspace }).value);
|
|
245
|
+
}
|
|
246
|
+
function eventsRequest(value, workspace) {
|
|
247
|
+
assertJsonValue(value);
|
|
248
|
+
const input = object(value);
|
|
249
|
+
knownFields(input, ['apiVersion', 'events']);
|
|
250
|
+
if (input.apiVersion !== '1')
|
|
251
|
+
validation();
|
|
252
|
+
const events = sanitizeEventArray(input.events, workspace);
|
|
253
|
+
return { events, hashRequest: jsonObject({ apiVersion: '1', events }) };
|
|
254
|
+
}
|
|
255
|
+
function closeRequest(value, workspace) {
|
|
256
|
+
assertJsonValue(value);
|
|
257
|
+
const input = object(value);
|
|
258
|
+
knownFields(input, ['apiVersion', 'status', 'events']);
|
|
259
|
+
if (input.apiVersion !== '1')
|
|
260
|
+
validation();
|
|
261
|
+
const status = enumValue(input.status, TERMINAL_STATUS_VALUES);
|
|
262
|
+
const events = input.events === undefined ? undefined : sanitizeEventArray(input.events, workspace);
|
|
263
|
+
return {
|
|
264
|
+
status,
|
|
265
|
+
...(events === undefined ? {} : { events }),
|
|
266
|
+
hashRequest: jsonObject({
|
|
267
|
+
apiVersion: '1',
|
|
268
|
+
status,
|
|
269
|
+
...(events === undefined ? {} : { events }),
|
|
270
|
+
}),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
function sourceMap(request, profile) {
|
|
274
|
+
const sources = {};
|
|
275
|
+
const hints = request.task.profileHints;
|
|
276
|
+
for (const field of PROFILE_FIELDS) {
|
|
277
|
+
const supplied = hints[field];
|
|
278
|
+
if (supplied !== null && supplied !== undefined) {
|
|
279
|
+
sources[field] = 'client_supplied';
|
|
280
|
+
}
|
|
281
|
+
else if (field === 'taskType' && profile.taskType !== null) {
|
|
282
|
+
sources[field] = 'inferred';
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return sources;
|
|
286
|
+
}
|
|
287
|
+
function appendResponse(ack, runStatus) {
|
|
288
|
+
return { ...ack, runStatus, untrusted: true };
|
|
289
|
+
}
|
|
290
|
+
export class AgentGatewayService {
|
|
291
|
+
database;
|
|
292
|
+
options;
|
|
293
|
+
constructor(database, options = {}) {
|
|
294
|
+
this.database = database;
|
|
295
|
+
this.options = options;
|
|
296
|
+
}
|
|
297
|
+
openRun(input) {
|
|
298
|
+
const envelope = operationEnvelope(input);
|
|
299
|
+
const request = normalizeOpenRequest(envelope.request);
|
|
300
|
+
const task = sanitizeTask(request.task, { workspace: request.workspace, ...(this.options.home === undefined ? {} : { home: this.options.home }) }).value;
|
|
301
|
+
const metadata = sanitizeRunMetadata(request.metadata, { workspace: request.workspace, ...(this.options.home === undefined ? {} : { home: this.options.home }) }).value;
|
|
302
|
+
const client = request.client;
|
|
303
|
+
const hashRequest = jsonObject({
|
|
304
|
+
apiVersion: '1',
|
|
305
|
+
workspace: request.workspace,
|
|
306
|
+
client,
|
|
307
|
+
task,
|
|
308
|
+
captureProfile: request.captureProfile,
|
|
309
|
+
coverage: request.coverage,
|
|
310
|
+
metadata,
|
|
311
|
+
...(request.parentRunId === undefined ? {} : { parentRunId: request.parentRunId }),
|
|
312
|
+
...(request.startedAt === undefined ? {} : { startedAt: request.startedAt }),
|
|
313
|
+
});
|
|
314
|
+
const now = this.currentTime();
|
|
315
|
+
return withImmediateTransaction(this.database, () => executeGateway(this.database, { scope: 'agent.run.open', key: envelope.idempotencyKey, request: hashRequest, createdAt: now }, () => {
|
|
316
|
+
const runId = this.nextRunId();
|
|
317
|
+
const sessionId = this.nextSessionId();
|
|
318
|
+
const store = this.ledgerStore(request.workspace);
|
|
319
|
+
const run = store.createRunInTransaction({
|
|
320
|
+
runId,
|
|
321
|
+
workspace: request.workspace,
|
|
322
|
+
protocolVersion: '1',
|
|
323
|
+
client,
|
|
324
|
+
captureProfile: request.captureProfile,
|
|
325
|
+
coverage: request.coverage,
|
|
326
|
+
task,
|
|
327
|
+
metadata,
|
|
328
|
+
...(request.parentRunId === undefined ? {} : { parentRunId: request.parentRunId }),
|
|
329
|
+
...(request.startedAt === undefined ? {} : { startedAt: request.startedAt }),
|
|
330
|
+
}, now);
|
|
331
|
+
const result = startAkinatorInTransaction(this.database, {
|
|
332
|
+
workspace: request.workspace,
|
|
333
|
+
task: task.query,
|
|
334
|
+
profileHints: task.profileHints,
|
|
335
|
+
now,
|
|
336
|
+
idFactory: () => sessionId,
|
|
337
|
+
});
|
|
338
|
+
insertRunIntakeLink(this.database, {
|
|
339
|
+
runId,
|
|
340
|
+
sessionId,
|
|
341
|
+
workspace: request.workspace,
|
|
342
|
+
policyVersion: 'v1',
|
|
343
|
+
profileSchemaVersion: 1,
|
|
344
|
+
profileSources: sourceMap(request, result.session.profile),
|
|
345
|
+
initialProfileHash: null,
|
|
346
|
+
recommendedTags: result.recommendedTags,
|
|
347
|
+
linkedAt: now,
|
|
348
|
+
finalizedAt: null,
|
|
349
|
+
});
|
|
350
|
+
const lifecycle = [this.lifecycleEvent('intake.started', {
|
|
351
|
+
intakeSessionId: sessionId,
|
|
352
|
+
status: result.status,
|
|
353
|
+
missingFields: result.missingFields,
|
|
354
|
+
}, now)];
|
|
355
|
+
let finalRun = run;
|
|
356
|
+
if (result.status === 'ready' || result.status === 'exhausted') {
|
|
357
|
+
lifecycle.push(this.lifecycleEvent(result.status === 'ready' ? 'intake.ready' : 'intake.exhausted', {
|
|
358
|
+
profile: result.session.profile,
|
|
359
|
+
profileHash: profileHash(result.session.profile),
|
|
360
|
+
recommendedTags: result.recommendedTags,
|
|
361
|
+
missingFields: result.missingFields,
|
|
362
|
+
}, now));
|
|
363
|
+
lifecycle.push(this.lifecycleEvent('run.started', {
|
|
364
|
+
intakeStatus: result.status,
|
|
365
|
+
profileHash: profileHash(result.session.profile),
|
|
366
|
+
recommendedTags: result.recommendedTags,
|
|
367
|
+
}, now));
|
|
368
|
+
}
|
|
369
|
+
store.appendBatchInTransaction(runId, { events: lifecycle });
|
|
370
|
+
if (result.status === 'ready' || result.status === 'exhausted') {
|
|
371
|
+
finalizeRunIntakeLink(this.database, {
|
|
372
|
+
workspace: request.workspace,
|
|
373
|
+
runId,
|
|
374
|
+
profileHash: profileHash(result.session.profile),
|
|
375
|
+
recommendedTags: result.recommendedTags,
|
|
376
|
+
finalizedAt: now,
|
|
377
|
+
});
|
|
378
|
+
finalRun = store.updateRunStatusInTransaction(runId, 'active', now);
|
|
379
|
+
}
|
|
380
|
+
return this.intakeResponse(runId, finalRun.status, result);
|
|
381
|
+
}));
|
|
382
|
+
}
|
|
383
|
+
answerIntake(input) {
|
|
384
|
+
const envelope = runEnvelope(input);
|
|
385
|
+
const initialRun = this.requireRun(envelope.runId);
|
|
386
|
+
const request = answerRequest(envelope.request, initialRun.workspace);
|
|
387
|
+
const now = this.currentTime();
|
|
388
|
+
return withImmediateTransaction(this.database, () => executeGateway(this.database, { scope: this.scopedOperation('answer', envelope.runId), key: envelope.idempotencyKey, request: request.hashRequest, createdAt: now }, () => {
|
|
389
|
+
const run = this.requireRun(envelope.runId);
|
|
390
|
+
const link = readRunIntakeLink(this.database, { workspace: run.workspace, runId: run.runId });
|
|
391
|
+
const mutation = answerAkinatorInTransaction(this.database, {
|
|
392
|
+
workspace: run.workspace,
|
|
393
|
+
sessionId: link.sessionId,
|
|
394
|
+
questionId: request.value.questionId,
|
|
395
|
+
value: request.value.value,
|
|
396
|
+
now,
|
|
397
|
+
});
|
|
398
|
+
if (mutation.replayed) {
|
|
399
|
+
const currentRun = this.requireRun(run.runId);
|
|
400
|
+
return this.intakeResponse(run.runId, currentRun.status, mutation.result);
|
|
401
|
+
}
|
|
402
|
+
if (run.status !== 'intake')
|
|
403
|
+
conflict('Run is not waiting for intake');
|
|
404
|
+
markRunIntakeProfileSource(this.database, {
|
|
405
|
+
workspace: run.workspace,
|
|
406
|
+
runId: run.runId,
|
|
407
|
+
field: request.value.questionId,
|
|
408
|
+
});
|
|
409
|
+
const events = [this.lifecycleEvent('intake.answered', {
|
|
410
|
+
questionId: request.value.questionId,
|
|
411
|
+
value: request.value.value,
|
|
412
|
+
}, now)];
|
|
413
|
+
if (mutation.result.status === 'ready' || mutation.result.status === 'exhausted') {
|
|
414
|
+
events.push(this.lifecycleEvent(mutation.result.status === 'ready' ? 'intake.ready' : 'intake.exhausted', {
|
|
415
|
+
profile: mutation.result.session.profile,
|
|
416
|
+
profileHash: profileHash(mutation.result.session.profile),
|
|
417
|
+
recommendedTags: mutation.result.recommendedTags,
|
|
418
|
+
missingFields: mutation.result.missingFields,
|
|
419
|
+
}, now));
|
|
420
|
+
events.push(this.lifecycleEvent('run.started', {
|
|
421
|
+
intakeStatus: mutation.result.status,
|
|
422
|
+
profileHash: profileHash(mutation.result.session.profile),
|
|
423
|
+
recommendedTags: mutation.result.recommendedTags,
|
|
424
|
+
}, now));
|
|
425
|
+
}
|
|
426
|
+
this.ledgerStore(run.workspace).appendBatchInTransaction(run.runId, { events });
|
|
427
|
+
let finalRun = this.requireRun(run.runId);
|
|
428
|
+
if (mutation.result.status === 'ready' || mutation.result.status === 'exhausted') {
|
|
429
|
+
finalizeRunIntakeLink(this.database, {
|
|
430
|
+
workspace: run.workspace,
|
|
431
|
+
runId: run.runId,
|
|
432
|
+
profileHash: profileHash(mutation.result.session.profile),
|
|
433
|
+
recommendedTags: mutation.result.recommendedTags,
|
|
434
|
+
finalizedAt: now,
|
|
435
|
+
});
|
|
436
|
+
finalRun = this.ledgerStore(run.workspace).updateRunStatusInTransaction(run.runId, 'active', now);
|
|
437
|
+
}
|
|
438
|
+
return this.intakeResponse(run.runId, finalRun.status, mutation.result);
|
|
439
|
+
}));
|
|
440
|
+
}
|
|
441
|
+
appendEvents(input) {
|
|
442
|
+
const envelope = runEnvelope(input);
|
|
443
|
+
const initialRun = this.requireRun(envelope.runId);
|
|
444
|
+
const request = eventsRequest(envelope.request, initialRun.workspace);
|
|
445
|
+
const now = this.currentTime();
|
|
446
|
+
return withImmediateTransaction(this.database, () => executeGateway(this.database, { scope: this.scopedOperation('events', envelope.runId), key: envelope.idempotencyKey, request: request.hashRequest, createdAt: now }, () => {
|
|
447
|
+
const run = this.requireRun(envelope.runId);
|
|
448
|
+
if (TERMINAL_STATUS_VALUES.includes(run.status)) {
|
|
449
|
+
conflict('Cannot append events to a terminal run');
|
|
450
|
+
}
|
|
451
|
+
if (run.status === 'intake' && request.events.some((event) => !INTAKE_EVENT_TYPES.has(event.eventType))) {
|
|
452
|
+
conflict('Work events are not allowed during intake');
|
|
453
|
+
}
|
|
454
|
+
const ack = this.ledgerStore(run.workspace).appendBatchInTransaction(run.runId, { events: request.events });
|
|
455
|
+
return appendResponse(ack, run.status);
|
|
456
|
+
}));
|
|
457
|
+
}
|
|
458
|
+
closeRun(input) {
|
|
459
|
+
const envelope = runEnvelope(input);
|
|
460
|
+
const initialRun = this.requireRun(envelope.runId);
|
|
461
|
+
const request = closeRequest(envelope.request, initialRun.workspace);
|
|
462
|
+
const now = this.currentTime();
|
|
463
|
+
return withImmediateTransaction(this.database, () => executeGateway(this.database, { scope: this.scopedOperation('close', envelope.runId), key: envelope.idempotencyKey, request: request.hashRequest, createdAt: now }, () => {
|
|
464
|
+
const run = this.requireRun(envelope.runId);
|
|
465
|
+
if (run.status !== 'active')
|
|
466
|
+
conflict('Only active runs can be closed');
|
|
467
|
+
const store = this.ledgerStore(run.workspace);
|
|
468
|
+
let ack;
|
|
469
|
+
if (request.events !== undefined) {
|
|
470
|
+
store.appendBatchInTransaction(run.runId, { events: request.events });
|
|
471
|
+
}
|
|
472
|
+
ack = store.appendBatchInTransaction(run.runId, {
|
|
473
|
+
events: [this.lifecycleEvent('run.closed', { status: request.status }, now)],
|
|
474
|
+
});
|
|
475
|
+
store.updateRunStatusInTransaction(run.runId, request.status, now);
|
|
476
|
+
return { ...ack, status: request.status, runStatus: request.status, untrusted: true };
|
|
477
|
+
}));
|
|
478
|
+
}
|
|
479
|
+
listRuns(input) {
|
|
480
|
+
assertJsonValue(input);
|
|
481
|
+
const page = listLedgerRuns(this.database, input);
|
|
482
|
+
return { ...page, untrusted: true };
|
|
483
|
+
}
|
|
484
|
+
readRun(input) {
|
|
485
|
+
const { runId } = readRunInput(input);
|
|
486
|
+
const run = this.requireRun(runId);
|
|
487
|
+
return readLedgerRun(this.database, { workspace: run.workspace, runId });
|
|
488
|
+
}
|
|
489
|
+
readIntake(input) {
|
|
490
|
+
const { runId } = readRunInput(input);
|
|
491
|
+
const run = this.requireRun(runId);
|
|
492
|
+
const link = readRunIntakeLink(this.database, { workspace: run.workspace, runId });
|
|
493
|
+
const session = readAkinatorSession(this.database, { workspace: run.workspace, sessionId: link.sessionId });
|
|
494
|
+
const evaluation = evaluateProfile(session.profile, session.questionCount);
|
|
495
|
+
const result = {
|
|
496
|
+
status: evaluation.status,
|
|
497
|
+
session,
|
|
498
|
+
question: evaluation.question,
|
|
499
|
+
missingFields: evaluation.missingFields,
|
|
500
|
+
recommendedTags: evaluation.recommendedTags,
|
|
501
|
+
};
|
|
502
|
+
return this.intakeResponse(runId, run.status, result, link.initialProfileHash);
|
|
503
|
+
}
|
|
504
|
+
listEvents(input) {
|
|
505
|
+
assertJsonValue(input);
|
|
506
|
+
const value = object(input);
|
|
507
|
+
knownFields(value, ['runId', 'after', 'type', 'limit']);
|
|
508
|
+
const runId = boundedString(value.runId, MAX_ID_LENGTH);
|
|
509
|
+
const run = this.requireRun(runId);
|
|
510
|
+
const page = listLedgerEvents(this.database, {
|
|
511
|
+
runId,
|
|
512
|
+
workspace: run.workspace,
|
|
513
|
+
...(value.after === undefined ? {} : { after: value.after }),
|
|
514
|
+
...(value.type === undefined ? {} : { type: value.type }),
|
|
515
|
+
...(value.limit === undefined ? {} : { limit: value.limit }),
|
|
516
|
+
});
|
|
517
|
+
return { ...page, untrusted: true };
|
|
518
|
+
}
|
|
519
|
+
intakeResponse(runId, runStatus, result, finalizedHash) {
|
|
520
|
+
const finalized = finalizedHash !== undefined
|
|
521
|
+
? finalizedHash !== null
|
|
522
|
+
: (runStatus === 'active' && (result.status === 'ready' || result.status === 'exhausted'));
|
|
523
|
+
const currentProfileHash = profileHash(result.session.profile);
|
|
524
|
+
const finalizedProfileHash = finalized ? (finalizedHash ?? currentProfileHash) : null;
|
|
525
|
+
const question = result.question;
|
|
526
|
+
return {
|
|
527
|
+
runId,
|
|
528
|
+
runStatus,
|
|
529
|
+
intakeSessionId: result.session.id,
|
|
530
|
+
intakeStatus: result.status,
|
|
531
|
+
intake: { status: result.status, sessionId: result.session.id, question },
|
|
532
|
+
question,
|
|
533
|
+
currentQuestion: question,
|
|
534
|
+
missingFields: [...result.missingFields],
|
|
535
|
+
recommendedTags: [...result.recommendedTags],
|
|
536
|
+
taskProfile: { ...result.session.profile },
|
|
537
|
+
profileHash: finalizedProfileHash,
|
|
538
|
+
context: null,
|
|
539
|
+
untrusted: true,
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
lifecycleEvent(eventType, payload, occurredAt) {
|
|
543
|
+
return {
|
|
544
|
+
eventId: this.nextEventId(),
|
|
545
|
+
eventType,
|
|
546
|
+
actor: 'kiokuko-gateway',
|
|
547
|
+
occurredAt,
|
|
548
|
+
payload: jsonResult(payload),
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
ledgerStore(workspace) {
|
|
552
|
+
return new LedgerStore(this.database, {
|
|
553
|
+
now: () => this.currentTime(),
|
|
554
|
+
workspace,
|
|
555
|
+
...(this.options.home === undefined ? {} : { home: this.options.home }),
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
requireRun(runId) {
|
|
559
|
+
const run = new LedgerStore(this.database).readRun(runId);
|
|
560
|
+
if (!run)
|
|
561
|
+
return notFound();
|
|
562
|
+
return run;
|
|
563
|
+
}
|
|
564
|
+
scopedOperation(operation, runId) {
|
|
565
|
+
const digest = createHash('sha256').update(runId, 'utf8').digest('hex').slice(0, 32);
|
|
566
|
+
return `agent.${operation}.${digest}`;
|
|
567
|
+
}
|
|
568
|
+
currentTime() {
|
|
569
|
+
return this.options.now?.() ?? new Date().toISOString();
|
|
570
|
+
}
|
|
571
|
+
nextRunId() {
|
|
572
|
+
return this.options.runIdFactory?.() ?? randomUUID();
|
|
573
|
+
}
|
|
574
|
+
nextSessionId() {
|
|
575
|
+
return this.options.sessionIdFactory?.() ?? randomUUID();
|
|
576
|
+
}
|
|
577
|
+
nextEventId() {
|
|
578
|
+
return this.options.eventIdFactory?.() ?? randomUUID();
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
//# sourceMappingURL=agent-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-service.js","sourceRoot":"","sources":["../../src/gateway/agent-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,aAAa,GAWd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,sBAAsB,CAAC;AAK9B,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAU,CAAC;AAClF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAkB;IAClD,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB;CACxE,CAAC,CAAC;AACH,MAAM,sBAAsB,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAU,CAAC;AAC5F,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAuDrC,SAAS,UAAU;IACjB,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,QAAQ,CAAC,OAAO,GAAG,wDAAwD;IAClF,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,QAAQ;IACf,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,aAAa,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;AACzF,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,YAAY,IAAI,OAAO,EAAU;IACxE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO;IACtF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,UAAU,EAAE,CAAC;QAC1C,OAAO;IACT,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,UAAU,EAAE,CAAC;IACpE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,IAAI,CAAC;QACH,IAAI,IAAmB,CAAC;QACxB,IAAI,CAAC;YACH,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,EAAE,CAAC;QACf,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;oBAAE,UAAU,EAAE,CAAC;YACjG,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAAE,UAAU,EAAE,CAAC;YACxC,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,UAAU,EAAE,CAAC;YAClE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,YAAY;YAAE,MAAM,KAAK,CAAC;QAC/C,UAAU,EAAE,CAAC;IACf,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,UAAU,EAAE,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,UAAU,EAAE,CAAC;IACxC,OAAO,KAAmB,CAAC;AAC7B,CAAC;AAED,SAAS,UAAU,CAAI,KAAQ;IAC7B,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,KAA6B,CAAC;AACvC,CAAC;AAED,SAAS,WAAW,CAAI,KAAgB;IACtC,OAAO,KAAqB,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAI,QAAwB,EAAE,KAAc,EAAE,SAAkB;IACrF,OAAO,WAAW,CAAI,8BAA8B,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,WAAW,CAAC,KAA8B,EAAE,OAA0B;IAC7E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAAE,UAAU,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,GAAW;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,UAAU,EAAE,CAAC;IACjI,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAA8B,KAAc,EAAE,OAAU;IACxE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,UAAU,EAAE,CAAC;IACxE,OAAO,KAAkB,CAAC;AAC5B,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,GAAW;IACjD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,GAAW;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACpG,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;QACtE,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC,CAAC;IAClH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3F,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACjG,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1G,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,WAAW,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;IACxI,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG;QAAE,UAAU,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAE5D,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,WAAW,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAgB;QAC1B,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC;QACpD,GAAG,CAAC,WAAW,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;QAC5G,GAAG,CAAC,WAAW,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;KACnH,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAc;QACtB,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC;QAChD,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC;QAChD,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC;KACnD,CAAC;IAEF,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAU,CAAC;IAC/E,WAAW,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,EAAc,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,cAAc;QAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,CAAC;IAEvG,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjF,eAAe,CAAC,aAAa,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,aAA2B,CAAC;IAC7C,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,SAAS,KAAK,SAAS;QAAE,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACvE,OAAO;QACL,UAAU,EAAE,GAAG;QACf,SAAS;QACT,MAAM;QACN,IAAI;QACJ,cAAc,EAAE,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC;QACjE,QAAQ;QACR,QAAQ;QACR,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC;QAC5G,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,WAAW,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC;IAClD,OAAO;QACL,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC;QACxD,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,WAAW,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC;IAC3D,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC;QAChD,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC;QACxD,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,WAAW,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9B,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,SAAiB;IACtD,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,WAAW,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG;QAAE,UAAU,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAClE,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,UAAU,EAAE,CAAC;IAClD,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACrG,IAAI,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,UAAU,EAAE,CAAC;IAC5D,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC;IACnC,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,GAAY,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,KAAe,EAAE,CAAC;IAClH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc,EAAE,SAAiB;IAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,UAAU,EAAE,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB;QAAE,UAAU,EAAE,CAAC;IACxE,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,SAAiB;IACtD,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,WAAW,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG;QAAE,UAAU,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC3D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,SAAiB;IACrD,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,WAAW,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG;QAAE,UAAU,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpG,OAAO;QACL,MAAM;QACN,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3C,WAAW,EAAE,UAAU,CAAC;YACtB,UAAU,EAAE,GAAG;YACf,MAAM;YACN,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5C,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,OAA2B,EAAE,OAAoB;IAClE,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC;QACrC,CAAC;aAAM,IAAI,KAAK,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,GAAc,EAAE,SAAoB;IAC1D,OAAO,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,OAAO,mBAAmB;IAIX;IAHF,OAAO,CAA6B;IAErD,YACmB,QAAwB,EACzC,UAAsC,EAAE;QADvB,aAAQ,GAAR,QAAQ,CAAgB;QAGzC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,KAAc;QACpB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;QACzJ,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,KAAmB,CAAC;QACtL,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,MAAM,WAAW,GAAG,UAAU,CAAC;YAC7B,UAAU,EAAE,GAAG;YACf,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM;YACN,IAAI;YACJ,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ;YACR,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;YAClF,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;SAC7E,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CACjE,IAAI,CAAC,QAAQ,EACb,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,QAAQ,CAAC,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,EAC/F,GAAG,EAAE;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,KAAK,CAAC,sBAAsB,CAAC;gBACvC,KAAK;gBACL,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,eAAe,EAAE,GAAG;gBACpB,MAAM;gBACN,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI;gBACJ,QAAQ;gBACR,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;gBAClF,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;aAC7E,EAAE,GAAG,CAAC,CAAC;YACR,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACvD,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,GAAG;gBACH,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS;aAC3B,CAAC,CAAC;YACH,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACjC,KAAK;gBACL,SAAS;gBACT,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,aAAa,EAAE,IAAI;gBACnB,oBAAoB,EAAE,CAAC;gBACvB,cAAc,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC1D,kBAAkB,EAAE,IAAI;gBACxB,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,QAAQ,EAAE,GAAG;gBACb,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,MAAM,SAAS,GAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE;oBAC3E,eAAe,EAAE,SAAS;oBAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,aAAa,EAAE,MAAM,CAAC,aAAa;iBACpC,EAAE,GAAG,CAAC,CAAC,CAAC;YACT,IAAI,QAAQ,GAAG,GAAG,CAAC;YACnB,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC/D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,EAAE;oBAClG,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;oBAC/B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;oBAChD,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,aAAa,EAAE,MAAM,CAAC,aAAa;iBACpC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACT,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;oBAChD,YAAY,EAAE,MAAM,CAAC,MAAM;oBAC3B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;oBAChD,eAAe,EAAE,MAAM,CAAC,eAAe;iBACxC,EAAE,GAAG,CAAC,CAAC,CAAC;YACX,CAAC;YACD,KAAK,CAAC,wBAAwB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC/D,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE;oBACnC,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,KAAK;oBACL,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;oBAChD,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,WAAW,EAAE,GAAG;iBACjB,CAAC,CAAC;gBACH,QAAQ,GAAG,KAAK,CAAC,4BAA4B,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC,CACF,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,KAAc;QACzB,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CACjE,IAAI,CAAC,QAAQ,EACb,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,EACrI,GAAG,EAAE;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9F,MAAM,QAAQ,GAAG,2BAA2B,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC1D,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAA+B;gBACzD,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;gBAC1B,GAAG;aACJ,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACtB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ;gBAAE,QAAQ,CAAC,+BAA+B,CAAC,CAAC;YACvE,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxC,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,UAA+B;aACrD,CAAC,CAAC;YACH,MAAM,MAAM,GAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE;oBACzE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;oBACpC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;iBAC3B,EAAE,GAAG,CAAC,CAAC,CAAC;YACT,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACjF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,EAAE;oBACxG,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO;oBACxC,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;oBACzD,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe;oBAChD,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa;iBAC7C,EAAE,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;oBAC7C,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;oBACpC,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;oBACzD,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe;iBACjD,EAAE,GAAG,CAAC,CAAC,CAAC;YACX,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAChF,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACjF,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE;oBACnC,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;oBACzD,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe;oBAChD,WAAW,EAAE,GAAG;iBACjB,CAAC,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,4BAA4B,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YACpG,CAAC;YACD,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC1E,CAAC,CACF,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,KAAc;QACzB,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CACjE,IAAI,CAAC,QAAQ,EACb,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,EACrI,GAAG,EAAE;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAwB,CAAC,EAAE,CAAC;gBAClE,QAAQ,CAAC,wCAAwC,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBACxG,QAAQ,CAAC,2CAA2C,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5G,OAAO,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC,CACF,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,KAAc;QACrB,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CACjE,IAAI,CAAC,QAAQ,EACb,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,EACpI,GAAG,EAAE;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ;gBAAE,QAAQ,CAAC,gCAAgC,CAAC,CAAC;YACxE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,GAAc,CAAC;YACnB,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACjC,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,GAAG,GAAG,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,EAAE;gBAC9C,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;aAC7E,CAAC,CAAC;YACH,KAAK,CAAC,4BAA4B,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACnE,OAAO,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACxF,CAAC,CACF,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,KAAc;QACrB,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,KAAc;QACpB,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,UAAU,CAAC,KAAc;QACvB,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC5G,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAmB;YAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO;YACP,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,aAAa,EAAE,UAAU,CAAC,aAAa;YACvC,eAAe,EAAE,UAAU,CAAC,eAAe;SAC5C,CAAC;QACF,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjF,CAAC;IAED,UAAU,CAAC,KAAc;QACvB,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,WAAW,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC3C,KAAK;YACL,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5D,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YACzD,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;SAC7D,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;IAEO,cAAc,CAAC,KAAa,EAAE,SAAoB,EAAE,MAAsB,EAAE,aAA6B;QAC/G,MAAM,SAAS,GAAG,aAAa,KAAK,SAAS;YAC3C,CAAC,CAAC,aAAa,KAAK,IAAI;YACxB,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC;QAC7F,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,oBAAoB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACtF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,OAAO;YACL,KAAK;YACL,SAAS;YACT,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;YAClC,YAAY,EAAE,MAAM,CAAC,MAAM;YAC3B,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE;YACzE,QAAQ;YACR,eAAe,EAAE,QAAQ;YACzB,aAAa,EAAE,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC;YACxC,eAAe,EAAE,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC;YAC5C,WAAW,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;YAC1C,WAAW,EAAE,oBAAoB;YACjC,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,SAA0B,EAAE,OAAgB,EAAE,UAAkB;QACrF,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE;YAC3B,SAAS;YACT,KAAK,EAAE,iBAAiB;YACxB,UAAU;YACV,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;SAC7B,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,SAAiB;QACnC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE;YACpC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;YAC7B,SAAS;YACT,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACxE,CAAC,CAAC;IACL,CAAC;IAEO,UAAU,CAAC,KAAa;QAC9B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG;YAAE,OAAO,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,eAAe,CAAC,SAAiB,EAAE,KAAa;QACtD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrF,OAAO,SAAS,SAAS,IAAI,MAAM,EAAE,CAAC;IACxC,CAAC;IAEO,WAAW;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1D,CAAC;IAEO,SAAS;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,UAAU,EAAE,CAAC;IACvD,CAAC;IAEO,aAAa;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,IAAI,UAAU,EAAE,CAAC;IAC3D,CAAC;IAEO,WAAW;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,IAAI,UAAU,EAAE,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { SqliteDatabase } from '../db/adapter.js';
|
|
2
|
+
import { type LedgerProjection } from '../ledger/projection.js';
|
|
3
|
+
import { type Recommendation } from '../context/recommendations.js';
|
|
4
|
+
export interface CheckpointResponse {
|
|
5
|
+
runId: string;
|
|
6
|
+
acceptedThrough: number;
|
|
7
|
+
localSequences: number[];
|
|
8
|
+
sourceSequences: Array<number | null>;
|
|
9
|
+
eventIds: string[];
|
|
10
|
+
runStatus: 'active';
|
|
11
|
+
taskProfile: {
|
|
12
|
+
taskType: string | null;
|
|
13
|
+
target: string | null;
|
|
14
|
+
expected: string | null;
|
|
15
|
+
constraints: string | null;
|
|
16
|
+
source: 'akinator+ledger-revisions';
|
|
17
|
+
};
|
|
18
|
+
profileHash: string;
|
|
19
|
+
projection: LedgerProjection;
|
|
20
|
+
recommendations: Recommendation[];
|
|
21
|
+
characterBudget: number;
|
|
22
|
+
context: null;
|
|
23
|
+
untrusted: true;
|
|
24
|
+
}
|
|
25
|
+
export declare class CheckpointService {
|
|
26
|
+
private readonly database;
|
|
27
|
+
private readonly now;
|
|
28
|
+
constructor(database: SqliteDatabase, now?: () => string);
|
|
29
|
+
checkpoint(input: unknown): CheckpointResponse;
|
|
30
|
+
}
|
|
31
|
+
export interface FeedbackResponse {
|
|
32
|
+
category: 'context' | 'recommendation' | 'intake' | 'run';
|
|
33
|
+
record: unknown;
|
|
34
|
+
untrusted: true;
|
|
35
|
+
}
|
|
36
|
+
export declare class FeedbackService {
|
|
37
|
+
private readonly database;
|
|
38
|
+
private readonly now;
|
|
39
|
+
constructor(database: SqliteDatabase, now?: () => string);
|
|
40
|
+
feedback(input: unknown): FeedbackResponse;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=checkpoint-service.d.ts.map
|