@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
@@ -1,202 +1,25 @@
1
1
  /**
2
- * `brigade config <list|get|set|unset|file>` — config CRUD over brigade.json.
2
+ * `brigade config <list|get|set|unset|file|schema|validate>` — config CRUD
3
+ * over brigade.json.
3
4
  *
4
- * - 4 subcommands (no `schema` / `validate` Brigade's TypeBox schema is
5
- * private and validation happens automatically on every write through
6
- * `writeBrigadeConfig`).
7
- * - Dot-notation only (no `path[0]` array indexing) Brigade's super-
8
- * config has no positional arrays the user would target by index.
9
- * - JSON5 parsing for `set` values when --strict-json is off (numbers,
10
- * booleans, arrays, objects) with raw-string fallback.
11
- * - Atomic write + 4-deep .bak rotation already inherited from
12
- * `writeBrigadeConfig` — no extra wiring needed.
5
+ * The path parsing, nested get/set/delete, value parsing, and secret redaction
6
+ * all live in `core/config-ops.ts` SHARED with the `config.*` gateway RPCs so
7
+ * the CLI and a remote client mutate config (and redact secrets) identically.
8
+ * This file is the thin CLI shell: arg handling + stdout/exit-code formatting.
9
+ *
10
+ * - Dot-notation paths (+ escaped dots + bracket indices/keys).
11
+ * - JSON5 parsing for `set` values when --strict-json is off, raw-string fallback.
12
+ * - Atomic write + .bak rotation inherited from `saveConfig`.
13
13
  * - Secrets redaction in `list`/`get`: any segment matching
14
- * /^(key|apiKey|token|password|secret)$/i (case-insensitive) renders
15
- * as `__BRIGADE_REDACTED__`.
14
+ * /^(key|apiKey|token|password|secret|...)$/i renders as `__BRIGADE_REDACTED__`.
16
15
  *
17
16
  * On-disk path: `~/.brigade/brigade.json` (resolved via BRIGADE_DIR).
18
17
  */
19
18
  import * as path from "node:path";
20
19
  import chalk from "chalk";
21
- import JSON5 from "json5";
22
20
  import { BrigadeConfigSchema, BRIGADE_CONFIG_FILENAME, collectBrigadeConfigErrors, } from "../../core/brigade-config.js";
23
21
  import { BRIGADE_DIR, loadConfig, saveConfig } from "../../core/config.js";
