heyio 3.4.0 → 4.0.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 (289) hide show
  1. package/CODE_OF_CONDUCT.md +83 -0
  2. package/LICENSE +21 -0
  3. package/README.md +203 -151
  4. package/dist/daemon/cli.js +7153 -0
  5. package/dist/daemon/index.js +6421 -0
  6. package/dist/web/assets/index-CbptHIYU.js +520 -0
  7. package/{public → dist/web}/index.html +1 -1
  8. package/package.json +45 -48
  9. package/dist/api/middleware/auth.d.ts +0 -14
  10. package/dist/api/middleware/auth.d.ts.map +0 -1
  11. package/dist/api/middleware/auth.js +0 -130
  12. package/dist/api/middleware/auth.js.map +0 -1
  13. package/dist/api/notifications.d.ts +0 -14
  14. package/dist/api/notifications.d.ts.map +0 -1
  15. package/dist/api/notifications.js +0 -114
  16. package/dist/api/notifications.js.map +0 -1
  17. package/dist/api/routes/activity.d.ts +0 -3
  18. package/dist/api/routes/activity.d.ts.map +0 -1
  19. package/dist/api/routes/activity.js +0 -28
  20. package/dist/api/routes/activity.js.map +0 -1
  21. package/dist/api/routes/attachments.d.ts +0 -3
  22. package/dist/api/routes/attachments.d.ts.map +0 -1
  23. package/dist/api/routes/attachments.js +0 -83
  24. package/dist/api/routes/attachments.js.map +0 -1
  25. package/dist/api/routes/config.d.ts +0 -3
  26. package/dist/api/routes/config.d.ts.map +0 -1
  27. package/dist/api/routes/config.js +0 -107
  28. package/dist/api/routes/config.js.map +0 -1
  29. package/dist/api/routes/conversations.d.ts +0 -3
  30. package/dist/api/routes/conversations.d.ts.map +0 -1
  31. package/dist/api/routes/conversations.js +0 -25
  32. package/dist/api/routes/conversations.js.map +0 -1
  33. package/dist/api/routes/health.d.ts +0 -3
  34. package/dist/api/routes/health.d.ts.map +0 -1
  35. package/dist/api/routes/health.js +0 -39
  36. package/dist/api/routes/health.js.map +0 -1
  37. package/dist/api/routes/inbox.d.ts +0 -3
  38. package/dist/api/routes/inbox.d.ts.map +0 -1
  39. package/dist/api/routes/inbox.js +0 -139
  40. package/dist/api/routes/inbox.js.map +0 -1
  41. package/dist/api/routes/schedules.d.ts +0 -3
  42. package/dist/api/routes/schedules.d.ts.map +0 -1
  43. package/dist/api/routes/schedules.js +0 -116
  44. package/dist/api/routes/schedules.js.map +0 -1
  45. package/dist/api/routes/skills.d.ts +0 -2
  46. package/dist/api/routes/skills.d.ts.map +0 -1
  47. package/dist/api/routes/skills.js +0 -127
  48. package/dist/api/routes/skills.js.map +0 -1
  49. package/dist/api/routes/squads.d.ts +0 -3
  50. package/dist/api/routes/squads.d.ts.map +0 -1
  51. package/dist/api/routes/squads.js +0 -578
  52. package/dist/api/routes/squads.js.map +0 -1
  53. package/dist/api/routes/usage.d.ts +0 -3
  54. package/dist/api/routes/usage.d.ts.map +0 -1
  55. package/dist/api/routes/usage.js +0 -55
  56. package/dist/api/routes/usage.js.map +0 -1
  57. package/dist/api/routes/wiki.d.ts +0 -2
  58. package/dist/api/routes/wiki.d.ts.map +0 -1
  59. package/dist/api/routes/wiki.js +0 -75
  60. package/dist/api/routes/wiki.js.map +0 -1
  61. package/dist/api/server.d.ts +0 -7
  62. package/dist/api/server.d.ts.map +0 -1
  63. package/dist/api/server.js +0 -183
  64. package/dist/api/server.js.map +0 -1
  65. package/dist/config.d.ts +0 -3
  66. package/dist/config.d.ts.map +0 -1
  67. package/dist/config.js +0 -3
  68. package/dist/config.js.map +0 -1
  69. package/dist/copilot/client.d.ts +0 -5
  70. package/dist/copilot/client.d.ts.map +0 -1
  71. package/dist/copilot/client.js +0 -38
  72. package/dist/copilot/client.js.map +0 -1
  73. package/dist/copilot/health-monitor.d.ts +0 -14
  74. package/dist/copilot/health-monitor.d.ts.map +0 -1
  75. package/dist/copilot/health-monitor.js +0 -70
  76. package/dist/copilot/health-monitor.js.map +0 -1
  77. package/dist/copilot/orchestrator.d.ts +0 -5
  78. package/dist/copilot/orchestrator.d.ts.map +0 -1
  79. package/dist/copilot/orchestrator.js +0 -227
  80. package/dist/copilot/orchestrator.js.map +0 -1
  81. package/dist/copilot/tools.d.ts +0 -80
  82. package/dist/copilot/tools.d.ts.map +0 -1
  83. package/dist/copilot/tools.js +0 -1067
  84. package/dist/copilot/tools.js.map +0 -1
  85. package/dist/index.d.ts +0 -3
  86. package/dist/index.d.ts.map +0 -1
  87. package/dist/index.js +0 -94
  88. package/dist/index.js.map +0 -1
  89. package/dist/logging/logger.d.ts +0 -6
  90. package/dist/logging/logger.d.ts.map +0 -1
  91. package/dist/logging/logger.js +0 -33
  92. package/dist/logging/logger.js.map +0 -1
  93. package/dist/models/index.d.ts +0 -6
  94. package/dist/models/index.d.ts.map +0 -1
  95. package/dist/models/index.js +0 -4
  96. package/dist/models/index.js.map +0 -1
  97. package/dist/models/pricing.d.ts +0 -25
  98. package/dist/models/pricing.d.ts.map +0 -1
  99. package/dist/models/pricing.js +0 -96
  100. package/dist/models/pricing.js.map +0 -1
  101. package/dist/models/registry.d.ts +0 -34
  102. package/dist/models/registry.d.ts.map +0 -1
  103. package/dist/models/registry.js +0 -109
  104. package/dist/models/registry.js.map +0 -1
  105. package/dist/models/token-tracker.d.ts +0 -41
  106. package/dist/models/token-tracker.d.ts.map +0 -1
  107. package/dist/models/token-tracker.js +0 -103
  108. package/dist/models/token-tracker.js.map +0 -1
  109. package/dist/scheduler/engine.d.ts +0 -12
  110. package/dist/scheduler/engine.d.ts.map +0 -1
  111. package/dist/scheduler/engine.js +0 -128
  112. package/dist/scheduler/engine.js.map +0 -1
  113. package/dist/skills/discover.d.ts +0 -22
  114. package/dist/skills/discover.d.ts.map +0 -1
  115. package/dist/skills/discover.js +0 -228
  116. package/dist/skills/discover.js.map +0 -1
  117. package/dist/skills/index.d.ts +0 -5
  118. package/dist/skills/index.d.ts.map +0 -1
  119. package/dist/skills/index.js +0 -3
  120. package/dist/skills/index.js.map +0 -1
  121. package/dist/skills/store.d.ts +0 -56
  122. package/dist/skills/store.d.ts.map +0 -1
  123. package/dist/skills/store.js +0 -154
  124. package/dist/skills/store.js.map +0 -1
  125. package/dist/squad/agent.d.ts +0 -65
  126. package/dist/squad/agent.d.ts.map +0 -1
  127. package/dist/squad/agent.js +0 -544
  128. package/dist/squad/agent.js.map +0 -1
  129. package/dist/squad/autonomy.d.ts +0 -16
  130. package/dist/squad/autonomy.d.ts.map +0 -1
  131. package/dist/squad/autonomy.js +0 -63
  132. package/dist/squad/autonomy.js.map +0 -1
  133. package/dist/squad/event-bus.d.ts +0 -22
  134. package/dist/squad/event-bus.d.ts.map +0 -1
  135. package/dist/squad/event-bus.js +0 -56
  136. package/dist/squad/event-bus.js.map +0 -1
  137. package/dist/squad/execution/index.d.ts +0 -14
  138. package/dist/squad/execution/index.d.ts.map +0 -1
  139. package/dist/squad/execution/index.js +0 -8
  140. package/dist/squad/execution/index.js.map +0 -1
  141. package/dist/squad/execution/instance.d.ts +0 -45
  142. package/dist/squad/execution/instance.d.ts.map +0 -1
  143. package/dist/squad/execution/instance.js +0 -165
  144. package/dist/squad/execution/instance.js.map +0 -1
  145. package/dist/squad/execution/planning.d.ts +0 -20
  146. package/dist/squad/execution/planning.d.ts.map +0 -1
  147. package/dist/squad/execution/planning.js +0 -62
  148. package/dist/squad/execution/planning.js.map +0 -1
  149. package/dist/squad/execution/pr.d.ts +0 -15
  150. package/dist/squad/execution/pr.d.ts.map +0 -1
  151. package/dist/squad/execution/pr.js +0 -109
  152. package/dist/squad/execution/pr.js.map +0 -1
  153. package/dist/squad/execution/review.d.ts +0 -21
  154. package/dist/squad/execution/review.d.ts.map +0 -1
  155. package/dist/squad/execution/review.js +0 -157
  156. package/dist/squad/execution/review.js.map +0 -1
  157. package/dist/squad/execution/runner.d.ts +0 -52
  158. package/dist/squad/execution/runner.d.ts.map +0 -1
  159. package/dist/squad/execution/runner.js +0 -93
  160. package/dist/squad/execution/runner.js.map +0 -1
  161. package/dist/squad/execution/tasks.d.ts +0 -22
  162. package/dist/squad/execution/tasks.d.ts.map +0 -1
  163. package/dist/squad/execution/tasks.js +0 -111
  164. package/dist/squad/execution/tasks.js.map +0 -1
  165. package/dist/squad/execution/worktree.d.ts +0 -27
  166. package/dist/squad/execution/worktree.d.ts.map +0 -1
  167. package/dist/squad/execution/worktree.js +0 -141
  168. package/dist/squad/execution/worktree.js.map +0 -1
  169. package/dist/squad/hiring.d.ts +0 -57
  170. package/dist/squad/hiring.d.ts.map +0 -1
  171. package/dist/squad/hiring.js +0 -588
  172. package/dist/squad/hiring.js.map +0 -1
  173. package/dist/squad/index.d.ts +0 -8
  174. package/dist/squad/index.d.ts.map +0 -1
  175. package/dist/squad/index.js +0 -6
  176. package/dist/squad/index.js.map +0 -1
  177. package/dist/squad/manager.d.ts +0 -58
  178. package/dist/squad/manager.d.ts.map +0 -1
  179. package/dist/squad/manager.js +0 -351
  180. package/dist/squad/manager.js.map +0 -1
  181. package/dist/squad/model-selector.d.ts +0 -29
  182. package/dist/squad/model-selector.d.ts.map +0 -1
  183. package/dist/squad/model-selector.js +0 -64
  184. package/dist/squad/model-selector.js.map +0 -1
  185. package/dist/squad/name-generator.d.ts +0 -16
  186. package/dist/squad/name-generator.d.ts.map +0 -1
  187. package/dist/squad/name-generator.js +0 -111
  188. package/dist/squad/name-generator.js.map +0 -1
  189. package/dist/squad/roles/templates.d.ts +0 -7
  190. package/dist/squad/roles/templates.d.ts.map +0 -1
  191. package/dist/squad/roles/templates.js +0 -104
  192. package/dist/squad/roles/templates.js.map +0 -1
  193. package/dist/squad/skill-parser.d.ts +0 -36
  194. package/dist/squad/skill-parser.d.ts.map +0 -1
  195. package/dist/squad/skill-parser.js +0 -90
  196. package/dist/squad/skill-parser.js.map +0 -1
  197. package/dist/squad/source-resolver.d.ts +0 -20
  198. package/dist/squad/source-resolver.d.ts.map +0 -1
  199. package/dist/squad/source-resolver.js +0 -51
  200. package/dist/squad/source-resolver.js.map +0 -1
  201. package/dist/store/activity.d.ts +0 -51
  202. package/dist/store/activity.d.ts.map +0 -1
  203. package/dist/store/activity.js +0 -197
  204. package/dist/store/activity.js.map +0 -1
  205. package/dist/store/conversations.d.ts +0 -25
  206. package/dist/store/conversations.d.ts.map +0 -1
  207. package/dist/store/conversations.js +0 -76
  208. package/dist/store/conversations.js.map +0 -1
  209. package/dist/store/db.d.ts +0 -5
  210. package/dist/store/db.d.ts.map +0 -1
  211. package/dist/store/db.js +0 -290
  212. package/dist/store/db.js.map +0 -1
  213. package/dist/store/inbox.d.ts +0 -67
  214. package/dist/store/inbox.d.ts.map +0 -1
  215. package/dist/store/inbox.js +0 -192
  216. package/dist/store/inbox.js.map +0 -1
  217. package/dist/store/schedules.d.ts +0 -53
  218. package/dist/store/schedules.d.ts.map +0 -1
  219. package/dist/store/schedules.js +0 -160
  220. package/dist/store/schedules.js.map +0 -1
  221. package/dist/wiki/index.d.ts +0 -3
  222. package/dist/wiki/index.d.ts.map +0 -1
  223. package/dist/wiki/index.js +0 -2
  224. package/dist/wiki/index.js.map +0 -1
  225. package/dist/wiki/store.d.ts +0 -81
  226. package/dist/wiki/store.d.ts.map +0 -1
  227. package/dist/wiki/store.js +0 -270
  228. package/dist/wiki/store.js.map +0 -1
  229. package/node_modules/@io/shared/dist/config.d.ts +0 -26
  230. package/node_modules/@io/shared/dist/config.d.ts.map +0 -1
  231. package/node_modules/@io/shared/dist/config.js +0 -53
  232. package/node_modules/@io/shared/dist/config.js.map +0 -1
  233. package/node_modules/@io/shared/dist/constants.d.ts +0 -19
  234. package/node_modules/@io/shared/dist/constants.d.ts.map +0 -1
  235. package/node_modules/@io/shared/dist/constants.js +0 -51
  236. package/node_modules/@io/shared/dist/constants.js.map +0 -1
  237. package/node_modules/@io/shared/dist/index.d.ts +0 -12
  238. package/node_modules/@io/shared/dist/index.d.ts.map +0 -1
  239. package/node_modules/@io/shared/dist/index.js +0 -3
  240. package/node_modules/@io/shared/dist/index.js.map +0 -1
  241. package/node_modules/@io/shared/dist/types/agents.d.ts +0 -3
  242. package/node_modules/@io/shared/dist/types/agents.d.ts.map +0 -1
  243. package/node_modules/@io/shared/dist/types/agents.js +0 -2
  244. package/node_modules/@io/shared/dist/types/agents.js.map +0 -1
  245. package/node_modules/@io/shared/dist/types/api.d.ts +0 -33
  246. package/node_modules/@io/shared/dist/types/api.d.ts.map +0 -1
  247. package/node_modules/@io/shared/dist/types/api.js +0 -2
  248. package/node_modules/@io/shared/dist/types/api.js.map +0 -1
  249. package/node_modules/@io/shared/dist/types/attachments.d.ts +0 -10
  250. package/node_modules/@io/shared/dist/types/attachments.d.ts.map +0 -1
  251. package/node_modules/@io/shared/dist/types/attachments.js +0 -2
  252. package/node_modules/@io/shared/dist/types/attachments.js.map +0 -1
  253. package/node_modules/@io/shared/dist/types/events.d.ts +0 -44
  254. package/node_modules/@io/shared/dist/types/events.d.ts.map +0 -1
  255. package/node_modules/@io/shared/dist/types/events.js +0 -2
  256. package/node_modules/@io/shared/dist/types/events.js.map +0 -1
  257. package/node_modules/@io/shared/dist/types/history.d.ts +0 -33
  258. package/node_modules/@io/shared/dist/types/history.d.ts.map +0 -1
  259. package/node_modules/@io/shared/dist/types/history.js +0 -2
  260. package/node_modules/@io/shared/dist/types/history.js.map +0 -1
  261. package/node_modules/@io/shared/dist/types/messages.d.ts +0 -15
  262. package/node_modules/@io/shared/dist/types/messages.d.ts.map +0 -1
  263. package/node_modules/@io/shared/dist/types/messages.js +0 -2
  264. package/node_modules/@io/shared/dist/types/messages.js.map +0 -1
  265. package/node_modules/@io/shared/dist/types/squads.d.ts +0 -46
  266. package/node_modules/@io/shared/dist/types/squads.d.ts.map +0 -1
  267. package/node_modules/@io/shared/dist/types/squads.js +0 -2
  268. package/node_modules/@io/shared/dist/types/squads.js.map +0 -1
  269. package/node_modules/@io/shared/dist/types/tokens.d.ts +0 -19
  270. package/node_modules/@io/shared/dist/types/tokens.d.ts.map +0 -1
  271. package/node_modules/@io/shared/dist/types/tokens.js +0 -2
  272. package/node_modules/@io/shared/dist/types/tokens.js.map +0 -1
  273. package/node_modules/@io/shared/package.json +0 -18
  274. package/node_modules/@io/shared/src/config.ts +0 -85
  275. package/node_modules/@io/shared/src/constants.ts +0 -54
  276. package/node_modules/@io/shared/src/index.ts +0 -46
  277. package/node_modules/@io/shared/src/types/agents.ts +0 -3
  278. package/node_modules/@io/shared/src/types/api.ts +0 -35
  279. package/node_modules/@io/shared/src/types/attachments.ts +0 -9
  280. package/node_modules/@io/shared/src/types/events.ts +0 -86
  281. package/node_modules/@io/shared/src/types/history.ts +0 -37
  282. package/node_modules/@io/shared/src/types/messages.ts +0 -15
  283. package/node_modules/@io/shared/src/types/squads.ts +0 -56
  284. package/node_modules/@io/shared/src/types/tokens.ts +0 -19
  285. package/node_modules/@io/shared/tsconfig.json +0 -9
  286. package/node_modules/@io/shared/tsconfig.tsbuildinfo +0 -1
  287. package/public/assets/index-CoSJG-14.js +0 -510
  288. package/public/assets/index-CoSJG-14.js.map +0 -1
  289. /package/{public → dist/web}/assets/index-B6F0UZkW.css +0 -0
