create-principles-disciple 1.147.5 → 1.147.6
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/_release/product-identity.json +1 -1
- package/codex-adapter/package.json +1 -1
- package/console/dist/server/models/HealthCheckModel.d.ts +0 -1
- package/console/dist/server/models/HealthCheckModel.js +0 -54
- package/console/dist/server/types/index.d.ts +1 -9
- package/console/dist/web/assets/app.js +18 -18
- package/core/dist/index.d.ts +1 -1
- package/core/dist/index.d.ts.map +1 -1
- package/core/dist/index.js +1 -1
- package/core/dist/index.js.map +1 -1
- package/core/dist/prompt-builder/index.d.ts +0 -1
- package/core/dist/prompt-builder/index.d.ts.map +1 -1
- package/core/dist/prompt-builder/index.js +0 -1
- package/core/dist/prompt-builder/index.js.map +1 -1
- package/core/dist/runtime-v2/adapter/output-schema-registry.js +2 -2
- package/core/dist/runtime-v2/control-plane-triage.d.ts +1 -1
- package/core/dist/runtime-v2/control-plane-triage.d.ts.map +1 -1
- package/core/dist/runtime-v2/control-plane-triage.js +0 -15
- package/core/dist/runtime-v2/control-plane-triage.js.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts +3 -6
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.js +5 -10
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.js.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +2 -1
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.js +3 -8
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.js.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/types.d.ts +1 -1
- package/core/dist/runtime-v2/evidence-triage/types.d.ts.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/types.js +0 -1
- package/core/dist/runtime-v2/evidence-triage/types.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +4 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.d.ts.map +1 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.js +3 -8
- package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.js.map +1 -1
- package/core/dist/runtime-v2/golden-trace.d.ts.map +1 -1
- package/core/dist/runtime-v2/golden-trace.js +0 -1
- package/core/dist/runtime-v2/golden-trace.js.map +1 -1
- package/core/dist/runtime-v2/index.d.ts +5 -9
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +4 -8
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/core/dist/runtime-v2/internalization/rule-host-contracts.d.ts +0 -1
- package/core/dist/runtime-v2/internalization/rule-host-contracts.d.ts.map +1 -1
- package/core/dist/runtime-v2/operator-health-read-model.d.ts +0 -2
- package/core/dist/runtime-v2/operator-health-read-model.d.ts.map +1 -1
- package/core/dist/runtime-v2/operator-health-read-model.js +1 -55
- package/core/dist/runtime-v2/operator-health-read-model.js.map +1 -1
- package/core/dist/runtime-v2/signal-collector/confidence-gate.d.ts +1 -5
- package/core/dist/runtime-v2/signal-collector/confidence-gate.d.ts.map +1 -1
- package/core/dist/runtime-v2/signal-collector/confidence-gate.js +0 -9
- package/core/dist/runtime-v2/signal-collector/confidence-gate.js.map +1 -1
- package/core/dist/runtime-v2/signal-collector/keyword-stage.d.ts +2 -2
- package/core/dist/runtime-v2/signal-collector/keyword-stage.d.ts.map +1 -1
- package/core/dist/runtime-v2/signal-collector/keyword-stage.js +6 -10
- package/core/dist/runtime-v2/signal-collector/keyword-stage.js.map +1 -1
- package/core/dist/runtime-v2/signal-collector/llm-stage.d.ts +1 -1
- package/core/dist/runtime-v2/signal-collector/llm-stage.d.ts.map +1 -1
- package/core/dist/runtime-v2/signal-collector/llm-stage.js +3 -4
- package/core/dist/runtime-v2/signal-collector/llm-stage.js.map +1 -1
- package/core/dist/runtime-v2/signal-collector/signal-collector.js +4 -4
- package/core/dist/runtime-v2/signal-collector/signal-collector.js.map +1 -1
- package/core/dist/runtime-v2/signal-collector/types.d.ts +6 -8
- package/core/dist/runtime-v2/signal-collector/types.d.ts.map +1 -1
- package/core/dist/runtime-v2/signal-collector/types.js +6 -6
- package/core/dist/runtime-v2/signal-collector/types.js.map +1 -1
- package/core/dist/runtime-v2/trajectory-schema.d.ts +24 -4
- package/core/dist/runtime-v2/trajectory-schema.d.ts.map +1 -1
- package/core/dist/runtime-v2/trajectory-schema.js +58 -2
- package/core/dist/runtime-v2/trajectory-schema.js.map +1 -1
- package/core/dist/runtime-v2/types/event-types.d.ts +0 -35
- package/core/dist/runtime-v2/types/event-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/event-types.js +0 -19
- package/core/dist/runtime-v2/types/event-types.js.map +1 -1
- package/core/dist/runtime-v2/types/index.d.ts +2 -2
- package/core/dist/runtime-v2/types/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/index.js +1 -1
- package/core/dist/runtime-v2/types/index.js.map +1 -1
- package/core/dist/trajectory-types.d.ts +0 -2
- package/core/dist/trajectory-types.d.ts.map +1 -1
- package/core/package.json +1 -1
- package/dist/mvp-config.d.ts +2 -2
- package/dist/mvp-config.d.ts.map +1 -1
- package/dist/mvp-config.js +4 -2
- package/dist/mvp-config.js.map +1 -1
- package/host-runtime/dist/governance-signal-admission.d.ts +0 -2
- package/host-runtime/dist/governance-signal-admission.js +14 -15
- package/host-runtime/dist/production-pain-evidence.d.ts +1 -1
- package/host-runtime/dist/production-pain-evidence.js +42 -7
- package/host-runtime/dist/production-rulehost-gate.d.ts +0 -1
- package/host-runtime/dist/production-rulehost-gate.js +3 -4
- package/host-runtime/dist/signal-classifier.d.ts +8 -0
- package/host-runtime/dist/signal-classifier.js +10 -2
- package/host-runtime/package.json +1 -1
- package/package.json +3 -3
- package/pd-cli/dist/commands/pain-evidence.d.ts +2 -4
- package/pd-cli/dist/commands/pain-evidence.d.ts.map +1 -1
- package/pd-cli/dist/commands/pain-evidence.js +2 -4
- package/pd-cli/dist/commands/pain-evidence.js.map +1 -1
- package/pd-cli/dist/commands/runtime-canary.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-canary.js +2 -68
- package/pd-cli/dist/commands/runtime-canary.js.map +1 -1
- package/pd-cli/dist/commands/runtime-diagnostics-export.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-diagnostics-export.js +1 -25
- package/pd-cli/dist/commands/runtime-diagnostics-export.js.map +1 -1
- package/pd-cli/dist/commands/runtime-health-snapshot.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-health-snapshot.js +0 -9
- package/pd-cli/dist/commands/runtime-health-snapshot.js.map +1 -1
- package/pd-cli/dist/index.js +0 -9
- package/pd-cli/dist/index.js.map +1 -1
- package/pd-mcp-server/dist/version.d.ts +1 -1
- package/pd-mcp-server/dist/version.js +1 -1
- package/pd-mcp-server/package.json +1 -1
- package/plugin/dist/bundle.js +492 -481
- package/plugin/dist/config/defaults/runtime.d.ts +0 -4
- package/plugin/dist/core/config.d.ts +0 -35
- package/plugin/dist/core/pain.d.ts +0 -1
- package/plugin/dist/core/session-tracker.d.ts +3 -51
- package/plugin/dist/core/signal-collector-host.d.ts +5 -13
- package/plugin/dist/core/signal-keyword-store.d.ts +2 -2
- package/plugin/dist/core/trajectory.d.ts +0 -2
- package/plugin/dist/governance-audit.js +2 -2
- package/plugin/dist/hooks/after-tool-call-helpers.d.ts +5 -12
- package/plugin/dist/hooks/after-tool-call-types.d.ts +0 -2
- package/plugin/dist/hooks/gate-block-helper.d.ts +1 -1
- package/plugin/dist/hooks/gate.d.ts +3 -4
- package/plugin/dist/hooks/pain.d.ts +4 -4
- package/plugin/dist/openclaw.plugin.json +1 -1
- package/plugin/dist/rulehost-evidence.js +45 -45
- package/plugin/dist/templates/pain_settings.json +0 -46
- package/plugin/dist/types/event-types.d.ts +1 -1
- package/plugin/openclaw.plugin.json +1 -1
- package/plugin/package.json +1 -1
- package/plugin/templates/pain_settings.json +0 -46
- package/release-manager/dist/mvp-config.js +4 -2
- package/release-manager/package.json +1 -1
- package/workbuddy-adapter/package.json +1 -1
- package/core/dist/prompt-builder/attitude-directive.d.ts +0 -7
- package/core/dist/prompt-builder/attitude-directive.d.ts.map +0 -1
- package/core/dist/prompt-builder/attitude-directive.js +0 -39
- package/core/dist/prompt-builder/attitude-directive.js.map +0 -1
- package/core/dist/runtime-v2/gfi/gfi-kernel.d.ts +0 -12
- package/core/dist/runtime-v2/gfi/gfi-kernel.d.ts.map +0 -1
- package/core/dist/runtime-v2/gfi/gfi-kernel.js +0 -148
- package/core/dist/runtime-v2/gfi/gfi-kernel.js.map +0 -1
- package/core/dist/runtime-v2/gfi/gfi-policy.d.ts +0 -3
- package/core/dist/runtime-v2/gfi/gfi-policy.d.ts.map +0 -1
- package/core/dist/runtime-v2/gfi/gfi-policy.js +0 -23
- package/core/dist/runtime-v2/gfi/gfi-policy.js.map +0 -1
- package/core/dist/runtime-v2/gfi/gfi-read-model.d.ts +0 -78
- package/core/dist/runtime-v2/gfi/gfi-read-model.d.ts.map +0 -1
- package/core/dist/runtime-v2/gfi/gfi-read-model.js +0 -129
- package/core/dist/runtime-v2/gfi/gfi-read-model.js.map +0 -1
- package/core/dist/runtime-v2/gfi/gfi-types.d.ts +0 -70
- package/core/dist/runtime-v2/gfi/gfi-types.d.ts.map +0 -1
- package/core/dist/runtime-v2/gfi/gfi-types.js +0 -2
- package/core/dist/runtime-v2/gfi/gfi-types.js.map +0 -1
- package/core/dist/runtime-v2/gfi/index.d.ts +0 -6
- package/core/dist/runtime-v2/gfi/index.d.ts.map +0 -1
- package/core/dist/runtime-v2/gfi/index.js +0 -4
- package/core/dist/runtime-v2/gfi/index.js.map +0 -1
- package/pd-cli/dist/commands/runtime-gfi-snapshot.d.ts +0 -7
- package/pd-cli/dist/commands/runtime-gfi-snapshot.d.ts.map +0 -1
- package/pd-cli/dist/commands/runtime-gfi-snapshot.js +0 -101
- package/pd-cli/dist/commands/runtime-gfi-snapshot.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type { EventType, EventCategory, EventLogEntry, ToolCallEventData, PainSignalEventData, RulePromotionEventData, GovernanceActionEventData, HookExecutionEventData, GateBlockEventData, GateBypassEventData, EvolutionTaskEventData, EmpathyRollbackEventData, HeartbeatDiagnosisEventData, DiagnosisTaskEventData, DiagnosticianReportEventData, PrincipleCandidateEventData, RuleEnforcedEventData, RuleHostEvaluatedEventData, RuleHostBlockedEventData, RuleHostRequireApprovalEventData, RuleHostAutoCorrectProposedEventData, RuleHostAutoCorrectAppliedEventData, RuntimeV2PromptActivationsInjectedEventData, RuleHostUnhealthyEventData, RuleHostSkippedEventData, TrajectoryObservabilityFailureEventData, ToolCallStats, ErrorStats, EmpathyEventStats,
|
|
1
|
+
export type { EventType, EventCategory, EventLogEntry, ToolCallEventData, PainSignalEventData, RulePromotionEventData, GovernanceActionEventData, HookExecutionEventData, GateBlockEventData, GateBypassEventData, EvolutionTaskEventData, EmpathyRollbackEventData, HeartbeatDiagnosisEventData, DiagnosisTaskEventData, DiagnosticianReportEventData, PrincipleCandidateEventData, RuleEnforcedEventData, RuleHostEvaluatedEventData, RuleHostBlockedEventData, RuleHostRequireApprovalEventData, RuleHostAutoCorrectProposedEventData, RuleHostAutoCorrectAppliedEventData, RuntimeV2PromptActivationsInjectedEventData, RuleHostUnhealthyEventData, RuleHostSkippedEventData, TrajectoryObservabilityFailureEventData, ToolCallStats, ErrorStats, EmpathyEventStats, HookStats, DailyStats, } from '@principles/core/runtime-v2';
|
|
2
2
|
export { createEmptyDailyStats, } from '@principles/core/runtime-v2/types/event-types';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "principles-disciple",
|
|
3
3
|
"name": "Principles Disciple",
|
|
4
4
|
"description": "Principles Disciple is an AI Agent Governance System. Stop correcting the same AI behavior across sessions. Turn repeated Agent corrections into Owner-approved, observable, reversible behavior principles.",
|
|
5
|
-
"version": "2.
|
|
5
|
+
"version": "2.6.0",
|
|
6
6
|
"activation": {
|
|
7
7
|
"onStartup": true,
|
|
8
8
|
"onCapabilities": [
|
package/plugin/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "principles-disciple",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Principles Disciple is an AI Agent Governance System. Stop correcting the same AI behavior across sessions. Turn repeated Agent corrections into Owner-approved, observable, reversible behavior principles.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"language": "zh",
|
|
3
3
|
"thresholds": {
|
|
4
|
-
"pain_trigger": 40,
|
|
5
4
|
"cognitive_paralysis_input": 4000,
|
|
6
5
|
"semantic_min_score": 0.7,
|
|
7
6
|
"promotion_count_threshold": 3,
|
|
@@ -10,18 +9,12 @@
|
|
|
10
9
|
"scores": {
|
|
11
10
|
"default_confusion": 30,
|
|
12
11
|
"default_loop": 40,
|
|
13
|
-
"tool_failure_friction": 15,
|
|
14
12
|
"exit_code_penalty": 50,
|
|
15
13
|
"spiral_penalty": 30,
|
|
16
14
|
"missing_test_command_penalty": 20,
|
|
17
15
|
"subagent_error_penalty": 60,
|
|
18
16
|
"subagent_timeout_penalty": 50
|
|
19
17
|
},
|
|
20
|
-
"severity_thresholds": {
|
|
21
|
-
"high": 70,
|
|
22
|
-
"medium": 40,
|
|
23
|
-
"low": 20
|
|
24
|
-
},
|
|
25
18
|
"trust": {
|
|
26
19
|
"stages": {
|
|
27
20
|
"stage_1_observer": 30,
|
|
@@ -52,44 +45,5 @@
|
|
|
52
45
|
"stage_2_max_lines": 50,
|
|
53
46
|
"stage_3_max_lines": 300
|
|
54
47
|
}
|
|
55
|
-
},
|
|
56
|
-
"empathy_engine": {
|
|
57
|
-
"enabled": true,
|
|
58
|
-
"dedupe_window_ms": 60000,
|
|
59
|
-
"penalties": {
|
|
60
|
-
"mild": 10,
|
|
61
|
-
"moderate": 25,
|
|
62
|
-
"severe": 40
|
|
63
|
-
},
|
|
64
|
-
"rate_limit": {
|
|
65
|
-
"max_per_turn": 40,
|
|
66
|
-
"max_per_hour": 120
|
|
67
|
-
},
|
|
68
|
-
"model_calibration": {}
|
|
69
|
-
},
|
|
70
|
-
"gfi_gate": {
|
|
71
|
-
"enabled": true,
|
|
72
|
-
"thresholds": {
|
|
73
|
-
"low_risk_block": 70,
|
|
74
|
-
"high_risk_block": 40,
|
|
75
|
-
"large_change_block": 50
|
|
76
|
-
},
|
|
77
|
-
"large_change_lines": 50,
|
|
78
|
-
"bash_safe_patterns": [
|
|
79
|
-
"^(ls|dir|pwd|which|where|echo|env|cat|type|head|tail|less|more)\\b",
|
|
80
|
-
"^git\\s+(status|log|diff|branch|show|remote)\\b",
|
|
81
|
-
"^npm\\s+(run|test|build|start)\\b",
|
|
82
|
-
"^(make|gradle|mvn)\\b"
|
|
83
|
-
],
|
|
84
|
-
"bash_dangerous_patterns": [
|
|
85
|
-
"rm\\s+(-[a-z]*r[a-z]*f|-rf)",
|
|
86
|
-
"del\\s+/s",
|
|
87
|
-
"rmdir\\s+/s",
|
|
88
|
-
"git\\s+(push\\s+.*--force|reset\\s+--hard|clean\\s+-fd)",
|
|
89
|
-
"npm\\s+publish",
|
|
90
|
-
"pip\\s+upload",
|
|
91
|
-
"docker\\s+push",
|
|
92
|
-
"(curl|wget).*\\|\\s*(ba)?sh"
|
|
93
|
-
]
|
|
94
48
|
}
|
|
95
49
|
}
|
|
@@ -5,8 +5,10 @@ import { existsSync, readFileSync } from 'fs';
|
|
|
5
5
|
import { execSync } from 'child_process';
|
|
6
6
|
import { errnoCode } from './utils/config-file-io.js';
|
|
7
7
|
export const MVP_CHANNELS = ['prompt', 'code_tool_hook', 'defer_archive'];
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
// GFI retired 2026-11-04 (GFI-COMPLETE-REMOVAL-001): its flag became a `gone`
|
|
9
|
+
// tombstone, so no quiet flag remains.
|
|
10
|
+
export const MVP_QUIET_FLAGS = [];
|
|
11
|
+
export const MVP_GONE_FLAGS = ['gfi', 'nocturnal', 'idle_trigger'];
|
|
10
12
|
/**
|
|
11
13
|
* Product-level feedback defaults (PRI-543). The PD 控制台的"意见反馈"收集的是
|
|
12
14
|
* 使用者对 PD 产品的功能建议 / Bug,接收者是 PD 项目所有者,而非使用者自己。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@principles/workbuddy-adapter",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "WorkBuddy host adapter for Principles Disciple — implements the HostAdapter interface for WorkBuddy's Git Bash command-hook model (ADR-0020 third host, SPEC workbuddy-host-adapter v0.3.0).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attitude-directive.d.ts","sourceRoot":"","sources":["../../src/prompt-builder/attitude-directive.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA8B1D"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dynamic Attitude Matrix based on Global Friction Index (GFI).
|
|
3
|
-
*
|
|
4
|
-
* Phase: PRI-75 Prompt Injection SDK Migration Phase 1
|
|
5
|
-
*/
|
|
6
|
-
export function buildAttitudeDirective(gfi) {
|
|
7
|
-
if (gfi >= 70) {
|
|
8
|
-
return `
|
|
9
|
-
### 【SYSTEM_MODE: HUMBLE_RECOVERY】
|
|
10
|
-
**CURRENT STATUS**: Severe system friction / User frustration detected (GFI: ${gfi.toFixed(0)}).
|
|
11
|
-
**BEHAVIORAL OVERRIDE**:
|
|
12
|
-
- You have failed to meet expectations. Humility is your primary directive.
|
|
13
|
-
- **STOP** aggressive file modifications.
|
|
14
|
-
- **START** every response with a sincere, non-defensive apology.
|
|
15
|
-
- **ACTION**: Explain why you failed, and propose a highly cautious recovery plan.
|
|
16
|
-
`;
|
|
17
|
-
}
|
|
18
|
-
else if (gfi >= 40) {
|
|
19
|
-
return `
|
|
20
|
-
### 【SYSTEM_MODE: CONCILIATORY】
|
|
21
|
-
**CURRENT STATUS**: Moderate friction detected (GFI: ${gfi.toFixed(0)}).
|
|
22
|
-
**BEHAVIORAL OVERRIDE**:
|
|
23
|
-
- User is frustrated. Be more explanatory and cautious.
|
|
24
|
-
- Before executing any tool, clearly state what you intend to do and **WAIT** for implicit or explicit user consent.
|
|
25
|
-
- Avoid technical jargon; focus on the business/project value of your changes.
|
|
26
|
-
`;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
return `
|
|
30
|
-
### 【SYSTEM_MODE: EFFICIENT】
|
|
31
|
-
**CURRENT STATUS**: System healthy (GFI: ${gfi.toFixed(0)}).
|
|
32
|
-
**BEHAVIORAL OVERRIDE**:
|
|
33
|
-
- Maintain peak efficiency.
|
|
34
|
-
- Be concise. Prefer action over long explanations.
|
|
35
|
-
- Follow the "Principles > Directives" rule strictly.
|
|
36
|
-
`;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=attitude-directive.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attitude-directive.js","sourceRoot":"","sources":["../../src/prompt-builder/attitude-directive.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;QACd,OAAO;;+EAEoE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;;;;;;CAM5F,CAAC;IACA,CAAC;SAAM,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;QACrB,OAAO;;uDAE4C,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;;;;;CAKpE,CAAC;IACA,CAAC;SAAM,CAAC;QACN,OAAO;;2CAEgC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;;;;;CAKxD,CAAC;IACA,CAAC;AACH,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { GfiState, GfiEvent, GfiPolicy, GfiStage, GfiSnapshot } from './gfi-types.js';
|
|
2
|
-
import { DEFAULT_GFI_POLICY } from './gfi-policy.js';
|
|
3
|
-
export { DEFAULT_GFI_POLICY };
|
|
4
|
-
export declare function applyFriction(state: GfiState, event: GfiEvent, policy: GfiPolicy): GfiState;
|
|
5
|
-
export declare function applyDecay(state: GfiState, elapsedMinutes: number, policy: GfiPolicy, stage: GfiStage, nowMs: number): GfiState;
|
|
6
|
-
export declare function applyRelief(state: GfiState, opts: {
|
|
7
|
-
source: string;
|
|
8
|
-
amount?: number;
|
|
9
|
-
}, nowMs: number, policy?: GfiPolicy): GfiState;
|
|
10
|
-
export declare function classifyGfiStage(gfi: number, policy: GfiPolicy): GfiStage;
|
|
11
|
-
export declare function createGfiSnapshot(state: GfiState, policy: GfiPolicy): GfiSnapshot;
|
|
12
|
-
//# sourceMappingURL=gfi-kernel.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gfi-kernel.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/gfi/gfi-kernel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAa,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,SAAS,GAChB,QAAQ,CA4BV;AAGD,wBAAgB,UAAU,CACxB,KAAK,EAAE,QAAQ,EACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,GACZ,QAAQ,CA+BV;AAGD,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACzC,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,SAA8B,GACrC,QAAQ,CAoDV;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,CAKzE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAG,WAAW,CA0CjF"}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { DEFAULT_GFI_POLICY } from './gfi-policy.js';
|
|
2
|
-
export { DEFAULT_GFI_POLICY };
|
|
3
|
-
export function applyFriction(state, event, policy) {
|
|
4
|
-
const isRepeated = state.lastErrorHash !== undefined && state.lastErrorHash === event.hash;
|
|
5
|
-
const consecutiveErrors = isRepeated
|
|
6
|
-
? state.consecutiveErrors + 1
|
|
7
|
-
: 1;
|
|
8
|
-
const exponent = Math.max(0, consecutiveErrors - 1);
|
|
9
|
-
const multiplier = Math.min(Math.pow(policy.repeatedFailureMultiplier.base, exponent), policy.repeatedFailureMultiplier.max);
|
|
10
|
-
const score = event.baseScore * multiplier;
|
|
11
|
-
const newCurrentGfi = state.currentGfi + score;
|
|
12
|
-
const newGfiBySource = { ...state.gfiBySource };
|
|
13
|
-
newGfiBySource[event.source] = (newGfiBySource[event.source] ?? 0) + score;
|
|
14
|
-
return {
|
|
15
|
-
...state,
|
|
16
|
-
currentGfi: newCurrentGfi,
|
|
17
|
-
gfiBySource: newGfiBySource,
|
|
18
|
-
consecutiveErrors,
|
|
19
|
-
lastErrorHash: event.hash,
|
|
20
|
-
lastErrorSource: event.source,
|
|
21
|
-
dailyGfiPeak: Math.max(state.dailyGfiPeak ?? 0, newCurrentGfi),
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
// eslint-disable-next-line @typescript-eslint/max-params
|
|
25
|
-
export function applyDecay(state, elapsedMinutes, policy, stage, nowMs) {
|
|
26
|
-
const rate = policy.decayRatesPerMinute[stage];
|
|
27
|
-
// Decay each source slice individually, then prune those below minPruneBelow.
|
|
28
|
-
// currentGfi is derived from the sum of remaining source slices when sources exist.
|
|
29
|
-
// When no source ledger entries exist, decay currentGfi directly (e.g. session restart).
|
|
30
|
-
const nextSources = {};
|
|
31
|
-
for (const [src, value] of Object.entries(state.gfiBySource)) {
|
|
32
|
-
const sourceDecayed = value - rate * elapsedMinutes;
|
|
33
|
-
const sourceAfterDecay = Math.max(0, Math.round(sourceDecayed * 10) / 10);
|
|
34
|
-
if (sourceAfterDecay >= policy.relief.minPruneBelow) {
|
|
35
|
-
nextSources[src] = sourceAfterDecay;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
// Compute nextGfi:
|
|
39
|
-
// - Has remaining sources: currentGfi = sum of remaining source slices (invariant)
|
|
40
|
-
// - No remaining sources but had sources: currentGfi = 0 (all pruned → invariant)
|
|
41
|
-
// - Had no source ledger at all: decay currentGfi directly (e.g. fresh session restart)
|
|
42
|
-
const nextGfi = Object.keys(nextSources).length > 0
|
|
43
|
-
? Math.max(0, Math.round(Object.values(nextSources).reduce((a, b) => a + b, 0) * 10) / 10)
|
|
44
|
-
: Object.keys(state.gfiBySource).length > 0
|
|
45
|
-
? 0
|
|
46
|
-
: Math.max(0, Math.round((state.currentGfi - rate * elapsedMinutes) * 10) / 10);
|
|
47
|
-
return {
|
|
48
|
-
...state,
|
|
49
|
-
currentGfi: nextGfi,
|
|
50
|
-
gfiBySource: nextSources,
|
|
51
|
-
lastGfiDecayAt: nowMs,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
// eslint-disable-next-line @typescript-eslint/max-params
|
|
55
|
-
export function applyRelief(state, opts, nowMs, policy = DEFAULT_GFI_POLICY) {
|
|
56
|
-
const { source, amount = 0 } = opts;
|
|
57
|
-
if (source === 'all' && amount >= 100) {
|
|
58
|
-
return {
|
|
59
|
-
currentGfi: 0,
|
|
60
|
-
gfiBySource: {},
|
|
61
|
-
consecutiveErrors: 0,
|
|
62
|
-
lastErrorHash: undefined,
|
|
63
|
-
lastErrorSource: undefined,
|
|
64
|
-
lastGfiDecayAt: nowMs,
|
|
65
|
-
dailyGfiPeak: state.dailyGfiPeak,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
const newSources = { ...state.gfiBySource };
|
|
69
|
-
if (amount > 0) {
|
|
70
|
-
// source-specific partial relief
|
|
71
|
-
const key = source;
|
|
72
|
-
if (newSources[key] !== undefined) {
|
|
73
|
-
newSources[key] = Math.max(0, (newSources[key] ?? 0) - amount);
|
|
74
|
-
if (newSources[key] === 0) {
|
|
75
|
-
delete newSources[key];
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
// ratio-based relief (toolSuccessRatio)
|
|
81
|
-
const ratio = policy.relief.toolSuccessRatio;
|
|
82
|
-
for (const src of Object.keys(newSources)) {
|
|
83
|
-
const key = src;
|
|
84
|
-
newSources[key] = Math.max(0, Math.round(((newSources[key] ?? 0) * (1 - ratio)) * 10) / 10);
|
|
85
|
-
if (newSources[key] === 0) {
|
|
86
|
-
delete newSources[key];
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
const totalSources = Object.values(newSources).reduce((a, b) => a + b, 0);
|
|
91
|
-
const isLastErrorSource = source === state.lastErrorSource && source !== 'all';
|
|
92
|
-
const newConsecutiveErrors = isLastErrorSource ? 0 : state.consecutiveErrors;
|
|
93
|
-
return {
|
|
94
|
-
...state,
|
|
95
|
-
currentGfi: totalSources,
|
|
96
|
-
gfiBySource: newSources,
|
|
97
|
-
consecutiveErrors: newConsecutiveErrors,
|
|
98
|
-
lastErrorHash: newConsecutiveErrors === 0 ? undefined : state.lastErrorHash,
|
|
99
|
-
lastErrorSource: newConsecutiveErrors === 0 ? undefined : state.lastErrorSource,
|
|
100
|
-
lastGfiDecayAt: nowMs,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
export function classifyGfiStage(gfi, policy) {
|
|
104
|
-
if (gfi >= policy.stageThresholds.saturated)
|
|
105
|
-
return 'saturated';
|
|
106
|
-
if (gfi >= policy.stageThresholds.critical)
|
|
107
|
-
return 'critical';
|
|
108
|
-
if (gfi >= policy.stageThresholds.elevated)
|
|
109
|
-
return 'elevated';
|
|
110
|
-
return 'stable';
|
|
111
|
-
}
|
|
112
|
-
export function createGfiSnapshot(state, policy) {
|
|
113
|
-
const stage = classifyGfiStage(state.currentGfi, policy);
|
|
114
|
-
const sources = { ...state.gfiBySource };
|
|
115
|
-
let dominantSource = null;
|
|
116
|
-
let maxSourceValue = 0;
|
|
117
|
-
for (const [src, val] of Object.entries(state.gfiBySource)) {
|
|
118
|
-
if (val > maxSourceValue) {
|
|
119
|
-
maxSourceValue = val;
|
|
120
|
-
dominantSource = src;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
const attitudeMode = state.currentGfi < policy.stageThresholds.elevated
|
|
124
|
-
? 'efficient'
|
|
125
|
-
: state.currentGfi < policy.stageThresholds.critical
|
|
126
|
-
? 'conciliatory'
|
|
127
|
-
: 'humble_recovery';
|
|
128
|
-
const painDiagnosticReason = state.currentGfi >= policy.stageThresholds.elevated ? 'high_gfi' : 'none';
|
|
129
|
-
const consumers = { attitudeMode, painDiagnosticReason };
|
|
130
|
-
return {
|
|
131
|
-
currentGfi: state.currentGfi,
|
|
132
|
-
stage,
|
|
133
|
-
sources,
|
|
134
|
-
dominantSource,
|
|
135
|
-
consecutiveErrors: state.consecutiveErrors,
|
|
136
|
-
lastErrorSource: state.lastErrorSource,
|
|
137
|
-
lastDecayAt: state.lastGfiDecayAt ? new Date(state.lastGfiDecayAt).toISOString() : undefined,
|
|
138
|
-
dailyGfiPeak: state.dailyGfiPeak,
|
|
139
|
-
policy: {
|
|
140
|
-
elevatedThreshold: policy.stageThresholds.elevated,
|
|
141
|
-
criticalThreshold: policy.stageThresholds.critical,
|
|
142
|
-
saturatedThreshold: policy.stageThresholds.saturated,
|
|
143
|
-
repeatedFailureMultiplierMax: policy.repeatedFailureMultiplier.max,
|
|
144
|
-
},
|
|
145
|
-
consumers,
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
//# sourceMappingURL=gfi-kernel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gfi-kernel.js","sourceRoot":"","sources":["../../../src/runtime-v2/gfi/gfi-kernel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gfi-policy.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/gfi/gfi-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,eAAO,MAAM,kBAAkB,EAAE,SAqBhC,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export const DEFAULT_GFI_POLICY = {
|
|
2
|
-
stageThresholds: {
|
|
3
|
-
elevated: 40,
|
|
4
|
-
critical: 70,
|
|
5
|
-
saturated: 100,
|
|
6
|
-
},
|
|
7
|
-
repeatedFailureMultiplier: {
|
|
8
|
-
base: 1.5,
|
|
9
|
-
max: 3.0,
|
|
10
|
-
},
|
|
11
|
-
decayRatesPerMinute: {
|
|
12
|
-
stable: 0.5,
|
|
13
|
-
elevated: 1.0,
|
|
14
|
-
critical: 2.0,
|
|
15
|
-
saturated: 4.0,
|
|
16
|
-
},
|
|
17
|
-
relief: {
|
|
18
|
-
toolSuccessRatio: 0.25,
|
|
19
|
-
minPruneBelow: 8,
|
|
20
|
-
},
|
|
21
|
-
sourceWeights: {},
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=gfi-policy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gfi-policy.js","sourceRoot":"","sources":["../../../src/runtime-v2/gfi/gfi-policy.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAc;IAC3C,eAAe,EAAE;QACf,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,GAAG;KACf;IACD,yBAAyB,EAAE;QACzB,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,GAAG;KACT;IACD,mBAAmB,EAAE;QACnB,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,SAAS,EAAE,GAAG;KACf;IACD,MAAM,EAAE;QACN,gBAAgB,EAAE,IAAI;QACtB,aAAa,EAAE,CAAC;KACjB;IACD,aAAa,EAAE,EAAE;CAClB,CAAC"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GFI Observability Read Model
|
|
3
|
-
*
|
|
4
|
-
* Pure domain model for building workspace-level GFI snapshots.
|
|
5
|
-
* Partitions sessions into active vs stale and produces an authoritative snapshot
|
|
6
|
-
* for operator visibility.
|
|
7
|
-
*
|
|
8
|
-
* PRI-78: GFI Observability
|
|
9
|
-
*/
|
|
10
|
-
import type { GfiPolicy, GfiSource, GfiSnapshot } from './gfi-types.js';
|
|
11
|
-
export interface GfiReadModelInput {
|
|
12
|
-
sessions: {
|
|
13
|
-
sessionId: string;
|
|
14
|
-
/** Defaults to 0 if omitted */
|
|
15
|
-
currentGfi?: number;
|
|
16
|
-
gfiBySource?: Partial<Record<GfiSource, number>>;
|
|
17
|
-
lastErrorSource?: string;
|
|
18
|
-
/** Defaults to 0 if omitted */
|
|
19
|
-
consecutiveErrors?: number;
|
|
20
|
-
lastGfiDecayAt?: number;
|
|
21
|
-
dailyGfiPeak?: number;
|
|
22
|
-
/** Defaults to 0 if omitted — session older than cutoff is classified stale */
|
|
23
|
-
lastActivityAt?: number;
|
|
24
|
-
}[];
|
|
25
|
-
nowMs: number;
|
|
26
|
-
/** Sessions with lastActivityAt < nowMs - staleCutoffMs are classified stale. Default: 2 hours */
|
|
27
|
-
staleCutoffMs?: number;
|
|
28
|
-
policy?: GfiPolicy;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Workspace-level GFI snapshot — partitions sessions into active vs stale.
|
|
32
|
-
*
|
|
33
|
-
* Invariant: `active === null` iff `activeSessionCount === 0` (no active sessions exist).
|
|
34
|
-
* Invariant: `staleGfiRange === null` iff `staleSessionCount === 0` (not an error state).
|
|
35
|
-
*/
|
|
36
|
-
export interface GfiWorkspaceSnapshot {
|
|
37
|
-
/**
|
|
38
|
-
* Snapshot for the highest-GFI active session.
|
|
39
|
-
* Null when there are no active sessions (all stale, or no sessions exist).
|
|
40
|
-
*/
|
|
41
|
-
active: GfiSnapshot | null;
|
|
42
|
-
staleSessionCount: number;
|
|
43
|
-
/**
|
|
44
|
-
* Min/max GFI across all stale sessions.
|
|
45
|
-
* Null when staleSessionCount === 0 (no stale sessions — not an error state).
|
|
46
|
-
*/
|
|
47
|
-
staleGfiRange: {
|
|
48
|
-
min: number;
|
|
49
|
-
max: number;
|
|
50
|
-
} | null;
|
|
51
|
-
totalSessionCount: number;
|
|
52
|
-
activeSessionCount: number;
|
|
53
|
-
generatedAt: string;
|
|
54
|
-
}
|
|
55
|
-
export interface GfiWorkspaceHealthAssessment {
|
|
56
|
-
status: 'healthy' | 'degraded';
|
|
57
|
-
reason: string;
|
|
58
|
-
staleGfiDegradedThreshold: number;
|
|
59
|
-
}
|
|
60
|
-
export declare function classifyGfiWorkspaceHealth(snapshot: GfiWorkspaceSnapshot, options?: {
|
|
61
|
-
staleGfiDegradedThreshold?: number;
|
|
62
|
-
}): GfiWorkspaceHealthAssessment;
|
|
63
|
-
/**
|
|
64
|
-
* Build a workspace-level GFI snapshot from session data.
|
|
65
|
-
*
|
|
66
|
-
* Algorithm:
|
|
67
|
-
* 1. Default stale cutoff to 2 hours if not provided
|
|
68
|
-
* 2. Partition sessions into active (lastActivityAt >= nowMs - staleCutoffMs) and stale
|
|
69
|
-
* 3. Select active session with highest currentGfi (tie-break: most recent lastActivityAt)
|
|
70
|
-
* 4. Build GfiSnapshot for selected active session using createGfiSnapshot
|
|
71
|
-
* 5. Compute staleGfiRange from stale sessions' currentGfi values
|
|
72
|
-
* 6. Return GfiWorkspaceSnapshot
|
|
73
|
-
*
|
|
74
|
-
* Key invariant: stale sessions do NOT influence the active snapshot.
|
|
75
|
-
* This prevents old UAT sessions with GFI=197.8 from making current health look critical.
|
|
76
|
-
*/
|
|
77
|
-
export declare function buildGfiWorkspaceSnapshot(input: GfiReadModelInput): GfiWorkspaceSnapshot;
|
|
78
|
-
//# sourceMappingURL=gfi-read-model.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gfi-read-model.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/gfi/gfi-read-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAY,MAAM,gBAAgB,CAAC;AAIlF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,+BAA+B;QAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QACjD,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,+BAA+B;QAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,+EAA+E;QAC/E,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,EAAE,CAAC;IACJ,KAAK,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,aAAa,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,CAAC,EAAE;IAAE,yBAAyB,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,4BAA4B,CAgC9B;AAmBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,iBAAiB,GACvB,oBAAoB,CAmEtB"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GFI Observability Read Model
|
|
3
|
-
*
|
|
4
|
-
* Pure domain model for building workspace-level GFI snapshots.
|
|
5
|
-
* Partitions sessions into active vs stale and produces an authoritative snapshot
|
|
6
|
-
* for operator visibility.
|
|
7
|
-
*
|
|
8
|
-
* PRI-78: GFI Observability
|
|
9
|
-
*/
|
|
10
|
-
import { DEFAULT_GFI_POLICY } from './gfi-policy.js';
|
|
11
|
-
import { createGfiSnapshot } from './gfi-kernel.js';
|
|
12
|
-
const DEFAULT_STALE_CUTOFF_MS = 2 * 60 * 60 * 1000; // 2 hours
|
|
13
|
-
const DEFAULT_STALE_GFI_DEGRADED_THRESHOLD = 40;
|
|
14
|
-
export function classifyGfiWorkspaceHealth(snapshot, options) {
|
|
15
|
-
const staleGfiDegradedThreshold = options?.staleGfiDegradedThreshold ?? DEFAULT_STALE_GFI_DEGRADED_THRESHOLD;
|
|
16
|
-
if (snapshot.active !== null && snapshot.active.currentGfi >= staleGfiDegradedThreshold) {
|
|
17
|
-
return {
|
|
18
|
-
status: 'degraded',
|
|
19
|
-
reason: `Active session has elevated GFI (${snapshot.active.currentGfi})`,
|
|
20
|
-
staleGfiDegradedThreshold,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
if (snapshot.activeSessionCount === 0 && snapshot.staleSessionCount > 0) {
|
|
24
|
-
const maxStaleGfi = snapshot.staleGfiRange?.max ?? 0;
|
|
25
|
-
if (maxStaleGfi >= staleGfiDegradedThreshold) {
|
|
26
|
-
return {
|
|
27
|
-
status: 'degraded',
|
|
28
|
-
reason: `No active sessions, ${snapshot.staleSessionCount} stale sessions with high GFI (max: ${maxStaleGfi})`,
|
|
29
|
-
staleGfiDegradedThreshold,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
return {
|
|
33
|
-
status: 'healthy',
|
|
34
|
-
reason: `No active sessions, ${snapshot.staleSessionCount} stale sessions with low GFI (max: ${maxStaleGfi})`,
|
|
35
|
-
staleGfiDegradedThreshold,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
return {
|
|
39
|
-
status: 'healthy',
|
|
40
|
-
reason: `${snapshot.activeSessionCount} active, ${snapshot.staleSessionCount} stale sessions`,
|
|
41
|
-
staleGfiDegradedThreshold,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Convert a session's fields to a GfiState for snapshot creation.
|
|
46
|
-
* Note: lastErrorHash is not persisted across sessions, so we omit it.
|
|
47
|
-
*/
|
|
48
|
-
function sessionToGfiState(session) {
|
|
49
|
-
return {
|
|
50
|
-
currentGfi: session.currentGfi ?? 0,
|
|
51
|
-
gfiBySource: (session.gfiBySource ?? {}),
|
|
52
|
-
lastErrorSource: session.lastErrorSource,
|
|
53
|
-
consecutiveErrors: session.consecutiveErrors ?? 0,
|
|
54
|
-
lastGfiDecayAt: session.lastGfiDecayAt,
|
|
55
|
-
dailyGfiPeak: session.dailyGfiPeak,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Build a workspace-level GFI snapshot from session data.
|
|
60
|
-
*
|
|
61
|
-
* Algorithm:
|
|
62
|
-
* 1. Default stale cutoff to 2 hours if not provided
|
|
63
|
-
* 2. Partition sessions into active (lastActivityAt >= nowMs - staleCutoffMs) and stale
|
|
64
|
-
* 3. Select active session with highest currentGfi (tie-break: most recent lastActivityAt)
|
|
65
|
-
* 4. Build GfiSnapshot for selected active session using createGfiSnapshot
|
|
66
|
-
* 5. Compute staleGfiRange from stale sessions' currentGfi values
|
|
67
|
-
* 6. Return GfiWorkspaceSnapshot
|
|
68
|
-
*
|
|
69
|
-
* Key invariant: stale sessions do NOT influence the active snapshot.
|
|
70
|
-
* This prevents old UAT sessions with GFI=197.8 from making current health look critical.
|
|
71
|
-
*/
|
|
72
|
-
export function buildGfiWorkspaceSnapshot(input) {
|
|
73
|
-
const { sessions, nowMs, policy = DEFAULT_GFI_POLICY } = input;
|
|
74
|
-
const staleCutoffMs = input.staleCutoffMs ?? DEFAULT_STALE_CUTOFF_MS;
|
|
75
|
-
if (sessions.length === 0) {
|
|
76
|
-
return {
|
|
77
|
-
active: null,
|
|
78
|
-
staleSessionCount: 0,
|
|
79
|
-
staleGfiRange: null,
|
|
80
|
-
totalSessionCount: 0,
|
|
81
|
-
activeSessionCount: 0,
|
|
82
|
-
generatedAt: new Date(nowMs).toISOString(),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
const cutoffTime = nowMs - staleCutoffMs;
|
|
86
|
-
// Partition sessions
|
|
87
|
-
const activeSessions = [];
|
|
88
|
-
const staleSessions = [];
|
|
89
|
-
for (const session of sessions) {
|
|
90
|
-
if ((session.lastActivityAt ?? 0) >= cutoffTime) {
|
|
91
|
-
activeSessions.push(session);
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
staleSessions.push(session);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Select active session: highest currentGfi, tie-break by most recent lastActivityAt
|
|
98
|
-
let selectedActive = null;
|
|
99
|
-
for (const session of activeSessions) {
|
|
100
|
-
if (selectedActive === null ||
|
|
101
|
-
(session.currentGfi ?? 0) > (selectedActive.currentGfi ?? 0) ||
|
|
102
|
-
((session.currentGfi ?? 0) === (selectedActive.currentGfi ?? 0) &&
|
|
103
|
-
(session.lastActivityAt ?? 0) > (selectedActive.lastActivityAt ?? 0))) {
|
|
104
|
-
selectedActive = session;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
// Build snapshot for active session
|
|
108
|
-
const activeSnapshot = selectedActive
|
|
109
|
-
? createGfiSnapshot(sessionToGfiState(selectedActive), policy)
|
|
110
|
-
: null;
|
|
111
|
-
// Compute stale GFI range
|
|
112
|
-
let staleGfiRange = null;
|
|
113
|
-
if (staleSessions.length > 0) {
|
|
114
|
-
const staleGfis = staleSessions.map((s) => s.currentGfi ?? 0);
|
|
115
|
-
staleGfiRange = {
|
|
116
|
-
min: staleGfis.reduce((a, b) => Math.min(a, b), Infinity),
|
|
117
|
-
max: staleGfis.reduce((a, b) => Math.max(a, b), -Infinity),
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
active: activeSnapshot,
|
|
122
|
-
staleSessionCount: staleSessions.length,
|
|
123
|
-
staleGfiRange,
|
|
124
|
-
totalSessionCount: sessions.length,
|
|
125
|
-
activeSessionCount: activeSessions.length,
|
|
126
|
-
generatedAt: new Date(nowMs).toISOString(),
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=gfi-read-model.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gfi-read-model.js","sourceRoot":"","sources":["../../../src/runtime-v2/gfi/gfi-read-model.ts"],"names":[],"mappings":"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"}
|