@joeyshi12/casper 0.10.0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/mcp.js +1 -1
  2. package/dist/server.js +177 -64
  3. package/dist/web/assets/{abnfDiagram-N423BO3Z-DuqqTYEM.js → abnfDiagram-N423BO3Z-BOt2oedB.js} +1 -1
  4. package/dist/web/assets/{arc-BbitKrIO.js → arc-CJ0OegkD.js} +1 -1
  5. package/dist/web/assets/{architectureDiagram-T3A2C74G-Dc0p1FLK.js → architectureDiagram-T3A2C74G-BaPzpGkE.js} +1 -1
  6. package/dist/web/assets/{blockDiagram-VBNYF7ZC-A2tZMhwX.js → blockDiagram-VBNYF7ZC-FhUU8yRq.js} +1 -1
  7. package/dist/web/assets/{c4Diagram-5PPSVZJV-BGYnWUNq.js → c4Diagram-5PPSVZJV-DiGoNhfT.js} +1 -1
  8. package/dist/web/assets/channel-6363Y3xP.js +1 -0
  9. package/dist/web/assets/{chunk-2GRJ4B5K-DGcSgggV.js → chunk-2GRJ4B5K-B-x5jVOB.js} +1 -1
  10. package/dist/web/assets/{chunk-2Q5K7J3B-Cqd5ykHS.js → chunk-2Q5K7J3B-DSh8M9q0.js} +1 -1
  11. package/dist/web/assets/{chunk-5RXB4S5H-4s-V0baK.js → chunk-5RXB4S5H-Btk7hl75.js} +1 -1
  12. package/dist/web/assets/{chunk-5VM5RSS4-DN_MfTRV.js → chunk-5VM5RSS4-CyplenJX.js} +1 -1
  13. package/dist/web/assets/{chunk-6Q2QTUOP-6-ncud5-.js → chunk-6Q2QTUOP-DtohW6Ga.js} +1 -1
  14. package/dist/web/assets/{chunk-GF5L2VYU-CkCAkajU.js → chunk-GF5L2VYU-VNW8BUeq.js} +1 -1
  15. package/dist/web/assets/{chunk-JWPE2WC7-B2HT0tHT.js → chunk-JWPE2WC7-BNS8VdV5.js} +1 -1
  16. package/dist/web/assets/{chunk-KBJHAD2P-DtYmpITE.js → chunk-KBJHAD2P-BV2Vf23h.js} +1 -1
  17. package/dist/web/assets/{chunk-RYQCIY6F-CqU4ZESr.js → chunk-RYQCIY6F-DYmETIxn.js} +1 -1
  18. package/dist/web/assets/{chunk-XXDRQBXY-5zlfmd8I.js → chunk-XXDRQBXY-HuXFE1c3.js} +1 -1
  19. package/dist/web/assets/classDiagram-JCYQIIEL-GUX5DKpE.js +1 -0
  20. package/dist/web/assets/classDiagram-v2-OCEON4UE-GUX5DKpE.js +1 -0
  21. package/dist/web/assets/{cose-bilkent-JH36ORCC-BtXxufQe.js → cose-bilkent-JH36ORCC-ChjYQYqW.js} +1 -1
  22. package/dist/web/assets/{cynefin-VYW2F7L2-DFLsp7Rj.js → cynefin-VYW2F7L2-0SvgqCiO.js} +1 -1
  23. package/dist/web/assets/{cynefinDiagram-MW4NZA55-BiXfZ5zy.js → cynefinDiagram-MW4NZA55-NEFmMNou.js} +1 -1
  24. package/dist/web/assets/{dagre-VZM6K2ZE-MBbBcp4r.js → dagre-VZM6K2ZE-D_p5IBF9.js} +1 -1
  25. package/dist/web/assets/{diagram-7IWD3JNH-BBJQPRUY.js → diagram-7IWD3JNH-CDZ5uJm4.js} +1 -1
  26. package/dist/web/assets/{diagram-B4RE2ZJO-D39huys8.js → diagram-B4RE2ZJO-Dzd-MSKW.js} +1 -1
  27. package/dist/web/assets/{diagram-LBJQPF4R-BEI6m3xw.js → diagram-LBJQPF4R-B6hsBa1t.js} +1 -1
  28. package/dist/web/assets/{diagram-Q27KOJAE-0mMWjfIY.js → diagram-Q27KOJAE-DJZkhdF3.js} +1 -1
  29. package/dist/web/assets/{diagram-UB23O5K3-Cq_AT0df.js → diagram-UB23O5K3-7nsFomCT.js} +1 -1
  30. package/dist/web/assets/{ebnfDiagram-BXEA7PRR-CspS7m6Z.js → ebnfDiagram-BXEA7PRR-B1f56hXD.js} +1 -1
  31. package/dist/web/assets/{erDiagram-JOGREHBK-B6NxTPkb.js → erDiagram-JOGREHBK-COrWC6hw.js} +1 -1
  32. package/dist/web/assets/{flowDiagram-UKHOOZJN-D3Pt3-cN.js → flowDiagram-UKHOOZJN-COS4lI6r.js} +1 -1
  33. package/dist/web/assets/{ganttDiagram-PKOTCBZU-CV4orYkm.js → ganttDiagram-PKOTCBZU-Lk2VUmay.js} +1 -1
  34. package/dist/web/assets/{gitGraphDiagram-DS77QQ5N-CANHeJZg.js → gitGraphDiagram-DS77QQ5N-DtAvGOFk.js} +1 -1
  35. package/dist/web/assets/index-BFfEb9Vs.js +253 -0
  36. package/dist/web/assets/index-CK9lPdh7.css +1 -0
  37. package/dist/web/assets/{index-Dewf4nkF.js → index-CTPzyuSS.js} +1 -1
  38. package/dist/web/assets/{infoDiagram-6WML65LV-ySSVfb1E.js → infoDiagram-6WML65LV-OKmxiILi.js} +1 -1
  39. package/dist/web/assets/{ishikawaDiagram-WSZJBQD7-C8PCYjFX.js → ishikawaDiagram-WSZJBQD7-BUc3kT4w.js} +1 -1
  40. package/dist/web/assets/{journeyDiagram-NVQOT4AX-BS_jBDBe.js → journeyDiagram-NVQOT4AX-DvBEKBLD.js} +1 -1
  41. package/dist/web/assets/{kanban-definition-27J2QSJJ-H6jhmFjt.js → kanban-definition-27J2QSJJ-CV7kLUrv.js} +1 -1
  42. package/dist/web/assets/{linear-YU9d9rPY.js → linear-nKe_FmKR.js} +1 -1
  43. package/dist/web/assets/{mermaid.core-DsId9yj5.js → mermaid.core-DQxD-Al4.js} +4 -4
  44. package/dist/web/assets/{mindmap-definition-FAOFIHXS-DVFyeioX.js → mindmap-definition-FAOFIHXS-DZ7D_fsY.js} +1 -1
  45. package/dist/web/assets/{pegDiagram-VL7TDLO6-BD4va82R.js → pegDiagram-VL7TDLO6-DsGgpFSF.js} +1 -1
  46. package/dist/web/assets/{pieDiagram-7S7Q4E2Y-CZAefhVe.js → pieDiagram-7S7Q4E2Y-B9M0nB9V.js} +1 -1
  47. package/dist/web/assets/{quadrantDiagram-CIZ2JOQS-D3RB1kgH.js → quadrantDiagram-CIZ2JOQS-CHuiGp3C.js} +1 -1
  48. package/dist/web/assets/{railroadDiagram-AXF67PYL-Cvnf0WjF.js → railroadDiagram-AXF67PYL-BFNAk_rL.js} +1 -1
  49. package/dist/web/assets/{requirementDiagram-LRYGKXZP-C4B6vv6V.js → requirementDiagram-LRYGKXZP-DRh6dlwQ.js} +1 -1
  50. package/dist/web/assets/{sankeyDiagram-W5VNT64P-C5xg3C0D.js → sankeyDiagram-W5VNT64P-ChkVLVRB.js} +1 -1
  51. package/dist/web/assets/{sequenceDiagram-SI44F4Z6-DjWE-t7c.js → sequenceDiagram-SI44F4Z6-hVuQEWrZ.js} +1 -1
  52. package/dist/web/assets/{sizeCapture-X5ZJPWSS-Bf7ugfWa.js → sizeCapture-X5ZJPWSS-ZpEHmsZv.js} +1 -1
  53. package/dist/web/assets/{stateDiagram-OKZ733FA-DxEitXwP.js → stateDiagram-OKZ733FA-QPbFpYci.js} +1 -1
  54. package/dist/web/assets/stateDiagram-v2-UEYNNEHI-L8aPswP5.js +1 -0
  55. package/dist/web/assets/{swimlanes-SLNWSIFB-DMW3T9iR.js → swimlanes-SLNWSIFB-CT0EVasj.js} +2 -2
  56. package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-Bu9-A5QB.js +8 -0
  57. package/dist/web/assets/{timeline-definition-Z64GVDOM-whI5A_En.js → timeline-definition-Z64GVDOM-BPh850i9.js} +1 -1
  58. package/dist/web/assets/{vennDiagram-T6HMQDX7-DGdGbcJw.js → vennDiagram-T6HMQDX7-DOyN_2Pw.js} +1 -1
  59. package/dist/web/assets/{wardleyDiagram-T6FBY63Y-CTNpUHSX.js → wardleyDiagram-T6FBY63Y-DvQUJsO9.js} +1 -1
  60. package/dist/web/assets/{xychartDiagram-ELKLHX3M-C2j32C85.js → xychartDiagram-ELKLHX3M-CvfYk_7X.js} +1 -1
  61. package/dist/web/index.html +2 -2
  62. package/dist/web/sw.js +1 -1
  63. package/package.json +1 -1
  64. package/dist/web/assets/channel-oev4WWHD.js +0 -1
  65. package/dist/web/assets/classDiagram-JCYQIIEL-D4FIkEsQ.js +0 -1
  66. package/dist/web/assets/classDiagram-v2-OCEON4UE-D4FIkEsQ.js +0 -1
  67. package/dist/web/assets/index-CK4YbLbU.js +0 -253
  68. package/dist/web/assets/index-Cz-T9NEB.css +0 -1
  69. package/dist/web/assets/stateDiagram-v2-UEYNNEHI-BV8yVaCo.js +0 -1
  70. package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-DZu5mMsy.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.10.0" : "dev";
