@dungle-scrubs/tallow 0.9.4 → 0.9.7
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/cli.js +8 -5
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/interactive-mode-patch.d.ts +24 -12
- package/dist/interactive-mode-patch.d.ts.map +1 -1
- package/dist/interactive-mode-patch.js +229 -146
- package/dist/interactive-mode-patch.js.map +1 -1
- package/dist/interactive-reset.d.ts +49 -0
- package/dist/interactive-reset.d.ts.map +1 -0
- package/dist/interactive-reset.js +40 -0
- package/dist/interactive-reset.js.map +1 -0
- package/dist/pi-tui-editor-patch.d.ts +10 -0
- package/dist/pi-tui-editor-patch.d.ts.map +1 -0
- package/dist/pi-tui-editor-patch.js +159 -0
- package/dist/pi-tui-editor-patch.js.map +1 -0
- package/dist/pi-tui-patch.d.ts +2 -0
- package/dist/pi-tui-patch.d.ts.map +1 -0
- package/dist/pi-tui-patch.js +563 -0
- package/dist/pi-tui-patch.js.map +1 -0
- package/dist/pi-tui-settings-list-patch.d.ts +11 -0
- package/dist/pi-tui-settings-list-patch.d.ts.map +1 -0
- package/dist/pi-tui-settings-list-patch.js +38 -0
- package/dist/pi-tui-settings-list-patch.js.map +1 -0
- package/dist/process-cleanup.js +1 -1
- package/dist/process-cleanup.js.map +1 -1
- package/dist/reset-diagnostics.d.ts +69 -0
- package/dist/reset-diagnostics.d.ts.map +1 -0
- package/dist/reset-diagnostics.js +41 -0
- package/dist/reset-diagnostics.js.map +1 -0
- package/dist/sdk.d.ts +7 -23
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +211 -174
- package/dist/sdk.js.map +1 -1
- package/dist/workspace-transition-interactive.d.ts +1 -0
- package/dist/workspace-transition-interactive.d.ts.map +1 -1
- package/dist/workspace-transition-interactive.js +8 -18
- package/dist/workspace-transition-interactive.js.map +1 -1
- package/extensions/__integration__/audit-findings.test.ts +4 -5
- package/extensions/_icons/index.ts +2 -4
- package/extensions/_shared/__tests__/image-metadata.test.ts +33 -0
- package/extensions/_shared/__tests__/shell-policy.test.ts +19 -0
- package/extensions/_shared/__tests__/terminal-links.test.ts +18 -0
- package/extensions/_shared/image-metadata.ts +99 -0
- package/extensions/_shared/inline-preview.ts +1 -1
- package/extensions/_shared/shell-policy.ts +121 -1
- package/extensions/_shared/terminal-links.ts +22 -0
- package/extensions/ask-user-question-tool/index.ts +0 -3
- package/extensions/clear/__tests__/clear.test.ts +269 -2
- package/extensions/command-expansion/index.ts +9 -3
- package/extensions/context-files/index.ts +5 -1
- package/extensions/context-fork/__tests__/context-fork.test.ts +94 -1
- package/extensions/context-fork/extension.json +1 -1
- package/extensions/context-fork/frontmatter-index.ts +6 -1
- package/extensions/context-fork/index.ts +32 -0
- package/extensions/edit-tool-enhanced/index.ts +2 -1
- package/extensions/git-status/__tests__/git-status.test.ts +65 -2
- package/extensions/git-status/index.ts +268 -98
- package/extensions/hooks/index.ts +33 -11
- package/extensions/loop/index.ts +14 -1
- package/extensions/lsp/index.ts +64 -13
- package/extensions/lsp/package.json +2 -2
- package/extensions/minimal-skill-display/index.ts +7 -1
- package/extensions/random-spinner/index.ts +7 -642
- package/extensions/read-tool-enhanced/index.ts +13 -10
- package/extensions/render-stabilizer/__tests__/render-stabilizer.test.ts +2 -3
- package/extensions/render-stabilizer/index.ts +6 -6
- package/extensions/rewind/__tests__/session-files.test.ts +115 -0
- package/extensions/rewind/__tests__/snapshots.test.ts +23 -0
- package/extensions/rewind/index.ts +5 -0
- package/extensions/rewind/session-files.ts +138 -0
- package/extensions/rewind/snapshots.ts +104 -5
- package/extensions/skill-commands/index.ts +6 -1
- package/extensions/slash-command-bridge/__tests__/slash-command-bridge.test.ts +26 -0
- package/extensions/slash-command-bridge/index.ts +14 -2
- package/extensions/subagent-tool/model-resolver.ts +274 -7
- package/extensions/subagent-tool/schema.ts +1 -2
- package/extensions/tasks/commands/register-tasks-extension.ts +9 -9
- package/extensions/teams-tool/tools/register-extension.ts +1 -3
- package/extensions/teams-tool/tools/teammate-tools.ts +1 -2
- package/extensions/web-search-tool/index.ts +2 -1
- package/extensions/wezterm-pane-control/index.ts +1 -2
- package/extensions/write-tool-enhanced/index.ts +2 -1
- package/node_modules/@mariozechner/pi-tui/README.md +56 -34
- package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts +18 -13
- package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js +182 -113
- package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js +3 -3
- package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts +45 -36
- package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/editor.js +489 -325
- package/node_modules/@mariozechner/pi-tui/dist/components/editor.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts +1 -99
- package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/image.js +17 -192
- package/node_modules/@mariozechner/pi-tui/dist/components/image.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/input.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/input.js +57 -60
- package/node_modules/@mariozechner/pi-tui/dist/components/input.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts +2 -69
- package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/loader.js +5 -102
- package/node_modules/@mariozechner/pi-tui/dist/components/loader.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/markdown.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js +111 -53
- package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts +19 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js +78 -67
- package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts +1 -25
- package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js +13 -50
- package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/index.d.ts +8 -10
- package/node_modules/@mariozechner/pi-tui/dist/index.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/index.js +6 -9
- package/node_modules/@mariozechner/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts +108 -238
- package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/keybindings.js +108 -365
- package/node_modules/@mariozechner/pi-tui/dist/keybindings.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts +33 -48
- package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/keys.js +239 -155
- package/node_modules/@mariozechner/pi-tui/dist/keys.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts +14 -94
- package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js +44 -186
- package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts +13 -58
- package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/terminal.js +78 -111
- package/node_modules/@mariozechner/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts +24 -110
- package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/tui.js +188 -435
- package/node_modules/@mariozechner/pi-tui/dist/tui.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts +0 -18
- package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/utils.js +251 -119
- package/node_modules/@mariozechner/pi-tui/dist/utils.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/package.json +6 -6
- package/node_modules/@mariozechner/pi-tui/src/__tests__/__snapshots__/render.test.ts.snap +3 -40
- package/node_modules/@mariozechner/pi-tui/src/__tests__/image-component.test.ts +71 -81
- package/node_modules/@mariozechner/pi-tui/src/__tests__/render.test.ts +0 -33
- package/node_modules/@mariozechner/pi-tui/src/__tests__/terminal-image.test.ts +93 -334
- package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-render-scheduling.test.ts +1 -1
- package/node_modules/@mariozechner/pi-tui/src/__tests__/utils.test.ts +11 -196
- package/node_modules/@mariozechner/pi-tui/src/autocomplete.ts +228 -142
- package/node_modules/@mariozechner/pi-tui/src/components/cancellable-loader.ts +3 -3
- package/node_modules/@mariozechner/pi-tui/src/components/editor.ts +624 -390
- package/node_modules/@mariozechner/pi-tui/src/components/image.ts +17 -227
- package/node_modules/@mariozechner/pi-tui/src/components/input.ts +71 -63
- package/node_modules/@mariozechner/pi-tui/src/components/loader.ts +5 -137
- package/node_modules/@mariozechner/pi-tui/src/components/markdown.ts +143 -52
- package/node_modules/@mariozechner/pi-tui/src/components/select-list.ts +136 -70
- package/node_modules/@mariozechner/pi-tui/src/components/settings-list.ts +12 -51
- package/node_modules/@mariozechner/pi-tui/src/index.ts +17 -36
- package/node_modules/@mariozechner/pi-tui/src/keybindings.ts +148 -421
- package/node_modules/@mariozechner/pi-tui/src/keys.ts +253 -181
- package/node_modules/@mariozechner/pi-tui/src/terminal-image.ts +51 -252
- package/node_modules/@mariozechner/pi-tui/src/terminal.ts +78 -133
- package/node_modules/@mariozechner/pi-tui/src/tui.ts +202 -478
- package/node_modules/@mariozechner/pi-tui/src/utils.ts +289 -125
- package/node_modules/@mariozechner/pi-tui/tsconfig.build.json +1 -0
- package/package.json +13 -13
- package/packages/tallow-tui/node_modules/@types/mime-types/README.md +8 -2
- package/packages/tallow-tui/node_modules/@types/mime-types/index.d.ts +6 -0
- package/packages/tallow-tui/node_modules/@types/mime-types/package.json +9 -3
- package/packages/tallow-tui/node_modules/get-east-asian-width/lookup-data.js +18 -0
- package/packages/tallow-tui/node_modules/get-east-asian-width/lookup.js +116 -384
- package/packages/tallow-tui/node_modules/get-east-asian-width/package.json +5 -4
- package/packages/tallow-tui/node_modules/get-east-asian-width/utilities.js +24 -0
- package/packages/tallow-tui/node_modules/marked/README.md +5 -4
- package/packages/tallow-tui/node_modules/marked/bin/main.js +10 -8
- package/packages/tallow-tui/node_modules/marked/bin/marked.js +2 -1
- package/packages/tallow-tui/node_modules/marked/lib/marked.d.ts +156 -125
- package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js +67 -2179
- package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js.map +3 -3
- package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js +67 -2201
- package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js.map +3 -3
- package/packages/tallow-tui/node_modules/marked/man/marked.1 +4 -2
- package/packages/tallow-tui/node_modules/marked/man/marked.1.md +2 -1
- package/packages/tallow-tui/node_modules/marked/package.json +26 -34
- package/skills/tallow-expert/SKILL.md +3 -5
- package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts +0 -32
- package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts.map +0 -1
- package/node_modules/@mariozechner/pi-tui/dist/border-styles.js +0 -46
- package/node_modules/@mariozechner/pi-tui/dist/border-styles.js.map +0 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts +0 -52
- package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts.map +0 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js +0 -89
- package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js.map +0 -1
- package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts +0 -14
- package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts.map +0 -1
- package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js +0 -55
- package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js.map +0 -1
- package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-change-listener.test.ts +0 -121
- package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-ghost-text.test.ts +0 -112
- package/node_modules/@mariozechner/pi-tui/src/__tests__/mouse-events.test.ts +0 -134
- package/node_modules/@mariozechner/pi-tui/src/__tests__/settings-list.test.ts +0 -81
- package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-diff-regression.test.ts +0 -555
- package/node_modules/@mariozechner/pi-tui/src/border-styles.ts +0 -60
- package/node_modules/@mariozechner/pi-tui/src/components/bordered-box.ts +0 -113
- package/node_modules/@mariozechner/pi-tui/src/test-utils/capability-env.ts +0 -56
- package/packages/tallow-tui/node_modules/marked/lib/marked.cjs +0 -2211
- package/packages/tallow-tui/node_modules/marked/lib/marked.cjs.map +0 -7
- package/packages/tallow-tui/node_modules/marked/lib/marked.d.cts +0 -728
- package/packages/tallow-tui/node_modules/marked/marked.min.js +0 -69
|
@@ -39,6 +39,117 @@ const rgiEmojiRegex = /^\p{RGI_Emoji}$/v;
|
|
|
39
39
|
const WIDTH_CACHE_SIZE = 512;
|
|
40
40
|
const widthCache = new Map<string, number>();
|
|
41
41
|
|
|
42
|
+
function isPrintableAscii(str: string): boolean {
|
|
43
|
+
for (let i = 0; i < str.length; i++) {
|
|
44
|
+
const code = str.charCodeAt(i);
|
|
45
|
+
if (code < 0x20 || code > 0x7e) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function truncateFragmentToWidth(text: string, maxWidth: number): { text: string; width: number } {
|
|
53
|
+
if (maxWidth <= 0 || text.length === 0) {
|
|
54
|
+
return { text: "", width: 0 };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (isPrintableAscii(text)) {
|
|
58
|
+
const clipped = text.slice(0, maxWidth);
|
|
59
|
+
return { text: clipped, width: clipped.length };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const hasAnsi = text.includes("\x1b");
|
|
63
|
+
const hasTabs = text.includes("\t");
|
|
64
|
+
if (!hasAnsi && !hasTabs) {
|
|
65
|
+
let result = "";
|
|
66
|
+
let width = 0;
|
|
67
|
+
for (const { segment } of segmenter.segment(text)) {
|
|
68
|
+
const w = graphemeWidth(segment);
|
|
69
|
+
if (width + w > maxWidth) {
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
result += segment;
|
|
73
|
+
width += w;
|
|
74
|
+
}
|
|
75
|
+
return { text: result, width };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
let result = "";
|
|
79
|
+
let width = 0;
|
|
80
|
+
let i = 0;
|
|
81
|
+
let pendingAnsi = "";
|
|
82
|
+
|
|
83
|
+
while (i < text.length) {
|
|
84
|
+
const ansi = extractAnsiCode(text, i);
|
|
85
|
+
if (ansi) {
|
|
86
|
+
pendingAnsi += ansi.code;
|
|
87
|
+
i += ansi.length;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (text[i] === "\t") {
|
|
92
|
+
if (width + 3 > maxWidth) {
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
if (pendingAnsi) {
|
|
96
|
+
result += pendingAnsi;
|
|
97
|
+
pendingAnsi = "";
|
|
98
|
+
}
|
|
99
|
+
result += "\t";
|
|
100
|
+
width += 3;
|
|
101
|
+
i++;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
let end = i;
|
|
106
|
+
while (end < text.length && text[end] !== "\t") {
|
|
107
|
+
const nextAnsi = extractAnsiCode(text, end);
|
|
108
|
+
if (nextAnsi) {
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
end++;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
for (const { segment } of segmenter.segment(text.slice(i, end))) {
|
|
115
|
+
const w = graphemeWidth(segment);
|
|
116
|
+
if (width + w > maxWidth) {
|
|
117
|
+
return { text: result, width };
|
|
118
|
+
}
|
|
119
|
+
if (pendingAnsi) {
|
|
120
|
+
result += pendingAnsi;
|
|
121
|
+
pendingAnsi = "";
|
|
122
|
+
}
|
|
123
|
+
result += segment;
|
|
124
|
+
width += w;
|
|
125
|
+
}
|
|
126
|
+
i = end;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return { text: result, width };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function finalizeTruncatedResult(
|
|
133
|
+
prefix: string,
|
|
134
|
+
prefixWidth: number,
|
|
135
|
+
ellipsis: string,
|
|
136
|
+
ellipsisWidth: number,
|
|
137
|
+
maxWidth: number,
|
|
138
|
+
pad: boolean
|
|
139
|
+
): string {
|
|
140
|
+
const reset = "\x1b[0m";
|
|
141
|
+
const visibleWidth = prefixWidth + ellipsisWidth;
|
|
142
|
+
let result: string;
|
|
143
|
+
|
|
144
|
+
if (ellipsis.length > 0) {
|
|
145
|
+
result = `${prefix}${reset}${ellipsis}${reset}`;
|
|
146
|
+
} else {
|
|
147
|
+
result = `${prefix}${reset}`;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return pad ? result + " ".repeat(Math.max(0, maxWidth - visibleWidth)) : result;
|
|
151
|
+
}
|
|
152
|
+
|
|
42
153
|
/**
|
|
43
154
|
* Calculate the terminal width of a single grapheme cluster.
|
|
44
155
|
* Based on code from the string-width library, but includes a possible-emoji
|
|
@@ -62,6 +173,13 @@ function graphemeWidth(segment: string): number {
|
|
|
62
173
|
return 0;
|
|
63
174
|
}
|
|
64
175
|
|
|
176
|
+
// Regional indicator symbols (U+1F1E6..U+1F1FF) are often rendered as
|
|
177
|
+
// full-width emoji in terminals, even when isolated during streaming.
|
|
178
|
+
// Keep width conservative (2) to avoid terminal auto-wrap drift artifacts.
|
|
179
|
+
if (cp >= 0x1f1e6 && cp <= 0x1f1ff) {
|
|
180
|
+
return 2;
|
|
181
|
+
}
|
|
182
|
+
|
|
65
183
|
let width = eastAsianWidth(cp);
|
|
66
184
|
|
|
67
185
|
// Trailing halfwidth/fullwidth forms
|
|
@@ -86,15 +204,7 @@ export function visibleWidth(str: string): number {
|
|
|
86
204
|
}
|
|
87
205
|
|
|
88
206
|
// Fast path: pure ASCII printable
|
|
89
|
-
|
|
90
|
-
for (let i = 0; i < str.length; i++) {
|
|
91
|
-
const code = str.charCodeAt(i);
|
|
92
|
-
if (code < 0x20 || code > 0x7e) {
|
|
93
|
-
isPureAscii = false;
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
if (isPureAscii) {
|
|
207
|
+
if (isPrintableAscii(str)) {
|
|
98
208
|
return str.length;
|
|
99
209
|
}
|
|
100
210
|
|
|
@@ -110,22 +220,21 @@ export function visibleWidth(str: string): number {
|
|
|
110
220
|
clean = clean.replace(/\t/g, " ");
|
|
111
221
|
}
|
|
112
222
|
if (clean.includes("\x1b")) {
|
|
113
|
-
//
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
clean = clean.replace(/\x1b\[[?!>]?[0-9;]*[\x40-\x7e]/g, "");
|
|
223
|
+
// Strip supported ANSI/OSC/APC escape sequences in one pass.
|
|
224
|
+
// This covers CSI styling/cursor codes, OSC hyperlinks and prompt markers,
|
|
225
|
+
// and APC sequences like CURSOR_MARKER.
|
|
226
|
+
let stripped = "";
|
|
227
|
+
let i = 0;
|
|
228
|
+
while (i < clean.length) {
|
|
229
|
+
const ansi = extractAnsiCode(clean, i);
|
|
230
|
+
if (ansi) {
|
|
231
|
+
i += ansi.length;
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
stripped += clean[i];
|
|
235
|
+
i++;
|
|
236
|
+
}
|
|
237
|
+
clean = stripped;
|
|
129
238
|
}
|
|
130
239
|
|
|
131
240
|
// Calculate width
|
|
@@ -154,19 +263,11 @@ export function extractAnsiCode(str: string, pos: number): { code: string; lengt
|
|
|
154
263
|
|
|
155
264
|
const next = str[pos + 1];
|
|
156
265
|
|
|
157
|
-
// CSI sequence: ESC [
|
|
158
|
-
// Covers SGR, cursor movement, erase, DEC private mode, etc.
|
|
266
|
+
// CSI sequence: ESC [ ... m/G/K/H/J
|
|
159
267
|
if (next === "[") {
|
|
160
268
|
let j = pos + 2;
|
|
161
|
-
|
|
162
|
-
if (j < str.length
|
|
163
|
-
// Skip parameter bytes (digits and semicolons)
|
|
164
|
-
while (j < str.length && /[0-9;]/.test(str[j]!)) j++;
|
|
165
|
-
// Must end with a final byte in the 0x40-0x7E range (@ through ~)
|
|
166
|
-
const code = str.charCodeAt(j);
|
|
167
|
-
if (j < str.length && code >= 0x40 && code <= 0x7e) {
|
|
168
|
-
return { code: str.substring(pos, j + 1), length: j + 1 - pos };
|
|
169
|
-
}
|
|
269
|
+
while (j < str.length && !/[mGKHJ]/.test(str[j]!)) j++;
|
|
270
|
+
if (j < str.length) return { code: str.substring(pos, j + 1), length: j + 1 - pos };
|
|
170
271
|
return null;
|
|
171
272
|
}
|
|
172
273
|
|
|
@@ -214,8 +315,16 @@ class AnsiCodeTracker {
|
|
|
214
315
|
private strikethrough = false;
|
|
215
316
|
private fgColor: string | null = null; // Stores the full code like "31" or "38;5;240"
|
|
216
317
|
private bgColor: string | null = null; // Stores the full code like "41" or "48;5;240"
|
|
318
|
+
private activeHyperlink: string | null = null; // Active OSC 8 hyperlink URL, or null
|
|
217
319
|
|
|
218
320
|
process(ansiCode: string): void {
|
|
321
|
+
// OSC 8 hyperlink: \x1b]8;;<url>\x1b\\ (open) or \x1b]8;;\x1b\\ (close)
|
|
322
|
+
if (ansiCode.startsWith("\x1b]8;")) {
|
|
323
|
+
const m = ansiCode.match(/^\x1b\]8;[^;]*;([^\x1b\x07]*)/);
|
|
324
|
+
this.activeHyperlink = m?.[1] ? m[1] : null;
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
|
|
219
328
|
if (!ansiCode.endsWith("m")) {
|
|
220
329
|
return;
|
|
221
330
|
}
|
|
@@ -350,11 +459,13 @@ class AnsiCodeTracker {
|
|
|
350
459
|
this.strikethrough = false;
|
|
351
460
|
this.fgColor = null;
|
|
352
461
|
this.bgColor = null;
|
|
462
|
+
// SGR reset does not affect OSC 8 hyperlink state
|
|
353
463
|
}
|
|
354
464
|
|
|
355
465
|
/** Clear all state for reuse. */
|
|
356
466
|
clear(): void {
|
|
357
467
|
this.reset();
|
|
468
|
+
this.activeHyperlink = null;
|
|
358
469
|
}
|
|
359
470
|
|
|
360
471
|
getActiveCodes(): string {
|
|
@@ -370,8 +481,11 @@ class AnsiCodeTracker {
|
|
|
370
481
|
if (this.fgColor) codes.push(this.fgColor);
|
|
371
482
|
if (this.bgColor) codes.push(this.bgColor);
|
|
372
483
|
|
|
373
|
-
|
|
374
|
-
|
|
484
|
+
let result = codes.length > 0 ? `\x1b[${codes.join(";")}m` : "";
|
|
485
|
+
if (this.activeHyperlink) {
|
|
486
|
+
result += `\x1b]8;;${this.activeHyperlink}\x1b\\`;
|
|
487
|
+
}
|
|
488
|
+
return result;
|
|
375
489
|
}
|
|
376
490
|
|
|
377
491
|
hasActiveCodes(): boolean {
|
|
@@ -385,22 +499,26 @@ class AnsiCodeTracker {
|
|
|
385
499
|
this.hidden ||
|
|
386
500
|
this.strikethrough ||
|
|
387
501
|
this.fgColor !== null ||
|
|
388
|
-
this.bgColor !== null
|
|
502
|
+
this.bgColor !== null ||
|
|
503
|
+
this.activeHyperlink !== null
|
|
389
504
|
);
|
|
390
505
|
}
|
|
391
506
|
|
|
392
507
|
/**
|
|
393
|
-
* Get reset codes for attributes that need to be turned off at line end
|
|
394
|
-
*
|
|
395
|
-
*
|
|
508
|
+
* Get reset codes for attributes that need to be turned off at line end.
|
|
509
|
+
* Underline must be closed to prevent bleeding into padding.
|
|
510
|
+
* Active OSC 8 hyperlinks must be closed and re-opened on the next line.
|
|
511
|
+
* Returns empty string if no attributes need closing.
|
|
396
512
|
*/
|
|
397
513
|
getLineEndReset(): string {
|
|
398
|
-
|
|
399
|
-
// Other attributes like colors don't visually bleed to padding
|
|
514
|
+
let result = "";
|
|
400
515
|
if (this.underline) {
|
|
401
|
-
|
|
516
|
+
result += "\x1b[24m"; // Underline off only
|
|
402
517
|
}
|
|
403
|
-
|
|
518
|
+
if (this.activeHyperlink) {
|
|
519
|
+
result += "\x1b]8;;\x1b\\"; // Close hyperlink; re-opened at line start via getActiveCodes()
|
|
520
|
+
}
|
|
521
|
+
return result;
|
|
404
522
|
}
|
|
405
523
|
}
|
|
406
524
|
|
|
@@ -705,77 +823,150 @@ export function truncateToWidth(
|
|
|
705
823
|
ellipsis: string = "...",
|
|
706
824
|
pad: boolean = false
|
|
707
825
|
): string {
|
|
708
|
-
|
|
826
|
+
if (maxWidth <= 0) {
|
|
827
|
+
return "";
|
|
828
|
+
}
|
|
709
829
|
|
|
710
|
-
if (
|
|
711
|
-
return pad ?
|
|
830
|
+
if (text.length === 0) {
|
|
831
|
+
return pad ? " ".repeat(maxWidth) : "";
|
|
712
832
|
}
|
|
713
833
|
|
|
714
834
|
const ellipsisWidth = visibleWidth(ellipsis);
|
|
715
|
-
|
|
835
|
+
if (ellipsisWidth >= maxWidth) {
|
|
836
|
+
const textWidth = visibleWidth(text);
|
|
837
|
+
if (textWidth <= maxWidth) {
|
|
838
|
+
return pad ? text + " ".repeat(maxWidth - textWidth) : text;
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
const clippedEllipsis = truncateFragmentToWidth(ellipsis, maxWidth);
|
|
842
|
+
if (clippedEllipsis.width === 0) {
|
|
843
|
+
return pad ? " ".repeat(maxWidth) : "";
|
|
844
|
+
}
|
|
845
|
+
return finalizeTruncatedResult(
|
|
846
|
+
"",
|
|
847
|
+
0,
|
|
848
|
+
clippedEllipsis.text,
|
|
849
|
+
clippedEllipsis.width,
|
|
850
|
+
maxWidth,
|
|
851
|
+
pad
|
|
852
|
+
);
|
|
853
|
+
}
|
|
716
854
|
|
|
717
|
-
if (
|
|
718
|
-
|
|
855
|
+
if (isPrintableAscii(text)) {
|
|
856
|
+
if (text.length <= maxWidth) {
|
|
857
|
+
return pad ? text + " ".repeat(maxWidth - text.length) : text;
|
|
858
|
+
}
|
|
859
|
+
const targetWidth = maxWidth - ellipsisWidth;
|
|
860
|
+
return finalizeTruncatedResult(
|
|
861
|
+
text.slice(0, targetWidth),
|
|
862
|
+
targetWidth,
|
|
863
|
+
ellipsis,
|
|
864
|
+
ellipsisWidth,
|
|
865
|
+
maxWidth,
|
|
866
|
+
pad
|
|
867
|
+
);
|
|
719
868
|
}
|
|
720
869
|
|
|
721
|
-
|
|
722
|
-
let
|
|
723
|
-
|
|
870
|
+
const targetWidth = maxWidth - ellipsisWidth;
|
|
871
|
+
let result = "";
|
|
872
|
+
let pendingAnsi = "";
|
|
873
|
+
let visibleSoFar = 0;
|
|
874
|
+
let keptWidth = 0;
|
|
875
|
+
let keepContiguousPrefix = true;
|
|
876
|
+
let overflowed = false;
|
|
877
|
+
let exhaustedInput = false;
|
|
878
|
+
const hasAnsi = text.includes("\x1b");
|
|
879
|
+
const hasTabs = text.includes("\t");
|
|
880
|
+
|
|
881
|
+
if (!hasAnsi && !hasTabs) {
|
|
882
|
+
for (const { segment } of segmenter.segment(text)) {
|
|
883
|
+
const width = graphemeWidth(segment);
|
|
884
|
+
if (keepContiguousPrefix && keptWidth + width <= targetWidth) {
|
|
885
|
+
result += segment;
|
|
886
|
+
keptWidth += width;
|
|
887
|
+
} else {
|
|
888
|
+
keepContiguousPrefix = false;
|
|
889
|
+
}
|
|
890
|
+
visibleSoFar += width;
|
|
891
|
+
if (visibleSoFar > maxWidth) {
|
|
892
|
+
overflowed = true;
|
|
893
|
+
break;
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
exhaustedInput = !overflowed;
|
|
897
|
+
} else {
|
|
898
|
+
let i = 0;
|
|
899
|
+
while (i < text.length) {
|
|
900
|
+
const ansi = extractAnsiCode(text, i);
|
|
901
|
+
if (ansi) {
|
|
902
|
+
pendingAnsi += ansi.code;
|
|
903
|
+
i += ansi.length;
|
|
904
|
+
continue;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
if (text[i] === "\t") {
|
|
908
|
+
if (keepContiguousPrefix && keptWidth + 3 <= targetWidth) {
|
|
909
|
+
if (pendingAnsi) {
|
|
910
|
+
result += pendingAnsi;
|
|
911
|
+
pendingAnsi = "";
|
|
912
|
+
}
|
|
913
|
+
result += "\t";
|
|
914
|
+
keptWidth += 3;
|
|
915
|
+
} else {
|
|
916
|
+
keepContiguousPrefix = false;
|
|
917
|
+
pendingAnsi = "";
|
|
918
|
+
}
|
|
919
|
+
visibleSoFar += 3;
|
|
920
|
+
if (visibleSoFar > maxWidth) {
|
|
921
|
+
overflowed = true;
|
|
922
|
+
break;
|
|
923
|
+
}
|
|
924
|
+
i++;
|
|
925
|
+
continue;
|
|
926
|
+
}
|
|
724
927
|
|
|
725
|
-
while (i < text.length) {
|
|
726
|
-
const ansiResult = extractAnsiCode(text, i);
|
|
727
|
-
if (ansiResult) {
|
|
728
|
-
segments.push({ type: "ansi", value: ansiResult.code });
|
|
729
|
-
i += ansiResult.length;
|
|
730
|
-
} else {
|
|
731
|
-
// Find the next ANSI code or end of string
|
|
732
928
|
let end = i;
|
|
733
|
-
while (end < text.length) {
|
|
929
|
+
while (end < text.length && text[end] !== "\t") {
|
|
734
930
|
const nextAnsi = extractAnsiCode(text, end);
|
|
735
|
-
if (nextAnsi)
|
|
931
|
+
if (nextAnsi) {
|
|
932
|
+
break;
|
|
933
|
+
}
|
|
736
934
|
end++;
|
|
737
935
|
}
|
|
738
|
-
|
|
739
|
-
const
|
|
740
|
-
|
|
741
|
-
|
|
936
|
+
|
|
937
|
+
for (const { segment } of segmenter.segment(text.slice(i, end))) {
|
|
938
|
+
const width = graphemeWidth(segment);
|
|
939
|
+
if (keepContiguousPrefix && keptWidth + width <= targetWidth) {
|
|
940
|
+
if (pendingAnsi) {
|
|
941
|
+
result += pendingAnsi;
|
|
942
|
+
pendingAnsi = "";
|
|
943
|
+
}
|
|
944
|
+
result += segment;
|
|
945
|
+
keptWidth += width;
|
|
946
|
+
} else {
|
|
947
|
+
keepContiguousPrefix = false;
|
|
948
|
+
pendingAnsi = "";
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
visibleSoFar += width;
|
|
952
|
+
if (visibleSoFar > maxWidth) {
|
|
953
|
+
overflowed = true;
|
|
954
|
+
break;
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
if (overflowed) {
|
|
958
|
+
break;
|
|
742
959
|
}
|
|
743
960
|
i = end;
|
|
744
961
|
}
|
|
962
|
+
exhaustedInput = i >= text.length;
|
|
745
963
|
}
|
|
746
964
|
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
let currentWidth = 0;
|
|
750
|
-
|
|
751
|
-
for (const seg of segments) {
|
|
752
|
-
if (seg.type === "ansi") {
|
|
753
|
-
result += seg.value;
|
|
754
|
-
continue;
|
|
755
|
-
}
|
|
756
|
-
|
|
757
|
-
const grapheme = seg.value;
|
|
758
|
-
// Skip empty graphemes to avoid issues with string-width calculation
|
|
759
|
-
if (!grapheme) continue;
|
|
760
|
-
|
|
761
|
-
const graphemeWidth = visibleWidth(grapheme);
|
|
762
|
-
|
|
763
|
-
if (currentWidth + graphemeWidth > targetWidth) {
|
|
764
|
-
break;
|
|
765
|
-
}
|
|
766
|
-
|
|
767
|
-
result += grapheme;
|
|
768
|
-
currentWidth += graphemeWidth;
|
|
965
|
+
if (!overflowed && exhaustedInput) {
|
|
966
|
+
return pad ? text + " ".repeat(Math.max(0, maxWidth - visibleSoFar)) : text;
|
|
769
967
|
}
|
|
770
968
|
|
|
771
|
-
|
|
772
|
-
// (e.g. red/green foreground on diff lines) but doesn't leak into subsequent content
|
|
773
|
-
const truncated = `${result}${ellipsis}\x1b[0m`;
|
|
774
|
-
if (pad) {
|
|
775
|
-
const truncatedWidth = visibleWidth(truncated);
|
|
776
|
-
return truncated + " ".repeat(Math.max(0, maxWidth - truncatedWidth));
|
|
777
|
-
}
|
|
778
|
-
return truncated;
|
|
969
|
+
return finalizeTruncatedResult(result, keptWidth, ellipsis, ellipsisWidth, maxWidth, pad);
|
|
779
970
|
}
|
|
780
971
|
|
|
781
972
|
/**
|
|
@@ -919,30 +1110,3 @@ export function extractSegments(
|
|
|
919
1110
|
|
|
920
1111
|
return { before, beforeWidth, after, afterWidth };
|
|
921
1112
|
}
|
|
922
|
-
|
|
923
|
-
// ─── OSC 8 Hyperlinks ────────────────────────────────────────────────────────
|
|
924
|
-
|
|
925
|
-
/**
|
|
926
|
-
* Wrap visible text in an OSC 8 terminal hyperlink.
|
|
927
|
-
* The text remains visible; clicking it opens the URL in the terminal's handler.
|
|
928
|
-
*
|
|
929
|
-
* @param url - Target URL (e.g. "file:///path/to/file", "https://...")
|
|
930
|
-
* @param text - Visible text to display
|
|
931
|
-
* @returns Text wrapped in OSC 8 escape sequences
|
|
932
|
-
*/
|
|
933
|
-
export function hyperlink(url: string, text: string): string {
|
|
934
|
-
return `\x1b]8;;${url}\x07${text}\x1b]8;;\x07`;
|
|
935
|
-
}
|
|
936
|
-
|
|
937
|
-
/**
|
|
938
|
-
* Wrap a file path in an OSC 8 hyperlink using the file:// protocol.
|
|
939
|
-
* The display text is the path itself (or a custom label).
|
|
940
|
-
*
|
|
941
|
-
* @param filePath - Absolute file path
|
|
942
|
-
* @param displayText - Optional display text (defaults to filePath)
|
|
943
|
-
* @returns Path wrapped in a file:// OSC 8 hyperlink
|
|
944
|
-
*/
|
|
945
|
-
export function fileLink(filePath: string, displayText?: string): string {
|
|
946
|
-
const url = `file://${encodeURI(filePath)}`;
|
|
947
|
-
return hyperlink(url, displayText ?? filePath);
|
|
948
|
-
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dungle-scrubs/tallow",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.7",
|
|
4
4
|
"description": "An opinionated coding agent. Built on pi.",
|
|
5
5
|
"piConfig": {
|
|
6
6
|
"name": "tallow",
|
|
@@ -73,26 +73,26 @@
|
|
|
73
73
|
]
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@clack/prompts": "^1.
|
|
76
|
+
"@clack/prompts": "^1.2.0",
|
|
77
77
|
"@dungle-scrubs/synapse": "0.1.8",
|
|
78
|
-
"@mariozechner/pi-coding-agent": "^0.
|
|
79
|
-
"@mariozechner/pi-tui": "^0.
|
|
80
|
-
"@opentelemetry/api": "^1.9.
|
|
81
|
-
"@sinclair/typebox": "0.34.
|
|
82
|
-
"ai": "^6.0.
|
|
78
|
+
"@mariozechner/pi-coding-agent": "^0.70.0",
|
|
79
|
+
"@mariozechner/pi-tui": "^0.70.0",
|
|
80
|
+
"@opentelemetry/api": "^1.9.1",
|
|
81
|
+
"@sinclair/typebox": "0.34.49",
|
|
82
|
+
"ai": "^6.0.162",
|
|
83
83
|
"commander": "^14.0.3",
|
|
84
|
-
"unpdf": "^1.
|
|
84
|
+
"unpdf": "^1.6.0",
|
|
85
85
|
"vscode-jsonrpc": "8.2.1",
|
|
86
86
|
"vscode-languageserver-protocol": "3.17.5"
|
|
87
87
|
},
|
|
88
88
|
"devDependencies": {
|
|
89
|
-
"@biomejs/biome": "2.4.
|
|
90
|
-
"@mariozechner/pi-agent-core": "^0.
|
|
91
|
-
"@mariozechner/pi-ai": "^0.
|
|
92
|
-
"@types/node": "25.
|
|
89
|
+
"@biomejs/biome": "2.4.12",
|
|
90
|
+
"@mariozechner/pi-agent-core": "^0.70.0",
|
|
91
|
+
"@mariozechner/pi-ai": "^0.70.0",
|
|
92
|
+
"@types/node": "25.6.0",
|
|
93
93
|
"husky": "^9.1.7",
|
|
94
94
|
"lint-staged": "^16.4.0",
|
|
95
|
-
"typescript": "^
|
|
95
|
+
"typescript": "^6.0.2"
|
|
96
96
|
},
|
|
97
97
|
"engines": {
|
|
98
98
|
"node": ">=22"
|
|
@@ -9,20 +9,26 @@ Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree
|
|
|
9
9
|
## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mime-types/index.d.ts)
|
|
10
10
|
````ts
|
|
11
11
|
export function lookup(filenameOrExt: string): string | false;
|
|
12
|
+
|
|
12
13
|
export function contentType(filenameOrExt: string): string | false;
|
|
14
|
+
|
|
13
15
|
export function extension(typeString: string): string | false;
|
|
16
|
+
|
|
14
17
|
export function charset(typeString: string): string | false;
|
|
18
|
+
|
|
15
19
|
export namespace charsets {
|
|
16
20
|
const lookup: typeof charset;
|
|
17
21
|
}
|
|
22
|
+
|
|
18
23
|
export const types: { [key: string]: string };
|
|
24
|
+
|
|
19
25
|
export const extensions: { [key: string]: string[] };
|
|
20
26
|
|
|
21
27
|
````
|
|
22
28
|
|
|
23
29
|
### Additional Details
|
|
24
|
-
* Last updated:
|
|
30
|
+
* Last updated: Sat, 07 Jun 2025 02:15:25 GMT
|
|
25
31
|
* Dependencies: none
|
|
26
32
|
|
|
27
33
|
# Credits
|
|
28
|
-
These definitions were written by [Gyusun Yeom](https://github.com/Perlmint).
|
|
34
|
+
These definitions were written by [Gyusun Yeom](https://github.com/Perlmint), and [Sebastian Beltran](https://github.com/bjohansebas).
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
export function lookup(filenameOrExt: string): string | false;
|
|
2
|
+
|
|
2
3
|
export function contentType(filenameOrExt: string): string | false;
|
|
4
|
+
|
|
3
5
|
export function extension(typeString: string): string | false;
|
|
6
|
+
|
|
4
7
|
export function charset(typeString: string): string | false;
|
|
8
|
+
|
|
5
9
|
export namespace charsets {
|
|
6
10
|
const lookup: typeof charset;
|
|
7
11
|
}
|
|
12
|
+
|
|
8
13
|
export const types: { [key: string]: string };
|
|
14
|
+
|
|
9
15
|
export const extensions: { [key: string]: string[] };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@types/mime-types",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "TypeScript definitions for mime-types",
|
|
5
5
|
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mime-types",
|
|
6
6
|
"license": "MIT",
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
"name": "Gyusun Yeom",
|
|
10
10
|
"githubUsername": "Perlmint",
|
|
11
11
|
"url": "https://github.com/Perlmint"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "Sebastian Beltran",
|
|
15
|
+
"githubUsername": "bjohansebas",
|
|
16
|
+
"url": "https://github.com/bjohansebas"
|
|
12
17
|
}
|
|
13
18
|
],
|
|
14
19
|
"main": "",
|
|
@@ -20,6 +25,7 @@
|
|
|
20
25
|
},
|
|
21
26
|
"scripts": {},
|
|
22
27
|
"dependencies": {},
|
|
23
|
-
"
|
|
24
|
-
"
|
|
28
|
+
"peerDependencies": {},
|
|
29
|
+
"typesPublisherContentHash": "a40f1b8ad7a6df5e0c5217e98b92e81fb5d70013ac677ddd1dd4203cfbb7f7a3",
|
|
30
|
+
"typeScriptVersion": "5.1"
|
|
25
31
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Generated by scripts/build.js
|
|
2
|
+
|
|
3
|
+
// prettier-ignore
|
|
4
|
+
const ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];
|
|
5
|
+
|
|
6
|
+
// prettier-ignore
|
|
7
|
+
const fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
|
|
8
|
+
|
|
9
|
+
// prettier-ignore
|
|
10
|
+
const halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];
|
|
11
|
+
|
|
12
|
+
// prettier-ignore
|
|
13
|
+
const narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];
|
|
14
|
+
|
|
15
|
+
// prettier-ignore
|
|
16
|
+
const wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];
|
|
17
|
+
|
|
18
|
+
export {ambiguousRanges, fullwidthRanges, halfwidthRanges, narrowRanges, wideRanges};
|