@te-river/opencode-team-mode 1.5.15 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/README.md +853 -690
  2. package/README.zh-CN.md +761 -631
  3. package/dist/agents.d.ts +5 -3
  4. package/dist/agents.d.ts.map +1 -1
  5. package/dist/agents.js +19 -8
  6. package/dist/agents.js.map +1 -1
  7. package/dist/capabilities.d.ts +1 -1
  8. package/dist/capabilities.js +2 -2
  9. package/dist/capabilities.js.map +1 -1
  10. package/dist/host/note.d.ts +7 -0
  11. package/dist/host/note.d.ts.map +1 -0
  12. package/dist/host/note.js +28 -0
  13. package/dist/host/note.js.map +1 -0
  14. package/dist/host/v1.d.ts +14 -0
  15. package/dist/host/v1.d.ts.map +1 -0
  16. package/dist/host/v1.js +340 -0
  17. package/dist/host/v1.js.map +1 -0
  18. package/dist/host/v2-browser-gate.d.ts +45 -0
  19. package/dist/host/v2-browser-gate.d.ts.map +1 -0
  20. package/dist/host/v2-browser-gate.js +319 -0
  21. package/dist/host/v2-browser-gate.js.map +1 -0
  22. package/dist/host/v2-capabilities.d.ts +68 -0
  23. package/dist/host/v2-capabilities.d.ts.map +1 -0
  24. package/dist/host/v2-capabilities.js +146 -0
  25. package/dist/host/v2-capabilities.js.map +1 -0
  26. package/dist/host/v2-client.d.ts +53 -0
  27. package/dist/host/v2-client.d.ts.map +1 -0
  28. package/dist/host/v2-client.js +193 -0
  29. package/dist/host/v2-client.js.map +1 -0
  30. package/dist/host/v2-events.d.ts +56 -0
  31. package/dist/host/v2-events.d.ts.map +1 -0
  32. package/dist/host/v2-events.js +158 -0
  33. package/dist/host/v2-events.js.map +1 -0
  34. package/dist/host/v2-guard.d.ts +101 -0
  35. package/dist/host/v2-guard.d.ts.map +1 -0
  36. package/dist/host/v2-guard.js +199 -0
  37. package/dist/host/v2-guard.js.map +1 -0
  38. package/dist/host/v2-offload.d.ts +148 -0
  39. package/dist/host/v2-offload.d.ts.map +1 -0
  40. package/dist/host/v2-offload.js +288 -0
  41. package/dist/host/v2-offload.js.map +1 -0
  42. package/dist/host/v2-permissions.d.ts +123 -0
  43. package/dist/host/v2-permissions.d.ts.map +1 -0
  44. package/dist/host/v2-permissions.js +190 -0
  45. package/dist/host/v2-permissions.js.map +1 -0
  46. package/dist/host/v2-probe.d.ts +85 -0
  47. package/dist/host/v2-probe.d.ts.map +1 -0
  48. package/dist/host/v2-probe.js +268 -0
  49. package/dist/host/v2-probe.js.map +1 -0
  50. package/dist/host/v2-scope.d.ts +51 -0
  51. package/dist/host/v2-scope.d.ts.map +1 -0
  52. package/dist/host/v2-scope.js +58 -0
  53. package/dist/host/v2-scope.js.map +1 -0
  54. package/dist/host/v2-session-client.d.ts +74 -0
  55. package/dist/host/v2-session-client.d.ts.map +1 -0
  56. package/dist/host/v2-session-client.js +171 -0
  57. package/dist/host/v2-session-client.js.map +1 -0
  58. package/dist/host/v2-session.d.ts +85 -0
  59. package/dist/host/v2-session.d.ts.map +1 -0
  60. package/dist/host/v2-session.js +171 -0
  61. package/dist/host/v2-session.js.map +1 -0
  62. package/dist/host/v2-subagent.d.ts +157 -0
  63. package/dist/host/v2-subagent.d.ts.map +1 -0
  64. package/dist/host/v2-subagent.js +286 -0
  65. package/dist/host/v2-subagent.js.map +1 -0
  66. package/dist/host/v2-tool.d.ts +67 -0
  67. package/dist/host/v2-tool.d.ts.map +1 -0
  68. package/dist/host/v2-tool.js +209 -0
  69. package/dist/host/v2-tool.js.map +1 -0
  70. package/dist/host/v2-transcript.d.ts +73 -0
  71. package/dist/host/v2-transcript.d.ts.map +1 -0
  72. package/dist/host/v2-transcript.js +151 -0
  73. package/dist/host/v2-transcript.js.map +1 -0
  74. package/dist/host/v2-types.d.ts +229 -0
  75. package/dist/host/v2-types.d.ts.map +1 -0
  76. package/dist/host/v2-types.js +17 -0
  77. package/dist/host/v2-types.js.map +1 -0
  78. package/dist/host/v2.d.ts +42 -0
  79. package/dist/host/v2.d.ts.map +1 -0
  80. package/dist/host/v2.js +706 -0
  81. package/dist/host/v2.js.map +1 -0
  82. package/dist/host-hooks.d.ts +13 -2
  83. package/dist/host-hooks.d.ts.map +1 -1
  84. package/dist/host-hooks.js +18 -5
  85. package/dist/host-hooks.js.map +1 -1
  86. package/dist/index.d.ts +23 -17
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +29 -326
  89. package/dist/index.js.map +1 -1
  90. package/dist/prompts/lead.d.ts +1 -1
  91. package/dist/prompts/lead.d.ts.map +1 -1
  92. package/dist/prompts/lead.js +452 -359
  93. package/dist/prompts/lead.js.map +1 -1
  94. package/dist/prompts/shared.d.ts +2 -2
  95. package/dist/prompts/shared.d.ts.map +1 -1
  96. package/dist/prompts/shared.js +89 -17
  97. package/dist/prompts/shared.js.map +1 -1
  98. package/dist/prompts/specialists.d.ts +2 -2
  99. package/dist/prompts/specialists.d.ts.map +1 -1
  100. package/dist/prompts/specialists.js +44 -10
  101. package/dist/prompts/specialists.js.map +1 -1
  102. package/dist/task-offload.d.ts +83 -0
  103. package/dist/task-offload.d.ts.map +1 -0
  104. package/dist/task-offload.js +174 -0
  105. package/dist/task-offload.js.map +1 -0
  106. package/dist/tm/args-schema.d.ts +4 -0
  107. package/dist/tm/args-schema.d.ts.map +1 -1
  108. package/dist/tm/args-schema.js +36 -3
  109. package/dist/tm/args-schema.js.map +1 -1
  110. package/dist/tm/board.d.ts +113 -0
  111. package/dist/tm/board.d.ts.map +1 -0
  112. package/dist/tm/board.js +275 -0
  113. package/dist/tm/board.js.map +1 -0
  114. package/dist/tm/browser.d.ts +325 -6
  115. package/dist/tm/browser.d.ts.map +1 -1
  116. package/dist/tm/browser.js +1360 -135
  117. package/dist/tm/browser.js.map +1 -1
  118. package/dist/tm/config.d.ts +36 -25
  119. package/dist/tm/config.d.ts.map +1 -1
  120. package/dist/tm/config.js +29 -7
  121. package/dist/tm/config.js.map +1 -1
  122. package/dist/tm/dispatch.d.ts +133 -53
  123. package/dist/tm/dispatch.d.ts.map +1 -1
  124. package/dist/tm/dispatch.js +481 -279
  125. package/dist/tm/dispatch.js.map +1 -1
  126. package/dist/tm/dupe-guard.d.ts +16 -3
  127. package/dist/tm/dupe-guard.d.ts.map +1 -1
  128. package/dist/tm/dupe-guard.js +27 -7
  129. package/dist/tm/dupe-guard.js.map +1 -1
  130. package/dist/tm/egress.d.ts +44 -0
  131. package/dist/tm/egress.d.ts.map +1 -0
  132. package/dist/tm/egress.js +191 -0
  133. package/dist/tm/egress.js.map +1 -0
  134. package/dist/tm/guard.js +1 -1
  135. package/dist/tm/guard.js.map +1 -1
  136. package/dist/tm/index.d.ts +67 -2
  137. package/dist/tm/index.d.ts.map +1 -1
  138. package/dist/tm/index.js +228 -20
  139. package/dist/tm/index.js.map +1 -1
  140. package/dist/tm/ledger.d.ts +114 -0
  141. package/dist/tm/ledger.d.ts.map +1 -0
  142. package/dist/tm/ledger.js +308 -0
  143. package/dist/tm/ledger.js.map +1 -0
  144. package/dist/tm/perm-ask.d.ts +45 -5
  145. package/dist/tm/perm-ask.d.ts.map +1 -1
  146. package/dist/tm/perm-ask.js +107 -7
  147. package/dist/tm/perm-ask.js.map +1 -1
  148. package/dist/tm/pipelines.d.ts.map +1 -1
  149. package/dist/tm/pipelines.js +24 -2
  150. package/dist/tm/pipelines.js.map +1 -1
  151. package/dist/tm/preview.d.ts +55 -0
  152. package/dist/tm/preview.d.ts.map +1 -1
  153. package/dist/tm/preview.js +225 -0
  154. package/dist/tm/preview.js.map +1 -1
  155. package/dist/tm/ptc/tool.d.ts.map +1 -1
  156. package/dist/tm/ptc/tool.js +2 -4
  157. package/dist/tm/ptc/tool.js.map +1 -1
  158. package/dist/tm/pty.d.ts.map +1 -1
  159. package/dist/tm/pty.js +6 -3
  160. package/dist/tm/pty.js.map +1 -1
  161. package/dist/tm/search.d.ts +5 -0
  162. package/dist/tm/search.d.ts.map +1 -1
  163. package/dist/tm/search.js +40 -8
  164. package/dist/tm/search.js.map +1 -1
  165. package/dist/tm/serp-loop.d.ts +45 -0
  166. package/dist/tm/serp-loop.d.ts.map +1 -0
  167. package/dist/tm/serp-loop.js +80 -0
  168. package/dist/tm/serp-loop.js.map +1 -0
  169. package/dist/tm/stats.d.ts +26 -0
  170. package/dist/tm/stats.d.ts.map +1 -1
  171. package/dist/tm/stats.js +194 -4
  172. package/dist/tm/stats.js.map +1 -1
  173. package/dist/tm/webfetch.d.ts +56 -0
  174. package/dist/tm/webfetch.d.ts.map +1 -1
  175. package/dist/tm/webfetch.js +187 -19
  176. package/dist/tm/webfetch.js.map +1 -1
  177. package/dist/tool-coerce.d.ts +24 -0
  178. package/dist/tool-coerce.d.ts.map +1 -0
  179. package/dist/tool-coerce.js +63 -0
  180. package/dist/tool-coerce.js.map +1 -0
  181. package/dist/types.d.ts +7 -1
  182. package/dist/types.d.ts.map +1 -1
  183. package/docs/installation-v2.md +436 -0
  184. package/docs/installation.md +81 -2
  185. package/docs/research/agent-data-exchange.md +117 -0
  186. package/docs/research/browser-pane.md +89 -0
  187. package/docs/research/host-http-api.md +132 -0
  188. package/docs/research/host-subagent-injection.md +187 -0
  189. package/docs/research/plugin-loader-contract.md +261 -0
  190. package/docs/research/v2-builtin-tools.md +447 -0
  191. package/docs/v2-port-notes.md +315 -0
  192. package/index.js +7 -0
  193. package/package.json +4 -1
  194. package/scripts/gen-v2-config.mjs +304 -0
  195. package/scripts/lib/config-surgery.cjs +239 -0
  196. package/scripts/lib/fake-ctx.mjs +146 -0
