@codeworksh/aikit 0.8.0 → 0.9.0-dev.20260922184333

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 (47) hide show
  1. package/README.md +10 -1
  2. package/cli.mjs +75 -83
  3. package/cli.mjs.map +1 -1
  4. package/{codex-MtP1574D.mjs → codex-CLDBTrFm.mjs} +132 -134
  5. package/codex-CLDBTrFm.mjs.map +1 -0
  6. package/copilot-CcD3g6H8.mjs +425 -0
  7. package/copilot-CcD3g6H8.mjs.map +1 -0
  8. package/copilot-headers-DceqXlpj.mjs +104 -0
  9. package/copilot-headers-DceqXlpj.mjs.map +1 -0
  10. package/github-copilot-BJIrxOzT.mjs +3 -0
  11. package/github-copilot-SIUCJz1G.mjs +126 -0
  12. package/github-copilot-SIUCJz1G.mjs.map +1 -0
  13. package/index.d.mts +980 -932
  14. package/index.mjs +63 -11
  15. package/index.mjs.map +1 -1
  16. package/interactive-eoNnscGB.mjs +57 -0
  17. package/interactive-eoNnscGB.mjs.map +1 -0
  18. package/{model-CpX11Oob.d.mts → model-CrVLp622.d.mts} +159 -130
  19. package/{model-CBnredXj.mjs → model-gCDbmGqT.mjs} +31 -2
  20. package/model-gCDbmGqT.mjs.map +1 -0
  21. package/{modelgen-BjSsusLQ.mjs → modelgen-DvorXOjJ.mjs} +148 -29
  22. package/modelgen-DvorXOjJ.mjs.map +1 -0
  23. package/modelgen.d.mts +2 -3
  24. package/modelgen.mjs +1 -1
  25. package/oauth/github/copilot.d.mts +169 -0
  26. package/oauth/github/copilot.mjs +2 -0
  27. package/oauth/interactive.d.mts +21 -0
  28. package/oauth/interactive.mjs +2 -0
  29. package/oauth/openai/codex.d.mts +46 -28
  30. package/oauth/openai/codex.mjs +2 -2
  31. package/oauth/summary.d.mts +67 -0
  32. package/oauth/summary.mjs +2 -0
  33. package/{openai-codex-t4B7g-gv.mjs → openai-codex-Bqzti6Mc.mjs} +3 -3
  34. package/{openai-codex-t4B7g-gv.mjs.map → openai-codex-Bqzti6Mc.mjs.map} +1 -1
  35. package/openai-codex-DA1Q7mLN.mjs +2 -0
  36. package/package.json +34 -22
  37. package/{registry-DYdYTwFt.mjs → registry-ZxwIW0gX.mjs} +5 -3
  38. package/registry-ZxwIW0gX.mjs.map +1 -0
  39. package/storage-v6qjTQ0v.mjs +178 -0
  40. package/storage-v6qjTQ0v.mjs.map +1 -0
  41. package/summary-C_QyCVWa.mjs +68 -0
  42. package/summary-C_QyCVWa.mjs.map +1 -0
  43. package/codex-MtP1574D.mjs.map +0 -1
  44. package/model-CBnredXj.mjs.map +0 -1
  45. package/modelgen-BjSsusLQ.mjs.map +0 -1
  46. package/openai-codex-BRH4Qa7l.mjs +0 -2
  47. package/registry-DYdYTwFt.mjs.map +0 -1
