@spinabot/brigade 1.13.0 → 1.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.
Files changed (84) hide show
  1. package/convex/logs.d.ts +9 -9
  2. package/convex/memory.d.ts +21 -21
  3. package/convex/schema.d.ts +11 -11
  4. package/convex/skills.d.ts +3 -3
  5. package/dist/buildstamp.json +1 -1
  6. package/dist/cli/commands/config-cmd.d.ts +12 -19
  7. package/dist/cli/commands/config-cmd.d.ts.map +1 -1
  8. package/dist/cli/commands/config-cmd.js +14 -197
  9. package/dist/cli/commands/config-cmd.js.map +1 -1
  10. package/dist/cli/commands/connect-transcript.d.ts +39 -0
  11. package/dist/cli/commands/connect-transcript.d.ts.map +1 -0
  12. package/dist/cli/commands/connect-transcript.js +60 -0
  13. package/dist/cli/commands/connect-transcript.js.map +1 -0
  14. package/dist/cli/commands/connect.d.ts.map +1 -1
  15. package/dist/cli/commands/connect.js +297 -169
  16. package/dist/cli/commands/connect.js.map +1 -1
  17. package/dist/core/agents-crud-ops.d.ts +15 -0
  18. package/dist/core/agents-crud-ops.d.ts.map +1 -0
  19. package/dist/core/agents-crud-ops.js +27 -0
  20. package/dist/core/agents-crud-ops.js.map +1 -0
  21. package/dist/core/agents-ops.d.ts +43 -0
  22. package/dist/core/agents-ops.d.ts.map +1 -0
  23. package/dist/core/agents-ops.js +117 -0
  24. package/dist/core/agents-ops.js.map +1 -0
  25. package/dist/core/channels-ops.d.ts +30 -0
  26. package/dist/core/channels-ops.d.ts.map +1 -0
  27. package/dist/core/channels-ops.js +52 -0
  28. package/dist/core/channels-ops.js.map +1 -0
  29. package/dist/core/config-ops.d.ts +77 -0
  30. package/dist/core/config-ops.d.ts.map +1 -0
  31. package/dist/core/config-ops.js +241 -0
  32. package/dist/core/config-ops.js.map +1 -0
  33. package/dist/core/exec-ops.d.ts +48 -0
  34. package/dist/core/exec-ops.d.ts.map +1 -0
  35. package/dist/core/exec-ops.js +101 -0
  36. package/dist/core/exec-ops.js.map +1 -0
  37. package/dist/core/integrations-ops.d.ts +25 -0
  38. package/dist/core/integrations-ops.d.ts.map +1 -0
  39. package/dist/core/integrations-ops.js +40 -0
  40. package/dist/core/integrations-ops.js.map +1 -0
  41. package/dist/core/memory-ops.d.ts +20 -0
  42. package/dist/core/memory-ops.d.ts.map +1 -0
  43. package/dist/core/memory-ops.js +40 -0
  44. package/dist/core/memory-ops.js.map +1 -0
  45. package/dist/core/pairing-ops.d.ts +33 -0
  46. package/dist/core/pairing-ops.d.ts.map +1 -0
  47. package/dist/core/pairing-ops.js +78 -0
  48. package/dist/core/pairing-ops.js.map +1 -0
  49. package/dist/core/provider-ops.d.ts +17 -0
  50. package/dist/core/provider-ops.d.ts.map +1 -0
  51. package/dist/core/provider-ops.js +29 -0
  52. package/dist/core/provider-ops.js.map +1 -0
  53. package/dist/core/server.d.ts.map +1 -1
  54. package/dist/core/server.js +261 -14
  55. package/dist/core/server.js.map +1 -1
  56. package/dist/core/sessions-ops.d.ts +25 -0
  57. package/dist/core/sessions-ops.d.ts.map +1 -0
  58. package/dist/core/sessions-ops.js +77 -0
  59. package/dist/core/sessions-ops.js.map +1 -0
  60. package/dist/core/skills-ops.d.ts +14 -0
  61. package/dist/core/skills-ops.d.ts.map +1 -0
  62. package/dist/core/skills-ops.js +28 -0
  63. package/dist/core/skills-ops.js.map +1 -0
  64. package/dist/protocol/errors.d.ts +14 -0
  65. package/dist/protocol/errors.d.ts.map +1 -1
  66. package/dist/protocol/errors.js +14 -0
  67. package/dist/protocol/errors.js.map +1 -1
  68. package/dist/protocol/handshake.d.ts +10 -0
  69. package/dist/protocol/handshake.d.ts.map +1 -1
  70. package/dist/protocol/methods.d.ts +478 -0
  71. package/dist/protocol/methods.d.ts.map +1 -1
  72. package/dist/protocol/stream-seq.d.ts +30 -0
  73. package/dist/protocol/stream-seq.d.ts.map +1 -0
  74. package/dist/protocol/stream-seq.js +38 -0
  75. package/dist/protocol/stream-seq.js.map +1 -0
  76. package/dist/protocol.d.ts +265 -6
  77. package/dist/protocol.d.ts.map +1 -1
  78. package/dist/protocol.js +95 -5
  79. package/dist/protocol.js.map +1 -1
  80. package/dist/tui/client.d.ts +67 -2
  81. package/dist/tui/client.d.ts.map +1 -1
  82. package/dist/tui/client.js +106 -2
  83. package/dist/tui/client.js.map +1 -1
  84. package/package.json +1 -1
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Session-transcript hygiene behind the `sessions.cleanup` gateway RPC — the
3
+ * `brigade sessions cleanup --older-than <duration>` surface, reachable from a
4
+ * remote client.
5
+ *
6
+ * OPERATOR-SCOPED maintenance: deletes an agent's OWN idle transcript files
7
+ * (`~/.brigade/agents/<id>/sessions/<sid>.jsonl`). It does NOT read or disclose
8
+ * another agent's session CONTENT (unlike sessions.list/history/send, which are
9
+ * guarded) — it only removes stale files the gateway regenerates on next
10
+ * access. So no per-session access guard (allowlisted by name in the
11
+ * guard-sweep).
12
+ */
13
+ /** Parse a duration like "30d" / "12h" / "2w" into milliseconds. */
14
+ export declare function parseDuration(s: string): number | null;
15
+ export interface SessionsCleanupResult {
16
+ ok: boolean;
17
+ agentId: string;
18
+ candidates: number;
19
+ deleted: number;
20
+ dryRun: boolean;
21
+ wouldDelete?: string[];
22
+ reason?: string;
23
+ }
24
+ export declare function handleSessionsCleanup(params: unknown): SessionsCleanupResult;
25
+ //# sourceMappingURL=sessions-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-ops.d.ts","sourceRoot":"","sources":["../../src/core/sessions-ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA6BH,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOtD;AAED,MAAM,WAAW,qBAAqB;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,qBAAqB,CA+B5E"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Session-transcript hygiene behind the `sessions.cleanup` gateway RPC — the
3
+ * `brigade sessions cleanup --older-than <duration>` surface, reachable from a
4
+ * remote client.
5
+ *
6
+ * OPERATOR-SCOPED maintenance: deletes an agent's OWN idle transcript files
7
+ * (`~/.brigade/agents/<id>/sessions/<sid>.jsonl`). It does NOT read or disclose
8
+ * another agent's session CONTENT (unlike sessions.list/history/send, which are
9
+ * guarded) — it only removes stale files the gateway regenerates on next
10
+ * access. So no per-session access guard (allowlisted by name in the
11
+ * guard-sweep).
12
+ */
13
+ import { existsSync, readdirSync, rmSync, statSync } from "node:fs";
14
+ import path from "node:path";
15
+ import { DEFAULT_AGENT_ID, resolveSessionsDir } from "../config/paths.js";
16
+ function listSessionFiles(agentId) {
17
+ const dir = resolveSessionsDir(agentId);
18
+ if (!existsSync(dir))
19
+ return [];
20
+ const rows = [];
21
+ for (const name of readdirSync(dir)) {
22
+ if (!name.endsWith(".jsonl"))
23
+ continue;
24
+ try {
25
+ const st = statSync(path.join(dir, name));
26
+ rows.push({ sessionId: name.replace(/\.jsonl$/, ""), bytes: st.size, mtimeMs: st.mtimeMs });
27
+ }
28
+ catch {
29
+ /* ignore unreadable entries */
30
+ }
31
+ }
32
+ return rows;
33
+ }
34
+ /** Parse a duration like "30d" / "12h" / "2w" into milliseconds. */
35
+ export function parseDuration(s) {
36
+ const m = s.match(/^(\d+)\s*(s|m|h|d|w)$/i);
37
+ if (!m)
38
+ return null;
39
+ const n = Number(m[1]);
40
+ const u = m[2]?.toLowerCase() ?? "d";
41
+ const mul = { s: 1_000, m: 60_000, h: 3_600_000, d: 86_400_000, w: 604_800_000 }[u] ?? 0;
42
+ return n * mul;
43
+ }
44
+ export function handleSessionsCleanup(params) {
45
+ const p = (params ?? {});
46
+ const agentId = (p.agentId ?? "").trim() || DEFAULT_AGENT_ID;
47
+ const dryRun = !!p.dryRun;
48
+ const ms = parseDuration((p.olderThan ?? "").trim());
49
+ if (ms == null) {
50
+ return {
51
+ ok: false,
52
+ agentId,
53
+ candidates: 0,
54
+ deleted: 0,
55
+ dryRun,
56
+ reason: `'olderThan' must look like "30d" / "12h" / "2w"`,
57
+ };
58
+ }
59
+ const cutoff = Date.now() - ms;
60
+ const stale = listSessionFiles(agentId).filter((r) => r.mtimeMs < cutoff);
61
+ if (dryRun) {
62
+ return { ok: true, agentId, candidates: stale.length, deleted: 0, dryRun: true, wouldDelete: stale.map((r) => r.sessionId) };
63
+ }
64
+ const dir = resolveSessionsDir(agentId);
65
+ let deleted = 0;
66
+ for (const r of stale) {
67
+ try {
68
+ rmSync(path.join(dir, `${r.sessionId}.jsonl`), { force: true });
69
+ deleted++;
70
+ }
71
+ catch {
72
+ /* best-effort — skip individual delete failures */
73
+ }
74
+ }
75
+ return { ok: true, agentId, candidates: stale.length, deleted, dryRun: false };
76
+ }
77
+ //# sourceMappingURL=sessions-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-ops.js","sourceRoot":"","sources":["../../src/core/sessions-ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAQ1E,SAAS,gBAAgB,CAAC,OAAe;IACxC,MAAM,GAAG,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,SAAS;QACvC,IAAI,CAAC;YACJ,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7F,CAAC;QAAC,MAAM,CAAC;YACR,+BAA+B;QAChC,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,aAAa,CAAC,CAAS;IACtC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,CAAC;IACrC,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,CAAQ,CAAC,IAAI,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,GAAG,CAAC;AAChB,CAAC;AAWD,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACpD,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAA+D,CAAC;IACvF,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,gBAAgB,CAAC;IAC7D,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1B,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO;YACN,EAAE,EAAE,KAAK;YACT,OAAO;YACP,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;YACV,MAAM;YACN,MAAM,EAAE,iDAAiD;SACzD,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IAC1E,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;IAC9H,CAAC;IACD,MAAM,GAAG,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,EAAE,CAAC;QACX,CAAC;QAAC,MAAM,CAAC;YACR,mDAAmD;QACpD,CAAC;IACF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAChF,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Skill authoring behind the `skills.create` / `skills.delete` /
3
+ * `skills.write-file` gateway RPCs — reachable from a remote client.
4
+ *
5
+ * Skills are SKILL.md files on disk (NOT config), so `config.set` can't author
6
+ * them; `skills.status`/`skills.install`/`skills.update` already cover read /
7
+ * install / enable. These close create/delete/support-file. Reuses the
8
+ * `manage_skill` tool (ctx-free execute, owner-gated via wrapper). Operator-
9
+ * scoped (no per-session guard — allowlisted in the guard-sweep).
10
+ */
11
+ export declare function handleSkillsCreate(params: unknown): Promise<unknown>;
12
+ export declare function handleSkillsDelete(params: unknown): Promise<unknown>;
13
+ export declare function handleSkillsWriteFile(params: unknown): Promise<unknown>;
14
+ //# sourceMappingURL=skills-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-ops.d.ts","sourceRoot":"","sources":["../../src/core/skills-ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1E;AACD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1E;AACD,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAE7E"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Skill authoring behind the `skills.create` / `skills.delete` /
3
+ * `skills.write-file` gateway RPCs — reachable from a remote client.
4
+ *
5
+ * Skills are SKILL.md files on disk (NOT config), so `config.set` can't author
6
+ * them; `skills.status`/`skills.install`/`skills.update` already cover read /
7
+ * install / enable. These close create/delete/support-file. Reuses the
8
+ * `manage_skill` tool (ctx-free execute, owner-gated via wrapper). Operator-
9
+ * scoped (no per-session guard — allowlisted in the guard-sweep).
10
+ */
11
+ import { DEFAULT_AGENT_ID } from "../agents/routing/session-key.js";
12
+ import { makeManageSkillTool } from "../agents/tools/manage-skill-tool.js";
13
+ async function runManageSkill(args) {
14
+ const requesterAgentId = typeof args.agentId === "string" && args.agentId.trim().length > 0 ? args.agentId : DEFAULT_AGENT_ID;
15
+ const tool = makeManageSkillTool({ requesterAgentId });
16
+ const res = await tool.execute("gateway", args);
17
+ return res.details;
18
+ }
19
+ export async function handleSkillsCreate(params) {
20
+ return runManageSkill({ ...(params ?? {}), action: "create" });
21
+ }
22
+ export async function handleSkillsDelete(params) {
23
+ return runManageSkill({ ...(params ?? {}), action: "delete" });
24
+ }
25
+ export async function handleSkillsWriteFile(params) {
26
+ return runManageSkill({ ...(params ?? {}), action: "write_file" });
27
+ }
28
+ //# sourceMappingURL=skills-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-ops.js","sourceRoot":"","sources":["../../src/core/skills-ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAE3E,KAAK,UAAU,cAAc,CAAC,IAA6B;IAC1D,MAAM,gBAAgB,GACrB,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACtG,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAa,CAAC,CAAC;IACzD,OAAO,GAAG,CAAC,OAAO,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAe;IACvD,OAAO,cAAc,CAAC,EAAE,GAAI,CAAC,MAAM,IAAI,EAAE,CAA6B,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC7F,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAe;IACvD,OAAO,cAAc,CAAC,EAAE,GAAI,CAAC,MAAM,IAAI,EAAE,CAA6B,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC7F,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAe;IAC1D,OAAO,cAAc,CAAC,EAAE,GAAI,CAAC,MAAM,IAAI,EAAE,CAA6B,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;AACjG,CAAC"}
@@ -23,6 +23,20 @@ export declare const ErrorCodes: {
23
23
  readonly APPROVAL_NOT_FOUND: "APPROVAL_NOT_FOUND";
24
24
  /** Subsystem is loading / draining; caller may retry shortly. */
25
25
  readonly UNAVAILABLE: "UNAVAILABLE";
26
+ /**
27
+ * The remaining codes the gateway actually emits today (previously
28
+ * undocumented string literals — catalogued here so a web/mobile client has
29
+ * the COMPLETE, stable set to branch on). Values match the on-the-wire
30
+ * strings the server already sends.
31
+ */
32
+ /** Per-connection rate limiter tripped; honour `retryAfterMs`. */
33
+ readonly RATE_LIMITED: "rate-limited";
34
+ /** Unexpected server-side failure handling the request. */
35
+ readonly INTERNAL: "internal";
36
+ /** Caller lacks permission for the target (owner/session gate). */
37
+ readonly FORBIDDEN: "forbidden";
38
+ /** Caller's operator scope is insufficient for this method. */
39
+ readonly SCOPE_INSUFFICIENT: "scope-insufficient";
26
40
  };
