@principles/core 1.79.0 → 1.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/runtime-v2/__tests__/architecture-regression.test.js +9 -0
  2. package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  3. package/dist/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.d.ts +2 -0
  4. package/dist/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.d.ts.map +1 -0
  5. package/dist/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.js +343 -0
  6. package/dist/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.js.map +1 -0
  7. package/dist/runtime-v2/activation/index.d.ts +2 -0
  8. package/dist/runtime-v2/activation/index.d.ts.map +1 -1
  9. package/dist/runtime-v2/activation/index.js +1 -0
  10. package/dist/runtime-v2/activation/index.js.map +1 -1
  11. package/dist/runtime-v2/activation/prompt-activation-reader-contract.d.ts +34 -0
  12. package/dist/runtime-v2/activation/prompt-activation-reader-contract.d.ts.map +1 -0
  13. package/dist/runtime-v2/activation/prompt-activation-reader-contract.js +109 -0
  14. package/dist/runtime-v2/activation/prompt-activation-reader-contract.js.map +1 -0
  15. package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +2 -0
  16. package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  17. package/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  18. package/dist/runtime-v2/feature-flags/feature-flag-contract.js +1 -0
  19. package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  20. package/dist/runtime-v2/feature-flags/plugin-surface-registry.d.ts.map +1 -1
  21. package/dist/runtime-v2/feature-flags/plugin-surface-registry.js +16 -0
  22. package/dist/runtime-v2/feature-flags/plugin-surface-registry.js.map +1 -1
  23. package/dist/runtime-v2/index.d.ts +2 -1
  24. package/dist/runtime-v2/index.d.ts.map +1 -1
  25. package/dist/runtime-v2/index.js +1 -1
  26. package/dist/runtime-v2/index.js.map +1 -1
  27. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prompt-activation-reader-contract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-activation-reader-contract.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,343 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { isRecord, filterPromptActivations, resolvePrincipleFromArtifact, trimToBudget, renderPrinciplesToDirectives, RUNTIME_V2_PRINCIPLE_BUDGET, } from '../prompt-activation-reader-contract.js';