@@ -19,8 +19,10 @@ import { type EnvProtectMode } from "../envprotect.js";
19
19
  import { type TmConfig } from "./config.js";
20
20
  import { RunStore } from "./store.js";
21
21
  import type { CapabilityRow } from "../capabilities.js";
22
- export { rmForceSafe } from "../fs-safe.js";
22
+ import { rmForceSafe } from "../fs-safe.js";
23
+ export { rmForceSafe };
23
24
  export { buildTmMemoryTool, MEMORY_CATEGORIES, MEMORY_CONTENT_MAX, MEMORY_TITLE_MAX, projectSlug, scoreMemory, parseMemoryMarkdown, renderMemoryMarkdown, } from "./memory.js";
25
+ export { buildLedgerTool, createStorageLedgerStore, normalizeLedger, emptyLedger, addItem, markItem, openItems, renderLedger, ledgerGoalLine, LEDGER_STATUSES, type Ledger, type LedgerItem, type LedgerStore, } from "./ledger.js";
24
26
  export { buildTmBrowserTool, defaultBrowserExecutable, findBrowserExecutable, isChromiumFamily, isPassiveResource, normalizeResourceType, parseDesktopExec, parseProgId, parseRegCommand, playwrightLaunchTarget, rememberSite, resolveHeadless, siteOf, subresourcePass, } from "./browser.js";
