zeitlich 0.2.38 → 0.2.40

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 (125) hide show
  1. package/README.md +18 -0
  2. package/dist/{activities-BKhMtKDd.d.ts → activities-CULxRzJ1.d.ts} +4 -6
  3. package/dist/{activities-CDcwkRZs.d.cts → activities-CvUrG3YG.d.cts} +4 -6
  4. package/dist/adapter-id-BB-mmrts.d.cts +17 -0
  5. package/dist/adapter-id-BB-mmrts.d.ts +17 -0
  6. package/dist/adapter-id-CMwVrVqv.d.cts +17 -0
  7. package/dist/adapter-id-CMwVrVqv.d.ts +17 -0
  8. package/dist/adapter-id-CbY2zeSt.d.cts +17 -0
  9. package/dist/adapter-id-CbY2zeSt.d.ts +17 -0
  10. package/dist/adapters/thread/anthropic/index.cjs +140 -23
  11. package/dist/adapters/thread/anthropic/index.cjs.map +1 -1
  12. package/dist/adapters/thread/anthropic/index.d.cts +8 -7
  13. package/dist/adapters/thread/anthropic/index.d.ts +8 -7
  14. package/dist/adapters/thread/anthropic/index.js +140 -24
  15. package/dist/adapters/thread/anthropic/index.js.map +1 -1
  16. package/dist/adapters/thread/anthropic/workflow.cjs +8 -3
  17. package/dist/adapters/thread/anthropic/workflow.cjs.map +1 -1
  18. package/dist/adapters/thread/anthropic/workflow.d.cts +5 -4
  19. package/dist/adapters/thread/anthropic/workflow.d.ts +5 -4
  20. package/dist/adapters/thread/anthropic/workflow.js +8 -4
  21. package/dist/adapters/thread/anthropic/workflow.js.map +1 -1
  22. package/dist/adapters/thread/google-genai/index.cjs +140 -23
  23. package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
  24. package/dist/adapters/thread/google-genai/index.d.cts +5 -4
  25. package/dist/adapters/thread/google-genai/index.d.ts +5 -4
  26. package/dist/adapters/thread/google-genai/index.js +140 -24
  27. package/dist/adapters/thread/google-genai/index.js.map +1 -1
  28. package/dist/adapters/thread/google-genai/workflow.cjs +8 -3
  29. package/dist/adapters/thread/google-genai/workflow.cjs.map +1 -1
  30. package/dist/adapters/thread/google-genai/workflow.d.cts +5 -4
  31. package/dist/adapters/thread/google-genai/workflow.d.ts +5 -4
  32. package/dist/adapters/thread/google-genai/workflow.js +8 -4
  33. package/dist/adapters/thread/google-genai/workflow.js.map +1 -1
  34. package/dist/adapters/thread/index.cjs +16 -0
  35. package/dist/adapters/thread/index.cjs.map +1 -0
  36. package/dist/adapters/thread/index.d.cts +34 -0
  37. package/dist/adapters/thread/index.d.ts +34 -0
  38. package/dist/adapters/thread/index.js +12 -0
  39. package/dist/adapters/thread/index.js.map +1 -0
  40. package/dist/adapters/thread/langchain/index.cjs +139 -24
  41. package/dist/adapters/thread/langchain/index.cjs.map +1 -1
  42. package/dist/adapters/thread/langchain/index.d.cts +8 -7
  43. package/dist/adapters/thread/langchain/index.d.ts +8 -7
  44. package/dist/adapters/thread/langchain/index.js +139 -25
  45. package/dist/adapters/thread/langchain/index.js.map +1 -1
  46. package/dist/adapters/thread/langchain/workflow.cjs +8 -3
  47. package/dist/adapters/thread/langchain/workflow.cjs.map +1 -1
  48. package/dist/adapters/thread/langchain/workflow.d.cts +5 -4
  49. package/dist/adapters/thread/langchain/workflow.d.ts +5 -4
  50. package/dist/adapters/thread/langchain/workflow.js +8 -4
  51. package/dist/adapters/thread/langchain/workflow.js.map +1 -1
  52. package/dist/index.cjs +267 -48
  53. package/dist/index.cjs.map +1 -1
  54. package/dist/index.d.cts +6 -6
  55. package/dist/index.d.ts +6 -6
  56. package/dist/index.js +264 -49
  57. package/dist/index.js.map +1 -1
  58. package/dist/{proxy-D_3x7RN4.d.cts → proxy-5EbwzaY4.d.cts} +1 -1
  59. package/dist/{proxy-CUlKSvZS.d.ts → proxy-wZufFfBh.d.ts} +1 -1
  60. package/dist/{thread-manager-CVu7o2cs.d.ts → thread-manager-BNiIt5r8.d.ts} +2 -4
  61. package/dist/{thread-manager-c1gPopAG.d.ts → thread-manager-BoN5DOvG.d.cts} +2 -4
  62. package/dist/{thread-manager-wGi-LqIP.d.cts → thread-manager-BqBAIsED.d.ts} +2 -4
  63. package/dist/{thread-manager-HSwyh28L.d.cts → thread-manager-DF8WuCRs.d.cts} +2 -4
  64. package/dist/{types-BH_IRryz.d.ts → types-C7OoY7h8.d.ts} +54 -6
  65. package/dist/{types-C06FwR96.d.cts → types-Cn2r3ol3.d.cts} +163 -44
  66. package/dist/{types-BaOw4hKI.d.cts → types-CuISs0Ub.d.cts} +54 -6
  67. package/dist/{types-DNr31FzL.d.ts → types-DeQH84C_.d.ts} +163 -44
  68. package/dist/{workflow-CSCkpwAL.d.ts → workflow-C2MZZj5K.d.ts} +82 -2
  69. package/dist/{workflow-DuvMZ8Vm.d.cts → workflow-DhplIN65.d.cts} +82 -2
  70. package/dist/workflow.cjs +189 -37
  71. package/dist/workflow.cjs.map +1 -1
  72. package/dist/workflow.d.cts +2 -2
  73. package/dist/workflow.d.ts +2 -2
  74. package/dist/workflow.js +186 -38
  75. package/dist/workflow.js.map +1 -1
  76. package/package.json +11 -1
  77. package/src/adapters/thread/adapter-id.test.ts +42 -0
  78. package/src/adapters/thread/anthropic/activities.ts +33 -7
  79. package/src/adapters/thread/anthropic/adapter-id.ts +16 -0
  80. package/src/adapters/thread/anthropic/fork-transform.test.ts +291 -0
  81. package/src/adapters/thread/anthropic/index.ts +3 -0
  82. package/src/adapters/thread/anthropic/model-invoker.ts +8 -4
  83. package/src/adapters/thread/anthropic/proxy.ts +3 -2
  84. package/src/adapters/thread/anthropic/thread-manager.ts +27 -4
  85. package/src/adapters/thread/google-genai/activities.ts +33 -7
  86. package/src/adapters/thread/google-genai/adapter-id.ts +16 -0
  87. package/src/adapters/thread/google-genai/fork-transform.test.ts +149 -0
  88. package/src/adapters/thread/google-genai/index.ts +3 -0
  89. package/src/adapters/thread/google-genai/model-invoker.ts +7 -3
  90. package/src/adapters/thread/google-genai/proxy.ts +3 -2
  91. package/src/adapters/thread/google-genai/thread-manager.ts +27 -4
  92. package/src/adapters/thread/index.ts +39 -0
  93. package/src/adapters/thread/langchain/activities.ts +33 -7
  94. package/src/adapters/thread/langchain/adapter-id.ts +16 -0
  95. package/src/adapters/thread/langchain/fork-transform.test.ts +142 -0
  96. package/src/adapters/thread/langchain/index.ts +3 -0
  97. package/src/adapters/thread/langchain/model-invoker.ts +8 -3
  98. package/src/adapters/thread/langchain/proxy.ts +3 -2
  99. package/src/adapters/thread/langchain/thread-manager.ts +27 -4
  100. package/src/lib/lifecycle.ts +3 -1
  101. package/src/lib/model/types.ts +7 -10
  102. package/src/lib/session/session-edge-cases.integration.test.ts +131 -63
  103. package/src/lib/session/session.integration.test.ts +174 -5
  104. package/src/lib/session/session.ts +69 -28
  105. package/src/lib/session/types.ts +61 -9
  106. package/src/lib/state/index.ts +1 -0
  107. package/src/lib/state/manager.integration.test.ts +109 -0
  108. package/src/lib/state/manager.ts +38 -8
  109. package/src/lib/state/types.ts +25 -0
  110. package/src/lib/subagent/handler.ts +124 -11
  111. package/src/lib/subagent/index.ts +5 -1
  112. package/src/lib/subagent/subagent.integration.test.ts +528 -0
  113. package/src/lib/subagent/types.ts +63 -14
  114. package/src/lib/subagent/workflow.ts +29 -2
  115. package/src/lib/thread/index.ts +5 -0
  116. package/src/lib/thread/keys.test.ts +101 -0
  117. package/src/lib/thread/keys.ts +94 -0
  118. package/src/lib/thread/manager.test.ts +139 -0
  119. package/src/lib/thread/manager.ts +92 -14
  120. package/src/lib/thread/proxy.ts +2 -0
  121. package/src/lib/thread/types.ts +60 -6
  122. package/src/lib/tool-router/types.ts +16 -8
  123. package/src/lib/types.ts +12 -0
  124. package/src/workflow.ts +12 -1
  125. package/tsup.config.ts +1 -0
