@jangts/agent-core 0.1.1 → 0.2.1
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/CHANGELOG.md +25 -0
- package/LICENSE +55 -0
- package/NOTICE +6 -0
- package/README.md +8 -0
- package/development/docs/README.en.md +70 -0
- package/development/docs/README.md +1 -1
- package/development/docs/acceptance.en.md +34 -0
- package/development/docs/agent-development.en.md +42 -0
- package/development/docs/api/README.en.md +62 -0
- package/development/docs/api/advanced-agents.en.md +135 -0
- package/development/docs/api/context-processing.en.md +110 -0
- package/development/docs/api/core.en.md +274 -0
- package/development/docs/api/examples.en.md +118 -0
- package/development/docs/api/kits.en.md +183 -0
- package/development/docs/api/knowledge-answering.en.md +166 -0
- package/development/docs/api/mock.en.md +186 -0
- package/development/docs/api/observability.en.md +166 -0
- package/development/docs/api/reference.en.md +2235 -0
- package/development/docs/api/reference.md +1907 -1874
- package/development/docs/api/support.en.md +252 -0
- package/development/docs/api/support.md +27 -0
- package/development/docs/api/types.en.md +181 -0
- package/development/docs/api/workflow.en.md +188 -0
- package/development/docs/basic-usage.en.md +78 -0
- package/development/docs/create-app.en.md +76 -0
- package/development/docs/examples/offline-agent.en.md +273 -0
- package/development/docs/examples.en.md +36 -0
- package/development/docs/flows/knowledge-maintenance.en.md +38 -0
- package/development/docs/getting-started.en.md +71 -0
- package/development/docs/knowledge.en.md +89 -0
- package/development/docs/maintenance.en.md +62 -0
- package/development/docs/materials.en.md +38 -0
- package/development/docs/mechanisms.en.md +227 -0
- package/development/docs/memory-and-learning.en.md +42 -0
- package/development/docs/operations.en.md +51 -0
- package/development/docs/records.en.md +63 -0
- package/development/docs/registration.en.md +63 -0
- package/development/skills/agent-core-app/scripts/create-app.mjs +286 -70
- package/development/skills/agent-core-app/scripts/lib/knowledge.mjs +77 -16
- package/development/skills/agent-core-app/scripts/lib/source.mjs +30 -2
- package/development/skills/agent-core-app/scripts/plan.mjs +46 -12
- package/development/skills/agent-core-app/scripts/prepare-source.mjs +61 -10
- package/development/skills/agent-core-app/scripts/resources.mjs +62 -17
- package/development/skills/agent-core-app/scripts/validate-knowledge.mjs +18 -1
- package/development/skills/agent-core-app/templates/catalog.json +36 -22
- package/dist/cjs/capabilities/index.js +13 -0
- package/dist/cjs/capabilities/invocation.js +80 -10
- package/dist/cjs/capabilities/model.js +126 -13
- package/dist/cjs/capabilities/tool-runtime.js +64 -12
- package/dist/cjs/capabilities/tools.js +266 -31
- package/dist/cjs/context/assembly.js +46 -5
- package/dist/cjs/context/audit.js +31 -6
- package/dist/cjs/context/fragments.js +54 -11
- package/dist/cjs/context/index.js +12 -0
- package/dist/cjs/context/journal.js +84 -7
- package/dist/cjs/context/plan.js +30 -2
- package/dist/cjs/diagnostics/catalog.js +17 -3
- package/dist/cjs/diagnostics/index.js +149 -29
- package/dist/cjs/diagnostics/sub-flow.js +240 -40
- package/dist/cjs/errors.js +99 -17
- package/dist/cjs/execution/branch.js +20 -4
- package/dist/cjs/execution/engine.js +470 -56
- package/dist/cjs/execution/events.js +136 -18
- package/dist/cjs/execution/index.js +7 -0
- package/dist/cjs/execution/reporting.js +75 -6
- package/dist/cjs/execution/state.js +161 -22
- package/dist/cjs/execution/workflow.js +224 -32
- package/dist/cjs/index.js +18 -0
- package/dist/cjs/kits/aggregation.js +45 -3
- package/dist/cjs/kits/answering/batch.js +23 -4
- package/dist/cjs/kits/answering/check-result.js +31 -8
- package/dist/cjs/kits/answering/checks.js +24 -3
- package/dist/cjs/kits/answering/flow.js +192 -36
- package/dist/cjs/kits/answering/index.js +19 -1
- package/dist/cjs/kits/answering/tasks.js +88 -13
- package/dist/cjs/kits/artifacts.js +36 -4
- package/dist/cjs/kits/candidates.js +47 -5
- package/dist/cjs/kits/delivery.js +40 -5
- package/dist/cjs/kits/durable.js +155 -31
- package/dist/cjs/kits/evidence.js +66 -15
- package/dist/cjs/kits/family.js +152 -22
- package/dist/cjs/kits/index.js +12 -1
- package/dist/cjs/kits/inference.js +104 -16
- package/dist/cjs/kits/intents/catalog.js +67 -16
- package/dist/cjs/kits/intents/index.js +11 -0
- package/dist/cjs/kits/intents/registry.js +188 -43
- package/dist/cjs/kits/intents/scopes.js +215 -46
- package/dist/cjs/kits/interaction/command.js +140 -36
- package/dist/cjs/kits/interaction/commands.js +86 -11
- package/dist/cjs/kits/interaction/handlers.js +27 -10
- package/dist/cjs/kits/interaction/index.js +10 -0
- package/dist/cjs/kits/interaction/transfer.js +80 -14
- package/dist/cjs/kits/knowledge/catalog.js +62 -11
- package/dist/cjs/kits/knowledge/index.js +16 -1
- package/dist/cjs/kits/knowledge/publication.js +99 -23
- package/dist/cjs/kits/knowledge/sections.js +33 -4
- package/dist/cjs/kits/normalization.js +51 -7
- package/dist/cjs/kits/policies.js +79 -15
- package/dist/cjs/kits/presentation/events.js +54 -10
- package/dist/cjs/kits/presentation/index.js +24 -1
- package/dist/cjs/kits/presentation/outputs.js +176 -38
- package/dist/cjs/kits/presentation/templates.js +33 -5
- package/dist/cjs/kits/presentation/variants.js +31 -2
- package/dist/cjs/kits/projection.js +63 -8
- package/dist/cjs/kits/rank-fusion.js +27 -4
- package/dist/cjs/kits/reflection-log-source.js +89 -16
- package/dist/cjs/kits/reflection.js +234 -60
- package/dist/cjs/kits/retrieval.js +98 -18
- package/dist/cjs/kits/search.js +180 -27
- package/dist/cjs/kits/text-skills.js +104 -19
- package/dist/cjs/kits/tools.js +415 -74
- package/dist/cjs/kits/vector-search.js +50 -16
- package/dist/cjs/mock/node.js +7 -1
- package/dist/cjs/mock/web.js +7 -1
- package/dist/cjs/mock.js +7 -1
- package/dist/cjs/model/binding.js +68 -17
- package/dist/cjs/model/call-budget.js +45 -4
- package/dist/cjs/model/decision-retry.js +19 -1
- package/dist/cjs/model/defaults.js +27 -4
- package/dist/cjs/model/index.js +7 -0
- package/dist/cjs/model/interactions/arguments.js +36 -1
- package/dist/cjs/model/interactions/json-object.js +48 -12
- package/dist/cjs/model/interactions/native-functions.js +52 -10
- package/dist/cjs/model/message-diagnostics.js +17 -4
- package/dist/cjs/model/options.js +9 -1
- package/dist/cjs/model/preparation.js +86 -12
- package/dist/cjs/model/runner.js +413 -79
- package/dist/cjs/model/selection-transport.js +48 -8
- package/dist/cjs/model/settings.js +67 -13
- package/dist/cjs/model/token-budget.js +69 -11
- package/dist/cjs/model/transports.js +59 -6
- package/dist/cjs/structs/common.js +11 -0
- package/dist/cjs/structs/debug.js +34 -5
- package/dist/cjs/structs/errors.js +26 -1
- package/dist/cjs/structs/index.js +11 -1
- package/dist/cjs/structs/kits/durable.js +7 -0
- package/dist/cjs/structs/kits/family.js +1 -0
- package/dist/cjs/structs/kits/interaction.js +8 -1
- package/dist/cjs/structs/kits/knowledge-publication.js +1 -0
- package/dist/cjs/structs/kits/reflection.js +18 -3
- package/dist/cjs/structs/model/chat-provider.js +6 -0
- package/dist/cjs/structs/support/model/completion.js +2 -0
- package/dist/cjs/structs/support/model/messages.js +2 -0
- package/dist/cjs/support/capabilities.js +43 -6
- package/dist/cjs/support/context/assembly.js +88 -16
- package/dist/cjs/support/context/compression.js +48 -6
- package/dist/cjs/support/context/fragments.js +6 -0
- package/dist/cjs/support/context/history.js +36 -1
- package/dist/cjs/support/context/index.js +11 -0
- package/dist/cjs/support/context/nodes.js +164 -35
- package/dist/cjs/support/context/processing.js +319 -61
- package/dist/cjs/support/context/selection-policy.js +98 -21
- package/dist/cjs/support/context/selection.js +61 -10
- package/dist/cjs/support/context/snapshot.js +29 -7
- package/dist/cjs/support/context/strategies.js +120 -28
- package/dist/cjs/support/index.js +9 -1
- package/dist/cjs/support/model/capabilities.js +20 -1
- package/dist/cjs/support/model/chat-completions.js +92 -20
- package/dist/cjs/support/model/children.js +34 -6
- package/dist/cjs/support/model/compatible-provider.js +189 -59
- package/dist/cjs/support/model/completion/calls.js +61 -0
- package/dist/cjs/support/model/completion/default.js +33 -0
- package/dist/cjs/support/model/completion/index.js +28 -0
- package/dist/cjs/support/model/completion/session.js +107 -0
- package/dist/cjs/support/model/index.js +12 -0
- package/dist/cjs/support/model/interactions/index.js +12 -1
- package/dist/cjs/support/model/interactions/json-object.js +6 -0
- package/dist/cjs/support/model/interactions/native-functions.js +6 -0
- package/dist/cjs/support/model/observer.js +32 -6
- package/dist/cjs/support/model/preview-rules.js +66 -16
- package/dist/cjs/support/model/reply-preview.js +77 -17
- package/dist/cjs/support/model/stage-transport.js +33 -7
- package/dist/cjs/support/model/strategies.js +75 -14
- package/dist/cjs/support/model/transports.js +53 -11
- package/dist/cjs/support/registration.js +49 -7
- package/dist/cjs/support/schema.js +46 -4
- package/dist/cjs/support/stream-events.js +60 -8
- package/dist/cjs/support/tool-runtime.js +6 -0
- package/dist/cjs/support/tools.js +79 -10
- package/dist/cjs/support/transport/index.js +7 -0
- package/dist/cjs/support/transport/json.js +28 -4
- package/dist/cjs/support/transport/sse.js +25 -2
- package/dist/cjs/utils/break-observer.js +20 -2
- package/dist/cjs/utils/cancellation.js +77 -9
- package/dist/cjs/utils/catalog.js +19 -4
- package/dist/cjs/utils/debug.js +14 -2
- package/dist/cjs/utils/index.js +8 -0
- package/dist/cjs/utils/interaction-definition.js +26 -6
- package/dist/cjs/utils/invocation.js +42 -4
- package/dist/cjs/utils/model-protocol.js +20 -1
- package/dist/cjs/utils/object.js +16 -0
- package/dist/cjs/utils/observer.js +22 -2
- package/dist/cjs/utils/protocol-registry.js +47 -4
- package/dist/cjs/utils/query-key.js +21 -2
- package/dist/cjs/utils/registration.js +18 -2
- package/dist/cjs/utils/rules.js +39 -11
- package/dist/cjs/utils/schema-adapter.js +25 -2
- package/dist/cjs/utils/synchronous.js +64 -7
- package/dist/cjs/utils/text.js +15 -1
- package/dist/esm/capabilities/index.d.ts +13 -0
- package/dist/esm/capabilities/index.js +13 -0
- package/dist/esm/capabilities/invocation.d.ts +16 -2
- package/dist/esm/capabilities/invocation.js +80 -10
- package/dist/esm/capabilities/model.d.ts +68 -1
- package/dist/esm/capabilities/model.js +126 -13
- package/dist/esm/capabilities/tool-runtime.d.ts +11 -0
- package/dist/esm/capabilities/tool-runtime.js +64 -12
- package/dist/esm/capabilities/tools.d.ts +96 -3
- package/dist/esm/capabilities/tools.js +267 -32
- package/dist/esm/context/assembly.d.ts +13 -2
- package/dist/esm/context/assembly.js +46 -5
- package/dist/esm/context/audit.d.ts +23 -1
- package/dist/esm/context/audit.js +31 -6
- package/dist/esm/context/fragments.d.ts +37 -3
- package/dist/esm/context/fragments.js +54 -11
- package/dist/esm/context/index.d.ts +12 -0
- package/dist/esm/context/index.js +12 -0
- package/dist/esm/context/journal.d.ts +32 -1
- package/dist/esm/context/journal.js +84 -7
- package/dist/esm/context/plan.d.ts +11 -1
- package/dist/esm/context/plan.js +30 -2
- package/dist/esm/diagnostics/catalog.d.ts +6 -0
- package/dist/esm/diagnostics/catalog.js +17 -3
- package/dist/esm/diagnostics/index.d.ts +30 -2
- package/dist/esm/diagnostics/index.js +149 -29
- package/dist/esm/diagnostics/sub-flow.d.ts +41 -3
- package/dist/esm/diagnostics/sub-flow.js +240 -40
- package/dist/esm/errors.d.ts +22 -2
- package/dist/esm/errors.js +99 -17
- package/dist/esm/execution/branch.d.ts +19 -1
- package/dist/esm/execution/branch.js +20 -4
- package/dist/esm/execution/engine.d.ts +291 -5
- package/dist/esm/execution/engine.js +471 -57
- package/dist/esm/execution/events.d.ts +16 -2
- package/dist/esm/execution/events.js +136 -18
- package/dist/esm/execution/index.d.ts +7 -0
- package/dist/esm/execution/index.js +7 -0
- package/dist/esm/execution/reporting.d.ts +49 -1
- package/dist/esm/execution/reporting.js +75 -6
- package/dist/esm/execution/state.d.ts +126 -10
- package/dist/esm/execution/state.js +161 -22
- package/dist/esm/execution/workflow.d.ts +121 -3
- package/dist/esm/execution/workflow.js +224 -32
- package/dist/esm/index.d.ts +17 -1
- package/dist/esm/index.js +18 -0
- package/dist/esm/kits/aggregation.d.ts +34 -2
- package/dist/esm/kits/aggregation.js +45 -3
- package/dist/esm/kits/answering/batch.d.ts +17 -0
- package/dist/esm/kits/answering/batch.js +23 -4
- package/dist/esm/kits/answering/check-result.d.ts +18 -1
- package/dist/esm/kits/answering/check-result.js +31 -8
- package/dist/esm/kits/answering/checks.d.ts +11 -0
- package/dist/esm/kits/answering/checks.js +24 -3
- package/dist/esm/kits/answering/flow.d.ts +25 -2
- package/dist/esm/kits/answering/flow.js +192 -36
- package/dist/esm/kits/answering/index.d.ts +12 -0
- package/dist/esm/kits/answering/index.js +19 -1
- package/dist/esm/kits/answering/tasks.d.ts +32 -1
- package/dist/esm/kits/answering/tasks.js +88 -13
- package/dist/esm/kits/artifacts.d.ts +11 -0
- package/dist/esm/kits/artifacts.js +36 -4
- package/dist/esm/kits/candidates.d.ts +23 -1
- package/dist/esm/kits/candidates.js +47 -5
- package/dist/esm/kits/delivery.d.ts +34 -0
- package/dist/esm/kits/delivery.js +40 -5
- package/dist/esm/kits/durable.d.ts +19 -0
- package/dist/esm/kits/durable.js +155 -31
- package/dist/esm/kits/evidence.d.ts +28 -5
- package/dist/esm/kits/evidence.js +66 -15
- package/dist/esm/kits/family.d.ts +17 -1
- package/dist/esm/kits/family.js +152 -22
- package/dist/esm/kits/index.d.ts +12 -1
- package/dist/esm/kits/index.js +12 -1
- package/dist/esm/kits/inference.d.ts +64 -0
- package/dist/esm/kits/inference.js +104 -16
- package/dist/esm/kits/intents/catalog.d.ts +13 -1
- package/dist/esm/kits/intents/catalog.js +67 -16
- package/dist/esm/kits/intents/index.d.ts +11 -0
- package/dist/esm/kits/intents/index.js +11 -0
- package/dist/esm/kits/intents/registry.d.ts +61 -3
- package/dist/esm/kits/intents/registry.js +188 -43
- package/dist/esm/kits/intents/scopes.d.ts +73 -3
- package/dist/esm/kits/intents/scopes.js +215 -46
- package/dist/esm/kits/interaction/command.d.ts +38 -4
- package/dist/esm/kits/interaction/command.js +140 -36
- package/dist/esm/kits/interaction/commands.d.ts +66 -2
- package/dist/esm/kits/interaction/commands.js +86 -11
- package/dist/esm/kits/interaction/handlers.d.ts +19 -2
- package/dist/esm/kits/interaction/handlers.js +27 -10
- package/dist/esm/kits/interaction/index.d.ts +10 -0
- package/dist/esm/kits/interaction/index.js +10 -0
- package/dist/esm/kits/interaction/transfer.d.ts +39 -2
- package/dist/esm/kits/interaction/transfer.js +80 -14
- package/dist/esm/kits/knowledge/catalog.d.ts +13 -0
- package/dist/esm/kits/knowledge/catalog.js +62 -11
- package/dist/esm/kits/knowledge/index.d.ts +11 -0
- package/dist/esm/kits/knowledge/index.js +16 -1
- package/dist/esm/kits/knowledge/publication.d.ts +15 -1
- package/dist/esm/kits/knowledge/publication.js +99 -23
- package/dist/esm/kits/knowledge/sections.d.ts +31 -1
- package/dist/esm/kits/knowledge/sections.js +33 -4
- package/dist/esm/kits/normalization.d.ts +25 -2
- package/dist/esm/kits/normalization.js +51 -7
- package/dist/esm/kits/policies.d.ts +26 -3
- package/dist/esm/kits/policies.js +79 -15
- package/dist/esm/kits/presentation/events.d.ts +51 -4
- package/dist/esm/kits/presentation/events.js +54 -10
- package/dist/esm/kits/presentation/index.d.ts +12 -0
- package/dist/esm/kits/presentation/index.js +25 -2
- package/dist/esm/kits/presentation/outputs.d.ts +30 -1
- package/dist/esm/kits/presentation/outputs.js +176 -38
- package/dist/esm/kits/presentation/templates.d.ts +32 -3
- package/dist/esm/kits/presentation/templates.js +33 -5
- package/dist/esm/kits/presentation/variants.d.ts +29 -0
- package/dist/esm/kits/presentation/variants.js +31 -2
- package/dist/esm/kits/projection.d.ts +42 -5
- package/dist/esm/kits/projection.js +63 -8
- package/dist/esm/kits/rank-fusion.d.ts +21 -1
- package/dist/esm/kits/rank-fusion.js +28 -5
- package/dist/esm/kits/reflection-log-source.d.ts +28 -1
- package/dist/esm/kits/reflection-log-source.js +89 -16
- package/dist/esm/kits/reflection.d.ts +17 -1
- package/dist/esm/kits/reflection.js +235 -61
- package/dist/esm/kits/retrieval.d.ts +18 -2
- package/dist/esm/kits/retrieval.js +98 -18
- package/dist/esm/kits/search.d.ts +56 -3
- package/dist/esm/kits/search.js +180 -27
- package/dist/esm/kits/text-skills.d.ts +16 -2
- package/dist/esm/kits/text-skills.js +104 -19
- package/dist/esm/kits/tools.d.ts +122 -2
- package/dist/esm/kits/tools.js +416 -74
- package/dist/esm/kits/vector-search.d.ts +47 -1
- package/dist/esm/kits/vector-search.js +51 -17
- package/dist/esm/mock/node.d.ts +7 -0
- package/dist/esm/mock/node.js +7 -1
- package/dist/esm/mock/web.d.ts +7 -0
- package/dist/esm/mock/web.js +7 -1
- package/dist/esm/mock.d.ts +7 -0
- package/dist/esm/mock.js +7 -1
- package/dist/esm/model/binding.d.ts +32 -3
- package/dist/esm/model/binding.js +68 -17
- package/dist/esm/model/call-budget.d.ts +30 -2
- package/dist/esm/model/call-budget.js +45 -4
- package/dist/esm/model/decision-retry.d.ts +10 -1
- package/dist/esm/model/decision-retry.js +19 -1
- package/dist/esm/model/defaults.d.ts +13 -2
- package/dist/esm/model/defaults.js +27 -4
- package/dist/esm/model/index.d.ts +7 -0
- package/dist/esm/model/index.js +7 -0
- package/dist/esm/model/interactions/arguments.d.ts +27 -0
- package/dist/esm/model/interactions/arguments.js +36 -1
- package/dist/esm/model/interactions/json-object.d.ts +7 -1
- package/dist/esm/model/interactions/json-object.js +48 -12
- package/dist/esm/model/interactions/native-functions.d.ts +6 -0
- package/dist/esm/model/interactions/native-functions.js +52 -10
- package/dist/esm/model/message-diagnostics.d.ts +17 -1
- package/dist/esm/model/message-diagnostics.js +17 -4
- package/dist/esm/model/options.d.ts +18 -1
- package/dist/esm/model/options.js +9 -1
- package/dist/esm/model/preparation.d.ts +30 -2
- package/dist/esm/model/preparation.js +86 -12
- package/dist/esm/model/runner.d.ts +129 -5
- package/dist/esm/model/runner.js +414 -80
- package/dist/esm/model/selection-transport.d.ts +14 -1
- package/dist/esm/model/selection-transport.js +48 -8
- package/dist/esm/model/settings.d.ts +11 -0
- package/dist/esm/model/settings.js +67 -13
- package/dist/esm/model/token-budget.d.ts +59 -1
- package/dist/esm/model/token-budget.js +69 -11
- package/dist/esm/model/transports.d.ts +20 -2
- package/dist/esm/model/transports.js +59 -6
- package/dist/esm/structs/capabilities/invocation.d.ts +36 -0
- package/dist/esm/structs/capabilities/model.d.ts +27 -0
- package/dist/esm/structs/capabilities/tools.d.ts +38 -0
- package/dist/esm/structs/common.d.ts +62 -2
- package/dist/esm/structs/common.js +11 -0
- package/dist/esm/structs/context/fragments.d.ts +28 -0
- package/dist/esm/structs/context/journal.d.ts +28 -3
- package/dist/esm/structs/context/processing.d.ts +11 -0
- package/dist/esm/structs/debug.d.ts +58 -1
- package/dist/esm/structs/debug.js +34 -5
- package/dist/esm/structs/diagnostics.d.ts +119 -1
- package/dist/esm/structs/errors.d.ts +42 -1
- package/dist/esm/structs/errors.js +26 -1
- package/dist/esm/structs/execution/engine.d.ts +24 -1
- package/dist/esm/structs/execution/events.d.ts +12 -0
- package/dist/esm/structs/execution/workflow.d.ts +71 -0
- package/dist/esm/structs/index.d.ts +11 -1
- package/dist/esm/structs/index.js +11 -1
- package/dist/esm/structs/invocation.d.ts +30 -0
- package/dist/esm/structs/kits/aggregation.d.ts +12 -0
- package/dist/esm/structs/kits/answering/checks.d.ts +11 -0
- package/dist/esm/structs/kits/answering/flow.d.ts +35 -1
- package/dist/esm/structs/kits/answering/state.d.ts +21 -0
- package/dist/esm/structs/kits/answering/tasks.d.ts +21 -0
- package/dist/esm/structs/kits/artifacts.d.ts +14 -0
- package/dist/esm/structs/kits/candidates.d.ts +19 -0
- package/dist/esm/structs/kits/delivery.d.ts +22 -0
- package/dist/esm/structs/kits/durable.d.ts +56 -3
- package/dist/esm/structs/kits/durable.js +7 -0
- package/dist/esm/structs/kits/evidence.d.ts +23 -0
- package/dist/esm/structs/kits/family.d.ts +49 -1
- package/dist/esm/structs/kits/family.js +1 -0
- package/dist/esm/structs/kits/intents/catalog.d.ts +26 -0
- package/dist/esm/structs/kits/intents/registry.d.ts +34 -0
- package/dist/esm/structs/kits/intents/scopes.d.ts +36 -1
- package/dist/esm/structs/kits/interaction.d.ts +64 -0
- package/dist/esm/structs/kits/interaction.js +8 -1
- package/dist/esm/structs/kits/knowledge-publication.d.ts +43 -1
- package/dist/esm/structs/kits/knowledge-publication.js +1 -0
- package/dist/esm/structs/kits/knowledge.d.ts +39 -2
- package/dist/esm/structs/kits/normalization.d.ts +15 -0
- package/dist/esm/structs/kits/policies.d.ts +25 -1
- package/dist/esm/structs/kits/presentation/events.d.ts +28 -4
- package/dist/esm/structs/kits/presentation/outputs.d.ts +38 -1
- package/dist/esm/structs/kits/presentation/templates.d.ts +15 -0
- package/dist/esm/structs/kits/projection.d.ts +21 -0
- package/dist/esm/structs/kits/reflection.d.ts +61 -2
- package/dist/esm/structs/kits/reflection.js +18 -3
- package/dist/esm/structs/kits/retrieval.d.ts +39 -0
- package/dist/esm/structs/kits/search.d.ts +24 -0
- package/dist/esm/structs/kits/text-skills.d.ts +36 -0
- package/dist/esm/structs/kits/tools.d.ts +87 -0
- package/dist/esm/structs/model/chat-provider.d.ts +24 -1
- package/dist/esm/structs/model/chat-provider.js +6 -0
- package/dist/esm/structs/model/interactions.d.ts +38 -0
- package/dist/esm/structs/model/messages.d.ts +34 -0
- package/dist/esm/structs/model/runtime.d.ts +104 -6
- package/dist/esm/structs/support/capabilities.d.ts +19 -2
- package/dist/esm/structs/support/context-processing.d.ts +88 -9
- package/dist/esm/structs/support/context.d.ts +29 -1
- package/dist/esm/structs/support/model/completion.d.ts +50 -0
- package/dist/esm/structs/support/model/completion.js +1 -0
- package/dist/esm/structs/support/model/interactions.d.ts +13 -1
- package/dist/esm/structs/support/model/messages.d.ts +54 -0
- package/dist/esm/structs/support/model/messages.js +1 -0
- package/dist/esm/structs/support/model/provider-observer.d.ts +22 -1
- package/dist/esm/structs/support/model/provider.d.ts +71 -6
- package/dist/esm/structs/support/registration.d.ts +13 -0
- package/dist/esm/structs/support/schema.d.ts +14 -0
- package/dist/esm/structs/support/tools.d.ts +28 -0
- package/dist/esm/structs/support/transport/json.d.ts +16 -0
- package/dist/esm/structs/support/transport/sse.d.ts +15 -0
- package/dist/esm/structs/utils/rules.d.ts +19 -0
- package/dist/esm/support/capabilities.d.ts +25 -2
- package/dist/esm/support/capabilities.js +43 -6
- package/dist/esm/support/context/assembly.d.ts +35 -4
- package/dist/esm/support/context/assembly.js +88 -16
- package/dist/esm/support/context/compression.d.ts +17 -1
- package/dist/esm/support/context/compression.js +48 -6
- package/dist/esm/support/context/fragments.d.ts +6 -0
- package/dist/esm/support/context/fragments.js +6 -0
- package/dist/esm/support/context/history.d.ts +43 -0
- package/dist/esm/support/context/history.js +36 -1
- package/dist/esm/support/context/index.d.ts +13 -2
- package/dist/esm/support/context/index.js +12 -1
- package/dist/esm/support/context/nodes.d.ts +65 -3
- package/dist/esm/support/context/nodes.js +165 -36
- package/dist/esm/support/context/processing.d.ts +152 -1
- package/dist/esm/support/context/processing.js +320 -62
- package/dist/esm/support/context/selection-policy.d.ts +42 -2
- package/dist/esm/support/context/selection-policy.js +98 -21
- package/dist/esm/support/context/selection.d.ts +14 -1
- package/dist/esm/support/context/selection.js +61 -10
- package/dist/esm/support/context/snapshot.d.ts +23 -1
- package/dist/esm/support/context/snapshot.js +29 -7
- package/dist/esm/support/context/strategies.d.ts +35 -2
- package/dist/esm/support/context/strategies.js +120 -28
- package/dist/esm/support/index.d.ts +9 -1
- package/dist/esm/support/index.js +9 -1
- package/dist/esm/support/model/capabilities.d.ts +10 -0
- package/dist/esm/support/model/capabilities.js +20 -1
- package/dist/esm/support/model/chat-completions.d.ts +44 -15
- package/dist/esm/support/model/chat-completions.js +92 -20
- package/dist/esm/support/model/children.d.ts +34 -2
- package/dist/esm/support/model/children.js +34 -6
- package/dist/esm/support/model/compatible-provider.d.ts +29 -3
- package/dist/esm/support/model/compatible-provider.js +190 -60
- package/dist/esm/support/model/completion/calls.d.ts +40 -0
- package/dist/esm/support/model/completion/calls.js +58 -0
- package/dist/esm/support/model/completion/default.d.ts +11 -0
- package/dist/esm/support/model/completion/default.js +30 -0
- package/dist/esm/support/model/completion/index.d.ts +10 -0
- package/dist/esm/support/model/completion/index.js +22 -0
- package/dist/esm/support/model/completion/session.d.ts +16 -0
- package/dist/esm/support/model/completion/session.js +104 -0
- package/dist/esm/support/model/index.d.ts +14 -0
- package/dist/esm/support/model/index.js +12 -0
- package/dist/esm/support/model/interactions/index.d.ts +1 -1
- package/dist/esm/support/model/interactions/index.js +12 -1
- package/dist/esm/support/model/interactions/json-object.d.ts +6 -0
- package/dist/esm/support/model/interactions/json-object.js +6 -0
- package/dist/esm/support/model/interactions/native-functions.d.ts +6 -0
- package/dist/esm/support/model/interactions/native-functions.js +6 -0
- package/dist/esm/support/model/observer.d.ts +25 -2
- package/dist/esm/support/model/observer.js +32 -6
- package/dist/esm/support/model/preview-rules.d.ts +26 -2
- package/dist/esm/support/model/preview-rules.js +66 -16
- package/dist/esm/support/model/reply-preview.d.ts +22 -1
- package/dist/esm/support/model/reply-preview.js +77 -17
- package/dist/esm/support/model/stage-transport.d.ts +9 -1
- package/dist/esm/support/model/stage-transport.js +33 -7
- package/dist/esm/support/model/strategies.d.ts +28 -2
- package/dist/esm/support/model/strategies.js +75 -14
- package/dist/esm/support/model/transports.d.ts +17 -1
- package/dist/esm/support/model/transports.js +53 -11
- package/dist/esm/support/registration.d.ts +20 -1
- package/dist/esm/support/registration.js +49 -7
- package/dist/esm/support/schema.d.ts +31 -1
- package/dist/esm/support/schema.js +46 -4
- package/dist/esm/support/stream-events.d.ts +22 -1
- package/dist/esm/support/stream-events.js +60 -8
- package/dist/esm/support/tool-runtime.d.ts +6 -0
- package/dist/esm/support/tool-runtime.js +6 -0
- package/dist/esm/support/tools.d.ts +22 -0
- package/dist/esm/support/tools.js +79 -10
- package/dist/esm/support/transport/index.d.ts +7 -0
- package/dist/esm/support/transport/index.js +7 -0
- package/dist/esm/support/transport/json.d.ts +29 -2
- package/dist/esm/support/transport/json.js +28 -4
- package/dist/esm/support/transport/sse.d.ts +31 -1
- package/dist/esm/support/transport/sse.js +25 -2
- package/dist/esm/types.d.ts +9 -1
- package/dist/esm/utils/break-observer.d.ts +27 -2
- package/dist/esm/utils/break-observer.js +20 -2
- package/dist/esm/utils/cancellation.d.ts +56 -5
- package/dist/esm/utils/cancellation.js +77 -9
- package/dist/esm/utils/catalog.d.ts +20 -1
- package/dist/esm/utils/catalog.js +19 -4
- package/dist/esm/utils/debug.d.ts +20 -1
- package/dist/esm/utils/debug.js +14 -2
- package/dist/esm/utils/index.d.ts +8 -0
- package/dist/esm/utils/index.js +8 -0
- package/dist/esm/utils/interaction-definition.d.ts +18 -1
- package/dist/esm/utils/interaction-definition.js +26 -6
- package/dist/esm/utils/invocation.d.ts +36 -1
- package/dist/esm/utils/invocation.js +42 -4
- package/dist/esm/utils/model-protocol.d.ts +8 -0
- package/dist/esm/utils/model-protocol.js +20 -1
- package/dist/esm/utils/object.d.ts +16 -0
- package/dist/esm/utils/object.js +16 -0
- package/dist/esm/utils/observer.d.ts +19 -1
- package/dist/esm/utils/observer.js +22 -2
- package/dist/esm/utils/protocol-registry.d.ts +38 -1
- package/dist/esm/utils/protocol-registry.js +47 -4
- package/dist/esm/utils/query-key.d.ts +11 -1
- package/dist/esm/utils/query-key.js +21 -2
- package/dist/esm/utils/registration.d.ts +34 -2
- package/dist/esm/utils/registration.js +18 -2
- package/dist/esm/utils/rules.d.ts +81 -4
- package/dist/esm/utils/rules.js +39 -11
- package/dist/esm/utils/schema-adapter.d.ts +12 -1
- package/dist/esm/utils/schema-adapter.js +25 -2
- package/dist/esm/utils/synchronous.d.ts +60 -4
- package/dist/esm/utils/synchronous.js +64 -7
- package/dist/esm/utils/text.d.ts +15 -1
- package/dist/esm/utils/text.js +15 -1
- package/package.json +7 -3
|
@@ -3,21 +3,53 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Delivery = void 0;
|
|
4
4
|
exports.defineDelivery = defineDelivery;
|
|
5
5
|
const synchronous_js_1 = require("../utils/synchronous.js");
|
|
6
|
+
/**
|
|
7
|
+
* Compile a delivery pipeline from its declared stages.
|
|
8
|
+
*
|
|
9
|
+
* Stages are registered once, in declaration order, and must have unique non-blank ids. A
|
|
10
|
+
* stage without a `handle` is a named hook only, so `beforeStage` can observe it.
|
|
11
|
+
*
|
|
12
|
+
* @param options - Stage list, state factory, optional pre-stage hook and the error factory
|
|
13
|
+
* used when every stage chose `continue`.
|
|
14
|
+
* @returns A frozen plan exposing the stage ids and `deliver(input, execution)`.
|
|
15
|
+
* @throws TypeError At construction for duplicate/blank ids or a non-function handler; from
|
|
16
|
+
* `deliver` when any handler returns a thenable, when a stage outcome is neither `continue`
|
|
17
|
+
* nor `complete`, or when `complete` carries no value.
|
|
18
|
+
*/
|
|
6
19
|
function defineDelivery(options) {
|
|
7
20
|
const ids = new Set();
|
|
8
|
-
const stages = options.stages.map(stage => {
|
|
21
|
+
const stages = options.stages.map((stage) => {
|
|
9
22
|
const { id } = stage;
|
|
10
|
-
if (!id?.trim() ||
|
|
23
|
+
if (!id?.trim() ||
|
|
24
|
+
ids.has(id) ||
|
|
25
|
+
(stage.handle !== undefined && typeof stage.handle !== 'function'))
|
|
11
26
|
throw new TypeError('Invalid or duplicate delivery stage');
|
|
12
27
|
ids.add(id);
|
|
13
28
|
return Object.freeze({ id, handle: stage.handle?.bind(stage) });
|
|
14
29
|
});
|
|
15
30
|
const createState = options.createState.bind(options), beforeStage = options.beforeStage?.bind(options), missingResult = options.missingResult.bind(options);
|
|
16
|
-
return Object.freeze({
|
|
31
|
+
return Object.freeze({
|
|
32
|
+
stages: Object.freeze(stages.map((stage) => ({ id: stage.id }))),
|
|
33
|
+
/**
|
|
34
|
+
* Build the state and run the stages in order.
|
|
35
|
+
*
|
|
36
|
+
* The first `complete` outcome ends the pipeline and returns its value; if none completes,
|
|
37
|
+
* `missingResult` supplies the error.
|
|
38
|
+
*
|
|
39
|
+
* @param input - Host input; it is exposed to stages as `context.app`.
|
|
40
|
+
* @param execution - Execution context; cancellation is checked before every hook.
|
|
41
|
+
* @throws The configured error when no stage completes, or a `TypeError` for invalid
|
|
42
|
+
* handler results.
|
|
43
|
+
*/
|
|
17
44
|
deliver(input, execution) {
|
|
18
45
|
execution.signal.throwIfAborted();
|
|
19
46
|
const state = (0, synchronous_js_1.synchronous)(createState(input, execution), 'Delivery state creation must be synchronous');
|
|
20
|
-
const context = {
|
|
47
|
+
const context = {
|
|
48
|
+
...execution,
|
|
49
|
+
signal: execution.signal,
|
|
50
|
+
diagnostics: execution.diagnostics,
|
|
51
|
+
app: input,
|
|
52
|
+
};
|
|
21
53
|
for (const stage of stages) {
|
|
22
54
|
execution.signal.throwIfAborted();
|
|
23
55
|
(0, synchronous_js_1.synchronous)(beforeStage?.({ stageId: stage.id, state }, context), 'Delivery hooks must be synchronous');
|
|
@@ -26,7 +58,9 @@ function defineDelivery(options) {
|
|
|
26
58
|
continue;
|
|
27
59
|
const outcome = (0, synchronous_js_1.synchronous)(stage.handle(state, context), 'Delivery handlers must be synchronous');
|
|
28
60
|
execution.signal.throwIfAborted();
|
|
29
|
-
if (!outcome ||
|
|
61
|
+
if (!outcome ||
|
|
62
|
+
!['continue', 'complete'].includes(outcome.type) ||
|
|
63
|
+
(outcome.type === 'complete' && !('value' in outcome)))
|
|
30
64
|
throw new TypeError('Delivery handlers require explicit continue/complete');
|
|
31
65
|
if (outcome.type === 'complete') {
|
|
32
66
|
const value = outcome.value;
|
|
@@ -38,4 +72,5 @@ function defineDelivery(options) {
|
|
|
38
72
|
},
|
|
39
73
|
});
|
|
40
74
|
}
|
|
75
|
+
/** Namespace object for callers that prefer one import over named helpers. */
|
|
41
76
|
exports.Delivery = Object.freeze({ defineDelivery });
|
package/dist/cjs/kits/durable.js
CHANGED
|
@@ -2,42 +2,102 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.durableReplayPolicies = exports.durableStatuses = exports.Durable = void 0;
|
|
4
4
|
exports.defineDurableTask = defineDurableTask;
|
|
5
|
+
/**
|
|
6
|
+
* Durable Kit: replay-safe sequential task execution on top of an App-owned checkpoint store.
|
|
7
|
+
*
|
|
8
|
+
* Place in the package: an optional App-side library for work that must survive a restart.
|
|
9
|
+
* The Kit owns step ordering, attempt and model-call accounting, deadline checks, checkpoint
|
|
10
|
+
* validation and the exclusive-store protocol; the store, its atomicity and the real side
|
|
11
|
+
* effects stay with the App. Core itself never imports this module.
|
|
12
|
+
*
|
|
13
|
+
* Exports: `defineDurableTask`, `Durable`, the checkpoint/step/store types, and the
|
|
14
|
+
* `durableStatuses` / `durableReplayPolicies` enumerations.
|
|
15
|
+
*/
|
|
5
16
|
const synchronous_js_1 = require("../utils/synchronous.js");
|
|
6
17
|
const cancellation_js_1 = require("../utils/cancellation.js");
|
|
7
18
|
const durable_js_1 = require("../structs/kits/durable.js");
|
|
8
19
|
const engine_js_1 = require("../execution/engine.js");
|
|
20
|
+
/**
|
|
21
|
+
* Compile a durable task definition into a resumable runner.
|
|
22
|
+
*
|
|
23
|
+
* Each `run` call locks the task id in the store, loads the checkpoint and resumes at
|
|
24
|
+
* `nextStepIndex`. A checkpoint from another definition id or revision, or one that fails the
|
|
25
|
+
* predicates below, is rejected instead of being repaired, because silently accepting it would
|
|
26
|
+
* replay App side effects under a different contract.
|
|
27
|
+
*
|
|
28
|
+
* @param definition - Task identity, state predicate, ordered steps and optional authorization.
|
|
29
|
+
* @param options - Fallback store plus optional clock; both are bound to their owners.
|
|
30
|
+
* @returns A frozen task with `run({ taskId, store? }, context)`.
|
|
31
|
+
* @throws TypeError At construction for an invalid identity, step list, replay policy or
|
|
32
|
+
* duplicate step id; from `run` for a malformed request/context/store, an invalid
|
|
33
|
+
* checkpoint, or a step whose returned state fails the predicate. Also throws when the
|
|
34
|
+
* deadline passed, the attempt budget is exhausted, or the model-call budget cannot fund
|
|
35
|
+
* one more attempt.
|
|
36
|
+
*/
|
|
9
37
|
function defineDurableTask(definition, options = {}) {
|
|
10
38
|
if (!definition || typeof definition !== 'object')
|
|
11
39
|
throw new TypeError('Use isState and replayPolicy');
|
|
12
40
|
const { id: definitionId, revision, steps: definitions, isState } = definition;
|
|
13
41
|
const clock = options.now;
|
|
14
|
-
if (typeof definitionId !== 'string' ||
|
|
15
|
-
|
|
16
|
-
|
|
42
|
+
if (typeof definitionId !== 'string' ||
|
|
43
|
+
!definitionId.trim() ||
|
|
44
|
+
typeof revision !== 'string' ||
|
|
45
|
+
!revision.trim() ||
|
|
46
|
+
typeof isState !== 'function' ||
|
|
47
|
+
!Array.isArray(definitions) ||
|
|
48
|
+
!definitions.length ||
|
|
49
|
+
(clock !== undefined && typeof clock !== 'function'))
|
|
17
50
|
throw new TypeError('Invalid durable task');
|
|
18
51
|
const now = clock?.bind(options) ?? Date.now, validate = isState.bind(definition);
|
|
19
52
|
const authorize = definition.authorize?.bind(definition);
|
|
20
|
-
const boundStore = options.store && {
|
|
53
|
+
const boundStore = options.store && {
|
|
54
|
+
exclusive: options.store.exclusive.bind(options.store),
|
|
55
|
+
load: options.store.load.bind(options.store),
|
|
56
|
+
save: options.store.save.bind(options.store),
|
|
57
|
+
};
|
|
21
58
|
const steps = Object.freeze(definitions.map((step) => {
|
|
22
59
|
if (!step || typeof step !== 'object')
|
|
23
60
|
throw new TypeError('Use replayPolicy and OperationContext');
|
|
24
61
|
const { id, replayPolicy, run, reconcile } = step;
|
|
25
|
-
if (typeof id !== 'string' ||
|
|
26
|
-
|
|
62
|
+
if (typeof id !== 'string' ||
|
|
63
|
+
!id.trim() ||
|
|
64
|
+
!durable_js_1.durableReplayPolicies.includes(replayPolicy) ||
|
|
65
|
+
typeof run !== 'function' ||
|
|
66
|
+
(reconcile !== undefined && typeof reconcile !== 'function'))
|
|
27
67
|
throw new TypeError('Invalid durable step');
|
|
28
|
-
return Object.freeze({
|
|
68
|
+
return Object.freeze({
|
|
69
|
+
id,
|
|
70
|
+
replayPolicy,
|
|
71
|
+
run: run.bind(step),
|
|
72
|
+
reconcile: reconcile?.bind(step),
|
|
73
|
+
});
|
|
29
74
|
}));
|
|
30
|
-
if (new Set(steps.map(step => step.id)).size !== steps.length)
|
|
75
|
+
if (new Set(steps.map((step) => step.id)).size !== steps.length)
|
|
31
76
|
throw new TypeError('Duplicate durable step id');
|
|
32
77
|
return Object.freeze({
|
|
78
|
+
/**
|
|
79
|
+
* Resume or start one durable task.
|
|
80
|
+
*
|
|
81
|
+
* @param request - Task id plus an optional per-call store that overrides the bound one.
|
|
82
|
+
* @param context - Operation context supplying app, signal and diagnostics.
|
|
83
|
+
* @returns The final state, cloned so the caller cannot mutate the stored checkpoint.
|
|
84
|
+
* @throws As described for `defineDurableTask`; an already-completed task returns its state
|
|
85
|
+
* without running any step.
|
|
86
|
+
*/
|
|
33
87
|
async run(request, context) {
|
|
34
|
-
if (!request ||
|
|
88
|
+
if (!request ||
|
|
89
|
+
typeof request !== 'object' ||
|
|
90
|
+
typeof request.taskId !== 'string' ||
|
|
91
|
+
!request.taskId.trim())
|
|
35
92
|
throw new TypeError('Use a named durable task request');
|
|
36
93
|
if (!context?.signal)
|
|
37
94
|
throw new TypeError('Durable tasks require OperationContext');
|
|
38
95
|
const { taskId } = request, store = request.store ?? boundStore, { app, signal, diagnostics } = context;
|
|
39
96
|
signal.throwIfAborted();
|
|
40
|
-
if (!store ||
|
|
97
|
+
if (!store ||
|
|
98
|
+
typeof store.exclusive !== 'function' ||
|
|
99
|
+
typeof store.load !== 'function' ||
|
|
100
|
+
typeof store.save !== 'function')
|
|
41
101
|
throw new TypeError('Invalid durable store');
|
|
42
102
|
const exclusive = store.exclusive.bind(store), load = store.load.bind(store), save = store.save.bind(store);
|
|
43
103
|
signal.throwIfAborted();
|
|
@@ -48,24 +108,42 @@ function defineDurableTask(definition, options = {}) {
|
|
|
48
108
|
if (!loaded)
|
|
49
109
|
throw new TypeError('Invalid durable checkpoint');
|
|
50
110
|
let record = snapshotCheckpoint(loaded);
|
|
51
|
-
if (record.definitionId !== definitionId ||
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
111
|
+
if (record.definitionId !== definitionId ||
|
|
112
|
+
record.revision !== revision ||
|
|
113
|
+
!(0, synchronous_js_1.booleanResult)(validate(record.state), 'Durable state predicates must return boolean synchronously') ||
|
|
114
|
+
!Number.isSafeInteger(record.nextStepIndex) ||
|
|
115
|
+
record.nextStepIndex < 0 ||
|
|
116
|
+
record.nextStepIndex > steps.length ||
|
|
117
|
+
!Number.isSafeInteger(record.attemptCount) ||
|
|
118
|
+
record.attemptCount < 0 ||
|
|
119
|
+
!Number.isSafeInteger(record.maxAttempts) ||
|
|
120
|
+
record.maxAttempts < 1 ||
|
|
121
|
+
record.attemptCount > record.maxAttempts ||
|
|
122
|
+
record.attemptCount < record.nextStepIndex ||
|
|
123
|
+
!Number.isFinite(record.deadlineAtMs) ||
|
|
124
|
+
!durable_js_1.durableStatuses.includes(record.status) ||
|
|
125
|
+
(record.status === 'completed') !== (record.nextStepIndex === steps.length))
|
|
57
126
|
throw new TypeError('Invalid durable checkpoint');
|
|
58
127
|
const deadline = record.deadlineAtMs;
|
|
59
128
|
assertActive(signal, deadline, now);
|
|
60
129
|
if (record.modelBudget) {
|
|
61
130
|
const { maxCalls, reservedCalls, maxCallsPerAttempt } = record.modelBudget;
|
|
62
|
-
if (!Number.isSafeInteger(maxCalls) ||
|
|
63
|
-
|
|
131
|
+
if (!Number.isSafeInteger(maxCalls) ||
|
|
132
|
+
maxCalls < 1 ||
|
|
133
|
+
!Number.isSafeInteger(reservedCalls) ||
|
|
134
|
+
reservedCalls < 0 ||
|
|
135
|
+
reservedCalls > maxCalls ||
|
|
136
|
+
!Number.isSafeInteger(maxCallsPerAttempt) ||
|
|
137
|
+
maxCallsPerAttempt < 1 ||
|
|
138
|
+
maxCallsPerAttempt > maxCalls)
|
|
64
139
|
throw new TypeError('Invalid durable model budget');
|
|
65
140
|
}
|
|
66
141
|
const lifetime = (0, cancellation_js_1.createDeadlineSignal)(deadline, signal, now), activeSignal = lifetime.signal;
|
|
67
142
|
let saving;
|
|
68
|
-
const persist = async () => {
|
|
143
|
+
const persist = async () => {
|
|
144
|
+
saving = save(taskId, record);
|
|
145
|
+
await saving;
|
|
146
|
+
};
|
|
69
147
|
try {
|
|
70
148
|
if (authorize)
|
|
71
149
|
await (0, cancellation_js_1.awaitAssertion)(() => authorize(snapshotCheckpoint(record), { app, signal: activeSignal, diagnostics }), activeSignal, 'Durable authorization must return void');
|
|
@@ -77,7 +155,10 @@ function defineDurableTask(definition, options = {}) {
|
|
|
77
155
|
}
|
|
78
156
|
if (record.status === 'cancelled')
|
|
79
157
|
throw new Error('Durable task cancelled');
|
|
80
|
-
const engine = new engine_js_1.AgentCoreEngine({
|
|
158
|
+
const engine = new engine_js_1.AgentCoreEngine({
|
|
159
|
+
maxRounds: Math.max(1, record.maxAttempts - record.attemptCount),
|
|
160
|
+
execution: { signal: activeSignal, diagnostics },
|
|
161
|
+
});
|
|
81
162
|
return await engine.run(async (_index, execution) => {
|
|
82
163
|
assertActive(activeSignal, deadline, now);
|
|
83
164
|
if (record.attemptCount >= record.maxAttempts)
|
|
@@ -86,25 +167,46 @@ function defineDurableTask(definition, options = {}) {
|
|
|
86
167
|
if (interrupted && step.replayPolicy === 'reconcile' && !step.reconcile)
|
|
87
168
|
throw new Error('Durable task reconciliation required');
|
|
88
169
|
const modelBudget = record.modelBudget;
|
|
89
|
-
if (modelBudget &&
|
|
170
|
+
if (modelBudget &&
|
|
171
|
+
modelBudget.maxCalls - modelBudget.reservedCalls < modelBudget.maxCallsPerAttempt)
|
|
90
172
|
throw new Error('Durable model budget exhausted');
|
|
91
|
-
record = {
|
|
92
|
-
...
|
|
173
|
+
record = {
|
|
174
|
+
...record,
|
|
175
|
+
attemptCount: record.attemptCount + 1,
|
|
176
|
+
status: 'running',
|
|
177
|
+
...(modelBudget
|
|
178
|
+
? {
|
|
179
|
+
modelBudget: {
|
|
180
|
+
...modelBudget,
|
|
181
|
+
reservedCalls: modelBudget.reservedCalls + modelBudget.maxCallsPerAttempt,
|
|
182
|
+
},
|
|
183
|
+
}
|
|
184
|
+
: {}),
|
|
185
|
+
};
|
|
93
186
|
// Await every save under the lock; cancellation cannot undo an in-flight commit.
|
|
94
187
|
await persist();
|
|
95
188
|
assertActive(activeSignal, deadline, now);
|
|
96
189
|
const local = structuredClone(record.state);
|
|
97
190
|
assertActive(activeSignal, deadline, now);
|
|
98
191
|
const handle = interrupted && step.replayPolicy === 'reconcile' ? step.reconcile : step.run;
|
|
99
|
-
const nextState = await (0, cancellation_js_1.awaitWithSignal)(handle(local, {
|
|
100
|
-
|
|
192
|
+
const nextState = await (0, cancellation_js_1.awaitWithSignal)(handle(local, {
|
|
193
|
+
app,
|
|
194
|
+
signal: execution.signal,
|
|
195
|
+
diagnostics: execution.diagnostics,
|
|
196
|
+
attemptCount: record.attemptCount,
|
|
197
|
+
maxModelCalls: record.modelBudget?.maxCallsPerAttempt,
|
|
198
|
+
}), activeSignal);
|
|
101
199
|
assertActive(activeSignal, deadline, now);
|
|
102
200
|
if (!(0, synchronous_js_1.booleanResult)(validate(nextState), 'Durable state predicates must return boolean synchronously'))
|
|
103
201
|
throw new TypeError('Invalid durable step state');
|
|
104
202
|
const state = structuredClone(nextState);
|
|
105
203
|
assertActive(activeSignal, deadline, now);
|
|
106
|
-
record = {
|
|
107
|
-
|
|
204
|
+
record = {
|
|
205
|
+
...record,
|
|
206
|
+
state,
|
|
207
|
+
nextStepIndex: record.nextStepIndex + 1,
|
|
208
|
+
status: record.nextStepIndex + 1 === steps.length ? 'completed' : 'ready',
|
|
209
|
+
};
|
|
108
210
|
await persist();
|
|
109
211
|
assertActive(activeSignal, deadline, now);
|
|
110
212
|
if (record.status === 'completed') {
|
|
@@ -135,17 +237,39 @@ function assertActive(signal, deadlineAtMs, now) {
|
|
|
135
237
|
throw new Error('Durable task expired');
|
|
136
238
|
signal.throwIfAborted();
|
|
137
239
|
}
|
|
240
|
+
/** Namespace object for callers that prefer one import over named helpers. */
|
|
138
241
|
exports.Durable = Object.freeze({ defineDurableTask });
|
|
242
|
+
/** Allowed checkpoint lifecycle states; re-exported so hosts can validate their own stores. */
|
|
139
243
|
var durable_js_2 = require("../structs/kits/durable.js");
|
|
140
244
|
Object.defineProperty(exports, "durableStatuses", { enumerable: true, get: function () { return durable_js_2.durableStatuses; } });
|
|
141
245
|
Object.defineProperty(exports, "durableReplayPolicies", { enumerable: true, get: function () { return durable_js_2.durableReplayPolicies; } });
|
|
142
246
|
function snapshotCheckpoint(record) {
|
|
143
247
|
const { version } = record;
|
|
248
|
+
// Only checkpoint layout 2 is readable; older layouts are not upgraded in place.
|
|
144
249
|
if (version !== 2)
|
|
145
250
|
throw new TypeError('Unsupported durable checkpoint version');
|
|
146
|
-
const { definitionId, revision, nextStepIndex, attemptCount, maxAttempts, deadlineAtMs, status, state, modelBudget } = record;
|
|
147
|
-
if (modelBudget !== undefined &&
|
|
251
|
+
const { definitionId, revision, nextStepIndex, attemptCount, maxAttempts, deadlineAtMs, status, state, modelBudget, } = record;
|
|
252
|
+
if (modelBudget !== undefined &&
|
|
253
|
+
(!modelBudget || typeof modelBudget !== 'object' || Array.isArray(modelBudget)))
|
|
148
254
|
throw new TypeError('Invalid durable model budget');
|
|
149
|
-
return {
|
|
150
|
-
|
|
255
|
+
return {
|
|
256
|
+
version,
|
|
257
|
+
definitionId,
|
|
258
|
+
revision,
|
|
259
|
+
nextStepIndex,
|
|
260
|
+
attemptCount,
|
|
261
|
+
maxAttempts,
|
|
262
|
+
deadlineAtMs,
|
|
263
|
+
status,
|
|
264
|
+
state: structuredClone(state),
|
|
265
|
+
...(modelBudget !== undefined
|
|
266
|
+
? {
|
|
267
|
+
modelBudget: {
|
|
268
|
+
maxCalls: modelBudget.maxCalls,
|
|
269
|
+
reservedCalls: modelBudget.reservedCalls,
|
|
270
|
+
maxCallsPerAttempt: modelBudget.maxCallsPerAttempt,
|
|
271
|
+
},
|
|
272
|
+
}
|
|
273
|
+
: {}),
|
|
274
|
+
};
|
|
151
275
|
}
|
|
@@ -3,54 +3,105 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Evidence = void 0;
|
|
4
4
|
exports.defineEvidenceChecklist = defineEvidenceChecklist;
|
|
5
5
|
exports.defineEvidenceProjection = defineEvidenceProjection;
|
|
6
|
+
/**
|
|
7
|
+
* Evidence Kit: check completion requirements against observations and narrow observations.
|
|
8
|
+
*
|
|
9
|
+
* Place in the package: an optional App-side library for "did we actually observe enough"
|
|
10
|
+
* logic. This module only compares observations with registered providers; what counts as
|
|
11
|
+
* evidence, where observations come from and how they are stored remain App-owned.
|
|
12
|
+
*
|
|
13
|
+
* Exports: `defineEvidenceChecklist`, `defineEvidenceProjection`, `Evidence`, and the
|
|
14
|
+
* evidence requirement/provider/projection types.
|
|
15
|
+
*/
|
|
6
16
|
const synchronous_js_1 = require("../utils/synchronous.js");
|
|
7
17
|
const rules_js_1 = require("../utils/rules.js");
|
|
8
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Compile a reusable completion checklist over actual observations.
|
|
20
|
+
*
|
|
21
|
+
* A requirement is satisfied when at least one observation satisfies the provider registered
|
|
22
|
+
* for its `kind`; `isComplete` requires every requirement to be satisfied, and `missing`
|
|
23
|
+
* returns those that are not. Hosts define evidence semantics.
|
|
24
|
+
*
|
|
25
|
+
* @param definitions - One provider per evidence kind, each with an `isSatisfied` predicate.
|
|
26
|
+
* @returns A frozen checklist exposing `isSatisfied`, `isComplete` and `missing`.
|
|
27
|
+
* @throws TypeError For duplicate kinds, missing predicates, or an unknown requirement kind;
|
|
28
|
+
* predicates must return a boolean synchronously.
|
|
29
|
+
*/
|
|
9
30
|
function defineEvidenceChecklist(definitions) {
|
|
10
31
|
const providers = new Map();
|
|
11
32
|
for (const definition of definitions) {
|
|
12
33
|
const predicate = definition.isSatisfied;
|
|
13
34
|
(0, rules_js_1.breakWhile)([
|
|
14
|
-
{
|
|
15
|
-
|
|
35
|
+
{
|
|
36
|
+
occur: () => providers.has(definition.kind),
|
|
37
|
+
error: () => `Duplicate evidence kind: ${definition.kind}`,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
occur: () => typeof predicate !== 'function',
|
|
41
|
+
error: () => `Missing evidence provider: ${definition.kind}`,
|
|
42
|
+
},
|
|
16
43
|
]);
|
|
17
|
-
providers.set(definition.kind, Object.freeze({
|
|
44
|
+
providers.set(definition.kind, Object.freeze({
|
|
45
|
+
kind: definition.kind,
|
|
46
|
+
description: definition.description,
|
|
47
|
+
isSatisfied: predicate.bind(definition),
|
|
48
|
+
}));
|
|
18
49
|
}
|
|
19
50
|
const satisfied = (observations, requirement) => {
|
|
20
51
|
const provider = providers.get(requirement.kind);
|
|
21
52
|
(0, rules_js_1.breakWhile)(!provider, () => `Unknown evidence kind: ${requirement.kind}`);
|
|
22
|
-
return observations.some(observation => (0, synchronous_js_1.booleanResult)(provider.isSatisfied(observation, requirement), 'Evidence predicates must be synchronous', 'Evidence predicates must return boolean'));
|
|
53
|
+
return observations.some((observation) => (0, synchronous_js_1.booleanResult)(provider.isSatisfied(observation, requirement), 'Evidence predicates must be synchronous', 'Evidence predicates must return boolean'));
|
|
23
54
|
};
|
|
24
55
|
return Object.freeze({
|
|
25
56
|
isSatisfied: (request) => satisfied(request.observations, request.requirement),
|
|
26
|
-
isComplete: (request) => request.requirements.every(requirement => satisfied(request.observations, requirement)),
|
|
27
|
-
missing({ observations, requirements }) {
|
|
28
|
-
return requirements.filter(requirement => !satisfied(observations, requirement));
|
|
57
|
+
isComplete: (request) => request.requirements.every((requirement) => satisfied(request.observations, requirement)),
|
|
58
|
+
missing({ observations, requirements, }) {
|
|
59
|
+
return requirements.filter((requirement) => !satisfied(observations, requirement));
|
|
29
60
|
},
|
|
30
61
|
});
|
|
31
62
|
}
|
|
32
|
-
/**
|
|
63
|
+
/**
|
|
64
|
+
* Compile a projection that keeps only the sources a caller asked to see.
|
|
65
|
+
*
|
|
66
|
+
* No selection retains the complete evidence; a selection narrows registered source-bearing
|
|
67
|
+
* results. Observations whose tool has no provider pass through untouched, so the projection
|
|
68
|
+
* can only ever remove sources it knows how to name.
|
|
69
|
+
*
|
|
70
|
+
* @param definition - Source id selector, optional tool id selector, and per-tool providers.
|
|
71
|
+
* @returns A frozen object whose `project({ observations, sourceIds })` returns new values.
|
|
72
|
+
* @throws TypeError For a provider without both handlers; selectors and handlers must be
|
|
73
|
+
* synchronous.
|
|
74
|
+
*/
|
|
33
75
|
function defineEvidenceProjection(definition) {
|
|
34
76
|
const sourceId = definition.sourceId.bind(definition);
|
|
35
|
-
const toolId = definition.toolId?.bind(definition) ??
|
|
77
|
+
const toolId = definition.toolId?.bind(definition) ??
|
|
78
|
+
((observation) => {
|
|
79
|
+
// Fallback tool selector: accept either the current `toolId` field or the legacy `tool`.
|
|
80
|
+
const value = observation;
|
|
81
|
+
return value.toolId ?? value.tool;
|
|
82
|
+
});
|
|
36
83
|
const providers = new Map();
|
|
37
84
|
for (const [tool, provider] of Object.entries(definition.providers)) {
|
|
38
|
-
(0, rules_js_1.breakWhile)(![provider.sources, provider.withSources].every(handler => typeof handler === 'function'), `Invalid evidence projection: ${tool}`);
|
|
39
|
-
providers.set(tool, Object.freeze({
|
|
85
|
+
(0, rules_js_1.breakWhile)(![provider.sources, provider.withSources].every((handler) => typeof handler === 'function'), `Invalid evidence projection: ${tool}`);
|
|
86
|
+
providers.set(tool, Object.freeze({
|
|
87
|
+
sources: provider.sources.bind(provider),
|
|
88
|
+
withSources: provider.withSources.bind(provider),
|
|
89
|
+
}));
|
|
40
90
|
}
|
|
41
91
|
return Object.freeze({
|
|
42
|
-
project({ observations, sourceIds = [] }) {
|
|
92
|
+
project({ observations, sourceIds = [], }) {
|
|
43
93
|
// Unknown/empty claims still need review against every available candidate.
|
|
44
94
|
if (!sourceIds.length)
|
|
45
95
|
return observations;
|
|
46
|
-
return observations.map(observation => {
|
|
96
|
+
return observations.map((observation) => {
|
|
47
97
|
const provider = providers.get((0, synchronous_js_1.synchronous)(toolId(observation), 'Evidence tool selectors must be synchronous'));
|
|
48
98
|
if (!provider)
|
|
49
99
|
return observation;
|
|
50
|
-
const sources = (0, synchronous_js_1.synchronous)(provider.sources(observation), 'Evidence source projection must be synchronous').filter(source => sourceIds.includes((0, synchronous_js_1.synchronous)(sourceId(source), 'Evidence source selectors must be synchronous')));
|
|
100
|
+
const sources = (0, synchronous_js_1.synchronous)(provider.sources(observation), 'Evidence source projection must be synchronous').filter((source) => sourceIds.includes((0, synchronous_js_1.synchronous)(sourceId(source), 'Evidence source selectors must be synchronous')));
|
|
51
101
|
return (0, synchronous_js_1.synchronous)(provider.withSources(observation, sources), 'Evidence observations must be synchronous');
|
|
52
102
|
});
|
|
53
103
|
},
|
|
54
104
|
});
|
|
55
105
|
}
|
|
106
|
+
/** Namespace object for callers that prefer one import over named helpers. */
|
|
56
107
|
exports.Evidence = Object.freeze({ defineEvidenceChecklist, defineEvidenceProjection });
|