goatchain 0.0.24 → 0.0.26

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 (54) hide show
  1. package/README.md +247 -72
  2. package/dist/agent/agent.d.ts +4 -4
  3. package/dist/agent/hooks/index.d.ts +1 -1
  4. package/dist/agent/hooks/manager.d.ts +10 -3
  5. package/dist/agent/hooks/types.d.ts +95 -8
  6. package/dist/agent/index.d.ts +3 -2
  7. package/dist/agent/middleware.d.ts +31 -2
  8. package/dist/agent/tokenCounter.d.ts +48 -2
  9. package/dist/agent/types.d.ts +15 -1
  10. package/dist/index.d.ts +12 -4
  11. package/dist/index.js +618 -467
  12. package/dist/lib/access-control/index.d.ts +1 -1
  13. package/dist/lib/access-control/policies.d.ts +10 -0
  14. package/dist/lib/session-blob.d.ts +50 -0
  15. package/dist/mcp-client/manager.d.ts +2 -0
  16. package/dist/middleware/attachmentMiddleware.d.ts +34 -0
  17. package/dist/middleware/commitModeMiddleware.d.ts +1 -1
  18. package/dist/middleware/contextCompressionMiddleware.d.ts +28 -2
  19. package/dist/middleware/envInfoMiddleware.d.ts +6 -0
  20. package/dist/middleware/gitUtils.d.ts +4 -0
  21. package/dist/middleware/longRunningMiddleware.d.ts +100 -0
  22. package/dist/middleware/parallelSubagentMiddleware.d.ts +2 -2
  23. package/dist/middleware/planModeMiddleware.d.ts +3 -3
  24. package/dist/middleware/reviewMiddleware.d.ts +1 -1
  25. package/dist/middleware/skillsMiddleware.d.ts +8 -0
  26. package/dist/model/anthropic/createAnthropicAdapter.d.ts +1 -1
  27. package/dist/model/codex/createCodexAdapter.d.ts +1 -1
  28. package/dist/model/index.d.ts +2 -0
  29. package/dist/model/openai/createOpenAIResponsesAdapter.d.ts +28 -0
  30. package/dist/session/completion/composite.d.ts +25 -0
  31. package/dist/session/completion/index.d.ts +8 -0
  32. package/dist/session/completion/strategies/reflection-decision-tool.d.ts +51 -0
  33. package/dist/session/completion/strategies/rule-based.d.ts +16 -0
  34. package/dist/session/completion/strategies/self-reflection.d.ts +54 -0
  35. package/dist/session/completion/strategies/todo-based.d.ts +17 -0
  36. package/dist/session/completion/types.d.ts +53 -0
  37. package/dist/session/executors/ToolExecutor.d.ts +4 -4
  38. package/dist/session/session.d.ts +9 -0
  39. package/dist/state/types.d.ts +3 -2
  40. package/dist/subagent/index.d.ts +1 -0
  41. package/dist/subagent/self-reflection-critic.d.ts +35 -0
  42. package/dist/tool/builtin/bash.d.ts +24 -0
  43. package/dist/tool/builtin/edit.d.ts +12 -0
  44. package/dist/tool/builtin/index.d.ts +2 -2
  45. package/dist/tool/builtin/pathProtection.d.ts +25 -0
  46. package/dist/tool/builtin/read.d.ts +69 -112
  47. package/dist/tool/builtin/task.d.ts +8 -0
  48. package/dist/tool/builtin/webFetch.d.ts +27 -4
  49. package/dist/tool/builtin/write.d.ts +15 -0
  50. package/dist/tool/index.d.ts +2 -2
  51. package/dist/types/common.d.ts +35 -0
  52. package/dist/types/event.d.ts +55 -3
  53. package/dist/types/snapshot.d.ts +1 -1
  54. package/package.json +4 -2
@@ -1,6 +1,6 @@
1
1
  export { BaseTool, errorContent, imageContent, textContent } from './base';
