@tea-agent/loop-agent 0.22.0 → 0.23.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/AGENTS.md +42 -108
- package/CHANGELOG.md +68 -0
- package/README.md +7 -4
- package/dist/application/context-usage/skill-resolution-stats.js +263 -0
- package/dist/application/dag/generate-task-dag.js +17 -3
- package/dist/cli/command-definitions.js +8 -7
- package/dist/cli/program.js +17 -15
- package/dist/commands/doctor.js +269 -18
- package/dist/commands/init.js +101 -86
- package/dist/commands/stats.js +40 -11
- package/dist/shared/operator/capabilities.js +11 -1
- package/dist/worker/console/app-data.js +4 -0
- package/dist/worker/console/chat/instruction-skills.js +217 -0
- package/dist/worker/console/chat/model-resolver.js +106 -0
- package/dist/worker/console/chat/pi-runtime.js +605 -0
- package/dist/worker/console/chat/resource-loader.js +66 -0
- package/dist/worker/console/chat/routes.js +357 -0
- package/dist/worker/console/chat/session-store.js +238 -0
- package/dist/worker/console/chat/tool-adapter.js +238 -0
- package/dist/worker/console/chat/tools.js +171 -0
- package/dist/worker/console/server.js +55 -0
- package/dist/worker/console/static/assets/index-DVl7Jxt5.js +25 -0
- package/dist/worker/console/static/assets/index-lVcIr9Ju.css +1 -0
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/feature/profile-schema.js +1 -1
- package/dist/workflows/dag/init-hybrid.js +69 -21
- package/dist/workflows/dag/node-execution.js +38 -1
- package/dist/workflows/dag/output-protocol.js +89 -0
- package/dist/workflows/dag/prompt.js +35 -1
- package/dist/workflows/dag/recovery-recommendation.js +45 -0
- package/dist/workflows/dag/report.js +28 -1
- package/dist/workflows/dag/rerun-task.js +1 -1
- package/dist/workflows/dag/scheduler.js +9 -0
- package/dist/workflows/dag/types.js +12 -0
- package/dist/workflows/dag/validate.js +55 -0
- package/docs/README.md +73 -156
- package/docs/architecture/README.md +3 -2
- package/docs/architecture/dag-execution.md +2 -2
- package/docs/architecture/evolution.md +14 -12
- package/docs/architecture/system-overview.md +1 -1
- package/docs/architecture/worker-and-feature.md +3 -3
- package/docs/governance/README.md +15 -0
- package/docs/{harness-methodology-debugging.md → governance/harness-methodology-debugging.md} +27 -3
- package/docs/init-surface.manifest.json +22 -4
- package/docs/operations/README.md +12 -0
- package/docs/{local-development-environment.md → operations/local-development-environment.md} +1 -1
- package/docs/skills/vetted-skill-registry.md +23 -3
- package/docs/templates/README.md +55 -0
- package/docs/templates/evaluation/agents-map-slim-v1.candidate.json +9 -0
- package/docs/templates/evaluation/agents-map-slim-v1.md +87 -0
- package/docs/templates/evaluation/agents-map-verbose-v0.candidate.json +9 -0
- package/docs/templates/evaluation/agents-map-verbose-v0.md +153 -0
- package/docs/templates/hybrid-dag.json +1 -1
- package/docs/templates/progress-log.md +9 -2
- package/harness.json +5 -5
- package/package.json +5 -5
- package/scripts/kb-bootstrap-init-skeleton.sh +2 -2
- package/skills/agent-worker/SKILL.md +1 -1
- package/skills/grill-with-docs/SKILL.md +44 -52
- package/skills/grill-with-docs/adr-format.md +37 -26
- package/skills/grill-with-docs/context-format.md +18 -26
- package/skills/loop-agent/SKILL.md +28 -112
- package/skills/loop-agent/references/command-reference.md +9 -3
- package/skills/loop-agent/references/harness-policy.md +3 -3
- package/skills/loop-agent/references/hybrid-dag.md +1 -1
- package/skills/loop-agent/references/orchestrator-and-interventions.md +1 -1
- package/skills/loop-agent/references/task-workflow.md +2 -0
- package/skills/systematic-debugging/SKILL.md +20 -4
- package/skills/test-driven-development/SKILL.md +10 -3
- package/dist/worker/console/static/assets/index-CUDke82y.js +0 -18
- package/dist/worker/console/static/assets/index-wSEksVSO.css +0 -1
- /package/docs/{harness-methodology-tdd.md → governance/harness-methodology-tdd.md} +0 -0
- /package/docs/{harness-methodology-verification.md → governance/harness-methodology-verification.md} +0 -0
|
@@ -8,6 +8,51 @@ export const DAG_RECOVERY_ACTIONS = [
|
|
|
8
8
|
"inspect-upstream",
|
|
9
9
|
"unknown",
|
|
10
10
|
];
|
|
11
|
+
const FOLLOW_UP_BY_RAW_CATEGORY = {
|
|
12
|
+
"nonzero-exit": {
|
|
13
|
+
nextStepCategory: "repair",
|
|
14
|
+
reason: "Deterministic command exited nonzero; inspect stdout/stderr and exit code, then repair code, command, or environment before rerun.",
|
|
15
|
+
},
|
|
16
|
+
"decision-envelope-invalid": {
|
|
17
|
+
nextStepCategory: "revision",
|
|
18
|
+
reason: "Decision gate output violated the envelope protocol; revise the decision node prompt/output and do not infer approval.",
|
|
19
|
+
},
|
|
20
|
+
"protocol-invalid": {
|
|
21
|
+
nextStepCategory: "revision",
|
|
22
|
+
reason: "Model output violated the required protocol; if deterministic verdict normalization cannot prove exactly one supported verdict, revise/retry the protocol-producing node rather than inferring approval.",
|
|
23
|
+
},
|
|
24
|
+
"write-guard": {
|
|
25
|
+
nextStepCategory: "repair",
|
|
26
|
+
reason: "Write boundary was violated; narrow writeSet or revert out-of-bound changes before rerun. Write-guard failures must not be converted to success.",
|
|
27
|
+
},
|
|
28
|
+
timeout: {
|
|
29
|
+
nextStepCategory: "retry",
|
|
30
|
+
reason: "Execution exceeded its activity/wall-clock budget; inspect readiness/resource diagnostics and scoped timeout budget, then retry once the readiness issue is fixed.",
|
|
31
|
+
},
|
|
32
|
+
"controller-interrupted": {
|
|
33
|
+
nextStepCategory: "restart",
|
|
34
|
+
reason: "Controller was interrupted; reconcile run state from persisted DAG facts, then restart or resume the run.",
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
const UNKNOWN_FOLLOW_UP = {
|
|
38
|
+
nextStepCategory: "diagnosis",
|
|
39
|
+
reason: "Failure category is unavailable or unrecognized; run diagnosis/report before selecting repair/retry/restart.",
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Deterministic mapping from a raw failure category to a stable next-step
|
|
43
|
+
* category and reason. Unknown/missing categories route to diagnosis.
|
|
44
|
+
*
|
|
45
|
+
* This is a routing hint only; callers must not use it to change a DAG run's
|
|
46
|
+
* terminal status or to convert a genuine failure into success.
|
|
47
|
+
*/
|
|
48
|
+
export function recommendFollowUpForFailureCategory(rawFailureCategory) {
|
|
49
|
+
if (!rawFailureCategory)
|
|
50
|
+
return { ...UNKNOWN_FOLLOW_UP };
|
|
51
|
+
const direct = FOLLOW_UP_BY_RAW_CATEGORY[rawFailureCategory];
|
|
52
|
+
if (direct)
|
|
53
|
+
return { ...direct };
|
|
54
|
+
return { ...UNKNOWN_FOLLOW_UP };
|
|
55
|
+
}
|
|
11
56
|
const REPORT_DERIVED_ONLY = "Derived planning hint only; dag report does not execute retry or resume.";
|
|
12
57
|
const TRANSIENT_EXECUTOR_RAW = new Set([
|
|
13
58
|
"network",
|
|
@@ -8,7 +8,7 @@ import { dagRunDirExists, getDagRunDir, locateDagRun, readDagRunSpec, readDagRun
|
|
|
8
8
|
export const DAG_CLOSEOUT_DRAFT_DISCLAIMER = "> **Advisory only.** Derived from completed run facts. Canonical source remains `dag report --json` and `.harness/dag-runs/completed/<run-id>/`. Do not treat this draft as authoritative.";
|
|
9
9
|
import { dagNormalizedFailureCategorySchema, normalizeDagFailureCategory, } from "./failure-category.js";
|
|
10
10
|
import { dagProductLineFailureCategoryValues, routeDagFailure, } from "./failure-routing.js";
|
|
11
|
-
import { DAG_RECOVERY_ACTIONS, planDagRecovery, } from "./recovery-recommendation.js";
|
|
11
|
+
import { DAG_RECOVERY_ACTIONS, planDagRecovery, recommendFollowUpForFailureCategory, } from "./recovery-recommendation.js";
|
|
12
12
|
import { dagNodeExecutorSchema, dagNodeStatusSchema, LEGACY_TOP_LEVEL_MODELS_ERROR, parseDagSpec, resolveModelForTask, } from "./types.js";
|
|
13
13
|
import { checkRuntimeContractCompatible, DAG_CONTROLLER_CAPABILITIES, } from "./runtime-contract.js";
|
|
14
14
|
export const DAG_REPORT_SCHEMA_VERSION = 1;
|
|
@@ -141,6 +141,10 @@ const dagNodeReportRowSchema = z
|
|
|
141
141
|
normalizedFailureCategory: dagNormalizedFailureCategorySchema.optional(),
|
|
142
142
|
productLineFailureCategory: dagProductLineFailureCategorySchema.optional(),
|
|
143
143
|
recommendedFollowUp: z.string().optional(),
|
|
144
|
+
recommendedFollowUpCategory: z
|
|
145
|
+
.enum(["repair", "revision", "retry", "restart", "diagnosis"])
|
|
146
|
+
.optional(),
|
|
147
|
+
recommendedFollowUpReason: z.string().optional(),
|
|
144
148
|
recoveryRecommendation: dagRecoveryRecommendationSchema.optional(),
|
|
145
149
|
backend: z.enum(["sdk", "cli"]).optional(),
|
|
146
150
|
sdkAttempted: z.boolean().optional(),
|
|
@@ -166,6 +170,10 @@ const dagRunReportEntrySchema = z
|
|
|
166
170
|
normalizedFailureCategory: dagNormalizedFailureCategorySchema.optional(),
|
|
167
171
|
productLineFailureCategory: dagProductLineFailureCategorySchema.optional(),
|
|
168
172
|
recommendedFollowUp: z.string().optional(),
|
|
173
|
+
recommendedFollowUpCategory: z
|
|
174
|
+
.enum(["repair", "revision", "retry", "restart", "diagnosis"])
|
|
175
|
+
.optional(),
|
|
176
|
+
recommendedFollowUpReason: z.string().optional(),
|
|
169
177
|
recoveryRecommendation: dagRecoveryRecommendationSchema.optional(),
|
|
170
178
|
primaryFailure: dagReportPrimaryFailureSchema,
|
|
171
179
|
primaryRecovery: dagRecoveryRecommendationSchema,
|
|
@@ -434,6 +442,9 @@ export async function buildDagRunReportEntry(input) {
|
|
|
434
442
|
nodeId,
|
|
435
443
|
executor: node.executor,
|
|
436
444
|
});
|
|
445
|
+
const followUp = node.status === "ERROR" || node.status === "SKIPPED"
|
|
446
|
+
? recommendFollowUpForFailureCategory(node.failureCategory)
|
|
447
|
+
: undefined;
|
|
437
448
|
nodes.push({
|
|
438
449
|
nodeId,
|
|
439
450
|
rank,
|
|
@@ -448,6 +459,12 @@ export async function buildDagRunReportEntry(input) {
|
|
|
448
459
|
failureCategory: node.failureCategory,
|
|
449
460
|
normalizedFailureCategory,
|
|
450
461
|
...failureRouting,
|
|
462
|
+
...(followUp
|
|
463
|
+
? {
|
|
464
|
+
recommendedFollowUpCategory: followUp.nextStepCategory,
|
|
465
|
+
recommendedFollowUpReason: followUp.reason,
|
|
466
|
+
}
|
|
467
|
+
: {}),
|
|
451
468
|
recoveryRecommendation: planDagRecovery({
|
|
452
469
|
status: node.status,
|
|
453
470
|
normalizedFailureCategory,
|
|
@@ -513,6 +530,10 @@ export async function buildDagRunReportEntry(input) {
|
|
|
513
530
|
normalizedFailureCategory: runRecoverySource.normalizedFailureCategory,
|
|
514
531
|
nodeId: "nodeId" in runRecoverySource ? runRecoverySource.nodeId : undefined,
|
|
515
532
|
});
|
|
533
|
+
const runFollowUp = input.state.status === "failed" ||
|
|
534
|
+
input.state.status === "partial_failed"
|
|
535
|
+
? recommendFollowUpForFailureCategory(input.state.failureCategory)
|
|
536
|
+
: undefined;
|
|
516
537
|
const partialEntry = {
|
|
517
538
|
runId: input.state.runId,
|
|
518
539
|
title: input.state.title,
|
|
@@ -524,6 +545,12 @@ export async function buildDagRunReportEntry(input) {
|
|
|
524
545
|
failureCategory: input.state.failureCategory,
|
|
525
546
|
normalizedFailureCategory,
|
|
526
547
|
...runFailureRouting,
|
|
548
|
+
...(runFollowUp
|
|
549
|
+
? {
|
|
550
|
+
recommendedFollowUpCategory: runFollowUp.nextStepCategory,
|
|
551
|
+
recommendedFollowUpReason: runFollowUp.reason,
|
|
552
|
+
}
|
|
553
|
+
: {}),
|
|
527
554
|
recoveryRecommendation,
|
|
528
555
|
pausedByNodeId: input.state.pausedByNodeId,
|
|
529
556
|
pauseReason: input.state.pauseReason,
|
|
@@ -193,7 +193,7 @@ function blockedResult(input) {
|
|
|
193
193
|
};
|
|
194
194
|
}
|
|
195
195
|
function extractRunSummary(generateResult) {
|
|
196
|
-
if (generateResult.mode === "generate+validate")
|
|
196
|
+
if (generateResult.mode === "generate+basic-validate")
|
|
197
197
|
return undefined;
|
|
198
198
|
return generateResult.run;
|
|
199
199
|
}
|
|
@@ -17,6 +17,7 @@ function dependencyReadiness(task, nodes) {
|
|
|
17
17
|
if (task.depends_on.length === 0)
|
|
18
18
|
return "run";
|
|
19
19
|
const softConditionJoin = task.dependsPolicy === "all-or-condition-skip";
|
|
20
|
+
const toleratedErrors = new Set(task.failureAwareDependsOn ?? []);
|
|
20
21
|
let hasFinished = false;
|
|
21
22
|
let hasPendingUpstream = false;
|
|
22
23
|
let hasHardBlock = false;
|
|
@@ -35,6 +36,14 @@ function dependencyReadiness(task, nodes) {
|
|
|
35
36
|
continue;
|
|
36
37
|
}
|
|
37
38
|
if (dep.status === "ERROR") {
|
|
39
|
+
// AC1: an explicit read-only recovery/diagnosis/closeout node may
|
|
40
|
+
// consume a declared upstream ERROR as settled failure evidence. This
|
|
41
|
+
// does not rewrite the upstream status; it only allows the recovery
|
|
42
|
+
// node to become runnable so it can read the failure evidence.
|
|
43
|
+
if (toleratedErrors.has(depId)) {
|
|
44
|
+
hasFinished = true;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
38
47
|
hasHardBlock = true;
|
|
39
48
|
continue;
|
|
40
49
|
}
|
|
@@ -27,6 +27,10 @@ export const dagShellVerifyEvidenceSchema = z.object({
|
|
|
27
27
|
commandCount: z.number().int().nonnegative(),
|
|
28
28
|
commandLabels: z.array(z.string()).default([]),
|
|
29
29
|
commandTexts: z.array(z.string()).default([]),
|
|
30
|
+
/** Effective timeout applied independently to each shell command. */
|
|
31
|
+
commandTimeoutMs: z.number().int().positive().optional(),
|
|
32
|
+
/** Worst-case serial budget: commandCount * commandTimeoutMs. */
|
|
33
|
+
totalTimeoutBudgetMs: z.number().int().nonnegative().optional(),
|
|
30
34
|
finalFullRequired: z.boolean().optional(),
|
|
31
35
|
});
|
|
32
36
|
export const dagRepairArtifactGateSchema = z.object({
|
|
@@ -424,6 +428,14 @@ export const dagTaskSchema = z.object({
|
|
|
424
428
|
* every dep is FINISHED or soft condition-skip and at least one is FINISHED (OR-join)
|
|
425
429
|
*/
|
|
426
430
|
dependsPolicy: z.enum(["all", "all-or-condition-skip"]).optional(),
|
|
431
|
+
/**
|
|
432
|
+
* Explicit opt-in: upstream node ids whose ERROR terminal state this
|
|
433
|
+
* read-only node may consume as settled failure evidence. Validation
|
|
434
|
+
* restricts this to read-only Pi recovery/diagnosis/closeout nodes; writers,
|
|
435
|
+
* shell verifiers, hard gates, and dynamic/decision nodes remain fail-closed.
|
|
436
|
+
* Every id must also appear in depends_on.
|
|
437
|
+
*/
|
|
438
|
+
failureAwareDependsOn: z.array(z.string()).optional(),
|
|
427
439
|
/** Execute only when this fail-closed condition resolves true after dependencies settle. */
|
|
428
440
|
runIf: z.string().min(1).optional(),
|
|
429
441
|
complexity: dagComplexitySchema,
|
|
@@ -614,6 +614,60 @@ function validateDecisionGateTaskConfig(task, issues) {
|
|
|
614
614
|
});
|
|
615
615
|
}
|
|
616
616
|
}
|
|
617
|
+
/**
|
|
618
|
+
* AC1: failure-aware dependencies are an explicit, narrow opt-in. Only
|
|
619
|
+
* read-only Pi nodes acting as recovery/diagnosis/supervision/closeout
|
|
620
|
+
* (reviewer, verifier, supervisor, closeout roles) may tolerate an upstream
|
|
621
|
+
* ERROR. Writers, shell verifiers, hard/decision gates, dynamic nodes, and any
|
|
622
|
+
* node with write capability must remain fail-closed.
|
|
623
|
+
*/
|
|
624
|
+
const FAILURE_AWARE_SAFE_ROLES = new Set([
|
|
625
|
+
"reviewer",
|
|
626
|
+
"verifier",
|
|
627
|
+
"supervisor",
|
|
628
|
+
"closeout",
|
|
629
|
+
]);
|
|
630
|
+
function validateFailureAwareDependsOn(task, spec, issues) {
|
|
631
|
+
const tolerated = task.failureAwareDependsOn;
|
|
632
|
+
if (!tolerated || tolerated.length === 0)
|
|
633
|
+
return;
|
|
634
|
+
const isReadOnlyPiRecoveryNode = task.executor === "pi" &&
|
|
635
|
+
FAILURE_AWARE_SAFE_ROLES.has(task.role ?? "") &&
|
|
636
|
+
task.toolProfile !== "write" &&
|
|
637
|
+
(task.writePolicy === undefined ||
|
|
638
|
+
task.writePolicy === "read-only" ||
|
|
639
|
+
task.writePolicy === "none") &&
|
|
640
|
+
(task.writeSet ?? []).length === 0 &&
|
|
641
|
+
!task.decisionGate?.enabled &&
|
|
642
|
+
!task.dynamicExpansion &&
|
|
643
|
+
!task.dynamicReduction &&
|
|
644
|
+
!task.dynamicCondition &&
|
|
645
|
+
!task.dynamicLoopUntil;
|
|
646
|
+
if (!isReadOnlyPiRecoveryNode) {
|
|
647
|
+
issues.push({
|
|
648
|
+
type: "invalid-failure-aware-dependency",
|
|
649
|
+
message: `task ${task.id} declares failureAwareDependsOn but failure-aware dependencies are allowed only for read-only recovery/diagnosis/supervision/closeout-equivalent Pi nodes (reviewer, verifier, supervisor, closeout); writer and shell verification nodes may not tolerate upstream ERROR`,
|
|
650
|
+
});
|
|
651
|
+
return;
|
|
652
|
+
}
|
|
653
|
+
const dependsOn = new Set(task.depends_on);
|
|
654
|
+
const knownIds = new Set(spec.tasks.map((entry) => entry.id));
|
|
655
|
+
for (const upstreamId of tolerated) {
|
|
656
|
+
if (!knownIds.has(upstreamId)) {
|
|
657
|
+
issues.push({
|
|
658
|
+
type: "invalid-failure-aware-dependency",
|
|
659
|
+
message: `task ${task.id} failureAwareDependsOn references unknown task id ${upstreamId}`,
|
|
660
|
+
});
|
|
661
|
+
continue;
|
|
662
|
+
}
|
|
663
|
+
if (!dependsOn.has(upstreamId)) {
|
|
664
|
+
issues.push({
|
|
665
|
+
type: "invalid-failure-aware-dependency",
|
|
666
|
+
message: `task ${task.id} failure-aware dependency ${upstreamId} must be listed in depends_on`,
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
}
|
|
617
671
|
export function collectExecutorModelWarnings(spec, expectedMatrices = DEFAULT_DAG_EXECUTOR_MODELS) {
|
|
618
672
|
const warnings = [];
|
|
619
673
|
const executors = Object.keys(DEFAULT_DAG_EXECUTOR_MODELS);
|
|
@@ -704,6 +758,7 @@ export function validateDagSpec(spec) {
|
|
|
704
758
|
validateRetryPolicyTaskConfig(task, issues);
|
|
705
759
|
validateOutputProtocolTaskConfig(task, issues);
|
|
706
760
|
validateProjectGovernanceTaskConfig(task, spec, issues);
|
|
761
|
+
validateFailureAwareDependsOn(task, spec, issues);
|
|
707
762
|
}
|
|
708
763
|
validateSameRankWriteSetConflicts(spec, ranks, issues);
|
|
709
764
|
validateSameRankAgentAttributionRisks(spec, ranks, issues);
|
package/docs/README.md
CHANGED
|
@@ -1,161 +1,78 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Start Here:文档怎么读
|
|
2
2
|
|
|
3
|
-
`docs/` 是 loop-agent
|
|
3
|
+
`docs/` 是 loop-agent 源仓的治理文档根目录。新读者不需要先浏览所有文件,先按任务选择入口,再由目录 README 或 `docs/document-catalog.json` 判断文档身份。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**维护日:2026-07-25** — 对齐 `@tea-agent/loop-agent@0.23.1`。版本事实以根 `CHANGELOG.md` 与 `package.json` 为准;能力短摘要见 `reports/current-capability-summary.md`。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 我现在要做什么?
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
站上用法文档在 `../website/docs/`;双树收敛见 `../skills/loop-agent/references/docs-converge.md`。
|
|
12
|
-
|
|
13
|
-
## 阅读路径
|
|
14
|
-
|
|
15
|
-
1. 根目录 `AGENTS.md` + 本索引(地图)
|
|
16
|
-
2. 活契约:`development-principles.md` → `feature-workflow.md` → `verification-matrix.md`
|
|
17
|
-
3. Runtime / DAG:`loop-agent-harness.md` → `agent-dag-runner.md` → 需要时再读 `agent-dag-recovery-playbook.md`
|
|
18
|
-
4. 架构边界:`architecture/runtime-boundaries.md`,再按 `architecture/README.md` 往下读
|
|
19
|
-
5. 产物目录:active plan → progress handoff → reports 证据;设计输入见 `design/README.md`
|
|
20
|
-
|
|
21
|
-
## 活契约(根目录)
|
|
22
|
-
|
|
23
|
-
根目录 `docs/*.md` 是**当前仍生效**的操作契约与手册,不按日期归档、不按主题再拆子目录。
|
|
24
|
-
|
|
25
|
-
- `development-principles.md` — 仓库开发原则
|
|
26
|
-
- `feature-workflow.md` — 有边界的功能工作流、taskKind / profile、DAG 与 handoff 纪律
|
|
27
|
-
- `verification-matrix.md` — 验证命令选择
|
|
28
|
-
- `loop-agent-harness.md` — runtime 与 command surface 概览
|
|
29
|
-
- `agent-dag-runner.md` — Agent DAG runner 指南
|
|
30
|
-
- `agent-dag-recovery-playbook.md` — DAG 失败分类、recovery action 与 operator 处置手册
|
|
31
|
-
- `backend-test-live-campaign.md` — backend-test 控制器修复与真实宿主循环验证:双仓库隔离、全新 Task/DAG/Run、首错即停、证据归档和中文用例合同
|
|
32
|
-
- `production-readiness.md` — Production Readiness v0.1 范围、证据与 DAG hardening 标准
|
|
33
|
-
- `branch-merge-guideline.md` — 分支合并:快速/标准/深度模式、功能保留、冲突解析、init/package 审计与 source-SHA 报告
|
|
34
|
-
- `github-collaboration.md` — 内部轻量 GitHub 协作:短分支、简短 PR、CI 与 Squash Merge
|
|
35
|
-
- `local-development-environment.md` — Cursor Cloud 等特定本地环境的已知问题与排障
|
|
36
|
-
- `cursor-prompt-sidecar.md` — `cursor-prompt` one-shot sidecar(非受治理 writer)
|
|
37
|
-
- `init-surface.manifest.json` — npm 包范围、目标项目初始化投影与 `init check-update` surface 的机器校验契约
|
|
38
|
-
|
|
39
|
-
## 架构
|
|
40
|
-
|
|
41
|
-
入口与阅读顺序见 `architecture/README.md`。
|
|
42
|
-
|
|
43
|
-
- `architecture/runtime-boundaries.md` — runtime 层边界与依赖方向(边界真源)
|
|
44
|
-
- `architecture/system-overview.md` — loop-agent / agent-worker / 治理层 / 外部系统全景
|
|
45
|
-
- `architecture/dag-execution.md` — Agent DAG 主调用链、rank 调度、executor、skill snapshot、生命周期
|
|
46
|
-
- `architecture/worker-and-feature.md` — agent-worker 子进程边界、controller identity、Task Pool、Feature 与 Observe
|
|
47
|
-
- `architecture/facts-and-state.md` — harness 事实与状态、canonical/derived、可写/只读边界
|
|
48
|
-
- `architecture/evolution.md` — 当前已实现能力 vs 第 3–6 月未来方向
|
|
49
|
-
|
|
50
|
-
## 设计入口(非实现证明)
|
|
51
|
-
|
|
52
|
-
完整索引与归档策略见 `design/README.md`。下列为当前高频活入口:
|
|
53
|
-
|
|
54
|
-
- `design/backend-test-workflow.md` — backend-test Markdown-first 8 节点流程、单次 pytest、run-owned artifacts 与 L-5
|
|
55
|
-
- `design/frontend-implementation-workflow.md` — 前端实现 / 评审 / 验证工作流(含 Mock/API 策略、capability seed、verification bundle)
|
|
56
|
-
- `design/dag-source-binding-and-recovery.md` — 新生成 DAG 的任务源绑定与中断恢复
|
|
57
|
-
- `design/agent-worker-fullstack-workflow-integration.md` — workflow routing、Task Outcome、artifact-aware Ready、`fullstack-v1` 与 Verification Bundle
|
|
58
|
-
- `design/fullstack-end-to-end-delivery-optimization-roadmap.md` — 全栈端到端优化收敛路线图(release train / Delivery / Final Verification)
|
|
59
|
-
- `design/local-operator-console-from-pi-web.md` — Operator Console 设计输入;MVP 已随 `0.17.0`–`0.17.2` 发布;统一 surface 设计已归档(见下)
|
|
60
|
-
- `design/taskspec-to-loop-agent-mapping.md` — TaskSpec → loop-agent task 兼容契约(文档镜像;runtime 真源在代码)
|
|
61
|
-
|
|
62
|
-
已实现且仅作历史说明的设计见 `design/archive/`(例如 `design/archive/2026-07-14-loop-agent-self-update-notifier.md`、`design/archive/2026-07-22-console-observe-unified-operator-surface.md`、`design/archive/2026-07-23-operator-task-rerun-and-node-retry.md`、`design/archive/frontend-mock-data-workflow.md`)。
|
|
63
|
-
|
|
64
|
-
## 进行中 / 近期完成
|
|
65
|
-
|
|
66
|
-
进行中的完整列表见 `exec-plans/active/README.md`。当前高频 active:
|
|
67
|
-
|
|
68
|
-
- `exec-plans/active/2026-07-19-fullstack-dogfood-016x-release-train.md` — 全栈 release train(0.16.X → 0.17.X;Delivery 仍 open)
|
|
69
|
-
- `exec-plans/active/2026-07-21-frontend-test-dag-success-rate.md` — frontend-test 成功率 hardening(formal smoke 待收口)
|
|
70
|
-
- `exec-plans/active/2026-07-18-backend-test-live-provider-smoke.md` — 真实 provider smoke(blocked-external)
|
|
71
|
-
- `exec-plans/active/2026-07-20-l5-test-report-metrics.md` — L-5 / coverage(实现完成,待审阅归档)
|
|
72
|
-
- `exec-plans/active/2026-07-16-recursive-self-improvement-eval-lab.md` — Eval Lab(实现完成,可归档)
|
|
73
|
-
|
|
74
|
-
完整 completed 列表与主题速览见 `exec-plans/completed/README.md`。近期高频归档:
|
|
75
|
-
|
|
76
|
-
- `exec-plans/completed/2026-07-24-backend-test-request-response-logs-report-format.md` — pytest 请求/响应脱敏日志与第 7/8 节点报告版式;真实 `my-webapp` Campaign R04 8/8、17 passed
|
|
77
|
-
- `exec-plans/completed/2026-07-23-backend-test-advisory-gates.md` — 第 4/6 节点改为非阻断 advisory:用例只强制前置条件/步骤/预期,第 6 节点只扫描 Markdown 映射脚本;真实 `my-webapp` Campaign R02 8/8、10 passed
|
|
78
|
-
- `exec-plans/completed/2026-07-23-backend-test-human-readable-artifacts.md` — 中文 README/用例卡片、class-based pytest traceability 与逐条 self-contained HTML 报告;真实 `my-webapp` Campaign Round 04 8/8、16 passed
|
|
79
|
-
- `exec-plans/completed/2026-07-22-backend-markdown-gate-fix.md` — backend-test Markdown gate、traceability、中文生成与真实 Campaign 收口
|
|
80
|
-
- `exec-plans/completed/2026-07-22-backend-test-markdown-first-8-node.md` — backend-test Markdown-first 8 节点
|
|
81
|
-
- `exec-plans/completed/2026-07-22-backend-test-report-first-flow.md` — backend-test 报告优先 12 节点
|
|
82
|
-
- `exec-plans/completed/2026-07-22-backend-test-intake-efficiency.md` — backend-test 首节点 intake 收敛
|
|
83
|
-
- `exec-plans/completed/2026-07-21-console-phase-1-3.md` — Operator Console Phase 1–3 MVP(0.17.0–0.17.2)
|
|
84
|
-
- `exec-plans/completed/2026-07-21-console-phase-0-5-task-contract.md` — Task Contract / operator envelope / DagSpec v4
|
|
85
|
-
- `exec-plans/completed/2026-07-20-frontend-test-rag-outcome-hardening.md` — frontend-test 结果链与 UX 收口
|
|
86
|
-
- `exec-plans/completed/2026-07-19-taskspec-workflow-routing.md` — TaskSpec workflow routing / Outcome / fullstack-v1(M0–M3)
|
|
87
|
-
- `exec-plans/completed/2026-07-19-fullstack-dogfood-remediation.md` — 全栈 dogfood 源码修复基线(live 移交 active train)
|
|
88
|
-
- `exec-plans/completed/2026-07-18-observe-ops-surface-and-rich-timeline.md` — Observe 运营面/执行面与富过程时间线
|
|
89
|
-
- `exec-plans/completed/2026-07-12-pi-only-agent-runtime.md` — Pi-only 受治理 runtime(历史主线入口)
|
|
90
|
-
|
|
91
|
-
## 设计思想来源
|
|
92
|
-
|
|
93
|
-
- `../website/docs/practices/` — Anthropic 长时运行 agent harness、OpenAI Codex harness engineering、腾讯端到端 Harness Engineering 与社区 agent harness 实践资料。当前仓库的“人类掌舵、智能体执行”、仓库即记录系统、小步增量、结构化 handoff 和 shell verification 纪律均受这些实践启发;权威执行规则仍以本目录治理文档、根目录 AGENTS.md、harness.json、skills 目录和脚本检查为准。
|
|
94
|
-
|
|
95
|
-
## 方法论
|
|
96
|
-
|
|
97
|
-
- `harness-methodology-tdd.md` — 行为变更与 bug 修复的 TDD 纪律
|
|
98
|
-
- `harness-methodology-verification.md` — 完成声明前的验证纪律
|
|
99
|
-
- `harness-methodology-debugging.md` — 修复前的系统化调试工作流
|
|
100
|
-
|
|
101
|
-
## 产物目录
|
|
102
|
-
|
|
103
|
-
| 目录 | 角色 | 索引约定 |
|
|
9
|
+
| 任务 | 先读 | 继续读 |
|
|
104
10
|
| --- | --- | --- |
|
|
105
|
-
| `
|
|
106
|
-
| `
|
|
107
|
-
| `
|
|
108
|
-
| `
|
|
109
|
-
| `
|
|
110
|
-
| `
|
|
111
|
-
| `
|
|
112
|
-
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
- `
|
|
126
|
-
|
|
127
|
-
- `
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
- `
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
- `
|
|
137
|
-
-
|
|
138
|
-
- `
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
11
|
+
| 理解当前能力与边界 | `reports/current-capability-summary.md` | `architecture/README.md`、`website/docs/overview/roadmap.md` |
|
|
12
|
+
| 开始一个受治理功能变更 | `governance/feature-workflow.md` | `governance/verification-matrix.md`、`templates/exec-plan.md` |
|
|
13
|
+
| 跑或恢复 Agent DAG | `runtime/agent-dag-runner.md` | `runtime/agent-dag-recovery-playbook.md`、`runtime/loop-agent-harness.md` |
|
|
14
|
+
| 判断架构边界 | `architecture/README.md` | `architecture/runtime-boundaries.md` |
|
|
15
|
+
| 查设计输入而非实现证明 | `design/README.md` | 对应设计文档;视觉参考见 `design/visual-references/README.md`,归档设计见 `design/archive/README.md` |
|
|
16
|
+
| 接手进行中任务 | `exec-plans/active/README.md` | 对应 active plan,再读 `progress/README.md` |
|
|
17
|
+
| 查已完成依据 | `exec-plans/completed/README.md` | `reports/README.md` 与对应报告分类 |
|
|
18
|
+
| 初始化或升级目标项目 | `init-surface.manifest.json` | `templates/README.md`、`reports/init-evolution/README.md` |
|
|
19
|
+
| 管理文档 freshness | `governance/document-review-policy.md` | `document-catalog.json`、`scripts/check-doc-governance.mjs` |
|
|
20
|
+
|
|
21
|
+
## 按问题找专题
|
|
22
|
+
|
|
23
|
+
| 你要解决的问题 | 文档 |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| 先确认仓库的基本工程原则 | `governance/development-principles.md` |
|
|
26
|
+
| 选择 taskKind、治理 profile 和 Agent DAG 路径 | `governance/feature-workflow.md` |
|
|
27
|
+
| 选择快速、标准或完整验证命令 | `governance/verification-matrix.md` |
|
|
28
|
+
| 理解 CLI、runtime 和初始化能力边界 | `runtime/loop-agent-harness.md` |
|
|
29
|
+
| 运行 DAG、查看报告或处理失败 | `runtime/agent-dag-runner.md`、`runtime/agent-dag-recovery-playbook.md` |
|
|
30
|
+
| 按 TDD、验证和调试纪律推进修复 | `governance/harness-methodology-tdd.md`、`governance/harness-methodology-verification.md`、`governance/harness-methodology-debugging.md` |
|
|
31
|
+
| 执行真实 backend-test provider 验证 | `runtime/backend-test-live-campaign.md` |
|
|
32
|
+
| 判断 Production Readiness | `operations/production-readiness.md` |
|
|
33
|
+
| 合并分支并留下 source-SHA 报告 | `operations/branch-merge-guideline.md` |
|
|
34
|
+
| 使用仓库内 GitHub 协作方式 | `operations/github-collaboration.md` |
|
|
35
|
+
| 排查本机开发环境问题 | `operations/local-development-environment.md` |
|
|
36
|
+
| 使用明确的 Cursor one-shot sidecar | `runtime/cursor-prompt-sidecar.md` |
|
|
37
|
+
| 审查 npm 包与目标项目初始化文件面 | `init-surface.manifest.json` |
|
|
38
|
+
| 判断文档何时需要重新复核 | `governance/document-review-policy.md` |
|
|
39
|
+
|
|
40
|
+
## 文档身份规则
|
|
41
|
+
|
|
42
|
+
- **当前优先检索(current-first)**:判断当前能力、状态或下一步时,先读 `CHANGELOG.md`、`reports/current-capability-summary.md`、`exec-plans/active/README.md` 和 `document-catalog.json`;命中 `design/archive/`、`exec-plans/completed/`、`reports/` 或 `reports/handoffs/` 时,必须先按 catalog 中该历史证据根的 `currentFirst` 跳转当前入口,再回看历史证据的时间点和范围。
|
|
43
|
+
- **当前真源**:`document-catalog.json` 中 `status` 为 `当前有效` 且带唯一 `topic` 的条目为该主题的唯一权威入口;同一 `topic` 只能有一个当前真源。
|
|
44
|
+
- **复核 freshness**:catalog 声明 `reviewPolicy.updateRule=verified-content-only`;每个登记文档必须引用有效 `reviewTier`。只有逐项对照 `sourceOfTruth` 并留下证据后才能更新 `lastReviewed`,tier/owner/category/格式修改不得刷新日期;具体规则见 `governance/document-review-policy.md`。
|
|
45
|
+
- **已被替代**:`status` 为 `已被替代` 的条目必须通过 `supersededBy` 指向 catalog 中另一个不同 `path`;目标必须与原条目 `topic` 相同,且状态只能是 `当前有效` 或 `正在推进`。读取时不要继续引用原条目作为事实,应跳转到 `supersededBy` 指向的当前入口或正在推进合同。
|
|
46
|
+
- **内容有误,已撤回**:`status` 为 `内容有误,已撤回` 的条目必须提供非空 `withdrawalReason`。这是撤回声明,不是替代关系;读取时只能保留其撤回原因和历史审计价值,不应把原文当作可信事实。
|
|
47
|
+
- **关系字段**:`supersededBy` 与 `withdrawalReason` 互斥,且不得出现在其他状态条目上。
|
|
48
|
+
- **当前契约 / 手册**:`governance/`、`runtime/`、`operations/` 与 `architecture/`,分别回答怎么推进、怎么运行、怎么维护和边界是什么。
|
|
49
|
+
- **设计输入**:`design/active/`,用于说明仍会影响后续决策的方案、路线和背景;除非有代码、CHANGELOG 或 completed plan 旁证,否则不是已实现证明。
|
|
50
|
+
- **视觉参考**:`design/visual-references/`,用于长期保留产品、交互或界面方向的视觉参考;它不表达实现状态,也不等同于 active 设计输入或 archive 历史证据。
|
|
51
|
+
- **进行中合同**:`exec-plans/active/`。
|
|
52
|
+
- **已完成证据**:`exec-plans/completed/`、`reports/`。
|
|
53
|
+
- **当前交接**:`progress/`,只回答下一会话怎么接;结束后的交接归入 `reports/handoffs/`。
|
|
54
|
+
- **历史资料**:`design/archive/`,保留历史或已被替代的设计上下文,不代表当前能力。
|
|
55
|
+
- **模板库**:`templates/`,随 npm 包与 full init surface 投影。
|
|
56
|
+
|
|
57
|
+
机器检查:`node scripts/check-doc-governance.mjs --repo-root .`。该检查枚举磁盘文件,不依赖“共 N 篇”这类手工计数。
|
|
58
|
+
|
|
59
|
+
## 目录职责
|
|
60
|
+
|
|
61
|
+
| 目录 | 职责 |
|
|
62
|
+
| --- | --- |
|
|
63
|
+
| `governance/` | 开发原则、功能工作流、验证矩阵与工程方法 |
|
|
64
|
+
| `runtime/` | loop-agent harness、DAG 运行/恢复和专用 runtime 手册 |
|
|
65
|
+
| `operations/` | 本地环境、分支合并、GitHub 协作与生产就绪操作 |
|
|
66
|
+
| `architecture/` | 当前架构入口、runtime 边界、DAG 执行与状态事实 |
|
|
67
|
+
| `decisions/` | ADR;决策是否仍有效以 ADR 正文和后续 ADR 为准 |
|
|
68
|
+
| `design/active/` | 仍会影响后续决策的设计输入、路线与契约 |
|
|
69
|
+
| `design/visual-references/` | 长期视觉参考,不表达实现状态 |
|
|
70
|
+
| `design/archive/` | 历史设计和已被实现/替代的阶段性设计 |
|
|
71
|
+
| `exec-plans/active/` | 仍需推进或明确保持 open 的任务合同 |
|
|
72
|
+
| `exec-plans/completed/` | 已完成任务合同归档 |
|
|
73
|
+
| `progress/` | 仍需下一次会话接手的当前 handoff 入口 |
|
|
74
|
+
| `reports/` | 验证、dogfood、merge、init evolution 与历史 handoff 证据 |
|
|
75
|
+
| `skills/` | repo-local skill registry |
|
|
76
|
+
| `templates/` | 可复用任务、报告、DAG 和 init 模板 |
|
|
77
|
+
|
|
78
|
+
站上使用者文档在 `../website/docs/`;源仓治理事实以本目录、`AGENTS.md`、`harness.json`、`CHANGELOG.md` 和检查脚本为准。
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
本目录是 loop-agent 维护者架构文档入口。每篇文档回答一个具体问题,不重复 `runtime-boundaries.md` 的依赖方向表与 governance-hook 表;遇到契约级事实请回到该文件。
|
|
4
4
|
|
|
5
|
-
**维护日:2026-07-
|
|
5
|
+
**维护日:2026-07-25** — 索引与演进叙述对齐仓库头 `@tea-agent/loop-agent@0.23.1`。边界表仍以 `runtime-boundaries.md` 与 `scripts/check-*.sh` 为准。
|
|
6
6
|
|
|
7
7
|
## 阅读路径
|
|
8
8
|
|
|
9
9
|
建议按以下顺序阅读——先全景,再主路径,再边界/事实,最后路线:
|
|
10
10
|
|
|
11
11
|
1. `runtime-boundaries.md` — runtime 层边界、依赖方向与治理 hook 的机器校验契约(**先读,是其他文档的边界真源**)。
|
|
12
|
-
2. `
|
|
12
|
+
2. `agents-invariants.md` — `AGENTS.md`(source)与 init managed block 的「什么不能删」不变量契约(短语真源 + 行数 guardrail 语义)。
|
|
13
|
+
3. `system-overview.md` — loop-agent / agent-worker / 治理层 / 外部系统的全景关系。
|
|
13
14
|
3. `dag-execution.md` — Agent DAG 主调用链、rank 调度、executor、skill snapshot、生命周期。
|
|
14
15
|
4. `worker-and-feature.md` — agent-worker 子进程边界、controller identity、Task Pool、Feature、Observe 与 Console。
|
|
15
16
|
5. `facts-and-state.md` — `.harness/` 各根目录、canonical facts、derived read models 与不可变规则。
|
|
@@ -44,7 +44,7 @@ src/commands/dag-validate.ts runDagValidate
|
|
|
44
44
|
### 专用 taskKind 与模板选择(架构摘要)
|
|
45
45
|
|
|
46
46
|
- `initHybridDagFromTask` 按 `task.json.taskKind`(及前端需求自动分类)选择专用拓扑:`frontend-implementation`、`frontend-test`、`backend-test`、`knowledge-sync`、`knowledge-graph-bootstrap` 等;默认 `standard` 走 governance profile 通用实现链。
|
|
47
|
-
- **backend-test(0.17.x)**:Markdown-first 固定短链(环境硬门 → Markdown 用例/Review → 单次 pytest + HTML → 报告与 L-5);不在本页展开节点清单,见 `docs/design/backend-test-workflow.md` 与 completed markdown-first plan。
|
|
47
|
+
- **backend-test(0.17.x)**:Markdown-first 固定短链(环境硬门 → Markdown 用例/Review → 单次 pytest + HTML → 报告与 L-5);不在本页展开节点清单,见 `docs/design/active/backend-test-workflow.md` 与 completed markdown-first plan。
|
|
48
48
|
- 专用模板不是新的 governance profile:风险等级仍由 profile 规则判断;写边界仍受 `allowedPaths` / `forbiddenPaths` / `writeSet` 约束。
|
|
49
49
|
|
|
50
50
|
## rank 调度
|
|
@@ -103,7 +103,7 @@ decision envelope 中的 **model verdict**(`decision` / `riskLevel` 等解析
|
|
|
103
103
|
|
|
104
104
|
## 自适应 liveness(节点活动 vs runner lease)
|
|
105
105
|
|
|
106
|
-
实现见 `src/workflows/dag/liveness-policy.ts` 与设计文档 `docs/design/dag-adaptive-liveness-and-supervision.md`。
|
|
106
|
+
实现见 `src/workflows/dag/liveness-policy.ts` 与设计文档 `docs/design/active/dag-adaptive-liveness-and-supervision.md`。
|
|
107
107
|
|
|
108
108
|
- **runner lease**(`runner.heartbeatAt`,约 15s)只证明 runner 进程事件循环;**不是** Pi meaningful progress。
|
|
109
109
|
- **真实活动**:SDK provider/tool event 与 CLI stdout|stderr 刷新 provider/tool/output;attempt-fenced,旧 attempt 晚到事件 no-op。SDK noisy delta 只续租 transport watchdog,不刷新 meaningful progress。
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
本页区分 loop-agent **当前已实现**的架构能力与**未来规划**。当前事实以代码、发布 CLI、已完成计划为准;未来能力一律标「规划 / 未实现 / 前瞻」。权威源:`CHANGELOG.md`、`docs/reports/current-capability-summary.md`、ADR 0001–0005、`docs/exec-plans/completed/` 与 `docs/exec-plans/active/`。
|
|
4
4
|
|
|
5
|
-
**对照版本:`@tea-agent/loop-agent@0.
|
|
5
|
+
**对照版本:`@tea-agent/loop-agent@0.23.1`(2026-07-25)**。细节版本条目见根 `CHANGELOG.md`;本表只保留架构层可读摘要。
|
|
6
6
|
|
|
7
|
-
## 当前已实现(累计至 0.
|
|
7
|
+
## 当前已实现(累计至 0.22.0)
|
|
8
8
|
|
|
9
9
|
| 域 | 现状 | 权威入口 |
|
|
10
10
|
| --- | --- | --- |
|
|
@@ -17,16 +17,18 @@
|
|
|
17
17
|
| Ready Planner | priority 选择;`batch plan-ready` 零写入;`run-ready` 冻结 plan;产物门禁 | `CHANGELOG.md [0.13.0]` / `[0.16.0]` |
|
|
18
18
|
| TaskSpec → workflow | 可选 `execution.workflow` → `taskKind`;typed Outcome;`fullstack-v1` Verification Bundle | completed `2026-07-19-taskspec-workflow-routing.md`、`CHANGELOG.md [0.16.0]` |
|
|
19
19
|
| 专用 taskKind DAG | `frontend-implementation` / `frontend-test` / `backend-test` / knowledge* | `website/docs/guides/agent-dag.md`、`CHANGELOG.md [0.12.0]`–`[0.17.x]` |
|
|
20
|
-
| Backend-test | **Markdown-first 8
|
|
21
|
-
| Frontend-test | 默认 short-chain RAG
|
|
22
|
-
| Frontend-implementation | Contract / trace / repair / Mock assess
|
|
20
|
+
| Backend-test | **Markdown-first 8 节点**;Markdown 映射限定 pytest 执行,生成 Markdown 与分层 HTML/脱敏请求响应详情 | completed `2026-07-24-backend-test-scoped-execution-report-ui.md`;`CHANGELOG.md [0.21.0]` / `[0.22.0]` |
|
|
21
|
+
| Frontend-test | 默认 short-chain RAG;内容/evidence 质量进入 advisory findings,路径与安全边界仍 fail-closed | `CHANGELOG.md [0.21.0]` / `[0.22.0]` |
|
|
22
|
+
| Frontend-implementation | Contract / trace / repair / Mock assess;`ai_workspace` + 知识库 + `openspec` 规范发现;lint 基线债务隔离 | `CHANGELOG.md [0.22.0]` |
|
|
23
23
|
| Inspect(原 Observe) | 统一 Console 的 `/inspect/` 只读运营面与富时间线;兼容期仍保留独立 `observe serve` | `website/docs/guides/observe-ui.md`、`CHANGELOG.md [Unreleased]` |
|
|
24
24
|
| Local Operator Console | `agent-worker console serve\|doctor`(loopback);Operate + Inspect、Happy Path / Interview / split view / recovery CTA;**非**远端多用户 Console | unify design;ADR 0005 |
|
|
25
25
|
| Task Contract / operator surface | journaled `task contract *`;machine envelope;**DagSpec v4 `taskContractBinding`**(exclusive writer 强制) | `CHANGELOG.md [0.17.0]`–`[0.17.2]`;ADR 0005 |
|
|
26
26
|
| DagSpec / repair | v3 `runtimeContract` + 显式 `repairNodeId`;新 writer 生成默认 v4 binding | `dag-execution.md`、`CHANGELOG.md [0.11.0]` / `[0.17.0]` |
|
|
27
|
+
| 自适应 liveness | runner lease、Provider/tool/output 活动与 meaningful progress 分离;静默 stall 受控终止,退出未确认时禁止自动重试 | `dag-execution.md`、active `2026-07-23-dag-adaptive-liveness.md` |
|
|
28
|
+
| 运行恢复 | 节点内协议纠错重试、`dag rerun` 安全子图续跑、`dag rerun-task` 完整任务重跑与 Console Recovery | `CHANGELOG.md [0.20.1]`、active `2026-07-23-operator-rerun-hardening.md` |
|
|
27
29
|
| Eval Lab | corpus / campaign / promote(人工门禁);`autoPromote=false`;**非** RSI Level 1 | `CHANGELOG.md [0.15.0]`;active plan 可归档 |
|
|
28
30
|
| 文档双树 | `website/docs/` 用法 vs `docs/` 治理;docs-converge | ADR 0003 |
|
|
29
|
-
| 文档治理 |
|
|
31
|
+
| 文档治理 | 任务式 Start Here、机器可读身份清单、目录默认身份与版本/索引语义检查 | 本目录 README、`docs/README.md`、`docs/document-catalog.json` |
|
|
30
32
|
|
|
31
33
|
### 受治理 runtime 的边界(已实现、不变式)
|
|
32
34
|
|
|
@@ -37,25 +39,25 @@
|
|
|
37
39
|
|
|
38
40
|
## 未来规划(第 3–6 月,**未实现**)
|
|
39
41
|
|
|
40
|
-
以下能力来自 `docs/design/六个月规划.md` 与相关设计输入(页首校准条之后的未交付 phase 为**设计输入**)。它们**当前不存在于产品声称的线上形态**,或仅有本地/部分替代:
|
|
42
|
+
以下能力来自 `docs/design/active/六个月规划.md` 与相关设计输入(页首校准条之后的未交付 phase 为**设计输入**)。它们**当前不存在于产品声称的线上形态**,或仅有本地/部分替代:
|
|
41
43
|
|
|
42
44
|
| 未来方向 | 状态 | 规划来源 |
|
|
43
45
|
| --- | --- | --- |
|
|
44
|
-
| 远程 PR / CI 自动创建与写回 | 规划 / 未实现 | `docs/design/六个月规划.md`(第 3 个月起) |
|
|
46
|
+
| 远程 PR / CI 自动创建与写回 | 规划 / 未实现 | `docs/design/active/六个月规划.md`(第 3 个月起) |
|
|
45
47
|
| 线上 / 云 Worker | 规划 / 未实现 | 同上 |
|
|
46
48
|
| 云 Task Pool / SQL / Orchestrator | 规划 / 未实现 | 同上(第 2 月原始设计已调整为本地 Feature 闭环) |
|
|
47
49
|
| 多仓库平台 | 规划 / 未实现 | 同上 |
|
|
48
50
|
| 组织级服务 | 规划 / 未实现 | 同上 |
|
|
49
|
-
| Web Console(远端多用户) | 规划 / 未实现;**不等于**已发布的本地 loopback Operator Console | 同上;对照 `docs/design/local-operator-console-from-pi-web.md` |
|
|
51
|
+
| Web Console(远端多用户) | 规划 / 未实现;**不等于**已发布的本地 loopback Operator Console | 同上;对照 `docs/design/active/local-operator-console-from-pi-web.md` |
|
|
50
52
|
| fullstack Delivery / Final Verification live 闭环 | 进行中(active train) | `docs/exec-plans/active/2026-07-19-fullstack-dogfood-016x-release-train.md` |
|
|
51
|
-
| Dynamic Workflow runtime limits 强执法、更广 profile | 设计输入 | `docs/design/dynamic-workflow-dag-engine-roadmap.md` |
|
|
53
|
+
| Dynamic Workflow runtime limits 强执法、更广 profile | 设计输入 | `docs/design/active/dynamic-workflow-dag-engine-roadmap.md` |
|
|
52
54
|
| Loop 与 Dynamic Workflow 更深双向集成 / 自动恢复 | 设计输入 | 同上;当前已有基础 `workflow` action |
|
|
53
55
|
| Console Phase 4 General Operator Chat | 规划 / 未实现 | Console design residual |
|
|
54
56
|
| Eval Lab auto-promote / RSI Level 1 产品声称 | **禁止**写成已交付 | Eval Lab design + active plan |
|
|
55
57
|
|
|
56
|
-
> 本地 Operator Console
|
|
58
|
+
> 本地 Operator Console 统一面(实际首发 0.19.0)已发布:单仓库、loopback、随 `@tea-agent/loop-agent` 同包、canonical mutation 只经 sibling CLI,Inspect 复用 GET-only Observe read model。它不是远端 Web Console,也不能把多租户/云编排需求偷渡进本地 Console。
|
|
57
59
|
|
|
58
|
-
> 注意:`docs/design/dynamic-workflow-dag-engine-roadmap.md` 含 2026-07-04 历史叙述;文中凡把 Cursor 写成受治理 executor 或 `loop` 的 `cursor-fix` 动作,均为**历史叙述**,现状以 Pi-only + 显式 `cursor-prompt` sidecar 为准。
|
|
60
|
+
> 注意:`docs/design/active/dynamic-workflow-dag-engine-roadmap.md` 含 2026-07-04 历史叙述;文中凡把 Cursor 写成受治理 executor 或 `loop` 的 `cursor-fix` 动作,均为**历史叙述**,现状以 Pi-only + 显式 `cursor-prompt` sidecar 为准。
|
|
59
61
|
|
|
60
62
|
## 已收敛为 archive / 历史基线(非未来)
|
|
61
63
|
|