@lucascouts/claude-agent-acp-plus 0.13.0 → 0.15.0

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.
@@ -31,6 +31,11 @@ export type AccountQuotaWindow = {
31
31
  /** Emitted only once a live event has measured it. */
32
32
  isUsingOverage?: boolean;
33
33
  };
34
+ /** Where one emitted window comes from: the wire kind, and the report entry behind it. */
35
+ /** The slice of a usage report that describes plan windows, and nothing else.
36
+ * Structurally satisfied by `SDKControlGetUsageResponse` and by a cached
37
+ * sample, which is the point: the two callers hand over the same two fields. */
38
+ export type QuotaLimitsReport = Pick<SDKControlGetUsageResponse, "rate_limits_available" | "rate_limits">;
34
39
  /** 0..100 -> 0..1, CLAMPED to [0,1]. undefined for null/undefined/non-finite. */
35
40
  export declare function normalizeUtilization(value: number | null | undefined): number | undefined;
36
41
  /** ISO 8601 -> Unix seconds (floored). undefined for null/undefined/unparseable. */
@@ -85,7 +90,13 @@ export declare class AccountUsageTracker {
85
90
  /**
86
91
  * Every window the report carries, in wire shape. Empty list when
87
92
  * `rate_limits_available` is false or `rate_limits` is null.
93
+ *
94
+ * The parameter is narrowed to the two fields actually read, not the whole
95
+ * `SDKControlGetUsageResponse`. That is what lets a sample shared between
96
+ * processes (quota-cache.ts) be handed here without carrying the rest of the
97
+ * report with it -- the rest is session-scoped (this session's cost, this
98
+ * session's token totals) and belongs to nobody else.
88
99
  */
89
- windowsFrom(report: SDKControlGetUsageResponse): AccountQuotaWindow[];
100
+ windowsFrom(report: QuotaLimitsReport): AccountQuotaWindow[];
90
101
  }
91
102
  //# sourceMappingURL=account-usage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"account-usage.d.ts","sourceRoot":"","sources":["../src/account-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEnG,sFAAsF;AACtF,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,yEAAyE;AACzE,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,iBAAiB,GAAG,UAAU,CAAC;AAE5E;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAwDF,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAkBzF;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAWnF;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,iBAAiB,CAI3F;AAkHD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC3C,SAAS,EAAE,MAAM,GAChB,MAAM,CAWR;AA8BD;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAE9D;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAA4B;IAEjD,uEAAuE;IACvE,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA8B5C;;;;;;;OAOG;IACH,OAAO,CAAC,SAAS;IAwBjB;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,0BAA0B,GAAG,kBAAkB,EAAE;CAyCtE"}
