@elevasis/sdk 1.44.3 → 1.45.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 (246) hide show
  1. package/dist/cli.cjs +991 -650
  2. package/dist/index.d.ts +1045 -509
  3. package/dist/index.js +738 -688
  4. package/dist/node/index.d.ts +105 -97
  5. package/dist/test-utils/index.d.ts +42 -28
  6. package/dist/test-utils/index.js +514 -783
  7. package/dist/worker/index.d.ts +12112 -0
  8. package/dist/worker/index.js +121 -182
  9. package/package.json +6 -9
  10. package/reference/_navigation.md +151 -21
  11. package/reference/_reference-manifest.json +186 -4
  12. package/reference/claude-config.md +8 -0
  13. package/reference/core/index.mdx +3 -3
  14. package/reference/examples/organization-model.ts +117 -111
  15. package/reference/index.mdx +4 -4
  16. package/reference/rules/active-change-index.md +40 -54
  17. package/reference/rules/agent-runtime.md +81 -0
  18. package/reference/rules/agent-start-here.md +71 -163
  19. package/reference/rules/deployment.md +33 -10
  20. package/reference/rules/error-handling.md +26 -0
  21. package/reference/rules/execution.md +13 -0
  22. package/reference/rules/frontend.md +10 -3
  23. package/reference/rules/observability.md +9 -1
  24. package/reference/rules/operations.md +26 -17
  25. package/reference/rules/organization-model.md +74 -88
  26. package/reference/rules/organization-os.md +71 -88
  27. package/reference/rules/package-taxonomy.md +11 -2
  28. package/reference/rules/platform.md +13 -7
  29. package/reference/rules/shared-types.md +15 -0
  30. package/reference/rules/task-tracking.md +30 -5
  31. package/reference/rules/ui.md +145 -3
  32. package/reference/rules/vibe-intents.md +271 -0
  33. package/reference/rules/vibe.md +17 -243
  34. package/reference/scaffold/core/organization-graph.mdx +111 -97
  35. package/reference/scaffold/core/organization-model.mdx +234 -214
  36. package/reference/scaffold/operations/propagation-pipeline.md +1 -1
  37. package/reference/scaffold/operations/scaffold-maintenance.md +19 -18
  38. package/reference/scaffold/operations/workflow-recipes.md +71 -19
  39. package/reference/scaffold/recipes/add-a-feature.md +156 -146
  40. package/reference/scaffold/recipes/add-a-resource.md +123 -117
  41. package/reference/scaffold/recipes/customize-crm-actions.md +25 -10
  42. package/reference/scaffold/recipes/customize-knowledge-browser.md +52 -117
  43. package/reference/scaffold/recipes/customize-organization-model.md +161 -149
  44. package/reference/scaffold/recipes/extend-a-base-entity.md +156 -140
  45. package/reference/scaffold/recipes/extend-crm.md +16 -11
  46. package/reference/scaffold/recipes/extend-lead-gen.md +25 -7
  47. package/reference/scaffold/recipes/gate-by-feature-or-admin.md +160 -118
  48. package/reference/scaffold/recipes/index.md +2 -2
  49. package/reference/scaffold/recipes/query-the-knowledge-graph.md +23 -23
  50. package/reference/scaffold/reference/contracts.md +12 -1
  51. package/reference/scaffold/reference/glossary.md +3 -3
  52. package/reference/scaffold/reference/system-interface-capabilities.md +5 -4
  53. package/reference/scaffold/ui/composition-extensibility.mdx +271 -232
  54. package/reference/scaffold/ui/feature-flags-and-gating.md +14 -6
  55. package/reference/scaffold/ui/feature-shell.mdx +279 -62
  56. package/reference/scaffold/ui/recipes.md +229 -197
  57. package/reference/sdk/cli-management.mdx +77 -29
  58. package/reference/sdk/concepts.mdx +2 -0
  59. package/reference/sdk/define-builders.mdx +76 -0
  60. package/reference/sdk/deployment/command-center.mdx +6 -2
  61. package/reference/sdk/deployment/execution-reference.mdx +64 -186
  62. package/reference/sdk/deployment/index.mdx +2 -0
  63. package/reference/sdk/exports.mdx +4 -4
  64. package/reference/sdk/framework/agent.mdx +49 -119
  65. package/reference/sdk/framework/index.mdx +46 -65
  66. package/reference/sdk/framework/project-structure.mdx +150 -205
  67. package/reference/sdk/framework/tutorial-system.mdx +2 -2
  68. package/reference/sdk/human-in-the-loop.mdx +152 -0
  69. package/reference/sdk/index.mdx +6 -7
  70. package/reference/sdk/platform-tools/index.mdx +12 -0
  71. package/reference/sdk/platform-tools/type-safety.mdx +4 -0
  72. package/reference/sdk/project-deployment-spec.mdx +131 -0
  73. package/reference/sdk/resources/index.mdx +21 -7
  74. package/reference/sdk/resources/patterns.mdx +54 -24
  75. package/reference/sdk/resources/types.mdx +7 -4
  76. package/reference/sdk/templates/data-enrichment.mdx +7 -3
  77. package/reference/sdk/templates/email-sender.mdx +139 -135
  78. package/reference/sdk/templates/lead-scorer.mdx +5 -1
  79. package/reference/sdk/templates/pdf-generator.mdx +155 -151
  80. package/reference/sdk/templates/recurring-job.mdx +195 -189
  81. package/reference/sdk/templates/text-classifier.mdx +4 -0
  82. package/reference/sdk/templates/web-scraper.mdx +139 -135
  83. package/reference/spine/spine-primer.md +135 -96
  84. package/reference/ui/index.mdx +14 -7
  85. package/dist/types/worker/adapters/anymailfinder.d.ts +0 -14
  86. package/dist/types/worker/adapters/apify.d.ts +0 -14
  87. package/dist/types/worker/adapters/approval.d.ts +0 -23
  88. package/dist/types/worker/adapters/attio.d.ts +0 -22
  89. package/dist/types/worker/adapters/clickup.d.ts +0 -22
  90. package/dist/types/worker/adapters/create-adapter.d.ts +0 -41
  91. package/dist/types/worker/adapters/crm.d.ts +0 -20
  92. package/dist/types/worker/adapters/dropbox.d.ts +0 -14
  93. package/dist/types/worker/adapters/email.d.ts +0 -25
  94. package/dist/types/worker/adapters/execution.d.ts +0 -22
  95. package/dist/types/worker/adapters/gmail.d.ts +0 -14
  96. package/dist/types/worker/adapters/google-sheets.d.ts +0 -14
  97. package/dist/types/worker/adapters/index.d.ts +0 -33
  98. package/dist/types/worker/adapters/instantly.d.ts +0 -14
  99. package/dist/types/worker/adapters/lead.d.ts +0 -28
  100. package/dist/types/worker/adapters/list.d.ts +0 -9
  101. package/dist/types/worker/adapters/llm.d.ts +0 -45
  102. package/dist/types/worker/adapters/millionverifier.d.ts +0 -14
  103. package/dist/types/worker/adapters/notification.d.ts +0 -28
  104. package/dist/types/worker/adapters/pdf.d.ts +0 -22
  105. package/dist/types/worker/adapters/projects.d.ts +0 -20
  106. package/dist/types/worker/adapters/resend.d.ts +0 -14
  107. package/dist/types/worker/adapters/scheduler.d.ts +0 -25
  108. package/dist/types/worker/adapters/signature-api.d.ts +0 -14
  109. package/dist/types/worker/adapters/storage.d.ts +0 -33
  110. package/dist/types/worker/adapters/stripe.d.ts +0 -14
  111. package/dist/types/worker/adapters/tomba.d.ts +0 -14
  112. package/dist/types/worker/index.d.ts +0 -60
  113. package/dist/types/worker/platform.d.ts +0 -90
  114. package/dist/types/worker/utils.d.ts +0 -9
  115. package/reference/claude-config/Overview.md +0 -230
  116. package/reference/claude-config/hooks/post-edit-validate.mjs +0 -98
  117. package/reference/claude-config/hooks/scaffold-registry-reminder.mjs +0 -187
  118. package/reference/claude-config/hooks/tool-failure-recovery.mjs +0 -73
  119. package/reference/claude-config/registries/graph-skills.json +0 -4
  120. package/reference/claude-config/registries/knowledge-flags.json +0 -154
  121. package/reference/claude-config/registries/skill-coverage.json +0 -20
  122. package/reference/claude-config/rules/active-change-index.md +0 -22
  123. package/reference/claude-config/rules/agent-start-here.md +0 -22
  124. package/reference/claude-config/rules/deployment.md +0 -22
  125. package/reference/claude-config/rules/error-handling.md +0 -22
  126. package/reference/claude-config/rules/execution.md +0 -22
  127. package/reference/claude-config/rules/frontend.md +0 -22
  128. package/reference/claude-config/rules/observability.md +0 -22
  129. package/reference/claude-config/rules/operations.md +0 -22
  130. package/reference/claude-config/rules/organization-model.md +0 -22
  131. package/reference/claude-config/rules/organization-os.md +0 -22
  132. package/reference/claude-config/rules/package-taxonomy.md +0 -22
  133. package/reference/claude-config/rules/platform.md +0 -22
  134. package/reference/claude-config/rules/shared-types.md +0 -22
  135. package/reference/claude-config/rules/task-tracking.md +0 -22
  136. package/reference/claude-config/rules/topbar-actions.md +0 -70
  137. package/reference/claude-config/rules/ui.md +0 -22
  138. package/reference/claude-config/rules/vibe.md +0 -22
  139. package/reference/claude-config/scripts/statusline-command.js +0 -18
  140. package/reference/claude-config/settings.json +0 -30
  141. package/reference/claude-config/skills/client/SKILL.md +0 -201
  142. package/reference/claude-config/skills/deploy/SKILL.md +0 -159
  143. package/reference/claude-config/skills/dsp/SKILL.md +0 -66
  144. package/reference/claude-config/skills/elevasis/SKILL.md +0 -251
  145. package/reference/claude-config/skills/explore/SKILL.md +0 -78
  146. package/reference/claude-config/skills/git-sync/SKILL.md +0 -166
  147. package/reference/claude-config/skills/om/SKILL.md +0 -475
  148. package/reference/claude-config/skills/om/operations/build.md +0 -237
  149. package/reference/claude-config/skills/om/operations/codify-level-a.md +0 -109
  150. package/reference/claude-config/skills/om/operations/codify-level-b.md +0 -159
  151. package/reference/claude-config/skills/om/operations/customers.md +0 -114
  152. package/reference/claude-config/skills/om/operations/features.md +0 -88
  153. package/reference/claude-config/skills/om/operations/goals.md +0 -123
  154. package/reference/claude-config/skills/om/operations/identity.md +0 -97
  155. package/reference/claude-config/skills/om/operations/labels.md +0 -110
  156. package/reference/claude-config/skills/om/operations/offerings.md +0 -114
  157. package/reference/claude-config/skills/om/operations/roles.md +0 -104
  158. package/reference/claude-config/skills/om/operations/scaffold.md +0 -163
  159. package/reference/claude-config/skills/om/operations/techStack.md +0 -38
  160. package/reference/claude-config/skills/project/SKILL.md +0 -1114
  161. package/reference/claude-config/skills/run-ui/SKILL.md +0 -73
  162. package/reference/claude-config/skills/save/SKILL.md +0 -183
  163. package/reference/claude-config/skills/setup/SKILL.md +0 -290
  164. package/reference/claude-config/skills/status/SKILL.md +0 -59
  165. package/reference/claude-config/skills/submit-request/SKILL.md +0 -180
  166. package/reference/claude-config/skills/sync/SKILL.md +0 -47
  167. package/reference/claude-config/skills/tutorial/SKILL.md +0 -259
  168. package/reference/claude-config/skills/tutorial/progress-template.md +0 -74
  169. package/reference/claude-config/skills/tutorial/technical.md +0 -1303
  170. package/reference/claude-config/skills/tutorial/vibe-coder.md +0 -890
  171. package/reference/claude-config/sync-notes/2026-04-22-git-sync-and-sync-notes.md +0 -27
  172. package/reference/claude-config/sync-notes/2026-04-22-lead-gen-deliverability-removal.md +0 -30
  173. package/reference/claude-config/sync-notes/2026-04-24-test-utils-and-template-tests.md +0 -73
  174. package/reference/claude-config/sync-notes/2026-04-24-ui-consolidation-and-sdk-cli-train.md +0 -86
  175. package/reference/claude-config/sync-notes/2026-04-25-auth-role-system-and-settings-roles.md +0 -55
  176. package/reference/claude-config/sync-notes/2026-04-27-crm-hitl-action-layer-cutover.md +0 -97
  177. package/reference/claude-config/sync-notes/2026-04-27-lead-gen-substrate-train.md +0 -112
  178. package/reference/claude-config/sync-notes/2026-04-29-crm-state-and-lead-gen-processing-status.md +0 -93
  179. package/reference/claude-config/sync-notes/2026-05-02-crm-ownership-next-action.md +0 -58
  180. package/reference/claude-config/sync-notes/2026-05-02-template-hardcode-workos-config.md +0 -56
  181. package/reference/claude-config/sync-notes/2026-05-04-elevasis-workspace.md +0 -71
  182. package/reference/claude-config/sync-notes/2026-05-04-knowledge-bundle.md +0 -83
  183. package/reference/claude-config/sync-notes/2026-05-04-template-skills-run-ui-and-tutorial.md +0 -59
  184. package/reference/claude-config/sync-notes/2026-05-05-list-builder.md +0 -42
  185. package/reference/claude-config/sync-notes/2026-05-06-crm-spine.md +0 -60
  186. package/reference/claude-config/sync-notes/2026-05-06-sdk-changes-release-train.md +0 -37
  187. package/reference/claude-config/sync-notes/2026-05-07-sdk-changes-release-train.md +0 -34
  188. package/reference/claude-config/sync-notes/2026-05-08-resource-governance-scaffold-guidance.md +0 -38
  189. package/reference/claude-config/sync-notes/2026-05-09-clients-domain.md +0 -32
  190. package/reference/claude-config/sync-notes/2026-05-09-command-system.md +0 -33
  191. package/reference/claude-config/sync-notes/2026-05-09-resource-governance-and-misc.md +0 -69
  192. package/reference/claude-config/sync-notes/2026-05-12-sdk-ready-release-train.md +0 -30
  193. package/reference/claude-config/sync-notes/2026-05-14-organization-model-ontology-refactor.md +0 -45
  194. package/reference/claude-config/sync-notes/2026-05-15-om-skill-rename-and-write-family.md +0 -52
  195. package/reference/claude-config/sync-notes/2026-05-17-sdk-boundary-consolidation.md +0 -33
  196. package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +0 -32
  197. package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +0 -43
  198. package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +0 -40
  199. package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +0 -61
  200. package/reference/claude-config/sync-notes/2026-05-23-branding-names-to-identity.md +0 -49
  201. package/reference/claude-config/sync-notes/2026-05-23-lead-gen-manage-access.md +0 -31
  202. package/reference/claude-config/sync-notes/2026-05-23-om-deployment-drift-detection.md +0 -42
  203. package/reference/claude-config/sync-notes/2026-05-23-om-full-model-deploy-contract.md +0 -33
  204. package/reference/claude-config/sync-notes/2026-05-23-ui-sdk-package-fixes.md +0 -37
  205. package/reference/claude-config/sync-notes/2026-05-24-platform-invite-router-core-baseline.md +0 -28
  206. package/reference/claude-config/sync-notes/2026-05-24-system-interface-readiness.md +0 -43
  207. package/reference/claude-config/sync-notes/2026-05-25-invitation-login-loader.md +0 -26
  208. package/reference/claude-config/sync-notes/2026-05-25-om-topbar-requests.md +0 -33
  209. package/reference/claude-config/sync-notes/2026-05-25-system-interface-profile-registry-and-substrate.md +0 -35
  210. package/reference/claude-config/sync-notes/2026-05-25-tenant-om-scaffold-cli.md +0 -49
  211. package/reference/claude-config/sync-notes/2026-05-25-vibe-operate-intent.md +0 -47
  212. package/reference/claude-config/sync-notes/2026-05-28-om-snapshot-sdk-workflow-config.md +0 -33
  213. package/reference/claude-config/sync-notes/2026-05-30-client-source-and-om-profiles.md +0 -39
  214. package/reference/claude-config/sync-notes/2026-06-02-knowledge-nested-group-routing.md +0 -27
  215. package/reference/claude-config/sync-notes/2026-06-02-nest-projects-under-platform.md +0 -45
  216. package/reference/claude-config/sync-notes/2026-06-03-skill-autogen-and-client-skill.md +0 -34
  217. package/reference/claude-config/sync-notes/2026-06-04-scaffold-registry-lane-severity.md +0 -34
  218. package/reference/claude-config/sync-notes/2026-06-05-appearance-app-mode-decouple.md +0 -29
  219. package/reference/claude-config/sync-notes/2026-06-05-ontology-endpoint-rename-and-knowledge-browser-ui.md +0 -86
  220. package/reference/claude-config/sync-notes/2026-06-06-om-build-systems-scaffold.md +0 -47
  221. package/reference/claude-config/sync-notes/2026-06-06-om-item-copy-references.md +0 -50
  222. package/reference/claude-config/sync-notes/2026-06-08-knowledge-base-page-not-found-fix.md +0 -76
  223. package/reference/claude-config/sync-notes/2026-06-09-agent-sessions-public-agent-chat-route.md +0 -75
  224. package/reference/claude-config/sync-notes/2026-06-09-sdk-cli-load-org-model-resolution.md +0 -42
  225. package/reference/claude-config/sync-notes/2026-06-12-agent-grants-visualizer-operations.md +0 -30
  226. package/reference/claude-config/sync-notes/2026-06-14-session-ux-and-project-cli-json.md +0 -33
  227. package/reference/claude-config/sync-notes/2026-06-14-shared-session-conversation-view.md +0 -26
  228. package/reference/claude-config/sync-notes/2026-06-15-session-chat-zero-wiring.md +0 -46
  229. package/reference/claude-config/sync-notes/2026-06-17-agent-session-ux-features.md +0 -34
  230. package/reference/claude-config/sync-notes/2026-06-25-shared-page-scroll-contract-guard.md +0 -52
  231. package/reference/claude-config/sync-notes/2026-06-26-leadgen-overview-om-telemetry.md +0 -47
  232. package/reference/claude-config/sync-notes/2026-07-21-agent-scaffold-hardening.md +0 -75
  233. package/reference/claude-config/sync-notes/2026-07-23-agent-session-memory.md +0 -49
  234. package/reference/claude-config/sync-notes/2026-07-23-workos-org-marker.md +0 -50
  235. package/reference/claude-config/sync-notes/2026-07-24-claude-5-models-and-session-surface-fixes.md +0 -116
  236. package/reference/claude-config/sync-notes/2026-07-27-agent-strict-output-and-turn-drift.md +0 -73
  237. package/reference/claude-config/sync-notes/2026-07-28-agent-reply-is-its-own-field.md +0 -84
  238. package/reference/claude-config/sync-notes/2026-07-30-login-screen-and-member-provisioning-state.md +0 -114
  239. package/reference/claude-config/sync-notes/2026-08-02-auth-guard-defaults-and-truncation-fix.md +0 -122
  240. package/reference/claude-config/sync-notes/2026-08-03-agent-prose-escape-normalization.md +0 -88
  241. package/reference/claude-config/sync-notes/2026-08-03-cli-gateway-errors-and-request-timeout.md +0 -120
  242. package/reference/claude-config/sync-notes/README.md +0 -43
  243. package/reference/sdk/framework/interaction-guidance.mdx +0 -182
  244. package/reference/sdk/framework/memory.mdx +0 -326
  245. package/reference/sdk/framework/resource-documentation.mdx +0 -90
  246. package/reference/sdk/roadmap.mdx +0 -164
