jj-octo 0.9.2 → 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.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/dist/jj-octo.js +301 -124
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -28,7 +28,7 @@ mise use --global github:kkom/jj-octo@X.Y.Z
28
28
 
29
29
  Then run `jj-octo init` once in each checkout. It makes the checkout a jj repository colocated with git, makes GitHub's default branch `trunk()`, and sets the `jj gh` alias.
30
30
 
31
- Run `jj-octo init` again after upgrading jj-octo, to set up what the new version needs. `jj-octo doctor` reports what isn't set up, and changes nothing.
31
+ `init` records its version in the repository's jj config, as `jj-octo.set-up-version`. Every other command except `doctor` runs `init` first where an older version is recorded, or none is. So after an upgrade, the first command sets up what the new version needs. `jj-octo doctor` reports what isn't set up, and changes nothing.
32
32
 
33
33
  ## GitHub access
34
34
 
package/dist/jj-octo.js CHANGED
@@ -1394,6 +1394,7 @@ var succeed = (success) => new SuccessImpl(success);
1394
1394
  function make2(compare) {
1395
1395
  return (self, that) => self === that ? 0 : compare(self, that);
1396
1396
  }
1397
+ var String2 = /* @__PURE__ */ make2((self, that) => self < that ? -1 : 1);
1397
1398
  var Number2 = /* @__PURE__ */ make2((self, that) => {
1398
1399
  if (globalThis.Number.isNaN(self) && globalThis.Number.isNaN(that))
1399
1400
  return 0;
@@ -1404,6 +1405,7 @@ var Number2 = /* @__PURE__ */ make2((self, that) => {
1404
1405
  return self < that ? -1 : 1;
1405
1406
  });
1406
1407
  var mapInput = /* @__PURE__ */ dual(2, (self, f) => make2((b1, b2) => self(f(b1), f(b2))));
1408
+ var isLessThan = (O) => dual(2, (self, that) => O(self, that) === -1);
1407
1409
  var isGreaterThan = (O) => dual(2, (self, that) => O(self, that) === 1);
1408
1410
 
1409
1411
  // node_modules/effect/dist/Option.js
@@ -1669,11 +1671,19 @@ var try_ = (evaluate) => {
1669
1671
  var isResult2 = isResult;
1670
1672
  var isFailure2 = isFailure;
1671
1673
  var isSuccess2 = isSuccess;
1674
+ var mapError = /* @__PURE__ */ dual(2, (self, f) => isFailure2(self) ? fail2(f(self.failure)) : self);
1672
1675
  var map2 = /* @__PURE__ */ dual(2, (self, f) => isSuccess2(self) ? succeed2(f(self.success)) : self);
1673
1676
  var match2 = /* @__PURE__ */ dual(2, (self, {
1674
1677
  onFailure,
1675
1678
  onSuccess
1676
1679
  }) => isFailure2(self) ? onFailure(self.failure) : onSuccess(self.success));
1680
+ var getOrThrowWith = /* @__PURE__ */ dual(2, (self, onFailure) => {
1681
+ if (isSuccess2(self)) {
1682
+ return self.success;
1683
+ }
1684
+ throw onFailure(self.failure);
1685
+ });
1686
+ var getOrThrow = /* @__PURE__ */ getOrThrowWith(identity);
1677
1687
  var all = (input) => {
1678
1688
  if (Symbol.iterator in input) {
1679
1689
  const out = [];
@@ -6827,7 +6837,7 @@ function transformOptionalEffect(f) {
6827
6837
  transform: f
6828
6838
  });
6829
6839
  }
6830
- function String2() {
6840
+ function String3() {
6831
6841
  return transform(globalThis.String);
6832
6842
  }
6833
6843
  function Number4() {
@@ -6899,7 +6909,7 @@ var passthrough_2 = /* @__PURE__ */ new Transformation(/* @__PURE__ */ passthrou
6899
6909
  function passthrough3() {
6900
6910
  return passthrough_2;
6901
6911
  }
6902
- var numberFromString = /* @__PURE__ */ new Transformation(/* @__PURE__ */ Number4(), /* @__PURE__ */ String2());
6912
+ var numberFromString = /* @__PURE__ */ new Transformation(/* @__PURE__ */ Number4(), /* @__PURE__ */ String3());
6903
6913
  var isJsonError = (input) => isObject(input) && typeof input["message"] === "string";
6904
6914
  var decodeJsonError = (input) => {
6905
6915
  const hasCause = Object.hasOwn(input, "cause");
@@ -7124,7 +7134,7 @@ function literalToString(ast) {
7124
7134
  const literalAsString = globalThis.String(ast.literal);
7125
7135
  return replaceEncoding(ast, [new Link(new Literal(literalAsString), new Transformation(transform(() => ast.literal), transform(() => literalAsString)))]);
7126
7136
  }
7127
- var String3 = class extends ASTNodeImpl {
7137
+ var String4 = class extends ASTNodeImpl {
7128
7138
  _tag = "String";
7129
7139
  getParser() {
7130
7140
  return fromRefinement(this, isString);
@@ -7137,7 +7147,7 @@ var String3 = class extends ASTNodeImpl {
7137
7147
  return "string";
7138
7148
  }
7139
7149
  };
7140
- var string2 = /* @__PURE__ */ new String3;
7150
+ var string2 = /* @__PURE__ */ new String4;
7141
7151
  var Number5 = class extends ASTNodeImpl {
7142
7152
  _tag = "Number";
7143
7153
  getParser() {
@@ -11488,7 +11498,7 @@ function toCodecStringTreeASTStep(ast, recur, onMissingAnnotation) {
11488
11498
  return ast;
11489
11499
  }
11490
11500
  var nullToString = /* @__PURE__ */ new Link(/* @__PURE__ */ new Literal("null"), /* @__PURE__ */ new Transformation(/* @__PURE__ */ transform(() => null), /* @__PURE__ */ transform(() => "null")));
11491
- var booleanToString = /* @__PURE__ */ new Link(/* @__PURE__ */ new Union([/* @__PURE__ */ new Literal("true"), /* @__PURE__ */ new Literal("false")]), /* @__PURE__ */ new Transformation(/* @__PURE__ */ transform((s) => s === "true"), /* @__PURE__ */ String2()));
11501
+ var booleanToString = /* @__PURE__ */ new Link(/* @__PURE__ */ new Union([/* @__PURE__ */ new Literal("true"), /* @__PURE__ */ new Literal("false")]), /* @__PURE__ */ new Transformation(/* @__PURE__ */ transform((s) => s === "true"), /* @__PURE__ */ String3()));
11492
11502
  var arrayFromSingleTransformation = /* @__PURE__ */ new Transformation(/* @__PURE__ */ transform((input) => typeof input === "string" ? [input] : input), /* @__PURE__ */ passthrough2());
11493
11503
  var isCodecArrayFromSingleLink = (link) => link.transformation === arrayFromSingleTransformation;
11494
11504
  var toCodecStringTreeAST = /* @__PURE__ */ applyToSelfOrLastLinkEncodingIdempotent((ast) => {
@@ -11511,8 +11521,150 @@ var lambda = (f) => f;
11511
11521
  // node_modules/effect/dist/internal/schemaError.js
11512
11522
  var SchemaErrorTypeId = "~effect/Schema/SchemaError";
11513
11523
 
11524
+ // node_modules/effect/dist/SemVer.js
11525
+ var TypeId29 = "~effect/SemVer";
11526
+ var SemVerErrorTypeId = "~effect/SemVer/SemVerError";
11527
+
11528
+ class SemVerError extends (/* @__PURE__ */ TaggedError2("SemVerError")) {
11529
+ [SemVerErrorTypeId] = SemVerErrorTypeId;
11530
+ }
11531
+ var isSemVerError = (u) => hasProperty(u, SemVerErrorTypeId);
11532
+ var invalid4 = (message) => {
11533
+ throw new SemVerError({
11534
+ message
11535
+ });
11536
+ };
11537
+ var attempt = (evaluate) => try_({
11538
+ try: evaluate,
11539
+ catch: (error) => {
11540
+ if (!isSemVerError(error))
11541
+ throw error;
11542
+ return error;
11543
+ }
11544
+ });
11545
+ var tryParse = (label, input, parse) => mapError(attempt(() => parse(input)), (error) => new SemVerError({
11546
+ message: `Invalid ${label} ${JSON.stringify(input)}: ${error.message}`,
11547
+ input
11548
+ }));
11549
+ var numericPattern = /^(?:0|[1-9]\d*)$/;
11550
+ var digitsPattern = /^\d+$/;
11551
+ var identifierPattern = /^[0-9A-Za-z-]+$/;
11552
+ var checkComponent = (value, label) => {
11553
+ if (!Number.isSafeInteger(value) || value < 0) {
11554
+ return invalid4(`${label} must be a non-negative safe integer, received ${value}`);
11555
+ }
11556
+ return value;
11557
+ };
11558
+ var parseComponent = (value, label) => {
11559
+ if (!numericPattern.test(value)) {
11560
+ return invalid4(`${label} must be a non-negative integer without leading zeros, received ${JSON.stringify(value)}`);
11561
+ }
11562
+ return checkComponent(Number(value), label);
11563
+ };
11564
+ var prereleaseIdentifier = (identifier) => {
11565
+ if (typeof identifier === "number")
11566
+ return checkComponent(identifier, "numeric pre-release identifier");
11567
+ if (!identifierPattern.test(identifier)) {
11568
+ return invalid4(`pre-release identifier must be non-empty [0-9A-Za-z-], received ${JSON.stringify(identifier)}`);
11569
+ }
11570
+ return digitsPattern.test(identifier) ? parseComponent(identifier, "numeric pre-release identifier") : identifier;
11571
+ };
11572
+ var buildIdentifier = (identifier) => {
11573
+ if (!identifierPattern.test(identifier)) {
11574
+ return invalid4(`build identifier must be non-empty [0-9A-Za-z-], received ${JSON.stringify(identifier)}`);
11575
+ }
11576
+ return identifier;
11577
+ };
11578
+ var comparePrerelease = (self, that) => {
11579
+ if (self.length === 0)
11580
+ return that.length === 0 ? 0 : 1;
11581
+ if (that.length === 0)
11582
+ return -1;
11583
+ const length = Math.min(self.length, that.length);
11584
+ for (let i = 0;i < length; i++) {
11585
+ const a = self[i];
11586
+ const b = that[i];
11587
+ if (a === b)
11588
+ continue;
11589
+ if (typeof a === "number")
11590
+ return typeof b === "number" ? Number2(a, b) : -1;
11591
+ if (typeof b === "number")
11592
+ return 1;
11593
+ return String2(a, b);
11594
+ }
11595
+ return Number2(self.length, that.length);
11596
+ };
11597
+ var compareCore = (self, that) => Number2(self.major, that.major) || Number2(self.minor, that.minor) || Number2(self.patch, that.patch) || comparePrerelease(self.prerelease, that.prerelease);
11598
+ var SemVerProto = {
11599
+ [TypeId29]: TypeId29,
11600
+ [symbol2](that) {
11601
+ return isSemVer(that) && Equivalence4(this, that);
11602
+ },
11603
+ [symbol]() {
11604
+ return string(format3(this));
11605
+ },
11606
+ toString() {
11607
+ return `SemVer(${format3(this)})`;
11608
+ },
11609
+ toJSON() {
11610
+ return {
11611
+ _id: "SemVer",
11612
+ value: format3(this)
11613
+ };
11614
+ },
11615
+ [NodeInspectSymbol]() {
11616
+ return this.toJSON();
11617
+ },
11618
+ pipe() {
11619
+ return pipeArguments(this, arguments);
11620
+ }
11621
+ };
11622
+ var unchecked = (major, minor, patch, prerelease, build) => {
11623
+ const self = Object.create(SemVerProto);
11624
+ self.major = major;
11625
+ self.minor = minor;
11626
+ self.patch = patch;
11627
+ self.prerelease = prerelease;
11628
+ self.build = build;
11629
+ return self;
11630
+ };
11631
+ var isSemVer = (u) => hasProperty(u, TypeId29);
11632
+ var parseOrThrow = (input) => {
11633
+ let rest = input;
11634
+ let build = [];
11635
+ const plus = rest.indexOf("+");
11636
+ if (plus !== -1) {
11637
+ build = rest.slice(plus + 1).split(".").map(buildIdentifier);
11638
+ rest = rest.slice(0, plus);
11639
+ }
11640
+ let prerelease = [];
11641
+ const dash = rest.indexOf("-");
11642
+ if (dash !== -1) {
11643
+ prerelease = rest.slice(dash + 1).split(".").map(prereleaseIdentifier);
11644
+ rest = rest.slice(0, dash);
11645
+ }
11646
+ const core = rest.split(".");
11647
+ if (core.length !== 3)
11648
+ return invalid4("expected MAJOR.MINOR.PATCH");
11649
+ return unchecked(parseComponent(core[0], "major"), parseComponent(core[1], "minor"), parseComponent(core[2], "patch"), prerelease, build);
11650
+ };
11651
+ var parse = (input) => tryParse("SemVer", input, parseOrThrow);
11652
+ var parseUnsafe = (input) => getOrThrow(parse(input));
11653
+ var format3 = (self) => {
11654
+ let out = `${self.major}.${self.minor}.${self.patch}`;
11655
+ if (self.prerelease.length > 0)
11656
+ out += `-${self.prerelease.join(".")}`;
11657
+ if (self.build.length > 0)
11658
+ out += `+${self.build.join(".")}`;
11659
+ return out;
11660
+ };
11661
+ var Order = /* @__PURE__ */ make2(compareCore);
11662
+ var identifiersEqual = /* @__PURE__ */ Array_(/* @__PURE__ */ strictEqual());
11663
+ var Equivalence4 = /* @__PURE__ */ make((self, that) => self.major === that.major && self.minor === that.minor && self.patch === that.patch && identifiersEqual(self.prerelease, that.prerelease) && identifiersEqual(self.build, that.build));
11664
+ var isLessThan2 = /* @__PURE__ */ isLessThan(Order);
11665
+
11514
11666
  // node_modules/effect/dist/Schema.js
11515
- var TypeId29 = TypeId28;
11667
+ var TypeId30 = TypeId28;
11516
11668
  function declareConstructor() {
11517
11669
  return (typeParameters, run, annotations) => {
11518
11670
  return make26(new Declaration(typeParameters.map(getAST), (typeParameters) => run(typeParameters.map((ast) => make26(ast))), annotations));
@@ -11570,7 +11722,7 @@ var decodeEffect2 = decodeUnknownEffect2;
11570
11722
  var decodeUnknownOption2 = decodeUnknownOption;
11571
11723
  var make26 = make25;
11572
11724
  function isSchema(u) {
11573
- return hasProperty(u, TypeId29) && u[TypeId29] === TypeId29;
11725
+ return hasProperty(u, TypeId30) && u[TypeId30] === TypeId30;
11574
11726
  }
11575
11727
  var optionalKey2 = /* @__PURE__ */ lambda((schema) => make26(optionalKey(schema.ast), {
11576
11728
  schema
@@ -11596,7 +11748,7 @@ function Literal2(literal) {
11596
11748
  var Unknown2 = /* @__PURE__ */ make26(unknown);
11597
11749
  var Null2 = /* @__PURE__ */ make26(null_);
11598
11750
  var Undefined2 = /* @__PURE__ */ make26(undefined_2);
11599
- var String4 = /* @__PURE__ */ make26(string2);
11751
+ var String5 = /* @__PURE__ */ make26(string2);
11600
11752
  var Number6 = /* @__PURE__ */ make26(number2);
11601
11753
  var Boolean3 = /* @__PURE__ */ make26(boolean);
11602
11754
  function makeStruct(ast, fields) {
@@ -11775,8 +11927,8 @@ var RegExp2 = /* @__PURE__ */ instanceOf(globalThis.RegExp, {
11775
11927
  }),
11776
11928
  expected: "RegExp",
11777
11929
  toCodecJson: () => link3()(Struct({
11778
- source: String4,
11779
- flags: String4
11930
+ source: String5,
11931
+ flags: String5
11780
11932
  }), transformEffect2({
11781
11933
  decode: (e, options) => try_3({
11782
11934
  try: () => new globalThis.RegExp(e.source, e.flags),
@@ -11790,7 +11942,7 @@ var RegExp2 = /* @__PURE__ */ instanceOf(globalThis.RegExp, {
11790
11942
  })
11791
11943
  }))
11792
11944
  });
11793
- var URLString = /* @__PURE__ */ String4.annotate({
11945
+ var URLString = /* @__PURE__ */ String5.annotate({
11794
11946
  expected: "a string that will be decoded as a URL"
11795
11947
  });
11796
11948
  var URL2 = /* @__PURE__ */ instanceOf(globalThis.URL, {
@@ -11805,7 +11957,7 @@ var URL2 = /* @__PURE__ */ instanceOf(globalThis.URL, {
11805
11957
  expected: "URL",
11806
11958
  toCodecJson: () => link3()(URLString, urlFromString)
11807
11959
  });
11808
- var JsonString = /* @__PURE__ */ String4.annotate({
11960
+ var JsonString = /* @__PURE__ */ String5.annotate({
11809
11961
  expected: "a string that will be decoded as JSON",
11810
11962
  contentMediaType: "application/json"
11811
11963
  });
@@ -11823,9 +11975,9 @@ var File = /* @__PURE__ */ instanceOf(globalThis.File, {
11823
11975
  }),
11824
11976
  expected: "File",
11825
11977
  toCodecJson: () => link3()(Struct({
11826
- data: String4.check(isBase64()),
11827
- type: String4,
11828
- name: String4,
11978
+ data: String5.check(isBase64()),
11979
+ type: String5,
11980
+ name: String5,
11829
11981
  lastModified: Int
11830
11982
  }), transformEffect2({
11831
11983
  decode: (e, options) => match2(decode(e.data), {
@@ -11866,14 +12018,14 @@ var URLSearchParams2 = /* @__PURE__ */ instanceOf(globalThis.URLSearchParams, {
11866
12018
  Type: `globalThis.URLSearchParams`
11867
12019
  }),
11868
12020
  expected: "URLSearchParams",
11869
- toCodecJson: () => link3()(String4.annotate({
12021
+ toCodecJson: () => link3()(String5.annotate({
11870
12022
  expected: "a query string that will be decoded as URLSearchParams"
11871
12023
  }), transform2({
11872
12024
  decode: (e) => new globalThis.URLSearchParams(e),
11873
12025
  encode: (params) => params.toString()
11874
12026
  }))
11875
12027
  });
11876
- var Base64String = /* @__PURE__ */ String4.annotate({
12028
+ var Base64String = /* @__PURE__ */ String5.annotate({
11877
12029
  expected: "a base64 encoded string that will be decoded as Uint8Array",
11878
12030
  format: "byte",
11879
12031
  contentEncoding: "base64"
@@ -11965,7 +12117,7 @@ function makeClass(Inherited, identifier, struct2, annotations, proto) {
11965
12117
  }
11966
12118
  });
11967
12119
  }
11968
- static [TypeId29] = TypeId29;
12120
+ static [TypeId30] = TypeId30;
11969
12121
  get [ClassTypeId]() {
11970
12122
  return ClassTypeId;
11971
12123
  }
@@ -12092,7 +12244,7 @@ var Json2 = /* @__PURE__ */ make26(/* @__PURE__ */ annotate(Json, {
12092
12244
  }));
12093
12245
 
12094
12246
  // node_modules/effect/dist/Terminal.js
12095
- var TypeId30 = "~effect/Terminal";
12247
+ var TypeId31 = "~effect/Terminal";
12096
12248
  var QuitErrorTypeId = "~effect/Terminal/QuitError";
12097
12249
 
12098
12250
  class QuitError extends (/* @__PURE__ */ Error4("QuitError")({
@@ -12104,7 +12256,7 @@ var isQuitError = (u) => hasProperty(u, QuitErrorTypeId);
12104
12256
  var Terminal = /* @__PURE__ */ Service("effect/Terminal");
12105
12257
  var make27 = (impl) => Terminal.of({
12106
12258
  ...impl,
12107
- [TypeId30]: TypeId30
12259
+ [TypeId31]: TypeId31
12108
12260
  });
12109
12261
 
12110
12262
  // node_modules/@effect/platform-node-shared/dist/NodeTerminal.js
@@ -12340,7 +12492,7 @@ function trieNodeAt(root, path) {
12340
12492
  }
12341
12493
 
12342
12494
  // node_modules/effect/dist/Config.js
12343
- var TypeId31 = "~effect/Config";
12495
+ var TypeId32 = "~effect/Config";
12344
12496
  class ConfigError {
12345
12497
  _tag = "ConfigError";
12346
12498
  name = "ConfigError";
@@ -12362,7 +12514,7 @@ var Proto8 = {
12362
12514
  return this.parse(fiber.getRef(ConfigProvider));
12363
12515
  }
12364
12516
  }),
12365
- [TypeId31]: TypeId31,
12517
+ [TypeId32]: TypeId32,
12366
12518
  toJSON() {
12367
12519
  return {
12368
12520
  _id: "Config"
@@ -12520,11 +12672,11 @@ function schema(codec, path) {
12520
12672
  }))), mapReasons((reason) => isDieReason2(reason) && isSourceError(reason.defect) ? makeFailReason(new ConfigError(reason.defect)).annotate(reasonAnnotations2(reason)) : reason));
12521
12673
  });
12522
12674
  }
12523
- function String5(name) {
12524
- return schema(String4, name);
12675
+ function String6(name) {
12676
+ return schema(String5, name);
12525
12677
  }
12526
12678
  function Redacted2(name) {
12527
- return schema(Redacted(String4), name);
12679
+ return schema(Redacted(String5), name);
12528
12680
  }
12529
12681
  // node_modules/effect/dist/Console.js
12530
12682
  var Console = ConsoleRef;
@@ -12536,9 +12688,9 @@ var log = (...args) => consoleWith((console) => sync(() => {
12536
12688
  console.log(...args);
12537
12689
  }));
12538
12690
  // node_modules/effect/dist/internal/matcher.js
12539
- var TypeId32 = "~effect/Match/Matcher";
12691
+ var TypeId33 = "~effect/Match/Matcher";
12540
12692
  var TypeMatcherProto = {
12541
- [TypeId32]: {
12693
+ [TypeId33]: {
12542
12694
  _input: identity,
12543
12695
  _filters: identity,
12544
12696
  _remaining: identity,
@@ -12561,7 +12713,7 @@ function makeTypeMatcher(select, cases) {
12561
12713
  return matcher;
12562
12714
  }
12563
12715
  var ValueMatcherProto = {
12564
- [TypeId32]: {
12716
+ [TypeId33]: {
12565
12717
  _input: identity,
12566
12718
  _filters: identity,
12567
12719
  _result: identity,
@@ -12656,15 +12808,15 @@ var value4 = value3;
12656
12808
  var tag3 = tag2;
12657
12809
  var exhaustive2 = exhaustive;
12658
12810
  // node_modules/effect/dist/cli/CliError.js
12659
- var TypeId33 = "~effect/cli/CliError";
12660
- var isCliError = (u) => hasProperty(u, TypeId33);
12811
+ var TypeId34 = "~effect/cli/CliError";
12812
+ var isCliError = (u) => hasProperty(u, TypeId34);
12661
12813
 
12662
- class UnrecognizedOption extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/UnrecognizedOption`)("UnrecognizedOption", {
12663
- option: String4,
12664
- command: /* @__PURE__ */ optional2(/* @__PURE__ */ ArraySchema(String4)),
12665
- suggestions: /* @__PURE__ */ ArraySchema(String4)
12814
+ class UnrecognizedOption extends (/* @__PURE__ */ TaggedError3(`${TypeId34}/UnrecognizedOption`)("UnrecognizedOption", {
12815
+ option: String5,
12816
+ command: /* @__PURE__ */ optional2(/* @__PURE__ */ ArraySchema(String5)),
12817
+ suggestions: /* @__PURE__ */ ArraySchema(String5)
12666
12818
  })) {
12667
- [TypeId33] = TypeId33;
12819
+ [TypeId34] = TypeId34;
12668
12820
  get message() {
12669
12821
  const suggestionText = this.suggestions.length > 0 ? `
12670
12822
 
@@ -12676,52 +12828,52 @@ class UnrecognizedOption extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/Unre
12676
12828
  }
12677
12829
  }
12678
12830
 
12679
- class DuplicateOption extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/DuplicateOption`)("DuplicateOption", {
12680
- option: String4,
12681
- parentCommand: String4,
12682
- childCommand: String4
12831
+ class DuplicateOption extends (/* @__PURE__ */ TaggedError3(`${TypeId34}/DuplicateOption`)("DuplicateOption", {
12832
+ option: String5,
12833
+ parentCommand: String5,
12834
+ childCommand: String5
12683
12835
  })) {
12684
- [TypeId33] = TypeId33;
12836
+ [TypeId34] = TypeId34;
12685
12837
  get message() {
12686
12838
  return `Duplicate flag name "${this.option}" in parent command "${this.parentCommand}" and subcommand "${this.childCommand}". ` + `Parent will always claim this flag (Mode A semantics). Consider renaming one of them to avoid confusion.`;
12687
12839
  }
12688
12840
  }
12689
12841
 
12690
- class MissingOption extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/MissingOption`)("MissingOption", {
12691
- option: String4
12842
+ class MissingOption extends (/* @__PURE__ */ TaggedError3(`${TypeId34}/MissingOption`)("MissingOption", {
12843
+ option: String5
12692
12844
  })) {
12693
- [TypeId33] = TypeId33;
12845
+ [TypeId34] = TypeId34;
12694
12846
  get message() {
12695
12847
  return `Missing required flag: --${this.option}`;
12696
12848
  }
12697
12849
  }
12698
12850
 
12699
- class MissingArgument extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/MissingArgument`)("MissingArgument", {
12700
- argument: String4
12851
+ class MissingArgument extends (/* @__PURE__ */ TaggedError3(`${TypeId34}/MissingArgument`)("MissingArgument", {
12852
+ argument: String5
12701
12853
  })) {
12702
- [TypeId33] = TypeId33;
12854
+ [TypeId34] = TypeId34;
12703
12855
  get message() {
12704
12856
  return `Missing required argument: ${this.argument}`;
12705
12857
  }
12706
12858
  }
12707
12859
 
12708
- class UnexpectedArgument extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/UnexpectedArgument`)("UnexpectedArgument", {
12709
- arguments: /* @__PURE__ */ ArraySchema(String4)
12860
+ class UnexpectedArgument extends (/* @__PURE__ */ TaggedError3(`${TypeId34}/UnexpectedArgument`)("UnexpectedArgument", {
12861
+ arguments: /* @__PURE__ */ ArraySchema(String5)
12710
12862
  })) {
12711
- [TypeId33] = TypeId33;
12863
+ [TypeId34] = TypeId34;
12712
12864
  get message() {
12713
12865
  const label = this.arguments.length === 1 ? "argument" : "arguments";
12714
12866
  return `Unexpected positional ${label}: ${this.arguments.map((value) => JSON.stringify(value)).join(", ")}`;
12715
12867
  }
12716
12868
  }
12717
12869
 
12718
- class InvalidValue2 extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/InvalidValue`)("InvalidValue", {
12719
- option: String4,
12720
- value: String4,
12721
- expected: String4,
12870
+ class InvalidValue2 extends (/* @__PURE__ */ TaggedError3(`${TypeId34}/InvalidValue`)("InvalidValue", {
12871
+ option: String5,
12872
+ value: String5,
12873
+ expected: String5,
12722
12874
  kind: /* @__PURE__ */ Union2([/* @__PURE__ */ Literal2("flag"), /* @__PURE__ */ Literal2("argument")])
12723
12875
  })) {
12724
- [TypeId33] = TypeId33;
12876
+ [TypeId34] = TypeId34;
12725
12877
  get message() {
12726
12878
  const expectation = this.expected.startsWith("Expected ") || this.expected.startsWith("Expected:") ? this.expected : `Expected: ${this.expected}`;
12727
12879
  if (this.kind === "argument") {
@@ -12734,12 +12886,12 @@ class InvalidValue2 extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/InvalidVa
12734
12886
  }
12735
12887
  }
12736
12888
 
12737
- class UnknownSubcommand extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/UnknownSubcommand`)("UnknownSubcommand", {
12738
- subcommand: String4,
12739
- parent: /* @__PURE__ */ optional2(/* @__PURE__ */ ArraySchema(String4)),
12740
- suggestions: /* @__PURE__ */ ArraySchema(String4)
12889
+ class UnknownSubcommand extends (/* @__PURE__ */ TaggedError3(`${TypeId34}/UnknownSubcommand`)("UnknownSubcommand", {
12890
+ subcommand: String5,
12891
+ parent: /* @__PURE__ */ optional2(/* @__PURE__ */ ArraySchema(String5)),
12892
+ suggestions: /* @__PURE__ */ ArraySchema(String5)
12741
12893
  })) {
12742
- [TypeId33] = TypeId33;
12894
+ [TypeId34] = TypeId34;
12743
12895
  get message() {
12744
12896
  const suggestionText = this.suggestions.length > 0 ? `
12745
12897
 
@@ -12750,17 +12902,17 @@ class UnknownSubcommand extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/Unkno
12750
12902
  }
12751
12903
  }
12752
12904
 
12753
- class ValidationError extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/ValidationError`)("ValidationError", {
12754
- message: String4
12905
+ class ValidationError extends (/* @__PURE__ */ TaggedError3(`${TypeId34}/ValidationError`)("ValidationError", {
12906
+ message: String5
12755
12907
  })) {
12756
- [TypeId33] = TypeId33;
12908
+ [TypeId34] = TypeId34;
12757
12909
  }
12758
12910
 
12759
- class UserError extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/UserError`)("UserError", {
12911
+ class UserError extends (/* @__PURE__ */ TaggedError3(`${TypeId34}/UserError`)("UserError", {
12760
12912
  cause: /* @__PURE__ */ Defect(),
12761
- userMessage: /* @__PURE__ */ optionalKey2(String4)
12913
+ userMessage: /* @__PURE__ */ optionalKey2(String5)
12762
12914
  })) {
12763
- [TypeId33] = TypeId33;
12915
+ [TypeId34] = TypeId34;
12764
12916
  [errorReported] = true;
12765
12917
  get message() {
12766
12918
  if (this.userMessage)
@@ -12774,11 +12926,11 @@ class UserError extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/UserError`)("
12774
12926
  }
12775
12927
  var NonShowHelpErrors = /* @__PURE__ */ Union2([UnrecognizedOption, DuplicateOption, MissingOption, MissingArgument, UnexpectedArgument, InvalidValue2, UnknownSubcommand, ValidationError, UserError]);
12776
12928
 
12777
- class ShowHelp extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/ShowHelp`)("ShowHelp", {
12778
- commandPath: /* @__PURE__ */ ArraySchema(String4),
12929
+ class ShowHelp extends (/* @__PURE__ */ TaggedError3(`${TypeId34}/ShowHelp`)("ShowHelp", {
12930
+ commandPath: /* @__PURE__ */ ArraySchema(String5),
12779
12931
  errors: /* @__PURE__ */ ArraySchema(NonShowHelpErrors)
12780
12932
  })) {
12781
- [TypeId33] = TypeId33;
12933
+ [TypeId34] = TypeId34;
12782
12934
  [errorExitCode] = this.errors.length ? 1 : 0;
12783
12935
  [errorReported] = false;
12784
12936
  get message() {
@@ -12787,9 +12939,9 @@ class ShowHelp extends (/* @__PURE__ */ TaggedError3(`${TypeId33}/ShowHelp`)("Sh
12787
12939
  }
12788
12940
 
12789
12941
  // node_modules/effect/dist/cli/Primitive.js
12790
- var TypeId34 = "~effect/cli/Primitive";
12942
+ var TypeId35 = "~effect/cli/Primitive";
12791
12943
  var Proto9 = {
12792
- [TypeId34]: {
12944
+ [TypeId35]: {
12793
12945
  _A: identity
12794
12946
  }
12795
12947
  };
@@ -12806,7 +12958,7 @@ var makeSchemaPrimitive = (tag, schema) => {
12806
12958
  return makePrimitive2(tag, (value) => mapError3(decode(value), (error) => error.message));
12807
12959
  };
12808
12960
  var Boolean4 = /* @__PURE__ */ makeSchemaPrimitive("Boolean", BooleanLiterals);
12809
- var String6 = /* @__PURE__ */ makePrimitive2("String", (value) => succeed6(value));
12961
+ var String7 = /* @__PURE__ */ makePrimitive2("String", (value) => succeed6(value));
12810
12962
  var Choice = (choices) => {
12811
12963
  const choiceMap = new Map(choices);
12812
12964
  const validChoices = choices.map(([key]) => format(key)).join(" | ");
@@ -12924,7 +13076,7 @@ var eraseLines = (rows) => {
12924
13076
  };
12925
13077
 
12926
13078
  // node_modules/effect/dist/cli/Prompt.js
12927
- var TypeId35 = "~effect/cli/Prompt";
13079
+ var TypeId36 = "~effect/cli/Prompt";
12928
13080
  var defaultTheme = {
12929
13081
  prefix: "?",
12930
13082
  arrowUp: "\u2191",
@@ -13149,7 +13301,7 @@ var succeed9 = (value) => {
13149
13301
  op.value = value;
13150
13302
  return op;
13151
13303
  };
13152
- var String7 = (options) => basePrompt(options, "text");
13304
+ var String8 = (options) => basePrompt(options, "text");
13153
13305
  var Toggle = (options) => {
13154
13306
  const opts = {
13155
13307
  initial: false,
@@ -13170,7 +13322,7 @@ var proto = {
13170
13322
  return run3(this);
13171
13323
  }
13172
13324
  }),
13173
- [TypeId35]: {
13325
+ [TypeId36]: {
13174
13326
  _Output: (_) => _
13175
13327
  }
13176
13328
  };
@@ -14581,18 +14733,18 @@ var entriesToDisplay = (cursor, total, maxVisible) => {
14581
14733
  };
14582
14734
 
14583
14735
  // node_modules/effect/dist/cli/Param.js
14584
- var TypeId36 = "~effect/cli/Param";
14736
+ var TypeId37 = "~effect/cli/Param";
14585
14737
  var argumentKind = "argument";
14586
14738
  var flagKind = "flag";
14587
14739
  var Proto10 = {
14588
- [TypeId36]: {
14740
+ [TypeId37]: {
14589
14741
  _A: identity
14590
14742
  },
14591
14743
  pipe() {
14592
14744
  return pipeArguments(this, arguments);
14593
14745
  }
14594
14746
  };
14595
- var isParam = (u) => hasProperty(u, TypeId36);
14747
+ var isParam = (u) => hasProperty(u, TypeId37);
14596
14748
  var isFlagParam = (single) => single.kind === "flag";
14597
14749
  var makeSingle2 = (params) => {
14598
14750
  const parse = (args) => params.kind === argumentKind ? parsePositional(params.name, params.primitiveType, args) : parseFlag(params.name, params.primitiveType, args);
@@ -14605,9 +14757,9 @@ var makeSingle2 = (params) => {
14605
14757
  parse
14606
14758
  }, Proto10);
14607
14759
  };
14608
- var String8 = (kind, name) => makeSingle2({
14760
+ var String9 = (kind, name) => makeSingle2({
14609
14761
  name,
14610
- primitiveType: String6,
14762
+ primitiveType: String7,
14611
14763
  kind
14612
14764
  });
14613
14765
  var Boolean5 = (kind, name) => makeSingle2({
@@ -14924,7 +15076,7 @@ var reconstructTree = (tree, results) => {
14924
15076
  };
14925
15077
 
14926
15078
  // node_modules/effect/dist/cli/internal/command.js
14927
- var TypeId37 = "~effect/cli/Command";
15079
+ var TypeId38 = "~effect/cli/Command";
14928
15080
  var toImpl = (self) => self;
14929
15081
  var Proto11 = {
14930
15082
  .../* @__PURE__ */ Prototype2({
@@ -14937,7 +15089,7 @@ var Proto11 = {
14937
15089
  var makeCommand = (options) => {
14938
15090
  const config = options.config;
14939
15091
  const contextConfig = options.contextConfig ?? emptyConfig;
14940
- const service = options.service ?? Service(`${TypeId37}/${options.name}`);
15092
+ const service = options.service ?? Service(`${TypeId38}/${options.name}`);
14941
15093
  const annotations = options.annotations ?? empty();
14942
15094
  const globalFlags = options.globalFlags ?? [];
14943
15095
  const subcommands = options.subcommands ?? [];
@@ -15017,7 +15169,7 @@ var makeCommand = (options) => {
15017
15169
  };
15018
15170
  };
15019
15171
  return Object.assign(Object.create(Proto11), {
15020
- [TypeId37]: TypeId37,
15172
+ [TypeId38]: TypeId38,
15021
15173
  name: options.name,
15022
15174
  examples: resolveExamples([options.name]),
15023
15175
  resolveExamples,
@@ -16203,7 +16355,7 @@ var generate5 = (executableName, shell, descriptor) => {
16203
16355
  };
16204
16356
 
16205
16357
  // node_modules/effect/dist/cli/Flag.js
16206
- var String9 = (name) => String8(flagKind, name);
16358
+ var String10 = (name) => String9(flagKind, name);
16207
16359
  var Boolean6 = (name) => Boolean5(flagKind, name);
16208
16360
  var ChoiceWithValue2 = (name, choices) => ChoiceWithValue(flagKind, name, choices);
16209
16361
  var withAlias2 = /* @__PURE__ */ dual(2, (self, alias) => withAlias(self, alias));
@@ -17440,7 +17592,7 @@ var promptSingle = (single) => {
17440
17592
  message
17441
17593
  })), (value) => commandLineArg(value2(value), "<redacted>"));
17442
17594
  default:
17443
- return map7(run3(String7({
17595
+ return map7(run3(String8({
17444
17596
  message
17445
17597
  })), commandLineArg);
17446
17598
  }
@@ -17501,7 +17653,7 @@ var wrapCommand = (commandLine) => {
17501
17653
  var formatShellArg = (arg) => /^[A-Za-z0-9_./:@%+=,-]+$/.test(arg) ? arg : `'${arg.replaceAll("'", `'"'"'`)}'`;
17502
17654
 
17503
17655
  // node_modules/effect/dist/cli/Command.js
17504
- var isCommand = (u) => hasProperty(u, TypeId37);
17656
+ var isCommand = (u) => hasProperty(u, TypeId38);
17505
17657
  var make32 = (name, config, handler) => {
17506
17658
  const parsedConfig = parseConfig(config ?? {});
17507
17659
  return makeCommand({
@@ -17620,6 +17772,14 @@ var withShortDescription = /* @__PURE__ */ dual(2, (self, shortDescription) => m
17620
17772
  ...toImpl(self),
17621
17773
  shortDescription
17622
17774
  }));
17775
+ var mapHandler = (self, f) => {
17776
+ const impl = toImpl(self);
17777
+ return makeCommand({
17778
+ ...impl,
17779
+ handle: (input, path) => f(impl.handle(input, path), input)
17780
+ });
17781
+ };
17782
+ var provideEffectDiscard = /* @__PURE__ */ dual(2, (self, effect) => mapHandler(self, (handler, input) => andThen2(typeof effect === "function" ? effect(input) : effect, handler)));
17623
17783
  var getOutOfScopeGlobalFlagErrors = (allFlags, activeFlags, flagMap, commandPath) => {
17624
17784
  const activeSet = new Set(activeFlags);
17625
17785
  const errors = [];
@@ -17780,11 +17940,11 @@ var runWith2 = (command, config) => {
17780
17940
  }, catchFilter2((error) => isCliError(error) && error._tag === "ShowHelp" ? succeed2(error) : fail2(error), (error) => andThen2(showHelp(command, error, config.renderErrors !== false), fail6(error))), catchFilter2((error) => config.renderErrors !== false && isCliError(error) && error._tag === "UserError" ? succeed2(error) : fail2(error), (error) => andThen2(showUserError(error), fail6(error))), catchFilter2((e) => isQuitError(e) ? succeed2(e) : fail2(e), (_) => interrupt2));
17781
17941
  };
17782
17942
  // node_modules/effect/dist/http/HttpBody.js
17783
- var TypeId38 = "~effect/http/HttpBody";
17943
+ var TypeId39 = "~effect/http/HttpBody";
17784
17944
  class Proto12 {
17785
- [TypeId38];
17945
+ [TypeId39];
17786
17946
  constructor() {
17787
- this[TypeId38] = TypeId38;
17947
+ this[TypeId39] = TypeId39;
17788
17948
  }
17789
17949
  [NodeInspectSymbol]() {
17790
17950
  return this.toJSON();
@@ -17849,7 +18009,7 @@ var text = (body, contentType) => {
17849
18009
  var jsonUnsafe = (body, contentType) => text(JSON.stringify(body), contentType ?? "application/json");
17850
18010
 
17851
18011
  // node_modules/effect/dist/http/HttpClientError.js
17852
- var TypeId39 = "~effect/http/HttpClientError";
18012
+ var TypeId40 = "~effect/http/HttpClientError";
17853
18013
  class HttpClientError extends (/* @__PURE__ */ TaggedError2("HttpClientError")) {
17854
18014
  constructor(props) {
17855
18015
  if ("cause" in props.reason) {
@@ -17861,7 +18021,7 @@ class HttpClientError extends (/* @__PURE__ */ TaggedError2("HttpClientError"))
17861
18021
  super(props);
17862
18022
  }
17863
18023
  }
17864
- [TypeId39] = TypeId39;
18024
+ [TypeId40] = TypeId40;
17865
18025
  get request() {
17866
18026
  return this.reason.request;
17867
18027
  }
@@ -17969,9 +18129,9 @@ var baseUrl = () => {
17969
18129
  };
17970
18130
 
17971
18131
  // node_modules/effect/dist/http/HttpClientRequest.js
17972
- var TypeId40 = "~effect/http/HttpClientRequest";
18132
+ var TypeId41 = "~effect/http/HttpClientRequest";
17973
18133
  var Proto13 = {
17974
- [TypeId40]: TypeId40,
18134
+ [TypeId41]: TypeId41,
17975
18135
  ...BaseProto,
17976
18136
  toJSON() {
17977
18137
  return {
@@ -18080,7 +18240,7 @@ function toUrl(self) {
18080
18240
  }
18081
18241
 
18082
18242
  // node_modules/effect/dist/http/HttpIncomingMessage.js
18083
- var TypeId41 = "~effect/http/HttpIncomingMessage";
18243
+ var TypeId42 = "~effect/http/HttpIncomingMessage";
18084
18244
  var schemaBodyJson = (schema, options) => {
18085
18245
  const decode = decodeEffect2(toCodecJson2(schema));
18086
18246
  const decodeJson = options?.reviver === undefined ? undefined : decodeEffect2(fromJsonString2(toCodecJson2(schema), options));
@@ -18099,19 +18259,19 @@ var WebSourceSymbol = "~effect/http/HttpClientResponse/WebSource";
18099
18259
  var getWebSource = (self) => self[WebSourceSymbol]?.();
18100
18260
 
18101
18261
  // node_modules/effect/dist/http/HttpClientResponse.js
18102
- var TypeId42 = "~effect/http/HttpClientResponse";
18262
+ var TypeId43 = "~effect/http/HttpClientResponse";
18103
18263
  var fromWeb = (request, source) => new WebHttpClientResponse(request, source);
18104
18264
  class WebHttpClientResponse extends Class2 {
18105
- [TypeId41];
18106
18265
  [TypeId42];
18266
+ [TypeId43];
18107
18267
  request;
18108
18268
  source;
18109
18269
  constructor(request, source) {
18110
18270
  super();
18111
18271
  this.request = request;
18112
18272
  this.source = source;
18113
- this[TypeId41] = TypeId41;
18114
18273
  this[TypeId42] = TypeId42;
18274
+ this[TypeId43] = TypeId43;
18115
18275
  }
18116
18276
  toJSON() {
18117
18277
  return inspect(this, {
@@ -18283,7 +18443,7 @@ var addHeaderAttributes = (span, phase, headers, filter, redactedNames) => {
18283
18443
  };
18284
18444
 
18285
18445
  // node_modules/effect/dist/http/HttpClient.js
18286
- var TypeId43 = "~effect/http/HttpClient";
18446
+ var TypeId44 = "~effect/http/HttpClient";
18287
18447
  var HttpClient = /* @__PURE__ */ Service("effect/HttpClient");
18288
18448
  var transformResponse = /* @__PURE__ */ dual(2, (self, f) => makeWith2((request) => f(self.postprocess(request)), self.preprocess));
18289
18449
  var makeWith2 = (postprocess, preprocess) => {
@@ -18296,7 +18456,7 @@ var makeWith2 = (postprocess, preprocess) => {
18296
18456
  return self;
18297
18457
  };
18298
18458
  var Proto14 = {
18299
- [TypeId43]: TypeId43,
18459
+ [TypeId44]: TypeId44,
18300
18460
  pipe() {
18301
18461
  return pipeArguments(this, arguments);
18302
18462
  },
@@ -18443,8 +18603,8 @@ class InterruptibleResponse {
18443
18603
  this.original = original;
18444
18604
  this.controller = controller;
18445
18605
  }
18606
+ [TypeId43] = TypeId43;
18446
18607
  [TypeId42] = TypeId42;
18447
- [TypeId41] = TypeId41;
18448
18608
  applyInterrupt(effect) {
18449
18609
  return suspend2(() => {
18450
18610
  responseRegistry.unregister(this.original);
@@ -18597,7 +18757,7 @@ var layer14 = /* @__PURE__ */ layerMergedContext(/* @__PURE__ */ succeed6(fetch)
18597
18757
  // package.json
18598
18758
  var package_default = {
18599
18759
  name: "jj-octo",
18600
- version: "0.9.2",
18760
+ version: "0.9.3",
18601
18761
  description: "A jj subcommand for GitHub that supports stacked pull requests and works in Claude Code cloud sessions",
18602
18762
  license: "MIT",
18603
18763
  repository: {
@@ -18651,7 +18811,7 @@ var asUserError = (program) => program.pipe(mapError3(({ message }) => userError
18651
18811
  var withHelp = (summary, ...paragraphs) => (command) => command.pipe(withShortDescription(summary), withDescription3([summary, ...paragraphs].join(`
18652
18812
 
18653
18813
  `)));
18654
- var revisionFlag = (description) => String9("revision").pipe(withAlias2("r"), withDefault5("@"), withDescription2(`${description}, the working copy by default`));
18814
+ var revisionFlag = (description) => String10("revision").pipe(withAlias2("r"), withDefault5("@"), withDescription2(`${description}, the working copy by default`));
18655
18815
  // src/clients/git.ts
18656
18816
  class GitFailed extends TaggedError2("GitFailed") {
18657
18817
  }
@@ -18940,31 +19100,31 @@ var StackNumberSchema = Number6.pipe(brand("StackNumber"));
18940
19100
  var CreatedPullRequest = responseOf()(Struct({ number: PullRequestNumberSchema }));
18941
19101
  var CreatedStack = responseOf()(Struct({ number: StackNumberSchema }));
18942
19102
  var PullRequests = responseOf()(ArraySchema(Struct({
18943
- base: Struct({ ref: String4 }),
18944
- body: NullOr(String4),
19103
+ base: Struct({ ref: String5 }),
19104
+ body: NullOr(String5),
18945
19105
  draft: optionalKey2(Boolean3),
18946
19106
  number: PullRequestNumberSchema,
18947
- title: String4
19107
+ title: String5
18948
19108
  })));
18949
19109
  var AnyPullRequests = responseOf()(ArraySchema(Struct({
18950
19110
  draft: optionalKey2(Boolean3),
18951
- head: Struct({ sha: String4 }),
18952
- html_url: String4,
18953
- merged_at: NullOr(String4),
19111
+ head: Struct({ sha: String5 }),
19112
+ html_url: String5,
19113
+ merged_at: NullOr(String5),
18954
19114
  number: PullRequestNumberSchema,
18955
- state: String4,
18956
- title: String4
19115
+ state: String5,
19116
+ title: String5
18957
19117
  })));
18958
19118
  var StackedPullRequest = Struct({
18959
19119
  number: PullRequestNumberSchema,
18960
19120
  state: Literals(["closed", "open"])
18961
19121
  });
18962
19122
  var Stacks = responseOf()(ArraySchema(Struct({ number: StackNumberSchema, pull_requests: ArraySchema(StackedPullRequest) })));
18963
- var RepositoryDetails = responseOf()(Struct({ default_branch: String4 }));
19123
+ var RepositoryDetails = responseOf()(Struct({ default_branch: String5 }));
18964
19124
  var MergeRequest = Struct({
18965
19125
  details: Struct({
18966
- message: String4,
18967
- uuid: optionalKey2(String4)
19126
+ message: String5,
19127
+ uuid: optionalKey2(String5)
18968
19128
  }),
18969
19129
  status: Literals(["enqueued", "failed", "merged", "pending"])
18970
19130
  });
@@ -19100,6 +19260,8 @@ var checkout = gen2(function* () {
19100
19260
  const isColocated = yield* fs.exists(`${root}/.jj`).pipe(orElseSucceed2(() => false));
19101
19261
  return { isColocated, isWorktree: gitDirectory !== commonDirectory, root };
19102
19262
  });
19263
+ var SET_UP_VERSION = "jj-octo.set-up-version";
19264
+ var readSetUpVersion = readJjConfig(SET_UP_VERSION, { repo: true });
19103
19265
  var colocated = {
19104
19266
  check: map7(checkout, ({ isColocated, isWorktree }) => {
19105
19267
  const problem = isWorktree ? {
@@ -19208,12 +19370,26 @@ var init = gen2(function* () {
19208
19370
  yield* new NotSetUp({ message: problems.join(`
19209
19371
  `) });
19210
19372
  }
19373
+ yield* setJjConfig(SET_UP_VERSION, package_default.version);
19211
19374
  yield* error(`set up jj, with trunk() as ${yield* branch}@origin`);
19212
19375
  });
19213
- var initCommand = make32("init", {}, () => asUserError(init)).pipe(withHelp("Set up a git checkout for the other commands", "Makes it a jj repository colocated with git, unless it already is one, and copies git's name and email into the repository's jj config where jj has none. Where neither has them, set them with `jj config set --user`.", "Reads the default branch from `origin`, fetches and tracks it, and sets `trunk()` to it in the repository's config. jj's own `trunk()` guesses from branch names, so without this a default branch it doesn't guess would be the base of pull requests but not of local rebases. `submit`, `merge` and `sync` check that the two agree.", "Sets the `jj gh` alias to run `jj-octo` from `PATH`, in the repository's config, unless the repository has one, such as one that runs another build.", "Needs no GitHub token. Running it again changes nothing that is already set up. Run it again after the default branch changes on GitHub. Fails with what it couldn't set up, after setting up the rest. Where it can't make a colocated jj repository, such as in a git worktree, it sets up nothing else."));
19376
+ var THIS_VERSION = parseUnsafe(package_default.version);
19377
+ var isOlder = (recorded) => typeof recorded !== "string" || match2(parse(recorded), {
19378
+ onFailure: () => true,
19379
+ onSuccess: (version) => isLessThan2(version, THIS_VERSION)
19380
+ });
19381
+ var setUpOnUpgrade = gen2(function* () {
19382
+ if (!isOlder(yield* readSetUpVersion)) {
19383
+ return;
19384
+ }
19385
+ yield* error(`setting this checkout up for jj-octo ${package_default.version}`);
19386
+ yield* init.pipe(catchTag2("NotSetUp", ({ message }) => andThen2(error(`${message}
19387
+ run \`jj-octo init\` once that's fixed`), setJjConfig(SET_UP_VERSION, package_default.version))));
19388
+ });
19389
+ var initCommand = make32("init", {}, () => asUserError(init)).pipe(withHelp("Set up a git checkout for the other commands", "Makes it a jj repository colocated with git, unless it already is one, and copies git's name and email into the repository's jj config where jj has none. Where neither has them, set them with `jj config set --user`.", "Reads the default branch from `origin`, fetches and tracks it, and sets `trunk()` to it in the repository's config. jj's own `trunk()` guesses from branch names, so without this a default branch it doesn't guess would be the base of pull requests but not of local rebases. `submit`, `merge` and `sync` check that the two agree.", "Sets the `jj gh` alias to run `jj-octo` from `PATH`, in the repository's config, unless the repository has one, such as one that runs another build.", "Records its version as `jj-octo.set-up-version` in the repository's config. The other commands, except `doctor`, run it first where an older version is recorded, or none is.", "Needs no GitHub token. Running it again changes nothing that is already set up. Run it again after the default branch changes on GitHub. Fails with what it couldn't set up, after setting up the rest. Where it can't make a colocated jj repository, such as in a git worktree, it sets up nothing else."));
19214
19390
 
19215
19391
  // src/clients/claude-code.ts
19216
- var claudeCodeCloudSession = orDie2(String5("CLAUDE_CODE_REMOTE").pipe(withDefault3(""), map10((value) => value === "true")));
19392
+ var claudeCodeCloudSession = orDie2(String6("CLAUDE_CODE_REMOTE").pipe(withDefault3(""), map10((value) => value === "true")));
19217
19393
 
19218
19394
  // src/clients/clipboard.ts
19219
19395
  class ClipboardFailed extends TaggedError2("ClipboardFailed") {
@@ -19234,8 +19410,8 @@ function run([html, text]) {
19234
19410
  }
19235
19411
  }`;
19236
19412
  var environment = all4({
19237
- path: String5("PATH").pipe(withDefault3("")),
19238
- wayland: String5("WAYLAND_DISPLAY").pipe(withDefault3(""))
19413
+ path: String6("PATH").pipe(withDefault3("")),
19414
+ wayland: String6("WAYLAND_DISPLAY").pipe(withDefault3(""))
19239
19415
  });
19240
19416
  var commandsFor = ({ html, text }, platform, wayland) => {
19241
19417
  if (platform === "darwin") {
@@ -19466,9 +19642,9 @@ var logCommand = make32("log", { revision: revisionFlag("A change of the stack t
19466
19642
  class PrDescriptions extends Service()("jj-octo/PrDescriptions") {
19467
19643
  }
19468
19644
  var StoredRecord = Struct({
19469
- bookmark: String4,
19470
- commit: String4,
19471
- description: String4
19645
+ bookmark: String5,
19646
+ commit: String5,
19647
+ description: String5
19472
19648
  });
19473
19649
  var decode2 = decodeUnknownOption2(fromJsonString2(StoredRecord));
19474
19650
  var RECORD = /^\d+$/u;
@@ -20147,14 +20323,15 @@ var submitCommand = make32("submit", {
20147
20323
  }, ({ overwriteDescriptions, publish, revision }) => asUserError(submit(revision, { draft: !publish, overwriteDescriptions }).pipe(provide3(GitHubFromOrigin)))).pipe(withHelp("Push a change and the ones below it, and open their pull requests", "Pushes the bookmark of each of those changes. An empty working copy means the change below it, so from the top of a stack this submits all of it. Opens a pull request for each branch that has none, with the title and body from the change's description. Points each pull request at the branch below it, and the bottom one at the default branch.", "New pull requests are opened as drafts, or ready for review with `--publish`. The flag doesn't change a pull request that already exists.", "Keeps each pull request's title and body the same as its change's description. A description edited on GitHub is written into the change, one edited locally is sent to the pull request, and edits on both sides are merged line by line. That holds for a local edit pushed with `jj git push` too, since submit records the description that both sides last agreed on in `jj-octo/pr-descriptions` under the repository's `.jj/repo`, in the main workspace. Edits to the same lines stop the submit before anything is pushed.", "First, where any of those changes' pull requests merged or any of their branches changed on GitHub, syncs their stack as `jj gh sync` does, and leaves other stacks alone. That drops the merged changes, takes what GitHub added to the branches, and rebases the rest onto the trunk, so the push doesn't undo GitHub's work.", "Stops before changing anything where one of their branches was deleted on GitHub and their change doesn't count as merged: no pull request from it merged, another commit merged, or the change was edited since. It says how to push the change again, or drop it.", "Registers the pull requests as one GitHub stack. A stack of one change is a single pull request, which GitHub has no stack for.", "If changes were reordered, inserted or dropped since the last submit, the GitHub stack is dissolved and registered again under a new number. The pull requests stay open, including the one of a dropped change."));
20148
20324
 
20149
20325
  // src/cli/gh/command.ts
20326
+ var setUpFirst = (command) => provideEffectDiscard(command, asUserError(setUpOnUpgrade));
20150
20327
  var jjGhCommand = make32("jj gh").pipe(withSubcommands([
20151
20328
  doctorCommand,
20152
20329
  initCommand,
20153
- linksCommand,
20154
- logCommand,
20155
- mergeCommand,
20156
- submitCommand,
20157
- syncCommand
20330
+ linksCommand.pipe(setUpFirst),
20331
+ logCommand.pipe(setUpFirst),
20332
+ mergeCommand.pipe(setUpFirst),
20333
+ submitCommand.pipe(setUpFirst),
20334
+ syncCommand.pipe(setUpFirst)
20158
20335
  ]), withHelp("Commands for publishing jj changes as GitHub pull requests", "A stack is a chain of changes, each published as one pull request on the branch its bookmark names. Each pull request targets the branch of the change below it, so it shows only that change's diff. A single change is a stack of one, and is published as an ordinary pull request.", "The stack of a change is every change connected to it through mutable changes. An empty working copy with no description isn't part of it. `log` shows the whole stack, and `links` lists its pull requests as Markdown links. `submit` and `merge` act on a change and the ones below it, which must be a chain: no merges, no conflicts, and exactly one bookmark on each change.", "The repository is the one the `origin` remote points to. The token is read from `GH_TOKEN` or `GITHUB_TOKEN`, and otherwise from `gh auth token`."));
20159
20336
 
20160
20337
  // src/main.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jj-octo",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "description": "A jj subcommand for GitHub that supports stacked pull requests and works in Claude Code cloud sessions",
5
5
  "license": "MIT",
6
6
  "repository": {