@maycombhq/atticus 2.0.0-beta.2 → 2.0.0-beta.4

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 (141) hide show
  1. package/dist/bin.js +2 -2
  2. package/dist/{chunk-MVZVGYXH.js → chunk-2OC7ZEJL.js} +3 -3
  3. package/dist/{chunk-5KLGBXG5.js → chunk-2OUJJQN5.js} +16 -16
  4. package/dist/{chunk-BOHJZTEQ.js → chunk-3BSRA5O4.js} +7 -7
  5. package/dist/{chunk-CSZ4C5N6.js → chunk-3JAPYUGG.js} +3 -3
  6. package/dist/{chunk-IHMLFRVV.js → chunk-426TNDXJ.js} +8 -8
  7. package/dist/{chunk-7ZUIMTOU.js → chunk-42Y3B5Y5.js} +15 -15
  8. package/dist/{chunk-S3QNRWYR.js → chunk-4JQ42JQ7.js} +8 -8
  9. package/dist/{chunk-PCOCACY3.js → chunk-4MMBSUID.js} +13 -13
  10. package/dist/{chunk-GLUX4EEP.js → chunk-4UL6IZXB.js} +7 -7
  11. package/dist/{chunk-UNM6ZOKP.js → chunk-4VN6VYX3.js} +11 -11
  12. package/dist/{chunk-2BFCZ3RK.js → chunk-5DNIOQ4N.js} +14 -14
  13. package/dist/{chunk-JGZCG5VM.js → chunk-5EX245DC.js} +5 -5
  14. package/dist/{chunk-WVPJSRRJ.js → chunk-5IEP3QCU.js} +13 -13
  15. package/dist/{chunk-NXFPS2LR.js → chunk-5JHJOGML.js} +7 -7
  16. package/dist/{chunk-J4K3KVLD.js → chunk-7IVSMCEN.js} +13 -13
  17. package/dist/{chunk-CKSITVS4.js → chunk-7MPR7BKQ.js} +8 -8
  18. package/dist/{chunk-4NDAAFQT.js → chunk-A4M64ENV.js} +2 -2
  19. package/dist/{chunk-652QWTLZ.js → chunk-A57MG35V.js} +2 -2
  20. package/dist/{chunk-UGLN7QHV.js → chunk-A7ILPMEI.js} +8 -8
  21. package/dist/{chunk-6IU67AEK.js → chunk-A7VLPRPK.js} +9 -9
  22. package/dist/{chunk-AVJDSJ2F.js → chunk-AECBF2FU.js} +2 -2
  23. package/dist/{chunk-W5BVQF44.js → chunk-ATWY4PMW.js} +11 -11
  24. package/dist/{chunk-3C7EYRFZ.js → chunk-C2BQDTZ7.js} +1 -1
  25. package/dist/{chunk-RVH5SUW5.js → chunk-CBJQ2IJP.js} +2 -2
  26. package/dist/{chunk-CR3MTH32.js → chunk-CBZSCNVZ.js} +3 -3
  27. package/dist/{chunk-Z6LF7HQN.js → chunk-CDIQHFMT.js} +2 -2
  28. package/dist/{chunk-FITWGOJ2.js → chunk-CEU5OL24.js} +3 -3
  29. package/dist/{chunk-6BNC6EQ4.js → chunk-CLBP7W64.js} +17 -17
  30. package/dist/{chunk-O3WI5KWW.js → chunk-CMV7TGU6.js} +1 -1
  31. package/dist/{chunk-YISXLPHN.js → chunk-CYH7ETZR.js} +6 -6
  32. package/dist/{chunk-7FBGJFEE.js → chunk-D27D7JMR.js} +8 -8
  33. package/dist/{chunk-MGYZM27B.js → chunk-DFM5HAO6.js} +8 -8
  34. package/dist/{chunk-SJRGMG6A.js → chunk-DXMPLH2J.js} +18 -18
  35. package/dist/{chunk-T6XQL73F.js → chunk-DZSYGNBR.js} +15 -15
  36. package/dist/{chunk-RRTKKSLQ.js → chunk-E7BIDVTR.js} +2 -2
  37. package/dist/{chunk-ZCJDOK2S.js → chunk-EFTGREBJ.js} +13 -13
  38. package/dist/{chunk-VN3DP4LQ.js → chunk-ELRRU4KM.js} +16 -16
  39. package/dist/{chunk-M766ZJ6W.js → chunk-EOVFOBYT.js} +17 -17
  40. package/dist/{chunk-IPKHE5D6.js → chunk-EXOHT6F2.js} +2 -2
  41. package/dist/{chunk-JCZIKA4C.js → chunk-F5HXZJEM.js} +2 -2
  42. package/dist/{chunk-7SW2QWLU.js → chunk-F6WC54UQ.js} +8 -8
  43. package/dist/{chunk-ABWHYWNI.js → chunk-F7OCT2IE.js} +2 -2
  44. package/dist/{chunk-JZU3H6UQ.js → chunk-FOW6IGGQ.js} +21 -21
  45. package/dist/{chunk-DPZHZQKE.js → chunk-FYF5FORG.js} +2 -2
  46. package/dist/{chunk-XY3P7JW7.js → chunk-G6UODAMO.js} +2 -2
  47. package/dist/{chunk-W3BQAZ3Q.js → chunk-GFUTEG6O.js} +8 -8
  48. package/dist/{chunk-A3GY6SOA.js → chunk-GHVDC5ZI.js} +11 -11
  49. package/dist/{chunk-BKVWTZ6A.js → chunk-GQOOGNXG.js} +17 -17
  50. package/dist/{chunk-3HI6Z55Y.js → chunk-GSYU3VSL.js} +2 -2
  51. package/dist/{chunk-XPCM366L.js → chunk-HC5QNGJL.js} +4 -4
  52. package/dist/{chunk-FQXYPF7E.js → chunk-HVNTX2LG.js} +1 -1
  53. package/dist/{chunk-HITVBIJS.js → chunk-HZRLKGBN.js} +6 -6
  54. package/dist/{chunk-V2YTAIQO.js → chunk-I3JTKE3S.js} +1 -1
  55. package/dist/{chunk-DKJA76CJ.js → chunk-I6PIWS6R.js} +8 -8
  56. package/dist/{chunk-NE2W3OO7.js → chunk-IAPL2CJD.js} +15 -15
  57. package/dist/{chunk-T2UYZSCQ.js → chunk-IEPIXEHZ.js} +14 -14
  58. package/dist/{chunk-ICY36XCH.js → chunk-IJY4PBEL.js} +13 -13
  59. package/dist/{chunk-FHH4I4ZV.js → chunk-IKCUZCPH.js} +4 -4
  60. package/dist/{chunk-MMOSZPWJ.js → chunk-IZC2GXW3.js} +1 -1
  61. package/dist/{chunk-5WG5YP4T.js → chunk-J7AUTYY2.js} +9 -9
  62. package/dist/{chunk-DHPACDG7.js → chunk-JCXUDBZY.js} +4 -4
  63. package/dist/{chunk-6M5NK3K3.js → chunk-JIRFOWM5.js} +2 -2
  64. package/dist/{chunk-6QSERWXH.js → chunk-JTFSP7NM.js} +13 -13
  65. package/dist/{chunk-VYDBJ73M.js → chunk-JWYG444T.js} +9 -9
  66. package/dist/{chunk-EFHQ3TWP.js → chunk-KJPMEAI4.js} +73 -5
  67. package/dist/{chunk-6D2CQ5II.js → chunk-LDERDSCO.js} +15 -15
  68. package/dist/{chunk-TDD55CJH.js → chunk-LQSHRO6E.js} +4 -4
  69. package/dist/{chunk-4BN53TG3.js → chunk-LYLPQV6U.js} +16 -15
  70. package/dist/{chunk-K65BJIMT.js → chunk-MDCWBWZ4.js} +13 -13
  71. package/dist/{chunk-3USYZGRF.js → chunk-MESQ7MKL.js} +16 -16
  72. package/dist/{chunk-EBEW3XXQ.js → chunk-MNITN3NP.js} +3 -3
  73. package/dist/{chunk-ZNCEKR4J.js → chunk-NDQLNMHF.js} +3 -3
  74. package/dist/{chunk-AIOQPLA5.js → chunk-NEV5Q2Q2.js} +4 -4
  75. package/dist/{chunk-T6AIP7H5.js → chunk-NMRI4H7W.js} +2 -2
  76. package/dist/{chunk-QRAOANID.js → chunk-NZCSMNDA.js} +11 -11
  77. package/dist/{chunk-RTEYOSJY.js → chunk-O4OPABY2.js} +10 -10
  78. package/dist/{chunk-OT2O76OS.js → chunk-O5YCAEUA.js} +5 -5
  79. package/dist/{chunk-7AVHLZGD.js → chunk-O7DS75HM.js} +18 -18
  80. package/dist/{chunk-2VHF7OXM.js → chunk-OAUMP5UG.js} +1 -1
  81. package/dist/{chunk-6J5OKA4Y.js → chunk-OCIQFELL.js} +9 -9
  82. package/dist/{chunk-7EKXJZ2Y.js → chunk-OIIFN6QA.js} +1 -1
  83. package/dist/{chunk-TYAID7B7.js → chunk-OIQLQNR3.js} +16 -16
  84. package/dist/{chunk-CEXSU4S6.js → chunk-OSW6U7XJ.js} +8 -8
  85. package/dist/{chunk-HVUPKCGJ.js → chunk-OXSOOV3G.js} +2 -2
  86. package/dist/{chunk-TXLH6WHQ.js → chunk-P7AWNXGH.js} +4 -4
  87. package/dist/{chunk-YY6ZQQBP.js → chunk-PLPKQQH7.js} +4 -4
  88. package/dist/{chunk-DE76JROX.js → chunk-PTB7FQO6.js} +9 -9
  89. package/dist/{chunk-7WD63HU2.js → chunk-PTM2MSLG.js} +3 -3
  90. package/dist/{chunk-OLQJTJJU.js → chunk-Q3HOFXZJ.js} +1 -1
  91. package/dist/{chunk-4WBVUHXN.js → chunk-QDXRNUXJ.js} +11 -11
  92. package/dist/{chunk-YYQN46FY.js → chunk-QM26WR3D.js} +16 -16
  93. package/dist/{chunk-GBRFVT63.js → chunk-QMN7OPJO.js} +18 -18
  94. package/dist/{chunk-C6EKFH7J.js → chunk-QNGTVGA5.js} +1 -1
  95. package/dist/{chunk-RUVFXE2L.js → chunk-QVFIEIG4.js} +8 -8
  96. package/dist/{chunk-42EVSKME.js → chunk-REX5VKDS.js} +13 -13
  97. package/dist/{chunk-2DIQQJCB.js → chunk-RHUDKXZI.js} +8 -8
  98. package/dist/{chunk-D46WUV3T.js → chunk-RLQXENLF.js} +12 -12
  99. package/dist/{chunk-JMSCMUCA.js → chunk-RSVCXXR7.js} +6 -6
  100. package/dist/{chunk-L24C55VN.js → chunk-RTEW25XX.js} +2 -2
  101. package/dist/{chunk-AA6YULYB.js → chunk-RVJX43TZ.js} +1 -1
  102. package/dist/{chunk-EYWIDJFU.js → chunk-S3ALLKNL.js} +2 -2
  103. package/dist/{chunk-PCVDV3UZ.js → chunk-ST3FDY3V.js} +4 -4
  104. package/dist/{chunk-2ANOROX3.js → chunk-SUXZLPK4.js} +4 -4
  105. package/dist/{chunk-MC3H7736.js → chunk-SWMTB4YJ.js} +14 -0
  106. package/dist/{chunk-5GGOLAKC.js → chunk-SWSMLAM3.js} +16 -16
  107. package/dist/{chunk-N7IXEHK3.js → chunk-TCNDZ2DU.js} +6 -6
  108. package/dist/{chunk-E36QOJMD.js → chunk-TOZB5WKB.js} +15 -15
  109. package/dist/{chunk-R6XF6UR3.js → chunk-TWFGMB2I.js} +2 -2
  110. package/dist/{chunk-CPA6HPVR.js → chunk-TWHXB23E.js} +7 -7
  111. package/dist/{chunk-B2WLAWNJ.js → chunk-UKSLCJXA.js} +2 -2
  112. package/dist/{chunk-RZPYKDWS.js → chunk-UYS6WI5B.js} +1 -1
  113. package/dist/{chunk-A7UPUQFY.js → chunk-VEQYIF3A.js} +74 -73
  114. package/dist/{chunk-NN2ZQEB4.js → chunk-VF7QVUSU.js} +17 -17
  115. package/dist/{chunk-6JUBZBMW.js → chunk-VHRCYSRY.js} +1 -1
  116. package/dist/{chunk-64EQYWCA.js → chunk-VJ445BDO.js} +7 -7
  117. package/dist/{chunk-XAKWMCXI.js → chunk-VTVOHGCA.js} +2 -2
  118. package/dist/{chunk-27NKUS3X.js → chunk-VUHWQZ2R.js} +6 -6
  119. package/dist/{chunk-ZVM6AKKM.js → chunk-VXJQIEKX.js} +3 -3
  120. package/dist/{chunk-PAMPPUR6.js → chunk-VZDFEIMR.js} +6 -1
  121. package/dist/{chunk-UBBC2XSG.js → chunk-WAL4YKC6.js} +7 -7
  122. package/dist/{chunk-GDLULHTC.js → chunk-WJBYZ6E2.js} +6 -6
  123. package/dist/{chunk-QZSX3F7C.js → chunk-WJKOWAK2.js} +17 -15
  124. package/dist/{chunk-66YVAGGM.js → chunk-WPJ36T2R.js} +12 -12
  125. package/dist/{chunk-KEM4SDDP.js → chunk-WRGI2YDI.js} +2 -2
  126. package/dist/{chunk-2BF2EYJV.js → chunk-WYFIXP54.js} +1 -1
  127. package/dist/{chunk-R77KLRB3.js → chunk-X3E7VCYN.js} +11 -11
  128. package/dist/{chunk-I4JRCD6M.js → chunk-X56AKULG.js} +9 -9
  129. package/dist/{chunk-ONLS5QA5.js → chunk-XOJGWO3E.js} +8 -8
  130. package/dist/{chunk-6JCPI55B.js → chunk-XTGHJH4A.js} +3 -3
  131. package/dist/{chunk-LR3R6Z2A.js → chunk-XZS7MDIL.js} +4 -4
  132. package/dist/{chunk-2RMYG36Q.js → chunk-Y6DO45QO.js} +5 -5
  133. package/dist/{chunk-4BKGMUIK.js → chunk-YD52KDIY.js} +16 -16
  134. package/dist/{chunk-XPTOBS2D.js → chunk-YI57W6DD.js} +17 -17
  135. package/dist/{chunk-GT4I4ZWM.js → chunk-YIPT3QYL.js} +10 -10
  136. package/dist/{chunk-JIITQXFB.js → chunk-YKXXPSL3.js} +71 -71
  137. package/dist/{chunk-Q4D5X7QB.js → chunk-Z3JYKHOY.js} +9 -9
  138. package/dist/{chunk-23W7VWKR.js → chunk-Z5NXGHVR.js} +2 -2
  139. package/dist/{chunk-EDS2L2LD.js → chunk-ZZ6TRP5V.js} +18 -18
  140. package/dist/files.json +343 -343
  141. package/package.json +4 -4
