@pinepaper.studio/mcp-server 1.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 (295) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +406 -0
  3. package/dist/__tests__/fixtures/index.d.ts +8 -0
  4. package/dist/__tests__/fixtures/index.d.ts.map +1 -0
  5. package/dist/__tests__/fixtures/index.js +8 -0
  6. package/dist/__tests__/fixtures/index.js.map +1 -0
  7. package/dist/__tests__/fixtures/mock-animations.d.ts +213 -0
  8. package/dist/__tests__/fixtures/mock-animations.d.ts.map +1 -0
  9. package/dist/__tests__/fixtures/mock-animations.js +96 -0
  10. package/dist/__tests__/fixtures/mock-animations.js.map +1 -0
  11. package/dist/__tests__/fixtures/mock-generators.d.ts +147 -0
  12. package/dist/__tests__/fixtures/mock-generators.d.ts.map +1 -0
  13. package/dist/__tests__/fixtures/mock-generators.js +90 -0
  14. package/dist/__tests__/fixtures/mock-generators.js.map +1 -0
  15. package/dist/__tests__/fixtures/mock-items.d.ts +157 -0
  16. package/dist/__tests__/fixtures/mock-items.d.ts.map +1 -0
  17. package/dist/__tests__/fixtures/mock-items.js +74 -0
  18. package/dist/__tests__/fixtures/mock-items.js.map +1 -0
  19. package/dist/__tests__/fixtures/mock-relations.d.ts +147 -0
  20. package/dist/__tests__/fixtures/mock-relations.d.ts.map +1 -0
  21. package/dist/__tests__/fixtures/mock-relations.js +90 -0
  22. package/dist/__tests__/fixtures/mock-relations.js.map +1 -0
  23. package/dist/browser/bridge.d.ts +127 -0
  24. package/dist/browser/bridge.d.ts.map +1 -0
  25. package/dist/browser/bridge.js +320 -0
  26. package/dist/browser/bridge.js.map +1 -0
  27. package/dist/browser/index.d.ts +8 -0
  28. package/dist/browser/index.d.ts.map +1 -0
  29. package/dist/browser/index.js +8 -0
  30. package/dist/browser/index.js.map +1 -0
  31. package/dist/browser/puppeteer-controller.d.ts +93 -0
  32. package/dist/browser/puppeteer-controller.d.ts.map +1 -0
  33. package/dist/browser/puppeteer-controller.js +280 -0
  34. package/dist/browser/puppeteer-controller.js.map +1 -0
  35. package/dist/cli.d.ts +8 -0
  36. package/dist/cli.d.ts.map +1 -0
  37. package/dist/cli.js +109 -0
  38. package/dist/cli.js.map +1 -0
  39. package/dist/i18n/i18n-manager.d.ts +88 -0
  40. package/dist/i18n/i18n-manager.d.ts.map +1 -0
  41. package/dist/i18n/i18n-manager.js +209 -0
  42. package/dist/i18n/i18n-manager.js.map +1 -0
  43. package/dist/i18n/index.d.ts +10 -0
  44. package/dist/i18n/index.d.ts.map +1 -0
  45. package/dist/i18n/index.js +10 -0
  46. package/dist/i18n/index.js.map +1 -0
  47. package/dist/i18n/locales/ar.d.ts +6 -0
  48. package/dist/i18n/locales/ar.d.ts.map +1 -0
  49. package/dist/i18n/locales/ar.js +106 -0
  50. package/dist/i18n/locales/ar.js.map +1 -0
  51. package/dist/i18n/locales/base.d.ts +17 -0
  52. package/dist/i18n/locales/base.d.ts.map +1 -0
  53. package/dist/i18n/locales/base.js +213 -0
  54. package/dist/i18n/locales/base.js.map +1 -0
  55. package/dist/i18n/locales/bn.d.ts +6 -0
  56. package/dist/i18n/locales/bn.d.ts.map +1 -0
  57. package/dist/i18n/locales/bn.js +106 -0
  58. package/dist/i18n/locales/bn.js.map +1 -0
  59. package/dist/i18n/locales/chp.d.ts +8 -0
  60. package/dist/i18n/locales/chp.d.ts.map +1 -0
  61. package/dist/i18n/locales/chp.js +11 -0
  62. package/dist/i18n/locales/chp.js.map +1 -0
  63. package/dist/i18n/locales/cr.d.ts +8 -0
  64. package/dist/i18n/locales/cr.d.ts.map +1 -0
  65. package/dist/i18n/locales/cr.js +11 -0
  66. package/dist/i18n/locales/cr.js.map +1 -0
  67. package/dist/i18n/locales/crg.d.ts +8 -0
  68. package/dist/i18n/locales/crg.d.ts.map +1 -0
  69. package/dist/i18n/locales/crg.js +11 -0
  70. package/dist/i18n/locales/crg.js.map +1 -0
  71. package/dist/i18n/locales/cs.d.ts +6 -0
  72. package/dist/i18n/locales/cs.d.ts.map +1 -0
  73. package/dist/i18n/locales/cs.js +106 -0
  74. package/dist/i18n/locales/cs.js.map +1 -0
  75. package/dist/i18n/locales/da.d.ts +6 -0
  76. package/dist/i18n/locales/da.d.ts.map +1 -0
  77. package/dist/i18n/locales/da.js +106 -0
  78. package/dist/i18n/locales/da.js.map +1 -0
  79. package/dist/i18n/locales/de.d.ts +6 -0
  80. package/dist/i18n/locales/de.d.ts.map +1 -0
  81. package/dist/i18n/locales/de.js +106 -0
  82. package/dist/i18n/locales/de.js.map +1 -0
  83. package/dist/i18n/locales/el.d.ts +6 -0
  84. package/dist/i18n/locales/el.d.ts.map +1 -0
  85. package/dist/i18n/locales/el.js +106 -0
  86. package/dist/i18n/locales/el.js.map +1 -0
  87. package/dist/i18n/locales/en.d.ts +6 -0
  88. package/dist/i18n/locales/en.d.ts.map +1 -0
  89. package/dist/i18n/locales/en.js +383 -0
  90. package/dist/i18n/locales/en.js.map +1 -0
  91. package/dist/i18n/locales/es.d.ts +6 -0
  92. package/dist/i18n/locales/es.d.ts.map +1 -0
  93. package/dist/i18n/locales/es.js +106 -0
  94. package/dist/i18n/locales/es.js.map +1 -0
  95. package/dist/i18n/locales/fa.d.ts +6 -0
  96. package/dist/i18n/locales/fa.d.ts.map +1 -0
  97. package/dist/i18n/locales/fa.js +106 -0
  98. package/dist/i18n/locales/fa.js.map +1 -0
  99. package/dist/i18n/locales/fi.d.ts +6 -0
  100. package/dist/i18n/locales/fi.d.ts.map +1 -0
  101. package/dist/i18n/locales/fi.js +106 -0
  102. package/dist/i18n/locales/fi.js.map +1 -0
  103. package/dist/i18n/locales/fil.d.ts +6 -0
  104. package/dist/i18n/locales/fil.d.ts.map +1 -0
  105. package/dist/i18n/locales/fil.js +383 -0
  106. package/dist/i18n/locales/fil.js.map +1 -0
  107. package/dist/i18n/locales/fr.d.ts +6 -0
  108. package/dist/i18n/locales/fr.d.ts.map +1 -0
  109. package/dist/i18n/locales/fr.js +106 -0
  110. package/dist/i18n/locales/fr.js.map +1 -0
  111. package/dist/i18n/locales/gu.d.ts +6 -0
  112. package/dist/i18n/locales/gu.d.ts.map +1 -0
  113. package/dist/i18n/locales/gu.js +106 -0
  114. package/dist/i18n/locales/gu.js.map +1 -0
  115. package/dist/i18n/locales/he.d.ts +6 -0
  116. package/dist/i18n/locales/he.d.ts.map +1 -0
  117. package/dist/i18n/locales/he.js +106 -0
  118. package/dist/i18n/locales/he.js.map +1 -0
  119. package/dist/i18n/locales/hi.d.ts +6 -0
  120. package/dist/i18n/locales/hi.d.ts.map +1 -0
  121. package/dist/i18n/locales/hi.js +106 -0
  122. package/dist/i18n/locales/hi.js.map +1 -0
  123. package/dist/i18n/locales/hu.d.ts +6 -0
  124. package/dist/i18n/locales/hu.d.ts.map +1 -0
  125. package/dist/i18n/locales/hu.js +106 -0
  126. package/dist/i18n/locales/hu.js.map +1 -0
  127. package/dist/i18n/locales/id.d.ts +6 -0
  128. package/dist/i18n/locales/id.d.ts.map +1 -0
  129. package/dist/i18n/locales/id.js +106 -0
  130. package/dist/i18n/locales/id.js.map +1 -0
  131. package/dist/i18n/locales/index.d.ts +110 -0
  132. package/dist/i18n/locales/index.d.ts.map +1 -0
  133. package/dist/i18n/locales/index.js +123 -0
  134. package/dist/i18n/locales/index.js.map +1 -0
  135. package/dist/i18n/locales/is.d.ts +6 -0
  136. package/dist/i18n/locales/is.d.ts.map +1 -0
  137. package/dist/i18n/locales/is.js +383 -0
  138. package/dist/i18n/locales/is.js.map +1 -0
  139. package/dist/i18n/locales/it.d.ts +6 -0
  140. package/dist/i18n/locales/it.d.ts.map +1 -0
  141. package/dist/i18n/locales/it.js +106 -0
  142. package/dist/i18n/locales/it.js.map +1 -0
  143. package/dist/i18n/locales/iu.d.ts +8 -0
  144. package/dist/i18n/locales/iu.d.ts.map +1 -0
  145. package/dist/i18n/locales/iu.js +11 -0
  146. package/dist/i18n/locales/iu.js.map +1 -0
  147. package/dist/i18n/locales/ja.d.ts +6 -0
  148. package/dist/i18n/locales/ja.d.ts.map +1 -0
  149. package/dist/i18n/locales/ja.js +106 -0
  150. package/dist/i18n/locales/ja.js.map +1 -0
  151. package/dist/i18n/locales/kn.d.ts +6 -0
  152. package/dist/i18n/locales/kn.d.ts.map +1 -0
  153. package/dist/i18n/locales/kn.js +106 -0
  154. package/dist/i18n/locales/kn.js.map +1 -0
  155. package/dist/i18n/locales/ko.d.ts +6 -0
  156. package/dist/i18n/locales/ko.d.ts.map +1 -0
  157. package/dist/i18n/locales/ko.js +106 -0
  158. package/dist/i18n/locales/ko.js.map +1 -0
  159. package/dist/i18n/locales/mic.d.ts +8 -0
  160. package/dist/i18n/locales/mic.d.ts.map +1 -0
  161. package/dist/i18n/locales/mic.js +11 -0
  162. package/dist/i18n/locales/mic.js.map +1 -0
  163. package/dist/i18n/locales/ml.d.ts +6 -0
  164. package/dist/i18n/locales/ml.d.ts.map +1 -0
  165. package/dist/i18n/locales/ml.js +106 -0
  166. package/dist/i18n/locales/ml.js.map +1 -0
  167. package/dist/i18n/locales/moh.d.ts +8 -0
  168. package/dist/i18n/locales/moh.d.ts.map +1 -0
  169. package/dist/i18n/locales/moh.js +11 -0
  170. package/dist/i18n/locales/moh.js.map +1 -0
  171. package/dist/i18n/locales/mr.d.ts +6 -0
  172. package/dist/i18n/locales/mr.d.ts.map +1 -0
  173. package/dist/i18n/locales/mr.js +106 -0
  174. package/dist/i18n/locales/mr.js.map +1 -0
  175. package/dist/i18n/locales/ms.d.ts +6 -0
  176. package/dist/i18n/locales/ms.d.ts.map +1 -0
  177. package/dist/i18n/locales/ms.js +106 -0
  178. package/dist/i18n/locales/ms.js.map +1 -0
  179. package/dist/i18n/locales/nl.d.ts +6 -0
  180. package/dist/i18n/locales/nl.d.ts.map +1 -0
  181. package/dist/i18n/locales/nl.js +106 -0
  182. package/dist/i18n/locales/nl.js.map +1 -0
  183. package/dist/i18n/locales/no.d.ts +6 -0
  184. package/dist/i18n/locales/no.d.ts.map +1 -0
  185. package/dist/i18n/locales/no.js +106 -0
  186. package/dist/i18n/locales/no.js.map +1 -0
  187. package/dist/i18n/locales/oj.d.ts +8 -0
  188. package/dist/i18n/locales/oj.d.ts.map +1 -0
  189. package/dist/i18n/locales/oj.js +11 -0
  190. package/dist/i18n/locales/oj.js.map +1 -0
  191. package/dist/i18n/locales/pa.d.ts +6 -0
  192. package/dist/i18n/locales/pa.d.ts.map +1 -0
  193. package/dist/i18n/locales/pa.js +106 -0
  194. package/dist/i18n/locales/pa.js.map +1 -0
  195. package/dist/i18n/locales/pl.d.ts +6 -0
  196. package/dist/i18n/locales/pl.d.ts.map +1 -0
  197. package/dist/i18n/locales/pl.js +106 -0
  198. package/dist/i18n/locales/pl.js.map +1 -0
  199. package/dist/i18n/locales/pt-BR.d.ts +6 -0
  200. package/dist/i18n/locales/pt-BR.d.ts.map +1 -0
  201. package/dist/i18n/locales/pt-BR.js +106 -0
  202. package/dist/i18n/locales/pt-BR.js.map +1 -0
  203. package/dist/i18n/locales/pt.d.ts +6 -0
  204. package/dist/i18n/locales/pt.d.ts.map +1 -0
  205. package/dist/i18n/locales/pt.js +106 -0
  206. package/dist/i18n/locales/pt.js.map +1 -0
  207. package/dist/i18n/locales/ro.d.ts +6 -0
  208. package/dist/i18n/locales/ro.d.ts.map +1 -0
  209. package/dist/i18n/locales/ro.js +106 -0
  210. package/dist/i18n/locales/ro.js.map +1 -0
  211. package/dist/i18n/locales/ru.d.ts +6 -0
  212. package/dist/i18n/locales/ru.d.ts.map +1 -0
  213. package/dist/i18n/locales/ru.js +106 -0
  214. package/dist/i18n/locales/ru.js.map +1 -0
  215. package/dist/i18n/locales/sv.d.ts +6 -0
  216. package/dist/i18n/locales/sv.d.ts.map +1 -0
  217. package/dist/i18n/locales/sv.js +106 -0
  218. package/dist/i18n/locales/sv.js.map +1 -0
  219. package/dist/i18n/locales/ta.d.ts +6 -0
  220. package/dist/i18n/locales/ta.d.ts.map +1 -0
  221. package/dist/i18n/locales/ta.js +106 -0
  222. package/dist/i18n/locales/ta.js.map +1 -0
  223. package/dist/i18n/locales/te.d.ts +6 -0
  224. package/dist/i18n/locales/te.d.ts.map +1 -0
  225. package/dist/i18n/locales/te.js +106 -0
  226. package/dist/i18n/locales/te.js.map +1 -0
  227. package/dist/i18n/locales/th.d.ts +6 -0
  228. package/dist/i18n/locales/th.d.ts.map +1 -0
  229. package/dist/i18n/locales/th.js +106 -0
  230. package/dist/i18n/locales/th.js.map +1 -0
  231. package/dist/i18n/locales/tl.d.ts +6 -0
  232. package/dist/i18n/locales/tl.d.ts.map +1 -0
  233. package/dist/i18n/locales/tl.js +106 -0
  234. package/dist/i18n/locales/tl.js.map +1 -0
  235. package/dist/i18n/locales/tr.d.ts +6 -0
  236. package/dist/i18n/locales/tr.d.ts.map +1 -0
  237. package/dist/i18n/locales/tr.js +106 -0
  238. package/dist/i18n/locales/tr.js.map +1 -0
  239. package/dist/i18n/locales/uk.d.ts +6 -0
  240. package/dist/i18n/locales/uk.d.ts.map +1 -0
  241. package/dist/i18n/locales/uk.js +106 -0
  242. package/dist/i18n/locales/uk.js.map +1 -0
  243. package/dist/i18n/locales/ur.d.ts +6 -0
  244. package/dist/i18n/locales/ur.d.ts.map +1 -0
  245. package/dist/i18n/locales/ur.js +383 -0
  246. package/dist/i18n/locales/ur.js.map +1 -0
  247. package/dist/i18n/locales/vi.d.ts +6 -0
  248. package/dist/i18n/locales/vi.d.ts.map +1 -0
  249. package/dist/i18n/locales/vi.js +106 -0
  250. package/dist/i18n/locales/vi.js.map +1 -0
  251. package/dist/i18n/locales/zh-CN.d.ts +6 -0
  252. package/dist/i18n/locales/zh-CN.d.ts.map +1 -0
  253. package/dist/i18n/locales/zh-CN.js +106 -0
  254. package/dist/i18n/locales/zh-CN.js.map +1 -0
  255. package/dist/i18n/locales/zh-TW.d.ts +6 -0
  256. package/dist/i18n/locales/zh-TW.d.ts.map +1 -0
  257. package/dist/i18n/locales/zh-TW.js +106 -0
  258. package/dist/i18n/locales/zh-TW.js.map +1 -0
  259. package/dist/i18n/types.d.ts +101 -0
  260. package/dist/i18n/types.d.ts.map +1 -0
  261. package/dist/i18n/types.js +65 -0
  262. package/dist/i18n/types.js.map +1 -0
  263. package/dist/index.d.ts +20 -0
  264. package/dist/index.d.ts.map +1 -0
  265. package/dist/index.js +472 -0
  266. package/dist/index.js.map +1 -0
  267. package/dist/server/index.d.ts +39 -0
  268. package/dist/server/index.d.ts.map +1 -0
  269. package/dist/server/index.js +89 -0
  270. package/dist/server/index.js.map +1 -0
  271. package/dist/tools/definitions.d.ts +26 -0
  272. package/dist/tools/definitions.d.ts.map +1 -0
  273. package/dist/tools/definitions.js +785 -0
  274. package/dist/tools/definitions.js.map +1 -0
  275. package/dist/tools/handlers.d.ts +19 -0
  276. package/dist/tools/handlers.d.ts.map +1 -0
  277. package/dist/tools/handlers.js +477 -0
  278. package/dist/tools/handlers.js.map +1 -0
  279. package/dist/tools/index.d.ts +3 -0
  280. package/dist/tools/index.d.ts.map +1 -0
  281. package/dist/tools/index.js +3 -0
  282. package/dist/tools/index.js.map +1 -0
  283. package/dist/types/code-generator.d.ts +97 -0
  284. package/dist/types/code-generator.d.ts.map +1 -0
  285. package/dist/types/code-generator.js +545 -0
  286. package/dist/types/code-generator.js.map +1 -0
  287. package/dist/types/index.d.ts +3 -0
  288. package/dist/types/index.d.ts.map +1 -0
  289. package/dist/types/index.js +3 -0
  290. package/dist/types/index.js.map +1 -0
  291. package/dist/types/schemas.d.ts +707 -0
  292. package/dist/types/schemas.d.ts.map +1 -0
  293. package/dist/types/schemas.js +341 -0
  294. package/dist/types/schemas.js.map +1 -0
  295. package/package.json +81 -0
