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.
- package/LICENSE +21 -0
- package/README.md +148 -0
- package/bin/halfcop.js +22 -0
- package/dist/index.js +3 -0
- package/dist/packages/cli/dist/halfcop.d.ts +6 -0
- package/dist/packages/cli/dist/halfcop.d.ts.map +1 -0
- package/dist/packages/cli/dist/halfcop.js +448 -0
- package/dist/packages/cli/dist/halfcop.js.map +1 -0
- package/dist/packages/cli/dist/index.d.ts +3 -0
- package/dist/packages/cli/dist/index.d.ts.map +1 -0
- package/dist/packages/cli/dist/index.js +251 -0
- package/dist/packages/cli/dist/index.js.map +1 -0
- package/dist/packages/cli/dist/tui/app.d.ts +11 -0
- package/dist/packages/cli/dist/tui/app.d.ts.map +1 -0
- package/dist/packages/cli/dist/tui/app.js +72 -0
- package/dist/packages/cli/dist/tui/app.js.map +1 -0
- package/dist/packages/cli/dist/tui/components/ChatView.d.ts +12 -0
- package/dist/packages/cli/dist/tui/components/ChatView.d.ts.map +1 -0
- package/dist/packages/cli/dist/tui/components/ChatView.js +6 -0
- package/dist/packages/cli/dist/tui/components/ChatView.js.map +1 -0
- package/dist/packages/cli/dist/tui/components/InputField.d.ts +8 -0
- package/dist/packages/cli/dist/tui/components/InputField.d.ts.map +1 -0
- package/dist/packages/cli/dist/tui/components/InputField.js +22 -0
- package/dist/packages/cli/dist/tui/components/InputField.js.map +1 -0
- package/dist/packages/cli/dist/tui/components/StatusBar.d.ts +13 -0
- package/dist/packages/cli/dist/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/packages/cli/dist/tui/components/StatusBar.js +6 -0
- package/dist/packages/cli/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/packages/cli/dist/tui/components/ToolApproval.d.ts +10 -0
- package/dist/packages/cli/dist/tui/components/ToolApproval.d.ts.map +1 -0
- package/dist/packages/cli/dist/tui/components/ToolApproval.js +14 -0
- package/dist/packages/cli/dist/tui/components/ToolApproval.js.map +1 -0
- package/dist/packages/cli/dist/tui/components/index.d.ts +5 -0
- package/dist/packages/cli/dist/tui/components/index.d.ts.map +1 -0
- package/dist/packages/cli/dist/tui/components/index.js +5 -0
- package/dist/packages/cli/dist/tui/components/index.js.map +1 -0
- package/dist/packages/cli/dist/tui/index.d.ts +3 -0
- package/dist/packages/cli/dist/tui/index.d.ts.map +1 -0
- package/dist/packages/cli/dist/tui/index.js +3 -0
- package/dist/packages/cli/dist/tui/index.js.map +1 -0
- package/dist/packages/config/dist/defaults.d.ts +3 -0
- package/dist/packages/config/dist/defaults.d.ts.map +1 -0
- package/dist/packages/config/dist/defaults.js +30 -0
- package/dist/packages/config/dist/defaults.js.map +1 -0
- package/dist/packages/config/dist/index.d.ts +4 -0
- package/dist/packages/config/dist/index.d.ts.map +1 -0
- package/dist/packages/config/dist/index.js +4 -0
- package/dist/packages/config/dist/index.js.map +1 -0
- package/dist/packages/config/dist/loader.d.ts +4 -0
- package/dist/packages/config/dist/loader.d.ts.map +1 -0
- package/dist/packages/config/dist/loader.js +80 -0
- package/dist/packages/config/dist/loader.js.map +1 -0
- package/dist/packages/config/dist/schema.d.ts +323 -0
- package/dist/packages/config/dist/schema.d.ts.map +1 -0
- package/dist/packages/config/dist/schema.js +56 -0
- package/dist/packages/config/dist/schema.js.map +1 -0
- package/dist/packages/core/dist/agent-loop.d.ts +19 -0
- package/dist/packages/core/dist/agent-loop.d.ts.map +1 -0
- package/dist/packages/core/dist/agent-loop.js +140 -0
- package/dist/packages/core/dist/agent-loop.js.map +1 -0
- package/dist/packages/core/dist/conversation.d.ts +22 -0
- package/dist/packages/core/dist/conversation.d.ts.map +1 -0
- package/dist/packages/core/dist/conversation.js +66 -0
- package/dist/packages/core/dist/conversation.js.map +1 -0
- package/dist/packages/core/dist/hybrid/index.d.ts +4 -0
- package/dist/packages/core/dist/hybrid/index.d.ts.map +1 -0
- package/dist/packages/core/dist/hybrid/index.js +4 -0
- package/dist/packages/core/dist/hybrid/index.js.map +1 -0
- package/dist/packages/core/dist/hybrid/mapper.d.ts +11 -0
- package/dist/packages/core/dist/hybrid/mapper.d.ts.map +1 -0
- package/dist/packages/core/dist/hybrid/mapper.js +53 -0
- package/dist/packages/core/dist/hybrid/mapper.js.map +1 -0
- package/dist/packages/core/dist/hybrid/parser.d.ts +36 -0
- package/dist/packages/core/dist/hybrid/parser.d.ts.map +1 -0
- package/dist/packages/core/dist/hybrid/parser.js +118 -0
- package/dist/packages/core/dist/hybrid/parser.js.map +1 -0
- package/dist/packages/core/dist/hybrid/provider.d.ts +14 -0
- package/dist/packages/core/dist/hybrid/provider.d.ts.map +1 -0
- package/dist/packages/core/dist/hybrid/provider.js +109 -0
- package/dist/packages/core/dist/hybrid/provider.js.map +1 -0
- package/dist/packages/core/dist/index.d.ts +5 -0
- package/dist/packages/core/dist/index.d.ts.map +1 -0
- package/dist/packages/core/dist/index.js +5 -0
- package/dist/packages/core/dist/index.js.map +1 -0
- package/dist/packages/core/dist/types.d.ts +36 -0
- package/dist/packages/core/dist/types.d.ts.map +1 -0
- package/dist/packages/core/dist/types.js +11 -0
- package/dist/packages/core/dist/types.js.map +1 -0
- package/dist/packages/mcp/dist/adapter.d.ts +15 -0
- package/dist/packages/mcp/dist/adapter.d.ts.map +1 -0
- package/dist/packages/mcp/dist/adapter.js +44 -0
- package/dist/packages/mcp/dist/adapter.js.map +1 -0
- package/dist/packages/mcp/dist/client.d.ts +31 -0
- package/dist/packages/mcp/dist/client.d.ts.map +1 -0
- package/dist/packages/mcp/dist/client.js +140 -0
- package/dist/packages/mcp/dist/client.js.map +1 -0
- package/dist/packages/mcp/dist/index.d.ts +6 -0
- package/dist/packages/mcp/dist/index.d.ts.map +1 -0
- package/dist/packages/mcp/dist/index.js +4 -0
- package/dist/packages/mcp/dist/index.js.map +1 -0
- package/dist/packages/mcp/dist/transport.d.ts +47 -0
- package/dist/packages/mcp/dist/transport.d.ts.map +1 -0
- package/dist/packages/mcp/dist/transport.js +123 -0
- package/dist/packages/mcp/dist/transport.js.map +1 -0
- package/dist/packages/mcp/dist/types.d.ts +64 -0
- package/dist/packages/mcp/dist/types.d.ts.map +1 -0
- package/dist/packages/mcp/dist/types.js +2 -0
- package/dist/packages/mcp/dist/types.js.map +1 -0
- package/dist/packages/memory/dist/index.d.ts +3 -0
- package/dist/packages/memory/dist/index.d.ts.map +1 -0
- package/dist/packages/memory/dist/index.js +2 -0
- package/dist/packages/memory/dist/index.js.map +1 -0
- package/dist/packages/memory/dist/store.d.ts +15 -0
- package/dist/packages/memory/dist/store.d.ts.map +1 -0
- package/dist/packages/memory/dist/store.js +93 -0
- package/dist/packages/memory/dist/store.js.map +1 -0
- package/dist/packages/memory/dist/types.d.ts +14 -0
- package/dist/packages/memory/dist/types.d.ts.map +1 -0
- package/dist/packages/memory/dist/types.js +2 -0
- package/dist/packages/memory/dist/types.js.map +1 -0
- package/dist/packages/provider/dist/anthropic.d.ts +21 -0
- package/dist/packages/provider/dist/anthropic.d.ts.map +1 -0
- package/dist/packages/provider/dist/anthropic.js +148 -0
- package/dist/packages/provider/dist/anthropic.js.map +1 -0
- package/dist/packages/provider/dist/base.d.ts +16 -0
- package/dist/packages/provider/dist/base.d.ts.map +1 -0
- package/dist/packages/provider/dist/base.js +9 -0
- package/dist/packages/provider/dist/base.js.map +1 -0
- package/dist/packages/provider/dist/index.d.ts +6 -0
- package/dist/packages/provider/dist/index.d.ts.map +1 -0
- package/dist/packages/provider/dist/index.js +5 -0
- package/dist/packages/provider/dist/index.js.map +1 -0
- package/dist/packages/provider/dist/openai.d.ts +23 -0
- package/dist/packages/provider/dist/openai.d.ts.map +1 -0
- package/dist/packages/provider/dist/openai.js +171 -0
- package/dist/packages/provider/dist/openai.js.map +1 -0
- package/dist/packages/provider/dist/registry.d.ts +11 -0
- package/dist/packages/provider/dist/registry.d.ts.map +1 -0
- package/dist/packages/provider/dist/registry.js +61 -0
- package/dist/packages/provider/dist/registry.js.map +1 -0
- package/dist/packages/provider/dist/types.d.ts +84 -0
- package/dist/packages/provider/dist/types.d.ts.map +1 -0
- package/dist/packages/provider/dist/types.js +3 -0
- package/dist/packages/provider/dist/types.js.map +1 -0
- package/dist/packages/shared/dist/errors.d.ts +18 -0
- package/dist/packages/shared/dist/errors.d.ts.map +1 -0
- package/dist/packages/shared/dist/errors.js +35 -0
- package/dist/packages/shared/dist/errors.js.map +1 -0
- package/dist/packages/shared/dist/index.d.ts +4 -0
- package/dist/packages/shared/dist/index.d.ts.map +1 -0
- package/dist/packages/shared/dist/index.js +4 -0
- package/dist/packages/shared/dist/index.js.map +1 -0
- package/dist/packages/shared/dist/logger.d.ts +18 -0
- package/dist/packages/shared/dist/logger.d.ts.map +1 -0
- package/dist/packages/shared/dist/logger.js +39 -0
- package/dist/packages/shared/dist/logger.js.map +1 -0
- package/dist/packages/shared/dist/utils.d.ts +5 -0
- package/dist/packages/shared/dist/utils.d.ts.map +1 -0
- package/dist/packages/shared/dist/utils.js +27 -0
- package/dist/packages/shared/dist/utils.js.map +1 -0
- package/dist/packages/skills/dist/builtins.d.ts +8 -0
- package/dist/packages/skills/dist/builtins.d.ts.map +1 -0
- package/dist/packages/skills/dist/builtins.js +144 -0
- package/dist/packages/skills/dist/builtins.js.map +1 -0
- package/dist/packages/skills/dist/index.d.ts +4 -0
- package/dist/packages/skills/dist/index.d.ts.map +1 -0
- package/dist/packages/skills/dist/index.js +3 -0
- package/dist/packages/skills/dist/index.js.map +1 -0
- package/dist/packages/skills/dist/registry.d.ts +13 -0
- package/dist/packages/skills/dist/registry.d.ts.map +1 -0
- package/dist/packages/skills/dist/registry.js +93 -0
- package/dist/packages/skills/dist/registry.js.map +1 -0
- package/dist/packages/skills/dist/types.d.ts +35 -0
- package/dist/packages/skills/dist/types.d.ts.map +1 -0
- package/dist/packages/skills/dist/types.js +2 -0
- package/dist/packages/skills/dist/types.js.map +1 -0
- package/dist/packages/tools/dist/builtins/bash.d.ts +3 -0
- package/dist/packages/tools/dist/builtins/bash.d.ts.map +1 -0
- package/dist/packages/tools/dist/builtins/bash.js +38 -0
- package/dist/packages/tools/dist/builtins/bash.js.map +1 -0
- package/dist/packages/tools/dist/builtins/file-edit.d.ts +3 -0
- package/dist/packages/tools/dist/builtins/file-edit.d.ts.map +1 -0
- package/dist/packages/tools/dist/builtins/file-edit.js +45 -0
- package/dist/packages/tools/dist/builtins/file-edit.js.map +1 -0
- package/dist/packages/tools/dist/builtins/file-read.d.ts +3 -0
- package/dist/packages/tools/dist/builtins/file-read.d.ts.map +1 -0
- package/dist/packages/tools/dist/builtins/file-read.js +39 -0
- package/dist/packages/tools/dist/builtins/file-read.js.map +1 -0
- package/dist/packages/tools/dist/builtins/file-write.d.ts +3 -0
- package/dist/packages/tools/dist/builtins/file-write.d.ts.map +1 -0
- package/dist/packages/tools/dist/builtins/file-write.js +30 -0
- package/dist/packages/tools/dist/builtins/file-write.js.map +1 -0
- package/dist/packages/tools/dist/builtins/glob.d.ts +3 -0
- package/dist/packages/tools/dist/builtins/glob.d.ts.map +1 -0
- package/dist/packages/tools/dist/builtins/glob.js +33 -0
- package/dist/packages/tools/dist/builtins/glob.js.map +1 -0
- package/dist/packages/tools/dist/builtins/grep.d.ts +3 -0
- package/dist/packages/tools/dist/builtins/grep.d.ts.map +1 -0
- package/dist/packages/tools/dist/builtins/grep.js +59 -0
- package/dist/packages/tools/dist/builtins/grep.js.map +1 -0
- package/dist/packages/tools/dist/builtins/index.d.ts +10 -0
- package/dist/packages/tools/dist/builtins/index.d.ts.map +1 -0
- package/dist/packages/tools/dist/builtins/index.js +18 -0
- package/dist/packages/tools/dist/builtins/index.js.map +1 -0
- package/dist/packages/tools/dist/executor.d.ts +11 -0
- package/dist/packages/tools/dist/executor.d.ts.map +1 -0
- package/dist/packages/tools/dist/executor.js +36 -0
- package/dist/packages/tools/dist/executor.js.map +1 -0
- package/dist/packages/tools/dist/index.d.ts +7 -0
- package/dist/packages/tools/dist/index.d.ts.map +1 -0
- package/dist/packages/tools/dist/index.js +6 -0
- package/dist/packages/tools/dist/index.js.map +1 -0
- package/dist/packages/tools/dist/permission.d.ts +17 -0
- package/dist/packages/tools/dist/permission.d.ts.map +1 -0
- package/dist/packages/tools/dist/permission.js +74 -0
- package/dist/packages/tools/dist/permission.js.map +1 -0
- package/dist/packages/tools/dist/registry.d.ts +13 -0
- package/dist/packages/tools/dist/registry.d.ts.map +1 -0
- package/dist/packages/tools/dist/registry.js +34 -0
- package/dist/packages/tools/dist/registry.js.map +1 -0
- package/dist/packages/tools/dist/types.d.ts +28 -0
- package/dist/packages/tools/dist/types.d.ts.map +1 -0
- package/dist/packages/tools/dist/types.js +16 -0
- package/dist/packages/tools/dist/types.js.map +1 -0
- package/package.json +47 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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":"AAEA,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,+CAA+C;QAC5D,YAAY,EAAE;;;;;;;;qDAQmC;QACjD,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;YACpC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE;YAC1C,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;SAClC;QACD,KAAK,CAAC,OAAO,CAAC,OAAqB,EAAE,KAA8B;YACjE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,wHAAwH;aACjI,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,mCAAmC;QAChD,YAAY,EAAE;;;;;;;;iDAQ+B;QAC7C,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;YAClC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE;YACvC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;SAClC;QACD,KAAK,CAAC,OAAO,CAAC,OAAqB,EAAE,KAA8B;YACjE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,mGAAmG;aAC5G,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,kCAAkC;QAC/C,YAAY,EAAE;;;;;;;;;;;2CAWyB;QACvC,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;YACpC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE;YACxC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE;SAC1C;QACD,KAAK,CAAC,OAAO,CAAC,OAAqB,EAAE,KAA8B;YACjE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,4HAA4H;aACrI,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,kCAAkC;QAC/C,YAAY,EAAE;;;;;;;;kDAQgC;QAC9C,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;YACtC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;YAClC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;SACrC;QACD,KAAK,CAAC,OAAO,CAAC,OAAqB,EAAE,KAA8B;YACjE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,4HAA4H;aACrI,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,kCAAkC;QAC/C,YAAY,EAAE;;;;;;;;;kDASgC;QAC9C,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;YACtC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;YACtC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;SACtC;QACD,KAAK,CAAC,OAAO,CAAC,OAAqB,EAAE,KAA8B;YACjE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,+GAA+G;aACxH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,oBAAoB,EAAE;QACtB,qBAAqB,EAAE;QACvB,qBAAqB,EAAE;QACvB,wBAAwB,EAAE;QAC1B,mBAAmB,EAAE;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -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 @@
|
|
|
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"}
|