@@ -7,10 +7,10 @@ import {
7
7
  acceptStandardChecks,
8
8
  draftStandardChecks,
9
9
  estimateScan
10
- } from "./chunk-L24C55VN.js";
11
- import "./chunk-23W7VWKR.js";
12
- import "./chunk-7EKXJZ2Y.js";
13
- import "./chunk-MC3H7736.js";
10
+ } from "./chunk-RTEW25XX.js";
11
+ import "./chunk-Z5NXGHVR.js";
12
+ import "./chunk-OIIFN6QA.js";
13
+ import "./chunk-SWMTB4YJ.js";
14
14
  import "./chunk-GQ4N4WKF.js";
15
15
  import "./chunk-CNUKCS2T.js";
16
16
  import {
@@ -21,7 +21,7 @@ import {
21
21
  roundsUsed,
22
22
  runCritic,
23
23
  waitingLenses
24
- } from "./chunk-3HI6Z55Y.js";
24
+ } from "./chunk-GSYU3VSL.js";
25
25
  import {
26
26
  changeFolder,
27
27
  changeStore,
@@ -29,7 +29,7 @@ import {
29
29
  phaseStage,
30
30
  stageCommand,
31
31
  statePhase
32
- } from "./chunk-XY3P7JW7.js";
32
+ } from "./chunk-G6UODAMO.js";
33
33
  import {
34
34
  AiOffError,
35
35
  HandoffRuntime,
@@ -15,24 +15,24 @@ import {
15
15
  glossaryScan,
16
16
  testsGenerate,
17
17
  traceCommand
18
- } from "./chunk-HITVBIJS.js";
19
- import "./chunk-2ANOROX3.js";
18
+ } from "./chunk-HZRLKGBN.js";
19
+ import "./chunk-SUXZLPK4.js";
20
20
  import "./chunk-65NYPGRC.js";
