@earendil-works/pi-durable 1.3.0 → 1.5.0

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 (257) hide show
  1. package/CHANGELOG.md +227 -0
  2. package/README.md +287 -82
  3. package/dist/codemode/codemode.d.ts +4 -4
  4. package/dist/codemode/codemode.d.ts.map +1 -1
  5. package/dist/codemode/codemode.js +21 -16
  6. package/dist/codemode/codemode.js.map +1 -1
  7. package/dist/codemode/models.d.ts.map +1 -1
  8. package/dist/codemode/models.js +6 -4
  9. package/dist/codemode/models.js.map +1 -1
  10. package/dist/documents.d.ts +1 -1
  11. package/dist/documents.d.ts.map +1 -1
  12. package/dist/documents.js.map +1 -1
  13. package/dist/env/index.d.ts +12 -10
  14. package/dist/env/index.d.ts.map +1 -1
  15. package/dist/env/index.js.map +1 -1
  16. package/dist/env/node-watch.d.ts +3 -3
  17. package/dist/env/node-watch.d.ts.map +1 -1
  18. package/dist/env/node-watch.js +18 -16
  19. package/dist/env/node-watch.js.map +1 -1
  20. package/dist/env/node.d.ts +2 -2
  21. package/dist/env/node.d.ts.map +1 -1
  22. package/dist/env/node.js +12 -4
  23. package/dist/env/node.js.map +1 -1
  24. package/dist/errors.d.ts +18 -2
  25. package/dist/errors.d.ts.map +1 -1
  26. package/dist/errors.js +26 -3
  27. package/dist/errors.js.map +1 -1
  28. package/dist/harness/agent.d.ts +13 -2
  29. package/dist/harness/agent.d.ts.map +1 -1
  30. package/dist/harness/agent.js +48 -6
  31. package/dist/harness/agent.js.map +1 -1
  32. package/dist/harness/compaction.d.ts +3 -1
  33. package/dist/harness/compaction.d.ts.map +1 -1
  34. package/dist/harness/compaction.js +38 -6
  35. package/dist/harness/compaction.js.map +1 -1
  36. package/dist/harness/context.d.ts +23 -7
  37. package/dist/harness/context.d.ts.map +1 -1
  38. package/dist/harness/context.js +71 -25
  39. package/dist/harness/context.js.map +1 -1
  40. package/dist/harness/define.d.ts +7 -3
  41. package/dist/harness/define.d.ts.map +1 -1
  42. package/dist/harness/define.js +4 -0
  43. package/dist/harness/define.js.map +1 -1
  44. package/dist/harness/generation.d.ts +38 -5
  45. package/dist/harness/generation.d.ts.map +1 -1
  46. package/dist/harness/generation.js +497 -108
  47. package/dist/harness/generation.js.map +1 -1
  48. package/dist/harness/harness.d.ts +7 -2
  49. package/dist/harness/harness.d.ts.map +1 -1
  50. package/dist/harness/harness.js +147 -57
  51. package/dist/harness/harness.js.map +1 -1
  52. package/dist/harness/inbox.d.ts +7 -3
  53. package/dist/harness/inbox.d.ts.map +1 -1
  54. package/dist/harness/inbox.js +7 -4
  55. package/dist/harness/inbox.js.map +1 -1
  56. package/dist/harness/json.d.ts +20 -4
  57. package/dist/harness/json.d.ts.map +1 -1
  58. package/dist/harness/json.js +23 -5
  59. package/dist/harness/json.js.map +1 -1
  60. package/dist/harness/live.d.ts +122 -16
  61. package/dist/harness/live.d.ts.map +1 -1
  62. package/dist/harness/live.js +93 -12
  63. package/dist/harness/live.js.map +1 -1
  64. package/dist/harness/partial-changes.d.ts +54 -0
  65. package/dist/harness/partial-changes.d.ts.map +1 -0
  66. package/dist/harness/partial-changes.js +162 -0
  67. package/dist/harness/partial-changes.js.map +1 -0
  68. package/dist/harness/prompt.d.ts +1 -1
  69. package/dist/harness/prompt.d.ts.map +1 -1
  70. package/dist/harness/prompt.js +1 -1
  71. package/dist/harness/prompt.js.map +1 -1
  72. package/dist/harness/registry-reader.d.ts +11 -0
  73. package/dist/harness/registry-reader.d.ts.map +1 -0
  74. package/dist/harness/registry-reader.js +25 -0
  75. package/dist/harness/registry-reader.js.map +1 -0
  76. package/dist/harness/scheduler.d.ts +86 -14
  77. package/dist/harness/scheduler.d.ts.map +1 -1
  78. package/dist/harness/scheduler.js +1459 -369
  79. package/dist/harness/scheduler.js.map +1 -1
  80. package/dist/harness/submissions.d.ts +23 -11
  81. package/dist/harness/submissions.d.ts.map +1 -1
  82. package/dist/harness/submissions.js +104 -36
  83. package/dist/harness/submissions.js.map +1 -1
  84. package/dist/harness/task-graph.d.ts +28 -8
  85. package/dist/harness/task-graph.d.ts.map +1 -1
  86. package/dist/harness/task-graph.js +85 -36
  87. package/dist/harness/task-graph.js.map +1 -1
  88. package/dist/harness/telemetry.d.ts +307 -0
  89. package/dist/harness/telemetry.d.ts.map +1 -0
  90. package/dist/harness/telemetry.js +136 -0
  91. package/dist/harness/telemetry.js.map +1 -0
  92. package/dist/harness/tool.d.ts +2 -0
  93. package/dist/harness/tool.d.ts.map +1 -1
  94. package/dist/harness/tool.js +223 -61
  95. package/dist/harness/tool.js.map +1 -1
  96. package/dist/harness/transcript.d.ts +72 -0
  97. package/dist/harness/transcript.d.ts.map +1 -0
  98. package/dist/harness/transcript.js +264 -0
  99. package/dist/harness/transcript.js.map +1 -0
  100. package/dist/harness/types.d.ts +302 -48
  101. package/dist/harness/types.d.ts.map +1 -1
  102. package/dist/harness/types.js.map +1 -1
  103. package/dist/harness/util.d.ts +7 -1
  104. package/dist/harness/util.d.ts.map +1 -1
  105. package/dist/harness/util.js +13 -0
  106. package/dist/harness/util.js.map +1 -1
  107. package/dist/harness/view.d.ts +43 -22
  108. package/dist/harness/view.d.ts.map +1 -1
  109. package/dist/harness/view.js +130 -71
  110. package/dist/harness/view.js.map +1 -1
  111. package/dist/index.d.ts +13 -9
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +7 -5
  114. package/dist/index.js.map +1 -1
  115. package/dist/search.d.ts +19 -3
  116. package/dist/search.d.ts.map +1 -1
  117. package/dist/search.js +107 -44
  118. package/dist/search.js.map +1 -1
  119. package/dist/session/cached-storage.d.ts +71 -0
  120. package/dist/session/cached-storage.d.ts.map +1 -0
  121. package/dist/session/cached-storage.js +269 -0
  122. package/dist/session/cached-storage.js.map +1 -0
  123. package/dist/session/conversation-tails.d.ts +33 -0
  124. package/dist/session/conversation-tails.d.ts.map +1 -0
  125. package/dist/session/conversation-tails.js +101 -0
  126. package/dist/session/conversation-tails.js.map +1 -0
  127. package/dist/session/keys.d.ts +68 -0
  128. package/dist/session/keys.d.ts.map +1 -0
  129. package/dist/session/keys.js +161 -0
  130. package/dist/session/keys.js.map +1 -0
  131. package/dist/session/session.d.ts +181 -29
  132. package/dist/session/session.d.ts.map +1 -1
  133. package/dist/session/session.js +1073 -183
  134. package/dist/session/session.js.map +1 -1
  135. package/dist/session/transaction.d.ts +86 -4
  136. package/dist/session/transaction.d.ts.map +1 -1
  137. package/dist/session/transaction.js +250 -38
  138. package/dist/session/transaction.js.map +1 -1
  139. package/dist/session/writer.d.ts +74 -0
  140. package/dist/session/writer.d.ts.map +1 -0
  141. package/dist/session/writer.js +294 -0
  142. package/dist/session/writer.js.map +1 -0
  143. package/dist/storage/indexeddb.d.ts +68 -0
  144. package/dist/storage/indexeddb.d.ts.map +1 -0
  145. package/dist/storage/indexeddb.js +881 -0
  146. package/dist/storage/indexeddb.js.map +1 -0
  147. package/dist/storage/jsonl/storage.d.ts +30 -2
  148. package/dist/storage/jsonl/storage.d.ts.map +1 -1
  149. package/dist/storage/jsonl/storage.js +88 -24
  150. package/dist/storage/jsonl/storage.js.map +1 -1
  151. package/dist/storage/memory.d.ts +7 -2
  152. package/dist/storage/memory.d.ts.map +1 -1
  153. package/dist/storage/memory.js +29 -3
  154. package/dist/storage/memory.js.map +1 -1
  155. package/dist/storage/sqlite/cloudflare.d.ts +2 -51
  156. package/dist/storage/sqlite/cloudflare.d.ts.map +1 -1
  157. package/dist/storage/sqlite/cloudflare.js +2 -133
  158. package/dist/storage/sqlite/cloudflare.js.map +1 -1
  159. package/dist/storage/sqlite/database.d.ts +1 -36
  160. package/dist/storage/sqlite/database.d.ts.map +1 -1
  161. package/dist/storage/sqlite/database.js.map +1 -1
  162. package/dist/storage/sqlite/index.d.ts +1 -1
  163. package/dist/storage/sqlite/index.d.ts.map +1 -1
  164. package/dist/storage/sqlite/index.js.map +1 -1
  165. package/dist/storage/sqlite/migrations.d.ts +2 -5
  166. package/dist/storage/sqlite/migrations.d.ts.map +1 -1
  167. package/dist/storage/sqlite/migrations.js +28 -28
  168. package/dist/storage/sqlite/migrations.js.map +1 -1
  169. package/dist/storage/sqlite/node.d.ts +2 -37
  170. package/dist/storage/sqlite/node.d.ts.map +1 -1
  171. package/dist/storage/sqlite/node.js +3 -174
  172. package/dist/storage/sqlite/node.js.map +1 -1
  173. package/dist/storage/sqlite/schema.d.ts +1 -3
  174. package/dist/storage/sqlite/schema.d.ts.map +1 -1
  175. package/dist/storage/sqlite/schema.js +2 -9
  176. package/dist/storage/sqlite/schema.js.map +1 -1
  177. package/dist/storage/sqlite/storage.d.ts +15 -3
  178. package/dist/storage/sqlite/storage.d.ts.map +1 -1
  179. package/dist/storage/sqlite/storage.js +110 -36
  180. package/dist/storage/sqlite/storage.js.map +1 -1
  181. package/dist/storage/store/commit.d.ts +33 -0
  182. package/dist/storage/store/commit.d.ts.map +1 -0
  183. package/dist/storage/store/commit.js +286 -0
  184. package/dist/storage/store/commit.js.map +1 -0
  185. package/dist/storage/store/documents.d.ts +43 -0
  186. package/dist/storage/store/documents.d.ts.map +1 -0
  187. package/dist/storage/store/documents.js +102 -0
  188. package/dist/storage/store/documents.js.map +1 -0
  189. package/dist/storage/store/index.d.ts +2 -0
  190. package/dist/storage/store/index.d.ts.map +1 -0
  191. package/dist/storage/store/index.js +2 -0
  192. package/dist/storage/store/index.js.map +1 -0
  193. package/dist/storage/store/queries.d.ts +49 -0
  194. package/dist/storage/store/queries.d.ts.map +1 -0
  195. package/dist/storage/store/queries.js +93 -0
  196. package/dist/storage/store/queries.js.map +1 -0
  197. package/dist/storage/store/storage.d.ts +59 -0
  198. package/dist/storage/store/storage.d.ts.map +1 -0
  199. package/dist/storage/store/storage.js +438 -0
  200. package/dist/storage/store/storage.js.map +1 -0
  201. package/dist/storage/store/tables.d.ts +54 -0
  202. package/dist/storage/store/tables.d.ts.map +1 -0
  203. package/dist/storage/store/tables.js +108 -0
  204. package/dist/storage/store/tables.js.map +1 -0
  205. package/dist/testing/commit-writes.d.ts +5 -0
  206. package/dist/testing/commit-writes.d.ts.map +1 -0
  207. package/dist/testing/commit-writes.js +12 -0
  208. package/dist/testing/commit-writes.js.map +1 -0
  209. package/dist/testing/env-conformance.js +7 -7
  210. package/dist/testing/env-conformance.js.map +1 -1
  211. package/dist/testing/index.d.ts +1 -0
  212. package/dist/testing/index.d.ts.map +1 -1
  213. package/dist/testing/index.js +1 -0
  214. package/dist/testing/index.js.map +1 -1
  215. package/dist/testing/storage-benchmark.d.ts.map +1 -1
  216. package/dist/testing/storage-benchmark.js +18 -17
  217. package/dist/testing/storage-benchmark.js.map +1 -1
  218. package/dist/testing/storage-conformance.d.ts.map +1 -1
  219. package/dist/testing/storage-conformance.js +369 -67
  220. package/dist/testing/storage-conformance.js.map +1 -1
  221. package/dist/timers.d.ts +21 -0
  222. package/dist/timers.d.ts.map +1 -0
  223. package/dist/timers.js +72 -0
  224. package/dist/timers.js.map +1 -0
  225. package/dist/tool-search/tool-search.d.ts +6 -12
  226. package/dist/tool-search/tool-search.d.ts.map +1 -1
  227. package/dist/tool-search/tool-search.js +7 -7
  228. package/dist/tool-search/tool-search.js.map +1 -1
  229. package/dist/tools/bash.d.ts +12 -12
  230. package/dist/tools/bash.d.ts.map +1 -1
  231. package/dist/tools/bash.js +16 -15
  232. package/dist/tools/bash.js.map +1 -1
  233. package/dist/tools/edit.d.ts +7 -7
  234. package/dist/tools/edit.d.ts.map +1 -1
  235. package/dist/tools/edit.js +9 -9
  236. package/dist/tools/edit.js.map +1 -1
  237. package/dist/tools/index.d.ts +32 -32
  238. package/dist/tools/read.d.ts +6 -6
  239. package/dist/tools/read.d.ts.map +1 -1
  240. package/dist/tools/read.js +19 -8
  241. package/dist/tools/read.js.map +1 -1
  242. package/dist/tools/write.d.ts +4 -4
  243. package/dist/tools/write.d.ts.map +1 -1
  244. package/dist/tools/write.js +5 -5
  245. package/dist/tools/write.js.map +1 -1
  246. package/dist/types.d.ts +331 -64
  247. package/dist/types.d.ts.map +1 -1
  248. package/dist/types.js.map +1 -1
  249. package/package.json +27 -10
  250. package/dist/harness/events.d.ts +0 -186
  251. package/dist/harness/events.d.ts.map +0 -1
  252. package/dist/harness/events.js +0 -373
  253. package/dist/harness/events.js.map +0 -1
  254. package/dist/session/observation.d.ts +0 -42
  255. package/dist/session/observation.d.ts.map +0 -1
  256. package/dist/session/observation.js +0 -281
  257. package/dist/session/observation.js.map +0 -1
