chore(deno): migrate toolchain from Node 24 + pnpm to Deno 2.9.7 + TypeScript 7.0.2 (W1.5)

- root deno.json workspace (nodeModulesDir auto), npm versions registered once in imports, deno.lock;
  remove pnpm-lock/pnpm-workspace/root package.json; members keep minimal package.json (name/type/exports)
- tasks: dev, typecheck (tsc 7.0.2 per member + deno check), lint/fmt (biome, useImportExtensions),
  test (vitest via deno), check:tokens, build (web + deno compile), ci, db:migrate/reset, gen:types
- tsconfig base moved to config/ (no root tsconfig.json); deno types -> types/deno.d.ts; web drops baseUrl
- server: Deno.serve entry with graceful shutdown, --role migrate|preflight|probe, WEB_ROOT static SPA hosting;
  drop @hono/node-server, tsx, esbuild build.mjs
- logger: redact child() bindings and serialize err by message/stack; sync stdout destination; tests
- relative imports get explicit extensions (sites/mp-sync paths left for follow-up)
- crash-recovery tests spawn `deno run -A`; tasks tests use unique per-file schemas
- single-container Dockerfile + entrypoint (migrate -> preflight -> api+worker watchdog), docker-compose.yml
- docs: README, runbook, ADR-001 superseded, plan §1 validation row

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
rootandClaude Fable 5.1 committed 2026-09-27 18:53:06 +08:00
1 parent d9f2af2f3c
commit 304feea141
226 files changed
+6601 -8620

No files matched your search