21
21
  import "./chunk-VOGCSYOI.js";
22
- import "./chunk-CKSITVS4.js";
22
+ import "./chunk-7MPR7BKQ.js";
23
23
  import "./chunk-L6SGQIR3.js";
24
- import "./chunk-3HI6Z55Y.js";
25
- import "./chunk-XY3P7JW7.js";
24
+ import "./chunk-GSYU3VSL.js";
25
+ import "./chunk-G6UODAMO.js";
26
26
  import "./chunk-4AK7IBVP.js";
27
27
  import "./chunk-7JUKDRSZ.js";
28
- import "./chunk-27NKUS3X.js";
29
- import "./chunk-L24C55VN.js";
30
- import "./chunk-PAMPPUR6.js";
31
- import "./chunk-23W7VWKR.js";
32
- import "./chunk-7EKXJZ2Y.js";
33
- import "./chunk-MC3H7736.js";
34
- import "./chunk-T6AIP7H5.js";
35
- import "./chunk-EFHQ3TWP.js";
28
+ import "./chunk-VUHWQZ2R.js";
29
+ import "./chunk-RTEW25XX.js";
30
+ import "./chunk-VZDFEIMR.js";
31
+ import "./chunk-Z5NXGHVR.js";
32
+ import "./chunk-OIIFN6QA.js";
33
+ import "./chunk-SWMTB4YJ.js";
34
+ import "./chunk-NMRI4H7W.js";
35
+ import "./chunk-KJPMEAI4.js";
36
36
  import "./chunk-GQ4N4WKF.js";
