Route routine core, engine, and dashboard diagnostics through debug-gated shared loggers. - Demote steady-state diagnostic sites while preserving warnings and errors for actionable failures. - Add cross-package severity contracts and manifest coverage for demoted log sites. - Document logging severity guidance and add a patch changeset. Files changed: .changeset/fn-8603-log-severity.md | 7 ++ docs/diagnostics.md | 20 ++++-- .../__tests__/log-severity-spam-contract.test.ts | 71 ++++++++++++++++++ packages/core/src/activity-analytics.ts | 5 +- packages/core/src/ai-summarize.ts | 61 +++++++--------- packages/core/src/async-mission-store.ts | 5 +- packages/core/src/async-secrets-store.ts | 7 +- packages/core/src/central-core.ts | 17 ++--- packages/core/src/docker-provisioning.ts | 13 ++-- packages/core/src/index.ts | 1 + packages/core/src/master-key.ts | 9 ++- packages/core/src/memory-compaction.ts | 29 ++++---- packages/core/src/memory-insights.ts | 7 +- packages/core/src/migration-orchestrator.ts | 7 +- packages/core/src/mission-store.ts | 5 +- packages/core/src/node-discovery.ts | 7 +- packages/core/src/notification/dispatcher.ts | 9 ++- .../core/src/plugins/bundled-plugin-install.ts | 11 +-- packages/core/src/reflection-store.ts | 5 +- packages/core/src/secrets-store.ts | 7 +- packages/core/src/task-store/agent-logs.ts | 21 +++--- packages/core/src/task-store/async-events.ts | 5 +- packages/core/src/task-store/async-maintenance.ts | 7 +- packages/core/src/task-store/comments-ops.ts | 7 +- packages/core/src/task-store/task-mutation-ops.ts | 11 +-- packages/core/src/task-store/workflow-integrity.ts | 9 ++- packages/core/src/types/merge-policy.ts | 5 +- packages/core/src/usage-events.ts | 5 +- .../__tests__/log-severity-spam-contract.test.ts | 48 +++++++++++++ packages/dashboard/src/ai-refine.ts | 5 +- packages/dashboard/src/ai-session-diagnostics.ts | 10 +-- packages/dashboard/src/chat.ts | 8 ++- packages/dashboard/src/devserver-manager.ts | 9 ++- packages/dashboard/src/file-service.ts | 5 +- packages/dashboard/src/github-tracking-comments.ts | 7 +- .../dashboard/src/github-tracking-reconciler.ts | 5 +- packages/dashboard/src/github-tracking-state.ts | 5 +- packages/dashboard/src/gitlab-lifecycle.ts | 5 +- packages/dashboard/src/insights-routes.ts | 9 ++- packages/dashboard/src/issue-image-attachments.ts | 5 +- packages/dashboard/src/knowledge-index.ts | 5 +- packages/dashboard/src/plugin-routes.ts | 7 +- packages/dashboard/src/routes/board-workflows.ts | 5 +- packages/dashboard/src/routes/context.ts | 5 +- .../dashboard/src/routes/register-auth-routes.ts | 13 ++-- .../routes/register-docker-provisioning-routes.ts | 7 +- .../dashboard/src/routes/register-git-github.ts | 21 +++--- packages/dashboard/src/routes/register-gitlab.ts | 7 +- .../src/routes/register-session-diff-routes.ts | 9 ++- .../src/routes/register-settings-memory-routes.ts | 7 +- .../src/routes/register-setup-activity-routes.ts | 7 +- .../dashboard/src/routes/register-signal-routes.ts | 5 +- .../src/routes/register-task-workflow-routes.ts | 11 +-- packages/dashboard/src/runtime-logger.ts | 11 +-- packages/dashboard/src/server.ts | 7 +- packages/dashboard/src/sse.ts | 8 ++- packages/dashboard/src/terminal-service.ts | 34 ++++----- packages/dashboard/src/view-chunk-manifest.ts | 5 +- .../engine/src/__tests__/log-severity-manifest.ts | 83 ++++++++++++++++++++++ .../__tests__/log-severity-spam-contract.test.ts | 40 ++++++++++- .../src/__tests__/logger-debug-gating.test.ts | 7 +- packages/engine/src/goal-anchoring-audit.ts | 5 +- packages/engine/src/plugin-runner.ts | 44 ++++++------ packages/engine/src/pty-native.ts | 9 ++- .../engine/src/runtimes/child-process-worker.ts | 4 +- packages/engine/src/self-healing.ts | 12 ++-- packages/engine/src/worktree-hooks.ts | 10 ++- 67 files changed, 632 insertions(+), 250 deletions(-) Fusion-Task-Id: FN-8603 Fusion-Task-Lineage: 53901db6-1af2-4bd7-b5ea-49507e048ef2 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
84 lines
2.0 KiB
TypeScript
84 lines
2.0 KiB
TypeScript
import { createLogger } from "@fusion/core";
|
|
|
|
export type RuntimeLogLevel = "info" | "warn" | "error";
|
|
|
|
export interface RuntimeLogContext {
|
|
[key: string]: unknown;
|
|
}
|
|
|
|
export interface RuntimeLogSink {
|
|
(level: RuntimeLogLevel, scope: string, message: string, context?: RuntimeLogContext): void;
|
|
}
|
|
|
|
export interface RuntimeLogger {
|
|
readonly scope: string;
|
|
info(message: string, context?: RuntimeLogContext): void;
|
|
warn(message: string, context?: RuntimeLogContext): void;
|
|
error(message: string, context?: RuntimeLogContext): void;
|
|
child(scope: string): RuntimeLogger;
|
|
}
|
|
|
|
let sink: RuntimeLogSink = defaultRuntimeLogSink;
|
|
|
|
function defaultRuntimeLogSink(
|
|
level: RuntimeLogLevel,
|
|
scope: string,
|
|
message: string,
|
|
context?: RuntimeLogContext,
|
|
): void {
|
|
const log = createLogger(scope);
|
|
try {
|
|
switch (level) {
|
|
case "info":
|
|
log.log(message, context);
|
|
break;
|
|
case "warn":
|
|
log.warn(message, context);
|
|
break;
|
|
case "error":
|
|
log.error(message, context);
|
|
break;
|
|
}
|
|
} catch {
|
|
// Logging must never throw into runtime flows.
|
|
}
|
|
}
|
|
|
|
function emit(level: RuntimeLogLevel, scope: string, message: string, context?: RuntimeLogContext): void {
|
|
try {
|
|
sink(level, scope, message, context);
|
|
} catch {
|
|
// Logging must never throw into runtime flows.
|
|
}
|
|
}
|
|
|
|
export function createRuntimeLogger(scope: string): RuntimeLogger {
|
|
return {
|
|
scope,
|
|
info(message, context) {
|
|
emit("info", scope, message, context);
|
|
},
|
|
warn(message, context) {
|
|
emit("warn", scope, message, context);
|
|
},
|
|
error(message, context) {
|
|
emit("error", scope, message, context);
|
|
},
|
|
child(childScope) {
|
|
return createRuntimeLogger(`${scope}:${childScope}`);
|
|
},
|
|
};
|
|
}
|
|
|
|
export function setRuntimeLogSink(nextSink: RuntimeLogSink | null | undefined): void {
|
|
sink = nextSink ?? defaultRuntimeLogSink;
|
|
}
|
|
|
|
export function getRuntimeLogSink(): RuntimeLogSink {
|
|
return sink;
|
|
}
|
|
|
|
export function resetRuntimeLogSink(): void {
|
|
sink = defaultRuntimeLogSink;
|
|
}
|