@humain/terminal 0.1.0 → 0.1.1

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 (34) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/bundle/chunks/{chunk-RM336IEI.js → chunk-LYAMSPR2.js} +18 -18
  3. package/dist/bundle/cli.js +1 -1
  4. package/dist/bundle/index.js +1 -1
  5. package/dist/bundle/rpc-entry.js +1 -1
  6. package/dist/cli.js +1 -5
  7. package/dist/core/agent-session.js +2 -2
  8. package/dist/core/agent-session.js.map +1 -1
  9. package/dist/humain/index.d.ts.map +1 -1
  10. package/dist/humain/index.js +2 -0
  11. package/dist/humain/index.js.map +1 -1
  12. package/dist/humain/node-http.d.ts +3 -0
  13. package/dist/humain/node-http.d.ts.map +1 -0
  14. package/dist/humain/node-http.js +119 -0
  15. package/dist/humain/node-http.js.map +1 -0
  16. package/dist/humain/node-provider.d.ts +4 -0
  17. package/dist/humain/node-provider.d.ts.map +1 -0
  18. package/dist/humain/node-provider.js +359 -0
  19. package/dist/humain/node-provider.js.map +1 -0
  20. package/dist/index.js +1 -51
  21. package/dist/main.d.ts.map +1 -1
  22. package/dist/main.js +16 -0
  23. package/dist/main.js.map +1 -1
  24. package/dist/modes/interactive/components/login-dialog.d.ts +7 -2
  25. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  26. package/dist/modes/interactive/components/login-dialog.js +46 -21
  27. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  28. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  29. package/dist/modes/interactive/interactive-mode.js +10 -13
  30. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  31. package/docs/humain-terminal.md +6 -0
  32. package/docs/providers.md +19 -1
  33. package/npm-shrinkwrap.json +2 -2
  34. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/humain/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAMjE,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AACpD,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAClD,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAChD,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAqHhE,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAIvG;AA8LD,wBAAgB,8BAA8B,IAAI,aAAa,EAAE,CAEhE;AAED,wBAAgB,oCAAoC,CACnD,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,aAAa,GAAE,MAAkB,GAC/B,gBAAgB,CAWlB;AAED,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,gBAAgB,EAAE,CAM7F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/humain/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAOjE,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AACpD,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAClD,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAChD,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAqHhE,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAIvG;AA+LD,wBAAgB,8BAA8B,IAAI,aAAa,EAAE,CAEhE;AAED,wBAAgB,oCAAoC,CACnD,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,aAAa,GAAE,MAAkB,GAC/B,gBAAgB,CAWlB;AAED,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,gBAAgB,EAAE,CAM7F"}
@@ -3,6 +3,7 @@ import { setBedrockProviderModule } from "@earendil-works/pi-ai/compat";
3
3
  import { bedrockProviderModule } from "./bedrock-provider/vendor/index.bundle.mjs";
4
4
  import { cleanupLegacyWorkflowTiers, getLegacyWorkflowTierPaths } from "./legacy-workflow-tiers.js";
5
5
  import { createHumainMcpAdapterExtensionFactory } from "./mcp-adapter.js";
6
+ import { createHumainNodeProvider } from "./node-provider.js";
6
7
  import { createHumainWebAccessExtensionFactory } from "./web-access/index.js";
7
8
  export const HUMAIN_LOCAL_PROVIDER = "humain-local";
8
9
  export const HUMAIN_CODE_PROVIDER = "humain-code";
@@ -241,6 +242,7 @@ function registerDeployNowBindingProviders(pi, env) {
241
242
  }
242
243
  }
