principles-disciple 1.72.0 → 1.74.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/INSTALL.md +1 -3
- 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/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 +29 -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/migration.ts +0 -1
- 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/path-resolver.ts +0 -1
- package/src/core/paths.ts +0 -1
- 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 +71 -64
- package/src/hooks/gate.ts +183 -31
- 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 +400 -440
- 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 +59 -16
- 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 +38 -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 +8 -20
- 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 +7 -7
- package/templates/langs/en/core/BOOT.md +1 -1
- package/templates/langs/en/core/HEARTBEAT.md +2 -2
- package/templates/langs/en/principles/THINKING_OS.md +3 -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/scripts/run.mjs +51 -15
- package/templates/langs/en/skills/evolve-task/SKILL.md +3 -3
- 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 +2 -3
- 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 +7 -7
- package/templates/langs/zh/core/BOOT.md +1 -1
- package/templates/langs/zh/core/HEARTBEAT.md +2 -2
- package/templates/langs/zh/principles/THINKING_OS.md +3 -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/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 +4 -4
- 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 +2 -3
- 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/migration.test.ts +7 -7
- 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/path-resolver.test.ts +1 -1
- package/tests/core/paths-refactor.test.ts +0 -22
- 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-context.test.ts +2 -2
- package/tests/core/workspace-dir-validation.test.ts +8 -1
- package/tests/core-anti-growth.test.ts +191 -0
- package/tests/hook-workspace-nextaction-contract.test.ts +42 -0
- package/tests/hooks/confirm-first-removal.test.ts +188 -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-no-path-write-tool.test.ts +172 -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 +32 -17
- 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 +3 -1
- 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/templates/langs/en/skills/plan-script/SKILL.md +0 -32
- package/templates/langs/zh/skills/plan-script/SKILL.md +0 -32
- 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
|
@@ -22,233 +22,31 @@
|
|
|
22
22
|
* - Track principle value ranking (pain prevented, adherence rate)
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
-
import type {
|
|
25
|
+
import type { Principle as CorePrinciple } from '@principles/core/runtime-v2';
|
|
26
26
|
import type { PrincipleDetectorSpec } from '../core/evolution-types.js';
|
|
27
27
|
|
|
28
|
+
// Re-exported from core (PRI-51) for plugin consumers
|
|
29
|
+
export type {
|
|
30
|
+
PrinciplePriority,
|
|
31
|
+
PrincipleScope,
|
|
32
|
+
PrincipleEvaluability,
|
|
33
|
+
RuleStatus,
|
|
34
|
+
RuleType,
|
|
35
|
+
ImplementationLifecycleState,
|
|
36
|
+
ImplementationType,
|
|
37
|
+
Rule,
|
|
38
|
+
Implementation,
|
|
39
|
+
PrincipleDependency,
|
|
40
|
+
PrincipleValueMetrics,
|
|
41
|
+
PrincipleEventType,
|
|
42
|
+
PrincipleLifecycleEvent,
|
|
43
|
+
PrincipleTreeStore,
|
|
44
|
+
} from '@principles/core/runtime-v2';
|
|
45
|
+
|
|
28
46
|
// =========================================================================
|
|
29
47
|
// 1. PRINCIPLE (Tree Root) — Highly abstract, cross-scenario, value-driven
|
|
30
48
|
// =========================================================================
|
|
31
49
|
|
|
32
|
-
export
|
|
33
|
-
|
|
34
|
-
export type PrincipleScope = 'general' | 'domain';
|
|
35
|
-
|
|
36
|
-
export type PrincipleEvaluability =
|
|
37
|
-
| 'manual_only' // Cannot be automatically evaluated
|
|
38
|
-
| 'deterministic' // Clear yes/no evaluation criteria
|
|
39
|
-
| 'weak_heuristic'; // Fuzzy evaluation with confidence score
|
|
40
|
-
|
|
41
|
-
export interface Principle {
|
|
42
|
-
// Identity
|
|
43
|
-
id: string; // e.g., "P_060"
|
|
44
|
-
version: number; // Incremented on each update
|
|
45
|
-
|
|
46
|
-
// Core content
|
|
47
|
-
text: string; // One-line abstract principle statement
|
|
48
|
-
coreAxiomId?: string; // Associated core axiom (e.g., "T-01")
|
|
49
|
-
triggerPattern: string; // Regex/keywords for auto-matching pain signals
|
|
50
|
-
action: string; // What to do when triggered
|
|
51
|
-
|
|
52
|
-
// Status and lifecycle
|
|
53
|
-
status: PrincipleStatus;
|
|
54
|
-
priority: PrinciplePriority;
|
|
55
|
-
scope: PrincipleScope;
|
|
56
|
-
domain?: string; // Required when scope === 'domain', e.g., "file_operations"
|
|
57
|
-
evaluability: PrincipleEvaluability;
|
|
58
|
-
|
|
59
|
-
// Value metrics (auto-calculated)
|
|
60
|
-
valueScore: number; // pain_prevented_count × avg_pain_severity
|
|
61
|
-
adherenceRate: number; // 0-100, percentage of times followed
|
|
62
|
-
painPreventedCount: number; // Number of pain signals prevented by this principle
|
|
63
|
-
lastPainPreventedAt?: string; // ISO timestamp of most recent prevention
|
|
64
|
-
|
|
65
|
-
// Relationships
|
|
66
|
-
derivedFromPainIds: string[]; // Source pain signal IDs
|
|
67
|
-
ruleIds: string[]; // Associated rule IDs (trunk connections)
|
|
68
|
-
conflictsWithPrincipleIds: string[]; // Conflicting principles
|
|
69
|
-
supersedesPrincipleId?: string; // If this replaces a deprecated principle
|
|
70
|
-
|
|
71
|
-
// Metadata
|
|
72
|
-
createdAt: string; // ISO timestamp
|
|
73
|
-
updatedAt: string; // ISO timestamp
|
|
74
|
-
deprecatedAt?: string; // Set when status changes to 'deprecated'
|
|
75
|
-
deprecatedReason?: string; // Why it was deprecated (e.g., "solidified into hook at src/hooks/file-safety.ts")
|
|
76
|
-
|
|
77
|
-
// Detector metadata (for auto-training eligibility)
|
|
50
|
+
export interface Principle extends CorePrinciple {
|
|
78
51
|
detectorMetadata?: PrincipleDetectorSpec;
|
|
79
|
-
|
|
80
|
-
// Compilation retry tracking (for runtime auto-trigger)
|
|
81
|
-
// undefined = not yet attempted or succeeded; 0 = queued; n >= 1 = retry attempt n
|
|
82
|
-
compilationRetryCount?: number;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// =========================================================================
|
|
86
|
-
// 2. RULE (Tree Trunk) — Verifiable, actionable, principle-specific
|
|
87
|
-
// =========================================================================
|
|
88
|
-
|
|
89
|
-
export type RuleStatus =
|
|
90
|
-
| 'proposed' // Suggested but not implemented
|
|
91
|
-
| 'implemented' // Code/skill exists but not fully tested
|
|
92
|
-
| 'enforced' // Actively enforced with monitoring
|
|
93
|
-
| 'retired'; // No longer needed (principle deprecated)
|
|
94
|
-
|
|
95
|
-
export type RuleType =
|
|
96
|
-
| 'hook' // Code hook (before/after tool call)
|
|
97
|
-
| 'gate' // Pre-execution gate (block/warn)
|
|
98
|
-
| 'skill' // LLM skill/instruction
|
|
99
|
-
| 'lora' // Fine-tuned model weight
|
|
100
|
-
| 'test' // Automated test case
|
|
101
|
-
| 'prompt' // System prompt injection;
|
|
102
|
-
|
|
103
|
-
export interface Rule {
|
|
104
|
-
// Identity
|
|
105
|
-
id: string; // e.g., "R_060_01"
|
|
106
|
-
version: number;
|
|
107
|
-
|
|
108
|
-
// Core content
|
|
109
|
-
name: string; // Short descriptive name
|
|
110
|
-
description: string; // What this rule does
|
|
111
|
-
type: RuleType;
|
|
112
|
-
|
|
113
|
-
// Trigger and enforcement
|
|
114
|
-
triggerCondition: string; // When this rule activates (regex, tool name, context)
|
|
115
|
-
enforcement: 'block' | 'warn' | 'log'; // What happens when violated
|
|
116
|
-
action: string; // Concrete action to take
|
|
117
|
-
|
|
118
|
-
// Association
|
|
119
|
-
principleId: string; // Parent principle ID
|
|
120
|
-
parentRuleId?: string; // If this is a sub-rule
|
|
121
|
-
|
|
122
|
-
// Status and metrics
|
|
123
|
-
status: RuleStatus;
|
|
124
|
-
coverageRate: number; // 0-100, how often this rule catches violations
|
|
125
|
-
falsePositiveRate: number; // 0-100, how often this rule fires incorrectly
|
|
126
|
-
|
|
127
|
-
// Implementation reference
|
|
128
|
-
implementationPath?: string; // File path, skill name, or LoRA model path
|
|
129
|
-
testPath?: string; // Test file path
|
|
130
|
-
|
|
131
|
-
// Metadata
|
|
132
|
-
createdAt: string;
|
|
133
|
-
updatedAt: string;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// =========================================================================
|
|
137
|
-
// 3. IMPLEMENTATION (Tree Leaf) — Concrete, executable
|
|
138
|
-
// =========================================================================
|
|
139
|
-
|
|
140
|
-
export type ImplementationLifecycleState =
|
|
141
|
-
| 'candidate' // Newly created, awaiting replay evaluation
|
|
142
|
-
| 'active' // Currently active for this rule
|
|
143
|
-
| 'disabled' // Manually disabled (e.g., regression)
|
|
144
|
-
| 'archived'; // Permanently archived
|
|
145
|
-
|
|
146
|
-
export type ImplementationType = 'code' | 'skill' | 'lora' | 'test' | 'prompt';
|
|
147
|
-
|
|
148
|
-
export interface Implementation {
|
|
149
|
-
// Identity
|
|
150
|
-
id: string; // e.g., "IMPL_060_01_hook"
|
|
151
|
-
ruleId: string; // Parent rule ID
|
|
152
|
-
|
|
153
|
-
// Type and location
|
|
154
|
-
type: ImplementationType;
|
|
155
|
-
path: string; // File path, skill ID, or model path
|
|
156
|
-
version: string; // Code commit hash, skill version, or LoRA version
|
|
157
|
-
|
|
158
|
-
// Coverage
|
|
159
|
-
coversCondition: string; // What condition this implementation covers
|
|
160
|
-
coveragePercentage: number; // 0-100, how much of the rule this covers
|
|
161
|
-
|
|
162
|
-
// Lifecycle state
|
|
163
|
-
lifecycleState: ImplementationLifecycleState;
|
|
164
|
-
|
|
165
|
-
// Rollback support: tracks which implementation was active before this one
|
|
166
|
-
previousActive?: string; // Implementation ID that was active before promotion
|
|
167
|
-
|
|
168
|
-
// Disable metadata
|
|
169
|
-
disabledAt?: string; // ISO timestamp of disable
|
|
170
|
-
disabledBy?: string; // Who disabled (session/user)
|
|
171
|
-
disabledReason?: string; // Human-readable reason
|
|
172
|
-
|
|
173
|
-
// Archive metadata
|
|
174
|
-
archivedAt?: string; // ISO timestamp of archive
|
|
175
|
-
|
|
176
|
-
// Metadata
|
|
177
|
-
createdAt: string;
|
|
178
|
-
updatedAt: string;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// =========================================================================
|
|
182
|
-
// 4. PRINCIPLE-RELATIONSHIP GRAPH
|
|
183
|
-
// =========================================================================
|
|
184
|
-
|
|
185
|
-
export interface PrincipleDependency {
|
|
186
|
-
principleId: string;
|
|
187
|
-
dependsOn: string[]; // Principle IDs this depends on
|
|
188
|
-
conflictedWith: string[]; // Principle IDs this conflicts with
|
|
189
|
-
supersedes: string[]; // Principle IDs this replaces
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// =========================================================================
|
|
193
|
-
// 5. VALUE METRICS (Auto-calculated)
|
|
194
|
-
// =========================================================================
|
|
195
|
-
|
|
196
|
-
export interface PrincipleValueMetrics {
|
|
197
|
-
principleId: string;
|
|
198
|
-
|
|
199
|
-
// Pain prevention
|
|
200
|
-
painPreventedCount: number; // Total pain signals prevented
|
|
201
|
-
avgPainSeverityPrevented: number; // Average severity of prevented pain
|
|
202
|
-
lastPainPreventedAt?: string;
|
|
203
|
-
|
|
204
|
-
// Adherence tracking
|
|
205
|
-
totalOpportunities: number; // Times the principle could have applied
|
|
206
|
-
adheredCount: number; // Times the principle was followed
|
|
207
|
-
violatedCount: number; // Times the principle was violated
|
|
208
|
-
|
|
209
|
-
// Cost-benefit
|
|
210
|
-
implementationCost: number; // Dev hours to implement
|
|
211
|
-
benefitScore: number; // pain_prevented × severity × adherence_rate
|
|
212
|
-
|
|
213
|
-
// Timestamps
|
|
214
|
-
calculatedAt: string;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// =========================================================================
|
|
218
|
-
// 6. LIFECYCLE EVENTS (Event stream format for evolution.jsonl)
|
|
219
|
-
// =========================================================================
|
|
220
|
-
|
|
221
|
-
export type PrincipleEventType =
|
|
222
|
-
| 'principle_created'
|
|
223
|
-
| 'principle_updated'
|
|
224
|
-
| 'principle_promoted'
|
|
225
|
-
| 'principle_deprecated'
|
|
226
|
-
| 'rule_created'
|
|
227
|
-
| 'rule_enforced'
|
|
228
|
-
| 'rule_retired'
|
|
229
|
-
| 'implementation_added'
|
|
230
|
-
| 'value_metrics_updated';
|
|
231
|
-
|
|
232
|
-
export interface PrincipleLifecycleEvent {
|
|
233
|
-
ts: string; // ISO timestamp
|
|
234
|
-
type: PrincipleEventType;
|
|
235
|
-
data: {
|
|
236
|
-
principleId?: string;
|
|
237
|
-
ruleId?: string;
|
|
238
|
-
implementationId?: string;
|
|
239
|
-
reason: string;
|
|
240
|
-
metrics?: Partial<PrincipleValueMetrics>;
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// =========================================================================
|
|
245
|
-
// 8. STORE SCHEMA (principle_training_state.json extension)
|
|
246
|
-
// =========================================================================
|
|
247
|
-
|
|
248
|
-
export interface PrincipleTreeStore {
|
|
249
|
-
principles: Record<string, Principle>;
|
|
250
|
-
rules: Record<string, Rule>;
|
|
251
|
-
implementations: Record<string, Implementation>;
|
|
252
|
-
metrics: Record<string, PrincipleValueMetrics>;
|
|
253
|
-
lastUpdated: string;
|
|
254
52
|
}
|
package/src/types/queue.ts
CHANGED
|
@@ -1,70 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Workflow identifier — not interchangeable with plain string.
|
|
19
|
-
*/
|
|
20
|
-
export type WorkflowId = Brand<string, 'WorkflowId'>;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Session key — not interchangeable with plain string.
|
|
24
|
-
*/
|
|
25
|
-
export type SessionKey = Brand<string, 'SessionKey'>;
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Constructor for QueueItemId.
|
|
29
|
-
* @param id - raw string ID from queue operations
|
|
30
|
-
*/
|
|
31
|
-
export function toQueueItemId(id: string): QueueItemId {
|
|
32
|
-
return id as QueueItemId;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Constructor for WorkflowId.
|
|
37
|
-
* @param id - raw string ID from workflow operations
|
|
38
|
-
*/
|
|
39
|
-
export function toWorkflowId(id: string): WorkflowId {
|
|
40
|
-
return id as WorkflowId;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Constructor for SessionKey.
|
|
45
|
-
* @param key - raw string key from session operations
|
|
46
|
-
*/
|
|
47
|
-
export function toSessionKey(key: string): SessionKey {
|
|
48
|
-
return key as SessionKey;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Type predicate: true if value is a QueueItemId.
|
|
53
|
-
*/
|
|
54
|
-
export function isQueueItemId(value: unknown): value is QueueItemId {
|
|
55
|
-
return typeof value === 'string';
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Type predicate: true if value is a WorkflowId.
|
|
60
|
-
*/
|
|
61
|
-
export function isWorkflowId(value: unknown): value is WorkflowId {
|
|
62
|
-
return typeof value === 'string';
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Type predicate: true if value is a SessionKey.
|
|
67
|
-
*/
|
|
68
|
-
export function isSessionKey(value: unknown): value is SessionKey {
|
|
69
|
-
return typeof value === 'string';
|
|
70
|
-
}
|
|
1
|
+
export type {
|
|
2
|
+
Brand,
|
|
3
|
+
QueueItemId,
|
|
4
|
+
WorkflowId,
|
|
5
|
+
SessionKey,
|
|
6
|
+
} from '@principles/core/runtime-v2';
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
toQueueItemId,
|
|
10
|
+
toWorkflowId,
|
|
11
|
+
toSessionKey,
|
|
12
|
+
isQueueItemId,
|
|
13
|
+
isWorkflowId,
|
|
14
|
+
isSessionKey,
|
|
15
|
+
} from '@principles/core/runtime-v2';
|
|
@@ -1,49 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export interface RuntimeTruth {
|
|
7
|
-
queueState: {
|
|
8
|
-
total: number;
|
|
9
|
-
pending: number;
|
|
10
|
-
inProgress: number;
|
|
11
|
-
completed: number;
|
|
12
|
-
lastUpdated: string;
|
|
13
|
-
};
|
|
14
|
-
activeSessions: string[];
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Analytics truth represents historical data and aggregated metrics.
|
|
19
|
-
* Used for insights, trends, and supporting evidence (where explicitly allowed).
|
|
20
|
-
* NOT used for control decisions or Phase 3 eligibility.
|
|
21
|
-
* Sources: trajectory.db, daily-stats.json, control-ui DB
|
|
22
|
-
*/
|
|
23
|
-
export interface AnalyticsTruth {
|
|
24
|
-
trajectoryData: {
|
|
25
|
-
totalTasks: number;
|
|
26
|
-
successRate: number;
|
|
27
|
-
timeoutRate: number;
|
|
28
|
-
lastUpdated: string;
|
|
29
|
-
};
|
|
30
|
-
dailyStats: {
|
|
31
|
-
toolCalls: number;
|
|
32
|
-
painSignals: number;
|
|
33
|
-
evolutionTasks: number;
|
|
34
|
-
lastUpdated: string;
|
|
35
|
-
};
|
|
36
|
-
trends: {
|
|
37
|
-
sevenDay: TrendMetrics;
|
|
38
|
-
thirtyDay: TrendMetrics;
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Trend metrics for analytics aggregation.
|
|
44
|
-
*/
|
|
45
|
-
export interface TrendMetrics {
|
|
46
|
-
successRateChange: number;
|
|
47
|
-
toolCallVolumeChange: number;
|
|
48
|
-
painSignalRateChange: number;
|
|
49
|
-
}
|
|
1
|
+
export type {
|
|
2
|
+
RuntimeTruth,
|
|
3
|
+
AnalyticsTruth,
|
|
4
|
+
TrendMetrics,
|
|
5
|
+
} from '@principles/core/runtime-v2';
|
package/src/utils/io.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
2
|
import * as fs from 'fs';
|
|
3
|
-
import { resolvePdPath } from '../core/paths.js';
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Atomic file write — write to temp then rename to prevent partial writes on crash.
|
|
@@ -148,23 +147,12 @@ export function serializeKvLines(data: Record<string, any>): string {
|
|
|
148
147
|
return lines.join('\n');
|
|
149
148
|
}
|
|
150
149
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const parts = line.split(':');
|
|
160
|
-
if (parts.length > 1) {
|
|
161
|
-
return parts[1].trim().split(/\s+/)[0] || '';
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/* eslint-disable @typescript-eslint/no-unused-vars -- Reason: Error is intentionally ignored for graceful degradation */
|
|
166
|
-
} catch (_e) {
|
|
167
|
-
// Ignore read errors
|
|
168
|
-
}
|
|
169
|
-
return '';
|
|
150
|
+
/**
|
|
151
|
+
* Normalize command arguments from PluginCommandContext.args.
|
|
152
|
+
* Handles string | string[] | undefined union by joining arrays with spaces.
|
|
153
|
+
*/
|
|
154
|
+
export function normalizeCommandArgs(args: string | string[] | undefined): string {
|
|
155
|
+
if (args === undefined || args === null) return '';
|
|
156
|
+
if (Array.isArray(args)) return args.join(' ');
|
|
157
|
+
return args;
|
|
170
158
|
}
|
package/src/utils/retry.ts
CHANGED
|
@@ -307,7 +307,7 @@ export async function retryNetworkRequest<T>(
|
|
|
307
307
|
}
|
|
308
308
|
|
|
309
309
|
// =========================================================================
|
|
310
|
-
// Dynamic Timeout Support
|
|
310
|
+
// Dynamic Timeout Support
|
|
311
311
|
// =========================================================================
|
|
312
312
|
|
|
313
313
|
/** Minimum samples needed before trusting learned timeout values */
|
|
@@ -35,8 +35,8 @@ export function computeRuntimeShadowTaskFingerprint(
|
|
|
35
35
|
label: event.label ?? '',
|
|
36
36
|
mode: event.mode,
|
|
37
37
|
threadRequested: event.threadRequested,
|
|
38
|
-
requesterChannel: event.requester?.channel ?? '',
|
|
39
|
-
requesterThreadId: event.requester?.threadId ?? '',
|
|
38
|
+
requesterChannel: (event.requester as { channel?: string })?.channel ?? '',
|
|
39
|
+
requesterThreadId: (event.requester as { threadId?: string })?.threadId ?? '',
|
|
40
40
|
};
|
|
41
41
|
return crypto.createHash('sha256').update(JSON.stringify(payload)).digest('hex').slice(0, RUNTIME_SHADOW_FINGERPRINT_HEX_LENGTH);
|
|
42
42
|
}
|
|
@@ -8,6 +8,7 @@ import type { OpenClawPluginApi, PluginCommandContext } from '../openclaw-sdk.js
|
|
|
8
8
|
import { validateWorkspaceDir, type WorkspaceResolutionContext } from '../core/workspace-dir-validation.js';
|
|
9
9
|
import { resolveWorkspaceDir } from '../core/workspace-dir-service.js';
|
|
10
10
|
import { resolveWorkspaceDirFromApi } from '../core/path-resolver.js';
|
|
11
|
+
import * as path from 'path';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Resolve workspace directory for command execution.
|
|
@@ -93,3 +94,52 @@ export function resolveToolHookWorkspaceDirSafe(
|
|
|
93
94
|
): string | undefined {
|
|
94
95
|
return resolveWorkspaceDir(api, ctx, { source });
|
|
95
96
|
}
|
|
97
|
+
|
|
98
|
+
export class WorkspaceResolutionError extends Error {
|
|
99
|
+
readonly reason: string;
|
|
100
|
+
readonly nextAction: string;
|
|
101
|
+
|
|
102
|
+
constructor(message: string, reason: string, nextAction: string) {
|
|
103
|
+
super(message);
|
|
104
|
+
this.name = 'WorkspaceResolutionError';
|
|
105
|
+
this.reason = reason;
|
|
106
|
+
this.nextAction = nextAction;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
toJSON() {
|
|
110
|
+
return {
|
|
111
|
+
ok: false as const,
|
|
112
|
+
reason: this.reason,
|
|
113
|
+
message: this.message,
|
|
114
|
+
nextAction: this.nextAction,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function resolveWorkspaceDirForRuntimeV2(
|
|
120
|
+
ctx: { workspaceDir?: string },
|
|
121
|
+
api: OpenClawPluginApi | undefined,
|
|
122
|
+
source: string,
|
|
123
|
+
): string {
|
|
124
|
+
const explicit = ctx.workspaceDir;
|
|
125
|
+
if (!explicit || !explicit.trim()) {
|
|
126
|
+
throw new WorkspaceResolutionError(
|
|
127
|
+
`No explicit workspace directory for Runtime V2 entrypoint (${source}). ` +
|
|
128
|
+
'Provide workspaceDir in context. Runtime V2 does not use legacy discovery fallback.',
|
|
129
|
+
'workspace_dir_missing',
|
|
130
|
+
'Ensure the OpenClaw hook context includes workspaceDir, or set PD_WORKSPACE_DIR environment variable.',
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const normalized = path.resolve(explicit.trim());
|
|
135
|
+
const validation = validateWorkspaceDir(normalized);
|
|
136
|
+
if (validation) {
|
|
137
|
+
throw new WorkspaceResolutionError(
|
|
138
|
+
`workspaceDir validation failed for ${source}: ${validation}`,
|
|
139
|
+
'workspace_dir_invalid',
|
|
140
|
+
'Provide a valid workspaceDir that is not the home directory, root, or empty.',
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return normalized;
|
|
145
|
+
}
|
|
@@ -17,8 +17,7 @@ As Principles Disciple, you must distinguish between two physical spaces:
|
|
|
17
17
|
Make decisions based on relative paths in the **Project Battlefield**:
|
|
18
18
|
|
|
19
19
|
- **Strategic Focus**: `./memory/STRATEGY.md`
|
|
20
|
-
- **
|
|
21
|
-
- **Pain Signal**: `./.state/.pain_flag`
|
|
20
|
+
- **Pain Signal**: Runtime V2 `PainSignalBridge` (`pd pain record` for manual trigger; `.state/.pain_flag` is legacy compatibility only)
|
|
22
21
|
- **System Capabilities**: `./.state/SYSTEM_CAPABILITIES.json`
|
|
23
22
|
|
|
24
23
|
---
|
|
@@ -72,7 +71,7 @@ When you receive a heartbeat poll, don't just reply `HEARTBEAT_OK` every time. U
|
|
|
72
71
|
|
|
73
72
|
### What to Check (rotate through these):
|
|
74
73
|
|
|
75
|
-
- **Pain & Evolution**: Check
|
|
74
|
+
- **Pain & Evolution**: Check Runtime V2 diagnostics (`pd pain record`, candidates, ledger) and `EVOLUTION_QUEUE.json`; `.pain_flag` is legacy compatibility only
|
|
76
75
|
- **Strategic Alignment**: Compare against `CURRENT_FOCUS.md`
|
|
77
76
|
- **Environment Health**: Tool chain status, project root cleanliness
|
|
78
77
|
|
|
@@ -166,12 +165,13 @@ On platforms that support reactions (Discord, Slack), use emoji reactions natura
|
|
|
166
165
|
You default to architect mode.
|
|
167
166
|
|
|
168
167
|
- **L1 (Direct Execution)**: Single-file tweaks, doc maintenance → do it directly
|
|
169
|
-
- **L2 (Delegation Protocol)**: Major changes →
|
|
168
|
+
- **L2 (Delegation Protocol)**: Major changes → recommended to describe the plan and get owner confirmation before executing
|
|
170
169
|
|
|
171
|
-
###
|
|
170
|
+
### Planning Guidance
|
|
172
171
|
|
|
173
|
-
-
|
|
174
|
-
-
|
|
172
|
+
- For complex tasks, consider drafting a plan document and getting owner approval before making large changes
|
|
173
|
+
- This is a behavioral suggestion, not a built-in gate — PD does not enforce plan-before-action by default
|
|
174
|
+
- If an owner-approved RuleHost rule enforces planning behavior, that rule takes effect automatically
|
|
175
175
|
- **Prevent pollution**: Never write execution details back to strategic documents
|
|
176
176
|
|
|
177
177
|
---
|
|
@@ -16,7 +16,7 @@ Short, explicit instructions for what OpenClaw should do on startup. If the task
|
|
|
16
16
|
2. **Confirm workspace**: Check current working directory is correct
|
|
17
17
|
3. **Read identity files**: `SOUL.md`, `USER.md`, `IDENTITY.md`
|
|
18
18
|
4. **Check memory state**: Read today's and yesterday's `memory/YYYY-MM-DD.md`
|
|
19
|
-
5. **Check pain
|
|
19
|
+
5. **Check Runtime V2 pain diagnostics**: use `pd candidate list` / ledger state; `.state/.pain_flag` is legacy compatibility only
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
@@ -8,7 +8,7 @@ On each heartbeat, run these core checks. **Don't just reply `HEARTBEAT_OK` ever
|
|
|
8
8
|
|
|
9
9
|
## 🩹 Pain & Evolution Check
|
|
10
10
|
|
|
11
|
-
- [ ]
|
|
11
|
+
- [ ] **Runtime V2 pain** — Check `pd candidate list` / ledger if a recent `pd pain record` or tool failure occurred. `.state/.pain_flag` is legacy compatibility only.
|
|
12
12
|
- [ ] **`.state/evolution_queue.json`** — Any pending evolution tasks?
|
|
13
13
|
- [ ] **`memory/logs/SYSTEM.log`** — Any unresolved high-priority issues?
|
|
14
14
|
|
|
@@ -71,4 +71,4 @@ On each heartbeat, run these core checks. **Don't just reply `HEARTBEAT_OK` ever
|
|
|
71
71
|
|
|
72
72
|
---
|
|
73
73
|
|
|
74
|
-
*If no issues and no action needed, reply `HEARTBEAT_OK` to save tokens.*
|
|
74
|
+
*If no issues and no action needed, reply `HEARTBEAT_OK` to save tokens.*
|
|
@@ -39,8 +39,9 @@ LLMs are highly sensitive to XML tags; this structure is designed to boost instr
|
|
|
39
39
|
<!-- 执行与物理限制 (Execution & Physical Constraints) -->
|
|
40
40
|
<directive id="T-05" name="PHYSICAL_DEFENSE_AND_ORCHESTRATION">
|
|
41
41
|
<trigger>When asked to perform a major refactoring, multi-file change (>2 files), or an architectural shift.</trigger>
|
|
42
|
-
<
|
|
43
|
-
<
|
|
42
|
+
<should>For complex changes, describe your plan and get owner confirmation before executing.</should>
|
|
43
|
+
<must>Limit your blast radius. After any code change, you MUST run canary tests (e.g., `npm test`, linters) to verify integrity.</must>
|
|
44
|
+
<forbidden>Executing large-scale unstructured changes directly, or skipping post-modification validation.</forbidden>
|
|
44
45
|
</directive>
|
|
45
46
|
|
|
46
47
|
<directive id="T-06" name="OCCAMS_RAZOR_MVC">
|