@canonmsg/backend-contracts 0.2.3 → 0.2.4
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.
- package/dist/cjs/turnProtocol.js +36 -2
- package/dist/turnProtocol.d.ts +7 -0
- package/dist/turnProtocol.js +33 -2
- package/package.json +1 -1
package/dist/cjs/turnProtocol.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WAITING_INPUT_STALE_THRESHOLD_MS = exports.ACTIVE_TURN_STALE_THRESHOLD_MS = void 0;
|
|
3
4
|
exports.normalizeTurnMetadata = normalizeTurnMetadata;
|
|
4
5
|
exports.isTurnOpen = isTurnOpen;
|
|
6
|
+
exports.getTurnStateStaleThresholdMs = getTurnStateStaleThresholdMs;
|
|
7
|
+
exports.isTurnStateStale = isTurnStateStale;
|
|
5
8
|
exports.resolveTurnMessageSemantics = resolveTurnMessageSemantics;
|
|
6
9
|
exports.shouldPromoteConversationMessage = shouldPromoteConversationMessage;
|
|
7
10
|
exports.shouldTriggerAgentTurn = shouldTriggerAgentTurn;
|
|
8
11
|
exports.normalizeRuntimeTurnState = normalizeRuntimeTurnState;
|
|
12
|
+
exports.ACTIVE_TURN_STALE_THRESHOLD_MS = 30 * 60 * 1000;
|
|
13
|
+
exports.WAITING_INPUT_STALE_THRESHOLD_MS = 12 * 60 * 60 * 1000;
|
|
9
14
|
function isRecord(value) {
|
|
10
15
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
11
16
|
}
|
|
@@ -43,9 +48,33 @@ function normalizeTurnMetadata(metadata) {
|
|
|
43
48
|
function isTurnOpen(turnState) {
|
|
44
49
|
if (!turnState)
|
|
45
50
|
return false;
|
|
46
|
-
|
|
51
|
+
const open = turnState.state !== 'idle'
|
|
47
52
|
&& turnState.state !== 'completed'
|
|
48
53
|
&& turnState.state !== 'interrupted';
|
|
54
|
+
if (!open)
|
|
55
|
+
return false;
|
|
56
|
+
return !isTurnStateStale(turnState);
|
|
57
|
+
}
|
|
58
|
+
function getTurnStateStaleThresholdMs(state) {
|
|
59
|
+
return state === 'waiting_input'
|
|
60
|
+
? exports.WAITING_INPUT_STALE_THRESHOLD_MS
|
|
61
|
+
: exports.ACTIVE_TURN_STALE_THRESHOLD_MS;
|
|
62
|
+
}
|
|
63
|
+
function isTurnStateStale(turnState) {
|
|
64
|
+
if (!turnState)
|
|
65
|
+
return false;
|
|
66
|
+
if (turnState.state !== 'thinking'
|
|
67
|
+
&& turnState.state !== 'streaming'
|
|
68
|
+
&& turnState.state !== 'tool'
|
|
69
|
+
&& turnState.state !== 'waiting_input') {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
const updatedAt = turnState.turnUpdatedAt
|
|
73
|
+
?? turnState.updatedAt
|
|
74
|
+
?? turnState.openedAt;
|
|
75
|
+
if (updatedAt == null)
|
|
76
|
+
return false;
|
|
77
|
+
return Date.now() - updatedAt >= getTurnStateStaleThresholdMs(turnState.state);
|
|
49
78
|
}
|
|
50
79
|
function resolveTurnMessageSemantics(input) {
|
|
51
80
|
const turnMetadata = normalizeTurnMetadata(input.metadata);
|
|
@@ -84,7 +113,12 @@ function normalizeRuntimeTurnState(value) {
|
|
|
84
113
|
|| value.state === 'waiting_input'
|
|
85
114
|
|| value.state === 'completed'
|
|
86
115
|
|| value.state === 'interrupted') {
|
|
87
|
-
return {
|
|
116
|
+
return {
|
|
117
|
+
state: value.state,
|
|
118
|
+
...(typeof value.openedAt === 'number' ? { openedAt: value.openedAt } : {}),
|
|
119
|
+
...(typeof value.updatedAt === 'number' ? { updatedAt: value.updatedAt } : {}),
|
|
120
|
+
...(typeof value.turnUpdatedAt === 'number' ? { turnUpdatedAt: value.turnUpdatedAt } : {}),
|
|
121
|
+
};
|
|
88
122
|
}
|
|
89
123
|
return null;
|
|
90
124
|
}
|
package/dist/turnProtocol.d.ts
CHANGED
|
@@ -8,9 +8,16 @@ export interface TurnMetadata {
|
|
|
8
8
|
}
|
|
9
9
|
export interface TurnStateLike {
|
|
10
10
|
state: TurnLifecycleState;
|
|
11
|
+
openedAt?: number;
|
|
12
|
+
updatedAt?: number;
|
|
13
|
+
turnUpdatedAt?: number | null;
|
|
11
14
|
}
|
|
15
|
+
export declare const ACTIVE_TURN_STALE_THRESHOLD_MS: number;
|
|
16
|
+
export declare const WAITING_INPUT_STALE_THRESHOLD_MS: number;
|
|
12
17
|
export declare function normalizeTurnMetadata(metadata: unknown): TurnMetadata | null;
|
|
13
18
|
export declare function isTurnOpen(turnState: TurnStateLike | null | undefined): boolean;
|
|
19
|
+
export declare function getTurnStateStaleThresholdMs(state: TurnLifecycleState): number;
|
|
20
|
+
export declare function isTurnStateStale(turnState: TurnStateLike | null | undefined): boolean;
|
|
14
21
|
export declare function resolveTurnMessageSemantics(input: {
|
|
15
22
|
senderType: SenderType;
|
|
16
23
|
metadata?: unknown;
|
package/dist/turnProtocol.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export const ACTIVE_TURN_STALE_THRESHOLD_MS = 30 * 60 * 1000;
|
|
2
|
+
export const WAITING_INPUT_STALE_THRESHOLD_MS = 12 * 60 * 60 * 1000;
|
|
1
3
|
function isRecord(value) {
|
|
2
4
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
3
5
|
}
|
|
@@ -35,9 +37,33 @@ export function normalizeTurnMetadata(metadata) {
|
|
|
35
37
|
export function isTurnOpen(turnState) {
|
|
36
38
|
if (!turnState)
|
|
37
39
|
return false;
|
|
38
|
-
|
|
40
|
+
const open = turnState.state !== 'idle'
|
|
39
41
|
&& turnState.state !== 'completed'
|
|
40
42
|
&& turnState.state !== 'interrupted';
|
|
43
|
+
if (!open)
|
|
44
|
+
return false;
|
|
45
|
+
return !isTurnStateStale(turnState);
|
|
46
|
+
}
|
|
47
|
+
export function getTurnStateStaleThresholdMs(state) {
|
|
48
|
+
return state === 'waiting_input'
|
|
49
|
+
? WAITING_INPUT_STALE_THRESHOLD_MS
|
|
50
|
+
: ACTIVE_TURN_STALE_THRESHOLD_MS;
|
|
51
|
+
}
|
|
52
|
+
export function isTurnStateStale(turnState) {
|
|
53
|
+
if (!turnState)
|
|
54
|
+
return false;
|
|
55
|
+
if (turnState.state !== 'thinking'
|
|
56
|
+
&& turnState.state !== 'streaming'
|
|
57
|
+
&& turnState.state !== 'tool'
|
|
58
|
+
&& turnState.state !== 'waiting_input') {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
const updatedAt = turnState.turnUpdatedAt
|
|
62
|
+
?? turnState.updatedAt
|
|
63
|
+
?? turnState.openedAt;
|
|
64
|
+
if (updatedAt == null)
|
|
65
|
+
return false;
|
|
66
|
+
return Date.now() - updatedAt >= getTurnStateStaleThresholdMs(turnState.state);
|
|
41
67
|
}
|
|
42
68
|
export function resolveTurnMessageSemantics(input) {
|
|
43
69
|
const turnMetadata = normalizeTurnMetadata(input.metadata);
|
|
@@ -76,7 +102,12 @@ export function normalizeRuntimeTurnState(value) {
|
|
|
76
102
|
|| value.state === 'waiting_input'
|
|
77
103
|
|| value.state === 'completed'
|
|
78
104
|
|| value.state === 'interrupted') {
|
|
79
|
-
return {
|
|
105
|
+
return {
|
|
106
|
+
state: value.state,
|
|
107
|
+
...(typeof value.openedAt === 'number' ? { openedAt: value.openedAt } : {}),
|
|
108
|
+
...(typeof value.updatedAt === 'number' ? { updatedAt: value.updatedAt } : {}),
|
|
109
|
+
...(typeof value.turnUpdatedAt === 'number' ? { turnUpdatedAt: value.turnUpdatedAt } : {}),
|
|
110
|
+
};
|
|
80
111
|
}
|
|
81
112
|
return null;
|
|
82
113
|
}
|