@@ -2,6 +2,7 @@ import type { TokenUsage, ToolResultConfig } from "../types";
2
2
  import type { JsonValue } from "../state/types";
3
3
  import type { z } from "zod";
4
4
  import type { ActivityFunctionWithOptions } from "@temporalio/workflow";
5
+ import type { SandboxSnapshot } from "../sandbox/types";
5
6
 
6
7
  // ============================================================================
7
8
  // Tool Definition Types
@@ -140,14 +141,16 @@ export interface ToolHandlerResponse<
140
141
  */
141
142
  resultAppended?: boolean;
142
143
  /**
143
- * When true, the session will rewind: any in-flight parallel tool calls
144
- * are cancelled, previously appended tool results and the triggering
145
- * assistant message are removed from the thread, and the LLM call that
146
- * produced the tool calls is retried.
144
+ * When true, the session will rewind: any in-flight parallel tool
145
+ * calls are cancelled and the LLM call is retried. The session reuses
146
+ * the same `assistantMessageId` for the retry; the next `runAgent`
147
+ * activity truncates the thread from that id on entry, wiping the
148
+ * triggering assistant message and any tool results already appended
149
+ * before re-invoking the LLM.
147
150
  *
148
151
  * The `toolResponse` for a rewinding tool call is ignored (never
149
- * appended) since the session truncates the thread back to the
150
- * pre-invocation state.
152
+ * appended) since the thread is rewound back to the pre-assistant
153
+ * state on the next invocation.
151
154
  */
