host

package
v0.6.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 2, 2026 License: Apache-2.0 Imports: 34 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CoCreateProgressThinking = "thinking"
	CoCreateProgressReply    = "reply"
)

CoCreateProgressKind 标识流式回调的内容类型。

View Source
const StreamClearSentinel = "\x00\x00CLEAR\x00\x00"

StreamClearSentinel 通过 streamCh 单条发送以示意"清空当前流式 round"。 不再用独立 clearCh —— 双通道无序导致 ✻ header 时常落到上一个 round 末尾。

Variables

This section is empty.

Functions

func BuildStartPrompt

func BuildStartPrompt(prompt string) string

BuildStartPrompt 将用户需求包装为 Coordinator 的启动 prompt。

func ReplayDeltaText

func ReplayDeltaText(item domain.RuntimeQueueItem) string

ReplayDeltaText 从运行时队列项中提取可回放的流式文本。

Types

type AgentCacheStat added in v0.3.1

type AgentCacheStat struct {
	Role            string
	Model           string
	Input           int
	Output          int
	CacheRead       int
	CacheWrite      int
	Cost            float64
	Saved           float64
	CacheCapable    bool
	RecentCacheRead int
	RecentInput     int
	RecentSamples   int
}

AgentCacheStat 是单个 agent 的缓存命中累计(投影到左栏)。 HitRate = CacheRead / Input;Input 在 litellm 层已统一为"含 CacheRead"语义。

CacheCapable 用来区分两种 0% 命中:

  • true → 模型支持 prompt cache,0% 是 prompt 设计差或前缀不稳定,需要优化
  • false → 模型/provider 不支持 prompt cache,0% 是预期,不必排查

Recent* 是滑动窗(最近 N 次调用)的命中数据,对比累计可识别"前期拖累"vs"稳态低命中"。

type AgentContextSnapshot

type AgentContextSnapshot struct {
	Tokens          int
	ContextWindow   int
	Percent         float64
	Scope           string
	Strategy        string
	ActiveMessages  int
	SummaryMessages int
	CompactedCount  int
	KeptCount       int
}

AgentContextSnapshot 是 Agent 上下文使用情况。

type AgentSnapshot

type AgentSnapshot struct {
	Name      string
	State     string
	TaskID    string
	TaskKind  string
	Summary   string
	Tool      string
	Turn      int
	Context   AgentContextSnapshot
	UpdatedAt time.Time
}

AgentSnapshot 是 Agent 状态的展示投影。

type AgentUsage added in v0.3.1

type AgentUsage struct {
	Role            string
	Model           string
	Input           int
	Output          int
	CacheRead       int
	CacheWrite      int
	Cost            float64
	Saved           float64
	CacheCapable    bool
	RecentCacheRead int
	RecentInput     int
	RecentSamples   int
}

AgentUsage 是一个 agent 的累计用量快照(向 UI 暴露)。

type BudgetSentinel added in v0.5.0

type BudgetSentinel struct {
	// contains filtered or unexported fields
}

BudgetSentinel 监视累计成本,执行用户的预算政策(config budget 块)。

合宪定位(architecture.md §8.3/§10):不评估模型行为——越线停机等同于用户在 那一刻手动 Abort,Host 只是代为执行一条预先签署的指令。它影响控制流,因此 不是观察者,定位为与 flow.Dispatcher 平级的 Host 政策组件;Route/工具层不感知。

停机时机:默认在子代理边界(Host 同步调用 HandleBoundary),不浪费 in-flight 章节; hardStop=true 时越线立即停。边界处理先于 flow.Dispatcher 派发下一步,Route/工具层不感知预算。

func NewBudgetSentinel added in v0.5.0

func NewBudgetSentinel(cfg bootstrap.BudgetConfig, costNow func() float64, abort func(reason string), report func(level, summary string)) *BudgetSentinel

NewBudgetSentinel 创建预算哨兵;政策未启用时返回 nil(所有方法 nil 安全)。

func (*BudgetSentinel) HandleBoundary added in v0.5.5

func (s *BudgetSentinel) HandleBoundary() bool

func (*BudgetSentinel) HandleEvent added in v0.5.0

func (s *BudgetSentinel) HandleEvent(ev agentcore.Event)

HandleEvent 在子代理边界执行待定的停机。订阅必须先于 Dispatcher。 不跳过 IsError——出错返回同样是边界,停机不应因子代理失败而推迟。

