@polpo-ai/core 0.16.0 → 0.16.1
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.
|
@@ -2,8 +2,28 @@
|
|
|
2
2
|
import type { AllowedToolsSettings } from "./tool-policy.js";
|
|
3
3
|
export declare const DEFAULT_CHAT_SUGGESTION_COUNT = 3;
|
|
4
4
|
export declare const MIN_CHAT_SUGGESTION_COUNT = 2;
|
|
5
|
-
export declare const MAX_CHAT_SUGGESTION_COUNT =
|
|
5
|
+
export declare const MAX_CHAT_SUGGESTION_COUNT = 5;
|
|
6
6
|
export declare const MAX_CHAT_SUGGESTION_GUIDANCE_CHARS = 500;
|
|
7
|
+
export declare const MAX_CHAT_SUGGESTION_CONTEXT_CHARS = 8192;
|
|
8
|
+
export declare const MAX_CHAT_SUGGESTION_CONTEXT_DEPTH = 8;
|
|
9
|
+
export type ChatSuggestionContextValue = string | number | boolean | null | ChatSuggestionContextValue[] | {
|
|
10
|
+
[key: string]: ChatSuggestionContextValue;
|
|
11
|
+
};
|
|
12
|
+
/** Request-scoped hints supplied by the application; never authorization policy. */
|
|
13
|
+
export interface ChatSuggestionRequestOptions {
|
|
14
|
+
/** An options object opts in unless explicitly disabled. Agent policy still applies. */
|
|
15
|
+
enabled?: boolean;
|
|
16
|
+
/** Override the agent's count for this turn (2-5). */
|
|
17
|
+
maxItems?: number;
|
|
18
|
+
/** Phase guidance, used in addition to the agent's static guidance (500 characters). */
|
|
19
|
+
guidance?: string;
|
|
20
|
+
/** JSON snapshot of application state, at most 8192 serialized characters / 8 levels. */
|
|
21
|
+
context?: Record<string, ChatSuggestionContextValue>;
|
|
22
|
+
}
|
|
23
|
+
/** Validate bounded JSON before it reaches an auxiliary model or durable request. */
|
|
24
|
+
export declare function normalizeChatSuggestionRequest(value: unknown): ChatSuggestionRequestOptions & {
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
};
|
|
7
27
|
export declare const ASK_USER_QUESTION_TOOL_NAME: "ask_user_question";
|
|
8
28
|
/** Client-rendered tools that may suspend a direct chat turn. */
|
|
9
29
|
export declare const CLIENT_INTERACTION_TOOL_NAMES: readonly ["ask_user_question"];
|
|
@@ -19,7 +39,7 @@ export interface ChatSuggestion {
|
|
|
19
39
|
export interface ChatSuggestionSettings {
|
|
20
40
|
/** Generate suggested next messages after successful text responses. */
|
|
21
41
|
enabled?: boolean;
|
|
22
|
-
/** Maximum suggestions returned per response. Allowed range: 2-
|
|
42
|
+
/** Maximum suggestions returned per response. Allowed range: 2-5. */
|
|
23
43
|
maxItems?: number;
|
|
24
44
|
/** Optional agent-specific guidance for suggestion generation. */
|
|
25
45
|
guidance?: string;
|
|
@@ -41,7 +61,7 @@ export interface NormalizedChatInteractionSettings {
|
|
|
41
61
|
}
|
|
42
62
|
export interface ChatInteractionClientCapabilities {
|
|
43
63
|
ask_user_question?: boolean;
|
|
44
|
-
suggestions?: boolean;
|
|
64
|
+
suggestions?: boolean | ChatSuggestionRequestOptions;
|
|
45
65
|
}
|
|
46
66
|
export interface ResolvedChatInteractionCapabilities {
|
|
47
67
|
askUserQuestion: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-interactions.d.ts","sourceRoot":"","sources":["../src/chat-interactions.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,kCAAkC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-interactions.d.ts","sourceRoot":"","sources":["../src/chat-interactions.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,kCAAkC,MAAM,CAAC;AACtD,eAAO,MAAM,iCAAiC,OAAQ,CAAC;AACvD,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAEnD,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GACrE,0BAA0B,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,0BAA0B,CAAA;CAAE,CAAC;AAEjF,oFAAoF;AACpF,MAAM,WAAW,4BAA4B;IAC3C,wFAAwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;CACtD;AAED,qFAAqF;AACrF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,4BAA4B,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAuClH;AAED,eAAO,MAAM,2BAA2B,EAAG,mBAA4B,CAAC;AAExE,iEAAiE;AACjE,eAAO,MAAM,6BAA6B,gCAEhC,CAAC;AAEX,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAGzD;AAED,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAwB,SAAQ,oBAAoB;IACnE,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,0DAA0D;IAC1D,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC;AAED,MAAM,WAAW,iCAAiC;IAChD,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,iCAAiC;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,GAAG,4BAA4B,CAAC;CACtD;AAED,MAAM,WAAW,mCAAmC;IAClD,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;CACtB;AAgBD,wEAAwE;AACxE,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,GACb,iCAAiC,CA+DnC;AAED,8EAA8E;AAC9E,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC,MAAM,CAAC,EAAE,iCAAiC,CAAC;CAC5C,GAAG,mCAAmC,CAatC"}
|
|
@@ -1,8 +1,56 @@
|
|
|
1
1
|
/** Provider-neutral chat interaction policy and public extension contracts. */
|
|
2
2
|
export const DEFAULT_CHAT_SUGGESTION_COUNT = 3;
|
|
3
3
|
export const MIN_CHAT_SUGGESTION_COUNT = 2;
|
|
4
|
-
export const MAX_CHAT_SUGGESTION_COUNT =
|
|
4
|
+
export const MAX_CHAT_SUGGESTION_COUNT = 5;
|
|
5
5
|
export const MAX_CHAT_SUGGESTION_GUIDANCE_CHARS = 500;
|
|
6
|
+
export const MAX_CHAT_SUGGESTION_CONTEXT_CHARS = 8_192;
|
|
7
|
+
export const MAX_CHAT_SUGGESTION_CONTEXT_DEPTH = 8;
|
|
8
|
+
/** Validate bounded JSON before it reaches an auxiliary model or durable request. */
|
|
9
|
+
export function normalizeChatSuggestionRequest(value) {
|
|
10
|
+
if (value === undefined || typeof value === "boolean")
|
|
11
|
+
return { enabled: value === true };
|
|
12
|
+
const request = asRecord(value, "suggestions");
|
|
13
|
+
const settings = normalizeChatInteractionSettings({ suggestions: request }).suggestions;
|
|
14
|
+
let context;
|
|
15
|
+
if (request.context !== undefined) {
|
|
16
|
+
asRecord(request.context, "suggestions.context");
|
|
17
|
+
const seen = new Set();
|
|
18
|
+
let nodes = 0;
|
|
19
|
+
const check = (item, depth) => {
|
|
20
|
+
if (++nodes > 1024 || depth > MAX_CHAT_SUGGESTION_CONTEXT_DEPTH) {
|
|
21
|
+
throw new TypeError("suggestions.context exceeds the depth or size limit");
|
|
22
|
+
}
|
|
23
|
+
if (item === null || typeof item === "boolean")
|
|
24
|
+
return;
|
|
25
|
+
if (typeof item === "string" && item.length <= MAX_CHAT_SUGGESTION_CONTEXT_CHARS)
|
|
26
|
+
return;
|
|
27
|
+
if (typeof item === "number" && Number.isFinite(item))
|
|
28
|
+
return;
|
|
29
|
+
if (!item || typeof item !== "object" || seen.has(item)) {
|
|
30
|
+
throw new TypeError("suggestions.context must contain finite, acyclic JSON values");
|
|
31
|
+
}
|
|
32
|
+
if (!Array.isArray(item) && Object.getPrototypeOf(item) !== Object.prototype && Object.getPrototypeOf(item) !== null) {
|
|
33
|
+
throw new TypeError("suggestions.context must contain plain JSON objects");
|
|
34
|
+
}
|
|
35
|
+
seen.add(item);
|
|
36
|
+
for (const nested of Object.values(item))
|
|
37
|
+
check(nested, depth + 1);
|
|
38
|
+
seen.delete(item);
|
|
39
|
+
};
|
|
40
|
+
check(request.context, 0);
|
|
41
|
+
const serialized = JSON.stringify(request.context);
|
|
42
|
+
if (serialized.length > MAX_CHAT_SUGGESTION_CONTEXT_CHARS) {
|
|
43
|
+
throw new TypeError(`suggestions.context must be at most ${MAX_CHAT_SUGGESTION_CONTEXT_CHARS} serialized characters`);
|
|
44
|
+
}
|
|
45
|
+
context = JSON.parse(serialized);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
enabled: request.enabled !== false,
|
|
49
|
+
...(request.maxItems === undefined ? {} : { maxItems: settings.maxItems }),
|
|
50
|
+
...(settings.guidance ? { guidance: settings.guidance } : {}),
|
|
51
|
+
...(context === undefined ? {} : { context }),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
6
54
|
export const ASK_USER_QUESTION_TOOL_NAME = "ask_user_question";
|
|
7
55
|
/** Client-rendered tools that may suspend a direct chat turn. */
|
|
8
56
|
export const CLIENT_INTERACTION_TOOL_NAMES = [
|
|
@@ -88,7 +136,7 @@ export function resolveChatInteractionCapabilities(input) {
|
|
|
88
136
|
askUserQuestion: settings.allowUserQuestions
|
|
89
137
|
&& input.client?.ask_user_question !== false,
|
|
90
138
|
suggestions: settings.suggestions.enabled
|
|
91
|
-
&& input.client?.suggestions
|
|
139
|
+
&& normalizeChatSuggestionRequest(input.client?.suggestions).enabled,
|
|
92
140
|
};
|
|
93
141
|
}
|
|
94
142
|
//# sourceMappingURL=chat-interactions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-interactions.js","sourceRoot":"","sources":["../src/chat-interactions.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAI/E,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-interactions.js","sourceRoot":"","sources":["../src/chat-interactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { normalizeChatInteractionSettings, resolveChatInteractionCapabilities, } from "./chat-interactions.js";
|
|
2
|
+
import { normalizeChatInteractionSettings, resolveChatInteractionCapabilities, normalizeChatSuggestionRequest, } from "./chat-interactions.js";
|
|
3
3
|
describe("normalizeChatInteractionSettings", () => {
|
|
4
4
|
it("preserves the legacy ask-user default and keeps suggestions disabled", () => {
|
|
5
5
|
expect(normalizeChatInteractionSettings(undefined)).toEqual({
|
|
@@ -27,7 +27,7 @@ describe("normalizeChatInteractionSettings", () => {
|
|
|
27
27
|
},
|
|
28
28
|
});
|
|
29
29
|
});
|
|
30
|
-
it.each([0, 1,
|
|
30
|
+
it.each([0, 1, 6, 99, 2.5])("rejects maxItems=%s", (maxItems) => {
|
|
31
31
|
expect(() => normalizeChatInteractionSettings({
|
|
32
32
|
suggestions: { enabled: true, maxItems },
|
|
33
33
|
})).toThrow("maxItems");
|
|
@@ -83,4 +83,41 @@ describe("resolveChatInteractionCapabilities", () => {
|
|
|
83
83
|
});
|
|
84
84
|
});
|
|
85
85
|
});
|
|
86
|
+
describe("per-request suggestions", () => {
|
|
87
|
+
it("accepts five suggestions while retaining the default of three", () => {
|
|
88
|
+
expect(normalizeChatInteractionSettings({ suggestions: { maxItems: 5 } }).suggestions.maxItems).toBe(5);
|
|
89
|
+
expect(normalizeChatInteractionSettings({}).suggestions.maxItems).toBe(3);
|
|
90
|
+
});
|
|
91
|
+
it.each([true, { enabled: true, maxItems: 5 }, { context: { published: false } }])("accepts explicit support %j", (suggestions) => {
|
|
92
|
+
expect(resolveChatInteractionCapabilities({
|
|
93
|
+
settings: { suggestions: { enabled: true } }, client: { suggestions },
|
|
94
|
+
}).suggestions).toBe(true);
|
|
95
|
+
});
|
|
96
|
+
it.each([undefined, false, { enabled: false }])("respects client opt-out %j", (suggestions) => {
|
|
97
|
+
expect(resolveChatInteractionCapabilities({
|
|
98
|
+
settings: { suggestions: { enabled: true } }, client: { suggestions },
|
|
99
|
+
}).suggestions).toBe(false);
|
|
100
|
+
});
|
|
101
|
+
it("never overrides agent or Channel policy", () => {
|
|
102
|
+
const client = { suggestions: { enabled: true, maxItems: 5 } };
|
|
103
|
+
expect(resolveChatInteractionCapabilities({ client }).suggestions).toBe(false);
|
|
104
|
+
expect(resolveChatInteractionCapabilities({ surface: "channel", client,
|
|
105
|
+
settings: { suggestions: { enabled: true } },
|
|
106
|
+
}).suggestions).toBe(false);
|
|
107
|
+
});
|
|
108
|
+
it("normalizes request guidance and bounds JSON context", () => {
|
|
109
|
+
expect(normalizeChatSuggestionRequest({ enabled: true, maxItems: 5, guidance: " phase ",
|
|
110
|
+
context: { published: false, connectors: ["booking"], remaining: 0 },
|
|
111
|
+
})).toEqual({ enabled: true, maxItems: 5, guidance: "phase",
|
|
112
|
+
context: { published: false, connectors: ["booking"], remaining: 0 },
|
|
113
|
+
});
|
|
114
|
+
const cycle = {};
|
|
115
|
+
cycle.self = cycle;
|
|
116
|
+
for (const context of [cycle, { big: "x".repeat(8193) }, { n: Infinity }, { f: () => 0 }, []]) {
|
|
117
|
+
expect(() => normalizeChatSuggestionRequest({ context })).toThrow("context");
|
|
118
|
+
}
|
|
119
|
+
expect(() => normalizeChatSuggestionRequest({ maxItems: 6 })).toThrow("maxItems");
|
|
120
|
+
expect(() => normalizeChatSuggestionRequest({ guidance: "x".repeat(501) })).toThrow("guidance");
|
|
121
|
+
});
|
|
122
|
+
});
|
|
86
123
|
//# sourceMappingURL=chat-interactions.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-interactions.test.js","sourceRoot":"","sources":["../src/chat-interactions.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,gCAAgC,EAChC,kCAAkC,
|
|
1
|
+
{"version":3,"file":"chat-interactions.test.js","sourceRoot":"","sources":["../src/chat-interactions.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED