@ai-ecoverse/slicc-agent 6.11.2 → 6.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/kernel/env.js +15 -13
- package/dist/kernel/env.js.map +2 -2
- package/dist/kernel/jobs.js +87 -0
- package/dist/kernel/jobs.js.map +7 -0
- package/dist/licks/boot.js +45 -7
- package/dist/licks/boot.js.map +2 -2
- package/dist/licks/index.js.map +2 -2
- package/dist/licks/sources.js +4 -2
- package/dist/licks/sources.js.map +2 -2
- package/dist/main.js +13 -4
- package/dist/main.js.map +2 -2
- package/dist/net.js +8 -1
- package/dist/net.js.map +2 -2
- package/dist/services.js.map +2 -2
- package/dist/settings.js +25 -13
- package/dist/settings.js.map +2 -2
- package/dist/types/kernel/client.d.ts +2 -0
- package/dist/types/kernel/env.d.ts +2 -0
- package/dist/types/kernel/jobs.d.ts +17 -0
- package/dist/types/licks/boot.d.ts +9 -1
- package/dist/types/licks/index.d.ts +2 -0
- package/dist/types/licks/sources.d.ts +2 -0
- package/dist/types/net.d.ts +8 -0
- package/dist/types/services.d.ts +2 -0
- package/dist/types/settings.d.ts +2 -0
- package/package.json +3 -3
package/dist/settings.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/settings.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Context, replicatedState } from '@earendil-works/chord';\nimport { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\nimport type { CredentialStore, Provider } from '@earendil-works/pi-ai';\nimport { createModels, type MutableModels } from '@earendil-works/pi-ai/models';\nimport { amazonBedrockProvider } from '@earendil-works/pi-ai/providers/amazon-bedrock';\nimport {\n ADOBE,\n ADOBE_PROXY,\n adobeConfig,\n adobeIdentity,\n adobeProvider,\n adobeUsage,\n type Budget,\n} from './adobe.ts';\nimport { abortableBedrock } from './bedrock.ts';\nimport type { McpAccounts } from './mcp/index.ts';\nimport { MCP_ACCOUNT } from './mcp/label.ts';\nimport { BEDROCK, preferredModel } from './preferred.ts';\nimport {\n ADDED_FIRST,\n DEFAULT_REGION,\n type FieldSpec,\n KEY_PROVIDERS,\n LISTINGS,\n} from './providers.ts';\nimport type { KeysMoved } from './secrets/legacy.ts';\nimport type { VaultRecords } from './secrets/records.ts';\nimport type { PlainStore } from './secrets/store.ts';\nimport type {\n AccountField,\n AccountState,\n AgentSettings,\n ModelChoice,\n ProviderOption,\n SettingsState,\n} from './services.ts';\n\nexport { BEDROCK, PREFERRED_MODELS, preferredModel } from './preferred.ts';\n\nexport const DEFAULT_MODEL = { provider: BEDROCK, modelId: 'us.anthropic.claude-sonnet-5-5' };\nexport const DEFAULT_REGIONS: Readonly<Record<string, string>> = { [BEDROCK]: DEFAULT_REGION };\n\nconst specs = (providerId: string): readonly FieldSpec[] => LISTINGS.get(providerId)?.fields ?? [];\n\nexport const ACCOUNT_FIELDS: Readonly<Record<string, readonly AccountField[]>> = Object.fromEntries(\n [...LISTINGS.keys()]\n .filter((id) => specs(id).length)\n .map((id) => [id, specs(id).map(({ env: _env, ...field }) => field)])\n);\nexport const SIGN_IN_NEEDS_VAULT = \"Adobe sign-in needs seven's vault: update seven\";\nexport const KEY_NEEDS_VAULT = \"API keys are kept in seven's vault: update seven\";\n\nexport async function resolveDefaultModel(\n credentials: CredentialStore,\n providers: Provider[],\n models: MutableModels\n): Promise<{ provider: string; modelId: string }> {\n const stored = new Set((await credentials.list()).map((info) => info.providerId));\n for (const provider of providers) {\n if (!stored.has(provider.id)) continue;\n if (!models.getModels(provider.id).length && provider.refreshModels) {\n await models.refresh({ providers: [provider.id] }).catch(() => undefined);\n }\n const chosen = preferredModel(provider.id, models.getModels(provider.id));\n if (chosen) return { provider: provider.id, modelId: chosen.id };\n }\n return DEFAULT_MODEL;\n}\n\nconst signIn = new Set([ADOBE]);\nconst BUDGET_EVERY = 5 * 60 * 1000;\n\nexport function sliccProviders(version?: string): Provider[] {\n return [\n amazonBedrockProvider() as Provider,\n adobeProvider({ version }),\n ...KEY_PROVIDERS.map((entry) => entry.make()),\n ];\n}\n\nexport function withDefaultRegions(credentials: CredentialStore): CredentialStore {\n return {\n async read(providerId, options) {\n const credential = await credentials.read(providerId, options);\n const region = DEFAULT_REGIONS[providerId];\n if (credential?.type !== 'api_key' || !region || credential.env?.AWS_REGION) {\n return credential;\n }\n return { ...credential, env: { ...credential.env, AWS_REGION: region } };\n },\n list: (options) => credentials.list(options),\n modify: (providerId, fn, options) => credentials.modify(providerId, fn, options),\n delete: (providerId, options) => credentials.delete(providerId, options),\n };\n}\n\nexport function createSliccModels(\n credentials: CredentialStore,\n providers = sliccProviders()\n): MutableModels {\n const models = createModels({ credentials: withDefaultRegions(credentials) });\n for (const provider of providers) models.setProvider(abortableBedrock(provider));\n return models;\n}\n\nconst SHORT: Record<string, string> = { [BEDROCK]: 'Bedrock', [ADOBE]: 'Adobe' };\n\nfunction labels(\n models: MutableModels,\n providers: Provider[],\n stored: ReadonlySet<string>\n): Record<string, string> {\n return Object.fromEntries(\n providers\n .filter((provider) => !stored.has(provider.id))\n .flatMap((provider) =>\n models\n .getModels(provider.id)\n .map((model) => [\n `${provider.id}/${model.id}`,\n `${model.name} on ${SHORT[provider.id] ?? provider.name ?? provider.id}`,\n ])\n )\n );\n}\n\nfunction choices(\n models: MutableModels,\n providers: Provider[],\n stored: ReadonlySet<string>\n): ModelChoice[] {\n return providers\n .filter((provider) => stored.has(provider.id))\n .flatMap((provider) =>\n models.getModels(provider.id).map((model) => ({\n id: `${provider.id}/${model.id}`,\n label: model.name,\n provider: provider.name ?? provider.id,\n kind: 'chat' as const,\n reasoning: Boolean(model.reasoning),\n images: model.input.includes('image'),\n contextWindow: model.contextWindow,\n }))\n );\n}\n\nfunction listed(\n records: Pick<VaultRecords, 'model'>,\n fields: Pick<ProviderFields, 'get' | 'added'>\n): (providerId: string) => boolean {\n const added = new Set(fields.added() ?? ADDED_FIRST);\n return (providerId) =>\n !LISTINGS.has(providerId) ||\n added.has(providerId) ||\n records.model(providerId) !== undefined ||\n fields.get(providerId) !== undefined;\n}\n\nfunction filled(\n fields: readonly AccountField[],\n stored: Readonly<Record<string, string>> | undefined\n): AccountField[] {\n return fields.map((field) => {\n const value = stored?.[field.name]?.trim() || field.value;\n const options =\n field.options && value && !field.options.some((option) => option.value === value)\n ? [{ value, label: value }, ...field.options]\n : field.options;\n return { ...field, ...(options ? { options: [...options] } : {}), ...(value ? { value } : {}) };\n });\n}\n\nfunction accounts(\n records: Pick<VaultRecords, 'model'>,\n providers: Provider[],\n given: Pick<ProviderFields, 'ready' | 'get'>\n): AccountState[] {\n return providers.map((provider) => {\n const record = given.ready(provider.id) ? records.model(provider.id) : undefined;\n const fields = ACCOUNT_FIELDS[provider.id];\n const listing = LISTINGS.get(provider.id);\n return {\n id: provider.id,\n provider: provider.name ?? provider.id,\n identity: record ? (signIn.has(provider.id) ? 'Adobe ID' : 'API key') : '',\n status: !record ? 'disconnected' : record.state === 'expired' ? 'expired' : 'connected',\n auth: signIn.has(provider.id) ? 'oauth' : 'api-key',\n needs: listing?.corsFree ? 'cors-free-transport' : null,\n group: 'providers',\n store: 'vault',\n ...(fields ? { fields: filled(fields, given.get(provider.id)) } : {}),\n ...(listing\n ? {\n description: listing.description,\n vaultName: listing.vaultName,\n ...(listing.keyUrl ? { keyUrl: listing.keyUrl } : {}),\n }\n : {}),\n };\n });\n}\n\nfunction offered(providers: Provider[]): ProviderOption[] {\n return providers\n .flatMap((provider): ProviderOption[] => {\n const listing = LISTINGS.get(provider.id);\n if (!listing) return [];\n const fields = ACCOUNT_FIELDS[provider.id];\n return [\n {\n id: provider.id,\n name: provider.name,\n description: listing.description,\n auth: listing.auth,\n vaultName: listing.vaultName,\n ...(fields ? { fields: filled(fields, undefined) } : {}),\n ...(listing.keyUrl ? { keyUrl: listing.keyUrl } : {}),\n ...(listing.corsFree ? { needs: 'cors-free-transport' as const } : {}),\n },\n ];\n })\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport interface ProviderFields {\n get(providerId: string): Readonly<Record<string, string>> | undefined;\n env(providerId: string): Readonly<Record<string, string>> | undefined;\n set(providerId: string, fields: Record<string, string> | undefined): Promise<void>;\n ready(providerId: string): boolean;\n added(): readonly string[] | undefined;\n add(providerId: string): Promise<void>;\n forget(providerId: string): Promise<void>;\n}\n\nconst ADDED = 'providers';\n\nexport async function providerFields(\n store: PlainStore,\n providers: readonly Provider[]\n): Promise<ProviderFields> {\n const known = new Map<string, Record<string, string>>();\n for (const provider of providers) {\n const saved = (await store.get(`model:${provider.id}`)) as Record<string, string> | undefined;\n if (saved && typeof saved === 'object') known.set(provider.id, saved);\n }\n const saved = await store.get(ADDED);\n let added = Array.isArray(saved)\n ? saved.filter((id): id is string => typeof id === 'string')\n : undefined;\n const keep = async (next: string[]) => {\n added = next;\n await store.set(ADDED, next);\n };\n return {\n ready: (providerId) =>\n specs(providerId).every((spec) => {\n const value = known.get(providerId)?.[spec.name];\n if (value === undefined) return !spec.required;\n return typeof spec.env(value.trim()) !== 'string';\n }),\n added: () => added,\n async add(providerId) {\n const now = added ?? ADDED_FIRST;\n if (added && now.includes(providerId)) return;\n await keep([...new Set([...now, providerId])]);\n },\n async forget(providerId) {\n await keep((added ?? ADDED_FIRST).filter((id) => id !== providerId));\n known.delete(providerId);\n await store.set(`model:${providerId}`, undefined);\n },\n get: (providerId) => known.get(providerId),\n env(providerId) {\n const fields = known.get(providerId);\n if (!fields) return undefined;\n return Object.assign(\n {},\n ...specs(providerId).flatMap((spec) => {\n const value = fields[spec.name];\n const env = value === undefined ? '' : spec.env(value.trim());\n return typeof env === 'string' ? [] : [env];\n })\n );\n },\n async set(providerId, fields) {\n const kept: Record<string, string> = {};\n for (const spec of specs(providerId)) {\n const given = fields?.[spec.name];\n const value = typeof given === 'string' ? given.trim() : '';\n const stored = known.get(providerId)?.[spec.name];\n if (!value && spec.required && fields && stored) kept[spec.name] = stored;\n else if (!value && spec.required && fields)\n throw new Error(`${spec.label} can\u2019t be empty.`);\n else if (value) {\n const problem = spec.env(value);\n if (typeof problem === 'string') throw new Error(problem);\n kept[spec.name] = value;\n }\n }\n const next = Object.keys(kept).length ? kept : undefined;\n if (next) known.set(providerId, next);\n else known.delete(providerId);\n await store.set(`model:${providerId}`, next);\n },\n };\n}\n\nexport type UsageReader = (token: string) => Promise<Budget | null>;\n\nasync function budget(records: Pick<VaultRecords, 'model'>, usage: UsageReader) {\n const key = records.model(ADOBE)?.placeholder;\n const found = key ? await usage(key).catch(() => null) : null;\n return found ? { provider: ADOBE, ...found } : null;\n}\n\nexport interface SettingsSources {\n records: VaultRecords;\n fields: ProviderFields;\n}\n\nexport async function createAgentSettings(\n models: MutableModels,\n sources: SettingsSources,\n providers = sliccProviders(),\n options: { usage?: UsageReader; every?: number; mcp?: McpAccounts; moved?: KeysMoved } = {}\n): Promise<AgentSettings> {\n const { mcp, moved } = options;\n const { records, fields } = sources;\n const routed = (providerId: string) => (providerId.startsWith(MCP_ACCOUNT) ? mcp : undefined);\n const adobe = providers.find((provider) => provider.id === ADOBE);\n const endpoint = adobe?.baseUrl ?? ADOBE_PROXY;\n const identity = (adobe?.headers as Record<string, string> | undefined) ?? adobeIdentity();\n const usage = options.usage ?? ((token: string) => adobeUsage(token, { endpoint, identity }));\n const snapshot = async (): Promise<SettingsState> => {\n const stored = new Set(\n providers\n .filter((provider) => records.model(provider.id) && fields.ready(provider.id))\n .map((provider) => provider.id)\n );\n const show = listed(records, fields);\n const shown = providers.filter((provider) => show(provider.id));\n return {\n models: choices(models, providers, stored),\n labels: labels(models, shown, stored),\n accounts: [...accounts(records, shown, fields), ...((await mcp?.accounts()) ?? [])],\n providers: offered(providers),\n budget: await budget(records, usage),\n ...(moved?.state.value?.length\n ? { moved: moved.state.value.map((name) => ({ ...name })) }\n : {}),\n };\n };\n const state = replicatedState<SettingsState>(await snapshot());\n let latest = Promise.resolve();\n const refresh = (context: Context) => {\n const next = latest.then(async () => state.replace(context, await snapshot()));\n latest = next.catch(() => undefined);\n return next;\n };\n const signedIn = providers\n .filter((provider) => signIn.has(provider.id))\n .map((provider) => provider.id);\n const discover = (ids: string[]) =>\n models.refresh({ providers: ids }).then(\n () => undefined,\n () => undefined\n );\n if (signedIn.length) {\n const cycle = () =>\n void discover(signedIn)\n .then(() => refresh(BACKGROUND_CONTEXT))\n .catch(() => undefined);\n cycle();\n const timer: unknown = setInterval(cycle, options.every ?? BUDGET_EVERY);\n (timer as { unref?: () => void }).unref?.();\n }\n mcp?.onChange(() => void refresh(BACKGROUND_CONTEXT).catch(() => undefined));\n moved?.state.subscribe((_value, context) => void refresh(context).catch(() => undefined));\n const held = () => signedIn.filter((id) => records.model(id)).join(' ');\n let seen = held();\n records.state.subscribe(() => {\n const now = held();\n const added = now !== seen;\n seen = now;\n const discovered = added ? discover(signedIn) : Promise.resolve();\n void discovered.then(() => refresh(BACKGROUND_CONTEXT)).catch(() => undefined);\n });\n const reread = (context: Context) => records.refresh(context).catch(() => undefined);\n return {\n state,\n async connect(providerId, secret, given, context) {\n const server = routed(providerId);\n if (server) {\n await server.connect(providerId, secret);\n await refresh(context);\n return;\n }\n if (secret !== null)\n throw new Error(signIn.has(providerId) ? SIGN_IN_NEEDS_VAULT : KEY_NEEDS_VAULT);\n if (given !== null) await fields.set(providerId, given);\n if (LISTINGS.has(providerId)) await fields.add(providerId);\n records.reconnected(providerId);\n await reread(context);\n if (signIn.has(providerId)) await discover([providerId]);\n await refresh(context);\n },\n async signIn(providerId) {\n const server = routed(providerId);\n if (server) return server.signIn(providerId);\n if (providerId !== ADOBE) return null;\n const { clientId, scopes, imsEnvironment } = await adobeConfig(\n endpoint,\n (input, init) => globalThis.fetch(input, init),\n identity\n );\n return { clientId, scopes, imsEnvironment: imsEnvironment || 'prod' };\n },\n async dismissMoved(context) {\n await moved?.dismiss(context);\n await refresh(context);\n },\n async disconnect(providerId, context) {\n const server = routed(providerId);\n if (server) await server.disconnect(providerId);\n else if (LISTINGS.has(providerId)) await fields.add(providerId);\n else await fields.set(providerId, undefined);\n await reread(context);\n await refresh(context);\n },\n async serverUrl(providerId) {\n return (await routed(providerId)?.serverUrl(providerId)) ?? null;\n },\n async remove(providerId, context) {\n const server = routed(providerId);\n if (server) await server.disconnect(providerId);\n else await fields.forget(providerId);\n await reread(context);\n await refresh(context);\n },\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { type Context, replicatedState } from '@earendil-works/chord';\nimport { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\nimport type { CredentialStore, Provider } from '@earendil-works/pi-ai';\nimport { createModels, type MutableModels } from '@earendil-works/pi-ai/models';\nimport { amazonBedrockProvider } from '@earendil-works/pi-ai/providers/amazon-bedrock';\nimport {\n ADOBE,\n ADOBE_PROXY,\n adobeConfig,\n adobeIdentity,\n adobeProvider,\n adobeUsage,\n type Budget,\n} from './adobe.ts';\nimport { abortableBedrock } from './bedrock.ts';\nimport type { McpAccounts } from './mcp/index.ts';\nimport { MCP_ACCOUNT } from './mcp/label.ts';\nimport type { Reach } from './net.ts';\nimport { BEDROCK, preferredModel } from './preferred.ts';\nimport {\n ADDED_FIRST,\n DEFAULT_REGION,\n type FieldSpec,\n KEY_PROVIDERS,\n LISTINGS,\n type Listing,\n} from './providers.ts';\nimport type { KeysMoved } from './secrets/legacy.ts';\nimport type { VaultRecords } from './secrets/records.ts';\nimport type { PlainStore } from './secrets/store.ts';\nimport type {\n AccountField,\n AccountState,\n AgentSettings,\n ModelChoice,\n ProviderOption,\n SettingsState,\n} from './services.ts';\n\nexport { BEDROCK, PREFERRED_MODELS, preferredModel } from './preferred.ts';\n\nexport const DEFAULT_MODEL = { provider: BEDROCK, modelId: 'us.anthropic.claude-sonnet-5-5' };\nexport const DEFAULT_REGIONS: Readonly<Record<string, string>> = { [BEDROCK]: DEFAULT_REGION };\n\nconst specs = (providerId: string): readonly FieldSpec[] => LISTINGS.get(providerId)?.fields ?? [];\n\nexport const ACCOUNT_FIELDS: Readonly<Record<string, readonly AccountField[]>> = Object.fromEntries(\n [...LISTINGS.keys()]\n .filter((id) => specs(id).length)\n .map((id) => [id, specs(id).map(({ env: _env, ...field }) => field)])\n);\nexport const SIGN_IN_NEEDS_VAULT = \"Adobe sign-in needs seven's vault: update seven\";\nexport const KEY_NEEDS_VAULT = \"API keys are kept in seven's vault: update seven\";\n\nexport async function resolveDefaultModel(\n credentials: CredentialStore,\n providers: Provider[],\n models: MutableModels\n): Promise<{ provider: string; modelId: string }> {\n const stored = new Set((await credentials.list()).map((info) => info.providerId));\n for (const provider of providers) {\n if (!stored.has(provider.id)) continue;\n if (!models.getModels(provider.id).length && provider.refreshModels) {\n await models.refresh({ providers: [provider.id] }).catch(() => undefined);\n }\n const chosen = preferredModel(provider.id, models.getModels(provider.id));\n if (chosen) return { provider: provider.id, modelId: chosen.id };\n }\n return DEFAULT_MODEL;\n}\n\nconst signIn = new Set([ADOBE]);\nconst BUDGET_EVERY = 5 * 60 * 1000;\n\nexport function sliccProviders(version?: string): Provider[] {\n return [\n amazonBedrockProvider() as Provider,\n adobeProvider({ version }),\n ...KEY_PROVIDERS.map((entry) => entry.make()),\n ];\n}\n\nexport function withDefaultRegions(credentials: CredentialStore): CredentialStore {\n return {\n async read(providerId, options) {\n const credential = await credentials.read(providerId, options);\n const region = DEFAULT_REGIONS[providerId];\n if (credential?.type !== 'api_key' || !region || credential.env?.AWS_REGION) {\n return credential;\n }\n return { ...credential, env: { ...credential.env, AWS_REGION: region } };\n },\n list: (options) => credentials.list(options),\n modify: (providerId, fn, options) => credentials.modify(providerId, fn, options),\n delete: (providerId, options) => credentials.delete(providerId, options),\n };\n}\n\nexport function createSliccModels(\n credentials: CredentialStore,\n providers = sliccProviders()\n): MutableModels {\n const models = createModels({ credentials: withDefaultRegions(credentials) });\n for (const provider of providers) models.setProvider(abortableBedrock(provider));\n return models;\n}\n\nconst SHORT: Record<string, string> = { [BEDROCK]: 'Bedrock', [ADOBE]: 'Adobe' };\n\nfunction labels(\n models: MutableModels,\n providers: Provider[],\n stored: ReadonlySet<string>\n): Record<string, string> {\n return Object.fromEntries(\n providers\n .filter((provider) => !stored.has(provider.id))\n .flatMap((provider) =>\n models\n .getModels(provider.id)\n .map((model) => [\n `${provider.id}/${model.id}`,\n `${model.name} on ${SHORT[provider.id] ?? provider.name ?? provider.id}`,\n ])\n )\n );\n}\n\nfunction choices(\n models: MutableModels,\n providers: Provider[],\n stored: ReadonlySet<string>\n): ModelChoice[] {\n return providers\n .filter((provider) => stored.has(provider.id))\n .flatMap((provider) =>\n models.getModels(provider.id).map((model) => ({\n id: `${provider.id}/${model.id}`,\n label: model.name,\n provider: provider.name ?? provider.id,\n kind: 'chat' as const,\n reasoning: Boolean(model.reasoning),\n images: model.input.includes('image'),\n contextWindow: model.contextWindow,\n }))\n );\n}\n\nfunction listed(\n records: Pick<VaultRecords, 'model'>,\n fields: Pick<ProviderFields, 'get' | 'added'>\n): (providerId: string) => boolean {\n const added = new Set(fields.added() ?? ADDED_FIRST);\n return (providerId) =>\n !LISTINGS.has(providerId) ||\n added.has(providerId) ||\n records.model(providerId) !== undefined ||\n fields.get(providerId) !== undefined;\n}\n\nfunction filled(\n fields: readonly AccountField[],\n stored: Readonly<Record<string, string>> | undefined\n): AccountField[] {\n return fields.map((field) => {\n const value = stored?.[field.name]?.trim() || field.value;\n const options =\n field.options && value && !field.options.some((option) => option.value === value)\n ? [{ value, label: value }, ...field.options]\n : field.options;\n return { ...field, ...(options ? { options: [...options] } : {}), ...(value ? { value } : {}) };\n });\n}\n\nfunction accounts(\n records: Pick<VaultRecords, 'model'>,\n providers: Provider[],\n given: Pick<ProviderFields, 'ready' | 'get'>,\n blocked: (providerId: string) => boolean\n): AccountState[] {\n return providers.map((provider) => {\n const record = given.ready(provider.id) ? records.model(provider.id) : undefined;\n const fields = ACCOUNT_FIELDS[provider.id];\n const listing = LISTINGS.get(provider.id);\n return {\n id: provider.id,\n provider: provider.name ?? provider.id,\n identity: record ? (signIn.has(provider.id) ? 'Adobe ID' : 'API key') : '',\n status: !record ? 'disconnected' : record.state === 'expired' ? 'expired' : 'connected',\n auth: signIn.has(provider.id) ? 'oauth' : 'api-key',\n needs: listing?.corsFree ? 'cors-free-transport' : null,\n ...(blocked(provider.id) ? { blocked: 'cors-free-transport' as const } : {}),\n group: 'providers',\n store: 'vault',\n ...(fields ? { fields: filled(fields, given.get(provider.id)) } : {}),\n ...about(listing),\n };\n });\n}\n\nfunction about(listing: Listing | undefined) {\n if (!listing) return {};\n return {\n description: listing.description,\n vaultName: listing.vaultName,\n ...(listing.keyUrl ? { keyUrl: listing.keyUrl } : {}),\n };\n}\n\nfunction offered(\n providers: Provider[],\n blocked: (providerId: string) => boolean\n): ProviderOption[] {\n return providers\n .flatMap((provider): ProviderOption[] => {\n const listing = LISTINGS.get(provider.id);\n if (!listing) return [];\n const fields = ACCOUNT_FIELDS[provider.id];\n return [\n {\n id: provider.id,\n name: provider.name,\n description: listing.description,\n auth: listing.auth,\n vaultName: listing.vaultName,\n ...(fields ? { fields: filled(fields, undefined) } : {}),\n ...(listing.keyUrl ? { keyUrl: listing.keyUrl } : {}),\n ...(listing.corsFree ? { needs: 'cors-free-transport' as const } : {}),\n ...(blocked(provider.id) ? { blocked: 'cors-free-transport' as const } : {}),\n },\n ];\n })\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport interface ProviderFields {\n get(providerId: string): Readonly<Record<string, string>> | undefined;\n env(providerId: string): Readonly<Record<string, string>> | undefined;\n set(providerId: string, fields: Record<string, string> | undefined): Promise<void>;\n ready(providerId: string): boolean;\n added(): readonly string[] | undefined;\n add(providerId: string): Promise<void>;\n forget(providerId: string): Promise<void>;\n}\n\nconst ADDED = 'providers';\n\nexport async function providerFields(\n store: PlainStore,\n providers: readonly Provider[]\n): Promise<ProviderFields> {\n const known = new Map<string, Record<string, string>>();\n for (const provider of providers) {\n const saved = (await store.get(`model:${provider.id}`)) as Record<string, string> | undefined;\n if (saved && typeof saved === 'object') known.set(provider.id, saved);\n }\n const saved = await store.get(ADDED);\n let added = Array.isArray(saved)\n ? saved.filter((id): id is string => typeof id === 'string')\n : undefined;\n const keep = async (next: string[]) => {\n added = next;\n await store.set(ADDED, next);\n };\n return {\n ready: (providerId) =>\n specs(providerId).every((spec) => {\n const value = known.get(providerId)?.[spec.name];\n if (value === undefined) return !spec.required;\n return typeof spec.env(value.trim()) !== 'string';\n }),\n added: () => added,\n async add(providerId) {\n const now = added ?? ADDED_FIRST;\n if (added && now.includes(providerId)) return;\n await keep([...new Set([...now, providerId])]);\n },\n async forget(providerId) {\n await keep((added ?? ADDED_FIRST).filter((id) => id !== providerId));\n known.delete(providerId);\n await store.set(`model:${providerId}`, undefined);\n },\n get: (providerId) => known.get(providerId),\n env(providerId) {\n const fields = known.get(providerId);\n if (!fields) return undefined;\n return Object.assign(\n {},\n ...specs(providerId).flatMap((spec) => {\n const value = fields[spec.name];\n const env = value === undefined ? '' : spec.env(value.trim());\n return typeof env === 'string' ? [] : [env];\n })\n );\n },\n async set(providerId, fields) {\n const kept: Record<string, string> = {};\n for (const spec of specs(providerId)) {\n const given = fields?.[spec.name];\n const value = typeof given === 'string' ? given.trim() : '';\n const stored = known.get(providerId)?.[spec.name];\n if (!value && spec.required && fields && stored) kept[spec.name] = stored;\n else if (!value && spec.required && fields)\n throw new Error(`${spec.label} can\u2019t be empty.`);\n else if (value) {\n const problem = spec.env(value);\n if (typeof problem === 'string') throw new Error(problem);\n kept[spec.name] = value;\n }\n }\n const next = Object.keys(kept).length ? kept : undefined;\n if (next) known.set(providerId, next);\n else known.delete(providerId);\n await store.set(`model:${providerId}`, next);\n },\n };\n}\n\nexport type UsageReader = (token: string) => Promise<Budget | null>;\n\nasync function budget(records: Pick<VaultRecords, 'model'>, usage: UsageReader) {\n const key = records.model(ADOBE)?.placeholder;\n const found = key ? await usage(key).catch(() => null) : null;\n return found ? { provider: ADOBE, ...found } : null;\n}\n\nexport interface SettingsSources {\n records: VaultRecords;\n fields: ProviderFields;\n}\n\nfunction blockedBy(reach: Reach | undefined): (providerId: string) => boolean {\n return (providerId) => Boolean(LISTINGS.get(providerId)?.corsFree) && reach?.free() === false;\n}\n\nexport async function createAgentSettings(\n models: MutableModels,\n sources: SettingsSources,\n providers = sliccProviders(),\n options: {\n usage?: UsageReader;\n every?: number;\n mcp?: McpAccounts;\n moved?: KeysMoved;\n reach?: Reach;\n } = {}\n): Promise<AgentSettings> {\n const { mcp, moved, reach } = options;\n const blocked = blockedBy(reach);\n const { records, fields } = sources;\n const routed = (providerId: string) => (providerId.startsWith(MCP_ACCOUNT) ? mcp : undefined);\n const adobe = providers.find((provider) => provider.id === ADOBE);\n const endpoint = adobe?.baseUrl ?? ADOBE_PROXY;\n const identity = (adobe?.headers as Record<string, string> | undefined) ?? adobeIdentity();\n const usage = options.usage ?? ((token: string) => adobeUsage(token, { endpoint, identity }));\n const snapshot = async (): Promise<SettingsState> => {\n const stored = new Set(\n providers\n .filter((provider) => records.model(provider.id) && fields.ready(provider.id))\n .map((provider) => provider.id)\n );\n const show = listed(records, fields);\n const shown = providers.filter((provider) => show(provider.id));\n const open = (list: Provider[]) => list.filter((provider) => !blocked(provider.id));\n return {\n models: choices(models, open(providers), stored),\n labels: labels(models, open(shown), stored),\n accounts: [...accounts(records, shown, fields, blocked), ...((await mcp?.accounts()) ?? [])],\n providers: offered(providers, blocked),\n budget: await budget(records, usage),\n ...(moved?.state.value?.length\n ? { moved: moved.state.value.map((name) => ({ ...name })) }\n : {}),\n };\n };\n const state = replicatedState<SettingsState>(await snapshot());\n let latest = Promise.resolve();\n const refresh = (context: Context) => {\n const next = latest.then(async () => state.replace(context, await snapshot()));\n latest = next.catch(() => undefined);\n return next;\n };\n const signedIn = providers\n .filter((provider) => signIn.has(provider.id))\n .map((provider) => provider.id);\n const discover = (ids: string[]) =>\n models.refresh({ providers: ids }).then(\n () => undefined,\n () => undefined\n );\n if (signedIn.length) {\n const cycle = () =>\n void discover(signedIn)\n .then(() => refresh(BACKGROUND_CONTEXT))\n .catch(() => undefined);\n cycle();\n const timer: unknown = setInterval(cycle, options.every ?? BUDGET_EVERY);\n (timer as { unref?: () => void }).unref?.();\n }\n mcp?.onChange(() => void refresh(BACKGROUND_CONTEXT).catch(() => undefined));\n reach?.onChange(() => void refresh(BACKGROUND_CONTEXT).catch(() => undefined));\n moved?.state.subscribe((_value, context) => void refresh(context).catch(() => undefined));\n const held = () => signedIn.filter((id) => records.model(id)).join(' ');\n let seen = held();\n records.state.subscribe(() => {\n const now = held();\n const added = now !== seen;\n seen = now;\n const discovered = added ? discover(signedIn) : Promise.resolve();\n void discovered.then(() => refresh(BACKGROUND_CONTEXT)).catch(() => undefined);\n });\n const reread = (context: Context) => records.refresh(context).catch(() => undefined);\n return {\n state,\n async connect(providerId, secret, given, context) {\n const server = routed(providerId);\n if (server) {\n await server.connect(providerId, secret);\n await refresh(context);\n return;\n }\n if (secret !== null)\n throw new Error(signIn.has(providerId) ? SIGN_IN_NEEDS_VAULT : KEY_NEEDS_VAULT);\n if (given !== null) await fields.set(providerId, given);\n if (LISTINGS.has(providerId)) await fields.add(providerId);\n records.reconnected(providerId);\n await reread(context);\n if (signIn.has(providerId)) await discover([providerId]);\n await refresh(context);\n },\n async signIn(providerId) {\n const server = routed(providerId);\n if (server) return server.signIn(providerId);\n if (providerId !== ADOBE) return null;\n const { clientId, scopes, imsEnvironment } = await adobeConfig(\n endpoint,\n (input, init) => globalThis.fetch(input, init),\n identity\n );\n return { clientId, scopes, imsEnvironment: imsEnvironment || 'prod' };\n },\n async dismissMoved(context) {\n await moved?.dismiss(context);\n await refresh(context);\n },\n async disconnect(providerId, context) {\n const server = routed(providerId);\n if (server) await server.disconnect(providerId);\n else if (LISTINGS.has(providerId)) await fields.add(providerId);\n else await fields.set(providerId, undefined);\n await reread(context);\n await refresh(context);\n },\n async serverUrl(providerId) {\n return (await routed(providerId)?.serverUrl(providerId)) ?? null;\n },\n async remove(providerId, context) {\n const server = routed(providerId);\n if (server) await server.disconnect(providerId);\n else await fields.forget(providerId);\n await reread(context);\n await refresh(context);\n },\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["BEDROCK", "preferredModel", "saved"]
|
|
7
7
|
}
|
|
@@ -4,6 +4,7 @@ import type { Scrub } from '../secrets/scrub.ts';
|
|
|
4
4
|
import type { Activity } from './activity.ts';
|
|
5
5
|
import type { KernelClient } from './client.ts';
|
|
6
6
|
import type { ProcessGroups } from './groups.ts';
|
|
7
|
+
import type { Jobs } from './jobs.ts';
|
|
7
8
|
import { type PollOptions } from './watch.ts';
|
|
8
9
|
export interface KernelEnvOptions {
|
|
9
10
|
cwd: string;
|
|
@@ -11,6 +12,7 @@ export interface KernelEnvOptions {
|
|
|
11
12
|
watch?: PollOptions;
|
|
12
13
|
activity?: Activity;
|
|
13
14
|
groups?: ProcessGroups;
|
|
15
|
+
jobs?: Jobs;
|
|
14
16
|
owner?: number;
|
|
15
17
|
exports?: Readonly<Record<string, string>>;
|
|
16
18
|
scrub?: Scrub;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { KernelClient, KernelProcess } from './client.ts';
|
|
2
|
+
export type Job = {
|
|
3
|
+
pid: number;
|
|
4
|
+
pgid: number;
|
|
5
|
+
command: string;
|
|
6
|
+
};
|
|
7
|
+
export interface Jobs {
|
|
8
|
+
started(client: KernelClient, command: string, process: KernelProcess): Promise<void>;
|
|
9
|
+
list(): Job[];
|
|
10
|
+
adopt(jobs: readonly Job[]): void;
|
|
11
|
+
watch(listener: () => Promise<void>): () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare const JOBS_MS = 2000;
|
|
14
|
+
type Ps = Pick<KernelClient, 'ps'>;
|
|
15
|
+
export declare function shortCommand(command: string): string;
|
|
16
|
+
export declare function backgroundJobs(client: Ps, ms?: number): Jobs;
|
|
17
|
+
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Context } from '@earendil-works/chord';
|
|
2
2
|
import { type Conversation, type EntryRecord, type Harness } from '@earendil-works/pi-durable';
|
|
3
|
+
import type { Job, Jobs } from '../kernel/jobs.ts';
|
|
3
4
|
import type { Deliver } from './fswatch.ts';
|
|
4
5
|
type HostState = {
|
|
5
6
|
cron: Record<string, {
|
|
@@ -9,12 +10,19 @@ type HostState = {
|
|
|
9
10
|
boot: string | null;
|
|
10
11
|
mark: number;
|
|
11
12
|
upgrades: number;
|
|
13
|
+
jobs?: Job[];
|
|
12
14
|
};
|
|
13
15
|
export declare const LicksHostDoc: import("@earendil-works/pi-durable").SessionDocToken<HostState>;
|
|
14
16
|
export interface BootFacts {
|
|
15
17
|
version: string;
|
|
16
18
|
boot: string | null;
|
|
17
19
|
}
|
|
20
|
+
export declare const LISTED = 5;
|
|
18
21
|
export declare function bashCommands(entries: readonly EntryRecord[], after: number): string[];
|
|
19
|
-
export declare function
|
|
22
|
+
export declare function backgroundList(jobs: readonly Job[]): string[];
|
|
23
|
+
export declare function bootLicks(harness: Harness, cone: Conversation, deliver: Deliver, facts: BootFacts, context: Context, jobs?: Jobs, listen?: () => void): Promise<void>;
|
|
24
|
+
export declare function booting(harness: Harness, cone: () => Conversation, deliver: Deliver, jobs: Jobs | undefined): {
|
|
25
|
+
boot(facts: BootFacts, context: Context): Promise<void>;
|
|
26
|
+
stop(): void;
|
|
27
|
+
};
|
|
20
28
|
export {};
|
|
@@ -3,6 +3,7 @@ import type { Conversation, Harness, Registry } from '@earendil-works/pi-durable
|
|
|
3
3
|
import type { ExecutionEnv } from '@earendil-works/pi-durable/env';
|
|
4
4
|
import { type Agents } from '../agents.ts';
|
|
5
5
|
import type { Activity } from '../kernel/activity.ts';
|
|
6
|
+
import type { Jobs } from '../kernel/jobs.ts';
|
|
6
7
|
import type { LickChannel, LickTarget } from './lick.ts';
|
|
7
8
|
import { type Licks } from './licks.ts';
|
|
8
9
|
import { type LickDir, type LickSources } from './sources.ts';
|
|
@@ -20,6 +21,7 @@ export interface LicksSetup {
|
|
|
20
21
|
home: string;
|
|
21
22
|
flushEvery?: number;
|
|
22
23
|
activity?: Activity;
|
|
24
|
+
jobs?: Jobs;
|
|
23
25
|
dirs?: () => Promise<readonly LickDir[]>;
|
|
24
26
|
cronUser?: (target: LickTarget, place: LickDir) => string | undefined;
|
|
25
27
|
}): LickSources;
|
|
@@ -2,6 +2,7 @@ import type { Context } from '@earendil-works/chord';
|
|
|
2
2
|
import type { Conversation, Harness } from '@earendil-works/pi-durable';
|
|
3
3
|
import type { ExecutionEnv } from '@earendil-works/pi-durable/env';
|
|
4
4
|
import type { Activity } from '../kernel/activity.ts';
|
|
5
|
+
import type { Jobs } from '../kernel/jobs.ts';
|
|
5
6
|
import { type Attachment } from './attachment.ts';
|
|
6
7
|
import { type BootFacts } from './boot.ts';
|
|
7
8
|
import { type ConfigError, type WebhookEntry } from './config.ts';
|
|
@@ -17,6 +18,7 @@ export interface LickSourcesOptions {
|
|
|
17
18
|
licks: Licks;
|
|
18
19
|
flushEvery?: number;
|
|
19
20
|
activity?: Activity;
|
|
21
|
+
jobs?: Jobs;
|
|
20
22
|
dirs?: () => readonly LickDir[] | Promise<readonly LickDir[]>;
|
|
21
23
|
cronUser?: (target: LickTarget, place: LickDir) => string | undefined;
|
|
22
24
|
fetch?: typeof fetch;
|
package/dist/types/net.d.ts
CHANGED
|
@@ -27,6 +27,14 @@ export interface TransportExit {
|
|
|
27
27
|
}
|
|
28
28
|
export declare function linkedExit(transport: Transport | undefined): TransportExit | undefined;
|
|
29
29
|
export declare function pageOnly(transport: Transport | undefined): boolean;
|
|
30
|
+
export interface Reach {
|
|
31
|
+
free(): boolean;
|
|
32
|
+
onChange(listener: () => void): () => void;
|
|
33
|
+
}
|
|
34
|
+
export declare function transportReach(client: {
|
|
35
|
+
transport: Transport;
|
|
36
|
+
onTraits?: (listener: () => void) => () => void;
|
|
37
|
+
}): Reach;
|
|
30
38
|
export type Loopback = (request: Request, options: {
|
|
31
39
|
port: number;
|
|
32
40
|
signal?: AbortSignal;
|
package/dist/types/services.d.ts
CHANGED
|
@@ -343,6 +343,7 @@ export interface AccountState {
|
|
|
343
343
|
status: 'connected' | 'disconnected' | 'expired';
|
|
344
344
|
auth: 'api-key' | 'oauth';
|
|
345
345
|
needs: 'cors-free-transport' | null;
|
|
346
|
+
blocked?: 'cors-free-transport';
|
|
346
347
|
group?: 'providers' | 'mcp';
|
|
347
348
|
secret?: 'api-key' | 'token';
|
|
348
349
|
store?: 'vault';
|
|
@@ -372,6 +373,7 @@ export interface ProviderOption {
|
|
|
372
373
|
fields?: AccountField[];
|
|
373
374
|
keyUrl?: string;
|
|
374
375
|
needs?: 'cors-free-transport';
|
|
376
|
+
blocked?: 'cors-free-transport';
|
|
375
377
|
vaultName?: string;
|
|
376
378
|
}
|
|
377
379
|
export interface BudgetState {
|
package/dist/types/settings.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { CredentialStore, Provider } from '@earendil-works/pi-ai';
|
|
|
2
2
|
import { type MutableModels } from '@earendil-works/pi-ai/models';
|
|
3
3
|
import { type Budget } from './adobe.ts';
|
|
4
4
|
import type { McpAccounts } from './mcp/index.ts';
|
|
5
|
+
import type { Reach } from './net.ts';
|
|
5
6
|
import type { KeysMoved } from './secrets/legacy.ts';
|
|
6
7
|
import type { VaultRecords } from './secrets/records.ts';
|
|
7
8
|
import type { PlainStore } from './secrets/store.ts';
|
|
@@ -42,4 +43,5 @@ export declare function createAgentSettings(models: MutableModels, sources: Sett
|
|
|
42
43
|
every?: number;
|
|
43
44
|
mcp?: McpAccounts;
|
|
44
45
|
moved?: KeysMoved;
|
|
46
|
+
reach?: Reach;
|
|
45
47
|
}): Promise<AgentSettings>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-ecoverse/slicc-agent",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.12.0",
|
|
4
4
|
"description": "SLICC's agent core on pi durable: an agent worker, session storage, remoting and pi extensions",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
"release": "semantic-release"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@ai-ecoverse/slicc-kernel": "1.
|
|
68
|
+
"@ai-ecoverse/slicc-kernel": "1.129.0",
|
|
69
69
|
"@ai-ecoverse/slicc-scrub": "1.0.0",
|
|
70
70
|
"@ai-ecoverse/slicc-shared-web": "1.24.2",
|
|
71
|
-
"@ai-ecoverse/slicc-spectrum": "1.94.
|
|
71
|
+
"@ai-ecoverse/slicc-spectrum": "1.94.2",
|
|
72
72
|
"@ai-ecoverse/wasi-fnox": "1.39.0-5",
|
|
73
73
|
"@ai-ecoverse/wasm-bash": "5.3.0-20",
|
|
74
74
|
"@ai-ecoverse/wasm-coreutils": "9.12.0-10",
|