issue-flow 0.13.0 → 0.14.0

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 (162) hide show
  1. package/dist/agent-OX3KPHE4.js +30 -0
  2. package/dist/{analyze-WS47UYGN.js → analyze-WIND2SEB.js} +21 -18
  3. package/dist/{analyze-WS47UYGN.js.map → analyze-WIND2SEB.js.map} +1 -1
  4. package/dist/{apply-OS62UWRN.js → apply-JNOI2LR4.js} +14 -11
  5. package/dist/{apply-OS62UWRN.js.map → apply-JNOI2LR4.js.map} +1 -1
  6. package/dist/{bench-SA3BOME5.js → bench-B4VZON7E.js} +30 -26
  7. package/dist/{bench-SA3BOME5.js.map → bench-B4VZON7E.js.map} +1 -1
  8. package/dist/{chunk-PIVGJM6K.js → chunk-2IQ6M4ZE.js} +11 -11
  9. package/dist/{chunk-QCXPNSEL.js → chunk-3BWZO4YI.js} +2 -2
  10. package/dist/chunk-3WFZETIM.js +163 -0
  11. package/dist/chunk-3WFZETIM.js.map +1 -0
  12. package/dist/{chunk-6FDFRNXZ.js → chunk-67YIU2VB.js} +25 -20
  13. package/dist/chunk-67YIU2VB.js.map +1 -0
  14. package/dist/{chunk-TM67EHSV.js → chunk-6BENHR2I.js} +19 -19
  15. package/dist/chunk-6BENHR2I.js.map +1 -0
  16. package/dist/{chunk-IYV6KNVF.js → chunk-6QYMSNVA.js} +66 -240
  17. package/dist/chunk-6QYMSNVA.js.map +1 -0
  18. package/dist/{chunk-IV5SS4JN.js → chunk-76MMPJ53.js} +9 -7
  19. package/dist/{chunk-IV5SS4JN.js.map → chunk-76MMPJ53.js.map} +1 -1
  20. package/dist/{chunk-LZ6GFQAG.js → chunk-B72RQZBV.js} +35 -25
  21. package/dist/chunk-B72RQZBV.js.map +1 -0
  22. package/dist/{chunk-KQHB7ZT3.js → chunk-BEZ5BA5U.js} +82 -16
  23. package/dist/chunk-BEZ5BA5U.js.map +1 -0
  24. package/dist/{chunk-BQDQTIM7.js → chunk-BRCNQXYQ.js} +4 -4
  25. package/dist/{chunk-ARFVHC2F.js → chunk-CGKLE6WR.js} +115 -23
  26. package/dist/chunk-CGKLE6WR.js.map +1 -0
  27. package/dist/{chunk-BHJCGWQX.js → chunk-F6TOYSYY.js} +9 -9
  28. package/dist/chunk-G5EK2XRN.js +25 -0
  29. package/dist/chunk-G5EK2XRN.js.map +1 -0
  30. package/dist/{chunk-TX5WIVYP.js → chunk-HAKDLR6N.js} +6 -1
  31. package/dist/chunk-HAKDLR6N.js.map +1 -0
  32. package/dist/{chunk-DIG5XKQQ.js → chunk-J3SOTUVI.js} +2 -2
  33. package/dist/{chunk-SNTTOQAD.js → chunk-JN6D3MY6.js} +2 -2
  34. package/dist/{chunk-MIVHK5YI.js → chunk-KMRFRXIT.js} +3 -3
  35. package/dist/{chunk-5TB6KLC2.js → chunk-KT7JKOXB.js} +8 -8
  36. package/dist/{chunk-NEZZ6KDR.js → chunk-LBGHI4S2.js} +49 -2
  37. package/dist/chunk-LBGHI4S2.js.map +1 -0
  38. package/dist/{chunk-3XLCNVMD.js → chunk-LEW4QM74.js} +2 -2
  39. package/dist/{chunk-IHIEXUTC.js → chunk-LFEQIZLB.js} +85 -10
  40. package/dist/chunk-LFEQIZLB.js.map +1 -0
  41. package/dist/{chunk-TVN2JVOF.js → chunk-OOVG2KBY.js} +3 -3
  42. package/dist/{chunk-7KD66LIM.js → chunk-OR43364P.js} +3 -3
  43. package/dist/{chunk-J62QSVP6.js → chunk-PBTA3QQX.js} +8 -7
  44. package/dist/{chunk-J62QSVP6.js.map → chunk-PBTA3QQX.js.map} +1 -1
  45. package/dist/{chunk-664Y3NDX.js → chunk-PHW2YV6N.js} +8 -8
  46. package/dist/{chunk-PV4OX5TC.js → chunk-PZTWU277.js} +11 -11
  47. package/dist/{chunk-HJGGNLWI.js → chunk-QD4VOILZ.js} +9 -9
  48. package/dist/{chunk-CNBYCMSU.js → chunk-QJ5UZAH5.js} +27 -18
  49. package/dist/{chunk-CNBYCMSU.js.map → chunk-QJ5UZAH5.js.map} +1 -1
  50. package/dist/{chunk-HQAHNIAR.js → chunk-QK7WUO7A.js} +14 -14
  51. package/dist/{chunk-UJ7XWK7J.js → chunk-QZVKRDJY.js} +16 -14
  52. package/dist/{chunk-UJ7XWK7J.js.map → chunk-QZVKRDJY.js.map} +1 -1
  53. package/dist/{chunk-FZDR7CGH.js → chunk-REO3PXXO.js} +3 -3
  54. package/dist/{chunk-UOCPC2Y2.js → chunk-RVO7L4FX.js} +4 -4
  55. package/dist/{chunk-QXDNBYQF.js → chunk-SZMHCEYV.js} +21 -10
  56. package/dist/chunk-SZMHCEYV.js.map +1 -0
  57. package/dist/chunk-TYRNTSPJ.js +243 -0
  58. package/dist/chunk-TYRNTSPJ.js.map +1 -0
  59. package/dist/{agent-BXRIEKVM.js → chunk-UJ3L2MS7.js} +22 -22
  60. package/dist/chunk-UJ3L2MS7.js.map +1 -0
  61. package/dist/{chunk-37N2RJW2.js → chunk-V7MO5EDS.js} +3 -3
  62. package/dist/{chunk-HEF2RMKN.js → chunk-WB2X37MO.js} +18 -16
  63. package/dist/{chunk-HEF2RMKN.js.map → chunk-WB2X37MO.js.map} +1 -1
  64. package/dist/{chunk-OPNGPUKJ.js → chunk-X44FKNKP.js} +133 -42
  65. package/dist/chunk-X44FKNKP.js.map +1 -0
  66. package/dist/cli.js +43 -40
  67. package/dist/cli.js.map +1 -1
  68. package/dist/{config-MEM2IWWN.js → config-HMFMCY2M.js} +12 -9
  69. package/dist/{conventions-WV4NDXGH.js → conventions-NJF2OPVQ.js} +14 -11
  70. package/dist/{conventions-WV4NDXGH.js.map → conventions-NJF2OPVQ.js.map} +1 -1
  71. package/dist/diagnostics-THH42ZMP.js +23 -0
  72. package/dist/execute-KFNNZZHI.js +35 -0
  73. package/dist/{generate-MVQI7A45.js → generate-FW5C6NP7.js} +23 -20
  74. package/dist/{generate-MVQI7A45.js.map → generate-FW5C6NP7.js.map} +1 -1
  75. package/dist/{git-YRVRUN3C.js → git-W72QQ6GT.js} +4 -2
  76. package/dist/init-HTN4V67Q.js +24 -0
  77. package/dist/{operations-LU6JA3BX.js → operations-BCFOBH42.js} +17 -14
  78. package/dist/{operations-LU6JA3BX.js.map → operations-BCFOBH42.js.map} +1 -1
  79. package/dist/{permissions-7NMDFU27.js → permissions-4AKNQZHK.js} +4 -4
  80. package/dist/plan-SIZLGA4V.js +34 -0
  81. package/dist/{policy-JSYEK5B2.js → policy-DT6Q6ZVM.js} +13 -10
  82. package/dist/{policy-JSYEK5B2.js.map → policy-DT6Q6ZVM.js.map} +1 -1
  83. package/dist/pr-OMWCGUOW.js +39 -0
  84. package/dist/pr-review-N24CZPKR.js +32 -0
  85. package/dist/prd-5OFTZAHJ.js +33 -0
  86. package/dist/{ps-TNE44R5V.js → ps-RFORTCUD.js} +11 -8
  87. package/dist/{ps-TNE44R5V.js.map → ps-RFORTCUD.js.map} +1 -1
  88. package/dist/{recorder-XGF55WXI.js → recorder-KCCPMKQG.js} +5 -4
  89. package/dist/registry-GLPXOMFG.js +15 -0
  90. package/dist/{resume-QMEPMSZW.js → resume-M5RLKP4I.js} +44 -40
  91. package/dist/{resume-QMEPMSZW.js.map → resume-M5RLKP4I.js.map} +1 -1
  92. package/dist/review-YM4JAABY.js +35 -0
  93. package/dist/{routing-2ZUMZPJB.js → routing-NNT5WKGX.js} +13 -10
  94. package/dist/{routing-2ZUMZPJB.js.map → routing-NNT5WKGX.js.map} +1 -1
  95. package/dist/run-PZUKHPQK.js +54 -0
  96. package/dist/run-PZUKHPQK.js.map +1 -0
  97. package/dist/session-publisher-T7EI3CIP.js +11 -0
  98. package/dist/session-publisher-T7EI3CIP.js.map +1 -0
  99. package/dist/{state-manager-X3PT3FGT.js → state-manager-GQH32C44.js} +3 -3
  100. package/dist/state-manager-GQH32C44.js.map +1 -0
  101. package/dist/{usage-VCFLDA5Y.js → usage-V2CHE5PY.js} +13 -10
  102. package/dist/{usage-VCFLDA5Y.js.map → usage-V2CHE5PY.js.map} +1 -1
  103. package/dist/{web-XVHLX62B.js → web-EA3KGNFN.js} +18 -14
  104. package/dist/{web-XVHLX62B.js.map → web-EA3KGNFN.js.map} +1 -1
  105. package/package.json +1 -1
  106. package/web/AGENTS.md +150 -11
  107. package/web/public/app.css +343 -110
  108. package/web/public/app.js +408 -18
  109. package/web/public/index.html +44 -1
  110. package/dist/agent-BXRIEKVM.js.map +0 -1
  111. package/dist/chunk-6FDFRNXZ.js.map +0 -1
  112. package/dist/chunk-ARFVHC2F.js.map +0 -1
  113. package/dist/chunk-IHIEXUTC.js.map +0 -1
  114. package/dist/chunk-IYV6KNVF.js.map +0 -1
  115. package/dist/chunk-KQHB7ZT3.js.map +0 -1
  116. package/dist/chunk-LZ6GFQAG.js.map +0 -1
  117. package/dist/chunk-NEZZ6KDR.js.map +0 -1
  118. package/dist/chunk-OPNGPUKJ.js.map +0 -1
  119. package/dist/chunk-QXDNBYQF.js.map +0 -1
  120. package/dist/chunk-TM67EHSV.js.map +0 -1
  121. package/dist/chunk-TX5WIVYP.js.map +0 -1
  122. package/dist/execute-NITIHHCK.js +0 -31
  123. package/dist/init-OKWEC3EV.js +0 -21
  124. package/dist/plan-LEJJF3DE.js +0 -31
  125. package/dist/pr-HPVUZ7S3.js +0 -36
  126. package/dist/pr-review-R2QZBT3F.js +0 -29
  127. package/dist/prd-5O6GYCC6.js +0 -30
  128. package/dist/registry-LGPE53QD.js +0 -15
  129. package/dist/review-YKWD6SNN.js +0 -32
  130. package/dist/run-YU4TR62R.js +0 -50
  131. /package/dist/{config-MEM2IWWN.js.map → agent-OX3KPHE4.js.map} +0 -0
  132. /package/dist/{chunk-PIVGJM6K.js.map → chunk-2IQ6M4ZE.js.map} +0 -0
  133. /package/dist/{chunk-QCXPNSEL.js.map → chunk-3BWZO4YI.js.map} +0 -0
  134. /package/dist/{chunk-BQDQTIM7.js.map → chunk-BRCNQXYQ.js.map} +0 -0
  135. /package/dist/{chunk-BHJCGWQX.js.map → chunk-F6TOYSYY.js.map} +0 -0
  136. /package/dist/{chunk-DIG5XKQQ.js.map → chunk-J3SOTUVI.js.map} +0 -0
  137. /package/dist/{chunk-SNTTOQAD.js.map → chunk-JN6D3MY6.js.map} +0 -0
  138. /package/dist/{chunk-MIVHK5YI.js.map → chunk-KMRFRXIT.js.map} +0 -0
  139. /package/dist/{chunk-5TB6KLC2.js.map → chunk-KT7JKOXB.js.map} +0 -0
  140. /package/dist/{chunk-3XLCNVMD.js.map → chunk-LEW4QM74.js.map} +0 -0
  141. /package/dist/{chunk-TVN2JVOF.js.map → chunk-OOVG2KBY.js.map} +0 -0
  142. /package/dist/{chunk-7KD66LIM.js.map → chunk-OR43364P.js.map} +0 -0
  143. /package/dist/{chunk-664Y3NDX.js.map → chunk-PHW2YV6N.js.map} +0 -0
  144. /package/dist/{chunk-PV4OX5TC.js.map → chunk-PZTWU277.js.map} +0 -0
  145. /package/dist/{chunk-HJGGNLWI.js.map → chunk-QD4VOILZ.js.map} +0 -0
  146. /package/dist/{chunk-HQAHNIAR.js.map → chunk-QK7WUO7A.js.map} +0 -0
  147. /package/dist/{chunk-FZDR7CGH.js.map → chunk-REO3PXXO.js.map} +0 -0
  148. /package/dist/{chunk-UOCPC2Y2.js.map → chunk-RVO7L4FX.js.map} +0 -0
  149. /package/dist/{chunk-37N2RJW2.js.map → chunk-V7MO5EDS.js.map} +0 -0
  150. /package/dist/{execute-NITIHHCK.js.map → config-HMFMCY2M.js.map} +0 -0
  151. /package/dist/{git-YRVRUN3C.js.map → diagnostics-THH42ZMP.js.map} +0 -0
  152. /package/dist/{init-OKWEC3EV.js.map → execute-KFNNZZHI.js.map} +0 -0
  153. /package/dist/{permissions-7NMDFU27.js.map → git-W72QQ6GT.js.map} +0 -0
  154. /package/dist/{plan-LEJJF3DE.js.map → init-HTN4V67Q.js.map} +0 -0
  155. /package/dist/{pr-HPVUZ7S3.js.map → permissions-4AKNQZHK.js.map} +0 -0
  156. /package/dist/{pr-review-R2QZBT3F.js.map → plan-SIZLGA4V.js.map} +0 -0
  157. /package/dist/{prd-5O6GYCC6.js.map → pr-OMWCGUOW.js.map} +0 -0
  158. /package/dist/{recorder-XGF55WXI.js.map → pr-review-N24CZPKR.js.map} +0 -0
  159. /package/dist/{registry-LGPE53QD.js.map → prd-5OFTZAHJ.js.map} +0 -0
  160. /package/dist/{review-YKWD6SNN.js.map → recorder-KCCPMKQG.js.map} +0 -0
  161. /package/dist/{run-YU4TR62R.js.map → registry-GLPXOMFG.js.map} +0 -0
  162. /package/dist/{state-manager-X3PT3FGT.js.map → review-YM4JAABY.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/session-git.ts"],"sourcesContent":["import {\n getBaseBranch,\n getCommitsSince,\n getCurrentBranch,\n getHeadCommit,\n getProjectRoot,\n getRemoteUrl,\n normalizeRemoteUrl,\n stripRemoteUrlCredentials,\n} from '../utils/git.js';\nimport { run } from '../utils/shell.js';\nimport {\n NullPublisher,\n type SessionCommit,\n type SessionPublisher,\n type SessionPullRequest,\n} from './session-state.js';\nimport { isoNow } from './state-manager.js';\n\n/**\n * Low-frequency enrichment of the session snapshot with git commits and pull\n * requests. Called only at phase boundaries (run.ts) and at the end of each\n * iteration (engine.ts) — never per HTTP request: the server (US-006) serves\n * the in-memory snapshot as-is.\n *\n * Like every monitoring surface, this must never affect the pipeline: with\n * the NullPublisher installed it returns before spawning any subprocess, and\n * every failure is swallowed.\n */\n\n/** Data sources, injectable for tests. */\nexport interface GitStateSources {\n currentBranch(): Promise<string>;\n baseBranch(): Promise<string>;\n commitsSince(base: string): Promise<SessionCommit[]>;\n pullRequests(branch: string): Promise<SessionPullRequest[]>;\n /** URL of the origin remote, or null when none is configured. */\n remoteUrl(): Promise<string | null>;\n /** Abbreviated hash of HEAD, or null when there is none. */\n headCommit(): Promise<string | null>;\n /** Working directory of the run; falls back to process.cwd(). */\n projectRoot(): Promise<string | null>;\n now(): string;\n}\n\n/**\n * List PRs whose head is the given branch via the GitHub CLI. Never throws;\n * returns [] when gh is unavailable, unauthenticated or returns bad JSON.\n */\nexport interface ListPullRequestsOptions {\n /**\n * `all` — the default, and what the session snapshot reports — or `open`,\n * which is the question \"is there already a Pull Request I would be\n * duplicating\".\n */\n state?: 'all' | 'open';\n}\n\nexport async function listPullRequests(\n branch: string,\n options: ListPullRequestsOptions = {},\n): Promise<SessionPullRequest[]> {\n if (!branch) return [];\n\n const result = await run('gh', [\n 'pr',\n 'list',\n '--head',\n branch,\n '--state',\n options.state ?? 'all',\n '--json',\n 'number,url,title',\n '--limit',\n '10',\n ]);\n if (result.exitCode !== 0) return [];\n\n try {\n const parsed: unknown = JSON.parse(result.stdout || '[]');\n if (!Array.isArray(parsed)) return [];\n return parsed\n .filter(\n (pr): pr is { number: number; url: string; title: string } =>\n typeof pr === 'object' &&\n pr !== null &&\n typeof (pr as { number?: unknown }).number === 'number' &&\n typeof (pr as { url?: unknown }).url === 'string' &&\n typeof (pr as { title?: unknown }).title === 'string',\n )\n .map((pr) => ({ number: pr.number, url: pr.url, title: pr.title }));\n } catch {\n return [];\n }\n}\n\nconst defaultSources: GitStateSources = {\n currentBranch: getCurrentBranch,\n baseBranch: getBaseBranch,\n commitsSince: getCommitsSince,\n pullRequests: listPullRequests,\n remoteUrl: () => getRemoteUrl(),\n headCommit: () => getHeadCommit(),\n // getProjectRoot() throws outside a git repository; the directory the run\n // happens in is still worth reporting, so fall back to it.\n projectRoot: async () => {\n try {\n return await getProjectRoot();\n } catch {\n return process.cwd();\n }\n },\n now: isoNow,\n};\n\n/**\n * Run a source in isolation: its failure yields null instead of aborting the\n * whole publication, so one unavailable field never hides the others.\n */\nasync function collect<T>(source: () => Promise<T | null>): Promise<T | null> {\n try {\n return await source();\n } catch {\n return null;\n }\n}\n\n/**\n * Reduce an origin URL to the `owner/repo` identity, dropping the host that\n * normalizeRemoteUrl() prepends. Returns null without a remote.\n *\n * Known limitation inherited from normalizeRemoteUrl(): the result is\n * lowercased, so a repository whose path has uppercase letters is reported in\n * lowercase.\n */\nfunction deriveRepositoryName(remoteUrl: string | null): string | null {\n const normalized = normalizeRemoteUrl(remoteUrl);\n if (normalized === null) return null;\n const slash = normalized.indexOf('/');\n return slash === -1 ? null : normalized.slice(slash + 1);\n}\n\n/**\n * Gather branch, base branch, commits, PRs and repository identity, then\n * publish a single git:update event. Never throws.\n */\nexport async function publishGitState(\n publisher: SessionPublisher,\n sources: Partial<GitStateSources> = {},\n): Promise<void> {\n if (publisher instanceof NullPublisher) return;\n const src: GitStateSources = { ...defaultSources, ...sources };\n\n try {\n const branch = await src.currentBranch();\n const baseBranch = await src.baseBranch();\n const [commits, pullRequests, remoteUrl, headCommit, repositoryRoot] = await Promise.all([\n src.commitsSince(baseBranch),\n src.pullRequests(branch),\n collect(() => src.remoteUrl()),\n collect(() => src.headCommit()),\n collect(() => src.projectRoot()),\n ]);\n\n publisher.publish({\n type: 'git:update',\n at: src.now(),\n branch,\n baseBranch,\n commits,\n pullRequests,\n repositoryName: deriveRepositoryName(remoteUrl),\n // Never publish the raw remote: an HTTPS remote configured for\n // automation commonly embeds a token (user:token@host), and this event\n // is served unauthenticated by the web monitor and persisted to\n // session.json.\n remoteUrl: stripRemoteUrlCredentials(remoteUrl),\n headCommit,\n repositoryRoot,\n });\n } catch {\n // Monitoring enrichment must never propagate errors to the pipeline.\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0DA,eAAsB,iBACpB,QACA,UAAmC,CAAC,GACL;AAC/B,MAAI,CAAC,OAAQ,QAAO,CAAC;AAErB,QAAM,SAAS,MAAM,IAAI,MAAM;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,SAAS;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,OAAO,aAAa,EAAG,QAAO,CAAC;AAEnC,MAAI;AACF,UAAM,SAAkB,KAAK,MAAM,OAAO,UAAU,IAAI;AACxD,QAAI,CAAC,MAAM,QAAQ,MAAM,EAAG,QAAO,CAAC;AACpC,WAAO,OACJ;AAAA,MACC,CAAC,OACC,OAAO,OAAO,YACd,OAAO,QACP,OAAQ,GAA4B,WAAW,YAC/C,OAAQ,GAAyB,QAAQ,YACzC,OAAQ,GAA2B,UAAU;AAAA,IACjD,EACC,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,KAAK,GAAG,KAAK,OAAO,GAAG,MAAM,EAAE;AAAA,EACtE,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,IAAM,iBAAkC;AAAA,EACtC,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd,WAAW,MAAM,aAAa;AAAA,EAC9B,YAAY,MAAM,cAAc;AAAA;AAAA;AAAA,EAGhC,aAAa,YAAY;AACvB,QAAI;AACF,aAAO,MAAM,eAAe;AAAA,IAC9B,QAAQ;AACN,aAAO,QAAQ,IAAI;AAAA,IACrB;AAAA,EACF;AAAA,EACA,KAAK;AACP;AAMA,eAAe,QAAW,QAAoD;AAC5E,MAAI;AACF,WAAO,MAAM,OAAO;AAAA,EACtB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAUA,SAAS,qBAAqB,WAAyC;AACrE,QAAM,aAAa,mBAAmB,SAAS;AAC/C,MAAI,eAAe,KAAM,QAAO;AAChC,QAAM,QAAQ,WAAW,QAAQ,GAAG;AACpC,SAAO,UAAU,KAAK,OAAO,WAAW,MAAM,QAAQ,CAAC;AACzD;AAMA,eAAsB,gBACpB,WACA,UAAoC,CAAC,GACtB;AACf,MAAI,qBAAqB,cAAe;AACxC,QAAM,MAAuB,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAE7D,MAAI;AACF,UAAM,SAAS,MAAM,IAAI,cAAc;AACvC,UAAM,aAAa,MAAM,IAAI,WAAW;AACxC,UAAM,CAAC,SAAS,cAAc,WAAW,YAAY,cAAc,IAAI,MAAM,QAAQ,IAAI;AAAA,MACvF,IAAI,aAAa,UAAU;AAAA,MAC3B,IAAI,aAAa,MAAM;AAAA,MACvB,QAAQ,MAAM,IAAI,UAAU,CAAC;AAAA,MAC7B,QAAQ,MAAM,IAAI,WAAW,CAAC;AAAA,MAC9B,QAAQ,MAAM,IAAI,YAAY,CAAC;AAAA,IACjC,CAAC;AAED,cAAU,QAAQ;AAAA,MAChB,MAAM;AAAA,MACN,IAAI,IAAI,IAAI;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB,qBAAqB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,MAK9C,WAAW,0BAA0B,SAAS;AAAA,MAC9C;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,QAAQ;AAAA,EAER;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/core/session-git.ts"],"sourcesContent":["import {\n getBaseBranch,\n getCommitsSince,\n getCurrentBranch,\n getHeadCommit,\n getProjectRoot,\n getRemoteUrl,\n normalizeRemoteUrl,\n stripRemoteUrlCredentials,\n} from '../utils/git.js';\nimport { run } from '../utils/shell.js';\nimport {\n NullPublisher,\n type SessionCommit,\n type SessionPublisher,\n type SessionPullRequest,\n} from './session-state.js';\nimport { isoNow } from './state-manager.js';\n\n/**\n * Low-frequency enrichment of the session snapshot with git commits and pull\n * requests. Called only at phase boundaries (run.ts) and at the end of each\n * iteration (engine.ts) — never per HTTP request: the server (US-006) serves\n * the in-memory snapshot as-is.\n *\n * Like every monitoring surface, this must never affect the pipeline: with\n * the NullPublisher installed it returns before spawning any subprocess, and\n * every failure is swallowed.\n */\n\n/** Data sources, injectable for tests. */\nexport interface GitStateSources {\n currentBranch(): Promise<string>;\n baseBranch(): Promise<string>;\n commitsSince(base: string): Promise<SessionCommit[]>;\n pullRequests(branch: string): Promise<SessionPullRequest[]>;\n /** URL of the origin remote, or null when none is configured. */\n remoteUrl(): Promise<string | null>;\n /** Abbreviated hash of HEAD, or null when there is none. */\n headCommit(): Promise<string | null>;\n /** Working directory of the run; falls back to process.cwd(). */\n projectRoot(): Promise<string | null>;\n now(): string;\n}\n\n/**\n * List PRs whose head is the given branch via the GitHub CLI. Never throws;\n * returns [] when gh is unavailable, unauthenticated or returns bad JSON.\n */\nexport interface ListPullRequestsOptions {\n /**\n * `all` — the default, and what the session snapshot reports — or `open`,\n * which is the question \"is there already a Pull Request I would be\n * duplicating\".\n */\n state?: 'all' | 'open';\n}\n\nexport async function listPullRequests(\n branch: string,\n options: ListPullRequestsOptions = {},\n): Promise<SessionPullRequest[]> {\n if (!branch) return [];\n\n const result = await run('gh', [\n 'pr',\n 'list',\n '--head',\n branch,\n '--state',\n options.state ?? 'all',\n '--json',\n 'number,url,title',\n '--limit',\n '10',\n ]);\n if (result.exitCode !== 0) return [];\n\n try {\n const parsed: unknown = JSON.parse(result.stdout || '[]');\n if (!Array.isArray(parsed)) return [];\n return parsed\n .filter(\n (pr): pr is { number: number; url: string; title: string } =>\n typeof pr === 'object' &&\n pr !== null &&\n typeof (pr as { number?: unknown }).number === 'number' &&\n typeof (pr as { url?: unknown }).url === 'string' &&\n typeof (pr as { title?: unknown }).title === 'string',\n )\n .map((pr) => ({ number: pr.number, url: pr.url, title: pr.title }));\n } catch {\n return [];\n }\n}\n\nconst defaultSources: GitStateSources = {\n currentBranch: getCurrentBranch,\n baseBranch: getBaseBranch,\n commitsSince: getCommitsSince,\n pullRequests: listPullRequests,\n remoteUrl: () => getRemoteUrl(),\n headCommit: () => getHeadCommit(),\n // getProjectRoot() throws outside a git repository; the directory the run\n // happens in is still worth reporting, so fall back to it.\n projectRoot: async () => {\n try {\n return await getProjectRoot();\n } catch {\n return process.cwd();\n }\n },\n now: isoNow,\n};\n\n/**\n * Run a source in isolation: its failure yields null instead of aborting the\n * whole publication, so one unavailable field never hides the others.\n */\nasync function collect<T>(source: () => Promise<T | null>): Promise<T | null> {\n try {\n return await source();\n } catch {\n return null;\n }\n}\n\n/**\n * Reduce an origin URL to the `owner/repo` identity, dropping the host that\n * normalizeRemoteUrl() prepends. Returns null without a remote.\n *\n * Known limitation inherited from normalizeRemoteUrl(): the result is\n * lowercased, so a repository whose path has uppercase letters is reported in\n * lowercase.\n */\nfunction deriveRepositoryName(remoteUrl: string | null): string | null {\n const normalized = normalizeRemoteUrl(remoteUrl);\n if (normalized === null) return null;\n const slash = normalized.indexOf('/');\n return slash === -1 ? null : normalized.slice(slash + 1);\n}\n\n/**\n * Gather branch, base branch, commits, PRs and repository identity, then\n * publish a single git:update event. Never throws.\n */\nexport async function publishGitState(\n publisher: SessionPublisher,\n sources: Partial<GitStateSources> = {},\n): Promise<void> {\n if (publisher instanceof NullPublisher) return;\n const src: GitStateSources = { ...defaultSources, ...sources };\n\n try {\n const branch = await src.currentBranch();\n const baseBranch = await src.baseBranch();\n const commitBaseline =\n publisher.snapshot().git.branchCreated === false\n ? (publisher.snapshot().git.startCommit ?? baseBranch)\n : baseBranch;\n const [commits, pullRequests, remoteUrl, headCommit, repositoryRoot] = await Promise.all([\n src.commitsSince(commitBaseline),\n src.pullRequests(branch),\n collect(() => src.remoteUrl()),\n collect(() => src.headCommit()),\n collect(() => src.projectRoot()),\n ]);\n\n publisher.publish({\n type: 'git:update',\n at: src.now(),\n branch,\n baseBranch,\n commits,\n pullRequests,\n repositoryName: deriveRepositoryName(remoteUrl),\n // Never publish the raw remote: an HTTPS remote configured for\n // automation commonly embeds a token (user:token@host), and this event\n // is served unauthenticated by the web monitor and persisted to\n // session.json.\n remoteUrl: stripRemoteUrlCredentials(remoteUrl),\n headCommit,\n repositoryRoot,\n });\n } catch {\n // Monitoring enrichment must never propagate errors to the pipeline.\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0DA,eAAsB,iBACpB,QACA,UAAmC,CAAC,GACL;AAC/B,MAAI,CAAC,OAAQ,QAAO,CAAC;AAErB,QAAM,SAAS,MAAM,IAAI,MAAM;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,SAAS;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,OAAO,aAAa,EAAG,QAAO,CAAC;AAEnC,MAAI;AACF,UAAM,SAAkB,KAAK,MAAM,OAAO,UAAU,IAAI;AACxD,QAAI,CAAC,MAAM,QAAQ,MAAM,EAAG,QAAO,CAAC;AACpC,WAAO,OACJ;AAAA,MACC,CAAC,OACC,OAAO,OAAO,YACd,OAAO,QACP,OAAQ,GAA4B,WAAW,YAC/C,OAAQ,GAAyB,QAAQ,YACzC,OAAQ,GAA2B,UAAU;AAAA,IACjD,EACC,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,KAAK,GAAG,KAAK,OAAO,GAAG,MAAM,EAAE;AAAA,EACtE,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,IAAM,iBAAkC;AAAA,EACtC,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd,WAAW,MAAM,aAAa;AAAA,EAC9B,YAAY,MAAM,cAAc;AAAA;AAAA;AAAA,EAGhC,aAAa,YAAY;AACvB,QAAI;AACF,aAAO,MAAM,eAAe;AAAA,IAC9B,QAAQ;AACN,aAAO,QAAQ,IAAI;AAAA,IACrB;AAAA,EACF;AAAA,EACA,KAAK;AACP;AAMA,eAAe,QAAW,QAAoD;AAC5E,MAAI;AACF,WAAO,MAAM,OAAO;AAAA,EACtB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAUA,SAAS,qBAAqB,WAAyC;AACrE,QAAM,aAAa,mBAAmB,SAAS;AAC/C,MAAI,eAAe,KAAM,QAAO;AAChC,QAAM,QAAQ,WAAW,QAAQ,GAAG;AACpC,SAAO,UAAU,KAAK,OAAO,WAAW,MAAM,QAAQ,CAAC;AACzD;AAMA,eAAsB,gBACpB,WACA,UAAoC,CAAC,GACtB;AACf,MAAI,qBAAqB,cAAe;AACxC,QAAM,MAAuB,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAE7D,MAAI;AACF,UAAM,SAAS,MAAM,IAAI,cAAc;AACvC,UAAM,aAAa,MAAM,IAAI,WAAW;AACxC,UAAM,iBACJ,UAAU,SAAS,EAAE,IAAI,kBAAkB,QACtC,UAAU,SAAS,EAAE,IAAI,eAAe,aACzC;AACN,UAAM,CAAC,SAAS,cAAc,WAAW,YAAY,cAAc,IAAI,MAAM,QAAQ,IAAI;AAAA,MACvF,IAAI,aAAa,cAAc;AAAA,MAC/B,IAAI,aAAa,MAAM;AAAA,MACvB,QAAQ,MAAM,IAAI,UAAU,CAAC;AAAA,MAC7B,QAAQ,MAAM,IAAI,WAAW,CAAC;AAAA,MAC9B,QAAQ,MAAM,IAAI,YAAY,CAAC;AAAA,IACjC,CAAC;AAED,cAAU,QAAQ;AAAA,MAChB,MAAM;AAAA,MACN,IAAI,IAAI,IAAI;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB,qBAAqB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,MAK9C,WAAW,0BAA0B,SAAS;AAAA,MAC9C;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,QAAQ;AAAA,EAER;AACF;","names":[]}
@@ -2,21 +2,21 @@
2
2
  import {
3
3
  DEFAULT_BRANCH_CONVENTION,
4
4
  loadRepositoryPolicy
5
- } from "./chunk-UOCPC2Y2.js";
5
+ } from "./chunk-RVO7L4FX.js";
6
6
  import {
7
7
  loadPolicyConfig
8
- } from "./chunk-CNBYCMSU.js";
8
+ } from "./chunk-QJ5UZAH5.js";
9
9
  import {
10
10
  getSessionPublisher
11
- } from "./chunk-IYV6KNVF.js";
11
+ } from "./chunk-6QYMSNVA.js";
12
+ import {
13
+ getBaseBranch
14
+ } from "./chunk-BEZ5BA5U.js";
12
15
  import {
13
16
  hasUsageData,
14
17
  isoNow,
15
18
  sumUsage
16
- } from "./chunk-DIG5XKQQ.js";
17
- import {
18
- getBaseBranch
19
- } from "./chunk-KQHB7ZT3.js";
19
+ } from "./chunk-J3SOTUVI.js";
20
20
 
