veryfront 0.1.231 → 0.1.233

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 (55) hide show
  1. package/esm/deno.d.ts +2 -0
  2. package/esm/deno.js +3 -1
  3. package/esm/src/agent/conversation-bootstrap.d.ts +61 -0
  4. package/esm/src/agent/conversation-bootstrap.d.ts.map +1 -0
  5. package/esm/src/agent/conversation-bootstrap.js +131 -0
  6. package/esm/src/agent/durable.d.ts +118 -0
  7. package/esm/src/agent/durable.d.ts.map +1 -0
  8. package/esm/src/agent/durable.js +191 -0
  9. package/esm/src/agent/index.d.ts +2 -0
  10. package/esm/src/agent/index.d.ts.map +1 -1
  11. package/esm/src/agent/index.js +2 -0
  12. package/esm/src/channels/control-plane.d.ts +6 -0
  13. package/esm/src/channels/control-plane.d.ts.map +1 -1
  14. package/esm/src/channels/control-plane.js +6 -0
  15. package/esm/src/proxy/handler.d.ts.map +1 -1
  16. package/esm/src/proxy/handler.js +1 -0
  17. package/esm/src/server/handlers/request/agent-run-cancel.handler.d.ts.map +1 -1
  18. package/esm/src/server/handlers/request/agent-run-cancel.handler.js +6 -2
  19. package/esm/src/server/handlers/request/agent-run-resume.handler.d.ts.map +1 -1
  20. package/esm/src/server/handlers/request/agent-run-resume.handler.js +6 -2
  21. package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -1
  22. package/esm/src/server/handlers/request/agent-stream.handler.js +5 -1
  23. package/esm/src/server/handlers/request/internal-agents-list.handler.d.ts.map +1 -1
  24. package/esm/src/server/handlers/request/internal-agents-list.handler.js +5 -2
  25. package/esm/src/server/runtime-handler/environment-resolution.d.ts.map +1 -1
  26. package/esm/src/server/runtime-handler/environment-resolution.js +2 -1
  27. package/esm/src/server/runtime-handler/request-utils.d.ts.map +1 -1
  28. package/esm/src/server/runtime-handler/request-utils.js +2 -1
  29. package/esm/src/utils/index.d.ts +2 -2
  30. package/esm/src/utils/index.d.ts.map +1 -1
  31. package/esm/src/utils/index.js +1 -1
  32. package/esm/src/utils/logger/logger.d.ts +6 -0
  33. package/esm/src/utils/logger/logger.d.ts.map +1 -1
  34. package/esm/src/utils/logger/logger.js +10 -0
  35. package/esm/src/utils/logger/request-context.d.ts +2 -0
  36. package/esm/src/utils/logger/request-context.d.ts.map +1 -1
  37. package/esm/src/utils/version-constant.d.ts +1 -1
  38. package/esm/src/utils/version-constant.js +1 -1
  39. package/package.json +9 -1
  40. package/src/deno.js +3 -1
  41. package/src/src/agent/conversation-bootstrap.ts +195 -0
  42. package/src/src/agent/durable.ts +259 -0
  43. package/src/src/agent/index.ts +23 -0
  44. package/src/src/channels/control-plane.ts +7 -0
  45. package/src/src/proxy/handler.ts +1 -0
  46. package/src/src/server/handlers/request/agent-run-cancel.handler.ts +9 -2
  47. package/src/src/server/handlers/request/agent-run-resume.handler.ts +10 -2
  48. package/src/src/server/handlers/request/agent-stream.handler.ts +9 -2
  49. package/src/src/server/handlers/request/internal-agents-list.handler.ts +6 -1
  50. package/src/src/server/runtime-handler/environment-resolution.ts +2 -1
  51. package/src/src/server/runtime-handler/request-utils.ts +2 -1
  52. package/src/src/utils/index.ts +4 -1
  53. package/src/src/utils/logger/logger.ts +16 -0
  54. package/src/src/utils/logger/request-context.ts +2 -0
  55. package/src/src/utils/version-constant.ts +1 -1
@@ -1,9 +1,10 @@
1
+ import { CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX, LEGACY_INTERNAL_AGENT_RUNS_PATH_PREFIX, } from "../../../channels/control-plane.js";
1
2
  import { ControlPlaneRequestError, verifyControlPlaneRequest, } from "../../../internal-agents/control-plane-auth.js";
2
3
  import { agentRunSessionManager, } from "../../../internal-agents/session-manager.js";
3
4
  import { INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES, InternalAgentRequestBodyTooLargeError, readInternalAgentRequestBody, } from "../../../internal-agents/request-body.js";
4
5
  import { BaseHandler } from "../response/base.js";
5
6
  import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
