@integrity-labs/agt-cli 0.28.1088 → 0.28.1090

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 (24) hide show
  1. package/dist/bin/agt.js +5 -5
  2. package/dist/{chunk-JAXSZCTH.js → chunk-3YZWZJZR.js} +4 -4
  3. package/dist/{chunk-YOIJFB4J.js → chunk-DAZBANX7.js} +4 -2
  4. package/dist/{chunk-YOIJFB4J.js.map → chunk-DAZBANX7.js.map} +1 -1
  5. package/dist/{chunk-HN6B5G5V.js → chunk-YBOORROA.js} +2 -2
  6. package/dist/{claude-pair-runtime-XZXUHC4Q.js → claude-pair-runtime-U3QGHO36.js} +2 -2
  7. package/dist/lib/manager-worker.js +16 -16
  8. package/dist/mcp/direct-chat-channel.js +176 -133
  9. package/dist/mcp/index.js +175 -41
  10. package/dist/mcp/origami.js +3 -1
  11. package/dist/mcp/slack-channel.js +347 -262
  12. package/dist/mcp/teams-channel.js +210 -86
  13. package/dist/mcp/telegram-channel.js +290 -207
  14. package/dist/mcp/whatsapp-channel.js +194 -69
  15. package/dist/{persistent-session-QVJASJSQ.js → persistent-session-V3AMSH7S.js} +3 -3
  16. package/dist/{responsiveness-probe-AZSZBDKL.js → responsiveness-probe-MZBID4WC.js} +3 -3
  17. package/dist/{session-auth-dead-VY7AZM77.js → session-auth-dead-OCGA6YZW.js} +2 -2
  18. package/package.json +1 -1
  19. /package/dist/{chunk-JAXSZCTH.js.map → chunk-3YZWZJZR.js.map} +0 -0
  20. /package/dist/{chunk-HN6B5G5V.js.map → chunk-YBOORROA.js.map} +0 -0
  21. /package/dist/{claude-pair-runtime-XZXUHC4Q.js.map → claude-pair-runtime-U3QGHO36.js.map} +0 -0
  22. /package/dist/{persistent-session-QVJASJSQ.js.map → persistent-session-V3AMSH7S.js.map} +0 -0
  23. /package/dist/{responsiveness-probe-AZSZBDKL.js.map → responsiveness-probe-MZBID4WC.js.map} +0 -0
  24. /package/dist/{session-auth-dead-VY7AZM77.js.map → session-auth-dead-OCGA6YZW.js.map} +0 -0
