iranti 0.2.51 → 0.3.2

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 (163) hide show
  1. package/README.md +30 -17
  2. package/dist/scripts/api-key-create.js +1 -1
  3. package/dist/scripts/api-key-list.js +1 -1
  4. package/dist/scripts/api-key-revoke.js +1 -1
  5. package/dist/scripts/claude-code-memory-hook.js +116 -30
  6. package/dist/scripts/codex-setup.js +86 -4
  7. package/dist/scripts/iranti-cli.js +1359 -57
  8. package/dist/scripts/iranti-mcp.js +578 -75
  9. package/dist/scripts/seed.js +11 -6
  10. package/dist/scripts/setup.js +1 -1
  11. package/dist/src/api/healthChecks.d.ts +29 -0
  12. package/dist/src/api/healthChecks.d.ts.map +1 -0
  13. package/dist/src/api/healthChecks.js +72 -0
  14. package/dist/src/api/healthChecks.js.map +1 -0
  15. package/dist/src/api/middleware/validation.d.ts +22 -0
  16. package/dist/src/api/middleware/validation.d.ts.map +1 -1
  17. package/dist/src/api/middleware/validation.js +93 -3
  18. package/dist/src/api/middleware/validation.js.map +1 -1
  19. package/dist/src/api/routes/knowledge.d.ts.map +1 -1
  20. package/dist/src/api/routes/knowledge.js +53 -0
  21. package/dist/src/api/routes/knowledge.js.map +1 -1
  22. package/dist/src/api/routes/memory.d.ts.map +1 -1
  23. package/dist/src/api/routes/memory.js +73 -9
  24. package/dist/src/api/routes/memory.js.map +1 -1
  25. package/dist/src/api/server.js +38 -43
  26. package/dist/src/api/server.js.map +1 -1
  27. package/dist/src/attendant/AttendantInstance.d.ts +135 -2
  28. package/dist/src/attendant/AttendantInstance.d.ts.map +1 -1
  29. package/dist/src/attendant/AttendantInstance.js +1836 -93
  30. package/dist/src/attendant/AttendantInstance.js.map +1 -1
  31. package/dist/src/attendant/index.d.ts +1 -1
  32. package/dist/src/attendant/index.d.ts.map +1 -1
  33. package/dist/src/attendant/index.js +1 -1
  34. package/dist/src/attendant/index.js.map +1 -1
  35. package/dist/src/attendant/registry.d.ts.map +1 -1
  36. package/dist/src/attendant/registry.js +2 -0
  37. package/dist/src/attendant/registry.js.map +1 -1
  38. package/dist/src/chat/index.d.ts +23 -0
  39. package/dist/src/chat/index.d.ts.map +1 -1
  40. package/dist/src/chat/index.js +111 -22
  41. package/dist/src/chat/index.js.map +1 -1
  42. package/dist/src/generated/prisma/browser.d.ts +5 -0
  43. package/dist/src/generated/prisma/browser.d.ts.map +1 -1
  44. package/dist/src/generated/prisma/client.d.ts +5 -0
  45. package/dist/src/generated/prisma/client.d.ts.map +1 -1
  46. package/dist/src/generated/prisma/commonInputTypes.d.ts +48 -0
  47. package/dist/src/generated/prisma/commonInputTypes.d.ts.map +1 -1
  48. package/dist/src/generated/prisma/internal/class.d.ts +11 -0
  49. package/dist/src/generated/prisma/internal/class.d.ts.map +1 -1
  50. package/dist/src/generated/prisma/internal/class.js +4 -4
  51. package/dist/src/generated/prisma/internal/class.js.map +1 -1
  52. package/dist/src/generated/prisma/internal/prismaNamespace.d.ts +92 -1
  53. package/dist/src/generated/prisma/internal/prismaNamespace.d.ts.map +1 -1
  54. package/dist/src/generated/prisma/internal/prismaNamespace.js +17 -2
  55. package/dist/src/generated/prisma/internal/prismaNamespace.js.map +1 -1
  56. package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.d.ts +16 -0
  57. package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.d.ts.map +1 -1
  58. package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.js +17 -2
  59. package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.js.map +1 -1
  60. package/dist/src/generated/prisma/models/StaffEvent.d.ts +1184 -0
  61. package/dist/src/generated/prisma/models/StaffEvent.d.ts.map +1 -0
  62. package/dist/src/generated/prisma/models/StaffEvent.js +3 -0
  63. package/dist/src/generated/prisma/models/StaffEvent.js.map +1 -0
  64. package/dist/src/generated/prisma/models.d.ts +1 -0
  65. package/dist/src/generated/prisma/models.d.ts.map +1 -1
  66. package/dist/src/lib/assistantCheckpoint.d.ts +21 -0
  67. package/dist/src/lib/assistantCheckpoint.d.ts.map +1 -0
  68. package/dist/src/lib/assistantCheckpoint.js +143 -0
  69. package/dist/src/lib/assistantCheckpoint.js.map +1 -0
  70. package/dist/src/lib/autoRemember.d.ts +15 -0
  71. package/dist/src/lib/autoRemember.d.ts.map +1 -1
  72. package/dist/src/lib/autoRemember.js +433 -71
  73. package/dist/src/lib/autoRemember.js.map +1 -1
  74. package/dist/src/lib/cliHelpCatalog.d.ts.map +1 -1
  75. package/dist/src/lib/cliHelpCatalog.js +23 -11
  76. package/dist/src/lib/cliHelpCatalog.js.map +1 -1
  77. package/dist/src/lib/cliHelpRenderer.d.ts +1 -0
  78. package/dist/src/lib/cliHelpRenderer.d.ts.map +1 -1
  79. package/dist/src/lib/cliHelpRenderer.js +4 -0
  80. package/dist/src/lib/cliHelpRenderer.js.map +1 -1
  81. package/dist/src/lib/commandErrors.d.ts +5 -1
  82. package/dist/src/lib/commandErrors.d.ts.map +1 -1
  83. package/dist/src/lib/commandErrors.js +250 -17
  84. package/dist/src/lib/commandErrors.js.map +1 -1
  85. package/dist/src/lib/createFirstPartyIranti.d.ts.map +1 -1
  86. package/dist/src/lib/createFirstPartyIranti.js +1 -0
  87. package/dist/src/lib/createFirstPartyIranti.js.map +1 -1
  88. package/dist/src/lib/dbStaffEventEmitter.d.ts +2 -0
  89. package/dist/src/lib/dbStaffEventEmitter.d.ts.map +1 -1
  90. package/dist/src/lib/dbStaffEventEmitter.js +15 -0
  91. package/dist/src/lib/dbStaffEventEmitter.js.map +1 -1
  92. package/dist/src/lib/hostMemoryFormatting.d.ts +25 -0
  93. package/dist/src/lib/hostMemoryFormatting.d.ts.map +1 -0
  94. package/dist/src/lib/hostMemoryFormatting.js +55 -0
  95. package/dist/src/lib/hostMemoryFormatting.js.map +1 -0
  96. package/dist/src/lib/issueFacts.d.ts +37 -0
  97. package/dist/src/lib/issueFacts.d.ts.map +1 -0
  98. package/dist/src/lib/issueFacts.js +72 -0
  99. package/dist/src/lib/issueFacts.js.map +1 -0
  100. package/dist/src/lib/llm.d.ts +8 -0
  101. package/dist/src/lib/llm.d.ts.map +1 -1
  102. package/dist/src/lib/llm.js +33 -0
  103. package/dist/src/lib/llm.js.map +1 -1
  104. package/dist/src/lib/packageRoot.d.ts +2 -0
  105. package/dist/src/lib/packageRoot.d.ts.map +1 -0
  106. package/dist/src/lib/packageRoot.js +22 -0
  107. package/dist/src/lib/packageRoot.js.map +1 -0
  108. package/dist/src/lib/projectLearning.d.ts +21 -0
  109. package/dist/src/lib/projectLearning.d.ts.map +1 -0
  110. package/dist/src/lib/projectLearning.js +357 -0
  111. package/dist/src/lib/projectLearning.js.map +1 -0
  112. package/dist/src/lib/protocolEnforcement.d.ts +29 -0
  113. package/dist/src/lib/protocolEnforcement.d.ts.map +1 -0
  114. package/dist/src/lib/protocolEnforcement.js +124 -0
  115. package/dist/src/lib/protocolEnforcement.js.map +1 -0
  116. package/dist/src/lib/providers/claude.js +1 -1
  117. package/dist/src/lib/providers/claude.js.map +1 -1
  118. package/dist/src/lib/router.js +1 -1
  119. package/dist/src/lib/router.js.map +1 -1
  120. package/dist/src/lib/runtimeEnv.d.ts.map +1 -1
  121. package/dist/src/lib/runtimeEnv.js +8 -3
  122. package/dist/src/lib/runtimeEnv.js.map +1 -1
  123. package/dist/src/lib/scaffoldCloseout.d.ts +27 -0
  124. package/dist/src/lib/scaffoldCloseout.d.ts.map +1 -0
  125. package/dist/src/lib/scaffoldCloseout.js +139 -0
  126. package/dist/src/lib/scaffoldCloseout.js.map +1 -0
  127. package/dist/src/lib/semanticFactTags.d.ts +10 -0
  128. package/dist/src/lib/semanticFactTags.d.ts.map +1 -0
  129. package/dist/src/lib/semanticFactTags.js +166 -0
  130. package/dist/src/lib/semanticFactTags.js.map +1 -0
  131. package/dist/src/lib/sessionLedger.d.ts +94 -0
  132. package/dist/src/lib/sessionLedger.d.ts.map +1 -0
  133. package/dist/src/lib/sessionLedger.js +997 -0
  134. package/dist/src/lib/sessionLedger.js.map +1 -0
  135. package/dist/src/lib/sharedStateInvalidation.d.ts +10 -0
  136. package/dist/src/lib/sharedStateInvalidation.d.ts.map +1 -0
  137. package/dist/src/lib/sharedStateInvalidation.js +184 -0
  138. package/dist/src/lib/sharedStateInvalidation.js.map +1 -0
  139. package/dist/src/lib/staffEventsTable.d.ts +3 -0
  140. package/dist/src/lib/staffEventsTable.d.ts.map +1 -0
  141. package/dist/src/lib/staffEventsTable.js +58 -0
  142. package/dist/src/lib/staffEventsTable.js.map +1 -0
  143. package/dist/src/librarian/index.d.ts.map +1 -1
  144. package/dist/src/librarian/index.js +113 -2
  145. package/dist/src/librarian/index.js.map +1 -1
  146. package/dist/src/library/client.d.ts +6 -1
  147. package/dist/src/library/client.d.ts.map +1 -1
  148. package/dist/src/library/client.js +21 -7
  149. package/dist/src/library/client.js.map +1 -1
  150. package/dist/src/library/embeddings.d.ts +9 -1
  151. package/dist/src/library/embeddings.d.ts.map +1 -1
  152. package/dist/src/library/embeddings.js +28 -3
  153. package/dist/src/library/embeddings.js.map +1 -1
  154. package/dist/src/library/queries.d.ts.map +1 -1
  155. package/dist/src/library/queries.js +263 -46
  156. package/dist/src/library/queries.js.map +1 -1
  157. package/dist/src/sdk/index.d.ts +52 -1
  158. package/dist/src/sdk/index.d.ts.map +1 -1
  159. package/dist/src/sdk/index.js +546 -98
  160. package/dist/src/sdk/index.js.map +1 -1
  161. package/package.json +24 -3
  162. package/prisma/migrations/20260331101500_add_staff_events_ledger/migration.sql +24 -0
  163. package/prisma/schema.prisma +22 -0