+4 -4
View File
@@ -1,8 +1,8 @@
import { createHash } from "node:crypto";
import { z } from "zod";
import { summarizeForLog } from "../redact";
import { CapabilityError, isCapabilityError } from "./errors";
import { capabilityIdToToolName, isCapabilityId } from "./tool-name";
import { summarizeForLog } from "../redact.ts";
import { CapabilityError, isCapabilityError } from "./errors.ts";
import { capabilityIdToToolName, isCapabilityId } from "./tool-name.ts";
import {
type AuditSink,
type AuthorizationChecker,
@@ -15,7 +15,7 @@ import {
type HandlerContext,
type IdempotencyKeyGenerator,
type InvokeContext,
} from "./types";
} from "./types.ts";
export interface RegisteredCapability {
descriptor: CapabilityDescriptor;
+11 -11
View File
@@ -1,16 +1,16 @@
// @umt/agent 公开入口。Pi SDK 类型只出现在 src/pi/*,这里只导出本包自有接口。
export const PACKAGE_NAME = "@umt/agent";
export { CapabilityError, type CapabilityErrorCode, isCapabilityError } from "./capability/errors";
export { CapabilityError, type CapabilityErrorCode, isCapabilityError } from "./capability/errors.ts";
export {
CapabilityRegistry,
type CapabilityRegistryOptions,
defaultIdempotencyKey,
type RegisteredCapability,
stableStringify,
} from "./capability/registry";
export { capabilityIdToToolName, isCapabilityId, toolNameToCapabilityId } from "./capability/tool-name";
export * from "./capability/types";
} from "./capability/registry.ts";
export { capabilityIdToToolName, isCapabilityId, toolNameToCapabilityId } from "./capability/tool-name.ts";
export * from "./capability/types.ts";
export {
type CreateFakeRuntimeOptions,
createFakeRuntime,
@@ -21,16 +21,16 @@ export {
type FakeStep,
type FakeToolCall,
type FakeToolResult,
} from "./pi/fake";
} from "./pi/fake.ts";
export {
checkToolCall,
DEFAULT_COMPACTION_INSTRUCTIONS,
PiAgentRuntime,
type PiAgentRuntimeOptions,
} from "./pi/runtime";
export { sessionPathFor } from "./pi/session";
export { isSensitiveKey, REDACTED, redactForModel, redactString, summarizeForLog } from "./redact";
export * from "./runtime/port";
} from "./pi/runtime.ts";
export { sessionPathFor } from "./pi/session.ts";
export { isSensitiveKey, REDACTED, redactForModel, redactString, summarizeForLog } from "./redact.ts";
export * from "./runtime/port.ts";
export {
type AgentSettings,
AgentSettingsSchema,
@@ -39,5 +39,5 @@ export {
type ResolvedAgentSettings,
resolveAgentSettings,
THINKING_LEVELS,
} from "./settings";
export { buildSystemPrompt, type SystemPromptInput } from "./system-prompt";
} from "./settings.ts";
export { buildSystemPrompt, type SystemPromptInput } from "./system-prompt.ts";
+4 -4
View File
@@ -12,10 +12,10 @@ import {
type Message,
type TranscriptContext,
} from "@earendil-works/pi-ai";
import type { CapabilityRegistry } from "../capability/registry";
import { capabilityIdToToolName, toolNameToCapabilityId } from "../capability/tool-name";
import type { ResolvedPiModel } from "./model";
import { PiAgentRuntime, type PiAgentRuntimeOptions } from "./runtime";
import type { CapabilityRegistry } from "../capability/registry.ts";
import { capabilityIdToToolName, toolNameToCapabilityId } from "../capability/tool-name.ts";
import type { ResolvedPiModel } from "./model.ts";
import { PiAgentRuntime, type PiAgentRuntimeOptions } from "./runtime.ts";
/** 前面各步工具调用的结果(按发生顺序),供脚本根据结果决定下一步 */
export interface FakeToolResult {
+1 -1
View File
@@ -2,7 +2,7 @@ import type { CompactionSettings } from "@earendil-works/pi-agent-core";
import { type Api, createModels, createProvider, type Model, type MutableModels } from "@earendil-works/pi-ai";
import { anthropicMessagesApi } from "@earendil-works/pi-ai/api/anthropic-messages.lazy";
import { openAICompletionsApi } from "@earendil-works/pi-ai/api/openai-completions.lazy";
import type { ResolvedAgentSettings } from "../settings";
import type { ResolvedAgentSettings } from "../settings.ts";
/** Pi 侧需要的模型装配结果(仅在 src/pi/* 内部流转) */
export interface ResolvedPiModel {
+9 -9
View File
@@ -11,11 +11,11 @@ import {
} from "@earendil-works/pi-agent-core";
import type { Usage } from "@earendil-works/pi-ai";
import type { TSchema } from "typebox";
import { isCapabilityError } from "../capability/errors";
import type { CapabilityRegistry, RegisteredCapability } from "../capability/registry";
import { toolNameToCapabilityId } from "../capability/tool-name";
import { redactForModel, redactString, summarizeForLog } from "../redact";
import { EventChannel } from "../runtime/event-channel";
import { isCapabilityError } from "../capability/errors.ts";
import type { CapabilityRegistry, RegisteredCapability } from "../capability/registry.ts";
import { toolNameToCapabilityId } from "../capability/tool-name.ts";
import { redactForModel, redactString, summarizeForLog } from "../redact.ts";
import { EventChannel } from "../runtime/event-channel.ts";
import {
type AgentEvent,
type AgentEventBody,
@@ -26,10 +26,10 @@ import {
type CreateRunSpec,
emptyUsage,
type RunOutcome,
} from "../runtime/port";
import { type ResolvedAgentSettings, resolveAgentSettings } from "../settings";
import { compactionFromSettings, type PiModelResolver, resolveModelFromSettings } from "./model";
import { openRunSession } from "./session";
} from "../runtime/port.ts";
import { type ResolvedAgentSettings, resolveAgentSettings } from "../settings.ts";
import { compactionFromSettings, type PiModelResolver, resolveModelFromSettings } from "./model.ts";
import { openRunSession } from "./session.ts";
export interface PiAgentRuntimeOptions {
registry: CapabilityRegistry;
+2 -2
View File
@@ -1,5 +1,5 @@
import type { CapabilityScope } from "../capability/types";
import type { AgentSettings } from "../settings";
import type { CapabilityScope } from "../capability/types.ts";
import type { AgentSettings } from "../settings.ts";
/** 本包对外的用量统计(与 SDK 类型解耦) */
export interface AgentUsage {