@agentuity/opencode 0.1.40 → 0.1.42

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 (165) hide show
  1. package/README.md +324 -19
  2. package/dist/agents/architect.d.ts +4 -0
  3. package/dist/agents/architect.d.ts.map +1 -0
  4. package/dist/agents/architect.js +259 -0
  5. package/dist/agents/architect.js.map +1 -0
  6. package/dist/agents/builder.d.ts +1 -1
  7. package/dist/agents/builder.d.ts.map +1 -1
  8. package/dist/agents/builder.js +44 -1
  9. package/dist/agents/builder.js.map +1 -1
  10. package/dist/agents/index.d.ts.map +1 -1
  11. package/dist/agents/index.js +6 -0
  12. package/dist/agents/index.js.map +1 -1
  13. package/dist/agents/lead.d.ts +1 -1
  14. package/dist/agents/lead.d.ts.map +1 -1
  15. package/dist/agents/lead.js +185 -22
  16. package/dist/agents/lead.js.map +1 -1
  17. package/dist/agents/planner.d.ts +4 -0
  18. package/dist/agents/planner.d.ts.map +1 -0
  19. package/dist/agents/planner.js +158 -0
  20. package/dist/agents/planner.js.map +1 -0
  21. package/dist/agents/runner.d.ts +4 -0
  22. package/dist/agents/runner.d.ts.map +1 -0
  23. package/dist/agents/runner.js +364 -0
  24. package/dist/agents/runner.js.map +1 -0
  25. package/dist/agents/types.d.ts +5 -1
  26. package/dist/agents/types.d.ts.map +1 -1
  27. package/dist/background/concurrency.d.ts +36 -0
  28. package/dist/background/concurrency.d.ts.map +1 -0
  29. package/dist/background/concurrency.js +92 -0
  30. package/dist/background/concurrency.js.map +1 -0
  31. package/dist/background/index.d.ts +5 -0
  32. package/dist/background/index.d.ts.map +1 -0
  33. package/dist/background/index.js +4 -0
  34. package/dist/background/index.js.map +1 -0
  35. package/dist/background/manager.d.ts +54 -0
  36. package/dist/background/manager.d.ts.map +1 -0
  37. package/dist/background/manager.js +409 -0
  38. package/dist/background/manager.js.map +1 -0
  39. package/dist/background/types.d.ts +47 -0
  40. package/dist/background/types.d.ts.map +1 -0
  41. package/dist/background/types.js +2 -0
  42. package/dist/background/types.js.map +1 -0
  43. package/dist/config/index.d.ts +2 -0
  44. package/dist/config/index.d.ts.map +1 -1
  45. package/dist/config/index.js +2 -0
  46. package/dist/config/index.js.map +1 -1
  47. package/dist/config/loader.d.ts +24 -0
  48. package/dist/config/loader.d.ts.map +1 -1
  49. package/dist/config/loader.js +102 -23
  50. package/dist/config/loader.js.map +1 -1
  51. package/dist/config/presets.d.ts +16 -0
  52. package/dist/config/presets.d.ts.map +1 -0
  53. package/dist/config/presets.js +20 -0
  54. package/dist/config/presets.js.map +1 -0
  55. package/dist/config/validation.d.ts +26 -0
  56. package/dist/config/validation.d.ts.map +1 -0
  57. package/dist/config/validation.js +48 -0
  58. package/dist/config/validation.js.map +1 -0
  59. package/dist/index.d.ts +1 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js.map +1 -1
  62. package/dist/plugin/hooks/cadence.d.ts.map +1 -1
  63. package/dist/plugin/hooks/cadence.js +3 -1
  64. package/dist/plugin/hooks/cadence.js.map +1 -1
  65. package/dist/plugin/hooks/keyword.d.ts.map +1 -1
  66. package/dist/plugin/hooks/keyword.js +3 -0
  67. package/dist/plugin/hooks/keyword.js.map +1 -1
  68. package/dist/plugin/plugin.d.ts.map +1 -1
  69. package/dist/plugin/plugin.js +335 -36
  70. package/dist/plugin/plugin.js.map +1 -1
  71. package/dist/skills/frontmatter.d.ts +7 -0
  72. package/dist/skills/frontmatter.d.ts.map +1 -0
  73. package/dist/skills/frontmatter.js +17 -0
  74. package/dist/skills/frontmatter.js.map +1 -0
  75. package/dist/skills/index.d.ts +4 -0
  76. package/dist/skills/index.d.ts.map +1 -0
  77. package/dist/skills/index.js +4 -0
  78. package/dist/skills/index.js.map +1 -0
  79. package/dist/skills/loader.d.ts +20 -0
  80. package/dist/skills/loader.d.ts.map +1 -0
  81. package/dist/skills/loader.js +152 -0
  82. package/dist/skills/loader.js.map +1 -0
  83. package/dist/skills/types.d.ts +41 -0
  84. package/dist/skills/types.d.ts.map +1 -0
  85. package/dist/skills/types.js +2 -0
  86. package/dist/skills/types.js.map +1 -0
  87. package/dist/tmux/decision-engine.d.ts +24 -0
  88. package/dist/tmux/decision-engine.d.ts.map +1 -0
  89. package/dist/tmux/decision-engine.js +193 -0
  90. package/dist/tmux/decision-engine.js.map +1 -0
  91. package/dist/tmux/executor.d.ts +84 -0
  92. package/dist/tmux/executor.d.ts.map +1 -0
  93. package/dist/tmux/executor.js +546 -0
  94. package/dist/tmux/executor.js.map +1 -0
  95. package/dist/tmux/index.d.ts +7 -0
  96. package/dist/tmux/index.d.ts.map +1 -0
  97. package/dist/tmux/index.js +7 -0
  98. package/dist/tmux/index.js.map +1 -0
  99. package/dist/tmux/manager.d.ts +116 -0
  100. package/dist/tmux/manager.d.ts.map +1 -0
  101. package/dist/tmux/manager.js +488 -0
  102. package/dist/tmux/manager.js.map +1 -0
  103. package/dist/tmux/state-query.d.ts +7 -0
  104. package/dist/tmux/state-query.d.ts.map +1 -0
  105. package/dist/tmux/state-query.js +70 -0
  106. package/dist/tmux/state-query.js.map +1 -0
  107. package/dist/tmux/types.d.ts +97 -0
  108. package/dist/tmux/types.d.ts.map +1 -0
  109. package/dist/tmux/types.js +8 -0
  110. package/dist/tmux/types.js.map +1 -0
  111. package/dist/tmux/utils.d.ts +32 -0
  112. package/dist/tmux/utils.d.ts.map +1 -0
  113. package/dist/tmux/utils.js +80 -0
  114. package/dist/tmux/utils.js.map +1 -0
  115. package/dist/tools/background.d.ts +61 -0
  116. package/dist/tools/background.d.ts.map +1 -0
  117. package/dist/tools/background.js +78 -0
  118. package/dist/tools/background.js.map +1 -0
  119. package/dist/tools/delegate.d.ts +6 -0
  120. package/dist/tools/delegate.d.ts.map +1 -1
  121. package/dist/tools/delegate.js +8 -2
  122. package/dist/tools/delegate.js.map +1 -1
  123. package/dist/tools/index.d.ts +1 -0
  124. package/dist/tools/index.d.ts.map +1 -1
  125. package/dist/tools/index.js +1 -0
  126. package/dist/tools/index.js.map +1 -1
  127. package/dist/types.d.ts +118 -18
  128. package/dist/types.d.ts.map +1 -1
  129. package/dist/types.js +49 -7
  130. package/dist/types.js.map +1 -1
  131. package/package.json +4 -3
  132. package/src/agents/architect.ts +262 -0
  133. package/src/agents/builder.ts +44 -1
  134. package/src/agents/index.ts +6 -0
  135. package/src/agents/lead.ts +185 -22
  136. package/src/agents/planner.ts +161 -0
  137. package/src/agents/runner.ts +367 -0
  138. package/src/agents/types.ts +5 -1
  139. package/src/background/concurrency.ts +116 -0
  140. package/src/background/index.ts +4 -0
  141. package/src/background/manager.ts +478 -0
  142. package/src/background/types.ts +52 -0
  143. package/src/config/index.ts +2 -0
  144. package/src/config/loader.ts +128 -31
  145. package/src/config/presets.ts +21 -0
  146. package/src/config/validation.ts +70 -0
  147. package/src/index.ts +1 -0
  148. package/src/plugin/hooks/cadence.ts +2 -1
  149. package/src/plugin/hooks/keyword.ts +3 -0
  150. package/src/plugin/plugin.ts +374 -42
  151. package/src/skills/frontmatter.ts +25 -0
  152. package/src/skills/index.ts +3 -0
  153. package/src/skills/loader.ts +185 -0
  154. package/src/skills/types.ts +43 -0
  155. package/src/tmux/decision-engine.ts +246 -0
  156. package/src/tmux/executor.ts +618 -0
  157. package/src/tmux/index.ts +14 -0
  158. package/src/tmux/manager.ts +577 -0
  159. package/src/tmux/state-query.ts +77 -0
  160. package/src/tmux/types.ts +107 -0
  161. package/src/tmux/utils.ts +85 -0
  162. package/src/tools/background.ts +145 -0
  163. package/src/tools/delegate.ts +8 -2
  164. package/src/tools/index.ts +9 -0
  165. package/src/types.ts +88 -15