2
- export { AskUserTool, BashTool, EditTool, EnterPlanModeTool, ExitPlanModeTool, getBackgroundProcesses, GlobTool, GrepTool, isProcessRunning, killAllBackgroundProcesses, killProcessesByCategory, killProcessTree, ReadTool, TodoPlanTool, TodoWriteTool, WebFetchTool, WebSearchTool, WriteTool, } from './builtin';
3
- export type { AskUserArgs, AskUserResult, BashArgs, BashResult, EditArgs, EditResult, EnterPlanModeArgs, EnterPlanModeResult, ExitPlanModeArgs, ExitPlanModeResult, FetchFormat, GlobArgs, GlobResult, GrepArgs, GrepOutputMode, GrepResult, Question, QuestionOption, ReadArgs, ReadResult, TodoItem, TodoPlanArgs, TodoPlanResult, TodoStatus, TodoWriteArgs, TodoWriteResult, TrackedProcess, WebFetchArgs, WebFetchResult, WebSearchArgs, WebSearchResult, WriteArgs, WriteResult, } from './builtin';
2
+ export { AskUserTool, BashTool, EditTool, EnterPlanModeTool, ExitPlanModeTool, getBackgroundProcesses, GlobTool, GrepTool, isProcessRunning, killAllBackgroundProcesses, killProcessesByCategory, killProcessTree, ReadTool, softWrapLines, TodoPlanTool, TodoWriteTool, WebFetchTool, WebSearchTool, WriteTool, } from './builtin';
3
+ export type { AskUserArgs, AskUserResult, BashArgs, BashResult, DeliveryMode, EditArgs, EditResult, EnterPlanModeArgs, EnterPlanModeResult, ExitPlanModeArgs, ExitPlanModeResult, FetchFormat, GlobArgs, GlobResult, GrepArgs, GrepOutputMode, GrepResult, Question, QuestionOption, ReadArgs, ReadResult, TodoItem, TodoPlanArgs, TodoPlanResult, TodoStatus, TodoWriteArgs, TodoWriteResult, TrackedProcess, WebFetchArgs, WebFetchResult, WebSearchArgs, WebSearchResult, WriteArgs, WriteResult, } from './builtin';
4
4
  export { FilteredToolRegistry } from './FilteredToolRegistry';
5
5
  export { ToolRegistry } from './registry';
6
6
  export type { RiskLevel, ToolApprovalResult, ToolApprovalSettings, ToolApprovalStrategy, ToolExecutionContext, ToolExecutionContextInput, ToolRunUsage, } from './types';
@@ -52,3 +52,38 @@ export interface Usage {
52
52
  completionTokens: number;
53
53
  totalTokens: number;
54
54
  }
55
+ /**
56
+ * Small reference stored in checkpoint metadata (JSON-safe).
57
+ *
58
+ * Only contains the file path and metadata needed to re-read the file on
59
+ * resume. The actual base64 data is stored separately as transient data
60
+ * that is **not** persisted in checkpoints.
61
+ */
62
+ export interface ToolAttachmentRef {
63
+ /** 'image' for images, 'document' for PDFs */
64
+ type: 'image' | 'document';
65
+ /** Absolute file path – used to re-read on resume */
66
+ filePath: string;
67
+ /** MIME type (e.g. 'image/png', 'application/pdf') */
68
+ mimeType: string;
69
+ /** Display name (basename) */
70
+ name: string;
71
+ /** File size in bytes – used to detect changes on re-read */
72
+ fileSize: number;
73
+ }
74
+ /**
75
+ * Full attachment with base64 data (transient, in-memory only).
76
+ *
77
+ * Stored in `state.metadata._toolAttachmentData` which is added to
78
+ * `TRANSIENT_METADATA_KEYS` and therefore **not** saved to checkpoint.
79
+ */
80
+ export interface ToolResultAttachment {
81
+ /** 'image' for images, 'document' for PDFs */
82
+ type: 'image' | 'document';
83
+ /** Base64-encoded file content */
84
+ data: string;
85
+ /** MIME type (e.g. 'image/png', 'application/pdf') */
86
+ mimeType: string;
87
+ /** Display name */
88
+ name?: string;
89
+ }
@@ -5,7 +5,7 @@ import type { AgentLoopCheckpoint } from './snapshot';
5
5
  /**
6
6
  * Event types for streaming responses
7
7
  */
