@a5c-ai/agent-mux-tui 0.3.0 → 0.4.1
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 +24 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +378 -12
- package/dist/app.js.map +1 -1
- package/dist/bin/amux-tui.js +2 -1
- package/dist/bin/amux-tui.js.map +1 -1
- package/dist/command-palette.d.ts +15 -0
- package/dist/command-palette.d.ts.map +1 -0
- package/dist/command-palette.js +65 -0
- package/dist/command-palette.js.map +1 -0
- package/dist/event-stream.d.ts +3 -0
- package/dist/event-stream.d.ts.map +1 -1
- package/dist/event-stream.js +18 -0
- package/dist/event-stream.js.map +1 -1
- package/dist/external-plugins.d.ts +11 -0
- package/dist/external-plugins.d.ts.map +1 -0
- package/dist/external-plugins.js +79 -0
- package/dist/external-plugins.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -1
- package/dist/model-picker.d.ts +11 -0
- package/dist/model-picker.d.ts.map +1 -0
- package/dist/model-picker.js +45 -0
- package/dist/model-picker.js.map +1 -0
- package/dist/plugin.d.ts +22 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js.map +1 -1
- package/dist/plugins/adapters-view.d.ts +3 -0
- package/dist/plugins/adapters-view.d.ts.map +1 -0
- package/dist/plugins/adapters-view.js +38 -0
- package/dist/plugins/adapters-view.js.map +1 -0
- package/dist/plugins/agents-view.d.ts +3 -0
- package/dist/plugins/agents-view.d.ts.map +1 -0
- package/dist/plugins/agents-view.js +190 -0
- package/dist/plugins/agents-view.js.map +1 -0
- package/dist/plugins/approval.d.ts +16 -0
- package/dist/plugins/approval.d.ts.map +1 -0
- package/dist/plugins/approval.js +50 -0
- package/dist/plugins/approval.js.map +1 -0
- package/dist/plugins/auth-view.d.ts +3 -0
- package/dist/plugins/auth-view.d.ts.map +1 -0
- package/dist/plugins/auth-view.js +66 -0
- package/dist/plugins/auth-view.js.map +1 -0
- package/dist/plugins/chat-view.d.ts +1 -1
- package/dist/plugins/chat-view.d.ts.map +1 -1
- package/dist/plugins/chat-view.js +41 -5
- package/dist/plugins/chat-view.js.map +1 -1
- package/dist/plugins/config-view.d.ts +3 -0
- package/dist/plugins/config-view.d.ts.map +1 -0
- package/dist/plugins/config-view.js +63 -0
- package/dist/plugins/config-view.js.map +1 -0
- package/dist/plugins/control.d.ts +7 -0
- package/dist/plugins/control.d.ts.map +1 -0
- package/dist/plugins/control.js +70 -0
- package/dist/plugins/control.js.map +1 -0
- package/dist/plugins/cost-alerts.d.ts +4 -0
- package/dist/plugins/cost-alerts.d.ts.map +1 -0
- package/dist/plugins/cost-alerts.js +38 -0
- package/dist/plugins/cost-alerts.js.map +1 -0
- package/dist/plugins/cost-view.d.ts +3 -0
- package/dist/plugins/cost-view.d.ts.map +1 -0
- package/dist/plugins/cost-view.js +63 -0
- package/dist/plugins/cost-view.js.map +1 -0
- package/dist/plugins/doctor-view.d.ts +3 -0
- package/dist/plugins/doctor-view.d.ts.map +1 -0
- package/dist/plugins/doctor-view.js +58 -0
- package/dist/plugins/doctor-view.js.map +1 -0
- package/dist/plugins/file-ops.d.ts +16 -0
- package/dist/plugins/file-ops.d.ts.map +1 -0
- package/dist/plugins/file-ops.js +49 -0
- package/dist/plugins/file-ops.js.map +1 -0
- package/dist/plugins/help-view.d.ts +3 -0
- package/dist/plugins/help-view.d.ts.map +1 -0
- package/dist/plugins/help-view.js +44 -0
- package/dist/plugins/help-view.js.map +1 -0
- package/dist/plugins/hooks-view.d.ts +3 -0
- package/dist/plugins/hooks-view.d.ts.map +1 -0
- package/dist/plugins/hooks-view.js +186 -0
- package/dist/plugins/hooks-view.js.map +1 -0
- package/dist/plugins/image.d.ts +10 -0
- package/dist/plugins/image.d.ts.map +1 -0
- package/dist/plugins/image.js +30 -0
- package/dist/plugins/image.js.map +1 -0
- package/dist/plugins/lifecycle.d.ts +7 -0
- package/dist/plugins/lifecycle.d.ts.map +1 -0
- package/dist/plugins/lifecycle.js +46 -0
- package/dist/plugins/lifecycle.js.map +1 -0
- package/dist/plugins/mcp-view.d.ts +3 -0
- package/dist/plugins/mcp-view.d.ts.map +1 -0
- package/dist/plugins/mcp-view.js +63 -0
- package/dist/plugins/mcp-view.js.map +1 -0
- package/dist/plugins/mcp.d.ts +13 -0
- package/dist/plugins/mcp.d.ts.map +1 -0
- package/dist/plugins/mcp.js +39 -0
- package/dist/plugins/mcp.js.map +1 -0
- package/dist/plugins/models-view.d.ts +3 -0
- package/dist/plugins/models-view.d.ts.map +1 -0
- package/dist/plugins/models-view.js +39 -0
- package/dist/plugins/models-view.js.map +1 -0
- package/dist/plugins/observability-view.d.ts +3 -0
- package/dist/plugins/observability-view.d.ts.map +1 -0
- package/dist/plugins/observability-view.js +89 -0
- package/dist/plugins/observability-view.js.map +1 -0
- package/dist/plugins/plugin-skill.d.ts +22 -0
- package/dist/plugins/plugin-skill.d.ts.map +1 -0
- package/dist/plugins/plugin-skill.js +45 -0
- package/dist/plugins/plugin-skill.js.map +1 -0
- package/dist/plugins/plugins-view.d.ts +3 -0
- package/dist/plugins/plugins-view.d.ts.map +1 -0
- package/dist/plugins/plugins-view.js +68 -0
- package/dist/plugins/plugins-view.js.map +1 -0
- package/dist/plugins/profiles-view.d.ts +3 -0
- package/dist/plugins/profiles-view.d.ts.map +1 -0
- package/dist/plugins/profiles-view.js +44 -0
- package/dist/plugins/profiles-view.js.map +1 -0
- package/dist/plugins/session-detail-view.d.ts +5 -0
- package/dist/plugins/session-detail-view.d.ts.map +1 -0
- package/dist/plugins/session-detail-view.js +101 -0
- package/dist/plugins/session-detail-view.js.map +1 -0
- package/dist/plugins/session-lifecycle.d.ts +7 -0
- package/dist/plugins/session-lifecycle.d.ts.map +1 -0
- package/dist/plugins/session-lifecycle.js +37 -0
- package/dist/plugins/session-lifecycle.js.map +1 -0
- package/dist/plugins/sessions-view.d.ts.map +1 -1
- package/dist/plugins/sessions-view.js +62 -14
- package/dist/plugins/sessions-view.js.map +1 -1
- package/dist/plugins/shell.d.ts +16 -0
- package/dist/plugins/shell.d.ts.map +1 -0
- package/dist/plugins/shell.js +50 -0
- package/dist/plugins/shell.js.map +1 -0
- package/dist/plugins/skills-view.d.ts +3 -0
- package/dist/plugins/skills-view.d.ts.map +1 -0
- package/dist/plugins/skills-view.js +189 -0
- package/dist/plugins/skills-view.js.map +1 -0
- package/dist/plugins/subagent.d.ts +13 -0
- package/dist/plugins/subagent.d.ts.map +1 -0
- package/dist/plugins/subagent.js +40 -0
- package/dist/plugins/subagent.js.map +1 -0
- package/dist/plugins/tool-call.d.ts.map +1 -1
- package/dist/plugins/tool-call.js +29 -2
- package/dist/plugins/tool-call.js.map +1 -1
- package/dist/prompt-history-store.d.ts +4 -0
- package/dist/prompt-history-store.d.ts.map +1 -0
- package/dist/prompt-history-store.js +42 -0
- package/dist/prompt-history-store.js.map +1 -0
- package/dist/prompt-input.d.ts +6 -1
- package/dist/prompt-input.d.ts.map +1 -1
- package/dist/prompt-input.js +43 -2
- package/dist/prompt-input.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette.js","sourceRoot":"","sources":["../src/command-palette.tsx"],"names":[],"mappings":"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"}
|
package/dist/event-stream.d.ts
CHANGED
|
@@ -3,8 +3,11 @@ export type EventSubscriber = (event: AgentEvent) => void;
|
|
|
3
3
|
export type Unsubscribe = () => void;
|
|
4
4
|
export declare class EventStream {
|
|
5
5
|
private subscribers;
|
|
6
|
+
private resetSubs;
|
|
6
7
|
private buffer;
|
|
7
8
|
private maxBuffer;
|
|
9
|
+
onReset(fn: () => void): Unsubscribe;
|
|
10
|
+
reset(): void;
|
|
8
11
|
constructor(maxBuffer?: number);
|
|
9
12
|
subscribe(fn: EventSubscriber): Unsubscribe;
|
|
10
13
|
push(event: AgentEvent): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-stream.d.ts","sourceRoot":"","sources":["../src/event-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAC1D,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,SAAS,CAAS;
|
|
1
|
+
{"version":3,"file":"event-stream.d.ts","sourceRoot":"","sources":["../src/event-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAC1D,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,WAAW;IAOpC,KAAK,IAAI,IAAI;gBAWD,SAAS,SAAO;IAI5B,SAAS,CAAC,EAAE,EAAE,eAAe,GAAG,WAAW;IAO3C,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAY7B,QAAQ,IAAI,SAAS,UAAU,EAAE;IAIjC,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/event-stream.js
CHANGED
|
@@ -1,7 +1,25 @@
|
|
|
1
1
|
export class EventStream {
|
|
2
2
|
subscribers = new Set();
|
|
3
|
+
resetSubs = new Set();
|
|
3
4
|
buffer = [];
|
|
4
5
|
maxBuffer;
|
|
6
|
+
onReset(fn) {
|
|
7
|
+
this.resetSubs.add(fn);
|
|
8
|
+
return () => {
|
|
9
|
+
this.resetSubs.delete(fn);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
reset() {
|
|
13
|
+
this.buffer = [];
|
|
14
|
+
for (const fn of this.resetSubs) {
|
|
15
|
+
try {
|
|
16
|
+
fn();
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// subscriber errors must not break the reset
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
5
23
|
constructor(maxBuffer = 1000) {
|
|
6
24
|
this.maxBuffer = maxBuffer;
|
|
7
25
|
}
|
package/dist/event-stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-stream.js","sourceRoot":"","sources":["../src/event-stream.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,WAAW;IACd,WAAW,GAAyB,IAAI,GAAG,EAAE,CAAC;IAC9C,MAAM,GAAiB,EAAE,CAAC;IAC1B,SAAS,CAAS;IAE1B,YAAY,SAAS,GAAG,IAAI;QAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,EAAmB;QAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAiB;QACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,EAAE,CAAC,KAAK,CAAC,CAAC;YACZ,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"event-stream.js","sourceRoot":"","sources":["../src/event-stream.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,WAAW;IACd,WAAW,GAAyB,IAAI,GAAG,EAAE,CAAC;IAC9C,SAAS,GAAoB,IAAI,GAAG,EAAE,CAAC;IACvC,MAAM,GAAiB,EAAE,CAAC;IAC1B,SAAS,CAAS;IAE1B,OAAO,CAAC,EAAc;QACpB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,EAAE,EAAE,CAAC;YACP,CAAC;YAAC,MAAM,CAAC;gBACP,6CAA6C;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,YAAY,SAAS,GAAG,IAAI;QAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,EAAmB;QAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAiB;QACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,EAAE,CAAC,KAAK,CAAC,CAAC;YACZ,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TuiPlugin } from './plugin.js';
|
|
2
|
+
export declare function defaultExternalPluginsDir(): string;
|
|
3
|
+
export interface LoadResult {
|
|
4
|
+
plugins: TuiPlugin[];
|
|
5
|
+
errors: {
|
|
6
|
+
source: string;
|
|
7
|
+
error: string;
|
|
8
|
+
}[];
|
|
9
|
+
}
|
|
10
|
+
export declare function loadExternalPlugins(dir?: string): Promise<LoadResult>;
|
|
11
|
+
//# sourceMappingURL=external-plugins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-plugins.d.ts","sourceRoot":"","sources":["../src/external-plugins.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,wBAAgB,yBAAyB,IAAI,MAAM,CAIlD;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC7C;AAgDD,wBAAsB,mBAAmB,CACvC,GAAG,GAAE,MAAoC,GACxC,OAAO,CAAC,UAAU,CAAC,CAgBrB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import * as os from 'node:os';
|
|
4
|
+
import { pathToFileURL } from 'node:url';
|
|
5
|
+
export function defaultExternalPluginsDir() {
|
|
6
|
+
if (process.env.AMUX_TUI_PLUGINS_DIR)
|
|
7
|
+
return process.env.AMUX_TUI_PLUGINS_DIR;
|
|
8
|
+
const home = os.homedir() || '.';
|
|
9
|
+
return path.join(home, '.amux', 'tui-plugins');
|
|
10
|
+
}
|
|
11
|
+
function isPlugin(value) {
|
|
12
|
+
if (!value || typeof value !== 'object')
|
|
13
|
+
return false;
|
|
14
|
+
const v = value;
|
|
15
|
+
return typeof v.name === 'string' && typeof v.register === 'function';
|
|
16
|
+
}
|
|
17
|
+
async function importEntry(entry) {
|
|
18
|
+
const url = pathToFileURL(entry).href;
|
|
19
|
+
const mod = (await import(url));
|
|
20
|
+
const collected = [];
|
|
21
|
+
if (isPlugin(mod.default))
|
|
22
|
+
collected.push(mod.default);
|
|
23
|
+
for (const key of Object.keys(mod)) {
|
|
24
|
+
if (key === 'default')
|
|
25
|
+
continue;
|
|
26
|
+
const v = mod[key];
|
|
27
|
+
if (isPlugin(v))
|
|
28
|
+
collected.push(v);
|
|
29
|
+
}
|
|
30
|
+
return collected;
|
|
31
|
+
}
|
|
32
|
+
function findEntryFiles(dir) {
|
|
33
|
+
if (!fs.existsSync(dir) || !fs.statSync(dir).isDirectory())
|
|
34
|
+
return [];
|
|
35
|
+
const entries = [];
|
|
36
|
+
for (const name of fs.readdirSync(dir)) {
|
|
37
|
+
const full = path.join(dir, name);
|
|
38
|
+
let stat;
|
|
39
|
+
try {
|
|
40
|
+
stat = fs.statSync(full);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (stat.isFile() && /\.(mjs|cjs|js)$/.test(name)) {
|
|
46
|
+
entries.push(full);
|
|
47
|
+
}
|
|
48
|
+
else if (stat.isDirectory()) {
|
|
49
|
+
const candidates = ['index.mjs', 'index.cjs', 'index.js'];
|
|
50
|
+
for (const c of candidates) {
|
|
51
|
+
const candidate = path.join(full, c);
|
|
52
|
+
if (fs.existsSync(candidate)) {
|
|
53
|
+
entries.push(candidate);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return entries;
|
|
60
|
+
}
|
|
61
|
+
export async function loadExternalPlugins(dir = defaultExternalPluginsDir()) {
|
|
62
|
+
const result = { plugins: [], errors: [] };
|
|
63
|
+
const entries = findEntryFiles(dir);
|
|
64
|
+
for (const entry of entries) {
|
|
65
|
+
try {
|
|
66
|
+
const found = await importEntry(entry);
|
|
67
|
+
if (found.length === 0) {
|
|
68
|
+
result.errors.push({ source: entry, error: 'no TuiPlugin export found' });
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
result.plugins.push(...found);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
result.errors.push({ source: entry, error: e.message ?? String(e) });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=external-plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-plugins.js","sourceRoot":"","sources":["../src/external-plugins.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export type { Registry } from './registry.js';
|
|
|
4
4
|
export { EventStream } from './event-stream.js';
|
|
5
5
|
export type { EventSubscriber, Unsubscribe } from './event-stream.js';
|
|
6
6
|
export { PromptInput } from './prompt-input.js';
|
|
7
|
+
export { loadExternalPlugins, defaultExternalPluginsDir, type LoadResult as ExternalPluginsLoadResult, } from './external-plugins.js';
|
|
7
8
|
export * from './plugin.js';
|
|
8
9
|
import type { TuiPlugin } from './plugin.js';
|
|
9
10
|
export declare const builtinPlugins: TuiPlugin[];
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3E,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,cAAc,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3E,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,UAAU,IAAI,yBAAyB,GAC7C,MAAM,uBAAuB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAmC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,eAAO,MAAM,cAAc,EAAE,SAAS,EAkCrC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,23 +2,76 @@ export { App } from './app.js';
|
|
|
2
2
|
export { createRegistry, createContext, loadPlugins } from './registry.js';
|
|
3
3
|
export { EventStream } from './event-stream.js';
|
|
4
4
|
export { PromptInput } from './prompt-input.js';
|
|
5
|
+
export { loadExternalPlugins, defaultExternalPluginsDir, } from './external-plugins.js';
|
|
5
6
|
export * from './plugin.js';
|
|
6
7
|
import textDelta from './plugins/text-delta.js';
|
|
7
8
|
import toolCall from './plugins/tool-call.js';
|
|
8
9
|
import cost from './plugins/cost.js';
|
|
10
|
+
import costAlerts from './plugins/cost-alerts.js';
|
|
9
11
|
import chatView from './plugins/chat-view.js';
|
|
10
12
|
import sessionsView from './plugins/sessions-view.js';
|
|
13
|
+
import sessionDetailView from './plugins/session-detail-view.js';
|
|
14
|
+
import costView from './plugins/cost-view.js';
|
|
11
15
|
import fallback from './plugins/fallback.js';
|
|
12
16
|
import diff from './plugins/diff.js';
|
|
17
|
+
import shell from './plugins/shell.js';
|
|
18
|
+
import mcp from './plugins/mcp.js';
|
|
19
|
+
import subagent from './plugins/subagent.js';
|
|
20
|
+
import fileOps from './plugins/file-ops.js';
|
|
21
|
+
import sessionLifecycle from './plugins/session-lifecycle.js';
|
|
22
|
+
import approval from './plugins/approval.js';
|
|
23
|
+
import pluginSkill from './plugins/plugin-skill.js';
|
|
24
|
+
import image from './plugins/image.js';
|
|
25
|
+
import control from './plugins/control.js';
|
|
26
|
+
import lifecycle from './plugins/lifecycle.js';
|
|
27
|
+
import adaptersView from './plugins/adapters-view.js';
|
|
28
|
+
import modelsView from './plugins/models-view.js';
|
|
29
|
+
import profilesView from './plugins/profiles-view.js';
|
|
30
|
+
import pluginsView from './plugins/plugins-view.js';
|
|
31
|
+
import helpView from './plugins/help-view.js';
|
|
32
|
+
import mcpView from './plugins/mcp-view.js';
|
|
33
|
+
import doctorView from './plugins/doctor-view.js';
|
|
34
|
+
import authView from './plugins/auth-view.js';
|
|
35
|
+
import configView from './plugins/config-view.js';
|
|
36
|
+
import skillsView from './plugins/skills-view.js';
|
|
37
|
+
import agentsView from './plugins/agents-view.js';
|
|
38
|
+
import hooksView from './plugins/hooks-view.js';
|
|
39
|
+
import observabilityView from './plugins/observability-view.js';
|
|
13
40
|
// Order matters: specific renderers first, fallback LAST so it only matches
|
|
14
41
|
// when nothing else did (chat-view's pickRenderers enforces this).
|
|
15
42
|
export const builtinPlugins = [
|
|
16
43
|
textDelta,
|
|
17
44
|
toolCall,
|
|
18
45
|
diff,
|
|
46
|
+
shell,
|
|
47
|
+
mcp,
|
|
48
|
+
subagent,
|
|
49
|
+
fileOps,
|
|
50
|
+
sessionLifecycle,
|
|
51
|
+
approval,
|
|
52
|
+
pluginSkill,
|
|
53
|
+
image,
|
|
54
|
+
control,
|
|
55
|
+
lifecycle,
|
|
19
56
|
cost,
|
|
57
|
+
costAlerts,
|
|
20
58
|
chatView,
|
|
21
59
|
sessionsView,
|
|
60
|
+
sessionDetailView,
|
|
61
|
+
costView,
|
|
62
|
+
adaptersView,
|
|
63
|
+
modelsView,
|
|
64
|
+
profilesView,
|
|
65
|
+
pluginsView,
|
|
66
|
+
helpView,
|
|
67
|
+
mcpView,
|
|
68
|
+
doctorView,
|
|
69
|
+
authView,
|
|
70
|
+
configView,
|
|
71
|
+
skillsView,
|
|
72
|
+
agentsView,
|
|
73
|
+
hooksView,
|
|
74
|
+
observabilityView,
|
|
22
75
|
fallback,
|
|
23
76
|
];
|
|
24
77
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,cAAc,aAAa,CAAC;AAE5B,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,IAAI,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,GAE1B,MAAM,uBAAuB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAE5B,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,iBAAiB,MAAM,kCAAkC,CAAC;AACjE,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,KAAK,MAAM,oBAAoB,CAAC;AACvC,OAAO,GAAG,MAAM,kBAAkB,CAAC;AACnC,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAC9D,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,KAAK,MAAM,oBAAoB,CAAC;AACvC,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,iBAAiB,MAAM,iCAAiC,CAAC;AAGhE,4EAA4E;AAC5E,mEAAmE;AACnE,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,SAAS;IACT,QAAQ;IACR,IAAI;IACJ,KAAK;IACL,GAAG;IACH,QAAQ;IACR,OAAO;IACP,gBAAgB;IAChB,QAAQ;IACR,WAAW;IACX,KAAK;IACL,OAAO;IACP,SAAS;IACT,IAAI;IACJ,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,iBAAiB;IACjB,QAAQ;IACR,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,OAAO;IACP,UAAU;IACV,QAAQ;IACR,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,iBAAiB;IACjB,QAAQ;CACT,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ModelOption {
|
|
2
|
+
agent: string;
|
|
3
|
+
modelId: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ModelPickerProps {
|
|
6
|
+
models: ModelOption[];
|
|
7
|
+
onPick(option: ModelOption): void;
|
|
8
|
+
onCancel(): void;
|
|
9
|
+
}
|
|
10
|
+
export declare function ModelPicker({ models, onPick, onCancel }: ModelPickerProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=model-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-picker.d.ts","sourceRoot":"","sources":["../src/model-picker.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CA8DzE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
export function ModelPicker({ models, onPick, onCancel }) {
|
|
5
|
+
const [query, setQuery] = useState('');
|
|
6
|
+
const [cursor, setCursor] = useState(0);
|
|
7
|
+
const filtered = query
|
|
8
|
+
? models.filter((m) => m.modelId.toLowerCase().includes(query.toLowerCase()) ||
|
|
9
|
+
m.agent.toLowerCase().includes(query.toLowerCase()))
|
|
10
|
+
: models;
|
|
11
|
+
useInput((input, key) => {
|
|
12
|
+
if (key.escape) {
|
|
13
|
+
onCancel();
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (key.return) {
|
|
17
|
+
const pick = filtered[cursor];
|
|
18
|
+
if (pick)
|
|
19
|
+
onPick(pick);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (key.downArrow) {
|
|
23
|
+
setCursor((c) => Math.min(c + 1, Math.max(filtered.length - 1, 0)));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (key.upArrow) {
|
|
27
|
+
setCursor((c) => Math.max(c - 1, 0));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (key.backspace || key.delete) {
|
|
31
|
+
setQuery((q) => q.slice(0, -1));
|
|
32
|
+
setCursor(0);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (input && !key.ctrl && !key.meta) {
|
|
36
|
+
setQuery((q) => q + input);
|
|
37
|
+
setCursor(0);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", paddingX: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "model: " }), _jsx(Text, { children: query }), _jsx(Text, { color: "cyan", children: "\u258C" })] }), filtered.length === 0 ? (_jsx(Text, { dimColor: true, children: "(no matches)" })) : (filtered.slice(0, 8).map((m, i) => {
|
|
41
|
+
const sel = i === cursor;
|
|
42
|
+
return (_jsxs(Text, { color: sel ? 'green' : undefined, children: [sel ? '> ' : ' ', _jsx(Text, { color: "cyan", children: m.agent }), " ", m.modelId] }, m.agent + ':' + m.modelId));
|
|
43
|
+
}))] }));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=model-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../src/model-picker.tsx"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -21,6 +21,16 @@ export interface TuiViewProps {
|
|
|
21
21
|
client: AgentMuxClient;
|
|
22
22
|
active: boolean;
|
|
23
23
|
eventStream: EventStream;
|
|
24
|
+
emit: (event: TuiInternalEvent) => void;
|
|
25
|
+
/** Optional global filter string (e.g. set via top-level `/` in chat). */
|
|
26
|
+
filter?: string;
|
|
27
|
+
/** Optional session selection routed by emit(session:detail). */
|
|
28
|
+
selection?: {
|
|
29
|
+
agent: string;
|
|
30
|
+
sessionId: string;
|
|
31
|
+
};
|
|
32
|
+
/** Sessions currently backed by an amux-managed run (keyed `${agent}:${sessionId}`). */
|
|
33
|
+
activeSessions?: ReadonlySet<string>;
|
|
24
34
|
}
|
|
25
35
|
export interface EventRenderer {
|
|
26
36
|
id: string;
|
|
@@ -47,6 +57,18 @@ export type TuiInternalEvent = {
|
|
|
47
57
|
} | {
|
|
48
58
|
type: 'event';
|
|
49
59
|
event: AgentEvent;
|
|
60
|
+
} | {
|
|
61
|
+
type: 'session:select';
|
|
62
|
+
agent: string;
|
|
63
|
+
sessionId: string;
|
|
64
|
+
} | {
|
|
65
|
+
type: 'session:detail';
|
|
66
|
+
agent: string;
|
|
67
|
+
sessionId: string;
|
|
68
|
+
} | {
|
|
69
|
+
type: 'session:diff';
|
|
70
|
+
agent: string;
|
|
71
|
+
sessionId: string;
|
|
50
72
|
};
|
|
51
73
|
export interface TuiPlugin {
|
|
52
74
|
name: string;
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAErE,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACrD,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;IACvC,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAgEA,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters-view.d.ts","sourceRoot":"","sources":["../../src/plugins/adapters-view.tsx"],"names":[],"mappings":";AA6CA,wBAUG"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
import { definePlugin } from '../plugin.js';
|
|
5
|
+
function AdaptersView({ client, active }) {
|
|
6
|
+
const [rows, setRows] = useState([]);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
if (!active)
|
|
9
|
+
return;
|
|
10
|
+
try {
|
|
11
|
+
const list = client.adapters.list();
|
|
12
|
+
setRows(list.map((a) => ({
|
|
13
|
+
agent: a.agent,
|
|
14
|
+
displayName: a.displayName,
|
|
15
|
+
cliCommand: a.cliCommand,
|
|
16
|
+
source: a.source,
|
|
17
|
+
})));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// ignore
|
|
21
|
+
}
|
|
22
|
+
}, [active, client]);
|
|
23
|
+
if (rows.length === 0)
|
|
24
|
+
return _jsx(Text, { dimColor: true, children: "No adapters registered." });
|
|
25
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Registered adapters" }), rows.map((r) => (_jsxs(Text, { children: [_jsx(Text, { color: "cyan", children: r.agent.padEnd(14) }), ' ', r.displayName.padEnd(20), ' ', _jsx(Text, { dimColor: true, children: r.cliCommand }), ' ', _jsxs(Text, { color: r.source === 'built-in' ? 'green' : 'magenta', children: ["[", r.source, "]"] })] }, r.agent)))] }));
|
|
26
|
+
}
|
|
27
|
+
export default definePlugin({
|
|
28
|
+
name: 'builtin:adapters-view',
|
|
29
|
+
register(ctx) {
|
|
30
|
+
ctx.registerView({
|
|
31
|
+
id: 'adapters',
|
|
32
|
+
title: 'Adapters',
|
|
33
|
+
hotkey: '4',
|
|
34
|
+
component: AdaptersView,
|
|
35
|
+
});
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=adapters-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters-view.js","sourceRoot":"","sources":["../../src/plugins/adapters-view.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,YAAY,EAAqB,MAAM,cAAc,CAAC;AAS/D,SAAS,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAgB;IACpD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAQ,EAAE,CAAC,CAAC;IAC5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,CACL,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACf,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAC,IAAI,IAAC,QAAQ,8CAA+B,CAAC;IAC5E,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,IAAI,0CAA2B,EACpC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACf,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAQ,EAAC,GAAG,EACjD,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAC9B,KAAC,IAAI,IAAC,QAAQ,kBAAE,CAAC,CAAC,UAAU,GAAQ,EAAC,GAAG,EACxC,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,kBAAI,CAAC,CAAC,MAAM,SAAS,KAJtE,CAAC,CAAC,KAAK,CAKX,CACR,CAAC,IACE,CACP,CAAC;AACJ,CAAC;AAED,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE,uBAAuB;IAC7B,QAAQ,CAAC,GAAG;QACV,GAAG,CAAC,YAAY,CAAC;YACf,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,GAAG;YACX,SAAS,EAAE,YAAY;SACxB,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-view.d.ts","sourceRoot":"","sources":["../../src/plugins/agents-view.tsx"],"names":[],"mappings":";AAsMA,wBAUG"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
import * as fs from 'node:fs';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import * as os from 'node:os';
|
|
6
|
+
import { Box, Text, useInput } from 'ink';
|
|
7
|
+
import { definePlugin } from '../plugin.js';
|
|
8
|
+
function buildRegistry() {
|
|
9
|
+
const HOME = os.homedir() || '.';
|
|
10
|
+
return {
|
|
11
|
+
claude: { global: path.join(HOME, '.claude', 'agents'), project: path.join('.claude', 'agents') },
|
|
12
|
+
codex: { global: path.join(HOME, '.codex', 'agents'), project: path.join('.codex', 'agents') },
|
|
13
|
+
cursor: { global: path.join(HOME, '.cursor', 'agents'), project: path.join('.cursor', 'agents') },
|
|
14
|
+
opencode: { global: path.join(HOME, '.opencode', 'agents'), project: path.join('.opencode', 'agents') },
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function readDir(dir) {
|
|
18
|
+
try {
|
|
19
|
+
if (!fs.existsSync(dir))
|
|
20
|
+
return [];
|
|
21
|
+
return fs.readdirSync(dir);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function scan() {
|
|
28
|
+
const all = [];
|
|
29
|
+
for (const [agent, paths] of Object.entries(buildRegistry())) {
|
|
30
|
+
for (const name of readDir(paths.global)) {
|
|
31
|
+
all.push({ agent, scope: 'global', name, dir: paths.global, fullPath: path.join(paths.global, name) });
|
|
32
|
+
}
|
|
33
|
+
const proj = path.isAbsolute(paths.project) ? paths.project : path.join(process.cwd(), paths.project);
|
|
34
|
+
for (const name of readDir(proj)) {
|
|
35
|
+
all.push({ agent, scope: 'project', name, dir: proj, fullPath: path.join(proj, name) });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return all;
|
|
39
|
+
}
|
|
40
|
+
function copyPath(src, dst) {
|
|
41
|
+
const st = fs.statSync(src);
|
|
42
|
+
if (st.isDirectory()) {
|
|
43
|
+
fs.mkdirSync(dst, { recursive: true });
|
|
44
|
+
for (const name of fs.readdirSync(src))
|
|
45
|
+
copyPath(path.join(src, name), path.join(dst, name));
|
|
46
|
+
}
|
|
47
|
+
else if (st.isFile()) {
|
|
48
|
+
fs.mkdirSync(path.dirname(dst), { recursive: true });
|
|
49
|
+
fs.copyFileSync(src, dst);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const AGENT_NAMES = ['claude', 'codex', 'cursor', 'opencode'];
|
|
53
|
+
function AgentsView({ active }) {
|
|
54
|
+
const [rows, setRows] = useState([]);
|
|
55
|
+
const [cursor, setCursor] = useState(0);
|
|
56
|
+
const [confirmDelete, setConfirmDelete] = useState(false);
|
|
57
|
+
const [status, setStatus] = useState(null);
|
|
58
|
+
const [addMode, setAddMode] = useState(null);
|
|
59
|
+
const [addAgentIdx, setAddAgentIdx] = useState(0);
|
|
60
|
+
const [addSource, setAddSource] = useState('');
|
|
61
|
+
const refresh = useCallback(() => {
|
|
62
|
+
const r = scan();
|
|
63
|
+
setRows(r);
|
|
64
|
+
setCursor((c) => Math.min(c, Math.max(r.length - 1, 0)));
|
|
65
|
+
}, []);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
if (!active)
|
|
68
|
+
return;
|
|
69
|
+
refresh();
|
|
70
|
+
}, [active, refresh]);
|
|
71
|
+
const performAdd = useCallback((agent, source) => {
|
|
72
|
+
try {
|
|
73
|
+
const abs = path.resolve(source);
|
|
74
|
+
if (!fs.existsSync(abs)) {
|
|
75
|
+
setStatus(`Source not found: ${abs}`);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const dirs = buildRegistry()[agent];
|
|
79
|
+
if (!dirs) {
|
|
80
|
+
setStatus(`Unknown agent: ${agent}`);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const proj = path.isAbsolute(dirs.project) ? dirs.project : path.join(process.cwd(), dirs.project);
|
|
84
|
+
const dst = path.join(proj, path.basename(abs));
|
|
85
|
+
if (fs.existsSync(dst)) {
|
|
86
|
+
setStatus(`Already exists: ${dst} (use CLI with --force)`);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
fs.mkdirSync(proj, { recursive: true });
|
|
90
|
+
copyPath(abs, dst);
|
|
91
|
+
setStatus(`Added ${path.basename(abs)} → ${dst}`);
|
|
92
|
+
refresh();
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
setStatus(`Add failed: ${String(e)}`);
|
|
96
|
+
}
|
|
97
|
+
}, [refresh]);
|
|
98
|
+
useInput((input, key) => {
|
|
99
|
+
if (!active)
|
|
100
|
+
return;
|
|
101
|
+
if (addMode === 'agent') {
|
|
102
|
+
if (key.escape) {
|
|
103
|
+
setAddMode(null);
|
|
104
|
+
setStatus('Cancelled');
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (key.leftArrow || input === 'h')
|
|
108
|
+
setAddAgentIdx((i) => Math.max(i - 1, 0));
|
|
109
|
+
else if (key.rightArrow || input === 'l')
|
|
110
|
+
setAddAgentIdx((i) => Math.min(i + 1, AGENT_NAMES.length - 1));
|
|
111
|
+
else if (key.return) {
|
|
112
|
+
setAddMode('source');
|
|
113
|
+
setAddSource('');
|
|
114
|
+
}
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (addMode === 'source') {
|
|
118
|
+
if (key.escape) {
|
|
119
|
+
setAddMode(null);
|
|
120
|
+
setStatus('Cancelled');
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (key.return) {
|
|
124
|
+
const agent = AGENT_NAMES[addAgentIdx];
|
|
125
|
+
setAddMode(null);
|
|
126
|
+
performAdd(agent, addSource);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (key.backspace || key.delete) {
|
|
130
|
+
setAddSource((s) => s.slice(0, -1));
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (input && !key.ctrl && !key.meta)
|
|
134
|
+
setAddSource((s) => s + input);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (confirmDelete) {
|
|
138
|
+
if (input === 'y' || input === 'Y') {
|
|
139
|
+
const row = rows[cursor];
|
|
140
|
+
if (row) {
|
|
141
|
+
try {
|
|
142
|
+
fs.rmSync(row.fullPath, { recursive: true, force: true });
|
|
143
|
+
setStatus(`Deleted ${row.name}`);
|
|
144
|
+
refresh();
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
setStatus(`Delete failed: ${String(e)}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
setConfirmDelete(false);
|
|
151
|
+
}
|
|
152
|
+
else if (input === 'n' || input === 'N' || key.escape) {
|
|
153
|
+
setConfirmDelete(false);
|
|
154
|
+
setStatus('Cancelled');
|
|
155
|
+
}
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (key.downArrow || input === 'j')
|
|
159
|
+
setCursor((c) => Math.min(c + 1, Math.max(rows.length - 1, 0)));
|
|
160
|
+
else if (key.upArrow || input === 'k')
|
|
161
|
+
setCursor((c) => Math.max(c - 1, 0));
|
|
162
|
+
else if (input === 'r')
|
|
163
|
+
refresh();
|
|
164
|
+
else if (input === 'd' && rows[cursor])
|
|
165
|
+
setConfirmDelete(true);
|
|
166
|
+
else if (input === 'a') {
|
|
167
|
+
setAddMode('agent');
|
|
168
|
+
setAddAgentIdx(0);
|
|
169
|
+
}
|
|
170
|
+
}, { isActive: active });
|
|
171
|
+
if (rows.length === 0) {
|
|
172
|
+
return _jsx(Text, { dimColor: true, children: "No sub-agents installed. Use `amux agent add` to install." });
|
|
173
|
+
}
|
|
174
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Sub-agents" }), _jsx(Text, { dimColor: true, children: "j/k or arrows: move \u00B7 d: delete \u00B7 r: refresh \u00B7 (amux agent <list|add|remove|where>)" }), rows.slice(0, 40).map((r, i) => {
|
|
175
|
+
const sel = i === cursor;
|
|
176
|
+
return (_jsxs(Text, { color: sel ? 'green' : undefined, children: [sel ? '> ' : ' ', _jsx(Text, { color: "cyan", children: r.agent.padEnd(10) }), ' ', _jsx(Text, { color: "gray", children: r.scope.padEnd(7) }), ' ', _jsx(Text, { children: r.name })] }, r.agent + ':' + r.scope + ':' + r.name + ':' + i));
|
|
177
|
+
}), rows.length > 40 ? _jsxs(Text, { dimColor: true, children: ["\u2026 ", rows.length - 40, " more"] }) : null, addMode === 'agent' ? (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "yellow", children: "Select agent (\u2190/\u2192, Enter to confirm, Esc to cancel):" }), _jsx(Text, { children: AGENT_NAMES.map((n, i) => (_jsxs(Text, { color: i === addAgentIdx ? 'green' : undefined, children: [i === addAgentIdx ? '[' : ' ', n, i === addAgentIdx ? ']' : ' ', ' '] }, n))) })] })) : null, addMode === 'source' ? (_jsxs(Text, { color: "yellow", children: ["Source path for ", AGENT_NAMES[addAgentIdx], ": ", addSource, _jsx(Text, { color: "gray", children: "_" })] })) : null, !addMode && !confirmDelete ? _jsx(Text, { dimColor: true, children: "a: add \u00B7 d: delete" }) : null, confirmDelete && rows[cursor] ? (_jsxs(Text, { color: "yellow", children: ["Delete ", rows[cursor].fullPath, "? (y/n)"] })) : null, status ? _jsx(Text, { dimColor: true, children: status }) : null] }));
|
|
178
|
+
}
|
|
179
|
+
export default definePlugin({
|
|
180
|
+
name: 'builtin:agents-view',
|
|
181
|
+
register(ctx) {
|
|
182
|
+
ctx.registerView({
|
|
183
|
+
id: 'agents',
|
|
184
|
+
title: 'Agents',
|
|
185
|
+
hotkey: 'G',
|
|
186
|
+
component: AgentsView,
|
|
187
|
+
});
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
//# sourceMappingURL=agents-view.js.map
|