@agtlantis/core 0.5.0 → 0.5.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 (265) hide show
  1. package/dist/errors/index.d.ts +4 -0
  2. package/dist/errors/index.d.ts.map +1 -0
  3. package/dist/errors/index.js +3 -0
  4. package/dist/errors/index.js.map +1 -0
  5. package/dist/errors/types.d.ts +69 -0
  6. package/dist/errors/types.d.ts.map +1 -0
  7. package/dist/errors/types.js +119 -0
  8. package/dist/errors/types.js.map +1 -0
  9. package/dist/errors/utils.d.ts +17 -0
  10. package/dist/errors/utils.d.ts.map +1 -0
  11. package/dist/errors/utils.js +16 -0
  12. package/dist/errors/utils.js.map +1 -0
  13. package/dist/execution/constants.d.ts +7 -0
  14. package/dist/execution/constants.d.ts.map +1 -0
  15. package/dist/execution/constants.js +7 -0
  16. package/dist/execution/constants.js.map +1 -0
  17. package/dist/execution/index.d.ts +8 -0
  18. package/dist/execution/index.d.ts.map +1 -0
  19. package/dist/execution/index.js +7 -0
  20. package/dist/execution/index.js.map +1 -0
  21. package/dist/execution/mapping.d.ts +17 -0
  22. package/dist/execution/mapping.d.ts.map +1 -0
  23. package/dist/execution/mapping.js +197 -0
  24. package/dist/execution/mapping.js.map +1 -0
  25. package/dist/execution/shared.d.ts +86 -0
  26. package/dist/execution/shared.d.ts.map +1 -0
  27. package/dist/execution/shared.js +100 -0
  28. package/dist/execution/shared.js.map +1 -0
  29. package/dist/execution/simple-host.d.ts +56 -0
  30. package/dist/execution/simple-host.d.ts.map +1 -0
  31. package/dist/execution/simple-host.js +126 -0
  32. package/dist/execution/simple-host.js.map +1 -0
  33. package/dist/execution/streaming-host.d.ts +79 -0
  34. package/dist/execution/streaming-host.d.ts.map +1 -0
  35. package/dist/execution/streaming-host.js +276 -0
  36. package/dist/execution/streaming-host.js.map +1 -0
  37. package/dist/execution/testing/fixtures.d.ts +67 -0
  38. package/dist/execution/testing/fixtures.d.ts.map +1 -0
  39. package/dist/execution/testing/fixtures.js +145 -0
  40. package/dist/execution/testing/fixtures.js.map +1 -0
  41. package/dist/execution/testing/helpers.d.ts +218 -0
  42. package/dist/execution/testing/helpers.d.ts.map +1 -0
  43. package/dist/execution/testing/helpers.js +327 -0
  44. package/dist/execution/testing/helpers.js.map +1 -0
  45. package/dist/execution/testing/host-configs.d.ts +56 -0
  46. package/dist/execution/testing/host-configs.d.ts.map +1 -0
  47. package/dist/execution/testing/host-configs.js +154 -0
  48. package/dist/execution/testing/host-configs.js.map +1 -0
  49. package/dist/execution/testing/vitest-assertions.d.ts +102 -0
  50. package/dist/execution/testing/vitest-assertions.d.ts.map +1 -0
  51. package/dist/execution/testing/vitest-assertions.js +142 -0
  52. package/dist/execution/testing/vitest-assertions.js.map +1 -0
  53. package/dist/execution/types.d.ts +432 -0
  54. package/dist/execution/types.d.ts.map +1 -0
  55. package/dist/execution/types.js +2 -0
  56. package/dist/execution/types.js.map +1 -0
  57. package/dist/execution/utils.d.ts +68 -0
  58. package/dist/execution/utils.d.ts.map +1 -0
  59. package/dist/execution/utils.js +93 -0
  60. package/dist/execution/utils.js.map +1 -0
  61. package/dist/index.d.ts +10 -1506
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +9 -2979
  64. package/dist/index.js.map +1 -1
  65. package/dist/observability/index.d.ts +4 -0
  66. package/dist/observability/index.d.ts.map +1 -0
  67. package/dist/observability/index.js +2 -0
  68. package/dist/observability/index.js.map +1 -0
  69. package/dist/observability/logger.d.ts +161 -0
  70. package/dist/observability/logger.d.ts.map +1 -0
  71. package/dist/observability/logger.js +31 -0
  72. package/dist/observability/logger.js.map +1 -0
  73. package/dist/observability/types.d.ts +46 -0
  74. package/dist/observability/types.d.ts.map +1 -0
  75. package/dist/observability/types.js +2 -0
  76. package/dist/observability/types.js.map +1 -0
  77. package/dist/patterns/index.d.ts +2 -0
  78. package/dist/patterns/index.d.ts.map +1 -0
  79. package/dist/patterns/index.js +2 -0
  80. package/dist/patterns/index.js.map +1 -0
  81. package/dist/patterns/progressive/index.d.ts +2 -0
  82. package/dist/patterns/progressive/index.d.ts.map +1 -0
  83. package/dist/patterns/progressive/index.js +2 -0
  84. package/dist/patterns/progressive/index.js.map +1 -0
  85. package/dist/patterns/progressive/progressive-pattern.d.ts +174 -0
  86. package/dist/patterns/progressive/progressive-pattern.d.ts.map +1 -0
  87. package/dist/patterns/progressive/progressive-pattern.js +260 -0
  88. package/dist/patterns/progressive/progressive-pattern.js.map +1 -0
  89. package/dist/pricing/calculator.d.ts +71 -0
  90. package/dist/pricing/calculator.d.ts.map +1 -0
  91. package/dist/pricing/calculator.js +127 -0
  92. package/dist/pricing/calculator.js.map +1 -0
  93. package/dist/pricing/config.d.ts +61 -0
  94. package/dist/pricing/config.d.ts.map +1 -0
  95. package/dist/pricing/config.js +87 -0
  96. package/dist/pricing/config.js.map +1 -0
  97. package/dist/pricing/defaults.d.ts +29 -0
  98. package/dist/pricing/defaults.d.ts.map +1 -0
  99. package/dist/pricing/defaults.js +139 -0
  100. package/dist/pricing/defaults.js.map +1 -0
  101. package/dist/pricing/index.d.ts +40 -0
  102. package/dist/pricing/index.d.ts.map +1 -0
  103. package/dist/pricing/index.js +43 -0
  104. package/dist/pricing/index.js.map +1 -0
  105. package/dist/pricing/types.d.ts +96 -0
  106. package/dist/pricing/types.d.ts.map +1 -0
  107. package/dist/pricing/types.js +7 -0
  108. package/dist/pricing/types.js.map +1 -0
  109. package/dist/pricing/validator.d.ts +55 -0
  110. package/dist/pricing/validator.d.ts.map +1 -0
  111. package/dist/pricing/validator.js +84 -0
  112. package/dist/pricing/validator.js.map +1 -0
  113. package/dist/prompt/errors.d.ts +112 -0
  114. package/dist/prompt/errors.d.ts.map +1 -0
  115. package/dist/prompt/errors.js +175 -0
  116. package/dist/prompt/errors.js.map +1 -0
  117. package/dist/prompt/file-prompt-repository.d.ts +80 -0
  118. package/dist/prompt/file-prompt-repository.d.ts.map +1 -0
  119. package/dist/prompt/file-prompt-repository.js +287 -0
  120. package/dist/prompt/file-prompt-repository.js.map +1 -0
  121. package/dist/prompt/index.d.ts +34 -0
  122. package/dist/prompt/index.d.ts.map +1 -0
  123. package/dist/prompt/index.js +37 -0
  124. package/dist/prompt/index.js.map +1 -0
  125. package/dist/prompt/prompt-template.d.ts +64 -0
  126. package/dist/prompt/prompt-template.d.ts.map +1 -0
  127. package/dist/prompt/prompt-template.js +90 -0
  128. package/dist/prompt/prompt-template.js.map +1 -0
  129. package/dist/prompt/template.d.ts +23 -0
  130. package/dist/prompt/template.d.ts.map +1 -0
  131. package/dist/prompt/template.js +70 -0
  132. package/dist/prompt/template.js.map +1 -0
  133. package/dist/prompt/types.d.ts +148 -0
  134. package/dist/prompt/types.d.ts.map +1 -0
  135. package/dist/prompt/types.js +7 -0
  136. package/dist/prompt/types.js.map +1 -0
  137. package/dist/provider/base-provider.d.ts +41 -0
  138. package/dist/provider/base-provider.d.ts.map +1 -0
  139. package/dist/provider/base-provider.js +21 -0
  140. package/dist/provider/base-provider.js.map +1 -0
  141. package/dist/provider/file-cache.d.ts +14 -0
  142. package/dist/provider/file-cache.d.ts.map +1 -0
  143. package/dist/provider/file-cache.js +29 -0
  144. package/dist/provider/file-cache.js.map +1 -0
  145. package/dist/provider/file-source.d.ts +32 -0
  146. package/dist/provider/file-source.d.ts.map +1 -0
  147. package/dist/provider/file-source.js +180 -0
  148. package/dist/provider/file-source.js.map +1 -0
  149. package/dist/provider/google/factory.d.ts +107 -0
  150. package/dist/provider/google/factory.d.ts.map +1 -0
  151. package/dist/provider/google/factory.js +143 -0
  152. package/dist/provider/google/factory.js.map +1 -0
  153. package/dist/provider/google/file-manager.d.ts +14 -0
  154. package/dist/provider/google/file-manager.d.ts.map +1 -0
  155. package/dist/provider/google/file-manager.js +183 -0
  156. package/dist/provider/google/file-manager.js.map +1 -0
  157. package/dist/provider/google/index.d.ts +8 -0
  158. package/dist/provider/google/index.d.ts.map +1 -0
  159. package/dist/provider/google/index.js +10 -0
  160. package/dist/provider/google/index.js.map +1 -0
  161. package/dist/provider/hash.d.ts +3 -0
  162. package/dist/provider/hash.d.ts.map +1 -0
  163. package/dist/provider/hash.js +34 -0
  164. package/dist/provider/hash.js.map +1 -0
  165. package/dist/provider/index.d.ts +9 -0
  166. package/dist/provider/index.d.ts.map +1 -0
  167. package/dist/provider/index.js +11 -0
  168. package/dist/provider/index.js.map +1 -0
  169. package/dist/provider/noop-file-manager.d.ts +9 -0
  170. package/dist/provider/noop-file-manager.d.ts.map +1 -0
  171. package/dist/provider/noop-file-manager.js +28 -0
  172. package/dist/provider/noop-file-manager.js.map +1 -0
  173. package/dist/provider/openai/factory.d.ts +67 -0
  174. package/dist/provider/openai/factory.d.ts.map +1 -0
  175. package/dist/provider/openai/factory.js +95 -0
  176. package/dist/provider/openai/factory.js.map +1 -0
  177. package/dist/provider/openai/index.d.ts +7 -0
  178. package/dist/provider/openai/index.d.ts.map +1 -0
  179. package/dist/provider/openai/index.js +7 -0
  180. package/dist/provider/openai/index.js.map +1 -0
  181. package/dist/provider/types.d.ts +105 -0
  182. package/dist/provider/types.d.ts.map +1 -0
  183. package/dist/provider/types.js +19 -0
  184. package/dist/provider/types.js.map +1 -0
  185. package/dist/session/index.d.ts +7 -0
  186. package/dist/session/index.d.ts.map +1 -0
  187. package/dist/session/index.js +5 -0
  188. package/dist/session/index.js.map +1 -0
  189. package/dist/session/simple-session.d.ts +98 -0
  190. package/dist/session/simple-session.d.ts.map +1 -0
  191. package/dist/session/simple-session.js +299 -0
  192. package/dist/session/simple-session.js.map +1 -0
  193. package/dist/session/streaming-session.d.ts +90 -0
  194. package/dist/session/streaming-session.d.ts.map +1 -0
  195. package/dist/session/streaming-session.js +151 -0
  196. package/dist/session/streaming-session.js.map +1 -0
  197. package/dist/session/test-utils.d.ts +19 -0
  198. package/dist/session/test-utils.d.ts.map +1 -0
  199. package/dist/session/test-utils.js +65 -0
  200. package/dist/session/test-utils.js.map +1 -0
  201. package/dist/session/types.d.ts +219 -0
  202. package/dist/session/types.d.ts.map +1 -0
  203. package/dist/session/types.js +181 -0
  204. package/dist/session/types.js.map +1 -0
  205. package/dist/session/usage-extractors.d.ts +7 -0
  206. package/dist/session/usage-extractors.d.ts.map +1 -0
  207. package/dist/session/usage-extractors.js +71 -0
  208. package/dist/session/usage-extractors.js.map +1 -0
  209. package/dist/testing/fixtures.d.ts +34 -0
  210. package/dist/testing/fixtures.d.ts.map +1 -0
  211. package/dist/testing/fixtures.js +65 -0
  212. package/dist/testing/fixtures.js.map +1 -0
  213. package/dist/testing/helpers.d.ts +20 -0
  214. package/dist/testing/helpers.d.ts.map +1 -0
  215. package/dist/testing/helpers.js +32 -0
  216. package/dist/testing/helpers.js.map +1 -0
  217. package/dist/testing/index.d.ts +7 -519
  218. package/dist/testing/index.d.ts.map +1 -0
  219. package/dist/testing/index.js +21 -2123
  220. package/dist/testing/index.js.map +1 -1
  221. package/dist/testing/mock-provider.d.ts +79 -0
  222. package/dist/testing/mock-provider.d.ts.map +1 -0
  223. package/dist/testing/mock-provider.js +152 -0
  224. package/dist/testing/mock-provider.js.map +1 -0
  225. package/dist/testing/mock.d.ts +29 -0
  226. package/dist/testing/mock.d.ts.map +1 -0
  227. package/dist/testing/mock.js +154 -0
  228. package/dist/testing/mock.js.map +1 -0
  229. package/dist/testing/test-execution.d.ts +14 -0
  230. package/dist/testing/test-execution.d.ts.map +1 -0
  231. package/dist/testing/test-execution.js +108 -0
  232. package/dist/testing/test-execution.js.map +1 -0
  233. package/dist/utils/deep-merge.d.ts +6 -0
  234. package/dist/utils/deep-merge.d.ts.map +1 -0
  235. package/dist/utils/deep-merge.js +24 -0
  236. package/dist/utils/deep-merge.js.map +1 -0
  237. package/dist/validation/errors.d.ts +28 -0
  238. package/dist/validation/errors.d.ts.map +1 -0
  239. package/dist/validation/errors.js +39 -0
  240. package/dist/validation/errors.js.map +1 -0
  241. package/dist/validation/index.d.ts +5 -0
  242. package/dist/validation/index.d.ts.map +1 -0
  243. package/dist/validation/index.js +4 -0
  244. package/dist/validation/index.js.map +1 -0
  245. package/dist/validation/types.d.ts +49 -0
  246. package/dist/validation/types.d.ts.map +1 -0
  247. package/dist/validation/types.js +2 -0
  248. package/dist/validation/types.js.map +1 -0
  249. package/dist/validation/validation-history.d.ts +12 -0
  250. package/dist/validation/validation-history.d.ts.map +1 -0
  251. package/dist/validation/validation-history.js +29 -0
  252. package/dist/validation/validation-history.js.map +1 -0
  253. package/dist/validation/with-validation.d.ts +38 -0
  254. package/dist/validation/with-validation.d.ts.map +1 -0
  255. package/dist/validation/with-validation.js +58 -0
  256. package/dist/validation/with-validation.js.map +1 -0
  257. package/package.json +72 -76
  258. package/dist/base-provider-2TTw5HAa.d.cts +0 -1254
  259. package/dist/base-provider-2TTw5HAa.d.ts +0 -1254
  260. package/dist/index.cjs +0 -3085
  261. package/dist/index.cjs.map +0 -1
  262. package/dist/index.d.cts +0 -1506
  263. package/dist/testing/index.cjs +0 -2167
  264. package/dist/testing/index.cjs.map +0 -1
  265. package/dist/testing/index.d.cts +0 -520
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Prompt module error classes for @agtlantis/core.
3
+ *
4
+ * Each error type has a specific code and context for precise error handling.
5
+ */
6
+ import { AgtlantisError } from '../errors/index.js';
7
+ export { PromptErrorCode };
8
+ // =============================================================================
9
+ // Prompt Error Codes
10
+ // =============================================================================
11
+ var PromptErrorCode;
12
+ (function (PromptErrorCode) {
13
+ /** Generic prompt error */
14
+ PromptErrorCode["PROMPT_ERROR"] = "PROMPT_ERROR";
15
+ /** Prompt not found in repository */
16
+ PromptErrorCode["NOT_FOUND"] = "PROMPT_NOT_FOUND";
17
+ /** Invalid prompt file format (e.g., malformed YAML) */
18
+ PromptErrorCode["INVALID_FORMAT"] = "PROMPT_INVALID_FORMAT";
19
+ /** Template compilation failed */
20
+ PromptErrorCode["TEMPLATE_ERROR"] = "PROMPT_TEMPLATE_ERROR";
21
+ /** File I/O operation failed */
22
+ PromptErrorCode["IO_ERROR"] = "PROMPT_IO_ERROR";
23
+ })(PromptErrorCode || (PromptErrorCode = {}));
24
+ // =============================================================================
25
+ // Base Prompt Error
26
+ // =============================================================================
27
+ /**
28
+ * Base error class for prompt operations.
29
+ * Use specific error subclasses for more precise error handling.
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * throw new PromptError('Something went wrong', {
34
+ * code: PromptErrorCode.PROMPT_ERROR,
35
+ * context: { promptId: 'greeting' }
36
+ * });
37
+ * ```
38
+ */
39
+ export class PromptError extends AgtlantisError {
40
+ constructor(message, options = {}) {
41
+ super(message, {
42
+ code: (options.code ?? PromptErrorCode.PROMPT_ERROR),
43
+ cause: options.cause,
44
+ context: options.context,
45
+ });
46
+ this.name = 'PromptError';
47
+ }
48
+ /**
49
+ * Creates a PromptError from an unknown error.
50
+ */
51
+ static from(error, code = PromptErrorCode.PROMPT_ERROR, context) {
52
+ if (error instanceof PromptError) {
53
+ return error;
54
+ }
55
+ const cause = error instanceof Error ? error : new Error(String(error));
56
+ return new PromptError(cause.message, { code, cause, context });
57
+ }
58
+ }
59
+ // =============================================================================
60
+ // Prompt Not Found Error
61
+ // =============================================================================
62
+ /**
63
+ * Error thrown when a prompt is not found in the repository.
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * throw new PromptNotFoundError('greeting', '1.0.0');
68
+ * // Error: Prompt 'greeting' version '1.0.0' not found
69
+ *
70
+ * throw new PromptNotFoundError('greeting');
71
+ * // Error: Prompt 'greeting' not found
72
+ * ```
73
+ */
74
+ export class PromptNotFoundError extends PromptError {
75
+ promptId;
76
+ version;
77
+ constructor(promptId, version, options = {}) {
78
+ const message = version
79
+ ? `Prompt '${promptId}' version '${version}' not found`
80
+ : `Prompt '${promptId}' not found`;
81
+ super(message, {
82
+ code: PromptErrorCode.NOT_FOUND,
83
+ cause: options.cause,
84
+ context: { promptId, version, ...options.context },
85
+ });
86
+ this.name = 'PromptNotFoundError';
87
+ this.promptId = promptId;
88
+ this.version = version;
89
+ }
90
+ }
91
+ // =============================================================================
92
+ // Prompt Invalid Format Error
93
+ // =============================================================================
94
+ /**
95
+ * Error thrown when a prompt file has invalid format.
96
+ * Examples: malformed YAML, missing required fields, invalid schema.
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * throw new PromptInvalidFormatError('greeting', 'Missing required field: system');
101
+ * // Error: Invalid format for prompt 'greeting': Missing required field: system
102
+ * ```
103
+ */
104
+ export class PromptInvalidFormatError extends PromptError {
105
+ promptId;
106
+ details;
107
+ constructor(promptId, details, options = {}) {
108
+ super(`Invalid format for prompt '${promptId}': ${details}`, {
109
+ code: PromptErrorCode.INVALID_FORMAT,
110
+ cause: options.cause,
111
+ context: { promptId, details, ...options.context },
112
+ });
113
+ this.name = 'PromptInvalidFormatError';
114
+ this.promptId = promptId;
115
+ this.details = details;
116
+ }
117
+ }
118
+ // =============================================================================
119
+ // Prompt Template Error
120
+ // =============================================================================
121
+ /**
122
+ * Error thrown when template compilation fails.
123
+ * Examples: invalid Handlebars syntax, missing helper.
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * throw new PromptTemplateError('greeting', 'Unexpected token {{/if}}');
128
+ * // Error: Template compilation failed for prompt 'greeting': Unexpected token {{/if}}
129
+ * ```
130
+ */
131
+ export class PromptTemplateError extends PromptError {
132
+ promptId;
133
+ details;
134
+ constructor(promptId, details, options = {}) {
135
+ super(`Template compilation failed for prompt '${promptId}': ${details}`, {
136
+ code: PromptErrorCode.TEMPLATE_ERROR,
137
+ cause: options.cause,
138
+ context: { promptId, details, ...options.context },
139
+ });
140
+ this.name = 'PromptTemplateError';
141
+ this.promptId = promptId;
142
+ this.details = details;
143
+ }
144
+ }
145
+ // =============================================================================
146
+ // Prompt IO Error
147
+ // =============================================================================
148
+ /**
149
+ * Error thrown when file I/O operations fail.
150
+ * Examples: read failure, write failure, directory access denied.
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * throw new PromptIOError('read', '/path/to/prompt.yaml', {
155
+ * cause: originalError
156
+ * });
157
+ * // Error: Failed to read prompt file: /path/to/prompt.yaml
158
+ * ```
159
+ */
160
+ export class PromptIOError extends PromptError {
161
+ operation;
162
+ path;
163
+ constructor(operation, path, options = {}) {
164
+ const opText = operation === 'list' ? 'list prompts in' : `${operation} prompt file`;
165
+ super(`Failed to ${opText}: ${path}`, {
166
+ code: PromptErrorCode.IO_ERROR,
167
+ cause: options.cause,
168
+ context: { operation, path, ...options.context },
169
+ });
170
+ this.name = 'PromptIOError';
171
+ this.operation = operation;
172
+ this.path = path;
173
+ }
174
+ }
175
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/prompt/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAA2B,MAAM,oBAAoB,CAAC;SAMjE,eAAe;AAJ3B,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,IAAY,eAWX;AAXD,WAAY,eAAe;IACzB,2BAA2B;IAC3B,gDAA6B,CAAA;IAC7B,qCAAqC;IACrC,iDAA8B,CAAA;IAC9B,wDAAwD;IACxD,2DAAwC,CAAA;IACxC,kCAAkC;IAClC,2DAAwC,CAAA;IACxC,gCAAgC;IAChC,+CAA4B,CAAA;AAAC,CAC/B,EAXY,eAAe,KAAf,eAAe,QAW1B;AAmBD,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,WAAY,SAAQ,cAAoD;IACnF,YAAY,OAAe,EAAE,OAAO,GAAuB,EAAE,EAAE;QAC7D,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,eAAe,CAAC,YAAY,CAAyC;YAC5F,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAAA,CAC3B;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CACT,KAAc,EACd,IAAI,GAAoB,eAAe,CAAC,YAAY,EACpD,OAAiC,EACpB;QACb,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxE,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAAA,CACjE;CACF;AAED,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IACzC,QAAQ,CAAS;IACjB,OAAO,CAAU;IAE1B,YAAY,QAAgB,EAAE,OAAgB,EAAE,OAAO,GAAqC,EAAE,EAAE;QAC9F,MAAM,OAAO,GAAG,OAAO;YACrB,CAAC,CAAC,WAAW,QAAQ,cAAc,OAAO,aAAa;YACvD,CAAC,CAAC,WAAW,QAAQ,aAAa,CAAC;QAErC,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,eAAe,CAAC,SAAS;YAC/B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;SACnD,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAAA,CACxB;CACF;AAED,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAEhF;;;;;;;;;GASG;AACH,MAAM,OAAO,wBAAyB,SAAQ,WAAW;IAC9C,QAAQ,CAAS;IACjB,OAAO,CAAS;IAEzB,YAAY,QAAgB,EAAE,OAAe,EAAE,OAAO,GAAqC,EAAE,EAAE;QAC7F,KAAK,CAAC,8BAA8B,QAAQ,MAAM,OAAO,EAAE,EAAE;YAC3D,IAAI,EAAE,eAAe,CAAC,cAAc;YACpC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;SACnD,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAAA,CACxB;CACF;AAED,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IACzC,QAAQ,CAAS;IACjB,OAAO,CAAS;IAEzB,YAAY,QAAgB,EAAE,OAAe,EAAE,OAAO,GAAqC,EAAE,EAAE;QAC7F,KAAK,CAAC,2CAA2C,QAAQ,MAAM,OAAO,EAAE,EAAE;YACxE,IAAI,EAAE,eAAe,CAAC,cAAc;YACpC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;SACnD,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAAA,CACxB;CACF;AAED,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,aAAc,SAAQ,WAAW;IACnC,SAAS,CAA4B;IACrC,IAAI,CAAS;IAEtB,YACE,SAAoC,EACpC,IAAY,EACZ,OAAO,GAAqC,EAAE,EAC9C;QACA,MAAM,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,SAAS,cAAc,CAAC;QACrF,KAAK,CAAC,aAAa,MAAM,KAAK,IAAI,EAAE,EAAE;YACpC,IAAI,EAAE,eAAe,CAAC,QAAQ;YAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAAA,CAClB;CACF"}
@@ -0,0 +1,80 @@
1
+ import type { FileSystem, PromptRepository, PromptTemplateData } from './types.js';
2
+ export interface FilePromptRepositoryOptions {
3
+ /** Directory path where prompt files are stored */
4
+ directory: string;
5
+ /** Optional custom file system implementation (defaults to Node.js fs) */
6
+ fs?: FileSystem;
7
+ /** Enable in-memory caching for read operations (defaults to true) */
8
+ cache?: boolean;
9
+ }
10
+ /**
11
+ * File-based prompt repository.
12
+ *
13
+ * Prompts are stored as YAML files with naming convention: {id}-{version}.yaml
14
+ *
15
+ * Can be subclassed to customize parsing/serialization (e.g., JSON instead of YAML).
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const repo = new FilePromptRepository({ directory: './prompts' });
20
+ *
21
+ * // Read latest version
22
+ * const prompt = await repo.read<GreetingInput>('greeting');
23
+ *
24
+ * // Subclass to use JSON format
25
+ * class JsonPromptRepository extends FilePromptRepository {
26
+ * protected parseContent(content: string, promptId: string): PromptTemplateData {
27
+ * return JSON.parse(content);
28
+ * }
29
+ * protected serializeContent(content: PromptTemplateData): string {
30
+ * return JSON.stringify(content, null, 2);
31
+ * }
32
+ * }
33
+ * ```
34
+ */
35
+ export declare class FilePromptRepository implements PromptRepository {
36
+ protected readonly directory: string;
37
+ protected readonly fileSystem: FileSystem;
38
+ protected readonly cacheEnabled: boolean;
39
+ private readonly contentCache;
40
+ constructor(options: FilePromptRepositoryOptions);
41
+ /**
42
+ * Generates file name from prompt id and version.
43
+ * Override this along with `parseFileName` to change file naming convention.
44
+ */
45
+ protected getFileName(id: string, version: string): string;
46
+ /**
47
+ * Parses file name into id and version.
48
+ * Override this along with `getFileName` to change file naming convention.
49
+ */
50
+ protected parseFileName(fileName: string): {
51
+ id: string;
52
+ version: string;
53
+ } | null;
54
+ /**
55
+ * Parses raw file content into PromptTemplateData.
56
+ * Override this to support different file formats (e.g., JSON, TOML).
57
+ */
58
+ protected parseContent(content: string, promptId: string): PromptTemplateData;
59
+ /**
60
+ * Serializes PromptTemplateData to file content string.
61
+ * Override this to support different file formats (e.g., JSON, TOML).
62
+ */
63
+ protected serializeContent(content: PromptTemplateData): string;
64
+ private getCacheKey;
65
+ read(id: string, version?: string): Promise<PromptTemplateData>;
66
+ write(content: PromptTemplateData): Promise<void>;
67
+ }
68
+ /**
69
+ * Creates a file-based prompt repository.
70
+ *
71
+ * This is a convenience factory function. For subclassing, use `FilePromptRepository` class directly.
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const repo = createFilePromptRepository({ directory: './prompts' });
76
+ * const prompt = await repo.read<GreetingInput>('greeting');
77
+ * ```
78
+ */
79
+ export declare function createFilePromptRepository(options: FilePromptRepositoryOptions): PromptRepository;
80
+ //# sourceMappingURL=file-prompt-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-prompt-repository.d.ts","sourceRoot":"","sources":["../../src/prompt/file-prompt-repository.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAMnF,MAAM,WAAW,2BAA2B;IACxC,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAkJD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IACzD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAEzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyC;IAEtE,YAAY,OAAO,EAAE,2BAA2B,EAI/C;IAED;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;IAED;;;OAGG;IACH,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAEhF;IAED;;;OAGG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAE5E;IAED;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAE9D;IAED,OAAO,CAAC,WAAW;IAIb,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+DpE;IAEK,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BtD;CACJ;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG,gBAAgB,CAEjG"}
@@ -0,0 +1,287 @@
1
+ /**
2
+ * File-based prompt repository implementation.
3
+ *
4
+ * Stores prompts as YAML files with naming convention: {id}-{version}.yaml
5
+ */
6
+ import * as fs from 'node:fs/promises';
7
+ import * as path from 'node:path';
8
+ import * as yaml from 'yaml';
9
+ import { PromptIOError, PromptInvalidFormatError, PromptNotFoundError } from './errors.js';
10
+ import { compileTemplate } from './template.js';
11
+ // =============================================================================
12
+ // Error Utilities
13
+ // =============================================================================
14
+ function toErrorCause(error) {
15
+ return error instanceof Error ? error : undefined;
16
+ }
17
+ function toErrorMessage(error) {
18
+ return error instanceof Error ? error.message : String(error);
19
+ }
20
+ // =============================================================================
21
+ // Default File System Implementation
22
+ // =============================================================================
23
+ const defaultFileSystem = {
24
+ readFile: (filePath) => fs.readFile(filePath, 'utf-8'),
25
+ writeFile: (filePath, content) => fs.writeFile(filePath, content, 'utf-8'),
26
+ readdir: (dirPath) => fs.readdir(dirPath),
27
+ };
28
+ // =============================================================================
29
+ // Version Utilities
30
+ // =============================================================================
31
+ /**
32
+ * Parses a semver version string into numeric components.
33
+ * @param version - Version string (e.g., '1.2.3')
34
+ * @returns Tuple of [major, minor, patch] or null if invalid
35
+ */
36
+ function parseVersion(version) {
37
+ const match = version.match(/^(\d+)\.(\d+)\.(\d+)$/);
38
+ if (!match)
39
+ return null;
40
+ return [parseInt(match[1], 10), parseInt(match[2], 10), parseInt(match[3], 10)];
41
+ }
42
+ /**
43
+ * Compares two semver versions.
44
+ * @returns Negative if a < b, positive if a > b, zero if equal
45
+ */
46
+ function compareVersions(a, b) {
47
+ const parsedA = parseVersion(a);
48
+ const parsedB = parseVersion(b);
49
+ // Invalid versions sort last
50
+ if (!parsedA && !parsedB)
51
+ return 0;
52
+ if (!parsedA)
53
+ return 1;
54
+ if (!parsedB)
55
+ return -1;
56
+ for (let i = 0; i < 3; i++) {
57
+ if (parsedA[i] !== parsedB[i]) {
58
+ return parsedA[i] - parsedB[i];
59
+ }
60
+ }
61
+ return 0;
62
+ }
63
+ // =============================================================================
64
+ // File Name Utilities
65
+ // =============================================================================
66
+ const FILE_EXTENSION = '.yaml';
67
+ /**
68
+ * Generates file name from prompt id and version.
69
+ * @example getFileName('greeting', '1.0.0') => 'greeting-1.0.0.yaml'
70
+ */
71
+ function getFileName(id, version) {
72
+ return `${id}-${version}${FILE_EXTENSION}`;
73
+ }
74
+ /**
75
+ * Parses file name into id and version.
76
+ * @example parseFileName('greeting-1.0.0.yaml') => { id: 'greeting', version: '1.0.0' }
77
+ */
78
+ function parseFileName(fileName) {
79
+ if (!fileName.endsWith(FILE_EXTENSION))
80
+ return null;
81
+ const baseName = fileName.slice(0, -FILE_EXTENSION.length);
82
+ const lastDash = baseName.lastIndexOf('-');
83
+ if (lastDash === -1)
84
+ return null;
85
+ const id = baseName.slice(0, lastDash);
86
+ const version = baseName.slice(lastDash + 1);
87
+ if (!id || !parseVersion(version))
88
+ return null;
89
+ return { id, version };
90
+ }
91
+ // =============================================================================
92
+ // YAML Parsing & Validation
93
+ // =============================================================================
94
+ /**
95
+ * Parses and validates YAML content as PromptTemplateData.
96
+ */
97
+ function parsePromptYaml(content, promptId) {
98
+ let parsed;
99
+ try {
100
+ parsed = yaml.parse(content);
101
+ }
102
+ catch (error) {
103
+ throw new PromptInvalidFormatError(promptId, `Invalid YAML: ${toErrorMessage(error)}`, {
104
+ cause: toErrorCause(error),
105
+ });
106
+ }
107
+ if (!parsed || typeof parsed !== 'object') {
108
+ throw new PromptInvalidFormatError(promptId, 'Expected YAML object');
109
+ }
110
+ const obj = parsed;
111
+ // Validate required fields
112
+ const requiredFields = ['id', 'version', 'system', 'userTemplate'];
113
+ for (const field of requiredFields) {
114
+ if (typeof obj[field] !== 'string') {
115
+ throw new PromptInvalidFormatError(promptId, `Missing or invalid required field: ${field} (expected string)`);
116
+ }
117
+ }
118
+ return {
119
+ id: obj.id,
120
+ version: obj.version,
121
+ system: obj.system,
122
+ userTemplate: obj.userTemplate,
123
+ };
124
+ }
125
+ /**
126
+ * Serializes PromptTemplateData to YAML string.
127
+ */
128
+ function serializePromptYaml(content) {
129
+ return yaml.stringify(content);
130
+ }
131
+ // =============================================================================
132
+ // Repository Implementation
133
+ // =============================================================================
134
+ /**
135
+ * File-based prompt repository.
136
+ *
137
+ * Prompts are stored as YAML files with naming convention: {id}-{version}.yaml
138
+ *
139
+ * Can be subclassed to customize parsing/serialization (e.g., JSON instead of YAML).
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * const repo = new FilePromptRepository({ directory: './prompts' });
144
+ *
145
+ * // Read latest version
146
+ * const prompt = await repo.read<GreetingInput>('greeting');
147
+ *
148
+ * // Subclass to use JSON format
149
+ * class JsonPromptRepository extends FilePromptRepository {
150
+ * protected parseContent(content: string, promptId: string): PromptTemplateData {
151
+ * return JSON.parse(content);
152
+ * }
153
+ * protected serializeContent(content: PromptTemplateData): string {
154
+ * return JSON.stringify(content, null, 2);
155
+ * }
156
+ * }
157
+ * ```
158
+ */
159
+ export class FilePromptRepository {
160
+ directory;
161
+ fileSystem;
162
+ cacheEnabled;
163
+ contentCache = new Map();
164
+ constructor(options) {
165
+ this.directory = options.directory;
166
+ this.fileSystem = options.fs ?? defaultFileSystem;
167
+ this.cacheEnabled = options.cache ?? true;
168
+ }
169
+ /**
170
+ * Generates file name from prompt id and version.
171
+ * Override this along with `parseFileName` to change file naming convention.
172
+ */
173
+ getFileName(id, version) {
174
+ return getFileName(id, version);
175
+ }
176
+ /**
177
+ * Parses file name into id and version.
178
+ * Override this along with `getFileName` to change file naming convention.
179
+ */
180
+ parseFileName(fileName) {
181
+ return parseFileName(fileName);
182
+ }
183
+ /**
184
+ * Parses raw file content into PromptTemplateData.
185
+ * Override this to support different file formats (e.g., JSON, TOML).
186
+ */
187
+ parseContent(content, promptId) {
188
+ return parsePromptYaml(content, promptId);
189
+ }
190
+ /**
191
+ * Serializes PromptTemplateData to file content string.
192
+ * Override this to support different file formats (e.g., JSON, TOML).
193
+ */
194
+ serializeContent(content) {
195
+ return serializePromptYaml(content);
196
+ }
197
+ getCacheKey(id, version) {
198
+ return `${id}:${version}`;
199
+ }
200
+ async read(id, version) {
201
+ if (version) {
202
+ const cacheKey = this.getCacheKey(id, version);
203
+ if (this.cacheEnabled) {
204
+ const cached = this.contentCache.get(cacheKey);
205
+ if (cached) {
206
+ return cached;
207
+ }
208
+ }
209
+ const fileName = this.getFileName(id, version);
210
+ const filePath = path.join(this.directory, fileName);
211
+ let content;
212
+ try {
213
+ content = await this.fileSystem.readFile(filePath);
214
+ }
215
+ catch (error) {
216
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
217
+ throw new PromptNotFoundError(id, version);
218
+ }
219
+ throw new PromptIOError('read', filePath, { cause: toErrorCause(error) });
220
+ }
221
+ const promptTemplate = this.parseContent(content, id);
222
+ if (promptTemplate.id !== id || promptTemplate.version !== version) {
223
+ throw new PromptInvalidFormatError(id, `File content mismatch: expected id='${id}' version='${version}', got id='${promptTemplate.id}' version='${promptTemplate.version}'`);
224
+ }
225
+ if (this.cacheEnabled) {
226
+ this.contentCache.set(cacheKey, promptTemplate);
227
+ }
228
+ return promptTemplate;
229
+ }
230
+ let files;
231
+ try {
232
+ files = await this.fileSystem.readdir(this.directory);
233
+ }
234
+ catch (error) {
235
+ throw new PromptIOError('list', this.directory, { cause: toErrorCause(error) });
236
+ }
237
+ const versions = [];
238
+ for (const file of files) {
239
+ const parsed = this.parseFileName(file);
240
+ if (parsed && parsed.id === id) {
241
+ versions.push(parsed.version);
242
+ }
243
+ }
244
+ if (versions.length === 0) {
245
+ throw new PromptNotFoundError(id);
246
+ }
247
+ versions.sort((a, b) => compareVersions(b, a));
248
+ const latestVersion = versions[0];
249
+ return this.read(id, latestVersion);
250
+ }
251
+ async write(content) {
252
+ // Invalidate cache for this id:version (before any validation)
253
+ if (this.cacheEnabled) {
254
+ this.contentCache.delete(this.getCacheKey(content.id, content.version));
255
+ }
256
+ const fileName = this.getFileName(content.id, content.version);
257
+ const filePath = path.join(this.directory, fileName);
258
+ if (!parseVersion(content.version)) {
259
+ throw new PromptInvalidFormatError(content.id, `Invalid version format: '${content.version}' (expected semver like '1.0.0')`);
260
+ }
261
+ // Validate templates can be compiled (fails fast on syntax errors)
262
+ compileTemplate(content.system, content.id);
263
+ compileTemplate(content.userTemplate, content.id);
264
+ const yamlContent = this.serializeContent(content);
265
+ try {
266
+ await this.fileSystem.writeFile(filePath, yamlContent);
267
+ }
268
+ catch (error) {
269
+ throw new PromptIOError('write', filePath, { cause: toErrorCause(error) });
270
+ }
271
+ }
272
+ }
273
+ /**
274
+ * Creates a file-based prompt repository.
275
+ *
276
+ * This is a convenience factory function. For subclassing, use `FilePromptRepository` class directly.
277
+ *
278
+ * @example
279
+ * ```typescript
280
+ * const repo = createFilePromptRepository({ directory: './prompts' });
281
+ * const prompt = await repo.read<GreetingInput>('greeting');
282
+ * ```
283
+ */
284
+ export function createFilePromptRepository(options) {
285
+ return new FilePromptRepository(options);
286
+ }
287
+ //# sourceMappingURL=file-prompt-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-prompt-repository.js","sourceRoot":"","sources":["../../src/prompt/file-prompt-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Prompt module for @agtlantis/core.
3
+ *
4
+ * Provides structured prompt management with versioning, templating, and repository abstraction.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import {
9
+ * createFilePromptRepository,
10
+ * PromptTemplate,
11
+ * type PromptRenderer,
12
+ * } from '@agtlantis/core';
13
+ *
14
+ * // Create a file-based repository
15
+ * const repo = createFilePromptRepository({ directory: './prompts' });
16
+ *
17
+ * // Read a prompt and compile to renderer
18
+ * interface SessionCtx { studentName: string }
19
+ * interface TurnCtx { answers: string[] }
20
+ *
21
+ * const data = await repo.read('greeting');
22
+ * const renderer = PromptTemplate.from(data).compile<SessionCtx, TurnCtx>();
23
+ *
24
+ * // Use the renderer
25
+ * const systemPrompt = renderer.renderSystemPrompt({ studentName: 'Kim' });
26
+ * const userPrompt = renderer.renderUserPrompt({ answers: ['A', 'B'] });
27
+ * ```
28
+ */
29
+ export type { PromptTemplateData, PromptRenderer, PromptRepository, FileSystem } from './types.js';
30
+ export { PromptTemplate } from './prompt-template.js';
31
+ export { PromptErrorCode, PromptError, PromptNotFoundError, PromptInvalidFormatError, PromptTemplateError, PromptIOError, type PromptErrorOptions, } from './errors.js';
32
+ export { compileTemplate } from './template.js';
33
+ export { FilePromptRepository, createFilePromptRepository, type FilePromptRepositoryOptions, } from './file-prompt-repository.js';
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompt/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EACH,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,KAAK,kBAAkB,GAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EACH,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,2BAA2B,GACnC,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Prompt module for @agtlantis/core.
3
+ *
4
+ * Provides structured prompt management with versioning, templating, and repository abstraction.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import {
9
+ * createFilePromptRepository,
10
+ * PromptTemplate,
11
+ * type PromptRenderer,
12
+ * } from '@agtlantis/core';
13
+ *
14
+ * // Create a file-based repository
15
+ * const repo = createFilePromptRepository({ directory: './prompts' });
16
+ *
17
+ * // Read a prompt and compile to renderer
18
+ * interface SessionCtx { studentName: string }
19
+ * interface TurnCtx { answers: string[] }
20
+ *
21
+ * const data = await repo.read('greeting');
22
+ * const renderer = PromptTemplate.from(data).compile<SessionCtx, TurnCtx>();
23
+ *
24
+ * // Use the renderer
25
+ * const systemPrompt = renderer.renderSystemPrompt({ studentName: 'Kim' });
26
+ * const userPrompt = renderer.renderUserPrompt({ answers: ['A', 'B'] });
27
+ * ```
28
+ */
29
+ // PromptTemplate class
30
+ export { PromptTemplate } from './prompt-template.js';
31
+ // Errors
32
+ export { PromptErrorCode, PromptError, PromptNotFoundError, PromptInvalidFormatError, PromptTemplateError, PromptIOError, } from './errors.js';
33
+ // Template utilities
34
+ export { compileTemplate } from './template.js';
35
+ // Repository implementations
36
+ export { FilePromptRepository, createFilePromptRepository, } from './file-prompt-repository.js';
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompt/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,uBAAuB;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,SAAS;AACT,OAAO,EACH,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,GAEhB,MAAM,aAAa,CAAC;AAErB,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,6BAA6B;AAC7B,OAAO,EACH,oBAAoB,EACpB,0BAA0B,GAE7B,MAAM,6BAA6B,CAAC"}