@launchsecure/launch-kit 0.0.35 → 0.0.37

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 (83) hide show
  1. package/dist/chart-client/assets/index-DJrjyXbN.css +1 -0
  2. package/dist/chart-client/index.html +2 -2
  3. package/dist/client/assets/index-8eSXr3Ez.css +32 -0
  4. package/dist/client/index.html +2 -2
  5. package/dist/council-client/assets/index-4K0t2WrZ.css +1 -0
  6. package/dist/council-client/index.html +2 -2
  7. package/dist/deck-client/assets/{_baseUniq-BiVx0WO_.js → _baseUniq-Cn5TyL9s.js} +1 -1
  8. package/dist/deck-client/assets/{arc-DGMkiEzS.js → arc-D61amKYu.js} +1 -1
  9. package/dist/deck-client/assets/{architectureDiagram-Q4EWVU46-Y2WRmHtk.js → architectureDiagram-Q4EWVU46-CpKrvC2W.js} +1 -1
  10. package/dist/deck-client/assets/{blockDiagram-DXYQGD6D-_Lbfu5BQ.js → blockDiagram-DXYQGD6D-Yj5OjxvG.js} +1 -1
  11. package/dist/deck-client/assets/{c4Diagram-AHTNJAMY-CTqpYTBX.js → c4Diagram-AHTNJAMY-BIR810Tv.js} +1 -1
  12. package/dist/deck-client/assets/channel-DrJz2x-n.js +1 -0
  13. package/dist/deck-client/assets/{chunk-4BX2VUAB-liEIbPHs.js → chunk-4BX2VUAB-BeSHwGvx.js} +1 -1
  14. package/dist/deck-client/assets/{chunk-4TB4RGXK-CCc6lYvL.js → chunk-4TB4RGXK-CCqzsLpg.js} +1 -1
  15. package/dist/deck-client/assets/{chunk-55IACEB6-D02jJUR2.js → chunk-55IACEB6-CuW_aq4-.js} +1 -1
  16. package/dist/deck-client/assets/{chunk-EDXVE4YY-BFmGMbLD.js → chunk-EDXVE4YY-Dl35ixYh.js} +1 -1
  17. package/dist/deck-client/assets/{chunk-FMBD7UC4-6wFLOVcJ.js → chunk-FMBD7UC4-TwreZQTv.js} +1 -1
  18. package/dist/deck-client/assets/{chunk-OYMX7WX6-Bnr8RiBf.js → chunk-OYMX7WX6-Ahfw8EUo.js} +1 -1
  19. package/dist/deck-client/assets/{chunk-QZHKN3VN-Ct82MksJ.js → chunk-QZHKN3VN-DlE_zlU-.js} +1 -1
  20. package/dist/deck-client/assets/{chunk-YZCP3GAM-BXmN1diQ.js → chunk-YZCP3GAM-Dj6QWzSg.js} +1 -1
  21. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-a3tg9w7z.js +1 -0
  22. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-a3tg9w7z.js +1 -0
  23. package/dist/deck-client/assets/clone-Dd7JBCL5.js +1 -0
  24. package/dist/deck-client/assets/{cose-bilkent-S5V4N54A-CmQCT-mH.js → cose-bilkent-S5V4N54A-BO1z5aOM.js} +1 -1
  25. package/dist/deck-client/assets/{dagre-KV5264BT-DDdSa9EX.js → dagre-KV5264BT-DVsw17fE.js} +1 -1
  26. package/dist/deck-client/assets/{diagram-5BDNPKRD-Bccks2xJ.js → diagram-5BDNPKRD-6jYs7oZk.js} +1 -1
  27. package/dist/deck-client/assets/{diagram-G4DWMVQ6-CPPNgxmQ.js → diagram-G4DWMVQ6-6DbggeGE.js} +1 -1
  28. package/dist/deck-client/assets/{diagram-MMDJMWI5-KrD300pS.js → diagram-MMDJMWI5-CQtk1cSU.js} +1 -1
  29. package/dist/deck-client/assets/{diagram-TYMM5635-DefnLuQf.js → diagram-TYMM5635-BR-gt75b.js} +1 -1
  30. package/dist/deck-client/assets/{erDiagram-SMLLAGMA-DI9FfnFP.js → erDiagram-SMLLAGMA-C9qMtjdY.js} +1 -1
  31. package/dist/deck-client/assets/{flowDiagram-DWJPFMVM-twKyd3Fx.js → flowDiagram-DWJPFMVM-CdaPhPYb.js} +1 -1
  32. package/dist/deck-client/assets/{ganttDiagram-T4ZO3ILL-Wau3jhBr.js → ganttDiagram-T4ZO3ILL-BRsZWUy4.js} +1 -1
  33. package/dist/deck-client/assets/{gitGraphDiagram-UUTBAWPF-D9GgYXwb.js → gitGraphDiagram-UUTBAWPF-B8Z90jCj.js} +1 -1
  34. package/dist/deck-client/assets/{graph-BhNLzyXS.js → graph-my2Zphm4.js} +1 -1
  35. package/dist/deck-client/assets/index-ByqxPEgU.css +1 -0
  36. package/dist/deck-client/assets/{index-BtQBaQ7s.js → index-DqAoYZwV.js} +43 -42
  37. package/dist/deck-client/assets/{infoDiagram-42DDH7IO-TylGlSG-.js → infoDiagram-42DDH7IO-Csr9loin.js} +1 -1
  38. package/dist/deck-client/assets/{ishikawaDiagram-UXIWVN3A-DAT8icpg.js → ishikawaDiagram-UXIWVN3A-HWdvUNFi.js} +1 -1
  39. package/dist/deck-client/assets/{journeyDiagram-VCZTEJTY-D3v_XL72.js → journeyDiagram-VCZTEJTY-CjYHG6EM.js} +1 -1
  40. package/dist/deck-client/assets/{kanban-definition-6JOO6SKY-DNUOBiNr.js → kanban-definition-6JOO6SKY-CX3JdUu7.js} +1 -1
  41. package/dist/deck-client/assets/{layout-COfodgwF.js → layout-Bcucv5Gi.js} +1 -1
  42. package/dist/deck-client/assets/{linear-DmTsuIvK.js → linear-CUGM5FJZ.js} +1 -1
  43. package/dist/deck-client/assets/{min-BW1F7i1D.js → min-Dw4g5w9z.js} +1 -1
  44. package/dist/deck-client/assets/{mindmap-definition-QFDTVHPH-CErFzKWl.js → mindmap-definition-QFDTVHPH-C8oo61fg.js} +1 -1
  45. package/dist/deck-client/assets/{pieDiagram-DEJITSTG-DW5F757o.js → pieDiagram-DEJITSTG-D2WYGkq8.js} +1 -1
  46. package/dist/deck-client/assets/{quadrantDiagram-34T5L4WZ-B1S2-TfI.js → quadrantDiagram-34T5L4WZ-Vh00GISt.js} +1 -1
  47. package/dist/deck-client/assets/{requirementDiagram-MS252O5E-BY5BAR-5.js → requirementDiagram-MS252O5E-DxI-DFrN.js} +1 -1
  48. package/dist/deck-client/assets/{sankeyDiagram-XADWPNL6-CE1Cp9HS.js → sankeyDiagram-XADWPNL6-QgwyjasI.js} +1 -1
  49. package/dist/deck-client/assets/{sequenceDiagram-FGHM5R23-IaHnbKye.js → sequenceDiagram-FGHM5R23-DmOmD5Ni.js} +1 -1
  50. package/dist/deck-client/assets/{stateDiagram-FHFEXIEX-CwPJm9hU.js → stateDiagram-FHFEXIEX-CRwglGg_.js} +1 -1
  51. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-BvZLEWAA.js +1 -0
  52. package/dist/deck-client/assets/{timeline-definition-GMOUNBTQ-DVFGGSgN.js → timeline-definition-GMOUNBTQ-Dj9YGKOh.js} +1 -1
  53. package/dist/deck-client/assets/{vennDiagram-DHZGUBPP-C1194MJi.js → vennDiagram-DHZGUBPP-xzIaOzEU.js} +1 -1
  54. package/dist/deck-client/assets/wardley-RL74JXVD-CEAay09T.js +162 -0
  55. package/dist/deck-client/assets/{wardleyDiagram-NUSXRM2D-hpwdFfGj.js → wardleyDiagram-NUSXRM2D-BIYYh-JZ.js} +1 -1
  56. package/dist/deck-client/assets/{xychartDiagram-5P7HB3ND-DYkotwy8.js → xychartDiagram-5P7HB3ND-Cy9EoJCh.js} +1 -1
  57. package/dist/deck-client/index.html +2 -2
  58. package/dist/server/cli.js +261 -26
  59. package/dist/server/council-entry.js +86 -2
  60. package/dist/server/council-serve.js +81 -2
  61. package/dist/server/deck-mcp-entry.js +449 -68
  62. package/dist/server/deck-serve.js +411 -42
  63. package/dist/server/init-entry.js +732 -237
  64. package/dist/server/orbit-entry.js +880 -144
  65. package/dist/server/radar-docker-init-entry.js +371 -37
  66. package/dist/server/rover-entry.js +108 -20
  67. package/package.json +1 -1
  68. package/scaffolds/ls-marketplace/plugins/kit/skills/deploy-check/SKILL.md +5 -0
  69. package/scaffolds/ls-marketplace/plugins/kit/skills/kickoff/SKILL.md +20 -4
  70. package/scaffolds/ls-marketplace/plugins/kit/skills/orbit/SKILL.md +27 -7
  71. package/dist/chart-client/assets/index-DpKO9p0s.css +0 -1
  72. package/dist/client/assets/index-Dv6dD2zY.css +0 -32
  73. package/dist/council-client/assets/index-AqQ9Sei6.css +0 -1
  74. package/dist/deck-client/assets/channel-DB6LxW_l.js +0 -1
  75. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-g944ZyG8.js +0 -1
  76. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-g944ZyG8.js +0 -1
  77. package/dist/deck-client/assets/clone-DiIRH1pI.js +0 -1
  78. package/dist/deck-client/assets/index-B-YQq5b5.css +0 -1
  79. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-DQYa2M1q.js +0 -1
  80. package/dist/deck-client/assets/wardley-RL74JXVD-CHZiUbBa.js +0 -162
  81. /package/dist/chart-client/assets/{index-DFu2xIrM.js → index-BgUxHxwE.js} +0 -0
  82. /package/dist/client/assets/{index-Cbw6bVdx.js → index-CUivaQnN.js} +0 -0
  83. /package/dist/council-client/assets/{index-CAsmGTzg.js → index-DN8HN_5K.js} +0 -0
