harness-engineering-agent 0.3.11 → 0.3.13

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 (117) hide show
  1. package/README.md +8 -3
  2. package/dist/agent/harness-role-capability-directory-data.d.ts.map +1 -1
  3. package/dist/agent/harness-role-capability-directory-data.js +3 -3
  4. package/dist/agent/harness-role-capability-directory-data.js.map +1 -1
  5. package/dist/agent/harness-role-capability-directory.d.ts +1 -0
  6. package/dist/agent/harness-role-capability-directory.d.ts.map +1 -1
  7. package/dist/agent/harness-role-capability-directory.js +1 -0
  8. package/dist/agent/harness-role-capability-directory.js.map +1 -1
  9. package/dist/controller/agent-session-types.d.ts +17 -1
  10. package/dist/controller/agent-session-types.d.ts.map +1 -1
  11. package/dist/controller/agent-session-utils.d.ts +40 -3
  12. package/dist/controller/agent-session-utils.d.ts.map +1 -1
  13. package/dist/controller/agent-session-utils.js +67 -21
  14. package/dist/controller/agent-session-utils.js.map +1 -1
  15. package/dist/controller/agent-session.d.ts.map +1 -1
  16. package/dist/controller/agent-session.js +129 -10
  17. package/dist/controller/agent-session.js.map +1 -1
  18. package/dist/controller/context-budget.d.ts +71 -0
  19. package/dist/controller/context-budget.d.ts.map +1 -0
  20. package/dist/controller/context-budget.js +219 -0
  21. package/dist/controller/context-budget.js.map +1 -0
  22. package/dist/controller/context-builder.d.ts +27 -0
  23. package/dist/controller/context-builder.d.ts.map +1 -0
  24. package/dist/controller/context-builder.js +184 -0
  25. package/dist/controller/context-builder.js.map +1 -0
  26. package/dist/controller/context-validation.d.ts +46 -0
  27. package/dist/controller/context-validation.d.ts.map +1 -0
  28. package/dist/controller/context-validation.js +126 -0
  29. package/dist/controller/context-validation.js.map +1 -0
  30. package/dist/controller/direct-runner.d.ts +2 -0
  31. package/dist/controller/direct-runner.d.ts.map +1 -1
  32. package/dist/controller/direct-runner.js +20 -2
  33. package/dist/controller/direct-runner.js.map +1 -1
  34. package/dist/controller/index.d.ts +1 -0
  35. package/dist/controller/index.d.ts.map +1 -1
  36. package/dist/controller/index.js +1 -0
  37. package/dist/controller/index.js.map +1 -1
  38. package/dist/controller/run-acceptance.d.ts.map +1 -1
  39. package/dist/controller/run-acceptance.js +12 -0
  40. package/dist/controller/run-acceptance.js.map +1 -1
  41. package/dist/controller/run-controller.d.ts.map +1 -1
  42. package/dist/controller/run-controller.js +2 -0
  43. package/dist/controller/run-controller.js.map +1 -1
  44. package/dist/controller/streamlined-runner.d.ts +2 -0
  45. package/dist/controller/streamlined-runner.d.ts.map +1 -1
  46. package/dist/controller/streamlined-runner.js +31 -1
  47. package/dist/controller/streamlined-runner.js.map +1 -1
  48. package/dist/controller/task-agent-output.d.ts.map +1 -1
  49. package/dist/controller/task-agent-output.js +85 -0
  50. package/dist/controller/task-agent-output.js.map +1 -1
  51. package/dist/domain/clarification.d.ts +92 -0
  52. package/dist/domain/clarification.d.ts.map +1 -0
  53. package/dist/domain/clarification.js +80 -0
  54. package/dist/domain/clarification.js.map +1 -0
  55. package/dist/domain/context-snapshot.d.ts +140 -0
  56. package/dist/domain/context-snapshot.d.ts.map +1 -0
  57. package/dist/domain/context-snapshot.js +140 -0
  58. package/dist/domain/context-snapshot.js.map +1 -0
  59. package/dist/domain/index.d.ts +4 -0
  60. package/dist/domain/index.d.ts.map +1 -1
  61. package/dist/domain/index.js +2 -0
  62. package/dist/domain/index.js.map +1 -1
  63. package/dist/domain/report.d.ts +118 -0
  64. package/dist/domain/report.d.ts.map +1 -1
  65. package/dist/domain/run.d.ts +118 -0
  66. package/dist/domain/run.d.ts.map +1 -1
  67. package/dist/domain/run.js +2 -0
  68. package/dist/domain/run.js.map +1 -1
  69. package/dist/plugin/create-harness-plugin.d.ts.map +1 -1
  70. package/dist/plugin/create-harness-plugin.js +25 -13
  71. package/dist/plugin/create-harness-plugin.js.map +1 -1
  72. package/dist/plugin/harness-chat-hook.d.ts +9 -0
  73. package/dist/plugin/harness-chat-hook.d.ts.map +1 -1
  74. package/dist/plugin/harness-chat-hook.js +40 -35
  75. package/dist/plugin/harness-chat-hook.js.map +1 -1
  76. package/dist/plugin/harness-coordinator.d.ts +5 -0
  77. package/dist/plugin/harness-coordinator.d.ts.map +1 -1
  78. package/dist/plugin/harness-coordinator.js +95 -4
  79. package/dist/plugin/harness-coordinator.js.map +1 -1
  80. package/dist/plugin/harness-escalate-tool.d.ts +13 -0
  81. package/dist/plugin/harness-escalate-tool.d.ts.map +1 -0
  82. package/dist/plugin/harness-escalate-tool.js +37 -0
  83. package/dist/plugin/harness-escalate-tool.js.map +1 -0
  84. package/dist/plugin/harness-plugin-runtime.d.ts +2 -14
  85. package/dist/plugin/harness-plugin-runtime.d.ts.map +1 -1
  86. package/dist/plugin/harness-plugin-runtime.js +7 -1
  87. package/dist/plugin/harness-plugin-runtime.js.map +1 -1
  88. package/dist/session/contracts.d.ts +80 -8
  89. package/dist/session/contracts.d.ts.map +1 -1
  90. package/dist/session/fake-session-adapter.d.ts.map +1 -1
  91. package/dist/session/fake-session-adapter.js +14 -0
  92. package/dist/session/fake-session-adapter.js.map +1 -1
  93. package/dist/session/opencode-session-adapter.d.ts.map +1 -1
  94. package/dist/session/opencode-session-adapter.js +16 -0
  95. package/dist/session/opencode-session-adapter.js.map +1 -1
  96. package/dist/session/opencode-session-prompts.d.ts.map +1 -1
  97. package/dist/session/opencode-session-prompts.js +3 -0
  98. package/dist/session/opencode-session-prompts.js.map +1 -1
  99. package/dist/store/context-snapshot-store.d.ts +17 -0
  100. package/dist/store/context-snapshot-store.d.ts.map +1 -0
  101. package/dist/store/context-snapshot-store.js +96 -0
  102. package/dist/store/context-snapshot-store.js.map +1 -0
  103. package/dist/store/filesystem-run-store.d.ts +3 -0
  104. package/dist/store/filesystem-run-store.d.ts.map +1 -1
  105. package/dist/store/filesystem-run-store.js +13 -1
  106. package/dist/store/filesystem-run-store.js.map +1 -1
  107. package/dist/store/index.d.ts +2 -0
  108. package/dist/store/index.d.ts.map +1 -1
  109. package/dist/store/index.js +2 -0
  110. package/dist/store/index.js.map +1 -1
  111. package/dist/store/run-event.d.ts +118 -0
  112. package/dist/store/run-event.d.ts.map +1 -1
  113. package/dist/store/session-index.d.ts +51 -0
  114. package/dist/store/session-index.d.ts.map +1 -0
  115. package/dist/store/session-index.js +163 -0
  116. package/dist/store/session-index.js.map +1 -0
  117. package/package.json +1 -1
