@bastiangx/opencode-unmoji 0.3.1 → 0.3.11
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 +62 -67
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -37
- package/dist/index.js.map +1 -1
- package/dist/plugin.bundled.js +51 -41
- package/dist/types/config.d.ts +0 -7
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +0 -4
- package/dist/types/config.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
<a href="https://codeberg.org/bastiangx/opencode-unmoji">
|
|
3
|
-
<img
|
|
3
|
+
<img src="https://github.com/user-attachments/assets/01c5fa35-036d-4d7a-9feb-8becd744a5af"/>
|
|
4
4
|
</a>
|
|
5
5
|
</div>
|
|
6
6
|
|
|
7
7
|
# UNMOJI
|
|
8
8
|
|
|
9
|
-
<a href="https://
|
|
9
|
+
<a href="https://npmjs.com/package/@bastiangx/opencode-unmoji"><img src="https://img.shields.io/badge/npm-black?style=for-the-badge&logo=npm&logoSize=auto&labelColor=%23141010&color=%231F1A1A" alt="NPM Package"></a> <a href="https://npmjs.com/package/@bastiangx/opencode-unmoji"><img src="https://img.shields.io/npm/v/%40bastiangx%2Fopencode-unmoji?style=for-the-badge&label=version&labelColor=%23141010&color=%231F1A1A" alt="NPM Version"></a> <a href="https://npmjs.com/package/@bastiangx/opencode-unmoji"><img src="https://img.shields.io/npm/dm/%40bastiangx%2Fopencode-unmoji?style=for-the-badge&label=downloads&labelColor=%23141010&color=%231F1A1A" alt="NPM Downloads"></a> <a href="https://opencode.cafe/plugin/opencode-unmoji"><img src="https://img.shields.io/badge/opnecode_cafe-black?style=for-the-badge&logo=awesomelists&logoSize=auto&labelColor=%23141010&color=%231F1A1A" alt="OpenCode Cafe"></a> <a href="https://www.codeberg.org/bastiangx/opencode-unmoji"><img src="https://img.shields.io/badge/codeberg-black?style=for-the-badge&logo=codeberg&logoSize=auto&labelColor=%23141010&color=%231F1A1A" alt="codeberg"></a>
|
|
10
10
|
|
|
11
|
-
An [OpenCode](https://opencode.ai) plugin that strips
|
|
11
|
+
An [OpenCode](https://opencode.ai) plugin that strips _all kinds of_ emojis from your agent outputs.
|
|
12
12
|
|
|
13
|
-
<img height="
|
|
13
|
+
<img height="700" src="https://github.com/user-attachments/assets/fe606d89-01b0-4da6-81b7-5014d6aff972"/>
|
|
14
14
|
|
|
15
15
|
## Installation
|
|
16
16
|
|
|
@@ -33,103 +33,98 @@ Add the following to your `opencode.json` file:
|
|
|
33
33
|
|
|
34
34
|
UNMOJI automatically removes _all_ _standard_ unicode emojis and glyphs from your agent outputs.
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Especially useful when you are using models like Claude which seem to _LOVE_ spamming emojis on summaries, README files and various documentations.
|
|
37
37
|
|
|
38
38
|
- ~ 30,000 emojis covered.
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
### Output targets
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
1. _Regular_ agent text and summaries in the main ui thread (format agnostic).
|
|
43
|
+
2. `newString` (new lines) in markdown files (.md, .mdx, .mdc, .markdown) when an agent calls `edit` tool.
|
|
44
|
+
3. Whole markdown file content when the agent calls `write` tool.
|
|
45
|
+
|
|
46
|
+
> _Thinking_ tokens as output targets are not supported at this time.
|
|
43
47
|
|
|
44
|
-
|
|
48
|
+
## Configuration
|
|
45
49
|
|
|
46
|
-
|
|
50
|
+
Create and add the `unmoji.json` file to your OpenCode [config path](https://opencode.ai/docs/config/).
|
|
47
51
|
|
|
48
52
|
```json
|
|
49
53
|
{
|
|
50
54
|
"enabled": true,
|
|
51
55
|
"mode": "strip",
|
|
56
|
+
"processMarkdown": true,
|
|
57
|
+
"markdownExtensions": [".md"],
|
|
58
|
+
"showNotification": true,
|
|
52
59
|
"preserveCodeBlocks": true,
|
|
53
60
|
"preserveInlineCode": true,
|
|
54
61
|
"skipQuotes": false,
|
|
55
62
|
"replacementStyle": "github",
|
|
56
|
-
"replacementFormat": "[:name:]"
|
|
57
|
-
"processMarkdown": true,
|
|
58
|
-
"markdownExtensions": [".md"],
|
|
59
|
-
"showNotification": true,
|
|
60
|
-
"notificationStyle": "thread"
|
|
63
|
+
"replacementFormat": "[:name:]"
|
|
61
64
|
}
|
|
62
65
|
```
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
|
67
|
-
|
|
|
68
|
-
| `
|
|
69
|
-
| `
|
|
70
|
-
| `
|
|
71
|
-
| `
|
|
72
|
-
| `
|
|
73
|
-
| `
|
|
74
|
-
| `
|
|
75
|
-
| `
|
|
76
|
-
| `
|
|
67
|
+
#### Full options spec
|
|
68
|
+
|
|
69
|
+
| Option | Default | Possible Values | Desc |
|
|
70
|
+
| :------------------- | :--------: | :---------------------------------------------------------- | :----------------------------------------------------- |
|
|
71
|
+
| `enabled` | `true` | `true`, `false` | Enable / disable the plugin without uninstalling it |
|
|
72
|
+
| `mode` | `strip` | `strip`, `replace` | `strip` removes emojis, `replace` puts shortcodes |
|
|
73
|
+
| `processMarkdown` | `true` | `true`, `false` | Process emojis in markdown files written by tools |
|
|
74
|
+
| `markdownExtensions` | `[".md"]` | `[".md", ".mdx", ".mdc", ".markdown"]` | File extensions treated as markdown for tool hooks |
|
|
75
|
+
| `showNotification` | `true` | `true`, `false` | Shown when emojis are removed |
|
|
76
|
+
| `preserveCodeBlocks` | `true` | `true`, `false` | Do not process emojis inside code blocks |
|
|
77
|
+
| `preserveInlineCode` | `true` | `true`, `false` | Do not process emojis inside inline code |
|
|
78
|
+
| `skipQuotes` | `false` | `true`, `false` | Do not process emojis inside quoted text blocks |
|
|
79
|
+
| `replacementStyle` | `github` | `github`, `slack`, `discord`, `cldr`, `iamcal`, `joypixels` | Shortcode style used when mode is `replace` |
|
|
80
|
+
| `replacementFormat` | `[:name:]` | `:name:`, `[:name:]`, `{name}` | Template format [literal string] for shortcode outputs |
|
|
77
81
|
|
|
78
|
-
|
|
82
|
+
---
|
|
79
83
|
|
|
80
|
-
|
|
84
|
+
## Contributing
|
|
81
85
|
|
|
82
|
-
|
|
83
|
-
{
|
|
84
|
-
"mode": "replace",
|
|
85
|
-
"replacementStyle": "github",
|
|
86
|
-
"replacementFormat": ":name:"
|
|
87
|
-
}
|
|
88
|
-
```
|
|
86
|
+
Contributions are welcome!
|
|
89
87
|
|
|
90
|
-
|
|
91
|
-
# Agent Output
|
|
92
|
-
Great work! 🎉 The tests are passing ✅
|
|
93
|
-
# Processed Output
|
|
94
|
-
Great work! :tada: The tests are passing :white_check_mark:
|
|
95
|
-
```
|
|
88
|
+
Follow the [Contributing guide](https://codeberg.org/bastiangx/opencode-unmoji/src/branch/main/CONTRIBUTING.md) for instructions.
|
|
96
89
|
|
|
97
|
-
|
|
90
|
+
---
|
|
98
91
|
|
|
99
|
-
|
|
100
|
-
{
|
|
101
|
-
"mode": "replace",
|
|
102
|
-
"replacementStyle": "slack",
|
|
103
|
-
"replacementFormat": "[:name:]"
|
|
104
|
-
}
|
|
105
|
-
```
|
|
92
|
+
---
|
|
106
93
|
|
|
107
|
-
|
|
108
|
-
# Agent Output
|
|
109
|
-
Deploy successful 🚀 Bug fixed 🐛
|
|
110
|
-
# Processed Output
|
|
111
|
-
Deploy successful [:rocket:] Bug fixed [:bug:]
|
|
112
|
-
```
|
|
94
|
+
License: MIT
|
|
113
95
|
|
|
114
|
-
|
|
96
|
+
## Emoji Test Section
|
|
115
97
|
|
|
116
|
-
|
|
98
|
+
This section contains various emojis for testing the stripping functionality .
|
|
117
99
|
|
|
118
|
-
|
|
100
|
+
### Heading with Emoji
|
|
119
101
|
|
|
120
|
-
|
|
121
|
-
- The `edit` tool's `newString` is processed for matching markdown paths.
|
|
102
|
+
Some text with multi-codepoint emoji:
|
|
122
103
|
|
|
123
|
-
|
|
104
|
+
- List item with skin tone emoji
|
|
105
|
+
- Another item with fire
|
|
124
106
|
|
|
125
|
-
|
|
107
|
+
```js
|
|
108
|
+
// Code block with emoji (should preserve)
|
|
109
|
+
console.log("Hello ");
|
|
110
|
+
```
|
|
126
111
|
|
|
127
|
-
|
|
112
|
+
Inline code with emoji: ` spark`
|
|
128
113
|
|
|
129
|
-
|
|
114
|
+
| Table | Column |
|
|
115
|
+
|-------|--------|
|
|
116
|
+
| Row | Data |
|
|
130
117
|
|
|
131
|
-
|
|
118
|
+
[Link with emoji ](https://example.com)
|
|
119
|
+
|
|
120
|
+
> Blockquote with emoji
|
|
121
|
+
|
|
122
|
+
Task list:
|
|
123
|
+
- [ ] Unchecked
|
|
124
|
+
- [x] Checked
|
|
125
|
+
|
|
126
|
+
Horizontal rule with adjacent emoji
|
|
132
127
|
|
|
133
128
|
---
|
|
134
129
|
|
|
135
|
-
|
|
130
|
+
More text with emoji
|
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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,qBAAqB,CAAC;AA4IzD,eAAO,MAAM,MAAM,EAAE,MAyGpB,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -19,51 +19,69 @@ const getStringArg = (args, keys) => {
|
|
|
19
19
|
}
|
|
20
20
|
return null;
|
|
21
21
|
};
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
24
|
-
return;
|
|
22
|
+
const hasPromptMethod = (x) => {
|
|
23
|
+
if (typeof x !== "object" || x === null)
|
|
24
|
+
return false;
|
|
25
|
+
const obj = x;
|
|
26
|
+
if (typeof obj.session !== "object" || obj.session === null)
|
|
27
|
+
return false;
|
|
28
|
+
const session = obj.session;
|
|
29
|
+
return typeof session.prompt === "function";
|
|
30
|
+
};
|
|
31
|
+
const buildNotificationMessage = (stats) => {
|
|
32
|
+
const emojiWord = stats.removed === 1 ? "emoji" : "emojis";
|
|
33
|
+
const totalKept = stats.keptInlineCode + stats.keptCodeBlock + stats.keptQuote;
|
|
34
|
+
if (totalKept === 0) {
|
|
35
|
+
return `removed ${stats.removed} ${emojiWord}`;
|
|
25
36
|
}
|
|
26
|
-
|
|
27
|
-
|
|
37
|
+
const onlyInline = stats.keptInlineCode > 0 &&
|
|
38
|
+
stats.keptCodeBlock === 0 &&
|
|
39
|
+
stats.keptQuote === 0;
|
|
40
|
+
const onlyCodeBlock = stats.keptCodeBlock > 0 &&
|
|
41
|
+
stats.keptInlineCode === 0 &&
|
|
42
|
+
stats.keptQuote === 0;
|
|
43
|
+
const onlyQuote = stats.keptQuote > 0 &&
|
|
44
|
+
stats.keptInlineCode === 0 &&
|
|
45
|
+
stats.keptCodeBlock === 0;
|
|
46
|
+
const hasCode = stats.keptInlineCode > 0 || stats.keptCodeBlock > 0;
|
|
47
|
+
const hasQuote = stats.keptQuote > 0;
|
|
48
|
+
const keptWord = totalKept === 1 ? "emoji" : "emojis";
|
|
49
|
+
if (onlyInline) {
|
|
50
|
+
return `removed ${stats.removed} ${emojiWord}, kept ${totalKept} in inline code`;
|
|
28
51
|
}
|
|
29
|
-
if (
|
|
30
|
-
return
|
|
52
|
+
if (onlyCodeBlock) {
|
|
53
|
+
return `removed ${stats.removed} ${emojiWord}, kept ${totalKept} in code blocks`;
|
|
31
54
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (stats.keptInlineCode > 0) {
|
|
35
|
-
const keptWord = stats.keptInlineCode === 1 ? "emoji" : "emojis";
|
|
36
|
-
message += ` | Kept ${stats.keptInlineCode} inline code ${keptWord}`;
|
|
55
|
+
if (onlyQuote) {
|
|
56
|
+
return `removed ${stats.removed} ${emojiWord}, kept ${totalKept} in quotes`;
|
|
37
57
|
}
|
|
38
|
-
if (
|
|
39
|
-
|
|
40
|
-
message += ` | Kept ${stats.keptQuote} ${keptWord} in quotes`;
|
|
58
|
+
if (hasCode && !hasQuote) {
|
|
59
|
+
return `removed ${stats.removed} ${emojiWord}, kept ${totalKept} ${keptWord} in code`;
|
|
41
60
|
}
|
|
42
|
-
if (
|
|
43
|
-
|
|
44
|
-
message += ` | Kept ${stats.keptCodeBlock} ${keptWord} in code blocks`;
|
|
61
|
+
if (hasQuote && hasCode) {
|
|
62
|
+
return `removed ${stats.removed} ${emojiWord}, kept ${totalKept} ${keptWord} in code/quotes`;
|
|
45
63
|
}
|
|
46
|
-
|
|
47
|
-
|
|
64
|
+
return `removed ${stats.removed} ${emojiWord}, kept ${totalKept} ${keptWord}`;
|
|
65
|
+
};
|
|
66
|
+
const sendNotification = async (client, sessionID, config, stats) => {
|
|
67
|
+
if (!config.showNotification || stats.removed === 0) {
|
|
68
|
+
return;
|
|
48
69
|
}
|
|
49
|
-
|
|
70
|
+
if (!sessionID || typeof sessionID !== "string") {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const message = buildNotificationMessage(stats);
|
|
74
|
+
const title = "UNMOJI";
|
|
50
75
|
try {
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
path: { id: sessionID },
|
|
61
|
-
body: {
|
|
62
|
-
noReply: true,
|
|
63
|
-
parts: [{ type: "text", text: message, ignored: true }],
|
|
64
|
-
},
|
|
65
|
-
});
|
|
66
|
-
}
|
|
76
|
+
if (!hasPromptMethod(client))
|
|
77
|
+
return;
|
|
78
|
+
await client.session.prompt({
|
|
79
|
+
path: { id: sessionID },
|
|
80
|
+
body: {
|
|
81
|
+
noReply: true,
|
|
82
|
+
parts: [{ type: "text", text: `${title} | ${message}`, ignored: true }],
|
|
83
|
+
},
|
|
84
|
+
});
|
|
67
85
|
}
|
|
68
86
|
catch {
|
|
69
87
|
// Silent no-op - never fail the hook due to notification errors
|
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,EAAsB,MAAM,qBAAqB,CAAC;AAGtE,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAErC,MAAM,oBAAoB,GAAG,CAC5B,QAAgB,EAChB,UAAoB,EACV,EAAE;IACZ,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CACpB,IAA6B,EAC7B,IAAuB,EACiB,EAAE;IAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QACvB,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.bundled.js
CHANGED
|
@@ -22687,8 +22687,7 @@ var ConfigSchema = exports_external.object({
|
|
|
22687
22687
|
skipQuotes: exports_external.boolean().default(false),
|
|
22688
22688
|
processMarkdown: exports_external.boolean().default(true),
|
|
22689
22689
|
markdownExtensions: exports_external.array(exports_external.enum([".md", ".mdx", ".mdc", ".markdown"])).default([".md"]),
|
|
22690
|
-
showNotification: exports_external.boolean().default(true)
|
|
22691
|
-
notificationStyle: exports_external.enum(["thread", "thread-verbose", "toast"]).default("thread")
|
|
22690
|
+
showNotification: exports_external.boolean().default(true)
|
|
22692
22691
|
});
|
|
22693
22692
|
var DEFAULT_CONFIG = {
|
|
22694
22693
|
enabled: true,
|
|
@@ -22700,8 +22699,7 @@ var DEFAULT_CONFIG = {
|
|
|
22700
22699
|
skipQuotes: false,
|
|
22701
22700
|
processMarkdown: true,
|
|
22702
22701
|
markdownExtensions: [".md"],
|
|
22703
|
-
showNotification: true
|
|
22704
|
-
notificationStyle: "thread"
|
|
22702
|
+
showNotification: true
|
|
22705
22703
|
};
|
|
22706
22704
|
|
|
22707
22705
|
// src/core/config.ts
|
|
@@ -53931,51 +53929,63 @@ var getStringArg = (args, keys) => {
|
|
|
53931
53929
|
}
|
|
53932
53930
|
return null;
|
|
53933
53931
|
};
|
|
53934
|
-
var
|
|
53935
|
-
if (
|
|
53936
|
-
return;
|
|
53932
|
+
var hasPromptMethod = (x) => {
|
|
53933
|
+
if (typeof x !== "object" || x === null)
|
|
53934
|
+
return false;
|
|
53935
|
+
const obj = x;
|
|
53936
|
+
if (typeof obj.session !== "object" || obj.session === null)
|
|
53937
|
+
return false;
|
|
53938
|
+
const session = obj.session;
|
|
53939
|
+
return typeof session.prompt === "function";
|
|
53940
|
+
};
|
|
53941
|
+
var buildNotificationMessage = (stats) => {
|
|
53942
|
+
const emojiWord = stats.removed === 1 ? "emoji" : "emojis";
|
|
53943
|
+
const totalKept = stats.keptInlineCode + stats.keptCodeBlock + stats.keptQuote;
|
|
53944
|
+
if (totalKept === 0) {
|
|
53945
|
+
return `removed ${stats.removed} ${emojiWord}`;
|
|
53937
53946
|
}
|
|
53938
|
-
|
|
53939
|
-
|
|
53947
|
+
const onlyInline = stats.keptInlineCode > 0 && stats.keptCodeBlock === 0 && stats.keptQuote === 0;
|
|
53948
|
+
const onlyCodeBlock = stats.keptCodeBlock > 0 && stats.keptInlineCode === 0 && stats.keptQuote === 0;
|
|
53949
|
+
const onlyQuote = stats.keptQuote > 0 && stats.keptInlineCode === 0 && stats.keptCodeBlock === 0;
|
|
53950
|
+
const hasCode = stats.keptInlineCode > 0 || stats.keptCodeBlock > 0;
|
|
53951
|
+
const hasQuote = stats.keptQuote > 0;
|
|
53952
|
+
const keptWord = totalKept === 1 ? "emoji" : "emojis";
|
|
53953
|
+
if (onlyInline) {
|
|
53954
|
+
return `removed ${stats.removed} ${emojiWord}, kept ${totalKept} in inline code`;
|
|
53940
53955
|
}
|
|
53941
|
-
if (
|
|
53942
|
-
return
|
|
53956
|
+
if (onlyCodeBlock) {
|
|
53957
|
+
return `removed ${stats.removed} ${emojiWord}, kept ${totalKept} in code blocks`;
|
|
53943
53958
|
}
|
|
53944
|
-
|
|
53945
|
-
|
|
53946
|
-
if (stats.keptInlineCode > 0) {
|
|
53947
|
-
const keptWord = stats.keptInlineCode === 1 ? "emoji" : "emojis";
|
|
53948
|
-
message += ` | Kept ${stats.keptInlineCode} inline code ${keptWord}`;
|
|
53959
|
+
if (onlyQuote) {
|
|
53960
|
+
return `removed ${stats.removed} ${emojiWord}, kept ${totalKept} in quotes`;
|
|
53949
53961
|
}
|
|
53950
|
-
if (
|
|
53951
|
-
|
|
53952
|
-
message += ` | Kept ${stats.keptQuote} ${keptWord} in quotes`;
|
|
53962
|
+
if (hasCode && !hasQuote) {
|
|
53963
|
+
return `removed ${stats.removed} ${emojiWord}, kept ${totalKept} ${keptWord} in code`;
|
|
53953
53964
|
}
|
|
53954
|
-
if (
|
|
53955
|
-
|
|
53956
|
-
message += ` | Kept ${stats.keptCodeBlock} ${keptWord} in code blocks`;
|
|
53965
|
+
if (hasQuote && hasCode) {
|
|
53966
|
+
return `removed ${stats.removed} ${emojiWord}, kept ${totalKept} ${keptWord} in code/quotes`;
|
|
53957
53967
|
}
|
|
53958
|
-
|
|
53959
|
-
|
|
53960
|
-
|
|
53968
|
+
return `removed ${stats.removed} ${emojiWord}, kept ${totalKept} ${keptWord}`;
|
|
53969
|
+
};
|
|
53970
|
+
var sendNotification = async (client, sessionID, config2, stats) => {
|
|
53971
|
+
if (!config2.showNotification || stats.removed === 0) {
|
|
53972
|
+
return;
|
|
53973
|
+
}
|
|
53974
|
+
if (!sessionID || typeof sessionID !== "string") {
|
|
53975
|
+
return;
|
|
53961
53976
|
}
|
|
53962
|
-
const
|
|
53977
|
+
const message = buildNotificationMessage(stats);
|
|
53978
|
+
const title = "UNMOJI";
|
|
53963
53979
|
try {
|
|
53964
|
-
if (
|
|
53965
|
-
|
|
53966
|
-
|
|
53967
|
-
|
|
53968
|
-
|
|
53969
|
-
|
|
53970
|
-
|
|
53971
|
-
|
|
53972
|
-
|
|
53973
|
-
body: {
|
|
53974
|
-
noReply: true,
|
|
53975
|
-
parts: [{ type: "text", text: message, ignored: true }]
|
|
53976
|
-
}
|
|
53977
|
-
});
|
|
53978
|
-
}
|
|
53980
|
+
if (!hasPromptMethod(client))
|
|
53981
|
+
return;
|
|
53982
|
+
await client.session.prompt({
|
|
53983
|
+
path: { id: sessionID },
|
|
53984
|
+
body: {
|
|
53985
|
+
noReply: true,
|
|
53986
|
+
parts: [{ type: "text", text: `${title} | ${message}`, ignored: true }]
|
|
53987
|
+
}
|
|
53988
|
+
});
|
|
53979
53989
|
} catch {}
|
|
53980
53990
|
};
|
|
53981
53991
|
var Unmoji = async ({ client }) => {
|
package/dist/types/config.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export type ReplacementStyle = "github" | "slack" | "discord" | "cldr" | "iamcal" | "joypixels";
|
|
3
3
|
export type MarkdownExtension = ".md" | ".mdx" | ".mdc" | ".markdown";
|
|
4
|
-
export type NotificationStyle = "thread" | "thread-verbose" | "toast";
|
|
5
4
|
export type UnmojiConfig = {
|
|
6
5
|
enabled: boolean;
|
|
7
6
|
mode: "strip" | "replace";
|
|
@@ -13,7 +12,6 @@ export type UnmojiConfig = {
|
|
|
13
12
|
processMarkdown: boolean;
|
|
14
13
|
markdownExtensions: MarkdownExtension[];
|
|
15
14
|
showNotification: boolean;
|
|
16
|
-
notificationStyle: NotificationStyle;
|
|
17
15
|
};
|
|
18
16
|
export declare const ConfigSchema: z.ZodObject<{
|
|
19
17
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -45,11 +43,6 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
45
43
|
".markdown": ".markdown";
|
|
46
44
|
}>>>;
|
|
47
45
|
showNotification: z.ZodDefault<z.ZodBoolean>;
|
|
48
|
-
notificationStyle: z.ZodDefault<z.ZodEnum<{
|
|
49
|
-
thread: "thread";
|
|
50
|
-
"thread-verbose": "thread-verbose";
|
|
51
|
-
toast: "toast";
|
|
52
|
-
}>>;
|
|
53
46
|
}, z.core.$strip>;
|
|
54
47
|
export declare const DEFAULT_CONFIG: UnmojiConfig;
|
|
55
48
|
//# 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,iBAAiB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAEtE,MAAM,MAAM,
|
|
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,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,OAAO,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiBvB,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,YAW5B,CAAC"}
|
package/dist/types/config.js
CHANGED
|
@@ -16,9 +16,6 @@ export const ConfigSchema = z.object({
|
|
|
16
16
|
.array(z.enum([".md", ".mdx", ".mdc", ".markdown"]))
|
|
17
17
|
.default([".md"]),
|
|
18
18
|
showNotification: z.boolean().default(true),
|
|
19
|
-
notificationStyle: z
|
|
20
|
-
.enum(["thread", "thread-verbose", "toast"])
|
|
21
|
-
.default("thread"),
|
|
22
19
|
});
|
|
23
20
|
export const DEFAULT_CONFIG = {
|
|
24
21
|
enabled: true,
|
|
@@ -31,6 +28,5 @@ export const DEFAULT_CONFIG = {
|
|
|
31
28
|
processMarkdown: true,
|
|
32
29
|
markdownExtensions: [".md"],
|
|
33
30
|
showNotification: true,
|
|
34
|
-
notificationStyle: "thread",
|
|
35
31
|
};
|
|
36
32
|
//# 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;AAyBxB,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,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAC3C,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,IAAI;CACtB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastiangx/opencode-unmoji",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.11",
|
|
4
4
|
"description": "OpenCode plugin to strip or replace emojis from agent outputs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -62,11 +62,11 @@
|
|
|
62
62
|
"@vitest/ui": "^4.0.16",
|
|
63
63
|
"emojibase": "^17.0.0",
|
|
64
64
|
"emojibase-data": "^17.0.0",
|
|
65
|
-
"oxlint": "^1.
|
|
65
|
+
"oxlint": "^1.36.0",
|
|
66
66
|
"typescript": "^5.9.3",
|
|
67
67
|
"vitest": "^4.0.16"
|
|
68
68
|
},
|
|
69
69
|
"peerDependencies": {
|
|
70
|
-
"@opencode-ai/plugin": "^1.0.
|
|
70
|
+
"@opencode-ai/plugin": "^1.0.214"
|
|
71
71
|
}
|
|
72
72
|
}
|