@@ -148,17 +148,100 @@ var init_council_config = __esm({
148
148
  }
149
149
  });
150
150
 
151
+ // src/server/cred-shape.ts
152
+ function inferCourseName(serverUrl) {
153
+ try {
154
+ const host = new URL(serverUrl).hostname.toLowerCase();
155
+ if (host === "localhost" || host === "127.0.0.1" || host.endsWith(".local")) return "local";
156
+ if (host.includes("staging")) return "staging";
157
+ if (host.endsWith(".vercel.app")) return "prod";
158
+ return host.split(".")[0] || "default";
159
+ } catch {
160
+ return "default";
161
+ }
162
+ }
163
+ function toNested(cred) {
164
+ if (cred.profiles && cred.active && cred.profiles[cred.active]) {
165
+ return { active: cred.active, profiles: cred.profiles };
166
+ }
167
+ if (!cred.pat || !cred.orgSlug || !cred.projectSlug || !cred.serverUrl) {
168
+ return null;
169
+ }
170
+ const name = inferCourseName(cred.serverUrl);
171
+ return {
172
+ active: name,
173
+ profiles: {
174
+ [name]: {
175
+ pat: cred.pat,
176
+ orgSlug: cred.orgSlug,
177
+ projectSlug: cred.projectSlug,
178
+ serverUrl: cred.serverUrl
179
+ }
180
+ }
181
+ };
182
+ }
183
+ function readCredFile(repoRoot) {
184
+ const p = path.join(repoRoot, CONFIG_FILENAME2);
185
+ if (!fs.existsSync(p)) return null;
186
+ try {
187
+ return JSON.parse(fs.readFileSync(p, "utf-8"));
188
+ } catch (err) {
189
+ throw new Error(`could not parse ${CONFIG_FILENAME2}: ${err instanceof Error ? err.message : String(err)}`);
190
+ }
191
+ }
192
+ var fs, path, CONFIG_FILENAME2;
193
+ var init_cred_shape = __esm({
194
+ "src/server/cred-shape.ts"() {
195
+ "use strict";
196
+ fs = __toESM(require("node:fs"));
197
+ path = __toESM(require("node:path"));
198
+ CONFIG_FILENAME2 = ".launch-secure.cred.config";
199
+ }
200
+ });
201
+
151
202
  // src/server/mcp-client.ts
