@namzu/sdk 0.4.3 → 0.4.5

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.
Files changed (108) hide show
  1. package/CHANGELOG.md +129 -0
  2. package/dist/bridge/tools/connector/adapter.d.ts +2 -2
  3. package/dist/bus/index.d.ts +3 -1
  4. package/dist/bus/index.d.ts.map +1 -1
  5. package/dist/bus/index.js +18 -11
  6. package/dist/bus/index.js.map +1 -1
  7. package/dist/config/runtime.d.ts +28 -28
  8. package/dist/probe/context.d.ts +8 -0
  9. package/dist/probe/context.d.ts.map +1 -0
  10. package/dist/probe/context.js +7 -0
  11. package/dist/probe/context.js.map +1 -0
  12. package/dist/probe/errors.d.ts +12 -0
  13. package/dist/probe/errors.d.ts.map +1 -0
  14. package/dist/probe/errors.js +21 -0
  15. package/dist/probe/errors.js.map +1 -0
  16. package/dist/probe/index.d.ts +5 -0
  17. package/dist/probe/index.d.ts.map +1 -0
  18. package/dist/probe/index.js +4 -0
  19. package/dist/probe/index.js.map +1 -0
  20. package/dist/probe/registry.d.ts +24 -0
  21. package/dist/probe/registry.d.ts.map +1 -0
  22. package/dist/probe/registry.js +228 -0
  23. package/dist/probe/registry.js.map +1 -0
  24. package/dist/probe/registry.test.d.ts +7 -0
  25. package/dist/probe/registry.test.d.ts.map +1 -0
  26. package/dist/probe/registry.test.js +310 -0
  27. package/dist/probe/registry.test.js.map +1 -0
  28. package/dist/provider/instrumentation.d.ts +9 -0
  29. package/dist/provider/instrumentation.d.ts.map +1 -0
  30. package/dist/provider/instrumentation.js +104 -0
  31. package/dist/provider/instrumentation.js.map +1 -0
  32. package/dist/provider/instrumentation.test.d.ts +2 -0
  33. package/dist/provider/instrumentation.test.d.ts.map +1 -0
  34. package/dist/provider/instrumentation.test.js +152 -0
  35. package/dist/provider/instrumentation.test.js.map +1 -0
  36. package/dist/public-runtime.d.ts +5 -0
  37. package/dist/public-runtime.d.ts.map +1 -1
  38. package/dist/public-runtime.js +8 -0
  39. package/dist/public-runtime.js.map +1 -1
  40. package/dist/public-types.d.ts +3 -0
  41. package/dist/public-types.d.ts.map +1 -1
  42. package/dist/runtime/query/events.d.ts +3 -1
  43. package/dist/runtime/query/events.d.ts.map +1 -1
  44. package/dist/runtime/query/events.js +6 -1
  45. package/dist/runtime/query/events.js.map +1 -1
  46. package/dist/runtime/query/executor.d.ts +3 -1
  47. package/dist/runtime/query/executor.d.ts.map +1 -1
  48. package/dist/runtime/query/executor.js +30 -1
  49. package/dist/runtime/query/executor.js.map +1 -1
  50. package/dist/types/bus/index.d.ts +46 -2
  51. package/dist/types/bus/index.d.ts.map +1 -1
  52. package/dist/types/doctor/check.d.ts +41 -0
  53. package/dist/types/doctor/check.d.ts.map +1 -0
  54. package/dist/types/doctor/check.js +2 -0
  55. package/dist/types/doctor/check.js.map +1 -0
  56. package/dist/types/doctor/index.d.ts +2 -0
  57. package/dist/types/doctor/index.d.ts.map +1 -0
  58. package/dist/types/doctor/index.js +2 -0
  59. package/dist/types/doctor/index.js.map +1 -0
  60. package/dist/types/probe/event-kind.d.ts +6 -0
  61. package/dist/types/probe/event-kind.d.ts.map +1 -0
  62. package/dist/types/probe/event-kind.js +2 -0
  63. package/dist/types/probe/event-kind.js.map +1 -0
  64. package/dist/types/probe/event-of.d.ts +5 -0
  65. package/dist/types/probe/event-of.d.ts.map +1 -0
  66. package/dist/types/probe/event-of.js +2 -0
  67. package/dist/types/probe/event-of.js.map +1 -0
  68. package/dist/types/probe/index.d.ts +4 -0
  69. package/dist/types/probe/index.d.ts.map +1 -0
  70. package/dist/types/probe/index.js +2 -0
  71. package/dist/types/probe/index.js.map +1 -0
  72. package/dist/types/probe/registry.d.ts +27 -0
  73. package/dist/types/probe/registry.d.ts.map +1 -0
  74. package/dist/types/probe/registry.js +2 -0
  75. package/dist/types/probe/registry.js.map +1 -0
  76. package/dist/types/provider/interface.d.ts +10 -0
  77. package/dist/types/provider/interface.d.ts.map +1 -1
  78. package/dist/vault/instrumentation.d.ts +11 -0
  79. package/dist/vault/instrumentation.d.ts.map +1 -0
  80. package/dist/vault/instrumentation.js +32 -0
  81. package/dist/vault/instrumentation.js.map +1 -0
  82. package/dist/vault/instrumentation.test.d.ts +2 -0
  83. package/dist/vault/instrumentation.test.d.ts.map +1 -0
  84. package/dist/vault/instrumentation.test.js +80 -0
  85. package/dist/vault/instrumentation.test.js.map +1 -0
  86. package/package.json +1 -1
  87. package/src/bus/index.ts +21 -10
  88. package/src/probe/context.ts +14 -0
  89. package/src/probe/errors.ts +27 -0
  90. package/src/probe/index.ts +4 -0
  91. package/src/probe/registry.test.ts +480 -0
  92. package/src/probe/registry.ts +276 -0
  93. package/src/provider/instrumentation.test.ts +192 -0
  94. package/src/provider/instrumentation.ts +139 -0
  95. package/src/public-runtime.ts +22 -0
  96. package/src/public-types.ts +3 -0
  97. package/src/runtime/query/events.ts +6 -1
  98. package/src/runtime/query/executor.ts +34 -0
  99. package/src/types/bus/index.ts +54 -2
  100. package/src/types/doctor/check.ts +53 -0
  101. package/src/types/doctor/index.ts +9 -0
  102. package/src/types/probe/event-kind.ts +8 -0
  103. package/src/types/probe/event-of.ts +3 -0
  104. package/src/types/probe/index.ts +11 -0
  105. package/src/types/probe/registry.ts +36 -0
  106. package/src/types/provider/interface.ts +12 -0
  107. package/src/vault/instrumentation.test.ts +98 -0
  108. package/src/vault/instrumentation.ts +56 -0
