@antaif3ng/til-work 0.2.0 → 0.4.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/README.md +92 -33
- package/dist/core/config.d.ts +5 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +33 -3
- package/dist/core/config.js.map +1 -1
- package/dist/core/pricing.d.ts.map +1 -1
- package/dist/core/pricing.js +0 -2
- package/dist/core/pricing.js.map +1 -1
- package/dist/core/session.d.ts +10 -3
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +109 -8
- package/dist/core/session.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +3 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/modes/interactive.d.ts.map +1 -1
- package/dist/modes/interactive.js +699 -167
- package/dist/modes/interactive.js.map +1 -1
- package/dist/tools/browser.d.ts +5 -5
- package/dist/tools/browser.d.ts.map +1 -1
- package/dist/tools/browser.js +185 -135
- package/dist/tools/browser.js.map +1 -1
- package/dist/utils/file-processor.d.ts +2 -2
- package/dist/utils/file-processor.d.ts.map +1 -1
- package/dist/utils/file-processor.js +7 -10
- package/dist/utils/file-processor.js.map +1 -1
- package/package.json +3 -2
- package/skills/agent-browser/SKILL.md +89 -0
- package/skills/excel-xlsx/SKILL.md +103 -0
- package/skills/nano-pdf/SKILL.md +20 -0
- package/skills/word-docx/SKILL.md +104 -0
- package/skills/playwright-mcp/SKILL.md +0 -90
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# TIL work agent 工具
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 运行在终端里的个人 AI 助手,类似 Codex CLI / Claude Code。
|
|
4
4
|
|
|
5
5
|
TIL work 是一个基于大语言模型的命令行 Agent 工具。它可以直接操作你的文件系统、执行命令、编辑代码、搜索网页、截图、控制浏览器,并通过对话式交互帮你完成各种电脑任务。
|
|
6
6
|
|
|
@@ -13,7 +13,7 @@ TIL work 是一个基于大语言模型的命令行 Agent 工具。它可以直
|
|
|
13
13
|
| **代码编辑** | 精确替换代码片段(类似 sed,但更智能) |
|
|
14
14
|
| **截图** | 截取全屏或窗口截图,返回给 LLM 进行视觉分析 |
|
|
15
15
|
| **Computer Use** | 鼠标点击、键盘输入、滚动拖拽 + 自动截图反馈 |
|
|
16
|
-
| **浏览器控制** |
|
|
16
|
+
| **浏览器控制** | 页面导航、快照(ref 定位)、点击、输入、截图、JS 执行(agent-browser) |
|
|
17
17
|
| **网页搜索** | 实时搜索互联网获取最新信息 |
|
|
18
18
|
| **MCP 扩展** | 通过 MCP 协议接入外部工具服务(stdio / HTTP) |
|
|
19
19
|
| **记忆系统** | 跨对话记住上下文(MEMORY.md + AGENTS.md) |
|
|
@@ -23,6 +23,14 @@ TIL work 是一个基于大语言模型的命令行 Agent 工具。它可以直
|
|
|
23
23
|
| **安全拦截** | 自动检测并拦截 `rm -rf`、`sudo` 等危险命令 |
|
|
24
24
|
| **多模型** | 支持 Anthropic、OpenAI、Google Gemini 及任意 OpenAI 兼容接口 |
|
|
25
25
|
|
|
26
|
+
## 交互体验
|
|
27
|
+
|
|
28
|
+
- **多行输入**:行尾输入 `\` 再回车、`Ctrl+J` 或 `Alt+Enter` 均可插入换行,`Esc` 取消多行输入
|
|
29
|
+
- **输入框 UI**:带上下边框的输入区域,底部常驻显示当前工作目录和随机操作提示
|
|
30
|
+
- **Placeholder**:空输入时显示换行快捷键提示,输入后自动消失
|
|
31
|
+
- **文件引用**:输入 `@` 后实时搜索文件,方向键选择,文件内容自动注入 LLM 上下文
|
|
32
|
+
- **命令菜单**:输入 `/` 弹出命令列表,方向键循环选择,`Enter` 直接执行,`Tab` 补全
|
|
33
|
+
|
|
26
34
|
## 前置要求
|
|
27
35
|
|
|
28
36
|
- **Node.js** >= 20.6.0(推荐 22+)
|
|
@@ -92,7 +100,9 @@ export OPENAI_BASE_URL=https://api.minimaxi.com/v1
|
|
|
92
100
|
til
|
|
93
101
|
```
|
|
94
102
|
|
|
95
|
-
输入 `/`
|
|
103
|
+
输入 `/` 查看所有可用命令(支持方向键循环选择),输入 `@` 引用文件内容(自动注入到上下文)。
|
|
104
|
+
|
|
105
|
+
支持多行输入:行尾输入 `\` 再回车,或按 `Ctrl+J` / `Alt+Enter` 换行。
|
|
96
106
|
|
|
97
107
|
### 3. 单次执行模式
|
|
98
108
|
|
|
@@ -133,9 +143,9 @@ til [options] [prompt]
|
|
|
133
143
|
| `/model` | 查看/切换/管理模型(支持方向键选择) |
|
|
134
144
|
| `/model add <id> [baseUrl] [apiKey]` | 添加模型配置 |
|
|
135
145
|
| `/model default <id>` | 设置默认模型 |
|
|
136
|
-
| `/skills` |
|
|
146
|
+
| `/skills` | 查看/管理技能 (reload/install/enable/disable/rm) |
|
|
137
147
|
| `/skill:<name>` | 查看某个技能的详细内容 |
|
|
138
|
-
| `/mcp` |
|
|
148
|
+
| `/mcp` | 查看/管理 MCP 服务 (add/rm/reload) |
|
|
139
149
|
| `/memory` | 查看当前记忆内容 |
|
|
140
150
|
| `/usage` | 查看本次会话的 Token 用量 |
|
|
141
151
|
| `/sessions` | 查看会话历史列表 |
|
|
@@ -158,7 +168,7 @@ til [options] [prompt]
|
|
|
158
168
|
| `web_fetch` | 网络 | 是 | 抓取网页内容转纯文本 |
|
|
159
169
|
| `screenshot` | 视觉 | 是 | 截取全屏或窗口截图 |
|
|
160
170
|
| `computer` | 桌面自动化 | 是 | 鼠标、键盘、滚动 + 自动截图反馈 |
|
|
161
|
-
| `browser` | 浏览器 | 否 |
|
|
171
|
+
| `browser` | 浏览器 | 否 | agent-browser 浏览器自动化(内置,自动发现系统 Chrome) |
|
|
162
172
|
|
|
163
173
|
### screenshot 工具
|
|
164
174
|
|
|
@@ -190,14 +200,18 @@ til [options] [prompt]
|
|
|
190
200
|
|
|
191
201
|
### browser 工具
|
|
192
202
|
|
|
193
|
-
基于
|
|
203
|
+
基于 [agent-browser](https://github.com/vercel-labs/agent-browser) 的浏览器自动化,已内置为依赖,自动发现系统中已安装的 Chrome。默认以**可见窗口**(headed)模式运行,可设置 `headed=false` 切换为无窗口模式。
|
|
194
204
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
205
|
+
**推荐工作流(snapshot-ref 模式):**
|
|
206
|
+
|
|
207
|
+
1. `open` — 打开目标 URL
|
|
208
|
+
2. `snapshot` — 获取页面可访问性树 + 元素 ref(`@e1`、`@e2` …)
|
|
209
|
+
3. 使用 ref 交互(`click @e1`、`fill @e2 "text"`)
|
|
210
|
+
4. 页面变化后重新 `snapshot`
|
|
199
211
|
|
|
200
|
-
|
|
212
|
+
支持操作:`open`、`snapshot`、`screenshot`、`click`、`fill`、`type`、`eval`、`get_text`、`scroll`、`wait`、`press`、`select`、`hover`、`back`、`forward`、`close`。
|
|
213
|
+
|
|
214
|
+
如果系统没有 Chrome,可运行 `npx agent-browser install` 下载,或设置 `AGENT_BROWSER_EXECUTABLE_PATH` 指向自定义浏览器。
|
|
201
215
|
|
|
202
216
|
## 配置
|
|
203
217
|
|
|
@@ -238,6 +252,7 @@ npx playwright install chromium
|
|
|
238
252
|
| `models` | 各模型的单独配置(provider、apiKey、baseUrl、contextWindow 等) |
|
|
239
253
|
| `providers` | Provider 级别配置(apiKey、baseUrl、headers) |
|
|
240
254
|
| `mcpServers` | MCP 服务器配置 |
|
|
255
|
+
| `disabledSkills` | 已禁用的技能名称列表 |
|
|
241
256
|
| `defaultTools` | 默认启用的工具列表 |
|
|
242
257
|
|
|
243
258
|
### 模型管理
|
|
@@ -277,35 +292,65 @@ TIL 支持通过 MCP (Model Context Protocol) 接入外部工具服务。
|
|
|
277
292
|
```json
|
|
278
293
|
{
|
|
279
294
|
"mcpServers": {
|
|
280
|
-
"playwright": {
|
|
281
|
-
"command": "npx",
|
|
282
|
-
"args": ["@playwright/mcp", "--headless"]
|
|
283
|
-
},
|
|
284
295
|
"web-search": {
|
|
285
296
|
"type": "http",
|
|
286
297
|
"url": "https://open.bigmodel.cn/api/mcp/web_search/mcp",
|
|
287
298
|
"headers": {
|
|
288
299
|
"Authorization": "Bearer your_api_key"
|
|
289
300
|
}
|
|
301
|
+
},
|
|
302
|
+
"minimax": {
|
|
303
|
+
"command": "uvx",
|
|
304
|
+
"args": ["minimax-coding-plan-mcp"],
|
|
305
|
+
"env": {
|
|
306
|
+
"MINIMAX_API_KEY": "your_minimax_api_key"
|
|
307
|
+
}
|
|
290
308
|
}
|
|
291
309
|
}
|
|
292
310
|
}
|
|
293
311
|
```
|
|
294
312
|
|
|
313
|
+
> **注意**:浏览器自动化已通过内置 `browser` 工具提供(基于 agent-browser),无需再配置 Playwright MCP。MCP 主要用于接入需要 API key 的外部服务。
|
|
314
|
+
|
|
295
315
|
支持两种传输方式:
|
|
296
316
|
- **stdio**:本地进程通过 stdin/stdout 通信
|
|
297
317
|
- **streamable_http** / **sse**:远程 HTTP 服务
|
|
298
318
|
|
|
299
|
-
###
|
|
319
|
+
### 交互式 MCP 管理
|
|
300
320
|
|
|
321
|
+
在交互模式中直接添加、删除和重载 MCP 服务:
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
/mcp # 查看所有 MCP 服务状态
|
|
325
|
+
/mcp add playwright --stdio npx @playwright/mcp --headless # 添加 stdio 类型
|
|
326
|
+
/mcp add web-search --url https://api.example.com/mcp # 添加 HTTP 类型
|
|
327
|
+
/mcp add api --url https://api.example.com/mcp -H Authorization:Bearer\ sk-xxx # 带 header
|
|
328
|
+
/mcp add api --url https://api.example.com/mcp -H Authorization:Bearer\ sk-xxx -H X-Project:demo # 多个 header
|
|
329
|
+
/mcp add project-db --stdio npx @mcp/postgres --project # 添加到项目级配置
|
|
330
|
+
/mcp rm playwright # 删除服务
|
|
331
|
+
/mcp reload # 重载所有服务(热重载)
|
|
332
|
+
/extensions # 查看所有扩展信息
|
|
301
333
|
```
|
|
302
|
-
|
|
303
|
-
|
|
334
|
+
|
|
335
|
+
### 项目级 MCP 配置
|
|
336
|
+
|
|
337
|
+
除全局 `~/.til/config.json` 外,还支持项目级配置 `<项目>/.til/config.json`。项目级配置的同名服务覆盖全局配置。
|
|
338
|
+
|
|
339
|
+
```json
|
|
340
|
+
// .til/config.json(项目级)
|
|
341
|
+
{
|
|
342
|
+
"mcpServers": {
|
|
343
|
+
"project-db": {
|
|
344
|
+
"command": "npx",
|
|
345
|
+
"args": ["@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
304
349
|
```
|
|
305
350
|
|
|
306
351
|
## 内置技能
|
|
307
352
|
|
|
308
|
-
TIL 内置
|
|
353
|
+
TIL 内置 8 个实用技能,安装即用:
|
|
309
354
|
|
|
310
355
|
| 技能 | 说明 |
|
|
311
356
|
|------|------|
|
|
@@ -313,13 +358,21 @@ TIL 内置 5 个实用技能,安装即用:
|
|
|
313
358
|
| **find-skills** | 从开源社区发现和安装新技能 |
|
|
314
359
|
| **self-improvement** | 自动记录错误、学习和修正,持续改进 |
|
|
315
360
|
| **skill-creator** | 创建新技能的指南和最佳实践 |
|
|
316
|
-
| **
|
|
361
|
+
| **agent-browser** | agent-browser 浏览器自动化工作流和最佳实践 |
|
|
362
|
+
| **excel-xlsx** | 创建、检查和编辑 Excel 工作簿(公式、日期、类型、格式、兼容性) |
|
|
363
|
+
| **word-docx** | 创建、检查和编辑 Word 文档(样式、编号、修订、表格、兼容性) |
|
|
364
|
+
| **nano-pdf** | 使用自然语言指令编辑 PDF 文件 |
|
|
317
365
|
|
|
318
|
-
###
|
|
366
|
+
### 技能管理
|
|
319
367
|
|
|
320
|
-
```
|
|
321
|
-
/skills
|
|
322
|
-
/skill:summarize
|
|
368
|
+
```bash
|
|
369
|
+
/skills # 列出所有已加载技能(显示来源和状态)
|
|
370
|
+
/skill:summarize # 查看 summarize 技能详情
|
|
371
|
+
/skills reload # 重新扫描并加载技能(热重载)
|
|
372
|
+
/skills install steipete/nano-pdf # 从远程安装技能(npx skills add)
|
|
373
|
+
/skills disable excel-xlsx # 暂时禁用技能(不删文件)
|
|
374
|
+
/skills enable excel-xlsx # 重新启用技能
|
|
375
|
+
/skills rm my-old-skill # 从磁盘删除用户/项目技能(内置技能不可删除)
|
|
323
376
|
```
|
|
324
377
|
|
|
325
378
|
### 自定义技能
|
|
@@ -398,10 +451,10 @@ til --resume abc12345 # 恢复指定会话
|
|
|
398
451
|
实时显示使用率:
|
|
399
452
|
|
|
400
453
|
```
|
|
401
|
-
in:12.3k out:1.2k
|
|
454
|
+
in:12.3k out:1.2k ctx:35%
|
|
402
455
|
```
|
|
403
456
|
|
|
404
|
-
- `in` 输入 token · `out` 输出 token · `
|
|
457
|
+
- `in` 输入 token · `out` 输出 token · `ctx` 上下文占用率
|
|
405
458
|
|
|
406
459
|
## 安全拦截
|
|
407
460
|
|
|
@@ -448,12 +501,15 @@ til --setup
|
|
|
448
501
|
|
|
449
502
|
### 如何启用浏览器工具
|
|
450
503
|
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
504
|
+
browser 工具基于 agent-browser,已内置为依赖。只需在配置中将 `browser` 加入 `defaultTools`:
|
|
505
|
+
|
|
506
|
+
```json
|
|
507
|
+
{
|
|
508
|
+
"defaultTools": ["bash", "read", "write", "edit", "system_info", "file_manager", "web_search", "web_fetch", "screenshot", "computer", "browser"]
|
|
509
|
+
}
|
|
454
510
|
```
|
|
455
511
|
|
|
456
|
-
|
|
512
|
+
agent-browser 会自动发现系统中的 Chrome。如果没有 Chrome,运行 `npx agent-browser install` 下载。
|
|
457
513
|
|
|
458
514
|
## 开发
|
|
459
515
|
|
|
@@ -502,7 +558,7 @@ til-cli/
|
|
|
502
558
|
│ │ ├── web-fetch.ts # 网页抓取
|
|
503
559
|
│ │ ├── screenshot.ts # 截图
|
|
504
560
|
│ │ ├── computer.ts # Computer Use(鼠标/键盘/截图)
|
|
505
|
-
│ │ └── browser.ts # 浏览器控制(
|
|
561
|
+
│ │ └── browser.ts # 浏览器控制(agent-browser CLI)
|
|
506
562
|
│ ├── extensions/ # 扩展系统
|
|
507
563
|
│ │ ├── types.ts # 扩展/MCP 类型定义
|
|
508
564
|
│ │ ├── loader.ts # 扩展加载器
|
|
@@ -514,7 +570,10 @@ til-cli/
|
|
|
514
570
|
│ ├── find-skills/
|
|
515
571
|
│ ├── self-improving-agent/
|
|
516
572
|
│ ├── skill-creator/
|
|
517
|
-
│
|
|
573
|
+
│ ├── agent-browser/
|
|
574
|
+
│ ├── excel-xlsx/
|
|
575
|
+
│ ├── word-docx/
|
|
576
|
+
│ └── nano-pdf/
|
|
518
577
|
├── tests/ # 单元测试
|
|
519
578
|
├── package.json
|
|
520
579
|
├── tsconfig.json
|
package/dist/core/config.d.ts
CHANGED
|
@@ -37,6 +37,8 @@ export interface TilConfig {
|
|
|
37
37
|
mcpServers?: Record<string, McpServerConfig>;
|
|
38
38
|
/** Paths to extension files (.js/.mjs) */
|
|
39
39
|
extensions?: string[];
|
|
40
|
+
/** Names of skills that are temporarily disabled */
|
|
41
|
+
disabledSkills?: string[];
|
|
40
42
|
/** @deprecated use `providers` */
|
|
41
43
|
apiKeys?: Record<string, string>;
|
|
42
44
|
/** @deprecated use `model` */
|
|
@@ -64,6 +66,9 @@ export declare function resolveBaseUrl(model: ModelConfig, config: TilConfig): s
|
|
|
64
66
|
export declare function guessProvider(modelId: string): string;
|
|
65
67
|
export declare function getKnownModelIds(): string[];
|
|
66
68
|
export declare function getKnownModels(): Record<string, ModelConfig>;
|
|
69
|
+
export declare function getProjectConfigPath(cwd: string): string;
|
|
70
|
+
export declare function loadProjectMcpServers(cwd: string): Record<string, McpServerConfig>;
|
|
71
|
+
export declare function saveProjectMcpServers(cwd: string, servers: Record<string, McpServerConfig>): Promise<void>;
|
|
67
72
|
export declare function getProviderDisplayInfo(provider: string, config: TilConfig): {
|
|
68
73
|
hasKey: boolean;
|
|
69
74
|
baseUrl: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,MAAM,WAAW,cAAc;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAID,MAAM,WAAW,UAAU;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACzB,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpC,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kCAAkC;IAClC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.js
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
* Stores provider settings (API keys, base URLs, headers),
|
|
4
4
|
* default model, and tool preferences in ~/.til/config.json.
|
|
5
5
|
*/
|
|
6
|
-
import { existsSync } from "node:fs";
|
|
6
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
7
7
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
8
|
-
import { dirname, join } from "node:path";
|
|
8
|
+
import { dirname, join, resolve } from "node:path";
|
|
9
9
|
import { homedir } from "node:os";
|
|
10
10
|
const DEFAULT_CONFIG = {
|
|
11
11
|
model: "",
|
|
12
12
|
providers: {},
|
|
13
|
-
defaultTools: ["bash", "read", "write", "edit", "system_info", "file_manager", "web_search", "web_fetch", "screenshot", "computer"],
|
|
13
|
+
defaultTools: ["bash", "read", "write", "edit", "system_info", "file_manager", "web_search", "web_fetch", "screenshot", "computer", "browser"],
|
|
14
14
|
};
|
|
15
15
|
const DEFAULT_BASE_URLS = {
|
|
16
16
|
anthropic: "https://api.anthropic.com/v1",
|
|
@@ -206,6 +206,36 @@ export function getKnownModelIds() {
|
|
|
206
206
|
export function getKnownModels() {
|
|
207
207
|
return {};
|
|
208
208
|
}
|
|
209
|
+
// ── Project-level MCP Config ──
|
|
210
|
+
export function getProjectConfigPath(cwd) {
|
|
211
|
+
return join(resolve(cwd), ".til", "config.json");
|
|
212
|
+
}
|
|
213
|
+
export function loadProjectMcpServers(cwd) {
|
|
214
|
+
const configPath = getProjectConfigPath(cwd);
|
|
215
|
+
if (!existsSync(configPath))
|
|
216
|
+
return {};
|
|
217
|
+
try {
|
|
218
|
+
const content = readFileSync(configPath, "utf-8");
|
|
219
|
+
const parsed = JSON.parse(content);
|
|
220
|
+
return parsed.mcpServers ?? {};
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return {};
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
export async function saveProjectMcpServers(cwd, servers) {
|
|
227
|
+
const configPath = getProjectConfigPath(cwd);
|
|
228
|
+
let existing = {};
|
|
229
|
+
if (existsSync(configPath)) {
|
|
230
|
+
try {
|
|
231
|
+
existing = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
232
|
+
}
|
|
233
|
+
catch { /* start fresh */ }
|
|
234
|
+
}
|
|
235
|
+
existing.mcpServers = servers;
|
|
236
|
+
await mkdir(dirname(configPath), { recursive: true });
|
|
237
|
+
await writeFile(configPath, JSON.stringify(existing, null, 2), "utf-8");
|
|
238
|
+
}
|
|
209
239
|
export function getProviderDisplayInfo(provider, config) {
|
|
210
240
|
const prov = config.providers[provider];
|
|
211
241
|
const envVar = ENV_KEY_MAP[provider];
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/core/pricing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACnB;AAGD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAYtD,CAAC;AAEF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAe1E;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/core/pricing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACnB;AAGD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAYtD,CAAC;AAEF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAe1E;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQnE;AAED,wBAAgB,oBAAoB,CACnC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAItC"}
|
package/dist/core/pricing.js
CHANGED
|
@@ -55,8 +55,6 @@ export function formatUsage(usage, _modelId) {
|
|
|
55
55
|
parts.push(`in:${formatTokenCount(usage.input)}`);
|
|
56
56
|
if (usage.output)
|
|
57
57
|
parts.push(`out:${formatTokenCount(usage.output)}`);
|
|
58
|
-
if (usage.cacheRead)
|
|
59
|
-
parts.push(`cache_r:${formatTokenCount(usage.cacheRead)}`);
|
|
60
58
|
if (usage.cacheWrite)
|
|
61
59
|
parts.push(`cache_w:${formatTokenCount(usage.cacheWrite)}`);
|
|
62
60
|
return parts.join(" ");
|
package/dist/core/pricing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/core/pricing.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/core/pricing.ts"],"names":[],"mappings":"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"}
|
package/dist/core/session.d.ts
CHANGED
|
@@ -34,11 +34,14 @@ export declare class TilSession {
|
|
|
34
34
|
readonly agent: Agent;
|
|
35
35
|
readonly model: ModelConfig;
|
|
36
36
|
readonly cwd: string;
|
|
37
|
-
|
|
37
|
+
skills: Skill[];
|
|
38
38
|
readonly sessionManager: SessionManager;
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
extensionRunner?: ExtensionRunner;
|
|
40
|
+
config: TilConfig;
|
|
41
41
|
private toolNames;
|
|
42
|
+
private baseToolNames;
|
|
43
|
+
private skillPaths?;
|
|
44
|
+
private noSkills;
|
|
42
45
|
private customInstructions?;
|
|
43
46
|
private _cumulativeUsage;
|
|
44
47
|
private _lastTurnUsage?;
|
|
@@ -72,6 +75,10 @@ export declare class TilSession {
|
|
|
72
75
|
};
|
|
73
76
|
/** List sessions for the current cwd */
|
|
74
77
|
static listSessions(cwd?: string): SessionInfo[];
|
|
78
|
+
/** Re-scan skill directories and update system prompt. */
|
|
79
|
+
reloadSkills(): Promise<void>;
|
|
80
|
+
/** Disconnect all MCP servers, re-read config, and reconnect. */
|
|
81
|
+
reloadMcpServers(): Promise<void>;
|
|
75
82
|
private refreshSystemPrompt;
|
|
76
83
|
}
|
|
77
84
|
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAC;AAEtD,OAAO,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
|
package/dist/core/session.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { Agent } from "./agent.js";
|
|
6
6
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
7
|
-
import { loadConfig, resolveModel, resolveApiKey, resolveBaseUrl } from "./config.js";
|
|
7
|
+
import { loadConfig, resolveModel, resolveApiKey, resolveBaseUrl, loadProjectMcpServers } from "./config.js";
|
|
8
8
|
import { createAllTools, TOOL_NAMES, closeBrowser } from "../tools/index.js";
|
|
9
9
|
import { loadSkills } from "./skills.js";
|
|
10
10
|
import { loadMemory, getMemoryDisplay, loadProjectContextFiles } from "./memory.js";
|
|
@@ -24,19 +24,25 @@ export class TilSession {
|
|
|
24
24
|
extensionRunner;
|
|
25
25
|
config;
|
|
26
26
|
toolNames;
|
|
27
|
+
baseToolNames;
|
|
28
|
+
skillPaths;
|
|
29
|
+
noSkills;
|
|
27
30
|
customInstructions;
|
|
28
31
|
_cumulativeUsage = createEmptyUsage();
|
|
29
32
|
_lastTurnUsage;
|
|
30
|
-
constructor(agent, model, cwd, config, skills, toolNames, sessionManager, customInstructions, extensionRunner) {
|
|
33
|
+
constructor(agent, model, cwd, config, skills, toolNames, baseToolNames, sessionManager, customInstructions, extensionRunner, skillPaths, noSkills) {
|
|
31
34
|
this.agent = agent;
|
|
32
35
|
this.model = model;
|
|
33
36
|
this.cwd = cwd;
|
|
34
37
|
this.config = config;
|
|
35
38
|
this.skills = skills;
|
|
36
39
|
this.toolNames = toolNames;
|
|
40
|
+
this.baseToolNames = baseToolNames;
|
|
37
41
|
this.sessionManager = sessionManager;
|
|
38
42
|
this.customInstructions = customInstructions;
|
|
39
43
|
this.extensionRunner = extensionRunner;
|
|
44
|
+
this.skillPaths = skillPaths;
|
|
45
|
+
this.noSkills = noSkills ?? false;
|
|
40
46
|
}
|
|
41
47
|
static async create(options = {}) {
|
|
42
48
|
const config = await loadConfig();
|
|
@@ -45,7 +51,7 @@ export class TilSession {
|
|
|
45
51
|
const model = resolveModel(modelId, config);
|
|
46
52
|
model.apiKey = resolveApiKey(model, config);
|
|
47
53
|
model.baseUrl = options.baseUrl ?? resolveBaseUrl(model, config);
|
|
48
|
-
// Load skills
|
|
54
|
+
// Load skills (filter out disabled ones)
|
|
49
55
|
const skillResult = options.noSkills
|
|
50
56
|
? { skills: [], diagnostics: [] }
|
|
51
57
|
: loadSkills({
|
|
@@ -53,7 +59,8 @@ export class TilSession {
|
|
|
53
59
|
skillPaths: options.skillPaths,
|
|
54
60
|
includeDefaults: true,
|
|
55
61
|
});
|
|
56
|
-
const
|
|
62
|
+
const disabledSet = new Set(config.disabledSkills ?? []);
|
|
63
|
+
const skills = skillResult.skills.filter((s) => !disabledSet.has(s.name));
|
|
57
64
|
const toolNames = options.tools ?? config.defaultTools ?? [...TOOL_NAMES.DEFAULT];
|
|
58
65
|
const allToolsMap = new Map();
|
|
59
66
|
for (const tool of createAllTools(cwd)) {
|
|
@@ -67,8 +74,11 @@ export class TilSession {
|
|
|
67
74
|
const extensionToolNames = [];
|
|
68
75
|
try {
|
|
69
76
|
const loadedExtensions = await loadAllExtensions(cwd, config);
|
|
70
|
-
// Load MCP servers as a built-in extension
|
|
71
|
-
|
|
77
|
+
// Load MCP servers as a built-in extension (merge global + project-level)
|
|
78
|
+
const globalMcp = config.mcpServers ?? {};
|
|
79
|
+
const projectMcp = loadProjectMcpServers(cwd);
|
|
80
|
+
const mergedMcp = { ...globalMcp, ...projectMcp };
|
|
81
|
+
if (Object.keys(mergedMcp).length > 0) {
|
|
72
82
|
const mcpExtension = {
|
|
73
83
|
path: "<builtin:mcp>",
|
|
74
84
|
name: "mcp",
|
|
@@ -87,7 +97,7 @@ export class TilSession {
|
|
|
87
97
|
mcpExtension.handlers.get(event).push(handler);
|
|
88
98
|
},
|
|
89
99
|
};
|
|
90
|
-
await registerMcpServers(mcpApi,
|
|
100
|
+
await registerMcpServers(mcpApi, mergedMcp);
|
|
91
101
|
loadedExtensions.push(mcpExtension);
|
|
92
102
|
}
|
|
93
103
|
if (loadedExtensions.length > 0) {
|
|
@@ -136,7 +146,7 @@ export class TilSession {
|
|
|
136
146
|
else {
|
|
137
147
|
sm = SessionManager.create(cwd, model.id);
|
|
138
148
|
}
|
|
139
|
-
const session = new TilSession(agent, model, cwd, config, skills, allToolNamesList, sm, options.customInstructions, extensionRunner);
|
|
149
|
+
const session = new TilSession(agent, model, cwd, config, skills, allToolNamesList, [...toolNames], sm, options.customInstructions, extensionRunner, options.skillPaths, options.noSkills);
|
|
140
150
|
// Auto-persist, usage tracking, and extension event forwarding
|
|
141
151
|
agent.subscribe((event) => {
|
|
142
152
|
if (event.type === "message_end") {
|
|
@@ -254,6 +264,97 @@ export class TilSession {
|
|
|
254
264
|
static listSessions(cwd) {
|
|
255
265
|
return SessionManager.list(cwd ?? process.cwd());
|
|
256
266
|
}
|
|
267
|
+
/** Re-scan skill directories and update system prompt. */
|
|
268
|
+
async reloadSkills() {
|
|
269
|
+
if (this.noSkills)
|
|
270
|
+
return;
|
|
271
|
+
const freshConfig = await loadConfig();
|
|
272
|
+
this.config = freshConfig;
|
|
273
|
+
const result = loadSkills({
|
|
274
|
+
cwd: this.cwd,
|
|
275
|
+
skillPaths: this.skillPaths,
|
|
276
|
+
includeDefaults: true,
|
|
277
|
+
});
|
|
278
|
+
const disabledSet = new Set(this.config.disabledSkills ?? []);
|
|
279
|
+
this.skills = result.skills.filter((s) => !disabledSet.has(s.name));
|
|
280
|
+
this.refreshSystemPrompt();
|
|
281
|
+
}
|
|
282
|
+
/** Disconnect all MCP servers, re-read config, and reconnect. */
|
|
283
|
+
async reloadMcpServers() {
|
|
284
|
+
// Shutdown existing MCP connections
|
|
285
|
+
if (this.extensionRunner) {
|
|
286
|
+
await this.extensionRunner.shutdown(this.cwd);
|
|
287
|
+
}
|
|
288
|
+
// Re-read config
|
|
289
|
+
const config = await loadConfig();
|
|
290
|
+
this.config = config;
|
|
291
|
+
const globalMcp = config.mcpServers ?? {};
|
|
292
|
+
const projectMcp = loadProjectMcpServers(this.cwd);
|
|
293
|
+
const mergedMcp = { ...globalMcp, ...projectMcp };
|
|
294
|
+
// Remove old MCP tools from agent
|
|
295
|
+
this.toolNames = this.toolNames.filter((t) => !t.startsWith("mcp_"));
|
|
296
|
+
// Reload all extensions + MCP
|
|
297
|
+
try {
|
|
298
|
+
const loadedExtensions = await loadAllExtensions(this.cwd, config);
|
|
299
|
+
if (Object.keys(mergedMcp).length > 0) {
|
|
300
|
+
const mcpExtension = {
|
|
301
|
+
path: "<builtin:mcp>",
|
|
302
|
+
name: "mcp",
|
|
303
|
+
tools: new Map(),
|
|
304
|
+
commands: new Map(),
|
|
305
|
+
handlers: new Map(),
|
|
306
|
+
};
|
|
307
|
+
const mcpApi = {
|
|
308
|
+
cwd: this.cwd,
|
|
309
|
+
config,
|
|
310
|
+
registerTool(tool) { mcpExtension.tools.set(tool.name, tool); },
|
|
311
|
+
registerCommand(cmd) { mcpExtension.commands.set(cmd.name, cmd); },
|
|
312
|
+
on(event, handler) {
|
|
313
|
+
if (!mcpExtension.handlers.has(event))
|
|
314
|
+
mcpExtension.handlers.set(event, []);
|
|
315
|
+
mcpExtension.handlers.get(event).push(handler);
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
await registerMcpServers(mcpApi, mergedMcp);
|
|
319
|
+
loadedExtensions.push(mcpExtension);
|
|
320
|
+
}
|
|
321
|
+
if (loadedExtensions.length > 0) {
|
|
322
|
+
this.extensionRunner = new ExtensionRunner(loadedExtensions);
|
|
323
|
+
const extensionTools = this.extensionRunner.getAllTools();
|
|
324
|
+
const newMcpToolNames = [];
|
|
325
|
+
for (const tool of extensionTools) {
|
|
326
|
+
newMcpToolNames.push(tool.name);
|
|
327
|
+
}
|
|
328
|
+
this.toolNames = [...this.baseToolNames, ...newMcpToolNames];
|
|
329
|
+
// Update agent tools: base tools + new extension tools
|
|
330
|
+
const allToolsMap = new Map();
|
|
331
|
+
for (const tool of createAllTools(this.cwd)) {
|
|
332
|
+
allToolsMap.set(tool.name, tool);
|
|
333
|
+
}
|
|
334
|
+
const selectedTools = this.baseToolNames
|
|
335
|
+
.map((name) => allToolsMap.get(name))
|
|
336
|
+
.filter((t) => t !== undefined);
|
|
337
|
+
selectedTools.push(...extensionTools);
|
|
338
|
+
this.agent.setTools(selectedTools);
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
this.extensionRunner = undefined;
|
|
342
|
+
this.toolNames = [...this.baseToolNames];
|
|
343
|
+
const allToolsMap = new Map();
|
|
344
|
+
for (const tool of createAllTools(this.cwd)) {
|
|
345
|
+
allToolsMap.set(tool.name, tool);
|
|
346
|
+
}
|
|
347
|
+
const selectedTools = this.baseToolNames
|
|
348
|
+
.map((name) => allToolsMap.get(name))
|
|
349
|
+
.filter((t) => t !== undefined);
|
|
350
|
+
this.agent.setTools(selectedTools);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
catch (err) {
|
|
354
|
+
console.error(`MCP reload warning: ${err.message}`);
|
|
355
|
+
}
|
|
356
|
+
this.refreshSystemPrompt();
|
|
357
|
+
}
|
|
257
358
|
refreshSystemPrompt() {
|
|
258
359
|
const memory = loadMemory(this.cwd);
|
|
259
360
|
const contextFiles = loadProjectContextFiles(this.cwd);
|