@bastiangx/opencode-unmoji 0.1.0 → 0.1.1
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/README.md +3 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/plugin.bundled.js +37 -9
- package/dist/streaming/hooks.d.ts +12 -0
- package/dist/streaming/hooks.d.ts.map +1 -0
- package/dist/streaming/hooks.js +8 -0
- package/dist/streaming/hooks.js.map +1 -0
- package/dist/streaming/sanitizer.d.ts +66 -0
- package/dist/streaming/sanitizer.d.ts.map +1 -0
- package/dist/streaming/sanitizer.js +118 -0
- package/dist/streaming/sanitizer.js.map +1 -0
- package/dist/streaming/state.d.ts +10 -0
- package/dist/streaming/state.d.ts.map +1 -0
- package/dist/streaming/state.js +33 -0
- package/dist/streaming/state.js.map +1 -0
- package/dist/utils/code-detector.d.ts.map +1 -1
- package/dist/utils/code-detector.js +39 -9
- package/dist/utils/code-detector.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
<a href="https://codeberg.org/bastiangx/opencode-unmoji">
|
|
3
|
-
<img src="https://github.com/user-attachments/assets/420baa83-4349-41ab-b6f1-a8252c43dee1"/>
|
|
3
|
+
<img height="600" src="https://github.com/user-attachments/assets/420baa83-4349-41ab-b6f1-a8252c43dee1"/>
|
|
4
4
|
</a>
|
|
5
5
|
</div>
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
An [OpenCode](https://opencode.ai) plugin that strips and replace _all_ emojis from agent outputs.
|
|
12
12
|
|
|
13
|
-
<img src="https://github.com/user-attachments/assets/fe606d89-01b0-4da6-81b7-5014d6aff972"/>
|
|
13
|
+
<img height="600" src="https://github.com/user-attachments/assets/fe606d89-01b0-4da6-81b7-5014d6aff972"/>
|
|
14
14
|
|
|
15
15
|
## Installation
|
|
16
16
|
|
|
@@ -109,7 +109,7 @@ Deploy successful [:rocket:] Bug fixed [:bug:]
|
|
|
109
109
|
|
|
110
110
|
Contributions are welcome!
|
|
111
111
|
|
|
112
|
-
Follow the [Contributing guide](
|
|
112
|
+
Follow the [Contributing guide](./CONTRIBUTING.md) for instructions.
|
|
113
113
|
|
|
114
114
|
---
|
|
115
115
|
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,qBAAqB,CAAC;AAIzD,eAAO,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,qBAAqB,CAAC;AAIzD,eAAO,MAAM,MAAM,EAAE,MAqBpB,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,MAAM,GAAW,KAAK,IAAI,EAAE;IACxC,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE/C,IAAI,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;QAC1B,OAAO,EAAW,CAAC;IACpB,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;IAElC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,EAAW,CAAC;IACpB,CAAC;IAED,OAAO;QACN,4BAA4B,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,MAAM,GAAW,KAAK,IAAI,EAAE;IACxC,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE/C,IAAI,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;QAC1B,OAAO,EAAW,CAAC;IACpB,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;IAElC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,EAAW,CAAC;IACpB,CAAC;IAED,OAAO;QACN,4BAA4B,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAChD,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;YAC5B,CAAC;QACF,CAAC;KACQ,CAAC;AACZ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/plugin.bundled.js
CHANGED
|
@@ -22757,8 +22757,6 @@ function loadConfigFile(path) {
|
|
|
22757
22757
|
}
|
|
22758
22758
|
|
|
22759
22759
|
// src/utils/code-detector.ts
|
|
22760
|
-
var DOUBLE_QUOTE_REGEX = /"([^"\\]|\\.)*"/g;
|
|
22761
|
-
var SINGLE_QUOTE_REGEX = /'([^'\\]|\\.)*'/g;
|
|
22762
22760
|
function detectFencedCodeBlocks(text) {
|
|
22763
22761
|
const ranges = [];
|
|
22764
22762
|
const length = text.length;
|
|
@@ -22822,7 +22820,29 @@ function detectFencedCodeBlocks(text) {
|
|
|
22822
22820
|
pos = lineEnd + 1;
|
|
22823
22821
|
}
|
|
22824
22822
|
if (inBlock) {
|
|
22825
|
-
|
|
22823
|
+
const MAX_UNCLOSED_BLOCK_LENGTH = 8192;
|
|
22824
|
+
const maxEnd = Math.min(length, blockStart + MAX_UNCLOSED_BLOCK_LENGTH);
|
|
22825
|
+
let end = maxEnd;
|
|
22826
|
+
let scanPos = blockStart;
|
|
22827
|
+
let prevLineEnd = blockStart;
|
|
22828
|
+
while (scanPos < maxEnd) {
|
|
22829
|
+
const lineBreakIndex = text.indexOf(`
|
|
22830
|
+
`, scanPos);
|
|
22831
|
+
if (lineBreakIndex === -1 || lineBreakIndex >= maxEnd) {
|
|
22832
|
+
break;
|
|
22833
|
+
}
|
|
22834
|
+
const lineEnd = lineBreakIndex;
|
|
22835
|
+
const line = text.slice(scanPos, lineEnd);
|
|
22836
|
+
if (line.trim() === "") {
|
|
22837
|
+
end = prevLineEnd > blockStart ? prevLineEnd : lineEnd;
|
|
22838
|
+
break;
|
|
22839
|
+
}
|
|
22840
|
+
prevLineEnd = lineEnd;
|
|
22841
|
+
scanPos = lineEnd + 1;
|
|
22842
|
+
}
|
|
22843
|
+
if (end > blockStart) {
|
|
22844
|
+
ranges.push({ start: blockStart, end });
|
|
22845
|
+
}
|
|
22826
22846
|
}
|
|
22827
22847
|
return ranges;
|
|
22828
22848
|
}
|
|
@@ -22870,6 +22890,9 @@ function detectInlineCodeOutsideBlocks(text, blockRanges) {
|
|
|
22870
22890
|
return ranges;
|
|
22871
22891
|
}
|
|
22872
22892
|
function detectCodeBlocks(text, options) {
|
|
22893
|
+
if (text.length === 0) {
|
|
22894
|
+
return [];
|
|
22895
|
+
}
|
|
22873
22896
|
const ranges = [];
|
|
22874
22897
|
let blockRanges = [];
|
|
22875
22898
|
if (options.preserveCodeBlocks) {
|
|
@@ -22899,6 +22922,9 @@ function isInPreservedRange(index, ranges) {
|
|
|
22899
22922
|
return false;
|
|
22900
22923
|
}
|
|
22901
22924
|
function detectQuotes(text, options) {
|
|
22925
|
+
if (text.length === 0) {
|
|
22926
|
+
return [];
|
|
22927
|
+
}
|
|
22902
22928
|
const ranges = [];
|
|
22903
22929
|
if (options.preserveBlockquotes) {
|
|
22904
22930
|
let currentPos = 0;
|
|
@@ -22930,8 +22956,8 @@ function detectQuotes(text, options) {
|
|
|
22930
22956
|
}
|
|
22931
22957
|
}
|
|
22932
22958
|
if (options.preserveInlineQuotes) {
|
|
22933
|
-
|
|
22934
|
-
let doubleMatch =
|
|
22959
|
+
const doubleQuoteRegex = /"([^"\\]|\\.)*"/g;
|
|
22960
|
+
let doubleMatch = doubleQuoteRegex.exec(text);
|
|
22935
22961
|
while (doubleMatch !== null) {
|
|
22936
22962
|
const matchIndex = doubleMatch.index;
|
|
22937
22963
|
const matchLength = doubleMatch[0].length;
|
|
@@ -22948,10 +22974,10 @@ function detectQuotes(text, options) {
|
|
|
22948
22974
|
end: matchIndex + matchLength
|
|
22949
22975
|
});
|
|
22950
22976
|
}
|
|
22951
|
-
doubleMatch =
|
|
22977
|
+
doubleMatch = doubleQuoteRegex.exec(text);
|
|
22952
22978
|
}
|
|
22953
|
-
|
|
22954
|
-
let singleMatch =
|
|
22979
|
+
const singleQuoteRegex = /'([^'\\]|\\.)*'/g;
|
|
22980
|
+
let singleMatch = singleQuoteRegex.exec(text);
|
|
22955
22981
|
while (singleMatch !== null) {
|
|
22956
22982
|
const matchIndex = singleMatch.index;
|
|
22957
22983
|
const matchLength = singleMatch[0].length;
|
|
@@ -22968,7 +22994,7 @@ function detectQuotes(text, options) {
|
|
|
22968
22994
|
end: matchIndex + matchLength
|
|
22969
22995
|
});
|
|
22970
22996
|
}
|
|
22971
|
-
singleMatch =
|
|
22997
|
+
singleMatch = singleQuoteRegex.exec(text);
|
|
22972
22998
|
}
|
|
22973
22999
|
}
|
|
22974
23000
|
if (ranges.length === 0) {
|
|
@@ -51554,6 +51580,8 @@ var Unmoji = async () => {
|
|
|
51554
51580
|
}
|
|
51555
51581
|
};
|
|
51556
51582
|
};
|
|
51583
|
+
var src_default = Unmoji;
|
|
51557
51584
|
export {
|
|
51585
|
+
src_default as default,
|
|
51558
51586
|
Unmoji
|
|
51559
51587
|
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { UnmojiConfig } from "../types/config.js";
|
|
2
|
+
type TextCompleteInput = {
|
|
3
|
+
sessionID: string;
|
|
4
|
+
messageID: string;
|
|
5
|
+
partID: string;
|
|
6
|
+
};
|
|
7
|
+
type TextCompleteOutput = {
|
|
8
|
+
text: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function onTextComplete(input: TextCompleteInput, output: TextCompleteOutput, config: UnmojiConfig): Promise<void>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/streaming/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,KAAK,iBAAiB,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,wBAAgB,cAAc,CAC7B,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAQf"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { processText } from "../core/processor.js";
|
|
2
|
+
export function onTextComplete(input, output, config) {
|
|
3
|
+
processText(output.text, config).match((sanitized) => {
|
|
4
|
+
output.text = sanitized;
|
|
5
|
+
}, () => { });
|
|
6
|
+
return Promise.resolve();
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/streaming/hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAYnD,MAAM,UAAU,cAAc,CAC7B,KAAwB,EACxB,MAA0B,EAC1B,MAAoB;IAEpB,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CACrC,CAAC,SAAS,EAAE,EAAE;QACb,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;IACzB,CAAC,EACD,GAAG,EAAE,GAAE,CAAC,CACR,CAAC;IACF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { UnmojiConfig } from "../types/config.js";
|
|
2
|
+
import type { StreamingError } from "../types/errors.js";
|
|
3
|
+
import type { StreamingState } from "./state.js";
|
|
4
|
+
import { type ResultAsync } from "neverthrow";
|
|
5
|
+
type MessagePart = {
|
|
6
|
+
id: string;
|
|
7
|
+
sessionID: string;
|
|
8
|
+
messageID: string;
|
|
9
|
+
type: string;
|
|
10
|
+
text?: string;
|
|
11
|
+
role?: string;
|
|
12
|
+
};
|
|
13
|
+
type MessagePartUpdatedEvent = {
|
|
14
|
+
type: "message.part.updated";
|
|
15
|
+
properties: {
|
|
16
|
+
part: MessagePart;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
type SessionIdleEvent = {
|
|
20
|
+
type: "session.idle";
|
|
21
|
+
properties: {
|
|
22
|
+
sessionID: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
type OpencodeEvent = MessagePartUpdatedEvent | SessionIdleEvent;
|
|
26
|
+
type OpencodeClient = {
|
|
27
|
+
event: {
|
|
28
|
+
subscribe: () => Promise<{
|
|
29
|
+
stream: AsyncIterable<OpencodeEvent>;
|
|
30
|
+
}>;
|
|
31
|
+
};
|
|
32
|
+
session: {
|
|
33
|
+
updatePart: (args: {
|
|
34
|
+
sessionID: string;
|
|
35
|
+
messageID: string;
|
|
36
|
+
partID: string;
|
|
37
|
+
text: string;
|
|
38
|
+
}) => Promise<void>;
|
|
39
|
+
};
|
|
40
|
+
message: {
|
|
41
|
+
list: (args: {
|
|
42
|
+
sessionID: string;
|
|
43
|
+
}) => Promise<Message[]>;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
type Message = {
|
|
47
|
+
id: string;
|
|
48
|
+
sessionID: string;
|
|
49
|
+
role: string;
|
|
50
|
+
parts: MessagePart[];
|
|
51
|
+
};
|
|
52
|
+
type SanitizeDeps = {
|
|
53
|
+
client: OpencodeClient;
|
|
54
|
+
config: UnmojiConfig;
|
|
55
|
+
};
|
|
56
|
+
type DebounceArgs = {
|
|
57
|
+
deps: SanitizeDeps;
|
|
58
|
+
state: StreamingState;
|
|
59
|
+
part: MessagePart;
|
|
60
|
+
};
|
|
61
|
+
export declare function scheduleDebouncedSanitize(args: DebounceArgs): void;
|
|
62
|
+
export declare function sanitizeAndUpdatePart(args: DebounceArgs): ResultAsync<void, StreamingError>;
|
|
63
|
+
export declare function startStreamingSanitizer(deps: SanitizeDeps, state: StreamingState): ResultAsync<void, StreamingError>;
|
|
64
|
+
export declare function sanitizeLastAssistantMessage(client: OpencodeClient, config: UnmojiConfig, sessionID: string): ResultAsync<void, StreamingError>;
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../src/streaming/sanitizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,KAAK,WAAW,EAA+B,MAAM,YAAY,CAAC;AAG3E,KAAK,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC9B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,UAAU,EAAE;QACX,IAAI,EAAE,WAAW,CAAC;KAClB,CAAC;CACF,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;CACF,CAAC;AAEF,KAAK,aAAa,GAAG,uBAAuB,GAAG,gBAAgB,CAAC;AAEhE,KAAK,cAAc,GAAG;IACrB,KAAK,EAAE;QACN,SAAS,EAAE,MAAM,OAAO,CAAC;YAAE,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;SAAE,CAAC,CAAC;KACnE,CAAC;IACF,OAAO,EAAE;QACR,UAAU,EAAE,CAAC,IAAI,EAAE;YAClB,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC;YACf,IAAI,EAAE,MAAM,CAAC;SACb,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACpB,CAAC;IACF,OAAO,EAAE;QACR,IAAI,EAAE,CAAC,IAAI,EAAE;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;KAC1D,CAAC;CACF,CAAC;AAEF,KAAK,OAAO,GAAG;IACd,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,EAAE,CAAC;CACrB,CAAC;AAEF,KAAK,YAAY,GAAG;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,KAAK,YAAY,GAAG;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;CAClB,CAAC;AAmBF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAgBlE;AAED,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,YAAY,GAChB,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAqCnC;AAED,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,cAAc,GACnB,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAyBnC;AAED,wBAAgB,4BAA4B,CAC3C,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GACf,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAgDnC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { registerPart, clearSessionState } from "./state.js";
|
|
2
|
+
import { ResultAsync as RA, errAsync } from "neverthrow";
|
|
3
|
+
import { processText } from "../core/processor.js";
|
|
4
|
+
const DEBOUNCE_MS = 300;
|
|
5
|
+
function isAssistantPart(part) {
|
|
6
|
+
return part.role === "assistant";
|
|
7
|
+
}
|
|
8
|
+
function toStreamingUpdateError(partID) {
|
|
9
|
+
return (error) => ({
|
|
10
|
+
domain: "streaming",
|
|
11
|
+
code: "SDK_UPDATE_FAILED",
|
|
12
|
+
partID,
|
|
13
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export function scheduleDebouncedSanitize(args) {
|
|
17
|
+
const { deps, state, part } = args;
|
|
18
|
+
if (typeof part.text !== "string")
|
|
19
|
+
return;
|
|
20
|
+
registerPart(state, part.sessionID, part.id);
|
|
21
|
+
const existing = state.timersByPart.get(part.id);
|
|
22
|
+
if (existing !== undefined) {
|
|
23
|
+
clearTimeout(existing);
|
|
24
|
+
}
|
|
25
|
+
const handle = setTimeout(() => {
|
|
26
|
+
void sanitizeAndUpdatePart({ deps, state, part });
|
|
27
|
+
}, DEBOUNCE_MS);
|
|
28
|
+
state.timersByPart.set(part.id, handle);
|
|
29
|
+
}
|
|
30
|
+
export function sanitizeAndUpdatePart(args) {
|
|
31
|
+
const { deps, state, part } = args;
|
|
32
|
+
const rawText = part.text ?? "";
|
|
33
|
+
const last = state.lastTextByPart.get(part.id);
|
|
34
|
+
if (last === rawText) {
|
|
35
|
+
return RA.fromSafePromise(Promise.resolve());
|
|
36
|
+
}
|
|
37
|
+
const processResult = processText(rawText, deps.config);
|
|
38
|
+
if (processResult.isErr()) {
|
|
39
|
+
return errAsync({
|
|
40
|
+
domain: "streaming",
|
|
41
|
+
code: "SANITIZE_FAILED",
|
|
42
|
+
cause: processResult.error,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const sanitized = processResult.value;
|
|
46
|
+
if (sanitized === rawText) {
|
|
47
|
+
state.lastTextByPart.set(part.id, rawText);
|
|
48
|
+
return RA.fromSafePromise(Promise.resolve());
|
|
49
|
+
}
|
|
50
|
+
return RA.fromPromise(deps.client.session.updatePart({
|
|
51
|
+
sessionID: part.sessionID,
|
|
52
|
+
messageID: part.messageID,
|
|
53
|
+
partID: part.id,
|
|
54
|
+
text: sanitized,
|
|
55
|
+
}), toStreamingUpdateError(part.id)).map(() => {
|
|
56
|
+
state.lastTextByPart.set(part.id, sanitized);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
export function startStreamingSanitizer(deps, state) {
|
|
60
|
+
return RA.fromPromise((async () => {
|
|
61
|
+
const events = await deps.client.event.subscribe();
|
|
62
|
+
for await (const event of events.stream) {
|
|
63
|
+
if (event.type === "session.idle") {
|
|
64
|
+
clearSessionState(state, event.properties.sessionID);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (event.type !== "message.part.updated")
|
|
68
|
+
continue;
|
|
69
|
+
const part = event.properties.part;
|
|
70
|
+
if (part.type !== "text")
|
|
71
|
+
continue;
|
|
72
|
+
if (!isAssistantPart(part))
|
|
73
|
+
continue;
|
|
74
|
+
scheduleDebouncedSanitize({ deps, state, part });
|
|
75
|
+
}
|
|
76
|
+
})(), (error) => ({
|
|
77
|
+
domain: "streaming",
|
|
78
|
+
code: "EVENT_SUBSCRIPTION_FAILED",
|
|
79
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
export function sanitizeLastAssistantMessage(client, config, sessionID) {
|
|
83
|
+
return RA.fromPromise(client.message.list({ sessionID }), (error) => ({
|
|
84
|
+
domain: "streaming",
|
|
85
|
+
code: "SDK_FETCH_FAILED",
|
|
86
|
+
sessionID,
|
|
87
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
88
|
+
})).andThen((messages) => {
|
|
89
|
+
const lastAssistant = messages.filter((m) => m.role === "assistant").at(-1);
|
|
90
|
+
if (!lastAssistant) {
|
|
91
|
+
return RA.fromSafePromise(Promise.resolve());
|
|
92
|
+
}
|
|
93
|
+
const updatePromises = lastAssistant.parts
|
|
94
|
+
.filter((p) => p.type === "text" && typeof p.text === "string")
|
|
95
|
+
.map((part) => {
|
|
96
|
+
const result = processText(part.text ?? "", config);
|
|
97
|
+
if (result.isErr()) {
|
|
98
|
+
return errAsync({
|
|
99
|
+
domain: "streaming",
|
|
100
|
+
code: "SANITIZE_FAILED",
|
|
101
|
+
cause: result.error,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
const sanitized = result.value;
|
|
105
|
+
if (sanitized === part.text) {
|
|
106
|
+
return RA.fromSafePromise(Promise.resolve());
|
|
107
|
+
}
|
|
108
|
+
return RA.fromPromise(client.session.updatePart({
|
|
109
|
+
sessionID: part.sessionID,
|
|
110
|
+
messageID: part.messageID,
|
|
111
|
+
partID: part.id,
|
|
112
|
+
text: sanitized,
|
|
113
|
+
}), toStreamingUpdateError(part.id));
|
|
114
|
+
});
|
|
115
|
+
return RA.combine(updatePromises).map(() => undefined);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../src/streaming/sanitizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type StreamingState = {
|
|
2
|
+
lastTextByPart: Map<string, string>;
|
|
3
|
+
timersByPart: Map<string, NodeJS.Timeout>;
|
|
4
|
+
partsBySession: Map<string, Set<string>>;
|
|
5
|
+
};
|
|
6
|
+
export declare function createStreamingState(): StreamingState;
|
|
7
|
+
export declare function registerPart(state: StreamingState, sessionID: string, partID: string): void;
|
|
8
|
+
export declare function clearPartState(state: StreamingState, partID: string): void;
|
|
9
|
+
export declare function clearSessionState(state: StreamingState, sessionID: string): void;
|
|
10
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/streaming/state.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC5B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CACzC,CAAC;AAEF,wBAAgB,oBAAoB,IAAI,cAAc,CAMrD;AAED,wBAAgB,YAAY,CAC3B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACZ,IAAI,CAON;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAO1E;AAED,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,GACf,IAAI,CAQN"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export function createStreamingState() {
|
|
2
|
+
return {
|
|
3
|
+
lastTextByPart: new Map(),
|
|
4
|
+
timersByPart: new Map(),
|
|
5
|
+
partsBySession: new Map(),
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function registerPart(state, sessionID, partID) {
|
|
9
|
+
let set = state.partsBySession.get(sessionID);
|
|
10
|
+
if (set === undefined) {
|
|
11
|
+
set = new Set();
|
|
12
|
+
state.partsBySession.set(sessionID, set);
|
|
13
|
+
}
|
|
14
|
+
set.add(partID);
|
|
15
|
+
}
|
|
16
|
+
export function clearPartState(state, partID) {
|
|
17
|
+
const timer = state.timersByPart.get(partID);
|
|
18
|
+
if (timer !== undefined) {
|
|
19
|
+
clearTimeout(timer);
|
|
20
|
+
state.timersByPart.delete(partID);
|
|
21
|
+
}
|
|
22
|
+
state.lastTextByPart.delete(partID);
|
|
23
|
+
}
|
|
24
|
+
export function clearSessionState(state, sessionID) {
|
|
25
|
+
const partIDs = state.partsBySession.get(sessionID);
|
|
26
|
+
if (partIDs === undefined)
|
|
27
|
+
return;
|
|
28
|
+
for (const partID of partIDs) {
|
|
29
|
+
clearPartState(state, partID);
|
|
30
|
+
}
|
|
31
|
+
state.partsBySession.delete(sessionID);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/streaming/state.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,oBAAoB;IACnC,OAAO;QACN,cAAc,EAAE,IAAI,GAAG,EAAE;QACzB,YAAY,EAAE,IAAI,GAAG,EAAE;QACvB,cAAc,EAAE,IAAI,GAAG,EAAE;KACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC3B,KAAqB,EACrB,SAAiB,EACjB,MAAc;IAEd,IAAI,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACvB,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAqB,EAAE,MAAc;IACnE,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAChC,KAAqB,EACrB,SAAiB;IAEjB,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO;IAElC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-detector.d.ts","sourceRoot":"","sources":["../../src/utils/code-detector.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;
|
|
1
|
+
{"version":3,"file":"code-detector.d.ts","sourceRoot":"","sources":["../../src/utils/code-detector.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,sBAAsB;IACtC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IAClC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;CAC9B;AAuKD,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,sBAAsB,GAC7B,SAAS,EAAE,CA2Bb;AAED,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,EAAE,GACjB,OAAO,CAOT;AAED,wBAAgB,YAAY,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,GACzB,SAAS,EAAE,CAmGb;AAED,wBAAgB,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,GAAG,SAAS,EAAE,CAuCpE"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
const DOUBLE_QUOTE_REGEX = /"([^"\\]|\\.)*"/g;
|
|
2
|
-
const SINGLE_QUOTE_REGEX = /'([^'\\]|\\.)*'/g;
|
|
3
1
|
function detectFencedCodeBlocks(text) {
|
|
4
2
|
const ranges = [];
|
|
5
3
|
const length = text.length;
|
|
@@ -63,7 +61,33 @@ function detectFencedCodeBlocks(text) {
|
|
|
63
61
|
pos = lineEnd + 1;
|
|
64
62
|
}
|
|
65
63
|
if (inBlock) {
|
|
66
|
-
|
|
64
|
+
// Unterminated fenced block: bound the preserved range so we do
|
|
65
|
+
// not treat the entire remaining buffer as code. This is
|
|
66
|
+
// important when processing streaming chunks where the closing
|
|
67
|
+
// fence may not have arrived yet.
|
|
68
|
+
const MAX_UNCLOSED_BLOCK_LENGTH = 8192;
|
|
69
|
+
const maxEnd = Math.min(length, blockStart + MAX_UNCLOSED_BLOCK_LENGTH);
|
|
70
|
+
let end = maxEnd;
|
|
71
|
+
let scanPos = blockStart;
|
|
72
|
+
let prevLineEnd = blockStart;
|
|
73
|
+
while (scanPos < maxEnd) {
|
|
74
|
+
const lineBreakIndex = text.indexOf("\n", scanPos);
|
|
75
|
+
if (lineBreakIndex === -1 || lineBreakIndex >= maxEnd) {
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
const lineEnd = lineBreakIndex;
|
|
79
|
+
const line = text.slice(scanPos, lineEnd);
|
|
80
|
+
// Stop the block at the first blank line after some content.
|
|
81
|
+
if (line.trim() === "") {
|
|
82
|
+
end = prevLineEnd > blockStart ? prevLineEnd : lineEnd;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
prevLineEnd = lineEnd;
|
|
86
|
+
scanPos = lineEnd + 1;
|
|
87
|
+
}
|
|
88
|
+
if (end > blockStart) {
|
|
89
|
+
ranges.push({ start: blockStart, end });
|
|
90
|
+
}
|
|
67
91
|
}
|
|
68
92
|
return ranges;
|
|
69
93
|
}
|
|
@@ -109,6 +133,9 @@ function detectInlineCodeOutsideBlocks(text, blockRanges) {
|
|
|
109
133
|
return ranges;
|
|
110
134
|
}
|
|
111
135
|
export function detectCodeBlocks(text, options) {
|
|
136
|
+
if (text.length === 0) {
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
112
139
|
const ranges = [];
|
|
113
140
|
let blockRanges = [];
|
|
114
141
|
if (options.preserveCodeBlocks) {
|
|
@@ -138,6 +165,9 @@ export function isInPreservedRange(index, ranges) {
|
|
|
138
165
|
return false;
|
|
139
166
|
}
|
|
140
167
|
export function detectQuotes(text, options) {
|
|
168
|
+
if (text.length === 0) {
|
|
169
|
+
return [];
|
|
170
|
+
}
|
|
141
171
|
const ranges = [];
|
|
142
172
|
if (options.preserveBlockquotes) {
|
|
143
173
|
let currentPos = 0;
|
|
@@ -168,8 +198,8 @@ export function detectQuotes(text, options) {
|
|
|
168
198
|
}
|
|
169
199
|
}
|
|
170
200
|
if (options.preserveInlineQuotes) {
|
|
171
|
-
|
|
172
|
-
let doubleMatch =
|
|
201
|
+
const doubleQuoteRegex = /"([^"\\]|\\.)*"/g;
|
|
202
|
+
let doubleMatch = doubleQuoteRegex.exec(text);
|
|
173
203
|
while (doubleMatch !== null) {
|
|
174
204
|
const matchIndex = doubleMatch.index;
|
|
175
205
|
const matchLength = doubleMatch[0].length;
|
|
@@ -186,10 +216,10 @@ export function detectQuotes(text, options) {
|
|
|
186
216
|
end: matchIndex + matchLength,
|
|
187
217
|
});
|
|
188
218
|
}
|
|
189
|
-
doubleMatch =
|
|
219
|
+
doubleMatch = doubleQuoteRegex.exec(text);
|
|
190
220
|
}
|
|
191
|
-
|
|
192
|
-
let singleMatch =
|
|
221
|
+
const singleQuoteRegex = /'([^'\\]|\\.)*'/g;
|
|
222
|
+
let singleMatch = singleQuoteRegex.exec(text);
|
|
193
223
|
while (singleMatch !== null) {
|
|
194
224
|
const matchIndex = singleMatch.index;
|
|
195
225
|
const matchLength = singleMatch[0].length;
|
|
@@ -206,7 +236,7 @@ export function detectQuotes(text, options) {
|
|
|
206
236
|
end: matchIndex + matchLength,
|
|
207
237
|
});
|
|
208
238
|
}
|
|
209
|
-
singleMatch =
|
|
239
|
+
singleMatch = singleQuoteRegex.exec(text);
|
|
210
240
|
}
|
|
211
241
|
}
|
|
212
242
|
if (ranges.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-detector.js","sourceRoot":"","sources":["../../src/utils/code-detector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"code-detector.js","sourceRoot":"","sources":["../../src/utils/code-detector.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastiangx/opencode-unmoji",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "OpenCode plugin to strip or replace emojis from agent outputs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -54,6 +54,6 @@
|
|
|
54
54
|
"vitest": "^4.0.16"
|
|
55
55
|
},
|
|
56
56
|
"peerDependencies": {
|
|
57
|
-
"@opencode-ai/plugin": "^1.0.
|
|
57
|
+
"@opencode-ai/plugin": "^1.0.203"
|
|
58
58
|
}
|
|
59
59
|
}
|