37
37
  import "./chunk-CNUKCS2T.js";
38
38
  import "./chunk-S2A7YC3Q.js";
@@ -8,17 +8,17 @@ import {
8
8
  guideCommand,
9
9
  openChanges,
10
10
  siteBuildCommand
11
- } from "./chunk-B2WLAWNJ.js";
12
- import "./chunk-XY3P7JW7.js";
11
+ } from "./chunk-UKSLCJXA.js";
12
+ import "./chunk-G6UODAMO.js";
13
13
  import "./chunk-4AK7IBVP.js";
14
14
  import "./chunk-7JUKDRSZ.js";
15
- import "./chunk-27NKUS3X.js";
16
- import "./chunk-L24C55VN.js";
17
- import "./chunk-PAMPPUR6.js";
18
- import "./chunk-23W7VWKR.js";
19
- import "./chunk-7EKXJZ2Y.js";
20
- import "./chunk-MC3H7736.js";
21
- import "./chunk-EFHQ3TWP.js";
15
+ import "./chunk-VUHWQZ2R.js";
16
+ import "./chunk-RTEW25XX.js";
17
+ import "./chunk-VZDFEIMR.js";
18
+ import "./chunk-Z5NXGHVR.js";
19
+ import "./chunk-OIIFN6QA.js";
20
+ import "./chunk-SWMTB4YJ.js";
21
+ import "./chunk-KJPMEAI4.js";
22
22
  import "./chunk-GQ4N4WKF.js";
23
23
  import "./chunk-CNUKCS2T.js";
24
24
  import "./chunk-S2A7YC3Q.js";
