@mossbear/eval-core 0.1.0-alpha.100

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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/dist/adapter.d.ts +31 -0
  4. package/dist/adapter.d.ts.map +1 -0
  5. package/dist/adapter.js +10 -0
  6. package/dist/adapter.js.map +1 -0
  7. package/dist/credential-patterns.d.ts +9 -0
  8. package/dist/credential-patterns.d.ts.map +1 -0
  9. package/dist/credential-patterns.js +9 -0
  10. package/dist/credential-patterns.js.map +1 -0
  11. package/dist/index.d.ts +12 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +11 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/redact-prose.d.ts +77 -0
  16. package/dist/redact-prose.d.ts.map +1 -0
  17. package/dist/redact-prose.js +339 -0
  18. package/dist/redact-prose.js.map +1 -0
  19. package/dist/redact-prose.test.d.ts +2 -0
  20. package/dist/redact-prose.test.d.ts.map +1 -0
  21. package/dist/redact-prose.test.js +429 -0
  22. package/dist/redact-prose.test.js.map +1 -0
  23. package/dist/redaction.d.ts +23 -0
  24. package/dist/redaction.d.ts.map +1 -0
  25. package/dist/redaction.js +23 -0
  26. package/dist/redaction.js.map +1 -0
  27. package/dist/sanitize-command.d.ts +21 -0
  28. package/dist/sanitize-command.d.ts.map +1 -0
  29. package/dist/sanitize-command.js +908 -0
  30. package/dist/sanitize-command.js.map +1 -0
  31. package/dist/sanitize-command.test.d.ts +2 -0
  32. package/dist/sanitize-command.test.d.ts.map +1 -0
  33. package/dist/sanitize-command.test.js +867 -0
  34. package/dist/sanitize-command.test.js.map +1 -0
  35. package/dist/steering-classification.d.ts +19 -0
  36. package/dist/steering-classification.d.ts.map +1 -0
  37. package/dist/steering-classification.js +55 -0
  38. package/dist/steering-classification.js.map +1 -0
  39. package/dist/strip-code-blocks.d.ts +68 -0
  40. package/dist/strip-code-blocks.d.ts.map +1 -0
  41. package/dist/strip-code-blocks.js +280 -0
  42. package/dist/strip-code-blocks.js.map +1 -0
  43. package/dist/strip-code-blocks.test.d.ts +2 -0
  44. package/dist/strip-code-blocks.test.d.ts.map +1 -0
  45. package/dist/strip-code-blocks.test.js +250 -0
  46. package/dist/strip-code-blocks.test.js.map +1 -0
  47. package/package.json +47 -0