package/index.mjs CHANGED
@@ -1,8 +1,9 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
- import { S as NamedError, _ as registry, a as KnownProviderEnumSchema, c as calculateCost, d as getModels, f as getProviders, g as optionsKey, i as KnownProviderEnum, l as clampThinkingLevel, m as modelsAreEqual, n as APIMethodEnumSchema, p as model_exports, r as ActiveThinkingLevel, s as ThinkingBudgets$1, u as getModel, v as thinkingTokenBudgetField } from "./model-CBnredXj.mjs";
3
- import { C as ToolCallSchema, D as transformMessages, E as resolveJsonSchemaConstraint, S as AssistantMessageSchema, T as message_exports, g as shortHash, n as createOpenAICodex, r as openaiCodex, v as openAICodexTools, w as createAssistantMessage$1, x as resolveOpenAICodexToolConstraint } from "./openai-codex-t4B7g-gv.mjs";
2
+ import { C as NamedError, _ as optionsKey, a as KnownProviderEnumSchema, c as calculateCost, d as getModels, f as getProviders, h as modelsAreEqual, i as KnownProviderEnum, l as clampThinkingLevel, m as model_exports, n as APIMethodEnumSchema, r as ActiveThinkingLevel, s as ThinkingBudgets$1, t as APIMethodEnum, u as getModel, v as registry, y as thinkingTokenBudgetField } from "./model-gCDbmGqT.mjs";
3
+ import { C as ToolCallSchema, D as transformMessages, E as resolveJsonSchemaConstraint, S as AssistantMessageSchema, T as message_exports, g as shortHash, n as createOpenAICodex, r as openaiCodex, v as openAICodexTools, w as createAssistantMessage$1, x as resolveOpenAICodexToolConstraint } from "./openai-codex-Bqzti6Mc.mjs";
4
4
  import { r as normalize, t as failure_exports } from "./failure-SAPyG-w2.mjs";
5
- import { i as packageForModel, o as resolveLanguageModel, r as loadProviderFactory } from "./registry-DYdYTwFt.mjs";
5
+ import { i as packageForModel, o as resolveLanguageModel, r as loadProviderFactory } from "./registry-ZxwIW0gX.mjs";
6
+ import { i as githubCopilot, r as createGitHubCopilot } from "./github-copilot-SIUCJz1G.mjs";
6
7
  import Type$2, { Type, Type as Type$1 } from "typebox";
7
8
  import { jsonSchema, streamText } from "ai";
8
9
  import { parse } from "partial-json";
@@ -638,6 +639,11 @@ async function resolveAISDKLanguageModel(model, options, thinkingTokenBudget) {
638
639
  ...typeof factoryOptions.compat === "object" && factoryOptions.compat !== null ? factoryOptions.compat : {}
639
640
  };
640
641
  }
642
+ if (npm === "@codeworksh/ai-sdk-github-copilot") {
643
+ if (options.sessionId) factoryOptions.sessionId ??= options.sessionId;
644
+ const budgetField = thinkingTokenBudgetField(model);
645
+ if (budgetField && thinkingTokenBudget !== void 0 && thinkingTokenBudget > 0) factoryOptions.transformRequestBody = thinkingTokenBudgetTransform(budgetField, thinkingTokenBudget, factoryOptions.transformRequestBody);
646
+ }
641
647
  const provider = createProvider(factoryOptions);
642
648
  return resolveLanguageModel(provider, model, options.method);
643
649
  }
@@ -651,9 +657,14 @@ const ANTHROPIC_MIN_THINKING_BUDGET = 1024;
651
657
  * Adaptive models are exempt: they are sent an effort level and no budget, so
652
658
  * there is no floor to fall under.
653
659
  */
