@mmnto/totem 1.101.0 → 1.101.2

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 (43) hide show
  1. package/dist/chunkers/chunker-registry.d.ts.map +1 -1
  2. package/dist/chunkers/chunker-registry.js +5 -0
  3. package/dist/chunkers/chunker-registry.js.map +1 -1
  4. package/dist/chunkers/chunker-registry.test.d.ts +1 -1
  5. package/dist/chunkers/chunker-registry.test.js +6 -2
  6. package/dist/chunkers/chunker-registry.test.js.map +1 -1
  7. package/dist/chunkers/generic-chunker.d.ts +8 -0
  8. package/dist/chunkers/generic-chunker.d.ts.map +1 -0
  9. package/dist/chunkers/generic-chunker.js +82 -0
  10. package/dist/chunkers/generic-chunker.js.map +1 -0
  11. package/dist/chunkers/generic-chunker.test.d.ts +15 -0
  12. package/dist/chunkers/generic-chunker.test.d.ts.map +1 -0
  13. package/dist/chunkers/generic-chunker.test.js +129 -0
  14. package/dist/chunkers/generic-chunker.test.js.map +1 -0
  15. package/dist/config-schema.d.ts +1 -1
  16. package/dist/config-schema.d.ts.map +1 -1
  17. package/dist/config-schema.js +4 -0
  18. package/dist/config-schema.js.map +1 -1
  19. package/dist/regex-safety/apply-rules-bounded.d.ts.map +1 -1
  20. package/dist/regex-safety/apply-rules-bounded.js +37 -15
  21. package/dist/regex-safety/apply-rules-bounded.js.map +1 -1
  22. package/dist/rule-engine.d.ts +15 -13
  23. package/dist/rule-engine.d.ts.map +1 -1
  24. package/dist/rule-engine.js +320 -93
  25. package/dist/rule-engine.js.map +1 -1
  26. package/dist/rule-engine.test.js +319 -1
  27. package/dist/rule-engine.test.js.map +1 -1
  28. package/dist/spine/selection-rule.d.ts.map +1 -1
  29. package/dist/spine/selection-rule.js +3 -73
  30. package/dist/spine/selection-rule.js.map +1 -1
  31. package/dist/spine/windtunnel-firing.js +1 -1
  32. package/dist/spine/windtunnel-firing.js.map +1 -1
  33. package/dist/sys/git.js +1 -1
  34. package/dist/sys/git.js.map +1 -1
  35. package/dist/sys/glob.d.ts +10 -0
  36. package/dist/sys/glob.d.ts.map +1 -0
  37. package/dist/sys/glob.js +280 -0
  38. package/dist/sys/glob.js.map +1 -0
  39. package/dist/sys/glob.test.d.ts +2 -0
  40. package/dist/sys/glob.test.d.ts.map +1 -0
  41. package/dist/sys/glob.test.js +280 -0
  42. package/dist/sys/glob.test.js.map +1 -0
  43. package/package.json +1 -1
