@holokai/holo-sdk 1.4.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.
Files changed (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +264 -0
  3. package/dist/client/builder.d.ts +82 -0
  4. package/dist/client/builder.d.ts.map +1 -0
  5. package/dist/client/builder.js +207 -0
  6. package/dist/client/builder.js.map +1 -0
  7. package/dist/client/client.d.ts +148 -0
  8. package/dist/client/client.d.ts.map +1 -0
  9. package/dist/client/client.js +309 -0
  10. package/dist/client/client.js.map +1 -0
  11. package/dist/client/errors.d.ts +20 -0
  12. package/dist/client/errors.d.ts.map +1 -0
  13. package/dist/client/errors.js +36 -0
  14. package/dist/client/errors.js.map +1 -0
  15. package/dist/client/index.d.ts +11 -0
  16. package/dist/client/index.d.ts.map +1 -0
  17. package/dist/client/index.js +8 -0
  18. package/dist/client/index.js.map +1 -0
  19. package/dist/client/merge.d.ts +28 -0
  20. package/dist/client/merge.d.ts.map +1 -0
  21. package/dist/client/merge.js +185 -0
  22. package/dist/client/merge.js.map +1 -0
  23. package/dist/client/output.d.ts +26 -0
  24. package/dist/client/output.d.ts.map +1 -0
  25. package/dist/client/output.js +75 -0
  26. package/dist/client/output.js.map +1 -0
  27. package/dist/client/runner.d.ts +92 -0
  28. package/dist/client/runner.d.ts.map +1 -0
  29. package/dist/client/runner.js +121 -0
  30. package/dist/client/runner.js.map +1 -0
  31. package/dist/client/sse.d.ts +3 -0
  32. package/dist/client/sse.d.ts.map +1 -0
  33. package/dist/client/sse.js +72 -0
  34. package/dist/client/sse.js.map +1 -0
  35. package/dist/client/stream.d.ts +60 -0
  36. package/dist/client/stream.d.ts.map +1 -0
  37. package/dist/client/stream.js +137 -0
  38. package/dist/client/stream.js.map +1 -0
  39. package/dist/client/transport.d.ts +42 -0
  40. package/dist/client/transport.d.ts.map +1 -0
  41. package/dist/client/transport.js +129 -0
  42. package/dist/client/transport.js.map +1 -0
  43. package/dist/client/types.d.ts +41 -0
  44. package/dist/client/types.d.ts.map +1 -0
  45. package/dist/client/types.js +2 -0
  46. package/dist/client/types.js.map +1 -0
  47. package/dist/core/async-event-queue.d.ts +11 -0
  48. package/dist/core/async-event-queue.d.ts.map +1 -0
  49. package/dist/core/async-event-queue.js +38 -0
  50. package/dist/core/async-event-queue.js.map +1 -0
  51. package/dist/core/binary.d.ts +3 -0
  52. package/dist/core/binary.d.ts.map +1 -0
  53. package/dist/core/binary.js +11 -0
  54. package/dist/core/binary.js.map +1 -0
  55. package/dist/core/errors.d.ts +11 -0
  56. package/dist/core/errors.d.ts.map +1 -0
  57. package/dist/core/errors.js +24 -0
  58. package/dist/core/errors.js.map +1 -0
  59. package/dist/core/headers.d.ts +3 -0
  60. package/dist/core/headers.d.ts.map +1 -0
  61. package/dist/core/headers.js +42 -0
  62. package/dist/core/headers.js.map +1 -0
  63. package/dist/core/index.d.ts +13 -0
  64. package/dist/core/index.d.ts.map +1 -0
  65. package/dist/core/index.js +13 -0
  66. package/dist/core/index.js.map +1 -0
  67. package/dist/core/logger.d.ts +37 -0
  68. package/dist/core/logger.d.ts.map +1 -0
  69. package/dist/core/logger.js +73 -0
  70. package/dist/core/logger.js.map +1 -0
  71. package/dist/core/pick-defined.d.ts +9 -0
  72. package/dist/core/pick-defined.d.ts.map +1 -0
  73. package/dist/core/pick-defined.js +79 -0
  74. package/dist/core/pick-defined.js.map +1 -0
  75. package/dist/core/safe-parse.d.ts +2 -0
  76. package/dist/core/safe-parse.d.ts.map +1 -0
  77. package/dist/core/safe-parse.js +11 -0
  78. package/dist/core/safe-parse.js.map +1 -0
  79. package/dist/core/sanitize.object.d.ts +2 -0
  80. package/dist/core/sanitize.object.d.ts.map +1 -0
  81. package/dist/core/sanitize.object.js +10 -0
  82. package/dist/core/sanitize.object.js.map +1 -0
  83. package/dist/core/stable-id.d.ts +2 -0
  84. package/dist/core/stable-id.d.ts.map +1 -0
  85. package/dist/core/stable-id.js +11 -0
  86. package/dist/core/stable-id.js.map +1 -0
  87. package/dist/core/stringify-any.d.ts +2 -0
  88. package/dist/core/stringify-any.d.ts.map +1 -0
  89. package/dist/core/stringify-any.js +4 -0
  90. package/dist/core/stringify-any.js.map +1 -0
  91. package/dist/core/time-utils.d.ts +2 -0
  92. package/dist/core/time-utils.d.ts.map +1 -0
  93. package/dist/core/time-utils.js +2 -0
  94. package/dist/core/time-utils.js.map +1 -0
  95. package/dist/core/tokenizer.d.ts +2 -0
  96. package/dist/core/tokenizer.d.ts.map +1 -0
  97. package/dist/core/tokenizer.js +12 -0
  98. package/dist/core/tokenizer.js.map +1 -0
  99. package/dist/holo/content.d.ts +9 -0
  100. package/dist/holo/content.d.ts.map +1 -0
  101. package/dist/holo/content.js +22 -0
  102. package/dist/holo/content.js.map +1 -0
  103. package/dist/holo/factories/index.d.ts +2 -0
  104. package/dist/holo/factories/index.d.ts.map +1 -0
  105. package/dist/holo/factories/index.js +2 -0
  106. package/dist/holo/factories/index.js.map +1 -0
  107. package/dist/holo/factories/request-factory.d.ts +3 -0
  108. package/dist/holo/factories/request-factory.d.ts.map +1 -0
  109. package/dist/holo/factories/request-factory.js +8 -0
  110. package/dist/holo/factories/request-factory.js.map +1 -0
  111. package/dist/holo/index.d.ts +3 -0
  112. package/dist/holo/index.d.ts.map +1 -0
  113. package/dist/holo/index.js +3 -0
  114. package/dist/holo/index.js.map +1 -0
  115. package/dist/index.d.ts +5 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +5 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/matching/index.d.ts +3 -0
  120. package/dist/matching/index.d.ts.map +1 -0
  121. package/dist/matching/index.js +2 -0
  122. package/dist/matching/index.js.map +1 -0
  123. package/dist/matching/normalize.d.ts +19 -0
  124. package/dist/matching/normalize.d.ts.map +1 -0
  125. package/dist/matching/normalize.js +169 -0
  126. package/dist/matching/normalize.js.map +1 -0
  127. package/dist/notification/index.d.ts +4 -0
  128. package/dist/notification/index.d.ts.map +1 -0
  129. package/dist/notification/index.js +4 -0
  130. package/dist/notification/index.js.map +1 -0
  131. package/dist/notification/service.d.ts +8 -0
  132. package/dist/notification/service.d.ts.map +1 -0
  133. package/dist/notification/service.js +16 -0
  134. package/dist/notification/service.js.map +1 -0
  135. package/dist/notification/store.d.ts +2 -0
  136. package/dist/notification/store.d.ts.map +1 -0
  137. package/dist/notification/store.js +2 -0
  138. package/dist/notification/store.js.map +1 -0
  139. package/dist/notification/types.d.ts +11 -0
  140. package/dist/notification/types.d.ts.map +1 -0
  141. package/dist/notification/types.js +63 -0
  142. package/dist/notification/types.js.map +1 -0
  143. package/dist/plugin/base.d.ts +29 -0
  144. package/dist/plugin/base.d.ts.map +1 -0
  145. package/dist/plugin/base.js +105 -0
  146. package/dist/plugin/base.js.map +1 -0
  147. package/dist/plugin/errors.d.ts +9 -0
  148. package/dist/plugin/errors.d.ts.map +1 -0
  149. package/dist/plugin/errors.js +15 -0
  150. package/dist/plugin/errors.js.map +1 -0
  151. package/dist/plugin/index.d.ts +5 -0
  152. package/dist/plugin/index.d.ts.map +1 -0
  153. package/dist/plugin/index.js +5 -0
  154. package/dist/plugin/index.js.map +1 -0
  155. package/dist/plugin/loader.d.ts +14 -0
  156. package/dist/plugin/loader.d.ts.map +1 -0
  157. package/dist/plugin/loader.js +67 -0
  158. package/dist/plugin/loader.js.map +1 -0
  159. package/dist/plugin/normalize.d.ts +3 -0
  160. package/dist/plugin/normalize.d.ts.map +1 -0
  161. package/dist/plugin/normalize.js +160 -0
  162. package/dist/plugin/normalize.js.map +1 -0
  163. package/dist/provider/auditor/base.d.ts +47 -0
  164. package/dist/provider/auditor/base.d.ts.map +1 -0
  165. package/dist/provider/auditor/base.js +254 -0
  166. package/dist/provider/auditor/base.js.map +1 -0
  167. package/dist/provider/auditor/index.d.ts +2 -0
  168. package/dist/provider/auditor/index.d.ts.map +1 -0
  169. package/dist/provider/auditor/index.js +2 -0
  170. package/dist/provider/auditor/index.js.map +1 -0
  171. package/dist/provider/base.d.ts +36 -0
  172. package/dist/provider/base.d.ts.map +1 -0
  173. package/dist/provider/base.js +185 -0
  174. package/dist/provider/base.js.map +1 -0
  175. package/dist/provider/event-processor.d.ts +13 -0
  176. package/dist/provider/event-processor.d.ts.map +1 -0
  177. package/dist/provider/event-processor.js +22 -0
  178. package/dist/provider/event-processor.js.map +1 -0
  179. package/dist/provider/index.d.ts +7 -0
  180. package/dist/provider/index.d.ts.map +1 -0
  181. package/dist/provider/index.js +7 -0
  182. package/dist/provider/index.js.map +1 -0
  183. package/dist/provider/translator/base.d.ts +15 -0
  184. package/dist/provider/translator/base.d.ts.map +1 -0
  185. package/dist/provider/translator/base.js +33 -0
  186. package/dist/provider/translator/base.js.map +1 -0
  187. package/dist/provider/translator/index.d.ts +3 -0
  188. package/dist/provider/translator/index.d.ts.map +1 -0
  189. package/dist/provider/translator/index.js +3 -0
  190. package/dist/provider/translator/index.js.map +1 -0
  191. package/dist/provider/translator/stream.d.ts +24 -0
  192. package/dist/provider/translator/stream.d.ts.map +1 -0
  193. package/dist/provider/translator/stream.js +50 -0
  194. package/dist/provider/translator/stream.js.map +1 -0
  195. package/dist/provider/wire/base.d.ts +39 -0
  196. package/dist/provider/wire/base.d.ts.map +1 -0
  197. package/dist/provider/wire/base.js +106 -0
  198. package/dist/provider/wire/base.js.map +1 -0
  199. package/dist/provider/wire/holo.wire.adapter.d.ts +33 -0
  200. package/dist/provider/wire/holo.wire.adapter.d.ts.map +1 -0
  201. package/dist/provider/wire/holo.wire.adapter.js +220 -0
  202. package/dist/provider/wire/holo.wire.adapter.js.map +1 -0
  203. package/dist/provider/wire/index.d.ts +3 -0
  204. package/dist/provider/wire/index.d.ts.map +1 -0
  205. package/dist/provider/wire/index.js +3 -0
  206. package/dist/provider/wire/index.js.map +1 -0
  207. package/dist/provider/worker-request-factory.d.ts +23 -0
  208. package/dist/provider/worker-request-factory.d.ts.map +1 -0
  209. package/dist/provider/worker-request-factory.js +38 -0
  210. package/dist/provider/worker-request-factory.js.map +1 -0
  211. package/package.json +106 -0
@@ -0,0 +1,169 @@
1
+ import { pickDefined } from '../core/pick-defined';
2
+ const PROVIDER_PREFIXES = [
3
+ 'anthropic/', 'openai/', 'google/', 'meta-llama/', 'meta/', 'mistralai/',
4
+ 'cohere/', 'deepseek/', 'qwen/',
5
+ 'ollama/', 'lmstudio/', 'openrouter/', 'azure/',
6
+ 'models/',
7
+ ];
8
+ const PREFIX_TO_PROVIDER = {
9
+ 'anthropic': 'anthropic',
10
+ 'openai': 'openai',
11
+ 'google': 'google',
12
+ 'meta-llama': 'meta',
13
+ 'meta': 'meta',
14
+ 'mistralai': 'mistral',
15
+ 'cohere': 'cohere',
16
+ 'deepseek': 'deepseek',
17
+ 'qwen': 'qwen',
18
+ 'ollama': 'ollama',
19
+ 'lmstudio': 'lmstudio',
20
+ 'openrouter': 'openrouter',
21
+ 'azure': 'azure',
22
+ };
23
+ const PREFIX_TO_FAMILY = {
24
+ 'anthropic': 'claude',
25
+ 'google': 'gemini',
26
+ 'meta-llama': 'llama',
27
+ 'meta': 'llama',
28
+ };
29
+ const FAMILY_PATTERNS = [
30
+ [/\bclaude/, 'claude'],
31
+ [/\bgemini/, 'gemini'],
32
+ [/\bgpt/, 'gpt'],
33
+ [/(?:^|-)o[1-9](?:-|$)/, 'o-series'],
34
+ [/\bllama/, 'llama'],
35
+ [/\bqwen/, 'qwen'],
36
+ [/\bmi[sx]tral/, 'mistral'],
37
+ [/\bdeepseek/, 'deepseek'],
38
+ [/\bcohere/, 'cohere'],
39
+ [/\bcommand/, 'cohere'],
40
+ [/\bphi/, 'phi'],
41
+ [/\bgemma/, 'gemma'],
42
+ ];
43
+ const SEMANTIC_VARIANTS = ['opus', 'sonnet', 'haiku', 'pro', 'flash', 'mini', 'nano', 'instruct', 'coder', 'turbo'];
44
+ const CHANNEL_MARKERS = ['latest', 'preview'];
45
+ const ALL_VARIANT_TOKENS = [...SEMANTIC_VARIANTS, ...CHANNEL_MARKERS];
46
+ const VARIANT_PATTERN = new RegExp(`\\b(${ALL_VARIANT_TOKENS.join('|')})\\b`, 'g');
47
+ const VARIANT_PRIORITY = Object.fromEntries(SEMANTIC_VARIANTS.map((v, i) => [v, SEMANTIC_VARIANTS.length - i]));
48
+ const SIZE_PATTERN = /\b(\d+x\d+b|\d+(?:\.\d+)?b)\b/;
49
+ const DATE_TRAILING_COMPACT = /-(\d{4})(\d{2})(\d{2})$/;
50
+ const DATE_TRAILING_HYPHEN = /-(\d{4})-(\d{2})-(\d{2})$/;
51
+ const KIND_SIGNALS = [
52
+ [/\bembed/, 'embedding'],
53
+ [/\btts\b/, 'tts'],
54
+ [/\bwhisper\b/, 'transcription'],
55
+ [/\brerank\b/, 'rerank'],
56
+ [/\bmoderat/, 'moderation'],
57
+ [/\bimage\b|\bdall-?e\b|\bstable-?diffusion\b/, 'image'],
58
+ ];
59
+ export function normalizeModelName(input) {
60
+ const raw = input;
61
+ let s = input.trim().toLowerCase();
62
+ let providerHint;
63
+ let prefixKey;
64
+ for (const prefix of PROVIDER_PREFIXES) {
65
+ if (s.startsWith(prefix)) {
66
+ prefixKey = prefix.slice(0, -1);
67
+ providerHint = PREFIX_TO_PROVIDER[prefixKey];
68
+ s = s.slice(prefix.length);
69
+ break;
70
+ }
71
+ }
72
+ s = s.replace(/[_:\/]/g, '-').replace(/\s+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');
73
+ let dateHint;
74
+ const compactDate = s.match(DATE_TRAILING_COMPACT);
75
+ if (compactDate) {
76
+ dateHint = `${compactDate[1]}-${compactDate[2]}-${compactDate[3]}`;
77
+ }
78
+ else {
79
+ const hyphenDate = s.match(DATE_TRAILING_HYPHEN);
80
+ if (hyphenDate) {
81
+ dateHint = `${hyphenDate[1]}-${hyphenDate[2]}-${hyphenDate[3]}`;
82
+ }
83
+ }
84
+ let versionHint;
85
+ const versionMatch = s.match(/\b(\d+)-(\d+)\b/);
86
+ if (versionMatch) {
87
+ versionHint = `${versionMatch[1]}.${versionMatch[2]}`;
88
+ }
89
+ else {
90
+ const dotVersion = s.match(/(\d+\.\d+(?:\.\d+)?)/);
91
+ if (dotVersion) {
92
+ versionHint = dotVersion[1];
93
+ }
94
+ }
95
+ let sizeHint;
96
+ const sizeMatch = s.match(SIZE_PATTERN);
97
+ if (sizeMatch) {
98
+ sizeHint = sizeMatch[1];
99
+ }
100
+ let variantHint;
101
+ let channelHint;
102
+ const variantMatches = [...s.matchAll(VARIANT_PATTERN)];
103
+ if (variantMatches.length > 0) {
104
+ const semantics = [];
105
+ for (const m of variantMatches) {
106
+ const v = m[1];
107
+ if (CHANNEL_MARKERS.includes(v)) {
108
+ channelHint = v;
109
+ }
110
+ else {
111
+ semantics.push(v);
112
+ }
113
+ }
114
+ if (semantics.length > 0) {
115
+ variantHint = semantics.sort((a, b) => (VARIANT_PRIORITY[b] ?? 0) - (VARIANT_PRIORITY[a] ?? 0))[0];
116
+ }
117
+ }
118
+ let familyHint;
119
+ if (prefixKey)
120
+ familyHint = PREFIX_TO_FAMILY[prefixKey];
121
+ if (!familyHint) {
122
+ for (const [pattern, family] of FAMILY_PATTERNS) {
123
+ if (pattern.test(s)) {
124
+ familyHint = family;
125
+ break;
126
+ }
127
+ }
128
+ }
129
+ let kindHint;
130
+ for (const [pattern, kind] of KIND_SIGNALS) {
131
+ if (pattern.test(s)) {
132
+ kindHint = kind;
133
+ break;
134
+ }
135
+ }
136
+ const tokens = s.split('-').filter(t => t.length > 0);
137
+ return Object.assign({ raw, normalized: s, tokens }, pickDefined({ providerHint, familyHint, versionHint, sizeHint, variantHint, channelHint, dateHint, kindHint }));
138
+ }
139
+ export function stripDate(normalized) {
140
+ const compact = normalized.match(DATE_TRAILING_COMPACT);
141
+ if (compact)
142
+ return normalized.slice(0, -compact[0].length);
143
+ const hyphen = normalized.match(DATE_TRAILING_HYPHEN);
144
+ if (hyphen)
145
+ return normalized.slice(0, -hyphen[0].length);
146
+ return undefined;
147
+ }
148
+ const PROVIDER_REVISION = /-0\d{2}$|-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$|-(0[1-9]|1[0-2])-(\d{4})$/;
149
+ export function stripProviderRevision(normalized) {
150
+ const match = normalized.match(PROVIDER_REVISION);
151
+ if (match)
152
+ return normalized.slice(0, -match[0].length);
153
+ return undefined;
154
+ }
155
+ const QUANTIZATION = /-(q\d+(-\d+)?|fp16|fp32|int4|int8|gguf)$/;
156
+ export function stripQuantization(normalized) {
157
+ const match = normalized.match(QUANTIZATION);
158
+ if (match)
159
+ return normalized.slice(0, -match[0].length);
160
+ return undefined;
161
+ }
162
+ const CHANNEL_SUFFIX = /-(latest|preview)$/;
163
+ export function stripChannel(normalized) {
164
+ const match = normalized.match(CHANNEL_SUFFIX);
165
+ if (match)
166
+ return normalized.slice(0, -match[0].length);
167
+ return undefined;
168
+ }
169
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/matching/normalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './service';
2
+ export * from './store';
3
+ export * from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notification/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './service';
2
+ export * from './store';
3
+ export * from './types';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notification/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const NotificationServiceToken: unique symbol;
2
+ export declare class NotificationTopic {
3
+ static userKey(orgId: string, userId: string): string;
4
+ static userApp(orgId: string, userId: string, appSlug?: string): string;
5
+ static publishKey(orgId: string, userId?: string, appSlug?: string): string;
6
+ static broadcastApp(orgId: string, appSlug: string): string;
7
+ }
8
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/notification/service.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,eAAgC,CAAC;AAEtE,qBAAa,iBAAiB;IAE1B,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAI5C,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAY;IAInE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAc,EAAE,OAAO,GAAE,MAAc;IAIhF,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAGrD"}
@@ -0,0 +1,16 @@
1
+ export const NotificationServiceToken = Symbol("NotificationService");
2
+ export class NotificationTopic {
3
+ static userKey(orgId, userId) {
4
+ return `${orgId}.${userId}`;
5
+ }
6
+ static userApp(orgId, userId, appSlug = '*') {
7
+ return `org.${orgId}.user.${userId}.app.${appSlug}`;
8
+ }
9
+ static publishKey(orgId, userId = 'all', appSlug = 'all') {
10
+ return `org.${orgId}.user.${userId}.app.${appSlug}`;
11
+ }
12
+ static broadcastApp(orgId, appSlug) {
13
+ return `org.${orgId}.user.all.app.${appSlug}`;
14
+ }
15
+ }
16
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/notification/service.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAEtE,MAAM,OAAO,iBAAiB;IAE1B,MAAM,CAAC,OAAO,CAAC,KAAa,EAAE,MAAc;QACxC,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,KAAa,EAAE,MAAc,EAAE,UAAkB,GAAG;QAC/D,OAAO,OAAO,KAAK,SAAS,MAAM,QAAQ,OAAO,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,KAAa,EAAE,SAAiB,KAAK,EAAE,UAAkB,KAAK;QAC5E,OAAO,OAAO,KAAK,SAAS,MAAM,QAAQ,OAAO,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,KAAa,EAAE,OAAe;QAC9C,OAAO,OAAO,KAAK,iBAAiB,OAAO,EAAE,CAAC;IAClD,CAAC;CACJ"}
@@ -0,0 +1,2 @@
1
+ export declare const NotificationStoreToken: unique symbol;
2
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/notification/store.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,eAA8B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const NotificationStoreToken = Symbol("NotificationStore");
2
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/notification/store.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { NotificationEvent, NotificationSeverity } from '@holokai/holo-types/notification';
2
+ import { NotificationEventType } from "@holokai/holo-types/notification";
3
+ import type { Auth } from '@holokai/holo-types/api';
4
+ import type { HoloWorkerRequest } from '@holokai/holo-types/worker';
5
+ import { ProviderDoneEvent, ProviderErrorEvent, WorkerResponseEnvelope } from "@holokai/holo-types";
6
+ export declare class NotificationEventFactory {
7
+ static fromAuthAndRequest(type: NotificationEventType, auth: Auth, request: HoloWorkerRequest, message: string, payload?: any, severity?: NotificationSeverity): NotificationEvent;
8
+ static fromRequest(type: NotificationEventType, request: HoloWorkerRequest, message: string, payload?: any, severity?: NotificationSeverity): NotificationEvent;
9
+ static fromProviderEvent(envelope: WorkerResponseEnvelope, event: ProviderDoneEvent | ProviderErrorEvent): NotificationEvent;
10
+ }
11
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/notification/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAC,qBAAqB,EAAC,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAGlE,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAqB,sBAAsB,EAAC,MAAM,qBAAqB,CAAC;AAErH,qBAAa,wBAAwB;IACjC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAE,oBAA6B,GAAG,iBAAiB;IAoB1L,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAE,oBAA6B,GAAG,iBAAiB;IAkBvK,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,sBAAsB,EAAE,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,iBAAiB;CAqB/H"}
@@ -0,0 +1,63 @@
1
+ import { NotificationEventType } from "@holokai/holo-types/notification";
2
+ import { pickDefined } from "../core";
3
+ import { v4 as uuidv4 } from "uuid";
4
+ import { ProviderEventType } from "@holokai/holo-types";
5
+ export class NotificationEventFactory {
6
+ static fromAuthAndRequest(type, auth, request, message, payload, severity = "info") {
7
+ const { organizationId, application, userId } = auth;
8
+ const { requestId, threadId, branchId } = request;
9
+ const appSlug = application?.url_slug;
10
+ return pickDefined({
11
+ id: uuidv4(),
12
+ ts: Date.now(),
13
+ organizationId,
14
+ userId,
15
+ appSlug,
16
+ type,
17
+ severity,
18
+ message,
19
+ requestId,
20
+ payload,
21
+ threadId: threadId,
22
+ branchId: branchId,
23
+ });
24
+ }
25
+ static fromRequest(type, request, message, payload, severity = "info") {
26
+ const { organizationId, userId, appSlug, requestId, threadId, branchId } = request;
27
+ return pickDefined({
28
+ id: uuidv4(),
29
+ ts: Date.now(),
30
+ organizationId,
31
+ userId,
32
+ appSlug,
33
+ type,
34
+ severity,
35
+ message,
36
+ requestId,
37
+ payload,
38
+ threadId: threadId,
39
+ branchId: branchId,
40
+ });
41
+ }
42
+ static fromProviderEvent(envelope, event) {
43
+ return pickDefined({
44
+ type: NotificationEventType.RESPONSE_COMPLETED,
45
+ id: uuidv4(),
46
+ ts: Date.now(),
47
+ organizationId: envelope.organization_id,
48
+ userId: envelope.user_id,
49
+ appSlug: envelope.application?.url_slug,
50
+ severity: event.type === ProviderEventType.ERROR ? 'error' : 'info',
51
+ message: NotificationEventType.RESPONSE_COMPLETED,
52
+ requestId: envelope.request_id,
53
+ payload: pickDefined({
54
+ status: event.type === ProviderEventType.DONE ? 'success' : 'error',
55
+ eventType: event.type,
56
+ error: event.type === ProviderEventType.ERROR ? event.error : undefined
57
+ }),
58
+ threadId: envelope.thread_id,
59
+ branchId: envelope.branch_id
60
+ });
61
+ }
62
+ }
63
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/notification/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,qBAAqB,EAAC,MAAM,kCAAkC,CAAC;AAGvE,OAAO,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AACpC,OAAO,EAAC,EAAE,IAAI,MAAM,EAAC,MAAM,MAAM,CAAC;AAClC,OAAO,EAAwC,iBAAiB,EAAyB,MAAM,qBAAqB,CAAC;AAErH,MAAM,OAAO,wBAAwB;IACjC,MAAM,CAAC,kBAAkB,CAAC,IAA2B,EAAE,IAAU,EAAE,OAA0B,EAAE,OAAe,EAAE,OAAa,EAAE,WAAiC,MAAM;QAClK,MAAM,EAAC,cAAc,EAAE,WAAW,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC;QACnD,MAAM,EAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAC,GAAG,OAAO,CAAC;QAChD,MAAM,OAAO,GAAG,WAAW,EAAE,QAAQ,CAAC;QACtC,OAAO,WAAW,CAAC;YACf,EAAE,EAAE,MAAM,EAAE;YACZ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,cAAc;YACd,MAAM;YACN,OAAO;YACP,IAAI;YACJ,QAAQ;YACR,OAAO;YACP,SAAS;YACT,OAAO;YACP,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,QAAQ;SACrB,CAAsB,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAA2B,EAAE,OAA0B,EAAE,OAAe,EAAE,OAAa,EAAE,WAAiC,MAAM;QAC/I,MAAM,EAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAC,GAAG,OAAO,CAAC;QACjF,OAAO,WAAW,CAAC;YACf,EAAE,EAAE,MAAM,EAAE;YACZ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,cAAc;YACd,MAAM;YACN,OAAO;YACP,IAAI;YACJ,QAAQ;YACR,OAAO;YACP,SAAS;YACT,OAAO;YACP,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,QAAQ;SACrB,CAAsB,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,QAAgC,EAAE,KAA6C;QAEpG,OAAO,WAAW,CAAC;YACf,IAAI,EAAE,qBAAqB,CAAC,kBAAkB;YAC9C,EAAE,EAAE,MAAM,EAAE;YACZ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,cAAc,EAAE,QAAQ,CAAC,eAAe;YACxC,MAAM,EAAE,QAAQ,CAAC,OAAO;YACxB,OAAO,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ;YACvC,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YACnE,OAAO,EAAE,qBAAqB,CAAC,kBAAkB;YACjD,SAAS,EAAE,QAAQ,CAAC,UAAU;YAC9B,OAAO,EAAE,WAAW,CAAC;gBACjB,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;gBACnE,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aAC1E,CAAC;YACF,QAAQ,EAAE,QAAQ,CAAC,SAAS;YAC5B,QAAQ,EAAE,QAAQ,CAAC,SAAS;SAC/B,CAAsB,CAAC;IAC5B,CAAC;CACJ"}
@@ -0,0 +1,29 @@
1
+ import { IPlugin, PluginContext, PluginManifest, PluginState, PluginType } from "@holokai/holo-types/plugin";
2
+ import { ClassLogger } from "../core";
3
+ import type { CostResult, PricingSheetModel } from "@holokai/holo-types/entities";
4
+ export declare abstract class BasePlugin extends ClassLogger implements IPlugin {
5
+ id?: string;
6
+ abstract readonly manifest: PluginManifest;
7
+ private _context;
8
+ protected _state: PluginState;
9
+ get state(): PluginState;
10
+ get name(): string;
11
+ get type(): PluginType;
12
+ get family(): string;
13
+ get version(): string;
14
+ protected get pluginContext(): PluginContext;
15
+ getState(): PluginState;
16
+ initialize(context: PluginContext): Promise<void>;
17
+ destroy(): Promise<void>;
18
+ calculateCost(tokens: Record<string, number>, pricing: PricingSheetModel): CostResult;
19
+ protected abstract calculateExtraCosts(tokens: Record<string, number>, pricing: PricingSheetModel): {
20
+ total: number;
21
+ detail: Record<string, {
22
+ tokens: number;
23
+ cost: number;
24
+ }>;
25
+ };
26
+ protected abstract onInitialize(context: PluginContext): Promise<void>;
27
+ protected abstract onDestroy(): Promise<void>;
28
+ }
29
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/plugin/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAC,MAAM,4BAA4B,CAAC;AAE3G,OAAO,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAC,UAAU,EAAE,iBAAiB,EAAC,MAAM,8BAA8B,CAAC;AAGhF,8BAAsB,UAAW,SAAQ,WAAY,YAAW,OAAO;IACnE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAE3C,OAAO,CAAC,QAAQ,CAA4B;IAC5C,SAAS,CAAC,MAAM,EAAE,WAAW,CAA6B;IAE1D,IAAI,KAAK,IAAI,WAAW,CAEvB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,SAAS,KAAK,aAAa,IAAI,aAAa,CAS3C;IAED,QAAQ,IAAI,WAAW;IAIjB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC9B,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,iBAAiB,GAAG,UAAU;IA8BrF,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,EAAE,iBAAiB,GAC3B;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE;IAE9E,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtE,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAChD"}
@@ -0,0 +1,105 @@
1
+ import { PluginState } from "@holokai/holo-types/plugin";
2
+ import { PluginError, PluginErrorCode } from "./errors";
3
+ import { ClassLogger } from "../core";
4
+ export class BasePlugin extends ClassLogger {
5
+ id;
6
+ _context;
7
+ _state = PluginState.UNINITIALIZED;
8
+ get state() {
9
+ return this._state;
10
+ }
11
+ get name() {
12
+ return this.manifest.name;
13
+ }
14
+ get type() {
15
+ return this.manifest.pluginType;
16
+ }
17
+ get family() {
18
+ return this.manifest.family ?? this.manifest.name;
19
+ }
20
+ get version() {
21
+ return this.manifest.version;
22
+ }
23
+ get pluginContext() {
24
+ if (!this._context) {
25
+ throw new PluginError('Plugin context is not available. Initialize the plugin first.', PluginErrorCode.INVALID_STATE, this.manifest.name);
26
+ }
27
+ return this._context;
28
+ }
29
+ getState() {
30
+ return this._state;
31
+ }
32
+ async initialize(context) {
33
+ const logger = this.mlog(this.initialize);
34
+ if (this._state !== PluginState.UNINITIALIZED) {
35
+ throw new PluginError(`Cannot initialize plugin in state ${this._state}`, PluginErrorCode.INITIALIZATION_FAILED, this.manifest.name);
36
+ }
37
+ this._state = PluginState.INITIALIZING;
38
+ this._context = context;
39
+ try {
40
+ logger.debug('Initializing plugin');
41
+ await this.onInitialize(context);
42
+ this._state = PluginState.READY;
43
+ logger.info('Plugin initialized successfully');
44
+ }
45
+ catch (error) {
46
+ this._state = PluginState.ERROR;
47
+ logger.error('Plugin initialization failed', { error });
48
+ throw new PluginError('Failed to initialize plugin', PluginErrorCode.INITIALIZATION_FAILED, this.manifest.name, error);
49
+ }
50
+ }
51
+ async destroy() {
52
+ const logger = this.mlog(this.destroy);
53
+ if (this._state === PluginState.DESTROYED) {
54
+ return;
55
+ }
56
+ if (this._state === PluginState.UNINITIALIZED) {
57
+ this._state = PluginState.DESTROYED;
58
+ return;
59
+ }
60
+ this._state = PluginState.DESTROYING;
61
+ try {
62
+ logger.info('Destroying plugin');
63
+ await this.onDestroy();
64
+ this._state = PluginState.DESTROYED;
65
+ this._context = undefined;
66
+ }
67
+ catch (error) {
68
+ this._state = PluginState.ERROR;
69
+ try {
70
+ logger.error('Plugin destruction failed', { error });
71
+ }
72
+ catch {
73
+ console.error(`[${this.manifest.name}] Plugin destruction failed`, error);
74
+ }
75
+ throw new PluginError('Failed to destroy plugin', PluginErrorCode.DESTRUCTION_FAILED, this.manifest.name, error);
76
+ }
77
+ }
78
+ calculateCost(tokens, pricing) {
79
+ let inputRate = Number(pricing.input_cost);
80
+ let outputRate = Number(pricing.output_cost);
81
+ if (pricing.context_threshold && pricing.extended_input_cost && pricing.extended_output_cost) {
82
+ const totalInput = Object.entries(tokens)
83
+ .filter(([k]) => k !== 'output')
84
+ .reduce((sum, [, v]) => sum + v, 0);
85
+ if (totalInput > pricing.context_threshold) {
86
+ inputRate = Number(pricing.extended_input_cost);
87
+ outputRate = Number(pricing.extended_output_cost);
88
+ }
89
+ }
90
+ const inputCost = (tokens.input ?? 0) * inputRate;
91
+ const outputCost = (tokens.output ?? 0) * outputRate;
92
+ const extraCosts = this.calculateExtraCosts(tokens, pricing);
93
+ return {
94
+ input_cost: inputCost,
95
+ output_cost: outputCost,
96
+ total_cost: inputCost + outputCost + extraCosts.total,
97
+ detail: {
98
+ input: { tokens: tokens.input ?? 0, cost: inputCost },
99
+ output: { tokens: tokens.output ?? 0, cost: outputCost },
100
+ ...extraCosts.detail,
101
+ }
102
+ };
103
+ }
104
+ }
105
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/plugin/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { PluginErrorCode } from "@holokai/holo-types/plugin";
2
+ export { PluginErrorCode };
3
+ export declare class PluginError extends Error {
4
+ readonly code: string;
5
+ readonly plugin?: string | undefined;
6
+ readonly details?: unknown | undefined;
7
+ constructor(message: string, code: string, plugin?: string | undefined, details?: unknown | undefined);
8
+ }
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/plugin/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAC,eAAe,EAAC,CAAC;AAEzB,qBAAa,WAAY,SAAQ,KAAK;aAGd,IAAI,EAAE,MAAM;aACZ,MAAM,CAAC,EAAE,MAAM;aACf,OAAO,CAAC,EAAE,OAAO;gBAHjC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,OAAO,CAAC,EAAE,OAAO,YAAA;CAKxC"}
@@ -0,0 +1,15 @@
1
+ import { PluginErrorCode } from "@holokai/holo-types/plugin";
2
+ export { PluginErrorCode };
3
+ export class PluginError extends Error {
4
+ code;
5
+ plugin;
6
+ details;
7
+ constructor(message, code, plugin, details) {
8
+ super(message);
9
+ this.code = code;
10
+ this.plugin = plugin;
11
+ this.details = details;
12
+ this.name = 'PluginError';
13
+ }
14
+ }
15
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/plugin/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAC,eAAe,EAAC,CAAC;AAEzB,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGd;IACA;IACA;IAJpB,YACI,OAAe,EACC,IAAY,EACZ,MAAe,EACf,OAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAS;QACf,YAAO,GAAP,OAAO,CAAU;QAGjC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,CAAC;CACJ"}
@@ -0,0 +1,5 @@
1
+ export * from './base';
2
+ export * from './errors';
3
+ export * from './loader';
4
+ export * from './normalize';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './base';
2
+ export * from './errors';
3
+ export * from './loader';
4
+ export * from './normalize';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { IProviderPlugin, PluginContext } from '@holokai/holo-types/plugin';
2
+ export interface LoadPluginOptions {
3
+ context?: PluginContext;
4
+ skipInitialize?: boolean;
5
+ }
6
+ export declare function createMockPluginContext(): PluginContext;
7
+ export declare function discoverPlugins(nodeModulesDir?: string): Promise<string[]>;
8
+ export declare function familyFromPackage(packageName: string): string;
9
+ export declare function loadPlugin(family: string, opts?: LoadPluginOptions): Promise<IProviderPlugin>;
10
+ export declare function loadPluginFromPackage(packageName: string, opts?: LoadPluginOptions): Promise<IProviderPlugin>;
11
+ export declare function loadAllPlugins(nodeModulesDir?: string, opts?: LoadPluginOptions): Promise<Map<string, IProviderPlugin>>;
12
+ export declare function getLoadedPlugins(): Map<string, IProviderPlugin>;
13
+ export declare function clearPluginCache(): void;
14
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugin/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAK/E,MAAM,WAAW,iBAAiB;IAC9B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,uBAAuB,IAAI,aAAa,CAavD;AAED,wBAAsB,eAAe,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAWhF;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAMnG;AAED,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAcnH;AAED,wBAAsB,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAM7H;AAED,wBAAgB,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAE/D;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -0,0 +1,67 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+ const pluginCache = new Map();
4
+ export function createMockPluginContext() {
5
+ const noop = () => {
6
+ };
7
+ const noopLogger = {
8
+ level: 'silent',
9
+ info: noop,
10
+ warn: noop,
11
+ error: noop,
12
+ debug: noop,
13
+ verbose: noop,
14
+ child: () => noopLogger,
15
+ };
16
+ return { logger: noopLogger };
17
+ }
18
+ export async function discoverPlugins(nodeModulesDir) {
19
+ const scopePath = path.resolve(nodeModulesDir ?? 'node_modules', '@holokai');
20
+ try {
21
+ const entries = await fs.readdir(scopePath, { withFileTypes: true });
22
+ return entries
23
+ .filter(d => (d.isDirectory() || d.isSymbolicLink()) && d.name.startsWith('holo-provider-'))
24
+ .map(d => `@holokai/${d.name}`);
25
+ }
26
+ catch {
27
+ return [];
28
+ }
29
+ }
30
+ export function familyFromPackage(packageName) {
31
+ const match = packageName.match(/@holokai\/holo-provider-(.+)/);
32
+ return match?.[1] ?? packageName;
33
+ }
34
+ export async function loadPlugin(family, opts) {
35
+ const cached = pluginCache.get(family);
36
+ if (cached)
37
+ return cached;
38
+ const packageName = `@holokai/holo-provider-${family}`;
39
+ return loadPluginFromPackage(packageName, opts);
40
+ }
41
+ export async function loadPluginFromPackage(packageName, opts) {
42
+ const family = familyFromPackage(packageName);
43
+ const cached = pluginCache.get(family);
44
+ if (cached)
45
+ return cached;
46
+ const mod = await import(packageName);
47
+ const plugin = mod.default;
48
+ if (!opts?.skipInitialize && plugin.getState() !== 'READY') {
49
+ await plugin.initialize(opts?.context ?? createMockPluginContext());
50
+ }
51
+ pluginCache.set(family, plugin);
52
+ return plugin;
53
+ }
54
+ export async function loadAllPlugins(nodeModulesDir, opts) {
55
+ const packages = await discoverPlugins(nodeModulesDir);
56
+ for (const pkg of packages) {
57
+ await loadPluginFromPackage(pkg, opts);
58
+ }
59
+ return getLoadedPlugins();
60
+ }
61
+ export function getLoadedPlugins() {
62
+ return new Map(pluginCache);
63
+ }
64
+ export function clearPluginCache() {
65
+ pluginCache.clear();
66
+ }
67
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugin/loader.ts"],"names":[],"mappings":"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"}