@@ -1,19 +1,51 @@
1
+ import { tool } from '@opencode-ai/plugin';
2
+ import { loadAllSkills } from '../skills';
1
3
  import { agents } from '../agents';
2
- import { loadCoderConfig, getDefaultConfig, mergeConfig } from '../config';
4
+ import { loadCoderConfig, getDefaultConfig, mergeConfig, validateAndWarnConfigs } from '../config';
3
5
  import { createSessionHooks } from './hooks/session';
4
6
  import { createToolHooks } from './hooks/tools';
5
7
  import { createKeywordHooks } from './hooks/keyword';
6
8
  import { createParamsHooks } from './hooks/params';
7
9
  import { createCadenceHooks } from './hooks/cadence';
8
10
  import { createSessionMemoryHooks } from './hooks/session-memory';
11
+ import { BackgroundManager } from '../background';
12
+ import { TmuxSessionManager } from '../tmux';
13
+ // Sandbox environment detection
14
+ const SANDBOX_ID = process.env.AGENTUITY_SANDBOX_ID;
15
+ const IN_SANDBOX = !!SANDBOX_ID;
16
+ // Sandbox context injected into Lead, Builder, and Architect prompts
17
+ const SANDBOX_CONTEXT = IN_SANDBOX
18
+ ? `
19
+ ## Sandbox Environment
20
+
21
+ You are running inside an Agentuity Sandbox (ID: ${SANDBOX_ID}).
22
+
23
+ **Permissions:** All file operations are allowed without prompts.
24
+
25
+ **File Locations:**
26
+ - Working directory: \`/home/agentuity\`
27
+ - Temp files: \`/home/agentuity/tmp/\` (preferred over \`/tmp/\`)
28
+ - Artifacts: \`/home/agentuity/.agentuity/\`
29
+
30
+ **Tips:**
31
+ - No permission prompts - you can read/write freely
32
+ - Sandbox is isolated - safe to experiment
33
+ - Use \`/home/agentuity/\` paths for all file operations
34
+ `
35
+ : '';
36
+ // Agents that should receive sandbox context in their prompts
37
+ const SANDBOX_AWARE_AGENTS = ['lead', 'builder', 'architect'];
9
38
  // Agent display names for @mentions