3
+ function makeActivation(overrides = {}) {
4
+ return {
5
+ activationId: 'act-1',
6
+ idempotencyKey: 'art-1::prompt',
7
+ artifactId: 'art-1',
8
+ channel: 'prompt',
9
+ action: 'prompt_activate',
10
+ targetRef: 'prependSystemContext',
11
+ activatedAt: '2026-01-01T00:00:00Z',
12
+ ...overrides,
13
+ };
14
+ }
15
+ function makeArtifactRow(overrides = {}) {
16
+ return {
17
+ artifact_id: 'art-1',
18
+ artifact_kind: 'principle',
19
+ content_json: JSON.stringify({ principleId: 'P-001', text: 'Always use typeof checks' }),
20
+ validation_status: 'validated',
21
+ ...overrides,
22
+ };
23
+ }
24
+ describe('prompt-activation-reader-contract', () => {
25
+ describe('isRecord', () => {
26
+ it('returns true for plain objects', () => {
27
+ expect(isRecord({})).toBe(true);
28
+ expect(isRecord({ a: 1 })).toBe(true);
29
+ });
30
+ it('returns false for null', () => {
31
+ expect(isRecord(null)).toBe(false);
32
+ });
33
+ it('returns false for arrays', () => {
34
+ expect(isRecord([])).toBe(false);
35
+ expect(isRecord([1, 2])).toBe(false);
36
+ });
37
+ it('returns false for primitives', () => {
38
+ expect(isRecord('string')).toBe(false);
39
+ expect(isRecord(42)).toBe(false);
40
+ expect(isRecord(true)).toBe(false);
41
+ expect(isRecord(undefined)).toBe(false);
42
+ });
43
+ });
44
+ describe('filterPromptActivations', () => {
45
+ it('keeps only prompt/prompt_activate activations', () => {
46
+ const activations = [
47
+ makeActivation({ channel: 'prompt', action: 'prompt_activate' }),
48
+ makeActivation({ channel: 'code_tool_hook', action: 'activate', activationId: 'act-2', artifactId: 'art-2' }),
49
+ makeActivation({ channel: 'prompt', action: 'deactivate', activationId: 'act-3', artifactId: 'art-3' }),
50
+ makeActivation({ channel: 'defer_archive', action: 'prompt_activate', activationId: 'act-4', artifactId: 'art-4' }),
51
+ ];
52
+ const result = filterPromptActivations(activations);
53
+ expect(result).toHaveLength(1);
54
+ expect(result[0]?.activationId).toBe('act-1');
55
+ });
56
+ it('returns empty for no matching activations', () => {
57
+ const activations = [
58
+ makeActivation({ channel: 'code_tool_hook', action: 'activate' }),
59
+ ];
60
+ expect(filterPromptActivations(activations)).toHaveLength(0);
61
+ });
62
+ it('returns empty for empty input', () => {
63
+ expect(filterPromptActivations([])).toHaveLength(0);
64
+ });
65
+ });
66
+ describe('resolvePrincipleFromArtifact', () => {
67
+ it('resolves a valid artifact row with principleId and text', () => {
68
+ const activation = makeActivation();
69
+ const artifact = makeArtifactRow();
70
+ const result = resolvePrincipleFromArtifact(artifact, activation);
71
+ expect(result.ok).toBe(true);
72
+ if (result.ok) {
73
+ expect(result.principle.principleId).toBe('P-001');
74
+ expect(result.principle.text).toBe('Always use typeof checks');
75
+ expect(result.principle.artifactId).toBe('art-1');
76
+ expect(result.principle.activationId).toBe('act-1');
77
+ }
78
+ });
79
+ it('falls back to principleDraft.title and principleDraft.statement', () => {
80
+ const activation = makeActivation();
81
+ const artifact = makeArtifactRow({
82
+ content_json: JSON.stringify({
83
+ principleDraft: { title: 'D-001', statement: 'Draft statement' },
84
+ }),
85
+ });
86
+ const result = resolvePrincipleFromArtifact(artifact, activation);
87
+ expect(result.ok).toBe(true);
88
+ if (result.ok) {
89
+ expect(result.principle.principleId).toBe('D-001');
90
+ expect(result.principle.text).toBe('Draft statement');
91
+ }
92
+ });
93
+ it('prefers principleId/text over principleDraft', () => {
94
+ const activation = makeActivation();
95
+ const artifact = makeArtifactRow({
96
+ content_json: JSON.stringify({
97
+ principleId: 'P-001',
98
+ text: 'Primary text',
99
+ principleDraft: { title: 'D-001', statement: 'Draft text' },
100
+ }),
101
+ });
102
+ const result = resolvePrincipleFromArtifact(artifact, activation);
103
+ expect(result.ok).toBe(true);
104
+ if (result.ok) {
105
+ expect(result.principle.principleId).toBe('P-001');
106
+ expect(result.principle.text).toBe('Primary text');
107
+ }
108
+ });
109
+ it('rejects non-record artifact row', () => {
110
+ const activation = makeActivation();
111
+ const result = resolvePrincipleFromArtifact(null, activation);
112
+ expect(result.ok).toBe(false);
113
+ if (!result.ok) {
114
+ expect(result.warning).toContain('artifact_query_unexpected');
115
+ }
116
+ });
117
+ it('rejects array artifact row', () => {
118
+ const activation = makeActivation();
119
+ const result = resolvePrincipleFromArtifact([1, 2], activation);
120
+ expect(result.ok).toBe(false);
121
+ if (!result.ok) {
122
+ expect(result.warning).toContain('artifact_query_unexpected');
123
+ }
124
+ });
125
+ it('rejects artifact with missing artifact_id', () => {
126
+ const activation = makeActivation();
127
+ const artifact = makeArtifactRow({ artifact_id: '' });
128
+ const result = resolvePrincipleFromArtifact(artifact, activation);
129
+ expect(result.ok).toBe(false);
130
+ if (!result.ok) {
131
+ expect(result.warning).toContain('artifact_not_found');
132
+ }
133
+ });
134
+ it('rejects artifact with non-principle kind', () => {
135
+ const activation = makeActivation();
136
+ const artifact = makeArtifactRow({ artifact_kind: 'trace' });
137
+ const result = resolvePrincipleFromArtifact(artifact, activation);
138
+ expect(result.ok).toBe(false);
139
+ if (!result.ok) {
140
+ expect(result.warning).toContain('artifact_not_principle');
141
+ }
142
+ });
143
+ it('rejects artifact that is not validated', () => {
144
+ const activation = makeActivation();
145
+ const artifact = makeArtifactRow({ validation_status: 'pending' });
146
+ const result = resolvePrincipleFromArtifact(artifact, activation);
147
+ expect(result.ok).toBe(false);
148
+ if (!result.ok) {
149
+ expect(result.warning).toContain('artifact_not_validated');
150
+ }
151
+ });
152
+ it('rejects artifact with missing validation_status', () => {
153
+ const activation = makeActivation();
154
+ const artifact = makeArtifactRow();
155
+ delete artifact.validation_status;
156
+ const result = resolvePrincipleFromArtifact(artifact, activation);
157
+ expect(result.ok).toBe(false);
158
+ if (!result.ok) {
159
+ expect(result.warning).toContain('artifact_not_validated');
160
+ }
161
+ });
162
+ it('rejects artifact with missing content_json', () => {
163
+ const activation = makeActivation();
164
+ const artifact = makeArtifactRow();
165
+ delete artifact.content_json;
166
+ const result = resolvePrincipleFromArtifact(artifact, activation);
167
+ expect(result.ok).toBe(false);
168
+ if (!result.ok) {
169
+ expect(result.warning).toContain('artifact_missing_content_json');
170
+ }
171
+ });
172
+ it('rejects artifact with invalid JSON in content_json', () => {
173
+ const activation = makeActivation();
174
+ const artifact = makeArtifactRow({ content_json: '{invalid json' });
175
+ const result = resolvePrincipleFromArtifact(artifact, activation);
176
+ expect(result.ok).toBe(false);
177
+ if (!result.ok) {
178
+ expect(result.warning).toContain('artifact_content_json_parse_error');
179
+ }
180
+ });
181
+ it('rejects artifact where content_json parses to non-object', () => {
182
+ const activation = makeActivation();
183
+ const artifact = makeArtifactRow({ content_json: '"a string"' });
184
+ const result = resolvePrincipleFromArtifact(artifact, activation);
185
+ expect(result.ok).toBe(false);
186
+ if (!result.ok) {
187
+ expect(result.warning).toContain('artifact_content_malformed');
188
+ }
189
+ });
190
+ it('rejects artifact with missing principleId and no draft fallback', () => {
191
+ const activation = makeActivation();
192
+ const artifact = makeArtifactRow({
193
+ content_json: JSON.stringify({ text: 'Some text' }),
194
+ });
195
+ const result = resolvePrincipleFromArtifact(artifact, activation);
196
+ expect(result.ok).toBe(false);
197
+ if (!result.ok) {
198
+ expect(result.warning).toContain('artifact_missing_principle_id');
199
+ }
200
+ });
201
+ it('rejects artifact with missing text and no draft fallback', () => {
202
+ const activation = makeActivation();
203
+ const artifact = makeArtifactRow({
204
+ content_json: JSON.stringify({ principleId: 'P-001' }),
205
+ });
206
+ const result = resolvePrincipleFromArtifact(artifact, activation);
207
+ expect(result.ok).toBe(false);
208
+ if (!result.ok) {
209
+ expect(result.warning).toContain('artifact_missing_text');
210
+ }
211
+ });
212
+ it('rejects artifact with empty principleId and empty draft title', () => {
213
+ const activation = makeActivation();
214
+ const artifact = makeArtifactRow({
215
+ content_json: JSON.stringify({ principleId: '', text: 'Some text', principleDraft: { title: '', statement: 'Draft' } }),
216
+ });
217
+ const result = resolvePrincipleFromArtifact(artifact, activation);
218
+ expect(result.ok).toBe(false);
219
+ if (!result.ok) {
220
+ expect(result.warning).toContain('artifact_missing_principle_id');
221
+ }
222
+ });
223
+ it('handles artifact with prototype-polluted keys safely', () => {
224
+ const activation = makeActivation();
225
+ const artifact = Object.create(null);
226
+ artifact.__proto__ = { malicious: true };
227
+ artifact.artifact_id = 'art-1';
228
+ artifact.artifact_kind = 'principle';
229
+ artifact.content_json = JSON.stringify({ principleId: 'P-001', text: 'Safe' });
230
+ artifact.validation_status = 'validated';
231
+ const result = resolvePrincipleFromArtifact(artifact, activation);
232
+ expect(result.ok).toBe(true);
233
+ });
234
+ it('handles content_json with inherited properties safely', () => {
235
+ const activation = makeActivation();
236
+ const contentObj = Object.create({ toString: 'inherited' });
237
+ contentObj.principleId = 'P-001';
238
+ contentObj.text = 'Safe text';
239
+ const artifact = makeArtifactRow({
240
+ content_json: JSON.stringify(contentObj),
241
+ });
242
+ const result = resolvePrincipleFromArtifact(artifact, activation);
243
+ expect(result.ok).toBe(true);
244
+ if (result.ok) {
245
+ expect(result.principle.principleId).toBe('P-001');
246
+ expect(result.principle.text).toBe('Safe text');
247
+ }
248
+ });
249
+ it('includes nextAction in every warning', () => {
250
+ const activation = makeActivation();
251
+ const result = resolvePrincipleFromArtifact(null, activation);
252
+ expect(result.ok).toBe(false);
253
+ if (!result.ok) {
254
+ expect(result.warning).toContain('nextAction=');
255
+ }
256
+ });
257
+ });
258
+ describe('trimToBudget', () => {
259
+ it('includes all principles within budget', () => {
260
+ const principles = [
261
+ { principleId: 'P-001', text: 'Short', artifactId: 'a1', activationId: 'act1' },
262
+ ];
263
+ const { lines, injectedIds, truncated } = trimToBudget(principles, 2000);
264
+ expect(lines.length).toBeGreaterThan(1);
265
+ expect(injectedIds.has('P-001')).toBe(true);
266
+ expect(truncated).toBe(false);
267
+ });
268
+ it('truncates when budget is exceeded', () => {
269
+ const principles = Array.from({ length: 100 }, (_, i) => ({
270
+ principleId: `P-${String(i).padStart(3, '0')}`,
271
+ text: 'A'.repeat(100),
272
+ artifactId: `a${i}`,
273
+ activationId: `act${i}`,
274
+ }));
275
+ const { lines: _lines, injectedIds, truncated } = trimToBudget(principles, 500);
276
+ expect(truncated).toBe(true);
277
+ expect(injectedIds.size).toBeLessThan(100);
278
+ });
279
+ it('returns empty injectedIds for zero principles', () => {
280
+ const { lines, injectedIds, truncated } = trimToBudget([], 2000);
281
+ expect(injectedIds.size).toBe(0);
282
+ expect(truncated).toBe(false);
283
+ expect(lines).toHaveLength(1);
284
+ });
285
+ it('uses custom escape function', () => {
286
+ const principles = [
287
+ { principleId: 'P<001>', text: 'A&B', artifactId: 'a1', activationId: 'act1' },
288
+ ];
289
+ const escapeXml = (s) => s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
290
+ const { lines } = trimToBudget(principles, 2000, escapeXml);
291
+ expect(lines[1]).toContain('P&lt;001&gt;');
292
+ expect(lines[1]).toContain('A&amp;B');
293
+ });
294
+ });
295
+ describe('renderPrinciplesToDirectives', () => {
296
+ it('renders directive XML for injected principles', () => {
297
+ const principles = [
298
+ { principleId: 'P-001', text: 'Always use typeof', artifactId: 'a1', activationId: 'act1' },
299
+ { principleId: 'P-002', text: 'Never use as', artifactId: 'a2', activationId: 'act2' },
300
+ ];
301
+ const injectedIds = new Set(['P-001', 'P-002']);
302
+ const result = renderPrinciplesToDirectives(principles, injectedIds);
303
+ expect(result).toContain('<directive id="P-001"');
304
+ expect(result).toContain('MANDATORY: Always use typeof');
305
+ expect(result).toContain('<directive id="P-002"');
306
+ expect(result).toContain('MANDATORY: Never use as');
307
+ expect(result).toContain('OWNER-APPROVED BEHAVIOR DIRECTIVES');
308
+ });
309
+ it('returns empty string when no principles injected', () => {
310
+ const principles = [
311
+ { principleId: 'P-001', text: 'Always use typeof', artifactId: 'a1', activationId: 'act1' },
312
+ ];
313
+ const result = renderPrinciplesToDirectives(principles, new Set());
314
+ expect(result).toBe('');
315
+ });
316
+ it('skips principles not in injectedIds', () => {
317
+ const principles = [
318
+ { principleId: 'P-001', text: 'Included', artifactId: 'a1', activationId: 'act1' },
319
+ { principleId: 'P-002', text: 'Excluded', artifactId: 'a2', activationId: 'act2' },
320
+ ];
321
+ const injectedIds = new Set(['P-001']);
322
+ const result = renderPrinciplesToDirectives(principles, injectedIds);
323
+ expect(result).toContain('P-001');
324
+ expect(result).not.toContain('P-002');
325
+ });
326
+ it('uses custom escape function', () => {
327
+ const principles = [
328
+ { principleId: 'P<001>', text: 'A&B', artifactId: 'a1', activationId: 'act1' },
329
+ ];
330
+ const injectedIds = new Set(['P<001>']);
331
+ const escapeXml = (s) => s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
332
+ const result = renderPrinciplesToDirectives(principles, injectedIds, escapeXml);
333
+ expect(result).toContain('P&lt;001&gt;');
334
+ expect(result).toContain('A&amp;B');
335
+ });
336
+ });
337
+ describe('RUNTIME_V2_PRINCIPLE_BUDGET', () => {
338
+ it('is 2000', () => {
339
+ expect(RUNTIME_V2_PRINCIPLE_BUDGET).toBe(2000);
340
+ });
341
+ });
342
+ });
343
+ //# sourceMappingURL=prompt-activation-reader-contract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-activation-reader-contract.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.ts"],"names":[],"mappings":"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"}
@@ -10,4 +10,6 @@ export { MemoryApprovalQueueStore } from './memory-approval-store.js';
10
10
  export { SqliteApprovalQueueStore } from './sqlite-approval-store.js';
