{"_id":"@buckeyestudio/toh-agent-spine-demo","name":"@buckeyestudio/toh-agent-spine-demo","dist-tags":{"next":"0.1.1-rc.2","latest":"0.1.1-rc.2"},"versions":{"0.1.1-rc.2":{"name":"@buckeyestudio/toh-agent-spine-demo","description":"The default executor-less/UI-less agent spine with fallback session titles, provider-routed retry, and optional persisted goals","version":"0.1.1-rc.2","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/dustinwloring1988/theopen-harness.git","directory":"packages/examples/agent-spine-demo"},"type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./src/*":"./src/*","./package.json":"./package.json"},"license":"MIT","author":{"name":"buckeyestudio"},"peerDependencies":{"@buckeyestudio/cordis-plugin-timer":"^1.1.3","@buckeyestudio/toh-agent":"^0.1.1-rc.2","@buckeyestudio/toh-agent-loop":"^0.1.1-rc.2","@buckeyestudio/toh-goal":"^0.1.1-rc.2","@buckeyestudio/toh-goal-round-driver":"^0.1.1-rc.2","@buckeyestudio/toh-invariants":"^0.1.1-rc.2","@buckeyestudio/toh-llm":"^0.1.1-rc.2","@buckeyestudio/toh-home-paths":"^0.1.1-rc.2","@buckeyestudio/toh-llm-retry":"^0.1.1-rc.2","@buckeyestudio/toh-scope":"^0.1.1-rc.2","@buckeyestudio/toh-session":"^0.1.1-rc.2","@buckeyestudio/toh-session-title":"^0.1.1-rc.2","@buckeyestudio/toh-skill":"^0.1.1-rc.2","@buckeyestudio/toh-system-prompt":"^0.1.1-rc.2","@buckeyestudio/toh-jobs-local":"^0.1.1-rc.2","@buckeyestudio/toh-shell-env":"^0.1.1-rc.2","@buckeyestudio/toh-skill-filesystem":"^0.1.1-rc.2","@buckeyestudio/toh-tool-bash":"^0.1.1-rc.2","@buckeyestudio/toh-tool-goal":"^0.1.1-rc.2","@buckeyestudio/toh-tool-skill":"^0.1.1-rc.2","@buckeyestudio/toh-tool-jobs":"^0.1.1-rc.2","@buckeyestudio/toh-tools":"^0.1.1-rc.2","@buckeyestudio/toh-agent-instructions":"^0.1.1-rc.2","@buckeyestudio/cordis":"^4.0.1"},"devDependencies":{"@buckeyestudio/cordis-plugin-timer":"^1.1.3","@buckeyestudio/toh-agent":"^0.1.1-rc.2","@buckeyestudio/toh-agent-loop":"^0.1.1-rc.2","@buckeyestudio/toh-bash-local":"^0.1.1-rc.2","@buckeyestudio/toh-shell-env":"^0.1.1-rc.2","@buckeyestudio/toh-bash-sandbox":"^0.1.1-rc.2","@buckeyestudio/toh-fs-observation-policy":"^0.1.1-rc.2","@buckeyestudio/toh-fs-local":"^0.1.1-rc.2","@buckeyestudio/toh-goal-round-driver":"^0.1.1-rc.2","@buckeyestudio/toh-fs-sandbox":"^0.1.1-rc.2","@buckeyestudio/toh-invariants":"^0.1.1-rc.2","@buckeyestudio/toh-llm":"^0.1.1-rc.2","@buckeyestudio/toh-goal":"^0.1.1-rc.2","@buckeyestudio/toh-home-paths":"^0.1.1-rc.2","@buckeyestudio/toh-llm-retry":"^0.1.1-rc.2","@buckeyestudio/toh-subprocess-local":"^0.1.1-rc.2","@buckeyestudio/toh-sandbox-local":"^0.1.1-rc.2","@buckeyestudio/toh-scope":"^0.1.1-rc.2","@buckeyestudio/toh-session":"^0.1.1-rc.2","@buckeyestudio/toh-sandbox-policy":"^0.1.1-rc.2","@buckeyestudio/toh-session-title":"^0.1.1-rc.2","@buckeyestudio/toh-skill":"^0.1.1-rc.2","@buckeyestudio/toh-system-prompt":"^0.1.1-rc.2","@buckeyestudio/toh-jobs":"^0.1.1-rc.2","@buckeyestudio/toh-skill-filesystem":"^0.1.1-rc.2","@buckeyestudio/toh-jobs-local":"^0.1.1-rc.2","@buckeyestudio/toh-tool-bash":"^0.1.1-rc.2","@buckeyestudio/toh-tool-goal":"^0.1.1-rc.2","@buckeyestudio/toh-tool-skill":"^0.1.1-rc.2","@buckeyestudio/toh-tool-fs":"^0.1.1-rc.2","@buckeyestudio/toh-tool-jobs":"^0.1.1-rc.2","@buckeyestudio/toh-tools":"^0.1.1-rc.2","@buckeyestudio/toh-agent-instructions":"^0.1.1-rc.2","@buckeyestudio/node-addon-landlock-run":"^0.1.1","@buckeyestudio/cordis":"^4.0.1"},"dependencies":{"@buckeyestudio/schemastery":"^3.18.1"},"_id":"@buckeyestudio/toh-agent-spine-demo@0.1.1-rc.2","bugs":{"url":"https://github.com/dustinwloring1988/theopen-harness/issues"},"homepage":"https://github.com/dustinwloring1988/theopen-harness#readme","_integrity":"sha512-URNKUGTwR3mNy842SXJ8Lp0MgSzN328lJvH1sK1Aa+2RysQwR2MYB293RW7+HQFG+MMwRRT95myo7MEOSakA9g==","_resolved":"/home/runner/work/theopen-harness/theopen-harness/dist/npm/buckeyestudio-toh-agent-spine-demo-0.1.1-rc.2.tgz","_from":"file:/home/runner/work/theopen-harness/theopen-harness/dist/npm/buckeyestudio-toh-agent-spine-demo-0.1.1-rc.2.tgz","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-URNKUGTwR3mNy842SXJ8Lp0MgSzN328lJvH1sK1Aa+2RysQwR2MYB293RW7+HQFG+MMwRRT95myo7MEOSakA9g==","shasum":"7f185cd9d4fd43703298083af47b5ef3c9d508c1","tarball":"https://registry.npmjs.org/@buckeyestudio/toh-agent-spine-demo/-/toh-agent-spine-demo-0.1.1-rc.2.tgz","fileCount":9,"unpackedSize":37977,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDkeP0seMXGD8DQVqcNQxbHCWfulLvHQMOrtnl6evyIywIgc4eip1KbyKuCAAFm3udSFBeN8U5ujIoivmUe9ut4gf4="}]},"_npmUser":{"name":"buckeyestudio","email":"dustinwloring1988@gmail.com"},"directories":{},"maintainers":[{"name":"buckeyestudio","email":"dustinwloring1988@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/toh-agent-spine-demo_0.1.1-rc.2_1787489733011_0.2771151877800435"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-23T12:55:32.857Z","0.1.1-rc.2":"2026-08-23T12:55:33.152Z","modified":"2026-08-23T12:55:33.422Z"},"maintainers":[{"name":"buckeyestudio","email":"dustinwloring1988@gmail.com"}],"description":"The default executor-less/UI-less agent spine with fallback session titles, provider-routed retry, and optional persisted goals","homepage":"https://github.com/dustinwloring1988/theopen-harness#readme","repository":{"type":"git","url":"git+https://github.com/dustinwloring1988/theopen-harness.git","directory":"packages/examples/agent-spine-demo"},"author":{"name":"buckeyestudio"},"bugs":{"url":"https://github.com/dustinwloring1988/theopen-harness/issues"},"license":"MIT","readme":"# @buckeyestudio/toh-agent-spine-demo\n\n[English](README.md) | 中文\n\n将**默认的不含执行器、不含 UI 的 agent（智能体）主干**作为一个 Cordis 组合包插件。它加载每个 harness agent 所需的固定服务集合，包括本地 skill（技能）提供方，并将循环的 `agents` 列表作为自身配置转发。因此，应用包只需添加入口和可替换后端，就能组合出可工作的 agent。\n\n阅读此包可了解完整插件树及其组合顺序。\n\n## 它加载的插件树\n\n`apply(ctx, config)` 将以下每个插件挂载为组合包 fiber 的子节点：\n\n```\n@buckeyestudio/cordis-plugin-timer  timer service (writes nothing to stdout)\n@buckeyestudio/toh-llm              abstract LLM service + content-block vocabulary\n@buckeyestudio/toh-session          event-sourced session log + store\n@buckeyestudio/toh-session-title    log-backed title service + deterministic fallback\n@buckeyestudio/toh-system-prompt    prompt-section + tool-schema assembly\n@buckeyestudio/toh-tools            registry + guarded pre/around/post/final-result pipeline\n@buckeyestudio/toh-skill            skill provider registry\n@buckeyestudio/toh-skill-filesystem      local filesystem skill provider\n@buckeyestudio/toh-agent            agent registry + initiator scope + agent/* events\n@buckeyestudio/toh-goal             optional persisted same-session goal domain\n@buckeyestudio/toh-tool-goal        optional model-facing goal controls\n@buckeyestudio/toh-goal-round-driver     optional same-session goal-round driver\n@buckeyestudio/toh-llm-retry        provider-routed request retry policy\n@buckeyestudio/toh-jobs-local      generic background-job registry\n@buckeyestudio/toh-invariants       configurable invariant registry service\n@buckeyestudio/toh-session/invariant\n@buckeyestudio/toh-agent/invariant\n@buckeyestudio/toh-scope/invariant\n@buckeyestudio/toh-agent-loop/invariant\n                                  package-owned relational checks\n@buckeyestudio/toh-tool-bash        the model-facing bash schema (unless toolBash=false)\n@buckeyestudio/toh-agent-instructions  AGENTS.md/CLAUDE.md workspace context loader\n@buckeyestudio/toh-tool-skill       session-prefix skill catalog + model-facing loader schema\n@buckeyestudio/toh-tool-jobs       job_output/job_list/job_kill schemas + completion notices\n@buckeyestudio/toh-agent-loop       THE concrete loop (gets the forwarded `agents`)\n                                  (toh-system-prompt gets the forwarded `persona`)\n```\n\n## 有意留在组合包外的组件\n\n主干包含每个入口都共有的全部组件。可替换组件和与入口耦合的组件留在外部，由加载组合包的一方选择：\n\n- **LLM（大语言模型）适配器**：组合包交付抽象 `llm` 服务；叶节点在 `ctx.llm` 上注册具体适配器（`llm-deepseek`、`llm-pi-ai`、`llm-replay`）。\n- **基于模型的会话标题提供方**：组合包挂载带可覆盖示例限制的后备服务（5 个词、40 个后备字节、80 个可接受标题字节）；叶节点可以恰好选用一个首消息或全消息 LLM 提供方。\n- **bash 执行器**：组合包交付 `tool-bash`（消费方 schema）；叶节点提供 `ctx.shell`（`bash-local` 或沙箱化实现）。\n- **非本地 skill 提供方**：组合包交付 skill 注册表、本地文件系统提供方和 `skill` 工具；部署可以把嵌入式目录或远程目录等其他提供方作为同级插件添加。\n- **入口与各应用基础设施**：无头、ACP（Agent Client Protocol）和 JSON-RPC 应用包负责传输、stdout 与重新加载选择。`timer` 保留在主干中，因为它是共有组件且不写 stdout。\n\n这里在组合层应用 [Service Definition／Service Provider／Consumer 的职责分离](../../../.agents/notes/implemented/architecture/2026-06-13-capability-seams.zh.md)：组合包拥有共享主干，叶节点拥有后端，应用包拥有入口。\n\n## 配置\n\n```ts\nimport type { Config } from '@buckeyestudio/toh-agent-spine-demo'\n// { agents?, maxParallelToolCalls?, includeHarnessIdentity?, includeRuntimeContext?, persona?, toolOrder?, tools?, tohHome?, sessionTitle?, skills?, workspaceContext, toolBash?, jobs?, toolJobs?, goals?, invariants? }\n// workspaceContext requires { maxBytes } or false; the other owner schemas supply defaults.\n```\n\n组合包将每个字段转发给拥有它的子节点。应用包提供预创建的 agent：无头和 JSON-RPC 组合会创建 `main`，ACP 应用则在 `session/new` 按需创建 agent。`includeRuntimeContext: false` 会转发给 `toh-system-prompt`，为新建会话抑制所有动态上下文快照，但不禁用其策略服务。提示词、工具、标题、skill、工作区上下文、不变式、目标和任务设置沿用其所属包记录的 schema 与默认值；`jobs.maxConcurrentJobsPerOwner` 配置本地 Service Provider，并与面向模型的 `toolJobs` 控制工具相互独立。`pickSpineConfig()` 只复制该组合包拥有的字段，`tohHome` 值冲突会在组合时失败。\n\n例如，`{ invariants: { enabled: true, package_allowlist: ['^@buckeyestudio/toh-'], package_blocklist: ['agent-loop$'] } }` 会让包拥有的配套插件保持挂载，但抑制被阻止的拥有者。Blocklist 匹配优先于 allowlist 匹配；正则表达式与生命周期规则见 [`toh-invariants`](../../runtime-diagnostics/invariants/README.zh.md)。\n\n## 为何使用代码组合包，而非共享 YAML include\n\nYAML include 可以去重配置，却无法拥有 bin 或提供入口默认值。ACP 应用包默认接出协议纯净的 stdout，但叶节点仍可添加不安全的 logger。组合包子节点把服务注册到根 isolate-keyed store，因此叶节点的同级插件无需依赖加载顺序即可通过注入看到它们。\n\n重试策略可能在新的编号步骤中重复失败的请求。重试状态、提供方错误和失败的部分分片不进入模型历史；每次提供方尝试仍可能产生计费；always 模式没有尝试次数上限；入口从所有已记录步骤推导用量；重建的请求保留先前前缀，以便复用提供方缓存。\n\n## 模型体验\n\n模型通过 `toh-system-prompt`、`toh-tool-skill`、`toh-tool-bash`、`toh-tools` 和 `toh-llm-retry` 间接获得体验；还会通过 `toh-tool-goal` 与 Goal Round 提示词获得体验，前提是启用 `goals`。组合包自身不添加面向模型的包装内容。\n\n#### KV Cache 影响\n\n不会直接失效；上述消费方负责请求前缀的任何变更。\n\n## 已知限制与暂缓事项\n\n- **大部分主干集合固定在代码中**：`apply()` 始终挂载核心服务；配置可以省略组合包内的目标、skill、bash 与任务控制工具，但要替换循环或删除其他主干成员，就必须组合另一个组合包。\n- **不变式服务与配套插件仍是固定成员**：`invariants.enabled: false` 或包筛选器会抑制检查，但不会移除服务或配套插件注册；Session 始终启用的校验与冻结是另一套机制。\n","readmeFilename":"README.zh.md","_rev":"1-1423490264a05a1ef048e714262c35f9"}