372
+ var VERSION = true ? "0.10.2" : "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()).on("data", (line) => {
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
- this.client.fail(this.exitReason(code, signal));
1019
- if (!this.disposed) {
1020
- this.log.warn({ code, signal }, "kiro-cli acp exited unexpectedly");
1021
- }
1022
- this.emit("exit", code, signal);
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
- const proc = await this.ensureProc(s);
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 execFileAsync(config.kiroBin, [
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 (cache) return cache;
2187
- const { stdout } = await execFileAsync(
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
- cache = parsed.models.map((m, i) => ({
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: cache.length, default: preferred }, "loaded model list");
2205
- return cache;
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 execFileAsync(config.kiroBin, ["--version"]);
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 execFileAsync, cache;
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
- execFileAsync = promisify(execFile);
2221
- cache = null;
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 () => {
@@ -2710,6 +2815,14 @@ function registerSessionRoutes(app, manager) {
2710
2815
  }
2711
2816
  }
2712
2817
  );
2818
+ app.post("/api/sessions/:id/reload", async (req, reply) => {
2819
+ try {
2820
+ return await manager.reloadSession(req.params.id);
2821
+ } catch (err) {
2822
+ reply.code(400);
2823
+ return { error: err.message };
2824
+ }
2825
+ });
2713
2826
  app.delete("/api/sessions/:id", async (req) => {
2714
2827
  await manager.deleteSession(req.params.id);
2715
2828
  return { ok: true };
@@ -3999,7 +4112,7 @@ var init_server2 = __esm({
3999
4112
  "server/src/mcp/server.ts"() {
4000
4113
  "use strict";
4001
4114
  init_protocol();
4002
- VERSION = true ? "0.10.0" : "dev";
4115
+ VERSION = true ? "0.10.2" : "dev";
4003
4116
  }
4004
4117
  });
4005
4118
 
@@ -7379,7 +7492,7 @@ var program = new Command();
7379
7492
  // server/src/cli/program.ts
7380
7493
  init_paths();
7381
7494
  init_settings();
7382
- var VERSION2 = true ? "0.10.0" : "dev";
7495
+ var VERSION2 = true ? "0.10.2" : "dev";
7383
7496
  async function bootstrap() {
7384
7497
  const file = configFilePath();
7385
7498
  const settings = readSettings(file);
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-6-ncud5-.js";import{p as f}from"./chunk-JWPE2WC7-B2HT0tHT.js";import{_ as n,l as o}from"./mermaid.core-DsId9yj5.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-DFLsp7Rj.js";import"./index-CK4YbLbU.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
+ import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-DtohW6Ga.js";import{p as f}from"./chunk-JWPE2WC7-BNS8VdV5.js";import{_ as n,l as o}from"./mermaid.core-DQxD-Al4.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-0SvgqCiO.js";import"./index-BFfEb9Vs.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-DsId9yj5.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};
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-DQxD-Al4.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};