@@ -0,0 +1,136 @@
1
+ import { defineTelemetrySchema } from "@earendil-works/pi-telemetry";
2
+ const entry = {
3
+ description: "A transcript entry was committed; content remains in the transcript.",
4
+ attributes: {
5
+ "entry.id": { type: "number", required: true, description: "Transcript entry ID.", cardinality: "high" },
6
+ "entry.kind": { type: "string", required: true, description: "Entry kind." },
7
+ },
8
+ };
9
+ const reportAttributes = {
10
+ type: {
11
+ type: "string",
12
+ required: true,
13
+ description: "Report kind (`Report.kind`).",
14
+ values: [
15
+ "storage_failed",
16
+ "task_faulted",
17
+ "task_interrupted",
18
+ "migration_failed",
19
+ "task_outdated",
20
+ "task_error",
21
+ "extension_error",
22
+ "host_error",
23
+ "listener_error",
24
+ ],
25
+ },
26
+ reason: {
27
+ type: "string",
28
+ required: false,
29
+ description: "Fixed report reason, when present.",
30
+ values: ["threw", "restart_limit", "interrupted", "missing_task", "task_too_old", "migration_failed"],
31
+ },
32
+ extension: { type: "string", required: false, description: "Registered extension name, when present." },
33
+ "task.id": { type: "number", required: false, description: "Task ID, when present.", cardinality: "high" },
34
+ };
35
+ const report = {
36
+ description: "A report was raised; no error payload is recorded.",
37
+ attributes: reportAttributes,
38
+ };
39
+ const submission = {
40
+ description: "A submission was settled.",
41
+ attributes: {
42
+ "submission.id": { type: "number", required: true, description: "Submission ID.", cardinality: "high" },
43
+ status: { type: "string", required: true, values: ["done", "unanswered"], description: "Settlement." },
44
+ "answer.entry_id": { type: "number", required: false, description: "Answer entry ID.", cardinality: "high" },
45
+ },
46
+ };
47
+ /** Durable's content-free span, event, and metric vocabulary. IDs address durable records, never content. */
48
+ export const DURABLE_TELEMETRY_SCHEMA = defineTelemetrySchema({
49
+ version: 1,
50
+ spans: {
51
+ "pi.durable.submit": {
52
+ description: "Public submission admission: with its commit for submit(draft, context); the admission only for submit(tx, draft), whose result is provisional (a later throw or storage failure of the caller's commit leaves no submission) and whose commit events go to the caller's commit context. Inputs and continues start root traces linked to their callers; writes are children. Internal admissions emit phase events only.",
53
+ parents: { kind: "any" },
54
+ startAttributes: {
55
+ "submission.type": {
56
+ type: "string",
57
+ required: true,
58
+ values: ["input", "write", "continue"],
59
+ description: "Submission type.",
60
+ },
61
+ "conversation.id": { type: "number", required: true, description: "Conversation ID.", cardinality: "high" },
62
+ },
63
+ endAttributes: {
64
+ "submission.id": { type: "number", description: "Admitted submission ID.", cardinality: "high" },
65
+ result: {
66
+ type: "string",
67
+ values: ["queued", "placed", "done"],
68
+ description: "Admission result; stale writes report done.",
69
+ },
70
+ },
71
+ events: { "pi.durable.entry": entry, "pi.durable.submission": submission, "pi.durable.report": report },
72
+ status: { default: "ok", errorWhen: "Admission failed." },
73
+ },
74
+ "pi.durable.phase": {
75
+ description: "One task phase invocation, including its decision commit, never a wait or restart.",
76
+ parents: { kind: "any" },
77
+ startAttributes: {
78
+ "task.id": { type: "number", required: true, description: "Task ID.", cardinality: "high" },
79
+ "task.name": { type: "string", required: true, description: "Registered task name." },
80
+ phase: { type: "string", required: true, description: "Invoked checkpoint phase." },
81
+ kind: { type: "string", required: true, values: ["run", "abort"], description: "Invocation kind." },
82
+ attempt: { type: "number", required: false, description: "Checkpoint attempt, when present." },
83
+ resumed: {
84
+ type: "boolean",
85
+ required: true,
86
+ description: "First invocation of a task loaded in this process.",
87
+ },
88
+ },
89
+ endAttributes: {
90
+ outcome: { type: "string", description: "next=<phase>, waiting, sleeping, done, faulted, or aborted." },
91
+ "tool.name": { type: "string", description: "Called tool name." },
92
+ "tool.call_id": { type: "string", description: "Transcript tool call ID.", cardinality: "high" },
93
+ },
94
+ events: {
95
+ "pi.durable.entry": entry,
96
+ "pi.durable.submission": submission,
97
+ "pi.durable.report": report,
98
+ "pi.durable.checkpoint": {
99
+ description: "The running checkpoint's phase changed while the invocation continued.",
100
+ attributes: { phase: { type: "string", required: true, description: "Committed checkpoint phase." } },
101
+ },
102
+ "pi.durable.replay": {
103
+ description: "A nested tool call was answered from its stored result.",
104
+ attributes: { "tool.name": { type: "string", required: true, description: "Called tool name." } },
105
+ },
106
+ },
107
+ status: {
108
+ default: "ok",
109
+ errorWhen: "Faulted, failed, and orphaned outcomes use task_faulted, task_failed, and task_orphaned with a diagnostic capped at 500 characters. Aborted outcomes keep status ok.",
110
+ },
111
+ },
112
+ },
113
+ metrics: {
114
+ "pi.durable.reports": {
115
+ kind: "counter",
116
+ description: "Reports raised, grouped by their fixed kind.",
117
+ attributes: { type: reportAttributes.type },
118
+ },
119
+ "pi.durable.phase.duration": {
120
+ kind: "histogram",
121
+ unit: "ms",
122
+ description: "Duration of a phase invocation and its decision commit.",
123
+ attributes: {
124
+ task: { type: "string", required: true, description: "Registered task name." },
125
+ phase: { type: "string", required: true, description: "Invoked checkpoint phase." },
126
+ outcome: { type: "string", required: true, description: "Phase outcome." },
127
+ },
128
+ },
129
+ "pi.durable.tasks.active": {
130
+ kind: "upDownCounter",
131
+ description: "Live tasks held by this Harness; decremented at terminal settlement or close.",
132
+ attributes: { task: { type: "string", required: true, description: "Registered task name." } },
133
+ },
134
+ },
135
+ });
136
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/harness/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineTelemetrySchema } from \"@earendil-works/pi-telemetry\";\n\nconst entry = {\n\tdescription: \"A transcript entry was committed; content remains in the transcript.\",\n\tattributes: {\n\t\t\"entry.id\": { type: \"number\", required: true, description: \"Transcript entry ID.\", cardinality: \"high\" },\n\t\t\"entry.kind\": { type: \"string\", required: true, description: \"Entry kind.\" },\n\t},\n} as const;\nconst reportAttributes = {\n\ttype: {\n\t\ttype: \"string\",\n\t\trequired: true,\n\t\tdescription: \"Report kind (`Report.kind`).\",\n\t\tvalues: [\n\t\t\t\"storage_failed\",\n\t\t\t\"task_faulted\",\n\t\t\t\"task_interrupted\",\n\t\t\t\"migration_failed\",\n\t\t\t\"task_outdated\",\n\t\t\t\"task_error\",\n\t\t\t\"extension_error\",\n\t\t\t\"host_error\",\n\t\t\t\"listener_error\",\n\t\t],\n\t},\n\treason: {\n\t\ttype: \"string\",\n\t\trequired: false,\n\t\tdescription: \"Fixed report reason, when present.\",\n\t\tvalues: [\"threw\", \"restart_limit\", \"interrupted\", \"missing_task\", \"task_too_old\", \"migration_failed\"],\n\t},\n\textension: { type: \"string\", required: false, description: \"Registered extension name, when present.\" },\n\t\"task.id\": { type: \"number\", required: false, description: \"Task ID, when present.\", cardinality: \"high\" },\n} as const;\nconst report = {\n\tdescription: \"A report was raised; no error payload is recorded.\",\n\tattributes: reportAttributes,\n} as const;\nconst submission = {\n\tdescription: \"A submission was settled.\",\n\tattributes: {\n\t\t\"submission.id\": { type: \"number\", required: true, description: \"Submission ID.\", cardinality: \"high\" },\n\t\tstatus: { type: \"string\", required: true, values: [\"done\", \"unanswered\"], description: \"Settlement.\" },\n\t\t\"answer.entry_id\": { type: \"number\", required: false, description: \"Answer entry ID.\", cardinality: \"high\" },\n\t},\n} as const;\n\n/** Durable's content-free span, event, and metric vocabulary. IDs address durable records, never content. */\nexport const DURABLE_TELEMETRY_SCHEMA = defineTelemetrySchema({\n\tversion: 1,\n\tspans: {\n\t\t\"pi.durable.submit\": {\n\t\t\tdescription:\n\t\t\t\t\"Public submission admission: with its commit for submit(draft, context); the admission only for submit(tx, draft), whose result is provisional (a later throw or storage failure of the caller's commit leaves no submission) and whose commit events go to the caller's commit context. Inputs and continues start root traces linked to their callers; writes are children. Internal admissions emit phase events only.\",\n\t\t\tparents: { kind: \"any\" },\n\t\t\tstartAttributes: {\n\t\t\t\t\"submission.type\": {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: true,\n\t\t\t\t\tvalues: [\"input\", \"write\", \"continue\"],\n\t\t\t\t\tdescription: \"Submission type.\",\n\t\t\t\t},\n\t\t\t\t\"conversation.id\": { type: \"number\", required: true, description: \"Conversation ID.\", cardinality: \"high\" },\n\t\t\t},\n\t\t\tendAttributes: {\n\t\t\t\t\"submission.id\": { type: \"number\", description: \"Admitted submission ID.\", cardinality: \"high\" },\n\t\t\t\tresult: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalues: [\"queued\", \"placed\", \"done\"],\n\t\t\t\t\tdescription: \"Admission result; stale writes report done.\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tevents: { \"pi.durable.entry\": entry, \"pi.durable.submission\": submission, \"pi.durable.report\": report },\n\t\t\tstatus: { default: \"ok\", errorWhen: \"Admission failed.\" },\n\t\t},\n\t\t\"pi.durable.phase\": {\n\t\t\tdescription: \"One task phase invocation, including its decision commit, never a wait or restart.\",\n\t\t\tparents: { kind: \"any\" },\n\t\t\tstartAttributes: {\n\t\t\t\t\"task.id\": { type: \"number\", required: true, description: \"Task ID.\", cardinality: \"high\" },\n\t\t\t\t\"task.name\": { type: \"string\", required: true, description: \"Registered task name.\" },\n\t\t\t\tphase: { type: \"string\", required: true, description: \"Invoked checkpoint phase.\" },\n\t\t\t\tkind: { type: \"string\", required: true, values: [\"run\", \"abort\"], description: \"Invocation kind.\" },\n\t\t\t\tattempt: { type: \"number\", required: false, description: \"Checkpoint attempt, when present.\" },\n\t\t\t\tresumed: {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\trequired: true,\n\t\t\t\t\tdescription: \"First invocation of a task loaded in this process.\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tendAttributes: {\n\t\t\t\toutcome: { type: \"string\", description: \"next=<phase>, waiting, sleeping, done, faulted, or aborted.\" },\n\t\t\t\t\"tool.name\": { type: \"string\", description: \"Called tool name.\" },\n\t\t\t\t\"tool.call_id\": { type: \"string\", description: \"Transcript tool call ID.\", cardinality: \"high\" },\n\t\t\t},\n\t\t\tevents: {\n\t\t\t\t\"pi.durable.entry\": entry,\n\t\t\t\t\"pi.durable.submission\": submission,\n\t\t\t\t\"pi.durable.report\": report,\n\t\t\t\t\"pi.durable.checkpoint\": {\n\t\t\t\t\tdescription: \"The running checkpoint's phase changed while the invocation continued.\",\n\t\t\t\t\tattributes: { phase: { type: \"string\", required: true, description: \"Committed checkpoint phase.\" } },\n\t\t\t\t},\n\t\t\t\t\"pi.durable.replay\": {\n\t\t\t\t\tdescription: \"A nested tool call was answered from its stored result.\",\n\t\t\t\t\tattributes: { \"tool.name\": { type: \"string\", required: true, description: \"Called tool name.\" } },\n\t\t\t\t},\n\t\t\t},\n\t\t\tstatus: {\n\t\t\t\tdefault: \"ok\",\n\t\t\t\terrorWhen:\n\t\t\t\t\t\"Faulted, failed, and orphaned outcomes use task_faulted, task_failed, and task_orphaned with a diagnostic capped at 500 characters. Aborted outcomes keep status ok.\",\n\t\t\t},\n\t\t},\n\t},\n\tmetrics: {\n\t\t\"pi.durable.reports\": {\n\t\t\tkind: \"counter\",\n\t\t\tdescription: \"Reports raised, grouped by their fixed kind.\",\n\t\t\tattributes: { type: reportAttributes.type },\n\t\t},\n\t\t\"pi.durable.phase.duration\": {\n\t\t\tkind: \"histogram\",\n\t\t\tunit: \"ms\",\n\t\t\tdescription: \"Duration of a phase invocation and its decision commit.\",\n\t\t\tattributes: {\n\t\t\t\ttask: { type: \"string\", required: true, description: \"Registered task name.\" },\n\t\t\t\tphase: { type: \"string\", required: true, description: \"Invoked checkpoint phase.\" },\n\t\t\t\toutcome: { type: \"string\", required: true, description: \"Phase outcome.\" },\n\t\t\t},\n\t\t},\n\t\t\"pi.durable.tasks.active\": {\n\t\t\tkind: \"upDownCounter\",\n\t\t\tdescription: \"Live tasks held by this Harness; decremented at terminal settlement or close.\",\n\t\t\tattributes: { task: { type: \"string\", required: true, description: \"Registered task name.\" } },\n\t\t},\n\t},\n});\n"]}
@@ -10,6 +10,8 @@ export type ToolTaskInput = {
10
10
  kind: "model";
11
11
  assistant: EntryId;
12
12
  callId: string;
13
+ /** A call to a tool its request did not offer: settles `tool_unavailable` without resolving the name. */
14
+ unoffered?: true;
13
15
  } | {
14
16
  kind: "nested";
15
17
  parent: TaskId;
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/harness/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,kBAAkB,EAAkB,MAAM,uBAAuB,CAAC;AAUpH,OAAO,KAAK,EAA6B,QAAQ,EAAqB,MAAM,uBAAuB,CAAC;AAQpG,OAAO,KAAK,EACX,cAAc,EACd,OAAO,EACP,UAAU,EACV,IAAI,EACJ,MAAM,EAIN,EAAE,EACF,UAAU,EACV,MAAM,aAAa,CAAC;AAYrB,OAAO,KAAK,EACX,yBAAyB,EACzB,WAAW,EACX,cAAc,EAEd,mBAAmB,EAEnB,SAAS,EAET,MAAM,YAAY,CAAC;AAGpB;;;GAGG;AACH,MAAM,MAAM,aAAa,GACtB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,QAAQ,CAAC;IACf,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,KAAK,CAAC;CAChB,CAAC;AAEL,MAAM,MAAM,kBAAkB,GAC3B;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE;AACnB,2FAA2F;GACzF;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAQ7G,kFAAkF;AAClF,MAAM,MAAM,eAAe,GAAG;IAC7B,mGAAmG;IACnG,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAChC,oHAAoH;IACpH,MAAM,CAAC,EAAE,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;CACvD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,iEAMxB,CAAC;AAKH;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,oEAuFnB,CAAC;AAukBH,oGAAoG;AACpG,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAE/E;AAwCD;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,EAAE,EAAE,EAAE,EACN,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,OAAO,CAAC,UAAU,CAAC;IAAE,WAAW,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC,CAAC,CAkBxD"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/harness/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,kBAAkB,EAAkB,MAAM,uBAAuB,CAAC;AAWpH,OAAO,KAAK,EAA6B,QAAQ,EAAqB,MAAM,uBAAuB,CAAC;AAUpG,OAAO,KAAK,EACX,cAAc,EACd,OAAO,EACP,UAAU,EACV,IAAI,EACJ,MAAM,EAIN,EAAE,EACF,UAAU,EACV,MAAM,aAAa,CAAC;AAiBrB,OAAO,KAAK,EACX,yBAAyB,EACzB,WAAW,EACX,cAAc,EAEd,mBAAmB,EAEnB,SAAS,EAET,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,MAAM,MAAM,aAAa,GACtB;IACA,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,yGAAyG;IACzG,SAAS,CAAC,EAAE,IAAI,CAAC;CAChB,GACD;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,QAAQ,CAAC;IACf,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,KAAK,CAAC;CAChB,CAAC;AAEL,MAAM,MAAM,kBAAkB,GAC3B;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE;AACnB,2FAA2F;GACzF;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAQ7G,kFAAkF;AAClF,MAAM,MAAM,eAAe,GAAG;IAC7B,mGAAmG;IACnG,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAChC,oHAAoH;IACpH,MAAM,CAAC,EAAE,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;CACvD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,iEAQxB,CAAC;AAKH;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,oEAgHnB,CAAC;AAqwBH,oGAAoG;AACpG,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAE/E;AA2CD;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,EAAE,EAAE,EAAE,EACN,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,OAAO,CAAC,UAAU,CAAC;IAAE,WAAW,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC,CAAC,CAkBxD"}