halfcopilot 1.0.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 (226) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -0
  3. package/bin/halfcop.js +22 -0
  4. package/dist/index.js +3 -0
  5. package/dist/packages/cli/dist/halfcop.d.ts +6 -0
  6. package/dist/packages/cli/dist/halfcop.d.ts.map +1 -0
  7. package/dist/packages/cli/dist/halfcop.js +448 -0
  8. package/dist/packages/cli/dist/halfcop.js.map +1 -0
  9. package/dist/packages/cli/dist/index.d.ts +3 -0
  10. package/dist/packages/cli/dist/index.d.ts.map +1 -0
  11. package/dist/packages/cli/dist/index.js +251 -0
  12. package/dist/packages/cli/dist/index.js.map +1 -0
  13. package/dist/packages/cli/dist/tui/app.d.ts +11 -0
  14. package/dist/packages/cli/dist/tui/app.d.ts.map +1 -0
  15. package/dist/packages/cli/dist/tui/app.js +72 -0
  16. package/dist/packages/cli/dist/tui/app.js.map +1 -0
  17. package/dist/packages/cli/dist/tui/components/ChatView.d.ts +12 -0
  18. package/dist/packages/cli/dist/tui/components/ChatView.d.ts.map +1 -0
  19. package/dist/packages/cli/dist/tui/components/ChatView.js +6 -0
  20. package/dist/packages/cli/dist/tui/components/ChatView.js.map +1 -0
  21. package/dist/packages/cli/dist/tui/components/InputField.d.ts +8 -0
  22. package/dist/packages/cli/dist/tui/components/InputField.d.ts.map +1 -0
  23. package/dist/packages/cli/dist/tui/components/InputField.js +22 -0
  24. package/dist/packages/cli/dist/tui/components/InputField.js.map +1 -0
  25. package/dist/packages/cli/dist/tui/components/StatusBar.d.ts +13 -0
  26. package/dist/packages/cli/dist/tui/components/StatusBar.d.ts.map +1 -0
  27. package/dist/packages/cli/dist/tui/components/StatusBar.js +6 -0
  28. package/dist/packages/cli/dist/tui/components/StatusBar.js.map +1 -0
  29. package/dist/packages/cli/dist/tui/components/ToolApproval.d.ts +10 -0
  30. package/dist/packages/cli/dist/tui/components/ToolApproval.d.ts.map +1 -0
  31. package/dist/packages/cli/dist/tui/components/ToolApproval.js +14 -0
  32. package/dist/packages/cli/dist/tui/components/ToolApproval.js.map +1 -0
  33. package/dist/packages/cli/dist/tui/components/index.d.ts +5 -0
  34. package/dist/packages/cli/dist/tui/components/index.d.ts.map +1 -0
  35. package/dist/packages/cli/dist/tui/components/index.js +5 -0
  36. package/dist/packages/cli/dist/tui/components/index.js.map +1 -0
  37. package/dist/packages/cli/dist/tui/index.d.ts +3 -0
  38. package/dist/packages/cli/dist/tui/index.d.ts.map +1 -0
  39. package/dist/packages/cli/dist/tui/index.js +3 -0
  40. package/dist/packages/cli/dist/tui/index.js.map +1 -0
  41. package/dist/packages/config/dist/defaults.d.ts +3 -0
  42. package/dist/packages/config/dist/defaults.d.ts.map +1 -0
  43. package/dist/packages/config/dist/defaults.js +30 -0
  44. package/dist/packages/config/dist/defaults.js.map +1 -0
  45. package/dist/packages/config/dist/index.d.ts +4 -0
  46. package/dist/packages/config/dist/index.d.ts.map +1 -0
  47. package/dist/packages/config/dist/index.js +4 -0
  48. package/dist/packages/config/dist/index.js.map +1 -0
  49. package/dist/packages/config/dist/loader.d.ts +4 -0
  50. package/dist/packages/config/dist/loader.d.ts.map +1 -0
  51. package/dist/packages/config/dist/loader.js +80 -0
  52. package/dist/packages/config/dist/loader.js.map +1 -0
  53. package/dist/packages/config/dist/schema.d.ts +323 -0
  54. package/dist/packages/config/dist/schema.d.ts.map +1 -0
  55. package/dist/packages/config/dist/schema.js +56 -0
  56. package/dist/packages/config/dist/schema.js.map +1 -0
  57. package/dist/packages/core/dist/agent-loop.d.ts +19 -0
  58. package/dist/packages/core/dist/agent-loop.d.ts.map +1 -0
  59. package/dist/packages/core/dist/agent-loop.js +140 -0
  60. package/dist/packages/core/dist/agent-loop.js.map +1 -0
  61. package/dist/packages/core/dist/conversation.d.ts +22 -0
  62. package/dist/packages/core/dist/conversation.d.ts.map +1 -0
  63. package/dist/packages/core/dist/conversation.js +66 -0
  64. package/dist/packages/core/dist/conversation.js.map +1 -0
  65. package/dist/packages/core/dist/hybrid/index.d.ts +4 -0
  66. package/dist/packages/core/dist/hybrid/index.d.ts.map +1 -0
  67. package/dist/packages/core/dist/hybrid/index.js +4 -0
  68. package/dist/packages/core/dist/hybrid/index.js.map +1 -0
  69. package/dist/packages/core/dist/hybrid/mapper.d.ts +11 -0
  70. package/dist/packages/core/dist/hybrid/mapper.d.ts.map +1 -0
  71. package/dist/packages/core/dist/hybrid/mapper.js +53 -0
  72. package/dist/packages/core/dist/hybrid/mapper.js.map +1 -0
  73. package/dist/packages/core/dist/hybrid/parser.d.ts +36 -0
  74. package/dist/packages/core/dist/hybrid/parser.d.ts.map +1 -0
  75. package/dist/packages/core/dist/hybrid/parser.js +118 -0
  76. package/dist/packages/core/dist/hybrid/parser.js.map +1 -0
  77. package/dist/packages/core/dist/hybrid/provider.d.ts +14 -0
  78. package/dist/packages/core/dist/hybrid/provider.d.ts.map +1 -0
  79. package/dist/packages/core/dist/hybrid/provider.js +109 -0
  80. package/dist/packages/core/dist/hybrid/provider.js.map +1 -0
  81. package/dist/packages/core/dist/index.d.ts +5 -0
  82. package/dist/packages/core/dist/index.d.ts.map +1 -0
  83. package/dist/packages/core/dist/index.js +5 -0
  84. package/dist/packages/core/dist/index.js.map +1 -0
  85. package/dist/packages/core/dist/types.d.ts +36 -0
  86. package/dist/packages/core/dist/types.d.ts.map +1 -0
  87. package/dist/packages/core/dist/types.js +11 -0
  88. package/dist/packages/core/dist/types.js.map +1 -0
  89. package/dist/packages/mcp/dist/adapter.d.ts +15 -0
  90. package/dist/packages/mcp/dist/adapter.d.ts.map +1 -0
  91. package/dist/packages/mcp/dist/adapter.js +44 -0
  92. package/dist/packages/mcp/dist/adapter.js.map +1 -0
  93. package/dist/packages/mcp/dist/client.d.ts +31 -0
  94. package/dist/packages/mcp/dist/client.d.ts.map +1 -0
  95. package/dist/packages/mcp/dist/client.js +140 -0
  96. package/dist/packages/mcp/dist/client.js.map +1 -0
  97. package/dist/packages/mcp/dist/index.d.ts +6 -0
  98. package/dist/packages/mcp/dist/index.d.ts.map +1 -0
  99. package/dist/packages/mcp/dist/index.js +4 -0
  100. package/dist/packages/mcp/dist/index.js.map +1 -0
  101. package/dist/packages/mcp/dist/transport.d.ts +47 -0
  102. package/dist/packages/mcp/dist/transport.d.ts.map +1 -0
  103. package/dist/packages/mcp/dist/transport.js +123 -0
  104. package/dist/packages/mcp/dist/transport.js.map +1 -0
  105. package/dist/packages/mcp/dist/types.d.ts +64 -0
  106. package/dist/packages/mcp/dist/types.d.ts.map +1 -0
  107. package/dist/packages/mcp/dist/types.js +2 -0
  108. package/dist/packages/mcp/dist/types.js.map +1 -0
  109. package/dist/packages/memory/dist/index.d.ts +3 -0
  110. package/dist/packages/memory/dist/index.d.ts.map +1 -0
  111. package/dist/packages/memory/dist/index.js +2 -0
  112. package/dist/packages/memory/dist/index.js.map +1 -0
  113. package/dist/packages/memory/dist/store.d.ts +15 -0
  114. package/dist/packages/memory/dist/store.d.ts.map +1 -0
  115. package/dist/packages/memory/dist/store.js +93 -0
  116. package/dist/packages/memory/dist/store.js.map +1 -0
  117. package/dist/packages/memory/dist/types.d.ts +14 -0
  118. package/dist/packages/memory/dist/types.d.ts.map +1 -0
  119. package/dist/packages/memory/dist/types.js +2 -0
  120. package/dist/packages/memory/dist/types.js.map +1 -0
  121. package/dist/packages/provider/dist/anthropic.d.ts +21 -0
  122. package/dist/packages/provider/dist/anthropic.d.ts.map +1 -0
  123. package/dist/packages/provider/dist/anthropic.js +148 -0
  124. package/dist/packages/provider/dist/anthropic.js.map +1 -0
  125. package/dist/packages/provider/dist/base.d.ts +16 -0
  126. package/dist/packages/provider/dist/base.d.ts.map +1 -0
  127. package/dist/packages/provider/dist/base.js +9 -0
  128. package/dist/packages/provider/dist/base.js.map +1 -0
  129. package/dist/packages/provider/dist/index.d.ts +6 -0
  130. package/dist/packages/provider/dist/index.d.ts.map +1 -0
  131. package/dist/packages/provider/dist/index.js +5 -0
  132. package/dist/packages/provider/dist/index.js.map +1 -0
  133. package/dist/packages/provider/dist/openai.d.ts +23 -0
  134. package/dist/packages/provider/dist/openai.d.ts.map +1 -0
  135. package/dist/packages/provider/dist/openai.js +171 -0
  136. package/dist/packages/provider/dist/openai.js.map +1 -0
  137. package/dist/packages/provider/dist/registry.d.ts +11 -0
  138. package/dist/packages/provider/dist/registry.d.ts.map +1 -0
  139. package/dist/packages/provider/dist/registry.js +61 -0
  140. package/dist/packages/provider/dist/registry.js.map +1 -0
  141. package/dist/packages/provider/dist/types.d.ts +84 -0
  142. package/dist/packages/provider/dist/types.d.ts.map +1 -0
  143. package/dist/packages/provider/dist/types.js +3 -0
  144. package/dist/packages/provider/dist/types.js.map +1 -0
  145. package/dist/packages/shared/dist/errors.d.ts +18 -0
  146. package/dist/packages/shared/dist/errors.d.ts.map +1 -0
  147. package/dist/packages/shared/dist/errors.js +35 -0
  148. package/dist/packages/shared/dist/errors.js.map +1 -0
  149. package/dist/packages/shared/dist/index.d.ts +4 -0
  150. package/dist/packages/shared/dist/index.d.ts.map +1 -0
  151. package/dist/packages/shared/dist/index.js +4 -0
  152. package/dist/packages/shared/dist/index.js.map +1 -0
  153. package/dist/packages/shared/dist/logger.d.ts +18 -0
  154. package/dist/packages/shared/dist/logger.d.ts.map +1 -0
  155. package/dist/packages/shared/dist/logger.js +39 -0
  156. package/dist/packages/shared/dist/logger.js.map +1 -0
  157. package/dist/packages/shared/dist/utils.d.ts +5 -0
  158. package/dist/packages/shared/dist/utils.d.ts.map +1 -0
  159. package/dist/packages/shared/dist/utils.js +27 -0
  160. package/dist/packages/shared/dist/utils.js.map +1 -0
  161. package/dist/packages/skills/dist/builtins.d.ts +8 -0
  162. package/dist/packages/skills/dist/builtins.d.ts.map +1 -0
  163. package/dist/packages/skills/dist/builtins.js +144 -0
  164. package/dist/packages/skills/dist/builtins.js.map +1 -0
  165. package/dist/packages/skills/dist/index.d.ts +4 -0
  166. package/dist/packages/skills/dist/index.d.ts.map +1 -0
  167. package/dist/packages/skills/dist/index.js +3 -0
  168. package/dist/packages/skills/dist/index.js.map +1 -0
  169. package/dist/packages/skills/dist/registry.d.ts +13 -0
  170. package/dist/packages/skills/dist/registry.d.ts.map +1 -0
  171. package/dist/packages/skills/dist/registry.js +93 -0
  172. package/dist/packages/skills/dist/registry.js.map +1 -0
  173. package/dist/packages/skills/dist/types.d.ts +35 -0
  174. package/dist/packages/skills/dist/types.d.ts.map +1 -0
  175. package/dist/packages/skills/dist/types.js +2 -0
  176. package/dist/packages/skills/dist/types.js.map +1 -0
  177. package/dist/packages/tools/dist/builtins/bash.d.ts +3 -0
  178. package/dist/packages/tools/dist/builtins/bash.d.ts.map +1 -0
  179. package/dist/packages/tools/dist/builtins/bash.js +38 -0
  180. package/dist/packages/tools/dist/builtins/bash.js.map +1 -0
  181. package/dist/packages/tools/dist/builtins/file-edit.d.ts +3 -0
  182. package/dist/packages/tools/dist/builtins/file-edit.d.ts.map +1 -0
  183. package/dist/packages/tools/dist/builtins/file-edit.js +45 -0
  184. package/dist/packages/tools/dist/builtins/file-edit.js.map +1 -0
  185. package/dist/packages/tools/dist/builtins/file-read.d.ts +3 -0
  186. package/dist/packages/tools/dist/builtins/file-read.d.ts.map +1 -0
  187. package/dist/packages/tools/dist/builtins/file-read.js +39 -0
  188. package/dist/packages/tools/dist/builtins/file-read.js.map +1 -0
  189. package/dist/packages/tools/dist/builtins/file-write.d.ts +3 -0
  190. package/dist/packages/tools/dist/builtins/file-write.d.ts.map +1 -0
  191. package/dist/packages/tools/dist/builtins/file-write.js +30 -0
  192. package/dist/packages/tools/dist/builtins/file-write.js.map +1 -0
  193. package/dist/packages/tools/dist/builtins/glob.d.ts +3 -0
  194. package/dist/packages/tools/dist/builtins/glob.d.ts.map +1 -0
  195. package/dist/packages/tools/dist/builtins/glob.js +33 -0
  196. package/dist/packages/tools/dist/builtins/glob.js.map +1 -0
  197. package/dist/packages/tools/dist/builtins/grep.d.ts +3 -0
  198. package/dist/packages/tools/dist/builtins/grep.d.ts.map +1 -0
  199. package/dist/packages/tools/dist/builtins/grep.js +59 -0
  200. package/dist/packages/tools/dist/builtins/grep.js.map +1 -0
  201. package/dist/packages/tools/dist/builtins/index.d.ts +10 -0
  202. package/dist/packages/tools/dist/builtins/index.d.ts.map +1 -0
  203. package/dist/packages/tools/dist/builtins/index.js +18 -0
  204. package/dist/packages/tools/dist/builtins/index.js.map +1 -0
  205. package/dist/packages/tools/dist/executor.d.ts +11 -0
  206. package/dist/packages/tools/dist/executor.d.ts.map +1 -0
  207. package/dist/packages/tools/dist/executor.js +36 -0
  208. package/dist/packages/tools/dist/executor.js.map +1 -0
  209. package/dist/packages/tools/dist/index.d.ts +7 -0
  210. package/dist/packages/tools/dist/index.d.ts.map +1 -0
  211. package/dist/packages/tools/dist/index.js +6 -0
  212. package/dist/packages/tools/dist/index.js.map +1 -0
  213. package/dist/packages/tools/dist/permission.d.ts +17 -0
  214. package/dist/packages/tools/dist/permission.d.ts.map +1 -0
  215. package/dist/packages/tools/dist/permission.js +74 -0
  216. package/dist/packages/tools/dist/permission.js.map +1 -0
  217. package/dist/packages/tools/dist/registry.d.ts +13 -0
  218. package/dist/packages/tools/dist/registry.d.ts.map +1 -0
  219. package/dist/packages/tools/dist/registry.js +34 -0
  220. package/dist/packages/tools/dist/registry.js.map +1 -0
  221. package/dist/packages/tools/dist/types.d.ts +28 -0
  222. package/dist/packages/tools/dist/types.d.ts.map +1 -0
  223. package/dist/packages/tools/dist/types.js +16 -0
  224. package/dist/packages/tools/dist/types.js.map +1 -0
  225. package/package.json +47 -0
  226. package/scripts/postinstall.mjs +24 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAe,aAAa,EAAE,MAAM,YAAY,CAAC;AAEzE,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAI/B,iBAAiB,IAAI,MAAM;IAI3B,oBAAoB,IAAI,MAAM;IAIxB,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;IAc9B,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtD,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAetD,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM;IAiB/C,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,cAAc;CAcvB"}