@@ -1,5 +1,6 @@
1
- import type { RunId } from '../ids/index.js';
2
- export type LockId = `lock_${string}`;
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":"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"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/types/doctor/check.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export type { DoctorCategory, DoctorCheck, DoctorCheckContext, DoctorCheckRecord, DoctorCheckResult, DoctorReport, DoctorStatus, } from './check.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=event-kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-kind.js","sourceRoot":"","sources":["../../../src/types/probe/event-kind.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { ProbeEvent, ProbeEventKind } from './event-kind.js';
2
+ export type ProbeEventOf<K extends ProbeEventKind> = Extract<ProbeEvent, {
3
+ type: K;
4
+ }>;
5
+ //# sourceMappingURL=event-of.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=event-of.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/types/probe/registry.ts"],"names":[],"mappings":""}
@@ -1,3 +1,4 @@
1
+ import type { DoctorCheckResult } from '../doctor/index.js';
1
2
  import type { ChatCompletionParams, ChatCompletionResponse } from './chat.js';
2
3
  import type { ModelInfo } from './model.js';
3
4
  import type { StreamChunk } from './stream.js';
@@ -8,5 +9,14 @@ export interface LLMProvider {
8
9
  chatStream(params: ChatCompletionParams): AsyncIterable<StreamChunk>;
9
10
  listModels?(): Promise<ModelInfo[]>;
10
11
  healthCheck?(): Promise<boolean>;
12
+ /**
13
+ * Optional structured health probe used by `runDoctor()`.
14
+ *
15
+ * Returns a `DoctorCheckResult` with provider-specific detail
16
+ * (latency, model availability, auth status, …). Providers that
17
+ * cannot be cheaply probed should return `{ status: 'inconclusive' }`
18
+ * so the doctor doesn't mark them as failing — see ses_007 Q6.4.
19
+ */
20
+ doctorCheck?(): Promise<DoctorCheckResult>;
11
21
  }
12
22
  //# sourceMappingURL=interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/types/provider/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,IAAI,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAEnE,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;IAEpE,UAAU,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAEnC,WAAW,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAChC"}
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/types/provider/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAE3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,IAAI,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAEnE,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;IAEpE,UAAU,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAEnC,WAAW,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAEhC;;;;;;;OAOG;IACH,WAAW,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAC1C"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=instrumentation.test.d.ts.map
@@ -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",
3
+ "version": "0.4.5",
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",
package/src/bus/index.ts CHANGED
@@ -5,6 +5,8 @@ import {
5
5
  DEFAULT_LOCK_TIMEOUT_MS,
6
6
  DEFAULT_MAX_LOCKS_PER_AGENT,
7
7
  } from '../constants/bus/index.js'
8
+ import { buildProbeContext } from '../probe/context.js'
9
+ import { type ProbeRegistry, probe as defaultProbeRegistry } from '../probe/registry.js'
8
10
  import type { AgentBusEvent, AgentBusEventListener } from '../types/bus/index.js'
9
11
  import type { RunId } from '../types/ids/index.js'
10
12
  import type { Logger } from '../utils/logger.js'
@@ -39,10 +41,17 @@ export class AgentBus {
39
41
  private readonly listeners: Set<AgentBusEventListener> = new Set()
40
42
  private readonly log: Logger
41
43
  private readonly config: AgentBusConfig
44
+ private readonly probes: ProbeRegistry
42
45
 
43
- constructor(log: Logger, config: Partial<AgentBusConfig> = {}) {
46
+ constructor(
47
+ log: Logger,
48
+ config: Partial<AgentBusConfig> = {},
49
+ probeRegistry: ProbeRegistry = defaultProbeRegistry,
50
+ ) {
44
51
  this.config = { ...DEFAULT_AGENT_BUS_CONFIG, ...config }
45
52
  this.log = log.child({ component: 'AgentBus' })
53
+ this.probes = probeRegistry
54
+ this.probes.setLogger(log)
46
55
 
47
56
  const emitFn = (event: AgentBusEvent): void => this.emit(event)
48
57
 
@@ -70,16 +79,18 @@ export class AgentBus {
70
79
  }
71
80
 
72
81
  private emit(event: AgentBusEvent): void {
73
- for (const listener of this.listeners) {
74
- try {
75
- listener(event)
76
- } catch (error) {
77
- this.log.error('event listener threw', {
78
- eventType: event.type,
79
- error: error instanceof Error ? error.message : String(error),
80
- })
82
+ this.probes.dispatch(event, buildProbeContext(), () => {
83
+ for (const listener of this.listeners) {
84
+ try {
85
+ listener(event)
86
+ } catch (error) {
87
+ this.log.error('event listener threw', {
88
+ eventType: event.type,
89
+ error: error instanceof Error ? error.message : String(error),
90
+ })
91
+ }
81
92
  }
82
- }
93
+ })
83
94
  }
84
95
 
85
96
  cleanupAgent(runId: RunId): void {
@@ -0,0 +1,14 @@
1
+ import type { RunId } from '../types/ids/index.js'
2
+ import type { ProbeContext } from '../types/probe/index.js'
3
+
4
+ export interface ProbeContextInput {
5
+ readonly runId?: RunId
6
+ readonly isReplay?: boolean
7
+ }
8
+
9
+ export function buildProbeContext(input: ProbeContextInput = {}): ProbeContext {
10
+ return Object.freeze({
11
+ runId: input.runId,
12
+ isReplay: input.isReplay ?? false,
13
+ })
14
+ }
@@ -0,0 +1,27 @@
1
+ import type { VetoableEventKind } from '../types/probe/index.js'
2
+
3
+ export class ProbeNameCollisionError extends Error {
4
+ readonly probeName: string
5
+
6
+ constructor(probeName: string) {
7
+ super(
8
+ `Probe name "${probeName}" is already registered. Pass { override: true } to replace, or pick a different name.`,
9
+ )
10
+ this.name = 'ProbeNameCollisionError'
11
+ this.probeName = probeName
12
+ }
13
+ }
14
+
15
+ export class ProbeVetoError extends Error {
16
+ readonly probeName: string
17
+ readonly reason: string
18
+ readonly eventKind: VetoableEventKind
19
+
20
+ constructor(probeName: string, reason: string, eventKind: VetoableEventKind) {
21
+ super(`Operation denied by probe "${probeName}" on ${eventKind}: ${reason}`)
22
+ this.name = 'ProbeVetoError'
23
+ this.probeName = probeName
24
+ this.reason = reason
25
+ this.eventKind = eventKind
26
+ }
27
+ }
@@ -0,0 +1,4 @@
1
+ export { ProbeNameCollisionError, ProbeVetoError } from './errors.js'
2
+ export { buildProbeContext } from './context.js'
3
+ export type { ProbeContextInput } from './context.js'
4
+ export { ProbeRegistry, createProbeRegistry, probe } from './registry.js'