@@ -3599,49 +3599,49 @@ var require_fast_uri = __commonJS({
3599
3599
  schemelessOptions.skipEscape = true;
3600
3600
  return serialize(resolved, schemelessOptions);
3601
3601
  }
3602
- function resolveComponent(base, relative, options, skipNormalization) {
3602
+ function resolveComponent(base, relative2, options, skipNormalization) {
3603
3603
  const target = {};
3604
3604
  if (!skipNormalization) {
3605
3605
  base = parse3(serialize(base, options), options);
3606
- relative = parse3(serialize(relative, options), options);
3606
+ relative2 = parse3(serialize(relative2, options), options);
3607
3607
  }
3608
3608
  options = options || {};
3609
- if (!options.tolerant && relative.scheme) {
3610
- target.scheme = relative.scheme;
3611
- target.userinfo = relative.userinfo;
3612
- target.host = relative.host;
3613
- target.port = relative.port;
3614
- target.path = removeDotSegments(relative.path || "");
3615
- target.query = relative.query;
3609
+ if (!options.tolerant && relative2.scheme) {
3610
+ target.scheme = relative2.scheme;
3611
+ target.userinfo = relative2.userinfo;
3612
+ target.host = relative2.host;
3613
+ target.port = relative2.port;
3614
+ target.path = removeDotSegments(relative2.path || "");
3615
+ target.query = relative2.query;
3616
3616
  } else {
3617
- if (relative.userinfo !== void 0 || relative.host !== void 0 || relative.port !== void 0) {
3618
- target.userinfo = relative.userinfo;
3619
- target.host = relative.host;
3620
- target.port = relative.port;
3621
- target.path = removeDotSegments(relative.path || "");
3622
- target.query = relative.query;
3617
+ if (relative2.userinfo !== void 0 || relative2.host !== void 0 || relative2.port !== void 0) {
3618
+ target.userinfo = relative2.userinfo;
3619
+ target.host = relative2.host;
3620
+ target.port = relative2.port;
3621
+ target.path = removeDotSegments(relative2.path || "");
3622
+ target.query = relative2.query;
3623
3623
  } else {
3624
- if (!relative.path) {
3624
+ if (!relative2.path) {
3625
3625
  target.path = base.path;
3626
- if (relative.query !== void 0) {
3627
- target.query = relative.query;
3626
+ if (relative2.query !== void 0) {
3627
+ target.query = relative2.query;
3628
3628
  } else {
3629
3629
  target.query = base.query;
3630
3630
  }
3631
3631
  } else {
3632
- if (relative.path[0] === "/") {
3633
- target.path = removeDotSegments(relative.path);
3632
+ if (relative2.path[0] === "/") {
3633
+ target.path = removeDotSegments(relative2.path);
3634
3634
  } else {
3635
3635
  if ((base.userinfo !== void 0 || base.host !== void 0 || base.port !== void 0) && !base.path) {
3636
- target.path = "/" + relative.path;
3636
+ target.path = "/" + relative2.path;
3637
3637
  } else if (!base.path) {
3638
- target.path = relative.path;
3638
+ target.path = relative2.path;
3639
3639
  } else {
3640
- target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path;
3640
+ target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative2.path;
3641
3641
  }
3642
3642
  target.path = removeDotSegments(target.path);
3643
3643
  }
3644
- target.query = relative.query;
3644
+ target.query = relative2.query;
3645
3645
  }
3646
3646
  target.userinfo = base.userinfo;
3647
3647
  target.host = base.host;
@@ -3649,7 +3649,7 @@ var require_fast_uri = __commonJS({
3649
3649
  }
3650
3650
  target.scheme = base.scheme;
3651
3651
  }
3652
- target.fragment = relative.fragment;
3652
+ target.fragment = relative2.fragment;
3653
3653
  return target;
3654
3654
  }
3655
3655
  function equal(uriA, uriB, options) {
@@ -11656,10 +11656,10 @@ var require_resolve_block_map = __commonJS({
11656
11656
  let offset = bm.offset;
11657
11657
  let commentEnd = null;
11658
11658
  for (const collItem of bm.items) {
11659
- const { start, key: key2, sep: sep2, value } = collItem;
11659
+ const { start, key: key2, sep: sep3, value } = collItem;
11660
11660
  const keyProps = resolveProps.resolveProps(start, {
11661
11661
  indicator: "explicit-key-ind",
11662
- next: key2 ?? sep2?.[0],
11662
+ next: key2 ?? sep3?.[0],
11663
11663
  offset,
11664
11664
  onError,
11665
11665
  parentIndent: bm.indent,
@@ -11673,7 +11673,7 @@ var require_resolve_block_map = __commonJS({
11673
11673
  else if ("indent" in key2 && key2.indent !== bm.indent)
11674
11674
  onError(offset, "BAD_INDENT", startColMsg);
11675
11675
  }
11676
- if (!keyProps.anchor && !keyProps.tag && !sep2) {
11676
+ if (!keyProps.anchor && !keyProps.tag && !sep3) {
11677
11677
  commentEnd = keyProps.end;
11678
11678
  if (keyProps.comment) {
11679
11679
  if (map.comment)
@@ -11697,7 +11697,7 @@ var require_resolve_block_map = __commonJS({
11697
11697
  ctx.atKey = false;
11698
11698
  if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))
11699
11699
  onError(keyStart, "DUPLICATE_KEY", "Map keys must be unique");
11700
- const valueProps = resolveProps.resolveProps(sep2 ?? [], {
11700
+ const valueProps = resolveProps.resolveProps(sep3 ?? [], {
11701
11701
  indicator: "map-value-ind",
11702
11702
  next: value,
11703
11703
  offset: keyNode.range[2],
@@ -11713,7 +11713,7 @@ var require_resolve_block_map = __commonJS({
11713
11713
  if (ctx.options.strict && keyProps.start < valueProps.found.offset - 1024)
11714
11714
  onError(keyNode.range, "KEY_OVER_1024_CHARS", "The : indicator must be at most 1024 chars after the start of an implicit block mapping key");
11715
11715
  }
11716
- const valueNode = value ? composeNode(ctx, value, valueProps, onError) : composeEmptyNode(ctx, offset, sep2, null, valueProps, onError);
11716
+ const valueNode = value ? composeNode(ctx, value, valueProps, onError) : composeEmptyNode(ctx, offset, sep3, null, valueProps, onError);
11717
11717
  if (ctx.schema.compat)
11718
11718
  utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);
11719
11719
  offset = valueNode.range[2];
@@ -11804,7 +11804,7 @@ var require_resolve_end = __commonJS({
11804
11804
  let comment = "";
11805
11805
  if (end) {
11806
11806
  let hasSpace = false;
11807
- let sep2 = "";
11807
+ let sep3 = "";
11808
11808
  for (const token of end) {
11809
11809
  const { source, type } = token;
11810
11810
  switch (type) {
@@ -11818,13 +11818,13 @@ var require_resolve_end = __commonJS({
11818
11818
  if (!comment)
11819
11819
  comment = cb;
11820
11820
  else
11821
- comment += sep2 + cb;
11822
- sep2 = "";
11821
+ comment += sep3 + cb;
11822
+ sep3 = "";
11823
11823
  break;
11824
11824
  }
11825
11825
  case "newline":
11826
11826
  if (comment)
11827
- sep2 += source;
11827
+ sep3 += source;
11828
11828
  hasSpace = true;
11829
11829
  break;
11830
11830
  default:
@@ -11867,18 +11867,18 @@ var require_resolve_flow_collection = __commonJS({
11867
11867
  let offset = fc.offset + fc.start.source.length;
11868
11868
  for (let i = 0; i < fc.items.length; ++i) {
11869
11869
  const collItem = fc.items[i];
11870
- const { start, key: key2, sep: sep2, value } = collItem;
11870
+ const { start, key: key2, sep: sep3, value } = collItem;
11871
11871
  const props = resolveProps.resolveProps(start, {
11872
11872
  flow: fcName,
11873
11873
  indicator: "explicit-key-ind",
11874
- next: key2 ?? sep2?.[0],
11874
+ next: key2 ?? sep3?.[0],
11875
11875
  offset,
11876
11876
  onError,
11877
11877
  parentIndent: fc.indent,
11878
11878
  startOnNewline: false
11879
11879
  });
11880
11880
  if (!props.found) {
11881
- if (!props.anchor && !props.tag && !sep2 && !value) {
11881
+ if (!props.anchor && !props.tag && !sep3 && !value) {
11882
11882
  if (i === 0 && props.comma)
11883
11883
  onError(props.comma, "UNEXPECTED_TOKEN", `Unexpected , in ${fcName}`);
11884
11884
  else if (i < fc.items.length - 1)
@@ -11932,8 +11932,8 @@ var require_resolve_flow_collection = __commonJS({
11932
11932
  }
11933
11933
  }
11934
11934
  }
11935
- if (!isMap && !sep2 && !props.found) {
11936
- const valueNode = value ? composeNode(ctx, value, props, onError) : composeEmptyNode(ctx, props.end, sep2, null, props, onError);
11935
+ if (!isMap && !sep3 && !props.found) {
11936
+ const valueNode = value ? composeNode(ctx, value, props, onError) : composeEmptyNode(ctx, props.end, sep3, null, props, onError);
11937
11937
  coll.items.push(valueNode);
11938
11938
  offset = valueNode.range[2];
11939
11939
  if (isBlock(value))
@@ -11945,7 +11945,7 @@ var require_resolve_flow_collection = __commonJS({
11945
11945
  if (isBlock(key2))
11946
11946
  onError(keyNode.range, "BLOCK_IN_FLOW", blockMsg);
11947
11947
  ctx.atKey = false;
11948
- const valueProps = resolveProps.resolveProps(sep2 ?? [], {
11948
+ const valueProps = resolveProps.resolveProps(sep3 ?? [], {
11949
11949
  flow: fcName,
11950
11950
  indicator: "map-value-ind",
11951
11951
  next: value,
@@ -11956,8 +11956,8 @@ var require_resolve_flow_collection = __commonJS({
11956
11956
  });
11957
11957
  if (valueProps.found) {
11958
11958
  if (!isMap && !props.found && ctx.options.strict) {
11959
- if (sep2)
11960
- for (const st of sep2) {
11959
+ if (sep3)
11960
+ for (const st of sep3) {
11961
11961
  if (st === valueProps.found)
11962
11962
  break;
11963
11963
  if (st.type === "newline") {
@@ -11974,7 +11974,7 @@ var require_resolve_flow_collection = __commonJS({
11974
11974
  else
11975
11975
  onError(valueProps.start, "MISSING_CHAR", `Missing , or : between ${fcName} items`);
11976
11976
  }
11977
- const valueNode = value ? composeNode(ctx, value, valueProps, onError) : valueProps.found ? composeEmptyNode(ctx, valueProps.end, sep2, null, valueProps, onError) : null;
11977
+ const valueNode = value ? composeNode(ctx, value, valueProps, onError) : valueProps.found ? composeEmptyNode(ctx, valueProps.end, sep3, null, valueProps, onError) : null;
11978
11978
  if (valueNode) {
11979
11979
  if (isBlock(value))
11980
11980
  onError(valueNode.range, "BLOCK_IN_FLOW", blockMsg);
@@ -12154,7 +12154,7 @@ var require_resolve_block_scalar = __commonJS({
12154
12154
  chompStart = i + 1;
12155
12155
  }
12156
12156
  let value = "";
12157
- let sep2 = "";
12157
+ let sep3 = "";
12158
12158
  let prevMoreIndented = false;
12159
12159
  for (let i = 0; i < contentStart; ++i)
12160
12160
  value += lines[i][0].slice(trimIndent) + "\n";
@@ -12171,24 +12171,24 @@ var require_resolve_block_scalar = __commonJS({
12171
12171
  indent = "";
12172
12172
  }
12173
12173
  if (type === Scalar.Scalar.BLOCK_LITERAL) {
12174
- value += sep2 + indent.slice(trimIndent) + content;
12175
- sep2 = "\n";
12174
+ value += sep3 + indent.slice(trimIndent) + content;
12175
+ sep3 = "\n";
12176
12176
  } else if (indent.length > trimIndent || content[0] === " ") {
12177
- if (sep2 === " ")
12178
- sep2 = "\n";
12179
- else if (!prevMoreIndented && sep2 === "\n")
12180
- sep2 = "\n\n";
12181
- value += sep2 + indent.slice(trimIndent) + content;
12182
- sep2 = "\n";
12177
+ if (sep3 === " ")
12178
+ sep3 = "\n";
12179
+ else if (!prevMoreIndented && sep3 === "\n")
12180
+ sep3 = "\n\n";
12181
+ value += sep3 + indent.slice(trimIndent) + content;
12182
+ sep3 = "\n";
12183
12183
  prevMoreIndented = true;
12184
12184
  } else if (content === "") {
12185
- if (sep2 === "\n")
12185
+ if (sep3 === "\n")
12186
12186
  value += "\n";
12187
12187
  else
12188
- sep2 = "\n";
12188
+ sep3 = "\n";
12189
12189
  } else {
12190
- value += sep2 + content;
12191
- sep2 = " ";
12190
+ value += sep3 + content;
12191
+ sep3 = " ";
12192
12192
  prevMoreIndented = false;
12193
12193
  }
12194
12194
  }
@@ -12370,25 +12370,25 @@ var require_resolve_flow_scalar = __commonJS({
12370
12370
  if (!match)
12371
12371
  return source;
12372
12372
  let res = match[1];
12373
- let sep2 = " ";
12373
+ let sep3 = " ";
12374
12374
  let pos = first.lastIndex;
12375
12375
  line.lastIndex = pos;
12376
12376
  while (match = line.exec(source)) {
12377
12377
  if (match[1] === "") {
12378
- if (sep2 === "\n")
12379
- res += sep2;
12378
+ if (sep3 === "\n")
12379
+ res += sep3;
12380
12380
  else
12381
- sep2 = "\n";
12381
+ sep3 = "\n";
12382
12382
  } else {
12383
- res += sep2 + match[1];
12384
- sep2 = " ";
12383
+ res += sep3 + match[1];
12384
+ sep3 = " ";
12385
12385
  }
12386
12386
  pos = line.lastIndex;
12387
12387
  }
12388
12388
  const last = /[ \t]*(.*)/sy;
12389
12389
  last.lastIndex = pos;
12390
12390
  match = last.exec(source);
12391
- return res + sep2 + (match?.[1] ?? "");
12391
+ return res + sep3 + (match?.[1] ?? "");
12392
12392
  }
12393
12393
  function doubleQuotedValue(source, onError) {
12394
12394
  let res = "";
@@ -13196,14 +13196,14 @@ var require_cst_stringify = __commonJS({
13196
13196
  }
13197
13197
  }
13198
13198
  }
13199
- function stringifyItem({ start, key: key2, sep: sep2, value }) {
13199
+ function stringifyItem({ start, key: key2, sep: sep3, value }) {
13200
13200
  let res = "";
13201
13201
  for (const st of start)
13202
13202
  res += st.source;
13203
13203
  if (key2)
13204
13204
  res += stringifyToken(key2);
13205
- if (sep2)
13206
- for (const st of sep2)
13205
+ if (sep3)
13206
+ for (const st of sep3)
13207
13207
  res += st.source;
13208
13208
  if (value)
13209
13209
  res += stringifyToken(value);
@@ -14353,18 +14353,18 @@ var require_parser = __commonJS({
14353
14353
  if (this.type === "map-value-ind") {
14354
14354
  const prev = getPrevProps(this.peek(2));
14355
14355
  const start = getFirstKeyStartProps(prev);
14356
- let sep2;
14356
+ let sep3;
14357
14357
  if (scalar.end) {
14358
- sep2 = scalar.end;
14359
- sep2.push(this.sourceToken);
14358
+ sep3 = scalar.end;
14359
+ sep3.push(this.sourceToken);
14360
14360
  delete scalar.end;
14361
14361
  } else
14362
- sep2 = [this.sourceToken];
14362
+ sep3 = [this.sourceToken];
14363
14363
  const map = {
14364
14364
  type: "block-map",
14365
14365
  offset: scalar.offset,
14366
14366
  indent: scalar.indent,
14367
- items: [{ start, key: scalar, sep: sep2 }]
14367
+ items: [{ start, key: scalar, sep: sep3 }]
14368
14368
  };
14369
14369
  this.onKeyLine = true;
14370
14370
  this.stack[this.stack.length - 1] = map;
@@ -14517,15 +14517,15 @@ var require_parser = __commonJS({
14517
14517
  } else if (isFlowToken(it.key) && !includesToken(it.sep, "newline")) {
14518
14518
  const start2 = getFirstKeyStartProps(it.start);
14519
14519
  const key2 = it.key;
14520
- const sep2 = it.sep;
14521
- sep2.push(this.sourceToken);
14520
+ const sep3 = it.sep;
14521
+ sep3.push(this.sourceToken);
14522
14522
  delete it.key;
14523
14523
  delete it.sep;
14524
14524
  this.stack.push({
14525
14525
  type: "block-map",
14526
14526
  offset: this.offset,
14527
14527
  indent: this.indent,
14528
- items: [{ start: start2, key: key2, sep: sep2 }]
14528
+ items: [{ start: start2, key: key2, sep: sep3 }]
14529
14529
  });
14530
14530
  } else if (start.length > 0) {
14531
14531
  it.sep = it.sep.concat(start, this.sourceToken);
@@ -14719,13 +14719,13 @@ var require_parser = __commonJS({
14719
14719
  const prev = getPrevProps(parent);
14720
14720
  const start = getFirstKeyStartProps(prev);
14721
14721
  fixFlowSeqItems(fc);
14722
- const sep2 = fc.end.splice(1, fc.end.length);
14723
- sep2.push(this.sourceToken);
14722
+ const sep3 = fc.end.splice(1, fc.end.length);
14723
+ sep3.push(this.sourceToken);
14724
14724
  const map = {
14725
14725
  type: "block-map",
14726
14726
  offset: fc.offset,
14727
14727
  indent: fc.indent,
14728
- items: [{ start, key: fc, sep: sep2 }]
14728
+ items: [{ start, key: fc, sep: sep3 }]
14729
14729
  };
14730
14730
  this.onKeyLine = true;
14731
14731
  this.stack[this.stack.length - 1] = map;
@@ -18932,7 +18932,7 @@ var require_filters = __commonJS({
18932
18932
  return r.copySafeness(str2, res);
18933
18933
  }
18934
18934
  _exports.indent = indent;
18935
- function join21(arr, del, attr) {
18935
+ function join23(arr, del, attr) {
18936
18936
  del = del || "";
18937
18937
  if (attr) {
18938
18938
  arr = lib.map(arr, function(v) {
@@ -18941,7 +18941,7 @@ var require_filters = __commonJS({
18941
18941
  }
18942
18942
  return arr.join(del);
18943
18943
  }
18944
- _exports.join = join21;
18944
+ _exports.join = join23;
18945
18945
  function last(arr) {
18946
18946
  return arr[arr.length - 1];
18947
18947
  }
@@ -20107,9 +20107,9 @@ var require_handler = __commonJS({
20107
20107
  if (this.fsw.closed) {
20108
20108
  return;
20109
20109
  }
20110
- const dirname6 = sysPath.dirname(file);
20110
+ const dirname7 = sysPath.dirname(file);
20111
20111
  const basename2 = sysPath.basename(file);
20112
- const parent = this.fsw._getWatchedDir(dirname6);
20112
+ const parent = this.fsw._getWatchedDir(dirname7);
20113
20113
  let prevStats = stats;
20114
20114
  if (parent.has(basename2))
20115
20115
  return;
@@ -20136,7 +20136,7 @@ var require_handler = __commonJS({
20136
20136
  prevStats = newStats2;
20137
20137
  }
20138
20138
  } catch (error2) {
20139
- this.fsw._remove(dirname6, basename2);
20139
+ this.fsw._remove(dirname7, basename2);
20140
20140
  }
20141
20141
  } else if (parent.has(basename2)) {
20142
20142
  const at = newStats.atimeMs;
@@ -20400,11 +20400,11 @@ var require_chokidar = __commonJS({
20400
20400
  if (matcher.path === string3)
20401
20401
  return true;
20402
20402
  if (matcher.recursive) {
20403
- const relative = sysPath.relative(matcher.path, string3);
20404
- if (!relative) {
20403
+ const relative2 = sysPath.relative(matcher.path, string3);
20404
+ if (!relative2) {
20405
20405
  return false;
20406
20406
  }
20407
- return !relative.startsWith("..") && !sysPath.isAbsolute(relative);
20407
+ return !relative2.startsWith("..") && !sysPath.isAbsolute(relative2);
20408
20408
  }
20409
20409
  return false;
20410
20410
  };
@@ -21372,11 +21372,11 @@ var require_globals = __commonJS({
21372
21372
  }
21373
21373
  };
21374
21374
  }
21375
- function _joiner(sep2) {
21376
- sep2 = sep2 || ",";
21375
+ function _joiner(sep3) {
21376
+ sep3 = sep3 || ",";
21377
21377
  var first = true;
21378
21378
  return function() {
21379
- var val = first ? "" : sep2;
21379
+ var val = first ? "" : sep3;
21380
21380
  first = false;
21381
21381
  return val;
21382
21382
  };
@@ -21406,8 +21406,8 @@ var require_globals = __commonJS({
21406
21406
  cycler: function cycler() {
21407
21407
  return _cycler(Array.prototype.slice.call(arguments));
21408
21408
  },
21409
- joiner: function joiner(sep2) {
21410
- return _joiner(sep2);
21409
+ joiner: function joiner(sep3) {
21410
+ return _joiner(sep3);
21411
21411
  }
21412
21412
  };
21413
21413
  }
@@ -30475,10 +30475,10 @@ function leadingAddresseeIds(text) {
30475
30475
  ids.push(id);
30476
30476
  if (after.length === 0)
30477
30477
  break;
30478
- const sep2 = ADDRESSEE_SEPARATOR.exec(after);
30479
- if (!sep2)
30478
+ const sep3 = ADDRESSEE_SEPARATOR.exec(after);
30479
+ if (!sep3)
30480
30480
  break;
30481
- rest = after.slice(sep2[0].length);
30481
+ rest = after.slice(sep3[0].length);
30482
30482
  }
30483
30483
  return ids;
30484
30484
  }
@@ -33509,7 +33509,7 @@ var MARKUP_BRIDGE_SCRIPT = `<script>(function(){
33509
33509
  })();</script>`;
33510
33510
 
33511
33511
  // ../core/dist/integrations/augmented-live/publisher.js
33512
- var PRESENTER_CHROME_SELECTORS = "#al-download, .al-launcher, .al-stats-btn, .al-edit-btn";
33512
+ var PRESENTER_CHROME_SELECTORS = "#al-download, #al-vis, .al-launcher, .al-stats-btn, .al-edit-btn";
33513
33513
  var presenterChromeCss = `
33514
33514
  /* ENG-9516: presenter mode. */
33515
33515
  ${PRESENTER_CHROME_SELECTORS}{transition:opacity .25s ease,visibility .25s ease}
@@ -33540,6 +33540,8 @@ var DECK_ATTRIBUTION_BOTTOM_PX = DECK_HUD_TOP_PX + DECK_CHROME_GAP_PX;
33540
33540
  var DOWNLOAD_BOTTOM_PX = 72;
33541
33541
  var DOWNLOAD_MOBILE_MIN_HEIGHT_PX = 44;
33542
33542
  var DECK_ATTRIBUTION_NARROW_BOTTOM_PX = DOWNLOAD_BOTTOM_PX + DOWNLOAD_MOBILE_MIN_HEIGHT_PX + DECK_CHROME_GAP_PX;
33543
+ var VISIBILITY_BOTTOM_PX = DOWNLOAD_BOTTOM_PX + DOWNLOAD_MOBILE_MIN_HEIGHT_PX + DECK_CHROME_GAP_PX;
33544
+ var DECK_ATTRIBUTION_NARROW_WITH_VISIBILITY_BOTTOM_PX = VISIBILITY_BOTTOM_PX + DOWNLOAD_MOBILE_MIN_HEIGHT_PX + DECK_CHROME_GAP_PX;
33543
33545
 
33544
33546
  // ../core/dist/integrations/augmented-live/asset.js
33545
33547
  var MB = 1024 * 1024;
@@ -41362,9 +41364,9 @@ function resolveEgressTargets(toolName, args, registry2) {
41362
41364
  for (const field of spec.channelThread ?? []) {
41363
41365
  const raw = str(a[field]);
41364
41366
  if (!raw) continue;
41365
- const sep2 = raw.indexOf(":");
41366
- if (sep2 <= 0) continue;
41367
- push(raw.slice(0, sep2), str(raw.slice(sep2 + 1)));
41367
+ const sep3 = raw.indexOf(":");
41368
+ if (sep3 <= 0) continue;
41369
+ push(raw.slice(0, sep3), str(raw.slice(sep3 + 1)));
41368
41370
  }
41369
41371
  for (const field of spec.inboundId ?? []) {
41370
41372
  const id = str(a[field]);
@@ -42996,9 +42998,9 @@ import {
42996
42998
  createWriteStream,
42997
42999
  existsSync as existsSync10,
42998
43000
  ftruncateSync,
42999
- mkdirSync as mkdirSync9,
43001
+ mkdirSync as mkdirSync10,
43000
43002
  openSync as openSync2,
43001
- readFileSync as readFileSync18,
43003
+ readFileSync as readFileSync19,
43002
43004
  readdirSync as readdirSync7,
43003
43005
  renameSync as renameSync5,
43004
43006
  statSync as statSync5,
@@ -43007,8 +43009,8 @@ import {
43007
43009
  writeFileSync as writeFileSync14,
43008
43010
  writeSync
43009
43011
  } from "fs";
43010
- import { basename, join as join20, resolve as resolve2 } from "path";
43011
- import { homedir as homedir6 } from "os";
43012
+ import { basename, join as join22, resolve as resolve2 } from "path";
43013
+ import { homedir as homedir7 } from "os";
43012
43014
  import { createHash as createHash3, randomUUID as randomUUID2 } from "crypto";
43013
43015
 
43014
43016
  // src/slack-thread-store.ts
@@ -43312,7 +43314,7 @@ function reconnectDelayMs(attempt, opts = {}) {
43312
43314
  function redactSocketUrl(text) {
43313
43315
  return text.replace(
43314
43316
  /([?&])(ticket|token|app_id_key)=[^&\s"']*/gi,
43315
- (_m, sep2, key2) => `${sep2}${key2}=<redacted>`
43317
+ (_m, sep3, key2) => `${sep3}${key2}=<redacted>`
43316
43318
  );
43317
43319
  }
43318
43320
  function describeWebSocketError(err) {
@@ -43402,6 +43404,9 @@ function foldTurnInitiatorLedger(existing, marker, maxAgeMs = TURN_INITIATOR_MAX
43402
43404
  sender_id: marker.sender_id,
43403
43405
  ...marker.sender_name ? { sender_name: marker.sender_name } : {},
43404
43406
  ...marker.channel_ref ? { channel_ref: marker.channel_ref } : {},
43407
+ ...marker.chat_kind ? { chat_kind: marker.chat_kind } : {},
43408
+ ...marker.chat_id ? { chat_id: marker.chat_id } : {},
43409
+ ...marker.unattributed ? { unattributed: true } : {},
43405
43410
  ts: marker.ts
43406
43411
  });
43407
43412
  kept.sort((a, b) => b.ts - a.ts);
@@ -43416,7 +43421,7 @@ function updateTurnInitiatorLedger(singleSlotFile, marker) {
43416
43421
  } catch {
43417
43422
  }
43418
43423
  const next = foldTurnInitiatorLedger(existing, marker);
43419
- const tmp = `${ledgerFile}.tmp`;
43424
+ const tmp = `${ledgerFile}.${process.pid}.${Date.now()}.tmp`;
43420
43425
  writeFileSync7(tmp, JSON.stringify(next), "utf8");
43421
43426
  renameSync2(tmp, ledgerFile);
43422
43427
  }
@@ -43437,9 +43442,137 @@ function writeTurnInitiatorMarker(input) {
43437
43442
  }
43438
43443
  }
43439
43444
 
43445
+ // src/turn-context.ts
43446
+ import { mkdirSync as mkdirSync6, readFileSync as readFileSync11 } from "fs";
43447
+ import { homedir as homedir6 } from "os";
43448
+ import { dirname as dirname5, join as join15 } from "path";
43449
+
43450
+ // ../core/dist/provisioning/frameworks/claudecode/agent-dir-alias.js
43451
+ import { isAbsolute, join as join13, relative, sep as sep2 } from "path";
43452
+ var VALID_CODE_NAME = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
43453
+ var VALID_AGENT_ID = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
43454
+ var INITIATOR_BASENAME = ".current-turn-initiator.json";
43455
+ function isSafeAgentSegment(segment) {
43456
+ return VALID_CODE_NAME.test(segment) || VALID_AGENT_ID.test(segment);
43457
+ }
43458
+ function initiatorDirSegment(initiatorFile, homeDir) {
43459
+ const rel = relative(join13(homeDir, ".augmented"), initiatorFile);
43460
+ if (!rel || isAbsolute(rel))
43461
+ return null;
43462
+ const parts = rel.split(sep2);
43463
+ if (parts.length !== 2 || parts[1] !== INITIATOR_BASENAME)
43464
+ return null;
43465
+ const segment = parts[0];
43466
+ if (segment === void 0)
43467
+ return null;
43468
+ return isSafeAgentSegment(segment) ? segment : null;
43469
+ }
43470
+ function resolveAgentDirAlias(input) {
43471
+ const { codeName, turnInitiatorFile, agentId, homeDir } = input;
43472
+ const codeNameTrimmed = typeof codeName === "string" ? codeName.trim() : "";
43473
+ if (codeNameTrimmed && VALID_CODE_NAME.test(codeNameTrimmed)) {
43474
+ return join13(homeDir, ".augmented", codeNameTrimmed);
43475
+ }
43476
+ const initiator = typeof turnInitiatorFile === "string" ? turnInitiatorFile.trim() : "";
43477
+ if (initiator) {
43478
+ const segment = initiatorDirSegment(initiator, homeDir);
43479
+ if (segment)
43480
+ return join13(homeDir, ".augmented", segment);
43481
+ }
43482
+ const agentIdTrimmed = typeof agentId === "string" ? agentId.trim() : "";
43483
+ if (agentIdTrimmed && VALID_AGENT_ID.test(agentIdTrimmed)) {
43484
+ return join13(homeDir, ".augmented", agentIdTrimmed);
43485
+ }
43486
+ return null;
43487
+ }
43488
+
43489
+ // src/scheduled-turn-marker.ts
43490
+ import { readFileSync as readFileSync10, unlinkSync as unlinkSync5 } from "fs";
43491
+ import { join as join14 } from "path";
43492
+ var SCHEDULED_TURN_MARKER_FILENAME2 = ".current-scheduled-turn.json";
43493
+ var SCHEDULED_TURN_MAX_AGE_MS = 15 * 60 * 1e3;
43494
+ function validateScheduledTurnMarker(raw, now, maxAgeMs = SCHEDULED_TURN_MAX_AGE_MS) {
43495
+ if (!raw || typeof raw !== "object") return null;
43496
+ const m = raw;
43497
+ if (typeof m.ts !== "number" || !Number.isFinite(m.ts)) return null;
43498
+ if (now - m.ts > maxAgeMs || now - m.ts < 0) return null;
43499
+ const out = { ts: m.ts };
43500
+ if (typeof m.task_id === "string" && m.task_id.length > 0) out.task_id = m.task_id;
43501
+ const t = m.target;
43502
+ if (t && typeof t === "object") {
43503
+ const tc = t;
43504
+ if (typeof tc.channel_id === "string" && tc.channel_id.length > 0) {
43505
+ out.target = {
43506
+ channel_id: tc.channel_id,
43507
+ ...typeof tc.thread_ts === "string" && tc.thread_ts.length > 0 ? { thread_ts: tc.thread_ts } : {}
43508
+ };
43509
+ }
43510
+ }
43511
+ return out;
43512
+ }
43513
+ function resolveScheduledTurnDestination(marker, requested) {
43514
+ if (marker.target) {
43515
+ const channel = marker.target.channel_id;
43516
+ const thread_ts = marker.target.thread_ts;
43517
+ return {
43518
+ channel,
43519
+ thread_ts,
43520
+ retargeted: channel !== requested.channel || thread_ts !== requested.thread_ts
43521
+ };
43522
+ }
43523
+ return { channel: requested.channel, thread_ts: void 0, retargeted: Boolean(requested.thread_ts) };
43524
+ }
43525
+ function readScheduledTurnMarker(agentDir, now = Date.now()) {
43526
+ if (!agentDir) return null;
43527
+ try {
43528
+ const raw = JSON.parse(
43529
+ readFileSync10(join14(agentDir, SCHEDULED_TURN_MARKER_FILENAME2), "utf8")
43530
+ );
43531
+ return validateScheduledTurnMarker(raw, now);
43532
+ } catch {
43533
+ return null;
43534
+ }
43535
+ }
43536
+ function clearScheduledTurnMarker(agentDir) {
43537
+ if (!agentDir) return;
43538
+ try {
43539
+ unlinkSync5(join14(agentDir, SCHEDULED_TURN_MARKER_FILENAME2));
43540
+ } catch {
43541
+ }
43542
+ }
43543
+
43544
+ // src/turn-context.ts
43545
+ var TURN_INITIATOR_MARKER_FILENAME = ".current-turn-initiator.json";
43546
+ function writeUnattributedTurnMarker(channel, opts = {}) {
43547
+ try {
43548
+ const file = resolveTurnInitiatorFile(opts.env ?? process.env, opts.home ?? homedir6());
43549
+ if (!file) return;
43550
+ mkdirSync6(dirname5(file), { recursive: true });
43551
+ updateTurnInitiatorLedger(file, {
43552
+ channel,
43553
+ sender_id: "",
43554
+ channel_ref: "unattributed",
43555
+ unattributed: true,
43556
+ ts: opts.now ?? Date.now()
43557
+ });
43558
+ } catch {
43559
+ }
43560
+ }
43561
+ function resolveTurnInitiatorFile(env2 = process.env, home = homedir6()) {
43562
+ const injected = env2["AGT_TURN_INITIATOR_FILE"]?.trim();
43563
+ if (injected) return injected;
43564
+ const dir = resolveAgentDirAlias({
43565
+ codeName: env2["AGT_AGENT_CODE_NAME"],
43566
+ agentId: env2["AGT_AGENT_ID"],
43567
+ turnInitiatorFile: null,
43568
+ homeDir: home
43569
+ });
43570
+ return dir ? join15(dir, TURN_INITIATOR_MARKER_FILENAME) : null;
43571
+ }
43572
+
43440
43573
  // src/slack-bot-photo.ts
43441
- import { existsSync as existsSync7, mkdirSync as mkdirSync6, readFileSync as readFileSync10, writeFileSync as writeFileSync8 } from "fs";
43442
- import { dirname as dirname5 } from "path";
43574
+ import { existsSync as existsSync7, mkdirSync as mkdirSync7, readFileSync as readFileSync12, writeFileSync as writeFileSync8 } from "fs";
43575
+ import { dirname as dirname6 } from "path";
43443
43576
  async function applyBotPhoto(opts) {
43444
43577
  const fetchImpl = opts.fetchImpl ?? fetch;
43445
43578
  const log = opts.log ?? ((m) => {
@@ -43448,7 +43581,7 @@ async function applyBotPhoto(opts) {
43448
43581
  const { token, avatarUrl, markerPath } = opts;
43449
43582
  if (markerPath && existsSync7(markerPath)) {
43450
43583
  try {
43451
- if (readFileSync10(markerPath, "utf-8").trim() === avatarUrl) {
43584
+ if (readFileSync12(markerPath, "utf-8").trim() === avatarUrl) {
43452
43585
  return { status: "skipped-unchanged" };
43453
43586
  }
43454
43587
  } catch {
@@ -43489,7 +43622,7 @@ async function applyBotPhoto(opts) {
43489
43622
  }
43490
43623
  if (markerPath) {
43491
43624
  try {
43492
- mkdirSync6(dirname5(markerPath), { recursive: true, mode: 448 });
43625
+ mkdirSync7(dirname6(markerPath), { recursive: true, mode: 448 });
43493
43626
  writeFileSync8(markerPath, avatarUrl, { mode: 384 });
43494
43627
  } catch {
43495
43628
  }
@@ -43573,8 +43706,8 @@ function conversationalLaneMeta(expectsReply = true) {
43573
43706
  }
43574
43707
 
43575
43708
  // src/inbound-lane-telemetry.ts
43576
- import { readFileSync as readFileSync11, writeFileSync as writeFileSync9 } from "fs";
43577
- import { join as join13 } from "path";
43709
+ import { readFileSync as readFileSync13, writeFileSync as writeFileSync9 } from "fs";
43710
+ import { join as join16 } from "path";
43578
43711
  var LANE_CLASSIFICATION_COUNTER_SUFFIX = "-lane-classifications.json";
43579
43712
  var SUSPECTED_MISCLASSIFICATION_KEY = "suspected_misclassification";
43580
43713
  var HUMAN_CHANNEL_SOURCES = /* @__PURE__ */ new Set([
@@ -43591,10 +43724,10 @@ function isSuspectedMisclassification(lane, source) {
43591
43724
  }
43592
43725
  function recordLaneClassification(agentDir, channel, classification) {
43593
43726
  if (!agentDir) return;
43594
- const path = join13(agentDir, `${channel}${LANE_CLASSIFICATION_COUNTER_SUFFIX}`);
43727
+ const path = join16(agentDir, `${channel}${LANE_CLASSIFICATION_COUNTER_SUFFIX}`);
43595
43728
  let counts = {};
43596
43729
  try {
43597
- const parsed = JSON.parse(readFileSync11(path, "utf-8"));
43730
+ const parsed = JSON.parse(readFileSync13(path, "utf-8"));
43598
43731
  if (parsed && typeof parsed === "object") counts = parsed;
43599
43732
  } catch {
43600
43733
  }
@@ -43610,8 +43743,8 @@ function recordLaneClassification(agentDir, channel, classification) {
43610
43743
  }
43611
43744
 
43612
43745
  // src/slack-inbound-registry.ts
43613
- import { readdirSync as readdirSync5, readFileSync as readFileSync12 } from "fs";
43614
- import { join as join14 } from "path";
43746
+ import { readdirSync as readdirSync5, readFileSync as readFileSync14 } from "fs";
43747
+ import { join as join17 } from "path";
43615
43748
  var DEFAULT_MAX_ENTRIES = 500;
43616
43749
  var DEFAULT_CLEARED_TTL_MS = 6 * 60 * 60 * 1e3;
43617
43750
  function entryKey(channel, messageTs) {
@@ -43732,7 +43865,7 @@ function createInboundRegistry(opts = {}) {
43732
43865
  if (name.includes(".retry-") || name.includes(".poison")) continue;
43733
43866
  let marker;
43734
43867
  try {
43735
- marker = JSON.parse(readFileSync12(join14(dir, name), "utf-8"));
43868
+ marker = JSON.parse(readFileSync14(join17(dir, name), "utf-8"));
43736
43869
  } catch {
43737
43870
  continue;
43738
43871
  }
@@ -43777,17 +43910,17 @@ function slackInboundId(channel, threadTs, messageTs) {
43777
43910
  }
43778
43911
 
43779
43912
  // src/inbound-delivery-ledger.ts
43780
- import { existsSync as existsSync8, mkdirSync as mkdirSync7, readdirSync as readdirSync6, readFileSync as readFileSync13, renameSync as renameSync3, writeFileSync as writeFileSync10 } from "fs";
43781
- import { join as join15 } from "path";
43913
+ import { existsSync as existsSync8, mkdirSync as mkdirSync8, readdirSync as readdirSync6, readFileSync as readFileSync15, renameSync as renameSync3, writeFileSync as writeFileSync10 } from "fs";
43914
+ import { join as join18 } from "path";
43782
43915
  function safeInboundId(inboundId) {
43783
43916
  return inboundId.replace(/[^A-Za-z0-9_-]/g, "_");
43784
43917
  }
43785
43918
  var defaultDeps = {
43786
- mkdir: (dir) => mkdirSync7(dir, { recursive: true }),
43919
+ mkdir: (dir) => mkdirSync8(dir, { recursive: true }),
43787
43920
  writeFile: (path, data) => writeFileSync10(path, data, "utf8"),
43788
43921
  rename: (from, to) => renameSync3(from, to),
43789
43922
  readdir: (dir) => readdirSync6(dir),
43790
- readFile: (path) => readFileSync13(path, "utf8"),
43923
+ readFile: (path) => readFileSync15(path, "utf8"),
43791
43924
  exists: (path) => existsSync8(path)
43792
43925
  };
43793
43926
  function writeInboundDeliveryLedgerEntry(dir, record2, deps = defaultDeps) {
@@ -43796,7 +43929,7 @@ function writeInboundDeliveryLedgerEntry(dir, record2, deps = defaultDeps) {
43796
43929
  if (!safe || safe.includes("/") || safe.includes("\\") || safe.includes("..")) return;
43797
43930
  try {
43798
43931
  deps.mkdir(dir);
43799
- const final = join15(dir, `${safe}.json`);
43932
+ const final = join18(dir, `${safe}.json`);
43800
43933
  const tmp = `${final}.tmp`;
43801
43934
  deps.writeFile(tmp, JSON.stringify(record2));
43802
43935
  deps.rename(tmp, final);
@@ -43981,8 +44114,8 @@ function describeSendOutcome(dest) {
43981
44114
  }
43982
44115
 
43983
44116
  // src/slack-reply-binding-telemetry.ts
43984
- import { readFileSync as readFileSync14, writeFileSync as writeFileSync11 } from "fs";
43985
- import { join as join16 } from "path";
44117
+ import { readFileSync as readFileSync16, writeFileSync as writeFileSync11 } from "fs";
44118
+ import { join as join19 } from "path";
43986
44119
  var REPLY_BINDING_CLASSIFICATION_COUNTER_SUFFIX = "-reply-binding-classifications.json";
43987
44120
  var UNKNOWN_INBOUND_ID_KEY = "unknown_inbound_id";
43988
44121
  var CHANNEL_MISTARGET_CORRECTED_KEY = "channel_mistarget_corrected";
@@ -43997,10 +44130,10 @@ function slackReplyBindingMode() {
43997
44130
  }
43998
44131
  function recordReplyBindingClassification(agentDir, channel, input) {
43999
44132
  if (!agentDir) return;
44000
- const path = join16(agentDir, `${channel}${REPLY_BINDING_CLASSIFICATION_COUNTER_SUFFIX}`);
44133
+ const path = join19(agentDir, `${channel}${REPLY_BINDING_CLASSIFICATION_COUNTER_SUFFIX}`);
44001
44134
  let counts = {};
44002
44135
  try {
44003
- const parsed = JSON.parse(readFileSync14(path, "utf-8"));
44136
+ const parsed = JSON.parse(readFileSync16(path, "utf-8"));
44004
44137
  if (parsed && typeof parsed === "object") counts = parsed;
44005
44138
  } catch {
44006
44139
  }
@@ -44015,10 +44148,10 @@ function recordReplyBindingClassification(agentDir, channel, input) {
44015
44148
  }
44016
44149
  function recordScheduledChannelOverride(agentDir, channel, input) {
44017
44150
  if (!agentDir) return;
44018
- const path = join16(agentDir, `${channel}${REPLY_BINDING_CLASSIFICATION_COUNTER_SUFFIX}`);
44151
+ const path = join19(agentDir, `${channel}${REPLY_BINDING_CLASSIFICATION_COUNTER_SUFFIX}`);
44019
44152
  let counts = {};
44020
44153
  try {
44021
- const parsed = JSON.parse(readFileSync14(path, "utf-8"));
44154
+ const parsed = JSON.parse(readFileSync16(path, "utf-8"));
44022
44155
  if (parsed && typeof parsed === "object") counts = parsed;
44023
44156
  } catch {
44024
44157
  }
@@ -44031,10 +44164,10 @@ function recordScheduledChannelOverride(agentDir, channel, input) {
44031
44164
  }
44032
44165
  function recordChannelMistarget(agentDir, channel, input) {
44033
44166
  if (!agentDir) return;
44034
- const path = join16(agentDir, `${channel}${REPLY_BINDING_CLASSIFICATION_COUNTER_SUFFIX}`);
44167
+ const path = join19(agentDir, `${channel}${REPLY_BINDING_CLASSIFICATION_COUNTER_SUFFIX}`);
44035
44168
  let counts = {};
44036
44169
  try {
44037
- const parsed = JSON.parse(readFileSync14(path, "utf-8"));
44170
+ const parsed = JSON.parse(readFileSync16(path, "utf-8"));
44038
44171
  if (parsed && typeof parsed === "object") counts = parsed;
44039
44172
  } catch {
44040
44173
  }
@@ -44049,8 +44182,8 @@ function recordChannelMistarget(agentDir, channel, input) {
44049
44182
  }
44050
44183
 
44051
44184
  // src/slack-reply-target-telemetry.ts
44052
- import { readFileSync as readFileSync15, writeFileSync as writeFileSync12 } from "fs";
44053
- import { join as join17 } from "path";
44185
+ import { readFileSync as readFileSync17, writeFileSync as writeFileSync12 } from "fs";
44186
+ import { join as join20 } from "path";
44054
44187
  var REPLY_TARGET_CLASSIFICATION_COUNTER_SUFFIX = "-reply-target-classifications.json";
44055
44188
  function pendingThreadsBucket(n) {
44056
44189
  if (n <= 0) return "0";
@@ -44083,10 +44216,10 @@ function classifyReplyTarget(input) {
44083
44216
  }
44084
44217
  function recordReplyTargetClassification(agentDir, channel, classification) {
44085
44218
  if (!agentDir) return;
44086
- const path = join17(agentDir, `${channel}${REPLY_TARGET_CLASSIFICATION_COUNTER_SUFFIX}`);
44219
+ const path = join20(agentDir, `${channel}${REPLY_TARGET_CLASSIFICATION_COUNTER_SUFFIX}`);
44087
44220
  let counts = {};
44088
44221
  try {
44089
- const parsed = JSON.parse(readFileSync15(path, "utf-8"));
44222
+ const parsed = JSON.parse(readFileSync17(path, "utf-8"));
44090
44223
  if (parsed && typeof parsed === "object") counts = parsed;
44091
44224
  } catch {
44092
44225
  }
@@ -44101,61 +44234,6 @@ function recordReplyTargetClassification(agentDir, channel, classification) {
44101
44234
  }
44102
44235
  }
44103
44236
 
44104
- // src/scheduled-turn-marker.ts
44105
- import { readFileSync as readFileSync16, unlinkSync as unlinkSync5 } from "fs";
44106
- import { join as join18 } from "path";
44107
- var SCHEDULED_TURN_MARKER_FILENAME2 = ".current-scheduled-turn.json";
44108
- var SCHEDULED_TURN_MAX_AGE_MS = 15 * 60 * 1e3;
44109
- function validateScheduledTurnMarker(raw, now, maxAgeMs = SCHEDULED_TURN_MAX_AGE_MS) {
44110
- if (!raw || typeof raw !== "object") return null;
44111
- const m = raw;
44112
- if (typeof m.ts !== "number" || !Number.isFinite(m.ts)) return null;
44113
- if (now - m.ts > maxAgeMs || now - m.ts < 0) return null;
44114
- const out = { ts: m.ts };
44115
- if (typeof m.task_id === "string" && m.task_id.length > 0) out.task_id = m.task_id;
44116
- const t = m.target;
44117
- if (t && typeof t === "object") {
44118
- const tc = t;
44119
- if (typeof tc.channel_id === "string" && tc.channel_id.length > 0) {
44120
- out.target = {
44121
- channel_id: tc.channel_id,
44122
- ...typeof tc.thread_ts === "string" && tc.thread_ts.length > 0 ? { thread_ts: tc.thread_ts } : {}
44123
- };
44124
- }
44125
- }
44126
- return out;
44127
- }
44128
- function resolveScheduledTurnDestination(marker, requested) {
44129
- if (marker.target) {
44130
- const channel = marker.target.channel_id;
44131
- const thread_ts = marker.target.thread_ts;
44132
- return {
44133
- channel,
44134
- thread_ts,
44135
- retargeted: channel !== requested.channel || thread_ts !== requested.thread_ts
44136
- };
44137
- }
44138
- return { channel: requested.channel, thread_ts: void 0, retargeted: Boolean(requested.thread_ts) };
44139
- }
44140
- function readScheduledTurnMarker(agentDir, now = Date.now()) {
44141
- if (!agentDir) return null;
44142
- try {
44143
- const raw = JSON.parse(
44144
- readFileSync16(join18(agentDir, SCHEDULED_TURN_MARKER_FILENAME2), "utf8")
44145
- );
44146
- return validateScheduledTurnMarker(raw, now);
44147
- } catch {
44148
- return null;
44149
- }
44150
- }
44151
- function clearScheduledTurnMarker(agentDir) {
44152
- if (!agentDir) return;
44153
- try {
44154
- unlinkSync5(join18(agentDir, SCHEDULED_TURN_MARKER_FILENAME2));
44155
- } catch {
44156
- }
44157
- }
44158
-
44159
44237
  // src/slack-reply-scheduled-priority.ts
44160
44238
  function scheduledDestOverridesNamedChannel(opts) {
44161
44239
  if (opts.inboundId || opts.enforceBound) return false;
@@ -45088,15 +45166,15 @@ function textMentionsBot(text, botId) {
45088
45166
  // src/mcp-spawn-lock.ts
45089
45167
  import {
45090
45168
  existsSync as existsSync9,
45091
- mkdirSync as mkdirSync8,
45092
- readFileSync as readFileSync17,
45169
+ mkdirSync as mkdirSync9,
45170
+ readFileSync as readFileSync18,
45093
45171
  renameSync as renameSync4,
45094
45172
  statSync as statSync4,
45095
45173
  unlinkSync as unlinkSync6,
45096
45174
  utimesSync,
45097
45175
  writeFileSync as writeFileSync13
45098
45176
  } from "fs";
45099
- import { join as join19 } from "path";
45177
+ import { join as join21 } from "path";
45100
45178
  var STALE_LOCK_MS = 9e4;
45101
45179
  var HEARTBEAT_INTERVAL_MS = 3e4;
45102
45180
  function defaultIsPidAlive(pid) {
@@ -45119,7 +45197,7 @@ function acquireMcpSpawnLock(args) {
45119
45197
  const nowMs = options.nowMs ?? (() => Date.now());
45120
45198
  const lockMtimeMs = options.lockMtimeMs ?? defaultLockMtimeMs;
45121
45199
  const staleMs = options.staleMs ?? STALE_LOCK_MS;
45122
- const path = join19(agentDir, basename2);
45200
+ const path = join21(agentDir, basename2);
45123
45201
  const existing = readLockHolder(path);
45124
45202
  if (existing) {
45125
45203
  if (existing.pid === selfPid) {
@@ -45133,7 +45211,7 @@ function acquireMcpSpawnLock(args) {
45133
45211
  }
45134
45212
  }
45135
45213
  }
45136
- mkdirSync8(agentDir, { recursive: true, mode: 448 });
45214
+ mkdirSync9(agentDir, { recursive: true, mode: 448 });
45137
45215
  const tmpPath = `${path}.${selfPid}.tmp`;
45138
45216
  const payload = { pid: selfPid, started_at: now() };
45139
45217
  writeFileSync13(tmpPath, JSON.stringify(payload), { mode: 384 });
@@ -45186,7 +45264,7 @@ function defaultLockMtimeMs(path) {
45186
45264
  function readLockHolder(path) {
45187
45265
  if (!existsSync9(path)) return null;
45188
45266
  try {
45189
- const raw = readFileSync17(path, "utf8");
45267
+ const raw = readFileSync18(path, "utf8");
45190
45268
  const parsed = JSON.parse(raw);
45191
45269
  const pid = typeof parsed.pid === "number" ? parsed.pid : Number(parsed.pid);
45192
45270
  if (!Number.isFinite(pid) || pid <= 0) return null;
@@ -45639,8 +45717,8 @@ var SLACK_TEAM_PEER_USER_IDS = parseTeamPeerUserIdsEnv(
45639
45717
  process.env.SLACK_TEAM_PEER_USER_IDS
45640
45718
  );
45641
45719
  var PEER_HINT_SEEN = /* @__PURE__ */ new Set();
45642
- var SLACK_AGENT_DIR = AGENT_CODE_NAME ? join20(homedir6(), ".augmented", AGENT_CODE_NAME) : null;
45643
- var SLACK_MCP_CONFIG_PATH = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, "project", ".mcp.json") : null;
45720
+ var SLACK_AGENT_DIR = AGENT_CODE_NAME ? join22(homedir7(), ".augmented", AGENT_CODE_NAME) : null;
45721
+ var SLACK_MCP_CONFIG_PATH = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, "project", ".mcp.json") : null;
45644
45722
  var liveAllowedUsersCache = null;
45645
45723
  function readLiveAllowedUsers() {
45646
45724
  if (!SLACK_MCP_CONFIG_PATH) return null;
@@ -45650,7 +45728,7 @@ function readLiveAllowedUsers() {
45650
45728
  return liveAllowedUsersCache.value;
45651
45729
  }
45652
45730
  const value = extractAllowedUsersFromMcpJson(
45653
- readFileSync18(SLACK_MCP_CONFIG_PATH, "utf-8")
45731
+ readFileSync19(SLACK_MCP_CONFIG_PATH, "utf-8")
45654
45732
  );
45655
45733
  if (value === null) return null;
45656
45734
  liveAllowedUsersCache = { mtimeMs, value };
@@ -45671,7 +45749,7 @@ function readLivePingAllowedUsers() {
45671
45749
  return livePingAllowedUsersCache.value;
45672
45750
  }
45673
45751
  const value = extractPingAllowedUsersFromMcpJson(
45674
- readFileSync18(SLACK_MCP_CONFIG_PATH, "utf-8")
45752
+ readFileSync19(SLACK_MCP_CONFIG_PATH, "utf-8")
45675
45753
  );
45676
45754
  if (value === null) return null;
45677
45755
  livePingAllowedUsersCache = { mtimeMs, value };
@@ -45683,18 +45761,18 @@ function readLivePingAllowedUsers() {
45683
45761
  function getEffectivePingAllowedUsers() {
45684
45762
  return readLivePingAllowedUsers() ?? PING_ALLOWED_USERS;
45685
45763
  }
45686
- var SLACK_PENDING_INBOUND_DIR = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, "slack-pending-inbound") : null;
45687
- var SLACK_PENDING_INBOUND_STALE_DIR = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, "slack-pending-inbound-stale") : null;
45688
- var SLACK_RESTART_CONTEXT_DIR = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, "slack-restart-context") : null;
45689
- var SLACK_RECOVERY_OUTBOX_DIR = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, "slack-recovery-outbox") : null;
45690
- var SLACK_RECOVERY_LEDGER_DIR = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, ".agt-slack-recovery-ledger") : null;
45691
- var SLACK_DELIVERY_LEDGER_DIR = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, ".agt-inbound-delivery-ledger") : null;
45764
+ var SLACK_PENDING_INBOUND_DIR = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, "slack-pending-inbound") : null;
45765
+ var SLACK_PENDING_INBOUND_STALE_DIR = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, "slack-pending-inbound-stale") : null;
45766
+ var SLACK_RESTART_CONTEXT_DIR = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, "slack-restart-context") : null;
45767
+ var SLACK_RECOVERY_OUTBOX_DIR = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, "slack-recovery-outbox") : null;
45768
+ var SLACK_RECOVERY_LEDGER_DIR = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, ".agt-slack-recovery-ledger") : null;
45769
+ var SLACK_DELIVERY_LEDGER_DIR = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, ".agt-inbound-delivery-ledger") : null;
45692
45770
  var slackInboundRegistry = createInboundRegistry();
45693
- var SLACK_RESTART_CONFIRM_FILE = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, "slack-restart-confirm.json") : null;
45694
- var SLACK_RECENT_DMS_FILE = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, "slack-recent-dms.json") : null;
45695
- var SLACK_CHANNEL_ADD_RESTART_FILE = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, "slack-channel-add-restart.json") : null;
45771
+ var SLACK_RESTART_CONFIRM_FILE = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, "slack-restart-confirm.json") : null;
45772
+ var SLACK_RECENT_DMS_FILE = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, "slack-recent-dms.json") : null;
45773
+ var SLACK_CHANNEL_ADD_RESTART_FILE = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, "slack-channel-add-restart.json") : null;
45696
45774
  var SLACK_MAX_RECOVERY_ATTEMPTS = 3;
45697
- var SLACK_AVATAR_MARKER_PATH = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, "slack-avatar-applied") : null;
45775
+ var SLACK_AVATAR_MARKER_PATH = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, "slack-avatar-applied") : null;
45698
45776
  function redactSlackId(id) {
45699
45777
  if (!id) return "<none>";
45700
45778
  return createHash3("sha256").update(id).digest("hex").slice(0, 8);
@@ -45705,7 +45783,7 @@ function safeSlackMarkerName(channel, threadTs, messageTs) {
45705
45783
  }
45706
45784
  function slackPendingInboundPath(channel, threadTs, messageTs) {
45707
45785
  if (!SLACK_PENDING_INBOUND_DIR) return null;
45708
- return join20(SLACK_PENDING_INBOUND_DIR, safeSlackMarkerName(channel, threadTs, messageTs));
45786
+ return join22(SLACK_PENDING_INBOUND_DIR, safeSlackMarkerName(channel, threadTs, messageTs));
45709
45787
  }
45710
45788
  function writeSlackPendingInboundMarker(channel, threadTs, messageTs, undeliverable = false, discretionary = false, payload) {
45711
45789
  const path = slackPendingInboundPath(channel, threadTs, messageTs);
@@ -45728,7 +45806,7 @@ function writeSlackPendingInboundMarker(channel, threadTs, messageTs, undelivera
45728
45806
  ...ingressOnlyThreads.isIngressOnly(channel, threadTs) ? { ingress_only: true } : {}
45729
45807
  };
45730
45808
  try {
45731
- mkdirSync9(SLACK_PENDING_INBOUND_DIR, { recursive: true, mode: 448 });
45809
+ mkdirSync10(SLACK_PENDING_INBOUND_DIR, { recursive: true, mode: 448 });
45732
45810
  writeFileSync14(path, JSON.stringify(marker), { mode: 384 });
45733
45811
  } catch (err) {
45734
45812
  process.stderr.write(
@@ -45763,7 +45841,7 @@ function markSlackMarkerPromisedInPlace(fullPath) {
45763
45841
  function markSlackMarkerEngagedInPlace(fullPath, opts) {
45764
45842
  let marker;
45765
45843
  try {
45766
- marker = JSON.parse(readFileSync18(fullPath, "utf-8"));
45844
+ marker = JSON.parse(readFileSync19(fullPath, "utf-8"));
45767
45845
  } catch {
45768
45846
  return false;
45769
45847
  }
@@ -45778,7 +45856,7 @@ function markSlackMarkerEngagedInPlace(fullPath, opts) {
45778
45856
  rewriteSlackMarkerInPlace(fullPath, marker);
45779
45857
  if (!opts.promise) return false;
45780
45858
  try {
45781
- const readBack = JSON.parse(readFileSync18(fullPath, "utf-8"));
45859
+ const readBack = JSON.parse(readFileSync19(fullPath, "utf-8"));
45782
45860
  return typeof readBack.promised_at === "string" && readBack.promised_at.length > 0;
45783
45861
  } catch {
45784
45862
  return false;
@@ -45789,7 +45867,7 @@ function attachSlackReplayPayload(channel, threadTs, messageTs, payload) {
45789
45867
  if (!path) return;
45790
45868
  let marker;
45791
45869
  try {
45792
- marker = JSON.parse(readFileSync18(path, "utf-8"));
45870
+ marker = JSON.parse(readFileSync19(path, "utf-8"));
45793
45871
  } catch {
45794
45872
  return;
45795
45873
  }
@@ -45800,7 +45878,7 @@ function readSlackPendingInboundMarker(channel, threadTs, messageTs) {
45800
45878
  const path = slackPendingInboundPath(channel, threadTs, messageTs);
45801
45879
  if (!path || !existsSync10(path)) return null;
45802
45880
  try {
45803
- return JSON.parse(readFileSync18(path, "utf-8"));
45881
+ return JSON.parse(readFileSync19(path, "utf-8"));
45804
45882
  } catch {
45805
45883
  return null;
45806
45884
  }
@@ -45850,7 +45928,7 @@ function slackConversationReplayFacts(channel, threadTs) {
45850
45928
  threadTs,
45851
45929
  (fullPath) => {
45852
45930
  try {
45853
- const marker = JSON.parse(readFileSync18(fullPath, "utf-8"));
45931
+ const marker = JSON.parse(readFileSync19(fullPath, "utf-8"));
45854
45932
  found.push({ hasPayload: Boolean(marker.payload), discretionary: marker.discretionary });
45855
45933
  } catch {
45856
45934
  found.push({ hasPayload: false });
@@ -45983,7 +46061,7 @@ function scheduleBusyAck(channel, threadTs, messageTs, isThreadReply, arrivedWhi
45983
46061
  let paneLogFreshAgeMs = null;
45984
46062
  if (SLACK_AGENT_DIR) {
45985
46063
  try {
45986
- const paneMtimeMs = statSync5(join20(SLACK_AGENT_DIR, "pane.log")).mtimeMs;
46064
+ const paneMtimeMs = statSync5(join22(SLACK_AGENT_DIR, "pane.log")).mtimeMs;
45987
46065
  paneLogFreshAgeMs = Math.max(0, Date.now() - paneMtimeMs);
45988
46066
  } catch {
45989
46067
  }
@@ -46019,7 +46097,7 @@ function __resetSlackBusyAckNoticeThrottle() {
46019
46097
  function clearSlackMarkerFileWithHeal(fullPath) {
46020
46098
  let marker = null;
46021
46099
  try {
46022
- marker = JSON.parse(readFileSync18(fullPath, "utf-8"));
46100
+ marker = JSON.parse(readFileSync19(fullPath, "utf-8"));
46023
46101
  } catch {
46024
46102
  }
46025
46103
  if (marker?.channel) {
@@ -46051,7 +46129,7 @@ var slackPromiseStampOutcome = { attempted: 0, stamped: 0 };
46051
46129
  function healThenEngageSlackMarker(fullPath, opts) {
46052
46130
  let marker = null;
46053
46131
  try {
46054
- marker = JSON.parse(readFileSync18(fullPath, "utf-8"));
46132
+ marker = JSON.parse(readFileSync19(fullPath, "utf-8"));
46055
46133
  } catch {
46056
46134
  return false;
46057
46135
  }
@@ -46149,7 +46227,7 @@ function readSlackThreadMarkerState(channel, threadTs) {
46149
46227
  threadTs,
46150
46228
  (fullPath) => {
46151
46229
  try {
46152
- const m = JSON.parse(readFileSync18(fullPath, "utf-8"));
46230
+ const m = JSON.parse(readFileSync19(fullPath, "utf-8"));
46153
46231
  markers.push({ ingress_only: m.ingress_only });
46154
46232
  } catch {
46155
46233
  markers.push({});
@@ -46167,10 +46245,10 @@ function readSlackThreadMarkerState(channel, threadTs) {
46167
46245
  async function processSlackRecoveryOutboxFile(filename) {
46168
46246
  if (!SLACK_RECOVERY_OUTBOX_DIR) return;
46169
46247
  if (filename.endsWith(".poison.json") || filename.endsWith(".tmp")) return;
46170
- const fullPath = join20(SLACK_RECOVERY_OUTBOX_DIR, filename);
46248
+ const fullPath = join22(SLACK_RECOVERY_OUTBOX_DIR, filename);
46171
46249
  let payload;
46172
46250
  try {
46173
- payload = JSON.parse(readFileSync18(fullPath, "utf-8"));
46251
+ payload = JSON.parse(readFileSync19(fullPath, "utf-8"));
46174
46252
  } catch (err) {
46175
46253
  process.stderr.write(
46176
46254
  `slack-channel(${AGENT_CODE_NAME}): recovery outbox parse failed (${filename}): ${err.message}
@@ -46300,7 +46378,7 @@ async function processSlackRecoveryOutboxFile(filename) {
46300
46378
  const next = slackNextRetryName(filename);
46301
46379
  if (next) {
46302
46380
  try {
46303
- renameSync5(fullPath, join20(SLACK_RECOVERY_OUTBOX_DIR, next.next));
46381
+ renameSync5(fullPath, join22(SLACK_RECOVERY_OUTBOX_DIR, next.next));
46304
46382
  if (next.attempt >= SLACK_MAX_RECOVERY_ATTEMPTS) {
46305
46383
  process.stderr.write(
46306
46384
  `slack-channel(${AGENT_CODE_NAME}): ghost-reply recovery exhausted retries \u2014 moved to ${next.next}
@@ -46340,7 +46418,7 @@ function scanSlackRecoveryRetries() {
46340
46418
  if (!f.includes(".retry-") || f.endsWith(".poison.json")) continue;
46341
46419
  let mtimeMs;
46342
46420
  try {
46343
- mtimeMs = statSync5(join20(SLACK_RECOVERY_OUTBOX_DIR, f)).mtimeMs;
46421
+ mtimeMs = statSync5(join22(SLACK_RECOVERY_OUTBOX_DIR, f)).mtimeMs;
46344
46422
  } catch {
46345
46423
  continue;
46346
46424
  }
@@ -46352,7 +46430,7 @@ function scanSlackRecoveryRetries() {
46352
46430
  function startSlackRecoveryOutboxWatcher() {
46353
46431
  if (!SLACK_RECOVERY_OUTBOX_DIR) return;
46354
46432
  try {
46355
- mkdirSync9(SLACK_RECOVERY_OUTBOX_DIR, { recursive: true, mode: 448 });
46433
+ mkdirSync10(SLACK_RECOVERY_OUTBOX_DIR, { recursive: true, mode: 448 });
46356
46434
  } catch (err) {
46357
46435
  process.stderr.write(
46358
46436
  `slack-channel(${AGENT_CODE_NAME}): recovery outbox mkdir failed: ${err.message}
@@ -46370,7 +46448,7 @@ function startSlackRecoveryOutboxWatcher() {
46370
46448
  const watcher = watch(SLACK_RECOVERY_OUTBOX_DIR, (event, filename) => {
46371
46449
  if (event !== "rename" || !filename) return;
46372
46450
  if (!isFirstAttemptSlackOutboxFile(filename)) return;
46373
- if (existsSync10(join20(SLACK_RECOVERY_OUTBOX_DIR, filename))) {
46451
+ if (existsSync10(join22(SLACK_RECOVERY_OUTBOX_DIR, filename))) {
46374
46452
  void processSlackRecoveryOutboxFile(filename);
46375
46453
  }
46376
46454
  });
@@ -46385,7 +46463,7 @@ function startSlackRecoveryOutboxWatcher() {
46385
46463
  retryTimer.unref?.();
46386
46464
  }
46387
46465
  startSlackRecoveryOutboxWatcher();
46388
- var SLACK_NOTICE_OUTBOX_DIR = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, "slack-notice-outbox") : null;
46466
+ var SLACK_NOTICE_OUTBOX_DIR = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, "slack-notice-outbox") : null;
46389
46467
  var SLACK_NOTICE_MAX_AGE_MS = 9e4;
46390
46468
  var SLACK_NOTICE_INFLIGHT = /* @__PURE__ */ new Set();
46391
46469
  async function processSlackNoticeOutboxFile(filename) {
@@ -46393,7 +46471,7 @@ async function processSlackNoticeOutboxFile(filename) {
46393
46471
  if (filename.startsWith(".") || filename.endsWith(".tmp") || !filename.endsWith(".json")) return;
46394
46472
  if (SLACK_NOTICE_INFLIGHT.has(filename)) return;
46395
46473
  SLACK_NOTICE_INFLIGHT.add(filename);
46396
- const fullPath = join20(SLACK_NOTICE_OUTBOX_DIR, filename);
46474
+ const fullPath = join22(SLACK_NOTICE_OUTBOX_DIR, filename);
46397
46475
  try {
46398
46476
  let mtimeMs;
46399
46477
  try {
@@ -46410,7 +46488,7 @@ async function processSlackNoticeOutboxFile(filename) {
46410
46488
  }
46411
46489
  let payload;
46412
46490
  try {
46413
- const parsed = JSON.parse(readFileSync18(fullPath, "utf-8"));
46491
+ const parsed = JSON.parse(readFileSync19(fullPath, "utf-8"));
46414
46492
  if (!parsed || typeof parsed !== "object") throw new Error("not an object");
46415
46493
  payload = parsed;
46416
46494
  } catch {
@@ -46484,7 +46562,7 @@ async function processSlackNoticeOutboxFile(filename) {
46484
46562
  function startSlackNoticeOutboxWatcher() {
46485
46563
  if (!SLACK_NOTICE_OUTBOX_DIR) return;
46486
46564
  try {
46487
- mkdirSync9(SLACK_NOTICE_OUTBOX_DIR, { recursive: true, mode: 448 });
46565
+ mkdirSync10(SLACK_NOTICE_OUTBOX_DIR, { recursive: true, mode: 448 });
46488
46566
  } catch (err) {
46489
46567
  process.stderr.write(
46490
46568
  `slack-channel(${AGENT_CODE_NAME}): notice outbox mkdir failed: ${err.message}
@@ -46499,7 +46577,7 @@ function startSlackNoticeOutboxWatcher() {
46499
46577
  try {
46500
46578
  const watcher = watch(SLACK_NOTICE_OUTBOX_DIR, (event, filename) => {
46501
46579
  if (event !== "rename" || !filename) return;
46502
- if (existsSync10(join20(SLACK_NOTICE_OUTBOX_DIR, filename))) {
46580
+ if (existsSync10(join22(SLACK_NOTICE_OUTBOX_DIR, filename))) {
46503
46581
  void processSlackNoticeOutboxFile(filename);
46504
46582
  }
46505
46583
  });
@@ -46520,11 +46598,11 @@ function trackPendingMessage(channel, threadTs, messageTs, undeliverable = false
46520
46598
  function deadLetterSlackMarker(fullPath, filename) {
46521
46599
  if (!SLACK_PENDING_INBOUND_STALE_DIR) return false;
46522
46600
  try {
46523
- mkdirSync9(SLACK_PENDING_INBOUND_STALE_DIR, { recursive: true, mode: 448 });
46601
+ mkdirSync10(SLACK_PENDING_INBOUND_STALE_DIR, { recursive: true, mode: 448 });
46524
46602
  } catch {
46525
46603
  return false;
46526
46604
  }
46527
- const target = join20(SLACK_PENDING_INBOUND_STALE_DIR, filename);
46605
+ const target = join22(SLACK_PENDING_INBOUND_STALE_DIR, filename);
46528
46606
  try {
46529
46607
  if (!existsSync10(target)) {
46530
46608
  renameSync5(fullPath, target);
@@ -46566,10 +46644,10 @@ function sweepSlackStaleMarkers(thresholdMs) {
46566
46644
  capped = true;
46567
46645
  break;
46568
46646
  }
46569
- const fullPath = join20(SLACK_PENDING_INBOUND_DIR, filename);
46647
+ const fullPath = join22(SLACK_PENDING_INBOUND_DIR, filename);
46570
46648
  let marker;
46571
46649
  try {
46572
- marker = JSON.parse(readFileSync18(fullPath, "utf-8"));
46650
+ marker = JSON.parse(readFileSync19(fullPath, "utf-8"));
46573
46651
  } catch (err) {
46574
46652
  process.stderr.write(
46575
46653
  `slack-channel(${AGENT_CODE_NAME}): stale-marker parse failed for ${redactSlackId(filename)}: ${err.message}
@@ -46643,13 +46721,13 @@ var slackOrphanSweepTimer = setInterval(() => {
46643
46721
  checkSlackWatchdogGiveUpNotice();
46644
46722
  }, orphanSweepIntervalMs());
46645
46723
  slackOrphanSweepTimer.unref?.();
46646
- var SLACK_PROGRESS_HEARTBEAT_PATH = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, "channel-progress-heartbeat.json") : null;
46724
+ var SLACK_PROGRESS_HEARTBEAT_PATH = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, "channel-progress-heartbeat.json") : null;
46647
46725
  var slackTrackedProgress = null;
46648
46726
  var slackProgressTickRunning = false;
46649
46727
  function readSlackProgressHeartbeat() {
46650
46728
  if (!SLACK_PROGRESS_HEARTBEAT_PATH || !existsSync10(SLACK_PROGRESS_HEARTBEAT_PATH)) return null;
46651
46729
  try {
46652
- return parseProgressHeartbeat(readFileSync18(SLACK_PROGRESS_HEARTBEAT_PATH, "utf-8"));
46730
+ return parseProgressHeartbeat(readFileSync19(SLACK_PROGRESS_HEARTBEAT_PATH, "utf-8"));
46653
46731
  } catch {
46654
46732
  return null;
46655
46733
  }
@@ -46676,7 +46754,7 @@ function findSlackProgressTarget() {
46676
46754
  if (!name.endsWith(".json")) continue;
46677
46755
  let m;
46678
46756
  try {
46679
- m = JSON.parse(readFileSync18(join20(SLACK_PENDING_INBOUND_DIR, name), "utf-8"));
46757
+ m = JSON.parse(readFileSync19(join22(SLACK_PENDING_INBOUND_DIR, name), "utf-8"));
46680
46758
  } catch {
46681
46759
  continue;
46682
46760
  }
@@ -46827,7 +46905,7 @@ function listPendingSlackConversations() {
46827
46905
  if (!name.endsWith(".json")) continue;
46828
46906
  try {
46829
46907
  const marker = JSON.parse(
46830
- readFileSync18(join20(SLACK_PENDING_INBOUND_DIR, name), "utf8")
46908
+ readFileSync19(join22(SLACK_PENDING_INBOUND_DIR, name), "utf8")
46831
46909
  );
46832
46910
  if (typeof marker.channel !== "string" || !marker.channel) continue;
46833
46911
  if (typeof marker.thread_ts !== "string" || !marker.thread_ts) continue;
@@ -46965,7 +47043,7 @@ function postSlackWatchdogGiveUpNotice(channel, threadTs, isThreadReply, reason,
46965
47043
  }
46966
47044
  function checkSlackWatchdogGiveUpNotice() {
46967
47045
  if (!SLACK_AGENT_DIR) return;
46968
- const signal = readGiveUpSignal(join20(SLACK_AGENT_DIR, GIVE_UP_SIGNAL_FILENAME));
47046
+ const signal = readGiveUpSignal(join22(SLACK_AGENT_DIR, GIVE_UP_SIGNAL_FILENAME));
46969
47047
  const signalAtMs = signal?.atMs ?? null;
46970
47048
  const act = decideGiveUpNotice({
46971
47049
  signalAtMs,
@@ -46998,7 +47076,7 @@ function readRestartTopicForMarker(filename, channel, threadTs) {
46998
47076
  if (!SLACK_RESTART_CONTEXT_DIR) return null;
46999
47077
  let raw;
47000
47078
  try {
47001
- raw = readFileSync18(join20(SLACK_RESTART_CONTEXT_DIR, filename), "utf-8");
47079
+ raw = readFileSync19(join22(SLACK_RESTART_CONTEXT_DIR, filename), "utf-8");
47002
47080
  } catch {
47003
47081
  return null;
47004
47082
  }
@@ -47007,7 +47085,7 @@ function readRestartTopicForMarker(filename, channel, threadTs) {
47007
47085
  function removeRestartContextHint(filename) {
47008
47086
  if (!SLACK_RESTART_CONTEXT_DIR) return;
47009
47087
  try {
47010
- unlinkSync7(join20(SLACK_RESTART_CONTEXT_DIR, filename));
47088
+ unlinkSync7(join22(SLACK_RESTART_CONTEXT_DIR, filename));
47011
47089
  } catch {
47012
47090
  }
47013
47091
  }
@@ -47022,7 +47100,7 @@ function clearAllRestartContextHints() {
47022
47100
  for (const name of names) {
47023
47101
  if (!name.endsWith(".json")) continue;
47024
47102
  try {
47025
- unlinkSync7(join20(SLACK_RESTART_CONTEXT_DIR, name));
47103
+ unlinkSync7(join22(SLACK_RESTART_CONTEXT_DIR, name));
47026
47104
  } catch {
47027
47105
  }
47028
47106
  }
@@ -47049,10 +47127,10 @@ async function notifyStrandedInboundsOnFirstConnect() {
47049
47127
  let notified = 0;
47050
47128
  for (const filename of filenames) {
47051
47129
  if (!filename.endsWith(".json")) continue;
47052
- const fullPath = join20(SLACK_PENDING_INBOUND_DIR, filename);
47130
+ const fullPath = join22(SLACK_PENDING_INBOUND_DIR, filename);
47053
47131
  let marker;
47054
47132
  try {
47055
- marker = JSON.parse(readFileSync18(fullPath, "utf-8"));
47133
+ marker = JSON.parse(readFileSync19(fullPath, "utf-8"));
47056
47134
  } catch {
47057
47135
  continue;
47058
47136
  }
@@ -47226,7 +47304,7 @@ function noteThreadActivityByMessageTs(channel, messageTs) {
47226
47304
  markSeenAllSlackPendingMarkersForThread2(channel, messageTs);
47227
47305
  markSeenSlackPendingMarkerByMessageTs2(channel, messageTs);
47228
47306
  }
47229
- var RESTART_FLAGS_DIR = join20(homedir6(), ".augmented", "restart-flags");
47307
+ var RESTART_FLAGS_DIR = join22(homedir7(), ".augmented", "restart-flags");
47230
47308
  function actuateHostRestartSlack() {
47231
47309
  return actuateHostRestart({
47232
47310
  agtHost: AGT_HOST,
@@ -47828,9 +47906,9 @@ async function handleSlashCommandEnvelope(payload) {
47828
47906
  } else {
47829
47907
  writeSlackRestartConfirm(confirmReply, payload.user_name);
47830
47908
  if (!existsSync10(RESTART_FLAGS_DIR)) {
47831
- mkdirSync9(RESTART_FLAGS_DIR, { recursive: true });
47909
+ mkdirSync10(RESTART_FLAGS_DIR, { recursive: true });
47832
47910
  }
47833
- const flagPath = join20(RESTART_FLAGS_DIR, `${codeName}.flag`);
47911
+ const flagPath = join22(RESTART_FLAGS_DIR, `${codeName}.flag`);
47834
47912
  const flag = {
47835
47913
  codeName,
47836
47914
  source: "slack",
@@ -47971,9 +48049,9 @@ async function handleRestartCommand(opts) {
47971
48049
  } else {
47972
48050
  writeSlackRestartConfirm(confirmReply, opts.requesterName);
47973
48051
  if (!existsSync10(RESTART_FLAGS_DIR)) {
47974
- mkdirSync9(RESTART_FLAGS_DIR, { recursive: true });
48052
+ mkdirSync10(RESTART_FLAGS_DIR, { recursive: true });
47975
48053
  }
47976
- const flagPath = join20(RESTART_FLAGS_DIR, `${codeName}.flag`);
48054
+ const flagPath = join22(RESTART_FLAGS_DIR, `${codeName}.flag`);
47977
48055
  const flag = {
47978
48056
  codeName,
47979
48057
  source: "slack",
@@ -48095,7 +48173,7 @@ var SLACK_HOT_THREAD_WINDOW_MS = parseHotThreadWindowMs(
48095
48173
  );
48096
48174
  function resolveThreadStorePath() {
48097
48175
  if (!AGENT_CODE_NAME) return null;
48098
- return join20(homedir6(), ".augmented", AGENT_CODE_NAME, "slack-tracked-threads.json");
48176
+ return join22(homedir7(), ".augmented", AGENT_CODE_NAME, "slack-tracked-threads.json");
48099
48177
  }
48100
48178
  function parseTtlDays(raw) {
48101
48179
  if (!raw) return void 0;
@@ -48134,9 +48212,9 @@ if (!BOT_TOKEN || !APP_TOKEN) {
48134
48212
  var slackStderrLogStream = null;
48135
48213
  if (AGENT_CODE_NAME) {
48136
48214
  try {
48137
- const logDir = join20(homedir6(), ".augmented", AGENT_CODE_NAME);
48138
- mkdirSync9(logDir, { recursive: true });
48139
- slackStderrLogStream = createWriteStream(join20(logDir, "slack-channel-stderr.log"), {
48215
+ const logDir = join22(homedir7(), ".augmented", AGENT_CODE_NAME);
48216
+ mkdirSync10(logDir, { recursive: true });
48217
+ slackStderrLogStream = createWriteStream(join22(logDir, "slack-channel-stderr.log"), {
48140
48218
  flags: "a",
48141
48219
  mode: 384
48142
48220
  });
@@ -49120,7 +49198,7 @@ ${result.formatted}` : "No messages in range, or the bot is not a member of this
49120
49198
  isError: true
49121
49199
  };
49122
49200
  }
49123
- const allowedRoot = resolve2(homedir6(), ".augmented", AGENT_CODE_NAME, "project") + "/";
49201
+ const allowedRoot = resolve2(homedir7(), ".augmented", AGENT_CODE_NAME, "project") + "/";
49124
49202
  const resolvedPath = resolve2(path);
49125
49203
  if (!resolvedPath.startsWith(allowedRoot)) {
49126
49204
  return {
@@ -49142,7 +49220,7 @@ ${result.formatted}` : "No messages in range, or the bot is not a member of this
49142
49220
  };
49143
49221
  }
49144
49222
  size = stat2.size;
49145
- bytes = readFileSync18(resolvedPath);
49223
+ bytes = readFileSync19(resolvedPath);
49146
49224
  } catch (err) {
49147
49225
  return {
49148
49226
  content: [{ type: "text", text: `Failed to read file: ${err.message}` }],
@@ -49810,7 +49888,7 @@ function isDownloadableFileId(fileId, channel) {
49810
49888
  }
49811
49889
  function redactAugmentedPaths2(msg) {
49812
49890
  return msg.replaceAll(
49813
- new RegExp(`${homedir6().replace(/[.*+?^${}()|[\\]\\\\]/g, "\\\\$&")}/\\.augmented/[^\\s'"\`]*`, "g"),
49891
+ new RegExp(`${homedir7().replace(/[.*+?^${}()|[\\]\\\\]/g, "\\\\$&")}/\\.augmented/[^\\s'"\`]*`, "g"),
49814
49892
  "<augmented-path>"
49815
49893
  );
49816
49894
  }
@@ -49868,7 +49946,7 @@ async function downloadSlackFile(fileId, codeName) {
49868
49946
  if (!isPathInside(savedPath, dir)) {
49869
49947
  throw new Error(`refusing to write ${savedPath} outside ${dir}`);
49870
49948
  }
49871
- mkdirSync9(dir, { recursive: true });
49949
+ mkdirSync10(dir, { recursive: true });
49872
49950
  writeFileSync14(savedPath, bytes, { mode: 384 });
49873
49951
  try {
49874
49952
  chmodSync(savedPath, 384);
@@ -49941,7 +50019,7 @@ async function replayPendingSlackMarkers() {
49941
50019
  let paneFreshAgeMs = null;
49942
50020
  if (SLACK_AGENT_DIR) {
49943
50021
  try {
49944
- paneFreshAgeMs = Math.max(0, now - statSync5(join20(SLACK_AGENT_DIR, "pane.log")).mtimeMs);
50022
+ paneFreshAgeMs = Math.max(0, now - statSync5(join22(SLACK_AGENT_DIR, "pane.log")).mtimeMs);
49945
50023
  } catch {
49946
50024
  }
49947
50025
  }
@@ -49949,10 +50027,10 @@ async function replayPendingSlackMarkers() {
49949
50027
  const entries = [];
49950
50028
  for (const name of filenames) {
49951
50029
  if (!name.endsWith(".json") || name.endsWith(".tmp")) continue;
49952
- const fullPath = join20(SLACK_PENDING_INBOUND_DIR, name);
50030
+ const fullPath = join22(SLACK_PENDING_INBOUND_DIR, name);
49953
50031
  let marker;
49954
50032
  try {
49955
- marker = JSON.parse(readFileSync18(fullPath, "utf-8"));
50033
+ marker = JSON.parse(readFileSync19(fullPath, "utf-8"));
49956
50034
  } catch {
49957
50035
  continue;
49958
50036
  }
@@ -49986,6 +50064,7 @@ async function replayPendingSlackMarkers() {
49986
50064
  ...payload,
49987
50065
  meta: { ...payload.meta, replayed: "true" }
49988
50066
  };
50067
+ writeUnattributedTurnMarker("slack");
49989
50068
  try {
49990
50069
  await mcp.notification({
49991
50070
  method: "notifications/claude/channel",
@@ -50094,12 +50173,12 @@ function armOpenWatchdog(ws) {
50094
50173
  function socketDownForMs() {
50095
50174
  return reconnectScheduler.downForMs(isSocketConnected());
50096
50175
  }
50097
- var SLACK_SOCKET_STATE_PATH = SLACK_AGENT_DIR ? join20(SLACK_AGENT_DIR, SLACK_SOCKET_STATE_FILENAME) : null;
50176
+ var SLACK_SOCKET_STATE_PATH = SLACK_AGENT_DIR ? join22(SLACK_AGENT_DIR, SLACK_SOCKET_STATE_FILENAME) : null;
50098
50177
  function publishSocketState() {
50099
50178
  if (!SLACK_SOCKET_STATE_PATH || !SLACK_AGENT_DIR) return;
50100
50179
  const tmp = `${SLACK_SOCKET_STATE_PATH}.${process.pid}.tmp`;
50101
50180
  try {
50102
- mkdirSync9(SLACK_AGENT_DIR, { recursive: true, mode: 448 });
50181
+ mkdirSync10(SLACK_AGENT_DIR, { recursive: true, mode: 448 });
50103
50182
  writeFileSync14(
50104
50183
  tmp,
50105
50184
  serializeSlackSocketState({
@@ -50701,7 +50780,7 @@ async function connectSocketMode() {
50701
50780
  let paneLogFreshAgeMs = null;
50702
50781
  if (SLACK_AGENT_DIR) {
50703
50782
  try {
50704
- const paneMtimeMs = statSync5(join20(SLACK_AGENT_DIR, "pane.log")).mtimeMs;
50783
+ const paneMtimeMs = statSync5(join22(SLACK_AGENT_DIR, "pane.log")).mtimeMs;
50705
50784
  paneLogFreshAgeMs = Math.max(0, Date.now() - paneMtimeMs);
50706
50785
  } catch {
50707
50786
  }
@@ -50871,9 +50950,15 @@ async function connectSocketMode() {
50871
50950
  channel: "slack",
50872
50951
  sender_id: evt.user,
50873
50952
  sender_name: userName,
50874
- channel_ref: threadTs
50953
+ channel_ref: threadTs,
50954
+ // ENG-11348: only a 1:1 IM (`D…`) is one-to-one; a channel or group DM is not.
50955
+ chat_kind: isSlackDirectMessage(channel) ? "direct" : "group",
50956
+ // ENG-11348: the server verifies the asker with Slack using this.
50957
+ chat_id: channel
50875
50958
  });
50876
50959
  clearScheduledTurnMarker(SLACK_AGENT_DIR);
50960
+ } else {
50961
+ writeUnattributedTurnMarker("slack");
50877
50962
  }
50878
50963
  const dispatchedAtMs = Date.now();
50879
50964
  await mcp.notification({