func (*BudgetSentinel) Limit added in v0.5.0

func (s *BudgetSentinel) Limit() float64

Limit 返回预算上限(UI 展示用);未启用返回 0。

func (*BudgetSentinel) OnCost added in v0.5.0

func (s *BudgetSentinel) OnCost(total float64)

OnCost 由 UsageTracker 每次记账后携带最新累计成本调用(锁外)。 一次回调可能连跨两级(normal→warned→stopPending),两次副作用各触发一次。

func (*BudgetSentinel) Refuse added in v0.5.0

func (s *BudgetSentinel) Refuse() error

Refuse 启动前置检查:预算已超返回拒绝错误(Start/Resume/Continue 恢复路径调用)。 用户上调预算 = 重新授权,新配置下 Refuse 自然放行。

type CoCreateMessage

type CoCreateMessage struct {
	Role    string `json:"role"`
	Content string `json:"content"`
}

CoCreateMessage 是共创对话的消息。

type CoCreateReply

type CoCreateReply struct {
	Message     string
	Prompt      string
	Ready       bool
	Suggestions []string
	Raw         string
}

CoCreateReply 是共创对话的 LLM 回复。Raw 保留模型完整四段原文, 用于写回 history 让下一轮模型看到自己上一轮的 [DRAFT],从而真正在 已有草稿上累积更新(仅 Message 不含 [DRAFT],会导致模型每轮凭对话重新归纳)。 Suggestions 是 AI 主动给的"接下来你可能想说",用户卡壳时按数字键一键填入输入框。

type Event

type Event struct {
	ID         string    // 同一次调用的开始/结束共用;非调用事件为空
	Time       time.Time // 首次发出时间(开始时刻)
	FinishedAt time.Time // 零值 = 进行中;非零 = 已完成
	Failed     bool      // 已完成但失败(仅完成态有意义)
	Category   string    // DISPATCH / TOOL / SYSTEM / REVIEW / CHECK / ERROR / CONTEXT
	Agent      string    // 产生事件的 agent
	Summary    string
	Detail     string        // 完整文案,写入日志不截断供排查;为空回退 Summary。UI 只读 Summary
	Kind       string        // 错误分类(如 stream_idle),随日志输出供过滤/告警;为空不输出
	Level      string        // info / warn / error / success
	Depth      int           // 0 = coordinator 层, 1 = sub-agent 层
	Duration   time.Duration // 完成时的执行耗时
}

Event 是 TUI 消费的结构化事件。

对于 TOOL / DISPATCH 两类调用事件,同一次调用的开始与结束共用一个 ID: 开始时先发 FinishedAt 为零值的事件(TUI 渲染为"进行中"样式); 结束时再发一条同 ID 的事件,填入 FinishedAt + Duration(+ Failed), TUI 按 ID 定位原行原地更新,避免"开始一行、完成又一行"的冗余。

SYSTEM / ERROR / CONTEXT 等非调用类事件 ID 为空,每条独立追加。

func (Event) Running added in v0.1.2

func (e Event) Running() bool

Running 返回事件是否处于进行中。 仅调用类事件(有 ID 的 TOOL / DISPATCH)可能进行中;其它类型总是返回 false。

type Host

type Host struct {
	// contains filtered or unexported fields
}

Host 是运行时薄外壳。 职责:启动/恢复/干预注入/事件投影/模型管理。 不做任何调度决策,不做空闲续跑。

func New

func New(cfg bootstrap.Config, bundle assets.Bundle) (*Host, error)

New 创建 Host。

func (*Host) Abort

func (h *Host) Abort() bool

Abort 暂停当前 coordinator。

func (*Host) AskUser

func (h *Host) AskUser() *tools.AskUserTool

func (*Host) AvailableThinking added in v0.5.3

func (h *Host) AvailableThinking(role string) []agentcore.ThinkingLevel

func (*Host) CancelCoCreate added in v0.5.1

func (h *Host) CancelCoCreate()

CancelCoCreate 放弃阶段共创:清占用标记,保持暂停态(用户可在输入框继续或重启 Resume)。

func (*Host) Close

func (h *Host) Close()

Close 终止 coordinator 并关闭事件通道。

