@devflow-tools/sdk 0.15.0 → 0.16.1

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 (101) hide show
  1. package/README.md +1 -1
  2. package/dist/api-client.d.ts +16 -14
  3. package/dist/api-client.d.ts.map +1 -1
  4. package/dist/api-client.js +24 -7
  5. package/dist/api-client.js.map +1 -1
  6. package/dist/auth.d.ts +8 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +53 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/data/LocalDataProvider.d.ts +6 -3
  11. package/dist/data/LocalDataProvider.d.ts.map +1 -1
  12. package/dist/data/LocalDataProvider.js +46 -55
  13. package/dist/data/LocalDataProvider.js.map +1 -1
  14. package/dist/data/LocalDataProvider.test.js +5 -2
  15. package/dist/data/LocalDataProvider.test.js.map +1 -1
  16. package/dist/data/default-enforcer-rules.d.ts +5 -0
  17. package/dist/data/default-enforcer-rules.d.ts.map +1 -0
  18. package/dist/data/default-enforcer-rules.js +163 -0
  19. package/dist/data/default-enforcer-rules.js.map +1 -0
  20. package/dist/data/devflow-schema.d.ts +3 -0
  21. package/dist/data/devflow-schema.d.ts.map +1 -0
  22. package/dist/data/devflow-schema.js +58 -0
  23. package/dist/data/devflow-schema.js.map +1 -0
  24. package/dist/index.d.ts +5 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +5 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/interfaces/IDataProvider.d.ts +3 -1
  29. package/dist/interfaces/IDataProvider.d.ts.map +1 -1
  30. package/dist/interfaces/IMemoryEngine.d.ts +4 -12
  31. package/dist/interfaces/IMemoryEngine.d.ts.map +1 -1
  32. package/dist/paths.d.ts +7 -0
  33. package/dist/paths.d.ts.map +1 -0
  34. package/dist/paths.js +24 -0
  35. package/dist/paths.js.map +1 -0
  36. package/dist/paths.test.d.ts +2 -0
  37. package/dist/paths.test.d.ts.map +1 -0
  38. package/dist/paths.test.js +32 -0
  39. package/dist/paths.test.js.map +1 -0
  40. package/dist/plugin-loader.d.ts +1 -1
  41. package/dist/plugin-loader.d.ts.map +1 -1
  42. package/dist/plugin-loader.js +27 -19
  43. package/dist/plugin-loader.js.map +1 -1
  44. package/dist/plugin-workflow.d.ts +3 -0
  45. package/dist/plugin-workflow.d.ts.map +1 -0
  46. package/dist/plugin-workflow.js +31 -0
  47. package/dist/plugin-workflow.js.map +1 -0
  48. package/dist/types/benchmark.d.ts +84 -0
  49. package/dist/types/benchmark.d.ts.map +1 -1
  50. package/dist/types/context.d.ts +5 -0
  51. package/dist/types/context.d.ts.map +1 -1
  52. package/dist/types/enforcer.d.ts +16 -0
  53. package/dist/types/enforcer.d.ts.map +1 -1
  54. package/dist/types/index.d.ts +1 -1
  55. package/dist/types/index.d.ts.map +1 -1
  56. package/dist/types/index.js +1 -1
  57. package/dist/types/index.js.map +1 -1
  58. package/dist/types/knowledge.d.ts +9 -1
  59. package/dist/types/knowledge.d.ts.map +1 -1
  60. package/dist/types/memory.d.ts +70 -1
  61. package/dist/types/memory.d.ts.map +1 -1
  62. package/dist/types/memory.js +35 -1
  63. package/dist/types/memory.js.map +1 -1
  64. package/dist/types/memory.test.d.ts +2 -0
  65. package/dist/types/memory.test.d.ts.map +1 -0
  66. package/dist/types/memory.test.js +13 -0
  67. package/dist/types/memory.test.js.map +1 -0
  68. package/dist/types/plugin.d.ts +24 -2
  69. package/dist/types/plugin.d.ts.map +1 -1
  70. package/dist/types/retrieval.d.ts +12 -0
  71. package/dist/types/retrieval.d.ts.map +1 -0
  72. package/dist/types/retrieval.js +2 -0
  73. package/dist/types/retrieval.js.map +1 -0
  74. package/dist/types/telemetry.d.ts +3 -0
  75. package/dist/types/telemetry.d.ts.map +1 -1
  76. package/dist/types/workflow.d.ts +11 -0
  77. package/dist/types/workflow.d.ts.map +1 -1
  78. package/dist/utils/config.d.ts +6 -0
  79. package/dist/utils/config.d.ts.map +1 -1
  80. package/dist/utils/config.js.map +1 -1
  81. package/package.json +11 -2
  82. package/dist/llm/CliSubAgentClient.d.ts +0 -9
  83. package/dist/llm/CliSubAgentClient.d.ts.map +0 -1
  84. package/dist/llm/CliSubAgentClient.js +0 -68
  85. package/dist/llm/CliSubAgentClient.js.map +0 -1
  86. package/dist/llm/DirectAPIClient.d.ts +0 -9
  87. package/dist/llm/DirectAPIClient.d.ts.map +0 -1
  88. package/dist/llm/DirectAPIClient.js +0 -83
  89. package/dist/llm/DirectAPIClient.js.map +0 -1
  90. package/dist/llm/FallbackLLMClient.d.ts +0 -10
  91. package/dist/llm/FallbackLLMClient.d.ts.map +0 -1
  92. package/dist/llm/FallbackLLMClient.js +0 -31
  93. package/dist/llm/FallbackLLMClient.js.map +0 -1
  94. package/dist/llm/index.d.ts +0 -4
  95. package/dist/llm/index.d.ts.map +0 -1
  96. package/dist/llm/index.js +0 -4
  97. package/dist/llm/index.js.map +0 -1
  98. package/dist/types/llm-client.d.ts +0 -24
  99. package/dist/types/llm-client.d.ts.map +0 -1
  100. package/dist/types/llm-client.js +0 -2
  101. package/dist/types/llm-client.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAE3C,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAEpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,MAAqB;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAEnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAUjC,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAE3C,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAEpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,MAAqB;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAEnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devflow-tools/sdk",
