@nervekit/agent 0.1.0

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 (263) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +5 -0
  3. package/dist/agent-loop.d.ts +2 -0
  4. package/dist/agent-loop.d.ts.map +1 -0
  5. package/dist/agent-loop.js +2 -0
  6. package/dist/agent-loop.js.map +1 -0
  7. package/dist/agent.d.ts +125 -0
  8. package/dist/agent.d.ts.map +1 -0
  9. package/dist/agent.js +427 -0
  10. package/dist/agent.js.map +1 -0
  11. package/dist/harness/agent-harness.d.ts +114 -0
  12. package/dist/harness/agent-harness.d.ts.map +1 -0
  13. package/dist/harness/agent-harness.js +474 -0
  14. package/dist/harness/agent-harness.js.map +1 -0
  15. package/dist/harness/compaction/branch-summarization.d.ts +54 -0
  16. package/dist/harness/compaction/branch-summarization.d.ts.map +1 -0
  17. package/dist/harness/compaction/branch-summarization.js +183 -0
  18. package/dist/harness/compaction/branch-summarization.js.map +1 -0
  19. package/dist/harness/compaction/compaction.d.ts +19 -0
  20. package/dist/harness/compaction/compaction.d.ts.map +1 -0
  21. package/dist/harness/compaction/compaction.js +335 -0
  22. package/dist/harness/compaction/compaction.js.map +1 -0
  23. package/dist/harness/compaction/cut-points.d.ts +7 -0
  24. package/dist/harness/compaction/cut-points.d.ts.map +1 -0
  25. package/dist/harness/compaction/cut-points.js +106 -0
  26. package/dist/harness/compaction/cut-points.js.map +1 -0
  27. package/dist/harness/compaction/overflow.d.ts +3 -0
  28. package/dist/harness/compaction/overflow.d.ts.map +1 -0
  29. package/dist/harness/compaction/overflow.js +54 -0
  30. package/dist/harness/compaction/overflow.js.map +1 -0
  31. package/dist/harness/compaction/policy.d.ts +8 -0
  32. package/dist/harness/compaction/policy.d.ts.map +1 -0
  33. package/dist/harness/compaction/policy.js +57 -0
  34. package/dist/harness/compaction/policy.js.map +1 -0
  35. package/dist/harness/compaction/types.d.ts +79 -0
  36. package/dist/harness/compaction/types.d.ts.map +1 -0
  37. package/dist/harness/compaction/types.js +2 -0
  38. package/dist/harness/compaction/types.js.map +1 -0
  39. package/dist/harness/compaction/usage.d.ts +30 -0
  40. package/dist/harness/compaction/usage.d.ts.map +1 -0
  41. package/dist/harness/compaction/usage.js +177 -0
  42. package/dist/harness/compaction/usage.js.map +1 -0
  43. package/dist/harness/compaction/utils.d.ts +25 -0
  44. package/dist/harness/compaction/utils.d.ts.map +1 -0
  45. package/dist/harness/compaction/utils.js +131 -0
  46. package/dist/harness/compaction/utils.js.map +1 -0
  47. package/dist/harness/configuration.d.ts +34 -0
  48. package/dist/harness/configuration.d.ts.map +1 -0
  49. package/dist/harness/configuration.js +75 -0
  50. package/dist/harness/configuration.js.map +1 -0
  51. package/dist/harness/conversation/context.d.ts +24 -0
  52. package/dist/harness/conversation/context.d.ts.map +1 -0
  53. package/dist/harness/conversation/context.js +76 -0
  54. package/dist/harness/conversation/context.js.map +1 -0
  55. package/dist/harness/conversation/conversation.d.ts +36 -0
  56. package/dist/harness/conversation/conversation.d.ts.map +1 -0
  57. package/dist/harness/conversation/conversation.js +163 -0
  58. package/dist/harness/conversation/conversation.js.map +1 -0
  59. package/dist/harness/conversation/entries.d.ts +117 -0
  60. package/dist/harness/conversation/entries.d.ts.map +1 -0
  61. package/dist/harness/conversation/entries.js +2 -0
  62. package/dist/harness/conversation/entries.js.map +1 -0
  63. package/dist/harness/conversation/jsonl-repo.d.ts +27 -0
  64. package/dist/harness/conversation/jsonl-repo.d.ts.map +1 -0
  65. package/dist/harness/conversation/jsonl-repo.js +110 -0
  66. package/dist/harness/conversation/jsonl-repo.js.map +1 -0
  67. package/dist/harness/conversation/jsonl-storage.d.ts +34 -0
  68. package/dist/harness/conversation/jsonl-storage.d.ts.map +1 -0
  69. package/dist/harness/conversation/jsonl-storage.js +213 -0
  70. package/dist/harness/conversation/jsonl-storage.js.map +1 -0
  71. package/dist/harness/conversation/memory-repo.d.ts +18 -0
  72. package/dist/harness/conversation/memory-repo.d.ts.map +1 -0
  73. package/dist/harness/conversation/memory-repo.js +45 -0
  74. package/dist/harness/conversation/memory-repo.js.map +1 -0
  75. package/dist/harness/conversation/memory-storage.d.ts +25 -0
  76. package/dist/harness/conversation/memory-storage.d.ts.map +1 -0
  77. package/dist/harness/conversation/memory-storage.js +88 -0
  78. package/dist/harness/conversation/memory-storage.js.map +1 -0
  79. package/dist/harness/conversation/repo-utils.d.ts +13 -0
  80. package/dist/harness/conversation/repo-utils.d.ts.map +1 -0
  81. package/dist/harness/conversation/repo-utils.js +39 -0
  82. package/dist/harness/conversation/repo-utils.js.map +1 -0
  83. package/dist/harness/conversation/storage-utils.d.ts +11 -0
  84. package/dist/harness/conversation/storage-utils.d.ts.map +1 -0
  85. package/dist/harness/conversation/storage-utils.js +32 -0
  86. package/dist/harness/conversation/storage-utils.js.map +1 -0
  87. package/dist/harness/conversation/text-extraction.d.ts +8 -0
  88. package/dist/harness/conversation/text-extraction.d.ts.map +1 -0
  89. package/dist/harness/conversation/text-extraction.js +24 -0
  90. package/dist/harness/conversation/text-extraction.js.map +1 -0
  91. package/dist/harness/conversation/uuid.d.ts +2 -0
  92. package/dist/harness/conversation/uuid.d.ts.map +1 -0
  93. package/dist/harness/conversation/uuid.js +54 -0
  94. package/dist/harness/conversation/uuid.js.map +1 -0
  95. package/dist/harness/conversation-writes.d.ts +9 -0
  96. package/dist/harness/conversation-writes.d.ts.map +1 -0
  97. package/dist/harness/conversation-writes.js +54 -0
  98. package/dist/harness/conversation-writes.js.map +1 -0
  99. package/dist/harness/env/nodejs.d.ts +53 -0
  100. package/dist/harness/env/nodejs.d.ts.map +1 -0
  101. package/dist/harness/env/nodejs.js +497 -0
  102. package/dist/harness/env/nodejs.js.map +1 -0
  103. package/dist/harness/env/types.d.ts +106 -0
  104. package/dist/harness/env/types.d.ts.map +1 -0
  105. package/dist/harness/env/types.js +2 -0
  106. package/dist/harness/env/types.js.map +1 -0
  107. package/dist/harness/errors.d.ts +48 -0
  108. package/dist/harness/errors.d.ts.map +1 -0
  109. package/dist/harness/errors.js +63 -0
  110. package/dist/harness/errors.js.map +1 -0
  111. package/dist/harness/events.d.ts +238 -0
  112. package/dist/harness/events.d.ts.map +1 -0
  113. package/dist/harness/events.js +2 -0
  114. package/dist/harness/events.js.map +1 -0
  115. package/dist/harness/harness-configuration-methods.d.ts +36 -0
  116. package/dist/harness/harness-configuration-methods.d.ts.map +1 -0
  117. package/dist/harness/harness-configuration-methods.js +145 -0
  118. package/dist/harness/harness-configuration-methods.js.map +1 -0
  119. package/dist/harness/harness-continuation.d.ts +18 -0
  120. package/dist/harness/harness-continuation.d.ts.map +1 -0
  121. package/dist/harness/harness-continuation.js +56 -0
  122. package/dist/harness/harness-continuation.js.map +1 -0
  123. package/dist/harness/harness-events.d.ts +23 -0
  124. package/dist/harness/harness-events.d.ts.map +1 -0
  125. package/dist/harness/harness-events.js +129 -0
  126. package/dist/harness/harness-events.js.map +1 -0
  127. package/dist/harness/harness-invocations.d.ts +20 -0
  128. package/dist/harness/harness-invocations.d.ts.map +1 -0
  129. package/dist/harness/harness-invocations.js +22 -0
  130. package/dist/harness/harness-invocations.js.map +1 -0
  131. package/dist/harness/harness-maintenance.d.ts +30 -0
  132. package/dist/harness/harness-maintenance.d.ts.map +1 -0
  133. package/dist/harness/harness-maintenance.js +155 -0
  134. package/dist/harness/harness-maintenance.js.map +1 -0
  135. package/dist/harness/harness-queue-methods.d.ts +45 -0
  136. package/dist/harness/harness-queue-methods.d.ts.map +1 -0
  137. package/dist/harness/harness-queue-methods.js +51 -0
  138. package/dist/harness/harness-queue-methods.js.map +1 -0
  139. package/dist/harness/messages.d.ts +76 -0
  140. package/dist/harness/messages.d.ts.map +1 -0
  141. package/dist/harness/messages.js +147 -0
  142. package/dist/harness/messages.js.map +1 -0
  143. package/dist/harness/options.d.ts +95 -0
  144. package/dist/harness/options.d.ts.map +1 -0
  145. package/dist/harness/options.js +2 -0
  146. package/dist/harness/options.js.map +1 -0
  147. package/dist/harness/prompt-templates.d.ts +49 -0
  148. package/dist/harness/prompt-templates.d.ts.map +1 -0
  149. package/dist/harness/prompt-templates.js +230 -0
  150. package/dist/harness/prompt-templates.js.map +1 -0
  151. package/dist/harness/result.d.ts +19 -0
  152. package/dist/harness/result.d.ts.map +1 -0
  153. package/dist/harness/result.js +32 -0
  154. package/dist/harness/result.js.map +1 -0
  155. package/dist/harness/run/messages.d.ts +5 -0
  156. package/dist/harness/run/messages.d.ts.map +1 -0
  157. package/dist/harness/run/messages.js +37 -0
  158. package/dist/harness/run/messages.js.map +1 -0
  159. package/dist/harness/skills/format.d.ts +6 -0
  160. package/dist/harness/skills/format.d.ts.map +1 -0
  161. package/dist/harness/skills/format.js +38 -0
  162. package/dist/harness/skills/format.js.map +1 -0
  163. package/dist/harness/skills/index.d.ts +5 -0
  164. package/dist/harness/skills/index.d.ts.map +1 -0
  165. package/dist/harness/skills/index.js +5 -0
  166. package/dist/harness/skills/index.js.map +1 -0
  167. package/dist/harness/skills/loader.d.ts +43 -0
  168. package/dist/harness/skills/loader.d.ts.map +1 -0
  169. package/dist/harness/skills/loader.js +279 -0
  170. package/dist/harness/skills/loader.js.map +1 -0
  171. package/dist/harness/skills/parser.d.ts +12 -0
  172. package/dist/harness/skills/parser.d.ts.map +1 -0
  173. package/dist/harness/skills/parser.js +22 -0
  174. package/dist/harness/skills/parser.js.map +1 -0
  175. package/dist/harness/skills/validation.d.ts +3 -0
  176. package/dist/harness/skills/validation.d.ts.map +1 -0
  177. package/dist/harness/skills/validation.js +28 -0
  178. package/dist/harness/skills/validation.js.map +1 -0
  179. package/dist/harness/skills.d.ts +2 -0
  180. package/dist/harness/skills.d.ts.map +1 -0
  181. package/dist/harness/skills.js +2 -0
  182. package/dist/harness/skills.js.map +1 -0
  183. package/dist/harness/stream-options.d.ts +5 -0
  184. package/dist/harness/stream-options.d.ts.map +1 -0
  185. package/dist/harness/stream-options.js +67 -0
  186. package/dist/harness/stream-options.js.map +1 -0
  187. package/dist/harness/system-prompt.d.ts +2 -0
  188. package/dist/harness/system-prompt.d.ts.map +1 -0
  189. package/dist/harness/system-prompt.js +2 -0
  190. package/dist/harness/system-prompt.js.map +1 -0
  191. package/dist/harness/turn-state.d.ts +27 -0
  192. package/dist/harness/turn-state.d.ts.map +1 -0
  193. package/dist/harness/turn-state.js +35 -0
  194. package/dist/harness/turn-state.js.map +1 -0
  195. package/dist/harness/types.d.ts +9 -0
  196. package/dist/harness/types.d.ts.map +1 -0
  197. package/dist/harness/types.js +8 -0
  198. package/dist/harness/types.js.map +1 -0
  199. package/dist/harness/utils/env-path.d.ts +14 -0
  200. package/dist/harness/utils/env-path.d.ts.map +1 -0
  201. package/dist/harness/utils/env-path.js +99 -0
  202. package/dist/harness/utils/env-path.js.map +1 -0
  203. package/dist/harness/utils/shell-output.d.ts +16 -0
  204. package/dist/harness/utils/shell-output.d.ts.map +1 -0
  205. package/dist/harness/utils/shell-output.js +137 -0
  206. package/dist/harness/utils/shell-output.js.map +1 -0
  207. package/dist/harness/utils/truncate.d.ts +70 -0
  208. package/dist/harness/utils/truncate.d.ts.map +1 -0
  209. package/dist/harness/utils/truncate.js +289 -0
  210. package/dist/harness/utils/truncate.js.map +1 -0
  211. package/dist/index.d.ts +24 -0
  212. package/dist/index.d.ts.map +1 -0
  213. package/dist/index.js +25 -0
  214. package/dist/index.js.map +1 -0
  215. package/dist/node.d.ts +3 -0
  216. package/dist/node.d.ts.map +1 -0
  217. package/dist/node.js +3 -0
  218. package/dist/node.js.map +1 -0
  219. package/dist/proxy.d.ts +67 -0
  220. package/dist/proxy.d.ts.map +1 -0
  221. package/dist/proxy.js +299 -0
  222. package/dist/proxy.js.map +1 -0
  223. package/dist/runtime/loop/agent-loop.d.ts +24 -0
  224. package/dist/runtime/loop/agent-loop.d.ts.map +1 -0
  225. package/dist/runtime/loop/agent-loop.js +72 -0
  226. package/dist/runtime/loop/agent-loop.js.map +1 -0
  227. package/dist/runtime/loop/events.d.ts +5 -0
  228. package/dist/runtime/loop/events.d.ts.map +1 -0
  229. package/dist/runtime/loop/events.js +5 -0
  230. package/dist/runtime/loop/events.js.map +1 -0
  231. package/dist/runtime/loop/index.d.ts +6 -0
  232. package/dist/runtime/loop/index.d.ts.map +1 -0
  233. package/dist/runtime/loop/index.js +6 -0
  234. package/dist/runtime/loop/index.js.map +1 -0
  235. package/dist/runtime/loop/stream-assistant.d.ts +9 -0
  236. package/dist/runtime/loop/stream-assistant.d.ts.map +1 -0
  237. package/dist/runtime/loop/stream-assistant.js +87 -0
  238. package/dist/runtime/loop/stream-assistant.js.map +1 -0
  239. package/dist/runtime/loop/tool-execution.d.ts +15 -0
  240. package/dist/runtime/loop/tool-execution.d.ts.map +1 -0
  241. package/dist/runtime/loop/tool-execution.js +271 -0
  242. package/dist/runtime/loop/tool-execution.js.map +1 -0
  243. package/dist/runtime/loop/turn-loop.d.ts +7 -0
  244. package/dist/runtime/loop/turn-loop.d.ts.map +1 -0
  245. package/dist/runtime/loop/turn-loop.js +84 -0
  246. package/dist/runtime/loop/turn-loop.js.map +1 -0
  247. package/dist/runtime.d.ts +63 -0
  248. package/dist/runtime.d.ts.map +1 -0
  249. package/dist/runtime.js +170 -0
  250. package/dist/runtime.js.map +1 -0
  251. package/dist/suspension.d.ts +18 -0
  252. package/dist/suspension.d.ts.map +1 -0
  253. package/dist/suspension.js +19 -0
  254. package/dist/suspension.js.map +1 -0
  255. package/dist/types.d.ts +395 -0
  256. package/dist/types.d.ts.map +1 -0
  257. package/dist/types.js +2 -0
  258. package/dist/types.js.map +1 -0
  259. package/dist/worker.d.ts +2 -0
  260. package/dist/worker.d.ts.map +1 -0
  261. package/dist/worker.js +88 -0
  262. package/dist/worker.js.map +1 -0
  263. package/package.json +54 -0
