@koda-sl/baker-bridge 0.49.0-dev.3bcc79f9c → 0.49.0-dev.8dd40a2da

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 (66) hide show
  1. package/README.md +13 -24
  2. package/dist/cli.d.ts +1 -1
  3. package/dist/cli.js +1 -1
  4. package/dist/hono/agent.d.ts +2 -2
  5. package/dist/hono/agent.d.ts.map +1 -1
  6. package/dist/hono/agent.js +2 -9
  7. package/dist/hono/agent.js.map +1 -1
  8. package/dist/hono/agent.test.js +1 -122
  9. package/dist/hono/agent.test.js.map +1 -1
  10. package/dist/hono/bridge-job.d.ts +1 -4
  11. package/dist/hono/bridge-job.d.ts.map +1 -1
  12. package/dist/hono/bridge-job.js +13 -28
  13. package/dist/hono/bridge-job.js.map +1 -1
  14. package/dist/hono/bridge-job.test.js +35 -61
  15. package/dist/hono/bridge-job.test.js.map +1 -1
  16. package/dist/hono/callback.d.ts.map +1 -1
  17. package/dist/hono/callback.js +2 -2
  18. package/dist/hono/callback.js.map +1 -1
  19. package/dist/hono/convex.d.ts +1 -2
  20. package/dist/hono/convex.d.ts.map +1 -1
  21. package/dist/hono/convex.js +1 -2
  22. package/dist/hono/convex.js.map +1 -1
  23. package/dist/hono/convex.test.js +4 -6
  24. package/dist/hono/convex.test.js.map +1 -1
  25. package/dist/hono/prompt-context.d.ts +3 -0
  26. package/dist/hono/prompt-context.d.ts.map +1 -0
  27. package/dist/hono/prompt-context.js +13 -0
  28. package/dist/hono/prompt-context.js.map +1 -0
  29. package/dist/hono/prompt-context.test.d.ts +2 -0
  30. package/dist/hono/prompt-context.test.d.ts.map +1 -0
  31. package/dist/hono/prompt-context.test.js +39 -0
  32. package/dist/hono/prompt-context.test.js.map +1 -0
  33. package/dist/hono/relay.d.ts +0 -2
  34. package/dist/hono/relay.d.ts.map +1 -1
  35. package/dist/hono/relay.js +0 -2
  36. package/dist/hono/relay.js.map +1 -1
  37. package/dist/hono/session-continuity.d.ts +1 -1
  38. package/dist/hono/session-continuity.d.ts.map +1 -1
  39. package/dist/hono/session-continuity.js.map +1 -1
  40. package/dist/hono/types.d.ts +1 -3
  41. package/dist/hono/types.d.ts.map +1 -1
  42. package/package.json +1 -1
  43. package/dist/hono/chat-change.d.ts +0 -102
  44. package/dist/hono/chat-change.d.ts.map +0 -1
  45. package/dist/hono/chat-change.js +0 -51
  46. package/dist/hono/chat-change.js.map +0 -1
  47. package/dist/hono/guards/__tests__/google-ads-rsa.test.d.ts +0 -2
  48. package/dist/hono/guards/__tests__/google-ads-rsa.test.d.ts.map +0 -1
  49. package/dist/hono/guards/__tests__/google-ads-rsa.test.js +0 -65
  50. package/dist/hono/guards/__tests__/google-ads-rsa.test.js.map +0 -1
  51. package/dist/hono/guards/google-ads-rsa.d.ts +0 -3
  52. package/dist/hono/guards/google-ads-rsa.d.ts.map +0 -1
  53. package/dist/hono/guards/google-ads-rsa.js +0 -32
  54. package/dist/hono/guards/google-ads-rsa.js.map +0 -1
  55. package/dist/hono/guards.d.ts +0 -3
  56. package/dist/hono/guards.d.ts.map +0 -1
  57. package/dist/hono/guards.js +0 -9
  58. package/dist/hono/guards.js.map +0 -1
  59. package/dist/hono/turn-result.d.ts +0 -36
  60. package/dist/hono/turn-result.d.ts.map +0 -1
  61. package/dist/hono/turn-result.js +0 -207
  62. package/dist/hono/turn-result.js.map +0 -1
  63. package/dist/hono/turn-result.test.d.ts +0 -2
  64. package/dist/hono/turn-result.test.d.ts.map +0 -1
  65. package/dist/hono/turn-result.test.js +0 -63
  66. package/dist/hono/turn-result.test.js.map +0 -1