25
27
  export { ptyCommandLine, ptyCommandBlocked, ptyVerdictLine } from "./pty.js";
26
28
  export type { PtyRecord, PtyDeps } from "./pty.js";
@@ -40,6 +42,19 @@ export interface TmRuntime {
40
42
  /** Host event bus slice the async dispatcher needs (session.idle /
41
43
  * .error / .status settle the lead's children). */
42
44
  observeDispatchEvent: (event: HostEvent) => void;
45
+ /** v2: open a tm_join row for a child the HOST's own `subagent` tool created, so a
46
+ * background dispatch is collectable instead of invisible. */
47
+ registerHostChild: (child: {
48
+ sessionID: string;
49
+ parentSessionID: string;
50
+ agent: string;
51
+ label: string;
52
+ }) => boolean;
53
+ /** Settle a registered child from the host's own completion envelope; false when this
54
+ * process does not know the id. See `applyV2CompletionWatch`. */
55
+ settleHostChild: (sessionID: string, state: string) => boolean;
56
+ /** Any child still running? Gates the per-request completion scan. */
57
+ hasOpenHostChild: () => boolean;
43
58
  /** Open async dispatches this plugin started (tests + observability). */
44
59
  dispatches: () => Array<{
45
60
  sessionID: string;
@@ -56,7 +71,8 @@ export interface CreateTmToolsOptions {
56
71
  /** Best-effort user notification (the host toast) — tm_browser's idle
57
72
  * reaper uses it so an auto-closed window is announced, not silent. */
58
73
  notify?: (message: string) => void;
59
- /** A tm_dispatch child session was created — let the approval gate
74
+ /** A sub-agent child session entered our registry (adopted from the host's
75
+ * session tree, or claimed by an id the lead named) — let the approval gate
60
76
  * register it so the sub-agent's own protected read opens the official
61
77
  * dialog instead of hard-throwing in an unregistered session. */
62
78
  onChildSession?: (sessionID: string, agent: string) => void;
@@ -64,7 +80,56 @@ export interface CreateTmToolsOptions {
64
80
  * lives at the plugin entry because that is where the host surfaces are
65
81
  * handed to us). */
66
82
  capabilities?: () => CapabilityRow[];
83
+ /** Environment to resolve the tool config from. Defaults to `process.env`,
84
+ * and exists so the two personalities can fork a DEFAULT without mutating the
85
+ * host process's env (v1 keeps its shipped behaviour byte-exactly while v2
86
+ * opens the domain allowlist, which is a personality decision, not a global
87
+ * one). Anything the user actually set always wins. */
88
+ env?: Record<string, string | undefined>;
89
+ /** Where the lead's LEDGER lives. v2 passes a `ctx.storage` adapter because
90
+ * that host has no `todowrite` for the mandate to attach to; v1 passes nothing
91
+ * and therefore registers no `tm_ledger` at all — its tool surface stays the
92
+ * one the v1 personality was frozen with. */
93
+ ledgerStore?: import("./ledger.js").LedgerStore;
94
+ /** What the v2 `ctx.session` bridge saw (attempted shapes, last host error), so
95
+ * `tm_join` can report WHY a named id could not be claimed. */
96
+ sessionReaderReport?: () => {
97
+ attempted: number;
98
+ resolved: number;
99
+ usedShape?: string;
100
+ failedShapes: string[];
101
+ lastError?: string;
102
+ };
67
103
  }
104
+ /** Collision-free shard key for a workspace path. It is a HASH rather than a
105
+ * sanitized basename because the CJK paths this plugin actually meets strip
106
+ * to nothing useful — `D:\扒取数据` and `D:\文档` both slug to "d", and a store
107
+ * shard that collides is the exact bug this exists to kill. */
108
+ export declare function workspaceStoreKey(directory: string): string;
109
+ /** The shard dir is created lazily, one per non-git workspace — so a machine
110
+ * that runs this plugin's own test suite a hundred times grows a `w-*`
111
+ * directory per throwaway temp dir (64 after a single dev session). Prune
112
+ * the siblings that have produced nothing inside the TTL, never the live
113
+ * one, and never with a bare rmSync (win32 silently no-ops on non-ASCII
114
+ * paths, which would leave the directory in place and the loop lying about
115
+ * what it removed). */
116
+ export declare function pruneStaleStoreShards(base: string,
117
+ /** the live shard to protect; `null` when this workspace has no shard (a git
118
+ * workspace stores at the base itself), which means every stale sibling is fair
119
+ * game — the TTL, not the identity of the current workspace, is what keeps a
120
+ * session's data alive */
121
+ keep: string | null, ttlMs: number, now?: number): string[];
122
+ /** A layout nothing reads is still a layout the user paid disk for. Sharding
123
+ * moved the run/trajectory trees under `w-<hash>/`, which silently orphaned
124
+ * the pre-shard `blackboard/` (runs + webcache) and `trajectory/` at the
125
+ * shared tmpdir base — measured 503 MB and 2654 run dirs on one machine, and
126
+ * no sweeper points there any more, so an upgrade would never reclaim it.
127
+ * Drain them under the SAME TTL rule the live store uses: expired is
128
+ * deletable, fresh is not (a session started before the upgrade may still be
129
+ * writing there), and the empty shells go last. `memories/` and the team
130
+ * blackboard's date-named dirs are still live at that base and are not
131
+ * touched here. */
132
+ export declare function reclaimLegacyStoreBuckets(base: string, ttlMs: number, now?: number): string[];
68
133
  export declare function createTmTools(input: PluginInput, opts?: CreateTmToolsOptions): Promise<TmRuntime>;
69
134
  export { DEFAULT_BASH_READONLY_ALLOWED, DEFAULT_WEBFETCH_DOMAINS, estimateTokens, parseAllowlistEnv, parseWebfetchAllowlistEnv, resolveTmConfig, shouldOffload, shorten, TM_CONFIG_DEFAULTS, } from "./config.js";
70
135
  export { buildRef, hmacToken, isExpired, newRunId, parseRef, REF_PATTERN, verifyToken, } from "./refs.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tm/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tm/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEzE,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AASrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,CAAA;AACtB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,WAAW,EACX,OAAO,EACP,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,cAAc,EACd,eAAe,EACf,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,WAAW,GACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,eAAe,EACf,MAAM,EACN,eAAe,GAChB,MAAM,cAAc,CAAA;AAKrB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC5E,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE9D,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,QAAQ,CAAA;IAChB,KAAK,EAAE,QAAQ,CAAA;IACf,0EAA0E;IAC1E,SAAS,EAAE,UAAU,CAAC,cAAc,gBAAgB,EAAE,cAAc,CAAC,CAAA;IACrE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACrC;;+CAE2C;IAC3C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B;wDACoD;IACpD,oBAAoB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IAChD;mEAC+D;IAC/D,iBAAiB,EAAE,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAA;IACnH;sEACkE;IAClE,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IAC9D,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,OAAO,CAAA;IAC/B,yEAAyE;IACzE,UAAU,EAAE,MAAM,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC5F;AAED,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB;4EACwE;IACxE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC;;;sEAGkE;IAClE,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3D;;yBAEqB;IACrB,YAAY,CAAC,EAAE,MAAM,aAAa,EAAE,CAAA;IACpC;;;;6DAIyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACxC;;;kDAG8C;IAC9C,WAAW,CAAC,EAAE,OAAO,aAAa,EAAE,WAAW,CAAA;IAC/C;oEACgE;IAChE,mBAAmB,CAAC,EAAE,MAAM;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACpI;AAED;;;gEAGgE;AAChE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED;;;;;;wBAMwB;AACxB,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM;AACZ;;;2BAG2B;AAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,KAAK,EAAE,MAAM,EACb,GAAG,GAAE,MAAmB,GACvB,MAAM,EAAE,CA+BV;AAED;;;;;;;;;oBASoB;AACpB,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,GAAE,MAAmB,GACvB,MAAM,EAAE,CA0DV;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAuRpB;AAID,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,yBAAyB,EACzB,eAAe,EACf,aAAa,EACb,OAAO,EACP,kBAAkB,GACnB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,WAAW,GACZ,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACrG,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC3E,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxF,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,4BAA4B,EAC5B,WAAW,EACX,UAAU,GACX,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAOpB,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,MAAM,EACN,YAAY,EACZ,WAAW,GACZ,MAAM,gBAAgB,CAAA;AAIvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,YAAY,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,gBAAgB,CAAA"}
package/dist/tm/index.js CHANGED
@@ -25,14 +25,18 @@ import { hmacToken, newRunId } from "./refs.js";
25
25
  import { RunStore } from "./store.js";
26
26
  import { buildTmTools } from "./tools.js";
27
27
  import { buildPipelines } from "./pipelines.js";
28
- import { buildPtcArgsSchema, buildWebfetchArgsSchema, buildMemoryArgsSchema, buildBrowserArgsSchema, buildSearchArgsSchema } from "./args-schema.js";
28
+ import { buildPtcArgsSchema, buildWebfetchArgsSchema, buildMemoryArgsSchema, buildBrowserArgsSchema, buildSearchArgsSchema, buildBoardArgsSchema } from "./args-schema.js";
29
29
  import { buildPtcRunTool } from "./ptc/index.js";
30
30
  import { buildStatsTool } from "./stats.js";
31
+ import { buildBoardWriteTool } from "./board.js";
32
+ import { buildLedgerTool } from "./ledger.js";
31
33
  import { createWebCache } from "./cache.js";
32
34
  import { buildTmWebfetchTool } from "./webfetch.js";
33
35
  import { buildTmSearchTool } from "./search.js";
34
- export { rmForceSafe } from "../fs-safe.js";
36
+ import { rmForceSafe } from "../fs-safe.js";
37
+ export { rmForceSafe };
35
38
  export { buildTmMemoryTool, MEMORY_CATEGORIES, MEMORY_CONTENT_MAX, MEMORY_TITLE_MAX, projectSlug, scoreMemory, parseMemoryMarkdown, renderMemoryMarkdown, } from "./memory.js";
39
+ export { buildLedgerTool, createStorageLedgerStore, normalizeLedger, emptyLedger, addItem, markItem, openItems, renderLedger, ledgerGoalLine, LEDGER_STATUSES, } from "./ledger.js";
36
40
  export { buildTmBrowserTool, defaultBrowserExecutable, findBrowserExecutable, isChromiumFamily, isPassiveResource, normalizeResourceType, parseDesktopExec, parseProgId, parseRegCommand, playwrightLaunchTarget, rememberSite, resolveHeadless, siteOf, subresourcePass, } from "./browser.js";
37
41
  import { buildTmMemoryTool } from "./memory.js";
38
42
  import { buildTmBrowserTool } from "./browser.js";
@@ -40,8 +44,147 @@ import { buildDispatchTools } from "./dispatch.js";
40
44
  import { buildTmPtyTool } from "./pty.js";
41
45
  export { ptyCommandLine, ptyCommandBlocked, ptyVerdictLine } from "./pty.js";
42
46
  export { buildDispatchTools, DISPATCH_TARGETS, lastAssistantText, renderChildLine, sessionApiOf, summarizeStates, } from "./dispatch.js";
47
+ /** Collision-free shard key for a workspace path. It is a HASH rather than a
48
+ * sanitized basename because the CJK paths this plugin actually meets strip
49
+ * to nothing useful — `D:\扒取数据` and `D:\文档` both slug to "d", and a store
50
+ * shard that collides is the exact bug this exists to kill. */
51
+ export function workspaceStoreKey(directory) {
52
+ const norm = path
53
+ .resolve(String(directory ?? "").trim() || process.cwd())
54
+ .replace(/[\\/]+$/g, "")
55
+ .toLowerCase();
56
+ return crypto.createHash("sha256").update(path.normalize(norm)).digest("hex").slice(0, 10);
57
+ }
58
+ /** The shard dir is created lazily, one per non-git workspace — so a machine
59
+ * that runs this plugin's own test suite a hundred times grows a `w-*`
60
+ * directory per throwaway temp dir (64 after a single dev session). Prune
61
+ * the siblings that have produced nothing inside the TTL, never the live
62
+ * one, and never with a bare rmSync (win32 silently no-ops on non-ASCII
63
+ * paths, which would leave the directory in place and the loop lying about
64
+ * what it removed). */
65
+ export function pruneStaleStoreShards(base,
66
+ /** the live shard to protect; `null` when this workspace has no shard (a git
67
+ * workspace stores at the base itself), which means every stale sibling is fair
68
+ * game — the TTL, not the identity of the current workspace, is what keeps a
69
+ * session's data alive */
70
+ keep, ttlMs, now = Date.now()) {
71
+ const removed = [];
72
+ let names;
73
+ try {
74
+ names = fs.readdirSync(base);
75
+ }
76
+ catch {
77
+ return removed;
78
+ }
79
+ const keepName = keep ? path.basename(keep) : "";
80
+ for (const name of names) {
81
+ if (!/^w-[0-9a-f]{10}$/.test(name) || name === keepName)
82
+ continue;
83
+ const dir = path.join(base, name);
84
+ let newest = 0;
85
+ try {
86
+ newest = fs.statSync(dir).mtimeMs;
87
+ }
88
+ catch {
89
+ continue;
90
+ }
91
+ for (const sub of ["trajectory/runs", "blackboard/runs"]) {
92
+ try {
93
+ newest = Math.max(newest, fs.statSync(path.join(dir, sub)).mtimeMs);
94
+ }
95
+ catch {
96
+ /* absent — no evidence of life either way */
97
+ }
98
+ }
99
+ if (now - newest > ttlMs) {
100
+ rmForceSafe(dir, { recursive: true });
101
+ if (!fs.existsSync(dir))
102
+ removed.push(name);
103
+ }
104
+ }
105
+ return removed;
106
+ }
107
+ /** A layout nothing reads is still a layout the user paid disk for. Sharding
108
+ * moved the run/trajectory trees under `w-<hash>/`, which silently orphaned
109
+ * the pre-shard `blackboard/` (runs + webcache) and `trajectory/` at the
110
+ * shared tmpdir base — measured 503 MB and 2654 run dirs on one machine, and
111
+ * no sweeper points there any more, so an upgrade would never reclaim it.
112
+ * Drain them under the SAME TTL rule the live store uses: expired is
113
+ * deletable, fresh is not (a session started before the upgrade may still be
114
+ * writing there), and the empty shells go last. `memories/` and the team
115
+ * blackboard's date-named dirs are still live at that base and are not
116
+ * touched here. */
117
+ export function reclaimLegacyStoreBuckets(base, ttlMs, now = Date.now()) {
118
+ const removed = [];
119
+ const emptyTree = (dir) => {
120
+ // A FILE is not "empty" — it is an entry that exists. Treating the
121
+ // readdir throw as true once deleted a live run dir along with its shell.
122
+ if (!fs.existsSync(dir))
123
+ return true;
124
+ let names;
125
+ try {
126
+ names = fs.readdirSync(dir);
127
+ }
128
+ catch {
129
+ return false;
130
+ }
131
+ return names.every((n) => emptyTree(path.join(dir, n)));
132
+ };
133
+ let top;
134
+ try {
135
+ top = fs.readdirSync(base);
136
+ }
137
+ catch {
138
+ return removed;
139
+ }
140
+ if (!top.includes("blackboard") && !top.includes("trajectory"))
141
+ return removed;
142
+ for (const name of ["blackboard", "trajectory"]) {
143
+ const dir = path.join(base, name);
144
+ let containers;
145
+ try {
146
+ containers = fs.readdirSync(dir);
147
+ }
148
+ catch {
149
+ continue;
150
+ }
151
+ for (const container of containers) {
152
+ if (container !== "runs" && container !== "webcache")
153
+ continue;
154
+ const cdir = path.join(dir, container);
155
+ let kids;
156
+ try {
157
+ kids = fs.readdirSync(cdir);
158
+ }
159
+ catch {
160
+ continue;
161
+ }
162
+ for (const kid of kids) {
163
+ const p = path.join(cdir, kid);
164
+ let mtime = 0;
165
+ try {
166
+ mtime = fs.statSync(p).mtimeMs;
167
+ }
168
+ catch {
169
+ continue;
170
+ }
171
+ if (now - mtime > ttlMs) {
172
+ rmForceSafe(p, { recursive: true });
173
+ if (!fs.existsSync(p))
174
+ removed.push(`${name}/${container}/${kid}`);
175
+ }
176
+ }
177
+ }
178
+ if (emptyTree(dir)) {
179
+ rmForceSafe(dir, { recursive: true });
180
+ if (!fs.existsSync(dir))
181
+ removed.push(name);
182
+ }
183
+ }
184
+ return removed;
185
+ }
43
186
  export async function createTmTools(input, opts = {}) {
44
- const cfg = resolveTmConfig(process.env);
187
+ const cfg = resolveTmConfig(opts.env ?? process.env);
45
188
  const directory = typeof input?.directory === "string" && input.directory.length > 0
46
189
  ? input.directory
47
190
  : process.cwd();
@@ -66,9 +209,49 @@ export async function createTmTools(input, opts = {}) {
66
209
  return false;
67
210
  }
68
211
  })();
