@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
|
@@ -5,95 +5,240 @@ exports.createIntentRegistry = createIntentRegistry;
|
|
|
5
5
|
const synchronous_js_1 = require("../../utils/synchronous.js");
|
|
6
6
|
const rules_js_1 = require("../../utils/rules.js");
|
|
7
7
|
const registration_js_1 = require("../../utils/registration.js");
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Intent semantics and allowed values are configuration; the registry owns their common lifecycle.
|
|
10
|
+
*
|
|
11
|
+
* Registration order is preserved by `ids`, `definitions`, `values` and `entries`; once
|
|
12
|
+
* `seal()` is called the set is final and further registration is rejected.
|
|
13
|
+
*/
|
|
9
14
|
class IntentRegistry {
|
|
15
|
+
/** Create and seal a complete catalog in one call. */
|
|
10
16
|
static create = createIntentRegistry;
|
|
11
17
|
byId = new Map();
|
|
12
18
|
sealed = false;
|
|
13
19
|
policy;
|
|
20
|
+
/**
|
|
21
|
+
* @param policy - Optional id pattern, vocabulary lists, error wording and assertion hook.
|
|
22
|
+
* Lists and the pattern are copied so later mutation of the input cannot weaken checks.
|
|
23
|
+
*/
|
|
14
24
|
constructor(policy = {}) {
|
|
15
25
|
const pattern = policy.idPattern;
|
|
16
26
|
const errorPorts = policy.errors, { sealed, invalid, duplicate } = errorPorts ?? {};
|
|
17
|
-
const listFields = [
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
27
|
+
const listFields = [
|
|
28
|
+
'scopeModes',
|
|
29
|
+
'targetModes',
|
|
30
|
+
'contextTiers',
|
|
31
|
+
'actions',
|
|
32
|
+
'steps',
|
|
33
|
+
'handoffValues',
|
|
34
|
+
'tags',
|
|
35
|
+
];
|
|
36
|
+
const lists = Object.fromEntries(listFields.map((key) => {
|
|
37
|
+
const value = policy[key];
|
|
38
|
+
return [key, value === undefined ? undefined : Object.freeze([...value])];
|
|
39
|
+
}));
|
|
40
|
+
this.policy = Object.freeze({
|
|
41
|
+
...(0, registration_js_1.registrationData)(policy, ['idPattern', 'assertDefinition', 'errors', ...listFields]),
|
|
42
|
+
...lists,
|
|
43
|
+
idPattern: pattern ? new RegExp(pattern.source, pattern.flags) : undefined,
|
|
44
|
+
errors: errorPorts &&
|
|
45
|
+
Object.freeze({
|
|
46
|
+
sealed: typeof sealed === 'function' ? sealed.bind(errorPorts) : sealed,
|
|
47
|
+
invalid: typeof invalid === 'function' ? invalid.bind(errorPorts) : invalid,
|
|
48
|
+
duplicate: duplicate?.bind(errorPorts),
|
|
49
|
+
}),
|
|
50
|
+
assertDefinition: policy.assertDefinition?.bind(policy),
|
|
51
|
+
});
|
|
23
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Validate, freeze and add one intent.
|
|
55
|
+
*
|
|
56
|
+
* Checks run in a fixed order — sealed, identity, context contract, auxiliary actions,
|
|
57
|
+
* handoff, plan, steps — so the reported violation is stable when several rules fail.
|
|
58
|
+
*
|
|
59
|
+
* @param input - Intent declaration; the App's own assertion receives this original object,
|
|
60
|
+
* not the compiled copy, so helpers and prototype methods keep working.
|
|
61
|
+
* @returns This registry, for chaining.
|
|
62
|
+
* @throws A configured error for a sealed registry, invalid identity or vocabulary values,
|
|
63
|
+
* empty/duplicate steps, or a duplicate intent id.
|
|
64
|
+
*/
|
|
24
65
|
register(input) {
|
|
25
66
|
const id = input.id;
|
|
26
|
-
const definition = {
|
|
27
|
-
|
|
28
|
-
|
|
67
|
+
const definition = {
|
|
68
|
+
...(0, registration_js_1.registrationData)(input, [
|
|
69
|
+
'id',
|
|
70
|
+
'description',
|
|
71
|
+
'steps',
|
|
72
|
+
'scopePolicy',
|
|
73
|
+
'targetPolicy',
|
|
74
|
+
'contextTier',
|
|
75
|
+
'planIntent',
|
|
76
|
+
'auxiliaryActions',
|
|
77
|
+
'preparedHandoff',
|
|
78
|
+
]),
|
|
79
|
+
id,
|
|
80
|
+
description: input.description,
|
|
81
|
+
steps: input.steps,
|
|
82
|
+
scopePolicy: input.scopePolicy,
|
|
83
|
+
targetPolicy: input.targetPolicy,
|
|
84
|
+
contextTier: input.contextTier,
|
|
85
|
+
planIntent: input.planIntent,
|
|
86
|
+
auxiliaryActions: input.auxiliaryActions,
|
|
87
|
+
preparedHandoff: input.preparedHandoff,
|
|
88
|
+
};
|
|
29
89
|
const policy = this.policy;
|
|
30
90
|
const invalid = policy.errors?.invalid ?? 'Invalid intent definition';
|
|
31
91
|
const tags = policy.tags ?? [];
|
|
32
|
-
const validName = (name) => {
|
|
33
|
-
|
|
34
|
-
|
|
92
|
+
const validName = (name) => {
|
|
93
|
+
if (typeof name !== 'string' || !name.trim())
|
|
94
|
+
return false;
|
|
95
|
+
if (!policy.idPattern)
|
|
96
|
+
return true;
|
|
97
|
+
policy.idPattern.lastIndex = 0;
|
|
98
|
+
return policy.idPattern.test(name);
|
|
99
|
+
};
|
|
35
100
|
(0, rules_js_1.breakWhile)([
|
|
36
|
-
{
|
|
101
|
+
{
|
|
102
|
+
occur: () => this.sealed,
|
|
103
|
+
error: policy.errors?.sealed ?? 'Intent registry is sealed',
|
|
104
|
+
tags: ['sealed'],
|
|
105
|
+
},
|
|
37
106
|
{
|
|
38
107
|
occur: [() => !validName(definition.id), () => !definition.description.trim()],
|
|
39
|
-
error: invalid,
|
|
108
|
+
error: invalid,
|
|
109
|
+
tags: ['identity'],
|
|
40
110
|
},
|
|
41
111
|
{
|
|
42
112
|
occur: [
|
|
43
|
-
() => policy.scopeModes !== undefined &&
|
|
44
|
-
|
|
45
|
-
() => policy.
|
|
46
|
-
|
|
113
|
+
() => policy.scopeModes !== undefined &&
|
|
114
|
+
!policy.scopeModes.includes(definition.scopePolicy),
|
|
115
|
+
() => policy.targetModes !== undefined &&
|
|
116
|
+
!policy.targetModes.includes(definition.targetPolicy),
|
|
117
|
+
() => policy.contextTiers !== undefined &&
|
|
118
|
+
!policy.contextTiers.includes(definition.contextTier),
|
|
119
|
+
],
|
|
120
|
+
error: invalid,
|
|
121
|
+
tags: ['context-contract'],
|
|
47
122
|
},
|
|
48
123
|
{
|
|
49
124
|
occur: [
|
|
50
125
|
() => definition.auxiliaryActions !== undefined && !definition.auxiliaryActions.length,
|
|
51
|
-
() => definition.auxiliaryActions !== undefined &&
|
|
52
|
-
|
|
53
|
-
|
|
126
|
+
() => definition.auxiliaryActions !== undefined &&
|
|
127
|
+
definition.auxiliaryActions.some((action) => policy.actions !== undefined && !policy.actions.includes(action)),
|
|
128
|
+
() => definition.auxiliaryActions !== undefined &&
|
|
129
|
+
new Set(definition.auxiliaryActions).size !== definition.auxiliaryActions.length,
|
|
130
|
+
],
|
|
131
|
+
error: invalid,
|
|
132
|
+
tags: ['auxiliary-actions'],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
occur: () => definition.preparedHandoff !== undefined &&
|
|
136
|
+
policy.handoffValues !== undefined &&
|
|
137
|
+
!policy.handoffValues.includes(definition.preparedHandoff),
|
|
138
|
+
error: invalid,
|
|
139
|
+
tags: ['handoff'],
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
occur: () => policy.actions !== undefined && !policy.actions.includes(definition.planIntent),
|
|
143
|
+
error: invalid,
|
|
144
|
+
tags: ['plan'],
|
|
54
145
|
},
|
|
55
|
-
{ occur: () => definition.preparedHandoff !== undefined && policy.handoffValues !== undefined && !policy.handoffValues.includes(definition.preparedHandoff), error: invalid, tags: ['handoff'] },
|
|
56
|
-
{ occur: () => policy.actions !== undefined && !policy.actions.includes(definition.planIntent), error: invalid, tags: ['plan'] },
|
|
57
146
|
{
|
|
58
147
|
occur: [
|
|
59
148
|
() => !definition.steps.length,
|
|
60
|
-
() => definition.steps.some(step => policy.steps !== undefined && !policy.steps.includes(step)),
|
|
149
|
+
() => definition.steps.some((step) => policy.steps !== undefined && !policy.steps.includes(step)),
|
|
61
150
|
() => new Set(definition.steps).size !== definition.steps.length,
|
|
62
|
-
],
|
|
151
|
+
],
|
|
152
|
+
error: invalid,
|
|
153
|
+
tags: ['steps'],
|
|
63
154
|
},
|
|
64
155
|
], tags);
|
|
65
|
-
// App assertions may use implementation helpers; never pass a compiled view as the source
|
|
156
|
+
// App assertions may use implementation helpers; never pass a compiled view as the source
|
|
157
|
+
// instance.
|
|
66
158
|
(0, synchronous_js_1.assertion)(policy.assertDefinition?.(input), 'Registry definition assertions must return void synchronously');
|
|
67
|
-
(0, rules_js_1.breakWhile)(this.byId.has(definition.id), () => policy.errors?.duplicate?.(definition.id) ??
|
|
159
|
+
(0, rules_js_1.breakWhile)(this.byId.has(definition.id), () => policy.errors?.duplicate?.(definition.id) ??
|
|
160
|
+
new Error(`Duplicate intent: ${definition.id}`), [...tags, 'duplicate']);
|
|
68
161
|
this.byId.set(definition.id, Object.freeze({
|
|
69
|
-
...definition,
|
|
70
|
-
|
|
162
|
+
...definition,
|
|
163
|
+
steps: Object.freeze([...definition.steps]),
|
|
164
|
+
...(definition.auxiliaryActions
|
|
165
|
+
? { auxiliaryActions: Object.freeze([...definition.auxiliaryActions]) }
|
|
166
|
+
: {}),
|
|
71
167
|
}));
|
|
72
168
|
return this;
|
|
73
169
|
}
|
|
170
|
+
/** Register every intent in iteration order. */
|
|
74
171
|
registerAll(definitions) {
|
|
75
172
|
for (const definition of definitions)
|
|
76
173
|
this.register(definition);
|
|
77
174
|
return this;
|
|
78
175
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
176
|
+
/** Registered intent for `goal`, or `undefined` when it is absent. */
|
|
177
|
+
get(goal) {
|
|
178
|
+
return this.byId.get(goal);
|
|
179
|
+
}
|
|
180
|
+
/** Whether an intent id is registered. */
|
|
181
|
+
has(goal) {
|
|
182
|
+
return this.byId.has(goal);
|
|
183
|
+
}
|
|
184
|
+
/** Registered intent ids in registration order. */
|
|
185
|
+
ids() {
|
|
186
|
+
return Object.freeze([...this.byId.keys()]);
|
|
187
|
+
}
|
|
188
|
+
/** Registered intents in registration order. */
|
|
189
|
+
get definitions() {
|
|
190
|
+
return Object.freeze([...this.byId.values()]);
|
|
191
|
+
}
|
|
192
|
+
/** Iterate the registered intents. */
|
|
193
|
+
values() {
|
|
194
|
+
return this.byId.values();
|
|
195
|
+
}
|
|
196
|
+
/** Iterate `[id, intent]` pairs. */
|
|
197
|
+
entries() {
|
|
198
|
+
return this.byId.entries();
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Registered intent for `id`.
|
|
202
|
+
*
|
|
203
|
+
* @throws TypeError When the id is not registered.
|
|
204
|
+
*/
|
|
205
|
+
require(id) {
|
|
206
|
+
const value = this.byId.get(id);
|
|
207
|
+
if (!value)
|
|
208
|
+
throw new TypeError(`Unknown intent: ${id}`);
|
|
209
|
+
return value;
|
|
210
|
+
}
|
|
211
|
+
/** Whether the intent declares this step; unknown intents allow nothing. */
|
|
212
|
+
allows(goal, step) {
|
|
213
|
+
return this.byId.get(goal)?.steps.includes(step) ?? false;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Copy the selected intents out of the registry.
|
|
217
|
+
*
|
|
218
|
+
* @param goals - Ids to include; the default is every registered id, in registry order.
|
|
219
|
+
* @returns Descriptions whose arrays are copied so callers cannot mutate registry state.
|
|
220
|
+
*/
|
|
88
221
|
describe(goals = this.ids()) {
|
|
89
222
|
const selected = new Set(goals);
|
|
90
|
-
return [...this.byId.values()]
|
|
91
|
-
.
|
|
223
|
+
return [...this.byId.values()]
|
|
224
|
+
.filter((item) => selected.has(item.id))
|
|
225
|
+
.map((item) => ({ ...item, steps: [...item.steps] }));
|
|
226
|
+
}
|
|
227
|
+
/** Finalize the registry; no registration is accepted afterwards. */
|
|
228
|
+
seal() {
|
|
229
|
+
this.sealed = true;
|
|
230
|
+
return this;
|
|
92
231
|
}
|
|
93
|
-
seal() { this.sealed = true; return this; }
|
|
94
232
|
}
|
|
95
233
|
exports.IntentRegistry = IntentRegistry;
|
|
96
|
-
/**
|
|
234
|
+
/**
|
|
235
|
+
* Create and seal a complete catalog; use the constructor for incremental installation.
|
|
236
|
+
*
|
|
237
|
+
* @param definitions - Intent declarations registered in iteration order.
|
|
238
|
+
* @param policy - Optional registry policy forwarded to the constructor.
|
|
239
|
+
* @returns A sealed registry.
|
|
240
|
+
* @throws A configured error for the first invalid or duplicate declaration.
|
|
241
|
+
*/
|
|
97
242
|
function createIntentRegistry(definitions, policy = {}) {
|
|
98
243
|
return new IntentRegistry(policy).registerAll(definitions).seal();
|
|
99
244
|
}
|
|
@@ -5,62 +5,148 @@ exports.createScopeRegistry = createScopeRegistry;
|
|
|
5
5
|
const synchronous_js_1 = require("../../utils/synchronous.js");
|
|
6
6
|
const rules_js_1 = require("../../utils/rules.js");
|
|
7
7
|
const registration_js_1 = require("../../utils/registration.js");
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Generic scope relationships; categories, intent policy and extra fields belong to the host.
|
|
10
|
+
*
|
|
11
|
+
* A scope is addressable by its id or by any of its aliases; aliases resolve to the declaring
|
|
12
|
+
* scope, and a name may be claimed only once across both namespaces.
|
|
13
|
+
*/
|
|
9
14
|
class ScopeRegistry {
|
|
15
|
+
/** Create and seal a complete scope catalog in one call. */
|
|
10
16
|
static create = createScopeRegistry;
|
|
11
17
|
byId = new Map();
|
|
12
18
|
sources = new Map();
|
|
13
19
|
aliases = new Map();
|
|
14
20
|
sealed = false;
|
|
15
21
|
policy;
|
|
22
|
+
/**
|
|
23
|
+
* @param policy - Optional id pattern, categories, required-binding switches, intent
|
|
24
|
+
* acceptance override, error wording and assertion hook; lists are copied on construction.
|
|
25
|
+
*/
|
|
16
26
|
constructor(policy = {}) {
|
|
17
27
|
const pattern = policy.idPattern;
|
|
18
28
|
const errorPorts = policy.errors, { sealed, invalid } = errorPorts ?? {};
|
|
19
29
|
const listFields = ['categories', 'tags'];
|
|
20
|
-
const lists = Object.fromEntries(listFields.map(key => {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
30
|
+
const lists = Object.fromEntries(listFields.map((key) => {
|
|
31
|
+
const value = policy[key];
|
|
32
|
+
return [key, value === undefined ? undefined : Object.freeze([...value])];
|
|
33
|
+
}));
|
|
34
|
+
this.policy = Object.freeze({
|
|
35
|
+
...(0, registration_js_1.registrationData)(policy, [
|
|
36
|
+
'idPattern',
|
|
37
|
+
'assertDefinition',
|
|
38
|
+
'acceptsIntent',
|
|
39
|
+
'errors',
|
|
40
|
+
...listFields,
|
|
41
|
+
]),
|
|
42
|
+
...lists,
|
|
43
|
+
idPattern: pattern ? new RegExp(pattern.source, pattern.flags) : undefined,
|
|
44
|
+
errors: errorPorts &&
|
|
45
|
+
Object.freeze({
|
|
46
|
+
sealed: typeof sealed === 'function' ? sealed.bind(errorPorts) : sealed,
|
|
47
|
+
invalid: typeof invalid === 'function' ? invalid.bind(errorPorts) : invalid,
|
|
48
|
+
}),
|
|
49
|
+
assertDefinition: policy.assertDefinition?.bind(policy),
|
|
50
|
+
acceptsIntent: policy.acceptsIntent?.bind(policy),
|
|
51
|
+
});
|
|
25
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Validate, freeze and add one scope together with its aliases.
|
|
55
|
+
*
|
|
56
|
+
* Every name is checked for conflicts before any of them is stored, so a rejected scope
|
|
57
|
+
* leaves no partial alias entry behind.
|
|
58
|
+
*
|
|
59
|
+
* @param input - Scope declaration; the raw object is retained for `acceptsIntent` overrides
|
|
60
|
+
* while the compiled copy serves lookups.
|
|
61
|
+
* @returns This registry, for chaining.
|
|
62
|
+
* @throws A configured error for a sealed registry, an invalid name/description/category,
|
|
63
|
+
* a missing required binding, duplicate intent ids or an already-claimed name.
|
|
64
|
+
*/
|
|
26
65
|
register(input) {
|
|
27
|
-
const definition = {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
66
|
+
const definition = {
|
|
67
|
+
...(0, registration_js_1.registrationData)(input, [
|
|
68
|
+
'id',
|
|
69
|
+
'description',
|
|
70
|
+
'category',
|
|
71
|
+
'intentIds',
|
|
72
|
+
'queryScopeIds',
|
|
73
|
+
'knowledgeTopicIds',
|
|
74
|
+
'toolIds',
|
|
75
|
+
'aliases',
|
|
76
|
+
'evidence',
|
|
77
|
+
'contextTier',
|
|
78
|
+
]),
|
|
79
|
+
id: input.id,
|
|
80
|
+
description: input.description,
|
|
81
|
+
category: input.category,
|
|
82
|
+
intentIds: input.intentIds ?? [],
|
|
83
|
+
queryScopeIds: input.queryScopeIds ?? [],
|
|
84
|
+
knowledgeTopicIds: input.knowledgeTopicIds ?? [],
|
|
85
|
+
toolIds: input.toolIds ?? [],
|
|
86
|
+
aliases: input.aliases,
|
|
87
|
+
evidence: input.evidence,
|
|
88
|
+
contextTier: input.contextTier,
|
|
31
89
|
};
|
|
32
90
|
const names = [definition.id, ...(definition.aliases ?? [])];
|
|
33
91
|
const policy = this.policy, tags = policy.tags ?? [];
|
|
34
92
|
const invalid = policy.errors?.invalid ?? 'Invalid scope definition';
|
|
35
|
-
const validName = (name) => {
|
|
36
|
-
|
|
37
|
-
|
|
93
|
+
const validName = (name) => {
|
|
94
|
+
if (typeof name !== 'string' || !name.trim())
|
|
95
|
+
return false;
|
|
96
|
+
if (!policy.idPattern)
|
|
97
|
+
return true;
|
|
98
|
+
policy.idPattern.lastIndex = 0;
|
|
99
|
+
return policy.idPattern.test(name);
|
|
100
|
+
};
|
|
38
101
|
(0, rules_js_1.breakWhile)([
|
|
39
|
-
{
|
|
102
|
+
{
|
|
103
|
+
occur: () => this.sealed,
|
|
104
|
+
error: policy.errors?.sealed ?? 'Scope registry is sealed',
|
|
105
|
+
tags: ['sealed'],
|
|
106
|
+
},
|
|
40
107
|
{
|
|
41
108
|
occur: [
|
|
42
109
|
() => !names.every(validName),
|
|
43
110
|
() => !definition.description.trim(),
|
|
44
111
|
() => policy.categories !== undefined && !policy.categories.includes(definition.category),
|
|
45
|
-
],
|
|
112
|
+
],
|
|
113
|
+
error: invalid,
|
|
114
|
+
tags: ['identity'],
|
|
46
115
|
},
|
|
47
|
-
{ occur: () => policy.requireIntents === true && !definition.intentIds.length, error: invalid, tags: ['intents', 'required'] },
|
|
48
116
|
{
|
|
49
|
-
occur:
|
|
50
|
-
error: invalid,
|
|
117
|
+
occur: () => policy.requireIntents === true && !definition.intentIds.length,
|
|
118
|
+
error: invalid,
|
|
119
|
+
tags: ['intents', 'required'],
|
|
51
120
|
},
|
|
52
121
|
{
|
|
53
|
-
occur: [
|
|
54
|
-
|
|
122
|
+
occur: [
|
|
123
|
+
() => policy.requireSources === true &&
|
|
124
|
+
!definition.queryScopeIds.length &&
|
|
125
|
+
!definition.knowledgeTopicIds.length,
|
|
126
|
+
() => policy.requireTools === true && !definition.toolIds.length,
|
|
127
|
+
],
|
|
128
|
+
error: invalid,
|
|
129
|
+
tags: ['capability-bindings'],
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
occur: [
|
|
133
|
+
() => definition.intentIds.some((intent) => typeof intent !== 'string'),
|
|
134
|
+
() => new Set(definition.intentIds).size !== definition.intentIds.length,
|
|
135
|
+
],
|
|
136
|
+
error: invalid,
|
|
137
|
+
tags: ['intents', 'values'],
|
|
55
138
|
},
|
|
56
139
|
], tags);
|
|
57
140
|
(0, synchronous_js_1.assertion)(policy.assertDefinition?.(input), 'Registry definition assertions must return void synchronously');
|
|
58
|
-
(0, rules_js_1.breakWhile)(names.some(name => this.byId.has(name) || this.aliases.has(name)), invalid, [...tags, 'duplicate']);
|
|
141
|
+
(0, rules_js_1.breakWhile)(names.some((name) => this.byId.has(name) || this.aliases.has(name)), invalid, [...tags, 'duplicate']);
|
|
59
142
|
const frozen = Object.freeze({
|
|
60
|
-
...definition,
|
|
61
|
-
|
|
143
|
+
...definition,
|
|
144
|
+
intentIds: Object.freeze([...definition.intentIds]),
|
|
145
|
+
toolIds: Object.freeze([...definition.toolIds]),
|
|
146
|
+
queryScopeIds: Object.freeze([...definition.queryScopeIds]),
|
|
147
|
+
knowledgeTopicIds: Object.freeze([...definition.knowledgeTopicIds]),
|
|
62
148
|
aliases: Object.freeze([...(definition.aliases ?? [])]),
|
|
63
|
-
evidence: Object.freeze([...(definition.evidence ?? [])].map(item => Object.freeze((0, registration_js_1.registrationData)(item)))),
|
|
149
|
+
evidence: Object.freeze([...(definition.evidence ?? [])].map((item) => Object.freeze((0, registration_js_1.registrationData)(item)))),
|
|
64
150
|
});
|
|
65
151
|
this.byId.set(definition.id, frozen);
|
|
66
152
|
this.sources.set(definition.id, input);
|
|
@@ -68,43 +154,126 @@ class ScopeRegistry {
|
|
|
68
154
|
this.aliases.set(alias, definition.id);
|
|
69
155
|
return this;
|
|
70
156
|
}
|
|
157
|
+
/** Register every scope in iteration order. */
|
|
71
158
|
registerAll(definitions) {
|
|
72
159
|
for (const definition of definitions)
|
|
73
160
|
this.register(definition);
|
|
74
161
|
return this;
|
|
75
162
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
163
|
+
/** Finalize the registry; no registration is accepted afterwards. */
|
|
164
|
+
seal() {
|
|
165
|
+
this.sealed = true;
|
|
166
|
+
return this;
|
|
167
|
+
}
|
|
168
|
+
/** Registered scopes in registration order. */
|
|
169
|
+
get definitions() {
|
|
170
|
+
return Object.freeze([...this.byId.values()]);
|
|
171
|
+
}
|
|
172
|
+
/** Registered scope ids in registration order; aliases are not included. */
|
|
173
|
+
ids() {
|
|
174
|
+
return Object.freeze([...this.byId.keys()]);
|
|
175
|
+
}
|
|
176
|
+
/** Iterate the registered scopes. */
|
|
177
|
+
values() {
|
|
178
|
+
return this.byId.values();
|
|
179
|
+
}
|
|
180
|
+
/** Iterate `[id, scope]` pairs. */
|
|
181
|
+
entries() {
|
|
182
|
+
return this.byId.entries();
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Registered scope for an id or alias.
|
|
186
|
+
*
|
|
187
|
+
* @throws TypeError When the name resolves to nothing.
|
|
188
|
+
*/
|
|
189
|
+
require(id) {
|
|
190
|
+
const value = this.get(id);
|
|
191
|
+
if (!value)
|
|
192
|
+
throw new TypeError(`Unknown scope: ${id}`);
|
|
193
|
+
return value;
|
|
194
|
+
}
|
|
195
|
+
/** Resolve an alias to its scope id; unknown names are returned unchanged. */
|
|
196
|
+
normalize(scope) {
|
|
197
|
+
return this.aliases.get(scope) ?? scope;
|
|
198
|
+
}
|
|
199
|
+
/** Registered scope for an id or alias, or `undefined` for a null/unknown name. */
|
|
200
|
+
get(scope) {
|
|
201
|
+
return scope ? this.byId.get(this.normalize(scope)) : undefined;
|
|
202
|
+
}
|
|
203
|
+
/** Whether the name resolves to a registered scope. */
|
|
204
|
+
has(scope) {
|
|
205
|
+
return !!this.get(scope);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Whether a scope accepts an intent.
|
|
209
|
+
*
|
|
210
|
+
* The App may override the declared `intentIds` through `acceptsIntent`; without an
|
|
211
|
+
* override the membership check applies.
|
|
212
|
+
*/
|
|
86
213
|
acceptsIntent(scope, goal) {
|
|
87
214
|
const definition = this.get(scope);
|
|
88
215
|
if (!definition)
|
|
89
216
|
return false;
|
|
90
217
|
const ids = definition.intentIds;
|
|
91
|
-
return this.policy.acceptsIntent
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
218
|
+
return this.policy.acceptsIntent
|
|
219
|
+
? (0, synchronous_js_1.booleanResult)(this.policy.acceptsIntent(this.sources.get(this.normalize(scope)), goal), 'Scope intent predicates must return boolean synchronously')
|
|
220
|
+
: ids.includes(goal);
|
|
221
|
+
}
|
|
222
|
+
/** Whether the scope declares this query scope; a null scope accepts nothing. */
|
|
223
|
+
acceptsQuery(scope, queryScope) {
|
|
224
|
+
const ids = this.get(scope)?.queryScopeIds ?? [];
|
|
225
|
+
return !!scope && ids.includes(queryScope);
|
|
226
|
+
}
|
|
227
|
+
/** Whether the scope belongs to the given App category. */
|
|
228
|
+
is(scope, category) {
|
|
229
|
+
return this.get(scope)?.category === category;
|
|
230
|
+
}
|
|
231
|
+
/** Every query scope declared by any registered scope, deduplicated. */
|
|
232
|
+
queryScopeIds() {
|
|
233
|
+
return [...new Set([...this.byId.values()].flatMap((item) => item.queryScopeIds))];
|
|
234
|
+
}
|
|
235
|
+
/** Knowledge topic ids of one scope; copied so callers cannot mutate the registry. */
|
|
236
|
+
topics(scope) {
|
|
237
|
+
return [...(this.get(scope)?.knowledgeTopicIds ?? [])];
|
|
238
|
+
}
|
|
239
|
+
/** Evidence declarations of one scope; copied so callers cannot mutate the registry. */
|
|
240
|
+
evidence(scope) {
|
|
241
|
+
return [...(this.get(scope)?.evidence ?? [])];
|
|
242
|
+
}
|
|
243
|
+
/** Declared context tier of one scope, if any. */
|
|
244
|
+
contextTier(scope) {
|
|
245
|
+
return this.get(scope)?.contextTier;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Copy the scopes that accept at least one of the given intents.
|
|
249
|
+
*
|
|
250
|
+
* @param goals - Intent ids to filter by; omit to include every registered scope.
|
|
251
|
+
* @returns Descriptions whose arrays are copied so callers cannot mutate registry state.
|
|
252
|
+
*/
|
|
99
253
|
describe(goals) {
|
|
100
254
|
const selected = goals ? new Set(goals) : undefined;
|
|
101
|
-
return [...this.byId.values()]
|
|
102
|
-
.
|
|
103
|
-
|
|
255
|
+
return [...this.byId.values()]
|
|
256
|
+
.filter((item) => !selected || item.intentIds.some((goal) => selected.has(goal)))
|
|
257
|
+
.map((item) => ({
|
|
258
|
+
...item,
|
|
259
|
+
intentIds: [...item.intentIds],
|
|
260
|
+
queryScopeIds: [...item.queryScopeIds],
|
|
261
|
+
knowledgeTopicIds: [...item.knowledgeTopicIds],
|
|
262
|
+
toolIds: [...item.toolIds],
|
|
263
|
+
aliases: [...item.aliases],
|
|
264
|
+
evidence: [...item.evidence],
|
|
265
|
+
}));
|
|
104
266
|
}
|
|
105
267
|
}
|
|
106
268
|
exports.ScopeRegistry = ScopeRegistry;
|
|
107
|
-
/**
|
|
269
|
+
/**
|
|
270
|
+
* Create and seal a complete catalog; use the constructor for incremental installation.
|
|
271
|
+
*
|
|
272
|
+
* @param definitions - Scope declarations registered in iteration order.
|
|
273
|
+
* @param policy - Optional registry policy forwarded to the constructor.
|
|
274
|
+
* @returns A sealed registry.
|
|
275
|
+
* @throws A configured error for the first invalid or duplicate declaration.
|
|
276
|
+
*/
|
|
108
277
|
function createScopeRegistry(definitions, policy = {}) {
|
|
109
278
|
return new ScopeRegistry(policy).registerAll(definitions).seal();
|
|
110
279
|
}
|