@smartledger.technology/openai-claw 0.1.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 (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -0
  3. package/dist/agent.js +262 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/autopr/index.js +127 -0
  6. package/dist/autopr/index.js.map +1 -0
  7. package/dist/client.js +199 -0
  8. package/dist/client.js.map +1 -0
  9. package/dist/commands/index.js +624 -0
  10. package/dist/commands/index.js.map +1 -0
  11. package/dist/config.js +71 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/cost.js +97 -0
  14. package/dist/cost.js.map +1 -0
  15. package/dist/eval/cli.js +32 -0
  16. package/dist/eval/cli.js.map +1 -0
  17. package/dist/eval/index.js +134 -0
  18. package/dist/eval/index.js.map +1 -0
  19. package/dist/hooks/index.js +69 -0
  20. package/dist/hooks/index.js.map +1 -0
  21. package/dist/index.js +246 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/input.js +96 -0
  24. package/dist/input.js.map +1 -0
  25. package/dist/mcp/index.js +135 -0
  26. package/dist/mcp/index.js.map +1 -0
  27. package/dist/memory/compaction.js +70 -0
  28. package/dist/memory/compaction.js.map +1 -0
  29. package/dist/memory/index.js +56 -0
  30. package/dist/memory/index.js.map +1 -0
  31. package/dist/notifications/index.js +80 -0
  32. package/dist/notifications/index.js.map +1 -0
  33. package/dist/permissions/index.js +104 -0
  34. package/dist/permissions/index.js.map +1 -0
  35. package/dist/planmode.js +12 -0
  36. package/dist/planmode.js.map +1 -0
  37. package/dist/plugins/index.js +239 -0
  38. package/dist/plugins/index.js.map +1 -0
  39. package/dist/prompts/system.js +148 -0
  40. package/dist/prompts/system.js.map +1 -0
  41. package/dist/rag/index.js +158 -0
  42. package/dist/rag/index.js.map +1 -0
  43. package/dist/self-review/index.js +157 -0
  44. package/dist/self-review/index.js.map +1 -0
  45. package/dist/session.js +113 -0
  46. package/dist/session.js.map +1 -0
  47. package/dist/skills/index.js +39 -0
  48. package/dist/skills/index.js.map +1 -0
  49. package/dist/subagent.js +128 -0
  50. package/dist/subagent.js.map +1 -0
  51. package/dist/subagents/index.js +61 -0
  52. package/dist/subagents/index.js.map +1 -0
  53. package/dist/tools/bash.js +94 -0
  54. package/dist/tools/bash.js.map +1 -0
  55. package/dist/tools/edit.js +64 -0
  56. package/dist/tools/edit.js.map +1 -0
  57. package/dist/tools/glob.js +34 -0
  58. package/dist/tools/glob.js.map +1 -0
  59. package/dist/tools/grep.js +87 -0
  60. package/dist/tools/grep.js.map +1 -0
  61. package/dist/tools/index.js +44 -0
  62. package/dist/tools/index.js.map +1 -0
  63. package/dist/tools/ls.js +39 -0
  64. package/dist/tools/ls.js.map +1 -0
  65. package/dist/tools/read.js +126 -0
  66. package/dist/tools/read.js.map +1 -0
  67. package/dist/tools/semantic.js +40 -0
  68. package/dist/tools/semantic.js.map +1 -0
  69. package/dist/tools/shell.js +131 -0
  70. package/dist/tools/shell.js.map +1 -0
  71. package/dist/tools/task.js +91 -0
  72. package/dist/tools/task.js.map +1 -0
  73. package/dist/tools/todo.js +64 -0
  74. package/dist/tools/todo.js.map +1 -0
  75. package/dist/tools/types.js +7 -0
  76. package/dist/tools/types.js.map +1 -0
  77. package/dist/tools/webfetch.js +62 -0
  78. package/dist/tools/webfetch.js.map +1 -0
  79. package/dist/tools/websearch.js +82 -0
  80. package/dist/tools/websearch.js.map +1 -0
  81. package/dist/tools/write.js +39 -0
  82. package/dist/tools/write.js.map +1 -0
  83. package/dist/ui/repl.js +203 -0
  84. package/dist/ui/repl.js.map +1 -0
  85. package/dist/ui/tui/App.js +234 -0
  86. package/dist/ui/tui/App.js.map +1 -0
  87. package/dist/ui/tui/Diff.js +38 -0
  88. package/dist/ui/tui/Diff.js.map +1 -0
  89. package/dist/ui/tui/MessageView.js +50 -0
  90. package/dist/ui/tui/MessageView.js.map +1 -0
  91. package/dist/ui/tui/PermissionPrompt.js +47 -0
  92. package/dist/ui/tui/PermissionPrompt.js.map +1 -0
  93. package/dist/ui/tui/SlashSuggest.js +36 -0
  94. package/dist/ui/tui/SlashSuggest.js.map +1 -0
  95. package/dist/ui/tui/StatusBar.js +31 -0
  96. package/dist/ui/tui/StatusBar.js.map +1 -0
  97. package/dist/ui/tui/highlight.js +66 -0
  98. package/dist/ui/tui/highlight.js.map +1 -0
  99. package/dist/ui/tui/index.js +12 -0
  100. package/dist/ui/tui/index.js.map +1 -0
  101. package/dist/ui/tui/markdown.js +46 -0
  102. package/dist/ui/tui/markdown.js.map +1 -0
  103. package/dist/ui/tui/types.js +2 -0
  104. package/dist/ui/tui/types.js.map +1 -0
  105. package/dist/web/index.js +195 -0
  106. package/dist/web/index.js.map +1 -0
  107. package/package.json +79 -0
package/dist/client.js ADDED
@@ -0,0 +1,199 @@
1
+ import OpenAI from "openai";
2
+ export function resolveModel(config, role = "default") {
3
+ return config.models?.[role] ?? config.model;
4
+ }
5
+ export class FriendlyApiError extends Error {
6
+ retryable;
7
+ constructor(message, retryable) {
8
+ super(message);
9
+ this.retryable = retryable;
10
+ this.name = "FriendlyApiError";
11
+ }
12
+ }
13
+ function classifyError(e) {
14
+ const status = e?.status ?? e?.response?.status;
15
+ const code = e?.code;
16
+ const msg = e?.message ?? String(e);
17
+ if (status === 401) {
18
+ return new FriendlyApiError("OpenAI rejected the API key (401). Check OPENAI_API_KEY in your .env or environment.", false);
19
+ }
20
+ if (status === 404) {
21
+ return new FriendlyApiError(`Model not found (404). Check that the model name is correct: ${msg}`, false);
22
+ }
23
+ if (status === 429) {
24
+ return new FriendlyApiError(`Rate limited (429). ${msg}`, true);
25
+ }
26
+ if (status === 400) {
27
+ return new FriendlyApiError(`Bad request (400): ${msg}`, false);
28
+ }
29
+ if (status === 403) {
30
+ return new FriendlyApiError(`Forbidden (403). Your account may not have access to this model: ${msg}`, false);
31
+ }
32
+ if (status && status >= 500) {
33
+ return new FriendlyApiError(`OpenAI server error (${status}). ${msg}`, true);
34
+ }
35
+ if (code === "ECONNRESET" || code === "ENOTFOUND" || code === "ETIMEDOUT" || code === "EAI_AGAIN") {
36
+ return new FriendlyApiError(`Network error (${code}). Check your connection.`, true);
37
+ }
38
+ if (e?.name === "AbortError" || msg.includes("aborted")) {
39
+ return new FriendlyApiError("Request aborted.", false);
40
+ }
41
+ return new FriendlyApiError(msg, false);
42
+ }
43
+ async function withRetry(fn, opts = {}) {
44
+ const maxAttempts = opts.maxAttempts ?? 4;
45
+ const baseDelay = opts.baseDelayMs ?? 750;
46
+ let lastErr;
47
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
48
+ try {
49
+ return await fn();
50
+ }
51
+ catch (e) {
52
+ const friendly = e instanceof FriendlyApiError ? e : classifyError(e);
53
+ lastErr = friendly;
54
+ if (!friendly.retryable || attempt === maxAttempts)
55
+ throw friendly;
56
+ const jitter = Math.random() * 200;
57
+ const delay = baseDelay * Math.pow(2, attempt - 1) + jitter;
58
+ await new Promise((r) => setTimeout(r, delay));
59
+ }
60
+ }
61
+ throw lastErr ?? new FriendlyApiError("unknown error", false);
62
+ }
63
+ export class OpenAIClient {
64
+ config;
65
+ client;
66
+ constructor(config) {
67
+ this.config = config;
68
+ this.client = new OpenAI({
69
+ apiKey: config.apiKey,
70
+ baseURL: config.baseURL,
71
+ });
72
+ }
73
+ async complete(messages, tools, opts = {}) {
74
+ const toolDefs = tools.map((t) => ({
75
+ type: "function",
76
+ function: {
77
+ name: t.name,
78
+ description: t.description,
79
+ parameters: t.parameters,
80
+ },
81
+ }));
82
+ const model = opts.model ?? resolveModel(this.config, opts.modelRole);
83
+ const body = {
84
+ model,
85
+ messages: messages,
86
+ tools: toolDefs.length > 0 ? toolDefs : undefined,
87
+ tool_choice: toolDefs.length > 0 ? "auto" : undefined,
88
+ };
89
+ if (this.config.temperature !== undefined)
90
+ body.temperature = this.config.temperature;
91
+ if (this.config.maxTokens !== undefined)
92
+ body.max_completion_tokens = this.config.maxTokens;
93
+ if (process.env.CLAW_DEBUG_REQUESTS) {
94
+ const sample = body.messages.map((m) => ({
95
+ role: m.role,
96
+ content: typeof m.content === "string"
97
+ ? m.content.slice(0, 80)
98
+ : Array.isArray(m.content)
99
+ ? m.content.map((p) => p.type === "image_url" ? "[image]" : (p.text ?? "").slice(0, 80))
100
+ : null,
101
+ tool_calls: m.tool_calls?.map((t) => t.function?.name),
102
+ }));
103
+ console.error("[claw-debug] messages:", JSON.stringify(sample, null, 2));
104
+ }
105
+ if (opts.stream) {
106
+ return this.completeStreaming(body, opts);
107
+ }
108
+ const response = await withRetry(() => this.client.chat.completions.create(body, { signal: opts.abortSignal }));
109
+ const choice = response.choices[0];
110
+ return {
111
+ content: choice.message.content ?? null,
112
+ tool_calls: (choice.message.tool_calls ?? []),
113
+ finish_reason: choice.finish_reason ?? "stop",
114
+ usage: response.usage
115
+ ? {
116
+ prompt_tokens: response.usage.prompt_tokens,
117
+ completion_tokens: response.usage.completion_tokens,
118
+ total_tokens: response.usage.total_tokens,
119
+ cached_tokens: response.usage.prompt_tokens_details?.cached_tokens ?? 0,
120
+ }
121
+ : undefined,
122
+ };
123
+ }
124
+ async completeStreaming(body, opts) {
125
+ body.stream = true;
126
+ body.stream_options = { include_usage: true };
127
+ const stream = await withRetry(() => this.client.chat.completions.create(body, { signal: opts.abortSignal }));
128
+ let content = "";
129
+ const toolCalls = new Map();
130
+ let finishReason = "stop";
131
+ let usage;
132
+ try {
133
+ for await (const chunk of stream) {
134
+ const choice = chunk.choices?.[0];
135
+ if (!choice) {
136
+ if (chunk.usage) {
137
+ usage = {
138
+ prompt_tokens: chunk.usage.prompt_tokens,
139
+ completion_tokens: chunk.usage.completion_tokens,
140
+ total_tokens: chunk.usage.total_tokens,
141
+ cached_tokens: chunk.usage.prompt_tokens_details?.cached_tokens ?? 0,
142
+ };
143
+ }
144
+ continue;
145
+ }
146
+ const delta = choice.delta;
147
+ if (delta?.content) {
148
+ content += delta.content;
149
+ opts.onDelta?.(delta.content);
150
+ }
151
+ if (delta?.tool_calls) {
152
+ for (const tc of delta.tool_calls) {
153
+ const idx = tc.index ?? 0;
154
+ const existing = toolCalls.get(idx) ?? {
155
+ id: tc.id ?? "",
156
+ type: "function",
157
+ function: { name: "", arguments: "" },
158
+ };
159
+ if (tc.id)
160
+ existing.id = tc.id;
161
+ if (tc.function?.name)
162
+ existing.function.name += tc.function.name;
163
+ if (tc.function?.arguments)
164
+ existing.function.arguments += tc.function.arguments;
165
+ toolCalls.set(idx, existing);
166
+ }
167
+ }
168
+ if (choice.finish_reason)
169
+ finishReason = choice.finish_reason;
170
+ }
171
+ }
172
+ catch (e) {
173
+ throw e instanceof FriendlyApiError ? e : classifyError(e);
174
+ }
175
+ // Validate assembled tool calls — discard malformed ones rather than letting
176
+ // the agent reply "Tool not found" or crash on JSON.parse downstream.
177
+ const validTools = [];
178
+ for (const tc of toolCalls.values()) {
179
+ if (!tc.function.name)
180
+ continue;
181
+ if (tc.function.arguments) {
182
+ try {
183
+ JSON.parse(tc.function.arguments);
184
+ }
185
+ catch {
186
+ continue;
187
+ }
188
+ }
189
+ validTools.push(tc);
190
+ }
191
+ return {
192
+ content: content || null,
193
+ tool_calls: validTools,
194
+ finish_reason: finishReason,
195
+ usage,
196
+ };
197
+ }
198
+ }
199
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}