10
39
  const AGENT_MENTIONS = {
11
40
  lead: '@Agentuity Coder Lead',
12
41
  scout: '@Agentuity Coder Scout',
13
42
  builder: '@Agentuity Coder Builder',
43
+ architect: '@Agentuity Coder Architect',
14
44
  reviewer: '@Agentuity Coder Reviewer',
15
45
  memory: '@Agentuity Coder Memory',
16
46
  expert: '@Agentuity Coder Expert',
47
+ planner: '@Agentuity Coder Planner',
48
+ runner: '@Agentuity Coder Runner',
17
49
  };
18
50
  export async function createCoderPlugin(ctx) {
19
51
  ctx.client.app.log({
@@ -30,13 +62,44 @@ export async function createCoderPlugin(ctx) {
30
62
  const keywordHooks = createKeywordHooks(ctx, coderConfig);
31
63
  const paramsHooks = createParamsHooks(ctx, coderConfig);
32
64
  const cadenceHooks = createCadenceHooks(ctx, coderConfig);
65
+ const tmuxManager = coderConfig.tmux?.enabled
66
+ ? new TmuxSessionManager(ctx, coderConfig.tmux, {
67
+ onLog: (message) => ctx.client.app.log({
68
+ body: {
69
+ service: 'agentuity-coder',
70
+ level: 'info',
71
+ message,
72
+ },
73
+ }),
74
+ })
75
+ : undefined;
76
+ const backgroundManager = new BackgroundManager(ctx, coderConfig.background, {
77
+ onSubagentSessionCreated: tmuxManager
78
+ ? (event) => {
79
+ void tmuxManager.onSessionCreated(event);
80
+ }
81
+ : undefined,
82
+ onSubagentSessionDeleted: tmuxManager
83
+ ? (event) => {
84
+ void tmuxManager.onSessionDeleted(event);
85
+ }
86
+ : undefined,
87
+ });
33
88
  // Session memory hooks handle checkpointing and compaction for non-Cadence sessions
34
89
  // Orchestration (deciding which module handles which session) happens below in the hooks
35
90
  const sessionMemoryHooks = createSessionMemoryHooks(ctx, coderConfig);
36
91
  const configHandler = createConfigHandler(coderConfig);
37
- // Get the tool helper from Open Code context if available
38
- const toolHelper = ctx.tool;
39
- const tools = toolHelper ? createTools(toolHelper) : undefined;
92
+ // Create plugin tools using the @opencode-ai/plugin tool helper
93
+ const tools = createTools(backgroundManager);
94
+ // Create a logger for shutdown handler
95
+ const shutdownLogger = (message) => ctx.client.app.log({
96
+ body: {
97
+ service: 'agentuity-coder',
98
+ level: 'info',
99
+ message: `[shutdown] ${message}`,
100
+ },
101
+ });
102
+ registerShutdownHandler(backgroundManager, tmuxManager, shutdownLogger);
40
103
  // Show startup toast (fire and forget, don't block)
41
104
  try {
42
105
  ctx.client.tui.showToast({
@@ -58,6 +121,10 @@ export async function createCoderPlugin(ctx) {
58
121
  'tool.execute.before': toolHooks.before,
59
122
  'tool.execute.after': toolHooks.after,
60
123
  event: async (input) => {
124
+ const event = extractEventFromInput(input);
125
+ if (event) {
126
+ backgroundManager.handleEvent(event);
127
+ }
61
128
  // Orchestrate: route to appropriate module based on session type
62
129
  const sessionId = extractSessionIdFromEvent(input);
63
130
  if (sessionId && cadenceHooks.isActiveCadenceSession(sessionId)) {
@@ -83,20 +150,51 @@ function createConfigHandler(coderConfig) {
83
150
  return async (config) => {
84
151
  const agentConfigs = createAgentConfigs(coderConfig);
85
152
  const commands = createCommands();
86
- config.agent = {
87
- ...config.agent,
88
- ...agentConfigs,
89
- };
153
+ const loadedSkills = await loadAllSkills(coderConfig.skills);
154
+ const skillCommands = createSkillCommands(loadedSkills);
155
+ // Merge agent configs: our defaults first, then user's opencode.json overrides on top
156
+ // This allows users to customize any agent via their opencode.json
157
+ const userAgentConfigs = config.agent;
158
+ const mergedAgents = { ...agentConfigs };
159
+ // Shallow merge user overrides on top of our defaults (nested objects like tools are replaced, not merged)
160
+ if (userAgentConfigs) {
161
+ for (const [name, userConfig] of Object.entries(userAgentConfigs)) {
162
+ if (mergedAgents[name]) {
163
+ // Merge user config on top of our default
164
+ mergedAgents[name] = {
165
+ ...mergedAgents[name],
166
+ ...userConfig,
167
+ };
168
+ }
169
+ else {
170
+ // User defined a new agent not in our defaults
171
+ mergedAgents[name] = userConfig;
172
+ }
173
+ }
174
+ }
175
+ config.agent = mergedAgents;
176
+ // Validate merged configs and warn about mismatches
177
+ validateAndWarnConfigs(mergedAgents);
178
+ // In sandbox, allow all permissions without prompts
179
+ if (IN_SANDBOX) {
180
+ config.permission = {
181
+ '*': 'allow',
182
+ external_directory: {
183
+ '/home/agentuity/**': 'allow',
184
+ '*': 'allow',
185
+ },
186
+ };
187
+ }
90
188
  config.command = {
91
189
  ...config.command,
92
190
  ...commands,
191
+ ...skillCommands,
93
192
  };
94
193
  };
95
194
  }
96
- function createAgentConfigs(config) {
195
+ function createAgentConfigs(_config) {
97
196
  const result = {};
98
197
  for (const agent of Object.values(agents)) {
99
- const modelConfig = config.agents?.[agent.role];
100
198
  // Convert tools.exclude to Open Code format (tool: false)
101
199
  const tools = {};
102
200
  if (agent.tools?.exclude) {
@@ -104,16 +202,23 @@ function createAgentConfigs(config) {
104
202
  tools[tool] = false;
105
203
  }
106
204
  }
205
+ // Inject sandbox context into specific agents when running in sandbox
206
+ const shouldInjectSandbox = IN_SANDBOX && SANDBOX_AWARE_AGENTS.includes(agent.role);
207
+ const prompt = shouldInjectSandbox
208
+ ? `${agent.systemPrompt}\n${SANDBOX_CONTEXT}`
209
+ : agent.systemPrompt;
210
+ // Use agent defaults directly - user overrides happen in createConfigHandler
107
211
  result[agent.displayName] = {
108
212
  description: agent.description,
109
- model: modelConfig?.model ?? agent.defaultModel,
110
- prompt: agent.systemPrompt,
213
+ model: agent.defaultModel,
214
+ prompt,
111
215
  mode: agent.mode ?? 'subagent',
112
216
  ...(Object.keys(tools).length > 0 ? { tools } : {}),
113
- // Pass through thinking/reasoning settings
114
217
  ...(agent.variant ? { variant: agent.variant } : {}),
115
218
  ...(agent.temperature !== undefined ? { temperature: agent.temperature } : {}),
116
219
  ...(agent.maxSteps !== undefined ? { maxSteps: agent.maxSteps } : {}),
220
+ ...(agent.reasoningEffort ? { reasoningEffort: agent.reasoningEffort } : {}),
221
+ ...(agent.thinking ? { thinking: agent.thinking } : {}),
117
222
  };
118
223
  }
119
224
  return result;
@@ -129,20 +234,24 @@ You are the Agentuity Coder Lead agent orchestrating the Agentuity Coder team.
129
234
  ## Your Team (use @mentions to invoke)
130
235
  - **@Agentuity Coder Scout**: Explore codebase, find patterns, research docs (read-only)
131
236
  - **@Agentuity Coder Builder**: Implement features, write code, run tests
237
+ - **@Agentuity Coder Architect**: Complex autonomous tasks, Cadence mode (GPT Codex)
132
238
  - **@Agentuity Coder Reviewer**: Review changes, catch issues, apply fixes
133
239
  - **@Agentuity Coder Memory**: Store context, remember decisions
134
240
  - **@Agentuity Coder Expert**: Agentuity CLI and cloud services specialist
241
+ - **@Agentuity Coder Planner**: Deep planning for complex architecture decisions
242
+ - **@Agentuity Coder Runner**: Run lint/build/test commands, returns structured results
135
243
 
136
244
  ## Task
137
245
  $ARGUMENTS
138
246
 
139
247
  ## Guidelines
140
248
  1. Use @Agentuity Coder Scout first to understand context
141
- 2. Delegate implementation to @Agentuity Coder Builder
142
- 3. Have @Agentuity Coder Reviewer check the work
143
- 4. Use @Agentuity Coder Expert for Agentuity CLI questions
144
- 5. Only use cloud services when genuinely helpful
145
- 6. **When done, tell @Agentuity Coder Memory to memorialize the session**
249
+ 2. Delegate implementation to @Agentuity Coder Builder (or Architect for complex work)
250
+ 3. Delegate lint/build/test commands to @Agentuity Coder Runner for structured results
251
+ 4. Have @Agentuity Coder Reviewer check the work
252
+ 5. Use @Agentuity Coder Expert for Agentuity CLI questions
253
+ 6. Only use cloud services when genuinely helpful
254
+ 7. **When done, tell @Agentuity Coder Memory to memorialize the session**
146
255
  </coder-mode>`,
147
256
  agent: 'Agentuity Coder Lead',
148
257
  argumentHint: '"task description"',
@@ -255,10 +364,13 @@ You are the Agentuity Coder Lead in **Cadence mode** — a long-running autonomo
255
364
 
256
365
  ## Your Team (use @mentions to invoke)
257
366
  - **@Agentuity Coder Scout**: Explore codebase, find patterns, research docs (read-only)
258
- - **@Agentuity Coder Builder**: Implement features, write code, run tests
367
+ - **@Agentuity Coder Architect**: Complex autonomous implementation (GPT Codex with high reasoning) — **USE THIS FOR CADENCE**
368
+ - **@Agentuity Coder Builder**: Quick fixes, simple changes (for minor iterations only)
259
369
  - **@Agentuity Coder Reviewer**: Review changes, catch issues, apply fixes
260
370
  - **@Agentuity Coder Memory**: Store context, remember decisions, checkpoints
261
371
  - **@Agentuity Coder Expert**: Agentuity CLI and cloud services specialist
372
+ - **@Agentuity Coder Planner**: Deep planning for complex architecture decisions
373
+ - **@Agentuity Coder Runner**: Run lint/build/test commands, returns structured results
262
374
 
263
375
  ## Task
264
376
  $ARGUMENTS
@@ -272,7 +384,8 @@ $ARGUMENTS
272
384
  2. **Each iteration**:
273
385
  - Ask @Agentuity Coder Memory for relevant context
274
386
  - Use @Agentuity Coder Scout to understand what's needed
275
- - Delegate implementation to @Agentuity Coder Builder
387
+ - For complex planning, consult @Agentuity Coder Planner
388
+ - Delegate implementation to **@Agentuity Coder Architect** (preferred for Cadence)
276
389
  - Have @Agentuity Coder Reviewer verify the work
277
390
  - Tell @Agentuity Coder Memory to store checkpoint
278
391
 
@@ -284,10 +397,11 @@ $ARGUMENTS
284
397
  4. **Tell @Agentuity Coder Memory to memorialize** the completed session
285
398
 
286
399
  ## Guidelines
287
- - **Always delegate** — use Scout for research, Builder for code, Reviewer for verification
400
+ - **Use Architect for implementation** — Architect has GPT Codex with maximum reasoning, ideal for autonomous work
401
+ - Use regular Builder only for trivial fixes within an iteration
288
402
  - Ask Memory for context at each iteration start
289
403
  - Store checkpoints at each iteration end
290
- - If stuck, ask Scout to re-evaluate before pausing
404
+ - If stuck on architecture, consult Planner before trying more approaches
291
405
  - Use @Agentuity Coder Expert for sandbox/cloud operations
292
406
  - Respect max iterations (50 default)`,
293
407
  agent: 'Agentuity Coder Lead',
@@ -295,38 +409,166 @@ $ARGUMENTS
295
409
  },
296
410
  };
297
411
  }
298
- function createTools(tool) {
299
- const coderDelegate = tool((s) => ({
412
+ function createSkillCommands(skills) {
413
+ const commands = {};
414
+ for (const skill of skills) {
415
+ const baseDir = normalizeBaseDir(skill.resolvedPath);
416
+ commands[skill.name] = {
417
+ name: skill.name,
418
+ description: skill.metadata.description,
419
+ template: `<skill-instruction>
420
+ Base directory for this skill: ${baseDir}/
421
+ File references (@path) in this skill are relative to this directory.
422
+
423
+ ${skill.content}
424
+ </skill-instruction>
425
+
426
+ <user-request>
427
+ $ARGUMENTS
428
+ </user-request>`,
429
+ ...(skill.metadata.agent ? { agent: skill.metadata.agent } : {}),
430
+ ...(skill.metadata.model ? { model: skill.metadata.model } : {}),
431
+ ...(skill.metadata['argument-hint']
432
+ ? { argumentHint: skill.metadata['argument-hint'] }
433
+ : {}),
434
+ ...(skill.metadata.subtask ? { subtask: true } : {}),
435
+ };
436
+ }
437
+ return commands;
438
+ }
439
+ function normalizeBaseDir(path) {
440
+ return path.replace(/[\\/]+$/, '');
441
+ }
442
+ function createTools(backgroundManager) {
443
+ // Use the schema from @opencode-ai/plugin's tool helper to avoid Zod version mismatches
444
+ const s = tool.schema;
445
+ const coderDelegate = tool({
300
446
  description: `Delegate a task to a specialized Agentuity Coder agent.
301
447
 
302
448
  Use this to:
303
449
  - Scout: Explore codebase, find patterns, research documentation
304
- - Builder: Implement features, write code, run tests
450
+ - Builder: Implement features, write code, run tests (interactive work)
451
+ - Architect: Complex autonomous tasks, Cadence mode, deep reasoning (GPT Codex)
305
452
  - Reviewer: Review changes, catch issues, apply fixes
306
453
  - Memory: Store context, remember decisions across sessions
307
- - Expert: Get help with Agentuity CLI and cloud services`,
308
- args: s.object({
454
+ - Expert: Get help with Agentuity CLI and cloud services
455
+ - Planner: Strategic advisor for complex architecture and deep planning (read-only)`,
456
+ args: {
309
457
  agent: s
310
- .enum(['scout', 'builder', 'reviewer', 'memory', 'expert'])
458
+ .enum([
459
+ 'scout',
460
+ 'builder',
461
+ 'architect',
462
+ 'reviewer',
463
+ 'memory',
464
+ 'expert',
465
+ 'planner',
466
+ 'runner',
467
+ ])
311
468
  .describe('Which agent to delegate to'),
312
469
  task: s.string().describe('Clear description of the task'),
313
470
  context: s.string().optional().describe('Additional context from previous tasks'),
314
- }),
315
- execute: async (args) => {
471
+ },
472
+ async execute(args) {
316
473
  const mention = AGENT_MENTIONS[args.agent];
317
474
  let prompt = `${mention}\n\n## Task\n${args.task}`;
318
475
  if (args.context) {
319
476
  prompt = `${mention}\n\n## Context\n${args.context}\n\n## Task\n${args.task}`;
320
477
  }
321
- return {
322
- output: `To delegate this task, use the Task tool with this prompt:\n\n${prompt}\n\nThe ${args.agent} agent will handle this task.`,
323
- };
478
+ return `To delegate this task, use the Task tool with this prompt:\n\n${prompt}\n\nThe ${args.agent} agent will handle this task.`;
324
479
  },
325
- }));
326
- // Type assertion needed because the tool() helper returns unknown
327
- // but the runtime type is correct (it's created by OpenCode's tool helper)
480
+ });
481
+ const backgroundTask = tool({
482
+ description: `Launch a task to run in the background. Use this for parallel execution of multiple independent tasks.
483
+
484
+ IMPORTANT: Use this tool instead of the 'task' tool when:
485
+ - You need to run multiple agents in parallel
486
+ - Tasks are independent and don't need sequential execution
487
+ - The user asks for "parallel", "background", or "concurrent" work`,
488
+ args: {
489
+ agent: s
490
+ .enum([
491
+ 'lead',
492
+ 'scout',
493
+ 'builder',
494
+ 'architect',
495
+ 'reviewer',
496
+ 'memory',
497
+ 'expert',
498
+ 'planner',
499
+ 'runner',
500
+ ])
501
+ .describe('Agent role to run the task'),
502
+ task: s.string().describe('Task prompt to run in the background'),
503
+ description: s.string().optional().describe('Short description of the task'),
504
+ },
505
+ async execute(args, context) {
506
+ const parentSessionId = context.sessionID;
507
+ if (!parentSessionId) {
508
+ return JSON.stringify({
509
+ taskId: 'unknown',
510
+ status: 'error',
511
+ message: 'Missing session context for background task.',
512
+ });
513
+ }
514
+ const agentName = resolveAgentName(args.agent);
515
+ const bgTask = await backgroundManager.launch({
516
+ description: args.description ?? args.task,
517
+ prompt: args.task,
518
+ agent: agentName,
519
+ parentSessionId,
520
+ parentMessageId: context.messageID,
521
+ });
522
+ return JSON.stringify({
523
+ taskId: bgTask.id,
524
+ status: bgTask.status,
525
+ message: bgTask.status === 'error'
526
+ ? (bgTask.error ?? 'Failed to launch background task.')
527
+ : 'Background task launched.',
528
+ });
529
+ },
530
+ });
531
+ const backgroundOutput = tool({
532
+ description: 'Retrieve output for a background task.',
533
+ args: {
534
+ task_id: s.string().describe('Background task ID'),
535
+ },
536
+ async execute(args) {
537
+ const bgTask = backgroundManager.getTask(args.task_id);
538
+ if (!bgTask) {
539
+ return JSON.stringify({
540
+ taskId: args.task_id,
541
+ status: 'error',
542
+ error: 'Task not found.',
543
+ });
544
+ }
545
+ return JSON.stringify({
546
+ taskId: bgTask.id,
547
+ status: bgTask.status,
548
+ result: bgTask.result,
549
+ error: bgTask.error,
550
+ });
551
+ },
552
+ });
553
+ const backgroundCancel = tool({
554
+ description: 'Cancel a running background task.',
555
+ args: {
556
+ task_id: s.string().describe('Background task ID'),
557
+ },
558
+ async execute(args) {
559
+ const success = backgroundManager.cancel(args.task_id);
560
+ return JSON.stringify({
561
+ taskId: args.task_id,
562
+ success,
563
+ message: success ? 'Background task cancelled.' : 'Unable to cancel task.',
564
+ });
565
+ },
566
+ });
328
567
  return {
329
568
  coder_delegate: coderDelegate,
569
+ background_task: backgroundTask,
570
+ background_output: backgroundOutput,
571
+ background_cancel: backgroundCancel,
330
572
  };
331
573
  }
332
574
  // ─────────────────────────────────────────────────────────────────────────────
@@ -341,4 +583,61 @@ function extractSessionIdFromEvent(input) {
341
583
  return (inp.event.properties.sessionId ??
342
584
  inp.event.properties.sessionID);
343
585
  }
586
+ function resolveAgentName(role) {
587
+ const agent = agents[role];
588
+ return agent?.displayName ?? role;
589
+ }
590
+ function extractEventFromInput(input) {
591
+ if (typeof input !== 'object' || input === null)
592
+ return undefined;
593
+ const inp = input;
594
+ if (!inp.event || typeof inp.event.type !== 'string')
595
+ return undefined;
596
+ return { type: inp.event.type, properties: inp.event.properties };
597
+ }
598
+ function registerShutdownHandler(manager, tmuxManager, logger) {
599
+ if (typeof process === 'undefined') {
600
+ logger?.('[shutdown] process is undefined, cannot register handlers');
601
+ return;
602
+ }
603
+ const log = logger ?? (() => { });
604
+ let shutdownCalled = false;
605
+ log(`Registering shutdown handlers (PID: ${process.pid}, tmuxManager: ${tmuxManager ? 'yes' : 'no'})`);
606
+ log(`Current tracked sessions in tmuxManager: ${tmuxManager ? 'checking...' : 'N/A'}`);
607
+ const shutdown = (signal) => {
608
+ // Prevent multiple shutdown calls
609
+ if (shutdownCalled) {
610
+ log(`Shutdown already in progress, ignoring ${signal ?? 'unknown'} signal`);
611
+ return;
612
+ }
613
+ shutdownCalled = true;
614
+ log(`Shutdown triggered by ${signal ?? 'unknown'} signal`);
615
+ try {
616
+ log('Shutting down background manager...');
617
+ manager.shutdown();
618
+ log('Background manager shutdown complete');
619
+ }
620
+ catch (error) {
621
+ log(`Background manager shutdown error: ${error}`);
622
+ }
623
+ if (tmuxManager) {
624
+ try {
625
+ log('Cleaning up tmux sessions...');
626
+ // Use sync version to ensure cleanup completes before process exits
627
+ tmuxManager.cleanupSync();
628
+ log('Tmux cleanup complete');
629
+ }
630
+ catch (error) {
631
+ log(`Tmux cleanup error: ${error}`);
632
+ }
633
+ }
634
+ log('Shutdown complete');
635
+ };
636
+ process.once('beforeExit', () => shutdown('beforeExit'));
637
+ process.once('SIGINT', () => shutdown('SIGINT'));
638
+ process.once('SIGTERM', () => shutdown('SIGTERM'));
639
+ process.once('SIGHUP', () => shutdown('SIGHUP')); // Handle tmux pane close
640
+ process.once('exit', () => shutdown('exit')); // Also handle exit event for extra safety
641
+ log('Shutdown handlers registered for: beforeExit, SIGINT, SIGTERM, SIGHUP, exit');
642
+ }
344
643
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface ParsedFrontmatter<T = Record<string, unknown>> {
2
+ data: T;
3
+ body: string;
4
+ }
5
+ export declare function parseFrontmatter<T = Record<string, unknown>>(content: string): ParsedFrontmatter<T>;
6
+ export {};
7
+ //# sourceMappingURL=frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/skills/frontmatter.ts"],"names":[],"mappings":"AAEA,UAAU,iBAAiB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,OAAO,EAAE,MAAM,GACb,iBAAiB,CAAC,CAAC,CAAC,CAetB"}
@@ -0,0 +1,17 @@
1
+ import yaml from 'yaml';
2
+ export function parseFrontmatter(content) {
3
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
4
+ if (!match) {
5
+ return { data: {}, body: content.trim() };
6
+ }
7
+ const frontmatter = match[1] ?? '';
8
+ const body = content.slice(match[0].length).trim();
9
+ try {
10
+ const data = yaml.parse(frontmatter);
11
+ return { data: (data ?? {}), body };
12
+ }
13
+ catch {
14
+ return { data: {}, body: content.trim() };
15
+ }
16
+ }
17
+ //# sourceMappingURL=frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/skills/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB,MAAM,UAAU,gBAAgB,CAC/B,OAAe;IAEf,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,EAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAEnD,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAM,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAM,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,IAAI,EAAE,EAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAChD,CAAC;AACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './types';
2
+ export * from './frontmatter';
3
+ export * from './loader';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './types';
2
+ export * from './frontmatter';
3
+ export * from './loader';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { LoadedSkill, SkillScope, SkillsConfig } from './types';
2
+ /**
3
+ * Load skills from standard directories.
4
+ * Priority order (later overrides earlier):
5
+ * 1. User OpenCode: ~/.config/opencode/skills/
6
+ * 2. User Agentuity: ~/.config/agentuity/opencode/skills/
7
+ * 3. User Claude Code compat: ~/.claude/skills/
8
+ * 4. Project OpenCode: ./.opencode/skills/
9
+ * 5. Project Claude Code compat: ./.claude/skills/
10
+ */
11
+ export declare function loadAllSkills(config?: SkillsConfig): Promise<LoadedSkill[]>;
12
+ /**
13
+ * Load skills from a single directory
14
+ */
15
+ export declare function loadSkillsFromDir(dir: string, scope: SkillScope): Promise<LoadedSkill[]>;
16
+ /**
17
+ * Get skill by name from loaded skills
18
+ */
19
+ export declare function getSkillByName(skills: LoadedSkill[], name: string): LoadedSkill | undefined;
20
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAiB,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAUpF;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAkCjF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA6C9F;AAqCD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE3F"}