@@ -1,65 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { validateAssistantOutputGuards } from "../../guards.js";
3
- import { TurnResultIntake } from "../../turn-result.js";
4
- import { validateGoogleAdsRsaAssets } from "../google-ads-rsa.js";
5
- function turnResultWithAssets(headlines, descriptions) {
6
- const result = TurnResultIntake.fromStructuredOutput({
7
- changes: [],
8
- outputGuards: {
9
- googleAdsRsa: {
10
- assets: { headlines, descriptions },
11
- },
12
- },
13
- });
14
- expect(result).not.toBeNull();
15
- return result;
16
- }
17
- describe("Google Ads RSA output guard", () => {
18
- it("accepts valid RSA headlines and descriptions declared in Turn Result output", () => {
19
- const result = turnResultWithAssets(["Book a Free Demo", "Cut Wasted Ad Spend"], ["Find leaks in your account and fix wasted spend before next month."]);
20
- expect(() => validateAssistantOutputGuards(result)).not.toThrow();
21
- });
22
- it("rejects RSA assets over Google character limits with a clear error", () => {
23
- const result = turnResultWithAssets(["This Headline Is Definitely Over Thirty Characters"], ["This description is intentionally longer than ninety characters so the bridge rejects it before completion."]);
24
- expect(() => validateAssistantOutputGuards(result)).toThrow('Google Ads RSA output guard failed: headline 1 is 50 characters (max 30): "This Headline Is Definitely Over Thirty Characters"; description 1 is 107 characters (max 90): "This description is intentionally longer than ninety characters so the bridge rejects it before completion."');
25
- });
26
- it("allows legacy Turn Result output without output guards", () => {
27
- const result = TurnResultIntake.fromStructuredOutput({ changes: [] });
28
- expect(result).toEqual({ changes: [] });
29
- expect(() => validateAssistantOutputGuards(result)).not.toThrow();
30
- });
31
- it("exposes optional googleAdsRsa assets in the structured output schema", () => {
32
- const outputFormat = TurnResultIntake.outputFormat();
33
- expect(outputFormat).toMatchObject({
34
- type: "json_schema",
35
- schema: {
36
- properties: {
37
- outputGuards: {
38
- properties: {
39
- googleAdsRsa: {
40
- required: ["assets"],
41
- properties: {
42
- assets: {
43
- properties: {
44
- headlines: { type: "array", items: { type: "string" } },
45
- descriptions: { type: "array", items: { type: "string" } },
46
- },
47
- },
48
- },
49
- },
50
- },
51
- },
52
- },
53
- },
54
- });
55
- });
56
- });
57
- describe("validateGoogleAdsRsaAssets", () => {
58
- it("recomputes lengths from asset text", () => {
59
- expect(() => validateGoogleAdsRsaAssets({
60
- headlines: ["123456789012345678901234567890"],
61
- descriptions: ["1".repeat(90)],
62
- })).not.toThrow();
63
- });
64
- });
65
- //# sourceMappingURL=google-ads-rsa.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-ads-rsa.test.js","sourceRoot":"","sources":["../../../../src/hono/guards/__tests__/google-ads-rsa.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { GoogleAdsRsaAssets } from "../turn-result.ts";
2
- export declare function validateGoogleAdsRsaAssets(assets: GoogleAdsRsaAssets): void;
3
- //# sourceMappingURL=google-ads-rsa.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-ads-rsa.d.ts","sourceRoot":"","sources":["../../../src/hono/guards/google-ads-rsa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAkC5D,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAc3E"}
@@ -1,32 +0,0 @@
1
- const HEADLINE_MAX_LENGTH = 30;
2
- const DESCRIPTION_MAX_LENGTH = 90;
3
- function countGoogleAdsCharacters(value) {
4
- return Array.from(value).length;
5
- }
6
- function collectViolations(assets) {
7
- const violations = [];
8
- assets.headlines.forEach((text, index) => {
9
- const length = countGoogleAdsCharacters(text);
10
- if (length > HEADLINE_MAX_LENGTH) {
11
- violations.push({ kind: "headline", index, maxLength: HEADLINE_MAX_LENGTH, text, length });
12
- }
13
- });
14
- assets.descriptions.forEach((text, index) => {
15
- const length = countGoogleAdsCharacters(text);
16
- if (length > DESCRIPTION_MAX_LENGTH) {
17
- violations.push({ kind: "description", index, maxLength: DESCRIPTION_MAX_LENGTH, text, length });
18
- }
19
- });
20
- return violations;
21
- }
22
- export function validateGoogleAdsRsaAssets(assets) {
23
- const violations = collectViolations(assets);
24
- if (violations.length === 0) {
25
- return;
26
- }
27
- const details = violations
28
- .map((violation) => `${violation.kind} ${String(violation.index + 1)} is ${String(violation.length)} characters (max ${String(violation.maxLength)}): "${violation.text}"`)
29
- .join("; ");
30
- throw new Error(`Google Ads RSA output guard failed: ${details}`);
31
- }
32
- //# sourceMappingURL=google-ads-rsa.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-ads-rsa.js","sourceRoot":"","sources":["../../../src/hono/guards/google-ads-rsa.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,SAAS,wBAAwB,CAAC,KAAa;IAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAClC,CAAC;AAUD,SAAS,iBAAiB,CAAC,MAA0B;IACnD,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,MAAM,GAAG,mBAAmB,EAAE,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,MAAM,GAAG,sBAAsB,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACnG,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAA0B;IACnE,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,UAAU;SACvB,GAAG,CACF,CAAC,SAAS,EAAE,EAAE,CACZ,GAAG,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,MAAM,CACvG,SAAS,CAAC,SAAS,CACpB,OAAO,SAAS,CAAC,IAAI,GAAG,CAC5B;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC;AACpE,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { NormalizedTurnResult } from "./turn-result.ts";
2
- export declare function validateAssistantOutputGuards(turnResult: NormalizedTurnResult | null): void;
3
- //# sourceMappingURL=guards.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/hono/guards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAM3F"}
@@ -1,9 +0,0 @@
1
- import { validateGoogleAdsRsaAssets } from "./guards/google-ads-rsa.js";
2
- export function validateAssistantOutputGuards(turnResult) {
3
- const googleAdsRsa = turnResult?.outputGuards?.googleAdsRsa;
4
- if (!googleAdsRsa) {
5
- return;
6
- }
7
- validateGoogleAdsRsaAssets(googleAdsRsa.assets);
8
- }
9
- //# sourceMappingURL=guards.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/hono/guards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAGxE,MAAM,UAAU,6BAA6B,CAAC,UAAuC;IACnF,MAAM,YAAY,GAAG,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;IAC5D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IACD,0BAA0B,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC"}
@@ -1,36 +0,0 @@
1
- import type { OutputFormat, SDKMessage } from "@anthropic-ai/claude-agent-sdk";
2
- import type { ChatChange } from "./chat-change.ts";
3
- import type { CurrentReference } from "./types.ts";
4
- declare function turnResultOutputFormat(): OutputFormat;
5
- export interface GoogleAdsRsaAssets {
6
- headlines: string[];
7
- descriptions: string[];
8
- }
9
- export interface NormalizedOutputGuards {
10
- googleAdsRsa?: {
11
- assets: GoogleAdsRsaAssets;
12
- };
13
- }
14
- export interface NormalizedTurnResult {
15
- changes: ChatChange[];
16
- outputGuards?: NormalizedOutputGuards;
17
- }
18
- type TurnResultCallbackPayload = {
19
- turnResult?: {
20
- changes: ChatChange[];
21
- };
22
- };
23
- declare function normalizeTurnResult(input: unknown): NormalizedTurnResult | null;
24
- declare function callbackPayload(turnResult: NormalizedTurnResult | null | undefined, isError: boolean): TurnResultCallbackPayload;
25
- declare function appendCurrentChangesContext(prompt: string, currentChanges: ChatChange[] | undefined): string;
26
- declare function appendCurrentReferenceContext(prompt: string, currentReference: CurrentReference | undefined): string;
27
- export declare const TurnResultIntake: {
28
- readonly outputFormat: typeof turnResultOutputFormat;
29
- readonly appendCurrentChangesContext: typeof appendCurrentChangesContext;
30
- readonly appendCurrentReferenceContext: typeof appendCurrentReferenceContext;
31
- readonly fromStructuredOutput: typeof normalizeTurnResult;
32
- readonly fromSdkMessage: (message: SDKMessage) => NormalizedTurnResult | null;
33
- readonly callbackPayload: typeof callbackPayload;
34
- };
35
- export {};
36
- //# sourceMappingURL=turn-result.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"turn-result.d.ts","sourceRoot":"","sources":["../../src/hono/turn-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,EAA4B,UAAU,EAAgC,MAAM,kBAAkB,CAAC;AAQ3G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,iBAAS,sBAAsB,IAAI,YAAY,CAmD9C;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,kBAAkB,CAAC;KAC5B,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,sBAAsB,CAAC;CACvC;AAED,KAAK,yBAAyB,GAAG;IAAE,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,UAAU,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAsG5E,iBAAS,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAuBxE;AAMD,iBAAS,eAAe,CACtB,UAAU,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,EACnD,OAAO,EAAE,OAAO,GACf,yBAAyB,CAK3B;AAED,iBAAS,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,SAAS,GAAG,MAAM,CAKrG;AAED,iBAAS,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,GAAG,MAAM,CAW7G;AAED,eAAO,MAAM,gBAAgB;;;;;uCAKH,UAAU,KAAG,oBAAoB,GAAG,IAAI;;CAIxD,CAAC"}
@@ -1,207 +0,0 @@
1
- import { CHANGE_ACTIONS, CHANGE_TYPES, chatChangeJsonSchema, DOCUMENT_FORMATS, REPORT_STATUSES, } from "./chat-change.js";
2
- function turnResultOutputFormat() {
3
- return {
4
- type: "json_schema",
5
- schema: {
6
- type: "object",
7
- additionalProperties: false,
8
- required: ["changes"],
9
- properties: {
10
- changes: {
11
- type: "array",
12
- description: "Full accumulated Chat Changes snapshot after this turn. Include only satisfied artifact changes. Return [] only when no satisfied artifact changes remain.",
13
- items: chatChangeJsonSchema,
14
- },
15
- summary: { type: "string" },
16
- notes: {
17
- type: "array",
18
- items: {
19
- type: "object",
20
- additionalProperties: false,
21
- required: ["kind", "message"],
22
- properties: {
23
- kind: { enum: ["info", "warning", "next_step"] },
24
- message: { type: "string" },
25
- },
26
- },
27
- },
28
- outputGuards: {
29
- type: "object",
30
- additionalProperties: false,
31
- properties: {
32
- googleAdsRsa: {
33
- type: "object",
34
- additionalProperties: false,
35
- required: ["assets"],
36
- properties: {
37
- assets: {
38
- type: "object",
39
- additionalProperties: false,
40
- properties: {
41
- headlines: { type: "array", items: { type: "string" } },
42
- descriptions: { type: "array", items: { type: "string" } },
43
- },
44
- },
45
- },
46
- },
47
- },
48
- },
49
- },
50
- },
51
- };
52
- }
53
- function isRecord(value) {
54
- return Boolean(value && typeof value === "object" && !Array.isArray(value));
55
- }
56
- function isChangeType(value) {
57
- return typeof value === "string" && CHANGE_TYPES.includes(value);
58
- }
59
- function isChangeAction(value) {
60
- return typeof value === "string" && CHANGE_ACTIONS.includes(value);
61
- }
62
- function isReportStatus(value) {
63
- return typeof value === "string" && REPORT_STATUSES.includes(value);
64
- }
65
- function isDocumentFormat(value) {
66
- return typeof value === "string" && DOCUMENT_FORMATS.includes(value);
67
- }
68
- function optionalString(source, key) {
69
- const value = source[key];
70
- return typeof value === "string" ? value : undefined;
71
- }
72
- function optionalNumber(source, key) {
73
- const value = source[key];
74
- return typeof value === "number" && Number.isFinite(value) ? value : undefined;
75
- }
76
- function optionalStringArray(source, key) {
77
- const value = source[key];
78
- if (value === undefined) {
79
- return [];
80
- }
81
- if (!Array.isArray(value) || value.some((item) => typeof item !== "string")) {
82
- return null;
83
- }
84
- return value;
85
- }
86
- function normalizeOutputGuards(input) {
87
- if (input === undefined) {
88
- return undefined;
89
- }
90
- if (!isRecord(input)) {
91
- return null;
92
- }
93
- if (input.googleAdsRsa === undefined) {
94
- return {};
95
- }
96
- if (!isRecord(input.googleAdsRsa)) {
97
- return null;
98
- }
99
- const assets = input.googleAdsRsa.assets;
100
- if (!isRecord(assets)) {
101
- return null;
102
- }
103
- const headlines = optionalStringArray(assets, "headlines");
104
- const descriptions = optionalStringArray(assets, "descriptions");
105
- if (!headlines || !descriptions) {
106
- return null;
107
- }
108
- return { googleAdsRsa: { assets: { headlines, descriptions } } };
109
- }
110
- function normalizeChange(input) {
111
- if (!isRecord(input)) {
112
- return null;
113
- }
114
- const type = input.type;
115
- const action = input.action;
116
- const slug = typeof input.slug === "string" ? input.slug.trim() : "";
117
- if (!isChangeType(type) || !isChangeAction(action) || !slug) {
118
- return null;
119
- }
120
- const change = { type, slug, action };
121
- const contentVersion = optionalNumber(input, "contentVersion");
122
- if (contentVersion !== undefined)
123
- change.contentVersion = contentVersion;
124
- if (change.type === "document" && isDocumentFormat(input.format)) {
125
- change.format = input.format;
126
- }
127
- if (change.type !== "report") {
128
- return change;
129
- }
130
- const status = input.status;
131
- if (isReportStatus(status)) {
132
- change.status = status;
133
- }
134
- for (const key of ["title", "description", "intent", "sourcePath", "errorMessage"]) {
135
- const value = optionalString(input, key);
136
- if (value !== undefined)
137
- change[key] = value;
138
- }
139
- for (const key of ["definitionContentVersion", "dashboardContentVersion", "endpointContentVersion"]) {
140
- const value = optionalNumber(input, key);
141
- if (value !== undefined)
142
- change[key] = value;
143
- }
144
- return change;
145
- }
146
- function normalizeTurnResult(input) {
147
- if (!isRecord(input) || !Array.isArray(input.changes)) {
148
- return null;
149
- }
150
- const byArtifact = new Map();
151
- for (const item of input.changes) {
152
- const change = normalizeChange(item);
153
- if (!change) {
154
- return null;
155
- }
156
- byArtifact.set(`${change.type}:${change.slug}`, change);
157
- }
158
- const outputGuards = normalizeOutputGuards(input.outputGuards);
159
- if (outputGuards === null) {
160
- return null;
161
- }
162
- return {
163
- changes: [...byArtifact.values()].sort((left, right) => {
164
- const typeOrder = left.type.localeCompare(right.type);
165
- return typeOrder === 0 ? left.slug.localeCompare(right.slug) : typeOrder;
166
- }),
167
- ...(outputGuards && { outputGuards }),
168
- };
169
- }
170
- function structuredOutputFromSdkMessage(message) {
171
- return message.structured_output;
172
- }
173
- function callbackPayload(turnResult, isError) {
174
- if (!turnResult || isError) {
175
- return {};
176
- }
177
- return { turnResult: { changes: turnResult.changes } };
178
- }
179
- function appendCurrentChangesContext(prompt, currentChanges) {
180
- if (!currentChanges) {
181
- return prompt;
182
- }
183
- return `${prompt}\n\nCurrent Chat Changes snapshot:\n${JSON.stringify(currentChanges, null, 2)}`;
184
- }
185
- function appendCurrentReferenceContext(prompt, currentReference) {
186
- if (!currentReference) {
187
- return prompt;
188
- }
189
- // Values come from Baker's own reference system, but strip newlines and cap
190
- // length so a crafted title can't inject extra instructions into the prompt.
191
- const sanitize = (value, max) => value.replace(/[\r\n]+/g, " ").slice(0, max);
192
- const type = sanitize(currentReference.type, 64);
193
- const title = sanitize(currentReference.title, 200);
194
- const slug = sanitize(currentReference.slug, 200);
195
- return `${prompt}\n\nThe user is currently viewing this output in the preview pane: ${type} "${title}" (slug: ${slug}). When the user refers to "this", "it", or the output without naming one, assume they mean this unless the message clearly indicates otherwise.`;
196
- }
197
- export const TurnResultIntake = {
198
- outputFormat: turnResultOutputFormat,
199
- appendCurrentChangesContext,
200
- appendCurrentReferenceContext,
201
- fromStructuredOutput: normalizeTurnResult,
202
- fromSdkMessage(message) {
203
- return normalizeTurnResult(structuredOutputFromSdkMessage(message));
204
- },
205
- callbackPayload,
206
- };
207
- //# sourceMappingURL=turn-result.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"turn-result.js","sourceRoot":"","sources":["../../src/hono/turn-result.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=turn-result.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"turn-result.test.d.ts","sourceRoot":"","sources":["../../src/hono/turn-result.test.ts"],"names":[],"mappings":""}
@@ -1,63 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { TurnResultIntake } from "./turn-result.js";
3
- describe("TurnResultIntake", () => {
4
- it("describes document format metadata in the structured output schema", () => {
5
- const outputFormat = TurnResultIntake.outputFormat();
6
- const schema = outputFormat.schema;
7
- const documentSchema = schema.properties.changes.items.oneOf.find((item) => item.properties.type.const === "document");
8
- expect(documentSchema?.properties.format).toEqual({ enum: ["pdf", "pptx", "docx", "xlsx", "csv", "json"] });
9
- });
10
- it("normalizes a valid Turn Result snapshot behind the intake interface", () => {
11
- expect(TurnResultIntake.fromStructuredOutput({
12
- changes: [
13
- { type: "report", slug: "ads-pacing", action: "created", title: "Ads pacing", status: "active" },
14
- { type: "landing", slug: "home", action: "created" },
15
- { type: "landing", slug: "home", action: "updated", contentVersion: 2 },
16
- ],
17
- })).toEqual({
18
- changes: [
19
- { type: "landing", slug: "home", action: "updated", contentVersion: 2 },
20
- { type: "report", slug: "ads-pacing", action: "created", title: "Ads pacing", status: "active" },
21
- ],
22
- });
23
- });
24
- it("preserves valid document format metadata on document changes", () => {
25
- expect(TurnResultIntake.fromStructuredOutput({
26
- changes: [
27
- { type: "document", slug: "quarterly-model", action: "updated", format: "xlsx" },
28
- { type: "document", slug: "customer-export", action: "created", format: "csv" },
29
- { type: "document", slug: "tracking-config", action: "created", format: "json" },
30
- ],
31
- })).toEqual({
32
- changes: [
33
- { type: "document", slug: "customer-export", action: "created", format: "csv" },
34
- { type: "document", slug: "quarterly-model", action: "updated", format: "xlsx" },
35
- { type: "document", slug: "tracking-config", action: "created", format: "json" },
36
- ],
37
- });
38
- });
39
- it("ignores document format metadata on non-document changes", () => {
40
- expect(TurnResultIntake.fromStructuredOutput({
41
- changes: [{ type: "landing", slug: "home", action: "updated", format: "xlsx" }],
42
- })).toEqual({ changes: [{ type: "landing", slug: "home", action: "updated" }] });
43
- });
44
- it("treats omitted, invalid, and empty snapshots with completion-safe semantics", () => {
45
- expect(TurnResultIntake.fromStructuredOutput(undefined)).toBeNull();
46
- expect(TurnResultIntake.fromStructuredOutput({ changes: [{ type: "landing", slug: "", action: "updated" }] })).toBeNull();
47
- expect(TurnResultIntake.fromStructuredOutput({ changes: [] })).toEqual({ changes: [] });
48
- });
49
- it("builds the Convex callback payload only for valid successful snapshots", () => {
50
- const emptySnapshot = TurnResultIntake.fromStructuredOutput({ changes: [] });
51
- const validSnapshot = TurnResultIntake.fromStructuredOutput({
52
- changes: [{ type: "landing", slug: "home", action: "updated" }],
53
- outputGuards: { googleAdsRsa: { assets: { headlines: ["Short"], descriptions: ["Short description"] } } },
54
- });
55
- expect(TurnResultIntake.callbackPayload(emptySnapshot, false)).toEqual({ turnResult: { changes: [] } });
56
- expect(TurnResultIntake.callbackPayload(validSnapshot, false)).toEqual({
57
- turnResult: { changes: [{ type: "landing", slug: "home", action: "updated" }] },
58
- });
59
- expect(TurnResultIntake.callbackPayload(validSnapshot, true)).toEqual({});
60
- expect(TurnResultIntake.callbackPayload(null, false)).toEqual({});
61
- });
62
- });
63
- //# sourceMappingURL=turn-result.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"turn-result.test.js","sourceRoot":"","sources":["../../src/hono/turn-result.test.ts"],"names":[],"mappings":"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"}