@launchsecure/launch-kit 0.0.38 → 0.0.40

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 (101) hide show
  1. package/dist/beacon/beacon.mjs +308 -298
  2. package/dist/beacon/beacon.mjs.map +1 -1
  3. package/dist/beacon/beacon.umd.js +6 -6
  4. package/dist/beacon/beacon.umd.js.map +1 -1
  5. package/dist/beacon/types/internal/screenshot.d.ts.map +1 -1
  6. package/dist/chart-client/assets/index-CWJFFDPu.css +1 -0
  7. package/dist/chart-client/index.html +2 -2
  8. package/dist/client/assets/index-CTzFcfGV.css +32 -0
  9. package/dist/client/index.html +2 -2
  10. package/dist/council-client/assets/index-ArgRc5mN.css +1 -0
  11. package/dist/council-client/index.html +2 -2
  12. package/dist/deck-client/assets/{_baseUniq-CgW32Gdk.js → _baseUniq-BZP7n41F.js} +1 -1
  13. package/dist/deck-client/assets/{arc-D-Mg9gvM.js → arc-31biU3Az.js} +1 -1
  14. package/dist/deck-client/assets/{architectureDiagram-Q4EWVU46-CdTsXsgl.js → architectureDiagram-Q4EWVU46-DHg6Ss--.js} +1 -1
  15. package/dist/deck-client/assets/{blockDiagram-DXYQGD6D-mwTneYyB.js → blockDiagram-DXYQGD6D-CUdblaWk.js} +1 -1
  16. package/dist/deck-client/assets/{c4Diagram-AHTNJAMY-C4R8IbjO.js → c4Diagram-AHTNJAMY-MfAO5lak.js} +1 -1
  17. package/dist/deck-client/assets/channel-BBkRLdnC.js +1 -0
  18. package/dist/deck-client/assets/{chunk-4BX2VUAB-ZWuRIUwb.js → chunk-4BX2VUAB-DQ1MrGgN.js} +1 -1
  19. package/dist/deck-client/assets/{chunk-4TB4RGXK-PNHX10sF.js → chunk-4TB4RGXK-BUJtZ7jO.js} +1 -1
  20. package/dist/deck-client/assets/{chunk-55IACEB6-CD9MUgPr.js → chunk-55IACEB6-BdSnXB6g.js} +1 -1
  21. package/dist/deck-client/assets/{chunk-EDXVE4YY-C_CpORb3.js → chunk-EDXVE4YY-94yZIUI8.js} +1 -1
  22. package/dist/deck-client/assets/{chunk-FMBD7UC4-Bg5RoVC-.js → chunk-FMBD7UC4-PnZ9v6ey.js} +1 -1
  23. package/dist/deck-client/assets/{chunk-OYMX7WX6-DhTwgQwd.js → chunk-OYMX7WX6-DXrWNOsV.js} +1 -1
  24. package/dist/deck-client/assets/{chunk-QZHKN3VN-C5VLMaFa.js → chunk-QZHKN3VN-CsIGIDKX.js} +1 -1
  25. package/dist/deck-client/assets/{chunk-YZCP3GAM-NAGHy4Sr.js → chunk-YZCP3GAM-DVkBO9tn.js} +1 -1
  26. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-DFCaeF-7.js +1 -0
  27. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-DFCaeF-7.js +1 -0
  28. package/dist/deck-client/assets/clone-GCEVRScB.js +1 -0
  29. package/dist/deck-client/assets/{cose-bilkent-S5V4N54A-CpUczjZk.js → cose-bilkent-S5V4N54A-m126Oh3b.js} +1 -1
  30. package/dist/deck-client/assets/{dagre-KV5264BT-BOvb07MG.js → dagre-KV5264BT-C2aig8U5.js} +1 -1
  31. package/dist/deck-client/assets/{diagram-5BDNPKRD-BPxwTiC-.js → diagram-5BDNPKRD-CKpoRfGn.js} +1 -1
  32. package/dist/deck-client/assets/{diagram-G4DWMVQ6-Dz_gsHgx.js → diagram-G4DWMVQ6-Cjh115Ep.js} +1 -1
  33. package/dist/deck-client/assets/{diagram-MMDJMWI5-B7z-oVTW.js → diagram-MMDJMWI5-DKlBv_2L.js} +1 -1
  34. package/dist/deck-client/assets/{diagram-TYMM5635-CAIAglLQ.js → diagram-TYMM5635-CdBh4cEn.js} +1 -1
  35. package/dist/deck-client/assets/{erDiagram-SMLLAGMA-BiViTWF3.js → erDiagram-SMLLAGMA-56pn_93p.js} +1 -1
  36. package/dist/deck-client/assets/{flowDiagram-DWJPFMVM-DYVemp0H.js → flowDiagram-DWJPFMVM-BtV3M5xJ.js} +1 -1
  37. package/dist/deck-client/assets/{ganttDiagram-T4ZO3ILL-Chc1Iyu1.js → ganttDiagram-T4ZO3ILL-DTIsC6Zg.js} +1 -1
  38. package/dist/deck-client/assets/{gitGraphDiagram-UUTBAWPF-B7eFgaj5.js → gitGraphDiagram-UUTBAWPF-CJYeyCLe.js} +1 -1
  39. package/dist/deck-client/assets/{graph-CKaIoNwb.js → graph-BDvMu1Ss.js} +1 -1
  40. package/dist/deck-client/assets/index-D4eSxcBn.css +1 -0
  41. package/dist/deck-client/assets/{index-BRawc7RA.js → index-QnGVE9PZ.js} +83 -83
  42. package/dist/deck-client/assets/{infoDiagram-42DDH7IO-BxsVq7vO.js → infoDiagram-42DDH7IO-BWyKJnpW.js} +1 -1
  43. package/dist/deck-client/assets/{ishikawaDiagram-UXIWVN3A-DAM7vPwa.js → ishikawaDiagram-UXIWVN3A-DXYkdO3T.js} +1 -1
  44. package/dist/deck-client/assets/{journeyDiagram-VCZTEJTY-Xe20Nf7R.js → journeyDiagram-VCZTEJTY-C2zBr-J5.js} +1 -1
  45. package/dist/deck-client/assets/{kanban-definition-6JOO6SKY-DS8YguzB.js → kanban-definition-6JOO6SKY-CdoYLS4Z.js} +1 -1
  46. package/dist/deck-client/assets/{layout-DKMBpzR-.js → layout-vOnxnCQU.js} +1 -1
  47. package/dist/deck-client/assets/{linear-DTNtBg5h.js → linear-B0J0WCGz.js} +1 -1
  48. package/dist/deck-client/assets/{min-C4DrxCcA.js → min-B0AXlT9L.js} +1 -1
  49. package/dist/deck-client/assets/{mindmap-definition-QFDTVHPH-B4nEtsw5.js → mindmap-definition-QFDTVHPH-oAybLedr.js} +1 -1
  50. package/dist/deck-client/assets/{pieDiagram-DEJITSTG-BzHdGNu5.js → pieDiagram-DEJITSTG-BjHyHxGk.js} +1 -1
  51. package/dist/deck-client/assets/{quadrantDiagram-34T5L4WZ-CaX0SD4-.js → quadrantDiagram-34T5L4WZ-dtluDZXs.js} +1 -1
  52. package/dist/deck-client/assets/{requirementDiagram-MS252O5E-QeG4p2ni.js → requirementDiagram-MS252O5E-Cq8l7bOl.js} +1 -1
  53. package/dist/deck-client/assets/{sankeyDiagram-XADWPNL6-BoAwgAj-.js → sankeyDiagram-XADWPNL6-C1Vih91z.js} +1 -1
  54. package/dist/deck-client/assets/{sequenceDiagram-FGHM5R23-Dn4pYYgu.js → sequenceDiagram-FGHM5R23-CYkd7oQK.js} +1 -1
  55. package/dist/deck-client/assets/{stateDiagram-FHFEXIEX-Is6KRmQV.js → stateDiagram-FHFEXIEX-CtyG8wBK.js} +1 -1
  56. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-BLyKWfcN.js +1 -0
  57. package/dist/deck-client/assets/{timeline-definition-GMOUNBTQ-v64IZGuY.js → timeline-definition-GMOUNBTQ-DZIxSyd1.js} +1 -1
  58. package/dist/deck-client/assets/{vennDiagram-DHZGUBPP-noh9eouF.js → vennDiagram-DHZGUBPP-Ct4JVRDM.js} +1 -1
  59. package/dist/deck-client/assets/{wardley-RL74JXVD-cJ_1is2S.js → wardley-RL74JXVD-V29ycxOW.js} +1 -1
  60. package/dist/deck-client/assets/{wardleyDiagram-NUSXRM2D-DxR4j737.js → wardleyDiagram-NUSXRM2D-D-Ua6Cmi.js} +1 -1
  61. package/dist/deck-client/assets/{xychartDiagram-5P7HB3ND-B26vodaL.js → xychartDiagram-5P7HB3ND-BPCOuRVl.js} +1 -1
  62. package/dist/deck-client/index.html +2 -2
  63. package/dist/server/beacon-monitor-entry.js +106 -24
  64. package/dist/server/chart-serve.js +544 -247
  65. package/dist/server/cli.js +743 -324
  66. package/dist/server/council-entry.js +16 -3
  67. package/dist/server/council-serve.js +15 -2
  68. package/dist/server/deck-mcp-entry.js +270 -108
  69. package/dist/server/deck-serve.js +101 -23
  70. package/dist/server/fb-wizard.js +0 -0
  71. package/dist/server/graph-mcp-entry.js +866 -357
  72. package/dist/server/init-entry.js +152 -25
  73. package/dist/server/orbit-entry.js +91 -7
  74. package/dist/server/radar-docker-init-entry.js +0 -0
  75. package/dist/server/radar-entrypoint-entry.js +0 -0
  76. package/dist/server/radar-teardown-entry.js +0 -0
  77. package/dist/server/recall-entry.js +94 -12
  78. package/dist/server/rover-entry.js +44 -1
  79. package/package.json +23 -22
  80. package/scaffolds/ls-marketplace/plugins/kit/commands/activate-statusline.md +8 -7
  81. package/scaffolds/ls-marketplace/plugins/kit/commands/deactivate-statusline.md +2 -2
  82. package/scaffolds/ls-marketplace/plugins/kit/skills/comms/SKILL.md +88 -0
  83. package/scaffolds/ls-marketplace/plugins/kit/skills/project-info/SKILL.md +88 -0
  84. package/scaffolds/ls-marketplace/plugins/kit/skills/slides/SKILL.md +118 -0
  85. package/scaffolds/migrate-safety/scripts/migrate-with-backup.sh +0 -0
  86. package/scaffolds/recall-hook/scripts/ensure-recall.sh +0 -0
  87. package/scaffolds/statusline/statusline-base.sh +20 -0
  88. package/scaffolds/statusline/statusline-mcp.sh +68 -19
  89. package/scaffolds/statusline/statusline-wrapper.sh +12 -9
  90. package/dist/chart-client/assets/index-B6rR0CWx.css +0 -1
  91. package/dist/client/assets/index-D6uX1lQe.css +0 -32
  92. package/dist/council-client/assets/index-CleYLarJ.css +0 -1
  93. package/dist/deck-client/assets/channel-CuSee7GO.js +0 -1
  94. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-_kTisqzs.js +0 -1
  95. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-_kTisqzs.js +0 -1
  96. package/dist/deck-client/assets/clone-kb3zkY60.js +0 -1
  97. package/dist/deck-client/assets/index-55P73aS_.css +0 -1
  98. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-Cy45Ttqq.js +0 -1
  99. /package/dist/chart-client/assets/{index-C_xCi3gW.js → index-Dzlj-oCj.js} +0 -0
  100. /package/dist/client/assets/{index-CRecYFUA.js → index-tTg_ezUF.js} +0 -0
  101. /package/dist/council-client/assets/{index-DO-Vn15O.js → index-B1v46vTE.js} +0 -0