27
41
  export type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];
28
42
  export interface ErrorShapeOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/protocol/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,eAAO,MAAM,UAAU;IACtB,oEAAoE;;IAEpE,kDAAkD;;IAElD,sEAAsE;;IAEtE,uCAAuC;;IAEvC,2EAA2E;;IAE3E,iEAAiE;;CAExD,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAErE,MAAM,WAAW,iBAAiB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CACzB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,iBAAsB,GAC1B,kBAAkB,CAQpB"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/protocol/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,eAAO,MAAM,UAAU;IACtB,oEAAoE;;IAEpE,kDAAkD;;IAElD,sEAAsE;;IAEtE,uCAAuC;;IAEvC,2EAA2E;;IAE3E,iEAAiE;;IAEjE;;;;;OAKG;IACH,kEAAkE;;IAElE,2DAA2D;;IAE3D,mEAAmE;;IAEnE,+DAA+D;;CAEtD,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAErE,MAAM,WAAW,iBAAiB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CACzB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,iBAAsB,GAC1B,kBAAkB,CAQpB"}
@@ -22,6 +22,20 @@ export const ErrorCodes = {
22
22
  APPROVAL_NOT_FOUND: "APPROVAL_NOT_FOUND",
23
23
  /** Subsystem is loading / draining; caller may retry shortly. */
24
24
  UNAVAILABLE: "UNAVAILABLE",
25
+ /**
26
+ * The remaining codes the gateway actually emits today (previously
27
+ * undocumented string literals — catalogued here so a web/mobile client has
28
+ * the COMPLETE, stable set to branch on). Values match the on-the-wire
29
+ * strings the server already sends.
30
+ */
31
+ /** Per-connection rate limiter tripped; honour `retryAfterMs`. */
32
+ RATE_LIMITED: "rate-limited",
33
+ /** Unexpected server-side failure handling the request. */
34
+ INTERNAL: "internal",
35
+ /** Caller lacks permission for the target (owner/session gate). */
36
+ FORBIDDEN: "forbidden",
37
+ /** Caller's operator scope is insufficient for this method. */
38
+ SCOPE_INSUFFICIENT: "scope-insufficient",
25
39
  };