Usage 持久化语义:先取消 autoSaveLoop(它自行 flush 最后一次 dirty 状态), 再补一次同步 SaveNow 收尾。已知缺口:AbortSilent 之后若仍有 in-flight LLM 调用回来,触发的 OnMessage → Record 会更新内存但**不会被持久化**。这部分 "最末几百 token" 的丢失在下次启动时会由 session jsonl replay 自动补回。

func (*Host) CoCreateStream

func (h *Host) CoCreateStream(ctx context.Context, history []CoCreateMessage, onProgress func(kind, text string)) (CoCreateReply, error)

CoCreateStream 冷启动共创:从零澄清需求,产出整本书的创作指令。

func (*Host) ConfiguredModels

func (h *Host) ConfiguredModels(provider string) []string

func (*Host) ConfiguredProviders

func (h *Host) ConfiguredProviders() []string

func (*Host) Continue

func (h *Host) Continue(text string) error

Continue 用指定 prompt 继续。停机后用户在输入框输入时调用。

func (*Host) CurrentModelSelection

func (h *Host) CurrentModelSelection(role string) (string, string, bool)

func (*Host) CurrentThinking added in v0.5.2

func (h *Host) CurrentThinking(role string) string

CurrentThinking 返回某角色当前生效的推理强度原始串(供 /model 面板同步当前值)。

func (*Host) Dir

func (h *Host) Dir() string

func (*Host) Done

func (h *Host) Done() <-chan struct{}

func (*Host) Events

func (h *Host) Events() <-chan Event

func (*Host) Export added in v0.4.0

func (h *Host) Export(ctx context.Context, opts exp.Options) (*exp.Result, error)

Export 导出已完成章节为外部文件(当前仅支持 TXT)。

与 ImportFrom 不同:导出是只读操作(不动 Progress / Checkpoint), 因此**不要求 Coordinator 空闲**——写作中途也可以随时导出"现阶段成品"。 只读到 Progress.CompletedChapters + 章节终稿 + 大纲 + premise 的一致快照。

func (*Host) ImportFrom added in v0.3.0

func (h *Host) ImportFrom(ctx context.Context, opts imp.Options) (<-chan imp.Event, error)

ImportFrom 启动一次外部小说反推导入:切分 → 反推 foundation → 逐章分析落盘。 与 Coordinator 互斥;导入完成后调用方可立即 Resume() 续写。 返回的事件通道由 imp.Run 关闭,调用方负责消费(满则丢弃以防阻塞分析协程)。

func (*Host) ImportSimulationProfile added in v0.4.2

func (h *Host) ImportSimulationProfile(ctx context.Context, path string) (<-chan sim.Event, error)

ImportSimulationProfile 导入此前生成的仿写画像。

func (*Host) PauseForCoCreate added in v0.5.1

func (h *Host) PauseForCoCreate() bool

PauseForCoCreate 进入阶段共创:置共创占用标记,运行中则一并暂停 coordinator。 返回 false 表示无法进入(全书已完成或已在共创中),调用方忽略即可。 占用标记在共创窗口内堵住 import/simulate/start/resume/continue 的并发介入—— 运行中暂停后 lifecycle=paused,现有 ==running 互斥失效,靠该标记补缺; 已停止(idle/paused)也允许进入,规划完经 Continue 续跑。

func (*Host) PrepareUserRules added in v0.6.0

func (h *Host) PrepareUserRules(rawPrompt string) error

PrepareUserRules 在新建模式下生成本书用户规则快照(启动侧确定性,不经 Coordinator、不进主创作 Run)。

入参是用户的**原始**创作要求(未经 BuildStartPrompt 包装)——归一化要的是用户规则本身, 不是启动脚手架。入口须在 StartPrepared 之前调用一次(quick/cocreate 两条新建路径都走这里)。

归一化失败只降级不报错(增强路径);只有快照无法落盘才返回 error 中止开书—— 后续运行将没有稳定事实源(见设计 §失败与降级)。

func (*Host) ReplayQueue

func (h *Host) ReplayQueue(afterSeq int64) ([]domain.RuntimeQueueItem, error)

func (*Host) Resume

func (h *Host) Resume() (string, error)

Resume 恢复模式:从 checkpoint + progress 生成 resume prompt 并启动。

func (*Host) ResumeFromCoCreate added in v0.5.1

func (h *Host) ResumeFromCoCreate(draft string) error