@@ -0,0 +1,250 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { stripCodeBlocks } from './strip-code-blocks.js';
3
+ /**
4
+ * The property every case here is really asserting: no line that sat inside a
5
+ * code block appears in the output. Named once so the individual tests can
6
+ * state the user-visible outcome instead of restating it.
7
+ */
8
+ function leaks(result, secret) {
9
+ return result.includes(secret);
10
+ }
11
+ describe('stripCodeBlocks', () => {
12
+ it('keeps a fenced block off the wire and says what it was instead', () => {
13
+ const message = [
14
+ "I'll add the client:",
15
+ '```ts',
16
+ 'const client = new Client({',
17
+ " apiKey: 'sk-live-4eC39HqLyjWDarjtT1zdp7dc',",
18
+ '})',
19
+ '```',
20
+ 'That should do it.',
21
+ ].join('\n');
22
+ const { text, blocks, lines } = stripCodeBlocks(message);
23
+ expect(leaks(text, 'sk-live-4eC39HqLyjWDarjtT1zdp7dc')).toBe(false);
24
+ expect(leaks(text, 'new Client')).toBe(false);
25
+ expect(text).toBe(["I'll add the client:", '[code block: ts, 3 lines]', 'That should do it.'].join('\n'));
26
+ expect({ blocks, lines }).toEqual({ blocks: 1, lines: 3 });
27
+ });
28
+ it('keeps the prose either side of a block, which is the reason to sync at all', () => {
29
+ const { text } = stripCodeBlocks(['Because the cache key is wrong:', '```', 'x', '```', 'I am changing it.'].join('\n'));
30
+ expect(text).toContain('Because the cache key is wrong:');
31
+ expect(text).toContain('I am changing it.');
32
+ });
33
+ it('strips an indented block even where CommonMark would call it a paragraph', () => {
34
+ // No blank line before the indent, so CommonMark treats this as a lazy
35
+ // paragraph continuation rather than code. Following that rule here would
36
+ // put the key on the wire.
37
+ const { text, blocks } = stripCodeBlocks(['Here is the config:', ' AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG'].join('\n'));
38
+ expect(leaks(text, 'wJalrXUtnFEMI/K7MDENG')).toBe(false);
39
+ expect(blocks).toBe(1);
40
+ });
41
+ it('strips a tab-indented block', () => {
42
+ const { text } = stripCodeBlocks(['Config:', '', "\tpassword = 'hunter2'"].join('\n'));
43
+ expect(leaks(text, 'hunter2')).toBe(false);
44
+ });
45
+ it('treats an indented run split by a blank line as one block', () => {
46
+ const { text, blocks, lines } = stripCodeBlocks(['Setup:', '', ' a = 1', '', ' b = 2', '', 'Done.'].join('\n'));
47
+ expect(blocks).toBe(1);
48
+ expect(lines).toBe(3);
49
+ expect(text).toContain('Done.');
50
+ expect(leaks(text, 'a = 1')).toBe(false);
51
+ expect(leaks(text, 'b = 2')).toBe(false);
52
+ });
53
+ it('does not end a long-fenced block at a shorter fence inside it', () => {
54
+ const message = [
55
+ 'Example:',
56
+ '````md',
57
+ 'Write it like this:',
58
+ '```',
59
+ "token = 'ghp_16C7e42F292c6912E7710c838347Ae178B4a'", // oss-boundary-ignore — fake token shape
60
+ '```',
61
+ '````',
62
+ 'Clear?',
63
+ ].join('\n');
64
+ const { text, blocks } = stripCodeBlocks(message);
65
+ expect(leaks(text, 'ghp_16C7e42F292c6912E7710c838347Ae178B4a')).toBe(false); // oss-boundary-ignore — fake token shape
66
+ expect(blocks).toBe(1);
67
+ expect(text).toContain('Clear?');
68
+ });
69
+ it('discards the rest of the message when a fence is never closed', () => {
70
+ const { text } = stripCodeBlocks(['Starting:', '```py', 'SECRET = "s3cr3t"', 'more = "code"'].join('\n'));
71
+ expect(leaks(text, 's3cr3t')).toBe(false);
72
+ expect(leaks(text, 'more = "code"')).toBe(false);
73
+ expect(text).toBe(['Starting:', '[code block: py, 2 lines]'].join('\n'));
74
+ });
75
+ it('refuses to carry an info string out of the block it just removed', () => {
76
+ // The info string is author-controlled text on the fence line; copying it
77
+ // verbatim would reopen a free-text channel out of the stripped block.
78
+ const { text } = stripCodeBlocks(['```ts title="/Users/kier/.aws/credentials"', 'x', '```'].join('\n'));
79
+ expect(leaks(text, '.aws/credentials')).toBe(false);
80
+ expect(text).toBe('[code block: ts, 1 line]');
81
+ });
82
+ it('drops a language label that is not a plausible language', () => {
83
+ const { text } = stripCodeBlocks(['```<script>alert(1)</script>', 'x', '```'].join('\n'));
84
+ expect(text).toBe('[code block: 1 line]');
85
+ });
86
+ it('strips a fenced block nested in a blockquote', () => {
87
+ // The `>` defeats the fence pattern and the line is only two columns in, so
88
+ // without container handling this is copied out verbatim and the prose
89
+ // redactor becomes the only thing between the user's source and the wire —
90
+ // the exact arrangement the plan forbids. Quoting code back at a user is an
91
+ // ordinary thing for an assistant to do.
92
+ const { text, blocks } = stripCodeBlocks([
93
+ 'You wrote:',
94
+ '> ```ts',
95
+ '> const secret = "raw-user-code"',
96
+ '> ```',
97
+ 'and that is the bug.',
98
+ ].join('\n'));
99
+ expect(leaks(text, 'raw-user-code')).toBe(false);
100
+ expect(blocks).toBe(1);
101
+ expect(text).toContain('and that is the bug.');
102
+ });
103
+ it('strips an indented block nested in a blockquote', () => {
104
+ const { text } = stripCodeBlocks(['They said:', '>', '> API_KEY=sk-live-abc123def456'].join('\n'));
105
+ expect(leaks(text, 'sk-live-abc123def456')).toBe(false);
106
+ });
107
+ it('strips a fence nested in a doubly-quoted block', () => {
108
+ const { text } = stripCodeBlocks(['> > ```', '> > password = "hunter2"', '> > ```'].join('\n'));
109
+ expect(leaks(text, 'hunter2')).toBe(false);
110
+ });
111
+ it.each([
112
+ ['unordered list', '- ```ts', ' ', ' ```'],
113
+ ['ordered list', '1. ```ts', ' ', ' ```'],
114
+ ['nested list', '- - ```ts', ' ', ' ```'],
115
+ ['spaced nested quote', '> > ```ts', '> > ', '> > ```'],
116
+ ['mixed containers', '> - > ```ts', '> > ', '> > ```'],
117
+ ])('strips source in a %s fence', (_name, open, prefix, close) => {
118
+ const { text, blocks } = stripCodeBlocks([open, `${prefix}fixturePrivateSource()`, close, 'Explanation remains.'].join('\n'));
119
+ expect(text).not.toContain('fixturePrivateSource');
120
+ expect(text).toContain('Explanation remains.');
121
+ expect(blocks).toBe(1);
122
+ });
123
+ it('consumes an unterminated list fence', () => {
124
+ const { text } = stripCodeBlocks('- ```ts\n fixturePrivateSource()');
125
+ expect(text).not.toContain('fixturePrivateSource');
126
+ expect(text).toBe('[code block: ts, 1 line]');
127
+ });
128
+ it.each(['- ```', '> ```'])('does not close a plain fence at literal %s code', (literal) => {
129
+ const { text } = stripCodeBlocks(['```md', literal, 'fixturePrivateSource()', '```', 'Explanation remains.'].join('\n'));
130
+ expect(text).not.toContain('fixturePrivateSource');
131
+ expect(text).toContain('Explanation remains.');
132
+ });
133
+ it.each([
134
+ ['- ```ts', ' sourceInsideList()', '```'],
135
+ ['1. ```ts', ' sourceInsideList()', ' ```'],
136
+ ['- - ```ts', ' sourceInsideList()', ' ```'],
137
+ ['> - > ```ts', '> > sourceInsideList()', '> > ```'],
138
+ ])('keeps source after a dedented container fence off the wire: %s', (open, body, dedented) => {
139
+ const { text } = stripCodeBlocks([open, body, dedented, 'fixtureSourceAfterDedent()', '```'].join('\n'));
140
+ expect(text).not.toContain('sourceInsideList');
141
+ expect(text).not.toContain('fixtureSourceAfterDedent');
142
+ });
143
+ it.each([' ', ' ', ' ', '\t'])('keeps source after a partially dedented padded list fence private: %j', (padding) => {
144
+ const { text } = stripCodeBlocks([
145
+ `-${padding}\`\`\`ts`,
146
+ ' initialSource()',
147
+ ' ```',
148
+ 'fixtureSourceAfterDedent()',
149
+ '```',
150
+ ].join('\n'));
151
+ expect(text).not.toContain('fixtureSourceAfterDedent');
152
+ });
153
+ it.each([
154
+ ['- ```ts', ' ```'],
155
+ ['- ```ts', ' ```'],
156
+ ['- ```ts', ' ```'],
157
+ ['-\t```ts', '\t```'],
158
+ ['1. -\t```ts', '\t\t```'],
159
+ ])('preserves following prose after a properly closed padded list fence: %s', (open, close) => {
160
+ const { text } = stripCodeBlocks([
161
+ open,
162
+ `${close.slice(0, -3)}fixturePrivateSource()`,
163
+ close,
164
+ 'Explanation remains.',
165
+ ].join('\n'));
166
+ expect(text).not.toContain('fixturePrivateSource');
167
+ expect(text).toContain('Explanation remains.');
168
+ });
169
+ it('strips a raw HTML pre block, which CommonMark treats as code', () => {
170
+ const { text, blocks, lines } = stripCodeBlocks([
171
+ 'Here is the snippet:',
172
+ '<pre>',
173
+ 'const key = "sk-live-raw-html-pre"',
174
+ '</pre>',
175
+ 'That is all.',
176
+ ].join('\n'));
177
+ expect(leaks(text, 'sk-live-raw-html-pre')).toBe(false);
178
+ expect(text).toBe(['Here is the snippet:', '[code block: 3 lines]', 'That is all.'].join('\n'));
179
+ expect({ blocks, lines }).toEqual({ blocks: 1, lines: 3 });
180
+ });
181
+ it('strips a single-line pre block whose end tag sits on the start line', () => {
182
+ const { text, blocks } = stripCodeBlocks(['Config:', '<pre>password = "raw-html-single"</pre>', 'Done.'].join('\n'));
183
+ expect(leaks(text, 'raw-html-single')).toBe(false);
184
+ expect(text).toBe(['Config:', '[code block: 1 line]', 'Done.'].join('\n'));
185
+ expect(blocks).toBe(1);
186
+ });
187
+ it('strips a multi-line block-level code element', () => {
188
+ const { text, blocks } = stripCodeBlocks([
189
+ 'Run this:',
190
+ '<code>',
191
+ 'token = "raw-html-code"',
192
+ '',
193
+ 'more = "raw-html-code-after-blank"',
194
+ '</code>',
195
+ 'Then restart.',
196
+ ].join('\n'));
197
+ expect(leaks(text, 'raw-html-code')).toBe(false);
198
+ expect(leaks(text, 'raw-html-code-after-blank')).toBe(false);
199
+ expect(text).toContain('Then restart.');
200
+ expect(blocks).toBe(1);
201
+ });
202
+ it('strips a raw HTML pre block nested in a blockquote', () => {
203
+ const { text } = stripCodeBlocks([
204
+ 'They wrote:',
205
+ '> <pre>',
206
+ '> secret = "raw-html-quoted"',
207
+ '> </pre>',
208
+ 'Agreed.',
209
+ ].join('\n'));
210
+ expect(leaks(text, 'raw-html-quoted')).toBe(false);
211
+ expect(text).toContain('Agreed.');
212
+ });
213
+ it('does not read a longer tag name that starts with pre as a pre block', () => {
214
+ const message = ['Use the tag:', '<preview>x</preview>', 'Next.'].join('\n');
215
+ expect(stripCodeBlocks(message).text).toBe(message);
216
+ });
217
+ it('leaves inline code inside a sentence to prose', () => {
218
+ const message = 'Call <code>readPendingActions</code> before the cursor moves.';
219
+ expect(stripCodeBlocks(message).text).toBe(message);
220
+ });
221
+ it('consumes an unterminated pre block to the end, failing closed', () => {
222
+ const { text } = stripCodeBlocks(['Starting:', '<pre>', 'SECRET = "raw-html-unterminated"', 'more = "code"'].join('\n'));
223
+ expect(leaks(text, 'raw-html-unterminated')).toBe(false);
224
+ expect(leaks(text, 'more = "code"')).toBe(false);
225
+ expect(text).toBe(['Starting:', '[code block: 3 lines]'].join('\n'));
226
+ });
227
+ it('leaves quoted prose quoted', () => {
228
+ const quoted = ['> I think the cursor advances too early.', '> Agreed.'].join('\n');
229
+ expect(stripCodeBlocks(quoted).text).toBe(quoted);
230
+ });
231
+ it('leaves ordinary prose exactly as it was', () => {
232
+ const prose = [
233
+ 'I looked at the sync path and the cursor is advanced before the upload',
234
+ 'succeeds, so a failed batch is skipped forever.',
235
+ '',
236
+ 'Two options: move the write after the response, or record a high-water mark.',
237
+ ].join('\n');
238
+ const { text, blocks, lines } = stripCodeBlocks(prose);
239
+ expect(text).toBe(prose);
240
+ expect({ blocks, lines }).toEqual({ blocks: 0, lines: 0 });
241
+ });
242
+ it('leaves inline code alone — it is a span, not a block', () => {
243
+ const message = 'Call `readPendingActions` before `writeActionCursors`.';
244
+ expect(stripCodeBlocks(message).text).toBe(message);
245
+ });
246
+ it('handles an empty message', () => {
247
+ expect(stripCodeBlocks('')).toEqual({ text: '', blocks: 0, lines: 0 });
248
+ });
249
+ });
250
+ //# sourceMappingURL=strip-code-blocks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-code-blocks.test.js","sourceRoot":"","sources":["../src/strip-code-blocks.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@mossbear/eval-core",
3
+ "version": "0.1.0-alpha.100",
4
+ "private": false,
5
+ "description": "Portable pieces of Mossbear's evaluation path — command redaction, the LLM adapter seam, and guide normalization.",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "main": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "!dist/.tsbuildinfo",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "homepage": "https://mossbear.io",
23
+ "bugs": {
24
+ "url": "https://mossbear.io/docs/"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public",
28
+ "provenance": false
29
+ },
30
+ "scripts": {
31
+ "build": "tsc --project tsconfig.json",
32
+ "dev": "tsc --project tsconfig.json --watch",
33
+ "typecheck": "tsc --project tsconfig.json --noEmit",
34
+ "lint": "oxlint",
35
+ "lint:fix": "oxfmt && oxlint --fix",
36
+ "format": "oxfmt",
37
+ "format:check": "oxfmt --check",
38
+ "test": "vitest run"
39
+ },
40
+ "dependencies": {
41
+ "@mossbear/protocol": "0.1.0-alpha.100"
42
+ },
43
+ "devDependencies": {
44
+ "@types/node": "20.19.43",
45
+ "typescript": "5.9.3"
46
+ }
47
+ }