203
+ function mcpConfigFromCourse(projectRoot) {
204
+ let cred;
205
+ try {
206
+ cred = readCredFile(projectRoot);
207
+ } catch {
208
+ return null;
209
+ }
210
+ if (!cred) return null;
211
+ const nested = toNested(cred);
212
+ if (!nested) return null;
213
+ const profile = nested.profiles[nested.active];
214
+ if (!profile?.pat || !profile.serverUrl || !profile.orgSlug || !profile.projectSlug) {
215
+ return null;
216
+ }
217
+ return {
218
+ url: new URL("/api/mcp/project", profile.serverUrl).toString(),
219
+ headers: {
220
+ Authorization: `Bearer ${profile.pat}`,
221
+ "X-Org-Slug": profile.orgSlug,
222
+ "X-Project-Slug": profile.projectSlug
223
+ }
224
+ };
225
+ }
152
226
  function loadMcpConfig(projectRoot) {
153
227
  if (_config) return _config;
228
+ const fromCourse = mcpConfigFromCourse(projectRoot);
229
+ if (fromCourse) {
230
+ _config = fromCourse;
231
+ return _config;
232
+ }
154
233
  const mcpPath = (0, import_node_path3.join)(projectRoot, ".mcp.json");
155
234
  if (!(0, import_node_fs3.existsSync)(mcpPath)) {
156
- throw new Error(`.mcp.json not found at ${mcpPath}`);
235
+ throw new Error(
236
+ `No active course in ${CONFIG_FILENAME2} and no .mcp.json at ${mcpPath}. Run \`launch-course\` or bootstrap with \`launch-kit init\`.`
237
+ );
157
238
  }
158
239
  const raw = JSON.parse((0, import_node_fs3.readFileSync)(mcpPath, "utf-8"));
159
240
  const entry = raw.mcpServers["launch-secure"];
160
241
  if (!entry?.url) {
161
- throw new Error('No "launch-secure" entry with url found in .mcp.json');
242
+ throw new Error(
243
+ `No active course in ${CONFIG_FILENAME2} and no "launch-secure" entry with url in .mcp.json`
244
+ );
162
245
  }
163
246
  _config = {
164
247
  url: entry.url,
@@ -273,6 +356,7 @@ var init_mcp_client = __esm({
273
356
  "use strict";
274
357
  import_node_fs3 = require("node:fs");
275
358
  import_node_path3 = require("node:path");
359
+ init_cred_shape();
276
360
  _config = null;
277
361
  _requestId = 0;
278
362
  _sessionId = null;
@@ -248,19 +248,98 @@ function saveCouncilConfig(rootDir, config) {
248
248
  // src/server/mcp-client.ts
249
249
  var import_node_fs3 = require("node:fs");
250
250
  var import_node_path3 = require("node:path");
251
+
252
+ // src/server/cred-shape.ts
253
+ var fs = __toESM(require("node:fs"));
254
+ var path = __toESM(require("node:path"));
255
+ var CONFIG_FILENAME2 = ".launch-secure.cred.config";
256
+ function inferCourseName(serverUrl) {
257
+ try {
258
+ const host = new URL(serverUrl).hostname.toLowerCase();
259
+ if (host === "localhost" || host === "127.0.0.1" || host.endsWith(".local")) return "local";
260
+ if (host.includes("staging")) return "staging";
261
+ if (host.endsWith(".vercel.app")) return "prod";
262
+ return host.split(".")[0] || "default";
263
+ } catch {
264
+ return "default";
265
+ }
266
+ }
267
+ function toNested(cred) {
268
+ if (cred.profiles && cred.active && cred.profiles[cred.active]) {
269
+ return { active: cred.active, profiles: cred.profiles };
270
+ }
271
+ if (!cred.pat || !cred.orgSlug || !cred.projectSlug || !cred.serverUrl) {
272
+ return null;
273
+ }
274
+ const name = inferCourseName(cred.serverUrl);
275
+ return {
276
+ active: name,
277
+ profiles: {
278
+ [name]: {
279
+ pat: cred.pat,
280
+ orgSlug: cred.orgSlug,
281
+ projectSlug: cred.projectSlug,
282
+ serverUrl: cred.serverUrl
283
+ }
284
+ }
285
+ };
286
+ }
287
+ function readCredFile(repoRoot) {
288
+ const p = path.join(repoRoot, CONFIG_FILENAME2);
289
+ if (!fs.existsSync(p)) return null;
290
+ try {
291
+ return JSON.parse(fs.readFileSync(p, "utf-8"));
292
+ } catch (err) {
293
+ throw new Error(`could not parse ${CONFIG_FILENAME2}: ${err instanceof Error ? err.message : String(err)}`);
294
+ }
295
+ }
296
+
297
+ // src/server/mcp-client.ts
251
298
  var _config = null;
252
299
  var _requestId = 0;
253
300
  var _sessionId = null;
301
+ function mcpConfigFromCourse(projectRoot) {
302
+ let cred;
303
+ try {
304
+ cred = readCredFile(projectRoot);
305
+ } catch {
306
+ return null;
307
+ }
308
+ if (!cred) return null;
309
+ const nested = toNested(cred);
310
+ if (!nested) return null;
311
+ const profile = nested.profiles[nested.active];
312
+ if (!profile?.pat || !profile.serverUrl || !profile.orgSlug || !profile.projectSlug) {
313
+ return null;
314
+ }
315
+ return {
316
+ url: new URL("/api/mcp/project", profile.serverUrl).toString(),
317
+ headers: {
318
+ Authorization: `Bearer ${profile.pat}`,
319
+ "X-Org-Slug": profile.orgSlug,
320
+ "X-Project-Slug": profile.projectSlug
321
+ }
322
+ };
323
+ }
254
324
  function loadMcpConfig(projectRoot) {
255
325
  if (_config) return _config;
326
+ const fromCourse = mcpConfigFromCourse(projectRoot);
327
+ if (fromCourse) {
328
+ _config = fromCourse;
329
+ return _config;
330
+ }
256
331
  const mcpPath = (0, import_node_path3.join)(projectRoot, ".mcp.json");
257
332
  if (!(0, import_node_fs3.existsSync)(mcpPath)) {
258
- throw new Error(`.mcp.json not found at ${mcpPath}`);
333
+ throw new Error(
334
+ `No active course in ${CONFIG_FILENAME2} and no .mcp.json at ${mcpPath}. Run \`launch-course\` or bootstrap with \`launch-kit init\`.`
335
+ );
259
336
  }
260
337
  const raw = JSON.parse((0, import_node_fs3.readFileSync)(mcpPath, "utf-8"));
261
338
  const entry = raw.mcpServers["launch-secure"];
262
339
  if (!entry?.url) {
263
- throw new Error('No "launch-secure" entry with url found in .mcp.json');
340
+ throw new Error(
341
+ `No active course in ${CONFIG_FILENAME2} and no "launch-secure" entry with url in .mcp.json`
342
+ );
264
343
  }
265
344
  _config = {
266
345
  url: entry.url,