autosnippet 1.2.17 → 1.3.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 CHANGED
@@ -1,267 +1,206 @@
1
1
  # AutoSnippet
2
2
 
3
- 基于 SPM 的 iOS 模块 Snippet 工具。通过 AutoSnippet 可以把模块的使用示范写进 Xcode CodeSnippets,并支持分类检索、链接跳转与(可选)依赖头文件注入。
3
+ 基于 SPM 的 iOS 模块 Snippet AI 知识库工具。将模块使用示范写入 Xcode CodeSnippets,支持分类检索、头文件注入,以及基于 AI 的知识沉淀与可视化管理。
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/autosnippet.svg?style=flat-square)](https://www.npmjs.com/package/autosnippet)
6
6
  [![npm downloads](https://img.shields.io/npm/dm/autosnippet.svg?style=flat-square)](https://www.npmjs.com/package/autosnippet)
7
- [![npm total downloads](https://img.shields.io/npm/dt/autosnippet.svg?style=flat-square)](https://www.npmjs.com/package/autosnippet)
8
- [![GitHub stars](https://img.shields.io/github/stars/GxFn/AutoSnippet.svg?style=flat-square)](https://github.com/GxFn/AutoSnippet)
9
- [![GitHub forks](https://img.shields.io/github/forks/GxFn/AutoSnippet.svg?style=flat-square)](https://github.com/GxFn/AutoSnippet)
10
7
  [![License](https://img.shields.io/npm/l/autosnippet.svg?style=flat-square)](https://github.com/GxFn/AutoSnippet/blob/main/LICENSE)
11
8
 
12
- ## 使用
13
-
14
- 模块开发者提供了Toast模块,可以将这一段使用代码写入模块的配置文件(参照下文命令)
15
-
16
- ```objectivec
17
- [[ASUIKitAlertToast sharedInstance] alertWithMessage:@"<#object#>"];
18
- ```
19
-
20
- 模块被工程引入时,业务开发者可以在Xcode里,敲击`@toast`来获取这段标准的使用代码
21
-
22
- Toast模块添加配置时可以选择分类,使用者可以通过`@view`或者`@tool`联想出同类别模块列表
23
-
24
- 代码量大的UI模块,能一键获取全部标准代码
9
+ ---
25
10
 
26
11
  ## 安装
27
12
 
28
13
  ```bash
29
- $ npm install -g autosnippet
14
+ npm install -g autosnippet
30
15
  ```
31
16
 
32
17
  ## 快速开始
33
18
 
34
- 建议在**项目根目录**执行(能找到 `AutoSnippetRoot.boxspec.json`)。
19
+ 在**项目根目录**执行(需能找到 `AutoSnippetRoot.boxspec.json`,没有会自己创建,关键是首次创建一定要在根目录):
35
20
 
36
21
  ```bash
37
- # 1) 一键初始化(等价于 init + root)
22
+ # 一键初始化
38
23
  asd setup
39
24
 
40
- # 2) 在代码里用新标记圈出 snippet 内容,然后创建
41
- asd create
42
-
43
- # 3) 安装到 Xcode CodeSnippets
44
- asd install
45
-
46
- # 4) 开启监听(用于头文件注入/依赖补齐/ALink 跳转)
47
- asd watch
25
+ # 启动 Web 管理后台
26
+ asd ui
48
27
  ```
49
28
 
50
- ## 全局选项(推荐)
29
+ 浏览器会自动打开 Dashboard,可在 **使用说明** 页查看完整说明。
30
+
31
+ ---
51
32
 
52
- - **`--preset <path>`**:指定预置输入(非交互/自动化最常用)。
53
- - **`--yes`**:非交互模式;缺少必要输入会直接报错退出。
33
+ ## AI 支持与配置
54
34
 
55
- 也支持环境变量(方便 CI / 测试脚本):
35
+ ### 当前支持的 AI
56
36
 
57
- - **`ASD_PRESET` / `ASD_TEST_PRESET`**:预置输入 json 路径(优先级低于 `--preset`)
37
+ | 提供商 | 默认模型 | 说明 |
38
+ |--------|----------|------|
39
+ | **Google Gemini** | `gemini-2.0-flash` | 用于 Snippet 提取、摘要、RAG 问答等 |
58
40
 
59
- ## 命令
41
+ 当前仅支持 **Google Gemini**。`asd create`、`asd ais`、Dashboard 的「按路径/剪贴板创建」与 AI Assistant 均使用该模型。
60
42
 
61
- 请在当前 Xcode 项目文件目录下使用以下所有命令。
43
+ ### 配置指南
62
44
 
63
- ### root
45
+ **1. 必填:API Key**
64
46
 
65
- Xcode 项目的根目录执行此命令以创建工作空间:
47
+ [Google AI Studio](https://aistudio.google.com/) 申请 API Key,然后通过环境变量传入(勿写入仓库):
66
48
 
67
49
  ```bash
68
- $ asd root
50
+ export ASD_GOOGLE_API_KEY="你的 API Key"
69
51
  ```
70
52
 
71
- 创建工作空间时,会将子工作空间的 Snippet 配置信息收集到当前工作空间。
72
-
73
- ### init
74
-
75
- 在 Xcode 项目的spm模块目录执行此命令以创建模块工作空间:
53
+ 或在项目根目录创建 `.env` 文件(已加入 `.gitignore`,勿提交):
76
54
 
77
55
  ```bash
78
- $ asd init
56
+ # .env
57
+ ASD_GOOGLE_API_KEY=你的API_Key
79
58
  ```
80
59
 
81
- ### setup(推荐)
60
+ **2. 可选:模型与提供商**
82
61
 
83
- 初始化快捷命令,等价于 `asd init` + `asd root`:
62
+ | 环境变量 | 说明 | 默认值 |
63
+ |----------|------|--------|
64
+ | `ASD_GOOGLE_API_KEY` | Google Gemini API Key(必填) | — |
65
+ | `ASD_AI_PROVIDER` | 提供商,目前仅 `google` | `google` |
66
+ | `ASD_AI_MODEL` | 模型名 | `gemini-2.0-flash` |
67
+
68
+ 示例:使用 Pro 模型
84
69
 
85
70
  ```bash
86
- $ asd setup
71
+ export ASD_AI_MODEL="gemini-1.5-pro"
87
72
  ```
88
73
 
89
- ### create
74
+ **3. 可选:代理**
90
75
 
91
- 创建 Xcode 代码片段(支持从文件标记提取,或直接从剪贴板生成)。
76
+ 若需走代理访问 Google API,可设置:
92
77
 
93
78
  ```bash
94
- $ asd create
95
- # 或短别名
96
- $ asd c
79
+ export https_proxy="http://127.0.0.1:7890"
80
+ #
81
+ export http_proxy="http://127.0.0.1:7890"
97
82
  ```
98
83
 
99
- #### 从文件标记提取
84
+ ---
100
85
 
101
- 在任意 `.m/.h/.swift` 文件中使用标记圈出代码块(推荐短写法):
86
+ ## Web Dashboard(asd ui)
102
87
 
103
- ```
104
- // as:code
105
- UIView *view = [[UIView alloc] init];
106
- // as:code
107
- ```
88
+ 启动后访问 `http://localhost:3000`,主要能力:
108
89
 
109
- 然后在该文件所在目录(或通过 preset 指定文件)执行 `asd create`。
90
+ | 页面 | 说明 |
91
+ |------|------|
92
+ | **Snippets** | 查看、编辑、删除代码片段;同步到 Xcode |
93
+ | **Knowledge Base** | 管理 Markdown 技术文档(Skills),与 Snippet 关联 |
94
+ | **SPM Explorer** | 按 Target 扫描源码,AI 提取候选;从路径/剪贴板创建知识 |
95
+ | **Candidates** | 审核 CLI 批量扫描(`asd ais`)产生的候选,入库或忽略 |
96
+ | **AI Assistant** | 基于本地 Snippets/Skills 的 RAG 问答 |
97
+ | **使用说明** | 本说明的 Web 版,随 Dashboard 常驻 |
110
98
 
111
- #### 从剪贴板创建
99
+ ### 新建知识(与 CLI 对齐)
112
100
 
113
- ```bash
114
- # 默认按 objc 处理
115
- asd create --clipboard
101
+ - **按路径**:输入相对路径(如 `Sources/MyMod/Foo.m`)→ 扫描文件,AI 提取标题/摘要/触发键/头文件,审核后保存。
102
+ - **按剪贴板**:复制代码后点击「Use Copied Code」→ AI 分析并填充;若由 `// as:create` 打开会带当前文件路径,自动解析头文件。
116
103
 
117
- # 短写法
118
- asd c -p
104
+ ### 头文件与标记
119
105
 
120
- # Swift
121
- asd create --clipboard --lang swift
122
- ```
106
+ 保存时可勾选「引入头文件」。会写入 `// as:include <TargetName/Header.h> path` 等标记,配合 `asd watch` 在编辑时自动注入 `#import`。
123
107
 
124
- ### install
108
+ ---
125
109
 
126
- 将共享的代码片段添加到 Xcode 环境:
110
+ ## 命令行
127
111
 
128
- ```bash
129
- $ asd install
130
- # 或短别名
131
- $ asd i
132
- ```
112
+ ### 常用
133
113
 
134
- 使用代码片段示例:
114
+ | 命令 | 说明 |
115
+ |------|------|
116
+ | `asd ui` | 启动 Web Dashboard |
117
+ | `asd create` | 从带 `// as:code` 的文件用 **AI** 提取并创建 Snippet(默认 AI 模式) |
118
+ | `asd create --clipboard` | 从剪贴板用 **AI** 创建;可选 `--path 相对路径` 解析头文件 |
119
+ | `asd create --no-ai` | 关闭 AI,使用传统交互/预置输入 |
120
+ | `asd install` / `asd i` | 将 Snippets 同步到 Xcode |
121
+ | `asd ais [Target]` | AI 扫描 SPM Target,结果进 Candidates,在 Dashboard 审核 |
122
+ | `asd watch` / `asd w` | 监听源码,执行头文件注入、ALink、`// as:create` 等 |
135
123
 
136
- ```
137
- // view 是创建时输入的代码键
138
- @view
139
- ```
124
+ ### create 详解
140
125
 
141
- ### share
142
-
143
- 共享本地代码片段:
126
+ **AI 模式(默认,与 Web 一致):**
144
127
 
145
128
  ```bash
146
- $ asd share
147
- # 或短别名
148
- $ asd s
149
- ```
150
-
151
- ### update
152
-
153
- 更新已创建的 snippet(按 trigger 查找,例如 `cover` 或 `@cover`):
154
-
155
- ```bash
156
- asd update <word> [key] [value]
157
- # 或短别名
158
- asd u <word> [key] [value]
159
- ```
160
-
161
- ### watch
162
-
163
- 在模块化项目中监听文件变更,识别 `autosnippet:*` 指令并执行:
164
- - 头文件注入(ObjC `#import` / Swift `import`)
165
- - ALink 跳转
166
- -(可选)SPM 依赖自动补齐(见下文)
129
+ # 从文件:选中含 // as:code 的文件,AI 分析代码并带头文件
130
+ asd create
167
131
 
168
- ```bash
169
- $ asd watch
170
- # 或短别名
171
- $ asd w
132
+ # 从剪贴板
133
+ asd create --clipboard
134
+ asd create -p --path Sources/MyMod/Foo.m # 带头文件解析
135
+ asd create --clipboard --lang swift
172
136
  ```
173
137
 
174
- 常用参数:
138
+ **传统模式(预置或交互):**
175
139
 
176
140
  ```bash
177
- # 只监听某个子目录/文件/后缀
178
- asd watch --path Services/Services/ASNetworkCheck --ext m,h
179
- asd watch --file ./Services/Services/ASNetworkCheck/Code/ASSimplePing.m
180
-
181
- # 降噪/退出时打印汇总
182
- asd watch --quiet --summary
141
+ asd create --no-ai
142
+ asd --preset preset.json create
183
143
  ```
184
144
 
185
- #### 追加头文件
186
-
187
- 开启监听后,如果想要追加头文件,请执行以下操作:
188
-
189
- 1. 向下箭头选择代码片段的 headerVersion
190
- 2. 按 `Enter` 键
191
- 3. `Command + S` 保存文件
192
-
193
- 在 1 秒内,头文件会自动添加到文件头部。
145
+ **文件内标记:**
194
146
 
195
- #### 新指令格式(重要)
196
-
197
- - ObjC / C / C++:注入头文件
198
-
199
- ```
200
- // as:include <ModuleName/Header.h> [optional/relative/path/Header.h]
147
+ ```text
148
+ // as:code
149
+ UIView *view = [[UIView alloc] init];
150
+ // as:code
201
151
  ```
202
152
 
203
- - Swift:注入 import
153
+ ### ai-scan(Candidates)
204
154
 
155
+ ```bash
156
+ asd ais <TargetName> # 扫描单个 Target
157
+ asd ais --all # 扫描全部
158
+ asd ais --batch 5 # 每批 5 个未扫描的 Target
205
159
  ```
206
- // as:import ModuleName
207
- ```
208
-
209
- #### 浏览器查看
210
160
 
211
- 开启监听后,如果想要在浏览器中查看模块的更多信息,请执行以下操作:
161
+ 结果写入 `Knowledge/.autosnippet/candidates.json`,在 Dashboard **Candidates** 页审核后入库或删除。
212
162
 
213
- 1. 输入 `@` 和 `模块键`
214
- 2. 输入 `#` 和 `ALink`
215
- 3. `Command + S` 保存文件
163
+ ### watch 监听
216
164
 
217
- 会自动跳转到浏览器打开创建时配置的链接,如果没有链接则打开 README.md 文件。
165
+ - **头文件注入**:在 Xcode 中选中 Snippet 的 headerVersion,保存后自动在文件头部插入对应 `#import`。
166
+ - **ALink**:输入 `#模块键#ALink` 并保存,可打开配置的链接或 README。
167
+ - **// as:create**:在源码中写一行 `// as:create`,复制要提炼的代码到剪贴板并保存;watch 会打开 Dashboard 并带当前文件路径,用剪贴板 + 路径创建(自动解析头文件)。
218
168
 
219
- 使用 ALink 示例:
169
+ ### 标记格式
220
170
 
221
- ```
222
- @view#ALink
223
- ```
171
+ - ObjC 头文件:`// as:include <ModuleName/Header.h> [相对路径]`
172
+ - Swift:`// as:import ModuleName`
224
173
 
225
- ## SPM 依赖自动补齐(可选)
174
+ ---
226
175
 
227
- `watch` 触发跨 target 引用时,AutoSnippet 可以(按配置)检查/补齐 `Package.swift` 里的依赖关系(target / product / package)。
176
+ ## 全局选项
228
177
 
229
- - 开关:通过环境变量控制
230
- - **`ASD_FIX_SPM_DEPS_MODE=off`**:只提示(默认行为)
231
- - **`ASD_FIX_SPM_DEPS_MODE=suggest`**:输出可复制的补丁建议
232
- - **`ASD_FIX_SPM_DEPS_MODE=fix`**:直接修改 `Package.swift` 自动补齐
178
+ - `--preset <path>`:预置输入 JSON(非交互/自动化)。
179
+ - `--yes`:非交互;缺必要输入则报错退出。
180
+ - 环境变量:`ASD_PRESET` / `ASD_TEST_PRESET` 指定预置路径。
233
181
 
234
- - 跨包 product/package 依赖需要映射文件(项目内维护):
235
- - `AutoSnippet.spmmap.json`
182
+ ---
236
183
 
237
- ## 其他
184
+ ## 其他命令
238
185
 
239
- ### 占位符快捷键
186
+ - `asd root`:在项目根创建/更新工作空间,聚合子模块 Snippet。
187
+ - `asd init`:在 SPM 模块目录创建模块工作空间。
188
+ - `asd setup`:等价于 `init` + `root`。
189
+ - `asd share`:共享本地 Snippet。
190
+ - `asd u <word> [key] [value]`:按 trigger 更新 Snippet 字段。
240
191
 
241
- 您也可以在代码片段中添加占位符,使用以下标签:
242
-
243
- ```
244
- <#placeholder#>
245
- ```
246
-
247
- 例如:上面的占位符可以写成:
248
-
249
- ```
250
- <#view: UIView#>
251
- ```
192
+ ---
252
193
 
253
- Xcode 会检测 `<#` 和 `#>` 标记,并将它们之间的文本作为占位符。我们可以通过按 `Tab` 键在多个占位符之间切换。
194
+ ## 占位符
254
195
 
255
- 当有多个相同的占位符时,使用 `⌥⌘E` 连续选择多个占位符:
196
+ Snippet 代码中使用 `<#placeholder#>`,Xcode 会识别为占位符,用 Tab 切换。多相同占位符可用 ⌥⌘E 连续选择后统一修改。
256
197
 
257
- 1. 选择一个占位符
258
- 2. `⌥⌘E` 选择下一个占位符,`⌥⇧⌘E` 选择上一个占位符
259
- 3. 输入修改的内容,所有选中的占位符都会被修改
198
+ ---
260
199
 
261
- ## 📝 贡献
200
+ ## 贡献
262
201
 
263
- 欢迎提交 Issues Pull Requests 来帮助改进 AutoSnippet!
202
+ 欢迎提交 Issue Pull Request。
264
203
 
265
- ## 📄 许可证
204
+ ## 许可证
266
205
 
267
- 本项目采用 MIT 许可证。详情请参阅 [LICENSE](LICENSE) 文件。
206
+ MIT,见 [LICENSE](LICENSE)