@productbrain/cli 0.1.0-beta.20 → 0.1.0-beta.26

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 (39) hide show
  1. package/dist/__tests__/adapters.test.d.ts +2 -0
  2. package/dist/__tests__/adapters.test.d.ts.map +1 -0
  3. package/dist/__tests__/adapters.test.js +417 -0
  4. package/dist/__tests__/adapters.test.js.map +1 -0
  5. package/dist/__tests__/batch-transformations.test.d.ts +2 -0
  6. package/dist/__tests__/batch-transformations.test.d.ts.map +1 -0
  7. package/dist/__tests__/batch-transformations.test.js +263 -0
  8. package/dist/__tests__/batch-transformations.test.js.map +1 -0
  9. package/dist/__tests__/surface-profiles.test.d.ts +2 -0
  10. package/dist/__tests__/surface-profiles.test.d.ts.map +1 -0
  11. package/dist/__tests__/surface-profiles.test.js +233 -0
  12. package/dist/__tests__/surface-profiles.test.js.map +1 -0
  13. package/dist/commands/capture.d.ts.map +1 -1
  14. package/dist/commands/capture.js +4 -0
  15. package/dist/commands/capture.js.map +1 -1
  16. package/dist/commands/handshake.d.ts.map +1 -1
  17. package/dist/commands/handshake.js +53 -7
  18. package/dist/commands/handshake.js.map +1 -1
  19. package/dist/formatters/capture.d.ts +18 -0
  20. package/dist/formatters/capture.d.ts.map +1 -1
  21. package/dist/formatters/capture.js +18 -0
  22. package/dist/formatters/capture.js.map +1 -1
  23. package/dist/generators/__tests__/surface-profiles.test.d.ts +2 -0
  24. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +1 -0
  25. package/dist/generators/__tests__/surface-profiles.test.js +89 -0
  26. package/dist/generators/__tests__/surface-profiles.test.js.map +1 -0
  27. package/dist/generators/adapters.d.ts +37 -4
  28. package/dist/generators/adapters.d.ts.map +1 -1
  29. package/dist/generators/adapters.js +147 -7
  30. package/dist/generators/adapters.js.map +1 -1
  31. package/dist/generators/portable-knowledge.d.ts +23 -5
  32. package/dist/generators/portable-knowledge.d.ts.map +1 -1
  33. package/dist/generators/portable-knowledge.js +54 -6
  34. package/dist/generators/portable-knowledge.js.map +1 -1
  35. package/dist/generators/surface-profiles.d.ts +49 -0
  36. package/dist/generators/surface-profiles.d.ts.map +1 -0
  37. package/dist/generators/surface-profiles.js +98 -0
  38. package/dist/generators/surface-profiles.js.map +1 -0
  39. package/package.json +1 -1
