@dotobokuri/fleet-console 1.55.0 → 1.57.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.
Files changed (65) hide show
  1. package/AGENTS.md +1 -1
  2. package/dist/cli.mjs +21480 -21477
  3. package/dist/client/assets/{_baseUniq-Cp0TuK00.js → _baseUniq-CswEXHiP.js} +1 -1
  4. package/dist/client/assets/{arc-Cwtz1wxV.js → arc-B0Pl4arp.js} +1 -1
  5. package/dist/client/assets/{architectureDiagram-Q4EWVU46-f2trvyEV.js → architectureDiagram-Q4EWVU46-CmHRAXMU.js} +1 -1
  6. package/dist/client/assets/{blockDiagram-DXYQGD6D-BhEa9Mh6.js → blockDiagram-DXYQGD6D-hm41ZpGJ.js} +1 -1
  7. package/dist/client/assets/{c4Diagram-AHTNJAMY-CuqbJbZK.js → c4Diagram-AHTNJAMY-B-p8I72o.js} +1 -1
  8. package/dist/client/assets/channel-Bc5nd73E.js +1 -0
  9. package/dist/client/assets/{chunk-4BX2VUAB-Vx63wo1i.js → chunk-4BX2VUAB-DGBjTF4d.js} +1 -1
  10. package/dist/client/assets/{chunk-4TB4RGXK-DHRtIlLJ.js → chunk-4TB4RGXK-CN3nUDe7.js} +1 -1
  11. package/dist/client/assets/{chunk-55IACEB6-ChTm2kCK.js → chunk-55IACEB6-DjyzTXHN.js} +1 -1
  12. package/dist/client/assets/{chunk-EDXVE4YY-C_BQtaY5.js → chunk-EDXVE4YY-iErF_Y7X.js} +1 -1
  13. package/dist/client/assets/{chunk-FMBD7UC4-BPV9Mw6e.js → chunk-FMBD7UC4-BL0FFqfm.js} +1 -1
  14. package/dist/client/assets/{chunk-OYMX7WX6-ya-VyPHj.js → chunk-OYMX7WX6-BV2UGyrH.js} +1 -1
  15. package/dist/client/assets/{chunk-QZHKN3VN-CLiSGdJ6.js → chunk-QZHKN3VN-CM8OreWj.js} +1 -1
  16. package/dist/client/assets/{chunk-YZCP3GAM-DasGOM9R.js → chunk-YZCP3GAM-BKZsjaGL.js} +1 -1
  17. package/dist/client/assets/classDiagram-6PBFFD2Q-DVxPbVhM.js +1 -0
  18. package/dist/client/assets/classDiagram-v2-HSJHXN6E-DVxPbVhM.js +1 -0
  19. package/dist/client/assets/clone-BFk58vEW.js +1 -0
  20. package/dist/client/assets/{cose-bilkent-S5V4N54A-C11PcGWz.js → cose-bilkent-S5V4N54A-BWIKniKZ.js} +1 -1
  21. package/dist/client/assets/{dagre-KV5264BT-BGiNFCUB.js → dagre-KV5264BT-I1XwlA6-.js} +1 -1
  22. package/dist/client/assets/{diagram-5BDNPKRD-CSxK9ZtI.js → diagram-5BDNPKRD-CQ4AmbS0.js} +1 -1
  23. package/dist/client/assets/{diagram-G4DWMVQ6-COZtgx_6.js → diagram-G4DWMVQ6-BHnY3uHg.js} +1 -1
  24. package/dist/client/assets/{diagram-MMDJMWI5-4-mD0i99.js → diagram-MMDJMWI5-7dbSq7EO.js} +1 -1
  25. package/dist/client/assets/{diagram-TYMM5635-BNX8i0L7.js → diagram-TYMM5635-DYtx2hYn.js} +1 -1
  26. package/dist/client/assets/{erDiagram-SMLLAGMA-1a9K7CGs.js → erDiagram-SMLLAGMA-BesZ4xpd.js} +1 -1
  27. package/dist/client/assets/{flowDiagram-DWJPFMVM-B7BZTT0P.js → flowDiagram-DWJPFMVM-C2MQN-7L.js} +1 -1
  28. package/dist/client/assets/{ganttDiagram-T4ZO3ILL-FeCgSTyp.js → ganttDiagram-T4ZO3ILL-J9gAJMOM.js} +1 -1
  29. package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-ItC4KjyQ.js → gitGraphDiagram-UUTBAWPF-tRsIpBIJ.js} +1 -1
  30. package/dist/client/assets/{graph-C0wWu6sL.js → graph-BZ9PBecR.js} +1 -1
  31. package/dist/client/assets/index-KqHwSUsa.css +1 -0
  32. package/dist/client/assets/index-z0vwA__l.js +483 -0
  33. package/dist/client/assets/{infoDiagram-42DDH7IO-5ub69t3k.js → infoDiagram-42DDH7IO-jjqBqdXP.js} +1 -1
  34. package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-BEvDRmdo.js → ishikawaDiagram-UXIWVN3A-TO3C-r1h.js} +1 -1
  35. package/dist/client/assets/{journeyDiagram-VCZTEJTY-DUxQ-ZUX.js → journeyDiagram-VCZTEJTY-BnRVjjXK.js} +1 -1
  36. package/dist/client/assets/{kanban-definition-6JOO6SKY-BiPkJbpE.js → kanban-definition-6JOO6SKY-C4PRGn-l.js} +1 -1
  37. package/dist/client/assets/{layout-Bhtd-qjm.js → layout-CVM95Xti.js} +1 -1
  38. package/dist/client/assets/{linear-BT8b8xym.js → linear-Z1KPlefG.js} +1 -1
  39. package/dist/client/assets/{mermaid.core-BlTpil8e.js → mermaid.core-DkeEkWou.js} +4 -4
  40. package/dist/client/assets/{min-DrnMPIwV.js → min-CmPXi-g1.js} +1 -1
  41. package/dist/client/assets/{mindmap-definition-QFDTVHPH-uQH7Nv45.js → mindmap-definition-QFDTVHPH-BR3BEkkl.js} +1 -1
  42. package/dist/client/assets/{pieDiagram-DEJITSTG-MOetI488.js → pieDiagram-DEJITSTG-qj7P8Jm7.js} +1 -1
  43. package/dist/client/assets/{quadrantDiagram-34T5L4WZ-C-jeoH4D.js → quadrantDiagram-34T5L4WZ-Bsd-m8Gs.js} +1 -1
  44. package/dist/client/assets/{requirementDiagram-MS252O5E-C7cKIVp5.js → requirementDiagram-MS252O5E-CGtG4IW5.js} +1 -1
  45. package/dist/client/assets/{sankeyDiagram-XADWPNL6-Dcv2A0AY.js → sankeyDiagram-XADWPNL6-BtZyB1b1.js} +1 -1
  46. package/dist/client/assets/{sequenceDiagram-FGHM5R23-CXO-xPvA.js → sequenceDiagram-FGHM5R23-jtJ4Jown.js} +1 -1
  47. package/dist/client/assets/{stateDiagram-FHFEXIEX-GKivP2tt.js → stateDiagram-FHFEXIEX-BoPwRnEV.js} +1 -1
  48. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-wydiYJxD.js +1 -0
  49. package/dist/client/assets/{timeline-definition-GMOUNBTQ-DLJSUfwG.js → timeline-definition-GMOUNBTQ-NALvI3oP.js} +1 -1
  50. package/dist/client/assets/{vennDiagram-DHZGUBPP-DFihaprP.js → vennDiagram-DHZGUBPP-gchYEafV.js} +1 -1
  51. package/dist/client/assets/{wardley-RL74JXVD-BBV41M5Z.js → wardley-RL74JXVD-1NNyKaYX.js} +1 -1
  52. package/dist/client/assets/{wardleyDiagram-NUSXRM2D-B5J5AiY-.js → wardleyDiagram-NUSXRM2D-CQOWP-Tg.js} +1 -1
  53. package/dist/client/assets/{xychartDiagram-5P7HB3ND-D1NFEt18.js → xychartDiagram-5P7HB3ND-Ds7oJ841.js} +1 -1
  54. package/dist/client/index.html +2 -2
  55. package/dist/fleet-plugins/scuttlebutt/routes.mjs +1 -1
  56. package/dist/fleet-plugins/terminal/routes.mjs +82 -13
  57. package/dist/fleet.mjs +28 -23
  58. package/package.json +1 -1
  59. package/dist/client/assets/channel-D9kPbZ6w.js +0 -1
  60. package/dist/client/assets/classDiagram-6PBFFD2Q-B1zyip5T.js +0 -1
  61. package/dist/client/assets/classDiagram-v2-HSJHXN6E-B1zyip5T.js +0 -1
  62. package/dist/client/assets/clone-x5mGq45q.js +0 -1
  63. package/dist/client/assets/index-B0961B8M.css +0 -1
  64. package/dist/client/assets/index-DEW90Ngb.js +0 -479
  65. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-BfnEUJRo.js +0 -1
