thatgfsj-code 0.8.3 → 0.8.4

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/ROADMAP.md CHANGED
@@ -2,60 +2,90 @@
2
2
 
3
3
  ---
4
4
 
5
- ## ✅ v0.3.0 - 架构重构 (当前版本)
5
+ ## ✅ v0.9.0 - 稳定版 (当前版本)
6
6
 
7
- ### 核心改进
8
- - [x] 参考 opencode 重构模块化架构
7
+ ### 核心架构
8
+ - [x] Ink (React) TUI 框架
9
9
  - [x] LLM Provider 抽象层 (OpenAI/Anthropic/Gemini)
10
- - [x] 统一 App 核心服务层
11
- - [x] 精简 CLI 入口 (去掉 explain/debug/chat/template)
12
- - [x] 类型系统整理 (types.ts 拆分到各模块)
13
- - [x] 删除未使用模块 (skills, subagent, state, intent)
14
-
15
- ### 新目录结构
16
- ```
17
- src/
18
- ├── cmd/ # CLI 入口
19
- ├── app/ # 核心服务 + Agent Loop
20
- ├── config/ # 配置 + Provider 定义
21
- ├── llm/ # LLM Provider 抽象
22
- ├── session/ # 会话管理
23
- ├── tools/ # 工具系统
24
- ├── tui/ # 终端 UI
25
- ├── mcp/ # MCP 协议
26
- ├── hooks/ # 钩子系统
27
- ├── prompts/ # 提示构建
28
- └── utils/ # 工具函数
29
- ```
10
+ - [x] 15 Provider + 自定义中转站
11
+ - [x] 模块化目录结构 (cmd/app/config/llm/session/tools/tui/skills/hooks/prompts)
12
+
13
+ ### 工具系统
14
+ - [x] file (读/写/列表/删除)
15
+ - [x] shell (执行命令)
16
+ - [x] git (操作)
17
+ - [x] search (搜索)
18
+ - [x] nwt (项目记忆,30天自动归档)
19
+
20
+ ### Skills 系统
21
+ - [x] 16 个内置 Skills (规划/调试/TDD/架构/浏览器等)
22
+ - [x] /skills 命令管理
23
+ - [x] 自动激活
24
+
25
+ ### UI/UX
26
+ - [x] Ink TUI 流式输出
27
+ - [x] Markdown 渲染 (marked-terminal)
28
+ - [x] 工具调用显示 (opencode 风格)
29
+ - [x] 状态栏
30
+ - [x] 命令系统 (/model, /new, /compact, /skills, /mcp, /help)
31
+ - [x] /model 交互式选择框
32
+
33
+ ### 智能功能
34
+ - [x] 自动读取 CLAUDE.md/SKILLS.md (通用路径)
35
+ - [x] NWT 项目历史自动注入系统提示
36
+ - [x] 上下文自动压缩 (超限触发)
37
+ - [x] API 错误检测 (401/403/429)
38
+ - [x] 启动时检测 API Key
39
+
40
+ ### 安装
41
+ - [x] npm install -g thatgfsj-code
42
+ - [x] Windows PowerShell 一键安装
43
+ - [x] Linux/macOS Bash 一键安装
44
+ - [x] 自动下载 Node.js (如果没有)
45
+
46
+ ### 测试通过
47
+ - [x] 简单任务: 读文件 + 回答
48
+ - [x] 中等任务: 修改文件 + 验证
49
+ - [x] 困难任务: 多步骤 + NWT 记录
50
+ - [x] Git + Search + NWT 联合测试
51
+ - [x] 多文件创建和修改
30
52
 
31
53
  ---
32
54
 
33
55
  ## 📋 未来计划
34
56
 
35
- ### v0.4.0 - 增强功能
57
+ ### v1.0.0
36
58
  - [ ] SQLite 会话持久化
37
- - [ ] 命令历史持久化
38
- - [ ] 自定义工具插件加载
39
- - [ ] MCP 服务器配置文件支持
40
-
41
- ### v0.5.0 - TUI 升级
42
- - [ ] Ink/React TUI 替换 readline
43
- - [ ] 分屏显示 (代码 + 对话)
44
- - [ ] Vim 模式编辑器
45
- - [ ] 文件变更预览面板
46
-
47
- ### v1.0.0 - 稳定版
48
- - [ ] LSP 集成
59
+ - [ ] Token 使用量显示
60
+ - [ ] 命令 Tab 补全
49
61
  - [ ] 多会话管理
50
- - [ ] 插件市场
51
- - [ ] 完整测试覆盖
62
+ - [ ] LSP 集成
63
+ - [ ] 图片支持
52
64
 
53
65
  ---
54
66
 
55
- ## 已完成的历史阶段
67
+ ## 历史版本
56
68
 