@@ -7,28 +7,261 @@ function normalizeErrorMessage(error) {
7
7
  }
8
8
  return String(error);
9
9
  }
10
+ function commandError(code, message, hints = []) {
11
+ return Object.assign(new Error(message), { code, hints });
12
+ }
13
+ const REWRITE_RULES = [
14
+ {
15
+ code: 'IRANTI_DATABASE_SCHEMA_MISMATCH',
16
+ test: (message) => /does not exist in the current database/i.test(message)
17
+ || /relation .* does not exist/i.test(message)
18
+ || /column .* does not exist/i.test(message)
19
+ || /table .* does not exist/i.test(message),
20
+ build: (commandLabel, message) => ({
21
+ message: `${commandLabel} cannot run because the database schema is behind the current Iranti code. `
22
+ + `${message} Apply migrations with \`npx prisma migrate deploy --schema prisma/schema.prisma\` `
23
+ + 'and regenerate the Prisma client with `npm run prisma:generate`.',
24
+ hints: [
25
+ 'Run `npx prisma migrate deploy --schema prisma/schema.prisma`.',
26
+ 'Run `npm run prisma:generate` after migrations complete.',
27
+ ],
28
+ }),
29
+ },
30
+ {
31
+ code: 'IRANTI_DATABASE_UNREACHABLE',
32
+ test: (message, rawCode) => rawCode === 'ECONNREFUSED'
33
+ || rawCode === 'ETIMEDOUT'
34
+ || /can\'t reach database server/i.test(message)
35
+ || /database .* unreachable/i.test(message)
36
+ || /connect ECONNREFUSED/i.test(message),
37
+ build: (commandLabel) => ({
38
+ message: `${commandLabel} cannot reach the configured PostgreSQL database. `
39
+ + 'Verify that the database server is running, confirm `DATABASE_URL`, '
40
+ + 'and rerun the command or use `iranti doctor --debug` for a deeper check.',
41
+ hints: [
42
+ 'Verify that PostgreSQL is running and reachable from this machine.',
43
+ 'Confirm `DATABASE_URL` points at the intended instance.',
44
+ 'Use `iranti doctor --debug` for a deeper operator check.',
45
+ ],
46
+ }),
47
+ },
48
+ {
49
+ code: 'IRANTI_SCOPE_INVALID',
50
+ test: (message) => /^Invalid scope '.*'\. Use --scope user or --scope system\.$/i.test(message),
51
+ build: () => ({
52
+ message: 'Invalid scope. Use `--scope user` or `--scope system`.',
53
+ hints: [
54
+ 'Retry with `--scope user` for the current user runtime root.',
55
+ 'Retry with `--scope system` for the shared machine runtime root.',
56
+ ],
57
+ }),
58
+ },
59
+ {
60
+ code: 'IRANTI_BOOLEAN_VALUE_INVALID',
61
+ test: (message) => /must be true\/false, yes\/no, on\/off, or 1\/0\.$/i.test(message)
62
+ || /must be a boolean or boolean-like string\.$/i.test(message),
63
+ build: (_commandLabel, message) => ({
64
+ message,
65
+ hints: ['Use one of: `true`, `false`, `yes`, `no`, `on`, `off`, `1`, or `0`.'],
66
+ }),
67
+ },
68
+ {
69
+ code: 'IRANTI_INTEGER_VALUE_INVALID',
70
+ test: (message) => /must be a positive integer\.$/i.test(message)
71
+ || /^Invalid --port '.*'\.$/i.test(message)
72
+ || /^Invalid --docker-health-port '.*'\.$/i.test(message)
73
+ || /^Invalid setup config port:/i.test(message),
74
+ build: (_commandLabel, message) => ({
75
+ message,
76
+ hints: ['Use a positive integer value.'],
77
+ }),
78
+ },
79
+ {
80
+ code: 'IRANTI_INSTANCE_NAME_REQUIRED',
81
+ test: (message) => /^Missing instance name\./i.test(message) || /^Missing --instance <name>\./i.test(message),
82
+ build: (_commandLabel, message) => ({
83
+ message,
84
+ hints: ['Run `iranti instance list` to see configured instances.'],
85
+ }),
86
+ },
87
+ {
88
+ code: 'IRANTI_INSTANCE_EXISTS',
89
+ test: (message) => /^Instance '.*' already exists at .*Use --force to overwrite\.$/i.test(message),
90
+ build: (_commandLabel, message) => ({
91
+ message,
92
+ hints: ['Re-run with `--force` only if overwriting the existing instance is intentional.'],
93
+ }),
94
+ },
95
+ {
96
+ code: 'IRANTI_PROVIDER_KEY_UNSUPPORTED',
97
+ test: (message) => /^Provider '.*' does not use a remote API key\.$/i.test(message),
98
+ build: (_commandLabel, message) => ({
99
+ message,
100
+ hints: ['Remove `--provider-key` or choose a remote provider such as `openai`, `claude`, or `gemini`.'],
101
+ }),
102
+ },
103
+ {
104
+ code: 'IRANTI_PROJECT_BINDING_INPUT_REQUIRED',
105
+ test: (message) => /^Unable to determine IRANTI_URL\./i.test(message)
106
+ || /^Unable to determine IRANTI_API_KEY\./i.test(message),
107
+ build: (_commandLabel, message) => ({
108
+ message,
109
+ hints: [
110
+ 'Provide `--instance <name>` to derive the binding from a local instance.',
111
+ 'Or pass explicit `--url` and `--api-key` values.',
112
+ ],
113
+ }),
114
+ },
115
+ {
116
+ code: 'IRANTI_CONFIGURE_NO_CHANGES',
117
+ test: (message) => /^No changes provided\./i.test(message),
118
+ build: (_commandLabel, message) => ({
119
+ message,
120
+ hints: ['Pass at least one update flag or use `--interactive` for guided repair.'],
121
+ }),
122
+ },
123
+ {
124
+ code: 'IRANTI_AUTH_ARGUMENTS_REQUIRED',
125
+ test: (message) => /^Missing --key-id or --owner\.$/i.test(message)
126
+ || /^Missing --instance <name> or --key-id <id>\./i.test(message),
127
+ build: (_commandLabel, message) => ({
128
+ message,
129
+ hints: ['Supply the required auth flags before retrying.'],
130
+ }),
131
+ },
132
+ {
133
+ code: 'IRANTI_INSTANCE_DATABASE_PLACEHOLDER',
134
+ test: (message) => /still has a placeholder DATABASE_URL/i.test(message),
135
+ build: (_commandLabel, message) => ({
136
+ message,
137
+ hints: [
138
+ 'Update the instance `.env` with a real PostgreSQL connection string.',
139
+ 'Use `iranti configure instance <name> --interactive` to repair the instance env.',
140
+ ],
141
+ }),
142
+ },
143
+ {
144
+ code: 'IRANTI_API_KEY_NOT_FOUND',
145
+ test: (message) => /^API key not found:/i.test(message),
146
+ build: (_commandLabel, message) => ({
147
+ message,
148
+ hints: ['Run `iranti auth list-keys --instance <name>` to inspect the current registry keys.'],
149
+ }),
150
+ },
151
+ {
152
+ code: 'IRANTI_ATTEND_MESSAGE_REQUIRED',
153
+ test: (message) => /^Missing latest message\./i.test(message),
154
+ build: (_commandLabel, message) => ({
155
+ message,
156
+ hints: ['Pass the message positionally or with `--message <text>`.'],
157
+ }),
158
+ },
159
+ {
160
+ code: 'IRANTI_TASK_ENTITY_REQUIRED',
161
+ test: (message) => /^Missing task entity\./i.test(message),
162
+ build: (_commandLabel, message) => ({
163
+ message,
164
+ hints: ['Pass a task entity like `task/runtime_verification` before retrying.'],
165
+ }),
166
+ },
167
+ {
168
+ code: 'IRANTI_ISSUE_ENTITY_REQUIRED',
169
+ test: (message) => /^Missing issue entity\./i.test(message),
170
+ build: (_commandLabel, message) => ({
171
+ message,
172
+ hints: ['Pass `--entity <entityType/entityId>` or run from a bound project with `IRANTI_MEMORY_ENTITY`.'],
173
+ }),
174
+ },
175
+ {
176
+ code: 'IRANTI_ENTITY_FORMAT_INVALID',
177
+ test: (message) => /must use entityType\/entityId format\.$/i.test(message),
178
+ build: (_commandLabel, message) => ({
179
+ message,
180
+ hints: ['Use the canonical `entityType/entityId` format such as `project/iranti`.'],
181
+ }),
182
+ },
183
+ {
184
+ code: 'IRANTI_ISSUE_STATUS_INVALID',
185
+ test: (message) => /^Invalid --status '.*'\. Use open or resolved\.$/i.test(message),
186
+ build: (_commandLabel, message) => ({
187
+ message,
188
+ hints: ['Use `--status open` or `--status resolved`.'],
189
+ }),
190
+ },
191
+ {
192
+ code: 'IRANTI_HANDOFF_NEXT_STEP_REQUIRED',
193
+ test: (message) => /^Missing --next-step\./i.test(message),
194
+ build: (_commandLabel, message) => ({
195
+ message,
196
+ hints: ['Pass `--next-step <text>` so the receiving agent has a concrete action.'],
197
+ }),
198
+ },
199
+ {
200
+ code: 'IRANTI_CONFIDENCE_INVALID',
201
+ test: (message) => /^confidence must be <= 100\.$/i.test(message),
202
+ build: (_commandLabel, message) => ({
203
+ message,
204
+ hints: ['Use an integer confidence between 1 and 100.'],
205
+ }),
206
+ },
207
+ {
208
+ code: 'IRANTI_PROJECT_MODE_INVALID',
209
+ test: (message) => /^Invalid project mode '.*'\. Use isolated or shared\.$/i.test(message),
210
+ build: (_commandLabel, message) => ({
211
+ message,
212
+ hints: ['Use `isolated` for one-project-per-instance or `shared` for intentional cross-project memory.'],
213
+ }),
214
+ },
215
+ {
216
+ code: 'IRANTI_DATABASE_INTENT_INVALID',
217
+ test: (message) => /^Invalid --db-intent '.*'\. Use dedicated, shared, or external\.$/i.test(message),
218
+ build: (_commandLabel, message) => ({
219
+ message,
220
+ hints: ['Use `dedicated`, `shared`, or `external`.'],
221
+ }),
222
+ },
223
+ {
224
+ code: 'IRANTI_DOCKER_DEPENDENCY_INVALID',
225
+ test: (message) => /^--docker-health-port requires --docker-container <name>\.$/i.test(message),
226
+ build: (_commandLabel, message) => ({
227
+ message,
228
+ hints: ['Pass `--docker-container <name>` together with `--docker-health-port <port>`.'],
229
+ }),
230
+ },
231
+ {
232
+ code: 'IRANTI_UNKNOWN_SUBCOMMAND',
233
+ test: (message) => /^Unknown instance subcommand /i.test(message)
234
+ || /^Unknown configure subcommand /i.test(message)
235
+ || /^Unknown auth subcommand /i.test(message)
236
+ || /^Unknown integrate target /i.test(message),
237
+ build: (_commandLabel, message) => ({
238
+ message,
239
+ hints: ['Run `iranti help` or `iranti <command> --help` to see the supported subcommands.'],
240
+ }),
241
+ },
242
+ ];
10
243
  function rewriteCommandError(commandLabel, error) {
244
+ if (error && typeof error === 'object' && 'code' in error && typeof error.code === 'string') {
245
+ const code = String(error.code ?? '');
246
+ if (error instanceof Error
247
+ && code.startsWith('IRANTI_')
248
+ && Array.isArray(error.hints)) {
249
+ return error;
250
+ }
251
+ }
11
252
  const message = normalizeErrorMessage(error);
12
- const code = error && typeof error === 'object' && 'code' in error
253
+ const rawCode = error && typeof error === 'object' && 'code' in error
13
254
  ? String(error.code ?? '')
14
255
  : '';
15
- if (/does not exist in the current database/i.test(message)
16
- || /relation .* does not exist/i.test(message)
17
- || /column .* does not exist/i.test(message)
18
- || /table .* does not exist/i.test(message)) {
19
- return new Error(`${commandLabel} cannot run because the database schema is behind the current Iranti code. `
20
- + `${message} Apply migrations with \`npx prisma migrate deploy --schema prisma/schema.prisma\` `
21
- + 'and regenerate the Prisma client with `npm run prisma:generate`.');
256
+ for (const rule of REWRITE_RULES) {
257
+ if (rule.test(message, rawCode)) {
258
+ const rewritten = rule.build(commandLabel, message);
259
+ return commandError(rule.code, rewritten.message, rewritten.hints ?? []);
260
+ }
22
261
  }
23
- if (code === 'ECONNREFUSED'
24
- || code === 'ETIMEDOUT'
25
- || /can't reach database server/i.test(message)
26
- || /database .* unreachable/i.test(message)
27
- || /connect ECONNREFUSED/i.test(message)) {
28
- return new Error(`${commandLabel} cannot reach the configured PostgreSQL database. `
29
- + 'Verify that the database server is running, confirm `DATABASE_URL`, '
30
- + 'and rerun the command or use `iranti doctor --debug` for a deeper check.');
262
+ if (error instanceof Error) {
263
+ return Object.assign(error, { code: rawCode || 'IRANTI_COMMAND_FAILED', hints: [] });
31
264
  }
32
- return error instanceof Error ? error : new Error(message);
265
+ return commandError('IRANTI_COMMAND_FAILED', message, []);
33
266
  }
34
267
  //# sourceMappingURL=commandErrors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commandErrors.js","sourceRoot":"","sources":["../../../src/lib/commandErrors.ts"],"names":[],"mappings":";;AAOA,kDAiCC;AAxCD,SAAS,qBAAqB,CAAC,KAAc;IACzC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,OAAO,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,mBAAmB,CAAC,YAAoB,EAAE,KAAc;IACpE,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;QAC9D,CAAC,CAAC,MAAM,CAAE,KAA4B,CAAC,IAAI,IAAI,EAAE,CAAC;QAClD,CAAC,CAAC,EAAE,CAAC;IACT,IACI,yCAAyC,CAAC,IAAI,CAAC,OAAO,CAAC;WACpD,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC;WAC3C,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC;WACzC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,EAC7C,CAAC;QACC,OAAO,IAAI,KAAK,CACZ,GAAG,YAAY,6EAA6E;cAC1F,GAAG,OAAO,qFAAqF;cAC/F,kEAAkE,CACvE,CAAC;IACN,CAAC;IAED,IACI,IAAI,KAAK,cAAc;WACpB,IAAI,KAAK,WAAW;WACpB,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC;WAC5C,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC;WACxC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,EAC1C,CAAC;QACC,OAAO,IAAI,KAAK,CACZ,GAAG,YAAY,oDAAoD;cACjE,sEAAsE;cACtE,0EAA0E,CAC/E,CAAC;IACN,CAAC;IAED,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"commandErrors.js","sourceRoot":"","sources":["../../../src/lib/commandErrors.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"createFirstPartyIranti.d.ts","sourceRoot":"","sources":["../../../src/lib/createFirstPartyIranti.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAG9C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAKnE"}
1
+ {"version":3,"file":"createFirstPartyIranti.d.ts","sourceRoot":"","sources":["../../../src/lib/createFirstPartyIranti.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAG9C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAMnE"}
@@ -6,6 +6,7 @@ const dbStaffEventEmitter_1 = require("./dbStaffEventEmitter");
6
6
  function createFirstPartyIranti(config) {
7
7
  return new sdk_1.Iranti({
8
8
  ...config,
9
+ protocolEnforcement: config.protocolEnforcement ?? 'strict',
9
10
  staffEventEmitter: config.staffEventEmitter ?? new dbStaffEventEmitter_1.DbStaffEventEmitter(),
10
11
  });
11
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createFirstPartyIranti.js","sourceRoot":"","sources":["../../../src/lib/createFirstPartyIranti.ts"],"names":[],"mappings":";;AAGA,wDAKC;AARD,gCAA8C;AAC9C,+DAA4D;AAE5D,SAAgB,sBAAsB,CAAC,MAAoB;IACvD,OAAO,IAAI,YAAM,CAAC;QACd,GAAG,MAAM;QACT,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI,yCAAmB,EAAE;KAC3E,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"createFirstPartyIranti.js","sourceRoot":"","sources":["../../../src/lib/createFirstPartyIranti.ts"],"names":[],"mappings":";;AAGA,wDAMC;AATD,gCAA8C;AAC9C,+DAA4D;AAE5D,SAAgB,sBAAsB,CAAC,MAAoB;IACvD,OAAO,IAAI,YAAM,CAAC;QACd,GAAG,MAAM;QACT,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,QAAQ;QAC3D,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI,yCAAmB,EAAE;KAC3E,CAAC,CAAC;AACP,CAAC"}
@@ -2,8 +2,10 @@ import { IStaffEventEmitter } from './staffEventEmitter';
2
2
  export declare class DbStaffEventEmitter implements IStaffEventEmitter {
3
3
  private warnedTableMissing;
4
4
  private pending;
5
+ private bootstrapAttempted;
5
6
  emit(input: Parameters<IStaffEventEmitter['emit']>[0]): void;
6
7
  flush(): Promise<void>;
7
8
  private insertEvent;
9
+ private executeInsert;
8
10
  }
9
11
  //# sourceMappingURL=dbStaffEventEmitter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dbStaffEventEmitter.d.ts","sourceRoot":"","sources":["../../../src/lib/dbStaffEventEmitter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,kBAAkB,EAAc,MAAM,qBAAqB,CAAC;AAWtF,qBAAa,mBAAoB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,OAAO,CAA4B;IAE3C,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAqBtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAMd,WAAW;CAiC5B"}
1
+ {"version":3,"file":"dbStaffEventEmitter.d.ts","sourceRoot":"","sources":["../../../src/lib/dbStaffEventEmitter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,kBAAkB,EAAc,MAAM,qBAAqB,CAAC;AAYtF,qBAAa,mBAAoB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,kBAAkB,CAAS;IAEnC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAqBtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAMd,WAAW;YAcX,aAAa;CAiC9B"}
@@ -4,6 +4,7 @@ exports.DbStaffEventEmitter = void 0;
4
4
  const client_1 = require("../generated/prisma/client");
5
5
  const client_2 = require("../library/client");
6
6
  const staffEventEmitter_1 = require("./staffEventEmitter");
7
+ const staffEventsTable_1 = require("./staffEventsTable");
7
8
  function isMissingStaffEventsTable(error) {
8
9
  const message = error instanceof Error ? error.message : String(error);
9
10
  return /relation ["']?staff_events["']? does not exist/i.test(message);
@@ -15,6 +16,7 @@ class DbStaffEventEmitter {
15
16
  constructor() {
16
17
  this.warnedTableMissing = false;
17
18
  this.pending = new Set();
19
+ this.bootstrapAttempted = false;
18
20
  }
19
21
  emit(input) {
20
22
  const event = (0, staffEventEmitter_1.buildStaffEvent)(input);
@@ -41,6 +43,19 @@ class DbStaffEventEmitter {
41
43
  await Promise.allSettled(pending);
42
44
  }
43
45
  async insertEvent(event) {
46
+ try {
47
+ await this.executeInsert(event);
48
+ }
49
+ catch (error) {
50
+ if (!isMissingStaffEventsTable(error) || this.bootstrapAttempted) {
51
+ throw error;
52
+ }
53
+ this.bootstrapAttempted = true;
54
+ await (0, staffEventsTable_1.ensureStaffEventsTable)();
55
+ await this.executeInsert(event);
56
+ }
57
+ }
58
+ async executeInsert(event) {
44
59
  await (0, client_2.getDb)().$executeRaw(client_1.Prisma.sql `
45
60
  INSERT INTO staff_events (
46
61
  event_id,
@@ -1 +1 @@
1
- {"version":3,"file":"dbStaffEventEmitter.js","sourceRoot":"","sources":["../../../src/lib/dbStaffEventEmitter.ts"],"names":[],"mappings":";;;AAAA,uDAAoD;AACpD,8CAA0C;AAC1C,2DAAsF;AAEtF,SAAS,yBAAyB,CAAC,KAAc;IAC7C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,iDAAiD,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,MAAa,mBAAmB;IAAhC;QACY,uBAAkB,GAAG,KAAK,CAAC;QAC3B,YAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IA8D/C,CAAC;IA5DG,IAAI,CAAC,KAAgD;QACjD,MAAM,KAAK,GAAG,IAAA,mCAAe,EAAC,KAAK,CAAC,CAAC;QAErC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;aAC/B,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,IAAI,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBAC/B,OAAO,CAAC,IAAI,CAAC,kGAAkG,CAAC,CAAC;gBACrH,CAAC;gBACD,OAAO;YACX,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,0CAA0C,KAAK,CAAC,OAAO,KAAK,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvG,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACP,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,KAAiB;QACvC,MAAM,IAAA,cAAK,GAAE,CAAC,WAAW,CACrB,eAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;sBAeA,KAAK,CAAC,OAAO;sBACb,KAAK,CAAC,SAAS;sBACf,KAAK,CAAC,cAAc;sBACpB,KAAK,CAAC,UAAU;sBAChB,KAAK,CAAC,OAAO,IAAI,IAAI;sBACrB,KAAK,CAAC,MAAM,IAAI,IAAI;sBACpB,KAAK,CAAC,UAAU,IAAI,IAAI;sBACxB,KAAK,CAAC,QAAQ,IAAI,IAAI;sBACtB,KAAK,CAAC,GAAG,IAAI,IAAI;sBACjB,KAAK,CAAC,MAAM,IAAI,IAAI;sBACpB,KAAK,CAAC,KAAK;sBACX,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;;aAE/D,CACJ,CAAC;IACN,CAAC;CACJ;AAhED,kDAgEC"}
1
+ {"version":3,"file":"dbStaffEventEmitter.js","sourceRoot":"","sources":["../../../src/lib/dbStaffEventEmitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ type HostMemoryFactInput = {
2
+ factId?: string;
3
+ entityKey: string;
4
+ summary: string;
5
+ value?: unknown;
6
+ confidence: number;
7
+ source: string;
8
+ lastUpdated?: string;
9
+ };
10
+ export type StructuredHostMemoryFact<T extends HostMemoryFactInput = HostMemoryFactInput> = T & {
11
+ factId: string;
12
+ };
13
+ type StructuredFactBlockOptions = {
14
+ title: string;
15
+ includeValues?: boolean;
16
+ introLines?: string[];
17
+ };
18
+ export declare function splitEntityKey(entityKey: string): {
19
+ entity: string;
20
+ key: string;
21
+ };
22
+ export declare function assignStructuredFactIds<T extends HostMemoryFactInput>(facts: T[]): Array<StructuredHostMemoryFact<T>>;
23
+ export declare function formatStructuredFactBlock<T extends HostMemoryFactInput>(facts: T[], options: StructuredFactBlockOptions): string;
24
+ export {};
25
+ //# sourceMappingURL=hostMemoryFormatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostMemoryFormatting.d.ts","sourceRoot":"","sources":["../../../src/lib/hostMemoryFormatting.ts"],"names":[],"mappings":"AAAA,KAAK,mBAAmB,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,IAAI,CAAC,GAAG;IAC5F,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAMF,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAajF;AAED,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAKrH;AAED,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,mBAAmB,EACnE,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,EAAE,0BAA0B,GACpC,MAAM,CA6BR"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.splitEntityKey = splitEntityKey;
4
+ exports.assignStructuredFactIds = assignStructuredFactIds;
5
+ exports.formatStructuredFactBlock = formatStructuredFactBlock;
6
+ function formatValue(value) {
7
+ return typeof value === 'string' ? value : JSON.stringify(value);
8
+ }
9
+ function splitEntityKey(entityKey) {
10
+ const segments = entityKey.split('/');
11
+ if (segments.length < 3) {
12
+ return {
13
+ entity: entityKey,
14
+ key: '',
15
+ };
16
+ }
17
+ return {
18
+ entity: `${segments[0]}/${segments[1]}`,
19
+ key: segments.slice(2).join('/'),
20
+ };
21
+ }
22
+ function assignStructuredFactIds(facts) {
23
+ return facts.map((fact, index) => ({
24
+ ...fact,
25
+ factId: fact.factId?.trim() || `F${index + 1}`,
26
+ }));
27
+ }
28
+ function formatStructuredFactBlock(facts, options) {
29
+ const structuredFacts = assignStructuredFactIds(facts);
30
+ if (structuredFacts.length === 0) {
31
+ return '';
32
+ }
33
+ const lines = [
34
+ `[${options.title}]`,
35
+ ...(options.introLines ?? [
36
+ 'REQUIRED: Prefer the injected facts below before re-inference.',
37
+ 'If an injected fact conflicts with your guess, use the injected fact.',
38
+ 'Fact IDs are stable only within this block.',
39
+ ]),
40
+ 'FACTS:',
41
+ ];
42
+ for (const fact of structuredFacts) {
43
+ const identity = splitEntityKey(fact.entityKey);
44
+ lines.push(`- ${fact.factId} | entity=${identity.entity} | key=${identity.key || '(none)'} | confidence=${fact.confidence} | source=${fact.source}`);
45
+ lines.push(` summary: ${fact.summary}`);
46
+ if (options.includeValues && fact.value !== undefined) {
47
+ lines.push(` value: ${formatValue(fact.value)}`);
48
+ }
49
+ if (fact.lastUpdated) {
50
+ lines.push(` last_updated: ${fact.lastUpdated}`);
51
+ }
52
+ }
53
+ return lines.join('\n');
54
+ }
55
+ //# sourceMappingURL=hostMemoryFormatting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostMemoryFormatting.js","sourceRoot":"","sources":["../../../src/lib/hostMemoryFormatting.ts"],"names":[],"mappings":";;AAwBA,wCAaC;AAED,0DAKC;AAED,8DAgCC;AA1DD,SAAS,WAAW,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,SAAgB,cAAc,CAAC,SAAiB;IAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO;YACH,MAAM,EAAE,SAAS;YACjB,GAAG,EAAE,EAAE;SACV,CAAC;IACN,CAAC;IAED,OAAO;QACH,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;QACvC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KACnC,CAAC;AACN,CAAC;AAED,SAAgB,uBAAuB,CAAgC,KAAU;IAC7E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/B,GAAG,IAAI;QACP,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE;KACjD,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAgB,yBAAyB,CACrC,KAAU,EACV,OAAmC;IAEnC,MAAM,eAAe,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG;QACV,IAAI,OAAO,CAAC,KAAK,GAAG;QACpB,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI;YACtB,gEAAgE;YAChE,uEAAuE;YACvE,6CAA6C;SAChD,CAAC;QACF,QAAQ;KACX,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,aAAa,QAAQ,CAAC,MAAM,UAAU,QAAQ,CAAC,GAAG,IAAI,QAAQ,iBAAiB,IAAI,CAAC,UAAU,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACrJ,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,YAAY,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,37 @@
1
+ export type IssueStatus = 'open' | 'resolved';
2
+ export type IssueSeverity = 'low' | 'medium' | 'high' | 'critical';
3
+ export type IssueFactInput = {
4
+ entity: string;
5
+ issueId: string;
6
+ title: string;
7
+ status: IssueStatus;
8
+ summary: string;
9
+ confidence: number;
10
+ source: string;
11
+ agent: string;
12
+ severity?: IssueSeverity;
13
+ details?: unknown;
14
+ discoveredAt?: string;
15
+ resolvedAt?: string;
16
+ resolution?: string;
17
+ tags?: string[];
18
+ validFrom?: Date;
19
+ requestId?: string;
20
+ properties?: Record<string, unknown>;
21
+ };
22
+ export declare function issueFactKey(issueId: string): string;
23
+ export declare function buildIssueFactValue(input: IssueFactInput): Record<string, unknown>;
24
+ export declare function buildIssueFactProperties(input: IssueFactInput): Record<string, unknown>;
25
+ export declare function buildIssueFactWrite(input: IssueFactInput): {
26
+ entity: string;
27
+ key: string;
28
+ value: Record<string, unknown>;
29
+ summary: string;
30
+ confidence: number;
31
+ source: string;
32
+ agent: string;
33
+ validFrom: Date | undefined;
34
+ requestId: string | undefined;
35
+ properties: Record<string, unknown>;
36
+ };
37
+ //# sourceMappingURL=issueFacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issueFacts.d.ts","sourceRoot":"","sources":["../../../src/lib/issueFacts.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAC9C,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEnE,MAAM,MAAM,cAAc,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC,CAAC;AAcF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAalF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBvF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc;;;;;;;;;;;EAaxD"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.issueFactKey = issueFactKey;
4
+ exports.buildIssueFactValue = buildIssueFactValue;
5
+ exports.buildIssueFactProperties = buildIssueFactProperties;
6
+ exports.buildIssueFactWrite = buildIssueFactWrite;
7
+ const semanticFactTags_1 = require("./semanticFactTags");
8
+ function normalizeIssueToken(value) {
9
+ const normalized = value
10
+ .trim()
11
+ .toLowerCase()
12
+ .replace(/[^a-z0-9]+/g, '_')
13
+ .replace(/^_+|_+$/g, '');
14
+ if (!normalized) {
15
+ throw new Error('issueId must contain at least one alphanumeric character.');
16
+ }
17
+ return normalized;
18
+ }
19
+ function issueFactKey(issueId) {
20
+ return `issue_${normalizeIssueToken(issueId)}`;
21
+ }
22
+ function buildIssueFactValue(input) {
23
+ return {
24
+ issueId: normalizeIssueToken(input.issueId),
25
+ title: input.title.trim(),
26
+ status: input.status,
27
+ severity: input.severity ?? 'medium',
28
+ summary: input.summary.trim(),
29
+ details: input.details ?? null,
30
+ discoveredAt: input.discoveredAt ?? null,
31
+ resolvedAt: input.status === 'resolved' ? (input.resolvedAt ?? null) : null,
32
+ resolution: input.status === 'resolved' ? (input.resolution ?? null) : null,
33
+ tags: Array.from(new Set((input.tags ?? []).map((tag) => tag.trim()).filter(Boolean))),
34
+ };
35
+ }
36
+ function buildIssueFactProperties(input) {
37
+ const issueId = normalizeIssueToken(input.issueId);
38
+ const mergeStrategy = 'replace';
39
+ return {
40
+ memoryScope: 'project',
41
+ capturePhase: 'manual',
42
+ durableClass: 'issue_status',
43
+ canonicalKey: issueFactKey(input.issueId),
44
+ mergeStrategy,
45
+ issueId,
46
+ issueStatus: input.status,
47
+ issueSeverity: input.severity ?? 'medium',
48
+ issueTitle: input.title.trim(),
49
+ ...(0, semanticFactTags_1.buildSemanticFactTags)({
50
+ memoryScope: 'project',
51
+ durableClass: 'issue_status',
52
+ mergeStrategy,
53
+ extraTags: ['issue', input.status, input.severity ?? 'medium', ...(input.tags ?? [])],
54
+ }),
55
+ ...(input.properties ?? {}),
56
+ };
57
+ }
58
+ function buildIssueFactWrite(input) {
59
+ return {
60
+ entity: input.entity,
61
+ key: issueFactKey(input.issueId),
62
+ value: buildIssueFactValue(input),
63
+ summary: input.summary.trim(),
64
+ confidence: input.confidence,
65
+ source: input.source,
66
+ agent: input.agent,
67
+ validFrom: input.validFrom,
68
+ requestId: input.requestId,
69
+ properties: buildIssueFactProperties(input),
70
+ };
71
+ }
72
+ //# sourceMappingURL=issueFacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issueFacts.js","sourceRoot":"","sources":["../../../src/lib/issueFacts.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,9 @@
1
+ type SessionLedgerEmitContext = {
2
+ source?: string;
3
+ host?: string | null;
4
+ agentId?: string;
5
+ operation?: string;
6
+ };
1
7
  export interface LLMMessage {
2
8
  role: 'user' | 'assistant';
3
9
  content: string;
@@ -25,6 +31,7 @@ export declare function completeWithFallback(messages: LLMMessage[], options?: {
25
31
  model?: string;
26
32
  maxTokens?: number;
27
33
  timeoutMs?: number;
34
+ ledgerContext?: SessionLedgerEmitContext;
28
35
  }): Promise<LLMResponse & {
29
36
  providerUsed: string;
30
37
  }>;
@@ -34,4 +41,5 @@ export declare function completeRouted(messages: LLMMessage[], route: {
34
41
  maxTokens?: number;
35
42
  }): Promise<LLMResponse>;
36
43
  export declare function complete(messages: LLMMessage[], maxTokens?: number): Promise<LLMResponse>;
44
+ export {};
37
45
  //# sourceMappingURL=llm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/lib/llm.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACrF;AAsCD,wBAAgB,yBAAyB,CACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,CAAC,EAAE,MAAM,GACjB,KAAK,CAsBP;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAoBpF;AAcD,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAMD,wBAAgB,MAAM,IAAI,WAAW,CAKpC;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CASrE;AA6BD,wBAAsB,oBAAoB,CACtC,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,CAAC,EAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACjG,OAAO,CAAC,WAAW,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CA+CjD;AAID,wBAAsB,cAAc,CAChC,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,OAAO,CAAC,WAAW,CAAC,CAQtB;AAED,wBAAsB,QAAQ,CAC1B,QAAQ,EAAE,UAAU,EAAE,EACtB,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,CAEtB"}
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/lib/llm.ts"],"names":[],"mappings":"AAMA,KAAK,wBAAwB,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAeF,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACrF;AAsCD,wBAAgB,yBAAyB,CACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,CAAC,EAAE,MAAM,GACjB,KAAK,CAsBP;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAoBpF;AAcD,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAMD,wBAAgB,MAAM,IAAI,WAAW,CAKpC;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CASrE;AA6BD,wBAAsB,oBAAoB,CACtC,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,CAAC,EAAE;IACN,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,wBAAwB,CAAC;CAC5C,GACF,OAAO,CAAC,WAAW,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAgFjD;AAID,wBAAsB,cAAc,CAChC,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,OAAO,CAAC,WAAW,CAAC,CAQtB;AAED,wBAAsB,QAAQ,CAC1B,QAAQ,EAAE,UAAU,EAAE,EACtB,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,CAEtB"}