24
- const REDACTED_SENTINEL = "__BRIGADE_REDACTED__";
25
- // Case-insensitive match — segments that smell secret get their VALUE redacted
26
- // in `list` and `get` output. The actual on-disk file is unchanged.
27
- const SENSITIVE_SEGMENT = /^(key|apikey|token|secret|password|refreshtoken|accesstoken)$/i;
28
- /* ───────────────────────── path helpers ───────────────────────── */
29
- /**
30
- * Parse a config path into segments. Supports:
31
- *
32
- * - dot-notation: `agents.defaults.provider`
33
- * - escaped dot: `keys.foo\.bar` → ["keys", "foo.bar"]
34
- * - bracket array index: `agents.fallbacks[0]` → ["agents", "fallbacks", "0"]
35
- * - bracket literal key: `secrets.providers["my.vault"]` → ["secrets", "providers", "my.vault"]
36
- *
37
- * Bracket support is the genuine ergonomic win (operators editing array
38
- * slots in `agents.defaults.model.fallbacks[]` shouldn't have to fall
39
- * through to `--strict-json` whole-array overwrites).
40
- */
41
- function parsePath(raw) {
42
- const trimmed = raw.trim();
43
- if (trimmed.length === 0) {
44
- throw new Error("config path is empty");
45
- }
46
- const segments = [];
47
- let buf = "";
48
- for (let i = 0; i < trimmed.length; i++) {
49
- const ch = trimmed[i];
50
- // Escape a literal dot inside a key.
51
- if (ch === "\\" && trimmed[i + 1] === ".") {
52
- buf += ".";
53
- i++;
54
- continue;
55
- }
56
- // Dot separator.
57
- if (ch === ".") {
58
- if (buf.length === 0) {
59
- throw new Error(`empty segment in config path "${raw}"`);
60
- }
61
- segments.push(buf);
62
- buf = "";
63
- continue;
64
- }
65
- // Bracket: either array index `[0]` or literal key `["foo.bar"]`.
66
- if (ch === "[") {
67
- if (buf.length > 0) {
68
- segments.push(buf);
69
- buf = "";
70
- }
71
- const close = trimmed.indexOf("]", i);
72
- if (close === -1) {
73
- throw new Error(`unclosed "[" in config path "${raw}"`);
74
- }
75
- let inside = trimmed.slice(i + 1, close).trim();
76
- // Strip optional surrounding quotes — accept both `[0]` and `["key"]`.
77
- if ((inside.startsWith('"') && inside.endsWith('"')) ||
78
- (inside.startsWith("'") && inside.endsWith("'"))) {
79
- inside = inside.slice(1, -1);
80
- }
81
- if (inside.length === 0) {
82
- throw new Error(`empty bracket segment in config path "${raw}"`);
83
- }
84
- segments.push(inside);
85
- i = close;
86
- continue;
87
- }
88
- buf += ch;
89
- }
90
- if (buf.length > 0)
91
- segments.push(buf);
92
- if (segments.length === 0) {
93
- throw new Error(`unable to parse config path "${raw}"`);
94
- }
95
- return segments;
96
- }
97
- /** True iff the segment looks like a non-negative integer (array index). */
98
- function isIndexSegment(seg) {
99
- return /^[0-9]+$/.test(seg);
100
- }
101
- function getNested(root, segments) {
102
- let cur = root;
103
- for (const seg of segments) {
104
- if (cur === null || cur === undefined)
105
- return undefined;
106
- if (Array.isArray(cur) && isIndexSegment(seg)) {
107
- cur = cur[Number(seg)];
108
- continue;
109
- }
110
- if (typeof cur !== "object")
111
- return undefined;
112
- cur = cur[seg];
113
- }
114
- return cur;
115
- }
116
- function setNested(root, segments, value) {
117
- let cur = root;
118
- for (let i = 0; i < segments.length - 1; i++) {
119
- const seg = segments[i] ?? "";
120
- const nextSeg = segments[i + 1] ?? "";
121
- const wantArray = isIndexSegment(nextSeg);
122
- const existing = Array.isArray(cur) && isIndexSegment(seg) ? cur[Number(seg)] : cur[seg];
123
- if (existing === undefined || existing === null || typeof existing !== "object") {
124
- // Create container in the right shape for the NEXT segment.
125
- const fresh = wantArray ? [] : {};
126
- if (Array.isArray(cur) && isIndexSegment(seg)) {
127
- cur[Number(seg)] = fresh;
128
- }
129
- else {
130
- cur[seg] = fresh;
131
- }
132
- cur = fresh;
133
- }
134
- else {
135
- cur = Array.isArray(cur) && isIndexSegment(seg) ? cur[Number(seg)] : cur[seg];
136
- }
137
- }
138
- const tail = segments[segments.length - 1] ?? "";
139
- if (Array.isArray(cur) && isIndexSegment(tail)) {
140
- cur[Number(tail)] = value;
141
- }
142
- else {
143
- cur[tail] = value;
144
- }
145
- }
146
- function deleteNested(root, segments) {
147
- let cur = root;
148
- for (let i = 0; i < segments.length - 1; i++) {
149
- const seg = segments[i] ?? "";
150
- const next = Array.isArray(cur) && isIndexSegment(seg) ? cur[Number(seg)] : cur?.[seg];
151
- if (next === undefined || next === null || typeof next !== "object")
152
- return false;
153
- cur = next;
154
- }
155
- const tail = segments[segments.length - 1] ?? "";
156
- if (Array.isArray(cur) && isIndexSegment(tail)) {
157
- const idx = Number(tail);
158
- if (idx < cur.length) {
159
- cur.splice(idx, 1); // shift down — matches array-mutation semantics
160
- return true;
161
- }
162
- return false;
163
- }
164
- if (cur && typeof cur === "object" && tail in cur) {
165
- delete cur[tail];
166
- return true;
167
- }
168
- return false;
169
- }
170
- /* ───────────────────────── value parsing ─────────────────────── */
171
- function parseValue(raw, opts = {}) {
172
- if (opts.strictJson) {
173
- return JSON.parse(raw);
174
- }
175
- try {
176
- return JSON5.parse(raw);
177
- }
178
- catch {
179
- // Fall through to raw string when JSON5 can't parse it.
180
- return raw;
181
- }
182
- }
183
- /* ───────────────────────── redaction ─────────────────────────── */
184
- function redactDeep(value, segmentsParent = []) {
185
- if (value === null || typeof value !== "object")
186
- return value;
187
- if (Array.isArray(value))
188
- return value.map((v) => redactDeep(v, segmentsParent));
189
- const out = {};
190
- for (const [k, v] of Object.entries(value)) {
191
- if (SENSITIVE_SEGMENT.test(k) && typeof v === "string" && v.length > 0) {
192
- out[k] = REDACTED_SENTINEL;
193
- }
194
- else {
195
- out[k] = redactDeep(v, [...segmentsParent, k]);
196
- }
197
- }
198
- return out;
199
- }
22
+ import { deleteNested, getNested, parseConfigValue, parsePath, redactDeep, setNested, } from "../../core/config-ops.js";
200
23
  /* ───────────────────────── runtime ───────────────────────────── */
