@agentuity/opencode 0.1.39 → 0.1.41
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.
- package/README.md +321 -9
- package/dist/agents/architect.d.ts +4 -0
- package/dist/agents/architect.d.ts.map +1 -0
- package/dist/agents/architect.js +259 -0
- package/dist/agents/architect.js.map +1 -0
- package/dist/agents/builder.d.ts +1 -1
- package/dist/agents/builder.d.ts.map +1 -1
- package/dist/agents/builder.js +44 -1
- package/dist/agents/builder.js.map +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +6 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/lead.d.ts +1 -1
- package/dist/agents/lead.d.ts.map +1 -1
- package/dist/agents/lead.js +183 -19
- package/dist/agents/lead.js.map +1 -1
- package/dist/agents/planner.d.ts +4 -0
- package/dist/agents/planner.d.ts.map +1 -0
- package/dist/agents/planner.js +158 -0
- package/dist/agents/planner.js.map +1 -0
- package/dist/agents/runner.d.ts +4 -0
- package/dist/agents/runner.d.ts.map +1 -0
- package/dist/agents/runner.js +364 -0
- package/dist/agents/runner.js.map +1 -0
- package/dist/agents/types.d.ts +5 -1
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/background/concurrency.d.ts +36 -0
- package/dist/background/concurrency.d.ts.map +1 -0
- package/dist/background/concurrency.js +92 -0
- package/dist/background/concurrency.js.map +1 -0
- package/dist/background/index.d.ts +5 -0
- package/dist/background/index.d.ts.map +1 -0
- package/dist/background/index.js +4 -0
- package/dist/background/index.js.map +1 -0
- package/dist/background/manager.d.ts +54 -0
- package/dist/background/manager.d.ts.map +1 -0
- package/dist/background/manager.js +409 -0
- package/dist/background/manager.js.map +1 -0
- package/dist/background/types.d.ts +47 -0
- package/dist/background/types.d.ts.map +1 -0
- package/dist/background/types.js +2 -0
- package/dist/background/types.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/loader.d.ts +24 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +102 -23
- package/dist/config/loader.js.map +1 -1
- package/dist/config/presets.d.ts +16 -0
- package/dist/config/presets.d.ts.map +1 -0
- package/dist/config/presets.js +20 -0
- package/dist/config/presets.js.map +1 -0
- package/dist/config/validation.d.ts +26 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +48 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/plugin/hooks/keyword.d.ts.map +1 -1
- package/dist/plugin/hooks/keyword.js +3 -0
- package/dist/plugin/hooks/keyword.js.map +1 -1
- package/dist/plugin/plugin.d.ts.map +1 -1
- package/dist/plugin/plugin.js +297 -36
- package/dist/plugin/plugin.js.map +1 -1
- package/dist/skills/frontmatter.d.ts +7 -0
- package/dist/skills/frontmatter.d.ts.map +1 -0
- package/dist/skills/frontmatter.js +17 -0
- package/dist/skills/frontmatter.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +4 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/loader.d.ts +20 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +152 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/types.d.ts +41 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/tmux/decision-engine.d.ts +24 -0
- package/dist/tmux/decision-engine.d.ts.map +1 -0
- package/dist/tmux/decision-engine.js +193 -0
- package/dist/tmux/decision-engine.js.map +1 -0
- package/dist/tmux/executor.d.ts +56 -0
- package/dist/tmux/executor.d.ts.map +1 -0
- package/dist/tmux/executor.js +231 -0
- package/dist/tmux/executor.js.map +1 -0
- package/dist/tmux/index.d.ts +7 -0
- package/dist/tmux/index.d.ts.map +1 -0
- package/dist/tmux/index.js +7 -0
- package/dist/tmux/index.js.map +1 -0
- package/dist/tmux/manager.d.ts +80 -0
- package/dist/tmux/manager.d.ts.map +1 -0
- package/dist/tmux/manager.js +276 -0
- package/dist/tmux/manager.js.map +1 -0
- package/dist/tmux/state-query.d.ts +7 -0
- package/dist/tmux/state-query.d.ts.map +1 -0
- package/dist/tmux/state-query.js +67 -0
- package/dist/tmux/state-query.js.map +1 -0
- package/dist/tmux/types.d.ts +96 -0
- package/dist/tmux/types.d.ts.map +1 -0
- package/dist/tmux/types.js +8 -0
- package/dist/tmux/types.js.map +1 -0
- package/dist/tmux/utils.d.ts +32 -0
- package/dist/tmux/utils.d.ts.map +1 -0
- package/dist/tmux/utils.js +80 -0
- package/dist/tmux/utils.js.map +1 -0
- package/dist/tools/background.d.ts +61 -0
- package/dist/tools/background.d.ts.map +1 -0
- package/dist/tools/background.js +78 -0
- package/dist/tools/background.js.map +1 -0
- package/dist/tools/delegate.d.ts +6 -0
- package/dist/tools/delegate.d.ts.map +1 -1
- package/dist/tools/delegate.js +8 -2
- package/dist/tools/delegate.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/types.d.ts +118 -18
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +49 -7
- package/dist/types.js.map +1 -1
- package/package.json +4 -3
- package/src/agents/architect.ts +262 -0
- package/src/agents/builder.ts +44 -1
- package/src/agents/index.ts +6 -0
- package/src/agents/lead.ts +183 -19
- package/src/agents/planner.ts +161 -0
- package/src/agents/runner.ts +367 -0
- package/src/agents/types.ts +5 -1
- package/src/background/concurrency.ts +116 -0
- package/src/background/index.ts +4 -0
- package/src/background/manager.ts +478 -0
- package/src/background/types.ts +52 -0
- package/src/config/index.ts +2 -0
- package/src/config/loader.ts +128 -31
- package/src/config/presets.ts +21 -0
- package/src/config/validation.ts +70 -0
- package/src/index.ts +1 -0
- package/src/plugin/hooks/keyword.ts +3 -0
- package/src/plugin/plugin.ts +323 -42
- package/src/skills/frontmatter.ts +25 -0
- package/src/skills/index.ts +3 -0
- package/src/skills/loader.ts +185 -0
- package/src/skills/types.ts +43 -0
- package/src/tmux/decision-engine.ts +246 -0
- package/src/tmux/executor.ts +286 -0
- package/src/tmux/index.ts +11 -0
- package/src/tmux/manager.ts +331 -0
- package/src/tmux/state-query.ts +74 -0
- package/src/tmux/types.ts +106 -0
- package/src/tmux/utils.ts +85 -0
- package/src/tools/background.ts +145 -0
- package/src/tools/delegate.ts +8 -2
- package/src/tools/index.ts +9 -0
- package/src/types.ts +88 -15
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { runTmuxCommand } from './utils';
|
|
2
|
+
/**
|
|
3
|
+
* Query the current tmux window state
|
|
4
|
+
* Returns information about all panes in the current window
|
|
5
|
+
*/
|
|
6
|
+
export async function queryWindowState(sourcePaneId) {
|
|
7
|
+
const result = await runTmuxCommand([
|
|
8
|
+
'list-panes',
|
|
9
|
+
'-t',
|
|
10
|
+
sourcePaneId,
|
|
11
|
+
'-F',
|
|
12
|
+
'#{pane_id},#{pane_width},#{pane_height},#{pane_left},#{pane_top},#{pane_title},#{pane_active},#{window_width},#{window_height}',
|
|
13
|
+
]);
|
|
14
|
+
if (!result.success) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const lines = result.output
|
|
18
|
+
.split('\n')
|
|
19
|
+
.map((line) => line.trim())
|
|
20
|
+
.filter(Boolean);
|
|
21
|
+
if (lines.length === 0)
|
|
22
|
+
return null;
|
|
23
|
+
const panes = [];
|
|
24
|
+
let windowWidth = 0;
|
|
25
|
+
let windowHeight = 0;
|
|
26
|
+
for (const line of lines) {
|
|
27
|
+
const parts = line.split(',');
|
|
28
|
+
if (parts.length < 9)
|
|
29
|
+
continue;
|
|
30
|
+
const windowWidthValue = Number(parts[parts.length - 2]);
|
|
31
|
+
const windowHeightValue = Number(parts[parts.length - 1]);
|
|
32
|
+
const isActiveValue = parts[parts.length - 3] === '1';
|
|
33
|
+
const title = parts.slice(5, parts.length - 3).join(',');
|
|
34
|
+
const width = Number(parts[1]);
|
|
35
|
+
const height = Number(parts[2]);
|
|
36
|
+
const left = Number(parts[3]);
|
|
37
|
+
const top = Number(parts[4]);
|
|
38
|
+
if ([width, height, left, top].some((value) => Number.isNaN(value))) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const paneInfo = {
|
|
42
|
+
paneId: parts[0],
|
|
43
|
+
width,
|
|
44
|
+
height,
|
|
45
|
+
left,
|
|
46
|
+
top,
|
|
47
|
+
title,
|
|
48
|
+
isActive: isActiveValue,
|
|
49
|
+
};
|
|
50
|
+
if (!Number.isNaN(windowWidthValue))
|
|
51
|
+
windowWidth = windowWidthValue;
|
|
52
|
+
if (!Number.isNaN(windowHeightValue))
|
|
53
|
+
windowHeight = windowHeightValue;
|
|
54
|
+
panes.push(paneInfo);
|
|
55
|
+
}
|
|
56
|
+
if (panes.length === 0)
|
|
57
|
+
return null;
|
|
58
|
+
const mainPane = panes.find((pane) => pane.paneId === sourcePaneId) ?? null;
|
|
59
|
+
const agentPanes = panes.filter((pane) => pane.paneId !== sourcePaneId);
|
|
60
|
+
return {
|
|
61
|
+
windowWidth,
|
|
62
|
+
windowHeight,
|
|
63
|
+
mainPane,
|
|
64
|
+
agentPanes,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=state-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-query.js","sourceRoot":"","sources":["../../src/tmux/state-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Information about a tmux pane
|
|
3
|
+
*/
|
|
4
|
+
export interface TmuxPaneInfo {
|
|
5
|
+
paneId: string;
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
left: number;
|
|
9
|
+
top: number;
|
|
10
|
+
title: string;
|
|
11
|
+
isActive: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Current state of the tmux window
|
|
15
|
+
*/
|
|
16
|
+
export interface WindowState {
|
|
17
|
+
windowWidth: number;
|
|
18
|
+
windowHeight: number;
|
|
19
|
+
mainPane: TmuxPaneInfo | null;
|
|
20
|
+
agentPanes: TmuxPaneInfo[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Tracked session for a background agent in tmux
|
|
24
|
+
*/
|
|
25
|
+
export interface TrackedSession {
|
|
26
|
+
sessionId: string;
|
|
27
|
+
paneId: string;
|
|
28
|
+
description: string;
|
|
29
|
+
createdAt: Date;
|
|
30
|
+
lastSeenAt: Date;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Direction for splitting panes
|
|
34
|
+
*/
|
|
35
|
+
export type SplitDirection = '-h' | '-v';
|
|
36
|
+
/**
|
|
37
|
+
* Actions for managing panes
|
|
38
|
+
*/
|
|
39
|
+
export type PaneAction = {
|
|
40
|
+
type: 'spawn';
|
|
41
|
+
sessionId: string;
|
|
42
|
+
description: string;
|
|
43
|
+
targetPaneId: string;
|
|
44
|
+
splitDirection: SplitDirection;
|
|
45
|
+
} | {
|
|
46
|
+
type: 'close';
|
|
47
|
+
paneId: string;
|
|
48
|
+
sessionId: string;
|
|
49
|
+
} | {
|
|
50
|
+
type: 'replace';
|
|
51
|
+
paneId: string;
|
|
52
|
+
oldSessionId: string;
|
|
53
|
+
newSessionId: string;
|
|
54
|
+
description: string;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Decision result from the spawn decision engine
|
|
58
|
+
*/
|
|
59
|
+
export interface SpawnDecision {
|
|
60
|
+
canSpawn: boolean;
|
|
61
|
+
actions: PaneAction[];
|
|
62
|
+
reason?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Capacity configuration for pane layout
|
|
66
|
+
*/
|
|
67
|
+
export interface CapacityConfig {
|
|
68
|
+
mainPaneMinWidth: number;
|
|
69
|
+
agentPaneMinWidth: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Session mapping for decision engine
|
|
73
|
+
*/
|
|
74
|
+
export interface SessionMapping {
|
|
75
|
+
sessionId: string;
|
|
76
|
+
paneId: string;
|
|
77
|
+
createdAt: Date;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Configuration for tmux integration
|
|
81
|
+
*
|
|
82
|
+
* Agents spawn in a dedicated "Agents" window with tiled grid layout.
|
|
83
|
+
* This keeps the main pane untouched while grouping all agent panes together.
|
|
84
|
+
*/
|
|
85
|
+
export interface TmuxConfig {
|
|
86
|
+
enabled: boolean;
|
|
87
|
+
maxPanes: number;
|
|
88
|
+
mainPaneMinWidth: number;
|
|
89
|
+
agentPaneMinWidth: number;
|
|
90
|
+
}
|
|
91
|
+
export declare const MIN_PANE_WIDTH = 52;
|
|
92
|
+
export declare const MIN_PANE_HEIGHT = 11;
|
|
93
|
+
export declare const POLL_INTERVAL_MS = 2000;
|
|
94
|
+
export declare const SESSION_MISSING_GRACE_MS = 5000;
|
|
95
|
+
export declare const SESSION_TIMEOUT_MS: number;
|
|
96
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tmux/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,UAAU,GACnB;IACA,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;CAC9B,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACpD;IACA,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACnB,CAAC;AAEL;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAGD,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,eAAe,KAAK,CAAC;AAGlC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,kBAAkB,QAAiB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Minimum pane dimensions
|
|
2
|
+
export const MIN_PANE_WIDTH = 52;
|
|
3
|
+
export const MIN_PANE_HEIGHT = 11;
|
|
4
|
+
// Polling intervals
|
|
5
|
+
export const POLL_INTERVAL_MS = 2000;
|
|
6
|
+
export const SESSION_MISSING_GRACE_MS = 5000;
|
|
7
|
+
export const SESSION_TIMEOUT_MS = 10 * 60 * 1000;
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tmux/types.ts"],"names":[],"mappings":"AAkGA,0BAA0B;AAC1B,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC,oBAAoB;AACpB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if running inside a tmux session
|
|
3
|
+
*/
|
|
4
|
+
export declare function isInsideTmux(): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Get the current pane ID
|
|
7
|
+
*/
|
|
8
|
+
export declare function getCurrentPaneId(): string | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Get the path to the tmux binary
|
|
11
|
+
*/
|
|
12
|
+
export declare function getTmuxPath(): Promise<string | null>;
|
|
13
|
+
/**
|
|
14
|
+
* Run a tmux command and return output
|
|
15
|
+
*/
|
|
16
|
+
export declare function runTmuxCommand(args: string[]): Promise<{
|
|
17
|
+
success: boolean;
|
|
18
|
+
output: string;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Run a tmux command synchronously (for shutdown scenarios)
|
|
22
|
+
* Uses spawnSync to ensure completion before process exit
|
|
23
|
+
*/
|
|
24
|
+
export declare function runTmuxCommandSync(args: string[]): {
|
|
25
|
+
success: boolean;
|
|
26
|
+
output: string;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Get the path to the tmux binary synchronously
|
|
30
|
+
*/
|
|
31
|
+
export declare function getTmuxPathSync(): string | null;
|
|
32
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tmux/utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS1D;AAED;;GAEG;AACH,wBAAsB,cAAc,CACnC,IAAI,EAAE,MAAM,EAAE,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAgBvF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAS/C"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { spawn, spawnSync } from 'bun';
|
|
2
|
+
/**
|
|
3
|
+
* Check if running inside a tmux session
|
|
4
|
+
*/
|
|
5
|
+
export function isInsideTmux() {
|
|
6
|
+
return !!process.env.TMUX;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Get the current pane ID
|
|
10
|
+
*/
|
|
11
|
+
export function getCurrentPaneId() {
|
|
12
|
+
return process.env.TMUX_PANE;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get the path to the tmux binary
|
|
16
|
+
*/
|
|
17
|
+
export async function getTmuxPath() {
|
|
18
|
+
try {
|
|
19
|
+
const proc = spawn(['which', 'tmux'], { stdout: 'pipe' });
|
|
20
|
+
await proc.exited;
|
|
21
|
+
const output = await new Response(proc.stdout).text();
|
|
22
|
+
return output.trim() || null;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Run a tmux command and return output
|
|
30
|
+
*/
|
|
31
|
+
export async function runTmuxCommand(args) {
|
|
32
|
+
const tmux = await getTmuxPath();
|
|
33
|
+
if (!tmux)
|
|
34
|
+
return { success: false, output: 'tmux not found' };
|
|
35
|
+
const proc = spawn([tmux, ...args], { stdout: 'pipe', stderr: 'pipe' });
|
|
36
|
+
const exitCode = await proc.exited;
|
|
37
|
+
const stdout = await new Response(proc.stdout).text();
|
|
38
|
+
const stderr = await new Response(proc.stderr).text();
|
|
39
|
+
return {
|
|
40
|
+
success: exitCode === 0,
|
|
41
|
+
output: exitCode === 0 ? stdout.trim() : stderr.trim(),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Run a tmux command synchronously (for shutdown scenarios)
|
|
46
|
+
* Uses spawnSync to ensure completion before process exit
|
|
47
|
+
*/
|
|
48
|
+
export function runTmuxCommandSync(args) {
|
|
49
|
+
const tmux = getTmuxPathSync();
|
|
50
|
+
if (!tmux)
|
|
51
|
+
return { success: false, output: 'tmux not found' };
|
|
52
|
+
try {
|
|
53
|
+
const result = spawnSync([tmux, ...args], { timeout: 2000 });
|
|
54
|
+
const stdout = result.stdout?.toString() ?? '';
|
|
55
|
+
const stderr = result.stderr?.toString() ?? '';
|
|
56
|
+
return {
|
|
57
|
+
success: result.exitCode === 0,
|
|
58
|
+
output: result.exitCode === 0 ? stdout.trim() : stderr.trim(),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return { success: false, output: 'tmux command failed' };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get the path to the tmux binary synchronously
|
|
67
|
+
*/
|
|
68
|
+
export function getTmuxPathSync() {
|
|
69
|
+
try {
|
|
70
|
+
const result = spawnSync(['which', 'tmux']);
|
|
71
|
+
if (result.exitCode !== 0)
|
|
72
|
+
return null;
|
|
73
|
+
const output = result.stdout?.toString() ?? '';
|
|
74
|
+
return output.trim() || null;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tmux/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolContext } from '@opencode-ai/plugin';
|
|
3
|
+
import type { BackgroundManager } from '../background';
|
|
4
|
+
export declare const BackgroundTaskArgsSchema: z.ZodObject<{
|
|
5
|
+
agent: z.ZodEnum<{
|
|
6
|
+
lead: "lead";
|
|
7
|
+
scout: "scout";
|
|
8
|
+
builder: "builder";
|
|
9
|
+
architect: "architect";
|
|
10
|
+
reviewer: "reviewer";
|
|
11
|
+
memory: "memory";
|
|
12
|
+
expert: "expert";
|
|
13
|
+
planner: "planner";
|
|
14
|
+
runner: "runner";
|
|
15
|
+
}>;
|
|
16
|
+
task: z.ZodString;
|
|
17
|
+
description: z.ZodOptional<z.ZodString>;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
export declare const BackgroundOutputArgsSchema: z.ZodObject<{
|
|
20
|
+
task_id: z.ZodString;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export declare const BackgroundCancelArgsSchema: z.ZodObject<{
|
|
23
|
+
task_id: z.ZodString;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
export type BackgroundTaskArgs = z.infer<typeof BackgroundTaskArgsSchema>;
|
|
26
|
+
export type BackgroundOutputArgs = z.infer<typeof BackgroundOutputArgsSchema>;
|
|
27
|
+
export type BackgroundCancelArgs = z.infer<typeof BackgroundCancelArgsSchema>;
|
|
28
|
+
export declare function createBackgroundTools(manager: BackgroundManager): {
|
|
29
|
+
backgroundTaskTool: {
|
|
30
|
+
name: string;
|
|
31
|
+
description: string;
|
|
32
|
+
args: typeof BackgroundTaskArgsSchema;
|
|
33
|
+
execute: (args: BackgroundTaskArgs, context: ToolContext) => Promise<{
|
|
34
|
+
taskId: string;
|
|
35
|
+
status: string;
|
|
36
|
+
message: string;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
39
|
+
backgroundOutputTool: {
|
|
40
|
+
name: string;
|
|
41
|
+
description: string;
|
|
42
|
+
args: typeof BackgroundOutputArgsSchema;
|
|
43
|
+
execute: (args: BackgroundOutputArgs) => Promise<{
|
|
44
|
+
taskId: string;
|
|
45
|
+
status: string;
|
|
46
|
+
result?: string;
|
|
47
|
+
error?: string;
|
|
48
|
+
}>;
|
|
49
|
+
};
|
|
50
|
+
backgroundCancelTool: {
|
|
51
|
+
name: string;
|
|
52
|
+
description: string;
|
|
53
|
+
args: typeof BackgroundCancelArgsSchema;
|
|
54
|
+
execute: (args: BackgroundCancelArgs) => Promise<{
|
|
55
|
+
taskId: string;
|
|
56
|
+
success: boolean;
|
|
57
|
+
message: string;
|
|
58
|
+
}>;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=background.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../src/tools/background.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;iBAInC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;iBAErC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;iBAErC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG;IAClE,kBAAkB,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,OAAO,wBAAwB,CAAC;QACtC,OAAO,EAAE,CACR,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,WAAW,KAChB,OAAO,CAAC;YACZ,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SAChB,CAAC,CAAC;KACH,CAAC;IACF,oBAAoB,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,OAAO,0BAA0B,CAAC;QACxC,OAAO,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,OAAO,CAAC;YAChD,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,KAAK,CAAC,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACH,CAAC;IACF,oBAAoB,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,OAAO,0BAA0B,CAAC;QACxC,OAAO,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,OAAO,CAAC;YAChD,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,OAAO,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;SAChB,CAAC,CAAC;KACH,CAAC;CACF,CA+EA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { AgentRoleSchema } from '../types';
|
|
3
|
+
import { agents } from '../agents';
|
|
4
|
+
export const BackgroundTaskArgsSchema = z.object({
|
|
5
|
+
agent: AgentRoleSchema.describe('Agent role to run the task'),
|
|
6
|
+
task: z.string().describe('Task prompt to run in the background'),
|
|
7
|
+
description: z.string().optional().describe('Short description of the task'),
|
|
8
|
+
});
|
|
9
|
+
export const BackgroundOutputArgsSchema = z.object({
|
|
10
|
+
task_id: z.string().describe('Background task ID'),
|
|
11
|
+
});
|
|
12
|
+
export const BackgroundCancelArgsSchema = z.object({
|
|
13
|
+
task_id: z.string().describe('Background task ID'),
|
|
14
|
+
});
|
|
15
|
+
export function createBackgroundTools(manager) {
|
|
16
|
+
const backgroundTaskTool = {
|
|
17
|
+
name: 'background_task',
|
|
18
|
+
description: 'Launch a task to run in the background.',
|
|
19
|
+
args: BackgroundTaskArgsSchema,
|
|
20
|
+
async execute(args, context) {
|
|
21
|
+
const agentName = resolveAgentName(args.agent);
|
|
22
|
+
const task = await manager.launch({
|
|
23
|
+
description: args.description ?? args.task,
|
|
24
|
+
prompt: args.task,
|
|
25
|
+
agent: agentName,
|
|
26
|
+
parentSessionId: context.sessionID,
|
|
27
|
+
parentMessageId: context.messageID,
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
taskId: task.id,
|
|
31
|
+
status: task.status,
|
|
32
|
+
message: task.status === 'error'
|
|
33
|
+
? (task.error ?? 'Failed to launch background task.')
|
|
34
|
+
: 'Background task launched.',
|
|
35
|
+
};
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
const backgroundOutputTool = {
|
|
39
|
+
name: 'background_output',
|
|
40
|
+
description: 'Retrieve output for a background task.',
|
|
41
|
+
args: BackgroundOutputArgsSchema,
|
|
42
|
+
async execute(args) {
|
|
43
|
+
const task = manager.getTask(args.task_id);
|
|
44
|
+
if (!task) {
|
|
45
|
+
return {
|
|
46
|
+
taskId: args.task_id,
|
|
47
|
+
status: 'error',
|
|
48
|
+
error: 'Task not found.',
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
taskId: task.id,
|
|
53
|
+
status: task.status,
|
|
54
|
+
result: task.result,
|
|
55
|
+
error: task.error,
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
const backgroundCancelTool = {
|
|
60
|
+
name: 'background_cancel',
|
|
61
|
+
description: 'Cancel a running background task.',
|
|
62
|
+
args: BackgroundCancelArgsSchema,
|
|
63
|
+
async execute(args) {
|
|
64
|
+
const success = manager.cancel(args.task_id);
|
|
65
|
+
return {
|
|
66
|
+
taskId: args.task_id,
|
|
67
|
+
success,
|
|
68
|
+
message: success ? 'Background task cancelled.' : 'Unable to cancel task.',
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
return { backgroundTaskTool, backgroundOutputTool, backgroundCancelTool };
|
|
73
|
+
}
|
|
74
|
+
function resolveAgentName(role) {
|
|
75
|
+
const agent = agents[role];
|
|
76
|
+
return agent?.displayName ?? role;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=background.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background.js","sourceRoot":"","sources":["../../src/tools/background.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACjE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC5E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;CAClD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;CAClD,CAAC,CAAC;AAMH,MAAM,UAAU,qBAAqB,CAAC,OAA0B;IAoC/D,MAAM,kBAAkB,GAAG;QAC1B,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,yCAAyC;QACtD,IAAI,EAAE,wBAAwB;QAC9B,KAAK,CAAC,OAAO,CACZ,IAAwB,EACxB,OAAoB;YAMpB,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;gBACjC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI;gBAC1C,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,KAAK,EAAE,SAAS;gBAChB,eAAe,EAAE,OAAO,CAAC,SAAS;gBAClC,eAAe,EAAE,OAAO,CAAC,SAAS;aAClC,CAAC,CAAC;YAEH,OAAO;gBACN,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EACN,IAAI,CAAC,MAAM,KAAK,OAAO;oBACtB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,mCAAmC,CAAC;oBACrD,CAAC,CAAC,2BAA2B;aAC/B,CAAC;QACH,CAAC;KACD,CAAC;IAEF,MAAM,oBAAoB,GAAG;QAC5B,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,wCAAwC;QACrD,IAAI,EAAE,0BAA0B;QAChC,KAAK,CAAC,OAAO,CAAC,IAA0B;YAMvC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,OAAO;oBACN,MAAM,EAAE,IAAI,CAAC,OAAO;oBACpB,MAAM,EAAE,OAAO;oBACf,KAAK,EAAE,iBAAiB;iBACxB,CAAC;YACH,CAAC;YACD,OAAO;gBACN,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;aACjB,CAAC;QACH,CAAC;KACD,CAAC;IAEF,MAAM,oBAAoB,GAAG;QAC5B,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,mCAAmC;QAChD,IAAI,EAAE,0BAA0B;QAChC,KAAK,CAAC,OAAO,CAAC,IAA0B;YAKvC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO;gBACN,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,OAAO;gBACP,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,wBAAwB;aAC1E,CAAC;QACH,CAAC;KACD,CAAC;IAEF,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAe;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC;AACnC,CAAC"}
|
package/dist/tools/delegate.d.ts
CHANGED
|
@@ -3,9 +3,12 @@ export declare const DelegateArgsSchema: z.ZodObject<{
|
|
|
3
3
|
agent: z.ZodEnum<{
|
|
4
4
|
scout: "scout";
|
|
5
5
|
builder: "builder";
|
|
6
|
+
architect: "architect";
|
|
6
7
|
reviewer: "reviewer";
|
|
7
8
|
memory: "memory";
|
|
8
9
|
expert: "expert";
|
|
10
|
+
planner: "planner";
|
|
11
|
+
runner: "runner";
|
|
9
12
|
}>;
|
|
10
13
|
task: z.ZodString;
|
|
11
14
|
context: z.ZodOptional<z.ZodString>;
|
|
@@ -19,9 +22,12 @@ export declare const delegateTool: {
|
|
|
19
22
|
agent: z.ZodEnum<{
|
|
20
23
|
scout: "scout";
|
|
21
24
|
builder: "builder";
|
|
25
|
+
architect: "architect";
|
|
22
26
|
reviewer: "reviewer";
|
|
23
27
|
memory: "memory";
|
|
24
28
|
expert: "expert";
|
|
29
|
+
planner: "planner";
|
|
30
|
+
runner: "runner";
|
|
25
31
|
}>;
|
|
26
32
|
task: z.ZodString;
|
|
27
33
|
context: z.ZodOptional<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../src/tools/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../src/tools/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;iBAU7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAe9D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;kBAkBJ,YAAY,YAAY,OAAO,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAgBjF,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
package/dist/tools/delegate.js
CHANGED
|
@@ -2,7 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
// Schema for the delegate tool
|
|
3
3
|
export const DelegateArgsSchema = z.object({
|
|
4
4
|
agent: z
|
|
5
|
-
.enum(['scout', 'builder', 'reviewer', 'memory', 'expert'])
|
|
5
|
+
.enum(['scout', 'builder', 'architect', 'reviewer', 'memory', 'expert', 'planner', 'runner'])
|
|
6
6
|
.describe('The agent to delegate to'),
|
|
7
7
|
task: z.string().describe('Clear description of the task to delegate'),
|
|
8
8
|
context: z.string().optional().describe('Additional context from previous tasks'),
|
|
@@ -16,9 +16,12 @@ const AGENT_MENTIONS = {
|
|
|
16
16
|
lead: '@Agentuity Coder Lead',
|
|
17
17
|
scout: '@Agentuity Coder Scout',
|
|
18
18
|
builder: '@Agentuity Coder Builder',
|
|
19
|
+
architect: '@Agentuity Coder Architect',
|
|
19
20
|
reviewer: '@Agentuity Coder Reviewer',
|
|
20
21
|
memory: '@Agentuity Coder Memory',
|
|
21
22
|
expert: '@Agentuity Coder Expert',
|
|
23
|
+
planner: '@Agentuity Coder Planner',
|
|
24
|
+
runner: '@Agentuity Coder Runner',
|
|
22
25
|
};
|
|
23
26
|
export const delegateTool = {
|
|
24
27
|
name: 'coder_delegate',
|
|
@@ -26,10 +29,13 @@ export const delegateTool = {
|
|
|
26
29
|
|
|
27
30
|
Use this to:
|
|
28
31
|
- Scout: Explore codebase, find patterns, research documentation
|
|
29
|
-
- Builder: Implement features, write code, run tests
|
|
32
|
+
- Builder: Implement features, write code, run tests (interactive work)
|
|
33
|
+
- Architect: Complex autonomous tasks, Cadence mode, deep reasoning (GPT Codex)
|
|
30
34
|
- Reviewer: Review changes, catch issues, apply fixes
|
|
31
35
|
- Memory: Store context, remember decisions across sessions
|
|
32
36
|
- Expert: Get help with Agentuity CLI and cloud services
|
|
37
|
+
- Planner: Strategic advisor for complex architecture and deep planning (read-only)
|
|
38
|
+
- Runner: Run lint/build/test/typecheck/format/clean/install commands, returns structured results
|
|
33
39
|
|
|
34
40
|
The task will be executed by the specified agent and the result returned.`,
|
|
35
41
|
args: DelegateArgsSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../src/tools/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,+BAA+B;AAC/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,KAAK,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../src/tools/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,+BAA+B;AAC/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,KAAK,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;SAC5F,QAAQ,CAAC,0BAA0B,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACjF,aAAa,EAAE,CAAC;SACd,OAAO,EAAE;SACT,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,kDAAkD,CAAC;CAC9D,CAAC,CAAC;AAIH,oCAAoC;AACpC,MAAM,cAAc,GAA8B;IACjD,IAAI,EAAE,uBAAuB;IAC7B,KAAK,EAAE,wBAAwB;IAC/B,OAAO,EAAE,0BAA0B;IACnC,SAAS,EAAE,4BAA4B;IACvC,QAAQ,EAAE,2BAA2B;IACrC,MAAM,EAAE,yBAAyB;IACjC,MAAM,EAAE,yBAAyB;IACjC,OAAO,EAAE,0BAA0B;IACnC,MAAM,EAAE,yBAAyB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE;;;;;;;;;;;;0EAY4D;IAEzE,IAAI,EAAE,kBAAkB;IAExB,KAAK,CAAC,OAAO,CAAC,IAAkB,EAAE,QAAiB;QAClD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,KAAkB,CAAC,CAAC;QAExD,8BAA8B;QAC9B,IAAI,MAAM,GAAG,GAAG,OAAO,gBAAgB,IAAI,CAAC,IAAI,EAAE,CAAC;QAEnD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,OAAO,mBAAmB,IAAI,CAAC,OAAO,gBAAgB,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/E,CAAC;QAED,4EAA4E;QAC5E,4DAA4D;QAC5D,OAAO;YACN,MAAM,EAAE,iEAAiE,MAAM,WAAW,IAAI,CAAC,KAAK,+BAA+B;SACnI,CAAC;IACH,CAAC;CACD,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export { delegateTool, DelegateArgsSchema, type DelegateArgs } from './delegate';
|
|
2
|
+
export { createBackgroundTools, BackgroundTaskArgsSchema, BackgroundOutputArgsSchema, BackgroundCancelArgsSchema, type BackgroundTaskArgs, type BackgroundOutputArgs, type BackgroundCancelArgs, } from './background';
|
|
2
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EACN,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GACzB,MAAM,cAAc,CAAC"}
|
package/dist/tools/index.js
CHANGED
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAqB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAqB,MAAM,YAAY,CAAC;AACjF,OAAO,EACN,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,GAI1B,MAAM,cAAc,CAAC"}
|