@kb-labs/scaffold 2.119.0-canary.e120bc0ee → 2.119.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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","file":"doctor.js","sourcesContent":["import { resolve } from 'node:path';\nimport { defineCommand, handleError, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { scanRoot, type Finding } from '@kb-labs/scaffold-core';\n\ninterface DoctorFlags {\n path?: string;\n json?: boolean;\n}\n\ntype DoctorResult = { packagesScanned: number; findings: Finding[] };\n\nexport default defineCommand({\n id: 'scaffold:doctor',\n description: 'Scan user-authored plugins for common issues',\n\n handler: {\n async execute(\n ctx: PluginContextV3,\n input: DoctorFlags,\n ): Promise<CommandResult<DoctorResult>> {\n const root = resolve(input.path ?? '.kb/plugins');\n const workspaceRoot = ctx.cwd ?? process.cwd();\n let scan: Awaited<ReturnType<typeof scanRoot>>;\n try {\n scan = await scanRoot(root, { workspaceRoot });\n } catch (err) {\n handleError(ctx, err, input.json);\n return { ok: false, error: err instanceof Error ? err.message : String(err) };\n }\n\n const { errorCount, warnCount } = scan.findings.reduce(\n (acc, f) => {\n if (f.severity === 'error') { acc.errorCount++; }\n else if (f.severity === 'warn') { acc.warnCount++; }\n return acc;\n },\n { errorCount: 0, warnCount: 0 },\n );\n const hasErrors = errorCount > 0;\n\n if (input.json) {\n ctx.ui?.json?.({\n root,\n packagesScanned: scan.packagesScanned,\n findings: scan.findings,\n });\n } else if (scan.findings.length === 0) {\n ctx.ui?.success?.(`Scanned ${scan.packagesScanned} package(s) — no issues found.`, {\n title: 'scaffold doctor',\n sections: [\n { items: [`Path: ${root}`] },\n ],\n });\n } else {\n const byPkg = new Map<string, Finding[]>();\n for (const f of scan.findings) {\n const list = byPkg.get(f.package) ?? [];\n list.push(f);\n byPkg.set(f.package, list);\n }\n\n const sections = Array.from(byPkg.entries()).map(([pkg, findings]) => ({\n header: pkg,\n items: findings.map((f) => `${f.severity.toUpperCase()} ${f.message}`),\n }));\n\n if (hasErrors) {\n ctx.ui?.error?.(`Found ${errorCount} error(s), ${warnCount} warning(s) in ${scan.packagesScanned} package(s).`, {\n title: 'scaffold doctor',\n sections,\n });\n } else {\n ctx.ui?.warn?.(`Found ${warnCount} warning(s) in ${scan.packagesScanned} package(s).`, {\n title: 'scaffold doctor',\n sections,\n });\n }\n }\n\n return hasErrors ? {\n ok: false,\n error: `${errorCount} error(s) found`,\n result: {\n packagesScanned: scan.packagesScanned,\n findings: scan.findings,\n },\n } : {\n ok: true,\n result: {\n packagesScanned: scan.packagesScanned,\n findings: scan.findings,\n },\n };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../home/runner/work/kb-labs/kb-labs/plugins/scaffold/entry/src/commands/doctor.ts"],"names":[],"mappings":"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","file":"doctor.js","sourcesContent":["import { resolve } from 'node:path';\nimport { defineCommand, handleError, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { scanRoot, type Finding } from '@kb-labs/scaffold-core';\n\ninterface DoctorFlags {\n path?: string;\n json?: boolean;\n}\n\ntype DoctorResult = { packagesScanned: number; findings: Finding[] };\n\nexport default defineCommand({\n id: 'scaffold:doctor',\n description: 'Scan user-authored plugins for common issues',\n\n handler: {\n async execute(\n ctx: PluginContextV3,\n input: DoctorFlags,\n ): Promise<CommandResult<DoctorResult>> {\n const root = resolve(input.path ?? '.kb/plugins');\n const workspaceRoot = ctx.cwd ?? process.cwd();\n let scan: Awaited<ReturnType<typeof scanRoot>>;\n try {\n scan = await scanRoot(root, { workspaceRoot });\n } catch (err) {\n handleError(ctx, err, input.json);\n return { ok: false, error: err instanceof Error ? err.message : String(err) };\n }\n\n const { errorCount, warnCount } = scan.findings.reduce(\n (acc, f) => {\n if (f.severity === 'error') { acc.errorCount++; }\n else if (f.severity === 'warn') { acc.warnCount++; }\n return acc;\n },\n { errorCount: 0, warnCount: 0 },\n );\n const hasErrors = errorCount > 0;\n\n if (input.json) {\n ctx.ui?.json?.({\n root,\n packagesScanned: scan.packagesScanned,\n findings: scan.findings,\n });\n } else if (scan.findings.length === 0) {\n ctx.ui?.success?.(`Scanned ${scan.packagesScanned} package(s) — no issues found.`, {\n title: 'scaffold doctor',\n sections: [\n { items: [`Path: ${root}`] },\n ],\n });\n } else {\n const byPkg = new Map<string, Finding[]>();\n for (const f of scan.findings) {\n const list = byPkg.get(f.package) ?? [];\n list.push(f);\n byPkg.set(f.package, list);\n }\n\n const sections = Array.from(byPkg.entries()).map(([pkg, findings]) => ({\n header: pkg,\n items: findings.map((f) => `${f.severity.toUpperCase()} ${f.message}`),\n }));\n\n if (hasErrors) {\n ctx.ui?.error?.(`Found ${errorCount} error(s), ${warnCount} warning(s) in ${scan.packagesScanned} package(s).`, {\n title: 'scaffold doctor',\n sections,\n });\n } else {\n ctx.ui?.warn?.(`Found ${warnCount} warning(s) in ${scan.packagesScanned} package(s).`, {\n title: 'scaffold doctor',\n sections,\n });\n }\n }\n\n return hasErrors ? {\n ok: false,\n error: `${errorCount} error(s) found`,\n result: {\n packagesScanned: scan.packagesScanned,\n findings: scan.findings,\n },\n } : {\n ok: true,\n result: {\n packagesScanned: scan.packagesScanned,\n findings: scan.findings,\n },\n };\n },\n },\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/scaffold.ts"],"names":["current"],"mappings":";;;;;;;;;;;AA8BA,IAAM,IAAA,GAAO,OAAA,CAAQ,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AACnD,IAAM,cAAA,GAAiB,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAM,MAAM,WAAW,CAAA;AAE5D,IAAM,cAAA,GAAiB;AAAA,EACrB,EAAE,IAAA,EAAM,OAAA,EAAS,WAAA,EAAa,yBAAA,EAA0B;AAAA,EACxD,EAAE,IAAA,EAAM,QAAA,EAAU,WAAA,EAAa,sCAAA,EAAuC;AAAA,EACtE,EAAE,IAAA,EAAM,KAAA,EAAO,WAAA,EAAa,yBAAA,EAA0B;AAAA,EACtD,EAAE,IAAA,EAAM,OAAA,EAAS,WAAA,EAAa,qCAAA,EAAsC;AAAA,EACpE,EAAE,IAAA,EAAM,SAAA,EAAW,WAAA,EAAa,+BAAA;AAClC,CAAA;AAaA,eAAe,YAAY,OAAA,EAAkC;AAC3D,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,OAAA,EAAS,MAAM,CAAA;AAC1C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7B,IAAA,OAAO,OAAO,OAAA,IAAW,OAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAEA,IAAM,iBAAA,GAAoB;AAAA,EACxB,GAAA,EAAK,QAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,UAAA,EAAY;AACd,CAAA;AAEA,IAAM,gCAAA,GAAmC;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAazC,SAAS,kCAAkC,KAAA,EAAwD;AACjG,EAAA,MAAM,YAAY,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,qBAAqB,CAAA;AAC1E,EAAA,IAAI,aAAa,CAAC,SAAA,CAAU,QAAA,CAAS,QAAA,CAAS,gBAAgB,CAAA,EAAG;AAC/D,IAAA,SAAA,CAAU,QAAA,IAAY,gCAAA;AAAA,EACxB;AACF;AAEA,eAAe,cAAA,GAAkD;AAC/D,EAAA,MAAM,GAAA,GAAM,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACzC,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAc,QAAA,KAAsC;AACzE,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AACjC,MAAA,MAAM,CAAA,GAAI,MAAM,WAAA,CAAY,QAAQ,CAAA;AACpC,MAAA,OAAO,CAAA,KAAM,UAAU,QAAA,GAAW,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF,CAAA;AACA,EAAA,MAAM,CAAC,GAAA,EAAK,MAAA,EAAQ,UAAU,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IAClD,OAAA,CAAQ,2BAAA,EAA6B,iBAAA,CAAkB,GAAG,CAAA;AAAA,IAC1D,OAAA,CAAQ,8BAAA,EAAgC,iBAAA,CAAkB,MAAM,CAAA;AAAA,IAChE,OAAA,CAAQ,0CAAA,EAA4C,iBAAA,CAAkB,UAAU;AAAA,GACjF,CAAA;AAID,EAAA,MAAM,QAAA,GAAW,QAAQ,GAAA,CAAI,qBAAA;AAC7B,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAI,QAAA,GACA;AAAA,MACE,OAAA,EAAS,QAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB;AAAA,QAElB;AAAC,GACP;AACF;AAEA,SAAS,gBAAgB,IAAA,EAGvB;AACA,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAAE,IAAA,OAAO,EAAC;AAAA,EAAG;AAC7C,EAAA,MAAM,UAAA,GAAa,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AACxD,EAAA,OAAO,EAAE,QAAQ,UAAA,CAAW,CAAC,GAAG,IAAA,EAAM,UAAA,CAAW,CAAC,CAAA,EAAE;AACtD;AAEA,eAAe,UAAA,CACb,KACA,QAAA,EACwC;AACxC,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,EAAA,MAAM,QAAQ,EAAE,GAAG,SAAS,KAAA,EAAO,IAAA,EAAM,SAAS,IAAA,EAAK;AAEvD,EAAA,MAAM,EAAE,QAAQ,SAAA,EAAW,IAAA,EAAM,SAAQ,GAAI,eAAA,CAAgB,MAAM,IAAI,CAAA;AAEvE,EAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,cAAc,CAAA;AACnD,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,eAAA,CAAgB,KAAK,2DAA2D,CAAA;AAChF,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,6BAAA,EAA8B;AAAA,EAC3D;AAEA,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,iBAAA,CAAkB;AAAA,MAChC,KAAA,EAAO,iBAAA;AAAA,MACP,WAAA,EAAa,kEAAA;AAAA,MACb,QAAA,EAAU,UAAU,GAAA,CAAI,CAAC,MAAM,CAAA,gBAAA,EAAmB,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAA;AAAA,MAC7D,KAAA,EAAO;AAAA,KACR,IAAI,IAAI,CAAA;AACT,IAAA,GAAA,CAAI,IAAI,IAAA,GAAO,CAAA,oBAAA,EAAuB,UAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC5D,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAA,CAAA,EAAI;AAAA,EAC7D;AAEA,EAAA,IAAI,CAAC,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA,EAAG;AAClC,IAAA,eAAA,CAAgB,GAAA,EAAK,mBAAmB,SAAS,CAAA,cAAA,EAAiB,UAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACxF,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,4BAAA,EAA6B;AAAA,EAC1D;AAEA,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,iBAAA,CAAkB;AAAA,MAChC,KAAA,EAAO,mBAAmB,SAAS,CAAA,OAAA,CAAA;AAAA,MACnC,WAAA,EAAa,kBAAkB,SAAS,CAAA,6BAAA,CAAA;AAAA,MACxC,UAAU,CAAC,CAAA,gBAAA,EAAmB,SAAS,CAAA,IAAA,EAAO,SAAS,CAAA,CAAE,CAAA;AAAA,MACzD,KAAA,EAAO;AAAA,KACR,IAAI,IAAI,CAAA;AACT,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,4BAAA,EAA6B;AAAA,EAC1D;AAEA,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,SAAA,EAAW,OAAO,CAAA;AAC/C,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,eAAA,CAAgB,KAAK,CAAA,cAAA,EAAiB,OAAO,CAAA,GAAA,EAAM,OAAO,IAAI,4DAA4D,CAAA;AAC1H,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,iBAAiB,OAAO,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,EAAG;AAAA,EACrE;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,cAAA,EAAgB,SAAS,CAAA;AAEzD,EAAA,MAAM,OAAgC,EAAC;AACvC,EAAA,KAAA,MAAW,CAAA,IAAK,OAAO,SAAA,EAAW;AAChC,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,KAAA,CAAM,UAAU,MAAA,EAAW;AACnD,MAAA,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,GAAI,KAAA,CAAM,KAAA;AAAA,IACvB,WAAW,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,SAAS,MAAA,EAAW;AACxD,MAAA,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,GAAI,KAAA,CAAM,IAAA;AAAA,IACvB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,GAAI,CAAA,CAAE,OAAA,IAAW,EAAA;AAAA,IAC9B;AAAA,EACF;AAEA,EAAA,IAAI,cAAA;AACJ,EAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,IAAA,cAAA,GAAiB,KAAA,CAAM,MAAA,CACpB,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,OAAO,OAAO,CAAA;AAAA,EACnB,CAAA,MAAO;AACL,IAAA,cAAA,GAAiB,MAAA,CAAO,UAAU,MAAA,IAAU,MAAA,CAAO,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA;AAAA,EAC3E;AAEA,EAAA,IAAI;AACF,IAAA,aAAA,CAAc,MAAA,CAAO,QAAQ,cAAc,CAAA;AAAA,EAC7C,SAAS,CAAA,EAAG;AACV,IAAA,WAAA,CAAY,KAAK,CAAC,CAAA;AAClB,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,CAAA,YAAa,QAAQ,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAA,EAAE;AAAA,EACxE;AAEA,EAAA,KAAA,MAAW,WAAW,cAAA,EAAgB;AACpC,IAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AACxD,IAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,SAAA,IAAa,EAAC,EAAG;AACtC,MAAA,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,GAAI,CAAA,CAAE,OAAA,IAAW,EAAA;AAAA,IAC9B;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAS,IAAA,CAAK,KAAA,IAAoB,KAAA,CAAM,KAAA,IAAS,EAAA;AACvD,EAAA,MAAM,IAAA,GAAQ,KAAA,CAAM,IAAA,IAAS,IAAA,CAAK,IAAA,IAAmB,cAAA;AAIrD,EAAA,MAAM,QAAA,GAAW,MAAM,cAAA,EAAe;AAEtC,EAAA,MAAM,OAAA,GAAyB;AAAA,IAC7B,IAAA,EAAM,OAAA;AAAA,IACN,KAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA,EAAQ,cAAA;AAAA,IACR,IAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM;AAAA,IACzB,MAAA;AAAA,IACA,gBAAA,EAAkB,cAAA;AAAA,IAClB;AAAA,GACD,CAAA;AAED,EAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,IAAA,iCAAA,CAAkC,OAAO,KAAK,CAAA;AAAA,EAChD;AAEA,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,IAAO,MAAA,CAAO,OAAA;AACpC,EAAA,MAAM,KAAA,GAAQ,MAAM,aAAA,CAAc,OAAO,CAAA;AAEzC,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,GAAA,CAAI,EAAA,EAAI,UAAU,kBAAA,EAAoB;AAAA,MACpC,KAAA,EAAO,6BAAA;AAAA,MACP,QAAA,EAAU;AAAA,QACR,EAAE,MAAA,EAAQ,gBAAA,EAAkB,KAAA,EAAO,CAAC,OAAO,CAAA,EAAE;AAAA,QAC7C,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,UAAA,CAAW,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAE;AACjF,KACD,CAAA;AACD,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,EAAE,SAAS,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,MAAA,EAAO,EAAE;AAAA,EACrE;AAEA,EAAA,IAAI,KAAA,CAAM,MAAA,IAAU,CAAC,KAAA,CAAM,KAAA,EAAO;AAChC,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAE,CAAA;AAAA,IAClD,CAAA,MAAO;AACL,MAAA,eAAA,CAAgB,GAAA,EAAK,CAAA,kBAAA,EAAqB,OAAO,CAAA,kCAAA,CAAA,EAAsC,2BAA2B,CAAA;AAClH,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,CAAA,kBAAA,EAAqB,OAAO,CAAA,iCAAA,CAAA,EAAoC;AAAA,IAC7F;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,CAAW,EAAE,OAAA,EAAS,KAAA,EAAO,OAAO,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,CAAA;AAErE,EAAA,MAAM,cACJ,SAAA,KAAc,QAAA,GACV,GAAG,OAAO,CAAA,UAAA,EAAa,OAAO,CAAA,MAAA,CAAA,GAC9B,OAAA;AAEN,EAAA,MAAM,mBAAA,CAAoB,WAAA,EAAa,GAAA,CAAI,GAAA,EAAK,OAAO,QAAQ,CAAA;AAE/D,EAAA,MAAM,gBAAA,GAAmB,oCAAA;AAEzB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAE5B,EAAA,GAAA,CAAI,IAAI,OAAA,GAAU,CAAA,WAAA,EAAc,SAAS,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,CAAA,EAAK;AAAA,IACxD,KAAA,EAAO,cAAA;AAAA,IACP,QAAA,EAAU;AAAA,MACR;AAAA,QACE,MAAA,EAAQ,QAAA;AAAA,QACR,KAAA,EAAO,CAAC,OAAO;AAAA,OACjB;AAAA,MACA;AAAA,QACE,MAAA,EAAQ,aAAA;AAAA,QACR,KAAA,EAAO,CAAC,gBAAgB;AAAA,OAC1B;AAAA,MACA;AAAA,QACE,MAAA,EAAQ,YAAA;AAAA,QACR,KAAA,EAAO;AAAA,UACL,MAAM,OAAO,CAAA,CAAA;AAAA,UACb,cAAA;AAAA,UACA,eAAA;AAAA,UACA,WAAW,OAAO,CAAA,iBAAA,CAAA;AAAA,UAClB,CAAA,+BAAA,EAAkC,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA;AACpD;AACF,KACF;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,EAAE,SAAS,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,MAAA,EAAO,EAAE;AACrE;AAQA,SAAS,qBAAA,CACP,aACA,OAAA,EACiB;AACjB,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,SAAS,YAAY,qBAAA,CAAsB,MAAM,OAAA,CAAQ,WAAW,GAAG,OAAO;AAAA,GAChF;AACF;AAEA,eAAe,0BAAA,GAA8D;AAC3E,EAAA,MAAM,QAAA,GAAW,IAAI,cAAA,EAAe;AACpC,EAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAMA,QAAAA,GAAU,SAAS,SAAA,CAAU,OAAO,IAAI,MAAM,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA,GAAI,OAAA;AAChF,IAAA,OAAO,sBAAsBA,QAAAA,EAAS,CAAC,UAAU,QAAA,CAAS,OAAA,CAAQ,KAA2B,CAAC,CAAA;AAAA,EAChG;AACA,EAAA,MAAM,OAAA,GAAU,IAAI,kBAAA,EAAmB;AACvC,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,IAAA,EAAK;AACvC,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,QAAQ,SAAA,CAAU,WAAW,IAAI,MAAM,OAAA,CAAQ,OAAA,CAAQ,WAAW,CAAA,GAAI,WAAA;AACtF,EAAA,OAAO,sBAAsB,OAAA,EAAS,CAAC,UAAU,OAAA,CAAQ,OAAA,CAAQ,KAA2B,CAAC,CAAA;AAC/F;AAGA,eAAe,mBAAA,CAAoB,WAAA,EAAqB,GAAA,EAAa,QAAA,EAAkD;AACrH,EAAA,MAAM,WAAA,GAAc,MAAM,qBAAA,CAAsB,GAAG,CAAA;AACnD,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gEAAA,EAAmE,GAAG,CAAA,CAAE,CAAA;AAAA,EAC1F;AAEA,EAAA,IAAI,IAAA,GAAO,MAAM,0BAAA,EAA2B;AAC5C,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,CAAA,EAAG,WAAW,CAAA,EAAG;AAC/C,IAAA,MAAM,cAAA,GAAiB,QAAQ,GAAA,CAAI,kBAAA;AACnC,IAAA,MAAM,aAAa,IAAA,EAAM,WAAA,CAAY,UAAA,IAAc,OAAA,CAAQ,IAAI,cAAA,IAAkB,uBAAA;AACjF,IAAA,MAAM,QAAA,GAAW,cAAA,GACb,CAAA,EAAG,cAAA,CAAe,QAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,iCAAA,CAAA,GACrC,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,iCAAA,CAAA;AACrC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,QAAA,EAAU;AAAA,MACrC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAI,IAAA,GAAO,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,KAAK,WAAA,CAAY,WAAW,CAAA,CAAA,EAAG,GAAI;AAAC,OAC5E;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,OAAA,CAAQ,WAAW,CAAA,EAAG,KAAA,EAAO,SAAA,EAAW,WAAA,EAAa,QAAA,EAAU;AAAA,KAC7F,CAAA;AACD,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,GAAA,IAAO,IAAA,IAAQ,YAAY,CAAA,EAAG;AACpD,MAAA,IAAA,GAAO,MAAM,KAAK,OAAA,EAAQ;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,EAAK;AACnC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,SAAS,MAAM,CAAA,GAAA,EAAM,MAAM,CAAA,CAAE,CAAA;AAAA,IACnF;AACA,IAAA;AAAA,EACF;AACA,EAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AACnF;AAEA,IAAO,mBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,cAAA;AAAA,EACJ,WAAA,EAAa,sCAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,OAAA,EAAS;AAAA;AAEb,CAAC","file":"scaffold.js","sourcesContent":["import { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createRequire } from 'node:module';\nimport { readFile } from 'node:fs/promises';\nimport {\n defineCommand,\n validationError,\n handleError,\n type CommandResult,\n type PluginContextV3,\n type CLIInput,\n} from '@kb-labs/sdk';\nimport {\n build,\n inspectTarget,\n formatTree,\n listEntities,\n loadEntity,\n resolveBlocks,\n runValidator,\n writeFiles,\n} from '@kb-labs/scaffold-core';\nimport type {\n RenderContext,\n} from '@kb-labs/scaffold-contracts';\nimport { formatCommandHelp } from '@kb-labs/shared-cli-ui';\nimport { CredentialsManager, SessionManager } from '@kb-labs/cli-runtime/gateway';\nimport { findProjectConfigRoot } from '@kb-labs/core-workspace';\nimport type { GatewayCredentials, SessionCredentials } from '@kb-labs/cli-runtime/gateway';\n\nconst here = dirname(fileURLToPath(import.meta.url));\nconst TEMPLATES_ROOT = resolve(here, '..', '..', 'templates');\n\nconst SCAFFOLD_FLAGS = [\n { name: 'scope', description: 'npm scope, e.g. @my-org' },\n { name: 'blocks', description: 'comma-separated block ids to include' },\n { name: 'out', description: 'custom output directory' },\n { name: 'force', description: 'overwrite existing output directory' },\n { name: 'dry-run', description: 'preview files without writing' },\n];\n\ninterface ScaffoldFlags {\n blocks?: string;\n force?: boolean;\n 'dry-run'?: boolean;\n out?: string;\n scope?: string;\n mode?: string;\n}\n\ntype ScaffoldResult = { outRoot: string; files: number };\n\nasync function readVersion(pkgPath: string): Promise<string> {\n try {\n const raw = await readFile(pkgPath, 'utf8');\n const parsed = JSON.parse(raw) as { version?: string };\n return parsed.version ?? '0.0.0';\n } catch {\n return '0.0.0';\n }\n}\n\nconst FALLBACK_VERSIONS = {\n sdk: '2.18.0',\n devkit: '2.28.0',\n commandKit: '2.30.0',\n} as const;\n\nconst GENERATED_WORKSPACE_BUILD_POLICY = `\n\n# Required native builds for the generated plugin toolchain.\nstrictDepBuilds: false\nallowBuilds:\n '@kb-labs/devkit': true\n '@parcel/watcher': true\n '@swc/core': true\n better-sqlite3: true\n esbuild: true\n unrs-resolver: true\n`;\n\nfunction ensureWorkspaceBuildPolicyInFiles(files: Array<{ path: string; contents: string }>): void {\n const workspace = files.find((file) => file.path === 'pnpm-workspace.yaml');\n if (workspace && !workspace.contents.includes('\\nallowBuilds:')) {\n workspace.contents += GENERATED_WORKSPACE_BUILD_POLICY;\n }\n}\n\nasync function detectVersions(): Promise<Record<string, string>> {\n const req = createRequire(import.meta.url);\n const readPkg = async (spec: string, fallback: string): Promise<string> => {\n try {\n const resolved = req.resolve(spec);\n const v = await readVersion(resolved);\n return v === '0.0.0' ? fallback : v;\n } catch {\n return fallback;\n }\n };\n const [sdk, devkit, commandKit] = await Promise.all([\n readPkg('@kb-labs/sdk/package.json', FALLBACK_VERSIONS.sdk),\n readPkg('@kb-labs/devkit/package.json', FALLBACK_VERSIONS.devkit),\n readPkg('@kb-labs/shared-command-kit/package.json', FALLBACK_VERSIONS.commandKit),\n ]);\n // Release smoke tests install the candidate packages under a dist-tag. A\n // caret range would resolve the previous stable package instead, so carry\n // the channel through to generated manifests as a valid npm spec.\n const smokeTag = process.env.KB_CREATE_PACKAGE_TAG;\n return {\n sdk,\n devkit,\n commandKit,\n ...(smokeTag\n ? {\n sdkSpec: smokeTag,\n devkitSpec: smokeTag,\n commandKitSpec: smokeTag,\n }\n : {}),\n };\n}\n\nfunction parsePositional(argv: string[] | undefined): {\n entity?: string;\n name?: string;\n} {\n if (!argv || argv.length === 0) { return {}; }\n const positional = argv.filter((a) => !a.startsWith('-'));\n return { entity: positional[0], name: positional[1] };\n}\n\nasync function runDefault(\n ctx: PluginContextV3,\n rawInput: CLIInput<ScaffoldFlags>,\n): Promise<CommandResult<ScaffoldResult>> {\n const start = Date.now();\n const input = { ...rawInput.flags, argv: rawInput.argv };\n\n const { entity: entityArg, name: nameArg } = parsePositional(input.argv);\n\n const available = await listEntities(TEMPLATES_ROOT);\n if (available.length === 0) {\n validationError(ctx, 'No scaffold templates found. Reinstall @kb-labs/scaffold.');\n return { ok: false, error: 'No scaffold templates found' };\n }\n\n if (!entityArg) {\n ctx.ui?.write?.(formatCommandHelp({\n title: 'kb scaffold run',\n description: 'Scaffold a new plugin, adapter, or other entity from a template.',\n examples: available.map((e) => `kb scaffold run ${e} my-${e}`),\n flags: SCAFFOLD_FLAGS,\n }) + '\\n');\n ctx.ui?.info?.(`Available entities: ${available.join(', ')}`);\n return { ok: false, error: `Unknown entity \"${entityArg}\"` };\n }\n\n if (!available.includes(entityArg)) {\n validationError(ctx, `Unknown entity \"${entityArg}\". Available: ${available.join(', ')}`);\n return { ok: false, error: 'An entity name is required' };\n }\n\n if (!nameArg) {\n ctx.ui?.write?.(formatCommandHelp({\n title: `kb scaffold run ${entityArg} <name>`,\n description: `Scaffold a new ${entityArg}. Provide a name to continue.`,\n examples: [`kb scaffold run ${entityArg} my-${entityArg}`],\n flags: SCAFFOLD_FLAGS,\n }) + '\\n');\n return { ok: false, error: 'An entity name is required' };\n }\n\n const problem = runValidator('npmName', nameArg);\n if (problem) {\n validationError(ctx, `Invalid name \"${nameArg}\": ${problem}`, 'Name must be lowercase, no spaces, valid npm package name.');\n return { ok: false, error: `Invalid name \"${nameArg}\": ${problem}` };\n }\n\n const entity = await loadEntity(TEMPLATES_ROOT, entityArg);\n\n const vars: Record<string, unknown> = {};\n for (const v of entity.variables) {\n if (v.name === 'scope' && input.scope !== undefined) {\n vars[v.name] = input.scope;\n } else if (v.name === 'mode' && input.mode !== undefined) {\n vars[v.name] = input.mode;\n } else {\n vars[v.name] = v.default ?? '';\n }\n }\n\n let selectedBlocks: string[];\n if (input.blocks) {\n selectedBlocks = input.blocks\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n } else {\n selectedBlocks = entity.defaults?.blocks ?? entity.blocks.map((b) => b.id);\n }\n\n try {\n resolveBlocks(entity.blocks, selectedBlocks);\n } catch (e) {\n handleError(ctx, e);\n return { ok: false, error: e instanceof Error ? e.message : String(e) };\n }\n\n for (const blockId of selectedBlocks) {\n const block = entity.blocks.find((b) => b.id === blockId);\n for (const v of block?.variables ?? []) {\n vars[v.name] = v.default ?? '';\n }\n }\n\n const scope = (vars.scope as string) ?? input.scope ?? '';\n const mode = (input.mode ?? (vars.mode as string) ?? 'in-workspace') as\n | 'in-workspace'\n | 'standalone';\n\n const versions = await detectVersions();\n\n const context: RenderContext = {\n name: nameArg,\n scope,\n vars,\n blocks: selectedBlocks,\n mode,\n versions,\n };\n\n const result = await build({\n entity,\n selectedBlockIds: selectedBlocks,\n context,\n });\n\n if (entityArg === 'plugin') {\n ensureWorkspaceBuildPolicyInFiles(result.files);\n }\n\n const outRoot = input.out ?? result.outRoot;\n const state = await inspectTarget(outRoot);\n\n if (input['dry-run']) {\n ctx.ui?.success?.('Dry run complete', {\n title: 'scaffold run — dry run',\n sections: [\n { header: 'Would write to', items: [outRoot] },\n { header: 'Files', items: formatTree(result.files).split('\\n').filter(Boolean) },\n ],\n });\n return { ok: true, result: { outRoot, files: result.files.length } };\n }\n\n if (state.exists && !state.empty) {\n if (input.force) {\n ctx.ui?.warn?.(`--force: overwriting ${outRoot}`);\n } else {\n validationError(ctx, `Output directory \"${outRoot}\" already exists and is not empty.`, 'Use --force to overwrite.');\n return { ok: false, error: `Output directory \"${outRoot}\" already exists and is not empty` };\n }\n }\n\n await writeFiles({ outRoot, files: result.files, force: input.force });\n\n const entryPkgDir =\n entityArg === 'plugin'\n ? `${outRoot}/packages/${nameArg}-entry`\n : outRoot;\n\n await linkWithMarketplace(entryPkgDir, ctx.cwd, result.manifest);\n\n const registrationNote = 'Registered in .kb/marketplace.lock';\n\n const timing = Date.now() - start;\n\n ctx.ui?.success?.(`Scaffolded ${entityArg} \"${nameArg}\"`, {\n title: 'scaffold run',\n sections: [\n {\n header: 'Output',\n items: [outRoot],\n },\n {\n header: 'Marketplace',\n items: [registrationNote],\n },\n {\n header: 'Next steps',\n items: [\n `cd ${outRoot}`,\n 'pnpm install',\n 'pnpm -w build',\n `pnpm kb ${nameArg} hello # try it`,\n `pnpm kb scaffold doctor --path ${dirname(outRoot)}`,\n ],\n },\n ],\n timing,\n });\n\n return { ok: true, result: { outRoot, files: result.files.length } };\n}\n\ntype MarketplaceCredentials = GatewayCredentials | SessionCredentials;\ntype MarketplaceAuth = {\n credentials: MarketplaceCredentials;\n refresh: () => Promise<MarketplaceAuth>;\n};\n\nfunction createMarketplaceAuth(\n credentials: MarketplaceCredentials,\n refresh: (credentials: MarketplaceCredentials) => Promise<MarketplaceCredentials>,\n): MarketplaceAuth {\n return {\n credentials,\n refresh: async () => createMarketplaceAuth(await refresh(credentials), refresh),\n };\n}\n\nasync function loadMarketplaceCredentials(): Promise<MarketplaceAuth | null> {\n const sessions = new SessionManager();\n const session = await sessions.load();\n if (session) {\n const current = sessions.isExpired(session) ? await sessions.refresh(session) : session;\n return createMarketplaceAuth(current, (value) => sessions.refresh(value as SessionCredentials));\n }\n const manager = new CredentialsManager();\n const credentials = await manager.load();\n if (!credentials) {\n return null;\n }\n const current = manager.isExpired(credentials) ? await manager.refresh(credentials) : credentials;\n return createMarketplaceAuth(current, (value) => manager.refresh(value as GatewayCredentials));\n}\n\n/** Register through the canonical marketplace API; the daemon owns lock format and integrity. */\nasync function linkWithMarketplace(entryPkgDir: string, cwd: string, manifest: Record<string, unknown>): Promise<void> {\n const projectRoot = await findProjectConfigRoot(cwd);\n if (!projectRoot) {\n throw new Error(`Cannot register scaffolded plugin: no project config found from ${cwd}`);\n }\n\n let auth = await loadMarketplaceCredentials();\n for (let attempt = 0; attempt < 2; attempt += 1) {\n const marketplaceUrl = process.env.KB_MARKETPLACE_URL;\n const gatewayUrl = auth?.credentials.gatewayUrl ?? process.env.KB_GATEWAY_URL ?? 'http://127.0.0.1:4000';\n const endpoint = marketplaceUrl\n ? `${marketplaceUrl.replace(/\\/+$/, '')}/api/v1/marketplace/packages/link`\n : `${gatewayUrl.replace(/\\/+$/, '')}/api/v1/marketplace/packages/link`;\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(auth ? { Authorization: `Bearer ${auth.credentials.accessToken}` } : {}),\n },\n body: JSON.stringify({ path: resolve(entryPkgDir), scope: 'project', projectRoot, manifest }),\n });\n if (response.status === 401 && auth && attempt === 0) {\n auth = await auth.refresh();\n continue;\n }\n if (!response.ok) {\n const detail = await response.text();\n throw new Error(`Marketplace registration failed (${response.status}): ${detail}`);\n }\n return;\n }\n throw new Error('Marketplace registration failed after refreshing authentication');\n}\n\nexport default defineCommand({\n id: 'scaffold:run',\n description: 'Scaffold <entity> <name> from blocks',\n\n handler: {\n execute: runDefault,\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../home/runner/work/kb-labs/kb-labs/plugins/scaffold/entry/src/commands/scaffold.ts"],"names":["current"],"mappings":"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","file":"scaffold.js","sourcesContent":["import { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createRequire } from 'node:module';\nimport { readFile } from 'node:fs/promises';\nimport {\n defineCommand,\n validationError,\n handleError,\n type CommandResult,\n type PluginContextV3,\n type CLIInput,\n} from '@kb-labs/sdk';\nimport {\n build,\n inspectTarget,\n formatTree,\n listEntities,\n loadEntity,\n resolveBlocks,\n runValidator,\n writeFiles,\n} from '@kb-labs/scaffold-core';\nimport type {\n RenderContext,\n} from '@kb-labs/scaffold-contracts';\nimport { formatCommandHelp } from '@kb-labs/shared-cli-ui';\nimport { CredentialsManager, SessionManager } from '@kb-labs/cli-runtime/gateway';\nimport { findProjectConfigRoot } from '@kb-labs/core-workspace';\nimport type { GatewayCredentials, SessionCredentials } from '@kb-labs/cli-runtime/gateway';\n\nconst here = dirname(fileURLToPath(import.meta.url));\nconst TEMPLATES_ROOT = resolve(here, '..', '..', 'templates');\n\nconst SCAFFOLD_FLAGS = [\n { name: 'scope', description: 'npm scope, e.g. @my-org' },\n { name: 'blocks', description: 'comma-separated block ids to include' },\n { name: 'out', description: 'custom output directory' },\n { name: 'force', description: 'overwrite existing output directory' },\n { name: 'dry-run', description: 'preview files without writing' },\n];\n\ninterface ScaffoldFlags {\n blocks?: string;\n force?: boolean;\n 'dry-run'?: boolean;\n out?: string;\n scope?: string;\n mode?: string;\n}\n\ntype ScaffoldResult = { outRoot: string; files: number };\n\nasync function readVersion(pkgPath: string): Promise<string> {\n try {\n const raw = await readFile(pkgPath, 'utf8');\n const parsed = JSON.parse(raw) as { version?: string };\n return parsed.version ?? '0.0.0';\n } catch {\n return '0.0.0';\n }\n}\n\nconst FALLBACK_VERSIONS = {\n sdk: '2.18.0',\n devkit: '2.28.0',\n commandKit: '2.30.0',\n} as const;\n\nconst GENERATED_WORKSPACE_BUILD_POLICY = `\n\n# Required native builds for the generated plugin toolchain.\nstrictDepBuilds: false\nallowBuilds:\n '@kb-labs/devkit': true\n '@parcel/watcher': true\n '@swc/core': true\n better-sqlite3: true\n esbuild: true\n unrs-resolver: true\n`;\n\nfunction ensureWorkspaceBuildPolicyInFiles(files: Array<{ path: string; contents: string }>): void {\n const workspace = files.find((file) => file.path === 'pnpm-workspace.yaml');\n if (workspace && !workspace.contents.includes('\\nallowBuilds:')) {\n workspace.contents += GENERATED_WORKSPACE_BUILD_POLICY;\n }\n}\n\nasync function detectVersions(): Promise<Record<string, string>> {\n const req = createRequire(import.meta.url);\n const readPkg = async (spec: string, fallback: string): Promise<string> => {\n try {\n const resolved = req.resolve(spec);\n const v = await readVersion(resolved);\n return v === '0.0.0' ? fallback : v;\n } catch {\n return fallback;\n }\n };\n const [sdk, devkit, commandKit] = await Promise.all([\n readPkg('@kb-labs/sdk/package.json', FALLBACK_VERSIONS.sdk),\n readPkg('@kb-labs/devkit/package.json', FALLBACK_VERSIONS.devkit),\n readPkg('@kb-labs/shared-command-kit/package.json', FALLBACK_VERSIONS.commandKit),\n ]);\n // Release smoke tests install the candidate packages under a dist-tag. A\n // caret range would resolve the previous stable package instead, so carry\n // the channel through to generated manifests as a valid npm spec.\n const smokeTag = process.env.KB_CREATE_PACKAGE_TAG;\n return {\n sdk,\n devkit,\n commandKit,\n ...(smokeTag\n ? {\n sdkSpec: smokeTag,\n devkitSpec: smokeTag,\n commandKitSpec: smokeTag,\n }\n : {}),\n };\n}\n\nfunction parsePositional(argv: string[] | undefined): {\n entity?: string;\n name?: string;\n} {\n if (!argv || argv.length === 0) { return {}; }\n const positional = argv.filter((a) => !a.startsWith('-'));\n return { entity: positional[0], name: positional[1] };\n}\n\nasync function runDefault(\n ctx: PluginContextV3,\n rawInput: CLIInput<ScaffoldFlags>,\n): Promise<CommandResult<ScaffoldResult>> {\n const start = Date.now();\n const input = { ...rawInput.flags, argv: rawInput.argv };\n\n const { entity: entityArg, name: nameArg } = parsePositional(input.argv);\n\n const available = await listEntities(TEMPLATES_ROOT);\n if (available.length === 0) {\n validationError(ctx, 'No scaffold templates found. Reinstall @kb-labs/scaffold.');\n return { ok: false, error: 'No scaffold templates found' };\n }\n\n if (!entityArg) {\n ctx.ui?.write?.(formatCommandHelp({\n title: 'kb scaffold run',\n description: 'Scaffold a new plugin, adapter, or other entity from a template.',\n examples: available.map((e) => `kb scaffold run ${e} my-${e}`),\n flags: SCAFFOLD_FLAGS,\n }) + '\\n');\n ctx.ui?.info?.(`Available entities: ${available.join(', ')}`);\n return { ok: false, error: `Unknown entity \"${entityArg}\"` };\n }\n\n if (!available.includes(entityArg)) {\n validationError(ctx, `Unknown entity \"${entityArg}\". Available: ${available.join(', ')}`);\n return { ok: false, error: 'An entity name is required' };\n }\n\n if (!nameArg) {\n ctx.ui?.write?.(formatCommandHelp({\n title: `kb scaffold run ${entityArg} <name>`,\n description: `Scaffold a new ${entityArg}. Provide a name to continue.`,\n examples: [`kb scaffold run ${entityArg} my-${entityArg}`],\n flags: SCAFFOLD_FLAGS,\n }) + '\\n');\n return { ok: false, error: 'An entity name is required' };\n }\n\n const problem = runValidator('npmName', nameArg);\n if (problem) {\n validationError(ctx, `Invalid name \"${nameArg}\": ${problem}`, 'Name must be lowercase, no spaces, valid npm package name.');\n return { ok: false, error: `Invalid name \"${nameArg}\": ${problem}` };\n }\n\n const entity = await loadEntity(TEMPLATES_ROOT, entityArg);\n\n const vars: Record<string, unknown> = {};\n for (const v of entity.variables) {\n if (v.name === 'scope' && input.scope !== undefined) {\n vars[v.name] = input.scope;\n } else if (v.name === 'mode' && input.mode !== undefined) {\n vars[v.name] = input.mode;\n } else {\n vars[v.name] = v.default ?? '';\n }\n }\n\n let selectedBlocks: string[];\n if (input.blocks) {\n selectedBlocks = input.blocks\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n } else {\n selectedBlocks = entity.defaults?.blocks ?? entity.blocks.map((b) => b.id);\n }\n\n try {\n resolveBlocks(entity.blocks, selectedBlocks);\n } catch (e) {\n handleError(ctx, e);\n return { ok: false, error: e instanceof Error ? e.message : String(e) };\n }\n\n for (const blockId of selectedBlocks) {\n const block = entity.blocks.find((b) => b.id === blockId);\n for (const v of block?.variables ?? []) {\n vars[v.name] = v.default ?? '';\n }\n }\n\n const scope = (vars.scope as string) ?? input.scope ?? '';\n const mode = (input.mode ?? (vars.mode as string) ?? 'in-workspace') as\n | 'in-workspace'\n | 'standalone';\n\n const versions = await detectVersions();\n\n const context: RenderContext = {\n name: nameArg,\n scope,\n vars,\n blocks: selectedBlocks,\n mode,\n versions,\n };\n\n const result = await build({\n entity,\n selectedBlockIds: selectedBlocks,\n context,\n });\n\n if (entityArg === 'plugin') {\n ensureWorkspaceBuildPolicyInFiles(result.files);\n }\n\n const outRoot = input.out ?? result.outRoot;\n const state = await inspectTarget(outRoot);\n\n if (input['dry-run']) {\n ctx.ui?.success?.('Dry run complete', {\n title: 'scaffold run — dry run',\n sections: [\n { header: 'Would write to', items: [outRoot] },\n { header: 'Files', items: formatTree(result.files).split('\\n').filter(Boolean) },\n ],\n });\n return { ok: true, result: { outRoot, files: result.files.length } };\n }\n\n if (state.exists && !state.empty) {\n if (input.force) {\n ctx.ui?.warn?.(`--force: overwriting ${outRoot}`);\n } else {\n validationError(ctx, `Output directory \"${outRoot}\" already exists and is not empty.`, 'Use --force to overwrite.');\n return { ok: false, error: `Output directory \"${outRoot}\" already exists and is not empty` };\n }\n }\n\n await writeFiles({ outRoot, files: result.files, force: input.force });\n\n const entryPkgDir =\n entityArg === 'plugin'\n ? `${outRoot}/packages/${nameArg}-entry`\n : outRoot;\n\n await linkWithMarketplace(entryPkgDir, ctx.cwd, result.manifest);\n\n const registrationNote = 'Registered in .kb/marketplace.lock';\n\n const timing = Date.now() - start;\n\n ctx.ui?.success?.(`Scaffolded ${entityArg} \"${nameArg}\"`, {\n title: 'scaffold run',\n sections: [\n {\n header: 'Output',\n items: [outRoot],\n },\n {\n header: 'Marketplace',\n items: [registrationNote],\n },\n {\n header: 'Next steps',\n items: [\n `cd ${outRoot}`,\n 'pnpm install',\n 'pnpm -w build',\n `pnpm kb ${nameArg} hello # try it`,\n `pnpm kb scaffold doctor --path ${dirname(outRoot)}`,\n ],\n },\n ],\n timing,\n });\n\n return { ok: true, result: { outRoot, files: result.files.length } };\n}\n\ntype MarketplaceCredentials = GatewayCredentials | SessionCredentials;\ntype MarketplaceAuth = {\n credentials: MarketplaceCredentials;\n refresh: () => Promise<MarketplaceAuth>;\n};\n\nfunction createMarketplaceAuth(\n credentials: MarketplaceCredentials,\n refresh: (credentials: MarketplaceCredentials) => Promise<MarketplaceCredentials>,\n): MarketplaceAuth {\n return {\n credentials,\n refresh: async () => createMarketplaceAuth(await refresh(credentials), refresh),\n };\n}\n\nasync function loadMarketplaceCredentials(): Promise<MarketplaceAuth | null> {\n const sessions = new SessionManager();\n const session = await sessions.load();\n if (session) {\n const current = sessions.isExpired(session) ? await sessions.refresh(session) : session;\n return createMarketplaceAuth(current, (value) => sessions.refresh(value as SessionCredentials));\n }\n const manager = new CredentialsManager();\n const credentials = await manager.load();\n if (!credentials) {\n return null;\n }\n const current = manager.isExpired(credentials) ? await manager.refresh(credentials) : credentials;\n return createMarketplaceAuth(current, (value) => manager.refresh(value as GatewayCredentials));\n}\n\n/** Register through the canonical marketplace API; the daemon owns lock format and integrity. */\nasync function linkWithMarketplace(entryPkgDir: string, cwd: string, manifest: Record<string, unknown>): Promise<void> {\n const projectRoot = await findProjectConfigRoot(cwd);\n if (!projectRoot) {\n throw new Error(`Cannot register scaffolded plugin: no project config found from ${cwd}`);\n }\n\n let auth = await loadMarketplaceCredentials();\n for (let attempt = 0; attempt < 2; attempt += 1) {\n const marketplaceUrl = process.env.KB_MARKETPLACE_URL;\n const gatewayUrl = auth?.credentials.gatewayUrl ?? process.env.KB_GATEWAY_URL ?? 'http://127.0.0.1:4000';\n const endpoint = marketplaceUrl\n ? `${marketplaceUrl.replace(/\\/+$/, '')}/api/v1/marketplace/packages/link`\n : `${gatewayUrl.replace(/\\/+$/, '')}/api/v1/marketplace/packages/link`;\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(auth ? { Authorization: `Bearer ${auth.credentials.accessToken}` } : {}),\n },\n body: JSON.stringify({ path: resolve(entryPkgDir), scope: 'project', projectRoot, manifest }),\n });\n if (response.status === 401 && auth && attempt === 0) {\n auth = await auth.refresh();\n continue;\n }\n if (!response.ok) {\n const detail = await response.text();\n throw new Error(`Marketplace registration failed (${response.status}): ${detail}`);\n }\n return;\n }\n throw new Error('Marketplace registration failed after refreshing authentication');\n}\n\nexport default defineCommand({\n id: 'scaffold:run',\n description: 'Scaffold <entity> <name> from blocks',\n\n handler: {\n execute: runDefault,\n },\n});\n"]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/manifest.ts"],"names":[],"mappings":";;;AAEA,IAAM,cAAc,kBAAA,EAAmB,CACpC,IAAA,CAAK,gBAAgB,EACrB,MAAA,CAAO;AAAA,EACN,IAAA,EAAM,WAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,gBAAA;AAAA,IACA,sBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA;AAEJ,CAAC,CAAA,CACA,OAAA,CAAQ,CAAC,oBAAA,EAAsB,gBAAgB,CAAC,CAAA,CAChD,UAAA,CAAW,EAAE,WAAW,IAAA,EAAQ,QAAA,EAAU,GAAA,EAAK,EAC/C,KAAA,EAAM;AAET,IAAM,QAAA,GAAW;AAAA,EACf,MAAA,EAAQ,aAAA;AAAA,EACR,EAAA,EAAI,mBAAA;AAAA,EACJ,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa,4CAAA;AAAA,IACb,IAAA,EAAM,CAAC,UAAA,EAAY,WAAA,EAAa,IAAI;AAAA,GACtC;AAAA,EACA,GAAA,EAAK;AAAA,IACH,SAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,2BAAA;AAA4B,KAC5D;AAAA,IACA,QAAA,EAAU;AAAA,MACR;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,QAAA,EAAU,sCAAA;AAAA,QACV,OAAA,EAAS,gCAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL;AAAA,YACE,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,KAAA;AAAA,YACN,KAAA,EAAO,GAAA;AAAA,YACP,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,OAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,SAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,KAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,OAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EACE;AAAA;AACJ,SACF;AAAA,QACA,QAAA,EAAU;AAAA,UACR,kCAAA;AAAA,UACA,8CAAA;AAAA,UACA,+CAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,iBAAA;AAAA,QACN,QAAA,EAAU,qCAAA;AAAA,QACV,OAAA,EAAS,8BAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA;AACf,SACF;AAAA,QACA,QAAA,EAAU;AAAA,UACR,oBAAA;AAAA,UACA,qCAAA;AAAA,UACA;AAAA;AACF;AACF;AACF,GACF;AAAA,EACA;AACF,CAAA;AAEA,IAAO,gBAAA,GAAQ","file":"index.js","sourcesContent":["import { combinePermissions, kbPlatformPreset } from '@kb-labs/sdk';\n\nconst permissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({\n mode: 'readWrite',\n allow: [\n '.kb/plugins/**',\n '.kb/marketplace.lock',\n 'plugins/**',\n 'adapters/**',\n ],\n })\n .withEnv(['KB_MARKETPLACE_URL', 'KB_GATEWAY_URL'])\n .withQuotas({ timeoutMs: 120000, memoryMb: 256 })\n .build();\n\nconst manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/scaffold',\n version: '0.1.0',\n display: {\n name: 'Scaffold',\n description: 'Entity scaffolder for plugins and adapters',\n tags: ['scaffold', 'generator', 'dx'],\n },\n cli: {\n groupMeta: [\n { path: 'scaffold', describe: 'Scaffold KB Labs entities' },\n ],\n commands: [\n {\n path: 'scaffold run',\n describe: 'Scaffold <entity> <name> from blocks',\n handler: './commands/scaffold.js#default',\n flags: [\n {\n name: 'blocks',\n type: 'string',\n description: 'Comma-separated block ids',\n },\n {\n name: 'yes',\n alias: 'y',\n type: 'boolean',\n description: 'Accept defaults and skip prompts',\n },\n {\n name: 'force',\n type: 'boolean',\n description: 'Overwrite non-empty target directory',\n },\n {\n name: 'dry-run',\n type: 'boolean',\n description: 'Print the tree that would be written and exit',\n },\n {\n name: 'out',\n type: 'string',\n description: 'Override the output directory',\n },\n {\n name: 'scope',\n type: 'string',\n description: 'npm scope for the generated package',\n },\n {\n name: 'mode',\n type: 'string',\n description:\n 'Layout mode: \"in-workspace\" (workspace:* deps) or \"standalone\" (semver deps + pnpm-workspace.yaml)',\n },\n ],\n examples: [\n 'kb scaffold run plugin my-plugin',\n 'kb scaffold run adapter my-llm --blocks base',\n 'kb scaffold run plugin ui --scope @acme --yes',\n 'kb scaffold run plugin demo --dry-run',\n ],\n },\n {\n path: 'scaffold doctor',\n describe: 'Scan user plugins for common issues',\n handler: './commands/doctor.js#default',\n flags: [\n {\n name: 'path',\n type: 'string',\n description: 'Path to scan (default: .kb/plugins)',\n },\n {\n name: 'json',\n type: 'boolean',\n description: 'Emit JSON instead of text',\n },\n ],\n examples: [\n 'kb scaffold doctor',\n 'kb scaffold doctor --path ./plugins',\n 'kb scaffold doctor --json',\n ],\n },\n ],\n },\n permissions,\n} as const;\n\nexport default manifest;\n"]}
1
+ {"version":3,"sources":["../../home/runner/work/kb-labs/kb-labs/plugins/scaffold/entry/src/manifest.ts"],"names":[],"mappings":";;;AAEA,IAAM,cAAc,kBAAA,EAAmB,CACpC,IAAA,CAAK,gBAAgB,EACrB,MAAA,CAAO;AAAA,EACN,IAAA,EAAM,WAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,gBAAA;AAAA,IACA,sBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA;AAEJ,CAAC,CAAA,CACA,OAAA,CAAQ,CAAC,oBAAA,EAAsB,gBAAgB,CAAC,CAAA,CAChD,UAAA,CAAW,EAAE,WAAW,IAAA,EAAQ,QAAA,EAAU,GAAA,EAAK,EAC/C,KAAA,EAAM;AAET,IAAM,QAAA,GAAW;AAAA,EACf,MAAA,EAAQ,aAAA;AAAA,EACR,EAAA,EAAI,mBAAA;AAAA,EACJ,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa,4CAAA;AAAA,IACb,IAAA,EAAM,CAAC,UAAA,EAAY,WAAA,EAAa,IAAI;AAAA,GACtC;AAAA,EACA,GAAA,EAAK;AAAA,IACH,SAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,2BAAA;AAA4B,KAC5D;AAAA,IACA,QAAA,EAAU;AAAA,MACR;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,QAAA,EAAU,sCAAA;AAAA,QACV,OAAA,EAAS,gCAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL;AAAA,YACE,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,KAAA;AAAA,YACN,KAAA,EAAO,GAAA;AAAA,YACP,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,OAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,SAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,KAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,OAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EACE;AAAA;AACJ,SACF;AAAA,QACA,QAAA,EAAU;AAAA,UACR,kCAAA;AAAA,UACA,8CAAA;AAAA,UACA,+CAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,iBAAA;AAAA,QACN,QAAA,EAAU,qCAAA;AAAA,QACV,OAAA,EAAS,8BAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA;AACf,SACF;AAAA,QACA,QAAA,EAAU;AAAA,UACR,oBAAA;AAAA,UACA,qCAAA;AAAA,UACA;AAAA;AACF;AACF;AACF,GACF;AAAA,EACA;AACF,CAAA;AAEA,IAAO,gBAAA,GAAQ","file":"index.js","sourcesContent":["import { combinePermissions, kbPlatformPreset } from '@kb-labs/sdk';\n\nconst permissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({\n mode: 'readWrite',\n allow: [\n '.kb/plugins/**',\n '.kb/marketplace.lock',\n 'plugins/**',\n 'adapters/**',\n ],\n })\n .withEnv(['KB_MARKETPLACE_URL', 'KB_GATEWAY_URL'])\n .withQuotas({ timeoutMs: 120000, memoryMb: 256 })\n .build();\n\nconst manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/scaffold',\n version: '0.1.0',\n display: {\n name: 'Scaffold',\n description: 'Entity scaffolder for plugins and adapters',\n tags: ['scaffold', 'generator', 'dx'],\n },\n cli: {\n groupMeta: [\n { path: 'scaffold', describe: 'Scaffold KB Labs entities' },\n ],\n commands: [\n {\n path: 'scaffold run',\n describe: 'Scaffold <entity> <name> from blocks',\n handler: './commands/scaffold.js#default',\n flags: [\n {\n name: 'blocks',\n type: 'string',\n description: 'Comma-separated block ids',\n },\n {\n name: 'yes',\n alias: 'y',\n type: 'boolean',\n description: 'Accept defaults and skip prompts',\n },\n {\n name: 'force',\n type: 'boolean',\n description: 'Overwrite non-empty target directory',\n },\n {\n name: 'dry-run',\n type: 'boolean',\n description: 'Print the tree that would be written and exit',\n },\n {\n name: 'out',\n type: 'string',\n description: 'Override the output directory',\n },\n {\n name: 'scope',\n type: 'string',\n description: 'npm scope for the generated package',\n },\n {\n name: 'mode',\n type: 'string',\n description:\n 'Layout mode: \"in-workspace\" (workspace:* deps) or \"standalone\" (semver deps + pnpm-workspace.yaml)',\n },\n ],\n examples: [\n 'kb scaffold run plugin my-plugin',\n 'kb scaffold run adapter my-llm --blocks base',\n 'kb scaffold run plugin ui --scope @acme --yes',\n 'kb scaffold run plugin demo --dry-run',\n ],\n },\n {\n path: 'scaffold doctor',\n describe: 'Scan user plugins for common issues',\n handler: './commands/doctor.js#default',\n flags: [\n {\n name: 'path',\n type: 'string',\n description: 'Path to scan (default: .kb/plugins)',\n },\n {\n name: 'json',\n type: 'boolean',\n description: 'Emit JSON instead of text',\n },\n ],\n examples: [\n 'kb scaffold doctor',\n 'kb scaffold doctor --path ./plugins',\n 'kb scaffold doctor --json',\n ],\n },\n ],\n },\n permissions,\n} as const;\n\nexport default manifest;\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/manifest.ts"],"names":[],"mappings":";;;AAEA,IAAM,cAAc,kBAAA,EAAmB,CACpC,IAAA,CAAK,gBAAgB,EACrB,MAAA,CAAO;AAAA,EACN,IAAA,EAAM,WAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,gBAAA;AAAA,IACA,sBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA;AAEJ,CAAC,CAAA,CACA,OAAA,CAAQ,CAAC,oBAAA,EAAsB,gBAAgB,CAAC,CAAA,CAChD,UAAA,CAAW,EAAE,WAAW,IAAA,EAAQ,QAAA,EAAU,GAAA,EAAK,EAC/C,KAAA,EAAM;AAET,IAAM,QAAA,GAAW;AAAA,EACf,MAAA,EAAQ,aAAA;AAAA,EACR,EAAA,EAAI,mBAAA;AAAA,EACJ,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa,4CAAA;AAAA,IACb,IAAA,EAAM,CAAC,UAAA,EAAY,WAAA,EAAa,IAAI;AAAA,GACtC;AAAA,EACA,GAAA,EAAK;AAAA,IACH,SAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,2BAAA;AAA4B,KAC5D;AAAA,IACA,QAAA,EAAU;AAAA,MACR;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,QAAA,EAAU,sCAAA;AAAA,QACV,OAAA,EAAS,gCAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL;AAAA,YACE,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,KAAA;AAAA,YACN,KAAA,EAAO,GAAA;AAAA,YACP,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,OAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,SAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,KAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,OAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EACE;AAAA;AACJ,SACF;AAAA,QACA,QAAA,EAAU;AAAA,UACR,kCAAA;AAAA,UACA,8CAAA;AAAA,UACA,+CAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,iBAAA;AAAA,QACN,QAAA,EAAU,qCAAA;AAAA,QACV,OAAA,EAAS,8BAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA;AACf,SACF;AAAA,QACA,QAAA,EAAU;AAAA,UACR,oBAAA;AAAA,UACA,qCAAA;AAAA,UACA;AAAA;AACF;AACF;AACF,GACF;AAAA,EACA;AACF,CAAA;AAEA,IAAO,gBAAA,GAAQ","file":"manifest.js","sourcesContent":["import { combinePermissions, kbPlatformPreset } from '@kb-labs/sdk';\n\nconst permissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({\n mode: 'readWrite',\n allow: [\n '.kb/plugins/**',\n '.kb/marketplace.lock',\n 'plugins/**',\n 'adapters/**',\n ],\n })\n .withEnv(['KB_MARKETPLACE_URL', 'KB_GATEWAY_URL'])\n .withQuotas({ timeoutMs: 120000, memoryMb: 256 })\n .build();\n\nconst manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/scaffold',\n version: '0.1.0',\n display: {\n name: 'Scaffold',\n description: 'Entity scaffolder for plugins and adapters',\n tags: ['scaffold', 'generator', 'dx'],\n },\n cli: {\n groupMeta: [\n { path: 'scaffold', describe: 'Scaffold KB Labs entities' },\n ],\n commands: [\n {\n path: 'scaffold run',\n describe: 'Scaffold <entity> <name> from blocks',\n handler: './commands/scaffold.js#default',\n flags: [\n {\n name: 'blocks',\n type: 'string',\n description: 'Comma-separated block ids',\n },\n {\n name: 'yes',\n alias: 'y',\n type: 'boolean',\n description: 'Accept defaults and skip prompts',\n },\n {\n name: 'force',\n type: 'boolean',\n description: 'Overwrite non-empty target directory',\n },\n {\n name: 'dry-run',\n type: 'boolean',\n description: 'Print the tree that would be written and exit',\n },\n {\n name: 'out',\n type: 'string',\n description: 'Override the output directory',\n },\n {\n name: 'scope',\n type: 'string',\n description: 'npm scope for the generated package',\n },\n {\n name: 'mode',\n type: 'string',\n description:\n 'Layout mode: \"in-workspace\" (workspace:* deps) or \"standalone\" (semver deps + pnpm-workspace.yaml)',\n },\n ],\n examples: [\n 'kb scaffold run plugin my-plugin',\n 'kb scaffold run adapter my-llm --blocks base',\n 'kb scaffold run plugin ui --scope @acme --yes',\n 'kb scaffold run plugin demo --dry-run',\n ],\n },\n {\n path: 'scaffold doctor',\n describe: 'Scan user plugins for common issues',\n handler: './commands/doctor.js#default',\n flags: [\n {\n name: 'path',\n type: 'string',\n description: 'Path to scan (default: .kb/plugins)',\n },\n {\n name: 'json',\n type: 'boolean',\n description: 'Emit JSON instead of text',\n },\n ],\n examples: [\n 'kb scaffold doctor',\n 'kb scaffold doctor --path ./plugins',\n 'kb scaffold doctor --json',\n ],\n },\n ],\n },\n permissions,\n} as const;\n\nexport default manifest;\n"]}
1
+ {"version":3,"sources":["../../home/runner/work/kb-labs/kb-labs/plugins/scaffold/entry/src/manifest.ts"],"names":[],"mappings":";;;AAEA,IAAM,cAAc,kBAAA,EAAmB,CACpC,IAAA,CAAK,gBAAgB,EACrB,MAAA,CAAO;AAAA,EACN,IAAA,EAAM,WAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,gBAAA;AAAA,IACA,sBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA;AAEJ,CAAC,CAAA,CACA,OAAA,CAAQ,CAAC,oBAAA,EAAsB,gBAAgB,CAAC,CAAA,CAChD,UAAA,CAAW,EAAE,WAAW,IAAA,EAAQ,QAAA,EAAU,GAAA,EAAK,EAC/C,KAAA,EAAM;AAET,IAAM,QAAA,GAAW;AAAA,EACf,MAAA,EAAQ,aAAA;AAAA,EACR,EAAA,EAAI,mBAAA;AAAA,EACJ,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa,4CAAA;AAAA,IACb,IAAA,EAAM,CAAC,UAAA,EAAY,WAAA,EAAa,IAAI;AAAA,GACtC;AAAA,EACA,GAAA,EAAK;AAAA,IACH,SAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,2BAAA;AAA4B,KAC5D;AAAA,IACA,QAAA,EAAU;AAAA,MACR;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,QAAA,EAAU,sCAAA;AAAA,QACV,OAAA,EAAS,gCAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL;AAAA,YACE,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,KAAA;AAAA,YACN,KAAA,EAAO,GAAA;AAAA,YACP,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,OAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,SAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,KAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,OAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EACE;AAAA;AACJ,SACF;AAAA,QACA,QAAA,EAAU;AAAA,UACR,kCAAA;AAAA,UACA,8CAAA;AAAA,UACA,+CAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,iBAAA;AAAA,QACN,QAAA,EAAU,qCAAA;AAAA,QACV,OAAA,EAAS,8BAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA;AACf,SACF;AAAA,QACA,QAAA,EAAU;AAAA,UACR,oBAAA;AAAA,UACA,qCAAA;AAAA,UACA;AAAA;AACF;AACF;AACF,GACF;AAAA,EACA;AACF,CAAA;AAEA,IAAO,gBAAA,GAAQ","file":"manifest.js","sourcesContent":["import { combinePermissions, kbPlatformPreset } from '@kb-labs/sdk';\n\nconst permissions = combinePermissions()\n .with(kbPlatformPreset)\n .withFs({\n mode: 'readWrite',\n allow: [\n '.kb/plugins/**',\n '.kb/marketplace.lock',\n 'plugins/**',\n 'adapters/**',\n ],\n })\n .withEnv(['KB_MARKETPLACE_URL', 'KB_GATEWAY_URL'])\n .withQuotas({ timeoutMs: 120000, memoryMb: 256 })\n .build();\n\nconst manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/scaffold',\n version: '0.1.0',\n display: {\n name: 'Scaffold',\n description: 'Entity scaffolder for plugins and adapters',\n tags: ['scaffold', 'generator', 'dx'],\n },\n cli: {\n groupMeta: [\n { path: 'scaffold', describe: 'Scaffold KB Labs entities' },\n ],\n commands: [\n {\n path: 'scaffold run',\n describe: 'Scaffold <entity> <name> from blocks',\n handler: './commands/scaffold.js#default',\n flags: [\n {\n name: 'blocks',\n type: 'string',\n description: 'Comma-separated block ids',\n },\n {\n name: 'yes',\n alias: 'y',\n type: 'boolean',\n description: 'Accept defaults and skip prompts',\n },\n {\n name: 'force',\n type: 'boolean',\n description: 'Overwrite non-empty target directory',\n },\n {\n name: 'dry-run',\n type: 'boolean',\n description: 'Print the tree that would be written and exit',\n },\n {\n name: 'out',\n type: 'string',\n description: 'Override the output directory',\n },\n {\n name: 'scope',\n type: 'string',\n description: 'npm scope for the generated package',\n },\n {\n name: 'mode',\n type: 'string',\n description:\n 'Layout mode: \"in-workspace\" (workspace:* deps) or \"standalone\" (semver deps + pnpm-workspace.yaml)',\n },\n ],\n examples: [\n 'kb scaffold run plugin my-plugin',\n 'kb scaffold run adapter my-llm --blocks base',\n 'kb scaffold run plugin ui --scope @acme --yes',\n 'kb scaffold run plugin demo --dry-run',\n ],\n },\n {\n path: 'scaffold doctor',\n describe: 'Scan user plugins for common issues',\n handler: './commands/doctor.js#default',\n flags: [\n {\n name: 'path',\n type: 'string',\n description: 'Path to scan (default: .kb/plugins)',\n },\n {\n name: 'json',\n type: 'boolean',\n description: 'Emit JSON instead of text',\n },\n ],\n examples: [\n 'kb scaffold doctor',\n 'kb scaffold doctor --path ./plugins',\n 'kb scaffold doctor --json',\n ],\n },\n ],\n },\n permissions,\n} as const;\n\nexport default manifest;\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kb-labs/scaffold",
3
3
  "description": "Generic entity scaffolder for KB Labs plugins, adapters, and friends.",
4
- "version": "2.119.0-canary.e120bc0ee",
4
+ "version": "2.119.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -20,12 +20,12 @@
20
20
  "templates"
21
21
  ],
22
22
  "dependencies": {
23
- "@kb-labs/cli-runtime": "2.119.0-canary.e120bc0ee",
24
- "@kb-labs/core-workspace": "2.119.0-canary.e120bc0ee",
25
- "@kb-labs/scaffold-contracts": "2.119.0-canary.e120bc0ee",
23
+ "@kb-labs/cli-runtime": "2.119.0",
24
+ "@kb-labs/core-workspace": "2.119.0",
25
+ "@kb-labs/scaffold-contracts": "2.119.0",
26
26
  "@kb-labs/sdk": "2.115.4",
27
- "@kb-labs/scaffold-core": "2.119.0-canary.e120bc0ee",
28
- "@kb-labs/shared-cli-ui": "2.119.0-canary.e120bc0ee"
27
+ "@kb-labs/shared-cli-ui": "2.119.0",
28
+ "@kb-labs/scaffold-core": "2.119.0"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^24.3.3",
@@ -34,12 +34,12 @@
34
34
  "tsup": "^8.5.0",
35
35
  "typescript": "^5.6.3",
36
36
  "vitest": "^3.2.6",
37
- "@kb-labs/plugin-contracts": "2.119.0-canary.e120bc0ee",
38
- "@kb-labs/shared-testing-e2e": "2.119.0-canary.e120bc0ee",
39
- "@kb-labs/devkit": "2.119.0-canary.e120bc0ee"
37
+ "@kb-labs/devkit": "2.119.0",
38
+ "@kb-labs/shared-testing-e2e": "2.119.0",
39
+ "@kb-labs/plugin-contracts": "2.119.0"
40
40
  },
41
41
  "engines": {
42
- "node": ">=22.0.0",
42
+ "node": ">=24.0.0",
43
43
  "pnpm": ">=9.0.0"
44
44
  },
45
45
  "kb": {
@@ -1,129 +0,0 @@
1
- {
2
- "schema": "kb.plugin/3",
3
- "id": "@kb-labs/scaffold",
4
- "version": "0.1.0",
5
- "display": {
6
- "name": "Scaffold",
7
- "description": "Entity scaffolder for plugins and adapters",
8
- "tags": [
9
- "scaffold",
10
- "generator",
11
- "dx"
12
- ]
13
- },
14
- "cli": {
15
- "groupMeta": [
16
- {
17
- "path": "scaffold",
18
- "describe": "Scaffold KB Labs entities"
19
- }
20
- ],
21
- "commands": [
22
- {
23
- "path": "scaffold run",
24
- "describe": "Scaffold <entity> <name> from blocks",
25
- "handler": "./commands/scaffold.js#default",
26
- "flags": [
27
- {
28
- "name": "blocks",
29
- "type": "string",
30
- "description": "Comma-separated block ids"
31
- },
32
- {
33
- "name": "yes",
34
- "alias": "y",
35
- "type": "boolean",
36
- "description": "Accept defaults and skip prompts"
37
- },
38
- {
39
- "name": "force",
40
- "type": "boolean",
41
- "description": "Overwrite non-empty target directory"
42
- },
43
- {
44
- "name": "dry-run",
45
- "type": "boolean",
46
- "description": "Print the tree that would be written and exit"
47
- },
48
- {
49
- "name": "out",
50
- "type": "string",
51
- "description": "Override the output directory"
52
- },
53
- {
54
- "name": "scope",
55
- "type": "string",
56
- "description": "npm scope for the generated package"
57
- },
58
- {
59
- "name": "mode",
60
- "type": "string",
61
- "description": "Layout mode: \"in-workspace\" (workspace:* deps) or \"standalone\" (semver deps + pnpm-workspace.yaml)"
62
- }
63
- ],
64
- "examples": [
65
- "kb scaffold run plugin my-plugin",
66
- "kb scaffold run adapter my-llm --blocks base",
67
- "kb scaffold run plugin ui --scope @acme --yes",
68
- "kb scaffold run plugin demo --dry-run"
69
- ]
70
- },
71
- {
72
- "path": "scaffold doctor",
73
- "describe": "Scan user plugins for common issues",
74
- "handler": "./commands/doctor.js#default",
75
- "flags": [
76
- {
77
- "name": "path",
78
- "type": "string",
79
- "description": "Path to scan (default: .kb/plugins)"
80
- },
81
- {
82
- "name": "json",
83
- "type": "boolean",
84
- "description": "Emit JSON instead of text"
85
- }
86
- ],
87
- "examples": [
88
- "kb scaffold doctor",
89
- "kb scaffold doctor --path ./plugins",
90
- "kb scaffold doctor --json"
91
- ]
92
- }
93
- ]
94
- },
95
- "permissions": {
96
- "fs": {
97
- "read": [
98
- ".kb/**",
99
- ".kb/plugins/**",
100
- ".kb/marketplace.lock",
101
- "plugins/**",
102
- "adapters/**"
103
- ],
104
- "write": [
105
- ".kb/**",
106
- ".kb/plugins/**",
107
- ".kb/marketplace.lock",
108
- "plugins/**",
109
- "adapters/**"
110
- ]
111
- },
112
- "env": {
113
- "read": [
114
- "HOME",
115
- "USER",
116
- "PATH",
117
- "TMPDIR",
118
- "NODE_ENV",
119
- "KB_*",
120
- "KB_MARKETPLACE_URL",
121
- "KB_GATEWAY_URL"
122
- ]
123
- },
124
- "quotas": {
125
- "timeoutMs": 120000,
126
- "memoryMb": 256
127
- }
128
- }
129
- }