201
24
  export async function runConfigGet(rawPath, opts = {}) {
202
25
  const cfg = loadConfig();
@@ -224,7 +47,7 @@ export async function runConfigSet(rawPath, rawValue, opts = {}) {
224
47
  const segments = parsePath(rawPath);
225
48
  let parsed;
226
49
  try {
227
- parsed = parseValue(rawValue, { strictJson: opts.strictJson });
50
+ parsed = parseConfigValue(rawValue, { strictJson: opts.strictJson });
228
51
  }
229
52
  catch (err) {
230
53
  process.stderr.write(`brigade config: failed to parse value: ${err.message}\n`);
@@ -294,10 +117,6 @@ export async function runConfigFile(opts = {}) {
294
117
  /**
295
118
  * Print the brigade.json TypeBox schema as JSON — useful for IDE /
296
119
  * external-tool autocompletion against the live shape.
297
- *
298
- * The output is the in-memory TypeBox schema descriptor (with `type`,
299
- * `properties`, `required`, etc.) — JSON-Schema-compatible enough to feed
300
- * into a JSON-Schema-aware editor.
301
120
  */
302
121
  export async function runConfigSchema(_opts = {}) {
303
122
  process.stdout.write(`${JSON.stringify(BrigadeConfigSchema, null, 2)}\n`);
@@ -307,9 +126,7 @@ export async function runConfigSchema(_opts = {}) {
307
126
  * Validate the on-disk brigade.json against the TypeBox schema. Reports a
308
127
  * pass/fail line plus per-issue path + message when invalid.
309
128
  *
310
- * Exit codes:
311
- * 0 — config is valid (or doesn't exist yet — empty file is benign)
312
- * 1 — config is invalid; issues listed
129
+ * Exit codes: 0 — valid (or absent); 1 — invalid (issues listed).
313
130
  */
314
131
  export async function runConfigValidate(opts = {}) {
315
132
  const filePath = path.join(BRIGADE_DIR, BRIGADE_CONFIG_FILENAME);
@@ -1 +1 @@
1
- {"version":3,"file":"config-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/config-cmd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/config-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Pure transcript-projection helpers for the connect TUI's reliable-streaming
3
+ * renderer. Extracted from `connect.ts` so the identity-key + message-text
4
+ * logic is unit-testable without driving Pi-TUI (the suite convention — see
5
+ * `connect.test.ts`, which exercises pure helpers directly).
6
+ *
7
+ * No brand / chalk / widget coupling: these return raw keys + strings; the
8
+ * caller wraps them in Pi-TUI widgets and colour, and applies the terminal
9
+ * escape scrub (`scrubRenderable`) between joining and clipping tool output.
10
+ */
11
+ /**
12
+ * Identity key for an assistant message's render block: `${depth}:${timestamp}`.
13
+ *
14
+ * Pi stamps each assistant message with a stable `timestamp` at creation that
15
+ * is constant across all of its `message_update`s and its `message_end`, and a
16
+ * NEW message (e.g. the continuation after a tool call) gets a NEW timestamp.
17
+ * So one logical message owns exactly one block — a block lands where its
18
+ * message belongs in the stream (never above a tool it came after), a
19
+ * late/duplicate update resolves to its own block instead of spawning a copy,
20
+ * and re-applying a message on `resume` is idempotent. `depth` keeps sub-agent
21
+ * (≥1) streams from colliding with the top-level (0) stream. Falls back to
22
+ * `"live"` only if a message somehow lacks a timestamp (shouldn't happen — the
23
+ * field is required on Pi messages).
24
+ */
25
+ export declare function asstKey(depth: number, msg: {
26
+ timestamp?: number;
27
+ } | null | undefined): string;
28
+ /** Plain text of a user message (string content, or the text blocks of an
29
+ * array content). Returns "" for anything else. */
30
+ export declare function extractUserText(msg: {
31
+ content?: unknown;
32
+ } | null | undefined): string;
33
+ /** Concatenate the text blocks of a toolResult message's content into one raw
34
+ * string (string content passes through). Caller scrubs + clips. */
35
+ export declare function joinToolResultText(content: unknown): string;
36
+ /** Collapse whitespace, trim, and clip to `maxLen` with an ellipsis — for the
37
+ * one-line tool-result preview shown next to the ✓/✗ indicator. */
38
+ export declare function clipOneLine(text: string, maxLen?: number): string;
39
+ //# sourceMappingURL=connect-transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-transcript.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/connect-transcript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAE7F;AAED;oDACoD;AACpD,wBAAgB,eAAe,CAAC,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAUrF;AAED;qEACqE;AACrE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAQ3D;AAED;oEACoE;AACpE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAG7D"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Pure transcript-projection helpers for the connect TUI's reliable-streaming
3
+ * renderer. Extracted from `connect.ts` so the identity-key + message-text
4
+ * logic is unit-testable without driving Pi-TUI (the suite convention — see
5
+ * `connect.test.ts`, which exercises pure helpers directly).
6
+ *
7
+ * No brand / chalk / widget coupling: these return raw keys + strings; the
8
+ * caller wraps them in Pi-TUI widgets and colour, and applies the terminal
9
+ * escape scrub (`scrubRenderable`) between joining and clipping tool output.
10
+ */
11
+ /**
12
+ * Identity key for an assistant message's render block: `${depth}:${timestamp}`.
13
+ *
14
+ * Pi stamps each assistant message with a stable `timestamp` at creation that
15
+ * is constant across all of its `message_update`s and its `message_end`, and a
16
+ * NEW message (e.g. the continuation after a tool call) gets a NEW timestamp.
17
+ * So one logical message owns exactly one block — a block lands where its
18
+ * message belongs in the stream (never above a tool it came after), a
19
+ * late/duplicate update resolves to its own block instead of spawning a copy,
20
+ * and re-applying a message on `resume` is idempotent. `depth` keeps sub-agent
21
+ * (≥1) streams from colliding with the top-level (0) stream. Falls back to
22
+ * `"live"` only if a message somehow lacks a timestamp (shouldn't happen — the
23
+ * field is required on Pi messages).
24
+ */
25
+ export function asstKey(depth, msg) {
26
+ return `${depth}:${typeof msg?.timestamp === "number" ? msg.timestamp : "live"}`;
27
+ }
28
+ /** Plain text of a user message (string content, or the text blocks of an
29
+ * array content). Returns "" for anything else. */
30
+ export function extractUserText(msg) {
31
+ if (!msg)
32
+ return "";
33
+ if (typeof msg.content === "string")
34
+ return msg.content;
35
+ if (Array.isArray(msg.content)) {
36
+ return msg.content
37
+ .filter((b) => b?.type === "text" && typeof b.text === "string")
38
+ .map((b) => b.text)
39
+ .join("");
40
+ }
41
+ return "";
42
+ }
43
+ /** Concatenate the text blocks of a toolResult message's content into one raw
44
+ * string (string content passes through). Caller scrubs + clips. */
45
+ export function joinToolResultText(content) {
46
+ if (Array.isArray(content)) {
47
+ return content
48
+ .filter((b) => b?.type === "text" && typeof b.text === "string")
49
+ .map((b) => b.text)
50
+ .join(" ");
51
+ }
52
+ return typeof content === "string" ? content : "";
53
+ }
54
+ /** Collapse whitespace, trim, and clip to `maxLen` with an ellipsis — for the
55
+ * one-line tool-result preview shown next to the ✓/✗ indicator. */
56
+ export function clipOneLine(text, maxLen = 80) {
57
+ const oneLine = (text ?? "").replace(/\s+/g, " ").trim();
58
+ return oneLine.length > maxLen ? `${oneLine.slice(0, maxLen)}…` : oneLine;
59
+ }
60
+ //# sourceMappingURL=connect-transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-transcript.js","sourceRoot":"","sources":["../../../src/cli/commands/connect-transcript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,GAA8C;IACpF,OAAO,GAAG,KAAK,IAAI,OAAO,GAAG,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AAClF,CAAC;AAED;oDACoD;AACpD,MAAM,UAAU,eAAe,CAAC,GAA6C;IAC5E,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,GAAG,CAAC,OAAO;aAChB,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;aACpE,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC;aACjC,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;IACD,OAAO,EAAE,CAAC;AACX,CAAC;AAED;qEACqE;AACrE,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IAClD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO;aACZ,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;aACpE,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC;aACjC,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IACD,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AACnD,CAAC;AAED;oEACoE;AACpE,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAM,GAAG,EAAE;IACpD,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,OAAO,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,EAMN,GAAG,EACH,MAAM,wBAAwB,CAAC;AAgBhC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAsBpD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,WAAW,EAAE,OAAO,GAAG,IAAI,CAejF;AAED,MAAM,WAAW,qBAAqB;IACrC,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC7B,iFAAiF;IACjF,KAAK,IAAI,OAAO,CAAC;IACjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACtC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,WAAW,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAGT;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,aAAa,CAAC,CAsHhG;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAClC,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,aAAa,EACrB,cAAc,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,aAAa,CAAC,CA+sExB"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,EAMN,GAAG,EACH,MAAM,wBAAwB,CAAC;AAgBhC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAuBpD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,WAAW,EAAE,OAAO,GAAG,IAAI,CAejF;AAED,MAAM,WAAW,qBAAqB;IACrC,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC7B,iFAAiF;IACjF,KAAK,IAAI,OAAO,CAAC;IACjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACtC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,WAAW,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAGT;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,aAAa,CAAC,CAsHhG;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAClC,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,aAAa,EACrB,cAAc,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,aAAa,CAAC,CAw0ExB"}