6
- const CANCEL_PATH_REGEX = /^\/internal\/agents\/runs\/([^/]+)$/;
7
+ const CANCEL_PATH_REGEX = /^\/(?:api\/control-plane\/agents|internal\/agents)\/runs\/([^/]+)$/;
7
8
  function getRunId(pathname) {
8
9
  return CANCEL_PATH_REGEX.exec(pathname)?.[1] ?? null;
9
10
  }
@@ -12,7 +13,10 @@ export class AgentRunCancelHandler extends BaseHandler {
12
13
  metadata = {
13
14
  name: "AgentRunCancelHandler",
14
15
  priority: PRIORITY_MEDIUM_API,
15
- patterns: [{ pattern: "/internal/agents/runs/", prefix: true, method: "DELETE" }],
16
+ patterns: [
17
+ { pattern: CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX, prefix: true, method: "DELETE" },
18
+ { pattern: LEGACY_INTERNAL_AGENT_RUNS_PATH_PREFIX, prefix: true, method: "DELETE" },
19
+ ],
16
20
  };
17
21
  constructor(sessionManager = agentRunSessionManager) {
18
22
  super();
@@ -1 +1 @@
1
- {"version":3,"file":"agent-run-resume.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-run-resume.handler.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,sBAAsB,EAK5B,MAAM,6CAA6C,CAAC;AAOrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AASnG,qBAAa,qBAAsB,SAAQ,WAAW;IAOxC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAN3C,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,cAAc,GAAE,sBAA+C;IAItF,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAoExE"}
1
+ {"version":3,"file":"agent-run-resume.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-run-resume.handler.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,sBAAsB,EAK5B,MAAM,6CAA6C,CAAC;AAOrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAUnG,qBAAa,qBAAsB,SAAQ,WAAW;IAUxC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAT3C,QAAQ,EAAE,eAAe,CAOvB;gBAE2B,cAAc,GAAE,sBAA+C;IAItF,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAoExE"}
@@ -1,10 +1,11 @@
1
+ import { CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX, LEGACY_INTERNAL_AGENT_RUNS_PATH_PREFIX, } from "../../../channels/control-plane.js";
1
2
  import { ControlPlaneRequestError, verifyControlPlaneRequest, } from "../../../internal-agents/control-plane-auth.js";
2
3
  import { agentRunSessionManager, RunNotActiveError, ToolResultConflictError, ToolResultNotWaitingError, } from "../../../internal-agents/session-manager.js";
3
4
  import { INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES, InternalAgentRequestBodyTooLargeError, readInternalAgentRequestBody, } from "../../../internal-agents/request-body.js";
4
5
  import { ResumeSignalSchema } from "../../../internal-agents/schema.js";
5
6
  import { BaseHandler } from "../response/base.js";
6
7
  import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
7
- const RESUME_PATH_REGEX = /^\/internal\/agents\/runs\/([^/]+)\/resume$/;
8
+ const RESUME_PATH_REGEX = /^\/(?:api\/control-plane\/agents|internal\/agents)\/runs\/([^/]+)\/resume$/;
8
9
  function getRunId(pathname) {
9
10
  return RESUME_PATH_REGEX.exec(pathname)?.[1] ?? null;
10
11
  }
@@ -13,7 +14,10 @@ export class AgentRunResumeHandler extends BaseHandler {
13
14
  metadata = {
14
15
  name: "AgentRunResumeHandler",
15
16
  priority: PRIORITY_MEDIUM_API,
16
- patterns: [{ pattern: "/internal/agents/runs/", prefix: true, method: "POST" }],
17
+ patterns: [
18
+ { pattern: CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX, prefix: true, method: "POST" },
19
+ { pattern: LEGACY_INTERNAL_AGENT_RUNS_PATH_PREFIX, prefix: true, method: "POST" },
20
+ ],
17
21
  };
18
22
  constructor(sessionManager = agentRunSessionManager) {
19
23
  super();
@@ -1 +1 @@
1
- {"version":3,"file":"agent-stream.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-stream.handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,4BAA4B,EAE7B,MAAM,2CAA2C,CAAC;AAmBnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAKnG,MAAM,WAAW,sBACf,SAAQ,yBAAyB,EAAE,+BAA+B;IAClE,4BAA4B,CAAC,EAAE,OAAO,4BAA4B,CAAC;CACpE;AA4ED,qBAAa,kBAAmB,SAAQ,WAAW;IAOrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,IAAI,GAAE,sBAAoC;IAIvE,OAAO,CAAC,sBAAsB;IAwBxB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAgHxE"}
1
+ {"version":3,"file":"agent-stream.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-stream.handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,4BAA4B,EAE7B,MAAM,2CAA2C,CAAC;AAmBnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAKnG,MAAM,WAAW,sBACf,SAAQ,yBAAyB,EAAE,+BAA+B;IAClE,4BAA4B,CAAC,EAAE,OAAO,4BAA4B,CAAC;CACpE;AA4ED,qBAAa,kBAAmB,SAAQ,WAAW;IAUrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IATjC,QAAQ,EAAE,eAAe,CAOvB;gBAE2B,IAAI,GAAE,sBAAoC;IAIvE,OAAO,CAAC,sBAAsB;IAwBxB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAgHxE"}
@@ -1,4 +1,5 @@
1
1
  import { defaultChannelInvokeDeps } from "../../../channels/invoke.js";
2
+ import { CONTROL_PLANE_AGENT_STREAM_PATH, LEGACY_INTERNAL_AGENT_STREAM_PATH, } from "../../../channels/control-plane.js";
2
3
  import { createRuntimeAgentStreamResponse, } from "../../../internal-agents/run-stream.js";
3
4
  import { resolveRuntimeOwnerInvokeUrl, RUNTIME_OWNER_INVOKE_URL_HEADER, } from "../../../internal-agents/runtime-owner.js";
4
5
  import { ControlPlaneRequestError, verifyControlPlaneRequest, } from "../../../internal-agents/control-plane-auth.js";
@@ -62,7 +63,10 @@ export class AgentStreamHandler extends BaseHandler {
62
63
  metadata = {
63
64
  name: "AgentStreamHandler",
64
65
  priority: PRIORITY_MEDIUM_API,
65
- patterns: [{ pattern: "/internal/agents/stream", exact: true, method: "POST" }],
66
+ patterns: [
67
+ { pattern: CONTROL_PLANE_AGENT_STREAM_PATH, exact: true, method: "POST" },
68
+ { pattern: LEGACY_INTERNAL_AGENT_STREAM_PATH, exact: true, method: "POST" },
69
+ ],
66
70
  };
67
71
  constructor(deps = defaultDeps) {
68
72
  super();
@@ -1 +1 @@
1
- {"version":3,"file":"internal-agents-list.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/internal-agents-list.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAIL,KAAK,yBAAyB,EAC/B,MAAM,oCAAoC,CAAC;AAc5C,qBAAa,yBAA0B,SAAQ,WAAW;IAO5C,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,IAAI,GAAE,yBAAoD;IAIjF,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAkExE"}
1
+ {"version":3,"file":"internal-agents-list.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/internal-agents-list.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAML,KAAK,yBAAyB,EAC/B,MAAM,oCAAoC,CAAC;AAc5C,qBAAa,yBAA0B,SAAQ,WAAW;IAU5C,OAAO,CAAC,QAAQ,CAAC,IAAI;IATjC,QAAQ,EAAE,eAAe,CAOvB;gBAE2B,IAAI,GAAE,yBAAoD;IAIjF,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAkExE"}
@@ -1,5 +1,5 @@
1
1
  import { BaseHandler } from "../response/base.js";
2
- import { ControlPlaneAgentsListRequestSchema, listRuntimeAgents, } from "../../../channels/control-plane.js";
2
+ import { CONTROL_PLANE_AGENTS_LIST_PATH, ControlPlaneAgentsListRequestSchema, LEGACY_INTERNAL_AGENTS_LIST_PATH, listRuntimeAgents, } from "../../../channels/control-plane.js";
3
3
  import { defaultChannelInvokeDeps } from "../../../channels/invoke.js";
4
4
  import { ControlPlaneRequestError, verifyControlPlaneRequest, } from "../../../internal-agents/control-plane-auth.js";
5
5
  import { INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES, InternalAgentRequestBodyTooLargeError, readInternalAgentRequestBody, } from "../../../internal-agents/request-body.js";
@@ -10,7 +10,10 @@ export class InternalAgentsListHandler extends BaseHandler {
10
10
  metadata = {
11
11
  name: "InternalAgentsListHandler",
12
12
  priority: PRIORITY_MEDIUM_API,
13
- patterns: [{ pattern: "/internal/agents/list", exact: true, method: "POST" }],
13
+ patterns: [
14
+ { pattern: CONTROL_PLANE_AGENTS_LIST_PATH, exact: true, method: "POST" },
15
+ { pattern: LEGACY_INTERNAL_AGENTS_LIST_PATH, exact: true, method: "POST" },
16
+ ],
14
17
  };
15
18
  constructor(deps = defaultChannelInvokeDeps) {
16
19
  super();
@@ -1 +1 @@
1
- {"version":3,"file":"environment-resolution.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/environment-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAM/D,UAAU,2BAA2B;IACnC,gDAAgD;IAChD,mBAAmB,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IAC1D,iEAAiE;IACjE,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,yCAAyC;IACzC,aAAa,EAAE,QAAQ,GAAG,SAAS,CAAC;CACrC;AAED,UAAU,4BAA4B;IACpC,qCAAqC;IACrC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACvC,gCAAgC;IAChC,UAAU,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IACjD,8BAA8B;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,mBAAmB;IACnB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iBAAiB;IACjB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,uBAAuB;IACvB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,cAAc,EAAE,OAAO,CAAC;IACxB,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,kBAAkB,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;CAC1D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,4BAA4B,GACjC,2BAA2B,CAgF7B"}
1
+ {"version":3,"file":"environment-resolution.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/environment-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAM/D,UAAU,2BAA2B;IACnC,gDAAgD;IAChD,mBAAmB,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IAC1D,iEAAiE;IACjE,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,yCAAyC;IACzC,aAAa,EAAE,QAAQ,GAAG,SAAS,CAAC;CACrC;AAED,UAAU,4BAA4B;IACpC,qCAAqC;IACrC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACvC,gCAAgC;IAChC,UAAU,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IACjD,8BAA8B;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,mBAAmB;IACnB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iBAAiB;IACjB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,uBAAuB;IACvB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,cAAc,EAAE,OAAO,CAAC;IACxB,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,kBAAkB,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;CAC1D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,4BAA4B,GACjC,2BAA2B,CAiF7B"}
@@ -20,7 +20,8 @@ export function resolveEnvironment(opts) {
20
20
  let releaseId = opts.releaseId;
21
21
  // Some internal framework surfaces are routed directly to a runtime owner pod and
22
22
  // rely on signed control-plane auth instead of a user-facing release address.
23
- const isInternalAgentControlPlanePath = opts.pathname.startsWith("/internal/agents/");
23
+ const isInternalAgentControlPlanePath = opts.pathname.startsWith("/internal/agents/") ||
24
+ opts.pathname.startsWith("/api/control-plane/agents/");
24
25
  // Skip releaseId validation for development assets and signed internal control-plane
25
26
  // requests because they do not require a user-facing release context.
26
27
  const canSkipReleaseIdValidation = opts.pathname === "/_ws" ||
@@ -1 +1 @@
1
- {"version":3,"file":"request-utils.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/request-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAkBpD;AAED,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,aAA+C,CAAC;AAK7E,yFAAyF;AACzF,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,eAA4B,CAAC;AAE1D,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,uFAAuF;AACvF,eAAO,MAAM,yBAAyB,UASrC,CAAC;AAEF,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnE"}
1
+ {"version":3,"file":"request-utils.d.ts","sourceRoot":"","sources":["../../../../src/src/server/runtime-handler/request-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAkBpD;AAED,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,aAA+C,CAAC;AAK7E,yFAAyF;AACzF,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,eAA4B,CAAC;AAE1D,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,uFAAuF;AACvF,eAAO,MAAM,yBAAyB,UASrC,CAAC;AAEF,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGnE"}
@@ -71,5 +71,6 @@ export function isWebSocketPath(pathname) {
71
71
  * render cache prefix/content-source derivation and the enriched render payload.
72
72
  */
73
73
  export function shouldSkipEnrichedContext(pathname) {
74
- return pathname.startsWith("/api/") || pathname.startsWith("/internal/agents/");
74
+ return pathname.startsWith("/api/") || pathname.startsWith("/internal/agents/") ||
75
+ pathname.startsWith("/api/control-plane/agents/");
75
76
  }
@@ -13,8 +13,8 @@
13
13
  */
14
14
  import "../../_dnt.polyfills.js";
15
15
  export { type GlobalWithBun, type GlobalWithDeno, type GlobalWithProcess, hasBunRuntime, hasDenoRuntime, hasNodeProcess, } from "./runtime-guards.js";
16
- export { agentLogger, bundlerLogger, createJobUserLogger, logger, refreshLoggerConfig, rendererLogger, serverLogger, } from "./logger/index.js";
17
- export type { Logger } from "./logger/index.js";
16
+ export { __registerTraceContextGetter, __registerTraceContextGetter as registerTraceContextGetter, agentLogger, bundlerLogger, createJobUserLogger, logger, refreshLoggerConfig, rendererLogger, runWithRequestContextAsync, serverLogger, } from "./logger/index.js";
17
+ export type { Logger, RequestContext } from "./logger/index.js";
18
18
  export { BREAKPOINT_LG, BREAKPOINT_MD, BREAKPOINT_SM, BREAKPOINT_XL, BYTES_PER_KB, DEFAULT_ALLOWED_CDN_HOSTS, DEFAULT_BUILD_CONCURRENCY, DEFAULT_DASHBOARD_PORT, DEFAULT_LRU_MAX_ENTRIES, DEV_SERVER_ENDPOINTS, FORBIDDEN_PATH_PATTERNS, getDenoStdNodeBase, getReactImportMap, HASH_SEED_DJB2, HASH_SEED_FNV1A, HMR_CLIENT_RELOAD_DELAY_MS, HMR_CLOSE_MESSAGE_TOO_LARGE, HMR_CLOSE_NORMAL, HMR_CLOSE_RATE_LIMIT, HMR_MAX_MESSAGE_SIZE_BYTES, HMR_MAX_MESSAGES_PER_MINUTE, HMR_RATE_LIMIT_WINDOW_MS, HTTP_BAD_REQUEST, HTTP_CONTENT_TYPE_IMAGE_GIF, HTTP_CONTENT_TYPE_IMAGE_ICO, HTTP_CONTENT_TYPE_IMAGE_JPEG, HTTP_CONTENT_TYPE_IMAGE_PNG, HTTP_CONTENT_TYPE_IMAGE_SVG, HTTP_CONTENT_TYPE_IMAGE_WEBP, HTTP_CONTENT_TYPES, HTTP_MODULE_FETCH_TIMEOUT_MS, HTTP_NETWORK_CONNECT_TIMEOUT, HTTP_NOT_FOUND, HTTP_NOT_IMPLEMENTED, HTTP_OK, HTTP_REDIRECT_FOUND, HTTP_SERVER_ERROR, HTTP_STATUS_CLIENT_ERROR_MIN, HTTP_STATUS_REDIRECT_MIN, HTTP_STATUS_SERVER_ERROR_MIN, HTTP_STATUS_SUCCESS_MIN, HTTP_UNAVAILABLE, IMAGE_OPTIMIZATION, MAX_BATCH_SIZE, MAX_PATH_LENGTH, MAX_PATH_TRAVERSAL_DEPTH, MS_PER_SECOND, PREFETCH_DEFAULT_DELAY_MS, PREFETCH_DEFAULT_TIMEOUT_MS, PREFETCH_MAX_SIZE_BYTES, REACT_DEFAULT_VERSION, RESPONSIVE_IMAGE_WIDTH_LG, RESPONSIVE_IMAGE_WIDTHS, RSC_MANIFEST_CACHE_TTL_MS, TSX_LAYOUT_MAX_ENTRIES, Z_INDEX_DEV_INDICATOR, Z_INDEX_ERROR_OVERLAY, } from "./constants/index.js";
19
19
  export { VERSION } from "./version.js";
20
20
  export { type BundleCode as HashBundleCode, computeCodeHash, computeHash, fnv1aHash, shortHash, simpleHash, } from "./hash-utils.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,MAAM,EACN,mBAAmB,EACnB,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,YAAY,EACZ,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,0BAA0B,EAC1B,2BAA2B,EAC3B,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,gBAAgB,EAChB,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,4BAA4B,EAC5B,4BAA4B,EAC5B,cAAc,EACd,oBAAoB,EACpB,OAAO,EACP,mBAAmB,EACnB,iBAAiB,EACjB,4BAA4B,EAC5B,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EACL,KAAK,UAAU,IAAI,cAAc,EACjC,eAAe,EACf,WAAW,EACX,SAAS,EACT,SAAS,EACT,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEpG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7F,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,IAAI,0BAA0B,EAC1D,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,MAAM,EACN,mBAAmB,EACnB,cAAc,EACd,0BAA0B,EAC1B,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,YAAY,EACZ,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,0BAA0B,EAC1B,2BAA2B,EAC3B,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,gBAAgB,EAChB,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,4BAA4B,EAC5B,4BAA4B,EAC5B,cAAc,EACd,oBAAoB,EACpB,OAAO,EACP,mBAAmB,EACnB,iBAAiB,EACjB,4BAA4B,EAC5B,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EACL,KAAK,UAAU,IAAI,cAAc,EACjC,eAAe,EACf,WAAW,EACX,SAAS,EACT,SAAS,EACT,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEpG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7F,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import "../../_dnt.polyfills.js";
15
15
  export { hasBunRuntime, hasDenoRuntime, hasNodeProcess, } from "./runtime-guards.js";
16
- export { agentLogger, bundlerLogger, createJobUserLogger, logger, refreshLoggerConfig, rendererLogger, serverLogger, } from "./logger/index.js";
16
+ export { __registerTraceContextGetter, __registerTraceContextGetter as registerTraceContextGetter, agentLogger, bundlerLogger, createJobUserLogger, logger, refreshLoggerConfig, rendererLogger, runWithRequestContextAsync, serverLogger, } from "./logger/index.js";
17
17
  export { BREAKPOINT_LG, BREAKPOINT_MD, BREAKPOINT_SM, BREAKPOINT_XL, BYTES_PER_KB, DEFAULT_ALLOWED_CDN_HOSTS, DEFAULT_BUILD_CONCURRENCY, DEFAULT_DASHBOARD_PORT, DEFAULT_LRU_MAX_ENTRIES, DEV_SERVER_ENDPOINTS, FORBIDDEN_PATH_PATTERNS, getDenoStdNodeBase, getReactImportMap, HASH_SEED_DJB2, HASH_SEED_FNV1A, HMR_CLIENT_RELOAD_DELAY_MS, HMR_CLOSE_MESSAGE_TOO_LARGE, HMR_CLOSE_NORMAL, HMR_CLOSE_RATE_LIMIT, HMR_MAX_MESSAGE_SIZE_BYTES, HMR_MAX_MESSAGES_PER_MINUTE, HMR_RATE_LIMIT_WINDOW_MS, HTTP_BAD_REQUEST, HTTP_CONTENT_TYPE_IMAGE_GIF, HTTP_CONTENT_TYPE_IMAGE_ICO, HTTP_CONTENT_TYPE_IMAGE_JPEG, HTTP_CONTENT_TYPE_IMAGE_PNG, HTTP_CONTENT_TYPE_IMAGE_SVG, HTTP_CONTENT_TYPE_IMAGE_WEBP, HTTP_CONTENT_TYPES, HTTP_MODULE_FETCH_TIMEOUT_MS, HTTP_NETWORK_CONNECT_TIMEOUT, HTTP_NOT_FOUND, HTTP_NOT_IMPLEMENTED, HTTP_OK, HTTP_REDIRECT_FOUND, HTTP_SERVER_ERROR, HTTP_STATUS_CLIENT_ERROR_MIN, HTTP_STATUS_REDIRECT_MIN, HTTP_STATUS_SERVER_ERROR_MIN, HTTP_STATUS_SUCCESS_MIN, HTTP_UNAVAILABLE, IMAGE_OPTIMIZATION, MAX_BATCH_SIZE, MAX_PATH_LENGTH, MAX_PATH_TRAVERSAL_DEPTH, MS_PER_SECOND, PREFETCH_DEFAULT_DELAY_MS, PREFETCH_DEFAULT_TIMEOUT_MS, PREFETCH_MAX_SIZE_BYTES, REACT_DEFAULT_VERSION, RESPONSIVE_IMAGE_WIDTH_LG, RESPONSIVE_IMAGE_WIDTHS, RSC_MANIFEST_CACHE_TTL_MS, TSX_LAYOUT_MAX_ENTRIES, Z_INDEX_DEV_INDICATOR, Z_INDEX_ERROR_OVERLAY, } from "./constants/index.js";
18
18
  export { VERSION } from "./version.js";
19
19
  export { computeCodeHash, computeHash, fnv1aHash, shortHash, simpleHash, } from "./hash-utils.js";
@@ -43,6 +43,12 @@ export interface LogEntry {
43
43
  task?: string;
44
44
  event_kind?: string;
45
45
  user_visible?: string;
46
+ user_id?: string;
47
+ conversation_id?: string;
48
+ /** @deprecated Use `user_id` instead. Kept for Grafana dashboard transition. */
49
+ userId?: string;
50
+ /** @deprecated Use `conversation_id` instead. Kept for Grafana dashboard transition. */
51
+ conversationId?: string;
46
52
  /** @deprecated Use `duration_ms` instead. Kept for Grafana dashboard transition. Planned removal after Grafana dashboard migration is complete. */
47
53
  durationMs?: number;
48
54
  duration_ms?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/logger/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/logger/logger.ts"],"names":[],"mappings":"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"}
@@ -202,6 +202,11 @@ class ConsoleLogger {
202
202
  extractToEntryField(entry, mergedContext, "event_kind", (v) => String(v));
203
203
  extractToEntryField(entry, mergedContext, "user_visible", (v) => String(v));
204
204
  extractToEntryField(entry, mergedContext, "duration_ms", (v) => Number(v));
205
+ extractToEntryField(entry, mergedContext, "user_id", (v) => String(v));
206
+ extractToEntryField(entry, mergedContext, "conversation_id", (v) => String(v));
207
+ // Also extract camelCase variants so callers can use either convention
208
+ extractToEntryField(entry, mergedContext, "userId", (v) => String(v));
209
+ extractToEntryField(entry, mergedContext, "conversationId", (v) => String(v));
205
210
  // Emit snake_case aliases for camelCase fields (transition period)
206
211
  if (entry.requestId && !entry.request_id)
207
212
  entry.request_id = entry.requestId;
@@ -213,6 +218,11 @@ class ConsoleLogger {
213
218
  entry.project_slug = entry.projectSlug;
214
219
  if (entry.durationMs != null && entry.duration_ms == null)
215
220
  entry.duration_ms = entry.durationMs;
221
+ if (entry.userId && !entry.user_id)
222
+ entry.user_id = entry.userId;
223
+ if (entry.conversationId && !entry.conversation_id) {
224
+ entry.conversation_id = entry.conversationId;
225
+ }
216
226
  if (Object.keys(mergedContext).length > 0)
217
227
  entry.context = mergedContext;
218
228
  if (error)
@@ -14,6 +14,8 @@ export interface RequestContext {
14
14
  projectSlug?: string;
15
15
  projectId?: string;
16
16
  domain?: string;
17
+ userId?: string;
18
+ conversationId?: string;
17
19
  }
18
20
  export declare const requestContextStore: AsyncLocalStorage<RequestContext>;
19
21
  export declare function getRequestContext(): RequestContext | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/logger/request-context.ts"],"names":[],"mappings":"AAAA;;;;;;;4BAO4B;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAkC,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,mBAAmB,mCAA0C,CAAC;AAE3E,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAE9D;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEhF;AAED,wBAAgB,0BAA0B,CAAC,CAAC,EAC1C,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAEZ"}
1
+ {"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/logger/request-context.ts"],"names":[],"mappings":"AAAA;;;;;;;4BAO4B;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAkC,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,mBAAmB,mCAA0C,CAAC;AAE3E,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAE9D;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEhF;AAED,wBAAgB,0BAA0B,CAAC,CAAC,EAC1C,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAEZ"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.231";
1
+ export declare const VERSION = "0.1.233";
2
2
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.231";
3
+ export const VERSION = "0.1.233";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.231",
3
+ "version": "0.1.233",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
@@ -69,6 +69,14 @@
69
69
  "import": "./esm/src/agent/index.js",
70
70
  "types": "./esm/src/agent/index.d.ts"
71
71
  },
72
+ "./agent/conversation-bootstrap": {
73
+ "import": "./esm/src/agent/conversation-bootstrap.js",
74
+ "types": "./esm/src/agent/conversation-bootstrap.d.ts"
75
+ },
76
+ "./agent/durable": {
77
+ "import": "./esm/src/agent/durable.js",
78
+ "types": "./esm/src/agent/durable.d.ts"
79
+ },
72
80
  "./channels/control-plane": {
73
81
  "import": "./esm/src/channels/control-plane.js",
74
82
  "types": "./esm/src/channels/control-plane.d.ts"
package/src/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.231",
3
+ "version": "0.1.233",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "workspace": [
@@ -30,6 +30,8 @@ export default {
30
30
  "./markdown": "./src/markdown/index.ts",
31
31
  "./mdx": "./src/mdx/index.ts",
32
32
  "./agent": "./src/agent/index.ts",
33
+ "./agent/conversation-bootstrap": "./src/agent/conversation-bootstrap.ts",
34
+ "./agent/durable": "./src/agent/durable.ts",
33
35
  "./channels/control-plane": "./src/channels/control-plane.ts",
34
36
  "./channels/invoke": "./src/channels/invoke.ts",
35
37
  "./tool": "./src/tool/index.ts",
@@ -0,0 +1,195 @@
1
+ import "../../_dnt.polyfills.js";
2
+ import * as dntShim from "../../_dnt.shims.js";
3
+ import { z } from "zod";
4
+ import { type ConversationRunProjection, createConversationAgentRun } from "./durable.js";
5
+
6
+ const CONVERSATION_API_TIMEOUT_MS = 15_000;
7
+
8
+ export const ConversationRecordSchema = z
9
+ .object({
10
+ id: z.string(),
11
+ projectId: z.string().nullable().optional(),
12
+ project_id: z.string().nullable().optional(),
13
+ })
14
+ .passthrough()
15
+ .transform((data) => ({
16
+ id: data.id,
17
+ projectId: data.projectId ?? data.project_id ?? null,
18
+ }));
19
+
20
+ export const ConversationMessageRecordSchema = z.object({
21
+ id: z.string().uuid(),
22
+ });
23
+
24
+ export type ConversationRecord = z.infer<typeof ConversationRecordSchema>;
25
+ export type ConversationMessageRecord = z.infer<typeof ConversationMessageRecordSchema>;
26
+
27
+ async function controlPlaneJson<T>(input: {
28
+ authToken: string;
29
+ url: string;
30
+ method?: "GET" | "POST" | "PATCH";
31
+ body?: unknown;
32
+ responseSchema: z.ZodSchema<T>;
33
+ operation: string;
34
+ }): Promise<T> {
35
+ const controller = new AbortController();
36
+ const timeout = dntShim.setTimeout(() => controller.abort(), CONVERSATION_API_TIMEOUT_MS);
37
+
38
+ let response: Response;
39
+ try {
40
+ response = await fetch(input.url, {
41
+ method: input.method ?? "GET",
42
+ headers: {
43
+ Authorization: `Bearer ${input.authToken}`,
44
+ "Content-Type": "application/json",
45
+ },
46
+ ...(input.body !== undefined ? { body: JSON.stringify(input.body) } : {}),
47
+ signal: controller.signal,
48
+ });
49
+ } catch (error) {
50
+ if (error instanceof DOMException && error.name === "AbortError") {
51
+ throw new Error(`${input.operation} timed out after ${CONVERSATION_API_TIMEOUT_MS}ms`);
52
+ }
53
+ throw error;
54
+ } finally {
55
+ clearTimeout(timeout);
56
+ }
57
+
58
+ if (!response.ok) {
59
+ const body = await response.text().catch(() => "");
60
+ throw new Error(
61
+ `${input.operation} failed (${response.status}): ${body || response.statusText}`,
62
+ );
63
+ }
64
+
65
+ return input.responseSchema.parse(await response.json());
66
+ }
67
+
68
+ function buildConversationPath(apiUrl: string, conversationId: string): string {
69
+ return `${apiUrl}/conversations/${conversationId}`;
70
+ }
71
+
72
+ function buildConversationMessagesPath(apiUrl: string, conversationId: string): string {
73
+ return `${buildConversationPath(apiUrl, conversationId)}/messages`;
74
+ }
75
+
76
+ export async function fetchConversationRecord(input: {
77
+ authToken: string;
78
+ apiUrl: string;
79
+ conversationId: string;
80
+ }): Promise<ConversationRecord> {
81
+ return controlPlaneJson({
82
+ authToken: input.authToken,
83
+ url: buildConversationPath(input.apiUrl, input.conversationId),
84
+ responseSchema: ConversationRecordSchema,
85
+ operation: "Fetch conversation",
86
+ });
87
+ }
88
+
89
+ export async function ensureConversationProjectLink(input: {
90
+ authToken: string;
91
+ apiUrl: string;
92
+ conversationId: string;
93
+ projectId: string;
94
+ }): Promise<void> {
95
+ const conversation = await fetchConversationRecord(input);
96
+
97
+ if (conversation.projectId === input.projectId) return;
98
+ if (conversation.projectId !== null) {
99
+ throw new Error(
100
+ `Conversation ${input.conversationId} is already linked to a different project (${conversation.projectId})`,
101
+ );
102
+ }
103
+
104
+ await controlPlaneJson({
105
+ authToken: input.authToken,
106
+ url: buildConversationPath(input.apiUrl, input.conversationId),
107
+ method: "PATCH",
108
+ body: { project_id: input.projectId },
109
+ responseSchema: ConversationRecordSchema,
110
+ operation: "Link conversation to project",
111
+ });
112
+ }
113
+
114
+ export async function createConversationRecord(input: {
115
+ authToken: string;
116
+ apiUrl: string;
117
+ body: unknown;
118
+ }): Promise<ConversationRecord> {
119
+ return controlPlaneJson({
120
+ authToken: input.authToken,
121
+ url: `${input.apiUrl}/conversations`,
122
+ method: "POST",
123
+ body: input.body,
124
+ responseSchema: ConversationRecordSchema,
125
+ operation: "Create conversation",
126
+ });
127
+ }
128
+
129
+ export async function createConversationMessage(input: {
130
+ authToken: string;
131
+ apiUrl: string;
132
+ conversationId: string;
133
+ body: unknown;
134
+ }): Promise<ConversationMessageRecord> {
135
+ return controlPlaneJson({
136
+ authToken: input.authToken,
137
+ url: buildConversationMessagesPath(input.apiUrl, input.conversationId),
138
+ method: "POST",
139
+ body: input.body,
140
+ responseSchema: ConversationMessageRecordSchema,
141
+ operation: "Create conversation message",
142
+ });
143
+ }
144
+
145
+ export interface BootstrapConversationAgentRunResult {
146
+ conversation: ConversationRecord;
147
+ message: ConversationMessageRecord;
148
+ run: ConversationRunProjection;
149
+ }
150
+
151
+ export async function bootstrapConversationAgentRun(input: {
152
+ authToken: string;
153
+ apiUrl: string;
154
+ parentConversationId?: string;
155
+ ensureProjectId?: string;
156
+ conversationBody: unknown;
157
+ handoffMessageBody: unknown;
158
+ runId?: string;
159
+ agentId: string;
160
+ projectId?: string | null;
161
+ branchId?: string | null;
162
+ }): Promise<BootstrapConversationAgentRunResult> {
163
+ if (input.parentConversationId && input.ensureProjectId) {
164
+ await ensureConversationProjectLink({
165
+ authToken: input.authToken,
166
+ apiUrl: input.apiUrl,
167
+ conversationId: input.parentConversationId,
168
+ projectId: input.ensureProjectId,
169
+ });
170
+ }
171
+
172
+ const conversation = await createConversationRecord({
173
+ authToken: input.authToken,
174
+ apiUrl: input.apiUrl,
175
+ body: input.conversationBody,
176
+ });
177
+ const effectiveProjectId = input.projectId ?? conversation.projectId;
178
+ const message = await createConversationMessage({
179
+ authToken: input.authToken,
180
+ apiUrl: input.apiUrl,
181
+ conversationId: conversation.id,
182
+ body: input.handoffMessageBody,
183
+ });
184
+ const run = await createConversationAgentRun({
185
+ authToken: input.authToken,
186
+ apiUrl: input.apiUrl,
187
+ conversationId: conversation.id,
188
+ runId: input.runId,
189
+ agentId: input.agentId,
190
+ projectId: effectiveProjectId,
191
+ branchId: input.branchId,
192
+ });
193
+
194
+ return { conversation, message, run };
195
+ }