@revealui/ai 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +25 -12
  2. package/dist/client/hooks/useAgentStream.d.ts.map +1 -1
  3. package/dist/client/hooks/useAgentStream.js +1 -29
  4. package/dist/index.d.ts +4 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +4 -0
  7. package/dist/inference/context-assembly.d.ts.map +1 -1
  8. package/dist/inference/context-assembly.js +1 -3
  9. package/dist/inference/overflow-compressor.d.ts.map +1 -1
  10. package/dist/inference/overflow-compressor.js +1 -3
  11. package/dist/ingestion/pipeline.d.ts.map +1 -1
  12. package/dist/ingestion/pipeline.js +1 -3
  13. package/dist/ingestion/text-splitter.d.ts.map +1 -1
  14. package/dist/ingestion/text-splitter.js +1 -3
  15. package/dist/internal/token-estimate.d.ts +6 -0
  16. package/dist/internal/token-estimate.d.ts.map +1 -0
  17. package/dist/internal/token-estimate.js +7 -0
  18. package/dist/llm/client.d.ts +6 -4
  19. package/dist/llm/client.d.ts.map +1 -1
  20. package/dist/llm/client.js +25 -5
  21. package/dist/llm/local-ai-profile.d.ts +39 -0
  22. package/dist/llm/local-ai-profile.d.ts.map +1 -0
  23. package/dist/llm/local-ai-profile.js +165 -0
  24. package/dist/llm/providers/inference-snaps.d.ts +24 -13
  25. package/dist/llm/providers/inference-snaps.d.ts.map +1 -1
  26. package/dist/llm/providers/inference-snaps.js +21 -17
  27. package/dist/llm/providers/us-origin-snaps.d.ts +79 -0
  28. package/dist/llm/providers/us-origin-snaps.d.ts.map +1 -0
  29. package/dist/llm/providers/us-origin-snaps.js +108 -0
  30. package/dist/llm/providers/xai.d.ts +29 -0
  31. package/dist/llm/providers/xai.d.ts.map +1 -0
  32. package/dist/llm/providers/xai.js +44 -0
  33. package/dist/observability/export.d.ts +78 -0
  34. package/dist/observability/export.d.ts.map +1 -0
  35. package/dist/observability/export.js +229 -0
  36. package/dist/observability/index.d.ts +19 -0
  37. package/dist/observability/index.d.ts.map +1 -0
  38. package/dist/observability/index.js +16 -0
  39. package/dist/observability/instrumentation.d.ts +68 -0
  40. package/dist/observability/instrumentation.d.ts.map +1 -0
  41. package/dist/observability/instrumentation.js +219 -0
  42. package/dist/observability/storage.d.ts +39 -0
  43. package/dist/observability/storage.d.ts.map +1 -0
  44. package/dist/observability/storage.js +184 -0
  45. package/dist/orchestration/runtime.d.ts +7 -0
  46. package/dist/orchestration/runtime.d.ts.map +1 -1
  47. package/dist/orchestration/runtime.js +9 -2
  48. package/dist/orchestration/ticket-agent.d.ts +10 -0
  49. package/dist/orchestration/ticket-agent.d.ts.map +1 -1
  50. package/dist/orchestration/ticket-agent.js +7 -1
  51. package/dist/skills/index.d.ts +4 -0
  52. package/dist/skills/index.d.ts.map +1 -1
  53. package/dist/skills/index.js +4 -0
  54. package/dist/skills/integration/agent-skill-provider.d.ts +0 -5
  55. package/dist/skills/integration/agent-skill-provider.d.ts.map +1 -1
  56. package/dist/skills/integration/agent-skill-provider.js +3 -9
  57. package/dist/tools/admin/factory.d.ts +6 -0
  58. package/dist/tools/admin/factory.d.ts.map +1 -1
  59. package/dist/tools/admin/factory.js +3 -2
  60. package/dist/tools/coding/index.d.ts +6 -0
  61. package/dist/tools/coding/index.d.ts.map +1 -1
  62. package/dist/tools/coding/index.js +7 -2
  63. package/dist/tools/governance.d.ts +37 -0
  64. package/dist/tools/governance.d.ts.map +1 -0
  65. package/dist/tools/governance.js +42 -0
  66. package/dist/tools/integrity-audit.d.ts +27 -0
  67. package/dist/tools/integrity-audit.d.ts.map +1 -0
  68. package/dist/tools/integrity-audit.js +64 -0
  69. package/dist/tools/mcp-adapter.d.ts +23 -3
  70. package/dist/tools/mcp-adapter.d.ts.map +1 -1
  71. package/dist/tools/mcp-adapter.js +189 -132
  72. package/dist/tools/mcp-sampling.d.ts +3 -3
  73. package/dist/tools/mcp-sampling.js +3 -3
  74. package/dist/tools/web/duck-duck-go.d.ts.map +1 -1
  75. package/dist/tools/web/duck-duck-go.js +1 -4
  76. package/dist/tools/web/exa.d.ts.map +1 -1
  77. package/dist/tools/web/exa.js +1 -4
  78. package/dist/tools/web/tavily.d.ts.map +1 -1
  79. package/dist/tools/web/tavily.js +1 -4
  80. package/package.json +69 -34
