openhorse 0.2.22 → 0.2.24

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 (162) hide show
  1. package/dist/commands/target-command.d.ts +21 -0
  2. package/dist/commands/target-command.d.ts.map +1 -0
  3. package/dist/commands/target-command.js +81 -0
  4. package/dist/commands/target-command.js.map +1 -0
  5. package/dist/harness/capsule.d.ts +1 -0
  6. package/dist/harness/capsule.d.ts.map +1 -1
  7. package/dist/harness/capsule.js +38 -9
  8. package/dist/harness/capsule.js.map +1 -1
  9. package/dist/harness/contract.d.ts +2 -0
  10. package/dist/harness/contract.d.ts.map +1 -1
  11. package/dist/harness/contract.js +78 -14
  12. package/dist/harness/contract.js.map +1 -1
  13. package/dist/harness/index.d.ts +2 -2
  14. package/dist/harness/index.d.ts.map +1 -1
  15. package/dist/harness/index.js +4 -1
  16. package/dist/harness/index.js.map +1 -1
  17. package/dist/harness/state.d.ts.map +1 -1
  18. package/dist/harness/state.js +37 -7
  19. package/dist/harness/state.js.map +1 -1
  20. package/dist/runtime/agent-runtime-controller.d.ts +5 -0
  21. package/dist/runtime/agent-runtime-controller.d.ts.map +1 -1
  22. package/dist/runtime/agent-runtime-controller.js +54 -0
  23. package/dist/runtime/agent-runtime-controller.js.map +1 -1
  24. package/dist/runtime/agent-runtime-protocol.d.ts +4 -0
  25. package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -1
  26. package/dist/runtime/agent-runtime-protocol.js.map +1 -1
  27. package/dist/runtime/aggregate-tool-presenter.d.ts +13 -0
  28. package/dist/runtime/aggregate-tool-presenter.d.ts.map +1 -0
  29. package/dist/runtime/aggregate-tool-presenter.js +44 -0
  30. package/dist/runtime/aggregate-tool-presenter.js.map +1 -0
  31. package/dist/runtime/chat-controller.d.ts +9 -2
  32. package/dist/runtime/chat-controller.d.ts.map +1 -1
  33. package/dist/runtime/chat-controller.js +129 -17
  34. package/dist/runtime/chat-controller.js.map +1 -1
  35. package/dist/runtime/goal-coordinator.d.ts +66 -0
  36. package/dist/runtime/goal-coordinator.d.ts.map +1 -0
  37. package/dist/runtime/goal-coordinator.js +200 -0
  38. package/dist/runtime/goal-coordinator.js.map +1 -0
  39. package/dist/runtime/goals/accounting.d.ts +17 -0
  40. package/dist/runtime/goals/accounting.d.ts.map +1 -0
  41. package/dist/runtime/goals/accounting.js +45 -0
  42. package/dist/runtime/goals/accounting.js.map +1 -0
  43. package/dist/runtime/goals/completion-audit.d.ts +24 -0
  44. package/dist/runtime/goals/completion-audit.d.ts.map +1 -0
  45. package/dist/runtime/goals/completion-audit.js +48 -0
  46. package/dist/runtime/goals/completion-audit.js.map +1 -0
  47. package/dist/runtime/goals/coordinator.d.ts +42 -0
  48. package/dist/runtime/goals/coordinator.d.ts.map +1 -0
  49. package/dist/runtime/goals/coordinator.js +277 -0
  50. package/dist/runtime/goals/coordinator.js.map +1 -0
  51. package/dist/runtime/goals/prompt.d.ts +16 -0
  52. package/dist/runtime/goals/prompt.d.ts.map +1 -0
  53. package/dist/runtime/goals/prompt.js +50 -0
  54. package/dist/runtime/goals/prompt.js.map +1 -0
  55. package/dist/runtime/goals/tools.d.ts +43 -0
  56. package/dist/runtime/goals/tools.d.ts.map +1 -0
  57. package/dist/runtime/goals/tools.js +88 -0
  58. package/dist/runtime/goals/tools.js.map +1 -0
  59. package/dist/runtime/goals/types.d.ts +167 -0
  60. package/dist/runtime/goals/types.d.ts.map +1 -0
  61. package/dist/runtime/goals/types.js +72 -0
  62. package/dist/runtime/goals/types.js.map +1 -0
  63. package/dist/runtime/tool-detail-repository.d.ts +45 -0
  64. package/dist/runtime/tool-detail-repository.d.ts.map +1 -0
  65. package/dist/runtime/tool-detail-repository.js +131 -0
  66. package/dist/runtime/tool-detail-repository.js.map +1 -0
  67. package/dist/runtime/tool-output-presentation.d.ts +89 -0
  68. package/dist/runtime/tool-output-presentation.d.ts.map +1 -0
  69. package/dist/runtime/tool-output-presentation.js +329 -0
  70. package/dist/runtime/tool-output-presentation.js.map +1 -0
  71. package/dist/runtime/ui-events.d.ts +4 -0
  72. package/dist/runtime/ui-events.d.ts.map +1 -1
  73. package/dist/runtime/ui-events.js.map +1 -1
  74. package/dist/services/goal-sidecar.d.ts +96 -0
  75. package/dist/services/goal-sidecar.d.ts.map +1 -0
  76. package/dist/services/goal-sidecar.js +145 -0
  77. package/dist/services/goal-sidecar.js.map +1 -0
  78. package/dist/services/goal-storage.d.ts +22 -0
  79. package/dist/services/goal-storage.d.ts.map +1 -0
  80. package/dist/services/goal-storage.js +153 -0
  81. package/dist/services/goal-storage.js.map +1 -0
  82. package/dist/services/model-context.d.ts.map +1 -1
  83. package/dist/services/model-context.js +7 -0
  84. package/dist/services/model-context.js.map +1 -1
  85. package/dist/services/session-storage.d.ts +7 -0
  86. package/dist/services/session-storage.d.ts.map +1 -1
  87. package/dist/services/session-storage.js +64 -27
  88. package/dist/services/session-storage.js.map +1 -1
  89. package/dist/services/storage-maintenance.d.ts.map +1 -1
  90. package/dist/services/storage-maintenance.js +3 -2
  91. package/dist/services/storage-maintenance.js.map +1 -1
  92. package/dist/terminal-ui/editor.d.ts.map +1 -1
  93. package/dist/terminal-ui/editor.js +14 -3
  94. package/dist/terminal-ui/editor.js.map +1 -1
  95. package/dist/terminal-ui/launch.d.ts +19 -0
  96. package/dist/terminal-ui/launch.d.ts.map +1 -1
  97. package/dist/terminal-ui/launch.js +187 -24
  98. package/dist/terminal-ui/launch.js.map +1 -1
  99. package/dist/terminal-ui/output-queue.d.ts +43 -0
  100. package/dist/terminal-ui/output-queue.d.ts.map +1 -0
  101. package/dist/terminal-ui/output-queue.js +139 -0
  102. package/dist/terminal-ui/output-queue.js.map +1 -0
  103. package/dist/terminal-ui/raw-editor.d.ts +33 -0
  104. package/dist/terminal-ui/raw-editor.d.ts.map +1 -1
  105. package/dist/terminal-ui/raw-editor.js +142 -23
  106. package/dist/terminal-ui/raw-editor.js.map +1 -1
  107. package/dist/tools/goal.d.ts +17 -0
  108. package/dist/tools/goal.d.ts.map +1 -0
  109. package/dist/tools/goal.js +191 -0
  110. package/dist/tools/goal.js.map +1 -0
  111. package/dist/tools/index.d.ts.map +1 -1
  112. package/dist/tools/index.js +133 -58
  113. package/dist/tools/index.js.map +1 -1
  114. package/dist/tui-core/input-parser.d.ts +9 -2
  115. package/dist/tui-core/input-parser.d.ts.map +1 -1
  116. package/dist/tui-core/input-parser.js +37 -2
  117. package/dist/tui-core/input-parser.js.map +1 -1
  118. package/dist/tui-ui/inline-surface.d.ts +7 -1
  119. package/dist/tui-ui/inline-surface.d.ts.map +1 -1
  120. package/dist/tui-ui/inline-surface.js +23 -2
  121. package/dist/tui-ui/inline-surface.js.map +1 -1
  122. package/dist/tui-ui/input-ownership.d.ts +46 -0
  123. package/dist/tui-ui/input-ownership.d.ts.map +1 -0
  124. package/dist/tui-ui/input-ownership.js +74 -0
  125. package/dist/tui-ui/input-ownership.js.map +1 -0
  126. package/dist/tui-ui/launch.d.ts +1 -0
  127. package/dist/tui-ui/launch.d.ts.map +1 -1
  128. package/dist/tui-ui/launch.js +104 -2
  129. package/dist/tui-ui/launch.js.map +1 -1
  130. package/dist/tui-ui/layout.d.ts +1 -0
  131. package/dist/tui-ui/layout.d.ts.map +1 -1
  132. package/dist/tui-ui/layout.js +5 -1
  133. package/dist/tui-ui/layout.js.map +1 -1
  134. package/dist/tui-ui/runner.d.ts +32 -0
  135. package/dist/tui-ui/runner.d.ts.map +1 -1
  136. package/dist/tui-ui/runner.js +553 -24
  137. package/dist/tui-ui/runner.js.map +1 -1
  138. package/dist/tui-ui/state.d.ts +65 -0
  139. package/dist/tui-ui/state.d.ts.map +1 -1
  140. package/dist/tui-ui/state.js +187 -2
  141. package/dist/tui-ui/state.js.map +1 -1
  142. package/dist/tui-ui/theme-profile.d.ts +25 -0
  143. package/dist/tui-ui/theme-profile.d.ts.map +1 -0
  144. package/dist/tui-ui/theme-profile.js +130 -0
  145. package/dist/tui-ui/theme-profile.js.map +1 -0
  146. package/dist/tui-ui/transcript-inspector-layout.d.ts +9 -0
  147. package/dist/tui-ui/transcript-inspector-layout.d.ts.map +1 -0
  148. package/dist/tui-ui/transcript-inspector-layout.js +97 -0
  149. package/dist/tui-ui/transcript-inspector-layout.js.map +1 -0
  150. package/dist/tui-ui/transcript-inspector-surface.d.ts +18 -0
  151. package/dist/tui-ui/transcript-inspector-surface.d.ts.map +1 -0
  152. package/dist/tui-ui/transcript-inspector-surface.js +88 -0
  153. package/dist/tui-ui/transcript-inspector-surface.js.map +1 -0
  154. package/dist/tui-ui/transcript-inspector.d.ts +35 -0
  155. package/dist/tui-ui/transcript-inspector.d.ts.map +1 -0
  156. package/dist/tui-ui/transcript-inspector.js +128 -0
  157. package/dist/tui-ui/transcript-inspector.js.map +1 -0
  158. package/dist/tui-ui/transcript-layout.d.ts +1 -0
  159. package/dist/tui-ui/transcript-layout.d.ts.map +1 -1
  160. package/dist/tui-ui/transcript-layout.js +44 -3
  161. package/dist/tui-ui/transcript-layout.js.map +1 -1
  162. package/package.json +1 -1
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ /**
3
+ * v0.2.24 — Goal Model Tools.
4
+ *
5
+ * get_goal, create_goal, update_goal tool definitions for the Agent.
6
+ * These tools allow the model to read and request changes to the
7
+ * persistent goal. Actual state changes go through GoalCoordinator.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.buildGetGoalTool = buildGetGoalTool;
11
+ exports.executeGetGoal = executeGetGoal;
12
+ exports.buildCreateGoalTool = buildCreateGoalTool;
13
+ exports.executeCreateGoal = executeCreateGoal;
14
+ exports.buildUpdateGoalTool = buildUpdateGoalTool;
15
+ exports.executeUpdateGoal = executeUpdateGoal;
16
+ function buildGetGoalTool() {
17
+ return {
18
+ name: 'get_goal',
19
+ description: 'Read the current persistent goal for this session. Returns null if no goal is active.',
20
+ parameters: {
21
+ type: 'object',
22
+ properties: {},
23
+ required: [],
24
+ },
25
+ };
26
+ }
27
+ function executeGetGoal(bindings) {
28
+ return bindings.coordinator.snapshot();
29
+ }
30
+ function buildCreateGoalTool() {
31
+ return {
32
+ name: 'create_goal',
33
+ description: 'Create a persistent goal for this session. Only use when the user explicitly requests a long-running goal. Rejects if a goal already exists.',
34
+ parameters: {
35
+ type: 'object',
36
+ properties: {
37
+ objective: {
38
+ type: 'string',
39
+ description: 'The goal objective. Must be clear, specific, and verifiable.',
40
+ },
41
+ token_budget: {
42
+ type: 'number',
43
+ description: 'Optional token budget. Only set when the user explicitly provides a budget.',
44
+ },
45
+ },
46
+ required: ['objective'],
47
+ },
48
+ };
49
+ }
50
+ function executeCreateGoal(bindings, objective, tokenBudget) {
51
+ const result = bindings.coordinator.create(objective);
52
+ if (!result.ok)
53
+ return { ok: false, error: result.error };
54
+ if (tokenBudget && tokenBudget > 0) {
55
+ bindings.coordinator.setBudget(tokenBudget);
56
+ }
57
+ const snap = bindings.coordinator.snapshot();
58
+ return snap ? { ok: true, goal: snap } : { ok: false, error: 'Goal was created but snapshot is unavailable.' };
59
+ }
60
+ function buildUpdateGoalTool() {
61
+ return {
62
+ name: 'update_goal',
63
+ description: 'Request a status change for the current goal. The request is audited before the change takes effect.',
64
+ parameters: {
65
+ type: 'object',
66
+ properties: {
67
+ status: {
68
+ type: 'string',
69
+ enum: ['complete', 'blocked'],
70
+ description: 'The requested target status: "complete" when all requirements are verified; "blocked" when the same blocker persisted for 3+ turns.',
71
+ },
72
+ },
73
+ required: ['status'],
74
+ },
75
+ };
76
+ }
77
+ function executeUpdateGoal(bindings, status) {
78
+ const goal = bindings.coordinator.goal;
79
+ if (!goal)
80
+ return { ok: false, error: 'No active goal to update.' };
81
+ if (goal.status !== 'active')
82
+ return { ok: false, error: `Goal is not active (current status: ${goal.status}).` };
83
+ return {
84
+ ok: true,
85
+ message: `Goal ${status} request recorded. Audit will verify before applying.`,
86
+ };
87
+ }
88
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/runtime/goals/tools.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AASH,4CAcC;AAED,wCAEC;AAED,kDAuBC;AAED,8CAcC;AAED,kDAoBC;AAED,8CAYC;AA/FD,SAAgB,gBAAgB;IAK9B,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,uFAAuF;QACpG,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,QAA0B;IACvD,OAAO,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;AACzC,CAAC;AAED,SAAgB,mBAAmB;IAKjC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,8IAA8I;QAC3J,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8DAA8D;iBAC5E;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6EAA6E;iBAC3F;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB,CAC/B,QAA0B,EAC1B,SAAiB,EACjB,WAAoB;IAEpB,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAE1D,IAAI,WAAW,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACnC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC7C,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAC;AACjH,CAAC;AAED,SAAgB,mBAAmB;IAKjC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,sGAAsG;QACnH,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;oBAC7B,WAAW,EAAE,qIAAqI;iBACnJ;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB,CAC/B,QAA0B,EAC1B,MAA8B;IAE9B,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;IACpE,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAElH,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,QAAQ,MAAM,uDAAuD;KAC/E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * v0.2.24 — Goal / Target Mode domain types.
3
+ *
4
+ * Goal is a persistent, single-session entity that the Agent pursues across
5
+ * multiple turns, Compact, process restart, and /resume. It is NOT a
6
+ * Harness field, a prompt string, or a UI state — it is an independent
7
+ * lifecycle entity with its own sidecar storage.
8
+ */
9
+ export type GoalStatus = 'active' | 'paused' | 'blocked' | 'usage_limited' | 'budget_limited' | 'complete';
10
+ export declare const GOAL_ACTIVE_STATES: ReadonlySet<GoalStatus>;
11
+ export declare const GOAL_TERMINAL_STATES: ReadonlySet<GoalStatus>;
12
+ export declare const GOAL_USER_RECOVERABLE_STATES: ReadonlySet<GoalStatus>;
13
+ export interface GoalBlocker {
14
+ fingerprint: string;
15
+ firstSeenAt: number;
16
+ lastSeenAt: number;
17
+ consecutiveTurns: number;
18
+ summary: string;
19
+ }
20
+ export interface GoalLastTurn {
21
+ turnId: string;
22
+ finishReason: string;
23
+ endedAt: number;
24
+ promptTokens: number;
25
+ completionTokens: number;
26
+ subagentTokens: number;
27
+ totalTokens: number;
28
+ madeProgress: boolean;
29
+ }
30
+ export interface GoalCompletionAudit {
31
+ requestedAt: number;
32
+ auditedAt: number;
33
+ passed: boolean;
34
+ verificationSummary: string;
35
+ remainingRequirements: string[];
36
+ evidenceRefs: string[];
37
+ }
38
+ export interface GoalStopReason {
39
+ kind: 'user' | 'blocked' | 'usage_limit' | 'budget_limit' | 'runtime_error';
40
+ message: string;
41
+ at: number;
42
+ }
43
+ export interface SessionGoalV1 {
44
+ version: 1;
45
+ goalId: string;
46
+ sessionId: string;
47
+ revision: number;
48
+ objective: string;
49
+ status: GoalStatus;
50
+ tokenBudget?: number;
51
+ tokensUsed: number;
52
+ timeUsedMs: number;
53
+ createdAt: number;
54
+ updatedAt: number;
55
+ activeSince?: number;
56
+ completedAt?: number;
57
+ continuationCount: number;
58
+ noProgressCount: number;
59
+ blocker?: GoalBlocker;
60
+ lastTurn?: GoalLastTurn;
61
+ completionAudit?: GoalCompletionAudit;
62
+ stopReason?: GoalStopReason;
63
+ }
64
+ export interface RuntimeGoalSnapshot {
65
+ goalId: string;
66
+ revision: number;
67
+ objective: string;
68
+ status: GoalStatus;
69
+ tokenBudget?: number;
70
+ tokensUsed: number;
71
+ timeUsedMs: number;
72
+ continuationCount: number;
73
+ updatedAt: number;
74
+ stopReason?: string;
75
+ }
76
+ export type AgentInputKind = 'user' | 'revision' | 'goal_continuation' | 'command';
77
+ export interface GoalTurnContext {
78
+ goalId: string;
79
+ revision: number;
80
+ continuationIndex: number;
81
+ }
82
+ export interface AgentTurnRequest {
83
+ inputKind: AgentInputKind;
84
+ text?: string;
85
+ sessionId: string;
86
+ goal?: GoalTurnContext;
87
+ persistAsUserMessage: boolean;
88
+ echoToTranscript: boolean;
89
+ }
90
+ export interface AgentTurnOutcome {
91
+ turnId: string;
92
+ sessionId: string;
93
+ goalId?: string;
94
+ goalRevision?: number;
95
+ startedAt: number;
96
+ endedAt: number;
97
+ finishReason: string;
98
+ usage: {
99
+ promptTokens: number;
100
+ completionTokens: number;
101
+ subagentTokens: number;
102
+ totalTokens: number;
103
+ };
104
+ madeProgress: boolean;
105
+ blocker?: {
106
+ fingerprint: string;
107
+ summary: string;
108
+ retryable: boolean;
109
+ };
110
+ providerError?: {
111
+ kind: 'usage_limit' | 'rate_limit' | 'auth' | 'network' | 'unknown';
112
+ retryable: boolean;
113
+ };
114
+ pendingTerminalRequest?: {
115
+ requestedStatus: 'complete' | 'blocked';
116
+ requestedAt: number;
117
+ };
118
+ }
119
+ export type GoalControlAction = 'show' | 'create' | 'edit' | 'replace' | 'pause' | 'resume' | 'clear' | 'set_budget';
120
+ export interface GoalControlInput {
121
+ type: 'goal_control';
122
+ action: GoalControlAction;
123
+ payload?: {
124
+ objective?: string;
125
+ tokenBudget?: number | null;
126
+ confirmed?: boolean;
127
+ };
128
+ }
129
+ export interface GoalUpdatedEvent {
130
+ type: 'goal_updated';
131
+ goal: RuntimeGoalSnapshot;
132
+ reason: string;
133
+ }
134
+ export interface GoalClearedEvent {
135
+ type: 'goal_cleared';
136
+ goalId: string;
137
+ reason: string;
138
+ }
139
+ export interface GoalContinuationEvent {
140
+ type: 'goal_continuation';
141
+ goalId: string;
142
+ phase: 'scheduled' | 'started' | 'deferred' | 'stopped';
143
+ reason: string;
144
+ }
145
+ export interface GoalAuditFailedEvent {
146
+ type: 'goal_audit_failed';
147
+ goalId: string;
148
+ audit: 'completion' | 'blocked';
149
+ summary: string;
150
+ }
151
+ export interface GoalRestoredEvent {
152
+ type: 'goal_restored';
153
+ goal: RuntimeGoalSnapshot;
154
+ }
155
+ /**
156
+ * Valid status transitions for the Goal state machine.
157
+ * Returns the allowed next status, or null if the transition is invalid.
158
+ */
159
+ export declare function goalTransition(current: GoalStatus | null, event: 'create' | 'pause' | 'resume' | 'complete' | 'block' | 'usage_limit' | 'budget_limit' | 'replace' | 'clear'): GoalStatus | null;
160
+ /** Constraints from the goal plan that must hold across the state machine. */
161
+ export declare const GOAL_INVARIANTS: {
162
+ readonly maxObjectiveChars: 4000;
163
+ readonly maxConsecutiveBlockerTurns: 3;
164
+ readonly maxConsecutiveNoProgressTurns: 3;
165
+ readonly tokenBudgetMin: 1;
166
+ };
167
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/runtime/goals/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,eAAe,GACf,gBAAgB,GAChB,UAAU,CAAC;AAEf,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,UAAU,CAAuB,CAAC;AAC/E,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,UAAU,CAEvD,CAAC;AACH,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,UAAU,CAE/D,CAAC;AAMH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,cAAc,GAAG,eAAe,CAAC;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAMD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IAEnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAMD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,UAAU,GACV,mBAAmB,GACnB,SAAS,CAAC;AAEd,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,aAAa,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;QACpE,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,sBAAsB,CAAC,EAAE;QACvB,eAAe,EAAE,UAAU,GAAG,SAAS,CAAC;QACxC,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAMD,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,QAAQ,GACR,MAAM,GACN,SAAS,GACT,OAAO,GACP,QAAQ,GACR,OAAO,GACP,YAAY,CAAC;AAEjB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAMD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,GAAG,IAAI,EAC1B,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,aAAa,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,GACjH,UAAU,GAAG,IAAI,CAgCnB;AAED,8EAA8E;AAC9E,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /**
3
+ * v0.2.24 — Goal / Target Mode domain types.
4
+ *
5
+ * Goal is a persistent, single-session entity that the Agent pursues across
6
+ * multiple turns, Compact, process restart, and /resume. It is NOT a
7
+ * Harness field, a prompt string, or a UI state — it is an independent
8
+ * lifecycle entity with its own sidecar storage.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.GOAL_INVARIANTS = exports.GOAL_USER_RECOVERABLE_STATES = exports.GOAL_TERMINAL_STATES = exports.GOAL_ACTIVE_STATES = void 0;
12
+ exports.goalTransition = goalTransition;
13
+ exports.GOAL_ACTIVE_STATES = new Set(['active']);
14
+ exports.GOAL_TERMINAL_STATES = new Set([
15
+ 'blocked', 'usage_limited', 'budget_limited', 'complete',
16
+ ]);
17
+ exports.GOAL_USER_RECOVERABLE_STATES = new Set([
18
+ 'paused', 'blocked', 'usage_limited', 'budget_limited',
19
+ ]);
20
+ // ============================================================================
21
+ // State machine
22
+ // ============================================================================
23
+ /**
24
+ * Valid status transitions for the Goal state machine.
25
+ * Returns the allowed next status, or null if the transition is invalid.
26
+ */
27
+ function goalTransition(current, event) {
28
+ if (event === 'create')
29
+ return current === null ? 'active' : null;
30
+ if (event === 'replace')
31
+ return 'active'; // always allowed, generates new goalId
32
+ if (event === 'clear')
33
+ return null; // removes goal entirely
34
+ if (current === null)
35
+ return null;
36
+ switch (current) {
37
+ case 'active':
38
+ if (event === 'pause')
39
+ return 'paused';
40
+ if (event === 'complete')
41
+ return 'complete';
42
+ if (event === 'block')
43
+ return 'blocked';
44
+ if (event === 'usage_limit')
45
+ return 'usage_limited';
46
+ if (event === 'budget_limit')
47
+ return 'budget_limited';
48
+ return null;
49
+ case 'paused':
50
+ if (event === 'resume')
51
+ return 'active';
52
+ return null;
53
+ case 'blocked':
54
+ case 'usage_limited':
55
+ case 'budget_limited':
56
+ if (event === 'resume')
57
+ return 'active';
58
+ return null;
59
+ case 'complete':
60
+ return null; // terminal — only replace or clear
61
+ default:
62
+ return null;
63
+ }
64
+ }
65
+ /** Constraints from the goal plan that must hold across the state machine. */
66
+ exports.GOAL_INVARIANTS = {
67
+ maxObjectiveChars: 4000,
68
+ maxConsecutiveBlockerTurns: 3,
69
+ maxConsecutiveNoProgressTurns: 3,
70
+ tokenBudgetMin: 1,
71
+ };
72
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/runtime/goals/types.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAqOH,wCAmCC;AA1PY,QAAA,kBAAkB,GAA4B,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClE,QAAA,oBAAoB,GAA4B,IAAI,GAAG,CAAC;IACnE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU;CACzD,CAAC,CAAC;AACU,QAAA,4BAA4B,GAA4B,IAAI,GAAG,CAAC;IAC3E,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB;CACvD,CAAC,CAAC;AAyMH,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;;GAGG;AACH,SAAgB,cAAc,CAC5B,OAA0B,EAC1B,KAAkH;IAElH,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,CAAE,uCAAuC;IAClF,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC,CAAQ,wBAAwB;IAEnE,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAElC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,QAAQ;YACX,IAAI,KAAK,KAAK,OAAO;gBAAE,OAAO,QAAQ,CAAC;YACvC,IAAI,KAAK,KAAK,UAAU;gBAAE,OAAO,UAAU,CAAC;YAC5C,IAAI,KAAK,KAAK,OAAO;gBAAE,OAAO,SAAS,CAAC;YACxC,IAAI,KAAK,KAAK,aAAa;gBAAE,OAAO,eAAe,CAAC;YACpD,IAAI,KAAK,KAAK,cAAc;gBAAE,OAAO,gBAAgB,CAAC;YACtD,OAAO,IAAI,CAAC;QAEd,KAAK,QAAQ;YACX,IAAI,KAAK,KAAK,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YACxC,OAAO,IAAI,CAAC;QAEd,KAAK,SAAS,CAAC;QACf,KAAK,eAAe,CAAC;QACrB,KAAK,gBAAgB;YACnB,IAAI,KAAK,KAAK,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YACxC,OAAO,IAAI,CAAC;QAEd,KAAK,UAAU;YACb,OAAO,IAAI,CAAC,CAAE,mCAAmC;QAEnD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,8EAA8E;AACjE,QAAA,eAAe,GAAG;IAC7B,iBAAiB,EAAE,IAAI;IACvB,0BAA0B,EAAE,CAAC;IAC7B,6BAA6B,EAAE,CAAC;IAChC,cAAc,EAAE,CAAC;CACT,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * v0.2.23 — Tool Detail Repository.
3
+ *
4
+ * Read-only interface for accessing tool output details from durable sources
5
+ * (artifacts, session traces). Supports paginated reads with byte-offset
6
+ * limits. Never loads full multi-MB artifacts into memory at once.
7
+ */
8
+ export interface ToolDetailSummary {
9
+ callId: string;
10
+ sequence: number;
11
+ turnId?: string;
12
+ toolName: string;
13
+ state: 'success' | 'error' | 'skipped';
14
+ outputBytes: number;
15
+ artifactId?: string;
16
+ hasArtifact: boolean;
17
+ }
18
+ export interface ToolDetailPage {
19
+ content: string;
20
+ offsetBytes: number;
21
+ nextOffsetBytes?: number;
22
+ totalBytes: number;
23
+ redacted: boolean;
24
+ }
25
+ export interface ToolDetailRepository {
26
+ list(projectPath: string): Promise<ToolDetailSummary[]>;
27
+ read(ref: ToolDetailRef, options: {
28
+ offsetBytes: number;
29
+ limitBytes: number;
30
+ }, projectPath: string): Promise<ToolDetailPage>;
31
+ }
32
+ export interface ToolDetailRef {
33
+ callId: string;
34
+ sequence: number;
35
+ artifactId?: string;
36
+ outputBytes: number;
37
+ }
38
+ export declare class FileToolDetailRepository implements ToolDetailRepository {
39
+ list(projectPath: string): Promise<ToolDetailSummary[]>;
40
+ read(ref: ToolDetailRef, options: {
41
+ offsetBytes: number;
42
+ limitBytes: number;
43
+ }, projectPath: string): Promise<ToolDetailPage>;
44
+ }
45
+ //# sourceMappingURL=tool-detail-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-detail-repository.d.ts","sourceRoot":"","sources":["../../src/runtime/tool-detail-repository.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxD,IAAI,CACF,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EACpD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AASD,qBAAa,wBAAyB,YAAW,oBAAoB;IAC7D,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAiBvD,IAAI,CACR,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EACpD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC;CAuD3B"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * v0.2.23 — Tool Detail Repository.
4
+ *
5
+ * Read-only interface for accessing tool output details from durable sources
6
+ * (artifacts, session traces). Supports paginated reads with byte-offset
7
+ * limits. Never loads full multi-MB artifacts into memory at once.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.FileToolDetailRepository = void 0;
11
+ const fs_1 = require("fs");
12
+ const tool_artifacts_1 = require("../core/tool-artifacts");
13
+ const config_dir_1 = require("../services/config-dir");
14
+ const redaction_1 = require("../services/redaction");
15
+ const path_1 = require("path");
16
+ // ============================================================================
17
+ // Implementation
18
+ // ============================================================================
19
+ const MAX_PAGE_BYTES = 1024 * 1024; // 1 MB max per page
20
+ const DEFAULT_LIMIT_BYTES = 64 * 1024; // 64 KB default page
21
+ class FileToolDetailRepository {
22
+ async list(projectPath) {
23
+ try {
24
+ const artifacts = (0, tool_artifacts_1.listArtifacts)(projectPath);
25
+ return artifacts.map(a => ({
26
+ callId: artifactIdToCallId(a.id),
27
+ sequence: 0, // sequence not stored in artifact metadata currently
28
+ toolName: a.toolName,
29
+ state: 'success',
30
+ outputBytes: a.outputBytes,
31
+ artifactId: a.id,
32
+ hasArtifact: true,
33
+ }));
34
+ }
35
+ catch {
36
+ return [];
37
+ }
38
+ }
39
+ async read(ref, options, projectPath) {
40
+ const limitBytes = Math.min(options.limitBytes || DEFAULT_LIMIT_BYTES, MAX_PAGE_BYTES);
41
+ const offsetBytes = Math.max(0, options.offsetBytes || 0);
42
+ // Try reading from artifact file on disk.
43
+ if (ref.artifactId) {
44
+ // v0.2.23: reject path traversal in artifact IDs.
45
+ if (ref.artifactId.includes('..') || ref.artifactId.includes('/') || ref.artifactId.includes('\\')) {
46
+ return { content: 'detail unavailable', offsetBytes: 0, totalBytes: 0, redacted: false };
47
+ }
48
+ try {
49
+ const artifactDir = (0, config_dir_1.getProjectArtifactsDir)(projectPath);
50
+ const filePath = (0, path_1.join)(artifactDir, `${ref.artifactId}.txt`);
51
+ if ((0, fs_1.existsSync)(filePath)) {
52
+ const totalBytes = (0, fs_1.statSync)(filePath).size;
53
+ if (offsetBytes >= totalBytes) {
54
+ return { content: '', offsetBytes, totalBytes, redacted: false };
55
+ }
56
+ const requestedBytes = Math.min(limitBytes + 3, totalBytes - offsetBytes);
57
+ const buffer = Buffer.allocUnsafe(requestedBytes);
58
+ const fd = (0, fs_1.openSync)(filePath, 'r');
59
+ let bytesRead = 0;
60
+ try {
61
+ bytesRead = (0, fs_1.readSync)(fd, buffer, 0, requestedBytes, offsetBytes);
62
+ }
63
+ finally {
64
+ (0, fs_1.closeSync)(fd);
65
+ }
66
+ const targetBytes = Math.min(limitBytes, bytesRead);
67
+ const safeBytes = utf8SafePrefixLength(buffer.subarray(0, targetBytes));
68
+ const consumedBytes = safeBytes > 0
69
+ ? safeBytes
70
+ : Math.min(bytesRead, utf8SequenceLength(buffer[0]));
71
+ const rawPage = buffer.subarray(0, consumedBytes).toString('utf8');
72
+ const content = (0, redaction_1.redactTraceText)(rawPage);
73
+ const nextOffset = offsetBytes + consumedBytes;
74
+ return {
75
+ content,
76
+ offsetBytes,
77
+ nextOffsetBytes: nextOffset < totalBytes ? nextOffset : undefined,
78
+ totalBytes,
79
+ redacted: content !== rawPage,
80
+ };
81
+ }
82
+ }
83
+ catch {
84
+ // Fall through to unavailable.
85
+ }
86
+ }
87
+ return {
88
+ content: 'detail unavailable',
89
+ offsetBytes: 0,
90
+ totalBytes: 0,
91
+ redacted: false,
92
+ };
93
+ }
94
+ }
95
+ exports.FileToolDetailRepository = FileToolDetailRepository;
96
+ function artifactIdToCallId(id) {
97
+ // artifact IDs look like "toolName-seq-random" — use as callId fallback.
98
+ return id;
99
+ }
100
+ function utf8SafePrefixLength(buffer) {
101
+ if (buffer.length === 0)
102
+ return 0;
103
+ let lead = buffer.length - 1;
104
+ while (lead >= 0 && (buffer[lead] & 0xc0) === 0x80)
105
+ lead -= 1;
106
+ if (lead < 0)
107
+ return 0;
108
+ const first = buffer[lead];
109
+ const expected = (first & 0x80) === 0
110
+ ? 1
111
+ : (first & 0xe0) === 0xc0
112
+ ? 2
113
+ : (first & 0xf0) === 0xe0
114
+ ? 3
115
+ : (first & 0xf8) === 0xf0
116
+ ? 4
117
+ : 1;
118
+ return buffer.length - lead < expected ? lead : buffer.length;
119
+ }
120
+ function utf8SequenceLength(first) {
121
+ if ((first & 0x80) === 0)
122
+ return 1;
123
+ if ((first & 0xe0) === 0xc0)
124
+ return 2;
125
+ if ((first & 0xf0) === 0xe0)
126
+ return 3;
127
+ if ((first & 0xf8) === 0xf0)
128
+ return 4;
129
+ return 1;
130
+ }
131
+ //# sourceMappingURL=tool-detail-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-detail-repository.js","sourceRoot":"","sources":["../../src/runtime/tool-detail-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * v0.2.23 — Tool Output Presentation Policy.
3
+ *
4
+ * Renderer-neutral pure function that creates a ToolOutputView from raw
5
+ * tool output. Terminal adapter continues to use full output; only TUI
6
+ * applies the adaptive/collapsed/full collapse policy.
7
+ */
8
+ export type ToolOutputViewMode = 'inline' | 'preview' | 'collapsed';
9
+ export type ToolOutputContentKind = 'text' | 'json' | 'diff' | 'log' | 'table' | 'batch' | 'unknown';
10
+ export interface ToolOutputDetailRef {
11
+ callId: string;
12
+ sequence: number;
13
+ turnId?: string;
14
+ artifactId?: string;
15
+ traceSessionId?: string;
16
+ outputBytes: number;
17
+ outputLines: number;
18
+ }
19
+ export interface ToolOutputStepSummary {
20
+ index: number;
21
+ toolName: string;
22
+ state: 'success' | 'error' | 'skipped';
23
+ target?: string;
24
+ summary: string;
25
+ outputBytes: number;
26
+ detailRef?: ToolOutputDetailRef;
27
+ }
28
+ export interface ToolAggregateView {
29
+ version: 1;
30
+ kind: 'batch_read' | 'subtask_batch' | 'generic_batch';
31
+ total: number;
32
+ succeeded: number;
33
+ failed: number;
34
+ skipped: number;
35
+ steps: ToolOutputStepSummary[];
36
+ }
37
+ export interface ToolOutputView {
38
+ mode: ToolOutputViewMode;
39
+ contentKind: ToolOutputContentKind;
40
+ summary: string;
41
+ preview: string;
42
+ previewBytes: number;
43
+ omittedBytes: number;
44
+ omittedLines: number;
45
+ detailRef?: ToolOutputDetailRef;
46
+ aggregate?: ToolAggregateView;
47
+ }
48
+ export type ToolTranscriptViewMode = 'adaptive' | 'collapsed' | 'full';
49
+ export interface ResolvedToolOutputPolicy {
50
+ mode: ToolTranscriptViewMode;
51
+ inlineMaxLines: number;
52
+ inlineMaxBytes: number;
53
+ previewMaxLines: number;
54
+ previewMaxBytes: number;
55
+ errorPreviewMaxLines: number;
56
+ errorPreviewMaxBytes: number;
57
+ }
58
+ export declare const DEFAULT_TOOL_OUTPUT_POLICY: ResolvedToolOutputPolicy;
59
+ export interface CreateToolOutputViewInput {
60
+ toolName: string;
61
+ success: boolean;
62
+ summary?: string;
63
+ rawOutput: string;
64
+ outputBytes: number;
65
+ artifactRef?: {
66
+ id: string;
67
+ outputBytes: number;
68
+ };
69
+ callId: string;
70
+ sequence: number;
71
+ turnId?: string;
72
+ policy: ResolvedToolOutputPolicy;
73
+ }
74
+ export declare function createToolOutputView(input: CreateToolOutputViewInput): ToolOutputView;
75
+ export interface AggregateBatchReadResult {
76
+ steps: Array<{
77
+ tool: string;
78
+ target: string;
79
+ success: boolean;
80
+ summary: string;
81
+ outputBytes: number;
82
+ }>;
83
+ }
84
+ /**
85
+ * Try to parse a known aggregate tool result into a structured view.
86
+ * Returns null if the output doesn't match any known schema.
87
+ */
88
+ export declare function tryParseAggregateOutput(toolName: string, rawOutput: string, detailRef?: ToolOutputDetailRef): ToolAggregateView | null;
89
+ //# sourceMappingURL=tool-output-presentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-output-presentation.d.ts","sourceRoot":"","sources":["../../src/runtime/tool-output-presentation.ts"],"names":[],"mappings":"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"}