@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.
Files changed (76) hide show
  1. package/README.md +24 -5
  2. package/dist/core/emoji-data-generated.d.ts.map +1 -1
  3. package/dist/core/emoji-data-generated.js +7645 -5370
  4. package/dist/core/emoji-data-generated.js.map +1 -1
  5. package/dist/core/emoji-data.d.ts +3 -0
  6. package/dist/core/emoji-data.d.ts.map +1 -1
  7. package/dist/core/emoji-data.js +46 -2
  8. package/dist/core/emoji-data.js.map +1 -1
  9. package/dist/core/processor.d.ts +12 -1
  10. package/dist/core/processor.d.ts.map +1 -1
  11. package/dist/core/processor.js +67 -12
  12. package/dist/core/processor.js.map +1 -1
  13. package/dist/data/emoji-data-gen.d.ts +6 -0
  14. package/dist/data/emoji-data-gen.d.ts.map +1 -0
  15. package/dist/data/emoji-data-gen.js +30638 -0
  16. package/dist/data/emoji-data-gen.js.map +1 -0
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +135 -4
  20. package/dist/index.js.map +1 -1
  21. package/dist/plugin.bundled.js +7949 -5445
  22. package/dist/src/core/config.d.ts +22 -0
  23. package/dist/src/core/config.d.ts.map +1 -0
  24. package/dist/src/core/config.js +82 -0
  25. package/dist/src/core/config.js.map +1 -0
  26. package/dist/src/core/emoji-data.d.ts +11 -0
  27. package/dist/src/core/emoji-data.d.ts.map +1 -0
  28. package/dist/src/core/emoji-data.js +105 -0
  29. package/dist/src/core/emoji-data.js.map +1 -0
  30. package/dist/src/core/processor.d.ts +16 -0
  31. package/dist/src/core/processor.d.ts.map +1 -0
  32. package/dist/src/core/processor.js +115 -0
  33. package/dist/src/core/processor.js.map +1 -0
  34. package/dist/src/index.d.ts +4 -0
  35. package/dist/src/index.d.ts.map +1 -0
  36. package/dist/src/index.js +153 -0
  37. package/dist/src/index.js.map +1 -0
  38. package/dist/src/types/config.d.ts +55 -0
  39. package/dist/src/types/config.d.ts.map +1 -0
  40. package/dist/src/types/config.js +36 -0
  41. package/dist/src/types/config.js.map +1 -0
  42. package/dist/src/types/errors.d.ts +59 -0
  43. package/dist/src/types/errors.d.ts.map +1 -0
  44. package/dist/src/types/errors.js +6 -0
  45. package/dist/src/types/errors.js.map +1 -0
  46. package/dist/src/utils/code-detector.d.ts +17 -0
  47. package/dist/src/utils/code-detector.d.ts.map +1 -0
  48. package/dist/src/utils/code-detector.js +288 -0
  49. package/dist/src/utils/code-detector.js.map +1 -0
  50. package/dist/src/utils/grapheme.d.ts +20 -0
  51. package/dist/src/utils/grapheme.d.ts.map +1 -0
  52. package/dist/src/utils/grapheme.js +82 -0
  53. package/dist/src/utils/grapheme.js.map +1 -0
  54. package/dist/streaming/hooks.d.ts +12 -0
  55. package/dist/streaming/hooks.d.ts.map +1 -0
  56. package/dist/streaming/hooks.js +8 -0
  57. package/dist/streaming/hooks.js.map +1 -0
  58. package/dist/streaming/sanitizer.d.ts +66 -0
  59. package/dist/streaming/sanitizer.d.ts.map +1 -0
  60. package/dist/streaming/sanitizer.js +118 -0
  61. package/dist/streaming/sanitizer.js.map +1 -0
  62. package/dist/streaming/state.d.ts +10 -0
  63. package/dist/streaming/state.d.ts.map +1 -0
  64. package/dist/streaming/state.js +33 -0
  65. package/dist/streaming/state.js.map +1 -0
  66. package/dist/types/config.d.ts +21 -0
  67. package/dist/types/config.d.ts.map +1 -1
  68. package/dist/types/config.js +14 -0
  69. package/dist/types/config.js.map +1 -1
  70. package/dist/utils/code-detector.d.ts.map +1 -1
  71. package/dist/utils/code-detector.js +46 -10
  72. package/dist/utils/code-detector.js.map +1 -1
  73. package/dist/utils/grapheme.d.ts.map +1 -1
  74. package/dist/utils/grapheme.js +20 -2
  75. package/dist/utils/grapheme.js.map +1 -1
  76. package/package.json +19 -6
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  import type { Plugin } from "@opencode-ai/plugin";
2
2
  export declare const Unmoji: Plugin;
3
+ export default Unmoji;
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -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,MAsBpB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,qBAAqB,CAAC;AAsHzD,eAAO,MAAM,MAAM,EAAE,MAyGpB,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,74 @@
1
1
  import { loadConfig } from "./core/config.js";
2
2
  import { processText } from "./core/processor.js";