@@ -0,0 +1,263 @@
1
+ /**
2
+ * BET-270 S1: Batch transformation tests for surface-optimized skill projection.
3
+ * Tests applyBatchTransformations + generateCodexSkill batch mode + Claude/Cursor unchanged.
4
+ */
5
+ import { describe, expect, it } from 'vitest';
6
+ import { applyBatchTransformations, generateCodexSkill, generateCursorSkill, generateClaudeRule, generateClaudeSkillRouter, } from '../generators/portable-knowledge.js';
7
+ import { SURFACE_PROFILES } from '../generators/surface-profiles.js';
8
+ describe('applyBatchTransformations', () => {
9
+ it('strips sub-agent spawn patterns and replaces with inline step instruction', () => {
10
+ const body = `# My Skill
11
+
12
+ Do some work.
13
+ Spawn a sub-agent to handle the review.
14
+ Continue with the result.`;
15
+ const result = applyBatchTransformations(body);
16
+ expect(result).not.toContain('Spawn a sub-agent');
17
+ expect(result).toContain('Execute as inline steps within this session.');
18
+ expect(result).toContain('Do some work.');
19
+ expect(result).toContain('Continue with the result.');
20
+ });
21
+ it('strips SPAWN build sub-agent pattern (uppercase SPAWN)', () => {
22
+ const body = `# Heading
23
+
24
+ SPAWN build sub-agent with primer.
25
+ Other content.`;
26
+ const result = applyBatchTransformations(body);
27
+ expect(result).not.toContain('SPAWN build sub-agent');
28
+ expect(result).toContain('Execute as inline steps within this session.');
29
+ });
30
+ it('strips SPAWN review sub-agent pattern', () => {
31
+ const body = `# Heading
32
+
33
+ SPAWN review sub-agent for verification.
34
+ Done.`;
35
+ const result = applyBatchTransformations(body);
36
+ expect(result).not.toContain('SPAWN review sub-agent');
37
+ expect(result).toContain('Execute as inline steps within this session.');
38
+ });
39
+ it('strips "fresh conversation handoff" pattern', () => {
40
+ const body = `# Heading
41
+
42
+ Use fresh conversation handoff for next slice.
43
+ Continue.`;
44
+ const result = applyBatchTransformations(body);
45
+ expect(result).not.toContain('fresh conversation handoff');
46
+ expect(result).toContain('Execute as inline steps within this session.');
47
+ });
48
+ it('strips user confirmation gates — "Ask the user"', () => {
49
+ const body = `# Skill
50
+
51
+ Do work.
52
+ Ask the user before proceeding.
53
+ Continue.`;
54
+ const result = applyBatchTransformations(body);
55
+ expect(result).not.toContain('Ask the user');
56
+ expect(result).toContain('Proceed autonomously. Log decision rationale.');
57
+ expect(result).toContain('Do work.');
58
+ expect(result).toContain('Continue.');
59
+ });
60
+ it('strips user confirmation gates — "Wait for user input"', () => {
61
+ const body = `# Skill
62
+
63
+ Step one done.
64
+ Wait for user input before continuing.
65
+ Step two.`;
66
+ const result = applyBatchTransformations(body);
67
+ expect(result).not.toContain('Wait for user input');
68
+ expect(result).toContain('Proceed autonomously. Log decision rationale.');
69
+ });
70
+ it('strips user confirmation gates — "Present gate to user"', () => {
71
+ const body = `# Skill
72
+
73
+ Build the feature.
74
+ Present gate to user before merging.
75
+ Merge.`;
76
+ const result = applyBatchTransformations(body);
77
+ expect(result).not.toContain('Present gate to user');
78
+ expect(result).toContain('Proceed autonomously. Log decision rationale.');
79
+ });
80
+ it('strips user confirmation gates — "STOP and ask"', () => {
81
+ const body = `# Skill
82
+
83
+ Analyze problem.
84
+ STOP and ask the user whether to continue.
85
+ Then proceed.`;
86
+ const result = applyBatchTransformations(body);
87
+ expect(result).not.toContain('STOP and ask');
88
+ expect(result).toContain('Proceed autonomously. Log decision rationale.');
89
+ });
90
+ it('adds batch governance header after the first # heading', () => {
91
+ const body = `# My Skill
92
+
93
+ Some content here.`;
94
+ const result = applyBatchTransformations(body);
95
+ expect(result).toContain('> Batch execution mode: This skill runs autonomously without interactive gates. Decisions are logged, not prompted.');
96
+ // Header must appear right after the heading
97
+ const lines = result.split('\n');
98
+ const headingIdx = lines.findIndex((l) => l.startsWith('# My Skill'));
99
+ const batchHeaderIdx = lines.findIndex((l) => l.includes('Batch execution mode:'));
100
+ expect(headingIdx).toBeGreaterThanOrEqual(0);
101
+ expect(batchHeaderIdx).toBeGreaterThan(headingIdx);
102
+ expect(batchHeaderIdx - headingIdx).toBeLessThanOrEqual(3);
103
+ });
104
+ it('preserves non-interactive content unchanged', () => {
105
+ const body = `# Clean Skill
106
+
107
+ This skill has no interactive patterns.
108
+ It describes steps the agent should follow.
109
+ Use grep to find the file.
110
+ Run npm run build.`;
111
+ const result = applyBatchTransformations(body);
112
+ expect(result).toContain('This skill has no interactive patterns.');
113
+ expect(result).toContain('It describes steps the agent should follow.');
114
+ expect(result).toContain('Use grep to find the file.');
115
+ expect(result).toContain('Run npm run build.');
116
+ expect(result).toContain('Batch execution mode:');
117
+ });
118
+ it('preserves interactive patterns inside fenced code blocks', () => {
119
+ const body = `# Skill With Examples
120
+
121
+ Here is how it works in interactive mode:
122
+
123
+ \`\`\`
124
+ Spawn a sub-agent to handle the review.
125
+ Ask the user before proceeding.
126
+ Wait for user input.
127
+ \`\`\`
128
+
129
+ Normal prose outside the fence.
130
+ Spawn a sub-agent for the next step.`;
131
+ const result = applyBatchTransformations(body);
132
+ // Patterns inside the code fence must be preserved verbatim
133
+ expect(result).toContain('Spawn a sub-agent to handle the review.');
134
+ expect(result).toContain('Ask the user before proceeding.');
135
+ expect(result).toContain('Wait for user input.');
136
+ // Pattern outside the code fence must be transformed
137
+ expect(result).not.toContain('Spawn a sub-agent for the next step.');
138
+ expect(result).toContain('Execute as inline steps within this session.');
139
+ });
140
+ it('preserves patterns inside tilde-fenced code blocks', () => {
141
+ const body = `# Skill
142
+
143
+ ~~~bash
144
+ Ask the user for confirmation.
145
+ ~~~
146
+
147
+ Ask the user to approve.`;
148
+ const result = applyBatchTransformations(body);
149
+ // Inside fence: preserved
150
+ expect(result).toContain('Ask the user for confirmation.');
151
+ // Outside fence: transformed
152
+ expect(result).not.toContain('Ask the user to approve.');
153
+ expect(result).toContain('Proceed autonomously. Log decision rationale.');
154
+ });
155
+ it('does not transform every mention of "user" — only clear interactive gate patterns', () => {
156
+ const body = `# Skill
157
+
158
+ The user should be aware of this tradeoff.
159
+ User data must be validated before insert.`;
160
+ const result = applyBatchTransformations(body);
161
+ expect(result).toContain('The user should be aware of this tradeoff.');
162
+ expect(result).toContain('User data must be validated before insert.');
163
+ expect(result).not.toContain('Proceed autonomously. Log decision rationale.');
164
+ });
165
+ });
166
+ describe('generateCodexSkill — batch mode (BET-270 S1)', () => {
167
+ const baseSkill = {
168
+ name: 'orchestrate',
169
+ description: 'Orchestrate a bet slice.',
170
+ triggers: ['orchestrate'],
171
+ body: `# Orchestrate
172
+
173
+ Do planning.
174
+ Spawn a sub-agent to execute.
175
+ Ask the user to confirm the plan.
176
+ Finalize.`,
177
+ sourcePath: '/tmp/.productbrain/skills/orchestrate.md',
178
+ };
179
+ it('applies batch transformations when profile.executionModel is batch', () => {
180
+ const output = generateCodexSkill(baseSkill, SURFACE_PROFILES.codex);
181
+ expect(output).not.toContain('Spawn a sub-agent');
182
+ expect(output).not.toContain('Ask the user');
183
+ expect(output).toContain('Execute as inline steps within this session.');
184
+ expect(output).toContain('Proceed autonomously. Log decision rationale.');
185
+ expect(output).toContain('Batch execution mode:');
186
+ });
187
+ it('produces CURRENT output (no batch transforms) when profile is undefined — backward compat', () => {
188
+ const output = generateCodexSkill(baseSkill, undefined);
189
+ expect(output).toContain('Spawn a sub-agent to execute.');
190
+ expect(output).toContain('Ask the user to confirm the plan.');
191
+ expect(output).not.toContain('Batch execution mode:');
192
+ });
193
+ it('includes skill name, description, triggers in both modes', () => {
194
+ const withProfile = generateCodexSkill(baseSkill, SURFACE_PROFILES.codex);
195
+ const withoutProfile = generateCodexSkill(baseSkill, undefined);
196
+ for (const output of [withProfile, withoutProfile]) {
197
+ expect(output).toContain('# orchestrate');
198
+ expect(output).toContain('Orchestrate a bet slice.');
199
+ expect(output).toContain('`orchestrate`');
200
+ }
201
+ });
202
+ it('still performs path replacement before batch transforms', () => {
203
+ const skillWithPath = {
204
+ ...baseSkill,
205
+ body: `# Path Skill
206
+
207
+ Read \`.productbrain/skills/preflight.md\` before starting.
208
+ Ask the user for approval.`,
209
+ };
210
+ const output = generateCodexSkill(skillWithPath, SURFACE_PROFILES.codex);
211
+ expect(output).toContain('.codex/skills/preflight.md');
212
+ expect(output).not.toContain('.productbrain/skills/preflight.md');
213
+ expect(output).not.toContain('Ask the user');
214
+ });
215
+ });
216
+ describe('generateCursorSkill / generateClaudeRule / generateClaudeSkillRouter — profile ignored (BET-270 S1)', () => {
217
+ const skill = {
218
+ name: 'test-skill',
219
+ description: 'Test skill',
220
+ triggers: ['test'],
221
+ body: `# Test Skill
222
+
223
+ Ask the user to confirm.
224
+ Spawn a sub-agent.
225
+ Normal content.`,
226
+ sourcePath: '/tmp/.productbrain/skills/test-skill.md',
227
+ };
228
+ const rule = {
229
+ name: 'test-rule',
230
+ description: 'A test rule',
231
+ autoApply: true,
232
+ body: '# Rule body\n\nAsk the user to confirm.\nNormal content.',
233
+ sourcePath: '/tmp/.productbrain/rules/test-rule.md',
234
+ };
235
+ it('generateCursorSkill preserves interactive content regardless of profile', () => {
236
+ const withProfile = generateCursorSkill(skill, SURFACE_PROFILES.cursor);
237
+ const withCodexProfile = generateCursorSkill(skill, SURFACE_PROFILES.codex);
238
+ for (const output of [withProfile, withCodexProfile]) {
239
+ expect(output).toContain('Ask the user to confirm.');
240
+ expect(output).toContain('Spawn a sub-agent.');
241
+ expect(output).not.toContain('Batch execution mode:');
242
+ expect(output).not.toContain('Proceed autonomously');
243
+ }
244
+ });
245
+ it('generateClaudeRule preserves interactive content regardless of profile', () => {
246
+ const withProfile = generateClaudeRule(rule, SURFACE_PROFILES.claude);
247
+ const withCodexProfile = generateClaudeRule(rule, SURFACE_PROFILES.codex);
248
+ for (const output of [withProfile, withCodexProfile]) {
249
+ expect(output).toContain('Ask the user to confirm.');
250
+ expect(output).not.toContain('Batch execution mode:');
251
+ expect(output).not.toContain('Proceed autonomously');
252
+ }
253
+ });
254
+ it('generateClaudeSkillRouter preserves interactive content regardless of profile', () => {
255
+ const withProfile = generateClaudeSkillRouter([skill], SURFACE_PROFILES.claude);
256
+ const withCodexProfile = generateClaudeSkillRouter([skill], SURFACE_PROFILES.codex);
257
+ for (const output of [withProfile, withCodexProfile]) {
258
+ expect(output).toContain('test-skill');
259
+ expect(output).toContain('Skill Router');
260
+ }
261
+ });
262
+ });
263
+ //# sourceMappingURL=batch-transformations.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-transformations.test.js","sourceRoot":"","sources":["../../src/__tests__/batch-transformations.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,GAG1B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,IAAI,GAAG;;;;0BAIS,CAAC;QAEvB,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG;;;eAGF,CAAC;QAEZ,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG;;;MAGX,CAAC;QAEH,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,IAAI,GAAG;;;UAGP,CAAC;QAEP,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG;;;;UAIP,CAAC;QAEP,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+CAA+C,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG;;;;UAIP,CAAC;QAEP,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+CAA+C,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,IAAI,GAAG;;;;OAIV,CAAC;QAEJ,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+CAA+C,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG;;;;cAIH,CAAC;QAEX,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+CAA+C,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG;;mBAEE,CAAC;QAEhB,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CACtB,qHAAqH,CACtH,CAAC;QACF,6CAA6C;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;QACtE,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3C,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CACpC,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,IAAI,GAAG;;;;;mBAKE,CAAC;QAEhB,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,IAAI,GAAG;;;;;;;;;;;qCAWoB,CAAC;QAElC,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,4DAA4D;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACjD,qDAAqD;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,IAAI,GAAG;;;;;;yBAMQ,CAAC;QAEtB,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,0BAA0B;QAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC3D,6BAA6B;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+CAA+C,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;QAC3F,MAAM,IAAI,GAAG;;;2CAG0B,CAAC;QAExC,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;QACvE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;QACvE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,+CAA+C,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC5D,MAAM,SAAS,GAAmB;QAChC,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,0BAA0B;QACvC,QAAQ,EAAE,CAAC,aAAa,CAAC;QACzB,IAAI,EAAE;;;;;UAKA;QACN,UAAU,EAAE,0CAA0C;KACvD,CAAC;IAEF,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+CAA+C,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2FAA2F,EAAE,GAAG,EAAE;QACnG,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,WAAW,GAAG,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEhE,KAAK,MAAM,MAAM,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,aAAa,GAAmB;YACpC,GAAG,SAAS;YACZ,IAAI,EAAE;;;2BAGe;SACtB,CAAC;QAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qGAAqG,EAAE,GAAG,EAAE;IACnH,MAAM,KAAK,GAAmB;QAC5B,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,YAAY;QACzB,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE;;;;gBAIM;QACZ,UAAU,EAAE,yCAAyC;KACtD,CAAC;IAEF,MAAM,IAAI,GAAkB;QAC1B,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,0DAA0D;QAChE,UAAU,EAAE,uCAAuC;KACpD,CAAC;IAEF,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACxE,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAE5E,KAAK,MAAM,MAAM,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACtE,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAE1E,KAAK,MAAM,MAAM,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,WAAW,GAAG,yBAAyB,CAAC,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChF,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEpF,KAAK,MAAM,MAAM,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=surface-profiles.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-profiles.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/surface-profiles.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * surface-profiles — unit tests.
3
+ * BET-270 Slice 0: type system + registry.
4
+ * BET-270 Slice 4: pluggable surface registration + fallback.
5
+ */
6
+ import { describe, expect, it, beforeEach } from 'vitest';
7
+ import { SURFACE_PROFILES, resolveSurfaceProfile, validateSurfaceProfile, registerSurface, getRegisteredSurfaces, _resetRuntimeRegistryForTesting, } from '../generators/surface-profiles.js';
8
+ // ── Helper ─────────────────────────────────────────────────────────────
9
+ function isValidProfile(profile) {
10
+ if (!profile || typeof profile !== 'object')
11
+ return false;
12
+ const p = profile;
13
+ return (['batch', 'interactive', 'passive'].includes(p.executionModel) &&
14
+ ['multi-file', 'single-file'].includes(p.format) &&
15
+ ['stateless', 'conversational', 'autonomous'].includes(p.sessionModel) &&
16
+ typeof p.tokenBudget === 'number' &&
17
+ p.tokenBudget > 0 &&
18
+ ['orchestrated', 'direct', 'guided'].includes(p.workflowStyle));
19
+ }
20
+ const VALID_CUSTOM_PROFILE = {
21
+ executionModel: 'batch',
22
+ format: 'single-file',
23
+ sessionModel: 'autonomous',
24
+ tokenBudget: 20000,
25
+ workflowStyle: 'direct',
26
+ };
27
+ // ── Registry ───────────────────────────────────────────────────────────
28
+ describe('SURFACE_PROFILES registry', () => {
29
+ it('defines all 4 known targets', () => {
30
+ expect(Object.keys(SURFACE_PROFILES).sort()).toEqual(['claude', 'codex', 'copilot', 'cursor']);
31
+ });
32
+ it.each(['claude', 'cursor', 'codex', 'copilot'])('%s profile has all required fields with correct types', (target) => {
33
+ expect(isValidProfile(SURFACE_PROFILES[target])).toBe(true);
34
+ });
35
+ it('claude profile has correct values', () => {
36
+ const p = SURFACE_PROFILES.claude;
37
+ expect(p.executionModel).toBe('interactive');
38
+ expect(p.format).toBe('multi-file');
39
+ expect(p.sessionModel).toBe('conversational');
40
+ expect(p.tokenBudget).toBe(50000);
41
+ expect(p.workflowStyle).toBe('orchestrated');
42
+ });
43
+ it('cursor profile has correct values', () => {
44
+ const p = SURFACE_PROFILES.cursor;
45
+ expect(p.executionModel).toBe('interactive');
46
+ expect(p.format).toBe('multi-file');
47
+ expect(p.sessionModel).toBe('conversational');
48
+ expect(p.tokenBudget).toBe(50000);
49
+ expect(p.workflowStyle).toBe('orchestrated');
50
+ });
51
+ it('codex profile has correct values', () => {
52
+ const p = SURFACE_PROFILES.codex;
53
+ expect(p.executionModel).toBe('batch');
54
+ expect(p.format).toBe('multi-file');
55
+ expect(p.sessionModel).toBe('autonomous');
56
+ expect(p.tokenBudget).toBe(100000);
57
+ expect(p.workflowStyle).toBe('direct');
58
+ });
59
+ it('copilot profile has correct values', () => {
60
+ const p = SURFACE_PROFILES.copilot;
61
+ expect(p.executionModel).toBe('passive');
62
+ expect(p.format).toBe('single-file');
63
+ expect(p.sessionModel).toBe('stateless');
64
+ expect(p.tokenBudget).toBe(30000);
65
+ expect(p.workflowStyle).toBe('guided');
66
+ });
67
+ });
68
+ // ── Resolver ──────────────────────────────────────────────────────────
69
+ describe('resolveSurfaceProfile', () => {
70
+ it.each(['claude', 'cursor', 'codex', 'copilot'])('resolves known target "%s" to a valid profile', (target) => {
71
+ const profile = resolveSurfaceProfile(target);
72
+ expect(isValidProfile(profile)).toBe(true);
73
+ });
74
+ it('resolves "claude" to the claude profile', () => {
75
+ expect(resolveSurfaceProfile('claude')).toBe(SURFACE_PROFILES.claude);
76
+ });
77
+ it('resolves "cursor" to the cursor profile', () => {
78
+ expect(resolveSurfaceProfile('cursor')).toBe(SURFACE_PROFILES.cursor);
79
+ });
80
+ it('resolves "codex" to the codex profile', () => {
81
+ expect(resolveSurfaceProfile('codex')).toBe(SURFACE_PROFILES.codex);
82
+ });
83
+ it('resolves "copilot" to the copilot profile', () => {
84
+ expect(resolveSurfaceProfile('copilot')).toBe(SURFACE_PROFILES.copilot);
85
+ });
86
+ it('returns codex profile as fallback for unknown targets', () => {
87
+ expect(resolveSurfaceProfile('unknown-tool')).toBe(SURFACE_PROFILES.codex);
88
+ });
89
+ it('returns codex profile for empty string', () => {
90
+ expect(resolveSurfaceProfile('')).toBe(SURFACE_PROFILES.codex);
91
+ });
92
+ it('fallback profile is a valid profile', () => {
93
+ const fallback = resolveSurfaceProfile('completely-unknown-surface');
94
+ expect(isValidProfile(fallback)).toBe(true);
95
+ });
96
+ });
97
+ // ── validateSurfaceProfile ────────────────────────────────────────────
98
+ describe('validateSurfaceProfile', () => {
99
+ it('accepts a valid profile', () => {
100
+ expect(validateSurfaceProfile(VALID_CUSTOM_PROFILE)).toBe(true);
101
+ });
102
+ it('accepts each built-in profile', () => {
103
+ for (const target of ['claude', 'cursor', 'codex', 'copilot']) {
104
+ expect(validateSurfaceProfile(SURFACE_PROFILES[target])).toBe(true);
105
+ }
106
+ });
107
+ it('rejects null', () => {
108
+ expect(validateSurfaceProfile(null)).toBe(false);
109
+ });
110
+ it('rejects a non-object', () => {
111
+ expect(validateSurfaceProfile('string')).toBe(false);
112
+ expect(validateSurfaceProfile(42)).toBe(false);
113
+ });
114
+ it('rejects a profile missing executionModel', () => {
115
+ const { executionModel: _, ...rest } = VALID_CUSTOM_PROFILE;
116
+ expect(validateSurfaceProfile(rest)).toBe(false);
117
+ });
118
+ it('rejects a profile missing format', () => {
119
+ const { format: _, ...rest } = VALID_CUSTOM_PROFILE;
120
+ expect(validateSurfaceProfile(rest)).toBe(false);
121
+ });
122
+ it('rejects a profile missing sessionModel', () => {
123
+ const { sessionModel: _, ...rest } = VALID_CUSTOM_PROFILE;
124
+ expect(validateSurfaceProfile(rest)).toBe(false);
125
+ });
126
+ it('rejects a profile missing tokenBudget', () => {
127
+ const { tokenBudget: _, ...rest } = VALID_CUSTOM_PROFILE;
128
+ expect(validateSurfaceProfile(rest)).toBe(false);
129
+ });
130
+ it('rejects a profile missing workflowStyle', () => {
131
+ const { workflowStyle: _, ...rest } = VALID_CUSTOM_PROFILE;
132
+ expect(validateSurfaceProfile(rest)).toBe(false);
133
+ });
134
+ it('rejects wrong type for executionModel', () => {
135
+ expect(validateSurfaceProfile({ ...VALID_CUSTOM_PROFILE, executionModel: 'serverless' })).toBe(false);
136
+ });
137
+ it('rejects wrong type for format', () => {
138
+ expect(validateSurfaceProfile({ ...VALID_CUSTOM_PROFILE, format: 'multi-page' })).toBe(false);
139
+ });
140
+ it('rejects wrong type for sessionModel', () => {
141
+ expect(validateSurfaceProfile({ ...VALID_CUSTOM_PROFILE, sessionModel: 'ephemeral' })).toBe(false);
142
+ });
143
+ it('rejects tokenBudget of zero', () => {
144
+ expect(validateSurfaceProfile({ ...VALID_CUSTOM_PROFILE, tokenBudget: 0 })).toBe(false);
145
+ });
146
+ it('rejects negative tokenBudget', () => {
147
+ expect(validateSurfaceProfile({ ...VALID_CUSTOM_PROFILE, tokenBudget: -1 })).toBe(false);
148
+ });
149
+ it('rejects non-numeric tokenBudget', () => {
150
+ expect(validateSurfaceProfile({ ...VALID_CUSTOM_PROFILE, tokenBudget: '50000' })).toBe(false);
151
+ });
152
+ it('rejects wrong type for workflowStyle', () => {
153
+ expect(validateSurfaceProfile({ ...VALID_CUSTOM_PROFILE, workflowStyle: 'manual' })).toBe(false);
154
+ });
155
+ });
156
+ // ── registerSurface + getRegisteredSurfaces ───────────────────────────
157
+ describe('registerSurface', () => {
158
+ beforeEach(() => {
159
+ _resetRuntimeRegistryForTesting();
160
+ });
161
+ it('adds a new surface that resolveSurfaceProfile can find', () => {
162
+ registerSurface('my-tool', VALID_CUSTOM_PROFILE);
163
+ expect(resolveSurfaceProfile('my-tool')).toBe(VALID_CUSTOM_PROFILE);
164
+ });
165
+ it('registered surface profile is not the codex fallback', () => {
166
+ registerSurface('my-tool', VALID_CUSTOM_PROFILE);
167
+ const resolved = resolveSurfaceProfile('my-tool');
168
+ expect(resolved).not.toBe(SURFACE_PROFILES.codex);
169
+ expect(resolved).toBe(VALID_CUSTOM_PROFILE);
170
+ });
171
+ it('throws on invalid profile (missing field)', () => {
172
+ const { executionModel: _, ...bad } = VALID_CUSTOM_PROFILE;
173
+ expect(() => registerSurface('bad-tool', bad)).toThrow();
174
+ });
175
+ it('throws on invalid profile (wrong type)', () => {
176
+ expect(() => registerSurface('bad-tool', { ...VALID_CUSTOM_PROFILE, tokenBudget: 0 })).toThrow();
177
+ });
178
+ it('throws when attempting to overwrite a built-in surface', () => {
179
+ expect(() => registerSurface('claude', VALID_CUSTOM_PROFILE)).toThrow();
180
+ expect(() => registerSurface('cursor', VALID_CUSTOM_PROFILE)).toThrow();
181
+ expect(() => registerSurface('codex', VALID_CUSTOM_PROFILE)).toThrow();
182
+ expect(() => registerSurface('copilot', VALID_CUSTOM_PROFILE)).toThrow();
183
+ });
184
+ it('does not mutate built-in SURFACE_PROFILES after attempted overwrite', () => {
185
+ const original = { ...SURFACE_PROFILES.claude };
186
+ try {
187
+ registerSurface('claude', VALID_CUSTOM_PROFILE);
188
+ }
189
+ catch {
190
+ // expected
191
+ }
192
+ expect(SURFACE_PROFILES.claude).toEqual(original);
193
+ });
194
+ });
195
+ describe('getRegisteredSurfaces', () => {
196
+ beforeEach(() => {
197
+ _resetRuntimeRegistryForTesting();
198
+ });
199
+ it('returns all 4 built-in surfaces with no registrations', () => {
200
+ expect(getRegisteredSurfaces().sort()).toEqual(['claude', 'codex', 'copilot', 'cursor']);
201
+ });
202
+ it('includes runtime-registered surfaces', () => {
203
+ registerSurface('my-tool', VALID_CUSTOM_PROFILE);
204
+ expect(getRegisteredSurfaces()).toContain('my-tool');
205
+ });
206
+ it('returns built-ins + registered in combined list', () => {
207
+ registerSurface('tool-a', VALID_CUSTOM_PROFILE);
208
+ registerSurface('tool-b', { ...VALID_CUSTOM_PROFILE, tokenBudget: 5000 });
209
+ const surfaces = getRegisteredSurfaces();
210
+ expect(surfaces).toContain('claude');
211
+ expect(surfaces).toContain('tool-a');
212
+ expect(surfaces).toContain('tool-b');
213
+ expect(surfaces).toHaveLength(6);
214
+ });
215
+ });
216
+ describe('resolveSurfaceProfile (runtime registration)', () => {
217
+ beforeEach(() => {
218
+ _resetRuntimeRegistryForTesting();
219
+ });
220
+ it('returns registered profile (not codex fallback) for a registered surface', () => {
221
+ registerSurface('windsurf', VALID_CUSTOM_PROFILE);
222
+ expect(resolveSurfaceProfile('windsurf')).toBe(VALID_CUSTOM_PROFILE);
223
+ });
224
+ it('still returns codex fallback for unregistered unknown surfaces', () => {
225
+ expect(resolveSurfaceProfile('not-registered')).toBe(SURFACE_PROFILES.codex);
226
+ });
227
+ it('built-in surfaces are unaffected by runtime registrations', () => {
228
+ registerSurface('my-tool', VALID_CUSTOM_PROFILE);
229
+ expect(resolveSurfaceProfile('claude')).toBe(SURFACE_PROFILES.claude);
230
+ expect(resolveSurfaceProfile('codex')).toBe(SURFACE_PROFILES.codex);
231
+ });
232
+ });
233
+ //# sourceMappingURL=surface-profiles.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-profiles.test.js","sourceRoot":"","sources":["../../src/__tests__/surface-profiles.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4BH,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA4CD,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsHvE"}
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgDH,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA4CD,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA2HvE"}
@@ -107,6 +107,8 @@ export async function runCapture(options) {
107
107
  });
108
108
  // Track in session state
109
109
  addCapturedEntry(result.entryId);
110
+ // BET-272 S3: Advisory quality hints — from createEntryWithClassification result (BR-144)
111
+ const qualityHints = result.qualityHints ?? [];
110
112
  // Phase 3: Link to existing entry if --link provided (TEN-705)
111
113
  if (options.link) {
112
114
  const linkTarget = options.link.trim();
@@ -147,6 +149,8 @@ export async function runCapture(options) {
147
149
  normalization: result.normalization,
148
150
  linkedTo: options.link,
149
151
  relationType: options.link ? (options.type ?? 'surfaces_tension_in') : undefined,
152
+ qualityHints,
153
+ relationSuggestions: result.relationSuggestions,
150
154
  }) + '\n');
151
155
  }
152
156
  // BET-271 S1: Exit 1 when fields were rejected — signals "not everything you asked for happened."
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../src/commands/handshake.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoMH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FxG;AACD,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO9E;AAsBD,wBAAsB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiRhF"}
1
+ {"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../src/commands/handshake.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqMH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FxG;AACD,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO9E;AAsBD,wBAAsB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoUhF"}