@@ -350,8 +350,8 @@ async function checkoutState(dir, git = createGit()) {
350
350
 
351
351
  // packages/workspace/dist/manager.js
352
352
  import { existsSync as existsSync2 } from "node:fs";
353
- import { mkdir as mkdir3, rm as rm2 } from "node:fs/promises";
354
- import { dirname as dirname2 } from "node:path";
353
+ import { mkdir as mkdir3, readdir as readdir2, rm as rm2 } from "node:fs/promises";
354
+ import { basename, dirname as dirname2, join as join4 } from "node:path";
355
355
  function isInPlace(url) {
356
356
  return url === "." || url.startsWith("./");
357
357
  }
@@ -385,7 +385,34 @@ function createWorkspace(root, git = createGit()) {
385
385
  const b = await remoteDefaultBranch(cwd, git);
386
386
  return b ? { remoteDefault: b } : {};
387
387
  };
388
- async function syncOne(repo) {
388
+ async function copyFrom(repo, from, dest) {
389
+ const branch = repo.defaultBranch;
390
+ const sha = async (ref) => {
391
+ try {
392
+ return (await g(["rev-parse", "--verify", "--quiet", `${ref}^{commit}`], from)).stdout.trim();
393
+ } catch {
394
+ return "";
395
+ }
396
+ };
397
+ const at = await sha(`refs/remotes/origin/${branch}`) || await sha(`refs/heads/${branch}`);
398
+ if (!at)
399
+ return {
400
+ id: repo.id,
401
+ action: "failed",
402
+ reason: `your clone at ${from} has no ${branch} branch; fetch it there, or sync without --from`
403
+ };
404
+ await g(["clone", "--quiet", "--no-tags", "--no-checkout", "--", from, dest]);
405
+ await g(["remote", "set-url", "origin", repo.url], dest);
406
+ const refs = (await g(["for-each-ref", "--format=%(refname)", "refs/remotes/origin"], dest)).stdout.split("\n").filter(Boolean);
407
+ for (const r of refs)
408
+ await g(["update-ref", "-d", r], dest);
409
+ await g(["update-ref", `refs/remotes/origin/${branch}`, at], dest);
410
+ if (repo.sparse.length > 0)
411
+ await g(["sparse-checkout", "set", "--", ...repo.sparse], dest);
412
+ await g(["checkout", "--quiet", "-B", branch, at], dest);
413
+ return { id: repo.id, action: "cloned", sha: await head(dest), from };
414
+ }
415
+ async function syncOne(repo, local) {
389
416
  if (repo.archived)
390
417
  return { id: repo.id, action: "skipped", reason: "archived" };
391
418
  if (isInPlace(repo.url))
@@ -399,6 +426,9 @@ function createWorkspace(root, git = createGit()) {
399
426
  try {
400
427
  if (!existsSync2(dest)) {
401
428
  await mkdir3(dirname2(dest), { recursive: true });
429
+ const from = local && yourClone(local, repo);
430
+ if (from)
431
+ return await copyFrom(repo, from, dest);
402
432
  const args = ["clone", "--no-tags", "--branch", branch, "--filter=blob:none"];
403
433
  if (repo.sparse.length > 0)
404
434
  args.push("--sparse");
@@ -468,12 +498,13 @@ function createWorkspace(root, git = createGit()) {
468
498
  }
469
499
  return {
470
500
  root,
471
- async sync(repos) {
501
+ async sync(repos, opts = {}) {
472
502
  if (repos.some((r) => !r.archived && !isInPlace(r.url)))
473
503
  await ensureGitignore(root);
474
504
  const out = [];
505
+ const local = opts.from ? await localClones(opts.from, git) : void 0;
475
506
  for (const repo of repos)
476
- out.push(await syncOne(repo));
507
+ out.push(await syncOne(repo, local));
477
508
  return out;
478
509
  },
479
510
  async checkoutBranch(repo, branch) {
@@ -556,6 +587,43 @@ function createWorkspace(root, git = createGit()) {
556
587
  }
557
588
  };
558
589
  }
590
+ function remoteKey(url) {
591
+ let u = url.trim().replace(/\\/g, "/");
592
+ const scp = /^[\w.-]+@([^:/]+):(.+)$/.exec(u);
593
+ if (scp)
594
+ u = `${scp[1]}/${scp[2]}`;
595
+ u = u.replace(/^[a-z+]+:\/\//i, "").replace(/^[^@/]+@/, "");
596
+ u = u.replace(/\/{2,}/g, "/").replace(/\/+$/, "").replace(/\.git$/i, "");
597
+ const slash = u.indexOf("/");
598
+ return slash < 0 ? u.toLowerCase() : u.slice(0, slash).toLowerCase() + u.slice(slash);
599
+ }
600
+ async function localClones(dir, g) {
601
+ const found = /* @__PURE__ */ new Map();
602
+ const visit = async (d, depth) => {
603
+ let names;
604
+ try {
605
+ names = await readdir2(d);
606
+ } catch {
607
+ return;
608
+ }
609
+ if (names.includes(".git")) {
610
+ const url = await g(["config", "--get", "remote.origin.url"], d).then((r) => r.stdout.trim(), () => "");
611
+ if (url && !found.has(`url:${remoteKey(url)}`))
612
+ found.set(`url:${remoteKey(url)}`, d);
613
+ if (!found.has(`name:${basename(d)}`))
614
+ found.set(`name:${basename(d)}`, d);
615
+ return;
616
+ }
617
+ if (depth === 0)
618
+ return;
619
+ for (const n of names)
620
+ if (!n.startsWith(".") && n !== "node_modules")
621
+ await visit(join4(d, n), depth - 1);
622
+ };
623
+ await visit(dir, 2);
624
+ return found;
625
+ }
626
+ var yourClone = (local, repo) => local.get(`url:${remoteKey(repo.url)}`) ?? local.get(`name:${repo.id}`);
559
627
 
560
628
  // packages/workspace/dist/identity.js
561
629
  import { userInfo } from "node:os";
@@ -9,24 +9,24 @@ import {
9
9
  readStamp,
10
10
  upgradeCheck,
11
11
  upgradeCommand
12
- } from "./chunk-YISXLPHN.js";
13
- import "./chunk-GDLULHTC.js";
14
- import "./chunk-IPKHE5D6.js";
15
- import "./chunk-CKSITVS4.js";
12
+ } from "./chunk-CYH7ETZR.js";
13
+ import "./chunk-WJBYZ6E2.js";
14
+ import "./chunk-EXOHT6F2.js";
15
+ import "./chunk-7MPR7BKQ.js";
16
16
  import "./chunk-L6SGQIR3.js";
17
- import "./chunk-3HI6Z55Y.js";
18
- import "./chunk-XY3P7JW7.js";
17
+ import "./chunk-GSYU3VSL.js";
18
+ import "./chunk-G6UODAMO.js";
19
19
  import "./chunk-4AK7IBVP.js";
20
20
  import "./chunk-7JUKDRSZ.js";
21
- import "./chunk-27NKUS3X.js";
22
- import "./chunk-L24C55VN.js";
23
- import "./chunk-PAMPPUR6.js";
24
- import "./chunk-23W7VWKR.js";
25
- import "./chunk-7EKXJZ2Y.js";
26
- import "./chunk-MC3H7736.js";
27
- import "./chunk-T6AIP7H5.js";
28
- import "./chunk-RZPYKDWS.js";
29
- import "./chunk-EFHQ3TWP.js";
21
+ import "./chunk-VUHWQZ2R.js";
22
+ import "./chunk-RTEW25XX.js";
23
+ import "./chunk-VZDFEIMR.js";
24
+ import "./chunk-Z5NXGHVR.js";
25
+ import "./chunk-OIIFN6QA.js";
26
+ import "./chunk-SWMTB4YJ.js";
27
+ import "./chunk-NMRI4H7W.js";
28
+ import "./chunk-UYS6WI5B.js";
29
+ import "./chunk-KJPMEAI4.js";
30
30
  import "./chunk-GQ4N4WKF.js";
31
31
  import "./chunk-CNUKCS2T.js";
32
32
  import "./chunk-S2A7YC3Q.js";
@@ -5,20 +5,20 @@ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
5
  var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
6
  import {
7
7
  loadCatalog
8
- } from "./chunk-FITWGOJ2.js";
8
+ } from "./chunk-CEU5OL24.js";
9
9
  import {
10
10
  TARGET_DIR,
11
11
  mergeDelta,
12
12
  readDeltas
13
- } from "./chunk-CKSITVS4.js";
13
+ } from "./chunk-7MPR7BKQ.js";
14
14
  import {
15
15
  changeStore
16
- } from "./chunk-XY3P7JW7.js";
16
+ } from "./chunk-G6UODAMO.js";
17
17
  import {
18
18
  changeView,
19
19
  toDrawio,
20
20
  toMermaid
21
- } from "./chunk-PAMPPUR6.js";
21
+ } from "./chunk-VZDFEIMR.js";
22
22
  import {
23
23
  changesDirOf,
24
24
  changesRelOf,
@@ -5,27 +5,27 @@ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
5
  var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
6
  import {
7
7
  storeSummaryLines
8
- } from "./chunk-2VHF7OXM.js";
8
+ } from "./chunk-OAUMP5UG.js";
9
9
  import {
10
10
  SCAN_REVIEW_OUTPUT
11
- } from "./chunk-KEM4SDDP.js";
11
+ } from "./chunk-WRGI2YDI.js";
12
12
  import {
13
13
  completeCriticLens,
14
14
  yamlAnswerProblems
15
- } from "./chunk-6M5NK3K3.js";
15
+ } from "./chunk-JIRFOWM5.js";
16
16
  import {
17
17
  completeFeatureNaming
18
- } from "./chunk-LR3R6Z2A.js";
18
+ } from "./chunk-XZS7MDIL.js";
19
19
  import {
20
20
  completeTemplatesDraft
21
- } from "./chunk-AA6YULYB.js";
21
+ } from "./chunk-RVJX43TZ.js";
22
22
  import {
23
23
  completeGlossaryScan
24
- } from "./chunk-HITVBIJS.js";
24
+ } from "./chunk-HZRLKGBN.js";
25
25
  import {
26
26
  completeHandUpLens,
27
27
  handUpLensTask
28
- } from "./chunk-OT2O76OS.js";
28
+ } from "./chunk-O5YCAEUA.js";
29
29
  import {
30
30
  DRAFT_OUTPUT,
31
31
  STORY_PROSE_OUTPUT,
@@ -35,11 +35,11 @@ import {
35
35
  formatDraftProblems,
36
36
  parseDraft,
37
37
  stageOfOutput
38
- } from "./chunk-CKSITVS4.js";
38
+ } from "./chunk-7MPR7BKQ.js";
39
39
  import {
40
40
  lensAnswerProblem,
41
41
  lensRunOf
42
- } from "./chunk-3HI6Z55Y.js";
42
+ } from "./chunk-GSYU3VSL.js";
43
43
  import {
44
44
  ORG_FLOW,
45
45
  createOpenSpec,
@@ -49,21 +49,21 @@ import {
49
49
  import {
50
50
  GLOSSARY_CHANGE,
51
51
  GLOSSARY_OUTPUT
52
- } from "./chunk-27NKUS3X.js";
52
+ } from "./chunk-VUHWQZ2R.js";
53
53
  import {
54
54
  KNOWLEDGE_SCAN_OUTPUT,
55
55
  NAMING_CHANGE,
56
56
  NAMING_OUTPUT,
57
57
  checkScanAnswer,
58
58
  readSnapshot
59
- } from "./chunk-L24C55VN.js";
59
+ } from "./chunk-RTEW25XX.js";
60
60
  import {
61
61
  GitError,
62
62
  createWorkspace,
63
63
  intellijProjectPath,
64
64
  loadRepos,
65
65
  vscodeWorkspacePath
66
- } from "./chunk-EFHQ3TWP.js";
66
+ } from "./chunk-KJPMEAI4.js";
67
67
  import {
68
68
  HandoffRuntime
69
69
  } from "./chunk-CNUKCS2T.js";
