create-principles-disciple 1.146.6 → 1.146.7
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/core/dist/runtime-v2/evidence-triage/index.d.ts +1 -3
- package/core/dist/runtime-v2/evidence-triage/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/index.js +1 -2
- package/core/dist/runtime-v2/evidence-triage/index.js.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts +0 -19
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.js +0 -25
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.js.map +1 -1
- package/core/dist/runtime-v2/index.d.ts +2 -2
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +1 -1
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/core/dist/telemetry-event.d.ts +2 -2
- package/core/dist/telemetry-event.d.ts.map +1 -1
- package/core/dist/telemetry-event.js +4 -5
- package/core/dist/telemetry-event.js.map +1 -1
- package/core/dist/trajectory-store.d.ts.map +1 -1
- package/core/dist/trajectory-store.js +4 -44
- package/core/dist/trajectory-store.js.map +1 -1
- package/core/package.json +1 -1
- package/host-runtime/package.json +1 -1
- package/package.json +2 -2
- package/plugin/dist/bundle.js +460 -460
- package/plugin/dist/core/config.d.ts +0 -2
- package/plugin/dist/core/trajectory.d.ts +0 -6
- package/plugin/dist/hooks/llm.d.ts +0 -1
- package/plugin/dist/hooks/prompt-helpers.d.ts +2 -1
- package/plugin/dist/hooks/raw-observation-adapter.d.ts +6 -4
- package/plugin/dist/hooks/triage-adapter.d.ts +1 -1
- package/plugin/dist/openclaw.plugin.json +1 -1
- package/plugin/dist/rulehost-evidence.js +6 -6
- package/plugin/dist/templates/pain_settings.json +0 -2
- package/plugin/openclaw.plugin.json +1 -1
- package/plugin/package.json +1 -1
- package/plugin/templates/pain_settings.json +0 -2
- package/release-manager/package.json +2 -2
- package/workbuddy-adapter/package.json +1 -1
- package/core/dist/runtime-v2/evidence-triage/admission-events.d.ts +0 -126
- package/core/dist/runtime-v2/evidence-triage/admission-events.d.ts.map +0 -1
- package/core/dist/runtime-v2/evidence-triage/admission-events.js +0 -159
- package/core/dist/runtime-v2/evidence-triage/admission-events.js.map +0 -1
- package/plugin/dist/core/detection-funnel.d.ts +0 -47
- package/plugin/dist/core/detection-service.d.ts +0 -15
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Admission Events — PEAT-B2
|
|
3
|
-
*
|
|
4
|
-
* Structured event types for the pain evidence admission pipeline.
|
|
5
|
-
* These events make admission decisions observable without exposing raw data.
|
|
6
|
-
*
|
|
7
|
-
* Privacy boundary: events MUST NOT contain raw prompt, raw chat, raw trajectory,
|
|
8
|
-
* full local paths, file contents, env vars, tokens, or API keys.
|
|
9
|
-
*
|
|
10
|
-
* ERR checklist:
|
|
11
|
-
* - ERR-002: Every event has reason + nextAction.
|
|
12
|
-
* - ERR-009: Malformed input events include validation error details.
|
|
13
|
-
*/
|
|
14
|
-
// ── Event Factory Functions ─────────────────────────────────────────────────
|
|
15
|
-
let eventCounter = 0;
|
|
16
|
-
function nextEventId() {
|
|
17
|
-
return `adm_${Date.now()}_${++eventCounter}`;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Create an AdmissionDecisionEvent from a TriggerDecision.
|
|
21
|
-
*
|
|
22
|
-
* This is the canonical way to produce an admission event.
|
|
23
|
-
* The event contains no raw sensitive data — only structured metadata.
|
|
24
|
-
*/
|
|
25
|
-
export function createAdmissionDecisionEvent(decision, options) {
|
|
26
|
-
return {
|
|
27
|
-
eventType: 'admission_decision',
|
|
28
|
-
eventId: nextEventId(),
|
|
29
|
-
timestamp: decision.decidedAt,
|
|
30
|
-
sourceKind: decision.sourceKind,
|
|
31
|
-
workspaceRef: options.workspaceRef,
|
|
32
|
-
sessionId: options.sessionId,
|
|
33
|
-
triageDecision: decision.triageDecision,
|
|
34
|
-
triggerOutcome: decision.outcome,
|
|
35
|
-
reason: decision.reason,
|
|
36
|
-
nextAction: decision.nextAction,
|
|
37
|
-
shouldCreateDiagnosticTask: decision.shouldCreateDiagnosticTask,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Create a DiagnosisTaskCreatedEvent.
|
|
42
|
-
*/
|
|
43
|
-
export function createDiagnosisTaskCreatedEvent(opts) {
|
|
44
|
-
return {
|
|
45
|
-
eventType: 'diagnosis_task_created',
|
|
46
|
-
eventId: nextEventId(),
|
|
47
|
-
timestamp: new Date().toISOString(),
|
|
48
|
-
sourceKind: opts.decision.sourceKind,
|
|
49
|
-
workspaceRef: opts.workspaceRef,
|
|
50
|
-
sessionId: opts.sessionId,
|
|
51
|
-
painId: opts.painId,
|
|
52
|
-
taskId: opts.taskId,
|
|
53
|
-
triggerOutcome: opts.decision.outcome,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Create an EvidenceOnlyRecordedEvent.
|
|
58
|
-
*/
|
|
59
|
-
export function createEvidenceOnlyRecordedEvent(decision, options) {
|
|
60
|
-
return {
|
|
61
|
-
eventType: 'evidence_only_recorded',
|
|
62
|
-
eventId: nextEventId(),
|
|
63
|
-
timestamp: decision.decidedAt,
|
|
64
|
-
sourceKind: decision.sourceKind,
|
|
65
|
-
workspaceRef: options.workspaceRef,
|
|
66
|
-
sessionId: options.sessionId,
|
|
67
|
-
triageDecision: decision.triageDecision,
|
|
68
|
-
reason: decision.reason,
|
|
69
|
-
nextAction: decision.nextAction,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Create a SkippedRefusedEvent.
|
|
74
|
-
*/
|
|
75
|
-
export function createSkippedRefusedEvent(decision, options) {
|
|
76
|
-
return {
|
|
77
|
-
eventType: 'skipped_refused',
|
|
78
|
-
eventId: nextEventId(),
|
|
79
|
-
timestamp: decision.decidedAt,
|
|
80
|
-
sourceKind: decision.sourceKind,
|
|
81
|
-
workspaceRef: options.workspaceRef,
|
|
82
|
-
sessionId: options.sessionId,
|
|
83
|
-
triggerOutcome: decision.outcome,
|
|
84
|
-
reason: decision.reason,
|
|
85
|
-
nextAction: decision.nextAction,
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
// ── Event Serialization ─────────────────────────────────────────────────────
|
|
89
|
-
/**
|
|
90
|
-
* Serialize an admission event to a JSONL-safe string.
|
|
91
|
-
*
|
|
92
|
-
* Privacy boundary: only structured fields are included.
|
|
93
|
-
* No raw prompt/chat/trajectory/file content/token/path secrets.
|
|
94
|
-
*/
|
|
95
|
-
export function serializeAdmissionEvent(event) {
|
|
96
|
-
// Explicit field selection prevents accidental raw data leakage
|
|
97
|
-
const safe = {
|
|
98
|
-
eventType: event.eventType,
|
|
99
|
-
eventId: event.eventId,
|
|
100
|
-
timestamp: event.timestamp,
|
|
101
|
-
sourceKind: event.sourceKind,
|
|
102
|
-
workspaceRef: event.workspaceRef,
|
|
103
|
-
sessionId: event.sessionId,
|
|
104
|
-
};
|
|
105
|
-
if (event.eventType === 'admission_decision') {
|
|
106
|
-
safe.triageDecision = event.triageDecision;
|
|
107
|
-
safe.triggerOutcome = event.triggerOutcome;
|
|
108
|
-
safe.reason = event.reason;
|
|
109
|
-
safe.nextAction = event.nextAction;
|
|
110
|
-
safe.shouldCreateDiagnosticTask = event.shouldCreateDiagnosticTask;
|
|
111
|
-
}
|
|
112
|
-
else if (event.eventType === 'diagnosis_task_created') {
|
|
113
|
-
safe.painId = event.painId;
|
|
114
|
-
safe.taskId = event.taskId;
|
|
115
|
-
safe.triggerOutcome = event.triggerOutcome;
|
|
116
|
-
}
|
|
117
|
-
else if (event.eventType === 'evidence_only_recorded') {
|
|
118
|
-
safe.triageDecision = event.triageDecision;
|
|
119
|
-
safe.reason = event.reason;
|
|
120
|
-
safe.nextAction = event.nextAction;
|
|
121
|
-
}
|
|
122
|
-
else if (event.eventType === 'skipped_refused') {
|
|
123
|
-
safe.triggerOutcome = event.triggerOutcome;
|
|
124
|
-
safe.reason = event.reason;
|
|
125
|
-
safe.nextAction = event.nextAction;
|
|
126
|
-
}
|
|
127
|
-
return JSON.stringify(safe);
|
|
128
|
-
}
|
|
129
|
-
// ── Validation ──────────────────────────────────────────────────────────────
|
|
130
|
-
/**
|
|
131
|
-
* Validate that an admission event does not contain raw sensitive data.
|
|
132
|
-
*
|
|
133
|
-
* Returns true if the event passes privacy checks.
|
|
134
|
-
* This is a defense-in-depth check for tests and auditing.
|
|
135
|
-
*/
|
|
136
|
-
export function validateEventPrivacy(event) {
|
|
137
|
-
const violations = [];
|
|
138
|
-
const serialized = JSON.stringify(event);
|
|
139
|
-
// Check for common sensitive patterns
|
|
140
|
-
if (/sk-[a-zA-Z0-9]{20,}/.test(serialized)) {
|
|
141
|
-
violations.push('potential_api_key_detected');
|
|
142
|
-
}
|
|
143
|
-
// Check for absolute paths in JSON-serialized form.
|
|
144
|
-
// JSON.stringify('C:\\Users\\admin') produces "C:\\\\Users\\\\admin" in the JSON string.
|
|
145
|
-
// At runtime, serialized.includes('Users\\') checks for Users followed by one backslash.
|
|
146
|
-
const hasWindowsPath = serialized.includes('Users\\') ||
|
|
147
|
-
/[A-Z]:\\[Uu]sers/.test(serialized);
|
|
148
|
-
if (hasWindowsPath) {
|
|
149
|
-
violations.push('absolute_windows_path_detected');
|
|
150
|
-
}
|
|
151
|
-
if (/\/home\/[a-z]/.test(serialized)) {
|
|
152
|
-
violations.push('absolute_unix_path_detected');
|
|
153
|
-
}
|
|
154
|
-
if (/"prompt"\s*:\s*"/.test(serialized) && serialized.length > 2000) {
|
|
155
|
-
violations.push('potential_raw_prompt_in_event');
|
|
156
|
-
}
|
|
157
|
-
return { valid: violations.length === 0, violations };
|
|
158
|
-
}
|
|
159
|
-
//# sourceMappingURL=admission-events.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admission-events.js","sourceRoot":"","sources":["../../../src/runtime-v2/evidence-triage/admission-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Detection Funnel — PRI-446 thin adapter
|
|
3
|
-
*
|
|
4
|
-
* The pure three-layer funnel logic (LRU cache, async queue, layer dispatch)
|
|
5
|
-
* now lives in principles-core
|
|
6
|
-
* (runtime-v2/detection/detection-funnel-policy.ts). This file is a thin shell
|
|
7
|
-
* that wires DetectionFunnelCore with the two environment-coupled dependencies
|
|
8
|
-
* the plugin owns:
|
|
9
|
-
* - crypto.createHash (the L2 cache key hasher)
|
|
10
|
-
* - PainDictionary.match (the L1 exact matcher)
|
|
11
|
-
* - shouldIgnorePainProtocolText (the protocol-token gate)
|
|
12
|
-
*
|
|
13
|
-
* It re-exports DetectionFunnel (same class name + constructor signature) and
|
|
14
|
-
* DetectionResult so DetectionService and llm.ts keep working
|
|
15
|
-
* unchanged.
|
|
16
|
-
*
|
|
17
|
-
* ERR checklist:
|
|
18
|
-
* - ERR-011: this is a thin adapter delegating to core pure logic.
|
|
19
|
-
*/
|
|
20
|
-
import { type PainDictionary } from './dictionary.js';
|
|
21
|
-
import { type DetectionResult } from '@principles/core/runtime-v2';
|
|
22
|
-
export type { DetectionResult };
|
|
23
|
-
/**
|
|
24
|
-
* Orchestrates the three-layer detection funnel for pain signals.
|
|
25
|
-
*
|
|
26
|
-
* Delegates to the core DetectionFunnelCore, injecting the crypto hasher,
|
|
27
|
-
* the dictionary matcher, and the protocol-token gate.
|
|
28
|
-
*/
|
|
29
|
-
export declare class DetectionFunnel {
|
|
30
|
-
private readonly core;
|
|
31
|
-
constructor(dictionary: PainDictionary);
|
|
32
|
-
/**
|
|
33
|
-
* Detects pain in the given text using L1 (Exact), L2 (Cache), and L3 (Async).
|
|
34
|
-
*/
|
|
35
|
-
detect(text: string): DetectionResult;
|
|
36
|
-
/**
|
|
37
|
-
* Internal method for the worker to update the cache after a semantic hit.
|
|
38
|
-
*/
|
|
39
|
-
updateCache(text: string, result: {
|
|
40
|
-
detected: boolean;
|
|
41
|
-
severity?: number;
|
|
42
|
-
}): void;
|
|
43
|
-
/**
|
|
44
|
-
* Retrieves and clears the current asynchronous queue.
|
|
45
|
-
*/
|
|
46
|
-
flushQueue(): string[];
|
|
47
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { DetectionFunnel } from './detection-funnel.js';
|
|
2
|
-
/**
|
|
3
|
-
* Singleton service to manage the Semantic Detection Funnel.
|
|
4
|
-
*/
|
|
5
|
-
export declare const DetectionService: {
|
|
6
|
-
/**
|
|
7
|
-
* Gets or initializes the Detection Funnel instance.
|
|
8
|
-
* @param stateDir The directory used to initialize the dictionary.
|
|
9
|
-
*/
|
|
10
|
-
get(stateDir: string): DetectionFunnel;
|
|
11
|
-
/**
|
|
12
|
-
* Resets the singleton instance (primarily for testing).
|
|
13
|
-
*/
|
|
14
|
-
reset(): void;
|
|
15
|
-
};
|