@namzu/sdk 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -0
- package/dist/advisory/context.test.d.ts +16 -0
- package/dist/advisory/context.test.d.ts.map +1 -0
- package/dist/advisory/context.test.js +92 -0
- package/dist/advisory/context.test.js.map +1 -0
- package/dist/advisory/evaluator.test.d.ts +34 -0
- package/dist/advisory/evaluator.test.d.ts.map +1 -0
- package/dist/advisory/evaluator.test.js +172 -0
- package/dist/advisory/evaluator.test.js.map +1 -0
- package/dist/advisory/executor.test.d.ts +35 -0
- package/dist/advisory/executor.test.d.ts.map +1 -0
- package/dist/advisory/executor.test.js +233 -0
- package/dist/advisory/executor.test.js.map +1 -0
- package/dist/advisory/registry.test.d.ts +16 -0
- package/dist/advisory/registry.test.d.ts.map +1 -0
- package/dist/advisory/registry.test.js +62 -0
- package/dist/advisory/registry.test.js.map +1 -0
- package/dist/bridge/a2a/agent-card.test.d.ts +24 -0
- package/dist/bridge/a2a/agent-card.test.d.ts.map +1 -0
- package/dist/bridge/a2a/agent-card.test.js +118 -0
- package/dist/bridge/a2a/agent-card.test.js.map +1 -0
- package/dist/bridge/a2a/mapper.test.d.ts +29 -0
- package/dist/bridge/a2a/mapper.test.d.ts.map +1 -0
- package/dist/bridge/a2a/mapper.test.js +265 -0
- package/dist/bridge/a2a/mapper.test.js.map +1 -0
- package/dist/bridge/a2a/message.test.d.ts +20 -0
- package/dist/bridge/a2a/message.test.d.ts.map +1 -0
- package/dist/bridge/a2a/message.test.js +116 -0
- package/dist/bridge/a2a/message.test.js.map +1 -0
- package/dist/bridge/a2a/task.test.d.ts +29 -0
- package/dist/bridge/a2a/task.test.d.ts.map +1 -0
- package/dist/bridge/a2a/task.test.js +198 -0
- package/dist/bridge/a2a/task.test.js.map +1 -0
- package/dist/bridge/mcp/connector/adapter.test.d.ts +27 -0
- package/dist/bridge/mcp/connector/adapter.test.d.ts.map +1 -0
- package/dist/bridge/mcp/connector/adapter.test.js +203 -0
- package/dist/bridge/mcp/connector/adapter.test.js.map +1 -0
- package/dist/bridge/sse/mapper.test.d.ts +27 -0
- package/dist/bridge/sse/mapper.test.d.ts.map +1 -0
- package/dist/bridge/sse/mapper.test.js +271 -0
- package/dist/bridge/sse/mapper.test.js.map +1 -0
- package/dist/bridge/tools/connector/adapter.d.ts +2 -2
- package/dist/bridge/tools/connector/adapter.test.d.ts +28 -0
- package/dist/bridge/tools/connector/adapter.test.d.ts.map +1 -0
- package/dist/bridge/tools/connector/adapter.test.js +182 -0
- package/dist/bridge/tools/connector/adapter.test.js.map +1 -0
- package/dist/bridge/tools/connector/definitions.test.d.ts +23 -0
- package/dist/bridge/tools/connector/definitions.test.d.ts.map +1 -0
- package/dist/bridge/tools/connector/definitions.test.js +158 -0
- package/dist/bridge/tools/connector/definitions.test.js.map +1 -0
- package/dist/bridge/tools/connector/router.test.d.ts +21 -0
- package/dist/bridge/tools/connector/router.test.d.ts.map +1 -0
- package/dist/bridge/tools/connector/router.test.js +139 -0
- package/dist/bridge/tools/connector/router.test.js.map +1 -0
- package/dist/bus/breaker.test.d.ts +41 -0
- package/dist/bus/breaker.test.d.ts.map +1 -0
- package/dist/bus/breaker.test.js +242 -0
- package/dist/bus/breaker.test.js.map +1 -0
- package/dist/bus/index.d.ts +3 -1
- package/dist/bus/index.d.ts.map +1 -1
- package/dist/bus/index.js +18 -11
- package/dist/bus/index.js.map +1 -1
- package/dist/bus/index.test.d.ts +25 -0
- package/dist/bus/index.test.d.ts.map +1 -0
- package/dist/bus/index.test.js +151 -0
- package/dist/bus/index.test.js.map +1 -0
- package/dist/bus/lock.test.d.ts +44 -0
- package/dist/bus/lock.test.d.ts.map +1 -0
- package/dist/bus/lock.test.js +226 -0
- package/dist/bus/lock.test.js.map +1 -0
- package/dist/bus/ownership.test.d.ts +26 -0
- package/dist/bus/ownership.test.d.ts.map +1 -0
- package/dist/bus/ownership.test.js +205 -0
- package/dist/bus/ownership.test.js.map +1 -0
- package/dist/config/runtime.d.ts +28 -28
- package/dist/connector/BaseConnector.test.d.ts +21 -0
- package/dist/connector/BaseConnector.test.d.ts.map +1 -0
- package/dist/connector/BaseConnector.test.js +108 -0
- package/dist/connector/BaseConnector.test.js.map +1 -0
- package/dist/connector/builtins/http.test.d.ts +30 -0
- package/dist/connector/builtins/http.test.d.ts.map +1 -0
- package/dist/connector/builtins/http.test.js +232 -0
- package/dist/connector/builtins/http.test.js.map +1 -0
- package/dist/connector/builtins/webhook.test.d.ts +20 -0
- package/dist/connector/builtins/webhook.test.d.ts.map +1 -0
- package/dist/connector/builtins/webhook.test.js +113 -0
- package/dist/connector/builtins/webhook.test.js.map +1 -0
- package/dist/connector/execution/factory.test.d.ts +16 -0
- package/dist/connector/execution/factory.test.d.ts.map +1 -0
- package/dist/connector/execution/factory.test.js +64 -0
- package/dist/connector/execution/factory.test.js.map +1 -0
- package/dist/connector/execution/remote.test.d.ts +16 -0
- package/dist/connector/execution/remote.test.d.ts.map +1 -0
- package/dist/connector/execution/remote.test.js +53 -0
- package/dist/connector/execution/remote.test.js.map +1 -0
- package/dist/connector/mcp/adapter.test.d.ts +34 -0
- package/dist/connector/mcp/adapter.test.d.ts.map +1 -0
- package/dist/connector/mcp/adapter.test.js +199 -0
- package/dist/connector/mcp/adapter.test.js.map +1 -0
- package/dist/probe/context.d.ts +8 -0
- package/dist/probe/context.d.ts.map +1 -0
- package/dist/probe/context.js +7 -0
- package/dist/probe/context.js.map +1 -0
- package/dist/probe/errors.d.ts +12 -0
- package/dist/probe/errors.d.ts.map +1 -0
- package/dist/probe/errors.js +21 -0
- package/dist/probe/errors.js.map +1 -0
- package/dist/probe/index.d.ts +5 -0
- package/dist/probe/index.d.ts.map +1 -0
- package/dist/probe/index.js +4 -0
- package/dist/probe/index.js.map +1 -0
- package/dist/probe/registry.d.ts +24 -0
- package/dist/probe/registry.d.ts.map +1 -0
- package/dist/probe/registry.js +228 -0
- package/dist/probe/registry.js.map +1 -0
- package/dist/probe/registry.test.d.ts +7 -0
- package/dist/probe/registry.test.d.ts.map +1 -0
- package/dist/probe/registry.test.js +310 -0
- package/dist/probe/registry.test.js.map +1 -0
- package/dist/provider/instrumentation.d.ts +9 -0
- package/dist/provider/instrumentation.d.ts.map +1 -0
- package/dist/provider/instrumentation.js +104 -0
- package/dist/provider/instrumentation.js.map +1 -0
- package/dist/provider/instrumentation.test.d.ts +2 -0
- package/dist/provider/instrumentation.test.d.ts.map +1 -0
- package/dist/provider/instrumentation.test.js +152 -0
- package/dist/provider/instrumentation.test.js.map +1 -0
- package/dist/public-runtime.d.ts +5 -0
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +4 -0
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-types.d.ts +3 -0
- package/dist/public-types.d.ts.map +1 -1
- package/dist/rag/chunking.test.d.ts +20 -0
- package/dist/rag/chunking.test.d.ts.map +1 -0
- package/dist/rag/chunking.test.js +92 -0
- package/dist/rag/chunking.test.js.map +1 -0
- package/dist/rag/context-assembler.test.d.ts +19 -0
- package/dist/rag/context-assembler.test.d.ts.map +1 -0
- package/dist/rag/context-assembler.test.js +98 -0
- package/dist/rag/context-assembler.test.js.map +1 -0
- package/dist/rag/embedding.test.d.ts +19 -0
- package/dist/rag/embedding.test.d.ts.map +1 -0
- package/dist/rag/embedding.test.js +115 -0
- package/dist/rag/embedding.test.js.map +1 -0
- package/dist/rag/ingestion.test.d.ts +22 -0
- package/dist/rag/ingestion.test.d.ts.map +1 -0
- package/dist/rag/ingestion.test.js +99 -0
- package/dist/rag/ingestion.test.js.map +1 -0
- package/dist/rag/knowledge-base.test.d.ts +17 -0
- package/dist/rag/knowledge-base.test.d.ts.map +1 -0
- package/dist/rag/knowledge-base.test.js +77 -0
- package/dist/rag/knowledge-base.test.js.map +1 -0
- package/dist/rag/rag-tool.test.d.ts +21 -0
- package/dist/rag/rag-tool.test.d.ts.map +1 -0
- package/dist/rag/rag-tool.test.js +149 -0
- package/dist/rag/rag-tool.test.js.map +1 -0
- package/dist/rag/retriever.test.d.ts +26 -0
- package/dist/rag/retriever.test.d.ts.map +1 -0
- package/dist/rag/retriever.test.js +180 -0
- package/dist/rag/retriever.test.js.map +1 -0
- package/dist/rag/vector-store.test.d.ts +38 -0
- package/dist/rag/vector-store.test.d.ts.map +1 -0
- package/dist/rag/vector-store.test.js +175 -0
- package/dist/rag/vector-store.test.js.map +1 -0
- package/dist/registry/ManagedRegistry.test.d.ts +21 -0
- package/dist/registry/ManagedRegistry.test.d.ts.map +1 -0
- package/dist/registry/ManagedRegistry.test.js +98 -0
- package/dist/registry/ManagedRegistry.test.js.map +1 -0
- package/dist/registry/Registry.test.d.ts +18 -0
- package/dist/registry/Registry.test.d.ts.map +1 -0
- package/dist/registry/Registry.test.js +79 -0
- package/dist/registry/Registry.test.js.map +1 -0
- package/dist/registry/agent/definitions.test.d.ts +15 -0
- package/dist/registry/agent/definitions.test.d.ts.map +1 -0
- package/dist/registry/agent/definitions.test.js +84 -0
- package/dist/registry/agent/definitions.test.js.map +1 -0
- package/dist/registry/connector/definitions.test.d.ts +13 -0
- package/dist/registry/connector/definitions.test.d.ts.map +1 -0
- package/dist/registry/connector/definitions.test.js +41 -0
- package/dist/registry/connector/definitions.test.js.map +1 -0
- package/dist/registry/connector/scoped.test.d.ts +21 -0
- package/dist/registry/connector/scoped.test.d.ts.map +1 -0
- package/dist/registry/connector/scoped.test.js +115 -0
- package/dist/registry/connector/scoped.test.js.map +1 -0
- package/dist/registry/plugin/index.test.d.ts +12 -0
- package/dist/registry/plugin/index.test.d.ts.map +1 -0
- package/dist/registry/plugin/index.test.js +69 -0
- package/dist/registry/plugin/index.test.js.map +1 -0
- package/dist/registry/tool/execute.test.d.ts +42 -0
- package/dist/registry/tool/execute.test.d.ts.map +1 -0
- package/dist/registry/tool/execute.test.js +281 -0
- package/dist/registry/tool/execute.test.js.map +1 -0
- package/dist/runtime/query/events.d.ts +3 -1
- package/dist/runtime/query/events.d.ts.map +1 -1
- package/dist/runtime/query/events.js +6 -1
- package/dist/runtime/query/events.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +3 -1
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +30 -1
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/iteration/phases/advisory.test.d.ts +42 -0
- package/dist/runtime/query/iteration/phases/advisory.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/advisory.test.js +334 -0
- package/dist/runtime/query/iteration/phases/advisory.test.js.map +1 -0
- package/dist/test-setup.d.ts +22 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +23 -0
- package/dist/test-setup.js.map +1 -0
- package/dist/types/bus/index.d.ts +46 -2
- package/dist/types/bus/index.d.ts.map +1 -1
- package/dist/types/doctor/check.d.ts +41 -0
- package/dist/types/doctor/check.d.ts.map +1 -0
- package/dist/types/doctor/check.js +2 -0
- package/dist/types/doctor/check.js.map +1 -0
- package/dist/types/doctor/index.d.ts +2 -0
- package/dist/types/doctor/index.d.ts.map +1 -0
- package/dist/types/doctor/index.js +2 -0
- package/dist/types/doctor/index.js.map +1 -0
- package/dist/types/probe/event-kind.d.ts +6 -0
- package/dist/types/probe/event-kind.d.ts.map +1 -0
- package/dist/types/probe/event-kind.js +2 -0
- package/dist/types/probe/event-kind.js.map +1 -0
- package/dist/types/probe/event-of.d.ts +5 -0
- package/dist/types/probe/event-of.d.ts.map +1 -0
- package/dist/types/probe/event-of.js +2 -0
- package/dist/types/probe/event-of.js.map +1 -0
- package/dist/types/probe/index.d.ts +4 -0
- package/dist/types/probe/index.d.ts.map +1 -0
- package/dist/types/probe/index.js +2 -0
- package/dist/types/probe/index.js.map +1 -0
- package/dist/types/probe/registry.d.ts +27 -0
- package/dist/types/probe/registry.d.ts.map +1 -0
- package/dist/types/probe/registry.js +2 -0
- package/dist/types/probe/registry.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +5 -0
- package/dist/utils/logger.js.map +1 -1
- package/dist/vault/instrumentation.d.ts +11 -0
- package/dist/vault/instrumentation.d.ts.map +1 -0
- package/dist/vault/instrumentation.js +32 -0
- package/dist/vault/instrumentation.js.map +1 -0
- package/dist/vault/instrumentation.test.d.ts +2 -0
- package/dist/vault/instrumentation.test.d.ts.map +1 -0
- package/dist/vault/instrumentation.test.js +80 -0
- package/dist/vault/instrumentation.test.js.map +1 -0
- package/package.json +4 -1
- package/src/advisory/context.test.ts +109 -0
- package/src/advisory/evaluator.test.ts +192 -0
- package/src/advisory/executor.test.ts +272 -0
- package/src/advisory/registry.test.ts +75 -0
- package/src/bridge/a2a/agent-card.test.ts +140 -0
- package/src/bridge/a2a/mapper.test.ts +293 -0
- package/src/bridge/a2a/message.test.ts +138 -0
- package/src/bridge/a2a/task.test.ts +235 -0
- package/src/bridge/mcp/connector/adapter.test.ts +230 -0
- package/src/bridge/sse/mapper.test.ts +422 -0
- package/src/bridge/tools/connector/adapter.test.ts +224 -0
- package/src/bridge/tools/connector/definitions.test.ts +183 -0
- package/src/bridge/tools/connector/router.test.ts +159 -0
- package/src/bus/breaker.test.ts +274 -0
- package/src/bus/index.test.ts +183 -0
- package/src/bus/index.ts +21 -10
- package/src/bus/lock.test.ts +265 -0
- package/src/bus/ownership.test.ts +243 -0
- package/src/connector/BaseConnector.test.ts +130 -0
- package/src/connector/builtins/http.test.ts +290 -0
- package/src/connector/builtins/webhook.test.ts +138 -0
- package/src/connector/execution/factory.test.ts +75 -0
- package/src/connector/execution/remote.test.ts +63 -0
- package/src/connector/mcp/adapter.test.ts +249 -0
- package/src/probe/context.ts +14 -0
- package/src/probe/errors.ts +27 -0
- package/src/probe/index.ts +4 -0
- package/src/probe/registry.test.ts +480 -0
- package/src/probe/registry.ts +276 -0
- package/src/provider/instrumentation.test.ts +192 -0
- package/src/provider/instrumentation.ts +139 -0
- package/src/public-runtime.ts +17 -0
- package/src/public-types.ts +3 -0
- package/src/rag/chunking.test.ts +107 -0
- package/src/rag/context-assembler.test.ts +114 -0
- package/src/rag/embedding.test.ts +130 -0
- package/src/rag/ingestion.test.ts +114 -0
- package/src/rag/knowledge-base.test.ts +106 -0
- package/src/rag/rag-tool.test.ts +167 -0
- package/src/rag/retriever.test.ts +210 -0
- package/src/rag/vector-store.test.ts +196 -0
- package/src/registry/ManagedRegistry.test.ts +118 -0
- package/src/registry/Registry.test.ts +91 -0
- package/src/registry/agent/definitions.test.ts +100 -0
- package/src/registry/connector/definitions.test.ts +51 -0
- package/src/registry/connector/scoped.test.ts +129 -0
- package/src/registry/plugin/index.test.ts +85 -0
- package/src/registry/tool/execute.test.ts +330 -0
- package/src/runtime/query/events.ts +6 -1
- package/src/runtime/query/executor.ts +34 -0
- package/src/runtime/query/iteration/phases/advisory.test.ts +412 -0
- package/src/test-setup.ts +24 -0
- package/src/types/bus/index.ts +54 -2
- package/src/types/doctor/check.ts +53 -0
- package/src/types/doctor/index.ts +9 -0
- package/src/types/probe/event-kind.ts +8 -0
- package/src/types/probe/event-of.ts +3 -0
- package/src/types/probe/index.ts +11 -0
- package/src/types/probe/registry.ts +36 -0
- package/src/utils/logger.ts +6 -1
- package/src/vault/instrumentation.test.ts +98 -0
- package/src/vault/instrumentation.ts +56 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vitest `setupFiles` entry for `@namzu/sdk`.
|
|
3
|
+
*
|
|
4
|
+
* Silences the root logger for the entire test run. Tests that assert on
|
|
5
|
+
* log output use their own mocked Logger instances (constructed via the
|
|
6
|
+
* `makeLogger()` helpers colocated with each test) — those are not
|
|
7
|
+
* affected by the root-level silence.
|
|
8
|
+
*
|
|
9
|
+
* The only thing this suppresses is the stderr spam produced by
|
|
10
|
+
* production code paths that fall through to `getRootLogger()` — e.g.
|
|
11
|
+
* `ToolRegistry.execute`'s zod-validation and thrown-error branches,
|
|
12
|
+
* `ConnectorToolRouter.getTools`' per-instance error catch, the
|
|
13
|
+
* AgentBus listener-throw handler, and every connector's `connect()`
|
|
14
|
+
* info log. GitHub Actions annotates any `[ERROR]` stderr line as a
|
|
15
|
+
* workflow error; silencing the root logger during tests keeps the CI
|
|
16
|
+
* log clean.
|
|
17
|
+
*
|
|
18
|
+
* This is test-only configuration. It runs before every test file and
|
|
19
|
+
* does not affect consumers.
|
|
20
|
+
*/
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=test-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vitest `setupFiles` entry for `@namzu/sdk`.
|
|
3
|
+
*
|
|
4
|
+
* Silences the root logger for the entire test run. Tests that assert on
|
|
5
|
+
* log output use their own mocked Logger instances (constructed via the
|
|
6
|
+
* `makeLogger()` helpers colocated with each test) — those are not
|
|
7
|
+
* affected by the root-level silence.
|
|
8
|
+
*
|
|
9
|
+
* The only thing this suppresses is the stderr spam produced by
|
|
10
|
+
* production code paths that fall through to `getRootLogger()` — e.g.
|
|
11
|
+
* `ToolRegistry.execute`'s zod-validation and thrown-error branches,
|
|
12
|
+
* `ConnectorToolRouter.getTools`' per-instance error catch, the
|
|
13
|
+
* AgentBus listener-throw handler, and every connector's `connect()`
|
|
14
|
+
* info log. GitHub Actions annotates any `[ERROR]` stderr line as a
|
|
15
|
+
* workflow error; silencing the root logger during tests keeps the CI
|
|
16
|
+
* log clean.
|
|
17
|
+
*
|
|
18
|
+
* This is test-only configuration. It runs before every test file and
|
|
19
|
+
* does not affect consumers.
|
|
20
|
+
*/
|
|
21
|
+
import { configureLogger } from './utils/logger.js';
|
|
22
|
+
configureLogger({ level: 'silent' });
|
|
23
|
+
//# sourceMappingURL=test-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-setup.js","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { RunId } from '../ids/index.js';
|
|
2
|
-
export type LockId
|
|
1
|
+
import type { CredentialId, LockId, RunId, SandboxId, TenantId } from '../ids/index.js';
|
|
2
|
+
export type { LockId } from '../ids/index.js';
|
|
3
|
+
export type ProviderCallId = `pcall_${string}`;
|
|
3
4
|
export type CircuitBreakerState = 'closed' | 'open' | 'half_open';
|
|
4
5
|
export interface CircuitBreakerSnapshot {
|
|
5
6
|
readonly state: CircuitBreakerState;
|
|
@@ -37,6 +38,13 @@ export type OwnershipClaimResult = {
|
|
|
37
38
|
currentOwner: RunId;
|
|
38
39
|
filePath: string;
|
|
39
40
|
};
|
|
41
|
+
export interface ProviderCallUsage {
|
|
42
|
+
readonly inputTokens?: number;
|
|
43
|
+
readonly outputTokens?: number;
|
|
44
|
+
readonly totalTokens?: number;
|
|
45
|
+
readonly costUsd?: number;
|
|
46
|
+
}
|
|
47
|
+
export type SandboxDecisionAction = 'allow' | 'deny';
|
|
40
48
|
export type AgentBusEvent = {
|
|
41
49
|
type: 'lock_acquired';
|
|
42
50
|
lockId: LockId;
|
|
@@ -91,6 +99,42 @@ export type AgentBusEvent = {
|
|
|
91
99
|
} | {
|
|
92
100
|
type: 'breaker_probe_failure';
|
|
93
101
|
agentRunId: RunId;
|
|
102
|
+
} | {
|
|
103
|
+
type: 'provider_call_start';
|
|
104
|
+
providerId: string;
|
|
105
|
+
model: string;
|
|
106
|
+
callId: ProviderCallId;
|
|
107
|
+
runId?: RunId;
|
|
108
|
+
} | {
|
|
109
|
+
type: 'provider_call_completed';
|
|
110
|
+
providerId: string;
|
|
111
|
+
model: string;
|
|
112
|
+
callId: ProviderCallId;
|
|
113
|
+
runId?: RunId;
|
|
114
|
+
durationMs: number;
|
|
115
|
+
usage?: ProviderCallUsage;
|
|
116
|
+
} | {
|
|
117
|
+
type: 'provider_call_failed';
|
|
118
|
+
providerId: string;
|
|
119
|
+
model: string;
|
|
120
|
+
callId: ProviderCallId;
|
|
121
|
+
runId?: RunId;
|
|
122
|
+
durationMs: number;
|
|
123
|
+
error: string;
|
|
124
|
+
} | {
|
|
125
|
+
type: 'vault_lookup';
|
|
126
|
+
vaultId: string;
|
|
127
|
+
credentialId?: CredentialId;
|
|
128
|
+
tenantId?: TenantId;
|
|
129
|
+
found: boolean;
|
|
130
|
+
runId?: RunId;
|
|
131
|
+
} | {
|
|
132
|
+
type: 'sandbox_decision';
|
|
133
|
+
sandboxId: SandboxId;
|
|
134
|
+
action: SandboxDecisionAction;
|
|
135
|
+
resource: string;
|
|
136
|
+
ruleId?: string;
|
|
137
|
+
runId?: RunId;
|
|
94
138
|
};
|
|
95
139
|
export type AgentBusEventListener = (event: AgentBusEvent) => void;
|
|
96
140
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/bus/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/bus/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export type DoctorStatus = 'pass' | 'fail' | 'inconclusive' | 'warn';
|
|
2
|
+
export type DoctorCategory = 'sandbox' | 'providers' | 'vault' | 'telemetry' | 'runtime' | 'plugins' | 'custom';
|
|
3
|
+
export interface DoctorCheckContext {
|
|
4
|
+
readonly cwd: string;
|
|
5
|
+
readonly env: Readonly<Record<string, string | undefined>>;
|
|
6
|
+
readonly projectRoot: string | null;
|
|
7
|
+
}
|
|
8
|
+
export interface DoctorCheckResult {
|
|
9
|
+
readonly status: DoctorStatus;
|
|
10
|
+
readonly message?: string;
|
|
11
|
+
readonly remediation?: string;
|
|
12
|
+
readonly durationMs?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface DoctorCheck {
|
|
15
|
+
readonly id: string;
|
|
16
|
+
readonly category: DoctorCategory;
|
|
17
|
+
readonly run: (ctx: DoctorCheckContext) => Promise<DoctorCheckResult>;
|
|
18
|
+
readonly fix?: (ctx: DoctorCheckContext) => Promise<DoctorCheckResult>;
|
|
19
|
+
}
|
|
20
|
+
export interface DoctorCheckRecord {
|
|
21
|
+
readonly id: string;
|
|
22
|
+
readonly category: DoctorCategory;
|
|
23
|
+
readonly status: DoctorStatus;
|
|
24
|
+
readonly message?: string;
|
|
25
|
+
readonly remediation?: string;
|
|
26
|
+
readonly durationMs: number;
|
|
27
|
+
}
|
|
28
|
+
export interface DoctorReport {
|
|
29
|
+
readonly version: string;
|
|
30
|
+
readonly timestamp: string;
|
|
31
|
+
readonly checks: readonly DoctorCheckRecord[];
|
|
32
|
+
readonly summary: {
|
|
33
|
+
readonly pass: number;
|
|
34
|
+
readonly fail: number;
|
|
35
|
+
readonly inconclusive: number;
|
|
36
|
+
readonly warn: number;
|
|
37
|
+
readonly total: number;
|
|
38
|
+
};
|
|
39
|
+
readonly exit: 0 | 1 | 2 | 70;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/types/doctor/check.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,cAAc,GAAG,MAAM,CAAA;AAEpE,MAAM,MAAM,cAAc,GACvB,SAAS,GACT,WAAW,GACX,OAAO,GACP,WAAW,GACX,SAAS,GACT,SAAS,GACT,QAAQ,CAAA;AAEX,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;IAC1D,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CACnC;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACrE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;CACtE;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC7C,QAAQ,CAAC,OAAO,EAAE;QACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;QAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/types/doctor/check.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/doctor/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACZ,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/doctor/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AgentBusEvent } from '../bus/index.js';
|
|
2
|
+
import type { RunEvent } from '../run/events.js';
|
|
3
|
+
export type ProbeEventKind = RunEvent['type'] | AgentBusEvent['type'];
|
|
4
|
+
export type VetoableEventKind = 'tool_executing';
|
|
5
|
+
export type ProbeEvent = RunEvent | AgentBusEvent;
|
|
6
|
+
//# sourceMappingURL=event-kind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-kind.d.ts","sourceRoot":"","sources":["../../../src/types/probe/event-kind.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEhD,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;AAErE,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,CAAA;AAEhD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-kind.js","sourceRoot":"","sources":["../../../src/types/probe/event-kind.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-of.d.ts","sourceRoot":"","sources":["../../../src/types/probe/event-of.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEjE,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-of.js","sourceRoot":"","sources":["../../../src/types/probe/event-of.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type { ProbeEvent, ProbeEventKind, VetoableEventKind } from './event-kind.js';
|
|
2
|
+
export type { ProbeEventOf } from './event-of.js';
|
|
3
|
+
export type { ProbeContext, ProbeHandler, ProbeOptions, Unsubscribe, VetoDecision, VetoHandler, VetoOutcome, } from './registry.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/probe/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACpF,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjD,YAAY,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,GACX,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/probe/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { RunId } from '../ids/index.js';
|
|
2
|
+
import type { ProbeEventKind, VetoableEventKind } from './event-kind.js';
|
|
3
|
+
import type { ProbeEventOf } from './event-of.js';
|
|
4
|
+
export type Unsubscribe = () => void;
|
|
5
|
+
export interface ProbeContext {
|
|
6
|
+
readonly runId?: RunId;
|
|
7
|
+
readonly isReplay: boolean;
|
|
8
|
+
}
|
|
9
|
+
export type ProbeHandler<K extends ProbeEventKind> = (event: ProbeEventOf<K>, ctx: ProbeContext) => void;
|
|
10
|
+
export type VetoDecision = 'allow' | 'deny' | {
|
|
11
|
+
readonly action: 'deny';
|
|
12
|
+
readonly reason: string;
|
|
13
|
+
};
|
|
14
|
+
export type VetoHandler<K extends VetoableEventKind> = (event: ProbeEventOf<K>, ctx: ProbeContext) => VetoDecision;
|
|
15
|
+
export interface VetoOutcome {
|
|
16
|
+
readonly action: 'allow' | 'deny';
|
|
17
|
+
readonly probeName?: string;
|
|
18
|
+
readonly reason?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ProbeOptions<K extends ProbeEventKind = ProbeEventKind> {
|
|
21
|
+
readonly where?: (event: ProbeEventOf<K>) => boolean;
|
|
22
|
+
readonly priority?: number;
|
|
23
|
+
readonly name?: string;
|
|
24
|
+
readonly otel?: boolean;
|
|
25
|
+
readonly override?: boolean;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/types/probe/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAA;AAEpC,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,cAAc,IAAI,CACpD,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,GAAG,EAAE,YAAY,KACb,IAAI,CAAA;AAET,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAElG,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,iBAAiB,IAAI,CACtD,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,GAAG,EAAE,YAAY,KACb,YAAY,CAAA;AAEjB,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAA;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAA;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/types/probe/registry.ts"],"names":[],"mappings":""}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;AAErE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAchD,MAAM,WAAW,MAAM;IACtB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IAC/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IAC9C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IAC9C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IAC/C,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAA;CAClC;AAsCD,wBAAgB,aAAa,IAAI,MAAM,CAKtC;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,QAAQ,CAAA;CAAE,GAAG,IAAI,CAEnE"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -3,6 +3,11 @@ const LOG_LEVELS = {
|
|
|
3
3
|
info: 1,
|
|
4
4
|
warn: 2,
|
|
5
5
|
error: 3,
|
|
6
|
+
// `silent` sits above every emit level so the `level < minLevelNum`
|
|
7
|
+
// guard in `log()` always short-circuits when configured. Used by
|
|
8
|
+
// test harnesses to suppress unmocked `getRootLogger()` stderr
|
|
9
|
+
// writes; see packages/sdk/src/test-setup.ts.
|
|
10
|
+
silent: 4,
|
|
6
11
|
};
|
|
7
12
|
function createLoggerImpl(name, minLevel, parentContext) {
|
|
8
13
|
const minLevelNum = LOG_LEVELS[minLevel];
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,GAA6B;IAC5C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,GAA6B;IAC5C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,oEAAoE;IACpE,kEAAkE;IAClE,+DAA+D;IAC/D,8CAA8C;IAC9C,MAAM,EAAE,CAAC;CACT,CAAA;AAUD,SAAS,gBAAgB,CAAC,IAAY,EAAE,QAAkB,EAAE,aAAyB;IACpF,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IAExC,SAAS,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,IAAiB;QAC/D,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,WAAW;YAAE,OAAM;QAE3C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,MAAM,KAAK,CAAC,WAAW,EAAE,MAAM,IAAI,GAAG,CAAA;QAClE,MAAM,MAAM,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,IAAI,EAAE,CAAA;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;QAEjD,IAAI,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACzE,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,CAAA;QAC/C,CAAC;IACF,CAAC;IAED,SAAS,KAAK,CAAC,OAAmB;QACjC,OAAO,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE;YACvF,GAAG,aAAa;YAChB,GAAG,OAAO;SACV,CAAC,CAAA;IACH,CAAC;IAED,OAAO;QACN,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;QAC7C,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;QAC3C,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;QAC3C,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;QAC7C,KAAK;KACL,CAAA;AACF,CAAC;AAED,IAAI,WAAW,GAAkB,IAAI,CAAA;AAErC,MAAM,UAAU,aAAa;IAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,WAAW,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,WAAW,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA6B;IAC5D,WAAW,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM,EAAE,EAAE,CAAC,CAAA;AACrE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ProbeRegistry } from '../probe/registry.js';
|
|
2
|
+
import type { CredentialVault } from '../types/connector/index.js';
|
|
3
|
+
import type { RunId, TenantId } from '../types/ids/index.js';
|
|
4
|
+
export interface VaultInstrumentationOptions {
|
|
5
|
+
readonly probes?: ProbeRegistry;
|
|
6
|
+
readonly runId?: RunId;
|
|
7
|
+
readonly vaultId?: string;
|
|
8
|
+
readonly tenantId?: TenantId;
|
|
9
|
+
}
|
|
10
|
+
export declare function wrapVaultWithProbes(vault: CredentialVault, opts?: VaultInstrumentationOptions): CredentialVault;
|
|
11
|
+
//# sourceMappingURL=instrumentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/vault/instrumentation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAiC,MAAM,sBAAsB,CAAA;AACxF,OAAO,KAAK,EAA6B,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7F,OAAO,KAAK,EAA6B,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEvF,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAA;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAC5B;AAED,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,eAAe,EACtB,IAAI,GAAE,2BAAgC,GACpC,eAAe,CAwCjB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { buildProbeContext } from '../probe/context.js';
|
|
2
|
+
import { probe as defaultProbeRegistry } from '../probe/registry.js';
|
|
3
|
+
export function wrapVaultWithProbes(vault, opts = {}) {
|
|
4
|
+
const probes = opts.probes ?? defaultProbeRegistry;
|
|
5
|
+
const runId = opts.runId;
|
|
6
|
+
const vaultId = opts.vaultId ?? vault.constructor.name;
|
|
7
|
+
const tenantIdHint = opts.tenantId;
|
|
8
|
+
return {
|
|
9
|
+
store(tenantId, connectorId, label, auth) {
|
|
10
|
+
return vault.store(tenantId, connectorId, label, auth);
|
|
11
|
+
},
|
|
12
|
+
async retrieve(credentialId) {
|
|
13
|
+
const result = await vault.retrieve(credentialId);
|
|
14
|
+
probes.dispatch({
|
|
15
|
+
type: 'vault_lookup',
|
|
16
|
+
vaultId,
|
|
17
|
+
credentialId,
|
|
18
|
+
tenantId: tenantIdHint,
|
|
19
|
+
found: result !== undefined,
|
|
20
|
+
runId,
|
|
21
|
+
}, buildProbeContext({ runId }));
|
|
22
|
+
return result;
|
|
23
|
+
},
|
|
24
|
+
revoke(credentialId) {
|
|
25
|
+
return vault.revoke(credentialId);
|
|
26
|
+
},
|
|
27
|
+
list(tenantId, connectorId) {
|
|
28
|
+
return vault.list(tenantId, connectorId);
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/vault/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAsB,KAAK,IAAI,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAWxF,MAAM,UAAU,mBAAmB,CAClC,KAAsB,EACtB,OAAoC,EAAE;IAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,oBAAoB,CAAA;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAA;IACtD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;IAElC,OAAO;QACN,KAAK,CACJ,QAAkB,EAClB,WAAwB,EACxB,KAAa,EACb,IAAgB;YAEhB,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QACvD,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,YAA0B;YACxC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;YACjD,MAAM,CAAC,QAAQ,CACd;gBACC,IAAI,EAAE,cAAc;gBACpB,OAAO;gBACP,YAAY;gBACZ,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,MAAM,KAAK,SAAS;gBAC3B,KAAK;aACL,EACD,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAC5B,CAAA;YACD,OAAO,MAAM,CAAA;QACd,CAAC;QAED,MAAM,CAAC,YAA0B;YAChC,OAAO,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAClC,CAAC;QAED,IAAI,CAAC,QAAkB,EAAE,WAAyB;YACjD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;QACzC,CAAC;KACD,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.test.d.ts","sourceRoot":"","sources":["../../src/vault/instrumentation.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { createProbeRegistry } from '../probe/registry.js';
|
|
3
|
+
import { InMemoryCredentialVault } from './InMemoryCredentialVault.js';
|
|
4
|
+
import { wrapVaultWithProbes } from './instrumentation.js';
|
|
5
|
+
const tenant = 'tnt_acme';
|
|
6
|
+
const connector = 'conn_x';
|
|
7
|
+
describe('wrapVaultWithProbes', () => {
|
|
8
|
+
it('emits vault_lookup with found:true when retrieve hits', async () => {
|
|
9
|
+
const reg = createProbeRegistry();
|
|
10
|
+
const seen = [];
|
|
11
|
+
reg.onAny((event) => seen.push(event));
|
|
12
|
+
const inner = new InMemoryCredentialVault();
|
|
13
|
+
const ref = await inner.store(tenant, connector, 'k', { type: 'apiKey', apiKey: 's' });
|
|
14
|
+
const wrapped = wrapVaultWithProbes(inner, { probes: reg, vaultId: 'in-memory' });
|
|
15
|
+
const result = await wrapped.retrieve(ref.id);
|
|
16
|
+
expect(result).toBeDefined();
|
|
17
|
+
expect(seen.length).toBe(1);
|
|
18
|
+
const event = seen[0];
|
|
19
|
+
expect(event.type).toBe('vault_lookup');
|
|
20
|
+
expect(event.found).toBe(true);
|
|
21
|
+
expect(event.vaultId).toBe('in-memory');
|
|
22
|
+
expect(event.credentialId).toBe(ref.id);
|
|
23
|
+
});
|
|
24
|
+
it('emits vault_lookup with found:false when retrieve misses', async () => {
|
|
25
|
+
const reg = createProbeRegistry();
|
|
26
|
+
const seen = [];
|
|
27
|
+
reg.onAny((event) => seen.push(event));
|
|
28
|
+
const wrapped = wrapVaultWithProbes(new InMemoryCredentialVault(), {
|
|
29
|
+
probes: reg,
|
|
30
|
+
vaultId: 'in-memory',
|
|
31
|
+
});
|
|
32
|
+
const missing = 'cred_missing';
|
|
33
|
+
const result = await wrapped.retrieve(missing);
|
|
34
|
+
expect(result).toBeUndefined();
|
|
35
|
+
expect(seen.length).toBe(1);
|
|
36
|
+
const event = seen[0];
|
|
37
|
+
expect(event.found).toBe(false);
|
|
38
|
+
expect(event.credentialId).toBe(missing);
|
|
39
|
+
});
|
|
40
|
+
it('does not emit on store/revoke/list — retrieve is the audit point', async () => {
|
|
41
|
+
const reg = createProbeRegistry();
|
|
42
|
+
const seen = [];
|
|
43
|
+
reg.onAny((event) => seen.push(event));
|
|
44
|
+
const wrapped = wrapVaultWithProbes(new InMemoryCredentialVault(), { probes: reg });
|
|
45
|
+
const ref = await wrapped.store(tenant, connector, 'k', {
|
|
46
|
+
type: 'apiKey',
|
|
47
|
+
apiKey: 's',
|
|
48
|
+
});
|
|
49
|
+
await wrapped.list(tenant);
|
|
50
|
+
await wrapped.revoke(ref.id);
|
|
51
|
+
expect(seen.length).toBe(0);
|
|
52
|
+
});
|
|
53
|
+
it('does not leak the secret value in the emitted event', async () => {
|
|
54
|
+
const reg = createProbeRegistry();
|
|
55
|
+
const seen = [];
|
|
56
|
+
reg.onAny((event) => seen.push(event));
|
|
57
|
+
const inner = new InMemoryCredentialVault();
|
|
58
|
+
const ref = await inner.store(tenant, connector, 'k', {
|
|
59
|
+
type: 'apiKey',
|
|
60
|
+
apiKey: 'super-secret-value',
|
|
61
|
+
});
|
|
62
|
+
const wrapped = wrapVaultWithProbes(inner, { probes: reg });
|
|
63
|
+
await wrapped.retrieve(ref.id);
|
|
64
|
+
const event = seen[0];
|
|
65
|
+
const serialized = JSON.stringify(event);
|
|
66
|
+
expect(serialized).not.toContain('super-secret-value');
|
|
67
|
+
});
|
|
68
|
+
it('falls back to constructor.name as vaultId when not specified', async () => {
|
|
69
|
+
const reg = createProbeRegistry();
|
|
70
|
+
const seen = [];
|
|
71
|
+
reg.onAny((event) => seen.push(event));
|
|
72
|
+
const inner = new InMemoryCredentialVault();
|
|
73
|
+
const ref = await inner.store(tenant, connector, 'k', { type: 'apiKey', apiKey: 's' });
|
|
74
|
+
const wrapped = wrapVaultWithProbes(inner, { probes: reg });
|
|
75
|
+
await wrapped.retrieve(ref.id);
|
|
76
|
+
const event = seen[0];
|
|
77
|
+
expect(event.vaultId).toBe('InMemoryCredentialVault');
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=instrumentation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.test.js","sourceRoot":"","sources":["../../src/vault/instrumentation.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@namzu/sdk",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "Open-source AI agent SDK with a built-in runtime. Nothing between you and your agents.",
|
|
5
5
|
"license": "FSL-1.1-MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -43,6 +43,8 @@
|
|
|
43
43
|
"@biomejs/biome": "^1.9.4",
|
|
44
44
|
"@opentelemetry/api": "^1.9.0",
|
|
45
45
|
"@types/node": "^22.19.17",
|
|
46
|
+
"@vitest/coverage-v8": "^2.1.9",
|
|
47
|
+
"fast-check": "^4.7.0",
|
|
46
48
|
"knip": "^6.4.1",
|
|
47
49
|
"typescript": "^5.5.0",
|
|
48
50
|
"vitest": "^2.0.0",
|
|
@@ -56,6 +58,7 @@
|
|
|
56
58
|
"lint:fix": "biome check --write src/",
|
|
57
59
|
"format": "biome format --write src/",
|
|
58
60
|
"test": "vitest run --passWithNoTests",
|
|
61
|
+
"test:coverage": "vitest run --passWithNoTests --coverage",
|
|
59
62
|
"typecheck": "tsc --noEmit",
|
|
60
63
|
"knip": "knip",
|
|
61
64
|
"knip:production": "knip --production"
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Current-code invariants asserted (2026-04-21, ses_006 Phase 6):
|
|
3
|
+
*
|
|
4
|
+
* - `AdvisoryContext` composes a registry + executor + evaluator +
|
|
5
|
+
* optional budget. It is a dumb container + a call-history log.
|
|
6
|
+
* - `recordCall(record)` appends to `callHistory` in call order.
|
|
7
|
+
* - `getBudgetStatus()`:
|
|
8
|
+
* - `used` = `callHistory.length`.
|
|
9
|
+
* - `total` = `budget?.maxCallsPerRun` (undefined when no budget).
|
|
10
|
+
* - `remaining` = total − used when total defined; undefined else.
|
|
11
|
+
* - `checkBudget()`:
|
|
12
|
+
* - Allowed when no budget OR remaining > 0.
|
|
13
|
+
* - Denied with reason when remaining ≤ 0.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { describe, expect, it } from 'vitest'
|
|
17
|
+
|
|
18
|
+
import type { AdvisoryCallRecord } from '../types/advisory/index.js'
|
|
19
|
+
|
|
20
|
+
import { AdvisoryContext } from './context.js'
|
|
21
|
+
import type { TriggerEvaluator } from './evaluator.js'
|
|
22
|
+
import type { AdvisoryExecutor } from './executor.js'
|
|
23
|
+
import type { AdvisorRegistry } from './registry.js'
|
|
24
|
+
|
|
25
|
+
function stubRegistry(): AdvisorRegistry {
|
|
26
|
+
return {} as unknown as AdvisorRegistry
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function stubExecutor(): AdvisoryExecutor {
|
|
30
|
+
return {} as unknown as AdvisoryExecutor
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function stubEvaluator(): TriggerEvaluator {
|
|
34
|
+
return {} as unknown as TriggerEvaluator
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function callRecord(id: string): AdvisoryCallRecord {
|
|
38
|
+
return {
|
|
39
|
+
advisorId: id,
|
|
40
|
+
request: { question: 'q' },
|
|
41
|
+
result: { advice: 'a' },
|
|
42
|
+
usage: {
|
|
43
|
+
promptTokens: 0,
|
|
44
|
+
completionTokens: 0,
|
|
45
|
+
totalTokens: 0,
|
|
46
|
+
cachedTokens: 0,
|
|
47
|
+
cacheWriteTokens: 0,
|
|
48
|
+
},
|
|
49
|
+
cost: { inputCostPer1M: 0, outputCostPer1M: 0, totalCost: 0, cacheDiscount: 0 },
|
|
50
|
+
durationMs: 0,
|
|
51
|
+
iteration: 0,
|
|
52
|
+
timestamp: Date.now(),
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
describe('AdvisoryContext', () => {
|
|
57
|
+
it('starts with empty callHistory', () => {
|
|
58
|
+
const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator())
|
|
59
|
+
expect(ctx.callHistory).toEqual([])
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
it('recordCall appends in order', () => {
|
|
63
|
+
const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator())
|
|
64
|
+
ctx.recordCall(callRecord('a'))
|
|
65
|
+
ctx.recordCall(callRecord('b'))
|
|
66
|
+
expect(ctx.callHistory.map((r) => r.advisorId)).toEqual(['a', 'b'])
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
describe('getBudgetStatus', () => {
|
|
70
|
+
it('no budget → total + remaining undefined; used reflects history length', () => {
|
|
71
|
+
const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator())
|
|
72
|
+
ctx.recordCall(callRecord('a'))
|
|
73
|
+
expect(ctx.getBudgetStatus()).toEqual({ used: 1, total: undefined, remaining: undefined })
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
it('with budget → total + remaining computed', () => {
|
|
77
|
+
const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator(), {
|
|
78
|
+
maxCallsPerRun: 3,
|
|
79
|
+
})
|
|
80
|
+
ctx.recordCall(callRecord('a'))
|
|
81
|
+
expect(ctx.getBudgetStatus()).toEqual({ used: 1, total: 3, remaining: 2 })
|
|
82
|
+
})
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
describe('checkBudget', () => {
|
|
86
|
+
it('allowed when no budget', () => {
|
|
87
|
+
const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator())
|
|
88
|
+
expect(ctx.checkBudget()).toEqual({ allowed: true })
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
it('allowed when remaining > 0', () => {
|
|
92
|
+
const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator(), {
|
|
93
|
+
maxCallsPerRun: 2,
|
|
94
|
+
})
|
|
95
|
+
ctx.recordCall(callRecord('a'))
|
|
96
|
+
expect(ctx.checkBudget()).toEqual({ allowed: true })
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
it('denied when remaining <= 0', () => {
|
|
100
|
+
const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator(), {
|
|
101
|
+
maxCallsPerRun: 1,
|
|
102
|
+
})
|
|
103
|
+
ctx.recordCall(callRecord('a'))
|
|
104
|
+
const result = ctx.checkBudget()
|
|
105
|
+
expect(result.allowed).toBe(false)
|
|
106
|
+
expect(result.reason).toMatch(/budget exhausted/)
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
})
|