57
- ### ✅ v0.1.0 - REPL 基础
58
- - 彩色 UI、命令提示符、Ctrl+C 中断、内置命令
69
+ ### ✅ v0.8.0 - 命令系统
70
+ - /model, /new, /compact, /skills, /mcp 命令
71
+
72
+ ### ✅ v0.7.0 - Skills + NWT
73
+ - 16 个内置 Skills, NWT 项目记忆
74
+
75
+ ### ✅ v0.6.0 - Ink TUI
76
+ - React 组件化 UI, Markdown 渲染
77
+
78
+ ### ✅ v0.5.0 - Provider 重写
79
+ - 15 个 Provider, 自定义中转站
80
+
81
+ ### ✅ v0.4.0 - UI 优化
82
+ - 流式输出, 工具调用显示
83
+
84
+ ### ✅ v0.3.0 - 架构重构
85
+ - 模块化目录, Provider 抽象
59
86
 
60
87
  ### ✅ v0.2.0 - 工具 + LLM
61
- - Git/搜索工具、多 Provider 支持、流式输出、意图识别
88
+ - Git/搜索工具, Provider
89
+
90
+ ### ✅ v0.1.0 - REPL 基础
91
+ - 彩色 UI, 命令提示符
package/dist/cmd/index.js CHANGED
@@ -24,7 +24,7 @@ process.on('unhandledRejection', (reason) => {
24
24
  program
25
25
  .name('gfcode')
26
26
  .description('Thatgfsj Code - AI Coding Assistant')
27
- .version('0.8.3')
27
+ .version('0.8.4')
28
28
  .argument('[prompt]', 'Task to execute (omit to start interactive mode)')
29
29
  .option('-m, --model <model>', 'Specify model')
30
30
  .option('-i, --interactive', 'Force interactive mode')
@@ -3,6 +3,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import React from 'react';
4
4
  import { Box, Text } from 'ink';
5
5
  export const Header = React.memo(function Header({ provider, model }) {
6
- return (_jsxs(Box, { flexDirection: "column", marginBottom: 0, children: [_jsxs(Box, { justifyContent: "space-between", width: "100%", children: [_jsxs(Box, { children: [_jsx(Text, { color: "#06B6D4", bold: true, children: " \u26A1 " }), _jsx(Text, { color: "#22D3EE", bold: true, children: "THATGFSJ CODE" }), _jsx(Text, { dimColor: true, children: " v0.8.3" })] }), _jsxs(Box, { children: [_jsxs(Text, { color: "#06B6D4", bold: true, children: [" ", provider, " "] }), _jsx(Text, { dimColor: true, children: "/" }), _jsxs(Text, { color: "#22D3EE", children: [" ", model, " "] })] })] }), _jsx(Text, { color: "#374151", children: '─'.repeat(80) })] }));
6
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 0, children: [_jsxs(Box, { justifyContent: "space-between", width: "100%", children: [_jsxs(Box, { children: [_jsx(Text, { color: "#06B6D4", bold: true, children: " \u26A1 " }), _jsx(Text, { color: "#22D3EE", bold: true, children: "THATGFSJ CODE" }), _jsx(Text, { dimColor: true, children: " v0.8.4" })] }), _jsxs(Box, { children: [_jsxs(Text, { color: "#06B6D4", bold: true, children: [" ", provider, " "] }), _jsx(Text, { dimColor: true, children: "/" }), _jsxs(Text, { color: "#22D3EE", children: [" ", model, " "] })] })] }), _jsx(Text, { color: "#374151", children: '─'.repeat(80) })] }));
7
7
  });
8
8
  //# sourceMappingURL=Header.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thatgfsj-code",
3
- "version": "0.8.3",
3
+ "version": "0.8.4",
4
4
  "description": "Thatgfsj Code - AI Coding Assistant",
5
5
  "main": "dist/cmd/index.js",
6
6
  "type": "module",
package/src/cmd/index.tsx CHANGED
@@ -28,7 +28,7 @@ process.on('unhandledRejection', (reason) => {
28
28
  program
29
29
  .name('gfcode')
30
30
  .description('Thatgfsj Code - AI Coding Assistant')
31
- .version('0.8.3')
31
+ .version('0.8.4')
32
32
  .argument('[prompt]', 'Task to execute (omit to start interactive mode)')
33
33
  .option('-m, --model <model>', 'Specify model')
34
34
  .option('-i, --interactive', 'Force interactive mode')
@@ -14,7 +14,7 @@ export const Header = React.memo(function Header({ provider, model }: Props) {
14
14
  <Box>
15
15
  <Text color="#06B6D4" bold> ⚡ </Text>
16
16
  <Text color="#22D3EE" bold>THATGFSJ CODE</Text>
17
- <Text dimColor> v0.8.3</Text>
17
+ <Text dimColor> v0.8.4</Text>
18
18
  </Box>
19
19
  <Box>
20
20
  <Text color="#06B6D4" bold> {provider} </Text>