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,61 @@
1
+ import { OpenAICompatibleProvider } from './openai.js';
2
+ import { AnthropicProvider } from './anthropic.js';
3
+ import { ProviderError } from '@halfcopilot/shared';
4
+ export class ProviderRegistry {
5
+ providers = new Map();
6
+ register(name, provider) {
7
+ this.providers.set(name, provider);
8
+ }
9
+ get(name) {
10
+ const provider = this.providers.get(name);
11
+ if (!provider) {
12
+ throw new ProviderError(name, `Provider "${name}" not found. Available: ${this.list().join(', ')}`);
13
+ }
14
+ return provider;
15
+ }
16
+ has(name) {
17
+ return this.providers.has(name);
18
+ }
19
+ list() {
20
+ return Array.from(this.providers.keys());
21
+ }
22
+ createFromConfig(config) {
23
+ if (!config.providers)
24
+ return;
25
+ for (const [name, providerConfig] of Object.entries(config.providers)) {
26
+ if (this.providers.has(name))
27
+ continue;
28
+ try {
29
+ if (providerConfig.type === 'openai-compatible') {
30
+ // Check if API key is set
31
+ if (providerConfig.apiKey.startsWith('env:')) {
32
+ const envKey = providerConfig.apiKey.slice(4);
33
+ if (!process.env[envKey]) {
34
+ // Skip this provider if env var not set
35
+ continue;
36
+ }
37
+ }
38
+ const provider = OpenAICompatibleProvider.fromConfig(name, providerConfig);
39
+ this.register(name, provider);
40
+ }
41
+ else if (providerConfig.type === 'anthropic') {
42
+ // Check if API key is set
43
+ if (providerConfig.apiKey.startsWith('env:')) {
44
+ const envKey = providerConfig.apiKey.slice(4);
45
+ if (!process.env[envKey]) {
46
+ // Skip this provider if env var not set
47
+ continue;
48
+ }
49
+ }
50
+ const provider = AnthropicProvider.fromConfig(providerConfig);
51
+ this.register(name, provider);
52
+ }
53
+ }
54
+ catch (err) {
55
+ // Skip providers that fail to initialize
56
+ // console.warn(`Warning: Failed to initialize provider "${name}": ${err}`);
57
+ }
58
+ }
59
+ }
60
+ }
61
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,OAAO,gBAAgB;IACnB,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEhD,QAAQ,CAAC,IAAY,EAAE,QAAkB;QACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,aAAa,CAAC,IAAI,EAAE,aAAa,IAAI,2BAA2B,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,gBAAgB,CAAC,MAAyB;QACxC,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO;QAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACtE,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAEvC,IAAI,CAAC;gBACH,IAAI,cAAc,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;oBAChD,0BAA0B;oBAC1B,IAAI,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;4BACzB,wCAAwC;4BACxC,SAAS;wBACX,CAAC;oBACH,CAAC;oBACD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBAC3E,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAChC,CAAC;qBAAM,IAAI,cAAc,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC/C,0BAA0B;oBAC1B,IAAI,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;4BACzB,wCAAwC;4BACxC,SAAS;wBACX,CAAC;oBACH,CAAC;oBACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;oBAC9D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,yCAAyC;gBACzC,4EAA4E;YAC9E,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,84 @@
1
+ export interface TextContent {
2
+ type: 'text';
3
+ text: string;
4
+ }
5
+ export interface ToolUseContent {
6
+ type: 'tool_use';
7
+ id: string;
8
+ name: string;
9
+ input: Record<string, unknown>;
10
+ }
11
+ export interface ThinkingContent {
12
+ type: 'thinking';
13
+ text: string;
14
+ }
15
+ export type ContentBlock = TextContent | ToolUseContent | ThinkingContent;
16
+ export interface UserMessage {
17
+ role: 'user';
18
+ content: string;
19
+ }
20
+ export interface AssistantMessage {
21
+ role: 'assistant';
22
+ content: string | ContentBlock[];
23
+ }
24
+ export interface SystemMessage {
25
+ role: 'system';
26
+ content: string;
27
+ }
28
+ export interface ToolResultMessage {
29
+ role: 'tool_result';
30
+ toolUseId: string;
31
+ content: string;
32
+ isError?: boolean;
33
+ }
34
+ export type Message = UserMessage | AssistantMessage | SystemMessage | ToolResultMessage;
35
+ export interface ToolDef {
36
+ name: string;
37
+ description: string;
38
+ inputSchema: Record<string, unknown>;
39
+ }
40
+ export interface ChatParams {
41
+ model: string;
42
+ messages: Message[];
43
+ tools?: ToolDef[];
44
+ systemPrompt?: string;
45
+ temperature?: number;
46
+ maxTokens?: number;
47
+ }
48
+ export interface TokenUsage {
49
+ inputTokens: number;
50
+ outputTokens: number;
51
+ cacheReadTokens?: number;
52
+ cacheWriteTokens?: number;
53
+ }
54
+ export type ChatEvent = {
55
+ type: 'text';
56
+ content: string;
57
+ } | {
58
+ type: 'tool_use';
59
+ id: string;
60
+ name: string;
61
+ input: Record<string, unknown>;
62
+ } | {
63
+ type: 'tool_result';
64
+ id: string;
65
+ output: string;
66
+ } | {
67
+ type: 'thinking';
68
+ content: string;
69
+ } | {
70
+ type: 'done';
71
+ usage: TokenUsage;
72
+ } | {
73
+ type: 'error';
74
+ error: Error;
75
+ };
76
+ export interface ProviderCapabilities {
77
+ toolUse: boolean;
78
+ streaming: boolean;
79
+ thinking: boolean;
80
+ promptCaching: boolean;
81
+ contextWindow: number;
82
+ maxOutputTokens: number;
83
+ }
84
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,eAAe,CAAC;AAE1E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,gBAAgB,GAAG,aAAa,GAAG,iBAAiB,CAAC;AAIzF,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAIpC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,3 @@
1
+ // ---- Message Types ----
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,0BAA0B"}
@@ -0,0 +1,18 @@
1
+ export declare class HalfCopilotError extends Error {
2
+ readonly code: string;
3
+ constructor(code: string, message: string, cause?: Error);
4
+ }
5
+ export declare class ProviderError extends HalfCopilotError {
6
+ readonly provider: string;
7
+ constructor(provider: string, message: string, cause?: Error);
8
+ }
9
+ export declare class ToolError extends HalfCopilotError {
10
+ readonly tool: string;
11
+ constructor(tool: string, message: string, cause?: Error);
12
+ }
13
+ export declare class PermissionError extends HalfCopilotError {
14
+ readonly tool: string;
15
+ readonly reason: string;
16
+ constructor(tool: string, reason: string);
17
+ }
18
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAiB,SAAQ,KAAK;aAEvB,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,KAAK;CAKhB;AAED,qBAAa,aAAc,SAAQ,gBAAgB;aAE/B,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM,EAChC,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,KAAK;CAKhB;AAED,qBAAa,SAAU,SAAQ,gBAAgB;aAE3B,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,KAAK;CAKhB;AAED,qBAAa,eAAgB,SAAQ,gBAAgB;aAEjC,IAAI,EAAE,MAAM;aACZ,MAAM,EAAE,MAAM;gBADd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM;CAKjC"}
@@ -0,0 +1,35 @@
1
+ export class HalfCopilotError extends Error {
2
+ code;
3
+ constructor(code, message, cause) {
4
+ super(message, { cause });
5
+ this.code = code;
6
+ this.name = 'HalfCopilotError';
7
+ }
8
+ }
9
+ export class ProviderError extends HalfCopilotError {
10
+ provider;
11
+ constructor(provider, message, cause) {
12
+ super('PROVIDER_ERROR', `[${provider}] ${message}`, cause);
13
+ this.provider = provider;
14
+ this.name = 'ProviderError';
15
+ }
16
+ }
17
+ export class ToolError extends HalfCopilotError {
18
+ tool;
19
+ constructor(tool, message, cause) {
20
+ super('TOOL_ERROR', `[${tool}] ${message}`, cause);
21
+ this.tool = tool;
22
+ this.name = 'ToolError';
23
+ }
24
+ }
25
+ export class PermissionError extends HalfCopilotError {
26
+ tool;
27
+ reason;
28
+ constructor(tool, reason) {
29
+ super('PERMISSION_DENIED', `Permission denied for ${tool}: ${reason}`);
30
+ this.tool = tool;
31
+ this.reason = reason;
32
+ this.name = 'PermissionError';
33
+ }
34
+ }
35
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAEvB;IADlB,YACkB,IAAY,EAC5B,OAAe,EACf,KAAa;QAEb,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAJV,SAAI,GAAJ,IAAI,CAAQ;QAK5B,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,gBAAgB;IAE/B;IADlB,YACkB,QAAgB,EAChC,OAAe,EACf,KAAa;QAEb,KAAK,CAAC,gBAAgB,EAAE,IAAI,QAAQ,KAAK,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAJ3C,aAAQ,GAAR,QAAQ,CAAQ;QAKhC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,gBAAgB;IAE3B;IADlB,YACkB,IAAY,EAC5B,OAAe,EACf,KAAa;QAEb,KAAK,CAAC,YAAY,EAAE,IAAI,IAAI,KAAK,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAJnC,SAAI,GAAJ,IAAI,CAAQ;QAK5B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,gBAAgB;IAEjC;IACA;IAFlB,YACkB,IAAY,EACZ,MAAc;QAE9B,KAAK,CAAC,mBAAmB,EAAE,yBAAyB,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC;QAHvD,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QAG9B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export { HalfCopilotError, ProviderError, ToolError, PermissionError } from './errors.js';
2
+ export { Logger, LogLevel, logger } from './logger.js';
3
+ export { truncate, formatDuration, resolveEnvVar, generateId } from './utils.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { HalfCopilotError, ProviderError, ToolError, PermissionError } from './errors.js';
2
+ export { Logger, LogLevel, logger } from './logger.js';
3
+ export { truncate, formatDuration, resolveEnvVar, generateId } from './utils.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare enum LogLevel {
2
+ DEBUG = 0,
3
+ INFO = 1,
4
+ WARN = 2,
5
+ ERROR = 3,
6
+ SILENT = 4
7
+ }
8
+ export declare class Logger {
9
+ private level;
10
+ constructor(level?: LogLevel);
11
+ setLevel(level: LogLevel): void;
12
+ debug(msg: string, ...args: unknown[]): void;
13
+ info(msg: string, ...args: unknown[]): void;
14
+ warn(msg: string, ...args: unknown[]): void;
15
+ error(msg: string, ...args: unknown[]): void;
16
+ }
17
+ export declare const logger: Logger;
18
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,MAAM,IAAI;CACX;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAW;gBAEZ,KAAK,GAAE,QAAwB;IAI3C,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM5C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM3C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM3C,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;CAK7C;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -0,0 +1,39 @@
1
+ export var LogLevel;
2
+ (function (LogLevel) {
3
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
4
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
5
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
6
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
7
+ LogLevel[LogLevel["SILENT"] = 4] = "SILENT";
8
+ })(LogLevel || (LogLevel = {}));
9
+ export class Logger {
10
+ level;
11
+ constructor(level = LogLevel.INFO) {
12
+ this.level = level;
13
+ }
14
+ setLevel(level) {
15
+ this.level = level;
16
+ }
17
+ debug(msg, ...args) {
18
+ if (this.level <= LogLevel.DEBUG) {
19
+ console.debug(`[DEBUG] ${msg}`, ...args);
20
+ }
21
+ }
22
+ info(msg, ...args) {
23
+ if (this.level <= LogLevel.INFO) {
24
+ console.info(`[INFO] ${msg}`, ...args);
25
+ }
26
+ }
27
+ warn(msg, ...args) {
28
+ if (this.level <= LogLevel.WARN) {
29
+ console.warn(`[WARN] ${msg}`, ...args);
30
+ }
31
+ }
32
+ error(msg, ...args) {
33
+ if (this.level <= LogLevel.ERROR) {
34
+ console.error(`[ERROR] ${msg}`, ...args);
35
+ }
36
+ }
37
+ }
38
+ export const logger = new Logger();
39
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,2CAAU,CAAA;AACZ,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAED,MAAM,OAAO,MAAM;IACT,KAAK,CAAW;IAExB,YAAY,QAAkB,QAAQ,CAAC,IAAI;QACzC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,GAAG,IAAe;QACnC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,GAAG,IAAe;QAClC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,GAAG,IAAe;QAClC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,GAAG,IAAe;QACnC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function truncate(str: string, maxLen: number): string;
2
+ export declare function formatDuration(ms: number): string;
3
+ export declare function resolveEnvVar(value: string): string;
4
+ export declare function generateId(): string;
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
@@ -0,0 +1,27 @@
1
+ export function truncate(str, maxLen) {
2
+ if (str.length <= maxLen)
3
+ return str;
4
+ return str.slice(0, maxLen - 3) + '...';
5
+ }
6
+ export function formatDuration(ms) {
7
+ if (ms < 1000)
8
+ return `${ms}ms`;
9
+ if (ms < 60000)
10
+ return `${(ms / 1000).toFixed(1)}s`;
11
+ return `${(ms / 60000).toFixed(1)}m`;
12
+ }
13
+ export function resolveEnvVar(value) {
14
+ if (value.startsWith('env:')) {
15
+ const envKey = value.slice(4);
16
+ const envVal = process.env[envKey];
17
+ if (!envVal) {
18
+ throw new Error(`Environment variable ${envKey} is not set`);
19
+ }
20
+ return envVal;
21
+ }
22
+ return value;
23
+ }
24
+ export function generateId() {
25
+ return Math.random().toString(36).substring(2, 15);
26
+ }
27
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,MAAc;IAClD,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,EAAE,IAAI,CAAC;IAChC,IAAI,EAAE,GAAG,KAAK;QAAE,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,OAAO,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,aAAa,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Skill } from './types.js';
2
+ export declare function createGitCommitSkill(): Skill;
3
+ export declare function createTestRunnerSkill(): Skill;
4
+ export declare function createCodeReviewSkill(): Skill;
5
+ export declare function createDocumentationSkill(): Skill;
6
+ export declare function createRefactorSkill(): Skill;
7
+ export declare function createBuiltinSkills(): Skill[];
8
+ //# sourceMappingURL=builtins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../src/builtins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAA6B,MAAM,YAAY,CAAC;AAEnE,wBAAgB,oBAAoB,IAAI,KAAK,CAyB5C;AAED,wBAAgB,qBAAqB,IAAI,KAAK,CAyB7C;AAED,wBAAgB,qBAAqB,IAAI,KAAK,CA4B7C;AAED,wBAAgB,wBAAwB,IAAI,KAAK,CAyBhD;AAED,wBAAgB,mBAAmB,IAAI,KAAK,CA0B3C;AAED,wBAAgB,mBAAmB,IAAI,KAAK,EAAE,CAQ7C"}
@@ -0,0 +1,144 @@
1
+ export function createGitCommitSkill() {
2
+ return {
3
+ name: 'git-commit',
4
+ description: 'Create a git commit with a meaningful message',
5
+ instructions: `When the user asks to commit changes or save work:
6
+ 1. Run 'git status' to see what files have changed
7
+ 2. Run 'git diff' to see the actual changes
8
+ 3. Analyze the changes and write a meaningful commit message
9
+ 4. Stage the relevant files with 'git add'
10
+ 5. Create the commit with 'git commit -m "message"'
11
+
12
+ Follow conventional commit format: type(scope): description
13
+ Types: feat, fix, docs, style, refactor, test, chore`,
14
+ triggers: [
15
+ { type: 'keyword', value: 'commit' },
16
+ { type: 'keyword', value: 'save changes' },
17
+ { type: 'intent', value: 'save' },
18
+ ],
19
+ async execute(context, input) {
20
+ return {
21
+ success: true,
22
+ output: 'Please use the bash tool to run git commands. I will help you create a meaningful commit message based on the changes.',
23
+ };
24
+ },
25
+ };
26
+ }
27
+ export function createTestRunnerSkill() {
28
+ return {
29
+ name: 'test-runner',
30
+ description: 'Run tests for the current project',
31
+ instructions: `When the user asks to run tests:
32
+ 1. Check for package.json to determine the test framework
33
+ 2. Run the appropriate test command:
34
+ - npm/pnpm/yarn: 'npm test' / 'pnpm test' / 'yarn test'
35
+ - pytest: 'pytest'
36
+ - go test: 'go test ./...'
37
+ 3. Report the test results
38
+
39
+ If tests fail, help identify and fix the issues.`,
40
+ triggers: [
41
+ { type: 'keyword', value: 'test' },
42
+ { type: 'keyword', value: 'run tests' },
43
+ { type: 'intent', value: 'test' },
44
+ ],
45
+ async execute(context, input) {
46
+ return {
47
+ success: true,
48
+ output: 'Please use the bash tool to run test commands. I will help you analyze and fix any test failures.',
49
+ };
50
+ },
51
+ };
52
+ }
53
+ export function createCodeReviewSkill() {
54
+ return {
55
+ name: 'code-review',
56
+ description: 'Review code for potential issues',
57
+ instructions: `When reviewing code:
58
+ 1. Read the file(s) to review
59
+ 2. Check for:
60
+ - Syntax errors
61
+ - Logic errors
62
+ - Security vulnerabilities
63
+ - Performance issues
64
+ - Code style inconsistencies
65
+ - Missing error handling
66
+ - Unclear variable/function names
67
+ 3. Provide specific, actionable feedback
68
+ 4. Suggest improvements with code examples`,
69
+ triggers: [
70
+ { type: 'keyword', value: 'review' },
71
+ { type: 'keyword', value: 'check code' },
72
+ { type: 'keyword', value: 'code review' },
73
+ ],
74
+ async execute(context, input) {
75
+ return {
76
+ success: true,
77
+ output: 'Please specify which files you would like me to review. I will analyze them for potential issues and suggest improvements.',
78
+ };
79
+ },
80
+ };
81
+ }
82
+ export function createDocumentationSkill() {
83
+ return {
84
+ name: 'documentation',
85
+ description: 'Generate or update documentation',
86
+ instructions: `When generating documentation:
87
+ 1. Read the source code
88
+ 2. Identify:
89
+ - Public APIs and their signatures
90
+ - Configuration options
91
+ - Usage examples
92
+ - Dependencies
93
+ 3. Generate clear, concise documentation
94
+ 4. Use appropriate format (JSDoc, Markdown, etc.)`,
95
+ triggers: [
96
+ { type: 'keyword', value: 'document' },
97
+ { type: 'keyword', value: 'docs' },
98
+ { type: 'keyword', value: 'readme' },
99
+ ],
100
+ async execute(context, input) {
101
+ return {
102
+ success: true,
103
+ output: 'Please specify which code or project you would like me to document. I will generate clear and comprehensive documentation.',
104
+ };
105
+ },
106
+ };
107
+ }
108
+ export function createRefactorSkill() {
109
+ return {
110
+ name: 'refactor',
111
+ description: 'Refactor code for better quality',
112
+ instructions: `When refactoring code:
113
+ 1. Understand the current code structure
114
+ 2. Identify improvement opportunities:
115
+ - Extract repeated code into functions
116
+ - Simplify complex conditionals
117
+ - Improve naming
118
+ - Remove dead code
119
+ - Apply design patterns where appropriate
120
+ 3. Make changes incrementally
121
+ 4. Verify each change doesn't break functionality`,
122
+ triggers: [
123
+ { type: 'keyword', value: 'refactor' },
124
+ { type: 'keyword', value: 'clean up' },
125
+ { type: 'keyword', value: 'improve' },
126
+ ],
127
+ async execute(context, input) {
128
+ return {
129
+ success: true,
130
+ output: 'Please specify which code you would like me to refactor. I will help improve its quality and maintainability.',
131
+ };
132
+ },
133
+ };
134
+ }
135
+ export function createBuiltinSkills() {
136
+ return [
137
+ createGitCommitSkill(),
138
+ createTestRunnerSkill(),
139
+ createCodeReviewSkill(),
140
+ createDocumentationSkill(),
141
+ createRefactorSkill(),
142
+ ];
143
+ }
144
+ //# sourceMappingURL=builtins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../src/builtins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type { Skill, SkillDefinition, SkillResource, SkillTrigger, SkillContext, SkillResult } from './types.js';
2
+ export { SkillRegistry } from './registry.js';
3
+ export { createBuiltinSkills, createGitCommitSkill, createTestRunnerSkill, createCodeReviewSkill, createDocumentationSkill, createRefactorSkill } from './builtins.js';
4
+ //# 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,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACjH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { SkillRegistry } from './registry.js';
2
+ export { createBuiltinSkills, createGitCommitSkill, createTestRunnerSkill, createCodeReviewSkill, createDocumentationSkill, createRefactorSkill } from './builtins.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Skill, SkillDefinition, SkillContext, SkillResult } from './types.js';
2
+ export declare class SkillRegistry {
3
+ private skills;
4
+ register(skill: Skill): void;
5
+ unregister(name: string): void;
6
+ get(name: string): Skill | undefined;
7
+ has(name: string): boolean;
8
+ list(): SkillDefinition[];
9
+ findByTrigger(input: string): Skill[];
10
+ execute(name: string, context: SkillContext, input: Record<string, unknown>): Promise<SkillResult>;
11
+ private matchIntent;
12
+ }
13
+ //# 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,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEpF,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA4B;IAE1C,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI5B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,IAAI,IAAI,eAAe,EAAE;IAWzB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE;IAqC/B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAmBxG,OAAO,CAAC,WAAW;CAepB"}