create-principles-disciple 1.145.26 → 1.145.28

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.
Files changed (115) hide show
  1. package/_release/product-identity.json +1 -1
  2. package/console/dist/server/models/RuleCandidateBindingConsoleModel.d.ts +26 -0
  3. package/console/dist/server/models/RuleCandidateBindingConsoleModel.js +309 -19
  4. package/console/dist/server/routes/rule-candidate-bindings.js +26 -1
  5. package/console/dist/shared/rule-candidate-binding-contract.d.ts +93 -8
  6. package/console/dist/shared/rule-candidate-binding-contract.js +4 -0
  7. package/console/dist/ui/api.d.ts +28 -0
  8. package/console/dist/ui/api.js +13 -1
  9. package/console/dist/ui/i18n/en.json +92 -20
  10. package/console/dist/ui/i18n/zh-CN.json +78 -6
  11. package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.d.ts +29 -0
  12. package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.js +229 -3
  13. package/console/dist/ui/utils/rule-binding-validators.d.ts +5 -0
  14. package/console/dist/ui/utils/rule-binding-validators.js +149 -7
  15. package/console/dist/web/assets/app.css +6 -0
  16. package/console/dist/web/assets/app.js +32 -32
  17. package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts +0 -1
  18. package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts.map +1 -1
  19. package/core/dist/runtime-v2/evidence-triage/triage-policy.js +0 -1
  20. package/core/dist/runtime-v2/evidence-triage/triage-policy.js.map +1 -1
  21. package/core/dist/runtime-v2/golden-trace.d.ts.map +1 -1
  22. package/core/dist/runtime-v2/golden-trace.js +8 -1
  23. package/core/dist/runtime-v2/golden-trace.js.map +1 -1
  24. package/core/dist/runtime-v2/index.d.ts +3 -3
  25. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  26. package/core/dist/runtime-v2/index.js +3 -3
  27. package/core/dist/runtime-v2/index.js.map +1 -1
  28. package/core/dist/runtime-v2/internalization/artificer-intent-preflight.d.ts.map +1 -1
  29. package/core/dist/runtime-v2/internalization/artificer-intent-preflight.js +26 -95
  30. package/core/dist/runtime-v2/internalization/artificer-intent-preflight.js.map +1 -1
  31. package/core/dist/runtime-v2/internalization/bash-risk.d.ts +32 -0
  32. package/core/dist/runtime-v2/internalization/bash-risk.d.ts.map +1 -0
  33. package/core/dist/runtime-v2/internalization/bash-risk.js +785 -0
  34. package/core/dist/runtime-v2/internalization/bash-risk.js.map +1 -0
  35. package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts +25 -2
  36. package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts.map +1 -1
  37. package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.js +177 -14
  38. package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.js.map +1 -1
  39. package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
  40. package/core/dist/runtime-v2/internalization/evaluator-runner.js +14 -2
  41. package/core/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
  42. package/core/dist/runtime-v2/internalization/internalization-orchestrator.d.ts +47 -0
  43. package/core/dist/runtime-v2/internalization/internalization-orchestrator.d.ts.map +1 -1
  44. package/core/dist/runtime-v2/internalization/internalization-orchestrator.js +164 -3
  45. package/core/dist/runtime-v2/internalization/internalization-orchestrator.js.map +1 -1
  46. package/core/dist/runtime-v2/internalization/peer-runner-contracts.d.ts +9 -1
  47. package/core/dist/runtime-v2/internalization/peer-runner-contracts.d.ts.map +1 -1
  48. package/core/dist/runtime-v2/internalization/peer-runner-contracts.js.map +1 -1
  49. package/core/dist/runtime-v2/internalization/pitask-metadata.d.ts +39 -0
  50. package/core/dist/runtime-v2/internalization/pitask-metadata.d.ts.map +1 -1
  51. package/core/dist/runtime-v2/internalization/pitask-metadata.js +59 -0
  52. package/core/dist/runtime-v2/internalization/pitask-metadata.js.map +1 -1
  53. package/core/dist/runtime-v2/internalization/rule-source-correction.d.ts +60 -0
  54. package/core/dist/runtime-v2/internalization/rule-source-correction.d.ts.map +1 -0
  55. package/core/dist/runtime-v2/internalization/rule-source-correction.js +214 -0
  56. package/core/dist/runtime-v2/internalization/rule-source-correction.js.map +1 -0
  57. package/core/dist/runtime-v2/internalization/rulecode-verification-obligations.d.ts.map +1 -1
  58. package/core/dist/runtime-v2/internalization/rulecode-verification-obligations.js +65 -0
  59. package/core/dist/runtime-v2/internalization/rulecode-verification-obligations.js.map +1 -1
  60. package/core/dist/runtime-v2/internalization/scribe-output.d.ts +14 -2
  61. package/core/dist/runtime-v2/internalization/scribe-output.d.ts.map +1 -1
  62. package/core/dist/runtime-v2/internalization/scribe-output.js +57 -2
  63. package/core/dist/runtime-v2/internalization/scribe-output.js.map +1 -1
  64. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts +13 -1
  65. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts.map +1 -1
  66. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js +15 -3
  67. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js.map +1 -1
  68. package/core/dist/runtime-v2/internalization/scribe-runner.d.ts +34 -0
  69. package/core/dist/runtime-v2/internalization/scribe-runner.d.ts.map +1 -1
  70. package/core/dist/runtime-v2/internalization/scribe-runner.js +128 -4
  71. package/core/dist/runtime-v2/internalization/scribe-runner.js.map +1 -1
  72. package/core/dist/runtime-v2/internalization/textual-basis-anchor.d.ts +72 -0
  73. package/core/dist/runtime-v2/internalization/textual-basis-anchor.d.ts.map +1 -0
  74. package/core/dist/runtime-v2/internalization/textual-basis-anchor.js +100 -0
  75. package/core/dist/runtime-v2/internalization/textual-basis-anchor.js.map +1 -0
  76. package/core/dist/runtime-v2/store/lifecycle/lease-manager.d.ts.map +1 -1
  77. package/core/dist/runtime-v2/store/lifecycle/lease-manager.js +11 -2
  78. package/core/dist/runtime-v2/store/lifecycle/lease-manager.js.map +1 -1
  79. package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.d.ts.map +1 -1
  80. package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.js +26 -0
  81. package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.js.map +1 -1
  82. package/core/dist/telemetry-event.d.ts +2 -2
  83. package/core/dist/telemetry-event.d.ts.map +1 -1
  84. package/core/dist/telemetry-event.js +5 -0
  85. package/core/dist/telemetry-event.js.map +1 -1
  86. package/core/package.json +5 -1
  87. package/host-runtime/dist/index.d.ts +0 -1
  88. package/host-runtime/dist/index.js +0 -3
  89. package/host-runtime/dist/production-rulehost-gate.js +11 -1
  90. package/host-runtime/package.json +1 -1
  91. package/package.json +2 -2
  92. package/pd-cli/dist/commands/runtime-internalization-enqueue-successors.d.ts.map +1 -1
  93. package/pd-cli/dist/commands/runtime-internalization-enqueue-successors.js +32 -0
  94. package/pd-cli/dist/commands/runtime-internalization-enqueue-successors.js.map +1 -1
  95. package/pd-cli/package.json +1 -1
  96. package/plugin/dist/bundle.js +503 -490
  97. package/plugin/dist/hooks/pain-ingress-adapter.d.ts +1 -2
  98. package/plugin/dist/hooks/triage-adapter.d.ts +3 -1
  99. package/plugin/dist/openclaw.plugin.json +1 -1
  100. package/plugin/openclaw.plugin.json +1 -1
  101. package/plugin/package.json +1 -1
  102. package/release-manager/package.json +2 -2
  103. package/core/dist/runtime-v2/pain-gate/index.d.ts +0 -10
  104. package/core/dist/runtime-v2/pain-gate/index.d.ts.map +0 -1
  105. package/core/dist/runtime-v2/pain-gate/index.js +0 -9
  106. package/core/dist/runtime-v2/pain-gate/index.js.map +0 -1
  107. package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.d.ts +0 -123
  108. package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.d.ts.map +0 -1
  109. package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.js +0 -159
  110. package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.js.map +0 -1
  111. package/host-runtime/dist/pain-evidence-ingress.d.ts +0 -16
  112. package/host-runtime/dist/pain-evidence-ingress.js +0 -15
  113. package/plugin/dist/core/pain-diagnostic-gate.d.ts +0 -47
  114. package/plugin/dist/core/thinking-os-parser.d.ts +0 -33
  115. package/plugin/dist/core/workflow-funnel-loader.d.ts +0 -72
@@ -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' || typeof item.reason !== 'string')
82
+ if (!record(item) || typeof item.candidateId !== 'string' || typeof item.text !== 'string'
83
+ || typeof item.diagnosisStatus !== 'string')
9
84
  return null;
10
- items.push({ candidateId: item.candidateId, text: item.text, reason: item.reason });
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 { items };
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' || typeof value.sourcePainId !== '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
- return { candidateId: value.candidateId, candidateText: value.candidateText, sourcePainId: value.sourcePainId, evidence: value.evidence,
33
- candidateDigest: value.candidateDigest, currentRevision: value.currentRevision, currentBinding, eligibleTargets, resumeNotice: value.resumeNotice };
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
  }