@oharness/engine 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 (256) hide show
  1. package/dist/agent/agent.d.ts +196 -0
  2. package/dist/agent/agent.js +758 -0
  3. package/dist/agent/agent.js.map +1 -0
  4. package/dist/agent/compaction.d.ts +68 -0
  5. package/dist/agent/compaction.js +179 -0
  6. package/dist/agent/compaction.js.map +1 -0
  7. package/dist/agent/hooks.d.ts +77 -0
  8. package/dist/agent/hooks.js +152 -0
  9. package/dist/agent/hooks.js.map +1 -0
  10. package/dist/agent/memory.d.ts +45 -0
  11. package/dist/agent/memory.js +147 -0
  12. package/dist/agent/memory.js.map +1 -0
  13. package/dist/agent/overflow.d.ts +35 -0
  14. package/dist/agent/overflow.js +69 -0
  15. package/dist/agent/overflow.js.map +1 -0
  16. package/dist/agent/permissions.d.ts +181 -0
  17. package/dist/agent/permissions.js +289 -0
  18. package/dist/agent/permissions.js.map +1 -0
  19. package/dist/agent/prompt.d.ts +25 -0
  20. package/dist/agent/prompt.js +63 -0
  21. package/dist/agent/prompt.js.map +1 -0
  22. package/dist/agent/session.d.ts +108 -0
  23. package/dist/agent/session.js +231 -0
  24. package/dist/agent/session.js.map +1 -0
  25. package/dist/agent/settings.d.ts +37 -0
  26. package/dist/agent/settings.js +113 -0
  27. package/dist/agent/settings.js.map +1 -0
  28. package/dist/agent/skills.d.ts +58 -0
  29. package/dist/agent/skills.js +225 -0
  30. package/dist/agent/skills.js.map +1 -0
  31. package/dist/agent/store.d.ts +308 -0
  32. package/dist/agent/store.js +596 -0
  33. package/dist/agent/store.js.map +1 -0
  34. package/dist/agent/subagent.d.ts +44 -0
  35. package/dist/agent/subagent.js +138 -0
  36. package/dist/agent/subagent.js.map +1 -0
  37. package/dist/agent/titles.d.ts +8 -0
  38. package/dist/agent/titles.js +23 -0
  39. package/dist/agent/titles.js.map +1 -0
  40. package/dist/agent/workspace.d.ts +60 -0
  41. package/dist/agent/workspace.js +156 -0
  42. package/dist/agent/workspace.js.map +1 -0
  43. package/dist/artifacts/publish.d.ts +94 -0
  44. package/dist/artifacts/publish.js +104 -0
  45. package/dist/artifacts/publish.js.map +1 -0
  46. package/dist/artifacts/store.d.ts +324 -0
  47. package/dist/artifacts/store.js +500 -0
  48. package/dist/artifacts/store.js.map +1 -0
  49. package/dist/auth/index.d.ts +13 -0
  50. package/dist/auth/index.js +10 -0
  51. package/dist/auth/index.js.map +1 -0
  52. package/dist/auth/manager.d.ts +83 -0
  53. package/dist/auth/manager.js +266 -0
  54. package/dist/auth/manager.js.map +1 -0
  55. package/dist/auth/oauth.d.ts +83 -0
  56. package/dist/auth/oauth.js +327 -0
  57. package/dist/auth/oauth.js.map +1 -0
  58. package/dist/auth/providers/account.d.ts +59 -0
  59. package/dist/auth/providers/account.js +282 -0
  60. package/dist/auth/providers/account.js.map +1 -0
  61. package/dist/auth/providers/anthropic.d.ts +24 -0
  62. package/dist/auth/providers/anthropic.js +209 -0
  63. package/dist/auth/providers/anthropic.js.map +1 -0
  64. package/dist/auth/providers/generic.d.ts +57 -0
  65. package/dist/auth/providers/generic.js +155 -0
  66. package/dist/auth/providers/generic.js.map +1 -0
  67. package/dist/auth/providers/official.d.ts +3 -0
  68. package/dist/auth/providers/official.js +90 -0
  69. package/dist/auth/providers/official.js.map +1 -0
  70. package/dist/auth/providers/ottoport.d.ts +3 -0
  71. package/dist/auth/providers/ottoport.js +60 -0
  72. package/dist/auth/providers/ottoport.js.map +1 -0
  73. package/dist/auth/store.d.ts +22 -0
  74. package/dist/auth/store.js +138 -0
  75. package/dist/auth/store.js.map +1 -0
  76. package/dist/auth/types.d.ts +167 -0
  77. package/dist/auth/types.js +16 -0
  78. package/dist/auth/types.js.map +1 -0
  79. package/dist/config.d.ts +197 -0
  80. package/dist/config.js +195 -0
  81. package/dist/config.js.map +1 -0
  82. package/dist/core/errors.d.ts +46 -0
  83. package/dist/core/errors.js +83 -0
  84. package/dist/core/errors.js.map +1 -0
  85. package/dist/core/tokens.d.ts +12 -0
  86. package/dist/core/tokens.js +56 -0
  87. package/dist/core/tokens.js.map +1 -0
  88. package/dist/core/types.d.ts +91 -0
  89. package/dist/core/types.js +49 -0
  90. package/dist/core/types.js.map +1 -0
  91. package/dist/harness.d.ts +302 -0
  92. package/dist/harness.js +695 -0
  93. package/dist/harness.js.map +1 -0
  94. package/dist/index.d.ts +32 -0
  95. package/dist/index.js +21 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/mcp/client.d.ts +55 -0
  98. package/dist/mcp/client.js +199 -0
  99. package/dist/mcp/client.js.map +1 -0
  100. package/dist/mcp/index.d.ts +13 -0
  101. package/dist/mcp/index.js +8 -0
  102. package/dist/mcp/index.js.map +1 -0
  103. package/dist/mcp/manager.d.ts +77 -0
  104. package/dist/mcp/manager.js +325 -0
  105. package/dist/mcp/manager.js.map +1 -0
  106. package/dist/mcp/oauth.d.ts +63 -0
  107. package/dist/mcp/oauth.js +302 -0
  108. package/dist/mcp/oauth.js.map +1 -0
  109. package/dist/mcp/protocol.d.ts +130 -0
  110. package/dist/mcp/protocol.js +14 -0
  111. package/dist/mcp/protocol.js.map +1 -0
  112. package/dist/mcp/registry.d.ts +52 -0
  113. package/dist/mcp/registry.js +100 -0
  114. package/dist/mcp/registry.js.map +1 -0
  115. package/dist/mcp/registry.json +293 -0
  116. package/dist/mcp/secrets.d.ts +20 -0
  117. package/dist/mcp/secrets.js +75 -0
  118. package/dist/mcp/secrets.js.map +1 -0
  119. package/dist/mcp/transport.d.ts +51 -0
  120. package/dist/mcp/transport.js +158 -0
  121. package/dist/mcp/transport.js.map +1 -0
  122. package/dist/paths.d.ts +37 -0
  123. package/dist/paths.js +63 -0
  124. package/dist/paths.js.map +1 -0
  125. package/dist/plugins.d.ts +55 -0
  126. package/dist/plugins.js +201 -0
  127. package/dist/plugins.js.map +1 -0
  128. package/dist/providers/builtin.d.ts +23 -0
  129. package/dist/providers/builtin.js +141 -0
  130. package/dist/providers/builtin.js.map +1 -0
  131. package/dist/providers/catalog.d.ts +129 -0
  132. package/dist/providers/catalog.js +254 -0
  133. package/dist/providers/catalog.js.map +1 -0
  134. package/dist/providers/catalog.json +472 -0
  135. package/dist/providers/discovery.d.ts +16 -0
  136. package/dist/providers/discovery.js +161 -0
  137. package/dist/providers/discovery.js.map +1 -0
  138. package/dist/providers/http.d.ts +24 -0
  139. package/dist/providers/http.js +139 -0
  140. package/dist/providers/http.js.map +1 -0
  141. package/dist/providers/index.d.ts +10 -0
  142. package/dist/providers/index.js +8 -0
  143. package/dist/providers/index.js.map +1 -0
  144. package/dist/providers/piai.d.ts +124 -0
  145. package/dist/providers/piai.js +551 -0
  146. package/dist/providers/piai.js.map +1 -0
  147. package/dist/providers/registry.d.ts +65 -0
  148. package/dist/providers/registry.js +195 -0
  149. package/dist/providers/registry.js.map +1 -0
  150. package/dist/providers/resilient.d.ts +46 -0
  151. package/dist/providers/resilient.js +117 -0
  152. package/dist/providers/resilient.js.map +1 -0
  153. package/dist/providers/types.d.ts +182 -0
  154. package/dist/providers/types.js +50 -0
  155. package/dist/providers/types.js.map +1 -0
  156. package/dist/schedule/cron.d.ts +35 -0
  157. package/dist/schedule/cron.js +125 -0
  158. package/dist/schedule/cron.js.map +1 -0
  159. package/dist/schedule/scheduler.d.ts +87 -0
  160. package/dist/schedule/scheduler.js +237 -0
  161. package/dist/schedule/scheduler.js.map +1 -0
  162. package/dist/storage/kv.d.ts +56 -0
  163. package/dist/storage/kv.js +173 -0
  164. package/dist/storage/kv.js.map +1 -0
  165. package/dist/storage/migrate.d.ts +11 -0
  166. package/dist/storage/migrate.js +93 -0
  167. package/dist/storage/migrate.js.map +1 -0
  168. package/dist/storage/project.d.ts +9 -0
  169. package/dist/storage/project.js +57 -0
  170. package/dist/storage/project.js.map +1 -0
  171. package/dist/storage/records.d.ts +32 -0
  172. package/dist/storage/records.js +48 -0
  173. package/dist/storage/records.js.map +1 -0
  174. package/dist/sync/client.d.ts +79 -0
  175. package/dist/sync/client.js +118 -0
  176. package/dist/sync/client.js.map +1 -0
  177. package/dist/sync/mirror.d.ts +85 -0
  178. package/dist/sync/mirror.js +389 -0
  179. package/dist/sync/mirror.js.map +1 -0
  180. package/dist/sync/protocol.d.ts +67 -0
  181. package/dist/sync/protocol.js +16 -0
  182. package/dist/sync/protocol.js.map +1 -0
  183. package/dist/sync/settings.d.ts +56 -0
  184. package/dist/sync/settings.js +60 -0
  185. package/dist/sync/settings.js.map +1 -0
  186. package/dist/tools/builtin/artifact.d.ts +16 -0
  187. package/dist/tools/builtin/artifact.js +134 -0
  188. package/dist/tools/builtin/artifact.js.map +1 -0
  189. package/dist/tools/builtin/bash.d.ts +3 -0
  190. package/dist/tools/builtin/bash.js +142 -0
  191. package/dist/tools/builtin/bash.js.map +1 -0
  192. package/dist/tools/builtin/fs.d.ts +19 -0
  193. package/dist/tools/builtin/fs.js +280 -0
  194. package/dist/tools/builtin/fs.js.map +1 -0
  195. package/dist/tools/builtin/index.d.ts +22 -0
  196. package/dist/tools/builtin/index.js +42 -0
  197. package/dist/tools/builtin/index.js.map +1 -0
  198. package/dist/tools/builtin/mcp-resource.d.ts +3 -0
  199. package/dist/tools/builtin/mcp-resource.js +220 -0
  200. package/dist/tools/builtin/mcp-resource.js.map +1 -0
  201. package/dist/tools/builtin/memory.d.ts +10 -0
  202. package/dist/tools/builtin/memory.js +76 -0
  203. package/dist/tools/builtin/memory.js.map +1 -0
  204. package/dist/tools/builtin/recall.d.ts +13 -0
  205. package/dist/tools/builtin/recall.js +163 -0
  206. package/dist/tools/builtin/recall.js.map +1 -0
  207. package/dist/tools/builtin/search.d.ts +3 -0
  208. package/dist/tools/builtin/search.js +240 -0
  209. package/dist/tools/builtin/search.js.map +1 -0
  210. package/dist/tools/builtin/skill.d.ts +10 -0
  211. package/dist/tools/builtin/skill.js +46 -0
  212. package/dist/tools/builtin/skill.js.map +1 -0
  213. package/dist/tools/builtin/task.d.ts +9 -0
  214. package/dist/tools/builtin/task.js +68 -0
  215. package/dist/tools/builtin/task.js.map +1 -0
  216. package/dist/tools/builtin/todo.d.ts +20 -0
  217. package/dist/tools/builtin/todo.js +63 -0
  218. package/dist/tools/builtin/todo.js.map +1 -0
  219. package/dist/tools/define.d.ts +19 -0
  220. package/dist/tools/define.js +39 -0
  221. package/dist/tools/define.js.map +1 -0
  222. package/dist/tools/index.d.ts +7 -0
  223. package/dist/tools/index.js +5 -0
  224. package/dist/tools/index.js.map +1 -0
  225. package/dist/tools/registry.d.ts +39 -0
  226. package/dist/tools/registry.js +101 -0
  227. package/dist/tools/registry.js.map +1 -0
  228. package/dist/tools/types.d.ts +112 -0
  229. package/dist/tools/types.js +22 -0
  230. package/dist/tools/types.js.map +1 -0
  231. package/dist/util/id.d.ts +9 -0
  232. package/dist/util/id.js +19 -0
  233. package/dist/util/id.js.map +1 -0
  234. package/dist/util/json.d.ts +25 -0
  235. package/dist/util/json.js +100 -0
  236. package/dist/util/json.js.map +1 -0
  237. package/dist/util/jwt.d.ts +74 -0
  238. package/dist/util/jwt.js +177 -0
  239. package/dist/util/jwt.js.map +1 -0
  240. package/dist/util/logger.d.ts +13 -0
  241. package/dist/util/logger.js +59 -0
  242. package/dist/util/logger.js.map +1 -0
  243. package/dist/util/queue.d.ts +26 -0
  244. package/dist/util/queue.js +106 -0
  245. package/dist/util/queue.js.map +1 -0
  246. package/dist/util/schema.d.ts +17 -0
  247. package/dist/util/schema.js +98 -0
  248. package/dist/util/schema.js.map +1 -0
  249. package/dist/util/shell.d.ts +20 -0
  250. package/dist/util/shell.js +24 -0
  251. package/dist/util/shell.js.map +1 -0
  252. package/official.json +4 -0
  253. package/package.json +38 -0
  254. package/skills/artifact-authoring/SKILL.md +81 -0
  255. package/skills/canvas/SKILL.md +85 -0
  256. package/skills/skill-authoring/SKILL.md +85 -0