package/dist/fleet.mjs CHANGED
@@ -32835,8 +32835,6 @@ function buildEffortArgs(effort) {
32835
32835
  }
32836
32836
 
32837
32837
  // ../../packages/fleet-admiral/src/agent-cli/claude/definitions.ts
32838
- var NATIVE_CLAUDE_MODEL_ALIASES = ["fable[1m]", "opus[1m]", "sonnet"];
32839
- var NATIVE_CLAUDE_EFFORTS = ["low", "medium", "high", "xhigh", "max"];
32840
32838
  var claudeGatewayCli = createClaudeFamilyCliDefinition({
32841
32839
  id: "claude-gateway",
32842
32840
  label: "Claude (Gateway)"
@@ -47635,6 +47633,8 @@ function startSseKeepaliveLifecycle(res, onCleanup) {
47635
47633
 
47636
47634
  // core/host/codex/cowork/routes.ts
47637
47635
  var CONFLICT_ERRORS = /* @__PURE__ */ new Set(["cowork_busy", "cowork_apply_stale", "cowork_apply_busy", "cowork_apply_stale_revision"]);
47636
+ var COWORK_MODELS = ["opus[1m]", "sonnet", "haiku"];
47637
+ var COWORK_EFFORTS = ["low", "medium", "high"];
47638
47638
  async function handleCoworkRequest(request, response, context) {
47639
47639
  const url2 = new URL(request.url ?? "/", "http://127.0.0.1");
47640
47640
  if (!url2.pathname.startsWith("/api/cowork")) return false;
@@ -47644,8 +47644,8 @@ async function handleCoworkRequest(request, response, context) {
47644
47644
  const parts = url2.pathname.split("/").filter(Boolean);
47645
47645
  try {
47646
47646
  if (request.method === "GET" && parts.length === 3 && parts[2] === "options") {
47647
- const models = [...NATIVE_CLAUDE_MODEL_ALIASES];
47648
- const efforts = [...NATIVE_CLAUDE_EFFORTS];
47647
+ const models = [...COWORK_MODELS];
47648
+ const efforts = [...COWORK_EFFORTS];
47649
47649
  const defaultModel = models.includes("sonnet") ? "sonnet" : models[0] ?? "";
47650
47650
  const defaultEffort = efforts.includes("low") ? "low" : efforts[0] ?? "";
47651
47651
  const requested = url2.searchParams.get("model");
@@ -48987,7 +48987,7 @@ function runVendorQuery(input) {
48987
48987
  }
48988
48988
 
48989
48989
  // ../../packages/core-agent/src/claude/sdk.ts
48990
- var NATIVE_MODEL_ALIASES = /* @__PURE__ */ new Set(["sonnet", "opus", "haiku", "fable", "fable[1m]"]);
48990
+ var NATIVE_MODEL_ALIASES = /* @__PURE__ */ new Set(["sonnet", "opus", "opus[1m]", "haiku", "fable", "fable[1m]"]);
48991
48991
  async function createClaudeGatewaySdk(options) {
48992
48992
  const baseUrl = normalizeBaseUrl(options.baseUrl);
48993
48993
  const accepted = resolveModels(options.models);
@@ -53685,12 +53685,12 @@ function createConsoleServer(deps = {}) {
53685
53685
  }
53686
53686
  const handle = decodeHandle(rawHandle);
53687
53687
  if (!access.revokeSessionByHandle(handle)) {
53688
- broadcastControlChanged();
53688
+ broadcastControlChanged(true);
53689
53689
  writeJson(res, 404, { error: "session_not_found" });
53690
53690
  return;
53691
53691
  }
53692
53692
  desktopShellsByOwner.delete(handle);
53693
- notifyControlReclaimed(handle);
53693
+ endSessionStreams(handle, "reclaimed");
53694
53694
  broadcastControlChanged();
53695
53695
  res.writeHead(204, withSecurityHeaders2({}));
53696
53696
  res.end();
@@ -53713,7 +53713,7 @@ function createConsoleServer(deps = {}) {
53713
53713
  access.revokeSessionsByPairing(removed.id);
53714
53714
  for (const session of closed) {
53715
53715
  desktopShellsByOwner.delete(session.handle);
53716
- notifyControlReclaimed(session.handle);
53716
+ endSessionStreams(session.handle, "reclaimed");
53717
53717
  }
53718
53718
  broadcastControlChanged();
53719
53719
  res.writeHead(204, withSecurityHeaders2({}));
@@ -53815,7 +53815,7 @@ function createConsoleServer(deps = {}) {
53815
53815
  writeJson(res, joined.status, { error: joined.error });
53816
53816
  return false;
53817
53817
  }
53818
- if (listener.audience === "remote" && joined.session.access === "full") broadcastControlChanged();
53818
+ if (listener.audience === "remote") broadcastControlChanged();
53819
53819
  const cookies = [formatSessionCookie(joined.session, { secure: listener.secure, port: listener.port })];
53820
53820
  if (joined.pairingSecret !== null) cookies.push(formatPairingCookie(joined.pairingSecret, { secure: listener.secure, port: listener.port }));
53821
53821
  res.writeHead(204, withSecurityHeaders2({ "Set-Cookie": cookies }));
@@ -53824,7 +53824,6 @@ function createConsoleServer(deps = {}) {
53824
53824
  }
53825
53825
  function pairFromGrant(listener, token, device) {
53826
53826
  const pending = access.peekGrant(token, listener.audience);
53827
- if (pending !== null && !canTakeControl(listener.audience, pending.access)) return { status: 409, error: "remote_control_held" };
53828
53827
  if (pending !== null && listener.audience === "remote" && pairedDeviceStore.list("remote").length >= PAIRED_DEVICE_LIMIT) {
53829
53828
  return { status: 409, error: "paired_device_limit" };
53830
53829
  }
@@ -53835,6 +53834,7 @@ function createConsoleServer(deps = {}) {
53835
53834
  }
53836
53835
  const paired = pairedDeviceStore.pair({ audience: listener.audience, access: grant.access, device });
53837
53836
  if (!paired) return { status: 409, error: "paired_device_limit" };
53837
+ supersedeRemoteSessions(null);
53838
53838
  return {
53839
53839
  session: access.openSession(listener.audience, grant.access, device, paired.device.id),
53840
53840
  pairingSecret: paired.secret
@@ -53844,9 +53844,7 @@ function createConsoleServer(deps = {}) {
53844
53844
  const secret = readPairingCookie(req.headers, listener.port);
53845
53845
  const paired = pairedDeviceStore.resolve(secret, listener.audience);
53846
53846
  if (!paired || secret === null) return { status: 401, error: "unauthorized" };
53847
- const reclaimedOwn = access.revokeSessionsByPairing(paired.id);
53848
- if (!canTakeControl(listener.audience, paired.access)) return { status: 409, error: "remote_control_held" };
53849
- if (reclaimedOwn) broadcastControlChanged();
53847
+ supersedeRemoteSessions(paired.id);
53850
53848
  return {
53851
53849
  // 등급은 페어링이 정한다 — 재개가 monitoring을 full로 올릴 수 없어야 한다.
53852
53850
  session: access.openSession(listener.audience, paired.access, device ?? paired.device, paired.id),
@@ -53854,9 +53852,13 @@ function createConsoleServer(deps = {}) {
53854
53852
  pairingSecret: secret
53855
53853
  };
53856
53854
  }
53857
- function canTakeControl(audience, requested) {
53858
- if (audience !== "remote" || requested !== "full") return true;
53859
- return !access.hasSession("remote", "full");
53855
+ function supersedeRemoteSessions(ownPairingId) {
53856
+ for (const session of access.listSessions("remote")) {
53857
+ if (!access.revokeSessionByHandle(session.handle)) continue;
53858
+ desktopShellsByOwner.delete(session.handle);
53859
+ const displaced = session.pairingId === null || session.pairingId !== ownPairingId;
53860
+ endSessionStreams(session.handle, displaced ? "superseded" : null);
53861
+ }
53860
53862
  }
53861
53863
  function shellOwnerOf(req) {
53862
53864
  const listener = listenerForRequest(req);
@@ -54421,10 +54423,11 @@ function createConsoleServer(deps = {}) {
54421
54423
  }
54422
54424
  return null;
54423
54425
  }
54424
- function broadcastControlChanged() {
54426
+ function broadcastControlChanged(resend = false) {
54425
54427
  const holder = currentControlHolder();
54426
- if (holder?.handle === lastPublishedControlHolder) return;
54427
- lastPublishedControlHolder = holder?.handle ?? null;
54428
+ const handle = holder?.handle ?? null;
54429
+ if (!resend && handle === lastPublishedControlHolder) return;
54430
+ lastPublishedControlHolder = handle;
54428
54431
  publishPluginEvent(CONTROL_HOLDER_EVENT_CHANNEL, { holder });
54429
54432
  if (operationSseSubscribers.size === 0) return;
54430
54433
  const data = encodeSseData(CONTROL_CHANGED_EVENT, controlChangedSnapshot(holder));
@@ -54433,12 +54436,14 @@ function createConsoleServer(deps = {}) {
54433
54436
  subscriber.res.write(data);
54434
54437
  }
54435
54438
  }
54436
- function notifyControlReclaimed(handle) {
54439
+ function endSessionStreams(handle, reason) {
54437
54440
  if (operationSseSubscribers.size === 0) return;
54438
- const data = encodeSseData(CONTROL_RECLAIMED_EVENT, controlReclaimedSnapshot("reclaimed"));
54439
- for (const subscriber of operationSseSubscribers) {
54441
+ const data = reason === null ? null : encodeSseData(CONTROL_RECLAIMED_EVENT, controlReclaimedSnapshot(reason));
54442
+ for (const subscriber of [...operationSseSubscribers]) {
54440
54443
  if (subscriber.sessionHandle !== handle) continue;
54441
- subscriber.res.write(data);
54444
+ operationSseSubscribers.delete(subscriber);
54445
+ if (data !== null) subscriber.res.write(data);
54446
+ subscriber.res.end();
54442
54447
  }
54443
54448
  }
54444
54449
  function broadcastDesktopThemeChanged(theme) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotobokuri/fleet-console",
3
- "version": "1.55.0",
3
+ "version": "1.57.0",
4
4
  "description": "Fleet Console — sole owner of the fleet and fleet-console bins, Console web surface, and thin Claude Code launcher.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1 +0,0 @@
1
- import{ap as o,aq as n}from"./mermaid.core-BlTpil8e.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-DHRtIlLJ.js";import{_ as i}from"./mermaid.core-BlTpil8e.js";import"./chunk-FMBD7UC4-BPV9Mw6e.js";import"./chunk-YZCP3GAM-DasGOM9R.js";import"./chunk-55IACEB6-ChTm2kCK.js";import"./chunk-EDXVE4YY-C_BQtaY5.js";import"./index-DEW90Ngb.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-DHRtIlLJ.js";import{_ as i}from"./mermaid.core-BlTpil8e.js";import"./chunk-FMBD7UC4-BPV9Mw6e.js";import"./chunk-YZCP3GAM-DasGOM9R.js";import"./chunk-55IACEB6-ChTm2kCK.js";import"./chunk-EDXVE4YY-C_BQtaY5.js";import"./index-DEW90Ngb.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{b as r}from"./graph-C0wWu6sL.js";var e=4;function a(o){return r(o,e)}export{a as c};