thatgfsj-code 2.2.9 → 3.0.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/CHANGELOG.md +15 -67
- package/dist/app/index.d.ts +28 -5
- package/dist/app/index.d.ts.map +1 -1
- package/dist/app/index.js +69 -10
- package/dist/app/index.js.map +1 -1
- package/dist/cache/fingerprint.d.ts +49 -0
- package/dist/cache/fingerprint.d.ts.map +1 -0
- package/dist/cache/fingerprint.js +100 -0
- package/dist/cache/fingerprint.js.map +1 -0
- package/dist/cache/index.d.ts +15 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +15 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/smartModel.d.ts +40 -0
- package/dist/cache/smartModel.d.ts.map +1 -0
- package/dist/cache/smartModel.js +43 -0
- package/dist/cache/smartModel.js.map +1 -0
- package/dist/cache/stats.d.ts +93 -0
- package/dist/cache/stats.d.ts.map +1 -0
- package/dist/cache/stats.js +155 -0
- package/dist/cache/stats.js.map +1 -0
- package/dist/cache/volatile.d.ts +32 -0
- package/dist/cache/volatile.d.ts.map +1 -0
- package/dist/cache/volatile.js +44 -0
- package/dist/cache/volatile.js.map +1 -0
- package/dist/cmd/index.js +49 -57
- package/dist/cmd/index.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +8 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/types.d.ts +14 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/llm/anthropic.d.ts +55 -5
- package/dist/llm/anthropic.d.ts.map +1 -1
- package/dist/llm/anthropic.js +172 -26
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/index.d.ts +26 -8
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +83 -15
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/openai.d.ts +28 -8
- package/dist/llm/openai.d.ts.map +1 -1
- package/dist/llm/openai.js +58 -8
- package/dist/llm/openai.js.map +1 -1
- package/dist/llm/provider.d.ts +40 -8
- package/dist/llm/provider.d.ts.map +1 -1
- package/dist/llm/provider.js +8 -1
- package/dist/llm/provider.js.map +1 -1
- package/dist/prompts/index.d.ts +32 -0
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +33 -11
- package/dist/prompts/index.js.map +1 -1
- package/dist/session/index.d.ts +32 -3
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +51 -36
- package/dist/session/index.js.map +1 -1
- package/dist/skills/brainstorming.js +33 -33
- package/dist/skills/code-review.js +35 -35
- package/dist/skills/executing-plans.js +18 -18
- package/dist/skills/frontend-design.js +25 -25
- package/dist/skills/git-workflow.js +26 -26
- package/dist/skills/improve-architecture.js +28 -28
- package/dist/skills/neuroweave.js +37 -37
- package/dist/skills/playwright.js +62 -62
- package/dist/skills/prototype.js +20 -20
- package/dist/skills/subagent.js +19 -19
- package/dist/skills/supabase.js +34 -34
- package/dist/skills/systematic-debugging.js +34 -34
- package/dist/skills/tdd.js +29 -29
- package/dist/skills/triage.js +25 -25
- package/dist/skills/verification.js +22 -22
- package/dist/skills/writing-plans.js +32 -32
- package/dist/tools/nwt.js +16 -16
- package/dist/tui/app.d.ts.map +1 -1
- package/dist/tui/app.js +9 -2
- package/dist/tui/app.js.map +1 -1
- package/dist/tui/components/Header.d.ts +8 -0
- package/dist/tui/components/Header.d.ts.map +1 -1
- package/dist/tui/components/Header.js +17 -4
- package/dist/tui/components/Header.js.map +1 -1
- package/dist/tui/components/InitWizard.d.ts +12 -1
- package/dist/tui/components/InitWizard.d.ts.map +1 -1
- package/dist/tui/components/InitWizard.js +58 -3
- package/dist/tui/components/InitWizard.js.map +1 -1
- package/dist/tui/components/ToolCall.d.ts.map +1 -1
- package/dist/tui/components/ToolCall.js +1 -6
- package/dist/tui/components/ToolCall.js.map +1 -1
- package/dist/tui/hooks/useChat.d.ts +22 -0
- package/dist/tui/hooks/useChat.d.ts.map +1 -1
- package/dist/tui/hooks/useChat.js +82 -46
- package/dist/tui/hooks/useChat.js.map +1 -1
- package/dist/tui/hooks/useCommands.d.ts.map +1 -1
- package/dist/tui/hooks/useCommands.js +57 -0
- package/dist/tui/hooks/useCommands.js.map +1 -1
- package/dist/tui/welcome.d.ts.map +1 -1
- package/dist/tui/welcome.js +2 -3
- package/dist/tui/welcome.js.map +1 -1
- package/dist/types.d.ts +79 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/stableStringify.d.ts +21 -0
- package/dist/utils/stableStringify.d.ts.map +1 -0
- package/dist/utils/stableStringify.js +53 -0
- package/dist/utils/stableStringify.js.map +1 -0
- package/dist/utils/thinking.d.ts.map +1 -1
- package/dist/utils/thinking.js +0 -3
- package/dist/utils/thinking.js.map +1 -1
- package/package.json +6 -6
- package/src/app/index.ts +180 -124
- package/src/cache/fingerprint.ts +101 -0
- package/src/cache/index.ts +15 -0
- package/src/cache/smartModel.ts +52 -0
- package/src/cache/stats.ts +199 -0
- package/src/cache/volatile.ts +47 -0
- package/src/cmd/index.tsx +288 -292
- package/src/config/index.ts +156 -148
- package/src/config/providers.ts +234 -234
- package/src/config/types.ts +67 -53
- package/src/hooks/index.ts +111 -111
- package/src/llm/anthropic.ts +388 -243
- package/src/llm/gemini.ts +169 -169
- package/src/llm/index.ts +265 -200
- package/src/llm/openai.ts +243 -196
- package/src/llm/provider.ts +66 -34
- package/src/prompts/index.ts +260 -220
- package/src/session/compactor.ts +103 -103
- package/src/session/index.ts +181 -168
- package/src/session/message.ts +42 -42
- package/src/skills/brainstorming.ts +43 -43
- package/src/skills/code-review.ts +45 -45
- package/src/skills/executing-plans.ts +27 -27
- package/src/skills/frontend-design.ts +35 -35
- package/src/skills/git-workflow.ts +36 -36
- package/src/skills/improve-architecture.ts +38 -38
- package/src/skills/index.ts +136 -136
- package/src/skills/neuroweave.ts +47 -47
- package/src/skills/playwright.ts +72 -72
- package/src/skills/prototype.ts +30 -30
- package/src/skills/subagent.ts +28 -28
- package/src/skills/supabase.ts +44 -44
- package/src/skills/systematic-debugging.ts +44 -44
- package/src/skills/tdd.ts +39 -39
- package/src/skills/triage.ts +35 -35
- package/src/skills/verification.ts +31 -31
- package/src/skills/writing-plans.ts +42 -42
- package/src/tools/nwt.ts +598 -598
- package/src/tools/types.ts +122 -122
- package/src/tui/app.tsx +199 -186
- package/src/tui/components/ChatList.tsx +41 -41
- package/src/tui/components/ChatMessage.tsx +54 -54
- package/src/tui/components/Header.tsx +56 -29
- package/src/tui/components/InitWizard.tsx +217 -132
- package/src/tui/components/Markdown.tsx +35 -35
- package/src/tui/components/ModelSelector.tsx +87 -87
- package/src/tui/components/StatusBar.tsx +30 -30
- package/src/tui/components/Thinking.tsx +17 -17
- package/src/tui/components/ToolCall.tsx +102 -107
- package/src/tui/components/UserInput.tsx +131 -131
- package/src/tui/hooks/useChat.ts +287 -238
- package/src/tui/hooks/useCommands.ts +234 -176
- package/src/tui/index.ts +6 -6
- package/src/tui/welcome.ts +177 -178
- package/src/types.ts +104 -42
- package/src/utils/diff.ts +71 -71
- package/src/utils/project.ts +99 -99
- package/src/utils/stableStringify.ts +47 -0
- package/src/utils/thinking.ts +118 -121
- package/tests/cache/fingerprint.test.ts +75 -0
- package/tests/cache/stableStringify.test.ts +43 -0
- package/tests/cache/stats.test.ts +146 -0
- package/tests/cache/volatile.test.ts +75 -0
- package/tests/smoke-pollution.mjs +78 -0
- package/tests/smoke-thinking.mjs +110 -0
- package/tests/smoke-tool-stream.mjs +69 -0
- package/tests/smoke-tool.mjs +117 -0
- package/.nwt/meta.json +0 -5
- package/dist/version.d.ts +0 -16
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -16
- package/dist/version.js.map +0 -1
- package/src/version.ts +0 -16
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache statistics store.
|
|
3
|
+
*
|
|
4
|
+
* Tracks per-round cache hit/miss token counts across the user's local
|
|
5
|
+
* sessions and persists them to `~/.thatgfsj/cache-stats.json`. The store
|
|
6
|
+
* is consumed by:
|
|
7
|
+
* - the TUI Header (`⚡ 命中率 87%`)
|
|
8
|
+
* - the /cache CLI command (detailed breakdown)
|
|
9
|
+
* - the /cache reset command (clears the file)
|
|
10
|
+
*
|
|
11
|
+
* Provider-agnostic. Anthropic reports cache_creation_input_tokens /
|
|
12
|
+
* cache_read_input_tokens; DeepSeek reports prompt_cache_hit_tokens /
|
|
13
|
+
* prompt_cache_miss_tokens; OpenAI does not surface any cache stats at
|
|
14
|
+
* all (their automatic cache is invisible to the client). We normalize
|
|
15
|
+
* both shapes into a single internal model.
|
|
16
|
+
*
|
|
17
|
+
* Cost estimation is intentionally simplified:
|
|
18
|
+
* - cache_read = 10% of normal input price
|
|
19
|
+
* - cache_creation = 125% of normal input price (Anthropic charges extra
|
|
20
|
+
* on first write)
|
|
21
|
+
* - We compare against the baseline "what would this have cost without
|
|
22
|
+
* caching" and report the delta as estimated savings.
|
|
23
|
+
*
|
|
24
|
+
* Prices are in CNY per million tokens. Defaults reflect Anthropic Claude
|
|
25
|
+
* Sonnet on the official API; users on cheaper providers may see savings
|
|
26
|
+
* proportional to their actual price floor. The numbers are *estimates*
|
|
27
|
+
* — the goal is to give the user a sense of order of magnitude, not a
|
|
28
|
+
* billable invoice.
|
|
29
|
+
*/
|
|
30
|
+
import type { Usage } from '../types.js';
|
|
31
|
+
export interface CacheStats {
|
|
32
|
+
/** Total tokens served from cache (Anthropic cache_read / DeepSeek hit). */
|
|
33
|
+
totalReadTokens: number;
|
|
34
|
+
/** Total tokens written into cache (Anthropic cache_creation / DeepSeek miss prefix written). */
|
|
35
|
+
totalCreationTokens: number;
|
|
36
|
+
/** Total input tokens (prompt_tokens). */
|
|
37
|
+
totalInputTokens: number;
|
|
38
|
+
/** Total output tokens. */
|
|
39
|
+
totalOutputTokens: number;
|
|
40
|
+
/** Number of completed rounds. */
|
|
41
|
+
totalRequests: number;
|
|
42
|
+
/** Last N round snapshots (oldest first). */
|
|
43
|
+
history: Array<{
|
|
44
|
+
ts: number;
|
|
45
|
+
read: number;
|
|
46
|
+
creation: number;
|
|
47
|
+
input: number;
|
|
48
|
+
output: number;
|
|
49
|
+
hitRate: number;
|
|
50
|
+
}>;
|
|
51
|
+
}
|
|
52
|
+
export interface CacheSnapshot extends CacheStats {
|
|
53
|
+
/** 0..1 ratio of cached tokens to total input tokens. */
|
|
54
|
+
hitRate: number;
|
|
55
|
+
/** Estimated CNY saved vs uncached baseline. */
|
|
56
|
+
estimatedSavingsCNY: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Estimate the CNY saved by cache_read vs a hypothetical uncached baseline.
|
|
60
|
+
* Negative values are clamped to zero (e.g. a relay station that returned
|
|
61
|
+
* bogus cache stats).
|
|
62
|
+
*/
|
|
63
|
+
export declare function estimateSavingsCNY(stats: CacheStats): number;
|
|
64
|
+
/**
|
|
65
|
+
* Persists cache stats to disk. Safe to call from a hot path — uses atomic
|
|
66
|
+
* write (write to .tmp, rename) to avoid corruption on crash.
|
|
67
|
+
*/
|
|
68
|
+
export declare class CacheStatsStore {
|
|
69
|
+
private stats;
|
|
70
|
+
private path;
|
|
71
|
+
constructor(path?: string);
|
|
72
|
+
/**
|
|
73
|
+
* Record a single round's usage. Provider-agnostic: accepts both Anthropic
|
|
74
|
+
* (cache_creation_input_tokens / cache_read_input_tokens) and DeepSeek
|
|
75
|
+
* (prompt_cache_hit_tokens / prompt_cache_miss_tokens) shapes. If a
|
|
76
|
+
* provider returned neither (e.g. OpenAI), the call is a no-op apart
|
|
77
|
+
* from updating totalRequest count.
|
|
78
|
+
*/
|
|
79
|
+
record(usage: Usage): void;
|
|
80
|
+
/**
|
|
81
|
+
* Reset the stats. Used by `/cache reset`.
|
|
82
|
+
*/
|
|
83
|
+
reset(): void;
|
|
84
|
+
/**
|
|
85
|
+
* Read-only snapshot for rendering (TUI Header, /cache command).
|
|
86
|
+
*/
|
|
87
|
+
snapshot(): CacheSnapshot;
|
|
88
|
+
/** Direct accessor for tests. */
|
|
89
|
+
get raw(): CacheStats;
|
|
90
|
+
private load;
|
|
91
|
+
private save;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/cache/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAazC,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB,iGAAiG;IACjG,mBAAmB,EAAE,MAAM,CAAC;IAC5B,0CAA0C;IAC1C,gBAAgB,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,OAAO,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAWD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAI5D;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,IAAI,CAAS;gBAET,IAAI,CAAC,EAAE,MAAM;IAKzB;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA6B1B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,QAAQ,IAAI,aAAa;IAWzB,iCAAiC;IACjC,IAAI,GAAG,IAAI,UAAU,CAAuB;IAI5C,OAAO,CAAC,IAAI;IAmBZ,OAAO,CAAC,IAAI;CAQb"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache statistics store.
|
|
3
|
+
*
|
|
4
|
+
* Tracks per-round cache hit/miss token counts across the user's local
|
|
5
|
+
* sessions and persists them to `~/.thatgfsj/cache-stats.json`. The store
|
|
6
|
+
* is consumed by:
|
|
7
|
+
* - the TUI Header (`⚡ 命中率 87%`)
|
|
8
|
+
* - the /cache CLI command (detailed breakdown)
|
|
9
|
+
* - the /cache reset command (clears the file)
|
|
10
|
+
*
|
|
11
|
+
* Provider-agnostic. Anthropic reports cache_creation_input_tokens /
|
|
12
|
+
* cache_read_input_tokens; DeepSeek reports prompt_cache_hit_tokens /
|
|
13
|
+
* prompt_cache_miss_tokens; OpenAI does not surface any cache stats at
|
|
14
|
+
* all (their automatic cache is invisible to the client). We normalize
|
|
15
|
+
* both shapes into a single internal model.
|
|
16
|
+
*
|
|
17
|
+
* Cost estimation is intentionally simplified:
|
|
18
|
+
* - cache_read = 10% of normal input price
|
|
19
|
+
* - cache_creation = 125% of normal input price (Anthropic charges extra
|
|
20
|
+
* on first write)
|
|
21
|
+
* - We compare against the baseline "what would this have cost without
|
|
22
|
+
* caching" and report the delta as estimated savings.
|
|
23
|
+
*
|
|
24
|
+
* Prices are in CNY per million tokens. Defaults reflect Anthropic Claude
|
|
25
|
+
* Sonnet on the official API; users on cheaper providers may see savings
|
|
26
|
+
* proportional to their actual price floor. The numbers are *estimates*
|
|
27
|
+
* — the goal is to give the user a sense of order of magnitude, not a
|
|
28
|
+
* billable invoice.
|
|
29
|
+
*/
|
|
30
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
31
|
+
import { dirname, join } from 'path';
|
|
32
|
+
import { homedir } from 'os';
|
|
33
|
+
/** Per-million-token price in CNY. Adjust if your provider differs significantly. */
|
|
34
|
+
const PRICE = {
|
|
35
|
+
normalInput: 3,
|
|
36
|
+
cacheRead: 0.3,
|
|
37
|
+
cacheCreation: 3.75,
|
|
38
|
+
output: 15,
|
|
39
|
+
};
|
|
40
|
+
/** Maximum number of recent rounds kept in the history array (rolling window). */
|
|
41
|
+
const HISTORY_LIMIT = 50;
|
|
42
|
+
const EMPTY_STATS = {
|
|
43
|
+
totalReadTokens: 0,
|
|
44
|
+
totalCreationTokens: 0,
|
|
45
|
+
totalInputTokens: 0,
|
|
46
|
+
totalOutputTokens: 0,
|
|
47
|
+
totalRequests: 0,
|
|
48
|
+
history: [],
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Estimate the CNY saved by cache_read vs a hypothetical uncached baseline.
|
|
52
|
+
* Negative values are clamped to zero (e.g. a relay station that returned
|
|
53
|
+
* bogus cache stats).
|
|
54
|
+
*/
|
|
55
|
+
export function estimateSavingsCNY(stats) {
|
|
56
|
+
const baselineCost = (stats.totalReadTokens / 1e6) * PRICE.normalInput;
|
|
57
|
+
const cachedCost = (stats.totalReadTokens / 1e6) * PRICE.cacheRead;
|
|
58
|
+
return Math.max(0, baselineCost - cachedCost);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Persists cache stats to disk. Safe to call from a hot path — uses atomic
|
|
62
|
+
* write (write to .tmp, rename) to avoid corruption on crash.
|
|
63
|
+
*/
|
|
64
|
+
export class CacheStatsStore {
|
|
65
|
+
stats;
|
|
66
|
+
path;
|
|
67
|
+
constructor(path) {
|
|
68
|
+
this.path = path ?? join(homedir(), '.thatgfsj', 'cache-stats.json');
|
|
69
|
+
this.stats = this.load();
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Record a single round's usage. Provider-agnostic: accepts both Anthropic
|
|
73
|
+
* (cache_creation_input_tokens / cache_read_input_tokens) and DeepSeek
|
|
74
|
+
* (prompt_cache_hit_tokens / prompt_cache_miss_tokens) shapes. If a
|
|
75
|
+
* provider returned neither (e.g. OpenAI), the call is a no-op apart
|
|
76
|
+
* from updating totalRequest count.
|
|
77
|
+
*/
|
|
78
|
+
record(usage) {
|
|
79
|
+
const read = usage.cache_read_input_tokens ?? usage.prompt_cache_hit_tokens ?? 0;
|
|
80
|
+
const creation = usage.cache_creation_input_tokens
|
|
81
|
+
?? (usage.prompt_cache_miss_tokens ?? 0);
|
|
82
|
+
const input = usage.prompt_tokens ?? 0;
|
|
83
|
+
const output = usage.completion_tokens ?? 0;
|
|
84
|
+
// Avoid double-counting: if the provider reported both cache_creation
|
|
85
|
+
// and prompt_cache_miss_tokens we'd otherwise sum them. The ?? in the
|
|
86
|
+
// chain above only uses prompt_cache_miss_tokens when
|
|
87
|
+
// cache_creation_input_tokens is undefined, which is what we want.
|
|
88
|
+
this.stats.totalReadTokens += read;
|
|
89
|
+
this.stats.totalCreationTokens += creation;
|
|
90
|
+
this.stats.totalInputTokens += input;
|
|
91
|
+
this.stats.totalOutputTokens += output;
|
|
92
|
+
this.stats.totalRequests += 1;
|
|
93
|
+
// Per-round snapshot (for /cache command history view).
|
|
94
|
+
const total = read + (input - read);
|
|
95
|
+
const hitRate = total > 0 ? read / total : 0;
|
|
96
|
+
this.stats.history.push({ ts: Date.now(), read, creation, input, output, hitRate });
|
|
97
|
+
if (this.stats.history.length > HISTORY_LIMIT) {
|
|
98
|
+
this.stats.history.splice(0, this.stats.history.length - HISTORY_LIMIT);
|
|
99
|
+
}
|
|
100
|
+
this.save();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Reset the stats. Used by `/cache reset`.
|
|
104
|
+
*/
|
|
105
|
+
reset() {
|
|
106
|
+
this.stats = { ...EMPTY_STATS, history: [] };
|
|
107
|
+
this.save();
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Read-only snapshot for rendering (TUI Header, /cache command).
|
|
111
|
+
*/
|
|
112
|
+
snapshot() {
|
|
113
|
+
const input = this.stats.totalInputTokens;
|
|
114
|
+
const read = this.stats.totalReadTokens;
|
|
115
|
+
const hitRate = input > 0 ? read / input : 0;
|
|
116
|
+
return {
|
|
117
|
+
...this.stats,
|
|
118
|
+
hitRate,
|
|
119
|
+
estimatedSavingsCNY: estimateSavingsCNY(this.stats),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/** Direct accessor for tests. */
|
|
123
|
+
get raw() { return this.stats; }
|
|
124
|
+
// -- I/O --
|
|
125
|
+
load() {
|
|
126
|
+
try {
|
|
127
|
+
if (!existsSync(this.path))
|
|
128
|
+
return { ...EMPTY_STATS, history: [] };
|
|
129
|
+
const txt = readFileSync(this.path, 'utf-8');
|
|
130
|
+
const parsed = JSON.parse(txt);
|
|
131
|
+
// Tolerate partial / older shapes.
|
|
132
|
+
return {
|
|
133
|
+
totalReadTokens: parsed.totalReadTokens ?? 0,
|
|
134
|
+
totalCreationTokens: parsed.totalCreationTokens ?? 0,
|
|
135
|
+
totalInputTokens: parsed.totalInputTokens ?? 0,
|
|
136
|
+
totalOutputTokens: parsed.totalOutputTokens ?? 0,
|
|
137
|
+
totalRequests: parsed.totalRequests ?? 0,
|
|
138
|
+
history: Array.isArray(parsed.history) ? parsed.history : [],
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return { ...EMPTY_STATS, history: [] };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
save() {
|
|
146
|
+
try {
|
|
147
|
+
mkdirSync(dirname(this.path), { recursive: true });
|
|
148
|
+
writeFileSync(this.path, JSON.stringify(this.stats, null, 2), 'utf-8');
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// best-effort persistence; do not crash the chat loop on disk errors
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/cache/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VolatileScratch — per-round reasoning / planning state that MUST NOT be
|
|
3
|
+
* uploaded to the API.
|
|
4
|
+
*
|
|
5
|
+
* Reasonix Principle #3 (Volatile Scratch):
|
|
6
|
+
* The model's thinking content, intermediate plans, and other
|
|
7
|
+
* intra-round state should never be appended to the conversation
|
|
8
|
+
* history. They are useful for the UI (so users can debug / audit
|
|
9
|
+
* reasoning) and for cross-iteration handoff within the same round
|
|
10
|
+
* (e.g. retry-after-tool-failure), but they are NOT part of the cache
|
|
11
|
+
* prefix and re-uploading them in the next round would:
|
|
12
|
+
* 1. waste tokens (potentially a lot — reasoning can dwarf the answer)
|
|
13
|
+
* 2. cause context-window pressure
|
|
14
|
+
* 3. risk leaking partial / contradictory reasoning back to the model
|
|
15
|
+
*
|
|
16
|
+
* Usage (in LLMService / useChat when receiving 'thinking' chunks):
|
|
17
|
+
* scratch.write(chunk.content);
|
|
18
|
+
* // ... later in the same round ...
|
|
19
|
+
* scratch.read(); // → joined reasoning so far
|
|
20
|
+
* scratch.reset(); // → call at end of round OR on /new
|
|
21
|
+
*/
|
|
22
|
+
export declare class VolatileScratch {
|
|
23
|
+
private current;
|
|
24
|
+
reset(): void;
|
|
25
|
+
write(data: string): void;
|
|
26
|
+
read(): string;
|
|
27
|
+
/** True when no scratch has been written since the last reset. */
|
|
28
|
+
isEmpty(): boolean;
|
|
29
|
+
/** Number of segments written. Useful for UI display ("thought for N lines"). */
|
|
30
|
+
size(): number;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=volatile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volatile.d.ts","sourceRoot":"","sources":["../../src/cache/volatile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAgB;IAE/B,KAAK,IAAI,IAAI;IAIb,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKzB,IAAI,IAAI,MAAM;IAId,kEAAkE;IAClE,OAAO,IAAI,OAAO;IAIlB,iFAAiF;IACjF,IAAI,IAAI,MAAM;CAGf"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VolatileScratch — per-round reasoning / planning state that MUST NOT be
|
|
3
|
+
* uploaded to the API.
|
|
4
|
+
*
|
|
5
|
+
* Reasonix Principle #3 (Volatile Scratch):
|
|
6
|
+
* The model's thinking content, intermediate plans, and other
|
|
7
|
+
* intra-round state should never be appended to the conversation
|
|
8
|
+
* history. They are useful for the UI (so users can debug / audit
|
|
9
|
+
* reasoning) and for cross-iteration handoff within the same round
|
|
10
|
+
* (e.g. retry-after-tool-failure), but they are NOT part of the cache
|
|
11
|
+
* prefix and re-uploading them in the next round would:
|
|
12
|
+
* 1. waste tokens (potentially a lot — reasoning can dwarf the answer)
|
|
13
|
+
* 2. cause context-window pressure
|
|
14
|
+
* 3. risk leaking partial / contradictory reasoning back to the model
|
|
15
|
+
*
|
|
16
|
+
* Usage (in LLMService / useChat when receiving 'thinking' chunks):
|
|
17
|
+
* scratch.write(chunk.content);
|
|
18
|
+
* // ... later in the same round ...
|
|
19
|
+
* scratch.read(); // → joined reasoning so far
|
|
20
|
+
* scratch.reset(); // → call at end of round OR on /new
|
|
21
|
+
*/
|
|
22
|
+
export class VolatileScratch {
|
|
23
|
+
current = [];
|
|
24
|
+
reset() {
|
|
25
|
+
this.current = [];
|
|
26
|
+
}
|
|
27
|
+
write(data) {
|
|
28
|
+
if (!data)
|
|
29
|
+
return;
|
|
30
|
+
this.current.push(data);
|
|
31
|
+
}
|
|
32
|
+
read() {
|
|
33
|
+
return this.current.join('\n');
|
|
34
|
+
}
|
|
35
|
+
/** True when no scratch has been written since the last reset. */
|
|
36
|
+
isEmpty() {
|
|
37
|
+
return this.current.length === 0;
|
|
38
|
+
}
|
|
39
|
+
/** Number of segments written. Useful for UI display ("thought for N lines"). */
|
|
40
|
+
size() {
|
|
41
|
+
return this.current.length;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=volatile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volatile.js","sourceRoot":"","sources":["../../src/cache/volatile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,eAAe;IAClB,OAAO,GAAa,EAAE,CAAC;IAE/B,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,kEAAkE;IAClE,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,iFAAiF;IACjF,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;CACF"}
|
package/dist/cmd/index.js
CHANGED
|
@@ -53,7 +53,6 @@ import chalk from 'chalk';
|
|
|
53
53
|
import { App } from '../app/index.js';
|
|
54
54
|
import { WelcomeScreen } from '../tui/welcome.js';
|
|
55
55
|
import { compressThinking, summarizeThinking, splitThinking } from '../utils/thinking.js';
|
|
56
|
-
import { PRODUCT_VERSION } from '../version.js';
|
|
57
56
|
process.on('uncaughtException', (error) => {
|
|
58
57
|
console.error(chalk.red('\n Error:'), error.message);
|
|
59
58
|
process.exit(1);
|
|
@@ -65,7 +64,7 @@ process.on('unhandledRejection', (reason) => {
|
|
|
65
64
|
program
|
|
66
65
|
.name('gfcode')
|
|
67
66
|
.description('Thatgfsj Code - AI Coding Assistant')
|
|
68
|
-
.version(
|
|
67
|
+
.version('0.5.0')
|
|
69
68
|
.argument('[prompt]', 'Task to execute (omit to start interactive mode)')
|
|
70
69
|
.option('-m, --model <model>', 'Specify model')
|
|
71
70
|
.option('-i, --interactive', 'Force interactive mode')
|
|
@@ -128,71 +127,64 @@ program
|
|
|
128
127
|
try {
|
|
129
128
|
process.stdout.write(chalk.gray(' Thinking...'));
|
|
130
129
|
const stream = app.streamResponse();
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
//
|
|
134
|
-
//
|
|
135
|
-
//
|
|
130
|
+
// v3.0.0: stream is now AsyncGenerator<StreamChunk> instead of
|
|
131
|
+
// string. Tool calls come as { type: 'tool_calls', toolCalls }
|
|
132
|
+
// with structured args; usage comes as { type: 'usage', usage }
|
|
133
|
+
// at end. We render text live, render tool dispatches inline, and
|
|
134
|
+
// capture the final response text into fullResponse for the
|
|
135
|
+
// post-process step below.
|
|
136
136
|
for await (const chunk of stream) {
|
|
137
137
|
if (abortCtrl.signal.aborted)
|
|
138
138
|
break;
|
|
139
139
|
// Clear the entire "Thinking..." line — must use enough
|
|
140
140
|
// spaces to overwrite any longer thinking indicator.
|
|
141
141
|
process.stdout.write('\r' + ' '.repeat(80) + '\r');
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
console.log(chalk.cyan(` ⚙ ${data.name}: ${formatArgs(data.args)}`));
|
|
154
|
-
console.log(chalk.gray(' ' + '─'.repeat(40)));
|
|
155
|
-
}
|
|
156
|
-
else if (data.action === 'result') {
|
|
157
|
-
const output = data.output || data.error || '';
|
|
158
|
-
const lines = output.split('\n');
|
|
159
|
-
const MAX_TOOL_LINES = 20;
|
|
160
|
-
const truncated = lines.length > MAX_TOOL_LINES;
|
|
161
|
-
const visible = truncated ? lines.slice(0, MAX_TOOL_LINES) : lines;
|
|
162
|
-
for (const line of visible) {
|
|
163
|
-
console.log(chalk.gray(' │ ') + line);
|
|
164
|
-
}
|
|
165
|
-
if (truncated) {
|
|
166
|
-
console.log(chalk.gray(` │ ... (${lines.length - MAX_TOOL_LINES} more lines truncated)`));
|
|
167
|
-
}
|
|
168
|
-
console.log(chalk.gray(' ' + '─'.repeat(40)));
|
|
169
|
-
}
|
|
142
|
+
switch (chunk.type) {
|
|
143
|
+
case 'text': {
|
|
144
|
+
if (chunk.content) {
|
|
145
|
+
fullResponse += chunk.content;
|
|
146
|
+
// Show the chunk as it streams, but we'll re-render the
|
|
147
|
+
// final compressed version below. To avoid double-
|
|
148
|
+
// printing, only echo when we're NOT going to post-
|
|
149
|
+
// process (i.e., when showThinking is true and we want
|
|
150
|
+
// to see everything live).
|
|
151
|
+
if (showThinking) {
|
|
152
|
+
process.stdout.write(chalk.cyan(' │ ') + chunk.content);
|
|
170
153
|
}
|
|
171
|
-
catch { }
|
|
172
154
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
process.stdout.write(chalk.cyan(' │ ') +
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
case 'thinking': {
|
|
158
|
+
// Reasoning content. Strip from persisted content via
|
|
159
|
+
// compressThinking; show live if user asked for it.
|
|
160
|
+
if (showThinking && chunk.content) {
|
|
161
|
+
fullResponse += chunk.content;
|
|
162
|
+
process.stdout.write(chalk.cyan(' │ ') + chunk.content);
|
|
181
163
|
}
|
|
164
|
+
break;
|
|
182
165
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
166
|
+
case 'tool_calls': {
|
|
167
|
+
if (chunk.toolCalls && chunk.toolCalls.length > 0) {
|
|
168
|
+
for (const tc of chunk.toolCalls) {
|
|
169
|
+
console.log();
|
|
170
|
+
console.log(chalk.cyan(` ⚙ ${tc.function.name}: ${formatArgs(tc.function.arguments)}`));
|
|
171
|
+
console.log(chalk.gray(' ' + '─'.repeat(40)));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
case 'usage': {
|
|
177
|
+
// v3.0.0: surface cache stats at the end of single-prompt
|
|
178
|
+
// mode so CLI users can see hit-rate without /cache command.
|
|
179
|
+
const u = chunk.usage;
|
|
180
|
+
const hit = u.prompt_cache_hit_tokens || u.cache_read_input_tokens || 0;
|
|
181
|
+
const miss = u.prompt_cache_miss_tokens || u.cache_creation_input_tokens || (u.prompt_tokens - hit);
|
|
182
|
+
if (hit > 0 || miss > 0) {
|
|
183
|
+
const total = hit + miss;
|
|
184
|
+
const rate = total > 0 ? ((hit / total) * 100).toFixed(1) : '0.0';
|
|
185
|
+
console.log(chalk.gray(` ⚡ cache: ${rate}% hit (${hit} / ${total} tokens)`));
|
|
186
|
+
}
|
|
187
|
+
break;
|
|
196
188
|
}
|
|
197
189
|
}
|
|
198
190
|
}
|
package/dist/cmd/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cmd/index.tsx"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;IACjC,8DAA8D;IAC9D,qEAAqE;IACrE,kEAAkE;IAClE,mEAAmE;IACnE,+DAA+D;IAC/D,IAAI,CAAC;QACH,OAAO,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;QACjE,2DAA2D;IAC7D,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,+DAA+D;AAC/D,+DAA+D;AAC/D,kDAAkD;AAClD,IAAI,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;IACtC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AACD,IAAI,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;IACtC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cmd/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AAoBjE,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;IAKP;;OAEG;WACU,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;IAsB3C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAmC9B;;OAEG;IACH,GAAG,IAAI,MAAM;IAIb;;OAEG;IACH,WAAW,IAAI,QAAQ;IAWvB;;OAEG;IACH,iBAAiB,IAAI,QAAQ,GAAG,WAAW,GAAG,QAAQ;IAItD;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnD;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,gBAAgB,IAAI,OAAO;CAG5B"}
|
package/dist/config/index.js
CHANGED
|
@@ -13,6 +13,14 @@ const DEFAULT_CONFIG = {
|
|
|
13
13
|
maxTokens: 4096,
|
|
14
14
|
contextLength: 50,
|
|
15
15
|
provider: 'siliconflow',
|
|
16
|
+
// v3.0.0: prompt cache policy. Default = enabled, 5m TTL, auto strategy
|
|
17
|
+
// (Anthropic gets explicit cache_control markers; everything else falls
|
|
18
|
+
// through to the provider's built-in caching).
|
|
19
|
+
cache: {
|
|
20
|
+
enabled: true,
|
|
21
|
+
ttl: '5m',
|
|
22
|
+
strategy: 'auto',
|
|
23
|
+
},
|
|
16
24
|
};
|
|
17
25
|
export class ConfigManager {
|
|
18
26
|
configPath;
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,MAAM,cAAc,GAAW;IAC7B,KAAK,EAAE,0BAA0B;IACjC,MAAM,EAAE,EAAE;IACV,WAAW,EAAE,GAAG;IAChB,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,EAAE;IACjB,QAAQ,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -17,6 +17,20 @@ export interface Config {
|
|
|
17
17
|
contextLength: number;
|
|
18
18
|
provider: ProviderName;
|
|
19
19
|
baseUrl?: string;
|
|
20
|
+
/**
|
|
21
|
+
* v3.0.0: prompt-cache policy. Default = Anthropic-style explicit
|
|
22
|
+
* cache_control on (ttl 5m), all other providers fall through to their
|
|
23
|
+
* built-in automatic caching.
|
|
24
|
+
*
|
|
25
|
+
* Note: enabling/disabling only affects Anthropic; other providers do
|
|
26
|
+
* not expose a programmatic cache toggle, so the flag is purely
|
|
27
|
+
* advisory there.
|
|
28
|
+
*/
|
|
29
|
+
cache?: {
|
|
30
|
+
enabled: boolean;
|
|
31
|
+
ttl?: '5m' | '1h';
|
|
32
|
+
strategy?: 'auto' | 'manual' | 'off';
|
|
33
|
+
};
|
|
20
34
|
}
|
|
21
35
|
export interface AIConfig {
|
|
22
36
|
model: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,YAAY,GACpB,aAAa,GACb,QAAQ,GACR,UAAU,GACV,MAAM,GACN,OAAO,GACP,SAAS,GACT,UAAU,GACV,SAAS,GACT,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,eAAe,GACf,kBAAkB,CAAC;AAEvB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;CAC3C;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,YAAY,GACpB,aAAa,GACb,QAAQ,GACR,UAAU,GACV,MAAM,GACN,OAAO,GACP,SAAS,GACT,UAAU,GACV,SAAS,GACT,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,eAAe,GACf,kBAAkB,CAAC;AAEvB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;CAC3C;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;KACtC,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd"}
|