11
11
  export { RuleHostWriter } from './writers/rule-host-writer.js';
12
12
  export type { RuleHostWriterConfig } from './writers/rule-host-writer.js';
13
+ export { RUNTIME_V2_PRINCIPLE_BUDGET, isRecord as isArtifactRecord, filterPromptActivations, resolvePrincipleFromArtifact, trimToBudget, renderPrinciplesToDirectives, } from './prompt-activation-reader-contract.js';
14
+ export type { ActivatedPrinciple, PromptActivationReaderResult, } from './prompt-activation-reader-contract.js';
13
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,0BAA0B,EAC1B,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,mCAAmC,EACnC,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,0BAA0B,EAC1B,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,mCAAmC,EACnC,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,OAAO,EACL,2BAA2B,EAC3B,QAAQ,IAAI,gBAAgB,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,YAAY,EACZ,4BAA4B,GAC7B,MAAM,wCAAwC,CAAC;AAEhD,YAAY,EACV,kBAAkB,EAClB,4BAA4B,GAC7B,MAAM,wCAAwC,CAAC"}
@@ -7,4 +7,5 @@ export { ApprovalQueue, decideAutoPromotion } from './approval-queue.js';
7
7
  export { MemoryApprovalQueueStore } from './memory-approval-store.js';
8
8
  export { SqliteApprovalQueueStore } from './sqlite-approval-store.js';