21
21
  // src/core/session-metrics.ts
22
22
  function elapsedSecondsSince(startedAtMs) {
@@ -294,4 +294,4 @@ export {
294
294
  publishStoryMetrics,
295
295
  resolvePolicyPlaceholders
296
296
  };
297
- //# sourceMappingURL=chunk-664Y3NDX.js.map
297
+ //# sourceMappingURL=chunk-PHW2YV6N.js.map
@@ -8,26 +8,26 @@ import {
8
8
  import {
9
9
  getActiveResilienceConfig,
10
10
  loadIssuesConfig
11
- } from "./chunk-CNBYCMSU.js";
11
+ } from "./chunk-QJ5UZAH5.js";
12
12
  import {
13
13
  resolveIssuePaths,
14
14
  resolveProjectPaths
15
- } from "./chunk-HQAHNIAR.js";
15
+ } from "./chunk-QK7WUO7A.js";
16
16
  import {
17
17
  printInfo,
18
18
  printWarning
19
- } from "./chunk-IYV6KNVF.js";
20
- import {
21
- isoNow
22
- } from "./chunk-DIG5XKQQ.js";
23
- import {
24
- issueMetadataSchema
25
- } from "./chunk-NEZZ6KDR.js";
19
+ } from "./chunk-TYRNTSPJ.js";
26
20
  import {
27
21
  getProjectRoot,
28
22
  resolvePolicy,
29
23
  run
30
- } from "./chunk-KQHB7ZT3.js";
24
+ } from "./chunk-BEZ5BA5U.js";
25
+ import {
26
+ isoNow
27
+ } from "./chunk-J3SOTUVI.js";
28
+ import {
29
+ issueMetadataSchema
30
+ } from "./chunk-LBGHI4S2.js";
31
31
  import {
32
32
  writeFileAtomic
33
33
  } from "./chunk-7Z4Y3VKM.js";
