@tablation/crew 0.79.5 → 0.79.7

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 (2) hide show
  1. package/dist/cli.js +5 -4
  2. package/package.json +2 -2
package/dist/cli.js CHANGED
@@ -9041,7 +9041,6 @@ async function mintMissingSeatKeys(route, o) {
9041
9041
  try {
9042
9042
  await store.set(host, probeSlug, {
9043
9043
  apiKey: "probe",
9044
- shipId: "",
9045
9044
  workspaceId: resolved.workspaceId,
9046
9045
  identityId: "_probe",
9047
9046
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
@@ -9092,7 +9091,6 @@ async function mintMissingSeatKeys(route, o) {
9092
9091
  try {
9093
9092
  const session = {
9094
9093
  apiKey: body.key,
9095
- shipId: o.shipName ?? "",
9096
9094
  workspaceId: resolved.workspaceId,
9097
9095
  identityId: agentId,
9098
9096
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -9358,6 +9356,8 @@ ${seen.texts.join("\n")}`)) {
9358
9356
  }
9359
9357
  return fail("wrong-answer", `the agent replied "${(seen.finalText ?? seen.texts.at(-1) ?? "").trim().slice(0, 80)}"`);
9360
9358
  }
9359
+ var UNPARSEABLE = /JSON Parse|Unexpected (token|non-whitespace)|is not valid JSON|in JSON at position/i;
9360
+ var UNPARSEABLE_REMEDY = "the stored seat key could not be parsed. If `security find-generic-password -s com.tablation.cli -g` shows a hex `password:` line, the value holds non-ASCII text (often a ship name with a typographic apostrophe); update crew, which reads it without re-minting";
9361
9361
  async function runSelftest(i, deps = realDeps) {
9362
9362
  const now = i.now ?? (() => Date.now());
9363
9363
  const started = now();
@@ -9367,6 +9367,9 @@ async function runSelftest(i, deps = realDeps) {
9367
9367
  const failed = (failure, what) => finish({ ok: false, failure, detail: `${what} \u2014 ${REMEDY[failure]}` });
9368
9368
  if (!i.apiKey) {
9369
9369
  const locked = keychainExitCode(i.keyProblem ?? "") === 36;
9370
+ if (!locked && UNPARSEABLE.test(i.keyProblem ?? "")) {
9371
+ return finish({ ok: false, failure: "keychain-error", detail: `${i.keyProblem} \u2014 ${UNPARSEABLE_REMEDY}` });
9372
+ }
9370
9373
  return failed(locked ? "keychain-locked" : "keychain-error", i.keyProblem ?? "no seat key could be read");
9371
9374
  }
9372
9375
  const adapter = adapterFor(spec.harness);
@@ -14391,7 +14394,6 @@ import {
14391
14394
  getSessionStore as getSessionStore3,
14392
14395
  hostFromUrl as hostFromUrl4,
14393
14396
  loginWithDeviceCode,
14394
- getOrCreateShipId,
14395
14397
  DeviceLoginError
14396
14398
  } from "@tablation/client";
14397
14399
 
@@ -19784,7 +19786,6 @@ Signed in as ${result.identity.email} \u2014 minted an API key in workspace "${r
19784
19786
  try {
19785
19787
  await store.set(hostFromUrl4(baseUrl), deviceWorkspace, {
19786
19788
  apiKey: result.apiKey.key,
19787
- shipId: getOrCreateShipId(),
19788
19789
  workspaceId: result.workspace.id,
19789
19790
  identityId: result.identity.id,
19790
19791
  createdAt: result.apiKey.createdAt
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tablation/crew",
3
- "version": "0.79.5",
3
+ "version": "0.79.7",
4
4
  "description": "A standing team of headless agents that picks work off a Tablation board, does it on a machine you control, and reports back.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -32,7 +32,7 @@
32
32
  "dependencies": {
33
33
  "@modelcontextprotocol/sdk": "^1.32.0",
34
34
  "@modelcontextprotocol/server-filesystem": "^2026.8.31",
35
- "@tablation/client": "^0.1.1",
35
+ "@tablation/client": "^0.1.8",
36
36
  "yaml": "^2.9.1",
37
37
  "zod": "^3.25.76"
38
38
  },