@cotal-ai/connector-claude-code 0.8.1 → 0.8.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2B,KAAK,SAAS,EAAoC,MAAM,gBAAgB,CAAC;AAoB3G;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,SAgG7B,CAAC"}
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2D,KAAK,SAAS,EAAoC,MAAM,gBAAgB,CAAC;AAoB3I;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,SA0G7B,CAAC"}
package/dist/extension.js CHANGED
@@ -1,9 +1,9 @@
1
- import { mkdtempSync, writeFileSync } from "node:fs";
1
+ import { mkdtempSync } from "node:fs";
2
2
  import { tmpdir } from "node:os";
3
3
  import { join, resolve } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
- import { loadAgentFile, registry } from "@cotal-ai/core";
6
- import { aclEnv, launchEnv, mcpServerEnvKeys } from "@cotal-ai/connector-core";
5
+ import { hardenPrivate, loadAgentFile, registry, writeSecretFile } from "@cotal-ai/core";
6
+ import { aclEnv, controlEndpoint, launchEnv, mcpServerEnvKeys, transcriptChannel } from "@cotal-ai/connector-core";
7
7
  /** Name the cotal MCP server is registered under via --mcp-config (see buildLaunch). */
8
8
  const MCP_SERVER_NAME = "cotal";
9
9
  /** Channel ref for `--dangerously-load-development-channels`, which turns on the cotal MCP server's
@@ -28,6 +28,7 @@ const MCP_CJS = resolve(PLUGIN_ROOT, "dist", "mcp.cjs");
28
28
  export const claudeConnector = {
29
29
  kind: "connector",
30
30
  name: "claude",
31
+ transcriptChannel, // the shared `tr-<name>` convention (connector-core), exposed via the contract
31
32
  pluginRoot: PLUGIN_ROOT,
32
33
  requires: ["claude"],
33
34
  buildLaunch(opts) {
@@ -37,6 +38,11 @@ export const claudeConnector = {
37
38
  // The OS allow-list (PATH/HOME/TERM/…) is the only thing inherited from the manager env, plus
38
39
  // — only when a shared server declares them via `${VAR}` — the named secrets it needs (mcpKeys,
39
40
  // by name). The operator's unrelated secrets don't reach the child (P3).
41
+ // The session's local control endpoint: the in-process MCP server LISTENS on it (auth), and the
42
+ // lifecycle hooks (child processes of `claude`, which inherit this env) CONNECT to it. Both read
43
+ // path+token from the env — never recomputed from public identity — and the manager keeps the
44
+ // pair (returned as `control` below) to drive a cooperative shutdown on Windows.
45
+ const control = controlEndpoint(opts.space, opts.name);
40
46
  const env = {
41
47
  ...launchEnv({ mcpKeys: mcpServerEnvKeys(shared) }),
42
48
  ...aclEnv(opts),
@@ -45,6 +51,8 @@ export const claudeConnector = {
45
51
  // Force the connector to emit channel wake-nudges: Claude doesn't advertise the
46
52
  // `claude/channel` capability back over MCP, so auto-detection would see it "off".
47
53
  COTAL_CHANNEL: "1",
54
+ COTAL_CONTROL_SOCKET: control.path,
55
+ COTAL_CONTROL_TOKEN: control.token, // env only — never argv/logs/persisted (token hygiene)
48
56
  };
49
57
  // A session can mirror its own transcript to `tr-<name>` so peers can read what the
50
58
  // agent actually did — OFF by default (transcripts are verbose and may carry sensitive
@@ -97,8 +105,9 @@ export const claudeConnector = {
97
105
  // overwrite). Left for the OS to reap: the file must outlive this call (Claude reads it at
98
106
  // startup and on /mcp reconnect), and buildLaunch doesn't own the child's lifecycle.
99
107
  const dir = mkdtempSync(join(tmpdir(), "cotal-mcp-"));
108
+ hardenPrivate(dir, "dir"); // win32: mkdtemp's 0700 is a no-op — harden the ACL before the config lands
100
109
  mcpConfig = join(dir, "mcp.json");
101
- writeFileSync(mcpConfig, JSON.stringify({ mcpServers }, null, 2), { mode: 0o600 });
110
+ writeSecretFile(mcpConfig, JSON.stringify({ mcpServers }, null, 2));
102
111
  }
103
112
  args.push("--strict-mcp-config", "--mcp-config", mcpConfig);
104
113
  // An agent file carries identity (read in-session via COTAL_AGENT_FILE) plus
@@ -122,6 +131,7 @@ export const claudeConnector = {
122
131
  // The dev-channels flag shows a one-time "Enter to confirm" prompt; the
123
132
  // manager auto-clears it so a supervised launch needs no human keypress.
124
133
  confirm: "Enter to confirm",
134
+ control,
125
135
  };
126
136
  },
127
137
  };
@@ -1 +1 @@
1
- {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
package/dist/hook.cjs CHANGED
@@ -14704,87 +14704,6 @@ var require_mod6 = __commonJS({
14704
14704
  }
14705
14705
  });
14706
14706
 
14707
- // ../connector-core/dist/config.js
14708
- var import_node_os = require("node:os");
14709
- var import_node_fs2 = require("node:fs");
14710
-
14711
- // ../../packages/core/dist/subjects.js
14712
- function isConcreteChannel(channel) {
14713
- return !channel.split(".").some((s) => s.trim() === "*" || s.trim() === ">");
14714
- }
14715
- function subjectMatches(pattern, subject) {
14716
- const p = pattern.split(".");
14717
- const s = subject.split(".");
14718
- for (let i = 0; i < p.length; i++) {
14719
- if (p[i] === ">")
14720
- return i < s.length;
14721
- if (i >= s.length)
14722
- return false;
14723
- if (p[i] === "*")
14724
- continue;
14725
- if (p[i] !== s[i])
14726
- return false;
14727
- }
14728
- return p.length === s.length;
14729
- }
14730
- function assertValidChannel(channel) {
14731
- const segs = channel.split(".");
14732
- if (!channel.length || segs.some((s) => s.length === 0))
14733
- throw new Error(`invalid channel "${channel}": empty segment (no leading/trailing/double dots)`);
14734
- segs.forEach((s, i) => {
14735
- if (s === ">") {
14736
- if (i !== segs.length - 1)
14737
- throw new Error(`invalid channel "${channel}": '>' is only valid as the last segment`);
14738
- return;
14739
- }
14740
- if (s === "*")
14741
- return;
14742
- if (!/^[A-Za-z0-9_-]+$/.test(s))
14743
- throw new Error(`invalid channel "${channel}": segment "${s}" must be a NATS-safe token ([A-Za-z0-9_-]), '*', or '>' \u2014 policy channel names can't contain characters the wire layer would rewrite`);
14744
- });
14745
- return channel;
14746
- }
14747
- function channelInAllow(allow, channel) {
14748
- return allow.some((a) => subjectMatches(a, channel));
14749
- }
14750
-
14751
- // ../../packages/core/dist/resolve.js
14752
- function assertValidName(name) {
14753
- if (name.length === 0 || name !== name.trim())
14754
- throw new Error(`invalid name ${JSON.stringify(name)}: must be non-empty with no surrounding whitespace`);
14755
- if (/[\r\n]/.test(name))
14756
- throw new Error(`invalid name ${JSON.stringify(name)}: must be a single line`);
14757
- if (name.includes("/"))
14758
- throw new Error(`invalid name ${JSON.stringify(name)}: "/" is reserved (the owner/name separator)`);
14759
- }
14760
-
14761
- // ../../packages/core/dist/link.js
14762
- function parseJoinLink(link) {
14763
- const tls = link.startsWith("cotals://");
14764
- if (!tls && !link.startsWith("cotal://"))
14765
- throw new Error(`not a Cotal link (expected cotal:// or cotals://): ${link}`);
14766
- const u = new URL(link.replace(/^cotals?:\/\//, tls ? "https://" : "http://"));
14767
- if (!u.hostname)
14768
- throw new Error(`Cotal link has no host: ${link}`);
14769
- const space = decodeURIComponent(u.pathname.replace(/^\/+/, "").split("/")[0] ?? "");
14770
- if (!space)
14771
- throw new Error(`Cotal link has no space (cotal://host/<space>): ${link}`);
14772
- const chParam = u.searchParams.get("channels") ?? u.searchParams.get("channel");
14773
- const channels = chParam ? chParam.split(",").map((s) => s.trim()).filter(Boolean) : void 0;
14774
- const user = u.username ? decodeURIComponent(u.username) : void 0;
14775
- const pass = u.password ? decodeURIComponent(u.password) : void 0;
14776
- return {
14777
- servers: `nats://${u.hostname}:${u.port || "4222"}`,
14778
- space,
14779
- channels,
14780
- tls,
14781
- // userinfo with no ':' is a bare token; with ':' it's user/password.
14782
- token: user && !pass ? user : void 0,
14783
- user: pass ? user : void 0,
14784
- pass: pass || void 0
14785
- };
14786
- }
14787
-
14788
14707
  // ../../packages/core/dist/identity.js
14789
14708
  var import_nkeys = __toESM(require_mod(), 1);
14790
14709
 
@@ -16435,123 +16354,13 @@ var import_kv5 = __toESM(require_mod6(), 1);
16435
16354
  var import_kv6 = __toESM(require_mod6(), 1);
16436
16355
  var import_transport_node4 = __toESM(require_transport_node(), 1);
16437
16356
 
16438
- // ../../packages/core/dist/agent-file.js
16439
- var import_node_fs = require("node:fs");
16440
- function unquote(v) {
16441
- if (v.startsWith('"') && v.endsWith('"') || v.startsWith("'") && v.endsWith("'"))
16442
- return v.slice(1, -1);
16443
- return v;
16444
- }
16445
- function parseFrontmatter(src) {
16446
- const out = {};
16447
- for (const raw of src.split("\n")) {
16448
- const line = raw.trim();
16449
- if (!line || line.startsWith("#"))
16450
- continue;
16451
- const colon = line.indexOf(":");
16452
- if (colon < 1)
16453
- throw new Error(`agent file: unparseable frontmatter line "${raw}"`);
16454
- const key = line.slice(0, colon).trim();
16455
- const val = line.slice(colon + 1).trim();
16456
- if (val.startsWith("[")) {
16457
- if (!val.endsWith("]"))
16458
- throw new Error(`agent file: unterminated list for "${key}"`);
16459
- out[key] = val.slice(1, -1).split(",").map((s) => unquote(s.trim())).filter(Boolean);
16460
- } else {
16461
- out[key] = unquote(val);
16462
- }
16463
- }
16464
- return out;
16465
- }
16466
- function loadAgentFile(path) {
16467
- const src = (0, import_node_fs.readFileSync)(path, "utf8");
16468
- const m = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/.exec(src);
16469
- if (!m)
16470
- throw new Error(`agent file ${path}: missing "---" frontmatter block`);
16471
- const fm = parseFrontmatter(m[1]);
16472
- const persona = m[2].trim();
16473
- const str = (k) => {
16474
- const v = fm[k];
16475
- if (Array.isArray(v))
16476
- throw new Error(`agent file ${path}: "${k}" must be a scalar`);
16477
- return v;
16478
- };
16479
- const list = (k) => {
16480
- const v = fm[k];
16481
- if (v === void 0)
16482
- return void 0;
16483
- return Array.isArray(v) ? v : [v];
16484
- };
16485
- const name = str("name");
16486
- if (!name)
16487
- throw new Error(`agent file ${path}: "name" is required`);
16488
- assertValidName(name);
16489
- const kind = str("kind");
16490
- if (kind && kind !== "agent" && kind !== "endpoint")
16491
- throw new Error(`agent file ${path}: "kind" must be "agent" or "endpoint"`);
16492
- for (const old of ["channels", "publish"])
16493
- if (old in fm)
16494
- throw new Error(`agent file ${path}: "${old}" was renamed \u2014 use "subscribe"/"allowSubscribe" (read) and "allowPublish" (post)`);
16495
- const subscribe = list("subscribe");
16496
- const allowSubscribe = list("allowSubscribe");
16497
- const allowPublish = list("allowPublish");
16498
- const quiet = list("quiet");
16499
- const muted = list("muted");
16500
- for (const ch of [...subscribe ?? [], ...allowSubscribe ?? [], ...allowPublish ?? []])
16501
- try {
16502
- assertValidChannel(ch);
16503
- } catch (e) {
16504
- throw new Error(`agent file ${path}: ${e.message}`);
16505
- }
16506
- const effSubscribe = subscribe?.length ? subscribe : ["general"];
16507
- const effAllow = allowSubscribe?.length ? allowSubscribe : effSubscribe;
16508
- for (const ch of effSubscribe)
16509
- if (!channelInAllow(effAllow, ch))
16510
- throw new Error(`agent file ${path}: subscribe channel "${ch}" is not within allowSubscribe [${effAllow.join(", ")}]`);
16511
- const both = (quiet ?? []).filter((c) => (muted ?? []).includes(c));
16512
- if (both.length)
16513
- throw new Error(`agent file ${path}: channel(s) [${both.join(", ")}] are in both quiet and muted \u2014 pick one`);
16514
- for (const [field, chans] of [["quiet", quiet], ["muted", muted]])
16515
- for (const ch of chans ?? []) {
16516
- try {
16517
- assertValidChannel(ch);
16518
- } catch (e) {
16519
- throw new Error(`agent file ${path}: ${e.message}`);
16520
- }
16521
- if (!isConcreteChannel(ch))
16522
- throw new Error(`agent file ${path}: ${field} channel "${ch}" must be a concrete channel (no wildcard)`);
16523
- if (!channelInAllow(effAllow, ch))
16524
- throw new Error(`agent file ${path}: ${field} channel "${ch}" is not within your read ACL / allowSubscribe [${effAllow.join(", ")}]`);
16525
- }
16526
- const known = /* @__PURE__ */ new Set(["name", "role", "kind", "description", "tags", "subscribe", "allowSubscribe", "allowPublish", "quiet", "muted", "model", "capabilities", "owner"]);
16527
- const meta = {};
16528
- for (const [k, v] of Object.entries(fm))
16529
- if (!known.has(k) && typeof v === "string")
16530
- meta[k] = v;
16531
- return {
16532
- name,
16533
- role: str("role"),
16534
- kind,
16535
- description: str("description"),
16536
- tags: list("tags"),
16537
- subscribe,
16538
- allowSubscribe,
16539
- allowPublish,
16540
- quiet,
16541
- muted,
16542
- model: str("model"),
16543
- capabilities: list("capabilities"),
16544
- owner: str("owner"),
16545
- meta: Object.keys(meta).length ? meta : void 0,
16546
- persona: persona || void 0
16547
- };
16548
- }
16357
+ // ../../packages/core/dist/secret-fs.js
16358
+ var isWin = process.platform === "win32";
16549
16359
 
