@archships/dim-agent-sdk 0.0.1 → 0.0.2

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 (95) hide show
  1. package/README.md +115 -4
  2. package/dist/{agent-core → dim-agent-sdk/src/agent-core}/Agent.d.ts +7 -1
  3. package/dist/{agent-core → dim-agent-sdk/src/agent-core}/LoopRunner.d.ts +6 -0
  4. package/dist/{agent-core → dim-agent-sdk/src/agent-core}/Session.d.ts +26 -1
  5. package/dist/{agent-core → dim-agent-sdk/src/agent-core}/ToolExecutor.d.ts +11 -1
  6. package/dist/{agent-core → dim-agent-sdk/src/agent-core}/agent-types.d.ts +5 -2
  7. package/dist/dim-agent-sdk/src/agent-core/approvals.d.ts +25 -0
  8. package/dist/dim-agent-sdk/src/agent-core/compaction.d.ts +22 -0
  9. package/dist/{agent-core → dim-agent-sdk/src/agent-core}/errors.d.ts +1 -0
  10. package/dist/{agent-core → dim-agent-sdk/src/agent-core}/index.d.ts +7 -0
  11. package/dist/dim-agent-sdk/src/agent-core/notifications.d.ts +25 -0
  12. package/dist/dim-agent-sdk/src/agent-core/plugin-state.d.ts +24 -0
  13. package/dist/{agent-core → dim-agent-sdk/src/agent-core}/session-state.d.ts +4 -1
  14. package/dist/dim-agent-sdk/src/agent-core/session-status.d.ts +4 -0
  15. package/dist/dim-agent-sdk/src/agent-core/subagent.d.ts +14 -0
  16. package/dist/dim-agent-sdk/src/context/compaction.d.ts +1 -0
  17. package/dist/dim-agent-sdk/src/context/index.d.ts +4 -0
  18. package/dist/dim-agent-sdk/src/contracts/compaction.d.ts +52 -0
  19. package/dist/{contracts → dim-agent-sdk/src/contracts}/event.d.ts +8 -1
  20. package/dist/{contracts → dim-agent-sdk/src/contracts}/index.d.ts +2 -0
  21. package/dist/dim-agent-sdk/src/contracts/plugin-state.d.ts +11 -0
  22. package/dist/dim-agent-sdk/src/contracts/state.d.ts +29 -0
  23. package/dist/{contracts → dim-agent-sdk/src/contracts}/tool.d.ts +6 -0
  24. package/dist/{index.d.ts → dim-agent-sdk/src/index.d.ts} +2 -1
  25. package/dist/{persistence → dim-agent-sdk/src/persistence}/SnapshotCodec.d.ts +3 -1
  26. package/dist/dim-agent-sdk/src/plugin-host/HookPipeline.d.ts +30 -0
  27. package/dist/dim-agent-sdk/src/plugin-host/PluginHost.d.ts +58 -0
  28. package/dist/dim-agent-sdk/src/plugin-host/helpers.d.ts +6 -0
  29. package/dist/dim-agent-sdk/src/plugin-host/index.d.ts +4 -0
  30. package/dist/dim-agent-sdk/src/plugin-host/types.d.ts +1 -0
  31. package/dist/{services → dim-agent-sdk/src/services}/PermissionGateway.d.ts +3 -0
  32. package/dist/{services → dim-agent-sdk/src/services}/types.d.ts +3 -1
  33. package/dist/dim-plugin-api/src/index.d.ts +602 -0
  34. package/dist/index.js +1194 -166
  35. package/package.json +11 -4
  36. package/dist/context/index.d.ts +0 -3
  37. package/dist/contracts/state.d.ts +0 -14
  38. package/dist/plugin-host/HookPipeline.d.ts +0 -7
  39. package/dist/plugin-host/PluginHost.d.ts +0 -36
  40. package/dist/plugin-host/helpers.d.ts +0 -3
  41. package/dist/plugin-host/index.d.ts +0 -4
  42. package/dist/plugin-host/types.d.ts +0 -1
  43. /package/dist/{agent-core → dim-agent-sdk/src/agent-core}/MessageFactory.d.ts +0 -0
  44. /package/dist/{agent-core → dim-agent-sdk/src/agent-core}/ModelTurnCollector.d.ts +0 -0
  45. /package/dist/{agent-core → dim-agent-sdk/src/agent-core}/TerminationPolicy.d.ts +0 -0
  46. /package/dist/{agent-core → dim-agent-sdk/src/agent-core}/createModel.d.ts +0 -0
  47. /package/dist/{agent-core → dim-agent-sdk/src/agent-core}/tool-call.d.ts +0 -0
  48. /package/dist/{context → dim-agent-sdk/src/context}/AutoContextManager.d.ts +0 -0
  49. /package/dist/{context → dim-agent-sdk/src/context}/types.d.ts +0 -0
  50. /package/dist/{contracts → dim-agent-sdk/src/contracts}/common.d.ts +0 -0
  51. /package/dist/{contracts → dim-agent-sdk/src/contracts}/content-normalize.d.ts +0 -0
  52. /package/dist/{contracts → dim-agent-sdk/src/contracts}/content.d.ts +0 -0
  53. /package/dist/{contracts → dim-agent-sdk/src/contracts}/message.d.ts +0 -0
  54. /package/dist/{contracts → dim-agent-sdk/src/contracts}/model.d.ts +0 -0
  55. /package/dist/{contracts → dim-agent-sdk/src/contracts}/tool-normalize.d.ts +0 -0
  56. /package/dist/{persistence → dim-agent-sdk/src/persistence}/FileStateStore.d.ts +0 -0
  57. /package/dist/{persistence → dim-agent-sdk/src/persistence}/InMemoryStateStore.d.ts +0 -0
  58. /package/dist/{persistence → dim-agent-sdk/src/persistence}/index.d.ts +0 -0
  59. /package/dist/{persistence → dim-agent-sdk/src/persistence}/store.d.ts +0 -0
  60. /package/dist/{providers → dim-agent-sdk/src/providers}/anthropic/adapter.d.ts +0 -0
  61. /package/dist/{providers → dim-agent-sdk/src/providers}/anthropic/mapper.d.ts +0 -0
  62. /package/dist/{providers → dim-agent-sdk/src/providers}/gemini/adapter.d.ts +0 -0
  63. /package/dist/{providers → dim-agent-sdk/src/providers}/gemini/mapper.d.ts +0 -0
  64. /package/dist/{providers → dim-agent-sdk/src/providers}/index.d.ts +0 -0
  65. /package/dist/{providers → dim-agent-sdk/src/providers}/openai/adapter.d.ts +0 -0
  66. /package/dist/{providers → dim-agent-sdk/src/providers}/openai/mapper.d.ts +0 -0
  67. /package/dist/{providers → dim-agent-sdk/src/providers}/openai-responses/adapter.d.ts +0 -0
  68. /package/dist/{providers → dim-agent-sdk/src/providers}/openai-responses/mapper.d.ts +0 -0
  69. /package/dist/{providers → dim-agent-sdk/src/providers}/shared/http-error.d.ts +0 -0
  70. /package/dist/{providers → dim-agent-sdk/src/providers}/shared/provider-state.d.ts +0 -0
  71. /package/dist/{providers → dim-agent-sdk/src/providers}/shared/reasoning.d.ts +0 -0
  72. /package/dist/{providers → dim-agent-sdk/src/providers}/shared/tool-call.d.ts +0 -0
  73. /package/dist/{providers → dim-agent-sdk/src/providers}/shared/usage.d.ts +0 -0
  74. /package/dist/{services → dim-agent-sdk/src/services}/ExecGateway.d.ts +0 -0
  75. /package/dist/{services → dim-agent-sdk/src/services}/FileSystemGateway.d.ts +0 -0
  76. /package/dist/{services → dim-agent-sdk/src/services}/GitGateway.d.ts +0 -0
  77. /package/dist/{services → dim-agent-sdk/src/services}/ModelGateway.d.ts +0 -0
  78. /package/dist/{services → dim-agent-sdk/src/services}/NetworkGateway.d.ts +0 -0
  79. /package/dist/{services → dim-agent-sdk/src/services}/activity.d.ts +0 -0
  80. /package/dist/{services → dim-agent-sdk/src/services}/index.d.ts +0 -0
  81. /package/dist/{services → dim-agent-sdk/src/services}/permissions.d.ts +0 -0
  82. /package/dist/{tools → dim-agent-sdk/src/tools}/BaseTool.d.ts +0 -0
  83. /package/dist/{tools → dim-agent-sdk/src/tools}/ToolRegistry.d.ts +0 -0
  84. /package/dist/{tools → dim-agent-sdk/src/tools}/builtins/EditTool.d.ts +0 -0
  85. /package/dist/{tools → dim-agent-sdk/src/tools}/builtins/ExecTool.d.ts +0 -0
  86. /package/dist/{tools → dim-agent-sdk/src/tools}/builtins/ReadTool.d.ts +0 -0
  87. /package/dist/{tools → dim-agent-sdk/src/tools}/builtins/WriteTool.d.ts +0 -0
  88. /package/dist/{tools → dim-agent-sdk/src/tools}/builtins/index.d.ts +0 -0
  89. /package/dist/{tools → dim-agent-sdk/src/tools}/builtins/utils.d.ts +0 -0
  90. /package/dist/{tools → dim-agent-sdk/src/tools}/index.d.ts +0 -0
  91. /package/dist/{tools → dim-agent-sdk/src/tools}/result.d.ts +0 -0
  92. /package/dist/{utils → dim-agent-sdk/src/utils}/guards.d.ts +0 -0
  93. /package/dist/{utils → dim-agent-sdk/src/utils}/id.d.ts +0 -0
  94. /package/dist/{utils → dim-agent-sdk/src/utils}/json.d.ts +0 -0
  95. /package/dist/{utils → dim-agent-sdk/src/utils}/usage.d.ts +0 -0
