cotal-ai 0.99.0 → 0.99.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cotal-ai",
3
- "version": "0.99.0",
3
+ "version": "0.99.1",
4
4
  "description": "Cotal — lateral agent coordination over NATS. Run `npx cotal-ai` for the CLI.",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -33,26 +33,26 @@
33
33
  "node": ">=22"
34
34
  },
35
35
  "dependencies": {
36
- "@cotal-ai/auth": "0.99.0",
37
- "@cotal-ai/cli": "0.99.0",
38
- "@cotal-ai/connector-core": "0.99.0",
39
- "@cotal-ai/core": "0.99.0",
40
- "@cotal-ai/delivery": "0.99.0",
41
- "@cotal-ai/manager": "0.99.0",
42
- "@cotal-ai/runtime": "0.99.0",
43
- "@cotal-ai/seat": "0.99.0",
44
- "@cotal-ai/workspace": "0.99.0"
36
+ "@cotal-ai/auth": "0.99.1",
37
+ "@cotal-ai/cli": "0.99.1",
38
+ "@cotal-ai/connector-core": "0.99.1",
39
+ "@cotal-ai/core": "0.99.1",
40
+ "@cotal-ai/delivery": "0.99.1",
41
+ "@cotal-ai/manager": "0.99.1",
42
+ "@cotal-ai/runtime": "0.99.1",
43
+ "@cotal-ai/seat": "0.99.1",
44
+ "@cotal-ai/workspace": "0.99.1"
45
45
  },
46
46
  "devDependencies": {
47
- "@cotal-ai/connector-claude-code": "0.99.0",
48
- "@cotal-ai/connector-codex": "0.99.0",
49
- "@cotal-ai/connector-hermes": "0.99.0",
50
- "@cotal-ai/connector-jcode": "0.99.0",
51
- "@cotal-ai/connector-opencode": "0.99.0",
52
- "@cotal-ai/linear": "0.99.0",
53
- "@cotal-ai/pi": "0.99.0",
47
+ "@cotal-ai/connector-claude-code": "0.99.1",
48
+ "@cotal-ai/connector-codex": "0.99.1",
49
+ "@cotal-ai/connector-hermes": "0.99.1",
50
+ "@cotal-ai/connector-jcode": "0.99.1",
51
+ "@cotal-ai/connector-opencode": "0.99.1",
52
+ "@cotal-ai/linear": "0.99.1",
53
+ "@cotal-ai/pi": "0.99.1",
54
54
  "@cotal-ai/smoke-kit": "0.0.0",
55
- "@cotal-ai/web": "0.99.0",
55
+ "@cotal-ai/web": "0.99.1",
56
56
  "@nats-io/jetstream": "^3.4.0",
57
57
  "@nats-io/transport-node": "^3.4.0",
58
58
  "typescript": "^5.9.3"
@@ -23677,9 +23677,14 @@ function desktopEntry(cotal) {
23677
23677
  ...process.env.COTAL_HOME ? { env: { COTAL_HOME: process.env.COTAL_HOME } } : {}
23678
23678
  };
23679
23679
  }
23680
- function desktop(cotal, add) {
23680
+ function hostedConnector(s) {
23681
+ const next = s.hostedConnector ? `add ${s.hostedConnector} under Settings > Connectors > Add custom connector` : s.unread ? `its hosted connector could not be read (${s.unread})` : `"${s.space}" advertises no hosted connector`;
23682
+ return `chat joins signed-in space "${s.space}" only through a hosted connector: ${next}`;
23683
+ }
23684
+ function desktop(cotal, add, signedIn) {
23681
23685
  const path = desktopConfigPath();
23682
23686
  if (!path || !existsSync3(dirname2(path))) return void 0;
23687
+ if (signedIn) return `Claude Desktop ${hostedConnector(signedIn)}`;
23683
23688
  if (!add && readDesktopEntry(path) === void 0) return void 0;
23684
23689
  const state = writeDesktopEntry(path, desktopEntry(cotal));
23685
23690
  return `Claude Desktop ${state}${state === "current" ? "" : "; quit and reopen Claude Desktop to load it"}`;
@@ -23872,6 +23877,7 @@ ${update.output}`);
23872
23877
  verify(name, scope, expectedVersion);
23873
23878
  }
23874
23879
  function refreshInstalls(name, entries, version2) {
23880
+ const warnings = [];
23875
23881
  for (const entry of entries) {
23876
23882
  const scope = entry.scope;
23877
23883
  if (scope !== "user" && scope !== "local" && scope !== "project")
@@ -23880,13 +23886,17 @@ function refreshInstalls(name, entries, version2) {
23880
23886
  if (typeof cwd !== "string") throw new Error(`${name}@${MARKETPLACE} (${scope} scope) has no project path`);
23881
23887
  if (!statSync2(cwd, { throwIfNoEntry: false })?.isDirectory()) continue;
23882
23888
  if (resolvedPluginCurrent(entry, version2, name)) continue;
23889
+ const where = scope === "user" ? "user scope" : `${scope} scope, ${cwd}`;
23883
23890
  const update = commandIn(cwd, "plugin", "update", `${name}@${MARKETPLACE}`, "--scope", scope);
23884
- if (update.status !== 0) throw new Error(`plugin update failed (${name}, ${scope} scope):
23891
+ if (update.status !== 0) throw new Error(`plugin update failed (${name}, ${where}):
23885
23892
  ${update.output}`);
23886
23893
  const current = listPlugins(cwd).find((candidate) => candidate.id === entry.id && candidate.scope === scope && (scope === "user" || candidate.projectPath === entry.projectPath));
23887
- if (!current || !resolvedPluginCurrent(current, version2, name))
23888
- throw new Error(`${name}@${MARKETPLACE} (${scope} scope) did not load the updated plugin ${version2}`);
23894
+ if (current && resolvedPluginCurrent(current, version2, name)) continue;
23895
+ const stale = `${name}@${MARKETPLACE} (${where}) did not load the updated plugin ${version2}`;
23896
+ if (scope === "user") throw new Error(stale);
23897
+ warnings.push(`warning: ${stale}; to remove it, run \`claude plugin uninstall ${name}@${MARKETPLACE} --scope ${scope}\` in that directory`);
23889
23898
  }
23899
+ return warnings;
23890
23900
  }