9
9
  export { RuleHostWriter } from './writers/rule-host-writer.js';
10
+ export { RUNTIME_V2_PRINCIPLE_BUDGET, isRecord as isArtifactRecord, filterPromptActivations, resolvePrincipleFromArtifact, trimToBudget, renderPrinciplesToDirectives, } from './prompt-activation-reader-contract.js';
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/index.ts"],"names":[],"mappings":"AA8BA,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,mCAAmC,EACnC,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/index.ts"],"names":[],"mappings":"AA8BA,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,mCAAmC,EACnC,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,OAAO,EACL,2BAA2B,EAC3B,QAAQ,IAAI,gBAAgB,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,YAAY,EACZ,4BAA4B,GAC7B,MAAM,wCAAwC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { ActivationStatusRecord } from './activation-types.js';
2
+ export declare const RUNTIME_V2_PRINCIPLE_BUDGET = 2000;
3
+ export interface ActivatedPrinciple {
4
+ principleId: string;
5
+ text: string;
6
+ artifactId: string;
7
+ activationId: string;
8
+ }
9
+ export interface PromptActivationReaderResult {
10
+ principles: ActivatedPrinciple[];
11
+ warnings: string[];
12
+ source: 'runtime_v2';
13
+ }
14
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
15
+ export declare function filterPromptActivations(activations: ActivationStatusRecord[]): ActivationStatusRecord[];
16
+ export declare function resolvePrincipleFromArtifact(artifactRow: unknown, activation: ActivationStatusRecord): {
17
+ ok: true;
18
+ principle: ActivatedPrinciple;
19
+ } | {
20
+ ok: false;
21
+ warning: string;
22
+ };
23
+ export declare function trimToBudget(principles: ActivatedPrinciple[], budget: number, escapeFn?: (s: string) => string): {
24
+ lines: string[];
25
+ injectedIds: Set<string>;
26
+ truncated: boolean;
27
+ };
28
+ export declare function renderPrinciplesToDirectives(principles: {
29
+ principleId: string;
30
+ text: string;
31
+ artifactId: string;
32
+ activationId: string;
33
+ }[], injectedIds: Set<string>, escapeFn?: (s: string) => string): string;
34
+ //# sourceMappingURL=prompt-activation-reader-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-activation-reader-contract.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/prompt-activation-reader-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAUD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,sBAAsB,EAAE,GACpC,sBAAsB,EAAE,CAI1B;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,OAAO,EACpB,UAAU,EAAE,sBAAsB,GACjC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,kBAAkB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA8D9E;AAED,wBAAgB,YAAY,CAC1B,UAAU,EAAE,kBAAkB,EAAE,EAChC,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAiB,GACzC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAsBnE;AAED,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EAAE,EAC7F,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,QAAQ,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAiB,GACzC,MAAM,CAqBR"}
@@ -0,0 +1,109 @@
1
+ export const RUNTIME_V2_PRINCIPLE_BUDGET = 2000;
2
+ export function isRecord(value) {
3
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
4
+ }
5
+ function safeJsonParse(input) {
6
+ try {
7
+ return JSON.parse(input);
8
+ }
9
+ catch {
10
+ return null;
11
+ }
12
+ }
13
+ export function filterPromptActivations(activations) {
14
+ return activations.filter((a) => a.channel === 'prompt' && a.action === 'prompt_activate');
15
+ }
16
+ export function resolvePrincipleFromArtifact(artifactRow, activation) {
17
+ if (!isRecord(artifactRow)) {
18
+ return { ok: false, warning: `artifact_query_unexpected: artifactId=${activation.artifactId}; nextAction=check_pi_artifacts_table` };
19
+ }
20
+ const artifact_id = Object.hasOwn(artifactRow, 'artifact_id') && typeof artifactRow.artifact_id === 'string' && artifactRow.artifact_id.length > 0 ? artifactRow.artifact_id : null;
21
+ const artifact_kind = Object.hasOwn(artifactRow, 'artifact_kind') && typeof artifactRow.artifact_kind === 'string' ? artifactRow.artifact_kind : null;
22
+ const raw_content_json = Object.hasOwn(artifactRow, 'content_json') && typeof artifactRow.content_json === 'string' ? artifactRow.content_json : null;
23
+ const validation_status = Object.hasOwn(artifactRow, 'validation_status') && typeof artifactRow.validation_status === 'string' ? artifactRow.validation_status : null;
24
+ if (!artifact_id) {
25
+ return { ok: false, warning: `artifact_not_found: artifactId=${activation.artifactId} activationId=${activation.activationId}; nextAction=verify_artifact_exists_or_remove_stale_activation` };
26
+ }
27
+ if (artifact_kind !== 'principle') {
28
+ return { ok: false, warning: `artifact_not_principle: artifactId=${artifact_id} kind=${artifact_kind ?? 'missing'}; nextAction=skip_non_principle_activations` };
29
+ }
30
+ if (validation_status !== 'validated') {
31
+ return { ok: false, warning: `artifact_not_validated: artifactId=${artifact_id} status=${validation_status ?? 'missing'}; nextAction=skip_unvalidated_artifacts` };
32
+ }
33
+ if (raw_content_json === null) {
34
+ return { ok: false, warning: `artifact_missing_content_json: artifactId=${artifact_id}; nextAction=ensure_artifact_has_content_json` };
35
+ }
36
+ const parsed = safeJsonParse(raw_content_json);
37
+ if (parsed === null) {
38
+ return { ok: false, warning: `artifact_content_json_parse_error: artifactId=${activation.artifactId} reason=invalid_json; nextAction=fix_artifact_content_json` };
39
+ }
40
+ if (!isRecord(parsed)) {
41
+ return { ok: false, warning: `artifact_content_malformed: artifactId=${activation.artifactId} reason=parsed_to_non_object; nextAction=fix_artifact_content_json` };
42
+ }
43
+ const principleId = Object.hasOwn(parsed, 'principleId') && typeof parsed.principleId === 'string' ? parsed.principleId : undefined;
44
+ const text = Object.hasOwn(parsed, 'text') && typeof parsed.text === 'string' ? parsed.text : undefined;
45
+ const draftObj = Object.hasOwn(parsed, 'principleDraft') && isRecord(parsed.principleDraft) ? parsed.principleDraft : null;
46
+ const draftTitle = draftObj && Object.hasOwn(draftObj, 'title') && typeof draftObj.title === 'string' ? draftObj.title : undefined;
47
+ const draftStatement = draftObj && Object.hasOwn(draftObj, 'statement') && typeof draftObj.statement === 'string' ? draftObj.statement : undefined;
48
+ const resolvedPrincipleId = principleId && principleId.length > 0 ? principleId : draftTitle;
49
+ const resolvedText = text && text.length > 0 ? text : draftStatement;
50
+ if (!resolvedPrincipleId || resolvedPrincipleId.length === 0) {
51
+ return { ok: false, warning: `artifact_missing_principle_id: artifactId=${activation.artifactId}; nextAction=ensure_artifact_has_principleId_or_principleDraft_title` };
52
+ }
53
+ if (!resolvedText || resolvedText.length === 0) {
54
+ return { ok: false, warning: `artifact_missing_text: artifactId=${activation.artifactId} principleId=${resolvedPrincipleId}; nextAction=ensure_artifact_has_text_or_principleDraft_statement` };
55
+ }
56
+ return {
57
+ ok: true,
58
+ principle: {
59
+ principleId: resolvedPrincipleId,
60
+ text: resolvedText,
61
+ artifactId: activation.artifactId,
62
+ activationId: activation.activationId,
63
+ },
64
+ };
65
+ }
66
+ export function trimToBudget(principles, budget, escapeFn = (s) => s) {
67
+ const lines = [];
68
+ const injectedIds = new Set();
69
+ let remaining = budget;
70
+ let truncated = false;
71
+ const header = 'Runtime V2 activated principles (owner-approved):';
72
+ lines.push(header);
73
+ remaining -= header.length;
74
+ for (const p of principles) {
75
+ const entry = `- [${escapeFn(p.principleId)}] ${escapeFn(p.text)}`;
76
+ if (remaining < entry.length + 1) {
77
+ truncated = true;
78
+ break;
79
+ }
80
+ lines.push(entry);
81
+ remaining -= entry.length + 1;
82
+ injectedIds.add(p.principleId);
83
+ }
84
+ return { lines, injectedIds, truncated };
85
+ }
86
+ export function renderPrinciplesToDirectives(principles, injectedIds, escapeFn = (s) => s) {
87
+ if (injectedIds.size === 0)
88
+ return '';
89
+ const directiveLines = [];
90
+ directiveLines.push('');
91
+ directiveLines.push('## 【OWNER-APPROVED BEHAVIOR DIRECTIVES】');
92
+ directiveLines.push('');
93
+ directiveLines.push('Owner-approved behavior directives are active operating constraints learned from prior owner corrections.');
94
+ directiveLines.push('These directives are mandatory for this session unless they conflict with safety, security, or higher-priority system policy.');
95
+ directiveLines.push('For ambiguous coding or file-changing tasks, follow these directives before using mutating tools.');
96
+ directiveLines.push('');
97
+ for (const p of principles) {
98
+ if (!injectedIds.has(p.principleId))
99
+ continue;
100
+ directiveLines.push(`<directive id="${escapeFn(p.principleId)}" source="runtime_v2_activation">`);
101
+ directiveLines.push(`MANDATORY: ${escapeFn(p.text)}`);
102
+ directiveLines.push('Apply this as an active behavior constraint. Do not treat this as background context.');
103
+ directiveLines.push('</directive>');
104
+ directiveLines.push('');
105
+ }
106
+ directiveLines.push('Note: These directives do not override safety, security, or core system policy.');
107
+ return directiveLines.join('\n');
108
+ }
109
+ //# sourceMappingURL=prompt-activation-reader-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-activation-reader-contract.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/prompt-activation-reader-contract.ts"],"names":[],"mappings":"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"}
@@ -182,6 +182,8 @@ describe('computeEffectiveFlags', () => {
182
182
  // feedback_channel is a quiet flag that defaults on (MVP seed channel)
183
183
  if (flag.id === 'feedback_channel')
184
184
  continue;
185
+ if (flag.id === 'correction_observer')
186
+ continue;
185
187
  expect(flag.enabled, `quiet flag ${flag.id} should default off`).toBe(false);
186
188
  }
187
189
  });