ResumeFromCoCreate 结束阶段共创:把共创产出的后续方向作为干预注入并恢复创作。 清占用标记后复用 Continue 的停机注入路径(受预算前置约束)。 注:draft 为空时提前返回、不清标记是有意的(共创尚未结束);TUI 侧 canStart() 守卫 与此处用同一"非空"判据,保证该路径不可达,cocreating 不会因此泄漏。

func (*Host) SetRoleThinking added in v0.5.2

func (h *Host) SetRoleThinking(role, level string) error

SetRoleThinking 设置某角色(或 default)的推理强度:校验→持久化→联动 live agent→事件。 镜像 SwitchModel 的结构;与模型选择正交,可单独调整。level 为空 = 不覆盖(继承)。

func (*Host) Simulate added in v0.4.2

func (h *Host) Simulate(ctx context.Context) (<-chan sim.Event, error)

Simulate 读取 simulate 目录并生成或增量更新仿写画像。

func (*Host) Snapshot

func (h *Host) Snapshot() UISnapshot

func (*Host) StageCoCreateStream added in v0.5.1

func (h *Host) StageCoCreateStream(ctx context.Context, history []CoCreateMessage, onProgress func(kind, text string)) (CoCreateReply, error)

StageCoCreateStream 阶段共创:在已写内容的基础上规划后续方向。 系统提示 = 阶段 prompt + 当前故事状态摘要,让助手知道"已经写了什么"。

func (*Host) StartPrepared

func (h *Host) StartPrepared(promptText string) error

StartPrepared 使用已编排完成的启动 prompt 开始创作。

func (*Host) Steer

func (h *Host) Steer(text string)

Steer 提交用户干预。

func (*Host) Stream

func (h *Host) Stream() <-chan string

func (*Host) SwitchModel

func (h *Host) SwitchModel(role, provider, model string) error

type OutlineSnapshot

type OutlineSnapshot struct {
	Chapter   int
	Title     string
	CoreEvent string
}

OutlineSnapshot 是大纲条目的展示摘要。

type PausePointSentinel added in v0.6.1

type PausePointSentinel struct {
	// contains filtered or unexported fields
}

PausePointSentinel 在流程边界执行用户预约的停靠点(RunMeta.PausePoint)。

合宪定位与 BudgetSentinel 相同(architecture.md §8.4/§10.15):不评估模型行为—— 停靠点是 Coordinator 依据用户干预意图预先签署的暂停指令,Host 只在条件满足的 边界代为执行。它影响控制流,因此是与 flow.Dispatcher 平级的 Host 政策组件; Route/工具层不感知。停靠点一次性:命中即消费,Continue 恢复后不再触发。

func NewPausePointSentinel added in v0.6.1

func NewPausePointSentinel(s *store.Store, abort func(reason string), report func(level, summary string)) *PausePointSentinel

NewPausePointSentinel 创建停靠点哨兵;所有方法 nil 安全。

func (*PausePointSentinel) HandleBoundary added in v0.6.1

func (s *PausePointSentinel) HandleBoundary() bool

HandleBoundary 在子代理边界裁定停靠点,命中则消费并停机,返回是否已停机 (true 表示调用方应短路本轮派发)。先清后停:清除失败只告警仍继续停机, 安全侧最坏情况是恢复后同一停靠点再暂停一次,绝不会该停不停。

func (*PausePointSentinel) ReconcileOnResume added in v0.6.1

func (s *PausePointSentinel) ReconcileOnResume()

ReconcileOnResume 恢复路径对账:停机窗口里停靠点条件已满足但未及消费时 (崩溃恰在排空后、或预算/Esc 停机抢在边界消费前),用户显式恢复即视为放行—— 只消费并报告(事件+通知成对),不再补一次暂停。 已知窗口:设点后 editor 未及入队即停机,磁盘状态与"真排空"无法区分,对账会 连同解除;报告带诉求摘要,用户据此重新下达即可,不为极端窗口引入跨层状态。

type UISnapshot

