@grant-vine/wunderkind 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/.claude-plugin/plugin.json +6 -0
  2. package/README.md +110 -0
  3. package/agents/brand-builder.md +215 -0
  4. package/agents/ciso.md +267 -0
  5. package/agents/creative-director.md +231 -0
  6. package/agents/fullstack-wunderkind.md +304 -0
  7. package/agents/marketing-wunderkind.md +230 -0
  8. package/agents/operations-lead.md +253 -0
  9. package/agents/product-wunderkind.md +253 -0
  10. package/agents/qa-specialist.md +234 -0
  11. package/bin/wunderkind.js +2 -0
  12. package/dist/agents/brand-builder.d.ts +8 -0
  13. package/dist/agents/brand-builder.d.ts.map +1 -0
  14. package/dist/agents/brand-builder.js +251 -0
  15. package/dist/agents/brand-builder.js.map +1 -0
  16. package/dist/agents/ciso.d.ts +8 -0
  17. package/dist/agents/ciso.d.ts.map +1 -0
  18. package/dist/agents/ciso.js +304 -0
  19. package/dist/agents/ciso.js.map +1 -0
  20. package/dist/agents/creative-director.d.ts +8 -0
  21. package/dist/agents/creative-director.d.ts.map +1 -0
  22. package/dist/agents/creative-director.js +268 -0
  23. package/dist/agents/creative-director.js.map +1 -0
  24. package/dist/agents/fullstack-wunderkind.d.ts +8 -0
  25. package/dist/agents/fullstack-wunderkind.d.ts.map +1 -0
  26. package/dist/agents/fullstack-wunderkind.js +332 -0
  27. package/dist/agents/fullstack-wunderkind.js.map +1 -0
  28. package/dist/agents/index.d.ts +11 -0
  29. package/dist/agents/index.d.ts.map +1 -0
  30. package/dist/agents/index.js +10 -0
  31. package/dist/agents/index.js.map +1 -0
  32. package/dist/agents/marketing-wunderkind.d.ts +8 -0
  33. package/dist/agents/marketing-wunderkind.d.ts.map +1 -0
  34. package/dist/agents/marketing-wunderkind.js +267 -0
  35. package/dist/agents/marketing-wunderkind.js.map +1 -0
  36. package/dist/agents/operations-lead.d.ts +8 -0
  37. package/dist/agents/operations-lead.d.ts.map +1 -0
  38. package/dist/agents/operations-lead.js +290 -0
  39. package/dist/agents/operations-lead.js.map +1 -0
  40. package/dist/agents/product-wunderkind.d.ts +8 -0
  41. package/dist/agents/product-wunderkind.d.ts.map +1 -0
  42. package/dist/agents/product-wunderkind.js +289 -0
  43. package/dist/agents/product-wunderkind.js.map +1 -0
  44. package/dist/agents/qa-specialist.d.ts +8 -0
  45. package/dist/agents/qa-specialist.d.ts.map +1 -0
  46. package/dist/agents/qa-specialist.js +271 -0
  47. package/dist/agents/qa-specialist.js.map +1 -0
  48. package/dist/agents/types.d.ts +26 -0
  49. package/dist/agents/types.d.ts.map +1 -0
  50. package/dist/agents/types.js +6 -0
  51. package/dist/agents/types.js.map +1 -0
  52. package/dist/build-agents.d.ts +2 -0
  53. package/dist/build-agents.d.ts.map +1 -0
  54. package/dist/build-agents.js +30 -0
  55. package/dist/build-agents.js.map +1 -0
  56. package/dist/cli/cli-installer.d.ts +23 -0
  57. package/dist/cli/cli-installer.d.ts.map +1 -0
  58. package/dist/cli/cli-installer.js +116 -0
  59. package/dist/cli/cli-installer.js.map +1 -0
  60. package/dist/cli/config-manager/index.d.ts +5 -0
  61. package/dist/cli/config-manager/index.d.ts.map +1 -0
  62. package/dist/cli/config-manager/index.js +145 -0
  63. package/dist/cli/config-manager/index.js.map +1 -0
  64. package/dist/cli/index.d.ts +3 -0
  65. package/dist/cli/index.d.ts.map +1 -0
  66. package/dist/cli/index.js +34 -0
  67. package/dist/cli/index.js.map +1 -0
  68. package/dist/cli/tui-installer.d.ts +2 -0
  69. package/dist/cli/tui-installer.d.ts.map +1 -0
  70. package/dist/cli/tui-installer.js +89 -0
  71. package/dist/cli/tui-installer.js.map +1 -0
  72. package/dist/cli/types.d.ts +27 -0
  73. package/dist/cli/types.d.ts.map +1 -0
  74. package/dist/cli/types.js +2 -0
  75. package/dist/cli/types.js.map +1 -0
  76. package/dist/index.d.ts +4 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +65 -0
  79. package/dist/index.js.map +1 -0
  80. package/oh-my-opencode.jsonc +86 -0
  81. package/package.json +56 -0
  82. package/skills/agile-pm/SKILL.md +128 -0
  83. package/skills/compliance-officer/SKILL.md +355 -0
  84. package/skills/db-architect/SKILL.md +367 -0
  85. package/skills/pen-tester/SKILL.md +276 -0
  86. package/skills/security-analyst/SKILL.md +228 -0
  87. package/skills/social-media-maven/SKILL.md +205 -0
  88. package/skills/vercel-architect/SKILL.md +229 -0
  89. package/skills/visual-artist/SKILL.md +126 -0
  90. package/wunderkind.config.jsonc +85 -0
