@caoyacheng/tclaw 0.1.3 → 0.2.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/dist/cli.js CHANGED
@@ -1,17 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * T-Claw:包装 @mariozechner/pi-coding-agent。
4
- * 在加载前设置 PI_PACKAGE_DIR,使 APP_NAME / 配置目录来自本包 package.json 的 piConfig
5
- *(见 pi-mono packages/coding-agent/src/config.ts)。
3
+ * T-Claw CLI - 基于 pi-mono SDK 的智能编码助手
4
+ * 使用 SDK 嵌入方式实现
6
5
  */
7
6
  process.title = "tclaw";
8
- process.emitWarning = (() => { });
9
- import { dirname } from "node:path";
10
- import { fileURLToPath } from "node:url";
11
- import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici";
12
- const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
13
- process.env.PI_PACKAGE_DIR = packageRoot;
14
- setGlobalDispatcher(new EnvHttpProxyAgent());
15
- const { main } = await import("@mariozechner/pi-coding-agent");
7
+ import { main } from "./main.js";
16
8
  main(process.argv.slice(2));
17
9
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;AACxB,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,GAAE,CAAC,CAA+B,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAEhE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrE,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,WAAW,CAAC;AAEzC,mBAAmB,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;AAE7C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;AAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AACH,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,74 @@
1
+ import { existsSync, readFileSync } from "fs";
2
+ import { homedir } from "os";
3
+ import { dirname, join } from "path";
4
+ import { fileURLToPath } from "url";
5
+ // =============================================================================
6
+ // Package Detection
7
+ // =============================================================================
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ /** Get the base directory for resolving package assets */
11
+ export function getPackageDir() {
12
+ const envDir = process.env.TCLAW_PACKAGE_DIR;
13
+ if (envDir) {
14
+ if (envDir === "~")
15
+ return homedir();
16
+ if (envDir.startsWith("~/"))
17
+ return homedir() + envDir.slice(1);
18
+ return envDir;
19
+ }
20
+ // Node.js: walk up from __dirname until we find package.json
21
+ let dir = __dirname;
22
+ while (dir !== dirname(dir)) {
23
+ if (existsSync(join(dir, "package.json"))) {
24
+ return dir;
25
+ }
26
+ dir = dirname(dir);
27
+ }
28
+ return __dirname;
29
+ }
30
+ /** Get path to package.json */
31
+ export function getPackageJsonPath() {
32
+ return join(getPackageDir(), "package.json");
33
+ }
34
+ // =============================================================================
35
+ // App Config (from package.json piConfig)
36
+ // =============================================================================
37
+ const pkg = JSON.parse(readFileSync(getPackageJsonPath(), "utf-8"));
38
+ export const APP_NAME = pkg.piConfig?.name || "tclaw";
39
+ export const CONFIG_DIR_NAME = pkg.piConfig?.configDir || ".tclaw";
40
+ export const VERSION = pkg.version;
41
+ // 环境变量名称
42
+ export const ENV_AGENT_DIR = `${APP_NAME.toUpperCase()}_CODING_AGENT_DIR`;
43
+ // =============================================================================
44
+ // User Config Paths (~/.tclaw/agent/*)
45
+ // =============================================================================
46
+ /** Get the agent config directory (e.g., ~/.tclaw/agent/) */
47
+ export function getAgentDir() {
48
+ const envDir = process.env[ENV_AGENT_DIR];
49
+ if (envDir) {
50
+ if (envDir === "~")
51
+ return homedir();
52
+ if (envDir.startsWith("~/"))
53
+ return homedir() + envDir.slice(1);
54
+ return envDir;
55
+ }
56
+ return join(homedir(), CONFIG_DIR_NAME, "agent");
57
+ }
58
+ /** Get path to models.json */
59
+ export function getModelsPath() {
60
+ return join(getAgentDir(), "models.json");
61
+ }
62
+ /** Get path to auth.json */
63
+ export function getAuthPath() {
64
+ return join(getAgentDir(), "auth.json");
65
+ }
66
+ /** Get path to settings.json */
67
+ export function getSettingsPath() {
68
+ return join(getAgentDir(), "settings.json");
69
+ }
70
+ /** Get path to sessions directory */
71
+ export function getSessionsDir() {
72
+ return join(getAgentDir(), "sessions");
73
+ }
74
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/main.js ADDED
@@ -0,0 +1,310 @@
1
+ /**
2
+ * T-Claw 主程序 - 基于 pi-mono SDK 实现
3
+ * 自定义系统提示词
4
+ */
5
+ import chalk from "chalk";
6
+ import { APP_NAME, VERSION, getAgentDir, getModelsPath } from "./config.js";
7
+ import { createAgentSession, SessionManager, } from "@mariozechner/pi-coding-agent";
8
+ function parseArgs(args) {
9
+ const result = {
10
+ help: false,
11
+ version: false,
12
+ messages: [],
13
+ fileArgs: [],
14
+ print: false,
15
+ continue_: false,
16
+ listModels: false,
17
+ };
18
+ for (let i = 0; i < args.length; i++) {
19
+ const arg = args[i];
20
+ if (arg === "-h" || arg === "--help") {
21
+ result.help = true;
22
+ }
23
+ else if (arg === "-v" || arg === "--version") {
24
+ result.version = true;
25
+ }
26
+ else if (arg === "-p" || arg === "--print") {
27
+ result.print = true;
28
+ }
29
+ else if (arg === "-c" || arg === "--continue") {
30
+ result.continue_ = true;
31
+ }
32
+ else if (arg === "--list-models") {
33
+ result.listModels = true;
34
+ }
35
+ else if (arg === "-m" || arg === "--model") {
36
+ result.model = args[++i];
37
+ }
38
+ else if (arg === "--provider") {
39
+ result.provider = args[++i];
40
+ }
41
+ else if (arg === "-e" || arg === "--message") {
42
+ result.message = args[++i];
43
+ }
44
+ else if (arg === "--tools") {
45
+ result.tools = args[++i].split(",");
46
+ }
47
+ else if (arg.startsWith("@")) {
48
+ result.fileArgs.push(arg);
49
+ }
50
+ else if (!arg.startsWith("-")) {
51
+ result.messages.push(arg);
52
+ }
53
+ }
54
+ return result;
55
+ }
56
+ function printHelp() {
57
+ console.log(`
58
+ ${chalk.bold.green(`${APP_NAME} - T-Claw 智能编码助手`)}
59
+
60
+ ${chalk.bold("用法:")}
61
+ ${APP_NAME} [选项] [@文件...] [消息...]
62
+
63
+ ${chalk.bold("选项:")}
64
+ -h, --help 显示帮助信息
65
+ -v, --version 显示版本信息
66
+ -p, --print 非交互模式:处理提示后退出
67
+ -c, --continue 继续上一个会话
68
+ -m, --model <模型> 指定使用的模型
69
+ --provider <提供商> 指定模型提供商 (openai, anthropic, google)
70
+ -e, --message <消息> 指定初始消息
71
+ --tools <工具> 指定启用的工具(逗号分隔)
72
+ --list-models 列出所有可用的模型
73
+
74
+ ${chalk.bold("可用工具:")}
75
+ read - 读取文件内容
76
+ bash - 执行 bash 命令
77
+ edit - 编辑文件(查找/替换)
78
+ write - 写入文件(创建/覆盖)
79
+ grep - 搜索文件内容(只读)
80
+ find - 按 glob 模式查找文件(只读)
81
+ ls - 列出目录内容(只读)
82
+
83
+ ${chalk.bold("示例:")}
84
+ ${APP_NAME} "帮我写一个 Hello World 程序"
85
+ ${APP_NAME} --model claude-sonnet-4-20250514 --provider anthropic --message "解释这段代码"
86
+ ${APP_NAME} --continue "继续上次的工作"
87
+ ${APP_NAME} --tools read,bash,grep -p "审查 src 目录中的代码"
88
+
89
+ ${chalk.bold("环境变量:")}
90
+ ANTHROPIC_API_KEY Anthropic API 密钥
91
+ OPENAI_API_KEY OpenAI API 密钥
92
+ GOOGLE_API_KEY Google API 密钥
93
+
94
+ ${chalk.bold("配置文件:")}
95
+ 配置目录: ${getAgentDir()}
96
+ 模型配置: ${getModelsPath()}
97
+ `);
98
+ }
99
+ /**
100
+ * T-Claw 自定义系统提示词
101
+ */
102
+ function getTClawSystemPrompt() {
103
+ const date = new Date().toISOString().slice(0, 10);
104
+ return `You are T-Claw, an expert coding assistant built on pi-mono. You help users by reading files, executing commands, editing code, and writing new files.
105
+
106
+ Your core capabilities:
107
+ - Read and analyze source code files
108
+ - Execute bash commands for file operations, code execution, and git operations
109
+ - Edit files with precise find/replace operations
110
+ - Write new files with proper formatting
111
+
112
+ Your personality:
113
+ - Be concise and efficient in your responses
114
+ - Provide clear explanations with file paths when working with files
115
+ - Suggest improvements and best practices when appropriate
116
+ - Think step by step for complex problems
117
+
118
+ Available tools:
119
+ - read: Read file contents
120
+ - bash: Execute bash commands
121
+ - edit: Edit files with find/replace
122
+ - write: Write files (creates/overwrites)
123
+ - grep: Search file contents (read-only)
124
+ - find: Find files by glob pattern (read-only)
125
+ - ls: List directory contents (read-only)
126
+
127
+ Guidelines:
128
+ - Always verify file operations succeed before reporting completion
129
+ - Use version control best practices (check git status before major changes)
130
+ - Handle errors gracefully and provide actionable error messages
131
+ - Respect project-specific conventions and coding standards
132
+
133
+ Current date: ${date}
134
+ Current working directory: {cwd}
135
+
136
+ When the user asks about coding tasks:
137
+ 1. Understand the requirements clearly
138
+ 2. Plan the approach
139
+ 3. Implement step by step
140
+ 4. Verify the changes work correctly`;
141
+ }
142
+ async function listAvailableModels() {
143
+ console.log(chalk.bold("\n📋 T-Claw 支持的模型:\n"));
144
+ console.log(chalk.bold("Anthropic:"));
145
+ console.log(" - claude-opus-4-20250514");
146
+ console.log(" - claude-sonnet-4-20250514");
147
+ console.log(" - claude-3-5-sonnet-20241022");
148
+ console.log(" - claude-3-5-haiku-20241022");
149
+ console.log(chalk.bold("\nOpenAI:"));
150
+ console.log(" - gpt-4o");
151
+ console.log(" - gpt-4o-mini");
152
+ console.log(" - gpt-4-turbo");
153
+ console.log(chalk.bold("\nGoogle:"));
154
+ console.log(" - gemini-2.0-flash");
155
+ console.log(" - gemini-1.5-pro");
156
+ console.log(chalk.dim("\n💡 使用前请设置相应的 API 密钥环境变量\n"));
157
+ }
158
+ async function runInteractiveMode(cwd, agentDir, args) {
159
+ console.log(chalk.bold.green(`\n🔮 ${APP_NAME} - 智能编码助手 v${VERSION}\n`));
160
+ console.log(chalk.dim("按 Ctrl+C 或输入 /exit 退出\n"));
161
+ // 检查 API 密钥
162
+ const hasAnthropicKey = !!process.env.ANTHROPIC_API_KEY;
163
+ const hasOpenAIKey = !!process.env.OPENAI_API_KEY;
164
+ const hasGoogleKey = !!process.env.GOOGLE_API_KEY;
165
+ if (!hasAnthropicKey && !hasOpenAIKey && !hasGoogleKey) {
166
+ console.log(chalk.red("❌ 错误: 未设置任何 API 密钥"));
167
+ console.log(chalk.yellow("\n请设置以下环境变量之一:"));
168
+ console.log(" - ANTHROPIC_API_KEY (Anthropic)");
169
+ console.log(" - OPENAI_API_KEY (OpenAI)");
170
+ console.log(" - GOOGLE_API_KEY (Google)");
171
+ process.exit(1);
172
+ }
173
+ // 构建初始消息
174
+ let initialMessage = args.message || "";
175
+ if (args.messages.length > 0) {
176
+ initialMessage = args.messages.join(" ");
177
+ }
178
+ // 创建资源加载器,使用自定义系统提示词
179
+ const { DefaultResourceLoader } = await import("@mariozechner/pi-coding-agent");
180
+ const resourceLoader = new DefaultResourceLoader({
181
+ cwd,
182
+ agentDir,
183
+ systemPromptOverride: () => getTClawSystemPrompt(),
184
+ });
185
+ await resourceLoader.reload();
186
+ // 创建会话
187
+ const sessionDir = `${agentDir}/sessions`;
188
+ const sessionManager = args.continue_
189
+ ? SessionManager.continueRecent(cwd, sessionDir)
190
+ : SessionManager.create(cwd, sessionDir);
191
+ const { session } = await createAgentSession({
192
+ cwd,
193
+ agentDir,
194
+ resourceLoader,
195
+ sessionManager,
196
+ });
197
+ // 订阅事件并运行
198
+ session.subscribe((event) => {
199
+ if (event.type === "message_update") {
200
+ if (event.assistantMessageEvent.type === "text_delta") {
201
+ process.stdout.write(event.assistantMessageEvent.delta);
202
+ }
203
+ else if (event.assistantMessageEvent.type === "thinking_delta") {
204
+ // 思考输出 - 可以选择显示或隐藏
205
+ }
206
+ }
207
+ else if (event.type === "tool_execution_start") {
208
+ console.log(chalk.dim(`\n[工具] ${event.toolName}\n`));
209
+ }
210
+ else if (event.type === "tool_execution_end") {
211
+ if (event.isError) {
212
+ console.log(chalk.red(`\n[错误] ${event.result}\n`));
213
+ }
214
+ }
215
+ });
216
+ // 发送初始消息
217
+ if (initialMessage) {
218
+ await session.prompt(initialMessage);
219
+ }
220
+ // 进入交互循环
221
+ const readline = await import("readline");
222
+ const rl = readline.createInterface({
223
+ input: process.stdin,
224
+ output: process.stdout,
225
+ prompt: chalk.green("> "),
226
+ });
227
+ rl.prompt();
228
+ rl.on("line", async (line) => {
229
+ const input = line.trim();
230
+ if (input === "/exit" || input === "/quit") {
231
+ rl.close();
232
+ return;
233
+ }
234
+ if (input) {
235
+ await session.prompt(input);
236
+ }
237
+ rl.prompt();
238
+ });
239
+ rl.on("close", () => {
240
+ console.log(chalk.dim("\n再见!\n"));
241
+ process.exit(0);
242
+ });
243
+ }
244
+ async function runPrintMode_(cwd, agentDir, args) {
245
+ let initialMessage = args.message || "";
246
+ if (args.messages.length > 0) {
247
+ initialMessage = args.messages.join(" ");
248
+ }
249
+ // 创建资源加载器,使用自定义系统提示词
250
+ const { DefaultResourceLoader } = await import("@mariozechner/pi-coding-agent");
251
+ const resourceLoader = new DefaultResourceLoader({
252
+ cwd,
253
+ agentDir,
254
+ systemPromptOverride: () => getTClawSystemPrompt(),
255
+ });
256
+ await resourceLoader.reload();
257
+ // 创建会话(无持久化)
258
+ const { session } = await createAgentSession({
259
+ cwd,
260
+ agentDir,
261
+ resourceLoader,
262
+ sessionManager: SessionManager.inMemory(),
263
+ });
264
+ // 订阅事件
265
+ session.subscribe((event) => {
266
+ if (event.type === "message_update") {
267
+ if (event.assistantMessageEvent.type === "text_delta") {
268
+ process.stdout.write(event.assistantMessageEvent.delta);
269
+ }
270
+ }
271
+ else if (event.type === "tool_execution_start") {
272
+ console.log(chalk.dim(`\n[工具] ${event.toolName}`));
273
+ }
274
+ else if (event.type === "tool_execution_end" && event.isError) {
275
+ console.log(chalk.red(`\n[错误] ${event.result}`));
276
+ }
277
+ });
278
+ // 发送消息并等待完成
279
+ await session.prompt(initialMessage);
280
+ return 0;
281
+ }
282
+ export async function main(args) {
283
+ const parsed = parseArgs(args);
284
+ const cwd = process.cwd();
285
+ const agentDir = getAgentDir();
286
+ // 显示版本
287
+ if (parsed.version) {
288
+ console.log(`${APP_NAME} v${VERSION}`);
289
+ return;
290
+ }
291
+ // 显示帮助
292
+ if (parsed.help) {
293
+ printHelp();
294
+ return;
295
+ }
296
+ // 列出模型
297
+ if (parsed.listModels) {
298
+ await listAvailableModels();
299
+ return;
300
+ }
301
+ // 根据模式选择运行方式
302
+ if (parsed.print) {
303
+ const exitCode = await runPrintMode_(cwd, agentDir, parsed);
304
+ process.exit(exitCode);
305
+ }
306
+ else {
307
+ await runInteractiveMode(cwd, agentDir, parsed);
308
+ }
309
+ }
310
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@caoyacheng/tclaw",
3
- "version": "0.1.3",
4
- "description": "T-Claw Coding Agent CLI - 基于 pi-mono 的智能编码助手",
3
+ "version": "0.2.0",
4
+ "description": "T-Claw Coding Agent CLI - 基于 pi-mono SDK 的智能编码助手",
5
5
  "type": "module",
