@accelerator-mzq/forge 1.4.0 → 3.0.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/dist/cli/commands/archive.d.ts +73 -10
- package/dist/cli/commands/archive.d.ts.map +1 -1
- package/dist/cli/commands/archive.js +362 -89
- package/dist/cli/commands/archive.js.map +1 -1
- package/dist/cli/commands/legacy-bridge.d.ts +110 -0
- package/dist/cli/commands/legacy-bridge.d.ts.map +1 -1
- package/dist/cli/commands/legacy-bridge.js +1058 -438
- package/dist/cli/commands/legacy-bridge.js.map +1 -1
- package/dist/cli/commands/pause-capture.d.ts +24 -0
- package/dist/cli/commands/pause-capture.d.ts.map +1 -0
- package/dist/cli/commands/pause-capture.js +87 -0
- package/dist/cli/commands/pause-capture.js.map +1 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/ack-log.d.ts +17 -1
- package/dist/core/ack-log.d.ts.map +1 -1
- package/dist/core/ack-log.js.map +1 -1
- package/dist/core/archive/ack-log-consistency.d.ts.map +1 -1
- package/dist/core/archive/ack-log-consistency.js +2 -1
- package/dist/core/archive/ack-log-consistency.js.map +1 -1
- package/dist/core/archive/pause-decisions-fence.d.ts +24 -1
- package/dist/core/archive/pause-decisions-fence.d.ts.map +1 -1
- package/dist/core/archive/pause-decisions-fence.js +260 -46
- package/dist/core/archive/pause-decisions-fence.js.map +1 -1
- package/dist/core/backlog/assets/backlog-readme.md +4 -2
- package/dist/core/backlog/index.d.ts +1 -1
- package/dist/core/backlog/index.d.ts.map +1 -1
- package/dist/core/backlog/index.js +27 -8
- package/dist/core/backlog/index.js.map +1 -1
- package/dist/core/backlog/render.d.ts +48 -3
- package/dist/core/backlog/render.d.ts.map +1 -1
- package/dist/core/backlog/render.js +151 -15
- package/dist/core/backlog/render.js.map +1 -1
- package/dist/core/legacy-bridge/extractor.d.ts +79 -0
- package/dist/core/legacy-bridge/extractor.d.ts.map +1 -0
- package/dist/core/legacy-bridge/extractor.js +374 -0
- package/dist/core/legacy-bridge/extractor.js.map +1 -0
- package/dist/core/legacy-bridge/indexer.d.ts +8 -2
- package/dist/core/legacy-bridge/indexer.d.ts.map +1 -1
- package/dist/core/legacy-bridge/indexer.js +61 -9
- package/dist/core/legacy-bridge/indexer.js.map +1 -1
- package/dist/core/legacy-bridge/legacy-requirements.d.ts +53 -0
- package/dist/core/legacy-bridge/legacy-requirements.d.ts.map +1 -0
- package/dist/core/legacy-bridge/legacy-requirements.js +114 -0
- package/dist/core/legacy-bridge/legacy-requirements.js.map +1 -0
- package/dist/core/legacy-bridge/llm-task.d.ts +54 -0
- package/dist/core/legacy-bridge/llm-task.d.ts.map +1 -0
- package/dist/core/legacy-bridge/llm-task.js +87 -0
- package/dist/core/legacy-bridge/llm-task.js.map +1 -0
- package/dist/core/legacy-bridge/mapper.d.ts +8 -9
- package/dist/core/legacy-bridge/mapper.d.ts.map +1 -1
- package/dist/core/legacy-bridge/mapper.js +24 -39
- package/dist/core/legacy-bridge/mapper.js.map +1 -1
- package/dist/core/legacy-bridge/quality-judge.d.ts +5 -0
- package/dist/core/legacy-bridge/quality-judge.d.ts.map +1 -1
- package/dist/core/legacy-bridge/quality-judge.js +25 -21
- package/dist/core/legacy-bridge/quality-judge.js.map +1 -1
- package/dist/core/legacy-bridge/regenerator.d.ts +21 -1
- package/dist/core/legacy-bridge/regenerator.d.ts.map +1 -1
- package/dist/core/legacy-bridge/regenerator.js +132 -2
- package/dist/core/legacy-bridge/regenerator.js.map +1 -1
- package/dist/core/legacy-bridge/runners.d.ts +33 -0
- package/dist/core/legacy-bridge/runners.d.ts.map +1 -0
- package/dist/core/legacy-bridge/runners.js +77 -0
- package/dist/core/legacy-bridge/runners.js.map +1 -0
- package/dist/core/legacy-bridge/sync-check.d.ts +8 -0
- package/dist/core/legacy-bridge/sync-check.d.ts.map +1 -1
- package/dist/core/legacy-bridge/sync-check.js +83 -0
- package/dist/core/legacy-bridge/sync-check.js.map +1 -1
- package/dist/core/legacy-bridge/types.d.ts +2 -0
- package/dist/core/legacy-bridge/types.d.ts.map +1 -1
- package/dist/core/markers/types.d.ts +5 -0
- package/dist/core/markers/types.d.ts.map +1 -1
- package/dist/core/parse/unified-diff.d.ts +26 -0
- package/dist/core/parse/unified-diff.d.ts.map +1 -0
- package/dist/core/parse/unified-diff.js +61 -0
- package/dist/core/parse/unified-diff.js.map +1 -0
- package/dist/core/templates/commands/apply.md +12 -3
- package/dist/core/templates/commands/archive.md +15 -0
- package/dist/core/templates/commands/verify.md +2 -0
- package/dist/core/templates/skills/legacy-bridge-fulfillment.md +22 -0
- package/dist/core/validate/marker-schema.d.ts.map +1 -1
- package/dist/core/validate/marker-schema.js +15 -0
- package/dist/core/validate/marker-schema.js.map +1 -1
- package/package.json +21 -20
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
-
import type { LegacyAnchor, LegacyAnchorRole, LegacyAnchorsFile } from './types.js';
|
|
2
|
+
import type { LegacyAnchor, LegacyAnchorRole, LegacyAnchorsFile, QualityResult } from './types.js';
|
|
3
3
|
import { type RedactReport } from './redact.js';
|
|
4
|
+
import type { LlmTask } from './llm-task.js';
|
|
5
|
+
import { type SamplingOutput } from './quality-judge.js';
|
|
4
6
|
/** 复写参数 */
|
|
5
7
|
export interface RegenerateInput {
|
|
6
8
|
role: LegacyAnchorRole;
|
|
@@ -47,4 +49,22 @@ export declare class RegenOutputError extends Error {
|
|
|
47
49
|
readonly role: LegacyAnchorRole;
|
|
48
50
|
constructor(message: string, role: LegacyAnchorRole);
|
|
49
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* 加 frontmatter + 顶部 disclaimer(决策 #21 / §9)。
|
|
54
|
+
* Task 6.2 round-2:export 供双路径 CLI(--api / --apply 成功路径)复用,
|
|
55
|
+
* 与 regenerateRole 单进程路径产物保持一致(同一 frontmatter/disclaimer)。
|
|
56
|
+
*/
|
|
57
|
+
export declare function wrapWithFrontmatterAndDisclaimer(body: string, input: RegenerateInput): string;
|
|
58
|
+
/** 轮1 校验后处理:解析 facts(KeyFact)→ 确定性分层抽样 → 产轮2 quality-judge LlmTask + SamplingOutput */
|
|
59
|
+
export declare function applyRound1AndBuildRound2(regenBody: string, extractFactsText: string, role: LegacyAnchorRole): {
|
|
60
|
+
task: LlmTask;
|
|
61
|
+
sampling: SamplingOutput;
|
|
62
|
+
};
|
|
63
|
+
/** 轮1:产 regenerate + extract-facts 两个 LlmTask */
|
|
64
|
+
export declare function buildRegenerateRound1Tasks(input: RegenerateInput, readText?: (anchor: LegacyAnchor) => Promise<string>): Promise<LlmTask[]>;
|
|
65
|
+
/** 轮2 后处理:agent 三态 judge 结果(JSON 字符串) + 轮1 抽样 → QualityResult。
|
|
66
|
+
* critical 必须 100% 的 gate 在 computeQualityResult 内,不因走 agent 路径软化。
|
|
67
|
+
* agent 漏判的 fact(数组越界)保守视为 lost。
|
|
68
|
+
*/
|
|
69
|
+
export declare function applyRound2(judgeText: string, sampling: SamplingOutput, threshold: number): QualityResult;
|
|
50
70
|
//# sourceMappingURL=regenerator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regenerator.d.ts","sourceRoot":"","sources":["../../../src/core/legacy-bridge/regenerator.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"regenerator.d.ts","sourceRoot":"","sources":["../../../src/core/legacy-bridge/regenerator.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,OAAO,KAAK,EAEV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAU,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,eAAe,CAAC;AAC3D,OAAO,EAGL,KAAK,cAAc,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,WAAW;AACX,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,gBAAgB,CAAC;IACvB,qCAAqC;IACrC,aAAa,EAAE,YAAY,CAAC;IAC5B,sDAAsD;IACtD,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,+BAA+B;IAC/B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAChD,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,WAAW;AACX,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,gBAAgB,CAAC;IACvB,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,YAAY,EAAE,YAAY,CAAC;IAC3B,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,kCAAkC;AAClC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE;QACR,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,KAAK,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC/F,CAAC;CACH;AAiBD,wCAAwC;AACxC,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAU5D,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,gBAAgB,CAAyB,CAAC;AAkC1F,6BAA6B;AAC7B,wBAAsB,cAAc,CAClC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,gBAAgB,EACxB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,gBAAgB,CAAC,CA4E3B;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CA4B9E;AAED,gDAAgD;AAChD,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,IAAI,EAAE,gBAAgB;gBADtC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,gBAAgB;CAKzC;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,CA4B7F;AAiBD,uFAAuF;AACvF,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,gBAAgB,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAA;CAAE,CAyD7C;AAED,iDAAiD;AACjD,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,eAAe,EAEtB,QAAQ,GAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAoB,GACrE,OAAO,CAAC,OAAO,EAAE,CAAC,CAyCpB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,GAChB,aAAa,CA+Bf"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import matter from 'gray-matter';
|
|
4
4
|
import { redact } from './redact.js';
|
|
5
5
|
import { readAnchorAsText } from './encoding.js';
|
|
6
|
+
import { stratifiedSample, computeQualityResult, } from './quality-judge.js';
|
|
6
7
|
const DEFAULT_MODEL = 'claude-sonnet-4-6';
|
|
7
8
|
const PRICE_PER_M_INPUT = 3.0;
|
|
8
9
|
const PRICE_PER_M_OUTPUT = 15.0;
|
|
@@ -149,8 +150,12 @@ export class RegenOutputError extends Error {
|
|
|
149
150
|
this.name = 'RegenOutputError';
|
|
150
151
|
}
|
|
151
152
|
}
|
|
152
|
-
/**
|
|
153
|
-
|
|
153
|
+
/**
|
|
154
|
+
* 加 frontmatter + 顶部 disclaimer(决策 #21 / §9)。
|
|
155
|
+
* Task 6.2 round-2:export 供双路径 CLI(--api / --apply 成功路径)复用,
|
|
156
|
+
* 与 regenerateRole 单进程路径产物保持一致(同一 frontmatter/disclaimer)。
|
|
157
|
+
*/
|
|
158
|
+
export function wrapWithFrontmatterAndDisclaimer(body, input) {
|
|
154
159
|
const generatedAt = new Date().toISOString();
|
|
155
160
|
// 用 JSON.stringify 包裹路径,确保含特殊 yaml 字符(`: ` / `#` / `\n` 等)的路径不破 yaml 结构
|
|
156
161
|
// (JSON 字符串字面量是 yaml 双引号字符串的合法子集)
|
|
@@ -190,4 +195,129 @@ function mergeHits(a, b) {
|
|
|
190
195
|
}
|
|
191
196
|
return merged;
|
|
192
197
|
}
|
|
198
|
+
/** 轮1 校验后处理:解析 facts(KeyFact)→ 确定性分层抽样 → 产轮2 quality-judge LlmTask + SamplingOutput */
|
|
199
|
+
export function applyRound1AndBuildRound2(regenBody, extractFactsText, role) {
|
|
200
|
+
// 复用既有 markdown 合法性校验
|
|
201
|
+
validateRegenOutput(regenBody, role);
|
|
202
|
+
let facts = [];
|
|
203
|
+
try {
|
|
204
|
+
// LLM 偶尔违反 prompt 输出 ```json ... ``` fence;先剥再 parse(对齐 quality-judge.ts I-3 修)
|
|
205
|
+
const cleanText = extractFactsText
|
|
206
|
+
.trim()
|
|
207
|
+
.replace(/^```(?:json|JSON)?\r?\n/, '')
|
|
208
|
+
.replace(/\r?\n```\s*$/, '')
|
|
209
|
+
.trim();
|
|
210
|
+
const parsed = JSON.parse(cleanText);
|
|
211
|
+
if (Array.isArray(parsed)) {
|
|
212
|
+
facts = parsed
|
|
213
|
+
.map((o) => ({
|
|
214
|
+
text: typeof o.text === 'string' ? o.text : '',
|
|
215
|
+
section: typeof o.section === 'string' ? o.section : '(unstructured)',
|
|
216
|
+
critical: typeof o.critical === 'boolean' ? o.critical : false,
|
|
217
|
+
}))
|
|
218
|
+
.filter((f) => f.text.trim().length > 0);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// JSON.parse 失败 → facts 保持空数组,后续统一走 facts.length === 0 错误路径
|
|
223
|
+
facts = [];
|
|
224
|
+
}
|
|
225
|
+
// extract-facts 失败 / 空 → 无法验证保真率;不静默走「空抽样=passed」,显式抛错(下游写 .partial)
|
|
226
|
+
if (facts.length === 0) {
|
|
227
|
+
throw new RegenOutputError('extract-facts 未抽出任何 fact(LLM 输出非法或为空);无法验证保真率', role);
|
|
228
|
+
}
|
|
229
|
+
// 确定性分层抽样,留 CLI 侧
|
|
230
|
+
const sampling = stratifiedSample({ allFacts: facts });
|
|
231
|
+
// 将抽样 fact 编号排列,供 LLM 三态判定
|
|
232
|
+
const numbered = sampling.sampled
|
|
233
|
+
.map((f, i) => `${i + 1}. [${f.section}${f.critical ? ',critical' : ''}] ${f.text}`)
|
|
234
|
+
.join('\n');
|
|
235
|
+
const prompt = `下面是一份「复写产物」和一组「原文 fact」。对每个 fact 三态判定它是否在复写产物里被保留:\n` +
|
|
236
|
+
`- preserved:字面/数值完全一致\n` +
|
|
237
|
+
`- paraphrased:同义改写但语义+数值+约束完全等价\n` +
|
|
238
|
+
`- lost:漏掉 / 数值错 / 约束丢\n\n` +
|
|
239
|
+
`严格输出 JSON 数组,**顺序与 fact 编号一一对应**,每项 { "state": "preserved"|"paraphrased"|"lost" }。不加 preamble。\n\n` +
|
|
240
|
+
`# 复写产物\n${regenBody}\n\n# 待判 fact\n${numbered}`;
|
|
241
|
+
const inputs = [{ source: 'regen-body', content: regenBody }];
|
|
242
|
+
return {
|
|
243
|
+
task: {
|
|
244
|
+
op: 'quality-judge',
|
|
245
|
+
inputs,
|
|
246
|
+
prompt,
|
|
247
|
+
model: DEFAULT_MODEL,
|
|
248
|
+
outputSchema: '[{ "state": "preserved"|"paraphrased"|"lost" }](顺序对应 fact 编号)',
|
|
249
|
+
outputPath: '.cache/legacy-bridge-result-quality-judge.json',
|
|
250
|
+
},
|
|
251
|
+
sampling,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/** 轮1:产 regenerate + extract-facts 两个 LlmTask */
|
|
255
|
+
export async function buildRegenerateRound1Tasks(input,
|
|
256
|
+
// 默认用 readAnchorAsText;测试可注入 mock
|
|
257
|
+
readText = readAnchorAsText) {
|
|
258
|
+
// metadata-only role 不发 LLM(spec §7 line 909 / P7-03 修复)
|
|
259
|
+
if (METADATA_ONLY_ROLES.includes(input.role)) {
|
|
260
|
+
throw new RegenOutputError(`role=${input.role} 是 metadata-only(spec §7 line 909);不复写。`, input.role);
|
|
261
|
+
}
|
|
262
|
+
// 合并全局 redact 规则和 anchor 级别规则,然后对权威源文本 mask
|
|
263
|
+
const redactRules = [...(input.globalRedactRules ?? []), ...(input.authoritative.redact ?? [])];
|
|
264
|
+
const maskedAuth = redact(await readText(input.authoritative), redactRules).redactedText;
|
|
265
|
+
// 复写 prompt(复用既有 buildRegeneratePrompt)
|
|
266
|
+
const regeneratePrompt = buildRegeneratePrompt(input, maskedAuth);
|
|
267
|
+
// 关键事实抽取 prompt:从老文档提取结构化 JSON 事实列表
|
|
268
|
+
const extractFactsPrompt = `从下列老文档抽取关键事实(数字 / 字段约束 / 业务规则 / 合规条款 / 设计决策)。\n严格输出 JSON 数组,每项含 { "text": string(<=80 字单句), "section": string(章节锚如 "§4.5",无则 "(unstructured)"), "critical": boolean(合规/安全/业务硬约束=true) }。不加 preamble、不带 code fence。\n\n# 老文档\n${maskedAuth}`;
|
|
269
|
+
// 两个 task 共用的公共字段
|
|
270
|
+
const common = {
|
|
271
|
+
model: DEFAULT_MODEL,
|
|
272
|
+
inputs: [{ source: input.authoritative.path, content: maskedAuth }],
|
|
273
|
+
};
|
|
274
|
+
return [
|
|
275
|
+
{
|
|
276
|
+
...common,
|
|
277
|
+
op: 'regenerate',
|
|
278
|
+
prompt: regeneratePrompt,
|
|
279
|
+
outputSchema: 'markdown 正文',
|
|
280
|
+
outputPath: `.cache/legacy-bridge-result-regenerate.json`,
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
...common,
|
|
284
|
+
op: 'extract-facts',
|
|
285
|
+
prompt: extractFactsPrompt,
|
|
286
|
+
outputSchema: '[{ "text": string, "section": string, "critical": boolean }]',
|
|
287
|
+
outputPath: `.cache/legacy-bridge-result-extract-facts.json`,
|
|
288
|
+
},
|
|
289
|
+
];
|
|
290
|
+
}
|
|
291
|
+
/** 轮2 后处理:agent 三态 judge 结果(JSON 字符串) + 轮1 抽样 → QualityResult。
|
|
292
|
+
* critical 必须 100% 的 gate 在 computeQualityResult 内,不因走 agent 路径软化。
|
|
293
|
+
* agent 漏判的 fact(数组越界)保守视为 lost。
|
|
294
|
+
*/
|
|
295
|
+
export function applyRound2(judgeText, sampling, threshold) {
|
|
296
|
+
// 解析 agent 输出的三态 JSON 数组;解析失败 → 所有 fact 保守视为 lost
|
|
297
|
+
let states = [];
|
|
298
|
+
try {
|
|
299
|
+
const parsed = JSON.parse(judgeText.trim());
|
|
300
|
+
if (Array.isArray(parsed)) {
|
|
301
|
+
states = parsed.map((o) => o.state === 'preserved' || o.state === 'paraphrased' || o.state === 'lost'
|
|
302
|
+
? o.state
|
|
303
|
+
: 'lost');
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
// 合法 JSON 但非数组 → 无法逐 fact 对应,所有 fact 保守视为 lost(fail-closed)
|
|
307
|
+
console.warn(`[applyRound2] agent judge 输出非 JSON 数组(type=${typeof parsed});所有 fact 保守视为 lost`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
// JSON 解析失败 → states 保持空数组,下面逐条 fallback 为 lost(fail-closed)
|
|
312
|
+
console.warn(`[applyRound2] agent judge 输出非合法 JSON;所有 fact 保守视为 lost。原文(head 200):\n${judgeText.slice(0, 200)}`);
|
|
313
|
+
states = [];
|
|
314
|
+
}
|
|
315
|
+
// 按编号与轮1 抽样 fact 一一对应;agent 漏判的 fact 保守视为 lost
|
|
316
|
+
const judged = sampling.sampled.map((fact, i) => ({
|
|
317
|
+
fact,
|
|
318
|
+
state: states[i] ?? 'lost',
|
|
319
|
+
}));
|
|
320
|
+
// 复用纯函数算分 gate,行为与 LLM 路径完全一致
|
|
321
|
+
return computeQualityResult(judged, sampling, threshold);
|
|
322
|
+
}
|
|
193
323
|
//# sourceMappingURL=regenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regenerator.js","sourceRoot":"","sources":["../../../src/core/legacy-bridge/regenerator.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,sDAAsD;AAGtD,OAAO,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"regenerator.js","sourceRoot":"","sources":["../../../src/core/legacy-bridge/regenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import type { LlmTask, LlmOp, TaskManifest } from './llm-task.js';
|
|
3
|
+
/** 一个 task 的 LLM 原始文本结果 */
|
|
4
|
+
export interface LlmTaskResult {
|
|
5
|
+
op: LlmOp;
|
|
6
|
+
text: string;
|
|
7
|
+
}
|
|
8
|
+
/** ApiRunner 所需的最小 client 接口(便于 mock) */
|
|
9
|
+
export interface RunnerClient {
|
|
10
|
+
messages: {
|
|
11
|
+
create: (args: Anthropic.Messages.MessageCreateParams) => Promise<Anthropic.Messages.Message>;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** --api 模式:进程内逐个 task 调 Anthropic SDK */
|
|
15
|
+
export declare class ApiRunner {
|
|
16
|
+
private readonly client;
|
|
17
|
+
constructor(client: RunnerClient);
|
|
18
|
+
run(tasks: LlmTask[]): Promise<LlmTaskResult[]>;
|
|
19
|
+
}
|
|
20
|
+
/** 默认模式:把当前轮 LlmTask[] 包进 manifest 信封写盘(命令随后退出,等 agent fulfill) */
|
|
21
|
+
export declare class AgentHandoffRunner {
|
|
22
|
+
private readonly forgeRoot;
|
|
23
|
+
private readonly forgeVersion;
|
|
24
|
+
constructor(forgeRoot: string, forgeVersion: string);
|
|
25
|
+
/** emit 当前轮 manifest;返回 manifest(调用方可读 manifest_hash,如 archive 暂停态) */
|
|
26
|
+
emit(op: LlmOp, round: number, tasks: LlmTask[], meta?: Record<string, unknown>): Promise<TaskManifest>;
|
|
27
|
+
}
|
|
28
|
+
/** agent 路径:读 agent 写在各 task.outputPath 的结果文件 */
|
|
29
|
+
export declare function readTaskResults(forgeRoot: string, tasks: LlmTask[]): Promise<LlmTaskResult[]>;
|
|
30
|
+
/** 构造 --api 模式的 Anthropic client。
|
|
31
|
+
* 动态加载 forge-eval/load-env(避免 src/ rootDir 静态分析边界限制)。 */
|
|
32
|
+
export declare function makeForgeApiClient(): Promise<Anthropic>;
|
|
33
|
+
//# sourceMappingURL=runners.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../../../src/core/legacy-bridge/runners.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAK1C,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElE,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE;QACR,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,KAAK,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC/F,CAAC;CACH;AAED,0CAA0C;AAC1C,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAE3C,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAyBtD;AAED,mEAAmE;AACnE,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM;IAGvC,uEAAuE;IACjE,IAAI,CACR,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,EAAE,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,YAAY,CAAC;CAKzB;AAED,iDAAiD;AACjD,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EAAE,GACf,OAAO,CAAC,aAAa,EAAE,CAAC,CAmB1B;AAED;0DAC0D;AAC1D,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,SAAS,CAAC,CAO7D"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// src/core/legacy-bridge/runners.ts
|
|
2
|
+
// 双路径的两种执行:ApiRunner(--api 进程内调 SDK)/ AgentHandoffRunner(默认 emit manifest)+ readTaskResults
|
|
3
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
4
|
+
import { readFile } from 'node:fs/promises';
|
|
5
|
+
import { existsSync } from 'node:fs';
|
|
6
|
+
import { isAbsolute, join } from 'node:path';
|
|
7
|
+
import { buildManifest, writeManifest } from './llm-task.js';
|
|
8
|
+
/** --api 模式:进程内逐个 task 调 Anthropic SDK */
|
|
9
|
+
export class ApiRunner {
|
|
10
|
+
client;
|
|
11
|
+
constructor(client) {
|
|
12
|
+
this.client = client;
|
|
13
|
+
}
|
|
14
|
+
async run(tasks) {
|
|
15
|
+
const out = [];
|
|
16
|
+
for (const t of tasks) {
|
|
17
|
+
const bytes = Buffer.byteLength(t.prompt, 'utf8');
|
|
18
|
+
console.log(`→ sending ${bytes} bytes to Anthropic API (provider=anthropic, region: auto, model=${t.model}, op=${t.op})`);
|
|
19
|
+
const result = await this.client.messages.create({
|
|
20
|
+
model: t.model,
|
|
21
|
+
max_tokens: 8192,
|
|
22
|
+
messages: [{ role: 'user', content: t.prompt }],
|
|
23
|
+
});
|
|
24
|
+
const block = result.content.find((b) => b.type === 'text');
|
|
25
|
+
if (!block) {
|
|
26
|
+
// API 因 refusal 等 stop_reason 未返回 TextBlock —— 显式 warn,避免静默变空串
|
|
27
|
+
console.warn(`⚠ op=${t.op} API 未返回文本块(stop_reason=${result.stop_reason ?? 'unknown'}),以空字符串代替`);
|
|
28
|
+
}
|
|
29
|
+
out.push({ op: t.op, text: block?.text ?? '' });
|
|
30
|
+
}
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** 默认模式:把当前轮 LlmTask[] 包进 manifest 信封写盘(命令随后退出,等 agent fulfill) */
|
|
35
|
+
export class AgentHandoffRunner {
|
|
36
|
+
forgeRoot;
|
|
37
|
+
forgeVersion;
|
|
38
|
+
constructor(forgeRoot, forgeVersion) {
|
|
39
|
+
this.forgeRoot = forgeRoot;
|
|
40
|
+
this.forgeVersion = forgeVersion;
|
|
41
|
+
}
|
|
42
|
+
/** emit 当前轮 manifest;返回 manifest(调用方可读 manifest_hash,如 archive 暂停态) */
|
|
43
|
+
async emit(op, round, tasks, meta) {
|
|
44
|
+
const manifest = buildManifest({ op, round, tasks, forgeVersion: this.forgeVersion, meta });
|
|
45
|
+
await writeManifest(this.forgeRoot, manifest);
|
|
46
|
+
return manifest;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** agent 路径:读 agent 写在各 task.outputPath 的结果文件 */
|
|
50
|
+
export async function readTaskResults(forgeRoot, tasks) {
|
|
51
|
+
const out = [];
|
|
52
|
+
for (const t of tasks) {
|
|
53
|
+
const p = isAbsolute(t.outputPath) ? t.outputPath : join(forgeRoot, t.outputPath);
|
|
54
|
+
if (!existsSync(p)) {
|
|
55
|
+
throw new Error(`agent 结果文件缺失:${p};请先 fulfill manifest 再跑 --apply`);
|
|
56
|
+
}
|
|
57
|
+
// 包装裸 SyntaxError —— 结果文件被截断写入时,错误信息要含路径(同 Task 1.2 readManifest 先例)
|
|
58
|
+
let parsed;
|
|
59
|
+
try {
|
|
60
|
+
parsed = JSON.parse(await readFile(p, 'utf8'));
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
throw new Error(`agent 结果文件 ${p} JSON 解析失败(文件可能被截断写入):${err.message}`);
|
|
64
|
+
}
|
|
65
|
+
out.push({ op: t.op, text: parsed.text ?? '' });
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
/** 构造 --api 模式的 Anthropic client。
|
|
70
|
+
* 动态加载 forge-eval/load-env(避免 src/ rootDir 静态分析边界限制)。 */
|
|
71
|
+
export async function makeForgeApiClient() {
|
|
72
|
+
const evalLoadEnvPath = new URL('../../../forge-eval/load-env.js', import.meta.url).href;
|
|
73
|
+
const { loadEnv } = (await import(/* @vite-ignore */ evalLoadEnvPath));
|
|
74
|
+
const { anthropicApiKey } = loadEnv();
|
|
75
|
+
return new Anthropic({ apiKey: anthropicApiKey });
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=runners.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runners.js","sourceRoot":"","sources":["../../../src/core/legacy-bridge/runners.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import type { LlmTask } from './llm-task.js';
|
|
2
3
|
import type { LegacyAnchor, LegacyAnchorsFile, SyncStateFile, SyncStateDiff, RedactRule } from './types.js';
|
|
3
4
|
/** 单 change 的输入 */
|
|
4
5
|
export interface SyncCheckInput {
|
|
@@ -44,4 +45,11 @@ indexEntries?: Array<{
|
|
|
44
45
|
path: string;
|
|
45
46
|
summary: string;
|
|
46
47
|
}>): Promise<SyncCheckOutput>;
|
|
48
|
+
/** 确定性后处理:LLM diff 数组文本 → SyncStateFile(带 produced_from) */
|
|
49
|
+
export declare function applySyncCheckResult(llmText: string, changeId: string, producedFromHash: string): SyncStateFile;
|
|
50
|
+
/** 确定性 prep:findAffectedAnchors + redact(含 changeContext,补盲区)→ 一个 LlmTask */
|
|
51
|
+
export declare function buildSyncCheckTask(input: SyncCheckInput, readAnchorText: (path: string) => Promise<string>, indexEntries?: Array<{
|
|
52
|
+
path: string;
|
|
53
|
+
summary: string;
|
|
54
|
+
}>): Promise<LlmTask | null>;
|
|
47
55
|
//# sourceMappingURL=sync-check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-check.d.ts","sourceRoot":"","sources":["../../../src/core/legacy-bridge/sync-check.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-check.d.ts","sourceRoot":"","sources":["../../../src/core/legacy-bridge/sync-check.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,mBAAmB;AACnB,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB;IACjB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,4CAA4C;IAC5C,sBAAsB,EAAE,OAAO,CAAC;IAChC,oCAAoC;IACpC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnC;AAED,mBAAmB;AACnB,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,aAAa,CAAC;IACzB,iDAAiD;IACjD,UAAU,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,WAAW,CAAA;KAAE,CAAC,CAAC;IACpF,0DAA0D;IAC1D,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,yBAAyB;AACzB,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE;QACR,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,KAAK,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC/F,CAAC;CACH;AAID,kCAAkC;AAClC,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,iBAAiB,EAC1B,eAAe,EAAE,MAAM,EAAE,GACxB,YAAY,EAAE,CAMhB;AAoCD,0CAA0C;AAC1C,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,GACrC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAcxC;AAED,8BAA8B;AAC9B,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,GACnB,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAiC/B;AAED,6BAA6B;AAC7B,wBAAsB,YAAY,CAChC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,cAAc,EACrB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;AACjD,sDAAsD;AACtD,YAAY,CAAC,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACtD,OAAO,CAAC,eAAe,CAAC,CA2F1B;AAgBD,4DAA4D;AAC5D,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GACvB,aAAa,CA0Bf;AAED,6EAA6E;AAC7E,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,cAAc,EACrB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EACjD,YAAY,CAAC,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACtD,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAsDzB"}
|
|
@@ -195,4 +195,87 @@ function extractText(result) {
|
|
|
195
195
|
const block = result.content.find((b) => b.type === 'text');
|
|
196
196
|
return block?.text ?? '';
|
|
197
197
|
}
|
|
198
|
+
/** 确定性后处理:LLM diff 数组文本 → SyncStateFile(带 produced_from) */
|
|
199
|
+
export function applySyncCheckResult(llmText, changeId, producedFromHash) {
|
|
200
|
+
let raw = [];
|
|
201
|
+
try {
|
|
202
|
+
const parsed = JSON.parse(llmText.trim());
|
|
203
|
+
if (Array.isArray(parsed)) {
|
|
204
|
+
raw = parsed;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
// valid JSON 但形态非数组 —— 同等视为输出异常,写告警 diff,不静默漏报
|
|
208
|
+
raw = [
|
|
209
|
+
{
|
|
210
|
+
severity: 'info',
|
|
211
|
+
description: `LLM 输出格式非数组:${JSON.stringify(parsed).slice(0, 200)}`,
|
|
212
|
+
},
|
|
213
|
+
];
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
raw = [{ severity: 'info', description: `LLM 输出非合法 JSON:${llmText.slice(0, 200)}` }];
|
|
218
|
+
}
|
|
219
|
+
const diffs = normalizeDiffsFromLlm(raw).map((d, i) => ({ ...d, id: i + 1 }));
|
|
220
|
+
return {
|
|
221
|
+
schema: 'forge-legacy-sync/v1',
|
|
222
|
+
change_id: changeId,
|
|
223
|
+
generated_at: new Date().toISOString(),
|
|
224
|
+
diffs,
|
|
225
|
+
produced_from: producedFromHash,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/** 确定性 prep:findAffectedAnchors + redact(含 changeContext,补盲区)→ 一个 LlmTask */
|
|
229
|
+
export async function buildSyncCheckTask(input, readAnchorText, indexEntries) {
|
|
230
|
+
// 找到受本次 change 影响的 anchor
|
|
231
|
+
let affected = findAffectedAnchors(input.anchors, input.affectedModules);
|
|
232
|
+
// 取全局 redact 规则
|
|
233
|
+
const redactRules = input.anchors.redact ?? [];
|
|
234
|
+
// 可选索引摘要过滤:仅"高分"摘要的 anchor 才打开原文
|
|
235
|
+
if (indexEntries && indexEntries.length > 0) {
|
|
236
|
+
const keywords = extractKeywords(input.changeContext);
|
|
237
|
+
const filtered = affected.filter((a) => {
|
|
238
|
+
const entry = indexEntries.find((e) => e.path === a.path);
|
|
239
|
+
if (!entry)
|
|
240
|
+
return true; // 无摘要 → 默认打开(保守)
|
|
241
|
+
return keywords.some((k) => entry.summary.includes(k));
|
|
242
|
+
});
|
|
243
|
+
if (filtered.length > 0)
|
|
244
|
+
affected = filtered;
|
|
245
|
+
}
|
|
246
|
+
// 无受影响 anchor → 不 emit 任务
|
|
247
|
+
if (affected.length === 0)
|
|
248
|
+
return null;
|
|
249
|
+
// 修盲区:changeContext 也 redact 后再进 prompt
|
|
250
|
+
const maskedContext = redact(input.changeContext, redactRules).redactedText;
|
|
251
|
+
const blocks = [];
|
|
252
|
+
const inputs = [{ source: 'change-context', content: maskedContext }];
|
|
253
|
+
for (const anchor of affected) {
|
|
254
|
+
let masked;
|
|
255
|
+
try {
|
|
256
|
+
// 锚点正文也走 redact,与 runSyncCheck 行为对齐
|
|
257
|
+
masked = redact(await readAnchorText(anchor.path), redactRules).redactedText;
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
// 缺失锚点不阻塞(对齐现 runSyncCheck P7-10)
|
|
261
|
+
console.warn(`⚠ anchor ${anchor.path} 读取失败:${err.message};跳过该项继续`);
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
blocks.push(`# 锚点 role=${anchor.role} path=${anchor.path}\n${masked}`);
|
|
265
|
+
inputs.push({ source: anchor.path, content: masked });
|
|
266
|
+
}
|
|
267
|
+
// affected 存在但全部读取失败 → 无锚点内容,不 emit 空 sync-check task
|
|
268
|
+
if (blocks.length === 0)
|
|
269
|
+
return null;
|
|
270
|
+
// 拼整合 prompt(多 anchor 聚合,对齐 spec §5 buildSyncCheckTask 设计)
|
|
271
|
+
const prompt = `你是 brownfield sync 审计员。判断"本次 change"是否要求更新各"老文档锚点"。\n\n# 本次 change 上下文\n${maskedContext}\n\n${blocks.join('\n\n')}\n\n# 输出\n严格 JSON 数组,每项 { "anchor_path": string, "severity": "critical|major|minor|style|info", "section": string, "description": string }。无更新输出 []。`;
|
|
272
|
+
return {
|
|
273
|
+
op: 'sync-check',
|
|
274
|
+
inputs,
|
|
275
|
+
prompt,
|
|
276
|
+
model: DEFAULT_MODEL,
|
|
277
|
+
outputSchema: '[{ "anchor_path": string, "severity": string, "section": string, "description": string }]',
|
|
278
|
+
outputPath: '.cache/legacy-bridge-result-sync-check.json',
|
|
279
|
+
};
|
|
280
|
+
}
|
|
198
281
|
//# sourceMappingURL=sync-check.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-check.js","sourceRoot":"","sources":["../../../src/core/legacy-bridge/sync-check.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,gFAAgF;AAGhF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-check.js","sourceRoot":"","sources":["../../../src/core/legacy-bridge/sync-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,6 +67,8 @@ export interface SyncStateFile {
|
|
|
67
67
|
diffs: SyncStateDiff[];
|
|
68
68
|
/** 跨 anchor 冲突默认入 diff(决策 #18 修订);auto_resolve_cross_anchor=true 时此字段为空 */
|
|
69
69
|
cross_anchor_conflicts?: SyncStateDiff[];
|
|
70
|
+
/** 产生此 sync-state 的 sync-check manifest 的 manifest_hash(双路径 resume gate 复核用,Spec A §4.5) */
|
|
71
|
+
produced_from?: string;
|
|
70
72
|
}
|
|
71
73
|
/** llm-ack.yaml 顶层结构(决策 #22) */
|
|
72
74
|
export interface LlmAckFile {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/legacy-bridge/types.ts"],"names":[],"mappings":"AAGA,sCAAsC;AACtC,MAAM,MAAM,gBAAgB,GACxB,cAAc,GACd,mBAAmB,GACnB,kBAAkB,GAClB,cAAc,GACd,mBAAmB,GACnB,WAAW,GACX,UAAU,CAAC;AAEf,kDAAkD;AAClD,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,IAAI,EAAE,gBAAgB,CAAC;IACvB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,aAAa,EAAE,OAAO,CAAC;IACvB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,gDAAgD;IAChD,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,+BAA+B;AAC/B,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,wBAAwB,CAAC;IACjC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,wBAAwB;AACxB,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/F,sBAAsB;AACtB,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7E,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,qBAAqB;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,MAAM,EAAE,SAAS,GAAG,wBAAwB,GAAG,gBAAgB,GAAG,SAAS,CAAC;IAC5E,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,2EAA2E;IAC3E,sBAAsB,CAAC,EAAE,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/legacy-bridge/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,6 +77,11 @@ export interface PauseDecision {
|
|
|
77
77
|
other_rationale: string | null;
|
|
78
78
|
/** option=4 必填(用户在 marker 之外某处确认 — fence 仅校验非空,不校验来源) */
|
|
79
79
|
other_acked_by: string | null;
|
|
80
|
+
/** option=2 新增的 task(末段 tasks.md#task-N);厘清 task_ref 语义 —— task_ref = 触发 pause 的 task。
|
|
81
|
+
* schema 层 optional(superset additive,老 marker 无);必填性由 fence 层按 chosen_option 判。 */
|
|
82
|
+
added_task_ref?: string | null;
|
|
83
|
+
/** option=2 关联的 pause-capture entry 的 capture_id;schema 层 optional,同上。 */
|
|
84
|
+
capture_id?: string | null;
|
|
80
85
|
}
|
|
81
86
|
export interface EvidenceItem {
|
|
82
87
|
scenario_id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/markers/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,GAAG,gBAAgB,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,YAAY,EAAE,CAAC;IAEzB,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;IAGlC,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;IAGlC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAGjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAGlC,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,eAAe,CAAC;IACnC,sFAAsF;IACtF,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAc,SAAQ,OAAO;CAE7C;AAED;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEzC;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,yGAAyG;IACzG,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,QAAQ,EAAE,QAAQ,CAAC;IACnB,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,6CAA6C;IAC7C,aAAa,EAAE,YAAY,CAAC;IAC5B,4FAA4F;IAC5F,eAAe,EAAE,MAAM,CAAC;IACxB,uGAAuG;IACvG,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,4BAA4B;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,0DAA0D;IAC1D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/markers/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** unified-diff 一个 hunk 内的一行变更 */
|
|
2
|
+
export interface DiffLine {
|
|
3
|
+
/** '+' 新增 / '-' 删除 */
|
|
4
|
+
kind: '+' | '-';
|
|
5
|
+
/** 行内容(去掉前缀 +/-) */
|
|
6
|
+
content: string;
|
|
7
|
+
/** 该行在「新文件」中的行号(仅 kind='+' 有意义;kind='-' 为 null) */
|
|
8
|
+
newLineNumber: number | null;
|
|
9
|
+
}
|
|
10
|
+
/** 一个 unified-diff hunk */
|
|
11
|
+
export interface DiffHunk {
|
|
12
|
+
/** hunk 头 `@@ -a,b +c,d @@` 中的 c(新文件起始行号,1-indexed) */
|
|
13
|
+
newStart: number;
|
|
14
|
+
/** 本 hunk 内所有新增行(kind='+') */
|
|
15
|
+
added: DiffLine[];
|
|
16
|
+
/** 本 hunk 内所有删除行(kind='-') */
|
|
17
|
+
removed: DiffLine[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 解析 `git diff` 文本输出为 hunk 列表。
|
|
21
|
+
* @param diffText `git diff HEAD -- <file>` 的 stdout(可为空 → 返回 [])
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseUnifiedDiff(diffText: string): DiffHunk[];
|
|
24
|
+
/** 收集所有 hunk 的新增行在「新文件」中的行号(升序去重) */
|
|
25
|
+
export declare function addedLineNumbers(hunks: DiffHunk[]): number[];
|
|
26
|
+
//# sourceMappingURL=unified-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unified-diff.d.ts","sourceRoot":"","sources":["../../../src/core/parse/unified-diff.ts"],"names":[],"mappings":"AAGA,kCAAkC;AAClC,MAAM,WAAW,QAAQ;IACvB,sBAAsB;IACtB,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IAChB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,2BAA2B;AAC3B,MAAM,WAAW,QAAQ;IACvB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,8BAA8B;IAC9B,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CAuC7D;AAED,qCAAqC;AACrC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,CAQ5D"}
|