8
- export type AgentEventType = 'text_start' | 'text_delta' | 'text_end' | 'tool_call_start' | 'tool_call_delta' | 'tool_call_end' | 'tool_result' | 'tool_output_start' | 'tool_output_delta' | 'tool_approval_requested' | 'requires_action' | 'tool_skipped' | 'thinking_start' | 'thinking_delta' | 'thinking_end' | 'done' | 'iteration_start' | 'iteration_end' | 'session_created' | 'subagent_event';
8
+ export type AgentEventType = 'text_start' | 'text_delta' | 'text_end' | 'tool_call_start' | 'tool_call_delta' | 'tool_call_end' | 'tool_result' | 'tool_output_start' | 'tool_output_delta' | 'tool_approval_requested' | 'requires_action' | 'tool_skipped' | 'thinking_start' | 'thinking_delta' | 'thinking_end' | 'done' | 'iteration_start' | 'iteration_end' | 'session_created' | 'subagent_event' | 'completion_assessed' | 'compression_start' | 'compression_end';
9
9
  /**
10
10
  * Base event interface
11
11
  */
@@ -45,6 +45,8 @@ export interface ToolCallDeltaEvent extends BaseEvent {
45
45
  callId: string;
46
46
  toolName?: string;
47
47
  argsTextDelta?: string;
48
+ /** Optional line count hint for Write tool content. */
49
+ linesWritten?: number;
48
50
  }