3
- "version": "0.15.0",
3
+ "version": "0.16.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -13,6 +13,14 @@
13
13
  "import": "./dist/step-templates/index.js",
14
14
  "types": "./dist/step-templates/index.d.ts"
15
15
  },
16
+ "./auth": {
17
+ "import": "./dist/auth.js",
18
+ "types": "./dist/auth.d.ts"
19
+ },
20
+ "./plugin-workflow": {
21
+ "import": "./dist/plugin-workflow.js",
22
+ "types": "./dist/plugin-workflow.d.ts"
23
+ },
16
24
  "./utils/project-scanner": {
17
25
  "import": "./dist/utils/project-scanner.js",
18
26
  "types": "./dist/utils/project-scanner.d.ts"
@@ -25,6 +33,7 @@
25
33
  "clean": "rm -rf dist"
26
34
  },
27
35
  "dependencies": {
36
+ "@devflow-tools/database": "0.16.0",
28
37
  "tiktoken": "^1.0.0"
29
38
  },
30
39
  "devDependencies": {
@@ -34,5 +43,5 @@
34
43
  "files": [
35
44
  "dist"
36
45
  ],
37
- "gitHead": "716b2355d8bea1138f4b7551758044c3663fad0e"
46
+ "gitHead": "dfaeb66efe9c87c388fbe6f1b706e9fcf087ce6d"
38
47
  }
