skills-experimental/bootstrap-state/SKILL.md
# Bootstrap State Skill Bootstrap State - 全局状态单例 + 1758行 + DO NOT ADD MORE STATE原则 + createSignal信号 + Counter类型 + platform detection。 ## 功能概述 从Claude Code的bootstrap/state.ts提取的全局状态管理模式,用于OpenClaw的核心状态管理。 ## 核心机制 ### DO NOT ADD MORE STATE原则 ```typescript // DO NOT ADD MORE STATE HERE - BE JUDICIOUS WITH GLOBAL STATE // 1758 lines of state definitions // Strict discipline on additions // Global state is expensive ``` ### State Type Definition ```typescript type State = { originalCwd: str
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/bootstrap-stateInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Bootstrap State - 全局状态单例 + 1758行 + DO NOT ADD MORE STATE原则 + createSignal信号 + Counter类型 + platform detection。
从Claude Code的bootstrap/state.ts提取的全局状态管理模式,用于OpenClaw的核心状态管理。
// DO NOT ADD MORE STATE HERE - BE JUDICIOUS WITH GLOBAL STATE
// 1758 lines of state definitions
// Strict discipline on additions
// Global state is expensive
type State = {
originalCwd: string
projectRoot: string // Stable - set once at startup
totalCostUSD: number
totalAPIDuration: number
totalAPIDurationWithoutRetries: number
totalToolDuration: number
turnHookDurationMs: number
turnToolDurationMs: number
turnClassifierDurationMs: number
turnToolCount: number
turnHookCount: number
turnClassifierCount: number
startTime: number
lastInteractionTime: number
totalLinesAdded: number
totalLinesRemoved: number
hasUnknownModelCost: boolean
cwd: string
modelUsage: { [modelName: string]: ModelUsage }
mainLoopModelOverride: ModelSetting | undefined
initialMainLoopModel: ModelSetting
modelStrings: ModelStrings | null
isInteractive: boolean
kairosActive: boolean
strictToolResultPairing: boolean
sdkAgentProgressSummariesEnabled: boolean
userMsgOptIn: boolean
clientType: string
sessionSource: string | undefined
questionPreviewFormat: 'markdown' | 'html' | undefined
flagSettingsPath: string | undefined
flagSettingsInline: Record<string, unknown> | null
allowedSettingSources: SettingSource[]
sessionIngressToken: string | null | undefined
oauthTokenFromFd: string | null | undefined
apiKeyFromFd: string | null | undefined
// Telemetry state
meter: Meter | null
sessionCounter: AttributedCounter | null
locCounter: AttributedCounter | null
prCounter: AttributedCounter | null
commitCounter: AttributedCounter | null
costCounter: AttributedCounter | null
tokenCounter: AttributedCounter | null
codeEditToolDecisionCounter: AttributedCounter | null
activeTimeCounter: AttributedCounter | null
statsStore: { observe(name: string, value: number): void } | null
sessionId: SessionId
parentSessionId: SessionId | undefined
// Logger state
loggerProvider: LoggerProvider | null
eventLogger: ReturnType<typeof logs.getLogger> | null
// Meter provider state
meterProvider: MeterProvider | null
// Tracer provider state
tracerProvider: BasicTracerProvider | null
// Agent color state
agentColorMap: Map<string, AgentColorName>
agentColorIndex: number
// Last API request for bug reports
lastAPIRequest: Omit<BetaMessageStreamParams, 'messages'> | null
lastAPIRequestMessages: BetaMessageStreamParams['messages'] | null
lastClassifierRequests: unknown[] | null
// ... more fields
}
// 1758 lines defining comprehensive global state
export type AttributedCounter = {
add(value: number, additionalAttributes?: Attributes): void
}
// OpenTelemetry counter wrapper
// Attributes for dimensional metrics
// add() increments with optional attributes
export type ChannelEntry =
| { kind: 'plugin'; name: string; marketplace: string; dev?: boolean }
| { kind: 'server'; name: string; dev?: boolean }
// dev: true on entries from --dangerously-load-development-channels
// Allowlist gate checks per-entry
// Prevents allowlist-bypass leak
// Stable project root - set once at startup (including by --worktree flag)
// NEVER updated by mid-session EnterWorktreeTool.
// Use for project identity (history, skills, sessions) not file operations.
projectRoot: string // Stable, set once
cwd: string // Dynamic, updated by EnterWorktreeTool
// projectRoot: project identity
// cwd: current working directory (file operations)
import { createSignal } from 'src/utils/signal.js'
// Signal for event emission
// No stored state
// Subscribe/emit/clear pattern
import { resetSettingsCache } from 'src/utils/settings/settingsCache.js'
// Settings cache reset
// On state changes
// Prevent stale cache
{
"projectRoot": "/Users/mac/project",
"cwd": "/Users/mac/project/src",
"sessionId": "sess_xxx",
"totalCostUSD": 0.05,
"startTime": 1744400000
}
DO NOT ADD MORE STATE - 1758 lines → strict discipline
// 全局状态昂贵
// 严格纪律避免膨胀
projectRoot set once → EnterWorktreeTool updates cwd only
// projectRoot稳定(设置一次)
// cwd动态(EnterWorktreeTool更新)
{ add(value, attributes) } → OpenTelemetry dimensional metrics
// Attributes维度指标
// add()带可选attributes
dev: true → allowlist gate checks per-entry → prevents bypass leak
// dev flag标记开发channel
// 每entry独立检查
bootstrap/state.ts (1758 lines)business
IAA 日报飞书输出能力。 支持把固定 CSV 模板一键转换成: - 中文运营结论 - 飞书卡片 JSON - 飞书发送载荷 Use when: - 需要把 IAA 日报直接发到飞书 - 需要从 CSV 一键生成运营日报
data-ai
IAA日报分析模型 功能: - 渠道日报自动分析 - 小时级+日级ROI联动判断 - 按地区输出加量/降量/停投建议 - 按产品类型输出阈值 - 自动识别利润区/观察区/止损区 Use when: - 分析每天投放数据 - 生成运营日报结论 - 判断是否加量/降量/停投 - 对比美加澳/日韩表现 Keywords: - 日报模型, 投放日报, 加量, 降量, 停投, ROI日报, 分地区分析
data-ai
IAA固定日报分析模板 功能: - 固定字段模板(可直接贴每天数据) - 自动输出总盘结论 - 自动输出美加澳/日韩结论 - 自动给出加量/降量/停投建议 - 适配文件修复/清理两类产品 Use when: - 需要固定日报格式 - 每天复盘渠道表现 - 给运营团队出统一结论 Keywords: - 固定模板, 日报模板, ROI模板, IAA日报, 运营模板
development
# HyperlinkPool Pattern Skill HyperlinkPool Pattern - HyperlinkPool class + strings array + stringMap + Index 0 no hyperlink + intern(hyperlink) + get(id) + undefined handling + 5-minute reset + OSC8 hyperlink interning。 ## 功能概述 从Claude Code的ink/screen.ts提取的HyperlinkPool模式,用于OpenClaw的OSC8超链接池管理。 ## 核心机制 ### HyperlinkPool Class ```typescript export class HyperlinkPool { private strings: string[] = [''] // Index 0 = no hyperlink private stringMap = new Map<string, number>() // strings