@joeyshi12/casper 0.10.1 → 0.11.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/mcp.js +1 -1
- package/dist/server.js +183 -67
- package/dist/web/assets/{abnfDiagram-N423BO3Z-kolM6iA-.js → abnfDiagram-N423BO3Z-B88fK1c8.js} +1 -1
- package/dist/web/assets/{arc-B6sXpTsU.js → arc-DMIevERD.js} +1 -1
- package/dist/web/assets/{architectureDiagram-T3A2C74G-OxTKamol.js → architectureDiagram-T3A2C74G-CJ5mXlmv.js} +1 -1
- package/dist/web/assets/{blockDiagram-VBNYF7ZC-CrzGu26P.js → blockDiagram-VBNYF7ZC-BssSdi9Q.js} +1 -1
- package/dist/web/assets/{c4Diagram-5PPSVZJV-DbhlW2MG.js → c4Diagram-5PPSVZJV-BJHrRcC9.js} +1 -1
- package/dist/web/assets/channel-CFhLIKKC.js +1 -0
- package/dist/web/assets/{chunk-2GRJ4B5K-B9kcSVk5.js → chunk-2GRJ4B5K-Bmq_IVc0.js} +1 -1
- package/dist/web/assets/{chunk-2Q5K7J3B-D1RHbH0J.js → chunk-2Q5K7J3B-B2erbhym.js} +1 -1
- package/dist/web/assets/{chunk-5RXB4S5H-DsS4Kaly.js → chunk-5RXB4S5H-B_DuY9SH.js} +1 -1
- package/dist/web/assets/{chunk-5VM5RSS4-DyOH_9_m.js → chunk-5VM5RSS4-BgiHQCU1.js} +1 -1
- package/dist/web/assets/{chunk-6Q2QTUOP-r6YYakZy.js → chunk-6Q2QTUOP-pmOmsjWC.js} +1 -1
- package/dist/web/assets/{chunk-GF5L2VYU-C0TZsRe_.js → chunk-GF5L2VYU-B-PjTMWL.js} +1 -1
- package/dist/web/assets/{chunk-JWPE2WC7-BSrnLx8X.js → chunk-JWPE2WC7-Be9UnGmk.js} +1 -1
- package/dist/web/assets/{chunk-KBJHAD2P-B3CrUOTy.js → chunk-KBJHAD2P-DPxdXs9r.js} +1 -1
- package/dist/web/assets/{chunk-RYQCIY6F-DXDDOuka.js → chunk-RYQCIY6F-BKc5gOjQ.js} +1 -1
- package/dist/web/assets/{chunk-XXDRQBXY-J9uQk278.js → chunk-XXDRQBXY-CoOnbv-S.js} +1 -1
- package/dist/web/assets/classDiagram-JCYQIIEL-CyTqHDI_.js +1 -0
- package/dist/web/assets/classDiagram-v2-OCEON4UE-CyTqHDI_.js +1 -0
- package/dist/web/assets/{cose-bilkent-JH36ORCC-BuDAduIK.js → cose-bilkent-JH36ORCC-BZ5Oon1z.js} +1 -1
- package/dist/web/assets/{cynefin-VYW2F7L2-CG7bn45a.js → cynefin-VYW2F7L2-DlXmf5Bs.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-MW4NZA55-uwFsfwj5.js → cynefinDiagram-MW4NZA55-ClZQ1oTx.js} +1 -1
- package/dist/web/assets/{dagre-VZM6K2ZE-DZTMXAWW.js → dagre-VZM6K2ZE-CX3pDtYQ.js} +1 -1
- package/dist/web/assets/{diagram-7IWD3JNH-Brh-1lY7.js → diagram-7IWD3JNH-DBelWFkJ.js} +1 -1
- package/dist/web/assets/{diagram-B4RE2ZJO-DRJ9jz48.js → diagram-B4RE2ZJO-CDqvztqK.js} +1 -1
- package/dist/web/assets/{diagram-LBJQPF4R-Ci1wP1XA.js → diagram-LBJQPF4R-DWL1uAJS.js} +1 -1
- package/dist/web/assets/{diagram-Q27KOJAE-q3HfSRIb.js → diagram-Q27KOJAE-BRsHqM1Z.js} +1 -1
- package/dist/web/assets/{diagram-UB23O5K3-DPMadCyG.js → diagram-UB23O5K3-Ci1U9Hdl.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-BXEA7PRR-CakDDHAQ.js → ebnfDiagram-BXEA7PRR-CBPphElN.js} +1 -1
- package/dist/web/assets/{erDiagram-JOGREHBK-DPAJjaAJ.js → erDiagram-JOGREHBK-FI4byJC2.js} +1 -1
- package/dist/web/assets/{flowDiagram-UKHOOZJN-CK1flOS3.js → flowDiagram-UKHOOZJN-BCKR_o2t.js} +1 -1
- package/dist/web/assets/{ganttDiagram-PKOTCBZU-ev8Z0O8-.js → ganttDiagram-PKOTCBZU-BYp35VGe.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-DS77QQ5N-iJcyO-dh.js → gitGraphDiagram-DS77QQ5N--AySchaL.js} +1 -1
- package/dist/web/assets/{index-UeZS9SPv.js → index-D9ooBx1d.js} +1 -1
- package/dist/web/assets/index-Dd6MG4c6.css +1 -0
- package/dist/web/assets/index-DigNQUdR.js +253 -0
- package/dist/web/assets/{infoDiagram-6WML65LV-DxOiXy9i.js → infoDiagram-6WML65LV-CbKYvHyN.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-WSZJBQD7-BCnL1bCP.js → ishikawaDiagram-WSZJBQD7-dLs0tgi6.js} +1 -1
- package/dist/web/assets/{journeyDiagram-NVQOT4AX-D4Nx4bnN.js → journeyDiagram-NVQOT4AX-CXUsDb3x.js} +1 -1
- package/dist/web/assets/{kanban-definition-27J2QSJJ-vipiDpz7.js → kanban-definition-27J2QSJJ-r33P8KpU.js} +1 -1
- package/dist/web/assets/{linear-DZFaVkiW.js → linear-s7N3jDHb.js} +1 -1
- package/dist/web/assets/{mermaid.core-BZw29KJL.js → mermaid.core-Cw282Xmk.js} +4 -4
- package/dist/web/assets/{mindmap-definition-FAOFIHXS-O_jFkrYs.js → mindmap-definition-FAOFIHXS-BXPAvM6U.js} +1 -1
- package/dist/web/assets/{pegDiagram-VL7TDLO6-CkN8OpRg.js → pegDiagram-VL7TDLO6-D-H5hjvM.js} +1 -1
- package/dist/web/assets/{pieDiagram-7S7Q4E2Y-CaYwpFJC.js → pieDiagram-7S7Q4E2Y-D3W5_BlG.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-CIZ2JOQS-BF5j8H9k.js → quadrantDiagram-CIZ2JOQS-BNSHhxkB.js} +1 -1
- package/dist/web/assets/{railroadDiagram-AXF67PYL-C8ZNLg_a.js → railroadDiagram-AXF67PYL-BvLjuIqc.js} +1 -1
- package/dist/web/assets/{requirementDiagram-LRYGKXZP-DrtfbR4t.js → requirementDiagram-LRYGKXZP-CZTpqoEk.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-W5VNT64P-DzderLXC.js → sankeyDiagram-W5VNT64P-xvU-3Mf_.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-SI44F4Z6-CZNSPgAG.js → sequenceDiagram-SI44F4Z6-Bpugvm4V.js} +1 -1
- package/dist/web/assets/{sizeCapture-X5ZJPWSS-5MEaTz4H.js → sizeCapture-X5ZJPWSS-B87TxLF7.js} +1 -1
- package/dist/web/assets/{stateDiagram-OKZ733FA-BcE7PIHf.js → stateDiagram-OKZ733FA-BEQB_m5r.js} +1 -1
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-OtsvcH8I.js +1 -0
- package/dist/web/assets/{swimlanes-SLNWSIFB-1B7NQiEC.js → swimlanes-SLNWSIFB-CVMCMeYR.js} +2 -2
- package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-TYfbhlBN.js +8 -0
- package/dist/web/assets/{timeline-definition-Z64GVDOM-CYYoWuDj.js → timeline-definition-Z64GVDOM-Dylz4pg-.js} +1 -1
- package/dist/web/assets/{vennDiagram-T6HMQDX7-Bn_XtMKm.js → vennDiagram-T6HMQDX7-BmS_JQjJ.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-T6FBY63Y-Cb_ku0pE.js → wardleyDiagram-T6FBY63Y-C0qCz7i-.js} +1 -1
- package/dist/web/assets/{xychartDiagram-ELKLHX3M-C7OphE1U.js → xychartDiagram-ELKLHX3M-aOG1xxkv.js} +1 -1
- package/dist/web/index.html +2 -2
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/dist/web/assets/channel-BCnJe19k.js +0 -1
- package/dist/web/assets/classDiagram-JCYQIIEL-CkP6tQZt.js +0 -1
- package/dist/web/assets/classDiagram-v2-OCEON4UE-CkP6tQZt.js +0 -1
- package/dist/web/assets/index--yuGO85o.js +0 -253
- package/dist/web/assets/index-CTbulwN2.css +0 -1
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-CFi3MuJ7.js +0 -1
- package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-7TcTu5IQ.js +0 -8
package/dist/mcp.js
CHANGED
|
@@ -369,7 +369,7 @@ function handleMessage(req, version) {
|
|
|
369
369
|
}
|
|
370
370
|
|
|
371
371
|
// server/src/mcp/server.ts
|
|
372
|
-
var VERSION = true ? "0.
|
|
372
|
+
var VERSION = true ? "0.11.0" : "dev";
|
|
373
373
|
function runMcpServer() {
|
|
374
374
|
const rl = createInterface({ input: process.stdin });
|
|
375
375
|
rl.on("line", (line) => {
|
package/dist/server.js
CHANGED
|
@@ -761,6 +761,53 @@ var init_dist = __esm({
|
|
|
761
761
|
}
|
|
762
762
|
});
|
|
763
763
|
|
|
764
|
+
// server/src/session/agents.ts
|
|
765
|
+
import { execFile } from "node:child_process";
|
|
766
|
+
import { promisify } from "node:util";
|
|
767
|
+
function invalidateAgents() {
|
|
768
|
+
cache = null;
|
|
769
|
+
}
|
|
770
|
+
async function listAgents() {
|
|
771
|
+
if (cache && Date.now() - cache.at < CACHE_TTL_MS) return cache.agents;
|
|
772
|
+
const found = /* @__PURE__ */ new Map();
|
|
773
|
+
for (const b of BUILTIN) found.set(b.id, b);
|
|
774
|
+
try {
|
|
775
|
+
const { stdout, stderr } = await execFileAsync(config.kiroBin, ["agent", "list"], {
|
|
776
|
+
cwd: config.defaultCwd,
|
|
777
|
+
maxBuffer: 2 * 1024 * 1024
|
|
778
|
+
});
|
|
779
|
+
const text2 = (stderr || "") + "\n" + (stdout || "");
|
|
780
|
+
for (const rawLine of text2.split("\n")) {
|
|
781
|
+
const line = rawLine.replace(ANSI, "");
|
|
782
|
+
const m = /^\s{0,2}(\*\s)?([A-Za-z0-9_-]+)\s{2,}(Global|Workspace|Local)\b/.exec(
|
|
783
|
+
line
|
|
784
|
+
);
|
|
785
|
+
if (!m) continue;
|
|
786
|
+
const id = m[2];
|
|
787
|
+
if (!found.has(id)) found.set(id, { id, name: id });
|
|
788
|
+
}
|
|
789
|
+
} catch {
|
|
790
|
+
}
|
|
791
|
+
cache = { at: Date.now(), agents: [...found.values()] };
|
|
792
|
+
return cache.agents;
|
|
793
|
+
}
|
|
794
|
+
var execFileAsync, BUILTIN, CACHE_TTL_MS, cache, ANSI;
|
|
795
|
+
var init_agents = __esm({
|
|
796
|
+
"server/src/session/agents.ts"() {
|
|
797
|
+
"use strict";
|
|
798
|
+
init_config();
|
|
799
|
+
execFileAsync = promisify(execFile);
|
|
800
|
+
BUILTIN = [
|
|
801
|
+
{ id: "kiro_default", name: "kiro_default", description: "General-purpose Kiro agent" },
|
|
802
|
+
{ id: "kiro_planner", name: "kiro_planner", description: "Planning-focused agent" },
|
|
803
|
+
{ id: "kiro_guide", name: "kiro_guide", description: "Guidance and Q&A agent" }
|
|
804
|
+
];
|
|
805
|
+
CACHE_TTL_MS = 15e3;
|
|
806
|
+
cache = null;
|
|
807
|
+
ANSI = /\x1b\[[0-9;]*m/g;
|
|
808
|
+
}
|
|
809
|
+
});
|
|
810
|
+
|
|
764
811
|
// server/src/session/workspaces.ts
|
|
765
812
|
import crypto3 from "node:crypto";
|
|
766
813
|
import fs7 from "node:fs";
|
|
@@ -1008,18 +1055,26 @@ var init_KiroProcess = __esm({
|
|
|
1008
1055
|
this.log.debug({ method: req.method }, "acp: unhandled server request");
|
|
1009
1056
|
this.client.respond(req.id, {});
|
|
1010
1057
|
});
|
|
1011
|
-
this.child.stderr.pipe(split22())
|
|
1058
|
+
const stderrLines = this.child.stderr.pipe(split22());
|
|
1059
|
+
stderrLines.on("data", (line) => {
|
|
1012
1060
|
if (!line.trim()) return;
|
|
1013
1061
|
this.log.debug({ stderr: line }, "kiro-cli stderr");
|
|
1014
1062
|
this.recentStderr.push(line.trim());
|
|
1015
1063
|
if (this.recentStderr.length > STDERR_KEEP) this.recentStderr.shift();
|
|
1016
1064
|
});
|
|
1065
|
+
const stderrEnded = new Promise((resolve) => {
|
|
1066
|
+
stderrLines.once("end", resolve);
|
|
1067
|
+
stderrLines.once("error", () => resolve());
|
|
1068
|
+
});
|
|
1017
1069
|
this.child.on("exit", (code, signal) => {
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
this.
|
|
1021
|
-
|
|
1022
|
-
|
|
1070
|
+
const capped = new Promise((resolve) => setTimeout(resolve, 250).unref());
|
|
1071
|
+
void Promise.race([stderrEnded, capped]).then(() => {
|
|
1072
|
+
this.client.fail(this.exitReason(code, signal));
|
|
1073
|
+
if (!this.disposed) {
|
|
1074
|
+
this.log.warn({ code, signal }, "kiro-cli acp exited unexpectedly");
|
|
1075
|
+
}
|
|
1076
|
+
this.emit("exit", code, signal);
|
|
1077
|
+
});
|
|
1023
1078
|
});
|
|
1024
1079
|
this.child.on("error", (err) => {
|
|
1025
1080
|
this.log.error({ err }, "kiro-cli acp spawn error");
|
|
@@ -1380,6 +1435,15 @@ async function readPersistedSession(sessionId) {
|
|
|
1380
1435
|
return null;
|
|
1381
1436
|
}
|
|
1382
1437
|
}
|
|
1438
|
+
async function hasRecordedTurns(sessionId) {
|
|
1439
|
+
if (!isValidSessionId(sessionId)) return false;
|
|
1440
|
+
try {
|
|
1441
|
+
const st = await fs9.stat(path10.join(config.kiroSessionsDir, `${sessionId}.jsonl`));
|
|
1442
|
+
return st.size > 0;
|
|
1443
|
+
} catch {
|
|
1444
|
+
return false;
|
|
1445
|
+
}
|
|
1446
|
+
}
|
|
1383
1447
|
async function hydrateTranscript(sessionId) {
|
|
1384
1448
|
if (!isValidSessionId(sessionId)) return [];
|
|
1385
1449
|
let raw;
|
|
@@ -1560,6 +1624,7 @@ var init_SessionManager = __esm({
|
|
|
1560
1624
|
"use strict";
|
|
1561
1625
|
init_dist();
|
|
1562
1626
|
init_config();
|
|
1627
|
+
init_agents();
|
|
1563
1628
|
init_workspaces();
|
|
1564
1629
|
init_paths2();
|
|
1565
1630
|
init_KiroProcess();
|
|
@@ -1587,6 +1652,13 @@ var init_SessionManager = __esm({
|
|
|
1587
1652
|
proc;
|
|
1588
1653
|
// In-flight spawn, so concurrent actions share one process.
|
|
1589
1654
|
spawning;
|
|
1655
|
+
/**
|
|
1656
|
+
* Set while this session's process is being replaced, and resolved when the
|
|
1657
|
+
* replacement is ready. Claimed synchronously with the reload's guard, so an
|
|
1658
|
+
* action arriving during one waits for the new process instead of acting on the
|
|
1659
|
+
* one about to be disposed.
|
|
1660
|
+
*/
|
|
1661
|
+
reloading;
|
|
1590
1662
|
// True while kiro is replaying history during session/load. The transcript is
|
|
1591
1663
|
// already hydrated from disk, so replayed notifications must not be appended
|
|
1592
1664
|
// to the live store (doing so floods the chat with duplicate tool calls).
|
|
@@ -1661,6 +1733,72 @@ var init_SessionManager = __esm({
|
|
|
1661
1733
|
}
|
|
1662
1734
|
return resolved;
|
|
1663
1735
|
}
|
|
1736
|
+
/**
|
|
1737
|
+
* Restart the session's kiro child, so everything kiro only reads when a child
|
|
1738
|
+
* starts is read again: the agent definition, the workspace's `.kiro` directory,
|
|
1739
|
+
* and the MCP servers kiro launches for itself.
|
|
1740
|
+
*
|
|
1741
|
+
* No ACP method does this. kiro advertises no reload command, and `session/set_mode`
|
|
1742
|
+
* leaves the MCP servers it started alone, so replacing the process is the only
|
|
1743
|
+
* way - the transcript comes back with `session/load`.
|
|
1744
|
+
*
|
|
1745
|
+
* The old child is awaited out before the new one starts, because kiro flushes its
|
|
1746
|
+
* session file on shutdown and the replacement reads that file to reload the
|
|
1747
|
+
* conversation. Respawned eagerly rather than at the next prompt, so the caller
|
|
1748
|
+
* gets a detail that reflects what the fresh process reported.
|
|
1749
|
+
*
|
|
1750
|
+
* Needs a session that has recorded a turn, so it can be loaded back. Verified
|
|
1751
|
+
* against kiro 2.11: loading one with an empty event log fails with "Session not
|
|
1752
|
+
* found", and kiro deletes both its files when that process exits.
|
|
1753
|
+
*/
|
|
1754
|
+
async reloadSession(sessionId) {
|
|
1755
|
+
const s = await this.ensureOpen(sessionId);
|
|
1756
|
+
if (s.running) {
|
|
1757
|
+
throw new Error("Cannot reload while a turn is running");
|
|
1758
|
+
}
|
|
1759
|
+
if (s.reloading) {
|
|
1760
|
+
throw new Error("A reload is already running for this session");
|
|
1761
|
+
}
|
|
1762
|
+
let ready;
|
|
1763
|
+
s.reloading = new Promise((resolve) => {
|
|
1764
|
+
ready = resolve;
|
|
1765
|
+
});
|
|
1766
|
+
try {
|
|
1767
|
+
return await this.replaceProcess(s);
|
|
1768
|
+
} finally {
|
|
1769
|
+
s.reloading = void 0;
|
|
1770
|
+
ready();
|
|
1771
|
+
}
|
|
1772
|
+
}
|
|
1773
|
+
/** The reload itself. Only ever called with the session's reload claim held. */
|
|
1774
|
+
async replaceProcess(s) {
|
|
1775
|
+
if (!await hasRecordedTurns(s.sessionId)) {
|
|
1776
|
+
throw new Error(
|
|
1777
|
+
"kiro has not saved this session yet. Send a message first, then reload."
|
|
1778
|
+
);
|
|
1779
|
+
}
|
|
1780
|
+
if (s.spawning) await s.spawning.catch(() => {
|
|
1781
|
+
});
|
|
1782
|
+
const old = s.proc;
|
|
1783
|
+
if (old) {
|
|
1784
|
+
s.proc = void 0;
|
|
1785
|
+
await old.disposeAndWait().catch(() => {
|
|
1786
|
+
});
|
|
1787
|
+
}
|
|
1788
|
+
s.availableModes = [];
|
|
1789
|
+
await this.ensureProc(s);
|
|
1790
|
+
s.lastActivity = Date.now();
|
|
1791
|
+
invalidateAgents();
|
|
1792
|
+
this.log.info({ sessionId: s.sessionId, cwd: s.cwd }, "session reloaded");
|
|
1793
|
+
return this.getDetail(s.sessionId);
|
|
1794
|
+
}
|
|
1795
|
+
/**
|
|
1796
|
+
* Wait out a reload before touching the session's process. Without this an action
|
|
1797
|
+
* can be handed the process that the reload is about to dispose.
|
|
1798
|
+
*/
|
|
1799
|
+
async settleReload(s) {
|
|
1800
|
+
if (s.reloading) await s.reloading;
|
|
1801
|
+
}
|
|
1664
1802
|
get liveCount() {
|
|
1665
1803
|
let n = 0;
|
|
1666
1804
|
for (const s of this.sessions.values()) if (s.proc) n++;
|
|
@@ -1821,10 +1959,17 @@ var init_SessionManager = __esm({
|
|
|
1821
1959
|
// -------------------------------------------------------------------------
|
|
1822
1960
|
async runPrompt(sessionId, content) {
|
|
1823
1961
|
const s = await this.ensureOpen(sessionId);
|
|
1824
|
-
|
|
1962
|
+
await this.settleReload(s);
|
|
1825
1963
|
if (s.running) throw new Error("A turn is already running for this session");
|
|
1826
1964
|
s.running = true;
|
|
1827
1965
|
s.lastActivity = Date.now();
|
|
1966
|
+
let proc;
|
|
1967
|
+
try {
|
|
1968
|
+
proc = await this.ensureProc(s);
|
|
1969
|
+
} catch (err) {
|
|
1970
|
+
s.running = false;
|
|
1971
|
+
throw err;
|
|
1972
|
+
}
|
|
1828
1973
|
if (!this.store.getTitle(s.sessionId)) {
|
|
1829
1974
|
const title = titleFromPrompt(content);
|
|
1830
1975
|
if (title) {
|
|
@@ -1852,6 +1997,7 @@ ${tail}` : err.message;
|
|
|
1852
1997
|
}
|
|
1853
1998
|
async setMode(sessionId, modeId) {
|
|
1854
1999
|
const s = await this.ensureOpen(sessionId);
|
|
2000
|
+
await this.settleReload(s);
|
|
1855
2001
|
const proc = await this.ensureProc(s);
|
|
1856
2002
|
await proc.setMode(s.sessionId, modeId);
|
|
1857
2003
|
s.currentModeId = modeId;
|
|
@@ -1860,6 +2006,7 @@ ${tail}` : err.message;
|
|
|
1860
2006
|
}
|
|
1861
2007
|
async setModel(sessionId, modelId) {
|
|
1862
2008
|
const s = await this.ensureOpen(sessionId);
|
|
2009
|
+
await this.settleReload(s);
|
|
1863
2010
|
const proc = await this.ensureProc(s);
|
|
1864
2011
|
await proc.setModel(s.sessionId, modelId);
|
|
1865
2012
|
s.modelId = modelId;
|
|
@@ -1867,6 +2014,7 @@ ${tail}` : err.message;
|
|
|
1867
2014
|
}
|
|
1868
2015
|
async execCommand(sessionId, command, args) {
|
|
1869
2016
|
const s = await this.ensureOpen(sessionId);
|
|
2017
|
+
await this.settleReload(s);
|
|
1870
2018
|
const proc = await this.ensureProc(s);
|
|
1871
2019
|
await proc.execCommand(s.sessionId, command, args);
|
|
1872
2020
|
s.lastActivity = Date.now();
|
|
@@ -2166,11 +2314,11 @@ var init_auth = __esm({
|
|
|
2166
2314
|
});
|
|
2167
2315
|
|
|
2168
2316
|
// server/src/session/models.ts
|
|
2169
|
-
import { execFile } from "node:child_process";
|
|
2170
|
-
import { promisify } from "node:util";
|
|
2317
|
+
import { execFile as execFile2 } from "node:child_process";
|
|
2318
|
+
import { promisify as promisify2 } from "node:util";
|
|
2171
2319
|
async function configuredDefault() {
|
|
2172
2320
|
try {
|
|
2173
|
-
const { stdout } = await
|
|
2321
|
+
const { stdout } = await execFileAsync2(config.kiroBin, [
|
|
2174
2322
|
"settings",
|
|
2175
2323
|
"chat.defaultModel",
|
|
2176
2324
|
"-f",
|
|
@@ -2183,8 +2331,8 @@ async function configuredDefault() {
|
|
|
2183
2331
|
}
|
|
2184
2332
|
}
|
|
2185
2333
|
async function listModels(log) {
|
|
2186
|
-
if (
|
|
2187
|
-
const { stdout } = await
|
|
2334
|
+
if (cache2) return cache2;
|
|
2335
|
+
const { stdout } = await execFileAsync2(
|
|
2188
2336
|
config.kiroBin,
|
|
2189
2337
|
["chat", "--list-models", "-f", "json"],
|
|
2190
2338
|
{ maxBuffer: 4 * 1024 * 1024 }
|
|
@@ -2192,7 +2340,7 @@ async function listModels(log) {
|
|
|
2192
2340
|
const parsed = JSON.parse(stdout);
|
|
2193
2341
|
const configured = await configuredDefault();
|
|
2194
2342
|
const preferred = parsed.models.some((m) => m.model_id === configured) ? configured : parsed.default_model;
|
|
2195
|
-
|
|
2343
|
+
cache2 = parsed.models.map((m, i) => ({
|
|
2196
2344
|
modelId: m.model_id,
|
|
2197
2345
|
modelName: m.model_name,
|
|
2198
2346
|
description: m.description,
|
|
@@ -2201,24 +2349,24 @@ async function listModels(log) {
|
|
|
2201
2349
|
rateUnit: m.rate_unit,
|
|
2202
2350
|
isDefault: preferred ? m.model_id === preferred : m.default_model ?? i === 0
|
|
2203
2351
|
}));
|
|
2204
|
-
log.info({ count:
|
|
2205
|
-
return
|
|
2352
|
+
log.info({ count: cache2.length, default: preferred }, "loaded model list");
|
|
2353
|
+
return cache2;
|
|
2206
2354
|
}
|
|
2207
2355
|
async function kiroVersion() {
|
|
2208
2356
|
try {
|
|
2209
|
-
const { stdout } = await
|
|
2357
|
+
const { stdout } = await execFileAsync2(config.kiroBin, ["--version"]);
|
|
2210
2358
|
return stdout.trim();
|
|
2211
2359
|
} catch {
|
|
2212
2360
|
return void 0;
|
|
2213
2361
|
}
|
|
2214
2362
|
}
|
|
2215
|
-
var
|
|
2363
|
+
var execFileAsync2, cache2;
|
|
2216
2364
|
var init_models = __esm({
|
|
2217
2365
|
"server/src/session/models.ts"() {
|
|
2218
2366
|
"use strict";
|
|
2219
2367
|
init_config();
|
|
2220
|
-
|
|
2221
|
-
|
|
2368
|
+
execFileAsync2 = promisify2(execFile2);
|
|
2369
|
+
cache2 = null;
|
|
2222
2370
|
}
|
|
2223
2371
|
});
|
|
2224
2372
|
|
|
@@ -2236,49 +2384,6 @@ var init_models2 = __esm({
|
|
|
2236
2384
|
}
|
|
2237
2385
|
});
|
|
2238
2386
|
|
|
2239
|
-
// server/src/session/agents.ts
|
|
2240
|
-
import { execFile as execFile2 } from "node:child_process";
|
|
2241
|
-
import { promisify as promisify2 } from "node:util";
|
|
2242
|
-
async function listAgents() {
|
|
2243
|
-
if (cache2) return cache2;
|
|
2244
|
-
const found = /* @__PURE__ */ new Map();
|
|
2245
|
-
for (const b of BUILTIN) found.set(b.id, b);
|
|
2246
|
-
try {
|
|
2247
|
-
const { stdout, stderr } = await execFileAsync2(config.kiroBin, ["agent", "list"], {
|
|
2248
|
-
cwd: config.defaultCwd,
|
|
2249
|
-
maxBuffer: 2 * 1024 * 1024
|
|
2250
|
-
});
|
|
2251
|
-
const text2 = (stderr || "") + "\n" + (stdout || "");
|
|
2252
|
-
for (const rawLine of text2.split("\n")) {
|
|
2253
|
-
const line = rawLine.replace(ANSI, "");
|
|
2254
|
-
const m = /^\s{0,2}(\*\s)?([A-Za-z0-9_-]+)\s{2,}(Global|Workspace|Local)\b/.exec(
|
|
2255
|
-
line
|
|
2256
|
-
);
|
|
2257
|
-
if (!m) continue;
|
|
2258
|
-
const id = m[2];
|
|
2259
|
-
if (!found.has(id)) found.set(id, { id, name: id });
|
|
2260
|
-
}
|
|
2261
|
-
} catch {
|
|
2262
|
-
}
|
|
2263
|
-
cache2 = [...found.values()];
|
|
2264
|
-
return cache2;
|
|
2265
|
-
}
|
|
2266
|
-
var execFileAsync2, BUILTIN, cache2, ANSI;
|
|
2267
|
-
var init_agents = __esm({
|
|
2268
|
-
"server/src/session/agents.ts"() {
|
|
2269
|
-
"use strict";
|
|
2270
|
-
init_config();
|
|
2271
|
-
execFileAsync2 = promisify2(execFile2);
|
|
2272
|
-
BUILTIN = [
|
|
2273
|
-
{ id: "kiro_default", name: "kiro_default", description: "General-purpose Kiro agent" },
|
|
2274
|
-
{ id: "kiro_planner", name: "kiro_planner", description: "Planning-focused agent" },
|
|
2275
|
-
{ id: "kiro_guide", name: "kiro_guide", description: "Guidance and Q&A agent" }
|
|
2276
|
-
];
|
|
2277
|
-
cache2 = null;
|
|
2278
|
-
ANSI = /\x1b\[[0-9;]*m/g;
|
|
2279
|
-
}
|
|
2280
|
-
});
|
|
2281
|
-
|
|
2282
2387
|
// server/src/routes/agents.ts
|
|
2283
2388
|
function registerAgentRoutes(app) {
|
|
2284
2389
|
app.get("/api/agents", async () => {
|
|
@@ -2549,14 +2654,17 @@ function registerFsRoutes(app) {
|
|
|
2549
2654
|
let entries = [];
|
|
2550
2655
|
try {
|
|
2551
2656
|
const dirents = await fs12.readdir(realDir, { withFileTypes: true });
|
|
2552
|
-
const candidates = dirents.filter((d) => !d.name.startsWith("."));
|
|
2553
2657
|
const checks2 = await Promise.all(
|
|
2554
|
-
|
|
2658
|
+
dirents.map(async (d) => {
|
|
2555
2659
|
const target = await classifyDirent(realDir, d, absoluteRoots());
|
|
2556
2660
|
return target?.kind === "directory" ? d.name : null;
|
|
2557
2661
|
})
|
|
2558
2662
|
);
|
|
2559
|
-
|
|
2663
|
+
const isDot = (name) => name.startsWith(".");
|
|
2664
|
+
entries = checks2.filter((name) => name !== null).filter((name) => name.toLowerCase().startsWith(prefix.toLowerCase())).sort((a, b) => {
|
|
2665
|
+
if (isDot(a) !== isDot(b)) return isDot(a) ? 1 : -1;
|
|
2666
|
+
return a.localeCompare(b);
|
|
2667
|
+
}).slice(0, 500).map((name) => path14.join(dir, name));
|
|
2560
2668
|
} catch {
|
|
2561
2669
|
entries = [];
|
|
2562
2670
|
}
|
|
@@ -2710,6 +2818,14 @@ function registerSessionRoutes(app, manager) {
|
|
|
2710
2818
|
}
|
|
2711
2819
|
}
|
|
2712
2820
|
);
|
|
2821
|
+
app.post("/api/sessions/:id/reload", async (req, reply) => {
|
|
2822
|
+
try {
|
|
2823
|
+
return await manager.reloadSession(req.params.id);
|
|
2824
|
+
} catch (err) {
|
|
2825
|
+
reply.code(400);
|
|
2826
|
+
return { error: err.message };
|
|
2827
|
+
}
|
|
2828
|
+
});
|
|
2713
2829
|
app.delete("/api/sessions/:id", async (req) => {
|
|
2714
2830
|
await manager.deleteSession(req.params.id);
|
|
2715
2831
|
return { ok: true };
|
|
@@ -3999,7 +4115,7 @@ var init_server2 = __esm({
|
|
|
3999
4115
|
"server/src/mcp/server.ts"() {
|
|
4000
4116
|
"use strict";
|
|
4001
4117
|
init_protocol();
|
|
4002
|
-
VERSION = true ? "0.
|
|
4118
|
+
VERSION = true ? "0.11.0" : "dev";
|
|
4003
4119
|
}
|
|
4004
4120
|
});
|
|
4005
4121
|
|
|
@@ -7379,7 +7495,7 @@ var program = new Command();
|
|
|
7379
7495
|
// server/src/cli/program.ts
|
|
7380
7496
|
init_paths();
|
|
7381
7497
|
init_settings();
|
|
7382
|
-
var VERSION2 = true ? "0.
|
|
7498
|
+
var VERSION2 = true ? "0.11.0" : "dev";
|
|
7383
7499
|
async function bootstrap() {
|
|
7384
7500
|
const file = configFilePath();
|
|
7385
7501
|
const settings = readSettings(file);
|
package/dist/web/assets/{abnfDiagram-N423BO3Z-kolM6iA-.js → abnfDiagram-N423BO3Z-B88fK1c8.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-pmOmsjWC.js";import{p as f}from"./chunk-JWPE2WC7-Be9UnGmk.js";import{_ as n,l as o}from"./mermaid.core-Cw282Xmk.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-DlXmf5Bs.js";import"./index-DigNQUdR.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-
|
|
1
|
+
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-Cw282Xmk.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|