@jungjaehoon/mama-core 2.4.1 → 4.0.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/README.md +76 -239
- package/db/migrations/030-case-first-memory-substrate.sql +13 -98
- package/db/migrations/034-add-connector-event-scope-columns.sql +9 -13
- package/db/migrations/039-add-connector-event-operator-ingest-seq.sql +9 -95
- package/db/migrations/062-refresh-connector-event-sequences.sql +9 -113
- package/db/migrations/063-refresh-legacy-connector-event-updates.sql +9 -32
- package/db/migrations/067-add-connector-event-source-entity-id.sql +9 -13
- package/db/migrations/069-create-registry-nodes.sql +52 -0
- package/db/migrations/070-record-identity.sql +35 -0
- package/db/migrations/071-service-operation-origins.sql +187 -0
- package/db/migrations/072-observation-versions.sql +29 -0
- package/db/migrations/073-registry-corrections.sql +45 -0
- package/db/migrations/074-work-graph-ref-kinds.sql +39 -0
- package/db/migrations/075-agent-judgments.sql +58 -0
- package/db/migrations/076-scoped-checkpoint-bindings.sql +15 -0
- package/db/migrations/077-legacy-record-kind.sql +6 -0
- package/db/migrations/078-source-ingest-commands.sql +18 -0
- package/db/migrations/079-twin-edge-relations.sql +43 -0
- package/db/migrations/080-restore-duration-days.sql +7 -0
- package/db/migrations/081-mailbox.sql +61 -0
- package/db/migrations/082-commitments-row-id.sql +12 -0
- package/db/migrations/083-observation-is-the-evidence.sql +49 -0
- package/db/migrations/084-scope-kind-is-not-the-cores-to-list.sql +34 -0
- package/db/migrations/085-a-migration-has-a-source.sql +37 -0
- package/db/migrations/086-the-mailbox-is-generic.sql +110 -0
- package/db/migrations/087-mailbox-payload.sql +5 -0
- package/db/migrations/088-native-input-journal.sql +14 -0
- package/db/migrations/089-native-turn-receipt-lookup.sql +3 -0
- package/db/migrations/090-model-run-native-inputs.sql +29 -0
- package/db/migrations/091-native-turn-results.sql +11 -0
- package/db/migrations/092-restore-decision-fts.sql +34 -0
- package/db/migrations/093-native-turn-primary-kind.sql +14 -0
- package/db/migrations/094-commitment-run-provenance.sql +9 -0
- package/db/migrations/095-model-run-native-input-identity.sql +39 -0
- package/db/migrations/096-drop-connector-event-index-fts.sql +9 -0
- package/db/migrations/097-native-input-json-validity.sql +37 -0
- package/db/migrations/098-workflow-memory-kind.sql +105 -0
- package/dist/action-contracts.d.ts +212 -0
- package/dist/action-contracts.js +10 -0
- package/dist/api/catalog.d.ts +118 -0
- package/dist/api/catalog.js +1756 -0
- package/dist/api/dispatch.d.ts +76 -0
- package/dist/api/dispatch.js +372 -0
- package/dist/canonicalize.d.ts +2 -2
- package/dist/canonicalize.js +3 -3
- package/dist/client/client.d.ts +33 -0
- package/dist/client/client.js +123 -0
- package/dist/client/ipc.d.ts +81 -0
- package/dist/client/ipc.js +314 -0
- package/dist/db-adapter/base-adapter.d.ts +6 -66
- package/dist/db-adapter/base-adapter.js +6 -6
- package/dist/db-adapter/index.d.ts +5 -5
- package/dist/db-adapter/index.js +2 -5
- package/dist/db-adapter/node-sqlite-adapter.d.ts +85 -15
- package/dist/db-adapter/node-sqlite-adapter.js +1968 -570
- package/dist/db-manager.d.ts +53 -97
- package/dist/db-manager.js +121 -603
- package/dist/embedding/embedder.d.ts +132 -0
- package/dist/embedding/embedder.js +299 -0
- package/dist/identity/principal-repository.d.ts +2 -2
- package/dist/index.d.ts +43 -58
- package/dist/index.js +97 -145
- package/dist/{context-compile/channel-grant.d.ts → knowledge/access.d.ts} +12 -17
- package/dist/knowledge/access.js +663 -0
- package/dist/knowledge/case-errors.d.ts +31 -0
- package/dist/knowledge/case-errors.js +40 -0
- package/dist/{cases/search-rollup.d.ts → knowledge/case-search-rollup.d.ts} +5 -4
- package/dist/{cases/search-rollup.js → knowledge/case-search-rollup.js} +6 -8
- package/dist/{cases/store.d.ts → knowledge/case-store.d.ts} +3 -6
- package/dist/{cases/store.js → knowledge/case-store.js} +7 -42
- package/dist/{cases/timeline-range.d.ts → knowledge/case-timeline-range.d.ts} +3 -3
- package/dist/{cases/timeline-range.js → knowledge/case-timeline-range.js} +47 -25
- package/dist/{cases/types.d.ts → knowledge/case-types.d.ts} +8 -2
- package/dist/{cases/types.js → knowledge/case-types.js} +1 -1
- package/dist/knowledge/commitments.d.ts +188 -0
- package/dist/knowledge/commitments.js +370 -0
- package/dist/knowledge/decision-edges.d.ts +70 -0
- package/dist/knowledge/decision-edges.js +123 -0
- package/dist/{agent-graph/types.d.ts → knowledge/graph-query.d.ts} +80 -70
- package/dist/knowledge/graph-query.js +1585 -0
- package/dist/knowledge/identity.d.ts +16 -0
- package/dist/knowledge/identity.js +22 -0
- package/dist/knowledge/index.d.ts +47 -0
- package/dist/knowledge/index.js +90 -0
- package/dist/knowledge/judgments.d.ts +118 -0
- package/dist/knowledge/judgments.js +808 -0
- package/dist/knowledge/observations.d.ts +160 -0
- package/dist/knowledge/observations.js +449 -0
- package/dist/knowledge/question-type.d.ts +34 -0
- package/dist/knowledge/question-type.js +70 -0
- package/dist/{search → knowledge}/ranker-features.js +1 -1
- package/dist/{search → knowledge}/search-quality.d.ts +0 -1
- package/dist/knowledge/search.d.ts +38 -0
- package/dist/knowledge/search.js +91 -0
- package/dist/knowledge/source-ingest.d.ts +65 -0
- package/dist/knowledge/source-ingest.js +174 -0
- package/dist/{edges/types.d.ts → knowledge/twin-edge-types.d.ts} +31 -4
- package/dist/{edges/types.js → knowledge/twin-edge-types.js} +13 -2
- package/dist/knowledge/work-dates.d.ts +49 -0
- package/dist/knowledge/work-dates.js +120 -0
- package/dist/mama-api.d.ts +114 -778
- package/dist/mama-api.js +313 -2461
- package/dist/memory/api.d.ts +264 -24
- package/dist/memory/api.js +1633 -843
- package/dist/memory/bootstrap-builder.d.ts +2 -1
- package/dist/memory/bootstrap-builder.js +5 -5
- package/dist/memory/channel-summary-state-store.d.ts +3 -2
- package/dist/memory/channel-summary-state-store.js +53 -51
- package/dist/memory/channel-summary-store.d.ts +5 -3
- package/dist/memory/channel-summary-store.js +3 -8
- package/dist/memory/dashboard-read.d.ts +46 -0
- package/dist/memory/dashboard-read.js +94 -0
- package/dist/memory/event-store.d.ts +3 -3
- package/dist/memory/event-store.js +3 -10
- package/dist/memory/finding-store.d.ts +3 -2
- package/dist/memory/finding-store.js +2 -7
- package/dist/memory/graph-read.d.ts +52 -0
- package/dist/memory/graph-read.js +130 -0
- package/dist/memory/judgment-types.d.ts +394 -0
- package/dist/memory/judgment-types.js +16 -0
- package/dist/memory/provenance-audit.d.ts +5 -2
- package/dist/memory/provenance-audit.js +8 -14
- package/dist/memory/provenance-live.d.ts +141 -0
- package/dist/memory/provenance-live.js +409 -0
- package/dist/memory/provenance-query.d.ts +5 -4
- package/dist/memory/provenance-query.js +21 -29
- package/dist/memory/provenance-resolver.d.ts +191 -0
- package/dist/memory/provenance-resolver.js +155 -0
- package/dist/memory/provenance.d.ts +1 -11
- package/dist/memory/provenance.js +2 -33
- package/dist/memory/recall-sanitize.d.ts +55 -0
- package/dist/memory/recall-sanitize.js +144 -0
- package/dist/memory/secret-filter.d.ts +32 -0
- package/dist/memory/secret-filter.js +126 -0
- package/dist/memory/truth-store.d.ts +2 -1
- package/dist/memory/truth-store.js +1 -4
- package/dist/memory/types.d.ts +74 -24
- package/dist/memory/types.js +75 -5
- package/dist/memory/write-adapters.d.ts +98 -0
- package/dist/memory/write-adapters.js +242 -0
- package/dist/operations/owner-action-effects.d.ts +53 -0
- package/dist/operations/owner-action-effects.js +96 -0
- package/dist/provenance/source-ref.d.ts +1 -1
- package/dist/provenance/source-ref.js +0 -2
- package/dist/registry/corrections.d.ts +31 -0
- package/dist/registry/corrections.js +332 -0
- package/dist/registry/record-identity.d.ts +49 -0
- package/dist/registry/record-identity.js +133 -0
- package/dist/registry/store.d.ts +101 -0
- package/dist/registry/store.js +395 -0
- package/dist/registry/types.d.ts +28 -0
- package/dist/registry/types.js +5 -0
- package/dist/relevance-scorer.js +2 -2
- package/dist/runtime/agent-event-bus.d.ts +50 -0
- package/dist/runtime/agent-event-bus.js +101 -0
- package/dist/runtime/drivers/claude-cli-wrapper.d.ts +155 -0
- package/dist/runtime/drivers/claude-cli-wrapper.js +392 -0
- package/dist/runtime/drivers/cli-arg-redaction.d.ts +2 -0
- package/dist/runtime/drivers/cli-arg-redaction.js +18 -0
- package/dist/runtime/drivers/cli-secret-redaction.d.ts +17 -0
- package/dist/runtime/drivers/cli-secret-redaction.js +126 -0
- package/dist/runtime/drivers/codex-app-server-process.d.ts +277 -0
- package/dist/runtime/drivers/codex-app-server-process.js +2342 -0
- package/dist/runtime/drivers/codex-auxiliary-tools.d.ts +17 -0
- package/dist/runtime/drivers/codex-auxiliary-tools.js +267 -0
- package/dist/runtime/drivers/codex-home.d.ts +20 -0
- package/dist/runtime/drivers/codex-home.js +674 -0
- package/dist/runtime/drivers/codex-thread-registry.d.ts +63 -0
- package/dist/runtime/drivers/codex-thread-registry.js +433 -0
- package/dist/runtime/drivers/persistent-cli-adapter.d.ts +160 -0
- package/dist/runtime/drivers/persistent-cli-adapter.js +396 -0
- package/dist/runtime/drivers/persistent-cli-process.d.ts +424 -0
- package/dist/runtime/drivers/persistent-cli-process.js +1543 -0
- package/dist/runtime/drivers/types.d.ts +456 -0
- package/dist/runtime/drivers/types.js +110 -0
- package/dist/runtime/mailbox.d.ts +223 -0
- package/dist/runtime/mailbox.js +582 -0
- package/dist/runtime/model-run-store.d.ts +28 -0
- package/dist/{model-runs/store.js → runtime/model-run-store.js} +81 -41
- package/dist/{model-runs/types.d.ts → runtime/model-run-types.d.ts} +33 -4
- package/dist/{model-runs/types.js → runtime/model-run-types.js} +1 -1
- package/dist/runtime/native-effect-observer.d.ts +22 -0
- package/dist/runtime/native-effect-observer.js +103 -0
- package/dist/runtime/native-input-journal.d.ts +46 -0
- package/dist/runtime/native-input-journal.js +308 -0
- package/dist/runtime/native-prompt.d.ts +118 -0
- package/dist/runtime/native-prompt.js +496 -0
- package/dist/runtime/native-session.d.ts +10 -0
- package/dist/{agent-graph/index.js → runtime/native-session.js} +9 -6
- package/dist/runtime/native-tool-trace-observer.d.ts +5 -0
- package/dist/runtime/native-tool-trace-observer.js +65 -0
- package/dist/runtime/native-turn.d.ts +272 -0
- package/dist/runtime/native-turn.js +1041 -0
- package/dist/runtime/operations.d.ts +236 -0
- package/dist/runtime/operations.js +565 -0
- package/dist/runtime/post-tool-handler.d.ts +74 -0
- package/dist/runtime/post-tool-handler.js +137 -0
- package/dist/runtime/prompt-layers.d.ts +126 -0
- package/dist/runtime/prompt-layers.js +239 -0
- package/dist/runtime/runtime-process.d.ts +102 -0
- package/dist/runtime/runtime-process.js +206 -0
- package/dist/runtime/runtime.d.ts +278 -0
- package/dist/runtime/runtime.js +563 -0
- package/dist/runtime/session-pool.d.ts +176 -0
- package/dist/runtime/session-pool.js +369 -0
- package/dist/runtime/stimulus-payload.d.ts +5 -0
- package/dist/runtime/stimulus-payload.js +50 -0
- package/dist/runtime/subagent-bridge.d.ts +24 -0
- package/dist/{agent-graph/types.js → runtime/subagent-bridge.js} +1 -1
- package/dist/runtime/text-completion.d.ts +22 -0
- package/dist/{agent-situation/types.js → runtime/text-completion.js} +1 -1
- package/dist/runtime/token-estimator.d.ts +25 -0
- package/dist/runtime/token-estimator.js +75 -0
- package/dist/runtime/tool-trace-store.d.ts +22 -0
- package/dist/{model-runs → runtime}/tool-trace-store.js +46 -27
- package/dist/runtime/trace-summary.d.ts +5 -0
- package/dist/runtime/trace-summary.js +74 -0
- package/dist/runtime/turn-text.d.ts +23 -0
- package/dist/runtime/turn-text.js +41 -0
- package/dist/storage/database.d.ts +67 -0
- package/dist/storage/database.js +158 -0
- package/package.json +20 -34
- package/dist/agent-graph/alias-write.d.ts +0 -3
- package/dist/agent-graph/alias-write.js +0 -234
- package/dist/agent-graph/entity-resolve.d.ts +0 -3
- package/dist/agent-graph/entity-resolve.js +0 -271
- package/dist/agent-graph/errors.d.ts +0 -4
- package/dist/agent-graph/errors.js +0 -11
- package/dist/agent-graph/graph-query.d.ts +0 -5
- package/dist/agent-graph/graph-query.js +0 -360
- package/dist/agent-graph/index.d.ts +0 -6
- package/dist/agent-situation/builder.d.ts +0 -8
- package/dist/agent-situation/builder.js +0 -239
- package/dist/agent-situation/cache-key.d.ts +0 -4
- package/dist/agent-situation/cache-key.js +0 -64
- package/dist/agent-situation/index.d.ts +0 -7
- package/dist/agent-situation/index.js +0 -28
- package/dist/agent-situation/packet-store.d.ts +0 -27
- package/dist/agent-situation/packet-store.js +0 -228
- package/dist/agent-situation/ranking-policy.d.ts +0 -18
- package/dist/agent-situation/ranking-policy.js +0 -75
- package/dist/agent-situation/source-readers.d.ts +0 -52
- package/dist/agent-situation/source-readers.js +0 -300
- package/dist/agent-situation/types.d.ts +0 -195
- package/dist/cases/wiki-page-index.d.ts +0 -37
- package/dist/cases/wiki-page-index.js +0 -201
- package/dist/config-loader.d.ts +0 -68
- package/dist/config-loader.js +0 -239
- package/dist/connectors/event-index.d.ts +0 -24
- package/dist/connectors/event-index.js +0 -245
- package/dist/connectors/raw-query.d.ts +0 -40
- package/dist/connectors/raw-query.js +0 -412
- package/dist/connectors/types.d.ts +0 -117
- package/dist/connectors/types.js +0 -3
- package/dist/context-compile/boundary-defaults.d.ts +0 -12
- package/dist/context-compile/boundary-defaults.js +0 -105
- package/dist/context-compile/channel-grant.js +0 -66
- package/dist/context-compile/compiler-policy.d.ts +0 -39
- package/dist/context-compile/compiler-policy.js +0 -147
- package/dist/context-compile/compiler.d.ts +0 -18
- package/dist/context-compile/compiler.js +0 -404
- package/dist/context-compile/index.d.ts +0 -10
- package/dist/context-compile/index.js +0 -26
- package/dist/context-compile/packet-store.d.ts +0 -8
- package/dist/context-compile/packet-store.js +0 -239
- package/dist/context-compile/ref.d.ts +0 -7
- package/dist/context-compile/ref.js +0 -102
- package/dist/context-compile/source-readers.d.ts +0 -70
- package/dist/context-compile/source-readers.js +0 -840
- package/dist/context-compile/types.d.ts +0 -155
- package/dist/context-compile/types.js +0 -11
- package/dist/context-compile/visibility.d.ts +0 -21
- package/dist/context-compile/visibility.js +0 -224
- package/dist/decision-tracker.d.ts +0 -206
- package/dist/decision-tracker.js +0 -481
- package/dist/edges/ref-validation.d.ts +0 -7
- package/dist/edges/ref-validation.js +0 -321
- package/dist/edges/store.d.ts +0 -8
- package/dist/edges/store.js +0 -129
- package/dist/embedding-client.d.ts +0 -28
- package/dist/embedding-client.js +0 -53
- package/dist/embedding-server/index.d.ts +0 -67
- package/dist/embedding-server/index.js +0 -405
- package/dist/embedding-server/mobile/auth.d.ts +0 -44
- package/dist/embedding-server/mobile/auth.js +0 -150
- package/dist/embedding-server/mobile/daemon.d.ts +0 -129
- package/dist/embedding-server/mobile/daemon.js +0 -313
- package/dist/embedding-server/mobile/output-parser.d.ts +0 -115
- package/dist/embedding-server/mobile/output-parser.js +0 -241
- package/dist/embedding-server/mobile/session-api.d.ts +0 -57
- package/dist/embedding-server/mobile/session-api.js +0 -261
- package/dist/embedding-server/mobile/session-manager.d.ts +0 -138
- package/dist/embedding-server/mobile/session-manager.js +0 -378
- package/dist/embedding-server/mobile/websocket-handler.d.ts +0 -137
- package/dist/embedding-server/mobile/websocket-handler.js +0 -486
- package/dist/embeddings.d.ts +0 -68
- package/dist/embeddings.js +0 -244
- package/dist/entities/audit-metrics.d.ts +0 -68
- package/dist/entities/audit-metrics.js +0 -124
- package/dist/entities/candidate-generator.d.ts +0 -8
- package/dist/entities/candidate-generator.js +0 -24
- package/dist/entities/entity-linked-decision-counts.d.ts +0 -2
- package/dist/entities/entity-linked-decision-counts.js +0 -29
- package/dist/entities/entity-list.d.ts +0 -22
- package/dist/entities/entity-list.js +0 -3
- package/dist/entities/entity-orphan-list.d.ts +0 -17
- package/dist/entities/entity-orphan-list.js +0 -3
- package/dist/entities/entity-search.d.ts +0 -20
- package/dist/entities/entity-search.js +0 -3
- package/dist/entities/errors.d.ts +0 -55
- package/dist/entities/errors.js +0 -100
- package/dist/entities/lineage-store.d.ts +0 -28
- package/dist/entities/lineage-store.js +0 -204
- package/dist/entities/normalization.d.ts +0 -14
- package/dist/entities/normalization.js +0 -63
- package/dist/entities/policy-store.d.ts +0 -8
- package/dist/entities/policy-store.js +0 -75
- package/dist/entities/policy-types.d.ts +0 -72
- package/dist/entities/policy-types.js +0 -59
- package/dist/entities/projection.d.ts +0 -8
- package/dist/entities/projection.js +0 -82
- package/dist/entities/provenance-query.d.ts +0 -32
- package/dist/entities/provenance-query.js +0 -3
- package/dist/entities/read-identity.d.ts +0 -31
- package/dist/entities/read-identity.js +0 -264
- package/dist/entities/recall-bridge.d.ts +0 -5
- package/dist/entities/recall-bridge.js +0 -171
- package/dist/entities/resolution-engine.d.ts +0 -8
- package/dist/entities/resolution-engine.js +0 -3
- package/dist/entities/rollback-preview.d.ts +0 -35
- package/dist/entities/rollback-preview.js +0 -3
- package/dist/entities/source-locator.d.ts +0 -3
- package/dist/entities/source-locator.js +0 -32
- package/dist/entities/store.d.ts +0 -69
- package/dist/entities/store.js +0 -544
- package/dist/entities/types.d.ts +0 -166
- package/dist/entities/types.js +0 -30
- package/dist/memory/extraction-prompt.d.ts +0 -4
- package/dist/memory/extraction-prompt.js +0 -89
- package/dist/memory/scope-backfill.d.ts +0 -14
- package/dist/memory/scope-backfill.js +0 -3
- package/dist/memory/scope-store.d.ts +0 -4
- package/dist/memory/scope-store.js +0 -9
- package/dist/memory-store.d.ts +0 -87
- package/dist/memory-store.js +0 -78
- package/dist/model-runs/store.d.ts +0 -13
- package/dist/model-runs/tool-trace-store.d.ts +0 -8
- package/dist/notification-manager.d.ts +0 -7
- package/dist/notification-manager.js +0 -12
- package/dist/outcome-tracker.d.ts +0 -151
- package/dist/outcome-tracker.js +0 -271
- package/dist/query-intent.d.ts +0 -23
- package/dist/query-intent.js +0 -114
- package/dist/runtime/trusted-provenance.d.ts +0 -3
- package/dist/runtime/trusted-provenance.js +0 -6
- package/dist/search/question-type.d.ts +0 -5
- package/dist/search/question-type.js +0 -41
- package/dist/test-utils.d.ts +0 -80
- package/dist/test-utils.js +0 -218
- package/dist/tier-validator.d.ts +0 -43
- package/dist/tier-validator.js +0 -159
- package/dist/time-formatter.d.ts +0 -25
- package/dist/time-formatter.js +0 -93
- /package/dist/{search → knowledge}/feedback-store.d.ts +0 -0
- /package/dist/{search → knowledge}/feedback-store.js +0 -0
- /package/dist/{search → knowledge}/ranker-features.d.ts +0 -0
- /package/dist/{search → knowledge}/ranker-rescore.d.ts +0 -0
- /package/dist/{search → knowledge}/ranker-rescore.js +0 -0
- /package/dist/{search → knowledge}/ranker-trainer.d.ts +0 -0
- /package/dist/{search → knowledge}/ranker-trainer.js +0 -0
- /package/dist/{search → knowledge}/search-quality.js +0 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NativeInputJournal = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const canonicalize_js_1 = require("../canonicalize.js");
|
|
6
|
+
function resultRecord(value) {
|
|
7
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
8
|
+
throw new Error('Native turn result is not an object');
|
|
9
|
+
}
|
|
10
|
+
const record = value;
|
|
11
|
+
const usage = record.totalUsage;
|
|
12
|
+
if (typeof record.response !== 'string' ||
|
|
13
|
+
!Number.isSafeInteger(record.turns) ||
|
|
14
|
+
Number(record.turns) < 0 ||
|
|
15
|
+
!usage ||
|
|
16
|
+
typeof usage.input_tokens !== 'number' ||
|
|
17
|
+
!Number.isFinite(usage.input_tokens) ||
|
|
18
|
+
usage.input_tokens < 0 ||
|
|
19
|
+
typeof usage.output_tokens !== 'number' ||
|
|
20
|
+
!Number.isFinite(usage.output_tokens) ||
|
|
21
|
+
usage.output_tokens < 0 ||
|
|
22
|
+
['cache_creation_input_tokens', 'cache_read_input_tokens', 'cost_usd'].some((key) => usage[key] !== undefined &&
|
|
23
|
+
(typeof usage[key] !== 'number' || !Number.isFinite(usage[key]) || Number(usage[key]) < 0)) ||
|
|
24
|
+
typeof record.stopReason !== 'string' ||
|
|
25
|
+
(record.modelRunId !== null && typeof record.modelRunId !== 'string') ||
|
|
26
|
+
!['available', 'backend_no_run', 'commit_failed'].includes(String(record.modelRunProvenance)) ||
|
|
27
|
+
(record.modelRunProvenance === 'available' &&
|
|
28
|
+
(typeof record.modelRunId !== 'string' || !record.modelRunId.trim())) ||
|
|
29
|
+
(record.modelRunProvenance !== 'available' && record.modelRunId !== null) ||
|
|
30
|
+
(record.stoppedBy !== undefined && typeof record.stoppedBy !== 'string') ||
|
|
31
|
+
(record.ownerJournalProvenance !== undefined &&
|
|
32
|
+
record.ownerJournalProvenance !== 'commit_failed')) {
|
|
33
|
+
throw new Error('Native turn result is invalid');
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
response: record.response,
|
|
37
|
+
turns: Number(record.turns),
|
|
38
|
+
totalUsage: {
|
|
39
|
+
input_tokens: Number(usage.input_tokens),
|
|
40
|
+
output_tokens: Number(usage.output_tokens),
|
|
41
|
+
...(usage.cache_creation_input_tokens === undefined
|
|
42
|
+
? {}
|
|
43
|
+
: { cache_creation_input_tokens: Number(usage.cache_creation_input_tokens) }),
|
|
44
|
+
...(usage.cache_read_input_tokens === undefined
|
|
45
|
+
? {}
|
|
46
|
+
: { cache_read_input_tokens: Number(usage.cache_read_input_tokens) }),
|
|
47
|
+
...(usage.cost_usd === undefined ? {} : { cost_usd: Number(usage.cost_usd) }),
|
|
48
|
+
},
|
|
49
|
+
stopReason: record.stopReason,
|
|
50
|
+
modelRunId: record.modelRunId,
|
|
51
|
+
modelRunProvenance: record.modelRunProvenance,
|
|
52
|
+
...(record.stoppedBy === undefined
|
|
53
|
+
? {}
|
|
54
|
+
: { stoppedBy: record.stoppedBy }),
|
|
55
|
+
...(record.ownerJournalProvenance === 'commit_failed'
|
|
56
|
+
? { ownerJournalProvenance: 'commit_failed' }
|
|
57
|
+
: {}),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function address(value) {
|
|
61
|
+
if (!value ||
|
|
62
|
+
typeof value !== 'object' ||
|
|
63
|
+
!['claude', 'codex'].includes(String(value.backend)) ||
|
|
64
|
+
typeof value.sessionId !== 'string' ||
|
|
65
|
+
!value.sessionId.trim()) {
|
|
66
|
+
throw new Error('Native input address is invalid');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function required(value) {
|
|
70
|
+
if (typeof value !== 'string' || !value.trim()) {
|
|
71
|
+
throw new Error('Native input identity is required');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** One durable dispatch identity per accepted input. No task meaning or effect classification. */
|
|
75
|
+
class NativeInputJournal {
|
|
76
|
+
db;
|
|
77
|
+
now;
|
|
78
|
+
constructor(db, now = Date.now) {
|
|
79
|
+
this.db = db;
|
|
80
|
+
this.now = now;
|
|
81
|
+
const existed = db
|
|
82
|
+
.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='native_input_deliveries'")
|
|
83
|
+
.get();
|
|
84
|
+
db.exec(`CREATE TABLE IF NOT EXISTS native_input_deliveries (
|
|
85
|
+
input_id INTEGER PRIMARY KEY REFERENCES mailbox_inputs(id) ON DELETE CASCADE,
|
|
86
|
+
invocation_id TEXT UNIQUE,
|
|
87
|
+
state TEXT NOT NULL CHECK (state IN ('prepared','dispatching','accepted','settled','uncertain')),
|
|
88
|
+
dispatch_json TEXT, receipt_json TEXT, error TEXT, updated_at INTEGER NOT NULL
|
|
89
|
+
)`);
|
|
90
|
+
db.exec(`CREATE TABLE IF NOT EXISTS native_turn_results (
|
|
91
|
+
receipt_json TEXT NOT NULL,
|
|
92
|
+
principal_id TEXT NOT NULL,
|
|
93
|
+
primary_stimulus_id TEXT NOT NULL,
|
|
94
|
+
primary_kind TEXT CHECK (primary_kind IS NULL OR primary_kind IN
|
|
95
|
+
('owner_message','source_delta','scheduled','native_event')),
|
|
96
|
+
result_json TEXT NOT NULL CHECK (json_valid(result_json)),
|
|
97
|
+
created_at INTEGER NOT NULL,
|
|
98
|
+
PRIMARY KEY (receipt_json, principal_id)
|
|
99
|
+
)`);
|
|
100
|
+
if (!existed) {
|
|
101
|
+
db.exec(`INSERT OR IGNORE INTO native_input_deliveries (input_id,state,error,updated_at)
|
|
102
|
+
SELECT id,'uncertain','Legacy input has no native dispatch record',created_at
|
|
103
|
+
FROM mailbox_inputs WHERE status='claimed' OR (status='pending' AND attempts>0)`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
get(inputId) {
|
|
107
|
+
const row = this.db
|
|
108
|
+
.prepare('SELECT * FROM native_input_deliveries WHERE input_id=?')
|
|
109
|
+
.get(inputId);
|
|
110
|
+
if (!row) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
const dispatch = row.dispatch_json === null ? null : JSON.parse(row.dispatch_json);
|
|
114
|
+
const receipt = row.receipt_json === null ? null : JSON.parse(row.receipt_json);
|
|
115
|
+
if (row.dispatch_json !== null) {
|
|
116
|
+
address(dispatch);
|
|
117
|
+
required(dispatch.inputId);
|
|
118
|
+
}
|
|
119
|
+
if (row.receipt_json !== null) {
|
|
120
|
+
address(receipt);
|
|
121
|
+
required(receipt.backend === 'claude' ? receipt.inputId : receipt.turnId);
|
|
122
|
+
}
|
|
123
|
+
if (dispatch && dispatch.inputId !== row.invocation_id) {
|
|
124
|
+
throw new Error('Stored native input identity mismatch');
|
|
125
|
+
}
|
|
126
|
+
if (receipt &&
|
|
127
|
+
(!dispatch ||
|
|
128
|
+
receipt.backend !== dispatch.backend ||
|
|
129
|
+
receipt.sessionId !== dispatch.sessionId ||
|
|
130
|
+
(receipt.backend === 'claude' && receipt.inputId !== row.invocation_id))) {
|
|
131
|
+
throw new Error('Stored native receipt identity mismatch');
|
|
132
|
+
}
|
|
133
|
+
if (row.state === 'accepted' && !receipt) {
|
|
134
|
+
throw new Error('Accepted native input has no receipt');
|
|
135
|
+
}
|
|
136
|
+
if (row.state === 'dispatching' && !dispatch) {
|
|
137
|
+
throw new Error('Dispatched native input has no address');
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
invocationId: row.invocation_id,
|
|
141
|
+
state: row.state,
|
|
142
|
+
dispatch,
|
|
143
|
+
receipt,
|
|
144
|
+
error: row.error,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/** Page the inputs that share one exact native receipt under one principal. */
|
|
148
|
+
listByReceipt(receipt, principalId, options = {}) {
|
|
149
|
+
address(receipt);
|
|
150
|
+
required(receipt.backend === 'codex' ? receipt.turnId : receipt.inputId);
|
|
151
|
+
required(principalId);
|
|
152
|
+
const afterId = options.afterId ?? 0;
|
|
153
|
+
const limit = options.limit ?? 25;
|
|
154
|
+
if (!Number.isSafeInteger(afterId) || afterId < 0) {
|
|
155
|
+
throw new Error('Native receipt cursor must be a non-negative integer');
|
|
156
|
+
}
|
|
157
|
+
if (!Number.isSafeInteger(limit) || limit < 1 || limit > 100) {
|
|
158
|
+
throw new Error('Native receipt page limit must be 1 to 100');
|
|
159
|
+
}
|
|
160
|
+
const rows = this.db
|
|
161
|
+
.prepare(`SELECT n.input_id FROM native_input_deliveries n
|
|
162
|
+
JOIN mailbox_inputs m ON m.id=n.input_id
|
|
163
|
+
WHERE n.receipt_json=? AND m.principal_id=? AND n.input_id>?
|
|
164
|
+
ORDER BY n.input_id LIMIT ?`)
|
|
165
|
+
.all((0, canonicalize_js_1.canonicalizeJSON)(receipt), principalId, afterId, limit + 1);
|
|
166
|
+
const page = rows.slice(0, limit);
|
|
167
|
+
return {
|
|
168
|
+
inputIds: page.map((row) => row.input_id),
|
|
169
|
+
nextCursor: rows.length > limit ? page[page.length - 1].input_id : null,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/** One immutable final result per native turn, written before any consumer reply. */
|
|
173
|
+
storeResult(inputId, result) {
|
|
174
|
+
const native = this.get(inputId);
|
|
175
|
+
if (!native?.receipt)
|
|
176
|
+
throw new Error('Native result requires an accepted input receipt');
|
|
177
|
+
const mailbox = this.db
|
|
178
|
+
.prepare('SELECT stimulus_id, principal_id, kind FROM mailbox_inputs WHERE id=?')
|
|
179
|
+
.get(inputId);
|
|
180
|
+
if (!mailbox)
|
|
181
|
+
throw new Error('Native result input is missing');
|
|
182
|
+
if (!['owner_message', 'source_delta', 'scheduled', 'native_event'].includes(String(mailbox.kind))) {
|
|
183
|
+
throw new Error('Native result input has no producer-stated kind');
|
|
184
|
+
}
|
|
185
|
+
const receiptJson = (0, canonicalize_js_1.canonicalizeJSON)(native.receipt);
|
|
186
|
+
const resultJson = (0, canonicalize_js_1.canonicalizeJSON)(resultRecord(result));
|
|
187
|
+
this.db.transaction(() => {
|
|
188
|
+
const existing = this.db
|
|
189
|
+
.prepare('SELECT primary_stimulus_id, primary_kind, result_json FROM native_turn_results WHERE receipt_json=? AND principal_id=?')
|
|
190
|
+
.get(receiptJson, mailbox.principal_id);
|
|
191
|
+
if (existing) {
|
|
192
|
+
if (existing.primary_stimulus_id !== mailbox.stimulus_id ||
|
|
193
|
+
existing.primary_kind !== mailbox.kind ||
|
|
194
|
+
existing.result_json !== resultJson) {
|
|
195
|
+
throw new Error('Native turn result conflicts with its durable receipt');
|
|
196
|
+
}
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
this.db
|
|
200
|
+
.prepare(`INSERT INTO native_turn_results
|
|
201
|
+
(receipt_json,principal_id,primary_stimulus_id,primary_kind,result_json,created_at)
|
|
202
|
+
VALUES (?,?,?,?,?,?)`)
|
|
203
|
+
.run(receiptJson, mailbox.principal_id, mailbox.stimulus_id, mailbox.kind, resultJson, this.now());
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
/** A later accepted input can recover the one final result under its principal. */
|
|
207
|
+
resultForReceipt(receipt, principalId) {
|
|
208
|
+
address(receipt);
|
|
209
|
+
required(receipt.backend === 'codex' ? receipt.turnId : receipt.inputId);
|
|
210
|
+
required(principalId);
|
|
211
|
+
const row = this.db
|
|
212
|
+
.prepare('SELECT primary_stimulus_id, primary_kind, result_json FROM native_turn_results WHERE receipt_json=? AND principal_id=?')
|
|
213
|
+
.get((0, canonicalize_js_1.canonicalizeJSON)(receipt), principalId);
|
|
214
|
+
if (!row)
|
|
215
|
+
return null;
|
|
216
|
+
if (row.primary_kind !== null &&
|
|
217
|
+
!['owner_message', 'source_delta', 'scheduled', 'native_event'].includes(row.primary_kind)) {
|
|
218
|
+
throw new Error('Stored native primary kind is invalid');
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
...resultRecord(JSON.parse(row.result_json)),
|
|
222
|
+
primaryStimulusId: row.primary_stimulus_id,
|
|
223
|
+
primaryKind: row.primary_kind,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
prepare(inputId) {
|
|
227
|
+
this.db
|
|
228
|
+
.prepare(`INSERT OR IGNORE INTO native_input_deliveries
|
|
229
|
+
(input_id,invocation_id,state,updated_at) VALUES (?,?,'prepared',?)`)
|
|
230
|
+
.run(inputId, (0, node_crypto_1.randomUUID)(), this.now());
|
|
231
|
+
return this.get(inputId);
|
|
232
|
+
}
|
|
233
|
+
dispatch(inputId, value) {
|
|
234
|
+
address(value);
|
|
235
|
+
required(value.inputId);
|
|
236
|
+
const record = this.get(inputId);
|
|
237
|
+
if (!record || record.invocationId !== value.inputId) {
|
|
238
|
+
throw new Error('Native dispatch input identity mismatch');
|
|
239
|
+
}
|
|
240
|
+
const encoded = (0, canonicalize_js_1.canonicalizeJSON)(value);
|
|
241
|
+
if (record.dispatch) {
|
|
242
|
+
if ((0, canonicalize_js_1.canonicalizeJSON)(record.dispatch) !== encoded) {
|
|
243
|
+
throw new Error('Native dispatch identity conflict');
|
|
244
|
+
}
|
|
245
|
+
throw new Error('Native input was already dispatched; reconciliation is required');
|
|
246
|
+
}
|
|
247
|
+
if (record.state !== 'prepared') {
|
|
248
|
+
throw new Error('Native input requires reconciliation before dispatch');
|
|
249
|
+
}
|
|
250
|
+
const changed = this.db
|
|
251
|
+
.prepare("UPDATE native_input_deliveries SET state='dispatching',dispatch_json=?,updated_at=? WHERE input_id=? AND state='prepared'")
|
|
252
|
+
.run(encoded, this.now(), inputId);
|
|
253
|
+
if (changed.changes !== 1) {
|
|
254
|
+
throw new Error('Native input was already dispatched; reconciliation is required');
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
accept(inputId, value) {
|
|
258
|
+
address(value);
|
|
259
|
+
required(value.backend === 'claude' ? value.inputId : value.turnId);
|
|
260
|
+
this.db.transaction(() => {
|
|
261
|
+
const record = this.get(inputId);
|
|
262
|
+
if (!record?.dispatch ||
|
|
263
|
+
record.dispatch.backend !== value.backend ||
|
|
264
|
+
record.dispatch.sessionId !== value.sessionId ||
|
|
265
|
+
(value.backend === 'claude' && value.inputId !== record.invocationId)) {
|
|
266
|
+
throw new Error('Native receipt does not match the dispatched input');
|
|
267
|
+
}
|
|
268
|
+
if (record.receipt) {
|
|
269
|
+
if ((0, canonicalize_js_1.canonicalizeJSON)(record.receipt) !== (0, canonicalize_js_1.canonicalizeJSON)(value)) {
|
|
270
|
+
throw new Error('Native receipt identity conflict');
|
|
271
|
+
}
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
this.db
|
|
275
|
+
.prepare("UPDATE native_input_deliveries SET state='accepted',receipt_json=?,error=NULL,updated_at=? WHERE input_id=?")
|
|
276
|
+
.run((0, canonicalize_js_1.canonicalizeJSON)(value), this.now(), inputId);
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
settle(inputId, reconciled = false) {
|
|
280
|
+
this.db.transaction(() => {
|
|
281
|
+
const record = this.get(inputId);
|
|
282
|
+
if (!record) {
|
|
283
|
+
throw new Error('Native delivery record is missing');
|
|
284
|
+
}
|
|
285
|
+
if (record.state !== 'prepared' && !record.receipt && !reconciled) {
|
|
286
|
+
throw new Error('Native input acknowledgement is unresolved');
|
|
287
|
+
}
|
|
288
|
+
this.db
|
|
289
|
+
.prepare("UPDATE native_input_deliveries SET state='settled',error=NULL,updated_at=? WHERE input_id=?")
|
|
290
|
+
.run(this.now(), inputId);
|
|
291
|
+
this.db
|
|
292
|
+
.prepare("UPDATE mailbox_inputs SET status='acked',acked_at=COALESCE(acked_at,?) WHERE id=?")
|
|
293
|
+
.run(this.now(), inputId);
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
uncertain(inputId, error) {
|
|
297
|
+
this.db
|
|
298
|
+
.prepare("UPDATE native_input_deliveries SET state='uncertain',error=?,updated_at=? WHERE input_id=? AND state!='settled' AND (state!='uncertain' OR error IS NOT ?)")
|
|
299
|
+
.run(error.slice(0, 500), this.now(), inputId, error.slice(0, 500));
|
|
300
|
+
}
|
|
301
|
+
pending(limit, afterId = 0) {
|
|
302
|
+
return this.db
|
|
303
|
+
.prepare("SELECT input_id FROM native_input_deliveries WHERE state IN ('dispatching','accepted','uncertain') AND input_id>? ORDER BY input_id LIMIT ?")
|
|
304
|
+
.all(afterId, limit).map((row) => row.input_id);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
exports.NativeInputJournal = NativeInputJournal;
|
|
308
|
+
//# sourceMappingURL=native-input-journal.js.map
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One native request: prepare its protocol options, forward acknowledgement and
|
|
3
|
+
* events, record observed exchanges, and return the harness result.
|
|
4
|
+
* Tool execution, compaction and continuation belong to the native harness.
|
|
5
|
+
*/
|
|
6
|
+
import type { BackendType, ContentBlock, HostExecutionContext, HostToolBridge, IModelRunner, Message, StopReason, StreamCallbacks, ToolResultBlock, TurnInfo, Usage } from './drivers/types.js';
|
|
7
|
+
import type { SessionPool } from './session-pool.js';
|
|
8
|
+
import type { NativeEffectReplayBoundary } from './native-effect-observer.js';
|
|
9
|
+
/** Why a run stopped on the host's side, as distinct from the model's own stop reason. */
|
|
10
|
+
export interface BudgetStopInfo {
|
|
11
|
+
channelKey: string;
|
|
12
|
+
modelRunId: string | null;
|
|
13
|
+
agentId?: string;
|
|
14
|
+
budgetTokens: number;
|
|
15
|
+
runTokenBudget: number;
|
|
16
|
+
turns: number;
|
|
17
|
+
}
|
|
18
|
+
/** Run-local observers and tier. Never instance state: two runs can overlap. */
|
|
19
|
+
export interface RunScope {
|
|
20
|
+
streamCallbacks?: StreamCallbacks;
|
|
21
|
+
tier: 1 | 2 | 3;
|
|
22
|
+
onTurn?: (turn: TurnInfo) => void;
|
|
23
|
+
onToolUse?: (toolName: string, input: unknown, result: unknown) => void;
|
|
24
|
+
}
|
|
25
|
+
/** State the loop is handed and hands back. Everything here changes as turns run. */
|
|
26
|
+
export interface NativePromptCarry {
|
|
27
|
+
turn: number;
|
|
28
|
+
stopReason: StopReason;
|
|
29
|
+
stoppedBy?: 'budget';
|
|
30
|
+
budgetTokens: number;
|
|
31
|
+
resolvedCliSessionId: string | null;
|
|
32
|
+
sessionIsNew: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The fourteen facts about this request the loop actually reads. The caller's own
|
|
36
|
+
* options object is wider and names things the core has no business knowing; this is
|
|
37
|
+
* the part that crosses.
|
|
38
|
+
*/
|
|
39
|
+
export interface NativePromptRequest {
|
|
40
|
+
nativeInputId?: string;
|
|
41
|
+
source?: string;
|
|
42
|
+
freshSession?: boolean;
|
|
43
|
+
resumeSession?: boolean;
|
|
44
|
+
model?: string;
|
|
45
|
+
requestTimeoutMs?: number;
|
|
46
|
+
onCliSessionReset?: (sessionId: string) => void;
|
|
47
|
+
systemPrompt?: string;
|
|
48
|
+
promptKind?: string;
|
|
49
|
+
promptBrief?: 'sent' | 'omitted';
|
|
50
|
+
agentContext?: {
|
|
51
|
+
roleName?: string;
|
|
52
|
+
};
|
|
53
|
+
modelRunId?: string;
|
|
54
|
+
stopAfterSuccessfulTools?: string[];
|
|
55
|
+
}
|
|
56
|
+
/** A tool result carries two host-only fields that history must not keep. */
|
|
57
|
+
export type InternalToolResultBlock = ToolResultBlock & {
|
|
58
|
+
abort?: boolean;
|
|
59
|
+
terminalCode?: string;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Everything the loop reads that does not change while it runs. The caller builds it
|
|
63
|
+
* once, before the first turn.
|
|
64
|
+
*/
|
|
65
|
+
export interface NativePromptContext<TToolContext extends HostExecutionContext> {
|
|
66
|
+
prepareSessionContent?: (session: import('./drivers/types.js').NativeSessionState) => Promise<ContentBlock[]>;
|
|
67
|
+
channelKey: string;
|
|
68
|
+
claudeNativeTools: string | undefined;
|
|
69
|
+
effectiveSessionPolicyFingerprint: string | undefined;
|
|
70
|
+
restrictedReadRoots: readonly string[] | undefined;
|
|
71
|
+
nativeCwd: string | undefined;
|
|
72
|
+
history: Message[];
|
|
73
|
+
hostToolBridge: HostToolBridge | undefined;
|
|
74
|
+
isCodex: boolean;
|
|
75
|
+
isDurableRuntime: boolean;
|
|
76
|
+
nativeEffects: NativeEffectReplayBoundary;
|
|
77
|
+
ownedModelRunId: string | null;
|
|
78
|
+
standingPolicy: boolean;
|
|
79
|
+
/** What this call opens with, already composed by the entry. */
|
|
80
|
+
systemPrompt: string | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* The complete current policy, asked for only when the durable thread this run was
|
|
83
|
+
* resuming turned out to be gone. The loop never composes one: it asks.
|
|
84
|
+
*/
|
|
85
|
+
reanchor: (() => Promise<string>) | undefined;
|
|
86
|
+
resumeInstructions: (() => Promise<string>) | undefined;
|
|
87
|
+
runScope: RunScope;
|
|
88
|
+
toolExecutionContext: TToolContext | null;
|
|
89
|
+
totalUsage: Usage;
|
|
90
|
+
tracksSessionPolicy: boolean;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Native driver, lifecycle bookkeeping and the consumer's input formatting port.
|
|
94
|
+
*/
|
|
95
|
+
export interface NativePromptHost {
|
|
96
|
+
agent: IModelRunner;
|
|
97
|
+
backend: BackendType;
|
|
98
|
+
model: string;
|
|
99
|
+
runTokenBudget: number;
|
|
100
|
+
sessionPool: SessionPool;
|
|
101
|
+
onBudgetStop?: (info: BudgetStopInfo) => void;
|
|
102
|
+
onTokenUsage?: (record: {
|
|
103
|
+
channel_key: string;
|
|
104
|
+
agent_id?: string;
|
|
105
|
+
input_tokens: number;
|
|
106
|
+
output_tokens: number;
|
|
107
|
+
cache_read_tokens?: number;
|
|
108
|
+
cost_usd?: number;
|
|
109
|
+
}) => void;
|
|
110
|
+
onMetric?: (name: string, value: number, labels?: Record<string, string>) => void;
|
|
111
|
+
formatLastMessageOnly(history: Message[]): string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Submit one native request and observe its completed exchanges and final result.
|
|
115
|
+
* `carry` is read and written: the caller reads the final state off it.
|
|
116
|
+
*/
|
|
117
|
+
export declare function runNativePrompt<TToolContext extends HostExecutionContext>(carry: NativePromptCarry, context: NativePromptContext<TToolContext>, request: NativePromptRequest, host: NativePromptHost): Promise<void>;
|
|
118
|
+
//# sourceMappingURL=native-prompt.d.ts.map
|