@davidjinguoxu/agentcore 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +198 -0
  3. package/config/default-triggers.json +119 -0
  4. package/dist/adapters/runtime-adapter.d.ts +124 -0
  5. package/dist/adapters/runtime-adapter.d.ts.map +1 -0
  6. package/dist/adapters/runtime-adapter.js +5 -0
  7. package/dist/adapters/runtime-adapter.js.map +1 -0
  8. package/dist/config/datacore-constants.d.ts +21 -0
  9. package/dist/config/datacore-constants.d.ts.map +1 -0
  10. package/dist/config/datacore-constants.js +68 -0
  11. package/dist/config/datacore-constants.js.map +1 -0
  12. package/dist/domain/embeddable.d.ts +19 -0
  13. package/dist/domain/embeddable.d.ts.map +1 -0
  14. package/dist/domain/embeddable.js +106 -0
  15. package/dist/domain/embeddable.js.map +1 -0
  16. package/dist/domain/gold-store.d.ts +11 -0
  17. package/dist/domain/gold-store.d.ts.map +1 -0
  18. package/dist/domain/gold-store.js +210 -0
  19. package/dist/domain/gold-store.js.map +1 -0
  20. package/dist/domain/inbox.d.ts +14 -0
  21. package/dist/domain/inbox.d.ts.map +1 -0
  22. package/dist/domain/inbox.js +138 -0
  23. package/dist/domain/inbox.js.map +1 -0
  24. package/dist/domain/office-status.d.ts +31 -0
  25. package/dist/domain/office-status.d.ts.map +1 -0
  26. package/dist/domain/office-status.js +138 -0
  27. package/dist/domain/office-status.js.map +1 -0
  28. package/dist/domain/questions.d.ts +3 -0
  29. package/dist/domain/questions.d.ts.map +1 -0
  30. package/dist/domain/questions.js +60 -0
  31. package/dist/domain/questions.js.map +1 -0
  32. package/dist/domain/run-manager.d.ts +14 -0
  33. package/dist/domain/run-manager.d.ts.map +1 -0
  34. package/dist/domain/run-manager.js +25 -0
  35. package/dist/domain/run-manager.js.map +1 -0
  36. package/dist/domain/task-event-index.d.ts +31 -0
  37. package/dist/domain/task-event-index.d.ts.map +1 -0
  38. package/dist/domain/task-event-index.js +117 -0
  39. package/dist/domain/task-event-index.js.map +1 -0
  40. package/dist/domain/tasks.d.ts +3 -0
  41. package/dist/domain/tasks.d.ts.map +1 -0
  42. package/dist/domain/tasks.js +112 -0
  43. package/dist/domain/tasks.js.map +1 -0
  44. package/dist/domain/warm-start-builders.d.ts +18 -0
  45. package/dist/domain/warm-start-builders.d.ts.map +1 -0
  46. package/dist/domain/warm-start-builders.js +157 -0
  47. package/dist/domain/warm-start-builders.js.map +1 -0
  48. package/dist/domain/warm-start-extractors.d.ts +37 -0
  49. package/dist/domain/warm-start-extractors.d.ts.map +1 -0
  50. package/dist/domain/warm-start-extractors.js +372 -0
  51. package/dist/domain/warm-start-extractors.js.map +1 -0
  52. package/dist/domain/warm-start.d.ts +17 -0
  53. package/dist/domain/warm-start.d.ts.map +1 -0
  54. package/dist/domain/warm-start.js +225 -0
  55. package/dist/domain/warm-start.js.map +1 -0
  56. package/dist/index.d.ts +7 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +8 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/mcp-slim-ack.d.ts +12 -0
  61. package/dist/mcp-slim-ack.d.ts.map +1 -0
  62. package/dist/mcp-slim-ack.js +16 -0
  63. package/dist/mcp-slim-ack.js.map +1 -0
  64. package/dist/routing/capability-registry.d.ts +38 -0
  65. package/dist/routing/capability-registry.d.ts.map +1 -0
  66. package/dist/routing/capability-registry.js +52 -0
  67. package/dist/routing/capability-registry.js.map +1 -0
  68. package/dist/routing/runtime-target-resolver.d.ts +42 -0
  69. package/dist/routing/runtime-target-resolver.d.ts.map +1 -0
  70. package/dist/routing/runtime-target-resolver.js +139 -0
  71. package/dist/routing/runtime-target-resolver.js.map +1 -0
  72. package/dist/search/azure-search-client.d.ts +53 -0
  73. package/dist/search/azure-search-client.d.ts.map +1 -0
  74. package/dist/search/azure-search-client.js +191 -0
  75. package/dist/search/azure-search-client.js.map +1 -0
  76. package/dist/search/circuit-breaker.d.ts +46 -0
  77. package/dist/search/circuit-breaker.d.ts.map +1 -0
  78. package/dist/search/circuit-breaker.js +87 -0
  79. package/dist/search/circuit-breaker.js.map +1 -0
  80. package/dist/search/deep-search.d.ts +24 -0
  81. package/dist/search/deep-search.d.ts.map +1 -0
  82. package/dist/search/deep-search.js +98 -0
  83. package/dist/search/deep-search.js.map +1 -0
  84. package/dist/search/search.d.ts +3 -0
  85. package/dist/search/search.d.ts.map +1 -0
  86. package/dist/search/search.js +76 -0
  87. package/dist/search/search.js.map +1 -0
  88. package/dist/server.d.ts +3 -0
  89. package/dist/server.d.ts.map +1 -0
  90. package/dist/server.js +39 -0
  91. package/dist/server.js.map +1 -0
  92. package/dist/skills/index.d.ts +3 -0
  93. package/dist/skills/index.d.ts.map +1 -0
  94. package/dist/skills/index.js +8 -0
  95. package/dist/skills/index.js.map +1 -0
  96. package/dist/skills/knowledge.d.ts +3 -0
  97. package/dist/skills/knowledge.d.ts.map +1 -0
  98. package/dist/skills/knowledge.js +78 -0
  99. package/dist/skills/knowledge.js.map +1 -0
  100. package/dist/skills/task-workflow.d.ts +3 -0
  101. package/dist/skills/task-workflow.d.ts.map +1 -0
  102. package/dist/skills/task-workflow.js +205 -0
  103. package/dist/skills/task-workflow.js.map +1 -0
  104. package/dist/storage/active-backend.d.ts +4 -0
  105. package/dist/storage/active-backend.d.ts.map +1 -0
  106. package/dist/storage/active-backend.js +12 -0
  107. package/dist/storage/active-backend.js.map +1 -0
  108. package/dist/storage/backend.d.ts +12 -0
  109. package/dist/storage/backend.d.ts.map +1 -0
  110. package/dist/storage/backend.js +5 -0
  111. package/dist/storage/backend.js.map +1 -0
  112. package/dist/storage/cosmos-client.d.ts +6 -0
  113. package/dist/storage/cosmos-client.d.ts.map +1 -0
  114. package/dist/storage/cosmos-client.js +38 -0
  115. package/dist/storage/cosmos-client.js.map +1 -0
  116. package/dist/storage/lancedb-backend.d.ts +13 -0
  117. package/dist/storage/lancedb-backend.d.ts.map +1 -0
  118. package/dist/storage/lancedb-backend.js +373 -0
  119. package/dist/storage/lancedb-backend.js.map +1 -0
  120. package/dist/storage/store.d.ts +8 -0
  121. package/dist/storage/store.d.ts.map +1 -0
  122. package/dist/storage/store.js +294 -0
  123. package/dist/storage/store.js.map +1 -0
  124. package/dist/storage/task-compaction.d.ts +12 -0
  125. package/dist/storage/task-compaction.d.ts.map +1 -0
  126. package/dist/storage/task-compaction.js +112 -0
  127. package/dist/storage/task-compaction.js.map +1 -0
  128. package/dist/storage/task-context-snapshot.d.ts +6 -0
  129. package/dist/storage/task-context-snapshot.d.ts.map +1 -0
  130. package/dist/storage/task-context-snapshot.js +87 -0
  131. package/dist/storage/task-context-snapshot.js.map +1 -0
  132. package/dist/storage/trigger-engine.d.ts +39 -0
  133. package/dist/storage/trigger-engine.d.ts.map +1 -0
  134. package/dist/storage/trigger-engine.js +212 -0
  135. package/dist/storage/trigger-engine.js.map +1 -0
  136. package/dist/tools.d.ts +3 -0
  137. package/dist/tools.d.ts.map +1 -0
  138. package/dist/tools.js +413 -0
  139. package/dist/tools.js.map +1 -0
  140. package/dist/transport/client.d.ts +68 -0
  141. package/dist/transport/client.d.ts.map +1 -0
  142. package/dist/transport/client.js +210 -0
  143. package/dist/transport/client.js.map +1 -0
  144. package/dist/transport/http-server.d.ts +3 -0
  145. package/dist/transport/http-server.d.ts.map +1 -0
  146. package/dist/transport/http-server.js +337 -0
  147. package/dist/transport/http-server.js.map +1 -0
  148. package/dist/types.d.ts +185 -0
  149. package/dist/types.d.ts.map +1 -0
  150. package/dist/types.js +3 -0
  151. package/dist/types.js.map +1 -0
  152. package/package.json +71 -0
  153. package/scripts/run-server.mjs +3 -0
  154. package/scripts/stdio-only.mjs +23 -0