152
155
  rewind?: boolean;
153
156
  /** Token usage from the tool execution (e.g. child agent invocations) */
@@ -156,6 +159,10 @@ export interface ToolHandlerResponse<
156
159
  threadId?: string;
157
160
  /** Sandbox ID created or used by the handler (e.g. child agent sandbox) */
158
161
  sandboxId?: string;
162
+ /** Snapshot captured on exit when `sandboxShutdown === "snapshot"`. */
163
+ snapshot?: SandboxSnapshot;
164
+ /** Snapshot captured immediately after sandbox seeding (before the agent loop starts) when `sandbox.mode === "new"` and `sandboxShutdown === "snapshot"`. Intended as a reusable "base" for new threads that want to skip re-seeding. */
165
+ baseSnapshot?: SandboxSnapshot;
159
166
  /** Unvalidated metadata passthrough from handler to hooks (e.g. infrastructure state) */
160
167
  metadata?: Record<string, unknown>;
161
168
  }
@@ -291,8 +298,9 @@ export interface ProcessToolCallsContext {
291
298
 
292
299
  /**
293
300
  * Signal that a tool handler requested a rewind. Attached to the
294
- * {@link ProcessToolCallsResult} so the session can roll the thread
295
- * back to the pre-invocation snapshot and retry the LLM call.
301
+ * {@link ProcessToolCallsResult} so the session can reuse the same
302
+ * `assistantMessageId` for the retry; the next `runAgent` activity
303
+ * then truncates the thread from that id on entry.
296
304
  */
297
305
  export interface RewindSignal {
298
306
  toolCallId: string;
package/src/lib/types.ts CHANGED
@@ -92,6 +92,18 @@ export interface RunAgentConfig extends AgentConfig {
92
92
  threadKey?: string;
93
93
  /** Metadata for the session */
94
94
  metadata?: Record<string, unknown>;
95
+ /**
96
+ * The id under which the assistant message produced by this call will
97
+ * be appended. The activity truncates the thread from this id on
98
+ * entry (no-op on the first attempt) so that:
99
+ *
100
+ * - Rewind retries can reuse the same id and the previous (bad)
101
+ * assistant + its tool results are wiped before the retry LLM call.
102
+ * - Resetting the Temporal workflow to this activity restores the
103
+ * pre-call thread state: replay re-truncates, re-invokes, and
104
+ * appends under the same id.
105
+ */
106
+ assistantMessageId: string;
95
107
  }
96
108
 
97
109
  /**
package/src/workflow.ts CHANGED
@@ -40,6 +40,11 @@ export type {
40
40
 
41
41
  // Thread utilities
42
42
  export { getShortId } from "./lib/thread/id";
43
+ export {
44
+ THREAD_TTL_SECONDS,
45
+ getThreadListKey,
46
+ getThreadMetaKey,
47
+ } from "./lib/thread/keys";
43
48
 
44
49
  // State management
45
50
  export { createAgentStateManager } from "./lib/state";
@@ -49,6 +54,7 @@ export type {
49
54
  JsonSerializable,
50
55
  JsonValue,
51
56
  JsonPrimitive,
57
+ PersistedThreadState,
52
58
  } from "./lib/state";
53
59
 
54
60
  // Tool router (includes registry functionality)
@@ -57,7 +63,11 @@ export {
57
63
  hasNoOtherToolCalls,
58
64
  defineTool,
59
65
  } from "./lib/tool-router";
60
- export { defineSubagent, defineSubagentWorkflow } from "./lib/subagent";
66
+ export {
67
+ defineSubagent,
68
+ defineSubagentWorkflow,
69
+ DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT,
70
+ } from "./lib/subagent";
61
71
  export type {
62
72
  // Tool definition types
63
73
  ToolDefinition,
@@ -153,6 +163,7 @@ export { proxyRunAgent } from "./lib/model/proxy";
153
163
  // Subagent types
154
164
  export type {
155
165
  SubagentConfig,
166
+ SubagentChildWorkflowOptions,
156
167
  SubagentDefinition,
157
168
  SubagentFnResult,
158
169
  SubagentHooks,
package/tsup.config.ts CHANGED
@@ -4,6 +4,7 @@ export default defineConfig({
4
4
  entry: {
5
5
  index: "src/index.ts",
6
6
  workflow: "src/workflow.ts",
7
+ "adapters/thread/index": "src/adapters/thread/index.ts",
7
8
  "adapters/thread/langchain/index": "src/adapters/thread/langchain/index.ts",
8
9
  "adapters/thread/langchain/workflow":
9
10
  "src/adapters/thread/langchain/proxy.ts",