@@ -0,0 +1,184 @@
1
+ /**
2
+ * @revealui/ai - Event Storage Implementations
3
+ *
4
+ * Storage backends for persisting agent events.
5
+ */
6
+ /**
7
+ * In-memory storage (no persistence)
8
+ */
9
+ export class MemoryEventStorage {
10
+ events = [];
11
+ async save(events) {
12
+ this.events = [...events];
13
+ }
14
+ async load(filter) {
15
+ if (!filter) {
16
+ return [...this.events];
17
+ }
18
+ let filtered = [...this.events];
19
+ if (filter.agentId) {
20
+ filtered = filtered.filter((e) => e.agentId === filter.agentId);
21
+ }
22
+ if (filter.sessionId) {
23
+ filtered = filtered.filter((e) => e.sessionId === filter.sessionId);
24
+ }
25
+ if (filter.taskId) {
26
+ filtered = filtered.filter((e) => e.taskId === filter.taskId);
27
+ }
28
+ if (filter.eventType) {
29
+ filtered = filtered.filter((e) => e.eventType === filter.eventType);
30
+ }
31
+ if (filter.startTime) {
32
+ const startTime = filter.startTime;
33
+ filtered = filtered.filter((e) => e.timestamp >= startTime);
34
+ }
35
+ if (filter.endTime) {
36
+ const endTime = filter.endTime;
37
+ filtered = filtered.filter((e) => e.timestamp <= endTime);
38
+ }
39
+ return filtered;
40
+ }
41
+ async clear() {
42
+ this.events = [];
43
+ }
44
+ async count(filter) {
45
+ const events = await this.load(filter);
46
+ return events.length;
47
+ }
48
+ }
49
+ /**
50
+ * Local storage (browser)
51
+ */
52
+ export class LocalStorageEventStorage {
53
+ key;
54
+ constructor(key = 'revealui:agent:events') {
55
+ this.key = key;
56
+ }
57
+ async save(events) {
58
+ if (typeof window === 'undefined' || !window.localStorage) {
59
+ throw new Error('LocalStorage not available');
60
+ }
61
+ window.localStorage.setItem(this.key, JSON.stringify(events));
62
+ }
63
+ async load(filter) {
64
+ if (typeof window === 'undefined' || !window.localStorage) {
65
+ return [];
66
+ }
67
+ try {
68
+ const data = window.localStorage.getItem(this.key);
69
+ if (!data) {
70
+ return [];
71
+ }
72
+ const events = JSON.parse(data);
73
+ if (!filter) {
74
+ return events;
75
+ }
76
+ let filtered = events;
77
+ if (filter.agentId) {
78
+ filtered = filtered.filter((e) => e.agentId === filter.agentId);
79
+ }
80
+ if (filter.sessionId) {
81
+ filtered = filtered.filter((e) => e.sessionId === filter.sessionId);
82
+ }
83
+ if (filter.taskId) {
84
+ filtered = filtered.filter((e) => e.taskId === filter.taskId);
85
+ }
86
+ if (filter.eventType) {
87
+ filtered = filtered.filter((e) => e.eventType === filter.eventType);
88
+ }
89
+ if (filter.startTime) {
90
+ const startTime = filter.startTime;
91
+ filtered = filtered.filter((e) => e.timestamp >= startTime);
92
+ }
93
+ if (filter.endTime) {
94
+ const endTime = filter.endTime;
95
+ filtered = filtered.filter((e) => e.timestamp <= endTime);
96
+ }
97
+ return filtered;
98
+ }
99
+ catch (error) {
100
+ // Return empty array on error - graceful degradation
101
+ void (error instanceof Error ? error.message : String(error)); // Query failed - graceful degradation
102
+ return [];
103
+ }
104
+ }
105
+ async clear() {
106
+ if (typeof window === 'undefined' || !window.localStorage) {
107
+ return;
108
+ }
109
+ window.localStorage.removeItem(this.key);
110
+ }
111
+ async count(filter) {
112
+ const events = await this.load(filter);
113
+ return events.length;
114
+ }
115
+ }
116
+ /**
117
+ * File system storage (Node.js)
118
+ */
119
+ export class FileSystemEventStorage {
120
+ filePath;
121
+ constructor(filePath) {
122
+ this.filePath = filePath;
123
+ }
124
+ async save(events) {
125
+ const fs = await import('node:fs/promises');
126
+ const path = await import('node:path');
127
+ const dir = path.dirname(this.filePath);
128
+ await fs.mkdir(dir, { recursive: true });
129
+ await fs.writeFile(this.filePath, JSON.stringify(events, null, 2), 'utf-8');
130
+ }
131
+ async load(filter) {
132
+ const fs = await import('node:fs/promises');
133
+ try {
134
+ const data = await fs.readFile(this.filePath, 'utf-8');
135
+ const events = JSON.parse(data);
136
+ if (!filter) {
137
+ return events;
138
+ }
139
+ let filtered = events;
140
+ if (filter.agentId) {
141
+ filtered = filtered.filter((e) => e.agentId === filter.agentId);
142
+ }
143
+ if (filter.sessionId) {
144
+ filtered = filtered.filter((e) => e.sessionId === filter.sessionId);
145
+ }
146
+ if (filter.taskId) {
147
+ filtered = filtered.filter((e) => e.taskId === filter.taskId);
148
+ }
149
+ if (filter.eventType) {
150
+ filtered = filtered.filter((e) => e.eventType === filter.eventType);
151
+ }
152
+ if (filter.startTime) {
153
+ const startTime = filter.startTime;
154
+ filtered = filtered.filter((e) => e.timestamp >= startTime);
155
+ }
156
+ if (filter.endTime) {
157
+ const endTime = filter.endTime;
158
+ filtered = filtered.filter((e) => e.timestamp <= endTime);
159
+ }
160
+ return filtered;
161
+ }
162
+ catch (error) {
163
+ if (error.code === 'ENOENT') {
164
+ return [];
165
+ }
166
+ throw error;
167
+ }
168
+ }
169
+ async clear() {
170
+ const fs = await import('node:fs/promises');
171
+ try {
172
+ await fs.unlink(this.filePath);
173
+ }
174
+ catch (error) {
175
+ if (error.code !== 'ENOENT') {
176
+ throw error;
177
+ }
178
+ }
179
+ }
180
+ async count(filter) {
181
+ const events = await this.load(filter);
182
+ return events.length;
183
+ }
184
+ }
@@ -8,6 +8,7 @@ import type { ReasoningEffort } from '../llm/providers/base.js';
8
8
  import type { AgentSkillProvider } from '../skills/integration/agent-skill-provider.js';