@@ -85,7 +85,7 @@ function pick(all, wanted, io) {
85
85
  }
86
86
  return wanted.map((w) => byId.get(w));
87
87
  }
88
- async function workspaceSync(root, repoIds, io) {
88
+ async function workspaceSync(root, repoIds, io, o = {}) {
89
89
  const all = await loadRepos(root);
90
90
  if (all.length === 0) {
91
91
  io.err("No repos found. Add org-pack/profiles/<platform>/repos.manifest.yaml first.");
@@ -94,10 +94,11 @@ async function workspaceSync(root, repoIds, io) {
94
94
  const repos = pick(all, repoIds, io);
95
95
  if (!repos)
96
96
  return 2;
97
- const results = await createWorkspace(root).sync(repos);
97
+ const results = await createWorkspace(root).sync(repos, o.from ? { from: o.from } : {});
98
98
  for (const r of results) {
99
99
  const sha = r.sha ? ` ${r.sha.slice(0, 12)}` : "";
100
- const line = `${r.id}: ${r.action}${sha}${r.reason ? ` (${r.reason})` : ""}`;
100
+ const why = r.from ? `copied from your clone at ${r.from}` : r.reason;
101
+ const line = `${r.id}: ${r.action}${sha}${why ? ` (${why})` : ""}`;
101
102
  if (r.action === "failed")
102
103
  io.err(line);
103
104
  else
@@ -14,21 +14,21 @@ import {
14
14
  onboardFrameworkCheck,
15
15
  scanReview,
16
16
  scanSurvey
17
- } from "./chunk-GLUX4EEP.js";
18
- import "./chunk-FITWGOJ2.js";
17
+ } from "./chunk-4UL6IZXB.js";
18
+ import "./chunk-CEU5OL24.js";
19
19
  import {
20
20
  repoFor
21
- } from "./chunk-O3WI5KWW.js";
22
- import "./chunk-KEM4SDDP.js";
23
- import "./chunk-ZVM6AKKM.js";
24
- import "./chunk-27NKUS3X.js";
25
- import "./chunk-L24C55VN.js";
26
- import "./chunk-PAMPPUR6.js";
27
- import "./chunk-23W7VWKR.js";
28
- import "./chunk-7EKXJZ2Y.js";
29
- import "./chunk-MC3H7736.js";
30
- import "./chunk-T6AIP7H5.js";
31
- import "./chunk-EFHQ3TWP.js";
21
+ } from "./chunk-CMV7TGU6.js";
22
+ import "./chunk-WRGI2YDI.js";
23
+ import "./chunk-VXJQIEKX.js";
24
+ import "./chunk-VUHWQZ2R.js";
25
+ import "./chunk-RTEW25XX.js";
26
+ import "./chunk-VZDFEIMR.js";
27
+ import "./chunk-Z5NXGHVR.js";
28
+ import "./chunk-OIIFN6QA.js";
29
+ import "./chunk-SWMTB4YJ.js";
30
+ import "./chunk-NMRI4H7W.js";
31
+ import "./chunk-KJPMEAI4.js";
32
32
  import "./chunk-GQ4N4WKF.js";
33
33
  import "./chunk-CNUKCS2T.js";
34
34
  import "./chunk-S2A7YC3Q.js";
@@ -9,11 +9,11 @@ import {
9
9
  } from "./chunk-R6RY4Q5T.js";
10
10
  import {
11
11
  runDesignBench
12
- } from "./chunk-CPA6HPVR.js";
13
- import "./chunk-BOHJZTEQ.js";
14
- import "./chunk-MVZVGYXH.js";
15
- import "./chunk-KEM4SDDP.js";
16
- import "./chunk-2ANOROX3.js";
12
+ } from "./chunk-TWHXB23E.js";
13
+ import "./chunk-3BSRA5O4.js";
14
+ import "./chunk-2OC7ZEJL.js";
15
+ import "./chunk-WRGI2YDI.js";
16
+ import "./chunk-SUXZLPK4.js";
17
17
  import "./chunk-65NYPGRC.js";
18
18
  import {
19
19
  TARGET_DIR,
@@ -25,26 +25,26 @@ import {
25
25
  stageEnd,
26
26
  stageGate,
27
27
  storiesStage
28
- } from "./chunk-CKSITVS4.js";
28
+ } from "./chunk-7MPR7BKQ.js";
29
29
  import "./chunk-L6SGQIR3.js";
30
30
  import {
31
31
  gateStatus,
32
32
  ownerWaitsLine
33
- } from "./chunk-3HI6Z55Y.js";
33
+ } from "./chunk-GSYU3VSL.js";
34
34
  import {
35
35
  changeFolder,
36
36
  loadChangeContext
37
- } from "./chunk-XY3P7JW7.js";
37
+ } from "./chunk-G6UODAMO.js";
38
38
  import "./chunk-4AK7IBVP.js";