@@ -0,0 +1,209 @@
1
+ /**
2
+ * i18n Manager
3
+ *
4
+ * Handles internationalization for the PinePaper MCP Server.
5
+ * Supports all 41 locales from PinePaper Studio.
6
+ */
7
+ import { DEFAULT_LOCALE, SUPPORTED_LOCALES, RTL_LOCALES, } from './types.js';
8
+ // =============================================================================
9
+ // I18N MANAGER
10
+ // =============================================================================
11
+ export class I18nManager {
12
+ currentLocale;
13
+ fallbackLocale;
14
+ translations = new Map();
15
+ loadedLocales = new Set();
16
+ constructor(config = {}) {
17
+ this.currentLocale = config.defaultLocale || DEFAULT_LOCALE;
18
+ this.fallbackLocale = config.fallbackLocale || DEFAULT_LOCALE;
19
+ }
20
+ /**
21
+ * Load translations for a locale
22
+ */
23
+ async loadLocale(locale) {
24
+ if (this.loadedLocales.has(locale)) {
25
+ return;
26
+ }
27
+ try {
28
+ // Dynamic import of locale file
29
+ const module = await import(`./locales/${locale}.js`);
30
+ this.translations.set(locale, module.default || module[locale]);
31
+ this.loadedLocales.add(locale);
32
+ }
33
+ catch (error) {
34
+ console.error(`Failed to load locale ${locale}:`, error);
35
+ // Fall back to English if locale not found
36
+ if (locale !== 'en') {
37
+ await this.loadLocale('en');
38
+ }
39
+ }
40
+ }
41
+ /**
42
+ * Set the current locale
43
+ */
44
+ async setLocale(locale) {
45
+ if (!SUPPORTED_LOCALES.includes(locale)) {
46
+ console.warn(`Unsupported locale: ${locale}, falling back to ${this.fallbackLocale}`);
47
+ locale = this.fallbackLocale;
48
+ }
49
+ await this.loadLocale(locale);
50
+ this.currentLocale = locale;
51
+ }
52
+ /**
53
+ * Get the current locale
54
+ */
55
+ getLocale() {
56
+ return this.currentLocale;
57
+ }
58
+ /**
59
+ * Check if current locale is RTL
60
+ */
61
+ isRTL() {
62
+ return RTL_LOCALES.includes(this.currentLocale);
63
+ }
64
+ /**
65
+ * Get translation for a key
66
+ */
67
+ t(key, params) {
68
+ const keys = key.split('.');
69
+ let translation = this.getNestedValue(this.translations.get(this.currentLocale), keys);
70
+ // Fallback to default locale
71
+ if (!translation && this.currentLocale !== this.fallbackLocale) {
72
+ translation = this.getNestedValue(this.translations.get(this.fallbackLocale), keys);
73
+ }
74
+ // Return key if no translation found
75
+ if (!translation) {
76
+ return key;
77
+ }
78
+ // Replace parameters
79
+ if (params) {
80
+ return this.interpolate(translation, params);
81
+ }
82
+ return translation;
83
+ }
84
+ /**
85
+ * Get a translation function bound to current locale
86
+ */
87
+ getTranslationFunction() {
88
+ return (key, params) => this.t(key, params);
89
+ }
90
+ /**
91
+ * Get all translations for current locale
92
+ */
93
+ getTranslations() {
94
+ return this.translations.get(this.currentLocale);
95
+ }
96
+ /**
97
+ * Get tool description in current locale
98
+ */
99
+ getToolDescription(toolName) {
100
+ return this.t(`tools.${toolName}.description`);
101
+ }
102
+ /**
103
+ * Get tool name in current locale
104
+ */
105
+ getToolName(toolName) {
106
+ return this.t(`tools.${toolName}.name`);
107
+ }
108
+ /**
109
+ * Get error message in current locale
110
+ */
111
+ getError(errorKey, params) {
112
+ return this.t(`errors.${errorKey}`, params);
113
+ }
114
+ /**
115
+ * Get success message in current locale
116
+ */
117
+ getSuccess(successKey, params) {
118
+ return this.t(`success.${successKey}`, params);
119
+ }
120
+ /**
121
+ * Detect locale from Accept-Language header
122
+ */
123
+ static detectLocale(acceptLanguage) {
124
+ if (!acceptLanguage) {
125
+ return DEFAULT_LOCALE;
126
+ }
127
+ // Parse Accept-Language header
128
+ const locales = acceptLanguage
129
+ .split(',')
130
+ .map((lang) => {
131
+ const [locale, quality = 'q=1'] = lang.trim().split(';');
132
+ const q = parseFloat(quality.replace('q=', '')) || 1;
133
+ return { locale: locale.trim(), quality: q };
134
+ })
135
+ .sort((a, b) => b.quality - a.quality);
136
+ // Find first supported locale
137
+ for (const { locale } of locales) {
138
+ // Exact match
139
+ if (SUPPORTED_LOCALES.includes(locale)) {
140
+ return locale;
141
+ }
142
+ // Language-only match (e.g., 'en-US' -> 'en')
143
+ const lang = locale.split('-')[0];
144
+ if (SUPPORTED_LOCALES.includes(lang)) {
145
+ return lang;
146
+ }
147
+ // Regional variant match (e.g., 'zh' -> 'zh-CN')
148
+ const variant = SUPPORTED_LOCALES.find((l) => l.startsWith(lang + '-'));
149
+ if (variant) {
150
+ return variant;
151
+ }
152
+ }
153
+ return DEFAULT_LOCALE;
154
+ }
155
+ /**
156
+ * Get nested value from object
157
+ */
158
+ getNestedValue(obj, keys) {
159
+ let current = obj;
160
+ for (const key of keys) {
161
+ if (current && typeof current === 'object' && key in current) {
162
+ current = current[key];
163
+ }
164
+ else {
165
+ return undefined;
166
+ }
167
+ }
168
+ return typeof current === 'string' ? current : undefined;
169
+ }
170
+ /**
171
+ * Interpolate parameters into translation string
172
+ */
173
+ interpolate(template, params) {
174
+ return template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
175
+ return key in params ? String(params[key]) : match;
176
+ });
177
+ }
178
+ }
179
+ // =============================================================================
180
+ // SINGLETON INSTANCE
181
+ // =============================================================================
182
+ let instance = null;
183
+ /**
184
+ * Get the singleton i18n manager instance
185
+ */
186
+ export function getI18n() {
187
+ if (!instance) {
188
+ instance = new I18nManager();
189
+ }
190
+ return instance;
191
+ }
192
+ /**
193
+ * Initialize i18n with a specific locale
194
+ */
195
+ export async function initI18n(locale) {
196
+ const i18n = getI18n();
197
+ await i18n.loadLocale('en'); // Always load English as fallback
198
+ if (locale && locale !== 'en') {
199
+ await i18n.setLocale(locale);
200
+ }
201
+ return i18n;
202
+ }
203
+ /**
204
+ * Shorthand translation function
205
+ */
206
+ export function t(key, params) {
207
+ return getI18n().t(key, params);
208
+ }
209
+ //# sourceMappingURL=i18n-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-manager.js","sourceRoot":"","sources":["../../src/i18n/i18n-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * i18n Module
3
+ *
4
+ * Internationalization support for PinePaper MCP Server.
5
+ * Supports 41 locales matching PinePaper Studio.
6
+ */
7
+ export * from './types.js';
8
+ export * from './i18n-manager.js';
9
+ export { localeMap } from './locales/index.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * i18n Module
3
+ *
4
+ * Internationalization support for PinePaper MCP Server.
5
+ * Supports 41 locales matching PinePaper Studio.
6
+ */
7
+ export * from './types.js';
8
+ export * from './i18n-manager.js';
9
+ export { localeMap } from './locales/index.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Arabic Translations (RTL)
3
+ */
4
+ export declare const ar: import("../types.js").TranslationKeys;
5
+ export default ar;
6
+ //# sourceMappingURL=ar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/ar.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,EAAE,uCA0Gb,CAAC;AAEH,eAAe,EAAE,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Arabic Translations (RTL)
3
+ */
4
+ import { createBaseTranslation } from './base.js';
5
+ export const ar = createBaseTranslation({
6
+ tools: {
7
+ pinepaper_create_item: { name: 'إنشاء عنصر', description: '' },
8
+ pinepaper_modify_item: { name: 'تعديل عنصر', description: '' },
9
+ pinepaper_delete_item: { name: 'حذف عنصر', description: '' },
10
+ pinepaper_add_relation: { name: 'إضافة علاقة', description: '' },
11
+ pinepaper_remove_relation: { name: 'إزالة علاقة', description: '' },
12
+ pinepaper_query_relations: { name: 'استعلام العلاقات', description: '' },
13
+ pinepaper_animate: { name: 'تحريك', description: '' },
14
+ pinepaper_keyframe_animate: { name: 'تحريك بالإطارات الرئيسية', description: '' },
15
+ pinepaper_play_timeline: { name: 'تشغيل الخط الزمني', description: '' },
16
+ pinepaper_execute_generator: { name: 'تنفيذ المولد', description: '' },
17
+ pinepaper_list_generators: { name: 'قائمة المولدات', description: '' },
18
+ pinepaper_apply_effect: { name: 'تطبيق تأثير', description: '' },
19
+ pinepaper_get_items: { name: 'الحصول على العناصر', description: '' },
20
+ pinepaper_get_relation_stats: { name: 'إحصائيات العلاقات', description: '' },
21
+ pinepaper_set_background_color: { name: 'تعيين لون الخلفية', description: '' },
22
+ pinepaper_set_canvas_size: { name: 'تعيين حجم اللوحة', description: '' },
23
+ pinepaper_export_svg: { name: 'تصدير SVG', description: '' },
24
+ pinepaper_export_training_data: { name: 'تصدير بيانات التدريب', description: '' },
25
+ },
26
+ errors: {
27
+ itemNotFound: 'العنصر غير موجود: {{itemId}}',
28
+ invalidRelation: 'علاقة غير صالحة: {{relationType}}',
29
+ invalidParams: 'معلمات غير صالحة: {{details}}',
30
+ generatorNotFound: 'المولد غير موجود: {{generatorName}}',
31
+ exportFailed: 'فشل التصدير: {{reason}}',
32
+ executionError: 'خطأ في التنفيذ: {{message}}',
33
+ validationError: 'خطأ في التحقق: {{message}}',
34
+ unknownTool: 'أداة غير معروفة: {{toolName}}',
35
+ apiKeyRequired: 'مطلوب مفتاح API',
36
+ apiKeyInvalid: 'مفتاح API غير صالح',
37
+ apiKeyExpired: 'انتهت صلاحية مفتاح API',
38
+ rateLimitExceeded: 'تم تجاوز حد الطلبات. حاول مرة أخرى بعد {{seconds}} ثانية.',
39
+ },
40
+ success: {
41
+ itemCreated: 'تم إنشاء {{itemType}} في الموضع ({{x}}, {{y}})',
42
+ itemModified: 'تم تعديل العنصر {{itemId}}',
43
+ itemDeleted: 'تم حذف العنصر {{itemId}}',
44
+ relationAdded: 'تمت إضافة علاقة {{relationType}}: {{sourceId}} ← {{targetId}}',
45
+ relationRemoved: 'تمت إزالة العلاقة بين {{sourceId}} و {{targetId}}',
46
+ animationApplied: 'تم تطبيق تحريك {{animationType}} على {{itemId}}',
47
+ generatorExecuted: 'تم تنفيذ المولد {{generatorName}}',
48
+ effectApplied: 'تم تطبيق تأثير {{effectType}} على {{itemId}}',
49
+ backgroundSet: 'تم تعيين لون الخلفية إلى {{color}}',
50
+ canvasSizeSet: 'تم تعيين حجم اللوحة إلى {{width}}×{{height}}',
51
+ exported: 'تم تصدير {{format}} بنجاح',
52
+ },
53
+ itemTypes: {
54
+ text: 'نص',
55
+ circle: 'دائرة',
56
+ star: 'نجمة',
57
+ rectangle: 'مستطيل',
58
+ triangle: 'مثلث',
59
+ polygon: 'مضلع',
60
+ ellipse: 'قطع ناقص',
61
+ path: 'مسار',
62
+ line: 'خط',
63
+ arc: 'قوس',
64
+ },
65
+ relationTypes: {
66
+ orbits: 'يدور',
67
+ follows: 'يتبع',
68
+ attached_to: 'مرتبط بـ',
69
+ maintains_distance: 'يحافظ على المسافة',
70
+ points_at: 'يشير إلى',
71
+ mirrors: 'يعكس',
72
+ parallax: 'المنظر',
73
+ bounds_to: 'محدود بـ',
74
+ },
75
+ animationTypes: {
76
+ pulse: 'نبض',
77
+ rotate: 'دوران',
78
+ bounce: 'ارتداد',
79
+ fade: 'تلاشي',
80
+ wobble: 'تذبذب',
81
+ slide: 'انزلاق',
82
+ typewriter: 'آلة كاتبة',
83
+ },
84
+ generators: {
85
+ drawSunburst: 'أشعة الشمس',
86
+ drawSunsetScene: 'مشهد الغروب',
87
+ drawGrid: 'شبكة',
88
+ drawStackedCircles: 'دوائر متراصة',
89
+ drawCircuit: 'لوحة دوائر',
90
+ drawWaves: 'موجات',
91
+ drawPattern: 'نمط',
92
+ },
93
+ common: {
94
+ at: 'في',
95
+ with: 'مع',
96
+ to: 'إلى',
97
+ from: 'من',
98
+ position: 'موضع',
99
+ radius: 'نصف القطر',
100
+ color: 'لون',
101
+ speed: 'سرعة',
102
+ duration: 'مدة',
103
+ },
104
+ });
105
+ export default ar;
106
+ //# sourceMappingURL=ar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ar.js","sourceRoot":"","sources":["../../../src/i18n/locales/ar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Base Translation Template
3
+ *
4
+ * This file contains the structure for all translations.
5
+ * Each locale file should follow this structure.
6
+ *
7
+ * Tool descriptions are kept in English for AI/LLM processing,
8
+ * but UI-facing strings (names, errors, success messages) are translated.
9
+ */
10
+ import { TranslationKeys } from '../types.js';
11
+ /**
12
+ * Creates a base translation with common tool descriptions.
13
+ * Tool descriptions remain in English for optimal AI understanding,
14
+ * while user-facing messages are translated.
15
+ */
16
+ export declare function createBaseTranslation(overrides: Partial<TranslationKeys>): TranslationKeys;
17
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CA6M1F"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Base Translation Template
3
+ *
4
+ * This file contains the structure for all translations.
5
+ * Each locale file should follow this structure.
6
+ *
7
+ * Tool descriptions are kept in English for AI/LLM processing,
8
+ * but UI-facing strings (names, errors, success messages) are translated.
9
+ */
10
+ /**
11
+ * Creates a base translation with common tool descriptions.
12
+ * Tool descriptions remain in English for optimal AI understanding,
13
+ * while user-facing messages are translated.
14
+ */
15
+ export function createBaseTranslation(overrides) {
16
+ const base = {
17
+ tools: {
18
+ // Tool descriptions are intentionally kept in English
19
+ // for optimal AI/LLM understanding and consistency
20
+ pinepaper_create_item: {
21
+ name: overrides.tools?.pinepaper_create_item?.name || 'Create Item',
22
+ description: `Create an item on the PinePaper canvas.
23
+
24
+ USE WHEN:
25
+ - User wants to add text, shapes, or graphics to the canvas
26
+ - Creating new visual elements (circles, stars, rectangles, etc.)
27
+ - Starting a new scene or composition
28
+
29
+ ITEM TYPES:
30
+ - text: Text content with font styling
31
+ - circle: Circular shape with radius
32
+ - star: Star shape with inner/outer radius
33
+ - rectangle: Rectangle with width/height
34
+ - triangle: Triangular shape
35
+ - polygon: Regular polygon with N sides
36
+ - ellipse: Oval shape
37
+ - path: Custom path with segments or SVG data
38
+ - line: Line between two points
39
+ - arc: Curved arc through three points`,
40
+ },
41
+ pinepaper_modify_item: {
42
+ name: overrides.tools?.pinepaper_modify_item?.name || 'Modify Item',
43
+ description: `Modify an existing item's properties.
44
+
45
+ USE WHEN:
46
+ - Changing color, size, position of an existing item
47
+ - Updating text content
48
+ - Adjusting styling properties`,
49
+ },
50
+ pinepaper_delete_item: {
51
+ name: overrides.tools?.pinepaper_delete_item?.name || 'Delete Item',
52
+ description: `Delete an item from the canvas.
53
+
54
+ USE WHEN:
55
+ - Removing unwanted items
56
+ - Clearing specific elements
57
+ - Cleaning up the scene`,
58
+ },
59
+ pinepaper_add_relation: {
60
+ name: overrides.tools?.pinepaper_add_relation?.name || 'Add Relation',
61
+ description: `Create a behavior relationship between two items. Relations are the PRIMARY way to add animation in PinePaper.
62
+
63
+ RELATION TYPES:
64
+ - orbits: Circular motion around target
65
+ - follows: Move toward target with smoothing
66
+ - attached_to: Fixed offset from target
67
+ - maintains_distance: Stay fixed distance from target
68
+ - points_at: Rotate to face target
69
+ - mirrors: Mirror position across axis
70
+ - parallax: Move relative by depth
71
+ - bounds_to: Stay within bounds`,
72
+ },
73
+ pinepaper_remove_relation: {
74
+ name: overrides.tools?.pinepaper_remove_relation?.name || 'Remove Relation',
75
+ description: 'Remove a relationship between items.',
76
+ },
77
+ pinepaper_query_relations: {
78
+ name: overrides.tools?.pinepaper_query_relations?.name || 'Query Relations',
79
+ description: 'Query relationships for an item.',
80
+ },
81
+ pinepaper_animate: {
82
+ name: overrides.tools?.pinepaper_animate?.name || 'Animate',
83
+ description: `Apply a simple LOOP animation to an item.
84
+
85
+ ANIMATION TYPES: pulse, rotate, bounce, fade, wobble, slide, typewriter`,
86
+ },
87
+ pinepaper_keyframe_animate: {
88
+ name: overrides.tools?.pinepaper_keyframe_animate?.name || 'Keyframe Animation',
89
+ description: 'Apply keyframe-based animation with precise timing.',
90
+ },
91
+ pinepaper_play_timeline: {
92
+ name: overrides.tools?.pinepaper_play_timeline?.name || 'Play Timeline',
93
+ description: 'Control keyframe animation playback.',
94
+ },
95
+ pinepaper_execute_generator: {
96
+ name: overrides.tools?.pinepaper_execute_generator?.name || 'Execute Generator',
97
+ description: 'Execute a background generator to create procedural patterns.',
98
+ },
99
+ pinepaper_list_generators: {
100
+ name: overrides.tools?.pinepaper_list_generators?.name || 'List Generators',
101
+ description: 'Get a list of all available background generators.',
102
+ },
103
+ pinepaper_apply_effect: {
104
+ name: overrides.tools?.pinepaper_apply_effect?.name || 'Apply Effect',
105
+ description: 'Apply a visual effect to an item.',
106
+ },
107
+ pinepaper_get_items: {
108
+ name: overrides.tools?.pinepaper_get_items?.name || 'Get Items',
109
+ description: 'Get all or filtered items from the canvas.',
110
+ },
111
+ pinepaper_get_relation_stats: {
112
+ name: overrides.tools?.pinepaper_get_relation_stats?.name || 'Get Relation Stats',
113
+ description: 'Get statistics about active relations in the scene.',
114
+ },
115
+ pinepaper_set_background_color: {
116
+ name: overrides.tools?.pinepaper_set_background_color?.name || 'Set Background Color',
117
+ description: 'Set the canvas background color.',
118
+ },
119
+ pinepaper_set_canvas_size: {
120
+ name: overrides.tools?.pinepaper_set_canvas_size?.name || 'Set Canvas Size',
121
+ description: 'Change the canvas dimensions.',
122
+ },
123
+ pinepaper_export_svg: {
124
+ name: overrides.tools?.pinepaper_export_svg?.name || 'Export SVG',
125
+ description: 'Export the scene as animated SVG.',
126
+ },
127
+ pinepaper_export_training_data: {
128
+ name: overrides.tools?.pinepaper_export_training_data?.name || 'Export Training Data',
129
+ description: 'Export relation data as training pairs for LLM fine-tuning.',
130
+ },
131
+ },
132
+ errors: {
133
+ itemNotFound: overrides.errors?.itemNotFound || 'Item not found: {{itemId}}',
134
+ invalidRelation: overrides.errors?.invalidRelation || 'Invalid relation: {{relationType}}',
135
+ invalidParams: overrides.errors?.invalidParams || 'Invalid parameters: {{details}}',
136
+ generatorNotFound: overrides.errors?.generatorNotFound || 'Generator not found: {{generatorName}}',
137
+ exportFailed: overrides.errors?.exportFailed || 'Export failed: {{reason}}',
138
+ executionError: overrides.errors?.executionError || 'Execution error: {{message}}',
139
+ validationError: overrides.errors?.validationError || 'Validation error: {{message}}',
140
+ unknownTool: overrides.errors?.unknownTool || 'Unknown tool: {{toolName}}',
141
+ apiKeyRequired: overrides.errors?.apiKeyRequired || 'API key required',
142
+ apiKeyInvalid: overrides.errors?.apiKeyInvalid || 'Invalid API key',
143
+ apiKeyExpired: overrides.errors?.apiKeyExpired || 'API key expired',
144
+ rateLimitExceeded: overrides.errors?.rateLimitExceeded || 'Rate limit exceeded. Try again in {{seconds}} seconds.',
145
+ },
146
+ success: {
147
+ itemCreated: overrides.success?.itemCreated || 'Created {{itemType}} at position ({{x}}, {{y}})',
148
+ itemModified: overrides.success?.itemModified || 'Modified item {{itemId}}',
149
+ itemDeleted: overrides.success?.itemDeleted || 'Deleted item {{itemId}}',
150
+ relationAdded: overrides.success?.relationAdded || 'Added {{relationType}} relation: {{sourceId}} → {{targetId}}',
151
+ relationRemoved: overrides.success?.relationRemoved || 'Removed relation between {{sourceId}} and {{targetId}}',
152
+ animationApplied: overrides.success?.animationApplied || 'Applied {{animationType}} animation to {{itemId}}',
153
+ generatorExecuted: overrides.success?.generatorExecuted || 'Executed {{generatorName}} generator',
154
+ effectApplied: overrides.success?.effectApplied || 'Applied {{effectType}} effect to {{itemId}}',
155
+ backgroundSet: overrides.success?.backgroundSet || 'Set background color to {{color}}',
156
+ canvasSizeSet: overrides.success?.canvasSizeSet || 'Set canvas size to {{width}}×{{height}}',
157
+ exported: overrides.success?.exported || 'Exported {{format}} successfully',
158
+ },
159
+ itemTypes: {
160
+ text: overrides.itemTypes?.text || 'Text',
161
+ circle: overrides.itemTypes?.circle || 'Circle',
162
+ star: overrides.itemTypes?.star || 'Star',
163
+ rectangle: overrides.itemTypes?.rectangle || 'Rectangle',
164
+ triangle: overrides.itemTypes?.triangle || 'Triangle',
165
+ polygon: overrides.itemTypes?.polygon || 'Polygon',
166
+ ellipse: overrides.itemTypes?.ellipse || 'Ellipse',
167
+ path: overrides.itemTypes?.path || 'Path',
168
+ line: overrides.itemTypes?.line || 'Line',
169
+ arc: overrides.itemTypes?.arc || 'Arc',
170
+ },
171
+ relationTypes: {
172
+ orbits: overrides.relationTypes?.orbits || 'Orbits',
173
+ follows: overrides.relationTypes?.follows || 'Follows',
174
+ attached_to: overrides.relationTypes?.attached_to || 'Attached to',
175
+ maintains_distance: overrides.relationTypes?.maintains_distance || 'Maintains distance',
176
+ points_at: overrides.relationTypes?.points_at || 'Points at',
177
+ mirrors: overrides.relationTypes?.mirrors || 'Mirrors',
178
+ parallax: overrides.relationTypes?.parallax || 'Parallax',
179
+ bounds_to: overrides.relationTypes?.bounds_to || 'Bounds to',
180
+ },
181
+ animationTypes: {
182
+ pulse: overrides.animationTypes?.pulse || 'Pulse',
183
+ rotate: overrides.animationTypes?.rotate || 'Rotate',
184
+ bounce: overrides.animationTypes?.bounce || 'Bounce',
185
+ fade: overrides.animationTypes?.fade || 'Fade',
186
+ wobble: overrides.animationTypes?.wobble || 'Wobble',
187
+ slide: overrides.animationTypes?.slide || 'Slide',
188
+ typewriter: overrides.animationTypes?.typewriter || 'Typewriter',
189
+ },
190
+ generators: {
191
+ drawSunburst: overrides.generators?.drawSunburst || 'Sunburst',
192
+ drawSunsetScene: overrides.generators?.drawSunsetScene || 'Sunset Scene',
193
+ drawGrid: overrides.generators?.drawGrid || 'Grid',
194
+ drawStackedCircles: overrides.generators?.drawStackedCircles || 'Stacked Circles',
195
+ drawCircuit: overrides.generators?.drawCircuit || 'Circuit Board',
196
+ drawWaves: overrides.generators?.drawWaves || 'Waves',
197
+ drawPattern: overrides.generators?.drawPattern || 'Pattern',
198
+ },
199
+ common: {
200
+ at: overrides.common?.at || 'at',
201
+ with: overrides.common?.with || 'with',
202
+ to: overrides.common?.to || 'to',
203
+ from: overrides.common?.from || 'from',
204
+ position: overrides.common?.position || 'position',
205
+ radius: overrides.common?.radius || 'radius',
206
+ color: overrides.common?.color || 'color',
207
+ speed: overrides.common?.speed || 'speed',
208
+ duration: overrides.common?.duration || 'duration',
209
+ },
210
+ };
211
+ return base;
212
+ }
213
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/i18n/locales/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Bengali Translations
3
+ */
4
+ export declare const bn: import("../types.js").TranslationKeys;
5
+ export default bn;
6
+ //# sourceMappingURL=bn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bn.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/bn.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,EAAE,uCA0Gb,CAAC;AAEH,eAAe,EAAE,CAAC"}