add-coder 0.3.2 → 0.3.3
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "add-coder",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "[codein2027](https://github.com/xiaomingming92/codein2027) - A complete scaffolding for building the ADD programming paradigm, the implementation layer for AI code governance. Core principle: Audit as Infrastructure. Breaks the black-box programming process and cross-session amnesia, evolving programming paradigms into an auditable, traceable, and convergent new era. npx-ready.\n\n[codein2027](https://github.com/xiaomingming92/codein2027) 快速构建 ADD 编程范式的完整脚手架——AI 代码治理的落地方案。以「审计即基础设施」为核心,彻底打破编程过程黑盒与跨轮失忆,让编程范式进化为可审计、可追溯、可收敛的新时代。npx 即用,人人可体验。",
|
|
6
6
|
"repository": {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_version": "0.3.
|
|
2
|
+
"_version": "0.3.3",
|
|
3
3
|
"adapters/claude/hooks/doc-format-guard.sh": "ec59ad3f",
|
|
4
4
|
"adapters/claude/hooks/lib/common.sh": "db321ef6",
|
|
5
5
|
"adapters/claude/hooks/lib/context-inject.sh": "4132f203",
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
"adapters/vscode/hooks/subagent-guard.sh": "5d0ea685",
|
|
134
134
|
"adapters/vscode/hooks/subagent-stop.sh": "dd19f712",
|
|
135
135
|
"adapters/vscode/launch.json": "f2b79855",
|
|
136
|
-
"adapters/vscode/settings.json": "
|
|
136
|
+
"adapters/vscode/settings.json": "7cabd00e",
|
|
137
137
|
"adapters/vscode/tasks.json": "654d7fbd",
|
|
138
138
|
"core/agents/add-flow-guardian.md": "697d422f",
|
|
139
139
|
"core/agents/add-orchestrator.md": "0d555e99",
|
|
@@ -193,9 +193,10 @@
|
|
|
193
193
|
"core/scripts/mcp-server/resources/round-task.ts": "104a0d74",
|
|
194
194
|
"core/scripts/mcp-server/sampling/index.ts": "7ee26d92",
|
|
195
195
|
"core/scripts/mcp-server/sampling/review.ts": "5db7a8df",
|
|
196
|
-
"core/scripts/mcp-server/shared/env.ts": "
|
|
196
|
+
"core/scripts/mcp-server/shared/env.ts": "f3f4f841",
|
|
197
197
|
"core/scripts/mcp-server/shared/fs.ts": "97257db9",
|
|
198
198
|
"core/scripts/mcp-server/shared/prisma.ts": "5133f329",
|
|
199
|
+
"core/scripts/mcp-server/shared/project-root-strategy.ts": "38bfd20e",
|
|
199
200
|
"core/scripts/mcp-server/shared/response.ts": "f7806b67",
|
|
200
201
|
"core/scripts/mcp-server/tasks/index.ts": "c040eb75",
|
|
201
202
|
"core/scripts/mcp-server/tasks/runner.ts": "d84bd35d",
|
|
@@ -2,11 +2,14 @@ import dotenv from "dotenv"
|
|
|
2
2
|
import { dirname, resolve, basename } from "path"
|
|
3
3
|
import { fileURLToPath } from "url"
|
|
4
4
|
import { existsSync } from "fs"
|
|
5
|
+
import { resolveProjectRoot } from "./project-root-strategy.js"
|
|
5
6
|
|
|
6
7
|
const __filename = fileURLToPath(import.meta.url)
|
|
7
8
|
const __dirname = dirname(__filename)
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
// 裁决层驱动:PROJECT_ROOT 推导由 project-root-rules.toml → project-root-strategy.ts 定义
|
|
11
|
+
export const PROJECT_ROOT = resolveProjectRoot(__dirname)
|
|
12
|
+
|
|
10
13
|
export const MAGIC_DIR = process.env.MAGIC_DIR || basename(resolve(__dirname, "..", "..", ".."))
|
|
11
14
|
export const PROJECT_ID = basename(PROJECT_ROOT)
|
|
12
15
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// ⚠️ 由 caijuehub/transcribe.ts 自动生成,不要手动编辑!
|
|
2
|
+
// 改 *-rules.toml 后重新运行: add-coder generate
|
|
3
|
+
|
|
4
|
+
// >>> CAIJUE GENERATED START >>>
|
|
5
|
+
export const PROJECT_ROOT_PRIORITY = ["env_var", "dirname_fallback", "cwd_fallback"] as const;
|
|
6
|
+
export type ProjectRootTier = (typeof PROJECT_ROOT_PRIORITY)[number];
|
|
7
|
+
// <<< CAIJUE GENERATED END <<<
|
|
8
|
+
// >>> USER CODE >>>
|
|
9
|
+
import { resolve, dirname } from "path"
|
|
10
|
+
import { existsSync } from "fs"
|
|
11
|
+
|
|
12
|
+
function findProjectRoot(fromDir: string): string {
|
|
13
|
+
let d = resolve(fromDir)
|
|
14
|
+
for (let i = 0; i < 10; i++) {
|
|
15
|
+
if (existsSync(resolve(d, "package.json"))) return d
|
|
16
|
+
const parent = dirname(d)
|
|
17
|
+
if (parent === d) break
|
|
18
|
+
d = parent
|
|
19
|
+
}
|
|
20
|
+
return resolve(fromDir, "..", "..", "..", "..")
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** 裁决层消费:按 PROJECT_ROOT_PRIORITY 顺序逐层尝试。 */
|
|
24
|
+
export function resolveProjectRoot(__dirname: string): string {
|
|
25
|
+
const resolvers: Record<string, () => string> = {
|
|
26
|
+
env_var: () => process.env.PROJECT_ROOT || "",
|
|
27
|
+
dirname_fallback: () => resolve(__dirname, "..", "..", "..", ".."),
|
|
28
|
+
cwd_fallback: () => findProjectRoot(process.cwd()),
|
|
29
|
+
}
|
|
30
|
+
for (const tier of PROJECT_ROOT_PRIORITY) {
|
|
31
|
+
const r = resolvers[tier]?.()
|
|
32
|
+
if (r && r !== "/" && existsSync(resolve(r, ".env.development"))) return r
|
|
33
|
+
}
|
|
34
|
+
return resolve(__dirname, "..", "..", "..", "..")
|
|
35
|
+
}
|
|
36
|
+
// <<< USER CODE <<<
|