1
+ {"version":3,"file":"account-usage.d.ts","sourceRoot":"","sources":["../src/account-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEnG,sFAAsF;AACtF,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,yEAAyE;AACzE,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,iBAAiB,GAAG,UAAU,CAAC;AAE5E;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAqCF,0FAA0F;AAC1F;;iFAEiF;AACjF,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,0BAA0B,EAC1B,uBAAuB,GAAG,aAAa,CACxC,CAAC;AAoBF,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAkBzF;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAWnF;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,iBAAiB,CAI3F;AAkHD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC3C,SAAS,EAAE,MAAM,GAChB,MAAM,CAWR;AA8BD;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAE9D;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAA4B;IAEjD,uEAAuE;IACvE,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA8B5C;;;;;;;OAOG;IACH,OAAO,CAAC,SAAS;IAwBjB;;;;;;;;;OASG;IACH,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,EAAE;CAyC7D"}
@@ -290,6 +290,12 @@ export class AccountUsageTracker {
290
290
  /**
291
291
  * Every window the report carries, in wire shape. Empty list when
292
292
  * `rate_limits_available` is false or `rate_limits` is null.
293
+ *
294
+ * The parameter is narrowed to the two fields actually read, not the whole
295
+ * `SDKControlGetUsageResponse`. That is what lets a sample shared between
296
+ * processes (quota-cache.ts) be handed here without carrying the rest of the
297
+ * report with it -- the rest is session-scoped (this session's cost, this
298
+ * session's token totals) and belongs to nobody else.
293
299
  */
294
300
  windowsFrom(report) {
295
301
  // R1.5: the flag governs, not the presence of data. A report can carry a
@@ -206,6 +206,11 @@ type Turn = {
206
206
  /** Settles after the ACP prompt request completes, regardless of outcome. */
207
207
  completion?: Promise<void>;
208
208
  };
209
+ /** Resolve the poll interval from the environment, clamped. An unparseable or
210
+ * negative value falls back to the default rather than disabling the refresh:
211
+ * a typo should not silently return the bars to the stale behaviour this
212
+ * exists to fix. Exactly `0` disables, because that is the only way to ask. */
213
+ export declare function quotaPollIntervalMs(raw?: string | undefined): number;
209
214
  export type Session = {
210
215
  query: Query;
211
216
  input: Pushable<SDKUserMessage>;
@@ -408,6 +413,14 @@ export type Session = {
408
413
  * active turn settles normally so the backstop never fires after a clean
409
414
  * cancel. */
410
415
  forceCancelTimer?: ReturnType<typeof setTimeout>;
416
+ /** Repeating timer that refreshes the account quota windows while this session
417
+ * is idle. Armed at the end of the first turn rather than at session
418
+ * establishment: before then a control request is not serviced at all
419
+ * (issues #886/#880), so an earlier timer would only log failures. Cleared in
420
+ * `closeQueryStream` — the one point every teardown path passes through --
421
+ * so it cannot outlive the stream it queries. Undefined while polling is
422
+ * disabled or before the first turn settles. */
423
+ accountUsageTimer?: ReturnType<typeof setInterval>;
411
424
  emitRawSDKMessages: boolean | SDKMessageFilter[];
412
425
  /** Whether nested subagent text/thinking is forwarded to the ACP client.
413
426
  * Enabled by either the ACP capability or the pre-existing SDK option. */
@@ -886,7 +899,27 @@ export declare class ClaudeAcpAgent {
886
899
  * only that the request failed and why) and the previously reported windows
887
900
  * are left standing, because nothing was sent.
888
901
  */
902
+ /** Fetch the account's quota windows and publish them to this session.
903
+ *
904
+ * `allowCache` is the difference between the two callers. A turn ending and a
905
+ * session being established are moments when THIS session's own consumption
906
+ * just changed, so they always fetch. The idle poll has no such reason: it is
907
+ * asking about an account, and every other adapter process on the desktop is
908
+ * asking the same question about the same account. It reads the shared sample
909
+ * instead -- see quota-cache.ts for why sharing, not tighter intervals, is
910
+ * what makes separate windows agree. */
889
911
  private publishAccountUsage;
912
+ /** Start the idle refresh of the account quota windows for this session.
913
+ *
914
+ * Idempotent, and deliberately called at the end of every turn rather than
915
+ * once: the first call arms, the rest return immediately, so no caller has to
916
+ * know whether this is turn one.
917
+ *
918
+ * The tick does nothing while a turn is in flight. That turn's own end
919
+ * already refreshes the windows, and a second control request would buy the
920
+ * same answer twice — the same reasoning that excludes autonomous cycles at
921
+ * the end-of-turn call site. */
922
+ private armAccountUsagePolling;
890
923
  private publishGoalFromPrompt;
891
924
  private publishRuntimeGoal;
892
925
  /** Steer the session per the ACP steering wire protocol: inject a follow-up
@@ -1 +1 @@
1
- {"version":3,"file":"acp-agent.d.ts","sourceRoot":"","sources":["../src/acp-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acp-agent.d.ts","sourceRoot":"","sources":["../src/acp-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,mBAAmB,EAGnB,kBAAkB,EAClB,kBAAkB,EAClB,+BAA+B,EAC/B,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EAGb,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EAEd,mBAAmB,EACnB,oBAAoB,EAEpB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,6BAA6B,EAC7B,8BAA8B,EAC9B,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,SAAS,EACT,UAAU,EAEV,sBAAsB,EACtB,aAAa,EAIb,SAAS,EAIT,OAAO,EACP,cAAc,EAEd,KAAK,EAKL,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,QAAQ,EAET,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAKL,WAAW,EACX,mBAAmB,EACnB,YAAY,EAIb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAiB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAwBlG,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAWzE,OAAO,EAOL,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EAUL,KAAK,mBAAmB,EAGzB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAQL,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAK9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAYL,SAAS,EAKV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAwC,QAAQ,EAAe,MAAM,YAAY,CAAC;AAUzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAIL,KAAK,kBAAkB,EAEvB,KAAK,eAAe,EAGrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAsB,MAAM,mBAAmB,CAAC;AAEvE,eAAO,MAAM,iBAAiB,QACuC,CAAC;AAMtE;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC9B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CACjC;AAED,KAAK,gBAAgB,GAAG;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAmEF;mDACmD;AACnD,KAAK,SAAS,GAAG;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,gBAAgB,CAAC;KACjC,CAAC;CACH,CAAC;AAEF;;;+EAG+E;AAC/E,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF;;4EAE4E;AAC5E,MAAM,MAAM,aAAa,GACrB;IAAE,OAAO,EAAE,UAAU,CAAA;CAAE,GACvB;IAAE,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC7B;IAAE,OAAO,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAgC3D;;;yDAGyD;AACzD,KAAK,iBAAiB,GAAG;IACvB,eAAe,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChF,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;iFAIiF;AACjF,KAAK,IAAI,GAAG;IACV;qEACiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB;;4DAEwD;IACxD,kBAAkB,EAAE,OAAO,CAAC;IAC5B;;;gDAG4C;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;4BAGwB;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvC;;gDAE4C;IAC5C,kBAAkB,CAAC,EAAE,eAAe,CAAC;IACrC;gEAC4D;IAC5D,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;uEACmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;8CAE0C;IAC1C,eAAe,CAAC,EAAE,wBAAwB,CAAC;IAC3C;2EACuE;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB;;;+EAG2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;qDAOiD;IACjD,eAAe,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;IACtE;;;;;;;;iCAQ6B;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;;;6EAQyE;IACzE,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAmCgC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;;;;;;;;;;;;gEAe4D;IAC5D,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B;8EAC0E;IAC1E,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,OAAO,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAiBF;;;gFAGgF;AAChF,wBAAgB,mBAAmB,CACjC,GAAG,GAAE,MAAM,GAAG,SAAgD,GAC7D,MAAM,CAYR;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB;4EACwE;IACxE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;IACnB;2EACuE;IACvE,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB;;6DAEyD;IACzD,0BAA0B,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC;;yEAEqE;IACrE,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD;;;;+EAI2E;IAC3E,iBAAiB,CAAC,EAAE;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;QAC9B,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;QAC1C,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF;mEAC+D;IAC/D,iBAAiB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC;;;;;;;;;;;;;+EAa2E;IAC3E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;;;;;gDAuB4C;IAC5C,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;IAC/D;;uEAEmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;0EAGsE;IACtE,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC;;iCAE6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB;;;;4CAIwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ;+EAC2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,2EAA2E;IAC3E,MAAM,EAAE,aAAa,CAAC;IACtB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,8EAA8E;IAC9E,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,gFAAgF;IAChF,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC;;;qDAGiD;IACjD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB;gEAC4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB;;wEAEoE;IACpE,eAAe,EAAE,OAAO,CAAC;IACzB;;;;8EAI0E;IAC1E,SAAS,EAAE,OAAO,CAAC;IACnB;;;;gDAI4C;IAC5C,iBAAiB,EAAE,OAAO,CAAC;IAC3B;;;;;gEAK4D;IAC5D,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC;;wEAEoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;0CAMsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC;;;;;gFAK4E;IAC5E,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD;;;;;qCAKiC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;2EAEuE;IACvE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;oBAOgB;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;8CAE0C;IAC1C,qBAAqB,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC;;;;;mEAK+D;IAC/D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC;;;;;uEAKmE;IACnE,gBAAgB,CAAC,EAAE,eAAe,CAAC;IACnC;;kBAEc;IACd,gBAAgB,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IACjD;;;;;;qDAMiD;IACjD,iBAAiB,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACnD,kBAAkB,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACjD;+EAC2E;IAC3E,mBAAmB,EAAE,OAAO,CAAC;IAC7B;;;;yBAIqB;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;;;;2CASuC;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;;;;;;;8CAiB0C;IAC1C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;;;;;iEAY6D;IAC7D,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC;;;;;8CAK0C;IAC1C,0BAA0B,EAAE,OAAO,CAAC;IACpC;;;;;;;;+EAQ2E;IAC3E,gBAAgB,EAAE,MAAM,CAAC;IACzB;yEACqE;IACrE,SAAS,EAAE,SAAS,CAAC;IACrB;;;;4CAIwC;IACxC,YAAY,EAAE,YAAY,CAAC;IAC3B;;;;;;wEAMoE;IACpE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B;8EAC0E;IAC1E,+BAA+B,CAAC,EAAE;QAChC,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,2BAA2B,CAAC,EAAE;QAC5B,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,cAAc,CAAC;KACtB,CAAC;IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAsC6B;IAC7B,mBAAmB,EAAE,GAAG,CACtB,MAAM,EACN;QACE,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,OAAO,CAAC;QACpB;;;;;;;;;;;;iDAYyC;QACzC,aAAa,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;KACzC,CACF,CAAC;IACF;;;;;;;;;;;;;;;;;;;;;;;;sEAwBkE;IAClE,oBAAoB,EAAE,OAAO,CAAC;IAC9B;;;;;uCAKmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAC;IAC1D;;;;;;;;;;;;;;;iCAe6B;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;;;;;;uBAgBmB;IACnB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC;;2EAEuE;IACvE,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C,CAAC;AAoEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE;QACX;;;;;;;;;;;;;;WAcG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;;;;;WAMG;QACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAAC;KACnD,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB;;;;;OAKG;IACH,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,CAAC;CACH,CAAC;AAEF,KAAK,kBAAkB,GAAG,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC;AAoB5E;;;;;GAKG;AACH,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,+CAA+C;IAC/C,MAAM,CAAC,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAI3B,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAC9C,UAAU,CAAC,EAAE;QAEX,QAAQ,EAAE,MAAM,CAAC;QAEjB,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,YAAY,CAAC,EAAE,OAAO,CAAC;QAIvB,eAAe,CAAC,EAAE,MAAM,CAAC;QAMzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAG1B,YAAY,CAAC,EAAE,MAAM,CAAC;QAKtB,QAAQ,CAAC,EAAE,IAAI,CAAC;QAGhB,KAAK,CAAC,EAAE,MAAM,CAAC;QAGf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,aAAa,CAAC,EAAE;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,eAAe,CAAC,EAAE;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,aAAa,CAAC,EAAE;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;CACH,CAAC;AAwBF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,IAAI,EAAE,UAAU,GAAG,iBAAiB,GAAG,cAAc,CAAC;QACtD,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;wEACoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB;2EACuE;IACvE,iBAAiB,EAAE,MAAM,CAAC;IAC1B;0EACsE;IACtE,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;AA0DjF,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAsCrD;AAkED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CA0B1E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEhE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAepE;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D;;kFAE8E;IAC9E,iBAAiB,CACf,MAAM,EAAE,wBAAwB,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACtC,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzE,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC5E;iFAC6E;IAC7E,0BAA0B,CACxB,MAAM,EAAE,wBAAwB,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACtC,4BAA4B,CAAC,MAAM,EAAE,+BAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,yEAAyE;IACzE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjF;AA0ED,qBAAa,cAAc;IACzB,QAAQ,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,MAAM,EAAE,SAAS,CAAC;IAClB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8B;IAC3D,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,yEAAyE;IACzE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,qFAAqF;IACrF,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D;;+BAE2B;IAC3B,kBAAkB,EAAE,MAAM,CAAiC;IAC3D;;;;;;8EAM0E;IAC1E,OAAO,CAAC,eAAe,CAAC,CAAS;gBAErB,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM;IA+CxC,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyKnE,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAalE,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAqB9E,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAW3E,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAcrE,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkBxE,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzD,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAc3F;;;;;OAKG;IACG,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAoDpF;;;OAGG;IACG,wBAAwB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAShG,qBAAqB,IAAI,cAAc,GAAG,IAAI;IAI9C,OAAO,CAAC,qBAAqB;IA0BvB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC7C,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IA6LtD,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAc/C,WAAW;YAcX,eAAe;IAU7B;yEACqE;IACrE,OAAO,CAAC,mBAAmB;IAI3B;;;;;;;;;;;;;;;;;OAiBG;IACH;;;;;;;;6CAQyC;YAC3B,mBAAmB;IAoEjC;;;;;;;;;qCASiC;IACjC,OAAO,CAAC,sBAAsB;YAmChB,qBAAqB;YAoBrB,kBAAkB;IAgBhC;;;;;;;;;;;;;;;;;;;;;;;;;;;mEA2B+D;IACzD,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAkEzD;;;iFAG6E;IAC7E,OAAO,CAAC,qBAAqB;IAS7B;qFACiF;IACjF,OAAO,CAAC,cAAc;IActB;;;;qEAIiE;YACnD,WAAW;IAssFzB;;;;;;;;;;;;;;yDAcqD;IACrD,OAAO,CAAC,kBAAkB;IAapB,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsPvD;;;;;;;;;;;;;;;;;;gBAkBY;IACZ,OAAO,CAAC,gBAAgB;IAoBxB;yDACqD;YACvC,eAAe;IAwB7B,4EAA4E;IACtE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAQxE,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAU3E,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgB9E,sBAAsB,CAC1B,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,8BAA8B,CAAC;YA+H5B,oBAAoB;IA4K5B,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAKxE,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAKjF;;;;;;+DAM2D;YAC7C,oBAAoB;IAelC;;;;;0EAKsE;YACxD,2BAA2B;IAsCzC;;;;;;;;;;;iEAW6D;YAC/C,qBAAqB;IA4CnC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU;IA0LzC;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAgC5B;;;;OAIG;YACW,qBAAqB;IAqCnC;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;YAqCV,2BAA2B;YAa3B,kBAAkB;YAmBlB,sBAAsB;IA+JpC;;;;;oEAKgE;YAClD,6BAA6B;IA+B3C;;;oBAGgB;IAChB,OAAO,CAAC,qBAAqB;IAW7B;;;iEAG6D;YAC/C,aAAa;IAQ3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sEAqCkE;YACpD,oBAAoB;IAmQlC;;;;;;;;;;;;;;;;;;;;;;yEAsBqE;YACvD,iBAAiB;YAkDjB,kBAAkB;IA2ChC;;;;;OAKG;YACW,WAAW;YAuBX,aAAa;IA0rB3B;;;;OAIG;YACW,qBAAqB;CAkCpC;AAuLD,eAAO,MAAM,mBAAmB,aAM9B,CAAC;AAOH;;;gBAGgB;AAChB,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAOzE;AAED;;;8CAG8C;AAC9C,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAE1C;+DAC+D;AAC/D,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,aAAa,QAAQ,CAAC;AAGnC;;;gCAGgC;AAChC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAElE;AAqBD;;;;2DAI2D;AAC3D,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,sBAAsB,GAAG,SAAS,GACzC,sBAAsB,GAAG,SAAS,CAEpC;AAED;;;sEAGsE;AACtE,wBAAgB,kCAAkC,CAChD,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAC7C,OAAO,CAET;AAED;;;;;;;;;+CAS+C;AAC/C,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,OAAO,EACzB,cAAc,CAAC,EAAE,sBAAsB,GACtC,mBAAmB,CAwBrB;AAED;;0CAE0C;AAC1C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAYrF;AAED;6EAC6E;AAC7E,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,gBAAgB,EAAE,OAAO,CAAC;IAC1B;kDAC8C;IAC9C,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,SAAS,EAAE,EACvB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,MAAM,GAAE,SAAS,EAAO,EACxB,YAAY,GAAE,MAAyB,EACvC,QAAQ,CAAC,EAAE,mBAAmB;AAC9B;;;;oCAIoC;AACpC,eAAe,CAAC,EAAE,OAAO;AACzB;;mDAEmD;AACnD,SAAS,CAAC,EAAE,oBAAoB;AAChC;;;;;iBAKiB;AACjB,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,GAAG,kBAAkB,GACjE,mBAAmB,EAAE,CA0IvB;AAoFD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA+DhG;AAED;;;;;;;;;;;;;;;;;;;gFAmBgF;AAChF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAiCnF;AA+HD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,SAAS,EAAE,EACtB,SAAS,EAAE,MAAM,EAAE,EACnB,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/C,MAAM,CAAC,EAAE,MAAM,GACd,SAAS,EAAE,CAKb;AAyPD,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,CAmFpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,MAAM,GAAG,SAAS,CAYrB;AA0LD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE,GAAG,gBAAgB,EAAE,GAAG,wBAAwB,EAAE,EACvF,IAAI,EAAE,WAAW,GAAG,MAAM,EAC1B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;IAOtB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAM/B,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,aAAa,CAAC,EAAE,OAAO,CAAC;IAIxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GACA,mBAAmB,EAAE,CAiavB;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,0BAA0B,EACnC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IACR,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,sBAAsB,CAAC;CAC7C,GACA,mBAAmB,EAAE,CAgIvB;AAED;;;;;;;;;;;oEAWoE;AACpE,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAC3D,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,cAAc,CAAC,CAczB;AAED,wBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM;;;EAgDrC"}
package/dist/acp-agent.js CHANGED
@@ -31,6 +31,7 @@ import { acceptedPlanToolResult, ExitPlanCoordinator, executionDiagnostic, exitP
31
31
  import { DEFAULT_AGENT_ID, EFFORT_CONFIG_ID } from "./session-config-ids.js";
32
32
  import { parseToolResultMeta } from "./tool-result-meta.js";
33
33
  import { AccountUsageTracker } from "./account-usage.js";
34
+ import { readFreshLimits, sharedSampleMaxAgeMs, writeLimits } from "./quota-cache.js";
34
35
  import { ACCOUNT_CONFIG_ID, accountForValue, accountInForce, createAccountConfigOption, envForAccount, readDeclaredAccounts, } from "./accounts.js";
35
36
  import { isUsageCommandText, structuredUsageMarkdown } from "./usage-markdown.js";
36
37
  export { DEFAULT_AGENT_ID, EFFORT_CONFIG_ID } from "./session-config-ids.js";
@@ -115,6 +116,37 @@ function parseSteerRequest(params) {
115
116
  _meta: _meta,
116
117
  };
117
118
  }
119
+ /** How often the account quota windows are refreshed while a session sits idle,
120
+ * in milliseconds; `0` disables polling entirely.
121
+ *
122
+ * Without this the windows move at only three moments: session establishment,
123
+ * the end of every turn, and a pushed `rate_limit_event`. None of them is time
124
+ * — so a five-hour window that resets while nobody is prompting keeps showing
125
+ * the old utilization, and the bar is wrong in the one direction that matters
126
+ * (it under-reports how much is available) until the next turn ends.
127
+ *
128
+ * The floor is not timidity: each tick costs one control request, and neither
129
+ * the five-hour nor the seven-day window can move fast enough for a tighter
130
+ * loop to show anything a 15-second one would miss. */
131
+ const QUOTA_POLL_DEFAULT_MS = 60_000;
132
+ const QUOTA_POLL_FLOOR_MS = 15_000;
133
+ /** Resolve the poll interval from the environment, clamped. An unparseable or
134
+ * negative value falls back to the default rather than disabling the refresh:
135
+ * a typo should not silently return the bars to the stale behaviour this
136
+ * exists to fix. Exactly `0` disables, because that is the only way to ask. */
137
+ export function quotaPollIntervalMs(raw = process.env.CLAUDE_ACP_QUOTA_POLL_MS) {
138
+ if (raw === undefined || raw.trim() === "") {
139
+ return QUOTA_POLL_DEFAULT_MS;
140
+ }
141
+ const parsed = Number(raw);
142
+ if (!Number.isFinite(parsed) || parsed < 0) {
143
+ return QUOTA_POLL_DEFAULT_MS;
144
+ }
145
+ if (parsed === 0) {
146
+ return 0;
147
+ }
148
+ return Math.max(parsed, QUOTA_POLL_FLOOR_MS);
149
+ }
118
150
  /** Result-message origin kinds that mark an AUTONOMOUS cycle — work the
119
151
  * model did on its own (a task-notification followup, a peer/coordinator/
120
152
  * observer message it handled) rather than the user's prompt. Absent,
@@ -1119,13 +1151,42 @@ export class ClaudeAcpAgent {
1119
1151
  * only that the request failed and why) and the previously reported windows
1120
1152
  * are left standing, because nothing was sent.
1121
1153
  */
1122
- async publishAccountUsage(sessionId, session) {
1154
+ /** Fetch the account's quota windows and publish them to this session.
1155
+ *
1156
+ * `allowCache` is the difference between the two callers. A turn ending and a
1157
+ * session being established are moments when THIS session's own consumption
1158
+ * just changed, so they always fetch. The idle poll has no such reason: it is
1159
+ * asking about an account, and every other adapter process on the desktop is
1160
+ * asking the same question about the same account. It reads the shared sample
1161
+ * instead -- see quota-cache.ts for why sharing, not tighter intervals, is
1162
+ * what makes separate windows agree. */
1163
+ async publishAccountUsage(sessionId, session, { allowCache = false } = {}) {
1123
1164
  try {
1124
1165
  // Not `getUsage`: this awful spelling is the only name the real `Query`
1125
1166
  // answers to, and it is written out here rather than hidden behind a
1126
1167
  // helper so a rename lands as one named failure in the log below, not as
1127
1168
  // a quiet degradation to no report at all.
1128
- const report = await session.query.usage_EXPERIMENTAL_MAY_CHANGE_DO_NOT_RELY_ON_THIS_API_YET();
1169
+ // `skipBehaviors` drops the local-transcript scan that fills the report's
1170
+ // `behaviors` section. Nothing here reads it — `windowsFrom` touches only
1171
+ // `rate_limits_available` and `rate_limits` — so on every call, not just
1172
+ // the polled ones, that scan was pure cost. `/usage` still asks for the
1173
+ // full report, because it renders those contributions.
1174
+ // A sample another process already paid for, when this call is allowed to
1175
+ // take one. `null` covers every failure the cache can have, so a broken
1176
+ // cache degrades to exactly the behaviour that existed before it.
1177
+ const cached = allowCache
1178
+ ? await readFreshLimits(sharedSampleMaxAgeMs(quotaPollIntervalMs()))
1179
+ : null;
1180
+ const report = cached ??
1181
+ (await session.query.usage_EXPERIMENTAL_MAY_CHANGE_DO_NOT_RELY_ON_THIS_API_YET({
1182
+ skipBehaviors: true,
1183
+ }));
1184
+ if (!cached) {
1185
+ // Fired, not awaited: the other processes benefit from this sample, but
1186
+ // this session's own client must not wait on a filesystem write to see
1187
+ // its bars. `writeLimits` never rejects.
1188
+ void writeLimits(report);
1189
+ }
1129
1190
  // The session can be torn down or recreated while the request is in
1130
1191
  // flight (provider switch, a changed cwd on session/load). A successor
1131
1192
  // must not inherit its predecessor's windows.
@@ -1162,6 +1223,50 @@ export class ClaudeAcpAgent {
1162
1223
  this.logger.error(`Session ${sessionId}: structured usage report unavailable: ${error}`);
1163
1224
  }
1164
1225
  }
1226
+ /** Start the idle refresh of the account quota windows for this session.
1227
+ *
1228
+ * Idempotent, and deliberately called at the end of every turn rather than
1229
+ * once: the first call arms, the rest return immediately, so no caller has to
1230
+ * know whether this is turn one.
1231
+ *
1232
+ * The tick does nothing while a turn is in flight. That turn's own end
1233
+ * already refreshes the windows, and a second control request would buy the
1234
+ * same answer twice — the same reasoning that excludes autonomous cycles at
1235
+ * the end-of-turn call site. */
1236
+ armAccountUsagePolling(sessionId, session) {
1237
+ if (session.accountUsageTimer) {
1238
+ return;
1239
+ }
1240
+ const intervalMs = quotaPollIntervalMs();
1241
+ if (intervalMs === 0) {
1242
+ return;
1243
+ }
1244
+ // Closure-local rather than a Session field: it guards this timer alone, and
1245
+ // a slow report must not let ticks pile up into a queue of duplicate control
1246
+ // requests against a session that is already struggling to answer one.
1247
+ let inFlight = false;
1248
+ const timer = setInterval(() => {
1249
+ // Re-resolve through the map. A provider update replaces the Session
1250
+ // object under the same id and the replacement arms its own timer, so an
1251
+ // orphaned closure must retire rather than keep polling a husk.
1252
+ if (this.sessions[sessionId] !== session || session.queryClosed) {
1253
+ clearInterval(timer);
1254
+ return;
1255
+ }
1256
+ if (session.turnQueue?.length || session.activeTurn || inFlight) {
1257
+ return;
1258
+ }
1259
+ inFlight = true;
1260
+ // `publishAccountUsage` never rejects — it logs and returns — so this
1261
+ // cannot become an unhandled rejection, and `finally` always re-opens.
1262
+ void this.publishAccountUsage(sessionId, session, { allowCache: true }).finally(() => {
1263
+ inFlight = false;
1264
+ });
1265
+ }, intervalMs);
1266
+ // A quota refresh is never a reason to keep the process alive.
1267
+ timer.unref?.();
1268
+ session.accountUsageTimer = timer;
1269
+ }
1165
1270
  async publishGoalFromPrompt(sessionId, prompt, commandUuid) {
1166
1271
  const goalUpdate = goalUpdateFromPrompt(prompt);
1167
1272
  if (goalUpdate !== undefined) {
@@ -3196,6 +3301,10 @@ export class ClaudeAcpAgent {
3196
3301
  // the trailing idle is, and a stalled control request there is
3197
3302
  // the same exposure `fetchContextUsedTokens` already accepts.
3198
3303
  await this.publishAccountUsage(params.sessionId, session);
3304
+ // A settled turn is the proof that control requests are being
3305
+ // serviced (before the first one they are not — #886/#880), so
3306
+ // this is the earliest honest moment to start the idle refresh.
3307
+ this.armAccountUsagePolling(params.sessionId, session);
3199
3308
  }
3200
3309
  }
3201
3310
  break;
@@ -4068,6 +4177,15 @@ export class ClaudeAcpAgent {
4068
4177
  }
4069
4178
  session.queryClosed = true;
4070
4179
  session.consumer = undefined;
4180
+ // Every teardown path reaches this method, which is why the quota timer is
4181
+ // cleared here and nowhere else: a `clearInterval` repeated at each of the
4182
+ // four call sites is one merge away from missing the fifth. A session whose
4183
+ // stream is closed cannot answer the usage control request anyway, so a
4184
+ // surviving timer would only log a failure a minute, forever.
4185
+ if (session.accountUsageTimer) {
4186
+ clearInterval(session.accountUsageTimer);
4187
+ session.accountUsageTimer = undefined;
4188
+ }
4071
4189
  session.settingsManager.dispose();
4072
4190
  session.input.end();
4073
4191
  session.query.close();
@@ -0,0 +1,70 @@
1
+ /**
2
+ * One quota sample per machine per interval, shared between adapter processes.
3
+ *
4
+ * The plan windows are a fact about an ACCOUNT, but they were fetched per
5
+ * SESSION. On a desktop running ten Zed windows that is ten identical control
6
+ * requests per interval for one number -- and, worse, ten samples taken at ten
7
+ * different instants. The number genuinely moves between them (other sessions
8
+ * consume, and old requests age out of the five-hour window), so every window
9
+ * showed a different, individually truthful percentage. Measured 2026-09-09:
10
+ * one instance at 15% beside two at 19%, and `five_hour` observed going
11
+ * 0.15 -> 0.18 -> 0.15 inside two minutes with nothing prompted.
12
+ *
13
+ * Shortening the interval makes that WORSE, not better: it samples the moving
14
+ * number more often. Agreement has to come from sharing the sample, not from
15
+ * hoping the clocks line up.
16
+ *
17
+ * What is cached is the REPORT's two rate-limit fields, never the derived
18
+ * windows. `AccountUsageTracker.statusFor` applies a status this session
19
+ * measured from its own live `rate_limit_event` (R1.6), and that memory is
20
+ * session-scoped by design -- caching the derived windows would hand one
21
+ * session's measured `rejected` to another. Caching the raw fields lets every
22
+ * session derive its own.
23
+ *
24
+ * Everything here fails soft. A cache that cannot be read or written is a cache
25
+ * miss, never an error: the refresh it exists to cheapen must still happen.
26
+ */
27
+ import type { QuotaLimitsReport } from "./account-usage.js";
28
+ /** The two fields `windowsFrom` reads. Nothing else is cached -- the report also
29
+ * carries this session's cost and token totals, which are nobody else's. */
30
+ export type CachedLimits = QuotaLimitsReport;
31
+ /**
32
+ * How old a shared sample may be and still be used, for a given tick interval.
33
+ *
34
+ * Deliberately SHORTER than the interval. Equal, and whether a process re-fetches
35
+ * on its own tick turns on sub-millisecond timing: its own sample is then exactly
36
+ * one interval old at the boundary, so a write that landed a hair late reads as
37
+ * fresh and the tick silently skips. Nothing breaks -- the data is still within
38
+ * an interval -- but the behaviour stops being predictable, and a test that
39
+ * asserts it becomes a coin toss.
40
+ *
41
+ * At nine tenths both cases are decided by a wide margin: a process's OWN last
42
+ * sample is reliably stale at its next tick, and a sample another process took
43
+ * mid-interval is reliably fresh. The account is still sampled about once per
44
+ * interval, which is the whole point.
45
+ */
46
+ export declare function sharedSampleMaxAgeMs(intervalMs: number): number;
47
+ /** `XDG_RUNTIME_DIR` is the right home: per-user, mode 0700, on tmpfs, and
48
+ * cleared at logout, so a stale sample can never outlive the desktop that
49
+ * produced it. `tmpdir()` is the fallback for hosts without it, where the mode
50
+ * on the file itself is what protects the sample. */
51
+ export declare function quotaCachePath(): string;
52
+ /**
53
+ * The cached sample, when it is younger than `maxAgeMs`; `null` otherwise.
54
+ *
55
+ * `null` is returned for every failure too -- missing file, unparseable JSON,
56
+ * a clock that moved backwards. The caller's contract is "fetch on null", so a
57
+ * broken cache degrades to exactly the behaviour that existed before it.
58
+ */
59
+ export declare function readFreshLimits(maxAgeMs: number, now?: number): Promise<CachedLimits | null>;
60
+ /**
61
+ * Publish a freshly fetched sample for the other processes.
62
+ *
63
+ * Written to a per-pid temp file and renamed, because `rename(2)` is atomic
64
+ * within a directory: a reader either sees the whole previous sample or the
65
+ * whole new one, never a half-written file. Two processes racing produces two
66
+ * fetches and one surviving sample, which is the harmless outcome -- the reads
67
+ * are idempotent and the loser's work is simply discarded.
68
+ */
69
+ export declare function writeLimits(limits: CachedLimits, now?: number): Promise<void>;
70
+ //# sourceMappingURL=quota-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-cache.d.ts","sourceRoot":"","sources":["../src/quota-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAK5D;6EAC6E;AAC7E,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAyB7C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;sDAGsD;AACtD,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAmB,GACvB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAqB9B;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB/F"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * One quota sample per machine per interval, shared between adapter processes.
3
+ *
4
+ * The plan windows are a fact about an ACCOUNT, but they were fetched per
5
+ * SESSION. On a desktop running ten Zed windows that is ten identical control
6
+ * requests per interval for one number -- and, worse, ten samples taken at ten
7
+ * different instants. The number genuinely moves between them (other sessions
8
+ * consume, and old requests age out of the five-hour window), so every window
9
+ * showed a different, individually truthful percentage. Measured 2026-09-09:
10
+ * one instance at 15% beside two at 19%, and `five_hour` observed going
11
+ * 0.15 -> 0.18 -> 0.15 inside two minutes with nothing prompted.
12
+ *
13
+ * Shortening the interval makes that WORSE, not better: it samples the moving
14
+ * number more often. Agreement has to come from sharing the sample, not from
15
+ * hoping the clocks line up.
16
+ *
17
+ * What is cached is the REPORT's two rate-limit fields, never the derived
18
+ * windows. `AccountUsageTracker.statusFor` applies a status this session
19
+ * measured from its own live `rate_limit_event` (R1.6), and that memory is
20
+ * session-scoped by design -- caching the derived windows would hand one
21
+ * session's measured `rejected` to another. Caching the raw fields lets every
22
+ * session derive its own.
23
+ *
24
+ * Everything here fails soft. A cache that cannot be read or written is a cache
25
+ * miss, never an error: the refresh it exists to cheapen must still happen.
26
+ */
27
+ import { createHash, randomUUID } from "node:crypto";
28
+ import { promises as fs } from "node:fs";
29
+ import * as os from "node:os";
30
+ import * as path from "node:path";
31
+ /**
32
+ * A cache is only shareable between processes answering for the SAME account.
33
+ *
34
+ * The api-key entry is the case that makes this mandatory rather than tidy: a
35
+ * session authenticated by `ANTHROPIC_API_KEY` reports `rate_limits_available:
36
+ * false` and no windows at all. Sharing one file with a subscription session
37
+ * would let it publish that emptiness to every other window on the desktop.
38
+ *
39
+ * The key is a digest. The API key itself is hashed before it contributes, so
40
+ * two different keys cannot collide while neither appears in a filename.
41
+ */
42
+ function scopeKey() {
43
+ const apiKey = process.env.ANTHROPIC_API_KEY;
44
+ const scope = [
45
+ process.env.ANTHROPIC_CONFIG_DIR ?? "",
46
+ process.env.CLAUDE_CONFIG_DIR ?? "",
47
+ apiKey ? createHash("sha256").update(apiKey).digest("hex") : "",
48
+ ].join("\0");
49
+ return createHash("sha256").update(scope).digest("hex").slice(0, 16);
50
+ }
51
+ /**
52
+ * How old a shared sample may be and still be used, for a given tick interval.
53
+ *
54
+ * Deliberately SHORTER than the interval. Equal, and whether a process re-fetches
55
+ * on its own tick turns on sub-millisecond timing: its own sample is then exactly
56
+ * one interval old at the boundary, so a write that landed a hair late reads as
57
+ * fresh and the tick silently skips. Nothing breaks -- the data is still within
58
+ * an interval -- but the behaviour stops being predictable, and a test that
59
+ * asserts it becomes a coin toss.
60
+ *
61
+ * At nine tenths both cases are decided by a wide margin: a process's OWN last
62
+ * sample is reliably stale at its next tick, and a sample another process took
63
+ * mid-interval is reliably fresh. The account is still sampled about once per
64
+ * interval, which is the whole point.
65
+ */
66
+ export function sharedSampleMaxAgeMs(intervalMs) {
67
+ return Math.floor(intervalMs * 0.9);
68
+ }
69
+ /** `XDG_RUNTIME_DIR` is the right home: per-user, mode 0700, on tmpfs, and
70
+ * cleared at logout, so a stale sample can never outlive the desktop that
71
+ * produced it. `tmpdir()` is the fallback for hosts without it, where the mode
72
+ * on the file itself is what protects the sample. */
73
+ export function quotaCachePath() {
74
+ const dir = process.env.XDG_RUNTIME_DIR || os.tmpdir();
75
+ return path.join(dir, `claude-acp-quota-${scopeKey()}.json`);
76
+ }
77
+ /**
78
+ * The cached sample, when it is younger than `maxAgeMs`; `null` otherwise.
79
+ *
80
+ * `null` is returned for every failure too -- missing file, unparseable JSON,
81
+ * a clock that moved backwards. The caller's contract is "fetch on null", so a
82
+ * broken cache degrades to exactly the behaviour that existed before it.
83
+ */
84
+ export async function readFreshLimits(maxAgeMs, now = Date.now()) {
85
+ try {
86
+ const raw = await fs.readFile(quotaCachePath(), "utf8");
87
+ const parsed = JSON.parse(raw);
88
+ if (typeof parsed?.fetchedAt !== "number") {
89
+ return null;
90
+ }
91
+ const age = now - parsed.fetchedAt;
92
+ // A negative age means the writer's clock is ahead of ours. Treat it as a
93
+ // miss rather than as infinitely fresh, which would pin every window to one
94
+ // sample until the clocks reconciled.
95
+ if (age < 0 || age >= maxAgeMs) {
96
+ return null;
97
+ }
98
+ return {
99
+ rate_limits_available: parsed.rate_limits_available,
100
+ rate_limits: parsed.rate_limits,
101
+ };
102
+ }
103
+ catch {
104
+ return null;
105
+ }
106
+ }
107
+ /**
108
+ * Publish a freshly fetched sample for the other processes.
109
+ *
110
+ * Written to a per-pid temp file and renamed, because `rename(2)` is atomic
111
+ * within a directory: a reader either sees the whole previous sample or the
112
+ * whole new one, never a half-written file. Two processes racing produces two
113
+ * fetches and one surviving sample, which is the harmless outcome -- the reads
114
+ * are idempotent and the loser's work is simply discarded.
115
+ */
116
+ export async function writeLimits(limits, now = Date.now()) {
117
+ const target = quotaCachePath();
118
+ // Unique per WRITE, not per process. One adapter process serves several
119
+ // sessions, so a turn ending in one can coincide with another's tick: sharing
120
+ // a temp path by pid let two writes interleave into it, and `rename` then
121
+ // published the mixture. The corrupt file parsed as a miss, so the damage was
122
+ // silent -- every reader simply fetched, and the cache quietly did nothing.
123
+ const temp = `${target}.${process.pid}.${randomUUID()}.tmp`;
124
+ const body = {
125
+ fetchedAt: now,
126
+ rate_limits_available: limits.rate_limits_available,
127
+ rate_limits: limits.rate_limits,
128
+ };
129
+ try {
130
+ await fs.writeFile(temp, JSON.stringify(body), { mode: 0o600 });
131
+ await fs.rename(temp, target);
132
+ }
133
+ catch {
134
+ // A sample that could not be shared is not a failed refresh: this process
135
+ // already has the answer and is about to publish it to its own client.
136
+ await fs.rm(temp, { force: true }).catch(() => { });
137
+ }
138
+ }
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.13.0",
6
+ "version": "0.15.0",
7
7
  "description": "ACP adapter for the Claude Agent SDK with VS Code-parity UX for Zed and other ACP clients — checkbox multi-select questions, refusal consent dialog, dynamic agent name. Fork of claude-agent-acp.",
8
8
  "main": "dist/lib.js",
9
9
  "types": "dist/lib.d.ts",