opencode-mem 1.0.0 → 2.0.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 (71) hide show
  1. package/README.md +80 -477
  2. package/dist/config.d.ts +5 -5
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +46 -20
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +28 -88
  7. package/dist/plugin.d.ts.map +1 -1
  8. package/dist/plugin.js +1 -8
  9. package/dist/services/ai/ai-provider-factory.d.ts +8 -0
  10. package/dist/services/ai/ai-provider-factory.d.ts.map +1 -0
  11. package/dist/services/ai/ai-provider-factory.js +25 -0
  12. package/dist/services/ai/providers/anthropic-messages.d.ts +13 -0
  13. package/dist/services/ai/providers/anthropic-messages.d.ts.map +1 -0
  14. package/dist/services/ai/providers/anthropic-messages.js +176 -0
  15. package/dist/services/ai/providers/base-provider.d.ts +21 -0
  16. package/dist/services/ai/providers/base-provider.d.ts.map +1 -0
  17. package/dist/services/ai/providers/base-provider.js +6 -0
  18. package/dist/services/ai/providers/openai-chat-completion.d.ts +12 -0
  19. package/dist/services/ai/providers/openai-chat-completion.d.ts.map +1 -0
  20. package/dist/services/ai/providers/openai-chat-completion.js +181 -0
  21. package/dist/services/ai/providers/openai-responses.d.ts +14 -0
  22. package/dist/services/ai/providers/openai-responses.d.ts.map +1 -0
  23. package/dist/services/ai/providers/openai-responses.js +191 -0
  24. package/dist/services/ai/session/ai-session-manager.d.ts +21 -0
  25. package/dist/services/ai/session/ai-session-manager.d.ts.map +1 -0
  26. package/dist/services/ai/session/ai-session-manager.js +165 -0
  27. package/dist/services/ai/session/session-types.d.ts +43 -0
  28. package/dist/services/ai/session/session-types.d.ts.map +1 -0
  29. package/dist/services/ai/session/session-types.js +1 -0
  30. package/dist/services/ai/tools/tool-schema.d.ts +41 -0
  31. package/dist/services/ai/tools/tool-schema.d.ts.map +1 -0
  32. package/dist/services/ai/tools/tool-schema.js +24 -0
  33. package/dist/services/api-handlers.d.ts +11 -3
  34. package/dist/services/api-handlers.d.ts.map +1 -1
  35. package/dist/services/api-handlers.js +143 -30
  36. package/dist/services/auto-capture.d.ts +1 -30
  37. package/dist/services/auto-capture.d.ts.map +1 -1
  38. package/dist/services/auto-capture.js +199 -396
  39. package/dist/services/cleanup-service.d.ts +3 -0
  40. package/dist/services/cleanup-service.d.ts.map +1 -1
  41. package/dist/services/cleanup-service.js +31 -4
  42. package/dist/services/client.d.ts +1 -0
  43. package/dist/services/client.d.ts.map +1 -1
  44. package/dist/services/client.js +3 -11
  45. package/dist/services/sqlite/connection-manager.d.ts.map +1 -1
  46. package/dist/services/sqlite/connection-manager.js +8 -4
  47. package/dist/services/user-memory-learning.d.ts +3 -0
  48. package/dist/services/user-memory-learning.d.ts.map +1 -0
  49. package/dist/services/user-memory-learning.js +157 -0
  50. package/dist/services/user-prompt/user-prompt-manager.d.ts +38 -0
  51. package/dist/services/user-prompt/user-prompt-manager.d.ts.map +1 -0
  52. package/dist/services/user-prompt/user-prompt-manager.js +164 -0
  53. package/dist/services/web-server-worker.js +27 -6
  54. package/dist/services/web-server.d.ts.map +1 -1
  55. package/dist/services/web-server.js +0 -5
  56. package/dist/types/index.d.ts +5 -1
  57. package/dist/types/index.d.ts.map +1 -1
  58. package/dist/web/app.js +210 -120
  59. package/dist/web/index.html +14 -10
  60. package/dist/web/styles.css +326 -1
  61. package/package.json +4 -1
  62. package/dist/services/compaction.d.ts +0 -92
  63. package/dist/services/compaction.d.ts.map +0 -1
  64. package/dist/services/compaction.js +0 -421
  65. package/dist/services/sqlite-client.d.ts +0 -116
  66. package/dist/services/sqlite-client.d.ts.map +0 -1
  67. package/dist/services/sqlite-client.js +0 -284
  68. package/dist/services/web-server-lock.d.ts +0 -12
  69. package/dist/services/web-server-lock.d.ts.map +0 -1
  70. package/dist/services/web-server-lock.js +0 -157
  71. package/dist/web/favicon.svg +0 -14
