@adonis-agora/agent 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/configure.d.ts +18 -0
- package/dist/configure.d.ts.map +1 -0
- package/dist/configure.js +29 -0
- package/dist/configure.js.map +1 -0
- package/dist/providers/agent_provider.d.ts +25 -0
- package/dist/providers/agent_provider.d.ts.map +1 -0
- package/dist/providers/agent_provider.js +511 -0
- package/dist/providers/agent_provider.js.map +1 -0
- package/dist/src/actor-resolver.d.ts +41 -0
- package/dist/src/actor-resolver.d.ts.map +1 -0
- package/dist/src/agent-deps-factory.d.ts +59 -0
- package/dist/src/agent-deps-factory.d.ts.map +1 -0
- package/dist/src/agent-deps-factory.js +111 -0
- package/dist/src/agent-deps-factory.js.map +1 -0
- package/dist/src/agent-deps.d.ts +42 -0
- package/dist/src/agent-deps.d.ts.map +1 -0
- package/dist/src/agent-deps.js +5 -0
- package/dist/src/agent-deps.js.map +1 -0
- package/dist/src/agent-loop.d.ts +101 -0
- package/dist/src/agent-loop.d.ts.map +1 -0
- package/dist/src/agent-loop.js +396 -0
- package/dist/src/agent-loop.js.map +1 -0
- package/dist/src/agent-registry.d.ts +10 -0
- package/dist/src/agent-registry.d.ts.map +1 -0
- package/dist/src/agent-service.d.ts +50 -0
- package/dist/src/agent-service.d.ts.map +1 -0
- package/dist/src/agent-service.js +82 -0
- package/dist/src/agent-service.js.map +1 -0
- package/dist/src/ai-sdk/ai-sdk-model.d.ts +17 -0
- package/dist/src/ai-sdk/ai-sdk-model.d.ts.map +1 -0
- package/dist/src/ai-sdk/ai-sdk-model.js +263 -0
- package/dist/src/ai-sdk/ai-sdk-model.js.map +1 -0
- package/dist/src/ai-sdk/index.d.ts +2 -0
- package/dist/src/ai-sdk/index.d.ts.map +1 -0
- package/dist/src/ai-tool-ref.d.ts +79 -0
- package/dist/src/ai-tool-ref.d.ts.map +1 -0
- package/dist/src/ai-tool-ref.js +81 -0
- package/dist/src/ai-tool-ref.js.map +1 -0
- package/dist/src/authorizer.d.ts +18 -0
- package/dist/src/authorizer.d.ts.map +1 -0
- package/dist/src/authz/authz-tool-authorizer.d.ts +85 -0
- package/dist/src/authz/authz-tool-authorizer.d.ts.map +1 -0
- package/dist/src/authz/authz-tool-authorizer.js +63 -0
- package/dist/src/authz/authz-tool-authorizer.js.map +1 -0
- package/dist/src/authz/index.d.ts +3 -0
- package/dist/src/authz/index.d.ts.map +1 -0
- package/dist/src/authz/index.js +2 -0
- package/dist/src/authz/index.js.map +1 -0
- package/dist/src/data/data-tool.d.ts +64 -0
- package/dist/src/data/data-tool.d.ts.map +1 -0
- package/dist/src/data/data-tool.js +146 -0
- package/dist/src/data/data-tool.js.map +1 -0
- package/dist/src/data/index.d.ts +7 -0
- package/dist/src/data/index.d.ts.map +1 -0
- package/dist/src/data/index.js +7 -0
- package/dist/src/data/index.js.map +1 -0
- package/dist/src/data/limit.d.ts +12 -0
- package/dist/src/data/limit.d.ts.map +1 -0
- package/dist/src/data/limit.js +29 -0
- package/dist/src/data/limit.js.map +1 -0
- package/dist/src/data/parser.d.ts +27 -0
- package/dist/src/data/parser.d.ts.map +1 -0
- package/dist/src/data/parser.js +18 -0
- package/dist/src/data/parser.js.map +1 -0
- package/dist/src/data/sql-validator.d.ts +37 -0
- package/dist/src/data/sql-validator.d.ts.map +1 -0
- package/dist/src/data/sql-validator.js +92 -0
- package/dist/src/data/sql-validator.js.map +1 -0
- package/dist/src/data/table-access.d.ts +40 -0
- package/dist/src/data/table-access.d.ts.map +1 -0
- package/dist/src/data/table-access.js +41 -0
- package/dist/src/data/table-access.js.map +1 -0
- package/dist/src/data/tenant-scope.d.ts +39 -0
- package/dist/src/data/tenant-scope.d.ts.map +1 -0
- package/dist/src/data/tenant-scope.js +126 -0
- package/dist/src/data/tenant-scope.js.map +1 -0
- package/dist/src/define_config.d.ts +153 -0
- package/dist/src/define_config.d.ts.map +1 -0
- package/dist/src/define_config.js +7 -0
- package/dist/src/define_config.js.map +1 -0
- package/dist/src/diagnostics.d.ts +82 -0
- package/dist/src/diagnostics.d.ts.map +1 -0
- package/dist/src/diagnostics.js +50 -0
- package/dist/src/diagnostics.js.map +1 -0
- package/dist/src/durable/agent-run-context.d.ts +24 -0
- package/dist/src/durable/agent-run-context.d.ts.map +1 -0
- package/dist/src/durable/agent-run-context.js +17 -0
- package/dist/src/durable/agent-run-context.js.map +1 -0
- package/dist/src/durable/agent-run-workflow.d.ts +37 -0
- package/dist/src/durable/agent-run-workflow.d.ts.map +1 -0
- package/dist/src/durable/agent-run-workflow.js +128 -0
- package/dist/src/durable/agent-run-workflow.js.map +1 -0
- package/dist/src/durable/durable-agent-runner.d.ts +25 -0
- package/dist/src/durable/durable-agent-runner.d.ts.map +1 -0
- package/dist/src/durable/durable-agent-runner.js +59 -0
- package/dist/src/durable/durable-agent-runner.js.map +1 -0
- package/dist/src/durable/index.d.ts +17 -0
- package/dist/src/durable/index.d.ts.map +1 -0
- package/dist/src/durable/index.js +20 -0
- package/dist/src/durable/index.js.map +1 -0
- package/dist/src/index.d.ts +55 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +45 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/personas.d.ts +7 -0
- package/dist/src/personas.d.ts.map +1 -0
- package/dist/src/rag/chunk.d.ts +14 -0
- package/dist/src/rag/chunk.d.ts.map +1 -0
- package/dist/src/rag/chunk.js +42 -0
- package/dist/src/rag/chunk.js.map +1 -0
- package/dist/src/rag/embedding-retriever.d.ts +15 -0
- package/dist/src/rag/embedding-retriever.d.ts.map +1 -0
- package/dist/src/rag/embedding-retriever.js +24 -0
- package/dist/src/rag/embedding-retriever.js.map +1 -0
- package/dist/src/rag/filter.d.ts +6 -0
- package/dist/src/rag/filter.d.ts.map +1 -0
- package/dist/src/rag/filter.js +11 -0
- package/dist/src/rag/filter.js.map +1 -0
- package/dist/src/rag/index.d.ts +8 -0
- package/dist/src/rag/index.d.ts.map +1 -0
- package/dist/src/rag/index.js +8 -0
- package/dist/src/rag/index.js.map +1 -0
- package/dist/src/rag/ingest.d.ts +33 -0
- package/dist/src/rag/ingest.d.ts.map +1 -0
- package/dist/src/rag/ingest.js +37 -0
- package/dist/src/rag/ingest.js.map +1 -0
- package/dist/src/rag/memory-vector-store.d.ts +16 -0
- package/dist/src/rag/memory-vector-store.d.ts.map +1 -0
- package/dist/src/rag/memory-vector-store.js +70 -0
- package/dist/src/rag/memory-vector-store.js.map +1 -0
- package/dist/src/rag/pg-vector-store.d.ts +84 -0
- package/dist/src/rag/pg-vector-store.d.ts.map +1 -0
- package/dist/src/rag/pg-vector-store.js +220 -0
- package/dist/src/rag/pg-vector-store.js.map +1 -0
- package/dist/src/rag/vector-store.d.ts +47 -0
- package/dist/src/rag/vector-store.d.ts.map +1 -0
- package/dist/src/rag/vector-store.js +5 -0
- package/dist/src/rag/vector-store.js.map +1 -0
- package/dist/src/rag-media/diagnostics.d.ts +43 -0
- package/dist/src/rag-media/diagnostics.d.ts.map +1 -0
- package/dist/src/rag-media/diagnostics.js +36 -0
- package/dist/src/rag-media/diagnostics.js.map +1 -0
- package/dist/src/rag-media/index.d.ts +5 -0
- package/dist/src/rag-media/index.d.ts.map +1 -0
- package/dist/src/rag-media/index.js +5 -0
- package/dist/src/rag-media/index.js.map +1 -0
- package/dist/src/rag-media/media-events.d.ts +23 -0
- package/dist/src/rag-media/media-events.d.ts.map +1 -0
- package/dist/src/rag-media/media-events.js +28 -0
- package/dist/src/rag-media/media-events.js.map +1 -0
- package/dist/src/rag-media/media-rag-ingestion.d.ts +155 -0
- package/dist/src/rag-media/media-rag-ingestion.d.ts.map +1 -0
- package/dist/src/rag-media/media-rag-ingestion.js +204 -0
- package/dist/src/rag-media/media-rag-ingestion.js.map +1 -0
- package/dist/src/rag-media/text-extractor.d.ts +46 -0
- package/dist/src/rag-media/text-extractor.d.ts.map +1 -0
- package/dist/src/rag-media/text-extractor.js +92 -0
- package/dist/src/rag-media/text-extractor.js.map +1 -0
- package/dist/src/redis-stream-client.d.ts +29 -0
- package/dist/src/redis-stream-client.d.ts.map +1 -0
- package/dist/src/redis-stream-client.js +2 -0
- package/dist/src/redis-stream-client.js.map +1 -0
- package/dist/src/redis-token-stream-sink.d.ts +36 -0
- package/dist/src/redis-token-stream-sink.d.ts.map +1 -0
- package/dist/src/redis-token-stream-sink.js +94 -0
- package/dist/src/redis-token-stream-sink.js.map +1 -0
- package/dist/src/runners/inline-agent-runner.d.ts +26 -0
- package/dist/src/runners/inline-agent-runner.d.ts.map +1 -0
- package/dist/src/runners/inline-agent-runner.js +85 -0
- package/dist/src/runners/inline-agent-runner.js.map +1 -0
- package/dist/src/spi/actor-directory.d.ts +23 -0
- package/dist/src/spi/actor-directory.d.ts.map +1 -0
- package/dist/src/spi/actor-directory.js +2 -0
- package/dist/src/spi/actor-directory.js.map +1 -0
- package/dist/src/spi/actor-resolver.d.ts +18 -0
- package/dist/src/spi/actor-resolver.d.ts.map +1 -0
- package/dist/src/spi/agent-runner.d.ts +20 -0
- package/dist/src/spi/agent-runner.d.ts.map +1 -0
- package/dist/src/spi/agent-store.d.ts +104 -0
- package/dist/src/spi/agent-store.d.ts.map +1 -0
- package/dist/src/spi/agent-store.js +2 -0
- package/dist/src/spi/agent-store.js.map +1 -0
- package/dist/src/spi/attachment-staging.d.ts +27 -0
- package/dist/src/spi/attachment-staging.d.ts.map +1 -0
- package/dist/src/spi/attachment-staging.js +2 -0
- package/dist/src/spi/attachment-staging.js.map +1 -0
- package/dist/src/spi/embedding-provider.d.ts +12 -0
- package/dist/src/spi/embedding-provider.d.ts.map +1 -0
- package/dist/src/spi/embedding-provider.js +2 -0
- package/dist/src/spi/embedding-provider.js.map +1 -0
- package/dist/src/spi/governance-queries.d.ts +215 -0
- package/dist/src/spi/governance-queries.d.ts.map +1 -0
- package/dist/src/spi/governance-queries.js +15 -0
- package/dist/src/spi/governance-queries.js.map +1 -0
- package/dist/src/spi/model-provider.d.ts +41 -0
- package/dist/src/spi/model-provider.d.ts.map +1 -0
- package/dist/src/spi/pricing-store.d.ts +45 -0
- package/dist/src/spi/pricing-store.d.ts.map +1 -0
- package/dist/src/spi/pricing-store.js +24 -0
- package/dist/src/spi/pricing-store.js.map +1 -0
- package/dist/src/spi/quota-store.d.ts +7 -0
- package/dist/src/spi/quota-store.d.ts.map +1 -0
- package/dist/src/spi/reranker.d.ts +17 -0
- package/dist/src/spi/reranker.d.ts.map +1 -0
- package/dist/src/spi/reranker.js +2 -0
- package/dist/src/spi/reranker.js.map +1 -0
- package/dist/src/spi/retriever.d.ts +28 -0
- package/dist/src/spi/retriever.d.ts.map +1 -0
- package/dist/src/spi/retriever.js +11 -0
- package/dist/src/spi/retriever.js.map +1 -0
- package/dist/src/spi/roles-policy.d.ts +11 -0
- package/dist/src/spi/roles-policy.d.ts.map +1 -0
- package/dist/src/spi/tool.d.ts +21 -0
- package/dist/src/spi/tool.d.ts.map +1 -0
- package/dist/src/stores/factory.d.ts +363 -0
- package/dist/src/stores/factory.d.ts.map +1 -0
- package/dist/src/stores/factory.js +341 -0
- package/dist/src/stores/factory.js.map +1 -0
- package/dist/src/stores/ledger-quota.d.ts +23 -0
- package/dist/src/stores/ledger-quota.d.ts.map +1 -0
- package/dist/src/stores/ledger-quota.js +32 -0
- package/dist/src/stores/ledger-quota.js.map +1 -0
- package/dist/src/stores/lucid-governance-queries.d.ts +73 -0
- package/dist/src/stores/lucid-governance-queries.d.ts.map +1 -0
- package/dist/src/stores/lucid-governance-queries.js +510 -0
- package/dist/src/stores/lucid-governance-queries.js.map +1 -0
- package/dist/src/stores/lucid-pricing.d.ts +20 -0
- package/dist/src/stores/lucid-pricing.d.ts.map +1 -0
- package/dist/src/stores/lucid-pricing.js +67 -0
- package/dist/src/stores/lucid-pricing.js.map +1 -0
- package/dist/src/stores/lucid-schema.d.ts +37 -0
- package/dist/src/stores/lucid-schema.d.ts.map +1 -0
- package/dist/src/stores/lucid-schema.js +139 -0
- package/dist/src/stores/lucid-schema.js.map +1 -0
- package/dist/src/stores/lucid.d.ts +73 -0
- package/dist/src/stores/lucid.d.ts.map +1 -0
- package/dist/src/stores/lucid.js +400 -0
- package/dist/src/stores/lucid.js.map +1 -0
- package/dist/src/telescope/dashboard.d.ts +21 -0
- package/dist/src/telescope/dashboard.d.ts.map +1 -0
- package/dist/src/telescope/dashboard.js +140 -0
- package/dist/src/telescope/dashboard.js.map +1 -0
- package/dist/src/telescope/data-providers.d.ts +39 -0
- package/dist/src/telescope/data-providers.d.ts.map +1 -0
- package/dist/src/telescope/data-providers.js +345 -0
- package/dist/src/telescope/data-providers.js.map +1 -0
- package/dist/src/telescope/extension.d.ts +27 -0
- package/dist/src/telescope/extension.d.ts.map +1 -0
- package/dist/src/telescope/extension.js +45 -0
- package/dist/src/telescope/extension.js.map +1 -0
- package/dist/src/telescope/index.d.ts +5 -0
- package/dist/src/telescope/index.d.ts.map +1 -0
- package/dist/src/telescope/index.js +4 -0
- package/dist/src/telescope/index.js.map +1 -0
- package/dist/src/telescope/telescope-sdk.d.ts +126 -0
- package/dist/src/telescope/telescope-sdk.d.ts.map +1 -0
- package/dist/src/telescope/telescope-sdk.js +15 -0
- package/dist/src/telescope/telescope-sdk.js.map +1 -0
- package/dist/src/testing/fake-embedding-provider.d.ts +37 -0
- package/dist/src/testing/fake-embedding-provider.d.ts.map +1 -0
- package/dist/src/testing/fake-embedding-provider.js +67 -0
- package/dist/src/testing/fake-embedding-provider.js.map +1 -0
- package/dist/src/testing/fake-media.d.ts +44 -0
- package/dist/src/testing/fake-media.d.ts.map +1 -0
- package/dist/src/testing/fake-media.js +69 -0
- package/dist/src/testing/fake-media.js.map +1 -0
- package/dist/src/testing/fake-model-provider.d.ts +29 -0
- package/dist/src/testing/fake-model-provider.d.ts.map +1 -0
- package/dist/src/testing/in-memory-actor-directory.d.ts +14 -0
- package/dist/src/testing/in-memory-actor-directory.d.ts.map +1 -0
- package/dist/src/testing/in-memory-actor-directory.js +27 -0
- package/dist/src/testing/in-memory-actor-directory.js.map +1 -0
- package/dist/src/testing/in-memory-attachment-staging.d.ts +22 -0
- package/dist/src/testing/in-memory-attachment-staging.d.ts.map +1 -0
- package/dist/src/testing/in-memory-attachment-staging.js +28 -0
- package/dist/src/testing/in-memory-attachment-staging.js.map +1 -0
- package/dist/src/testing/in-memory-governance-queries.d.ts +34 -0
- package/dist/src/testing/in-memory-governance-queries.d.ts.map +1 -0
- package/dist/src/testing/in-memory-governance-queries.js +373 -0
- package/dist/src/testing/in-memory-governance-queries.js.map +1 -0
- package/dist/src/testing/in-memory-pricing.d.ts +13 -0
- package/dist/src/testing/in-memory-pricing.d.ts.map +1 -0
- package/dist/src/testing/in-memory-pricing.js +27 -0
- package/dist/src/testing/in-memory-pricing.js.map +1 -0
- package/dist/src/testing/in-memory-quota.d.ts +11 -0
- package/dist/src/testing/in-memory-quota.d.ts.map +1 -0
- package/dist/src/testing/in-memory-sink.d.ts +14 -0
- package/dist/src/testing/in-memory-sink.d.ts.map +1 -0
- package/dist/src/testing/in-memory-store.d.ts +119 -0
- package/dist/src/testing/in-memory-store.d.ts.map +1 -0
- package/dist/src/testing/in-memory-store.js +317 -0
- package/dist/src/testing/in-memory-store.js.map +1 -0
- package/dist/src/testing/index.d.ts +11 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +11 -0
- package/dist/src/testing/index.js.map +1 -0
- package/dist/src/tool-discovery.d.ts +35 -0
- package/dist/src/tool-discovery.d.ts.map +1 -0
- package/dist/src/tool-registry.d.ts +45 -0
- package/dist/src/tool-registry.d.ts.map +1 -0
- package/dist/src/tool-retry.d.ts +56 -0
- package/dist/src/tool-retry.d.ts.map +1 -0
- package/dist/src/tool-retry.js +95 -0
- package/dist/src/tool-retry.js.map +1 -0
- package/dist/src/types.d.ts +222 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/stubs/config/agent.stub +55 -0
- package/dist/stubs/database/migrations/create_agent_rag_chunks.stub +41 -0
- package/dist/stubs/database/migrations/create_agent_run_tracking.stub +80 -0
- package/dist/stubs/database/migrations/create_agent_tables.stub +113 -0
- package/package.json +174 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var AgentRunWorkflow_1;
|
|
8
|
+
import { ContinueAsNew, Workflow, WorkflowSuspended, } from '@adonis-agora/durable';
|
|
9
|
+
import { utcDay } from '../agent-deps.js';
|
|
10
|
+
import { runAgentLoop } from '../agent-loop.js';
|
|
11
|
+
import { getDurableAgentContext } from './agent-run-context.js';
|
|
12
|
+
/**
|
|
13
|
+
* A control-flow signal (suspend / continue-as-new) the durable engine throws THROUGH the workflow
|
|
14
|
+
* body to pause it — NOT a failure. `runAgentLoop` suspends by letting `ctx.waitForSignal` (HITL) or
|
|
15
|
+
* `ctx.child` (delegation) throw here; the workflow's catch must re-throw it so the engine handles
|
|
16
|
+
* it. Checked by `instanceof` AND by `name` so a duplicated copy of the durable module (whose class
|
|
17
|
+
* identity differs) is still recognised.
|
|
18
|
+
*/
|
|
19
|
+
function isControlFlowSignal(error) {
|
|
20
|
+
if (error instanceof WorkflowSuspended || error instanceof ContinueAsNew) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
const name = error?.name;
|
|
24
|
+
return name === 'WorkflowSuspended' || name === 'ContinueAsNew';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Wrap a {@link SinkWriter} so a CHILD run forwards tokens into the top-level stream but never closes
|
|
28
|
+
* it: the top-level run owns the stream's lifecycle across however many delegations it spans, so a
|
|
29
|
+
* child's `end()` must be a no-op (ending the shared stream mid-parent-run would cut the human off).
|
|
30
|
+
*/
|
|
31
|
+
function childSinkWriter(inner) {
|
|
32
|
+
return {
|
|
33
|
+
write: (chunk) => inner.write(chunk),
|
|
34
|
+
end: () => {
|
|
35
|
+
/* the top-level run owns end() */
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The agent turn AS a durable workflow — the replay-safe counterpart of `InlineAgentRunner`. The
|
|
41
|
+
* shared `runAgentLoop` body drives model→tools→model exactly as inline; the durable hooks make it
|
|
42
|
+
* suspend-and-resume:
|
|
43
|
+
* - `step(name, fn)` → `ctx.localStep` — every LLM turn, tool execution, and persist/quota write is a
|
|
44
|
+
* checkpoint, so a replay returns the cached result instead of re-running it (stable ids, no
|
|
45
|
+
* double-write, no re-streamed tokens).
|
|
46
|
+
* - `awaitApproval(call)` → `ctx.waitForSignal('tool:<runId>:<callId>')` — an action tool suspends the
|
|
47
|
+
* run with zero compute until an approve/reject signal arrives (namespaced by run, so one run's
|
|
48
|
+
* decision can never satisfy another's).
|
|
49
|
+
* - `runAgent(name, task)` → `ctx.child(AgentRunWorkflow, …)` — sub-agent delegation is a tracked,
|
|
50
|
+
* replay-safe CHILD run (a node in the durable dashboard) that streams into the top-level sink.
|
|
51
|
+
* - `openSink()` → the run's own sink writer (top-level) or a {@link childSinkWriter} (a child).
|
|
52
|
+
*
|
|
53
|
+
* Instantiated by the engine with no arguments; its deps come from {@link getDurableAgentContext}.
|
|
54
|
+
*/
|
|
55
|
+
let AgentRunWorkflow = AgentRunWorkflow_1 = class AgentRunWorkflow {
|
|
56
|
+
async run(ctx, input) {
|
|
57
|
+
const { factory, store } = getDurableAgentContext();
|
|
58
|
+
const day = input.day ?? utcDay();
|
|
59
|
+
const deps = factory.forAgent(input.agentName);
|
|
60
|
+
const isChild = input.sinkRunId !== undefined;
|
|
61
|
+
const sinkRunId = input.sinkRunId ?? ctx.runId;
|
|
62
|
+
const hooks = {
|
|
63
|
+
runId: ctx.runId,
|
|
64
|
+
durable: true,
|
|
65
|
+
// A child forwards into the top-level sink (so the human watching the parent sees it) but must
|
|
66
|
+
// not end it; a top-level run opens and owns its own sink keyed by its runId.
|
|
67
|
+
openSink: async () => isChild ? childSinkWriter(await deps.sink.open(sinkRunId)) : deps.sink.open(ctx.runId),
|
|
68
|
+
// HITL: suspend until the run-namespaced signal arrives. This throw escapes the loop cleanly —
|
|
69
|
+
// it happens BEFORE the loop's tool try/catch, so a suspend is never seen as a tool failure.
|
|
70
|
+
awaitApproval: (call) => ctx.waitForSignal(`tool:${ctx.runId}:${call.id}`),
|
|
71
|
+
// Every side effect + control-flow read is a durable local step (memoized on replay).
|
|
72
|
+
step: (name, fn) => ctx.localStep(name, fn),
|
|
73
|
+
// Lets the tool transient-retry loop tell a real suspend/continue-as-new apart from a
|
|
74
|
+
// retryable tool error, so a control-flow signal is never swallowed by a retry.
|
|
75
|
+
isControlFlowError: isControlFlowSignal,
|
|
76
|
+
// Delegation: a fresh transient subthread (checkpointed so its id is replay-stable), then a
|
|
77
|
+
// tracked child run that streams into this run's own top-level sink.
|
|
78
|
+
runAgent: async (agentName, task) => {
|
|
79
|
+
const subThreadId = await ctx.localStep(`subthread:${agentName}`, async () => {
|
|
80
|
+
const thread = await store.createThread({
|
|
81
|
+
actor: input.actor,
|
|
82
|
+
persona: 'default',
|
|
83
|
+
transient: true,
|
|
84
|
+
});
|
|
85
|
+
return thread.id;
|
|
86
|
+
});
|
|
87
|
+
return ctx.child(AgentRunWorkflow_1, {
|
|
88
|
+
agentName,
|
|
89
|
+
threadId: subThreadId,
|
|
90
|
+
actor: input.actor,
|
|
91
|
+
userText: task,
|
|
92
|
+
day,
|
|
93
|
+
delegationDepth: (input.delegationDepth ?? 0) + 1,
|
|
94
|
+
sinkRunId,
|
|
95
|
+
});
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
try {
|
|
99
|
+
return await runAgentLoop({ ...deps, day }, input, hooks);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
// A suspend / continue-as-new is control flow, not a failure — let the engine handle it.
|
|
103
|
+
if (isControlFlowSignal(error)) {
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
// A real failure (e.g. quota exceeded, which throws before the sink is opened) would otherwise
|
|
107
|
+
// leave an HTTP subscriber hanging on a stream that never ends. Surface it on the stream and
|
|
108
|
+
// close it, then rethrow so the engine still records the run as failed. Only a top-level run
|
|
109
|
+
// owns the stream — a child defers the surfaced error to its ancestor, which also unwinds.
|
|
110
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
111
|
+
// Settle the run's persisted outcome (the loop only records completions — it can't catch its
|
|
112
|
+
// own crash). A checkpointed step so a replay re-settles the ONE row idempotently; first-
|
|
113
|
+
// terminal, so it can't clobber a completion. Each run (parent AND child) owns its own row.
|
|
114
|
+
await ctx.localStep('persist:run:fail', () => store.recordRunEnd({ runId: ctx.runId, status: 'failed', error: message }));
|
|
115
|
+
if (!isChild) {
|
|
116
|
+
const writer = await deps.sink.open(ctx.runId);
|
|
117
|
+
await writer.write(new TextEncoder().encode(`\n[error] ${message}`));
|
|
118
|
+
await writer.end();
|
|
119
|
+
}
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
AgentRunWorkflow = AgentRunWorkflow_1 = __decorate([
|
|
125
|
+
Workflow({ name: 'agora.agent.run', version: '1' })
|
|
126
|
+
], AgentRunWorkflow);
|
|
127
|
+
export { AgentRunWorkflow };
|
|
128
|
+
//# sourceMappingURL=agent-run-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-run-workflow.js","sourceRoot":"","sources":["../../../src/durable/agent-run-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { WorkflowEngine } from '@adonis-agora/durable';
|
|
2
|
+
import type { AgentRunner } from '../spi/agent-runner.js';
|
|
3
|
+
import type { AgentStore } from '../spi/agent-store.js';
|
|
4
|
+
import type { AgentRunInput, Decision } from '../types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Runs the agent turn as an `@adonis-agora/durable` workflow ({@link AgentRunWorkflow}) — the opt-in
|
|
7
|
+
* runner (`durable: true`). `start` enqueues the run and returns its id immediately (a worker runs the
|
|
8
|
+
* body and streams to the sink meanwhile); HITL approval is delivered as a durable signal namespaced
|
|
9
|
+
* by run, so it can never cross-resolve another run. Mirrors the {@link InlineAgentRunner} interface.
|
|
10
|
+
*/
|
|
11
|
+
export declare class DurableAgentRunner implements AgentRunner {
|
|
12
|
+
private readonly engine;
|
|
13
|
+
private readonly store?;
|
|
14
|
+
/**
|
|
15
|
+
* `store` is optional so a bare `new DurableAgentRunner(engine)` still works; when passed (the
|
|
16
|
+
* provider does), {@link cancel} settles the `agent_run` row `cancelled` for governance.
|
|
17
|
+
*/
|
|
18
|
+
constructor(engine: WorkflowEngine, store?: AgentStore | undefined);
|
|
19
|
+
start(input: AgentRunInput): Promise<{
|
|
20
|
+
runId: string;
|
|
21
|
+
}>;
|
|
22
|
+
signal(runId: string, toolCallId: string, decision: Decision): Promise<void>;
|
|
23
|
+
cancel(runId: string): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=durable-agent-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durable-agent-runner.d.ts","sourceRoot":"","sources":["../../../src/durable/durable-agent-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAe3D;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IAMlD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IANzB;;;OAGG;gBAEgB,MAAM,EAAE,cAAc,EACtB,KAAK,CAAC,EAAE,UAAU,YAAA;IAG/B,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBvD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5E,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO3C"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { utcDay } from '../agent-deps.js';
|
|
2
|
+
import { AgentRunWorkflow } from './agent-run-workflow.js';
|
|
3
|
+
/**
|
|
4
|
+
* A control-flow signal surfaced out of `engine.start`. With the default in-process dispatcher the
|
|
5
|
+
* body runs on a microtask AFTER `start` returns, so this never fires; but an app that configures a
|
|
6
|
+
* DRIVING dispatcher (a durable worker/tenant) can surface the engine's internal suspend synchronously
|
|
7
|
+
* here — expected control flow, NOT a start failure. Recognised by `name` so it survives a duplicated
|
|
8
|
+
* durable module copy (whose class identity would differ).
|
|
9
|
+
*/
|
|
10
|
+
function isControlFlowSignal(error) {
|
|
11
|
+
const name = error?.name;
|
|
12
|
+
return name === 'WorkflowSuspended' || name === 'ContinueAsNew';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Runs the agent turn as an `@adonis-agora/durable` workflow ({@link AgentRunWorkflow}) — the opt-in
|
|
16
|
+
* runner (`durable: true`). `start` enqueues the run and returns its id immediately (a worker runs the
|
|
17
|
+
* body and streams to the sink meanwhile); HITL approval is delivered as a durable signal namespaced
|
|
18
|
+
* by run, so it can never cross-resolve another run. Mirrors the {@link InlineAgentRunner} interface.
|
|
19
|
+
*/
|
|
20
|
+
export class DurableAgentRunner {
|
|
21
|
+
engine;
|
|
22
|
+
store;
|
|
23
|
+
/**
|
|
24
|
+
* `store` is optional so a bare `new DurableAgentRunner(engine)` still works; when passed (the
|
|
25
|
+
* provider does), {@link cancel} settles the `agent_run` row `cancelled` for governance.
|
|
26
|
+
*/
|
|
27
|
+
constructor(engine, store) {
|
|
28
|
+
this.engine = engine;
|
|
29
|
+
this.store = store;
|
|
30
|
+
}
|
|
31
|
+
async start(input) {
|
|
32
|
+
const stamped = { ...input, day: input.day ?? utcDay() };
|
|
33
|
+
// Own the run id so we can still return it when the run suspends synchronously on start (below).
|
|
34
|
+
const runId = crypto.randomUUID();
|
|
35
|
+
try {
|
|
36
|
+
await this.engine.start(AgentRunWorkflow, stamped, runId);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
// A run that suspends on its first step under a driving dispatcher surfaces a control-flow
|
|
40
|
+
// signal here — the run is already persisted and a worker resumes it, so swallow it and return
|
|
41
|
+
// the id; any other error is a real start failure and propagates.
|
|
42
|
+
if (!isControlFlowSignal(error)) {
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { runId };
|
|
47
|
+
}
|
|
48
|
+
async signal(runId, toolCallId, decision) {
|
|
49
|
+
await this.engine.signal(`tool:${runId}:${toolCallId}`, decision);
|
|
50
|
+
}
|
|
51
|
+
async cancel(runId) {
|
|
52
|
+
// Best-effort: cascade cancellation to children and broadcast to the owning worker. A run that
|
|
53
|
+
// already settled is a no-op. Errors are swallowed — cancel is advisory, not a guarantee.
|
|
54
|
+
await this.engine.cancel(runId).catch(() => undefined);
|
|
55
|
+
// Settle the persisted run `cancelled` (first-terminal: a run that already completed stays put).
|
|
56
|
+
await this.store?.recordRunEnd({ runId, status: 'cancelled' }).catch(() => undefined);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=durable-agent-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durable-agent-runner.js","sourceRoot":"","sources":["../../../src/durable/durable-agent-runner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,OAAO,EAAE,gBAAgB,EAA6B,MAAM,yBAAyB,CAAC;AAEtF;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,KAAc;IACzC,MAAM,IAAI,GAAI,KAAmC,EAAE,IAAI,CAAC;IACxD,OAAO,IAAI,KAAK,mBAAmB,IAAI,IAAI,KAAK,eAAe,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IAMV;IACA;IANnB;;;OAGG;IACH,YACmB,MAAsB,EACtB,KAAkB;QADlB,WAAM,GAAN,MAAM,CAAgB;QACtB,UAAK,GAAL,KAAK,CAAa;IAClC,CAAC;IAEJ,KAAK,CAAC,KAAK,CAAC,KAAoB;QAC9B,MAAM,OAAO,GAAyB,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,MAAM,EAAE,EAAE,CAAC;QAC/E,iGAAiG;QACjG,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,2FAA2F;YAC3F,+FAA+F;YAC/F,kEAAkE;YAClE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,UAAkB,EAAE,QAAkB;QAChE,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,+FAA+F;QAC/F,0FAA0F;QAC1F,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACvD,iGAAiG;QACjG,MAAM,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACxF,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { WorkflowEngine } from '@adonis-agora/durable';
|
|
2
|
+
/**
|
|
3
|
+
* The durable agent runner surface, kept in its OWN entry point (`@adonis-agora/agent/durable`) so
|
|
4
|
+
* the main package never eagerly pulls in the optional `@adonis-agora/durable` peer — the provider
|
|
5
|
+
* imports this lazily only when `durable: true` is configured. Mirrors how the `ai-sdk` entry isolates
|
|
6
|
+
* the optional `ai` peer.
|
|
7
|
+
*/
|
|
8
|
+
export { DurableAgentRunner } from './durable-agent-runner.js';
|
|
9
|
+
export { AgentRunWorkflow, type DurableAgentRunInput, } from './agent-run-workflow.js';
|
|
10
|
+
export { setDurableAgentContext, getDurableAgentContext, type DurableAgentContext, } from './agent-run-context.js';
|
|
11
|
+
/**
|
|
12
|
+
* Register {@link AgentRunWorkflow} on a durable engine so `engine.start(AgentRunWorkflow, …)` and a
|
|
13
|
+
* delegating `ctx.child(AgentRunWorkflow, …)` resolve. Idempotent per engine (re-registering the same
|
|
14
|
+
* name+version overwrites). Call once at boot after the durable context is set.
|
|
15
|
+
*/
|
|
16
|
+
export declare function registerAgentWorkflow(engine: WorkflowEngine): void;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/durable/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D;;;;;GAKG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,gBAAgB,EAChB,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,mBAAmB,GACzB,MAAM,wBAAwB,CAAC;AAEhC;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAElE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { registerWorkflowClass } from '@adonis-agora/durable';
|
|
2
|
+
import { AgentRunWorkflow } from './agent-run-workflow.js';
|
|
3
|
+
/**
|
|
4
|
+
* The durable agent runner surface, kept in its OWN entry point (`@adonis-agora/agent/durable`) so
|
|
5
|
+
* the main package never eagerly pulls in the optional `@adonis-agora/durable` peer — the provider
|
|
6
|
+
* imports this lazily only when `durable: true` is configured. Mirrors how the `ai-sdk` entry isolates
|
|
7
|
+
* the optional `ai` peer.
|
|
8
|
+
*/
|
|
9
|
+
export { DurableAgentRunner } from './durable-agent-runner.js';
|
|
10
|
+
export { AgentRunWorkflow, } from './agent-run-workflow.js';
|
|
11
|
+
export { setDurableAgentContext, getDurableAgentContext, } from './agent-run-context.js';
|
|
12
|
+
/**
|
|
13
|
+
* Register {@link AgentRunWorkflow} on a durable engine so `engine.start(AgentRunWorkflow, …)` and a
|
|
14
|
+
* delegating `ctx.child(AgentRunWorkflow, …)` resolve. Idempotent per engine (re-registering the same
|
|
15
|
+
* name+version overwrites). Call once at boot after the durable context is set.
|
|
16
|
+
*/
|
|
17
|
+
export function registerAgentWorkflow(engine) {
|
|
18
|
+
registerWorkflowClass(engine, AgentRunWorkflow);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/durable/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;;;GAKG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,gBAAgB,GAEjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,wBAAwB,CAAC;AAEhC;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IAC1D,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export declare const VERSION = "0.1.0";
|
|
2
|
+
export * from './types.js';
|
|
3
|
+
export * from './spi/tool.js';
|
|
4
|
+
export * from './spi/model-provider.js';
|
|
5
|
+
export * from './spi/token-stream-sink.js';
|
|
6
|
+
export * from './spi/agent-store.js';
|
|
7
|
+
export * from './spi/roles-policy.js';
|
|
8
|
+
export * from './spi/quota-store.js';
|
|
9
|
+
export * from './spi/pricing-store.js';
|
|
10
|
+
export * from './spi/agent-runner.js';
|
|
11
|
+
export * from './spi/actor-resolver.js';
|
|
12
|
+
export * from './spi/actor-directory.js';
|
|
13
|
+
export * from './spi/attachment-staging.js';
|
|
14
|
+
export * from './spi/governance-queries.js';
|
|
15
|
+
export * from './spi/embedding-provider.js';
|
|
16
|
+
export * from './spi/retriever.js';
|
|
17
|
+
export * from './spi/reranker.js';
|
|
18
|
+
export * from './rag/index.js';
|
|
19
|
+
export * from './rag-media/index.js';
|
|
20
|
+
export * from './personas.js';
|
|
21
|
+
export { AgentRegistry } from './agent-registry.js';
|
|
22
|
+
export { ToolRegistry, DefaultRolesPolicy, ToolForbiddenError, ToolNotFoundError, ToolInputInvalidError, } from './tool-registry.js';
|
|
23
|
+
export { runAgentLoop, QuotaExceededError, type AgentLoopDeps, type AgentLoopHooks, } from './agent-loop.js';
|
|
24
|
+
export { invokeWithTransientRetry, isTransientToolError, DEFAULT_TOOL_TRANSIENT_RETRY_ATTEMPTS, DEFAULT_TOOL_TRANSIENT_RETRY_BACKOFF_MS, } from './tool-retry.js';
|
|
25
|
+
export type { ToolTransientRetryOptions, ToolTransientRetrySetting, InvokeWithTransientRetryOptions, } from './tool-retry.js';
|
|
26
|
+
export * from './diagnostics.js';
|
|
27
|
+
export { defineConfig, stores, quotas, pricingStores, governanceQueries, retrievers, attachmentStores, tokenSinks, streamTransports, actorDirectories, } from './define_config.js';
|
|
28
|
+
export type { AgentConfig, DefaultAgentOptions, ModelFactory, SinkFactory, TokenSinkFactory, RedisTokenSinkConfig, ActorDirectoryFactory, MemoryActorDirectoryConfig, QuotaFactory, QuotaContext, QuotaConfig, PricingFactory, PricingContext, LucidPricingConfig, GovernanceQueriesContext, GovernanceQueriesFactory, LucidGovernanceConfig, RetrieverContext, RetrieverFactory, MemoryRetrieverConfig, PgVectorRetrieverConfig, EmbeddingFactory, AttachmentStagingContext, AttachmentStagingFactory, StoreContext, StoreFactory, LucidStoreConfig, MemoryStoreConfig, } from './define_config.js';
|
|
29
|
+
export { AiTool, defineTool, readAiToolMeta, isBrandedFunctionalTool, AI_TOOL_META_KEY, AGENT_TOOL_BRAND, } from './ai-tool-ref.js';
|
|
30
|
+
export type { AiToolOptions, AiToolMeta, ToolClass, FunctionalTool, BrandedFunctionalTool, } from './ai-tool-ref.js';
|
|
31
|
+
export { discoverTools, registerToolExport, registerFunctionalTool, registerToolsFromBarrel, } from './tool-discovery.js';
|
|
32
|
+
export type { ToolsBarrel, RegisteredTool } from './tool-discovery.js';
|
|
33
|
+
export { AgentDepsFactory, delegateToolName, registerDelegateTools } from './agent-deps-factory.js';
|
|
34
|
+
export type { AgentDepsFactoryConfig } from './agent-deps-factory.js';
|
|
35
|
+
export { utcDay } from './agent-deps.js';
|
|
36
|
+
export type { AgentDeps } from './agent-deps.js';
|
|
37
|
+
export { InProcessTokenStreamSink } from './in-process-sink.js';
|
|
38
|
+
export { RedisTokenStreamSink, type RedisTokenStreamSinkOptions, } from './redis-token-stream-sink.js';
|
|
39
|
+
export type { RedisStreamClient } from './redis-stream-client.js';
|
|
40
|
+
export { UnconfiguredActorResolver, HeaderActorResolver, AuthActorResolver, } from './actor-resolver.js';
|
|
41
|
+
export type { AuthActorResolverOptions } from './actor-resolver.js';
|
|
42
|
+
export { AgentService } from './agent-service.js';
|
|
43
|
+
export type { ChatParams } from './agent-service.js';
|
|
44
|
+
export { DefaultToolAuthorizer } from './authorizer.js';
|
|
45
|
+
export type { RolesPolicy as ToolAuthorizer } from './spi/roles-policy.js';
|
|
46
|
+
export { InlineAgentRunner } from './runners/inline-agent-runner.js';
|
|
47
|
+
export { LucidAgentStore } from './stores/lucid.js';
|
|
48
|
+
export type { LucidAgentStoreOptions, LucidDatabaseLike, LucidClientLike, LucidQueryBuilderLike, LucidInsertBuilderLike, } from './stores/lucid.js';
|
|
49
|
+
export { createTableStatements, createAgentTables, AGENT_TABLES } from './stores/lucid-schema.js';
|
|
50
|
+
export { LedgerQuotaStore } from './stores/ledger-quota.js';
|
|
51
|
+
export { LucidPricingStore } from './stores/lucid-pricing.js';
|
|
52
|
+
export { LucidGovernanceQueries } from './stores/lucid-governance-queries.js';
|
|
53
|
+
export { dataTool, SqlValidator, SqlValidationError, GroupTableAccessPolicy, TenantScopeRewriter, injectLimit, loadSqlParser, } from './data/index.js';
|
|
54
|
+
export type { DataToolConfig, DataToolResult, QueryRunner, SqlValidationResult, TableAccessPolicy, GroupTableAccessConfig, TenantScopeConfig, SqlParserLike, } from './data/index.js';
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export const VERSION = '0.1.0';
|
|
2
|
+
export * from './types.js';
|
|
3
|
+
export * from './spi/tool.js';
|
|
4
|
+
export * from './spi/model-provider.js';
|
|
5
|
+
export * from './spi/token-stream-sink.js';
|
|
6
|
+
export * from './spi/agent-store.js';
|
|
7
|
+
export * from './spi/roles-policy.js';
|
|
8
|
+
export * from './spi/quota-store.js';
|
|
9
|
+
export * from './spi/pricing-store.js';
|
|
10
|
+
export * from './spi/agent-runner.js';
|
|
11
|
+
export * from './spi/actor-resolver.js';
|
|
12
|
+
export * from './spi/actor-directory.js';
|
|
13
|
+
export * from './spi/attachment-staging.js';
|
|
14
|
+
export * from './spi/governance-queries.js';
|
|
15
|
+
export * from './spi/embedding-provider.js';
|
|
16
|
+
export * from './spi/retriever.js';
|
|
17
|
+
export * from './spi/reranker.js';
|
|
18
|
+
export * from './rag/index.js';
|
|
19
|
+
export * from './rag-media/index.js';
|
|
20
|
+
export * from './personas.js';
|
|
21
|
+
export { AgentRegistry } from './agent-registry.js';
|
|
22
|
+
export { ToolRegistry, DefaultRolesPolicy, ToolForbiddenError, ToolNotFoundError, ToolInputInvalidError, } from './tool-registry.js';
|
|
23
|
+
export { runAgentLoop, QuotaExceededError, } from './agent-loop.js';
|
|
24
|
+
export { invokeWithTransientRetry, isTransientToolError, DEFAULT_TOOL_TRANSIENT_RETRY_ATTEMPTS, DEFAULT_TOOL_TRANSIENT_RETRY_BACKOFF_MS, } from './tool-retry.js';
|
|
25
|
+
export * from './diagnostics.js';
|
|
26
|
+
// ── Wave 2: Adonis integration shell ─────────────────────────────────────────
|
|
27
|
+
export { defineConfig, stores, quotas, pricingStores, governanceQueries, retrievers, attachmentStores, tokenSinks, streamTransports, actorDirectories, } from './define_config.js';
|
|
28
|
+
export { AiTool, defineTool, readAiToolMeta, isBrandedFunctionalTool, AI_TOOL_META_KEY, AGENT_TOOL_BRAND, } from './ai-tool-ref.js';
|
|
29
|
+
export { discoverTools, registerToolExport, registerFunctionalTool, registerToolsFromBarrel, } from './tool-discovery.js';
|
|
30
|
+
export { AgentDepsFactory, delegateToolName, registerDelegateTools } from './agent-deps-factory.js';
|
|
31
|
+
export { utcDay } from './agent-deps.js';
|
|
32
|
+
export { InProcessTokenStreamSink } from './in-process-sink.js';
|
|
33
|
+
export { RedisTokenStreamSink, } from './redis-token-stream-sink.js';
|
|
34
|
+
export { UnconfiguredActorResolver, HeaderActorResolver, AuthActorResolver, } from './actor-resolver.js';
|
|
35
|
+
export { AgentService } from './agent-service.js';
|
|
36
|
+
export { DefaultToolAuthorizer } from './authorizer.js';
|
|
37
|
+
export { InlineAgentRunner } from './runners/inline-agent-runner.js';
|
|
38
|
+
export { LucidAgentStore } from './stores/lucid.js';
|
|
39
|
+
export { createTableStatements, createAgentTables, AGENT_TABLES } from './stores/lucid-schema.js';
|
|
40
|
+
export { LedgerQuotaStore } from './stores/ledger-quota.js';
|
|
41
|
+
export { LucidPricingStore } from './stores/lucid-pricing.js';
|
|
42
|
+
export { LucidGovernanceQueries } from './stores/lucid-governance-queries.js';
|
|
43
|
+
// ── Data satellite: governed read-only SQL tool ──────────────────────────────
|
|
44
|
+
export { dataTool, SqlValidator, SqlValidationError, GroupTableAccessPolicy, TenantScopeRewriter, injectLimit, loadSqlParser, } from './data/index.js';
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,kBAAkB,GAGnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,qCAAqC,EACrC,uCAAuC,GACxC,MAAM,iBAAiB,CAAC;AAMzB,cAAc,kBAAkB,CAAC;AAEjC,gFAAgF;AAChF,OAAO,EACL,YAAY,EACZ,MAAM,EACN,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AA+B5B,OAAO,EACL,MAAM,EACN,UAAU,EACV,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEpG,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,oBAAoB,GAErB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAQpD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,gFAAgF;AAChF,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,EACX,aAAa,GACd,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RolesPolicy } from './spi/roles-policy.js';
|
|
2
|
+
import type { Actor, ToolSpec } from './types.js';
|
|
3
|
+
/** First filter layer: drop tools the actor's role may not invoke. `can` may be async (authz). */
|
|
4
|
+
export declare function filterToolsByRole(tools: ToolSpec[], actor: Actor, policy: RolesPolicy): Promise<ToolSpec[]>;
|
|
5
|
+
/** Second filter layer: if the persona pins an allow-list, keep only those tool names. */
|
|
6
|
+
export declare function personaFilterTools(tools: ToolSpec[], allowedTools: string[] | undefined): ToolSpec[];
|
|
7
|
+
//# sourceMappingURL=personas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personas.d.ts","sourceRoot":"","sources":["../../src/personas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElD,kGAAkG;AAClG,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAKrB;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EAAE,EACjB,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS,GACjC,QAAQ,EAAE,CAMZ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ChunkOptions {
|
|
2
|
+
/** Target max characters per chunk. Default 800. */
|
|
3
|
+
chunkSize?: number;
|
|
4
|
+
/** Characters of overlap carried from the end of one chunk into the next. Default 100. */
|
|
5
|
+
overlap?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Splits text into overlapping chunks for embedding. Greedy up to `chunkSize`, but prefers to break on
|
|
9
|
+
* a paragraph → sentence → word boundary in the back half of the window (so a chunk rarely cuts
|
|
10
|
+
* mid-sentence), then carries `overlap` characters into the next chunk to preserve context across the
|
|
11
|
+
* seam. Pure and deterministic.
|
|
12
|
+
*/
|
|
13
|
+
export declare function chunkText(text: string, options?: ChunkOptions): string[];
|
|
14
|
+
//# sourceMappingURL=chunk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk.d.ts","sourceRoot":"","sources":["../../../src/rag/chunk.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,EAAE,CAuC5E"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Splits text into overlapping chunks for embedding. Greedy up to `chunkSize`, but prefers to break on
|
|
3
|
+
* a paragraph → sentence → word boundary in the back half of the window (so a chunk rarely cuts
|
|
4
|
+
* mid-sentence), then carries `overlap` characters into the next chunk to preserve context across the
|
|
5
|
+
* seam. Pure and deterministic.
|
|
6
|
+
*/
|
|
7
|
+
export function chunkText(text, options = {}) {
|
|
8
|
+
const chunkSize = options.chunkSize ?? 800;
|
|
9
|
+
const overlap = options.overlap ?? 100;
|
|
10
|
+
const normalized = text.trim();
|
|
11
|
+
if (normalized.length === 0) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
if (normalized.length <= chunkSize) {
|
|
15
|
+
return [normalized];
|
|
16
|
+
}
|
|
17
|
+
const chunks = [];
|
|
18
|
+
let start = 0;
|
|
19
|
+
while (start < normalized.length) {
|
|
20
|
+
const end = Math.min(start + chunkSize, normalized.length);
|
|
21
|
+
let breakAt = end;
|
|
22
|
+
if (end < normalized.length) {
|
|
23
|
+
const window = normalized.slice(start, end);
|
|
24
|
+
const boundary = Math.max(window.lastIndexOf('\n\n'), window.lastIndexOf('. '), window.lastIndexOf(' '));
|
|
25
|
+
// Only honour a boundary in the back half, else a tiny chunk cascades.
|
|
26
|
+
if (boundary > chunkSize / 2) {
|
|
27
|
+
breakAt = start + boundary + 1;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const chunk = normalized.slice(start, breakAt).trim();
|
|
31
|
+
if (chunk.length > 0) {
|
|
32
|
+
chunks.push(chunk);
|
|
33
|
+
}
|
|
34
|
+
if (breakAt >= normalized.length) {
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
// Step forward with overlap, but always make progress (guards against a stuck boundary).
|
|
38
|
+
start = Math.max(breakAt - overlap, start + 1);
|
|
39
|
+
}
|
|
40
|
+
return chunks;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk.js","sourceRoot":"","sources":["../../../src/rag/chunk.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,UAAwB,EAAE;IAChE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAC1B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EACxB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CACxB,CAAC;YACF,uEAAuE;YACvE,IAAI,QAAQ,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM;QACR,CAAC;QACD,yFAAyF;QACzF,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { EmbeddingProvider } from '../spi/embedding-provider.js';
|
|
2
|
+
import type { Passage, RetrieveOptions, Retriever } from '../spi/retriever.js';
|
|
3
|
+
import type { VectorStore } from './vector-store.js';
|
|
4
|
+
/**
|
|
5
|
+
* Bridges an {@link EmbeddingProvider} + {@link VectorStore} into the {@link Retriever} SPI: embed the
|
|
6
|
+
* query, then vector-search. This is what you wire as the agent's `retriever` (via the `retrievers`
|
|
7
|
+
* factory namespace) for inject-mode retrieval. Mirrors the reference `EmbeddingRetriever` exactly.
|
|
8
|
+
*/
|
|
9
|
+
export declare class EmbeddingRetriever implements Retriever {
|
|
10
|
+
private readonly embedder;
|
|
11
|
+
private readonly store;
|
|
12
|
+
constructor(embedder: EmbeddingProvider, store: VectorStore);
|
|
13
|
+
retrieve(query: string, options?: RetrieveOptions): Promise<Passage[]>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=embedding-retriever.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-retriever.d.ts","sourceRoot":"","sources":["../../../src/rag/embedding-retriever.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAEhD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,WAAW;IAG/B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAUjF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridges an {@link EmbeddingProvider} + {@link VectorStore} into the {@link Retriever} SPI: embed the
|
|
3
|
+
* query, then vector-search. This is what you wire as the agent's `retriever` (via the `retrievers`
|
|
4
|
+
* factory namespace) for inject-mode retrieval. Mirrors the reference `EmbeddingRetriever` exactly.
|
|
5
|
+
*/
|
|
6
|
+
export class EmbeddingRetriever {
|
|
7
|
+
embedder;
|
|
8
|
+
store;
|
|
9
|
+
constructor(embedder, store) {
|
|
10
|
+
this.embedder = embedder;
|
|
11
|
+
this.store = store;
|
|
12
|
+
}
|
|
13
|
+
async retrieve(query, options = {}) {
|
|
14
|
+
const [embedding] = await this.embedder.embed([query]);
|
|
15
|
+
if (embedding === undefined) {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
return this.store.search(embedding, {
|
|
19
|
+
topK: options.topK ?? 5,
|
|
20
|
+
...(options.filter !== undefined ? { filter: options.filter } : {}),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=embedding-retriever.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-retriever.js","sourceRoot":"","sources":["../../../src/rag/embedding-retriever.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAEV;IACA;IAFnB,YACmB,QAA2B,EAC3B,KAAkB;QADlB,aAAQ,GAAR,QAAQ,CAAmB;QAC3B,UAAK,GAAL,KAAK,CAAa;IAClC,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,UAA2B,EAAE;QACzD,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACvD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE;YAClC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC;YACvB,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact-match metadata filter (every key in `filter` must equal the record's). Used by the in-memory
|
|
3
|
+
* {@link import('./memory-vector-store.js').MemoryVectorStore}. Pure and dependency-free.
|
|
4
|
+
*/
|
|
5
|
+
export declare function matchesFilter(metadata: Record<string, unknown> | undefined, filter: Record<string, unknown>): boolean;
|
|
6
|
+
//# sourceMappingURL=filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/rag/filter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAKT"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact-match metadata filter (every key in `filter` must equal the record's). Used by the in-memory
|
|
3
|
+
* {@link import('./memory-vector-store.js').MemoryVectorStore}. Pure and dependency-free.
|
|
4
|
+
*/
|
|
5
|
+
export function matchesFilter(metadata, filter) {
|
|
6
|
+
if (metadata === undefined) {
|
|
7
|
+
return Object.keys(filter).length === 0;
|
|
8
|
+
}
|
|
9
|
+
return Object.entries(filter).every(([key, value]) => metadata[key] === value);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/rag/filter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,QAA6C,EAC7C,MAA+B;IAE/B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { chunkText, type ChunkOptions } from './chunk.js';
|
|
2
|
+
export { documentIdOf, type IndexedDocument, type VectorRecord, type VectorSearchOptions, type VectorStore, } from './vector-store.js';
|
|
3
|
+
export { matchesFilter } from './filter.js';
|
|
4
|
+
export { MemoryVectorStore, cosineSimilarity } from './memory-vector-store.js';
|
|
5
|
+
export { EmbeddingRetriever } from './embedding-retriever.js';
|
|
6
|
+
export { PgVectorStore, PgVectorRetriever, toVectorLiteral, type PgVectorMetric, type PgVectorColumns, type PgVectorStoreOptions, } from './pg-vector-store.js';
|
|
7
|
+
export { chunkDocuments, ingestChunks, ingestDocuments, type ChunkRecord, type IngestChunksOptions, type IngestDocument, type IngestOptions, } from './ingest.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rag/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EACL,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { chunkText } from './chunk.js';
|
|
2
|
+
export { documentIdOf, } from './vector-store.js';
|
|
3
|
+
export { matchesFilter } from './filter.js';
|
|
4
|
+
export { MemoryVectorStore, cosineSimilarity } from './memory-vector-store.js';
|
|
5
|
+
export { EmbeddingRetriever } from './embedding-retriever.js';
|
|
6
|
+
export { PgVectorStore, PgVectorRetriever, toVectorLiteral, } from './pg-vector-store.js';
|
|
7
|
+
export { chunkDocuments, ingestChunks, ingestDocuments, } from './ingest.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rag/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAC;AAC1D,OAAO,EACL,YAAY,GAKb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,GAIhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,eAAe,GAKhB,MAAM,aAAa,CAAC"}
|