@localhostdevs/sdk 0.13.0 → 0.15.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/README.md +97 -29
- package/dist/argSchema.d.ts +7 -0
- package/dist/argSchema.d.ts.map +1 -0
- package/dist/argSchema.js +63 -0
- package/dist/argSchema.js.map +1 -0
- package/dist/bot.d.ts +16 -15
- package/dist/bot.d.ts.map +1 -1
- package/dist/bot.js +217 -87
- package/dist/bot.js.map +1 -1
- package/dist/collect.d.ts +46 -0
- package/dist/collect.d.ts.map +1 -0
- package/dist/collect.js +68 -0
- package/dist/collect.js.map +1 -0
- package/dist/collectStore.d.ts +31 -0
- package/dist/collectStore.d.ts.map +1 -0
- package/dist/collectStore.js +96 -0
- package/dist/collectStore.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/jsonSchema.d.ts +5 -0
- package/dist/jsonSchema.d.ts.map +1 -0
- package/dist/jsonSchema.js +7 -0
- package/dist/jsonSchema.js.map +1 -0
- package/dist/transport.d.ts +15 -4
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +5 -0
- package/dist/transport.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +133 -50
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +64 -61
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { CollectOption, CollectStore, StoredCollect } from './collectStore.js';
|
|
2
|
+
import type { CommandContext } from './types.js';
|
|
3
|
+
/** Plurality outcome: a winning option (or null on no submissions) + full tally. */
|
|
4
|
+
export type PluralityResult = {
|
|
5
|
+
action: string | null;
|
|
6
|
+
noVotes?: boolean;
|
|
7
|
+
tally: Array<{
|
|
8
|
+
action: string;
|
|
9
|
+
label: string;
|
|
10
|
+
votes: number;
|
|
11
|
+
}>;
|
|
12
|
+
};
|
|
13
|
+
/** List outcome: the raw submitted values in submission order. */
|
|
14
|
+
export type ListResult = {
|
|
15
|
+
submissions: string[];
|
|
16
|
+
};
|
|
17
|
+
export type CollectResult = PluralityResult | ListResult;
|
|
18
|
+
/** Plurality; on a tie the earliest-declared option (lowest index) wins; zero
|
|
19
|
+
* total votes → { action: null, noVotes: true }. The tally lists every option
|
|
20
|
+
* in declaration order. */
|
|
21
|
+
export declare function resolveWinner(options: CollectOption[], counts: Record<string, number>): PluralityResult;
|
|
22
|
+
/** Resolve a collect into its result by aggregate shape: plurality → winner +
|
|
23
|
+
* tally; list → the raw submissions. */
|
|
24
|
+
export declare function aggregateResult(c: {
|
|
25
|
+
submission: 'option' | 'text';
|
|
26
|
+
aggregate: 'plurality' | 'list';
|
|
27
|
+
options: CollectOption[];
|
|
28
|
+
}, store: CollectStore, promptId: string): CollectResult;
|
|
29
|
+
export type CollectResultSink = (event: {
|
|
30
|
+
promptId: string;
|
|
31
|
+
result: CollectResult;
|
|
32
|
+
origin: Record<string, unknown>;
|
|
33
|
+
}) => Promise<void>;
|
|
34
|
+
/** Close one open collect: resolve → emit to the sink → mark closed.
|
|
35
|
+
* Emit-before-mark with at-least-once intent — if the sink throws the collect
|
|
36
|
+
* stays open and is retried (the sink/#2 dedups on promptId). Never rejects:
|
|
37
|
+
* a per-item failure is isolated so one bad collect can't stall the rest. */
|
|
38
|
+
export declare function closeOne(store: CollectStore, collect: StoredCollect, sink: CollectResultSink): Promise<void>;
|
|
39
|
+
/** One close-loop pass: resolve every due-by-time open collect and close it. */
|
|
40
|
+
export declare function closeDueByTime(store: CollectStore, now: number, sink: CollectResultSink): Promise<void>;
|
|
41
|
+
/** The internal `__collect_submit` action handler: upsert one submission per
|
|
42
|
+
* member. Ignores submissions for an unknown/closed collect or with no user.
|
|
43
|
+
* Validates per shape (option must be a declared action; text non-empty ≤280).
|
|
44
|
+
* After recording, closes the collect if a submission-count cap is reached. */
|
|
45
|
+
export declare function makeSubmitHandler(store: CollectStore, sink: CollectResultSink): (ctx: CommandContext) => Promise<void>;
|
|
46
|
+
//# sourceMappingURL=collect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../src/collect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,oFAAoF;AACpF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,UAAU,CAAC;AAEzD;;4BAE4B;AAC5B,wBAAgB,aAAa,CAC3B,OAAO,EAAE,aAAa,EAAE,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,eAAe,CAQjB;AAED;yCACyC;AACzC,wBAAgB,eAAe,CAC7B,CAAC,EAAE;IAAE,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC;IAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,EAC/F,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GACf,aAAa,CAGf;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB;;;8EAG8E;AAC9E,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,gFAAgF;AAChF,wBAAsB,cAAc,CAClC,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;;gFAGgF;AAChF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,iBAAiB,GACtB,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAqBxC"}
|
package/dist/collect.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** Plurality; on a tie the earliest-declared option (lowest index) wins; zero
|
|
2
|
+
* total votes → { action: null, noVotes: true }. The tally lists every option
|
|
3
|
+
* in declaration order. */
|
|
4
|
+
export function resolveWinner(options, counts) {
|
|
5
|
+
const tally = options.map((o) => ({ action: o.action, label: o.label, votes: counts[o.action] ?? 0 }));
|
|
6
|
+
const total = tally.reduce((s, t) => s + t.votes, 0);
|
|
7
|
+
if (total === 0)
|
|
8
|
+
return { action: null, noVotes: true, tally };
|
|
9
|
+
// Iterate in declaration order so the first option to reach the max wins ties.
|
|
10
|
+
let best = tally[0];
|
|
11
|
+
for (const t of tally)
|
|
12
|
+
if (t.votes > best.votes)
|
|
13
|
+
best = t;
|
|
14
|
+
return { action: best.action, tally };
|
|
15
|
+
}
|
|
16
|
+
/** Resolve a collect into its result by aggregate shape: plurality → winner +
|
|
17
|
+
* tally; list → the raw submissions. */
|
|
18
|
+
export function aggregateResult(c, store, promptId) {
|
|
19
|
+
if (c.aggregate === 'plurality')
|
|
20
|
+
return resolveWinner(c.options, store.tally(promptId));
|
|
21
|
+
return { submissions: store.submissions(promptId) };
|
|
22
|
+
}
|
|
23
|
+
/** Close one open collect: resolve → emit to the sink → mark closed.
|
|
24
|
+
* Emit-before-mark with at-least-once intent — if the sink throws the collect
|
|
25
|
+
* stays open and is retried (the sink/#2 dedups on promptId). Never rejects:
|
|
26
|
+
* a per-item failure is isolated so one bad collect can't stall the rest. */
|
|
27
|
+
export async function closeOne(store, collect, sink) {
|
|
28
|
+
try {
|
|
29
|
+
const result = aggregateResult(collect, store, collect.promptId);
|
|
30
|
+
await sink({ promptId: collect.promptId, result, origin: collect.origin });
|
|
31
|
+
store.markClosed(collect.promptId);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Leave it open; next pass retries.
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** One close-loop pass: resolve every due-by-time open collect and close it. */
|
|
38
|
+
export async function closeDueByTime(store, now, sink) {
|
|
39
|
+
for (const collect of store.dueByTime(now)) {
|
|
40
|
+
await closeOne(store, collect, sink);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** The internal `__collect_submit` action handler: upsert one submission per
|
|
44
|
+
* member. Ignores submissions for an unknown/closed collect or with no user.
|
|
45
|
+
* Validates per shape (option must be a declared action; text non-empty ≤280).
|
|
46
|
+
* After recording, closes the collect if a submission-count cap is reached. */
|
|
47
|
+
export function makeSubmitHandler(store, sink) {
|
|
48
|
+
return async (ctx) => {
|
|
49
|
+
const promptId = typeof ctx.args.promptId === 'string' ? ctx.args.promptId : '';
|
|
50
|
+
const value = typeof ctx.args.value === 'string' ? ctx.args.value : '';
|
|
51
|
+
const memberId = ctx.user?.id;
|
|
52
|
+
const collect = promptId ? store.getCollect(promptId) : null;
|
|
53
|
+
if (collect && collect.status === 'open' && memberId) {
|
|
54
|
+
const valid = collect.submission === 'option'
|
|
55
|
+
? collect.options.some((o) => o.action === value)
|
|
56
|
+
: value.length > 0 && value.length <= 280;
|
|
57
|
+
if (valid) {
|
|
58
|
+
store.recordSubmission(promptId, memberId, value);
|
|
59
|
+
if (collect.until != null && store.submissionCount(promptId) >= collect.until) {
|
|
60
|
+
await closeOne(store, collect, sink);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Always ack so the dispatch completes (the visible update is #2's job).
|
|
65
|
+
await ctx.reply({ kind: 'text', text: 'submitted' });
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=collect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect.js","sourceRoot":"","sources":["../src/collect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type CollectOption = {
|
|
2
|
+
label: string;
|
|
3
|
+
action: string;
|
|
4
|
+
};
|
|
5
|
+
export type StoredCollect = {
|
|
6
|
+
promptId: string;
|
|
7
|
+
submission: 'option' | 'text';
|
|
8
|
+
options: CollectOption[];
|
|
9
|
+
aggregate: 'plurality' | 'list';
|
|
10
|
+
closesAt: number | null;
|
|
11
|
+
until: number | null;
|
|
12
|
+
origin: Record<string, unknown>;
|
|
13
|
+
status: 'open' | 'closed';
|
|
14
|
+
};
|
|
15
|
+
/** Durable collect + submission storage over the built-in node:sqlite (synchronous). */
|
|
16
|
+
export declare class CollectStore {
|
|
17
|
+
private readonly db;
|
|
18
|
+
constructor(path: string);
|
|
19
|
+
openCollect(c: Omit<StoredCollect, 'status'>): void;
|
|
20
|
+
recordSubmission(promptId: string, memberId: string, value: string): void;
|
|
21
|
+
getCollect(promptId: string): StoredCollect | null;
|
|
22
|
+
/** option(action) → count, with every option present (0 for unsubmitted). */
|
|
23
|
+
tally(promptId: string): Record<string, number>;
|
|
24
|
+
/** All submitted values for the prompt, in submission order. */
|
|
25
|
+
submissions(promptId: string): string[];
|
|
26
|
+
submissionCount(promptId: string): number;
|
|
27
|
+
dueByTime(now: number): StoredCollect[];
|
|
28
|
+
markClosed(promptId: string): void;
|
|
29
|
+
close(): void;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=collectStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectStore.d.ts","sourceRoot":"","sources":["../src/collectStore.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,SAAS,EAAE,WAAW,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC3B,CAAC;AAsBF,wFAAwF;AACxF,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAe;gBAEtB,IAAI,EAAE,MAAM;IAKxB,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,IAAI;IAkBnD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASzE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAiBlD,6EAA6E;IAC7E,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAW/C,gEAAgE;IAChE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAOvC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOzC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE;IASvC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIlC,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
const DDL = `
|
|
3
|
+
CREATE TABLE IF NOT EXISTS collects (
|
|
4
|
+
prompt_id TEXT PRIMARY KEY,
|
|
5
|
+
submission TEXT NOT NULL,
|
|
6
|
+
options TEXT NOT NULL,
|
|
7
|
+
aggregate TEXT NOT NULL,
|
|
8
|
+
closes_at INTEGER,
|
|
9
|
+
until INTEGER,
|
|
10
|
+
origin TEXT NOT NULL,
|
|
11
|
+
status TEXT NOT NULL DEFAULT 'open'
|
|
12
|
+
);
|
|
13
|
+
CREATE TABLE IF NOT EXISTS submissions (
|
|
14
|
+
prompt_id TEXT NOT NULL,
|
|
15
|
+
member_id TEXT NOT NULL,
|
|
16
|
+
value TEXT NOT NULL,
|
|
17
|
+
PRIMARY KEY (prompt_id, member_id)
|
|
18
|
+
);
|
|
19
|
+
CREATE INDEX IF NOT EXISTS collects_open_due_idx ON collects (status, closes_at);
|
|
20
|
+
`;
|
|
21
|
+
/** Durable collect + submission storage over the built-in node:sqlite (synchronous). */
|
|
22
|
+
export class CollectStore {
|
|
23
|
+
db;
|
|
24
|
+
constructor(path) {
|
|
25
|
+
this.db = new DatabaseSync(path);
|
|
26
|
+
this.db.exec(DDL);
|
|
27
|
+
}
|
|
28
|
+
openCollect(c) {
|
|
29
|
+
this.db
|
|
30
|
+
.prepare(`INSERT INTO collects (prompt_id, submission, options, aggregate, closes_at, until, origin, status)
|
|
31
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, 'open')
|
|
32
|
+
ON CONFLICT(prompt_id) DO NOTHING`)
|
|
33
|
+
.run(c.promptId, c.submission, JSON.stringify(c.options), c.aggregate, c.closesAt, c.until, JSON.stringify(c.origin));
|
|
34
|
+
}
|
|
35
|
+
recordSubmission(promptId, memberId, value) {
|
|
36
|
+
this.db
|
|
37
|
+
.prepare(`INSERT INTO submissions (prompt_id, member_id, value) VALUES (?, ?, ?)
|
|
38
|
+
ON CONFLICT(prompt_id, member_id) DO UPDATE SET value = excluded.value`)
|
|
39
|
+
.run(promptId, memberId, value);
|
|
40
|
+
}
|
|
41
|
+
getCollect(promptId) {
|
|
42
|
+
const row = this.db.prepare(`SELECT * FROM collects WHERE prompt_id = ?`).get(promptId);
|
|
43
|
+
if (!row)
|
|
44
|
+
return null;
|
|
45
|
+
return {
|
|
46
|
+
promptId: row.prompt_id,
|
|
47
|
+
submission: row.submission,
|
|
48
|
+
options: JSON.parse(row.options),
|
|
49
|
+
aggregate: row.aggregate,
|
|
50
|
+
closesAt: row.closes_at ?? null,
|
|
51
|
+
until: row.until ?? null,
|
|
52
|
+
origin: JSON.parse(row.origin),
|
|
53
|
+
status: row.status,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** option(action) → count, with every option present (0 for unsubmitted). */
|
|
57
|
+
tally(promptId) {
|
|
58
|
+
const collect = this.getCollect(promptId);
|
|
59
|
+
const counts = {};
|
|
60
|
+
for (const o of collect?.options ?? [])
|
|
61
|
+
counts[o.action] = 0;
|
|
62
|
+
const rows = this.db
|
|
63
|
+
.prepare(`SELECT value, COUNT(*) AS n FROM submissions WHERE prompt_id = ? GROUP BY value`)
|
|
64
|
+
.all(promptId);
|
|
65
|
+
for (const r of rows)
|
|
66
|
+
if (r.value in counts)
|
|
67
|
+
counts[r.value] = r.n;
|
|
68
|
+
return counts;
|
|
69
|
+
}
|
|
70
|
+
/** All submitted values for the prompt, in submission order. */
|
|
71
|
+
submissions(promptId) {
|
|
72
|
+
const rows = this.db
|
|
73
|
+
.prepare(`SELECT value FROM submissions WHERE prompt_id = ? ORDER BY rowid`)
|
|
74
|
+
.all(promptId);
|
|
75
|
+
return rows.map((r) => r.value);
|
|
76
|
+
}
|
|
77
|
+
submissionCount(promptId) {
|
|
78
|
+
const row = this.db
|
|
79
|
+
.prepare(`SELECT COUNT(*) AS n FROM submissions WHERE prompt_id = ?`)
|
|
80
|
+
.get(promptId);
|
|
81
|
+
return row.n;
|
|
82
|
+
}
|
|
83
|
+
dueByTime(now) {
|
|
84
|
+
const rows = this.db
|
|
85
|
+
.prepare(`SELECT prompt_id FROM collects WHERE status = 'open' AND closes_at IS NOT NULL AND closes_at <= ?`)
|
|
86
|
+
.all(now);
|
|
87
|
+
return rows.map((r) => this.getCollect(r.prompt_id)).filter(Boolean);
|
|
88
|
+
}
|
|
89
|
+
markClosed(promptId) {
|
|
90
|
+
this.db.prepare(`UPDATE collects SET status = 'closed' WHERE prompt_id = ?`).run(promptId);
|
|
91
|
+
}
|
|
92
|
+
close() {
|
|
93
|
+
this.db.close();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=collectStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectStore.js","sourceRoot":"","sources":["../src/collectStore.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { Bot, SDK_PACKAGE_VERSION } from './bot.js';
|
|
2
|
-
export
|
|
2
|
+
export { z } from 'zod';
|
|
3
|
+
export type { BotOptions, BotResponse, CommandContext, CommandHandler, CommandEnvelope, LegacyReplyBody, ListItem, ListResponse, CollectOption, CollectResponse, CollectResult, PluralityResult, ListResult, ReplyBody, ReplyEnvelope, HeartbeatEnvelope, TableCell, TableResponse, TextResponse, } from './types.js';
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,YAAY,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,YAAY,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,EACf,UAAU,EACV,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ZodType } from 'zod';
|
|
2
|
+
/** Serialize a zod schema to a plain JSON Schema object for IDENTIFY + storage.
|
|
3
|
+
* Isolated here so the conversion library can be swapped without touching bot.ts. */
|
|
4
|
+
export declare function toJsonSchema(schema: ZodType): Record<string, unknown>;
|
|
5
|
+
//# sourceMappingURL=jsonSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonSchema.d.ts","sourceRoot":"","sources":["../src/jsonSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAEtC;sFACsF;AACtF,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAErE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** Serialize a zod schema to a plain JSON Schema object for IDENTIFY + storage.
|
|
3
|
+
* Isolated here so the conversion library can be swapped without touching bot.ts. */
|
|
4
|
+
export function toJsonSchema(schema) {
|
|
5
|
+
return z.toJSONSchema(schema);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=jsonSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonSchema.js","sourceRoot":"","sources":["../src/jsonSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAgB,MAAM,KAAK,CAAC;AAEtC;sFACsF;AACtF,MAAM,UAAU,YAAY,CAAC,MAAe;IAC1C,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,CAA4B,CAAC;AAC3D,CAAC"}
|
package/dist/transport.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export declare const OP: {
|
|
|
5
5
|
readonly HEARTBEAT: 2;
|
|
6
6
|
readonly REPLY: 3;
|
|
7
7
|
readonly UPDATE: 4;
|
|
8
|
+
readonly COLLECT_RESULT: 5;
|
|
8
9
|
readonly ERROR: 9;
|
|
9
10
|
readonly HELLO: 10;
|
|
10
11
|
readonly HEARTBEAT_ACK: 11;
|
|
@@ -65,14 +66,19 @@ export type ReplyBodyShape = {
|
|
|
65
66
|
charge?: boolean;
|
|
66
67
|
}>;
|
|
67
68
|
} | {
|
|
68
|
-
kind: '
|
|
69
|
+
kind: 'collect';
|
|
69
70
|
promptId: string;
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
prompt: {
|
|
72
|
+
text: string;
|
|
73
|
+
};
|
|
74
|
+
submission: 'option' | 'text';
|
|
75
|
+
options?: ReadonlyArray<{
|
|
72
76
|
label: string;
|
|
73
77
|
action: string;
|
|
74
78
|
}>;
|
|
75
|
-
|
|
79
|
+
aggregate: 'plurality' | 'list';
|
|
80
|
+
closesAt?: number;
|
|
81
|
+
until?: number;
|
|
76
82
|
};
|
|
77
83
|
export type Progress = number | {
|
|
78
84
|
current: number;
|
|
@@ -102,6 +108,9 @@ export interface TransportOptions {
|
|
|
102
108
|
name: string;
|
|
103
109
|
streaming: boolean;
|
|
104
110
|
mimeType?: string;
|
|
111
|
+
inputSchema?: Record<string, unknown>;
|
|
112
|
+
outputSchema?: Record<string, unknown>;
|
|
113
|
+
outputKind?: string;
|
|
105
114
|
}>;
|
|
106
115
|
/** How many commands this bot's machine can process at once, advertised in
|
|
107
116
|
* IDENTIFY so the gateway can pace delivery and queue overflow. Omitted from
|
|
@@ -148,6 +157,8 @@ export declare class Transport {
|
|
|
148
157
|
replayReply(msgId: string): void;
|
|
149
158
|
sendCannotReplay(msgId: string): void;
|
|
150
159
|
sendUpdate(msgId: string, progress: Progress | undefined, body: UpdateBodyShape): void;
|
|
160
|
+
/** Proactive (no msgId): the bot pushes a closed collect's result. */
|
|
161
|
+
sendCollectResult(promptId: string, result: unknown): void;
|
|
151
162
|
private send;
|
|
152
163
|
private startHeartbeat;
|
|
153
164
|
close(): Promise<void>;
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,eAAO,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.js
CHANGED
|
@@ -6,6 +6,7 @@ export const OP = {
|
|
|
6
6
|
HEARTBEAT: 2,
|
|
7
7
|
REPLY: 3,
|
|
8
8
|
UPDATE: 4,
|
|
9
|
+
COLLECT_RESULT: 5,
|
|
9
10
|
ERROR: 9,
|
|
10
11
|
HELLO: 10,
|
|
11
12
|
HEARTBEAT_ACK: 11,
|
|
@@ -149,6 +150,10 @@ export class Transport {
|
|
|
149
150
|
sendUpdate(msgId, progress, body) {
|
|
150
151
|
this.send({ op: OP.UPDATE, d: { msgId, progress, body } });
|
|
151
152
|
}
|
|
153
|
+
/** Proactive (no msgId): the bot pushes a closed collect's result. */
|
|
154
|
+
sendCollectResult(promptId, result) {
|
|
155
|
+
this.send({ op: OP.COLLECT_RESULT, d: { promptId, result } });
|
|
156
|
+
}
|
|
152
157
|
send(msg) {
|
|
153
158
|
if (!this.ws || this.ws.readyState !== WebSocket.OPEN)
|
|
154
159
|
return;
|
package/dist/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,2FAA2F;AAC3F,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,CAAC;IACZ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,EAAE;IACT,aAAa,EAAE,EAAE;CACT,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|