@@ -1,11 +1,16 @@
1
1
  import { buildSessionToolAllowlist, mergeSystemPrompts } from "../agent/index.js";
2
2
  import { readAgentOutput } from "./agent-output.js";
3
- import { appendSessionEvent, createPromptInput, createTimeout, listOrphanSessions, releaseActiveSession, requireOrphanSession, } from "./agent-session-utils.js";
3
+ import { appendSessionEvent, computePromptDigest, createPromptInput, createTimeout, listOrphanSessions, releaseActiveSession, requireOrphanSession, } from "./agent-session-utils.js";
4
4
  import { RunCancellationError, RunPausedError } from "./errors.js";
5
5
  import { roleSystemPrompt } from "./role-prompts.js";
6
+ /** Generate a unique, non-reusable lease ID for session lifecycle protection */
7
+ const createLeaseId = (ids, runId, sessionId) => ids.createEventId(`lease-${runId}-${sessionId}`);
6
8
  export const createAgentSessionRuntime = (input) => {
7
9
  const activeSessions = new Map();
8
10
  const interruptedRuns = new Map();
11
+ /** Track latest attempt per (runId, taskId) to reject late results */
12
+ const latestAttempts = new Map();
13
+ const attemptKey = (runId, taskId) => taskId !== undefined ? `${runId}:${taskId}` : runId;
9
14
  const throwIfCancelled = (runId) => {
10
15
  const interruption = interruptedRuns.get(runId);
11
16
  switch (interruption) {
@@ -21,13 +26,42 @@ export const createAgentSessionRuntime = (input) => {
21
26
  const sessions = activeSessions.get(runId) ?? new Map();
22
27
  sessions.set(session.sessionId, session);
23
28
  activeSessions.set(runId, sessions);
29
+ // Track latest attempt for late result rejection
30
+ const key = attemptKey(runId, session.taskId);
31
+ latestAttempts.set(key, {
32
+ leaseId: session.leaseId,
33
+ attempt: session.attempt,
34
+ sessionId: session.sessionId,
35
+ });
24
36
  };
37
+ /** Validate that the current lease and attempt match the expected values */
38
+ const validateLeaseAndAttempt = (runId, taskId, leaseId, attempt) => {
39
+ if (leaseId === undefined || attempt === undefined)
40
+ return true;
41
+ const key = attemptKey(runId, taskId);
42
+ const latest = latestAttempts.get(key);
43
+ if (latest === undefined)
44
+ return true;
45
+ return latest.leaseId === leaseId && latest.attempt === attempt;
46
+ };
47
+ const buildSessionEventMetadata = (request) => ({
48
+ contextId: request.contextId,
49
+ contextVersion: undefined,
50
+ contextDigest: undefined,
51
+ promptDigest: computePromptDigest(request.brief),
52
+ taskId: request.taskId,
53
+ attempt: request.attempt,
54
+ worktree: request.worktree,
55
+ phase: request.phase,
56
+ outputProtocolVersion: request.outputContract.schemaVersion,
57
+ });
25
58
  return {
26
59
  async sendAgent(request) {
27
60
  throwIfCancelled(request.runId);
28
61
  const workingDirectory = request.workingDirectory ??
29
62
  (await input.resolveWorkingDirectory?.(request.runId)) ??
30
63
  input.workingDirectory;
64
+ const leaseId = request.leaseId ?? createLeaseId(input.ids, request.runId, `session-${Date.now()}`);
31
65
  const session = await input.sessionAdapter.create({
32
66
  role: request.role,
33
67
  title: request.title,
@@ -37,7 +71,22 @@ export const createAgentSessionRuntime = (input) => {
37
71
  : { parentSessionId: request.parentSessionId }),
38
72
  promptInput: createPromptInput(request),
39
73
  ...(request.timeoutMs === undefined ? {} : { timeoutMs: request.timeoutMs }),
74
+ runId: request.runId,
75
+ ...(request.taskId === undefined ? {} : { taskId: request.taskId }),
76
+ ...(request.attempt === undefined ? {} : { attempt: request.attempt }),
77
+ ...(request.contextId === undefined ? {} : { contextId: request.contextId }),
78
+ leaseId,
79
+ ...(request.worktree === undefined ? {} : { worktree: request.worktree }),
80
+ ...(request.phase === undefined ? {} : { phase: request.phase }),
40
81
  });
82
+ const eventMeta = buildSessionEventMetadata(request);
83
+ const activeSession = {
84
+ sessionId: session.session.sessionId,
85
+ leaseId,
86
+ attempt: request.attempt ?? 0,
87
+ runId: request.runId,
88
+ taskId: request.taskId,
89
+ };
41
90
  const timeoutId = createTimeout({
42
91
  runId: request.runId,
43
92
  sessionId: session.session.sessionId,
@@ -45,17 +94,28 @@ export const createAgentSessionRuntime = (input) => {
45
94
  sessionAdapter: input.sessionAdapter,
46
95
  activeSessions,
47
96
  releaseReason: "timeout",
97
+ leaseId,
98
+ attempt: request.attempt ?? 0,
48
99
  });
49
- setActiveSession(request.runId, timeoutId === undefined
50
- ? { sessionId: session.session.sessionId }
51
- : { sessionId: session.session.sessionId, timeoutId });
100
+ if (timeoutId !== undefined) {
101
+ activeSession.timeoutId = timeoutId;
102
+ }
103
+ setActiveSession(request.runId, activeSession);
52
104
  await appendSessionEvent({
53
105
  runId: request.runId,
54
106
  type: "session.created",
55
107
  sessionId: session.session.sessionId,
56
- payload: { sessionId: session.session.sessionId, role: request.role },
108
+ payload: { sessionId: session.session.sessionId, role: request.role, leaseId },
57
109
  store: input.store,
58
110
  ids: input.ids,
111
+ contextId: eventMeta.contextId,
112
+ contextDigest: eventMeta.contextDigest,
113
+ promptDigest: eventMeta.promptDigest,
114
+ taskId: eventMeta.taskId,
115
+ attempt: eventMeta.attempt,
116
+ worktree: eventMeta.worktree,
117
+ phase: eventMeta.phase,
118
+ outputProtocolVersion: eventMeta.outputProtocolVersion,
59
119
  });
60
120
  try {
61
121
  const tools = buildSessionToolAllowlist(request.role);
@@ -70,8 +130,35 @@ export const createAgentSessionRuntime = (input) => {
70
130
  : { profileOverride: request.profileOverride }),
71
131
  systemPrompt: mergeSystemPrompts(roleSystemPrompt(request.role), request.systemPrompt),
72
132
  ...(tools === undefined ? {} : { tools }),
133
+ runId: request.runId,
134
+ ...(request.taskId === undefined ? {} : { taskId: request.taskId }),
135
+ ...(request.attempt === undefined ? {} : { attempt: request.attempt }),
136
+ ...(request.contextId === undefined ? {} : { contextId: request.contextId }),
137
+ leaseId,
138
+ ...(request.worktree === undefined ? {} : { worktree: request.worktree }),
139
+ ...(request.phase === undefined ? {} : { phase: request.phase }),
73
140
  });
74
141
  throwIfCancelled(request.runId);
142
+ // Validate lease/attempt to reject late results
143
+ if (!validateLeaseAndAttempt(request.runId, request.taskId, leaseId, request.attempt)) {
144
+ // Log late result as diagnostic event
145
+ await appendSessionEvent({
146
+ runId: request.runId,
147
+ type: "session.late_result",
148
+ sessionId: session.session.sessionId,
149
+ payload: {
150
+ sessionId: session.session.sessionId,
151
+ reason: "late_result_rejected",
152
+ leaseId,
153
+ currentAttempt: request.attempt ?? 0,
154
+ },
155
+ store: input.store,
156
+ ids: input.ids,
157
+ taskId: eventMeta.taskId,
158
+ attempt: eventMeta.attempt,
159
+ });
160
+ throw new RunCancellationError(request.runId);
161
+ }
75
162
  return readAgentOutput(result);
76
163
  }
77
164
  finally {
@@ -79,9 +166,17 @@ export const createAgentSessionRuntime = (input) => {
79
166
  runId: request.runId,
80
167
  type: "session.released",
81
168
  sessionId: session.session.sessionId,
82
- payload: { sessionId: session.session.sessionId, reason: "completed" },
169
+ payload: { sessionId: session.session.sessionId, reason: "completed", leaseId },
83
170
  store: input.store,
84
171
  ids: input.ids,
172
+ contextId: eventMeta.contextId,
173
+ contextDigest: eventMeta.contextDigest,
174
+ promptDigest: eventMeta.promptDigest,
175
+ taskId: eventMeta.taskId,
176
+ attempt: eventMeta.attempt,
177
+ worktree: eventMeta.worktree,
178
+ phase: eventMeta.phase,
179
+ outputProtocolVersion: eventMeta.outputProtocolVersion,
85
180
  });
86
181
  await releaseActiveSession({
87
182
  activeSessions,
@@ -138,14 +233,26 @@ export const createAgentSessionRuntime = (input) => {
138
233
  if (snapshot === undefined || snapshot.role !== orphanSession.role) {
139
234
  throw new TypeError(`session ${session.sessionId} is not available for rebind`);
140
235
  }
141
- setActiveSession(session.runId, { sessionId: session.sessionId });
236
+ const leaseId = snapshot.leaseId ?? createLeaseId(input.ids, session.runId, session.sessionId);
237
+ setActiveSession(session.runId, {
238
+ sessionId: session.sessionId,
239
+ leaseId,
240
+ attempt: snapshot.attempt ?? 0,
241
+ runId: session.runId,
242
+ taskId: snapshot.taskId,
243
+ });
142
244
  await appendSessionEvent({
143
245
  runId: session.runId,
144
246
  type: "session.rebound",
145
247
  sessionId: session.sessionId,
146
- payload: { sessionId: session.sessionId, actorId: session.actorId },
248
+ payload: { sessionId: session.sessionId, actorId: session.actorId, leaseId },
147
249
  store: input.store,
148
250
  ids: input.ids,
251
+ contextId: snapshot.contextId,
252
+ taskId: snapshot.taskId,
253
+ attempt: snapshot.attempt,
254
+ worktree: snapshot.worktree,
255
+ phase: snapshot.phase,
149
256
  });
150
257
  },
151
258
  async safeAbandonSession(session) {
@@ -186,14 +293,26 @@ export const createAgentSessionRuntime = (input) => {
186
293
  for (const orphanSession of orphanSessions) {
187
294
  const snapshot = input.sessionAdapter.getSession(orphanSession.sessionId);
188
295
  if (snapshot !== undefined && snapshot.role === orphanSession.role) {
189
- setActiveSession(request.runId, { sessionId: orphanSession.sessionId });
296
+ const leaseId = snapshot.leaseId ?? createLeaseId(input.ids, request.runId, orphanSession.sessionId);
297
+ setActiveSession(request.runId, {
298
+ sessionId: orphanSession.sessionId,
299
+ leaseId,
300
+ attempt: snapshot.attempt ?? 0,
301
+ runId: request.runId,
302
+ taskId: snapshot.taskId,
303
+ });
190
304
  await appendSessionEvent({
191
305
  runId: request.runId,
192
306
  type: "session.rebound",
193
307
  sessionId: orphanSession.sessionId,
194
- payload: { sessionId: orphanSession.sessionId, actorId: request.actorId },
308
+ payload: { sessionId: orphanSession.sessionId, actorId: request.actorId, leaseId },
195
309
  store: input.store,
196
310
  ids: input.ids,
311
+ contextId: snapshot.contextId,
312
+ taskId: snapshot.taskId,
313
+ attempt: snapshot.attempt,
314
+ worktree: snapshot.worktree,
315
+ phase: snapshot.phase,
197
316
  });
198
317
  reboundSessionIds.push(orphanSession.sessionId);
199
318
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAIjF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAQnD,OAAO,EAEL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,gFAAgF;AAChF,MAAM,aAAa,GAAG,CAAC,GAAuB,EAAE,KAAY,EAAE,SAAiB,EAAU,EAAE,CACzF,GAAG,CAAC,aAAa,CAAC,SAAS,KAAK,IAAI,SAAS,EAAE,CAAC,CAAA;AASlD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAMzC,EAAuB,EAAE;IACxB,MAAM,cAAc,GAAG,IAAI,GAAG,EAAqC,CAAA;IACnE,MAAM,eAAe,GAAG,IAAI,GAAG,EAAiC,CAAA;IAChE,sEAAsE;IACtE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyB,CAAA;IAEvD,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,MAAe,EAAU,EAAE,CAC3D,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;IAErD,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAQ,EAAE;QAC9C,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC/C,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,WAAW;gBACd,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;YACvC,KAAK,QAAQ;gBACX,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAAA;YACjC;gBACE,OAAM;QACV,CAAC;IACH,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAE,OAAsB,EAAQ,EAAE;QACtE,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,EAAyB,CAAA;QAC9E,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACxC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACnC,iDAAiD;QACjD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAC7C,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,4EAA4E;IAC5E,MAAM,uBAAuB,GAAG,CAC9B,KAAY,EACZ,MAA0B,EAC1B,OAA2B,EAC3B,OAA2B,EAClB,EAAE;QACX,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QAC/D,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QACrC,OAAO,MAAM,CAAC,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAA;IACjE,CAAC,CAAA;IAED,MAAM,yBAAyB,GAAG,CAAC,OAAuB,EAAE,EAAE,CAAC,CAAC;QAC9D,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,cAAc,EAAE,SAA+B;QAC/C,aAAa,EAAE,SAA+B;QAC9C,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC;QAChD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,qBAAqB,EAAE,OAAO,CAAC,cAAc,CAAC,aAAa;KAC5D,CAAC,CAAA;IAEF,OAAO;QACL,KAAK,CAAC,SAAS,CAAC,OAAuB;YACrC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAC/B,MAAM,gBAAgB,GACpB,OAAO,CAAC,gBAAgB;gBACxB,CAAC,MAAM,KAAK,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtD,KAAK,CAAC,gBAAgB,CAAA;YACxB,MAAM,OAAO,GACX,OAAO,CAAC,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;YACrF,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;gBAChD,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,gBAAgB;gBAChB,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS;oBACvC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC;gBACjD,WAAW,EAAE,iBAAiB,CAAC,OAAO,CAAC;gBACvC,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;gBAC5E,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnE,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;gBACtE,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;gBAC5E,OAAO;gBACP,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzE,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;aACjE,CAAC,CAAA;YACF,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAA;YACpD,MAAM,aAAa,GAAkB;gBACnC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;gBACpC,OAAO;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;gBAC7B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAA;YACD,MAAM,SAAS,GAAG,aAAa,CAAC;gBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;gBACpC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,cAAc;gBACd,aAAa,EAAE,SAAS;gBACxB,OAAO;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;aAC9B,CAAC,CAAA;YACF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,aAAa,CAAC,SAAS,GAAG,SAAS,CAAA;YACrC,CAAC;YACD,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;YAC9C,MAAM,kBAAkB,CAAC;gBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,iBAAiB;gBACvB,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;gBACpC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE;gBAC9E,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,aAAa,EAAE,SAAS,CAAC,aAAa;gBACtC,YAAY,EAAE,SAAS,CAAC,YAAY;gBACpC,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,qBAAqB,EAAE,SAAS,CAAC,qBAAqB;aACvD,CAAC,CAAA;YACF,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;oBAC7C,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;oBACpC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC;oBAC1D,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,MAAM,EAAE,OAAO,CAAC,KAAK;oBACrB,WAAW,EAAE,iBAAiB,CAAC,OAAO,CAAC;oBACvC,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS;wBACvC,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC;oBACjD,YAAY,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;oBACtF,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;oBACzC,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnE,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;oBACtE,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;oBAC5E,OAAO;oBACP,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACzE,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;iBACjE,CAAC,CAAA;gBACF,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAE/B,gDAAgD;gBAChD,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtF,sCAAsC;oBACtC,MAAM,kBAAkB,CAAC;wBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,IAAI,EAAE,qBAAqB;wBAC3B,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;wBACpC,OAAO,EAAE;4BACP,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;4BACpC,MAAM,EAAE,sBAAsB;4BAC9B,OAAO;4BACP,cAAc,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;yBACrC;wBACD,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;wBACd,MAAM,EAAE,SAAS,CAAC,MAAM;wBACxB,OAAO,EAAE,SAAS,CAAC,OAAO;qBAC3B,CAAC,CAAA;oBACF,MAAM,IAAI,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAC/C,CAAC;gBAED,OAAO,eAAe,CAAC,MAAM,CAAC,CAAA;YAChC,CAAC;oBAAS,CAAC;gBACT,MAAM,kBAAkB,CAAC;oBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,IAAI,EAAE,kBAAkB;oBACxB,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;oBACpC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE;oBAC/E,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,SAAS,EAAE,SAAS,CAAC,SAAS;oBAC9B,aAAa,EAAE,SAAS,CAAC,aAAa;oBACtC,YAAY,EAAE,SAAS,CAAC,YAAY;oBACpC,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,qBAAqB,EAAE,SAAS,CAAC,qBAAqB;iBACvD,CAAC,CAAA;gBACF,MAAM,oBAAoB,CAAC;oBACzB,cAAc;oBACd,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;oBACpC,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,KAAK,CAAC,cAAc;iBACrC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,KAAK,CAAC,kBAAkB,CAAC,KAAK;YAC5B,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,KAAK,MAAM,aAAa,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC9C,MAAM,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;wBAC/B,SAAS,EAAE,aAAa,CAAC,SAAS;wBAClC,MAAM,EAAE,YAAY;qBACrB,CAAC,CAAA;oBACF,MAAM,oBAAoB,CAAC;wBACzB,cAAc;wBACd,KAAK;wBACL,SAAS,EAAE,aAAa,CAAC,SAAS;wBAClC,MAAM,EAAE,YAAY;wBACpB,cAAc,EAAE,KAAK,CAAC,cAAc;qBACrC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,gBAAgB,CAAC,KAAK;YACpB,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QACnD,CAAC;QAED,WAAW,CAAC,KAAK;YACf,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,WAAW,CAAA;QACnD,CAAC;QAED,aAAa,CAAC,KAAK;YACjB,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;QACzC,CAAC;QAED,UAAU,CAAC,KAAK;YACd,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACtC,CAAC;QAED,iBAAiB,CAAC,KAAK;YACrB,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC/B,CAAC;QAED,KAAK,CAAC,kBAAkB;YACtB,OAAO,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;QACnD,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,OAA2B;YAC7C,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC;gBAC/C,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,kBAAkB,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;aACrE,CAAC,CAAA;YACF,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YACnE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;gBACnE,MAAM,IAAI,SAAS,CAAC,WAAW,OAAO,CAAC,SAAS,8BAA8B,CAAC,CAAA;YACjF,CAAC;YACD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;YAC9F,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE;gBAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO;gBACP,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC;gBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,QAAQ,CAAC,MAAM;aACxB,CAAC,CAAA;YACF,MAAM,kBAAkB,CAAC;gBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,iBAAiB;gBACvB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE;gBAC5E,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,CAAC,kBAAkB,CAAC,OAA4B;YACnD,MAAM,oBAAoB,CAAC;gBACzB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,kBAAkB,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;aACrE,CAAC,CAAA;YACF,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAClD,IAAI,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC9C,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;gBAClC,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;oBAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAC/D,CAAC;YACD,MAAM,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;gBACjC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,MAAM,EAAE,gBAAgB,OAAO,CAAC,MAAM,EAAE;aACzC,CAAC,CAAA;YACF,MAAM,kBAAkB,CAAC;gBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,wBAAwB;gBAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE;oBACP,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB;gBACD,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;aACf,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,CAAC,uBAAuB,CAAC,OAAO;YACnC,MAAM,cAAc,GAAG,CAAC,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAC9E,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAC7C,CAAA;YACD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;YAExD,MAAM,iBAAiB,GAAa,EAAE,CAAA;YACtC,MAAM,mBAAmB,GAAa,EAAE,CAAA;YACxC,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;gBACzE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;oBACnE,MAAM,OAAO,GACX,QAAQ,CAAC,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;oBACtF,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE;wBAC9B,SAAS,EAAE,aAAa,CAAC,SAAS;wBAClC,OAAO;wBACP,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC;wBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,MAAM,EAAE,QAAQ,CAAC,MAAM;qBACxB,CAAC,CAAA;oBACF,MAAM,kBAAkB,CAAC;wBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,IAAI,EAAE,iBAAiB;wBACvB,SAAS,EAAE,aAAa,CAAC,SAAS;wBAClC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE;wBAClF,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;wBACd,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;qBACtB,CAAC,CAAA;oBACF,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;oBAC/C,SAAQ;gBACV,CAAC;gBACD,MAAM,MAAM,GAAG,yCAAyC,CAAA;gBACxD,MAAM,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;oBACjC,SAAS,EAAE,aAAa,CAAC,SAAS;oBAClC,MAAM,EAAE,gBAAgB,MAAM,EAAE;iBACjC,CAAC,CAAA;gBACF,MAAM,kBAAkB,CAAC;oBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,IAAI,EAAE,wBAAwB;oBAC9B,SAAS,EAAE,aAAa,CAAC,SAAS;oBAClC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE;oBACjF,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;iBACf,CAAC,CAAA;gBACF,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;YACnD,CAAC;YAED,OAAO,mBAAmB,CAAC,MAAM,GAAG,CAAC;gBACnC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE;gBACxD,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAA;QACxD,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,71 @@
1
+ import type { ContextFact, ContextSnapshot, ContextSummary } from "../domain/context-snapshot.js";
2
+ import type { HarnessSessionRole } from "../session/contracts.js";
3
+ export type ContextBudget = {
4
+ /** Maximum number of facts to include */
5
+ readonly maxFacts: number;
6
+ /** Maximum number of evidence digests to include */
7
+ readonly maxEvidenceDigests: number;
8
+ /** Maximum number of unresolved issues to include */
9
+ readonly maxUnresolvedIssues: number;
10
+ /** Maximum character length for the goal text */
11
+ readonly maxGoalLength: number;
12
+ /** Maximum character length for the scope text */
13
+ readonly maxScopeLength: number;
14
+ };
15
+ /**
16
+ * Default per-role context budgets.
17
+ *
18
+ * FIXME: These values are reasonable defaults for the current Harness
19
+ * architecture but should be made configurable via project-level
20
+ * configuration (e.g. .harness/config.yaml) in a future iteration.
21
+ * The current thresholds are designed to keep session prompts under
22
+ * typical provider token limits while preserving the most critical
23
+ * context for each role.
24
+ */
25
+ export declare const DEFAULT_ROLE_BUDGETS: Record<HarnessSessionRole, ContextBudget>;
26
+ export type TrimmedContext = {
27
+ /** The trimmed context snapshot */
28
+ readonly snapshot: ContextSnapshot;
29
+ /** Summary of the context for lightweight reference */
30
+ readonly summary: ContextSummary;
31
+ /** Which facts were trimmed (by factId) */
32
+ readonly trimmedFactIds: readonly string[];
33
+ /** Which evidence digests were trimmed (by refId) */
34
+ readonly trimmedEvidenceRefIds: readonly string[];
35
+ /** Which unresolved issues were trimmed */
36
+ readonly trimmedUnresolvedIssues: readonly string[];
37
+ /** Fingerprint of the trimmed content */
38
+ readonly trimDigest: string;
39
+ /** Whether any trimming was applied */
40
+ readonly wasTrimmed: boolean;
41
+ };
42
+ /**
43
+ * Trim a context snapshot to fit within a role's budget.
44
+ *
45
+ * This function NEVER truncates text arbitrarily. Instead, it uses
46
+ * structured strategies in order:
47
+ * 1. Keep all high-priority facts (priority >= 80): goals, constraints,
48
+ * allowed paths, acceptance criteria, blocking issues.
49
+ * 2. For remaining lower-priority facts, keep the most recent/highest-priority
50
+ * ones up to the budget.
51
+ * 3. Trim evidence digests to the budget limit.
52
+ * 4. Trim unresolved issues to the budget limit.
53
+ * 5. Truncate goal/scope text to character limits.
54
+ *
55
+ * Excess content is recorded in trim metadata for auditability.
56
+ */
57
+ export declare const trimContextForRole: (snapshot: ContextSnapshot, role: HarnessSessionRole, budget?: ContextBudget) => TrimmedContext;
58
+ /**
59
+ * Context layers that can be selectively included per role.
60
+ */
61
+ export type ContextLayer = "fixed_role" | "run" | "task" | "evidence" | "governance";
62
+ /**
63
+ * Which layers each role receives by default.
64
+ */
65
+ export declare const DEFAULT_ROLE_LAYERS: Record<HarnessSessionRole, readonly ContextLayer[]>;
66
+ /**
67
+ * Filter facts by layer, keeping only those whose kind matches the
68
+ * requested layers.
69
+ */
70
+ export declare const filterFactsByLayer: (facts: readonly ContextFact[], layers: readonly ContextLayer[]) => readonly ContextFact[];
71
+ //# sourceMappingURL=context-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-budget.d.ts","sourceRoot":"","sources":["../../src/controller/context-budget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAEjG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAKjE,MAAM,MAAM,aAAa,GAAG;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,oDAAoD;IACpD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,qDAAqD;IACrD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACpC,iDAAiD;IACjD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,kDAAkD;IAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAChC,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,kBAAkB,EAAE,aAAa,CAkD1E,CAAA;AAID,MAAM,MAAM,cAAc,GAAG;IAC3B,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;IAClC,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,2CAA2C;IAC3C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1C,qDAAqD;IACrD,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAA;IACjD,2CAA2C;IAC3C,QAAQ,CAAC,uBAAuB,EAAE,SAAS,MAAM,EAAE,CAAA;IACnD,yCAAyC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,uCAAuC;IACvC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;CAC7B,CAAA;AAaD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,GAC7B,UAAU,eAAe,EACzB,MAAM,kBAAkB,EACxB,SAAS,aAAa,KACrB,cA6EF,CAAA;AA2CD;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,KAAK,GACL,MAAM,GACN,UAAU,GACV,YAAY,CAAA;AAEhB;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,kBAAkB,EAAE,SAAS,YAAY,EAAE,CAQnF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,SAAS,WAAW,EAAE,EAC7B,QAAQ,SAAS,YAAY,EAAE,KAC9B,SAAS,WAAW,EAmBtB,CAAA"}
@@ -0,0 +1,219 @@
1
+ import { createHash } from "node:crypto";
2
+ import { toContextSummary } from "../domain/context-snapshot.js";
3
+ import { HARNESS_SESSION_ROLE } from "../session/contracts.js";
4
+ /**
5
+ * Default per-role context budgets.
6
+ *
7
+ * FIXME: These values are reasonable defaults for the current Harness
8
+ * architecture but should be made configurable via project-level
9
+ * configuration (e.g. .harness/config.yaml) in a future iteration.
10
+ * The current thresholds are designed to keep session prompts under
11
+ * typical provider token limits while preserving the most critical
12
+ * context for each role.
13
+ */
14
+ export const DEFAULT_ROLE_BUDGETS = {
15
+ [HARNESS_SESSION_ROLE.intake]: {
16
+ maxFacts: 30,
17
+ maxEvidenceDigests: 0,
18
+ maxUnresolvedIssues: 5,
19
+ maxGoalLength: 1000,
20
+ maxScopeLength: 2000,
21
+ },
22
+ [HARNESS_SESSION_ROLE.planner]: {
23
+ maxFacts: 50,
24
+ maxEvidenceDigests: 10,
25
+ maxUnresolvedIssues: 10,
26
+ maxGoalLength: 2000,
27
+ maxScopeLength: 4000,
28
+ },
29
+ [HARNESS_SESSION_ROLE.worker]: {
30
+ maxFacts: 40,
31
+ maxEvidenceDigests: 15,
32
+ maxUnresolvedIssues: 5,
33
+ maxGoalLength: 1500,
34
+ maxScopeLength: 3000,
35
+ },
36
+ [HARNESS_SESSION_ROLE.verifier]: {
37
+ maxFacts: 30,
38
+ maxEvidenceDigests: 20,
39
+ maxUnresolvedIssues: 5,
40
+ maxGoalLength: 1000,
41
+ maxScopeLength: 2000,
42
+ },
43
+ [HARNESS_SESSION_ROLE.acceptance]: {
44
+ maxFacts: 30,
45
+ maxEvidenceDigests: 20,
46
+ maxUnresolvedIssues: 5,
47
+ maxGoalLength: 1000,
48
+ maxScopeLength: 2000,
49
+ },
50
+ [HARNESS_SESSION_ROLE.failureAnalyzer]: {
51
+ maxFacts: 40,
52
+ maxEvidenceDigests: 15,
53
+ maxUnresolvedIssues: 10,
54
+ maxGoalLength: 1500,
55
+ maxScopeLength: 3000,
56
+ },
57
+ [HARNESS_SESSION_ROLE.repairWorker]: {
58
+ maxFacts: 40,
59
+ maxEvidenceDigests: 15,
60
+ maxUnresolvedIssues: 5,
61
+ maxGoalLength: 1500,
62
+ maxScopeLength: 3000,
63
+ },
64
+ };
65
+ // ─── Priority constants ────────────────────────────────────────────────────
66
+ /**
67
+ * Facts with priority >= HIGH_PRIORITY_THRESHOLD are considered
68
+ * "must-preserve" — they include goals, constraints, allowed paths,
69
+ * acceptance criteria, and blocking issues.
70
+ */
71
+ const HIGH_PRIORITY_THRESHOLD = 80;
72
+ // ─── Trimming function ─────────────────────────────────────────────────────
73
+ /**
74
+ * Trim a context snapshot to fit within a role's budget.
75
+ *
76
+ * This function NEVER truncates text arbitrarily. Instead, it uses
77
+ * structured strategies in order:
78
+ * 1. Keep all high-priority facts (priority >= 80): goals, constraints,
79
+ * allowed paths, acceptance criteria, blocking issues.
80
+ * 2. For remaining lower-priority facts, keep the most recent/highest-priority
81
+ * ones up to the budget.
82
+ * 3. Trim evidence digests to the budget limit.
83
+ * 4. Trim unresolved issues to the budget limit.
84
+ * 5. Truncate goal/scope text to character limits.
85
+ *
86
+ * Excess content is recorded in trim metadata for auditability.
87
+ */
88
+ export const trimContextForRole = (snapshot, role, budget) => {
89
+ const effectiveBudget = budget ?? DEFAULT_ROLE_BUDGETS[role];
90
+ const trimmedFactIds = [];
91
+ const trimmedEvidenceRefIds = [];
92
+ const trimmedUnresolvedIssues = [];
93
+ let wasTrimmed = false;
94
+ // ── 1. Priority-based fact trimming ──
95
+ const sortedFacts = [...snapshot.facts].sort((a, b) => b.priority - a.priority);
96
+ const highPriority = sortedFacts.filter((f) => f.priority >= HIGH_PRIORITY_THRESHOLD);
97
+ const lowPriority = sortedFacts.filter((f) => f.priority < HIGH_PRIORITY_THRESHOLD);
98
+ // Always keep high-priority facts
99
+ const remainingBudget = effectiveBudget.maxFacts - highPriority.length;
100
+ const keptLowPriority = lowPriority.slice(0, Math.max(0, remainingBudget));
101
+ const trimmedLowPriority = lowPriority.slice(Math.max(0, remainingBudget));
102
+ for (const fact of trimmedLowPriority) {
103
+ trimmedFactIds.push(fact.factId);
104
+ }
105
+ const keptFacts = [...highPriority, ...keptLowPriority];
106
+ // ── 2. Evidence digest trimming ──
107
+ const keptEvidenceDigests = snapshot.evidenceDigests.slice(0, effectiveBudget.maxEvidenceDigests);
108
+ const trimmedEvidence = snapshot.evidenceDigests.slice(effectiveBudget.maxEvidenceDigests);
109
+ for (const ev of trimmedEvidence) {
110
+ trimmedEvidenceRefIds.push(ev.refId);
111
+ }
112
+ // ── 3. Unresolved issues trimming ──
113
+ const keptIssues = snapshot.unresolvedIssues.slice(0, effectiveBudget.maxUnresolvedIssues);
114
+ const trimmedIssues = snapshot.unresolvedIssues.slice(effectiveBudget.maxUnresolvedIssues);
115
+ trimmedUnresolvedIssues.push(...trimmedIssues);
116
+ // ── 4. Text truncation for goal/scope ──
117
+ // Ensure we don't cut mid-word or mid-JSON — truncate at word boundary
118
+ const truncatedGoal = truncateAtWordBoundary(snapshot.goal, effectiveBudget.maxGoalLength);
119
+ const truncatedScope = truncateAtWordBoundary(snapshot.scope, effectiveBudget.maxScopeLength);
120
+ wasTrimmed =
121
+ trimmedFactIds.length > 0 ||
122
+ trimmedEvidenceRefIds.length > 0 ||
123
+ trimmedUnresolvedIssues.length > 0 ||
124
+ truncatedGoal !== snapshot.goal ||
125
+ truncatedScope !== snapshot.scope;
126
+ // ── Build trimmed snapshot ──
127
+ const trimDigest = computeTrimDigest({
128
+ trimmedFactIds,
129
+ trimmedEvidenceRefIds,
130
+ trimmedUnresolvedIssues,
131
+ budget: effectiveBudget,
132
+ role,
133
+ });
134
+ const trimmedSnapshot = {
135
+ ...snapshot,
136
+ goal: truncatedGoal,
137
+ scope: truncatedScope,
138
+ // Keep facts sorted by priority for the agent
139
+ facts: keptFacts.sort((a, b) => b.priority - a.priority),
140
+ evidenceDigests: keptEvidenceDigests,
141
+ unresolvedIssues: keptIssues,
142
+ };
143
+ const summary = toContextSummary(trimmedSnapshot);
144
+ return {
145
+ snapshot: trimmedSnapshot,
146
+ summary,
147
+ trimmedFactIds,
148
+ trimmedEvidenceRefIds,
149
+ trimmedUnresolvedIssues,
150
+ trimDigest,
151
+ wasTrimmed,
152
+ };
153
+ };
154
+ // ─── Helpers ───────────────────────────────────────────────────────────────
155
+ /**
156
+ * Truncate text at a word boundary, ensuring we never cut mid-word
157
+ * or mid-JSON structure. Appends "…" if truncated.
158
+ */
159
+ const truncateAtWordBoundary = (text, maxLength) => {
160
+ if (text.length <= maxLength)
161
+ return text;
162
+ // Try to find the last space within the limit
163
+ let cutIndex = maxLength;
164
+ const lastSpace = text.lastIndexOf(" ", maxLength);
165
+ if (lastSpace > maxLength / 2) {
166
+ cutIndex = lastSpace;
167
+ }
168
+ return `${text.slice(0, cutIndex).trimEnd()}…`;
169
+ };
170
+ /**
171
+ * Compute a deterministic digest of the trimming metadata.
172
+ */
173
+ const computeTrimDigest = (input) => {
174
+ const canonical = JSON.stringify({
175
+ trimmedFactIds: input.trimmedFactIds,
176
+ trimmedEvidenceRefIds: input.trimmedEvidenceRefIds,
177
+ trimmedUnresolvedIssues: input.trimmedUnresolvedIssues,
178
+ budget: input.budget,
179
+ role: input.role,
180
+ });
181
+ return `sha256:${createHash("sha256").update(canonical, "utf8").digest("hex")}`;
182
+ };
183
+ /**
184
+ * Which layers each role receives by default.
185
+ */
186
+ export const DEFAULT_ROLE_LAYERS = {
187
+ [HARNESS_SESSION_ROLE.intake]: ["fixed_role", "run"],
188
+ [HARNESS_SESSION_ROLE.planner]: ["fixed_role", "run", "governance"],
189
+ [HARNESS_SESSION_ROLE.worker]: ["fixed_role", "run", "task", "evidence"],
190
+ [HARNESS_SESSION_ROLE.verifier]: ["fixed_role", "run", "task", "evidence"],
191
+ [HARNESS_SESSION_ROLE.acceptance]: ["fixed_role", "run", "evidence"],
192
+ [HARNESS_SESSION_ROLE.failureAnalyzer]: ["fixed_role", "run", "task", "evidence"],
193
+ [HARNESS_SESSION_ROLE.repairWorker]: ["fixed_role", "run", "task", "evidence"],
194
+ };
195
+ /**
196
+ * Filter facts by layer, keeping only those whose kind matches the
197
+ * requested layers.
198
+ */
199
+ export const filterFactsByLayer = (facts, layers) => {
200
+ const layerSet = new Set(layers);
201
+ return facts.filter((fact) => {
202
+ switch (fact.kind) {
203
+ case "requirement":
204
+ case "constraint":
205
+ return layerSet.has("run") || layerSet.has("task");
206
+ case "evidence":
207
+ return layerSet.has("evidence");
208
+ case "governance":
209
+ return layerSet.has("governance");
210
+ case "unresolved_issue":
211
+ return layerSet.has("run") || layerSet.has("governance");
212
+ case "workspace":
213
+ return layerSet.has("task");
214
+ default:
215
+ return true;
216
+ }
217
+ });
218
+ };
219
+ //# sourceMappingURL=context-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-budget.js","sourceRoot":"","sources":["../../src/controller/context-budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ControllerIdSource } from "../controller/contracts.js";
2
+ import { type ContextSnapshot } from "../domain/context-snapshot.js";
3
+ import type { Evidence } from "../domain/evidence.js";
4
+ import type { Run, Task } from "../domain/index.js";
5
+ export { computeContextDigest, toContextSummary } from "../domain/context-snapshot.js";
6
+ export type BuildContextSnapshotInput = {
7
+ readonly ids: ControllerIdSource;
8
+ readonly run: Run;
9
+ /** Optional task – when building a task-level snapshot */
10
+ readonly task?: Task;
11
+ /** The execution phase (e.g. "planning", "executing", "verifying") */
12
+ readonly phase: string;
13
+ /** Prior context to derive from, if any */
14
+ readonly parentContextId?: string;
15
+ readonly parentVersion?: number;
16
+ /** Current attempt number (0-based) */
17
+ readonly attempt?: number;
18
+ /** Evidence array from the run, for digest production */
19
+ readonly evidence?: readonly Evidence[];
20
+ /** Unresolved issues / blocking questions */
21
+ readonly unresolvedIssues?: readonly string[];
22
+ };
23
+ /**
24
+ * Build a versioned ContextSnapshot from Run, Task, Evidence, and governance state.
25
+ */
26
+ export declare const buildContextSnapshot: (input: BuildContextSnapshotInput) => ContextSnapshot;
27
+ //# sourceMappingURL=context-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../src/controller/context-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,EAGL,KAAK,eAAe,EAGrB,MAAM,+BAA+B,CAAA;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,EAAE,GAAG,EAAiB,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAGlE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAItF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAA;IAChC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAA;IACpB,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAA;IACvC,6CAA6C;IAC7C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC9C,CAAA;AAID;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,yBAAyB,KAAG,eA2DvE,CAAA"}