@@ -0,0 +1,280 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readFileSync } from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { describe, expect, it } from 'vitest';
6
+ import { CompiledRulesFileSchema } from '../compiler-schema.js';
7
+ import { fileMatchesGlobs, matchesGlob, matchesPathGlob } from './glob.js';
8
+ const DIVERGENCE_FIXTURES = [
9
+ {
10
+ axis: 'bare patterns match basenames at depth only in the rule profile',
11
+ filePath: 'nested/Dockerfile',
12
+ glob: 'Dockerfile',
13
+ ruleEngine: true,
14
+ pathClassifier: false,
15
+ },
16
+ {
17
+ axis: 'question marks remain literal in the rule profile',
18
+ filePath: 'src/a.ts',
19
+ glob: 'src/?.ts',
20
+ ruleEngine: false,
21
+ pathClassifier: true,
22
+ },
23
+ {
24
+ axis: 'brace groups remain literal in the rule profile',
25
+ filePath: 'src/a.ts',
26
+ glob: 'src/*.{ts,tsx}',
27
+ ruleEngine: false,
28
+ pathClassifier: true,
29
+ },
30
+ {
31
+ axis: 'glob-side backslashes normalize only in the classifier profile',
32
+ filePath: 'src/a.ts',
33
+ glob: 'src\\*.ts',
34
+ ruleEngine: false,
35
+ pathClassifier: true,
36
+ },
37
+ {
38
+ axis: 'general segment stars remain muted in the rule profile',
39
+ filePath: 'src/pkg/index.ts',
40
+ glob: 'src/*/index.ts',
41
+ ruleEngine: false,
42
+ pathClassifier: true,
43
+ },
44
+ {
45
+ axis: 'basename-length behavior stays frozen for *.ext-shaped patterns',
46
+ filePath: 'test.js',
47
+ glob: '*.test.js',
48
+ ruleEngine: false,
49
+ pathClassifier: false,
50
+ },
51
+ {
52
+ axis: 'matching remains case-sensitive on every platform',
53
+ filePath: 'SRC/a.ts',
54
+ glob: 'src/*.ts',
55
+ ruleEngine: false,
56
+ pathClassifier: false,
57
+ },
58
+ {
59
+ axis: 'trailing-slash patterns stay dead for normal file paths',
60
+ filePath: 'src/a.ts',
61
+ glob: 'src/**/*.ts/',
62
+ ruleEngine: false,
63
+ pathClassifier: false,
64
+ },
65
+ ];
66
+ const AGREEMENT_FIXTURES = [
67
+ {
68
+ axis: 'zero-segment **/ matches root files',
69
+ filePath: 'README.md',
70
+ glob: '**/*.md',
71
+ },
72
+ {
73
+ axis: 'recursive extensions match nested files',
74
+ filePath: 'packages/core/src/index.ts',
75
+ glob: '**/*.ts',
76
+ },
77
+ {
78
+ axis: 'directory-prefixed recursion stays repo-root anchored',
79
+ filePath: 'packages/core/src/index.ts',
80
+ glob: 'packages/core/**/*.ts',
81
+ },
82
+ {
83
+ axis: 'path-shaped literals match exactly',
84
+ filePath: 'src/a.ts',
85
+ glob: 'src/a.ts',
86
+ },
87
+ {
88
+ axis: 'path-side Windows separators normalize',
89
+ filePath: 'src\\a.ts',
90
+ glob: 'src/*.ts',
91
+ },
92
+ {
93
+ axis: '*.test.* matching stays basename-only',
94
+ filePath: 'a.test.ts',
95
+ glob: '*.test.*',
96
+ },
97
+ ];
98
+ describe('glob compatibility profiles', () => {
99
+ for (const fixture of DIVERGENCE_FIXTURES) {
100
+ it(fixture.axis, () => {
101
+ expect(matchesGlob(fixture.filePath, fixture.glob)).toBe(fixture.ruleEngine);
102
+ expect(matchesPathGlob(fixture.filePath, fixture.glob)).toBe(fixture.pathClassifier);
103
+ });
104
+ }
105
+ for (const fixture of AGREEMENT_FIXTURES) {
106
+ it(`agreement: ${fixture.axis}`, () => {
107
+ expect(matchesGlob(fixture.filePath, fixture.glob)).toBe(true);
108
+ expect(matchesPathGlob(fixture.filePath, fixture.glob)).toBe(true);
109
+ });
110
+ }
111
+ it('rejects suffix matching on path-shaped literals', () => {
112
+ expect(matchesGlob('packages/src/foo.ts', 'src/foo.ts')).toBe(false);
113
+ });
114
+ it('preserves the rule profile middle-globstar boundary behavior', () => {
115
+ expect(matchesGlob('packages/cli/commands/a.ts', 'packages/cli/**/commands/**/*.ts')).toBe(true);
116
+ expect(matchesGlob('packages/cli/nested/commands/a.ts', 'packages/cli/**/commands/**/*.ts')).toBe(false);
117
+ expect(matchesPathGlob('packages/cli/nested/commands/a.ts', 'packages/cli/**/commands/**/*.ts')).toBe(true);
118
+ });
119
+ it('preserves the rule profile empty recursive suffix behavior', () => {
120
+ expect(matchesGlob('prefix/nested/a.ts', 'prefix/**/')).toBe(true);
121
+ expect(matchesPathGlob('prefix/nested/a.ts', 'prefix/**/')).toBe(false);
122
+ });
123
+ it('preserves bare-basename matching across line terminators in rule paths', () => {
124
+ expect(matchesGlob('dir\n/Dockerfile', 'Dockerfile')).toBe(true);
125
+ expect(matchesGlob('dir\n/Dockerfile.dev', 'Dockerfile')).toBe(false);
126
+ expect(matchesPathGlob('dir\n/Dockerfile', 'Dockerfile')).toBe(false);
127
+ expect(matchesPathGlob('Dockerfile', 'Dockerfile')).toBe(true);
128
+ });
129
+ it('preserves rule globstar matching across line terminators without widening the classifier', () => {
130
+ expect(matchesGlob('dir/a\nb', 'dir/**')).toBe(true);
131
+ expect(matchesGlob('other/a\nb', 'dir/**')).toBe(false);
132
+ expect(matchesPathGlob('dir/a\nb', 'dir/**')).toBe(false);
133
+ expect(matchesPathGlob('dir/ab', 'dir/**')).toBe(true);
134
+ });
135
+ it('preserves leading *. suffix semantics across slash-bearing tails', () => {
136
+ expect(matchesGlob('nested/a.foo/bar', '*.foo/bar')).toBe(true);
137
+ expect(matchesGlob('a.foo/bar', '*.foo/bar')).toBe(true);
138
+ expect(matchesGlob('nested/a.foo/baz', '*.foo/bar')).toBe(false);
139
+ expect(matchesGlob('nested/a.foo/bar.ts', '*.foo/bar.*')).toBe(false);
140
+ expect(matchesGlob('nested/a.foo/.txt', '*.foo/.*')).toBe(false);
141
+ expect(matchesPathGlob('nested/a.foo/bar', '*.foo/bar')).toBe(false);
142
+ expect(matchesPathGlob('a.foo/bar', '*.foo/bar')).toBe(true);
143
+ });
144
+ it('keeps slash-bearing directory-extension remainders dead in the rule profile', () => {
145
+ expect(matchesGlob('dir/a.ts/foo', 'dir/*.ts/foo')).toBe(false);
146
+ expect(matchesGlob('dir/a.ts', 'dir/*.ts')).toBe(true);
147
+ expect(matchesGlob('dir/nested/a.ts', 'dir/*.ts')).toBe(false);
148
+ expect(matchesGlob('dir/a.ts/foo', 'dir/a.ts/foo')).toBe(true);
149
+ expect(matchesPathGlob('dir/a.ts/foo', 'dir/*.ts/foo')).toBe(true);
150
+ });
151
+ it('keeps rule matching stable after more unique patterns than the bounded cache retains', () => {
152
+ const patternCount = 600;
153
+ for (let index = 0; index < patternCount; index++) {
154
+ expect(matchesGlob(`nested/file-${index}.txt`, `file-${index}.txt`)).toBe(true);
155
+ }
156
+ expect(matchesGlob('nested/file-0.txt', 'file-0.txt')).toBe(true);
157
+ expect(matchesGlob('nested/file-599.txt', 'file-599.txt')).toBe(true);
158
+ });
159
+ });
160
+ describe('fileMatchesGlobs', () => {
161
+ it('applies positive and negative globs with negative-wins precedence', () => {
162
+ expect(fileMatchesGlobs('src/a.ts', ['**/*.ts', '!**/*.test.*'])).toBe(true);
163
+ expect(fileMatchesGlobs('src/a.test.ts', ['!**/*.test.*', '**/*.ts'])).toBe(false);
164
+ expect(fileMatchesGlobs('src/a.test.ts', ['**/*.ts', '!**/*.test.*'])).toBe(false);
165
+ });
166
+ it('defaults to included when there are no positive globs', () => {
167
+ expect(fileMatchesGlobs('src/a.ts', [])).toBe(true);
168
+ expect(fileMatchesGlobs('src/a.ts', ['!**/*.test.*'])).toBe(true);
169
+ expect(fileMatchesGlobs('src/a.test.ts', ['!**/*.test.*'])).toBe(false);
170
+ });
171
+ });
172
+ function expandBraces(pattern) {
173
+ const start = pattern.indexOf('{');
174
+ const end = start === -1 ? -1 : pattern.indexOf('}', start + 1);
175
+ if (start === -1 || end === -1)
176
+ return [pattern];
177
+ const prefix = pattern.slice(0, start);
178
+ const suffix = pattern.slice(end + 1);
179
+ return pattern
180
+ .slice(start + 1, end)
181
+ .split(',')
182
+ .flatMap((alternative) => expandBraces(`${prefix}${alternative}${suffix}`));
183
+ }
184
+ function renderGlob(pattern, nestedGlobstar) {
185
+ const normalized = pattern.replace(/\\/g, '/');
186
+ let rendered = '';
187
+ let index = 0;
188
+ while (index < normalized.length) {
189
+ if (normalized.slice(index, index + 3) === '**/') {
190
+ rendered += nestedGlobstar ? 'nested/' : '';
191
+ index += 3;
192
+ }
193
+ else if (normalized.slice(index, index + 2) === '**') {
194
+ rendered += 'nested/file';
195
+ index += 2;
196
+ }
197
+ else if (normalized[index] === '*') {
198
+ rendered += 'sample';
199
+ index += 1;
200
+ }
201
+ else if (normalized[index] === '?') {
202
+ rendered += 'q';
203
+ index += 1;
204
+ }
205
+ else {
206
+ rendered += normalized[index];
207
+ index += 1;
208
+ }
209
+ }
210
+ return rendered;
211
+ }
212
+ function renderPathSet(unsignedGlobs) {
213
+ const paths = new Set([
214
+ 'Dockerfile',
215
+ 'nested/Dockerfile',
216
+ 'README.md',
217
+ 'package.json',
218
+ 'test.js',
219
+ 'src/a.ts',
220
+ 'src/a.tsx',
221
+ 'src/a.js',
222
+ 'src/a.test.ts',
223
+ 'src/.test.fixtures/a.ts',
224
+ 'src/pkg/index.ts',
225
+ 'SRC/a.ts',
226
+ 'dir/file.ts',
227
+ 'nested/dir/file.ts',
228
+ 'packages/core/src/index.ts',
229
+ 'packages/cli/src/install-hooks.test.ts',
230
+ 'packages/core/README.md',
231
+ 'target/file.rs',
232
+ ]);
233
+ for (const glob of unsignedGlobs) {
234
+ for (const expanded of expandBraces(glob)) {
235
+ for (const nestedGlobstar of [false, true]) {
236
+ const rendered = renderGlob(expanded, nestedGlobstar);
237
+ if (rendered.length === 0)
238
+ continue;
239
+ if (rendered.endsWith('/')) {
240
+ paths.add(`${rendered}file.ts`);
241
+ }
242
+ else {
243
+ paths.add(rendered);
244
+ if (!rendered.includes('/'))
245
+ paths.add(`nested/${rendered}`);
246
+ }
247
+ }
248
+ }
249
+ }
250
+ for (const rendered of [...paths]) {
251
+ if (rendered.includes('/'))
252
+ paths.add(rendered.replace(/\//g, '\\'));
253
+ }
254
+ return [...paths].sort();
255
+ }
256
+ describe('frozen compiled-rule glob corpus', () => {
257
+ it('pins all 255 signed globs, including dead negatives, against rendered paths', () => {
258
+ const testDir = path.dirname(fileURLToPath(import.meta.url));
259
+ const corpusPath = path.resolve(testDir, '../../../../.totem/compiled-rules.json');
260
+ const corpus = CompiledRulesFileSchema.parse(JSON.parse(readFileSync(corpusPath, 'utf8')));
261
+ const signedGlobs = [
262
+ ...new Set(corpus.rules.flatMap((rule) => (rule.fileGlobs ?? []).filter((glob) => typeof glob === 'string'))),
263
+ ].sort();
264
+ const unsignedGlobs = [...new Set(signedGlobs.map((glob) => glob.replace(/^!/, '')))];
265
+ const renderedPaths = renderPathSet(unsignedGlobs);
266
+ const rows = signedGlobs.map((signedGlob) => {
267
+ const glob = signedGlob.replace(/^!/, '');
268
+ const matches = renderedPaths.flatMap((filePath, index) => matchesGlob(filePath, glob) ? [index] : []);
269
+ return { signedGlob, matches };
270
+ });
271
+ const digest = createHash('sha256')
272
+ .update(JSON.stringify({ renderedPaths, rows }))
273
+ .digest('hex');
274
+ expect(signedGlobs).toHaveLength(255);
275
+ expect(renderedPaths).toHaveLength(815);
276
+ expect(rows.filter((row) => row.matches.length === 0)).toHaveLength(39);
277
+ expect(digest).toBe('896b5817271daa1c62a55a508baa1cb091e9643b3421a7452c394e7bb7cb1367');
278
+ });
279
+ });
280
+ //# sourceMappingURL=glob.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.test.js","sourceRoot":"","sources":["../../src/sys/glob.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmnto/totem",
3
- "version": "1.101.0",
3
+ "version": "1.101.2",
4
4
  "description": "Core engine for Totem, the local-first toolkit that keeps AI-agent work queryable, enforceable, and derivable as plain files in your codebase",
5
5
  "type": "module",
6
6
  "engines": {