@@ -943,4 +943,4 @@ export {
943
943
  IssueResolutionError,
944
944
  resolveIssue
945
945
  };
946
- //# sourceMappingURL=chunk-PV4OX5TC.js.map
946
+ //# sourceMappingURL=chunk-PZTWU277.js.map
@@ -3,35 +3,35 @@ import {
3
3
  isTransientFailure,
4
4
  readFileWithGrace,
5
5
  runPhaseWithRetry
6
- } from "./chunk-IV5SS4JN.js";
6
+ } from "./chunk-76MMPJ53.js";
7
7
  import {
8
8
  issuePlaceholders,
9
9
  resolveCommandIssue
10
- } from "./chunk-FZDR7CGH.js";
10
+ } from "./chunk-REO3PXXO.js";
11
11
  import {
12
12
  publishPhaseMetrics,
13
13
  resolvePolicyPlaceholders
14
- } from "./chunk-664Y3NDX.js";
14
+ } from "./chunk-PHW2YV6N.js";
15
15
  import {
16
16
  applyPlaceholders,
17
17
  loadPrompt
18
- } from "./chunk-MIVHK5YI.js";
18
+ } from "./chunk-KMRFRXIT.js";
19
19
  import {
20
20
  DEFAULT_HEADLESS_TIMEOUT_MS,
21
21
  runHeadless
22
- } from "./chunk-ARFVHC2F.js";
22
+ } from "./chunk-CGKLE6WR.js";
23
23
  import {
24
24
  resolveIssuePaths
25
- } from "./chunk-HQAHNIAR.js";
25
+ } from "./chunk-QK7WUO7A.js";
26
26
  import {
27
27
  getGlobalTimeout,
28
28
  printError,
29
29
  printSuccess
30
- } from "./chunk-IYV6KNVF.js";
30
+ } from "./chunk-TYRNTSPJ.js";
31
31
  import {
32
32
  loadTaskPlan,
33
33
  saveTaskPlan
34
- } from "./chunk-DIG5XKQQ.js";
34
+ } from "./chunk-J3SOTUVI.js";
35
35
 
