@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 @@
|
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../src/telescope/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAkB,MAAM,gBAAgB,CAAC;AAc5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,qBAA0B,GAAG,kBAAkB,CAkB5F"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { agentDashboard } from './dashboard.js';
|
|
2
|
+
import { agentActiveRunsProvider, agentDelegationsOverTimeProvider, agentRecentApprovalsProvider, agentRecentDelegationsProvider, agentRecentRunsProvider, agentRecentToolCallsProvider, agentRunsOverTimeProvider, agentTokenUsageProvider, agentTokensOverTimeProvider, agentToolCallSuccessRateProvider, agentToolCallsOverTimeProvider, } from './data-providers.js';
|
|
3
|
+
/**
|
|
4
|
+
* The first-class `@adonis-agora/telescope` extension for `@adonis-agora/agent` (the "Agent" tab): an
|
|
5
|
+
* "Agent" overview dashboard surfacing recent runs, tool calls, approval decisions, delegations and
|
|
6
|
+
* token usage, plus the data providers the panels bind to. Wire it into `config/telescope.ts`:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { defineConfig } from '@adonis-agora/telescope'
|
|
10
|
+
* import { agentTelescopeExtension } from '@adonis-agora/agent/telescope'
|
|
11
|
+
*
|
|
12
|
+
* export default defineConfig({ extensions: [agentTelescopeExtension()] })
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* No watcher is contributed — `@adonis-agora/agent` already publishes `agora:agent:*` lifecycle events
|
|
16
|
+
* onto the diagnostics bus (`src/diagnostics.ts`), and Telescope's generic diagnostics watcher records
|
|
17
|
+
* them as `type: 'diagnostic'`, `tag: 'lib:agent'`; the entry-backed providers read those recorded
|
|
18
|
+
* entries. `@adonis-agora/telescope` stays an OPTIONAL, never-imported peer — see `telescope-sdk.ts` for
|
|
19
|
+
* why the returned object structurally (not nominally) satisfies its `TelescopeExtension` contract, and
|
|
20
|
+
* why no NestJS-style DI/read-model is resolved (unlike the aviary port; capture is entirely entry-backed).
|
|
21
|
+
*
|
|
22
|
+
* No `entryTypes` are contributed: agent events are recorded under the generic `diagnostic` entry type
|
|
23
|
+
* (`tag: 'lib:agent'`), so there is no dedicated `agent` entry type to navigate to — the "Agent"
|
|
24
|
+
* dashboard is the entry point. (Same reasoning as `@adonis-agora/media/telescope`.)
|
|
25
|
+
*/
|
|
26
|
+
export function agentTelescopeExtension(opts = {}) {
|
|
27
|
+
return {
|
|
28
|
+
name: 'agent',
|
|
29
|
+
dashboards: () => [agentDashboard(opts)],
|
|
30
|
+
dataProviders: () => [
|
|
31
|
+
agentActiveRunsProvider(),
|
|
32
|
+
agentTokenUsageProvider(),
|
|
33
|
+
agentToolCallSuccessRateProvider(),
|
|
34
|
+
agentRunsOverTimeProvider(),
|
|
35
|
+
agentTokensOverTimeProvider(),
|
|
36
|
+
agentRecentRunsProvider(),
|
|
37
|
+
agentToolCallsOverTimeProvider(),
|
|
38
|
+
agentRecentToolCallsProvider(),
|
|
39
|
+
agentRecentApprovalsProvider(),
|
|
40
|
+
agentDelegationsOverTimeProvider(),
|
|
41
|
+
agentRecentDelegationsProvider(),
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/telescope/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,4BAA4B,EAC5B,8BAA8B,EAC9B,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,EAC3B,gCAAgC,EAChC,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC;AAG7B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAA8B,EAAE;IACtE,OAAO;QACL,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACxC,aAAa,EAAE,GAAG,EAAE,CAAC;YACnB,uBAAuB,EAAE;YACzB,uBAAuB,EAAE;YACzB,gCAAgC,EAAE;YAClC,yBAAyB,EAAE;YAC3B,2BAA2B,EAAE;YAC7B,uBAAuB,EAAE;YACzB,8BAA8B,EAAE;YAChC,4BAA4B,EAAE;YAC9B,4BAA4B,EAAE;YAC9B,gCAAgC,EAAE;YAClC,8BAA8B,EAAE;SACjC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { type AgentDashboardOptions, agentDashboard } from './dashboard.js';
|
|
2
|
+
export { agentTelescopeExtension } from './extension.js';
|
|
3
|
+
export { agentActiveRunsProvider, agentDelegationsOverTimeProvider, agentRecentApprovalsProvider, agentRecentDelegationsProvider, agentRecentRunsProvider, agentRecentToolCallsProvider, agentRunsOverTimeProvider, agentTokenUsageProvider, agentTokensOverTimeProvider, agentToolCallSuccessRateProvider, agentToolCallsOverTimeProvider, } from './data-providers.js';
|
|
4
|
+
export type { Column, ContainerLike, DataProvider, DashboardSpec, ExtensionContext, LinkSpec, TelescopeExtension, TelescopeStoreLike, TelescopeEntryLike, } from './telescope-sdk.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/telescope/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,4BAA4B,EAC5B,8BAA8B,EAC9B,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,EAC3B,gCAAgC,EAChC,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,MAAM,EACN,aAAa,EACb,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { agentDashboard } from './dashboard.js';
|
|
2
|
+
export { agentTelescopeExtension } from './extension.js';
|
|
3
|
+
export { agentActiveRunsProvider, agentDelegationsOverTimeProvider, agentRecentApprovalsProvider, agentRecentDelegationsProvider, agentRecentRunsProvider, agentRecentToolCallsProvider, agentRunsOverTimeProvider, agentTokenUsageProvider, agentTokensOverTimeProvider, agentToolCallSuccessRateProvider, agentToolCallsOverTimeProvider, } from './data-providers.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telescope/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,4BAA4B,EAC5B,8BAA8B,EAC9B,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,EAC3B,gCAAgC,EAChC,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A local, structural mirror of the `@adonis-agora/telescope` extension SDK contract.
|
|
3
|
+
*
|
|
4
|
+
* We deliberately do NOT import `@adonis-agora/telescope` — it lives in a separate repo, so a workspace
|
|
5
|
+
* dependency would not resolve, and `@adonis-agora/telescope` is only an OPTIONAL peer (a host may run
|
|
6
|
+
* `@adonis-agora/agent` without any observability at all). This is the same cross-repo decoupling
|
|
7
|
+
* `@adonis-agora/telescope` itself uses to read `@adonis-agora/diagnostics` without importing it, and the
|
|
8
|
+
* same pattern `@adonis-agora/media/telescope` and `@adonis-agora/durable/telescope` follow. Instead we
|
|
9
|
+
* declare the same shapes here; the exported extension object structurally satisfies
|
|
10
|
+
* `@adonis-agora/telescope`'s `TelescopeExtension` when an app wires it into `config/telescope.ts` (where
|
|
11
|
+
* both packages are installed). Keep these in lockstep with `@adonis-agora/telescope`'s
|
|
12
|
+
* `src/extension/types.ts`.
|
|
13
|
+
*/
|
|
14
|
+
/** The slice of a telescope entry the data providers read. */
|
|
15
|
+
export interface TelescopeEntryLike {
|
|
16
|
+
content?: unknown;
|
|
17
|
+
createdAt?: Date;
|
|
18
|
+
}
|
|
19
|
+
/** The slice of the telescope store the data providers read (a subset of `TelescopeStore`). */
|
|
20
|
+
export interface TelescopeStoreLike {
|
|
21
|
+
list(query?: {
|
|
22
|
+
type?: string;
|
|
23
|
+
tag?: string;
|
|
24
|
+
limit?: number;
|
|
25
|
+
}): Promise<TelescopeEntryLike[]>;
|
|
26
|
+
}
|
|
27
|
+
/** The slice of the AdonisJS container an extension uses to resolve host services. */
|
|
28
|
+
export interface ContainerLike {
|
|
29
|
+
make<T>(token: unknown): Promise<T>;
|
|
30
|
+
}
|
|
31
|
+
/** Read-only context handed to every extension hook (mirror of `@adonis-agora/telescope`'s). */
|
|
32
|
+
export interface ExtensionContext {
|
|
33
|
+
readonly store: TelescopeStoreLike;
|
|
34
|
+
readonly container: ContainerLike;
|
|
35
|
+
readonly config: unknown;
|
|
36
|
+
}
|
|
37
|
+
export interface ExtensionEntryType {
|
|
38
|
+
id: string;
|
|
39
|
+
label: string;
|
|
40
|
+
dot: string;
|
|
41
|
+
}
|
|
42
|
+
export interface PanelThresholds {
|
|
43
|
+
warn: number;
|
|
44
|
+
bad: number;
|
|
45
|
+
direction: 'up-bad' | 'down-bad';
|
|
46
|
+
}
|
|
47
|
+
export interface DashboardSection {
|
|
48
|
+
title?: string;
|
|
49
|
+
cols?: 2 | 3 | 4;
|
|
50
|
+
panels: Panel[];
|
|
51
|
+
}
|
|
52
|
+
export interface DashboardSpec {
|
|
53
|
+
id: string;
|
|
54
|
+
label: string;
|
|
55
|
+
navGroup?: string;
|
|
56
|
+
panels: Panel[];
|
|
57
|
+
sections?: DashboardSection[];
|
|
58
|
+
}
|
|
59
|
+
export interface DataBinding {
|
|
60
|
+
provider: string;
|
|
61
|
+
query?: Record<string, unknown>;
|
|
62
|
+
}
|
|
63
|
+
export interface LinkSpec {
|
|
64
|
+
href: string;
|
|
65
|
+
external?: boolean;
|
|
66
|
+
}
|
|
67
|
+
export interface Column {
|
|
68
|
+
key: string;
|
|
69
|
+
label: string;
|
|
70
|
+
link?: LinkSpec;
|
|
71
|
+
}
|
|
72
|
+
export type Panel = {
|
|
73
|
+
kind: 'stat';
|
|
74
|
+
title: string;
|
|
75
|
+
data: DataBinding;
|
|
76
|
+
format?: 'number' | 'percent' | 'duration' | 'rate';
|
|
77
|
+
accent?: string;
|
|
78
|
+
spark?: boolean;
|
|
79
|
+
thresholds?: PanelThresholds;
|
|
80
|
+
} | {
|
|
81
|
+
kind: 'timeseries';
|
|
82
|
+
title: string;
|
|
83
|
+
data: DataBinding;
|
|
84
|
+
series: string[];
|
|
85
|
+
style?: 'area' | 'stacked';
|
|
86
|
+
} | {
|
|
87
|
+
kind: 'topN';
|
|
88
|
+
title: string;
|
|
89
|
+
data: DataBinding;
|
|
90
|
+
limit?: number;
|
|
91
|
+
} | {
|
|
92
|
+
kind: 'table';
|
|
93
|
+
title: string;
|
|
94
|
+
data: DataBinding;
|
|
95
|
+
columns: Column[];
|
|
96
|
+
} | {
|
|
97
|
+
kind: 'distribution';
|
|
98
|
+
title: string;
|
|
99
|
+
data: DataBinding;
|
|
100
|
+
markers?: Array<'p50' | 'p95' | 'p99'>;
|
|
101
|
+
format?: 'duration' | 'number';
|
|
102
|
+
} | {
|
|
103
|
+
kind: 'gauge';
|
|
104
|
+
title: string;
|
|
105
|
+
data: DataBinding;
|
|
106
|
+
min?: number;
|
|
107
|
+
max?: number;
|
|
108
|
+
format?: 'number' | 'percent' | 'duration' | 'rate';
|
|
109
|
+
thresholds?: PanelThresholds;
|
|
110
|
+
} | {
|
|
111
|
+
kind: 'breakdown';
|
|
112
|
+
title: string;
|
|
113
|
+
data: DataBinding;
|
|
114
|
+
style?: 'donut' | 'bar';
|
|
115
|
+
};
|
|
116
|
+
export interface DataProvider {
|
|
117
|
+
name: string;
|
|
118
|
+
resolve(query: Record<string, unknown> | undefined, ctx: ExtensionContext): Promise<unknown>;
|
|
119
|
+
}
|
|
120
|
+
export interface TelescopeExtension {
|
|
121
|
+
name: string;
|
|
122
|
+
entryTypes?(ctx: ExtensionContext): ExtensionEntryType[];
|
|
123
|
+
dashboards?(ctx: ExtensionContext): DashboardSpec[];
|
|
124
|
+
dataProviders?(ctx: ExtensionContext): DataProvider[];
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=telescope-sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telescope-sdk.d.ts","sourceRoot":"","sources":["../../../src/telescope/telescope-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A local, structural mirror of the `@adonis-agora/telescope` extension SDK contract.
|
|
3
|
+
*
|
|
4
|
+
* We deliberately do NOT import `@adonis-agora/telescope` — it lives in a separate repo, so a workspace
|
|
5
|
+
* dependency would not resolve, and `@adonis-agora/telescope` is only an OPTIONAL peer (a host may run
|
|
6
|
+
* `@adonis-agora/agent` without any observability at all). This is the same cross-repo decoupling
|
|
7
|
+
* `@adonis-agora/telescope` itself uses to read `@adonis-agora/diagnostics` without importing it, and the
|
|
8
|
+
* same pattern `@adonis-agora/media/telescope` and `@adonis-agora/durable/telescope` follow. Instead we
|
|
9
|
+
* declare the same shapes here; the exported extension object structurally satisfies
|
|
10
|
+
* `@adonis-agora/telescope`'s `TelescopeExtension` when an app wires it into `config/telescope.ts` (where
|
|
11
|
+
* both packages are installed). Keep these in lockstep with `@adonis-agora/telescope`'s
|
|
12
|
+
* `src/extension/types.ts`.
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=telescope-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telescope-sdk.js","sourceRoot":"","sources":["../../../src/telescope/telescope-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { EmbeddingRetriever } from '../rag/embedding-retriever.js';
|
|
2
|
+
import { type IngestDocument } from '../rag/ingest.js';
|
|
3
|
+
import type { EmbeddingProvider } from '../spi/embedding-provider.js';
|
|
4
|
+
import type { RerankOptions, Reranker } from '../spi/reranker.js';
|
|
5
|
+
import type { Passage } from '../spi/retriever.js';
|
|
6
|
+
/**
|
|
7
|
+
* A deterministic, offline {@link EmbeddingProvider} — no API key, no network. Each text is embedded as
|
|
8
|
+
* a fixed-length bag-of-words vector: every whitespace/punctuation-delimited token is lower-cased and
|
|
9
|
+
* hashed into a dimension whose count it increments. Texts that share words land close under cosine
|
|
10
|
+
* similarity, so retrieval ranks the relevant chunk first, while the mapping stays a pure function of
|
|
11
|
+
* the input (replay-safe, reproducible across runs). Mirrors the reference deterministic fake.
|
|
12
|
+
*/
|
|
13
|
+
export declare class FakeEmbeddingProvider implements EmbeddingProvider {
|
|
14
|
+
private readonly dimensions;
|
|
15
|
+
constructor(dimensions?: number);
|
|
16
|
+
embed(texts: string[]): Promise<number[][]>;
|
|
17
|
+
private embedOne;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A trivial identity {@link Reranker} for tests: keeps the retriever's order, only truncating to
|
|
21
|
+
* `topK`. Stands in for a real cross-encoder rerank endpoint (provider impls deferred this round).
|
|
22
|
+
*/
|
|
23
|
+
export declare class FakeReranker implements Reranker {
|
|
24
|
+
rerank(_query: string, passages: Passage[], options?: RerankOptions): Promise<Passage[]>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build a ready-to-use in-memory {@link EmbeddingRetriever} for tests: a {@link MemoryVectorStore} fed
|
|
28
|
+
* by the given (or a fresh {@link FakeEmbeddingProvider}) embedder, with `documents` ingested. Wire the
|
|
29
|
+
* result as the config's `retriever` to exercise inject-mode retrieval offline.
|
|
30
|
+
*/
|
|
31
|
+
export declare function inMemoryRetriever(options: {
|
|
32
|
+
documents?: IngestDocument[];
|
|
33
|
+
embedder?: EmbeddingProvider;
|
|
34
|
+
chunkSize?: number;
|
|
35
|
+
overlap?: number;
|
|
36
|
+
}): Promise<EmbeddingRetriever>;
|
|
37
|
+
//# sourceMappingURL=fake-embedding-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake-embedding-provider.d.ts","sourceRoot":"","sources":["../../../src/testing/fake-embedding-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,KAAK,cAAc,EAAmB,MAAM,kBAAkB,CAAC;AAExE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;;;;GAMG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,SAAK;IAEtC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAIjD,OAAO,CAAC,QAAQ;CAWjB;AAYD;;;GAGG;AACH,qBAAa,YAAa,YAAW,QAAQ;IACrC,MAAM,CACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,OAAO,EAAE,CAAC;CAGtB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAY9B"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { EmbeddingRetriever } from '../rag/embedding-retriever.js';
|
|
2
|
+
import { ingestDocuments } from '../rag/ingest.js';
|
|
3
|
+
import { MemoryVectorStore } from '../rag/memory-vector-store.js';
|
|
4
|
+
/**
|
|
5
|
+
* A deterministic, offline {@link EmbeddingProvider} — no API key, no network. Each text is embedded as
|
|
6
|
+
* a fixed-length bag-of-words vector: every whitespace/punctuation-delimited token is lower-cased and
|
|
7
|
+
* hashed into a dimension whose count it increments. Texts that share words land close under cosine
|
|
8
|
+
* similarity, so retrieval ranks the relevant chunk first, while the mapping stays a pure function of
|
|
9
|
+
* the input (replay-safe, reproducible across runs). Mirrors the reference deterministic fake.
|
|
10
|
+
*/
|
|
11
|
+
export class FakeEmbeddingProvider {
|
|
12
|
+
dimensions;
|
|
13
|
+
constructor(dimensions = 64) {
|
|
14
|
+
this.dimensions = dimensions;
|
|
15
|
+
}
|
|
16
|
+
async embed(texts) {
|
|
17
|
+
return texts.map((text) => this.embedOne(text));
|
|
18
|
+
}
|
|
19
|
+
embedOne(text) {
|
|
20
|
+
const vector = new Array(this.dimensions).fill(0);
|
|
21
|
+
for (const token of text.toLowerCase().split(/[^a-z0-9]+/)) {
|
|
22
|
+
if (token.length === 0) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const index = hashToken(token, this.dimensions);
|
|
26
|
+
vector[index] = (vector[index] ?? 0) + 1;
|
|
27
|
+
}
|
|
28
|
+
return vector;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** FNV-1a-ish token hash folded into `[0, dimensions)`. Deterministic and dependency-free. */
|
|
32
|
+
function hashToken(token, dimensions) {
|
|
33
|
+
let hash = 2166136261;
|
|
34
|
+
for (let index = 0; index < token.length; index += 1) {
|
|
35
|
+
hash ^= token.charCodeAt(index);
|
|
36
|
+
hash = Math.imul(hash, 16777619);
|
|
37
|
+
}
|
|
38
|
+
return (hash >>> 0) % dimensions;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A trivial identity {@link Reranker} for tests: keeps the retriever's order, only truncating to
|
|
42
|
+
* `topK`. Stands in for a real cross-encoder rerank endpoint (provider impls deferred this round).
|
|
43
|
+
*/
|
|
44
|
+
export class FakeReranker {
|
|
45
|
+
async rerank(_query, passages, options = {}) {
|
|
46
|
+
return options.topK !== undefined ? passages.slice(0, options.topK) : passages;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Build a ready-to-use in-memory {@link EmbeddingRetriever} for tests: a {@link MemoryVectorStore} fed
|
|
51
|
+
* by the given (or a fresh {@link FakeEmbeddingProvider}) embedder, with `documents` ingested. Wire the
|
|
52
|
+
* result as the config's `retriever` to exercise inject-mode retrieval offline.
|
|
53
|
+
*/
|
|
54
|
+
export async function inMemoryRetriever(options) {
|
|
55
|
+
const embedder = options.embedder ?? new FakeEmbeddingProvider();
|
|
56
|
+
const store = new MemoryVectorStore();
|
|
57
|
+
if (options.documents !== undefined && options.documents.length > 0) {
|
|
58
|
+
await ingestDocuments(options.documents, {
|
|
59
|
+
embedder,
|
|
60
|
+
store,
|
|
61
|
+
...(options.chunkSize !== undefined ? { chunkSize: options.chunkSize } : {}),
|
|
62
|
+
...(options.overlap !== undefined ? { overlap: options.overlap } : {}),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return new EmbeddingRetriever(embedder, store);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=fake-embedding-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake-embedding-provider.js","sourceRoot":"","sources":["../../../src/testing/fake-embedding-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type DiskBytesReader, type MediaManagerHandle, MediaRagIngestion, type ResolveMediaRef } from '../rag-media/media-rag-ingestion.js';
|
|
2
|
+
import { type ExtractFn, MimeTextExtractor } from '../rag-media/text-extractor.js';
|
|
3
|
+
import { EmbeddingRetriever } from '../rag/embedding-retriever.js';
|
|
4
|
+
import type { VectorStore } from '../rag/vector-store.js';
|
|
5
|
+
import type { EmbeddingProvider } from '../spi/embedding-provider.js';
|
|
6
|
+
/**
|
|
7
|
+
* An in-memory {@link MediaManagerHandle} for tests: bytes are stored in a per-disk `Map`, keyed by the
|
|
8
|
+
* object key. Stands in for an `@adonis-agora/media` `MediaManager` — the media→RAG bridge only reads
|
|
9
|
+
* `disk(name).getBytes(key)`, so this deterministic fake exercises the whole ingestion path offline.
|
|
10
|
+
*/
|
|
11
|
+
export declare class FakeMediaManager implements MediaManagerHandle {
|
|
12
|
+
private readonly disks;
|
|
13
|
+
/** Seed a file's bytes on a disk. Accepts a string (UTF-8 encoded) or raw bytes. Chainable. */
|
|
14
|
+
put(disk: string, key: string, contents: string | Uint8Array): this;
|
|
15
|
+
disk(name?: string): DiskBytesReader;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A fake PDF text extractor for tests — stands in for a real (host-supplied) PDF parser without the
|
|
19
|
+
* dependency. It ignores the bytes and returns fixed text so a test can assert the `application/pdf`
|
|
20
|
+
* hook is invoked. Register it: `defaultTextExtractor().register('application/pdf', fakePdfExtractor())`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function fakePdfExtractor(text?: string): ExtractFn;
|
|
23
|
+
/**
|
|
24
|
+
* Build a fully in-memory media→RAG ingestion for tests: a {@link MemoryVectorStore} + a deterministic
|
|
25
|
+
* {@link FakeEmbeddingProvider} + a {@link FakeMediaManager}, wired into a {@link MediaRagIngestion} and
|
|
26
|
+
* paired with an {@link EmbeddingRetriever} over the same store/embedder (so a test can ingest then
|
|
27
|
+
* retrieve, filtering by tenant/owner metadata). Seed files with `media.put(disk, key, contents)`.
|
|
28
|
+
*/
|
|
29
|
+
export declare function inMemoryMediaRagIngestion(options?: {
|
|
30
|
+
embedder?: EmbeddingProvider;
|
|
31
|
+
store?: VectorStore;
|
|
32
|
+
media?: FakeMediaManager;
|
|
33
|
+
extractor?: MimeTextExtractor;
|
|
34
|
+
contentTypes?: string[];
|
|
35
|
+
resolve?: ResolveMediaRef;
|
|
36
|
+
maxBytes?: number;
|
|
37
|
+
}): {
|
|
38
|
+
ingestion: MediaRagIngestion;
|
|
39
|
+
store: VectorStore;
|
|
40
|
+
embedder: EmbeddingProvider;
|
|
41
|
+
media: FakeMediaManager;
|
|
42
|
+
retriever: EmbeddingRetriever;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=fake-media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake-media.d.ts","sourceRoot":"","sources":["../../../src/testing/fake-media.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,iBAAiB,EAEjB,KAAK,eAAe,EAErB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,KAAK,SAAS,EACd,iBAAiB,EAElB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGtE;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,kBAAkB;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8C;IAEpE,+FAA+F;IAC/F,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAQnE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe;CAYrC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,SAAuB,GAAG,SAAS,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACd,GACL;IACD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,EAAE,kBAAkB,CAAC;CAC/B,CAoBA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { mediaRagIngestion, } from '../rag-media/media-rag-ingestion.js';
|
|
2
|
+
import { defaultTextExtractor, } from '../rag-media/text-extractor.js';
|
|
3
|
+
import { EmbeddingRetriever } from '../rag/embedding-retriever.js';
|
|
4
|
+
import { MemoryVectorStore } from '../rag/memory-vector-store.js';
|
|
5
|
+
import { FakeEmbeddingProvider } from './fake-embedding-provider.js';
|
|
6
|
+
/**
|
|
7
|
+
* An in-memory {@link MediaManagerHandle} for tests: bytes are stored in a per-disk `Map`, keyed by the
|
|
8
|
+
* object key. Stands in for an `@adonis-agora/media` `MediaManager` — the media→RAG bridge only reads
|
|
9
|
+
* `disk(name).getBytes(key)`, so this deterministic fake exercises the whole ingestion path offline.
|
|
10
|
+
*/
|
|
11
|
+
export class FakeMediaManager {
|
|
12
|
+
disks = new Map();
|
|
13
|
+
/** Seed a file's bytes on a disk. Accepts a string (UTF-8 encoded) or raw bytes. Chainable. */
|
|
14
|
+
put(disk, key, contents) {
|
|
15
|
+
const bytes = typeof contents === 'string' ? new TextEncoder().encode(contents) : contents;
|
|
16
|
+
const files = this.disks.get(disk) ?? new Map();
|
|
17
|
+
files.set(key, bytes);
|
|
18
|
+
this.disks.set(disk, files);
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
disk(name) {
|
|
22
|
+
const diskName = name ?? 'default';
|
|
23
|
+
return {
|
|
24
|
+
getBytes: async (key) => {
|
|
25
|
+
const bytes = this.disks.get(diskName)?.get(key);
|
|
26
|
+
if (bytes === undefined) {
|
|
27
|
+
throw new Error(`FakeMediaManager: no object "${key}" on disk "${diskName}"`);
|
|
28
|
+
}
|
|
29
|
+
return bytes;
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A fake PDF text extractor for tests — stands in for a real (host-supplied) PDF parser without the
|
|
36
|
+
* dependency. It ignores the bytes and returns fixed text so a test can assert the `application/pdf`
|
|
37
|
+
* hook is invoked. Register it: `defaultTextExtractor().register('application/pdf', fakePdfExtractor())`.
|
|
38
|
+
*/
|
|
39
|
+
export function fakePdfExtractor(text = 'extracted pdf text') {
|
|
40
|
+
return () => text;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Build a fully in-memory media→RAG ingestion for tests: a {@link MemoryVectorStore} + a deterministic
|
|
44
|
+
* {@link FakeEmbeddingProvider} + a {@link FakeMediaManager}, wired into a {@link MediaRagIngestion} and
|
|
45
|
+
* paired with an {@link EmbeddingRetriever} over the same store/embedder (so a test can ingest then
|
|
46
|
+
* retrieve, filtering by tenant/owner metadata). Seed files with `media.put(disk, key, contents)`.
|
|
47
|
+
*/
|
|
48
|
+
export function inMemoryMediaRagIngestion(options = {}) {
|
|
49
|
+
const embedder = options.embedder ?? new FakeEmbeddingProvider();
|
|
50
|
+
const store = options.store ?? new MemoryVectorStore();
|
|
51
|
+
const media = options.media ?? new FakeMediaManager();
|
|
52
|
+
const config = {
|
|
53
|
+
media,
|
|
54
|
+
embedder,
|
|
55
|
+
store,
|
|
56
|
+
extractor: options.extractor ?? defaultTextExtractor(),
|
|
57
|
+
...(options.contentTypes !== undefined ? { contentTypes: options.contentTypes } : {}),
|
|
58
|
+
...(options.resolve !== undefined ? { resolve: options.resolve } : {}),
|
|
59
|
+
...(options.maxBytes !== undefined ? { maxBytes: options.maxBytes } : {}),
|
|
60
|
+
};
|
|
61
|
+
return {
|
|
62
|
+
ingestion: mediaRagIngestion(config),
|
|
63
|
+
store,
|
|
64
|
+
embedder,
|
|
65
|
+
media,
|
|
66
|
+
retriever: new EmbeddingRetriever(embedder, store),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=fake-media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake-media.js","sourceRoot":"","sources":["../../../src/testing/fake-media.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ModelProvider, ModelTurnArgs, ModelTurnResult } from '../index.js';
|
|
2
|
+
export interface FakeTurn {
|
|
3
|
+
text: string;
|
|
4
|
+
/** If set, the turn asks to call this tool instead of finishing. */
|
|
5
|
+
toolCall?: {
|
|
6
|
+
name: string;
|
|
7
|
+
input: unknown;
|
|
8
|
+
};
|
|
9
|
+
/** If set, the turn reports an actual USD cost — as a gateway provider would. */
|
|
10
|
+
costUsd?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* `turnIndex` = how many assistant turns have already happened this run (derived from the
|
|
14
|
+
* message history), so the script is a pure function of its inputs — deterministic and
|
|
15
|
+
* replay-safe with no internal counter.
|
|
16
|
+
*/
|
|
17
|
+
export type FakeScript = (args: ModelTurnArgs, turnIndex: number) => FakeTurn;
|
|
18
|
+
/**
|
|
19
|
+
* A deterministic, offline `ModelProvider`. Drives the agent loop without any API key,
|
|
20
|
+
* streaming the scripted text to the sink and optionally requesting one tool call.
|
|
21
|
+
*/
|
|
22
|
+
export declare class FakeModelProvider implements ModelProvider {
|
|
23
|
+
private readonly script;
|
|
24
|
+
constructor(script: FakeScript);
|
|
25
|
+
runTurn(args: ModelTurnArgs): Promise<ModelTurnResult>;
|
|
26
|
+
}
|
|
27
|
+
/** A trivial script: stream a fixed reply and never call a tool. */
|
|
28
|
+
export declare function echoScript(reply?: string): FakeScript;
|
|
29
|
+
//# sourceMappingURL=fake-model-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake-model-provider.d.ts","sourceRoot":"","sources":["../../../src/testing/fake-model-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5C,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,KAAK,QAAQ,CAAC;AAE9E;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAEzC,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;CAwB7D;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,KAAK,SAAO,GAAG,UAAU,CAEnD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ActorDirectory } from '../spi/actor-directory.js';
|
|
2
|
+
/**
|
|
3
|
+
* In-memory {@link ActorDirectory}: a plain `actorRef → label` map. Handy for tests, the offline demo,
|
|
4
|
+
* and small apps that seed a fixed label table at boot. Missing refs are omitted from the result (never
|
|
5
|
+
* fabricated), so a governance surface falls back to rendering the raw ref.
|
|
6
|
+
*/
|
|
7
|
+
export declare class InMemoryActorDirectory implements ActorDirectory {
|
|
8
|
+
private readonly labels;
|
|
9
|
+
constructor(labels?: Record<string, string>);
|
|
10
|
+
/** Add or overwrite a single ref → label mapping. Returns `this` for chaining. */
|
|
11
|
+
set(ref: string, label: string): this;
|
|
12
|
+
resolveDisplay(refs: readonly string[]): Promise<Record<string, string>>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=in-memory-actor-directory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-actor-directory.d.ts","sourceRoot":"","sources":["../../../src/testing/in-memory-actor-directory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;gBAEjC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAI/C,kFAAkF;IAClF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/B,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAU/E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory {@link ActorDirectory}: a plain `actorRef → label` map. Handy for tests, the offline demo,
|
|
3
|
+
* and small apps that seed a fixed label table at boot. Missing refs are omitted from the result (never
|
|
4
|
+
* fabricated), so a governance surface falls back to rendering the raw ref.
|
|
5
|
+
*/
|
|
6
|
+
export class InMemoryActorDirectory {
|
|
7
|
+
labels;
|
|
8
|
+
constructor(labels = {}) {
|
|
9
|
+
this.labels = new Map(Object.entries(labels));
|
|
10
|
+
}
|
|
11
|
+
/** Add or overwrite a single ref → label mapping. Returns `this` for chaining. */
|
|
12
|
+
set(ref, label) {
|
|
13
|
+
this.labels.set(ref, label);
|
|
14
|
+
return this;
|
|
15
|
+
}
|
|
16
|
+
async resolveDisplay(refs) {
|
|
17
|
+
const out = {};
|
|
18
|
+
for (const ref of refs) {
|
|
19
|
+
const label = this.labels.get(ref);
|
|
20
|
+
if (label !== undefined) {
|
|
21
|
+
out[ref] = label;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return out;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=in-memory-actor-directory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-actor-directory.js","sourceRoot":"","sources":["../../../src/testing/in-memory-actor-directory.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IAChB,MAAM,CAAsB;IAE7C,YAAY,SAAiC,EAAE;QAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,kFAAkF;IAClF,GAAG,CAAC,GAAW,EAAE,KAAa;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAuB;QAC1C,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AttachmentStagingStore, StageAttachmentInput } from '../spi/attachment-staging.js';
|
|
2
|
+
import type { MessageAttachment } from '../types.js';
|
|
3
|
+
/** A staged record kept for test assertions (who uploaded what, and the reference it produced). */
|
|
4
|
+
export interface StagedRecord {
|
|
5
|
+
mediaId: string;
|
|
6
|
+
filename: string;
|
|
7
|
+
contentType: string;
|
|
8
|
+
sizeBytes: number;
|
|
9
|
+
actorId: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A fully in-memory {@link AttachmentStagingStore} for tests and the offline demo. It encodes the
|
|
13
|
+
* uploaded bytes into a `data:` URL — a URL the AI SDK's image/file parts fetch inline, with no
|
|
14
|
+
* external object store or presigning — so a staged attachment is immediately model-fetchable. Every
|
|
15
|
+
* `stage` call is recorded in {@link staged} for assertions. Not for production (a real store presigns
|
|
16
|
+
* against S3/GCS or wraps the host's media pipeline).
|
|
17
|
+
*/
|
|
18
|
+
export declare class InMemoryAttachmentStagingStore implements AttachmentStagingStore {
|
|
19
|
+
readonly staged: StagedRecord[];
|
|
20
|
+
stage(input: StageAttachmentInput): Promise<MessageAttachment>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=in-memory-attachment-staging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-attachment-staging.d.ts","sourceRoot":"","sources":["../../../src/testing/in-memory-attachment-staging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,mGAAmG;AACnG,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,qBAAa,8BAA+B,YAAW,sBAAsB;IAC3E,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,CAAM;IAE/B,KAAK,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAiBrE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A fully in-memory {@link AttachmentStagingStore} for tests and the offline demo. It encodes the
|
|
3
|
+
* uploaded bytes into a `data:` URL — a URL the AI SDK's image/file parts fetch inline, with no
|
|
4
|
+
* external object store or presigning — so a staged attachment is immediately model-fetchable. Every
|
|
5
|
+
* `stage` call is recorded in {@link staged} for assertions. Not for production (a real store presigns
|
|
6
|
+
* against S3/GCS or wraps the host's media pipeline).
|
|
7
|
+
*/
|
|
8
|
+
export class InMemoryAttachmentStagingStore {
|
|
9
|
+
staged = [];
|
|
10
|
+
async stage(input) {
|
|
11
|
+
const mediaId = `media-${this.staged.length + 1}`;
|
|
12
|
+
this.staged.push({
|
|
13
|
+
mediaId,
|
|
14
|
+
filename: input.filename,
|
|
15
|
+
contentType: input.contentType,
|
|
16
|
+
sizeBytes: input.sizeBytes,
|
|
17
|
+
actorId: input.actor.id,
|
|
18
|
+
});
|
|
19
|
+
const base64 = input.data.toString('base64');
|
|
20
|
+
return {
|
|
21
|
+
mediaId,
|
|
22
|
+
url: `data:${input.contentType};base64,${base64}`,
|
|
23
|
+
contentType: input.contentType,
|
|
24
|
+
name: input.filename,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=in-memory-attachment-staging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-attachment-staging.js","sourceRoot":"","sources":["../../../src/testing/in-memory-attachment-staging.ts"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,MAAM,OAAO,8BAA8B;IAChC,MAAM,GAAmB,EAAE,CAAC;IAErC,KAAK,CAAC,KAAK,CAAC,KAA2B;QACrC,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,OAAO;YACP,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE;SACxB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO;YACL,OAAO;YACP,GAAG,EAAE,QAAQ,KAAK,CAAC,WAAW,WAAW,MAAM,EAAE;YACjD,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,IAAI,EAAE,KAAK,CAAC,QAAQ;SACrB,CAAC;IACJ,CAAC;CACF"}
|