39
39
  import "./chunk-7JUKDRSZ.js";
40
- import "./chunk-27NKUS3X.js";
41
- import "./chunk-L24C55VN.js";
42
- import "./chunk-PAMPPUR6.js";
43
- import "./chunk-23W7VWKR.js";
44
- import "./chunk-7EKXJZ2Y.js";
45
- import "./chunk-MC3H7736.js";
46
- import "./chunk-T6AIP7H5.js";
47
- import "./chunk-EFHQ3TWP.js";
40
+ import "./chunk-VUHWQZ2R.js";
41
+ import "./chunk-RTEW25XX.js";
42
+ import "./chunk-VZDFEIMR.js";
43
+ import "./chunk-Z5NXGHVR.js";
44
+ import "./chunk-OIIFN6QA.js";
45
+ import "./chunk-SWMTB4YJ.js";
46
+ import "./chunk-NMRI4H7W.js";
47
+ import "./chunk-KJPMEAI4.js";
48
48
  import "./chunk-GQ4N4WKF.js";
49
49
  import {
50
50
  RuntimeConfigError,
@@ -5,14 +5,14 @@ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
5
  var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
6
  import {
7
7
  readCatalog
8
- } from "./chunk-27NKUS3X.js";
8
+ } from "./chunk-VUHWQZ2R.js";
9
9
  import {
10
10
  scopeWords
11
- } from "./chunk-L24C55VN.js";
11
+ } from "./chunk-RTEW25XX.js";
12
12
  import {
13
13
  baseClonePath,
14
14
  loadManifest
15
- } from "./chunk-EFHQ3TWP.js";
15
+ } from "./chunk-KJPMEAI4.js";
16
16
  import {
17
17
  Sources,
18
18
  catalogDirOf,
@@ -8,17 +8,17 @@ import {
8
8
  } from "./chunk-VOGCSYOI.js";
9
9
  import {
10
10
  readCatalog
11
- } from "./chunk-27NKUS3X.js";
11
+ } from "./chunk-VUHWQZ2R.js";
12
12
  import {
13
13
  TriageError,
14
14
  buildTriage,
15
15
  classify,
16
16
  scanInputs
17
- } from "./chunk-23W7VWKR.js";
17
+ } from "./chunk-Z5NXGHVR.js";
18
18
  import {
19
19
  readDrawio,
20
20
  reconcile
21
- } from "./chunk-7EKXJZ2Y.js";
21
+ } from "./chunk-OIIFN6QA.js";
22
22
  import {
23
23
  inputsDirOf,
24
24
  loadOrgPack,
@@ -9,14 +9,14 @@ import {
9
9
  } from "./chunk-3G4YI4ZU.js";
10
10
  import {
11
11
  upgradeCheck
12
- } from "./chunk-YISXLPHN.js";
12
+ } from "./chunk-CYH7ETZR.js";
13
13
  import {
14
14
  ASSISTANT_FORMATS,
15
15
  assistantTier,
16
16
  generateAssistantFiles,
17
17
  readProbes,
18
18
  tierLine
19
- } from "./chunk-IPKHE5D6.js";
19
+ } from "./chunk-EXOHT6F2.js";
20
20
  import {
21
21
  BETA_FEATURES,
22
22
  OPENSPEC_PINNED,
@@ -29,14 +29,14 @@ import {
29
29
  } from "./chunk-4AK7IBVP.js";
30
30
  import {
31
31
  versionAtLeast
32
- } from "./chunk-RZPYKDWS.js";
32
+ } from "./chunk-UYS6WI5B.js";
33
33
  import {
34
34
  baseClonePath,
35
35
  createGit,
36
36
  isInPlace,
37
37
  loadRepos,
38
38
  remoteDefaultBranch
39
- } from "./chunk-EFHQ3TWP.js";
39
+ } from "./chunk-KJPMEAI4.js";
40
40
  import {
41
41
  modelEnvOf,
42
42
  modelSourceWords,
@@ -1004,8 +1004,8 @@ var DOCUMENT_EXTENSIONS = /\.(docx|pptx|xlsx|pdf|md|markdown|html?|txt)$/i;
1004
1004
  async function documentNodes(path, bytes) {
1005
1005
  const out = { nodes: [], names: [], links: [] };
1006
1006
  const [{ readDocument }, { screenFile }] = await Promise.all([
1007
- import("./chunk-4NDAAFQT.js"),
1008
- import("./chunk-6JCPI55B.js")
1007
+ import("./chunk-A4M64ENV.js"),
1008
+ import("./chunk-XTGHJH4A.js")
1009
1009
  ]);
1010
1010
  const screen = screenFile(path, bytes);
1011
1011
  if (screen.problem)
@@ -14,22 +14,22 @@ import {
14
14
  findNeeds,
15
15
  markNeed,
16
16
  readNeeds
17
- } from "./chunk-CKSITVS4.js";
17
+ } from "./chunk-7MPR7BKQ.js";
18
18
  import "./chunk-L6SGQIR3.js";
19
- import "./chunk-3HI6Z55Y.js";
20
- import "./chunk-XY3P7JW7.js";
19
+ import "./chunk-GSYU3VSL.js";
20
+ import "./chunk-G6UODAMO.js";
21
21
  import "./chunk-4AK7IBVP.js";
22
22
  import "./chunk-7JUKDRSZ.js";
23
- import "./chunk-27NKUS3X.js";
23
+ import "./chunk-VUHWQZ2R.js";
24
24
  import {
25
25
  readKnowledge
26
- } from "./chunk-L24C55VN.js";
27
- import "./chunk-PAMPPUR6.js";
28
- import "./chunk-23W7VWKR.js";
29
- import "./chunk-7EKXJZ2Y.js";
30
- import "./chunk-MC3H7736.js";
31
- import "./chunk-T6AIP7H5.js";
32
- import "./chunk-EFHQ3TWP.js";
26
+ } from "./chunk-RTEW25XX.js";
27
+ import "./chunk-VZDFEIMR.js";
28
+ import "./chunk-Z5NXGHVR.js";
29
+ import "./chunk-OIIFN6QA.js";
30
+ import "./chunk-SWMTB4YJ.js";
31
+ import "./chunk-NMRI4H7W.js";
32
+ import "./chunk-KJPMEAI4.js";
33
33
  import "./chunk-GQ4N4WKF.js";
