@namzu/cli 2.0.0 → 2.2.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.
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +22 -2
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/agent.d.ts +10 -0
- package/dist/tui/agent.d.ts.map +1 -1
- package/dist/tui/agent.js +10 -0
- package/dist/tui/agent.js.map +1 -1
- package/dist/tui/slashCommands.d.ts +83 -0
- package/dist/tui/slashCommands.d.ts.map +1 -1
- package/dist/tui/slashCommands.js +157 -0
- package/dist/tui/slashCommands.js.map +1 -1
- package/package.json +11 -6
- package/dist/__tests__/environment-reaches-the-turn.test.d.ts +0 -17
- package/dist/__tests__/environment-reaches-the-turn.test.d.ts.map +0 -1
- package/dist/__tests__/environment-reaches-the-turn.test.js +0 -128
- package/dist/__tests__/environment-reaches-the-turn.test.js.map +0 -1
- package/dist/__tests__/headless-trust-gate.test.d.ts +0 -23
- package/dist/__tests__/headless-trust-gate.test.d.ts.map +0 -1
- package/dist/__tests__/headless-trust-gate.test.js +0 -227
- package/dist/__tests__/headless-trust-gate.test.js.map +0 -1
- package/dist/__tests__/mcp-servers-reach-the-session.test.d.ts +0 -17
- package/dist/__tests__/mcp-servers-reach-the-session.test.d.ts.map +0 -1
- package/dist/__tests__/mcp-servers-reach-the-session.test.js +0 -171
- package/dist/__tests__/mcp-servers-reach-the-session.test.js.map +0 -1
- package/dist/__tests__/permission-rules-reach-the-turn.test.d.ts +0 -31
- package/dist/__tests__/permission-rules-reach-the-turn.test.d.ts.map +0 -1
- package/dist/__tests__/permission-rules-reach-the-turn.test.js +0 -132
- package/dist/__tests__/permission-rules-reach-the-turn.test.js.map +0 -1
- package/dist/__tests__/project-instructions-reach-the-turn.test.d.ts +0 -24
- package/dist/__tests__/project-instructions-reach-the-turn.test.d.ts.map +0 -1
- package/dist/__tests__/project-instructions-reach-the-turn.test.js +0 -153
- package/dist/__tests__/project-instructions-reach-the-turn.test.js.map +0 -1
- package/dist/cli.test.d.ts +0 -2
- package/dist/cli.test.d.ts.map +0 -1
- package/dist/cli.test.js +0 -108
- package/dist/cli.test.js.map +0 -1
- package/dist/commands/__tests__/eval.test.d.ts +0 -2
- package/dist/commands/__tests__/eval.test.d.ts.map +0 -1
- package/dist/commands/__tests__/eval.test.js +0 -165
- package/dist/commands/__tests__/eval.test.js.map +0 -1
- package/dist/commands/__tests__/passthrough-help.test.d.ts +0 -2
- package/dist/commands/__tests__/passthrough-help.test.d.ts.map +0 -1
- package/dist/commands/__tests__/passthrough-help.test.js +0 -96
- package/dist/commands/__tests__/passthrough-help.test.js.map +0 -1
- package/dist/commands/__tests__/resume.test.d.ts +0 -15
- package/dist/commands/__tests__/resume.test.d.ts.map +0 -1
- package/dist/commands/__tests__/resume.test.js +0 -116
- package/dist/commands/__tests__/resume.test.js.map +0 -1
- package/dist/commands/__tests__/run-exit-code.test.d.ts +0 -2
- package/dist/commands/__tests__/run-exit-code.test.d.ts.map +0 -1
- package/dist/commands/__tests__/run-exit-code.test.js +0 -100
- package/dist/commands/__tests__/run-exit-code.test.js.map +0 -1
- package/dist/commands/__tests__/run-flags.test.d.ts +0 -11
- package/dist/commands/__tests__/run-flags.test.d.ts.map +0 -1
- package/dist/commands/__tests__/run-flags.test.js +0 -238
- package/dist/commands/__tests__/run-flags.test.js.map +0 -1
- package/dist/commands/__tests__/run-stream-flags.test.d.ts +0 -2
- package/dist/commands/__tests__/run-stream-flags.test.d.ts.map +0 -1
- package/dist/commands/__tests__/run-stream-flags.test.js +0 -295
- package/dist/commands/__tests__/run-stream-flags.test.js.map +0 -1
- package/dist/commands/doctor.test.d.ts +0 -2
- package/dist/commands/doctor.test.d.ts.map +0 -1
- package/dist/commands/doctor.test.js +0 -82
- package/dist/commands/doctor.test.js.map +0 -1
- package/dist/config/load.test.d.ts +0 -2
- package/dist/config/load.test.d.ts.map +0 -1
- package/dist/config/load.test.js +0 -57
- package/dist/config/load.test.js.map +0 -1
- package/dist/context/__tests__/environment.test.d.ts +0 -10
- package/dist/context/__tests__/environment.test.d.ts.map +0 -1
- package/dist/context/__tests__/environment.test.js +0 -84
- package/dist/context/__tests__/environment.test.js.map +0 -1
- package/dist/context/__tests__/project.test.d.ts +0 -12
- package/dist/context/__tests__/project.test.d.ts.map +0 -1
- package/dist/context/__tests__/project.test.js +0 -201
- package/dist/context/__tests__/project.test.js.map +0 -1
- package/dist/doctor/checks/credentials.test.d.ts +0 -10
- package/dist/doctor/checks/credentials.test.d.ts.map +0 -1
- package/dist/doctor/checks/credentials.test.js +0 -47
- package/dist/doctor/checks/credentials.test.js.map +0 -1
- package/dist/doctor/checks/sandbox.test.d.ts +0 -2
- package/dist/doctor/checks/sandbox.test.d.ts.map +0 -1
- package/dist/doctor/checks/sandbox.test.js +0 -59
- package/dist/doctor/checks/sandbox.test.js.map +0 -1
- package/dist/doctor/registry.test.d.ts +0 -7
- package/dist/doctor/registry.test.d.ts.map +0 -1
- package/dist/doctor/registry.test.js +0 -379
- package/dist/doctor/registry.test.js.map +0 -1
- package/dist/integrations/mcp/__tests__/connect.test.d.ts +0 -11
- package/dist/integrations/mcp/__tests__/connect.test.d.ts.map +0 -1
- package/dist/integrations/mcp/__tests__/connect.test.js +0 -231
- package/dist/integrations/mcp/__tests__/connect.test.js.map +0 -1
- package/dist/integrations/providers/discover.test.d.ts +0 -2
- package/dist/integrations/providers/discover.test.d.ts.map +0 -1
- package/dist/integrations/providers/discover.test.js +0 -93
- package/dist/integrations/providers/discover.test.js.map +0 -1
- package/dist/integrations/providers/keychain.test.d.ts +0 -2
- package/dist/integrations/providers/keychain.test.d.ts.map +0 -1
- package/dist/integrations/providers/keychain.test.js +0 -21
- package/dist/integrations/providers/keychain.test.js.map +0 -1
- package/dist/integrations/providers/oauth.test.d.ts +0 -2
- package/dist/integrations/providers/oauth.test.d.ts.map +0 -1
- package/dist/integrations/providers/oauth.test.js +0 -86
- package/dist/integrations/providers/oauth.test.js.map +0 -1
- package/dist/integrations/providers/preferences.test.d.ts +0 -2
- package/dist/integrations/providers/preferences.test.d.ts.map +0 -1
- package/dist/integrations/providers/preferences.test.js +0 -76
- package/dist/integrations/providers/preferences.test.js.map +0 -1
- package/dist/integrations/sessions/__tests__/archived-workspace.test.d.ts +0 -21
- package/dist/integrations/sessions/__tests__/archived-workspace.test.d.ts.map +0 -1
- package/dist/integrations/sessions/__tests__/archived-workspace.test.js +0 -62
- package/dist/integrations/sessions/__tests__/archived-workspace.test.js.map +0 -1
- package/dist/integrations/subagents/__tests__/delegation-trace.test.d.ts +0 -2
- package/dist/integrations/subagents/__tests__/delegation-trace.test.d.ts.map +0 -1
- package/dist/integrations/subagents/__tests__/delegation-trace.test.js +0 -114
- package/dist/integrations/subagents/__tests__/delegation-trace.test.js.map +0 -1
- package/dist/integrations/trust/store.test.d.ts +0 -2
- package/dist/integrations/trust/store.test.d.ts.map +0 -1
- package/dist/integrations/trust/store.test.js +0 -50
- package/dist/integrations/trust/store.test.js.map +0 -1
- package/dist/memory/store.test.d.ts +0 -2
- package/dist/memory/store.test.d.ts.map +0 -1
- package/dist/memory/store.test.js +0 -63
- package/dist/memory/store.test.js.map +0 -1
- package/dist/output/formatter.test.d.ts +0 -2
- package/dist/output/formatter.test.d.ts.map +0 -1
- package/dist/output/formatter.test.js +0 -88
- package/dist/output/formatter.test.js.map +0 -1
- package/dist/output/rendered-payload.test.d.ts +0 -2
- package/dist/output/rendered-payload.test.d.ts.map +0 -1
- package/dist/output/rendered-payload.test.js +0 -61
- package/dist/output/rendered-payload.test.js.map +0 -1
- package/dist/permissions/__tests__/mode.test.d.ts +0 -10
- package/dist/permissions/__tests__/mode.test.d.ts.map +0 -1
- package/dist/permissions/__tests__/mode.test.js +0 -115
- package/dist/permissions/__tests__/mode.test.js.map +0 -1
- package/dist/permissions/__tests__/rules.test.d.ts +0 -10
- package/dist/permissions/__tests__/rules.test.d.ts.map +0 -1
- package/dist/permissions/__tests__/rules.test.js +0 -196
- package/dist/permissions/__tests__/rules.test.js.map +0 -1
- package/dist/skills/store.test.d.ts +0 -2
- package/dist/skills/store.test.d.ts.map +0 -1
- package/dist/skills/store.test.js +0 -80
- package/dist/skills/store.test.js.map +0 -1
- package/dist/tui/__tests__/context-gauge.test.d.ts +0 -2
- package/dist/tui/__tests__/context-gauge.test.d.ts.map +0 -1
- package/dist/tui/__tests__/context-gauge.test.js +0 -83
- package/dist/tui/__tests__/context-gauge.test.js.map +0 -1
- package/dist/tui/__tests__/deferred-tool-discovery.test.d.ts +0 -24
- package/dist/tui/__tests__/deferred-tool-discovery.test.d.ts.map +0 -1
- package/dist/tui/__tests__/deferred-tool-discovery.test.js +0 -111
- package/dist/tui/__tests__/deferred-tool-discovery.test.js.map +0 -1
- package/dist/tui/__tests__/to-agent-event.test.d.ts +0 -2
- package/dist/tui/__tests__/to-agent-event.test.d.ts.map +0 -1
- package/dist/tui/__tests__/to-agent-event.test.js +0 -230
- package/dist/tui/__tests__/to-agent-event.test.js.map +0 -1
- package/dist/tui/__tests__/working-directory.test.d.ts +0 -13
- package/dist/tui/__tests__/working-directory.test.d.ts.map +0 -1
- package/dist/tui/__tests__/working-directory.test.js +0 -109
- package/dist/tui/__tests__/working-directory.test.js.map +0 -1
- package/dist/tui/agent.test.d.ts +0 -2
- package/dist/tui/agent.test.d.ts.map +0 -1
- package/dist/tui/agent.test.js +0 -225
- package/dist/tui/agent.test.js.map +0 -1
- package/dist/tui/markdownParser.test.d.ts +0 -2
- package/dist/tui/markdownParser.test.d.ts.map +0 -1
- package/dist/tui/markdownParser.test.js +0 -90
- package/dist/tui/markdownParser.test.js.map +0 -1
- package/dist/tui/mentions.test.d.ts +0 -2
- package/dist/tui/mentions.test.d.ts.map +0 -1
- package/dist/tui/mentions.test.js +0 -35
- package/dist/tui/mentions.test.js.map +0 -1
- package/dist/tui/slashCommands.test.d.ts +0 -2
- package/dist/tui/slashCommands.test.d.ts.map +0 -1
- package/dist/tui/slashCommands.test.js +0 -114
- package/dist/tui/slashCommands.test.js.map +0 -1
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { toAgentEvent } from '../agent.js';
|
|
3
|
-
/**
|
|
4
|
-
* The seam between the kernel and the command.
|
|
5
|
-
*
|
|
6
|
-
* The SDK test proves `run_completed` carries a stop reason and the `run` test
|
|
7
|
-
* proves the command acts on one, and both of those passed while this function
|
|
8
|
-
* threw the field away in between — the mutation that reverted it to a bare
|
|
9
|
-
* `{ kind: 'done' }` was caught by nothing. Two tested ends and an untested
|
|
10
|
-
* middle is the shape that lets a value be produced and consumed and still
|
|
11
|
-
* never arrive.
|
|
12
|
-
*/
|
|
13
|
-
const runId = 'run_test';
|
|
14
|
-
describe('toAgentEvent carries the stop reason across', () => {
|
|
15
|
-
it('passes a non-normal stop through to the done event', () => {
|
|
16
|
-
const mapped = toAgentEvent({
|
|
17
|
-
type: 'run_completed',
|
|
18
|
-
runId,
|
|
19
|
-
result: '',
|
|
20
|
-
stopReason: 'output_guardrail',
|
|
21
|
-
});
|
|
22
|
-
expect(mapped).toEqual({ kind: 'done', stopReason: 'output_guardrail' });
|
|
23
|
-
});
|
|
24
|
-
it('passes end_turn through rather than inventing it downstream', () => {
|
|
25
|
-
// The command treats a MISSING reason as success, so the difference
|
|
26
|
-
// between "finished normally" and "we did not say" must be preserved
|
|
27
|
-
// here rather than reconstructed by whoever reads it.
|
|
28
|
-
const mapped = toAgentEvent({
|
|
29
|
-
type: 'run_completed',
|
|
30
|
-
runId,
|
|
31
|
-
result: 'hi',
|
|
32
|
-
stopReason: 'end_turn',
|
|
33
|
-
});
|
|
34
|
-
expect(mapped).toEqual({ kind: 'done', stopReason: 'end_turn' });
|
|
35
|
-
});
|
|
36
|
-
it('still maps a completion that carries no reason', () => {
|
|
37
|
-
const mapped = toAgentEvent({ type: 'run_completed', runId, result: 'hi' });
|
|
38
|
-
expect(mapped).toEqual({ kind: 'done' });
|
|
39
|
-
});
|
|
40
|
-
it('maps a failure to an error, not to done', () => {
|
|
41
|
-
const mapped = toAgentEvent({
|
|
42
|
-
type: 'run_failed',
|
|
43
|
-
runId,
|
|
44
|
-
error: 'boom',
|
|
45
|
-
});
|
|
46
|
-
expect(mapped).toEqual({ kind: 'error', message: 'boom' });
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
describe('compaction is reported, not silent', () => {
|
|
50
|
-
// Compaction deletes messages irrecoverably. The kernel emits both outcomes
|
|
51
|
-
// specifically so a host can surface the loss; this host used to drop them
|
|
52
|
-
// at `default: return null`, one function from the screen.
|
|
53
|
-
it('says which counts became which, and nothing it cannot substantiate', () => {
|
|
54
|
-
const mapped = toAgentEvent({
|
|
55
|
-
type: 'compaction_completed',
|
|
56
|
-
runId: 'run_1',
|
|
57
|
-
iteration: 3,
|
|
58
|
-
messagesBefore: 42,
|
|
59
|
-
messagesAfter: 9,
|
|
60
|
-
tokensBefore: 120_000,
|
|
61
|
-
tokensAfter: 38_000,
|
|
62
|
-
measuredBy: 'provider',
|
|
63
|
-
contextWindowTokens: 200_000,
|
|
64
|
-
windowSource: 'model-table',
|
|
65
|
-
reachedResetThreshold: true,
|
|
66
|
-
});
|
|
67
|
-
expect(mapped).toMatchObject({ kind: 'context', shed: true });
|
|
68
|
-
const text = mapped.text;
|
|
69
|
-
expect(text).toContain('42');
|
|
70
|
-
expect(text).toContain('9');
|
|
71
|
-
expect(text).toContain('120k');
|
|
72
|
-
// It must NOT claim to know what was lost — only the counts are checkable.
|
|
73
|
-
expect(text).not.toMatch(/turns? \d+-\d+|removed the/i);
|
|
74
|
-
});
|
|
75
|
-
it('marks an estimate as an estimate', () => {
|
|
76
|
-
// Quoting an estimate as a measurement is the same lie as quoting a
|
|
77
|
-
// summary as an enumeration, in miniature.
|
|
78
|
-
const mapped = toAgentEvent({
|
|
79
|
-
type: 'compaction_completed',
|
|
80
|
-
runId: 'run_1',
|
|
81
|
-
iteration: 3,
|
|
82
|
-
messagesBefore: 10,
|
|
83
|
-
messagesAfter: 4,
|
|
84
|
-
tokensBefore: 9000,
|
|
85
|
-
tokensAfter: 3000,
|
|
86
|
-
measuredBy: 'estimate',
|
|
87
|
-
contextWindowTokens: 200_000,
|
|
88
|
-
windowSource: 'default',
|
|
89
|
-
reachedResetThreshold: false,
|
|
90
|
-
});
|
|
91
|
-
expect(mapped.text).toContain('estimated');
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
describe('the three decline causes get three sentences', () => {
|
|
95
|
-
// Collapsing them into "compaction failed" puts the reader back where the
|
|
96
|
-
// silence did — the same reason a rule denial had to quote the rule.
|
|
97
|
-
function failure(cause, error) {
|
|
98
|
-
const mapped = toAgentEvent({
|
|
99
|
-
type: 'compaction_failed',
|
|
100
|
-
runId: 'run_1',
|
|
101
|
-
iteration: 2,
|
|
102
|
-
cause,
|
|
103
|
-
messages: 31,
|
|
104
|
-
...(error ? { error } : {}),
|
|
105
|
-
});
|
|
106
|
-
expect(mapped).toMatchObject({ kind: 'context', shed: false });
|
|
107
|
-
return mapped.text;
|
|
108
|
-
}
|
|
109
|
-
it('a thrown reducer may work next time, and carries its own error', () => {
|
|
110
|
-
const text = failure('reducer_threw', 'provider returned 400');
|
|
111
|
-
expect(text).toContain('provider returned 400');
|
|
112
|
-
expect(text).toContain('a later pass may succeed');
|
|
113
|
-
});
|
|
114
|
-
it('shedding nothing is a fact, not an error, and will not change', () => {
|
|
115
|
-
const text = failure('shed_nothing');
|
|
116
|
-
expect(text).toContain('later passes will answer the same');
|
|
117
|
-
// Not dressed as a failure: an irreducible history is a true statement
|
|
118
|
-
// about the conversation, and calling it one sends someone hunting a
|
|
119
|
-
// bug that is not there.
|
|
120
|
-
expect(text).not.toMatch(/failed|error/i);
|
|
121
|
-
});
|
|
122
|
-
it('a split tool pair is a reducer bug and suggests no user action', () => {
|
|
123
|
-
const text = failure('split_tool_pair');
|
|
124
|
-
expect(text).toContain('bug in the reducer');
|
|
125
|
-
expect(text).not.toMatch(/try again|later pass|retry/i);
|
|
126
|
-
});
|
|
127
|
-
it('every cause states the history is unchanged', () => {
|
|
128
|
-
for (const cause of ['reducer_threw', 'shed_nothing', 'split_tool_pair']) {
|
|
129
|
-
expect(failure(cause)).toContain('31 messages unchanged');
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
it('no two causes produce the same sentence', () => {
|
|
133
|
-
const texts = ['reducer_threw', 'shed_nothing', 'split_tool_pair'].map((c) => failure(c));
|
|
134
|
-
expect(new Set(texts).size).toBe(3);
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
/**
|
|
138
|
-
* A tool the summary list does not know still gets a label, not a blob.
|
|
139
|
-
*
|
|
140
|
-
* `Agent` requires a `description` on its schema — the model writes one every
|
|
141
|
-
* call — and the summariser picked from a key list that did not include it, so
|
|
142
|
-
* a delegation was rendered as a truncated `JSON.stringify` of its own
|
|
143
|
-
* arguments. The label was demanded and then discarded.
|
|
144
|
-
*
|
|
145
|
-
* Driven through `toAgentEvent` rather than the summariser directly: the
|
|
146
|
-
* helper's own behaviour was never in doubt, only whether the caller reaches
|
|
147
|
-
* it with this input.
|
|
148
|
-
*/
|
|
149
|
-
describe('toAgentEvent labels a delegation with the label it required', () => {
|
|
150
|
-
const executing = (toolName, input) => toAgentEvent({ type: 'tool_executing', toolName, toolUseId: 'tu_1', input });
|
|
151
|
-
it('summarises an Agent call with its description', () => {
|
|
152
|
-
const mapped = executing('Agent', {
|
|
153
|
-
description: 'Audit the auth flow',
|
|
154
|
-
prompt: 'Read every file under src/auth and report risks.',
|
|
155
|
-
role: 'You are a security auditor',
|
|
156
|
-
});
|
|
157
|
-
expect(mapped).toMatchObject({ summary: 'Audit the auth flow' });
|
|
158
|
-
});
|
|
159
|
-
it('does not render the arguments as JSON', () => {
|
|
160
|
-
const mapped = executing('Agent', { description: 'Audit the auth flow', prompt: 'x' });
|
|
161
|
-
expect(mapped.summary).not.toContain('{');
|
|
162
|
-
expect(mapped.summary).not.toContain('prompt');
|
|
163
|
-
});
|
|
164
|
-
it('still prefers a more specific field when one exists', () => {
|
|
165
|
-
// `description` is the LAST fallback. A tool with a real subject keeps
|
|
166
|
-
// it, so adding this key cannot quietly relabel the tools that already
|
|
167
|
-
// summarised correctly.
|
|
168
|
-
const mapped = executing('bash', { command: 'ls -la', description: 'list files' });
|
|
169
|
-
expect(mapped).toMatchObject({ summary: 'ls -la' });
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
/**
|
|
173
|
-
* The context figures cross the same seam, and used to stop at it.
|
|
174
|
-
*
|
|
175
|
-
* The kernel measured the context and resolved a window; the status gauge
|
|
176
|
-
* consumed a fraction. Both ends worked. This function threw the four fields
|
|
177
|
-
* away in between, so the gauge fell back to dividing CUMULATIVE spend by a
|
|
178
|
-
* window guessed from the model name — a number that rose with turn count and
|
|
179
|
-
* read FULL on a conversation with room left. Producing a value and consuming
|
|
180
|
-
* one are not the same as carrying it.
|
|
181
|
-
*/
|
|
182
|
-
describe('toAgentEvent carries the context figures across', () => {
|
|
183
|
-
const usageEvent = (extra) => toAgentEvent({
|
|
184
|
-
type: 'token_usage_updated',
|
|
185
|
-
runId,
|
|
186
|
-
usage: { totalTokens: 90 },
|
|
187
|
-
cost: { totalCost: 0.5 },
|
|
188
|
-
...extra,
|
|
189
|
-
});
|
|
190
|
-
it('carries both terms and both provenances', () => {
|
|
191
|
-
expect(usageEvent({
|
|
192
|
-
contextTokens: 12_000,
|
|
193
|
-
contextMeasuredBy: 'provider',
|
|
194
|
-
contextWindowTokens: 200_000,
|
|
195
|
-
windowSource: 'model-table',
|
|
196
|
-
})).toEqual({
|
|
197
|
-
kind: 'usage',
|
|
198
|
-
totalTokens: 90,
|
|
199
|
-
costUsd: 0.5,
|
|
200
|
-
contextTokens: 12_000,
|
|
201
|
-
contextMeasuredBy: 'provider',
|
|
202
|
-
contextWindowTokens: 200_000,
|
|
203
|
-
windowSource: 'model-table',
|
|
204
|
-
});
|
|
205
|
-
});
|
|
206
|
-
it('leaves an unreported context absent rather than zero', () => {
|
|
207
|
-
// The kernel omits all four when a run resolved no window. A `0` here
|
|
208
|
-
// would be indistinguishable from an empty context and would render a
|
|
209
|
-
// gauge reading 0% — a confident wrong answer where the contract is
|
|
210
|
-
// to show no proportion at all.
|
|
211
|
-
const mapped = usageEvent({});
|
|
212
|
-
expect(mapped).toEqual({ kind: 'usage', totalTokens: 90, costUsd: 0.5 });
|
|
213
|
-
expect(mapped).not.toHaveProperty('contextTokens');
|
|
214
|
-
expect(mapped).not.toHaveProperty('contextWindowTokens');
|
|
215
|
-
});
|
|
216
|
-
it('keeps context distinct from cumulative spend', () => {
|
|
217
|
-
// The defect in one assertion. Ten turns over a 200k window accumulate
|
|
218
|
-
// far more spend than the window holds, because every turn re-sends the
|
|
219
|
-
// history and counts it again — while the context stays modest. Any
|
|
220
|
-
// mapping that reaches for `totalTokens` fails here.
|
|
221
|
-
expect(usageEvent({
|
|
222
|
-
usage: { totalTokens: 500_000 },
|
|
223
|
-
contextTokens: 40_000,
|
|
224
|
-
contextMeasuredBy: 'provider',
|
|
225
|
-
contextWindowTokens: 200_000,
|
|
226
|
-
windowSource: 'model-table',
|
|
227
|
-
})).toMatchObject({ totalTokens: 500_000, contextTokens: 40_000 });
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
//# sourceMappingURL=to-agent-event.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"to-agent-event.test.js","sourceRoot":"","sources":["../../../src/tui/__tests__/to-agent-event.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The directory the agent actually works in.
|
|
3
|
-
*
|
|
4
|
-
* `--cwd` was parsed, and reached the session store and the skill search, and
|
|
5
|
-
* stopped there: the agent run itself was started with the PROCESS's directory,
|
|
6
|
-
* so a run pointed at another checkout globbed this one and reported finding
|
|
7
|
-
* nothing — which reads as "the file isn't there" rather than "I looked in the
|
|
8
|
-
* wrong place". Nothing caught it because no test ran a file tool against a
|
|
9
|
-
* directory that was not the process's own, so both directories were the same
|
|
10
|
-
* string in every assertion. These two do.
|
|
11
|
-
*/
|
|
12
|
-
export {};
|
|
13
|
-
//# sourceMappingURL=working-directory.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"working-directory.test.d.ts","sourceRoot":"","sources":["../../../src/tui/__tests__/working-directory.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The directory the agent actually works in.
|
|
3
|
-
*
|
|
4
|
-
* `--cwd` was parsed, and reached the session store and the skill search, and
|
|
5
|
-
* stopped there: the agent run itself was started with the PROCESS's directory,
|
|
6
|
-
* so a run pointed at another checkout globbed this one and reported finding
|
|
7
|
-
* nothing — which reads as "the file isn't there" rather than "I looked in the
|
|
8
|
-
* wrong place". Nothing caught it because no test ran a file tool against a
|
|
9
|
-
* directory that was not the process's own, so both directories were the same
|
|
10
|
-
* string in every assertion. These two do.
|
|
11
|
-
*/
|
|
12
|
-
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
13
|
-
import { tmpdir } from 'node:os';
|
|
14
|
-
import { join } from 'node:path';
|
|
15
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
16
|
-
import { getBuiltinTools } from '@namzu/sdk';
|
|
17
|
-
// Only `query` is replaced; everything else the module under test imports —
|
|
18
|
-
// the tool registry, the disk stores, the provider registry the vendor package
|
|
19
|
-
// registers into — stays real, because a fake of those would not be able to
|
|
20
|
-
// tell us which directory the real ones were handed.
|
|
21
|
-
const queryCalls = [];
|
|
22
|
-
vi.mock('@namzu/sdk', async (importOriginal) => {
|
|
23
|
-
const actual = await importOriginal();
|
|
24
|
-
return {
|
|
25
|
-
...actual,
|
|
26
|
-
query: (params) => {
|
|
27
|
-
queryCalls.push(params);
|
|
28
|
-
return (async function* () { })();
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
});
|
|
32
|
-
let workDir;
|
|
33
|
-
beforeEach(() => {
|
|
34
|
-
queryCalls.length = 0;
|
|
35
|
-
workDir = mkdtempSync(join(tmpdir(), 'namzu-cwd-'));
|
|
36
|
-
writeFileSync(join(workDir, 'notes.txt'), 'a file that only exists in the --cwd\n');
|
|
37
|
-
});
|
|
38
|
-
afterEach(() => {
|
|
39
|
-
rmSync(workDir, { recursive: true, force: true });
|
|
40
|
-
});
|
|
41
|
-
function toolContext(workingDirectory) {
|
|
42
|
-
return {
|
|
43
|
-
runId: 'run_test',
|
|
44
|
-
workingDirectory,
|
|
45
|
-
abortSignal: new AbortController().signal,
|
|
46
|
-
env: {},
|
|
47
|
-
log: () => { },
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
describe('a file tool resolves against the working directory it is given', () => {
|
|
51
|
-
it('finds a file that exists only outside the process directory', async () => {
|
|
52
|
-
const glob = getBuiltinTools().find((t) => t.name === 'glob');
|
|
53
|
-
expect(glob, 'the glob builtin is what the reported run called').toBeDefined();
|
|
54
|
-
const found = await glob?.execute({ pattern: '**/notes.txt' }, toolContext(workDir));
|
|
55
|
-
expect(found?.success).toBe(true);
|
|
56
|
-
expect(found?.data).toMatchObject({ count: 1 });
|
|
57
|
-
// The same call in the process's own directory is the reported failure:
|
|
58
|
-
// the file is real, and the answer is that there is no file. Asserted on
|
|
59
|
-
// the count, because the "no files found" text quotes the pattern back
|
|
60
|
-
// and so contains the filename either way.
|
|
61
|
-
const missed = await glob?.execute({ pattern: '**/notes.txt' }, toolContext(process.cwd()));
|
|
62
|
-
expect(missed?.data).toMatchObject({ count: 0 });
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
describe('createAgentSession runs where it is told to', () => {
|
|
66
|
-
const prefs = {
|
|
67
|
-
version: 2,
|
|
68
|
-
provider: 'anthropic',
|
|
69
|
-
subagents: { active: [] },
|
|
70
|
-
};
|
|
71
|
-
function detectedAnthropic() {
|
|
72
|
-
return [
|
|
73
|
-
{
|
|
74
|
-
entry: {
|
|
75
|
-
id: 'anthropic',
|
|
76
|
-
label: 'Anthropic',
|
|
77
|
-
defaultModel: 'claude-sonnet-4-5',
|
|
78
|
-
requiresApiKey: true,
|
|
79
|
-
envVars: ['ANTHROPIC_API_KEY'],
|
|
80
|
-
},
|
|
81
|
-
source: 'env',
|
|
82
|
-
apiKey: 'sk-ant-not-a-real-key',
|
|
83
|
-
alternatives: [],
|
|
84
|
-
},
|
|
85
|
-
];
|
|
86
|
-
}
|
|
87
|
-
it('passes the caller-supplied cwd to the run, not the process directory', async () => {
|
|
88
|
-
const { createAgentSession } = await import('../agent.js');
|
|
89
|
-
const session = await createAgentSession(prefs, detectedAnthropic(), { cwd: workDir });
|
|
90
|
-
expect(session.hasProvider).toBe(true);
|
|
91
|
-
for await (const _ of session.send([
|
|
92
|
-
{ role: 'user', content: 'read notes.txt', timestamp: 0 },
|
|
93
|
-
])) {
|
|
94
|
-
// drained; the assertion is on what `query` was handed
|
|
95
|
-
}
|
|
96
|
-
expect(queryCalls).toHaveLength(1);
|
|
97
|
-
expect(queryCalls[0].workingDirectory).toBe(workDir);
|
|
98
|
-
expect(queryCalls[0].workingDirectory).not.toBe(process.cwd());
|
|
99
|
-
});
|
|
100
|
-
it('falls back to the process directory when no cwd is supplied', async () => {
|
|
101
|
-
const { createAgentSession } = await import('../agent.js');
|
|
102
|
-
const session = await createAgentSession(prefs, detectedAnthropic());
|
|
103
|
-
for await (const _ of session.send([{ role: 'user', content: 'hello', timestamp: 0 }])) {
|
|
104
|
-
// drained
|
|
105
|
-
}
|
|
106
|
-
expect(queryCalls[0].workingDirectory).toBe(process.cwd());
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
//# sourceMappingURL=working-directory.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"working-directory.test.js","sourceRoot":"","sources":["../../../src/tui/__tests__/working-directory.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/agent.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent.test.d.ts","sourceRoot":"","sources":["../../src/tui/agent.test.ts"],"names":[],"mappings":""}
|
package/dist/tui/agent.test.js
DELETED
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { batchNeedsPrompt, makeResumeHandler, previewToolInput, toAgentEvent, toolEndDetail, toolStartDetail, } from './agent.js';
|
|
3
|
-
const runId = 'run_x';
|
|
4
|
-
const sessionId = 'ses_x';
|
|
5
|
-
const projectId = 'prj_x';
|
|
6
|
-
const toolUseId = 'toolu_x';
|
|
7
|
-
// Minimal envelope fields the RunEvent union carries beyond the discriminant.
|
|
8
|
-
const env = { schemaVersion: 1, runId, sessionId, projectId };
|
|
9
|
-
describe('toAgentEvent', () => {
|
|
10
|
-
it('maps text_delta to a delta', () => {
|
|
11
|
-
const ev = {
|
|
12
|
-
type: 'text_delta',
|
|
13
|
-
iteration: 0,
|
|
14
|
-
messageId: 'msg_1',
|
|
15
|
-
text: 'hello',
|
|
16
|
-
...env,
|
|
17
|
-
};
|
|
18
|
-
expect(toAgentEvent(ev)).toEqual({ kind: 'delta', text: 'hello' });
|
|
19
|
-
});
|
|
20
|
-
it('maps tool_executing to tool-start with a command summary', () => {
|
|
21
|
-
const ev = {
|
|
22
|
-
type: 'tool_executing',
|
|
23
|
-
toolUseId,
|
|
24
|
-
toolName: 'bash',
|
|
25
|
-
input: { command: 'ls -la /tmp' },
|
|
26
|
-
...env,
|
|
27
|
-
};
|
|
28
|
-
expect(toAgentEvent(ev)).toEqual({
|
|
29
|
-
kind: 'tool-start',
|
|
30
|
-
toolUseId,
|
|
31
|
-
toolName: 'bash',
|
|
32
|
-
summary: 'ls -la /tmp',
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
it('prefers a path field when there is no command', () => {
|
|
36
|
-
const ev = {
|
|
37
|
-
type: 'tool_executing',
|
|
38
|
-
toolUseId,
|
|
39
|
-
toolName: 'read',
|
|
40
|
-
input: { file_path: '/etc/hosts' },
|
|
41
|
-
...env,
|
|
42
|
-
};
|
|
43
|
-
expect(toAgentEvent(ev)).toEqual({
|
|
44
|
-
kind: 'tool-start',
|
|
45
|
-
toolUseId,
|
|
46
|
-
toolName: 'read',
|
|
47
|
-
summary: '/etc/hosts',
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
it('maps tool_completed to tool-end with a first-line summary + detail lines', () => {
|
|
51
|
-
const ev = {
|
|
52
|
-
type: 'tool_completed',
|
|
53
|
-
toolUseId,
|
|
54
|
-
toolName: 'bash',
|
|
55
|
-
result: 'multi\n line ',
|
|
56
|
-
isError: false,
|
|
57
|
-
...env,
|
|
58
|
-
};
|
|
59
|
-
expect(toAgentEvent(ev)).toEqual({
|
|
60
|
-
kind: 'tool-end',
|
|
61
|
-
toolUseId,
|
|
62
|
-
toolName: 'bash',
|
|
63
|
-
isError: false,
|
|
64
|
-
summary: 'multi',
|
|
65
|
-
detail: ['multi', ' line'],
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
it('maps run_completed to done and run_failed to error', () => {
|
|
69
|
-
expect(toAgentEvent({
|
|
70
|
-
type: 'run_completed',
|
|
71
|
-
result: 'ok',
|
|
72
|
-
...env,
|
|
73
|
-
})).toEqual({ kind: 'done' });
|
|
74
|
-
expect(toAgentEvent({
|
|
75
|
-
type: 'run_failed',
|
|
76
|
-
error: 'boom',
|
|
77
|
-
...env,
|
|
78
|
-
})).toEqual({ kind: 'error', message: 'boom' });
|
|
79
|
-
});
|
|
80
|
-
it('maps token_usage_updated to a usage event', () => {
|
|
81
|
-
expect(toAgentEvent({
|
|
82
|
-
type: 'token_usage_updated',
|
|
83
|
-
usage: { totalTokens: 1234 },
|
|
84
|
-
cost: { totalCost: 0.0456 },
|
|
85
|
-
...env,
|
|
86
|
-
})).toEqual({ kind: 'usage', totalTokens: 1234, costUsd: 0.0456 });
|
|
87
|
-
});
|
|
88
|
-
it('returns null for events the chat surface ignores', () => {
|
|
89
|
-
expect(toAgentEvent({
|
|
90
|
-
type: 'iteration_started',
|
|
91
|
-
iteration: 1,
|
|
92
|
-
...env,
|
|
93
|
-
})).toBeNull();
|
|
94
|
-
expect(toAgentEvent({
|
|
95
|
-
type: 'checkpoint_created',
|
|
96
|
-
...env,
|
|
97
|
-
})).toBeNull();
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
const checkpointId = 'cp_x';
|
|
101
|
-
const tc = (over) => ({
|
|
102
|
-
id: 'call_1',
|
|
103
|
-
name: 'read',
|
|
104
|
-
input: {},
|
|
105
|
-
isDestructive: false,
|
|
106
|
-
...over,
|
|
107
|
-
});
|
|
108
|
-
const toolReview = (toolCalls) => ({
|
|
109
|
-
type: 'tool_review',
|
|
110
|
-
runId,
|
|
111
|
-
checkpointId,
|
|
112
|
-
toolCalls,
|
|
113
|
-
});
|
|
114
|
-
describe('batchNeedsPrompt', () => {
|
|
115
|
-
it('does not prompt for read-only batches', () => {
|
|
116
|
-
expect(batchNeedsPrompt([tc({ name: 'read' }), tc({ name: 'glob' })])).toBe(false);
|
|
117
|
-
expect(batchNeedsPrompt([tc({ name: 'Grep' })])).toBe(false); // case-insensitive
|
|
118
|
-
});
|
|
119
|
-
it('prompts when any tool mutates or is flagged destructive', () => {
|
|
120
|
-
expect(batchNeedsPrompt([tc({ name: 'read' }), tc({ name: 'write' })])).toBe(true);
|
|
121
|
-
expect(batchNeedsPrompt([tc({ name: 'edit' })])).toBe(true);
|
|
122
|
-
expect(batchNeedsPrompt([tc({ name: 'bash', isDestructive: true })])).toBe(true);
|
|
123
|
-
});
|
|
124
|
-
it('prompts for unknown/future tools (safe-by-default)', () => {
|
|
125
|
-
expect(batchNeedsPrompt([tc({ name: 'SomeClawtoolThing' })])).toBe(true);
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
describe('previewToolInput', () => {
|
|
129
|
-
it('previews write content with a head + overflow note', () => {
|
|
130
|
-
const content = Array.from({ length: 12 }, (_, i) => `line${i}`).join('\n');
|
|
131
|
-
const preview = previewToolInput('write', { path: '/x', content });
|
|
132
|
-
expect(preview?.[0]).toBe('line0');
|
|
133
|
-
expect(preview?.at(-1)).toContain('+4 more lines');
|
|
134
|
-
});
|
|
135
|
-
it('previews edit as -old / +new diff lines', () => {
|
|
136
|
-
const preview = previewToolInput('edit', {
|
|
137
|
-
path: '/x',
|
|
138
|
-
old_string: 'foo',
|
|
139
|
-
new_string: 'bar',
|
|
140
|
-
});
|
|
141
|
-
expect(preview).toEqual(['- foo', '+ bar']);
|
|
142
|
-
});
|
|
143
|
-
it('returns undefined for non-previewable tools', () => {
|
|
144
|
-
expect(previewToolInput('bash', { command: 'ls' })).toBeUndefined();
|
|
145
|
-
expect(previewToolInput('read', { path: '/x' })).toBeUndefined();
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
describe('makeResumeHandler', () => {
|
|
149
|
-
it('auto-approves read-only batches without calling onPermission', async () => {
|
|
150
|
-
const onPermission = vi.fn();
|
|
151
|
-
const handler = makeResumeHandler({ all: false }, onPermission);
|
|
152
|
-
const decision = await handler(toolReview([tc({ name: 'read' })]));
|
|
153
|
-
expect(decision).toEqual({ action: 'approve_tools' });
|
|
154
|
-
expect(onPermission).not.toHaveBeenCalled();
|
|
155
|
-
});
|
|
156
|
-
it('prompts for destructive batches and maps approve', async () => {
|
|
157
|
-
const onPermission = vi.fn(async () => ({ kind: 'approve' }));
|
|
158
|
-
const handler = makeResumeHandler({ all: false }, onPermission);
|
|
159
|
-
const decision = await handler(toolReview([tc({ name: 'write' })]));
|
|
160
|
-
expect(onPermission).toHaveBeenCalledOnce();
|
|
161
|
-
expect(decision).toEqual({ action: 'approve_tools' });
|
|
162
|
-
});
|
|
163
|
-
it('maps reject to reject_tools with feedback', async () => {
|
|
164
|
-
const onPermission = vi.fn(async () => ({ kind: 'reject', feedback: 'no' }));
|
|
165
|
-
const handler = makeResumeHandler({ all: false }, onPermission);
|
|
166
|
-
const decision = await handler(toolReview([tc({ name: 'bash', isDestructive: true })]));
|
|
167
|
-
expect(decision).toEqual({ action: 'reject_tools', feedback: 'no' });
|
|
168
|
-
});
|
|
169
|
-
it('approve-all flips the session flag so later batches skip the prompt', async () => {
|
|
170
|
-
const approval = { all: false };
|
|
171
|
-
const onPermission = vi.fn(async () => ({ kind: 'approve-all' }));
|
|
172
|
-
const handler = makeResumeHandler(approval, onPermission);
|
|
173
|
-
await handler(toolReview([tc({ name: 'write' })]));
|
|
174
|
-
expect(approval.all).toBe(true);
|
|
175
|
-
await handler(toolReview([tc({ name: 'edit' })]));
|
|
176
|
-
expect(onPermission).toHaveBeenCalledOnce(); // second batch not prompted
|
|
177
|
-
});
|
|
178
|
-
it('auto-approves everything when no onPermission is supplied', async () => {
|
|
179
|
-
const handler = makeResumeHandler({ all: false }, undefined);
|
|
180
|
-
expect(await handler(toolReview([tc({ name: 'write' })]))).toEqual({
|
|
181
|
-
action: 'approve_tools',
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
it('approves plans and continues checkpoints', async () => {
|
|
185
|
-
const handler = makeResumeHandler({ all: false }, vi.fn());
|
|
186
|
-
expect(await handler({
|
|
187
|
-
type: 'plan_approval',
|
|
188
|
-
runId,
|
|
189
|
-
checkpointId,
|
|
190
|
-
plan: { planId: 'plan_x', title: 't', steps: [] },
|
|
191
|
-
})).toEqual({ action: 'approve_plan' });
|
|
192
|
-
expect(await handler({
|
|
193
|
-
type: 'iteration_checkpoint',
|
|
194
|
-
runId,
|
|
195
|
-
checkpointId,
|
|
196
|
-
summary: {},
|
|
197
|
-
})).toEqual({ action: 'continue' });
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
describe('toolStartDetail', () => {
|
|
201
|
-
it('builds a -old/+new diff for edit', () => {
|
|
202
|
-
expect(toolStartDetail('edit', { path: '/x', old_string: 'a\nb', new_string: 'a\nc' })).toEqual(['- a', '- b', '+ a', '+ c']);
|
|
203
|
-
});
|
|
204
|
-
it('returns the content lines for write', () => {
|
|
205
|
-
expect(toolStartDetail('write', { path: '/x', content: 'one\ntwo' })).toEqual(['one', 'two']);
|
|
206
|
-
});
|
|
207
|
-
it('returns undefined for non-mutating tools', () => {
|
|
208
|
-
expect(toolStartDetail('bash', { command: 'ls' })).toBeUndefined();
|
|
209
|
-
expect(toolStartDetail('read', { file_path: '/x' })).toBeUndefined();
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
describe('toolEndDetail', () => {
|
|
213
|
-
it('returns output lines for read/bash', () => {
|
|
214
|
-
expect(toolEndDetail('bash', 'line1\nline2')).toEqual(['line1', 'line2']);
|
|
215
|
-
});
|
|
216
|
-
it('returns undefined for edit/write (diff already shown at call time)', () => {
|
|
217
|
-
expect(toolEndDetail('edit', 'Updated /x')).toBeUndefined();
|
|
218
|
-
expect(toolEndDetail('write', 'Wrote /x')).toBeUndefined();
|
|
219
|
-
});
|
|
220
|
-
it('returns undefined for single-line or empty results', () => {
|
|
221
|
-
expect(toolEndDetail('bash', 'ok')).toBeUndefined();
|
|
222
|
-
expect(toolEndDetail('bash', ' ')).toBeUndefined();
|
|
223
|
-
});
|
|
224
|
-
});
|
|
225
|
-
//# sourceMappingURL=agent.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent.test.js","sourceRoot":"","sources":["../../src/tui/agent.test.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEjD,OAAO,EAGN,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,eAAe,GACf,MAAM,YAAY,CAAA;AAEnB,MAAM,KAAK,GAAG,OAAgB,CAAA;AAC9B,MAAM,SAAS,GAAG,OAAoB,CAAA;AACtC,MAAM,SAAS,GAAG,OAAoB,CAAA;AACtC,MAAM,SAAS,GAAG,SAAsB,CAAA;AAExC,8EAA8E;AAC9E,MAAM,GAAG,GAAG,EAAE,aAAa,EAAE,CAAU,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;AAEtE,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACrC,MAAM,EAAE,GAAG;YACV,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,OAAO;YAClB,IAAI,EAAE,OAAO;YACb,GAAG,GAAG;SACiB,CAAA;QACxB,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACnE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QACnE,MAAM,EAAE,GAAG;YACV,IAAI,EAAE,gBAAgB;YACtB,SAAS;YACT,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;YACjC,GAAG,GAAG;SACiB,CAAA;QACxB,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAChC,IAAI,EAAE,YAAY;YAClB,SAAS;YACT,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,aAAa;SACtB,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACxD,MAAM,EAAE,GAAG;YACV,IAAI,EAAE,gBAAgB;YACtB,SAAS;YACT,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;YAClC,GAAG,GAAG;SACiB,CAAA;QACxB,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAChC,IAAI,EAAE,YAAY;YAClB,SAAS;YACT,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,YAAY;SACrB,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QACnF,MAAM,EAAE,GAAG;YACV,IAAI,EAAE,gBAAgB;YACtB,SAAS;YACT,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,iBAAiB;YACzB,OAAO,EAAE,KAAK;YACd,GAAG,GAAG;SACiB,CAAA;QACxB,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAChC,IAAI,EAAE,UAAU;YAChB,SAAS;YACT,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;SAC3B,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,MAAM,CACL,YAAY,CAAC;YACZ,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,IAAI;YACZ,GAAG,GAAG;SACiB,CAAC,CACzB,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3B,MAAM,CACL,YAAY,CAAC;YACZ,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,MAAM;YACb,GAAG,GAAG;SACiB,CAAC,CACzB,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACpD,MAAM,CACL,YAAY,CAAC;YACZ,IAAI,EAAE,qBAAqB;YAC3B,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;YAC5B,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;YAC3B,GAAG,GAAG;SACiB,CAAC,CACzB,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC3D,MAAM,CACL,YAAY,CAAC;YACZ,IAAI,EAAE,mBAAmB;YACzB,SAAS,EAAE,CAAC;YACZ,GAAG,GAAG;SACiB,CAAC,CACzB,CAAC,QAAQ,EAAE,CAAA;QACZ,MAAM,CACL,YAAY,CAAC;YACZ,IAAI,EAAE,oBAAoB;YAC1B,GAAG,GAAG;SACiB,CAAC,CACzB,CAAC,QAAQ,EAAE,CAAA;IACb,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,MAAsB,CAAA;AAC3C,MAAM,EAAE,GAAG,CAAC,IAA8B,EAAmB,EAAE,CAAC,CAAC;IAChE,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,EAAE;IACT,aAAa,EAAE,KAAK;IACpB,GAAG,IAAI;CACP,CAAC,CAAA;AACF,MAAM,UAAU,GAAG,CAAC,SAA4B,EAAuB,EAAE,CAAC,CAAC;IAC1E,IAAI,EAAE,aAAa;IACnB,KAAK;IACL,YAAY;IACZ,SAAS;CACT,CAAC,CAAA;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClF,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAC,mBAAmB;IACjF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClF,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3D,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3E,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAClE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QAClD,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE;YACxC,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;SACjB,CAAC,CAAA;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;QACnE,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;IACjE,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAyD,CAAA;QACnF,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,CAAA;QAC/D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAClE,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAA;QACrD,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAuB,CAAC,CAAA;QACnF,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,CAAA;QAC/D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACnE,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,EAAE,CAAA;QAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CACzB,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAuB,CACtE,CAAA;QACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,CAAA;QAC/D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACvF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;QAC/B,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAuB,CAAC,CAAA;QACvF,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QACzD,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAClD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/B,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACjD,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,EAAE,CAAA,CAAC,4BAA4B;IACzE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,SAAS,CAAC,CAAA;QAC5D,MAAM,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAClE,MAAM,EAAE,eAAe;SACvB,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;QAC1D,MAAM,CACL,MAAM,OAAO,CAAC;YACb,IAAI,EAAE,eAAe;YACrB,KAAK;YACL,YAAY;YACZ,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;SAC1B,CAAC,CACzB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;QACrC,MAAM,CACL,MAAM,OAAO,CAAC;YACb,IAAI,EAAE,sBAAsB;YAC5B,KAAK;YACL,YAAY;YACZ,OAAO,EAAE,EAAE;SACuB,CAAC,CACpC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAC9F,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAC5B,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IAC9F,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;QAClE,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;IACrE,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC7E,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;QAC3D,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;QACnD,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;IACrD,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdownParser.test.d.ts","sourceRoot":"","sources":["../../src/tui/markdownParser.test.ts"],"names":[],"mappings":""}
|