@@ -1227,7 +1227,7 @@ function readCredFile(repoRoot) {
1227
1227
  var _config = null;
1228
1228
  var _requestId = 0;
1229
1229
  var _sessionId = null;
1230
- function mcpConfigFromCourse(projectRoot) {
1230
+ function mcpConfigForProfile(projectRoot, name) {
1231
1231
  let cred;
1232
1232
  try {
1233
1233
  cred = readCredFile(projectRoot);
@@ -1237,7 +1237,7 @@ function mcpConfigFromCourse(projectRoot) {
1237
1237
  if (!cred) return null;
1238
1238
  const nested = toNested(cred);
1239
1239
  if (!nested) return null;
1240
- const profile = nested.profiles[nested.active];
1240
+ const profile = nested.profiles[name];
1241
1241
  if (!profile?.pat || !profile.serverUrl || !profile.orgSlug || !profile.projectSlug) {
1242
1242
  return null;
1243
1243
  }
@@ -1250,6 +1250,37 @@ function mcpConfigFromCourse(projectRoot) {
1250
1250
  }
1251
1251
  };
1252
1252
  }
1253
+ function mcpConfigFromCourse(projectRoot) {
1254
+ let cred;
1255
+ try {
1256
+ cred = readCredFile(projectRoot);
1257
+ } catch {
1258
+ return null;
1259
+ }
1260
+ if (!cred) return null;
1261
+ const nested = toNested(cred);
1262
+ if (!nested) return null;
1263
+ return mcpConfigForProfile(projectRoot, nested.active);
1264
+ }
1265
+ function listCourses(projectRoot) {
1266
+ let cred;
1267
+ try {
1268
+ cred = readCredFile(projectRoot);
1269
+ } catch {
1270
+ return [];
1271
+ }
1272
+ if (!cred) return [];
1273
+ const nested = toNested(cred);
1274
+ if (!nested) return [];
1275
+ return Object.entries(nested.profiles).map(([name, p]) => ({
1276
+ name,
1277
+ org: p.orgSlug ?? "",
1278
+ project: p.projectSlug ?? "",
1279
+ serverUrl: p.serverUrl ?? "",
1280
+ active: name === nested.active,
1281
+ usable: Boolean(p.pat && p.serverUrl && p.orgSlug && p.projectSlug)
1282
+ }));
1283
+ }
1253
1284
  function loadMcpConfig(projectRoot) {
1254
1285
  if (_config) return _config;
1255
1286
  const fromCourse = mcpConfigFromCourse(projectRoot);
@@ -1276,6 +1307,24 @@ function loadMcpConfig(projectRoot) {
1276
1307
  };
1277
1308
  return _config;
1278
1309
  }
1310
+ var _overrideLock = Promise.resolve();
1311
+ function withMcpConfig(override, fn) {
1312
+ const run = async () => {
1313
+ const prevConfig = _config;
1314
+ const prevSession = _sessionId;
1315
+ _config = override;
1316
+ _sessionId = null;
1317
+ try {
1318
+ return await fn();
1319
+ } finally {
1320
+ _config = prevConfig;
1321
+ _sessionId = prevSession;
1322
+ }
1323
+ };
1324
+ const result = _overrideLock.then(run, run);
1325
+ _overrideLock = result.then(() => void 0, () => void 0);
1326
+ return result;
1327
+ }
1279
1328
  function parseSSE(text) {
1280
1329
  const lines = text.split("\n");
1281
1330
  for (const line of lines) {
@@ -1438,6 +1487,7 @@ function listPersistedSessions(cwd) {
1438
1487
  if (!entry.isDirectory()) continue;
1439
1488
  const persisted = readPersistedSession(cwd, entry.name);
1440
1489
  if (!persisted) continue;
1490
+ const sync = readSyncRecord(cwd, persisted.id);
1441
1491
  sessions.push({
1442
1492
  id: persisted.id,
1443
1493
  mode: persisted.mode,
@@ -1445,7 +1495,8 @@ function listPersistedSessions(cwd) {
1445
1495
  version: persisted.version,
1446
1496
  createdAt: persisted.createdAt,
1447
1497
  updatedAt: persisted.updatedAt,
1448
- shared: Boolean(readSyncRecord(cwd, persisted.id))
1498
+ shared: Boolean(sync),
1499
+ stale: Boolean(sync) && persisted.version > (sync?.version ?? 0)
1449
1500
  });
1450
1501
  }
1451
1502
  sessions.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
@@ -1683,6 +1734,10 @@ async function startDeckServer(opts = {}) {
1683
1734
  jsonResponse(res, 200, { config: cfg });
1684
1735
  return;
1685
1736
  }
1737
+ if (req.method === "GET" && url2.pathname === "/api/deck/courses") {
1738
+ jsonResponse(res, 200, { courses: listCourses(cwd) });
1739
+ return;
1740
+ }
1686
1741
  if (req.method === "POST" && url2.pathname === "/api/deck/config") {
1687
1742
  try {
1688
1743
  const body = JSON.parse(await readBody(req));
@@ -1781,14 +1836,34 @@ async function startDeckServer(opts = {}) {
1781
1836
  jsonResponse(res, 404, { ok: false, error: "session not found" });
1782
1837
  return;
1783
1838
  }
1839
+ let course;
1784
1840
  try {
1785
- loadMcpConfig(cwd);
1786
- } catch (err) {
1787
- jsonResponse(res, 400, {
1788
- ok: false,
1789
- error: `Cloud sharing needs an active LaunchSecure course (.launch-secure.cred.config) or a "launch-secure" entry in .mcp.json: ${String(err)}`
1790
- });
1791
- return;
1841
+ const raw = await readBody(req);
1842
+ if (raw.trim()) {
1843
+ course = JSON.parse(raw).course?.trim() || void 0;
1844
+ }
1845
+ } catch {
1846
+ }
1847
+ let override = null;
1848
+ if (course) {
1849
+ override = mcpConfigForProfile(cwd, course);
1850
+ if (!override) {
1851
+ jsonResponse(res, 400, {
1852
+ ok: false,
1853
+ error: `Course "${course}" is not a usable profile in .launch-secure.cred.config (missing pat/serverUrl/orgSlug/projectSlug?).`
1854
+ });
1855
+ return;
1856
+ }
1857
+ } else {
1858
+ try {
1859
+ loadMcpConfig(cwd);
1860
+ } catch (err) {
1861
+ jsonResponse(res, 400, {
1862
+ ok: false,
1863
+ error: `Cloud sharing needs an active LaunchSecure course (.launch-secure.cred.config) or a "launch-secure" entry in .mcp.json: ${String(err)}`
1864
+ });
1865
+ return;
1866
+ }
1792
1867
  }
1793
1868
  try {
1794
1869
  const blocks = Array.isArray(persisted.blocks) ? persisted.blocks : [];
@@ -1797,24 +1872,27 @@ async function startDeckServer(opts = {}) {
1797
1872
  const body = `Shared deck "${id}" \u2014 ${blocks.length} block${blocks.length === 1 ? "" : "s"}${types.length ? ` (${types.join(", ")})` : ""}. Open the Decks tab in the Communication Center to view.`;
1798
1873
  const input = { title: id, body, html, sessionId: id, blockCount: blocks.length };
1799
1874
  const existing2 = readSyncRecord(cwd, id);
1800
- let resourceId;
1801
- let updated = false;
1802
- if (existing2?.resourceId) {
1803
- try {
1804
- ({ id: resourceId } = await updateDeck(existing2.resourceId, input));
1805
- updated = true;
1806
- } catch {
1807
- ({ id: resourceId } = await writeDeck(input));
1875
+ const doShare = async () => {
1876
+ if (existing2?.resourceId) {
1877
+ try {
1878
+ const { id: rid2 } = await updateDeck(existing2.resourceId, input);
1879
+ return { resourceId: rid2, updated: true };
1880
+ } catch {
1881
+ const { id: rid2 } = await writeDeck(input);
1882
+ return { resourceId: rid2, updated: false };
1883
+ }
1808
1884
  }
1809
- } else {
1810
- ({ id: resourceId } = await writeDeck(input));
1811
- }
1885
+ const { id: rid } = await writeDeck(input);
1886
+ return { resourceId: rid, updated: false };
1887
+ };
1888
+ const { resourceId, updated } = override ? await withMcpConfig(override, doShare) : await doShare();
1812
1889
  writeSyncRecord(cwd, id, {
1813
1890
  resourceId,
1814
1891
  sharedAt: (/* @__PURE__ */ new Date()).toISOString(),
1815
- version: persisted.version
1892
+ version: persisted.version,
1893
+ course
1816
1894
  });
1817
- jsonResponse(res, 200, { ok: true, resourceId, updated });
1895
+ jsonResponse(res, 200, { ok: true, resourceId, updated, course });
1818
1896
  } catch (err) {
1819
1897
  jsonResponse(res, 500, { ok: false, error: String(err) });
1820
1898
  }
File without changes