49
51
  export interface ToolCallEndEvent extends BaseEvent {
50
52
  type: 'tool_call_end';
@@ -174,7 +176,7 @@ export interface DoneEvent extends BaseEvent {
174
176
  /** Final accumulated response text */
175
177
  finalResponse?: string;
176
178
  /** Stop reason for the loop */
177
- stopReason?: 'max_iterations' | 'final_response' | 'error' | 'cancelled' | 'approval_required';
179
+ stopReason?: 'max_iterations' | 'final_response' | 'error' | 'cancelled' | 'approval_required' | 'max_follow_ups';
178
180
  /** Stop reason reported by the last model call (if available) */
179
181
  modelStopReason?: ModelStopReason;
180
182
  /**
@@ -218,6 +220,23 @@ export interface IterationEndEvent extends BaseEvent {
218
220
  export interface SessionCreatedEvent extends BaseEvent {
219
221
  type: 'session_created';
220
222
  }
223
+ /**
224
+ * Completion assessed event - emitted when the long_running middleware assessor
225
+ * evaluates whether the task is complete.
226
+ *
227
+ * Only emitted when `createLongRunningMiddleware()` is registered.
228
+ */
229
+ export interface CompletionAssessedEvent extends BaseEvent {
230
+ type: 'completion_assessed';
231
+ /** Whether the assessor determined the task is complete */
232
+ isComplete: boolean;
233
+ /** Reason for the assessment */
234
+ reason?: string;
235
+ /** Name of the assessor that made the determination */
236
+ assessorName: string;
237
+ /** Current follow-up round number */
238
+ followUpRound: number;
239
+ }
221
240
  /**
222
241
  * Subagent event - wraps events emitted by delegated subagents
223
242
  *
@@ -235,7 +254,40 @@ export interface SubagentEvent extends BaseEvent {
235
254
  /** Optional: task description for context */
236
255
  taskDescription?: string;
237
256
  }
257
+ /**
258
+ * Compression start event - emitted when AI-based summary compression begins.
259
+ *
260
+ * Only emitted for summary compression (Stage 1), not tool compression (Stage 2).
261
+ * Emitted by `createContextCompressionMiddleware()` when tokens exceed 80% threshold.
262
+ */
263
+ export interface CompressionStartEvent extends BaseEvent {
264
+ type: 'compression_start';
265
+ /** Token count before compression */
266
+ tokensBefore: number;
267
+ /** Token threshold that triggered compression */
268
+ threshold: number;
269
+ }
270
+ /**
271
+ * Compression end event - emitted when AI-based summary compression completes.
272
+ *
273
+ * Only emitted for summary compression (Stage 1), not tool compression (Stage 2).
274
+ */
275
+ export interface CompressionEndEvent extends BaseEvent {
276
+ type: 'compression_end';
277
+ /** Token count before compression */
278
+ tokensBefore: number;
279
+ /** Token count after compression */
280
+ tokensAfter: number;
281
+ /** Number of messages removed by summarization */
282
+ removedMessages: number;
283
+ /** Number of tool outputs cleared by tool compression */
284
+ clearedToolOutputs: number;
285
+ /** Whether a summary was successfully generated */
286
+ summaryGenerated: boolean;
287
+ /** Time taken for compression in milliseconds */
288
+ elapsedMs: number;
289
+ }
238
290
  /**
239
291
  * Union type for all agent events
240
292
  */
241
- export type AgentEvent = TextStartEvent | TextDeltaEvent | TextEndEvent | ToolCallStartEvent | ToolCallDeltaEvent | ToolCallEndEvent | ToolResultEvent | ToolOutputStartEvent | ToolOutputDeltaEvent | ToolApprovalRequestedEvent | RequiresActionEvent | ToolSkippedEvent | ThinkingStartEvent | ThinkingDeltaEvent | ThinkingEndEvent | DoneEvent | IterationStartEvent | IterationEndEvent | SessionCreatedEvent | SubagentEvent;
293
+ export type AgentEvent = TextStartEvent | TextDeltaEvent | TextEndEvent | ToolCallStartEvent | ToolCallDeltaEvent | ToolCallEndEvent | ToolResultEvent | ToolOutputStartEvent | ToolOutputDeltaEvent | ToolApprovalRequestedEvent | RequiresActionEvent | ToolSkippedEvent | ThinkingStartEvent | ThinkingDeltaEvent | ThinkingEndEvent | DoneEvent | IterationStartEvent | IterationEndEvent | SessionCreatedEvent | SubagentEvent | CompletionAssessedEvent | CompressionStartEvent | CompressionEndEvent;
@@ -320,7 +320,7 @@ export interface AgentLoopCheckpoint {
320
320
  /**
321
321
  * Stop reason (if stopped)
322
322
  */
323
- stopReason?: 'max_iterations' | 'final_response' | 'error' | 'cancelled' | 'approval_required';
323
+ stopReason?: 'max_iterations' | 'final_response' | 'error' | 'cancelled' | 'approval_required' | 'max_follow_ups';
324
324
  /**
325
325
  * Stop reason reported by the last model call (if available).
326
326
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "goatchain",
3
3
  "type": "module",
4
- "version": "0.0.24",
4
+ "version": "0.0.26",
5
5
  "workspaces": [
6
6
  "packages/*"
7
7
  ],
@@ -35,6 +35,7 @@
35
35
  "prettier:check": "prettier --check \"src/**/*.{ts,js,json,md}\" \"examples/**/*.{ts,js,json,md}\" \"packages/cli/src/**/*.{ts,js,json,md}\"",
36
36
  "format:check": "prettier --check \"src/**/*.{ts,js,json,md}\" \"examples/**/*.{ts,js,json,md}\" \"packages/cli/src/**/*.{ts,js,json,md}\"",
37
37
  "test": "bun test --preload ./packages/cli/test/setup.ts ./test ./packages/cli/test",
38
+ "test:colors": "bun test ./packages/tui/test/terminal-capability.test.ts ./packages/tui/test/stdout-renderer-color-mode.test.ts",
38
39
  "check:commit": "GOATCHAIN_RUN_INTEGRATION=0 bun run typecheck && bun run lint && bun run format:check && bun run test && cd packages/cli && bun run typecheck && cd ../tui && bun run typecheck && bun run format && bun run test",
39
40
  "diff:demo": "GOATCHAIN_DIFF_DEMO=1 bun test --preload ./packages/cli/test/setup.ts ./packages/cli/test/diff-highlight-console.demo.test.ts",
40
41
  "test:serial": "bun run --filter '*' build && bun test --preload ./packages/cli/test/setup.ts ./test ./packages/cli/test",
@@ -61,6 +62,7 @@
61
62
  "providers:update": "node packages/cli/scripts/update-provider-models.mjs",
62
63
  "release": "bumpp --commit --no-verify --no-tag --no-push && bun run build && bun publish",
63
64
  "release:cli": "cd packages/cli && bumpp --commit --no-verify --no-tag --no-push && bun run build && bun publish",
65
+ "publish:bin": "node npmbin/scripts/publish.mjs",
64
66
  "acp-server": "bun run packages/cli/src/acp-server.ts",
65
67
  "prepare": "bash scripts/setup-githooks.sh"
66
68
  },
@@ -111,4 +113,4 @@
111
113
  "@ast-grep/napi"
112
114
  ],
113
115
  "prettier": "@sxzz/prettier-config"
114
- }
116
+ }