@bastiangx/opencode-unmoji 0.1.0 → 0.3.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/README.md +24 -5
- package/dist/core/emoji-data-generated.d.ts.map +1 -1
- package/dist/core/emoji-data-generated.js +7645 -5370
- package/dist/core/emoji-data-generated.js.map +1 -1
- package/dist/core/emoji-data.d.ts +3 -0
- package/dist/core/emoji-data.d.ts.map +1 -1
- package/dist/core/emoji-data.js +46 -2
- package/dist/core/emoji-data.js.map +1 -1
- package/dist/core/processor.d.ts +12 -1
- package/dist/core/processor.d.ts.map +1 -1
- package/dist/core/processor.js +67 -12
- package/dist/core/processor.js.map +1 -1
- package/dist/data/emoji-data-gen.d.ts +6 -0
- package/dist/data/emoji-data-gen.d.ts.map +1 -0
- package/dist/data/emoji-data-gen.js +30638 -0
- package/dist/data/emoji-data-gen.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +135 -4
- package/dist/index.js.map +1 -1
- package/dist/plugin.bundled.js +7949 -5445
- package/dist/src/core/config.d.ts +22 -0
- package/dist/src/core/config.d.ts.map +1 -0
- package/dist/src/core/config.js +82 -0
- package/dist/src/core/config.js.map +1 -0
- package/dist/src/core/emoji-data.d.ts +11 -0
- package/dist/src/core/emoji-data.d.ts.map +1 -0
- package/dist/src/core/emoji-data.js +105 -0
- package/dist/src/core/emoji-data.js.map +1 -0
- package/dist/src/core/processor.d.ts +16 -0
- package/dist/src/core/processor.d.ts.map +1 -0
- package/dist/src/core/processor.js +115 -0
- package/dist/src/core/processor.js.map +1 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +153 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/types/config.d.ts +55 -0
- package/dist/src/types/config.d.ts.map +1 -0
- package/dist/src/types/config.js +36 -0
- package/dist/src/types/config.js.map +1 -0
- package/dist/src/types/errors.d.ts +59 -0
- package/dist/src/types/errors.d.ts.map +1 -0
- package/dist/src/types/errors.js +6 -0
- package/dist/src/types/errors.js.map +1 -0
- package/dist/src/utils/code-detector.d.ts +17 -0
- package/dist/src/utils/code-detector.d.ts.map +1 -0
- package/dist/src/utils/code-detector.js +288 -0
- package/dist/src/utils/code-detector.js.map +1 -0
- package/dist/src/utils/grapheme.d.ts +20 -0
- package/dist/src/utils/grapheme.d.ts.map +1 -0
- package/dist/src/utils/grapheme.js +82 -0
- package/dist/src/utils/grapheme.js.map +1 -0
- 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/types/config.d.ts +21 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +14 -0
- package/dist/types/config.js.map +1 -1
- package/dist/utils/code-detector.d.ts.map +1 -1
- package/dist/utils/code-detector.js +46 -10
- package/dist/utils/code-detector.js.map +1 -1
- package/dist/utils/grapheme.d.ts.map +1 -1
- package/dist/utils/grapheme.js +20 -2
- package/dist/utils/grapheme.js.map +1 -1
- package/package.json +19 -6
|
@@ -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"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export type ReplacementStyle = "github" | "slack" | "discord" | "cldr" | "iamcal" | "joypixels";
|
|
3
|
+
export type MarkdownExtension = ".md" | ".mdx" | ".mdc" | ".markdown";
|
|
4
|
+
export type NotificationStyle = "thread" | "thread-verbose" | "toast";
|
|
3
5
|
export type UnmojiConfig = {
|
|
4
6
|
enabled: boolean;
|
|
5
7
|
mode: "strip" | "replace";
|
|
@@ -8,6 +10,11 @@ export type UnmojiConfig = {
|
|
|
8
10
|
preserveCodeBlocks: boolean;
|
|
9
11
|
preserveInlineCode: boolean;
|
|
10
12
|
skipQuotes: boolean;
|
|
13
|
+
processMarkdown: boolean;
|
|
14
|
+
markdownExtensions: MarkdownExtension[];
|
|
15
|
+
maxMarkdownChars: number;
|
|
16
|
+
showNotification: boolean;
|
|
17
|
+
notificationStyle: NotificationStyle;
|
|
11
18
|
};
|
|
12
19
|
export declare const ConfigSchema: z.ZodObject<{
|
|
13
20
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -31,6 +38,20 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
31
38
|
preserveCodeBlocks: z.ZodDefault<z.ZodBoolean>;
|
|
32
39
|
preserveInlineCode: z.ZodDefault<z.ZodBoolean>;
|
|
33
40
|
skipQuotes: z.ZodDefault<z.ZodBoolean>;
|
|
41
|
+
processMarkdown: z.ZodDefault<z.ZodBoolean>;
|
|
42
|
+
markdownExtensions: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
43
|
+
".md": ".md";
|
|
44
|
+
".mdx": ".mdx";
|
|
45
|
+
".mdc": ".mdc";
|
|
46
|
+
".markdown": ".markdown";
|
|
47
|
+
}>>>;
|
|
48
|
+
maxMarkdownChars: z.ZodDefault<z.ZodNumber>;
|
|
49
|
+
showNotification: z.ZodDefault<z.ZodBoolean>;
|
|
50
|
+
notificationStyle: z.ZodDefault<z.ZodEnum<{
|
|
51
|
+
thread: "thread";
|
|
52
|
+
"thread-verbose": "thread-verbose";
|
|
53
|
+
toast: "toast";
|
|
54
|
+
}>>;
|
|
34
55
|
}, z.core.$strip>;
|
|
35
56
|
export declare const DEFAULT_CONFIG: UnmojiConfig;
|
|
36
57
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,gBAAgB,GACzB,QAAQ,GACR,OAAO,GACP,SAAS,GACT,MAAM,GACN,QAAQ,GACR,WAAW,CAAC;AAEf,MAAM,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iBAAiB,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACpD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,gBAAgB,GACzB,QAAQ,GACR,OAAO,GACP,SAAS,GACT,MAAM,GACN,QAAQ,GACR,WAAW,CAAC;AAEf,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAEtE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,gBAAgB,GAAG,OAAO,CAAC;AAEtE,MAAM,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iBAAiB,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACpD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,iBAAiB,CAAC;CACrC,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBvB,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,YAa5B,CAAC"}
|
package/dist/types/config.js
CHANGED
|
@@ -11,6 +11,15 @@ export const ConfigSchema = z.object({
|
|
|
11
11
|
preserveCodeBlocks: z.boolean().default(true),
|
|
12
12
|
preserveInlineCode: z.boolean().default(true),
|
|
13
13
|
skipQuotes: z.boolean().default(false),
|
|
14
|
+
processMarkdown: z.boolean().default(true),
|
|
15
|
+
markdownExtensions: z
|
|
16
|
+
.array(z.enum([".md", ".mdx", ".mdc", ".markdown"]))
|
|
17
|
+
.default([".md"]),
|
|
18
|
+
maxMarkdownChars: z.number().positive().default(1_000_000),
|
|
19
|
+
showNotification: z.boolean().default(true),
|
|
20
|
+
notificationStyle: z
|
|
21
|
+
.enum(["thread", "thread-verbose", "toast"])
|
|
22
|
+
.default("thread"),
|
|
14
23
|
});
|
|
15
24
|
export const DEFAULT_CONFIG = {
|
|
16
25
|
enabled: true,
|
|
@@ -20,5 +29,10 @@ export const DEFAULT_CONFIG = {
|
|
|
20
29
|
preserveCodeBlocks: true,
|
|
21
30
|
preserveInlineCode: true,
|
|
22
31
|
skipQuotes: false,
|
|
32
|
+
processMarkdown: true,
|
|
33
|
+
markdownExtensions: [".md"],
|
|
34
|
+
maxMarkdownChars: 1_000_000,
|
|
35
|
+
showNotification: true,
|
|
36
|
+
notificationStyle: "thread",
|
|
23
37
|
};
|
|
24
38
|
//# sourceMappingURL=config.js.map
|
package/dist/types/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA6BxB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACnD,gBAAgB,EAAE,CAAC;SACjB,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;SACnE,OAAO,CAAC,QAAQ,CAAC;IACnB,iBAAiB,EAAE,CAAC;SAClB,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;SACtC,OAAO,CAAC,UAAU,CAAC;IACrB,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7C,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7C,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC1C,kBAAkB,EAAE,CAAC;SACnB,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;SACnD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;IAClB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1D,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C,iBAAiB,EAAE,CAAC;SAClB,IAAI,CAAC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;SAC3C,OAAO,CAAC,QAAQ,CAAC;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC3C,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,OAAO;IACb,gBAAgB,EAAE,QAAQ;IAC1B,iBAAiB,EAAE,UAAU;IAC7B,kBAAkB,EAAE,IAAI;IACxB,kBAAkB,EAAE,IAAI;IACxB,UAAU,EAAE,KAAK;IACjB,eAAe,EAAE,IAAI;IACrB,kBAAkB,EAAE,CAAC,KAAK,CAAC;IAC3B,gBAAgB,EAAE,SAAS;IAC3B,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,QAAQ;CAC3B,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,CAkCb;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,15 +133,24 @@ 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
|
+
// Always detect fenced blocks when we need inline code detection,
|
|
142
|
+
// even if we're not preserving them. This ensures inline code
|
|
143
|
+
// detection knows where fenced blocks are to exclude them.
|
|
144
|
+
if (options.preserveCodeBlocks || options.preserveInlineCode) {
|
|
115
145
|
blockRanges = detectFencedCodeBlocks(text);
|
|
146
|
+
}
|
|
147
|
+
if (options.preserveCodeBlocks) {
|
|
116
148
|
for (const r of blockRanges) {
|
|
117
149
|
ranges.push(r);
|
|
118
150
|
}
|
|
119
151
|
}
|
|
120
152
|
if (options.preserveInlineCode) {
|
|
153
|
+
// Use blockRanges to exclude inline code detection from fenced blocks
|
|
121
154
|
const inlineRanges = detectInlineCodeOutsideBlocks(text, blockRanges);
|
|
122
155
|
for (const r of inlineRanges) {
|
|
123
156
|
ranges.push(r);
|
|
@@ -138,6 +171,9 @@ export function isInPreservedRange(index, ranges) {
|
|
|
138
171
|
return false;
|
|
139
172
|
}
|
|
140
173
|
export function detectQuotes(text, options) {
|
|
174
|
+
if (text.length === 0) {
|
|
175
|
+
return [];
|
|
176
|
+
}
|
|
141
177
|
const ranges = [];
|
|
142
178
|
if (options.preserveBlockquotes) {
|
|
143
179
|
let currentPos = 0;
|
|
@@ -168,8 +204,8 @@ export function detectQuotes(text, options) {
|
|
|
168
204
|
}
|
|
169
205
|
}
|
|
170
206
|
if (options.preserveInlineQuotes) {
|
|
171
|
-
|
|
172
|
-
let doubleMatch =
|
|
207
|
+
const doubleQuoteRegex = /"([^"\\]|\\.)*"/g;
|
|
208
|
+
let doubleMatch = doubleQuoteRegex.exec(text);
|
|
173
209
|
while (doubleMatch !== null) {
|
|
174
210
|
const matchIndex = doubleMatch.index;
|
|
175
211
|
const matchLength = doubleMatch[0].length;
|
|
@@ -186,10 +222,10 @@ export function detectQuotes(text, options) {
|
|
|
186
222
|
end: matchIndex + matchLength,
|
|
187
223
|
});
|
|
188
224
|
}
|
|
189
|
-
doubleMatch =
|
|
225
|
+
doubleMatch = doubleQuoteRegex.exec(text);
|
|
190
226
|
}
|
|
191
|
-
|
|
192
|
-
let singleMatch =
|
|
227
|
+
const singleQuoteRegex = /'([^'\\]|\\.)*'/g;
|
|
228
|
+
let singleMatch = singleQuoteRegex.exec(text);
|
|
193
229
|
while (singleMatch !== null) {
|
|
194
230
|
const matchIndex = singleMatch.index;
|
|
195
231
|
const matchLength = singleMatch[0].length;
|
|
@@ -206,7 +242,7 @@ export function detectQuotes(text, options) {
|
|
|
206
242
|
end: matchIndex + matchLength,
|
|
207
243
|
});
|
|
208
244
|
}
|
|
209
|
-
singleMatch =
|
|
245
|
+
singleMatch = singleQuoteRegex.exec(text);
|
|
210
246
|
}
|
|
211
247
|
}
|
|
212
248
|
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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grapheme.d.ts","sourceRoot":"","sources":["../../src/utils/grapheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"grapheme.d.ts","sourceRoot":"","sources":["../../src/utils/grapheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAwDH,wBAAiB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAgB1D;AAQD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgBvD"}
|
package/dist/utils/grapheme.js
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* @see src/core/processor.ts
|
|
17
17
|
*/
|
|
18
18
|
import Graphemer from "graphemer";
|
|
19
|
+
import { EXTRA_STRIPPABLE } from "../core/emoji-data.js";
|
|
19
20
|
let intlSegmenter = null;
|
|
20
21
|
let graphemer = null;
|
|
21
22
|
function hasIntlSegmenter() {
|
|
@@ -57,8 +58,25 @@ export function* graphemes(text) {
|
|
|
57
58
|
yield segment;
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
|
-
|
|
61
|
+
// Fast path: Extended_Pictographic and Regional Indicators
|
|
62
|
+
const _PICTOGRAPHIC_RI_REGEX = /[\p{Extended_Pictographic}\p{RI}]/u;
|
|
63
|
+
// Keycap emoji pattern: digit/hash/asterisk + optional variation selector + keycap
|
|
64
|
+
const _KEYCAP_REGEX = /[0-9#*]\uFE0F?\u20E3/u;
|
|
61
65
|
export function mightContainEmoji(text) {
|
|
62
|
-
|
|
66
|
+
// Fast path: check Extended_Pictographic and Regional Indicators first
|
|
67
|
+
if (_PICTOGRAPHIC_RI_REGEX.test(text)) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
// Slow path: check for keycap sequences (rare in practice)
|
|
71
|
+
if (_KEYCAP_REGEX.test(text)) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
// Check for extra strippables (non-emoji glyphs we want to remove)
|
|
75
|
+
for (const extra of EXTRA_STRIPPABLE) {
|
|
76
|
+
if (text.includes(extra)) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
63
81
|
}
|
|
64
82
|
//# sourceMappingURL=grapheme.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grapheme.js","sourceRoot":"","sources":["../../src/utils/grapheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,SAAS,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"grapheme.js","sourceRoot":"","sources":["../../src/utils/grapheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAUzD,IAAI,aAAa,GAAyB,IAAI,CAAC;AAC/C,IAAI,SAAS,GAAqB,IAAI,CAAC;AAEvC,SAAS,gBAAgB;IACxB,MAAM,UAAU,GAAG,IAElB,CAAC;IAEF,OAAO,OAAO,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC;AACnD,CAAC;AAED,SAAS,gBAAgB;IACxB,IAAI,aAAa,EAAE,CAAC;QACnB,OAAO,aAAa,CAAC;IACtB,CAAC;IAED,MAAM,UAAU,GAAG,IAElB,CAAC;IAEF,aAAa,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE;QAC9C,WAAW,EAAE,UAAU;KACvB,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC;AACtB,CAAC;AAED,SAAS,YAAY;IACpB,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,YAAY;IACpB,IAAI,gBAAgB,EAAE,EAAE,CAAC;QACxB,OAAO,gBAAgB,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,YAAY,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,SAAS,CAAC,CAAC,SAAS,CAAC,IAAY;IACtC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;QAC5B,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,OAAO,CAAC;QACf,CAAC;QAED,OAAO;IACR,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAEhD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,OAAO,CAAC;IACf,CAAC;AACF,CAAC;AAED,2DAA2D;AAC3D,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AAEpE,mFAAmF;AACnF,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAE9C,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC7C,uEAAuE;IACvE,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,2DAA2D;IAC3D,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,mEAAmE;IACnE,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastiangx/opencode-unmoji",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "OpenCode plugin to strip or replace emojis from agent outputs",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"packageManager": "bun@1.3.5",
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=20"
|
|
10
|
+
},
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://codeberg.org/bastiangx/opencode-unmoji"
|
|
14
|
+
},
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://codeberg.org/bastiangx/opencode-unmoji/issues"
|
|
17
|
+
},
|
|
18
|
+
"homepage": "https://codeberg.org/bastiangx/opencode-unmoji#readme",
|
|
6
19
|
"main": "dist/index.js",
|
|
7
20
|
"types": "dist/index.d.ts",
|
|
8
21
|
"exports": {
|
|
@@ -24,8 +37,8 @@
|
|
|
24
37
|
"dev": "tsc --watch",
|
|
25
38
|
"test": "vitest run",
|
|
26
39
|
"format": "biome format --write .",
|
|
27
|
-
"lint": "
|
|
28
|
-
"check": "
|
|
40
|
+
"lint": "oxlint .",
|
|
41
|
+
"check": "oxlint .",
|
|
29
42
|
"prepublishOnly": "bun run build && bun run build:plugin && bun run test"
|
|
30
43
|
},
|
|
31
44
|
"keywords": [
|
|
@@ -37,8 +50,6 @@
|
|
|
37
50
|
"author": "bastiangx",
|
|
38
51
|
"license": "MIT",
|
|
39
52
|
"dependencies": {
|
|
40
|
-
"@vitest/coverage-v8": "^4.0.16",
|
|
41
|
-
"emojibase": "^17.0.0",
|
|
42
53
|
"graphemer": "^1.4.0",
|
|
43
54
|
"neverthrow": "^8.2.0",
|
|
44
55
|
"zod": "^4.2.1"
|
|
@@ -47,13 +58,15 @@
|
|
|
47
58
|
"@biomejs/biome": "^2.3.10",
|
|
48
59
|
"@types/bun": "^1.3.5",
|
|
49
60
|
"@types/node": "^25.0.3",
|
|
61
|
+
"@vitest/coverage-v8": "^4.0.16",
|
|
50
62
|
"@vitest/ui": "^4.0.16",
|
|
63
|
+
"emojibase": "^17.0.0",
|
|
51
64
|
"emojibase-data": "^17.0.0",
|
|
52
65
|
"oxlint": "^1.35.0",
|
|
53
66
|
"typescript": "^5.9.3",
|
|
54
67
|
"vitest": "^4.0.16"
|
|
55
68
|
},
|
|
56
69
|
"peerDependencies": {
|
|
57
|
-
"@opencode-ai/plugin": "^1.0.
|
|
70
|
+
"@opencode-ai/plugin": "^1.0.204"
|
|
58
71
|
}
|
|
59
72
|
}
|