@geminixiang/mikan 1.0.0-beta.84 → 1.0.0-beta.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -0
- package/README.md +10 -10
- package/dist/adapters/commands/session-view.js +1 -1
- package/dist/adapters/commands/session-view.js.map +1 -1
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +1 -8
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/github/activity.d.ts +3 -0
- package/dist/adapters/github/activity.d.ts.map +1 -0
- package/dist/adapters/github/activity.js +154 -0
- package/dist/adapters/github/activity.js.map +1 -0
- package/dist/adapters/github/bot.d.ts +10 -20
- package/dist/adapters/github/bot.d.ts.map +1 -1
- package/dist/adapters/github/bot.js +119 -342
- package/dist/adapters/github/bot.js.map +1 -1
- package/dist/adapters/github/client.d.ts +9 -19
- package/dist/adapters/github/client.d.ts.map +1 -1
- package/dist/adapters/github/client.js +28 -104
- package/dist/adapters/github/client.js.map +1 -1
- package/dist/adapters/github/context.d.ts.map +1 -1
- package/dist/adapters/github/context.js +29 -20
- package/dist/adapters/github/context.js.map +1 -1
- package/dist/adapters/github/github-ops.d.ts +2 -10
- package/dist/adapters/github/github-ops.d.ts.map +1 -1
- package/dist/adapters/github/github-ops.js +28 -91
- package/dist/adapters/github/github-ops.js.map +1 -1
- package/dist/adapters/github/policy.d.ts +19 -0
- package/dist/adapters/github/policy.d.ts.map +1 -0
- package/dist/adapters/github/policy.js +79 -0
- package/dist/adapters/github/policy.js.map +1 -0
- package/dist/adapters/github/tool-pack.d.ts +2 -2
- package/dist/adapters/github/tool-pack.d.ts.map +1 -1
- package/dist/adapters/github/tool-pack.js +4 -9
- package/dist/adapters/github/tool-pack.js.map +1 -1
- package/dist/adapters/github/tools/checks.d.ts.map +1 -1
- package/dist/adapters/github/tools/checks.js +6 -8
- package/dist/adapters/github/tools/checks.js.map +1 -1
- package/dist/adapters/github/tools/pr.d.ts.map +1 -1
- package/dist/adapters/github/tools/pr.js +7 -9
- package/dist/adapters/github/tools/pr.js.map +1 -1
- package/dist/adapters/github/types.d.ts +66 -67
- package/dist/adapters/github/types.d.ts.map +1 -1
- package/dist/adapters/github/types.js.map +1 -1
- package/dist/adapters/github/webhook.d.ts +2 -1
- package/dist/adapters/github/webhook.d.ts.map +1 -1
- package/dist/adapters/github/webhook.js +46 -4
- package/dist/adapters/github/webhook.js.map +1 -1
- package/dist/adapters/progressive-renderer.d.ts.map +1 -1
- package/dist/adapters/progressive-renderer.js +3 -0
- package/dist/adapters/progressive-renderer.js.map +1 -1
- package/dist/adapters/shared.d.ts +3 -1
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +45 -23
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +65 -2
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +4 -0
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +84 -36
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/jev-context.js +2 -2
- package/dist/adapters/slack/jev-context.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +2 -2
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/task-status.d.ts +3 -2
- package/dist/adapters/slack/task-status.d.ts.map +1 -1
- package/dist/adapters/slack/task-status.js +12 -15
- package/dist/adapters/slack/task-status.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +1 -8
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/web/admin/portal.js +1 -1
- package/dist/adapters/web/admin/portal.js.map +1 -1
- package/dist/adapters/web/admin/provider-models.d.ts.map +1 -1
- package/dist/adapters/web/admin/provider-models.js +10 -3
- package/dist/adapters/web/admin/provider-models.js.map +1 -1
- package/dist/adapters/web/login/portal.js +6 -1
- package/dist/adapters/web/login/portal.js.map +1 -1
- package/dist/adapters/web/server.d.ts.map +1 -1
- package/dist/adapters/web/server.js +5 -3
- package/dist/adapters/web/server.js.map +1 -1
- package/dist/adapters/web/session-view/portal.d.ts +2 -1
- package/dist/adapters/web/session-view/portal.d.ts.map +1 -1
- package/dist/adapters/web/session-view/portal.js +18 -27
- package/dist/adapters/web/session-view/portal.js.map +1 -1
- package/dist/cli/boot.d.ts.map +1 -1
- package/dist/cli/boot.js +4 -6
- package/dist/cli/boot.js.map +1 -1
- package/dist/cli/migrate.d.ts +3 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +74 -0
- package/dist/cli/migrate.js.map +1 -0
- package/dist/cli/office.d.ts.map +1 -1
- package/dist/cli/office.js +8 -129
- package/dist/cli/office.js.map +1 -1
- package/dist/cli/onboard.d.ts +0 -1
- package/dist/cli/onboard.d.ts.map +1 -1
- package/dist/cli/onboard.js +4 -7
- package/dist/cli/onboard.js.map +1 -1
- package/dist/cli/types.d.ts +2 -3
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/env-manifest.d.ts.map +1 -1
- package/dist/env-manifest.js +24 -22
- package/dist/env-manifest.js.map +1 -1
- package/dist/events/index.d.ts +3 -13
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +12 -58
- package/dist/events/index.js.map +1 -1
- package/dist/events/scheduler.d.ts.map +1 -1
- package/dist/events/scheduler.js +3 -0
- package/dist/events/scheduler.js.map +1 -1
- package/dist/file-guards.d.ts +7 -0
- package/dist/file-guards.d.ts.map +1 -1
- package/dist/file-guards.js +63 -1
- package/dist/file-guards.js.map +1 -1
- package/dist/harness/budget-stop.d.ts +3 -0
- package/dist/harness/budget-stop.d.ts.map +1 -0
- package/dist/harness/budget-stop.js +36 -0
- package/dist/harness/budget-stop.js.map +1 -0
- package/dist/harness/execution-resolver.d.ts.map +1 -1
- package/dist/harness/execution-resolver.js +5 -9
- package/dist/harness/execution-resolver.js.map +1 -1
- package/dist/harness/mcp.d.ts.map +1 -1
- package/dist/harness/mcp.js +75 -31
- package/dist/harness/mcp.js.map +1 -1
- package/dist/harness/models.js +2 -2
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/open-connector.d.ts +0 -9
- package/dist/harness/open-connector.d.ts.map +1 -1
- package/dist/harness/open-connector.js +15 -69
- package/dist/harness/open-connector.js.map +1 -1
- package/dist/harness/presenter.d.ts.map +1 -1
- package/dist/harness/presenter.js +33 -2
- package/dist/harness/presenter.js.map +1 -1
- package/dist/harness/prompt.d.ts +1 -1
- package/dist/harness/prompt.d.ts.map +1 -1
- package/dist/harness/prompt.js +14 -32
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/run-events.d.ts.map +1 -1
- package/dist/harness/run-events.js +6 -1
- package/dist/harness/run-events.js.map +1 -1
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +6 -9
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +6 -0
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/tools/event.d.ts.map +1 -1
- package/dist/harness/tools/event.js +19 -2
- package/dist/harness/tools/event.js.map +1 -1
- package/dist/harness/tools/generate-image.d.ts.map +1 -1
- package/dist/harness/tools/generate-image.js +17 -3
- package/dist/harness/tools/generate-image.js.map +1 -1
- package/dist/harness/tools/jev-browser.d.ts +1 -2
- package/dist/harness/tools/jev-browser.d.ts.map +1 -1
- package/dist/harness/tools/jev-browser.js +75 -50
- package/dist/harness/tools/jev-browser.js.map +1 -1
- package/dist/harness/types.d.ts +16 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/main.js +40 -93
- package/dist/main.js.map +1 -1
- package/dist/memory-capture/index.d.ts.map +1 -1
- package/dist/memory-capture/index.js +3 -3
- package/dist/memory-capture/index.js.map +1 -1
- package/dist/migrations/actor-vaults.d.ts +3 -0
- package/dist/migrations/actor-vaults.d.ts.map +1 -0
- package/dist/migrations/actor-vaults.js +43 -0
- package/dist/migrations/actor-vaults.js.map +1 -0
- package/dist/migrations/conversation-settings.d.ts +3 -0
- package/dist/migrations/conversation-settings.d.ts.map +1 -0
- package/dist/migrations/conversation-settings.js +31 -0
- package/dist/migrations/conversation-settings.js.map +1 -0
- package/dist/migrations/index.d.ts +14 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +99 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/models-json.d.ts +3 -0
- package/dist/migrations/models-json.d.ts.map +1 -0
- package/dist/migrations/models-json.js +18 -0
- package/dist/migrations/models-json.js.map +1 -0
- package/dist/migrations/office-layout.d.ts +4 -0
- package/dist/migrations/office-layout.d.ts.map +1 -0
- package/dist/migrations/office-layout.js +94 -0
- package/dist/migrations/office-layout.js.map +1 -0
- package/dist/migrations/office-sessions.d.ts +3 -0
- package/dist/migrations/office-sessions.d.ts.map +1 -0
- package/dist/migrations/office-sessions.js +70 -0
- package/dist/migrations/office-sessions.js.map +1 -0
- package/dist/migrations/sandbox-containers.d.ts +3 -0
- package/dist/migrations/sandbox-containers.d.ts.map +1 -0
- package/dist/migrations/sandbox-containers.js +36 -0
- package/dist/migrations/sandbox-containers.js.map +1 -0
- package/dist/{sessions/migrate-common.d.ts → migrations/session-files.d.ts} +1 -2
- package/dist/migrations/session-files.d.ts.map +1 -0
- package/dist/{sessions/migrate-common.js → migrations/session-files.js} +2 -2
- package/dist/migrations/session-files.js.map +1 -0
- package/dist/{sessions/migrate-v3.d.ts → migrations/sessions-v3.d.ts} +4 -3
- package/dist/migrations/sessions-v3.d.ts.map +1 -0
- package/dist/{sessions/migrate-v3.js → migrations/sessions-v3.js} +14 -4
- package/dist/migrations/sessions-v3.js.map +1 -0
- package/dist/migrations/types.d.ts +30 -0
- package/dist/migrations/types.d.ts.map +1 -0
- package/dist/migrations/types.js +2 -0
- package/dist/migrations/types.js.map +1 -0
- package/dist/migrations/workspace-events.d.ts +3 -0
- package/dist/migrations/workspace-events.d.ts.map +1 -0
- package/dist/migrations/workspace-events.js +43 -0
- package/dist/migrations/workspace-events.js.map +1 -0
- package/dist/office/index.d.ts +2 -24
- package/dist/office/index.d.ts.map +1 -1
- package/dist/office/index.js +15 -579
- package/dist/office/index.js.map +1 -1
- package/dist/office/types.d.ts +0 -10
- package/dist/office/types.d.ts.map +1 -1
- package/dist/office/types.js.map +1 -1
- package/dist/runtime/conversation-runtime.js +12 -12
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/sandbox/identity.d.ts +2 -3
- package/dist/sandbox/identity.d.ts.map +1 -1
- package/dist/sandbox/identity.js +6 -13
- package/dist/sandbox/identity.js.map +1 -1
- package/dist/sandbox/layout.d.ts +0 -2
- package/dist/sandbox/layout.d.ts.map +1 -1
- package/dist/sandbox/layout.js +2 -2
- package/dist/sandbox/layout.js.map +1 -1
- package/dist/sandbox/provisioner.d.ts +4 -38
- package/dist/sandbox/provisioner.d.ts.map +1 -1
- package/dist/sandbox/provisioner.js +32 -456
- package/dist/sandbox/provisioner.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts.map +1 -1
- package/dist/sessions/chat-history-sync.js +28 -40
- package/dist/sessions/chat-history-sync.js.map +1 -1
- package/dist/sessions/session-store.d.ts.map +1 -1
- package/dist/sessions/session-store.js +1 -8
- package/dist/sessions/session-store.js.map +1 -1
- package/dist/sessions/store.d.ts +2 -3
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +8 -14
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +6 -15
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings/index.d.ts +0 -48
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +6 -37
- package/dist/settings/index.js.map +1 -1
- package/dist/types.d.ts +0 -29
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vault/index.d.ts +0 -7
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +1 -36
- package/dist/vault/index.js.map +1 -1
- package/package.json +8 -6
- package/dist/adapters/github/repo.d.ts +0 -8
- package/dist/adapters/github/repo.d.ts.map +0 -1
- package/dist/adapters/github/repo.js +0 -92
- package/dist/adapters/github/repo.js.map +0 -1
- package/dist/adapters/github/tools/sync.d.ts +0 -13
- package/dist/adapters/github/tools/sync.d.ts.map +0 -1
- package/dist/adapters/github/tools/sync.js +0 -29
- package/dist/adapters/github/tools/sync.js.map +0 -1
- package/dist/cli/sandbox.d.ts +0 -3
- package/dist/cli/sandbox.d.ts.map +0 -1
- package/dist/cli/sandbox.js +0 -80
- package/dist/cli/sandbox.js.map +0 -1
- package/dist/cli/sessions.d.ts +0 -2
- package/dist/cli/sessions.d.ts.map +0 -1
- package/dist/cli/sessions.js +0 -78
- package/dist/cli/sessions.js.map +0 -1
- package/dist/sessions/migrate-common.d.ts.map +0 -1
- package/dist/sessions/migrate-common.js.map +0 -1
- package/dist/sessions/migrate-pi-084.d.ts +0 -7
- package/dist/sessions/migrate-pi-084.d.ts.map +0 -1
- package/dist/sessions/migrate-pi-084.js +0 -293
- package/dist/sessions/migrate-pi-084.js.map +0 -1
- package/dist/sessions/migrate-v3.d.ts.map +0 -1
- package/dist/sessions/migrate-v3.js.map +0 -1
- package/dist/settings/migrate.d.ts +0 -16
- package/dist/settings/migrate.d.ts.map +0 -1
- package/dist/settings/migrate.js +0 -70
- package/dist/settings/migrate.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/harness/models.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport {\n createProvider,\n type Api,\n type AuthResult,\n type Model,\n type Models,\n type MutableModels,\n type Provider,\n type ProviderStreams,\n} from \"@earendil-works/pi-ai\";\nimport { builtinModels } from \"@earendil-works/pi-ai/providers/all\";\nimport { anthropicMessagesApi } from \"@earendil-works/pi-ai/api/anthropic-messages.lazy\";\nimport { azureOpenAIResponsesApi } from \"@earendil-works/pi-ai/api/azure-openai-responses.lazy\";\nimport { googleGenerativeAIApi } from \"@earendil-works/pi-ai/api/google-generative-ai.lazy\";\nimport { mistralConversationsApi } from \"@earendil-works/pi-ai/api/mistral-conversations.lazy\";\nimport { openAICompletionsApi } from \"@earendil-works/pi-ai/api/openai-completions.lazy\";\nimport { openAIResponsesApi } from \"@earendil-works/pi-ai/api/openai-responses.lazy\";\nimport { readJsonFileIfExists } from \"../file-guards.js\";\nimport type { CreateMikanModelsOptions } from \"./types.js\";\nimport { errorMessage } from \"../unknown-values.js\";\n\nconst CUSTOM_API_STREAMS: Record<string, () => ProviderStreams> = {\n \"anthropic-messages\": anthropicMessagesApi,\n \"azure-openai-responses\": azureOpenAIResponsesApi,\n \"google-generative-ai\": googleGenerativeAIApi,\n \"mistral-conversations\": mistralConversationsApi,\n \"openai-completions\": openAICompletionsApi,\n \"openai-responses\": openAIResponsesApi,\n};\n\nconst DEFAULT_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };\nconst DEFAULT_CONTEXT_WINDOW = 128000;\nconst DEFAULT_MAX_TOKENS = 16384;\n\ninterface CustomModelConfig {\n id: string;\n name?: string;\n api?: string;\n baseUrl?: string;\n reasoning?: boolean;\n input?: (\"text\" | \"image\")[];\n cost?: { input: number; output: number; cacheRead: number; cacheWrite: number };\n contextWindow?: number;\n maxTokens?: number;\n maxOutputTokens?: number;\n thinkingLevelMap?: Model<Api>[\"thinkingLevelMap\"];\n headers?: Record<string, string>;\n compat?: unknown;\n}\n\ninterface CustomProviderConfig {\n name?: string;\n api?: string;\n baseUrl?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n compat?: unknown;\n models?: CustomModelConfig[];\n}\n\ninterface ModelsJsonConfig {\n providers?: Record<string, CustomProviderConfig>;\n}\n\nexport function defaultModelsJsonPath(): string {\n return join(homedir(), \".mikan\", \"models.json\");\n}\n\nfunction isModelsJsonConfig(parsed: unknown): parsed is ModelsJsonConfig {\n if (!parsed || typeof parsed !== \"object\") {\n throw new Error(\"models.json must be a JSON object\");\n }\n const providers = (parsed as { providers?: unknown }).providers;\n if (providers === undefined) return true;\n if (!providers || typeof providers !== \"object\" || Array.isArray(providers)) {\n throw new Error('models.json \"providers\" must be an object');\n }\n for (const [name, config] of Object.entries(providers)) {\n if (!config || typeof config !== \"object\") {\n throw new Error(`models.json provider \"${name}\" must be an object`);\n }\n const models = (config as CustomProviderConfig).models;\n if (models !== undefined) {\n if (!Array.isArray(models)) {\n throw new Error(`models.json provider \"${name}\" models must be an array`);\n }\n const api = (config as CustomProviderConfig).api;\n if (typeof api !== \"string\" || !(api in CUSTOM_API_STREAMS)) {\n throw new Error(\n `models.json provider \"${name}\" needs an \"api\" of: ${Object.keys(CUSTOM_API_STREAMS).join(\", \")}`,\n );\n }\n for (const model of models) {\n if (!model || typeof model !== \"object\" || typeof model.id !== \"string\") {\n throw new Error(`models.json provider \"${name}\" has a model without a string \"id\"`);\n }\n }\n }\n }\n return true;\n}\n\nfunction envVarNameFor(providerName: string): string {\n return `${providerName.replace(/[^a-zA-Z0-9]+/g, \"_\").toUpperCase()}_API_KEY`;\n}\n\nfunction applyModelsJson(\n models: ReturnType<typeof builtinModels>,\n modelsJsonPath: string,\n): string | undefined {\n try {\n const config = readJsonFileIfExists(\n modelsJsonPath,\n isModelsJsonConfig,\n (detail) => `models.json is invalid: ${detail}`,\n );\n for (const [providerName, providerConfig] of Object.entries(config?.providers ?? {})) {\n if (providerConfig.models && providerConfig.models.length > 0) {\n models.setProvider(buildCustomProvider(providerName, providerConfig));\n } else if (providerConfig.baseUrl || providerConfig.compat) {\n const builtin = models.getProvider(providerName);\n if (builtin) {\n models.setProvider(overrideBuiltinProvider(builtin, providerConfig));\n }\n }\n }\n return undefined;\n } catch (err) {\n return `Failed to load ${modelsJsonPath}: ${errorMessage(err)}`;\n }\n}\n\nfunction buildCustomProvider(providerName: string, config: CustomProviderConfig): Provider {\n const api = config.api!;\n const displayName = config.name ?? providerName;\n const envVar = envVarNameFor(providerName);\n const models = (config.models ?? []).map((modelConfig): Model<Api> => {\n const model: Model<Api> = {\n id: modelConfig.id,\n name: modelConfig.name ?? modelConfig.id,\n api: (modelConfig.api ?? api) as Api,\n provider: providerName,\n baseUrl: modelConfig.baseUrl ?? config.baseUrl ?? \"\",\n reasoning: modelConfig.reasoning ?? false,\n input: modelConfig.input ?? [\"text\"],\n cost: modelConfig.cost ?? DEFAULT_COST,\n contextWindow: modelConfig.contextWindow ?? DEFAULT_CONTEXT_WINDOW,\n maxTokens: modelConfig.maxTokens ?? modelConfig.maxOutputTokens ?? DEFAULT_MAX_TOKENS,\n };\n if (modelConfig.thinkingLevelMap) model.thinkingLevelMap = modelConfig.thinkingLevelMap;\n if (modelConfig.headers ?? config.headers) {\n model.headers = { ...config.headers, ...modelConfig.headers };\n }\n const compat = modelConfig.compat ?? config.compat;\n if (compat) model.compat = compat as Model<Api>[\"compat\"];\n return model;\n });\n\n return createProvider({\n id: providerName,\n name: displayName,\n baseUrl: config.baseUrl,\n headers: config.headers,\n auth: {\n apiKey: {\n name: `${displayName} API key`,\n resolve: async ({ ctx, credential }) => {\n const key =\n (credential?.type === \"api_key\" ? credential.key : undefined) ??\n config.apiKey ??\n (await ctx.env(envVar));\n if (!key) return undefined;\n const source = config.apiKey ? \"models.json\" : envVar;\n return { auth: { apiKey: key }, source };\n },\n },\n },\n models,\n api: CUSTOM_API_STREAMS[api]!(),\n });\n}\n\nfunction overrideBuiltinProvider(provider: Provider, config: CustomProviderConfig): Provider {\n const models = provider.getModels().map((model): Model<Api> => {\n const overridden: Model<Api> = Object.assign({}, model);\n if (config.baseUrl) overridden.baseUrl = config.baseUrl;\n if (config.compat) overridden.compat = config.compat as Model<Api>[\"compat\"];\n return overridden;\n });\n return {\n ...provider,\n getModels: () => models,\n };\n}\n\nexport class MikanModels {\n readonly models: Models;\n private loadError: string | undefined;\n\n private constructor(models: MutableModels, loadError: string | undefined) {\n this.models = models;\n this.loadError = loadError;\n }\n\n static create(options: CreateMikanModelsOptions = {}): MikanModels {\n const modelsJsonPath = options.modelsJsonPath ?? defaultModelsJsonPath();\n const models = builtinModels();\n const loadError = applyModelsJson(models, modelsJsonPath);\n return new MikanModels(models, loadError);\n }\n\n getError(): string | undefined {\n return this.loadError;\n }\n\n getAll(): Model<Api>[] {\n return [...this.models.getModels()];\n }\n\n find(provider: string, modelId: string): Model<Api> | undefined {\n return this.models.getModel(provider, modelId);\n }\n\n resolve(provider: string, modelId: string): Model<Api> {\n const model = this.find(provider, modelId);\n if (model) return model;\n throw new Error(\n `Unknown model \"${provider}/${modelId}\". Configure it in pi models.json or choose a registered model.`,\n );\n }\n\n async getAvailable(): Promise<Model<Api>[]> {\n const available = await Promise.all(\n this.models.getProviders().map(async (provider) => {\n try {\n return await this.models.getAvailable(provider.id);\n } catch {\n return [];\n }\n }),\n );\n return available.flat();\n }\n\n getAuth(model: Model<Api>): Promise<AuthResult | undefined> {\n return this.models.getAuth(model);\n }\n\n async getApiKeyForProvider(provider: string): Promise<string | undefined> {\n try {\n const auth = await this.models.getAuth(provider);\n return auth?.auth.apiKey;\n } catch {\n return undefined;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/harness/models.ts"],"names":[],"mappings":"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","sourcesContent":["import { effectiveStateDir } from \"../cli/arg-grammar.js\";\nimport { join } from \"node:path\";\nimport {\n createProvider,\n type Api,\n type AuthResult,\n type Model,\n type Models,\n type MutableModels,\n type Provider,\n type ProviderStreams,\n} from \"@earendil-works/pi-ai\";\nimport { builtinModels } from \"@earendil-works/pi-ai/providers/all\";\nimport { anthropicMessagesApi } from \"@earendil-works/pi-ai/api/anthropic-messages.lazy\";\nimport { azureOpenAIResponsesApi } from \"@earendil-works/pi-ai/api/azure-openai-responses.lazy\";\nimport { googleGenerativeAIApi } from \"@earendil-works/pi-ai/api/google-generative-ai.lazy\";\nimport { mistralConversationsApi } from \"@earendil-works/pi-ai/api/mistral-conversations.lazy\";\nimport { openAICompletionsApi } from \"@earendil-works/pi-ai/api/openai-completions.lazy\";\nimport { openAIResponsesApi } from \"@earendil-works/pi-ai/api/openai-responses.lazy\";\nimport { readJsonFileIfExists } from \"../file-guards.js\";\nimport type { CreateMikanModelsOptions } from \"./types.js\";\nimport { errorMessage } from \"../unknown-values.js\";\n\nconst CUSTOM_API_STREAMS: Record<string, () => ProviderStreams> = {\n \"anthropic-messages\": anthropicMessagesApi,\n \"azure-openai-responses\": azureOpenAIResponsesApi,\n \"google-generative-ai\": googleGenerativeAIApi,\n \"mistral-conversations\": mistralConversationsApi,\n \"openai-completions\": openAICompletionsApi,\n \"openai-responses\": openAIResponsesApi,\n};\n\nconst DEFAULT_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };\nconst DEFAULT_CONTEXT_WINDOW = 128000;\nconst DEFAULT_MAX_TOKENS = 16384;\n\ninterface CustomModelConfig {\n id: string;\n name?: string;\n api?: string;\n baseUrl?: string;\n reasoning?: boolean;\n input?: (\"text\" | \"image\")[];\n cost?: { input: number; output: number; cacheRead: number; cacheWrite: number };\n contextWindow?: number;\n maxTokens?: number;\n maxOutputTokens?: number;\n thinkingLevelMap?: Model<Api>[\"thinkingLevelMap\"];\n headers?: Record<string, string>;\n compat?: unknown;\n}\n\ninterface CustomProviderConfig {\n name?: string;\n api?: string;\n baseUrl?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n compat?: unknown;\n models?: CustomModelConfig[];\n}\n\ninterface ModelsJsonConfig {\n providers?: Record<string, CustomProviderConfig>;\n}\n\nexport function defaultModelsJsonPath(): string {\n return join(effectiveStateDir(), \"models.json\");\n}\n\nfunction isModelsJsonConfig(parsed: unknown): parsed is ModelsJsonConfig {\n if (!parsed || typeof parsed !== \"object\") {\n throw new Error(\"models.json must be a JSON object\");\n }\n const providers = (parsed as { providers?: unknown }).providers;\n if (providers === undefined) return true;\n if (!providers || typeof providers !== \"object\" || Array.isArray(providers)) {\n throw new Error('models.json \"providers\" must be an object');\n }\n for (const [name, config] of Object.entries(providers)) {\n if (!config || typeof config !== \"object\") {\n throw new Error(`models.json provider \"${name}\" must be an object`);\n }\n const models = (config as CustomProviderConfig).models;\n if (models !== undefined) {\n if (!Array.isArray(models)) {\n throw new Error(`models.json provider \"${name}\" models must be an array`);\n }\n const api = (config as CustomProviderConfig).api;\n if (typeof api !== \"string\" || !(api in CUSTOM_API_STREAMS)) {\n throw new Error(\n `models.json provider \"${name}\" needs an \"api\" of: ${Object.keys(CUSTOM_API_STREAMS).join(\", \")}`,\n );\n }\n for (const model of models) {\n if (!model || typeof model !== \"object\" || typeof model.id !== \"string\") {\n throw new Error(`models.json provider \"${name}\" has a model without a string \"id\"`);\n }\n }\n }\n }\n return true;\n}\n\nfunction envVarNameFor(providerName: string): string {\n return `${providerName.replace(/[^a-zA-Z0-9]+/g, \"_\").toUpperCase()}_API_KEY`;\n}\n\nfunction applyModelsJson(\n models: ReturnType<typeof builtinModels>,\n modelsJsonPath: string,\n): string | undefined {\n try {\n const config = readJsonFileIfExists(\n modelsJsonPath,\n isModelsJsonConfig,\n (detail) => `models.json is invalid: ${detail}`,\n );\n for (const [providerName, providerConfig] of Object.entries(config?.providers ?? {})) {\n if (providerConfig.models && providerConfig.models.length > 0) {\n models.setProvider(buildCustomProvider(providerName, providerConfig));\n } else if (providerConfig.baseUrl || providerConfig.compat) {\n const builtin = models.getProvider(providerName);\n if (builtin) {\n models.setProvider(overrideBuiltinProvider(builtin, providerConfig));\n }\n }\n }\n return undefined;\n } catch (err) {\n return `Failed to load ${modelsJsonPath}: ${errorMessage(err)}`;\n }\n}\n\nfunction buildCustomProvider(providerName: string, config: CustomProviderConfig): Provider {\n const api = config.api!;\n const displayName = config.name ?? providerName;\n const envVar = envVarNameFor(providerName);\n const models = (config.models ?? []).map((modelConfig): Model<Api> => {\n const model: Model<Api> = {\n id: modelConfig.id,\n name: modelConfig.name ?? modelConfig.id,\n api: (modelConfig.api ?? api) as Api,\n provider: providerName,\n baseUrl: modelConfig.baseUrl ?? config.baseUrl ?? \"\",\n reasoning: modelConfig.reasoning ?? false,\n input: modelConfig.input ?? [\"text\"],\n cost: modelConfig.cost ?? DEFAULT_COST,\n contextWindow: modelConfig.contextWindow ?? DEFAULT_CONTEXT_WINDOW,\n maxTokens: modelConfig.maxTokens ?? modelConfig.maxOutputTokens ?? DEFAULT_MAX_TOKENS,\n };\n if (modelConfig.thinkingLevelMap) model.thinkingLevelMap = modelConfig.thinkingLevelMap;\n if (modelConfig.headers ?? config.headers) {\n model.headers = { ...config.headers, ...modelConfig.headers };\n }\n const compat = modelConfig.compat ?? config.compat;\n if (compat) model.compat = compat as Model<Api>[\"compat\"];\n return model;\n });\n\n return createProvider({\n id: providerName,\n name: displayName,\n baseUrl: config.baseUrl,\n headers: config.headers,\n auth: {\n apiKey: {\n name: `${displayName} API key`,\n resolve: async ({ ctx, credential }) => {\n const key =\n (credential?.type === \"api_key\" ? credential.key : undefined) ??\n config.apiKey ??\n (await ctx.env(envVar));\n if (!key) return undefined;\n const source = config.apiKey ? \"models.json\" : envVar;\n return { auth: { apiKey: key }, source };\n },\n },\n },\n models,\n api: CUSTOM_API_STREAMS[api]!(),\n });\n}\n\nfunction overrideBuiltinProvider(provider: Provider, config: CustomProviderConfig): Provider {\n const models = provider.getModels().map((model): Model<Api> => {\n const overridden: Model<Api> = Object.assign({}, model);\n if (config.baseUrl) overridden.baseUrl = config.baseUrl;\n if (config.compat) overridden.compat = config.compat as Model<Api>[\"compat\"];\n return overridden;\n });\n return {\n ...provider,\n getModels: () => models,\n };\n}\n\nexport class MikanModels {\n readonly models: Models;\n private loadError: string | undefined;\n\n private constructor(models: MutableModels, loadError: string | undefined) {\n this.models = models;\n this.loadError = loadError;\n }\n\n static create(options: CreateMikanModelsOptions = {}): MikanModels {\n const modelsJsonPath = options.modelsJsonPath ?? defaultModelsJsonPath();\n const models = builtinModels();\n const loadError = applyModelsJson(models, modelsJsonPath);\n return new MikanModels(models, loadError);\n }\n\n getError(): string | undefined {\n return this.loadError;\n }\n\n getAll(): Model<Api>[] {\n return [...this.models.getModels()];\n }\n\n find(provider: string, modelId: string): Model<Api> | undefined {\n return this.models.getModel(provider, modelId);\n }\n\n resolve(provider: string, modelId: string): Model<Api> {\n const model = this.find(provider, modelId);\n if (model) return model;\n throw new Error(\n `Unknown model \"${provider}/${modelId}\". Configure it in pi models.json or choose a registered model.`,\n );\n }\n\n async getAvailable(): Promise<Model<Api>[]> {\n const available = await Promise.all(\n this.models.getProviders().map(async (provider) => {\n try {\n return await this.models.getAvailable(provider.id);\n } catch {\n return [];\n }\n }),\n );\n return available.flat();\n }\n\n getAuth(model: Model<Api>): Promise<AuthResult | undefined> {\n return this.models.getAuth(model);\n }\n\n async getApiKeyForProvider(provider: string): Promise<string | undefined> {\n try {\n const auth = await this.models.getAuth(provider);\n return auth?.auth.apiKey;\n } catch {\n return undefined;\n }\n }\n}\n"]}
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
import type { OfficeKey } from "../types.js";
|
|
2
1
|
import type { EnsureDefaultOpenConnectorOptions } from "./types.js";
|
|
3
2
|
export declare function ensureDefaultOpenConnector({ office, platformWorkspaceId, defaultServer, signal, fetch: fetchFn, }: EnsureDefaultOpenConnectorOptions): Promise<void>;
|
|
4
|
-
export interface LegacyTokenMigrationReport {
|
|
5
|
-
migrated: OfficeKey[];
|
|
6
|
-
skipped: {
|
|
7
|
-
key: OfficeKey;
|
|
8
|
-
reason: string;
|
|
9
|
-
}[];
|
|
10
|
-
}
|
|
11
|
-
export declare function migrateLegacyOpenConnectorTokens(stateDir: string, defaultUrl: string, workspaceRoot?: string): LegacyTokenMigrationReport;
|
|
12
3
|
//# sourceMappingURL=open-connector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-connector.d.ts","sourceRoot":"","sources":["../../src/harness/open-connector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"open-connector.d.ts","sourceRoot":"","sources":["../../src/harness/open-connector.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iCAAiC,EAAmB,MAAM,YAAY,CAAC;AAkGrF,wBAAsB,0BAA0B,CAAC,EAC/C,MAAM,EACN,mBAAmB,EACnB,aAAa,EACb,MAAM,EACN,KAAK,EAAE,OAA0B,GAClC,EAAE,iCAAiC,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBnD"}
|
|
@@ -1,23 +1,10 @@
|
|
|
1
|
-
import { Type } from "typebox";
|
|
2
|
-
import { existsSync, readdirSync, rmSync } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
1
|
import { readEnv } from "../env-manifest.js";
|
|
5
2
|
import * as log from "../log.js";
|
|
6
3
|
import { loadScopeMcpServers, updateConversationSettings } from "../settings/index.js";
|
|
7
|
-
import {
|
|
8
|
-
import { createWorkspace, isOfficeKey, listRegisteredOffices, officeKey } from "../office/index.js";
|
|
9
|
-
import { errorMessage, isRecord } from "../unknown-values.js";
|
|
4
|
+
import { isRecord } from "../unknown-values.js";
|
|
10
5
|
const OPEN_CONNECTOR_SERVER = "open-connector";
|
|
11
|
-
const LEGACY_TOKEN_FILE = "open-connector-runtime-token.json";
|
|
12
6
|
const REQUEST_TIMEOUT_MS = 10_000;
|
|
13
7
|
const pending = new Map();
|
|
14
|
-
const LegacyTokenSchema = Type.Object({
|
|
15
|
-
version: Type.Literal(1),
|
|
16
|
-
origin: Type.String(),
|
|
17
|
-
name: Type.String(),
|
|
18
|
-
id: Type.String(),
|
|
19
|
-
token: Type.String(),
|
|
20
|
-
}, { additionalProperties: false });
|
|
21
8
|
function stringArray(value, field) {
|
|
22
9
|
if (!Array.isArray(value) || !value.every((item) => typeof item === "string")) {
|
|
23
10
|
throw new Error(`OpenConnector returned an invalid ${field}`);
|
|
@@ -76,22 +63,29 @@ function isDeclared(office) {
|
|
|
76
63
|
return (Object.hasOwn(scopes.global, OPEN_CONNECTOR_SERVER) ||
|
|
77
64
|
Object.hasOwn(scopes.conversation, OPEN_CONNECTOR_SERVER));
|
|
78
65
|
}
|
|
66
|
+
function runtimeTokenName(office, platformWorkspaceId) {
|
|
67
|
+
const { platform, conversationId } = office.address;
|
|
68
|
+
if (platform === "github")
|
|
69
|
+
return `mikan:github:${conversationId}`;
|
|
70
|
+
if (platform !== "slack")
|
|
71
|
+
return undefined;
|
|
72
|
+
if (platformWorkspaceId)
|
|
73
|
+
return `mikan:slack:${platformWorkspaceId}:${conversationId}`;
|
|
74
|
+
log.logWarning(`[${conversationId}] OpenConnector default skipped`, "Slack workspace ID is unavailable");
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
79
77
|
export async function ensureDefaultOpenConnector({ office, platformWorkspaceId, defaultServer, signal, fetch: fetchFn = globalThis.fetch, }) {
|
|
80
78
|
const adminToken = readEnv("OPENCONNECTOR_ADMIN_TOKEN");
|
|
81
|
-
if (!defaultServer?.url || !adminToken
|
|
82
|
-
return;
|
|
83
|
-
if (!platformWorkspaceId) {
|
|
84
|
-
log.logWarning(`[${office.address.conversationId}] OpenConnector default skipped`, "Slack workspace ID is unavailable");
|
|
79
|
+
if (!defaultServer?.url || !adminToken)
|
|
85
80
|
return;
|
|
86
|
-
|
|
87
|
-
if (isDeclared(office))
|
|
81
|
+
const name = runtimeTokenName(office, platformWorkspaceId);
|
|
82
|
+
if (!name || isDeclared(office))
|
|
88
83
|
return;
|
|
89
84
|
const inflight = pending.get(office.stateDir);
|
|
90
85
|
if (inflight)
|
|
91
86
|
return inflight;
|
|
92
87
|
const url = defaultServer.url;
|
|
93
88
|
const task = (async () => {
|
|
94
|
-
const name = `mikan:slack:${platformWorkspaceId}:${office.address.conversationId}`;
|
|
95
89
|
const token = await createRuntimeToken(new URL(url).origin, adminToken, name, fetchFn, signal);
|
|
96
90
|
if (isDeclared(office))
|
|
97
91
|
return;
|
|
@@ -109,52 +103,4 @@ export async function ensureDefaultOpenConnector({ office, platformWorkspaceId,
|
|
|
109
103
|
pending.delete(office.stateDir);
|
|
110
104
|
}
|
|
111
105
|
}
|
|
112
|
-
export function migrateLegacyOpenConnectorTokens(stateDir, defaultUrl, workspaceRoot = join(stateDir, "workspace")) {
|
|
113
|
-
const origin = new URL(defaultUrl).origin;
|
|
114
|
-
const report = { migrated: [], skipped: [] };
|
|
115
|
-
const conversationsDir = join(stateDir, "conversations");
|
|
116
|
-
if (!existsSync(conversationsDir))
|
|
117
|
-
return report;
|
|
118
|
-
const workspace = createWorkspace({ root: workspaceRoot, stateDir });
|
|
119
|
-
const registered = new Map(listRegisteredOffices(stateDir).map((record) => [officeKey(record), record]));
|
|
120
|
-
for (const entry of readdirSync(conversationsDir, { withFileTypes: true })) {
|
|
121
|
-
if (!entry.isDirectory() || !isOfficeKey(entry.name))
|
|
122
|
-
continue;
|
|
123
|
-
const key = entry.name;
|
|
124
|
-
const legacyPath = join(conversationsDir, key, LEGACY_TOKEN_FILE);
|
|
125
|
-
if (!existsSync(legacyPath))
|
|
126
|
-
continue;
|
|
127
|
-
const record = registered.get(key);
|
|
128
|
-
if (!record) {
|
|
129
|
-
report.skipped.push({ key, reason: "office is not registered" });
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
const office = workspace.office(record);
|
|
133
|
-
if (isDeclared(office)) {
|
|
134
|
-
report.skipped.push({ key, reason: `${OPEN_CONNECTOR_SERVER} is already declared` });
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
let state;
|
|
138
|
-
try {
|
|
139
|
-
state = readJsonSchemaFileIfExists(legacyPath, LegacyTokenSchema, (detail) => `Malformed legacy token file: ${detail}`);
|
|
140
|
-
}
|
|
141
|
-
catch (error) {
|
|
142
|
-
report.skipped.push({ key, reason: errorMessage(error) });
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
if (!state)
|
|
146
|
-
continue;
|
|
147
|
-
if (state.origin !== origin) {
|
|
148
|
-
report.skipped.push({ key, reason: `token origin ${state.origin} differs` });
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
const current = loadScopeMcpServers(office).conversation;
|
|
152
|
-
updateConversationSettings(office, {
|
|
153
|
-
mcpServers: { ...current, [OPEN_CONNECTOR_SERVER]: defaultEntry(defaultUrl, state.token) },
|
|
154
|
-
});
|
|
155
|
-
rmSync(legacyPath);
|
|
156
|
-
report.migrated.push(key);
|
|
157
|
-
}
|
|
158
|
-
return report;
|
|
159
|
-
}
|
|
160
106
|
//# sourceMappingURL=open-connector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-connector.js","sourceRoot":"","sources":["../../src/harness/open-connector.ts"],"names":[],"mappings":"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","sourcesContent":["import { Type } from \"typebox\";\nimport { existsSync, readdirSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { readEnv } from \"../env-manifest.js\";\nimport * as log from \"../log.js\";\nimport { loadScopeMcpServers, updateConversationSettings } from \"../settings/index.js\";\nimport { readJsonSchemaFileIfExists } from \"../file-guards.js\";\nimport { createWorkspace, isOfficeKey, listRegisteredOffices, officeKey } from \"../office/index.js\";\nimport type { Office } from \"../office/types.js\";\nimport type { OfficeKey } from \"../types.js\";\nimport type { EnsureDefaultOpenConnectorOptions, McpServerConfig } from \"./types.js\";\nimport { errorMessage, isRecord } from \"../unknown-values.js\";\n\nconst OPEN_CONNECTOR_SERVER = \"open-connector\";\nconst LEGACY_TOKEN_FILE = \"open-connector-runtime-token.json\";\nconst REQUEST_TIMEOUT_MS = 10_000;\nconst pending = new Map<string, Promise<void>>();\n\nconst LegacyTokenSchema = Type.Object(\n {\n version: Type.Literal(1),\n origin: Type.String(),\n name: Type.String(),\n id: Type.String(),\n token: Type.String(),\n },\n { additionalProperties: false },\n);\n\nfunction stringArray(value: unknown, field: string): string[] {\n if (!Array.isArray(value) || !value.every((item) => typeof item === \"string\")) {\n throw new Error(`OpenConnector returned an invalid ${field}`);\n }\n return value;\n}\n\nasync function readJson(response: Response, operation: string): Promise<unknown> {\n if (!response.ok) {\n throw new Error(`OpenConnector ${operation} failed with HTTP ${response.status}`);\n }\n try {\n return await response.json();\n } catch (error) {\n throw new Error(`OpenConnector ${operation} returned invalid JSON`, { cause: error });\n }\n}\n\nfunction requestSignal(signal?: AbortSignal): AbortSignal {\n const timeout = AbortSignal.timeout(REQUEST_TIMEOUT_MS);\n return signal ? AbortSignal.any([signal, timeout]) : timeout;\n}\n\nasync function createRuntimeToken(\n origin: string,\n adminToken: string,\n name: string,\n fetchFn: typeof globalThis.fetch,\n signal?: AbortSignal,\n): Promise<string> {\n const headers = { Authorization: `Bearer ${adminToken}` };\n const policyValue = await readJson(\n await fetchFn(new URL(\"/api/runtime-policy\", origin), {\n headers,\n signal: requestSignal(signal),\n }),\n \"runtime policy request\",\n );\n if (!isRecord(policyValue) || !isRecord(policyValue.deployment)) {\n throw new Error(\"OpenConnector returned an invalid runtime policy\");\n }\n const deployment = policyValue.deployment;\n const responseValue = await readJson(\n await fetchFn(new URL(\"/api/runtime-tokens\", origin), {\n method: \"POST\",\n headers: { ...headers, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n name,\n allowedActions: stringArray(deployment.allowedActions, \"allowedActions policy\"),\n blockedActions: stringArray(deployment.blockedActions, \"blockedActions policy\"),\n allowedProxies: stringArray(deployment.allowedProxies, \"allowedProxies policy\"),\n }),\n signal: requestSignal(signal),\n }),\n \"runtime token creation\",\n );\n if (\n !isRecord(responseValue) ||\n typeof responseValue.token !== \"string\" ||\n !isRecord(responseValue.record) ||\n responseValue.record.name !== name\n ) {\n throw new Error(\"OpenConnector returned an invalid runtime token\");\n }\n return responseValue.token;\n}\n\nfunction defaultEntry(url: string, token: string): McpServerConfig {\n return { url, headers: { Authorization: `Bearer ${token}` } };\n}\n\nfunction isDeclared(office: Office): boolean {\n const scopes = loadScopeMcpServers(office);\n return (\n Object.hasOwn(scopes.global, OPEN_CONNECTOR_SERVER) ||\n Object.hasOwn(scopes.conversation, OPEN_CONNECTOR_SERVER)\n );\n}\n\nexport async function ensureDefaultOpenConnector({\n office,\n platformWorkspaceId,\n defaultServer,\n signal,\n fetch: fetchFn = globalThis.fetch,\n}: EnsureDefaultOpenConnectorOptions): Promise<void> {\n const adminToken = readEnv(\"OPENCONNECTOR_ADMIN_TOKEN\");\n if (!defaultServer?.url || !adminToken || office.address.platform !== \"slack\") return;\n if (!platformWorkspaceId) {\n log.logWarning(\n `[${office.address.conversationId}] OpenConnector default skipped`,\n \"Slack workspace ID is unavailable\",\n );\n return;\n }\n if (isDeclared(office)) return;\n\n const inflight = pending.get(office.stateDir);\n if (inflight) return inflight;\n const url = defaultServer.url;\n const task = (async () => {\n const name = `mikan:slack:${platformWorkspaceId}:${office.address.conversationId}`;\n const token = await createRuntimeToken(new URL(url).origin, adminToken, name, fetchFn, signal);\n if (isDeclared(office)) return;\n const current = loadScopeMcpServers(office).conversation;\n updateConversationSettings(office, {\n mcpServers: { ...current, [OPEN_CONNECTOR_SERVER]: defaultEntry(url, token) },\n });\n log.logInfo(`[${office.address.conversationId}] Provisioned default OpenConnector token`);\n })();\n pending.set(office.stateDir, task);\n try {\n await task;\n } finally {\n pending.delete(office.stateDir);\n }\n}\n\nexport interface LegacyTokenMigrationReport {\n migrated: OfficeKey[];\n skipped: { key: OfficeKey; reason: string }[];\n}\n\nexport function migrateLegacyOpenConnectorTokens(\n stateDir: string,\n defaultUrl: string,\n workspaceRoot = join(stateDir, \"workspace\"),\n): LegacyTokenMigrationReport {\n const origin = new URL(defaultUrl).origin;\n const report: LegacyTokenMigrationReport = { migrated: [], skipped: [] };\n const conversationsDir = join(stateDir, \"conversations\");\n if (!existsSync(conversationsDir)) return report;\n const workspace = createWorkspace({ root: workspaceRoot, stateDir });\n const registered = new Map(\n listRegisteredOffices(stateDir).map((record) => [officeKey(record), record] as const),\n );\n for (const entry of readdirSync(conversationsDir, { withFileTypes: true })) {\n if (!entry.isDirectory() || !isOfficeKey(entry.name)) continue;\n const key = entry.name;\n const legacyPath = join(conversationsDir, key, LEGACY_TOKEN_FILE);\n if (!existsSync(legacyPath)) continue;\n const record = registered.get(key);\n if (!record) {\n report.skipped.push({ key, reason: \"office is not registered\" });\n continue;\n }\n const office = workspace.office(record);\n if (isDeclared(office)) {\n report.skipped.push({ key, reason: `${OPEN_CONNECTOR_SERVER} is already declared` });\n continue;\n }\n let state;\n try {\n state = readJsonSchemaFileIfExists(\n legacyPath,\n LegacyTokenSchema,\n (detail) => `Malformed legacy token file: ${detail}`,\n );\n } catch (error) {\n report.skipped.push({ key, reason: errorMessage(error) });\n continue;\n }\n if (!state) continue;\n if (state.origin !== origin) {\n report.skipped.push({ key, reason: `token origin ${state.origin} differs` });\n continue;\n }\n const current = loadScopeMcpServers(office).conversation;\n updateConversationSettings(office, {\n mcpServers: { ...current, [OPEN_CONNECTOR_SERVER]: defaultEntry(defaultUrl, state.token) },\n });\n rmSync(legacyPath);\n report.migrated.push(key);\n }\n return report;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"open-connector.js","sourceRoot":"","sources":["../../src/harness/open-connector.ts"],"names":[],"mappings":"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","sourcesContent":["import { readEnv } from \"../env-manifest.js\";\nimport * as log from \"../log.js\";\nimport { loadScopeMcpServers, updateConversationSettings } from \"../settings/index.js\";\nimport type { Office } from \"../office/types.js\";\nimport type { EnsureDefaultOpenConnectorOptions, McpServerConfig } from \"./types.js\";\nimport { isRecord } from \"../unknown-values.js\";\n\nconst OPEN_CONNECTOR_SERVER = \"open-connector\";\nconst REQUEST_TIMEOUT_MS = 10_000;\nconst pending = new Map<string, Promise<void>>();\n\nfunction stringArray(value: unknown, field: string): string[] {\n if (!Array.isArray(value) || !value.every((item) => typeof item === \"string\")) {\n throw new Error(`OpenConnector returned an invalid ${field}`);\n }\n return value;\n}\n\nasync function readJson(response: Response, operation: string): Promise<unknown> {\n if (!response.ok) {\n throw new Error(`OpenConnector ${operation} failed with HTTP ${response.status}`);\n }\n try {\n return await response.json();\n } catch (error) {\n throw new Error(`OpenConnector ${operation} returned invalid JSON`, { cause: error });\n }\n}\n\nfunction requestSignal(signal?: AbortSignal): AbortSignal {\n const timeout = AbortSignal.timeout(REQUEST_TIMEOUT_MS);\n return signal ? AbortSignal.any([signal, timeout]) : timeout;\n}\n\nasync function createRuntimeToken(\n origin: string,\n adminToken: string,\n name: string,\n fetchFn: typeof globalThis.fetch,\n signal?: AbortSignal,\n): Promise<string> {\n const headers = { Authorization: `Bearer ${adminToken}` };\n const policyValue = await readJson(\n await fetchFn(new URL(\"/api/runtime-policy\", origin), {\n headers,\n signal: requestSignal(signal),\n }),\n \"runtime policy request\",\n );\n if (!isRecord(policyValue) || !isRecord(policyValue.deployment)) {\n throw new Error(\"OpenConnector returned an invalid runtime policy\");\n }\n const deployment = policyValue.deployment;\n const responseValue = await readJson(\n await fetchFn(new URL(\"/api/runtime-tokens\", origin), {\n method: \"POST\",\n headers: { ...headers, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n name,\n allowedActions: stringArray(deployment.allowedActions, \"allowedActions policy\"),\n blockedActions: stringArray(deployment.blockedActions, \"blockedActions policy\"),\n allowedProxies: stringArray(deployment.allowedProxies, \"allowedProxies policy\"),\n }),\n signal: requestSignal(signal),\n }),\n \"runtime token creation\",\n );\n if (\n !isRecord(responseValue) ||\n typeof responseValue.token !== \"string\" ||\n !isRecord(responseValue.record) ||\n responseValue.record.name !== name\n ) {\n throw new Error(\"OpenConnector returned an invalid runtime token\");\n }\n return responseValue.token;\n}\n\nfunction defaultEntry(url: string, token: string): McpServerConfig {\n return { url, headers: { Authorization: `Bearer ${token}` } };\n}\n\nfunction isDeclared(office: Office): boolean {\n const scopes = loadScopeMcpServers(office);\n return (\n Object.hasOwn(scopes.global, OPEN_CONNECTOR_SERVER) ||\n Object.hasOwn(scopes.conversation, OPEN_CONNECTOR_SERVER)\n );\n}\n\nfunction runtimeTokenName(office: Office, platformWorkspaceId?: string): string | undefined {\n const { platform, conversationId } = office.address;\n if (platform === \"github\") return `mikan:github:${conversationId}`;\n if (platform !== \"slack\") return undefined;\n if (platformWorkspaceId) return `mikan:slack:${platformWorkspaceId}:${conversationId}`;\n log.logWarning(\n `[${conversationId}] OpenConnector default skipped`,\n \"Slack workspace ID is unavailable\",\n );\n return undefined;\n}\n\nexport async function ensureDefaultOpenConnector({\n office,\n platformWorkspaceId,\n defaultServer,\n signal,\n fetch: fetchFn = globalThis.fetch,\n}: EnsureDefaultOpenConnectorOptions): Promise<void> {\n const adminToken = readEnv(\"OPENCONNECTOR_ADMIN_TOKEN\");\n if (!defaultServer?.url || !adminToken) return;\n const name = runtimeTokenName(office, platformWorkspaceId);\n if (!name || isDeclared(office)) return;\n\n const inflight = pending.get(office.stateDir);\n if (inflight) return inflight;\n const url = defaultServer.url;\n const task = (async () => {\n const token = await createRuntimeToken(new URL(url).origin, adminToken, name, fetchFn, signal);\n if (isDeclared(office)) return;\n const current = loadScopeMcpServers(office).conversation;\n updateConversationSettings(office, {\n mcpServers: { ...current, [OPEN_CONNECTOR_SERVER]: defaultEntry(url, token) },\n });\n log.logInfo(`[${office.address.conversationId}] Provisioned default OpenConnector token`);\n })();\n pending.set(office.stateDir, task);\n try {\n await task;\n } finally {\n pending.delete(office.stateDir);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presenter.d.ts","sourceRoot":"","sources":["../../src/harness/presenter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAG1B,eAAe,EACf,sBAAsB,EAEtB,kBAAkB,EAClB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"presenter.d.ts","sourceRoot":"","sources":["../../src/harness/presenter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAG1B,eAAe,EACf,sBAAsB,EAEtB,kBAAkB,EAClB,yBAAyB,EAEzB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMtD,OAAO,KAAK,EAAE,qBAAqB,EAA4B,MAAM,aAAa,CAAC;AA6GnF,wBAAgB,cAAc,IAAI,kBAAkB,CAEnD;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CA6CjB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAGxE;AAED,wBAAgB,yBAAyB,CAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEzF;AAwID,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,qBAAqB,EAChC,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,IAAI,CAAC,CAsBf;AA4ED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkG/E;AAygBD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI,CAyBlF"}
|
|
@@ -6,7 +6,8 @@ import { START_TASK_TOOL, TASK_STATUS_TOOL } from "./tools/task.js";
|
|
|
6
6
|
import { toRunEvent, toolResultText } from "./run-events.js";
|
|
7
7
|
import { REACT_TOOL } from "./tools/react.js";
|
|
8
8
|
import * as log from "../log.js";
|
|
9
|
-
import { errorMessage } from "../unknown-values.js";
|
|
9
|
+
import { errorMessage, isRecord } from "../unknown-values.js";
|
|
10
|
+
import { formatBudgetStop } from "./budget-stop.js";
|
|
10
11
|
const operationSpans = new WeakMap();
|
|
11
12
|
function spansFor(runState) {
|
|
12
13
|
let spans = operationSpans.get(runState);
|
|
@@ -47,6 +48,7 @@ function createRunStateDefaults() {
|
|
|
47
48
|
logCtx: null,
|
|
48
49
|
queue: null,
|
|
49
50
|
pendingTools: new Map(),
|
|
51
|
+
completedTools: [],
|
|
50
52
|
toolProgress: new Map(),
|
|
51
53
|
subagentProgress: new Map(),
|
|
52
54
|
completedSubagentProgress: [],
|
|
@@ -428,6 +430,21 @@ function toolCategory(name, roles) {
|
|
|
428
430
|
return "platform";
|
|
429
431
|
return "function";
|
|
430
432
|
}
|
|
433
|
+
function toolLabel(args, toolName) {
|
|
434
|
+
const label = isRecord(args) && typeof args.label === "string" ? args.label.trim() : "";
|
|
435
|
+
return label || toolName;
|
|
436
|
+
}
|
|
437
|
+
function runningTools(runState) {
|
|
438
|
+
const now = Date.now();
|
|
439
|
+
return [...runState.pendingTools.values()]
|
|
440
|
+
.filter((pending) => pending.toolName !== START_TASK_TOOL)
|
|
441
|
+
.map((pending) => ({
|
|
442
|
+
label: toolLabel(pending.args, pending.toolName),
|
|
443
|
+
toolName: pending.toolName,
|
|
444
|
+
durationMs: now - pending.startTime,
|
|
445
|
+
isError: false,
|
|
446
|
+
}));
|
|
447
|
+
}
|
|
431
448
|
function observeToolStart(event, context) {
|
|
432
449
|
const { runState, logCtx, baseAttrs } = context;
|
|
433
450
|
const args = (event.args ?? {});
|
|
@@ -492,6 +509,12 @@ function observeToolEnd(event, context) {
|
|
|
492
509
|
return;
|
|
493
510
|
}
|
|
494
511
|
const durationMs = pending ? Date.now() - pending.startTime : 0;
|
|
512
|
+
runState.completedTools.push({
|
|
513
|
+
label: toolLabel(pending?.args, event.toolName),
|
|
514
|
+
toolName: event.toolName,
|
|
515
|
+
durationMs,
|
|
516
|
+
isError: event.isError,
|
|
517
|
+
});
|
|
495
518
|
const toolSpan = spansFor(runState).tools.get(event.toolCallId);
|
|
496
519
|
toolSpan?.end({
|
|
497
520
|
attributes: metricAttributes({
|
|
@@ -801,13 +824,21 @@ function presentRunEvent(event, context) {
|
|
|
801
824
|
return;
|
|
802
825
|
}
|
|
803
826
|
case "budget_exceeded": {
|
|
804
|
-
const text =
|
|
827
|
+
const text = formatBudgetStop({
|
|
828
|
+
reason: event.reason,
|
|
829
|
+
llmCalls: event.llmCalls,
|
|
830
|
+
durationMs: event.durationMs,
|
|
831
|
+
completed: context.runState.completedTools,
|
|
832
|
+
running: runningTools(context.runState),
|
|
833
|
+
});
|
|
805
834
|
context.queue.enqueue(() => context.responder.respondDiagnostic(text, { style: "error" }), "budget exceeded");
|
|
806
835
|
return;
|
|
807
836
|
}
|
|
808
837
|
case "run_started":
|
|
809
838
|
case "run_ended":
|
|
810
839
|
return;
|
|
840
|
+
default:
|
|
841
|
+
event;
|
|
811
842
|
}
|
|
812
843
|
}
|
|
813
844
|
export function attachSessionEventHandlers(params) {
|