Commit Graph

644 Commits

Author SHA1 Message Date
Mario Zechner 8a0903ebf2 feat(ai): compat entrypoint, core-only root barrel (phase 5)
The root barrel is now core-only and side-effect free: types,
createModels/createProvider, auth substrate, lazyStream/lazyApi, faux,
utils. Generated catalogs, api-registry, env-api-keys, images, global
stream functions, and per-API lazy wrappers leave the root.

New @earendil-works/pi-ai/compat preserves the old surface verbatim as
a strict superset of the root: api-dispatch stream/complete with env
key injection, the builtin registration side effect (skip-if-present so
it cannot clobber earlier overrides), deprecated getModel/getModels/
getProviders aliases of the new getBuiltin* reads in providers/all,
lazy api wrappers + setBedrockProviderModule, and image generation.
Compat dies with the coding-agent ModelManager migration.

Packaging: exports map gains ./compat, ./providers/*, ./api/*;
sideEffects array lists only the effectful modules.

Old-global imports across agent/coding-agent/examples and pi-ai tests
switch to /compat (path-only; compat is a superset). The coding-agent
extension loader resolves the pi-ai ROOT specifier to compat, so
existing user extensions using the old global API keep working at
runtime until compat is removed. vitest configs alias /compat to src;
browser smoke imports old globals from /compat.
2026-06-10 21:17:12 +02:00
Mario Zechner 4d5c015820 feat(ai): adapt OAuth flows to OAuthAuth (phase 4)
anthropic, openai-codex, and github-copilot flow modules gain OAuthAuth
exports (login/refresh/toAuth) wired to the prompt()/notify() login
callbacks, making the lazyOAuth attachments on the provider factories
functional. Copilot's modifyModels baseUrl rewriting becomes toAuth()
returning ModelAuth.baseUrl derived from the token proxy endpoint.

Callback-server flows race a manual_code prompt and abort it through
AuthPrompt.signal once the flow settles; OAuthAuth has no
usesCallbackServer flag. The old OAuthProviderInterface exports stay
unchanged until the coding-agent migration.
2026-06-10 20:41:29 +02:00
Mario Zechner fec0c3d12f feat(ai): provider factories, per-provider catalogs, createProvider (phase 3)
Auth helpers in src/auth/helpers.ts: envApiKeyAuth() (stored key wins,
then env vars in order, with secret-prompt login) and lazyOAuth()
(flow loads on first use through bundler-opaque dynamic imports in
utils/oauth/load.ts; the OAuthAuth flow exports land in phase 4).
There is no OAuth factory toggle: providers that support OAuth always
attach it, advertising costs nothing until login/refresh runs.

createProvider() in models.ts builds providers from parts: single API
implementation or a map dispatched on model.api (mixed-API providers
like opencode and github-copilot); unknown api yields a stream error.

generate-models.ts now emits one providers/<id>.models.ts catalog per
provider (35 files, biome-excluded like models.generated.ts) and
models.generated.ts becomes a generated aggregator, so importing one
provider factory pulls one catalog. Typed getModel globals unchanged.

One factory per built-in provider under src/providers/: envApiKeyAuth
for standard providers, OAuth for anthropic/openai-codex/github-copilot,
ambient ApiKeyAuth for amazon-bedrock (AWS env/profile/IAM) and
google-vertex (explicit key or ADC+project+location).

providers/all.ts: builtinProviders(), builtinModels(), getBuiltin*
re-exports. fauxProvider() factory returns a real Provider for tests;
legacy registerFauxProvider() unchanged.
2026-06-10 20:33:20 +02:00
Mario Zechner ba93da9a93 feat(ai): move API implementations to src/api with lazy wrappers (phase 2)
Stream implementations move from src/providers/ to src/api/, renamed by
API id (anthropic.ts -> anthropic-messages.ts, google.ts ->
google-generative-ai.ts, mistral.ts -> mistral-conversations.ts,
amazon-bedrock.ts -> bedrock-converse-stream.ts). Every module now
exports exactly stream/streamSimple; shared helpers move alongside.

New ProviderStreams dispatch contract in types.ts, lazyApi() wrapper in
api/lazy.ts, and one .lazy.ts wrapper per API. Bedrock's wrapper keeps
the node-only variable-specifier import and setBedrockProviderModule()
(now taking ProviderStreams).

providers/register-builtins.ts deleted; interim until the compat
entrypoint lands, builtin api-registry registration lives in stream.ts
and lazy wrappers are exported from the root barrel. Old per-API lazy
exports (streamAnthropic, ...) are gone; package.json subpaths retarget
to dist/api/.
2026-06-10 20:08:59 +02:00
Mario Zechner ee276e4db5 Merge remote-tracking branch 'origin/main' into model-registry 2026-06-10 18:49:18 +02:00
Mario Zechner f63095cfff feat(ai): add Models runtime with provider-owned auth (phase 1)
New Models/MutableModels/createModels collection: provider map, async
model listing (best-effort aggregation), getAuth decision tree with
double-checked locked OAuth refresh, stream/complete with per-field
auth merge over lazyStream.

Auth substrate: ProviderAuth { apiKey?, oauth? }, one type-tagged
credential per provider, CredentialStore (read/modify/delete; modify
is the only write path, serialized RMW), OAuthAuth login/refresh/toAuth
split, prompt()/notify() login callbacks, browser-safe default
AuthContext.

types.ts: Provider alias renamed to ProviderId; ApiOptionsMap and
ApiStreamOptions<TApi> for typed per-API stream options; hasApi()
runtime narrowing guard.
2026-06-10 18:49:10 +02:00
Mario Zechner 9f9705173a docs(agent): consolidate models architecture design
Unified auth methods (api-key/oauth discriminated union), single
createProvider() helper, src/api layout, compat entrypoint design,
fixed auth resolution policy, prompt/notify login callbacks, and
checkbox implementation TODOs.
2026-06-10 01:39:11 +02:00
Armin Ronacher 82f2b1e908 Add [Unreleased] section for next cycle 2026-06-09 23:14:55 +02:00
Armin Ronacher 28df940f0d Release v0.79.1 2026-06-09 23:14:52 +02:00
Armin Ronacher 2edd6b432a Add [Unreleased] section for next cycle 2026-06-08 17:15:54 +02:00
Armin Ronacher c10fb95fd9 Release v0.79.0 2026-06-08 17:15:51 +02:00
Mario Zechner 216ba41fc3 docs(agent): add models architecture design 2026-06-08 17:04:57 +02:00
Mario Zechner 8c6c8a4ef3 fix(agent): neutralize compaction summarization prompt
closes #5401
2026-06-07 11:19:10 +02:00
Mario Zechner ca66adfe60 Add [Unreleased] section for next cycle 2026-06-04 18:31:35 +02:00
Mario Zechner 592c34c056 Release v0.78.1 2026-06-04 18:31:33 +02:00
Mario Zechner dbb9911a54 Add [Unreleased] section for next cycle 2026-05-30 01:47:40 +02:00
Mario Zechner 0897f175e4 Release v0.78.0 2026-05-30 01:47:37 +02:00
Armin Ronacher 93600d8980 fix(release): align package repository metadata 2026-05-29 00:44:58 +02:00
Armin Ronacher abf07d0c4d Add [Unreleased] section for next cycle 2026-05-29 00:19:23 +02:00
Armin Ronacher 8322745e28 Release v0.77.0 2026-05-29 00:19:06 +02:00
Mario Zechner f29472c387 Audit unreleased changelog entries 2026-05-29 00:06:06 +02:00
Mario Zechner b63d26332f Finish harness tool registry semantics 2026-05-28 12:34:02 +02:00
Armin Ronacher 39a26c84f8 Add [Unreleased] section for next cycle 2026-05-27 22:04:01 +02:00
Armin Ronacher 706f8720f8 Release v0.76.0 2026-05-27 22:03:21 +02:00
Armin Ronacher 16dc525e7b fix(build): resolve internal packages from workspace dist 2026-05-27 21:56:55 +02:00
Mario Zechner 96f0edd02b Count user image tokens in context estimates
closes #4983
2026-05-26 18:46:54 +02:00
Mario Zechner 30f48feae7 Add [Unreleased] section for next cycle 2026-05-23 12:08:14 +02:00
Mario Zechner ea2b70ddd9 Release v0.75.5 2026-05-23 11:58:31 +02:00
Mario Zechner b8326ca935 Add [Unreleased] section for next cycle 2026-05-20 16:26:05 +02:00
Mario Zechner 3533843dd7 Release v0.75.4 2026-05-20 16:11:46 +02:00
Mario Zechner 2e02c74dcb chore: pin dependencies and use native TypeScript 2026-05-20 12:46:17 +02:00
Mario Zechner b141e1fa24 chore: remove web-ui workspace 2026-05-20 02:26:09 +02:00
Armin Ronacher ae9450dc51 chore(ts): use source import extensions 2026-05-20 00:04:03 +02:00
Mario Zechner 06c6c324d7 chore: enforce erasable TypeScript syntax 2026-05-19 23:15:39 +02:00
Mario Zechner b944827623 fix(agent): stop tool preflight after extension abort
closes #4276
2026-05-19 13:10:03 +02:00
Mario Zechner 725e2b7b2a docs(agent): clarify harness stream settlement 2026-05-19 10:43:06 +02:00
Armin Ronacher 29b3417a7a fix(windows): hide bash helper consoles
closes #4699
2026-05-18 23:21:22 +02:00
Mario Zechner b1893b3d77 fix(agent): preserve oversized tail output with trailing newline
closes #4715
2026-05-18 23:05:34 +02:00
Mario Zechner 4943c1d62c Add [Unreleased] section for next cycle 2026-05-18 11:59:24 +02:00
Mario Zechner a7d8dd3d5d Release v0.75.3 2026-05-18 11:58:34 +02:00
Mario Zechner 0c4d704a7b Add [Unreleased] section for next cycle 2026-05-18 11:47:16 +02:00
Mario Zechner ea713ba174 Release v0.75.2 2026-05-18 11:46:23 +02:00
Mario Zechner 93b2e7fae7 Add [Unreleased] section for next cycle 2026-05-18 02:01:57 +02:00
Mario Zechner 73a61654af Release v0.75.1 2026-05-18 02:01:03 +02:00
Mario Zechner 7f3c340dc6 Add [Unreleased] section for next cycle 2026-05-17 21:03:41 +02:00
Mario Zechner 12f5c00cc1 Release v0.75.0 2026-05-17 21:02:49 +02:00
Mario Zechner c9e7049212 fix(coding-agent): remove global fetch override closes #4619 2026-05-17 20:52:06 +02:00
Mario Zechner 2c708492e3 Release v0.74.1 2026-05-17 01:35:45 +02:00
Mario Zechner f8d2c8aa6e docs(agent): organize harness design todos 2026-05-16 22:07:20 +02:00
Mario Zechner b4ee3aaeea docs(agent): document harness hook design 2026-05-16 01:06:27 +02:00