@@ -1,544 +0,0 @@
1
- import { approveAll, defineTool } from '@github/copilot-sdk';
2
- import { exec as execCb } from 'node:child_process';
3
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
4
- import { dirname, isAbsolute, join, resolve } from 'node:path';
5
- import { promisify } from 'node:util';
6
- import { z } from 'zod';
7
- import { getClient } from '../copilot/client.js';
8
- import { createChildLogger } from '../logging/logger.js';
9
- import { recordTokenUsage } from '../models/token-tracker.js';
10
- import { addInboxEntry } from '../store/inbox.js';
11
- import { getSquadScopes, listWikiPages, readWikiPage, searchWiki, writeWikiPage, } from '../wiki/index.js';
12
- import { getEventBus } from './event-bus.js';
13
- import { compileSystemPrompt } from './skill-parser.js';
14
- const exec = promisify(execCb);
15
- /**
16
- * Base agent class. Each agent has its own Copilot session, enforces
17
- * tool allowlists from its SKILL.md, and emits events on the bus.
18
- */
19
- export class Agent {
20
- role;
21
- squadId;
22
- squadName;
23
- instanceId;
24
- _currentInstanceId;
25
- _workingDir;
26
- session = null;
27
- skill;
28
- model;
29
- identity;
30
- logger;
31
- _status = 'idle';
32
- constructor(config) {
33
- this.skill = config.skill;
34
- this.role = config.skill.role;
35
- this.squadId = config.squadId;
36
- this.squadName = config.squadName;
37
- this.instanceId = config.instanceId;
38
- this.model = config.model ?? 'claude-sonnet-4.6';
39
- this.identity = config.identity;
40
- this.logger = createChildLogger(`agent:${config.squadName}:${config.identity?.displayName ?? this.role}`);
41
- }
42
- /** Set the current instance ID for activity tracking (used during instance execution) */
43
- setInstanceId(id) {
44
- this._currentInstanceId = id;
45
- }
46
- /** Clear the current instance ID after execution completes */
47
- clearInstanceId() {
48
- this._currentInstanceId = undefined;
49
- }
50
- /** Set the working directory for tool execution (worktree path) */
51
- setWorkingDir(dir) {
52
- this._workingDir = dir;
53
- }
54
- /** Get the resolved working directory */
55
- getWorkingDir() {
56
- return this._workingDir;
57
- }
58
- get status() {
59
- return this._status;
60
- }
61
- /** Initialize the agent's Copilot session */
62
- async init(squadContext) {
63
- const client = await getClient();
64
- const systemPrompt = await compileSystemPrompt(this.skill, squadContext, this.squadName, this.squadId, this.identity);
65
- this.session = await client.createSession({
66
- model: this.model,
67
- systemMessage: { mode: 'replace', content: systemPrompt },
68
- onPermissionRequest: approveAll,
69
- tools: this.buildTools(),
70
- });
71
- this.session.on('assistant.usage', (event) => {
72
- const data = event.data;
73
- if (data.inputTokens || data.outputTokens) {
74
- recordTokenUsage({
75
- squadId: this.squadId,
76
- agentRole: this.role,
77
- model: data.model,
78
- inputTokens: data.inputTokens ?? 0,
79
- outputTokens: data.outputTokens ?? 0,
80
- }).catch(() => { });
81
- }
82
- });
83
- // Capture reasoning/thoughts
84
- this.session.on('assistant.reasoning', (event) => {
85
- const content = event.data?.content;
86
- if (content) {
87
- this.emitEvent('agent:thought', { content });
88
- }
89
- });
90
- // Capture tool calls
91
- this.session.on('tool.execution_start', (event) => {
92
- const data = event.data;
93
- this.emitEvent('agent:tool_call', {
94
- tool: data.toolName,
95
- arguments: data.arguments,
96
- toolCallId: data.toolCallId,
97
- });
98
- });
99
- // Capture tool results
100
- this.session.on('tool.execution_complete', (event) => {
101
- const data = event.data;
102
- this.emitEvent('agent:tool_result', {
103
- toolCallId: data.toolCallId,
104
- success: data.success,
105
- result: data.result?.content?.slice(0, 500),
106
- error: data.error?.message,
107
- });
108
- });
109
- this.logger.info('Agent session initialized');
110
- }
111
- /** Send a message and get a response */
112
- async send(content, attachments) {
113
- if (!this.session) {
114
- throw new Error(`Agent ${this.role} not initialized`);
115
- }
116
- this._status = 'working';
117
- this.emitEvent('agent:task_started', { content: content.slice(0, 500) });
118
- try {
119
- const options = { prompt: content };
120
- if (attachments && attachments.length > 0) {
121
- options.attachments = attachments;
122
- }
123
- const result = await this.session.sendAndWait(options, 300_000);
124
- const response = result?.data?.content ?? '';
125
- this._status = 'idle';
126
- this.emitEvent('agent:task_completed', { responseLength: response.length });
127
- return response;
128
- }
129
- catch (err) {
130
- this._status = 'error';
131
- this.logger.error({ err }, 'Agent send failed');
132
- this.emitEvent('agent:error', {
133
- error: err instanceof Error ? err.message : String(err),
134
- });
135
- throw err;
136
- }
137
- }
138
- /** Switch to a different model (reinitializes session) */
139
- async switchModel(newModel, squadContext) {
140
- if (this.model === newModel)
141
- return;
142
- this.logger.info({ from: this.model, to: newModel }, 'Switching model');
143
- this.model = newModel;
144
- if (this.session) {
145
- await this.session.disconnect().catch(() => { });
146
- this.session = null;
147
- }
148
- await this.init(squadContext);
149
- }
150
- /** Get the current model */
151
- getModel() {
152
- return this.model;
153
- }
154
- /** Destroy the agent's session */
155
- async destroy() {
156
- if (this.session) {
157
- await this.session.disconnect();
158
- this.session = null;
159
- }
160
- this.logger.info('Agent destroyed');
161
- }
162
- /** Build allowed tools for this agent based on SKILL.md */
163
- buildTools() {
164
- const tools = [];
165
- // Always allow a "report" tool so agents can communicate results
166
- tools.push(defineTool('report_to_team_lead', {
167
- description: 'Report findings or completed work back to the team lead.',
168
- parameters: z.object({
169
- summary: z.string().describe('Summary of work completed or findings'),
170
- status: z
171
- .enum(['done', 'blocked', 'needs_review'])
172
- .describe('Current status of the work'),
173
- }),
174
- handler: async (args) => {
175
- this.logger.info({ status: args.status }, 'Agent reported to team lead');
176
- return {
177
- textResultForLlm: JSON.stringify({
178
- acknowledged: true,
179
- message: 'Report received by team lead.',
180
- }),
181
- resultType: 'success',
182
- };
183
- },
184
- }));
185
- // Always allow a "record_decision" tool to track explicit decision points
186
- tools.push(defineTool('record_decision', {
187
- description: 'Record an explicit decision you are making. Use this when choosing between alternatives, setting direction, or making architectural/strategic choices.',
188
- parameters: z.object({
189
- decision: z.string().describe('The decision being made'),
190
- rationale: z
191
- .string()
192
- .optional()
193
- .describe('Why this decision was made'),
194
- }),
195
- handler: async (args) => {
196
- this.logger.info('Decision recorded');
197
- this.emitEvent('agent:decision', {
198
- decision: args.decision,
199
- rationale: args.rationale,
200
- });
201
- return {
202
- textResultForLlm: JSON.stringify({
203
- recorded: true,
204
- message: 'Decision recorded.',
205
- }),
206
- resultType: 'success',
207
- };
208
- },
209
- }));
210
- // Add role-specific tools based on allowlist
211
- if (this.skill.tools.includes('read_file')) {
212
- tools.push(defineTool('read_file', {
213
- description: 'Read the contents of a file in the project.',
214
- parameters: z.object({
215
- path: z.string().describe('Relative path to the file'),
216
- }),
217
- handler: async (args) => {
218
- const cwd = this._workingDir;
219
- if (!cwd) {
220
- return {
221
- textResultForLlm: 'Error: No working directory set. Cannot read files.',
222
- resultType: 'success',
223
- };
224
- }
225
- const resolved = resolveSafePath(cwd, args.path);
226
- if (!resolved) {
227
- return {
228
- textResultForLlm: `Error: Path "${args.path}" is outside the working directory.`,
229
- resultType: 'success',
230
- };
231
- }
232
- if (!existsSync(resolved)) {
233
- return {
234
- textResultForLlm: `Error: File not found: ${args.path}`,
235
- resultType: 'success',
236
- };
237
- }
238
- try {
239
- const content = readFileSync(resolved, 'utf-8');
240
- // Truncate very large files
241
- const maxLen = 100_000;
242
- const truncated = content.length > maxLen
243
- ? `${content.slice(0, maxLen)}\n\n... [truncated, ${content.length} total chars]`
244
- : content;
245
- return {
246
- textResultForLlm: truncated,
247
- resultType: 'success',
248
- };
249
- }
250
- catch (err) {
251
- return {
252
- textResultForLlm: `Error reading file: ${err instanceof Error ? err.message : String(err)}`,
253
- resultType: 'success',
254
- };
255
- }
256
- },
257
- }));
258
- }
259
- if (this.skill.tools.includes('edit_file')) {
260
- tools.push(defineTool('edit_file', {
261
- description: 'Write content to a file in the project. Creates the file if it does not exist. Provide the full new content.',
262
- parameters: z.object({
263
- path: z.string().describe('Relative path to the file'),
264
- content: z.string().describe('New file content'),
265
- }),
266
- handler: async (args) => {
267
- const cwd = this._workingDir;
268
- if (!cwd) {
269
- return {
270
- textResultForLlm: 'Error: No working directory set. Cannot write files.',
271
- resultType: 'success',
272
- };
273
- }
274
- const resolved = resolveSafePath(cwd, args.path);
275
- if (!resolved) {
276
- return {
277
- textResultForLlm: `Error: Path "${args.path}" is outside the working directory.`,
278
- resultType: 'success',
279
- };
280
- }
281
- try {
282
- mkdirSync(dirname(resolved), { recursive: true });
283
- writeFileSync(resolved, args.content, 'utf-8');
284
- return {
285
- textResultForLlm: `Successfully wrote ${args.content.length} chars to ${args.path}`,
286
- resultType: 'success',
287
- };
288
- }
289
- catch (err) {
290
- return {
291
- textResultForLlm: `Error writing file: ${err instanceof Error ? err.message : String(err)}`,
292
- resultType: 'success',
293
- };
294
- }
295
- },
296
- }));
297
- }
298
- if (this.skill.tools.includes('run_command')) {
299
- tools.push(defineTool('run_command', {
300
- description: 'Run a shell command in the project directory. Do NOT use git commands (commit, push, branch, checkout) — the system handles git operations.',
301
- parameters: z.object({
302
- command: z.string().describe('The command to execute'),
303
- }),
304
- handler: async (args) => {
305
- const cwd = this._workingDir;
306
- if (!cwd) {
307
- return {
308
- textResultForLlm: 'Error: No working directory set. Cannot run commands.',
309
- resultType: 'success',
310
- };
311
- }
312
- // Block git commands that could interfere with the system
313
- const blocked = /^\s*(git\s+(commit|push|pull|checkout|switch|merge|rebase|branch\s+-[dDmM]|tag|remote|init))/i;
314
- if (blocked.test(args.command)) {
315
- return {
316
- textResultForLlm: 'Error: Git mutation commands are not allowed. The system handles git operations after review.',
317
- resultType: 'success',
318
- };
319
- }
320
- try {
321
- const { stdout, stderr } = await exec(args.command, {
322
- cwd,
323
- timeout: 60_000,
324
- maxBuffer: 1024 * 1024,
325
- });
326
- const output = [
327
- stdout ? `stdout:\n${stdout.slice(0, 50_000)}` : '',
328
- stderr ? `stderr:\n${stderr.slice(0, 10_000)}` : '',
329
- ]
330
- .filter(Boolean)
331
- .join('\n\n');
332
- return {
333
- textResultForLlm: output || '(no output)',
334
- resultType: 'success',
335
- };
336
- }
337
- catch (err) {
338
- const execErr = err;
339
- const errOutput = [
340
- execErr.stdout ? `stdout:\n${execErr.stdout.slice(0, 20_000)}` : '',
341
- execErr.stderr ? `stderr:\n${execErr.stderr.slice(0, 10_000)}` : '',
342
- execErr.message ? `error: ${execErr.message.slice(0, 500)}` : '',
343
- ]
344
- .filter(Boolean)
345
- .join('\n\n');
346
- return {
347
- textResultForLlm: `Command failed:\n${errOutput}`,
348
- resultType: 'success',
349
- };
350
- }
351
- },
352
- }));
353
- }
354
- if (this.skill.tools.includes('search_code')) {
355
- tools.push(defineTool('search_code', {
356
- description: 'Search for patterns in the project codebase using grep.',
357
- parameters: z.object({
358
- pattern: z.string().describe('Search pattern (regex or text)'),
359
- glob: z.string().optional().describe('File glob to limit search (e.g., "*.ts")'),
360
- }),
361
- handler: async (args) => {
362
- const cwd = this._workingDir;
363
- if (!cwd) {
364
- return {
365
- textResultForLlm: 'Error: No working directory set. Cannot search.',
366
- resultType: 'success',
367
- };
368
- }
369
- try {
370
- const globArg = args.glob ? `--glob "${args.glob}"` : '';
371
- const { stdout } = await exec(`npx --yes ripgrep-wrapper "${args.pattern}" ${globArg} --max-count 50`, { cwd, timeout: 30_000, maxBuffer: 1024 * 1024 }).catch(async () => {
372
- // Fallback to grep/findstr if ripgrep not available
373
- const cmd = process.platform === 'win32'
374
- ? `findstr /S /N /R "${args.pattern}" ${args.glob || '*.*'}`
375
- : `grep -rn "${args.pattern}" ${args.glob ? `--include="${args.glob}"` : ''} . | head -50`;
376
- return exec(cmd, { cwd, timeout: 30_000, maxBuffer: 1024 * 1024 });
377
- });
378
- return {
379
- textResultForLlm: stdout.slice(0, 50_000) || 'No matches found.',
380
- resultType: 'success',
381
- };
382
- }
383
- catch {
384
- return {
385
- textResultForLlm: 'No matches found.',
386
- resultType: 'success',
387
- };
388
- }
389
- },
390
- }));
391
- }
392
- // Wiki tools — always available to all agents
393
- tools.push(defineTool('read_wiki', {
394
- description: 'Read from the wiki knowledge base. Call with no pageName to list available pages, or with a pageName to read a specific page. You can access Shared wiki and your squad wiki.',
395
- parameters: z.object({
396
- scope: z
397
- .enum(['shared', 'squad'])
398
- .describe('"shared" for cross-squad knowledge, "squad" for this squad\'s knowledge'),
399
- pageName: z.string().optional().describe('Page name to read (omit to list all pages)'),
400
- }),
401
- handler: async (args) => {
402
- const resolvedScope = args.scope === 'squad' ? this.squadName : 'shared';
403
- if (!args.pageName) {
404
- const pages = listWikiPages(resolvedScope);
405
- return {
406
- textResultForLlm: JSON.stringify({
407
- scope: args.scope,
408
- pages: pages.length > 0 ? pages : '(empty)',
409
- }),
410
- resultType: 'success',
411
- };
412
- }
413
- const page = readWikiPage(resolvedScope, args.pageName);
414
- if (!page) {
415
- return {
416
- textResultForLlm: JSON.stringify({
417
- error: `Page '${args.pageName}' not found in ${args.scope} wiki`,
418
- }),
419
- resultType: 'success',
420
- };
421
- }
422
- return {
423
- textResultForLlm: JSON.stringify({
424
- scope: args.scope,
425
- name: page.name,
426
- content: page.content,
427
- }),
428
- resultType: 'success',
429
- };
430
- },
431
- }), defineTool('write_wiki', {
432
- description: "Write a page to your squad's wiki knowledge base. Read the existing page first and merge knowledge if updating. You can only write to your squad wiki (not shared).",
433
- parameters: z.object({
434
- pageName: z
435
- .string()
436
- .describe('Page name (no .md extension, e.g., "architecture" or "conventions")'),
437
- content: z.string().describe('Full markdown content for the page'),
438
- }),
439
- handler: async (args) => {
440
- writeWikiPage(this.squadName, args.pageName, args.content);
441
- return {
442
- textResultForLlm: JSON.stringify({
443
- written: true,
444
- scope: 'squad',
445
- pageName: args.pageName,
446
- }),
447
- resultType: 'success',
448
- };
449
- },
450
- }), defineTool('search_wiki', {
451
- description: 'Search across all accessible wiki pages by keyword. Searches both Shared and your squad wiki.',
452
- parameters: z.object({
453
- keyword: z.string().describe('Keyword or phrase to search for'),
454
- }),
455
- handler: async (args) => {
456
- const results = searchWiki(args.keyword, getSquadScopes(this.squadName));
457
- if (results.length === 0) {
458
- return {
459
- textResultForLlm: JSON.stringify({ results: [], message: 'No matches found.' }),
460
- resultType: 'success',
461
- };
462
- }
463
- return {
464
- textResultForLlm: JSON.stringify({ results }),
465
- resultType: 'success',
466
- };
467
- },
468
- }));
469
- // Inbox tool — always available so agents can deliver work to user
470
- tools.push(defineTool('add_to_inbox', {
471
- description: 'Create an inbox entry for the user. Use to deliver completed work, ask a blocking question, or leave an informational note.',
472
- parameters: z.object({
473
- kind: z
474
- .enum(['deliverable', 'question', 'note'])
475
- .describe('Type: deliverable (work product), question (blocks until user responds), note (informational)'),
476
- title: z.string().describe('Short title for the inbox entry'),
477
- content: z.string().describe('Full content/body of the entry (markdown supported)'),
478
- }),
479
- handler: async (args) => {
480
- try {
481
- const { entry } = await addInboxEntry({
482
- squadId: this.squadId,
483
- instanceId: this.instanceId,
484
- kind: args.kind,
485
- title: args.title,
486
- content: args.content,
487
- });
488
- this.logger.info({ entryId: entry.id, kind: args.kind }, 'Agent created inbox entry');
489
- return {
490
- textResultForLlm: JSON.stringify({
491
- created: true,
492
- id: entry.id,
493
- kind: entry.kind,
494
- title: entry.title,
495
- source: `squad:${this.squadName}:${this.role}`,
496
- }),
497
- resultType: 'success',
498
- };
499
- }
500
- catch (err) {
501
- return {
502
- textResultForLlm: JSON.stringify({
503
- error: `Failed to create inbox entry: ${err instanceof Error ? err.message : String(err)}`,
504
- }),
505
- resultType: 'success',
506
- };
507
- }
508
- },
509
- }));
510
- return tools;
511
- }
512
- emitEvent(type, data) {
513
- getEventBus()
514
- .emit({
515
- id: crypto.randomUUID(),
516
- timestamp: new Date(),
517
- type,
518
- squadId: this.squadId,
519
- instanceId: this._currentInstanceId ?? this.instanceId,
520
- agentRole: this.role,
521
- model: this.model,
522
- data,
523
- })
524
- .catch((err) => {
525
- this.logger.error({ err }, 'Failed to emit agent event');
526
- });
527
- }
528
- }
529
- /**
530
- * Resolve a relative path safely within a base directory.
531
- * Returns null if the resolved path escapes the base.
532
- */
533
- function resolveSafePath(base, relativePath) {
534
- // Reject absolute paths outright
535
- if (isAbsolute(relativePath))
536
- return null;
537
- const resolved = resolve(base, relativePath);
538
- const normalizedBase = resolve(base);
539
- // Ensure resolved path is within the base directory
540
- if (!resolved.startsWith(normalizedBase))
541
- return null;
542
- return resolved;
543
- }
544
- //# sourceMappingURL=agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/squad/agent.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import type { AutonomyConfig } from '@io/shared';
2
- export type PermissionAction = 'merge' | 'release' | 'close' | 'review';
3
- export interface PermissionCheck {
4
- allowed: boolean;
5
- requiresApproval: boolean;
6
- reason?: string;
7
- }
8
- /**
9
- * Check if a squad has permission to perform an action based on its autonomy tier.
10
- */
11
- export declare function checkPermission(config: AutonomyConfig, action: PermissionAction): PermissionCheck;
12
- /**
13
- * Enforce a permission — logs and throws if not allowed.
14
- */
15
- export declare function enforcePermission(config: AutonomyConfig, action: PermissionAction, squadName: string): void;
16
- //# sourceMappingURL=autonomy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autonomy.d.ts","sourceRoot":"","sources":["../../src/squad/autonomy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,GAAG,eAAe,CA6CjG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,MAAM,GACf,IAAI,CAON"}
@@ -1,63 +0,0 @@
1
- import { createChildLogger } from '../logging/logger.js';
2
- const logger = () => createChildLogger('autonomy');
3
- /**
4
- * Check if a squad has permission to perform an action based on its autonomy tier.
5
- */
6
- export function checkPermission(config, action) {
7
- switch (action) {
8
- case 'merge':
9
- if (config.canMergePrs)
10
- return { allowed: true, requiresApproval: false };
11
- if (config.requiresUserApprovalFor.includes('merge'))
12
- return {
13
- allowed: false,
14
- requiresApproval: true,
15
- reason: 'User approval required for merging PRs',
16
- };
17
- return { allowed: false, requiresApproval: false, reason: 'Merging PRs not allowed' };
18
- case 'release':
19
- if (config.canCreateReleases)
20
- return { allowed: true, requiresApproval: false };
21
- if (config.requiresUserApprovalFor.includes('release'))
22
- return {
23
- allowed: false,
24
- requiresApproval: true,
25
- reason: 'User approval required for releases',
26
- };
27
- return { allowed: false, requiresApproval: false, reason: 'Creating releases not allowed' };
28
- case 'close':
29
- if (config.canCloseIssues)
30
- return { allowed: true, requiresApproval: false };
31
- if (config.requiresUserApprovalFor.includes('close'))
32
- return {
33
- allowed: false,
34
- requiresApproval: true,
35
- reason: 'User approval required for closing issues',
36
- };
37
- return { allowed: false, requiresApproval: false, reason: 'Closing issues not allowed' };
38
- case 'review':
39
- if (config.canSelfReview)
40
- return { allowed: true, requiresApproval: false };
41
- if (config.requiresUserApprovalFor.includes('review'))
42
- return {
43
- allowed: false,
44
- requiresApproval: true,
45
- reason: 'User approval required for self-review',
46
- };
47
- return { allowed: false, requiresApproval: false, reason: 'Self-review not allowed' };
48
- default:
49
- return { allowed: false, requiresApproval: false, reason: `Unknown action: ${action}` };
50
- }
51
- }
52
- /**
53
- * Enforce a permission — logs and throws if not allowed.
54
- */
55
- export function enforcePermission(config, action, squadName) {
56
- const check = checkPermission(config, action);
57
- if (!check.allowed && !check.requiresApproval) {
58
- const msg = `Squad '${squadName}' is not permitted to ${action}: ${check.reason}`;
59
- logger().warn({ squadName, action }, msg);
60
- throw new Error(msg);
61
- }
62
- }
63
- //# sourceMappingURL=autonomy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autonomy.js","sourceRoot":"","sources":["../../src/squad/autonomy.ts"],"names":[],"mappings":"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"}