@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.
- package/dist/chart-client/assets/index-DJrjyXbN.css +1 -0
- package/dist/chart-client/index.html +2 -2
- package/dist/client/assets/index-8eSXr3Ez.css +32 -0
- package/dist/client/index.html +2 -2
- package/dist/council-client/assets/index-4K0t2WrZ.css +1 -0
- package/dist/council-client/index.html +2 -2
- package/dist/deck-client/assets/{_baseUniq-BiVx0WO_.js → _baseUniq-Cn5TyL9s.js} +1 -1
- package/dist/deck-client/assets/{arc-DGMkiEzS.js → arc-D61amKYu.js} +1 -1
- package/dist/deck-client/assets/{architectureDiagram-Q4EWVU46-Y2WRmHtk.js → architectureDiagram-Q4EWVU46-CpKrvC2W.js} +1 -1
- package/dist/deck-client/assets/{blockDiagram-DXYQGD6D-_Lbfu5BQ.js → blockDiagram-DXYQGD6D-Yj5OjxvG.js} +1 -1
- package/dist/deck-client/assets/{c4Diagram-AHTNJAMY-CTqpYTBX.js → c4Diagram-AHTNJAMY-BIR810Tv.js} +1 -1
- package/dist/deck-client/assets/channel-DrJz2x-n.js +1 -0
- package/dist/deck-client/assets/{chunk-4BX2VUAB-liEIbPHs.js → chunk-4BX2VUAB-BeSHwGvx.js} +1 -1
- package/dist/deck-client/assets/{chunk-4TB4RGXK-CCc6lYvL.js → chunk-4TB4RGXK-CCqzsLpg.js} +1 -1
- package/dist/deck-client/assets/{chunk-55IACEB6-D02jJUR2.js → chunk-55IACEB6-CuW_aq4-.js} +1 -1
- package/dist/deck-client/assets/{chunk-EDXVE4YY-BFmGMbLD.js → chunk-EDXVE4YY-Dl35ixYh.js} +1 -1
- package/dist/deck-client/assets/{chunk-FMBD7UC4-6wFLOVcJ.js → chunk-FMBD7UC4-TwreZQTv.js} +1 -1
- package/dist/deck-client/assets/{chunk-OYMX7WX6-Bnr8RiBf.js → chunk-OYMX7WX6-Ahfw8EUo.js} +1 -1
- package/dist/deck-client/assets/{chunk-QZHKN3VN-Ct82MksJ.js → chunk-QZHKN3VN-DlE_zlU-.js} +1 -1
- package/dist/deck-client/assets/{chunk-YZCP3GAM-BXmN1diQ.js → chunk-YZCP3GAM-Dj6QWzSg.js} +1 -1
- package/dist/deck-client/assets/classDiagram-6PBFFD2Q-a3tg9w7z.js +1 -0
- package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-a3tg9w7z.js +1 -0
- package/dist/deck-client/assets/clone-Dd7JBCL5.js +1 -0
- package/dist/deck-client/assets/{cose-bilkent-S5V4N54A-CmQCT-mH.js → cose-bilkent-S5V4N54A-BO1z5aOM.js} +1 -1
- package/dist/deck-client/assets/{dagre-KV5264BT-DDdSa9EX.js → dagre-KV5264BT-DVsw17fE.js} +1 -1
- package/dist/deck-client/assets/{diagram-5BDNPKRD-Bccks2xJ.js → diagram-5BDNPKRD-6jYs7oZk.js} +1 -1
- package/dist/deck-client/assets/{diagram-G4DWMVQ6-CPPNgxmQ.js → diagram-G4DWMVQ6-6DbggeGE.js} +1 -1
- package/dist/deck-client/assets/{diagram-MMDJMWI5-KrD300pS.js → diagram-MMDJMWI5-CQtk1cSU.js} +1 -1
- package/dist/deck-client/assets/{diagram-TYMM5635-DefnLuQf.js → diagram-TYMM5635-BR-gt75b.js} +1 -1
- package/dist/deck-client/assets/{erDiagram-SMLLAGMA-DI9FfnFP.js → erDiagram-SMLLAGMA-C9qMtjdY.js} +1 -1
- package/dist/deck-client/assets/{flowDiagram-DWJPFMVM-twKyd3Fx.js → flowDiagram-DWJPFMVM-CdaPhPYb.js} +1 -1
- package/dist/deck-client/assets/{ganttDiagram-T4ZO3ILL-Wau3jhBr.js → ganttDiagram-T4ZO3ILL-BRsZWUy4.js} +1 -1
- package/dist/deck-client/assets/{gitGraphDiagram-UUTBAWPF-D9GgYXwb.js → gitGraphDiagram-UUTBAWPF-B8Z90jCj.js} +1 -1
- package/dist/deck-client/assets/{graph-BhNLzyXS.js → graph-my2Zphm4.js} +1 -1
- package/dist/deck-client/assets/index-ByqxPEgU.css +1 -0
- package/dist/deck-client/assets/{index-BtQBaQ7s.js → index-DqAoYZwV.js} +43 -42
- package/dist/deck-client/assets/{infoDiagram-42DDH7IO-TylGlSG-.js → infoDiagram-42DDH7IO-Csr9loin.js} +1 -1
- package/dist/deck-client/assets/{ishikawaDiagram-UXIWVN3A-DAT8icpg.js → ishikawaDiagram-UXIWVN3A-HWdvUNFi.js} +1 -1
- package/dist/deck-client/assets/{journeyDiagram-VCZTEJTY-D3v_XL72.js → journeyDiagram-VCZTEJTY-CjYHG6EM.js} +1 -1
- package/dist/deck-client/assets/{kanban-definition-6JOO6SKY-DNUOBiNr.js → kanban-definition-6JOO6SKY-CX3JdUu7.js} +1 -1
- package/dist/deck-client/assets/{layout-COfodgwF.js → layout-Bcucv5Gi.js} +1 -1
- package/dist/deck-client/assets/{linear-DmTsuIvK.js → linear-CUGM5FJZ.js} +1 -1
- package/dist/deck-client/assets/{min-BW1F7i1D.js → min-Dw4g5w9z.js} +1 -1
- package/dist/deck-client/assets/{mindmap-definition-QFDTVHPH-CErFzKWl.js → mindmap-definition-QFDTVHPH-C8oo61fg.js} +1 -1
- package/dist/deck-client/assets/{pieDiagram-DEJITSTG-DW5F757o.js → pieDiagram-DEJITSTG-D2WYGkq8.js} +1 -1
- package/dist/deck-client/assets/{quadrantDiagram-34T5L4WZ-B1S2-TfI.js → quadrantDiagram-34T5L4WZ-Vh00GISt.js} +1 -1
- package/dist/deck-client/assets/{requirementDiagram-MS252O5E-BY5BAR-5.js → requirementDiagram-MS252O5E-DxI-DFrN.js} +1 -1
- package/dist/deck-client/assets/{sankeyDiagram-XADWPNL6-CE1Cp9HS.js → sankeyDiagram-XADWPNL6-QgwyjasI.js} +1 -1
- package/dist/deck-client/assets/{sequenceDiagram-FGHM5R23-IaHnbKye.js → sequenceDiagram-FGHM5R23-DmOmD5Ni.js} +1 -1
- package/dist/deck-client/assets/{stateDiagram-FHFEXIEX-CwPJm9hU.js → stateDiagram-FHFEXIEX-CRwglGg_.js} +1 -1
- package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-BvZLEWAA.js +1 -0
- package/dist/deck-client/assets/{timeline-definition-GMOUNBTQ-DVFGGSgN.js → timeline-definition-GMOUNBTQ-Dj9YGKOh.js} +1 -1
- package/dist/deck-client/assets/{vennDiagram-DHZGUBPP-C1194MJi.js → vennDiagram-DHZGUBPP-xzIaOzEU.js} +1 -1
- package/dist/deck-client/assets/wardley-RL74JXVD-CEAay09T.js +162 -0
- package/dist/deck-client/assets/{wardleyDiagram-NUSXRM2D-hpwdFfGj.js → wardleyDiagram-NUSXRM2D-BIYYh-JZ.js} +1 -1
- package/dist/deck-client/assets/{xychartDiagram-5P7HB3ND-DYkotwy8.js → xychartDiagram-5P7HB3ND-Cy9EoJCh.js} +1 -1
- package/dist/deck-client/index.html +2 -2
- package/dist/server/cli.js +261 -26
- package/dist/server/council-entry.js +86 -2
- package/dist/server/council-serve.js +81 -2
- package/dist/server/deck-mcp-entry.js +449 -68
- package/dist/server/deck-serve.js +411 -42
- package/dist/server/init-entry.js +732 -237
- package/dist/server/orbit-entry.js +880 -144
- package/dist/server/radar-docker-init-entry.js +371 -37
- package/dist/server/rover-entry.js +108 -20
- package/package.json +1 -1
- package/scaffolds/ls-marketplace/plugins/kit/skills/deploy-check/SKILL.md +5 -0
- package/scaffolds/ls-marketplace/plugins/kit/skills/kickoff/SKILL.md +20 -4
- package/scaffolds/ls-marketplace/plugins/kit/skills/orbit/SKILL.md +27 -7
- package/dist/chart-client/assets/index-DpKO9p0s.css +0 -1
- package/dist/client/assets/index-Dv6dD2zY.css +0 -32
- package/dist/council-client/assets/index-AqQ9Sei6.css +0 -1
- package/dist/deck-client/assets/channel-DB6LxW_l.js +0 -1
- package/dist/deck-client/assets/classDiagram-6PBFFD2Q-g944ZyG8.js +0 -1
- package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-g944ZyG8.js +0 -1
- package/dist/deck-client/assets/clone-DiIRH1pI.js +0 -1
- package/dist/deck-client/assets/index-B-YQq5b5.css +0 -1
- package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-DQYa2M1q.js +0 -1
- package/dist/deck-client/assets/wardley-RL74JXVD-CHZiUbBa.js +0 -162
- /package/dist/chart-client/assets/{index-DFu2xIrM.js → index-BgUxHxwE.js} +0 -0
- /package/dist/client/assets/{index-Cbw6bVdx.js → index-CUivaQnN.js} +0 -0
- /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(
|
|
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(
|
|
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(
|
|
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(
|
|
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,
|