@pi-unipi/subagents 0.1.0 → 0.1.2
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/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +20 -3
- package/dist/config.js.map +1 -1
- package/dist/custom-agents.d.ts +2 -2
- package/dist/custom-agents.d.ts.map +1 -1
- package/dist/custom-agents.js +17 -5
- package/dist/custom-agents.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -2
- package/dist/index.js.map +1 -1
- package/dist/widget.d.ts +6 -2
- package/dist/widget.d.ts.map +1 -1
- package/dist/widget.js +83 -21
- package/dist/widget.js.map +1 -1
- package/package.json +1 -1
- package/src/config.ts +22 -3
- package/src/custom-agents.ts +17 -5
- package/src/index.ts +22 -2
- package/src/widget.ts +97 -22
package/dist/config.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @pi-unipi/subagents — Config management
|
|
3
3
|
*
|
|
4
|
-
* Loads config from ~/.
|
|
4
|
+
* Loads config from ~/.unipi/config/subagents.json (global)
|
|
5
5
|
* and <workspace>/.unipi/config/subagents.json (override).
|
|
6
6
|
* Auto-generates on first run. Repairs corrupted files.
|
|
7
7
|
*/
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAsElD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAyCvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAI9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAI9E"}
|
package/dist/config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @pi-unipi/subagents — Config management
|
|
3
3
|
*
|
|
4
|
-
* Loads config from ~/.
|
|
4
|
+
* Loads config from ~/.unipi/config/subagents.json (global)
|
|
5
5
|
* and <workspace>/.unipi/config/subagents.json (override).
|
|
6
6
|
* Auto-generates on first run. Repairs corrupted files.
|
|
7
7
|
*/
|
|
@@ -31,6 +31,12 @@ function ensureDir(filePath) {
|
|
|
31
31
|
mkdirSync(dir, { recursive: true });
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
+
/** Ensure a directory exists (not a file path). */
|
|
35
|
+
function ensureDirExists(dirPath) {
|
|
36
|
+
if (!existsSync(dirPath)) {
|
|
37
|
+
mkdirSync(dirPath, { recursive: true });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
34
40
|
/** Write config atomically (write then rename). */
|
|
35
41
|
function writeConfigAtomic(filePath, config) {
|
|
36
42
|
const tmpPath = filePath + ".tmp";
|
|
@@ -73,13 +79,24 @@ function repairCorrupted(filePath) {
|
|
|
73
79
|
*/
|
|
74
80
|
export function initConfig(cwd) {
|
|
75
81
|
const globalPath = getGlobalConfigPath();
|
|
76
|
-
|
|
77
|
-
|
|
82
|
+
const globalDir = join(homedir(), ".unipi", "config");
|
|
83
|
+
const globalAgentsDir = join(homedir(), ".unipi", "config", "agents");
|
|
84
|
+
// Ensure directories exist
|
|
85
|
+
ensureDirExists(globalDir);
|
|
86
|
+
ensureDirExists(globalAgentsDir);
|
|
78
87
|
// Load or create global config
|
|
79
88
|
let globalConfig = loadConfigFromPath(globalPath);
|
|
80
89
|
if (globalConfig === null) {
|
|
81
90
|
globalConfig = repairCorrupted(globalPath);
|
|
82
91
|
}
|
|
92
|
+
// Ensure workspace directories exist if workspace exists
|
|
93
|
+
const workspaceDir = join(cwd, ".unipi", "config");
|
|
94
|
+
const workspaceAgentsDir = join(cwd, ".unipi", "config", "agents");
|
|
95
|
+
if (cwd && !cwd.startsWith(homedir())) {
|
|
96
|
+
// Only create workspace dirs if not in home directory
|
|
97
|
+
ensureDirExists(workspaceDir);
|
|
98
|
+
ensureDirExists(workspaceAgentsDir);
|
|
99
|
+
}
|
|
83
100
|
// Load workspace override if exists
|
|
84
101
|
const workspacePath = getWorkspaceConfigPath(cwd);
|
|
85
102
|
const workspaceConfig = loadConfigFromPath(workspacePath);
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,cAAc,GAAoB;IACtC,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,IAAI;IACb,KAAK,EAAE;QACL,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1B,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KACxB;CACF,CAAC;AAEF,6DAA6D;AAC7D,SAAS,mBAAmB;IAC1B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AAC/D,CAAC;AAED,oEAAoE;AACpE,SAAS,sBAAsB,CAAC,GAAW;IACzC,OAAO,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACzD,CAAC;AAED,+BAA+B;AAC/B,SAAS,SAAS,CAAC,QAAgB;IACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,mDAAmD;AACnD,SAAS,iBAAiB,CAAC,QAAgB,EAAE,MAAuB;IAClE,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,kEAAkE;AAClE,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,mBAAmB;QACnB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/D,OAAO,MAAyB,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,IAAI,CAAC;QACH,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;IACD,iBAAiB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC5C,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,cAAc,GAAoB;IACtC,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,IAAI;IACb,KAAK,EAAE;QACL,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1B,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KACxB;CACF,CAAC;AAEF,6DAA6D;AAC7D,SAAS,mBAAmB;IAC1B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AAC/D,CAAC;AAED,oEAAoE;AACpE,SAAS,sBAAsB,CAAC,GAAW;IACzC,OAAO,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACzD,CAAC;AAED,+BAA+B;AAC/B,SAAS,SAAS,CAAC,QAAgB;IACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,mDAAmD;AACnD,SAAS,eAAe,CAAC,OAAe;IACtC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,mDAAmD;AACnD,SAAS,iBAAiB,CAAC,QAAgB,EAAE,MAAuB;IAClE,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,kEAAkE;AAClE,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,mBAAmB;QACnB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/D,OAAO,MAAyB,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,IAAI,CAAC;QACH,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;IACD,iBAAiB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC5C,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEtE,2BAA2B;IAC3B,eAAe,CAAC,SAAS,CAAC,CAAC;IAC3B,eAAe,CAAC,eAAe,CAAC,CAAC;IAEjC,+BAA+B;IAC/B,IAAI,YAAY,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,yDAAyD;IACzD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnD,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACtC,sDAAsD;QACtD,eAAe,CAAC,YAAY,CAAC,CAAC;QAC9B,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,oCAAoC;IACpC,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAE1D,IAAI,eAAe,EAAE,CAAC;QACpB,yDAAyD;QACzD,OAAO;YACL,GAAG,YAAY;YACf,GAAG,eAAe;YAClB,KAAK,EAAE;gBACL,GAAG,YAAY,CAAC,KAAK;gBACrB,GAAG,eAAe,CAAC,KAAK;aACzB;SACF,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,SAAS,CAAC,UAAU,CAAC,CAAC;IACtB,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,MAAuB;IACtE,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAClD,SAAS,CAAC,aAAa,CAAC,CAAC;IACzB,iBAAiB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC"}
|
package/dist/custom-agents.d.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* @pi-unipi/subagents — Custom agent loader
|
|
3
3
|
*
|
|
4
4
|
* Discovers agent types from:
|
|
5
|
-
* - <workspace>/.
|
|
6
|
-
* - ~/.
|
|
5
|
+
* - <workspace>/.unipi/config/agents/*.md (project, highest priority)
|
|
6
|
+
* - ~/.unipi/config/agents/*.md (global)
|
|
7
7
|
*/
|
|
8
8
|
import type { AgentConfig } from "./types.js";
|
|
9
9
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-agents.d.ts","sourceRoot":"","sources":["../src/custom-agents.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"custom-agents.d.ts","sourceRoot":"","sources":["../src/custom-agents.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAyE9C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CA4BtE"}
|
package/dist/custom-agents.js
CHANGED
|
@@ -2,20 +2,30 @@
|
|
|
2
2
|
* @pi-unipi/subagents — Custom agent loader
|
|
3
3
|
*
|
|
4
4
|
* Discovers agent types from:
|
|
5
|
-
* - <workspace>/.
|
|
6
|
-
* - ~/.
|
|
5
|
+
* - <workspace>/.unipi/config/agents/*.md (project, highest priority)
|
|
6
|
+
* - ~/.unipi/config/agents/*.md (global)
|
|
7
7
|
*/
|
|
8
|
-
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
8
|
+
import { existsSync, readdirSync, readFileSync, renameSync } from "node:fs";
|
|
9
9
|
import { join } from "node:path";
|
|
10
10
|
import { homedir } from "node:os";
|
|
11
11
|
import { parseFrontmatter } from "@mariozechner/pi-coding-agent";
|
|
12
|
+
/** Backup a corrupted file by renaming to .bak */
|
|
13
|
+
function backupCorrupted(filePath) {
|
|
14
|
+
const backupPath = filePath + ".bak";
|
|
15
|
+
try {
|
|
16
|
+
renameSync(filePath, backupPath);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// If backup fails, just leave it
|
|
20
|
+
}
|
|
21
|
+
}
|
|
12
22
|
/** Get project agents directory. */
|
|
13
23
|
function getProjectAgentsDir(cwd) {
|
|
14
|
-
return join(cwd, ".
|
|
24
|
+
return join(cwd, ".unipi", "config", "agents");
|
|
15
25
|
}
|
|
16
26
|
/** Get global agents directory. */
|
|
17
27
|
function getGlobalAgentsDir() {
|
|
18
|
-
return join(homedir(), ".
|
|
28
|
+
return join(homedir(), ".unipi", "config", "agents");
|
|
19
29
|
}
|
|
20
30
|
/** All known built-in tool names. */
|
|
21
31
|
const BUILTIN_TOOL_NAMES = ["read", "bash", "edit", "write", "grep", "find", "ls"];
|
|
@@ -58,6 +68,8 @@ function loadAgentFromFile(filePath, source) {
|
|
|
58
68
|
};
|
|
59
69
|
}
|
|
60
70
|
catch {
|
|
71
|
+
// Corrupted file — backup and skip
|
|
72
|
+
backupCorrupted(filePath);
|
|
61
73
|
return null;
|
|
62
74
|
}
|
|
63
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-agents.js","sourceRoot":"","sources":["../src/custom-agents.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"custom-agents.js","sourceRoot":"","sources":["../src/custom-agents.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAc,KAAK,YAAY,EAAyB,MAAM,+BAA+B,CAAC;AA2BrG,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAc,KAAK,YAAY,EAAyB,MAAM,+BAA+B,CAAC;AA2BrG,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAoTxC"}
|
package/dist/index.js
CHANGED
|
@@ -62,6 +62,19 @@ export default function (pi) {
|
|
|
62
62
|
});
|
|
63
63
|
// Create widget
|
|
64
64
|
const widget = new AgentWidget(manager, agentActivity);
|
|
65
|
+
// Session start: notify agent about config paths
|
|
66
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
67
|
+
const homedir = require("os").homedir();
|
|
68
|
+
const globalConfig = `${homedir}/.unipi/config/subagents.json`;
|
|
69
|
+
const globalAgents = `${homedir}/.unipi/config/agents/`;
|
|
70
|
+
const workspaceConfig = `${ctx.cwd}/.unipi/config/subagents.json`;
|
|
71
|
+
const workspaceAgents = `${ctx.cwd}/.unipi/config/agents/`;
|
|
72
|
+
ctx.ui.notify(`UniPi Subagents config:\n` +
|
|
73
|
+
`• Global: ${globalConfig}\n` +
|
|
74
|
+
`• Global agents: ${globalAgents}\n` +
|
|
75
|
+
`• Workspace: ${workspaceConfig}\n` +
|
|
76
|
+
`• Workspace agents: ${workspaceAgents}`, "info");
|
|
77
|
+
});
|
|
65
78
|
// ESC propagation: abort all agents on session shutdown
|
|
66
79
|
pi.on("session_shutdown", async () => {
|
|
67
80
|
manager.abortAll();
|
|
@@ -122,7 +135,9 @@ export default function (pi) {
|
|
|
122
135
|
description: `Launch a sub-agent for parallel work.
|
|
123
136
|
|
|
124
137
|
Available agent types: ${builtinTypes}
|
|
125
|
-
Custom types can be defined in
|
|
138
|
+
Custom types can be defined in:
|
|
139
|
+
- ~/.unipi/config/agents/<name>.md (global)
|
|
140
|
+
- <workspace>/.unipi/config/agents/<name>.md (project)
|
|
126
141
|
|
|
127
142
|
Guidelines:
|
|
128
143
|
- Use "explore" for parallel file reads
|
|
@@ -132,7 +147,7 @@ Guidelines:
|
|
|
132
147
|
- Agents inherit the parent model by default`,
|
|
133
148
|
parameters: Type.Object({
|
|
134
149
|
type: Type.String({
|
|
135
|
-
description: `Agent type: ${builtinTypes}, or custom type from
|
|
150
|
+
description: `Agent type: ${builtinTypes}, or custom type from ~/.unipi/config/agents/*.md`,
|
|
136
151
|
}),
|
|
137
152
|
prompt: Type.String({
|
|
138
153
|
description: "The task for the agent to perform.",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/widget.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @pi-unipi/subagents — Live widget
|
|
3
3
|
*
|
|
4
4
|
* Shows running agents above the editor.
|
|
5
|
-
*
|
|
5
|
+
* Uses setWidget API for proper rendering.
|
|
6
6
|
*/
|
|
7
7
|
import type { AgentManager } from "./agent-manager.js";
|
|
8
8
|
import type { AgentActivity } from "./types.js";
|
|
@@ -12,11 +12,15 @@ export declare class AgentWidget {
|
|
|
12
12
|
private spinnerFrame;
|
|
13
13
|
private timer?;
|
|
14
14
|
private uiCtx?;
|
|
15
|
+
private widgetRegistered;
|
|
16
|
+
private tui?;
|
|
15
17
|
constructor(manager: AgentManager, activity: Map<string, AgentActivity>);
|
|
16
18
|
setUICtx(ctx: any): void;
|
|
17
19
|
ensureTimer(): void;
|
|
18
20
|
markFinished(_id: string): void;
|
|
19
21
|
update(): void;
|
|
20
|
-
private
|
|
22
|
+
private requestRender;
|
|
23
|
+
private renderWidget;
|
|
24
|
+
dispose(): void;
|
|
21
25
|
}
|
|
22
26
|
//# sourceMappingURL=widget.d.ts.map
|
package/dist/widget.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAqChD,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,KAAK,CAAC,CAAiC;IAC/C,OAAO,CAAC,KAAK,CAAC,CAAM;
|
|
1
|
+
{"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAqChD,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,KAAK,CAAC,CAAiC;IAC/C,OAAO,CAAC,KAAK,CAAC,CAAM;IACpB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,GAAG,CAAC,CAAM;gBAEN,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAKvE,QAAQ,CAAC,GAAG,EAAE,GAAG;IAQjB,WAAW;IAQX,YAAY,CAAC,GAAG,EAAE,MAAM;IASxB,MAAM;IAIN,OAAO,CAAC,aAAa;IAwCrB,OAAO,CAAC,YAAY;IA0DpB,OAAO;CAWR"}
|
package/dist/widget.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @pi-unipi/subagents — Live widget
|
|
3
3
|
*
|
|
4
4
|
* Shows running agents above the editor.
|
|
5
|
-
*
|
|
5
|
+
* Uses setWidget API for proper rendering.
|
|
6
6
|
*/
|
|
7
7
|
/** Spinner frames (braille). */
|
|
8
8
|
const SPINNER = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
@@ -45,23 +45,28 @@ export class AgentWidget {
|
|
|
45
45
|
spinnerFrame = 0;
|
|
46
46
|
timer;
|
|
47
47
|
uiCtx;
|
|
48
|
+
widgetRegistered = false;
|
|
49
|
+
tui;
|
|
48
50
|
constructor(manager, activity) {
|
|
49
51
|
this.manager = manager;
|
|
50
52
|
this.activity = activity;
|
|
51
53
|
}
|
|
52
54
|
setUICtx(ctx) {
|
|
53
|
-
this.uiCtx
|
|
55
|
+
if (ctx !== this.uiCtx) {
|
|
56
|
+
this.uiCtx = ctx;
|
|
57
|
+
this.widgetRegistered = false;
|
|
58
|
+
this.tui = undefined;
|
|
59
|
+
}
|
|
54
60
|
}
|
|
55
61
|
ensureTimer() {
|
|
56
62
|
if (this.timer)
|
|
57
63
|
return;
|
|
58
64
|
this.timer = setInterval(() => {
|
|
59
65
|
this.spinnerFrame = (this.spinnerFrame + 1) % SPINNER.length;
|
|
60
|
-
this.
|
|
66
|
+
this.requestRender();
|
|
61
67
|
}, 80);
|
|
62
68
|
}
|
|
63
69
|
markFinished(_id) {
|
|
64
|
-
// Check if any agents still running
|
|
65
70
|
if (!this.manager.hasRunning()) {
|
|
66
71
|
if (this.timer) {
|
|
67
72
|
clearInterval(this.timer);
|
|
@@ -70,23 +75,65 @@ export class AgentWidget {
|
|
|
70
75
|
}
|
|
71
76
|
}
|
|
72
77
|
update() {
|
|
73
|
-
this.
|
|
78
|
+
this.requestRender();
|
|
74
79
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
requestRender() {
|
|
81
|
+
if (!this.uiCtx)
|
|
82
|
+
return;
|
|
83
|
+
const allAgents = this.manager.listAgents();
|
|
84
|
+
const running = allAgents.filter((a) => a.status === "running" || a.status === "queued");
|
|
85
|
+
const hasActive = running.length > 0;
|
|
86
|
+
// Nothing to show — clear widget
|
|
87
|
+
if (!hasActive) {
|
|
88
|
+
if (this.widgetRegistered) {
|
|
89
|
+
this.uiCtx.setWidget("unipi-agents", undefined);
|
|
90
|
+
this.widgetRegistered = false;
|
|
91
|
+
this.tui = undefined;
|
|
92
|
+
}
|
|
81
93
|
return;
|
|
82
94
|
}
|
|
95
|
+
// Register widget callback once, then request re-render
|
|
96
|
+
if (!this.widgetRegistered) {
|
|
97
|
+
this.uiCtx.setWidget("unipi-agents", (tui, theme) => {
|
|
98
|
+
this.tui = tui;
|
|
99
|
+
return {
|
|
100
|
+
render: () => this.renderWidget(tui, theme),
|
|
101
|
+
invalidate: () => {
|
|
102
|
+
this.widgetRegistered = false;
|
|
103
|
+
this.tui = undefined;
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}, { placement: "aboveEditor" });
|
|
107
|
+
this.widgetRegistered = true;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// Widget already registered — request re-render
|
|
111
|
+
this.tui?.requestRender?.();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
renderWidget(tui, theme) {
|
|
115
|
+
const allAgents = this.manager.listAgents();
|
|
116
|
+
const running = allAgents.filter((a) => a.status === "running");
|
|
117
|
+
const queued = allAgents.filter((a) => a.status === "queued");
|
|
118
|
+
if (running.length === 0 && queued.length === 0)
|
|
119
|
+
return [];
|
|
120
|
+
const w = tui.terminal?.columns ?? 80;
|
|
121
|
+
const truncate = (line) => {
|
|
122
|
+
if (line.length <= w)
|
|
123
|
+
return line;
|
|
124
|
+
return line.slice(0, w - 1) + "…";
|
|
125
|
+
};
|
|
126
|
+
const frame = SPINNER[this.spinnerFrame % SPINNER.length];
|
|
83
127
|
const lines = [];
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
128
|
+
// Heading
|
|
129
|
+
lines.push(truncate(theme.fg("accent", "●") + " " + theme.fg("accent", "Agents")));
|
|
130
|
+
// Running agents (2 lines each: header + activity)
|
|
131
|
+
for (let i = 0; i < running.length; i++) {
|
|
132
|
+
const a = running[i];
|
|
133
|
+
const act = this.activity.get(a.id);
|
|
134
|
+
const toolCount = a.toolUses;
|
|
88
135
|
const tokens = act?.tokens ?? "";
|
|
89
|
-
const duration = formatMs(Date.now() -
|
|
136
|
+
const duration = formatMs(Date.now() - a.startedAt);
|
|
90
137
|
const activity = act ? describeActivity(act.activeTools, act.responseText) : "starting…";
|
|
91
138
|
const parts = [];
|
|
92
139
|
if (act?.turnCount)
|
|
@@ -96,13 +143,28 @@ export class AgentWidget {
|
|
|
96
143
|
if (tokens)
|
|
97
144
|
parts.push(tokens);
|
|
98
145
|
parts.push(duration);
|
|
99
|
-
|
|
146
|
+
const connector = i === running.length - 1 && queued.length === 0 ? "└─" : "├─";
|
|
147
|
+
const activityConnector = i === running.length - 1 && queued.length === 0 ? " " : "│ ";
|
|
148
|
+
lines.push(truncate(theme.fg("dim", connector) +
|
|
149
|
+
` ${theme.fg("accent", frame)} ${theme.bold(a.type)} ${theme.fg("dim", a.description)} · ${theme.fg("dim", parts.join(" · "))}`));
|
|
150
|
+
lines.push(truncate(theme.fg("dim", activityConnector) + theme.fg("dim", ` ⎿ ${activity}`)));
|
|
151
|
+
}
|
|
152
|
+
// Queued
|
|
153
|
+
if (queued.length > 0) {
|
|
154
|
+
lines.push(truncate(theme.fg("dim", "└─") + ` ${theme.fg("muted", "◦")} ${theme.fg("dim", `${queued.length} queued`)}`));
|
|
155
|
+
}
|
|
156
|
+
return lines;
|
|
157
|
+
}
|
|
158
|
+
dispose() {
|
|
159
|
+
if (this.timer) {
|
|
160
|
+
clearInterval(this.timer);
|
|
161
|
+
this.timer = undefined;
|
|
100
162
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
163
|
+
if (this.uiCtx && this.widgetRegistered) {
|
|
164
|
+
this.uiCtx.setWidget("unipi-agents", undefined);
|
|
165
|
+
this.widgetRegistered = false;
|
|
166
|
+
this.tui = undefined;
|
|
104
167
|
}
|
|
105
|
-
this.uiCtx?.setIndicator?.(lines.join("\n"));
|
|
106
168
|
}
|
|
107
169
|
}
|
|
108
170
|
//# sourceMappingURL=widget.js.map
|
package/dist/widget.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.js","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,gCAAgC;AAChC,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnE,0BAA0B;AAC1B,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,OAAO,GAAG,CAAC,EAAE,CAAC;AAChB,CAAC;AAED,uBAAuB;AACvB,SAAS,QAAQ,CAAC,EAAU;IAC1B,IAAI,EAAE,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACxD,IAAI,EAAE,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACtD,OAAO,GAAG,EAAE,IAAI,CAAC;AACnB,CAAC;AAED,oBAAoB;AACpB,SAAS,WAAW,CAAC,IAAY,EAAE,GAAY;IAC7C,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,mDAAmD;AACnD,SAAS,gBAAgB,CAAC,WAAgC,EAAE,YAAoB;IAC9E,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;IAChC,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,OAAO,WAAW;IACd,OAAO,CAAe;IACtB,QAAQ,CAA6B;IACrC,YAAY,GAAG,CAAC,CAAC;IACjB,KAAK,CAAkC;IACvC,KAAK,CAAO;
|
|
1
|
+
{"version":3,"file":"widget.js","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/config.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @pi-unipi/subagents — Config management
|
|
3
3
|
*
|
|
4
|
-
* Loads config from ~/.
|
|
4
|
+
* Loads config from ~/.unipi/config/subagents.json (global)
|
|
5
5
|
* and <workspace>/.unipi/config/subagents.json (override).
|
|
6
6
|
* Auto-generates on first run. Repairs corrupted files.
|
|
7
7
|
*/
|
|
@@ -38,6 +38,13 @@ function ensureDir(filePath: string): void {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
/** Ensure a directory exists (not a file path). */
|
|
42
|
+
function ensureDirExists(dirPath: string): void {
|
|
43
|
+
if (!existsSync(dirPath)) {
|
|
44
|
+
mkdirSync(dirPath, { recursive: true });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
41
48
|
/** Write config atomically (write then rename). */
|
|
42
49
|
function writeConfigAtomic(filePath: string, config: SubagentsConfig): void {
|
|
43
50
|
const tmpPath = filePath + ".tmp";
|
|
@@ -80,9 +87,12 @@ function repairCorrupted(filePath: string): SubagentsConfig {
|
|
|
80
87
|
*/
|
|
81
88
|
export function initConfig(cwd: string): SubagentsConfig {
|
|
82
89
|
const globalPath = getGlobalConfigPath();
|
|
90
|
+
const globalDir = join(homedir(), ".unipi", "config");
|
|
91
|
+
const globalAgentsDir = join(homedir(), ".unipi", "config", "agents");
|
|
83
92
|
|
|
84
|
-
// Ensure
|
|
85
|
-
|
|
93
|
+
// Ensure directories exist
|
|
94
|
+
ensureDirExists(globalDir);
|
|
95
|
+
ensureDirExists(globalAgentsDir);
|
|
86
96
|
|
|
87
97
|
// Load or create global config
|
|
88
98
|
let globalConfig = loadConfigFromPath(globalPath);
|
|
@@ -90,6 +100,15 @@ export function initConfig(cwd: string): SubagentsConfig {
|
|
|
90
100
|
globalConfig = repairCorrupted(globalPath);
|
|
91
101
|
}
|
|
92
102
|
|
|
103
|
+
// Ensure workspace directories exist if workspace exists
|
|
104
|
+
const workspaceDir = join(cwd, ".unipi", "config");
|
|
105
|
+
const workspaceAgentsDir = join(cwd, ".unipi", "config", "agents");
|
|
106
|
+
if (cwd && !cwd.startsWith(homedir())) {
|
|
107
|
+
// Only create workspace dirs if not in home directory
|
|
108
|
+
ensureDirExists(workspaceDir);
|
|
109
|
+
ensureDirExists(workspaceAgentsDir);
|
|
110
|
+
}
|
|
111
|
+
|
|
93
112
|
// Load workspace override if exists
|
|
94
113
|
const workspacePath = getWorkspaceConfigPath(cwd);
|
|
95
114
|
const workspaceConfig = loadConfigFromPath(workspacePath);
|
package/src/custom-agents.ts
CHANGED
|
@@ -2,24 +2,34 @@
|
|
|
2
2
|
* @pi-unipi/subagents — Custom agent loader
|
|
3
3
|
*
|
|
4
4
|
* Discovers agent types from:
|
|
5
|
-
* - <workspace>/.
|
|
6
|
-
* - ~/.
|
|
5
|
+
* - <workspace>/.unipi/config/agents/*.md (project, highest priority)
|
|
6
|
+
* - ~/.unipi/config/agents/*.md (global)
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
9
|
+
import { existsSync, readdirSync, readFileSync, renameSync } from "node:fs";
|
|
10
10
|
import { join } from "node:path";
|
|
11
11
|
import { homedir } from "node:os";
|
|
12
12
|
import { parseFrontmatter } from "@mariozechner/pi-coding-agent";
|
|
13
13
|
import type { AgentConfig } from "./types.js";
|
|
14
14
|
|
|
15
|
+
/** Backup a corrupted file by renaming to .bak */
|
|
16
|
+
function backupCorrupted(filePath: string): void {
|
|
17
|
+
const backupPath = filePath + ".bak";
|
|
18
|
+
try {
|
|
19
|
+
renameSync(filePath, backupPath);
|
|
20
|
+
} catch {
|
|
21
|
+
// If backup fails, just leave it
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
15
25
|
/** Get project agents directory. */
|
|
16
26
|
function getProjectAgentsDir(cwd: string): string {
|
|
17
|
-
return join(cwd, ".
|
|
27
|
+
return join(cwd, ".unipi", "config", "agents");
|
|
18
28
|
}
|
|
19
29
|
|
|
20
30
|
/** Get global agents directory. */
|
|
21
31
|
function getGlobalAgentsDir(): string {
|
|
22
|
-
return join(homedir(), ".
|
|
32
|
+
return join(homedir(), ".unipi", "config", "agents");
|
|
23
33
|
}
|
|
24
34
|
|
|
25
35
|
/** All known built-in tool names. */
|
|
@@ -67,6 +77,8 @@ function loadAgentFromFile(filePath: string, source: "project" | "global"): Agen
|
|
|
67
77
|
source,
|
|
68
78
|
};
|
|
69
79
|
} catch {
|
|
80
|
+
// Corrupted file — backup and skip
|
|
81
|
+
backupCorrupted(filePath);
|
|
70
82
|
return null;
|
|
71
83
|
}
|
|
72
84
|
}
|
package/src/index.ts
CHANGED
|
@@ -71,6 +71,24 @@ export default function (pi: ExtensionAPI) {
|
|
|
71
71
|
// Create widget
|
|
72
72
|
const widget = new AgentWidget(manager, agentActivity);
|
|
73
73
|
|
|
74
|
+
// Session start: notify agent about config paths
|
|
75
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
76
|
+
const homedir = require("os").homedir();
|
|
77
|
+
const globalConfig = `${homedir}/.unipi/config/subagents.json`;
|
|
78
|
+
const globalAgents = `${homedir}/.unipi/config/agents/`;
|
|
79
|
+
const workspaceConfig = `${ctx.cwd}/.unipi/config/subagents.json`;
|
|
80
|
+
const workspaceAgents = `${ctx.cwd}/.unipi/config/agents/`;
|
|
81
|
+
|
|
82
|
+
ctx.ui.notify(
|
|
83
|
+
`UniPi Subagents config:\n` +
|
|
84
|
+
`• Global: ${globalConfig}\n` +
|
|
85
|
+
`• Global agents: ${globalAgents}\n` +
|
|
86
|
+
`• Workspace: ${workspaceConfig}\n` +
|
|
87
|
+
`• Workspace agents: ${workspaceAgents}`,
|
|
88
|
+
"info",
|
|
89
|
+
);
|
|
90
|
+
});
|
|
91
|
+
|
|
74
92
|
// ESC propagation: abort all agents on session shutdown
|
|
75
93
|
pi.on("session_shutdown", async () => {
|
|
76
94
|
manager.abortAll();
|
|
@@ -138,7 +156,9 @@ export default function (pi: ExtensionAPI) {
|
|
|
138
156
|
description: `Launch a sub-agent for parallel work.
|
|
139
157
|
|
|
140
158
|
Available agent types: ${builtinTypes}
|
|
141
|
-
Custom types can be defined in
|
|
159
|
+
Custom types can be defined in:
|
|
160
|
+
- ~/.unipi/config/agents/<name>.md (global)
|
|
161
|
+
- <workspace>/.unipi/config/agents/<name>.md (project)
|
|
142
162
|
|
|
143
163
|
Guidelines:
|
|
144
164
|
- Use "explore" for parallel file reads
|
|
@@ -148,7 +168,7 @@ Guidelines:
|
|
|
148
168
|
- Agents inherit the parent model by default`,
|
|
149
169
|
parameters: Type.Object({
|
|
150
170
|
type: Type.String({
|
|
151
|
-
description: `Agent type: ${builtinTypes}, or custom type from
|
|
171
|
+
description: `Agent type: ${builtinTypes}, or custom type from ~/.unipi/config/agents/*.md`,
|
|
152
172
|
}),
|
|
153
173
|
prompt: Type.String({
|
|
154
174
|
description: "The task for the agent to perform.",
|
package/src/widget.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @pi-unipi/subagents — Live widget
|
|
3
3
|
*
|
|
4
4
|
* Shows running agents above the editor.
|
|
5
|
-
*
|
|
5
|
+
* Uses setWidget API for proper rendering.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import type { AgentManager } from "./agent-manager.js";
|
|
@@ -49,6 +49,8 @@ export class AgentWidget {
|
|
|
49
49
|
private spinnerFrame = 0;
|
|
50
50
|
private timer?: ReturnType<typeof setInterval>;
|
|
51
51
|
private uiCtx?: any;
|
|
52
|
+
private widgetRegistered = false;
|
|
53
|
+
private tui?: any;
|
|
52
54
|
|
|
53
55
|
constructor(manager: AgentManager, activity: Map<string, AgentActivity>) {
|
|
54
56
|
this.manager = manager;
|
|
@@ -56,19 +58,22 @@ export class AgentWidget {
|
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
setUICtx(ctx: any) {
|
|
59
|
-
this.uiCtx
|
|
61
|
+
if (ctx !== this.uiCtx) {
|
|
62
|
+
this.uiCtx = ctx;
|
|
63
|
+
this.widgetRegistered = false;
|
|
64
|
+
this.tui = undefined;
|
|
65
|
+
}
|
|
60
66
|
}
|
|
61
67
|
|
|
62
68
|
ensureTimer() {
|
|
63
69
|
if (this.timer) return;
|
|
64
70
|
this.timer = setInterval(() => {
|
|
65
71
|
this.spinnerFrame = (this.spinnerFrame + 1) % SPINNER.length;
|
|
66
|
-
this.
|
|
72
|
+
this.requestRender();
|
|
67
73
|
}, 80);
|
|
68
74
|
}
|
|
69
75
|
|
|
70
76
|
markFinished(_id: string) {
|
|
71
|
-
// Check if any agents still running
|
|
72
77
|
if (!this.manager.hasRunning()) {
|
|
73
78
|
if (this.timer) {
|
|
74
79
|
clearInterval(this.timer);
|
|
@@ -78,27 +83,75 @@ export class AgentWidget {
|
|
|
78
83
|
}
|
|
79
84
|
|
|
80
85
|
update() {
|
|
81
|
-
this.
|
|
86
|
+
this.requestRender();
|
|
82
87
|
}
|
|
83
88
|
|
|
84
|
-
private
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
private requestRender() {
|
|
90
|
+
if (!this.uiCtx) return;
|
|
91
|
+
|
|
92
|
+
const allAgents = this.manager.listAgents();
|
|
93
|
+
const running = allAgents.filter((a) => a.status === "running" || a.status === "queued");
|
|
94
|
+
const hasActive = running.length > 0;
|
|
87
95
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
this.
|
|
96
|
+
// Nothing to show — clear widget
|
|
97
|
+
if (!hasActive) {
|
|
98
|
+
if (this.widgetRegistered) {
|
|
99
|
+
this.uiCtx.setWidget("unipi-agents", undefined);
|
|
100
|
+
this.widgetRegistered = false;
|
|
101
|
+
this.tui = undefined;
|
|
102
|
+
}
|
|
91
103
|
return;
|
|
92
104
|
}
|
|
93
105
|
|
|
106
|
+
// Register widget callback once, then request re-render
|
|
107
|
+
if (!this.widgetRegistered) {
|
|
108
|
+
this.uiCtx.setWidget(
|
|
109
|
+
"unipi-agents",
|
|
110
|
+
(tui: any, theme: any) => {
|
|
111
|
+
this.tui = tui;
|
|
112
|
+
return {
|
|
113
|
+
render: () => this.renderWidget(tui, theme),
|
|
114
|
+
invalidate: () => {
|
|
115
|
+
this.widgetRegistered = false;
|
|
116
|
+
this.tui = undefined;
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
},
|
|
120
|
+
{ placement: "aboveEditor" },
|
|
121
|
+
);
|
|
122
|
+
this.widgetRegistered = true;
|
|
123
|
+
} else {
|
|
124
|
+
// Widget already registered — request re-render
|
|
125
|
+
this.tui?.requestRender?.();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
private renderWidget(tui: any, theme: any): string[] {
|
|
130
|
+
const allAgents = this.manager.listAgents();
|
|
131
|
+
const running = allAgents.filter((a) => a.status === "running");
|
|
132
|
+
const queued = allAgents.filter((a) => a.status === "queued");
|
|
133
|
+
|
|
134
|
+
if (running.length === 0 && queued.length === 0) return [];
|
|
135
|
+
|
|
136
|
+
const w = tui.terminal?.columns ?? 80;
|
|
137
|
+
const truncate = (line: string) => {
|
|
138
|
+
if (line.length <= w) return line;
|
|
139
|
+
return line.slice(0, w - 1) + "…";
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const frame = SPINNER[this.spinnerFrame % SPINNER.length];
|
|
94
143
|
const lines: string[] = [];
|
|
95
|
-
const frame = SPINNER[this.spinnerFrame];
|
|
96
144
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
145
|
+
// Heading
|
|
146
|
+
lines.push(truncate(theme.fg("accent", "●") + " " + theme.fg("accent", "Agents")));
|
|
147
|
+
|
|
148
|
+
// Running agents (2 lines each: header + activity)
|
|
149
|
+
for (let i = 0; i < running.length; i++) {
|
|
150
|
+
const a = running[i];
|
|
151
|
+
const act = this.activity.get(a.id);
|
|
152
|
+
const toolCount = a.toolUses;
|
|
100
153
|
const tokens = act?.tokens ?? "";
|
|
101
|
-
const duration = formatMs(Date.now() -
|
|
154
|
+
const duration = formatMs(Date.now() - a.startedAt);
|
|
102
155
|
const activity = act ? describeActivity(act.activeTools, act.responseText) : "starting…";
|
|
103
156
|
|
|
104
157
|
const parts: string[] = [];
|
|
@@ -107,17 +160,39 @@ export class AgentWidget {
|
|
|
107
160
|
if (tokens) parts.push(tokens);
|
|
108
161
|
parts.push(duration);
|
|
109
162
|
|
|
163
|
+
const connector = i === running.length - 1 && queued.length === 0 ? "└─" : "├─";
|
|
164
|
+
const activityConnector = i === running.length - 1 && queued.length === 0 ? " " : "│ ";
|
|
165
|
+
|
|
110
166
|
lines.push(
|
|
111
|
-
|
|
112
|
-
|
|
167
|
+
truncate(
|
|
168
|
+
theme.fg("dim", connector) +
|
|
169
|
+
` ${theme.fg("accent", frame)} ${theme.bold(a.type)} ${theme.fg("dim", a.description)} · ${theme.fg("dim", parts.join(" · "))}`,
|
|
170
|
+
),
|
|
171
|
+
);
|
|
172
|
+
lines.push(
|
|
173
|
+
truncate(theme.fg("dim", activityConnector) + theme.fg("dim", ` ⎿ ${activity}`)),
|
|
113
174
|
);
|
|
114
175
|
}
|
|
115
176
|
|
|
116
|
-
|
|
117
|
-
if (queued > 0) {
|
|
118
|
-
lines.push(
|
|
177
|
+
// Queued
|
|
178
|
+
if (queued.length > 0) {
|
|
179
|
+
lines.push(
|
|
180
|
+
truncate(theme.fg("dim", "└─") + ` ${theme.fg("muted", "◦")} ${theme.fg("dim", `${queued.length} queued`)}`),
|
|
181
|
+
);
|
|
119
182
|
}
|
|
120
183
|
|
|
121
|
-
|
|
184
|
+
return lines;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
dispose() {
|
|
188
|
+
if (this.timer) {
|
|
189
|
+
clearInterval(this.timer);
|
|
190
|
+
this.timer = undefined;
|
|
191
|
+
}
|
|
192
|
+
if (this.uiCtx && this.widgetRegistered) {
|
|
193
|
+
this.uiCtx.setWidget("unipi-agents", undefined);
|
|
194
|
+
this.widgetRegistered = false;
|
|
195
|
+
this.tui = undefined;
|
|
196
|
+
}
|
|
122
197
|
}
|
|
123
198
|
}
|