@plumbus/core 0.1.1 → 0.1.3

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 (146) hide show
  1. package/README.md +163 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/ai/ai-service.d.ts.map +1 -1
  4. package/dist/ai/ai-service.js +1 -0
  5. package/dist/ai/ai-service.js.map +1 -1
  6. package/dist/api/index.d.ts +1 -1
  7. package/dist/api/index.d.ts.map +1 -1
  8. package/dist/api/route-generator.d.ts +5 -1
  9. package/dist/api/route-generator.d.ts.map +1 -1
  10. package/dist/api/route-generator.js +2 -1
  11. package/dist/api/route-generator.js.map +1 -1
  12. package/dist/cli/__tests__/cli.test.js +90 -1
  13. package/dist/cli/__tests__/cli.test.js.map +1 -1
  14. package/dist/cli/__tests__/create.test.js +22 -0
  15. package/dist/cli/__tests__/create.test.js.map +1 -1
  16. package/dist/cli/__tests__/generate.test.js +219 -1
  17. package/dist/cli/__tests__/generate.test.js.map +1 -1
  18. package/dist/cli/__tests__/init.test.js +9 -0
  19. package/dist/cli/__tests__/init.test.js.map +1 -1
  20. package/dist/cli/__tests__/start.test.d.ts +2 -0
  21. package/dist/cli/__tests__/start.test.d.ts.map +1 -0
  22. package/dist/cli/__tests__/start.test.js +91 -0
  23. package/dist/cli/__tests__/start.test.js.map +1 -0
  24. package/dist/cli/__tests__/utils.test.js +70 -2
  25. package/dist/cli/__tests__/utils.test.js.map +1 -1
  26. package/dist/cli/cli.d.ts.map +1 -1
  27. package/dist/cli/cli.js +16 -1
  28. package/dist/cli/cli.js.map +1 -1
  29. package/dist/cli/commands/create.d.ts.map +1 -1
  30. package/dist/cli/commands/create.js +28 -2
  31. package/dist/cli/commands/create.js.map +1 -1
  32. package/dist/cli/commands/generate.d.ts +26 -1
  33. package/dist/cli/commands/generate.d.ts.map +1 -1
  34. package/dist/cli/commands/generate.js +195 -4
  35. package/dist/cli/commands/generate.js.map +1 -1
  36. package/dist/cli/commands/index.d.ts +3 -0
  37. package/dist/cli/commands/index.d.ts.map +1 -1
  38. package/dist/cli/commands/index.js +5 -0
  39. package/dist/cli/commands/index.js.map +1 -1
  40. package/dist/cli/commands/init.d.ts.map +1 -1
  41. package/dist/cli/commands/init.js +20 -21
  42. package/dist/cli/commands/init.js.map +1 -1
  43. package/dist/cli/commands/run.d.ts +3 -0
  44. package/dist/cli/commands/run.d.ts.map +1 -0
  45. package/dist/cli/commands/run.js +147 -0
  46. package/dist/cli/commands/run.js.map +1 -0
  47. package/dist/cli/commands/start.d.ts +25 -0
  48. package/dist/cli/commands/start.d.ts.map +1 -0
  49. package/dist/cli/commands/start.js +125 -0
  50. package/dist/cli/commands/start.js.map +1 -0
  51. package/dist/cli/commands/translation.d.ts +3 -0
  52. package/dist/cli/commands/translation.d.ts.map +1 -0
  53. package/dist/cli/commands/translation.js +277 -0
  54. package/dist/cli/commands/translation.js.map +1 -0
  55. package/dist/cli/commands/ui.d.ts +8 -2
  56. package/dist/cli/commands/ui.d.ts.map +1 -1
  57. package/dist/cli/commands/ui.js +13 -5
  58. package/dist/cli/commands/ui.js.map +1 -1
  59. package/dist/cli/discover.d.ts +2 -0
  60. package/dist/cli/discover.d.ts.map +1 -1
  61. package/dist/cli/discover.js +11 -1
  62. package/dist/cli/discover.js.map +1 -1
  63. package/dist/cli/index.d.ts +3 -3
  64. package/dist/cli/index.d.ts.map +1 -1
  65. package/dist/cli/index.js +3 -3
  66. package/dist/cli/index.js.map +1 -1
  67. package/dist/cli/templates/resources.d.ts +1 -0
  68. package/dist/cli/templates/resources.d.ts.map +1 -1
  69. package/dist/cli/templates/resources.js +16 -0
  70. package/dist/cli/templates/resources.js.map +1 -1
  71. package/dist/cli/utils.d.ts +15 -0
  72. package/dist/cli/utils.d.ts.map +1 -1
  73. package/dist/cli/utils.js +47 -0
  74. package/dist/cli/utils.js.map +1 -1
  75. package/dist/config/loader.d.ts +2 -0
  76. package/dist/config/loader.d.ts.map +1 -1
  77. package/dist/config/loader.js.map +1 -1
  78. package/dist/data/__tests__/registry.test.js +15 -0
  79. package/dist/data/__tests__/registry.test.js.map +1 -1
  80. package/dist/data/__tests__/repository.test.js +33 -0
  81. package/dist/data/__tests__/repository.test.js.map +1 -1
  82. package/dist/data/registry.d.ts +2 -0
  83. package/dist/data/registry.d.ts.map +1 -1
  84. package/dist/data/registry.js +1 -0
  85. package/dist/data/registry.js.map +1 -1
  86. package/dist/data/repository.d.ts +2 -0
  87. package/dist/data/repository.d.ts.map +1 -1
  88. package/dist/data/repository.js +3 -3
  89. package/dist/data/repository.js.map +1 -1
  90. package/dist/define/__tests__/defineTranslation.test.d.ts +2 -0
  91. package/dist/define/__tests__/defineTranslation.test.d.ts.map +1 -0
  92. package/dist/define/__tests__/defineTranslation.test.js +90 -0
  93. package/dist/define/__tests__/defineTranslation.test.js.map +1 -0
  94. package/dist/define/defineTranslation.d.ts +21 -0
  95. package/dist/define/defineTranslation.d.ts.map +1 -0
  96. package/dist/define/defineTranslation.js +67 -0
  97. package/dist/define/defineTranslation.js.map +1 -0
  98. package/dist/define/index.d.ts +1 -0
  99. package/dist/define/index.d.ts.map +1 -1
  100. package/dist/define/index.js +1 -0
  101. package/dist/define/index.js.map +1 -1
  102. package/dist/execution/context-factory.d.ts +2 -0
  103. package/dist/execution/context-factory.d.ts.map +1 -1
  104. package/dist/execution/context-factory.js +5 -0
  105. package/dist/execution/context-factory.js.map +1 -1
  106. package/dist/fields/index.d.ts +1 -0
  107. package/dist/fields/index.d.ts.map +1 -1
  108. package/dist/fields/index.js +1 -0
  109. package/dist/fields/index.js.map +1 -1
  110. package/dist/index.d.ts +3 -1
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +15 -6
  113. package/dist/index.js.map +1 -1
  114. package/dist/server/bootstrap.d.ts.map +1 -1
  115. package/dist/server/bootstrap.js +7 -2
  116. package/dist/server/bootstrap.js.map +1 -1
  117. package/dist/testing/context.js +2 -2
  118. package/dist/testing/context.js.map +1 -1
  119. package/dist/testing/index.d.ts +3 -3
  120. package/dist/testing/index.d.ts.map +1 -1
  121. package/dist/testing/index.js +1 -1
  122. package/dist/testing/index.js.map +1 -1
  123. package/dist/translations/__tests__/translation-resolver.test.d.ts +2 -0
  124. package/dist/translations/__tests__/translation-resolver.test.d.ts.map +1 -0
  125. package/dist/translations/__tests__/translation-resolver.test.js +140 -0
  126. package/dist/translations/__tests__/translation-resolver.test.js.map +1 -0
  127. package/dist/translations/index.d.ts +40 -0
  128. package/dist/translations/index.d.ts.map +1 -0
  129. package/dist/translations/index.js +144 -0
  130. package/dist/translations/index.js.map +1 -0
  131. package/dist/types/context.d.ts +13 -7
  132. package/dist/types/context.d.ts.map +1 -1
  133. package/dist/types/fields.d.ts +1 -0
  134. package/dist/types/fields.d.ts.map +1 -1
  135. package/dist/types/flow.d.ts +2 -0
  136. package/dist/types/flow.d.ts.map +1 -1
  137. package/dist/types/index.d.ts +1 -0
  138. package/dist/types/index.d.ts.map +1 -1
  139. package/dist/types/translation.d.ts +28 -0
  140. package/dist/types/translation.d.ts.map +1 -0
  141. package/dist/types/translation.js +6 -0
  142. package/dist/types/translation.js.map +1 -0
  143. package/instructions/cli.md +24 -0
  144. package/instructions/deployment.md +332 -0
  145. package/instructions/translations.md +78 -0
  146. package/package.json +2 -2