243
244
  async function registerHumainProviders(pi, env) {
245
+ pi.registerProvider(createHumainNodeProvider(env));
244
246
  const localBaseUrl = getLocalBaseUrl(env);
245
247
  const localModels = await getHumainLocalModelConfigs(env);
246
248
  if (localBaseUrl && localModels.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/humain/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from \"node:os\";\nimport type { Api, OAuthCredentials } from \"@earendil-works/pi-ai\";\nimport { setBedrockProviderModule } from \"@earendil-works/pi-ai/compat\";\nimport type { ExtensionAPI, ExtensionFactory, ProviderModelConfig } from \"../core/extensions/types.ts\";\nimport type { PackageSource } from \"../core/settings-manager.ts\";\nimport { bedrockProviderModule } from \"./bedrock-provider/vendor/index.bundle.mjs\";\nimport { cleanupLegacyWorkflowTiers, getLegacyWorkflowTierPaths } from \"./legacy-workflow-tiers.ts\";\nimport { createHumainMcpAdapterExtensionFactory } from \"./mcp-adapter.ts\";\nimport { createHumainWebAccessExtensionFactory } from \"./web-access/index.ts\";\n\nexport const HUMAIN_LOCAL_PROVIDER = \"humain-local\";\nexport const HUMAIN_CODE_PROVIDER = \"humain-code\";\nexport const HUMAIN_SSO_PROVIDER = \"humain-sso\";\nexport const HUMAIN_FORGE_CWD_ENV = \"HUMAIN_TERMINAL_FORGE_CWD\";\n\nsetBedrockProviderModule(bedrockProviderModule);\n\nconst LOCAL_MODELS_ENV = \"HUMAIN_TERMINAL_LOCAL_MODELS\";\nconst LOCAL_BASE_URL_ENV = \"HUMAIN_TERMINAL_LOCAL_BASE_URL\";\nconst LEGACY_LOCAL_BASE_URL_ENV = \"HUMAIN_TERMINAL_AI_BASE_URL\";\nconst LOCAL_API_KEY_ENV = \"HUMAIN_TERMINAL_LOCAL_API_KEY\";\nconst LEGACY_LOCAL_API_KEY_ENV = \"HUMAIN_TERMINAL_AI_API_KEY\";\nconst LOCAL_DISCOVERY_TIMEOUT_ENV = \"HUMAIN_TERMINAL_LOCAL_MODELS_DISCOVERY_TIMEOUT_MS\";\nconst HC_BASE_URL_ENV = \"HUMAIN_TERMINAL_HC_BASE_URL\";\nconst HC_API_KEY_ENV = \"HUMAIN_TERMINAL_HC_API_KEY\";\nconst HC_MODELS_ENV = \"HUMAIN_TERMINAL_HC_MODELS\";\nconst HUMAIN_CODE_BASE_URL_ENV = \"HUMAIN_TERMINAL_HUMAIN_CODE_BASE_URL\";\nconst HUMAIN_CODE_API_KEY_ENV = \"HUMAIN_TERMINAL_HUMAIN_CODE_API_KEY\";\nconst HUMAIN_CODE_MODELS_ENV = \"HUMAIN_TERMINAL_HUMAIN_CODE_MODELS\";\nconst DEPLOYNOW_PROXY_SENTINEL = \"deploynow-proxy\";\nconst DEPLOYNOW_BROKER_SENTINEL = \"deploynow-broker\";\nconst DEPLOYNOW_ANTHROPIC_LEGACY_SENTINEL = \"not-a-real-key-routed-via-proxy\";\nconst DEPLOYNOW_PROXY_SENTINELS = new Set([\n\tDEPLOYNOW_PROXY_SENTINEL,\n\tDEPLOYNOW_BROKER_SENTINEL,\n\tDEPLOYNOW_ANTHROPIC_LEGACY_SENTINEL,\n]);\nconst DEPLOYNOW_BEDROCK_BASE_URL_ENV = \"ANTHROPIC_BEDROCK_BASE_URL\";\nconst DEPLOYNOW_ANTHROPIC_BASE_URL_ENV = \"ANTHROPIC_BASE_URL\";\nconst DEPLOYNOW_OPENAI_BASE_URL_ENV = \"OPENAI_BASE_URL\";\nconst AWS_REGION_ENV = \"AWS_REGION\";\nconst AWS_ACCESS_KEY_ID_ENV = \"AWS_ACCESS_KEY_ID\";\nconst AWS_SECRET_ACCESS_KEY_ENV = \"AWS_SECRET_ACCESS_KEY\";\nconst AWS_SESSION_TOKEN_ENV = \"AWS_SESSION_TOKEN\";\nconst ANTHROPIC_API_KEY_ENV = \"ANTHROPIC_API_KEY\";\nconst OPENAI_API_KEY_ENV = \"OPENAI_API_KEY\";\nconst BEDROCK_MODEL_ID_ENV = \"BEDROCK_MODEL_ID\";\nconst OPENAI_MODEL_ID_ENV = \"OPENAI_MODEL_ID\";\nconst ANTHROPIC_MODEL_ID_ENV = \"ANTHROPIC_MODEL_ID\";\nconst FORGE_RUNTIME_MODEL_PROVIDER_ENV = \"FORGE_RUNTIME_MODEL_PROVIDER\";\nconst FORGE_RUNTIME_MODEL_ID_ENV = \"FORGE_RUNTIME_MODEL_ID\";\nconst DEFAULT_LOCAL_CONTEXT_WINDOW = 128000;\nconst DEFAULT_LOCAL_MAX_TOKENS = 16384;\nconst DEFAULT_LOCAL_MODEL_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };\nconst AMAZON_BEDROCK_PROVIDER = \"amazon-bedrock\";\nconst ANTHROPIC_PROVIDER = \"anthropic\";\nconst OPENAI_PROVIDER = \"openai\";\nconst HUMAIN_SSO_UNSUPPORTED_MESSAGE = \"HUMAIN SSO is not supported yet.\";\n\ninterface DiscoveryModelList {\n\tdata?: Array<{ id?: unknown }>;\n}\n\nconst DEFAULT_HUMAIN_CODE_MODELS = [\"humain-planning\", \"humain-code\", \"humain-review\", \"humain-long-context\"];\n\nfunction readCsvEnv(env: NodeJS.ProcessEnv, key: string): string[] {\n\tconst raw = env[key];\n\tif (!raw) return [];\n\treturn raw\n\t\t.split(\",\")\n\t\t.map((item) => item.trim())\n\t\t.filter((item) => item.length > 0);\n}\n\nfunction readNonEmptyEnv(env: NodeJS.ProcessEnv, key: string): string | undefined {\n\tconst value = env[key]?.trim();\n\treturn value ? value : undefined;\n}\n\nfunction toModelConfig(id: string, api: Api = \"openai-completions\"): ProviderModelConfig {\n\tconst config: ProviderModelConfig = {\n\t\tid,\n\t\tname: id,\n\t\tapi,\n\t\treasoning: false,\n\t\tinput: [\"text\"],\n\t\tcost: DEFAULT_LOCAL_MODEL_COST,\n\t\tcontextWindow: DEFAULT_LOCAL_CONTEXT_WINDOW,\n\t\tmaxTokens: DEFAULT_LOCAL_MAX_TOKENS,\n\t};\n\n\tif (api === \"openai-completions\") {\n\t\tconfig.compat = {\n\t\t\tsupportsStore: false,\n\t\t\tsupportsDeveloperRole: false,\n\t\t\tsupportsReasoningEffort: false,\n\t\t\tsupportsUsageInStreaming: false,\n\t\t\tmaxTokensField: \"max_tokens\",\n\t\t\tsupportsStrictMode: false,\n\t\t\tsupportsLongCacheRetention: false,\n\t\t};\n\t}\n\n\treturn config;\n}\n\nasync function discoverLocalModelIds(env: NodeJS.ProcessEnv): Promise<string[]> {\n\tconst baseUrl = getLocalBaseUrl(env);\n\tif (!baseUrl) return [];\n\tconst timeoutMs = Number(env[LOCAL_DISCOVERY_TIMEOUT_ENV] ?? \"750\");\n\tconst controller = new AbortController();\n\tconst timeout = setTimeout(() => controller.abort(), Number.isFinite(timeoutMs) && timeoutMs > 0 ? timeoutMs : 750);\n\tconst apiKey = getLocalApiKey(env);\n\ttry {\n\t\tconst response = await fetch(new URL(\"models\", baseUrl.endsWith(\"/\") ? baseUrl : `${baseUrl}/`), {\n\t\t\tsignal: controller.signal,\n\t\t\theaders: apiKey ? { Authorization: `Bearer ${apiKey}` } : undefined,\n\t\t});\n\t\tif (!response.ok) return [];\n\t\tconst payload = (await response.json()) as DiscoveryModelList;\n\t\treturn (payload.data ?? [])\n\t\t\t.map((model) => (typeof model.id === \"string\" ? model.id.trim() : \"\"))\n\t\t\t.filter((id) => id.length > 0);\n\t} catch {\n\t\treturn [];\n\t} finally {\n\t\tclearTimeout(timeout);\n\t}\n}\n\nexport async function getHumainLocalModelConfigs(env: NodeJS.ProcessEnv): Promise<ProviderModelConfig[]> {\n\tconst envModelIds = readCsvEnv(env, LOCAL_MODELS_ENV);\n\tconst modelIds = envModelIds.length > 0 ? envModelIds : await discoverLocalModelIds(env);\n\treturn [...new Set(modelIds)].map((id) => toModelConfig(id));\n}\n\nfunction getLocalBaseUrl(env: NodeJS.ProcessEnv): string | undefined {\n\treturn env[LOCAL_BASE_URL_ENV] ?? env[LEGACY_LOCAL_BASE_URL_ENV];\n}\n\nfunction getLocalApiKey(env: NodeJS.ProcessEnv): string | undefined {\n\treturn env[LOCAL_API_KEY_ENV] ?? env[LEGACY_LOCAL_API_KEY_ENV];\n}\n\nfunction getHumainCodeBaseUrl(env: NodeJS.ProcessEnv): string | undefined {\n\treturn env[HUMAIN_CODE_BASE_URL_ENV] ?? env[HC_BASE_URL_ENV];\n}\n\nfunction getHumainCodeApiKey(env: NodeJS.ProcessEnv): string | undefined {\n\treturn env[HUMAIN_CODE_API_KEY_ENV] ?? env[HC_API_KEY_ENV];\n}\n\nfunction isDeployNowProxyCredential(value: string | undefined): boolean {\n\treturn value !== undefined && DEPLOYNOW_PROXY_SENTINELS.has(value);\n}\n\nfunction getDeployNowCredential(env: NodeJS.ProcessEnv, key: string): string {\n\treturn readNonEmptyEnv(env, key) ?? DEPLOYNOW_PROXY_SENTINEL;\n}\n\nfunction getDeployNowBedrockRequestEnv(env: NodeJS.ProcessEnv): Record<string, string> {\n\tconst requestEnv: Record<string, string> = {\n\t\t[AWS_ACCESS_KEY_ID_ENV]: getDeployNowCredential(env, AWS_ACCESS_KEY_ID_ENV),\n\t\t[AWS_SECRET_ACCESS_KEY_ENV]: getDeployNowCredential(env, AWS_SECRET_ACCESS_KEY_ENV),\n\t\t[AWS_REGION_ENV]: readNonEmptyEnv(env, AWS_REGION_ENV) ?? \"\",\n\t};\n\tconst sessionToken = readNonEmptyEnv(env, AWS_SESSION_TOKEN_ENV);\n\tif (sessionToken) {\n\t\trequestEnv[AWS_SESSION_TOKEN_ENV] = sessionToken;\n\t}\n\treturn requestEnv;\n}\n\nfunction hasDeployNowBedrockBindingConfig(env: NodeJS.ProcessEnv): boolean {\n\treturn Boolean(\n\t\treadNonEmptyEnv(env, DEPLOYNOW_BEDROCK_BASE_URL_ENV) &&\n\t\t\treadNonEmptyEnv(env, AWS_REGION_ENV) &&\n\t\t\tisDeployNowProxyCredential(env[AWS_ACCESS_KEY_ID_ENV]) &&\n\t\t\tisDeployNowProxyCredential(env[AWS_SECRET_ACCESS_KEY_ENV]),\n\t);\n}\n\nfunction hasDeployNowAnthropicBindingConfig(env: NodeJS.ProcessEnv): boolean {\n\treturn Boolean(\n\t\treadNonEmptyEnv(env, DEPLOYNOW_ANTHROPIC_BASE_URL_ENV) && isDeployNowProxyCredential(env[ANTHROPIC_API_KEY_ENV]),\n\t);\n}\n\nfunction hasDeployNowOpenAiBindingConfig(env: NodeJS.ProcessEnv): boolean {\n\treturn Boolean(\n\t\treadNonEmptyEnv(env, DEPLOYNOW_OPENAI_BASE_URL_ENV) && isDeployNowProxyCredential(env[OPENAI_API_KEY_ENV]),\n\t);\n}\n\nfunction getDeployNowBedrockModelId(env: NodeJS.ProcessEnv): string | undefined {\n\treturn (\n\t\t(isForgeRuntimeBedrockProvider(env) ? readNonEmptyEnv(env, FORGE_RUNTIME_MODEL_ID_ENV) : undefined) ??\n\t\treadNonEmptyEnv(env, BEDROCK_MODEL_ID_ENV)\n\t);\n}\n\nfunction getDeployNowOpenAiModelId(env: NodeJS.ProcessEnv): string | undefined {\n\treturn (\n\t\t(getForgeRuntimeModelProvider(env) === \"openai\" ? readNonEmptyEnv(env, FORGE_RUNTIME_MODEL_ID_ENV) : undefined) ??\n\t\treadNonEmptyEnv(env, OPENAI_MODEL_ID_ENV)\n\t);\n}\n\nfunction getDeployNowAnthropicModelId(env: NodeJS.ProcessEnv): string | undefined {\n\treturn (\n\t\t(getForgeRuntimeModelProvider(env) === \"anthropic\"\n\t\t\t? readNonEmptyEnv(env, FORGE_RUNTIME_MODEL_ID_ENV)\n\t\t\t: undefined) ?? readNonEmptyEnv(env, ANTHROPIC_MODEL_ID_ENV)\n\t);\n}\n\nfunction getForgeRuntimeModelProvider(env: NodeJS.ProcessEnv): string | undefined {\n\treturn readNonEmptyEnv(env, FORGE_RUNTIME_MODEL_PROVIDER_ENV)?.toLowerCase();\n}\n\nfunction isForgeRuntimeBedrockProvider(env: NodeJS.ProcessEnv): boolean {\n\tconst runtimeProvider = getForgeRuntimeModelProvider(env);\n\treturn runtimeProvider === \"bedrock\" || runtimeProvider === AMAZON_BEDROCK_PROVIDER;\n}\n\nfunction createUnsupportedHumainSsoProvider() {\n\treturn {\n\t\tname: \"HUMAIN SSO\",\n\t\tasync login(): Promise<OAuthCredentials> {\n\t\t\tthrow new Error(HUMAIN_SSO_UNSUPPORTED_MESSAGE);\n\t\t},\n\t\tasync refreshToken(): Promise<OAuthCredentials> {\n\t\t\tthrow new Error(HUMAIN_SSO_UNSUPPORTED_MESSAGE);\n\t\t},\n\t\tgetApiKey(): string {\n\t\t\tthrow new Error(HUMAIN_SSO_UNSUPPORTED_MESSAGE);\n\t\t},\n\t};\n}\n\nfunction getHumainCodeModelIds(env: NodeJS.ProcessEnv): string[] {\n\tconst configuredModels = readCsvEnv(env, HUMAIN_CODE_MODELS_ENV);\n\tconst shorthandModels = configuredModels.length > 0 ? configuredModels : readCsvEnv(env, HC_MODELS_ENV);\n\treturn shorthandModels.length > 0 ? shorthandModels : DEFAULT_HUMAIN_CODE_MODELS;\n}\n\nfunction getHumainCodeModels(env: NodeJS.ProcessEnv): ProviderModelConfig[] {\n\treturn getHumainCodeModelIds(env).map((id) => toModelConfig(id));\n}\n\nfunction registerDeployNowBindingProviders(pi: ExtensionAPI, env: NodeJS.ProcessEnv): void {\n\tconst bedrockBaseUrl = readNonEmptyEnv(env, DEPLOYNOW_BEDROCK_BASE_URL_ENV);\n\tconst bedrockModel = getDeployNowBedrockModelId(env);\n\tif (bedrockBaseUrl && hasDeployNowBedrockBindingConfig(env)) {\n\t\tpi.registerProvider(AMAZON_BEDROCK_PROVIDER, {\n\t\t\tname: \"DeployNow Bedrock Binding\",\n\t\t\tbaseUrl: bedrockBaseUrl,\n\t\t\tapiKey: getDeployNowCredential(env, AWS_ACCESS_KEY_ID_ENV),\n\t\t\tenv: getDeployNowBedrockRequestEnv(env),\n\t\t\tapi: \"bedrock-converse-stream\",\n\t\t\t...(bedrockModel ? { models: [toModelConfig(bedrockModel, \"bedrock-converse-stream\")] } : {}),\n\t\t});\n\t}\n\n\tconst anthropicBaseUrl = readNonEmptyEnv(env, DEPLOYNOW_ANTHROPIC_BASE_URL_ENV);\n\tconst anthropicModel = getDeployNowAnthropicModelId(env);\n\tif (anthropicBaseUrl && hasDeployNowAnthropicBindingConfig(env)) {\n\t\tpi.registerProvider(ANTHROPIC_PROVIDER, {\n\t\t\tname: \"DeployNow Anthropic Binding\",\n\t\t\tbaseUrl: anthropicBaseUrl,\n\t\t\tapiKey: getDeployNowCredential(env, ANTHROPIC_API_KEY_ENV),\n\t\t\tapi: \"anthropic-messages\",\n\t\t\t...(anthropicModel ? { models: [toModelConfig(anthropicModel, \"anthropic-messages\")] } : {}),\n\t\t});\n\t}\n\n\tconst openAiBaseUrl = readNonEmptyEnv(env, DEPLOYNOW_OPENAI_BASE_URL_ENV);\n\tconst openAiModel = getDeployNowOpenAiModelId(env);\n\tif (openAiBaseUrl && hasDeployNowOpenAiBindingConfig(env)) {\n\t\tpi.registerProvider(OPENAI_PROVIDER, {\n\t\t\tname: \"DeployNow OpenAI Binding\",\n\t\t\tbaseUrl: openAiBaseUrl,\n\t\t\tapiKey: getDeployNowCredential(env, OPENAI_API_KEY_ENV),\n\t\t\tapi: \"openai-completions\",\n\t\t\t...(openAiModel ? { models: [toModelConfig(openAiModel, \"openai-completions\")] } : {}),\n\t\t});\n\t}\n}\n\nasync function registerHumainProviders(pi: ExtensionAPI, env: NodeJS.ProcessEnv): Promise<void> {\n\tconst localBaseUrl = getLocalBaseUrl(env);\n\tconst localModels = await getHumainLocalModelConfigs(env);\n\tif (localBaseUrl && localModels.length > 0) {\n\t\tpi.registerProvider(HUMAIN_LOCAL_PROVIDER, {\n\t\t\tname: \"HUMAIN Local\",\n\t\t\tbaseUrl: localBaseUrl,\n\t\t\tapiKey: getLocalApiKey(env) ?? \"local\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tauthHeader: Boolean(getLocalApiKey(env)),\n\t\t\tmodels: localModels,\n\t\t});\n\t}\n\n\tconst humainCodeBaseUrl = getHumainCodeBaseUrl(env);\n\tconst humainCodeApiKey = getHumainCodeApiKey(env);\n\tif (humainCodeBaseUrl && humainCodeApiKey) {\n\t\tpi.registerProvider(HUMAIN_CODE_PROVIDER, {\n\t\t\tname: \"HUMAIN Code\",\n\t\t\tbaseUrl: humainCodeBaseUrl,\n\t\t\tapiKey: humainCodeApiKey,\n\t\t\tapi: \"openai-completions\",\n\t\t\tauthHeader: true,\n\t\t\tmodels: getHumainCodeModels(env),\n\t\t});\n\t}\n\n\tregisterDeployNowBindingProviders(pi, env);\n\n\tpi.registerProvider(HUMAIN_SSO_PROVIDER, {\n\t\tname: \"HUMAIN SSO\",\n\t\toauth: createUnsupportedHumainSsoProvider(),\n\t});\n}\n\nexport function getHumainDefaultPackageSources(): PackageSource[] {\n\treturn [];\n}\n\nexport function createHumainProviderExtensionFactory(\n\tenv: NodeJS.ProcessEnv,\n\thomeDirectory: string = homedir(),\n): ExtensionFactory {\n\treturn async (pi) => {\n\t\tawait registerHumainProviders(pi, env);\n\n\t\tpi.on(\"session_start\", (event, ctx) => {\n\t\t\tif (event.reason === \"startup\") {\n\t\t\t\tctx.ui.setTheme(\"humain-dark\");\n\t\t\t\tcleanupLegacyWorkflowTiers(getLegacyWorkflowTierPaths(homeDirectory));\n\t\t\t}\n\t\t});\n\t};\n}\n\nexport function getHumainBundledExtensionFactories(env: NodeJS.ProcessEnv): ExtensionFactory[] {\n\treturn [\n\t\tcreateHumainProviderExtensionFactory(env),\n\t\tcreateHumainWebAccessExtensionFactory(),\n\t\tcreateHumainMcpAdapterExtensionFactory(),\n\t];\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/humain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAGxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,sCAAsC,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,qCAAqC,EAAE,MAAM,uBAAuB,CAAC;AAE9E,MAAM,CAAC,MAAM,qBAAqB,GAAG,cAAc,CAAC;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAClD,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEhE,wBAAwB,CAAC,qBAAqB,CAAC,CAAC;AAEhD,MAAM,gBAAgB,GAAG,8BAA8B,CAAC;AACxD,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AAC5D,MAAM,yBAAyB,GAAG,6BAA6B,CAAC;AAChE,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAC1D,MAAM,wBAAwB,GAAG,4BAA4B,CAAC;AAC9D,MAAM,2BAA2B,GAAG,mDAAmD,CAAC;AACxF,MAAM,eAAe,GAAG,6BAA6B,CAAC;AACtD,MAAM,cAAc,GAAG,4BAA4B,CAAC;AACpD,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAClD,MAAM,wBAAwB,GAAG,sCAAsC,CAAC;AACxE,MAAM,uBAAuB,GAAG,qCAAqC,CAAC;AACtE,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AACpE,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;AACnD,MAAM,yBAAyB,GAAG,kBAAkB,CAAC;AACrD,MAAM,mCAAmC,GAAG,iCAAiC,CAAC;AAC9E,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACzC,wBAAwB;IACxB,yBAAyB;IACzB,mCAAmC;CACnC,CAAC,CAAC;AACH,MAAM,8BAA8B,GAAG,4BAA4B,CAAC;AACpE,MAAM,gCAAgC,GAAG,oBAAoB,CAAC;AAC9D,MAAM,6BAA6B,GAAG,iBAAiB,CAAC;AACxD,MAAM,cAAc,GAAG,YAAY,CAAC;AACpC,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAClD,MAAM,yBAAyB,GAAG,uBAAuB,CAAC;AAC1D,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAClD,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAClD,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAC5C,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAChD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAC9C,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AACpD,MAAM,gCAAgC,GAAG,8BAA8B,CAAC;AACxE,MAAM,0BAA0B,GAAG,wBAAwB,CAAC;AAC5D,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAC5C,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,wBAAwB,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AACtF,MAAM,uBAAuB,GAAG,gBAAgB,CAAC;AACjD,MAAM,kBAAkB,GAAG,WAAW,CAAC;AACvC,MAAM,eAAe,GAAG,QAAQ,CAAC;AACjC,MAAM,8BAA8B,GAAG,kCAAkC,CAAC;AAM1E,MAAM,0BAA0B,GAAG,CAAC,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC;AAE9G,SAAS,UAAU,CAAC,GAAsB,EAAE,GAAW;IACtD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,GAAG;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,eAAe,CAAC,GAAsB,EAAE,GAAW;IAC3D,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAClC,CAAC;AAED,SAAS,aAAa,CAAC,EAAU,EAAE,GAAG,GAAQ,oBAAoB;IACjE,MAAM,MAAM,GAAwB;QACnC,EAAE;QACF,IAAI,EAAE,EAAE;QACR,GAAG;QACH,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,wBAAwB;QAC9B,aAAa,EAAE,4BAA4B;QAC3C,SAAS,EAAE,wBAAwB;KACnC,CAAC;IAEF,IAAI,GAAG,KAAK,oBAAoB,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,GAAG;YACf,aAAa,EAAE,KAAK;YACpB,qBAAqB,EAAE,KAAK;YAC5B,uBAAuB,EAAE,KAAK;YAC9B,wBAAwB,EAAE,KAAK;YAC/B,cAAc,EAAE,YAAY;YAC5B,kBAAkB,EAAE,KAAK;YACzB,0BAA0B,EAAE,KAAK;SACjC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,GAAsB;IAC1D,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,KAAK,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpH,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE;YAChG,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;SACnE,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;QAC9D,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;aACzB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACrE,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,GAAsB;IACtE,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,eAAe,CAAC,GAAsB;IAC9C,OAAO,GAAG,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,cAAc,CAAC,GAAsB;IAC7C,OAAO,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,wBAAwB,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAsB;IACnD,OAAO,GAAG,CAAC,wBAAwB,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAsB;IAClD,OAAO,GAAG,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAyB;IAC5D,OAAO,KAAK,KAAK,SAAS,IAAI,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAsB,EAAE,GAAW;IAClE,OAAO,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,wBAAwB,CAAC;AAC9D,CAAC;AAED,SAAS,6BAA6B,CAAC,GAAsB;IAC5D,MAAM,UAAU,GAA2B;QAC1C,CAAC,qBAAqB,CAAC,EAAE,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,CAAC;QAC3E,CAAC,yBAAyB,CAAC,EAAE,sBAAsB,CAAC,GAAG,EAAE,yBAAyB,CAAC;QACnF,CAAC,cAAc,CAAC,EAAE,eAAe,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,EAAE;KAC5D,CAAC;IACF,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;IACjE,IAAI,YAAY,EAAE,CAAC;QAClB,UAAU,CAAC,qBAAqB,CAAC,GAAG,YAAY,CAAC;IAClD,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,SAAS,gCAAgC,CAAC,GAAsB;IAC/D,OAAO,OAAO,CACb,eAAe,CAAC,GAAG,EAAE,8BAA8B,CAAC;QACnD,eAAe,CAAC,GAAG,EAAE,cAAc,CAAC;QACpC,0BAA0B,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACtD,0BAA0B,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAC3D,CAAC;AACH,CAAC;AAED,SAAS,kCAAkC,CAAC,GAAsB;IACjE,OAAO,OAAO,CACb,eAAe,CAAC,GAAG,EAAE,gCAAgC,CAAC,IAAI,0BAA0B,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAChH,CAAC;AACH,CAAC;AAED,SAAS,+BAA+B,CAAC,GAAsB;IAC9D,OAAO,OAAO,CACb,eAAe,CAAC,GAAG,EAAE,6BAA6B,CAAC,IAAI,0BAA0B,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAC1G,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAsB;IACzD,OAAO,CACN,CAAC,6BAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnG,eAAe,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAC1C,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAsB;IACxD,OAAO,CACN,CAAC,4BAA4B,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/G,eAAe,CAAC,GAAG,EAAE,mBAAmB,CAAC,CACzC,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,GAAsB;IAC3D,OAAO,CACN,CAAC,4BAA4B,CAAC,GAAG,CAAC,KAAK,WAAW;QACjD,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,0BAA0B,CAAC;QAClD,CAAC,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAC7D,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,GAAsB;IAC3D,OAAO,eAAe,CAAC,GAAG,EAAE,gCAAgC,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,6BAA6B,CAAC,GAAsB;IAC5D,MAAM,eAAe,GAAG,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAC1D,OAAO,eAAe,KAAK,SAAS,IAAI,eAAe,KAAK,uBAAuB,CAAC;AACrF,CAAC;AAED,SAAS,kCAAkC;IAC1C,OAAO;QACN,IAAI,EAAE,YAAY;QAClB,KAAK,CAAC,KAAK;YACV,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,YAAY;YACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACjD,CAAC;QACD,SAAS;YACR,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACjD,CAAC;KACD,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAsB;IACpD,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACjE,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACxG,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,0BAA0B,CAAC;AAClF,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAsB;IAClD,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,iCAAiC,CAAC,EAAgB,EAAE,GAAsB;IAClF,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,cAAc,IAAI,gCAAgC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7D,EAAE,CAAC,gBAAgB,CAAC,uBAAuB,EAAE;YAC5C,IAAI,EAAE,2BAA2B;YACjC,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAC1D,GAAG,EAAE,6BAA6B,CAAC,GAAG,CAAC;YACvC,GAAG,EAAE,yBAAyB;YAC9B,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7F,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;IAChF,MAAM,cAAc,GAAG,4BAA4B,CAAC,GAAG,CAAC,CAAC;IACzD,IAAI,gBAAgB,IAAI,kCAAkC,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;YACvC,IAAI,EAAE,6BAA6B;YACnC,OAAO,EAAE,gBAAgB;YACzB,MAAM,EAAE,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAC1D,GAAG,EAAE,oBAAoB;YACzB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5F,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,EAAE,6BAA6B,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,aAAa,IAAI,+BAA+B,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,EAAE,CAAC,gBAAgB,CAAC,eAAe,EAAE;YACpC,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,aAAa;YACtB,MAAM,EAAE,sBAAsB,CAAC,GAAG,EAAE,kBAAkB,CAAC;YACvD,GAAG,EAAE,oBAAoB;YACzB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtF,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,EAAgB,EAAE,GAAsB;IAC9E,EAAE,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,MAAM,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,YAAY,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,EAAE,CAAC,gBAAgB,CAAC,qBAAqB,EAAE;YAC1C,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,IAAI,OAAO;YACtC,GAAG,EAAE,oBAAoB;YACzB,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,EAAE,WAAW;SACnB,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,iBAAiB,IAAI,gBAAgB,EAAE,CAAC;QAC3C,EAAE,CAAC,gBAAgB,CAAC,oBAAoB,EAAE;YACzC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,gBAAgB;YACxB,GAAG,EAAE,oBAAoB;YACzB,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC;SAChC,CAAC,CAAC;IACJ,CAAC;IAED,iCAAiC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAE3C,EAAE,CAAC,gBAAgB,CAAC,mBAAmB,EAAE;QACxC,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,kCAAkC,EAAE;KAC3C,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC7C,OAAO,EAAE,CAAC;AACX,CAAC;AAED,MAAM,UAAU,oCAAoC,CACnD,GAAsB,EACtB,aAAa,GAAW,OAAO,EAAE;IAEjC,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE;QACnB,MAAM,uBAAuB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAEvC,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACrC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAC/B,0BAA0B,CAAC,0BAA0B,CAAC,aAAa,CAAC,CAAC,CAAC;YACvE,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,GAAsB;IACxE,OAAO;QACN,oCAAoC,CAAC,GAAG,CAAC;QACzC,qCAAqC,EAAE;QACvC,sCAAsC,EAAE;KACxC,CAAC;AACH,CAAC","sourcesContent":["import { homedir } from \"node:os\";\nimport type { Api, OAuthCredentials } from \"@earendil-works/pi-ai\";\nimport { setBedrockProviderModule } from \"@earendil-works/pi-ai/compat\";\nimport type { ExtensionAPI, ExtensionFactory, ProviderModelConfig } from \"../core/extensions/types.ts\";\nimport type { PackageSource } from \"../core/settings-manager.ts\";\nimport { bedrockProviderModule } from \"./bedrock-provider/vendor/index.bundle.mjs\";\nimport { cleanupLegacyWorkflowTiers, getLegacyWorkflowTierPaths } from \"./legacy-workflow-tiers.ts\";\nimport { createHumainMcpAdapterExtensionFactory } from \"./mcp-adapter.ts\";\nimport { createHumainNodeProvider } from \"./node-provider.ts\";\nimport { createHumainWebAccessExtensionFactory } from \"./web-access/index.ts\";\n\nexport const HUMAIN_LOCAL_PROVIDER = \"humain-local\";\nexport const HUMAIN_CODE_PROVIDER = \"humain-code\";\nexport const HUMAIN_SSO_PROVIDER = \"humain-sso\";\nexport const HUMAIN_FORGE_CWD_ENV = \"HUMAIN_TERMINAL_FORGE_CWD\";\n\nsetBedrockProviderModule(bedrockProviderModule);\n\nconst LOCAL_MODELS_ENV = \"HUMAIN_TERMINAL_LOCAL_MODELS\";\nconst LOCAL_BASE_URL_ENV = \"HUMAIN_TERMINAL_LOCAL_BASE_URL\";\nconst LEGACY_LOCAL_BASE_URL_ENV = \"HUMAIN_TERMINAL_AI_BASE_URL\";\nconst LOCAL_API_KEY_ENV = \"HUMAIN_TERMINAL_LOCAL_API_KEY\";\nconst LEGACY_LOCAL_API_KEY_ENV = \"HUMAIN_TERMINAL_AI_API_KEY\";\nconst LOCAL_DISCOVERY_TIMEOUT_ENV = \"HUMAIN_TERMINAL_LOCAL_MODELS_DISCOVERY_TIMEOUT_MS\";\nconst HC_BASE_URL_ENV = \"HUMAIN_TERMINAL_HC_BASE_URL\";\nconst HC_API_KEY_ENV = \"HUMAIN_TERMINAL_HC_API_KEY\";\nconst HC_MODELS_ENV = \"HUMAIN_TERMINAL_HC_MODELS\";\nconst HUMAIN_CODE_BASE_URL_ENV = \"HUMAIN_TERMINAL_HUMAIN_CODE_BASE_URL\";\nconst HUMAIN_CODE_API_KEY_ENV = \"HUMAIN_TERMINAL_HUMAIN_CODE_API_KEY\";\nconst HUMAIN_CODE_MODELS_ENV = \"HUMAIN_TERMINAL_HUMAIN_CODE_MODELS\";\nconst DEPLOYNOW_PROXY_SENTINEL = \"deploynow-proxy\";\nconst DEPLOYNOW_BROKER_SENTINEL = \"deploynow-broker\";\nconst DEPLOYNOW_ANTHROPIC_LEGACY_SENTINEL = \"not-a-real-key-routed-via-proxy\";\nconst DEPLOYNOW_PROXY_SENTINELS = new Set([\n\tDEPLOYNOW_PROXY_SENTINEL,\n\tDEPLOYNOW_BROKER_SENTINEL,\n\tDEPLOYNOW_ANTHROPIC_LEGACY_SENTINEL,\n]);\nconst DEPLOYNOW_BEDROCK_BASE_URL_ENV = \"ANTHROPIC_BEDROCK_BASE_URL\";\nconst DEPLOYNOW_ANTHROPIC_BASE_URL_ENV = \"ANTHROPIC_BASE_URL\";\nconst DEPLOYNOW_OPENAI_BASE_URL_ENV = \"OPENAI_BASE_URL\";\nconst AWS_REGION_ENV = \"AWS_REGION\";\nconst AWS_ACCESS_KEY_ID_ENV = \"AWS_ACCESS_KEY_ID\";\nconst AWS_SECRET_ACCESS_KEY_ENV = \"AWS_SECRET_ACCESS_KEY\";\nconst AWS_SESSION_TOKEN_ENV = \"AWS_SESSION_TOKEN\";\nconst ANTHROPIC_API_KEY_ENV = \"ANTHROPIC_API_KEY\";\nconst OPENAI_API_KEY_ENV = \"OPENAI_API_KEY\";\nconst BEDROCK_MODEL_ID_ENV = \"BEDROCK_MODEL_ID\";\nconst OPENAI_MODEL_ID_ENV = \"OPENAI_MODEL_ID\";\nconst ANTHROPIC_MODEL_ID_ENV = \"ANTHROPIC_MODEL_ID\";\nconst FORGE_RUNTIME_MODEL_PROVIDER_ENV = \"FORGE_RUNTIME_MODEL_PROVIDER\";\nconst FORGE_RUNTIME_MODEL_ID_ENV = \"FORGE_RUNTIME_MODEL_ID\";\nconst DEFAULT_LOCAL_CONTEXT_WINDOW = 128000;\nconst DEFAULT_LOCAL_MAX_TOKENS = 16384;\nconst DEFAULT_LOCAL_MODEL_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };\nconst AMAZON_BEDROCK_PROVIDER = \"amazon-bedrock\";\nconst ANTHROPIC_PROVIDER = \"anthropic\";\nconst OPENAI_PROVIDER = \"openai\";\nconst HUMAIN_SSO_UNSUPPORTED_MESSAGE = \"HUMAIN SSO is not supported yet.\";\n\ninterface DiscoveryModelList {\n\tdata?: Array<{ id?: unknown }>;\n}\n\nconst DEFAULT_HUMAIN_CODE_MODELS = [\"humain-planning\", \"humain-code\", \"humain-review\", \"humain-long-context\"];\n\nfunction readCsvEnv(env: NodeJS.ProcessEnv, key: string): string[] {\n\tconst raw = env[key];\n\tif (!raw) return [];\n\treturn raw\n\t\t.split(\",\")\n\t\t.map((item) => item.trim())\n\t\t.filter((item) => item.length > 0);\n}\n\nfunction readNonEmptyEnv(env: NodeJS.ProcessEnv, key: string): string | undefined {\n\tconst value = env[key]?.trim();\n\treturn value ? value : undefined;\n}\n\nfunction toModelConfig(id: string, api: Api = \"openai-completions\"): ProviderModelConfig {\n\tconst config: ProviderModelConfig = {\n\t\tid,\n\t\tname: id,\n\t\tapi,\n\t\treasoning: false,\n\t\tinput: [\"text\"],\n\t\tcost: DEFAULT_LOCAL_MODEL_COST,\n\t\tcontextWindow: DEFAULT_LOCAL_CONTEXT_WINDOW,\n\t\tmaxTokens: DEFAULT_LOCAL_MAX_TOKENS,\n\t};\n\n\tif (api === \"openai-completions\") {\n\t\tconfig.compat = {\n\t\t\tsupportsStore: false,\n\t\t\tsupportsDeveloperRole: false,\n\t\t\tsupportsReasoningEffort: false,\n\t\t\tsupportsUsageInStreaming: false,\n\t\t\tmaxTokensField: \"max_tokens\",\n\t\t\tsupportsStrictMode: false,\n\t\t\tsupportsLongCacheRetention: false,\n\t\t};\n\t}\n\n\treturn config;\n}\n\nasync function discoverLocalModelIds(env: NodeJS.ProcessEnv): Promise<string[]> {\n\tconst baseUrl = getLocalBaseUrl(env);\n\tif (!baseUrl) return [];\n\tconst timeoutMs = Number(env[LOCAL_DISCOVERY_TIMEOUT_ENV] ?? \"750\");\n\tconst controller = new AbortController();\n\tconst timeout = setTimeout(() => controller.abort(), Number.isFinite(timeoutMs) && timeoutMs > 0 ? timeoutMs : 750);\n\tconst apiKey = getLocalApiKey(env);\n\ttry {\n\t\tconst response = await fetch(new URL(\"models\", baseUrl.endsWith(\"/\") ? baseUrl : `${baseUrl}/`), {\n\t\t\tsignal: controller.signal,\n\t\t\theaders: apiKey ? { Authorization: `Bearer ${apiKey}` } : undefined,\n\t\t});\n\t\tif (!response.ok) return [];\n\t\tconst payload = (await response.json()) as DiscoveryModelList;\n\t\treturn (payload.data ?? [])\n\t\t\t.map((model) => (typeof model.id === \"string\" ? model.id.trim() : \"\"))\n\t\t\t.filter((id) => id.length > 0);\n\t} catch {\n\t\treturn [];\n\t} finally {\n\t\tclearTimeout(timeout);\n\t}\n}\n\nexport async function getHumainLocalModelConfigs(env: NodeJS.ProcessEnv): Promise<ProviderModelConfig[]> {\n\tconst envModelIds = readCsvEnv(env, LOCAL_MODELS_ENV);\n\tconst modelIds = envModelIds.length > 0 ? envModelIds : await discoverLocalModelIds(env);\n\treturn [...new Set(modelIds)].map((id) => toModelConfig(id));\n}\n\nfunction getLocalBaseUrl(env: NodeJS.ProcessEnv): string | undefined {\n\treturn env[LOCAL_BASE_URL_ENV] ?? env[LEGACY_LOCAL_BASE_URL_ENV];\n}\n\nfunction getLocalApiKey(env: NodeJS.ProcessEnv): string | undefined {\n\treturn env[LOCAL_API_KEY_ENV] ?? env[LEGACY_LOCAL_API_KEY_ENV];\n}\n\nfunction getHumainCodeBaseUrl(env: NodeJS.ProcessEnv): string | undefined {\n\treturn env[HUMAIN_CODE_BASE_URL_ENV] ?? env[HC_BASE_URL_ENV];\n}\n\nfunction getHumainCodeApiKey(env: NodeJS.ProcessEnv): string | undefined {\n\treturn env[HUMAIN_CODE_API_KEY_ENV] ?? env[HC_API_KEY_ENV];\n}\n\nfunction isDeployNowProxyCredential(value: string | undefined): boolean {\n\treturn value !== undefined && DEPLOYNOW_PROXY_SENTINELS.has(value);\n}\n\nfunction getDeployNowCredential(env: NodeJS.ProcessEnv, key: string): string {\n\treturn readNonEmptyEnv(env, key) ?? DEPLOYNOW_PROXY_SENTINEL;\n}\n\nfunction getDeployNowBedrockRequestEnv(env: NodeJS.ProcessEnv): Record<string, string> {\n\tconst requestEnv: Record<string, string> = {\n\t\t[AWS_ACCESS_KEY_ID_ENV]: getDeployNowCredential(env, AWS_ACCESS_KEY_ID_ENV),\n\t\t[AWS_SECRET_ACCESS_KEY_ENV]: getDeployNowCredential(env, AWS_SECRET_ACCESS_KEY_ENV),\n\t\t[AWS_REGION_ENV]: readNonEmptyEnv(env, AWS_REGION_ENV) ?? \"\",\n\t};\n\tconst sessionToken = readNonEmptyEnv(env, AWS_SESSION_TOKEN_ENV);\n\tif (sessionToken) {\n\t\trequestEnv[AWS_SESSION_TOKEN_ENV] = sessionToken;\n\t}\n\treturn requestEnv;\n}\n\nfunction hasDeployNowBedrockBindingConfig(env: NodeJS.ProcessEnv): boolean {\n\treturn Boolean(\n\t\treadNonEmptyEnv(env, DEPLOYNOW_BEDROCK_BASE_URL_ENV) &&\n\t\t\treadNonEmptyEnv(env, AWS_REGION_ENV) &&\n\t\t\tisDeployNowProxyCredential(env[AWS_ACCESS_KEY_ID_ENV]) &&\n\t\t\tisDeployNowProxyCredential(env[AWS_SECRET_ACCESS_KEY_ENV]),\n\t);\n}\n\nfunction hasDeployNowAnthropicBindingConfig(env: NodeJS.ProcessEnv): boolean {\n\treturn Boolean(\n\t\treadNonEmptyEnv(env, DEPLOYNOW_ANTHROPIC_BASE_URL_ENV) && isDeployNowProxyCredential(env[ANTHROPIC_API_KEY_ENV]),\n\t);\n}\n\nfunction hasDeployNowOpenAiBindingConfig(env: NodeJS.ProcessEnv): boolean {\n\treturn Boolean(\n\t\treadNonEmptyEnv(env, DEPLOYNOW_OPENAI_BASE_URL_ENV) && isDeployNowProxyCredential(env[OPENAI_API_KEY_ENV]),\n\t);\n}\n\nfunction getDeployNowBedrockModelId(env: NodeJS.ProcessEnv): string | undefined {\n\treturn (\n\t\t(isForgeRuntimeBedrockProvider(env) ? readNonEmptyEnv(env, FORGE_RUNTIME_MODEL_ID_ENV) : undefined) ??\n\t\treadNonEmptyEnv(env, BEDROCK_MODEL_ID_ENV)\n\t);\n}\n\nfunction getDeployNowOpenAiModelId(env: NodeJS.ProcessEnv): string | undefined {\n\treturn (\n\t\t(getForgeRuntimeModelProvider(env) === \"openai\" ? readNonEmptyEnv(env, FORGE_RUNTIME_MODEL_ID_ENV) : undefined) ??\n\t\treadNonEmptyEnv(env, OPENAI_MODEL_ID_ENV)\n\t);\n}\n\nfunction getDeployNowAnthropicModelId(env: NodeJS.ProcessEnv): string | undefined {\n\treturn (\n\t\t(getForgeRuntimeModelProvider(env) === \"anthropic\"\n\t\t\t? readNonEmptyEnv(env, FORGE_RUNTIME_MODEL_ID_ENV)\n\t\t\t: undefined) ?? readNonEmptyEnv(env, ANTHROPIC_MODEL_ID_ENV)\n\t);\n}\n\nfunction getForgeRuntimeModelProvider(env: NodeJS.ProcessEnv): string | undefined {\n\treturn readNonEmptyEnv(env, FORGE_RUNTIME_MODEL_PROVIDER_ENV)?.toLowerCase();\n}\n\nfunction isForgeRuntimeBedrockProvider(env: NodeJS.ProcessEnv): boolean {\n\tconst runtimeProvider = getForgeRuntimeModelProvider(env);\n\treturn runtimeProvider === \"bedrock\" || runtimeProvider === AMAZON_BEDROCK_PROVIDER;\n}\n\nfunction createUnsupportedHumainSsoProvider() {\n\treturn {\n\t\tname: \"HUMAIN SSO\",\n\t\tasync login(): Promise<OAuthCredentials> {\n\t\t\tthrow new Error(HUMAIN_SSO_UNSUPPORTED_MESSAGE);\n\t\t},\n\t\tasync refreshToken(): Promise<OAuthCredentials> {\n\t\t\tthrow new Error(HUMAIN_SSO_UNSUPPORTED_MESSAGE);\n\t\t},\n\t\tgetApiKey(): string {\n\t\t\tthrow new Error(HUMAIN_SSO_UNSUPPORTED_MESSAGE);\n\t\t},\n\t};\n}\n\nfunction getHumainCodeModelIds(env: NodeJS.ProcessEnv): string[] {\n\tconst configuredModels = readCsvEnv(env, HUMAIN_CODE_MODELS_ENV);\n\tconst shorthandModels = configuredModels.length > 0 ? configuredModels : readCsvEnv(env, HC_MODELS_ENV);\n\treturn shorthandModels.length > 0 ? shorthandModels : DEFAULT_HUMAIN_CODE_MODELS;\n}\n\nfunction getHumainCodeModels(env: NodeJS.ProcessEnv): ProviderModelConfig[] {\n\treturn getHumainCodeModelIds(env).map((id) => toModelConfig(id));\n}\n\nfunction registerDeployNowBindingProviders(pi: ExtensionAPI, env: NodeJS.ProcessEnv): void {\n\tconst bedrockBaseUrl = readNonEmptyEnv(env, DEPLOYNOW_BEDROCK_BASE_URL_ENV);\n\tconst bedrockModel = getDeployNowBedrockModelId(env);\n\tif (bedrockBaseUrl && hasDeployNowBedrockBindingConfig(env)) {\n\t\tpi.registerProvider(AMAZON_BEDROCK_PROVIDER, {\n\t\t\tname: \"DeployNow Bedrock Binding\",\n\t\t\tbaseUrl: bedrockBaseUrl,\n\t\t\tapiKey: getDeployNowCredential(env, AWS_ACCESS_KEY_ID_ENV),\n\t\t\tenv: getDeployNowBedrockRequestEnv(env),\n\t\t\tapi: \"bedrock-converse-stream\",\n\t\t\t...(bedrockModel ? { models: [toModelConfig(bedrockModel, \"bedrock-converse-stream\")] } : {}),\n\t\t});\n\t}\n\n\tconst anthropicBaseUrl = readNonEmptyEnv(env, DEPLOYNOW_ANTHROPIC_BASE_URL_ENV);\n\tconst anthropicModel = getDeployNowAnthropicModelId(env);\n\tif (anthropicBaseUrl && hasDeployNowAnthropicBindingConfig(env)) {\n\t\tpi.registerProvider(ANTHROPIC_PROVIDER, {\n\t\t\tname: \"DeployNow Anthropic Binding\",\n\t\t\tbaseUrl: anthropicBaseUrl,\n\t\t\tapiKey: getDeployNowCredential(env, ANTHROPIC_API_KEY_ENV),\n\t\t\tapi: \"anthropic-messages\",\n\t\t\t...(anthropicModel ? { models: [toModelConfig(anthropicModel, \"anthropic-messages\")] } : {}),\n\t\t});\n\t}\n\n\tconst openAiBaseUrl = readNonEmptyEnv(env, DEPLOYNOW_OPENAI_BASE_URL_ENV);\n\tconst openAiModel = getDeployNowOpenAiModelId(env);\n\tif (openAiBaseUrl && hasDeployNowOpenAiBindingConfig(env)) {\n\t\tpi.registerProvider(OPENAI_PROVIDER, {\n\t\t\tname: \"DeployNow OpenAI Binding\",\n\t\t\tbaseUrl: openAiBaseUrl,\n\t\t\tapiKey: getDeployNowCredential(env, OPENAI_API_KEY_ENV),\n\t\t\tapi: \"openai-completions\",\n\t\t\t...(openAiModel ? { models: [toModelConfig(openAiModel, \"openai-completions\")] } : {}),\n\t\t});\n\t}\n}\n\nasync function registerHumainProviders(pi: ExtensionAPI, env: NodeJS.ProcessEnv): Promise<void> {\n\tpi.registerProvider(createHumainNodeProvider(env));\n\tconst localBaseUrl = getLocalBaseUrl(env);\n\tconst localModels = await getHumainLocalModelConfigs(env);\n\tif (localBaseUrl && localModels.length > 0) {\n\t\tpi.registerProvider(HUMAIN_LOCAL_PROVIDER, {\n\t\t\tname: \"HUMAIN Local\",\n\t\t\tbaseUrl: localBaseUrl,\n\t\t\tapiKey: getLocalApiKey(env) ?? \"local\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tauthHeader: Boolean(getLocalApiKey(env)),\n\t\t\tmodels: localModels,\n\t\t});\n\t}\n\n\tconst humainCodeBaseUrl = getHumainCodeBaseUrl(env);\n\tconst humainCodeApiKey = getHumainCodeApiKey(env);\n\tif (humainCodeBaseUrl && humainCodeApiKey) {\n\t\tpi.registerProvider(HUMAIN_CODE_PROVIDER, {\n\t\t\tname: \"HUMAIN Code\",\n\t\t\tbaseUrl: humainCodeBaseUrl,\n\t\t\tapiKey: humainCodeApiKey,\n\t\t\tapi: \"openai-completions\",\n\t\t\tauthHeader: true,\n\t\t\tmodels: getHumainCodeModels(env),\n\t\t});\n\t}\n\n\tregisterDeployNowBindingProviders(pi, env);\n\n\tpi.registerProvider(HUMAIN_SSO_PROVIDER, {\n\t\tname: \"HUMAIN SSO\",\n\t\toauth: createUnsupportedHumainSsoProvider(),\n\t});\n}\n\nexport function getHumainDefaultPackageSources(): PackageSource[] {\n\treturn [];\n}\n\nexport function createHumainProviderExtensionFactory(\n\tenv: NodeJS.ProcessEnv,\n\thomeDirectory: string = homedir(),\n): ExtensionFactory {\n\treturn async (pi) => {\n\t\tawait registerHumainProviders(pi, env);\n\n\t\tpi.on(\"session_start\", (event, ctx) => {\n\t\t\tif (event.reason === \"startup\") {\n\t\t\t\tctx.ui.setTheme(\"humain-dark\");\n\t\t\t\tcleanupLegacyWorkflowTiers(getLegacyWorkflowTierPaths(homeDirectory));\n\t\t\t}\n\t\t});\n\t};\n}\n\nexport function getHumainBundledExtensionFactories(env: NodeJS.ProcessEnv): ExtensionFactory[] {\n\treturn [\n\t\tcreateHumainProviderExtensionFactory(env),\n\t\tcreateHumainWebAccessExtensionFactory(),\n\t\tcreateHumainMcpAdapterExtensionFactory(),\n\t];\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { type ProviderStreams } from "@earendil-works/pi-ai";
2
+ export declare function withHumainNodeHttp(api: ProviderStreams): ProviderStreams;
3
+ //# sourceMappingURL=node-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-http.d.ts","sourceRoot":"","sources":["../../src/humain/node-http.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,KAAK,eAAe,EAEpB,MAAM,uBAAuB,CAAC;AAU/B,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CAgHxE"}
@@ -0,0 +1,119 @@
1
+ import { lazyStream, } from "@earendil-works/pi-ai";
2
+ const PERMANENT_LIMIT_CODES = new Set([
3
+ "weekly_cap_exceeded",
4
+ "quota_exceeded",
5
+ "partner_credit_limit_exceeded",
6
+ "insufficient_quota",
7
+ "billing_hard_limit_reached",
8
+ ]);
9
+ export function withHumainNodeHttp(api) {
10
+ const run = (model, context, options, simple) => lazyStream(model, async () => {
11
+ let httpError;
12
+ let requestId = null;
13
+ let retryAfter = null;
14
+ const key = options?.apiKey;
15
+ const redact = (value) => (key ? value.replaceAll(key, "[redacted]") : value);
16
+ const fetcher = options?.fetch ?? globalThis.fetch;
17
+ const requestOptions = {
18
+ ...options,
19
+ // The Anthropic adapter must not interpret a gateway key as an OAuth token.
20
+ apiKey: model.api === "anthropic-messages" ? "humain-node" : key,
21
+ fetch: async (input, init) => {
22
+ const headers = new Headers(init?.headers ?? (input instanceof Request ? input.headers : undefined));
23
+ if (key)
24
+ headers.set("Authorization", `Bearer ${key}`);
25
+ headers.delete("x-api-key");
26
+ if (model.api === "anthropic-messages") {
27
+ // The SDK appends /v1/messages?beta=true; Node exposes <configured base>/messages.
28
+ const url = `${model.baseUrl.replace(/\/+$/u, "")}/messages`;
29
+ input = input instanceof Request ? new Request(url, input) : url;
30
+ headers.delete("anthropic-beta");
31
+ }
32
+ requestId = null;
33
+ retryAfter = null;
34
+ httpError = undefined;
35
+ const response = await fetcher(input, { ...init, headers, redirect: "error" });
36
+ requestId = response.headers.get("x-request-id");
37
+ retryAfter = response.headers.get("retry-after");
38
+ if (response.ok)
39
+ return response;
40
+ const payload = await response
41
+ .clone()
42
+ .json()
43
+ .catch(() => undefined);
44
+ const error = typeof payload === "object" && payload !== null && "error" in payload ? payload.error : undefined;
45
+ const code = typeof error === "object" && error !== null
46
+ ? "code" in error && typeof error.code === "string"
47
+ ? error.code
48
+ : "type" in error && typeof error.type === "string"
49
+ ? error.type
50
+ : undefined
51
+ : undefined;
52
+ let retryable = !PERMANENT_LIMIT_CODES.has(code ?? "") &&
53
+ response.headers.get("x-should-retry") !== "false" &&
54
+ ([408, 409, 429].includes(response.status) || response.status >= 500);
55
+ httpError = { status: response.status, code: code && redact(code), retryable };
56
+ if (retryAfter) {
57
+ const retryAt = /^\d+(?:\.\d+)?$/u.test(retryAfter)
58
+ ? Date.now() + Number(retryAfter) * 1000
59
+ : Date.parse(retryAfter);
60
+ if (Number.isFinite(retryAt)) {
61
+ const delay = retryAt - Date.now();
62
+ const maxDelay = options?.maxRetryDelayMs ?? 60_000;
63
+ // Fail instead of shortening a server delay or overflowing the JS timer.
64
+ if (delay > 2_147_483_647 || (maxDelay > 0 && delay > maxDelay)) {
65
+ retryable = false;
66
+ httpError.retryable = false;
67
+ }
68
+ else {
69
+ httpError.retryAt = retryAt;
70
+ }
71
+ }
72
+ }
73
+ if (!retryable) {
74
+ const responseHeaders = new Headers(response.headers);
75
+ responseHeaders.set("x-should-retry", "false");
76
+ return new Response(response.body, {
77
+ status: response.status,
78
+ statusText: response.statusText,
79
+ headers: responseHeaders,
80
+ });
81
+ }
82
+ return response;
83
+ },
84
+ };
85
+ const source = simple
86
+ ? api.streamSimple(model, context, requestOptions)
87
+ : api.stream(model, context, requestOptions);
88
+ return (async function* () {
89
+ for await (const event of source) {
90
+ if (event.type === "error") {
91
+ event.error.errorMessage = redact([
92
+ event.error.errorMessage ?? "HUMAIN Node request failed",
93
+ httpError?.code && `code: ${httpError.code}`,
94
+ httpError?.status === 401 && "Run /login humain-node to replace the API key.",
95
+ httpError?.status === 404 &&
96
+ httpError.code === "model_not_found" &&
97
+ "Use /model to refresh the catalog and choose an available model (or restart with --list-models).",
98
+ retryAfter && `Retry-After: ${retryAfter}`,
99
+ requestId && `X-Request-ID: ${requestId}`,
100
+ ]
101
+ .filter(Boolean)
102
+ .join("; "));
103
+ if (httpError) {
104
+ event.error.diagnostics = [
105
+ ...(event.error.diagnostics ?? []),
106
+ { type: "provider_http_error", timestamp: Date.now(), details: httpError },
107
+ ];
108
+ }
109
+ }
110
+ yield event;
111
+ }
112
+ })();
113
+ });
114
+ return {
115
+ stream: (model, context, options) => run(model, context, options, false),
116
+ streamSimple: (model, context, options) => run(model, context, options, true),
117
+ };
118
+ }
119
+ //# sourceMappingURL=node-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-http.js","sourceRoot":"","sources":["../../src/humain/node-http.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Api,\n\ttype AssistantMessageEvent,\n\ttype Context,\n\tlazyStream,\n\ttype Model,\n\ttype ProviderStreams,\n\ttype SimpleStreamOptions,\n} from \"@earendil-works/pi-ai\";\n\nconst PERMANENT_LIMIT_CODES = new Set([\n\t\"weekly_cap_exceeded\",\n\t\"quota_exceeded\",\n\t\"partner_credit_limit_exceeded\",\n\t\"insufficient_quota\",\n\t\"billing_hard_limit_reached\",\n]);\n\nexport function withHumainNodeHttp(api: ProviderStreams): ProviderStreams {\n\tconst run = (model: Model<Api>, context: Context, options: SimpleStreamOptions | undefined, simple: boolean) =>\n\t\tlazyStream(model, async () => {\n\t\t\tlet httpError: Record<string, unknown> | undefined;\n\t\t\tlet requestId: string | null = null;\n\t\t\tlet retryAfter: string | null = null;\n\t\t\tconst key = options?.apiKey;\n\t\t\tconst redact = (value: string): string => (key ? value.replaceAll(key, \"[redacted]\") : value);\n\t\t\tconst fetcher = options?.fetch ?? globalThis.fetch;\n\t\t\tconst requestOptions = {\n\t\t\t\t...options,\n\t\t\t\t// The Anthropic adapter must not interpret a gateway key as an OAuth token.\n\t\t\t\tapiKey: model.api === \"anthropic-messages\" ? \"humain-node\" : key,\n\t\t\t\tfetch: async (input: Parameters<typeof fetch>[0], init?: RequestInit): Promise<Response> => {\n\t\t\t\t\tconst headers = new Headers(init?.headers ?? (input instanceof Request ? input.headers : undefined));\n\t\t\t\t\tif (key) headers.set(\"Authorization\", `Bearer ${key}`);\n\t\t\t\t\theaders.delete(\"x-api-key\");\n\t\t\t\t\tif (model.api === \"anthropic-messages\") {\n\t\t\t\t\t\t// The SDK appends /v1/messages?beta=true; Node exposes <configured base>/messages.\n\t\t\t\t\t\tconst url = `${model.baseUrl.replace(/\\/+$/u, \"\")}/messages`;\n\t\t\t\t\t\tinput = input instanceof Request ? new Request(url, input) : url;\n\t\t\t\t\t\theaders.delete(\"anthropic-beta\");\n\t\t\t\t\t}\n\t\t\t\t\trequestId = null;\n\t\t\t\t\tretryAfter = null;\n\t\t\t\t\thttpError = undefined;\n\t\t\t\t\tconst response = await fetcher(input, { ...init, headers, redirect: \"error\" });\n\t\t\t\t\trequestId = response.headers.get(\"x-request-id\");\n\t\t\t\t\tretryAfter = response.headers.get(\"retry-after\");\n\t\t\t\t\tif (response.ok) return response;\n\t\t\t\t\tconst payload: unknown = await response\n\t\t\t\t\t\t.clone()\n\t\t\t\t\t\t.json()\n\t\t\t\t\t\t.catch(() => undefined);\n\t\t\t\t\tconst error =\n\t\t\t\t\t\ttypeof payload === \"object\" && payload !== null && \"error\" in payload ? payload.error : undefined;\n\t\t\t\t\tconst code =\n\t\t\t\t\t\ttypeof error === \"object\" && error !== null\n\t\t\t\t\t\t\t? \"code\" in error && typeof error.code === \"string\"\n\t\t\t\t\t\t\t\t? error.code\n\t\t\t\t\t\t\t\t: \"type\" in error && typeof error.type === \"string\"\n\t\t\t\t\t\t\t\t\t? error.type\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tlet retryable =\n\t\t\t\t\t\t!PERMANENT_LIMIT_CODES.has(code ?? \"\") &&\n\t\t\t\t\t\tresponse.headers.get(\"x-should-retry\") !== \"false\" &&\n\t\t\t\t\t\t([408, 409, 429].includes(response.status) || response.status >= 500);\n\t\t\t\t\thttpError = { status: response.status, code: code && redact(code), retryable };\n\t\t\t\t\tif (retryAfter) {\n\t\t\t\t\t\tconst retryAt = /^\\d+(?:\\.\\d+)?$/u.test(retryAfter)\n\t\t\t\t\t\t\t? Date.now() + Number(retryAfter) * 1000\n\t\t\t\t\t\t\t: Date.parse(retryAfter);\n\t\t\t\t\t\tif (Number.isFinite(retryAt)) {\n\t\t\t\t\t\t\tconst delay = retryAt - Date.now();\n\t\t\t\t\t\t\tconst maxDelay = options?.maxRetryDelayMs ?? 60_000;\n\t\t\t\t\t\t\t// Fail instead of shortening a server delay or overflowing the JS timer.\n\t\t\t\t\t\t\tif (delay > 2_147_483_647 || (maxDelay > 0 && delay > maxDelay)) {\n\t\t\t\t\t\t\t\tretryable = false;\n\t\t\t\t\t\t\t\thttpError.retryable = false;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\thttpError.retryAt = retryAt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!retryable) {\n\t\t\t\t\t\tconst responseHeaders = new Headers(response.headers);\n\t\t\t\t\t\tresponseHeaders.set(\"x-should-retry\", \"false\");\n\t\t\t\t\t\treturn new Response(response.body, {\n\t\t\t\t\t\t\tstatus: response.status,\n\t\t\t\t\t\t\tstatusText: response.statusText,\n\t\t\t\t\t\t\theaders: responseHeaders,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn response;\n\t\t\t\t},\n\t\t\t};\n\t\t\tconst source = simple\n\t\t\t\t? api.streamSimple(model, context, requestOptions)\n\t\t\t\t: api.stream(model, context, requestOptions);\n\t\t\treturn (async function* (): AsyncGenerator<AssistantMessageEvent> {\n\t\t\t\tfor await (const event of source) {\n\t\t\t\t\tif (event.type === \"error\") {\n\t\t\t\t\t\tevent.error.errorMessage = redact(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\tevent.error.errorMessage ?? \"HUMAIN Node request failed\",\n\t\t\t\t\t\t\t\thttpError?.code && `code: ${httpError.code}`,\n\t\t\t\t\t\t\t\thttpError?.status === 401 && \"Run /login humain-node to replace the API key.\",\n\t\t\t\t\t\t\t\thttpError?.status === 404 &&\n\t\t\t\t\t\t\t\t\thttpError.code === \"model_not_found\" &&\n\t\t\t\t\t\t\t\t\t\"Use /model to refresh the catalog and choose an available model (or restart with --list-models).\",\n\t\t\t\t\t\t\t\tretryAfter && `Retry-After: ${retryAfter}`,\n\t\t\t\t\t\t\t\trequestId && `X-Request-ID: ${requestId}`,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t\t.join(\"; \"),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (httpError) {\n\t\t\t\t\t\t\tevent.error.diagnostics = [\n\t\t\t\t\t\t\t\t...(event.error.diagnostics ?? []),\n\t\t\t\t\t\t\t\t{ type: \"provider_http_error\", timestamp: Date.now(), details: httpError },\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tyield event;\n\t\t\t\t}\n\t\t\t})();\n\t\t});\n\treturn {\n\t\tstream: (model, context, options) => run(model, context, options, false),\n\t\tstreamSimple: (model, context, options) => run(model, context, options, true),\n\t};\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import { type Provider } from "@earendil-works/pi-ai";
2
+ export declare const HUMAIN_NODE_PROVIDER = "humain-node";
3
+ export declare function createHumainNodeProvider(env?: NodeJS.ProcessEnv): Provider;
4
+ //# sourceMappingURL=node-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-provider.d.ts","sourceRoot":"","sources":["../../src/humain/node-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAQN,KAAK,QAAQ,EAEb,MAAM,uBAAuB,CAAC;AAM/B,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAwRlD,wBAAgB,wBAAwB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,QAAQ,CAgGvF"}