@chances-ai/cli 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/boot/create-app.d.ts +3 -1
- package/dist/boot/create-app.d.ts.map +1 -1
- package/dist/boot/create-app.js +8 -1
- package/dist/boot/create-app.js.map +1 -1
- package/dist/boot/load-runtime.d.ts +16 -1
- package/dist/boot/load-runtime.d.ts.map +1 -1
- package/dist/boot/load-runtime.js +34 -0
- package/dist/boot/load-runtime.js.map +1 -1
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +14 -2
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/prompt.d.ts.map +1 -1
- package/dist/commands/prompt.js +14 -2
- package/dist/commands/prompt.js.map +1 -1
- package/dist/entrypoints/cli.d.ts.map +1 -1
- package/dist/entrypoints/cli.js +14 -3
- package/dist/entrypoints/cli.js.map +1 -1
- package/dist/slash/index.d.ts.map +1 -1
- package/dist/slash/index.js +2 -0
- package/dist/slash/index.js.map +1 -1
- package/dist/slash/mcp.d.ts +27 -0
- package/dist/slash/mcp.d.ts.map +1 -0
- package/dist/slash/mcp.js +236 -0
- package/dist/slash/mcp.js.map +1 -0
- package/package.json +17 -14
|
@@ -4,7 +4,9 @@ import type { SessionManager } from "@chances-ai/session";
|
|
|
4
4
|
import type { AppContext } from "./load-runtime.js";
|
|
5
5
|
/** Wires an AgentEngine for a given session and permission resolver. Passes
|
|
6
6
|
* the AppContext's `selection` (mutable model preference) through so a later
|
|
7
|
-
* `/model` slash command can mutate it without rebuilding the engine.
|
|
7
|
+
* `/model` slash command can mutate it without rebuilding the engine. The
|
|
8
|
+
* config-supplied `agent.maxTurns` is forwarded as-is; the engine falls back
|
|
9
|
+
* to its own default when it's undefined. */
|
|
8
10
|
export declare function buildEngine(ctx: AppContext, session: SessionManager, resolver: PermissionResolver): AgentEngine;
|
|
9
11
|
/** Auto-resolver for non-interactive modes: approve only when --yes was passed. */
|
|
10
12
|
export declare function autoResolver(approve: boolean): PermissionResolver;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../../src/boot/create-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD
|
|
1
|
+
{"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../../src/boot/create-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;6CAI6C;AAC7C,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,GAAG,WAAW,CAkB/G;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB,CAEjE"}
|
package/dist/boot/create-app.js
CHANGED
|
@@ -2,9 +2,15 @@ import { AgentEngine } from "@chances-ai/core";
|
|
|
2
2
|
import { PermissionGate } from "@chances-ai/tools";
|
|
3
3
|
/** Wires an AgentEngine for a given session and permission resolver. Passes
|
|
4
4
|
* the AppContext's `selection` (mutable model preference) through so a later
|
|
5
|
-
* `/model` slash command can mutate it without rebuilding the engine.
|
|
5
|
+
* `/model` slash command can mutate it without rebuilding the engine. The
|
|
6
|
+
* config-supplied `agent.maxTurns` is forwarded as-is; the engine falls back
|
|
7
|
+
* to its own default when it's undefined. */
|
|
6
8
|
export function buildEngine(ctx, session, resolver) {
|
|
7
9
|
const gate = new PermissionGate(ctx.config.permissions, resolver);
|
|
10
|
+
// Expose the gate so slash commands (notably `/mcp restart` / `/mcp remove`)
|
|
11
|
+
// can invalidate cached positive decisions when tool implementations may
|
|
12
|
+
// have changed. Last engine wins — re-build replaces the reference.
|
|
13
|
+
ctx.gate = gate;
|
|
8
14
|
return new AgentEngine({
|
|
9
15
|
bus: ctx.bus,
|
|
10
16
|
router: ctx.router,
|
|
@@ -15,6 +21,7 @@ export function buildEngine(ctx, session, resolver) {
|
|
|
15
21
|
plugins: ctx.plugins,
|
|
16
22
|
workspaceRoot: ctx.workspaceRoot,
|
|
17
23
|
selection: ctx.selection,
|
|
24
|
+
maxTurns: ctx.config.agent?.maxTurns,
|
|
18
25
|
});
|
|
19
26
|
}
|
|
20
27
|
/** Auto-resolver for non-interactive modes: approve only when --yes was passed. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-app.js","sourceRoot":"","sources":["../../src/boot/create-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAA2B,MAAM,mBAAmB,CAAC;AAI5E
|
|
1
|
+
{"version":3,"file":"create-app.js","sourceRoot":"","sources":["../../src/boot/create-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAA2B,MAAM,mBAAmB,CAAC;AAI5E;;;;6CAI6C;AAC7C,MAAM,UAAU,WAAW,CAAC,GAAe,EAAE,OAAuB,EAAE,QAA4B;IAChG,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClE,6EAA6E;IAC7E,yEAAyE;IACzE,oEAAoE;IACpE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;IAChB,OAAO,IAAI,WAAW,CAAC;QACrB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI;QACJ,OAAO;QACP,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ;KACrC,CAAC,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC;AAC7B,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { EventBus, FeatureFlags, Logger, ModelSelection, type LogLevel } from "@chances-ai/runtime";
|
|
2
2
|
import { AuthStore, type ChancesConfig, type ExternalPluginEntry } from "@chances-ai/config";
|
|
3
3
|
import { ModelRegistry, ModelRouter } from "@chances-ai/ai";
|
|
4
|
-
import { ToolRegistry } from "@chances-ai/tools";
|
|
4
|
+
import { ToolRegistry, type PermissionGate } from "@chances-ai/tools";
|
|
5
5
|
import { MemoryStore } from "@chances-ai/memory";
|
|
6
6
|
import { TelemetrySink } from "@chances-ai/telemetry";
|
|
7
|
+
import { McpHost } from "@chances-ai/mcp";
|
|
7
8
|
import { PluginHost, type Plugin } from "@chances-ai/plugin-api";
|
|
8
9
|
export interface AppContext {
|
|
9
10
|
bus: EventBus;
|
|
@@ -17,6 +18,20 @@ export interface AppContext {
|
|
|
17
18
|
memory: MemoryStore;
|
|
18
19
|
telemetry: TelemetrySink;
|
|
19
20
|
plugins: PluginHost | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Connected MCP host. Undefined when `config.mcp.servers` is empty —
|
|
23
|
+
* preserves the cold-start budget (no SDK load for users who don't
|
|
24
|
+
* configure MCP). Owned by the runtime; CLI shutdown calls `dispose`.
|
|
25
|
+
*/
|
|
26
|
+
mcp: McpHost | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Live permission gate, populated by `buildEngine` so slash commands
|
|
29
|
+
* (notably `/mcp restart` / `/mcp remove`) can call `gate.invalidate(name)`
|
|
30
|
+
* to drop stale positive decisions when a tool's implementation may have
|
|
31
|
+
* changed. Undefined before the engine has been built (pre-runtime CLI
|
|
32
|
+
* paths like `chances stats` never set it).
|
|
33
|
+
*/
|
|
34
|
+
gate?: PermissionGate;
|
|
20
35
|
workspaceRoot: string;
|
|
21
36
|
/** Mutable model preference seeded from config; `/model` mutates this so the
|
|
22
37
|
* next turn picks up the choice without rebuilding the engine. Built-in
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-runtime.d.ts","sourceRoot":"","sources":["../../src/boot/load-runtime.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,cAAc,EACd,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,SAAS,EAET,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,aAAa,EACb,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAgB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"load-runtime.d.ts","sourceRoot":"","sources":["../../src/boot/load-runtime.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,cAAc,EACd,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,SAAS,EAET,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,aAAa,EACb,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAgB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAkB,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGjE,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,QAAQ,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,GAAG,EAAE,OAAO,GAAG,SAAS,CAAC;IACzB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB;;uEAEmE;IACnE,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,iFAAiF;AACjF,wBAAsB,WAAW,CAAC,SAAS,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CA4CvF;AA6ED;;;yBAGyB;AACzB,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
|
|
@@ -7,6 +7,8 @@ import { KNOWN_MODELS, ModelRegistry, ModelRouter, buildRegistry, envByProviderF
|
|
|
7
7
|
import { ToolRegistry, builtinTools } from "@chances-ai/tools";
|
|
8
8
|
import { MemoryStore, memoryTools } from "@chances-ai/memory";
|
|
9
9
|
import { TelemetrySink } from "@chances-ai/telemetry";
|
|
10
|
+
import { McpHost, parseServerMap } from "@chances-ai/mcp";
|
|
11
|
+
import cliPkg from "../../package.json" with { type: "json" };
|
|
10
12
|
import { PluginHost } from "@chances-ai/plugin-api";
|
|
11
13
|
import { loggerPlugin } from "@chances-ai/plugin-logger";
|
|
12
14
|
/** Builds the shared application context (the wiring all commands depend on). */
|
|
@@ -31,6 +33,7 @@ export async function loadRuntime(overrides = {}) {
|
|
|
31
33
|
const telemetry = new TelemetrySink(config.workspaceRoot);
|
|
32
34
|
telemetry.attach(bus);
|
|
33
35
|
const plugins = await loadPlugins(config, bus, logger, tools);
|
|
36
|
+
const mcp = await loadMcp(config, bus, logger, tools);
|
|
34
37
|
const selection = new ModelSelection({ provider: config.provider, model: config.model });
|
|
35
38
|
return {
|
|
36
39
|
bus,
|
|
@@ -44,10 +47,41 @@ export async function loadRuntime(overrides = {}) {
|
|
|
44
47
|
memory,
|
|
45
48
|
telemetry,
|
|
46
49
|
plugins,
|
|
50
|
+
mcp,
|
|
47
51
|
workspaceRoot: config.workspaceRoot,
|
|
48
52
|
selection,
|
|
49
53
|
};
|
|
50
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Builds the MCP host when the config supplies servers. Per-server parse
|
|
57
|
+
* failures are warnings, not boot errors — `McpHost.start` itself never
|
|
58
|
+
* throws, so the overall agent always boots. Returns `undefined` (and
|
|
59
|
+
* never imports the SDK transitively) when no servers are configured.
|
|
60
|
+
*/
|
|
61
|
+
async function loadMcp(config, bus, logger, tools) {
|
|
62
|
+
const raw = config.mcp?.servers;
|
|
63
|
+
if (!raw || Object.keys(raw).length === 0)
|
|
64
|
+
return undefined;
|
|
65
|
+
const { servers, failures } = parseServerMap(raw);
|
|
66
|
+
for (const [id, message] of Object.entries(failures)) {
|
|
67
|
+
logger.warn(`mcp config '${id}': ${message}`);
|
|
68
|
+
}
|
|
69
|
+
if (Object.keys(servers).length === 0)
|
|
70
|
+
return undefined;
|
|
71
|
+
// Thread our own package.json identity into the MCP host so the version
|
|
72
|
+
// shown to MCP servers during the initialize handshake is whatever the
|
|
73
|
+
// changeset just bumped. Reading the CLI's own package.json (which
|
|
74
|
+
// `version.ts` already does for `chances --version`) is the proven path
|
|
75
|
+
// under `bun build --compile`; the mcp library deliberately does not
|
|
76
|
+
// import its own package.json to avoid an unverified binary path.
|
|
77
|
+
return McpHost.start({
|
|
78
|
+
servers,
|
|
79
|
+
bus,
|
|
80
|
+
logger,
|
|
81
|
+
registry: tools,
|
|
82
|
+
clientIdentity: { name: cliPkg.name, version: cliPkg.version },
|
|
83
|
+
});
|
|
84
|
+
}
|
|
51
85
|
/**
|
|
52
86
|
* Builds and loads the plugin host. Returns `undefined` when no plugin is
|
|
53
87
|
* configured — that keeps the engine wiring free of a useless empty host and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-runtime.js","sourceRoot":"","sources":["../../src/boot/load-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,cAAc,GAEf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,SAAS,EACT,UAAU,GAGX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"load-runtime.js","sourceRoot":"","sources":["../../src/boot/load-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAwGrE;AAED,eAAO,MAAM,WAAW,EAAE,UAczB,CAAC"}
|
package/dist/commands/chat.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CancellationTokenSource } from "@chances-ai/runtime";
|
|
1
|
+
import { AppError, CancellationTokenSource, ErrorCode } from "@chances-ai/runtime";
|
|
2
2
|
import { SessionManager, SessionStore } from "@chances-ai/session";
|
|
3
3
|
import { parseSlashInput, PluginHost } from "@chances-ai/plugin-api";
|
|
4
4
|
import { ChatViewModel, ModalController, renderChat } from "@chances-ai/tui";
|
|
@@ -63,9 +63,21 @@ export async function runInteractive(ctx) {
|
|
|
63
63
|
await engine.runTurn(prompt, cts.token);
|
|
64
64
|
}
|
|
65
65
|
catch (err) {
|
|
66
|
+
// The engine's contract:
|
|
67
|
+
// - non-Cancelled AppError → bus.error already emitted before throw
|
|
68
|
+
// (exhaustion + terminal retry paths). Re-emitting would
|
|
69
|
+
// double-render in scrollback.
|
|
70
|
+
// - AppError(Cancelled) → user-initiated stop, not an error to
|
|
71
|
+
// display. Stay silent.
|
|
72
|
+
// - any other throw → an unanticipated bug we still want surfaced.
|
|
73
|
+
// Watching the bus generically (the old approach) misfired when
|
|
74
|
+
// unrelated plugin errors fired in the same await window — codex
|
|
75
|
+
// re-review caught that.
|
|
76
|
+
if (err instanceof AppError)
|
|
77
|
+
return;
|
|
66
78
|
ctx.bus.emit({
|
|
67
79
|
type: "error",
|
|
68
|
-
code:
|
|
80
|
+
code: ErrorCode.Unknown,
|
|
69
81
|
message: err instanceof Error ? err.message : String(err),
|
|
70
82
|
});
|
|
71
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtD,6DAA6D;AAC7D,wBAAsB,SAAS,CAC7B,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtD,6DAA6D;AAC7D,wBAAsB,SAAS,CAC7B,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC,CAiCjB"}
|
package/dist/commands/prompt.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CancellationTokenSource, ErrorCode, exitCodeFor } from "@chances-ai/runtime";
|
|
1
|
+
import { AppError, CancellationTokenSource, ErrorCode, exitCodeFor } from "@chances-ai/runtime";
|
|
2
2
|
import { SessionManager, SessionStore } from "@chances-ai/session";
|
|
3
3
|
import { parseSlashInput, PluginHost } from "@chances-ai/plugin-api";
|
|
4
4
|
import { ChatViewModel } from "@chances-ai/tui";
|
|
@@ -22,7 +22,19 @@ export async function runPrompt(ctx, prompt, format, autoApprove) {
|
|
|
22
22
|
await engine.runTurn(prompt, cts.token);
|
|
23
23
|
}
|
|
24
24
|
catch (err) {
|
|
25
|
-
|
|
25
|
+
// Engine paths that emit a bus `error` event before throwing (provider
|
|
26
|
+
// exhaustion, classified stream errors) already populated `lastError`.
|
|
27
|
+
// Re-emitting here would clobber the real code (e.g. PROVIDER → UNKNOWN)
|
|
28
|
+
// and double-fire the error frame in --json / --ndjson modes. Only emit
|
|
29
|
+
// when nothing was reported yet, and use AppError's code when present.
|
|
30
|
+
if (lastError === null) {
|
|
31
|
+
const code = err instanceof AppError ? err.code : ErrorCode.Unknown;
|
|
32
|
+
ctx.bus.emit({
|
|
33
|
+
type: "error",
|
|
34
|
+
code,
|
|
35
|
+
message: err instanceof Error ? err.message : String(err),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
26
38
|
}
|
|
27
39
|
renderer.finalize();
|
|
28
40
|
return lastError ? exitCodeFor(lastError) : 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAmC,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/entrypoints/cli.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAQvE,OAAO,EAAe,SAAS,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AA2D1D,oDAAoD;AACpD,wBAAgB,oBAAoB,IAAI,eAAe,CAWtD;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtG,yEAAyE;AACzE,wBAAsB,IAAI,CACxB,IAAI,GAAE,MAAM,EAA0B,EACtC,aAAa,GAAE,aAA2B,GACzC,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/entrypoints/cli.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAQvE,OAAO,EAAe,SAAS,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AA2D1D,oDAAoD;AACpD,wBAAgB,oBAAoB,IAAI,eAAe,CAWtD;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtG,yEAAyE;AACzE,wBAAsB,IAAI,CACxB,IAAI,GAAE,MAAM,EAA0B,EACtC,aAAa,GAAE,aAA2B,GACzC,OAAO,CAAC,MAAM,CAAC,CA0CjB;AAED,0EAA0E;AAC1E,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/entrypoints/cli.js
CHANGED
|
@@ -84,9 +84,20 @@ export async function main(argv = process.argv.slice(2), loadRuntimeFn = loadRun
|
|
|
84
84
|
return await cmd.run(ctx, cliArgs, registry);
|
|
85
85
|
}
|
|
86
86
|
finally {
|
|
87
|
-
// Plugins may hold file handles
|
|
88
|
-
//
|
|
89
|
-
// are logged but don't mask
|
|
87
|
+
// Plugins / MCP servers may hold file handles, child processes, or
|
|
88
|
+
// sockets. Give them a chance to clean up regardless of whether the
|
|
89
|
+
// command succeeded or threw. Dispose errors are logged but don't mask
|
|
90
|
+
// the command's own outcome. MCP teardown is awaited *before* plugin
|
|
91
|
+
// dispose so its child processes' SIGTERM lands while the bus is still
|
|
92
|
+
// alive to log the result.
|
|
93
|
+
if (ctx.mcp) {
|
|
94
|
+
try {
|
|
95
|
+
await ctx.mcp.dispose();
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
ctx.logger.warn(`mcp dispose failed: ${e.message}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
90
101
|
if (ctx.plugins) {
|
|
91
102
|
try {
|
|
92
103
|
await ctx.plugins.dispose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/entrypoints/cli.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/entrypoints/cli.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAmB,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAc1D,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,GAAG,GAAe,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC/G,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC;YACV,KAAK,UAAU;gBACb,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7B,MAAM;YACR,KAAK,QAAQ;gBACX,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;gBACpB,MAAM;YACR,KAAK,UAAU;gBACb,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACtB,MAAM;YACR,KAAK,OAAO;gBACV,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;gBACf,MAAM;YACR,KAAK,YAAY;gBACf,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,MAAM;YACR,KAAK,SAAS;gBACZ,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtB,MAAM;YACR,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ;gBACX,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;gBAChB,MAAM;YACR,KAAK,WAAW;gBACd,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;gBACnB,MAAM;YACR;gBACE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,oBAAoB;IAClC,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAID,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACtC,gBAA+B,WAAW;IAE1C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IAExC,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,iEAAiE;IACjE,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,YAAY,EAAE,CAAC;IACxC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;IAE1C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;IAChE,MAAM,OAAO,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAEnG,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAChF,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;YAAS,CAAC;QACT,mEAAmE;QACnE,oEAAoE;QACpE,uEAAuE;QACvE,qEAAqE;QACrE,uEAAuE;QACvE,2BAA2B;QAC3B,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAC1B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAwB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC9B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA2B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/slash/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/slash/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAU1D;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,UAAU,CAAC;IAChB,EAAE,EAAE,aAAa,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
package/dist/slash/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import { makeClearPlugin } from "./clear.js";
|
|
|
5
5
|
import { makeResumePlugin } from "./resume.js";
|
|
6
6
|
import { makeCompactPlugin } from "./compact.js";
|
|
7
7
|
import { makeLogoutPlugin } from "./logout.js";
|
|
8
|
+
import { makeMcpPlugin } from "./mcp.js";
|
|
8
9
|
export async function registerBuiltinSlashCommands(host, deps) {
|
|
9
10
|
// Order doesn't matter; each plugin only mutates its own command slot.
|
|
10
11
|
// `await` so any onLoad error (e.g. duplicate registration in a buggy
|
|
@@ -16,5 +17,6 @@ export async function registerBuiltinSlashCommands(host, deps) {
|
|
|
16
17
|
await host.load(makeResumePlugin(deps));
|
|
17
18
|
await host.load(makeCompactPlugin(deps));
|
|
18
19
|
await host.load(makeLogoutPlugin(deps));
|
|
20
|
+
await host.load(makeMcpPlugin(deps));
|
|
19
21
|
}
|
|
20
22
|
//# sourceMappingURL=index.js.map
|
package/dist/slash/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/slash/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/slash/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAmBzC,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,IAAgB,EAChB,IAAsB;IAEtB,uEAAuE;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Plugin } from "@chances-ai/plugin-api";
|
|
2
|
+
import type { BuiltinSlashDeps } from "./index.js";
|
|
3
|
+
/**
|
|
4
|
+
* `/mcp [list|tools|restart|test|remove|add]`
|
|
5
|
+
*
|
|
6
|
+
* - (no args) / `list` — print one row per configured server with its
|
|
7
|
+
* live status (ready / failed / disabled / disposed). Failed rows show
|
|
8
|
+
* the error so the user can see *why* a server disappeared.
|
|
9
|
+
* - `tools` — list every `mcp__*` tool currently registered, grouped by
|
|
10
|
+
* server. Useful sanity check between a `/mcp restart` and the next
|
|
11
|
+
* turn.
|
|
12
|
+
* - `restart <name>` — tear down + reconnect one server. Re-registers
|
|
13
|
+
* its tools.
|
|
14
|
+
* - `test <name>` — one-shot connect → list → dispose. Doesn't touch
|
|
15
|
+
* the live host. The right tool to debug a misbehaving config without
|
|
16
|
+
* restarting the agent.
|
|
17
|
+
* - `remove <name>` — drop the server from project config and unload
|
|
18
|
+
* it from the running host. Persists to `.chances/config.json`.
|
|
19
|
+
* - `add` — placeholder; in 3.1 we print the JSON example and ask the
|
|
20
|
+
* user to edit `.chances/config.json` directly. The interactive
|
|
21
|
+
* wizard is a 3.x.later item — the JSON shape is small enough that
|
|
22
|
+
* a 200-line modal isn't warranted for v1.
|
|
23
|
+
*
|
|
24
|
+
* Default action (no args) is `list`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function makeMcpPlugin(deps: BuiltinSlashDeps): Plugin;
|
|
27
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/slash/mcp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,MAAM,EAAqB,MAAM,wBAAwB,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAyB5D"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { definePlugin } from "@chances-ai/plugin-api";
|
|
4
|
+
/**
|
|
5
|
+
* `/mcp [list|tools|restart|test|remove|add]`
|
|
6
|
+
*
|
|
7
|
+
* - (no args) / `list` — print one row per configured server with its
|
|
8
|
+
* live status (ready / failed / disabled / disposed). Failed rows show
|
|
9
|
+
* the error so the user can see *why* a server disappeared.
|
|
10
|
+
* - `tools` — list every `mcp__*` tool currently registered, grouped by
|
|
11
|
+
* server. Useful sanity check between a `/mcp restart` and the next
|
|
12
|
+
* turn.
|
|
13
|
+
* - `restart <name>` — tear down + reconnect one server. Re-registers
|
|
14
|
+
* its tools.
|
|
15
|
+
* - `test <name>` — one-shot connect → list → dispose. Doesn't touch
|
|
16
|
+
* the live host. The right tool to debug a misbehaving config without
|
|
17
|
+
* restarting the agent.
|
|
18
|
+
* - `remove <name>` — drop the server from project config and unload
|
|
19
|
+
* it from the running host. Persists to `.chances/config.json`.
|
|
20
|
+
* - `add` — placeholder; in 3.1 we print the JSON example and ask the
|
|
21
|
+
* user to edit `.chances/config.json` directly. The interactive
|
|
22
|
+
* wizard is a 3.x.later item — the JSON shape is small enough that
|
|
23
|
+
* a 200-line modal isn't warranted for v1.
|
|
24
|
+
*
|
|
25
|
+
* Default action (no args) is `list`.
|
|
26
|
+
*/
|
|
27
|
+
export function makeMcpPlugin(deps) {
|
|
28
|
+
const command = {
|
|
29
|
+
name: "mcp",
|
|
30
|
+
description: "List, test, restart, or remove configured MCP servers.",
|
|
31
|
+
run: async (args) => {
|
|
32
|
+
const sub = args[0] ?? "list";
|
|
33
|
+
if (sub === "list")
|
|
34
|
+
return runList(deps);
|
|
35
|
+
if (sub === "tools")
|
|
36
|
+
return runTools(deps);
|
|
37
|
+
if (sub === "add")
|
|
38
|
+
return runAddGuidance();
|
|
39
|
+
const target = args[1];
|
|
40
|
+
if (!target && (sub === "restart" || sub === "test" || sub === "remove")) {
|
|
41
|
+
return `usage: /mcp ${sub} <name>`;
|
|
42
|
+
}
|
|
43
|
+
if (sub === "restart")
|
|
44
|
+
return runRestart(deps, target);
|
|
45
|
+
if (sub === "test")
|
|
46
|
+
return runTest(deps, target);
|
|
47
|
+
if (sub === "remove")
|
|
48
|
+
return runRemove(deps, target);
|
|
49
|
+
return `unknown subcommand: ${sub} (try: list, tools, restart, test, remove, add)`;
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
return definePlugin({
|
|
53
|
+
name: "builtin/mcp",
|
|
54
|
+
onLoad(ctx) {
|
|
55
|
+
ctx.registerSlashCommand(command);
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function runList(deps) {
|
|
60
|
+
const host = deps.ctx.mcp;
|
|
61
|
+
if (!host)
|
|
62
|
+
return "no MCP servers configured (add a `mcp.servers` block to .chances/config.json)";
|
|
63
|
+
const statuses = host.status();
|
|
64
|
+
if (statuses.length === 0)
|
|
65
|
+
return "no MCP servers configured";
|
|
66
|
+
const pad = Math.max(...statuses.map((s) => s.id.length));
|
|
67
|
+
const lines = statuses.map((s) => {
|
|
68
|
+
const marker = stateMarker(s.state);
|
|
69
|
+
const detail = stateDetail(s);
|
|
70
|
+
return ` ${marker} ${s.id.padEnd(pad)} ${s.state}${detail}`;
|
|
71
|
+
});
|
|
72
|
+
return ["MCP servers:", ...lines].join("\n");
|
|
73
|
+
}
|
|
74
|
+
function runTools(deps) {
|
|
75
|
+
const host = deps.ctx.mcp;
|
|
76
|
+
if (!host)
|
|
77
|
+
return "no MCP servers configured";
|
|
78
|
+
const statuses = host.status();
|
|
79
|
+
const lines = [];
|
|
80
|
+
for (const s of statuses) {
|
|
81
|
+
if (s.state === "ready" && s.toolNames && s.toolNames.length > 0) {
|
|
82
|
+
lines.push(` ${s.id}:`);
|
|
83
|
+
for (const name of s.toolNames)
|
|
84
|
+
lines.push(` ${name}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (lines.length === 0)
|
|
88
|
+
return "no MCP tools registered (no servers in 'ready' state)";
|
|
89
|
+
return ["MCP-bridged tools:", ...lines].join("\n");
|
|
90
|
+
}
|
|
91
|
+
async function runRestart(deps, name) {
|
|
92
|
+
const host = deps.ctx.mcp;
|
|
93
|
+
if (!host)
|
|
94
|
+
return "no MCP servers configured";
|
|
95
|
+
// Capture the tool names BEFORE restart so we can invalidate any cached
|
|
96
|
+
// permission approvals — the server's tool set may have changed, and a
|
|
97
|
+
// tool reusing a prior name could otherwise inherit a stale "allowed"
|
|
98
|
+
// decision pointing at a different implementation.
|
|
99
|
+
const before = host.status().find((s) => s.id === name);
|
|
100
|
+
const priorToolNames = before?.toolNames ?? [];
|
|
101
|
+
try {
|
|
102
|
+
const status = await host.restart(name);
|
|
103
|
+
invalidatePermissions(deps, priorToolNames);
|
|
104
|
+
if (status.state === "ready") {
|
|
105
|
+
return `restarted '${name}' — ${status.toolCount ?? 0} tool(s) registered`;
|
|
106
|
+
}
|
|
107
|
+
return `restarted '${name}' — state=${status.state}${status.error ? ` (${status.error})` : ""}`;
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
return `restart failed: ${e.message}`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function runTest(deps, name) {
|
|
114
|
+
const host = deps.ctx.mcp;
|
|
115
|
+
if (!host)
|
|
116
|
+
return "no MCP servers configured";
|
|
117
|
+
const result = await host.test(name);
|
|
118
|
+
return result.ok ? `${name}: ok — ${result.output}` : `${name}: failed — ${result.output}`;
|
|
119
|
+
}
|
|
120
|
+
async function runRemove(deps, name) {
|
|
121
|
+
const host = deps.ctx.mcp;
|
|
122
|
+
if (!host)
|
|
123
|
+
return "no MCP servers configured";
|
|
124
|
+
const before = host.status().find((s) => s.id === name);
|
|
125
|
+
const priorToolNames = before?.toolNames ?? [];
|
|
126
|
+
try {
|
|
127
|
+
await host.remove(name);
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
return `remove failed: ${e.message}`;
|
|
131
|
+
}
|
|
132
|
+
invalidatePermissions(deps, priorToolNames);
|
|
133
|
+
const persisted = removeFromProjectConfig(deps.ctx.workspaceRoot, name);
|
|
134
|
+
if (!persisted) {
|
|
135
|
+
return `'${name}' unloaded from running host, but could not update .chances/config.json — re-add it manually if needed`;
|
|
136
|
+
}
|
|
137
|
+
return `removed '${name}' from this workspace's config and unloaded its tools`;
|
|
138
|
+
}
|
|
139
|
+
/** Drops cached "user already approved" decisions for the supplied tool
|
|
140
|
+
* names so that the next call after a server restart/remove re-prompts.
|
|
141
|
+
* No-op when the engine hasn't been built yet (text-mode pre-runtime). */
|
|
142
|
+
function invalidatePermissions(deps, names) {
|
|
143
|
+
const gate = deps.ctx.gate;
|
|
144
|
+
if (!gate || names.length === 0)
|
|
145
|
+
return;
|
|
146
|
+
for (const n of names)
|
|
147
|
+
gate.invalidate(n);
|
|
148
|
+
}
|
|
149
|
+
function runAddGuidance() {
|
|
150
|
+
return [
|
|
151
|
+
"/mcp add (3.1: interactive wizard is a 3.x.later item)",
|
|
152
|
+
"",
|
|
153
|
+
"For now, edit .chances/config.json directly. Stdio example:",
|
|
154
|
+
"",
|
|
155
|
+
" {",
|
|
156
|
+
" \"mcp\": {",
|
|
157
|
+
" \"servers\": {",
|
|
158
|
+
" \"filesystem\": {",
|
|
159
|
+
" \"type\": \"stdio\",",
|
|
160
|
+
" \"command\": \"npx\",",
|
|
161
|
+
" \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \".\"]",
|
|
162
|
+
" }",
|
|
163
|
+
" }",
|
|
164
|
+
" }",
|
|
165
|
+
" }",
|
|
166
|
+
"",
|
|
167
|
+
"HTTP example:",
|
|
168
|
+
"",
|
|
169
|
+
" {",
|
|
170
|
+
" \"mcp\": {",
|
|
171
|
+
" \"servers\": {",
|
|
172
|
+
" \"weather\": {",
|
|
173
|
+
" \"type\": \"http\",",
|
|
174
|
+
" \"url\": \"https://example.com/mcp\",",
|
|
175
|
+
" \"headers\": { \"Authorization\": \"Bearer ${WEATHER_TOKEN}\" }",
|
|
176
|
+
" }",
|
|
177
|
+
" }",
|
|
178
|
+
" }",
|
|
179
|
+
" }",
|
|
180
|
+
"",
|
|
181
|
+
"Save the file then run /mcp restart <name> (or restart the agent) to load it.",
|
|
182
|
+
].join("\n");
|
|
183
|
+
}
|
|
184
|
+
function stateMarker(state) {
|
|
185
|
+
switch (state) {
|
|
186
|
+
case "ready":
|
|
187
|
+
return "●";
|
|
188
|
+
case "starting":
|
|
189
|
+
return "…";
|
|
190
|
+
case "failed":
|
|
191
|
+
return "✗";
|
|
192
|
+
case "disabled":
|
|
193
|
+
return "○";
|
|
194
|
+
default:
|
|
195
|
+
return "·";
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function stateDetail(s) {
|
|
199
|
+
if (s.state === "ready" && typeof s.toolCount === "number")
|
|
200
|
+
return ` (${s.toolCount} tools)`;
|
|
201
|
+
if (s.state === "failed" && s.error)
|
|
202
|
+
return ` — ${s.error}`;
|
|
203
|
+
return "";
|
|
204
|
+
}
|
|
205
|
+
/** Removes one MCP server entry from `<workspaceRoot>/.chances/config.json`.
|
|
206
|
+
* Returns false on any filesystem / parse failure so the slash command can
|
|
207
|
+
* degrade gracefully. Preserves every other field in the config. */
|
|
208
|
+
function removeFromProjectConfig(workspaceRoot, name) {
|
|
209
|
+
const dir = join(workspaceRoot, ".chances");
|
|
210
|
+
const path = join(dir, "config.json");
|
|
211
|
+
try {
|
|
212
|
+
if (!existsSync(path))
|
|
213
|
+
return false;
|
|
214
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
215
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
216
|
+
return false;
|
|
217
|
+
const cfg = parsed;
|
|
218
|
+
const mcp = cfg["mcp"];
|
|
219
|
+
if (!mcp || typeof mcp !== "object" || Array.isArray(mcp))
|
|
220
|
+
return false;
|
|
221
|
+
const servers = mcp["servers"];
|
|
222
|
+
if (!servers || typeof servers !== "object" || Array.isArray(servers))
|
|
223
|
+
return false;
|
|
224
|
+
const map = servers;
|
|
225
|
+
if (!(name in map))
|
|
226
|
+
return false;
|
|
227
|
+
delete map[name];
|
|
228
|
+
mkdirSync(dir, { recursive: true });
|
|
229
|
+
writeFileSync(path, JSON.stringify(cfg, null, 2) + "\n");
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/slash/mcp.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,29 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chances-ai/cli",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"chances": "./dist/entrypoints/cli-node.js",
|
|
7
7
|
"chances-bun": "./dist/entrypoints/cli-bun.js"
|
|
8
8
|
},
|
|
9
|
-
"files": [
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
10
12
|
"dependencies": {
|
|
11
13
|
"@ai-sdk/anthropic": "^1.2.0",
|
|
12
14
|
"@ai-sdk/google": "^1.2.0",
|
|
13
15
|
"@ai-sdk/openai": "^1.3.0",
|
|
14
16
|
"@ai-sdk/openai-compatible": "^0.2.0",
|
|
15
|
-
"@chances-ai/ai": "3.
|
|
16
|
-
"@chances-ai/config": "3.
|
|
17
|
-
"@chances-ai/core": "3.
|
|
18
|
-
"@chances-ai/
|
|
19
|
-
"@chances-ai/
|
|
20
|
-
"@chances-ai/
|
|
21
|
-
"@chances-ai/plugin-
|
|
22
|
-
"@chances-ai/
|
|
23
|
-
"@chances-ai/
|
|
24
|
-
"@chances-ai/
|
|
25
|
-
"@chances-ai/
|
|
26
|
-
"@chances-ai/
|
|
17
|
+
"@chances-ai/ai": "3.1.0",
|
|
18
|
+
"@chances-ai/config": "3.1.0",
|
|
19
|
+
"@chances-ai/core": "3.1.0",
|
|
20
|
+
"@chances-ai/mcp": "3.1.0",
|
|
21
|
+
"@chances-ai/memory": "3.1.0",
|
|
22
|
+
"@chances-ai/native": "3.1.0",
|
|
23
|
+
"@chances-ai/plugin-api": "3.1.0",
|
|
24
|
+
"@chances-ai/plugin-logger": "3.1.0",
|
|
25
|
+
"@chances-ai/runtime": "3.1.0",
|
|
26
|
+
"@chances-ai/session": "3.1.0",
|
|
27
|
+
"@chances-ai/telemetry": "3.1.0",
|
|
28
|
+
"@chances-ai/tools": "3.1.0",
|
|
29
|
+
"@chances-ai/tui": "3.1.0",
|
|
27
30
|
"ai": "^4.3.0",
|
|
28
31
|
"ink": "^5.0.1",
|
|
29
32
|
"react": "^18.3.1",
|