69
- const storeBase = gitUsable
212
+ const sharedBase = gitUsable
70
213
  ? path.join(gitDir, "opencode-team")
71
214
  : path.join(os.tmpdir(), "opencode-team");
215
+ // A non-git workspace used to share ONE tmpdir bucket with every other
216
+ // non-git workspace — and with this plugin's own test runs. tm_stats then
217
+ // reported somebody else's session: a user's read-only self-check printed
218
+ // "窗口 10 个 run · 墙钟 81370s" of traffic that belonged to neither their
219
+ // session nor their project. The run/trajectory/blackboard trees are
220
+ // therefore sharded per workspace. `memories/` deliberately stays on the
221
+ // shared base — its project tier is already keyed by project slug, and
222
+ // moving it would strand memories the user already wrote.
223
+ const storeBase = gitUsable ? sharedBase : path.join(sharedBase, `w-${workspaceStoreKey(directory)}`);
224
+ // Boot-time reclamation of what an upgrade leaves behind. Both passes are
225
+ // TTL-gated (expired is deletable, fresh is not — a session started before
226
+ // the upgrade may still be writing), and TM_STORE_RECLAIM=off exists so the
227
+ // test runner never reaches into the developer's real Temp.
228
+ if (cfg.storeReclaim !== "off") {
229
+ const ttlMs = cfg.blackboardTtlDays * 24 * 60 * 60 * 1000;
230
+ // Shards live in the TMPDIR bucket and nowhere else — a git workspace's store
231
+ // is inside its own `.git`, which never contains a `w-*`. So the prune has to
232
+ // name that bucket explicitly rather than reuse `sharedBase`: passing sharedBase
233
+ // meant a git boot swept a directory that can only ever be empty of shards, and
234
+ // the pass was additionally gated on `!gitUsable`. Two independent reasons why
235
+ // one machine accumulated 2,067 orphaned shards while its owner worked mostly
236
+ // inside repositories. A git workspace therefore protects no live shard
237
+ // (`keep: null`), and the TTL — not the current workspace's identity — is what
238
+ // spares a session running in another window.
239
+ const shardBucket = path.join(os.tmpdir(), "opencode-team");
240
+ try {
241
+ pruneStaleStoreShards(shardBucket, gitUsable ? null : storeBase, ttlMs);
242
+ }
243
+ catch {
244
+ /* cleanup only — a failed prune must never cost the session its tools */
245
+ }
246
+ // The pre-shard layout lives at the TMPDIR base and nowhere else: inside a
247
+ // repo, `blackboard/`+`trajectory/` ARE the live store.
248
+ try {
249
+ reclaimLegacyStoreBuckets(shardBucket, ttlMs);
250
+ }
251
+ catch {
252
+ /* same: reclamation is never worth failing a session over */
253
+ }
254
+ }
72
255
  // User-level global memory root — OUTSIDE any repo, so "global" scope
