clanka 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/Agent.d.ts +45 -19
  2. package/dist/Agent.d.ts.map +1 -1
  3. package/dist/Agent.js +172 -66
  4. package/dist/Agent.js.map +1 -1
  5. package/dist/Codex.d.ts +6 -1
  6. package/dist/Codex.d.ts.map +1 -1
  7. package/dist/Codex.js +16 -3
  8. package/dist/Codex.js.map +1 -1
  9. package/dist/GithubCopilot.d.ts +11 -0
  10. package/dist/GithubCopilot.d.ts.map +1 -0
  11. package/dist/GithubCopilot.js +14 -0
  12. package/dist/GithubCopilot.js.map +1 -0
  13. package/dist/GithubCopilotAuth.d.ts +57 -0
  14. package/dist/GithubCopilotAuth.d.ts.map +1 -0
  15. package/dist/GithubCopilotAuth.js +218 -0
  16. package/dist/GithubCopilotAuth.js.map +1 -0
  17. package/dist/GithubCopilotAuth.test.d.ts +2 -0
  18. package/dist/GithubCopilotAuth.test.d.ts.map +1 -0
  19. package/dist/GithubCopilotAuth.test.js +267 -0
  20. package/dist/GithubCopilotAuth.test.js.map +1 -0
  21. package/dist/OutputFormatter.d.ts +2 -1
  22. package/dist/OutputFormatter.d.ts.map +1 -1
  23. package/dist/OutputFormatter.js +8 -2
  24. package/dist/OutputFormatter.js.map +1 -1
  25. package/dist/ScriptExtraction.d.ts +34 -0
  26. package/dist/ScriptExtraction.d.ts.map +1 -0
  27. package/dist/ScriptExtraction.js +68 -0
  28. package/dist/ScriptExtraction.js.map +1 -0
  29. package/dist/ScriptExtraction.test.d.ts +2 -0
  30. package/dist/ScriptExtraction.test.d.ts.map +1 -0
  31. package/dist/ScriptExtraction.test.js +64 -0
  32. package/dist/ScriptExtraction.test.js.map +1 -0
  33. package/dist/index.d.ts +4 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +4 -0
  36. package/dist/index.js.map +1 -1
  37. package/package.json +3 -1
  38. package/src/Agent.ts +247 -87
  39. package/src/Codex.ts +18 -3
  40. package/src/GithubCopilot.ts +14 -0
  41. package/src/GithubCopilotAuth.test.ts +469 -0
  42. package/src/GithubCopilotAuth.ts +441 -0
  43. package/src/OutputFormatter.ts +11 -4
  44. package/src/ScriptExtraction.test.ts +96 -0
  45. package/src/ScriptExtraction.ts +75 -0
  46. package/src/index.ts +5 -0
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import { Effect, Layer, Schema, ServiceMap } from "effect";
5
+ import { HttpClient } from "effect/unstable/http";
6
+ import { KeyValueStore } from "effect/unstable/persistence";
7
+ export declare const CLIENT_ID = "Ov23li8tweQw6odWQebz";
8
+ export declare const ISSUER = "https://github.com";
9
+ export declare const API_URL = "https://api.githubcopilot.com";
10
+ export declare const DEVICE_VERIFICATION_URL = "https://github.com/login/device";
11
+ export declare const OAUTH_POLLING_SAFETY_MARGIN_MS = 3000;
12
+ export declare const STORE_PREFIX = "github-copilot.auth/";
13
+ export declare const STORE_TOKEN_KEY = "token";
14
+ export declare const OPENAI_INTENT_HEADER = "Openai-Intent";
15
+ export declare const COPILOT_VISION_REQUEST_HEADER = "Copilot-Vision-Request";
16
+ export declare const INITIATOR_HEADER = "x-initiator";
17
+ export declare const DEFAULT_OPENAI_INTENT = "conversation-edits";
18
+ export declare const DEFAULT_USER_AGENT = "clanka";
19
+ declare const TokenData_base: Schema.ExtendableClass<TokenData, Schema.Struct<{
20
+ readonly access: Schema.String;
21
+ readonly expires: Schema.Number;
22
+ }>, {}>;
23
+ export declare class TokenData extends TokenData_base {
24
+ isExpired(): boolean;
25
+ }
26
+ declare const GithubCopilotAuthError_base: Schema.ErrorClass<GithubCopilotAuthError, Schema.TaggedStruct<"GithubCopilotAuthError", {
27
+ readonly reason: Schema.Literal<"DeviceFlowFailed">;
28
+ readonly message: Schema.String;
29
+ readonly cause: Schema.optional<Schema.Defect>;
30
+ }>, import("effect/Cause").YieldableError>;
31
+ export declare class GithubCopilotAuthError extends GithubCopilotAuthError_base {
32
+ }
33
+ export interface DeviceCodeData {
34
+ readonly deviceCode: string;
35
+ readonly userCode: string;
36
+ readonly verificationUri: string;
37
+ readonly intervalMs: number;
38
+ }
39
+ export declare const toGithubCopilotAuthKeyValueStore: (store: KeyValueStore.KeyValueStore) => KeyValueStore.KeyValueStore;
40
+ export declare const toTokenStore: (store: KeyValueStore.KeyValueStore) => KeyValueStore.SchemaStore<typeof TokenData>;
41
+ declare const GithubCopilotAuth_base: ServiceMap.ServiceClass<GithubCopilotAuth, "clanka/GithubCopilotAuth", {
42
+ readonly get: Effect.Effect<TokenData, GithubCopilotAuthError>;
43
+ readonly authenticate: Effect.Effect<TokenData, GithubCopilotAuthError>;
44
+ readonly logout: Effect.Effect<void>;
45
+ }>;
46
+ export declare class GithubCopilotAuth extends GithubCopilotAuth_base {
47
+ static readonly make: Effect.Effect<{
48
+ readonly get: Effect.Effect<TokenData, GithubCopilotAuthError>;
49
+ readonly authenticate: Effect.Effect<TokenData, GithubCopilotAuthError>;
50
+ readonly logout: Effect.Effect<void>;
51
+ }, never, HttpClient.HttpClient | KeyValueStore.KeyValueStore>;
52
+ static readonly layer: Layer.Layer<GithubCopilotAuth, never, HttpClient.HttpClient | KeyValueStore.KeyValueStore>;
53
+ static readonly layerClientNoDeps: Layer.Layer<HttpClient.HttpClient, never, HttpClient.HttpClient | GithubCopilotAuth>;
54
+ static readonly layerClient: Layer.Layer<HttpClient.HttpClient, never, HttpClient.HttpClient | KeyValueStore.KeyValueStore>;
55
+ }
56
+ export {};
57
+ //# sourceMappingURL=GithubCopilotAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GithubCopilotAuth.d.ts","sourceRoot":"","sources":["../src/GithubCopilotAuth.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAEL,MAAM,EAEN,KAAK,EAGL,MAAM,EAEN,UAAU,EACX,MAAM,QAAQ,CAAA;AACf,OAAO,EACL,UAAU,EAGX,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D,eAAO,MAAM,SAAS,yBAAyB,CAAA;AAC/C,eAAO,MAAM,MAAM,uBAAuB,CAAA;AAC1C,eAAO,MAAM,OAAO,kCAAkC,CAAA;AACtD,eAAO,MAAM,uBAAuB,oCAA2B,CAAA;AAC/D,eAAO,MAAM,8BAA8B,OAAO,CAAA;AAClD,eAAO,MAAM,YAAY,yBAAyB,CAAA;AAClD,eAAO,MAAM,eAAe,UAAU,CAAA;AACtC,eAAO,MAAM,oBAAoB,kBAAkB,CAAA;AACnD,eAAO,MAAM,6BAA6B,2BAA2B,CAAA;AACrE,eAAO,MAAM,gBAAgB,gBAAgB,CAAA;AAC7C,eAAO,MAAM,qBAAqB,uBAAuB,CAAA;AACzD,eAAO,MAAM,kBAAkB,WAAW,CAAA;;;;;AAM1C,qBAAa,SAAU,SAAQ,cAK7B;IACA,SAAS,IAAI,OAAO;CAGrB;;;;;;AAED,qBAAa,sBAAuB,SAAQ,2BAO3C;CAAG;AAeJ,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAqID,eAAO,MAAM,gCAAgC,GAC3C,OAAO,aAAa,CAAC,aAAa,gCACU,CAAA;AAE9C,eAAO,MAAM,YAAY,GAAI,OAAO,aAAa,CAAC,aAAa,gDAI5D,CAAA;;kBAKe,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;2BACvC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;qBACtD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;AALxC,qBAAa,iBAAkB,SAAQ,sBAOR;IAC7B,MAAM,CAAC,QAAQ,CAAC,IAAI;sBALJ,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;+BACvC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;yBACtD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;mEA4LpC;IAEF,MAAM,CAAC,QAAQ,CAAC,KAAK,6FAGpB;IAED,MAAM,CAAC,QAAQ,CAAC,iBAAiB,uFAgBhC;IAED,MAAM,CAAC,QAAQ,CAAC,WAAW,iGAE1B;CACF"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import { Console, Effect, flow, Layer, Option, Schedule, Schema, Semaphore, ServiceMap, } from "effect";
5
+ import { HttpClient, HttpClientRequest, HttpClientResponse, } from "effect/unstable/http";
6
+ import { KeyValueStore } from "effect/unstable/persistence";
7
+ export const CLIENT_ID = "Ov23li8tweQw6odWQebz";
8
+ export const ISSUER = "https://github.com";
9
+ export const API_URL = "https://api.githubcopilot.com";
10
+ export const DEVICE_VERIFICATION_URL = `${ISSUER}/login/device`;
11
+ export const OAUTH_POLLING_SAFETY_MARGIN_MS = 3000;
12
+ export const STORE_PREFIX = "github-copilot.auth/";
13
+ export const STORE_TOKEN_KEY = "token";
14
+ export const OPENAI_INTENT_HEADER = "Openai-Intent";
15
+ export const COPILOT_VISION_REQUEST_HEADER = "Copilot-Vision-Request";
16
+ export const INITIATOR_HEADER = "x-initiator";
17
+ export const DEFAULT_OPENAI_INTENT = "conversation-edits";
18
+ export const DEFAULT_USER_AGENT = "clanka";
19
+ const DEVICE_CODE_URL = "/login/device/code";
20
+ const ACCESS_TOKEN_URL = "/login/oauth/access_token";
21
+ const DEFAULT_POLL_INTERVAL_SECONDS = 5;
22
+ export class TokenData extends Schema.Class("clanka/GithubCopilotAuth/TokenData")({
23
+ access: Schema.String,
24
+ expires: Schema.Number,
25
+ }) {
26
+ isExpired() {
27
+ return this.expires > 0 && this.expires < Date.now();
28
+ }
29
+ }
30
+ export class GithubCopilotAuthError extends Schema.TaggedErrorClass()("GithubCopilotAuthError", {
31
+ reason: Schema.Literal("DeviceFlowFailed"),
32
+ message: Schema.String,
33
+ cause: Schema.optional(Schema.Defect),
34
+ }) {
35
+ }
36
+ const DeviceCodeResponseSchema = Schema.Struct({
37
+ device_code: Schema.String,
38
+ user_code: Schema.String,
39
+ verification_uri: Schema.String,
40
+ interval: Schema.optional(Schema.Number),
41
+ });
42
+ const AccessTokenResponseSchema = Schema.Struct({
43
+ access_token: Schema.optional(Schema.String),
44
+ error: Schema.optional(Schema.String),
45
+ interval: Schema.optional(Schema.Number),
46
+ });
47
+ const normalizePollInterval = (interval) => Math.max(interval ?? DEFAULT_POLL_INTERVAL_SECONDS, 1) * 1_000;
48
+ const deviceFlowError = (message, cause) => new GithubCopilotAuthError({
49
+ reason: "DeviceFlowFailed",
50
+ message,
51
+ ...(cause === undefined ? {} : { cause }),
52
+ });
53
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
54
+ const parseRequestJsonBody = (request) => {
55
+ if (request.body._tag !== "Uint8Array") {
56
+ return Option.none();
57
+ }
58
+ try {
59
+ return Option.some(JSON.parse(new TextDecoder().decode(request.body.body)));
60
+ }
61
+ catch {
62
+ return Option.none();
63
+ }
64
+ };
65
+ const getRequestMetadataFromMessages = (messages) => {
66
+ const last = messages[messages.length - 1];
67
+ const isAgent = !isRecord(last) || last["role"] !== "user";
68
+ const isVision = messages.some((message) => {
69
+ if (!isRecord(message) || !Array.isArray(message["content"])) {
70
+ return false;
71
+ }
72
+ return message["content"].some((part) => isRecord(part) && part["type"] === "image_url");
73
+ });
74
+ return { isAgent, isVision };
75
+ };
76
+ const getRequestMetadataFromInput = (input) => {
77
+ const last = input[input.length - 1];
78
+ const isAgent = !isRecord(last) || last["role"] !== "user";
79
+ const isVision = input.some((item) => {
80
+ if (!isRecord(item) || !Array.isArray(item["content"])) {
81
+ return false;
82
+ }
83
+ return item["content"].some((part) => isRecord(part) && part["type"] === "input_image");
84
+ });
85
+ return { isAgent, isVision };
86
+ };
87
+ const getCopilotRequestMetadata = (request) => Option.match(parseRequestJsonBody(request), {
88
+ onNone: () => ({
89
+ isAgent: false,
90
+ isVision: false,
91
+ }),
92
+ onSome: (body) => {
93
+ if (!isRecord(body)) {
94
+ return {
95
+ isAgent: false,
96
+ isVision: false,
97
+ };
98
+ }
99
+ const messages = body["messages"];
100
+ if (Array.isArray(messages)) {
101
+ return getRequestMetadataFromMessages(messages);
102
+ }
103
+ const input = body["input"];
104
+ if (Array.isArray(input)) {
105
+ return getRequestMetadataFromInput(input);
106
+ }
107
+ return {
108
+ isAgent: false,
109
+ isVision: false,
110
+ };
111
+ },
112
+ });
113
+ const applyCopilotHeaders = (request, token) => {
114
+ const metadata = getCopilotRequestMetadata(request);
115
+ const authenticatedRequest = request.pipe(HttpClientRequest.bearerToken(token.access), HttpClientRequest.setHeader("User-Agent", DEFAULT_USER_AGENT), HttpClientRequest.setHeader(OPENAI_INTENT_HEADER, DEFAULT_OPENAI_INTENT), HttpClientRequest.setHeader(INITIATOR_HEADER, metadata.isAgent ? "agent" : "user"));
116
+ if (!metadata.isVision) {
117
+ return authenticatedRequest;
118
+ }
119
+ return authenticatedRequest.pipe(HttpClientRequest.setHeader(COPILOT_VISION_REQUEST_HEADER, "true"));
120
+ };
121
+ const toTokenData = (accessToken) => new TokenData({
122
+ access: accessToken,
123
+ expires: 0,
124
+ });
125
+ export const toGithubCopilotAuthKeyValueStore = (store) => KeyValueStore.prefix(store, STORE_PREFIX);
126
+ export const toTokenStore = (store) => KeyValueStore.toSchemaStore(toGithubCopilotAuthKeyValueStore(store), TokenData);
127
+ export class GithubCopilotAuth extends ServiceMap.Service()("clanka/GithubCopilotAuth") {
128
+ static make = Effect.gen(function* () {
129
+ const tokenStore = toTokenStore(yield* KeyValueStore.KeyValueStore);
130
+ const httpClient = (yield* HttpClient.HttpClient).pipe(HttpClient.mapRequest(flow(HttpClientRequest.prependUrl(ISSUER), HttpClientRequest.acceptJson)), HttpClient.filterStatusOk, HttpClient.retryTransient({
131
+ times: 5,
132
+ schedule: Schedule.exponential(150).pipe(Schedule.either(Schedule.spaced(5000))),
133
+ }));
134
+ const semaphore = Semaphore.makeUnsafe(1);
135
+ let currentToken = yield* tokenStore.get(STORE_TOKEN_KEY).pipe(Effect.catchTag("SchemaError", (error) => Console.warn(`Failed to decode persisted GitHub Copilot token, clearing it: ${error.message}`).pipe(Effect.andThen(tokenStore.remove(STORE_TOKEN_KEY)), Effect.as(Option.none()))), Effect.orDie);
136
+ const saveToken = (token) => Effect.orDie(tokenStore.set(STORE_TOKEN_KEY, token)).pipe(Effect.tap(() => Effect.sync(() => {
137
+ currentToken = Option.some(token);
138
+ })), Effect.as(token));
139
+ const clearToken = Effect.orDie(tokenStore.remove(STORE_TOKEN_KEY)).pipe(Effect.tap(() => Effect.sync(() => {
140
+ currentToken = Option.none();
141
+ })));
142
+ const requestDeviceCode = Effect.fn("GithubCopilotAuth.requestDeviceCode")(function* () {
143
+ const response = yield* HttpClientRequest.post(DEVICE_CODE_URL).pipe(HttpClientRequest.bodyJsonUnsafe({
144
+ client_id: CLIENT_ID,
145
+ scope: "read:user",
146
+ }), httpClient.execute, Effect.mapError((cause) => deviceFlowError("Failed to request a GitHub Copilot device authorization code", cause)));
147
+ const payload = yield* HttpClientResponse.schemaBodyJson(DeviceCodeResponseSchema)(response).pipe(Effect.mapError((cause) => deviceFlowError("Failed to decode the GitHub Copilot device authorization response", cause)));
148
+ return {
149
+ deviceCode: payload.device_code,
150
+ userCode: payload.user_code,
151
+ verificationUri: payload.verification_uri,
152
+ intervalMs: normalizePollInterval(payload.interval),
153
+ };
154
+ });
155
+ const pollAccessToken = Effect.fn("GithubCopilotAuth.pollAccessToken")(function* (deviceCode) {
156
+ const request = HttpClientRequest.post(ACCESS_TOKEN_URL).pipe(HttpClientRequest.bodyJsonUnsafe({
157
+ client_id: CLIENT_ID,
158
+ device_code: deviceCode.deviceCode,
159
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code",
160
+ }));
161
+ let delayMs = deviceCode.intervalMs;
162
+ while (true) {
163
+ const response = yield* request.pipe(httpClient.execute, Effect.mapError((cause) => deviceFlowError("Failed to poll the GitHub Copilot device authorization token", cause)));
164
+ const payload = yield* HttpClientResponse.schemaBodyJson(AccessTokenResponseSchema)(response).pipe(Effect.mapError((cause) => deviceFlowError("Failed to decode the GitHub Copilot access token response", cause)));
165
+ if (payload.access_token !== undefined &&
166
+ payload.access_token !== "") {
167
+ return toTokenData(payload.access_token);
168
+ }
169
+ if (payload.error === "authorization_pending") {
170
+ yield* Effect.sleep(delayMs + OAUTH_POLLING_SAFETY_MARGIN_MS);
171
+ continue;
172
+ }
173
+ if (payload.error === "slow_down") {
174
+ delayMs = normalizePollInterval(payload.interval) + 5_000;
175
+ yield* Effect.sleep(delayMs + OAUTH_POLLING_SAFETY_MARGIN_MS);
176
+ continue;
177
+ }
178
+ if (payload.error !== undefined && payload.error !== "") {
179
+ return yield* deviceFlowError(`GitHub Copilot device authorization failed: ${payload.error}`);
180
+ }
181
+ yield* Effect.sleep(delayMs + OAUTH_POLLING_SAFETY_MARGIN_MS);
182
+ }
183
+ });
184
+ const authenticateWithDeviceFlow = Effect.gen(function* () {
185
+ const deviceCode = yield* requestDeviceCode();
186
+ yield* Console.log(`Open ${deviceCode.verificationUri} and enter code: ${deviceCode.userCode}`);
187
+ return yield* pollAccessToken(deviceCode);
188
+ });
189
+ const authenticateNoLock = Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
190
+ const token = yield* restore(authenticateWithDeviceFlow);
191
+ return yield* saveToken(token);
192
+ }));
193
+ const getNoLock = Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
194
+ if (Option.isSome(currentToken) && !currentToken.value.isExpired()) {
195
+ return currentToken.value;
196
+ }
197
+ if (Option.isSome(currentToken)) {
198
+ yield* clearToken;
199
+ }
200
+ const token = yield* restore(authenticateWithDeviceFlow);
201
+ return yield* saveToken(token);
202
+ }));
203
+ return GithubCopilotAuth.of({
204
+ get: semaphore.withPermit(getNoLock),
205
+ authenticate: semaphore.withPermit(authenticateNoLock),
206
+ logout: semaphore.withPermit(Effect.uninterruptible(clearToken)),
207
+ });
208
+ });
209
+ static layer = Layer.effect(GithubCopilotAuth, GithubCopilotAuth.make);
210
+ static layerClientNoDeps = Layer.effect(HttpClient.HttpClient, Effect.gen(function* () {
211
+ const auth = yield* GithubCopilotAuth;
212
+ const httpClient = yield* HttpClient.HttpClient;
213
+ const injectAuthHeaders = (request) => auth.get.pipe(Effect.map((token) => applyCopilotHeaders(request, token)), Effect.orDie);
214
+ return httpClient.pipe(HttpClient.mapRequestEffect(injectAuthHeaders));
215
+ }));
216
+ static layerClient = this.layerClientNoDeps.pipe(Layer.provide(GithubCopilotAuth.layer));
217
+ }
218
+ //# sourceMappingURL=GithubCopilotAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GithubCopilotAuth.js","sourceRoot":"","sources":["../src/GithubCopilotAuth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=GithubCopilotAuth.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GithubCopilotAuth.test.d.ts","sourceRoot":"","sources":["../src/GithubCopilotAuth.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,267 @@
1
+ import { assert, describe, it } from "@effect/vitest";
2
+ import { Deferred, Effect, Fiber, Option, Ref } from "effect";
3
+ import { HttpClient, HttpClientRequest, HttpClientResponse, } from "effect/unstable/http";
4
+ import { KeyValueStore } from "effect/unstable/persistence";
5
+ import { COPILOT_VISION_REQUEST_HEADER, DEFAULT_OPENAI_INTENT, DEFAULT_USER_AGENT, GithubCopilotAuth, GithubCopilotAuthError, INITIATOR_HEADER, ISSUER, OPENAI_INTENT_HEADER, STORE_PREFIX, STORE_TOKEN_KEY, TokenData, toGithubCopilotAuthKeyValueStore, toTokenStore, } from "./GithubCopilotAuth.js";
6
+ const jsonResponse = (body, status = 200) => new Response(JSON.stringify(body), {
7
+ status,
8
+ headers: {
9
+ "content-type": "application/json",
10
+ },
11
+ });
12
+ const getBody = (request) => {
13
+ if (request.body._tag !== "Uint8Array") {
14
+ throw new Error("Expected request body to be a Uint8Array payload");
15
+ }
16
+ return new TextDecoder().decode(request.body.body);
17
+ };
18
+ const makeClient = Effect.fn("makeClient")(function* (handler) {
19
+ const attempts = yield* Ref.make(0);
20
+ const requests = yield* Ref.make([]);
21
+ const client = HttpClient.make((request) => Effect.gen(function* () {
22
+ const attempt = yield* Ref.updateAndGet(attempts, (count) => count + 1);
23
+ yield* Ref.update(requests, (current) => [...current, request]);
24
+ return HttpClientResponse.fromWeb(request, handler(request, attempt));
25
+ }));
26
+ return {
27
+ attempts,
28
+ client,
29
+ requests,
30
+ };
31
+ });
32
+ const makeEffectClient = Effect.fn("makeEffectClient")(function* (handler) {
33
+ const attempts = yield* Ref.make(0);
34
+ const requests = yield* Ref.make([]);
35
+ const client = HttpClient.make((request) => Effect.gen(function* () {
36
+ const attempt = yield* Ref.updateAndGet(attempts, (count) => count + 1);
37
+ yield* Ref.update(requests, (current) => [...current, request]);
38
+ return HttpClientResponse.fromWeb(request, yield* handler(request, attempt));
39
+ }));
40
+ return {
41
+ attempts,
42
+ client,
43
+ requests,
44
+ };
45
+ });
46
+ describe("GithubCopilotAuth", () => {
47
+ it.effect("persists token data through the prefixed schema store", Effect.fn(function* () {
48
+ const kvs = yield* KeyValueStore.KeyValueStore;
49
+ const tokenStore = toTokenStore(kvs);
50
+ const token = new TokenData({
51
+ access: "copilot-access-token",
52
+ expires: 0,
53
+ });
54
+ yield* Effect.orDie(tokenStore.set(STORE_TOKEN_KEY, token));
55
+ const stored = yield* Effect.orDie(tokenStore.get(STORE_TOKEN_KEY));
56
+ assert.strictEqual(Option.isSome(stored), true);
57
+ if (Option.isNone(stored)) {
58
+ return;
59
+ }
60
+ assert.strictEqual(stored.value.access, token.access);
61
+ assert.strictEqual(stored.value.expires, token.expires);
62
+ const rawValue = yield* Effect.orDie(kvs.get(`${STORE_PREFIX}${STORE_TOKEN_KEY}`));
63
+ const unprefixedValue = yield* Effect.orDie(kvs.get(STORE_TOKEN_KEY));
64
+ assert.strictEqual(typeof rawValue, "string");
65
+ assert.strictEqual(unprefixedValue, undefined);
66
+ }, Effect.provide(KeyValueStore.layerMemory)));
67
+ it("treats expires=0 as non-expiring", () => {
68
+ const nonExpiring = new TokenData({
69
+ access: "copilot-access-token",
70
+ expires: 0,
71
+ });
72
+ const expired = new TokenData({
73
+ access: "copilot-access-token",
74
+ expires: Date.now() - 1_000,
75
+ });
76
+ const valid = new TokenData({
77
+ access: "copilot-access-token",
78
+ expires: Date.now() + 60_000,
79
+ });
80
+ assert.strictEqual(nonExpiring.isExpired(), false);
81
+ assert.strictEqual(expired.isExpired(), true);
82
+ assert.strictEqual(valid.isExpired(), false);
83
+ });
84
+ it("constructs GithubCopilotAuthError with the expected tagged shape", () => {
85
+ const error = new GithubCopilotAuthError({
86
+ reason: "DeviceFlowFailed",
87
+ message: "Could not authenticate with GitHub Copilot",
88
+ });
89
+ assert.strictEqual(error._tag, "GithubCopilotAuthError");
90
+ assert.strictEqual(error.reason, "DeviceFlowFailed");
91
+ assert.strictEqual(error.message, "Could not authenticate with GitHub Copilot");
92
+ });
93
+ it.effect("returns a cached token without performing any requests", () => Effect.gen(function* () {
94
+ const kvs = yield* KeyValueStore.KeyValueStore;
95
+ const tokenStore = toTokenStore(kvs);
96
+ yield* Effect.orDie(tokenStore.set(STORE_TOKEN_KEY, new TokenData({
97
+ access: "cached-copilot-token",
98
+ expires: 0,
99
+ })));
100
+ const { attempts, client } = yield* makeClient(() => new Response(null, { status: 500 }));
101
+ const auth = yield* GithubCopilotAuth.make.pipe(Effect.provideService(HttpClient.HttpClient, client));
102
+ const token = yield* auth.get;
103
+ assert.strictEqual(token.access, "cached-copilot-token");
104
+ assert.strictEqual(yield* Ref.get(attempts), 0);
105
+ }).pipe(Effect.provide(KeyValueStore.layerMemory)));
106
+ it.effect("authenticates, persists the token, and clears memory plus storage on logout", () => Effect.gen(function* () {
107
+ const kvs = yield* KeyValueStore.KeyValueStore;
108
+ const tokenStore = toTokenStore(kvs);
109
+ let authCount = 0;
110
+ const { attempts, client, requests } = yield* makeClient((request) => {
111
+ if (request.url === `${ISSUER}/login/device/code`) {
112
+ authCount += 1;
113
+ return jsonResponse({
114
+ device_code: `device-code-${authCount}`,
115
+ user_code: `USER-${authCount}`,
116
+ verification_uri: `${ISSUER}/login/device`,
117
+ interval: 1,
118
+ });
119
+ }
120
+ if (request.url === `${ISSUER}/login/oauth/access_token`) {
121
+ return jsonResponse({
122
+ access_token: `copilot-token-${authCount}`,
123
+ });
124
+ }
125
+ return new Response(null, { status: 500 });
126
+ });
127
+ const auth = yield* GithubCopilotAuth.make.pipe(Effect.provideService(HttpClient.HttpClient, client));
128
+ const authenticated = yield* auth.authenticate;
129
+ assert.strictEqual(authenticated.access, "copilot-token-1");
130
+ assert.strictEqual(yield* Ref.get(attempts), 2);
131
+ const stored = yield* Effect.orDie(tokenStore.get(STORE_TOKEN_KEY));
132
+ assert.strictEqual(Option.isSome(stored), true);
133
+ if (Option.isSome(stored)) {
134
+ assert.strictEqual(stored.value.access, "copilot-token-1");
135
+ }
136
+ yield* auth.logout;
137
+ const storedAfterLogout = yield* Effect.orDie(tokenStore.get(STORE_TOKEN_KEY));
138
+ assert.strictEqual(Option.isNone(storedAfterLogout), true);
139
+ const tokenAfterLogout = yield* auth.get;
140
+ assert.strictEqual(tokenAfterLogout.access, "copilot-token-2");
141
+ assert.strictEqual(yield* Ref.get(attempts), 4);
142
+ const seenRequests = yield* Ref.get(requests);
143
+ assert.strictEqual(seenRequests.length, 4);
144
+ assert.strictEqual(seenRequests[0]?.url, `${ISSUER}/login/device/code`);
145
+ assert.strictEqual(getBody(seenRequests[0]).includes(`"client_id":"Ov23li8tweQw6odWQebz"`), true);
146
+ }).pipe(Effect.provide(KeyValueStore.layerMemory)));
147
+ it.effect("clears corrupted persisted tokens before re-authenticating", () => Effect.gen(function* () {
148
+ const kvs = yield* KeyValueStore.KeyValueStore;
149
+ yield* Effect.orDie(kvs.set(`${STORE_PREFIX}${STORE_TOKEN_KEY}`, "not-json"));
150
+ const { attempts, client } = yield* makeClient((request) => {
151
+ if (request.url === `${ISSUER}/login/device/code`) {
152
+ return jsonResponse({
153
+ device_code: "device-code",
154
+ user_code: "ABCD-EFGH",
155
+ verification_uri: `${ISSUER}/login/device`,
156
+ interval: 1,
157
+ });
158
+ }
159
+ if (request.url === `${ISSUER}/login/oauth/access_token`) {
160
+ return jsonResponse({
161
+ access_token: "fresh-copilot-token",
162
+ });
163
+ }
164
+ return new Response(null, { status: 500 });
165
+ });
166
+ const auth = yield* GithubCopilotAuth.make.pipe(Effect.provideService(HttpClient.HttpClient, client));
167
+ assert.strictEqual(yield* Effect.orDie(kvs.get(`${STORE_PREFIX}${STORE_TOKEN_KEY}`)), undefined);
168
+ assert.strictEqual(yield* Ref.get(attempts), 0);
169
+ const token = yield* auth.get;
170
+ assert.strictEqual(token.access, "fresh-copilot-token");
171
+ assert.strictEqual(yield* Ref.get(attempts), 2);
172
+ }).pipe(Effect.provide(KeyValueStore.layerMemory)));
173
+ it.effect("serializes concurrent get calls behind one authentication", () => Effect.gen(function* () {
174
+ const authStarted = yield* Deferred.make();
175
+ const releaseAuth = yield* Deferred.make();
176
+ const { attempts, client } = yield* makeEffectClient((request) => {
177
+ if (request.url === `${ISSUER}/login/device/code`) {
178
+ return Effect.succeed(jsonResponse({
179
+ device_code: "device-code",
180
+ user_code: "ABCD-EFGH",
181
+ verification_uri: `${ISSUER}/login/device`,
182
+ interval: 1,
183
+ }));
184
+ }
185
+ if (request.url === `${ISSUER}/login/oauth/access_token`) {
186
+ return Effect.gen(function* () {
187
+ yield* Deferred.succeed(authStarted, void 0);
188
+ yield* Deferred.await(releaseAuth);
189
+ return jsonResponse({
190
+ access_token: "shared-copilot-token",
191
+ });
192
+ });
193
+ }
194
+ return Effect.succeed(new Response(null, { status: 500 }));
195
+ });
196
+ const auth = yield* GithubCopilotAuth.make.pipe(Effect.provideService(HttpClient.HttpClient, client));
197
+ const firstFiber = yield* auth.get.pipe(Effect.forkChild({ startImmediately: true }));
198
+ yield* Deferred.await(authStarted);
199
+ const secondFiber = yield* auth.get.pipe(Effect.forkChild({ startImmediately: true }));
200
+ yield* Effect.yieldNow;
201
+ assert.strictEqual(yield* Ref.get(attempts), 2);
202
+ yield* Deferred.succeed(releaseAuth, void 0);
203
+ const first = yield* Fiber.join(firstFiber);
204
+ const second = yield* Fiber.join(secondFiber);
205
+ assert.strictEqual(yield* Ref.get(attempts), 2);
206
+ assert.strictEqual(first.access, "shared-copilot-token");
207
+ assert.strictEqual(second.access, "shared-copilot-token");
208
+ }).pipe(Effect.provide(KeyValueStore.layerMemory)));
209
+ it.effect("injects Copilot auth and request metadata headers through the client layer", () => Effect.gen(function* () {
210
+ const kvs = yield* KeyValueStore.KeyValueStore;
211
+ const tokenStore = toTokenStore(kvs);
212
+ yield* Effect.orDie(tokenStore.set(STORE_TOKEN_KEY, new TokenData({
213
+ access: "copilot-token",
214
+ expires: 0,
215
+ })));
216
+ const { client, requests } = yield* makeClient(() => jsonResponse({ ok: true }));
217
+ const wrappedClient = yield* Effect.gen(function* () {
218
+ return yield* HttpClient.HttpClient;
219
+ }).pipe(Effect.provide(GithubCopilotAuth.layerClientNoDeps), Effect.provideService(HttpClient.HttpClient, client), Effect.provideService(GithubCopilotAuth, yield* GithubCopilotAuth.make.pipe(Effect.provideService(HttpClient.HttpClient, client))));
220
+ yield* HttpClientRequest.post("https://api.githubcopilot.com/chat/completions").pipe(HttpClientRequest.bodyJsonUnsafe({
221
+ model: "gpt-4.1",
222
+ messages: [
223
+ {
224
+ role: "user",
225
+ content: [
226
+ {
227
+ type: "text",
228
+ text: "describe this image",
229
+ },
230
+ {
231
+ type: "image_url",
232
+ image_url: {
233
+ url: "https://example.com/image.png",
234
+ },
235
+ },
236
+ ],
237
+ },
238
+ ],
239
+ }), wrappedClient.execute);
240
+ yield* HttpClientRequest.post("https://api.githubcopilot.com/chat/completions").pipe(HttpClientRequest.bodyJsonUnsafe({
241
+ model: "gpt-4.1",
242
+ messages: [
243
+ {
244
+ role: "assistant",
245
+ content: "running tools",
246
+ },
247
+ ],
248
+ }), wrappedClient.execute);
249
+ const seenRequests = yield* Ref.get(requests);
250
+ const visionRequest = seenRequests[0];
251
+ const agentRequest = seenRequests[1];
252
+ assert.strictEqual(visionRequest.headers.authorization, "Bearer copilot-token");
253
+ assert.strictEqual(visionRequest.headers["user-agent"], DEFAULT_USER_AGENT);
254
+ assert.strictEqual(visionRequest.headers[OPENAI_INTENT_HEADER.toLowerCase()], DEFAULT_OPENAI_INTENT);
255
+ assert.strictEqual(visionRequest.headers[INITIATOR_HEADER], "user");
256
+ assert.strictEqual(visionRequest.headers[COPILOT_VISION_REQUEST_HEADER.toLowerCase()], "true");
257
+ assert.strictEqual(agentRequest.headers[INITIATOR_HEADER], "agent");
258
+ }).pipe(Effect.provide(KeyValueStore.layerMemory)));
259
+ it.effect("exposes the prefixed store helper", Effect.fn(function* () {
260
+ const kvs = yield* KeyValueStore.KeyValueStore;
261
+ const prefixedStore = toGithubCopilotAuthKeyValueStore(kvs);
262
+ yield* Effect.orDie(prefixedStore.set(STORE_TOKEN_KEY, "raw-token"));
263
+ assert.strictEqual(yield* Effect.orDie(kvs.get(`${STORE_PREFIX}${STORE_TOKEN_KEY}`)), "raw-token");
264
+ assert.strictEqual(yield* Effect.orDie(kvs.get(STORE_TOKEN_KEY)), undefined);
265
+ }, Effect.provide(KeyValueStore.layerMemory)));
266
+ });
267
+ //# sourceMappingURL=GithubCopilotAuth.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GithubCopilotAuth.test.js","sourceRoot":"","sources":["../src/GithubCopilotAuth.test.ts"],"names":[],"mappings":"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"}
@@ -3,11 +3,12 @@
3
3
  */
4
4
  import { Stream } from "effect";
5
5
  import { type Output, AgentFinished } from "./Agent.ts";
6
+ import type { AiError } from "effect/unstable/ai";
6
7
  /**
7
8
  * @since 1.0.0
8
9
  * @category Models
9
10
  */
10
- export type OutputFormatter<E = never, R = never> = (stream: Stream.Stream<Output, AgentFinished>) => Stream.Stream<string, E, R>;
11
+ export type OutputFormatter<E = never, R = never> = (stream: Stream.Stream<Output, AgentFinished | AiError.AiError>) => Stream.Stream<string, AiError.AiError | E, R>;
11
12
  /**
12
13
  * @since 1.0.0
13
14
  * @category Pretty
@@ -1 +1 @@
1
- {"version":3,"file":"OutputFormatter.d.ts","sourceRoot":"","sources":["../src/OutputFormatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,KAAK,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAGvD;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAClD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KACzC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAEhC;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,eAgDlB,CAAA"}
1
+ {"version":3,"file":"OutputFormatter.d.ts","sourceRoot":"","sources":["../src/OutputFormatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,KAAK,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAClD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,KAC3D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AAElD;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,eAsDlB,CAAA"}