36
36
  // src/commands/prd.ts
37
37
  import { mkdir } from "fs/promises";
@@ -114,4 +114,4 @@ async function runPrd(issue, resolvedIssue) {
114
114
  export {
115
115
  runPrd
116
116
  };
117
- //# sourceMappingURL=chunk-HJGGNLWI.js.map
117
+ //# sourceMappingURL=chunk-QD4VOILZ.js.map
@@ -1,18 +1,26 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  resolveIssuePaths
4
- } from "./chunk-HQAHNIAR.js";
4
+ } from "./chunk-QK7WUO7A.js";
5
5
  import {
6
6
  formatDuration,
7
7
  printWarning
8
- } from "./chunk-IYV6KNVF.js";
8
+ } from "./chunk-TYRNTSPJ.js";
9
+ import {
10
+ getGlobalRoot
11
+ } from "./chunk-HAKDLR6N.js";
12
+ import {
13
+ RETRY_CONFIG_KEYS,
14
+ getProjectRoot,
15
+ run
16
+ } from "./chunk-BEZ5BA5U.js";
9
17
  import {
10
18
  DEFAULT_TELEMETRY_CONFIG
11
- } from "./chunk-6FDFRNXZ.js";
19
+ } from "./chunk-67YIU2VB.js";
12
20
  import {
13
21
  parseCodexUsage,
14
22
  parseUsage
15
- } from "./chunk-DIG5XKQQ.js";
23
+ } from "./chunk-J3SOTUVI.js";
16
24
  import {
17
25
  AGENT_PHASES,
18
26
  ANTIGRAVITY_CAPABILITIES,
@@ -33,15 +41,7 @@ import {
33
41
  telemetryConfigInputSchema,
34
42
  verifyConfigSchema,
35
43
  webConfigSchema
36
- } from "./chunk-NEZZ6KDR.js";
37
- import {
38
- getGlobalRoot
39
- } from "./chunk-TX5WIVYP.js";
40
- import {
41
- RETRY_CONFIG_KEYS,
42
- getProjectRoot,
43
- run
44
- } from "./chunk-KQHB7ZT3.js";
44
+ } from "./chunk-LBGHI4S2.js";
45
45
 