@@ -0,0 +1,602 @@
1
+ export interface Usage {
2
+ promptTokens: number;
3
+ completionTokens: number;
4
+ totalTokens: number;
5
+ }
6
+ export interface ModelErrorPayload {
7
+ code: string;
8
+ message: string;
9
+ status?: number;
10
+ retryable?: boolean;
11
+ details?: Record<string, unknown>;
12
+ }
13
+ export interface SessionErrorPayload extends ModelErrorPayload {
14
+ requestId?: string;
15
+ }
16
+ export type JsonValue = string | number | boolean | null | JsonObject | JsonValue[];
17
+ export interface JsonObject {
18
+ [key: string]: JsonValue;
19
+ }
20
+ export interface TextContent {
21
+ type: 'text';
22
+ text: string;
23
+ annotations?: Record<string, unknown>;
24
+ _meta?: Record<string, unknown>;
25
+ }
26
+ export interface ImageContent {
27
+ type: 'image';
28
+ data: string;
29
+ mimeType: string;
30
+ annotations?: Record<string, unknown>;
31
+ _meta?: Record<string, unknown>;
32
+ }
33
+ export type ContentBlock = TextContent | ImageContent;
34
+ export type NormalizedContent = ContentBlock[];
35
+ export type MessageContentInput = string | ContentBlock | ContentBlock[];
36
+ export type JsonSchema = Record<string, unknown>;
37
+ export interface ToolInputSchema extends JsonSchema {
38
+ type: 'object';
39
+ properties?: Record<string, JsonSchema>;
40
+ required?: string[];
41
+ additionalProperties?: boolean | JsonSchema;
42
+ }
43
+ export interface ToolDefinition {
44
+ name: string;
45
+ description: string;
46
+ inputSchema: ToolInputSchema;
47
+ }
48
+ export interface ToolCall {
49
+ id: string;
50
+ type: 'function';
51
+ function: {
52
+ name: string;
53
+ arguments: Record<string, unknown>;
54
+ };
55
+ rawArgumentsText?: string;
56
+ }
57
+ export interface CallToolResult {
58
+ content: NormalizedContent;
59
+ structuredContent?: JsonObject;
60
+ isError?: boolean;
61
+ }
62
+ export interface ExecOptions {
63
+ cwd?: string;
64
+ env?: Record<string, string>;
65
+ timeoutMs?: number;
66
+ signal?: AbortSignal;
67
+ }
68
+ export interface ExecResult {
69
+ command: string;
70
+ cwd: string | null;
71
+ stdout: string;
72
+ stderr: string;
73
+ exitCode: number | null;
74
+ signal: string | null;
75
+ timedOut?: boolean;
76
+ }
77
+ export interface GlobOptions {
78
+ cwd?: string;
79
+ limit?: number;
80
+ }
81
+ export interface GrepOptions extends GlobOptions {
82
+ pattern?: string;
83
+ }
84
+ export interface GrepMatch {
85
+ path: string;
86
+ lineNumber: number;
87
+ line: string;
88
+ }
89
+ export interface FileSystemGateway {
90
+ readText(path: string, options?: {
91
+ cwd?: string;
92
+ }): Promise<string>;
93
+ writeText(path: string, content: string, options?: {
94
+ cwd?: string;
95
+ }): Promise<{
96
+ path: string;
97
+ bytes: number;
98
+ }>;
99
+ editText(path: string, options: {
100
+ oldText: string;
101
+ newText: string;
102
+ replaceAll?: boolean;
103
+ cwd?: string;
104
+ }): Promise<{
105
+ path: string;
106
+ replacements: number;
107
+ }>;
108
+ exists(path: string, options?: {
109
+ cwd?: string;
110
+ }): Promise<boolean>;
111
+ glob(pattern: string, options?: GlobOptions): Promise<string[]>;
112
+ grep(query: string, options?: GrepOptions): Promise<GrepMatch[]>;
113
+ }
114
+ export interface ExecGateway {
115
+ execute(command: string, options?: ExecOptions): Promise<ExecResult>;
116
+ }
117
+ export interface GitGateway {
118
+ status(options?: {
119
+ cwd?: string;
120
+ }): Promise<string | null>;
121
+ diff(options?: {
122
+ cwd?: string;
123
+ }): Promise<string | null>;
124
+ }
125
+ export interface NetworkGateway {
126
+ fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
127
+ }
128
+ export interface ModelRef {
129
+ provider: string;
130
+ modelId: string;
131
+ }
132
+ export type ModelStopReason = 'final' | 'tool_call' | 'length' | 'error' | 'cancelled';
133
+ export type MessageRole = 'system' | 'user' | 'assistant' | 'tool';
134
+ export interface BaseMessage {
135
+ id: string;
136
+ role: MessageRole;
137
+ content: NormalizedContent;
138
+ createdAt: number;
139
+ metadata?: Record<string, unknown>;
140
+ }
141
+ export interface SystemMessage extends BaseMessage {
142
+ role: 'system';
143
+ }
144
+ export interface UserMessage extends BaseMessage {
145
+ role: 'user';
146
+ name?: string;
147
+ }
148
+ export interface AssistantMessage extends BaseMessage {
149
+ role: 'assistant';
150
+ thinking?: string;
151
+ toolCalls?: ToolCall[];
152
+ stopReason?: ModelStopReason;
153
+ }
154
+ export interface ToolMessage extends BaseMessage {
155
+ role: 'tool';
156
+ toolCallId: string;
157
+ toolName: string;
158
+ structuredContent?: Record<string, unknown>;
159
+ isError?: boolean;
160
+ }
161
+ export type Message = SystemMessage | UserMessage | AssistantMessage | ToolMessage;
162
+ export interface ModelRequest {
163
+ requestId?: string;
164
+ model: ModelRef;
165
+ messages: Message[];
166
+ tools?: ToolDefinition[];
167
+ maxOutputTokens?: number;
168
+ temperature?: number;
169
+ topP?: number;
170
+ stop?: string[];
171
+ reasoning?: Record<string, unknown>;
172
+ metadata?: Record<string, string | number | boolean | null>;
173
+ signal?: AbortSignal;
174
+ }
175
+ export type ModelStreamEvent = {
176
+ type: 'response_start';
177
+ requestId: string;
178
+ model: ModelRef;
179
+ } | {
180
+ type: 'text_delta';
181
+ requestId: string;
182
+ delta: string;
183
+ } | {
184
+ type: 'thinking_delta';
185
+ requestId: string;
186
+ delta: string;
187
+ } | {
188
+ type: 'tool_call_start';
189
+ requestId: string;
190
+ callId: string;
191
+ toolName: string;
192
+ } | {
193
+ type: 'tool_call_args_delta';
194
+ requestId: string;
195
+ callId: string;
196
+ delta: string;
197
+ } | {
198
+ type: 'tool_call_end';
199
+ requestId: string;
200
+ callId: string;
201
+ } | {
202
+ type: 'response_end';
203
+ requestId: string;
204
+ stopReason: ModelStopReason;
205
+ usage?: Usage;
206
+ assistantMetadata?: Record<string, unknown>;
207
+ } | {
208
+ type: 'error';
209
+ requestId: string;
210
+ error: ModelErrorPayload;
211
+ terminal?: boolean;
212
+ };
213
+ export interface ModelGateway {
214
+ stream(request: ModelRequest): AsyncIterable<ModelStreamEvent>;
215
+ }
216
+ export type CompactionTriggerReason = 'manual' | 'threshold';
217
+ export interface CompactionCheckpoint {
218
+ id: string;
219
+ cursor: number;
220
+ systemSegments: string[];
221
+ summary?: string;
222
+ reason: CompactionTriggerReason;
223
+ createdAt: number;
224
+ metadata?: Record<string, unknown>;
225
+ }
226
+ export interface CompactionState {
227
+ cursor: number;
228
+ systemSegments: string[];
229
+ checkpoints: CompactionCheckpoint[];
230
+ }
231
+ export interface CompactionUpdate {
232
+ cursor: number;
233
+ systemSegments?: string[];
234
+ summary?: string;
235
+ reason?: CompactionTriggerReason;
236
+ metadata?: Record<string, unknown>;
237
+ }
238
+ export interface CompactionServiceUpdate extends CompactionUpdate {
239
+ sessionId: string;
240
+ }
241
+ export interface CompactionService {
242
+ getState(sessionId: string): Promise<CompactionState>;
243
+ apply(update: CompactionServiceUpdate): Promise<CompactionState>;
244
+ clear(sessionId: string): Promise<CompactionState>;
245
+ }
246
+ export interface PluginSessionStateEntry {
247
+ version: number;
248
+ data: JsonObject;
249
+ updatedAt: number;
250
+ }
251
+ export interface PluginStateService {
252
+ get(sessionId: string): Promise<PluginSessionStateEntry | null>;
253
+ replace(sessionId: string, entry: PluginSessionStateEntry): Promise<PluginSessionStateEntry>;
254
+ clear(sessionId: string): Promise<void>;
255
+ }
256
+ export interface PluginToolEvent {
257
+ pluginId?: string;
258
+ event: string;
259
+ data?: JsonObject;
260
+ }
261
+ export interface PluginServices {
262
+ fileSystem: FileSystemGateway;
263
+ exec: ExecGateway;
264
+ git: GitGateway;
265
+ network: NetworkGateway;
266
+ model: ModelGateway;
267
+ compaction: CompactionService;
268
+ pluginState: PluginStateService;
269
+ }
270
+ export interface ToolExecutionContext {
271
+ sessionId: string;
272
+ cwd?: string;
273
+ signal?: AbortSignal;
274
+ metadata?: Record<string, unknown>;
275
+ services?: PluginServices;
276
+ emitEvent?(event: PluginToolEvent): Promise<void> | void;
277
+ }
278
+ export interface Tool {
279
+ readonly definition: ToolDefinition;
280
+ execute(args: Record<string, unknown>, context: ToolExecutionContext): Promise<CallToolResult>;
281
+ }
282
+ export interface SessionSnapshot {
283
+ schemaVersion: 1;
284
+ sessionId: string;
285
+ model?: ModelRef;
286
+ cwd?: string;
287
+ messages: Message[];
288
+ usage?: Usage;
289
+ compaction?: CompactionState;
290
+ pluginState?: Record<string, PluginSessionStateEntry>;
291
+ createdAt: number;
292
+ updatedAt: number;
293
+ metadata?: Record<string, unknown>;
294
+ }
295
+ export interface SessionStatus {
296
+ sessionId: string;
297
+ model: ModelRef;
298
+ cwd?: string;
299
+ usage: Usage;
300
+ compaction: CompactionState;
301
+ messageCount: number;
302
+ createdAt: number;
303
+ updatedAt: number;
304
+ metadata?: Record<string, unknown>;
305
+ }
306
+ export type FileSystemPermission = boolean | 'read' | 'write' | 'full';
307
+ export interface PermissionSpec {
308
+ fs?: FileSystemPermission;
309
+ git?: boolean;
310
+ network?: boolean;
311
+ process?: boolean;
312
+ model?: boolean;
313
+ mcp?: boolean;
314
+ }
315
+ export interface ContextItem {
316
+ id: string;
317
+ type: 'cwd' | 'file' | 'git_status' | 'git_diff' | 'text';
318
+ title: string;
319
+ content: string;
320
+ priority: number;
321
+ source: string;
322
+ }
323
+ export interface PluginManifest {
324
+ id: string;
325
+ version: string;
326
+ apiVersion: 1;
327
+ permissions: PermissionSpec;
328
+ configSchema?: Record<string, unknown>;
329
+ priority?: number;
330
+ capabilities?: string[];
331
+ }
332
+ export interface PluginRuntimeContext {
333
+ agentId: string;
334
+ cwd?: string;
335
+ sessionId?: string;
336
+ requestId?: string;
337
+ iteration?: number;
338
+ services: PluginServices;
339
+ status?: SessionStatus;
340
+ metadata?: Record<string, unknown>;
341
+ }
342
+ export interface NotificationPayload {
343
+ id?: string;
344
+ type: string;
345
+ source: string;
346
+ message: string;
347
+ level?: 'info' | 'warning' | 'error';
348
+ title?: string;
349
+ metadata?: Record<string, unknown>;
350
+ }
351
+ export interface ApprovalRequest {
352
+ id?: string;
353
+ kind: 'tool_execution';
354
+ toolCall: ToolCall;
355
+ message: string;
356
+ metadata?: Record<string, unknown>;
357
+ }
358
+ export type ApprovalDecision = {
359
+ type: 'approved';
360
+ } | {
361
+ type: 'denied';
362
+ reason?: string;
363
+ };
364
+ export interface RunStartPayload {
365
+ sessionId: string;
366
+ input: MessageContentInput;
367
+ }
368
+ export interface TurnStartPayload {
369
+ requestId: string;
370
+ iteration: number;
371
+ messages: Message[];
372
+ }
373
+ export interface ContextResolvePayload {
374
+ contextItems: ContextItem[];
375
+ input: MessageContentInput;
376
+ messages: Message[];
377
+ }
378
+ export interface PromptResolvePayload {
379
+ promptSegments: string[];
380
+ contextItems: ContextItem[];
381
+ messages: Message[];
382
+ }
383
+ export interface ToolsetResolvePayload {
384
+ tools: ToolDefinition[];
385
+ }
386
+ export interface ModelRequestPayload {
387
+ request: ModelRequest;
388
+ }
389
+ export interface ModelEventPayload {
390
+ event: ModelStreamEvent;
391
+ }
392
+ export interface AssistantMessagePayload {
393
+ message: AssistantMessage;
394
+ }
395
+ export interface ToolBeforeExecutePayload {
396
+ toolCall: ToolCall;
397
+ }
398
+ export interface ToolAfterExecutePayload {
399
+ toolCall: ToolCall;
400
+ result: CallToolResult;
401
+ }
402
+ export interface RunLoopDecision {
403
+ type: 'done' | 'continue';
404
+ }
405
+ export interface RunStopPayload {
406
+ assistantMessage: AssistantMessage;
407
+ toolCalls: ToolCall[];
408
+ stopReason: ModelStopReason;
409
+ decision: RunLoopDecision;
410
+ additionalContext?: string[];
411
+ finalMessage?: AssistantMessage;
412
+ }
413
+ export interface NotificationHookPayload {
414
+ notification: NotificationPayload;
415
+ }
416
+ export interface ContextCompactBeforePayload {
417
+ sessionId: string;
418
+ messages: Message[];
419
+ cursor: number;
420
+ systemSegments: string[];
421
+ contextItems?: ContextItem[];
422
+ estimatedInputTokens: number;
423
+ thresholdTokens: number;
424
+ maxInputTokens: number;
425
+ trigger: CompactionTriggerReason;
426
+ }
427
+ /**
428
+ * Experimental hook payload.
429
+ * The runtime does not emit this hook until subagent execution is implemented.
430
+ */
431
+ export interface SubagentStopPayload {
432
+ subagentId: string;
433
+ input?: MessageContentInput;
434
+ result?: AssistantMessage;
435
+ metadata?: Record<string, unknown>;
436
+ }
437
+ export interface SnapshotEncodePayload {
438
+ snapshot: SessionSnapshot;
439
+ }
440
+ export interface RunEndPayload {
441
+ message: AssistantMessage;
442
+ usage?: Usage;
443
+ }
444
+ export interface SessionErrorHookPayload {
445
+ error: SessionErrorPayload;
446
+ }
447
+ export interface HookPayloadMap {
448
+ 'run.start': RunStartPayload;
449
+ 'turn.start': TurnStartPayload;
450
+ 'context.resolve': ContextResolvePayload;
451
+ 'prompt.resolve': PromptResolvePayload;
452
+ 'toolset.resolve': ToolsetResolvePayload;
453
+ 'model.request': ModelRequestPayload;
454
+ 'model.event': ModelEventPayload;
455
+ 'assistant.message': AssistantMessagePayload;
456
+ 'tool.beforeExecute': ToolBeforeExecutePayload;
457
+ 'tool.afterExecute': ToolAfterExecutePayload;
458
+ 'notify.message': NotificationHookPayload;
459
+ 'run.stop': RunStopPayload;
460
+ 'context.compact.before': ContextCompactBeforePayload;
461
+ 'subagent.stop': SubagentStopPayload;
462
+ 'snapshot.encode': SnapshotEncodePayload;
463
+ 'run.end': RunEndPayload;
464
+ 'session.error': SessionErrorHookPayload;
465
+ }
466
+ /**
467
+ * Public hook names exposed to plugin authors.
468
+ * `subagent.stop` remains reserved until subagent execution is implemented.
469
+ */
470
+ export type PublicHookName = 'run.start' | 'tool.beforeExecute' | 'tool.afterExecute' | 'notify.message' | 'run.stop' | 'run.end' | 'context.compact.before' | 'subagent.stop' | 'session.error';
471
+ export type InternalHookName = 'turn.start' | 'context.resolve' | 'prompt.resolve' | 'toolset.resolve' | 'model.request' | 'model.event' | 'assistant.message' | 'snapshot.encode';
472
+ export type HookName = keyof HookPayloadMap;
473
+ export type HookMode = 'sync' | 'async';
474
+ export interface HookMatcher {
475
+ toolName?: string | string[];
476
+ notificationType?: string | string[];
477
+ stopReason?: ModelStopReason | ModelStopReason[];
478
+ source?: string | string[];
479
+ }
480
+ export interface HookDescriptor<N extends HookName = HookName> {
481
+ name: N;
482
+ when?: HookMatcher;
483
+ mode?: HookMode;
484
+ timeoutMs?: number;
485
+ priority?: number;
486
+ }
487
+ export interface HookHandlerInput<T> {
488
+ payload: T;
489
+ context: PluginRuntimeContext;
490
+ }
491
+ export interface HookControlResult<T> {
492
+ type: 'continue' | 'replace' | 'stop';
493
+ payload: T;
494
+ }
495
+ export interface AskApprovalInput {
496
+ message?: string;
497
+ metadata?: Record<string, unknown>;
498
+ }
499
+ export type ToolBeforeExecuteControlResult = {
500
+ type: 'allow';
501
+ } | {
502
+ type: 'deny';
503
+ reason?: string;
504
+ result?: CallToolResult;
505
+ } | {
506
+ type: 'ask';
507
+ request?: AskApprovalInput;
508
+ toolCall?: ToolCall;
509
+ } | {
510
+ type: 'replaceToolCall';
511
+ toolCall: ToolCall;
512
+ } | {
513
+ type: 'provideResult';
514
+ result: CallToolResult;
515
+ };
516
+ export type NotificationControlResult = {
517
+ type: 'continue';
518
+ } | {
519
+ type: 'replace';
520
+ notification: NotificationPayload;
521
+ } | {
522
+ type: 'suppress';
523
+ };
524
+ export type RunStopControlResult = {
525
+ type: 'continue';
526
+ } | {
527
+ type: 'finalize';
528
+ finalMessage?: AssistantMessage;
529
+ additionalContext?: string[];
530
+ };
531
+ export type HookSpecialControlResult<N extends HookName> = N extends 'tool.beforeExecute' ? ToolBeforeExecuteControlResult : N extends 'notify.message' ? NotificationControlResult : N extends 'run.stop' ? RunStopControlResult : never;
532
+ export type HookMiddlewareResult<N extends HookName> = HookControlResult<HookPayloadMap[N]> | HookPayloadMap[N] | HookSpecialControlResult<N> | void;
533
+ export type HookMiddleware<N extends HookName> = (input: HookHandlerInput<HookPayloadMap[N]>) => HookMiddlewareResult<N> | Promise<HookMiddlewareResult<N>>;
534
+ export type HookObserver<N extends HookName> = (input: HookHandlerInput<HookPayloadMap[N]>) => void | Promise<void>;
535
+ export type HookHandler<N extends HookName = HookName> = HookMiddleware<N> | HookObserver<N>;
536
+ export interface HookRegistrationEntry<N extends HookName = HookName> {
537
+ descriptor: HookDescriptor<N>;
538
+ middleware?: HookMiddleware<N>[];
539
+ observers?: HookObserver<N>[];
540
+ }
541
+ export type AnyHookRegistrationEntry = {
542
+ [N in HookName]: HookRegistrationEntry<N>;
543
+ }[HookName];
544
+ export type HookRegistration = AnyHookRegistrationEntry[];
545
+ export interface PluginContext {
546
+ cwd?: string;
547
+ manifest: PluginManifest;
548
+ services: PluginServices;
549
+ }
550
+ export interface PluginSessionControllerContext {
551
+ sessionId: string;
552
+ metadata?: Record<string, unknown>;
553
+ getStatus(): SessionStatus;
554
+ pluginState: PluginStateService;
555
+ save(): Promise<void>;
556
+ isRunning(): boolean;
557
+ }
558
+ export type PluginSessionControllerFactory = (context: PluginSessionControllerContext) => unknown;
559
+ export interface ContextContributorInput {
560
+ sessionId: string;
561
+ input: MessageContentInput;
562
+ messages: Message[];
563
+ cwd?: string;
564
+ }
565
+ export type ContextContributor = (input: ContextContributorInput) => ContextItem[] | Promise<ContextItem[]>;
566
+ export interface PromptContributorInput {
567
+ sessionId: string;
568
+ input: MessageContentInput;
569
+ messages: Message[];
570
+ contextItems: ContextItem[];
571
+ cwd?: string;
572
+ }
573
+ export type PromptContributor = (input: PromptContributorInput) => string | string[] | undefined | Promise<string | string[] | undefined>;
574
+ export interface AgentMode {
575
+ name: string;
576
+ description?: string;
577
+ }
578
+ export interface PluginSetupResult {
579
+ hooks?: HookRegistration;
580
+ tools?: Tool[];
581
+ contextContributors?: ContextContributor[];
582
+ promptContributors?: PromptContributor[];
583
+ modes?: AgentMode[];
584
+ createSessionController?: PluginSessionControllerFactory;
585
+ }
586
+ export interface DimPlugin {
587
+ manifest: PluginManifest;
588
+ setup?(context: PluginContext): PluginSetupResult;
589
+ }
590
+ export declare function continueHook<T>(payload: T): HookControlResult<T>;
591
+ export declare function replaceHook<T>(payload: T): HookControlResult<T>;
592
+ export declare function stopHook<T>(payload: T): HookControlResult<T>;
593
+ export declare function allowToolCall(): ToolBeforeExecuteControlResult;
594
+ export declare function denyToolCall(reason?: string, result?: CallToolResult): ToolBeforeExecuteControlResult;
595
+ export declare function askToolCall(request?: AskApprovalInput, toolCall?: ToolCall): ToolBeforeExecuteControlResult;
596
+ export declare function replaceToolCall(toolCall: ToolCall): ToolBeforeExecuteControlResult;
597
+ export declare function provideToolResult(result: CallToolResult): ToolBeforeExecuteControlResult;
598
+ export declare function continueNotification(): NotificationControlResult;
599
+ export declare function replaceNotification(notification: NotificationPayload): NotificationControlResult;
600
+ export declare function suppressNotification(): NotificationControlResult;
601
+ export declare function continueRun(): RunStopControlResult;
602
+ export declare function finalizeRun(finalMessage?: AssistantMessage, additionalContext?: string[]): RunStopControlResult;