@principles/core 1.259.0 → 1.260.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/runtime-v2/__tests__/activation-compatibility-read-model.test.d.ts +2 -0
- package/dist/runtime-v2/__tests__/activation-compatibility-read-model.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/activation-compatibility-read-model.test.js +148 -0
- package/dist/runtime-v2/__tests__/activation-compatibility-read-model.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/architecture-regression.test.js +13 -3
- package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/evaluator-repair-loop.test.js +14 -6
- package/dist/runtime-v2/__tests__/evaluator-repair-loop.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js +1 -0
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice.test.js +5 -0
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/golden-trace.test.js +2 -2
- package/dist/runtime-v2/__tests__/golden-trace.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/internalization-contracts.test.js +4 -6
- package/dist/runtime-v2/__tests__/internalization-contracts.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/internalization-orchestrator.test.js +4 -1
- package/dist/runtime-v2/__tests__/internalization-orchestrator.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/internalization-state-machine.test.js +3 -2
- package/dist/runtime-v2/__tests__/internalization-state-machine.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/pain-to-principle-service.test.js +47 -0
- package/dist/runtime-v2/__tests__/pain-to-principle-service.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/rollout-reviewer-runner-vslice.test.js +66 -1
- package/dist/runtime-v2/__tests__/rollout-reviewer-runner-vslice.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/rollout-reviewer-verdict-paths.test.d.ts +2 -0
- package/dist/runtime-v2/__tests__/rollout-reviewer-verdict-paths.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/rollout-reviewer-verdict-paths.test.js +234 -0
- package/dist/runtime-v2/__tests__/rollout-reviewer-verdict-paths.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/rule-host-evaluator.test.js +4 -4
- package/dist/runtime-v2/__tests__/rule-host-evaluator.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/story-a-demo.test.js +8 -8
- package/dist/runtime-v2/__tests__/story-a-demo.test.js.map +1 -1
- package/dist/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.js +23 -1
- package/dist/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.js.map +1 -1
- package/dist/runtime-v2/activation/prompt-activation-reader-contract.d.ts +11 -0
- package/dist/runtime-v2/activation/prompt-activation-reader-contract.d.ts.map +1 -1
- package/dist/runtime-v2/activation/prompt-activation-reader-contract.js +11 -4
- package/dist/runtime-v2/activation/prompt-activation-reader-contract.js.map +1 -1
- package/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js +31 -0
- package/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js.map +1 -1
- package/dist/runtime-v2/activation-compatibility-read-model.d.ts +24 -0
- package/dist/runtime-v2/activation-compatibility-read-model.d.ts.map +1 -0
- package/dist/runtime-v2/activation-compatibility-read-model.js +132 -0
- package/dist/runtime-v2/activation-compatibility-read-model.js.map +1 -0
- package/dist/runtime-v2/adapter/output-schema-registry.d.ts.map +1 -1
- package/dist/runtime-v2/adapter/output-schema-registry.js +2 -0
- package/dist/runtime-v2/adapter/output-schema-registry.js.map +1 -1
- package/dist/runtime-v2/config/__tests__/pd-validate-profile-legacy-keys.test.d.ts +13 -0
- package/dist/runtime-v2/config/__tests__/pd-validate-profile-legacy-keys.test.d.ts.map +1 -0
- package/dist/runtime-v2/config/__tests__/pd-validate-profile-legacy-keys.test.js +73 -0
- package/dist/runtime-v2/config/__tests__/pd-validate-profile-legacy-keys.test.js.map +1 -0
- package/dist/runtime-v2/config/pd-config-types.d.ts +0 -23
- package/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
- package/dist/runtime-v2/config/pd-config-types.js.map +1 -1
- package/dist/runtime-v2/config/pd-profile-constants.d.ts +11 -5
- package/dist/runtime-v2/config/pd-profile-constants.d.ts.map +1 -1
- package/dist/runtime-v2/config/pd-profile-constants.js +10 -45
- package/dist/runtime-v2/config/pd-profile-constants.js.map +1 -1
- package/dist/runtime-v2/config/pd-validate-profile.d.ts.map +1 -1
- package/dist/runtime-v2/config/pd-validate-profile.js +27 -135
- package/dist/runtime-v2/config/pd-validate-profile.js.map +1 -1
- package/dist/runtime-v2/core-principles/core-principle-registry.d.ts +4 -4
- package/dist/runtime-v2/core-principles/core-principle-registry.d.ts.map +1 -1
- package/dist/runtime-v2/core-principles/core-principle-registry.js +2 -2
- package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +7 -2
- package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
- package/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
- package/dist/runtime-v2/feature-flags/feature-flag-contract.js +9 -5
- package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/dist/runtime-v2/golden-trace-replay-validator.d.ts.map +1 -1
- package/dist/runtime-v2/golden-trace-replay-validator.js +0 -2
- package/dist/runtime-v2/golden-trace-replay-validator.js.map +1 -1
- package/dist/runtime-v2/golden-trace.d.ts.map +1 -1
- package/dist/runtime-v2/golden-trace.js +0 -3
- package/dist/runtime-v2/golden-trace.js.map +1 -1
- package/dist/runtime-v2/index.d.ts +16 -10
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +10 -7
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/a-liveness-reconciliation.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/a-liveness-reconciliation.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/a-liveness-reconciliation.test.js +157 -0
- package/dist/runtime-v2/internalization/__tests__/a-liveness-reconciliation.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.js +29 -0
- package/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/crash-liveness-regressions.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/crash-liveness-regressions.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/crash-liveness-regressions.test.js +311 -0
- package/dist/runtime-v2/internalization/__tests__/crash-liveness-regressions.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/external-review-p0-regressions.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/external-review-p0-regressions.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/external-review-p0-regressions.test.js +171 -0
- package/dist/runtime-v2/internalization/__tests__/external-review-p0-regressions.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/internalization-task-guards.test.js +11 -2
- package/dist/runtime-v2/internalization/__tests__/internalization-task-guards.test.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/internalization-transition-decision.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/internalization-transition-decision.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/internalization-transition-decision.test.js +335 -0
- package/dist/runtime-v2/internalization/__tests__/internalization-transition-decision.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/legacy-rule-contract-scanner.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/legacy-rule-contract-scanner.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/legacy-rule-contract-scanner.test.js +101 -0
- package/dist/runtime-v2/internalization/__tests__/legacy-rule-contract-scanner.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/mvp-core-loop-journeys.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/mvp-core-loop-journeys.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/mvp-core-loop-journeys.test.js +515 -0
- package/dist/runtime-v2/internalization/__tests__/mvp-core-loop-journeys.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/restart-safety.e2e.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/restart-safety.e2e.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/restart-safety.e2e.test.js +167 -0
- package/dist/runtime-v2/internalization/__tests__/restart-safety.e2e.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/verdict-drift-regressions.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/verdict-drift-regressions.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/verdict-drift-regressions.test.js +601 -0
- package/dist/runtime-v2/internalization/__tests__/verdict-drift-regressions.test.js.map +1 -0
- package/dist/runtime-v2/internalization/artificer-runner.d.ts +7 -0
- package/dist/runtime-v2/internalization/artificer-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/artificer-runner.js +18 -2
- package/dist/runtime-v2/internalization/artificer-runner.js.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts +49 -0
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.js +390 -98
- package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/dist/runtime-v2/internalization/index.d.ts +2 -0
- package/dist/runtime-v2/internalization/index.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/index.js +1 -0
- package/dist/runtime-v2/internalization/index.js.map +1 -1
- package/dist/runtime-v2/internalization/internalization-orchestrator.d.ts +127 -0
- package/dist/runtime-v2/internalization/internalization-orchestrator.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/internalization-orchestrator.js +345 -1
- package/dist/runtime-v2/internalization/internalization-orchestrator.js.map +1 -1
- package/dist/runtime-v2/internalization/internalization-task-guards.d.ts +9 -2
- package/dist/runtime-v2/internalization/internalization-task-guards.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/internalization-task-guards.js +14 -3
- package/dist/runtime-v2/internalization/internalization-task-guards.js.map +1 -1
- package/dist/runtime-v2/internalization/internalization-transition-decision.d.ts +61 -0
- package/dist/runtime-v2/internalization/internalization-transition-decision.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/internalization-transition-decision.js +84 -0
- package/dist/runtime-v2/internalization/internalization-transition-decision.js.map +1 -0
- package/dist/runtime-v2/internalization/legacy-rule-contract-scanner.d.ts +51 -0
- package/dist/runtime-v2/internalization/legacy-rule-contract-scanner.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/legacy-rule-contract-scanner.js +81 -0
- package/dist/runtime-v2/internalization/legacy-rule-contract-scanner.js.map +1 -0
- package/dist/runtime-v2/internalization/peer-runner-contracts.d.ts +17 -1
- package/dist/runtime-v2/internalization/peer-runner-contracts.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/peer-runner-contracts.js.map +1 -1
- package/dist/runtime-v2/internalization/pitask-metadata.d.ts +99 -2
- package/dist/runtime-v2/internalization/pitask-metadata.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/pitask-metadata.js +148 -0
- package/dist/runtime-v2/internalization/pitask-metadata.js.map +1 -1
- package/dist/runtime-v2/internalization/refiner-sandbox-wrapper.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/refiner-sandbox-wrapper.js +0 -2
- package/dist/runtime-v2/internalization/refiner-sandbox-wrapper.js.map +1 -1
- package/dist/runtime-v2/internalization/rollout-reviewer-runner.d.ts +147 -0
- package/dist/runtime-v2/internalization/rollout-reviewer-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/rollout-reviewer-runner.js +672 -1
- package/dist/runtime-v2/internalization/rollout-reviewer-runner.js.map +1 -1
- package/dist/runtime-v2/internalization/rule-host-contracts.d.ts +0 -3
- package/dist/runtime-v2/internalization/rule-host-contracts.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/rule-host-helpers.d.ts +4 -2
- package/dist/runtime-v2/internalization/rule-host-helpers.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/rule-host-helpers.js +4 -2
- package/dist/runtime-v2/internalization/rule-host-helpers.js.map +1 -1
- package/dist/runtime-v2/internalization/scribe-runner.d.ts +2 -0
- package/dist/runtime-v2/internalization/scribe-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/scribe-runner.js +21 -1
- package/dist/runtime-v2/internalization/scribe-runner.js.map +1 -1
- package/dist/runtime-v2/pain-signal-observability.js +3 -3
- package/dist/runtime-v2/pain-signal-observability.js.map +1 -1
- package/dist/runtime-v2/runner/base-peer-runner.d.ts +9 -0
- package/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
- package/dist/runtime-v2/runner/base-peer-runner.js +22 -0
- package/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
- package/dist/runtime-v2/signal-collector/__tests__/llm-payload-contract.test.d.ts +2 -0
- package/dist/runtime-v2/signal-collector/__tests__/llm-payload-contract.test.d.ts.map +1 -0
- package/dist/runtime-v2/signal-collector/__tests__/llm-payload-contract.test.js +130 -0
- package/dist/runtime-v2/signal-collector/__tests__/llm-payload-contract.test.js.map +1 -0
- package/dist/runtime-v2/signal-collector/index.d.ts +1 -1
- package/dist/runtime-v2/signal-collector/index.d.ts.map +1 -1
- package/dist/runtime-v2/signal-collector/index.js +1 -1
- package/dist/runtime-v2/signal-collector/index.js.map +1 -1
- package/dist/runtime-v2/signal-collector/llm-stage.d.ts +15 -0
- package/dist/runtime-v2/signal-collector/llm-stage.d.ts.map +1 -1
- package/dist/runtime-v2/signal-collector/llm-stage.js +28 -0
- package/dist/runtime-v2/signal-collector/llm-stage.js.map +1 -1
- package/dist/runtime-v2/signal-collector/types.d.ts +9 -1
- package/dist/runtime-v2/signal-collector/types.d.ts.map +1 -1
- package/dist/runtime-v2/signal-collector/types.js +13 -1
- package/dist/runtime-v2/signal-collector/types.js.map +1 -1
- package/dist/runtime-v2/store/reconciliation-cursor-store.d.ts +23 -0
- package/dist/runtime-v2/store/reconciliation-cursor-store.d.ts.map +1 -0
- package/dist/runtime-v2/store/reconciliation-cursor-store.js +34 -0
- package/dist/runtime-v2/store/reconciliation-cursor-store.js.map +1 -0
- package/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
- package/dist/runtime-v2/store/sqlite-connection.js +7 -0
- package/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
- package/dist/runtime-v2/store/task/memory-task-store.d.ts.map +1 -1
- package/dist/runtime-v2/store/task/memory-task-store.js +22 -0
- package/dist/runtime-v2/store/task/memory-task-store.js.map +1 -1
- package/dist/runtime-v2/store/task/sqlite-task-store.d.ts.map +1 -1
- package/dist/runtime-v2/store/task/sqlite-task-store.js +20 -0
- package/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
- package/dist/runtime-v2/store/task/task-store.d.ts +14 -0
- package/dist/runtime-v2/store/task/task-store.d.ts.map +1 -1
- package/dist/runtime-v2/story-a-demo.d.ts.map +1 -1
- package/dist/runtime-v2/story-a-demo.js +2 -0
- package/dist/runtime-v2/story-a-demo.js.map +1 -1
- package/dist/runtime-v2/tools/artificer-l2-tool-contract.d.ts.map +1 -1
- package/dist/runtime-v2/tools/artificer-l2-tool-contract.js +0 -4
- package/dist/runtime-v2/tools/artificer-l2-tool-contract.js.map +1 -1
- package/dist/runtime-v2/types/event-payload.d.ts +1 -20
- package/dist/runtime-v2/types/event-payload.d.ts.map +1 -1
- package/dist/runtime-v2/types/event-payload.js +0 -12
- package/dist/runtime-v2/types/event-payload.js.map +1 -1
- package/dist/runtime-v2/types/event-types.d.ts +3 -18
- package/dist/runtime-v2/types/event-types.d.ts.map +1 -1
- package/dist/runtime-v2/types/event-types.js +0 -8
- package/dist/runtime-v2/types/event-types.js.map +1 -1
- package/dist/runtime-v2/types/index.d.ts +3 -3
- package/dist/runtime-v2/types/index.d.ts.map +1 -1
- package/dist/runtime-v2/types/index.js +2 -2
- package/dist/runtime-v2/types/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.d.ts +0 -2
- package/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.d.ts.map +0 -1
- package/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.js +0 -149
- package/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.js.map +0 -1
- package/dist/runtime-v2/thinking-models/index.d.ts +0 -3
- package/dist/runtime-v2/thinking-models/index.d.ts.map +0 -1
- package/dist/runtime-v2/thinking-models/index.js +0 -3
- package/dist/runtime-v2/thinking-models/index.js.map +0 -1
- package/dist/runtime-v2/thinking-models/thinking-models-policy.d.ts +0 -73
- package/dist/runtime-v2/thinking-models/thinking-models-policy.d.ts.map +0 -1
- package/dist/runtime-v2/thinking-models/thinking-models-policy.js +0 -227
- package/dist/runtime-v2/thinking-models/thinking-models-policy.js.map +0 -1
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InternalizationTransitionDecision — 单一迁移决策 (P0-D, MVP_CORE_LOOP_CONTRACT INV-02/INV-07)。
|
|
3
|
+
*
|
|
4
|
+
* 审计背景 (ISSUE-005): 修复前 auto-consumer 对 runResult.status === 'succeeded'
|
|
5
|
+
* 一律 commitNextTaskProposal → evaluator needs_revision 也会 seed rollout_reviewer
|
|
6
|
+
* (错误并行分支); 即使打开 PRI-509 repair flag, repair_seeded 仍 fall through 到
|
|
7
|
+
* succeeded → 双播种。
|
|
8
|
+
*
|
|
9
|
+
* 语义: runner 输出内容(evaluation/review 的 verdict)与状态迁移必须经同一个
|
|
10
|
+
* 纯决策函数仲裁。非终态必须满足 INV-07: 有自动 successor 或有 Owner action。
|
|
11
|
+
*
|
|
12
|
+
* P0-3 (外部复核): 决策型 runner 的 verdict **fail-closed** —
|
|
13
|
+
* - durable runnerDecision (任务元数据) 是第一判据;
|
|
14
|
+
* - 缺失时,只有 runs.output_payload 里**显式可解析**的历史 verdict 才可作为
|
|
15
|
+
* legacy 判据 (评估器/评审器的真实产物,不是猜测);
|
|
16
|
+
* - 两者皆无 → NOT_ADVANCEABLE (blocked, 需人工/reconciliation),
|
|
17
|
+
* 禁止 "missing decision = legacy ADVANCE" —— 那会复活审计要消灭的
|
|
18
|
+
* needs_revision 错误旁路。
|
|
19
|
+
*/
|
|
20
|
+
const EVALUATOR_VERDICTS = new Set(['approved', 'needs_revision', 'rejected']);
|
|
21
|
+
const ROLLOUT_VERDICTS = new Set(['approve_rollout', 'needs_revision', 'reject']);
|
|
22
|
+
/**
|
|
23
|
+
* 纯决策: 依据任务状态 + runner 判定,决定该任务完成后链上应发生什么。
|
|
24
|
+
* 调用方 (orchestrator.commitNextTaskProposal) 是唯一后继播种漏斗。
|
|
25
|
+
*/
|
|
26
|
+
export function decideInternalizationTransition(input) {
|
|
27
|
+
const { taskKind, taskStatus, runnerDecision, legacyRunnerDecision, isRepairTask, revisionCount } = input;
|
|
28
|
+
// 1. 状态门: 只有 succeeded 的任务参与推进仲裁
|
|
29
|
+
if (taskStatus === 'needs_human_review') {
|
|
30
|
+
return { kind: 'HUMAN_REVIEW_REQUIRED', reason: 'task_awaiting_owner_attention' };
|
|
31
|
+
}
|
|
32
|
+
if (taskStatus !== 'succeeded') {
|
|
33
|
+
return { kind: 'NOT_ADVANCEABLE', reason: `task_status_${taskStatus}` };
|
|
34
|
+
}
|
|
35
|
+
// 2. Repair 任务 (artificer + repairPayload) 完成 → reopen 来源 evaluator,
|
|
36
|
+
// 不走正常后继 seeding (evaluator 任务已存在于同 lineage, 稳定 id 会冲突)。
|
|
37
|
+
if (isRepairTask && taskKind === 'artificer') {
|
|
38
|
+
return { kind: 'REOPEN_SOURCE_EVALUATOR', reason: `repair_round_complete_revision_${revisionCount}` };
|
|
39
|
+
}
|
|
40
|
+
// 3. 决策型 runner: durable verdict 第一,显式 legacy verdict 第二,皆无 → 阻断 (P0-3)
|
|
41
|
+
if (taskKind === 'evaluator') {
|
|
42
|
+
const verdict = runnerDecision
|
|
43
|
+
?? (legacyRunnerDecision !== undefined && EVALUATOR_VERDICTS.has(legacyRunnerDecision) ? legacyRunnerDecision : undefined);
|
|
44
|
+
if (verdict === undefined) {
|
|
45
|
+
return { kind: 'BLOCKED_MISSING_VERDICT', reason: 'evaluator_verdict_missing_durable_and_legacy' };
|
|
46
|
+
}
|
|
47
|
+
if (verdict === 'approved') {
|
|
48
|
+
return { kind: 'ADVANCE', reason: 'evaluator_approved' };
|
|
49
|
+
}
|
|
50
|
+
if (verdict === 'needs_revision') {
|
|
51
|
+
return { kind: 'REVISION_REQUIRED', reason: 'evaluator_needs_revision_repair_loop' };
|
|
52
|
+
}
|
|
53
|
+
return { kind: 'TERMINAL_REJECT', reason: 'evaluator_rejected' };
|
|
54
|
+
}
|
|
55
|
+
if (taskKind === 'rollout_reviewer') {
|
|
56
|
+
const verdict = runnerDecision
|
|
57
|
+
?? (legacyRunnerDecision !== undefined && ROLLOUT_VERDICTS.has(legacyRunnerDecision) ? legacyRunnerDecision : undefined);
|
|
58
|
+
if (verdict === undefined) {
|
|
59
|
+
return { kind: 'BLOCKED_MISSING_VERDICT', reason: 'rollout_verdict_missing_durable_and_legacy' };
|
|
60
|
+
}
|
|
61
|
+
if (verdict === 'approve_rollout') {
|
|
62
|
+
// job-graph 终节点: ADVANCE 语义 = activation dispatch (runner 侧已内联执行)
|
|
63
|
+
return { kind: 'ADVANCE', reason: 'rollout_approved_dispatch_activation' };
|
|
64
|
+
}
|
|
65
|
+
if (verdict === 'needs_revision') {
|
|
66
|
+
return { kind: 'REVISION_REQUIRED', reason: 'rollout_needs_revision_routed_upstream' };
|
|
67
|
+
}
|
|
68
|
+
return { kind: 'TERMINAL_REJECT', reason: 'rollout_rejected_no_activation' };
|
|
69
|
+
}
|
|
70
|
+
// 4. 非决策型 runner (dreamer/philosopher/scribe/artificer 常规): 正常推进
|
|
71
|
+
return { kind: 'ADVANCE', reason: `task_succeeded_${taskKind}` };
|
|
72
|
+
}
|
|
73
|
+
/** 从 PITaskRecord 提取决策输入的便利投影 (legacy 判据由调用方解析后传入) */
|
|
74
|
+
export function transitionInputFromTask(piTask, legacyRunnerDecision) {
|
|
75
|
+
return {
|
|
76
|
+
taskKind: piTask.taskKind,
|
|
77
|
+
taskStatus: piTask.status,
|
|
78
|
+
runnerDecision: piTask.runnerDecision,
|
|
79
|
+
legacyRunnerDecision,
|
|
80
|
+
isRepairTask: piTask.repairPayload !== undefined,
|
|
81
|
+
revisionCount: piTask.revisionCount ?? 0,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=internalization-transition-decision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internalization-transition-decision.js","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/internalization-transition-decision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAwCH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;AAC/E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC;AAElF;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAAC,KAA8B;IAC5E,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAE1G,iCAAiC;IACjC,IAAI,UAAU,KAAK,oBAAoB,EAAE,CAAC;QACxC,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;IACpF,CAAC;IACD,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe,UAAU,EAAE,EAAE,CAAC;IAC1E,CAAC;IAED,qEAAqE;IACrE,4DAA4D;IAC5D,IAAI,YAAY,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7C,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,kCAAkC,aAAa,EAAE,EAAE,CAAC;IACxG,CAAC;IAED,wEAAwE;IACxE,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,cAAc;eACzB,CAAC,oBAAoB,KAAK,SAAS,IAAI,kBAAkB,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7H,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;QACrG,CAAC;QACD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;QAC3D,CAAC;QACD,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACjC,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC;QACvF,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACnE,CAAC;IAED,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,cAAc;eACzB,CAAC,oBAAoB,KAAK,SAAS,IAAI,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3H,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,4CAA4C,EAAE,CAAC;QACnG,CAAC;QACD,IAAI,OAAO,KAAK,iBAAiB,EAAE,CAAC;YAClC,kEAAkE;YAClE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC;QAC7E,CAAC;QACD,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACjC,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,wCAAwC,EAAE,CAAC;QACzF,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;IAC/E,CAAC;IAED,iEAAiE;IACjE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,QAAQ,EAAE,EAAE,CAAC;AACnE,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,uBAAuB,CACrC,MAAoB,EACpB,oBAA6B;IAE7B,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,oBAAoB;QACpB,YAAY,EAAE,MAAM,CAAC,aAAa,KAAK,SAAS;QAChD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,CAAC;KACzC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Legacy RuleHost contract dependency scanner (2026-08-19).
|
|
3
|
+
*
|
|
4
|
+
* When a public RuleHost contract symbol is retired (e.g.
|
|
5
|
+
* `RuleHostInput.session.recentThinking`, `workspace.planStatus`,
|
|
6
|
+
* `workspace.hasPlanFile`, the `getPlanStatus()`/`hasPlanFile()` helpers),
|
|
7
|
+
* source-level deletion is not enough: persisted, owner-approved RuleCode in
|
|
8
|
+
* existing workspaces may still reference the symbol. Executing such a rule
|
|
9
|
+
* against the new contract silently changes its semantics (`undefined`
|
|
10
|
+
* instead of a value) — the most dangerous failure mode because nothing
|
|
11
|
+
* throws and the owner-approved behavior drifts quietly.
|
|
12
|
+
*
|
|
13
|
+
* This scanner is the shared detection point for:
|
|
14
|
+
* - runtime load backstops (plugin RuleHost + host-runtime gate) — a rule
|
|
15
|
+
* with a retired-contract dependency is NOT executed;
|
|
16
|
+
* - upgrade preflights (installer, console update) — refuse to replace the
|
|
17
|
+
* runtime while an active rule depends on a removed contract.
|
|
18
|
+
*
|
|
19
|
+
* Matching is deliberately conservative: a symbol mentioned anywhere in the
|
|
20
|
+
* implementation source (including comments) is reported. A false positive
|
|
21
|
+
* costs one migration/deactivation; a false negative silently changes the
|
|
22
|
+
* behavior of an owner-approved rule.
|
|
23
|
+
*/
|
|
24
|
+
/** Retired public RuleHost contract symbols and how they appear in RuleCode. */
|
|
25
|
+
export type LegacyRuleContractSymbol = 'recentThinking' | 'planStatus' | 'hasPlanFile' | 'getPlanStatus' | 'hasPlanFileHelper';
|
|
26
|
+
/** A rule implementation to scan, with its lineage for owner-facing output. */
|
|
27
|
+
export interface LegacyRuleContractRuleSource {
|
|
28
|
+
activationId?: string;
|
|
29
|
+
artifactId: string;
|
|
30
|
+
ruleId?: string;
|
|
31
|
+
principleId?: string;
|
|
32
|
+
/** Raw RuleCode source as persisted in the artifact. */
|
|
33
|
+
implementationCode: string;
|
|
34
|
+
}
|
|
35
|
+
/** One retired-symbol usage found in one active rule. */
|
|
36
|
+
export interface LegacyRuleContractFinding {
|
|
37
|
+
activationId?: string;
|
|
38
|
+
artifactId: string;
|
|
39
|
+
ruleId?: string;
|
|
40
|
+
principleId?: string;
|
|
41
|
+
symbol: LegacyRuleContractSymbol;
|
|
42
|
+
channel: 'code_tool_hook';
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Scan persisted RuleCode sources for retired RuleHost contract symbols.
|
|
46
|
+
* Pure function — no I/O; callers own loading the code from persistence.
|
|
47
|
+
*/
|
|
48
|
+
export declare function scanLegacyRuleContractDependencies(rules: readonly LegacyRuleContractRuleSource[]): LegacyRuleContractFinding[];
|
|
49
|
+
/** Human-readable remediation text shared by all consumers of the scanner. */
|
|
50
|
+
export declare function formatLegacyRuleContractRemediation(findings: readonly LegacyRuleContractFinding[]): string;
|
|
51
|
+
//# sourceMappingURL=legacy-rule-contract-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-rule-contract-scanner.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/legacy-rule-contract-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,gFAAgF;AAChF,MAAM,MAAM,wBAAwB,GAChC,gBAAgB,GAChB,YAAY,GACZ,aAAa,GACb,eAAe,GACf,mBAAmB,CAAC;AAExB,+EAA+E;AAC/E,MAAM,WAAW,4BAA4B;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,yDAAyD;AACzD,MAAM,WAAW,yBAAyB;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,wBAAwB,CAAC;IACjC,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAmBD;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,SAAS,4BAA4B,EAAE,GAC7C,yBAAyB,EAAE,CAuB7B;AAED,8EAA8E;AAC9E,wBAAgB,mCAAmC,CAAC,QAAQ,EAAE,SAAS,yBAAyB,EAAE,GAAG,MAAM,CAgB1G"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Legacy RuleHost contract dependency scanner (2026-08-19).
|
|
3
|
+
*
|
|
4
|
+
* When a public RuleHost contract symbol is retired (e.g.
|
|
5
|
+
* `RuleHostInput.session.recentThinking`, `workspace.planStatus`,
|
|
6
|
+
* `workspace.hasPlanFile`, the `getPlanStatus()`/`hasPlanFile()` helpers),
|
|
7
|
+
* source-level deletion is not enough: persisted, owner-approved RuleCode in
|
|
8
|
+
* existing workspaces may still reference the symbol. Executing such a rule
|
|
9
|
+
* against the new contract silently changes its semantics (`undefined`
|
|
10
|
+
* instead of a value) — the most dangerous failure mode because nothing
|
|
11
|
+
* throws and the owner-approved behavior drifts quietly.
|
|
12
|
+
*
|
|
13
|
+
* This scanner is the shared detection point for:
|
|
14
|
+
* - runtime load backstops (plugin RuleHost + host-runtime gate) — a rule
|
|
15
|
+
* with a retired-contract dependency is NOT executed;
|
|
16
|
+
* - upgrade preflights (installer, console update) — refuse to replace the
|
|
17
|
+
* runtime while an active rule depends on a removed contract.
|
|
18
|
+
*
|
|
19
|
+
* Matching is deliberately conservative: a symbol mentioned anywhere in the
|
|
20
|
+
* implementation source (including comments) is reported. A false positive
|
|
21
|
+
* costs one migration/deactivation; a false negative silently changes the
|
|
22
|
+
* behavior of an owner-approved rule.
|
|
23
|
+
*/
|
|
24
|
+
// Field-form vs helper-form are distinguished so remediation guidance can
|
|
25
|
+
// name the exact contract element. A call site (`hasPlanFile(`) is reported
|
|
26
|
+
// once as the helper form — the field pattern excludes call sites with a
|
|
27
|
+
// negative lookahead so one occurrence never yields two findings.
|
|
28
|
+
const SYMBOL_PATTERNS = [
|
|
29
|
+
{ symbol: 'recentThinking', pattern: /\brecentThinking\b/ },
|
|
30
|
+
{ symbol: 'planStatus', pattern: /\bplanStatus\b/ },
|
|
31
|
+
{ symbol: 'getPlanStatus', pattern: /\bgetPlanStatus\s*\(/ },
|
|
32
|
+
{ symbol: 'hasPlanFileHelper', pattern: /\bhasPlanFile\s*\(/ },
|
|
33
|
+
{ symbol: 'hasPlanFile', pattern: /\bhasPlanFile\b(?!\s*\()/ },
|
|
34
|
+
];
|
|
35
|
+
/**
|
|
36
|
+
* Scan persisted RuleCode sources for retired RuleHost contract symbols.
|
|
37
|
+
* Pure function — no I/O; callers own loading the code from persistence.
|
|
38
|
+
*/
|
|
39
|
+
export function scanLegacyRuleContractDependencies(rules) {
|
|
40
|
+
const findings = [];
|
|
41
|
+
for (const rule of rules) {
|
|
42
|
+
if (typeof rule.implementationCode !== 'string' || rule.implementationCode.length === 0) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const seen = new Set();
|
|
46
|
+
for (const { symbol, pattern } of SYMBOL_PATTERNS) {
|
|
47
|
+
if (seen.has(symbol))
|
|
48
|
+
continue;
|
|
49
|
+
if (pattern.test(rule.implementationCode)) {
|
|
50
|
+
seen.add(symbol);
|
|
51
|
+
findings.push({
|
|
52
|
+
...(rule.activationId !== undefined ? { activationId: rule.activationId } : {}),
|
|
53
|
+
artifactId: rule.artifactId,
|
|
54
|
+
...(rule.ruleId !== undefined ? { ruleId: rule.ruleId } : {}),
|
|
55
|
+
...(rule.principleId !== undefined ? { principleId: rule.principleId } : {}),
|
|
56
|
+
symbol,
|
|
57
|
+
channel: 'code_tool_hook',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return findings;
|
|
63
|
+
}
|
|
64
|
+
/** Human-readable remediation text shared by all consumers of the scanner. */
|
|
65
|
+
export function formatLegacyRuleContractRemediation(findings) {
|
|
66
|
+
const byRule = new Map();
|
|
67
|
+
for (const f of findings) {
|
|
68
|
+
const key = f.ruleId ?? f.artifactId;
|
|
69
|
+
const list = byRule.get(key) ?? [];
|
|
70
|
+
list.push(f);
|
|
71
|
+
byRule.set(key, list);
|
|
72
|
+
}
|
|
73
|
+
const lines = [...byRule.entries()].map(([rule, fs]) => ` - ${rule}${fs[0]?.activationId ? ` (activation ${fs[0].activationId})` : ''}: ${fs.map(f => f.symbol).join(', ')}`);
|
|
74
|
+
return [
|
|
75
|
+
'One or more active owner-approved rules depend on a RuleHost contract symbol removed by this version.',
|
|
76
|
+
'Affected rules:',
|
|
77
|
+
...lines,
|
|
78
|
+
'Next: migrate or deactivate the listed rules before upgrading. The old installation is untouched.',
|
|
79
|
+
].join('\n');
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=legacy-rule-contract-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-rule-contract-scanner.js","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/legacy-rule-contract-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* @see docs/adr/0003-peer-agent-state-machine-orchestration.md
|
|
15
15
|
*/
|
|
16
16
|
import type { TaskRecord } from '../task-status.js';
|
|
17
|
-
import type { RepairPayload } from './pitask-metadata.js';
|
|
17
|
+
import type { RepairPayload, RunnerDecision, RolloutRevisionPayload, RunnerCompletionIntent } from './pitask-metadata.js';
|
|
18
18
|
/**
|
|
19
19
|
* The 4 channels through which principle internalization can occur.
|
|
20
20
|
*
|
|
@@ -105,6 +105,22 @@ export interface PITaskRecord extends TaskRecord {
|
|
|
105
105
|
adversarialFeedback?: string;
|
|
106
106
|
/** Evaluator repair payload (PRI-509); present only on artificer repair tasks. */
|
|
107
107
|
repairPayload?: RepairPayload;
|
|
108
|
+
/** Runner decision (evaluator/rollout_reviewer LLM verdict) — transition control (INV-02). */
|
|
109
|
+
runnerDecision?: RunnerDecision;
|
|
110
|
+
/** Times this task has been reopened for revision (bounded revision budget). */
|
|
111
|
+
revisionCount?: number;
|
|
112
|
+
/** Feedback injected when this task is reopened by rollout needs_revision routing. */
|
|
113
|
+
revisionFeedback?: string;
|
|
114
|
+
/** P0-4 stable revision identity — same-cause reopen replays are no-ops. */
|
|
115
|
+
revisionCauseId?: string;
|
|
116
|
+
/** Rollout needs_revision routing payload; present on rollout_reviewer tasks that routed a revision. */
|
|
117
|
+
rolloutRevisionPayload?: RolloutRevisionPayload;
|
|
118
|
+
/**
|
|
119
|
+
* P0 (verdict drift): durable completion intent of one LLM verdict. Pending
|
|
120
|
+
* intent in the same revision epoch is the recovery authority — re-runs
|
|
121
|
+
* resume it instead of re-invoking the LLM. See pitask-metadata.ts.
|
|
122
|
+
*/
|
|
123
|
+
completionIntent?: RunnerCompletionIntent;
|
|
108
124
|
}
|
|
109
125
|
/**
|
|
110
126
|
* All valid peer runner kinds. Useful for validation and iteration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-runner-contracts.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/peer-runner-contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"peer-runner-contracts.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/peer-runner-contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-runner-contracts.js","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/peer-runner-contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"peer-runner-contracts.js","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/peer-runner-contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,8 +71,8 @@ export interface PITaskMetadata {
|
|
|
71
71
|
/**
|
|
72
72
|
* Prior adversarial replay failures to inject into a Round-2+ Artificer
|
|
73
73
|
* prompt (RuleHost MVP, PRI-428). Set by runAdversarialLoop when a prior
|
|
74
|
-
* Evaluator round returned needs_revision. Treated as opaque text by
|
|
75
|
-
* metadata layer; the ArtificerRunner forwards it to the prompt builder.
|
|
74
|
+
* Evaluator round returned needs_revision. Treated as opaque text by
|
|
75
|
+
* the metadata layer; the ArtificerRunner forwards it to the prompt builder.
|
|
76
76
|
*/
|
|
77
77
|
adversarialFeedback?: string;
|
|
78
78
|
/**
|
|
@@ -82,6 +82,93 @@ export interface PITaskMetadata {
|
|
|
82
82
|
* can address each required change. Undefined on Round-1 artificer tasks.
|
|
83
83
|
*/
|
|
84
84
|
repairPayload?: RepairPayload;
|
|
85
|
+
/**
|
|
86
|
+
* Runner 判定(evaluator / rollout_reviewer 的 LLM 决策),由 runner 在
|
|
87
|
+
* succeedTask 收尾时写入。commitNextTaskProposal 依据它做单一迁移决策
|
|
88
|
+
* (MVP_CORE_LOOP_CONTRACT INV-02: needs_revision 不得同时 seed 正常后继)。
|
|
89
|
+
*/
|
|
90
|
+
runnerDecision?: RunnerDecision;
|
|
91
|
+
/**
|
|
92
|
+
* 该任务被 revision reopen 的次数(每次 reopen +1)。revision 有界性的
|
|
93
|
+
* 一部分: 配合 rolloutRevisionPayload.revisionIteration / repairIteration
|
|
94
|
+
* 构成 lineage 级 revision budget。
|
|
95
|
+
*/
|
|
96
|
+
revisionCount?: number;
|
|
97
|
+
/**
|
|
98
|
+
* Rollout reviewer needs_revision 时注入到被 reopen 修订目标的反馈
|
|
99
|
+
* (scribe / artificer 的 prompt 侧注入,由各 runner buildContext 消费)。
|
|
100
|
+
*/
|
|
101
|
+
revisionFeedback?: string;
|
|
102
|
+
/**
|
|
103
|
+
* P0-4 revision identity: 触发本次 reopen 的稳定 cause 标识
|
|
104
|
+
* (如 `repair-<repairTaskId>` / `rollout-<rolloutTaskId>-r<iteration>`)。
|
|
105
|
+
* reopenTaskForRevision 对相同 causeId 的重放是真正 no-op。
|
|
106
|
+
*/
|
|
107
|
+
revisionCauseId?: string;
|
|
108
|
+
/**
|
|
109
|
+
* Rollout reviewer needs_revision 的修订路由载荷: 记录修订目标 stage、
|
|
110
|
+
* 迭代号与来源,保证 revision budget 可判定 (MVP_CORE_LOOP_CONTRACT INV-07)。
|
|
111
|
+
*/
|
|
112
|
+
rolloutRevisionPayload?: RolloutRevisionPayload;
|
|
113
|
+
/**
|
|
114
|
+
* P0 (verdict drift): 一次 LLM verdict 的 durable completion intent。
|
|
115
|
+
*
|
|
116
|
+
* 与 runnerDecision 在同一次 metadata 写入中落库 (原子): intent 存在且
|
|
117
|
+
* status='pending' ⇒ 该 verdict 的治理 transition 尚未完成。同一
|
|
118
|
+
* execution epoch 内 crash/retry/restart 重跑时,run() 入口必须 RESUME
|
|
119
|
+
* 该 intent (跳过 LLM,幂等重放 effects),禁止让新的 LLM 输出覆盖它
|
|
120
|
+
* —— LLM 非确定性下,重问可能产生 approve/reject 漂移,与已发生的
|
|
121
|
+
* side effect (activation / repair seed / validation) 形成治理矛盾。
|
|
122
|
+
*
|
|
123
|
+
* epoch 语义: revisionEpoch = 落库时的 revisionCount。真正的 revision
|
|
124
|
+
* reopen 会递增 revisionCount 并清空本字段 (新 epoch 允许新 verdict);
|
|
125
|
+
* epoch 不匹配的残留 intent 视为 stale,不得 resume。
|
|
126
|
+
*/
|
|
127
|
+
completionIntent?: RunnerCompletionIntent;
|
|
128
|
+
}
|
|
129
|
+
/** evaluator / rollout_reviewer 的合法 runner 决策值 */
|
|
130
|
+
export type RunnerDecision = 'approved' | 'needs_revision' | 'rejected' | 'approve_rollout' | 'reject';
|
|
131
|
+
/**
|
|
132
|
+
* 一次 verdict completion 的 durable intent (P0 verdict drift 修复)。
|
|
133
|
+
* effectPayload 语义按 decision 分派:
|
|
134
|
+
* - needs_revision (rollout): revisionIteration = 本次 completion 的修订轮号
|
|
135
|
+
* (record 时由已 APPLIED 的 rolloutRevisionPayload 计出并锁定,resume
|
|
136
|
+
* 据此继续同一轮,消除"applied 载荷属于上一轮还是本轮"的歧义);
|
|
137
|
+
* - 其余 decision: 无 effect 载荷。
|
|
138
|
+
*/
|
|
139
|
+
export interface RunnerCompletionIntent {
|
|
140
|
+
readonly decision: RunnerDecision;
|
|
141
|
+
/** 产出该 verdict 的 run — resume 时从其 outputPayload 恢复已验证输出 */
|
|
142
|
+
readonly sourceRunId: string;
|
|
143
|
+
/** 落库时任务的 revisionCount — 同 epoch 才允许 resume */
|
|
144
|
+
readonly revisionEpoch: number;
|
|
145
|
+
readonly status: 'pending' | 'applied';
|
|
146
|
+
readonly revisionIteration?: number;
|
|
147
|
+
/**
|
|
148
|
+
* P0-A (completion-intent 完整性): 该 completion 的效果类型。
|
|
149
|
+
* - 'governance_transition' (缺省): 正常治理 transition (dispatch /
|
|
150
|
+
* revision routing / repair seed / validation),由 runner 的 effects 执行;
|
|
151
|
+
* - 'needs_human_review': 终态人工裁决效果 (rollout budget exhausted 等)
|
|
152
|
+
* — crash resume 必须继续该效果 (重写 needs_human_review),禁止重问 LLM。
|
|
153
|
+
*/
|
|
154
|
+
readonly effect?: 'governance_transition' | 'needs_human_review';
|
|
155
|
+
}
|
|
156
|
+
/** rollout needs_revision 的修订路由载荷 */
|
|
157
|
+
export interface RolloutRevisionPayload {
|
|
158
|
+
readonly requiredChanges: readonly string[];
|
|
159
|
+
readonly revisionIteration: number;
|
|
160
|
+
readonly sourceRolloutTaskId: string;
|
|
161
|
+
readonly sourceArtifactId: string;
|
|
162
|
+
readonly targetTaskKind: 'scribe' | 'artificer';
|
|
163
|
+
/**
|
|
164
|
+
* B (最终复核) intent 状态机:
|
|
165
|
+
* - 'pending': intent 已持久化,transition 尚未 materialize — crash/retry/
|
|
166
|
+
* restart 必须继续执行同一 iteration N,禁止自动 N+1;
|
|
167
|
+
* - 'applied': reopen 已 materialize — 只有新的 needs_revision verdict 才
|
|
168
|
+
* 能 N→N+1;budget 按 APPLIED 计数,不按 intent 写入次数计。
|
|
169
|
+
* - undefined: 旧形状 (本状态机引入前) — 兼容视为 'applied'。
|
|
170
|
+
*/
|
|
171
|
+
readonly status?: 'pending' | 'applied';
|
|
85
172
|
}
|
|
86
173
|
/**
|
|
87
174
|
* Serialize PITaskMetadata into a JSON string suitable for TaskRecord.diagnosticJson.
|
|
@@ -90,6 +177,16 @@ export interface PITaskMetadata {
|
|
|
90
177
|
export declare function serializePITaskMetadata(metadata: PITaskMetadata): string;
|
|
91
178
|
/** Alias for serializePITaskMetadata — explicit name for adapter/consumer use. */
|
|
92
179
|
export declare const createPITaskDiagnosticJson: typeof serializePITaskMetadata;
|
|
180
|
+
/**
|
|
181
|
+
* 从已 hydrate 的 PITaskRecord 重建可写 PITaskMetadata,浅覆盖指定字段。
|
|
182
|
+
*
|
|
183
|
+
* 单一重建点 (DRY): evaluator/rollout 的 verdict 记录、修订路由记录、
|
|
184
|
+
* orchestrator 的 revision reopen 共用同一字段搬运逻辑——此前 4 处手写
|
|
185
|
+
* 逐字段 spread,新增字段时容易漏抄 (Phase 3.5 consolidation)。
|
|
186
|
+
* 注意: overrides 中显式 undefined 会覆盖为 undefined (serialize 时省略键),
|
|
187
|
+
* 用于"清除旧 verdict"语义。
|
|
188
|
+
*/
|
|
189
|
+
export declare function mergePITaskMetadata(base: PITaskRecord, overrides: Partial<PITaskMetadata>): PITaskMetadata;
|
|
93
190
|
/**
|
|
94
191
|
* Parse a diagnosticJson string into PITaskMetadata.
|
|
95
192
|
* Returns null on any parse/validation failure (fail closed).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pitask-metadata.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/pitask-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EACV,YAAY,EACZ,sBAAsB,EACtB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAGpC,uEAAuE;AACvE,eAAO,MAAM,eAAe,EAAG,aAAsB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,sBAAsB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,kBAAkB,EAAE,WAAW,EAAE,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"pitask-metadata.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/pitask-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,9 @@
|
|
|
27
27
|
import { isInternalizationChannel, isRunnerKind } from './peer-runner-contracts.js';
|
|
28
28
|
/** Namespace key used inside diagnosticJson to isolate PI metadata. */
|
|
29
29
|
export const PI_METADATA_KEY = 'pi_metadata';
|
|
30
|
+
const RUNNER_DECISIONS = new Set([
|
|
31
|
+
'approved', 'needs_revision', 'rejected', 'approve_rollout', 'reject',
|
|
32
|
+
]);
|
|
30
33
|
// ── Serialization ──────────────────────────────────────────────────────────────
|
|
31
34
|
/**
|
|
32
35
|
* Serialize PITaskMetadata into a JSON string suitable for TaskRecord.diagnosticJson.
|
|
@@ -45,11 +48,47 @@ export function serializePITaskMetadata(metadata) {
|
|
|
45
48
|
rejectionCount: metadata.rejectionCount,
|
|
46
49
|
adversarialFeedback: metadata.adversarialFeedback,
|
|
47
50
|
repairPayload: metadata.repairPayload,
|
|
51
|
+
runnerDecision: metadata.runnerDecision,
|
|
52
|
+
revisionCount: metadata.revisionCount,
|
|
53
|
+
revisionFeedback: metadata.revisionFeedback,
|
|
54
|
+
revisionCauseId: metadata.revisionCauseId,
|
|
55
|
+
rolloutRevisionPayload: metadata.rolloutRevisionPayload,
|
|
56
|
+
completionIntent: metadata.completionIntent,
|
|
48
57
|
},
|
|
49
58
|
});
|
|
50
59
|
}
|
|
51
60
|
/** Alias for serializePITaskMetadata — explicit name for adapter/consumer use. */
|
|
52
61
|
export const createPITaskDiagnosticJson = serializePITaskMetadata;
|
|
62
|
+
/**
|
|
63
|
+
* 从已 hydrate 的 PITaskRecord 重建可写 PITaskMetadata,浅覆盖指定字段。
|
|
64
|
+
*
|
|
65
|
+
* 单一重建点 (DRY): evaluator/rollout 的 verdict 记录、修订路由记录、
|
|
66
|
+
* orchestrator 的 revision reopen 共用同一字段搬运逻辑——此前 4 处手写
|
|
67
|
+
* 逐字段 spread,新增字段时容易漏抄 (Phase 3.5 consolidation)。
|
|
68
|
+
* 注意: overrides 中显式 undefined 会覆盖为 undefined (serialize 时省略键),
|
|
69
|
+
* 用于"清除旧 verdict"语义。
|
|
70
|
+
*/
|
|
71
|
+
export function mergePITaskMetadata(base, overrides) {
|
|
72
|
+
return {
|
|
73
|
+
dependencyTaskIds: base.dependencyTaskIds,
|
|
74
|
+
channel: base.channel,
|
|
75
|
+
timeoutMs: base.timeoutMs,
|
|
76
|
+
inputArtifactRefs: base.inputArtifactRefs,
|
|
77
|
+
outputArtifactRefs: base.outputArtifactRefs,
|
|
78
|
+
parentTaskId: base.parentTaskId,
|
|
79
|
+
correlationId: base.correlationId,
|
|
80
|
+
rejectionCount: base.rejectionCount,
|
|
81
|
+
adversarialFeedback: base.adversarialFeedback,
|
|
82
|
+
repairPayload: base.repairPayload,
|
|
83
|
+
runnerDecision: base.runnerDecision,
|
|
84
|
+
revisionCount: base.revisionCount,
|
|
85
|
+
revisionFeedback: base.revisionFeedback,
|
|
86
|
+
revisionCauseId: base.revisionCauseId,
|
|
87
|
+
rolloutRevisionPayload: base.rolloutRevisionPayload,
|
|
88
|
+
completionIntent: base.completionIntent,
|
|
89
|
+
...overrides,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
53
92
|
// ── ArtifactRef validation ─────────────────────────────────────────────────────
|
|
54
93
|
/**
|
|
55
94
|
* Validates a value is a valid ArtifactRef { artifactType: string, ref: string }.
|
|
@@ -207,6 +246,101 @@ export function parsePITaskMetadata(diagnosticJson) {
|
|
|
207
246
|
return null;
|
|
208
247
|
({ repairPayload } = m);
|
|
209
248
|
}
|
|
249
|
+
// runnerDecision (transition control, INV-02): optional literal union.
|
|
250
|
+
if (Object.hasOwn(m, 'runnerDecision') && m.runnerDecision !== undefined) {
|
|
251
|
+
if (typeof m.runnerDecision !== 'string' || !RUNNER_DECISIONS.has(m.runnerDecision))
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
// revisionCount: optional non-negative integer.
|
|
255
|
+
if (Object.hasOwn(m, 'revisionCount') && m.revisionCount !== undefined) {
|
|
256
|
+
if (typeof m.revisionCount !== 'number' || !Number.isInteger(m.revisionCount) || m.revisionCount < 0)
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
// revisionFeedback / revisionCauseId: optional non-empty strings.
|
|
260
|
+
if (Object.hasOwn(m, 'revisionFeedback') && m.revisionFeedback !== undefined) {
|
|
261
|
+
if (typeof m.revisionFeedback !== 'string' || m.revisionFeedback.trim() === '')
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
if (Object.hasOwn(m, 'revisionCauseId') && m.revisionCauseId !== undefined) {
|
|
265
|
+
if (typeof m.revisionCauseId !== 'string' || m.revisionCauseId.trim() === '')
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
// rolloutRevisionPayload: optional, full validation (rc-1/rc-4).
|
|
269
|
+
let rolloutRevisionPayload;
|
|
270
|
+
if (Object.hasOwn(m, 'rolloutRevisionPayload') && m.rolloutRevisionPayload !== undefined) {
|
|
271
|
+
const p = m.rolloutRevisionPayload;
|
|
272
|
+
if (typeof p !== 'object' || p === null || Array.isArray(p))
|
|
273
|
+
return null;
|
|
274
|
+
const r = p;
|
|
275
|
+
if (!Array.isArray(r.requiredChanges) || r.requiredChanges.length === 0)
|
|
276
|
+
return null;
|
|
277
|
+
for (const c of r.requiredChanges) {
|
|
278
|
+
if (typeof c !== 'string' || c.trim() === '')
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
if (typeof r.revisionIteration !== 'number' || !Number.isInteger(r.revisionIteration)
|
|
282
|
+
|| r.revisionIteration < 1 || r.revisionIteration > 2)
|
|
283
|
+
return null;
|
|
284
|
+
if (typeof r.sourceRolloutTaskId !== 'string' || r.sourceRolloutTaskId.trim() === '')
|
|
285
|
+
return null;
|
|
286
|
+
if (typeof r.sourceArtifactId !== 'string' || r.sourceArtifactId.trim() === '')
|
|
287
|
+
return null;
|
|
288
|
+
if (r.targetTaskKind !== 'scribe' && r.targetTaskKind !== 'artificer')
|
|
289
|
+
return null;
|
|
290
|
+
// B: 可选 intent 状态,缺失视为旧形状 (=applied)
|
|
291
|
+
let intentStatus;
|
|
292
|
+
if (r.status !== undefined && r.status !== 'pending' && r.status !== 'applied')
|
|
293
|
+
return null;
|
|
294
|
+
if (r.status === 'pending' || r.status === 'applied')
|
|
295
|
+
intentStatus = r.status;
|
|
296
|
+
rolloutRevisionPayload = {
|
|
297
|
+
requiredChanges: r.requiredChanges,
|
|
298
|
+
revisionIteration: r.revisionIteration,
|
|
299
|
+
sourceRolloutTaskId: r.sourceRolloutTaskId,
|
|
300
|
+
sourceArtifactId: r.sourceArtifactId,
|
|
301
|
+
targetTaskKind: r.targetTaskKind,
|
|
302
|
+
status: intentStatus,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
// completionIntent: optional, full validation (rc-1/rc-4). Malformed intent
|
|
306
|
+
// invalidates the whole metadata (fail-closed) — a corrupted authority
|
|
307
|
+
// record must never silently degrade into "no intent, re-ask the LLM".
|
|
308
|
+
let completionIntent;
|
|
309
|
+
if (Object.hasOwn(m, 'completionIntent') && m.completionIntent !== undefined) {
|
|
310
|
+
const p = m.completionIntent;
|
|
311
|
+
if (typeof p !== 'object' || p === null || Array.isArray(p))
|
|
312
|
+
return null;
|
|
313
|
+
const r = p;
|
|
314
|
+
if (typeof r.decision !== 'string' || !RUNNER_DECISIONS.has(r.decision))
|
|
315
|
+
return null;
|
|
316
|
+
if (typeof r.sourceRunId !== 'string' || r.sourceRunId.trim() === '')
|
|
317
|
+
return null;
|
|
318
|
+
if (typeof r.revisionEpoch !== 'number' || !Number.isInteger(r.revisionEpoch) || r.revisionEpoch < 0)
|
|
319
|
+
return null;
|
|
320
|
+
if (r.status !== 'pending' && r.status !== 'applied')
|
|
321
|
+
return null;
|
|
322
|
+
let revisionIteration;
|
|
323
|
+
if (r.revisionIteration !== undefined) {
|
|
324
|
+
if (typeof r.revisionIteration !== 'number' || !Number.isInteger(r.revisionIteration)
|
|
325
|
+
|| r.revisionIteration < 1 || r.revisionIteration > 2)
|
|
326
|
+
return null;
|
|
327
|
+
({ revisionIteration } = r);
|
|
328
|
+
}
|
|
329
|
+
// P0-A: 可选效果类型,缺失 = governance_transition
|
|
330
|
+
let effect;
|
|
331
|
+
if (r.effect !== undefined && r.effect !== 'governance_transition' && r.effect !== 'needs_human_review')
|
|
332
|
+
return null;
|
|
333
|
+
if (r.effect === 'needs_human_review')
|
|
334
|
+
({ effect } = r);
|
|
335
|
+
completionIntent = {
|
|
336
|
+
decision: r.decision,
|
|
337
|
+
sourceRunId: r.sourceRunId,
|
|
338
|
+
revisionEpoch: r.revisionEpoch,
|
|
339
|
+
status: r.status,
|
|
340
|
+
revisionIteration,
|
|
341
|
+
...(effect !== undefined ? { effect } : {}),
|
|
342
|
+
};
|
|
343
|
+
}
|
|
210
344
|
return {
|
|
211
345
|
dependencyTaskIds: m.dependencyTaskIds,
|
|
212
346
|
channel: m.channel,
|
|
@@ -218,6 +352,14 @@ export function parsePITaskMetadata(diagnosticJson) {
|
|
|
218
352
|
rejectionCount,
|
|
219
353
|
adversarialFeedback: typeof m.adversarialFeedback === 'string' ? m.adversarialFeedback : undefined,
|
|
220
354
|
repairPayload,
|
|
355
|
+
runnerDecision: typeof m.runnerDecision === 'string' && RUNNER_DECISIONS.has(m.runnerDecision)
|
|
356
|
+
? m.runnerDecision
|
|
357
|
+
: undefined,
|
|
358
|
+
revisionCount: typeof m.revisionCount === 'number' ? m.revisionCount : undefined,
|
|
359
|
+
revisionFeedback: typeof m.revisionFeedback === 'string' ? m.revisionFeedback : undefined,
|
|
360
|
+
revisionCauseId: typeof m.revisionCauseId === 'string' ? m.revisionCauseId : undefined,
|
|
361
|
+
rolloutRevisionPayload,
|
|
362
|
+
completionIntent,
|
|
221
363
|
};
|
|
222
364
|
}
|
|
223
365
|
// ── Hydration ───────────────────────────────────────────────────────────────────
|
|
@@ -264,6 +406,12 @@ export function hydratePITaskRecord(task) {
|
|
|
264
406
|
rejectionCount: meta.rejectionCount ?? 0,
|
|
265
407
|
adversarialFeedback: meta.adversarialFeedback,
|
|
266
408
|
repairPayload: meta.repairPayload,
|
|
409
|
+
runnerDecision: meta.runnerDecision,
|
|
410
|
+
revisionCount: meta.revisionCount,
|
|
411
|
+
revisionFeedback: meta.revisionFeedback,
|
|
412
|
+
revisionCauseId: meta.revisionCauseId,
|
|
413
|
+
rolloutRevisionPayload: meta.rolloutRevisionPayload,
|
|
414
|
+
completionIntent: meta.completionIntent,
|
|
267
415
|
};
|
|
268
416
|
}
|
|
269
417
|
//# sourceMappingURL=pitask-metadata.js.map
|