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
|
@@ -9,27 +9,6 @@
|
|
|
9
9
|
* @module subagent-workflow/types
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import type {
|
|
13
|
-
NocturnalArtifact,
|
|
14
|
-
ArbiterResult,
|
|
15
|
-
} from '../../core/nocturnal-arbiter.js';
|
|
16
|
-
import type {
|
|
17
|
-
BoundedAction,
|
|
18
|
-
} from '../../core/nocturnal-executability.js';
|
|
19
|
-
import type {
|
|
20
|
-
NocturnalSessionSnapshot,
|
|
21
|
-
} from '../../core/nocturnal-trajectory-extractor.js';
|
|
22
|
-
import type {
|
|
23
|
-
TrinityResult,
|
|
24
|
-
} from '../../core/nocturnal-trinity.js';
|
|
25
|
-
import type {
|
|
26
|
-
IdleCheckResult,
|
|
27
|
-
PreflightCheckResult,
|
|
28
|
-
} from '../nocturnal-runtime.js';
|
|
29
|
-
import type {
|
|
30
|
-
NocturnalSelectionResult,
|
|
31
|
-
} from '../nocturnal-target-selector.js';
|
|
32
|
-
|
|
33
12
|
// ── Workflow Transport ────────────────────────────────────────────────────────
|
|
34
13
|
|
|
35
14
|
/**
|
|
@@ -59,14 +38,14 @@ export type WorkflowTransport = 'runtime_direct';
|
|
|
59
38
|
* States marked with (*) are terminal states.
|
|
60
39
|
*/
|
|
61
40
|
export type WorkflowState =
|
|
62
|
-
| 'pending'
|
|
63
|
-
| 'active'
|
|
64
|
-
| 'wait_result'
|
|
65
|
-
| 'finalizing'
|
|
66
|
-
| 'completed'
|
|
67
|
-
| 'terminal_error'
|
|
68
|
-
| 'cleanup_pending'
|
|
69
|
-
| 'expired';
|
|
41
|
+
| 'pending'
|
|
42
|
+
| 'active'
|
|
43
|
+
| 'wait_result'
|
|
44
|
+
| 'finalizing'
|
|
45
|
+
| 'completed'
|
|
46
|
+
| 'terminal_error'
|
|
47
|
+
| 'cleanup_pending'
|
|
48
|
+
| 'expired';
|
|
70
49
|
|
|
71
50
|
// ── Workflow Metadata ────────────────────────────────────────────────────────
|
|
72
51
|
|
|
@@ -150,7 +129,6 @@ export interface WorkflowHandle {
|
|
|
150
129
|
* ```
|
|
151
130
|
*/
|
|
152
131
|
export interface SubagentWorkflowSpec<TResult> {
|
|
153
|
-
|
|
154
132
|
/** Unique identifier for this workflow type */
|
|
155
133
|
workflowType: string;
|
|
156
134
|
/** Which transport mechanism to use */
|
|
@@ -177,7 +155,6 @@ export interface SubagentWorkflowSpec<TResult> {
|
|
|
177
155
|
* For runtime_direct: typically finalize only on 'ok', skip on 'timeout'/'error'.
|
|
178
156
|
*/
|
|
179
157
|
shouldFinalizeOnWaitStatus: (status: 'ok' | 'error' | 'timeout') => boolean;
|
|
180
|
-
|
|
181
158
|
}
|
|
182
159
|
|
|
183
160
|
// ── Empathy Observer Specific Types ──────────────────────────────────────────
|
|
@@ -212,7 +189,7 @@ export interface EmpathyObserverWorkflowSpec extends SubagentWorkflowSpec<Empath
|
|
|
212
189
|
workflowType: 'empathy-observer';
|
|
213
190
|
transport: 'runtime_direct';
|
|
214
191
|
timeoutMs: 30_000;
|
|
215
|
-
ttlMs: 300_000;
|
|
192
|
+
ttlMs: 300_000;
|
|
216
193
|
shouldDeleteSessionAfterFinalize: true;
|
|
217
194
|
}
|
|
218
195
|
|
|
@@ -223,7 +200,6 @@ export interface EmpathyObserverWorkflowSpec extends SubagentWorkflowSpec<Empath
|
|
|
223
200
|
* This is what the helper exposes to business modules.
|
|
224
201
|
*/
|
|
225
202
|
export interface WorkflowManager {
|
|
226
|
-
|
|
227
203
|
/**
|
|
228
204
|
* Start a new workflow.
|
|
229
205
|
* Creates workflow state, spawns subagent, and returns handle.
|
|
@@ -283,7 +259,6 @@ export interface WorkflowManager {
|
|
|
283
259
|
* Release resources (DB connections, timers).
|
|
284
260
|
*/
|
|
285
261
|
dispose: () => void;
|
|
286
|
-
|
|
287
262
|
}
|
|
288
263
|
|
|
289
264
|
// ── Workflow Store (for SQLite persistence) ──────────────────────────────────
|
|
@@ -339,13 +314,6 @@ export interface WorkflowDebugSummary {
|
|
|
339
314
|
createdAt: number;
|
|
340
315
|
payload: Record<string, unknown>;
|
|
341
316
|
}[];
|
|
342
|
-
// NOC-16: Trinity stage states
|
|
343
|
-
trinityStageStates?: {
|
|
344
|
-
stage: 'dreamer' | 'philosopher' | 'scribe';
|
|
345
|
-
status: 'pending' | 'running' | 'completed' | 'failed';
|
|
346
|
-
reason?: string;
|
|
347
|
-
completedAt?: number;
|
|
348
|
-
}[];
|
|
349
317
|
}
|
|
350
318
|
|
|
351
319
|
// ── Convenience Re-exports ────────────────────────────────────────────────────
|
|
@@ -357,82 +325,3 @@ export type {
|
|
|
357
325
|
} from '../../openclaw-sdk.js';
|
|
358
326
|
|
|
359
327
|
export type { PluginLogger } from '../../openclaw-sdk.js';
|
|
360
|
-
|
|
361
|
-
// ── Nocturnal Workflow Types ───────────────────────────────────────────────────
|
|
362
|
-
|
|
363
|
-
/**
|
|
364
|
-
* Recent pain context for sleep_reflection tasks.
|
|
365
|
-
* Used by target selector for ranking bias and context enrichment.
|
|
366
|
-
* Originally from evolution-worker.ts, moved here to break circular dependency.
|
|
367
|
-
*/
|
|
368
|
-
export interface RecentPainContext {
|
|
369
|
-
/** Most recent unresolved pain event */
|
|
370
|
-
mostRecent: {
|
|
371
|
-
score: number;
|
|
372
|
-
source: string;
|
|
373
|
-
reason: string;
|
|
374
|
-
timestamp: string;
|
|
375
|
-
/** Session ID where the pain occurred */
|
|
376
|
-
sessionId: string;
|
|
377
|
-
} | null;
|
|
378
|
-
/** Count of pain events in the recent window (for signal strength) */
|
|
379
|
-
recentPainCount: number;
|
|
380
|
-
/** Highest pain score in the recent window */
|
|
381
|
-
recentMaxPainScore: number;
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
/**
|
|
385
|
-
* Nocturnal workflow result type.
|
|
386
|
-
* Mirrors NocturnalRunResult from nocturnal-service.ts (per D-02).
|
|
387
|
-
*/
|
|
388
|
-
export type NocturnalResult = {
|
|
389
|
-
success: boolean;
|
|
390
|
-
artifact?: NocturnalArtifact & { boundedAction?: BoundedAction };
|
|
391
|
-
skipReason?: string;
|
|
392
|
-
noTargetSelected: boolean;
|
|
393
|
-
validationFailed: boolean;
|
|
394
|
-
validationFailures: string[];
|
|
395
|
-
snapshot?: NocturnalSessionSnapshot;
|
|
396
|
-
diagnostics: NocturnalRunDiagnostics;
|
|
397
|
-
trinityTelemetry?: TrinityResult['telemetry'];
|
|
398
|
-
};
|
|
399
|
-
|
|
400
|
-
/**
|
|
401
|
-
* Diagnostics from each pipeline stage.
|
|
402
|
-
* Duplicated from nocturnal-service.ts to break circular dependency.
|
|
403
|
-
*/
|
|
404
|
-
export interface NocturnalRunDiagnostics {
|
|
405
|
-
/** Pre-flight check result */
|
|
406
|
-
preflight: PreflightCheckResult | null;
|
|
407
|
-
/** Selection result */
|
|
408
|
-
selection: NocturnalSelectionResult | null;
|
|
409
|
-
/** Idle check result */
|
|
410
|
-
idle: IdleCheckResult | null;
|
|
411
|
-
/** Whether Trinity chain was attempted */
|
|
412
|
-
trinityAttempted: boolean;
|
|
413
|
-
/** Trinity result (if trinityAttempted === true) */
|
|
414
|
-
trinityResult: TrinityResult | null;
|
|
415
|
-
/** Which chain mode was used */
|
|
416
|
-
chainModeUsed: 'trinity' | 'single-reflector' | null;
|
|
417
|
-
/** Arbiter validation result */
|
|
418
|
-
arbiterResult: ArbiterResult | null;
|
|
419
|
-
/** Executability validation result (if arbiter passed) */
|
|
420
|
-
executabilityResult: { executable: boolean; failures: string[] } | null;
|
|
421
|
-
/** Whether artifact was persisted */
|
|
422
|
-
persisted: boolean;
|
|
423
|
-
/** Persistence path (if persisted) */
|
|
424
|
-
persistedPath?: string;
|
|
425
|
-
/** Code-candidate sidecar diagnostics */
|
|
426
|
-
artificer: NocturnalArtificerDiagnostics;
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
export interface NocturnalArtificerDiagnostics {
|
|
430
|
-
status: 'skipped' | 'validation_failed' | 'persisted_candidate';
|
|
431
|
-
reason?:
|
|
432
|
-
| 'behavioral_artifact_unavailable'
|
|
433
|
-
| 'no_deterministic_rule'
|
|
434
|
-
| 'persistence_failed'
|
|
435
|
-
| 'cancelled';
|
|
436
|
-
validationErrors?: string[];
|
|
437
|
-
persistedPath?: string;
|
|
438
|
-
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
2
|
import Database from 'better-sqlite3';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as path from 'path';
|
|
5
5
|
import type { WorkflowRow, WorkflowEventRow, WorkflowState } from './types.js';
|
|
6
|
-
import type { DreamerOutput, PhilosopherOutput } from '../../core/nocturnal-trinity.js';
|
|
7
6
|
|
|
8
7
|
const SCHEMA_VERSION = 2;
|
|
9
8
|
|
|
@@ -75,17 +74,6 @@ export class WorkflowStore {
|
|
|
75
74
|
CREATE INDEX IF NOT EXISTS idx_workflows_child_session ON subagent_workflows(child_session_key);
|
|
76
75
|
CREATE INDEX IF NOT EXISTS idx_workflows_state ON subagent_workflows(state);
|
|
77
76
|
CREATE INDEX IF NOT EXISTS idx_workflows_type ON subagent_workflows(workflow_type);
|
|
78
|
-
CREATE TABLE IF NOT EXISTS subagent_workflow_stage_outputs (
|
|
79
|
-
workflow_id TEXT NOT NULL,
|
|
80
|
-
stage TEXT NOT NULL CHECK (stage IN ('dreamer', 'philosopher')),
|
|
81
|
-
output_json TEXT NOT NULL,
|
|
82
|
-
idempotency_key TEXT NOT NULL,
|
|
83
|
-
created_at INTEGER NOT NULL,
|
|
84
|
-
FOREIGN KEY (workflow_id) REFERENCES subagent_workflows(workflow_id) ON DELETE CASCADE
|
|
85
|
-
);
|
|
86
|
-
|
|
87
|
-
CREATE INDEX IF NOT EXISTS idx_stage_outputs_workflow ON subagent_workflow_stage_outputs(workflow_id);
|
|
88
|
-
CREATE UNIQUE INDEX IF NOT EXISTS idx_stage_outputs_idempotency ON subagent_workflow_stage_outputs(idempotency_key);
|
|
89
77
|
|
|
90
78
|
CREATE INDEX IF NOT EXISTS idx_events_workflow ON subagent_workflow_events(workflow_id);
|
|
91
79
|
`);
|
|
@@ -95,7 +83,6 @@ export class WorkflowStore {
|
|
|
95
83
|
if (currentVersion === 0) {
|
|
96
84
|
this.db.prepare('INSERT INTO schema_version (version) VALUES (?)').run(SCHEMA_VERSION);
|
|
97
85
|
} else if (currentVersion < SCHEMA_VERSION) {
|
|
98
|
-
// Run migrations for existing databases
|
|
99
86
|
this.runMigrations(currentVersion, SCHEMA_VERSION);
|
|
100
87
|
this.db.prepare('UPDATE schema_version SET version = ?').run(SCHEMA_VERSION);
|
|
101
88
|
}
|
|
@@ -103,12 +90,11 @@ export class WorkflowStore {
|
|
|
103
90
|
|
|
104
91
|
private runMigrations(fromVersion: number, toVersion: number): void {
|
|
105
92
|
if (fromVersion < 2 && toVersion >= 2) {
|
|
106
|
-
// v1 → v2: Add duration_ms column for adaptive timeout tracking
|
|
107
93
|
try {
|
|
108
94
|
this.db.exec('ALTER TABLE subagent_workflows ADD COLUMN duration_ms INTEGER');
|
|
109
95
|
console.info(`[PD:WorkflowStore] Schema migration v${fromVersion} → v${toVersion}: added duration_ms column`);
|
|
110
96
|
} catch {
|
|
111
|
-
|
|
97
|
+
void 0;
|
|
112
98
|
}
|
|
113
99
|
}
|
|
114
100
|
}
|
|
@@ -218,7 +204,6 @@ export class WorkflowStore {
|
|
|
218
204
|
`).all(cutoff) as WorkflowRow[];
|
|
219
205
|
}
|
|
220
206
|
|
|
221
|
-
/** List all workflows, optionally filtered by state. */
|
|
222
207
|
listWorkflows(state?: string): WorkflowRow[] {
|
|
223
208
|
if (state) {
|
|
224
209
|
return this.db.prepare(`
|
|
@@ -233,8 +218,6 @@ export class WorkflowStore {
|
|
|
233
218
|
`).all() as WorkflowRow[];
|
|
234
219
|
}
|
|
235
220
|
|
|
236
|
-
|
|
237
|
-
|
|
238
221
|
recordEvent(
|
|
239
222
|
workflowId: string,
|
|
240
223
|
eventType: string,
|
|
@@ -264,117 +247,17 @@ export class WorkflowStore {
|
|
|
264
247
|
SELECT * FROM subagent_workflow_events WHERE workflow_id = ? ORDER BY created_at ASC
|
|
265
248
|
`).all(workflowId) as WorkflowEventRow[];
|
|
266
249
|
}
|
|
267
|
-
|
|
268
|
-
/**
|
|
269
|
-
* Record a Trinity stage output to the database (NOC-11).
|
|
270
|
-
* idempotencyKey must be unique per (workflow_id, stage). If a row with the
|
|
271
|
-
* same idempotency_key already exists, this is a no-op (idempotent).
|
|
272
|
-
*/
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
recordStageOutput(
|
|
276
|
-
workflowId: string,
|
|
277
|
-
stage: 'dreamer' | 'philosopher',
|
|
278
|
-
output: DreamerOutput | PhilosopherOutput,
|
|
279
|
-
idempotencyKey: string
|
|
280
|
-
): void {
|
|
281
|
-
const now = Date.now();
|
|
282
|
-
// Use INSERT OR IGNORE for idempotency — if idempotency_key already exists, silently skip
|
|
283
|
-
this.db.prepare(`
|
|
284
|
-
INSERT OR IGNORE INTO subagent_workflow_stage_outputs (
|
|
285
|
-
workflow_id, stage, output_json, idempotency_key, created_at
|
|
286
|
-
) VALUES (?, ?, ?, ?, ?)
|
|
287
|
-
`).run(
|
|
288
|
-
workflowId,
|
|
289
|
-
stage,
|
|
290
|
-
JSON.stringify(output),
|
|
291
|
-
idempotencyKey,
|
|
292
|
-
now
|
|
293
|
-
);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
/**
|
|
297
|
-
* Get all stage outputs for a workflow (NOC-13 crash recovery).
|
|
298
|
-
* Returns outputs ordered by created_at ascending.
|
|
299
|
-
*/
|
|
300
|
-
getStageOutputs(workflowId: string): {
|
|
301
|
-
stage: string;
|
|
302
|
-
output: DreamerOutput | PhilosopherOutput;
|
|
303
|
-
idempotencyKey: string;
|
|
304
|
-
createdAt: number;
|
|
305
|
-
}[] {
|
|
306
|
-
const rows = this.db.prepare(`
|
|
307
|
-
SELECT workflow_id, stage, output_json, idempotency_key, created_at
|
|
308
|
-
FROM subagent_workflow_stage_outputs
|
|
309
|
-
WHERE workflow_id = ?
|
|
310
|
-
ORDER BY created_at ASC
|
|
311
|
-
`).all(workflowId) as {
|
|
312
|
-
workflow_id: string;
|
|
313
|
-
stage: string;
|
|
314
|
-
output_json: string;
|
|
315
|
-
idempotency_key: string;
|
|
316
|
-
created_at: number;
|
|
317
|
-
}[];
|
|
318
|
-
|
|
319
|
-
return rows.map(row => ({
|
|
320
|
-
workflowId: row.workflow_id,
|
|
321
|
-
stage: row.stage,
|
|
322
|
-
output: JSON.parse(row.output_json) as DreamerOutput | PhilosopherOutput,
|
|
323
|
-
idempotencyKey: row.idempotency_key,
|
|
324
|
-
createdAt: row.created_at,
|
|
325
|
-
}));
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/**
|
|
329
|
-
* Get a stage output by its idempotency key (NOC-12 idempotency check).
|
|
330
|
-
* Returns null if not found.
|
|
331
|
-
*/
|
|
332
|
-
getStageOutputByKey(idempotencyKey: string): {
|
|
333
|
-
stage: string;
|
|
334
|
-
output: DreamerOutput | PhilosopherOutput;
|
|
335
|
-
workflowId: string;
|
|
336
|
-
createdAt: number;
|
|
337
|
-
} | null {
|
|
338
|
-
const row = this.db.prepare(`
|
|
339
|
-
SELECT workflow_id, stage, output_json, idempotency_key, created_at
|
|
340
|
-
FROM subagent_workflow_stage_outputs
|
|
341
|
-
WHERE idempotency_key = ?
|
|
342
|
-
`).get(idempotencyKey) as {
|
|
343
|
-
workflow_id: string;
|
|
344
|
-
stage: string;
|
|
345
|
-
output_json: string;
|
|
346
|
-
idempotency_key: string;
|
|
347
|
-
created_at: number;
|
|
348
|
-
} | undefined;
|
|
349
|
-
|
|
350
|
-
if (!row) return null;
|
|
351
|
-
|
|
352
|
-
return {
|
|
353
|
-
workflowId: row.workflow_id,
|
|
354
|
-
stage: row.stage,
|
|
355
|
-
output: JSON.parse(row.output_json) as DreamerOutput | PhilosopherOutput,
|
|
356
|
-
createdAt: row.created_at,
|
|
357
|
-
};
|
|
358
|
-
}
|
|
359
250
|
|
|
360
251
|
deleteWorkflow(workflowId: string): void {
|
|
361
252
|
this.db.prepare('DELETE FROM subagent_workflows WHERE workflow_id = ?').run(workflowId);
|
|
362
253
|
}
|
|
363
254
|
|
|
364
|
-
/**
|
|
365
|
-
* Record the actual completion duration for a workflow.
|
|
366
|
-
* Used by adaptive timeout learning.
|
|
367
|
-
*/
|
|
368
255
|
recordDuration(workflowId: string, durationMs: number): void {
|
|
369
256
|
this.db.prepare(`
|
|
370
257
|
UPDATE subagent_workflows SET duration_ms = ?, updated_at = ? WHERE workflow_id = ?
|
|
371
258
|
`).run(durationMs, Date.now(), workflowId);
|
|
372
259
|
}
|
|
373
260
|
|
|
374
|
-
/**
|
|
375
|
-
* Get completion durations for a specific workflow type, ordered by most recent first.
|
|
376
|
-
* Returns an array of duration_ms values for adaptive timeout calculation.
|
|
377
|
-
*/
|
|
378
261
|
getCompletionDurations(workflowType: string, limit = 50): number[] {
|
|
379
262
|
const rows = this.db.prepare(`
|
|
380
263
|
SELECT duration_ms FROM subagent_workflows
|
|
@@ -12,8 +12,6 @@
|
|
|
12
12
|
* workflows as terminal_error (line 122)
|
|
13
13
|
* BUG-02: Gateway fallback cleans up child sessions via agentSession when
|
|
14
14
|
* subagentRuntime unavailable (lines 148-156)
|
|
15
|
-
* BUG-03: Nocturnal workflow snapshot validation detects pain_context_fallback
|
|
16
|
-
* with zero stats (lines 184-198)
|
|
17
15
|
*/
|
|
18
16
|
|
|
19
17
|
import type { WorkspaceContext } from '../core/workspace-context.js';
|
|
@@ -26,7 +24,6 @@ import { WORKFLOW_TTL_MS } from '../config/defaults/runtime.js';
|
|
|
26
24
|
export interface WatchdogResult {
|
|
27
25
|
anomalies: number;
|
|
28
26
|
details: string[];
|
|
29
|
-
/** Set when the watchdog scan itself failed (e.g., store errors). Undefined means scan succeeded. */
|
|
30
27
|
scanError?: string;
|
|
31
28
|
}
|
|
32
29
|
|
|
@@ -46,7 +43,6 @@ export async function runWorkflowWatchdog(
|
|
|
46
43
|
try {
|
|
47
44
|
const allWorkflows: WorkflowRow[] = store.listWorkflows();
|
|
48
45
|
|
|
49
|
-
// Check 1: Stale active workflows (active > 2x TTL)
|
|
50
46
|
const staleThreshold = WORKFLOW_TTL_MS * 2;
|
|
51
47
|
const staleActive = allWorkflows.filter(
|
|
52
48
|
(wf: WorkflowRow) => wf.state === 'active' && (now - wf.created_at) > staleThreshold,
|
|
@@ -56,9 +52,6 @@ export async function runWorkflowWatchdog(
|
|
|
56
52
|
const ageMin = Math.round((now - wf.created_at) / 60000);
|
|
57
53
|
details.push(`stale_active: ${wf.workflow_id} (${wf.workflow_type}, ${ageMin}min old)`);
|
|
58
54
|
|
|
59
|
-
// #257: Check if the last recorded event reason indicates expected subagent unavailability.
|
|
60
|
-
// If so, skip marking as terminal_error — the workflow is stale because the subagent
|
|
61
|
-
// was expectedly unavailable (daemon mode, process isolation), not due to a hard failure.
|
|
62
55
|
const events = store.getEvents(wf.workflow_id);
|
|
63
56
|
const lastEventReason = events.length > 0 ? events[events.length - 1].reason : 'unknown';
|
|
64
57
|
if (isExpectedSubagentError(lastEventReason)) {
|
|
@@ -69,7 +62,6 @@ export async function runWorkflowWatchdog(
|
|
|
69
62
|
store.updateWorkflowState(wf.workflow_id, 'terminal_error');
|
|
70
63
|
store.recordEvent(wf.workflow_id, 'watchdog_timeout', 'active', 'terminal_error', `Stale active > ${staleThreshold / 60000}s`, { ageMs: now - wf.created_at });
|
|
71
64
|
|
|
72
|
-
// Cleanup session if possible (#188: gateway-safe fallback)
|
|
73
65
|
if (wf.child_session_key) {
|
|
74
66
|
try {
|
|
75
67
|
if (subagentRuntime) {
|
|
@@ -104,7 +96,6 @@ export async function runWorkflowWatchdog(
|
|
|
104
96
|
}
|
|
105
97
|
}
|
|
106
98
|
|
|
107
|
-
// Check 2: Workflows in terminal_error/expired without cleanup
|
|
108
99
|
const unclearedTerminal = allWorkflows.filter(
|
|
109
100
|
(wf: WorkflowRow) => (wf.state === 'terminal_error' || wf.state === 'expired') && wf.cleanup_state === 'pending',
|
|
110
101
|
);
|
|
@@ -112,40 +103,6 @@ export async function runWorkflowWatchdog(
|
|
|
112
103
|
details.push(`uncleared_terminal: ${unclearedTerminal.length} workflows (will be swept next cycle)`);
|
|
113
104
|
}
|
|
114
105
|
|
|
115
|
-
// Check 3: Nocturnal workflow result validation (#181 pattern)
|
|
116
|
-
const nocturnalCompleted = allWorkflows.filter(
|
|
117
|
-
(wf: WorkflowRow) => wf.workflow_type === 'nocturnal' && wf.state === 'completed',
|
|
118
|
-
);
|
|
119
|
-
for (const wf of nocturnalCompleted) {
|
|
120
|
-
// Check if the metadata snapshot has all zeros (invalid data)
|
|
121
|
-
try {
|
|
122
|
-
const meta = JSON.parse(wf.metadata_json) as Record<string, unknown>;
|
|
123
|
-
const snapshot = meta.snapshot as Record<string, unknown> | undefined;
|
|
124
|
-
if (snapshot) {
|
|
125
|
-
// #219: Check for fallback data source (partial stats from pain context)
|
|
126
|
-
const dataSource = snapshot._dataSource as string | undefined;
|
|
127
|
-
if (dataSource === 'pain_context_fallback') {
|
|
128
|
-
details.push(`fallback_snapshot: nocturnal workflow ${wf.workflow_id} uses pain-context fallback (stats may be incomplete)`);
|
|
129
|
-
}
|
|
130
|
-
const stats = snapshot.stats as Record<string, number> | undefined;
|
|
131
|
-
// #246: Stats are now always number (never null). Detect "empty" fallback:
|
|
132
|
-
// fallback + all counts zero means no real data was available.
|
|
133
|
-
// NOTE: totalAssistantTurns may be 0 even for valid sessions because
|
|
134
|
-
// listRecentNocturnalCandidateSessions (used in fallback path) does not
|
|
135
|
-
// populate assistantTurnCount (only getNocturnalSessionSnapshot does).
|
|
136
|
-
// We use totalToolCalls=0 as the primary indicator instead.
|
|
137
|
-
if (stats && dataSource === 'pain_context_fallback' &&
|
|
138
|
-
stats.totalToolCalls === 0 && stats.totalGateBlocks === 0 &&
|
|
139
|
-
stats.failureCount === 0) {
|
|
140
|
-
details.push(`fallback_snapshot_stats: nocturnal workflow ${wf.workflow_id} has empty fallback stats (no trajectory data found)`);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
} catch (err) {
|
|
144
|
-
details.push(`malformed_metadata: workflow ${wf.workflow_id} has unparseable metadata: ${String(err).slice(0, 100)}`);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// Summary
|
|
149
106
|
const stateCounts: Record<string, number> = {};
|
|
150
107
|
for (const wf of allWorkflows) {
|
|
151
108
|
stateCounts[wf.state] = (stateCounts[wf.state] || 0) + 1;
|
|
@@ -1,74 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
EventCategory,
|
|
18
|
-
} from './event-types.js';
|
|
19
|
-
|
|
20
|
-
export type EventLogEntry =
|
|
21
|
-
| { ts: string; date: string; type: 'tool_call'; category: EventCategory; sessionId?: string; workspaceDir?: string; data: ToolCallEventData }
|
|
22
|
-
| { ts: string; date: string; type: 'pain_signal'; category: EventCategory; sessionId?: string; workspaceDir?: string; data: PainSignalEventData }
|
|
23
|
-
| { ts: string; date: string; type: 'rule_match'; category: EventCategory; sessionId?: string; workspaceDir?: string; data: RuleMatchEventData }
|
|
24
|
-
| { ts: string; date: string; type: 'rule_promotion'; category: EventCategory; sessionId?: string; workspaceDir?: string; data: RulePromotionEventData }
|
|
25
|
-
| { ts: string; date: string; type: 'hook_execution'; category: EventCategory; sessionId?: string; workspaceDir?: string; data: HookExecutionEventData }
|
|
26
|
-
| { ts: string; date: string; type: 'gate_block'; category: EventCategory; sessionId?: string; workspaceDir?: string; data: GateBlockEventData }
|
|
27
|
-
| { ts: string; date: string; type: 'gate_bypass'; category: EventCategory; sessionId?: string; workspaceDir?: string; data: GateBypassEventData }
|
|
28
|
-
| { ts: string; date: string; type: 'plan_approval'; category: EventCategory; sessionId?: string; workspaceDir?: string; data: PlanApprovalEventData }
|
|
29
|
-
| { ts: string; date: string; type: 'evolution_task'; category: EventCategory; sessionId?: string; workspaceDir?: string; data: EvolutionTaskEventData }
|
|
30
|
-
| { ts: string; date: string; type: 'empathy_rollback'; category: EventCategory; sessionId?: string; workspaceDir?: string; data: EmpathyRollbackEventData }
|
|
31
|
-
| { ts: string; date: string; type: 'error'; category: EventCategory; sessionId?: string; workspaceDir?: string; data: Record<string, unknown> }
|
|
32
|
-
| { ts: string; date: string; type: 'warn'; category: EventCategory; sessionId?: string; workspaceDir?: string; data: Record<string, unknown> };
|
|
33
|
-
|
|
34
|
-
// Type predicates for safe narrowing
|
|
35
|
-
|
|
36
|
-
export function isToolCallEventEntry(entry: EventLogEntry): entry is Extract<EventLogEntry, { type: 'tool_call' }> {
|
|
37
|
-
return entry.type === 'tool_call';
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export function isPainSignalEventEntry(entry: EventLogEntry): entry is Extract<EventLogEntry, { type: 'pain_signal' }> {
|
|
41
|
-
return entry.type === 'pain_signal';
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function isRuleMatchEventEntry(entry: EventLogEntry): entry is Extract<EventLogEntry, { type: 'rule_match' }> {
|
|
45
|
-
return entry.type === 'rule_match';
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function isRulePromotionEventEntry(entry: EventLogEntry): entry is Extract<EventLogEntry, { type: 'rule_promotion' }> {
|
|
49
|
-
return entry.type === 'rule_promotion';
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export function isHookExecutionEventEntry(entry: EventLogEntry): entry is Extract<EventLogEntry, { type: 'hook_execution' }> {
|
|
53
|
-
return entry.type === 'hook_execution';
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function isGateBlockEventEntry(entry: EventLogEntry): entry is Extract<EventLogEntry, { type: 'gate_block' }> {
|
|
57
|
-
return entry.type === 'gate_block';
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function isGateBypassEventEntry(entry: EventLogEntry): entry is Extract<EventLogEntry, { type: 'gate_bypass' }> {
|
|
61
|
-
return entry.type === 'gate_bypass';
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export function isPlanApprovalEventEntry(entry: EventLogEntry): entry is Extract<EventLogEntry, { type: 'plan_approval' }> {
|
|
65
|
-
return entry.type === 'plan_approval';
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export function isEvolutionTaskEventEntry(entry: EventLogEntry): entry is Extract<EventLogEntry, { type: 'evolution_task' }> {
|
|
69
|
-
return entry.type === 'evolution_task';
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export function isEmpathyRollbackEventEntry(entry: EventLogEntry): entry is Extract<EventLogEntry, { type: 'empathy_rollback' }> {
|
|
73
|
-
return entry.type === 'empathy_rollback';
|
|
74
|
-
}
|
|
1
|
+
export type {
|
|
2
|
+
EventLogEntry as DiscriminatedEventLogEntry,
|
|
3
|
+
} from '@principles/core/runtime-v2';
|
|
4
|
+
|
|
5
|
+
export {
|
|
6
|
+
isToolCallEventEntry,
|
|
7
|
+
isPainSignalEventEntry,
|
|
8
|
+
isRuleMatchEventEntry,
|
|
9
|
+
isRulePromotionEventEntry,
|
|
10
|
+
isHookExecutionEventEntry,
|
|
11
|
+
isGateBlockEventEntry,
|
|
12
|
+
isGateBypassEventEntry,
|
|
13
|
+
isPlanApprovalEventEntry,
|
|
14
|
+
isEvolutionTaskEventEntry,
|
|
15
|
+
isEmpathyRollbackEventEntry,
|
|
16
|
+
} from '@principles/core/runtime-v2';
|