@@ -1,9 +0,0 @@
1
- import type { LLMClient, LlmRequest, LlmResponse } from '../types/llm-client.js';
2
- export declare class CliSubAgentClient implements LLMClient {
3
- readonly name = "cli-sub-agent";
4
- private _available;
5
- get isAvailable(): boolean;
6
- private checkCli;
7
- chat(request: LlmRequest): Promise<LlmResponse>;
8
- }
9
- //# sourceMappingURL=CliSubAgentClient.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CliSubAgentClient.d.ts","sourceRoot":"","sources":["../../src/llm/CliSubAgentClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAc,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAgB7F,qBAAa,iBAAkB,YAAW,SAAS;IACjD,QAAQ,CAAC,IAAI,mBAAmB;IAChC,OAAO,CAAC,UAAU,CAAwB;IAE1C,IAAI,WAAW,IAAI,OAAO,CAKzB;IAED,OAAO,CAAC,QAAQ;IAcV,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CAsCtD"}
@@ -1,68 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- function buildPrompt(messages, systemPrompt) {
3
- const parts = [];
4
- if (systemPrompt) {
5
- parts.push(`Instructions: ${systemPrompt}`);
6
- }
7
- for (const msg of messages) {
8
- if (msg.role === 'user') {
9
- parts.push(msg.content);
10
- }
11
- }
12
- return parts.join('\n\n');
13
- }
14
- export class CliSubAgentClient {
15
- name = 'cli-sub-agent';
16
- _available = null;
17
- get isAvailable() {
18
- if (this._available === null) {
19
- this._available = this.checkCli();
20
- }
21
- return this._available;
22
- }
23
- checkCli() {
24
- try {
25
- const result = spawn('which', ['claude'], { timeout: 3000 });
26
- return true;
27
- }
28
- catch {
29
- try {
30
- spawn('which', ['claude-code'], { timeout: 3000 });
31
- return true;
32
- }
33
- catch {
34
- return false;
35
- }
36
- }
37
- }
38
- async chat(request) {
39
- const prompt = buildPrompt(request.messages, request.systemPrompt);
40
- return new Promise((resolve, reject) => {
41
- const child = spawn('claude', ['-p', prompt, '--output-format', 'text'], {
42
- stdio: ['pipe', 'pipe', 'pipe'],
43
- timeout: 120000,
44
- env: { ...process.env },
45
- });
46
- let stdout = '';
47
- let stderr = '';
48
- child.stdout?.on('data', (chunk) => {
49
- stdout += chunk.toString('utf-8');
50
- });
51
- child.stderr?.on('data', (chunk) => {
52
- stderr += chunk.toString('utf-8');
53
- });
54
- child.on('close', (code) => {
55
- if (code === 0) {
56
- resolve({ content: stdout.trim() });
57
- }
58
- else {
59
- reject(new Error(`claude CLI exited with code ${code}: ${stderr.slice(0, 200)}`));
60
- }
61
- });
62
- child.on('error', (err) => {
63
- reject(new Error(`Failed to spawn claude CLI: ${err.message}`));
64
- });
65
- });
66
- }
67
- }
68
- //# sourceMappingURL=CliSubAgentClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CliSubAgentClient.js","sourceRoot":"","sources":["../../src/llm/CliSubAgentClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,SAAS,WAAW,CAAC,QAAsB,EAAE,YAAqB;IAChE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,iBAAiB,YAAY,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,OAAO,iBAAiB;IACnB,IAAI,GAAG,eAAe,CAAC;IACxB,UAAU,GAAmB,IAAI,CAAC;IAE1C,IAAI,WAAW;QACb,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC;gBACH,KAAK,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAmB;QAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAEnE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,KAAK,CACjB,QAAQ,EACR,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,EACzC;gBACE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,OAAO,EAAE,MAAM;gBACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;aACxB,CACF,CAAC;YAEF,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACzC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACzC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpF,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,9 +0,0 @@
1
- import type { LLMClient, LlmRequest, LlmResponse } from '../types/llm-client.js';
2
- export declare class DirectAPIClient implements LLMClient {
3
- readonly name = "direct-api";
4
- get isAvailable(): boolean;
5
- chat(request: LlmRequest): Promise<LlmResponse>;
6
- private chatAnthropic;
7
- private chatOpenAICompatible;
8
- }
9
- //# sourceMappingURL=DirectAPIClient.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DirectAPIClient.d.ts","sourceRoot":"","sources":["../../src/llm/DirectAPIClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjF,qBAAa,eAAgB,YAAW,SAAS;IAC/C,QAAQ,CAAC,IAAI,gBAAgB;IAE7B,IAAI,WAAW,IAAI,OAAO,CAMzB;IAEK,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;YAWvC,aAAa;YAiCb,oBAAoB;CAuCnC"}
@@ -1,83 +0,0 @@
1
- export class DirectAPIClient {
2
- name = 'direct-api';
3
- get isAvailable() {
4
- return !!(process.env.ANTHROPIC_API_KEY ||
5
- process.env.OPENROUTER_API_KEY ||
6
- process.env.OPENAI_API_KEY);
7
- }
8
- async chat(request) {
9
- if (process.env.ANTHROPIC_API_KEY) {
10
- return this.chatAnthropic(request);
11
- }
12
- const key = process.env.OPENROUTER_API_KEY || process.env.OPENAI_API_KEY;
13
- if (key) {
14
- return this.chatOpenAICompatible(request, key);
15
- }
16
- throw new Error('No API key configured. Set ANTHROPIC_API_KEY, OPENROUTER_API_KEY, or OPENAI_API_KEY.');
17
- }
18
- async chatAnthropic(request) {
19
- const model = process.env.ANTHROPIC_MODEL || 'claude-haiku-4-5-20251001';
20
- const system = request.systemPrompt || undefined;
21
- const messages = request.messages.map(m => ({ role: m.role, content: m.content }));
22
- const resp = await fetch('https://api.anthropic.com/v1/messages', {
23
- method: 'POST',
24
- headers: {
25
- 'Content-Type': 'application/json',
26
- 'x-api-key': process.env.ANTHROPIC_API_KEY,
27
- 'anthropic-version': '2023-06-01',
28
- },
29
- body: JSON.stringify({
30
- model,
31
- max_tokens: request.maxTokens ?? 1024,
32
- ...(system ? { system } : {}),
33
- messages,
34
- }),
35
- });
36
- if (!resp.ok) {
37
- const err = await resp.text().catch(() => '');
38
- throw new Error(`Anthropic API error ${resp.status}: ${err.slice(0, 200)}`);
39
- }
40
- const data = await resp.json();
41
- return {
42
- content: data?.content?.[0]?.text ?? '',
43
- model: data?.model,
44
- usage: data?.usage ? { input: data.usage.input_tokens, output: data.usage.output_tokens } : undefined,
45
- };
46
- }
47
- async chatOpenAICompatible(request, apiKey) {
48
- const baseUrl = process.env.OPENROUTER_BASE_URL ||
49
- (process.env.OPENAI_API_KEY ? 'https://api.openai.com/v1' : 'https://openrouter.ai/api/v1');
50
- const model = process.env.OPENROUTER_MODEL || process.env.OPENAI_MODEL || 'anthropic/claude-haiku-4.5';
51
- const messages = [];
52
- if (request.systemPrompt) {
53
- messages.push({ role: 'system', content: request.systemPrompt });
54
- }
55
- for (const m of request.messages) {
56
- messages.push({ role: m.role, content: m.content });
57
- }
58
- const resp = await fetch(`${baseUrl}/chat/completions`, {
59
- method: 'POST',
60
- headers: {
61
- 'Content-Type': 'application/json',
62
- 'Authorization': `Bearer ${apiKey}`,
63
- },
64
- body: JSON.stringify({
65
- model,
66
- max_tokens: request.maxTokens ?? 1024,
67
- temperature: request.temperature ?? 0.1,
68
- messages,
69
- }),
70
- });
71
- if (!resp.ok) {
72
- const err = await resp.text().catch(() => '');
73
- throw new Error(`API error ${resp.status}: ${err.slice(0, 200)}`);
74
- }
75
- const data = await resp.json();
76
- return {
77
- content: data?.choices?.[0]?.message?.content ?? '',
78
- model: data?.model,
79
- usage: data?.usage ? { input: data.usage.prompt_tokens, output: data.usage.completion_tokens } : undefined,
80
- };
81
- }
82
- }
83
- //# sourceMappingURL=DirectAPIClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DirectAPIClient.js","sourceRoot":"","sources":["../../src/llm/DirectAPIClient.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { LLMClient, LlmRequest, LlmResponse } from '../types/llm-client.js';
2
- export declare class FallbackLLMClient implements LLMClient {
3
- private primary;
4
- private fallback;
5
- readonly name: string;
6
- constructor(primary: LLMClient, fallback: LLMClient);
7
- get isAvailable(): boolean;
8
- chat(request: LlmRequest): Promise<LlmResponse>;
9
- }
10
- //# sourceMappingURL=FallbackLLMClient.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FallbackLLMClient.d.ts","sourceRoot":"","sources":["../../src/llm/FallbackLLMClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjF,qBAAa,iBAAkB,YAAW,SAAS;IAI/C,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAJlB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAGZ,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,SAAS;IAK7B,IAAI,WAAW,IAAI,OAAO,CAEzB;IAEK,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CAkBtD"}
@@ -1,31 +0,0 @@
1
- export class FallbackLLMClient {
2
- primary;
3
- fallback;
4
- name;
5
- constructor(primary, fallback) {
6
- this.primary = primary;
7
- this.fallback = fallback;
8
- this.name = `fallback(${primary.name}→${fallback.name})`;
9
- }
10
- get isAvailable() {
11
- return this.primary.isAvailable || this.fallback.isAvailable;
12
- }
13
- async chat(request) {
14
- if (this.primary.isAvailable) {
15
- try {
16
- return await this.primary.chat(request);
17
- }
18
- catch (err) {
19
- if (this.fallback.isAvailable) {
20
- return this.fallback.chat(request);
21
- }
22
- throw err;
23
- }
24
- }
25
- if (this.fallback.isAvailable) {
26
- return this.fallback.chat(request);
27
- }
28
- throw new Error('No LLM client available');
29
- }
30
- }
31
- //# sourceMappingURL=FallbackLLMClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FallbackLLMClient.js","sourceRoot":"","sources":["../../src/llm/FallbackLLMClient.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAiB;IAIlB;IACA;IAJD,IAAI,CAAS;IAEtB,YACU,OAAkB,EAClB,QAAmB;QADnB,YAAO,GAAP,OAAO,CAAW;QAClB,aAAQ,GAAR,QAAQ,CAAW;QAE3B,IAAI,CAAC,IAAI,GAAG,YAAY,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC;IAC3D,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAmB;QAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;oBAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrC,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -1,4 +0,0 @@
1
- export { CliSubAgentClient } from './CliSubAgentClient.js';
2
- export { DirectAPIClient } from './DirectAPIClient.js';
3
- export { FallbackLLMClient } from './FallbackLLMClient.js';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/llm/index.js DELETED
@@ -1,4 +0,0 @@
1
- export { CliSubAgentClient } from './CliSubAgentClient.js';
2
- export { DirectAPIClient } from './DirectAPIClient.js';
3
- export { FallbackLLMClient } from './FallbackLLMClient.js';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1,24 +0,0 @@
1
- export interface LlmMessage {
2
- role: 'user' | 'assistant';
3
- content: string;
4
- }
5
- export interface LlmRequest {
6
- messages: LlmMessage[];
7
- maxTokens?: number;
8
- temperature?: number;
9
- systemPrompt?: string;
10
- }
11
- export interface LlmResponse {
12
- content: string;
13
- model?: string;
14
- usage?: {
15
- input: number;
16
- output: number;
17
- };
18
- }
19
- export interface LLMClient {
20
- readonly name: string;
21
- readonly isAvailable: boolean;
22
- chat(request: LlmRequest): Promise<LlmResponse>;
23
- }
24
- //# sourceMappingURL=llm-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/types/llm-client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACjD"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=llm-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/types/llm-client.ts"],"names":[],"mappings":""}