create-principles-disciple 1.145.26 → 1.145.27
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/console/dist/server/models/RuleCandidateBindingConsoleModel.d.ts +26 -0
- package/console/dist/server/models/RuleCandidateBindingConsoleModel.js +309 -19
- package/console/dist/server/routes/rule-candidate-bindings.js +26 -1
- package/console/dist/shared/rule-candidate-binding-contract.d.ts +93 -8
- package/console/dist/shared/rule-candidate-binding-contract.js +4 -0
- package/console/dist/ui/api.d.ts +28 -0
- package/console/dist/ui/api.js +13 -1
- package/console/dist/ui/i18n/en.json +92 -20
- package/console/dist/ui/i18n/zh-CN.json +78 -6
- package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.d.ts +29 -0
- package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.js +229 -3
- package/console/dist/ui/utils/rule-binding-validators.d.ts +5 -0
- package/console/dist/ui/utils/rule-binding-validators.js +149 -7
- package/console/dist/web/assets/app.css +6 -0
- package/console/dist/web/assets/app.js +32 -32
- package/core/dist/runtime-v2/golden-trace.d.ts.map +1 -1
- package/core/dist/runtime-v2/golden-trace.js +8 -1
- package/core/dist/runtime-v2/golden-trace.js.map +1 -1
- package/core/dist/runtime-v2/index.d.ts +3 -1
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +2 -1
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-intent-preflight.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-intent-preflight.js +26 -95
- package/core/dist/runtime-v2/internalization/artificer-intent-preflight.js.map +1 -1
- package/core/dist/runtime-v2/internalization/bash-risk.d.ts +32 -0
- package/core/dist/runtime-v2/internalization/bash-risk.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/bash-risk.js +785 -0
- package/core/dist/runtime-v2/internalization/bash-risk.js.map +1 -0
- package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts +25 -2
- package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.js +177 -14
- package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-runner.js +14 -2
- package/core/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/internalization-orchestrator.d.ts +47 -0
- package/core/dist/runtime-v2/internalization/internalization-orchestrator.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/internalization-orchestrator.js +164 -3
- package/core/dist/runtime-v2/internalization/internalization-orchestrator.js.map +1 -1
- package/core/dist/runtime-v2/internalization/peer-runner-contracts.d.ts +9 -1
- package/core/dist/runtime-v2/internalization/peer-runner-contracts.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/peer-runner-contracts.js.map +1 -1
- package/core/dist/runtime-v2/internalization/pitask-metadata.d.ts +39 -0
- package/core/dist/runtime-v2/internalization/pitask-metadata.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/pitask-metadata.js +59 -0
- package/core/dist/runtime-v2/internalization/pitask-metadata.js.map +1 -1
- package/core/dist/runtime-v2/internalization/rule-source-correction.d.ts +60 -0
- package/core/dist/runtime-v2/internalization/rule-source-correction.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/rule-source-correction.js +214 -0
- package/core/dist/runtime-v2/internalization/rule-source-correction.js.map +1 -0
- package/core/dist/runtime-v2/internalization/rulecode-verification-obligations.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/rulecode-verification-obligations.js +65 -0
- package/core/dist/runtime-v2/internalization/rulecode-verification-obligations.js.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-output.d.ts +14 -2
- package/core/dist/runtime-v2/internalization/scribe-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-output.js +57 -2
- package/core/dist/runtime-v2/internalization/scribe-output.js.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts +13 -1
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js +15 -3
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-runner.d.ts +34 -0
- package/core/dist/runtime-v2/internalization/scribe-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-runner.js +128 -4
- package/core/dist/runtime-v2/internalization/scribe-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/textual-basis-anchor.d.ts +72 -0
- package/core/dist/runtime-v2/internalization/textual-basis-anchor.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/textual-basis-anchor.js +100 -0
- package/core/dist/runtime-v2/internalization/textual-basis-anchor.js.map +1 -0
- package/core/dist/runtime-v2/store/lifecycle/lease-manager.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/lifecycle/lease-manager.js +11 -2
- package/core/dist/runtime-v2/store/lifecycle/lease-manager.js.map +1 -1
- package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.d.ts.map +1 -1
- package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.js +26 -0
- package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.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 +5 -0
- package/core/dist/telemetry-event.js.map +1 -1
- package/core/package.json +5 -1
- package/host-runtime/dist/production-rulehost-gate.js +11 -1
- package/host-runtime/package.json +1 -1
- package/package.json +2 -2
- package/pd-cli/dist/commands/runtime-internalization-enqueue-successors.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-enqueue-successors.js +32 -0
- package/pd-cli/dist/commands/runtime-internalization-enqueue-successors.js.map +1 -1
- package/pd-cli/package.json +1 -1
- package/plugin/dist/bundle.js +503 -490
- package/plugin/dist/openclaw.plugin.json +1 -1
- package/plugin/openclaw.plugin.json +1 -1
- package/plugin/package.json +1 -1
- package/release-manager/package.json +2 -2
|
@@ -1,21 +1,127 @@
|
|
|
1
1
|
function record(value) { return typeof value === 'object' && value !== null && !Array.isArray(value); }
|
|
2
2
|
function integer(value) { return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0; }
|
|
3
|
+
function stringOrNull(value) { return value === null || typeof value === 'string'; }
|
|
4
|
+
function validatePainSource(value) {
|
|
5
|
+
if (!record(value) || typeof value.painId !== 'string' || !stringOrNull(value.text)
|
|
6
|
+
|| typeof value.source !== 'string' || !stringOrNull(value.createdAt))
|
|
7
|
+
return null;
|
|
8
|
+
return { painId: value.painId, text: value.text, source: value.source, createdAt: value.createdAt };
|
|
9
|
+
}
|
|
10
|
+
const GENERATION_STAGES = ['not_built', 'in_progress', 'blocked', 'advanced', 'ambiguous'];
|
|
11
|
+
function isGenerationStage(value) {
|
|
12
|
+
return typeof value === 'string' && GENERATION_STAGES.includes(value);
|
|
13
|
+
}
|
|
14
|
+
/** null = legitimately absent (unlinked row); 'invalid' = malformed row. */
|
|
15
|
+
function validateGeneration(value) {
|
|
16
|
+
if (value === null)
|
|
17
|
+
return null;
|
|
18
|
+
if (!record(value) || !isGenerationStage(value.stage) || !stringOrNull(value.stageKind)
|
|
19
|
+
|| !stringOrNull(value.reasonCode) || !stringOrNull(value.detail))
|
|
20
|
+
return 'invalid';
|
|
21
|
+
// A blocked generation names the stage it stopped at; reasonCode may be
|
|
22
|
+
// null for legacy tasks without humanReviewContext.
|
|
23
|
+
return { stage: value.stage, stageKind: value.stageKind, reasonCode: value.reasonCode, detail: value.detail };
|
|
24
|
+
}
|
|
25
|
+
function validateResume(value) {
|
|
26
|
+
if (value === null)
|
|
27
|
+
return null;
|
|
28
|
+
if (!record(value) || (value.status !== 'ready' && value.status !== 'refused')
|
|
29
|
+
|| !stringOrNull(value.reason) || !stringOrNull(value.scribeTaskId)
|
|
30
|
+
|| !(value.taskRevisionEpoch === null || integer(value.taskRevisionEpoch)))
|
|
31
|
+
return 'invalid';
|
|
32
|
+
return { status: value.status, reason: value.reason, scribeTaskId: value.scribeTaskId, taskRevisionEpoch: value.taskRevisionEpoch };
|
|
33
|
+
}
|
|
34
|
+
/** PRI-1048 R6 #4: source-correct-once eligibility preview (null = not applicable). */
|
|
35
|
+
function validateSourceCorrection(value) {
|
|
36
|
+
if (value === null)
|
|
37
|
+
return null;
|
|
38
|
+
if (!record(value) || (value.status !== 'ready' && value.status !== 'unavailable')
|
|
39
|
+
|| !stringOrNull(value.reason) || !stringOrNull(value.scribeTaskId)
|
|
40
|
+
|| !stringOrNull(value.artificerTaskId) || !stringOrNull(value.scribeArtifactDigest)
|
|
41
|
+
|| !(value.expectedBindingRevision === null || integer(value.expectedBindingRevision)))
|
|
42
|
+
return 'invalid';
|
|
43
|
+
// ready MUST carry the full CAS input set — a half-filled preview would render
|
|
44
|
+
// a CTA that can never fire.
|
|
45
|
+
if (value.status === 'ready' && (value.scribeTaskId === null || value.artificerTaskId === null
|
|
46
|
+
|| value.scribeArtifactDigest === null || value.expectedBindingRevision === null))
|
|
47
|
+
return 'invalid';
|
|
48
|
+
return {
|
|
49
|
+
status: value.status, reason: value.reason, scribeTaskId: value.scribeTaskId,
|
|
50
|
+
artificerTaskId: value.artificerTaskId, scribeArtifactDigest: value.scribeArtifactDigest,
|
|
51
|
+
expectedBindingRevision: value.expectedBindingRevision,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function validateBinding(value) {
|
|
55
|
+
if (!record(value))
|
|
56
|
+
return null;
|
|
57
|
+
if (value.status === 'unlinked')
|
|
58
|
+
return { status: 'unlinked' };
|
|
59
|
+
if (value.status === 'binding_revoked')
|
|
60
|
+
return { status: 'binding_revoked' };
|
|
61
|
+
if (value.status === 'attention' && typeof value.reason === 'string')
|
|
62
|
+
return { status: 'attention', reason: value.reason };
|
|
63
|
+
if (value.status === 'bound' && record(value.principle) && typeof value.principle.principleId === 'string'
|
|
64
|
+
&& typeof value.principle.text === 'string' && typeof value.principle.status === 'string'
|
|
65
|
+
&& integer(value.principle.version) && integer(value.principle.revision) && typeof value.principle.decidedAt === 'string') {
|
|
66
|
+
const principle = {
|
|
67
|
+
principleId: value.principle.principleId, text: value.principle.text, status: value.principle.status,
|
|
68
|
+
version: value.principle.version, revision: value.principle.revision, decidedAt: value.principle.decidedAt,
|
|
69
|
+
};
|
|
70
|
+
return { status: 'bound', principle };
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
3
74
|
export function validateBindingQueue(value) {
|
|
4
|
-
if (!record(value) || !Array.isArray(value.items)
|
|
75
|
+
if (!record(value) || !Array.isArray(value.items) || typeof value.truncated !== 'boolean'
|
|
76
|
+
|| !record(value.summary) || !integer(value.summary.painGroups) || !integer(value.summary.candidates)
|
|
77
|
+
|| !integer(value.summary.bound) || !integer(value.summary.unlinked) || !integer(value.summary.blocked))
|
|
5
78
|
return null;
|
|
6
79
|
const items = [];
|
|
80
|
+
const seen = new Set();
|
|
7
81
|
for (const item of value.items) {
|
|
8
|
-
if (!record(item) || typeof item.candidateId !== 'string' || typeof item.text !== 'string'
|
|
82
|
+
if (!record(item) || typeof item.candidateId !== 'string' || typeof item.text !== 'string'
|
|
83
|
+
|| typeof item.diagnosisStatus !== 'string')
|
|
9
84
|
return null;
|
|
10
|
-
|
|
85
|
+
// The queue contract is one entry per canonical candidate (PRI-1048);
|
|
86
|
+
// a duplicated id means the response itself is malformed.
|
|
87
|
+
if (seen.has(item.candidateId))
|
|
88
|
+
return null;
|
|
89
|
+
seen.add(item.candidateId);
|
|
90
|
+
const pain = validatePainSource(item.pain);
|
|
91
|
+
const binding = validateBinding(item.binding);
|
|
92
|
+
// Nullable projection fields must still be PRESENT keys (rc-3): an absent
|
|
93
|
+
// generation/resume is a malformed row, not an unlinked row.
|
|
94
|
+
const generation = validateGeneration(item.generation);
|
|
95
|
+
const resume = validateResume(item.resume);
|
|
96
|
+
const sourceCorrection = validateSourceCorrection(item.sourceCorrection);
|
|
97
|
+
if (!pain || !binding || generation === 'invalid' || resume === 'invalid' || sourceCorrection === 'invalid'
|
|
98
|
+
|| !Object.hasOwn(item, 'generation') || !Object.hasOwn(item, 'resume') || !Object.hasOwn(item, 'sourceCorrection'))
|
|
99
|
+
return null;
|
|
100
|
+
items.push({
|
|
101
|
+
candidateId: item.candidateId, text: item.text, pain,
|
|
102
|
+
diagnosisStatus: item.diagnosisStatus, binding,
|
|
103
|
+
generation,
|
|
104
|
+
resume,
|
|
105
|
+
sourceCorrection,
|
|
106
|
+
});
|
|
11
107
|
}
|
|
12
|
-
return {
|
|
108
|
+
return {
|
|
109
|
+
items,
|
|
110
|
+
summary: {
|
|
111
|
+
painGroups: value.summary.painGroups, candidates: value.summary.candidates,
|
|
112
|
+
bound: value.summary.bound, unlinked: value.summary.unlinked, blocked: value.summary.blocked,
|
|
113
|
+
},
|
|
114
|
+
truncated: value.truncated,
|
|
115
|
+
};
|
|
13
116
|
}
|
|
14
117
|
export function validateBindingReview(value) {
|
|
15
|
-
if (!record(value) || typeof value.candidateId !== 'string' || typeof value.candidateText !== 'string'
|
|
118
|
+
if (!record(value) || typeof value.candidateId !== 'string' || typeof value.candidateText !== 'string'
|
|
16
119
|
|| typeof value.evidence !== 'string' || typeof value.candidateDigest !== 'string' || !integer(value.currentRevision)
|
|
17
120
|
|| typeof value.resumeNotice !== 'string' || !Array.isArray(value.eligibleTargets) || value.eligibleTargets.length > 20)
|
|
18
121
|
return null;
|
|
122
|
+
const sourcePain = validatePainSource(value.sourcePain);
|
|
123
|
+
if (!sourcePain)
|
|
124
|
+
return null;
|
|
19
125
|
let currentBinding = null;
|
|
20
126
|
if (value.currentBinding !== null) {
|
|
21
127
|
const b = value.currentBinding;
|
|
@@ -23,14 +129,41 @@ export function validateBindingReview(value) {
|
|
|
23
129
|
return null;
|
|
24
130
|
currentBinding = { action: b.action, principleId: b.principleId, reason: b.reason, revision: b.revision };
|
|
25
131
|
}
|
|
132
|
+
let boundPrinciple = null;
|
|
133
|
+
if (value.boundPrinciple !== null) {
|
|
134
|
+
if (!record(value.boundPrinciple) || typeof value.boundPrinciple.principleId !== 'string'
|
|
135
|
+
|| typeof value.boundPrinciple.text !== 'string' || typeof value.boundPrinciple.status !== 'string'
|
|
136
|
+
|| !integer(value.boundPrinciple.version) || !integer(value.boundPrinciple.revision)
|
|
137
|
+
|| typeof value.boundPrinciple.decidedAt !== 'string')
|
|
138
|
+
return null;
|
|
139
|
+
boundPrinciple = {
|
|
140
|
+
principleId: value.boundPrinciple.principleId, text: value.boundPrinciple.text,
|
|
141
|
+
status: value.boundPrinciple.status, version: value.boundPrinciple.version,
|
|
142
|
+
revision: value.boundPrinciple.revision, decidedAt: value.boundPrinciple.decidedAt,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
26
145
|
const eligibleTargets = [];
|
|
27
146
|
for (const p of value.eligibleTargets) {
|
|
28
147
|
if (!record(p) || typeof p.principleId !== 'string' || typeof p.text !== 'string' || typeof p.status !== 'string' || !integer(p.version) || typeof p.digest !== 'string')
|
|
29
148
|
return null;
|
|
30
149
|
eligibleTargets.push({ principleId: p.principleId, text: p.text, status: p.status, version: p.version, digest: p.digest });
|
|
31
150
|
}
|
|
32
|
-
|
|
33
|
-
|
|
151
|
+
if (!Object.hasOwn(value, 'generation') || !Object.hasOwn(value, 'resume') || !Object.hasOwn(value, 'sourceCorrection'))
|
|
152
|
+
return null;
|
|
153
|
+
const generation = validateGeneration(value.generation);
|
|
154
|
+
const resume = validateResume(value.resume);
|
|
155
|
+
const sourceCorrection = validateSourceCorrection(value.sourceCorrection);
|
|
156
|
+
if (generation === 'invalid' || resume === 'invalid' || sourceCorrection === 'invalid')
|
|
157
|
+
return null;
|
|
158
|
+
return {
|
|
159
|
+
candidateId: value.candidateId, candidateText: value.candidateText, sourcePain,
|
|
160
|
+
evidence: value.evidence, candidateDigest: value.candidateDigest, currentRevision: value.currentRevision,
|
|
161
|
+
currentBinding, boundPrinciple, eligibleTargets,
|
|
162
|
+
generation,
|
|
163
|
+
resume,
|
|
164
|
+
sourceCorrection,
|
|
165
|
+
resumeNotice: value.resumeNotice,
|
|
166
|
+
};
|
|
34
167
|
}
|
|
35
168
|
export function validateBindingMutation(value) {
|
|
36
169
|
if (!record(value) || !['bound', 'already_bound', 'revoked', 'already_revoked'].includes(String(value.status)) || typeof value.status !== 'string')
|
|
@@ -44,3 +177,12 @@ export function validateBindingMutation(value) {
|
|
|
44
177
|
return { status: value.status, ...(record(value.revision) && typeof value.revision.status === 'string' ? { revisionStatus: value.revision.status } : {}),
|
|
45
178
|
...(typeof value.nextAction === 'string' ? { nextAction: value.nextAction } : {}) };
|
|
46
179
|
}
|
|
180
|
+
export function validateBindingRevise(value) {
|
|
181
|
+
if (!record(value) || typeof value.status !== 'string' || value.status.length === 0)
|
|
182
|
+
return null;
|
|
183
|
+
if (value.reason !== undefined && typeof value.reason !== 'string')
|
|
184
|
+
return null;
|
|
185
|
+
if (value.nextAction !== undefined && typeof value.nextAction !== 'string')
|
|
186
|
+
return null;
|
|
187
|
+
return { status: value.status, ...(typeof value.reason === 'string' ? { reason: value.reason } : {}), ...(typeof value.nextAction === 'string' ? { nextAction: value.nextAction } : {}) };
|
|
188
|
+
}
|
|
@@ -1273,6 +1273,12 @@
|
|
|
1273
1273
|
border-color: color-mix(in oklab, var(--color-amber) 40%, transparent);
|
|
1274
1274
|
}
|
|
1275
1275
|
}
|
|
1276
|
+
.border-amber\/45 {
|
|
1277
|
+
border-color: color-mix(in srgb, #a66a2a 45%, transparent);
|
|
1278
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1279
|
+
border-color: color-mix(in oklab, var(--color-amber) 45%, transparent);
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1276
1282
|
.border-border {
|
|
1277
1283
|
border-color: var(--color-border);
|
|
1278
1284
|
}
|