ccgx-workflow 2.3.1 → 2.4.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/dist/chunks/version-build.mjs +3 -0
- package/dist/cli.mjs +1 -1
- package/dist/index.d.mts +237 -3
- package/dist/index.d.ts +237 -3
- package/dist/index.mjs +243 -8
- package/dist/shared/{ccgx-workflow.DDYfdCuM.mjs → ccgx-workflow.j1spUsik.mjs} +156 -2
- package/package.json +1 -1
- package/templates/commands/review.md +6 -3
- package/templates/commands/spec-impl.md +67 -2
- package/templates/hooks/ccg-loop-detector.cjs +232 -0
- package/templates/hooks/ccg-skill-router.cjs +249 -0
- package/templates/hooks/ccg-stop-gate.cjs +202 -0
- package/templates/scripts/spec-suggestion.cjs +266 -0
package/dist/cli.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import cac from 'cac';
|
|
3
3
|
import ansis from 'ansis';
|
|
4
|
-
import { d as diagnoseMcpConfig, i as isWindows, r as readClaudeCodeConfig, f as fixWindowsMcpConfig, w as writeClaudeCodeConfig, a as readCcgConfig, b as initI18n, c as i18n, s as showMainMenu, e as init, g as configMcp, v as version } from './shared/ccgx-workflow.
|
|
4
|
+
import { d as diagnoseMcpConfig, i as isWindows, r as readClaudeCodeConfig, f as fixWindowsMcpConfig, w as writeClaudeCodeConfig, a as readCcgConfig, b as initI18n, c as i18n, s as showMainMenu, e as init, g as configMcp, v as version } from './shared/ccgx-workflow.j1spUsik.mjs';
|
|
5
5
|
import { execSync } from 'node:child_process';
|
|
6
6
|
import 'inquirer';
|
|
7
7
|
import 'ora';
|
package/dist/index.d.mts
CHANGED
|
@@ -296,7 +296,17 @@ declare function migrateToV1_4_0(): Promise<MigrationResult>;
|
|
|
296
296
|
declare function needsMigration(): Promise<boolean>;
|
|
297
297
|
|
|
298
298
|
/**
|
|
299
|
-
* Get current installed version
|
|
299
|
+
* Get current installed version.
|
|
300
|
+
*
|
|
301
|
+
* Resolution order:
|
|
302
|
+
* 1. BUILD_TIME_VERSION — baked into the bundle by unbuild. This is the
|
|
303
|
+
* authoritative source for shipped binaries because it does not depend on
|
|
304
|
+
* filesystem layout. Fixes the Windows-npx 0.0.0 → false migration bug.
|
|
305
|
+
* 2. relative package.json — used in dev (tsx) where step 1 is a placeholder.
|
|
306
|
+
* 3. walked-up package.json — last-resort for unusual runtime layouts.
|
|
307
|
+
* 4. npm_package_version env var — when run as an npm script.
|
|
308
|
+
* 5. '0.0.0' — only when everything above failed; callers must treat this as
|
|
309
|
+
* "unknown" and skip version-gated branches (e.g. migration).
|
|
300
310
|
*/
|
|
301
311
|
declare function getCurrentVersion(): Promise<string>;
|
|
302
312
|
/**
|
|
@@ -317,6 +327,230 @@ declare function checkForUpdates(): Promise<{
|
|
|
317
327
|
latestVersion: string | null;
|
|
318
328
|
}>;
|
|
319
329
|
|
|
330
|
+
/**
|
|
331
|
+
* 单轮收敛状态。
|
|
332
|
+
*/
|
|
333
|
+
interface ConvergeRound {
|
|
334
|
+
/** 第几轮(1-indexed) */
|
|
335
|
+
round: number;
|
|
336
|
+
/** 本轮 review 发现的 finding 数(按严重度分) */
|
|
337
|
+
findings: {
|
|
338
|
+
critical: number;
|
|
339
|
+
warning: number;
|
|
340
|
+
info: number;
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Ralph Loop fix-log persistence (RFC-8 follow-up to fork v2.3.1).
|
|
346
|
+
*
|
|
347
|
+
* Context: fork already implements the Ralph Loop core (multi-round
|
|
348
|
+
* `--fix --auto` with `decideConverge()` + AUTO_CONVERGE_CAP=3 + stall
|
|
349
|
+
* detection + 4-step transactional cleanup). The only gap is **persistence**
|
|
350
|
+
* of the per-round ConvergeRound history.
|
|
351
|
+
*
|
|
352
|
+
* Today the main thread holds the history in conversation context. A `/clear`
|
|
353
|
+
* mid-loop, a session crash, or a long-running session that gets context-
|
|
354
|
+
* compacted all silently drop the history. `decideConverge` then sees an
|
|
355
|
+
* empty `history[]` on the next round and starts over — re-trying from
|
|
356
|
+
* round 1 instead of recognizing this is round 3 and escalating.
|
|
357
|
+
*
|
|
358
|
+
* Fix: append-only JSONL log at `.context/fix-log.jsonl`. The log survives
|
|
359
|
+
* `/clear` and session restarts; main-thread code reads it back to
|
|
360
|
+
* reconstruct the ConvergeRound[] before calling `decideConverge`.
|
|
361
|
+
*
|
|
362
|
+
* Design choices:
|
|
363
|
+
* - JSONL (one JSON object per line) instead of one big JSON file. Append
|
|
364
|
+
* is a single fs.appendFileSync call → atomic on POSIX and Windows
|
|
365
|
+
* (single write() syscall, no read-modify-write race between writers).
|
|
366
|
+
* - Two entry kinds: 'review' (records finding counts) and 'fix' (records
|
|
367
|
+
* commits and status). `convergeHistoryFromLog` only consumes 'review'
|
|
368
|
+
* entries because that is what `decideConverge` cares about.
|
|
369
|
+
* - No mutex / file lock. Append-only + single-writer-per-task. If two
|
|
370
|
+
* concurrent `/ccg:review --fix --auto` runs ever happen against the
|
|
371
|
+
* same workdir they'll interleave lines but each line is still a valid
|
|
372
|
+
* ConvergeRound — readers tolerate that.
|
|
373
|
+
* - Tolerant parsing: a malformed line is skipped, not throwed on. The
|
|
374
|
+
* log is advisory; a corrupt entry must not break the loop.
|
|
375
|
+
*/
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Relative path inside the project where the JSONL log lives. Same
|
|
379
|
+
* `.context/` directory the sentinel + jobs/ live in.
|
|
380
|
+
*/
|
|
381
|
+
declare const FIX_LOG_RELATIVE_PATH = ".context/fix-log.jsonl";
|
|
382
|
+
/**
|
|
383
|
+
* Per-round finding counts. Mirrors ConvergeRound.findings.
|
|
384
|
+
*/
|
|
385
|
+
interface FindingCounts {
|
|
386
|
+
critical: number;
|
|
387
|
+
warning: number;
|
|
388
|
+
info: number;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* 'review' entries record a review-phase outcome (used to feed decideConverge).
|
|
392
|
+
* 'fix' entries record the corresponding code-fixer run (commits, status).
|
|
393
|
+
*/
|
|
394
|
+
type FixLogEntryKind = 'review' | 'fix';
|
|
395
|
+
interface ReviewLogEntry {
|
|
396
|
+
kind: 'review';
|
|
397
|
+
/** ISO 8601 timestamp. */
|
|
398
|
+
ts: string;
|
|
399
|
+
/** 1-indexed round number, matches code-fixer's `auto_round`. */
|
|
400
|
+
round: number;
|
|
401
|
+
/** Counts produced by the review pass. */
|
|
402
|
+
findings: FindingCounts;
|
|
403
|
+
/** Optional free-form note (≤120 chars), e.g. "after second adversarial review". */
|
|
404
|
+
note?: string;
|
|
405
|
+
}
|
|
406
|
+
interface FixLogEntry {
|
|
407
|
+
kind: 'fix';
|
|
408
|
+
ts: string;
|
|
409
|
+
round: number;
|
|
410
|
+
/** Outcome of the code-fixer run for this round. */
|
|
411
|
+
status: 'completed' | 'partial' | 'escalated' | 'failed';
|
|
412
|
+
/** Atomic commits the fixer produced this round (sha7 strings). */
|
|
413
|
+
commits: string[];
|
|
414
|
+
note?: string;
|
|
415
|
+
}
|
|
416
|
+
type FixLogRecord = ReviewLogEntry | FixLogEntry;
|
|
417
|
+
/**
|
|
418
|
+
* Absolute path of the fix-log for a given project workdir.
|
|
419
|
+
*/
|
|
420
|
+
declare function resolveFixLogPath(workdir: string): string;
|
|
421
|
+
/**
|
|
422
|
+
* Atomically append a single record to `.context/fix-log.jsonl`. Creates the
|
|
423
|
+
* parent directory if missing. Single appendFileSync call → atomic at the
|
|
424
|
+
* fs syscall layer; no read-modify-write race for concurrent writers.
|
|
425
|
+
*
|
|
426
|
+
* Caller is responsible for picking the right `ts` and `round`. We do not
|
|
427
|
+
* generate timestamps here because tests want them to be deterministic.
|
|
428
|
+
*/
|
|
429
|
+
declare function appendFixLogEntry(workdir: string, entry: FixLogRecord): void;
|
|
430
|
+
/**
|
|
431
|
+
* Read all valid entries from `.context/fix-log.jsonl`. Missing file → [].
|
|
432
|
+
* Malformed lines are skipped silently (the log is advisory; one corrupt
|
|
433
|
+
* line from an interrupted write must not break the loop).
|
|
434
|
+
*/
|
|
435
|
+
declare function readFixLog(workdir: string): FixLogRecord[];
|
|
436
|
+
/**
|
|
437
|
+
* Project the log down to the ConvergeRound[] history that decideConverge
|
|
438
|
+
* consumes. Only 'review' entries contribute; 'fix' entries are for audit.
|
|
439
|
+
*
|
|
440
|
+
* Rounds are returned in append order. If the same `round` appears twice
|
|
441
|
+
* (e.g. user re-ran round 2 after editing files manually) the LAST entry
|
|
442
|
+
* wins — that matches what a human reviewer of the log file would expect.
|
|
443
|
+
*/
|
|
444
|
+
declare function convergeHistoryFromLog(entries: readonly FixLogRecord[]): ConvergeRound[];
|
|
445
|
+
/**
|
|
446
|
+
* One-call helper for the main thread: read the on-disk log and return the
|
|
447
|
+
* ConvergeRound[] history ready to hand to decideConverge.
|
|
448
|
+
*
|
|
449
|
+
* Use this whenever the main thread might have lost in-context history
|
|
450
|
+
* (after `/clear`, session restart, or context compaction).
|
|
451
|
+
*/
|
|
452
|
+
declare function loadConvergeHistory(workdir: string): ConvergeRound[];
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Spec Evolution candidate extractor (RFC-9).
|
|
456
|
+
*
|
|
457
|
+
* fork走 OpenSpec (OPSX) 路线:所有规范变更通过 `changes/<id>/` proposals 进入
|
|
458
|
+
* `openspec/specs/` 主规范。本 helper 只负责一件事——在 `/ccg:spec-impl` 归档
|
|
459
|
+
* **前**,从本次 change 的 git diff + REVIEW.md 里抽出**可复用的、非显而易见的
|
|
460
|
+
* 约定**,让用户决定要不要让它们沉淀下去。
|
|
461
|
+
*
|
|
462
|
+
* 关键设计决策:
|
|
463
|
+
*
|
|
464
|
+
* 1. **纯函数,不读 fs,不调网络**。输入是已 collected 的文本 (diff + review),
|
|
465
|
+
* 输出是候选条目数组。spec-impl.md 主线负责 IO 和用户确认。
|
|
466
|
+
*
|
|
467
|
+
* 2. **不直接写 OpenSpec deltas**。Deltas 是研究阶段产物;本 helper 抽的是
|
|
468
|
+
* "实施阶段发现的坑",与 deltas 异源。写入路径推荐
|
|
469
|
+
* `changes/<change-id>/SPEC_EVOLUTION.md`,archive 时随 change 归档。
|
|
470
|
+
*
|
|
471
|
+
* 3. **强质量门**。模型很容易输出"写好的代码"、"注意安全"这种空洞条目,所有
|
|
472
|
+
* 候选必须含**具体文件路径或 API 名**,且长度 ≥ MIN_RATIONALE_CHARS。
|
|
473
|
+
* 不合格的候选被 `rejectionReason` 标出,让 spec-impl.md 主线在确认 UI 里
|
|
474
|
+
* 展示给用户审视(不是默默丢弃——用户可能想看到 helper 拒了什么)。
|
|
475
|
+
*
|
|
476
|
+
* 4. **绝不**自动写入。导出 `formatAsMarkdown` 让主线渲染,但用户确认前
|
|
477
|
+
* 主线必须用 `AskUserQuestion` 列出 candidates 让用户勾选。
|
|
478
|
+
*
|
|
479
|
+
* 上游 V3 phase-guide.md §8 的 5 步流程(提炼 → 分类 → 草拟 → 展示 → 写入)
|
|
480
|
+
* 在 fork 的对应实现是:
|
|
481
|
+
* - helper.extractCandidates → 提炼 + 分类(一次完成)
|
|
482
|
+
* - helper.formatAsMarkdown → 草拟
|
|
483
|
+
* - spec-impl.md AskUserQuestion → 展示给用户
|
|
484
|
+
* - spec-impl.md Write/Edit → 写入(仅用户勾选的条目)
|
|
485
|
+
*/
|
|
486
|
+
/**
|
|
487
|
+
* 候选 spec 条目分类。OpenSpec 推荐 capability 维度,本 helper 用粗粒度三档:
|
|
488
|
+
* - backend: 涉及 server / api / db / auth / 后端业务逻辑
|
|
489
|
+
* - frontend: 涉及 UI / component / route / state management / 浏览器
|
|
490
|
+
* - cross-cutting: 工程基建 / 跨层 / 构建 / 测试 / CI / 配置
|
|
491
|
+
*
|
|
492
|
+
* 调用方(spec-impl.md)可在用户确认时把这三档映射到 OpenSpec 的具体 capability
|
|
493
|
+
* 路径(例如 `specs/auth/spec.md`、`specs/ui-shell/spec.md`)。
|
|
494
|
+
*/
|
|
495
|
+
type SpecCategory = 'backend' | 'frontend' | 'cross-cutting';
|
|
496
|
+
interface SpecCandidate {
|
|
497
|
+
/** 一行 ≤ 120 字的约束陈述("X 必须 Y" 句式优先)。 */
|
|
498
|
+
statement: string;
|
|
499
|
+
/** 为什么要这样(≥ MIN_RATIONALE_CHARS 字符,引用具体文件/API)。 */
|
|
500
|
+
rationale: string;
|
|
501
|
+
/** 提炼来源:哪一行 diff / REVIEW.md finding。 */
|
|
502
|
+
source: {
|
|
503
|
+
kind: 'diff' | 'review';
|
|
504
|
+
excerpt: string;
|
|
505
|
+
};
|
|
506
|
+
/** 推荐归档分类(spec-impl.md 主线决定最终 capability 映射)。 */
|
|
507
|
+
category: SpecCategory;
|
|
508
|
+
/** 拒绝原因(如果质量门没过)。通过的为 undefined。 */
|
|
509
|
+
rejectionReason?: string;
|
|
510
|
+
}
|
|
511
|
+
interface ExtractInput {
|
|
512
|
+
/** `git diff <base>..HEAD` 文本。可空(极小 change 走纯 review 路径)。 */
|
|
513
|
+
gitDiff?: string;
|
|
514
|
+
/** REVIEW.md 全文。可空(无 review 阶段或 fix 全 critical=0 跳过)。 */
|
|
515
|
+
reviewMd?: string;
|
|
516
|
+
/** Change id(仅用于 source 引用,不参与提炼)。 */
|
|
517
|
+
changeId?: string;
|
|
518
|
+
}
|
|
519
|
+
/** rationale 必须够长——拒绝"写好的代码"、"注意安全"等空洞条目。 */
|
|
520
|
+
declare const MIN_RATIONALE_CHARS = 40;
|
|
521
|
+
/** statement 上限——太长就不是约定,是设计文档。 */
|
|
522
|
+
declare const MAX_STATEMENT_CHARS = 200;
|
|
523
|
+
declare function categorizeStatement(statement: string, rationale: string): SpecCategory;
|
|
524
|
+
/**
|
|
525
|
+
* Returns the rejection reason or undefined if the candidate passes the gate.
|
|
526
|
+
* Designed to be human-readable — these strings are shown back to the user in
|
|
527
|
+
* spec-impl.md's confirmation UI so they understand why helper filtered things.
|
|
528
|
+
*/
|
|
529
|
+
declare function checkQuality(statement: string, rationale: string): string | undefined;
|
|
530
|
+
/**
|
|
531
|
+
* Main entry. Returns all candidates (passed + rejected) so spec-impl.md can
|
|
532
|
+
* show the user the full picture. Caller filters by `!c.rejectionReason` when
|
|
533
|
+
* building the confirmation choices.
|
|
534
|
+
*/
|
|
535
|
+
declare function extractCandidates(input: ExtractInput): SpecCandidate[];
|
|
536
|
+
/**
|
|
537
|
+
* Render the user-approved candidates as Markdown suitable for
|
|
538
|
+
* `changes/<change-id>/SPEC_EVOLUTION.md`.
|
|
539
|
+
*
|
|
540
|
+
* Output format is intentionally NOT OpenSpec delta syntax — this file is an
|
|
541
|
+
* audit trail of "things we learned implementing this change", not a binding
|
|
542
|
+
* spec proposal. Promoting a SPEC_EVOLUTION entry to an actual SHALL in
|
|
543
|
+
* `specs/<capability>/spec.md` is a separate, deliberate step the user takes
|
|
544
|
+
* later (via `/ccg:spec-research` for the next iteration).
|
|
545
|
+
*
|
|
546
|
+
* Includes the change-id and ISO date in the heading so an archived
|
|
547
|
+
* SPEC_EVOLUTION.md is self-describing.
|
|
548
|
+
*/
|
|
549
|
+
declare function formatAsMarkdown(approved: readonly SpecCandidate[], meta: {
|
|
550
|
+
changeId: string;
|
|
551
|
+
isoDate: string;
|
|
552
|
+
}): string;
|
|
553
|
+
|
|
320
554
|
/**
|
|
321
555
|
* Phase-scoped context state machine (v4.0 Phase 2).
|
|
322
556
|
*
|
|
@@ -1770,5 +2004,5 @@ declare function majorFindings(report: InterfaceAuditReport): InterfaceAuditFind
|
|
|
1770
2004
|
*/
|
|
1771
2005
|
declare function hasBlockingFindings(report: InterfaceAuditReport): boolean;
|
|
1772
2006
|
|
|
1773
|
-
export { ALL_LAYERS, CONTEXT_BUDGET_THRESHOLD, DESCRIPTION_SOFT_LIMIT, ROUTING_SCHEMA_VERSION, aggregatePlans, auditSkillDescriptions, auditSkillsDirectory, auditTarballContents, batchByMaxConcurrent, bothPluginsInstalled, buildQualityPlan, buildWaves, cascadeSkip, changeLanguage, checkForUpdates, collectInvocableSkills, collectSkills, compareVersions, contextPath, createDefaultConfig, createDefaultRouting, decideFromSummaries, detectPlugin, detectPluginAvailability, estimateBriefLength, estimateTokens, extractFrontmatter, generateCommandContent, getCcgDir, getConfigPath, getCurrentVersion, getLatestVersion, getWorkflowById, getWorkflowConfigs, i18n, init, initI18n, installAceTool, installAceToolRs, installSkillCommands, installWorkflows, criticalFindings as interfaceAuditCriticals, hasBlockingFindings as interfaceAuditHasBlocking, majorFindings as interfaceAuditMajors, isLayer, migrateToV1_4_0, needsMigration, parseChallengerSummary, parseDependsOn, parseFrontmatter, parseFrontmatterFields, parseInterfaceAuditorReport, parseQualityFlag, parseRoadmap, parseRoleFlag, parseVerifyReport, phaseDir, planChallengerSpawns, planVerifyWave, planWavesForTier, promptFilePath, readCcgConfig, readContext, readSummary, readSummaryFrontmatter, renderAuditMarkdown, renderPipelineReport, resolveQualityTier, routeSpecialist, runPipelineCheck, runPnpmPack, sampleAll, sampleHookSchema, samplePackageStructure, samplePluginList, sampleSkillList, sanitizePhase, schedule, serializeBriefForPrompt, showMainMenu, summarizeGroundTruth, summaryPath, summaryTokenEstimate, synthesizeRevisionFeedback, synthesizeVerifyFeedback, synthesizeVerifyResults, uninstallAceTool, uninstallWorkflows, update, verifyAllCommandsIncluded, writeCcgConfig, writeContext, writeSummary };
|
|
1774
|
-
export type { AceToolConfig, AuditReport, AuditRow, CcgConfig, ChallengeInput, ChallengerAgent, ChallengerDecision, ChallengerPlan, ChallengerSummary, CliOptions, CollaborationMode, DesignBrief, Divergence, FastContextConfig, Finding, FindingSeverity, GroundTruth, PluginInfo as GroundTruthPluginInfo, SkillInfo as GroundTruthSkillInfo, HookInfo, InitOptions, InstallResult, InterfaceAuditCategory, InterfaceAuditFinding, InterfaceAuditReport, Layer, Model, ModelRouting, ModelType, PackageStructureInfo, PhaseContext, PhaseMeta, PhaseStatus, PhaseSummary, PipelineCheckOptions, PipelineCheckReport, PipelineError, PipelineErrorCategory, PlanContribution, PlanVerifyWaveOptions, PluginAdvisor, PluginAvailability, PluginAvailability as PluginDetectionAvailability, PluginDetectionResult, PluginName, QualityPlan, SpawnEntry as QualitySpawnEntry, QualityTier, WavePlan as QualityWavePlan, ResolveInput, RoadmapPhase, Role, PluginAvailability as RoutingPluginAvailability, RoutingStrategy, SampleOptions, ScheduleOptions, SkillCategory, SkillMeta, SkillRuntimeType, SpawnEntry$1 as SpawnEntry, SpecialistCritic, SpecialistLayer, SpecialistModel, SpecialistRole, SpecialistRoute, SupportedLang, VerifyDecision, VerifyInvocationMode, VerifyMode, VerifyReport, VerifySpawnEntry, VerifyWavePlan, WaveKind, WaveSchedule, WorkflowConfig };
|
|
2007
|
+
export { ALL_LAYERS, CONTEXT_BUDGET_THRESHOLD, DESCRIPTION_SOFT_LIMIT, FIX_LOG_RELATIVE_PATH, MAX_STATEMENT_CHARS, MIN_RATIONALE_CHARS, ROUTING_SCHEMA_VERSION, aggregatePlans, appendFixLogEntry, auditSkillDescriptions, auditSkillsDirectory, auditTarballContents, batchByMaxConcurrent, bothPluginsInstalled, buildQualityPlan, buildWaves, cascadeSkip, categorizeStatement, changeLanguage, checkForUpdates, checkQuality, collectInvocableSkills, collectSkills, compareVersions, contextPath, convergeHistoryFromLog, createDefaultConfig, createDefaultRouting, decideFromSummaries, detectPlugin, detectPluginAvailability, estimateBriefLength, estimateTokens, extractCandidates, extractFrontmatter, formatAsMarkdown, generateCommandContent, getCcgDir, getConfigPath, getCurrentVersion, getLatestVersion, getWorkflowById, getWorkflowConfigs, i18n, init, initI18n, installAceTool, installAceToolRs, installSkillCommands, installWorkflows, criticalFindings as interfaceAuditCriticals, hasBlockingFindings as interfaceAuditHasBlocking, majorFindings as interfaceAuditMajors, isLayer, loadConvergeHistory, migrateToV1_4_0, needsMigration, parseChallengerSummary, parseDependsOn, parseFrontmatter, parseFrontmatterFields, parseInterfaceAuditorReport, parseQualityFlag, parseRoadmap, parseRoleFlag, parseVerifyReport, phaseDir, planChallengerSpawns, planVerifyWave, planWavesForTier, promptFilePath, readCcgConfig, readContext, readFixLog, readSummary, readSummaryFrontmatter, renderAuditMarkdown, renderPipelineReport, resolveFixLogPath, resolveQualityTier, routeSpecialist, runPipelineCheck, runPnpmPack, sampleAll, sampleHookSchema, samplePackageStructure, samplePluginList, sampleSkillList, sanitizePhase, schedule, serializeBriefForPrompt, showMainMenu, summarizeGroundTruth, summaryPath, summaryTokenEstimate, synthesizeRevisionFeedback, synthesizeVerifyFeedback, synthesizeVerifyResults, uninstallAceTool, uninstallWorkflows, update, verifyAllCommandsIncluded, writeCcgConfig, writeContext, writeSummary };
|
|
2008
|
+
export type { AceToolConfig, AuditReport, AuditRow, CcgConfig, ChallengeInput, ChallengerAgent, ChallengerDecision, ChallengerPlan, ChallengerSummary, CliOptions, CollaborationMode, DesignBrief, Divergence, ExtractInput, FastContextConfig, Finding, FindingCounts, FindingSeverity, FixLogEntry, FixLogEntryKind, FixLogRecord, GroundTruth, PluginInfo as GroundTruthPluginInfo, SkillInfo as GroundTruthSkillInfo, HookInfo, InitOptions, InstallResult, InterfaceAuditCategory, InterfaceAuditFinding, InterfaceAuditReport, Layer, Model, ModelRouting, ModelType, PackageStructureInfo, PhaseContext, PhaseMeta, PhaseStatus, PhaseSummary, PipelineCheckOptions, PipelineCheckReport, PipelineError, PipelineErrorCategory, PlanContribution, PlanVerifyWaveOptions, PluginAdvisor, PluginAvailability, PluginAvailability as PluginDetectionAvailability, PluginDetectionResult, PluginName, QualityPlan, SpawnEntry as QualitySpawnEntry, QualityTier, WavePlan as QualityWavePlan, ResolveInput, ReviewLogEntry, RoadmapPhase, Role, PluginAvailability as RoutingPluginAvailability, RoutingStrategy, SampleOptions, ScheduleOptions, SkillCategory, SkillMeta, SkillRuntimeType, SpawnEntry$1 as SpawnEntry, SpecCandidate, SpecCategory, SpecialistCritic, SpecialistLayer, SpecialistModel, SpecialistRole, SpecialistRoute, SupportedLang, VerifyDecision, VerifyInvocationMode, VerifyMode, VerifyReport, VerifySpawnEntry, VerifyWavePlan, WaveKind, WaveSchedule, WorkflowConfig };
|
package/dist/index.d.ts
CHANGED
|
@@ -296,7 +296,17 @@ declare function migrateToV1_4_0(): Promise<MigrationResult>;
|
|
|
296
296
|
declare function needsMigration(): Promise<boolean>;
|
|
297
297
|
|
|
298
298
|
/**
|
|
299
|
-
* Get current installed version
|
|
299
|
+
* Get current installed version.
|
|
300
|
+
*
|
|
301
|
+
* Resolution order:
|
|
302
|
+
* 1. BUILD_TIME_VERSION — baked into the bundle by unbuild. This is the
|
|
303
|
+
* authoritative source for shipped binaries because it does not depend on
|
|
304
|
+
* filesystem layout. Fixes the Windows-npx 0.0.0 → false migration bug.
|
|
305
|
+
* 2. relative package.json — used in dev (tsx) where step 1 is a placeholder.
|
|
306
|
+
* 3. walked-up package.json — last-resort for unusual runtime layouts.
|
|
307
|
+
* 4. npm_package_version env var — when run as an npm script.
|
|
308
|
+
* 5. '0.0.0' — only when everything above failed; callers must treat this as
|
|
309
|
+
* "unknown" and skip version-gated branches (e.g. migration).
|
|
300
310
|
*/
|
|
301
311
|
declare function getCurrentVersion(): Promise<string>;
|
|
302
312
|
/**
|
|
@@ -317,6 +327,230 @@ declare function checkForUpdates(): Promise<{
|
|
|
317
327
|
latestVersion: string | null;
|
|
318
328
|
}>;
|
|
319
329
|
|
|
330
|
+
/**
|
|
331
|
+
* 单轮收敛状态。
|
|
332
|
+
*/
|
|
333
|
+
interface ConvergeRound {
|
|
334
|
+
/** 第几轮(1-indexed) */
|
|
335
|
+
round: number;
|
|
336
|
+
/** 本轮 review 发现的 finding 数(按严重度分) */
|
|
337
|
+
findings: {
|
|
338
|
+
critical: number;
|
|
339
|
+
warning: number;
|
|
340
|
+
info: number;
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Ralph Loop fix-log persistence (RFC-8 follow-up to fork v2.3.1).
|
|
346
|
+
*
|
|
347
|
+
* Context: fork already implements the Ralph Loop core (multi-round
|
|
348
|
+
* `--fix --auto` with `decideConverge()` + AUTO_CONVERGE_CAP=3 + stall
|
|
349
|
+
* detection + 4-step transactional cleanup). The only gap is **persistence**
|
|
350
|
+
* of the per-round ConvergeRound history.
|
|
351
|
+
*
|
|
352
|
+
* Today the main thread holds the history in conversation context. A `/clear`
|
|
353
|
+
* mid-loop, a session crash, or a long-running session that gets context-
|
|
354
|
+
* compacted all silently drop the history. `decideConverge` then sees an
|
|
355
|
+
* empty `history[]` on the next round and starts over — re-trying from
|
|
356
|
+
* round 1 instead of recognizing this is round 3 and escalating.
|
|
357
|
+
*
|
|
358
|
+
* Fix: append-only JSONL log at `.context/fix-log.jsonl`. The log survives
|
|
359
|
+
* `/clear` and session restarts; main-thread code reads it back to
|
|
360
|
+
* reconstruct the ConvergeRound[] before calling `decideConverge`.
|
|
361
|
+
*
|
|
362
|
+
* Design choices:
|
|
363
|
+
* - JSONL (one JSON object per line) instead of one big JSON file. Append
|
|
364
|
+
* is a single fs.appendFileSync call → atomic on POSIX and Windows
|
|
365
|
+
* (single write() syscall, no read-modify-write race between writers).
|
|
366
|
+
* - Two entry kinds: 'review' (records finding counts) and 'fix' (records
|
|
367
|
+
* commits and status). `convergeHistoryFromLog` only consumes 'review'
|
|
368
|
+
* entries because that is what `decideConverge` cares about.
|
|
369
|
+
* - No mutex / file lock. Append-only + single-writer-per-task. If two
|
|
370
|
+
* concurrent `/ccg:review --fix --auto` runs ever happen against the
|
|
371
|
+
* same workdir they'll interleave lines but each line is still a valid
|
|
372
|
+
* ConvergeRound — readers tolerate that.
|
|
373
|
+
* - Tolerant parsing: a malformed line is skipped, not throwed on. The
|
|
374
|
+
* log is advisory; a corrupt entry must not break the loop.
|
|
375
|
+
*/
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Relative path inside the project where the JSONL log lives. Same
|
|
379
|
+
* `.context/` directory the sentinel + jobs/ live in.
|
|
380
|
+
*/
|
|
381
|
+
declare const FIX_LOG_RELATIVE_PATH = ".context/fix-log.jsonl";
|
|
382
|
+
/**
|
|
383
|
+
* Per-round finding counts. Mirrors ConvergeRound.findings.
|
|
384
|
+
*/
|
|
385
|
+
interface FindingCounts {
|
|
386
|
+
critical: number;
|
|
387
|
+
warning: number;
|
|
388
|
+
info: number;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* 'review' entries record a review-phase outcome (used to feed decideConverge).
|
|
392
|
+
* 'fix' entries record the corresponding code-fixer run (commits, status).
|
|
393
|
+
*/
|
|
394
|
+
type FixLogEntryKind = 'review' | 'fix';
|
|
395
|
+
interface ReviewLogEntry {
|
|
396
|
+
kind: 'review';
|
|
397
|
+
/** ISO 8601 timestamp. */
|
|
398
|
+
ts: string;
|
|
399
|
+
/** 1-indexed round number, matches code-fixer's `auto_round`. */
|
|
400
|
+
round: number;
|
|
401
|
+
/** Counts produced by the review pass. */
|
|
402
|
+
findings: FindingCounts;
|
|
403
|
+
/** Optional free-form note (≤120 chars), e.g. "after second adversarial review". */
|
|
404
|
+
note?: string;
|
|
405
|
+
}
|
|
406
|
+
interface FixLogEntry {
|
|
407
|
+
kind: 'fix';
|
|
408
|
+
ts: string;
|
|
409
|
+
round: number;
|
|
410
|
+
/** Outcome of the code-fixer run for this round. */
|
|
411
|
+
status: 'completed' | 'partial' | 'escalated' | 'failed';
|
|
412
|
+
/** Atomic commits the fixer produced this round (sha7 strings). */
|
|
413
|
+
commits: string[];
|
|
414
|
+
note?: string;
|
|
415
|
+
}
|
|
416
|
+
type FixLogRecord = ReviewLogEntry | FixLogEntry;
|
|
417
|
+
/**
|
|
418
|
+
* Absolute path of the fix-log for a given project workdir.
|
|
419
|
+
*/
|
|
420
|
+
declare function resolveFixLogPath(workdir: string): string;
|
|
421
|
+
/**
|
|
422
|
+
* Atomically append a single record to `.context/fix-log.jsonl`. Creates the
|
|
423
|
+
* parent directory if missing. Single appendFileSync call → atomic at the
|
|
424
|
+
* fs syscall layer; no read-modify-write race for concurrent writers.
|
|
425
|
+
*
|
|
426
|
+
* Caller is responsible for picking the right `ts` and `round`. We do not
|
|
427
|
+
* generate timestamps here because tests want them to be deterministic.
|
|
428
|
+
*/
|
|
429
|
+
declare function appendFixLogEntry(workdir: string, entry: FixLogRecord): void;
|
|
430
|
+
/**
|
|
431
|
+
* Read all valid entries from `.context/fix-log.jsonl`. Missing file → [].
|
|
432
|
+
* Malformed lines are skipped silently (the log is advisory; one corrupt
|
|
433
|
+
* line from an interrupted write must not break the loop).
|
|
434
|
+
*/
|
|
435
|
+
declare function readFixLog(workdir: string): FixLogRecord[];
|
|
436
|
+
/**
|
|
437
|
+
* Project the log down to the ConvergeRound[] history that decideConverge
|
|
438
|
+
* consumes. Only 'review' entries contribute; 'fix' entries are for audit.
|
|
439
|
+
*
|
|
440
|
+
* Rounds are returned in append order. If the same `round` appears twice
|
|
441
|
+
* (e.g. user re-ran round 2 after editing files manually) the LAST entry
|
|
442
|
+
* wins — that matches what a human reviewer of the log file would expect.
|
|
443
|
+
*/
|
|
444
|
+
declare function convergeHistoryFromLog(entries: readonly FixLogRecord[]): ConvergeRound[];
|
|
445
|
+
/**
|
|
446
|
+
* One-call helper for the main thread: read the on-disk log and return the
|
|
447
|
+
* ConvergeRound[] history ready to hand to decideConverge.
|
|
448
|
+
*
|
|
449
|
+
* Use this whenever the main thread might have lost in-context history
|
|
450
|
+
* (after `/clear`, session restart, or context compaction).
|
|
451
|
+
*/
|
|
452
|
+
declare function loadConvergeHistory(workdir: string): ConvergeRound[];
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Spec Evolution candidate extractor (RFC-9).
|
|
456
|
+
*
|
|
457
|
+
* fork走 OpenSpec (OPSX) 路线:所有规范变更通过 `changes/<id>/` proposals 进入
|
|
458
|
+
* `openspec/specs/` 主规范。本 helper 只负责一件事——在 `/ccg:spec-impl` 归档
|
|
459
|
+
* **前**,从本次 change 的 git diff + REVIEW.md 里抽出**可复用的、非显而易见的
|
|
460
|
+
* 约定**,让用户决定要不要让它们沉淀下去。
|
|
461
|
+
*
|
|
462
|
+
* 关键设计决策:
|
|
463
|
+
*
|
|
464
|
+
* 1. **纯函数,不读 fs,不调网络**。输入是已 collected 的文本 (diff + review),
|
|
465
|
+
* 输出是候选条目数组。spec-impl.md 主线负责 IO 和用户确认。
|
|
466
|
+
*
|
|
467
|
+
* 2. **不直接写 OpenSpec deltas**。Deltas 是研究阶段产物;本 helper 抽的是
|
|
468
|
+
* "实施阶段发现的坑",与 deltas 异源。写入路径推荐
|
|
469
|
+
* `changes/<change-id>/SPEC_EVOLUTION.md`,archive 时随 change 归档。
|
|
470
|
+
*
|
|
471
|
+
* 3. **强质量门**。模型很容易输出"写好的代码"、"注意安全"这种空洞条目,所有
|
|
472
|
+
* 候选必须含**具体文件路径或 API 名**,且长度 ≥ MIN_RATIONALE_CHARS。
|
|
473
|
+
* 不合格的候选被 `rejectionReason` 标出,让 spec-impl.md 主线在确认 UI 里
|
|
474
|
+
* 展示给用户审视(不是默默丢弃——用户可能想看到 helper 拒了什么)。
|
|
475
|
+
*
|
|
476
|
+
* 4. **绝不**自动写入。导出 `formatAsMarkdown` 让主线渲染,但用户确认前
|
|
477
|
+
* 主线必须用 `AskUserQuestion` 列出 candidates 让用户勾选。
|
|
478
|
+
*
|
|
479
|
+
* 上游 V3 phase-guide.md §8 的 5 步流程(提炼 → 分类 → 草拟 → 展示 → 写入)
|
|
480
|
+
* 在 fork 的对应实现是:
|
|
481
|
+
* - helper.extractCandidates → 提炼 + 分类(一次完成)
|
|
482
|
+
* - helper.formatAsMarkdown → 草拟
|
|
483
|
+
* - spec-impl.md AskUserQuestion → 展示给用户
|
|
484
|
+
* - spec-impl.md Write/Edit → 写入(仅用户勾选的条目)
|
|
485
|
+
*/
|
|
486
|
+
/**
|
|
487
|
+
* 候选 spec 条目分类。OpenSpec 推荐 capability 维度,本 helper 用粗粒度三档:
|
|
488
|
+
* - backend: 涉及 server / api / db / auth / 后端业务逻辑
|
|
489
|
+
* - frontend: 涉及 UI / component / route / state management / 浏览器
|
|
490
|
+
* - cross-cutting: 工程基建 / 跨层 / 构建 / 测试 / CI / 配置
|
|
491
|
+
*
|
|
492
|
+
* 调用方(spec-impl.md)可在用户确认时把这三档映射到 OpenSpec 的具体 capability
|
|
493
|
+
* 路径(例如 `specs/auth/spec.md`、`specs/ui-shell/spec.md`)。
|
|
494
|
+
*/
|
|
495
|
+
type SpecCategory = 'backend' | 'frontend' | 'cross-cutting';
|
|
496
|
+
interface SpecCandidate {
|
|
497
|
+
/** 一行 ≤ 120 字的约束陈述("X 必须 Y" 句式优先)。 */
|
|
498
|
+
statement: string;
|
|
499
|
+
/** 为什么要这样(≥ MIN_RATIONALE_CHARS 字符,引用具体文件/API)。 */
|
|
500
|
+
rationale: string;
|
|
501
|
+
/** 提炼来源:哪一行 diff / REVIEW.md finding。 */
|
|
502
|
+
source: {
|
|
503
|
+
kind: 'diff' | 'review';
|
|
504
|
+
excerpt: string;
|
|
505
|
+
};
|
|
506
|
+
/** 推荐归档分类(spec-impl.md 主线决定最终 capability 映射)。 */
|
|
507
|
+
category: SpecCategory;
|
|
508
|
+
/** 拒绝原因(如果质量门没过)。通过的为 undefined。 */
|
|
509
|
+
rejectionReason?: string;
|
|
510
|
+
}
|
|
511
|
+
interface ExtractInput {
|
|
512
|
+
/** `git diff <base>..HEAD` 文本。可空(极小 change 走纯 review 路径)。 */
|
|
513
|
+
gitDiff?: string;
|
|
514
|
+
/** REVIEW.md 全文。可空(无 review 阶段或 fix 全 critical=0 跳过)。 */
|
|
515
|
+
reviewMd?: string;
|
|
516
|
+
/** Change id(仅用于 source 引用,不参与提炼)。 */
|
|
517
|
+
changeId?: string;
|
|
518
|
+
}
|
|
519
|
+
/** rationale 必须够长——拒绝"写好的代码"、"注意安全"等空洞条目。 */
|
|
520
|
+
declare const MIN_RATIONALE_CHARS = 40;
|
|
521
|
+
/** statement 上限——太长就不是约定,是设计文档。 */
|
|
522
|
+
declare const MAX_STATEMENT_CHARS = 200;
|
|
523
|
+
declare function categorizeStatement(statement: string, rationale: string): SpecCategory;
|
|
524
|
+
/**
|
|
525
|
+
* Returns the rejection reason or undefined if the candidate passes the gate.
|
|
526
|
+
* Designed to be human-readable — these strings are shown back to the user in
|
|
527
|
+
* spec-impl.md's confirmation UI so they understand why helper filtered things.
|
|
528
|
+
*/
|
|
529
|
+
declare function checkQuality(statement: string, rationale: string): string | undefined;
|
|
530
|
+
/**
|
|
531
|
+
* Main entry. Returns all candidates (passed + rejected) so spec-impl.md can
|
|
532
|
+
* show the user the full picture. Caller filters by `!c.rejectionReason` when
|
|
533
|
+
* building the confirmation choices.
|
|
534
|
+
*/
|
|
535
|
+
declare function extractCandidates(input: ExtractInput): SpecCandidate[];
|
|
536
|
+
/**
|
|
537
|
+
* Render the user-approved candidates as Markdown suitable for
|
|
538
|
+
* `changes/<change-id>/SPEC_EVOLUTION.md`.
|
|
539
|
+
*
|
|
540
|
+
* Output format is intentionally NOT OpenSpec delta syntax — this file is an
|
|
541
|
+
* audit trail of "things we learned implementing this change", not a binding
|
|
542
|
+
* spec proposal. Promoting a SPEC_EVOLUTION entry to an actual SHALL in
|
|
543
|
+
* `specs/<capability>/spec.md` is a separate, deliberate step the user takes
|
|
544
|
+
* later (via `/ccg:spec-research` for the next iteration).
|
|
545
|
+
*
|
|
546
|
+
* Includes the change-id and ISO date in the heading so an archived
|
|
547
|
+
* SPEC_EVOLUTION.md is self-describing.
|
|
548
|
+
*/
|
|
549
|
+
declare function formatAsMarkdown(approved: readonly SpecCandidate[], meta: {
|
|
550
|
+
changeId: string;
|
|
551
|
+
isoDate: string;
|
|
552
|
+
}): string;
|
|
553
|
+
|
|
320
554
|
/**
|
|
321
555
|
* Phase-scoped context state machine (v4.0 Phase 2).
|
|
322
556
|
*
|
|
@@ -1770,5 +2004,5 @@ declare function majorFindings(report: InterfaceAuditReport): InterfaceAuditFind
|
|
|
1770
2004
|
*/
|
|
1771
2005
|
declare function hasBlockingFindings(report: InterfaceAuditReport): boolean;
|
|
1772
2006
|
|
|
1773
|
-
export { ALL_LAYERS, CONTEXT_BUDGET_THRESHOLD, DESCRIPTION_SOFT_LIMIT, ROUTING_SCHEMA_VERSION, aggregatePlans, auditSkillDescriptions, auditSkillsDirectory, auditTarballContents, batchByMaxConcurrent, bothPluginsInstalled, buildQualityPlan, buildWaves, cascadeSkip, changeLanguage, checkForUpdates, collectInvocableSkills, collectSkills, compareVersions, contextPath, createDefaultConfig, createDefaultRouting, decideFromSummaries, detectPlugin, detectPluginAvailability, estimateBriefLength, estimateTokens, extractFrontmatter, generateCommandContent, getCcgDir, getConfigPath, getCurrentVersion, getLatestVersion, getWorkflowById, getWorkflowConfigs, i18n, init, initI18n, installAceTool, installAceToolRs, installSkillCommands, installWorkflows, criticalFindings as interfaceAuditCriticals, hasBlockingFindings as interfaceAuditHasBlocking, majorFindings as interfaceAuditMajors, isLayer, migrateToV1_4_0, needsMigration, parseChallengerSummary, parseDependsOn, parseFrontmatter, parseFrontmatterFields, parseInterfaceAuditorReport, parseQualityFlag, parseRoadmap, parseRoleFlag, parseVerifyReport, phaseDir, planChallengerSpawns, planVerifyWave, planWavesForTier, promptFilePath, readCcgConfig, readContext, readSummary, readSummaryFrontmatter, renderAuditMarkdown, renderPipelineReport, resolveQualityTier, routeSpecialist, runPipelineCheck, runPnpmPack, sampleAll, sampleHookSchema, samplePackageStructure, samplePluginList, sampleSkillList, sanitizePhase, schedule, serializeBriefForPrompt, showMainMenu, summarizeGroundTruth, summaryPath, summaryTokenEstimate, synthesizeRevisionFeedback, synthesizeVerifyFeedback, synthesizeVerifyResults, uninstallAceTool, uninstallWorkflows, update, verifyAllCommandsIncluded, writeCcgConfig, writeContext, writeSummary };
|
|
1774
|
-
export type { AceToolConfig, AuditReport, AuditRow, CcgConfig, ChallengeInput, ChallengerAgent, ChallengerDecision, ChallengerPlan, ChallengerSummary, CliOptions, CollaborationMode, DesignBrief, Divergence, FastContextConfig, Finding, FindingSeverity, GroundTruth, PluginInfo as GroundTruthPluginInfo, SkillInfo as GroundTruthSkillInfo, HookInfo, InitOptions, InstallResult, InterfaceAuditCategory, InterfaceAuditFinding, InterfaceAuditReport, Layer, Model, ModelRouting, ModelType, PackageStructureInfo, PhaseContext, PhaseMeta, PhaseStatus, PhaseSummary, PipelineCheckOptions, PipelineCheckReport, PipelineError, PipelineErrorCategory, PlanContribution, PlanVerifyWaveOptions, PluginAdvisor, PluginAvailability, PluginAvailability as PluginDetectionAvailability, PluginDetectionResult, PluginName, QualityPlan, SpawnEntry as QualitySpawnEntry, QualityTier, WavePlan as QualityWavePlan, ResolveInput, RoadmapPhase, Role, PluginAvailability as RoutingPluginAvailability, RoutingStrategy, SampleOptions, ScheduleOptions, SkillCategory, SkillMeta, SkillRuntimeType, SpawnEntry$1 as SpawnEntry, SpecialistCritic, SpecialistLayer, SpecialistModel, SpecialistRole, SpecialistRoute, SupportedLang, VerifyDecision, VerifyInvocationMode, VerifyMode, VerifyReport, VerifySpawnEntry, VerifyWavePlan, WaveKind, WaveSchedule, WorkflowConfig };
|
|
2007
|
+
export { ALL_LAYERS, CONTEXT_BUDGET_THRESHOLD, DESCRIPTION_SOFT_LIMIT, FIX_LOG_RELATIVE_PATH, MAX_STATEMENT_CHARS, MIN_RATIONALE_CHARS, ROUTING_SCHEMA_VERSION, aggregatePlans, appendFixLogEntry, auditSkillDescriptions, auditSkillsDirectory, auditTarballContents, batchByMaxConcurrent, bothPluginsInstalled, buildQualityPlan, buildWaves, cascadeSkip, categorizeStatement, changeLanguage, checkForUpdates, checkQuality, collectInvocableSkills, collectSkills, compareVersions, contextPath, convergeHistoryFromLog, createDefaultConfig, createDefaultRouting, decideFromSummaries, detectPlugin, detectPluginAvailability, estimateBriefLength, estimateTokens, extractCandidates, extractFrontmatter, formatAsMarkdown, generateCommandContent, getCcgDir, getConfigPath, getCurrentVersion, getLatestVersion, getWorkflowById, getWorkflowConfigs, i18n, init, initI18n, installAceTool, installAceToolRs, installSkillCommands, installWorkflows, criticalFindings as interfaceAuditCriticals, hasBlockingFindings as interfaceAuditHasBlocking, majorFindings as interfaceAuditMajors, isLayer, loadConvergeHistory, migrateToV1_4_0, needsMigration, parseChallengerSummary, parseDependsOn, parseFrontmatter, parseFrontmatterFields, parseInterfaceAuditorReport, parseQualityFlag, parseRoadmap, parseRoleFlag, parseVerifyReport, phaseDir, planChallengerSpawns, planVerifyWave, planWavesForTier, promptFilePath, readCcgConfig, readContext, readFixLog, readSummary, readSummaryFrontmatter, renderAuditMarkdown, renderPipelineReport, resolveFixLogPath, resolveQualityTier, routeSpecialist, runPipelineCheck, runPnpmPack, sampleAll, sampleHookSchema, samplePackageStructure, samplePluginList, sampleSkillList, sanitizePhase, schedule, serializeBriefForPrompt, showMainMenu, summarizeGroundTruth, summaryPath, summaryTokenEstimate, synthesizeRevisionFeedback, synthesizeVerifyFeedback, synthesizeVerifyResults, uninstallAceTool, uninstallWorkflows, update, verifyAllCommandsIncluded, writeCcgConfig, writeContext, writeSummary };
|
|
2008
|
+
export type { AceToolConfig, AuditReport, AuditRow, CcgConfig, ChallengeInput, ChallengerAgent, ChallengerDecision, ChallengerPlan, ChallengerSummary, CliOptions, CollaborationMode, DesignBrief, Divergence, ExtractInput, FastContextConfig, Finding, FindingCounts, FindingSeverity, FixLogEntry, FixLogEntryKind, FixLogRecord, GroundTruth, PluginInfo as GroundTruthPluginInfo, SkillInfo as GroundTruthSkillInfo, HookInfo, InitOptions, InstallResult, InterfaceAuditCategory, InterfaceAuditFinding, InterfaceAuditReport, Layer, Model, ModelRouting, ModelType, PackageStructureInfo, PhaseContext, PhaseMeta, PhaseStatus, PhaseSummary, PipelineCheckOptions, PipelineCheckReport, PipelineError, PipelineErrorCategory, PlanContribution, PlanVerifyWaveOptions, PluginAdvisor, PluginAvailability, PluginAvailability as PluginDetectionAvailability, PluginDetectionResult, PluginName, QualityPlan, SpawnEntry as QualitySpawnEntry, QualityTier, WavePlan as QualityWavePlan, ResolveInput, ReviewLogEntry, RoadmapPhase, Role, PluginAvailability as RoutingPluginAvailability, RoutingStrategy, SampleOptions, ScheduleOptions, SkillCategory, SkillMeta, SkillRuntimeType, SpawnEntry$1 as SpawnEntry, SpecCandidate, SpecCategory, SpecialistCritic, SpecialistLayer, SpecialistModel, SpecialistRole, SpecialistRoute, SupportedLang, VerifyDecision, VerifyInvocationMode, VerifyMode, VerifyReport, VerifySpawnEntry, VerifyWavePlan, WaveKind, WaveSchedule, WorkflowConfig };
|