@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.
- package/LICENSE +21 -0
- package/README.md +198 -0
- package/config/default-triggers.json +119 -0
- package/dist/adapters/runtime-adapter.d.ts +124 -0
- package/dist/adapters/runtime-adapter.d.ts.map +1 -0
- package/dist/adapters/runtime-adapter.js +5 -0
- package/dist/adapters/runtime-adapter.js.map +1 -0
- package/dist/config/datacore-constants.d.ts +21 -0
- package/dist/config/datacore-constants.d.ts.map +1 -0
- package/dist/config/datacore-constants.js +68 -0
- package/dist/config/datacore-constants.js.map +1 -0
- package/dist/domain/embeddable.d.ts +19 -0
- package/dist/domain/embeddable.d.ts.map +1 -0
- package/dist/domain/embeddable.js +106 -0
- package/dist/domain/embeddable.js.map +1 -0
- package/dist/domain/gold-store.d.ts +11 -0
- package/dist/domain/gold-store.d.ts.map +1 -0
- package/dist/domain/gold-store.js +210 -0
- package/dist/domain/gold-store.js.map +1 -0
- package/dist/domain/inbox.d.ts +14 -0
- package/dist/domain/inbox.d.ts.map +1 -0
- package/dist/domain/inbox.js +138 -0
- package/dist/domain/inbox.js.map +1 -0
- package/dist/domain/office-status.d.ts +31 -0
- package/dist/domain/office-status.d.ts.map +1 -0
- package/dist/domain/office-status.js +138 -0
- package/dist/domain/office-status.js.map +1 -0
- package/dist/domain/questions.d.ts +3 -0
- package/dist/domain/questions.d.ts.map +1 -0
- package/dist/domain/questions.js +60 -0
- package/dist/domain/questions.js.map +1 -0
- package/dist/domain/run-manager.d.ts +14 -0
- package/dist/domain/run-manager.d.ts.map +1 -0
- package/dist/domain/run-manager.js +25 -0
- package/dist/domain/run-manager.js.map +1 -0
- package/dist/domain/task-event-index.d.ts +31 -0
- package/dist/domain/task-event-index.d.ts.map +1 -0
- package/dist/domain/task-event-index.js +117 -0
- package/dist/domain/task-event-index.js.map +1 -0
- package/dist/domain/tasks.d.ts +3 -0
- package/dist/domain/tasks.d.ts.map +1 -0
- package/dist/domain/tasks.js +112 -0
- package/dist/domain/tasks.js.map +1 -0
- package/dist/domain/warm-start-builders.d.ts +18 -0
- package/dist/domain/warm-start-builders.d.ts.map +1 -0
- package/dist/domain/warm-start-builders.js +157 -0
- package/dist/domain/warm-start-builders.js.map +1 -0
- package/dist/domain/warm-start-extractors.d.ts +37 -0
- package/dist/domain/warm-start-extractors.d.ts.map +1 -0
- package/dist/domain/warm-start-extractors.js +372 -0
- package/dist/domain/warm-start-extractors.js.map +1 -0
- package/dist/domain/warm-start.d.ts +17 -0
- package/dist/domain/warm-start.d.ts.map +1 -0
- package/dist/domain/warm-start.js +225 -0
- package/dist/domain/warm-start.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-slim-ack.d.ts +12 -0
- package/dist/mcp-slim-ack.d.ts.map +1 -0
- package/dist/mcp-slim-ack.js +16 -0
- package/dist/mcp-slim-ack.js.map +1 -0
- package/dist/routing/capability-registry.d.ts +38 -0
- package/dist/routing/capability-registry.d.ts.map +1 -0
- package/dist/routing/capability-registry.js +52 -0
- package/dist/routing/capability-registry.js.map +1 -0
- package/dist/routing/runtime-target-resolver.d.ts +42 -0
- package/dist/routing/runtime-target-resolver.d.ts.map +1 -0
- package/dist/routing/runtime-target-resolver.js +139 -0
- package/dist/routing/runtime-target-resolver.js.map +1 -0
- package/dist/search/azure-search-client.d.ts +53 -0
- package/dist/search/azure-search-client.d.ts.map +1 -0
- package/dist/search/azure-search-client.js +191 -0
- package/dist/search/azure-search-client.js.map +1 -0
- package/dist/search/circuit-breaker.d.ts +46 -0
- package/dist/search/circuit-breaker.d.ts.map +1 -0
- package/dist/search/circuit-breaker.js +87 -0
- package/dist/search/circuit-breaker.js.map +1 -0
- package/dist/search/deep-search.d.ts +24 -0
- package/dist/search/deep-search.d.ts.map +1 -0
- package/dist/search/deep-search.js +98 -0
- package/dist/search/deep-search.js.map +1 -0
- package/dist/search/search.d.ts +3 -0
- package/dist/search/search.d.ts.map +1 -0
- package/dist/search/search.js +76 -0
- package/dist/search/search.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +39 -0
- package/dist/server.js.map +1 -0
- package/dist/skills/index.d.ts +3 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +8 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/knowledge.d.ts +3 -0
- package/dist/skills/knowledge.d.ts.map +1 -0
- package/dist/skills/knowledge.js +78 -0
- package/dist/skills/knowledge.js.map +1 -0
- package/dist/skills/task-workflow.d.ts +3 -0
- package/dist/skills/task-workflow.d.ts.map +1 -0
- package/dist/skills/task-workflow.js +205 -0
- package/dist/skills/task-workflow.js.map +1 -0
- package/dist/storage/active-backend.d.ts +4 -0
- package/dist/storage/active-backend.d.ts.map +1 -0
- package/dist/storage/active-backend.js +12 -0
- package/dist/storage/active-backend.js.map +1 -0
- package/dist/storage/backend.d.ts +12 -0
- package/dist/storage/backend.d.ts.map +1 -0
- package/dist/storage/backend.js +5 -0
- package/dist/storage/backend.js.map +1 -0
- package/dist/storage/cosmos-client.d.ts +6 -0
- package/dist/storage/cosmos-client.d.ts.map +1 -0
- package/dist/storage/cosmos-client.js +38 -0
- package/dist/storage/cosmos-client.js.map +1 -0
- package/dist/storage/lancedb-backend.d.ts +13 -0
- package/dist/storage/lancedb-backend.d.ts.map +1 -0
- package/dist/storage/lancedb-backend.js +373 -0
- package/dist/storage/lancedb-backend.js.map +1 -0
- package/dist/storage/store.d.ts +8 -0
- package/dist/storage/store.d.ts.map +1 -0
- package/dist/storage/store.js +294 -0
- package/dist/storage/store.js.map +1 -0
- package/dist/storage/task-compaction.d.ts +12 -0
- package/dist/storage/task-compaction.d.ts.map +1 -0
- package/dist/storage/task-compaction.js +112 -0
- package/dist/storage/task-compaction.js.map +1 -0
- package/dist/storage/task-context-snapshot.d.ts +6 -0
- package/dist/storage/task-context-snapshot.d.ts.map +1 -0
- package/dist/storage/task-context-snapshot.js +87 -0
- package/dist/storage/task-context-snapshot.js.map +1 -0
- package/dist/storage/trigger-engine.d.ts +39 -0
- package/dist/storage/trigger-engine.d.ts.map +1 -0
- package/dist/storage/trigger-engine.js +212 -0
- package/dist/storage/trigger-engine.js.map +1 -0
- package/dist/tools.d.ts +3 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +413 -0
- package/dist/tools.js.map +1 -0
- package/dist/transport/client.d.ts +68 -0
- package/dist/transport/client.d.ts.map +1 -0
- package/dist/transport/client.js +210 -0
- package/dist/transport/client.js.map +1 -0
- package/dist/transport/http-server.d.ts +3 -0
- package/dist/transport/http-server.d.ts.map +1 -0
- package/dist/transport/http-server.js +337 -0
- package/dist/transport/http-server.js.map +1 -0
- package/dist/types.d.ts +185 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +71 -0
- package/scripts/run-server.mjs +3 -0
- package/scripts/stdio-only.mjs +23 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// office-status.ts — What does the whole office look like right now?
|
|
2
|
+
// Domain logic for /status endpoint. Aggregates task wall, meeting
|
|
3
|
+
// rooms, agent desks, operations, and library into one view.
|
|
4
|
+
import { searchEvents } from "../search/search.js";
|
|
5
|
+
import { queryEntities } from "./gold-store.js";
|
|
6
|
+
import { loadTaskEventIndex } from "./task-event-index.js";
|
|
7
|
+
import { isCosmosEnabled } from "../storage/cosmos-client.js";
|
|
8
|
+
export async function buildStatus() {
|
|
9
|
+
const now = Date.now();
|
|
10
|
+
const todayStart = new Date();
|
|
11
|
+
todayStart.setHours(0, 0, 0, 0);
|
|
12
|
+
const todayIso = todayStart.toISOString();
|
|
13
|
+
// Task wall
|
|
14
|
+
const taskWall = {
|
|
15
|
+
created: 0,
|
|
16
|
+
in_progress: 0,
|
|
17
|
+
review: 0,
|
|
18
|
+
blocked: 0,
|
|
19
|
+
completed_today: 0,
|
|
20
|
+
};
|
|
21
|
+
const agents = {};
|
|
22
|
+
const { tasks: taskMap } = await loadTaskEventIndex();
|
|
23
|
+
function updateDesk(agent, status, timestamp, taskId) {
|
|
24
|
+
const existing = agents[agent];
|
|
25
|
+
if (!existing || (timestamp ?? "") > (existing.last_seen ?? "")) {
|
|
26
|
+
agents[agent] = {
|
|
27
|
+
status,
|
|
28
|
+
task: taskId,
|
|
29
|
+
last_seen: timestamp ?? undefined,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
for (const timeline of taskMap.values()) {
|
|
34
|
+
const reviewAssignments = timeline.reviewAssignments.filter((assignment) => !timeline.reviewedTimestamps.some((ts) => ts >= assignment.timestamp));
|
|
35
|
+
if (reviewAssignments.length > 0) {
|
|
36
|
+
taskWall.review++;
|
|
37
|
+
for (const assignment of reviewAssignments) {
|
|
38
|
+
updateDesk(assignment.assignedTo, "review_needed", assignment.timestamp, timeline.taskId);
|
|
39
|
+
}
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (timeline.blocked && timeline.status !== "failed") {
|
|
43
|
+
taskWall.blocked++;
|
|
44
|
+
if (timeline.assignedTo) {
|
|
45
|
+
updateDesk(timeline.assignedTo, "blocked", timeline.latestTimestamp, timeline.taskId);
|
|
46
|
+
}
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (timeline.status === "in_progress" || timeline.status === "rework") {
|
|
50
|
+
taskWall.in_progress++;
|
|
51
|
+
if (timeline.assignedTo) {
|
|
52
|
+
updateDesk(timeline.assignedTo, timeline.status === "rework" ? "rework" : "busy", timeline.latestTimestamp, timeline.taskId);
|
|
53
|
+
}
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (["assigned", "created", "unknown"].includes(timeline.status)) {
|
|
57
|
+
taskWall.created++;
|
|
58
|
+
if (timeline.assignedTo) {
|
|
59
|
+
updateDesk(timeline.assignedTo, "assigned", timeline.latestTimestamp, timeline.taskId);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (timeline.status === "completed" && timeline.assignedTo) {
|
|
63
|
+
updateDesk(timeline.assignedTo, "completed", timeline.latestTimestamp, timeline.taskId);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
for (const timeline of taskMap.values()) {
|
|
67
|
+
const completedToday = timeline.reviewedTimestamps.some((ts) => ts >= todayIso);
|
|
68
|
+
if (completedToday)
|
|
69
|
+
taskWall.completed_today++;
|
|
70
|
+
}
|
|
71
|
+
// Meeting rooms (open RFCs)
|
|
72
|
+
const rfcSearch = await searchEvents({
|
|
73
|
+
query: "RFC-",
|
|
74
|
+
type: "proposal",
|
|
75
|
+
maxResults: 10,
|
|
76
|
+
});
|
|
77
|
+
const openRfcs = [];
|
|
78
|
+
for (const r of rfcSearch.results) {
|
|
79
|
+
const rfcMatch = (r.snippet ?? "").match(/RFC-\d+/);
|
|
80
|
+
if (rfcMatch) {
|
|
81
|
+
const decisionSearch = await searchEvents({
|
|
82
|
+
query: rfcMatch[0],
|
|
83
|
+
type: "decision",
|
|
84
|
+
maxResults: 1,
|
|
85
|
+
});
|
|
86
|
+
if (decisionSearch.totalMatches === 0) {
|
|
87
|
+
openRfcs.push({
|
|
88
|
+
rfc_id: rfcMatch[0],
|
|
89
|
+
age_hours: Math.round((now - new Date(r.timestamp ?? "").getTime()) / 3600000),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Operations (triggers fired today)
|
|
95
|
+
const triggerSearch = await searchEvents({
|
|
96
|
+
query: "trigger_fired",
|
|
97
|
+
type: "trigger_fired",
|
|
98
|
+
maxResults: 50,
|
|
99
|
+
});
|
|
100
|
+
let triggersToday = 0;
|
|
101
|
+
for (const t of triggerSearch.results) {
|
|
102
|
+
if ((t.timestamp ?? "") >= todayIso)
|
|
103
|
+
triggersToday++;
|
|
104
|
+
}
|
|
105
|
+
// Escalations: count currently blocked tasks
|
|
106
|
+
const escalations = taskWall.blocked;
|
|
107
|
+
// Library (new Gold entities today)
|
|
108
|
+
let newDecisionsToday = 0;
|
|
109
|
+
let newLessonsToday = 0;
|
|
110
|
+
if (isCosmosEnabled()) {
|
|
111
|
+
try {
|
|
112
|
+
const factsResult = await queryEntities({});
|
|
113
|
+
for (const e of factsResult.entities) {
|
|
114
|
+
if (e.created_at >= todayIso) {
|
|
115
|
+
if (e.entity_type === "decision")
|
|
116
|
+
newDecisionsToday++;
|
|
117
|
+
if (e.entity_type === "insight")
|
|
118
|
+
newLessonsToday++;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
newDecisionsToday = 0;
|
|
124
|
+
newLessonsToday = 0;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
task_wall: taskWall,
|
|
129
|
+
meeting_rooms: { open_rfcs: openRfcs, decided_today: 0 },
|
|
130
|
+
desks: agents,
|
|
131
|
+
operations: { triggers_fired_today: triggersToday, escalations },
|
|
132
|
+
library: {
|
|
133
|
+
new_decisions_today: newDecisionsToday,
|
|
134
|
+
new_lessons_today: newLessonsToday,
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=office-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"office-status.js","sourceRoot":"","sources":["../../src/domain/office-status.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,mEAAmE;AACnE,6DAA6D;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAmB9D,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC9B,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAE1C,YAAY;IACZ,MAAM,QAAQ,GAAG;QACf,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,CAAC;QACd,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,eAAe,EAAE,CAAC;KACnB,CAAC;IACF,MAAM,MAAM,GAGR,EAAE,CAAC;IACP,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAEtD,SAAS,UAAU,CACjB,KAAa,EACb,MAAc,EACd,SAAwB,EACxB,MAAc;QAEd,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,GAAG;gBACd,MAAM;gBACN,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,SAAS,IAAI,SAAS;aAClC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CACzD,CAAC,UAAU,EAAE,EAAE,CACb,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,CACxE,CAAC;QAEF,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,MAAM,UAAU,IAAI,iBAAiB,EAAE,CAAC;gBAC3C,UAAU,CACR,UAAU,CAAC,UAAU,EACrB,eAAe,EACf,UAAU,CAAC,SAAS,EACpB,QAAQ,CAAC,MAAM,CAChB,CAAC;YACJ,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACrD,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACxB,UAAU,CACR,QAAQ,CAAC,UAAU,EACnB,SAAS,EACT,QAAQ,CAAC,eAAe,EACxB,QAAQ,CAAC,MAAM,CAChB,CAAC;YACJ,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACtE,QAAQ,CAAC,WAAW,EAAE,CAAC;YACvB,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACxB,UAAU,CACR,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAChD,QAAQ,CAAC,eAAe,EACxB,QAAQ,CAAC,MAAM,CAChB,CAAC;YACJ,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjE,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACxB,UAAU,CACR,QAAQ,CAAC,UAAU,EACnB,UAAU,EACV,QAAQ,CAAC,eAAe,EACxB,QAAQ,CAAC,MAAM,CAChB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC3D,UAAU,CACR,QAAQ,CAAC,UAAU,EACnB,WAAW,EACX,QAAQ,CAAC,eAAe,EACxB,QAAQ,CAAC,MAAM,CAChB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,MAAM,cAAc,GAAG,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,QAAQ,CACvB,CAAC;QACF,IAAI,cAAc;YAAE,QAAQ,CAAC,eAAe,EAAE,CAAC;IACjD,CAAC;IAED,4BAA4B;IAC5B,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC;QACnC,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,EAAE;KACf,CAAC,CAAC;IACH,MAAM,QAAQ,GAAiD,EAAE,CAAC;IAClE,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC;gBACxC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAClB,IAAI,EAAE,UAAU;gBAChB,UAAU,EAAE,CAAC;aACd,CAAC,CAAC;YACH,IAAI,cAAc,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;oBACnB,SAAS,EAAE,IAAI,CAAC,KAAK,CACnB,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CACxD;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC;QACvC,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,EAAE;KACf,CAAC,CAAC;IACH,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QACtC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,QAAQ;YAAE,aAAa,EAAE,CAAC;IACvD,CAAC;IAED,6CAA6C;IAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;IAErC,oCAAoC;IACpC,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC;oBAC7B,IAAI,CAAC,CAAC,WAAW,KAAK,UAAU;wBAAE,iBAAiB,EAAE,CAAC;oBACtD,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS;wBAAE,eAAe,EAAE,CAAC;gBACrD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB,GAAG,CAAC,CAAC;YACtB,eAAe,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ;QACnB,aAAa,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE;QACxD,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,EAAE,oBAAoB,EAAE,aAAa,EAAE,WAAW,EAAE;QAChE,OAAO,EAAE;YACP,mBAAmB,EAAE,iBAAiB;YACtC,iBAAiB,EAAE,eAAe;SACnC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../src/domain/questions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,aAAa,EAEb,cAAc,EACf,MAAM,aAAa,CAAC;AAGrB,wBAAsB,YAAY,CAAC,EACjC,WAAW,EACX,MAAe,EACf,OAAO,EACP,KAAU,GACX,GAAE,aAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAkE9C"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// questions.ts — How do AI agents ask each other questions asynchronously?
|
|
2
|
+
import { readAllRecords } from "../storage/store.js";
|
|
3
|
+
export async function getQuestions({ directed_to, status = "open", task_id, limit = 10, } = {}) {
|
|
4
|
+
const { bronzeDir, records } = await readAllRecords({});
|
|
5
|
+
// Collect all question and answer events
|
|
6
|
+
const questions = records.filter((r) => r.type === "question");
|
|
7
|
+
const answers = records.filter((r) => r.type === "answer");
|
|
8
|
+
// Index answers by thread_id for fast lookup
|
|
9
|
+
const answerMap = new Map();
|
|
10
|
+
for (const a of answers) {
|
|
11
|
+
const tid = a.context?.thread_id;
|
|
12
|
+
if (tid)
|
|
13
|
+
answerMap.set(tid, a);
|
|
14
|
+
}
|
|
15
|
+
const results = [];
|
|
16
|
+
for (const q of questions) {
|
|
17
|
+
const ctx = q.context ?? {};
|
|
18
|
+
const threadId = ctx.thread_id ?? "";
|
|
19
|
+
if (!threadId)
|
|
20
|
+
continue;
|
|
21
|
+
const answerRecord = answerMap.get(threadId);
|
|
22
|
+
const isAnswered = !!answerRecord;
|
|
23
|
+
// Filter by status
|
|
24
|
+
if (status === "open" && isAnswered)
|
|
25
|
+
continue;
|
|
26
|
+
if (status === "answered" && !isAnswered)
|
|
27
|
+
continue;
|
|
28
|
+
// Filter by directed_to
|
|
29
|
+
const directedTo = ctx.directed_to ?? null;
|
|
30
|
+
if (directed_to && directedTo?.toLowerCase() !== directed_to.toLowerCase())
|
|
31
|
+
continue;
|
|
32
|
+
// Filter by task_id
|
|
33
|
+
const qTaskId = ctx.task_id ?? null;
|
|
34
|
+
if (task_id && qTaskId !== task_id)
|
|
35
|
+
continue;
|
|
36
|
+
const answerCtx = answerRecord
|
|
37
|
+
? (answerRecord.context ?? {})
|
|
38
|
+
: {};
|
|
39
|
+
results.push({
|
|
40
|
+
thread_id: threadId,
|
|
41
|
+
question: q.content ?? "",
|
|
42
|
+
asked_by: ctx.asked_by ?? q._source ?? null,
|
|
43
|
+
directed_to: directedTo,
|
|
44
|
+
task_id: qTaskId,
|
|
45
|
+
status: isAnswered ? "answered" : "open",
|
|
46
|
+
asked_at: q._timestamp ?? null,
|
|
47
|
+
answered_at: answerRecord?._timestamp ?? null,
|
|
48
|
+
answer: answerRecord?.content ?? null,
|
|
49
|
+
answered_by: answerCtx.answered_by ?? answerRecord?._source ?? null,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
// Sort newest first
|
|
53
|
+
results.sort((a, b) => (b.asked_at ?? "").localeCompare(a.asked_at ?? ""));
|
|
54
|
+
return {
|
|
55
|
+
bronzeDir,
|
|
56
|
+
total: results.length,
|
|
57
|
+
questions: results.slice(0, limit),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=questions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questions.js","sourceRoot":"","sources":["../../src/domain/questions.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAQ3E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,WAAW,EACX,MAAM,GAAG,MAAM,EACf,OAAO,EACP,KAAK,GAAG,EAAE,MACO,EAAE;IACnB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;IAExD,yCAAyC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAE3D,6CAA6C;IAC7C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,GAAG,GAAI,CAAC,CAAC,OAAmC,EAAE,SAEvC,CAAC;QACd,IAAI,GAAG;YAAE,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAI,CAAC,CAAC,OAAmC,IAAI,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAI,GAAG,CAAC,SAAoB,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC;QAElC,mBAAmB;QACnB,IAAI,MAAM,KAAK,MAAM,IAAI,UAAU;YAAE,SAAS;QAC9C,IAAI,MAAM,KAAK,UAAU,IAAI,CAAC,UAAU;YAAE,SAAS;QAEnD,wBAAwB;QACxB,MAAM,UAAU,GAAI,GAAG,CAAC,WAAsB,IAAI,IAAI,CAAC;QACvD,IAAI,WAAW,IAAI,UAAU,EAAE,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE;YACxE,SAAS;QAEX,oBAAoB;QACpB,MAAM,OAAO,GAAI,GAAG,CAAC,OAAkB,IAAI,IAAI,CAAC;QAChD,IAAI,OAAO,IAAI,OAAO,KAAK,OAAO;YAAE,SAAS;QAE7C,MAAM,SAAS,GAAG,YAAY;YAC5B,CAAC,CAAC,CAAE,YAAY,CAAC,OAAmC,IAAI,EAAE,CAAC;YAC3D,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,QAAQ;YACnB,QAAQ,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;YACzB,QAAQ,EAAG,GAAG,CAAC,QAAmB,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI;YACvD,WAAW,EAAE,UAAU;YACvB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;YACxC,QAAQ,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;YAC9B,WAAW,EAAE,YAAY,EAAE,UAAU,IAAI,IAAI;YAC7C,MAAM,EAAE,YAAY,EAAE,OAAO,IAAI,IAAI;YACrC,WAAW,EACR,SAAS,CAAC,WAAsB,IAAI,YAAY,EAAE,OAAO,IAAI,IAAI;SACrE,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IAE3E,OAAO;QACL,SAAS;QACT,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ActiveRun {
|
|
2
|
+
run_id: string;
|
|
3
|
+
task_id: string;
|
|
4
|
+
started_at: string;
|
|
5
|
+
agent: string;
|
|
6
|
+
}
|
|
7
|
+
declare const activeRuns: Map<string, ActiveRun>;
|
|
8
|
+
export declare function generateRunId(taskId: string): string;
|
|
9
|
+
export declare function registerActiveRun(run: ActiveRun): ActiveRun;
|
|
10
|
+
export declare function getActiveRun(taskId: string): ActiveRun | undefined;
|
|
11
|
+
export declare function completeActiveRun(taskId: string): ActiveRun | undefined;
|
|
12
|
+
export declare function listActiveRuns(): ActiveRun[];
|
|
13
|
+
export { activeRuns as activeRunsMap };
|
|
14
|
+
//# sourceMappingURL=run-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-manager.d.ts","sourceRoot":"","sources":["../../src/domain/run-manager.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,QAAA,MAAM,UAAU,wBAA+B,CAAC;AAEhD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CAG3D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAElE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAIvE;AAED,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAE5C;AAED,OAAO,EAAE,UAAU,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
const activeRuns = new Map();
|
|
3
|
+
export function generateRunId(taskId) {
|
|
4
|
+
const trimmed = (taskId ?? "").trim();
|
|
5
|
+
const safeTaskId = trimmed.length > 0 ? trimmed.replace(/\s+/g, "-") : "task";
|
|
6
|
+
return `${safeTaskId}-run-${randomUUID()}`;
|
|
7
|
+
}
|
|
8
|
+
export function registerActiveRun(run) {
|
|
9
|
+
activeRuns.set(run.task_id, run);
|
|
10
|
+
return run;
|
|
11
|
+
}
|
|
12
|
+
export function getActiveRun(taskId) {
|
|
13
|
+
return activeRuns.get(taskId);
|
|
14
|
+
}
|
|
15
|
+
export function completeActiveRun(taskId) {
|
|
16
|
+
const run = activeRuns.get(taskId);
|
|
17
|
+
if (run)
|
|
18
|
+
activeRuns.delete(taskId);
|
|
19
|
+
return run;
|
|
20
|
+
}
|
|
21
|
+
export function listActiveRuns() {
|
|
22
|
+
return [...activeRuns.values()];
|
|
23
|
+
}
|
|
24
|
+
export { activeRuns as activeRunsMap };
|
|
25
|
+
//# sourceMappingURL=run-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-manager.js","sourceRoot":"","sources":["../../src/domain/run-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AASzC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;AAEhD,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9E,OAAO,GAAG,UAAU,QAAQ,UAAU,EAAE,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAc;IAC9C,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,GAAG;QAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,OAAO,EAAE,UAAU,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface TaskAssignment {
|
|
2
|
+
taskId: string;
|
|
3
|
+
assignedTo: string;
|
|
4
|
+
timestamp: string;
|
|
5
|
+
isReview: boolean;
|
|
6
|
+
source: string | null;
|
|
7
|
+
content: string | null;
|
|
8
|
+
}
|
|
9
|
+
export interface TaskTimeline {
|
|
10
|
+
taskId: string;
|
|
11
|
+
status: string;
|
|
12
|
+
assignedTo: string | null;
|
|
13
|
+
latestType: string | null;
|
|
14
|
+
latestTimestamp: string | null;
|
|
15
|
+
latestContent: string | null;
|
|
16
|
+
createdTimestamp: string | null;
|
|
17
|
+
createdContent: string | null;
|
|
18
|
+
assignments: TaskAssignment[];
|
|
19
|
+
reviewAssignments: TaskAssignment[];
|
|
20
|
+
startedTimestamps: string[];
|
|
21
|
+
completedTimestamps: string[];
|
|
22
|
+
reviewedTimestamps: string[];
|
|
23
|
+
blocked: boolean;
|
|
24
|
+
contextTimestamps: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface TaskEventIndex {
|
|
27
|
+
tasks: Map<string, TaskTimeline>;
|
|
28
|
+
taskContextIds: Set<string>;
|
|
29
|
+
}
|
|
30
|
+
export declare function loadTaskEventIndex(): Promise<TaskEventIndex>;
|
|
31
|
+
//# sourceMappingURL=task-event-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-event-index.d.ts","sourceRoot":"","sources":["../../src/domain/task-event-index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,iBAAiB,EAAE,cAAc,EAAE,CAAC;IACpC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B;AA8BD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CAsGlE"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// task-event-index.ts — Aggregate task-related events for inbox and status views.
|
|
2
|
+
import { readAllRecords } from "../storage/store.js";
|
|
3
|
+
function ensureTimeline(map, taskId) {
|
|
4
|
+
let timeline = map.get(taskId);
|
|
5
|
+
if (!timeline) {
|
|
6
|
+
timeline = {
|
|
7
|
+
taskId,
|
|
8
|
+
status: "unknown",
|
|
9
|
+
assignedTo: null,
|
|
10
|
+
latestType: null,
|
|
11
|
+
latestTimestamp: null,
|
|
12
|
+
latestContent: null,
|
|
13
|
+
createdTimestamp: null,
|
|
14
|
+
createdContent: null,
|
|
15
|
+
assignments: [],
|
|
16
|
+
reviewAssignments: [],
|
|
17
|
+
startedTimestamps: [],
|
|
18
|
+
completedTimestamps: [],
|
|
19
|
+
reviewedTimestamps: [],
|
|
20
|
+
blocked: false,
|
|
21
|
+
contextTimestamps: [],
|
|
22
|
+
};
|
|
23
|
+
map.set(taskId, timeline);
|
|
24
|
+
}
|
|
25
|
+
return timeline;
|
|
26
|
+
}
|
|
27
|
+
export async function loadTaskEventIndex() {
|
|
28
|
+
const { records } = await readAllRecords({ type: "task_" });
|
|
29
|
+
const tasks = new Map();
|
|
30
|
+
const taskContextIds = new Set();
|
|
31
|
+
const sorted = [...records].sort((a, b) => (a._timestamp ?? "").localeCompare(b._timestamp ?? ""));
|
|
32
|
+
for (const record of sorted) {
|
|
33
|
+
const context = record.context ?? {};
|
|
34
|
+
const taskId = typeof context.task_id === "string" ? context.task_id : null;
|
|
35
|
+
const timestamp = record._timestamp ?? new Date().toISOString();
|
|
36
|
+
if (record.type === "task_context" && taskId) {
|
|
37
|
+
taskContextIds.add(taskId);
|
|
38
|
+
}
|
|
39
|
+
if (!taskId)
|
|
40
|
+
continue;
|
|
41
|
+
const timeline = ensureTimeline(tasks, taskId);
|
|
42
|
+
timeline.latestType = record.type ?? timeline.latestType;
|
|
43
|
+
timeline.latestTimestamp = record._timestamp ?? timeline.latestTimestamp;
|
|
44
|
+
if (record.type === "task_created" && !timeline.createdTimestamp) {
|
|
45
|
+
timeline.createdTimestamp = timestamp;
|
|
46
|
+
timeline.createdContent = record.content ?? null;
|
|
47
|
+
if (timeline.status === "unknown") {
|
|
48
|
+
timeline.status = "created";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
timeline.latestContent = record.content ?? timeline.latestContent;
|
|
52
|
+
if (typeof context.status === "string") {
|
|
53
|
+
timeline.status = context.status;
|
|
54
|
+
}
|
|
55
|
+
if (typeof context.assigned_to === "string") {
|
|
56
|
+
timeline.assignedTo = context.assigned_to;
|
|
57
|
+
}
|
|
58
|
+
switch (record.type) {
|
|
59
|
+
case "task_assigned": {
|
|
60
|
+
const assignedTo = typeof context.assigned_to === "string" ? context.assigned_to : null;
|
|
61
|
+
if (assignedTo) {
|
|
62
|
+
const assignment = {
|
|
63
|
+
taskId,
|
|
64
|
+
assignedTo,
|
|
65
|
+
timestamp,
|
|
66
|
+
isReview: context.review === true,
|
|
67
|
+
source: record._source ?? null,
|
|
68
|
+
content: record.content ?? null,
|
|
69
|
+
};
|
|
70
|
+
if (assignment.isReview) {
|
|
71
|
+
timeline.reviewAssignments.push(assignment);
|
|
72
|
+
timeline.status = "review";
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
timeline.assignments.push(assignment);
|
|
76
|
+
if (timeline.status === "unknown")
|
|
77
|
+
timeline.status = "assigned";
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case "task_started":
|
|
83
|
+
case "task_progress":
|
|
84
|
+
timeline.startedTimestamps.push(timestamp);
|
|
85
|
+
timeline.status = "in_progress";
|
|
86
|
+
break;
|
|
87
|
+
case "task_blocked":
|
|
88
|
+
timeline.blocked = true;
|
|
89
|
+
timeline.status = "blocked";
|
|
90
|
+
break;
|
|
91
|
+
case "task_unblocked":
|
|
92
|
+
timeline.blocked = false;
|
|
93
|
+
timeline.status = "in_progress";
|
|
94
|
+
break;
|
|
95
|
+
case "task_completed":
|
|
96
|
+
timeline.completedTimestamps.push(timestamp);
|
|
97
|
+
timeline.status = "completed";
|
|
98
|
+
break;
|
|
99
|
+
case "task_failed":
|
|
100
|
+
timeline.status = "failed";
|
|
101
|
+
break;
|
|
102
|
+
case "task_reviewed":
|
|
103
|
+
timeline.reviewedTimestamps.push(timestamp);
|
|
104
|
+
if (context.verdict === "fail") {
|
|
105
|
+
timeline.status = "rework";
|
|
106
|
+
}
|
|
107
|
+
break;
|
|
108
|
+
case "task_context":
|
|
109
|
+
timeline.contextTimestamps.push(timestamp);
|
|
110
|
+
break;
|
|
111
|
+
default:
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return { tasks, taskContextIds };
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=task-event-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-event-index.js","sourceRoot":"","sources":["../../src/domain/task-event-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/domain/tasks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,SAAS,EAGT,UAAU,EACX,MAAM,aAAa,CAAC;AAcrB,wBAAsB,QAAQ,CAAC,EAC7B,MAAiB,EACjB,WAAW,EACX,SAAS,EACT,OAAO,EACP,KAAU,GACX,GAAE,SAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAqHtC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// tasks.ts — How are tasks tracked?
|
|
2
|
+
import { readAllRecords, readEventsByTask } from "../storage/store.js";
|
|
3
|
+
function formatTaskEvent(record) {
|
|
4
|
+
return {
|
|
5
|
+
eventId: record._event_id ?? null,
|
|
6
|
+
timestamp: record._timestamp ?? null,
|
|
7
|
+
source: record._source ?? record.source ?? null,
|
|
8
|
+
type: record.type ?? null,
|
|
9
|
+
content: record.content ?? null,
|
|
10
|
+
context: record.context ?? null,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export async function getTasks({ status = "active", assigned_to, task_type, task_id, limit = 20, } = {}) {
|
|
14
|
+
const { bronzeDir, records, parseErrors } = await readAllRecords({
|
|
15
|
+
type: "task_",
|
|
16
|
+
});
|
|
17
|
+
const taskEvents = records.filter((r) => (r.type ?? "").startsWith("task_"));
|
|
18
|
+
if (task_id) {
|
|
19
|
+
const { records: briefingRecords } = await readAllRecords({
|
|
20
|
+
type: "session_briefing",
|
|
21
|
+
});
|
|
22
|
+
const taskSlice = await readEventsByTask(task_id);
|
|
23
|
+
const briefingSlice = briefingRecords.filter((r) => r.type === "session_briefing" &&
|
|
24
|
+
r.context?.task_id === task_id);
|
|
25
|
+
const history = [...taskSlice, ...briefingSlice].sort((a, b) => (a._timestamp ?? "").localeCompare(b._timestamp ?? ""));
|
|
26
|
+
return {
|
|
27
|
+
bronzeDir,
|
|
28
|
+
mode: "history",
|
|
29
|
+
task_id,
|
|
30
|
+
events: history.map(formatTaskEvent),
|
|
31
|
+
totalEvents: history.length,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const taskMap = new Map();
|
|
35
|
+
for (const record of taskEvents) {
|
|
36
|
+
const tid = record.context?.task_id;
|
|
37
|
+
if (!tid)
|
|
38
|
+
continue;
|
|
39
|
+
if (!taskMap.has(tid))
|
|
40
|
+
taskMap.set(tid, []);
|
|
41
|
+
taskMap.get(tid).push(record);
|
|
42
|
+
}
|
|
43
|
+
const ACTIVE_STATUSES = new Set([
|
|
44
|
+
"created",
|
|
45
|
+
"assigned",
|
|
46
|
+
"in_progress",
|
|
47
|
+
"blocked",
|
|
48
|
+
"rework",
|
|
49
|
+
]);
|
|
50
|
+
const tasks = [];
|
|
51
|
+
for (const [tid, events] of taskMap) {
|
|
52
|
+
events.sort((a, b) => (a._timestamp ?? "").localeCompare(b._timestamp ?? ""));
|
|
53
|
+
const latest = events[events.length - 1];
|
|
54
|
+
const created = events[0];
|
|
55
|
+
const mergedContext = {};
|
|
56
|
+
for (const ev of events) {
|
|
57
|
+
if (ev.context)
|
|
58
|
+
Object.assign(mergedContext, ev.context);
|
|
59
|
+
}
|
|
60
|
+
const currentStatus = mergedContext.status ?? "unknown";
|
|
61
|
+
if (status === "active" && !ACTIVE_STATUSES.has(currentStatus))
|
|
62
|
+
continue;
|
|
63
|
+
if (status === "completed" && currentStatus !== "completed")
|
|
64
|
+
continue;
|
|
65
|
+
if (status === "failed" && currentStatus !== "failed")
|
|
66
|
+
continue;
|
|
67
|
+
if (status === "rework" && currentStatus !== "rework")
|
|
68
|
+
continue;
|
|
69
|
+
if (assigned_to &&
|
|
70
|
+
(mergedContext.assigned_to ?? "").toLowerCase() !==
|
|
71
|
+
assigned_to.toLowerCase())
|
|
72
|
+
continue;
|
|
73
|
+
if (task_type &&
|
|
74
|
+
(mergedContext.task_type ?? "").toLowerCase() !==
|
|
75
|
+
task_type.toLowerCase())
|
|
76
|
+
continue;
|
|
77
|
+
tasks.push({
|
|
78
|
+
task_id: tid,
|
|
79
|
+
status: currentStatus,
|
|
80
|
+
task_type: mergedContext.task_type ?? null,
|
|
81
|
+
assigned_to: mergedContext.assigned_to ?? null,
|
|
82
|
+
score: mergedContext.score ?? null,
|
|
83
|
+
problem: mergedContext.problem ?? null,
|
|
84
|
+
impact: mergedContext.impact ?? null,
|
|
85
|
+
project: mergedContext.project ?? null,
|
|
86
|
+
workflow_stage: mergedContext.workflow_stage ?? null,
|
|
87
|
+
phase: mergedContext.phase ?? null,
|
|
88
|
+
depends_on: mergedContext.depends_on ?? null,
|
|
89
|
+
pattern: mergedContext.pattern ?? null,
|
|
90
|
+
acceptance: mergedContext.acceptance ?? null,
|
|
91
|
+
spec_file: mergedContext.spec_file ?? null,
|
|
92
|
+
summary: created.content ?? null,
|
|
93
|
+
latest_update: latest.content ?? null,
|
|
94
|
+
latest_type: latest.type ?? null,
|
|
95
|
+
created_at: created._timestamp ?? null,
|
|
96
|
+
updated_at: latest._timestamp ?? null,
|
|
97
|
+
event_count: events.length,
|
|
98
|
+
tags: mergedContext.tags ?? null,
|
|
99
|
+
lessons: mergedContext.lessons ?? null,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
tasks.sort((a, b) => (b.updated_at ?? "").localeCompare(a.updated_at ?? ""));
|
|
103
|
+
return {
|
|
104
|
+
bronzeDir,
|
|
105
|
+
mode: "board",
|
|
106
|
+
status_filter: status,
|
|
107
|
+
total_tasks: tasks.length,
|
|
108
|
+
tasks: tasks.slice(0, limit),
|
|
109
|
+
parseErrors,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/domain/tasks.ts"],"names":[],"mappings":"AAAA,oCAAoC;AASpC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvE,SAAS,eAAe,CAAC,MAAoB;IAC3C,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;QACjC,SAAS,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;QACpC,MAAM,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI;QAC/C,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;QAC/B,OAAO,EAAG,MAAM,CAAC,OAAmC,IAAI,IAAI;KAC7D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,EAC7B,MAAM,GAAG,QAAQ,EACjB,WAAW,EACX,SAAS,EACT,OAAO,EACP,KAAK,GAAG,EAAE,MACG,EAAE;IACf,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,cAAc,CAAC;QAC/D,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAE7E,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,cAAc,CAAC;YACxD,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,kBAAkB;YAC5B,CAAC,CAAC,OAAmC,EAAE,OAAO,KAAK,OAAO,CAC9D,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC7D,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CACvD,CAAC;QAEF,OAAO;YACL,SAAS;YACT,IAAI,EAAE,SAAS;YACf,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YACpC,WAAW,EAAE,OAAO,CAAC,MAAM;SAC5B,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAClD,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,GAAG,GAAI,MAAM,CAAC,OAAmC,EAAE,OAE5C,CAAC;QACd,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;QAC9B,SAAS;QACT,UAAU;QACV,aAAa;QACb,SAAS;QACT,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,KAAK,GAAkB,EAAE,CAAC;IAEhC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CACvD,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QAE3B,MAAM,aAAa,GAA4B,EAAE,CAAC;QAClD,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;YACxB,IAAI,EAAE,CAAC,OAAO;gBAAE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,aAAa,GAAI,aAAa,CAAC,MAAiB,IAAI,SAAS,CAAC;QAEpE,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC;YAAE,SAAS;QACzE,IAAI,MAAM,KAAK,WAAW,IAAI,aAAa,KAAK,WAAW;YAAE,SAAS;QACtE,IAAI,MAAM,KAAK,QAAQ,IAAI,aAAa,KAAK,QAAQ;YAAE,SAAS;QAChE,IAAI,MAAM,KAAK,QAAQ,IAAI,aAAa,KAAK,QAAQ;YAAE,SAAS;QAEhE,IACE,WAAW;YACX,CAAE,aAAa,CAAC,WAAsB,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;gBACzD,WAAW,CAAC,WAAW,EAAE;YAE3B,SAAS;QAEX,IACE,SAAS;YACT,CAAE,aAAa,CAAC,SAAoB,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;gBACvD,SAAS,CAAC,WAAW,EAAE;YAEzB,SAAS;QAEX,KAAK,CAAC,IAAI,CAAC;YACT,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,aAAa;YACrB,SAAS,EAAG,aAAa,CAAC,SAAoB,IAAI,IAAI;YACtD,WAAW,EAAG,aAAa,CAAC,WAAsB,IAAI,IAAI;YAC1D,KAAK,EAAE,aAAa,CAAC,KAAK,IAAI,IAAI;YAClC,OAAO,EAAE,aAAa,CAAC,OAAO,IAAI,IAAI;YACtC,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,IAAI;YACpC,OAAO,EAAE,aAAa,CAAC,OAAO,IAAI,IAAI;YACtC,cAAc,EAAE,aAAa,CAAC,cAAc,IAAI,IAAI;YACpD,KAAK,EAAE,aAAa,CAAC,KAAK,IAAI,IAAI;YAClC,UAAU,EAAE,aAAa,CAAC,UAAU,IAAI,IAAI;YAC5C,OAAO,EAAE,aAAa,CAAC,OAAO,IAAI,IAAI;YACtC,UAAU,EAAE,aAAa,CAAC,UAAU,IAAI,IAAI;YAC5C,SAAS,EAAE,aAAa,CAAC,SAAS,IAAI,IAAI;YAC1C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,aAAa,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;YACrC,WAAW,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;YAChC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YACtC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;YACrC,WAAW,EAAE,MAAM,CAAC,MAAM;YAC1B,IAAI,EAAE,aAAa,CAAC,IAAI,IAAI,IAAI;YAChC,OAAO,EAAE,aAAa,CAAC,OAAO,IAAI,IAAI;SACvC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IAE7E,OAAO;QACL,SAAS;QACT,IAAI,EAAE,OAAO;QACb,aAAa,EAAE,MAAM;QACrB,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;QAC5B,WAAW;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { GoldEntity } from "../types.js";
|
|
2
|
+
export declare function buildL0Identity(agent: string, task_id: string, format: "bullets" | "prose"): string;
|
|
3
|
+
export declare function buildL1TaskSpec(taskCreatedContent: string, acceptanceCriteria: string[], specFile: string | null, _format: "bullets" | "prose"): string;
|
|
4
|
+
export declare function buildL2ProjectContext(gotchas: string[], format: "bullets" | "prose"): string;
|
|
5
|
+
export declare function buildL3KnowledgeGraph(entities: GoldEntity[], selfContained: boolean, format: "bullets" | "prose"): string;
|
|
6
|
+
export declare function buildL4RecentCompletions(completions: Array<{
|
|
7
|
+
task_id: string;
|
|
8
|
+
summary: string;
|
|
9
|
+
gotcha?: string;
|
|
10
|
+
}>, format: "bullets" | "prose"): string;
|
|
11
|
+
export declare function buildL5RetryContext(failedCriteria: string[], fixInstructions: string, format: "bullets" | "prose"): string;
|
|
12
|
+
export declare function buildLA_AgentJournal(journal: Record<string, unknown>, format: "bullets" | "prose"): string;
|
|
13
|
+
export declare function buildLB_TaskCheckpoint(checkpointContent: string, format: "bullets" | "prose"): string;
|
|
14
|
+
export declare function buildL6FileManifest(files: Array<{
|
|
15
|
+
path: string;
|
|
16
|
+
action: "CREATE" | "MODIFY" | "DELETE";
|
|
17
|
+
}>, format: "bullets" | "prose"): string;
|
|
18
|
+
//# sourceMappingURL=warm-start-builders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warm-start-builders.d.ts","sourceRoot":"","sources":["../../src/domain/warm-start-builders.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,GAAG,OAAO,GAC1B,MAAM,CAmBR;AAED,wBAAgB,eAAe,CAC7B,kBAAkB,EAAE,MAAM,EAC1B,kBAAkB,EAAE,MAAM,EAAE,EAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,OAAO,EAAE,SAAS,GAAG,OAAO,GAC3B,MAAM,CAYR;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,SAAS,GAAG,OAAO,GAC1B,MAAM,CAWR;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,UAAU,EAAE,EACtB,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,SAAS,GAAG,OAAO,GAC1B,MAAM,CAqBR;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACzE,MAAM,EAAE,SAAS,GAAG,OAAO,GAC1B,MAAM,CAcR;AAED,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EAAE,EACxB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,SAAS,GAAG,OAAO,GAC1B,MAAM,CAaR;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,EAAE,SAAS,GAAG,OAAO,GAC1B,MAAM,CAgCR;AAED,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,SAAS,GAAG,OAAO,GAC1B,MAAM,CAUR;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;CAAE,CAAC,EACtE,MAAM,EAAE,SAAS,GAAG,OAAO,GAC1B,MAAM,CAcR"}
|