openplanr 0.1.0 → 0.2.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 (194) hide show
  1. package/dist/agents/agent-factory.d.ts +7 -0
  2. package/dist/agents/agent-factory.d.ts.map +1 -0
  3. package/dist/agents/agent-factory.js +22 -0
  4. package/dist/agents/agent-factory.js.map +1 -0
  5. package/dist/agents/claude-agent.d.ts +13 -0
  6. package/dist/agents/claude-agent.d.ts.map +1 -0
  7. package/dist/agents/claude-agent.js +48 -0
  8. package/dist/agents/claude-agent.js.map +1 -0
  9. package/dist/agents/codex-agent.d.ts +13 -0
  10. package/dist/agents/codex-agent.d.ts.map +1 -0
  11. package/dist/agents/codex-agent.js +47 -0
  12. package/dist/agents/codex-agent.js.map +1 -0
  13. package/dist/agents/cursor-agent.d.ts +13 -0
  14. package/dist/agents/cursor-agent.d.ts.map +1 -0
  15. package/dist/agents/cursor-agent.js +40 -0
  16. package/dist/agents/cursor-agent.js.map +1 -0
  17. package/dist/agents/implementation-bridge.d.ts +21 -0
  18. package/dist/agents/implementation-bridge.d.ts.map +1 -0
  19. package/dist/agents/implementation-bridge.js +173 -0
  20. package/dist/agents/implementation-bridge.js.map +1 -0
  21. package/dist/agents/index.d.ts +6 -0
  22. package/dist/agents/index.d.ts.map +1 -0
  23. package/dist/agents/index.js +5 -0
  24. package/dist/agents/index.js.map +1 -0
  25. package/dist/agents/prompt-composer.d.ts +30 -0
  26. package/dist/agents/prompt-composer.d.ts.map +1 -0
  27. package/dist/agents/prompt-composer.js +81 -0
  28. package/dist/agents/prompt-composer.js.map +1 -0
  29. package/dist/agents/task-parser.d.ts +38 -0
  30. package/dist/agents/task-parser.d.ts.map +1 -0
  31. package/dist/agents/task-parser.js +83 -0
  32. package/dist/agents/task-parser.js.map +1 -0
  33. package/dist/agents/types.d.ts +23 -0
  34. package/dist/agents/types.d.ts.map +1 -0
  35. package/dist/agents/types.js +8 -0
  36. package/dist/agents/types.js.map +1 -0
  37. package/dist/agents/utils.d.ts +9 -0
  38. package/dist/agents/utils.d.ts.map +1 -0
  39. package/dist/agents/utils.js +21 -0
  40. package/dist/agents/utils.js.map +1 -0
  41. package/dist/ai/codebase/context-builder.d.ts +31 -0
  42. package/dist/ai/codebase/context-builder.d.ts.map +1 -0
  43. package/dist/ai/codebase/context-builder.js +93 -0
  44. package/dist/ai/codebase/context-builder.js.map +1 -0
  45. package/dist/ai/codebase/file-reader.d.ts +22 -0
  46. package/dist/ai/codebase/file-reader.d.ts.map +1 -0
  47. package/dist/ai/codebase/file-reader.js +111 -0
  48. package/dist/ai/codebase/file-reader.js.map +1 -0
  49. package/dist/ai/codebase/index.d.ts +5 -0
  50. package/dist/ai/codebase/index.d.ts.map +1 -0
  51. package/dist/ai/codebase/index.js +5 -0
  52. package/dist/ai/codebase/index.js.map +1 -0
  53. package/dist/ai/codebase/stack-detector.d.ts +18 -0
  54. package/dist/ai/codebase/stack-detector.d.ts.map +1 -0
  55. package/dist/ai/codebase/stack-detector.js +147 -0
  56. package/dist/ai/codebase/stack-detector.js.map +1 -0
  57. package/dist/ai/codebase/tree-generator.d.ts +8 -0
  58. package/dist/ai/codebase/tree-generator.d.ts.map +1 -0
  59. package/dist/ai/codebase/tree-generator.js +85 -0
  60. package/dist/ai/codebase/tree-generator.js.map +1 -0
  61. package/dist/ai/errors.d.ts +22 -0
  62. package/dist/ai/errors.d.ts.map +1 -0
  63. package/dist/ai/errors.js +70 -0
  64. package/dist/ai/errors.js.map +1 -0
  65. package/dist/ai/index.d.ts +11 -0
  66. package/dist/ai/index.d.ts.map +1 -0
  67. package/dist/ai/index.js +10 -0
  68. package/dist/ai/index.js.map +1 -0
  69. package/dist/ai/prompts/prompt-builder.d.ts +42 -0
  70. package/dist/ai/prompts/prompt-builder.d.ts.map +1 -0
  71. package/dist/ai/prompts/prompt-builder.js +96 -0
  72. package/dist/ai/prompts/prompt-builder.js.map +1 -0
  73. package/dist/ai/prompts/system-prompts.d.ts +13 -0
  74. package/dist/ai/prompts/system-prompts.d.ts.map +1 -0
  75. package/dist/ai/prompts/system-prompts.js +115 -0
  76. package/dist/ai/prompts/system-prompts.js.map +1 -0
  77. package/dist/ai/provider-factory.d.ts +10 -0
  78. package/dist/ai/provider-factory.d.ts.map +1 -0
  79. package/dist/ai/provider-factory.js +33 -0
  80. package/dist/ai/provider-factory.js.map +1 -0
  81. package/dist/ai/providers/anthropic-provider.d.ts +22 -0
  82. package/dist/ai/providers/anthropic-provider.d.ts.map +1 -0
  83. package/dist/ai/providers/anthropic-provider.js +82 -0
  84. package/dist/ai/providers/anthropic-provider.js.map +1 -0
  85. package/dist/ai/providers/ollama-provider.d.ts +13 -0
  86. package/dist/ai/providers/ollama-provider.d.ts.map +1 -0
  87. package/dist/ai/providers/ollama-provider.js +16 -0
  88. package/dist/ai/providers/ollama-provider.js.map +1 -0
  89. package/dist/ai/providers/openai-provider.d.ts +17 -0
  90. package/dist/ai/providers/openai-provider.d.ts.map +1 -0
  91. package/dist/ai/providers/openai-provider.js +58 -0
  92. package/dist/ai/providers/openai-provider.js.map +1 -0
  93. package/dist/ai/schemas/ai-response-schemas.d.ts +422 -0
  94. package/dist/ai/schemas/ai-response-schemas.d.ts.map +1 -0
  95. package/dist/ai/schemas/ai-response-schemas.js +86 -0
  96. package/dist/ai/schemas/ai-response-schemas.js.map +1 -0
  97. package/dist/ai/types.d.ts +40 -0
  98. package/dist/ai/types.d.ts.map +1 -0
  99. package/dist/ai/types.js +16 -0
  100. package/dist/ai/types.js.map +1 -0
  101. package/dist/cli/commands/config.d.ts +8 -0
  102. package/dist/cli/commands/config.d.ts.map +1 -0
  103. package/dist/cli/commands/config.js +112 -0
  104. package/dist/cli/commands/config.js.map +1 -0
  105. package/dist/cli/commands/epic.d.ts +7 -0
  106. package/dist/cli/commands/epic.d.ts.map +1 -1
  107. package/dist/cli/commands/epic.js +161 -31
  108. package/dist/cli/commands/epic.js.map +1 -1
  109. package/dist/cli/commands/feature.d.ts +6 -0
  110. package/dist/cli/commands/feature.d.ts.map +1 -1
  111. package/dist/cli/commands/feature.js +143 -30
  112. package/dist/cli/commands/feature.js.map +1 -1
  113. package/dist/cli/commands/init.d.ts +6 -0
  114. package/dist/cli/commands/init.d.ts.map +1 -1
  115. package/dist/cli/commands/init.js +48 -6
  116. package/dist/cli/commands/init.js.map +1 -1
  117. package/dist/cli/commands/plan.d.ts +15 -0
  118. package/dist/cli/commands/plan.d.ts.map +1 -0
  119. package/dist/cli/commands/plan.js +259 -0
  120. package/dist/cli/commands/plan.js.map +1 -0
  121. package/dist/cli/commands/refine.d.ts +9 -0
  122. package/dist/cli/commands/refine.d.ts.map +1 -0
  123. package/dist/cli/commands/refine.js +81 -0
  124. package/dist/cli/commands/refine.js.map +1 -0
  125. package/dist/cli/commands/story.d.ts +6 -0
  126. package/dist/cli/commands/story.d.ts.map +1 -1
  127. package/dist/cli/commands/story.js +172 -43
  128. package/dist/cli/commands/story.js.map +1 -1
  129. package/dist/cli/commands/sync.d.ts +12 -0
  130. package/dist/cli/commands/sync.d.ts.map +1 -0
  131. package/dist/cli/commands/sync.js +226 -0
  132. package/dist/cli/commands/sync.js.map +1 -0
  133. package/dist/cli/commands/task.d.ts +9 -0
  134. package/dist/cli/commands/task.d.ts.map +1 -1
  135. package/dist/cli/commands/task.js +348 -35
  136. package/dist/cli/commands/task.js.map +1 -1
  137. package/dist/cli/index.js +10 -2
  138. package/dist/cli/index.js.map +1 -1
  139. package/dist/models/schema.d.ts +41 -0
  140. package/dist/models/schema.d.ts.map +1 -1
  141. package/dist/models/schema.js +9 -0
  142. package/dist/models/schema.js.map +1 -1
  143. package/dist/models/types.d.ts +9 -0
  144. package/dist/models/types.d.ts.map +1 -1
  145. package/dist/services/ai-service.d.ts +40 -0
  146. package/dist/services/ai-service.d.ts.map +1 -0
  147. package/dist/services/ai-service.js +150 -0
  148. package/dist/services/ai-service.js.map +1 -0
  149. package/dist/services/artifact-gathering.d.ts +49 -0
  150. package/dist/services/artifact-gathering.d.ts.map +1 -0
  151. package/dist/services/artifact-gathering.js +128 -0
  152. package/dist/services/artifact-gathering.js.map +1 -0
  153. package/dist/services/artifact-service.d.ts +47 -0
  154. package/dist/services/artifact-service.d.ts.map +1 -1
  155. package/dist/services/artifact-service.js +166 -0
  156. package/dist/services/artifact-service.js.map +1 -1
  157. package/dist/services/credentials-service.d.ts +22 -0
  158. package/dist/services/credentials-service.d.ts.map +1 -0
  159. package/dist/services/credentials-service.js +58 -0
  160. package/dist/services/credentials-service.js.map +1 -0
  161. package/dist/services/id-service.d.ts.map +1 -1
  162. package/dist/services/id-service.js +8 -5
  163. package/dist/services/id-service.js.map +1 -1
  164. package/dist/services/prompt-service.d.ts +1 -0
  165. package/dist/services/prompt-service.d.ts.map +1 -1
  166. package/dist/services/prompt-service.js +4 -1
  167. package/dist/services/prompt-service.js.map +1 -1
  168. package/dist/services/template-service.d.ts.map +1 -1
  169. package/dist/services/template-service.js +1 -0
  170. package/dist/services/template-service.js.map +1 -1
  171. package/dist/templates/checklists/agile-checklist.md.hbs +8 -8
  172. package/dist/templates/epics/epic.md.hbs +8 -2
  173. package/dist/templates/features/feature.md.hbs +3 -3
  174. package/dist/templates/rules/cursor/2001-agile-create-epic.mdc.hbs +1 -1
  175. package/dist/templates/rules/cursor/2002-agile-create-features.mdc.hbs +1 -1
  176. package/dist/templates/rules/cursor/2003-agile-create-user-story.mdc.hbs +1 -1
  177. package/dist/templates/stories/user-story.md.hbs +2 -2
  178. package/dist/templates/tasks/task-list.md.hbs +26 -3
  179. package/package.json +4 -2
  180. package/dist/templates/templates/adrs/adr-general.md.hbs +0 -46
  181. package/dist/templates/templates/checklists/agile-checklist.md.hbs +0 -49
  182. package/dist/templates/templates/epics/epic.md.hbs +0 -46
  183. package/dist/templates/templates/features/feature.md.hbs +0 -42
  184. package/dist/templates/templates/rules/claude/CLAUDE.md.hbs +0 -63
  185. package/dist/templates/templates/rules/codex/AGENTS.md.hbs +0 -28
  186. package/dist/templates/templates/rules/cursor/2000-agile-checklist.mdc.hbs +0 -33
  187. package/dist/templates/templates/rules/cursor/2001-agile-create-epic.mdc.hbs +0 -35
  188. package/dist/templates/templates/rules/cursor/2002-agile-create-features.mdc.hbs +0 -35
  189. package/dist/templates/templates/rules/cursor/2003-agile-create-user-story.mdc.hbs +0 -31
  190. package/dist/templates/templates/rules/cursor/2100-create-task-list.mdc.hbs +0 -36
  191. package/dist/templates/templates/rules/cursor/2101-implement-task-list.mdc.hbs +0 -28
  192. package/dist/templates/templates/stories/gherkin.feature.hbs +0 -13
  193. package/dist/templates/templates/stories/user-story.md.hbs +0 -28
  194. package/dist/templates/templates/tasks/task-list.md.hbs +0 -24
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Anthropic Claude provider implementation.
3
+ *
4
+ * Uses the official @anthropic-ai/sdk with streaming support.
5
+ * Lazily imported to avoid loading the SDK until actually needed.
6
+ */
7
+ import type { AIProvider, AIMessage, AIRequestOptions, AIProviderName } from '../types.js';
8
+ export declare class AnthropicProvider implements AIProvider {
9
+ readonly name: AIProviderName;
10
+ readonly model: string;
11
+ private clientPromise;
12
+ constructor(apiKey: string, model?: string);
13
+ private initClient;
14
+ chat(messages: AIMessage[], options?: AIRequestOptions): AsyncIterable<string>;
15
+ chatSync(messages: AIMessage[], options?: AIRequestOptions): Promise<string>;
16
+ /**
17
+ * Anthropic's API uses a separate `system` parameter rather than
18
+ * a system role in the messages array.
19
+ */
20
+ private splitSystemMessage;
21
+ }
22
+ //# sourceMappingURL=anthropic-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-provider.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/anthropic-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG3F,qBAAa,iBAAkB,YAAW,UAAU;IAClD,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAe;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,aAAa,CAAoE;gBAE7E,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;YAK5B,UAAU;IAKjB,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC;IA6B/E,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IA4BlF;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAQ3B"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Anthropic Claude provider implementation.
3
+ *
4
+ * Uses the official @anthropic-ai/sdk with streaming support.
5
+ * Lazily imported to avoid loading the SDK until actually needed.
6
+ */
7
+ import { wrapProviderError } from '../errors.js';
8
+ export class AnthropicProvider {
9
+ name = 'anthropic';
10
+ model;
11
+ clientPromise;
12
+ constructor(apiKey, model) {
13
+ this.model = model || 'claude-sonnet-4-20250514';
14
+ this.clientPromise = this.initClient(apiKey);
15
+ }
16
+ async initClient(apiKey) {
17
+ const { default: Anthropic } = await import('@anthropic-ai/sdk');
18
+ return new Anthropic({ apiKey });
19
+ }
20
+ async *chat(messages, options) {
21
+ const client = await this.clientPromise;
22
+ const { system, userMessages } = this.splitSystemMessage(messages);
23
+ try {
24
+ const stream = client.messages.stream({
25
+ model: this.model,
26
+ max_tokens: options?.maxTokens || 4096,
27
+ temperature: options?.temperature ?? 0.7,
28
+ system: system || undefined,
29
+ messages: userMessages.map((m) => ({
30
+ role: m.role,
31
+ content: m.content,
32
+ })),
33
+ });
34
+ for await (const event of stream) {
35
+ if (event.type === 'content_block_delta' &&
36
+ event.delta.type === 'text_delta') {
37
+ yield event.delta.text;
38
+ }
39
+ }
40
+ }
41
+ catch (err) {
42
+ throw wrapProviderError(err, 'anthropic');
43
+ }
44
+ }
45
+ async chatSync(messages, options) {
46
+ const client = await this.clientPromise;
47
+ const { system, userMessages } = this.splitSystemMessage(messages);
48
+ try {
49
+ const response = await client.messages.create({
50
+ model: this.model,
51
+ max_tokens: options?.maxTokens || 4096,
52
+ temperature: options?.temperature ?? 0.7,
53
+ system: system || undefined,
54
+ messages: userMessages.map((m) => ({
55
+ role: m.role,
56
+ content: m.content,
57
+ })),
58
+ });
59
+ return response.content
60
+ .filter((block) => block.type === 'text')
61
+ .map((block) => {
62
+ if (block.type === 'text')
63
+ return block.text;
64
+ return '';
65
+ })
66
+ .join('');
67
+ }
68
+ catch (err) {
69
+ throw wrapProviderError(err, 'anthropic');
70
+ }
71
+ }
72
+ /**
73
+ * Anthropic's API uses a separate `system` parameter rather than
74
+ * a system role in the messages array.
75
+ */
76
+ splitSystemMessage(messages) {
77
+ const systemMsg = messages.find((m) => m.role === 'system');
78
+ const userMessages = messages.filter((m) => m.role !== 'system');
79
+ return { system: systemMsg?.content ?? null, userMessages };
80
+ }
81
+ }
82
+ //# sourceMappingURL=anthropic-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-provider.js","sourceRoot":"","sources":["../../../src/ai/providers/anthropic-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Ollama provider implementation.
3
+ *
4
+ * Ollama exposes an OpenAI-compatible REST API, so we extend the OpenAI
5
+ * provider with a custom base URL and a dummy API key.
6
+ */
7
+ import type { AIProviderName } from '../types.js';
8
+ import { OpenAIProvider } from './openai-provider.js';
9
+ export declare class OllamaProvider extends OpenAIProvider {
10
+ readonly name: AIProviderName;
11
+ constructor(model?: string, baseUrl?: string);
12
+ }
13
+ //# sourceMappingURL=ollama-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama-provider.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/ollama-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,qBAAa,cAAe,SAAQ,cAAc;IAChD,SAAkB,IAAI,EAAE,cAAc,CAAY;gBAEtC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAO7C"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Ollama provider implementation.
3
+ *
4
+ * Ollama exposes an OpenAI-compatible REST API, so we extend the OpenAI
5
+ * provider with a custom base URL and a dummy API key.
6
+ */
7
+ import { OpenAIProvider } from './openai-provider.js';
8
+ const DEFAULT_OLLAMA_URL = 'http://localhost:11434/v1';
9
+ export class OllamaProvider extends OpenAIProvider {
10
+ name = 'ollama';
11
+ constructor(model, baseUrl) {
12
+ super('ollama', // Ollama doesn't require an API key
13
+ model || 'llama3.1', baseUrl || DEFAULT_OLLAMA_URL);
14
+ }
15
+ }
16
+ //# sourceMappingURL=ollama-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama-provider.js","sourceRoot":"","sources":["../../../src/ai/providers/ollama-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;AAEvD,MAAM,OAAO,cAAe,SAAQ,cAAc;IAC9B,IAAI,GAAmB,QAAQ,CAAC;IAElD,YAAY,KAAc,EAAE,OAAgB;QAC1C,KAAK,CACH,QAAQ,EAAE,oCAAoC;QAC9C,KAAK,IAAI,UAAU,EACnB,OAAO,IAAI,kBAAkB,CAC9B,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * OpenAI provider implementation.
3
+ *
4
+ * Uses the official openai SDK with streaming and JSON mode support.
5
+ * Also serves as the base for the Ollama provider (OpenAI-compatible API).
6
+ */
7
+ import type { AIProvider, AIMessage, AIRequestOptions, AIProviderName } from '../types.js';
8
+ export declare class OpenAIProvider implements AIProvider {
9
+ readonly name: AIProviderName;
10
+ readonly model: string;
11
+ protected clientPromise: Promise<InstanceType<typeof import('openai').default>>;
12
+ constructor(apiKey: string, model?: string, baseUrl?: string);
13
+ private initClient;
14
+ chat(messages: AIMessage[], options?: AIRequestOptions): AsyncIterable<string>;
15
+ chatSync(messages: AIMessage[], options?: AIRequestOptions): Promise<string>;
16
+ }
17
+ //# sourceMappingURL=openai-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/openai-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG3F,qBAAa,cAAe,YAAW,UAAU;IAC/C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAY;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,cAAc,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gBAEpE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;YAK9C,UAAU;IAKjB,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC;IAsB/E,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;CAiBnF"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * OpenAI provider implementation.
3
+ *
4
+ * Uses the official openai SDK with streaming and JSON mode support.
5
+ * Also serves as the base for the Ollama provider (OpenAI-compatible API).
6
+ */
7
+ import { wrapProviderError } from '../errors.js';
8
+ export class OpenAIProvider {
9
+ name = 'openai';
10
+ model;
11
+ clientPromise;
12
+ constructor(apiKey, model, baseUrl) {
13
+ this.model = model || 'gpt-4o';
14
+ this.clientPromise = this.initClient(apiKey, baseUrl);
15
+ }
16
+ async initClient(apiKey, baseUrl) {
17
+ const { default: OpenAI } = await import('openai');
18
+ return new OpenAI({ apiKey, baseURL: baseUrl });
19
+ }
20
+ async *chat(messages, options) {
21
+ const client = await this.clientPromise;
22
+ try {
23
+ const stream = await client.chat.completions.create({
24
+ model: this.model,
25
+ stream: true,
26
+ temperature: options?.temperature ?? 0.7,
27
+ max_tokens: options?.maxTokens || 4096,
28
+ messages: messages.map((m) => ({ role: m.role, content: m.content })),
29
+ ...(options?.jsonMode && { response_format: { type: 'json_object' } }),
30
+ });
31
+ for await (const chunk of stream) {
32
+ const delta = chunk.choices[0]?.delta?.content;
33
+ if (delta)
34
+ yield delta;
35
+ }
36
+ }
37
+ catch (err) {
38
+ throw wrapProviderError(err, this.name);
39
+ }
40
+ }
41
+ async chatSync(messages, options) {
42
+ const client = await this.clientPromise;
43
+ try {
44
+ const response = await client.chat.completions.create({
45
+ model: this.model,
46
+ temperature: options?.temperature ?? 0.7,
47
+ max_tokens: options?.maxTokens || 4096,
48
+ messages: messages.map((m) => ({ role: m.role, content: m.content })),
49
+ ...(options?.jsonMode && { response_format: { type: 'json_object' } }),
50
+ });
51
+ return response.choices[0]?.message?.content || '';
52
+ }
53
+ catch (err) {
54
+ throw wrapProviderError(err, this.name);
55
+ }
56
+ }
57
+ }
58
+ //# sourceMappingURL=openai-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-provider.js","sourceRoot":"","sources":["../../../src/ai/providers/openai-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,422 @@
1
+ /**
2
+ * Zod schemas for validating AI JSON responses.
3
+ *
4
+ * These ensure the AI returned all required fields in the correct
5
+ * format before we pass data to artifact creation.
6
+ */
7
+ import { z } from 'zod';
8
+ export declare const aiEpicResponseSchema: z.ZodObject<{
9
+ title: z.ZodString;
10
+ owner: z.ZodString;
11
+ businessValue: z.ZodString;
12
+ targetUsers: z.ZodString;
13
+ problemStatement: z.ZodString;
14
+ solutionOverview: z.ZodString;
15
+ successCriteria: z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodEffects<z.ZodString, string[], string>]>;
16
+ keyFeatures: z.ZodArray<z.ZodString, "many">;
17
+ dependencies: z.ZodDefault<z.ZodString>;
18
+ risks: z.ZodDefault<z.ZodString>;
19
+ }, "strip", z.ZodTypeAny, {
20
+ title: string;
21
+ dependencies: string;
22
+ owner: string;
23
+ businessValue: string;
24
+ targetUsers: string;
25
+ problemStatement: string;
26
+ solutionOverview: string;
27
+ successCriteria: string[];
28
+ keyFeatures: string[];
29
+ risks: string;
30
+ }, {
31
+ title: string;
32
+ owner: string;
33
+ businessValue: string;
34
+ targetUsers: string;
35
+ problemStatement: string;
36
+ solutionOverview: string;
37
+ successCriteria: string | string[];
38
+ keyFeatures: string[];
39
+ dependencies?: string | undefined;
40
+ risks?: string | undefined;
41
+ }>;
42
+ export type AIEpicResponse = z.infer<typeof aiEpicResponseSchema>;
43
+ export declare const aiFeatureSchema: z.ZodObject<{
44
+ title: z.ZodString;
45
+ overview: z.ZodString;
46
+ functionalRequirements: z.ZodArray<z.ZodString, "many">;
47
+ dependencies: z.ZodDefault<z.ZodString>;
48
+ technicalConsiderations: z.ZodDefault<z.ZodString>;
49
+ risks: z.ZodDefault<z.ZodString>;
50
+ successMetrics: z.ZodString;
51
+ }, "strip", z.ZodTypeAny, {
52
+ title: string;
53
+ dependencies: string;
54
+ risks: string;
55
+ overview: string;
56
+ functionalRequirements: string[];
57
+ technicalConsiderations: string;
58
+ successMetrics: string;
59
+ }, {
60
+ title: string;
61
+ overview: string;
62
+ functionalRequirements: string[];
63
+ successMetrics: string;
64
+ dependencies?: string | undefined;
65
+ risks?: string | undefined;
66
+ technicalConsiderations?: string | undefined;
67
+ }>;
68
+ export declare const aiFeaturesResponseSchema: z.ZodObject<{
69
+ features: z.ZodArray<z.ZodObject<{
70
+ title: z.ZodString;
71
+ overview: z.ZodString;
72
+ functionalRequirements: z.ZodArray<z.ZodString, "many">;
73
+ dependencies: z.ZodDefault<z.ZodString>;
74
+ technicalConsiderations: z.ZodDefault<z.ZodString>;
75
+ risks: z.ZodDefault<z.ZodString>;
76
+ successMetrics: z.ZodString;
77
+ }, "strip", z.ZodTypeAny, {
78
+ title: string;
79
+ dependencies: string;
80
+ risks: string;
81
+ overview: string;
82
+ functionalRequirements: string[];
83
+ technicalConsiderations: string;
84
+ successMetrics: string;
85
+ }, {
86
+ title: string;
87
+ overview: string;
88
+ functionalRequirements: string[];
89
+ successMetrics: string;
90
+ dependencies?: string | undefined;
91
+ risks?: string | undefined;
92
+ technicalConsiderations?: string | undefined;
93
+ }>, "many">;
94
+ }, "strip", z.ZodTypeAny, {
95
+ features: {
96
+ title: string;
97
+ dependencies: string;
98
+ risks: string;
99
+ overview: string;
100
+ functionalRequirements: string[];
101
+ technicalConsiderations: string;
102
+ successMetrics: string;
103
+ }[];
104
+ }, {
105
+ features: {
106
+ title: string;
107
+ overview: string;
108
+ functionalRequirements: string[];
109
+ successMetrics: string;
110
+ dependencies?: string | undefined;
111
+ risks?: string | undefined;
112
+ technicalConsiderations?: string | undefined;
113
+ }[];
114
+ }>;
115
+ export type AIFeaturesResponse = z.infer<typeof aiFeaturesResponseSchema>;
116
+ export declare const aiGherkinScenarioSchema: z.ZodObject<{
117
+ name: z.ZodString;
118
+ given: z.ZodString;
119
+ when: z.ZodString;
120
+ then: z.ZodString;
121
+ }, "strip", z.ZodTypeAny, {
122
+ then: string;
123
+ name: string;
124
+ given: string;
125
+ when: string;
126
+ }, {
127
+ then: string;
128
+ name: string;
129
+ given: string;
130
+ when: string;
131
+ }>;
132
+ export declare const aiStorySchema: z.ZodObject<{
133
+ title: z.ZodString;
134
+ role: z.ZodString;
135
+ goal: z.ZodString;
136
+ benefit: z.ZodString;
137
+ additionalNotes: z.ZodDefault<z.ZodString>;
138
+ gherkinScenarios: z.ZodArray<z.ZodObject<{
139
+ name: z.ZodString;
140
+ given: z.ZodString;
141
+ when: z.ZodString;
142
+ then: z.ZodString;
143
+ }, "strip", z.ZodTypeAny, {
144
+ then: string;
145
+ name: string;
146
+ given: string;
147
+ when: string;
148
+ }, {
149
+ then: string;
150
+ name: string;
151
+ given: string;
152
+ when: string;
153
+ }>, "many">;
154
+ }, "strip", z.ZodTypeAny, {
155
+ title: string;
156
+ role: string;
157
+ goal: string;
158
+ benefit: string;
159
+ additionalNotes: string;
160
+ gherkinScenarios: {
161
+ then: string;
162
+ name: string;
163
+ given: string;
164
+ when: string;
165
+ }[];
166
+ }, {
167
+ title: string;
168
+ role: string;
169
+ goal: string;
170
+ benefit: string;
171
+ gherkinScenarios: {
172
+ then: string;
173
+ name: string;
174
+ given: string;
175
+ when: string;
176
+ }[];
177
+ additionalNotes?: string | undefined;
178
+ }>;
179
+ export declare const aiStoriesResponseSchema: z.ZodObject<{
180
+ stories: z.ZodArray<z.ZodObject<{
181
+ title: z.ZodString;
182
+ role: z.ZodString;
183
+ goal: z.ZodString;
184
+ benefit: z.ZodString;
185
+ additionalNotes: z.ZodDefault<z.ZodString>;
186
+ gherkinScenarios: z.ZodArray<z.ZodObject<{
187
+ name: z.ZodString;
188
+ given: z.ZodString;
189
+ when: z.ZodString;
190
+ then: z.ZodString;
191
+ }, "strip", z.ZodTypeAny, {
192
+ then: string;
193
+ name: string;
194
+ given: string;
195
+ when: string;
196
+ }, {
197
+ then: string;
198
+ name: string;
199
+ given: string;
200
+ when: string;
201
+ }>, "many">;
202
+ }, "strip", z.ZodTypeAny, {
203
+ title: string;
204
+ role: string;
205
+ goal: string;
206
+ benefit: string;
207
+ additionalNotes: string;
208
+ gherkinScenarios: {
209
+ then: string;
210
+ name: string;
211
+ given: string;
212
+ when: string;
213
+ }[];
214
+ }, {
215
+ title: string;
216
+ role: string;
217
+ goal: string;
218
+ benefit: string;
219
+ gherkinScenarios: {
220
+ then: string;
221
+ name: string;
222
+ given: string;
223
+ when: string;
224
+ }[];
225
+ additionalNotes?: string | undefined;
226
+ }>, "many">;
227
+ }, "strip", z.ZodTypeAny, {
228
+ stories: {
229
+ title: string;
230
+ role: string;
231
+ goal: string;
232
+ benefit: string;
233
+ additionalNotes: string;
234
+ gherkinScenarios: {
235
+ then: string;
236
+ name: string;
237
+ given: string;
238
+ when: string;
239
+ }[];
240
+ }[];
241
+ }, {
242
+ stories: {
243
+ title: string;
244
+ role: string;
245
+ goal: string;
246
+ benefit: string;
247
+ gherkinScenarios: {
248
+ then: string;
249
+ name: string;
250
+ given: string;
251
+ when: string;
252
+ }[];
253
+ additionalNotes?: string | undefined;
254
+ }[];
255
+ }>;
256
+ export type AIStoriesResponse = z.infer<typeof aiStoriesResponseSchema>;
257
+ export declare const aiSubtaskSchema: z.ZodObject<{
258
+ id: z.ZodString;
259
+ title: z.ZodString;
260
+ }, "strip", z.ZodTypeAny, {
261
+ title: string;
262
+ id: string;
263
+ }, {
264
+ title: string;
265
+ id: string;
266
+ }>;
267
+ export declare const aiTaskGroupSchema: z.ZodObject<{
268
+ id: z.ZodString;
269
+ title: z.ZodString;
270
+ subtasks: z.ZodDefault<z.ZodArray<z.ZodObject<{
271
+ id: z.ZodString;
272
+ title: z.ZodString;
273
+ }, "strip", z.ZodTypeAny, {
274
+ title: string;
275
+ id: string;
276
+ }, {
277
+ title: string;
278
+ id: string;
279
+ }>, "many">>;
280
+ }, "strip", z.ZodTypeAny, {
281
+ title: string;
282
+ id: string;
283
+ subtasks: {
284
+ title: string;
285
+ id: string;
286
+ }[];
287
+ }, {
288
+ title: string;
289
+ id: string;
290
+ subtasks?: {
291
+ title: string;
292
+ id: string;
293
+ }[] | undefined;
294
+ }>;
295
+ export declare const aiACMappingSchema: z.ZodObject<{
296
+ criterion: z.ZodString;
297
+ sourceStoryId: z.ZodString;
298
+ taskIds: z.ZodArray<z.ZodString, "many">;
299
+ }, "strip", z.ZodTypeAny, {
300
+ criterion: string;
301
+ sourceStoryId: string;
302
+ taskIds: string[];
303
+ }, {
304
+ criterion: string;
305
+ sourceStoryId: string;
306
+ taskIds: string[];
307
+ }>;
308
+ export declare const aiRelevantFileSchema: z.ZodObject<{
309
+ path: z.ZodString;
310
+ reason: z.ZodString;
311
+ }, "strip", z.ZodTypeAny, {
312
+ path: string;
313
+ reason: string;
314
+ }, {
315
+ path: string;
316
+ reason: string;
317
+ }>;
318
+ export declare const aiTasksResponseSchema: z.ZodObject<{
319
+ title: z.ZodString;
320
+ tasks: z.ZodArray<z.ZodObject<{
321
+ id: z.ZodString;
322
+ title: z.ZodString;
323
+ subtasks: z.ZodDefault<z.ZodArray<z.ZodObject<{
324
+ id: z.ZodString;
325
+ title: z.ZodString;
326
+ }, "strip", z.ZodTypeAny, {
327
+ title: string;
328
+ id: string;
329
+ }, {
330
+ title: string;
331
+ id: string;
332
+ }>, "many">>;
333
+ }, "strip", z.ZodTypeAny, {
334
+ title: string;
335
+ id: string;
336
+ subtasks: {
337
+ title: string;
338
+ id: string;
339
+ }[];
340
+ }, {
341
+ title: string;
342
+ id: string;
343
+ subtasks?: {
344
+ title: string;
345
+ id: string;
346
+ }[] | undefined;
347
+ }>, "many">;
348
+ acceptanceCriteriaMapping: z.ZodDefault<z.ZodArray<z.ZodObject<{
349
+ criterion: z.ZodString;
350
+ sourceStoryId: z.ZodString;
351
+ taskIds: z.ZodArray<z.ZodString, "many">;
352
+ }, "strip", z.ZodTypeAny, {
353
+ criterion: string;
354
+ sourceStoryId: string;
355
+ taskIds: string[];
356
+ }, {
357
+ criterion: string;
358
+ sourceStoryId: string;
359
+ taskIds: string[];
360
+ }>, "many">>;
361
+ relevantFiles: z.ZodDefault<z.ZodArray<z.ZodObject<{
362
+ path: z.ZodString;
363
+ reason: z.ZodString;
364
+ }, "strip", z.ZodTypeAny, {
365
+ path: string;
366
+ reason: string;
367
+ }, {
368
+ path: string;
369
+ reason: string;
370
+ }>, "many">>;
371
+ }, "strip", z.ZodTypeAny, {
372
+ tasks: {
373
+ title: string;
374
+ id: string;
375
+ subtasks: {
376
+ title: string;
377
+ id: string;
378
+ }[];
379
+ }[];
380
+ title: string;
381
+ acceptanceCriteriaMapping: {
382
+ criterion: string;
383
+ sourceStoryId: string;
384
+ taskIds: string[];
385
+ }[];
386
+ relevantFiles: {
387
+ path: string;
388
+ reason: string;
389
+ }[];
390
+ }, {
391
+ tasks: {
392
+ title: string;
393
+ id: string;
394
+ subtasks?: {
395
+ title: string;
396
+ id: string;
397
+ }[] | undefined;
398
+ }[];
399
+ title: string;
400
+ acceptanceCriteriaMapping?: {
401
+ criterion: string;
402
+ sourceStoryId: string;
403
+ taskIds: string[];
404
+ }[] | undefined;
405
+ relevantFiles?: {
406
+ path: string;
407
+ reason: string;
408
+ }[] | undefined;
409
+ }>;
410
+ export type AITasksResponse = z.infer<typeof aiTasksResponseSchema>;
411
+ export declare const aiRefineResponseSchema: z.ZodObject<{
412
+ suggestions: z.ZodArray<z.ZodString, "many">;
413
+ improved: z.ZodRecord<z.ZodString, z.ZodUnknown>;
414
+ }, "strip", z.ZodTypeAny, {
415
+ suggestions: string[];
416
+ improved: Record<string, unknown>;
417
+ }, {
418
+ suggestions: string[];
419
+ improved: Record<string, unknown>;
420
+ }>;
421
+ export type AIRefineResponse = z.infer<typeof aiRefineResponseSchema>;
422
+ //# sourceMappingURL=ai-response-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-response-schemas.d.ts","sourceRoot":"","sources":["../../../src/ai/schemas/ai-response-schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAe/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;EAQ1B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAI1E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOxB,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAElC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAIxE,eAAO,MAAM,eAAe;;;;;;;;;EAG1B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAI5B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE,eAAO,MAAM,sBAAsB;;;;;;;;;EAGjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}