takotrace 0.0.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.
- package/DEVELOPMENT.md +37 -0
- package/PRODUCT.md +33 -0
- package/README.md +69 -0
- package/README.zh-CN.md +69 -0
- package/TECHNICAL_DESIGN.md +46 -0
- package/assets/star-takotrace.gif +0 -0
- package/assets/takotrace-logo.png +0 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.js +152 -0
- package/dist/cli.js.map +1 -0
- package/dist/server/claude-client.d.ts +63 -0
- package/dist/server/claude-client.js +512 -0
- package/dist/server/claude-client.js.map +1 -0
- package/dist/server/codex-client.d.ts +57 -0
- package/dist/server/codex-client.js +414 -0
- package/dist/server/codex-client.js.map +1 -0
- package/dist/server/codex-command.d.ts +15 -0
- package/dist/server/codex-command.js +131 -0
- package/dist/server/codex-command.js.map +1 -0
- package/dist/server/http-server.d.ts +39 -0
- package/dist/server/http-server.js +429 -0
- package/dist/server/http-server.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.js +4 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/multi-provider.d.ts +30 -0
- package/dist/server/multi-provider.js +178 -0
- package/dist/server/multi-provider.js.map +1 -0
- package/dist/server/native-path-opener.d.ts +7 -0
- package/dist/server/native-path-opener.js +45 -0
- package/dist/server/native-path-opener.js.map +1 -0
- package/dist/server/provider.d.ts +27 -0
- package/dist/server/provider.js +2 -0
- package/dist/server/provider.js.map +1 -0
- package/dist/server/rollout-reader.d.ts +9 -0
- package/dist/server/rollout-reader.js +333 -0
- package/dist/server/rollout-reader.js.map +1 -0
- package/dist/server/subagent-assignment.d.ts +9 -0
- package/dist/server/subagent-assignment.js +146 -0
- package/dist/server/subagent-assignment.js.map +1 -0
- package/dist/shared/jsonl.d.ts +6 -0
- package/dist/shared/jsonl.js +23 -0
- package/dist/shared/jsonl.js.map +1 -0
- package/dist/shared/store.d.ts +35 -0
- package/dist/shared/store.js +351 -0
- package/dist/shared/store.js.map +1 -0
- package/dist/shared/trace.d.ts +7 -0
- package/dist/shared/trace.js +256 -0
- package/dist/shared/trace.js.map +1 -0
- package/dist/shared/types.d.ts +144 -0
- package/dist/shared/types.js +2 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/web/assets/SequenceDiagram-D2zGAyJN.js +8 -0
- package/dist/web/assets/favicon-16-DQXCs6B9.png +0 -0
- package/dist/web/assets/favicon-32-By9ik0BF.png +0 -0
- package/dist/web/assets/index-D6VA1lK-.css +1 -0
- package/dist/web/assets/index-vnUrUuB8.js +84 -0
- package/dist/web/assets/takotrace-logo-DtWm9Bax.png +0 -0
- package/dist/web/index.html +29 -0
- package/package.json +57 -0
package/DEVELOPMENT.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Development
|
|
2
|
+
|
|
3
|
+
## Requirements
|
|
4
|
+
|
|
5
|
+
- Node.js 22+
|
|
6
|
+
- Codex, Claude Code, or both
|
|
7
|
+
|
|
8
|
+
## Run locally
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install
|
|
12
|
+
npm run dev
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The web app and local server reload while you edit source files.
|
|
16
|
+
|
|
17
|
+
## Checks
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm test
|
|
21
|
+
npm run typecheck
|
|
22
|
+
npm run build
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Read [TECHNICAL_DESIGN.md](./TECHNICAL_DESIGN.md) for the architecture, data model, provider behavior, and current boundaries.
|
|
26
|
+
|
|
27
|
+
## Publish to npm
|
|
28
|
+
|
|
29
|
+
The [`Publish to npm`](./.github/workflows/publish.yml) workflow runs when a GitHub Release is published.
|
|
30
|
+
|
|
31
|
+
1. Create an npm granular access token that can publish `takotrace`.
|
|
32
|
+
2. Add it to the GitHub repository as an Actions secret named `NPM_TOKEN`.
|
|
33
|
+
3. Update `version` in `package.json` and `package-lock.json` with `npm version <patch|minor|major> --no-git-tag-version`.
|
|
34
|
+
4. Commit and push the version change.
|
|
35
|
+
5. Create a GitHub Release whose tag is exactly `v<version>`, for example `v0.1.0`.
|
|
36
|
+
|
|
37
|
+
The workflow rejects mismatched tags, runs the full verification suite, builds the package, and publishes it with npm provenance.
|
package/PRODUCT.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Product
|
|
2
|
+
|
|
3
|
+
## Register
|
|
4
|
+
|
|
5
|
+
product
|
|
6
|
+
|
|
7
|
+
## Users
|
|
8
|
+
|
|
9
|
+
开发者和 Agent 工作流设计者在本机运行、调试与回顾 Agent 会话时使用。TakoTrace 当前同时接入 Codex 与 Claude,并通过统一的 Provider 层为其他本地 Agent 保留扩展空间。
|
|
10
|
+
|
|
11
|
+
## Product Purpose
|
|
12
|
+
|
|
13
|
+
TakoTrace 将分散的会话、用户请求、Agent 响应、工具调用、Skill、MCP 与 Subagent 活动组织成可快速浏览和深入检查的本地界面。成功意味着用户能迅速定位目标会话,理解一次交互的完整执行路径,并在需要时查看精确的底层事件与原始数据。
|
|
14
|
+
|
|
15
|
+
## Brand Personality
|
|
16
|
+
|
|
17
|
+
克制、精确、高密度。界面应像可靠的开发工具:信息丰富但不喧闹,熟悉而高效,并对运行状态保持诚实。蓝色章鱼吉祥物通过多触手映射并行执行链,以放大镜表达 Trace 与检查能力;友好的品牌形象与克制的工具界面形成清晰层次。
|
|
18
|
+
|
|
19
|
+
## Anti-references
|
|
20
|
+
|
|
21
|
+
避免装饰性仪表盘、卡片堆叠、过多状态文字、无意义的形状与颜色、夸张动效,以及为了展示技术而增加的交互复杂度。不要把 Codex 专有概念固化成无法扩展到其他 Agent 的产品结构。
|
|
22
|
+
|
|
23
|
+
## Design Principles
|
|
24
|
+
|
|
25
|
+
1. 会话优先:用户请求与 Agent 响应是主线,工具和编排活动作为可追溯的辅助层。
|
|
26
|
+
2. 渐进披露:列表保持紧凑,完整内容、元数据和原始数据按需展开。
|
|
27
|
+
3. 语义胜过装饰:颜色、图形和状态只在表达真实差异时使用。
|
|
28
|
+
4. 熟悉且可预测:遵循成熟开发工具和 Vercel 界面的交互惯例。
|
|
29
|
+
5. 面向多 Agent:数据模型、命名与布局不依赖单一 Agent 实现。
|
|
30
|
+
|
|
31
|
+
## Accessibility & Inclusion
|
|
32
|
+
|
|
33
|
+
以 WCAG AA 为基线,支持键盘操作、可见焦点、足够的文字与状态对比度,并尊重减少动态效果偏好。状态不能只依赖颜色表达。
|
package/README.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./assets/takotrace-logo.png" alt="TakoTrace logo" width="160" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">TakoTrace</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">Inspect Codex and Claude Code sessions as timelines, sequence diagrams, and raw events.</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://github.com/zhaofinger/takotrace/stargazers"><img src="https://img.shields.io/github/stars/zhaofinger/takotrace?style=flat&logo=github" alt="GitHub stars" /></a>
|
|
11
|
+
<img src="https://img.shields.io/badge/Node.js-22%2B-339933?logo=node.js&logoColor=white" alt="Node.js 22+" />
|
|
12
|
+
<img src="https://img.shields.io/badge/providers-Codex%20%2B%20Claude-2563eb" alt="Codex and Claude support" />
|
|
13
|
+
<img src="https://img.shields.io/badge/storage-local--first-0f766e" alt="Local-first storage" />
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center"><a href="./README.zh-CN.md">中文</a></p>
|
|
17
|
+
|
|
18
|
+
TakoTrace turns local AI coding sessions into a browsable execution trace. Follow the user request, agent reasoning, commands, file changes, MCP calls, skills, and subagents without digging through rollout files or terminal logs.
|
|
19
|
+
|
|
20
|
+
## Quick start
|
|
21
|
+
|
|
22
|
+
Requires Node.js 22+ and Codex, Claude Code, or both.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npx takotrace
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
TakoTrace listens on `127.0.0.1:4317`, starts the available providers, and opens the browser.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Start one provider
|
|
32
|
+
npx takotrace --provider codex
|
|
33
|
+
npx takotrace --provider claude
|
|
34
|
+
|
|
35
|
+
# Select a Codex binary
|
|
36
|
+
npx takotrace --codex-path /path/to/codex
|
|
37
|
+
|
|
38
|
+
# Change the port and keep the browser closed
|
|
39
|
+
npx takotrace --port 4400 --no-open
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Run `npx takotrace --help` for every CLI option.
|
|
43
|
+
|
|
44
|
+
## What you can inspect
|
|
45
|
+
|
|
46
|
+
- Sessions grouped by provider and working directory.
|
|
47
|
+
- Each run as a Trace, Sequence diagram, or Raw JSON.
|
|
48
|
+
- Commands, file changes, MCP calls, skills, and subagent relationships.
|
|
49
|
+
- Token usage, Markdown, attachments, images, and local source files.
|
|
50
|
+
- Codex history recovered read-only from local rollout files when App Server decoding fails.
|
|
51
|
+
|
|
52
|
+
TakoTrace uses **Session**, **Run**, and **Step** in the UI. Raw APIs keep the original provider field names.
|
|
53
|
+
|
|
54
|
+
## Data and security
|
|
55
|
+
|
|
56
|
+
TakoTrace binds to loopback by default, keeps runtime state in memory, and adds no telemetry or remote session storage. Codex rollout fallback and Claude history access are read-only. Provider authentication stays with Codex or Claude Code.
|
|
57
|
+
|
|
58
|
+
> [!WARNING]
|
|
59
|
+
> The local API has no general authentication layer. Do not expose it directly to a LAN or the public internet, including with `--host 0.0.0.0`.
|
|
60
|
+
|
|
61
|
+
## Documentation
|
|
62
|
+
|
|
63
|
+
- [Technical design](./TECHNICAL_DESIGN.md)
|
|
64
|
+
- [Product principles](./PRODUCT.md)
|
|
65
|
+
- [Development guide](./DEVELOPMENT.md)
|
|
66
|
+
|
|
67
|
+
<p align="center">
|
|
68
|
+
<a href="https://github.com/zhaofinger/takotrace"><img src="./assets/star-takotrace.gif" alt="If TakoTrace is useful, star the repository" width="600" /></a>
|
|
69
|
+
</p>
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./assets/takotrace-logo.png" alt="TakoTrace Logo" width="160" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">TakoTrace</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">用时间线、时序图和原始事件查看 Codex 与 Claude Code 会话。</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://github.com/zhaofinger/takotrace/stargazers"><img src="https://img.shields.io/github/stars/zhaofinger/takotrace?style=flat&logo=github" alt="GitHub Stars" /></a>
|
|
11
|
+
<img src="https://img.shields.io/badge/Node.js-22%2B-339933?logo=node.js&logoColor=white" alt="Node.js 22+" />
|
|
12
|
+
<img src="https://img.shields.io/badge/Provider-Codex%20%2B%20Claude-2563eb" alt="支持 Codex 与 Claude" />
|
|
13
|
+
<img src="https://img.shields.io/badge/存储-本地优先-0f766e" alt="本地优先" />
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center"><a href="./README.md">English</a></p>
|
|
17
|
+
|
|
18
|
+
TakoTrace 把本地 AI 编程会话整理成可浏览的执行轨迹。用户请求、Agent 推理、命令、文件修改、MCP 调用、Skill 和 Subagent 都集中在一个界面,不必再翻 rollout 文件或终端日志。
|
|
19
|
+
|
|
20
|
+
## 快速开始
|
|
21
|
+
|
|
22
|
+
需要 Node.js 22+,并安装 Codex、Claude Code,或同时安装两者。
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npx takotrace
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
TakoTrace 默认监听 `127.0.0.1:4317`,启动可用的 Provider 并打开浏览器。
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# 只启动一个 Provider
|
|
32
|
+
npx takotrace --provider codex
|
|
33
|
+
npx takotrace --provider claude
|
|
34
|
+
|
|
35
|
+
# 指定 Codex 路径
|
|
36
|
+
npx takotrace --codex-path /path/to/codex
|
|
37
|
+
|
|
38
|
+
# 修改端口且不自动打开浏览器
|
|
39
|
+
npx takotrace --port 4400 --no-open
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
运行 `npx takotrace --help` 查看全部参数。
|
|
43
|
+
|
|
44
|
+
## 可以查看什么
|
|
45
|
+
|
|
46
|
+
- 按 Provider 和工作目录分组的 Session。
|
|
47
|
+
- 每个 Run 的 Trace、Sequence 和 Raw JSON。
|
|
48
|
+
- 命令、文件修改、MCP 调用、Skill 与 Subagent 关系。
|
|
49
|
+
- Token 用量、Markdown、附件、图片和本地源文件。
|
|
50
|
+
- Codex App Server 解码失败时,从本地 rollout 文件只读恢复历史。
|
|
51
|
+
|
|
52
|
+
界面使用 **Session**、**Run**、**Step**,Raw API 保留 Provider 的原始字段名。
|
|
53
|
+
|
|
54
|
+
## 数据与安全
|
|
55
|
+
|
|
56
|
+
TakoTrace 默认只绑定 loopback,运行状态保存在内存中,不增加遥测或远程会话存储。Codex rollout 回退与 Claude 历史访问均为只读,登录和认证仍由 Codex 或 Claude Code 负责。
|
|
57
|
+
|
|
58
|
+
> [!WARNING]
|
|
59
|
+
> 本地 API 没有通用认证层。不要将它直接暴露到局域网或公网,包括使用 `--host 0.0.0.0`。
|
|
60
|
+
|
|
61
|
+
## 文档
|
|
62
|
+
|
|
63
|
+
- [技术设计](./TECHNICAL_DESIGN.md)
|
|
64
|
+
- [产品原则](./PRODUCT.md)
|
|
65
|
+
- [本地开发](./DEVELOPMENT.md)
|
|
66
|
+
|
|
67
|
+
<p align="center">
|
|
68
|
+
<a href="https://github.com/zhaofinger/takotrace"><img src="./assets/star-takotrace.gif" alt="如果 TakoTrace 对你有用,欢迎点亮 Star" width="600" /></a>
|
|
69
|
+
</p>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# TakoTrace 技术设计
|
|
2
|
+
|
|
3
|
+
## 目标
|
|
4
|
+
|
|
5
|
+
TakoTrace 是一个通过 `npx takotrace` 启动的本地服务,用网页观察 Codex 与 Claude Agent 会话,并实时追踪 Run、工具调用和执行状态。
|
|
6
|
+
|
|
7
|
+
## 架构
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
Browser <-- HTTP + SSE --> TakoTrace --> Codex adapter --> stdio JSONL --> codex app-server
|
|
11
|
+
| +-- read-only fallback --> rollout JSONL
|
|
12
|
+
|
|
|
13
|
+
+--------> Claude adapter --> Agent SDK / ~/.claude sessions
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
- TakoTrace 使用 Node.js/TypeScript 启动 Provider;默认同时管理 `codex app-server` 子进程与 Claude Agent SDK。
|
|
17
|
+
- Provider 适配层解析 Codex JSON-RPC 与 Claude SDK/session 数据,并转换为统一的 trace 事件。
|
|
18
|
+
- 浏览器通过 SSE 接收实时事件,通过 HTTP 获取历史数据和发送操作。
|
|
19
|
+
- 首版数据保存在内存中,暂不引入数据库。
|
|
20
|
+
|
|
21
|
+
## 数据模型
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
Thread
|
|
25
|
+
└── Turn
|
|
26
|
+
└── Item: message | tool | command | file_change | approval
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
每个事件至少包含时间、类型、状态、Thread ID、Turn ID、Item ID 和原始数据。
|
|
30
|
+
|
|
31
|
+
## 核心流程
|
|
32
|
+
|
|
33
|
+
1. CLI 启动本地 HTTP 服务和所选 Provider;`--provider all` 默认同时启用 Codex 与 Claude。
|
|
34
|
+
2. Codex adapter 完成 `initialize` / `initialized` 握手,分页调用 `thread/list` 加载历史元数据,并按需调用 `thread/read` 加载完整 Turn/Item 快照;反序列化兼容错误时,只读解析匹配的 rollout JSONL 恢复历史。
|
|
35
|
+
3. Claude adapter 从 `~/.claude` 读取历史 session 与 transcript;受管 Run 通过 Agent SDK 的 `query()` 启动或恢复,并将 SDK 消息归一化为统一事件。
|
|
36
|
+
4. 两侧 Provider 持续同步历史快照和实时通知,由服务按 Provider ownership 隔离 Session、搜索、Run 与详情数据。
|
|
37
|
+
5. 网页按当前 Codex / Claude Tab 和工作目录分组展示 Session;主时间线以 Run 为单位,将用户消息、Agent 执行和最终回复聚合为一行。
|
|
38
|
+
6. `/api/state` 与 SSE 只传 compact item;选中 Run 时,再通过详情接口加载受长度保护的 raw 数据。
|
|
39
|
+
|
|
40
|
+
## 首版边界
|
|
41
|
+
|
|
42
|
+
- 精确实时通知仅覆盖当前 TakoTrace 实例管理的会话;外部 Codex 与 Claude 历史会话通过周期同步提供可能滞后的近实时快照。
|
|
43
|
+
- 默认只绑定 `127.0.0.1`,不开放远程访问。
|
|
44
|
+
- 不修改 Codex 私有会话文件;rollout JSONL 仅作为 `thread/read` 兼容失败时的 best-effort 只读回退,不作为主协议。
|
|
45
|
+
- 不提供 claude.ai 登录,也不读取、存储或回显 Provider 凭据。
|
|
46
|
+
- 对未知事件保留原始数据并安全忽略,兼容协议扩展。
|
|
Binary file
|
|
Binary file
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import type { ProviderSelection } from './shared/types.js';
|
|
3
|
+
import type { TraceProvider } from './server/provider.js';
|
|
4
|
+
interface CliOptions {
|
|
5
|
+
host: string;
|
|
6
|
+
port: number;
|
|
7
|
+
open: boolean;
|
|
8
|
+
help: boolean;
|
|
9
|
+
provider: ProviderSelection;
|
|
10
|
+
codexPath?: string;
|
|
11
|
+
claudePath?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function parseArgs(args: string[]): CliOptions;
|
|
14
|
+
export declare function createProvider(options: CliOptions): TraceProvider;
|
|
15
|
+
export {};
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { realpathSync } from 'node:fs';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { CodexClient } from './server/codex-client.js';
|
|
7
|
+
import { resolveCodexCommand } from './server/codex-command.js';
|
|
8
|
+
import { ClaudeClient } from './server/claude-client.js';
|
|
9
|
+
import { TakoTraceServer } from './server/http-server.js';
|
|
10
|
+
import { MultiProvider } from './server/multi-provider.js';
|
|
11
|
+
const HELP = `Usage: takotrace [options]
|
|
12
|
+
|
|
13
|
+
Options:
|
|
14
|
+
--host <host> Bind host (default: 127.0.0.1)
|
|
15
|
+
--port <port> Bind port (default: 4317)
|
|
16
|
+
--provider <codex|claude|all> Agent providers (default: all)
|
|
17
|
+
--codex-path <path> Codex executable path (overrides automatic selection)
|
|
18
|
+
--claude-path <path> Claude Code executable path for managed sessions
|
|
19
|
+
--no-open Do not open the browser
|
|
20
|
+
--help Show this help
|
|
21
|
+
`;
|
|
22
|
+
export function parseArgs(args) {
|
|
23
|
+
const options = { host: '127.0.0.1', port: 4317, open: true, help: false, provider: 'all' };
|
|
24
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
25
|
+
const argument = args[index];
|
|
26
|
+
if (argument === '--help' || argument === '-h')
|
|
27
|
+
options.help = true;
|
|
28
|
+
else if (argument === '--no-open')
|
|
29
|
+
options.open = false;
|
|
30
|
+
else if (argument === '--host')
|
|
31
|
+
options.host = requireValue(args, ++index, '--host');
|
|
32
|
+
else if (argument.startsWith('--host='))
|
|
33
|
+
options.host = argument.slice('--host='.length);
|
|
34
|
+
else if (argument === '--port')
|
|
35
|
+
options.port = parsePort(requireValue(args, ++index, '--port'));
|
|
36
|
+
else if (argument.startsWith('--port='))
|
|
37
|
+
options.port = parsePort(argument.slice('--port='.length));
|
|
38
|
+
else if (argument === '--provider')
|
|
39
|
+
options.provider = parseProvider(requireValue(args, ++index, '--provider'));
|
|
40
|
+
else if (argument.startsWith('--provider='))
|
|
41
|
+
options.provider = parseProvider(argument.slice('--provider='.length));
|
|
42
|
+
else if (argument === '--codex-path')
|
|
43
|
+
options.codexPath = requireValue(args, ++index, '--codex-path');
|
|
44
|
+
else if (argument.startsWith('--codex-path='))
|
|
45
|
+
options.codexPath = argument.slice('--codex-path='.length);
|
|
46
|
+
else if (argument === '--claude-path')
|
|
47
|
+
options.claudePath = requireValue(args, ++index, '--claude-path');
|
|
48
|
+
else if (argument.startsWith('--claude-path='))
|
|
49
|
+
options.claudePath = argument.slice('--claude-path='.length);
|
|
50
|
+
else
|
|
51
|
+
throw new Error(`Unknown option: ${argument}`);
|
|
52
|
+
}
|
|
53
|
+
return options;
|
|
54
|
+
}
|
|
55
|
+
export function createProvider(options) {
|
|
56
|
+
if (options.provider === 'codex')
|
|
57
|
+
return new CodexClient({ command: options.codexPath });
|
|
58
|
+
const claude = new ClaudeClient({ pathToClaudeCodeExecutable: options.claudePath });
|
|
59
|
+
if (options.provider === 'claude')
|
|
60
|
+
return claude;
|
|
61
|
+
return new MultiProvider({ providers: [new CodexClient({ command: options.codexPath }), claude] });
|
|
62
|
+
}
|
|
63
|
+
async function main() {
|
|
64
|
+
let options;
|
|
65
|
+
try {
|
|
66
|
+
options = parseArgs(process.argv.slice(2));
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
process.stderr.write(`${error instanceof Error ? error.message : error}\n\n${HELP}`);
|
|
70
|
+
process.exitCode = 1;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (options.help) {
|
|
74
|
+
process.stdout.write(HELP);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (options.provider !== 'claude') {
|
|
78
|
+
const selected = resolveCodexCommand({ explicitPath: options.codexPath });
|
|
79
|
+
options.codexPath = selected.command;
|
|
80
|
+
process.stdout.write(`Codex command: source=${selected.source} version=${selected.version ?? 'unknown'} command=${selected.command}\n`);
|
|
81
|
+
}
|
|
82
|
+
const provider = createProvider(options);
|
|
83
|
+
const staticDir = join(dirname(fileURLToPath(import.meta.url)), 'web');
|
|
84
|
+
const server = new TakoTraceServer(provider, { host: options.host, port: options.port, staticDir });
|
|
85
|
+
server.attachProvider(provider);
|
|
86
|
+
let address;
|
|
87
|
+
try {
|
|
88
|
+
address = await server.listen();
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
await provider.stop();
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
const url = `http://${formatHost(address.host)}:${address.port}`;
|
|
95
|
+
process.stdout.write(`TakoTrace listening on ${url}\n`);
|
|
96
|
+
if (options.open)
|
|
97
|
+
openBrowser(url);
|
|
98
|
+
try {
|
|
99
|
+
const initialized = await provider.start();
|
|
100
|
+
server.store.setConnection('connected', {
|
|
101
|
+
provider: initialized.provider,
|
|
102
|
+
userAgent: initialized.userAgent ?? (initialized.provider === 'all'
|
|
103
|
+
? 'codex + claude'
|
|
104
|
+
: initialized.provider === 'claude' ? 'claude-agent-sdk' : 'codex app-server'),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
server.store.setConnection('error', { error: error instanceof Error ? error.message : String(error) });
|
|
109
|
+
await server.close();
|
|
110
|
+
await provider.stop();
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
const shutdown = async () => {
|
|
114
|
+
await server.close();
|
|
115
|
+
await provider.stop();
|
|
116
|
+
};
|
|
117
|
+
process.once('SIGINT', () => void shutdown().then(() => process.exit(0)));
|
|
118
|
+
process.once('SIGTERM', () => void shutdown().then(() => process.exit(0)));
|
|
119
|
+
}
|
|
120
|
+
function requireValue(args, index, option) {
|
|
121
|
+
const value = args[index];
|
|
122
|
+
if (!value || value.startsWith('--'))
|
|
123
|
+
throw new Error(`${option} requires a value`);
|
|
124
|
+
return value;
|
|
125
|
+
}
|
|
126
|
+
function parsePort(value) {
|
|
127
|
+
const port = Number(value);
|
|
128
|
+
if (!Number.isInteger(port) || port < 0 || port > 65_535)
|
|
129
|
+
throw new Error(`Invalid port: ${value}`);
|
|
130
|
+
return port;
|
|
131
|
+
}
|
|
132
|
+
function parseProvider(value) {
|
|
133
|
+
if (value === 'codex' || value === 'claude' || value === 'all')
|
|
134
|
+
return value;
|
|
135
|
+
throw new Error(`Invalid provider: ${value} (expected codex, claude or all)`);
|
|
136
|
+
}
|
|
137
|
+
function formatHost(host) {
|
|
138
|
+
return host.includes(':') ? `[${host}]` : host;
|
|
139
|
+
}
|
|
140
|
+
function openBrowser(url) {
|
|
141
|
+
const command = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'cmd' : 'xdg-open';
|
|
142
|
+
const args = process.platform === 'win32' ? ['/c', 'start', '', url] : [url];
|
|
143
|
+
const child = spawn(command, args, { detached: true, stdio: 'ignore' });
|
|
144
|
+
child.unref();
|
|
145
|
+
}
|
|
146
|
+
if (process.argv[1] && fileURLToPath(import.meta.url) === realpathSync(process.argv[1])) {
|
|
147
|
+
main().catch((error) => {
|
|
148
|
+
process.stderr.write(`takotrace: ${error instanceof Error ? error.message : error}\n`);
|
|
149
|
+
process.exitCode = 1;
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type Options as ClaudeQueryOptions, type Query, type SDKSessionInfo, type SessionMessage } from '@anthropic-ai/claude-agent-sdk';
|
|
2
|
+
import type { TraceInput, TraceProvider } from './provider.js';
|
|
3
|
+
export interface ClaudeSdk {
|
|
4
|
+
listSessions(options?: {
|
|
5
|
+
dir?: string;
|
|
6
|
+
limit?: number;
|
|
7
|
+
offset?: number;
|
|
8
|
+
}): Promise<SDKSessionInfo[]>;
|
|
9
|
+
getSessionInfo(sessionId: string, options?: {
|
|
10
|
+
dir?: string;
|
|
11
|
+
}): Promise<SDKSessionInfo | undefined>;
|
|
12
|
+
getSessionMessages(sessionId: string, options?: {
|
|
13
|
+
dir?: string;
|
|
14
|
+
limit?: number;
|
|
15
|
+
offset?: number;
|
|
16
|
+
includeSystemMessages?: boolean;
|
|
17
|
+
}): Promise<SessionMessage[]>;
|
|
18
|
+
query(params: {
|
|
19
|
+
prompt: string;
|
|
20
|
+
options?: ClaudeQueryOptions;
|
|
21
|
+
}): Query;
|
|
22
|
+
}
|
|
23
|
+
export interface ClaudeClientOptions {
|
|
24
|
+
dir?: string;
|
|
25
|
+
pathToClaudeCodeExecutable?: string;
|
|
26
|
+
historyRefreshMs?: number;
|
|
27
|
+
historyThreadLimit?: number;
|
|
28
|
+
historyMessagesLimit?: number;
|
|
29
|
+
sdk?: ClaudeSdk;
|
|
30
|
+
}
|
|
31
|
+
export declare class ClaudeClient implements TraceProvider {
|
|
32
|
+
readonly providerId: "claude";
|
|
33
|
+
private readonly emitter;
|
|
34
|
+
private readonly options;
|
|
35
|
+
private readonly sdk;
|
|
36
|
+
private historyTimer?;
|
|
37
|
+
private historySync?;
|
|
38
|
+
private started;
|
|
39
|
+
private busy;
|
|
40
|
+
private readonly sessionByThread;
|
|
41
|
+
private pendingThreadId?;
|
|
42
|
+
constructor(options?: ClaudeClientOptions);
|
|
43
|
+
start(): Promise<{
|
|
44
|
+
provider: 'claude';
|
|
45
|
+
userAgent?: string;
|
|
46
|
+
}>;
|
|
47
|
+
stop(): Promise<void>;
|
|
48
|
+
onTrace(listener: (event: TraceInput) => void): () => void;
|
|
49
|
+
onHistory(listener: (threads: unknown[], replace: boolean, provider?: 'claude') => void): () => void;
|
|
50
|
+
onError(listener: (error: Error) => void): () => void;
|
|
51
|
+
refreshHistory(): Promise<void>;
|
|
52
|
+
private fetchHistory;
|
|
53
|
+
startThread(params?: Record<string, unknown>): Promise<unknown>;
|
|
54
|
+
resumeThread(threadId: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
55
|
+
startTurn(threadId: string, text: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
56
|
+
private emitTrace;
|
|
57
|
+
private emitUserMessage;
|
|
58
|
+
private emitAssistantMessage;
|
|
59
|
+
private emitResult;
|
|
60
|
+
private rememberSession;
|
|
61
|
+
}
|
|
62
|
+
export declare function sessionToHistory(session: SDKSessionInfo, messages: SessionMessage[]): unknown;
|
|
63
|
+
export declare function messagesToTurns(sessionId: string, messages: SessionMessage[]): Array<Record<string, unknown>>;
|