23891
23901
  function resolvedPluginCurrent(entry, version2, name = "cotal") {
23892
23902
  const sourceRoot = name === "cotal" ? PACKAGE_ROOT : join4(marketplaceDir(), name);
@@ -23972,7 +23982,7 @@ function pluginRow(entries, { version: version2 }) {
23972
23982
  if (installs.some((entry) => entry.scope === "user")) return row("ok", "current (user scope)");
23973
23983
  return row("ok", `current (${installs.length} install${installs.length === 1 ? "" : "s"})`);
23974
23984
  }
23975
- function desktopRow() {
23985
+ function desktopRow(signedIn) {
23976
23986
  const path = desktopConfigPath();
23977
23987
  if (!path || !existsSync3(dirname2(path))) return void 0;
23978
23988
  const row = (state, text) => ({ label: "Claude Desktop", state, text });
@@ -23982,6 +23992,7 @@ function desktopRow() {
23982
23992
  } catch (e) {
23983
23993
  return row("error", e.message);
23984
23994
  }
23995
+ if (signedIn) return entry === void 0 ? row("off", hostedConnector(signedIn)) : row("warn", `added, but Desktop ${hostedConnector(signedIn)}`);
23985
23996
  if (entry === void 0) return row("off", "not added \xB7 run `cotal setup`");
23986
23997
  const server = entry.args;
23987
23998
  const expected = join4(marketplaceDir(), "cotal", "dist", "mcp.cjs");
@@ -24019,11 +24030,11 @@ var claudeSetupProvider = {
24019
24030
  title: "Install the Claude Code plugin",
24020
24031
  explain: "Installs Cotal messaging for Claude Code, including supported local sessions in Desktop's Code tab. Reopen Claude after setup.",
24021
24032
  context: [DOCS_URL],
24022
- run({ cotal }) {
24033
+ run({ cotal, signedIn }) {
24023
24034
  return withPluginLock(() => {
24024
24035
  const version2 = materializeCotal(cotal);
24025
24036
  install("cotal", "user", version2);
24026
- const app = desktop(cotal, true);
24037
+ const app = desktop(cotal, true, signedIn);
24027
24038
  const removed = retireProjectInstalls();
24028
24039
  const replaced = removed ? `, replacing ${removed} project install${removed === 1 ? "" : "s"}` : "";
24029
24040
  return `cotal@${MARKETPLACE} (user scope${replaced})${app ? `; ${app}` : ""}`;
@@ -24049,12 +24060,12 @@ var claudeSetupProvider = {
24049
24060
  if (installs.length || skillInstalls.length) writeMarketplace();
24050
24061
  const parts = [];
24051
24062
  if (installs.length) {
24052
- refreshInstalls("cotal", installs, version2);
24053
- parts.push(`cotal@${MARKETPLACE} ${version2}; reload plugins or reopen Claude to load it in running sessions`);
24063
+ const warnings = refreshInstalls("cotal", installs, version2);
24064
+ parts.push(`cotal@${MARKETPLACE} ${version2}; reload plugins or reopen Claude to load it in running sessions`, ...warnings);
24054
24065
  }
24055
24066
  if (skillInstalls.length) {
24056
- refreshInstalls("cotal-skills", skillInstalls, skills.version);
24057
- parts.push(`cotal-skills@${MARKETPLACE} ${skills.version}`);
24067
+ const warnings = refreshInstalls("cotal-skills", skillInstalls, skills.version);
24068
+ parts.push(`cotal-skills@${MARKETPLACE} ${skills.version}`, ...warnings);
24058
24069
  }
24059
24070
  const desktopText = app ? desktop(cotal, false) : void 0;
24060
24071
  if (desktopText) parts.push(desktopText);
@@ -24105,7 +24116,7 @@ var claudeSetupProvider = {
24105
24116
  },
24106
24117
  status(input) {
24107
24118
  const plugins = pluginList();
24108
- const app = desktopRow();
24119
+ const app = desktopRow(input.signedIn);
24109
24120
  return [pluginRow(plugins, input), ...app ? [app] : [], skillsRow(plugins, input)];
24110
24121
  }
24111
24122
  };