@@ -291,7 +291,7 @@ button:disabled {
291
291
  border-radius: 4px;
292
292
  display: flex;
293
293
  align-items: center;
294
- justent: center;
294
+ justify-content: center;
295
295
  gap: 8px;
296
296
  font-size: 13px;
297
297
  font-weight: bold;
@@ -849,3 +849,328 @@ button:only-child .icon,
849
849
  align-items: flex-start;
850
850
  }
851
851
  }
852
+
853
+ .scope-tabs {
854
+ display: flex;
855
+ gap: 0;
856
+ margin-bottom: 20px;
857
+ border: 1px solid #333;
858
+ background: #111;
859
+ }
860
+
861
+ .tab-btn {
862
+ flex: 1;
863
+ padding: 15px 20px;
864
+ background: #0a0a0a;
865
+ border: none;
866
+ border-right: 1px solid #333;
867
+ color: #666;
868
+ font-size: 13px;
869
+ font-weight: bold;
870
+ display: flex;
871
+ align-items: center;
872
+ justify-content: center;
873
+ gap: 8px;
874
+ transition: all 0.2s;
875
+ cursor: pointer;
876
+ }
877
+
878
+ .tab-btn:last-child {
879
+ border-right: none;
880
+ }
881
+
882
+ .tab-btn:hover {
883
+ background: #111;
884
+ color: #888;
885
+ }
886
+
887
+ .tab-btn.active {
888
+ background: #00ff00;
889
+ color: #0a0a0a;
890
+ border-color: #00ff00;
891
+ }
892
+
893
+ .tab-btn .icon {
894
+ width: 18px;
895
+ height: 18px;
896
+ }
897
+
898
+ .badge-linked {
899
+ color: #ff00ff;
900
+ border-color: #ff00ff;
901
+ font-weight: bold;
902
+ animation: pulse 2s infinite;
903
+ }
904
+
905
+ @keyframes pulse {
906
+ 0%,
907
+ 100% {
908
+ opacity: 1;
909
+ }
910
+ 50% {
911
+ opacity: 0.6;
912
+ }
913
+ }
914
+
915
+ .link-indicator {
916
+ text-align: center;
917
+ padding: 8px;
918
+ margin-top: 10px;
919
+ border-top: 1px dashed #ff00ff;
920
+ color: #ff00ff;
921
+ font-size: 11px;
922
+ font-weight: bold;
923
+ letter-spacing: 1px;
924
+ }
925
+
926
+ .prompt-card {
927
+ border: 1px solid #333;
928
+ border-left: 3px solid #00ccff;
929
+ padding: 15px;
930
+ background: rgba(0, 204, 255, 0.03);
931
+ transition: all 0.2s;
932
+ position: relative;
933
+ }
934
+
935
+ .prompt-card:hover {
936
+ border-color: #00ccff;
937
+ background: rgba(0, 204, 255, 0.08);
938
+ }
939
+
940
+ .prompt-card.selected {
941
+ border-color: #00ccff;
942
+ background: rgba(0, 204, 255, 0.1);
943
+ }
944
+
945
+ .prompt-header {
946
+ display: flex;
947
+ justify-content: space-between;
948
+ align-items: center;
949
+ margin-bottom: 10px;
950
+ padding-bottom: 8px;
951
+ border-bottom: 1px solid rgba(0, 204, 255, 0.2);
952
+ }
953
+
954
+ .prompt-header .meta {
955
+ display: flex;
956
+ gap: 8px;
957
+ align-items: center;
958
+ flex-wrap: wrap;
959
+ }
960
+
961
+ .badge-prompt {
962
+ color: #00ccff;
963
+ border-color: #00ccff;
964
+ font-weight: bold;
965
+ font-size: 10px;
966
+ }
967
+
968
+ .prompt-content {
969
+ color: #ccc;
970
+ font-style: italic;
971
+ line-height: 1.6;
972
+ padding: 10px 0;
973
+ font-size: 13px;
974
+ word-wrap: break-word;
975
+ }
976
+
977
+ .prompt-date {
978
+ font-size: 11px;
979
+ color: #666;
980
+ }
981
+
982
+ .prompt-actions {
983
+ display: flex;
984
+ gap: 5px;
985
+ }
986
+
987
+ .prompt-actions button {
988
+ padding: 4px 10px;
989
+ font-size: 11px;
990
+ white-space: nowrap;
991
+ }
992
+
993
+ .memory-card {
994
+ border-left: 3px solid #00ff00;
995
+ }
996
+
997
+ .markdown-content {
998
+ line-height: 1.8;
999
+ color: #e0e0e0;
1000
+ }
1001
+
1002
+ .markdown-content h1,
1003
+ .markdown-content h2,
1004
+ .markdown-content h3 {
1005
+ color: #00ff00;
1006
+ font-weight: bold;
1007
+ margin: 16px 0 8px 0;
1008
+ border-bottom: 1px solid #333;
1009
+ padding-bottom: 4px;
1010
+ }
1011
+
1012
+ .markdown-content h1 {
1013
+ font-size: 18px;
1014
+ }
1015
+ .markdown-content h2 {
1016
+ font-size: 16px;
1017
+ }
1018
+ .markdown-content h3 {
1019
+ font-size: 14px;
1020
+ }
1021
+
1022
+ .markdown-content p {
1023
+ margin: 8px 0;
1024
+ }
1025
+
1026
+ .markdown-content ul,
1027
+ .markdown-content ol {
1028
+ margin: 8px 0;
1029
+ padding-left: 24px;
1030
+ }
1031
+
1032
+ .markdown-content li {
1033
+ margin: 4px 0;
1034
+ }
1035
+
1036
+ .markdown-content code {
1037
+ background: #1a1a1a;
1038
+ border: 1px solid #333;
1039
+ padding: 2px 6px;
1040
+ border-radius: 3px;
1041
+ font-family: "JetBrains Mono", monospace;
1042
+ font-size: 12px;
1043
+ color: #00ccff;
1044
+ }
1045
+
1046
+ .markdown-content pre {
1047
+ background: #1a1a1a;
1048
+ border: 1px solid #333;
1049
+ padding: 12px;
1050
+ border-radius: 4px;
1051
+ overflow-x: auto;
1052
+ margin: 12px 0;
1053
+ }
1054
+
1055
+ .markdown-content pre code {
1056
+ background: none;
1057
+ border: none;
1058
+ padding: 0;
1059
+ color: #e0e0e0;
1060
+ }
1061
+
1062
+ .markdown-content blockquote {
1063
+ border-left: 3px solid #00ff00;
1064
+ padding-left: 12px;
1065
+ margin: 12px 0;
1066
+ color: #888;
1067
+ font-style: italic;
1068
+ }
1069
+
1070
+ .markdown-content table {
1071
+ border-collapse: collapse;
1072
+ width: 100%;
1073
+ margin: 12px 0;
1074
+ }
1075
+
1076
+ .markdown-content th,
1077
+ .markdown-content td {
1078
+ border: 1px solid #333;
1079
+ padding: 8px 12px;
1080
+ text-align: left;
1081
+ }
1082
+
1083
+ .markdown-content th {
1084
+ background: #1a1a1a;
1085
+ color: #00ff00;
1086
+ font-weight: bold;
1087
+ }
1088
+
1089
+ .markdown-content a {
1090
+ color: #00ccff;
1091
+ text-decoration: none;
1092
+ border-bottom: 1px dotted #00ccff;
1093
+ }
1094
+
1095
+ .markdown-content a:hover {
1096
+ color: #00ff00;
1097
+ border-bottom-color: #00ff00;
1098
+ }
1099
+
1100
+ .markdown-content strong {
1101
+ color: #00ff00;
1102
+ font-weight: bold;
1103
+ }
1104
+
1105
+ .markdown-content em {
1106
+ color: #ffaa00;
1107
+ font-style: italic;
1108
+ }
1109
+
1110
+ .markdown-content del {
1111
+ color: #666;
1112
+ text-decoration: line-through;
1113
+ }
1114
+
1115
+ .markdown-content hr {
1116
+ border: none;
1117
+ border-top: 1px solid #333;
1118
+ margin: 16px 0;
1119
+ }
1120
+
1121
+ html {
1122
+ scroll-behavior: smooth;
1123
+ }
1124
+
1125
+ button:focus-visible,
1126
+ input:focus-visible,
1127
+ select:focus-visible,
1128
+ textarea:focus-visible {
1129
+ outline: 2px solid #00ff00;
1130
+ outline-offset: 2px;
1131
+ }
1132
+
1133
+ .memory-card::before,
1134
+ .prompt-card::before {
1135
+ content: "";
1136
+ position: absolute;
1137
+ top: 0;
1138
+ left: -100%;
1139
+ width: 100%;
1140
+ height: 100%;
1141
+ background: linear-gradient(90deg, transparent, rgba(0, 255, 0, 0.05), transparent);
1142
+ transition: left 0.5s;
1143
+ }
1144
+
1145
+ .memory-card:hover::before {
1146
+ left: 100%;
1147
+ }
1148
+
1149
+ .prompt-card::before {
1150
+ background: linear-gradient(90deg, transparent, rgba(0, 204, 255, 0.05), transparent);
1151
+ }
1152
+
1153
+ .prompt-card:hover::before {
1154
+ left: 100%;
1155
+ }
1156
+
1157
+ .toast {
1158
+ animation: slideInBounce 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
1159
+ }
1160
+
1161
+ @keyframes slideInBounce {
1162
+ 0% {
1163
+ transform: translateX(400px);
1164
+ opacity: 0;
1165
+ }
1166
+ 60% {
1167
+ transform: translateX(-20px);
1168
+ opacity: 1;
1169
+ }
1170
+ 80% {
1171
+ transform: translateX(10px);
1172
+ }
1173
+ 100% {
1174
+ transform: translateX(0);
1175
+ }
1176
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-mem",
3
- "version": "1.0.0",
3
+ "version": "2.0.0",
4
4
  "description": "OpenCode plugin that gives coding agents persistent memory using local vector database",
5
5
  "type": "module",
6
6
  "main": "dist/plugin.js",
@@ -28,6 +28,9 @@
28
28
  "type": "git",
29
29
  "url": "git+https://github.com/tickernelz/opencode-mem.git"
30
30
  },
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
31
34
  "dependencies": {
32
35
  "@opencode-ai/plugin": "^1.0.162",
33
36
  "@xenova/transformers": "^2.17.2",
@@ -1,92 +0,0 @@
1
- interface TokenInfo {
2
- input: number;
3
- output: number;
4
- cache: {
5
- read: number;
6
- write: number;
7
- };
8
- }
9
- interface MessageInfo {
10
- id: string;
11
- role: string;
12
- sessionID: string;
13
- providerID?: string;
14
- modelID?: string;
15
- tokens?: TokenInfo;
16
- summary?: boolean;
17
- finish?: boolean;
18
- }
19
- export interface CompactionOptions {
20
- threshold?: number;
21
- getModelLimit?: (providerID: string, modelID: string) => number | undefined;
22
- }
23
- export interface CompactionContext {
24
- directory: string;
25
- client: {
26
- session: {
27
- summarize: (params: {
28
- path: {
29
- id: string;
30
- };
31
- body: {
32
- providerID: string;
33
- modelID: string;
34
- };
35
- query: {
36
- directory: string;
37
- };
38
- }) => Promise<unknown>;
39
- messages: (params: {
40
- path: {
41
- id: string;
42
- };
43
- query: {
44
- directory: string;
45
- };
46
- }) => Promise<{
47
- data?: Array<{
48
- info: MessageInfo;
49
- }>;
50
- }>;
51
- promptAsync: (params: {
52
- path: {
53
- id: string;
54
- };
55
- body: {
56
- agent?: string;
57
- parts: Array<{
58
- type: string;
59
- text: string;
60
- }>;
61
- };
62
- query: {
63
- directory: string;
64
- };
65
- }) => Promise<unknown>;
66
- };
67
- tui: {
68
- showToast: (params: {
69
- body: {
70
- title: string;
71
- message: string;
72
- variant: string;
73
- duration: number;
74
- };
75
- }) => Promise<unknown>;
76
- };
77
- };
78
- }
79
- export declare function createCompactionHook(ctx: CompactionContext, tags: {
80
- user: string;
81
- project: string;
82
- }, options?: CompactionOptions): {
83
- compactionTracker: Map<string, number>;
84
- event({ event }: {
85
- event: {
86
- type: string;
87
- properties?: unknown;
88
- };
89
- }): Promise<void>;
90
- };
91
- export {};
92
- //# sourceMappingURL=compaction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/services/compaction.ts"],"names":[],"mappings":"AAsBA,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAgBD,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC7E;AAuLD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,OAAO,EAAE;YACP,SAAS,EAAE,CAAC,MAAM,EAAE;gBAAE,IAAI,EAAE;oBAAE,EAAE,EAAE,MAAM,CAAA;iBAAE,CAAC;gBAAC,IAAI,EAAE;oBAAE,UAAU,EAAE,MAAM,CAAC;oBAAC,OAAO,EAAE,MAAM,CAAA;iBAAE,CAAC;gBAAC,KAAK,EAAE;oBAAE,SAAS,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/I,QAAQ,EAAE,CAAC,MAAM,EAAE;gBAAE,IAAI,EAAE;oBAAE,EAAE,EAAE,MAAM,CAAA;iBAAE,CAAC;gBAAC,KAAK,EAAE;oBAAE,SAAS,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,KAAK,OAAO,CAAC;gBAAE,IAAI,CAAC,EAAE,KAAK,CAAC;oBAAE,IAAI,EAAE,WAAW,CAAA;iBAAE,CAAC,CAAA;aAAE,CAAC,CAAC;YAC/H,WAAW,EAAE,CAAC,MAAM,EAAE;gBAAE,IAAI,EAAE;oBAAE,EAAE,EAAE,MAAM,CAAA;iBAAE,CAAC;gBAAC,IAAI,EAAE;oBAAE,KAAK,CAAC,EAAE,MAAM,CAAC;oBAAC,KAAK,EAAE,KAAK,CAAC;wBAAE,IAAI,EAAE,MAAM,CAAC;wBAAC,IAAI,EAAE,MAAM,CAAA;qBAAE,CAAC,CAAA;iBAAE,CAAC;gBAAC,KAAK,EAAE;oBAAE,SAAS,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;SAC3K,CAAC;QACF,GAAG,EAAE;YACH,SAAS,EAAE,CAAC,MAAM,EAAE;gBAAE,IAAI,EAAE;oBAAE,KAAK,EAAE,MAAM,CAAC;oBAAC,OAAO,EAAE,MAAM,CAAC;oBAAC,OAAO,EAAE,MAAM,CAAC;oBAAC,QAAQ,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;SAC1H,CAAC;KACH,CAAC;CACH;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACvC,OAAO,CAAC,EAAE,iBAAiB;;qBAsOF;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE;EAgE3E"}