@@ -13,9 +13,9 @@ export { chromium, firefox, webkit } from 'playwright';
13
13
  export { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
14
14
  // ── Context & Mock Factories ──
15
15
  export { createInMemoryRepository, createTestAuth, createTestContext, createTestData, fixedTime, mockAI, mockAudit, mockEvents, mockFlows, mockLogger, } from './context.js';
16
- export { buildEntityFieldMap, validateRecord } from './field-validation.js';
17
16
  // ── E2E / Browser Test Utilities ──
18
17
  export { createE2EServer, createTestBearerHeader } from './e2e.js';
18
+ export { buildEntityFieldMap, validateRecord } from './field-validation.js';
19
19
  // ── Governance Test Helpers ──
20
20
  export { assertGovernanceSignals, assertMaxSeverity, assertNoGovernanceSignal, assertOverridesApplied, assertPolicyCompliance, assertPolicyNonCompliance, emptyInventory, evaluateGovernance, } from './governance.js';
21
21
  // ── Capability Test Runner ──
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,oFAAoF;AACpF,wFAAwF;AACxF,+DAA+D;AAC/D,EAAE;AACF,kFAAkF;AAGlF,6BAA6B;AAC7B,mFAAmF;AACnF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACvD,yBAAyB;AACzB,+EAA+E;AAC/E,4EAA4E;AAC5E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAU9F,iCAAiC;AACjC,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,MAAM,EACN,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5E,qCAAqC;AACrC,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEnE,gCAAgC;AAChC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,cAAc,EACd,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAEzB,+BAA+B;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD,mCAAmC;AACnC,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,8BAA8B;AAC9B,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAChB,MAAM,eAAe,CAAC;AAKvB,uBAAuB;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,oFAAoF;AACpF,wFAAwF;AACxF,+DAA+D;AAC/D,EAAE;AACF,kFAAkF;AAGlF,6BAA6B;AAC7B,mFAAmF;AACnF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACvD,yBAAyB;AACzB,+EAA+E;AAC/E,4EAA4E;AAC5E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAU9F,iCAAiC;AACjC,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,MAAM,EACN,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,qCAAqC;AACrC,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5E,gCAAgC;AAChC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,cAAc,EACd,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAEzB,+BAA+B;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD,mCAAmC;AACnC,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,8BAA8B;AAC9B,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAChB,MAAM,eAAe,CAAC;AAKvB,uBAAuB;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=translation-resolver.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translation-resolver.test.d.ts","sourceRoot":"","sources":["../../../src/translations/__tests__/translation-resolver.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,140 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { defineTranslation } from '../../define/defineTranslation.js';
3
+ import { createTranslationResolver, createTranslationService, TranslationRegistry, } from '../index.js';
4
+ const commonTranslation = defineTranslation({
5
+ name: 'common',
6
+ defaultLocale: 'en',
7
+ locales: ['en', 'he'],
8
+ messages: {
9
+ en: {
10
+ greeting: 'Hello {name}',
11
+ farewell: 'Goodbye',
12
+ items: '{count, plural, one {# item} other {# items}}',
13
+ itemsWithZero: '{count, plural, zero {No items} one {# item} other {# items}}',
14
+ role: '{gender, select, male {He is an admin} female {She is an admin} other {They are an admin}}',
15
+ },
16
+ he: {
17
+ greeting: 'שלום {name}',
18
+ farewell: 'להתראות',
19
+ items: '{count, plural, one {פריט #} two {# פריטים} other {# פריטים}}',
20
+ itemsWithZero: '{count, plural, zero {אין פריטים} one {פריט #} other {# פריטים}}',
21
+ role: '{gender, select, male {הוא מנהל} female {היא מנהלת} other {מנהל/ת}}',
22
+ },
23
+ },
24
+ });
25
+ const errorsTranslation = defineTranslation({
26
+ name: 'errors',
27
+ defaultLocale: 'en',
28
+ locales: ['en', 'he'],
29
+ messages: {
30
+ en: {
31
+ notFound: 'Not found',
32
+ forbidden: 'Access denied',
33
+ },
34
+ he: {
35
+ notFound: 'לא נמצא',
36
+ forbidden: 'הגישה נדחתה',
37
+ },
38
+ },
39
+ });
40
+ describe('TranslationRegistry', () => {
41
+ it('resolves simple key in requested locale', () => {
42
+ const registry = new TranslationRegistry();
43
+ registry.register(commonTranslation);
44
+ expect(registry.t('he', 'common.farewell')).toBe('להתראות');
45
+ });
46
+ it('resolves key with interpolation', () => {
47
+ const registry = new TranslationRegistry();
48
+ registry.register(commonTranslation);
49
+ expect(registry.t('en', 'common.greeting', { name: 'World' })).toBe('Hello World');
50
+ expect(registry.t('he', 'common.greeting', { name: 'עולם' })).toBe('שלום עולם');
51
+ });
52
+ it('resolves plural — one', () => {
53
+ const registry = new TranslationRegistry();
54
+ registry.register(commonTranslation);
55
+ expect(registry.t('en', 'common.items', { count: 1 })).toBe('1 item');
56
+ });
57
+ it('resolves plural — other', () => {
58
+ const registry = new TranslationRegistry();
59
+ registry.register(commonTranslation);
60
+ expect(registry.t('en', 'common.items', { count: 5 })).toBe('5 items');
61
+ });
62
+ it('resolves plural — zero', () => {
63
+ const registry = new TranslationRegistry();
64
+ registry.register(commonTranslation);
65
+ expect(registry.t('en', 'common.itemsWithZero', { count: 0 })).toBe('No items');
66
+ });
67
+ it('resolves plural — Hebrew dual', () => {
68
+ const registry = new TranslationRegistry();
69
+ registry.register(commonTranslation);
70
+ expect(registry.t('he', 'common.items', { count: 2 })).toBe('2 פריטים');
71
+ });
72
+ it('resolves select', () => {
73
+ const registry = new TranslationRegistry();
74
+ registry.register(commonTranslation);
75
+ expect(registry.t('en', 'common.role', { gender: 'male' })).toBe('He is an admin');
76
+ expect(registry.t('en', 'common.role', { gender: 'female' })).toBe('She is an admin');
77
+ expect(registry.t('en', 'common.role', { gender: 'unknown' })).toBe('They are an admin');
78
+ });
79
+ it('falls back to default locale when requested locale is missing', () => {
80
+ const registry = new TranslationRegistry();
81
+ registry.register(commonTranslation);
82
+ expect(registry.t('fr', 'common.farewell')).toBe('Goodbye');
83
+ });
84
+ it('returns key as-is when namespace is unknown', () => {
85
+ const registry = new TranslationRegistry();
86
+ registry.register(commonTranslation);
87
+ expect(registry.t('en', 'unknown.key')).toBe('unknown.key');
88
+ });
89
+ it('returns key as-is when key has no namespace', () => {
90
+ const registry = new TranslationRegistry();
91
+ registry.register(commonTranslation);
92
+ expect(registry.t('en', 'plainkey')).toBe('plainkey');
93
+ });
94
+ it('registers multiple namespaces', () => {
95
+ const registry = new TranslationRegistry();
96
+ registry.registerAll([commonTranslation, errorsTranslation]);
97
+ expect(registry.t('en', 'common.farewell')).toBe('Goodbye');
98
+ expect(registry.t('he', 'errors.notFound')).toBe('לא נמצא');
99
+ });
100
+ it('getNamespaces returns all registered names', () => {
101
+ const registry = new TranslationRegistry();
102
+ registry.registerAll([commonTranslation, errorsTranslation]);
103
+ expect(registry.getNamespaces().sort()).toEqual(['common', 'errors']);
104
+ });
105
+ it('getDefinition returns specific definition', () => {
106
+ const registry = new TranslationRegistry();
107
+ registry.register(commonTranslation);
108
+ expect(registry.getDefinition('common')?.name).toBe('common');
109
+ expect(registry.getDefinition('unknown')).toBeUndefined();
110
+ });
111
+ it('getAllDefinitions returns all', () => {
112
+ const registry = new TranslationRegistry();
113
+ registry.registerAll([commonTranslation, errorsTranslation]);
114
+ expect(registry.getAllDefinitions()).toHaveLength(2);
115
+ });
116
+ });
117
+ describe('createTranslationResolver', () => {
118
+ it('creates a resolver from definitions', () => {
119
+ const resolver = createTranslationResolver([commonTranslation, errorsTranslation]);
120
+ expect(resolver.t('en', 'common.farewell')).toBe('Goodbye');
121
+ expect(resolver.t('he', 'errors.forbidden')).toBe('הגישה נדחתה');
122
+ });
123
+ });
124
+ describe('createTranslationService', () => {
125
+ it('creates a locale-bound service', () => {
126
+ const registry = new TranslationRegistry();
127
+ registry.registerAll([commonTranslation, errorsTranslation]);
128
+ const service = createTranslationService(registry, 'he');
129
+ expect(service.locale).toBe('he');
130
+ expect(service.t('common.farewell')).toBe('להתראות');
131
+ expect(service.t('errors.notFound')).toBe('לא נמצא');
132
+ });
133
+ it('locale-bound service still uses interpolation', () => {
134
+ const registry = new TranslationRegistry();
135
+ registry.register(commonTranslation);
136
+ const service = createTranslationService(registry, 'en');
137
+ expect(service.t('common.greeting', { name: 'Alice' })).toBe('Hello Alice');
138
+ });
139
+ });
140
+ //# sourceMappingURL=translation-resolver.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translation-resolver.test.js","sourceRoot":"","sources":["../../../src/translations/__tests__/translation-resolver.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { TranslationDefinition, TranslationService } from '../types/translation.js';
2
+ /**
3
+ * Registry that holds multiple translation definitions (namespaces)
4
+ * and resolves keys at runtime.
5
+ */
6
+ export declare class TranslationRegistry {
7
+ private readonly namespaces;
8
+ /** Register a translation definition (namespace) */
9
+ register(definition: TranslationDefinition): void;
10
+ /** Register multiple definitions at once */
11
+ registerAll(definitions: TranslationDefinition[]): void;
12
+ /**
13
+ * Resolve a translated string.
14
+ *
15
+ * @param locale - Target locale (e.g. "he")
16
+ * @param key - Dot-namespaced key: "namespace.messageKey" (e.g. "errors.projectNotFound")
17
+ * or plain key if namespace is provided separately
18
+ * @param params - ICU interpolation params
19
+ */
20
+ t(locale: string, key: string, params?: Record<string, string | number>): string;
21
+ /** Get all registered namespace names */
22
+ getNamespaces(): string[];
23
+ /** Get a specific definition by name */
24
+ getDefinition(name: string): TranslationDefinition | undefined;
25
+ /** Get all registered definitions */
26
+ getAllDefinitions(): TranslationDefinition[];
27
+ }
28
+ /**
29
+ * Create a translation resolver from a set of translation definitions.
30
+ * Returns an object with a `t(locale, key, params?)` method.
31
+ */
32
+ export declare function createTranslationResolver(definitions: TranslationDefinition[]): {
33
+ t(locale: string, key: string, params?: Record<string, string | number>): string;
34
+ };
35
+ /**
36
+ * Create a locale-bound TranslationService from a registry.
37
+ * Used to inject into ExecutionContext — the locale is resolved once per request.
38
+ */
39
+ export declare function createTranslationService(registry: TranslationRegistry, locale: string): TranslationService;
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AA2DzF;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4C;IAEvE,oDAAoD;IACpD,QAAQ,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI;IAIjD,4CAA4C;IAC5C,WAAW,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,IAAI;IAMvD;;;;;;;OAOG;IACH,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM;IAkChF,yCAAyC;IACzC,aAAa,IAAI,MAAM,EAAE;IAIzB,wCAAwC;IACxC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAI9D,qCAAqC;IACrC,iBAAiB,IAAI,qBAAqB,EAAE;CAG7C;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG;IAC/E,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;CAClF,CAMA;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,MAAM,GACb,kBAAkB,CAKpB"}
@@ -0,0 +1,144 @@
1
+ // ── Translations Module ──
2
+ // Server-side translation registry and resolver.
3
+ // Provides ICU MessageFormat interpolation for backend use
4
+ // (capability error messages, flow status, etc.)
5
+ //
6
+ // Key exports: TranslationRegistry, createTranslationResolver
7
+ /**
8
+ * Lightweight ICU MessageFormat interpolation.
9
+ * Handles:
10
+ * - Simple placeholders: {name} → value
11
+ * - Plural rules: {count, plural, one {# item} other {# items}}
12
+ * - Select: {gender, select, male {He} female {She} other {They}}
13
+ *
14
+ * The `#` symbol inside plural branches is replaced with the numeric value.
15
+ */
16
+ function interpolateICU(template, params) {
17
+ // Handle plural / select blocks first
18
+ let result = template.replace(/\{(\w+),\s*(plural|select),\s*((?:[^{}]|\{[^{}]*\})*)\}/g, (_match, paramName, type, branches) => {
19
+ const value = params[paramName];
20
+ if (value === undefined)
21
+ return _match;
22
+ // Parse branches: "one {# item} other {# items}" → { one: "# item", other: "# items" }
23
+ const branchMap = {};
24
+ const branchRegex = /(\w+)\s*\{([^}]*)\}/g;
25
+ for (const branchMatch of branches.matchAll(branchRegex)) {
26
+ const branchKey = branchMatch[1];
27
+ const branchValue = branchMatch[2];
28
+ if (branchKey && branchValue !== undefined) {
29
+ branchMap[branchKey] = branchValue;
30
+ }
31
+ }
32
+ if (type === 'plural') {
33
+ const num = typeof value === 'number' ? value : Number.parseInt(String(value), 10);
34
+ // Determine plural category (simplified — covers English / Hebrew basics)
35
+ let category;
36
+ if (num === 0)
37
+ category = 'zero';
38
+ else if (num === 1)
39
+ category = 'one';
40
+ else if (num === 2)
41
+ category = 'two';
42
+ else
43
+ category = 'other';
44
+ const branch = branchMap[`=${num}`] ?? branchMap[category] ?? branchMap.other ?? String(num);
45
+ return branch.replace(/#/g, String(num));
46
+ }
47
+ // select
48
+ const branch = branchMap[String(value)] ?? branchMap.other ?? String(value);
49
+ return branch;
50
+ });
51
+ // Handle simple {param} placeholders
52
+ result = result.replace(/\{(\w+)\}/g, (_match, paramName) => {
53
+ const value = params[paramName];
54
+ return value !== undefined ? String(value) : _match;
55
+ });
56
+ return result;
57
+ }
58
+ /**
59
+ * Registry that holds multiple translation definitions (namespaces)
60
+ * and resolves keys at runtime.
61
+ */
62
+ export class TranslationRegistry {
63
+ namespaces = new Map();
64
+ /** Register a translation definition (namespace) */
65
+ register(definition) {
66
+ this.namespaces.set(definition.name, definition);
67
+ }
68
+ /** Register multiple definitions at once */
69
+ registerAll(definitions) {
70
+ for (const def of definitions) {
71
+ this.register(def);
72
+ }
73
+ }
74
+ /**
75
+ * Resolve a translated string.
76
+ *
77
+ * @param locale - Target locale (e.g. "he")
78
+ * @param key - Dot-namespaced key: "namespace.messageKey" (e.g. "errors.projectNotFound")
79
+ * or plain key if namespace is provided separately
80
+ * @param params - ICU interpolation params
81
+ */
82
+ t(locale, key, params) {
83
+ const dotIndex = key.indexOf('.');
84
+ if (dotIndex === -1) {
85
+ return key; // No namespace — return key as-is
86
+ }
87
+ const namespace = key.substring(0, dotIndex);
88
+ const messageKey = key.substring(dotIndex + 1);
89
+ const definition = this.namespaces.get(namespace);
90
+ if (!definition) {
91
+ return key; // Unknown namespace — return key as-is
92
+ }
93
+ // Try requested locale, fall back to default locale
94
+ const messages = definition.messages[locale] ?? definition.messages[definition.defaultLocale];
95
+ if (!messages) {
96
+ return key;
97
+ }
98
+ const template = messages[messageKey];
99
+ if (template === undefined) {
100
+ // Try default locale as fallback
101
+ const fallback = definition.messages[definition.defaultLocale];
102
+ const fallbackTemplate = fallback?.[messageKey];
103
+ if (fallbackTemplate === undefined) {
104
+ return key; // Key not found anywhere — return key
105
+ }
106
+ return params ? interpolateICU(fallbackTemplate, params) : fallbackTemplate;
107
+ }
108
+ return params ? interpolateICU(template, params) : template;
109
+ }
110
+ /** Get all registered namespace names */
111
+ getNamespaces() {
112
+ return Array.from(this.namespaces.keys());
113
+ }
114
+ /** Get a specific definition by name */
115
+ getDefinition(name) {
116
+ return this.namespaces.get(name);
117
+ }
118
+ /** Get all registered definitions */
119
+ getAllDefinitions() {
120
+ return Array.from(this.namespaces.values());
121
+ }
122
+ }
123
+ /**
124
+ * Create a translation resolver from a set of translation definitions.
125
+ * Returns an object with a `t(locale, key, params?)` method.
126
+ */
127
+ export function createTranslationResolver(definitions) {
128
+ const registry = new TranslationRegistry();
129
+ registry.registerAll(definitions);
130
+ return {
131
+ t: (locale, key, params) => registry.t(locale, key, params),
132
+ };
133
+ }
134
+ /**
135
+ * Create a locale-bound TranslationService from a registry.
136
+ * Used to inject into ExecutionContext — the locale is resolved once per request.
137
+ */
138
+ export function createTranslationService(registry, locale) {
139
+ return {
140
+ locale,
141
+ t: (key, params) => registry.t(locale, key, params),
142
+ };
143
+ }
144
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"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"}
@@ -2,14 +2,17 @@ import type { z } from 'zod';
2
2
  import type { AuditService } from './audit.js';