73
256
  // really follows the user across projects (repo scope stays in .git).
74
257
  const globalMemoriesDir = cfg.memoryGlobalDir || path.join(os.homedir(), ".opencode-team", "memories", "global");
@@ -138,7 +321,7 @@ export async function createTmTools(input, opts = {}) {
138
321
  // a network channel, it is shared project knowledge.
139
322
  const memoryArgs = await buildMemoryArgsSchema();
140
323
  tools.tm_memory = buildTmMemoryTool({
141
- storeBase,
324
+ storeBase: sharedBase,
142
325
  globalRoot: globalMemoriesDir,
143
326
  directory,
144
327
  cfg,
@@ -213,26 +396,27 @@ export async function createTmTools(input, opts = {}) {
213
396
  webTools: ptcWebTools,
214
397
  });
215
398
  tools.tm_ptc_run = ptcTool;
216
- // tm_dispatch / tm_join — ASYNC sub-agent dispatch for the lead (issue #7:
217
- // the host's `task` tool blocks the calling session, so "parallel team"
218
- // really meant "serial with extra steps"). Built on the official client
219
- // session API; both tools self-gate to the lead agent, and the five
220
- // specialists carry an explicit deny in agents.ts.
399
+ // tm_join — the collect side of sub-agent work (see src/tm/dispatch.ts for
400
+ // the whole story). tm_dispatch is NOT registered: a plugin-spawned child is
401
+ // a session the user can neither open from a card nor stop from the UI, so
402
+ // delegation has exactly one route left — the host's own `task` (governed,
403
+ // visible, killable). The dispatcher object stays because tm_join needs its
404
+ // registry: children dispatched before the removal are still adopted,
405
+ // collected and cancelled through it, and it self-gates to the lead agent.
221
406
  const dispatch = buildDispatchTools({
222
407
  client: input?.client,
223
408
  pipelines,
224
409
  onChildSession: opts.onChildSession,
225
- // the two guards the built-in task tool applies and a plugin-side
226
- // dispatcher would otherwise skip: the user's spawn consent and the
227
- // host's subagent_depth ceiling
228
- askBeforeSpawn: cfg.dispatchAsk !== "off",
229
- maxDepth: cfg.subagentDepth,
230
- parallelDispatch: cfg.parallelDispatch,
231
- // a dispatch is invisible in the tool card (the host renders only its own
232
- // built-in tools' bodies), so the toast carries "where to look"
233
- notify: opts.notify,
410
+ maxWaitMs: cfg.joinMaxWaitMs,
411
+ // #80: tm_join reports a child that settled while still holding a browser
412
+ // window. One shared instance already owns the lease table, so this is a
413
+ // read of a fact, not a second source of truth.
414
+ browserLeases: () => browserTool.leases(),
415
+ // The goal tripwire prefers the HOST's todo list; when there is none (v2),
416
+ // the plugin's own LEDGER is the list that can actually be checked.
417
+ ledgerStore: opts.ledgerStore,
418
+ sessionReaderReport: opts.sessionReaderReport,
234
419
  });
235
- tools.tm_dispatch = dispatch.tm_dispatch;
236
420
  tools.tm_join = dispatch.tm_join;
237
421
  // tm_pty — non-blocking command execution on the host's own terminal
238
422
  // sessions (issue #6: three serial 120 s test suites are minutes of dead
@@ -244,6 +428,27 @@ export async function createTmTools(input, opts = {}) {
244
428
  // with a number behind it instead of a vibe, and what names the surface an
245
429
  // OpenCode upgrade removed.
246
430
  tools.tm_stats = buildStatsTool({ store, capabilities: opts.capabilities });
431
+ // tm_board_write — the blackboard's write side. The board layout the
432
+ // workspace note publishes is <root>/<session-key>/<task>/NN-<role>-<topic>,
433
+ // and reaching it used to require a file tool: architect and researcher carry
434
+ // none (no write, no edit, not even bash to stamp the session folder), so
435
+ // every oversized deliverable from those roles came back as
436
+ // BLACKBOARD WRITE FAILED + the whole document pasted inline. This writer is
437
+ // scoped to that one path shape under the SAME root the note advertises —
438
+ // sharedBase, which is teamRootFor(directory) in every mode.
439
+ tools.tm_board_write = buildBoardWriteTool({
440
+ pipelines,
441
+ boardRoot: sharedBase,
442
+ cfg: { boardMaxChars: cfg.boardMaxChars, boardMaxFiles: cfg.boardMaxFiles },
443
+ args: await buildBoardArgsSchema(),
444
+ });
445
+ // tm_ledger — registered ONLY when a store was handed in, which today means
446
+ // v2. v1 has the host's own `todowrite` for the LEDGER mandate, and the v1
447
+ // personality is frozen: an extra tool in this record would be a v1 tool-
448
+ // surface change smuggled in through a v2 feature.
449
+ if (opts.ledgerStore) {
450
+ tools.tm_ledger = buildLedgerTool({ store: opts.ledgerStore, onlyAgent: "team", env: opts.env ?? process.env });
451
+ }
247
452
  return {
248
453
  runId,
249
454
  config: cfg,
@@ -252,6 +457,9 @@ export async function createTmTools(input, opts = {}) {
252
457
  tools,
253
458
  dispose: () => browserTool.dispose(),
254
459
  observeDispatchEvent: dispatch.observeEvent,
460
+ registerHostChild: dispatch.register,
461
+ settleHostChild: dispatch.settle,
462
+ hasOpenHostChild: dispatch.hasOpen,
255
463
  dispatches: () => dispatch.children().map((c) => ({ sessionID: c.sessionID, agent: c.agent, label: c.label, state: c.state })),
256
464
  };
257
465
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tm/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tm/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * `tm_ledger` — the LEDGER rule's landing spot on a host that has no `todowrite`.
3
+ *
4
+ * The lead's prompt mandates it: every new ask becomes a list item BEFORE the
5
+ * work, an interruption is an insertion rather than a replacement, `blocked` is a
6
+ * state and not an exit, and after a compaction the list is re-read before
7
+ * anything else. On v1 that list is the host's own `todowrite`. On v2 a plugin
8
+ * cannot create that tool (`V2_ONLY_ACTIONS` names `todowrite` as a key with no
9
+ * v2 counterpart), so the mandate had no落点 — and the goal tripwire in `tm_join`
10
+ * had nothing to check, which it now says out loud (`goal_unchecked reason=no_seam`).
11
+ *
12
+ * This module is the other answer. Storage is `ctx.storage` — the host's own
13
+ * key/value domain, proven by a boot self-check that writes a marker and reads it
14
+ * back. That choice beats the alternative (a file under the run store), which is
15
+ * the user's work-in-progress sitting in a temp directory with no owner. Two facts
16
+ * from a live 2.0.16 probe (`docs/research/agent-data-exchange.md`) shape this file:
17
+ * · the domain is shared across sessions, agents AND projects — the only namespace
18
+ * is the plugin id — so the session id is part of the key and nothing may be
19
+ * written without one;
20
+ * · there is no TTL and no quota, so a list that only ever grows is a leak with a
21
+ * friendly name. That is why `LEDGER_MAX_ITEMS` refuses instead of promising a
22
+ * cleanup mechanism this host does not offer.
23
+ *
24
+ * The honesty rule this module exists to obey (product goal #6): a reply about
25
+ * the list says whether the list REACHED storage. An in-memory-only "已记录"
26
+ * would be exactly the unverified "done" the rest of this plugin treats as a bug.
27
+ */
28
+ import type { ToolDefinition } from "../types.js";
29
+ export declare const LEDGER_STATUSES: readonly ["open", "doing", "done", "blocked"];
30
+ export type LedgerStatus = (typeof LEDGER_STATUSES)[number];
31
+ export interface LedgerItem {
32
+ id: number;
33
+ text: string;
34
+ status: LedgerStatus;
35
+ /** epoch ms of the last change to THIS item */
36
+ at: number;
37
+ /** why it is blocked / how it was closed — the part a later round cannot infer */
38
+ note?: string;
39
+ }
40
+ export interface Ledger {
41
+ sessionID: string;
42
+ items: LedgerItem[];
43
+ updated: number;
44
+ }
45
+ /** The persistence seam. v2 supplies the `ctx.storage` adapter; a test supplies
46
+ * a Map. Nothing here may assume a shape the host did not answer with, so
47
+ * `load` returns null for "nothing stored yet" and throws only for a real
48
+ * failure — which the tool reports as a failure. */
49
+ export interface LedgerStore {
50
+ readonly kind: string;
51
+ available(): boolean;
52
+ load(sessionID: string): Promise<Ledger | null>;
53
+ save(ledger: Ledger): Promise<void>;
54
+ /** the last transport problem, in words — never a value the user stored */
55
+ detail?(): string;
56
+ }
57
+ export declare function createStorageLedgerStore(storage: unknown): LedgerStore;
58
+ /** Defensive read: a value that is not a ledger is treated as absent rather than
59
+ * half-trusted, because a silently-mangled list is worse than an empty one —
60
+ * the lead would wrap up believing the work was accounted for. */
61
+ export declare function normalizeLedger(raw: unknown): Ledger | null;
62
+ /** The dedup key. The LEDGER rule says an interruption INSERTS, and the same ask
63
+ * arriving twice (a re-stated instruction, a screenshot of the same question)
64
+ * must not grow a second line the lead then has to close twice — so the key is
65
+ * the text with case/whitespace/trailing punctuation removed, which is the same
66
+ * "same question" notion tm_memory's dedupKey uses. */
67
+ export declare function ledgerDedupKey(text: string): string;
68
+ export declare function emptyLedger(sessionID: string): Ledger;
69
+ /** `ctx.storage` never expires anything (measured), so the list needs a ceiling or
70
+ * it grows for the life of the install. Refusing is honest; silently truncating
71
+ * would be the overstated claim — the lead would believe its oldest asks were gone
72
+ * when they were only hidden. */
73
+ export declare const LEDGER_MAX_ITEMS_DEFAULT = 200;
74
+ export declare function ledgerMaxItems(env?: Record<string, string | undefined>): number;
75
+ /** A merge is reported, not hidden: the reply says "这条已经在清单上(#2)" so the
76
+ * lead learns the insertion was a repeat instead of wondering why the count did
77
+ * not move. */
78
+ export declare function addItem(ledger: Ledger, text: string, now?: number): {
79
+ ledger: Ledger;
80
+ item: LedgerItem;
81
+ merged: boolean;
82
+ };
83
+ export declare function openItems(ledger: Ledger | null | undefined): LedgerItem[];
84
+ /** Resolve `#4` / `4` / a substring, and refuse an ambiguous match by NAMING the
85
+ * candidates — a list tool that silently marks the wrong line destroys the one
86
+ * thing it is for. */
87
+ export declare function findItem(ledger: Ledger, ref: string | number): {
88
+ item?: LedgerItem;
89
+ candidates: LedgerItem[];
90
+ };
91
+ export declare function markItem(ledger: Ledger, ref: string | number, status: LedgerStatus, note?: string, now?: number): {
92
+ ledger: Ledger;
93
+ item: LedgerItem;
94
+ } | {
95
+ error: string;
96
+ };
97
+ export declare function renderLedger(ledger: Ledger): string;
98
+ /** The line `tm_join` appends when the round settled but the LEDGER did not —
99
+ * the goal tripwire's shape applied to a list the plugin actually owns. */
100
+ export declare function ledgerGoalLine(ledger: Ledger | null | undefined, max?: number): string | null;
101
+ export interface LedgerToolDeps {
102
+ store: LedgerStore;
103
+ /** The LEDGER is the lead's instrument (a specialist reports STATUS and answers
104
+ * to the lead), and on v2 the matrix grants every `tm_*` to every role, so the
105
+ * gate lives here rather than in the frozen permission table. */
106
+ onlyAgent?: string;
107
+ /** Resolved from the personality's own env copy, so v1 and v2 can differ. */
108
+ env?: Record<string, string | undefined>;
109
+ /** Called after a successful write so the host (index.ts) can log the trajectory. */
110
+ onWrite?: (sessionID: string, event: string) => void;
111
+ now?: () => number;
112
+ }
113
+ export declare function buildLedgerTool(deps: LedgerToolDeps): ToolDefinition;
114
+ //# sourceMappingURL=ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/tm/ledger.ts"],"names":[],"mappings":"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"}