@@ -0,0 +1,294 @@
1
+ // store.ts — How is data stored?
2
+ // PRIMARY: Cosmos DB when COSMOS_ENDPOINT is set — all writes go here first.
3
+ // BACKUP: JSONL files written alongside every Cosmos write (fire-and-forget).
4
+ // Disable backup with DATACORE_JSONL_BACKUP_DISABLED=true (tests).
5
+ // FALLBACK: JSONL only when COSMOS_ENDPOINT is not set (pure local dev).
6
+ import fs from "node:fs/promises";
7
+ import os from "node:os";
8
+ import path from "node:path";
9
+ import { randomUUID } from "node:crypto";
10
+ import { isCosmosEnabled, getBronzeContainer } from "./cosmos-client.js";
11
+ import { activeBackend } from "./active-backend.js";
12
+ import { getCosmosBronzeUriString } from "../config/datacore-constants.js";
13
+ import { checkTriggers, executeTriggerActions, _setAppendEventFn, } from "./trigger-engine.js";
14
+ import { buildTaskContextAppendInput } from "./task-context-snapshot.js";
15
+ import { buildTaskCompactedAppendInput, buildCompactionSessionBriefingAppendInput, } from "./task-compaction.js";
16
+ import { isAzureSearchEnabled, indexEvent as indexEventInAzure, } from "../search/azure-search-client.js";
17
+ const VERIFIED_SOURCES = new Set(["log-session-sh"]);
18
+ const AI_SOURCES = new Set([
19
+ "claude",
20
+ "claude-agent",
21
+ "claude.ai",
22
+ "claude-desktop",
23
+ "claude-web",
24
+ "claude-cowork",
25
+ "codex",
26
+ "codex-session",
27
+ "cursor",
28
+ "gemini",
29
+ "gemini-session",
30
+ "openclaw",
31
+ "openclaw-session",
32
+ ]);
33
+ function inferTrust(source) {
34
+ if (VERIFIED_SOURCES.has(source))
35
+ return "verified";
36
+ if (AI_SOURCES.has(source))
37
+ return "ai-generated";
38
+ return "external";
39
+ }
40
+ function resolveBronzeDir() {
41
+ return (process.env.AGENTCORE_DATA_DIR ?? // primary
42
+ process.env.DATACORE_BRONZE_DIR ?? // legacy test isolation alias
43
+ path.join(os.homedir(), ".agentcore", "bronze"));
44
+ }
45
+ export function getBronzeDir() {
46
+ if (isCosmosEnabled())
47
+ return getCosmosBronzeUriString();
48
+ return resolveBronzeDir();
49
+ }
50
+ async function listBronzeFiles(bronzeDir) {
51
+ try {
52
+ const entries = await fs.readdir(bronzeDir, { withFileTypes: true });
53
+ return entries
54
+ .filter((e) => e.isFile() && e.name.endsWith(".jsonl"))
55
+ .map((e) => path.join(bronzeDir, e.name))
56
+ .sort()
57
+ .reverse();
58
+ }
59
+ catch (err) {
60
+ if (err &&
61
+ typeof err === "object" &&
62
+ "code" in err &&
63
+ err.code === "ENOENT")
64
+ return [];
65
+ throw err;
66
+ }
67
+ }
68
+ export function matchesFilters(record, { source, type }) {
69
+ if (source) {
70
+ const recordSource = (record._source ?? record.source ?? "").toLowerCase();
71
+ if (!recordSource.includes(source.toLowerCase()))
72
+ return false;
73
+ }
74
+ if (type) {
75
+ const recordType = (record.type ?? "").toLowerCase();
76
+ if (!recordType.includes(type.toLowerCase()))
77
+ return false;
78
+ }
79
+ return true;
80
+ }
81
+ export async function readAllRecords(filters = {}) {
82
+ if (activeBackend)
83
+ return activeBackend.readAll(filters);
84
+ if (isCosmosEnabled())
85
+ return readAllRecordsFromCosmos(filters);
86
+ return readAllRecordsFromJsonl(filters);
87
+ }
88
+ async function readAllRecordsFromCosmos(filters) {
89
+ const container = await getBronzeContainer();
90
+ const conditions = [];
91
+ const params = [];
92
+ if (filters.source) {
93
+ conditions.push("CONTAINS(c._source, @source, true)");
94
+ params.push({ name: "@source", value: filters.source });
95
+ }
96
+ if (filters.type) {
97
+ conditions.push("CONTAINS(c.type, @type, true)");
98
+ params.push({ name: "@type", value: filters.type });
99
+ }
100
+ const cap = Math.min(filters.limit ?? 1000, 1000);
101
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
102
+ const { resources } = await container.items
103
+ .query({
104
+ query: `SELECT TOP ${cap} * FROM c ${where} ORDER BY c._ts DESC`,
105
+ parameters: params,
106
+ })
107
+ .fetchAll();
108
+ resources.sort((a, b) => (b._timestamp ?? "").localeCompare(a._timestamp ?? ""));
109
+ return {
110
+ bronzeDir: getCosmosBronzeUriString(),
111
+ files: [],
112
+ records: resources,
113
+ parseErrors: 0,
114
+ };
115
+ }
116
+ async function readAllRecordsFromJsonl(filters) {
117
+ const bronzeDir = resolveBronzeDir();
118
+ const files = await listBronzeFiles(bronzeDir);
119
+ const records = [];
120
+ let parseErrors = 0;
121
+ for (const filePath of files) {
122
+ const raw = await fs.readFile(filePath, "utf8");
123
+ for (const line of raw.split(/\r?\n/).filter(Boolean)) {
124
+ let record;
125
+ try {
126
+ record = JSON.parse(line);
127
+ }
128
+ catch {
129
+ parseErrors++;
130
+ continue;
131
+ }
132
+ if (!matchesFilters(record, filters))
133
+ continue;
134
+ record._filePath = filePath;
135
+ records.push(record);
136
+ }
137
+ }
138
+ return { bronzeDir, files, records, parseErrors };
139
+ }
140
+ const MAX_CONTENT_LENGTH = 50_000;
141
+ function sanitize(text) {
142
+ // eslint-disable-next-line no-control-regex
143
+ const controlChars = /[\x00-\x08\x0B\x0C\x0E-\x1F]/g;
144
+ return text.replace(controlChars, "").slice(0, MAX_CONTENT_LENGTH);
145
+ }
146
+ /** All Bronze rows for `task_id` whose type starts with `task_`, oldest first. */
147
+ export async function readEventsByTask(taskId) {
148
+ if (!taskId)
149
+ return [];
150
+ if (isCosmosEnabled()) {
151
+ const container = await getBronzeContainer();
152
+ const { resources } = await container.items
153
+ .query({
154
+ query: 'SELECT * FROM c WHERE STARTSWITH(c.type, "task_") AND c.context.task_id = @taskId ORDER BY c._ts ASC',
155
+ parameters: [{ name: "@taskId", value: taskId }],
156
+ })
157
+ .fetchAll();
158
+ return resources;
159
+ }
160
+ const { records } = await readAllRecords();
161
+ return records
162
+ .filter((record) => (record.type ?? "").startsWith("task_"))
163
+ .filter((record) => {
164
+ const ctx = record.context;
165
+ return typeof ctx?.task_id === "string" && ctx.task_id === taskId;
166
+ })
167
+ .sort((a, b) => (a._timestamp ?? "").localeCompare(b._timestamp ?? ""));
168
+ }
169
+ export async function appendEvent({ source, type, content, project, context, run_id, }) {
170
+ // ── Local mode: delegate entirely to LanceDB backend ──
171
+ if (activeBackend) {
172
+ const result = await activeBackend.append({
173
+ source,
174
+ type,
175
+ content,
176
+ project,
177
+ context,
178
+ run_id,
179
+ });
180
+ // Still run triggers in-process
181
+ const matches = checkTriggers(result.record);
182
+ if (matches.length > 0) {
183
+ executeTriggerActions(matches, result.record).catch((err) => {
184
+ process.stderr.write(`[trigger] ${err instanceof Error ? err.message : String(err)}\n`);
185
+ });
186
+ }
187
+ return result;
188
+ }
189
+ // ── Cloud mode: existing Cosmos path below ──
190
+ const timestamp = new Date().toISOString();
191
+ const sanitizedSource = sanitize(source);
192
+ const sanitizedProject = project ? sanitize(project) : undefined;
193
+ const sanitizedRunId = run_id ? sanitize(run_id) : undefined;
194
+ const record = {
195
+ source: sanitizedSource,
196
+ type: sanitize(type),
197
+ content: sanitize(content),
198
+ ...(sanitizedProject ? { project: sanitizedProject } : {}),
199
+ ...(context !== undefined ? { context } : {}),
200
+ ...(sanitizedRunId ? { run_id: sanitizedRunId } : {}),
201
+ _timestamp: timestamp,
202
+ _source: sanitizedSource,
203
+ _event_id: randomUUID(),
204
+ _trust: inferTrust(sanitizedSource),
205
+ };
206
+ let result;
207
+ if (isCosmosEnabled()) {
208
+ // PRIMARY: Cosmos DB — always write here first.
209
+ const container = await getBronzeContainer();
210
+ await container.items.create({ ...record, id: record._event_id });
211
+ result = { bronzeDir: getCosmosBronzeUriString(), filePath: "", record };
212
+ // BACKUP: JSONL — fire-and-forget local copy. Never blocks the primary write.
213
+ // Disabled by DATACORE_JSONL_BACKUP_DISABLED=true for test environments.
214
+ if (process.env.DATACORE_JSONL_BACKUP_DISABLED !== "true") {
215
+ const bronzeDir = resolveBronzeDir();
216
+ const dayStamp = record._timestamp.slice(0, 10);
217
+ const filePath = path.join(bronzeDir, `${dayStamp}.jsonl`);
218
+ fs.mkdir(bronzeDir, { recursive: true })
219
+ .then(() => fs.appendFile(filePath, `${JSON.stringify(record)}\n`, "utf8"))
220
+ .catch((err) => {
221
+ const msg = err instanceof Error ? err.message : String(err);
222
+ process.stderr.write(`[jsonl-backup] write failed: ${msg}\n`);
223
+ });
224
+ }
225
+ }
226
+ else {
227
+ // FALLBACK: JSONL only — used when Cosmos is not configured (dev/test).
228
+ const bronzeDir = resolveBronzeDir();
229
+ const dayStamp = record._timestamp.slice(0, 10);
230
+ const filePath = path.join(bronzeDir, `${dayStamp}.jsonl`);
231
+ await fs.mkdir(bronzeDir, { recursive: true });
232
+ await fs.appendFile(filePath, `${JSON.stringify(record)}\n`, "utf8");
233
+ result = { bronzeDir, filePath, record };
234
+ }
235
+ // Async: push to Azure AI Search Silver layer (non-blocking, fire-and-forget)
236
+ if (isAzureSearchEnabled()) {
237
+ indexEventInAzure(result.record).catch((err) => {
238
+ const msg = err instanceof Error ? err.message : String(err);
239
+ process.stderr.write(`[azure-search] index failed: ${msg}\n`);
240
+ });
241
+ }
242
+ if (record.type === "task_assigned" &&
243
+ process.env.DATACORE_TASK_CONTEXT_DISABLED !== "true") {
244
+ try {
245
+ const ctx = (record.context ?? {});
246
+ const taskId = typeof ctx.task_id === "string" ? ctx.task_id : null;
247
+ if (taskId) {
248
+ const taskRows = await readEventsByTask(taskId);
249
+ const snapshotInput = buildTaskContextAppendInput(record, taskRows);
250
+ if (snapshotInput)
251
+ await appendEvent(snapshotInput);
252
+ }
253
+ }
254
+ catch (err) {
255
+ const msg = err instanceof Error ? err.message : String(err);
256
+ process.stderr.write(`[task_context] snapshot failed: ${msg}\n`);
257
+ }
258
+ }
259
+ // task_compaction_needed → optional auto task_compacted + session_briefing (TR-011) in one place
260
+ if (record.type === "task_compaction_needed") {
261
+ try {
262
+ const ctx = (record.context ?? {});
263
+ const taskId = typeof ctx.task_id === "string" ? ctx.task_id : null;
264
+ if (taskId) {
265
+ const taskRows = await readEventsByTask(taskId);
266
+ if (process.env.DATACORE_AUTO_TASK_COMPACTION_DISABLED !== "true") {
267
+ const compactInput = buildTaskCompactedAppendInput(record, taskRows);
268
+ if (compactInput)
269
+ await appendEvent(compactInput);
270
+ }
271
+ const briefingInput = buildCompactionSessionBriefingAppendInput(record, taskRows);
272
+ if (briefingInput)
273
+ await appendEvent(briefingInput);
274
+ }
275
+ }
276
+ catch (err) {
277
+ const msg = err instanceof Error ? err.message : String(err);
278
+ process.stderr.write(`[task_compaction] summary failed: ${msg}\n`);
279
+ }
280
+ }
281
+ // Write → Project → REACT: check trigger rules
282
+ const matches = checkTriggers(record);
283
+ if (matches.length > 0) {
284
+ executeTriggerActions(matches, record).catch((err) => {
285
+ const msg = err instanceof Error ? err.message : String(err);
286
+ process.stderr.write(`[trigger] execution error: ${msg}\n`);
287
+ });
288
+ }
289
+ return result;
290
+ }
291
+ // Wire appendEvent into the trigger engine (breaks circular dependency at runtime).
292
+ // Must be called after appendEvent is defined. This is a one-time module-level side effect.
293
+ _setAppendEventFn(appendEvent);
294
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/storage/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { AppendEventInput, BronzeRecord } from "../types.js";
2
+ /**
3
+ * Build the follow-up `task_compacted` event for a `task_compaction_needed` trigger row, or null if skipped.
4
+ * Caller supplies `taskRows` (all task_* events for this task_id, chronological).
5
+ */
6
+ export declare function buildTaskCompactedAppendInput(triggerRecord: BronzeRecord, taskRows: BronzeRecord[]): AppendEventInput | null;
7
+ /**
8
+ * Build `session_briefing` for compaction (TR-011), or null if already logged for this task + progress_count.
9
+ * Keeps dedup in domain next to task_compacted logic; store emits this from the task_compaction_needed hook.
10
+ */
11
+ export declare function buildCompactionSessionBriefingAppendInput(triggerRecord: BronzeRecord, taskRows: BronzeRecord[]): AppendEventInput | null;
12
+ //# sourceMappingURL=task-compaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-compaction.d.ts","sourceRoot":"","sources":["../../src/storage/task-compaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAelE;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,YAAY,EAC3B,QAAQ,EAAE,YAAY,EAAE,GACvB,gBAAgB,GAAG,IAAI,CAyDzB;AAQD;;;GAGG;AACH,wBAAgB,yCAAyC,CACvD,aAAa,EAAE,YAAY,EAC3B,QAAQ,EAAE,YAAY,EAAE,GACvB,gBAAgB,GAAG,IAAI,CAmCzB"}
@@ -0,0 +1,112 @@
1
+ // task-compaction.ts — Derive task_compacted from task_compaction_needed + task history (domain layer).
2
+ function summariseProgress(taskId, content) {
3
+ if (!content)
4
+ return "";
5
+ const trimmed = content.trim();
6
+ const prefix = `${taskId} —`;
7
+ if (trimmed.startsWith(prefix)) {
8
+ return trimmed.slice(prefix.length).trim();
9
+ }
10
+ return trimmed;
11
+ }
12
+ /**
13
+ * Build the follow-up `task_compacted` event for a `task_compaction_needed` trigger row, or null if skipped.
14
+ * Caller supplies `taskRows` (all task_* events for this task_id, chronological).
15
+ */
16
+ export function buildTaskCompactedAppendInput(triggerRecord, taskRows) {
17
+ if (triggerRecord.type !== "task_compaction_needed")
18
+ return null;
19
+ const ctx = (triggerRecord.context ?? {});
20
+ const taskId = typeof ctx.task_id === "string" ? ctx.task_id : null;
21
+ if (!taskId)
22
+ return null;
23
+ if (taskRows.length === 0)
24
+ return null;
25
+ const progressEvents = taskRows.filter((row) => row.type === "task_progress");
26
+ if (progressEvents.length === 0)
27
+ return null;
28
+ const alreadyCompacted = taskRows.some((row) => {
29
+ if (row.type !== "task_compacted")
30
+ return false;
31
+ const rowCtx = (row.context ?? {});
32
+ return Number(rowCtx.progress_count ?? 0) === progressEvents.length;
33
+ });
34
+ if (alreadyCompacted)
35
+ return null;
36
+ const generatedAt = new Date().toISOString();
37
+ const created = taskRows.find((row) => row.type === "task_created") ?? taskRows[0];
38
+ const latest = taskRows[taskRows.length - 1];
39
+ let currentStatus = null;
40
+ let assignedTo = null;
41
+ for (const row of taskRows) {
42
+ const rowCtx = (row.context ?? {});
43
+ if (typeof rowCtx.status === "string")
44
+ currentStatus = rowCtx.status;
45
+ if (typeof rowCtx.assigned_to === "string")
46
+ assignedTo = rowCtx.assigned_to;
47
+ }
48
+ const steps = progressEvents.map((row) => ({
49
+ timestamp: row._timestamp ?? null,
50
+ source: row._source ?? row.source ?? null,
51
+ summary: summariseProgress(taskId, row.content),
52
+ }));
53
+ const latestStep = steps[steps.length - 1]?.summary ?? "no progress details recorded";
54
+ const contentSummary = `${taskId} — ${progressEvents.length} progress updates compacted at ${generatedAt}. Current status: ${currentStatus ?? "unknown"}. Latest step: ${latestStep}`;
55
+ return {
56
+ source: "datacore",
57
+ type: "task_compacted",
58
+ content: contentSummary,
59
+ context: {
60
+ task_id: taskId,
61
+ progress_count: progressEvents.length,
62
+ opened_at: created?._timestamp ?? null,
63
+ last_updated_at: latest?._timestamp ?? null,
64
+ current_status: currentStatus,
65
+ assigned_to: assignedTo,
66
+ steps,
67
+ triggered_by_event: triggerRecord._event_id,
68
+ },
69
+ };
70
+ }
71
+ function progressCountFromContext(ctx) {
72
+ const raw = ctx["progress_count"];
73
+ const n = typeof raw === "number" ? raw : Number(raw);
74
+ return Number.isFinite(n) ? n : null;
75
+ }
76
+ /**
77
+ * Build `session_briefing` for compaction (TR-011), or null if already logged for this task + progress_count.
78
+ * Keeps dedup in domain next to task_compacted logic; store emits this from the task_compaction_needed hook.
79
+ */
80
+ export function buildCompactionSessionBriefingAppendInput(triggerRecord, taskRows) {
81
+ if (triggerRecord.type !== "task_compaction_needed")
82
+ return null;
83
+ const ctx = (triggerRecord.context ?? {});
84
+ const taskId = typeof ctx.task_id === "string" ? ctx.task_id : null;
85
+ const progressCount = progressCountFromContext(ctx);
86
+ if (!taskId || progressCount === null)
87
+ return null;
88
+ const duplicateBriefing = taskRows.some((row) => {
89
+ if (row.type !== "session_briefing")
90
+ return false;
91
+ const rowCtx = (row.context ?? {});
92
+ return (rowCtx["briefing_kind"] === "compaction" &&
93
+ rowCtx["task_id"] === taskId &&
94
+ progressCountFromContext(rowCtx) === progressCount);
95
+ });
96
+ if (duplicateBriefing)
97
+ return null;
98
+ const assignedTo = typeof ctx["assigned_to"] === "string" ? ctx["assigned_to"] : "";
99
+ return {
100
+ source: "datacore",
101
+ type: "session_briefing",
102
+ content: `${taskId} — compaction briefing: ${progressCount} task_progress events. ` +
103
+ `Use get_tasks(task_id="${taskId}") for full history, trim local context, continue work.`,
104
+ context: {
105
+ briefing_kind: "compaction",
106
+ task_id: taskId,
107
+ progress_count: progressCount,
108
+ ...(assignedTo ? { assigned_to: assignedTo } : {}),
109
+ },
110
+ };
111
+ }
112
+ //# sourceMappingURL=task-compaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-compaction.js","sourceRoot":"","sources":["../../src/storage/task-compaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AppendEventInput, BronzeRecord } from "../types.js";
2
+ /**
3
+ * Non-review task_assigned → append payload for type task_context, or null if no task_created / skip.
4
+ */
5
+ export declare function buildTaskContextAppendInput(assignmentRecord: BronzeRecord, taskRecords: BronzeRecord[]): AppendEventInput | null;
6
+ //# sourceMappingURL=task-context-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-context-snapshot.d.ts","sourceRoot":"","sources":["../../src/storage/task-context-snapshot.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAsClE;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,gBAAgB,EAAE,YAAY,EAC9B,WAAW,EAAE,YAAY,EAAE,GAC1B,gBAAgB,GAAG,IAAI,CAqDzB"}
@@ -0,0 +1,87 @@
1
+ // task-context-snapshot.ts — Build task_context Bronze rows from task_assigned + task_created (DC-T16).
2
+ function earliestTaskCreated(taskId, taskRecords) {
3
+ const rows = taskRecords.filter((r) => {
4
+ const ctx = r.context;
5
+ return ctx?.task_id === taskId && r.type === "task_created";
6
+ });
7
+ if (rows.length === 0)
8
+ return null;
9
+ rows.sort((a, b) => (a._timestamp ?? "").localeCompare(b._timestamp ?? ""));
10
+ return rows[0] ?? null;
11
+ }
12
+ function parseAcceptanceCriteria(ctx) {
13
+ const raw = ctx.acceptance_criteria;
14
+ if (!Array.isArray(raw))
15
+ return [];
16
+ return raw.filter((x) => typeof x === "string");
17
+ }
18
+ /** String paths; [] when task_created has no files_to_change. */
19
+ function parseFilesToChangePaths(ctx) {
20
+ const rawFiles = ctx.files_to_change;
21
+ if (!Array.isArray(rawFiles))
22
+ return [];
23
+ const paths = [];
24
+ for (const f of rawFiles) {
25
+ if (typeof f === "string") {
26
+ if (f)
27
+ paths.push(f);
28
+ }
29
+ else if (f && typeof f === "object") {
30
+ const fo = f;
31
+ const p = typeof fo.path === "string" ? fo.path : String(fo.path ?? "");
32
+ if (p)
33
+ paths.push(p);
34
+ }
35
+ }
36
+ return paths;
37
+ }
38
+ /**
39
+ * Non-review task_assigned → append payload for type task_context, or null if no task_created / skip.
40
+ */
41
+ export function buildTaskContextAppendInput(assignmentRecord, taskRecords) {
42
+ if (assignmentRecord.type !== "task_assigned")
43
+ return null;
44
+ const assignCtx = (assignmentRecord.context ?? {});
45
+ if (assignCtx.review === true)
46
+ return null;
47
+ const taskId = typeof assignCtx.task_id === "string" ? assignCtx.task_id : null;
48
+ if (!taskId)
49
+ return null;
50
+ const created = earliestTaskCreated(taskId, taskRecords);
51
+ if (!created)
52
+ return null;
53
+ const createdCtx = (created.context ?? {});
54
+ const spec = (created.content ?? `Task ${taskId}`).trim();
55
+ const acceptance_criteria = parseAcceptanceCriteria(createdCtx);
56
+ const files_to_change = parseFilesToChangePaths(createdCtx);
57
+ const spec_file = typeof createdCtx.spec_file === "string" ? createdCtx.spec_file : null;
58
+ const projectFromCreatedCtx = typeof createdCtx.project === "string" ? createdCtx.project : undefined;
59
+ const projectFromCreatedRecord = typeof created.project === "string" ? created.project : undefined;
60
+ const projectFromCreated = projectFromCreatedCtx ?? projectFromCreatedRecord;
61
+ const assignedRaw = assignCtx.assigned_to;
62
+ const assigned_to = typeof assignedRaw === "string" ? assignedRaw : null;
63
+ const generated_at = new Date().toISOString();
64
+ const project = (typeof assignmentRecord.project === "string" &&
65
+ assignmentRecord.project) ||
66
+ projectFromCreated;
67
+ return {
68
+ source: "datacore",
69
+ type: "task_context",
70
+ content: spec,
71
+ ...(project ? { project } : {}),
72
+ context: {
73
+ task_id: taskId,
74
+ assigned_to,
75
+ generated_at,
76
+ spec,
77
+ files_to_change,
78
+ acceptance_criteria,
79
+ triggered_by_event: assignmentRecord._event_id,
80
+ ...(spec_file ? { spec_file } : {}),
81
+ ...(projectFromCreated !== undefined
82
+ ? { project: projectFromCreated }
83
+ : {}),
84
+ },
85
+ };
86
+ }
87
+ //# sourceMappingURL=task-context-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-context-snapshot.js","sourceRoot":"","sources":["../../src/storage/task-context-snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { execFile } from "node:child_process";
2
+ import type { BronzeRecord } from "../types.js";
3
+ export interface TriggerCondition {
4
+ event_type?: string;
5
+ [key: string]: unknown;
6
+ }
7
+ export interface TriggerAction {
8
+ type: "dispatch" | "dispatch_multi" | "log_event" | "notify";
9
+ target?: string;
10
+ message?: string;
11
+ event?: Record<string, unknown>;
12
+ }
13
+ export interface TriggerRule {
14
+ rule_id: string;
15
+ name: string;
16
+ condition: TriggerCondition;
17
+ action: TriggerAction;
18
+ enabled: boolean;
19
+ }
20
+ type ExecFileFn = typeof execFile;
21
+ export declare function _setExecFileFn(fn: ExecFileFn): void;
22
+ type AppendFn = (input: {
23
+ source: string;
24
+ type: string;
25
+ content: string;
26
+ context?: Record<string, unknown>;
27
+ }) => Promise<unknown>;
28
+ export declare function _setAppendEventFn(fn: AppendFn): void;
29
+ export declare function _resetRulesCache(): void;
30
+ /** TR-001 dispatch message template (sync with packages/triggers/src/trigger-engine.ts TR-001). */
31
+ export declare const TR001_REVIEW_DISPATCH_MESSAGE: string;
32
+ export interface TriggerMatch {
33
+ rule: TriggerRule;
34
+ resolvedMessage: string;
35
+ }
36
+ export declare function checkTriggers(record: BronzeRecord): TriggerMatch[];
37
+ export declare function executeTriggerActions(matches: TriggerMatch[], record: BronzeRecord): Promise<void>;
38
+ export {};
39
+ //# sourceMappingURL=trigger-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-engine.d.ts","sourceRoot":"","sources":["../../src/storage/trigger-engine.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,GAAG,gBAAgB,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,gBAAgB,CAAC;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAOD,KAAK,UAAU,GAAG,OAAO,QAAQ,CAAC;AAElC,wBAAgB,cAAc,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CAEnD;AAID,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEvB,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAEpD;AAOD,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAED,mGAAmG;AACnG,eAAO,MAAM,6BAA6B,QAWK,CAAC;AAmEhD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,EAAE,CAgBlE;AAqDD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAqFf"}