@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
package/dist/esm/kits/family.js
CHANGED
|
@@ -1,36 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Family Kit: version App state that hangs off Core branches, with fork, merge and promote.
|
|
3
|
+
*
|
|
4
|
+
* Place in the package: an optional App-side library. A family is a bounded, expiring record
|
|
5
|
+
* of immutable versions; each version pairs a branch snapshot with App state. The Kit owns
|
|
6
|
+
* revision checks, capacity, retention and lineage rules; the store, authorization, validation
|
|
7
|
+
* and merge policy stay with the App. No executable function or authority is restored here.
|
|
8
|
+
*
|
|
9
|
+
* Exports: `defineAgentFamily`, `Family`, the family record/version/operation types and
|
|
10
|
+
* `familyOperations`.
|
|
11
|
+
*/
|
|
1
12
|
import { invocationId } from '../utils/invocation.js';
|
|
2
13
|
import { awaitWithSignal, awaitAssertion } from '../utils/cancellation.js';
|
|
3
14
|
import { booleanResult } from '../utils/synchronous.js';
|
|
4
15
|
import { breakWhile } from '../utils/rules.js';
|
|
5
16
|
import { snapshotBranch as branchSnapshot } from '../execution/branch.js';
|
|
6
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Compile a versioned family backed by an App-owned compare-and-swap store.
|
|
19
|
+
*
|
|
20
|
+
* Every mutation reads the record, verifies the caller's expected revision, then commits with
|
|
21
|
+
* a compare-and-swap, so concurrent writers fail with a revision conflict rather than
|
|
22
|
+
* overwriting each other. Reads are also treated as policy checks because the App binds its
|
|
23
|
+
* read rules into the store it supplies.
|
|
24
|
+
*
|
|
25
|
+
* @param definition - Store, authorization, validation, state predicate, branch/state snapshots
|
|
26
|
+
* and optional merge handler, clock and bounds.
|
|
27
|
+
* @returns A frozen family with `read`, `create`, `fork`, `merge` and `promote`.
|
|
28
|
+
* @throws A configured error (often `TypeError`) for an invalid id, expired or unknown record,
|
|
29
|
+
* revision conflict, exhausted capacity, lineage mismatch, missing merge configuration,
|
|
30
|
+
* invalid merge result, or changed active version.
|
|
31
|
+
*/
|
|
7
32
|
export function defineAgentFamily(definition) {
|
|
8
|
-
const store = {
|
|
33
|
+
const store = {
|
|
34
|
+
load: definition.store.load.bind(definition.store),
|
|
35
|
+
compareAndSwap: definition.store.compareAndSwap.bind(definition.store),
|
|
36
|
+
};
|
|
9
37
|
const authorize = definition.authorize.bind(definition), validate = definition.validate.bind(definition);
|
|
10
38
|
const isState = definition.isState.bind(definition), merge = definition.merge?.bind(definition), now = definition.now?.bind(definition) ?? Date.now;
|
|
39
|
+
// Bounds are encoded in the record itself: 32 versions and seven days of retention keep the
|
|
40
|
+
// snapshot small enough to clone and compare on every operation.
|
|
11
41
|
const maxVersions = definition.maxVersions ?? 32, retentionMs = definition.retentionMs ?? 7 * 86400_000;
|
|
12
|
-
breakWhile(!Number.isSafeInteger(maxVersions) ||
|
|
42
|
+
breakWhile(!Number.isSafeInteger(maxVersions) ||
|
|
43
|
+
maxVersions < 1 ||
|
|
44
|
+
!Number.isSafeInteger(retentionMs) ||
|
|
45
|
+
retentionMs < 1, 'Invalid family bounds');
|
|
13
46
|
const validId = (id) => typeof id === 'string' && !!id.trim() && id.length <= 200;
|
|
14
47
|
const stateSnapshot = (value) => {
|
|
15
48
|
breakWhile(!booleanResult(isState(value), 'Family state predicates must be synchronous'), 'Invalid family state');
|
|
16
49
|
return structuredClone(value);
|
|
17
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* Load, validate and clone a family record.
|
|
53
|
+
*
|
|
54
|
+
* @param id - Family id, at most 200 characters.
|
|
55
|
+
* @param context - Operation context supplying the abort signal.
|
|
56
|
+
* @returns A cloned record whose versions, branches and states all passed validation.
|
|
57
|
+
* @throws A configured error for an invalid id, a missing/expired record, or an inconsistent
|
|
58
|
+
* version.
|
|
59
|
+
*/
|
|
18
60
|
const read = async (id, context) => {
|
|
19
61
|
context.signal.throwIfAborted();
|
|
20
62
|
breakWhile(!validId(id), 'Invalid family id');
|
|
21
63
|
const record = structuredClone(await awaitWithSignal(store.load(id), context.signal));
|
|
22
64
|
context.signal.throwIfAborted();
|
|
23
|
-
breakWhile(!record ||
|
|
24
|
-
|
|
25
|
-
|
|
65
|
+
breakWhile(!record ||
|
|
66
|
+
record.id !== id ||
|
|
67
|
+
!Number.isFinite(record.expiresAtMs) ||
|
|
68
|
+
record.expiresAtMs <= now() ||
|
|
69
|
+
!Number.isSafeInteger(record.revision) ||
|
|
70
|
+
record.revision < 1 ||
|
|
71
|
+
!Array.isArray(record.versions) ||
|
|
72
|
+
!record.versions.length ||
|
|
73
|
+
record.versions.length > maxVersions ||
|
|
74
|
+
!record.versions.some((version) => version.id === record.activeId), 'Family unavailable');
|
|
75
|
+
const ids = new Set(record.versions.map((version) => version.id));
|
|
26
76
|
breakWhile(ids.size !== record.versions.length, 'Duplicate family version');
|
|
27
77
|
for (const item of record.versions) {
|
|
28
|
-
breakWhile(!validId(item.id) ||
|
|
29
|
-
|
|
78
|
+
breakWhile(!validId(item.id) ||
|
|
79
|
+
!Number.isFinite(item.createdAtMs) ||
|
|
80
|
+
item.createdAtMs < 0 ||
|
|
81
|
+
[item.parentId, item.baseId, item.mergeSourceId].some((value) => value !== undefined && !ids.has(value)), 'Invalid family version');
|
|
30
82
|
branchSnapshot(item.branch);
|
|
31
83
|
stateSnapshot(item.state);
|
|
32
84
|
}
|
|
33
|
-
// Reading policy is part of the App's bound store. Mutations also require their explicit
|
|
85
|
+
// Reading policy is part of the App's bound store. Mutations also require their explicit
|
|
86
|
+
// operation grant.
|
|
34
87
|
context.signal.throwIfAborted();
|
|
35
88
|
return structuredClone(record);
|
|
36
89
|
};
|
|
@@ -50,7 +103,7 @@ export function defineAgentFamily(definition) {
|
|
|
50
103
|
return record;
|
|
51
104
|
};
|
|
52
105
|
const version = (record, id) => {
|
|
53
|
-
const selected = record.versions.find(item => item.id === id);
|
|
106
|
+
const selected = record.versions.find((item) => item.id === id);
|
|
54
107
|
breakWhile(!selected, 'Unknown family version');
|
|
55
108
|
return selected;
|
|
56
109
|
};
|
|
@@ -60,49 +113,126 @@ export function defineAgentFamily(definition) {
|
|
|
60
113
|
return commit({ ...record, revision: record.revision + 1, versions: [...record.versions, candidate] }, record.revision, context);
|
|
61
114
|
};
|
|
62
115
|
return Object.freeze({
|
|
116
|
+
/** Clone and validate one family record through the same read path used by mutations. */
|
|
63
117
|
read,
|
|
118
|
+
/**
|
|
119
|
+
* Create a family with one initial version.
|
|
120
|
+
*
|
|
121
|
+
* @param request - Family id plus its first branch and state.
|
|
122
|
+
* @param context - Operation context; authorization receives `'create'` and no record.
|
|
123
|
+
* @returns The committed record at revision 1.
|
|
124
|
+
* @throws A configured error for an invalid or existing id, or failed authorization or
|
|
125
|
+
* validation.
|
|
126
|
+
*/
|
|
64
127
|
async create(request, context) {
|
|
65
128
|
context.signal.throwIfAborted();
|
|
66
129
|
const { id } = request;
|
|
67
130
|
breakWhile(!validId(id), 'Invalid family id');
|
|
68
131
|
const branch = branchSnapshot(request.branch), state = structuredClone(request.state);
|
|
69
|
-
breakWhile(!!await awaitWithSignal(store.load(id), context.signal), 'Family already exists');
|
|
132
|
+
breakWhile(!!(await awaitWithSignal(store.load(id), context.signal)), 'Family already exists');
|
|
70
133
|
await awaitAssertion(() => authorize('create', undefined, context), context.signal, 'Family authorization must return void');
|
|
71
|
-
const candidate = {
|
|
134
|
+
const candidate = {
|
|
135
|
+
id: invocationId(),
|
|
136
|
+
branch,
|
|
137
|
+
state: stateSnapshot(state),
|
|
138
|
+
createdAtMs: now(),
|
|
139
|
+
};
|
|
72
140
|
await awaitAssertion(() => validate(structuredClone(candidate), context), context.signal, 'Family validation must return void');
|
|
73
|
-
return commit({
|
|
141
|
+
return commit({
|
|
142
|
+
id,
|
|
143
|
+
revision: 1,
|
|
144
|
+
activeId: candidate.id,
|
|
145
|
+
expiresAtMs: now() + retentionMs,
|
|
146
|
+
versions: [candidate],
|
|
147
|
+
}, undefined, context);
|
|
74
148
|
},
|
|
149
|
+
/**
|
|
150
|
+
* Add a child version derived from one existing version.
|
|
151
|
+
*
|
|
152
|
+
* @param request - Family id, expected revision, parent version id, new branch and state.
|
|
153
|
+
* @param context - Operation context; authorization receives `'fork'` and the record.
|
|
154
|
+
* @returns The committed record with the new version appended.
|
|
155
|
+
* @throws A configured error for a stale revision, unknown parent, broken lineage or full
|
|
156
|
+
* capacity.
|
|
157
|
+
*/
|
|
75
158
|
async fork(request, context) {
|
|
76
159
|
context.signal.throwIfAborted();
|
|
77
160
|
const { id, revision, parentId } = request, state = structuredClone(request.state);
|
|
78
161
|
const branch = branchSnapshot(request.branch);
|
|
79
162
|
const record = await check('fork', id, revision, context), parent = version(record, parentId);
|
|
80
|
-
breakWhile(branch.agentId !== parent.branch.agentId ||
|
|
81
|
-
|
|
82
|
-
|
|
163
|
+
breakWhile(branch.agentId !== parent.branch.agentId ||
|
|
164
|
+
branch.parentBranchId !== parent.branch.branchId ||
|
|
165
|
+
branch.parentAgentVersionId !== parent.branch.agentVersionId ||
|
|
166
|
+
branch.branchId === parent.branch.branchId, 'Fork lineage mismatch');
|
|
167
|
+
return add(record, {
|
|
168
|
+
id: invocationId(),
|
|
169
|
+
parentId: parent.id,
|
|
170
|
+
baseId: parent.id,
|
|
171
|
+
branch,
|
|
172
|
+
state: stateSnapshot(state),
|
|
173
|
+
createdAtMs: now(),
|
|
174
|
+
}, context);
|
|
83
175
|
},
|
|
176
|
+
/**
|
|
177
|
+
* Merge a source version into a target version over their shared base.
|
|
178
|
+
*
|
|
179
|
+
* Conflicts are reported, never resolved here: a non-empty conflict list returns
|
|
180
|
+
* `saved: false` with the unchanged record, so the App decides how to reconcile.
|
|
181
|
+
*
|
|
182
|
+
* @param request - Family id, expected revision and the base, target and source version ids.
|
|
183
|
+
* @param context - Operation context; authorization receives `'merge'` and the record.
|
|
184
|
+
* @returns `{ saved, record, conflicts }`.
|
|
185
|
+
* @throws A configured error for a stale revision, missing versions, no merge handler, a
|
|
186
|
+
* missing shared base, or an invalid merge result.
|
|
187
|
+
*/
|
|
84
188
|
async merge(request, context) {
|
|
85
189
|
const { id, revision, baseId, targetId, sourceId } = request;
|
|
86
190
|
const record = await check('merge', id, revision, context);
|
|
87
191
|
breakWhile(!merge, 'Family merge is not configured');
|
|
88
192
|
const base = version(record, baseId), target = version(record, targetId), source = version(record, sourceId);
|
|
89
|
-
breakWhile(source.baseId !== base.id || target.id !== base.id && target.baseId !== base.id, 'Merge requires a shared base');
|
|
90
|
-
const result = await awaitWithSignal(merge({
|
|
91
|
-
|
|
193
|
+
breakWhile(source.baseId !== base.id || (target.id !== base.id && target.baseId !== base.id), 'Merge requires a shared base');
|
|
194
|
+
const result = await awaitWithSignal(merge({
|
|
195
|
+
base: stateSnapshot(base.state),
|
|
196
|
+
target: stateSnapshot(target.state),
|
|
197
|
+
source: stateSnapshot(source.state),
|
|
198
|
+
}, context), context.signal);
|
|
199
|
+
breakWhile(!result ||
|
|
200
|
+
!Array.isArray(result.conflicts) ||
|
|
201
|
+
result.conflicts.some((value) => typeof value !== 'string'), 'Invalid merge result');
|
|
92
202
|
if (result.conflicts.length)
|
|
93
203
|
return { saved: false, record, conflicts: [...result.conflicts] };
|
|
94
|
-
const candidate = {
|
|
95
|
-
|
|
204
|
+
const candidate = {
|
|
205
|
+
id: invocationId(),
|
|
206
|
+
parentId: target.id,
|
|
207
|
+
baseId: target.id,
|
|
208
|
+
mergeSourceId: source.id,
|
|
209
|
+
branch: branchSnapshot(source.branch),
|
|
210
|
+
state: stateSnapshot(result.value),
|
|
211
|
+
createdAtMs: now(),
|
|
212
|
+
};
|
|
96
213
|
return { saved: true, record: await add(record, candidate, context), conflicts: [] };
|
|
97
214
|
},
|
|
215
|
+
/**
|
|
216
|
+
* Make an existing version the active one.
|
|
217
|
+
*
|
|
218
|
+
* @param request - Family id, expected revision, candidate id and the active id the caller
|
|
219
|
+
* believes is current.
|
|
220
|
+
* @param context - Operation context; authorization receives `'promote'` and the record.
|
|
221
|
+
* @returns The committed record pointing at the candidate.
|
|
222
|
+
* @throws A configured error for a stale revision or active id, an unrelated candidate, or
|
|
223
|
+
* failed validation.
|
|
224
|
+
*/
|
|
98
225
|
async promote(request, context) {
|
|
99
226
|
const { id, revision, candidateId, expectedActiveId } = request;
|
|
100
227
|
const record = await check('promote', id, revision, context), candidate = version(record, candidateId);
|
|
101
|
-
breakWhile(record.activeId !== expectedActiveId ||
|
|
228
|
+
breakWhile(record.activeId !== expectedActiveId ||
|
|
229
|
+
(candidate.id !== record.activeId && candidate.baseId !== record.activeId), 'Active family version changed');
|
|
102
230
|
await awaitAssertion(() => validate(structuredClone(candidate), context), context.signal, 'Family validation must return void');
|
|
103
231
|
return commit({ ...record, revision: record.revision + 1, activeId: candidate.id }, record.revision, context);
|
|
104
232
|
},
|
|
105
233
|
});
|
|
106
234
|
}
|
|
235
|
+
/** Namespace object for callers that prefer one import over named helpers. */
|
|
107
236
|
export const Family = Object.freeze({ defineAgentFamily });
|
|
237
|
+
/** Operation names accepted by the family `authorize` hook. */
|
|
108
238
|
export { familyOperations } from '../structs/kits/family.js';
|
package/dist/esm/kits/index.d.ts
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Explicit bulk Kit entry.
|
|
3
|
+
*
|
|
4
|
+
* Kits are optional, App-side business libraries. An application may consume a single Kit
|
|
5
|
+
* path; this file only exists for callers that prefer one import for the whole set. Core
|
|
6
|
+
* never imports from this directory, so nothing here becomes a runtime requirement.
|
|
7
|
+
*
|
|
8
|
+
* Exports: the Kit namespaces (`Interaction`, `Intents`, `Tools`, `Knowledge`, `Answering`,
|
|
9
|
+
* `Presentation`, `Normalization`, `Delivery`, `Projection`, `Aggregation`, `Retrieval`,
|
|
10
|
+
* `Evidence`, `Policies`, `Candidates`, `TextSkills`, `TextSearch`, `ModelCalls`,
|
|
11
|
+
* `VectorSearch`) plus every Kit type. Individual Kit paths stay the default.
|
|
12
|
+
*/
|
|
2
13
|
export { Interaction } from './interaction/index.js';
|
|
3
14
|
export { Intents } from './intents/index.js';
|
|
4
15
|
export { Tools } from './tools.js';
|
package/dist/esm/kits/index.js
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Explicit bulk Kit entry.
|
|
3
|
+
*
|
|
4
|
+
* Kits are optional, App-side business libraries. An application may consume a single Kit
|
|
5
|
+
* path; this file only exists for callers that prefer one import for the whole set. Core
|
|
6
|
+
* never imports from this directory, so nothing here becomes a runtime requirement.
|
|
7
|
+
*
|
|
8
|
+
* Exports: the Kit namespaces (`Interaction`, `Intents`, `Tools`, `Knowledge`, `Answering`,
|
|
9
|
+
* `Presentation`, `Normalization`, `Delivery`, `Projection`, `Aggregation`, `Retrieval`,
|
|
10
|
+
* `Evidence`, `Policies`, `Candidates`, `TextSkills`, `TextSearch`, `ModelCalls`,
|
|
11
|
+
* `VectorSearch`) plus every Kit type. Individual Kit paths stay the default.
|
|
12
|
+
*/
|
|
2
13
|
export { Interaction } from './interaction/index.js';
|
|
3
14
|
export { Intents } from './intents/index.js';
|
|
4
15
|
export { Tools } from './tools.js';
|
|
@@ -1,21 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inference Kit: a bounded, cancellable catalog of App-registered model bindings.
|
|
3
|
+
*
|
|
4
|
+
* Place in the package: an optional App-side wrapper for calling model providers. A binding
|
|
5
|
+
* owns the provider call; this module owns id/identity registration, input and output
|
|
6
|
+
* assertions, attempt-budget accounting, timeout composition and diagnostics. It does not
|
|
7
|
+
* choose prompts, retries or fallbacks, and Core does not import it.
|
|
8
|
+
*
|
|
9
|
+
* Exports: `ModelCalls`, `ModelBinding`, `ModelInvocationContext`, `ModelInvocationRequest`.
|
|
10
|
+
*/
|
|
1
11
|
import type { ExecutionContext, MaybePromise } from '../structs/common.js';
|
|
2
12
|
import type { AttemptBudget } from '../execution/workflow.js';
|
|
3
13
|
import type { ModelResult } from '../structs/invocation.js';
|
|
4
14
|
/** App-defined I/O. Registered literal IDs determine input and output types. */
|
|
5
15
|
export interface ModelBinding<Input, Output> {
|
|
16
|
+
/** Catalog key used in requests; must be unique within one `ModelCalls` instance. */
|
|
6
17
|
readonly id: string;
|
|
18
|
+
/** Non-blank implementation identity (provider plus model name) reported in diagnostics. */
|
|
7
19
|
readonly identity: string;
|
|
20
|
+
/** Performs the provider call. May be async; the Kit applies the caller's signal. */
|
|
8
21
|
invoke(input: Input, context: ModelInvocationContext): MaybePromise<Output>;
|
|
22
|
+
/** Optional synchronous assertion run before the budget is consumed or the call starts. */
|
|
9
23
|
assertInput?(input: Input): void;
|
|
24
|
+
/** Optional synchronous assertion run after the call, before the result is reported. */
|
|
10
25
|
assertOutput?(output: Output): void;
|
|
11
26
|
}
|
|
12
27
|
/** One take consumes one binding invocation attempt, independent of batch size or chat tokens. */
|
|
13
28
|
export interface ModelInvocationContext extends ExecutionContext {
|
|
29
|
+
/** Shared attempt budget; a refusal fails the call with `BudgetError` before invoking. */
|
|
14
30
|
readonly attemptBudget?: Pick<AttemptBudget, 'take'>;
|
|
15
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* One model call: registered binding id, the input to hand over and its timeout.
|
|
34
|
+
*
|
|
35
|
+
* @typeParam Input - Input type of the addressed binding.
|
|
36
|
+
*/
|
|
16
37
|
export interface ModelInvocationRequest<Input> {
|
|
38
|
+
/** Registered binding id; unknown ids fail before any provider work happens. */
|
|
17
39
|
readonly modelId: string;
|
|
40
|
+
/** Input handed to the binding unchanged; Core never clones App objects here. */
|
|
18
41
|
readonly input: Input;
|
|
42
|
+
/** Per-call timeout in milliseconds, 1..2147483647 (the platform timer ceiling). */
|
|
19
43
|
readonly timeoutMs: number;
|
|
20
44
|
}
|
|
21
45
|
type BindingFor<Bindings extends readonly ModelBinding<any, any>[], Id extends string> = Bindings[number] extends infer Binding ? Binding extends {
|
|
@@ -28,18 +52,58 @@ type OutputFor<Bindings extends readonly ModelBinding<any, any>[], Id extends st
|
|
|
28
52
|
invoke(...args: any[]): infer Output;
|
|
29
53
|
} ? Awaited<Output> : unknown : unknown;
|
|
30
54
|
type RegisteredBinding<Binding extends ModelBinding<any, any>> = Readonly<Pick<Binding, Extract<keyof Binding, keyof ModelBinding<any, any>>>>;
|
|
55
|
+
/**
|
|
56
|
+
* Frozen catalog of model bindings plus a checked invocation entry point.
|
|
57
|
+
*
|
|
58
|
+
* Registration happens once in the constructor; the catalog is never mutated afterwards, so a
|
|
59
|
+
* caller cannot swap a provider in the middle of a run.
|
|
60
|
+
*/
|
|
31
61
|
export declare class ModelCalls<Input = unknown, Output = unknown, const Bindings extends readonly ModelBinding<any, any>[] = readonly ModelBinding<Input, Output>[]> {
|
|
32
62
|
private sequence;
|
|
33
63
|
private readonly bindings;
|
|
64
|
+
/**
|
|
65
|
+
* @param bindings - Bindings to register; each needs a non-blank `identity` and an `invoke`.
|
|
66
|
+
* @throws TypeError When a binding is malformed or two bindings share an id.
|
|
67
|
+
*/
|
|
34
68
|
constructor(bindings: Bindings);
|
|
69
|
+
/** Registered bindings in declaration order, with methods already bound to their owner. */
|
|
35
70
|
get definitions(): readonly RegisteredBinding<Bindings[number]>[];
|
|
71
|
+
/** Registered binding ids in declaration order. */
|
|
36
72
|
ids(): readonly string[];
|
|
73
|
+
/** Whether a binding id is registered. */
|
|
37
74
|
has(id: string): boolean;
|
|
75
|
+
/** Registered binding for `id`, or `undefined` when it is absent. */
|
|
38
76
|
get(id: string): RegisteredBinding<Bindings[number]> | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* Registered binding for `id`.
|
|
79
|
+
*
|
|
80
|
+
* @throws TypeError When the id is not registered.
|
|
81
|
+
*/
|
|
39
82
|
require(id: string): RegisteredBinding<Bindings[number]>;
|
|
83
|
+
/** Iterate the registered bindings. */
|
|
40
84
|
values(): IterableIterator<RegisteredBinding<Bindings[number]>>;
|
|
85
|
+
/** Iterate `[id, binding]` pairs. */
|
|
41
86
|
entries(): IterableIterator<[string, RegisteredBinding<Bindings[number]>]>;
|
|
87
|
+
/**
|
|
88
|
+
* Implementation identity of one binding.
|
|
89
|
+
*
|
|
90
|
+
* @throws TypeError When the id is not registered.
|
|
91
|
+
*/
|
|
42
92
|
identity(id: string): string;
|
|
93
|
+
/**
|
|
94
|
+
* Invoke one registered binding under the caller's signal, timeout and attempt budget.
|
|
95
|
+
*
|
|
96
|
+
* Order matters: the binding id is resolved, input is asserted, the budget take happens
|
|
97
|
+
* before the provider call, and the output assertion runs before a result is reported. Any
|
|
98
|
+
* failure emits a diagnostic and rethrows unchanged, so callers see the provider's own error.
|
|
99
|
+
*
|
|
100
|
+
* @param request - Binding id, input and per-call timeout.
|
|
101
|
+
* @param context - Execution context; `signal` is combined with a timeout signal.
|
|
102
|
+
* @returns The provider output wrapped with invocation metadata.
|
|
103
|
+
* @throws TypeError For a malformed request, unknown id, missing signal/context, invalid
|
|
104
|
+
* timeout or failed input/output assertion; `BudgetError` when the attempt budget refuses;
|
|
105
|
+
* the provider's own error otherwise, including abort and timeout.
|
|
106
|
+
*/
|
|
43
107
|
invoke<const Id extends string>(request: ModelInvocationRequest<InputFor<Bindings, Id>> & {
|
|
44
108
|
readonly modelId: Id;
|
|
45
109
|
}, context: ModelInvocationContext): Promise<ModelResult<OutputFor<Bindings, Id>>>;
|
|
@@ -5,35 +5,97 @@ import { awaitWithSignal, combineSignals } from '../utils/cancellation.js';
|
|
|
5
5
|
import { invocationId, invocationResult } from '../utils/invocation.js';
|
|
6
6
|
import { getErrorInfo } from '../errors.js';
|
|
7
7
|
import { ProtocolRegistry } from '../utils/protocol-registry.js';
|
|
8
|
+
/**
|
|
9
|
+
* Frozen catalog of model bindings plus a checked invocation entry point.
|
|
10
|
+
*
|
|
11
|
+
* Registration happens once in the constructor; the catalog is never mutated afterwards, so a
|
|
12
|
+
* caller cannot swap a provider in the middle of a run.
|
|
13
|
+
*/
|
|
8
14
|
export class ModelCalls {
|
|
9
15
|
sequence = 0;
|
|
10
16
|
bindings = new ProtocolRegistry();
|
|
17
|
+
/**
|
|
18
|
+
* @param bindings - Bindings to register; each needs a non-blank `identity` and an `invoke`.
|
|
19
|
+
* @throws TypeError When a binding is malformed or two bindings share an id.
|
|
20
|
+
*/
|
|
11
21
|
constructor(bindings) {
|
|
12
22
|
for (const binding of bindings) {
|
|
13
23
|
if (!binding.identity?.trim() || typeof binding.invoke !== 'function')
|
|
14
24
|
throw new TypeError('Invalid model binding');
|
|
15
|
-
this.bindings.set(binding.id, Object.freeze({
|
|
16
|
-
|
|
25
|
+
this.bindings.set(binding.id, Object.freeze({
|
|
26
|
+
id: binding.id,
|
|
27
|
+
identity: binding.identity,
|
|
28
|
+
invoke: binding.invoke.bind(binding),
|
|
29
|
+
assertInput: binding.assertInput?.bind(binding),
|
|
30
|
+
assertOutput: binding.assertOutput?.bind(binding),
|
|
31
|
+
}));
|
|
17
32
|
}
|
|
18
33
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
34
|
+
/** Registered bindings in declaration order, with methods already bound to their owner. */
|
|
35
|
+
get definitions() {
|
|
36
|
+
return Object.freeze([...this.bindings.values()]);
|
|
37
|
+
}
|
|
38
|
+
/** Registered binding ids in declaration order. */
|
|
39
|
+
ids() {
|
|
40
|
+
return this.bindings.ids();
|
|
41
|
+
}
|
|
42
|
+
/** Whether a binding id is registered. */
|
|
43
|
+
has(id) {
|
|
44
|
+
return this.bindings.has(id);
|
|
45
|
+
}
|
|
46
|
+
/** Registered binding for `id`, or `undefined` when it is absent. */
|
|
47
|
+
get(id) {
|
|
48
|
+
return this.bindings.get(id);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Registered binding for `id`.
|
|
52
|
+
*
|
|
53
|
+
* @throws TypeError When the id is not registered.
|
|
54
|
+
*/
|
|
55
|
+
require(id) {
|
|
56
|
+
return this.bindings.require(id);
|
|
57
|
+
}
|
|
58
|
+
/** Iterate the registered bindings. */
|
|
59
|
+
values() {
|
|
60
|
+
return this.bindings.values();
|
|
61
|
+
}
|
|
62
|
+
/** Iterate `[id, binding]` pairs. */
|
|
63
|
+
entries() {
|
|
64
|
+
return this.bindings.entries();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Implementation identity of one binding.
|
|
68
|
+
*
|
|
69
|
+
* @throws TypeError When the id is not registered.
|
|
70
|
+
*/
|
|
71
|
+
identity(id) {
|
|
72
|
+
return this.require(id).identity;
|
|
73
|
+
}
|
|
27
74
|
async invoke(request, context) {
|
|
28
75
|
if (!request || typeof request !== 'object' || !('input' in request))
|
|
29
76
|
throw new TypeError('Use one model request and execution context');
|
|
30
77
|
const { modelId: id, input, timeoutMs } = request;
|
|
31
|
-
if (!context?.signal ||
|
|
78
|
+
if (!context?.signal ||
|
|
79
|
+
typeof id !== 'string' ||
|
|
80
|
+
!id.trim() ||
|
|
81
|
+
!Number.isSafeInteger(timeoutMs) ||
|
|
82
|
+
timeoutMs < 1 ||
|
|
83
|
+
// 2147483647 is the largest delay `setTimeout`/`AbortSignal.timeout` accept reliably.
|
|
84
|
+
timeoutMs > 2147483647)
|
|
32
85
|
throw new TypeError('A modelId, signal and positive supported timeoutMs are required');
|
|
33
86
|
const sourceBudget = context.attemptBudget;
|
|
34
87
|
const take = sourceBudget?.take.bind(sourceBudget);
|
|
35
88
|
const callId = invocationId(), startedAtMs = Date.now();
|
|
36
|
-
const diagnostics = context.diagnostics?.child(callId, {
|
|
89
|
+
const diagnostics = context.diagnostics?.child(callId, {
|
|
90
|
+
invocationId: callId,
|
|
91
|
+
modelId: id,
|
|
92
|
+
nodeRole: 'invocation',
|
|
93
|
+
definitionKind: 'model-binding',
|
|
94
|
+
definitionId: id,
|
|
95
|
+
nodeId: id,
|
|
96
|
+
nodeName: id,
|
|
97
|
+
nodeKind: 'model-binding',
|
|
98
|
+
});
|
|
37
99
|
const signal = combineSignals(context.signal, AbortSignal.timeout(timeoutMs));
|
|
38
100
|
let phase = 'input';
|
|
39
101
|
try {
|
|
@@ -48,7 +110,12 @@ export class ModelCalls {
|
|
|
48
110
|
}
|
|
49
111
|
const callSequence = ++this.sequence;
|
|
50
112
|
phase = 'invoke';
|
|
51
|
-
diagnostics?.emit('model.binding', () => ({
|
|
113
|
+
diagnostics?.emit('model.binding', () => ({
|
|
114
|
+
modelId: id,
|
|
115
|
+
invocationId: callId,
|
|
116
|
+
status: 'running',
|
|
117
|
+
phase,
|
|
118
|
+
}));
|
|
52
119
|
// Hand off checked inputs before yielding. Arbitrary App inputs may be
|
|
53
120
|
// class instances or services, so Core must not silently clone them.
|
|
54
121
|
signal.throwIfAborted();
|
|
@@ -57,11 +124,32 @@ export class ModelCalls {
|
|
|
57
124
|
phase = 'output';
|
|
58
125
|
assertion(binding.assertOutput?.(output), 'Model output assertions must be synchronous');
|
|
59
126
|
signal.throwIfAborted();
|
|
60
|
-
diagnostics?.emit('model.binding', () => ({
|
|
61
|
-
|
|
127
|
+
diagnostics?.emit('model.binding', () => ({
|
|
128
|
+
modelId: id,
|
|
129
|
+
invocationId: callId,
|
|
130
|
+
status: 'success',
|
|
131
|
+
phase,
|
|
132
|
+
durationMs: Date.now() - startedAtMs,
|
|
133
|
+
}));
|
|
134
|
+
return invocationResult(output, {
|
|
135
|
+
...diagnostics?.identity,
|
|
136
|
+
invocationId: callId,
|
|
137
|
+
modelId: id,
|
|
138
|
+
startedAtMs,
|
|
139
|
+
durationMs: Date.now() - startedAtMs,
|
|
140
|
+
callSequence,
|
|
141
|
+
status: 'success',
|
|
142
|
+
});
|
|
62
143
|
}
|
|
63
144
|
catch (error) {
|
|
64
|
-
diagnostics?.emit('model.binding', () => ({
|
|
145
|
+
diagnostics?.emit('model.binding', () => ({
|
|
146
|
+
modelId: id,
|
|
147
|
+
invocationId: callId,
|
|
148
|
+
status: signal.aborted ? 'cancelled' : 'error',
|
|
149
|
+
phase,
|
|
150
|
+
durationMs: Date.now() - startedAtMs,
|
|
151
|
+
errorCode: getErrorInfo(error).code,
|
|
152
|
+
}));
|
|
65
153
|
throw error;
|
|
66
154
|
}
|
|
67
155
|
}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import type { AgentCatalogPorts, CatalogIntent, CatalogScope } from '../../structs/kits/intents/catalog.js';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Compile a catalog projection over the App's live registries.
|
|
4
|
+
*
|
|
5
|
+
* The actual registries determine availability and relationships. No parallel capability list
|
|
6
|
+
* exists: `intentIds` filters by tool support, `modelCatalog` narrows to the currently accepted
|
|
7
|
+
* task when `restrictToTask` is enabled, and scope tool ids are filtered to tools that exist.
|
|
8
|
+
*
|
|
9
|
+
* @param ports - Sources for intent ids, intents, scopes, the current task, the tool registry
|
|
10
|
+
* and the `restrictToTask` switch.
|
|
11
|
+
* @returns A frozen projection with `intentIds`, `intentSteps`, `intentCatalog`,
|
|
12
|
+
* `scopeCatalog` and `modelCatalog`.
|
|
13
|
+
* @throws TypeError When a supplied predicate does not return a boolean synchronously.
|
|
14
|
+
*/
|
|
3
15
|
export declare function defineAgentCatalog<App, Id extends string, Intent extends CatalogIntent<Id>, Scope extends CatalogScope>(ports: AgentCatalogPorts<App, Id, Intent, Scope>): Readonly<{
|
|
4
16
|
intentIds: (app: App) => Id[];
|
|
5
17
|
intentSteps: (app?: App) => Map<Id, string[]>;
|