@@ -0,0 +1,23 @@
1
+ import type { InstallArgs } from "./types.js";
2
+ export declare const SYMBOLS: {
3
+ check: string;
4
+ cross: string;
5
+ arrow: string;
6
+ bullet: string;
7
+ info: string;
8
+ warn: string;
9
+ star: string;
10
+ };
11
+ export declare function printHeader(isUpdate: boolean): void;
12
+ export declare function printStep(step: number, total: number, message: string): void;
13
+ export declare function printSuccess(message: string): void;
14
+ export declare function printError(message: string): void;
15
+ export declare function printInfo(message: string): void;
16
+ export declare function printWarning(message: string): void;
17
+ export declare function printBox(content: string, title?: string): void;
18
+ export declare function validateNonTuiArgs(args: InstallArgs): {
19
+ valid: boolean;
20
+ errors: string[];
21
+ };
22
+ export declare function runCliInstaller(args: InstallArgs): Promise<number>;
23
+ //# sourceMappingURL=cli-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-installer.d.ts","sourceRoot":"","sources":["../../src/cli/cli-installer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAG7C,eAAO,MAAM,OAAO;;;;;;;;CAQnB,CAAA;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAKnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE5E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CA6B9D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAM1F;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAgExE"}
@@ -0,0 +1,116 @@
1
+ import color from "picocolors";
2
+ import { addPluginToOpenCodeConfig, detectCurrentConfig, writeWunderkindConfig } from "./config-manager/index.js";
3
+ export const SYMBOLS = {
4
+ check: color.green("[OK]"),
5
+ cross: color.red("[X]"),
6
+ arrow: color.cyan("->"),
7
+ bullet: color.dim("*"),
8
+ info: color.blue("[i]"),
9
+ warn: color.yellow("[!]"),
10
+ star: color.yellow("*"),
11
+ };
12
+ export function printHeader(isUpdate) {
13
+ const mode = isUpdate ? "Update" : "Install";
14
+ console.log();
15
+ console.log(color.bgMagenta(color.white(` Wunderkind... ${mode} `)));
16
+ console.log();
17
+ }
18
+ export function printStep(step, total, message) {
19
+ console.log(`${color.dim(`[${step}/${total}]`)} ${message}`);
20
+ }
21
+ export function printSuccess(message) {
22
+ console.log(`${SYMBOLS.check} ${message}`);
23
+ }
24
+ export function printError(message) {
25
+ console.log(`${SYMBOLS.cross} ${color.red(message)}`);
26
+ }
27
+ export function printInfo(message) {
28
+ console.log(`${SYMBOLS.info} ${message}`);
29
+ }
30
+ export function printWarning(message) {
31
+ console.log(`${SYMBOLS.warn} ${color.yellow(message)}`);
32
+ }
33
+ export function printBox(content, title) {
34
+ const lines = content.split("\n");
35
+ const maxWidth = Math.max(...lines.map((line) => line.replace(/\u001b\[[0-9;]*m/g, "").length), title?.length ?? 0) + 4;
36
+ const border = color.dim("─".repeat(maxWidth));
37
+ console.log();
38
+ if (title) {
39
+ console.log(color.dim("┌─") +
40
+ color.bold(` ${title} `) +
41
+ color.dim("─".repeat(maxWidth - title.length - 4)) +
42
+ color.dim("┐"));
43
+ }
44
+ else {
45
+ console.log(color.dim("┌") + border + color.dim("┐"));
46
+ }
47
+ for (const line of lines) {
48
+ const stripped = line.replace(/\u001b\[[0-9;]*m/g, "");
49
+ const padding = maxWidth - stripped.length;
50
+ console.log(color.dim("│") + ` ${line}${" ".repeat(padding - 1)}` + color.dim("│"));
51
+ }
52
+ console.log(color.dim("└") + border + color.dim("┘"));
53
+ console.log();
54
+ }
55
+ export function validateNonTuiArgs(args) {
56
+ const errors = [];
57
+ if (!args.region)
58
+ errors.push("--region is required (e.g. --region='South Africa')");
59
+ if (!args.industry)
60
+ errors.push("--industry is required (e.g. --industry=SaaS)");
61
+ if (!args.primaryRegulation)
62
+ errors.push("--primary-regulation is required (e.g. --primary-regulation=GDPR)");
63
+ return { valid: errors.length === 0, errors };
64
+ }
65
+ export async function runCliInstaller(args) {
66
+ const validation = validateNonTuiArgs(args);
67
+ if (!validation.valid) {
68
+ printHeader(false);
69
+ printError("Validation failed:");
70
+ for (const err of validation.errors) {
71
+ console.log(` ${SYMBOLS.bullet} ${err}`);
72
+ }
73
+ console.log();
74
+ printInfo("Usage: bunx wunderkind install --no-tui --region='South Africa' --industry=SaaS --primary-regulation=POPIA");
75
+ console.log();
76
+ return 1;
77
+ }
78
+ const detected = detectCurrentConfig();
79
+ const isUpdate = detected.isInstalled;
80
+ printHeader(isUpdate);
81
+ const totalSteps = 2;
82
+ let step = 1;
83
+ const config = {
84
+ region: args.region ?? "Global",
85
+ industry: args.industry ?? "",
86
+ primaryRegulation: args.primaryRegulation ?? "GDPR",
87
+ secondaryRegulation: args.secondaryRegulation ?? "",
88
+ };
89
+ printStep(step++, totalSteps, "Adding wunderkind to OpenCode config...");
90
+ const pluginResult = addPluginToOpenCodeConfig();
91
+ if (!pluginResult.success) {
92
+ printError(`Failed: ${pluginResult.error}`);
93
+ return 1;
94
+ }
95
+ printSuccess(`Plugin ${isUpdate ? "verified" : "added"} ${SYMBOLS.arrow} ${color.dim(pluginResult.configPath)}`);
96
+ printStep(step++, totalSteps, "Writing wunderkind configuration...");
97
+ const configResult = writeWunderkindConfig(config);
98
+ if (!configResult.success) {
99
+ printError(`Failed: ${configResult.error}`);
100
+ return 1;
101
+ }
102
+ printSuccess(`Config written ${SYMBOLS.arrow} ${color.dim(configResult.configPath)}`);
103
+ printBox([
104
+ ` ${color.bold("Region:")} ${color.cyan(config.region)}`,
105
+ ` ${color.bold("Industry:")} ${color.cyan(config.industry || color.dim("(not set)"))}`,
106
+ ` ${color.bold("Primary regulation:")} ${color.cyan(config.primaryRegulation)}`,
107
+ config.secondaryRegulation ? ` ${color.bold("Secondary:")} ${color.cyan(config.secondaryRegulation)}` : "",
108
+ ]
109
+ .filter(Boolean)
110
+ .join("\n"), isUpdate ? "Updated Configuration" : "Installation Complete");
111
+ console.log(`${SYMBOLS.star} ${color.bold(color.green(isUpdate ? "Configuration updated!" : "Installation complete!"))}`);
112
+ console.log(` Run ${color.cyan("opencode")} to start!`);
113
+ console.log();
114
+ return 0;
115
+ }
116
+ //# sourceMappingURL=cli-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-installer.js","sourceRoot":"","sources":["../../src/cli/cli-installer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAA;AAE9B,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAEjH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACtB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACvB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IACzB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;CACxB,CAAA;AAED,MAAM,UAAU,WAAW,CAAC,QAAiB;IAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;IAC5C,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;IACpE,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,OAAe;IACpE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,KAAc;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,QAAQ,GACZ,IAAI,CAAC,GAAG,CACN,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EACpE,KAAK,EAAE,MAAM,IAAI,CAAC,CACnB,GAAG,CAAC,CAAA;IACP,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;IAE9C,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CACjB,CAAA;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;QACtD,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACrF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IAClD,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;IACpF,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;IAChF,IAAI,CAAC,IAAI,CAAC,iBAAiB;QAAE,MAAM,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAA;IAC7G,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAiB;IACrD,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,WAAW,CAAC,KAAK,CAAC,CAAA;QAClB,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAChC,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAA;QAC3C,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,SAAS,CACP,4GAA4G,CAC7G,CAAA;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAA;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAA;IAErC,WAAW,CAAC,QAAQ,CAAC,CAAA;IAErB,MAAM,UAAU,GAAG,CAAC,CAAA;IACpB,IAAI,IAAI,GAAG,CAAC,CAAA;IAEZ,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;QAC7B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,MAAM;QACnD,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,IAAI,EAAE;KACpD,CAAA;IAED,SAAS,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,yCAAyC,CAAC,CAAA;IACxE,MAAM,YAAY,GAAG,yBAAyB,EAAE,CAAA;IAChD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,UAAU,CAAC,WAAW,YAAY,CAAC,KAAK,EAAE,CAAC,CAAA;QAC3C,OAAO,CAAC,CAAA;IACV,CAAC;IACD,YAAY,CAAC,UAAU,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAEhH,SAAS,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,qCAAqC,CAAC,CAAA;IACpE,MAAM,YAAY,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;IAClD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,UAAU,CAAC,WAAW,YAAY,CAAC,KAAK,EAAE,CAAC,CAAA;QAC3C,OAAO,CAAC,CAAA;IACV,CAAC;IACD,YAAY,CAAC,kBAAkB,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAErF,QAAQ,CACN;QACE,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QACtE,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE;QAClG,KAAK,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;QAChF,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;KACtH;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,EACb,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAC7D,CAAA;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAA;IACzH,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;IACxD,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,CAAA;AACV,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ConfigMergeResult, DetectedConfig, InstallConfig } from "../types.js";
2
+ export declare function detectCurrentConfig(): DetectedConfig;
3
+ export declare function addPluginToOpenCodeConfig(): ConfigMergeResult;
4
+ export declare function writeWunderkindConfig(installConfig: InstallConfig): ConfigMergeResult;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/config-manager/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAqCnF,wBAAgB,mBAAmB,IAAI,cAAc,CAmCpD;AAED,wBAAgB,yBAAyB,IAAI,iBAAiB,CAmD7D;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,aAAa,GAAG,iBAAiB,CAwBrF"}
@@ -0,0 +1,145 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { parse as parseJsonc } from "jsonc-parser";
5
+ const PACKAGE_NAME = "wunderkind";
6
+ const CONFIG_DIR = join(homedir(), ".config", "opencode");
7
+ const CONFIG_JSON = join(CONFIG_DIR, "config.json");
8
+ const CONFIG_JSONC = join(CONFIG_DIR, "config.jsonc");
9
+ const WUNDERKIND_CONFIG = join(process.cwd(), "wunderkind.config.jsonc");
10
+ function getConfigPath() {
11
+ if (existsSync(CONFIG_JSONC))
12
+ return { path: CONFIG_JSONC, format: "jsonc" };
13
+ if (existsSync(CONFIG_JSON))
14
+ return { path: CONFIG_JSON, format: "json" };
15
+ return { path: CONFIG_JSON, format: "none" };
16
+ }
17
+ function ensureConfigDir() {
18
+ if (!existsSync(CONFIG_DIR)) {
19
+ mkdirSync(CONFIG_DIR, { recursive: true });
20
+ }
21
+ }
22
+ function parseConfig(path) {
23
+ try {
24
+ const content = readFileSync(path, "utf-8");
25
+ if (!content.trim())
26
+ return null;
27
+ const result = parseJsonc(content);
28
+ if (!result || typeof result !== "object" || Array.isArray(result))
29
+ return null;
30
+ return result;
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ export function detectCurrentConfig() {
37
+ const defaults = {
38
+ isInstalled: false,
39
+ region: "Global",
40
+ industry: "",
41
+ primaryRegulation: "GDPR",
42
+ secondaryRegulation: "",
43
+ };
44
+ const { path, format } = getConfigPath();
45
+ if (format === "none")
46
+ return defaults;
47
+ const config = parseConfig(path);
48
+ if (!config)
49
+ return defaults;
50
+ const plugins = config.plugin ?? [];
51
+ const isInstalled = plugins.some((p) => p === PACKAGE_NAME || p.startsWith(`${PACKAGE_NAME}@`));
52
+ if (!isInstalled)
53
+ return defaults;
54
+ if (existsSync(WUNDERKIND_CONFIG)) {
55
+ try {
56
+ const wk = parseJsonc(readFileSync(WUNDERKIND_CONFIG, "utf-8"));
57
+ return {
58
+ isInstalled: true,
59
+ region: typeof wk["REGION"] === "string" ? wk["REGION"] : defaults.region,
60
+ industry: typeof wk["INDUSTRY"] === "string" ? wk["INDUSTRY"] : defaults.industry,
61
+ primaryRegulation: typeof wk["PRIMARY_REGULATION"] === "string" ? wk["PRIMARY_REGULATION"] : defaults.primaryRegulation,
62
+ secondaryRegulation: typeof wk["SECONDARY_REGULATION"] === "string" ? wk["SECONDARY_REGULATION"] : defaults.secondaryRegulation,
63
+ };
64
+ }
65
+ catch {
66
+ return { ...defaults, isInstalled: true };
67
+ }
68
+ }
69
+ return { ...defaults, isInstalled: true };
70
+ }
71
+ export function addPluginToOpenCodeConfig() {
72
+ try {
73
+ ensureConfigDir();
74
+ }
75
+ catch (err) {
76
+ return { success: false, configPath: CONFIG_DIR, error: String(err) };
77
+ }
78
+ const { path, format } = getConfigPath();
79
+ try {
80
+ if (format === "none") {
81
+ const config = { plugin: [PACKAGE_NAME] };
82
+ writeFileSync(path, JSON.stringify(config, null, 2) + "\n");
83
+ return { success: true, configPath: path };
84
+ }
85
+ const config = parseConfig(path) ?? {};
86
+ const plugins = (config.plugin ?? []);
87
+ const existingIndex = plugins.findIndex((p) => p === PACKAGE_NAME || p.startsWith(`${PACKAGE_NAME}@`));
88
+ if (existingIndex !== -1) {
89
+ if (plugins[existingIndex] === PACKAGE_NAME) {
90
+ return { success: true, configPath: path };
91
+ }
92
+ plugins[existingIndex] = PACKAGE_NAME;
93
+ }
94
+ else {
95
+ plugins.push(PACKAGE_NAME);
96
+ }
97
+ config.plugin = plugins;
98
+ if (format === "jsonc") {
99
+ const content = readFileSync(path, "utf-8");
100
+ const pluginArrayRegex = /"plugin"\s*:\s*\[([\s\S]*?)\]/;
101
+ const match = content.match(pluginArrayRegex);
102
+ if (match) {
103
+ const formatted = plugins.map((p) => `"${p}"`).join(",\n ");
104
+ const newContent = content.replace(pluginArrayRegex, `"plugin": [\n ${formatted}\n ]`);
105
+ writeFileSync(path, newContent);
106
+ }
107
+ else {
108
+ const newContent = content.replace(/(\{)/, `$1\n "plugin": ["${PACKAGE_NAME}"],`);
109
+ writeFileSync(path, newContent);
110
+ }
111
+ }
112
+ else {
113
+ writeFileSync(path, JSON.stringify(config, null, 2) + "\n");
114
+ }
115
+ return { success: true, configPath: path };
116
+ }
117
+ catch (err) {
118
+ return { success: false, configPath: path, error: String(err) };
119
+ }
120
+ }
121
+ export function writeWunderkindConfig(installConfig) {
122
+ const configPath = WUNDERKIND_CONFIG;
123
+ try {
124
+ const content = [
125
+ `// Wunderkind configuration — edit these values to tailor agents to your project context`,
126
+ `{`,
127
+ ` // Geographic region — e.g. "South Africa", "United States", "United Kingdom", "Australia"`,
128
+ ` "REGION": ${JSON.stringify(installConfig.region)},`,
129
+ ` // Industry vertical — e.g. "SaaS", "FinTech", "eCommerce", "HealthTech"`,
130
+ ` "INDUSTRY": ${JSON.stringify(installConfig.industry)},`,
131
+ ` // Primary data-protection regulation — e.g. "GDPR", "POPIA", "CCPA", "LGPD"`,
132
+ ` "PRIMARY_REGULATION": ${JSON.stringify(installConfig.primaryRegulation)},`,
133
+ ` // Optional secondary regulation`,
134
+ ` "SECONDARY_REGULATION": ${JSON.stringify(installConfig.secondaryRegulation)}`,
135
+ `}`,
136
+ ``,
137
+ ].join("\n");
138
+ writeFileSync(configPath, content);
139
+ return { success: true, configPath };
140
+ }
141
+ catch (err) {
142
+ return { success: false, configPath, error: String(err) };
143
+ }
144
+ }
145
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/config-manager/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { createRequire } from "node:module";
4
+ import { runCliInstaller } from "./cli-installer.js";
5
+ import { runTuiInstaller } from "./tui-installer.js";
6
+ const require = createRequire(import.meta.url);
7
+ const pkg = require("../../package.json");
8
+ const program = new Command();
9
+ program
10
+ .name("wunderkind")
11
+ .description("Install and configure the Wunderkind oh-my-opencode addon")
12
+ .version(pkg.version);
13
+ program
14
+ .command("install", { isDefault: true })
15
+ .description("Install Wunderkind into your OpenCode setup")
16
+ .option("--no-tui", "Run non-interactive CLI installer")
17
+ .option("--region <region>", "Geographic region (e.g. 'South Africa')")
18
+ .option("--industry <industry>", "Industry vertical (e.g. SaaS)")
19
+ .option("--primary-regulation <regulation>", "Primary data-protection regulation (e.g. GDPR)")
20
+ .option("--secondary-regulation <regulation>", "Secondary regulation (optional)")
21
+ .option("--skip-auth", "Skip post-install auth instructions")
22
+ .action(async (opts) => {
23
+ const args = {
24
+ tui: opts.tui,
25
+ region: opts.region,
26
+ industry: opts.industry,
27
+ primaryRegulation: opts.primaryRegulation,
28
+ secondaryRegulation: opts.secondaryRegulation,
29
+ };
30
+ const exitCode = opts.tui ? await runTuiInstaller() : await runCliInstaller(args);
31
+ process.exit(exitCode);
32
+ });
33
+ program.parse();
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGpD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAA;AAEhE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,2DAA2D,CAAC;KACxE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAEvB,OAAO;KACJ,OAAO,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACvC,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,UAAU,EAAE,mCAAmC,CAAC;KACvD,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,CAAC;KACtE,MAAM,CAAC,uBAAuB,EAAE,+BAA+B,CAAC;KAChE,MAAM,CAAC,mCAAmC,EAAE,gDAAgD,CAAC;KAC7F,MAAM,CAAC,qCAAqC,EAAE,iCAAiC,CAAC;KAChF,MAAM,CAAC,aAAa,EAAE,qCAAqC,CAAC;KAC5D,MAAM,CAAC,KAAK,EAAE,IAOd,EAAE,EAAE;IACH,MAAM,IAAI,GAAgB;QACxB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;KAC9C,CAAA;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAA;IACjF,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACxB,CAAC,CAAC,CAAA;AAEJ,OAAO,CAAC,KAAK,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function runTuiInstaller(): Promise<number>;
2
+ //# sourceMappingURL=tui-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-installer.d.ts","sourceRoot":"","sources":["../../src/cli/tui-installer.ts"],"names":[],"mappings":"AAIA,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAwGvD"}
@@ -0,0 +1,89 @@
1
+ import * as p from "@clack/prompts";
2
+ import color from "picocolors";
3
+ import { addPluginToOpenCodeConfig, detectCurrentConfig, writeWunderkindConfig } from "./config-manager/index.js";
4
+ export async function runTuiInstaller() {
5
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
6
+ console.error("Error: Interactive installer requires a TTY. Use --no-tui and pass flags directly.");
7
+ return 1;
8
+ }
9
+ const detected = detectCurrentConfig();
10
+ const isUpdate = detected.isInstalled;
11
+ p.intro(color.bgMagenta(color.white(isUpdate ? " Wunderkind... Update " : " Wunderkind... Install ")));
12
+ if (isUpdate) {
13
+ p.log.info(`Existing configuration detected: Region=${detected.region}, Industry=${detected.industry || "(not set)"}`);
14
+ }
15
+ const region = await p.text({
16
+ message: "What region is your product based in?",
17
+ placeholder: "Global",
18
+ initialValue: detected.region,
19
+ validate: (v) => (v.trim() ? undefined : "Region is required"),
20
+ });
21
+ if (p.isCancel(region)) {
22
+ p.cancel("Installation cancelled.");
23
+ return 1;
24
+ }
25
+ const industry = await p.text({
26
+ message: "What industry or vertical is your product in?",
27
+ placeholder: "SaaS",
28
+ initialValue: detected.industry,
29
+ });
30
+ if (p.isCancel(industry)) {
31
+ p.cancel("Installation cancelled.");
32
+ return 1;
33
+ }
34
+ const primaryRegulation = await p.text({
35
+ message: "What is your primary data-protection regulation?",
36
+ placeholder: "GDPR",
37
+ initialValue: detected.primaryRegulation,
38
+ validate: (v) => (v.trim() ? undefined : "Primary regulation is required"),
39
+ });
40
+ if (p.isCancel(primaryRegulation)) {
41
+ p.cancel("Installation cancelled.");
42
+ return 1;
43
+ }
44
+ const secondaryRegulation = await p.text({
45
+ message: "Secondary regulation? (optional)",
46
+ placeholder: "leave blank to skip",
47
+ initialValue: detected.secondaryRegulation,
48
+ });
49
+ if (p.isCancel(secondaryRegulation)) {
50
+ p.cancel("Installation cancelled.");
51
+ return 1;
52
+ }
53
+ const config = {
54
+ region: region.trim() || "Global",
55
+ industry: industry.trim(),
56
+ primaryRegulation: primaryRegulation.trim() || "GDPR",
57
+ secondaryRegulation: secondaryRegulation.trim(),
58
+ };
59
+ const spinner = p.spinner();
60
+ spinner.start("Adding wunderkind to OpenCode config");
61
+ const pluginResult = addPluginToOpenCodeConfig();
62
+ if (!pluginResult.success) {
63
+ spinner.stop(`Failed: ${pluginResult.error}`);
64
+ p.outro(color.red("Installation failed."));
65
+ return 1;
66
+ }
67
+ spinner.stop(`Plugin added to ${color.cyan(pluginResult.configPath)}`);
68
+ spinner.start("Writing wunderkind configuration");
69
+ const configResult = writeWunderkindConfig(config);
70
+ if (!configResult.success) {
71
+ spinner.stop(`Failed: ${configResult.error}`);
72
+ p.outro(color.red("Installation failed."));
73
+ return 1;
74
+ }
75
+ spinner.stop(`Config written to ${color.cyan(configResult.configPath)}`);
76
+ p.note([
77
+ `Region: ${color.cyan(config.region)}`,
78
+ `Industry: ${color.cyan(config.industry || color.dim("(not set)"))}`,
79
+ `Primary regulation: ${color.cyan(config.primaryRegulation)}`,
80
+ config.secondaryRegulation ? `Secondary: ${color.cyan(config.secondaryRegulation)}` : "",
81
+ ]
82
+ .filter(Boolean)
83
+ .join("\n"), isUpdate ? "Updated Configuration" : "Installation Complete");
84
+ p.log.success(color.bold(isUpdate ? "Configuration updated!" : "Installation complete!"));
85
+ p.log.message(`Run ${color.cyan("opencode")} to start!`);
86
+ p.outro(color.green("Wunderkind... Enjoy!"));
87
+ return 0;
88
+ }
89
+ //# sourceMappingURL=tui-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-installer.js","sourceRoot":"","sources":["../../src/cli/tui-installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export type BooleanArg = "no" | "yes";
2
+ export interface InstallArgs {
3
+ tui: boolean;
4
+ region?: string | undefined;
5
+ industry?: string | undefined;
6
+ primaryRegulation?: string | undefined;
7
+ secondaryRegulation?: string | undefined;
8
+ }
9
+ export interface InstallConfig {
10
+ region: string;
11
+ industry: string;
12
+ primaryRegulation: string;
13
+ secondaryRegulation: string;
14
+ }
15
+ export interface ConfigMergeResult {
16
+ success: boolean;
17
+ configPath: string;
18
+ error?: string;
19
+ }
20
+ export interface DetectedConfig {
21
+ isInstalled: boolean;
22
+ region: string;
23
+ industry: string;
24
+ primaryRegulation: string;
25
+ secondaryRegulation: string;
26
+ }
27
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,KAAK,CAAA;AAErC,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,MAAM,CAAA;IACzB,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,MAAM,CAAA;IACzB,mBAAmB,EAAE,MAAM,CAAA;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { Plugin } from "@opencode-ai/plugin";
2
+ declare const WunderkindPlugin: Plugin;
3
+ export { WunderkindPlugin as default };
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,QAAA,MAAM,gBAAgB,EAAE,MA8DvB,CAAC;AAEF,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,65 @@
1
+ const WunderkindPlugin = async (_input) => {
2
+ return {
3
+ "experimental.chat.system.transform": async (_input, output) => {
4
+ output.system.push(`
5
+ ## Wunderkind Plugin Agents (available via wunderkind:agent-name)
6
+
7
+ The following specialist agents are available. Delegate to them when their domain matches:
8
+
9
+ ### Primary Agents
10
+
11
+ - \`wunderkind:marketing-wunderkind\` — Brand strategy, go-to-market, content marketing, SEO/SEM, paid media, analytics, product marketing, PR, competitor analysis
12
+ - \`wunderkind:creative-director\` — Brand identity, design systems, UI/UX, typography, colour palettes, accessibility, design tokens, visual language
13
+ - \`wunderkind:product-wunderkind\` — Product strategy, roadmaps, OKRs, user research, PRDs, sprint planning, prioritisation, task decomposition
14
+ - \`wunderkind:fullstack-wunderkind\` — Full-stack engineering, frontend, backend, database, infrastructure, Vercel, AI integration, code review, architecture
15
+ - \`wunderkind:brand-builder\` — Community building, thought leadership, product forums, networking opportunities, PR narrative, cost gating, ROI assessment
16
+ - \`wunderkind:qa-specialist\` — TDD, test writing, Playwright, Vitest, coverage analysis, user story review, test optimisation, security boundary testing
17
+ - \`wunderkind:operations-lead\` — SRE/SLO, admin tooling (build-first), runbooks, incident response, observability, supportability assessment
18
+ - \`wunderkind:ciso\` — Security architecture, OWASP, threat modelling, compliance (GDPR/CCPA/POPIA/LGPD), pen testing coordination, breach response
19
+
20
+ ### Delegation Rules
21
+
22
+ #### Security & Compliance
23
+ - Use \`wunderkind:ciso\` for ANY security review, vulnerability concern, compliance question, threat modelling, pen test coordination, or incident response
24
+ - Use \`wunderkind:ciso\` when fullstack work touches auth, JWT, RBAC, CORS, CSP headers, or sensitive data flows
25
+ - Sub-route from ciso: Security Analyst for vulnerability deep-dives, Pen Tester for active testing, Compliance Officer for GDPR/CCPA/POPIA/LGPD
26
+
27
+ #### Quality & Testing
28
+ - Use \`wunderkind:qa-specialist\` for test strategy, TDD guidance, flaky tests, coverage gaps, user story validation, or security boundary test review
29
+ - Use \`wunderkind:qa-specialist\` when any user story or PRD needs testability review before implementation
30
+
31
+ #### Product & Planning
32
+ - Use \`wunderkind:product-wunderkind\` for roadmapping, OKRs, PRDs, feature prioritisation, go-to-market planning, or task decomposition
33
+ - Use \`wunderkind:product-wunderkind\` when breaking down complex features into parallel-safe agent tasks (file conflict prevention)
34
+
35
+ #### Engineering
36
+ - Use \`wunderkind:fullstack-wunderkind\` for any full-stack development, database work, Vercel/Next.js, architecture decisions, or code review
37
+ - Sub-route from fullstack: db-architect for database/Drizzle/PostgreSQL, vercel-architect for deployment/edge/ISR
38
+
39
+ #### Brand & Marketing
40
+ - Use \`wunderkind:marketing-wunderkind\` for campaigns, SEO audits, content calendars, competitor analysis, paid media, or go-to-market strategy
41
+ - Use \`wunderkind:brand-builder\` for community strategy, forum targeting, networking opportunities, thought leadership plans, PR, or spend/ROI gating
42
+ - Sub-route from marketing: social-media-maven for platform-specific social content and engagement strategy
43
+
44
+ #### Design & UX
45
+ - Use \`wunderkind:creative-director\` for brand identity, design systems, UI/UX review, colour palettes, typography, or visual consistency
46
+ - Sub-route from creative-director: visual-artist for design tokens, WCAG colour compliance, and asset generation
47
+
48
+ #### Operations
49
+ - Use \`wunderkind:operations-lead\` for SRE/SLO decisions, admin panel architecture (build-first bias), incident containment, runbooks, monitoring, or supportability assessment
50
+
51
+ ### Regional Configuration
52
+
53
+ All agents read \`wunderkind.config.jsonc\` (project root, or plugin root as fallback) for:
54
+ - \`REGION\` — adjusts platform mix, event targeting, and regulatory focus
55
+ - \`INDUSTRY\` — adjusts content tone and sector-specific obligations
56
+ - \`PRIMARY_REGULATION\` — the main data protection regulation to apply (defaults to GDPR)
57
+ - \`SECONDARY_REGULATION\` — additional regulation to layer on top
58
+
59
+ If the file is absent or fields are blank, agents default to global best practices.
60
+ `.trim());
61
+ },
62
+ };
63
+ };
64
+ export { WunderkindPlugin as default };
65
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAW,KAAK,EAAE,MAAM,EAAE,EAAE;IAChD,OAAO;QACL,oCAAoC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAC7D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDxB,CAAC,IAAI,EAAE,CAAC,CAAC;QACN,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,CAAC"}