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
package/src/types/event-types.ts
CHANGED
|
@@ -1,547 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
| 'blocked'
|
|
40
|
-
| 'bypassed'
|
|
41
|
-
| 'approved'
|
|
42
|
-
| 'enqueued'
|
|
43
|
-
| 'completed'
|
|
44
|
-
| 'promoted'
|
|
45
|
-
| 'passed'
|
|
46
|
-
| 'changed'
|
|
47
|
-
| 'rolled_back'
|
|
48
|
-
// C: New categories for diagnostician heartbeat chain
|
|
49
|
-
| 'written'
|
|
50
|
-
| 'injected'
|
|
51
|
-
| 'created'
|
|
52
|
-
| 'matched'
|
|
53
|
-
// C: New categories for RuleHost funnel (PD-FUNNEL-2.4) — completed/created already exist
|
|
54
|
-
| 'evaluated' // Used by: rulehost_evaluated
|
|
55
|
-
| 'blocked' // Used by: rulehost_blocked
|
|
56
|
-
| 'requireApproval'; // Used by: rulehost_requireApproval
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Base event structure for JSONL logging.
|
|
60
|
-
*/
|
|
61
|
-
export interface EventLogEntry {
|
|
62
|
-
/** ISO timestamp */
|
|
63
|
-
ts: string;
|
|
64
|
-
/** Date for partitioning (YYYY-MM-DD) */
|
|
65
|
-
date: string;
|
|
66
|
-
/** Event type */
|
|
67
|
-
type: EventType;
|
|
68
|
-
/** Event category */
|
|
69
|
-
category: EventCategory;
|
|
70
|
-
/** Session identifier */
|
|
71
|
-
sessionId?: string;
|
|
72
|
-
/** Workspace directory */
|
|
73
|
-
workspaceDir?: string;
|
|
74
|
-
/** Event-specific data */
|
|
75
|
-
data: Record<string, unknown>;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// ============== Specific Event Data ==============
|
|
79
|
-
|
|
80
|
-
export interface ToolCallEventData {
|
|
81
|
-
toolName: string;
|
|
82
|
-
filePath?: string;
|
|
83
|
-
error?: string;
|
|
84
|
-
errorType?: string;
|
|
85
|
-
gfi?: number;
|
|
86
|
-
consecutiveErrors?: number;
|
|
87
|
-
exitCode?: number;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export interface PainSignalEventData {
|
|
91
|
-
score: number;
|
|
92
|
-
source: string;
|
|
93
|
-
eventId?: string;
|
|
94
|
-
reason?: string;
|
|
95
|
-
isRisky?: boolean;
|
|
96
|
-
origin?: 'assistant_self_report' | 'user_manual' | 'system_infer';
|
|
97
|
-
severity?: 'mild' | 'moderate' | 'severe';
|
|
98
|
-
confidence?: number;
|
|
99
|
-
detection_mode?: 'structured' | 'legacy_tag';
|
|
100
|
-
deduped?: boolean;
|
|
101
|
-
trigger_text_excerpt?: string;
|
|
102
|
-
raw_score?: number;
|
|
103
|
-
calibrated_score?: number;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
export interface RuleMatchEventData {
|
|
107
|
-
ruleId: string;
|
|
108
|
-
layer: 'L1' | 'L2' | 'L3';
|
|
109
|
-
severity: number;
|
|
110
|
-
textPreview: string;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
export interface RulePromotionEventData {
|
|
114
|
-
fingerprint: string;
|
|
115
|
-
ruleId: string;
|
|
116
|
-
phrase: string;
|
|
117
|
-
sampleCount: number;
|
|
118
|
-
avgSimilarity: number;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
export interface HookExecutionEventData {
|
|
122
|
-
hook: string;
|
|
123
|
-
sessionId?: string;
|
|
124
|
-
durationMs?: number;
|
|
125
|
-
error?: string;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export interface GateBlockEventData {
|
|
129
|
-
toolName: string;
|
|
130
|
-
filePath: string;
|
|
131
|
-
reason: string;
|
|
132
|
-
planStatus?: string;
|
|
133
|
-
/** Source module that triggered the block (for audit trail) */
|
|
134
|
-
blockSource?: string;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export interface GateBypassEventData {
|
|
138
|
-
toolName: string;
|
|
139
|
-
filePath: string;
|
|
140
|
-
bypassType: 'stage4_architect' | 'whitelisted';
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
export interface PlanApprovalEventData {
|
|
144
|
-
toolName: string;
|
|
145
|
-
filePath: string;
|
|
146
|
-
pattern: string;
|
|
147
|
-
planStatus: string;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export interface EvolutionTaskEventData {
|
|
151
|
-
taskId: string;
|
|
152
|
-
taskType: string;
|
|
153
|
-
reason: string;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
export interface EmpathyRollbackEventData {
|
|
157
|
-
/** Event ID being rolled back */
|
|
158
|
-
eventId: string;
|
|
159
|
-
/** Original penalty score that was applied */
|
|
160
|
-
originalScore: number;
|
|
161
|
-
/** Session ID where the original event occurred */
|
|
162
|
-
originalSessionId?: string;
|
|
163
|
-
/** Reason for rollback (manual, false_positive, etc.) */
|
|
164
|
-
reason: string;
|
|
165
|
-
/** Who initiated the rollback */
|
|
166
|
-
triggeredBy: 'user_command' | 'natural_language' | 'system';
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* C: New event data types for diagnostician heartbeat chain observability.
|
|
171
|
-
* Maps heartbeat_injected -> when prompt.ts injects diagnostician tasks into heartbeat
|
|
172
|
-
*/
|
|
173
|
-
export interface HeartbeatDiagnosisEventData {
|
|
174
|
-
taskCount: number;
|
|
175
|
-
taskIds: string[];
|
|
176
|
-
trigger: 'heartbeat' | 'immediate';
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Maps diagnosis_task_written -> when evolution-worker writes to diagnostician_tasks.json
|
|
181
|
-
*/
|
|
182
|
-
export interface DiagnosisTaskEventData {
|
|
183
|
-
taskId: string;
|
|
184
|
-
painEventId?: string;
|
|
185
|
-
sessionId?: string;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Maps diagnostician_report_written -> when diagnostician completes and writes report
|
|
190
|
-
*/
|
|
191
|
-
export interface DiagnosticianReportEventData {
|
|
192
|
-
taskId: string;
|
|
193
|
-
reportPath: string;
|
|
194
|
-
/** Three-state category replacing boolean success field.
|
|
195
|
-
* - 'success': JSON exists and has principle field
|
|
196
|
-
* - 'missing_json': marker exists but JSON does not (Issue #366, LLM output truncation)
|
|
197
|
-
* - 'incomplete_fields': JSON exists but missing principle field
|
|
198
|
-
*/
|
|
199
|
-
category: 'success' | 'missing_json' | 'incomplete_fields';
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Maps principle_candidate_created -> when evolution-worker extracts principle from report
|
|
204
|
-
*/
|
|
205
|
-
export interface PrincipleCandidateEventData {
|
|
206
|
-
principleId: string;
|
|
207
|
-
taskId: string;
|
|
208
|
-
source: 'diagnostician' | 'nocturnal' | 'manual';
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Maps rule_enforced -> when RuleHost evaluate() returns matched during tool call
|
|
213
|
-
*/
|
|
214
|
-
export interface RuleEnforcedEventData {
|
|
215
|
-
ruleId: string;
|
|
216
|
-
principleId: string;
|
|
217
|
-
enforcement: 'warn' | 'block' | 'requireApproval';
|
|
218
|
-
toolName: string;
|
|
219
|
-
filePath: string;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// ============== Nocturnal Funnel Events (PD-FUNNEL-2.3) ==============
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* nocturnal_dreamer_completed — Trinity Dreamer stage completed.
|
|
226
|
-
* Emitted from nocturnal-workflow-manager.ts after Trinity chain success.
|
|
227
|
-
*/
|
|
228
|
-
export interface NocturnalDreamerCompletedEventData {
|
|
229
|
-
workflowId: string;
|
|
230
|
-
principleId: string;
|
|
231
|
-
sessionId: string;
|
|
232
|
-
candidateCount: number;
|
|
233
|
-
chainMode: 'trinity' | 'single-reflector';
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* nocturnal_artifact_persisted — Artifact saved to .state/nocturnal/samples/.
|
|
238
|
-
* Emitted from nocturnal-service.ts persistArtifact() after atomicWriteFileSync.
|
|
239
|
-
*/
|
|
240
|
-
export interface NocturnalArtifactPersistedEventData {
|
|
241
|
-
artifactId: string;
|
|
242
|
-
principleId: string;
|
|
243
|
-
persistedPath: string;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
/**
|
|
247
|
-
* nocturnal_code_candidate_created — Rule implementation candidate persisted.
|
|
248
|
-
* Emitted from nocturnal-service.ts persistCodeCandidate() after successful creation.
|
|
249
|
-
*/
|
|
250
|
-
export interface NocturnalCodeCandidateCreatedEventData {
|
|
251
|
-
implementationId: string;
|
|
252
|
-
artifactId: string;
|
|
253
|
-
ruleId: string;
|
|
254
|
-
persistedPath: string;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// ============== RuleHost Funnel Events (PD-FUNNEL-2.4) ==============
|
|
258
|
-
|
|
259
|
-
/**
|
|
260
|
-
* rulehost_evaluated — RuleHost.evaluate() was called.
|
|
261
|
-
* Emitted from gate.ts for every evaluate() call (matched or not).
|
|
262
|
-
*/
|
|
263
|
-
export interface RuleHostEvaluatedEventData {
|
|
264
|
-
toolName: string;
|
|
265
|
-
filePath: string;
|
|
266
|
-
matched: boolean;
|
|
267
|
-
decision: 'allow' | 'block' | 'requireApproval';
|
|
268
|
-
ruleId?: string;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
/**
|
|
272
|
-
* rulehost_blocked — Tool call was blocked by RuleHost.
|
|
273
|
-
* Emitted from gate.ts when hostResult.decision === 'block'.
|
|
274
|
-
*/
|
|
275
|
-
export interface RuleHostBlockedEventData {
|
|
276
|
-
toolName: string;
|
|
277
|
-
filePath: string;
|
|
278
|
-
reason: string;
|
|
279
|
-
ruleId?: string;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* rulehost_requireApproval — Tool call requires approval by RuleHost.
|
|
284
|
-
* Emitted from gate.ts when hostResult.decision === 'requireApproval'.
|
|
285
|
-
*/
|
|
286
|
-
export interface RuleHostRequireApprovalEventData {
|
|
287
|
-
toolName: string;
|
|
288
|
-
filePath: string;
|
|
289
|
-
reason: string;
|
|
290
|
-
ruleId?: string;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
// ============== Daily Statistics ==============
|
|
294
|
-
|
|
295
|
-
export interface ToolCallStats {
|
|
296
|
-
total: number;
|
|
297
|
-
success: number;
|
|
298
|
-
failure: number;
|
|
299
|
-
byTool: Record<string, { success: number; failure: number }>;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
export interface ErrorStats {
|
|
303
|
-
total: number;
|
|
304
|
-
byType: Record<string, number>;
|
|
305
|
-
byTool: Record<string, number>;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
export interface PainStats {
|
|
309
|
-
signalsDetected: number;
|
|
310
|
-
signalsBySource: Record<string, number>;
|
|
311
|
-
rulesMatched: Record<string, number>;
|
|
312
|
-
candidatesPromoted: number;
|
|
313
|
-
avgScore: number;
|
|
314
|
-
maxScore: number;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* Empathy Engine event statistics for tracking emotional signals.
|
|
319
|
-
* Used for /pd-status empathy card and effectiveness metrics.
|
|
320
|
-
*/
|
|
321
|
-
export interface EmpathyEventStats {
|
|
322
|
-
/** Total empathy events detected (excluding deduped) */
|
|
323
|
-
totalEvents: number;
|
|
324
|
-
/** Events that were deduped (not counted in totalEvents) */
|
|
325
|
-
dedupedCount: number;
|
|
326
|
-
/** Dedupe hit rate (dedupedCount / (totalEvents + dedupedCount)) */
|
|
327
|
-
dedupeHitRate: number;
|
|
328
|
-
/** Total penalty score applied */
|
|
329
|
-
totalPenaltyScore: number;
|
|
330
|
-
/** Score rolled back via manual rollback */
|
|
331
|
-
rolledBackScore: number;
|
|
332
|
-
/** Number of rollback operations */
|
|
333
|
-
rollbackCount: number;
|
|
334
|
-
/** Events by severity level */
|
|
335
|
-
bySeverity: {
|
|
336
|
-
mild: number;
|
|
337
|
-
moderate: number;
|
|
338
|
-
severe: number;
|
|
339
|
-
};
|
|
340
|
-
/** Score by severity level */
|
|
341
|
-
scoreBySeverity: {
|
|
342
|
-
mild: number;
|
|
343
|
-
moderate: number;
|
|
344
|
-
severe: number;
|
|
345
|
-
};
|
|
346
|
-
/** Events by detection mode */
|
|
347
|
-
byDetectionMode: {
|
|
348
|
-
structured: number;
|
|
349
|
-
legacy_tag: number;
|
|
350
|
-
};
|
|
351
|
-
/** Events by origin */
|
|
352
|
-
byOrigin: {
|
|
353
|
-
assistant_self_report: number;
|
|
354
|
-
user_manual: number;
|
|
355
|
-
system_infer: number;
|
|
356
|
-
};
|
|
357
|
-
/** Confidence distribution */
|
|
358
|
-
confidenceDistribution: {
|
|
359
|
-
high: number; // confidence >= 0.8
|
|
360
|
-
medium: number; // 0.5 <= confidence < 0.8
|
|
361
|
-
low: number; // confidence < 0.5
|
|
362
|
-
};
|
|
363
|
-
/** Daily trend (last 7 days) */
|
|
364
|
-
dailyTrend: {
|
|
365
|
-
date: string;
|
|
366
|
-
count: number;
|
|
367
|
-
score: number;
|
|
368
|
-
}[];
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
export interface GfiStats {
|
|
372
|
-
peak: number;
|
|
373
|
-
samples: number;
|
|
374
|
-
total: number;
|
|
375
|
-
resetCount: number;
|
|
376
|
-
hourlyDistribution: number[]; // 24 hourly samples
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
export interface EvolutionStats {
|
|
380
|
-
tasksEnqueued: number;
|
|
381
|
-
tasksCompleted: number;
|
|
382
|
-
rulesPromoted: number;
|
|
383
|
-
// C: Diagnostician heartbeat chain counters
|
|
384
|
-
diagnosisTasksWritten: number;
|
|
385
|
-
heartbeatsInjected: number;
|
|
386
|
-
diagnosticianReportsWritten: number;
|
|
387
|
-
reportsMissingJson: number;
|
|
388
|
-
reportsIncompleteFields: number;
|
|
389
|
-
principleCandidatesCreated: number;
|
|
390
|
-
rulesEnforced: number;
|
|
391
|
-
// C: Nocturnal funnel counters (PD-FUNNEL-2.3)
|
|
392
|
-
nocturnalDreamerCompleted: number;
|
|
393
|
-
nocturnalTrinityCompleted: number;
|
|
394
|
-
nocturnalArtifactPersisted: number;
|
|
395
|
-
nocturnalCodeCandidateCreated: number;
|
|
396
|
-
// C: RuleHost funnel counters (PD-FUNNEL-2.4)
|
|
397
|
-
rulehostEvaluated: number;
|
|
398
|
-
rulehostBlocked: number;
|
|
399
|
-
rulehostRequireApproval: number;
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
export interface HookStats {
|
|
403
|
-
total: number;
|
|
404
|
-
success: number;
|
|
405
|
-
failure: number;
|
|
406
|
-
byType: Record<string, { total: number; success: number; failure: number }>;
|
|
407
|
-
errors: number;
|
|
408
|
-
totalDurationMs: number;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
/**
|
|
412
|
-
* Daily aggregated statistics.
|
|
413
|
-
*/
|
|
414
|
-
export interface DailyStats {
|
|
415
|
-
/** Date (YYYY-MM-DD) */
|
|
416
|
-
date: string;
|
|
417
|
-
/** Timestamp when stats were created */
|
|
418
|
-
createdAt: string;
|
|
419
|
-
/** Timestamp when stats were last updated */
|
|
420
|
-
updatedAt: string;
|
|
421
|
-
/** Tool call statistics */
|
|
422
|
-
tools: {
|
|
423
|
-
total: number;
|
|
424
|
-
success: number;
|
|
425
|
-
failure: number;
|
|
426
|
-
};
|
|
427
|
-
/** Tool call statistics */
|
|
428
|
-
toolCalls: ToolCallStats;
|
|
429
|
-
/** Error statistics */
|
|
430
|
-
errors: ErrorStats;
|
|
431
|
-
/** Pain signal statistics */
|
|
432
|
-
pain: PainStats;
|
|
433
|
-
/** Empathy Engine event statistics */
|
|
434
|
-
empathy: EmpathyEventStats;
|
|
435
|
-
/** GFI statistics */
|
|
436
|
-
gfi: GfiStats;
|
|
437
|
-
/** Evolution statistics */
|
|
438
|
-
evolution: EvolutionStats;
|
|
439
|
-
/** Hook execution statistics */
|
|
440
|
-
hooks: HookStats;
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
/**
|
|
444
|
-
* Creates an empty daily stats object.
|
|
445
|
-
*/
|
|
446
|
-
export function createEmptyDailyStats(date: string): DailyStats {
|
|
447
|
-
const now = new Date().toISOString();
|
|
448
|
-
return {
|
|
449
|
-
date,
|
|
450
|
-
createdAt: now,
|
|
451
|
-
updatedAt: now,
|
|
452
|
-
tools: {
|
|
453
|
-
total: 0,
|
|
454
|
-
success: 0,
|
|
455
|
-
failure: 0,
|
|
456
|
-
},
|
|
457
|
-
toolCalls: {
|
|
458
|
-
total: 0,
|
|
459
|
-
success: 0,
|
|
460
|
-
failure: 0,
|
|
461
|
-
byTool: {},
|
|
462
|
-
},
|
|
463
|
-
errors: {
|
|
464
|
-
total: 0,
|
|
465
|
-
byType: {},
|
|
466
|
-
byTool: {},
|
|
467
|
-
},
|
|
468
|
-
pain: {
|
|
469
|
-
signalsDetected: 0,
|
|
470
|
-
signalsBySource: {},
|
|
471
|
-
rulesMatched: {},
|
|
472
|
-
candidatesPromoted: 0,
|
|
473
|
-
avgScore: 0,
|
|
474
|
-
maxScore: 0,
|
|
475
|
-
},
|
|
476
|
-
empathy: {
|
|
477
|
-
totalEvents: 0,
|
|
478
|
-
dedupedCount: 0,
|
|
479
|
-
dedupeHitRate: 0,
|
|
480
|
-
totalPenaltyScore: 0,
|
|
481
|
-
rolledBackScore: 0,
|
|
482
|
-
rollbackCount: 0,
|
|
483
|
-
bySeverity: {
|
|
484
|
-
mild: 0,
|
|
485
|
-
moderate: 0,
|
|
486
|
-
severe: 0,
|
|
487
|
-
},
|
|
488
|
-
scoreBySeverity: {
|
|
489
|
-
mild: 0,
|
|
490
|
-
moderate: 0,
|
|
491
|
-
severe: 0,
|
|
492
|
-
},
|
|
493
|
-
byDetectionMode: {
|
|
494
|
-
structured: 0,
|
|
495
|
-
legacy_tag: 0,
|
|
496
|
-
},
|
|
497
|
-
byOrigin: {
|
|
498
|
-
assistant_self_report: 0,
|
|
499
|
-
user_manual: 0,
|
|
500
|
-
system_infer: 0,
|
|
501
|
-
},
|
|
502
|
-
confidenceDistribution: {
|
|
503
|
-
high: 0,
|
|
504
|
-
medium: 0,
|
|
505
|
-
low: 0,
|
|
506
|
-
},
|
|
507
|
-
dailyTrend: [],
|
|
508
|
-
},
|
|
509
|
-
gfi: {
|
|
510
|
-
peak: 0,
|
|
511
|
-
samples: 0,
|
|
512
|
-
total: 0,
|
|
513
|
-
resetCount: 0,
|
|
514
|
-
hourlyDistribution: new Array(24).fill(0),
|
|
515
|
-
},
|
|
516
|
-
evolution: {
|
|
517
|
-
tasksEnqueued: 0,
|
|
518
|
-
tasksCompleted: 0,
|
|
519
|
-
rulesPromoted: 0,
|
|
520
|
-
// C: Diagnostician heartbeat chain counters
|
|
521
|
-
diagnosisTasksWritten: 0,
|
|
522
|
-
heartbeatsInjected: 0,
|
|
523
|
-
diagnosticianReportsWritten: 0,
|
|
524
|
-
reportsMissingJson: 0,
|
|
525
|
-
reportsIncompleteFields: 0,
|
|
526
|
-
principleCandidatesCreated: 0,
|
|
527
|
-
rulesEnforced: 0,
|
|
528
|
-
// C: Nocturnal funnel counters (PD-FUNNEL-2.3)
|
|
529
|
-
nocturnalDreamerCompleted: 0,
|
|
530
|
-
nocturnalTrinityCompleted: 0,
|
|
531
|
-
nocturnalArtifactPersisted: 0,
|
|
532
|
-
nocturnalCodeCandidateCreated: 0,
|
|
533
|
-
// C: RuleHost funnel counters (PD-FUNNEL-2.4)
|
|
534
|
-
rulehostEvaluated: 0,
|
|
535
|
-
rulehostBlocked: 0,
|
|
536
|
-
rulehostRequireApproval: 0,
|
|
537
|
-
},
|
|
538
|
-
hooks: {
|
|
539
|
-
total: 0,
|
|
540
|
-
success: 0,
|
|
541
|
-
failure: 0,
|
|
542
|
-
byType: {},
|
|
543
|
-
errors: 0,
|
|
544
|
-
totalDurationMs: 0,
|
|
545
|
-
},
|
|
546
|
-
};
|
|
547
|
-
}
|
|
1
|
+
export type {
|
|
2
|
+
EventType,
|
|
3
|
+
EventCategory,
|
|
4
|
+
EventLogEntry,
|
|
5
|
+
ToolCallEventData,
|
|
6
|
+
PainSignalEventData,
|
|
7
|
+
RuleMatchEventData,
|
|
8
|
+
RulePromotionEventData,
|
|
9
|
+
HookExecutionEventData,
|
|
10
|
+
GateBlockEventData,
|
|
11
|
+
GateBypassEventData,
|
|
12
|
+
PlanApprovalEventData,
|
|
13
|
+
EvolutionTaskEventData,
|
|
14
|
+
EmpathyRollbackEventData,
|
|
15
|
+
HeartbeatDiagnosisEventData,
|
|
16
|
+
DiagnosisTaskEventData,
|
|
17
|
+
DiagnosticianReportEventData,
|
|
18
|
+
PrincipleCandidateEventData,
|
|
19
|
+
RuleEnforcedEventData,
|
|
20
|
+
RuleHostEvaluatedEventData,
|
|
21
|
+
RuleHostBlockedEventData,
|
|
22
|
+
RuleHostRequireApprovalEventData,
|
|
23
|
+
RuleHostAutoCorrectProposedEventData,
|
|
24
|
+
RuleHostAutoCorrectAppliedEventData,
|
|
25
|
+
RuntimeV2PromptActivationsInjectedEventData,
|
|
26
|
+
ToolCallStats,
|
|
27
|
+
ErrorStats,
|
|
28
|
+
PainStats,
|
|
29
|
+
EmpathyEventStats,
|
|
30
|
+
GfiStats,
|
|
31
|
+
EvolutionStats as EventEvolutionStats,
|
|
32
|
+
HookStats,
|
|
33
|
+
DailyStats,
|
|
34
|
+
} from '@principles/core/runtime-v2';
|
|
35
|
+
|
|
36
|
+
export {
|
|
37
|
+
createEmptyDailyStats,
|
|
38
|
+
} from '@principles/core/runtime-v2';
|
|
@@ -1,31 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export type {
|
|
2
|
+
PersistenceAction,
|
|
3
|
+
HygieneStats,
|
|
4
|
+
} from '@principles/core/runtime-v2';
|
|
4
5
|
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
path: string;
|
|
9
|
-
type: 'memory' | 'plan' | 'other';
|
|
10
|
-
contentLength: number;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface HygieneStats {
|
|
14
|
-
date: string;
|
|
15
|
-
persistenceCount: number;
|
|
16
|
-
persistenceByFile: Record<string, number>;
|
|
17
|
-
lastPersistenceTime?: string;
|
|
18
|
-
totalCharsPersisted: number;
|
|
19
|
-
groomingExecutedCount: number;
|
|
20
|
-
lastGroomingTime?: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export function createEmptyHygieneStats(date: string): HygieneStats {
|
|
24
|
-
return {
|
|
25
|
-
date,
|
|
26
|
-
persistenceCount: 0,
|
|
27
|
-
persistenceByFile: {},
|
|
28
|
-
totalCharsPersisted: 0,
|
|
29
|
-
groomingExecutedCount: 0,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
6
|
+
export {
|
|
7
|
+
createEmptyHygieneStats,
|
|
8
|
+
} from '@principles/core/runtime-v2';
|