3
- export const Unmoji = async () => {
3
+ const hasMarkdownExtension = (filePath, extensions) => {
4
+ const lowerPath = filePath.toLowerCase();
5
+ for (const ext of extensions) {
6
+ if (lowerPath.endsWith(ext.toLowerCase())) {
7
+ return true;
8
+ }
9
+ }
10
+ return false;
11
+ };
12
+ const getStringArg = (args, keys) => {
13
+ for (const key of keys) {
14
+ const value = args[key];
15
+ if (typeof value === "string") {
16
+ return { key, value };
17
+ }
18
+ }
19
+ return null;
20
+ };
21
+ const sendNotification = async (client, sessionID, config, stats) => {
22
+ if (!config.showNotification || stats.removed === 0) {
23
+ return;
24
+ }
25
+ if (!sessionID || typeof sessionID !== "string") {
26
+ return;
27
+ }
28
+ if (!client || typeof client !== "object") {
29
+ return;
30
+ }
31
+ const emojiWord = stats.removed === 1 ? "emoji" : "emojis";
32
+ let message = `UNMOJI | removed ${stats.removed} ${emojiWord}`;
33
+ if (stats.keptInlineCode > 0) {
34
+ const keptWord = stats.keptInlineCode === 1 ? "emoji" : "emojis";
35
+ message += ` | Kept ${stats.keptInlineCode} inline code ${keptWord}`;
36
+ }
37
+ if (stats.keptQuote > 0) {
38
+ const keptWord = stats.keptQuote === 1 ? "emoji" : "emojis";
39
+ message += ` | Kept ${stats.keptQuote} ${keptWord} in quotes`;
40
+ }
41
+ if (stats.keptCodeBlock > 0) {
42
+ const keptWord = stats.keptCodeBlock === 1 ? "emoji" : "emojis";
43
+ message += ` | Kept ${stats.keptCodeBlock} ${keptWord} in code blocks`;
44
+ }
45
+ if (config.notificationStyle === "thread-verbose") {
46
+ message += `\nLines: ${stats.lines.join(", ")}`;
47
+ }
48
+ const clientObj = client;
49
+ try {
50
+ if (config.notificationStyle === "toast" && clientObj.tui?.showToast) {
51
+ await clientObj.tui.showToast({
52
+ title: "UNMOJI",
53
+ message,
54
+ variant: "info",
55
+ });
56
+ }
57
+ else if (clientObj.session?.prompt) {
58
+ await clientObj.session.prompt({
59
+ path: { id: sessionID },
60
+ body: {
61
+ noReply: true,
62
+ parts: [{ type: "text", text: message, ignored: true }],
63
+ },
64
+ });
65
+ }
66
+ }
67
+ catch {
68
+ // Silent no-op - never fail the hook due to notification errors
69
+ }
70
+ };
71
+ export const Unmoji = async ({ client }) => {
4
72
  const configResult = loadConfig(process.cwd());
5
73
  if (configResult.isErr()) {
6
74
  return {};
@@ -11,11 +79,74 @@ export const Unmoji = async () => {
11
79
  }
12
80
  return {
13
81
  "experimental.text.complete": async (_input, output) => {
14
- const result = processText(output.text, config);
15
- if (result.isOk()) {
16
- output.text = result.value;
82
+ try {
83
+ const result = processText(output.text, config);
84
+ if (result.isOk()) {
85
+ output.text = result.value.text;
86
+ }
87
+ }
88
+ catch {
89
+ return;
90
+ }
91
+ },
92
+ "tool.execute.before": async (input, output) => {
93
+ try {
94
+ if (!config.processMarkdown) {
95
+ return;
96
+ }
97
+ const toolName = input.tool;
98
+ const args = output.args;
99
+ if (!args || typeof args !== "object") {
100
+ return;
101
+ }
102
+ const argsRecord = args;
103
+ const filePathArg = getStringArg(argsRecord, ["filePath", "file_path"]);
104
+ if (!filePathArg) {
105
+ return;
106
+ }
107
+ if (!hasMarkdownExtension(filePathArg.value, config.markdownExtensions)) {
108
+ return;
109
+ }
110
+ if (toolName === "write") {
111
+ const contentArg = getStringArg(argsRecord, ["content"]);
112
+ if (!contentArg) {
113
+ return;
114
+ }
115
+ if (contentArg.value.length > config.maxMarkdownChars) {
116
+ return;
117
+ }
118
+ const result = processText(contentArg.value, config);
119
+ if (result.isOk()) {
120
+ const processResult = result.value;
121
+ argsRecord[contentArg.key] = processResult.text;
122
+ await sendNotification(client, input.sessionID, config, processResult.stats);
123
+ }
124
+ return;
125
+ }
126
+ if (toolName === "edit") {
127
+ const newStringArg = getStringArg(argsRecord, [
128
+ "newString",
129
+ "new_string",
130
+ ]);
131
+ if (!newStringArg) {
132
+ return;
133
+ }
134
+ if (newStringArg.value.length > config.maxMarkdownChars) {
135
+ return;
136
+ }
137
+ const result = processText(newStringArg.value, config);
138
+ if (result.isOk()) {
139
+ const processResult = result.value;
140
+ argsRecord[newStringArg.key] = processResult.text;
141
+ await sendNotification(client, input.sessionID, config, processResult.stats);
142
+ }
143
+ }
144
+ }
145
+ catch {
146
+ return;
17
147
  }
18
148
  },
19
149
  };
20
150
  };
151
+ export default Unmoji;
21
152
  //# sourceMappingURL=index.js.map
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;YAEhD,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}