@@ -0,0 +1,76 @@
1
+ import type { ImageContent, Message, TextContent } from "@earendil-works/pi-ai";
2
+ import type { TaskReadiness, TaskStatus } from "@nervekit/shared";
3
+ import type { AgentMessage } from "../types.js";
4
+ export declare const COMPACTION_SUMMARY_PREFIX = "The conversation history before this point was compacted into the following summary:\n\n<summary>\n";
5
+ export declare const COMPACTION_SUMMARY_SUFFIX = "\n</summary>";
6
+ export declare const BRANCH_SUMMARY_PREFIX = "The following is a summary of a branch that this conversation came back from:\n\n<summary>\n";
7
+ export declare const BRANCH_SUMMARY_SUFFIX = "</summary>";
8
+ export interface BashExecutionMessage {
9
+ role: "bashExecution";
10
+ command: string;
11
+ output: string;
12
+ exitCode: number | undefined;
13
+ cancelled: boolean;
14
+ truncated: boolean;
15
+ fullOutputPath?: string;
16
+ timestamp: number;
17
+ excludeFromContext?: boolean;
18
+ }
19
+ export interface CustomMessage<T = unknown> {
20
+ role: "custom";
21
+ customType: string;
22
+ content: string | (TextContent | ImageContent)[];
23
+ display: boolean;
24
+ details?: T;
25
+ timestamp: number;
26
+ }
27
+ export type HarnessTaskEvent = "ready" | "ready_timeout" | "completed" | "failed" | "timed_out" | "cancelled" | "orphaned";
28
+ export interface HarnessTaskEventDetails {
29
+ taskId: string;
30
+ taskName?: string;
31
+ groupId?: string;
32
+ groupName?: string;
33
+ event: HarnessTaskEvent;
34
+ status: TaskStatus;
35
+ readiness?: TaskReadiness;
36
+ exitCode?: number | null;
37
+ signal?: string | null;
38
+ nextCursor?: number;
39
+ commandPreview?: string;
40
+ notificationEntryId?: string;
41
+ }
42
+ export interface HarnessMessage<T = unknown> {
43
+ role: "harness";
44
+ eventType: string;
45
+ content: string;
46
+ details?: T;
47
+ timestamp: number;
48
+ }
49
+ export interface BranchSummaryMessage {
50
+ role: "branchSummary";
51
+ summary: string;
52
+ fromId: string;
53
+ timestamp: number;
54
+ }
55
+ export interface CompactionSummaryMessage {
56
+ role: "compactionSummary";
57
+ summary: string;
58
+ tokensBefore: number;
59
+ timestamp: number;
60
+ }
61
+ declare module "../types.js" {
62
+ interface CustomAgentMessages {
63
+ bashExecution: BashExecutionMessage;
64
+ custom: CustomMessage;
65
+ harness: HarnessMessage;
66
+ branchSummary: BranchSummaryMessage;
67
+ compactionSummary: CompactionSummaryMessage;
68
+ }
69
+ }
70
+ export declare function bashExecutionToText(msg: BashExecutionMessage): string;
71
+ export declare function createBranchSummaryMessage(summary: string, fromId: string, timestamp: string): BranchSummaryMessage;
72
+ export declare function createCompactionSummaryMessage(summary: string, tokensBefore: number, timestamp: string): CompactionSummaryMessage;
73
+ export declare function createCustomMessage(customType: string, content: string | (TextContent | ImageContent)[], display: boolean, details: unknown | undefined, timestamp: string): CustomMessage;
74
+ export declare function createHarnessMessage<T = unknown>(eventType: string, content: string, details: T | undefined, timestamp: string): HarnessMessage<T>;
75
+ export declare function convertToLlm(messages: AgentMessage[]): Message[];
76
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/harness/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ export const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:
2
+
3
+ <summary>
4
+ `;
5
+ export const COMPACTION_SUMMARY_SUFFIX = `
6
+ </summary>`;
7
+ export const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:
8
+
9
+ <summary>
10
+ `;
11
+ export const BRANCH_SUMMARY_SUFFIX = `</summary>`;
12
+ export function bashExecutionToText(msg) {
13
+ let text = `Ran \`${msg.command}\`\n`;
14
+ if (msg.output) {
15
+ text += `\`\`\`\n${msg.output}\n\`\`\``;
16
+ }
17
+ else {
18
+ text += "(no output)";
19
+ }
20
+ if (msg.cancelled) {
21
+ text += "\n\n(command cancelled)";
22
+ }
23
+ else if (msg.exitCode !== null &&
24
+ msg.exitCode !== undefined &&
25
+ msg.exitCode !== 0) {
26
+ text += `\n\nCommand exited with code ${msg.exitCode}`;
27
+ }
28
+ if (msg.truncated && msg.fullOutputPath) {
29
+ text += `\n\n[Output truncated. Full output: ${msg.fullOutputPath}]`;
30
+ }
31
+ return text;
32
+ }
33
+ export function createBranchSummaryMessage(summary, fromId, timestamp) {
34
+ return {
35
+ role: "branchSummary",
36
+ summary,
37
+ fromId,
38
+ timestamp: new Date(timestamp).getTime(),
39
+ };
40
+ }
41
+ export function createCompactionSummaryMessage(summary, tokensBefore, timestamp) {
42
+ return {
43
+ role: "compactionSummary",
44
+ summary,
45
+ tokensBefore,
46
+ timestamp: new Date(timestamp).getTime(),
47
+ };
48
+ }
49
+ export function createCustomMessage(customType, content, display, details, timestamp) {
50
+ return {
51
+ role: "custom",
52
+ customType,
53
+ content,
54
+ display,
55
+ details,
56
+ timestamp: new Date(timestamp).getTime(),
57
+ };
58
+ }
59
+ export function createHarnessMessage(eventType, content, details, timestamp) {
60
+ return {
61
+ role: "harness",
62
+ eventType,
63
+ content,
64
+ details,
65
+ timestamp: new Date(timestamp).getTime(),
66
+ };
67
+ }
68
+ function harnessMessageToText(message) {
69
+ if (message.eventType === "task_event") {
70
+ return [
71
+ "<background_task_update>",
72
+ "This is an asynchronous harness event, not a user request.",
73
+ message.content,
74
+ "</background_task_update>",
75
+ ].join("\n");
76
+ }
77
+ return [
78
+ "<harness_event>",
79
+ "This is an asynchronous harness event, not a user request.",
80
+ message.content,
81
+ "</harness_event>",
82
+ ].join("\n");
83
+ }
84
+ export function convertToLlm(messages) {
85
+ return messages
86
+ .map((m) => {
87
+ switch (m.role) {
88
+ case "bashExecution":
89
+ if (m.excludeFromContext) {
90
+ return undefined;
91
+ }
92
+ return {
93
+ role: "user",
94
+ content: [{ type: "text", text: bashExecutionToText(m) }],
95
+ timestamp: m.timestamp,
96
+ };
97
+ case "custom": {
98
+ const content = typeof m.content === "string"
99
+ ? [{ type: "text", text: m.content }]
100
+ : m.content;
101
+ return {
102
+ role: "user",
103
+ content,
104
+ timestamp: m.timestamp,
105
+ };
106
+ }
107
+ case "harness":
108
+ return {
109
+ role: "user",
110
+ content: [{ type: "text", text: harnessMessageToText(m) }],
111
+ timestamp: m.timestamp,
112
+ };
113
+ case "branchSummary":
114
+ return {
115
+ role: "user",
116
+ content: [
117
+ {
118
+ type: "text",
119
+ text: BRANCH_SUMMARY_PREFIX + m.summary + BRANCH_SUMMARY_SUFFIX,
120
+ },
121
+ ],
122
+ timestamp: m.timestamp,
123
+ };
124
+ case "compactionSummary":
125
+ return {
126
+ role: "user",
127
+ content: [
128
+ {
129
+ type: "text",
130
+ text: COMPACTION_SUMMARY_PREFIX +
131
+ m.summary +
132
+ COMPACTION_SUMMARY_SUFFIX,
133
+ },
134
+ ],
135
+ timestamp: m.timestamp,
136
+ };
137
+ case "user":
138
+ case "assistant":
139
+ case "toolResult":
140
+ return m;
141
+ default:
142
+ return undefined;
143
+ }
144
+ })
145
+ .filter((m) => m !== undefined);
146
+ }
147
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/harness/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import type { ImageContent, SimpleStreamOptions, Transport } from "@earendil-works/pi-ai";
2
+ import type { AgentTool, AnyModel, QueueMode, ThinkingLevel } from "../types.js";
3
+ import type { Conversation } from "./conversation/conversation.js";
4
+ import type { ExecutionEnv } from "./env/types.js";
5
+ /**
6
+ * Skill loaded from a `SKILL.md` file or provided by an application.
7
+ *
8
+ * `name`, `description`, and `filePath` are inserted into the system prompt in an XML-formatted block as suggested by agentskills.io.
9
+ * Use {@link formatSkillsForSystemPrompt} to generate the spec-compatible system prompt block.
10
+ */
11
+ export interface Skill {
12
+ /** Stable skill name used for lookup and model-visible listings. */
13
+ name: string;
14
+ /** Short model-visible description of when to use the skill. */
15
+ description: string;
16
+ /** Full skill instructions. */
17
+ content: string;
18
+ /** Absolute path to the skill file. Used for model-visible location and resolving relative references. */
19
+ filePath: string;
20
+ /** Exclude this skill from model-visible skill lists while still allowing explicit application invocation. */
21
+ disableModelInvocation?: boolean;
22
+ }
23
+ /** Prompt template that can be formatted into a prompt for explicit invocation. */
24
+ export interface PromptTemplate {
25
+ /** Stable template name used for lookup or application command routing. */
26
+ name: string;
27
+ /** Optional description for command lists or autocomplete. */
28
+ description?: string;
29
+ /** Template content. Argument placeholders are formatted by `formatPromptTemplateInvocation`. */
30
+ content: string;
31
+ }
32
+ /** Resources made available to explicit invocation methods and system-prompt callbacks. */
33
+ export interface AgentHarnessResources<TSkill extends Skill = Skill, TPromptTemplate extends PromptTemplate = PromptTemplate> {
34
+ /** Prompt templates available for explicit invocation. */
35
+ promptTemplates?: TPromptTemplate[];
36
+ /** Skills available to the model and explicit skill invocation. */
37
+ skills?: TSkill[];
38
+ }
39
+ /** Curated provider request options owned by the harness and snapshotted per turn. */
40
+ export interface AgentHarnessStreamOptions {
41
+ /** Preferred transport forwarded to the stream function. */
42
+ transport?: Transport;
43
+ /** Provider request timeout in milliseconds. */
44
+ timeoutMs?: number;
45
+ /** Maximum provider retry attempts. */
46
+ maxRetries?: number;
47
+ /** Optional cap for provider-requested retry delays. */
48
+ maxRetryDelayMs?: number;
49
+ /** Additional request headers merged with auth and lifecycle headers. */
50
+ headers?: Record<string, string>;
51
+ /** Provider metadata forwarded with requests. */
52
+ metadata?: SimpleStreamOptions["metadata"];
53
+ /** Provider cache retention hint. */
54
+ cacheRetention?: SimpleStreamOptions["cacheRetention"];
55
+ }
56
+ /** Per-request stream option patch returned by provider hooks. */
57
+ export interface AgentHarnessStreamOptionsPatch extends Omit<Partial<AgentHarnessStreamOptions>, "headers" | "metadata"> {
58
+ /** Header patch. `undefined` values delete keys; explicit `headers: undefined` clears all headers. */
59
+ headers?: Record<string, string | undefined>;
60
+ /** Metadata patch. `undefined` values delete keys; explicit `metadata: undefined` clears all metadata. */
61
+ metadata?: Record<string, unknown | undefined>;
62
+ }
63
+ export interface AgentHarnessPromptOptions {
64
+ images?: ImageContent[];
65
+ }
66
+ export interface AgentHarnessOptions<TSkill extends Skill = Skill, TPromptTemplate extends PromptTemplate = PromptTemplate, TTool extends AgentTool = AgentTool> {
67
+ env: ExecutionEnv;
68
+ conversation: Conversation;
69
+ tools?: TTool[];
70
+ /**
71
+ * Concrete resources available to explicit invocation methods and system-prompt callbacks.
72
+ * Applications own loading/reloading resources and should call `setResources()` with new values.
73
+ */
74
+ resources?: AgentHarnessResources<TSkill, TPromptTemplate>;
75
+ systemPrompt?: string | ((context: {
76
+ env: ExecutionEnv;
77
+ conversation: Conversation;
78
+ model: AnyModel;
79
+ thinkingLevel: ThinkingLevel;
80
+ activeTools: TTool[];
81
+ resources: AgentHarnessResources<TSkill, TPromptTemplate>;
82
+ }) => string | Promise<string>);
83
+ getApiKeyAndHeaders?: (model: AnyModel) => Promise<{
84
+ apiKey: string;
85
+ headers?: Record<string, string>;
86
+ } | undefined>;
87
+ /** Curated stream/provider request options. Snapshotted at turn start. */
88
+ streamOptions?: AgentHarnessStreamOptions;
89
+ model: AnyModel;
90
+ thinkingLevel?: ThinkingLevel;
91
+ activeToolNames?: string[];
92
+ steeringMode?: QueueMode;
93
+ followUpMode?: QueueMode;
94
+ }
95
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/harness/options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/harness/options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import type { ExecutionEnv } from "./env/types.js";
2
+ import type { PromptTemplate } from "./options.js";
3
+ export type PromptTemplateDiagnosticCode = "file_info_failed" | "list_failed" | "read_failed" | "parse_failed";
4
+ /** Warning produced while loading prompt templates. */
5
+ export interface PromptTemplateDiagnostic {
6
+ /** Diagnostic severity. Currently only warnings are emitted. */
7
+ type: "warning";
8
+ /** Stable diagnostic code. */
9
+ code: PromptTemplateDiagnosticCode;
10
+ /** Human-readable diagnostic message. */
11
+ message: string;
12
+ /** Path associated with the diagnostic. */
13
+ path: string;
14
+ }
15
+ /**
16
+ * Load prompt templates from one or more paths.
17
+ *
18
+ * Directory inputs load direct `.md` children non-recursively. File inputs load explicit `.md` files. Missing paths and
19
+ * non-markdown files are skipped. Read and parse failures are returned as diagnostics.
20
+ */
21
+ export declare function loadPromptTemplates(env: ExecutionEnv, paths: string | string[]): Promise<{
22
+ promptTemplates: PromptTemplate[];
23
+ diagnostics: PromptTemplateDiagnostic[];
24
+ }>;
25
+ /**
26
+ * Load prompt templates from source-tagged paths.
27
+ *
28
+ * Source values are preserved exactly and attached to every loaded prompt template and diagnostic. The agent package does
29
+ * not interpret source values; applications define their own provenance shape.
30
+ */
31
+ export declare function loadSourcedPromptTemplates<TSource, TPromptTemplate extends PromptTemplate = PromptTemplate>(env: ExecutionEnv, inputs: Array<{
32
+ path: string;
33
+ source: TSource;
34
+ }>, mapPromptTemplate?: (promptTemplate: PromptTemplate, source: TSource) => TPromptTemplate): Promise<{
35
+ promptTemplates: Array<{
36
+ promptTemplate: TPromptTemplate;
37
+ source: TSource;
38
+ }>;
39
+ diagnostics: Array<PromptTemplateDiagnostic & {
40
+ source: TSource;
41
+ }>;
42
+ }>;
43
+ /** Parse an argument string using simple shell-style single and double quotes. */
44
+ export declare function parseCommandArgs(argsString: string): string[];
45
+ /** Substitute prompt template placeholders (`$1`, `$@`, `$ARGUMENTS`, `${@:N}`, `${@:N:L}`) with command arguments. */
46
+ export declare function substituteArgs(content: string, args: string[]): string;
47
+ /** Format a prompt template invocation with positional arguments. */
48
+ export declare function formatPromptTemplateInvocation(template: PromptTemplate, args?: string[]): string;
49
+ //# sourceMappingURL=prompt-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-templates.d.ts","sourceRoot":"","sources":["../../src/harness/prompt-templates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,MAAM,MAAM,4BAA4B,GACpC,kBAAkB,GAClB,aAAa,GACb,aAAa,GACb,cAAc,CAAC;AAEnB,uDAAuD;AACvD,MAAM,WAAW,wBAAwB;IACvC,gEAAgE;IAChE,IAAI,EAAE,SAAS,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,4BAA4B,CAAC;IACnC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd;AAQD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GACvB,OAAO,CAAC;IACT,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,WAAW,EAAE,wBAAwB,EAAE,CAAC;CACzC,CAAC,CA6BD;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EACP,eAAe,SAAS,cAAc,GAAG,cAAc,EAEvD,GAAG,EAAE,YAAY,EACjB,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,EAChD,iBAAiB,CAAC,EAAE,CAClB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,OAAO,KACZ,eAAe,GACnB,OAAO,CAAC;IACT,eAAe,EAAE,KAAK,CAAC;QAAE,cAAc,EAAE,eAAe,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7E,WAAW,EAAE,KAAK,CAAC,wBAAwB,GAAG;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpE,CAAC,CAoBD;AAyID,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAsB7D;AAED,uHAAuH;AACvH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAoBtE;AAED,qEAAqE;AACrE,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,cAAc,EACxB,IAAI,GAAE,MAAM,EAAO,GAClB,MAAM,CAER"}
@@ -0,0 +1,230 @@
1
+ import { parse } from "yaml";
2
+ import { toError } from "./result.js";
3
+ import { basenameEnvPath } from "./utils/env-path.js";
4
+ /**
5
+ * Load prompt templates from one or more paths.
6
+ *
7
+ * Directory inputs load direct `.md` children non-recursively. File inputs load explicit `.md` files. Missing paths and
8
+ * non-markdown files are skipped. Read and parse failures are returned as diagnostics.
9
+ */
10
+ export async function loadPromptTemplates(env, paths) {
11
+ const promptTemplates = [];
12
+ const diagnostics = [];
13
+ for (const path of Array.isArray(paths) ? paths : [paths]) {
14
+ const infoResult = await env.fileInfo(path);
15
+ if (!infoResult.ok) {
16
+ if (infoResult.error.code !== "not_found") {
17
+ diagnostics.push({
18
+ type: "warning",
19
+ code: "file_info_failed",
20
+ message: infoResult.error.message,
21
+ path,
22
+ });
23
+ }
24
+ continue;
25
+ }
26
+ const info = infoResult.value;
27
+ const kind = await resolveKind(env, info, diagnostics);
28
+ if (kind === "directory") {
29
+ const result = await loadTemplatesFromDir(env, info.path);
30
+ promptTemplates.push(...result.promptTemplates);
31
+ diagnostics.push(...result.diagnostics);
32
+ }
33
+ else if (kind === "file" && info.name.endsWith(".md")) {
34
+ const result = await loadTemplateFromFile(env, info.path);
35
+ if (result.promptTemplate)
36
+ promptTemplates.push(result.promptTemplate);
37
+ diagnostics.push(...result.diagnostics);
38
+ }
39
+ }
40
+ return { promptTemplates, diagnostics };
41
+ }
42
+ /**
43
+ * Load prompt templates from source-tagged paths.
44
+ *
45
+ * Source values are preserved exactly and attached to every loaded prompt template and diagnostic. The agent package does
46
+ * not interpret source values; applications define their own provenance shape.
47
+ */
48
+ export async function loadSourcedPromptTemplates(env, inputs, mapPromptTemplate) {
49
+ const promptTemplates = [];
50
+ const diagnostics = [];
51
+ for (const input of inputs) {
52
+ const result = await loadPromptTemplates(env, input.path);
53
+ for (const promptTemplate of result.promptTemplates) {
54
+ promptTemplates.push({
55
+ promptTemplate: mapPromptTemplate
56
+ ? mapPromptTemplate(promptTemplate, input.source)
57
+ : promptTemplate,
58
+ source: input.source,
59
+ });
60
+ }
61
+ for (const diagnostic of result.diagnostics)
62
+ diagnostics.push({ ...diagnostic, source: input.source });
63
+ }
64
+ return { promptTemplates, diagnostics };
65
+ }
66
+ async function loadTemplatesFromDir(env, dir) {
67
+ const promptTemplates = [];
68
+ const diagnostics = [];
69
+ const entriesResult = await env.listDir(dir);
70
+ if (!entriesResult.ok) {
71
+ diagnostics.push({
72
+ type: "warning",
73
+ code: "list_failed",
74
+ message: entriesResult.error.message,
75
+ path: dir,
76
+ });
77
+ return { promptTemplates, diagnostics };
78
+ }
79
+ const entries = entriesResult.value;
80
+ for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
81
+ const kind = await resolveKind(env, entry, diagnostics);
82
+ if (kind !== "file" || !entry.name.endsWith(".md"))
83
+ continue;
84
+ const result = await loadTemplateFromFile(env, entry.path);
85
+ if (result.promptTemplate)
86
+ promptTemplates.push(result.promptTemplate);
87
+ diagnostics.push(...result.diagnostics);
88
+ }
89
+ return { promptTemplates, diagnostics };
90
+ }
91
+ async function loadTemplateFromFile(env, filePath) {
92
+ const diagnostics = [];
93
+ const rawContent = await env.readTextFile(filePath);
94
+ if (!rawContent.ok) {
95
+ diagnostics.push({
96
+ type: "warning",
97
+ code: "read_failed",
98
+ message: rawContent.error.message,
99
+ path: filePath,
100
+ });
101
+ return { promptTemplate: null, diagnostics };
102
+ }
103
+ const parsed = parseFrontmatter(rawContent.value);
104
+ if (!parsed.ok) {
105
+ diagnostics.push({
106
+ type: "warning",
107
+ code: "parse_failed",
108
+ message: parsed.error.message,
109
+ path: filePath,
110
+ });
111
+ return { promptTemplate: null, diagnostics };
112
+ }
113
+ const { frontmatter, body } = parsed.value;
114
+ const firstLine = body.split("\n").find((line) => line.trim());
115
+ let description = typeof frontmatter.description === "string" ? frontmatter.description : "";
116
+ if (!description && firstLine) {
117
+ description = firstLine.slice(0, 60);
118
+ if (firstLine.length > 60)
119
+ description += "...";
120
+ }
121
+ return {
122
+ promptTemplate: {
123
+ name: basenameEnvPath(filePath).replace(/\.md$/i, ""),
124
+ description,
125
+ content: body,
126
+ },
127
+ diagnostics,
128
+ };
129
+ }
130
+ async function resolveKind(env, info, diagnostics) {
131
+ if (info.kind === "file" || info.kind === "directory")
132
+ return info.kind;
133
+ const canonicalPath = await env.canonicalPath(info.path);
134
+ if (!canonicalPath.ok) {
135
+ if (canonicalPath.error.code !== "not_found") {
136
+ diagnostics.push({
137
+ type: "warning",
138
+ code: "file_info_failed",
139
+ message: canonicalPath.error.message,
140
+ path: info.path,
141
+ });
142
+ }
143
+ return undefined;
144
+ }
145
+ const target = await env.fileInfo(canonicalPath.value);
146
+ if (!target.ok) {
147
+ if (target.error.code !== "not_found") {
148
+ diagnostics.push({
149
+ type: "warning",
150
+ code: "file_info_failed",
151
+ message: target.error.message,
152
+ path: info.path,
153
+ });
154
+ }
155
+ return undefined;
156
+ }
157
+ return target.value.kind === "file" || target.value.kind === "directory"
158
+ ? target.value.kind
159
+ : undefined;
160
+ }
161
+ function parseFrontmatter(content) {
162
+ try {
163
+ const normalized = content.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
164
+ if (!normalized.startsWith("---"))
165
+ return { ok: true, value: { frontmatter: {}, body: normalized } };
166
+ const endIndex = normalized.indexOf("\n---", 3);
167
+ if (endIndex === -1)
168
+ return { ok: true, value: { frontmatter: {}, body: normalized } };
169
+ const yamlString = normalized.slice(4, endIndex);
170
+ const body = normalized.slice(endIndex + 4).trim();
171
+ return {
172
+ ok: true,
173
+ value: { frontmatter: (parse(yamlString) ?? {}), body },
174
+ };
175
+ }
176
+ catch (error) {
177
+ return { ok: false, error: toError(error) };
178
+ }
179
+ }
180
+ /** Parse an argument string using simple shell-style single and double quotes. */
181
+ export function parseCommandArgs(argsString) {
182
+ const args = [];
183
+ let current = "";
184
+ let inQuote = null;
185
+ for (const char of argsString) {
186
+ if (inQuote) {
187
+ if (char === inQuote)
188
+ inQuote = null;
189
+ else
190
+ current += char;
191
+ }
192
+ else if (char === '"' || char === "'") {
193
+ inQuote = char;
194
+ }
195
+ else if (char === " " || char === "\t") {
196
+ if (current) {
197
+ args.push(current);
198
+ current = "";
199
+ }
200
+ }
201
+ else {
202
+ current += char;
203
+ }
204
+ }
205
+ if (current)
206
+ args.push(current);
207
+ return args;
208
+ }
209
+ /** Substitute prompt template placeholders (`$1`, `$@`, `$ARGUMENTS`, `${@:N}`, `${@:N:L}`) with command arguments. */
210
+ export function substituteArgs(content, args) {
211
+ let result = content;
212
+ result = result.replace(/\$(\d+)/g, (_, num) => args[parseInt(num, 10) - 1] ?? "");
213
+ result = result.replace(/\$\{@:(\d+)(?::(\d+))?\}/g, (_, startStr, lengthStr) => {
214
+ let start = parseInt(startStr, 10) - 1;
215
+ if (start < 0)
216
+ start = 0;
217
+ if (lengthStr)
218
+ return args.slice(start, start + parseInt(lengthStr, 10)).join(" ");
219
+ return args.slice(start).join(" ");
220
+ });
221
+ const allArgs = args.join(" ");
222
+ result = result.replace(/\$ARGUMENTS/g, allArgs);
223
+ result = result.replace(/\$@/g, allArgs);
224
+ return result;
225
+ }
226
+ /** Format a prompt template invocation with positional arguments. */
227
+ export function formatPromptTemplateInvocation(template, args = []) {
228
+ return substituteArgs(template.content, args);
229
+ }
230
+ //# sourceMappingURL=prompt-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-templates.js","sourceRoot":"","sources":["../../src/harness/prompt-templates.ts"],"names":[],"mappings":"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"}