agent-shim 8.25.0 → 8.26.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.
- package/dist/cli.cjs +349 -161
- package/dist/index.cjs +109 -16
- package/dist/index.mjs +103 -16
- package/dist/types/index.d.ts +271 -4
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -61796,7 +61796,7 @@ function registerIdentityCommand(program2, deps) {
|
|
|
61796
61796
|
// package.json
|
|
61797
61797
|
var package_default = {
|
|
61798
61798
|
name: "agent-shim",
|
|
61799
|
-
version: "8.
|
|
61799
|
+
version: "8.26.0",
|
|
61800
61800
|
description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
|
|
61801
61801
|
license: "MIT",
|
|
61802
61802
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -69666,6 +69666,166 @@ var CheckReportJsonSchema = external_exports.strictObject({
|
|
|
69666
69666
|
|
|
69667
69667
|
// src/frontdoor/controlSchemas.ts
|
|
69668
69668
|
var import_node_path33 = __toESM(require("node:path"), 1);
|
|
69669
|
+
|
|
69670
|
+
// src/frontdoor/rcSchemas.ts
|
|
69671
|
+
var RcPermissionModeSchema = external_exports.enum(RC_PERMISSION_MODES);
|
|
69672
|
+
var RcSessionSummarySchema = external_exports.strictObject({
|
|
69673
|
+
id: external_exports.string(),
|
|
69674
|
+
createdAt: external_exports.number(),
|
|
69675
|
+
lastSeenAt: external_exports.number()
|
|
69676
|
+
});
|
|
69677
|
+
function workerFactSchema(value2) {
|
|
69678
|
+
return external_exports.strictObject({ value: value2, observedAt: external_exports.number() });
|
|
69679
|
+
}
|
|
69680
|
+
var RcPendingRequestSummarySchema = external_exports.strictObject({
|
|
69681
|
+
sessionId: external_exports.string(),
|
|
69682
|
+
requestId: external_exports.string(),
|
|
69683
|
+
type: external_exports.string(),
|
|
69684
|
+
summary: external_exports.string(),
|
|
69685
|
+
observedAt: external_exports.number()
|
|
69686
|
+
});
|
|
69687
|
+
var RcSessionStatusSchema = external_exports.strictObject({
|
|
69688
|
+
...RcSessionSummarySchema.shape,
|
|
69689
|
+
workerState: workerFactSchema(external_exports.string()).optional(),
|
|
69690
|
+
workerIdleSeconds: workerFactSchema(external_exports.number()).optional(),
|
|
69691
|
+
pending: external_exports.readonly(external_exports.array(RcPendingRequestSummarySchema))
|
|
69692
|
+
});
|
|
69693
|
+
var RcStreamEnvelopeSchema = external_exports.looseObject({
|
|
69694
|
+
/** The envelope's own event id, when the host sent one. */
|
|
69695
|
+
event_id: external_exports.string().optional(),
|
|
69696
|
+
/** The envelope's event type, the discriminator a consumer switches on (`control_request`, `user`, and kin). */
|
|
69697
|
+
event_type: external_exports.string(),
|
|
69698
|
+
/** The sequence number the host assigned, the value a resume continues after. */
|
|
69699
|
+
sequence_num: external_exports.int(),
|
|
69700
|
+
/** Who emitted the event (`worker` for the CLI's half, a client id for a client's). */
|
|
69701
|
+
source: external_exports.string(),
|
|
69702
|
+
/** The event's payload, carried verbatim: its shape is the payload family's, narrowed by whichever consumer needs it. Optional in the schema's own type because the door forwards the host's envelope as it arrived, asserting only the fields it relies on itself. */
|
|
69703
|
+
payload: external_exports.unknown().optional(),
|
|
69704
|
+
/** When the host created the event; the protocol's own type for this field is not established here, so it is forwarded rather than asserted. */
|
|
69705
|
+
created_at: external_exports.unknown().optional()
|
|
69706
|
+
});
|
|
69707
|
+
var RcStreamEventSchema = external_exports.strictObject({
|
|
69708
|
+
session: external_exports.string(),
|
|
69709
|
+
envelope: RcStreamEnvelopeSchema
|
|
69710
|
+
});
|
|
69711
|
+
var RcRateLimitWindowSchema = external_exports.looseObject({
|
|
69712
|
+
/** The fraction of the window used, usually between 0 and 1, above 1 when usage legitimately runs past the window's cap (the CLI's own field description states both). */
|
|
69713
|
+
utilization: external_exports.number().optional(),
|
|
69714
|
+
/** When the window resets, in unix epoch seconds: the unit is the CLI's own field description, stated in the 2.1.289 bundle's schema. */
|
|
69715
|
+
resetsAt: external_exports.number().optional()
|
|
69716
|
+
});
|
|
69717
|
+
var RcRateLimitInfoSchema = external_exports.looseObject({
|
|
69718
|
+
/** The limiting window's own status (`allowed`, `allowed_warning`, `rejected`), asserted only as a string because the vocabulary grows with the CLI. */
|
|
69719
|
+
status: external_exports.string(),
|
|
69720
|
+
/** When the limiting window resets, in unix epoch seconds. */
|
|
69721
|
+
resetsAt: external_exports.number().optional(),
|
|
69722
|
+
/** Which window the top-level fields describe (`five_hour`, `seven_day`, and kin), the payload's own name for it. */
|
|
69723
|
+
rateLimitType: external_exports.string().optional(),
|
|
69724
|
+
/** The fraction of the limiting window used, on the same scale the per-window utilizations carry. */
|
|
69725
|
+
utilization: external_exports.number().optional(),
|
|
69726
|
+
/** Whether usage beyond the plan (extra usage) is currently covering the overflow, the payload's own flag for it. */
|
|
69727
|
+
isUsingOverage: external_exports.boolean().optional(),
|
|
69728
|
+
/** The overage's own status, the same vocabulary the limiting window's `status` carries. */
|
|
69729
|
+
overageStatus: external_exports.string().optional(),
|
|
69730
|
+
/** When the overage window resets, in unix epoch seconds. */
|
|
69731
|
+
overageResetsAt: external_exports.number().optional(),
|
|
69732
|
+
/** Each subscription window the account's response headers carried: the session (five-hour), weekly (seven-day), and overage-included weekly windows, each present only when the account's responses carry it. */
|
|
69733
|
+
unifiedWindows: external_exports.looseObject({ five_hour: RcRateLimitWindowSchema.optional(), seven_day: RcRateLimitWindowSchema.optional(), seven_day_overage_included: RcRateLimitWindowSchema.optional() }).optional()
|
|
69734
|
+
});
|
|
69735
|
+
var RcLiveRateLimitSchema = external_exports.strictObject({
|
|
69736
|
+
session: external_exports.string(),
|
|
69737
|
+
observedAt: external_exports.number(),
|
|
69738
|
+
rateLimit: RcRateLimitInfoSchema
|
|
69739
|
+
});
|
|
69740
|
+
var RcSessionQuerySchema = external_exports.strictObject({
|
|
69741
|
+
session: external_exports.string().min(1).optional()
|
|
69742
|
+
});
|
|
69743
|
+
var RcSendInputSchema = external_exports.strictObject({
|
|
69744
|
+
session: external_exports.string().min(1),
|
|
69745
|
+
text: external_exports.string().min(1)
|
|
69746
|
+
});
|
|
69747
|
+
var RcAnswerInputSchema = external_exports.strictObject({
|
|
69748
|
+
session: external_exports.string().min(1),
|
|
69749
|
+
request: external_exports.string().min(1),
|
|
69750
|
+
approve: external_exports.boolean(),
|
|
69751
|
+
text: external_exports.string().optional()
|
|
69752
|
+
}).refine((input2) => !input2.approve || input2.text === void 0 || input2.text === "", { message: "an approval carries no text (the protocol's allow result has no message field); text is the denial message" });
|
|
69753
|
+
var RcInterruptInputSchema = external_exports.strictObject({
|
|
69754
|
+
session: external_exports.string().min(1)
|
|
69755
|
+
});
|
|
69756
|
+
var RcSetModelInputSchema = external_exports.strictObject({
|
|
69757
|
+
session: external_exports.string().min(1),
|
|
69758
|
+
model: external_exports.string().min(1)
|
|
69759
|
+
});
|
|
69760
|
+
var RcSetPermissionModeInputSchema = external_exports.strictObject({
|
|
69761
|
+
session: external_exports.string().min(1),
|
|
69762
|
+
mode: RcPermissionModeSchema
|
|
69763
|
+
});
|
|
69764
|
+
var RcEndSessionInputSchema = external_exports.strictObject({
|
|
69765
|
+
session: external_exports.string().min(1),
|
|
69766
|
+
reason: external_exports.string().min(1).optional()
|
|
69767
|
+
});
|
|
69768
|
+
var RcGetUsageInputSchema = external_exports.strictObject({
|
|
69769
|
+
session: external_exports.string().min(1),
|
|
69770
|
+
skipBehaviors: external_exports.boolean().optional()
|
|
69771
|
+
});
|
|
69772
|
+
var RcGetContextUsageInputSchema = external_exports.strictObject({
|
|
69773
|
+
session: external_exports.string().min(1),
|
|
69774
|
+
detail: external_exports.enum(RC_CONTEXT_USAGE_DETAILS).optional()
|
|
69775
|
+
});
|
|
69776
|
+
var RcReadFileInputSchema = external_exports.strictObject({
|
|
69777
|
+
session: external_exports.string().min(1),
|
|
69778
|
+
path: external_exports.string().min(1),
|
|
69779
|
+
maxBytes: external_exports.number().int().positive().optional(),
|
|
69780
|
+
encoding: external_exports.enum(RC_READ_FILE_ENCODINGS).optional()
|
|
69781
|
+
});
|
|
69782
|
+
var RcFileSuggestionsInputSchema = external_exports.strictObject({
|
|
69783
|
+
session: external_exports.string().min(1),
|
|
69784
|
+
query: external_exports.string()
|
|
69785
|
+
});
|
|
69786
|
+
var RcKeepAliveInputSchema = external_exports.strictObject({
|
|
69787
|
+
session: external_exports.string().min(1)
|
|
69788
|
+
});
|
|
69789
|
+
var RcMcpStatusInputSchema = external_exports.strictObject({
|
|
69790
|
+
session: external_exports.string().min(1)
|
|
69791
|
+
});
|
|
69792
|
+
var RcMcpReconnectInputSchema = external_exports.strictObject({
|
|
69793
|
+
session: external_exports.string().min(1),
|
|
69794
|
+
serverName: external_exports.string().min(1)
|
|
69795
|
+
});
|
|
69796
|
+
var RcMcpAuthenticateInputSchema = external_exports.strictObject({
|
|
69797
|
+
session: external_exports.string().min(1),
|
|
69798
|
+
serverName: external_exports.string().min(1),
|
|
69799
|
+
redirectUri: external_exports.string().min(1)
|
|
69800
|
+
});
|
|
69801
|
+
var RcMcpOAuthCallbackUrlInputSchema = external_exports.strictObject({
|
|
69802
|
+
session: external_exports.string().min(1),
|
|
69803
|
+
serverName: external_exports.string().min(1),
|
|
69804
|
+
callbackUrl: external_exports.string().min(1)
|
|
69805
|
+
});
|
|
69806
|
+
var RcTeleportInputSchema = external_exports.strictObject({
|
|
69807
|
+
session: external_exports.string().min(1),
|
|
69808
|
+
marker: external_exports.string().min(1)
|
|
69809
|
+
});
|
|
69810
|
+
var RcListOutputSchema = external_exports.strictObject({ sessions: external_exports.readonly(external_exports.array(RcSessionSummarySchema)) });
|
|
69811
|
+
var RcStatusOutputSchema = external_exports.strictObject({ statuses: external_exports.readonly(external_exports.array(RcSessionStatusSchema)) });
|
|
69812
|
+
var RcPendingOutputSchema = external_exports.strictObject({ pending: external_exports.readonly(external_exports.array(RcPendingRequestSummarySchema)) });
|
|
69813
|
+
var RcWriteOutputSchema = external_exports.strictObject({
|
|
69814
|
+
session: external_exports.string(),
|
|
69815
|
+
sequenceNums: external_exports.readonly(external_exports.array(external_exports.number()))
|
|
69816
|
+
});
|
|
69817
|
+
var RcControlWriteOutputSchema = external_exports.strictObject({
|
|
69818
|
+
session: external_exports.string(),
|
|
69819
|
+
request: external_exports.string(),
|
|
69820
|
+
sequenceNums: external_exports.readonly(external_exports.array(external_exports.number()))
|
|
69821
|
+
});
|
|
69822
|
+
var RcAnswerOutputSchema = external_exports.strictObject({
|
|
69823
|
+
session: external_exports.string(),
|
|
69824
|
+
request: external_exports.string(),
|
|
69825
|
+
sequenceNums: external_exports.readonly(external_exports.array(external_exports.number()))
|
|
69826
|
+
});
|
|
69827
|
+
|
|
69828
|
+
// src/frontdoor/controlSchemas.ts
|
|
69669
69829
|
var UsageListOutputSchema = external_exports.strictObject({ snapshots: external_exports.readonly(external_exports.array(UsageSnapshotSchema)) });
|
|
69670
69830
|
var UsageWindowsInputSchema = external_exports.strictObject({
|
|
69671
69831
|
identity: external_exports.string().min(1),
|
|
@@ -69689,6 +69849,12 @@ var UsageWindowsOutputSchema = external_exports.strictObject({
|
|
|
69689
69849
|
fiveHour: EffectiveWindowSchema.optional(),
|
|
69690
69850
|
sevenDay: EffectiveWindowSchema.optional()
|
|
69691
69851
|
});
|
|
69852
|
+
var UsageLiveOutputSchema = external_exports.strictObject({
|
|
69853
|
+
/** The freshest observation the door holds, never narrowed by the read's session filter because it is the door's single latest statement of the account's quota; absent while no rate_limit_event has been filed at all. */
|
|
69854
|
+
latest: RcLiveRateLimitSchema.optional(),
|
|
69855
|
+
/** One observation per session whose stream has filed a rate_limit_event this door generation. */
|
|
69856
|
+
sessions: external_exports.readonly(external_exports.array(RcLiveRateLimitSchema))
|
|
69857
|
+
});
|
|
69692
69858
|
var FrontDoorSessionStatusSchema = external_exports.strictObject({
|
|
69693
69859
|
pid: external_exports.int().positive(),
|
|
69694
69860
|
startedAt: external_exports.number(),
|
|
@@ -71992,137 +72158,6 @@ var RPCHandler = class extends NodeHttpHandler {
|
|
|
71992
72158
|
|
|
71993
72159
|
// src/frontdoor/rcApi.ts
|
|
71994
72160
|
var import_undici2 = __toESM(require_undici(), 1);
|
|
71995
|
-
|
|
71996
|
-
// src/frontdoor/rcSchemas.ts
|
|
71997
|
-
var RcPermissionModeSchema = external_exports.enum(RC_PERMISSION_MODES);
|
|
71998
|
-
var RcSessionSummarySchema = external_exports.strictObject({
|
|
71999
|
-
id: external_exports.string(),
|
|
72000
|
-
createdAt: external_exports.number(),
|
|
72001
|
-
lastSeenAt: external_exports.number()
|
|
72002
|
-
});
|
|
72003
|
-
function workerFactSchema(value2) {
|
|
72004
|
-
return external_exports.strictObject({ value: value2, observedAt: external_exports.number() });
|
|
72005
|
-
}
|
|
72006
|
-
var RcPendingRequestSummarySchema = external_exports.strictObject({
|
|
72007
|
-
sessionId: external_exports.string(),
|
|
72008
|
-
requestId: external_exports.string(),
|
|
72009
|
-
type: external_exports.string(),
|
|
72010
|
-
summary: external_exports.string(),
|
|
72011
|
-
observedAt: external_exports.number()
|
|
72012
|
-
});
|
|
72013
|
-
var RcSessionStatusSchema = external_exports.strictObject({
|
|
72014
|
-
...RcSessionSummarySchema.shape,
|
|
72015
|
-
workerState: workerFactSchema(external_exports.string()).optional(),
|
|
72016
|
-
workerIdleSeconds: workerFactSchema(external_exports.number()).optional(),
|
|
72017
|
-
pending: external_exports.readonly(external_exports.array(RcPendingRequestSummarySchema))
|
|
72018
|
-
});
|
|
72019
|
-
var RcStreamEnvelopeSchema = external_exports.looseObject({
|
|
72020
|
-
/** The envelope's own event id, when the host sent one. */
|
|
72021
|
-
event_id: external_exports.string().optional(),
|
|
72022
|
-
/** The envelope's event type, the discriminator a consumer switches on (`control_request`, `user`, and kin). */
|
|
72023
|
-
event_type: external_exports.string(),
|
|
72024
|
-
/** The sequence number the host assigned, the value a resume continues after. */
|
|
72025
|
-
sequence_num: external_exports.int(),
|
|
72026
|
-
/** Who emitted the event (`worker` for the CLI's half, a client id for a client's). */
|
|
72027
|
-
source: external_exports.string(),
|
|
72028
|
-
/** The event's payload, carried verbatim: its shape is the payload family's, narrowed by whichever consumer needs it. Optional in the schema's own type because the door forwards the host's envelope as it arrived, asserting only the fields it relies on itself. */
|
|
72029
|
-
payload: external_exports.unknown().optional(),
|
|
72030
|
-
/** When the host created the event; the protocol's own type for this field is not established here, so it is forwarded rather than asserted. */
|
|
72031
|
-
created_at: external_exports.unknown().optional()
|
|
72032
|
-
});
|
|
72033
|
-
var RcStreamEventSchema = external_exports.strictObject({
|
|
72034
|
-
session: external_exports.string(),
|
|
72035
|
-
envelope: RcStreamEnvelopeSchema
|
|
72036
|
-
});
|
|
72037
|
-
var RcSessionQuerySchema = external_exports.strictObject({
|
|
72038
|
-
session: external_exports.string().min(1).optional()
|
|
72039
|
-
});
|
|
72040
|
-
var RcSendInputSchema = external_exports.strictObject({
|
|
72041
|
-
session: external_exports.string().min(1),
|
|
72042
|
-
text: external_exports.string().min(1)
|
|
72043
|
-
});
|
|
72044
|
-
var RcAnswerInputSchema = external_exports.strictObject({
|
|
72045
|
-
session: external_exports.string().min(1),
|
|
72046
|
-
request: external_exports.string().min(1),
|
|
72047
|
-
approve: external_exports.boolean(),
|
|
72048
|
-
text: external_exports.string().optional()
|
|
72049
|
-
}).refine((input2) => !input2.approve || input2.text === void 0 || input2.text === "", { message: "an approval carries no text (the protocol's allow result has no message field); text is the denial message" });
|
|
72050
|
-
var RcInterruptInputSchema = external_exports.strictObject({
|
|
72051
|
-
session: external_exports.string().min(1)
|
|
72052
|
-
});
|
|
72053
|
-
var RcSetModelInputSchema = external_exports.strictObject({
|
|
72054
|
-
session: external_exports.string().min(1),
|
|
72055
|
-
model: external_exports.string().min(1)
|
|
72056
|
-
});
|
|
72057
|
-
var RcSetPermissionModeInputSchema = external_exports.strictObject({
|
|
72058
|
-
session: external_exports.string().min(1),
|
|
72059
|
-
mode: RcPermissionModeSchema
|
|
72060
|
-
});
|
|
72061
|
-
var RcEndSessionInputSchema = external_exports.strictObject({
|
|
72062
|
-
session: external_exports.string().min(1),
|
|
72063
|
-
reason: external_exports.string().min(1).optional()
|
|
72064
|
-
});
|
|
72065
|
-
var RcGetUsageInputSchema = external_exports.strictObject({
|
|
72066
|
-
session: external_exports.string().min(1),
|
|
72067
|
-
skipBehaviors: external_exports.boolean().optional()
|
|
72068
|
-
});
|
|
72069
|
-
var RcGetContextUsageInputSchema = external_exports.strictObject({
|
|
72070
|
-
session: external_exports.string().min(1),
|
|
72071
|
-
detail: external_exports.enum(RC_CONTEXT_USAGE_DETAILS).optional()
|
|
72072
|
-
});
|
|
72073
|
-
var RcReadFileInputSchema = external_exports.strictObject({
|
|
72074
|
-
session: external_exports.string().min(1),
|
|
72075
|
-
path: external_exports.string().min(1),
|
|
72076
|
-
maxBytes: external_exports.number().int().positive().optional(),
|
|
72077
|
-
encoding: external_exports.enum(RC_READ_FILE_ENCODINGS).optional()
|
|
72078
|
-
});
|
|
72079
|
-
var RcFileSuggestionsInputSchema = external_exports.strictObject({
|
|
72080
|
-
session: external_exports.string().min(1),
|
|
72081
|
-
query: external_exports.string()
|
|
72082
|
-
});
|
|
72083
|
-
var RcKeepAliveInputSchema = external_exports.strictObject({
|
|
72084
|
-
session: external_exports.string().min(1)
|
|
72085
|
-
});
|
|
72086
|
-
var RcMcpStatusInputSchema = external_exports.strictObject({
|
|
72087
|
-
session: external_exports.string().min(1)
|
|
72088
|
-
});
|
|
72089
|
-
var RcMcpReconnectInputSchema = external_exports.strictObject({
|
|
72090
|
-
session: external_exports.string().min(1),
|
|
72091
|
-
serverName: external_exports.string().min(1)
|
|
72092
|
-
});
|
|
72093
|
-
var RcMcpAuthenticateInputSchema = external_exports.strictObject({
|
|
72094
|
-
session: external_exports.string().min(1),
|
|
72095
|
-
serverName: external_exports.string().min(1),
|
|
72096
|
-
redirectUri: external_exports.string().min(1)
|
|
72097
|
-
});
|
|
72098
|
-
var RcMcpOAuthCallbackUrlInputSchema = external_exports.strictObject({
|
|
72099
|
-
session: external_exports.string().min(1),
|
|
72100
|
-
serverName: external_exports.string().min(1),
|
|
72101
|
-
callbackUrl: external_exports.string().min(1)
|
|
72102
|
-
});
|
|
72103
|
-
var RcTeleportInputSchema = external_exports.strictObject({
|
|
72104
|
-
session: external_exports.string().min(1),
|
|
72105
|
-
marker: external_exports.string().min(1)
|
|
72106
|
-
});
|
|
72107
|
-
var RcListOutputSchema = external_exports.strictObject({ sessions: external_exports.readonly(external_exports.array(RcSessionSummarySchema)) });
|
|
72108
|
-
var RcStatusOutputSchema = external_exports.strictObject({ statuses: external_exports.readonly(external_exports.array(RcSessionStatusSchema)) });
|
|
72109
|
-
var RcPendingOutputSchema = external_exports.strictObject({ pending: external_exports.readonly(external_exports.array(RcPendingRequestSummarySchema)) });
|
|
72110
|
-
var RcWriteOutputSchema = external_exports.strictObject({
|
|
72111
|
-
session: external_exports.string(),
|
|
72112
|
-
sequenceNums: external_exports.readonly(external_exports.array(external_exports.number()))
|
|
72113
|
-
});
|
|
72114
|
-
var RcControlWriteOutputSchema = external_exports.strictObject({
|
|
72115
|
-
session: external_exports.string(),
|
|
72116
|
-
request: external_exports.string(),
|
|
72117
|
-
sequenceNums: external_exports.readonly(external_exports.array(external_exports.number()))
|
|
72118
|
-
});
|
|
72119
|
-
var RcAnswerOutputSchema = external_exports.strictObject({
|
|
72120
|
-
session: external_exports.string(),
|
|
72121
|
-
request: external_exports.string(),
|
|
72122
|
-
sequenceNums: external_exports.readonly(external_exports.array(external_exports.number()))
|
|
72123
|
-
});
|
|
72124
|
-
|
|
72125
|
-
// src/frontdoor/rcApi.ts
|
|
72126
72161
|
var RC_ORPC_PATH_PREFIX = "/__agent-shim/orpc";
|
|
72127
72162
|
var RC_SUBSCRIBER_BUFFER_EVENTS = 100;
|
|
72128
72163
|
function doorApiAuth(expectedToken) {
|
|
@@ -72334,6 +72369,16 @@ function createControlApiRouter(deps) {
|
|
|
72334
72369
|
...unified?.fiveHour === void 0 ? {} : { fiveHour: effectiveWindow(unified.fiveHour, now) },
|
|
72335
72370
|
...unified?.sevenDay === void 0 ? {} : { sevenDay: effectiveWindow(unified.sevenDay, now) }
|
|
72336
72371
|
};
|
|
72372
|
+
}),
|
|
72373
|
+
live: authed.input(RcSessionQuerySchema).output(UsageLiveOutputSchema).handler(({ input: input2 }) => {
|
|
72374
|
+
const sessions = deps.liveRateLimits(input2.session);
|
|
72375
|
+
if (input2.session !== void 0 && sessions.length === 0) {
|
|
72376
|
+
if (deps.list().some((session) => session.id === input2.session)) {
|
|
72377
|
+
throw new ORPCError("NOT_FOUND", { message: `session ${input2.session} has filed no rate_limit_event on its stream yet: the worker emits one only once a turn has completed, so retry after this session's next turn` });
|
|
72378
|
+
}
|
|
72379
|
+
throw new ORPCError("NOT_FOUND", { message: rcSessionNotObservedMessage(input2.session) });
|
|
72380
|
+
}
|
|
72381
|
+
return { latest: deps.latestRateLimit(), sessions };
|
|
72337
72382
|
})
|
|
72338
72383
|
},
|
|
72339
72384
|
frontdoor: {
|
|
@@ -73766,13 +73811,49 @@ function attachingProviderCredential(route, deps) {
|
|
|
73766
73811
|
// src/frontdoor/rcCommands.ts
|
|
73767
73812
|
var import_node_crypto14 = require("node:crypto");
|
|
73768
73813
|
|
|
73814
|
+
// src/frontdoor/rcLiveUsage.ts
|
|
73815
|
+
var RC_RATE_LIMIT_EVENT_TYPE = "rate_limit_event";
|
|
73816
|
+
function isRecord4(value2) {
|
|
73817
|
+
return typeof value2 === "object" && value2 !== null && !Array.isArray(value2);
|
|
73818
|
+
}
|
|
73819
|
+
function rcRateLimitInfoOf(event) {
|
|
73820
|
+
const payload = event.envelope.payload;
|
|
73821
|
+
if (!isRecord4(payload) || payload.type !== RC_RATE_LIMIT_EVENT_TYPE) {
|
|
73822
|
+
return void 0;
|
|
73823
|
+
}
|
|
73824
|
+
if (!isRecord4(payload.rate_limit_info)) {
|
|
73825
|
+
return void 0;
|
|
73826
|
+
}
|
|
73827
|
+
const parsed = RcRateLimitInfoSchema.safeParse(payload.rate_limit_info);
|
|
73828
|
+
return parsed.success ? parsed.data : void 0;
|
|
73829
|
+
}
|
|
73830
|
+
function createRcLiveUsage(deps) {
|
|
73831
|
+
const observed = /* @__PURE__ */ new Map();
|
|
73832
|
+
deps.hub.subscribe([DOOR_EVENT_SOURCE_RC], (event) => {
|
|
73833
|
+
const stream = RcStreamEventSchema.safeParse(event.payload);
|
|
73834
|
+
if (!stream.success) {
|
|
73835
|
+
return;
|
|
73836
|
+
}
|
|
73837
|
+
const rateLimit = rcRateLimitInfoOf(stream.data);
|
|
73838
|
+
if (rateLimit === void 0) {
|
|
73839
|
+
return;
|
|
73840
|
+
}
|
|
73841
|
+
observed.set(stream.data.session, { session: stream.data.session, observedAt: deps.now(), rateLimit });
|
|
73842
|
+
});
|
|
73843
|
+
const sorted = () => [...observed.values()].sort((left, right) => left.observedAt - right.observedAt || (left.session < right.session ? -1 : 1));
|
|
73844
|
+
return {
|
|
73845
|
+
liveOf: (sessionId) => sorted().filter((entry) => sessionId === void 0 || entry.session === sessionId),
|
|
73846
|
+
latestOf: () => sorted().at(-1)
|
|
73847
|
+
};
|
|
73848
|
+
}
|
|
73849
|
+
|
|
73769
73850
|
// src/frontdoor/rcSelfHostMint.ts
|
|
73770
73851
|
var import_node_path34 = __toESM(require("node:path"), 1);
|
|
73771
73852
|
|
|
73772
73853
|
// src/frontdoor/rcSelfHostEndpoints.ts
|
|
73773
73854
|
var RC_SOURCE_WORKER = "worker";
|
|
73774
73855
|
var RC_SOURCE_CLIENT = "client";
|
|
73775
|
-
function
|
|
73856
|
+
function isRecord5(value2) {
|
|
73776
73857
|
return typeof value2 === "object" && value2 !== null && !Array.isArray(value2);
|
|
73777
73858
|
}
|
|
73778
73859
|
function parseJsonObject2(body) {
|
|
@@ -73782,7 +73863,7 @@ function parseJsonObject2(body) {
|
|
|
73782
73863
|
} catch {
|
|
73783
73864
|
return void 0;
|
|
73784
73865
|
}
|
|
73785
|
-
return
|
|
73866
|
+
return isRecord5(parsed) ? parsed : void 0;
|
|
73786
73867
|
}
|
|
73787
73868
|
function nonEmptyString2(record2, field) {
|
|
73788
73869
|
const value2 = record2 === void 0 ? void 0 : record2[field];
|
|
@@ -73856,7 +73937,7 @@ async function serveRcClientChannels(ctx, tail, method, maxBatchEvents) {
|
|
|
73856
73937
|
}
|
|
73857
73938
|
const results = [];
|
|
73858
73939
|
for (const event of events) {
|
|
73859
|
-
if (!
|
|
73940
|
+
if (!isRecord5(event) || !isRecord5(event.payload)) {
|
|
73860
73941
|
await ctx.answerJson(response, HTTP_STATUS.badRequest, { type: "error", error: { type: "invalid_request_error", message: "every event in a teleport write is an object carrying one payload object" } });
|
|
73861
73942
|
return true;
|
|
73862
73943
|
}
|
|
@@ -74226,7 +74307,7 @@ var RC_SELF_HOST_WORKER_EPOCH = 1;
|
|
|
74226
74307
|
var RC_STREAM_EVENT_NAME = "client_event";
|
|
74227
74308
|
var CONFLICT_REASON_HEADER2 = "x-ccr-conflict-reason";
|
|
74228
74309
|
var CONFLICT_REASON_EPOCH_STALE = "epoch_stale";
|
|
74229
|
-
function
|
|
74310
|
+
function isRecord6(value2) {
|
|
74230
74311
|
return typeof value2 === "object" && value2 !== null && !Array.isArray(value2);
|
|
74231
74312
|
}
|
|
74232
74313
|
function isWebSearchRefusal(value2) {
|
|
@@ -74310,7 +74391,7 @@ function parseJsonObject3(body) {
|
|
|
74310
74391
|
} catch {
|
|
74311
74392
|
return void 0;
|
|
74312
74393
|
}
|
|
74313
|
-
return
|
|
74394
|
+
return isRecord6(parsed) ? parsed : void 0;
|
|
74314
74395
|
}
|
|
74315
74396
|
function mintWorkerJwt(randomToken, issuedAt) {
|
|
74316
74397
|
const encode3 = (value2) => Buffer.from(JSON.stringify(value2), "utf8").toString("base64url");
|
|
@@ -74557,7 +74638,7 @@ data: ${JSON.stringify(envelope)}
|
|
|
74557
74638
|
if (status !== void 0) {
|
|
74558
74639
|
session.workerStatus = status;
|
|
74559
74640
|
}
|
|
74560
|
-
if (
|
|
74641
|
+
if (isRecord6(body?.external_metadata)) {
|
|
74561
74642
|
session.externalMetadata = body.external_metadata;
|
|
74562
74643
|
}
|
|
74563
74644
|
await answerJson2(response, HTTP_STATUS.ok, {});
|
|
@@ -74587,7 +74668,7 @@ data: ${JSON.stringify(envelope)}
|
|
|
74587
74668
|
}
|
|
74588
74669
|
const results = [];
|
|
74589
74670
|
for (const event of events) {
|
|
74590
|
-
if (!
|
|
74671
|
+
if (!isRecord6(event) || !isRecord6(event.payload)) {
|
|
74591
74672
|
await answerJson2(response, HTTP_STATUS.badRequest, { type: "error", error: { type: "invalid_request_error", message: "every event in a batch is an object carrying one payload object" } });
|
|
74592
74673
|
return;
|
|
74593
74674
|
}
|
|
@@ -74620,7 +74701,7 @@ data: ${JSON.stringify(envelope)}
|
|
|
74620
74701
|
return;
|
|
74621
74702
|
}
|
|
74622
74703
|
for (const event of events) {
|
|
74623
|
-
if (
|
|
74704
|
+
if (isRecord6(event)) {
|
|
74624
74705
|
session.internalEvents.push({ eventId: deps.newUuid(), body: event });
|
|
74625
74706
|
}
|
|
74626
74707
|
}
|
|
@@ -74716,7 +74797,7 @@ data: ${JSON.stringify(envelope)}
|
|
|
74716
74797
|
}
|
|
74717
74798
|
const results = [];
|
|
74718
74799
|
for (const event of events) {
|
|
74719
|
-
if (!
|
|
74800
|
+
if (!isRecord6(event) || !isRecord6(event.payload)) {
|
|
74720
74801
|
await answerJson2(response, HTTP_STATUS.badRequest, { type: "error", error: { type: "invalid_request_error", message: "every event in a write is an object carrying one payload object" } });
|
|
74721
74802
|
return;
|
|
74722
74803
|
}
|
|
@@ -74909,7 +74990,7 @@ var RC_SELF_HOST_RECORD_DIR = "rc-selfhost";
|
|
|
74909
74990
|
var RC_SELF_HOST_RECORD_FILE = "credential.json";
|
|
74910
74991
|
var SELF_HOST_EMAIL = "selfhost@agent-shim.invalid";
|
|
74911
74992
|
var SELF_HOST_SUBSCRIPTION_TYPE = "max";
|
|
74912
|
-
function
|
|
74993
|
+
function isRecord7(value2) {
|
|
74913
74994
|
return typeof value2 === "object" && value2 !== null && !Array.isArray(value2);
|
|
74914
74995
|
}
|
|
74915
74996
|
function readJsonObject(fs20, file2) {
|
|
@@ -74923,7 +75004,7 @@ function readJsonObject(fs20, file2) {
|
|
|
74923
75004
|
} catch {
|
|
74924
75005
|
return void 0;
|
|
74925
75006
|
}
|
|
74926
|
-
return
|
|
75007
|
+
return isRecord7(parsed) ? parsed : void 0;
|
|
74927
75008
|
}
|
|
74928
75009
|
function readRcSelfHostRecord(fs20, frontdoorDir) {
|
|
74929
75010
|
const parsed = readJsonObject(fs20, import_node_path34.default.join(frontdoorDir, RC_SELF_HOST_RECORD_DIR, RC_SELF_HOST_RECORD_FILE));
|
|
@@ -74947,7 +75028,7 @@ function mintRcSelfHostCredential(deps) {
|
|
|
74947
75028
|
const recordFile = import_node_path34.default.join(recordDir, RC_SELF_HOST_RECORD_FILE);
|
|
74948
75029
|
const previousRecord = readRcSelfHostRecord(deps.fs, deps.frontdoorDir);
|
|
74949
75030
|
const existingCredentials = readJsonObject(deps.fs, credentialsFile);
|
|
74950
|
-
const existingOauth =
|
|
75031
|
+
const existingOauth = isRecord7(existingCredentials?.claudeAiOauth) ? existingCredentials.claudeAiOauth : void 0;
|
|
74951
75032
|
const existingToken = typeof existingOauth?.accessToken === "string" && existingOauth.accessToken !== "" ? existingOauth.accessToken : void 0;
|
|
74952
75033
|
const existingIsOwn = existingToken !== void 0 && previousRecord?.accessToken === existingToken;
|
|
74953
75034
|
if (existingToken !== void 0 && !existingIsOwn && !deps.force) {
|
|
@@ -74964,7 +75045,7 @@ function mintRcSelfHostCredential(deps) {
|
|
|
74964
75045
|
deps.fs.writeFilePrivate(credentialsFile, `${JSON.stringify({ ...existingCredentials, claudeAiOauth: { accessToken, refreshToken, expiresAt: null, scopes: [...RC_SELF_HOST_SCOPE_LIST], subscriptionType: SELF_HOST_SUBSCRIPTION_TYPE, rateLimitTier: null } }, null, 2)}
|
|
74965
75046
|
`);
|
|
74966
75047
|
const claudeJson = readJsonObject(deps.fs, claudeJsonFile) ?? {};
|
|
74967
|
-
const existingBlock = (value2) =>
|
|
75048
|
+
const existingBlock = (value2) => isRecord7(value2) ? value2 : {};
|
|
74968
75049
|
deps.fs.writeFilePrivate(claudeJsonFile, `${JSON.stringify({
|
|
74969
75050
|
...claudeJson,
|
|
74970
75051
|
oauthAccount: {
|
|
@@ -75042,9 +75123,54 @@ function formatRcPendingList(pending) {
|
|
|
75042
75123
|
function eventExcerpt(text2) {
|
|
75043
75124
|
return text2.length <= RC_PENDING_SUMMARY_EXCERPT_CHARS ? text2 : `${text2.slice(0, RC_PENDING_SUMMARY_EXCERPT_CHARS)}...`;
|
|
75044
75125
|
}
|
|
75126
|
+
var PERCENT_SCALE = 100;
|
|
75127
|
+
var MS_PER_SECOND8 = 1e3;
|
|
75128
|
+
function percentOf(fraction) {
|
|
75129
|
+
return `${String(Math.round(fraction * PERCENT_SCALE))}%`;
|
|
75130
|
+
}
|
|
75131
|
+
function resetInstantOf(epochSeconds) {
|
|
75132
|
+
return new Date(epochSeconds * MS_PER_SECOND8).toISOString();
|
|
75133
|
+
}
|
|
75134
|
+
function formatRcRateLimitInfo(info) {
|
|
75135
|
+
const parts = [info.status];
|
|
75136
|
+
if (info.rateLimitType !== void 0) {
|
|
75137
|
+
parts.push(info.rateLimitType);
|
|
75138
|
+
}
|
|
75139
|
+
if (info.utilization !== void 0) {
|
|
75140
|
+
parts.push(percentOf(info.utilization));
|
|
75141
|
+
}
|
|
75142
|
+
if (info.resetsAt !== void 0) {
|
|
75143
|
+
parts.push(`resets ${resetInstantOf(info.resetsAt)}`);
|
|
75144
|
+
}
|
|
75145
|
+
const windows = [];
|
|
75146
|
+
for (const name of ["five_hour", "seven_day", "seven_day_overage_included"]) {
|
|
75147
|
+
const window = info.unifiedWindows?.[name];
|
|
75148
|
+
if (window === void 0) {
|
|
75149
|
+
continue;
|
|
75150
|
+
}
|
|
75151
|
+
const bits = [];
|
|
75152
|
+
if (window.utilization !== void 0) {
|
|
75153
|
+
bits.push(percentOf(window.utilization));
|
|
75154
|
+
}
|
|
75155
|
+
if (window.resetsAt !== void 0) {
|
|
75156
|
+
bits.push(`resets ${resetInstantOf(window.resetsAt)}`);
|
|
75157
|
+
}
|
|
75158
|
+
windows.push(bits.length === 0 ? name : `${name} ${bits.join(" ")}`);
|
|
75159
|
+
}
|
|
75160
|
+
if (windows.length > 0) {
|
|
75161
|
+
parts.push(`windows ${windows.join(", ")}`);
|
|
75162
|
+
}
|
|
75163
|
+
if (info.isUsingOverage === true) {
|
|
75164
|
+
parts.push("overage in use");
|
|
75165
|
+
} else if (info.overageStatus !== void 0) {
|
|
75166
|
+
parts.push(`overage ${info.overageStatus}`);
|
|
75167
|
+
}
|
|
75168
|
+
return parts.join(" ");
|
|
75169
|
+
}
|
|
75045
75170
|
function formatRcStreamEvent(event) {
|
|
75046
75171
|
const { envelope } = event;
|
|
75047
|
-
const
|
|
75172
|
+
const rateLimit = rcRateLimitInfoOf(event);
|
|
75173
|
+
const sketch = rateLimit !== void 0 ? ` ${formatRcRateLimitInfo(rateLimit)}` : envelope.payload === void 0 ? "" : ` ${eventExcerpt(JSON.stringify(envelope.payload))}`;
|
|
75048
75174
|
return `${event.session} ${envelope.event_type} sequence_num ${String(envelope.sequence_num)} source ${envelope.source}${sketch}`;
|
|
75049
75175
|
}
|
|
75050
75176
|
function formatRcSelfHostMint(result) {
|
|
@@ -75270,7 +75396,7 @@ function registerRcCommand(frontdoor, paths) {
|
|
|
75270
75396
|
['agent-shim frontdoor rc teleport --session cse_00000000-0000-4000-8000-000000000000 --marker "__ULTRAPAN_TELEPORT_LOCAL__"']
|
|
75271
75397
|
);
|
|
75272
75398
|
withExamples(
|
|
75273
|
-
rc.command("watch").description("Print the observed sessions' client read stream events as they arrive, the approvals the door's held stream receives above all, until Ctrl-C leaves.
|
|
75399
|
+
rc.command("watch").description("Print the observed sessions' client read stream events as they arrive, the approvals the door's held stream receives above all, with each rate_limit_event rendered as the account's quota state. Read-only, until Ctrl-C leaves.").argument("[session]", "One cse_ session id, as `frontdoor rc list` shows it; every observed session when omitted.").option("--json", "Print each event as one JSON line as it arrives.").action(async (session, options) => {
|
|
75274
75400
|
const client = frontDoorRcApiFromState(realFarmFs, paths);
|
|
75275
75401
|
const leave = new AbortController();
|
|
75276
75402
|
const onInterrupt = () => {
|
|
@@ -75328,11 +75454,11 @@ var import_node_path35 = __toESM(require("node:path"), 1);
|
|
|
75328
75454
|
function isSafeSessionId(sessionId) {
|
|
75329
75455
|
return /^[A-Za-z0-9_-]+$/.test(sessionId);
|
|
75330
75456
|
}
|
|
75331
|
-
function
|
|
75457
|
+
function isRecord8(value2) {
|
|
75332
75458
|
return typeof value2 === "object" && value2 !== null && !Array.isArray(value2);
|
|
75333
75459
|
}
|
|
75334
75460
|
function credentialOfJson(parsed) {
|
|
75335
|
-
if (!
|
|
75461
|
+
if (!isRecord8(parsed)) {
|
|
75336
75462
|
return void 0;
|
|
75337
75463
|
}
|
|
75338
75464
|
const { authorization, anthropicVersion, anthropicClientPlatform } = parsed;
|
|
@@ -75362,7 +75488,7 @@ function createRcCredentialStore(fs20, dir) {
|
|
|
75362
75488
|
} catch {
|
|
75363
75489
|
return void 0;
|
|
75364
75490
|
}
|
|
75365
|
-
return
|
|
75491
|
+
return isRecord8(parsed) ? parsed : void 0;
|
|
75366
75492
|
};
|
|
75367
75493
|
return {
|
|
75368
75494
|
read: (sessionId) => {
|
|
@@ -75476,12 +75602,61 @@ function sketch(value, cap) {
|
|
|
75476
75602
|
return text.length > cap ? text.slice(0, cap) + '...' : text;
|
|
75477
75603
|
}
|
|
75478
75604
|
|
|
75479
|
-
//
|
|
75605
|
+
// One utilization fraction as a whole percentage, the same rounding the CLI's own watch line applies.
|
|
75606
|
+
function percentOf(fraction) { return String(Math.round(fraction * 100)) + '%'; }
|
|
75607
|
+
|
|
75608
|
+
// The reset instant a rate-limit payload states (unix epoch seconds) as an ISO instant; no countdown is derived from it, because a ticking derivation would claim a freshness the event stream never promised.
|
|
75609
|
+
function resetInstantOf(epochSeconds) { return new Date(epochSeconds * 1000).toISOString(); }
|
|
75610
|
+
|
|
75611
|
+
// Whether one rate-limit payload is readable, narrowed the same way the door's live usage state narrows it: the event type and a rate_limit_info object.
|
|
75612
|
+
function rateLimitInfoOf(payload) {
|
|
75613
|
+
if (payload === undefined || payload === null || typeof payload !== 'object' || payload.type !== 'rate_limit_event') { return undefined; }
|
|
75614
|
+
var info = payload.rate_limit_info;
|
|
75615
|
+
if (info === undefined || info === null || typeof info !== 'object' || typeof info.status !== 'string') { return undefined; }
|
|
75616
|
+
return info;
|
|
75617
|
+
}
|
|
75618
|
+
|
|
75619
|
+
// One rate-limit payload's facts as the quota summary the feed and the header render: the limiting window's status and utilisation, each subscription window, and the overage state, every value the payload's own words.
|
|
75620
|
+
function quotaSummary(info) {
|
|
75621
|
+
var parts = [info.status];
|
|
75622
|
+
if (info.rateLimitType !== undefined) { parts.push(info.rateLimitType); }
|
|
75623
|
+
if (typeof info.utilization === 'number') { parts.push(percentOf(info.utilization)); }
|
|
75624
|
+
if (typeof info.resetsAt === 'number') { parts.push('resets ' + resetInstantOf(info.resetsAt)); }
|
|
75625
|
+
if (info.unifiedWindows !== undefined && info.unifiedWindows !== null && typeof info.unifiedWindows === 'object') {
|
|
75626
|
+
var names = ['five_hour', 'seven_day', 'seven_day_overage_included'];
|
|
75627
|
+
var windows = [];
|
|
75628
|
+
for (var i = 0; i < names.length; i++) {
|
|
75629
|
+
var window = info.unifiedWindows[names[i]];
|
|
75630
|
+
if (window === undefined || window === null) { continue; }
|
|
75631
|
+
var bits = [];
|
|
75632
|
+
if (typeof window.utilization === 'number') { bits.push(percentOf(window.utilization)); }
|
|
75633
|
+
if (typeof window.resetsAt === 'number') { bits.push('resets ' + resetInstantOf(window.resetsAt)); }
|
|
75634
|
+
windows.push(bits.length === 0 ? names[i] : names[i] + ' ' + bits.join(' '));
|
|
75635
|
+
}
|
|
75636
|
+
if (windows.length > 0) { parts.push('windows ' + windows.join(', ')); }
|
|
75637
|
+
}
|
|
75638
|
+
if (info.isUsingOverage === true) { parts.push('overage in use'); }
|
|
75639
|
+
else if (typeof info.overageStatus === 'string') { parts.push('overage ' + info.overageStatus); }
|
|
75640
|
+
return parts.join(' ');
|
|
75641
|
+
}
|
|
75642
|
+
|
|
75643
|
+
// The header's quota text from the door's freshest live observation: the quota summary plus when the door observed it, or the plain statement that none has arrived yet.
|
|
75644
|
+
function quotaText(latest) {
|
|
75645
|
+
if (latest === undefined || latest === null) { return 'quota: not observed yet'; }
|
|
75646
|
+
var info = rateLimitInfoOf({ type: 'rate_limit_event', rate_limit_info: latest.rateLimit });
|
|
75647
|
+
if (info === undefined) { return 'quota: not readable'; }
|
|
75648
|
+
return 'quota: ' + quotaSummary(info) + ' observed ' + new Date(latest.observedAt).toLocaleTimeString();
|
|
75649
|
+
}
|
|
75650
|
+
|
|
75651
|
+
// The headline text of one Remote Control stream event: a rate-limit payload renders as its quota summary, the assistant and user payloads that carry a content array of text blocks render as their prose, everything else as its type plus a sketch.
|
|
75480
75652
|
function rcLine(event) {
|
|
75481
75653
|
var envelope = event.envelope;
|
|
75482
75654
|
var payload = envelope.payload;
|
|
75483
75655
|
var headline = '';
|
|
75484
|
-
|
|
75656
|
+
var rateLimit = rateLimitInfoOf(payload);
|
|
75657
|
+
if (rateLimit !== undefined) {
|
|
75658
|
+
headline = quotaSummary(rateLimit);
|
|
75659
|
+
} else if (payload !== undefined && payload !== null && typeof payload === 'object' && Array.isArray(payload.content)) {
|
|
75485
75660
|
var parts = [];
|
|
75486
75661
|
for (var i = 0; i < payload.content.length; i++) {
|
|
75487
75662
|
var block = payload.content[i];
|
|
@@ -75610,6 +75785,13 @@ function refreshPending() {
|
|
|
75610
75785
|
rpc('rc/pending', ui !== null && ui.selected !== null ? { session: ui.selected } : {}).then(function (result) { renderPending(result.pending); }, authOrReport('rc/pending'));
|
|
75611
75786
|
}
|
|
75612
75787
|
|
|
75788
|
+
// The header's quota span, fed by the door's live read on the same refresh cycle as the session and pending lists: the freshest rate-limit observation any session's stream has filed, with its observation time so its freshness reads at a glance.
|
|
75789
|
+
function refreshQuota() {
|
|
75790
|
+
rpc('usage/live', {}).then(function (result) {
|
|
75791
|
+
if (ui !== null) { ui.quotaState.textContent = quotaText(result.latest); }
|
|
75792
|
+
}, authOrReport('usage/live'));
|
|
75793
|
+
}
|
|
75794
|
+
|
|
75613
75795
|
// The one error path every call shares: a 401 means this token is not this generation's, so the page says so and asks for it again; anything else is reported in the feed.
|
|
75614
75796
|
function authOrReport(what) {
|
|
75615
75797
|
return function (error) {
|
|
@@ -75697,11 +75879,12 @@ function startPage(heldToken) {
|
|
|
75697
75879
|
promptTarget: document.getElementById('prompt-target'),
|
|
75698
75880
|
send: document.getElementById('send'),
|
|
75699
75881
|
streamState: document.getElementById('stream-state'),
|
|
75882
|
+
quotaState: document.getElementById('quota-state'),
|
|
75700
75883
|
selected: null,
|
|
75701
75884
|
};
|
|
75702
75885
|
document.getElementById('token-form').classList.add('hidden');
|
|
75703
75886
|
ui.main.classList.remove('hidden');
|
|
75704
|
-
document.getElementById('refresh').addEventListener('click', function () { refreshSessions(); refreshPending(); });
|
|
75887
|
+
document.getElementById('refresh').addEventListener('click', function () { refreshSessions(); refreshPending(); refreshQuota(); });
|
|
75705
75888
|
document.getElementById('send').addEventListener('click', sendPrompt);
|
|
75706
75889
|
document.getElementById('source-filter').addEventListener('change', function () { runFeed(); });
|
|
75707
75890
|
ui.prompt.addEventListener('keydown', function (event) {
|
|
@@ -75709,7 +75892,8 @@ function startPage(heldToken) {
|
|
|
75709
75892
|
});
|
|
75710
75893
|
refreshSessions();
|
|
75711
75894
|
refreshPending();
|
|
75712
|
-
|
|
75895
|
+
refreshQuota();
|
|
75896
|
+
window.setInterval(function () { refreshSessions(); refreshPending(); refreshQuota(); }, 4000);
|
|
75713
75897
|
runFeed();
|
|
75714
75898
|
document.getElementById('door-state').textContent = 'connected';
|
|
75715
75899
|
}
|
|
@@ -75788,6 +75972,7 @@ var RC_CLIENT_PAGE_HTML = `<!doctype html>
|
|
|
75788
75972
|
<h1>agent-shim Remote Control</h1>
|
|
75789
75973
|
<span class="state" id="door-state">connecting</span>
|
|
75790
75974
|
<span class="state" id="stream-state"></span>
|
|
75975
|
+
<span class="state" id="quota-state">quota: not observed yet</span>
|
|
75791
75976
|
</header>
|
|
75792
75977
|
<div id="token-form">
|
|
75793
75978
|
<h2>This door's control token</h2>
|
|
@@ -75926,7 +76111,7 @@ function createSseParser() {
|
|
|
75926
76111
|
}
|
|
75927
76112
|
};
|
|
75928
76113
|
}
|
|
75929
|
-
function
|
|
76114
|
+
function isRecord9(value2) {
|
|
75930
76115
|
return typeof value2 === "object" && value2 !== null && !Array.isArray(value2);
|
|
75931
76116
|
}
|
|
75932
76117
|
function sequenceNumOf(value2) {
|
|
@@ -75948,7 +76133,7 @@ function parseRcStreamEnvelope(parsed) {
|
|
|
75948
76133
|
} catch {
|
|
75949
76134
|
return void 0;
|
|
75950
76135
|
}
|
|
75951
|
-
if (!
|
|
76136
|
+
if (!isRecord9(data)) {
|
|
75952
76137
|
return void 0;
|
|
75953
76138
|
}
|
|
75954
76139
|
const eventType = data.event_type;
|
|
@@ -76236,7 +76421,7 @@ var ProviderQuotaError = class extends Error {
|
|
|
76236
76421
|
this.name = "ProviderQuotaError";
|
|
76237
76422
|
}
|
|
76238
76423
|
};
|
|
76239
|
-
var
|
|
76424
|
+
var MS_PER_SECOND9 = 1e3;
|
|
76240
76425
|
var SECONDS_PER_HOUR = 3600;
|
|
76241
76426
|
var HOURS_PER_DAY3 = 24;
|
|
76242
76427
|
var DAYS_PER_MONTH = 30;
|
|
@@ -76248,8 +76433,8 @@ var ZAI_QUOTA_URL = `https://${ZAI_HOST}/api/monitor/usage/quota/limit`;
|
|
|
76248
76433
|
var ZAI_UNIT_HOURS = 3;
|
|
76249
76434
|
var ZAI_UNIT_MONTHS = 5;
|
|
76250
76435
|
var ZAI_UNIT_MS = /* @__PURE__ */ new Map([
|
|
76251
|
-
[ZAI_UNIT_HOURS, SECONDS_PER_HOUR *
|
|
76252
|
-
[ZAI_UNIT_MONTHS, DAYS_PER_MONTH * HOURS_PER_DAY3 * SECONDS_PER_HOUR *
|
|
76436
|
+
[ZAI_UNIT_HOURS, SECONDS_PER_HOUR * MS_PER_SECOND9],
|
|
76437
|
+
[ZAI_UNIT_MONTHS, DAYS_PER_MONTH * HOURS_PER_DAY3 * SECONDS_PER_HOUR * MS_PER_SECOND9]
|
|
76253
76438
|
]);
|
|
76254
76439
|
var ZAI_MEASURES = { TOKENS_LIMIT: "tokens", TIME_LIMIT: "tool-calls" };
|
|
76255
76440
|
var ZaiLimitSchema = external_exports.object({
|
|
@@ -76313,7 +76498,7 @@ var OPENROUTER_HOST = "openrouter.ai";
|
|
|
76313
76498
|
var OPENROUTER_KEY_URL = `https://${OPENROUTER_HOST}/api/v1/key`;
|
|
76314
76499
|
var OPENROUTER_CREDITS_URL = `https://${OPENROUTER_HOST}/api/v1/credits`;
|
|
76315
76500
|
var HTTP_FORBIDDEN = 403;
|
|
76316
|
-
var MS_PER_DAY2 = HOURS_PER_DAY3 * SECONDS_PER_HOUR *
|
|
76501
|
+
var MS_PER_DAY2 = HOURS_PER_DAY3 * SECONDS_PER_HOUR * MS_PER_SECOND9;
|
|
76317
76502
|
var OpenRouterKeySchema = external_exports.object({
|
|
76318
76503
|
data: external_exports.object({
|
|
76319
76504
|
limit: external_exports.number().nonnegative().nullable(),
|
|
@@ -76556,6 +76741,7 @@ function realFrontDoorSupervisorPorts(paths) {
|
|
|
76556
76741
|
const rcCredentialStore = createRcCredentialStore(realFarmFs, paths.frontdoorRcCredentialsDir);
|
|
76557
76742
|
const rcTracker = createRcSessionTracker({ now: () => Date.now(), idleMs: RC_IDLE_EXPIRY_MS, credentialStore: rcCredentialStore });
|
|
76558
76743
|
const doorEvents = createDoorEventHub();
|
|
76744
|
+
const rcLiveUsage = createRcLiveUsage({ now: () => Date.now(), hub: doorEvents });
|
|
76559
76745
|
const rcFanout = rcFanoutOnDoorHub(createRcEventFanout(), doorEvents);
|
|
76560
76746
|
const rcHub = createRcStreamHub({
|
|
76561
76747
|
now: () => Date.now(),
|
|
@@ -76658,6 +76844,9 @@ function realFrontDoorSupervisorPorts(paths) {
|
|
|
76658
76844
|
const rcMcpOAuthCallbackUrl = async (sessionId, serverName, callbackUrl) => await submitRcSessionMcpOAuthCallbackUrl(rcControlRequestDeps, sessionId, serverName, callbackUrl);
|
|
76659
76845
|
const rcTeleport = async (sessionId, marker) => await teleportRcSession(rcControlRequestDeps, sessionId, marker);
|
|
76660
76846
|
const controlDeps = {
|
|
76847
|
+
list: rcTracker.list,
|
|
76848
|
+
liveRateLimits: rcLiveUsage.liveOf,
|
|
76849
|
+
latestRateLimit: rcLiveUsage.latestOf,
|
|
76661
76850
|
usageSnapshots: () => listUsageSnapshots(realFarmFs, paths.usageSnapshotsDir),
|
|
76662
76851
|
usageSnapshotOf: (identity) => readUsageSnapshot(realFarmFs, paths.usageSnapshotsDir, identity),
|
|
76663
76852
|
now: () => Date.now(),
|
|
@@ -76678,7 +76867,6 @@ function realFrontDoorSupervisorPorts(paths) {
|
|
|
76678
76867
|
[
|
|
76679
76868
|
createDoorApiNodeHandler({
|
|
76680
76869
|
expectedToken: rcControlToken,
|
|
76681
|
-
list: rcTracker.list,
|
|
76682
76870
|
statusOf: rcTracker.statusOf,
|
|
76683
76871
|
pendingOf: rcTracker.pendingOf,
|
|
76684
76872
|
inject: rcInject,
|