principles-disciple 1.71.0 → 1.73.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/openclaw.plugin.json +10 -5
- package/package.json +17 -19
- package/scripts/acceptance-test.mjs +16 -73
- package/scripts/sync-plugin.mjs +382 -77
- package/src/commands/archive-impl.ts +2 -1
- package/src/commands/capabilities.ts +2 -2
- package/src/commands/context.ts +2 -2
- package/src/commands/disable-impl.ts +2 -1
- package/src/commands/evolution-status.ts +16 -16
- package/src/commands/export.ts +12 -67
- package/src/commands/pain.ts +91 -1
- package/src/commands/principle-rollback.ts +2 -1
- package/src/commands/promote-impl.ts +7 -43
- package/src/commands/rollback-impl.ts +2 -1
- package/src/commands/rollback.ts +2 -1
- package/src/commands/samples.ts +2 -1
- package/src/commands/thinking-os.ts +2 -1
- package/src/config/errors.ts +18 -2
- package/src/constants/diagnostician.ts +2 -2
- package/src/constants/tools.ts +2 -1
- package/src/core/__tests__/focus-history.test.ts +210 -0
- package/src/core/config.ts +1 -1
- package/src/core/confirm-first-gate.ts +255 -0
- package/src/core/correction-cue-learner.ts +2 -136
- package/src/core/correction-types.ts +16 -88
- package/src/core/dictionary.ts +19 -20
- package/src/core/empathy-keyword-matcher.ts +17 -289
- package/src/core/empathy-types.ts +18 -229
- package/src/core/event-log.ts +38 -132
- package/src/core/evolution-reducer.ts +21 -2
- package/src/core/evolution-types.ts +76 -464
- package/src/core/file-store.ts +80 -0
- package/src/core/focus-history.ts +228 -955
- package/src/core/local-worker-routing.ts +34 -314
- package/src/core/merge-gate-audit.ts +0 -195
- package/src/core/pain-diagnostic-gate.ts +154 -0
- package/src/core/pain-signal.ts +21 -138
- package/src/core/pain.ts +15 -88
- package/src/core/pd-task-reconciler.ts +26 -115
- package/src/core/pd-task-service.ts +9 -9
- package/src/core/pd-task-types.ts +23 -127
- package/src/core/principle-compiler/__tests__/compiler-replay-gate.test.ts +174 -0
- package/src/core/principle-compiler/code-validator.ts +15 -42
- package/src/core/principle-compiler/compiler.ts +100 -15
- package/src/core/principle-compiler/index.ts +5 -2
- package/src/core/principle-compiler/template-generator.ts +4 -104
- package/src/core/principle-injection.ts +10 -202
- package/src/core/principle-internalization/filesystem-lifecycle-datasource.ts +42 -0
- package/src/core/principle-internalization/lifecycle-read-model.ts +39 -242
- package/src/core/principle-internalization/principle-lifecycle-service.ts +12 -10
- package/src/core/principle-tree-ledger-adapter.ts +145 -0
- package/src/core/principle-tree-ledger.ts +8 -6
- package/src/core/reflection/reflection-context.ts +14 -109
- package/src/core/replay-engine.ts +8 -500
- package/src/core/rule-host-helpers.ts +5 -35
- package/src/core/rule-host-types.ts +10 -82
- package/src/core/rule-host.ts +6 -63
- package/src/core/runtime-v2-prompt-activation-reader.ts +231 -0
- package/src/core/session-tracker.ts +87 -101
- package/src/core/shadow-observation-registry.ts +19 -48
- package/src/core/trajectory.ts +3 -1
- package/src/core/workflow-funnel-loader.ts +62 -68
- package/src/core/workspace-context.ts +46 -0
- package/src/core/workspace-dir-service.ts +1 -1
- package/src/core/workspace-dir-validation.ts +18 -9
- package/src/hooks/AGENTS.md +1 -1
- package/src/hooks/gate-block-helper.ts +46 -44
- package/src/hooks/gate.ts +207 -7
- package/src/hooks/lifecycle.ts +30 -32
- package/src/hooks/llm.ts +60 -32
- package/src/hooks/pain.ts +297 -103
- package/src/hooks/prompt.ts +469 -339
- package/src/hooks/subagent.ts +2 -29
- package/src/i18n/commands.ts +2 -10
- package/src/index.ts +95 -85
- package/src/openclaw-sdk.ts +311 -0
- package/src/service/central-database.ts +8 -4
- package/src/service/evolution-queue-migration.ts +2 -1
- package/src/service/evolution-worker.ts +163 -1786
- package/src/service/internalization-trigger-adapter.ts +302 -0
- package/src/service/keyword-optimization-service.ts +4 -4
- package/src/service/monitoring-query-service.ts +1 -215
- package/src/service/queue-io.ts +60 -331
- package/src/service/runtime-summary-service.ts +115 -18
- package/src/service/subagent-workflow/index.ts +0 -41
- package/src/service/subagent-workflow/types.ts +9 -120
- package/src/service/subagent-workflow/workflow-store.ts +2 -119
- package/src/service/workflow-watchdog.ts +0 -43
- package/src/types/event-payload.ts +16 -74
- package/src/types/event-types.ts +39 -547
- package/src/types/hygiene-types.ts +7 -30
- package/src/types/principle-tree-schema.ts +20 -222
- package/src/types/queue.ts +15 -70
- package/src/types/runtime-summary.ts +5 -49
- package/src/utils/io.ts +10 -0
- package/src/utils/retry.ts +1 -1
- package/src/utils/shadow-fingerprint.ts +2 -2
- package/src/utils/workspace-resolver.ts +50 -0
- package/templates/langs/en/core/AGENTS.md +2 -2
- package/templates/langs/en/core/BOOT.md +1 -1
- package/templates/langs/en/core/HEARTBEAT.md +2 -2
- package/templates/langs/en/skills/ai-sprint-orchestration/references/agent-registry.json +1 -72
- package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +6 -6
- package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +6 -6
- package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +2 -12
- package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +2 -12
- package/templates/langs/en/skills/ai-sprint-orchestration/runtime/.gitignore +2 -2
- package/templates/langs/en/skills/ai-sprint-orchestration/scripts/run.mjs +51 -15
- package/templates/langs/en/skills/evolve-task/SKILL.md +1 -1
- package/templates/langs/en/skills/pd-cli-operator/SKILL.md +67 -0
- package/templates/langs/en/skills/pd-diagnostician/SKILL.md +1 -1
- package/templates/langs/en/skills/pd-mentor/SKILL.md +1 -1
- package/templates/langs/en/skills/pd-pain-signal/SKILL.md +17 -39
- package/templates/langs/en/skills/pd-runtime-v2/SKILL.md +61 -0
- package/templates/langs/zh/core/AGENTS.md +2 -2
- package/templates/langs/zh/core/BOOT.md +1 -1
- package/templates/langs/zh/core/HEARTBEAT.md +2 -2
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/agent-registry.json +1 -72
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +6 -6
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +6 -6
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/nocturnal-trinity-quality-enhancement.json +8 -8
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +2 -12
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +2 -12
- package/templates/langs/zh/skills/ai-sprint-orchestration/runtime/.gitignore +2 -2
- package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/run.mjs +51 -15
- package/templates/langs/zh/skills/ai-sprint-orchestration/test/run.test.mjs +21 -5
- package/templates/langs/zh/skills/evolve-task/SKILL.md +2 -2
- package/templates/langs/zh/skills/pd-cli-operator/SKILL.md +67 -0
- package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +1 -1
- package/templates/langs/zh/skills/pd-mentor/SKILL.md +1 -1
- package/templates/langs/zh/skills/pd-pain-signal/SKILL.md +17 -38
- package/templates/langs/zh/skills/pd-runtime-v2/SKILL.md +61 -0
- package/tests/build-artifacts.test.ts +1 -3
- package/tests/commands/evolution-status.test.ts +0 -118
- package/tests/core/bootstrap-rules.test.ts +1 -1
- package/tests/core/config.test.ts +1 -1
- package/tests/core/event-log.test.ts +35 -0
- package/tests/core/evolution-engine.test.ts +610 -0
- package/tests/core/file-store.test.ts +102 -0
- package/tests/core/focus-history.test.ts +203 -11
- package/tests/core/merge-gate-audit.test.ts +2 -169
- package/tests/core/model-deployment-registry.test.ts +7 -1
- package/tests/core/model-training-registry.test.ts +19 -0
- package/tests/core/observability.test.ts +0 -1
- package/tests/core/pain-diagnostic-gate.test.ts +498 -0
- package/tests/core/pain.test.ts +0 -1
- package/tests/core/principle-internalization/deprecated-readiness.test.ts +2 -2
- package/tests/core/principle-internalization/lifecycle-metrics.test.ts +2 -2
- package/tests/core/principle-internalization/{internalization-routing-policy.test.ts → lifecycle-routing-policy.test.ts} +6 -6
- package/tests/core/principle-internalization/lineage-source-retired.test.ts +56 -0
- package/tests/core/principle-internalization/principle-lifecycle-service.test.ts +1 -23
- package/tests/core/principle-tree-ledger-adapter.test.ts +253 -0
- package/tests/core/reflection-context.test.ts +0 -14
- package/tests/core/replay-engine.test.ts +127 -215
- package/tests/core/rule-host-helpers.test.ts +2 -2
- package/tests/core/rule-implementation-runtime.test.ts +0 -27
- package/tests/core/workflow-funnel-loader.test.ts +162 -0
- package/tests/core/workspace-dir-validation.test.ts +8 -1
- package/tests/core-anti-growth.test.ts +192 -0
- package/tests/hook-workspace-nextaction-contract.test.ts +42 -0
- package/tests/hooks/confirm-first-gate.test.ts +333 -0
- package/tests/hooks/gate-auto-correct-shadow.test.ts +310 -0
- package/tests/hooks/gate-auto-correct.test.ts +665 -0
- package/tests/hooks/gate-rule-host-pipeline.test.ts +2 -1
- package/tests/hooks/pain.test.ts +269 -12
- package/tests/hooks/prompt-characterization.test.ts +500 -0
- package/tests/hooks/prompt-size-guard.test.ts +329 -0
- package/tests/hooks/runtime-v2-prompt-activation.test.ts +869 -0
- package/tests/index.test.ts +94 -1
- package/tests/integration/auto-entry-gate.test.ts +248 -0
- package/tests/integration/internalization-trigger-guard.test.ts +69 -0
- package/tests/integration/m8-legacy-paths.test.ts +63 -0
- package/tests/integration/runtime-v2-pain-guard.test.ts +125 -0
- package/tests/plugin-config-resolution-cutover.test.ts +359 -0
- package/tests/runtime-v2-discovery-guard.test.ts +154 -0
- package/tests/service/central-database.test.ts +457 -0
- package/tests/service/evolution-worker.correction-observer.test.ts +173 -0
- package/tests/service/evolution-worker.timeout.test.ts +11 -129
- package/tests/service/internalization-trigger-adapter.test.ts +251 -0
- package/tests/service/monitoring-query-service.test.ts +1 -47
- package/tests/service/queue-io.test.ts +1 -62
- package/tests/service/runtime-summary-service.test.ts +184 -3
- package/tests/service/workflow-watchdog.test.ts +0 -91
- package/tests/utils/file-lock.test.ts +5 -3
- package/tests/utils/session-key.test.ts +52 -0
- package/tests/utils/subagent-probe.test.ts +48 -1
- package/vitest.config.ts +4 -11
- package/.planning/codebase/ARCHITECTURE.md +0 -157
- package/.planning/codebase/CONCERNS.md +0 -145
- package/.planning/codebase/CONVENTIONS.md +0 -148
- package/.planning/codebase/INTEGRATIONS.md +0 -81
- package/.planning/codebase/STACK.md +0 -87
- package/.planning/codebase/STRUCTURE.md +0 -193
- package/.planning/codebase/TESTING.md +0 -243
- package/.planning/phases/01-basic-visualization/01-GAP-CLOSURE-VERIFICATION.md +0 -113
- package/docs/COMMAND_REFERENCE.md +0 -76
- package/docs/COMMAND_REFERENCE_EN.md +0 -79
- package/scripts/build-web.mjs +0 -46
- package/scripts/diagnose-nocturnal.mjs +0 -537
- package/scripts/seed-nocturnal-scenarios.mjs +0 -384
- package/src/commands/nocturnal-review.ts +0 -322
- package/src/commands/nocturnal-rollout.ts +0 -790
- package/src/commands/nocturnal-train.ts +0 -986
- package/src/commands/pd-reflect.ts +0 -88
- package/src/core/adaptive-thresholds.ts +0 -478
- package/src/core/diagnostician-task-store.ts +0 -192
- package/src/core/nocturnal-arbiter.ts +0 -715
- package/src/core/nocturnal-artifact-lineage.ts +0 -116
- package/src/core/nocturnal-artificer.ts +0 -257
- package/src/core/nocturnal-candidate-scoring.ts +0 -530
- package/src/core/nocturnal-compliance.ts +0 -1146
- package/src/core/nocturnal-dataset.ts +0 -763
- package/src/core/nocturnal-executability.ts +0 -428
- package/src/core/nocturnal-export.ts +0 -499
- package/src/core/nocturnal-paths.ts +0 -240
- package/src/core/nocturnal-reasoning-deriver.ts +0 -343
- package/src/core/nocturnal-rule-implementation-validator.ts +0 -246
- package/src/core/nocturnal-snapshot-contract.ts +0 -99
- package/src/core/nocturnal-trajectory-extractor.ts +0 -512
- package/src/core/nocturnal-trinity-types.ts +0 -218
- package/src/core/nocturnal-trinity.ts +0 -2680
- package/src/core/principle-internalization/deprecated-readiness.ts +0 -93
- package/src/core/principle-internalization/internalization-routing-policy.ts +0 -208
- package/src/core/principle-internalization/lifecycle-metrics.ts +0 -152
- package/src/http/principles-console-route.ts +0 -709
- package/src/service/central-health-service.ts +0 -49
- package/src/service/central-overview-service.ts +0 -138
- package/src/service/control-ui-query-service.ts +0 -900
- package/src/service/cooldown-strategy.ts +0 -97
- package/src/service/evolution-pain-context.ts +0 -79
- package/src/service/evolution-query-service.ts +0 -407
- package/src/service/health-query-service.ts +0 -1038
- package/src/service/nocturnal-config.ts +0 -214
- package/src/service/nocturnal-runtime.ts +0 -734
- package/src/service/nocturnal-service.ts +0 -1605
- package/src/service/nocturnal-target-selector.ts +0 -545
- package/src/service/sleep-cycle.ts +0 -157
- package/src/service/startup-reconciler.ts +0 -112
- package/src/service/subagent-workflow/correction-observer-types.ts +0 -82
- package/src/service/subagent-workflow/correction-observer-workflow-manager.ts +0 -250
- package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +0 -1
- package/src/service/subagent-workflow/dynamic-timeout.ts +0 -30
- package/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +0 -268
- package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +0 -795
- package/src/service/subagent-workflow/runtime-direct-driver.ts +0 -268
- package/src/service/subagent-workflow/workflow-manager-base.ts +0 -580
- package/src/tools/write-pain-flag.ts +0 -215
- package/tests/commands/nocturnal-review.test.ts +0 -448
- package/tests/commands/nocturnal-train.test.ts +0 -97
- package/tests/commands/pd-reflect.test.ts +0 -49
- package/tests/core/adaptive-thresholds.test.ts +0 -261
- package/tests/core/nocturnal-arbiter.test.ts +0 -559
- package/tests/core/nocturnal-artifact-lineage.test.ts +0 -53
- package/tests/core/nocturnal-artificer.test.ts +0 -241
- package/tests/core/nocturnal-candidate-scoring.test.ts +0 -532
- package/tests/core/nocturnal-compliance-p-principles.test.ts +0 -133
- package/tests/core/nocturnal-compliance.test.ts +0 -646
- package/tests/core/nocturnal-dataset.test.ts +0 -892
- package/tests/core/nocturnal-e2e.test.ts +0 -234
- package/tests/core/nocturnal-executability.test.ts +0 -357
- package/tests/core/nocturnal-export.test.ts +0 -517
- package/tests/core/nocturnal-reasoning-deriver.test.ts +0 -372
- package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +0 -428
- package/tests/core/nocturnal-rule-implementation-validator.test.ts +0 -127
- package/tests/core/nocturnal-snapshot-contract.test.ts +0 -121
- package/tests/core/nocturnal-trajectory-extractor.test.ts +0 -634
- package/tests/core/nocturnal-trinity.test.ts +0 -2053
- package/tests/core/pain-auto-repair.test.ts +0 -96
- package/tests/core/pain-integration.test.ts +0 -510
- package/tests/fixtures/nocturnal-reviewed-subset.json +0 -183
- package/tests/http/principles-console-route.test.ts +0 -162
- package/tests/integration/chaos-resilience.test.ts +0 -348
- package/tests/integration/empathy-workflow-integration.test.ts +0 -626
- package/tests/integration/pain-diagnostician-loop.e2e.test.ts +0 -380
- package/tests/service/control-ui-query-service.test.ts +0 -121
- package/tests/service/cooldown-strategy.test.ts +0 -164
- package/tests/service/data-endpoints-regression.test.ts +0 -834
- package/tests/service/empathy-observer-workflow-manager.test.ts +0 -175
- package/tests/service/evolution-worker.nocturnal.test.ts +0 -601
- package/tests/service/nocturnal-runtime-hardening.test.ts +0 -118
- package/tests/service/nocturnal-runtime.test.ts +0 -473
- package/tests/service/nocturnal-service-code-candidate.test.ts +0 -330
- package/tests/service/nocturnal-target-selector.test.ts +0 -615
- package/tests/service/startup-reconciler.test.ts +0 -148
- package/tests/tools/write-pain-flag.test.ts +0 -358
- package/ui/src/App.tsx +0 -45
- package/ui/src/api.ts +0 -220
- package/ui/src/charts.tsx +0 -955
- package/ui/src/components/ErrorState.tsx +0 -6
- package/ui/src/components/Loading.tsx +0 -13
- package/ui/src/components/ProtectedRoute.tsx +0 -12
- package/ui/src/components/Shell.tsx +0 -91
- package/ui/src/components/WorkspaceConfig.tsx +0 -178
- package/ui/src/components/index.ts +0 -5
- package/ui/src/context/auth.tsx +0 -80
- package/ui/src/context/theme.tsx +0 -66
- package/ui/src/hooks/useAutoRefresh.ts +0 -39
- package/ui/src/i18n/ui.ts +0 -473
- package/ui/src/main.tsx +0 -16
- package/ui/src/pages/EvolutionPage.tsx +0 -333
- package/ui/src/pages/FeedbackPage.tsx +0 -138
- package/ui/src/pages/GateMonitorPage.tsx +0 -136
- package/ui/src/pages/LoginPage.tsx +0 -89
- package/ui/src/pages/OverviewPage.tsx +0 -599
- package/ui/src/pages/SamplesPage.tsx +0 -174
- package/ui/src/pages/ThinkingModelsPage.tsx +0 -702
- package/ui/src/styles.css +0 -2020
- package/ui/src/types.ts +0 -384
- package/ui/src/utils/format.ts +0 -15
|
@@ -32,27 +32,27 @@
|
|
|
32
32
|
]
|
|
33
33
|
},
|
|
34
34
|
"producer": {
|
|
35
|
-
"agent": "
|
|
36
|
-
"model": "
|
|
35
|
+
"agent": "opencode",
|
|
36
|
+
"model": "minimax-cn-coding-plan/MiniMax-M2.7",
|
|
37
37
|
"timeoutSeconds": 1800
|
|
38
38
|
},
|
|
39
39
|
"reviewerA": {
|
|
40
|
-
"agent": "
|
|
41
|
-
"model": "
|
|
40
|
+
"agent": "opencode",
|
|
41
|
+
"model": "minimax-cn-coding-plan/MiniMax-M2.7",
|
|
42
42
|
"timeoutSeconds": 1200,
|
|
43
43
|
"role": "code-quality",
|
|
44
44
|
"focus": "Verify prompt changes are minimal, backward-compatible, and don't break existing arbiter validation"
|
|
45
45
|
},
|
|
46
46
|
"reviewerB": {
|
|
47
|
-
"agent": "
|
|
48
|
-
"model": "
|
|
47
|
+
"agent": "opencode",
|
|
48
|
+
"model": "minimax-cn-coding-plan/MiniMax-M2.7",
|
|
49
49
|
"timeoutSeconds": 1200,
|
|
50
50
|
"role": "functional-correctness",
|
|
51
51
|
"focus": "Verify tests pass and the new prompt constraints produce structurally valid Trinity output"
|
|
52
52
|
},
|
|
53
53
|
"escalationReviewer": {
|
|
54
|
-
"agent": "
|
|
55
|
-
"model": "
|
|
54
|
+
"agent": "opencode",
|
|
55
|
+
"model": "minimax-cn-coding-plan/MiniMax-M2.7",
|
|
56
56
|
"timeoutSeconds": 1800
|
|
57
57
|
},
|
|
58
58
|
"stageGoals": {
|
|
@@ -10,19 +10,14 @@
|
|
|
10
10
|
"stageTimeoutMinutes": 5,
|
|
11
11
|
"stages": ["verify"],
|
|
12
12
|
"producer": {
|
|
13
|
-
"agent": "
|
|
14
|
-
"model": "
|
|
13
|
+
"agent": "opencode",
|
|
14
|
+
"model": "minimax-cn-coding-plan/MiniMax-M2.7",
|
|
15
15
|
"timeoutSeconds": 90
|
|
16
16
|
},
|
|
17
17
|
"reviewerA": {
|
|
18
18
|
"agent": "opencode",
|
|
19
19
|
"model": "minimax-cn-coding-plan/MiniMax-M2.7",
|
|
20
20
|
"timeoutSeconds": 45,
|
|
21
|
-
"fallback": {
|
|
22
|
-
"agent": "iflow",
|
|
23
|
-
"model": "glm-4.7",
|
|
24
|
-
"timeoutSeconds": 75
|
|
25
|
-
},
|
|
26
21
|
"role": "artifact_checker",
|
|
27
22
|
"focus": "Verify decision.md and scorecard.json contain expected fields"
|
|
28
23
|
},
|
|
@@ -30,11 +25,6 @@
|
|
|
30
25
|
"agent": "opencode",
|
|
31
26
|
"model": "minimax-cn-coding-plan/MiniMax-M2.7",
|
|
32
27
|
"timeoutSeconds": 45,
|
|
33
|
-
"fallback": {
|
|
34
|
-
"agent": "iflow",
|
|
35
|
-
"model": "glm-4.7",
|
|
36
|
-
"timeoutSeconds": 75
|
|
37
|
-
},
|
|
38
28
|
"role": "recommendation_checker",
|
|
39
29
|
"focus": "Verify nextRunRecommendation is computed and reasonable"
|
|
40
30
|
},
|
|
@@ -10,19 +10,14 @@
|
|
|
10
10
|
"stageTimeoutMinutes": 4,
|
|
11
11
|
"stages": ["validate"],
|
|
12
12
|
"producer": {
|
|
13
|
-
"agent": "
|
|
14
|
-
"model": "
|
|
13
|
+
"agent": "opencode",
|
|
14
|
+
"model": "minimax-cn-coding-plan/MiniMax-M2.7",
|
|
15
15
|
"timeoutSeconds": 90
|
|
16
16
|
},
|
|
17
17
|
"reviewerA": {
|
|
18
18
|
"agent": "opencode",
|
|
19
19
|
"model": "minimax-cn-coding-plan/MiniMax-M2.7",
|
|
20
20
|
"timeoutSeconds": 45,
|
|
21
|
-
"fallback": {
|
|
22
|
-
"agent": "iflow",
|
|
23
|
-
"model": "glm-4.7",
|
|
24
|
-
"timeoutSeconds": 75
|
|
25
|
-
},
|
|
26
21
|
"role": "schema_checker",
|
|
27
22
|
"focus": "Verify report has all required sections, VERDICT format, DIMENSIONS format"
|
|
28
23
|
},
|
|
@@ -30,11 +25,6 @@
|
|
|
30
25
|
"agent": "opencode",
|
|
31
26
|
"model": "minimax-cn-coding-plan/MiniMax-M2.7",
|
|
32
27
|
"timeoutSeconds": 45,
|
|
33
|
-
"fallback": {
|
|
34
|
-
"agent": "iflow",
|
|
35
|
-
"model": "glm-4.7",
|
|
36
|
-
"timeoutSeconds": 75
|
|
37
|
-
},
|
|
38
28
|
"role": "quality_checker",
|
|
39
29
|
"focus": "Verify outputQuality is computed correctly, qualityReasons are meaningful"
|
|
40
30
|
},
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
*
|
|
2
|
-
!.gitignore
|
|
1
|
+
*
|
|
2
|
+
!.gitignore
|
|
@@ -29,6 +29,11 @@ const acpxBin = (() => {
|
|
|
29
29
|
const r = spawnSync(cmd, ['acpx'], { encoding: 'utf8' });
|
|
30
30
|
if (r.status === 0) {
|
|
31
31
|
const lines = r.stdout.trim().split(/\r?\n/);
|
|
32
|
+
// On Windows, prefer .cmd file over the Unix shell script (no extension)
|
|
33
|
+
if (process.platform === 'win32') {
|
|
34
|
+
const cmdFile = lines.find(l => l.trim().toLowerCase().endsWith('.cmd'));
|
|
35
|
+
if (cmdFile) return cmdFile.trim();
|
|
36
|
+
}
|
|
32
37
|
const symlink = lines[0].trim();
|
|
33
38
|
try {
|
|
34
39
|
return fs.realpathSync(symlink);
|
|
@@ -86,7 +91,7 @@ function configureRuntimeRoots(rootPath) {
|
|
|
86
91
|
|
|
87
92
|
function checkAcpxAvailable() {
|
|
88
93
|
return process.platform === 'win32'
|
|
89
|
-
? spawnSync('
|
|
94
|
+
? spawnSync(process.env.COMSPEC || 'cmd.exe', ['/d', '/s', '/c', `"${acpxBin}" --version`], {
|
|
90
95
|
encoding: 'utf8',
|
|
91
96
|
shell: false,
|
|
92
97
|
timeout: 10_000,
|
|
@@ -129,6 +134,24 @@ function runSelfCheck() {
|
|
|
129
134
|
const acpxCheck = checkAcpxAvailable();
|
|
130
135
|
record('acpx_available', acpxCheck.status === 0, (acpxCheck.stdout || acpxCheck.stderr || '').trim() || `status=${acpxCheck.status}`);
|
|
131
136
|
|
|
137
|
+
// Check which agents are available by running a quick version check
|
|
138
|
+
try {
|
|
139
|
+
const registry = readJson(path.join(referencesRoot, 'agent-registry.json'));
|
|
140
|
+
const agentNames = Object.keys(registry.agents || {});
|
|
141
|
+
for (const agentName of agentNames) {
|
|
142
|
+
try {
|
|
143
|
+
const agentCheck = process.platform === 'win32'
|
|
144
|
+
? spawnSync(process.env.COMSPEC || 'cmd.exe', ['/d', '/s', '/c', `"${acpxBin}" --format quiet --timeout 30 ${agentName} exec "echo available"`], { encoding: 'utf8', shell: false, timeout: 45_000 })
|
|
145
|
+
: spawnSync(nodeBin, [acpxBin, '--format', 'quiet', '--timeout', '30', agentName, 'exec', 'echo available'], { encoding: 'utf8', shell: false, timeout: 45_000 });
|
|
146
|
+
record(`agent:${agentName}`, agentCheck.status === 0, agentCheck.status === 0 ? 'available' : `status=${agentCheck.status}`);
|
|
147
|
+
} catch (agentErr) {
|
|
148
|
+
record(`agent:${agentName}`, false, agentErr.message);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
} catch (registryErr) {
|
|
152
|
+
record('agent_registry_read', false, registryErr.message);
|
|
153
|
+
}
|
|
154
|
+
|
|
132
155
|
const probePath = path.join(runtimeRoot, '.self-check-write-probe.tmp');
|
|
133
156
|
try {
|
|
134
157
|
fs.writeFileSync(probePath, 'ok', 'utf8');
|
|
@@ -273,7 +296,7 @@ function updateSummary(runDir, lines) {
|
|
|
273
296
|
function inferFailureClassification({ summary = '', blockers = [], reviewerTimeouts = null, reviewerViolations = null }) {
|
|
274
297
|
const combined = [summary, ...(blockers ?? [])].join(' ').toLowerCase();
|
|
275
298
|
|
|
276
|
-
if (/acpx|path|enoent|eacces|eprem|permission|writable|runtime root|command not found|not available/.test(combined)) {
|
|
299
|
+
if (/acpx|path|enoent|eacces|eprem|permission|writable|runtime root|command not found|not available|failed to spawn|spawn.*enoent|exit status|status 1|status 130|taskkill|comspec/.test(combined)) {
|
|
277
300
|
return {
|
|
278
301
|
failureClassification: 'environment issue',
|
|
279
302
|
failureSource: 'runtime environment',
|
|
@@ -289,7 +312,7 @@ function inferFailureClassification({ summary = '', blockers = [], reviewerTimeo
|
|
|
289
312
|
};
|
|
290
313
|
}
|
|
291
314
|
|
|
292
|
-
if ((reviewerTimeouts?.length ?? 0) > 0 || (reviewerViolations?.length ?? 0) > 0 || /missing reports|schema violation|report invalidated|timed out|
|
|
315
|
+
if ((reviewerTimeouts?.length ?? 0) > 0 || (reviewerViolations?.length ?? 0) > 0 || /missing reports|schema violation|report invalidated|timed out|verdict|dimensions/.test(combined)) {
|
|
293
316
|
return {
|
|
294
317
|
failureClassification: 'agent behavior issue',
|
|
295
318
|
failureSource: 'role execution or report quality',
|
|
@@ -297,6 +320,14 @@ function inferFailureClassification({ summary = '', blockers = [], reviewerTimeo
|
|
|
297
320
|
};
|
|
298
321
|
}
|
|
299
322
|
|
|
323
|
+
if (/agent .*failed/.test(combined)) {
|
|
324
|
+
return {
|
|
325
|
+
failureClassification: 'environment issue',
|
|
326
|
+
failureSource: 'agent runtime',
|
|
327
|
+
recommendedNextAction: 'Check agent availability and environment setup before retrying.',
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
|
|
300
331
|
return {
|
|
301
332
|
failureClassification: 'workflow bug',
|
|
302
333
|
failureSource: 'orchestrator runtime',
|
|
@@ -439,12 +470,12 @@ function runAgent({ cwd, agent, model, prompt, timeoutSeconds = 1800, failLogPat
|
|
|
439
470
|
let result;
|
|
440
471
|
try {
|
|
441
472
|
if (process.platform === 'win32') {
|
|
473
|
+
const comspec = process.env.COMSPEC || 'cmd.exe';
|
|
442
474
|
result = spawnSync(
|
|
443
|
-
|
|
475
|
+
comspec,
|
|
444
476
|
[
|
|
445
|
-
'
|
|
446
|
-
|
|
447
|
-
`acpx --cwd $env:AI_SPRINT_CWD --approve-all --model $env:AI_SPRINT_MODEL --timeout $env:AI_SPRINT_TIMEOUT ${agent} exec -f $env:AI_SPRINT_PROMPT`,
|
|
477
|
+
'/d', '/s', '/c',
|
|
478
|
+
`"${acpxBin}" --cwd "%AI_SPRINT_CWD%" --approve-all --model "%AI_SPRINT_MODEL%" --timeout "%AI_SPRINT_TIMEOUT%" ${agent} exec -f "%AI_SPRINT_PROMPT%"`,
|
|
448
479
|
],
|
|
449
480
|
{
|
|
450
481
|
cwd,
|
|
@@ -574,9 +605,10 @@ function runAgentAsync({ cwd, agent, model, prompt, timeoutSeconds = 1800, promp
|
|
|
574
605
|
|
|
575
606
|
try {
|
|
576
607
|
if (process.platform === 'win32') {
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
608
|
+
const comspec = process.env.COMSPEC || 'cmd.exe';
|
|
609
|
+
proc = spawn(comspec, [
|
|
610
|
+
'/d', '/s', '/c',
|
|
611
|
+
`"${acpxBin}" --cwd "%AI_SPRINT_CWD%" --approve-all --model "%AI_SPRINT_MODEL%" --timeout "%AI_SPRINT_TIMEOUT%" ${agent} exec -f "%AI_SPRINT_PROMPT%"`,
|
|
580
612
|
], {
|
|
581
613
|
cwd,
|
|
582
614
|
encoding: 'utf8',
|
|
@@ -833,9 +865,10 @@ function runAgentWithProgressCheck({
|
|
|
833
865
|
// Spawn the agent process
|
|
834
866
|
try {
|
|
835
867
|
if (process.platform === 'win32') {
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
868
|
+
const comspec = process.env.COMSPEC || 'cmd.exe';
|
|
869
|
+
proc = spawn(comspec, [
|
|
870
|
+
'/d', '/s', '/c',
|
|
871
|
+
`"${acpxBin}" --cwd "%AI_SPRINT_CWD%" --approve-all --model "%AI_SPRINT_MODEL%" --timeout "%AI_SPRINT_TIMEOUT%" ${agent} exec -f "%AI_SPRINT_PROMPT%"`,
|
|
839
872
|
], {
|
|
840
873
|
cwd,
|
|
841
874
|
encoding: 'utf8',
|
|
@@ -1176,8 +1209,8 @@ export function getIsolationDir(runId, stageName, role) {
|
|
|
1176
1209
|
}
|
|
1177
1210
|
|
|
1178
1211
|
/**
|
|
1179
|
-
* Find report in
|
|
1180
|
-
*
|
|
1212
|
+
* Find report in agent isolation directory.
|
|
1213
|
+
* Agent writes to runtime/tmp/sprint-agent/{runId}/{stage}-{role}/{report}.md
|
|
1181
1214
|
*
|
|
1182
1215
|
* IMPORTANT: Uses runId directly for isolation lookup, not fragile timestamp extraction.
|
|
1183
1216
|
* This ensures different runs have unique isolation directories and prevents cross-contamination.
|
|
@@ -2608,6 +2641,9 @@ async function executeStage(runDir, state, spec) {
|
|
|
2608
2641
|
worktreePath: worktreeInfo?.worktreePath,
|
|
2609
2642
|
worklogPath: producerWorklogPath,
|
|
2610
2643
|
});
|
|
2644
|
+
if (result.status !== 0) {
|
|
2645
|
+
throw new Error(`Agent exited with status ${result.status}: ${result.stderr || 'no stderr'}`);
|
|
2646
|
+
}
|
|
2611
2647
|
producerOutput = result.stdout;
|
|
2612
2648
|
extensionsUsed = result.extensionsUsed ?? 0;
|
|
2613
2649
|
if (extensionsUsed > 0) {
|
|
@@ -468,7 +468,7 @@ test('dynamic timeout: extension window scales with timeoutSeconds instead of fi
|
|
|
468
468
|
});
|
|
469
469
|
|
|
470
470
|
// ---------------------------------------------------------------------------
|
|
471
|
-
// Isolation Report:
|
|
471
|
+
// Isolation Report: agent writes to tmp/sprint-agent/{runId}/{stage}-{role}/
|
|
472
472
|
// Phase 2: Uses runId directly, not fragile timestamp extraction
|
|
473
473
|
// ---------------------------------------------------------------------------
|
|
474
474
|
|
|
@@ -902,10 +902,10 @@ test('behavior: missing reviewer report persists reviewerFailures details', () =
|
|
|
902
902
|
reviewerFailures: [
|
|
903
903
|
{
|
|
904
904
|
role: 'reviewer_b',
|
|
905
|
-
summary: 'primary=opencode/test-model: Agent opencode failed with status 1 | fallback=
|
|
905
|
+
summary: 'primary=opencode/test-model: Agent opencode failed with status 1 | fallback=opencode/minimax-cn-coding-plan/MiniMax-M2.7: timed out',
|
|
906
906
|
attempts: [
|
|
907
907
|
{ label: 'primary', agent: 'opencode', model: 'test-model', error: 'Agent opencode failed with status 1', timedOut: false },
|
|
908
|
-
{ label: 'fallback', agent: '
|
|
908
|
+
{ label: 'fallback', agent: 'opencode', model: 'minimax-cn-coding-plan/MiniMax-M2.7', error: 'Agent opencode timed out', timedOut: true },
|
|
909
909
|
],
|
|
910
910
|
},
|
|
911
911
|
],
|
|
@@ -919,7 +919,7 @@ test('behavior: missing reviewer report persists reviewerFailures details', () =
|
|
|
919
919
|
assert.ok(decision.includes('primary=opencode/test-model'), 'decision should include reviewer failure summary');
|
|
920
920
|
assert.ok(Array.isArray(scorecard.reviewerFailures), 'scorecard should persist reviewerFailures');
|
|
921
921
|
assert.equal(scorecard.reviewerFailures[0].role, 'reviewer_b');
|
|
922
|
-
assert.ok(scorecard.reviewerFailures[0].summary.includes('fallback=
|
|
922
|
+
assert.ok(scorecard.reviewerFailures[0].summary.includes('fallback=opencode/minimax-cn-coding-plan/MiniMax-M2.7'));
|
|
923
923
|
} finally {
|
|
924
924
|
cleanupTempDir(tmp);
|
|
925
925
|
}
|
|
@@ -1397,7 +1397,7 @@ test('acceptance checklist: file exists and has correct content', () => {
|
|
|
1397
1397
|
|
|
1398
1398
|
test('preflight check validates acpx not agent names', () => {
|
|
1399
1399
|
// The preflight code in run.mjs should check that acpx is available,
|
|
1400
|
-
// NOT that agent names like "
|
|
1400
|
+
// NOT that agent names like "opencode" or "claude" exist as shell binaries.
|
|
1401
1401
|
const runPath = path.resolve(__dirname, '..', 'scripts', 'run.mjs');
|
|
1402
1402
|
const content = fs.readFileSync(runPath, 'utf8');
|
|
1403
1403
|
// Should NOT use "which" with agent names
|
|
@@ -1417,3 +1417,19 @@ test('cleanupAcpxOrphans does not fallback to spec directory', () => {
|
|
|
1417
1417
|
assert.ok(content.includes('spec.workspace') || content.includes('spec?.workspace'),
|
|
1418
1418
|
'cleanupAcpxOrphans should reference spec.workspace');
|
|
1419
1419
|
});
|
|
1420
|
+
|
|
1421
|
+
test('Windows cmd.exe invocations use /s /c with quoted env vars for space-safe paths', () => {
|
|
1422
|
+
const runPath = path.resolve(__dirname, '..', 'scripts', 'run.mjs');
|
|
1423
|
+
const content = fs.readFileSync(runPath, 'utf8');
|
|
1424
|
+
const winCmdPatterns = content.match(/\/d',\s*'\/[^']*',\s*'[^']*%AI_SPRINT/g) || [];
|
|
1425
|
+
for (const pat of winCmdPatterns) {
|
|
1426
|
+
assert.ok(pat.includes('/s'), `Windows cmd.exe pattern must include /s flag: ${pat}`);
|
|
1427
|
+
}
|
|
1428
|
+
assert.ok(!content.includes("'/d', '/c',"), 'must not use /d /c without /s flag');
|
|
1429
|
+
const envVarRefs = content.match(/%AI_SPRINT_\w+%/g) || [];
|
|
1430
|
+
for (const ref of envVarRefs) {
|
|
1431
|
+
const idx = content.indexOf(ref);
|
|
1432
|
+
const before = content.slice(Math.max(0, idx - 2), idx);
|
|
1433
|
+
assert.ok(before.endsWith('"'), `env var ${ref} must be preceded by a double-quote for space-safe expansion`);
|
|
1434
|
+
}
|
|
1435
|
+
});
|
|
@@ -10,7 +10,7 @@ disable-model-invocation: true
|
|
|
10
10
|
- 读取 memory/CHECKPOINT.md 的最后一条
|
|
11
11
|
- 读取 memory/ISSUE_LOG.md 的最近 3 条
|
|
12
12
|
- 读取 memory/DECISIONS.md 的最近决策
|
|
13
|
-
-
|
|
13
|
+
- Runtime V2 痛苦诊断使用 task input/context,不使用 `.state/.pain_flag`
|
|
14
14
|
|
|
15
15
|
## Step 1: 读取运行参数与能力自检
|
|
16
16
|
- 读取 .principles/PROFILE.json,理解 risk_paths、gate、tests.commands。
|
|
@@ -80,4 +80,4 @@ disable-model-invocation: true
|
|
|
80
80
|
## Step 10: 最终汇报 (Final Briefing)
|
|
81
81
|
- **动作**: 委派 ``pd_spawn_agent(reporter)`` 进行结项陈述。
|
|
82
82
|
- **要求**: 将 Implementer 和 Reviewer 的最终产出作为输入传给它。让它根据 `USER_CONTEXT.md` 决定汇报的深度和风格。
|
|
83
|
-
- **目标**: 确保老板(用户)在不产生认知负荷的前提下,清楚了解任务成果与潜在风险。
|
|
83
|
+
- **目标**: 确保老板(用户)在不产生认知负荷的前提下,清楚了解任务成果与潜在风险。
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pd-cli-operator
|
|
3
|
+
description: 操作 Principles Disciple `pd` CLI 时使用:运行时健康检查、手动记录痛苦、查看 task/run/candidate/artifact、intake candidate、查看 flow policy、清理 legacy state。本技能提供安全 CLI 路由,并禁止直接写 `.state/.pain_flag`。
|
|
4
|
+
disable-model-invocation: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PD CLI Operator
|
|
8
|
+
|
|
9
|
+
把 `pd` CLI 当作唯一受支持的操作界面。不要手工修改 PD state 文件,除非某个 CLI 命令明确要求这样做。
|
|
10
|
+
|
|
11
|
+
## Runtime V2 痛苦诊断
|
|
12
|
+
|
|
13
|
+
手动痛苦诊断:
|
|
14
|
+
```bash
|
|
15
|
+
pd pain record --reason "<reason>" --score <0-100> --workspace "<workspace>" --json
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
成功标准:
|
|
19
|
+
- `status` 是 `succeeded`
|
|
20
|
+
- `candidateIds` 非空
|
|
21
|
+
- `ledgerEntryIds` 非空
|
|
22
|
+
|
|
23
|
+
禁止:
|
|
24
|
+
- 不要写 `.state/.pain_flag`。
|
|
25
|
+
- 不要用 `write_file`、shell 重定向、`Set-Content`、`Out-File` 或 `node -e` 创建 pain flag。
|
|
26
|
+
|
|
27
|
+
## 健康检查和策略
|
|
28
|
+
|
|
29
|
+
运行时探针:
|
|
30
|
+
```bash
|
|
31
|
+
pd runtime probe --runtime pi-ai --workspace "<workspace>" --json
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
业务流策略:
|
|
35
|
+
```bash
|
|
36
|
+
pd runtime flow show --workspace "<workspace>" --json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 查看 Runtime V2 对象
|
|
40
|
+
|
|
41
|
+
Tasks 和 runs:
|
|
42
|
+
```bash
|
|
43
|
+
pd task show --task-id "<taskId>" --json
|
|
44
|
+
pd run show --run-id "<runId>" --json
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Candidates 和 artifacts:
|
|
48
|
+
```bash
|
|
49
|
+
pd candidate list --workspace "<workspace>" --json
|
|
50
|
+
pd candidate show --candidate-id "<candidateId>" --workspace "<workspace>" --json
|
|
51
|
+
pd artifact show --artifact-id "<artifactId>" --workspace "<workspace>" --json
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
手动 intake:
|
|
55
|
+
```bash
|
|
56
|
+
pd candidate intake --candidate-id "<candidateId>" --workspace "<workspace>" --json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Legacy 管理
|
|
60
|
+
|
|
61
|
+
只有在明确清理旧状态时使用:
|
|
62
|
+
```bash
|
|
63
|
+
pd legacy cleanup --workspace "<workspace>" --dry-run
|
|
64
|
+
pd legacy cleanup --workspace "<workspace>" --apply
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
不要把 legacy cleanup 当作诊断触发入口。
|
|
@@ -89,7 +89,7 @@ disable-model-invocation: true
|
|
|
89
89
|
**目标**: 收集足够的事实证据,避免基于假设进行分析。
|
|
90
90
|
|
|
91
91
|
**执行步骤**:
|
|
92
|
-
1.
|
|
92
|
+
1. 使用 Runtime V2 task input/context 作为 Pain 信号来源。不要把 `.state/.pain_flag` 当作主要诊断输入。
|
|
93
93
|
2. 读取 `.state/logs/events.jsonl` 最近 100 行日志
|
|
94
94
|
3. 使用 `read_file` 或 `search_file_content` 搜索代码库中相关关键词
|
|
95
95
|
4. 记录所有证据来源(文件路径:行号)
|
|
@@ -211,7 +211,7 @@ A: GFI (Global Friction Index) 衡量系统的"痛苦程度",分值范围 0-10
|
|
|
211
211
|
A: EP (Evolution Points) 通过成功完成任务和问题修复累积。失败会扣除EP但有保护机制。达到阈值后自动升级EP等级,解锁更多权限(更大的代码修改限额)。
|
|
212
212
|
|
|
213
213
|
**Q: Pain Signal 是什么?**
|
|
214
|
-
A: Pain Signal
|
|
214
|
+
A: Pain Signal 是系统检测到的问题信号。Runtime V2 通过 `PainSignalBridge` 处理;手动触发使用 `pd pain record`。`.state/.pain_flag` 仅为 legacy compatibility。
|
|
215
215
|
|
|
216
216
|
**Q: 如何查看已安装的工具能力?**
|
|
217
217
|
A: 查看 `.state/SYSTEM_CAPABILITIES.json` 或运行 `/pd-bootstrap` 重新扫描。
|
|
@@ -1,51 +1,30 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pd-pain-signal
|
|
3
|
-
description:
|
|
3
|
+
description: 手动触发 Principles Disciple Runtime V2 痛苦诊断。用户报告 agent 卡住、循环、无响应,或要求记录/触发痛苦信号时使用。强制路径:使用 `pd pain record`;禁止写 `.state/.pain_flag`,禁止使用 legacy write_pain_flag 工具。
|
|
4
4
|
disable-model-invocation: false
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Pain Signal
|
|
7
|
+
# Pain Signal(Runtime V2)
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
手动痛苦诊断必须通过 CLI 进入 Runtime V2:
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
**强制执行约束**:
|
|
16
|
-
|
|
17
|
-
当你需要创建、写入、手动创建 pain flag 时,**必须**使用本技能,通过 `write_pain_flag` 工具完成。任何绕过本技能直接操作文件的行为都违反了本技能的强制约束。
|
|
11
|
+
```bash
|
|
12
|
+
pd pain record --reason "<reason>" --score <0-100> --workspace "<workspace>" --json
|
|
13
|
+
```
|
|
18
14
|
|
|
19
|
-
|
|
20
|
-
- ❌ 直接写 `.state/.pain_flag` 文件(任何方式都不行)
|
|
21
|
-
- ❌ 使用 bash heredoc(`cat <<EOF > .pain_flag`)
|
|
22
|
-
- ❌ 使用 `echo "..." > .pain_flag`
|
|
23
|
-
- ❌ 使用 `Set-Content` / `Out-File` 等 PowerShell 文件写入 cmdlets
|
|
24
|
-
- ❌ 使用 `node -e` 调用 `writePainFlag` 或 `buildPainFlag`
|
|
25
|
-
- ❌ 任何将 JavaScript 对象 `toString()` 写入文件的方式
|
|
26
|
-
- ❌ 通过 `exec` 工具调用 shell 命令写入 pain_flag 文件
|
|
15
|
+
## 禁止
|
|
27
16
|
|
|
28
|
-
|
|
17
|
+
- 不要直接写 `.state/.pain_flag`。
|
|
18
|
+
- 不要用 `write_file`、shell 重定向、`Set-Content`、`Out-File`、`node -e` 或任何文件写入方式创建 `.state/.pain_flag`。
|
|
19
|
+
- 不要使用 `write_pain_flag`。这是 legacy 路径。
|
|
29
20
|
|
|
30
|
-
|
|
31
|
-
- `reason` (必填): 痛苦的原因,描述具体发生了什么
|
|
32
|
-
- `score` (可选): 痛苦分数 0-100,默认 80(人工干预)
|
|
33
|
-
- `source` (可选): 来源,默认 `human_intervention`
|
|
34
|
-
- `is_risky` (可选): 是否高风险,默认 false
|
|
21
|
+
## 验证
|
|
35
22
|
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
source: "human_intervention",
|
|
42
|
-
is_risky: false
|
|
43
|
-
})
|
|
23
|
+
使用:
|
|
24
|
+
```bash
|
|
25
|
+
pd runtime probe --runtime pi-ai --workspace "<workspace>" --json
|
|
26
|
+
pd candidate list --workspace "<workspace>" --json
|
|
27
|
+
pd runtime flow show --workspace "<workspace>" --json
|
|
44
28
|
```
|
|
45
29
|
|
|
46
|
-
|
|
47
|
-
1. 识别到触发条件后,读取本技能描述
|
|
48
|
-
2. 调用 `write_pain_flag` 工具,传入 `reason` 等参数
|
|
49
|
-
3. 确认工具执行成功(返回 ✅)
|
|
50
|
-
4. 告知用户痛苦信号已注入,evolution 系统会在下次 heartbeat 时处理
|
|
51
|
-
5. 不得再执行任何直接文件写入操作
|
|
30
|
+
成功标准是 `candidateIds` 和 `ledgerEntryIds` 都非空。
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pd-runtime-v2
|
|
3
|
+
description: 当需要手动触发、验证或调试 Principles Disciple Runtime V2 痛苦诊断时使用。本技能强制使用 Runtime V2 入口:自动入口是高价值门控痛苦事件,手动入口是 `pd pain record`。禁止直接写 `.state/.pain_flag`。
|
|
4
|
+
disable-model-invocation: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PD Runtime V2 痛苦诊断
|
|
8
|
+
|
|
9
|
+
所有痛苦诊断都走 Runtime V2。不要把 legacy pain flag 文件当作诊断入口。
|
|
10
|
+
|
|
11
|
+
## 入口
|
|
12
|
+
|
|
13
|
+
自动入口:
|
|
14
|
+
- 工具失败先累计 GFI/摩擦。
|
|
15
|
+
- 只有高价值 episode 才进入 Runtime V2:高 GFI、重复同类失败、严重语义痛苦、LLM paralysis,或明确手动 pain。
|
|
16
|
+
- 通过门控的 `pain_detected` 进入 `PainSignalBridge`。
|
|
17
|
+
- Bridge 调用 `DiagnosticianRunner`,提交 candidate,并 intake 到 ledger。
|
|
18
|
+
|
|
19
|
+
手动入口:
|
|
20
|
+
```bash
|
|
21
|
+
pd pain record --reason "<reason>" --score <0-100> --workspace "<workspace>" --json
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
禁止入口:
|
|
25
|
+
- 不要写 `.state/.pain_flag`。
|
|
26
|
+
- 不要用 `write_file`、shell 重定向、`Set-Content`、`Out-File`、`node -e` 或任何文件写入方式创建 `.state/.pain_flag`。
|
|
27
|
+
- 不要使用 `write_pain_flag` 工具。Runtime V2 不使用这个工具。
|
|
28
|
+
|
|
29
|
+
## 状态查看命令
|
|
30
|
+
|
|
31
|
+
运行时健康检查:
|
|
32
|
+
```bash
|
|
33
|
+
pd runtime probe --runtime pi-ai --workspace "<workspace>" --json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
业务流策略:
|
|
37
|
+
```bash
|
|
38
|
+
pd runtime flow show --workspace "<workspace>" --json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
候选原则:
|
|
42
|
+
```bash
|
|
43
|
+
pd candidate list --workspace "<workspace>" --json
|
|
44
|
+
pd candidate show --candidate-id "<candidateId>" --workspace "<workspace>" --json
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 成功标准
|
|
48
|
+
|
|
49
|
+
一次诊断只有在同时满足以下条件时才算成功:
|
|
50
|
+
- `status` 是 `succeeded`
|
|
51
|
+
- `candidateIds` 非空
|
|
52
|
+
- `ledgerEntryIds` 非空
|
|
53
|
+
|
|
54
|
+
只创建 task 不算成功。没有 candidate 或 ledger entry 的 run 是失败、重试或未完成。
|
|
55
|
+
|
|
56
|
+
## 需要手动诊断时
|
|
57
|
+
|
|
58
|
+
1. 使用 `pd pain record`。
|
|
59
|
+
2. 检查 JSON 输出。
|
|
60
|
+
3. 如果 `candidateIds` 或 `ledgerEntryIds` 为空,视为未完成。
|
|
61
|
+
4. 用 `pd candidate list/show` 和 `pd runtime flow show` 继续排查。
|
|
@@ -17,7 +17,7 @@ const __dirname = dirname(__filename);
|
|
|
17
17
|
const packageRoot = join(__dirname, '..');
|
|
18
18
|
|
|
19
19
|
describe('Build Artifacts', () => {
|
|
20
|
-
const isProductionBuild = existsSync(join(packageRoot, 'dist'));
|
|
20
|
+
const isProductionBuild = existsSync(join(packageRoot, 'dist', 'bundle.js'));
|
|
21
21
|
|
|
22
22
|
describe('Required paths', () => {
|
|
23
23
|
const requiredPaths = [
|
|
@@ -36,8 +36,6 @@ describe('Build Artifacts', () => {
|
|
|
36
36
|
});
|
|
37
37
|
|
|
38
38
|
// NOTE: agents/ directory was removed in favor of embedded prompts.
|
|
39
|
-
// All role prompts are now inlined in nocturnal-trinity.ts at build time.
|
|
40
|
-
// See: nocturnal-trinity.ts NOCTURNAL_DREAMER_PROMPT, etc.
|
|
41
39
|
|
|
42
40
|
describe('Templates', () => {
|
|
43
41
|
it('should have templates directory with subdirectories', () => {
|