@@ -2465,6 +2465,23 @@ var Workflow = class {
2465
2465
 
2466
2466
  // ../core/src/execution/engine/agent/observability/logging.ts
2467
2467
  function createAgentLogger(logger, agentId, sessionId) {
2468
+ function emitAction(actionType, message, iteration, startTime, endTime, duration) {
2469
+ const event = {
2470
+ type: "agent",
2471
+ agentId,
2472
+ lifecycle: "iteration",
2473
+ eventType: "action",
2474
+ iteration,
2475
+ actionType,
2476
+ startTime,
2477
+ endTime,
2478
+ duration,
2479
+ data: { message },
2480
+ ...sessionId && { sessionId }
2481
+ // Include sessionId if present
2482
+ };
2483
+ logger.info("action", event);
2484
+ }
2468
2485
  return {
2469
2486
  lifecycle(lifecycle, stage, data) {
2470
2487
  let event;
@@ -2531,21 +2548,15 @@ function createAgentLogger(logger, agentId, sessionId) {
2531
2548
  logger.info("reasoning", event);
2532
2549
  },
2533
2550
  action(actionType, message, iteration, startTime, endTime, duration) {
2534
- const event = {
2535
- type: "agent",
2536
- agentId,
2537
- lifecycle: "iteration",
2538
- eventType: "action",
2539
- iteration,
2540
- actionType,
2541
- startTime,
2542
- endTime,
2543
- duration,
2544
- data: { message },
2545
- ...sessionId && { sessionId }
2546
- // Include sessionId if present
2547
- };
2548
- logger.info("action", event);
2551
+ emitAction(actionType, message, iteration, startTime, endTime, duration);
2552
+ },
2553
+ async timed(actionType, iteration, work, message) {
2554
+ const startTime = Date.now();
2555
+ const result = await work();
2556
+ const endTime = Date.now();
2557
+ const resolvedActionType = typeof actionType === "function" ? actionType(result) : actionType;
2558
+ emitAction(resolvedActionType, message(result), iteration, startTime, endTime, endTime - startTime);
2559
+ return result;
2549
2560
  },
2550
2561
  toolCall(toolName, iteration, startTime, endTime, duration, success, error, input, output) {
2551
2562
  const event = {
@@ -3443,66 +3454,21 @@ async function processReasoning(iterationContext) {
3443
3454
  reasoning: response.reasoning
3444
3455
  });
3445
3456
  iterationContext.logger.reasoning(response.reasoning, iterationContext.iteration, startTime, endTime, duration);
3446
- const memoryStartTime = Date.now();
3447
- iterationContext.memoryManager.addToHistory({
3448
- type: "reasoning",
3449
- content: response.reasoning,
3450
- turnNumber: iterationContext.executionContext.sessionTurnNumber ?? null,
3451
- iterationNumber: iterationContext.iteration,
3452
- source: "model"
3453
- });
3454
- const memoryEndTime = Date.now();
3455
- const memoryDuration = memoryEndTime - memoryStartTime;
3456
- iterationContext.logger.action(
3457
+ await iterationContext.logger.timed(
3457
3458
  "memory-reasoning",
3458
- `Stored reasoning (${response.reasoning.length} chars), history size: ${iterationContext.memoryManager.getHistoryLength()}, actions: ${response.nextActions.map((a) => a.type).join(", ")}`,
3459
3459
  iterationContext.iteration,
3460
- memoryStartTime,
3461
- memoryEndTime,
3462
- memoryDuration
3460
+ () => iterationContext.memoryManager.addToHistory({
3461
+ type: "reasoning",
3462
+ content: response.reasoning,
3463
+ turnNumber: iterationContext.executionContext.sessionTurnNumber ?? null,
3464
+ iterationNumber: iterationContext.iteration,
3465
+ source: "model"
3466
+ }),
3467
+ () => `Stored reasoning (${response.reasoning.length} chars), history size: ${iterationContext.memoryManager.getHistoryLength()}, actions: ${response.nextActions.map((a) => a.type).join(", ")}`
3463
3468
  );
3464
3469
  return response;
3465
3470
  }
3466
3471
 
3467
- // ../core/src/execution/engine/agent/memory/domains.ts
3468
- var MEMORY_DOMAINS = {
3469
- /**
3470
- * Tool-owned keys
3471
- * Updated automatically by tools as side effects
3472
- * LLM cannot modify these via memoryOps
3473
- *
3474
- * Tools manage complex structured data (caches, indexes, etc.)
3475
- * that would be error-prone for LLM to update via JSON strings.
3476
- *
3477
- * No tool currently writes these three keys, so in practice the guard reserves the names
3478
- * against the LLM rather than arbitrating a live conflict. That is still enforcement --
3479
- * see `validateMemoryKeyOwnership` in `./utils` -- not dead code.
3480
- */
3481
- TOOL_OWNED: [
3482
- "notion-pages-cache",
3483
- // Notion tools manage page hierarchy
3484
- "github-repo-cache",
3485
- // GitHub tools manage repository structure
3486
- "slack-channel-cache"
3487
- // Slack tools manage channel data
3488
- ]
3489
- /**
3490
- * LLM-owned keys
3491
- * All keys NOT in TOOL_OWNED
3492
- * Managed via memoryOps by agent reasoning
3493
- *
3494
- * LLM manages semantic memory (business context, decisions, etc.)
3495
- * that requires understanding and judgment.
3496
- */
3497
- };
3498
- function isToolOwnedKey(key) {
3499
- return MEMORY_DOMAINS.TOOL_OWNED.includes(key);
3500
- }
3501
- function getKeyOwner(key) {
3502
- if (isToolOwnedKey(key)) return "tool";
3503
- return "llm";
3504
- }
3505
-
3506
3472
  // ../core/src/execution/engine/agent/memory/utils.ts
3507
3473
  function addToolError(memoryManager, action, errorMessage, iteration, turnNumber = null, metadata) {
3508
3474
  memoryManager.addToHistory({
@@ -3526,11 +3492,10 @@ function addToolError(memoryManager, action, errorMessage, iteration, turnNumber
3526
3492
  });
3527
3493
  }
3528
3494
  function validateMemoryKeyOwnership(key, logger, iteration) {
3529
- if (isToolOwnedKey(key)) {
3530
- const owner = getKeyOwner(key);
3495
+ if (key.startsWith("_")) {
3531
3496
  logger.action(
3532
3497
  "memory-set-rejected",
3533
- `Rejected LLM update to ${owner}-managed key: ${key}`,
3498
+ `Rejected LLM update to framework-reserved key: ${key}`,
3534
3499
  iteration,
3535
3500
  Date.now(),
3536
3501
  Date.now(),
@@ -3772,25 +3737,19 @@ async function executeToolCall(iterationContext, action) {
3772
3737
  action.input,
3773
3738
  boundedResult
3774
3739
  );
3775
- const memoryStartTime = Date.now();
3776
3740
  const memoryContent = typeof boundedResult === "string" ? boundedResult : JSON.stringify(boundedResult);
3777
- iterationContext.memoryManager.addToHistory({
3778
- type: "tool-result",
3779
- content: memoryContent,
3780
- toolName: action.name,
3781
- turnNumber: iterationContext.executionContext.sessionTurnNumber ?? null,
3782
- iterationNumber: iterationContext.iteration,
3783
- source: "tool"
3784
- });
3785
- const memoryEndTime = Date.now();
3786
- const memoryDuration = memoryEndTime - memoryStartTime;
3787
- iterationContext.logger.action(
3741
+ await iterationContext.logger.timed(
3788
3742
  "memory-tool-result",
3789
- `Stored tool-result for ${action.name} (${memoryContent.length} chars), history size: ${iterationContext.memoryManager.getHistoryLength()}`,
3790
3743
  iterationContext.iteration,
3791
- memoryStartTime,
3792
- memoryEndTime,
3793
- memoryDuration
3744
+ () => iterationContext.memoryManager.addToHistory({
3745
+ type: "tool-result",
3746
+ content: memoryContent,
3747
+ toolName: action.name,
3748
+ turnNumber: iterationContext.executionContext.sessionTurnNumber ?? null,
3749
+ iterationNumber: iterationContext.iteration,
3750
+ source: "tool"
3751
+ }),
3752
+ () => `Stored tool-result for ${action.name} (${memoryContent.length} chars), history size: ${iterationContext.memoryManager.getHistoryLength()}`
3794
3753
  );
3795
3754
  } catch (error) {
3796
3755
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -3813,29 +3772,25 @@ async function executeToolCall(iterationContext, action) {
3813
3772
  action.input,
3814
3773
  void 0
3815
3774
  );
3816
- const memoryStartTime = Date.now();
3817
- const metadata = error instanceof ToolingError ? {
3818
- errorType: error.errorType,
3819
- severity: error.severity,
3820
- isRetryable: error.isRetryable()
3821
- } : void 0;
3822
- addToolError(
3823
- iterationContext.memoryManager,
3824
- action,
3825
- errorMessage,
3826
- iterationContext.iteration,
3827
- iterationContext.executionContext.sessionTurnNumber ?? null,
3828
- metadata
3829
- );
3830
- const memoryEndTime = Date.now();
3831
- const memoryDuration = memoryEndTime - memoryStartTime;
3832
- iterationContext.logger.action(
3775
+ await iterationContext.logger.timed(
3833
3776
  "memory-tool-error",
3834
- `Stored error for ${action.name}: ${errorMessage}, history size: ${iterationContext.memoryManager.getHistoryLength()}`,
3835
3777
  iterationContext.iteration,
3836
- memoryStartTime,
3837
- memoryEndTime,
3838
- memoryDuration
3778
+ () => {
3779
+ const metadata = error instanceof ToolingError ? {
3780
+ errorType: error.errorType,
3781
+ severity: error.severity,
3782
+ isRetryable: error.isRetryable()
3783
+ } : void 0;
3784
+ addToolError(
3785
+ iterationContext.memoryManager,
3786
+ action,
3787
+ errorMessage,
3788
+ iterationContext.iteration,
3789
+ iterationContext.executionContext.sessionTurnNumber ?? null,
3790
+ metadata
3791
+ );
3792
+ },
3793
+ () => `Stored error for ${action.name}: ${errorMessage}, history size: ${iterationContext.memoryManager.getHistoryLength()}`
3839
3794
  );
3840
3795
  }
3841
3796
  }
@@ -4073,11 +4028,13 @@ async function processMemory(memoryManager, response, logger, iteration) {
4073
4028
  if (!validateMemoryKeyOwnership(key, logger, iteration)) {
4074
4029
  continue;
4075
4030
  }
4076
- const startTime = Date.now();
4077
- const stringValue = typeof content === "string" ? content : JSON.stringify(content);
4078
- memoryManager.set(key, stringValue);
4079
- const endTime = Date.now();
4080
- logger.action("memory-set", `Set: ${key}`, iteration, startTime, endTime, endTime - startTime);
4031
+ await logger.timed(
4032
+ "memory-set",
4033
+ iteration,
4034
+ // Auto-stringify non-string values (arrays, objects, etc.)
4035
+ () => memoryManager.set(key, typeof content === "string" ? content : JSON.stringify(content)),
4036
+ () => `Set: ${key}`
4037
+ );
4081
4038
  }
4082
4039
  }
4083
4040
  if (memoryOps.delete) {
@@ -4085,21 +4042,12 @@ async function processMemory(memoryManager, response, logger, iteration) {
4085
4042
  if (!validateMemoryKeyOwnership(key, logger, iteration)) {
4086
4043
  continue;
4087
4044
  }
4088
- const startTime = Date.now();
4089
- const deleted = memoryManager.delete(key);
4090
- const endTime = Date.now();
4091
- if (deleted) {
4092
- logger.action("memory-delete", `Deleted: ${key}`, iteration, startTime, endTime, endTime - startTime);
4093
- } else {
4094
- logger.action(
4095
- "memory-delete-missing",
4096
- `Attempted to delete non-existent key: ${key}`,
4097
- iteration,
4098
- startTime,
4099
- endTime,
4100
- endTime - startTime
4101
- );
4102
- }
4045
+ await logger.timed(
4046
+ (deleted) => deleted ? "memory-delete" : "memory-delete-missing",
4047
+ iteration,
4048
+ () => memoryManager.delete(key),
4049
+ (deleted) => deleted ? `Deleted: ${key}` : `Attempted to delete non-existent key: ${key}`
4050
+ );
4103
4051
  }
4104
4052
  }
4105
4053
  }
@@ -4226,7 +4174,6 @@ var MemoryManager = class {
4226
4174
  this.constraints = constraints;
4227
4175
  this.logger = logger;
4228
4176
  }
4229
- cachedSnapshot;
4230
4177
  /**
4231
4178
  * Rolling correction for `estimateTokens`'s bias, learned from real provider usage.
4232
4179
  * `undefined` until the first `recordActualUsage` call -- the cold-start state, where
@@ -4515,21 +4462,15 @@ var MemoryManager = class {
4515
4462
  };
4516
4463
  }
4517
4464
  /**
4518
- * Create memory snapshot for persistence
4519
- * Caches snapshot internally for later retrieval
4465
+ * Create a memory snapshot for persistence.
4466
+ *
4467
+ * Stateless: every call returns a fresh `structuredClone` of the current memory, so the caller
4468
+ * owns caching if it needs to hold onto the result across calls (see `Agent.memorySnapshot`).
4469
+ *
4520
4470
  * @returns Deep copy of current memory state
4521
4471
  */
4522
- toSnapshot() {
4523
- this.cachedSnapshot = structuredClone(this.memory);
4524
- return this.cachedSnapshot;
4525
- }
4526
- /**
4527
- * Get cached memory snapshot
4528
- * Returns snapshot created by toSnapshot()
4529
- * @returns Cached snapshot (undefined if toSnapshot() not called yet)
4530
- */
4531
- getSnapshot() {
4532
- return this.cachedSnapshot;
4472
+ snapshot() {
4473
+ return structuredClone(this.memory);
4533
4474
  }
4534
4475
  /**
4535
4476
  * Build the framework framing and the untrusted data envelope for an LLM call.
@@ -4661,6 +4602,12 @@ var Agent = class {
4661
4602
  * reading memory history after the fact, because the emit is the user-visible event and memory
4662
4603
  * can be compacted or restructured without changing whether the turn spoke. */
4663
4604
  spokeThisTurn = false;
4605
+ /** Cached result of `memoryManager.snapshot()` -- `MemoryManager.snapshot()` itself is stateless
4606
+ * (a fresh `structuredClone` every call), so caching the LAST one taken is this class's job. Set
4607
+ * once, in the `finally` around `iterate()` and again in `complete()` -- see `getMemorySnapshot()`
4608
+ * for why `undefined`-before-first-iteration is a contract other callers (`session.ts`, the SDK
4609
+ * worker) depend on. */
4610
+ memorySnapshot;
4664
4611
  /**
4665
4612
  * Create a new agent instance from definition
4666
4613
  * Memory will be initialized during execution
@@ -4701,7 +4648,7 @@ var Agent = class {
4701
4648
  try {
4702
4649
  await this.iterate(this.executionContext);
4703
4650
  } finally {
4704
- this.memoryManager.toSnapshot();
4651
+ this.memorySnapshot = this.memoryManager.snapshot();
4705
4652
  }
4706
4653
  }
4707
4654
  const output = await this.complete();
@@ -4814,22 +4761,21 @@ var Agent = class {
4814
4761
  async initializeMemoryManager(context) {
4815
4762
  const memory = await this.resolveInitialMemory(context);
4816
4763
  const memoryManager = new MemoryManager(memory, this.config.constraints, this.logger);
4817
- const inputStartTime = Date.now();
4818
- memoryManager.addToHistory({
4819
- type: "input",
4820
- content: this.currentInput,
4821
- turnNumber: context.sessionTurnNumber ?? null,
4822
- iterationNumber: 0,
4823
- source: "user"
4824
- });
4825
- const inputEndTime = Date.now();
4826
- this.logger.action(
4764
+ await this.logger.timed(
4827
4765
  "memory-input",
4828
- `Added input entry to history`,
4829
4766
  0,
4830
- inputStartTime,
4831
- inputEndTime,
4832
- inputEndTime - inputStartTime
4767
+ // Kept in history even though the input also travels as its own message: history is what
4768
+ // later iterations and later turns read, and `autoCompact` anchors on `history[0]` as the
4769
+ // original input. `toContextParts` excludes this entry from the current turn's envelope so
4770
+ // the model does not see the same text twice.
4771
+ () => memoryManager.addToHistory({
4772
+ type: "input",
4773
+ content: this.currentInput,
4774
+ turnNumber: context.sessionTurnNumber ?? null,
4775
+ iterationNumber: 0,
4776
+ source: "user"
4777
+ }),
4778
+ () => `Added input entry to history`
4833
4779
  );
4834
4780
  flowLog("agent.initialize", {
4835
4781
  resourceId: this.config.resourceId,
@@ -4851,32 +4797,20 @@ var Agent = class {
4851
4797
  */
4852
4798
  async resolveInitialMemory(context) {
4853
4799
  if (this.initialMemory) {
4854
- const restoreStartTime = Date.now();
4855
- const memory = structuredClone(this.initialMemory);
4856
- const restoreEndTime = Date.now();
4857
- this.logger.action(
4800
+ return this.logger.timed(
4858
4801
  "memory-restore",
4859
- `Restored ${Object.keys(memory.sessionMemory).length} session memory entries`,
4860
4802
  0,
4861
- restoreStartTime,
4862
- restoreEndTime,
4863
- restoreEndTime - restoreStartTime
4803
+ () => structuredClone(this.initialMemory),
4804
+ (memory) => `Restored ${Object.keys(memory.sessionMemory).length} session memory entries`
4864
4805
  );
4865
- return memory;
4866
4806
  }
4867
4807
  if (this.definition.preloadMemory) {
4868
- const preloadStartTime = Date.now();
4869
- const memory = await this.definition.preloadMemory(context);
4870
- const preloadEndTime = Date.now();
4871
- this.logger.action(
4808
+ return this.logger.timed(
4872
4809
  "memory-preload",
4873
- `Preloaded ${Object.keys(memory.sessionMemory).length} session memory entries`,
4874
4810
  0,
4875
- preloadStartTime,
4876
- preloadEndTime,
4877
- preloadEndTime - preloadStartTime
4811
+ () => this.definition.preloadMemory(context),
4812
+ (memory) => `Preloaded ${Object.keys(memory.sessionMemory).length} session memory entries`
4878
4813
  );
4879
- return memory;
4880
4814
  }
4881
4815
  return { sessionMemory: {}, history: [] };
4882
4816
  }
@@ -5010,8 +4944,8 @@ var Agent = class {
5010
4944
  0
5011
4945
  );
5012
4946
  }
5013
- this.memoryManager.toSnapshot();
5014
- const snapshot = this.memoryManager.getSnapshot();
4947
+ const snapshot = this.memoryManager.snapshot();
4948
+ this.memorySnapshot = snapshot;
5015
4949
  const completionEndTime = Date.now();
5016
4950
  this.logger.lifecycle("completion", "completed", {
5017
4951
  startTime: completionStartTime,
@@ -5227,12 +5161,17 @@ Fix the errors and generate a valid output.
5227
5161
  `.trim();
5228
5162
  }
5229
5163
  /**
5230
- * Get memory snapshot after execution
5231
- * Delegates to MemoryManager.getSnapshot()
5232
- * @returns Memory snapshot (only available after execute() completes)
5164
+ * Get memory snapshot after execution.
5165
+ *
5166
+ * `undefined` until the `finally` around `iterate()` (or `complete()`) takes the first snapshot --
5167
+ * `session.ts` and the SDK worker both rely on this to distinguish "no memory produced yet" (a
5168
+ * throw during `initialize()`, before any iteration ran) from "memory exists".
5169
+ *
5170
+ * @returns Memory snapshot (only available after execute() completes, or after a mid-turn throw
5171
+ * past the point `iterate()` began)
5233
5172
  */
5234
5173
  getMemorySnapshot() {
5235
- return this.memoryManager.getSnapshot();
5174
+ return this.memorySnapshot;
5236
5175
  }
5237
5176
  /**
5238
5177
  * How the just-finished turn ended -- see `AgentStopReason`. Set once `iterate()` returns,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elevasis/sdk",
3
- "version": "1.44.3",
3
+ "version": "1.45.0",
4
4
  "description": "SDK for building Elevasis organization resources",
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,7 +12,7 @@
12
12
  "import": "./dist/index.js"
13
13
  },
14
14
  "./worker": {
15
- "types": "./dist/types/worker/index.d.ts",
15
+ "types": "./dist/worker/index.d.ts",
16
16
  "import": "./dist/worker/index.js"
17
17
  },
18
18
  "./test-utils": {
@@ -28,10 +28,7 @@
28
28
  "dist/index.js",
29
29
  "dist/index.d.ts",
30
30
  "dist/worker/index.js",
31
- "dist/types/worker/index.d.ts",
32
- "dist/types/worker/platform.d.ts",
33
- "dist/types/worker/utils.d.ts",
34
- "dist/types/worker/adapters/",
31
+ "dist/worker/index.d.ts",
35
32
  "dist/test-utils/index.js",
36
33
  "dist/test-utils/index.d.ts",
37
34
  "dist/node/",
@@ -58,9 +55,9 @@
58
55
  "tsup": "^8.0.0",
59
56
  "typescript": "5.9.2",
60
57
  "zod": "^4.1.0",
61
- "@repo/core": "0.59.0",
62
- "@repo/typescript-config": "0.0.0",
63
- "@repo/eslint-config": "0.0.0"
58
+ "@repo/core": "0.60.0",
59
+ "@repo/eslint-config": "0.0.0",
60
+ "@repo/typescript-config": "0.0.0"
64
61
  },
65
62
  "scripts": {
66
63
  "lint": "eslint src --max-warnings 0",