9
9
  import type { ApprovalCallback } from '../tools/base.js';
10
10
  import type { MCPToolSource, McpClientLike } from '../tools/mcp-adapter.js';
11
+ import type { McpToolCallEvent } from '../tools/mcp-events.js';
11
12
  import type { Agent, AgentResult, Task } from './agent.js';
12
13
  /**
13
14
  * Reasoning-depth hint for a task. Alias of the neutral `ReasoningEffort` — the agnostic
@@ -64,6 +65,12 @@ export interface RuntimeConfig {
64
65
  name: string;
65
66
  client: McpClientLike;
66
67
  }>;
68
+ /**
69
+ * GAP-355 integrity audit for MCP tools discovered at run time.
70
+ * Passed into `createToolsFromMcpClient` and `discoverMCPTools` so library
71
+ * consumers (not only agent-stream) fail closed when a receipt cannot land.
72
+ */
73
+ onToolAudit?: (event: McpToolCallEvent) => void | Promise<void>;
67
74
  /**
68
75
  * Optional skill provider. When set, activated skills are injected into the
69
76
  * system prompt before the first LLM call, giving the agent contextual
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/orchestration/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAW,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,kBAAkB,CAAC;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG5E,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;IACpE;;;;OAIG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,gCAAgC,EAAE,SAAS,CAAC;IAC/D;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,qBAAa,YAAY;IACvB,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;IAChC,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,cAAc,CAAgD;IACtE,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,GAAE,aAAkB;IA0BtC;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;YAqBzE,OAAO;IA8OrB;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI7B;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAc9E;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B9B;;OAEG;IACH,SAAS,IAAI;QACX,cAAc,EAAE,OAAO,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;KACxB;CAOF"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/orchestration/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAW,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,kBAAkB,CAAC;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;IACpE;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE;;;;OAIG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,gCAAgC,EAAE,SAAS,CAAC;IAC/D;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,qBAAa,YAAY;IACvB,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;IAChC,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,cAAc,CAAgD;IACtE,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,GAAE,aAAkB;IA2BtC;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;YAqBzE,OAAO;IAsPrB;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI7B;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAc9E;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B9B;;OAEG;IACH,SAAS,IAAI;QACX,cAAc,EAAE,OAAO,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;KACxB;CAOF"}
@@ -23,6 +23,7 @@ export class AgentRuntime {
23
23
  enableCache: config.enableCache ?? true, // Enable by default for cost savings
24
24
  mcpToolSource: config.mcpToolSource,
25
25
  mcpClients: config.mcpClients,
26
+ onToolAudit: config.onToolAudit,
26
27
  skillProvider: config.skillProvider,
27
28
  thinkingLevel: config.thinkingLevel,
28
29
  modelTier: config.modelTier,
@@ -64,13 +65,19 @@ export class AgentRuntime {
64
65
  // - Standard `McpClient` instances (Stage 5.1a, preferred)
65
66
  // - `MCPToolSource` / hypervisor (legacy, deprecated but supported)
66
67
  const mcpTools = [];
68
+ const onToolAudit = this.config.onToolAudit;
67
69
  if (this.config.mcpToolSource) {
68
- mcpTools.push(...discoverMCPTools(this.config.mcpToolSource));
70
+ mcpTools.push(...discoverMCPTools(this.config.mcpToolSource, {
71
+ ...(onToolAudit !== undefined ? { onToolAudit } : {}),
72
+ }));
69
73
  }
70
74
  if (this.config.mcpClients && this.config.mcpClients.length > 0) {
71
75
  for (const { name, client } of this.config.mcpClients) {
72
76
  try {
73
- const fromClient = await createToolsFromMcpClient(client, { namespace: name });
77
+ const fromClient = await createToolsFromMcpClient(client, {
78
+ namespace: name,
79
+ ...(onToolAudit !== undefined ? { onToolAudit } : {}),
80
+ });
74
81
  mcpTools.push(...fromClient);
75
82
  }
76
83
  catch {
@@ -15,6 +15,7 @@ import type { Database } from '@revealui/db/client';
15
15
  import type { LLMClient } from '../llm/client.js';
16
16
  import type { EpisodicMemory } from '../memory/stores/episodic-memory.js';
17
17
  import type { AdminAPIClient, CollectionMetadata, GlobalMetadata } from '../tools/admin/factory.js';
18
+ import type { Tool } from '../tools/base.js';
18
19
  import type { TicketMutationClient } from '../tools/ticket-tools.js';
19
20
  import type { AgentResult } from './agent.js';
20
21
  export interface TicketInput {
@@ -51,6 +52,15 @@ export interface TicketAgentConfig {
51
52
  maxIterations?: number;
52
53
  /** Timeout in ms (default: 120_000) */