3
3
  import type { ErrorService } from './errors.js';
4
4
  import type { AuthContext } from './security.js';
5
- export interface Repository<T = unknown> {
5
+ import type { TranslationService } from './translation.js';
6
+ export interface Repository<T = Record<string, any>> {
6
7
  findById(id: string): Promise<T | null>;
7
- create(data: Partial<T>): Promise<T>;
8
- update(id: string, updates: Partial<T>): Promise<T>;
8
+ create(data: Record<string, any>): Promise<T>;
9
+ update(id: string, updates: Record<string, any>): Promise<T>;
9
10
  delete(id: string): Promise<void>;
10
- findMany(query?: Record<string, unknown>): Promise<T[]>;
11
+ findMany(query?: Record<string, any>): Promise<T[]>;
12
+ }
13
+ export interface DataService {
14
+ [entity: string]: Repository;
11
15
  }
12
- export type DataService = Record<string, Repository>;
13
16
  export interface EventService {
14
17
  emit(eventName: string, payload: unknown): Promise<void>;
15
18
  }
@@ -34,11 +37,13 @@ export interface AIService {
34
37
  generate(config: {
35
38
  prompt: string;
36
39
  input: Record<string, unknown>;
37
- }): Promise<unknown>;
40
+ }): Promise<Record<string, any>>;
38
41
  extract(config: {
39
42
  schema: z.ZodTypeAny;
40
43
  text: string;
41
- }): Promise<unknown>;
44
+ prompt?: string;
45
+ input?: Record<string, unknown>;
46
+ }): Promise<Record<string, any>>;
42
47
  classify(config: {
43
48
  labels: string[];
44
49
  text: string;
@@ -83,6 +88,7 @@ export interface ExecutionContext {
83
88
  time: TimeService;
84
89
  config: ConfigService;
85
90
  security: SecurityService;
91
+ translations: TranslationService;
86
92
  state?: unknown;
87
93
  step?: string;
88
94
  flowId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/types/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/types/context.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { FieldClassification, RelationType } from './enums.js';
2
2
  export interface BaseFieldOptions {
3
3
  required?: boolean;
4
+ optional?: boolean;
4
5
  default?: unknown;
5
6
  unique?: boolean;
6
7
  nullable?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/types/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,qBAAqB,GACrB,qBAAqB,GACrB,sBAAsB,GACtB,sBAAsB,GACtB,wBAAwB,GACxB,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,CAAC"}
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/types/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,qBAAqB,GACrB,qBAAqB,GACrB,sBAAsB,GACtB,sBAAsB,GACtB,wBAAwB,GACxB,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,CAAC"}
@@ -5,6 +5,8 @@ export interface BaseFlowStep {
5
5
  }
6
6
  export interface CapabilityStep extends BaseFlowStep {
7
7
  type: typeof FlowStepType.Capability;
8
+ capability?: string;
9
+ input?: Record<string, unknown>;
8
10
  }
9
11
  export interface ConditionalStep extends BaseFlowStep {
10
12
  type: typeof FlowStepType.Conditional;
@@ -1 +1 @@
1
- {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/types/flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGhE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,IAAI,EAAE,OAAO,YAAY,CAAC,UAAU,CAAC;CACtC;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,IAAI,EAAE,OAAO,YAAY,CAAC,WAAW,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAS,SAAQ,YAAY;IAC5C,IAAI,EAAE,OAAO,YAAY,CAAC,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,IAAI,EAAE,OAAO,YAAY,CAAC,KAAK,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,IAAI,EAAE,OAAO,YAAY,CAAC,QAAQ,CAAC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,IAAI,EAAE,OAAO,YAAY,CAAC,SAAS,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,GAChB,cAAc,GACd,eAAe,GACf,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,aAAa,CAAC;AAGlB,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,eAAe,CAAC;CAC1B;AAGD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,WAAW,cAAc,CAC7B,MAAM,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,EAC1C,MAAM,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;IAE1C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,EAAE,CAAC;IAElB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB"}
1
+ {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/types/flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGhE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,IAAI,EAAE,OAAO,YAAY,CAAC,UAAU,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,IAAI,EAAE,OAAO,YAAY,CAAC,WAAW,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAS,SAAQ,YAAY;IAC5C,IAAI,EAAE,OAAO,YAAY,CAAC,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,IAAI,EAAE,OAAO,YAAY,CAAC,KAAK,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,IAAI,EAAE,OAAO,YAAY,CAAC,QAAQ,CAAC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,IAAI,EAAE,OAAO,YAAY,CAAC,SAAS,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,GAChB,cAAc,GACd,eAAe,GACf,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,aAAa,CAAC;AAGlB,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,eAAe,CAAC;CAC1B;AAGD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,WAAW,cAAc,CAC7B,MAAM,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,EAC1C,MAAM,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;IAE1C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,EAAE,CAAC;IAElB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB"}
@@ -11,4 +11,5 @@ export type { CapabilityStep, ConditionalStep, DelayStep, EventEmitStep, FlowDef
11
11
  export type { GovernanceOverride, GovernanceSignal, PolicyReport, RuleEvaluation, } from './governance.js';
12
12
  export type { ModelConfig, PromptDefinition } from './prompt.js';
13
13
  export type { AccessPolicy, AuthContext } from './security.js';
14
+ export type { MessageCatalog, TranslationDefinition, TranslationResolver, TranslationService, } from './translation.js';
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAMA,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EACL,eAAe,EACf,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,cAAc,EACd,eAAe,EACf,SAAS,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,QAAQ,GACT,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAMA,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EACL,eAAe,EACf,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,cAAc,EACd,eAAe,EACf,SAAS,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,QAAQ,GACT,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE/D,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /** A record of message keys to ICU MessageFormat strings for one locale */
2
+ export type MessageCatalog = Record<string, string>;
3
+ /** Translation definition — a named, frozen i18n message catalog */
4
+ export interface TranslationDefinition {
5
+ /** Namespace identifier (e.g. "common", "errors", "auth") */
6
+ name: string;
7
+ /** Default fallback locale */
8
+ defaultLocale: string;
9
+ /** All supported locales — must include defaultLocale */
10
+ locales: string[];
11
+ /** Messages keyed by locale, then by message key */
12
+ messages: Record<string, MessageCatalog>;
13
+ }
14
+ /** Resolver function: look up a translated string by key */
15
+ export interface TranslationResolver {
16
+ /**
17
+ * Resolve a translated message.
18
+ * @param key - Dot-namespaced key, e.g. "errors.projectNotFound"
19
+ * @param params - Interpolation values for ICU placeholders
20
+ */
21
+ t(key: string, params?: Record<string, string | number>): string;
22
+ }
23
+ /** Service that provides translation resolution for a specific locale */
24
+ export interface TranslationService extends TranslationResolver {
25
+ /** The currently active locale */
26
+ locale: string;
27
+ }
28
+ //# sourceMappingURL=translation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translation.d.ts","sourceRoot":"","sources":["../../src/types/translation.ts"],"names":[],"mappings":"AAKA,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpD,oEAAoE;AACpE,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC1C;AAED,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;CAClE;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,6 @@
1
+ // ── Translation Definition ──
2
+ // Type-safe i18n message catalogs with ICU MessageFormat.
3
+ // Messages use ICU syntax: "greeting": "Hello {name}",
4
+ // "items": "{count, plural, one {# item} other {# items}}"
5
+ export {};
6
+ //# sourceMappingURL=translation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translation.js","sourceRoot":"","sources":["../../src/types/translation.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,0DAA0D;AAC1D,uDAAuD;AACvD,2DAA2D"}
@@ -105,6 +105,30 @@ All migration commands accept `--json` for machine-readable output.
105
105
  plumbus dev
106
106
  ```
107
107
 
108
+ ## App Commands
109
+
110
+ Run custom command scripts defined in your project's `app/commands/` directory. Use this for setup scripts, data migration tasks, and other one-off operations that need framework infrastructure (DB, config, password hashing).
111
+
112
+ ```bash
113
+ # Run a command script
114
+ plumbus run <script-name>
115
+
116
+ # Pass arguments to the script
117
+ plumbus run <script-name> -- --email admin@example.com --role admin
118
+ ```
119
+
120
+ Command files must export a `default` or named `run` async function receiving `{ db, sql, args }`:
121
+
122
+ ```ts
123
+ import { hashPassword } from "@plumbus/core";
124
+
125
+ export default async function (ctx: { sql: any; args: string[] }) {
126
+ const password = randomBytes(24).toString("base64url");
127
+ await ctx.sql`INSERT INTO "user" ...`;
128
+ console.log(`Password: ${password}`);
129
+ }
130
+ ```
131
+
108
132
  ## Important Notes
109
133
 
110
134
  - **Run from project root**: All commands must be executed from the consumer project directory where `package.json` lives.