@@ -0,0 +1,93 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, existsSync, readdirSync } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ export class MemoryStore {
5
+ projectRoot;
6
+ constructor(projectRoot) {
7
+ this.projectRoot = projectRoot;
8
+ }
9
+ getUserMemoryPath() {
10
+ return join(homedir(), '.halfcopilot', 'memory');
11
+ }
12
+ getProjectMemoryPath() {
13
+ return join(this.projectRoot, '.halfcopilot', 'memory');
14
+ }
15
+ async load() {
16
+ const userMemory = this.readMemoryFile(this.getUserMemoryPath(), 'user.md');
17
+ const feedbackMemory = this.readMemoryFile(this.getUserMemoryPath(), 'feedback.md');
18
+ const projectMemory = this.readMemoryFile(this.getProjectMemoryPath(), 'project.md');
19
+ const references = this.readReferences();
20
+ return {
21
+ userContext: userMemory,
22
+ feedbackContext: feedbackMemory,
23
+ projectContext: projectMemory,
24
+ references,
25
+ };
26
+ }
27
+ async save(type, content) {
28
+ const basePath = type === 'user' || type === 'feedback'
29
+ ? this.getUserMemoryPath()
30
+ : this.getProjectMemoryPath();
31
+ const fileName = `${type}.md`;
32
+ const filePath = join(basePath, fileName);
33
+ mkdirSync(dirname(filePath), { recursive: true });
34
+ writeFileSync(filePath, content, 'utf-8');
35
+ }
36
+ async append(type, entry) {
37
+ const basePath = type === 'user' || type === 'feedback'
38
+ ? this.getUserMemoryPath()
39
+ : this.getProjectMemoryPath();
40
+ const fileName = `${type}.md`;
41
+ const filePath = join(basePath, fileName);
42
+ mkdirSync(dirname(filePath), { recursive: true });
43
+ const existing = existsSync(filePath) ? readFileSync(filePath, 'utf-8') : '';
44
+ const newContent = existing ? `${existing}\n\n${entry}` : entry;
45
+ writeFileSync(filePath, newContent, 'utf-8');
46
+ }
47
+ async clear(type) {
48
+ await this.save(type, '');
49
+ }
50
+ generateSummary(summary) {
51
+ return `# Context Memory
52
+
53
+ ## User Context
54
+ ${summary.userContext || 'No user context'}
55
+
56
+ ## Feedback
57
+ ${summary.feedbackContext || 'No feedback'}
58
+
59
+ ## Project Context
60
+ ${summary.projectContext || 'No project context'}
61
+
62
+ ## References
63
+ ${summary.references.length > 0 ? summary.references.join('\n') : 'No references'}
64
+ `.trim();
65
+ }
66
+ readMemoryFile(basePath, fileName) {
67
+ const filePath = join(basePath, fileName);
68
+ if (!existsSync(filePath))
69
+ return '';
70
+ try {
71
+ return readFileSync(filePath, 'utf-8');
72
+ }
73
+ catch {
74
+ return '';
75
+ }
76
+ }
77
+ readReferences() {
78
+ const refDir = join(this.getProjectMemoryPath(), 'references');
79
+ if (!existsSync(refDir))
80
+ return [];
81
+ try {
82
+ const files = readdirSync(refDir).filter(f => f.endsWith('.md'));
83
+ return files.map(f => {
84
+ const content = readFileSync(join(refDir, f), 'utf-8');
85
+ return `### ${f}\n${content}`;
86
+ });
87
+ }
88
+ catch {
89
+ return [];
90
+ }
91
+ }
92
+ }
93
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,OAAO,WAAW;IACd,WAAW,CAAS;IAE5B,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,SAAS,CAAC,CAAC;QAC5E,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,aAAa,CAAC,CAAC;QACpF,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,YAAY,CAAC,CAAC;QACrF,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEzC,OAAO;YACL,WAAW,EAAE,UAAU;YACvB,eAAe,EAAE,cAAc;YAC/B,cAAc,EAAE,aAAa;YAC7B,UAAU;SACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAgB,EAAE,OAAe;QAC1C,MAAM,QAAQ,GAAG,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU;YACrD,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC1B,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAG,GAAG,IAAI,KAAK,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE1C,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAgB,EAAE,KAAa;QAC1C,MAAM,QAAQ,GAAG,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU;YACrD,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC1B,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAG,GAAG,IAAI,KAAK,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE1C,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAChE,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAgB;QAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,eAAe,CAAC,OAAsB;QACpC,OAAO;;;EAGT,OAAO,CAAC,WAAW,IAAI,iBAAiB;;;EAGxC,OAAO,CAAC,eAAe,IAAI,aAAa;;;EAGxC,OAAO,CAAC,cAAc,IAAI,oBAAoB;;;EAG9C,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe;CAChF,CAAC,IAAI,EAAE,CAAC;IACP,CAAC;IAEO,cAAc,CAAC,QAAgB,EAAE,QAAgB;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,cAAc;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,YAAY,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACjE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACnB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACvD,OAAO,OAAO,CAAC,KAAK,OAAO,EAAE,CAAC;YAChC,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ export type MemoryType = 'user' | 'feedback' | 'project' | 'reference';
2
+ export interface MemoryEntry {
3
+ type: MemoryType;
4
+ content: string;
5
+ timestamp: number;
6
+ metadata?: Record<string, unknown>;
7
+ }
8
+ export interface MemorySummary {
9
+ userContext: string;
10
+ feedbackContext: string;
11
+ projectContext: string;
12
+ references: string[];
13
+ }
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAEvE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ import { BaseProvider } from './base.js';
3
+ import type { ChatParams, ChatEvent, Message, ToolDef, ProviderCapabilities } from './types.js';
4
+ import type { ProviderConfig } from '@halfcopilot/config';
5
+ export declare class AnthropicProvider extends BaseProvider {
6
+ readonly name = "anthropic";
7
+ readonly capabilities: ProviderCapabilities;
8
+ private client;
9
+ constructor(options: {
10
+ apiKey: string;
11
+ models?: Record<string, unknown>;
12
+ });
13
+ static fromConfig(config: ProviderConfig): AnthropicProvider;
14
+ chat(params: ChatParams): AsyncGenerator<ChatEvent>;
15
+ convertMessages(messages: Message[]): {
16
+ system: Anthropic.TextBlockParam[];
17
+ messages: Anthropic.MessageParam[];
18
+ };
19
+ convertTools(tools: ToolDef[]): Anthropic.Tool[];
20
+ }
21
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../src/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,OAAO,CAAC,MAAM,CAAY;gBAEd,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;IAazE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,iBAAiB;IAOrD,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC;IAyE1D,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG;QACpC,MAAM,EAAE,SAAS,CAAC,cAAc,EAAE,CAAC;QACnC,QAAQ,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC;KACpC;IAmDD,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE;CAOjD"}
@@ -0,0 +1,148 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ import { BaseProvider } from './base.js';
3
+ import { resolveEnvVar } from '@halfcopilot/shared';
4
+ export class AnthropicProvider extends BaseProvider {
5
+ name = 'anthropic';
6
+ capabilities;
7
+ client;
8
+ constructor(options) {
9
+ super();
10
+ this.client = new Anthropic({ apiKey: resolveEnvVar(options.apiKey) });
11
+ this.capabilities = {
12
+ toolUse: true,
13
+ streaming: true,
14
+ thinking: true,
15
+ promptCaching: true,
16
+ contextWindow: 200000,
17
+ maxOutputTokens: 16384,
18
+ };
19
+ }
20
+ static fromConfig(config) {
21
+ return new AnthropicProvider({
22
+ apiKey: config.apiKey,
23
+ models: config.models,
24
+ });
25
+ }
26
+ async *chat(params) {
27
+ const { system, messages } = this.convertMessages(params.messages);
28
+ const tools = params.tools ? this.convertTools(params.tools) : undefined;
29
+ const stream = this.client.messages.stream({
30
+ model: params.model,
31
+ max_tokens: params.maxTokens ?? 16384,
32
+ system: params.systemPrompt
33
+ ? [{ type: 'text', text: params.systemPrompt }]
34
+ : system,
35
+ messages,
36
+ tools,
37
+ temperature: params.temperature,
38
+ });
39
+ let inputTokens = 0;
40
+ let outputTokens = 0;
41
+ let currentToolCall = null;
42
+ for await (const event of stream) {
43
+ if (event.type === 'content_block_start') {
44
+ if (event.content_block.type === 'tool_use') {
45
+ currentToolCall = {
46
+ id: event.content_block.id,
47
+ name: event.content_block.name,
48
+ input: '',
49
+ };
50
+ }
51
+ }
52
+ if (event.type === 'content_block_delta') {
53
+ if (event.delta.type === 'text_delta') {
54
+ yield { type: 'text', content: event.delta.text };
55
+ }
56
+ if (event.delta.type === 'thinking_delta') {
57
+ yield { type: 'thinking', content: event.delta.thinking };
58
+ }
59
+ if (event.delta.type === 'input_json_delta' && currentToolCall) {
60
+ currentToolCall.input += event.delta.partial_json;
61
+ }
62
+ }
63
+ if (event.type === 'content_block_stop' && currentToolCall) {
64
+ try {
65
+ yield {
66
+ type: 'tool_use',
67
+ id: currentToolCall.id,
68
+ name: currentToolCall.name,
69
+ input: JSON.parse(currentToolCall.input),
70
+ };
71
+ }
72
+ catch {
73
+ yield {
74
+ type: 'tool_use',
75
+ id: currentToolCall.id,
76
+ name: currentToolCall.name,
77
+ input: {},
78
+ };
79
+ }
80
+ currentToolCall = null;
81
+ }
82
+ if (event.type === 'message_start') {
83
+ inputTokens = event.message.usage?.input_tokens ?? 0;
84
+ }
85
+ if (event.type === 'message_delta') {
86
+ outputTokens += event.usage?.output_tokens ?? 0;
87
+ }
88
+ }
89
+ yield { type: 'done', usage: { inputTokens, outputTokens } };
90
+ }
91
+ convertMessages(messages) {
92
+ const system = [];
93
+ const result = [];
94
+ for (const msg of messages) {
95
+ if (msg.role === 'system') {
96
+ system.push({ type: 'text', text: msg.content });
97
+ continue;
98
+ }
99
+ if (msg.role === 'user') {
100
+ result.push({ role: 'user', content: msg.content });
101
+ continue;
102
+ }
103
+ if (msg.role === 'assistant') {
104
+ if (typeof msg.content === 'string') {
105
+ result.push({ role: 'assistant', content: msg.content });
106
+ continue;
107
+ }
108
+ const blocks = [];
109
+ for (const block of msg.content) {
110
+ if (block.type === 'text') {
111
+ blocks.push({ type: 'text', text: block.text });
112
+ }
113
+ else if (block.type === 'tool_use') {
114
+ blocks.push({
115
+ type: 'tool_use',
116
+ id: block.id,
117
+ name: block.name,
118
+ input: block.input,
119
+ });
120
+ }
121
+ }
122
+ result.push({ role: 'assistant', content: blocks });
123
+ continue;
124
+ }
125
+ if (msg.role === 'tool_result') {
126
+ result.push({
127
+ role: 'user',
128
+ content: [{
129
+ type: 'tool_result',
130
+ tool_use_id: msg.toolUseId,
131
+ content: msg.content,
132
+ is_error: msg.isError,
133
+ }],
134
+ });
135
+ continue;
136
+ }
137
+ }
138
+ return { system, messages: result };
139
+ }
140
+ convertTools(tools) {
141
+ return tools.map((tool) => ({
142
+ name: tool.name,
143
+ description: tool.description,
144
+ input_schema: tool.inputSchema,
145
+ }));
146
+ }
147
+ }
148
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../src/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ChatParams, ChatEvent, ProviderCapabilities } from './types.js';
2
+ export interface Provider {
3
+ readonly name: string;
4
+ readonly capabilities: ProviderCapabilities;
5
+ chat(params: ChatParams): AsyncGenerator<ChatEvent>;
6
+ supportsToolUse(): boolean;
7
+ supportsStreaming(): boolean;
8
+ }
9
+ export declare abstract class BaseProvider implements Provider {
10
+ abstract readonly name: string;
11
+ abstract readonly capabilities: ProviderCapabilities;
12
+ abstract chat(params: ChatParams): AsyncGenerator<ChatEvent>;
13
+ supportsToolUse(): boolean;
14
+ supportsStreaming(): boolean;
15
+ }
16
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE9E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACpD,eAAe,IAAI,OAAO,CAAC;IAC3B,iBAAiB,IAAI,OAAO,CAAC;CAC9B;AAED,8BAAsB,YAAa,YAAW,QAAQ;IACpD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAErD,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC;IAE5D,eAAe,IAAI,OAAO;IAI1B,iBAAiB,IAAI,OAAO;CAG7B"}
@@ -0,0 +1,9 @@
1
+ export class BaseProvider {
2
+ supportsToolUse() {
3
+ return this.capabilities.toolUse;
4
+ }
5
+ supportsStreaming() {
6
+ return this.capabilities.streaming;
7
+ }
8
+ }
9
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAUA,MAAM,OAAgB,YAAY;IAMhC,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IACnC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export type { Message, UserMessage, AssistantMessage, SystemMessage, ToolResultMessage, ContentBlock, TextContent, ToolUseContent, ThinkingContent, ToolDef, ChatParams, ChatEvent, TokenUsage, ProviderCapabilities } from './types.js';
2
+ export { Provider, BaseProvider } from './base.js';
3
+ export { OpenAICompatibleProvider } from './openai.js';
4
+ export { AnthropicProvider } from './anthropic.js';
5
+ export { ProviderRegistry } from './registry.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACzO,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { BaseProvider } from './base.js';
2
+ export { OpenAICompatibleProvider } from './openai.js';
3
+ export { AnthropicProvider } from './anthropic.js';
4
+ export { ProviderRegistry } from './registry.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,YAAY,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,23 @@
1
+ import OpenAI from 'openai';
2
+ import { BaseProvider } from './base.js';
3
+ import type { ChatParams, ChatEvent, Message, ToolDef, ProviderCapabilities } from './types.js';
4
+ import type { ProviderConfig, ModelConfig } from '@halfcopilot/config';
5
+ interface OpenAIProviderOptions {
6
+ name: string;
7
+ baseUrl: string;
8
+ apiKey: string;
9
+ models?: Record<string, ModelConfig>;
10
+ }
11
+ export declare class OpenAICompatibleProvider extends BaseProvider {
12
+ readonly name: string;
13
+ readonly capabilities: ProviderCapabilities;
14
+ private client;
15
+ private models;
16
+ constructor(options: OpenAIProviderOptions);
17
+ static fromConfig(name: string, config: ProviderConfig): OpenAICompatibleProvider;
18
+ chat(params: ChatParams): AsyncGenerator<ChatEvent>;
19
+ convertMessages(messages: Message[]): OpenAI.ChatCompletionMessageParam[];
20
+ convertTools(tools: ToolDef[]): OpenAI.ChatCompletionTool[];
21
+ }
22
+ export {};
23
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvE,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACtC;AAED,qBAAa,wBAAyB,SAAQ,YAAY;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAA8B;gBAEhC,OAAO,EAAE,qBAAqB;IAoB1C,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,wBAAwB;IAY1E,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC;IAoF1D,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,0BAA0B,EAAE;IA6CzE,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,kBAAkB,EAAE;CAU5D"}
@@ -0,0 +1,171 @@
1
+ import OpenAI from 'openai';
2
+ import { BaseProvider } from './base.js';
3
+ import { resolveEnvVar } from '@halfcopilot/shared';
4
+ export class OpenAICompatibleProvider extends BaseProvider {
5
+ name;
6
+ capabilities;
7
+ client;
8
+ models;
9
+ constructor(options) {
10
+ super();
11
+ this.name = options.name;
12
+ this.models = options.models ?? {};
13
+ this.client = new OpenAI({
14
+ baseURL: options.baseUrl,
15
+ apiKey: resolveEnvVar(options.apiKey),
16
+ });
17
+ const firstModel = Object.values(this.models)[0];
18
+ this.capabilities = {
19
+ toolUse: true,
20
+ streaming: true,
21
+ thinking: false,
22
+ promptCaching: false,
23
+ contextWindow: firstModel?.contextWindow ?? 128000,
24
+ maxOutputTokens: firstModel?.maxOutput ?? 8192,
25
+ };
26
+ }
27
+ static fromConfig(name, config) {
28
+ if (!config.baseUrl) {
29
+ throw new Error(`OpenAI-compatible provider "${name}" requires a baseUrl`);
30
+ }
31
+ return new OpenAICompatibleProvider({
32
+ name,
33
+ baseUrl: config.baseUrl,
34
+ apiKey: config.apiKey,
35
+ models: config.models,
36
+ });
37
+ }
38
+ async *chat(params) {
39
+ const messages = this.convertMessages(params.messages);
40
+ const tools = params.tools ? this.convertTools(params.tools) : undefined;
41
+ const stream = await this.client.chat.completions.create({
42
+ model: params.model,
43
+ messages: params.systemPrompt
44
+ ? [{ role: 'system', content: params.systemPrompt }, ...messages]
45
+ : messages,
46
+ tools: tools,
47
+ stream: true,
48
+ temperature: params.temperature,
49
+ max_tokens: params.maxTokens,
50
+ });
51
+ let currentToolCall = null;
52
+ let inputTokens = 0;
53
+ let outputTokens = 0;
54
+ for await (const chunk of stream) {
55
+ const choice = chunk.choices?.[0];
56
+ if (!choice)
57
+ continue;
58
+ const delta = choice.delta;
59
+ if (delta?.content) {
60
+ yield { type: 'text', content: delta.content };
61
+ }
62
+ if (delta?.tool_calls) {
63
+ for (const tc of delta.tool_calls) {
64
+ if (tc.id) {
65
+ if (currentToolCall) {
66
+ try {
67
+ yield {
68
+ type: 'tool_use',
69
+ id: currentToolCall.id,
70
+ name: currentToolCall.name,
71
+ input: JSON.parse(currentToolCall.args),
72
+ };
73
+ }
74
+ catch {
75
+ yield {
76
+ type: 'tool_use',
77
+ id: currentToolCall.id,
78
+ name: currentToolCall.name,
79
+ input: {},
80
+ };
81
+ }
82
+ }
83
+ currentToolCall = { id: tc.id, name: tc.function?.name ?? '', args: '' };
84
+ }
85
+ if (tc.function?.arguments && currentToolCall) {
86
+ currentToolCall.args += tc.function.arguments;
87
+ }
88
+ }
89
+ }
90
+ if (chunk.usage) {
91
+ inputTokens = chunk.usage.prompt_tokens ?? 0;
92
+ outputTokens = chunk.usage.completion_tokens ?? 0;
93
+ }
94
+ }
95
+ if (currentToolCall) {
96
+ try {
97
+ yield {
98
+ type: 'tool_use',
99
+ id: currentToolCall.id,
100
+ name: currentToolCall.name,
101
+ input: JSON.parse(currentToolCall.args),
102
+ };
103
+ }
104
+ catch {
105
+ yield {
106
+ type: 'tool_use',
107
+ id: currentToolCall.id,
108
+ name: currentToolCall.name,
109
+ input: {},
110
+ };
111
+ }
112
+ }
113
+ yield { type: 'done', usage: { inputTokens, outputTokens } };
114
+ }
115
+ convertMessages(messages) {
116
+ return messages.map((msg) => {
117
+ if (msg.role === 'system') {
118
+ return { role: 'system', content: msg.content };
119
+ }
120
+ if (msg.role === 'user') {
121
+ return { role: 'user', content: msg.content };
122
+ }
123
+ if (msg.role === 'assistant') {
124
+ if (typeof msg.content === 'string') {
125
+ return { role: 'assistant', content: msg.content };
126
+ }
127
+ const textParts = [];
128
+ const toolCalls = [];
129
+ for (const block of msg.content) {
130
+ if (block.type === 'text') {
131
+ textParts.push(block.text);
132
+ }
133
+ else if (block.type === 'tool_use') {
134
+ toolCalls.push({
135
+ id: block.id,
136
+ type: 'function',
137
+ function: {
138
+ name: block.name,
139
+ arguments: JSON.stringify(block.input),
140
+ },
141
+ });
142
+ }
143
+ }
144
+ return {
145
+ role: 'assistant',
146
+ content: textParts.join('') || null,
147
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
148
+ };
149
+ }
150
+ if (msg.role === 'tool_result') {
151
+ return {
152
+ role: 'tool',
153
+ tool_call_id: msg.toolUseId,
154
+ content: msg.content,
155
+ };
156
+ }
157
+ return { role: 'user', content: String(msg) };
158
+ });
159
+ }
160
+ convertTools(tools) {
161
+ return tools.map((tool) => ({
162
+ type: 'function',
163
+ function: {
164
+ name: tool.name,
165
+ description: tool.description,
166
+ parameters: tool.inputSchema,
167
+ },
168
+ }));
169
+ }
170
+ }
171
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Provider } from './base.js';
2
+ import type { HalfCopilotConfig } from '@halfcopilot/config';
3
+ export declare class ProviderRegistry {
4
+ private providers;
5
+ register(name: string, provider: Provider): void;
6
+ get(name: string): Provider;
7
+ has(name: string): boolean;
8
+ list(): string[];
9
+ createFromConfig(config: HalfCopilotConfig): void;
10
+ }
11
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA+B;IAEhD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIhD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAQ3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,IAAI,IAAI,MAAM,EAAE;IAIhB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAmClD"}