46
46
  // src/config.ts
47
47
  import { existsSync } from "fs";
@@ -1547,7 +1547,7 @@ function dropUndefined(value) {
1547
1547
  return result;
1548
1548
  }
1549
1549
  async function resolveAgentFor(phase, options = {}) {
1550
- const { getAgentCliOverrides: getAgentCliOverrides2, loadAgentConfig: loadAgentConfig2 } = await import("./config-MEM2IWWN.js");
1550
+ const { getAgentCliOverrides: getAgentCliOverrides2, loadAgentConfig: loadAgentConfig2 } = await import("./config-HMFMCY2M.js");
1551
1551
  const config = options.config ?? await loadAgentConfig2();
1552
1552
  const cli = options.cli ?? getAgentCliOverrides2();
1553
1553
  const defaultBlock = {
@@ -1642,21 +1642,30 @@ async function describeRunAgents(phases = AGENT_PHASES) {
1642
1642
  const providers = /* @__PURE__ */ new Set();
1643
1643
  for (const phase of target) {
1644
1644
  const settings = await resolveAgentFor(phase);
1645
- byPhase[phase] = { provider: settings.provider, model: settings.model };
1645
+ byPhase[phase] = {
1646
+ provider: settings.provider,
1647
+ model: settings.model,
1648
+ origin: settings.origin
1649
+ };
1646
1650
  providers.add(settings.provider);
1647
1651
  if (phase === target[0]) {
1648
1652
  defaultProvider = settings.provider;
1649
1653
  defaultModel = settings.model;
1650
1654
  }
1651
1655
  }
1652
- const { loadAgentConfig: loadAgentConfig2 } = await import("./config-MEM2IWWN.js");
1656
+ const { loadAgentConfig: loadAgentConfig2 } = await import("./config-HMFMCY2M.js");
1653
1657
  const config = await loadAgentConfig2();
1654
1658
  defaultProvider = config.provider;
1655
1659
  defaultModel = config.model;
1660
+ const tracked = getTrackedOrigins();
1656
1661
  return {
1657
1662
  label: providers.size > 1 ? "misto" : providers.values().next().value ?? defaultProvider,
1658
1663
  defaultProvider,
1659
1664
  defaultModel,
1665
+ defaultOrigin: {
1666
+ provider: tracked?.provider ?? (defaultProvider === "claude" ? "default" : "project"),
1667
+ model: tracked?.model ?? (defaultModel === null ? "default" : "project")
1668
+ },
1660
1669
  byPhase
1661
1670
  };
1662
1671
  }
@@ -1764,7 +1773,7 @@ async function resolvePaths(config, scriptDir) {
1764
1773
  lastBranchFile: join2(base, ".last-branch"),
1765
1774
  projectRoot
1766
1775
  };
1767
- const { bindTelemetry } = await import("./recorder-XGF55WXI.js");
1776
+ const { bindTelemetry } = await import("./recorder-KCCPMKQG.js");
1768
1777
  bindTelemetry({ tasksPath: standalone.prdFile });
1769
1778
  return standalone;
1770
1779
  }
@@ -2706,4 +2715,4 @@ export {
2706
2715
  describeRunAgents,
2707
2716
  hasExplicitAgentSelection
2708
2717
  };
2709
- //# sourceMappingURL=chunk-CNBYCMSU.js.map
2718
+ //# sourceMappingURL=chunk-QJ5UZAH5.js.map