@@ -0,0 +1,196 @@
1
+ import type { Message, StopReason, Usage } from "../core/types.ts";
2
+ import type { McpManager } from "../mcp/manager.ts";
3
+ import type { ThinkingConfig } from "../providers/types.ts";
4
+ import type { ToolFilter, ToolRegistry } from "../tools/registry.ts";
5
+ import type { SubagentRunOptions, SubagentRunResult, ToolHost, ToolProgress, ToolResult } from "../tools/types.ts";
6
+ import type { ArtifactDescriptor } from "../artifacts/store.ts";
7
+ import type { Logger } from "../util/logger.ts";
8
+ import type { WorkspacePolicy } from "./workspace.ts";
9
+ import { SkillRegistry } from "./skills.ts";
10
+ import { MemoryStore } from "./memory.ts";
11
+ import type { CompactionOptions } from "./compaction.ts";
12
+ import { HookRegistry } from "./hooks.ts";
13
+ import type { PermissionPrompt, PermissionRequest } from "./permissions.ts";
14
+ import type { Session } from "./session.ts";
15
+ import { SubagentRegistry } from "./subagent.ts";
16
+ export type AgentEvent = {
17
+ type: "turn_start";
18
+ turn: number;
19
+ model: string;
20
+ } | {
21
+ type: "text_delta";
22
+ text: string;
23
+ } | {
24
+ type: "thinking_delta";
25
+ text: string;
26
+ } | {
27
+ type: "assistant_message";
28
+ message: Message;
29
+ } | {
30
+ type: "tool_start";
31
+ toolCallId: string;
32
+ toolName: string;
33
+ title: string;
34
+ input: unknown;
35
+ } | {
36
+ type: "tool_progress";
37
+ progress: ToolProgress;
38
+ } | {
39
+ type: "tool_end";
40
+ toolCallId: string;
41
+ toolName: string;
42
+ result: ToolResult;
43
+ durationMs: number;
44
+ }
45
+ /**
46
+ * An artifact was created or revised. Carries a descriptor, never the body:
47
+ * see artifacts/store.ts for why. A frontend that cannot render this kind is
48
+ * still expected to acknowledge it — test/artifacts.test.ts enforces that.
49
+ */
50
+ | {
51
+ type: "artifact";
52
+ artifact: ArtifactDescriptor;
53
+ } | {
54
+ type: "permission_request";
55
+ request: PermissionRequest;
56
+ } | {
57
+ type: "permission_result";
58
+ toolCallId: string;
59
+ allowed: boolean;
60
+ reason?: string;
61
+ /** Pattern written to settings, when the approval was persisted. */
62
+ remembered?: string;
63
+ } | {
64
+ type: "compacted";
65
+ tokensBefore: number;
66
+ tokensAfter: number;
67
+ droppedMessages: number;
68
+ } | {
69
+ type: "model_changed";
70
+ from: string;
71
+ to: string;
72
+ } | {
73
+ type: "notice";
74
+ message: string;
75
+ }
76
+ /**
77
+ * `status` is the HTTP status behind a provider failure, when one could be
78
+ * recovered. It travels beside the message because some statuses are not
79
+ * errors to print at all: a 402 means the account is out of credits, which
80
+ * is a screen with a button on it, and telling that apart from a bad key by
81
+ * matching text in a sentence is a thing that breaks on rewording.
82
+ */
83
+ | {
84
+ type: "error";
85
+ error: string;
86
+ fatal: boolean;
87
+ status?: number;
88
+ provider?: string;
89
+ } | {
90
+ type: "done";
91
+ stopReason: StopReason;
92
+ usage: Usage;
93
+ costUsd: number;
94
+ turns: number;
95
+ };
96
+ export interface AgentOptions {
97
+ session: Session;
98
+ tools: ToolRegistry;
99
+ hooks?: HookRegistry;
100
+ subagents?: SubagentRegistry;
101
+ mcp?: McpManager;
102
+ /** Called when a tool needs approval. Without it, `ask` becomes `deny`. */
103
+ permissionPrompt?: PermissionPrompt;
104
+ systemPrompt?: string;
105
+ appendSystemPrompt?: string;
106
+ projectInstructions?: string;
107
+ toolFilter?: ToolFilter;
108
+ thinking?: ThinkingConfig;
109
+ maxTurns?: number;
110
+ compaction?: CompactionOptions | false;
111
+ /**
112
+ * Character cap on a single tool result before it is truncated and archived.
113
+ * Defaults to `DEFAULT_TOOL_RESULT_LIMIT`; set 0 to disable.
114
+ */
115
+ toolResultLimit?: number;
116
+ /** Cheaper model for compaction summaries; defaults to the session model. */
117
+ smallModel?: string;
118
+ /** Skills available to this agent; their descriptions enter the prompt. */
119
+ skills?: SkillRegistry;
120
+ /** Durable notes carried between sessions. */
121
+ memory?: MemoryStore;
122
+ /** Called after the agent writes into a skills directory. */
123
+ onSkillsChanged?: () => Promise<unknown>;
124
+ /** Restricts where writes may land. A policy gate, not an OS sandbox. */
125
+ workspace?: WorkspacePolicy;
126
+ /** Enable provider prompt caching where the model supports it. */
127
+ cache?: boolean;
128
+ agentId?: string;
129
+ logger?: Logger;
130
+ }
131
+ /**
132
+ * The agentic loop: prompt the model, run whatever tools it asks for, feed the
133
+ * results back, repeat until it stops calling tools.
134
+ *
135
+ * Everything provider-specific lives behind `Provider`, so this loop is the
136
+ * same regardless of which model is selected — including when the model
137
+ * changes partway through a session.
138
+ */
139
+ export declare class Agent implements ToolHost {
140
+ readonly session: Session;
141
+ readonly tools: ToolRegistry;
142
+ readonly hooks: HookRegistry;
143
+ readonly subagents: SubagentRegistry;
144
+ readonly skills: SkillRegistry;
145
+ readonly memory?: MemoryStore;
146
+ readonly state: Map<string, unknown>;
147
+ private readonly opts;
148
+ private readonly logger;
149
+ private readonly agentId;
150
+ private controller;
151
+ private running;
152
+ private sessionStarted;
153
+ /** Set when a hook asks the turn to end; read by the main loop. */
154
+ private stopRequested?;
155
+ /** Memory index for this run's system prompt. */
156
+ private memoryIndex?;
157
+ constructor(opts: AgentOptions);
158
+ /**
159
+ * Announce a model switch so a UI can render it and hooks can react.
160
+ * Called by whoever changes the session's model.
161
+ */
162
+ switchModel(ref: string): AsyncGenerator<AgentEvent, void, void>;
163
+ /**
164
+ * The model used for compaction summaries. Falls back to the session model
165
+ * if `smallModel` is unset or unresolvable — a bad alias should degrade to a
166
+ * pricier summary, never break the turn.
167
+ */
168
+ private summarizerModel;
169
+ /** Run the SessionEnd hook. Call when the session is finished with. */
170
+ end(): Promise<void>;
171
+ /** Cancel the in-flight turn. The loop exits with `stopReason: "aborted"`. */
172
+ abort(): void;
173
+ get isRunning(): boolean;
174
+ /**
175
+ * Where the file tools are allowed to look. The policy lives here, so the
176
+ * tools ask rather than each re-deriving a notion of "inside the project".
177
+ */
178
+ resolvePath(input: string, access: "read" | "write"): string;
179
+ listSubagentTypes(): Array<{
180
+ name: string;
181
+ description: string;
182
+ }>;
183
+ runSubagent(opts: SubagentRunOptions): Promise<SubagentRunResult>;
184
+ run(input: string | Message[], runOpts?: {
185
+ signal?: AbortSignal;
186
+ }): AsyncGenerator<AgentEvent, void, void>;
187
+ private ingestInput;
188
+ private maybeCompact;
189
+ private systemPrompt;
190
+ private buildRequest;
191
+ /** Consume the provider stream, emitting deltas and assembling the message. */
192
+ private streamAssistant;
193
+ private executeCalls;
194
+ private executeOne;
195
+ private checkPermission;
196
+ }