6
6
  "piConfig": {
7
- "name": "@caoyacheng/tclaw",
7
+ "name": "tclaw",
8
8
  "configDir": ".tclaw"
9
9
  },
10
10
  "bin": {
@@ -17,7 +17,7 @@
17
17
  "scripts": {
18
18
  "clean": "shx rm -rf dist",
19
19
  "build": "tsc -p tsconfig.build.json && shx chmod +x dist/cli.js",
20
- "postbuild": "shx mkdir -p dist/modes/interactive/theme && shx cp node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/theme/*.json dist/modes/interactive/theme/ && shx mkdir -p dist/core/export-html && shx cp node_modules/@mariozechner/pi-coding-agent/dist/core/export-html/template.html dist/core/export-html/",
20
+ "postbuild": "shx mkdir -p dist/modes/interactive/theme && shx cp node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/theme/*.json dist/modes/interactive/theme/",
21
21
  "dev": "tsx src/cli.ts",
22
22
  "prepublishOnly": "npm run clean && npm run build"
23
23
  },
@@ -1,55 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Session Export</title>
7
- <style>
8
- {{CSS}}
9
- </style>
10
- </head>
11
- <body>
12
- <button id="hamburger" title="Open sidebar"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor" stroke="none"><circle cx="6" cy="6" r="2.5"/><circle cx="6" cy="18" r="2.5"/><circle cx="18" cy="12" r="2.5"/><rect x="5" y="6" width="2" height="12"/><path d="M6 12h10c1 0 2 0 2-2V8"/></svg></button>
13
- <div id="sidebar-overlay"></div>
14
- <div id="app">
15
- <aside id="sidebar">
16
- <div class="sidebar-header">
17
- <div class="sidebar-controls">
18
- <input type="text" class="sidebar-search" id="tree-search" placeholder="Search...">
19
- </div>
20
- <div class="sidebar-filters">
21
- <button class="filter-btn active" data-filter="default" title="Hide settings entries">Default</button>
22
- <button class="filter-btn" data-filter="no-tools" title="Default minus tool results">No-tools</button>
23
- <button class="filter-btn" data-filter="user-only" title="Only user messages">User</button>
24
- <button class="filter-btn" data-filter="labeled-only" title="Only labeled entries">Labeled</button>
25
- <button class="filter-btn" data-filter="all" title="Show everything">All</button>
26
- <button class="sidebar-close" id="sidebar-close" title="Close">✕</button>
27
- </div>
28
- </div>
29
- <div class="tree-container" id="tree-container"></div>
30
- <div class="tree-status" id="tree-status"></div>
31
- </aside>
32
- <div id="sidebar-resizer" role="separator" aria-orientation="vertical" aria-label="Resize session tree sidebar"></div>
33
- <main id="content">
34
- <div id="header-container"></div>
35
- <div id="messages"></div>
36
- </main>
37
- <div id="image-modal" class="image-modal">
38
- <img id="modal-image" src="" alt="">
39
- </div>
40
- </div>
41
-
42
- <script id="session-data" type="application/json">{{SESSION_DATA}}</script>
43
-
44
- <!-- Vendored libraries -->
45
- <script>{{MARKED_JS}}</script>
46
-
47
- <!-- highlight.js -->
48
- <script>{{HIGHLIGHT_JS}}</script>
49
-
50
- <!-- Main application code -->
51
- <script>
52
- {{JS}}
53
- </script>
54
- </body>
55
- </html>