slopwaresystems 0.9.1 → 0.9.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.
package/dist/index.js CHANGED
@@ -146,7 +146,7 @@ function fetchLaunchCandidate(launcher2) {
146
146
  var path = fileURLToPath(import.meta.url);
147
147
  var launcher = {
148
148
  path,
149
- bundledVersion: "0.9.1",
149
+ bundledVersion: "0.9.3",
150
150
  bundledMain: fileURLToPath(new URL("./main.js", import.meta.url)),
151
151
  installed: isInstalledLauncherPath(path)
152
152
  };
package/dist/main.js CHANGED
@@ -26542,7 +26542,7 @@ var TaskEventRecord = external_exports.object({
26542
26542
  });
26543
26543
 
26544
26544
  // ../contract/src/work/cli-release.ts
26545
- var CLI_RELEASE = "0.9.1";
26545
+ var CLI_RELEASE = "0.9.3";
26546
26546
  var CLI_VERSION_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
26547
26547
  var CLI_VERSION_MAX = 64;
26548
26548
  function parseCliVersion(version2) {
@@ -27002,8 +27002,451 @@ function hashKey(key) {
27002
27002
  }
27003
27003
  return hash2;
27004
27004
  }
27005
+ var FIRST_NAMES = [
27006
+ "Agnes",
27007
+ "Albert",
27008
+ "Algernon",
27009
+ "Ambrose",
27010
+ "Archibald",
27011
+ "Arthur",
27012
+ "Augustus",
27013
+ "Barnaby",
27014
+ "Bartholomew",
27015
+ "Basil",
27016
+ "Beatrice",
27017
+ "Benedict",
27018
+ "Bernadette",
27019
+ "Bertha",
27020
+ "Bertram",
27021
+ "Beryl",
27022
+ "Blanche",
27023
+ "Boris",
27024
+ "Brenda",
27025
+ "Cecil",
27026
+ "Cedric",
27027
+ "Clarence",
27028
+ "Clementine",
27029
+ "Cornelius",
27030
+ "Cuthbert",
27031
+ "Cyril",
27032
+ "Daphne",
27033
+ "Delilah",
27034
+ "Denise",
27035
+ "Dennis",
27036
+ "Desmond",
27037
+ "Doreen",
27038
+ "Dorothy",
27039
+ "Doug",
27040
+ "Edgar",
27041
+ "Edith",
27042
+ "Edna",
27043
+ "Egbert",
27044
+ "Eleanor",
27045
+ "Elmer",
27046
+ "Enid",
27047
+ "Ernest",
27048
+ "Esmeralda",
27049
+ "Ethel",
27050
+ "Eugene",
27051
+ "Eunice",
27052
+ "Fenella",
27053
+ "Ferdinand",
27054
+ "Fergus",
27055
+ "Florence",
27056
+ "Frances",
27057
+ "Gareth",
27058
+ "Gary",
27059
+ "Geoffrey",
27060
+ "Gerald",
27061
+ "Gertrude",
27062
+ "Gilbert",
27063
+ "Gladys",
27064
+ "Glenda",
27065
+ "Gordon",
27066
+ "Graham",
27067
+ "Greg",
27068
+ "Gwendolyn",
27069
+ "Hank",
27070
+ "Harold",
27071
+ "Harriet",
27072
+ "Hazel",
27073
+ "Henrietta",
27074
+ "Herbert",
27075
+ "Hilda",
27076
+ "Horace",
27077
+ "Hortense",
27078
+ "Hubert",
27079
+ "Humphrey",
27080
+ "Ignatius",
27081
+ "Imelda",
27082
+ "Irene",
27083
+ "Irving",
27084
+ "Ivy",
27085
+ "Jasper",
27086
+ "Jeremiah",
27087
+ "Jocelyn",
27088
+ "Judith",
27089
+ "Karen",
27090
+ "Keith",
27091
+ "Kevin",
27092
+ "Lavinia",
27093
+ "Leonard",
27094
+ "Leopold",
27095
+ "Linda",
27096
+ "Lionel",
27097
+ "Lois",
27098
+ "Lorraine",
27099
+ "Lucinda",
27100
+ "Mabel",
27101
+ "Marjorie",
27102
+ "Martha",
27103
+ "Maude",
27104
+ "Maureen",
27105
+ "Mavis",
27106
+ "Melvin",
27107
+ "Mildred",
27108
+ "Miriam",
27109
+ "Montague",
27110
+ "Morris",
27111
+ "Muriel",
27112
+ "Myrtle",
27113
+ "Nancy",
27114
+ "Neville",
27115
+ "Nigel",
27116
+ "Norbert",
27117
+ "Norma",
27118
+ "Norman",
27119
+ "Octavia",
27120
+ "Ophelia",
27121
+ "Oswald",
27122
+ "Otto",
27123
+ "Pam",
27124
+ "Patricia",
27125
+ "Penelope",
27126
+ "Percival",
27127
+ "Petunia",
27128
+ "Phyllis",
27129
+ "Priscilla",
27130
+ "Prudence",
27131
+ "Quentin",
27132
+ "Reginald",
27133
+ "Rhonda",
27134
+ "Roderick",
27135
+ "Rosalind",
27136
+ "Rupert",
27137
+ "Sally",
27138
+ "Seymour",
27139
+ "Sheila",
27140
+ "Sidney",
27141
+ "Stanley",
27142
+ "Steve",
27143
+ "Susan",
27144
+ "Sybil",
27145
+ "Terrence",
27146
+ "Thaddeus",
27147
+ "Thelma",
27148
+ "Theodore",
27149
+ "Trevor",
27150
+ "Ursula",
27151
+ "Vernon",
27152
+ "Vivian",
27153
+ "Walter",
27154
+ "Wanda",
27155
+ "Wilbur",
27156
+ "Wilfred",
27157
+ "Winifred",
27158
+ "Yolanda",
27159
+ "Zebedee"
27160
+ ];
27161
+ var SURNAME_STARTS = [
27162
+ "Apple",
27163
+ "Badger",
27164
+ "Bagel",
27165
+ "Banjo",
27166
+ "Barley",
27167
+ "Batter",
27168
+ "Bean",
27169
+ "Biscuit",
27170
+ "Blanket",
27171
+ "Blister",
27172
+ "Blunder",
27173
+ "Bobble",
27174
+ "Bramble",
27175
+ "Brisket",
27176
+ "Bubble",
27177
+ "Bucket",
27178
+ "Buckle",
27179
+ "Bumble",
27180
+ "Bunion",
27181
+ "Butter",
27182
+ "Cabbage",
27183
+ "Candle",
27184
+ "Carrot",
27185
+ "Cheddar",
27186
+ "Chowder",
27187
+ "Chutney",
27188
+ "Clatter",
27189
+ "Clobber",
27190
+ "Cobble",
27191
+ "Cocoa",
27192
+ "Crinkle",
27193
+ "Crouton",
27194
+ "Crumble",
27195
+ "Crumpet",
27196
+ "Cuddle",
27197
+ "Custard",
27198
+ "Dabble",
27199
+ "Dither",
27200
+ "Doily",
27201
+ "Dollop",
27202
+ "Doodle",
27203
+ "Dribble",
27204
+ "Drizzle",
27205
+ "Dumpling",
27206
+ "Fiddle",
27207
+ "Fizzle",
27208
+ "Flannel",
27209
+ "Flapjack",
27210
+ "Flounder",
27211
+ "Fluster",
27212
+ "Fondue",
27213
+ "Fritter",
27214
+ "Fudge",
27215
+ "Fumble",
27216
+ "Gherkin",
27217
+ "Giggle",
27218
+ "Goose",
27219
+ "Grumble",
27220
+ "Gumbo",
27221
+ "Haddock",
27222
+ "Haggle",
27223
+ "Hiccup",
27224
+ "Hobble",
27225
+ "Honk",
27226
+ "Jumble",
27227
+ "Kettle",
27228
+ "Kipper",
27229
+ "Kumquat",
27230
+ "Lentil",
27231
+ "Lozenge",
27232
+ "Marmalade",
27233
+ "Meringue",
27234
+ "Mitten",
27235
+ "Muddle",
27236
+ "Muffin",
27237
+ "Mumble",
27238
+ "Mustard",
27239
+ "Noodle",
27240
+ "Nugget",
27241
+ "Nutmeg",
27242
+ "Oatmeal",
27243
+ "Paddle",
27244
+ "Pancake",
27245
+ "Parsnip",
27246
+ "Pebble",
27247
+ "Pickle",
27248
+ "Piffle",
27249
+ "Plonk",
27250
+ "Plum",
27251
+ "Porridge",
27252
+ "Pretzel",
27253
+ "Prune",
27254
+ "Pudding",
27255
+ "Puddle",
27256
+ "Quibble",
27257
+ "Radish",
27258
+ "Ramble",
27259
+ "Rattle",
27260
+ "Rhubarb",
27261
+ "Ruckus",
27262
+ "Rumble",
27263
+ "Rumple",
27264
+ "Sausage",
27265
+ "Scone",
27266
+ "Scribble",
27267
+ "Shuffle",
27268
+ "Snooze",
27269
+ "Snorkel",
27270
+ "Soggy",
27271
+ "Spatula",
27272
+ "Sprocket",
27273
+ "Squabble",
27274
+ "Squelch",
27275
+ "Stumble",
27276
+ "Tadpole",
27277
+ "Teacup",
27278
+ "Thimble",
27279
+ "Tickle",
27280
+ "Toast",
27281
+ "Toffee",
27282
+ "Trifle",
27283
+ "Trumpet",
27284
+ "Tumble",
27285
+ "Turnip",
27286
+ "Waddle",
27287
+ "Waffle",
27288
+ "Walnut",
27289
+ "Wiggle",
27290
+ "Wobble",
27291
+ "Yodel",
27292
+ "Zither"
27293
+ ];
27294
+ var SURNAME_ENDS = [
27295
+ "bank",
27296
+ "berry",
27297
+ "borough",
27298
+ "bottom",
27299
+ "bridge",
27300
+ "brook",
27301
+ "bury",
27302
+ "by",
27303
+ "combe",
27304
+ "dale",
27305
+ "ford",
27306
+ "field",
27307
+ "gate",
27308
+ "ham",
27309
+ "hampton",
27310
+ "hurst",
27311
+ "ington",
27312
+ "kins",
27313
+ "ley",
27314
+ "man",
27315
+ "mere",
27316
+ "more",
27317
+ "ridge",
27318
+ "shaw",
27319
+ "shire",
27320
+ "sley",
27321
+ "smith",
27322
+ "son",
27323
+ "stead",
27324
+ "stone",
27325
+ "thorpe",
27326
+ "ton",
27327
+ "wick",
27328
+ "wood",
27329
+ "worth"
27330
+ ];
27331
+ var TITLES = [
27332
+ "Admiral",
27333
+ "Archduke",
27334
+ "Aunt",
27335
+ "Baron",
27336
+ "Baroness",
27337
+ "Brigadier",
27338
+ "Captain",
27339
+ "Chancellor",
27340
+ "Colonel",
27341
+ "Commodore",
27342
+ "Count",
27343
+ "Countess",
27344
+ "Deputy",
27345
+ "Doctor",
27346
+ "Duchess",
27347
+ "Duke",
27348
+ "Earl",
27349
+ "Grand Vizier",
27350
+ "Inspector",
27351
+ "Lady",
27352
+ "Lord",
27353
+ "Madame",
27354
+ "Major",
27355
+ "Marquis",
27356
+ "Mayor",
27357
+ "Monsieur",
27358
+ "Nana",
27359
+ "Professor",
27360
+ "Reverend",
27361
+ "Sergeant",
27362
+ "Sir",
27363
+ "Uncle",
27364
+ "Viscount"
27365
+ ];
27366
+ var NICKNAMES = [
27367
+ "Beans",
27368
+ "Biscuits",
27369
+ "Buttons",
27370
+ "Chowder",
27371
+ "Crumbs",
27372
+ "Custard",
27373
+ "Dumpling",
27374
+ "Fizz",
27375
+ "Gravy",
27376
+ "Hiccups",
27377
+ "Jellybean",
27378
+ "Lasagna",
27379
+ "Meatball",
27380
+ "Mittens",
27381
+ "Noodles",
27382
+ "Nugget",
27383
+ "Pancakes",
27384
+ "Pickles",
27385
+ "Pretzel",
27386
+ "Pudding",
27387
+ "Sprinkles",
27388
+ "Tadpole",
27389
+ "Toast",
27390
+ "Turbo",
27391
+ "Two Spoons",
27392
+ "Waffles",
27393
+ "Wobbles",
27394
+ "Yikes"
27395
+ ];
27396
+ var EPITHETS = [
27397
+ "the Adequate",
27398
+ "the Bewildered",
27399
+ "the Damp",
27400
+ "the Dubious",
27401
+ "the Easily Startled",
27402
+ "the Forgetful",
27403
+ "the Fussy",
27404
+ "the Hesitant",
27405
+ "the Improbable",
27406
+ "the Inevitable",
27407
+ "the Irregular",
27408
+ "the Lukewarm",
27409
+ "the Magnificent",
27410
+ "the Mildly Alarmed",
27411
+ "the Moist",
27412
+ "the Overcaffeinated",
27413
+ "the Peckish",
27414
+ "the Perplexed",
27415
+ "the Punctual",
27416
+ "the Reluctant",
27417
+ "the Rumpled",
27418
+ "the Slightly Late",
27419
+ "the Soggy",
27420
+ "the Suspicious",
27421
+ "the Unbothered",
27422
+ "the Unready",
27423
+ "the Unyielding",
27424
+ "the Wobbly",
27425
+ "of the Marsh",
27426
+ "of the Tupperware",
27427
+ "of the Third Drawer",
27428
+ "of Lesser Importance",
27429
+ "Who Means Well",
27430
+ "Esq.",
27431
+ "the Pretty Sure",
27432
+ "the Well-Meaning",
27433
+ "the Absent-Minded",
27434
+ "the Almost Finished"
27435
+ ];
27436
+ function generateNamePart(parts, key, part) {
27437
+ return parts[hashKey(`${part}\0${key}`) % parts.length] ?? parts[0];
27438
+ }
27439
+ function generateSurname(key) {
27440
+ return generateNamePart(SURNAME_STARTS, key, "start") + generateNamePart(SURNAME_ENDS, key, "end");
27441
+ }
27005
27442
  function generateAgentName(key) {
27006
- return AGENT_NAMES[hashKey(key) % AGENT_NAMES.length] ?? AGENT_NAMES[0];
27443
+ const style = hashKey(`style\0${key}`) % 100;
27444
+ const first = generateNamePart(FIRST_NAMES, key, "first");
27445
+ if (style < 6) return AGENT_NAMES[hashKey(key) % AGENT_NAMES.length] ?? AGENT_NAMES[0];
27446
+ if (style < 26) return `${generateNamePart(TITLES, key, "title")} ${first} ${generateSurname(key)}`;
27447
+ if (style < 44) return `${first} "${generateNamePart(NICKNAMES, key, "nickname")}" ${generateSurname(key)}`;
27448
+ if (style < 66) return `${first} ${generateSurname(key)} ${generateNamePart(EPITHETS, key, "epithet")}`;
27449
+ return `${first} ${generateSurname(key)}`;
27007
27450
  }
27008
27451
  var WORKER_TITLES = [
27009
27452
  (parent) => `${parent} Jr.`,
@@ -27770,7 +28213,8 @@ var SPLAT_RELAY_LIMITS = {
27770
28213
  /** Requests waiting for a place; past it: 503, retryable. */
27771
28214
  queuedRequestsPerSource: 2048,
27772
28215
  webSocketsPerSession: 16,
27773
- webSocketMessageBytes: 1024 * 1024,
28216
+ // Dev servers' hot-reload messages pass 1 MiB (Next with many pages open); Workers take up to 32 MiB since late 2025.
28217
+ webSocketMessageBytes: 16 * 1024 * 1024,
27774
28218
  headerCount: 128,
27775
28219
  headerBytes: 48 * 1024,
27776
28220
  pathLength: 8192,
@@ -29010,7 +29454,7 @@ function resolveAgentIdentity(cwd, fallback = "process") {
29010
29454
  harness: conversation?.harness ?? null,
29011
29455
  directory: repo ? basename3(repo.worktree) : basename3(cwd),
29012
29456
  branch: fetchCurrentBranch(cwd),
29013
- cliVersion: "0.9.1"
29457
+ cliVersion: "0.9.3"
29014
29458
  };
29015
29459
  }
29016
29460
 
@@ -29674,7 +30118,7 @@ function buildUpdateNotice() {
29674
30118
  }
29675
30119
  function resolveLatestCliVersion() {
29676
30120
  const deprecated = fetchDeprecatedVersions();
29677
- return sortCliVersions([CLI_RELEASE, "0.9.1", fetchUpdateStatus().latest ?? CLI_RELEASE]).filter((version2) => !deprecated.has(version2)).at(-1) ?? CLI_RELEASE;
30121
+ return sortCliVersions([CLI_RELEASE, "0.9.3", fetchUpdateStatus().latest ?? CLI_RELEASE]).filter((version2) => !deprecated.has(version2)).at(-1) ?? CLI_RELEASE;
29678
30122
  }
29679
30123
  function formatAgentCliVersion(version2, latest = resolveLatestCliVersion()) {
29680
30124
  const label = version2 ? `slop ${version2}` : "an older slop";
@@ -30110,7 +30554,7 @@ async function updateInstalledCliFromRegistry(launcher, options2) {
30110
30554
  const running = fetchLaunchCandidate(launcher).version;
30111
30555
  const action = running === previous ? "current" : isNewerVersion(running, previous) ? "updated" : "rolled-back";
30112
30556
  const latest = resolveNewestOfferedRelease(index);
30113
- deleteUnusedVersions(/* @__PURE__ */ new Set([running, previous, current, launcher.bundledVersion, "0.9.1"]));
30557
+ deleteUnusedVersions(/* @__PURE__ */ new Set([running, previous, current, launcher.bundledVersion, "0.9.3"]));
30114
30558
  persistUpdateStatus({ checkedAt: now(), latest, failures: 0, lastError: null });
30115
30559
  return { action, running, previous, latest };
30116
30560
  } catch (error62) {
@@ -30917,7 +31361,7 @@ function watchLaunchTarget(onChange) {
30917
31361
  }
30918
31362
  function runMcpRelay() {
30919
31363
  const launcher = readLauncherInfo();
30920
- const own2 = { version: "0.9.1", main: fileURLToPath(import.meta.url), downloaded: false };
31364
+ const own2 = { version: "0.9.3", main: fileURLToPath(import.meta.url), downloaded: false };
30921
31365
  const relay = new McpRelay({
30922
31366
  input: process.stdin,
30923
31367
  output: process.stdout,
@@ -31358,7 +31802,7 @@ async function waitForMessage(api, projectId, taskKey, options2 = {}) {
31358
31802
  setTimeout(() => resolve6(outcome), 50);
31359
31803
  };
31360
31804
  const held = new HeldSession(api, projectId, taskKey, {
31361
- claim: () => options2.claim ?? { harness: null, directory: null, branch: null, cliVersion: "0.9.1" },
31805
+ claim: () => options2.claim ?? { harness: null, directory: null, branch: null, cliVersion: "0.9.3" },
31362
31806
  reconnect: false,
31363
31807
  onHello: options2.onHello,
31364
31808
  onEnd: () => finishWait({ kind: "ended" }),
@@ -34388,7 +34832,7 @@ var SplatPublisherConnection = class {
34388
34832
  const helloTimer = setTimeout(() => socket.close(4e3, "hello timeout"), 2e4);
34389
34833
  let ended = null;
34390
34834
  socket.addEventListener("error", () => socket.close());
34391
- socket.addEventListener("message", (event) => {
34835
+ socket.addEventListener("message", this.buildSplatSocketListener("the relay's message", (event) => {
34392
34836
  if (this.socket !== socket) return;
34393
34837
  if (event.data === "pong") {
34394
34838
  if (pongTimer) clearTimeout(pongTimer);
@@ -34417,7 +34861,7 @@ var SplatPublisherConnection = class {
34417
34861
  }
34418
34862
  if (down.data.type === "end") ended = down.data.reason;
34419
34863
  this.receiveDown(down.data);
34420
- });
34864
+ }));
34421
34865
  socket.addEventListener("close", (event) => {
34422
34866
  clearInterval(pingTimer);
34423
34867
  clearInterval(heartbeat);
@@ -34704,27 +35148,49 @@ var SplatPublisherConnection = class {
34704
35148
  upstream.binaryType = "arraybuffer";
34705
35149
  this.upstreamSockets.set(down.id, upstream);
34706
35150
  let opened = false;
34707
- upstream.addEventListener("open", () => {
35151
+ const closeUpstream = (code, reason) => {
35152
+ try {
35153
+ upstream.close(code, reason);
35154
+ } catch {
35155
+ }
35156
+ };
35157
+ upstream.addEventListener("open", this.buildSplatSocketListener("an app socket's open", () => {
34708
35158
  opened = true;
34709
35159
  this.sendUp({ type: "ws.accept", id: down.id, protocol: upstream.protocol || null });
34710
- });
34711
- upstream.addEventListener("message", (event) => {
35160
+ }, () => closeUpstream(4011, "publisher error")));
35161
+ upstream.addEventListener("message", this.buildSplatSocketListener("an app socket's message", (event) => {
34712
35162
  const text = typeof event.data === "string";
34713
35163
  const payload = text ? new TextEncoder().encode(event.data) : new Uint8Array(event.data);
34714
35164
  if (payload.byteLength > SPLAT_RELAY_LIMITS.webSocketMessageBytes) {
34715
- upstream.close(1009, "message too large");
35165
+ this.log(`A message from localhost:${this.options.port}${down.path} is ${Math.round(payload.byteLength / 1048576)} MB, past the ${SPLAT_RELAY_LIMITS.webSocketMessageBytes / 1048576} MB a preview socket carries; closed that socket`);
35166
+ closeUpstream(4009, "message too large");
34716
35167
  return;
34717
35168
  }
34718
35169
  this.sendUp(buildSplatRelayFrame(text ? SPLAT_RELAY_FRAME.wsText : SPLAT_RELAY_FRAME.wsBinary, down.id, payload));
34719
- });
34720
- upstream.addEventListener("close", (event) => {
35170
+ }, () => closeUpstream(4011, "publisher error")));
35171
+ upstream.addEventListener("close", this.buildSplatSocketListener("an app socket's close", (event) => {
34721
35172
  if (this.upstreamSockets.get(down.id) !== upstream) return;
34722
35173
  this.upstreamSockets.delete(down.id);
34723
35174
  if (!opened) this.sendUp({ type: "ws.reject", id: down.id, status: 502, message: `localhost:${this.options.port} refused the connection` });
34724
35175
  else this.sendUp({ type: "ws.close", id: down.id, code: event.code >= 1e3 && event.code <= 4999 && event.code !== 1005 && event.code !== 1006 ? event.code : 1e3, reason: event.reason.slice(0, 123) });
34725
- });
35176
+ }));
34726
35177
  upstream.addEventListener("error", () => void 0);
34727
35178
  }
35179
+ /**
35180
+ * A socket event handler that cannot take the publisher down: a socket's handlers run outside any caller, so a throw
35181
+ * in one (a close code the runtime refuses, a frame it cannot build) would end the whole process and take every
35182
+ * preview of this source offline. It is logged, `recover` ends just the socket it came from, and publishing goes on.
35183
+ */
35184
+ buildSplatSocketListener(what, handle, recover) {
35185
+ return (event) => {
35186
+ try {
35187
+ handle(event);
35188
+ } catch (error62) {
35189
+ this.log(`Error handling ${what}: ${error62 instanceof Error ? error62.message : String(error62)}`);
35190
+ recover?.();
35191
+ }
35192
+ };
35193
+ }
34728
35194
  /** Everything in flight belonged to the connection that just closed: its requests and sockets to the app end too. */
34729
35195
  releaseStreams() {
34730
35196
  for (const id of [...this.streams.keys()]) this.closeStream(id);
@@ -34922,7 +35388,7 @@ var SplatRendererConnection = class {
34922
35388
  try {
34923
35389
  let path3;
34924
35390
  try {
34925
- const ticket = await this.api.post(`/projects/${this.projectId}/splat/renderer/ticket`, ApiResponses.ConnectTicket, { cliVersion: "0.9.1", onlyMe: this.options.onlyMe ?? false, agent: this.options.agent ?? null, capabilities: ["workspaces"] });
35391
+ const ticket = await this.api.post(`/projects/${this.projectId}/splat/renderer/ticket`, ApiResponses.ConnectTicket, { cliVersion: "0.9.3", onlyMe: this.options.onlyMe ?? false, agent: this.options.agent ?? null, capabilities: ["workspaces"] });
34926
35392
  path3 = ticket.path;
34927
35393
  } catch (error62) {
34928
35394
  if (error62 instanceof CliError && ["unauthenticated", "not_found", "forbidden", "bad_request"].includes(error62.code)) {
@@ -36955,17 +37421,17 @@ function hasHarnessSetup() {
36955
37421
  function syncMachineSetupAfterUpdate() {
36956
37422
  const nothing = { skills: [], retired: [], reinstalling: false };
36957
37423
  try {
36958
- if (!isUpdateCheckEnabled() || fetchMachineSetupState()?.version === "0.9.1") return nothing;
37424
+ if (!isUpdateCheckEnabled() || fetchMachineSetupState()?.version === "0.9.3") return nothing;
36959
37425
  const lock = claimFileLock(buildMachineSetupLockDirectory(), { staleAfterMs: 6e4 });
36960
37426
  if (!lock) return nothing;
36961
37427
  try {
36962
37428
  const state = fetchMachineSetupState();
36963
- if (state?.version === "0.9.1") return nothing;
37429
+ if (state?.version === "0.9.3") return nothing;
36964
37430
  const skills = hasInstalledSkills() ? installSkills() : [];
36965
37431
  const shipped = Object.keys(SKILLS);
36966
37432
  const retired = deleteRetiredSkills((state?.skills ?? []).filter((name) => !shipped.includes(name)));
36967
37433
  const setupRevision = state?.setupRevision ?? (hasHarnessSetup() ? UNRECORDED_SETUP_REVISION : null);
36968
- persistMachineSetupState({ version: "0.9.1", setupRevision, skills: hasInstalledSkills() ? shipped : [] });
37434
+ persistMachineSetupState({ version: "0.9.3", setupRevision, skills: hasInstalledSkills() ? shipped : [] });
36969
37435
  const reinstalling = setupRevision !== null && setupRevision < SETUP_REVISION && runMcpInstallInBackground();
36970
37436
  return { skills, retired, reinstalling };
36971
37437
  } finally {
@@ -37132,7 +37598,7 @@ async function trustCodexHooks(codexHome) {
37132
37598
  const sendNotification = (method, params) => server.stdin.write(`${JSON.stringify({ jsonrpc: "2.0", method, params })}
37133
37599
  `);
37134
37600
  try {
37135
- await callCodexMethod("initialize", { clientInfo: { name: "slop", version: "0.9.1" }, capabilities: { experimentalApi: true } });
37601
+ await callCodexMethod("initialize", { clientInfo: { name: "slop", version: "0.9.3" }, capabilities: { experimentalApi: true } });
37136
37602
  sendNotification("initialized", {});
37137
37603
  const listed = await callCodexMethod("hooks/list", { cwds: [process.cwd()] });
37138
37604
  const ours = listed.data.flatMap((entry) => entry.hooks).filter((hook) => hook.command?.startsWith("slop hook "));
@@ -37397,7 +37863,7 @@ var options = optionEnd < 0 ? args : args.slice(0, optionEnd);
37397
37863
  updateJsonMode(options.includes("--json"));
37398
37864
  syncMachineSetupAfterUpdate();
37399
37865
  if (!options.includes("--background") && !options.includes("--child")) scheduleBackgroundUpdate();
37400
- var program2 = new Command().name("slop").description("Slopware Tasks from the terminal. Everything a person can do on the board, an agent can do here.").version("0.9.1").option("--json", "machine-readable output: JSON on stdout, errors as JSON on stderr").configureOutput({
37866
+ var program2 = new Command().name("slop").description("Slopware Tasks from the terminal. Everything a person can do on the board, an agent can do here.").version("0.9.3").option("--json", "machine-readable output: JSON on stdout, errors as JSON on stderr").configureOutput({
37401
37867
  outputError: (message, write) => {
37402
37868
  if (!isJsonMode()) write(message);
37403
37869
  },
@@ -37414,7 +37880,7 @@ var sessionCommand = registerSessionCommands(program2);
37414
37880
  registerThreadCommands(program2, taskCommand);
37415
37881
  registerOperationCommands(program2, taskCommand, sessionCommand);
37416
37882
  registerSplatCommands(program2);
37417
- registerMcpCommands(program2, "0.9.1");
37883
+ registerMcpCommands(program2, "0.9.3");
37418
37884
  registerGuideCommand(program2);
37419
37885
  registerSkillCommands(program2);
37420
37886
  registerUpdateCommand(program2);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slopwaresystems",
3
- "version": "0.9.1",
3
+ "version": "0.9.3",
4
4
  "private": false,
5
5
  "description": "slop: the Slopware Tasks board from the terminal, for people and coding agents.",
6
6
  "type": "module",