mcp-rubber-duck 1.7.0 → 1.9.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 (169) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +274 -2
  3. package/audit-ci.json +2 -1
  4. package/dist/config/config.d.ts +2 -0
  5. package/dist/config/config.d.ts.map +1 -1
  6. package/dist/config/config.js +144 -1
  7. package/dist/config/config.js.map +1 -1
  8. package/dist/config/types.d.ts +1084 -2
  9. package/dist/config/types.d.ts.map +1 -1
  10. package/dist/config/types.js +59 -0
  11. package/dist/config/types.js.map +1 -1
  12. package/dist/guardrails/context.d.ts +10 -0
  13. package/dist/guardrails/context.d.ts.map +1 -0
  14. package/dist/guardrails/context.js +35 -0
  15. package/dist/guardrails/context.js.map +1 -0
  16. package/dist/guardrails/errors.d.ts +26 -0
  17. package/dist/guardrails/errors.d.ts.map +1 -0
  18. package/dist/guardrails/errors.js +42 -0
  19. package/dist/guardrails/errors.js.map +1 -0
  20. package/dist/guardrails/index.d.ts +6 -0
  21. package/dist/guardrails/index.d.ts.map +1 -0
  22. package/dist/guardrails/index.js +11 -0
  23. package/dist/guardrails/index.js.map +1 -0
  24. package/dist/guardrails/plugins/base-plugin.d.ts +35 -0
  25. package/dist/guardrails/plugins/base-plugin.d.ts.map +1 -0
  26. package/dist/guardrails/plugins/base-plugin.js +70 -0
  27. package/dist/guardrails/plugins/base-plugin.js.map +1 -0
  28. package/dist/guardrails/plugins/index.d.ts +6 -0
  29. package/dist/guardrails/plugins/index.d.ts.map +1 -0
  30. package/dist/guardrails/plugins/index.js +6 -0
  31. package/dist/guardrails/plugins/index.js.map +1 -0
  32. package/dist/guardrails/plugins/pattern-blocker.d.ts +27 -0
  33. package/dist/guardrails/plugins/pattern-blocker.d.ts.map +1 -0
  34. package/dist/guardrails/plugins/pattern-blocker.js +140 -0
  35. package/dist/guardrails/plugins/pattern-blocker.js.map +1 -0
  36. package/dist/guardrails/plugins/pii-redactor/detectors.d.ts +40 -0
  37. package/dist/guardrails/plugins/pii-redactor/detectors.d.ts.map +1 -0
  38. package/dist/guardrails/plugins/pii-redactor/detectors.js +134 -0
  39. package/dist/guardrails/plugins/pii-redactor/detectors.js.map +1 -0
  40. package/dist/guardrails/plugins/pii-redactor/index.d.ts +28 -0
  41. package/dist/guardrails/plugins/pii-redactor/index.d.ts.map +1 -0
  42. package/dist/guardrails/plugins/pii-redactor/index.js +157 -0
  43. package/dist/guardrails/plugins/pii-redactor/index.js.map +1 -0
  44. package/dist/guardrails/plugins/pii-redactor/pseudonymizer.d.ts +33 -0
  45. package/dist/guardrails/plugins/pii-redactor/pseudonymizer.d.ts.map +1 -0
  46. package/dist/guardrails/plugins/pii-redactor/pseudonymizer.js +70 -0
  47. package/dist/guardrails/plugins/pii-redactor/pseudonymizer.js.map +1 -0
  48. package/dist/guardrails/plugins/rate-limiter.d.ts +28 -0
  49. package/dist/guardrails/plugins/rate-limiter.d.ts.map +1 -0
  50. package/dist/guardrails/plugins/rate-limiter.js +91 -0
  51. package/dist/guardrails/plugins/rate-limiter.js.map +1 -0
  52. package/dist/guardrails/plugins/token-limiter.d.ts +30 -0
  53. package/dist/guardrails/plugins/token-limiter.d.ts.map +1 -0
  54. package/dist/guardrails/plugins/token-limiter.js +98 -0
  55. package/dist/guardrails/plugins/token-limiter.js.map +1 -0
  56. package/dist/guardrails/service.d.ts +38 -0
  57. package/dist/guardrails/service.d.ts.map +1 -0
  58. package/dist/guardrails/service.js +183 -0
  59. package/dist/guardrails/service.js.map +1 -0
  60. package/dist/guardrails/types.d.ts +96 -0
  61. package/dist/guardrails/types.d.ts.map +1 -0
  62. package/dist/guardrails/types.js +2 -0
  63. package/dist/guardrails/types.js.map +1 -0
  64. package/dist/prompts/architecture.d.ts +6 -0
  65. package/dist/prompts/architecture.d.ts.map +1 -0
  66. package/dist/prompts/architecture.js +103 -0
  67. package/dist/prompts/architecture.js.map +1 -0
  68. package/dist/prompts/assumptions.d.ts +6 -0
  69. package/dist/prompts/assumptions.d.ts.map +1 -0
  70. package/dist/prompts/assumptions.js +72 -0
  71. package/dist/prompts/assumptions.js.map +1 -0
  72. package/dist/prompts/blindspots.d.ts +6 -0
  73. package/dist/prompts/blindspots.d.ts.map +1 -0
  74. package/dist/prompts/blindspots.js +71 -0
  75. package/dist/prompts/blindspots.js.map +1 -0
  76. package/dist/prompts/diverge-converge.d.ts +6 -0
  77. package/dist/prompts/diverge-converge.d.ts.map +1 -0
  78. package/dist/prompts/diverge-converge.js +85 -0
  79. package/dist/prompts/diverge-converge.js.map +1 -0
  80. package/dist/prompts/index.d.ts +22 -0
  81. package/dist/prompts/index.d.ts.map +1 -0
  82. package/dist/prompts/index.js +57 -0
  83. package/dist/prompts/index.js.map +1 -0
  84. package/dist/prompts/perspectives.d.ts +7 -0
  85. package/dist/prompts/perspectives.d.ts.map +1 -0
  86. package/dist/prompts/perspectives.js +65 -0
  87. package/dist/prompts/perspectives.js.map +1 -0
  88. package/dist/prompts/red-team.d.ts +6 -0
  89. package/dist/prompts/red-team.d.ts.map +1 -0
  90. package/dist/prompts/red-team.js +83 -0
  91. package/dist/prompts/red-team.js.map +1 -0
  92. package/dist/prompts/reframe.d.ts +6 -0
  93. package/dist/prompts/reframe.d.ts.map +1 -0
  94. package/dist/prompts/reframe.js +71 -0
  95. package/dist/prompts/reframe.js.map +1 -0
  96. package/dist/prompts/tradeoffs.d.ts +6 -0
  97. package/dist/prompts/tradeoffs.d.ts.map +1 -0
  98. package/dist/prompts/tradeoffs.js +87 -0
  99. package/dist/prompts/tradeoffs.js.map +1 -0
  100. package/dist/prompts/types.d.ts +14 -0
  101. package/dist/prompts/types.d.ts.map +1 -0
  102. package/dist/prompts/types.js +2 -0
  103. package/dist/prompts/types.js.map +1 -0
  104. package/dist/providers/duck-provider-enhanced.d.ts +2 -1
  105. package/dist/providers/duck-provider-enhanced.d.ts.map +1 -1
  106. package/dist/providers/duck-provider-enhanced.js +55 -6
  107. package/dist/providers/duck-provider-enhanced.js.map +1 -1
  108. package/dist/providers/enhanced-manager.d.ts +2 -1
  109. package/dist/providers/enhanced-manager.d.ts.map +1 -1
  110. package/dist/providers/enhanced-manager.js +3 -3
  111. package/dist/providers/enhanced-manager.js.map +1 -1
  112. package/dist/providers/manager.d.ts +3 -1
  113. package/dist/providers/manager.d.ts.map +1 -1
  114. package/dist/providers/manager.js +4 -2
  115. package/dist/providers/manager.js.map +1 -1
  116. package/dist/providers/provider.d.ts +3 -1
  117. package/dist/providers/provider.d.ts.map +1 -1
  118. package/dist/providers/provider.js +43 -3
  119. package/dist/providers/provider.js.map +1 -1
  120. package/dist/server.d.ts +1 -0
  121. package/dist/server.d.ts.map +1 -1
  122. package/dist/server.js +48 -7
  123. package/dist/server.js.map +1 -1
  124. package/dist/services/function-bridge.d.ts +3 -1
  125. package/dist/services/function-bridge.d.ts.map +1 -1
  126. package/dist/services/function-bridge.js +40 -1
  127. package/dist/services/function-bridge.js.map +1 -1
  128. package/package.json +1 -1
  129. package/src/config/config.ts +187 -1
  130. package/src/config/types.ts +73 -0
  131. package/src/guardrails/context.ts +37 -0
  132. package/src/guardrails/errors.ts +46 -0
  133. package/src/guardrails/index.ts +20 -0
  134. package/src/guardrails/plugins/base-plugin.ts +103 -0
  135. package/src/guardrails/plugins/index.ts +5 -0
  136. package/src/guardrails/plugins/pattern-blocker.ts +190 -0
  137. package/src/guardrails/plugins/pii-redactor/detectors.ts +200 -0
  138. package/src/guardrails/plugins/pii-redactor/index.ts +203 -0
  139. package/src/guardrails/plugins/pii-redactor/pseudonymizer.ts +91 -0
  140. package/src/guardrails/plugins/rate-limiter.ts +142 -0
  141. package/src/guardrails/plugins/token-limiter.ts +155 -0
  142. package/src/guardrails/service.ts +209 -0
  143. package/src/guardrails/types.ts +120 -0
  144. package/src/prompts/architecture.ts +111 -0
  145. package/src/prompts/assumptions.ts +80 -0
  146. package/src/prompts/blindspots.ts +79 -0
  147. package/src/prompts/diverge-converge.ts +92 -0
  148. package/src/prompts/index.ts +63 -0
  149. package/src/prompts/perspectives.ts +73 -0
  150. package/src/prompts/red-team.ts +91 -0
  151. package/src/prompts/reframe.ts +78 -0
  152. package/src/prompts/tradeoffs.ts +95 -0
  153. package/src/prompts/types.ts +14 -0
  154. package/src/providers/duck-provider-enhanced.ts +76 -7
  155. package/src/providers/enhanced-manager.ts +5 -3
  156. package/src/providers/manager.ts +6 -3
  157. package/src/providers/provider.ts +57 -6
  158. package/src/server.ts +55 -6
  159. package/src/services/function-bridge.ts +53 -2
  160. package/tests/guardrails/config.test.ts +267 -0
  161. package/tests/guardrails/errors.test.ts +109 -0
  162. package/tests/guardrails/plugins/pattern-blocker.test.ts +309 -0
  163. package/tests/guardrails/plugins/pii-redactor.test.ts +1004 -0
  164. package/tests/guardrails/plugins/rate-limiter.test.ts +310 -0
  165. package/tests/guardrails/plugins/token-limiter.test.ts +216 -0
  166. package/tests/guardrails/service.test.ts +911 -0
  167. package/tests/mcp-bridge.test.ts +248 -0
  168. package/tests/prompts.test.ts +314 -0
  169. package/tests/providers.test.ts +739 -0
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Prompt to surface and challenge hidden assumptions in a plan or design.
3
+ */
4
+ export const assumptionsPrompt = {
5
+ name: 'assumptions',
6
+ description: 'Surface and challenge hidden assumptions in a plan, design, or idea. Identifies implicit premises that could be risky if wrong.',
7
+ arguments: [
8
+ {
9
+ name: 'plan',
10
+ description: 'The plan, design, or idea to analyze for hidden assumptions',
11
+ required: true,
12
+ },
13
+ {
14
+ name: 'constraints',
15
+ description: 'Known hard constraints that are definitely true',
16
+ required: false,
17
+ },
18
+ {
19
+ name: 'concerns',
20
+ description: 'Areas where you feel uncertain or worried',
21
+ required: false,
22
+ },
23
+ ],
24
+ buildMessages: (args) => {
25
+ const { plan, constraints, concerns } = args;
26
+ if (!plan) {
27
+ throw new Error('plan argument is required');
28
+ }
29
+ let messageText = `Please analyze the hidden assumptions in this plan:
30
+
31
+ **PLAN/DESIGN/IDEA:**
32
+ ${plan}
33
+ `;
34
+ if (constraints) {
35
+ messageText += `
36
+ **KNOWN CONSTRAINTS (definitely true):**
37
+ ${constraints}
38
+ `;
39
+ }
40
+ if (concerns) {
41
+ messageText += `
42
+ **MY CONCERNS/UNCERTAINTIES:**
43
+ ${concerns}
44
+ `;
45
+ }
46
+ messageText += `
47
+ **YOUR TASK:**
48
+ Identify the implicit assumptions underlying this plan. For each assumption:
49
+
50
+ 1. **State it explicitly** - What is being assumed without being stated?
51
+ 2. **Criticality** (high/medium/low) - How important is this assumption to the plan's success?
52
+ 3. **Fragility** (high/medium/low) - How likely is this assumption to be wrong?
53
+ 4. **Validation** - How could we test or verify this assumption?
54
+
55
+ Focus on assumptions that:
56
+ - Are easy to overlook
57
+ - Would cause significant problems if wrong
58
+ - Others analyzing this might miss
59
+
60
+ Each LLM should try to find assumptions the others might not catch.`;
61
+ return [
62
+ {
63
+ role: 'user',
64
+ content: {
65
+ type: 'text',
66
+ text: messageText,
67
+ },
68
+ },
69
+ ];
70
+ },
71
+ };
72
+ //# sourceMappingURL=assumptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assumptions.js","sourceRoot":"","sources":["../../src/prompts/assumptions.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqB;IACjD,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,iIAAiI;IACnI,SAAS,EAAE;QACT;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,iDAAiD;YAC9D,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,2CAA2C;YACxD,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,aAAa,EAAE,CAAC,IAA4B,EAAE,EAAE;QAC9C,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAE7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,WAAW,GAAG;;;EAGpB,IAAI;CACL,CAAC;QAEE,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,IAAI;;EAEnB,WAAW;CACZ,CAAC;QACE,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,WAAW,IAAI;;EAEnB,QAAQ;CACT,CAAC;QACE,CAAC;QAED,WAAW,IAAI;;;;;;;;;;;;;;oEAciD,CAAC;QAEjE,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW;iBAClB;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { PromptDefinition } from './types.js';
2
+ /**
3
+ * Prompt to hunt for missing considerations, gaps, and overlooked risks.
4
+ */
5
+ export declare const blindspotsPrompt: PromptDefinition;
6
+ //# sourceMappingURL=blindspots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blindspots.d.ts","sourceRoot":"","sources":["../../src/prompts/blindspots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,gBAyE9B,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Prompt to hunt for missing considerations, gaps, and overlooked risks.
3
+ */
4
+ export const blindspotsPrompt = {
5
+ name: 'blindspots',
6
+ description: 'Hunt for missing considerations, overlooked risks, and gaps in a proposal. Acts as a panel of critical reviewers looking for what might be underweighted.',
7
+ arguments: [
8
+ {
9
+ name: 'proposal',
10
+ description: 'The plan, code, design, or proposal to review for blindspots',
11
+ required: true,
12
+ },
13
+ {
14
+ name: 'covered',
15
+ description: 'What you think you have already addressed or considered',
16
+ required: false,
17
+ },
18
+ {
19
+ name: 'risk_tolerance',
20
+ description: 'Your risk tolerance level: low, medium, or high',
21
+ required: false,
22
+ },
23
+ ],
24
+ buildMessages: (args) => {
25
+ const { proposal, covered, risk_tolerance } = args;
26
+ if (!proposal) {
27
+ throw new Error('proposal argument is required');
28
+ }
29
+ let messageText = `Act as a panel of critical reviewers looking for blindspots.
30
+
31
+ **PROPOSAL TO REVIEW:**
32
+ ${proposal}
33
+ `;
34
+ if (covered) {
35
+ messageText += `
36
+ **ALREADY CONSIDERED:**
37
+ ${covered}
38
+ `;
39
+ }
40
+ if (risk_tolerance) {
41
+ messageText += `
42
+ **RISK TOLERANCE:** ${risk_tolerance}
43
+ `;
44
+ }
45
+ messageText += `
46
+ **YOUR TASK:**
47
+ Each reviewer should identify 2-3 potential blindspots:
48
+
49
+ 1. **Failure modes** - Ways this could fail that aren't being considered
50
+ 2. **Missing considerations** - Important factors that are overlooked
51
+ 3. **Edge cases** - Scenarios that might break assumptions
52
+ 4. **Dependencies** - External factors that could cause problems
53
+
54
+ For each blindspot:
55
+ - Be specific about WHAT the concern is
56
+ - Explain WHY it's concerning (impact if it happens)
57
+ - Suggest potential mitigations
58
+
59
+ Look for things that are easy to miss because they seem "obvious" or fall outside the immediate scope. Different reviewers should explore different angles.`;
60
+ return [
61
+ {
62
+ role: 'user',
63
+ content: {
64
+ type: 'text',
65
+ text: messageText,
66
+ },
67
+ },
68
+ ];
69
+ },
70
+ };
71
+ //# sourceMappingURL=blindspots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blindspots.js","sourceRoot":"","sources":["../../src/prompts/blindspots.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,2JAA2J;IAC7J,SAAS,EAAE;QACT;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,8DAA8D;YAC3E,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,yDAAyD;YACtE,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,iDAAiD;YAC9D,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,aAAa,EAAE,CAAC,IAA4B,EAAE,EAAE;QAC9C,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;QAEnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,WAAW,GAAG;;;EAGpB,QAAQ;CACT,CAAC;QAEE,IAAI,OAAO,EAAE,CAAC;YACZ,WAAW,IAAI;;EAEnB,OAAO;CACR,CAAC;QACE,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,WAAW,IAAI;sBACC,cAAc;CACnC,CAAC;QACE,CAAC;QAED,WAAW,IAAI;;;;;;;;;;;;;;4JAcyI,CAAC;QAEzJ,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW;iBAClB;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { PromptDefinition } from './types.js';
2
+ /**
3
+ * Prompt for divergent exploration followed by convergence.
4
+ */
5
+ export declare const divergeConvergePrompt: PromptDefinition;
6
+ //# sourceMappingURL=diverge-converge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diverge-converge.d.ts","sourceRoot":"","sources":["../../src/prompts/diverge-converge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,gBAsFnC,CAAC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Prompt for divergent exploration followed by convergence.
3
+ */
4
+ export const divergeConvergePrompt = {
5
+ name: 'diverge_converge',
6
+ description: 'Structure divergent thinking (explore many options) followed by convergence (evaluate and select). Maximizes creative exploration before narrowing down.',
7
+ arguments: [
8
+ {
9
+ name: 'challenge',
10
+ description: 'The problem or challenge to solve',
11
+ required: true,
12
+ },
13
+ {
14
+ name: 'width',
15
+ description: 'Exploration width: "wild" for creative/unconventional, "focused" for practical',
16
+ required: false,
17
+ },
18
+ {
19
+ name: 'convergence_criteria',
20
+ description: 'What makes a solution "good" - criteria for evaluating options',
21
+ required: false,
22
+ },
23
+ ],
24
+ buildMessages: (args) => {
25
+ const { challenge, width, convergence_criteria } = args;
26
+ if (!challenge) {
27
+ throw new Error('challenge argument is required');
28
+ }
29
+ const explorationMode = width || 'balanced';
30
+ const criteria = convergence_criteria || 'feasibility, impact, and effort required';
31
+ let messageText = `Let's use divergent-then-convergent thinking:
32
+
33
+ **CHALLENGE:**
34
+ ${challenge}
35
+
36
+ **EXPLORATION MODE:** ${explorationMode}
37
+ **SUCCESS CRITERIA:** ${criteria}
38
+
39
+ ---
40
+
41
+ ## PHASE 1: DIVERGE
42
+
43
+ Each LLM should propose 2-3 **substantially DIFFERENT** approaches. The goal is diversity, not agreement.
44
+
45
+ Guidelines:
46
+ - Maximize variety in your proposals
47
+ - Include at least one unconventional or surprising idea
48
+ - Don't self-censor "crazy" ideas yet
49
+ - Brief descriptions are fine - we'll evaluate later
50
+ `;
51
+ if (explorationMode === 'wild') {
52
+ messageText += `- Push boundaries - what would you suggest if there were no constraints?
53
+ `;
54
+ }
55
+ else if (explorationMode === 'focused') {
56
+ messageText += `- Stay practical - focus on implementable solutions
57
+ `;
58
+ }
59
+ messageText += `
60
+ ---
61
+
62
+ ## PHASE 2: CONVERGE
63
+
64
+ After all options are on the table, evaluate them against the success criteria:
65
+
66
+ 1. **Quick assessment** of each option against: ${criteria}
67
+ 2. **Identify top 2-3 candidates** that best meet the criteria
68
+ 3. **Hybrid opportunities** - can elements from different approaches be combined?
69
+ 4. **Recommendation** - which approach (or combination) should we pursue?
70
+
71
+ ---
72
+
73
+ Start with Phase 1 - generate diverse options first, then we'll converge.`;
74
+ return [
75
+ {
76
+ role: 'user',
77
+ content: {
78
+ type: 'text',
79
+ text: messageText,
80
+ },
81
+ },
82
+ ];
83
+ },
84
+ };
85
+ //# sourceMappingURL=diverge-converge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diverge-converge.js","sourceRoot":"","sources":["../../src/prompts/diverge-converge.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAqB;IACrD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,0JAA0J;IAC5J,SAAS,EAAE;QACT;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,mCAAmC;YAChD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,gFAAgF;YAC7F,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,gEAAgE;YAC7E,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,aAAa,EAAE,CAAC,IAA4B,EAAE,EAAE;QAC9C,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;QAExD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,eAAe,GAAG,KAAK,IAAI,UAAU,CAAC;QAC5C,MAAM,QAAQ,GAAG,oBAAoB,IAAI,0CAA0C,CAAC;QAEpF,IAAI,WAAW,GAAG;;;EAGpB,SAAS;;wBAEa,eAAe;wBACf,QAAQ;;;;;;;;;;;;;CAa/B,CAAC;QAEE,IAAI,eAAe,KAAK,MAAM,EAAE,CAAC;YAC/B,WAAW,IAAI;CACpB,CAAC;QACE,CAAC;aAAM,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YACzC,WAAW,IAAI;CACpB,CAAC;QACE,CAAC;QAED,WAAW,IAAI;;;;;;;kDAO+B,QAAQ;;;;;;;0EAOgB,CAAC;QAEvE,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW;iBAClB;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { Prompt, GetPromptResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import { PromptDefinition } from './types.js';
3
+ /**
4
+ * Registry of all available prompts.
5
+ */
6
+ export declare const PROMPTS: Record<string, PromptDefinition>;
7
+ /**
8
+ * Get all available prompts (without buildMessages function).
9
+ * Used for prompts/list handler.
10
+ */
11
+ export declare function getPrompts(): Prompt[];
12
+ /**
13
+ * Get a specific prompt with generated messages.
14
+ * Used for prompts/get handler.
15
+ *
16
+ * @param name - The prompt name
17
+ * @param args - Arguments to pass to the prompt
18
+ * @returns GetPromptResult with description and messages
19
+ * @throws Error if prompt not found or required arguments missing
20
+ */
21
+ export declare function getPrompt(name: string, args: Record<string, string>): GetPromptResult;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAY9C;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CASpD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAErC;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,eAAe,CAkBrF"}
@@ -0,0 +1,57 @@
1
+ // Import all prompt definitions
2
+ import { perspectivesPrompt } from './perspectives.js';
3
+ import { assumptionsPrompt } from './assumptions.js';
4
+ import { blindspotsPrompt } from './blindspots.js';
5
+ import { tradeoffsPrompt } from './tradeoffs.js';
6
+ import { redTeamPrompt } from './red-team.js';
7
+ import { reframePrompt } from './reframe.js';
8
+ import { architecturePrompt } from './architecture.js';
9
+ import { divergeConvergePrompt } from './diverge-converge.js';
10
+ /**
11
+ * Registry of all available prompts.
12
+ */
13
+ export const PROMPTS = {
14
+ perspectives: perspectivesPrompt,
15
+ assumptions: assumptionsPrompt,
16
+ blindspots: blindspotsPrompt,
17
+ tradeoffs: tradeoffsPrompt,
18
+ red_team: redTeamPrompt,
19
+ reframe: reframePrompt,
20
+ architecture: architecturePrompt,
21
+ diverge_converge: divergeConvergePrompt,
22
+ };
23
+ /**
24
+ * Get all available prompts (without buildMessages function).
25
+ * Used for prompts/list handler.
26
+ */
27
+ export function getPrompts() {
28
+ return Object.values(PROMPTS).map(({ buildMessages: _, ...prompt }) => prompt);
29
+ }
30
+ /**
31
+ * Get a specific prompt with generated messages.
32
+ * Used for prompts/get handler.
33
+ *
34
+ * @param name - The prompt name
35
+ * @param args - Arguments to pass to the prompt
36
+ * @returns GetPromptResult with description and messages
37
+ * @throws Error if prompt not found or required arguments missing
38
+ */
39
+ export function getPrompt(name, args) {
40
+ const prompt = PROMPTS[name];
41
+ if (!prompt) {
42
+ throw new Error(`Unknown prompt: ${name}`);
43
+ }
44
+ try {
45
+ const messages = prompt.buildMessages(args);
46
+ return {
47
+ description: prompt.description,
48
+ messages,
49
+ };
50
+ }
51
+ catch (error) {
52
+ // Re-throw with more context
53
+ const errorMessage = error instanceof Error ? error.message : String(error);
54
+ throw new Error(`Failed to build prompt "${name}": ${errorMessage}`);
55
+ }
56
+ }
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAGA,gCAAgC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAqC;IACvD,YAAY,EAAE,kBAAkB;IAChC,WAAW,EAAE,iBAAiB;IAC9B,UAAU,EAAE,gBAAgB;IAC5B,SAAS,EAAE,eAAe;IAC1B,QAAQ,EAAE,aAAa;IACvB,OAAO,EAAE,aAAa;IACtB,YAAY,EAAE,kBAAkB;IAChC,gBAAgB,EAAE,qBAAqB;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;AACjF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAA4B;IAClE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5C,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,6BAA6B;QAC7B,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,MAAM,YAAY,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { PromptDefinition } from './types.js';
2
+ /**
3
+ * Multi-angle analysis prompt that assigns different analytical lenses
4
+ * to each LLM for comprehensive analysis.
5
+ */
6
+ export declare const perspectivesPrompt: PromptDefinition;
7
+ //# sourceMappingURL=perspectives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perspectives.d.ts","sourceRoot":"","sources":["../../src/prompts/perspectives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAkEhC,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Multi-angle analysis prompt that assigns different analytical lenses
3
+ * to each LLM for comprehensive analysis.
4
+ */
5
+ export const perspectivesPrompt = {
6
+ name: 'perspectives',
7
+ description: 'Analyze a problem from multiple perspectives. Each LLM adopts a different analytical lens (e.g., security, performance, UX) for comprehensive multi-angle analysis.',
8
+ arguments: [
9
+ {
10
+ name: 'problem',
11
+ description: 'The problem, design, or code to analyze',
12
+ required: true,
13
+ },
14
+ {
15
+ name: 'perspectives',
16
+ description: 'Comma-separated analytical lenses (e.g., "security, performance, UX, maintainability")',
17
+ required: true,
18
+ },
19
+ {
20
+ name: 'context',
21
+ description: 'Additional background or constraints',
22
+ required: false,
23
+ },
24
+ ],
25
+ buildMessages: (args) => {
26
+ const { problem, perspectives, context } = args;
27
+ if (!problem) {
28
+ throw new Error('problem argument is required');
29
+ }
30
+ if (!perspectives) {
31
+ throw new Error('perspectives argument is required');
32
+ }
33
+ let messageText = `I need multi-perspective analysis of this problem:
34
+
35
+ **PROBLEM:**
36
+ ${problem}
37
+ `;
38
+ if (context) {
39
+ messageText += `
40
+ **CONTEXT:**
41
+ ${context}
42
+ `;
43
+ }
44
+ messageText += `
45
+ **PERSPECTIVES TO ANALYZE:**
46
+ ${perspectives}
47
+
48
+ Please analyze from these perspectives, with each LLM adopting ONE lens. Each perspective should provide:
49
+ 1. Specific observations from that viewpoint
50
+ 2. Potential concerns or issues
51
+ 3. Recommendations aligned with that perspective
52
+
53
+ Aim for productive disagreement - different lenses may have conflicting priorities, and that's valuable.`;
54
+ return [
55
+ {
56
+ role: 'user',
57
+ content: {
58
+ type: 'text',
59
+ text: messageText,
60
+ },
61
+ },
62
+ ];
63
+ },
64
+ };
65
+ //# sourceMappingURL=perspectives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perspectives.js","sourceRoot":"","sources":["../../src/prompts/perspectives.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAqB;IAClD,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,qKAAqK;IACvK,SAAS,EAAE;QACT;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,yCAAyC;YACtD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EACT,wFAAwF;YAC1F,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,sCAAsC;YACnD,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,aAAa,EAAE,CAAC,IAA4B,EAAE,EAAE;QAC9C,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,WAAW,GAAG;;;EAGpB,OAAO;CACR,CAAC;QAEE,IAAI,OAAO,EAAE,CAAC;YACZ,WAAW,IAAI;;EAEnB,OAAO;CACR,CAAC;QACE,CAAC;QAED,WAAW,IAAI;;EAEjB,YAAY;;;;;;;yGAO2F,CAAC;QAEtG,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW;iBAClB;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { PromptDefinition } from './types.js';
2
+ /**
3
+ * Prompt for security and risk analysis from multiple attack angles.
4
+ */
5
+ export declare const redTeamPrompt: PromptDefinition;
6
+ //# sourceMappingURL=red-team.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"red-team.d.ts","sourceRoot":"","sources":["../../src/prompts/red-team.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,gBAqF3B,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Prompt for security and risk analysis from multiple attack angles.
3
+ */
4
+ export const redTeamPrompt = {
5
+ name: 'red_team',
6
+ description: 'Conduct attack surface analysis from multiple angles. Each reviewer focuses on different risk dimensions (security, privacy, abuse, compliance).',
7
+ arguments: [
8
+ {
9
+ name: 'target',
10
+ description: 'The system, feature, code, or plan to red-team',
11
+ required: true,
12
+ },
13
+ {
14
+ name: 'threat_model',
15
+ description: 'Known threat actors, attack scenarios, or security context',
16
+ required: false,
17
+ },
18
+ {
19
+ name: 'dimensions',
20
+ description: 'Risk dimensions to focus on (e.g., "security, privacy, abuse, compliance, reputation")',
21
+ required: false,
22
+ },
23
+ ],
24
+ buildMessages: (args) => {
25
+ const { target, threat_model, dimensions } = args;
26
+ if (!target) {
27
+ throw new Error('target argument is required');
28
+ }
29
+ let messageText = `Conduct a red-team analysis of this target:
30
+
31
+ **TARGET:**
32
+ ${target}
33
+ `;
34
+ if (threat_model) {
35
+ messageText += `
36
+ **THREAT MODEL/CONTEXT:**
37
+ ${threat_model}
38
+ `;
39
+ }
40
+ if (dimensions) {
41
+ messageText += `
42
+ **RISK DIMENSIONS TO FOCUS ON:**
43
+ ${dimensions}
44
+ `;
45
+ }
46
+ else {
47
+ messageText += `
48
+ **RISK DIMENSIONS:**
49
+ Consider security, privacy, abuse potential, compliance, and reputation risks.
50
+ `;
51
+ }
52
+ messageText += `
53
+ **YOUR TASK:**
54
+ Each reviewer should focus on a different attack vector or risk dimension:
55
+
56
+ 1. **Identify vulnerabilities or abuse scenarios**
57
+ - How could this be exploited or misused?
58
+ - What could go wrong?
59
+
60
+ 2. **Rate each finding**
61
+ - Severity: How bad if it happens?
62
+ - Likelihood: How likely is exploitation?
63
+
64
+ 3. **Suggest mitigations**
65
+ - How can each risk be reduced or eliminated?
66
+ - What's the cost/benefit of the mitigation?
67
+
68
+ **PRIORITIZE:**
69
+ Identify the top 3 risks that need immediate attention. Explain why these are most critical.
70
+
71
+ Think adversarially - what would a malicious actor, careless user, or edge case do?`;
72
+ return [
73
+ {
74
+ role: 'user',
75
+ content: {
76
+ type: 'text',
77
+ text: messageText,
78
+ },
79
+ },
80
+ ];
81
+ },
82
+ };
83
+ //# sourceMappingURL=red-team.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"red-team.js","sourceRoot":"","sources":["../../src/prompts/red-team.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,kJAAkJ;IACpJ,SAAS,EAAE;QACT;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gDAAgD;YAC7D,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,4DAA4D;YACzE,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EACT,wFAAwF;YAC1F,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,aAAa,EAAE,CAAC,IAA4B,EAAE,EAAE;QAC9C,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAElD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,WAAW,GAAG;;;EAGpB,MAAM;CACP,CAAC;QAEE,IAAI,YAAY,EAAE,CAAC;YACjB,WAAW,IAAI;;EAEnB,YAAY;CACb,CAAC;QACE,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,WAAW,IAAI;;EAEnB,UAAU;CACX,CAAC;QACE,CAAC;aAAM,CAAC;YACN,WAAW,IAAI;;;CAGpB,CAAC;QACE,CAAC;QAED,WAAW,IAAI;;;;;;;;;;;;;;;;;;;oFAmBiE,CAAC;QAEjF,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW;iBAClB;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { PromptDefinition } from './types.js';
2
+ /**
3
+ * Prompt for problem reframing at different abstraction levels and angles.
4
+ */
5
+ export declare const reframePrompt: PromptDefinition;
6
+ //# sourceMappingURL=reframe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reframe.d.ts","sourceRoot":"","sources":["../../src/prompts/reframe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,gBAwE3B,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Prompt for problem reframing at different abstraction levels and angles.
3
+ */
4
+ export const reframePrompt = {
5
+ name: 'reframe',
6
+ description: 'Reframe a problem from multiple angles and abstraction levels. Helps break out of mental ruts by viewing the problem differently.',
7
+ arguments: [
8
+ {
9
+ name: 'problem',
10
+ description: 'The current problem statement or challenge',
11
+ required: true,
12
+ },
13
+ {
14
+ name: 'stuck_on',
15
+ description: 'What specifically you are stuck on or frustrated by',
16
+ required: false,
17
+ },
18
+ ],
19
+ buildMessages: (args) => {
20
+ const { problem, stuck_on } = args;
21
+ if (!problem) {
22
+ throw new Error('problem argument is required');
23
+ }
24
+ let messageText = `Help me reframe this problem from multiple angles:
25
+
26
+ **CURRENT PROBLEM:**
27
+ ${problem}
28
+ `;
29
+ if (stuck_on) {
30
+ messageText += `
31
+ **WHAT I'M STUCK ON:**
32
+ ${stuck_on}
33
+ `;
34
+ }
35
+ messageText += `
36
+ **YOUR TASK:**
37
+ Provide three distinct reframings of this problem:
38
+
39
+ 1. **HIGHER ABSTRACTION**
40
+ - What's the core human need or job-to-be-done here?
41
+ - What problem behind the problem are we really solving?
42
+ - How might we phrase this as a "How might we...?" question?
43
+
44
+ 2. **INVERSION**
45
+ - What if we wanted this problem to occur? How would we cause it?
46
+ - What's the opposite of what we're trying to achieve?
47
+ - What would make this problem impossible to solve?
48
+
49
+ 3. **SIMPLIFICATION**
50
+ - How would you explain this to a non-expert?
51
+ - What's the simplest version of this problem?
52
+ - What would a child ask about this?
53
+
54
+ For each reframing:
55
+ - State the new problem formulation clearly
56
+ - Explain what new solution directions this opens up
57
+ - Note what aspects of the original problem this highlights or de-emphasizes
58
+
59
+ The goal is to break out of the current mental frame and see new possibilities.`;
60
+ return [
61
+ {
62
+ role: 'user',
63
+ content: {
64
+ type: 'text',
65
+ text: messageText,
66
+ },
67
+ },
68
+ ];
69
+ },
70
+ };
71
+ //# sourceMappingURL=reframe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reframe.js","sourceRoot":"","sources":["../../src/prompts/reframe.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,IAAI,EAAE,SAAS;IACf,WAAW,EACT,mIAAmI;IACrI,SAAS,EAAE;QACT;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,aAAa,EAAE,CAAC,IAA4B,EAAE,EAAE;QAC9C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,WAAW,GAAG;;;EAGpB,OAAO;CACR,CAAC;QAEE,IAAI,QAAQ,EAAE,CAAC;YACb,WAAW,IAAI;;EAEnB,QAAQ;CACT,CAAC;QACE,CAAC;QAED,WAAW,IAAI;;;;;;;;;;;;;;;;;;;;;;;;gFAwB6D,CAAC;QAE7E,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW;iBAClB;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { PromptDefinition } from './types.js';
2
+ /**
3
+ * Prompt for structured comparison of options with explicit criteria.
4
+ */
5
+ export declare const tradeoffsPrompt: PromptDefinition;
6
+ //# sourceMappingURL=tradeoffs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tradeoffs.d.ts","sourceRoot":"","sources":["../../src/prompts/tradeoffs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,gBAyF7B,CAAC"}