@mycodemap/mycodemap 0.5.1 → 0.5.2-beta.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/CHANGELOG.md +12 -0
- package/dist/cli/index.js +0 -0
- package/docs/PUBLISHING.md +41 -12
- package/docs/rules/pre-release-checklist.md +9 -4
- package/docs/rules/validation.md +2 -1
- package/package.json +1 -1
- package/scripts/pre-release-check.js +2 -2
- package/dist/ai/claude.d.ts +0 -38
- package/dist/ai/claude.d.ts.map +0 -1
- package/dist/ai/claude.js +0 -169
- package/dist/ai/claude.js.map +0 -1
- package/dist/ai/codex.d.ts +0 -38
- package/dist/ai/codex.d.ts.map +0 -1
- package/dist/ai/codex.js +0 -169
- package/dist/ai/codex.js.map +0 -1
- package/dist/ai/factory.d.ts +0 -48
- package/dist/ai/factory.d.ts.map +0 -1
- package/dist/ai/factory.js +0 -95
- package/dist/ai/factory.js.map +0 -1
- package/dist/ai/index.d.ts +0 -12
- package/dist/ai/index.d.ts.map +0 -1
- package/dist/ai/index.js +0 -29
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/provider.d.ts +0 -70
- package/dist/ai/provider.d.ts.map +0 -1
- package/dist/ai/provider.js +0 -31
- package/dist/ai/provider.js.map +0 -1
- package/dist/ai/subagent-caller.d.ts +0 -90
- package/dist/ai/subagent-caller.d.ts.map +0 -1
- package/dist/ai/subagent-caller.js +0 -280
- package/dist/ai/subagent-caller.js.map +0 -1
- package/dist/ai/types.d.ts +0 -70
- package/dist/ai/types.d.ts.map +0 -1
- package/dist/ai/types.js +0 -5
- package/dist/ai/types.js.map +0 -1
- package/dist/cli/commands/server.d.ts +0 -9
- package/dist/cli/commands/server.d.ts.map +0 -1
- package/dist/cli/commands/server.js +0 -65
- package/dist/cli/commands/server.js.map +0 -1
- package/dist/cli-new/commands/server.d.ts +0 -13
- package/dist/cli-new/commands/server.d.ts.map +0 -1
- package/dist/cli-new/commands/server.js +0 -90
- package/dist/cli-new/commands/server.js.map +0 -1
- package/dist/generator/ai-overview.d.ts +0 -51
- package/dist/generator/ai-overview.d.ts.map +0 -1
- package/dist/generator/ai-overview.js +0 -160
- package/dist/generator/ai-overview.js.map +0 -1
- package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +0 -41
- package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +0 -1
- package/dist/infrastructure/storage/adapters/Neo4jStorage.js +0 -162
- package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +0 -1
- package/dist/orchestrator/ai-feed-generator.d.ts +0 -210
- package/dist/orchestrator/ai-feed-generator.d.ts.map +0 -1
- package/dist/orchestrator/ai-feed-generator.js +0 -377
- package/dist/orchestrator/ai-feed-generator.js.map +0 -1
- package/docs/archive/test-report-symbol-search.md +0 -384
- package/docs/archive/test-scenario-4-complexity-analysis.md +0 -460
- package/docs/archive/test_report_scenario5.md +0 -615
- package/docs/archive/test_scenario_3_impact_analysis_report.md +0 -520
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.5.2-beta.1] - 2026-04-19 - Trusted Publishing Verification
|
|
6
|
+
|
|
7
|
+
### 🛠️ Infrastructure
|
|
8
|
+
|
|
9
|
+
- **ci**: 升级 `publish.yml` 到 `actions/checkout@v6`、`actions/setup-node@v6`、Node `24` 与 `npm@11.5.1`
|
|
10
|
+
- **release**: OIDC trusted publishing 路径移除显式 `--provenance`,保留 `NPM_TOKEN` fallback 以兼容 registry 偶发问题
|
|
11
|
+
|
|
12
|
+
### 📝 Documentation
|
|
13
|
+
|
|
14
|
+
- **release**: 同步 `llms.txt`、`AI_GUIDE.md`、`AI_DISCOVERY.md`、`ai-document-index.yaml` 到 `v0.5.2-beta.1`
|
|
15
|
+
- **changelog**: 新增 beta 验证版本条目,用于自动发布链路验证与 GitHub Release 说明
|
|
16
|
+
|
|
5
17
|
## [0.5.1] - 2026-04-19 - Rule Control Hardening & Release Sync
|
|
6
18
|
|
|
7
19
|
### 🚀 New Features
|
package/dist/cli/index.js
CHANGED
|
File without changes
|
package/docs/PUBLISHING.md
CHANGED
|
@@ -23,13 +23,12 @@ codemap ship / release.sh → 创建版本提交 → 推送 tag → GitHub Actio
|
|
|
23
23
|
- **Workflow Name**: `publish.yml`
|
|
24
24
|
- **GitHub Environment**: (留空)
|
|
25
25
|
|
|
26
|
-
2.
|
|
26
|
+
2. **默认使用 OIDC;需要时可保留 NPM_TOKEN fallback**
|
|
27
27
|
```bash
|
|
28
28
|
# 检查是否设置了 NPM_TOKEN
|
|
29
29
|
gh secret list | grep NPM_TOKEN
|
|
30
30
|
|
|
31
|
-
#
|
|
32
|
-
gh secret remove NPM_TOKEN
|
|
31
|
+
# 默认推荐留空;如果需要 fallback,确保它是 Automation token
|
|
33
32
|
```
|
|
34
33
|
|
|
35
34
|
3. **验证权限配置**
|
|
@@ -63,6 +62,8 @@ codemap ship --yes
|
|
|
63
62
|
|
|
64
63
|
`codemap ship` **不会在本地执行 `npm publish`**;它会创建版本提交、推送 tag,然后由 `.github/workflows/publish.yml` 完成真正的 OIDC 发布。
|
|
65
64
|
|
|
65
|
+
预发布版本(如 `0.5.2-beta.1`)会自动从版本号推导 npm dist-tag(如 `beta`);稳定版本默认发布到 `latest`。
|
|
66
|
+
|
|
66
67
|
### 方法 1: 使用发布脚本
|
|
67
68
|
|
|
68
69
|
```bash
|
|
@@ -200,17 +201,28 @@ jobs:
|
|
|
200
201
|
|
|
201
202
|
steps:
|
|
202
203
|
- name: Checkout code
|
|
203
|
-
uses: actions/checkout@
|
|
204
|
+
uses: actions/checkout@v6
|
|
204
205
|
with:
|
|
205
206
|
fetch-depth: 0 # 获取完整历史用于生成 changelog
|
|
206
207
|
|
|
207
208
|
- name: Setup Node.js
|
|
208
|
-
uses: actions/setup-node@
|
|
209
|
+
uses: actions/setup-node@v6
|
|
209
210
|
with:
|
|
210
|
-
node-version: '
|
|
211
|
+
node-version: '24'
|
|
211
212
|
cache: 'npm'
|
|
212
213
|
registry-url: 'https://registry.npmjs.org'
|
|
213
214
|
|
|
215
|
+
- name: Determine npm dist-tag
|
|
216
|
+
id: npm-tag
|
|
217
|
+
run: |
|
|
218
|
+
VERSION="${{ steps.package-version.outputs.version }}"
|
|
219
|
+
DIST_TAG="latest"
|
|
220
|
+
if [[ "$VERSION" == *-* ]]; then
|
|
221
|
+
DIST_TAG="${VERSION#*-}"
|
|
222
|
+
DIST_TAG="${DIST_TAG%%.*}"
|
|
223
|
+
fi
|
|
224
|
+
echo "dist-tag=$DIST_TAG" >> $GITHUB_OUTPUT
|
|
225
|
+
|
|
214
226
|
- name: Get version from package.json
|
|
215
227
|
id: package-version
|
|
216
228
|
run: |
|
|
@@ -259,10 +271,18 @@ jobs:
|
|
|
259
271
|
- name: Validate package contents
|
|
260
272
|
run: npm run validate-pack
|
|
261
273
|
|
|
262
|
-
# 使用 OIDC Trusted Publishing 发布
|
|
263
|
-
# OIDC 通过 id-token: write 权限自动获取认证,不需要 NPM_TOKEN
|
|
274
|
+
# 使用 OIDC Trusted Publishing 或 NPM_TOKEN fallback 发布
|
|
264
275
|
- name: Publish to NPM
|
|
265
|
-
|
|
276
|
+
env:
|
|
277
|
+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
278
|
+
run: |
|
|
279
|
+
DIST_TAG="${{ steps.npm-tag.outputs.dist-tag }}"
|
|
280
|
+
if [ -n "$NPM_TOKEN" ]; then
|
|
281
|
+
export NODE_AUTH_TOKEN="$NPM_TOKEN"
|
|
282
|
+
npx npm@11.5.1 publish --access public --tag "$DIST_TAG" --provenance --registry https://registry.npmjs.org
|
|
283
|
+
else
|
|
284
|
+
npx npm@11.5.1 publish --access public --tag "$DIST_TAG" --registry https://registry.npmjs.org
|
|
285
|
+
fi
|
|
266
286
|
|
|
267
287
|
- name: Generate Release Notes
|
|
268
288
|
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
@@ -350,13 +370,13 @@ npm ERR! 403 403 Forbidden - PUT https://registry.npmjs.org/@mycodemap%2fmycodem
|
|
|
350
370
|
**原因**:
|
|
351
371
|
1. NPM 端未正确配置 Trusted Publisher
|
|
352
372
|
2. `id-token: write` 权限未设置
|
|
353
|
-
3.
|
|
373
|
+
3. workflow 没有为 prerelease 显式传 `--tag`(例如 `0.5.2-beta.1` 需要 `--tag beta`)
|
|
354
374
|
|
|
355
375
|
**解决**:
|
|
356
376
|
1. 检查 NPM 配置: https://www.npmjs.com/package/@mycodemap/mycodemap/access
|
|
357
377
|
2. 确保 workflow 中有 `id-token: write` 权限
|
|
358
|
-
3.
|
|
359
|
-
4.
|
|
378
|
+
3. 确保没有设置错误的 `NODE_AUTH_TOKEN` 环境变量
|
|
379
|
+
4. 如果配置了 `NPM_TOKEN`,确保它是 Automation token
|
|
360
380
|
|
|
361
381
|
### 发布失败: "ENEEDAUTH"
|
|
362
382
|
|
|
@@ -393,6 +413,15 @@ npm ERR! 403 403 Forbidden - PUT https://registry.npmjs.org/@mycodemap%2fmycodem
|
|
|
393
413
|
1. 检查 package.json 中的版本号
|
|
394
414
|
2. npm 版本号不可重复,需要递增
|
|
395
415
|
|
|
416
|
+
### 发布失败: "You must specify a tag using --tag"
|
|
417
|
+
|
|
418
|
+
**原因**: 发布的是 prerelease 版本,但 `npm publish` 没有显式传 dist-tag
|
|
419
|
+
|
|
420
|
+
**解决**:
|
|
421
|
+
1. 确认 workflow 会从版本号推导 dist-tag
|
|
422
|
+
2. `0.5.2-beta.1` 应发布到 `beta`
|
|
423
|
+
3. `0.5.2-rc.1` 应发布到 `rc`
|
|
424
|
+
|
|
396
425
|
### GitHub Actions 未触发
|
|
397
426
|
|
|
398
427
|
**原因**: tag 格式不正确或 workflow 配置错误
|
|
@@ -78,6 +78,7 @@
|
|
|
78
78
|
- 所有文件版本号必须完全一致
|
|
79
79
|
- 必须符合语义化版本规范 (`x.x.x`)
|
|
80
80
|
- 预发布版本可包含后缀 (`0.2.0-beta.1`)
|
|
81
|
+
- 预发布版本发布到 npm 时必须显式传 dist-tag(例如 `0.2.0-beta.1 -> --tag beta`)
|
|
81
82
|
|
|
82
83
|
**版本同步清单**:
|
|
83
84
|
|
|
@@ -202,8 +203,8 @@ git push origin main --tags
|
|
|
202
203
|
- Workflow Name: `publish.yml`
|
|
203
204
|
|
|
204
205
|
2. **GitHub Secrets 检查**:
|
|
205
|
-
- [ ]
|
|
206
|
-
- [ ] 如果需要
|
|
206
|
+
- [ ] 默认可不设置 `NPM_TOKEN`,优先走 OIDC Trusted Publishing
|
|
207
|
+
- [ ] 如果需要 token fallback,使用 `NPM_TOKEN` 并确保是 **Automation** 类型
|
|
207
208
|
|
|
208
209
|
3. **Workflow 权限配置**:
|
|
209
210
|
```yaml
|
|
@@ -214,9 +215,13 @@ git push origin main --tags
|
|
|
214
215
|
|
|
215
216
|
4. **发布命令**:
|
|
216
217
|
```yaml
|
|
217
|
-
#
|
|
218
|
+
# 正确:stable 版本发布到 latest
|
|
218
219
|
- name: Publish to NPM
|
|
219
|
-
run: npm publish --access public --
|
|
220
|
+
run: npm publish --access public --tag latest
|
|
221
|
+
|
|
222
|
+
# 正确:prerelease 版本显式发布到 preid 对应 tag
|
|
223
|
+
- name: Publish to NPM
|
|
224
|
+
run: npm publish --access public --tag beta
|
|
220
225
|
|
|
221
226
|
# 错误:设置 NODE_AUTH_TOKEN 会干扰 OIDC
|
|
222
227
|
# env:
|
package/docs/rules/validation.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
| 改 repo-local 规则控制脚本或 hook 路由 | `python3 scripts/validate-rules.py code --report-only` | 先看 contract,不先硬阻断 |
|
|
11
11
|
| 改 CLI 文档入口或统一 guardrail | `node dist/cli/index.js ci check-docs-sync` | 同时验证 docs guardrail 与 analyze generated block |
|
|
12
12
|
| 改实现代码 | `npm run typecheck` → `npm run lint` → `npm test` | 从最小相关验证扩到基础回归 |
|
|
13
|
-
| 改发布/打包边界 | `npm run build` → `npm run validate-pack` |
|
|
13
|
+
| 改发布/打包边界 | `npm run docs:check:pre-release` → `npm run build` → `npm run validate-pack` | 先锁版本/发布契约,再确认 shipped artifact 仍成立 |
|
|
14
14
|
|
|
15
15
|
## Repo-local rule validator
|
|
16
16
|
|
|
@@ -73,6 +73,7 @@
|
|
|
73
73
|
| 失败模式 | 先看哪里 | 恢复方式 |
|
|
74
74
|
|---|---|---|
|
|
75
75
|
| `schema / README / AI 文档没同步` | `npm run docs:check` | 先修文档真相,再重跑 |
|
|
76
|
+
| prerelease 发布卡在 npm publish | `.github/workflows/publish.yml` / `package.json version` | 确认 prerelease 版本显式传了 `--tag <preid>`;例如 `0.5.2-beta.1` 必须走 `--tag beta` |
|
|
76
77
|
| 文档继续把历史设计写成当前现实 | `npm run docs:check` | 把 shipped baseline 与 future intent 分开 |
|
|
77
78
|
| 旧的 `neo4j` / `kuzudb` 配置已经不受支持,但文档还把它写成正式 backend | `README.md` / `AI_GUIDE.md` / schema | 改回 `filesystem` / `sqlite` / `memory` / `auto` 真实 contract |
|
|
78
79
|
| `storage.type="sqlite"` 运行时不满足要求 | Node.js `>=20`、`better-sqlite3`、`STORAGE_BACKEND_MIGRATED`、`SQLITE_NOT_AVAILABLE` | 修运行时或改配置,不要静默 fallback |
|
package/package.json
CHANGED
|
@@ -110,8 +110,8 @@ function extractVersionFromText(content) {
|
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
function extractVersionFromYAML(content) {
|
|
113
|
-
// 匹配 YAML 中的 version: "x.x.x"
|
|
114
|
-
const match = content.match(/version[:\s]+["']?(\d+\.\d+\.\d+)["']?/i);
|
|
113
|
+
// 匹配 YAML 中的 version: "x.x.x"、version: x.x.x 或 prerelease 版本
|
|
114
|
+
const match = content.match(/version[:\s]+["']?(\d+\.\d+\.\d+(?:-[\w.]+)?)["']?/i);
|
|
115
115
|
return match ? match[1] : null;
|
|
116
116
|
}
|
|
117
117
|
|
package/dist/ai/claude.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { AIProvider, type AIProviderConfig, type AIResponse } from './provider.js';
|
|
2
|
-
import type { CodeMap } from '../types/index.js';
|
|
3
|
-
/**
|
|
4
|
-
* Claude Provider 配置
|
|
5
|
-
*/
|
|
6
|
-
export interface ClaudeProviderConfig extends AIProviderConfig {
|
|
7
|
-
/** CLI 路径,默认 claude */
|
|
8
|
-
cliPath?: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Claude Provider - 通过 CLI 调用 Claude
|
|
12
|
-
*/
|
|
13
|
-
export declare class ClaudeProvider extends AIProvider {
|
|
14
|
-
readonly name: "claude";
|
|
15
|
-
private cliPath;
|
|
16
|
-
constructor(config?: ClaudeProviderConfig);
|
|
17
|
-
/**
|
|
18
|
-
* 执行 AI 推理
|
|
19
|
-
*/
|
|
20
|
-
execute(prompt: string, context?: CodeMap): Promise<AIResponse>;
|
|
21
|
-
/**
|
|
22
|
-
* 检查 Claude CLI 是否可用
|
|
23
|
-
*/
|
|
24
|
-
isAvailable(): Promise<boolean>;
|
|
25
|
-
/**
|
|
26
|
-
* 构建提示词
|
|
27
|
-
*/
|
|
28
|
-
private buildPrompt;
|
|
29
|
-
/**
|
|
30
|
-
* 总结 CodeMap 上下文
|
|
31
|
-
*/
|
|
32
|
-
private summarizeContext;
|
|
33
|
-
/**
|
|
34
|
-
* 解析 Claude CLI JSON 响应
|
|
35
|
-
*/
|
|
36
|
-
private parseResponse;
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=claude.d.ts.map
|
package/dist/ai/claude.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/ai/claude.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAWjD;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,SAAgB,IAAI,EAAG,QAAQ,CAAU;IACzC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,GAAE,oBAAyB;IAK7C;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAoErE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAsBrC;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACH,OAAO,CAAC,aAAa;CA6BtB"}
|
package/dist/ai/claude.js
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
// ============================================
|
|
2
|
-
// Claude CLI Provider 实现
|
|
3
|
-
// ============================================
|
|
4
|
-
import { spawn } from 'child_process';
|
|
5
|
-
import { AIProvider } from './provider.js';
|
|
6
|
-
/**
|
|
7
|
-
* Claude Provider - 通过 CLI 调用 Claude
|
|
8
|
-
*/
|
|
9
|
-
export class ClaudeProvider extends AIProvider {
|
|
10
|
-
name = 'claude';
|
|
11
|
-
cliPath;
|
|
12
|
-
constructor(config = {}) {
|
|
13
|
-
super(config);
|
|
14
|
-
this.cliPath = config.cliPath || 'claude';
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* 执行 AI 推理
|
|
18
|
-
*/
|
|
19
|
-
async execute(prompt, context) {
|
|
20
|
-
const timeout = this.config.timeout || 60000;
|
|
21
|
-
// 构建包含上下文的完整提示词
|
|
22
|
-
const fullPrompt = this.buildPrompt(prompt, context);
|
|
23
|
-
return new Promise((resolve, reject) => {
|
|
24
|
-
const args = [
|
|
25
|
-
'-p',
|
|
26
|
-
'--output-format', 'json',
|
|
27
|
-
'--dangerously-skip-permissions'
|
|
28
|
-
];
|
|
29
|
-
let stdout = '';
|
|
30
|
-
let stderr = '';
|
|
31
|
-
let killed = false;
|
|
32
|
-
const proc = spawn(this.cliPath, args, {
|
|
33
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
34
|
-
timeout
|
|
35
|
-
});
|
|
36
|
-
// 超时处理
|
|
37
|
-
const timeoutId = setTimeout(() => {
|
|
38
|
-
killed = true;
|
|
39
|
-
proc.kill('SIGTERM');
|
|
40
|
-
reject(new Error(`Claude 执行超时(${timeout / 1000}秒)`));
|
|
41
|
-
}, timeout);
|
|
42
|
-
proc.stdout.on('data', (data) => {
|
|
43
|
-
stdout += data.toString();
|
|
44
|
-
});
|
|
45
|
-
proc.stderr.on('data', (data) => {
|
|
46
|
-
stderr += data.toString();
|
|
47
|
-
});
|
|
48
|
-
proc.on('close', (code) => {
|
|
49
|
-
clearTimeout(timeoutId);
|
|
50
|
-
if (killed)
|
|
51
|
-
return;
|
|
52
|
-
if (code !== 0 && code !== null) {
|
|
53
|
-
reject(new Error(`Claude CLI 错误: ${stderr || `exit code ${code}`}`));
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
try {
|
|
57
|
-
const response = this.parseResponse(stdout);
|
|
58
|
-
resolve(response);
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
reject(new Error(`解析 Claude 响应失败: ${error instanceof Error ? error.message : String(error)}`));
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
proc.on('error', (error) => {
|
|
65
|
-
clearTimeout(timeoutId);
|
|
66
|
-
if (!killed) {
|
|
67
|
-
reject(new Error(`Claude CLI 执行失败: ${error.message}`));
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
// 发送提示词
|
|
71
|
-
proc.stdin.write(fullPrompt);
|
|
72
|
-
proc.stdin.end();
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* 检查 Claude CLI 是否可用
|
|
77
|
-
*/
|
|
78
|
-
async isAvailable() {
|
|
79
|
-
return new Promise((resolve) => {
|
|
80
|
-
const proc = spawn(this.cliPath, ['--version'], {
|
|
81
|
-
stdio: 'ignore'
|
|
82
|
-
});
|
|
83
|
-
proc.on('close', (code) => {
|
|
84
|
-
resolve(code === 0);
|
|
85
|
-
});
|
|
86
|
-
proc.on('error', () => {
|
|
87
|
-
resolve(false);
|
|
88
|
-
});
|
|
89
|
-
// 2 秒超时
|
|
90
|
-
setTimeout(() => {
|
|
91
|
-
proc.kill();
|
|
92
|
-
resolve(false);
|
|
93
|
-
}, 2000);
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* 构建提示词
|
|
98
|
-
*/
|
|
99
|
-
buildPrompt(prompt, context) {
|
|
100
|
-
let fullPrompt = prompt;
|
|
101
|
-
if (context) {
|
|
102
|
-
const contextInfo = this.summarizeContext(context);
|
|
103
|
-
fullPrompt = `${contextInfo}\n\n---\n\n${prompt}`;
|
|
104
|
-
}
|
|
105
|
-
return fullPrompt;
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* 总结 CodeMap 上下文
|
|
109
|
-
*/
|
|
110
|
-
summarizeContext(codeMap) {
|
|
111
|
-
const lines = [];
|
|
112
|
-
lines.push('# Project Context');
|
|
113
|
-
lines.push('');
|
|
114
|
-
lines.push(`Project: ${codeMap.project.name}`);
|
|
115
|
-
lines.push(`Total Files: ${codeMap.summary.totalFiles}`);
|
|
116
|
-
lines.push(`Total Modules: ${codeMap.summary.totalModules}`);
|
|
117
|
-
lines.push('');
|
|
118
|
-
// 入口点
|
|
119
|
-
const entryPoints = codeMap.modules.filter(m => {
|
|
120
|
-
const basename = require('path').basename(m.path);
|
|
121
|
-
return basename === 'index.ts' || basename === 'main.ts' || basename === 'app.ts';
|
|
122
|
-
});
|
|
123
|
-
if (entryPoints.length > 0) {
|
|
124
|
-
lines.push('## Entry Points');
|
|
125
|
-
for (const ep of entryPoints.slice(0, 5)) {
|
|
126
|
-
lines.push(`- ${ep.path}`);
|
|
127
|
-
}
|
|
128
|
-
lines.push('');
|
|
129
|
-
}
|
|
130
|
-
// 模块列表
|
|
131
|
-
lines.push('## Modules');
|
|
132
|
-
for (const mod of codeMap.modules.slice(0, 20)) {
|
|
133
|
-
const exports = mod.exports.map(e => e.name).join(', ');
|
|
134
|
-
lines.push(`- ${mod.path}: ${exports || '(no exports)'}`);
|
|
135
|
-
}
|
|
136
|
-
if (codeMap.modules.length > 20) {
|
|
137
|
-
lines.push(`- ... and ${codeMap.modules.length - 20} more`);
|
|
138
|
-
}
|
|
139
|
-
return lines.join('\n');
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* 解析 Claude CLI JSON 响应
|
|
143
|
-
*/
|
|
144
|
-
parseResponse(stdout) {
|
|
145
|
-
// Claude 可能输出多行 JSON,需要找到有效的 JSON
|
|
146
|
-
const lines = stdout.trim().split('\n');
|
|
147
|
-
let jsonStr = '';
|
|
148
|
-
// 从后往前找有效的 JSON 对象
|
|
149
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
150
|
-
const line = lines[i].trim();
|
|
151
|
-
if (line.startsWith('{') && line.endsWith('}')) {
|
|
152
|
-
jsonStr = line;
|
|
153
|
-
break;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
if (!jsonStr) {
|
|
157
|
-
// 如果没有 JSON,直接返回原始输出
|
|
158
|
-
return { content: stdout.trim() };
|
|
159
|
-
}
|
|
160
|
-
const parsed = JSON.parse(jsonStr);
|
|
161
|
-
if (parsed.error) {
|
|
162
|
-
throw new Error(parsed.error);
|
|
163
|
-
}
|
|
164
|
-
return {
|
|
165
|
-
content: parsed.result || stdout.trim()
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
//# sourceMappingURL=claude.js.map
|
package/dist/ai/claude.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/ai/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/codex.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { AIProvider, type AIProviderConfig, type AIResponse } from './provider.js';
|
|
2
|
-
import type { CodeMap } from '../types/index.js';
|
|
3
|
-
/**
|
|
4
|
-
* Codex Provider 配置
|
|
5
|
-
*/
|
|
6
|
-
export interface CodexProviderConfig extends AIProviderConfig {
|
|
7
|
-
/** CLI 路径,默认 codex */
|
|
8
|
-
cliPath?: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Codex Provider - 通过 CLI 调用 Codex
|
|
12
|
-
*/
|
|
13
|
-
export declare class CodexProvider extends AIProvider {
|
|
14
|
-
readonly name: "codex";
|
|
15
|
-
private cliPath;
|
|
16
|
-
constructor(config?: CodexProviderConfig);
|
|
17
|
-
/**
|
|
18
|
-
* 执行 AI 推理
|
|
19
|
-
*/
|
|
20
|
-
execute(prompt: string, context?: CodeMap): Promise<AIResponse>;
|
|
21
|
-
/**
|
|
22
|
-
* 检查 Codex CLI 是否可用
|
|
23
|
-
*/
|
|
24
|
-
isAvailable(): Promise<boolean>;
|
|
25
|
-
/**
|
|
26
|
-
* 构建提示词
|
|
27
|
-
*/
|
|
28
|
-
private buildPrompt;
|
|
29
|
-
/**
|
|
30
|
-
* 总结 CodeMap 上下文
|
|
31
|
-
*/
|
|
32
|
-
private summarizeContext;
|
|
33
|
-
/**
|
|
34
|
-
* 解析 Codex CLI JSON 响应
|
|
35
|
-
*/
|
|
36
|
-
private parseResponse;
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=codex.d.ts.map
|
package/dist/ai/codex.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/ai/codex.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C,SAAgB,IAAI,EAAG,OAAO,CAAU;IACxC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,GAAE,mBAAwB;IAK5C;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAiErE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAsBrC;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACH,OAAO,CAAC,aAAa;CA4BtB"}
|
package/dist/ai/codex.js
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
// ============================================
|
|
2
|
-
// Codex CLI Provider 实现
|
|
3
|
-
// ============================================
|
|
4
|
-
import { spawn } from 'child_process';
|
|
5
|
-
import { AIProvider } from './provider.js';
|
|
6
|
-
/**
|
|
7
|
-
* Codex Provider - 通过 CLI 调用 Codex
|
|
8
|
-
*/
|
|
9
|
-
export class CodexProvider extends AIProvider {
|
|
10
|
-
name = 'codex';
|
|
11
|
-
cliPath;
|
|
12
|
-
constructor(config = {}) {
|
|
13
|
-
super(config);
|
|
14
|
-
this.cliPath = config.cliPath || 'codex';
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* 执行 AI 推理
|
|
18
|
-
*/
|
|
19
|
-
async execute(prompt, context) {
|
|
20
|
-
const timeout = this.config.timeout || 60000;
|
|
21
|
-
// 构建包含上下文的完整提示词
|
|
22
|
-
const fullPrompt = this.buildPrompt(prompt, context);
|
|
23
|
-
return new Promise((resolve, reject) => {
|
|
24
|
-
// Codex exec 使用位置参数传递 prompt
|
|
25
|
-
const args = [
|
|
26
|
-
'exec',
|
|
27
|
-
'--dangerously-bypass-approvals-and-sandbox',
|
|
28
|
-
fullPrompt
|
|
29
|
-
];
|
|
30
|
-
let stdout = '';
|
|
31
|
-
let stderr = '';
|
|
32
|
-
let killed = false;
|
|
33
|
-
const proc = spawn(this.cliPath, args, {
|
|
34
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
35
|
-
timeout
|
|
36
|
-
});
|
|
37
|
-
// 超时处理
|
|
38
|
-
const timeoutId = setTimeout(() => {
|
|
39
|
-
killed = true;
|
|
40
|
-
proc.kill('SIGTERM');
|
|
41
|
-
reject(new Error(`Codex 执行超时(${timeout / 1000}秒)`));
|
|
42
|
-
}, timeout);
|
|
43
|
-
proc.stdout.on('data', (data) => {
|
|
44
|
-
stdout += data.toString();
|
|
45
|
-
});
|
|
46
|
-
proc.stderr.on('data', (data) => {
|
|
47
|
-
stderr += data.toString();
|
|
48
|
-
});
|
|
49
|
-
proc.on('close', (code) => {
|
|
50
|
-
clearTimeout(timeoutId);
|
|
51
|
-
if (killed)
|
|
52
|
-
return;
|
|
53
|
-
if (code !== 0 && code !== null) {
|
|
54
|
-
reject(new Error(`Codex CLI 错误: ${stderr || `exit code ${code}`}`));
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
try {
|
|
58
|
-
const response = this.parseResponse(stdout);
|
|
59
|
-
resolve(response);
|
|
60
|
-
}
|
|
61
|
-
catch (error) {
|
|
62
|
-
reject(new Error(`解析 Codex 响应失败: ${error instanceof Error ? error.message : String(error)}`));
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
proc.on('error', (error) => {
|
|
66
|
-
clearTimeout(timeoutId);
|
|
67
|
-
if (!killed) {
|
|
68
|
-
reject(new Error(`Codex CLI 执行失败: ${error.message}`));
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* 检查 Codex CLI 是否可用
|
|
75
|
-
*/
|
|
76
|
-
async isAvailable() {
|
|
77
|
-
return new Promise((resolve) => {
|
|
78
|
-
const proc = spawn(this.cliPath, ['--version'], {
|
|
79
|
-
stdio: 'ignore'
|
|
80
|
-
});
|
|
81
|
-
proc.on('close', (code) => {
|
|
82
|
-
resolve(code === 0);
|
|
83
|
-
});
|
|
84
|
-
proc.on('error', () => {
|
|
85
|
-
resolve(false);
|
|
86
|
-
});
|
|
87
|
-
// 2 秒超时
|
|
88
|
-
setTimeout(() => {
|
|
89
|
-
proc.kill();
|
|
90
|
-
resolve(false);
|
|
91
|
-
}, 2000);
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* 构建提示词
|
|
96
|
-
*/
|
|
97
|
-
buildPrompt(prompt, context) {
|
|
98
|
-
let fullPrompt = prompt;
|
|
99
|
-
if (context) {
|
|
100
|
-
const contextInfo = this.summarizeContext(context);
|
|
101
|
-
fullPrompt = `${contextInfo}\n\n---\n\n${prompt}`;
|
|
102
|
-
}
|
|
103
|
-
return fullPrompt;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* 总结 CodeMap 上下文
|
|
107
|
-
*/
|
|
108
|
-
summarizeContext(codeMap) {
|
|
109
|
-
const lines = [];
|
|
110
|
-
lines.push('# Project Context');
|
|
111
|
-
lines.push('');
|
|
112
|
-
lines.push(`Project: ${codeMap.project.name}`);
|
|
113
|
-
lines.push(`Total Files: ${codeMap.summary.totalFiles}`);
|
|
114
|
-
lines.push(`Total Modules: ${codeMap.summary.totalModules}`);
|
|
115
|
-
lines.push('');
|
|
116
|
-
// 入口点
|
|
117
|
-
const entryPoints = codeMap.modules.filter(m => {
|
|
118
|
-
const basename = require('path').basename(m.path);
|
|
119
|
-
return basename === 'index.ts' || basename === 'main.ts' || basename === 'app.ts';
|
|
120
|
-
});
|
|
121
|
-
if (entryPoints.length > 0) {
|
|
122
|
-
lines.push('## Entry Points');
|
|
123
|
-
for (const ep of entryPoints.slice(0, 5)) {
|
|
124
|
-
lines.push(`- ${ep.path}`);
|
|
125
|
-
}
|
|
126
|
-
lines.push('');
|
|
127
|
-
}
|
|
128
|
-
// 模块列表
|
|
129
|
-
lines.push('## Modules');
|
|
130
|
-
for (const mod of codeMap.modules.slice(0, 20)) {
|
|
131
|
-
const exports = mod.exports.map(e => e.name).join(', ');
|
|
132
|
-
lines.push(`- ${mod.path}: ${exports || '(no exports)'}`);
|
|
133
|
-
}
|
|
134
|
-
if (codeMap.modules.length > 20) {
|
|
135
|
-
lines.push(`- ... and ${codeMap.modules.length - 20} more`);
|
|
136
|
-
}
|
|
137
|
-
return lines.join('\n');
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* 解析 Codex CLI JSON 响应
|
|
141
|
-
*/
|
|
142
|
-
parseResponse(stdout) {
|
|
143
|
-
// 尝试解析 JSON
|
|
144
|
-
const trimmed = stdout.trim();
|
|
145
|
-
try {
|
|
146
|
-
const parsed = JSON.parse(trimmed);
|
|
147
|
-
// 处理不同的响应格式
|
|
148
|
-
if (parsed.result) {
|
|
149
|
-
return { content: parsed.result };
|
|
150
|
-
}
|
|
151
|
-
if (parsed.output) {
|
|
152
|
-
return { content: parsed.output };
|
|
153
|
-
}
|
|
154
|
-
if (parsed.response) {
|
|
155
|
-
return { content: parsed.response };
|
|
156
|
-
}
|
|
157
|
-
if (parsed.message) {
|
|
158
|
-
return { content: parsed.message };
|
|
159
|
-
}
|
|
160
|
-
// 如果解析成功但没有已知字段,返回 stringify 后的内容
|
|
161
|
-
return { content: JSON.stringify(parsed, null, 2) };
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
// 如果不是 JSON,直接返回原始内容
|
|
165
|
-
return { content: trimmed };
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
//# sourceMappingURL=codex.js.map
|
package/dist/ai/codex.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/ai/codex.ts"],"names":[],"mappings":"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"}
|