type UISnapshot struct {
	Provider           string
	NovelName          string
	ModelName          string
	ModelContextWindow int // 当前默认模型的上下文窗口(随 /model 切换实时解析)
	ThinkingLevel      string
	Style              string
	RuntimeState       string // idle / running / pausing / paused / completed
	StatusLabel        string
	Phase              string
	Flow               string
	CurrentChapter     int
	TotalChapters      int
	CompletedCount     int
	TotalWordCount     int
	InProgressChapter  int
	PendingRewrites    []int
	RewriteReason      string
	PendingSteer       string
	RecoveryLabel      string
	IsRunning          bool
	Agents             []AgentSnapshot

	// 上下文
	ContextTokens         int
	ContextWindow         int
	ContextPercent        float64
	ContextScope          string
	ContextStrategy       string
	ContextActiveMessages int
	ContextSummaryCount   int
	ContextCompactedCount int
	ContextKeptCount      int

	// 累计用量(整个会话,跨所有 agent 与模型切换)
	TotalInputTokens      int
	TotalOutputTokens     int
	TotalCacheReadTokens  int
	TotalCacheWriteTokens int
	TotalCostUSD          float64
	TotalSavedUSD         float64 // 因 CacheRead 命中省下的美元(相对全按非缓存输入价计费)
	BudgetLimitUSD        float64 // 预算上限(config budget.book_usd);0 = 未启用

	// 缓存诊断
	OverallCacheCapable    bool // 至少一个 role 跑过支持 prompt cache 的模型(区分"未启用"和"0% 命中")
	OverallRecentCacheRead int  // 滑动窗最近 N 次的 cacheRead 总和
	OverallRecentInput     int  // 滑动窗最近 N 次的 input 总和
	OverallRecentSamples   int  // 滑动窗内的样本数(≤ recentSampleCap)

	// MissingAssistantUsage > 0 通常意味着上游 streaming 没按 OpenAI
	// stream_options.include_usage 协议发 final usage chunk(自建 proxy 常见),
	// 导致 UsageTracker 收不到任何累计数据。UI 据此明示用户排查 backend,
	// 不要让用户误以为是缓存模块本身坏了。
	MissingAssistantUsage int

	// 缓存 per-role 维度,按 CacheRead 降序,已过滤未消费 token 的 role
	CachePerAgent []AgentCacheStat
	CachePerModel []AgentCacheStat

	// 基础设定
	Premise          string
	Outline          []OutlineSnapshot
	Characters       []string
	SupportingCount  int      // 配角名册中的次要角色总数
	RecentSupporting []string // 最近活跃的次要角色(最多 5 个,按 LastSeenChapter 倒序)
	Layered          bool
	CurrentVolumeArc string
	NextVolumeTitle  string
	CompassDirection string
	CompassScale     string

	// 详情
	LastCommitSummary  string
	LastReviewSummary  string
	LastCheckpointName string
	RecentSummaries    []string
}

UISnapshot 是 TUI 渲染所需的聚合状态快照。

type UsageTracker added in v0.1.2

type UsageTracker struct {
	// contains filtered or unexported fields
}

UsageTracker 累计整个会话所有 agent 的 LLM 输入/输出 token 与美元成本。

工作机制:

  • 每次 agent 的 OnMessage 回调触发时调用 Record(agentName, msg)
  • agentName 映射到 role(architect_* 归一为 architect),查 ModelSet 当前该 role 绑定的模型
  • 用 models.DefaultRegistry 查模型价格,按非缓存输入/输出/缓存读/缓存写四项累乘
  • 注册表无此模型时,退回 msg.Usage.Cost.Total(provider 自带,可能为 0)
  • 模型热切换(/model)后续消息自动按新模型算价,旧消息保留旧成本

同时维护 per-role 维度(writer/editor/architect/coordinator):

  • 累计命中数据 → 整体优化效果
  • 滑动窗最近 N 次 → 区分前期拖累 vs 稳态低命中
  • CacheCapable 标记 → 区分"未启用"和"真的 0% 命中"

线程安全。

func NewUsageTracker added in v0.1.2

func NewUsageTracker(set *bootstrap.ModelSet, store *storepkg.Store) *UsageTracker

func (*UsageTracker) LoadFromStore added in v0.4.0

func (t *UsageTracker) LoadFromStore() (bool, error)

LoadFromStore 从 store.Usage 读取持久化的快照并回填到内存。返回 true 表示 成功加载到了一份非空(schema 匹配)的状态;false 表示无文件或不可用,调用方 应继续走 session replay 一次性回填。

func (*UsageTracker) MissingAssistantUsage added in v0.3.1

func (t *UsageTracker) MissingAssistantUsage() int

MissingAssistantUsage 返回累计"收到 assistant 消息但 Usage 为 nil"的次数。 大于 0 通常意味着上游 streaming 没发 OpenAI 的 final usage chunk, UI 据此显示提示而非误以为缓存模块本身坏了。