34
34
  import {
35
35
  RuntimeConfigError,
@@ -6,18 +6,18 @@ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
6
  import {
7
7
  buildDigest,
8
8
  digestCommand
9
- } from "./chunk-7WD63HU2.js";
10
- import "./chunk-3HI6Z55Y.js";
11
- import "./chunk-XY3P7JW7.js";
9
+ } from "./chunk-PTM2MSLG.js";
10
+ import "./chunk-GSYU3VSL.js";
11
+ import "./chunk-G6UODAMO.js";
12
12
  import "./chunk-4AK7IBVP.js";
13
13
  import "./chunk-7JUKDRSZ.js";
14
- import "./chunk-27NKUS3X.js";
15
- import "./chunk-L24C55VN.js";
16
- import "./chunk-PAMPPUR6.js";
17
- import "./chunk-23W7VWKR.js";
18
- import "./chunk-7EKXJZ2Y.js";
19
- import "./chunk-MC3H7736.js";
20
- import "./chunk-EFHQ3TWP.js";
14
+ import "./chunk-VUHWQZ2R.js";
15
+ import "./chunk-RTEW25XX.js";
16
+ import "./chunk-VZDFEIMR.js";
17
+ import "./chunk-Z5NXGHVR.js";
18
+ import "./chunk-OIIFN6QA.js";
19
+ import "./chunk-SWMTB4YJ.js";
20
+ import "./chunk-KJPMEAI4.js";
21
21
  import "./chunk-GQ4N4WKF.js";
22
22
  import "./chunk-CNUKCS2T.js";
23
23
  import "./chunk-S2A7YC3Q.js";
@@ -11,7 +11,7 @@ import {
11
11
  generateAssistantFiles,
12
12
  parseHeader,
13
13
  writeAssistantFiles
14
- } from "./chunk-IPKHE5D6.js";
14
+ } from "./chunk-EXOHT6F2.js";
15
15
  import {
16
16
  CONSTITUTION_FILE_LABEL,
17
17
  buildContext,
@@ -33,7 +33,7 @@ import {
33
33
  sectionMatching,
34
34
  toFinding,
35
35
  writeFinding
36
- } from "./chunk-3HI6Z55Y.js";
36
+ } from "./chunk-GSYU3VSL.js";
37
37
  import {
38
38
  changeFolder,
39
39
  changeFootprint,
@@ -41,10 +41,10 @@ import {
41
41
  changeTypeOf,
42
42
  loadChangeContext,
43
43
  referenceMetarepoIn
44
- } from "./chunk-XY3P7JW7.js";
44
+ } from "./chunk-G6UODAMO.js";
45
45
  import {
46
46
  readSpecKitFeatures
47
- } from "./chunk-MC3H7736.js";
47
+ } from "./chunk-SWMTB4YJ.js";
48
48
  import {
49
49
  baseClonePath,
50
50
  changeWorktreesDir,
@@ -52,7 +52,7 @@ import {
52
52
  loadRepos,
53
53
  readChangeRepos,
54
54
  toRepoRelative
55
- } from "./chunk-EFHQ3TWP.js";
55
+ } from "./chunk-KJPMEAI4.js";
56
56
  import {
57
57
  fsRepo
58
58
  } from "./chunk-GQ4N4WKF.js";