26
40
  /** Helper to construct a typed `ProtocolErrorShape` from one of the known codes. */
27
41
  export function errorShape(code, message, opts = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/protocol/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,oEAAoE;IACpE,UAAU,EAAE,YAAY;IACxB,kDAAkD;IAClD,UAAU,EAAE,YAAY;IACxB,sEAAsE;IACtE,aAAa,EAAE,eAAe;IAC9B,uCAAuC;IACvC,eAAe,EAAE,iBAAiB;IAClC,2EAA2E;IAC3E,kBAAkB,EAAE,oBAAoB;IACxC,iEAAiE;IACjE,WAAW,EAAE,aAAa;CACjB,CAAC;AAUX,oFAAoF;AACpF,MAAM,UAAU,UAAU,CACzB,IAAe,EACf,OAAe,EACf,OAA0B,EAAE;IAE5B,OAAO;QACN,IAAI;QACJ,OAAO;QACP,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/protocol/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,oEAAoE;IACpE,UAAU,EAAE,YAAY;IACxB,kDAAkD;IAClD,UAAU,EAAE,YAAY;IACxB,sEAAsE;IACtE,aAAa,EAAE,eAAe;IAC9B,uCAAuC;IACvC,eAAe,EAAE,iBAAiB;IAClC,2EAA2E;IAC3E,kBAAkB,EAAE,oBAAoB;IACxC,iEAAiE;IACjE,WAAW,EAAE,aAAa;IAC1B;;;;;OAKG;IACH,kEAAkE;IAClE,YAAY,EAAE,cAAc;IAC5B,2DAA2D;IAC3D,QAAQ,EAAE,UAAU;IACpB,mEAAmE;IACnE,SAAS,EAAE,WAAW;IACtB,+DAA+D;IAC/D,kBAAkB,EAAE,oBAAoB;CAC/B,CAAC;AAUX,oFAAoF;AACpF,MAAM,UAAU,UAAU,CACzB,IAAe,EACf,OAAe,EACf,OAA0B,EAAE;IAE5B,OAAO;QACN,IAAI;QACJ,OAAO;QACP,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/E,CAAC;AACH,CAAC"}
@@ -81,6 +81,16 @@ export interface HelloOk {
81
81
  server: {
82
82
  version: string;
83
83
  connId: string;
84
+ /**
85
+ * Per-process boot id (session generation / "epoch"). Changes whenever
86
+ * the gateway process restarts. A client compares the epoch across
87
+ * (re)connections: if it changed, the server's per-session seq counters
88
+ * reset, so the client must invalidate its seq cursors and re-`resume`
89
+ * rather than infer a restart from a backwards seq. This makes cursor
90
+ * invalidation explicit + correct, rather than inferred from a
91
+ * backwards-jumping seq.
92
+ */
93
+ epoch: string;
84
94
  };
85
95
  features: {
86
96
  methods: readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../src/protocol/handshake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAI3C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;CAYnB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAEvF,eAAO,MAAM,kBAAkB;;;;;;;;CAQrB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAC;AAE7F,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,eAAe,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,eAAO,MAAM,cAAc;;;;;;;CAOjB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAIjF,MAAM,WAAW,aAAa;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,EAAE;QACT,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,MAAM,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,IAAI,CAAC,EAAE;QACN,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;QAClC,UAAU,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACF"}
1
+ {"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../src/protocol/handshake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAI3C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;CAYnB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAEvF,eAAO,MAAM,kBAAkB;;;;;;;;CAQrB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAC;AAE7F,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,eAAe,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,eAAO,MAAM,cAAc;;;;;;;CAOjB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAIjF,MAAM,WAAW,aAAa;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf;;;;;;;;WAQG;QACH,KAAK,EAAE,MAAM,CAAC;KACd,CAAC;IACF,QAAQ,EAAE;QACT,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,MAAM,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,IAAI,CAAC,EAAE;QACN,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;QAClC,UAAU,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACF"}