16550
16360
  // ../../packages/core/dist/endpoint.js
16551
16361
  var import_transport_node5 = __toESM(require_transport_node(), 1);
16552
16362
  var import_jetstream2 = __toESM(require_mod4(), 1);
16553
16363
  var import_kv7 = __toESM(require_mod6(), 1);
16554
- var DEFAULT_SERVER = "nats://127.0.0.1:4222";
16555
16364
 
16556
16365
  // ../../packages/core/dist/spaces.js
16557
16366
  var import_transport_node6 = __toESM(require_transport_node(), 1);
@@ -16585,86 +16394,12 @@ var Registry = class {
16585
16394
  var registry = new Registry();
16586
16395
 
16587
16396
  // ../connector-core/dist/config.js
16588
- function splitList(v) {
16589
- if (!v)
16590
- return [];
16591
- return v.split(",").map((s) => s.trim()).filter(Boolean);
16592
- }
16593
16397
  function hasIdentity(env = process.env) {
16594
16398
  return Boolean(env.COTAL_NAME?.trim() || env.COTAL_LINK?.trim() || env.COTAL_AGENT_FILE?.trim());
16595
16399
  }
16596
- function configFromEnv(env = process.env) {
16597
- const link = env.COTAL_LINK?.trim() ? parseJoinLink(env.COTAL_LINK.trim()) : void 0;
16598
- const def = env.COTAL_AGENT_FILE?.trim() ? loadAgentFile(env.COTAL_AGENT_FILE.trim()) : void 0;
16599
- const name = env.COTAL_NAME?.trim() || def?.name || (link ? (0, import_node_os.userInfo)().username : void 0);
16600
- if (!name)
16601
- throw new Error("COTAL_NAME, COTAL_AGENT_FILE or COTAL_LINK is required \u2014 a Cotal session needs an explicit identity from its launcher");
16602
- const subscribe = splitList(env.COTAL_SUBSCRIBE);
16603
- const resolvedSubscribe = subscribe.length ? subscribe : def?.subscribe ?? link?.channels ?? ["general"];
16604
- const allowSub = splitList(env.COTAL_ALLOW_SUBSCRIBE);
16605
- const resolvedAllowSub = allowSub.length ? allowSub : def?.allowSubscribe ?? resolvedSubscribe;
16606
- for (const ch of resolvedSubscribe)
16607
- if (!channelInAllow(resolvedAllowSub, ch))
16608
- throw new Error(`COTAL config: subscribe channel "${ch}" is not within allowSubscribe [${resolvedAllowSub.join(", ")}]`);
16609
- const allowPub = splitList(env.COTAL_ALLOW_PUBLISH);
16610
- const resolvedAllowPub = allowPub.length ? allowPub : def?.allowPublish ?? [];
16611
- for (const ch of [...resolvedSubscribe, ...resolvedAllowSub, ...resolvedAllowPub])
16612
- assertValidChannel(ch);
16613
- const qEnv = splitList(env.COTAL_QUIET), mEnv = splitList(env.COTAL_MUTED);
16614
- const resolvedQuiet = qEnv.length ? qEnv : def?.quiet ?? [];
16615
- const resolvedMuted = mEnv.length ? mEnv : def?.muted ?? [];
16616
- const bothModes = resolvedQuiet.filter((c) => resolvedMuted.includes(c));
16617
- if (bothModes.length)
16618
- throw new Error(`COTAL config: channel(s) [${bothModes.join(", ")}] are in both quiet and muted`);
16619
- for (const [field, chans] of [["quiet", resolvedQuiet], ["muted", resolvedMuted]])
16620
- for (const ch of chans) {
16621
- assertValidChannel(ch);
16622
- if (!isConcreteChannel(ch))
16623
- throw new Error(`COTAL config: ${field} channel "${ch}" must be concrete (no wildcard)`);
16624
- if (!channelInAllow(resolvedAllowSub, ch))
16625
- throw new Error(`COTAL config: ${field} channel "${ch}" is not within allowSubscribe [${resolvedAllowSub.join(", ")}]`);
16626
- }
16627
- const credsPath = env.COTAL_CREDS?.trim();
16628
- return {
16629
- space: env.COTAL_SPACE?.trim() || link?.space || "demo",
16630
- id: env.COTAL_ID?.trim() || void 0,
16631
- creds: credsPath ? (0, import_node_fs2.readFileSync)(credsPath, "utf8") : void 0,
16632
- name,
16633
- role: env.COTAL_ROLE?.trim() || def?.role || void 0,
16634
- description: def?.description,
16635
- tags: def?.tags,
16636
- meta: def?.meta,
16637
- capabilities: def?.capabilities,
16638
- model: env.COTAL_MODEL?.trim() || def?.model || void 0,
16639
- servers: env.COTAL_SERVERS?.trim() || link?.servers || DEFAULT_SERVER,
16640
- subscribe: resolvedSubscribe,
16641
- allowSubscribe: resolvedAllowSub,
16642
- // Post ACL is default-DENY: only what's explicitly declared (env > agent-file). The broker
16643
- // enforces it under auth; in open mode posting is unrestricted regardless.
16644
- allowPublish: resolvedAllowPub,
16645
- quiet: resolvedQuiet,
16646
- muted: resolvedMuted,
16647
- kind: env.COTAL_KIND?.trim() || def?.kind || "agent",
16648
- token: env.COTAL_TOKEN?.trim() || link?.token,
16649
- user: link?.user,
16650
- pass: link?.pass,
16651
- tls: env.COTAL_TLS?.trim() === "1" || link?.tls || false,
16652
- feedbackKey: env.COTAL_FEEDBACK_KEY?.trim() || void 0,
16653
- feedbackUrl: env.COTAL_FEEDBACK_URL?.trim() || void 0
16654
- };
16655
- }
16656
16400
 
16657
- // ../connector-core/dist/runtime.js
16658
- var import_node_os2 = require("node:os");
16659
- var import_node_path = require("node:path");
16660
- var ILLEGAL = /[^A-Za-z0-9_-]/g;
16661
- function tok(s) {
16662
- const t = s.trim().replace(ILLEGAL, "_");
16663
- return t.length ? t.slice(0, 40) : "_";
16664
- }
16665
- function controlSocketPath(space, name) {
16666
- return (0, import_node_path.join)((0, import_node_os2.tmpdir)(), `cotal-${tok(space)}-${tok(name)}.sock`);
16667
- }
16401
+ // ../connector-core/dist/control.js
16402
+ var MAX_FRAME_BYTES = 1 << 20;
16668
16403
 
16669
16404
  // ../connector-core/dist/relay.js
16670
16405
  var import_node_net = require("node:net");
@@ -16690,9 +16425,17 @@ function done(out) {
16690
16425
  async function runHookRelay() {
16691
16426
  if (!hasIdentity())
16692
16427
  return done("");
16428
+ const path = process.env.COTAL_CONTROL_SOCKET;
16429
+ const token2 = process.env.COTAL_CONTROL_TOKEN;
16430
+ if (!path || !token2)
16431
+ return done("");
16693
16432
  const raw = (await readStdin()).trim() || "{}";
16694
- const cfg = configFromEnv();
16695
- const sock = (0, import_node_net.connect)(controlSocketPath(cfg.space, cfg.name));
16433
+ let event = {};
16434
+ try {
16435
+ event = JSON.parse(raw);
16436
+ } catch {
16437
+ }
16438
+ const sock = (0, import_node_net.connect)(path);
16696
16439
  let reply = "";
16697
16440
  let settled = false;
16698
16441
  const finish = (out) => {
@@ -16707,7 +16450,7 @@ async function runHookRelay() {
16707
16450
  };
16708
16451
  const timer = setTimeout(() => finish(""), TIMEOUT_MS);
16709
16452
  sock.setEncoding("utf8");
16710
- sock.on("connect", () => sock.write(raw + "\n"));
16453
+ sock.on("connect", () => sock.write(JSON.stringify({ token: token2, event }) + "\n"));
16711
16454
  sock.on("data", (d) => {
16712
16455
  reply += d;
16713
16456
  const nl = reply.indexOf("\n");
package/dist/mcp.cjs CHANGED
@@ -45862,6 +45862,8 @@ function assertValidName(name) {
45862
45862
  throw new Error(`invalid name ${JSON.stringify(name)}: must be a single line`);
45863
45863
  if (name.includes("/"))
45864
45864
  throw new Error(`invalid name ${JSON.stringify(name)}: "/" is reserved (the owner/name separator)`);
45865
+ if (name.includes("\\"))
45866
+ throw new Error(`invalid name ${JSON.stringify(name)}: "\\" is reserved (a Windows path separator)`);
45865
45867
  }
45866
45868
 
45867
45869
  // ../../packages/core/dist/link.js
@@ -47956,6 +47958,9 @@ function loadAgentFile(path) {
47956
47958
  };
47957
47959
  }
47958
47960
 
47961
+ // ../../packages/core/dist/secret-fs.js
47962
+ var isWin = process.platform === "win32";
47963
+
47959
47964
  // ../../packages/core/dist/endpoint.js
47960
47965
  var import_node_events = require("node:events");
47961
47966
  var import_node_crypto = require("node:crypto");
@@ -50237,7 +50242,7 @@ function configFromEnv(env = process.env) {
50237
50242
  description: def?.description,
50238
50243
  tags: def?.tags,
50239
50244
  meta: def?.meta,
50240
- capabilities: def?.capabilities,
50245
+ capabilities: splitList(env.COTAL_CAPABILITIES).length ? splitList(env.COTAL_CAPABILITIES) : def?.capabilities,
50241
50246
  model: env.COTAL_MODEL?.trim() || def?.model || void 0,
50242
50247
  servers: env.COTAL_SERVERS?.trim() || link?.servers || DEFAULT_SERVER,
50243
50248
  subscribe: resolvedSubscribe,
@@ -50809,16 +50814,9 @@ ${lines.join("\n")}`;
50809
50814
  }
50810
50815
  };
50811
50816
 
50812
- // ../connector-core/dist/runtime.js
50813
- var import_node_os2 = require("node:os");
50814
- var import_node_path = require("node:path");
50815
- var ILLEGAL2 = /[^A-Za-z0-9_-]/g;
50816
- function tok(s) {
50817
- const t = s.trim().replace(ILLEGAL2, "_");
50818
- return t.length ? t.slice(0, 40) : "_";
50819
- }
50820
- function controlSocketPath(space, name) {
50821
- return (0, import_node_path.join)((0, import_node_os2.tmpdir)(), `cotal-${tok(space)}-${tok(name)}.sock`);
50817
+ // ../connector-core/dist/launch.js
50818
+ function transcriptChannel(name) {
50819
+ return `tr-${name.toLowerCase().replace(/[^a-z0-9_-]+/g, "-")}`;
50822
50820
  }
50823
50821
 
50824
50822
  // ../connector-core/dist/tool-specs.js
@@ -51363,6 +51361,14 @@ function registerCotalTools(server, agent, config2, source) {
51363
51361
  // ../connector-core/dist/control.js
51364
51362
  var import_node_net = require("node:net");
51365
51363
  var import_node_fs3 = require("node:fs");
51364
+ var import_node_crypto2 = require("node:crypto");
51365
+ var MAX_FRAME_BYTES = 1 << 20;
51366
+ var AUTH_DEADLINE_MS = 5e3;
51367
+ function tokenMatches(presented, digest) {
51368
+ if (typeof presented !== "string")
51369
+ return false;
51370
+ return (0, import_node_crypto2.timingSafeEqual)((0, import_node_crypto2.createHash)("sha256").update(presented).digest(), digest);
51371
+ }
51366
51372
  function who(i) {
51367
51373
  return i.fromRole ? `${i.fromName}/${i.fromRole}` : i.fromName;
51368
51374
  }
@@ -51383,26 +51389,53 @@ function formatInjection(items) {
51383
51389
  ${items.map(fmtItem2).join("\n")}
51384
51390
  ${tail}`;
51385
51391
  }
51386
- function startControlServer(agent, socketPath, handle) {
51387
- if ((0, import_node_fs3.existsSync)(socketPath)) {
51392
+ function startControlServer(agent, endpoint, handle, opts = {}) {
51393
+ const { path } = endpoint;
51394
+ const digest = (0, import_node_crypto2.createHash)("sha256").update(endpoint.token).digest();
51395
+ if (process.platform !== "win32" && (0, import_node_fs3.existsSync)(path)) {
51388
51396
  try {
51389
- (0, import_node_fs3.unlinkSync)(socketPath);
51397
+ (0, import_node_fs3.unlinkSync)(path);
51390
51398
  } catch {
51391
51399
  }
51392
51400
  }
51393
51401
  const server = (0, import_node_net.createServer)((sock) => {
51394
51402
  let buf = "";
51403
+ let handled = false;
51395
51404
  sock.setEncoding("utf8");
51405
+ const deadline = setTimeout(() => sock.destroy(), AUTH_DEADLINE_MS);
51406
+ deadline.unref?.();
51407
+ sock.on("close", () => clearTimeout(deadline));
51396
51408
  sock.on("data", async (d) => {
51409
+ if (handled)
51410
+ return;
51397
51411
  buf += d;
51412
+ if (buf.length > MAX_FRAME_BYTES) {
51413
+ sock.destroy();
51414
+ return;
51415
+ }
51398
51416
  const nl = buf.indexOf("\n");
51399
51417
  if (nl < 0)
51400
51418
  return;
51401
- let ev = {};
51419
+ handled = true;
51420
+ clearTimeout(deadline);
51421
+ let frame = {};
51402
51422
  try {
51403
- ev = JSON.parse(buf.slice(0, nl) || "{}");
51423
+ frame = JSON.parse(buf.slice(0, nl) || "{}");
51404
51424
  } catch {
51405
51425
  }
51426
+ if (!tokenMatches(frame.token, digest)) {
51427
+ sock.destroy();
51428
+ return;
51429
+ }
51430
+ if (frame.op === "shutdown") {
51431
+ try {
51432
+ sock.end(JSON.stringify({ ok: true }) + "\n");
51433
+ } catch {
51434
+ }
51435
+ opts.onShutdown?.();
51436
+ return;
51437
+ }
51438
+ const ev = frame.event ?? {};
51406
51439
  const reply = await handle(agent, ev);
51407
51440
  try {
51408
51441
  sock.end(JSON.stringify(reply) + "\n");
@@ -51412,10 +51445,18 @@ function startControlServer(agent, socketPath, handle) {
51412
51445
  sock.on("error", () => {
51413
51446
  });
51414
51447
  });
51415
- server.on("error", (e) => process.stderr.write(`[cotal-connector] control server error: ${e.message}
51416
- `));
51417
- server.listen(socketPath, () => process.stderr.write(`[cotal-connector] control socket: ${socketPath}
51418
- `));
51448
+ let bound = false;
51449
+ server.on("error", (e) => {
51450
+ process.stderr.write(`[cotal-connector] control server error: ${e.message}
51451
+ `);
51452
+ if (opts.fatalBind && !bound)
51453
+ process.exit(1);
51454
+ });
51455
+ server.listen(path, () => {
51456
+ bound = true;
51457
+ process.stderr.write(`[cotal-connector] control socket: ${path}
51458
+ `);
51459
+ });
51419
51460
  return server;
51420
51461
  }
51421
51462
 
@@ -51423,9 +51464,6 @@ function startControlServer(agent, socketPath, handle) {
51423
51464
  var import_node_fs4 = require("node:fs");
51424
51465
  var MAX_PREVIEW = 700;
51425
51466
  var MAX_CHUNK = 6e3;
51426
- function transcriptChannel(name) {
51427
- return `tr-${name.toLowerCase().replace(/[^a-z0-9_-]+/g, "-")}`;
51428
- }
51429
51467
  function truncate(s, max) {
51430
51468
  return s.length > max ? `${s.slice(0, max - 1)}\u2026` : s;
51431
51469
  }
@@ -51649,8 +51687,32 @@ async function main() {
51649
51687
  agent.start();
51650
51688
  if (/^(1|true|yes|on)$/i.test(process.env.COTAL_TRANSCRIPT ?? ""))
51651
51689
  mirror = new TranscriptMirror(agent, transcriptChannel(config2.name));
51652
- const socketPath = controlSocketPath(config2.space, config2.name);
51653
- const controlServer = startControlServer(agent, socketPath, claudeHandle);
51690
+ const controlPath = process.env.COTAL_CONTROL_SOCKET;
51691
+ const controlToken = process.env.COTAL_CONTROL_TOKEN;
51692
+ if (!controlPath || !controlToken) {
51693
+ process.stderr.write(
51694
+ "[cotal-connector] managed session missing COTAL_CONTROL_SOCKET/COTAL_CONTROL_TOKEN \u2014 cannot serve the control plane\n"
51695
+ );
51696
+ process.exit(1);
51697
+ }
51698
+ let controlServer;
51699
+ const shutdown = async () => {
51700
+ try {
51701
+ controlServer?.close();
51702
+ } catch {
51703
+ }
51704
+ try {
51705
+ await agent.stop();
51706
+ } finally {
51707
+ process.exit(0);
51708
+ }
51709
+ };
51710
+ controlServer = startControlServer(
51711
+ agent,
51712
+ { path: controlPath, token: controlToken },
51713
+ claudeHandle,
51714
+ { fatalBind: true, onShutdown: () => void shutdown() }
51715
+ );
51654
51716
  const server = new McpServer(
51655
51717
  { name: "cotal", version: "0.0.0" },
51656
51718
  {
@@ -51683,17 +51745,6 @@ async function main() {
51683
51745
  (item) => nudge(item, `You were mentioned by ${fmtFrom(item)} on #${item.channel ?? "?"} \u2014 pull it with cotal_inbox.`)
51684
51746
  );
51685
51747
  agent.on("wake", () => nudge());
51686
- const shutdown = async () => {
51687
- try {
51688
- controlServer.close();
51689
- } catch {
51690
- }
51691
- try {
51692
- await agent.stop();
51693
- } finally {
51694
- process.exit(0);
51695
- }
51696
- };
51697
51748
  process.on("SIGINT", () => void shutdown());
51698
51749
  process.on("SIGTERM", () => void shutdown());
51699
51750
  const transport = new StdioServerTransport();
package/dist/mcp.js CHANGED
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
12
12
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
13
- import { configFromEnv, hasIdentity, MeshAgent, controlSocketPath, startControlServer, registerCotalTools, feedbackLine, ORIENTATION_BOOTSTRAP, formatInjection, fmtFrom, channelMeta, } from "@cotal-ai/connector-core";
13
+ import { configFromEnv, hasIdentity, MeshAgent, startControlServer, registerCotalTools, feedbackLine, ORIENTATION_BOOTSTRAP, formatInjection, fmtFrom, channelMeta, } from "@cotal-ai/connector-core";
14
14
  import { TranscriptMirror, transcriptChannel } from "./transcript.js";
15
15
  /** Mirrors this session's transcript to `tr-<name>` — set in main() iff COTAL_TRANSCRIPT
16
16
  * is on (buildLaunch sets it for managed sessions; personal sessions never mirror). */
@@ -119,9 +119,34 @@ async function main() {
119
119
  agent.start(); // background connect with retry — never blocks tool serving
120
120
  if (/^(1|true|yes|on)$/i.test(process.env.COTAL_TRANSCRIPT ?? ""))
121
121
  mirror = new TranscriptMirror(agent, transcriptChannel(config.name));
122
- // Local control plane for the lifecycle hooks (presence + message injection).
123
- const socketPath = controlSocketPath(config.space, config.name);
124
- const controlServer = startControlServer(agent, socketPath, claudeHandle);
122
+ // Local control plane for the lifecycle hooks (presence + message injection) and the manager's
123
+ // cooperative shutdown. Path + token come from the launch env (buildLaunch set them, and the hooks
124
+ // inherit this process's env) — a managed session without them is misconfigured, so fail loud
125
+ // rather than serve an unauthenticated/no control plane.
126
+ const controlPath = process.env.COTAL_CONTROL_SOCKET;
127
+ const controlToken = process.env.COTAL_CONTROL_TOKEN;
128
+ if (!controlPath || !controlToken) {
129
+ process.stderr.write("[cotal-connector] managed session missing COTAL_CONTROL_SOCKET/COTAL_CONTROL_TOKEN — cannot serve the control plane\n");
130
+ process.exit(1);
131
+ }
132
+ // Defined before the server so it can be the cooperative-shutdown handler; only ever CALLED after
133
+ // `controlServer` is assigned (on a signal or an authed `{op:"shutdown"}`), so the forward ref is safe.
134
+ let controlServer;
135
+ const shutdown = async () => {
136
+ try {
137
+ controlServer?.close();
138
+ }
139
+ catch {
140
+ /* ignore */
141
+ }
142
+ try {
143
+ await agent.stop();
144
+ }
145
+ finally {
146
+ process.exit(0);
147
+ }
148
+ };
149
+ controlServer = startControlServer(agent, { path: controlPath, token: controlToken }, claudeHandle, { fatalBind: true, onShutdown: () => void shutdown() });
125
150
  const server = new McpServer({ name: "cotal", version: "0.0.0" }, {
126
151
  // `claude/channel` makes this MCP server a Claude Code *channel*: peer
127
152
  // messages can be pushed straight into the session (waking it if idle).
@@ -190,20 +215,6 @@ async function main() {
190
215
  // — F4=B (wake-only). Its body isn't injected; cotal_inbox recalls it.
191
216
  agent.on("mention-wake", (item) => nudge(item, `You were mentioned by ${fmtFrom(item)} on #${item.channel ?? "?"} — pull it with cotal_inbox.`));
192
217
  agent.on("wake", () => nudge());
193
- const shutdown = async () => {
194
- try {
195
- controlServer.close();
196
- }
197
- catch {
198
- /* ignore */
199
- }
200
- try {
201
- await agent.stop();
202
- }
203
- finally {
204
- process.exit(0);
205
- }
206
- };
207
218
  process.on("SIGINT", () => void shutdown());
208
219
  process.on("SIGTERM", () => void shutdown());
209
220
  const transport = new StdioServerTransport();
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import type { MeshAgent } from "@cotal-ai/connector-core";
2
- /** `tr-<name>` with the name reduced to subject-safe channel characters. */
3
- export declare function transcriptChannel(name: string): string;
2
+ export { transcriptChannel } from "@cotal-ai/connector-core";
4
3
  export declare class TranscriptMirror {
5
4
  private readonly agent;
6
5
  private readonly channel;
@@ -1 +1 @@
1
- {"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAK1D,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AA8DD,qBAAa,gBAAgB;IAWzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,MAAM,CAAK;IACnB;sFACkF;IAClF,OAAO,CAAC,OAAO,CAAC,CAAyD;IACzE;mDAC+C;IAC/C,OAAO,CAAC,KAAK,CAAoC;gBAG9B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM;IAGlC;iGAC6F;IAC7F,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAO1B;sEACkE;IAClE,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAO1B,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,QAAQ;YAWF,OAAO;IAmBrB,8FAA8F;IAC9F,OAAO,CAAC,YAAY;CAyBrB"}
1
+ {"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAO1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AA8D7D,qBAAa,gBAAgB;IAWzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,MAAM,CAAK;IACnB;sFACkF;IAClF,OAAO,CAAC,OAAO,CAAC,CAAyD;IACzE;mDAC+C;IAC/C,OAAO,CAAC,KAAK,CAAoC;gBAG9B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM;IAGlC;iGAC6F;IAC7F,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAO1B;sEACkE;IAClE,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAO1B,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,QAAQ;YAWF,OAAO;IAmBrB,8FAA8F;IAC9F,OAAO,CAAC,YAAY;CAyBrB"}
@@ -16,10 +16,9 @@
16
16
  import { closeSync, fstatSync, openSync, readSync, statSync } from "node:fs";
17
17
  const MAX_PREVIEW = 700; // tool results / user prompts — enough to see what happened
18
18
  const MAX_CHUNK = 6000; // chars per published message; batches split on entry boundaries
19
- /** `tr-<name>` with the name reduced to subject-safe channel characters. */
20
- export function transcriptChannel(name) {
21
- return `tr-${name.toLowerCase().replace(/[^a-z0-9_-]+/g, "-")}`;
22
- }
19
+ // The `tr-<name>` convention now lives in connector-core (shared with the manager + opencode
20
+ // connector). Re-exported here so existing imports (mcp.ts, index.ts) keep resolving.
21
+ export { transcriptChannel } from "@cotal-ai/connector-core";
23
22
  function truncate(s, max) {
24
23
  return s.length > max ? `${s.slice(0, max - 1)}…` : s;
25
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG7E,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,4DAA4D;AACrF,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,iEAAiE;AAEzF,4EAA4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,GAAW;IACtC,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,kFAAkF;AAClF,SAAS,OAAO,CAAC,KAAc;IAC7B,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;IACnD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,WAAW,CAAC;IACpF,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,kFAAkF;AAClF,SAAS,UAAU,CAAC,OAAgB;IAClC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QACxB,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAQ,CAAwB,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACrG,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,iGAAiG;AACjG,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAuE,CAAC;IAC5E,IAAI,CAAC;QACH,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC;IACnC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,OAA6E,EAAE,CAAC;YAC9F,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;iBAC5D,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,OAAO,OAAO,KAAK,QAAQ;YAC7B,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,OAAoF,EAAE,CAAC;gBACrG,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBAC7B,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;oBACvC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC9F,CAAC;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;oBAC/C,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,OAAO,gBAAgB;IAWR;IACA;IAXX,IAAI,CAAU;IACd,MAAM,GAAG,CAAC,CAAC;IACnB;sFACkF;IAC1E,OAAO,CAA0D;IACzE;mDAC+C;IACvC,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEjD,YACmB,KAAgB,EAChB,OAAe;QADf,UAAK,GAAL,KAAK,CAAW;QAChB,YAAO,GAAP,OAAO,CAAQ;IAC/B,CAAC;IAEJ;iGAC6F;IAC7F,KAAK,CAAC,IAAa;QACjB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;sEACkE;IAClE,KAAK,CAAC,IAAa;QACjB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,IAAyB;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAyC,CAAW,CAAC,OAAO,IAAI,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,IAAa;QAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO;QACpE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,2DAA2D;QACrF,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,6DAA6D;QAChF,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,CAAC,yCAAyC;QAC1F,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAClD,IAAI,UAAU,KAAK,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,cAAc;YACtD,IAAI,CAAC,OAAO,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;QACjG,CAAC;QACD,wFAAwF;QACxF,uFAAuF;QACvF,mDAAmD;QACnD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACvB,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;IAED,8FAA8F;IACtF,YAAY;QAClB,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,8CAA8C;QAC3G,IAAI,EAAU,CAAC;QACf,IAAI,CAAC;YACH,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAK,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;YAChC,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,iCAAiC;YAC1E,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7C,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,EAAE,CAAC;YAC9B,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBACxD,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;aAC/E,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;CACF;AAED;wEACwE;AACxE,SAAS,UAAU,CAAC,KAAe,EAAE,GAAW;IAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,CAAC;IACH,CAAC;IACD,IAAI,GAAG;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cotal-ai/connector-claude-code",
3
3
  "description": "Cotal connector for Claude Code: an installed plugin that joins a session to the mesh.",
4
- "version": "0.8.1",
4
+ "version": "0.8.3",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "@modelcontextprotocol/sdk": "^1.29.0",
22
- "@cotal-ai/connector-core": "0.8.1"
22
+ "@cotal-ai/connector-core": "0.8.3"
23
23
  },
24
24
  "peerDependencies": {
25
25
  "@cotal-ai/core": ">=0.1.0"
@@ -27,7 +27,7 @@
27
27
  "devDependencies": {
28
28
  "esbuild": "^0.28.0",
29
29
  "tsx": "^4.22.4",
30
- "@cotal-ai/core": "0.8.1"
30
+ "@cotal-ai/core": "0.8.3"
31
31
  },
32
32
  "files": [
33
33
  "dist",