@modelprofile.com/flexharness 10.24.0 → 11.0.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.
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/classes.codesandbox.js +1 -1
- package/dist_ts/classes.flexharness.admission.d.ts +17 -0
- package/dist_ts/classes.flexharness.admission.js +263 -0
- package/dist_ts/classes.flexharness.callbacks.d.ts +38 -0
- package/dist_ts/classes.flexharness.callbacks.js +313 -0
- package/dist_ts/classes.flexharness.compaction.d.ts +25 -0
- package/dist_ts/classes.flexharness.compaction.js +87 -0
- package/dist_ts/classes.flexharness.configurations.d.ts +11 -0
- package/dist_ts/classes.flexharness.configurations.js +137 -0
- package/dist_ts/classes.flexharness.core.d.ts +143 -0
- package/dist_ts/classes.flexharness.core.js +1538 -0
- package/dist_ts/classes.flexharness.d.ts +2 -437
- package/dist_ts/classes.flexharness.deletion.d.ts +31 -0
- package/dist_ts/classes.flexharness.deletion.js +396 -0
- package/dist_ts/classes.flexharness.imports.d.ts +24 -0
- package/dist_ts/classes.flexharness.imports.js +345 -0
- package/dist_ts/classes.flexharness.js +119 -9776
- package/dist_ts/classes.flexharness.lifecycle.d.ts +47 -0
- package/dist_ts/classes.flexharness.lifecycle.js +625 -0
- package/dist_ts/classes.flexharness.permissions.d.ts +19 -0
- package/dist_ts/classes.flexharness.permissions.js +450 -0
- package/dist_ts/classes.flexharness.projects.d.ts +55 -0
- package/dist_ts/classes.flexharness.projects.js +575 -0
- package/dist_ts/classes.flexharness.prompts.d.ts +44 -0
- package/dist_ts/classes.flexharness.prompts.js +659 -0
- package/dist_ts/classes.flexharness.providers.d.ts +18 -0
- package/dist_ts/classes.flexharness.providers.js +267 -0
- package/dist_ts/classes.flexharness.results.d.ts +26 -0
- package/dist_ts/classes.flexharness.results.js +89 -0
- package/dist_ts/classes.flexharness.reversions.d.ts +52 -0
- package/dist_ts/classes.flexharness.reversions.js +1306 -0
- package/dist_ts/classes.flexharness.runs.d.ts +63 -0
- package/dist_ts/classes.flexharness.runs.js +1058 -0
- package/dist_ts/classes.flexharness.sessions.d.ts +20 -0
- package/dist_ts/classes.flexharness.sessions.js +381 -0
- package/dist_ts/classes.flexharness.slashcommands.d.ts +40 -0
- package/dist_ts/classes.flexharness.slashcommands.js +458 -0
- package/dist_ts/classes.flexharness.subagents.d.ts +31 -0
- package/dist_ts/classes.flexharness.subagents.js +690 -0
- package/dist_ts/classes.flexharness.tooldispatch.d.ts +53 -0
- package/dist_ts/classes.flexharness.tooldispatch.js +418 -0
- package/dist_ts/classes.stores.js +1 -1
- package/dist_ts/classes.toolcatalog.js +1 -1
- package/dist_ts/errors.js +1 -1
- package/dist_ts/functions.toolpermissions.js +1 -1
- package/dist_ts/interfaces.d.ts +3 -3
- package/dist_ts/interfaces.flexharness.d.ts +455 -0
- package/dist_ts/interfaces.flexharness.js +2 -0
- package/dist_ts/utils.flexharness.d.ts +19 -0
- package/dist_ts/utils.flexharness.js +83 -0
- package/dist_ts/utils.harnessoptions.js +1 -1
- package/dist_ts/utils.json.js +1 -1
- package/dist_ts/utils.schemadeclarations.js +1 -1
- package/dist_ts/utils.sessionimport.js +1 -1
- package/dist_ts/utils.sessionmetrics.d.ts +1 -1
- package/dist_ts_chat/classes.chatsession.js +1 -1
- package/dist_ts_chat_harness/classes.transcript.js +1 -1
- package/dist_ts_chat_harness/functions.intents.js +1 -1
- package/dist_ts_chat_harness/functions.mapping.d.ts +1 -1
- package/dist_ts_chat_harness/functions.mapping.js +1 -1
- package/dist_ts_chat_harness_server/classes.chathub.d.ts +18 -7
- package/dist_ts_chat_harness_server/classes.chathub.js +65 -62
- package/dist_ts_chat_harness_server/classes.chatsubscription.d.ts +5 -3
- package/dist_ts_chat_harness_server/classes.chatsubscription.js +4 -4
- package/dist_ts_chat_harness_server/classes.scopedirectory.d.ts +17 -0
- package/dist_ts_chat_harness_server/classes.scopedirectory.js +49 -0
- package/dist_ts_chat_harness_server/classes.sessionlists.d.ts +3 -5
- package/dist_ts_chat_harness_server/classes.sessionlists.js +11 -12
- package/dist_ts_chat_harness_server/classes.turngate.d.ts +8 -2
- package/dist_ts_chat_harness_server/classes.turngate.js +22 -21
- package/dist_ts_chat_harness_server/functions.errorprojector.js +1 -1
- package/dist_ts_chat_harness_server/index.d.ts +3 -2
- package/dist_ts_chat_harness_server/index.js +3 -2
- package/dist_ts_chat_harness_server/interfaces.d.ts +35 -2
- package/dist_ts_chat_harness_server/plugins.d.ts +1 -1
- package/dist_ts_chat_harness_typedsocket/classes.clienttransport.d.ts +28 -3
- package/dist_ts_chat_harness_typedsocket/classes.clienttransport.js +71 -15
- package/dist_ts_chat_harness_typedsocket/classes.serverbinding.d.ts +5 -3
- package/dist_ts_chat_harness_typedsocket/classes.serverbinding.js +79 -16
- package/dist_ts_chat_harness_typedsocket/index.d.ts +2 -2
- package/dist_ts_chat_harness_typedsocket/index.js +1 -1
- package/dist_ts_chat_harness_typedsocket/interfaces.requests.d.ts +20 -11
- package/dist_ts_chat_web/flexchat-input.js +1 -1
- package/dist_ts_chat_web/flexchat-message.js +1 -1
- package/dist_ts_chat_web/flexchat-window.js +1 -1
- package/dist_ts_compaction/smartagent.compaction.js +1 -1
- package/dist_ts_kvm/ocr.js +1 -1
- package/dist_ts_ocr/classes.imageocr.js +1 -1
- package/dist_ts_ocr/ocr.mistral.js +1 -1
- package/dist_ts_stores_nosqldb/classes.nosqldbstores.js +1 -1
- package/dist_ts_tools/tool.browser.js +1 -1
- package/dist_ts_tools/tool.filesystem.js +1 -1
- package/dist_ts_tools/tool.shell.js +1 -1
- package/dist_ts_tools_node/tool.context.js +1 -1
- package/dist_ts_typedrequest/catalog.d.ts +2 -2
- package/dist_ts_typedrequest/catalog.js +1 -1
- package/package.json +3 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.flexharness.admission.ts +331 -0
- package/ts/classes.flexharness.callbacks.ts +352 -0
- package/ts/classes.flexharness.compaction.ts +167 -0
- package/ts/classes.flexharness.configurations.ts +167 -0
- package/ts/classes.flexharness.core.ts +1830 -0
- package/ts/classes.flexharness.deletion.ts +616 -0
- package/ts/classes.flexharness.imports.ts +414 -0
- package/ts/classes.flexharness.lifecycle.ts +786 -0
- package/ts/classes.flexharness.permissions.ts +535 -0
- package/ts/classes.flexharness.projects.ts +1006 -0
- package/ts/classes.flexharness.prompts.ts +857 -0
- package/ts/classes.flexharness.providers.ts +322 -0
- package/ts/classes.flexharness.results.ts +98 -0
- package/ts/classes.flexharness.reversions.ts +1684 -0
- package/ts/classes.flexharness.runs.ts +1204 -0
- package/ts/classes.flexharness.sessions.ts +483 -0
- package/ts/classes.flexharness.slashcommands.ts +705 -0
- package/ts/classes.flexharness.subagents.ts +860 -0
- package/ts/classes.flexharness.tooldispatch.ts +475 -0
- package/ts/classes.flexharness.ts +147 -12567
- package/ts/interfaces.flexharness.ts +517 -0
- package/ts/utils.flexharness.ts +121 -0
- package/ts_chat_harness_server/classes.chathub.ts +68 -61
- package/ts_chat_harness_server/classes.chatsubscription.ts +7 -5
- package/ts_chat_harness_server/classes.scopedirectory.ts +67 -0
- package/ts_chat_harness_server/classes.sessionlists.ts +11 -19
- package/ts_chat_harness_server/classes.turngate.ts +28 -21
- package/ts_chat_harness_server/index.ts +4 -5
- package/ts_chat_harness_server/interfaces.ts +35 -2
- package/ts_chat_harness_server/plugins.ts +0 -3
- package/ts_chat_harness_server/readme.md +6 -4
- package/ts_chat_harness_typedsocket/classes.clienttransport.ts +92 -23
- package/ts_chat_harness_typedsocket/classes.serverbinding.ts +88 -16
- package/ts_chat_harness_typedsocket/index.ts +4 -2
- package/ts_chat_harness_typedsocket/interfaces.requests.ts +15 -11
- package/ts_chat_harness_typedsocket/readme.md +7 -3
|
@@ -2,6 +2,11 @@ import * as plugins from './plugins.js';
|
|
|
2
2
|
import type { IFlexHarnessChatCaller, IFlexHarnessChatLimits, IFlexHarnessChatTurn } from './interfaces.js';
|
|
3
3
|
/** The harness calls the gate makes. */
|
|
4
4
|
export type TFlexHarnessChatGateHarness = Pick<plugins.FlexHarness<unknown>, 'enqueuePrompt' | 'steerPrompt' | 'getPromptQueueEntry' | 'cancelPrompt'>;
|
|
5
|
+
/** A conversation as the gate reaches it: the harness scope it runs in, and its session. */
|
|
6
|
+
interface ITarget {
|
|
7
|
+
scopeId: string;
|
|
8
|
+
sessionId: string;
|
|
9
|
+
}
|
|
5
10
|
/**
|
|
6
11
|
* Admits messages: one turn per conversation, bound to the tab that started it and the context it
|
|
7
12
|
* was sent with, since FlexHarness carries no per-prompt context. A message sent while a turn runs
|
|
@@ -22,8 +27,8 @@ export declare class FlexHarnessChatTurnGate<TContext> {
|
|
|
22
27
|
hasTurnOf(tabArg: IFlexHarnessChatCaller): boolean;
|
|
23
28
|
/** Takes one harness event: a prompt that runs now takes steers. */
|
|
24
29
|
takeEvent(eventArg: plugins.TFlexHarnessEvent): void;
|
|
25
|
-
/** Admits a message under the conversation's lock; every wait ends at the deadline. */
|
|
26
|
-
admit(callerArg: IFlexHarnessChatCaller,
|
|
30
|
+
/** Admits a message of the caller's tab under the conversation's lock; every wait ends at the deadline. */
|
|
31
|
+
admit(callerArg: IFlexHarnessChatCaller, targetArg: ITarget, sendArg: plugins.IHarnessComposerSendDetail, contextArg: TContext, deadlineArg: number): Promise<plugins.TFlexHarnessChatResponse<'flexHarnessChatSend'>>;
|
|
27
32
|
/**
|
|
28
33
|
* Refuses new messages, stops every turn this gate started, also those admitted while it stops,
|
|
29
34
|
* and waits until the admissions under way were refused and every turn ended.
|
|
@@ -36,3 +41,4 @@ export declare class FlexHarnessChatTurnGate<TContext> {
|
|
|
36
41
|
private admitLocked;
|
|
37
42
|
private startTurn;
|
|
38
43
|
}
|
|
44
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import { FlexHarnessChatRequestError } from './errors.js';
|
|
3
|
-
import { STOPPED_MESSAGE } from './functions.validation.js';
|
|
3
|
+
import { STOPPED_MESSAGE, isSameTab } from './functions.validation.js';
|
|
4
4
|
const STILL_FINISHING_MESSAGE = 'The assistant is still finishing its previous reply. Send your message again in a moment.';
|
|
5
5
|
const bindingKey = (scopeIdArg, sessionIdArg) => `${scopeIdArg}\n${sessionIdArg}`;
|
|
6
6
|
/** Whether the promise settled before the deadline (a time in ms since the epoch). */
|
|
@@ -37,13 +37,13 @@ export class FlexHarnessChatTurnGate {
|
|
|
37
37
|
turnOf(scopeIdArg, sessionIdArg) {
|
|
38
38
|
const binding = this.bindings.get(bindingKey(scopeIdArg, sessionIdArg));
|
|
39
39
|
return binding
|
|
40
|
-
? { scopeId: binding.scopeId, sessionId: binding.sessionId,
|
|
40
|
+
? { scopeId: binding.scopeId, sessionId: binding.sessionId, tab: binding.tab, context: binding.context }
|
|
41
41
|
: undefined;
|
|
42
42
|
}
|
|
43
43
|
/** Whether a turn the tab started still runs. */
|
|
44
44
|
hasTurnOf(tabArg) {
|
|
45
45
|
for (const binding of this.bindings.values()) {
|
|
46
|
-
if (binding.
|
|
46
|
+
if (isSameTab(binding.tab, tabArg))
|
|
47
47
|
return true;
|
|
48
48
|
}
|
|
49
49
|
return false;
|
|
@@ -56,11 +56,12 @@ export class FlexHarnessChatTurnGate {
|
|
|
56
56
|
if (binding && binding.queueId === eventArg.queueId)
|
|
57
57
|
binding.markRunning();
|
|
58
58
|
}
|
|
59
|
-
/** Admits a message under the conversation's lock; every wait ends at the deadline. */
|
|
60
|
-
admit(callerArg,
|
|
59
|
+
/** Admits a message of the caller's tab under the conversation's lock; every wait ends at the deadline. */
|
|
60
|
+
admit(callerArg, targetArg, sendArg, contextArg, deadlineArg) {
|
|
61
61
|
if (this.stopped)
|
|
62
62
|
return Promise.reject(new FlexHarnessChatRequestError(STOPPED_MESSAGE));
|
|
63
|
-
const
|
|
63
|
+
const target = { scopeId: targetArg.scopeId, sessionId: targetArg.sessionId };
|
|
64
|
+
const admission = this.withLock(bindingKey(target.scopeId, target.sessionId), () => this.admitLocked(callerArg, target, sendArg, contextArg, deadlineArg));
|
|
64
65
|
const settled = admission.then(() => undefined, () => undefined);
|
|
65
66
|
this.admissions.add(settled);
|
|
66
67
|
void settled.then(() => this.admissions.delete(settled));
|
|
@@ -108,13 +109,12 @@ export class FlexHarnessChatTurnGate {
|
|
|
108
109
|
this.locks.delete(keyArg);
|
|
109
110
|
}
|
|
110
111
|
}
|
|
111
|
-
async admitLocked(callerArg,
|
|
112
|
+
async admitLocked(callerArg, target, sendArg, contextArg, deadlineArg) {
|
|
112
113
|
const waitFor = async (promiseArg) => {
|
|
113
114
|
if (!(await settlesBefore(promiseArg, deadlineArg)))
|
|
114
115
|
throw new FlexHarnessChatRequestError(STILL_FINISHING_MESSAGE);
|
|
115
116
|
};
|
|
116
117
|
this.assertOpen();
|
|
117
|
-
const target = { scopeId: callerArg.scopeId, sessionId: sessionIdArg };
|
|
118
118
|
const binding = this.bindings.get(bindingKey(target.scopeId, target.sessionId));
|
|
119
119
|
if (binding?.queueId) {
|
|
120
120
|
for (let attempt = 0; attempt < 2; attempt++) {
|
|
@@ -127,7 +127,7 @@ export class FlexHarnessChatTurnGate {
|
|
|
127
127
|
steerId: intent.steerId,
|
|
128
128
|
prompt: intent.prompt,
|
|
129
129
|
});
|
|
130
|
-
return { sessionId:
|
|
130
|
+
return { sessionId: target.sessionId, steerId: intent.steerId };
|
|
131
131
|
}
|
|
132
132
|
catch (error) {
|
|
133
133
|
if (!(error instanceof plugins.FlexHarnessSteerRejectedError) || error.reason !== 'not-running')
|
|
@@ -147,19 +147,20 @@ export class FlexHarnessChatTurnGate {
|
|
|
147
147
|
await waitFor(binding.settled);
|
|
148
148
|
}
|
|
149
149
|
this.assertOpen();
|
|
150
|
-
return this.startTurn(callerArg,
|
|
150
|
+
return this.startTurn(callerArg, target, sendArg, contextArg);
|
|
151
151
|
}
|
|
152
|
-
async startTurn(callerArg,
|
|
153
|
-
const
|
|
154
|
-
const
|
|
152
|
+
async startTurn(callerArg, target, sendArg, contextArg) {
|
|
153
|
+
const { scopeId, sessionId } = target;
|
|
154
|
+
const key = bindingKey(scopeId, sessionId);
|
|
155
|
+
const intent = intentOf(target, { ...sendArg, delivery: 'turn' });
|
|
155
156
|
if (intent.type !== 'enqueuePrompt')
|
|
156
157
|
throw new Error('A new turn must be queued.');
|
|
157
158
|
let markSettled;
|
|
158
159
|
let markRunning;
|
|
159
160
|
const binding = {
|
|
160
|
-
scopeId
|
|
161
|
-
sessionId
|
|
162
|
-
tabId: callerArg.tabId,
|
|
161
|
+
scopeId,
|
|
162
|
+
sessionId,
|
|
163
|
+
tab: { tabId: callerArg.tabId, scopeId: callerArg.scopeId },
|
|
163
164
|
context: contextArg,
|
|
164
165
|
running: new Promise((resolve) => (markRunning = resolve)),
|
|
165
166
|
markRunning: () => markRunning(),
|
|
@@ -176,7 +177,7 @@ export class FlexHarnessChatTurnGate {
|
|
|
176
177
|
this.bindings.set(key, binding);
|
|
177
178
|
let queued;
|
|
178
179
|
try {
|
|
179
|
-
queued = await this.harness.enqueuePrompt(
|
|
180
|
+
queued = await this.harness.enqueuePrompt(scopeId, sessionId, intent.prompt);
|
|
180
181
|
}
|
|
181
182
|
catch (error) {
|
|
182
183
|
end();
|
|
@@ -187,12 +188,12 @@ export class FlexHarnessChatTurnGate {
|
|
|
187
188
|
void queued.completion.then(() => undefined, () => undefined).finally(end);
|
|
188
189
|
if (this.stopped) {
|
|
189
190
|
// the gate stopped while the prompt was being queued: the turn never runs on
|
|
190
|
-
this.cancel(
|
|
191
|
+
this.cancel(scopeId, sessionId, queued.queueId);
|
|
191
192
|
throw new FlexHarnessChatRequestError(STOPPED_MESSAGE);
|
|
192
193
|
}
|
|
193
|
-
binding.timer = setTimeout(() => this.cancel(
|
|
194
|
+
binding.timer = setTimeout(() => this.cancel(scopeId, sessionId, queued.queueId), this.limits.turnTimeoutMs);
|
|
194
195
|
binding.timer.unref?.();
|
|
195
|
-
return { sessionId
|
|
196
|
+
return { sessionId, queueId: queued.queueId };
|
|
196
197
|
}
|
|
197
198
|
}
|
|
198
199
|
/** The harness call a composer message becomes; an attachment the composer could not read whole is refused. */
|
|
@@ -204,4 +205,4 @@ const intentOf = (targetArg, sendArg, activeQueueIdArg) => {
|
|
|
204
205
|
throw new FlexHarnessChatRequestError(error?.message || 'The message could not be read.');
|
|
205
206
|
}
|
|
206
207
|
};
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50dXJuZ2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX2NoYXRfaGFybmVzc19zZXJ2ZXIvY2xhc3Nlcy50dXJuZ2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzVELE1BQU0sdUJBQXVCLEdBQzNCLDJGQUEyRixDQUFDO0FBb0I5RixNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQWtCLEVBQUUsWUFBb0IsRUFBRSxFQUFFLENBQUMsR0FBRyxVQUFVLEtBQUssWUFBWSxFQUFFLENBQUM7QUFFbEcsc0ZBQXNGO0FBQ3RGLE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxVQUE0QixFQUFFLFdBQW1CLEVBQW9CLEVBQUU7SUFDbEcsSUFBSSxLQUFnRCxDQUFDO0lBQ3JELE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFRLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0MsS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQWEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztZQUFTLENBQUM7UUFDVCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7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
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50dXJuZ2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX2NoYXRfaGFybmVzc19zZXJ2ZXIvY2xhc3Nlcy50dXJuZ2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd2RSxNQUFNLHVCQUF1QixHQUMzQiwyRkFBMkYsQ0FBQztBQTBCOUYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFrQixFQUFFLFlBQW9CLEVBQUUsRUFBRSxDQUFDLEdBQUcsVUFBVSxLQUFLLFlBQVksRUFBRSxDQUFDO0FBRWxHLHNGQUFzRjtBQUN0RixNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsVUFBNEIsRUFBRSxXQUFtQixFQUFvQixFQUFFO0lBQ2xHLElBQUksS0FBZ0QsQ0FBQztJQUNyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBUSxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdDLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFhLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7WUFBUyxDQUFDO1FBQ1QsWUFBWSxDQUFDLEtBQUss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
|
|
@@ -29,4 +29,4 @@ export function createFlexHarnessChatErrorProjector(options = {}) {
|
|
|
29
29
|
return { name: 'AssistantError', message: 'The assistant could not complete that request.', code: 'FLEX_CHAT_FAILED' };
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmVycm9ycHJvamVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfY2hhdF9oYXJuZXNzX3NlcnZlci9mdW5jdGlvbnMuZXJyb3Jwcm9qZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBVWpFOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsbUNBQW1DLENBQ2pELE9BQU8sR0FBMEMsRUFBRTtJQUVuRCxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3hCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEQsSUFBSSxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDaEMsSUFBSSxLQUFLLFlBQVksa0NBQWtDLEVBQUUsQ0FBQztZQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSwyQkFBMkIsRUFBRSxDQUFDO1FBQy9GLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUMsT0FBTztvQkFDTCxJQUFJLEVBQUUsb0JBQW9CO29CQUMxQixPQUFPLEVBQUUseUNBQXlDLE9BQU8sQ0FBQyxNQUFNLEdBQUc7b0JBQ25FLElBQUksRUFBRSw0QkFBNEI7aUJBQ25DLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGdEQUFnRCxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0lBQ3pILENBQUMsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { FlexHarnessChatHub, defaultFlexHarnessChatLimits
|
|
1
|
+
export { FlexHarnessChatHub, defaultFlexHarnessChatLimits } from './classes.chathub.js';
|
|
2
|
+
export { flexHarnessChatSessionMeta } from './classes.scopedirectory.js';
|
|
2
3
|
export { FlexHarnessChatRequestError, FlexHarnessChatTabUnavailableError } from './errors.js';
|
|
3
4
|
export { createFlexHarnessChatErrorProjector, type IFlexHarnessChatErrorProjectorOptions, } from './functions.errorprojector.js';
|
|
4
|
-
export type { IFlexHarnessChatCaller, IFlexHarnessChatHubOptions, IFlexHarnessChatLimits, IFlexHarnessChatPeer, IFlexHarnessChatPeers, IFlexHarnessChatTurn, TFlexHarnessChatHubHarness, } from './interfaces.js';
|
|
5
|
+
export type { IFlexHarnessChatCaller, IFlexHarnessChatConversation, IFlexHarnessChatDirectory, IFlexHarnessChatHubOptions, IFlexHarnessChatLimits, IFlexHarnessChatPeer, IFlexHarnessChatPeers, IFlexHarnessChatTurn, TFlexHarnessChatHubHarness, } from './interfaces.js';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { FlexHarnessChatHub, defaultFlexHarnessChatLimits
|
|
1
|
+
export { FlexHarnessChatHub, defaultFlexHarnessChatLimits } from './classes.chathub.js';
|
|
2
|
+
export { flexHarnessChatSessionMeta } from './classes.scopedirectory.js';
|
|
2
3
|
export { FlexHarnessChatRequestError, FlexHarnessChatTabUnavailableError } from './errors.js';
|
|
3
4
|
export { createFlexHarnessChatErrorProjector, } from './functions.errorprojector.js';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19jaGF0X2hhcm5lc3Nfc2VydmVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RixPQUFPLEVBQ0wsbUNBQW1DLEdBRXBDLE1BQU0sK0JBQStCLENBQUMifQ==
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type * as plugins from './plugins.js';
|
|
2
2
|
/**
|
|
3
3
|
* Who a request is from, as the host established it: the tab, and the scope whose conversations it
|
|
4
|
-
* may reach. A tab is named by both: the same tab id in two scopes names two tabs.
|
|
4
|
+
* may reach. A tab is named by both: the same tab id in two scopes names two tabs. The scope names
|
|
5
|
+
* the tab's reach; with a directory, the conversations it reaches may run in scopes of their own.
|
|
5
6
|
*/
|
|
6
7
|
export interface IFlexHarnessChatCaller {
|
|
7
8
|
/** the browser tab, a per-page secret; pushes and tool calls of its turns go to it */
|
|
@@ -25,11 +26,41 @@ export interface IFlexHarnessChatPeers {
|
|
|
25
26
|
}
|
|
26
27
|
/** The running turn of a conversation: the tab that started it and the context it was sent with. */
|
|
27
28
|
export interface IFlexHarnessChatTurn<TContext> {
|
|
29
|
+
/** the harness scope of the conversation */
|
|
28
30
|
readonly scopeId: string;
|
|
29
31
|
readonly sessionId: string;
|
|
30
|
-
|
|
32
|
+
/** the tab that started the turn; its tool calls go to it */
|
|
33
|
+
readonly tab: IFlexHarnessChatCaller;
|
|
31
34
|
readonly context: TContext;
|
|
32
35
|
}
|
|
36
|
+
/** A conversation a tab reaches: where its session runs, and how its list shows it. */
|
|
37
|
+
export interface IFlexHarnessChatConversation {
|
|
38
|
+
/** the harness scope of the conversation's session */
|
|
39
|
+
scopeId: string;
|
|
40
|
+
sessionId: string;
|
|
41
|
+
meta: plugins.IHarnessSessionMeta;
|
|
42
|
+
/** an imported conversation can only be read */
|
|
43
|
+
readOnly: boolean;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The conversations of the tabs: which a tab lists and reaches, and how they are created, renamed
|
|
47
|
+
* and deleted. Without one, a tab's conversations are the root sessions of its scope. A host whose
|
|
48
|
+
* conversations run in scopes of their own, or that keeps records of its own, gives the hub one and
|
|
49
|
+
* tells the tabs of every change of their lists with `hub.publishSessions()`.
|
|
50
|
+
*/
|
|
51
|
+
export interface IFlexHarnessChatDirectory {
|
|
52
|
+
/** The conversations the tab lists, most recent first. */
|
|
53
|
+
list(tab: IFlexHarnessChatCaller): Promise<plugins.IHarnessSessionMeta[]>;
|
|
54
|
+
/** A conversation the tab reaches, or null: one it does not reach reads as not found. */
|
|
55
|
+
find(tab: IFlexHarnessChatCaller, sessionId: string): Promise<IFlexHarnessChatConversation | null>;
|
|
56
|
+
/** Creates a conversation for the tab's first message; throw `FlexHarnessChatRequestError` to refuse. */
|
|
57
|
+
create(tab: IFlexHarnessChatCaller, init: {
|
|
58
|
+
title: string;
|
|
59
|
+
}): Promise<IFlexHarnessChatConversation>;
|
|
60
|
+
rename(tab: IFlexHarnessChatCaller, conversation: IFlexHarnessChatConversation, title: string): Promise<plugins.IHarnessSessionMeta>;
|
|
61
|
+
/** Deletes a conversation; also one created for a message that was then refused. */
|
|
62
|
+
delete(tab: IFlexHarnessChatCaller, conversation: IFlexHarnessChatConversation): Promise<void>;
|
|
63
|
+
}
|
|
33
64
|
export interface IFlexHarnessChatLimits {
|
|
34
65
|
/** A turn that runs longer is stopped. Default: 10 minutes. */
|
|
35
66
|
turnTimeoutMs: number;
|
|
@@ -63,5 +94,7 @@ export interface IFlexHarnessChatHubOptions<TContext> {
|
|
|
63
94
|
readContext(value: plugins.TJsonValue): TContext;
|
|
64
95
|
/** The title of a conversation a message starts. Defaults to the message's first line. */
|
|
65
96
|
titleOf?(send: plugins.IHarnessComposerSendDetail): string;
|
|
97
|
+
/** Where the tabs' conversations are. Defaults to the root sessions of the tab's scope. */
|
|
98
|
+
directory?: IFlexHarnessChatDirectory;
|
|
66
99
|
limits?: Partial<IFlexHarnessChatLimits>;
|
|
67
100
|
}
|
|
@@ -2,6 +2,6 @@ import { FlexHarnessClosedError, FlexHarnessError, FlexHarnessNotFoundError, Fle
|
|
|
2
2
|
import { FlexHarnessChatRequestError, FlexHarnessTranscript, flexHarnessSendIntent, flexSessionToHarnessMeta } from '@modelprofile.com/flexharness/chat/harness';
|
|
3
3
|
import { describeModelFailure } from '@modelprofile.com/flexharness-models';
|
|
4
4
|
export { FlexHarnessChatRequestError, FlexHarnessClosedError, FlexHarnessError, FlexHarnessNotFoundError, FlexHarnessSteerRejectedError, FlexHarnessTranscript, FlexHarnessValidationError, describeModelFailure, flexHarnessSendIntent, flexSessionToHarnessMeta, modelLimitErrorInfo, };
|
|
5
|
-
export type { FlexHarness, IFlexErrorInfo, IFlexExternalErrorContext, IFlexPromptQueueAdmission, IFlexSession,
|
|
5
|
+
export type { FlexHarness, IFlexErrorInfo, IFlexExternalErrorContext, IFlexPromptQueueAdmission, IFlexSession, TFlexExternalErrorProjector, TFlexHarnessEvent, TJsonValue, } from '@modelprofile.com/flexharness';
|
|
6
6
|
export type { IFlexHarnessChatHistoryState, IFlexHarnessChatMethods, IFlexHarnessChatSessionsPush, IFlexHarnessChatSteerOutcome, IFlexHarnessChatToolRequest, IFlexHarnessChatUpdate, TFlexHarnessChatRequest, TFlexHarnessChatResponse, } from '@modelprofile.com/flexharness/chat/harness';
|
|
7
7
|
export type { IHarnessAttachment, IHarnessComposerSendDetail, IHarnessMessage, IHarnessSessionMeta, THarnessStreamDelta, } from '@design.estate/dees-catalog';
|
|
@@ -1,15 +1,39 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* What the transport uses of the tab's TypedSocket client. A `TypedSocket` client is one; a host
|
|
4
|
+
* whose own connection object carries the client can hand that object instead.
|
|
5
|
+
*/
|
|
6
|
+
export interface IFlexHarnessChatTypedSocketClient {
|
|
7
|
+
createTypedRequest<T extends plugins.typedrequestInterfaces.ITypedRequest>(method: T['method']): {
|
|
8
|
+
fire(request: T['request']): Promise<T['response']>;
|
|
9
|
+
};
|
|
10
|
+
onEvent<TEvent extends plugins.typedsocket.ITypedSocketEvent>(name: TEvent['name'], handler: (payload: TEvent['payload']) => void | Promise<void>): () => void;
|
|
11
|
+
readonly eventResyncSubject: {
|
|
12
|
+
subscribe(observer: (resync: plugins.typedsocket.ITypedSocketEventResync) => void): {
|
|
13
|
+
unsubscribe(): void;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
readonly statusSubject: {
|
|
17
|
+
subscribe(observer: (status: plugins.typedsocket.TConnectionStatus) => void): {
|
|
18
|
+
unsubscribe(): void;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
}
|
|
2
22
|
export interface IFlexHarnessChatTypedSocketTransportOptions {
|
|
3
23
|
/** The tab's TypedSocket client. */
|
|
4
|
-
typedsocket:
|
|
5
|
-
/** The router the client was created with; the transport adds its
|
|
24
|
+
typedsocket: IFlexHarnessChatTypedSocketClient;
|
|
25
|
+
/** The router the client was created with; the transport adds its tool handler to it. */
|
|
6
26
|
typedrouter: plugins.typedrequest.TypedRouter;
|
|
7
27
|
/** The tab: 16 random bytes in hex. Defaults to a new random id for this transport's lifetime. */
|
|
8
28
|
tabId?: string;
|
|
9
29
|
/** The opaque credential the server's `resolve` reads, read for every request. */
|
|
10
30
|
callerToken?: () => string | undefined;
|
|
11
31
|
}
|
|
12
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* A `FlexHarnessChatClient` transport over the tab's TypedSocket client. The hub's pushes wait on
|
|
34
|
+
* the server; an event says so, and the transport pulls them, one pull at a time. It also pulls
|
|
35
|
+
* whenever TypedSocket says events may have been missed: after every (re)connect, and after a gap.
|
|
36
|
+
*/
|
|
13
37
|
export declare class FlexHarnessChatTypedSocketTransport implements plugins.IFlexHarnessChatClientTransport {
|
|
14
38
|
readonly tabId: string;
|
|
15
39
|
private readonly socket;
|
|
@@ -19,4 +43,5 @@ export declare class FlexHarnessChatTypedSocketTransport implements plugins.IFle
|
|
|
19
43
|
request<TMethod extends plugins.TFlexHarnessChatMethod>(methodArg: TMethod, requestArg: plugins.TFlexHarnessChatRequest<TMethod>): Promise<plugins.TFlexHarnessChatResponse<TMethod>>;
|
|
20
44
|
listen(handlersArg: plugins.IFlexHarnessChatPushHandlers): () => void;
|
|
21
45
|
onReconnect(callbackArg: () => void): () => void;
|
|
46
|
+
private caller;
|
|
22
47
|
}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
+
const PENDING_EVENT = 'flexHarnessChatPending';
|
|
2
3
|
/** 128 random bits as hex; `getRandomValues` works on plain http too, unlike `randomUUID`. */
|
|
3
4
|
const randomTabId = () => Array.from(globalThis.crypto.getRandomValues(new Uint8Array(16)), (byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
4
|
-
/** A
|
|
5
|
+
/** A push the tab's handler failed on is reported; the server counts it as delivered all the same. */
|
|
6
|
+
const reportHandlerError = (error) => console.warn('FLEXHARNESS_CHAT_PUSH_HANDLER_ERROR', error);
|
|
7
|
+
/**
|
|
8
|
+
* A `FlexHarnessChatClient` transport over the tab's TypedSocket client. The hub's pushes wait on
|
|
9
|
+
* the server; an event says so, and the transport pulls them, one pull at a time. It also pulls
|
|
10
|
+
* whenever TypedSocket says events may have been missed: after every (re)connect, and after a gap.
|
|
11
|
+
*/
|
|
5
12
|
export class FlexHarnessChatTypedSocketTransport {
|
|
6
13
|
tabId;
|
|
7
14
|
socket;
|
|
@@ -14,28 +21,73 @@ export class FlexHarnessChatTypedSocketTransport {
|
|
|
14
21
|
this.callerToken = optionsArg.callerToken ?? (() => undefined);
|
|
15
22
|
}
|
|
16
23
|
async request(methodArg, requestArg) {
|
|
17
|
-
const token = this.callerToken();
|
|
18
24
|
return this.socket.createTypedRequest(methodArg).fire({
|
|
19
25
|
...requestArg,
|
|
20
|
-
caller:
|
|
26
|
+
caller: this.caller(),
|
|
21
27
|
});
|
|
22
28
|
}
|
|
23
29
|
listen(handlersArg) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
let listening = true;
|
|
31
|
+
let pulling = false;
|
|
32
|
+
let pullAgain = false;
|
|
33
|
+
// one pull at a time; a signal that comes in meanwhile makes it pull once more
|
|
34
|
+
const pull = async () => {
|
|
35
|
+
if (pulling) {
|
|
36
|
+
pullAgain = true;
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
pulling = true;
|
|
40
|
+
try {
|
|
41
|
+
do {
|
|
42
|
+
pullAgain = false;
|
|
43
|
+
let pushes;
|
|
44
|
+
try {
|
|
45
|
+
({ pushes } = await this.socket
|
|
46
|
+
.createTypedRequest('flexHarnessChatPull')
|
|
47
|
+
.fire({ caller: this.caller() }));
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// the pushes keep waiting for the next pull; one the server gives up on makes the hub start over
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
for (const push of pushes) {
|
|
54
|
+
if (!listening)
|
|
55
|
+
return;
|
|
56
|
+
// a handler that throws takes nothing from the pushes after it
|
|
57
|
+
try {
|
|
58
|
+
if ('update' in push)
|
|
59
|
+
handlersArg.update(push.update);
|
|
60
|
+
else
|
|
61
|
+
handlersArg.sessions(push.sessions);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
reportHandlerError(error);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} while (pullAgain && listening);
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
pulling = false;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const tools = new plugins.typedrequest.TypedRouter();
|
|
74
|
+
tools.addTypedHandler(new plugins.typedrequest.TypedHandler('flexHarnessChatTool', async (requestArg, toolsArg) => ({
|
|
34
75
|
// the server cancels the request when the turn stops or the call times out; the handler then
|
|
35
76
|
// settles at once, since TypedSocket fails a connection whose handlers outlive their requests
|
|
36
77
|
output: await handlersArg.tool(requestArg, toolsArg?.abortSignal),
|
|
37
78
|
})));
|
|
38
|
-
|
|
79
|
+
const removeTools = this.router.addTypedRouter(tools);
|
|
80
|
+
const removeEvent = this.socket.onEvent(PENDING_EVENT, () => pull());
|
|
81
|
+
const resyncs = this.socket.eventResyncSubject.subscribe((resyncArg) => {
|
|
82
|
+
if (resyncArg.names.includes(PENDING_EVENT))
|
|
83
|
+
void pull();
|
|
84
|
+
});
|
|
85
|
+
return () => {
|
|
86
|
+
listening = false;
|
|
87
|
+
resyncs.unsubscribe();
|
|
88
|
+
removeEvent();
|
|
89
|
+
removeTools();
|
|
90
|
+
};
|
|
39
91
|
}
|
|
40
92
|
onReconnect(callbackArg) {
|
|
41
93
|
let wasConnected = true;
|
|
@@ -51,5 +103,9 @@ export class FlexHarnessChatTypedSocketTransport {
|
|
|
51
103
|
});
|
|
52
104
|
return () => subscription.unsubscribe();
|
|
53
105
|
}
|
|
106
|
+
caller() {
|
|
107
|
+
const token = this.callerToken();
|
|
108
|
+
return { tabId: this.tabId, ...(token === undefined ? {} : { token }) };
|
|
109
|
+
}
|
|
54
110
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jbGllbnR0cmFuc3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19jaGF0X2hhcm5lc3NfdHlwZWRzb2NrZXQvY2xhc3Nlcy5jbGllbnR0cmFuc3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUF3Q3hDLE1BQU0sYUFBYSxHQUEwQyx3QkFBd0IsQ0FBQztBQUV0Riw4RkFBOEY7QUFDOUYsTUFBTSxXQUFXLEdBQUcsR0FBVyxFQUFFLENBQy9CLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRTNILHNHQUFzRztBQUN0RyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBYyxFQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRWhIOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sbUNBQW1DO0lBQzlCLEtBQUssQ0FBUztJQUViLE1BQU0sQ0FBb0M7SUFDMUMsTUFBTSxDQUFtQztJQUN6QyxXQUFXLENBQTJCO0lBRXZELFlBQVksVUFBdUQ7UUFDakUsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFV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
|
|
@@ -15,19 +15,21 @@ export interface IFlexHarnessChatTypedSocketBindingOptions {
|
|
|
15
15
|
resolve(caller: IFlexHarnessChatCallerPayload, context: plugins.typedsocket.ITypedSocketRequestContext | undefined): Promise<IFlexHarnessChatResolvedCaller>;
|
|
16
16
|
/** The server-owned connection tag that names a tab. Default: `flexHarnessChatTab`. */
|
|
17
17
|
tag?: string;
|
|
18
|
-
/** How long an update or a session-list push may wait for the tab. Default: 30 seconds. */
|
|
18
|
+
/** How long an update or a session-list push may wait for the tab to pull it. Default: 30 seconds. */
|
|
19
19
|
pushTimeoutMs?: number;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
22
|
* Serves a `FlexHarnessChatHub` over TypedSocket. Add `typedrouter` to the server's router, hand
|
|
23
23
|
* the server's TypedSocket to `setTypedSocket()` once it runs, and give the hub `peers`. A tab's
|
|
24
|
-
* connection carries the server-owned tag with its tab id; every request claims it again.
|
|
24
|
+
* connection carries the server-owned tag with its tab id; every request claims it again. The
|
|
25
|
+
* hub's pushes wait for the tab, which an event tells to pull them: TypedSocket events are
|
|
26
|
+
* signals, the pushes themselves travel in the answer of an authenticated request.
|
|
25
27
|
*/
|
|
26
28
|
export declare class FlexHarnessChatTypedSocketBinding implements plugins.IFlexHarnessChatPeers {
|
|
27
29
|
readonly typedrouter: plugins.typedrequest.TypedRouter<plugins.typedrequestInterfaces.ITypedRequest>;
|
|
28
30
|
private readonly resolveCaller;
|
|
29
31
|
private readonly tag;
|
|
30
|
-
private readonly
|
|
32
|
+
private readonly mailboxes;
|
|
31
33
|
private socket;
|
|
32
34
|
constructor(optionsArg: IFlexHarnessChatTypedSocketBindingOptions);
|
|
33
35
|
/** The server's TypedSocket; it exists once the server runs. */
|