53
54
  timeout?: number;
55
+ /**
56
+ * Optional tool transform after the tool set is assembled (GAP-355 S6-4).
57
+ * Server injects pre-authorize wraps without `@revealui/ai` importing server.
58
+ * Called once per dispatch with the ticket id and optional dispatchId.
59
+ */
60
+ wrapTools?: (tools: Tool[], ctx: {
61
+ ticketId: string;
62
+ dispatchId?: string;
63
+ }) => Tool[];
54
64
  }
55
65
  export declare class TicketAgentDispatcher {
56
66
  private config;
@@ -1 +1 @@
1
- {"version":3,"file":"ticket-agent.d.ts","sourceRoot":"","sources":["../../src/orchestration/ticket-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EACV,cAAc,EAEd,kBAAkB,EAClB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAGnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,OAAO,KAAK,EAAS,WAAW,EAAQ,MAAM,YAAY,CAAC;AAG3D,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,0GAA0G;IAC1G,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,SAAS,EAAE,SAAS,CAAC;IAErB,2DAA2D;IAC3D,SAAS,EAAE,cAAc,CAAC;IAE1B,wEAAwE;IACxE,YAAY,EAAE,oBAAoB,CAAC;IAEnC,yEAAyE;IACzE,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEnC,yCAAyC;IACzC,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAE3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB;;;OAGG;IACH,EAAE,CAAC,EAAE,QAAQ,CAAC;IAEd,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAwDD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,YAAY,CAAoB;gBAE5B,MAAM,EAAE,iBAAiB;IAUrC;;;;;;;;;;;;;;;OAeG;IACG,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,WAAW,CAAC;CA0DjG"}
1
+ {"version":3,"file":"ticket-agent.d.ts","sourceRoot":"","sources":["../../src/orchestration/ticket-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EACV,cAAc,EAEd,kBAAkB,EAClB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,OAAO,KAAK,EAAS,WAAW,EAAQ,MAAM,YAAY,CAAC;AAG3D,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,0GAA0G;IAC1G,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,SAAS,EAAE,SAAS,CAAC;IAErB,2DAA2D;IAC3D,SAAS,EAAE,cAAc,CAAC;IAE1B,wEAAwE;IACxE,YAAY,EAAE,oBAAoB,CAAC;IAEnC,yEAAyE;IACzE,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEnC,yCAAyC;IACzC,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAE3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB;;;OAGG;IACH,EAAE,CAAC,EAAE,QAAQ,CAAC;IAEd,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,EAAE,CAAC;CACvF;AAwDD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,YAAY,CAAoB;gBAE5B,MAAM,EAAE,iBAAiB;IAUrC;;;;;;;;;;;;;;;OAeG;IACG,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,WAAW,CAAC;CAgEjG"}
@@ -113,7 +113,13 @@ export class TicketAgentDispatcher {
113
113
  const extraTools = db
114
114
  ? [webScraperTool, createDocumentSummarizerTool(db, this.config.llmClient)]
115
115
  : [webScraperTool];
116
- const tools = [...cmsTools, ...ticketTools, ...extraTools];
116
+ let tools = [...cmsTools, ...ticketTools, ...extraTools];
117
+ if (this.config.wrapTools) {
118
+ tools = this.config.wrapTools(tools, {
119
+ ticketId: ticket.id,
120
+ ...(options.dispatchId !== undefined ? { dispatchId: options.dispatchId } : {}),
121
+ });
122
+ }
117
123
  // The runtime does not call agent.memory - satisfy the interface with a stub when no
118
124
  // shared memory instance is provided. Cast is safe: only runtime touches this field.
119
125
  const memory = (sharedMemory ?? {});
@@ -1,6 +1,10 @@
1
1
  /**
2
2
  * Agent Skills
3
3
  *
4
+ * **INCUBATING (fleet-redundancy C11 / ADR-007).** Library exports for skill
5
+ * install/activation remain. No RevealUI app currently mounts the skills
6
+ * registry as a product path; wire only under a dedicated WIRE ticket.
7
+ *
4
8
  * Implementation of the Agent Skills open standard (skills.sh).
5
9
  * Allows RevealUI agents to install and use skill packages.
6
10
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElF,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,KAAK,aAAa,EAClB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,gCAAgC,EAChC,eAAe,EACf,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,KAAK,YAAY,EACjB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,YAAY,EACjB,kBAAkB,EAClB,KAAK,wBAAwB,EAC7B,wBAAwB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,eAAe,EACf,KAAK,aAAa,EAClB,uBAAuB,EACvB,YAAY,EACZ,sBAAsB,EACtB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,KAAK,WAAW,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,KAAK,KAAK,EACV,KAAK,sBAAsB,EAC3B,4BAA4B,EAC5B,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,KAAK,aAAa,EAClB,mBAAmB,EACnB,KAAK,aAAa,EAClB,mBAAmB,EACnB,WAAW,EACX,KAAK,WAAW,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElF,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,KAAK,aAAa,EAClB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,gCAAgC,EAChC,eAAe,EACf,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,KAAK,YAAY,EACjB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,YAAY,EACjB,kBAAkB,EAClB,KAAK,wBAAwB,EAC7B,wBAAwB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,eAAe,EACf,KAAK,aAAa,EAClB,uBAAuB,EACvB,YAAY,EACZ,sBAAsB,EACtB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,KAAK,WAAW,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,KAAK,KAAK,EACV,KAAK,sBAAsB,EAC3B,4BAA4B,EAC5B,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,KAAK,aAAa,EAClB,mBAAmB,EACnB,KAAK,aAAa,EAClB,mBAAmB,EACnB,WAAW,EACX,KAAK,WAAW,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
@@ -1,6 +1,10 @@
1
1
  /**
2
2
  * Agent Skills
3
3
  *
4
+ * **INCUBATING (fleet-redundancy C11 / ADR-007).** Library exports for skill
5
+ * install/activation remain. No RevealUI app currently mounts the skills
6
+ * registry as a product path; wire only under a dedicated WIRE ticket.
7
+ *
4
8
  * Implementation of the Agent Skills open standard (skills.sh).
5
9
  * Allows RevealUI agents to install and use skill packages.
6
10
  *
@@ -56,11 +56,6 @@ export declare class AgentSkillProvider {
56
56
  * Format multiple skill instructions into a single block.
57
57
  */
58
58
  private formatSkillInstructions;
59
- /**
60
- * Estimate token count for text (rough approximation).
61
- * Uses ~4 characters per token as a rough estimate.
62
- */
63
- private estimateTokens;
64
59
  /**
65
60
  * Build a system prompt augmentation from activated skills.
66
61
  *
@@ -1 +1 @@
1
- {"version":3,"file":"agent-skill-provider.d.ts","sourceRoot":"","sources":["../../../src/skills/integration/agent-skill-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,+BAA+B;IAC/B,SAAS,EAAE,cAAc,CAAC;IAE1B,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,+CAA+C;IAC/C,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,QAAQ,EAAE,YAAY,EAAE,CAAC;IAEzB,iCAAiC;IACjC,eAAe,EAAE,KAAK,EAAE,CAAC;IAEzB,yBAAyB;IACzB,iBAAiB,EAAE,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;IAE9D,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,mBAAmB,CAA2B;gBAE1C,MAAM,EAAE,wBAAwB;IAM5C;;;;;;OAMG;IACG,uBAAuB,CAC3B,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IA8ChC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAItB;;;;;OAKG;IACH,4BAA4B,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM;IAsBrD;;;;;OAKG;IACH,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE;IAc9C;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO;IAI1C;;OAEG;IACH,kBAAkB,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAGnE;AAuBD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,cAAc,EACzB,OAAO,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAC1C,kBAAkB,CAKpB"}
1
+ {"version":3,"file":"agent-skill-provider.d.ts","sourceRoot":"","sources":["../../../src/skills/integration/agent-skill-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,+BAA+B;IAC/B,SAAS,EAAE,cAAc,CAAC;IAE1B,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,+CAA+C;IAC/C,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,QAAQ,EAAE,YAAY,EAAE,CAAC;IAEzB,iCAAiC;IACjC,eAAe,EAAE,KAAK,EAAE,CAAC;IAEzB,yBAAyB;IACzB,iBAAiB,EAAE,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;IAE9D,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,mBAAmB,CAA2B;gBAE1C,MAAM,EAAE,wBAAwB;IAM5C;;;;;;OAMG;IACG,uBAAuB,CAC3B,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IA8ChC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;;;;OAKG;IACH,4BAA4B,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM;IAsBrD;;;;;OAKG;IACH,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE;IAc9C;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO;IAI1C;;OAEG;IACH,kBAAkB,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAGnE;AAuBD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,cAAc,EACzB,OAAO,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAC1C,kBAAkB,CAKpB"}
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Integrates skills into agent system prompts.
5
5
  */
6
+ import { estimateTokens } from '../../internal/token-estimate.js';
6
7
  /**
7
8
  * Provider for injecting skill instructions into agent prompts.
8
9
  */
@@ -35,7 +36,7 @@ export class AgentSkillProvider {
35
36
  }
36
37
  // Format skill instructions
37
38
  const skillInstructions = this.formatSkillInstructions(activatedSkills);
38
- const estimatedTokens = this.estimateTokens(skillInstructions);
39
+ const estimatedTokens = estimateTokens(skillInstructions);
39
40
  // Find system message or create one
40
41
  const updatedMessages = [...messages];
41
42
  const systemIndex = updatedMessages.findIndex((m) => m.role === 'system');
@@ -72,13 +73,6 @@ export class AgentSkillProvider {
72
73
  ${skillBlocks.join('\n\n')}
73
74
  </activated-skills>`;
74
75
  }
75
- /**
76
- * Estimate token count for text (rough approximation).
77
- * Uses ~4 characters per token as a rough estimate.
78
- */
79
- estimateTokens(text) {
80
- return Math.ceil(text.length / 4);
81
- }
82
76
  /**
83
77
  * Build a system prompt augmentation from activated skills.
84
78
  *
@@ -93,7 +87,7 @@ ${skillBlocks.join('\n\n')}
93
87
  // Add skills until we hit token budget
94
88
  for (const skill of skills) {
95
89
  const formatted = this.instructionTemplate(skill);
96
- const tokens = this.estimateTokens(formatted);
90
+ const tokens = estimateTokens(formatted);
97
91
  if (totalTokens + tokens <= this.maxTokenBudget) {
98
92
  includedSkills.push(skill);
99
93
  totalTokens += tokens;
@@ -3,6 +3,7 @@
3
3
  * Creates admin tools with API client injected for actual execution
4
4
  */
5
5
  import type { Tool } from '../base.js';
6
+ import { type ToolIntegrityAuditHandler } from '../integrity-audit.js';
6
7
  /**
7
8
  * API Client interface (compatible with @revealui/core/admin/utils/apiClient)
8
9
  */
@@ -80,6 +81,11 @@ export interface AdminToolsConfig {
80
81
  globals?: GlobalMetadata[];
81
82
  /** Current user context (for permission checks) */
82
83
  user?: UserContext;
84
+ /**
85
+ * GAP-355 S5-4 integrity audit. When set, every tool execute is awaited and
86
+ * successful results fail closed if the audit write throws.
87
+ */
88
+ onToolAudit?: ToolIntegrityAuditHandler;
83
89
  }
84
90
  /**
85
91
  * Create admin tools with API client injected
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/tools/admin/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAyBvC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC;QACV,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D,MAAM,CAAC,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzF,MAAM,CAAC,OAAO,EAAE;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAErB,MAAM,CAAC,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE,UAAU,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAExE,YAAY,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1F;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,SAAS,EAAE,cAAc,CAAC;IAE1B,kEAAkE;IAClE,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEnC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAE3B,mDAAmD;IACnD,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAAE,CAggBjE"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/tools/admin/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,uBAAuB,CAAC;AAyB/B;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC;QACV,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D,MAAM,CAAC,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzF,MAAM,CAAC,OAAO,EAAE;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAErB,MAAM,CAAC,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE,UAAU,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAExE,YAAY,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1F;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,SAAS,EAAE,cAAc,CAAC;IAE1B,kEAAkE;IAClE,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEnC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAE3B,mDAAmD;IACnD,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,yBAAyB,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAAE,CAggBjE"}
@@ -2,6 +2,7 @@
2
2
  * admin Tools Factory
3
3
  * Creates admin tools with API client injected for actual execution
4
4
  */
5
+ import { maybeWrapToolsWithIntegrityAudit, } from '../integrity-audit.js';
5
6
  import { createDocumentTool, deleteDocumentTool, findDocumentsTool, getDocumentTool, listCollectionsTool, updateDocumentTool, } from './collection-tools.js';
6
7
  import { getGlobalTool, listGlobalsTool, updateGlobalTool } from './global-tools.js';
7
8
  import { deleteMediaTool, getMediaTool, listMediaTool, updateMediaTool, uploadMediaTool, } from './media-tools.js';
@@ -11,7 +12,7 @@ import { createUserTool, deleteUserTool, getCurrentUserTool, listUsersTool, upda
11
12
  * This factory function creates functional tools by injecting the actual API implementation
12
13
  */
13
14
  export function createAdminTools(config) {
14
- const { apiClient, collections, globals, user } = config;
15
+ const { apiClient, collections, globals, user, onToolAudit } = config;
15
16
  // Clone tools and inject API client implementation
16
17
  const tools = [];
17
18
  // Collection Tools
@@ -458,5 +459,5 @@ export function createAdminTools(config) {
458
459
  }
459
460
  },
460
461
  });
461
- return tools;
462
+ return maybeWrapToolsWithIntegrityAudit(tools, onToolAudit);
462
463
  }
@@ -4,6 +4,7 @@
4
4
  * for the RevealUI standalone coding agent.
5
5
  */
6
6
  import type { Tool } from '../base.js';
7
+ import { type ToolIntegrityAuditHandler } from '../integrity-audit.js';
7
8
  export { fileEditTool } from './file-edit.js';
8
9
  export { fileGlobTool } from './file-glob.js';
9
10
  export { fileGrepTool } from './file-grep.js';
@@ -30,6 +31,11 @@ export interface CodingToolsConfig {
30
31
  deniedPathPatterns?: RegExp[];
31
32
  /** Which tools to include (default: all) */
32
33
  include?: Array<'file_read' | 'file_write' | 'file_edit' | 'file_glob' | 'file_grep' | 'shell_exec' | 'git_ops' | 'project_context' | 'test_runner' | 'lint_fix'>;
34
+ /**
35
+ * GAP-355 S5-4 integrity audit. When set, every tool execute is awaited and
36
+ * successful results fail closed if the audit write throws.
37
+ */
38
+ onToolAudit?: ToolIntegrityAuditHandler;
33
39
  }
34
40
  /**
35
41
  * Create coding tools with safety configuration applied.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/coding/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAevC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,kCAAkC;IAClC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,4CAA4C;IAC5C,OAAO,CAAC,EAAE,KAAK,CACX,WAAW,GACX,YAAY,GACZ,WAAW,GACX,WAAW,GACX,WAAW,GACX,YAAY,GACZ,SAAS,GACT,iBAAiB,GACjB,aAAa,GACb,UAAU,CACb,CAAC;CACH;AAgBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAAE,CAmBnE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/coding/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,uBAAuB,CAAC;AAe/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,kCAAkC;IAClC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,4CAA4C;IAC5C,OAAO,CAAC,EAAE,KAAK,CACX,WAAW,GACX,YAAY,GACZ,WAAW,GACX,WAAW,GACX,WAAW,GACX,YAAY,GACZ,SAAS,GACT,iBAAiB,GACjB,aAAa,GACb,UAAU,CACb,CAAC;IACF;;;OAGG;IACH,WAAW,CAAC,EAAE,yBAAyB,CAAC;CACzC;AAgBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAAE,CAsBnE"}
@@ -3,6 +3,7 @@
3
3
  * File operations, search, shell, git, and project context tools
4
4
  * for the RevealUI standalone coding agent.
5
5
  */
6
+ import { maybeWrapToolsWithIntegrityAudit, } from '../integrity-audit.js';
6
7
  import { fileEditTool } from './file-edit.js';
7
8
  import { fileGlobTool } from './file-glob.js';
8
9
  import { fileGrepTool } from './file-grep.js';
@@ -54,9 +55,13 @@ export function createCodingTools(config) {
54
55
  };
55
56
  configureSafety(safetyConfig);
56
57
  // Filter tools if include list is provided
58
+ let tools;
57
59
  if (config.include) {
58
60
  const includeSet = new Set(config.include);
59
- return ALL_CODING_TOOLS.filter((t) => includeSet.has(t.name));
61
+ tools = ALL_CODING_TOOLS.filter((t) => includeSet.has(t.name));
60
62
  }
61
- return [...ALL_CODING_TOOLS];
63
+ else {
64
+ tools = [...ALL_CODING_TOOLS];
65
+ }
66
+ return maybeWrapToolsWithIntegrityAudit(tools, config.onToolAudit);
62
67
  }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Tool governance wrapper (GAP-355 Stage 6 S6-3).
3
+ *
4
+ * Pre-authorize before side effects; soft-fail (return ToolResult error) when
5
+ * denied so the model can recover. Compose outside integrity audit wraps:
6
+ * governance(integrity(realTool))
7
+ * so authorize runs first and denied tools never execute or integrity-audit success.
8
+ *
9
+ * MCP server tools are not wrapped here (remote / governed-MCP gated).
10
+ */
11
+ import type { Tool } from './base.js';
12
+ export interface ToolAuthorizeDecision {
13
+ allowed: boolean;
14
+ /** Machine-readable deny reason (e.g. exec_requires_grant). */
15
+ reason: string;
16
+ }
17
+ export type ToolAuthorizeFn = (toolName: string) => ToolAuthorizeDecision;
18
+ export type ToolDeniedHandler = (info: {
19
+ toolName: string;
20
+ reason: string;
21
+ }) => void | Promise<void>;
22
+ export interface WrapToolWithGovernanceOptions {
23
+ authorize: ToolAuthorizeFn;
24
+ /**
25
+ * Called when authorize denies. Soft-fail: errors here do not rethrow —
26
+ * the tool still returns a denial ToolResult (owner: soft fail UX).
27
+ */
28
+ onDenied?: ToolDeniedHandler;
29
+ }
30
+ /**
31
+ * Wrap a tool so execute is gated by authorize. Denied → no execute.
32
+ * Returns a new tool object; does not mutate the input.
33
+ */
34
+ export declare function wrapToolWithGovernance(tool: Tool, options: WrapToolWithGovernanceOptions): Tool;
35
+ /** Map a tool list through wrapToolWithGovernance. */
36
+ export declare function wrapToolsWithGovernance(tools: Tool[], options: WrapToolWithGovernanceOptions): Tool[];
37
+ //# sourceMappingURL=governance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/tools/governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,WAAW,CAAC;AAElD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,qBAAqB,CAAC;AAE1E,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3B,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,eAAe,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,6BAA6B,GAAG,IAAI,CAsB/F;AAED,sDAAsD;AACtD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,6BAA6B,GACrC,IAAI,EAAE,CAER"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Tool governance wrapper (GAP-355 Stage 6 S6-3).
3
+ *
4
+ * Pre-authorize before side effects; soft-fail (return ToolResult error) when
5
+ * denied so the model can recover. Compose outside integrity audit wraps:
6
+ * governance(integrity(realTool))
7
+ * so authorize runs first and denied tools never execute or integrity-audit success.
8
+ *
9
+ * MCP server tools are not wrapped here (remote / governed-MCP gated).
10
+ */
11
+ /**
12
+ * Wrap a tool so execute is gated by authorize. Denied → no execute.
13
+ * Returns a new tool object; does not mutate the input.
14
+ */
15
+ export function wrapToolWithGovernance(tool, options) {
16
+ return {
17
+ ...tool,
18
+ async execute(params) {
19
+ const decision = options.authorize(tool.name);
20
+ if (!decision.allowed) {
21
+ try {
22
+ await options.onDenied?.({
23
+ toolName: tool.name,
24
+ reason: decision.reason,
25
+ });
26
+ }
27
+ catch {
28
+ // Soft-fail: still return denial to the model if deny-audit fails.
29
+ }
30
+ return {
31
+ success: false,
32
+ error: `Permission denied (${decision.reason}): ${tool.name}`,
33
+ };
34
+ }
35
+ return tool.execute(params);
36
+ },
37
+ };
38
+ }
39
+ /** Map a tool list through wrapToolWithGovernance. */
40
+ export function wrapToolsWithGovernance(tools, options) {
41
+ return tools.map((tool) => wrapToolWithGovernance(tool, options));
42
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Tool integrity audit wrapper (GAP-355 Stage 5 S5-4).
3
+ *
4
+ * Same fail-closed contract as `createToolsFromMcpClient({ onToolAudit })`:
5
+ * after a successful tool execution, await the audit hook and rethrow so an
6
+ * unrecorded success cannot complete. On tool failure, prefer the tool error
7
+ * if a secondary audit write fails.
8
+ *
9
+ * Used for admin CMS + coding tools that are not MCP server tools.
10
+ */
11
+ import type { Tool } from './base.js';
12
+ /** Summary event for one tool execution (no raw args / results). */
13
+ export interface ToolIntegrityAuditEvent {
14
+ toolName: string;
15
+ success: boolean;
16
+ duration_ms: number;
17
+ error?: string;
18
+ }
19
+ export type ToolIntegrityAuditHandler = (event: ToolIntegrityAuditEvent) => void | Promise<void>;
20
+ /**
21
+ * Wrap a tool so each `execute` emits an integrity audit event.
22
+ * Returns a new tool object; does not mutate the input.
23
+ */
24
+ export declare function wrapToolWithIntegrityAudit(tool: Tool, onToolAudit: ToolIntegrityAuditHandler): Tool;
25
+ /** Map over a tool list when a handler is provided; otherwise return as-is. */
26
+ export declare function maybeWrapToolsWithIntegrityAudit(tools: Tool[], onToolAudit: ToolIntegrityAuditHandler | undefined): Tool[];
27
+ //# sourceMappingURL=integrity-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrity-audit.d.ts","sourceRoot":"","sources":["../../src/tools/integrity-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,WAAW,CAAC;AAElD,oEAAoE;AACpE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjG;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,yBAAyB,GACrC,IAAI,CA4CN;AAED,+EAA+E;AAC/E,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,IAAI,EAAE,EACb,WAAW,EAAE,yBAAyB,GAAG,SAAS,GACjD,IAAI,EAAE,CAGR"}