func (*UsageTracker) OverallCacheCapable added in v0.3.1

func (t *UsageTracker) OverallCacheCapable() bool

OverallCacheCapable 整体是否至少经过一次已知支持 cache 的模型。

func (*UsageTracker) OverallRecent added in v0.3.1

func (t *UsageTracker) OverallRecent() (cacheRead, input, samples int)

OverallRecent 返回滑动窗内(≤ recentSampleCap 次)的 cacheRead 总和、input 总和、样本数。

func (*UsageTracker) PerAgent added in v0.3.1

func (t *UsageTracker) PerAgent() []AgentUsage

PerAgent 返回各 role 累计用量。结果按 CacheRead 数量降序,未消费过 token 的 role 跳过。

func (*UsageTracker) PerModel added in v0.4.1

func (t *UsageTracker) PerModel() []AgentUsage

PerModel 返回各模型累计用量。结果按成本降序,其次按输入量降序。

func (*UsageTracker) Record added in v0.1.2

func (t *UsageTracker) Record(agentName string, msg agentcore.AgentMessage)

Record 把一条 agent 消息分发到累加 / 诊断两条路径。

累加只看 Usage 是否存在——"哪条消息带 Usage" 是 agentcore/litellm adapter 装配细节(上游协议把 usage 放在响应顶层),未来装配规则变了也不用动这里。 诊断要求 Role=Assistant 且 Content 非空,避免 AbortMsg / 异常恢复 / tool / user 消息污染 missingAssistantUsage 计数。

func (*UsageTracker) ReplaySessions added in v0.4.0

func (t *UsageTracker) ReplaySessions(rootDir string) (int, error)

ReplaySessions 扫 meta/sessions/coordinator.jsonl 与 meta/sessions/agents/*.jsonl, 把每条 assistant 消息的 usage 重新累加到 tracker。返回回填条数。

调用约束:仅在 meta/usage.json 缺失(首次升级或 schema 变更)时调用一次,做 历史数据回填。日常持久化走 SaveNow / autoSaveLoop。

精度依赖见 sessionRecord 注释的三级降级——第 3 级(Usage 和 _meta 都缺) 在更老日志或上游异常时才会触发。

func (*UsageTracker) SaveNow added in v0.4.0

func (t *UsageTracker) SaveNow() error

SaveNow 立刻把当前 snapshot 落盘。autoSaveLoop / Close 路径都通过它写。

func (*UsageTracker) SavedUSD added in v0.3.1

func (t *UsageTracker) SavedUSD() float64

SavedUSD 返回因缓存命中节省的累计美元数。

func (*UsageTracker) SetOnCost added in v0.5.0

func (t *UsageTracker) SetOnCost(cb func(total float64))

SetOnCost 注册记账回调(携带最新累计成本,锁外调用)。 必须在 Host 构造期、并发 Record 开始前调用一次。

func (*UsageTracker) SetOnMissingUsage added in v0.5.0

func (t *UsageTracker) SetOnMissingUsage(cb func())

SetOnMissingUsage 注册"首次发现 usage 缺失"的一次性回调。 必须在 Host 构造期、并发 Record 开始前调用一次。

func (*UsageTracker) Snapshot added in v0.4.0

func (t *UsageTracker) Snapshot() domain.UsageState

Snapshot 拷贝当前累计状态为可序列化的 domain.UsageState。 滑动窗 samples 不进 snapshot——它是短期诊断窗口,跨进程意义不大。

func (*UsageTracker) StartAutoSave added in v0.4.0

func (t *UsageTracker) StartAutoSave(ctx context.Context)

StartAutoSave 起一个 goroutine,监听 saveCh + debounce 落盘。ctx done 前会 把最后一次未保存的状态 flush 出去。Close 通过 cancel ctx 触发 flush + 退出。

func (*UsageTracker) Totals added in v0.1.2

func (t *UsageTracker) Totals() (cost float64, input, output, cacheRead, cacheWrite int)

Totals 返回累计总量的快照。

Directories

Path Synopsis
Package exp 实现已完成章节的导出能力。
Package exp 实现已完成章节的导出能力。
Package flow 实现垂类路由:Host 根据事实决定下一个调哪个子代理做什么。
Package flow 实现垂类路由:Host 根据事实决定下一个调哪个子代理做什么。
Package imp 实现外部小说章节的导入与反推。
Package imp 实现外部小说章节的导入与反推。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL