speccore 8.3.193 → 8.3.195
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.en.md +212 -60
- package/README.md +183 -331
- package/dist/cli.js +16 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts +1 -0
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +160 -25
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/change.js +51 -13
- package/dist/commands/change.js.map +1 -1
- package/dist/commands/doc2spec.d.ts.map +1 -1
- package/dist/commands/doc2spec.js +201 -7
- package/dist/commands/doc2spec.js.map +1 -1
- package/dist/commands/execute.js +59 -7
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/iteration/split.d.ts.map +1 -1
- package/dist/commands/iteration/split.js +51 -12
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +84 -12
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +63 -3
- package/dist/commands/pr.js.map +1 -1
- package/dist/commands/req-doc.d.ts +1 -0
- package/dist/commands/req-doc.d.ts.map +1 -1
- package/dist/commands/req-doc.js +145 -54
- package/dist/commands/req-doc.js.map +1 -1
- package/dist/commands/run.d.ts +2 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +45 -8
- package/dist/commands/run.js.map +1 -1
- package/dist/core/ask-engine.d.ts.map +1 -1
- package/dist/core/ask-engine.js +30 -4
- package/dist/core/ask-engine.js.map +1 -1
- package/dist/core/ask-llm.d.ts +12 -0
- package/dist/core/ask-llm.d.ts.map +1 -1
- package/dist/core/ask-llm.js +101 -4
- package/dist/core/ask-llm.js.map +1 -1
- package/dist/core/content-delivery.d.ts +9 -1
- package/dist/core/content-delivery.d.ts.map +1 -1
- package/dist/core/content-delivery.js +11 -0
- package/dist/core/content-delivery.js.map +1 -1
- package/dist/core/context-budget.d.ts +62 -0
- package/dist/core/context-budget.d.ts.map +1 -0
- package/dist/core/context-budget.js +128 -0
- package/dist/core/context-budget.js.map +1 -0
- package/dist/core/intent-recognition.d.ts.map +1 -1
- package/dist/core/intent-recognition.js +24 -6
- package/dist/core/intent-recognition.js.map +1 -1
- package/dist/core/pipeline-engine.d.ts +2 -0
- package/dist/core/pipeline-engine.d.ts.map +1 -1
- package/dist/core/pipeline-engine.js +9 -1
- package/dist/core/pipeline-engine.js.map +1 -1
- package/dist/core/prompt-builder.d.ts.map +1 -1
- package/dist/core/prompt-builder.js +18 -68
- package/dist/core/prompt-builder.js.map +1 -1
- package/dist/core/spec-paths.js +1 -1
- package/dist/core/spec-paths.js.map +1 -1
- package/dist/core/unified-config.d.ts +16 -0
- package/dist/core/unified-config.d.ts.map +1 -1
- package/dist/core/unified-config.js +57 -0
- package/dist/core/unified-config.js.map +1 -1
- package/dist/core/unit-context-assembler.js +21 -14
- package/dist/core/unit-context-assembler.js.map +1 -1
- package/dist/core/verify-engine.d.ts +1 -0
- package/dist/core/verify-engine.d.ts.map +1 -1
- package/dist/core/verify-engine.js +11 -8
- package/dist/core/verify-engine.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,6 +60,8 @@ const spec_paths_1 = require("./spec-paths");
|
|
|
60
60
|
const context_1 = require("./context");
|
|
61
61
|
const rag_engine_1 = require("./rag-engine");
|
|
62
62
|
const unified_retrieval_1 = require("./unified-retrieval");
|
|
63
|
+
// v8.3.194+: 统一内容分级 + 预算(单一事实源,替代本地 isSpecContent/getPriority)
|
|
64
|
+
const context_budget_1 = require("./context-budget");
|
|
63
65
|
// v8.3.183+: 统一内容供给管线(md 大纲摘要,替代链接全文内联)
|
|
64
66
|
const content_delivery_1 = require("./content-delivery");
|
|
65
67
|
// v8.3.183+: HTML 原型渲染(Playwright 截图 + accessibility tree,替代纯文本)
|
|
@@ -567,13 +569,19 @@ function getPlatformExtraFiles(platform) {
|
|
|
567
569
|
return new Set();
|
|
568
570
|
}
|
|
569
571
|
// v8.3.181+: 按文件类型细分预算(必须完整 vs 可以截断)
|
|
572
|
+
// 需求/Spec 类一律 mode='error'(超限只告警不截断),落实「Spec 优先」原则
|
|
570
573
|
const FILE_BUDGETS = {
|
|
571
574
|
'CONSTITUTION.md': { limit: 6000, mode: 'error' },
|
|
572
|
-
'REQ.md': { limit:
|
|
573
|
-
'
|
|
575
|
+
'REQ.md': { limit: 4000, mode: 'error' },
|
|
576
|
+
'REQUIREMENT.md': { limit: 4000, mode: 'error' },
|
|
577
|
+
'SCHEMA.md': { limit: 4000, mode: 'error' },
|
|
578
|
+
'ANALYSIS.md': { limit: 4000, mode: 'error' },
|
|
579
|
+
'DESIGN.md': { limit: 4000, mode: 'error' },
|
|
580
|
+
'TECH.md': { limit: 4000, mode: 'error' },
|
|
581
|
+
'DEV_GUIDE.md': { limit: 3000, mode: 'error' },
|
|
582
|
+
'CONTEXT.md': { limit: 2000, mode: 'error' },
|
|
583
|
+
'API_CONTRACT.yaml': { limit: 3000, mode: 'error' },
|
|
574
584
|
'TASK.md': { limit: 1500, mode: 'truncate' },
|
|
575
|
-
'TECH.md': { limit: 3000, mode: 'truncate' },
|
|
576
|
-
'DEV_GUIDE.md': { limit: 2000, mode: 'truncate' },
|
|
577
585
|
};
|
|
578
586
|
const DEFAULT_BUDGET = { limit: 1000, mode: 'truncate' };
|
|
579
587
|
function getFileBudget(fileName) {
|
|
@@ -2320,75 +2328,17 @@ function formatPrompt(prompt, maxTokens) {
|
|
|
2320
2328
|
return result;
|
|
2321
2329
|
}
|
|
2322
2330
|
}
|
|
2323
|
-
// Level 2: 分层预算控制 extraSpecs(v8.3.
|
|
2324
|
-
// 优先级: P1(
|
|
2331
|
+
// Level 2: 分层预算控制 extraSpecs(v8.3.194+: 收敛到 context-budget 统一分级 + 预算)
|
|
2332
|
+
// 优先级: P0(需求/Spec 不裁剪) > P1(结构化卡片/源码/前端结构/INFO_GAP) > P2(KG/任务链) > P3(其他)
|
|
2325
2333
|
if (prompt.extraSpecs.length > 0) {
|
|
2326
|
-
const
|
|
2327
|
-
const
|
|
2328
|
-
const
|
|
2329
|
-
function getPriority(spec) {
|
|
2330
|
-
const n = spec.name;
|
|
2331
|
-
if (n.includes('结构化代码事实') || n.includes('INFO_GAP') || n.includes('关联源码'))
|
|
2332
|
-
return 1;
|
|
2333
|
-
if (n.includes('知识图谱') || n.includes('任务关联上下文'))
|
|
2334
|
-
return 2;
|
|
2335
|
-
return 3; // CONSISTENCY_CHECK、工程路径、全局规范等
|
|
2336
|
-
}
|
|
2337
|
-
const sorted = [...prompt.extraSpecs].sort((a, b) => getPriority(a) - getPriority(b));
|
|
2338
|
-
const budgeted = [];
|
|
2339
|
-
let usedP1 = 0, usedP2 = 0, usedP3 = 0;
|
|
2340
|
-
for (const spec of sorted) {
|
|
2341
|
-
const p = getPriority(spec);
|
|
2342
|
-
const len = spec.content.length;
|
|
2343
|
-
let keep = true;
|
|
2344
|
-
let content = spec.content;
|
|
2345
|
-
if (p === 1) {
|
|
2346
|
-
if (usedP1 + len > BUDGET_P1) {
|
|
2347
|
-
const remain = Math.max(0, BUDGET_P1 - usedP1);
|
|
2348
|
-
if (remain < 200) {
|
|
2349
|
-
keep = false;
|
|
2350
|
-
}
|
|
2351
|
-
else {
|
|
2352
|
-
content = content.slice(0, remain) + '\n> ... (P1预算截断)';
|
|
2353
|
-
}
|
|
2354
|
-
}
|
|
2355
|
-
if (keep)
|
|
2356
|
-
usedP1 += content.length;
|
|
2357
|
-
}
|
|
2358
|
-
else if (p === 2) {
|
|
2359
|
-
if (usedP2 + len > BUDGET_P2) {
|
|
2360
|
-
const remain = Math.max(0, BUDGET_P2 - usedP2);
|
|
2361
|
-
if (remain < 200) {
|
|
2362
|
-
keep = false;
|
|
2363
|
-
}
|
|
2364
|
-
else {
|
|
2365
|
-
content = content.slice(0, remain) + '\n> ... (P2预算截断)';
|
|
2366
|
-
}
|
|
2367
|
-
}
|
|
2368
|
-
if (keep)
|
|
2369
|
-
usedP2 += content.length;
|
|
2370
|
-
}
|
|
2371
|
-
else {
|
|
2372
|
-
if (usedP3 + len > BUDGET_P3) {
|
|
2373
|
-
const remain = Math.max(0, BUDGET_P3 - usedP3);
|
|
2374
|
-
if (remain < 200) {
|
|
2375
|
-
keep = false;
|
|
2376
|
-
}
|
|
2377
|
-
else {
|
|
2378
|
-
content = content.slice(0, remain) + '\n> ... (P3预算截断)';
|
|
2379
|
-
}
|
|
2380
|
-
}
|
|
2381
|
-
if (keep)
|
|
2382
|
-
usedP3 += content.length;
|
|
2383
|
-
}
|
|
2384
|
-
if (keep)
|
|
2385
|
-
budgeted.push({ ...spec, content });
|
|
2386
|
-
}
|
|
2334
|
+
const { kept: budgeted, used } = (0, context_budget_1.applyTierBudget)(prompt.extraSpecs);
|
|
2335
|
+
const { p0: usedP0, p1: usedP1, p2: usedP2, p3: usedP3 } = used;
|
|
2336
|
+
const BUDGET_P1 = context_budget_1.TIER_BUDGETS.P1, BUDGET_P2 = context_budget_1.TIER_BUDGETS.P2, BUDGET_P3 = context_budget_1.TIER_BUDGETS.P3;
|
|
2387
2337
|
result = buildPromptText({ ...prompt, extraSpecs: budgeted });
|
|
2388
2338
|
tokens = estimateTokens(result);
|
|
2389
2339
|
if (tokens <= budget) {
|
|
2390
2340
|
const removed = prompt.extraSpecs.length - budgeted.length;
|
|
2391
|
-
logger_1.logger?.info?.(` 🪶 Prompt 已简化:分层预算控制 (P1:${usedP1}/${BUDGET_P1} P2:${usedP2}/${BUDGET_P2} P3:${usedP3}/${BUDGET_P3}${removed > 0 ? ` 移除${removed}项` : ''})`);
|
|
2341
|
+
logger_1.logger?.info?.(` 🪶 Prompt 已简化:分层预算控制 (P0:${usedP0}字不裁剪 P1:${usedP1}/${BUDGET_P1} P2:${usedP2}/${BUDGET_P2} P3:${usedP3}/${BUDGET_P3}${removed > 0 ? ` 移除${removed}项` : ''})`);
|
|
2392
2342
|
return result;
|
|
2393
2343
|
}
|
|
2394
2344
|
}
|