654
- function minimumThinkingBudget(model) {
660
+ /** Whether the model talks Anthropic Messages — directly, or via Copilot's `/v1/messages` route. */
661
+ function isAnthropicMessagesModel(model) {
655
662
  const key = optionsKey(model);
656
- if (key !== "anthropic" && key !== "google-vertex-anthropic") return 0;
663
+ if (key === "anthropic" || key === "google-vertex-anthropic") return true;
664
+ return key === "github-copilot" && model.api?.method === APIMethodEnum.messages;
665
+ }
666
+ function minimumThinkingBudget(model) {
667
+ if (!isAnthropicMessagesModel(model)) return 0;
657
668
  return model.compat?.forceAdaptiveThinking ? 0 : ANTHROPIC_MIN_THINKING_BUDGET;
658
669
  }
659
670
  function resolvePlan(model, context, options) {
@@ -716,6 +727,10 @@ function disabledProviderOptions(model) {
716
727
  if (!model.reasoning) return {};
717
728
  const key = optionsKey(model);
718
729
  if (key === "anthropic" || key === "google-vertex-anthropic") return { [key]: { thinking: { type: "disabled" } } };
730
+ if (key === "github-copilot") {
731
+ if (model.api?.method === APIMethodEnum.messages) return { [key]: { thinking: { type: "disabled" } } };
732
+ return {};
733
+ }
719
734
  if (key === "google" || key === "google-vertex") {
720
735
  if (model.thinkingLevelMap?.off === null) return {};
721
736
  return { [key]: { thinkingConfig: googleDisabledThinkingConfig(model) } };
@@ -763,6 +778,24 @@ function reasoningProviderOptions(model, plan) {
763
778
  const key = optionsKey(model);
764
779
  const budget = plan.budget;
765
780
  if (key === "openai" || key === "xai" || key === "openai-codex") return { [key]: { reasoningEffort: mapped } };
781
+ if (key === "github-copilot") {
782
+ const method = model.api?.method;
783
+ if (method === APIMethodEnum.responses) return { [key]: { reasoningEffort: mapped } };
784
+ if (method === APIMethodEnum.messages) {
785
+ if (model.compat?.forceAdaptiveThinking) return { [key]: {
786
+ thinking: {
787
+ type: "adaptive",
788
+ display: "summarized"
789
+ },
790
+ effort: anthropicEffort(model, level)
791
+ } };
792
+ return { [key]: { thinking: {
793
+ type: "enabled",
794
+ budgetTokens: budget
795
+ } } };
796
+ }
797
+ return {};
798
+ }
766
799
  if (key === "openrouter") return { [key]: { reasoning: { effort: mapped === "off" ? "none" : mapped } } };
767
800
  if (key === "google" || key === "google-vertex") {
768
801
  const thinkingLevel = googleThinkingLevel(mapped);
@@ -1002,7 +1035,7 @@ function isRecord(value) {
1002
1035
  }
1003
1036
  function encodeOpenAIReasoningSignature(providerMetadata) {
1004
1037
  if (!isRecord(providerMetadata)) return;
1005
- const metadata = providerMetadata.openai;
1038
+ const metadata = providerMetadata.openai ?? providerMetadata["github-copilot"];
1006
1039
  if (!isRecord(metadata) || typeof metadata.itemId !== "string") return;
1007
1040
  const signature = { itemId: metadata.itemId };
1008
1041
  if (typeof metadata.reasoningEncryptedContent === "string" || metadata.reasoningEncryptedContent === null) signature.reasoningEncryptedContent = metadata.reasoningEncryptedContent;
@@ -1048,6 +1081,25 @@ function assistantMessages(message, model) {
1048
1081
  if (part.type === "thinking") {
1049
1082
  const thinking = sanitizeSurrogates(part.thinking);
1050
1083
  if (thinking.trim().length === 0 && !part.thinkingSignature) continue;
1084
+ if (message.protocol === KnownProviderEnum.githubCopilot) {
1085
+ const method = model.api?.method;
1086
+ const openai = part.thinkingSignature ? decodeOpenAIReasoningSignature(part.thinkingSignature) : void 0;
1087
+ if (method === APIMethodEnum.responses && openai) assistantContent.push({
1088
+ type: "reasoning",
1089
+ text: thinking,
1090
+ providerOptions: { "github-copilot": openai }
1091
+ });
1092
+ else if (method === APIMethodEnum.messages && part.thinkingSignature && !openai) assistantContent.push({
1093
+ type: "reasoning",
1094
+ text: thinking,
1095
+ providerOptions: { anthropic: { signature: part.thinkingSignature } }
1096
+ });
1097
+ else if (thinking.trim().length > 0) assistantContent.push({
1098
+ type: "text",
1099
+ text: thinking
1100
+ });
1101
+ continue;
1102
+ }
1051
1103
  const reasoning = {
1052
1104
  type: "reasoning",
1053
1105
  text: thinking
@@ -1217,7 +1269,7 @@ function cacheProviderOptions(model, options) {
1217
1269
  if (retention === "long") openai.promptCacheRetention = "24h";
1218
1270
  return Object.keys(openai).length > 0 ? { [key]: openai } : {};
1219
1271
  }
1220
- if ((key === "anthropic" || key === "google-vertex-anthropic") && retention) return { [key]: { cacheControl: {
1272
+ if (isAnthropicMessagesModel(model) && retention) return { [key]: { cacheControl: {
1221
1273
  type: "ephemeral",
1222
1274
  ...retention === "long" ? { ttl: "1h" } : {}
1223
1275
  } } };
@@ -1452,10 +1504,9 @@ function resolvePricing(model, pricing) {
1452
1504
  * unchanged -- subtracting there would quietly under-ask by the whole budget.
1453
1505
  */
1454
1506
  function resolveMaxOutputTokens(model, plan) {
1455
- const key = optionsKey(model);
1456
- if (key === "openai-codex") return void 0;
1507
+ if (optionsKey(model) === "openai-codex") return void 0;
1457
1508
  if (plan.maxTokens === void 0) return void 0;
1458
- return (key === "anthropic" || key === "google-vertex-anthropic") && !model.compat?.forceAdaptiveThinking ? plan.maxTokens - plan.budget : plan.maxTokens;
1509
+ return isAnthropicMessagesModel(model) && !model.compat?.forceAdaptiveThinking ? plan.maxTokens - plan.budget : plan.maxTokens;
1459
1510
  }
1460
1511
  const stream$1 = (model, context, options) => {
1461
1512
  const stream = new AssistantMessageEventStream();
@@ -1542,6 +1593,7 @@ function registerAISDKProtocols() {
1542
1593
  registerProtocolProvider(createAISDKProtocol(KnownProviderEnum.openai));
1543
1594
  registerProtocolProvider(createAISDKProtocol(KnownProviderEnum.openaiCompatible));
1544
1595
  registerProtocolProvider(createAISDKProtocol(KnownProviderEnum.openaiCodex));
1596
+ registerProtocolProvider(createAISDKProtocol(KnownProviderEnum.githubCopilot));
1545
1597
  registerProtocolProvider(createAISDKProtocol(KnownProviderEnum.openrouter));
1546
1598
  registerProtocolProvider(createAISDKProtocol(KnownProviderEnum.xai));
1547
1599
  }
@@ -1616,6 +1668,6 @@ function validateToolArguments(tool, toolExecution) {
1616
1668
  return validateSchema(tool.parameters, toolExecution.rawArgs, `Tool "${toolExecution.name}"`);
1617
1669
  }
1618
1670
  //#endregion
1619
- export { event_exports as Event, EventStream, failure_exports as Failure, message_exports as Message, model_exports as Model, protocol_exports as Protocol, ThinkingBudgets, Type, createAssistantMessageEventStream, createOpenAICodex, llm, openAICodexTools, openaiCodex, stream, validateSchema, validateToolArguments, validateToolCall };
1671
+ export { event_exports as Event, EventStream, failure_exports as Failure, message_exports as Message, model_exports as Model, protocol_exports as Protocol, ThinkingBudgets, Type, createAssistantMessageEventStream, createGitHubCopilot, createOpenAICodex, githubCopilot, llm, openAICodexTools, openaiCodex, stream, validateSchema, validateToolArguments, validateToolCall };
1620
1672
 
1621
1673
  //# sourceMappingURL=index.mjs.map