@cloudhal/schedules

中文文档
0.6.5发布于 2026/11/09Apache-2.0TypeScriptES Module构建来源已验证近 30 天下载 4889

Cloudhal时间表(RFC-0008):时间模型,RRULE子集及其句子,发布(pin, close, rl1: 散列,作曲,冲突,状态机器),自动化和运行状态,纹饰和预算核算,调度器和runDue,以及SQLite/D1 st

中文使用文档
文档目录7 节
  1. 时间(第9节)
  2. 重复(第9.3、D3节)
  3. 释放(第6节)
  4. 标识符 (表)
  5. 自动化(第5.3和11节)
  6. 排程器(第8节)
  7. 内建自动化设备(第11.1节,推出步骤9)

@ cloudhal/ 时间表

Cloudhal网站的预定出版和自动化(RFC-0008 (英语), (中文(简体) ), ADR-0023 (英语):时间模型,RRULE子集,发布被固定到精确的节点版本,自动化和运行状态,花纹和预算核算,以及调度器的 runDue 与它的 D1/SQLite 商店.

这里的一切 工人安全: 任何条目均不只导入节点。 唯一的时间进入点是 temporal-polyfill/implementation (从未是本地或全球的) Temporal永远 Temporal.Now; Biome拒绝其他条目,并进行测试扫描存储器. now 总是注射.

条目什麽
@cloudhal/schedules时间模型 重现 发布模型 自动化/运行状态机器 纹身 预算, TickMeter,则 Scheduler 接口, runDue, (中文(简体) ), createScheduler。除此之外,没有存储依赖性 SqlDriver 类型.
@cloudhal/schedules/engine免费部分:发布模式,运行IDs,即时帮助者, TickMeter, (中文(简体) ), releaseFinishStatements,调度器的类型. @cloudhal/core-ts 通过它应用发布,所以网站Worker从不捆绑时区库.
@cloudhal/schedules/time仅是时间模型; @cloudhal/core-ts/time 重新出口(一项执行).
@cloudhal/schedules/recurrence仅RRULE子集(平面,验证,扩展,预设,句子).
@cloudhal/schedules/sqlSqlScheduleStore 结束 SqlDriver 用于移徙 0017_schedules。 。 。 .
@cloudhal/schedules/testingdescribeScheduleStoreConformance, (中文(简体) ), describeSchedulerConformance, (中文(简体) ), fakeReleaseExecutor, (中文(简体) ), countingDriver, (中文(简体) ), expectContract* (vitest) (英语).

时间(第9节)

  • resolveLocalTime("2026-11-02T09:00", "Europe/Istanbul") → { at: "2026-11-02T06:00:00.000Z", offset: "+03:00" }。在 DST 空隙内的时间移动到下一个有效时间(adjusted: "dst-gap"); 重复的时间决定了它的第一个瞬间(D2).
  • recomputeExecuteAt(when) ——永远不早:用今天的tzdata重新解决了所储存的一时钟时间,而只有瞬间才会在后期移动(sadjusted: "tzdata") (中文(简体) ).
  • isTimeZone, (中文(简体) ), toLocalDateTime, (中文(简体) ), zoneOffset, (中文(简体) ), latenessSeconds, (中文(简体) ), canonicalInstant (存储的形式是 Date#toISOString()) (中文(简体) ).

重复(第9.3、D3节)

parseRule, (中文(简体) ), formatRule, (中文(简体) ), validateRecurrence (最少1小时,最多24天), occurrences, (中文(简体) ), nextOccurrence, (中文(简体) ), occurrencesBetween, (中文(简体) ), presetRule编号 :presetOf, (中文(简体) ), presetMinuteOffset. 差距发生点向前移动,而不是被放弃(记录显示偏离RFC 5545§3.3.10);属性测试将扩展器与 rrule-temporal 排除了这种差别.

句子是数据 : describeRecurrence(rec) 返回时 { key, times, days?, weekdays?, monthDays?, n?, count?, until? }· ; renderRecurrence(sentence, "en" | "tr") 让它与 RECURRENCE_MESSAGES ("每月第二个星期二上午9:07" /"Her ayın ikinci salısı"09:07").

释放(第6节)

  • pinItems, (中文(简体) ), dependencyClosure (与 referencedNodeIds 作为默认提取器, composeRelease (第1节): nodes(S) = nodes(L) − ids + targets, (中文(简体) ), releaseConflicts 页:1, missingDependency, (中文(简体) ), planRelease。 。 。 .
  • RELEASE_TRANSITIONS, (中文(简体) ), HOLDING_STATES, (中文(简体) ), TERMINAL_RELEASE_STATES, (中文(简体) ), releaseWhen (领先时间,地平线), baseApprovalVerdict (D5、D9级), isPastLateLimit 财务报告和审定财务报表 nextRetryAt (一小时规则和退后), orderReleases 财务报告和审定财务报表 releaseOverlaps (D15) (英语).

标识符 (表)

rl1   = "rl1:" + hex(SHA-256(utf8(lines.join("\n"))))
lines = ["site <siteId>"] + per item, sorted by node id (code-unit order):
        "<set|remove> <nodeId> <nodeKind> <targetRev>:<targetHash>|- <baseRev>:<baseHash>|-"

runId = "run_" + Crockford-base32(first 100 bits of SHA-256(utf8(subjectId + "\n" + occurrenceAt.toISOString())))

时间还没到 rl1: (D4)批准请求 args_hash 覆盖 approvalArgs(releaseId, when). 释放和自动化标识是随机的(rel_编号 :aut_ + 20克罗克福德字符; 租赁符是任意的每个索赔.

自动化(第5.3和11节)

AUTOMATION_TRANSITIONS, (中文(简体) ), RUN_TRANSITIONS, (中文(简体) ), accountRunResult (三次失败暂停,一次违反预算暂停), dueOccurrences (只有最近丢失的事件运行), runWindow, (中文(简体) ), runEndsAt, (中文(简体) ), killSwitchPauses编号 :killSwitchResumes; 纹 (checkRunCall, (中文(简体) ), afterRunCall, (中文(简体) ), forbiddenUntrustedScopes, (中文(简体) ), untrustedEffectiveScopes)预算(checkRunBudget, (中文(简体) ), budgetLeft, (中文(简体) ), withinDailyWriteCap) (中文(简体) ).

排程器(第8节)

import { createScheduler, TICK_BUDGETS, TickMeter } from "@cloudhal/schedules";
import { SqlScheduleStore } from "@cloudhal/schedules/sql";

const scheduler = createScheduler({
  openStore: (meter) => new SqlScheduleStore(meter.wrap(d1Driver)),
  newMeter: (budget) => new TickMeter(budget),
  releases: releaseExecutor({ graph, schedules }), // `@cloudhal/core-ts/releases`
  builtins, systemJobs, checkApproval, wake: "minute",
});
await scheduler.runDue(new Date(controller.scheduledTime), TICK_BUDGETS.free, "cron");

在实践中,每打一个电话 runScheduledTick 从 @cloudhal/core-ts/releases,用于构建图表、此商店、执行器和系统工作 TickMeter。 。 。 . runClaimedRelease 跑步结束 一个呼叫者声称自己(一个人的"现在的波兰"), SqlScheduleStore.claimManualRun) (中文(简体) ).

runDue 声称每起事件都带有一个比较和擦拭和新的租赁标志,以后每写在那个标志上时都有警卫,所以同时出现的勾勾产生一种效果(S3)。 按时间顺序(D15),每个地点一次放出一次,最多迟到一个小时(S8),进行回放并收回租约. SqlScheduleStore.releaseFinishStatements(…, guard) 给 publishRelease 声明,结束发布 附加到自己的 守卫批量.

对于API和MCP(推出步骤7-8),商店也有 automationByKey, (中文(简体) ), openAgentRun, (中文(简体) ), readyAgentRun, (中文(简体) ), openManualWindow, (中文(简体) ), recordRunCall, (中文(简体) ), endAgentRunAs, (中文(简体) ), updateAutomation, (中文(简体) ), deleteAutomation, (中文(简体) ), retitleRelease 财务报告和审定财务报表 releaseLateness。调度器 checkApproval 实值 createReleaseApprovalCheck 从 @cloudhal/mcp-server/schedules (由 @cloudhal/api 与 releaseRights) (中文(简体) ).

内建自动化设备(第11.1节,推出步骤9)

createBuiltinRunner(sources) 这是 BuiltinRunner 从事五项工作; @cloudhal/core-ts/automations 执行 BuiltinSources 超过站点图表(graphBuiltinRunner),以及 runScheduledTick 默认使用。 每份工作都是按固定步骤进行的——最多每分一分 BUILTIN_STEP_COST[job] 声明——并保持其立场 automations.cursor,因此一个大站点跨出数个滴答,它们之间的相撞继续同样的跑道. 调查结果(运行时只有JSON,最多200;计数准确)带有稳定代码:

任务步骤查找代码计数
broken-links50页活页,条目,名词和菜单;后为周行404行(taints: broken_links(中文(简体) )broken-internal-link, (中文(简体) ), broken-media-reference, (中文(简体) ), broken-menu-target, (中文(简体) ), link-to-gated-content, (中文(简体) ), not-found-path (带有方向调整) proposal(中文(简体) )每个代码, broken-links, (中文(简体) ), nodes-scanned, (中文(简体) ), links-checked
stale-content200个条目的页面(仅程序字段)stale-entry (最古老的第一时间)stale-entries, (中文(简体) ), entries-scanned
feed-check/rss.xml,则 /sitemap.xml (图: feed_check(中文(简体) )feed-unreachable, (中文(简体) ), feed-invalid, (中文(简体) ), feed-item-incomplete, (中文(简体) ), feed-future-date, (中文(简体) ), feed-missing-entry, (中文(简体) ), feed-gated-node (大门自查), feed-asset-not-live每个代码, documents-checked, (中文(简体) ), feed-problems, (中文(简体) ), feed-errors
weekly-digest一个digest-published, (中文(简体) ), digest-scheduled, (中文(简体) ), digest-attention, (中文(简体) ), digest-open-findings (各节)published, (中文(简体) ), scheduled, (中文(简体) ), needs-attention, (中文(简体) ), open-findings
cleanup保留批次直至无保留, 然后提醒stale-draftruns-deleted, (中文(简体) ), releases-deleted, (中文(简体) ), findings-trimmed, (中文(简体) ), leases-cleared, (中文(简体) ), stale-runs-closed, (中文(简体) ), stale-drafts

每个内置运行也记录 counts.steps 财务报告和审定财务报表 counts.statements (预算使用情况). 读取访问者文本或获取的文档的一步返回 taint;运行运行立即被标记. RunDueDeps.notify (单位:千美元)ScheduleNotifier获得 automation-findings, (中文(简体) ), automation-digest, (中文(简体) ), automation-failed 财务报告和审定财务报表 automation-paused 运行结束后; Studio的通知来源于运行行 @cloudhal/api一个人的"现在跑"是 SqlScheduleStore.startBuiltinNow(单位:千美元) manual 运行此分钟, 接下来的勾选步骤, 之后自动化会返回到它的时间表 。 没有种子自动化:人们在 Studio(D7)中创造出种子.

每个路径的报表(按 TickMeter,工人自由预算40:

路径发言
闲置勾选1 (当心跳到期时,每5分钟)
已公布, 未执行第9条
发布, publishRelease 形状( 4 读取 + 8 个报表批次)第 18 条
出版发行 runScheduledTick 与真实 publishRelease (核心套房,没有资产blobs)页:1
未发行第7条
回收释放(租赁期满或瞬间出错)第13条
内建步骤(索赔,二项声明,完成)第8条
内置步骤来刺穿跑道( 还要做)10个
broken-links 勾选( core-ts 套接字: 活节点的一页)9-10岁
stale-content 勾选8-9 (中文(简体) )
feed-check 勾选第9条
weekly-digest 勾选第13条
cleanup 勾选(保留批次/提醒草案)17 第8条
代理任务发生记录6个
关闭代理任务窗口第8条
第一勾选注册系统任务3个
系统工作运行(加上工作本身)6个

版本与发布记录

@cloudhal/schedules 共发布 26 个版本,首次发布于 2026/10/20;过去 12 个月发布了 26 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.6.5latest2026/11/091 天前
0.6.42026/11/081 天前
0.6.32026/11/081 天前
0.6.22026/10/2614 天前
0.6.12026/10/2417 天前
0.6.02026/10/2317 天前

关于 @cloudhal/schedules 的常见问题

@cloudhal/schedules 是什么?

Cloudhal时间表(RFC-0008):时间模型,RRULE子集及其句子,发布(pin, close, rl1: 散列,作曲,冲突,状态机器),自动化和运行状态,纹饰和预算核算,调度器和runDue,以及SQLite/D1 st

如何安装 @cloudhal/schedules?

在项目目录运行 npm install @cloudhal/schedules,或使用 pnpm add / yarn add / bun add。

@cloudhal/schedules 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cloudhal/schedules 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cloudhal/schedules 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cloudhal/schedules 可以商用吗?

@cloudhal/schedules 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@cloudhal/schedules 的下载量有多少?

根据 npm 官方下载统计,@cloudhal/schedules 在 2026/10/10 – 2026/11/08 这 30 天内被下载 4,889 次,日均约 163 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cloudhal/schedules 还在维护吗?

最新版本 0.6.5 发布于 2026/11/09(1 天前);至今共发布 26 个版本,其中过去 12 个月发布了 26 个;首次发布于 2026/10/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。