Files
openclaw-openclaw/tsconfig.json
Peter Steinberger 062f88e3e3 refactor: extract reusable AI runtime package (#99059)
* refactor: extract reusable AI runtime package

* refactor: complete AI provider relocation

* refactor: keep llm core internal

* refactor(ai): make @openclaw/ai self-contained with host policy ports

Move pure transport helpers (tool projections, strict-schema normalization,
prompt-cache boundary, stream guards, anthropic/openai compat, request
activity) from src into packages/ai; move utf16-slice into
normalization-core. Inject host policy (guarded fetch, redaction,
strict-tool defaults, diagnostics logging) through AiTransportHost with
inert library defaults installed by src/llm/stream.ts. Narrow the public
barrel to instance-scoped createApiRegistry/createLlmRuntime; the
process-default runtime moves behind internal/ and
registerBuiltInApiProviders takes an explicit registry. Delete the
src/llm/api-registry re-export facade.

* fix(ai): teach node, jiti, and vite resolvers the @openclaw/ai and utf16-slice subpaths

The workspace alias tables in root-alias.cjs, plugin-sdk-native-resolver,
sdk-alias, the shared vitest config, and the Control UI vite config only
knew @openclaw/llm-core; Node-side plugin loading resolved @openclaw/ai
through the pnpm symlink to the unbuilt dist (checks-node-compact CI
failures), and the Control UI build broke on the new
normalization-core/utf16-slice subpath.

* chore(ui): drop leftover service-worker debug logging

* build(release): ship @openclaw/ai with its own shrinkwrap and honest dependency set

packages/ai declares only its six real runtime deps (kysely, chalk, json5,
tslog, zod, fs-safe, and proxyline were never imported); orphaned root deps
removed. generate-npm-shrinkwrap now treats publishable packages/* like
publishable plugins so the AI tarball pins its transitive tree even though
workspace deps are omitted from the root shrinkwrap. knip learns the
package entry points; the tsdown dts neverBundle option moves to its
documented deps.dts home; the README documents the no-semver internal/*
contract and host ports.

* docs(ai): add minimal external-consumer example app

examples/ai-chat consumes only the public @openclaw/ai surface (built dist
via the workspace link): isolated runtime, built-in provider registration,
one streamed completion. Supports Anthropic/OpenAI via env keys and a
keyless local Ollama target; live-verified against Ollama.

* docs(ai): document the @openclaw/ai package and workspace shrinkwrap boundary

* chore(check): include examples/ in duplicate-scan targets

* fix: emit normalization package subpaths

* fix: complete AI package boundary artifacts

* fix: align AI package boundary contracts

* fix(ci): stabilize package release contracts

* test: align documentation contract checks

* test: keep cron docs guard aligned

* test: align restored docs contract guards

* test: follow upstream docs contracts

* docs: drop superseded talk wording
2026-07-05 01:56:40 -04:00

246 lines
13 KiB
JSON

{
"compilerOptions": {
"allowImportingTsExtensions": true,
"allowSyntheticDefaultImports": true,
"declaration": true,
"esModuleInterop": true,
"experimentalDecorators": true,
"forceConsistentCasingInFileNames": true,
"isolatedModules": true,
"lib": ["DOM", "DOM.Iterable", "ES2023", "ScriptHost"],
"module": "NodeNext",
"moduleResolution": "NodeNext",
"noImplicitOverride": true,
"noImplicitReturns": true,
"noEmit": true,
"noEmitOnError": true,
"noUncheckedSideEffectImports": true,
"outDir": "dist",
"resolveJsonModule": true,
"skipLibCheck": true,
"strict": true,
"target": "es2023",
"types": ["node"],
"useDefineForClassFields": false,
"verbatimModuleSyntax": true,
"paths": {
"openclaw/extension-api": ["./src/extensionAPI.ts"],
"openclaw/plugin-sdk": ["./src/plugin-sdk/index.ts"],
"openclaw/plugin-sdk/*": ["./src/plugin-sdk/*.ts"],
"@openclaw/ai": ["./packages/ai/src/index.ts"],
"@openclaw/ai/diagnostics": ["./packages/ai/src/utils/diagnostics.ts"],
"@openclaw/ai/event-stream": ["./packages/ai/src/utils/event-stream.ts"],
"@openclaw/ai/providers": ["./packages/ai/src/providers.ts"],
"@openclaw/ai/types": ["./packages/ai/src/types.ts"],
"@openclaw/ai/validation": ["./packages/ai/src/validation.ts"],
"@openclaw/ai/internal/*": ["./packages/ai/src/internal/*.ts"],
"@openclaw/agent-core": ["./packages/agent-core/src/index.ts"],
"@openclaw/agent-core/*": ["./packages/agent-core/src/*"],
"@openclaw/llm-core": ["./packages/llm-core/src/index.ts"],
"@openclaw/llm-core/diagnostics": ["./packages/llm-core/src/utils/diagnostics.ts"],
"@openclaw/llm-core/event-stream": ["./packages/llm-core/src/utils/event-stream.ts"],
"@openclaw/llm-core/validation": ["./packages/llm-core/src/validation.ts"],
"@openclaw/llm-core/*": ["./packages/llm-core/src/*"],
"@openclaw/model-catalog-core": ["./packages/model-catalog-core/src/index.ts"],
"@openclaw/model-catalog-core/configured-model-refs": [
"./packages/model-catalog-core/src/configured-model-refs.ts"
],
"@openclaw/model-catalog-core/model-catalog-normalize": [
"./packages/model-catalog-core/src/model-catalog-normalize.ts"
],
"@openclaw/model-catalog-core/model-catalog-refs": [
"./packages/model-catalog-core/src/model-catalog-refs.ts"
],
"@openclaw/model-catalog-core/model-catalog-types": [
"./packages/model-catalog-core/src/model-catalog-types.ts"
],
"@openclaw/model-catalog-core/provider-id": [
"./packages/model-catalog-core/src/provider-id.ts"
],
"@openclaw/model-catalog-core/provider-model-id-normalization": [
"./packages/model-catalog-core/src/provider-model-id-normalization.ts"
],
"@openclaw/model-catalog-core/provider-model-id-normalize": [
"./packages/model-catalog-core/src/provider-model-id-normalize.ts"
],
"@openclaw/model-catalog-core/*": ["./packages/model-catalog-core/src/*"],
"@openclaw/gateway-client": ["./packages/gateway-client/src/index.ts"],
"@openclaw/gateway-client/*": ["./packages/gateway-client/src/*"],
"@openclaw/gateway-protocol": ["./packages/gateway-protocol/src/index.ts"],
"@openclaw/gateway-protocol/client-info": [
"./packages/gateway-protocol/src/client-info.ts"
],
"@openclaw/gateway-protocol/connect-error-details": [
"./packages/gateway-protocol/src/connect-error-details.ts"
],
"@openclaw/gateway-protocol/schema": ["./packages/gateway-protocol/src/schema.ts"],
"@openclaw/gateway-protocol/startup-unavailable": [
"./packages/gateway-protocol/src/startup-unavailable.ts"
],
"@openclaw/gateway-protocol/version": ["./packages/gateway-protocol/src/version.ts"],
"@openclaw/gateway-protocol/*": ["./packages/gateway-protocol/src/*"],
"@openclaw/media-generation-core": ["./packages/media-generation-core/src/index.ts"],
"@openclaw/media-generation-core/capability-model-ref": [
"./packages/media-generation-core/src/capability-model-ref.ts"
],
"@openclaw/media-generation-core/catalog": [
"./packages/media-generation-core/src/catalog.ts"
],
"@openclaw/media-generation-core/model-ref": [
"./packages/media-generation-core/src/model-ref.ts"
],
"@openclaw/media-generation-core/normalization": [
"./packages/media-generation-core/src/normalization.ts"
],
"@openclaw/media-generation-core/*": ["./packages/media-generation-core/src/*"],
"@openclaw/media-core": ["./packages/media-core/src/index.ts"],
"@openclaw/media-core/base64": ["./packages/media-core/src/base64.ts"],
"@openclaw/media-core/constants": ["./packages/media-core/src/constants.ts"],
"@openclaw/media-core/content-length": ["./packages/media-core/src/content-length.ts"],
"@openclaw/media-core/file-name": ["./packages/media-core/src/file-name.ts"],
"@openclaw/media-core/inbound-path-policy": [
"./packages/media-core/src/inbound-path-policy.ts"
],
"@openclaw/media-core/inline-image-data-url": [
"./packages/media-core/src/inline-image-data-url.ts"
],
"@openclaw/media-core/media-source-url": [
"./packages/media-core/src/media-source-url.ts"
],
"@openclaw/media-core/mime": ["./packages/media-core/src/mime.ts"],
"@openclaw/media-core/read-byte-stream-with-limit": [
"./packages/media-core/src/read-byte-stream-with-limit.ts"
],
"@openclaw/media-core/*": ["./packages/media-core/src/*"],
"@openclaw/media-understanding-common": [
"./packages/media-understanding-common/src/index.ts"
],
"@openclaw/media-understanding-common/*": [
"./packages/media-understanding-common/src/*"
],
"@openclaw/markdown-core": ["./packages/markdown-core/src/index.ts"],
"@openclaw/markdown-core/code-spans": ["./packages/markdown-core/src/code-spans.ts"],
"@openclaw/markdown-core/fences": ["./packages/markdown-core/src/fences.ts"],
"@openclaw/markdown-core/frontmatter": ["./packages/markdown-core/src/frontmatter.ts"],
"@openclaw/markdown-core/ir": ["./packages/markdown-core/src/ir.ts"],
"@openclaw/markdown-core/render": ["./packages/markdown-core/src/render.ts"],
"@openclaw/markdown-core/render-aware-chunking": [
"./packages/markdown-core/src/render-aware-chunking.ts"
],
"@openclaw/markdown-core/tables": ["./packages/markdown-core/src/tables.ts"],
"@openclaw/markdown-core/types": ["./packages/markdown-core/src/types.ts"],
"@openclaw/markdown-core/*": ["./packages/markdown-core/src/*"],
"@openclaw/normalization-core": ["./packages/normalization-core/src/index.ts"],
"@openclaw/normalization-core/boolean-coercion": [
"./packages/normalization-core/src/boolean-coercion.ts"
],
"@openclaw/normalization-core/error-coercion": [
"./packages/normalization-core/src/error-coercion.ts"
],
"@openclaw/normalization-core/number-coercion": [
"./packages/normalization-core/src/number-coercion.ts"
],
"@openclaw/normalization-core/record-coerce": [
"./packages/normalization-core/src/record-coerce.ts"
],
"@openclaw/normalization-core/string-coerce": [
"./packages/normalization-core/src/string-coerce.ts"
],
"@openclaw/normalization-core/string-normalization": [
"./packages/normalization-core/src/string-normalization.ts"
],
"@openclaw/normalization-core/utf16-slice": [
"./packages/normalization-core/src/utf16-slice.ts"
],
"@openclaw/normalization-core/*": ["./packages/normalization-core/src/*"],
"@openclaw/acp-core": ["./packages/acp-core/src/index.ts"],
"@openclaw/acp-core/meta": ["./packages/acp-core/src/meta.ts"],
"@openclaw/acp-core/numeric-options": ["./packages/acp-core/src/numeric-options.ts"],
"@openclaw/acp-core/normalize-text": ["./packages/acp-core/src/normalize-text.ts"],
"@openclaw/acp-core/record-shared": ["./packages/acp-core/src/record-shared.ts"],
"@openclaw/acp-core/session": ["./packages/acp-core/src/session.ts"],
"@openclaw/acp-core/session-interaction-mode": [
"./packages/acp-core/src/session-interaction-mode.ts"
],
"@openclaw/acp-core/session-lineage-meta": [
"./packages/acp-core/src/session-lineage-meta.ts"
],
"@openclaw/acp-core/types": ["./packages/acp-core/src/types.ts"],
"@openclaw/acp-core/runtime/error-text": [
"./packages/acp-core/src/runtime/error-text.ts"
],
"@openclaw/acp-core/runtime/errors": ["./packages/acp-core/src/runtime/errors.ts"],
"@openclaw/acp-core/runtime/session-identifiers": [
"./packages/acp-core/src/runtime/session-identifiers.ts"
],
"@openclaw/acp-core/runtime/session-identity": [
"./packages/acp-core/src/runtime/session-identity.ts"
],
"@openclaw/acp-core/runtime/types": ["./packages/acp-core/src/runtime/types.ts"],
"@openclaw/acp-core/*": ["./packages/acp-core/src/*"],
"@openclaw/terminal-core": ["./packages/terminal-core/src/index.ts"],
"@openclaw/terminal-core/ansi": ["./packages/terminal-core/src/ansi.ts"],
"@openclaw/terminal-core/decorative-emoji": [
"./packages/terminal-core/src/decorative-emoji.ts"
],
"@openclaw/terminal-core/health-style": [
"./packages/terminal-core/src/health-style.ts"
],
"@openclaw/terminal-core/links": ["./packages/terminal-core/src/links.ts"],
"@openclaw/terminal-core/note": ["./packages/terminal-core/src/note.ts"],
"@openclaw/terminal-core/osc-progress": ["./packages/terminal-core/src/osc-progress.ts"],
"@openclaw/terminal-core/palette": ["./packages/terminal-core/src/palette.ts"],
"@openclaw/terminal-core/progress-line": [
"./packages/terminal-core/src/progress-line.ts"
],
"@openclaw/terminal-core/prompt-select-styled": [
"./packages/terminal-core/src/prompt-select-styled.ts"
],
"@openclaw/terminal-core/prompt-select-styled-params": [
"./packages/terminal-core/src/prompt-select-styled-params.ts"
],
"@openclaw/terminal-core/prompt-style": [
"./packages/terminal-core/src/prompt-style.ts"
],
"@openclaw/terminal-core/restore": ["./packages/terminal-core/src/restore.ts"],
"@openclaw/terminal-core/safe-text": ["./packages/terminal-core/src/safe-text.ts"],
"@openclaw/terminal-core/stream-writer": [
"./packages/terminal-core/src/stream-writer.ts"
],
"@openclaw/terminal-core/table": ["./packages/terminal-core/src/table.ts"],
"@openclaw/terminal-core/terminal-link": [
"./packages/terminal-core/src/terminal-link.ts"
],
"@openclaw/terminal-core/theme": ["./packages/terminal-core/src/theme.ts"],
"@openclaw/terminal-core/*": ["./packages/terminal-core/src/*"],
"@openclaw/net-policy": ["./packages/net-policy/src/index.ts"],
"@openclaw/net-policy/ip": ["./packages/net-policy/src/ip.ts"],
"@openclaw/net-policy/ipv4": ["./packages/net-policy/src/ipv4.ts"],
"@openclaw/net-policy/redact-sensitive-url": [
"./packages/net-policy/src/redact-sensitive-url.ts"
],
"@openclaw/net-policy/url-protocol": ["./packages/net-policy/src/url-protocol.ts"],
"@openclaw/net-policy/url-userinfo": ["./packages/net-policy/src/url-userinfo.ts"],
"@openclaw/net-policy/*": ["./packages/net-policy/src/*"],
"@openclaw/web-content-core": ["./packages/web-content-core/src/index.ts"],
"@openclaw/web-content-core/provider-runtime-shared": [
"./packages/web-content-core/src/provider-runtime-shared.ts"
],
"@openclaw/web-content-core/*": ["./packages/web-content-core/src/*"],
"@openclaw/speech-core": ["./packages/speech-core/runtime-api.ts"],
"@openclaw/speech-core/api": ["./packages/speech-core/api.ts"],
"@openclaw/speech-core/runtime-api": ["./packages/speech-core/runtime-api.ts"],
"@openclaw/speech-core/speaker": ["./packages/speech-core/speaker.ts"],
"@openclaw/speech-core/voice-models": ["./packages/speech-core/voice-models.ts"],
"@openclaw/speech-core/*": ["./packages/speech-core/*"],
"@openclaw/sdk": ["./packages/sdk/src/index.ts"],
"@openclaw/plugin-sdk": ["./src/plugin-sdk/index.ts"],
"@openclaw/plugin-sdk/*": ["./src/plugin-sdk/*.ts"],
"openclaw/plugin-sdk/account-id": ["./src/plugin-sdk/account-id.ts"],
"@openclaw/*": ["./extensions/*"]
}
},
"include": ["src/**/*", "ui/**/*", "extensions/**/*", "packages/**/*"],
"exclude": ["node_modules", "dist", "**/dist/**"]
}