@maudecode/talaria-web 1.14.0 → 1.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_release.json +4 -4
- package/dist/api/automation-router.d.ts +123 -7
- package/dist/api/automation-router.js +5 -0
- package/dist/api/automation-router.js.map +1 -1
- package/dist/api/chat-router.d.ts +728 -55
- package/dist/api/chat-router.js +122 -126
- package/dist/api/chat-router.js.map +1 -1
- package/dist/api/git-router.js +44 -32
- package/dist/api/git-router.js.map +1 -1
- package/dist/api/raw-routes.js +5 -58
- package/dist/api/raw-routes.js.map +1 -1
- package/dist/api/router.d.ts +6 -3
- package/dist/api/router.js +10 -8
- package/dist/api/router.js.map +1 -1
- package/dist/api/sessions-router.d.ts +2583 -297
- package/dist/api/sessions-router.js +92 -47
- package/dist/api/sessions-router.js.map +1 -1
- package/dist/api/settings-router.d.ts +188 -17
- package/dist/api/settings-router.js +75 -26
- package/dist/api/settings-router.js.map +1 -1
- package/dist/api/sse-routes.js +1 -1
- package/dist/api/sse-routes.js.map +1 -1
- package/dist/api/tools-router.d.ts +13 -1
- package/dist/api/tools-router.js +10 -8
- package/dist/api/tools-router.js.map +1 -1
- package/dist/app.d.ts +3620 -343
- package/dist/auth/gate.js +8 -4
- package/dist/auth/gate.js.map +1 -1
- package/dist/auth/oidc.d.ts +6 -2
- package/dist/auth/oidc.js +16 -11
- package/dist/auth/oidc.js.map +1 -1
- package/dist/auth/store.d.ts +14 -2
- package/dist/auth/store.js +26 -1
- package/dist/auth/store.js.map +1 -1
- package/dist/cli/dotenv.d.ts +1 -1
- package/dist/cli/dotenv.js +36 -3
- package/dist/cli/dotenv.js.map +1 -1
- package/dist/config/agent-config.js +20 -15
- package/dist/config/agent-config.js.map +1 -1
- package/dist/http/addresses.d.ts +6 -0
- package/dist/http/addresses.js +26 -0
- package/dist/http/addresses.js.map +1 -1
- package/dist/http/context.d.ts +7 -5
- package/dist/http/context.js.map +1 -1
- package/dist/links.d.ts +26 -0
- package/dist/links.js +60 -0
- package/dist/links.js.map +1 -0
- package/dist/onboarding.d.ts +1 -1
- package/dist/onboarding.js +28 -8
- package/dist/onboarding.js.map +1 -1
- package/dist/profiles/profiles.js +1 -1
- package/dist/profiles/profiles.js.map +1 -1
- package/dist/providers/catalog.d.ts +85 -1
- package/dist/providers/catalog.js +280 -43
- package/dist/providers/catalog.js.map +1 -1
- package/dist/providers/tables.d.ts +3 -1
- package/dist/providers/tables.js +9 -4
- package/dist/providers/tables.js.map +1 -1
- package/dist/redact.js +493 -13
- package/dist/redact.js.map +1 -1
- package/dist/runtime.js +104 -42
- package/dist/runtime.js.map +1 -1
- package/dist/sessions/anchor.d.ts +22 -3
- package/dist/sessions/anchor.js +87 -42
- package/dist/sessions/anchor.js.map +1 -1
- package/dist/sessions/background-tasks.d.ts +140 -0
- package/dist/sessions/background-tasks.js +352 -0
- package/dist/sessions/background-tasks.js.map +1 -0
- package/dist/sessions/background-updates.d.ts +56 -0
- package/dist/sessions/background-updates.js +152 -0
- package/dist/sessions/background-updates.js.map +1 -0
- package/dist/sessions/cli-sessions.d.ts +6 -0
- package/dist/sessions/cli-sessions.js +20 -7
- package/dist/sessions/cli-sessions.js.map +1 -1
- package/dist/sessions/completions.d.ts +17 -1
- package/dist/sessions/completions.js +84 -13
- package/dist/sessions/completions.js.map +1 -1
- package/dist/sessions/compress.d.ts +33 -0
- package/dist/sessions/compress.js +66 -0
- package/dist/sessions/compress.js.map +1 -0
- package/dist/sessions/list.d.ts +22 -4
- package/dist/sessions/list.js +113 -33
- package/dist/sessions/list.js.map +1 -1
- package/dist/sessions/merge.d.ts +81 -7
- package/dist/sessions/merge.js +391 -26
- package/dist/sessions/merge.js.map +1 -1
- package/dist/sessions/pending.d.ts +5 -0
- package/dist/sessions/pending.js +30 -10
- package/dist/sessions/pending.js.map +1 -1
- package/dist/sessions/relay.d.ts +7 -1
- package/dist/sessions/relay.js +17 -4
- package/dist/sessions/relay.js.map +1 -1
- package/dist/sessions/service.d.ts +118 -6
- package/dist/sessions/service.js +564 -65
- package/dist/sessions/service.js.map +1 -1
- package/dist/sessions/session.d.ts +22 -1
- package/dist/sessions/session.js +29 -2
- package/dist/sessions/session.js.map +1 -1
- package/dist/sessions/shares.js +11 -2
- package/dist/sessions/shares.js.map +1 -1
- package/dist/sessions/source-kind.d.ts +22 -0
- package/dist/sessions/source-kind.js +54 -0
- package/dist/sessions/source-kind.js.map +1 -0
- package/dist/sessions/state-db.d.ts +10 -1
- package/dist/sessions/state-db.js +48 -17
- package/dist/sessions/state-db.js.map +1 -1
- package/dist/sessions/store.d.ts +2 -0
- package/dist/sessions/store.js +24 -5
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/streams.d.ts +3 -0
- package/dist/sessions/streams.js +0 -5
- package/dist/sessions/streams.js.map +1 -1
- package/dist/sessions/titles.d.ts +4 -0
- package/dist/sessions/titles.js +16 -0
- package/dist/sessions/titles.js.map +1 -1
- package/dist/sessions/turn-context.d.ts +1 -0
- package/dist/sessions/turn-context.js +3 -0
- package/dist/sessions/turn-context.js.map +1 -1
- package/dist/sessions/turn.d.ts +85 -7
- package/dist/sessions/turn.js +518 -170
- package/dist/sessions/turn.js.map +1 -1
- package/dist/settings.d.ts +2 -0
- package/dist/settings.js +13 -0
- package/dist/settings.js.map +1 -1
- package/dist/sidecar/fake.js +2 -0
- package/dist/sidecar/fake.js.map +1 -1
- package/dist/tools/commands.d.ts +15 -0
- package/dist/tools/commands.js +52 -0
- package/dist/tools/commands.js.map +1 -0
- package/dist/tools/crons.d.ts +38 -4
- package/dist/tools/crons.js +323 -36
- package/dist/tools/crons.js.map +1 -1
- package/dist/tools/mcp.js +5 -1
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/update-notifications.d.ts +1 -1
- package/dist/tools/update-notifications.js +1 -1
- package/dist/tools/update-notifications.js.map +1 -1
- package/dist/tools/updates.d.ts +8 -3
- package/dist/tools/updates.js +133 -34
- package/dist/tools/updates.js.map +1 -1
- package/dist/workspace/git.d.ts +57 -10
- package/dist/workspace/git.js +302 -195
- package/dist/workspace/git.js.map +1 -1
- package/dist/workspace/media-refs.d.ts +13 -0
- package/dist/workspace/media-refs.js +165 -0
- package/dist/workspace/media-refs.js.map +1 -0
- package/dist/workspace/media.d.ts +19 -0
- package/dist/workspace/media.js +61 -2
- package/dist/workspace/media.js.map +1 -1
- package/dist/workspace/workspaces.d.ts +7 -1
- package/dist/workspace/workspaces.js +30 -21
- package/dist/workspace/workspaces.js.map +1 -1
- package/dist/workspace/worktrees.d.ts +2 -4
- package/dist/workspace/worktrees.js +28 -33
- package/dist/workspace/worktrees.js.map +1 -1
- package/package.json +4 -2
- package/sidecar/scripts/replay_sidecar.py +3 -1
- package/sidecar/talaria_sidecar/__init__.py +1 -1
- package/sidecar/talaria_sidecar/home.py +59 -2
- package/sidecar/talaria_sidecar/methods/__init__.py +2 -2
- package/sidecar/talaria_sidecar/methods/aux.py +19 -3
- package/sidecar/talaria_sidecar/methods/chat.py +360 -27
- package/sidecar/talaria_sidecar/methods/commands.py +46 -31
- package/sidecar/talaria_sidecar/methods/config.py +14 -10
- package/sidecar/talaria_sidecar/methods/cron.py +22 -14
- package/sidecar/talaria_sidecar/methods/oauth.py +439 -0
- package/sidecar/talaria_sidecar/methods/process.py +318 -0
- package/sidecar/talaria_sidecar/methods/profiles.py +5 -4
- package/sidecar/talaria_sidecar/methods/providers.py +161 -1
- package/sidecar/talaria_sidecar/methods/runtime.py +2 -0
- package/sidecar/talaria_sidecar/methods/text.py +1 -20
- package/sidecar/talaria_sidecar/methods/usage.py +7 -1
- package/static/dist/FILES.txt +124 -119
- package/static/dist/assets/AppShell-ef3bhu32.js +1 -0
- package/static/dist/assets/Button-nx37f4u1.js +1 -0
- package/static/dist/assets/ChatPage-cdcpykcg.js +25 -0
- package/static/dist/assets/Dialog-mec42hvb.js +1 -0
- package/static/dist/assets/HubRoute-ecb65zpr.js +2 -0
- package/static/dist/assets/{Markdown-emii55o0.js → Markdown-jqrx5es0.js} +125 -125
- package/static/dist/assets/RightPanel-d1lgvk4s.js +1 -0
- package/static/dist/assets/Select-h4ivl9qf.js +1 -0
- package/static/dist/assets/SessionListPanel-ewib046b.js +1 -0
- package/static/dist/assets/SettingsLayout-lx654cup.js +1 -0
- package/static/dist/assets/States-ehsb6lzo.js +1 -0
- package/static/dist/assets/Toaster-mch1pa3t.js +1 -0
- package/static/dist/assets/_app-m8d961ef.js +1 -0
- package/static/dist/assets/_app.ext._extensionId-mp33hbzi.js +1 -0
- package/static/dist/assets/_app.index-dk6zp7e0.js +1 -0
- package/static/dist/assets/_app.insights-jt2fk4i1.js +1 -0
- package/static/dist/assets/_app.kanban-if4pubeu.js +1 -0
- package/static/dist/assets/_app.logs-mfaw9m6g.js +1 -0
- package/static/dist/assets/_app.memory-h3eaarb6.js +1 -0
- package/static/dist/assets/_app.profiles-ienktovs.js +1 -0
- package/static/dist/assets/{_app.session._sessionId-m6nx9g8t.js → _app.session._sessionId-hh27wwu2.js} +1 -1
- package/static/dist/assets/_app.settings-dpoe0bzf.js +1 -0
- package/static/dist/assets/_app.settings._section-l468ynag.js +3 -0
- package/static/dist/assets/_app.skills-kcbncc8i.js +1 -0
- package/static/dist/assets/_app.tasks-occdrqhw.js +2 -0
- package/static/dist/assets/_app.todos-nnke2rcc.js +1 -0
- package/static/dist/assets/_app.workspaces-cdlatvwj.js +1 -0
- package/static/dist/assets/{abnfDiagram-VCTEODGH-kejgxpil.js → abnfDiagram-VCTEODGH-oity9y4o.js} +1 -1
- package/static/dist/assets/architecture-7GRP2DOG-hj11333z.js +1 -0
- package/static/dist/assets/architectureDiagram-5GKGNRK7-ceaepnyr.js +36 -0
- package/static/dist/assets/back-eu64w89w.js +1 -0
- package/static/dist/assets/{blockDiagram-I7D4REHJ-l1466a7j.js → blockDiagram-I7D4REHJ-n79st4pj.js} +1 -1
- package/static/dist/assets/{c4Diagram-7LVT6UL2-gg3aq3sr.js → c4Diagram-7LVT6UL2-mi73akzk.js} +1 -1
- package/static/dist/assets/cancel-mzvkdjg8.js +1 -0
- package/static/dist/assets/channel-mbvmf2vv.js +1 -0
- package/static/dist/assets/{chunk-4HAMMTFA-oalgz5l8.js → chunk-4HAMMTFA-laat0g1q.js} +1 -1
- package/static/dist/assets/{chunk-75Z2AOVW-babmzhdg.js → chunk-75Z2AOVW-0psy1tr2.js} +1 -1
- package/static/dist/assets/{chunk-DU6HZSFF-lagu350c.js → chunk-DU6HZSFF-lw8uox8x.js} +3 -3
- package/static/dist/assets/{chunk-F27PBJKO-gjh2tqif.js → chunk-F27PBJKO-erassib3.js} +1 -1
- package/static/dist/assets/{chunk-GMAD6QVW-ipdgja5c.js → chunk-GMAD6QVW-fz7rx619.js} +1 -1
- package/static/dist/assets/{chunk-GVQU2GXP-j8wkn1at.js → chunk-GVQU2GXP-gdb0epb2.js} +1 -1
- package/static/dist/assets/{chunk-IMKFNOWR-k00laqyk.js → chunk-IMKFNOWR-ea8t26qw.js} +1 -1
- package/static/dist/assets/{chunk-L3NEJ4N5-fju6xqj4.js → chunk-L3NEJ4N5-mb1gu9kz.js} +1 -1
- package/static/dist/assets/{chunk-OSK3NFVY-bi6widqt.js → chunk-OSK3NFVY-eovmccvy.js} +1 -1
- package/static/dist/assets/{chunk-P2QGCYS3-czr4tebv.js → chunk-P2QGCYS3-bo55zjo5.js} +1 -1
- package/static/dist/assets/{chunk-POPQ4Y6H-ktdhn67w.js → chunk-POPQ4Y6H-ja7ohe4h.js} +1 -1
- package/static/dist/assets/{chunk-PWAF6VOD-ii4dsu0d.js → chunk-PWAF6VOD-e30g9nus.js} +1 -1
- package/static/dist/assets/{chunk-SHT3W25Y-fpwk3xxp.js → chunk-SHT3W25Y-gbb798f7.js} +3 -3
- package/static/dist/assets/{chunk-SVP7TREG-k0jrvhei.js → chunk-SVP7TREG-h2iw8urm.js} +1 -1
- package/static/dist/assets/{chunk-TICWLB2K-nkqv9ot0.js → chunk-TICWLB2K-fd2cottz.js} +1 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-o8r05k0n.js +1 -0
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-o8r05k0n.js +1 -0
- package/static/dist/assets/{copied-gpchexqu.js → copied-h65fc3cx.js} +1 -1
- package/static/dist/assets/copy-e6977uwq.js +1 -0
- package/static/dist/assets/{cynefin-OW5HDTMX-lqxt8rs3.js → cynefin-OW5HDTMX-lbltyl5j.js} +1 -1
- package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-j9eqovf5.js → cynefinDiagram-5FMLGOSQ-lxhsqq4a.js} +1 -1
- package/static/dist/assets/{dagre-GXQ25YYZ-m9agobjm.js → dagre-GXQ25YYZ-gn4nnaln.js} +4 -4
- package/static/dist/assets/{diagram-S7CK7UJ4-itodc50c.js → diagram-S7CK7UJ4-pa3ij6q7.js} +3 -3
- package/static/dist/assets/{diagram-UQ7AKVKN-n1h2t4ah.js → diagram-UQ7AKVKN-zbipyz57.js} +1 -1
- package/static/dist/assets/{diagram-VSXAHHWV-lvtvm9bj.js → diagram-VSXAHHWV-d1kbpzgf.js} +1 -1
- package/static/dist/assets/{diagram-VX7I27RA-cgas58sy.js → diagram-VX7I27RA-i3ty14xl.js} +1 -1
- package/static/dist/assets/{diagram-Z3DM3KII-d0aeps1q.js → diagram-Z3DM3KII-m8xefqa7.js} +1 -1
- package/static/dist/assets/{ebnfDiagram-PWID7BFC-md345fyq.js → ebnfDiagram-PWID7BFC-nz7wj05l.js} +1 -1
- package/static/dist/assets/endpoints-k7yf25m0.js +64 -0
- package/static/dist/assets/{erDiagram-RLTQ6QDP-i4rua63b.js → erDiagram-RLTQ6QDP-fa41ib83.js} +1 -1
- package/static/dist/assets/eventmodeling-NTZA5JFV-kpbq09bx.js +1 -0
- package/static/dist/assets/flowDiagram-HODETNUW-lcz0kx14.js +1 -0
- package/static/dist/assets/{ganttDiagram-EL5Y4UJY-geqx7zgl.js → ganttDiagram-EL5Y4UJY-n7zq01qu.js} +1 -1
- package/static/dist/assets/{gitGraph-4MIJSDKK-leoq0z8t.js → gitGraph-4MIJSDKK-c89emb07.js} +1 -1
- package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-llrlxfha.js → gitGraphDiagram-WWUBYQGX-cz7cgr6w.js} +1 -1
- package/static/dist/assets/{highlighted-body-KPVGNVTW-kq2cnw6q.js → highlighted-body-KPVGNVTW-d9bapmni.js} +1 -1
- package/static/dist/assets/{index-f9bzglkn.js → index-h00usru2.js} +3 -3
- package/static/dist/assets/index-n73ijkv2.css +2 -0
- package/static/dist/assets/{info-A6RAGUB7-lkly4xj6.js → info-A6RAGUB7-ndddhhhh.js} +1 -1
- package/static/dist/assets/infoDiagram-27XIBGKW-ccxigcpf.js +2 -0
- package/static/dist/assets/{ishikawaDiagram-5VMMS53U-hq6jf374.js → ishikawaDiagram-5VMMS53U-le0z9vtc.js} +1 -1
- package/static/dist/assets/{journeyDiagram-3NMN7TZE-is03ntb0.js → journeyDiagram-3NMN7TZE-ivsmb26o.js} +1 -1
- package/static/dist/assets/{kanban-definition-UXKFOSKX-jmerizqb.js → kanban-definition-UXKFOSKX-h6n2awt0.js} +1 -1
- package/static/dist/assets/lazyRouteComponent-m1rtyk4t.js +1 -0
- package/static/dist/assets/{line-laaa8h99.js → line-dmzlfe0u.js} +1 -1
- package/static/dist/assets/link-budeg5t9.js +1 -0
- package/static/dist/assets/login-kjhasvp8.js +1 -0
- package/static/dist/assets/mermaid-HWGCJPDP-jb5d211j.js +1 -0
- package/static/dist/assets/{mermaid-parser.core-ix4junux.js → mermaid-parser.core-gwyd5bnq.js} +3 -3
- package/static/dist/assets/{mindmap-definition-YA3MSWOX-o0e0adl1.js → mindmap-definition-YA3MSWOX-l68gg5h7.js} +1 -1
- package/static/dist/assets/onboarding-cdfrk0pj.js +1 -0
- package/static/dist/assets/{packet-AYTQ26CC-kl8pwsyg.js → packet-AYTQ26CC-gpv06065.js} +1 -1
- package/static/dist/assets/{pegDiagram-XKGWAZYB-bbqn9jo4.js → pegDiagram-XKGWAZYB-e52vs23u.js} +1 -1
- package/static/dist/assets/{pie-WAS4IAKB-cpyo8bkr.js → pie-WAS4IAKB-l6m7nz5s.js} +1 -1
- package/static/dist/assets/{pieDiagram-E7YTZNPT-pelug34f.js → pieDiagram-E7YTZNPT-b4is36bq.js} +3 -3
- package/static/dist/assets/{quadrantDiagram-AXDQQJYC-jds4jmr5.js → quadrantDiagram-AXDQQJYC-m8vt2788.js} +1 -1
- package/static/dist/assets/{radar-RG4KPBEZ-e02oxnvd.js → radar-RG4KPBEZ-nxbrhiov.js} +1 -1
- package/static/dist/assets/{railroad-74A4TZTK-kz3delwo.js → railroad-74A4TZTK-222mu9hi.js} +1 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-kdvgl6x8.js +1 -0
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-itiqslby.js +1 -0
- package/static/dist/assets/railroad-peg-WCYAUIDC-go7kov78.js +1 -0
- package/static/dist/assets/{railroadDiagram-O6MQD6OU-jgroj2ew.js → railroadDiagram-O6MQD6OU-o8lldfzv.js} +1 -1
- package/static/dist/assets/{refresh-cw-k7yxjdn3.js → refresh-cw-kbcje1uy.js} +1 -1
- package/static/dist/assets/{requirementDiagram-BXWQKSXE-m4az5e0j.js → requirementDiagram-BXWQKSXE-ovyq38kv.js} +1 -1
- package/static/dist/assets/{sankeyDiagram-P5KCCOFB-vlryqiv3.js → sankeyDiagram-P5KCCOFB-ou7lznor.js} +1 -1
- package/static/dist/assets/{saved-brdfjjnw.js → saved-bazmcup9.js} +1 -1
- package/static/dist/assets/search-jen74z4u.js +1 -0
- package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-fr8hrpql.js → sequenceDiagram-WJ2MYXX4-ovckdzf2.js} +1 -1
- package/static/dist/assets/{settings_section_extensions_title-l0zodj0b.js → settings_section_extensions_title-ertwwhlx.js} +1 -1
- package/static/dist/assets/share._token-dan9hgvj.js +2 -0
- package/static/dist/assets/{sliders-horizontal-gcgscv8r.js → sliders-horizontal-f9cb3lh3.js} +1 -1
- package/static/dist/assets/{stateDiagram-D77RDMKH-bg548iyr.js → stateDiagram-D77RDMKH-fcrexkkv.js} +1 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-lcfraua2.js +1 -0
- package/static/dist/assets/{swimlanes-42K2YHIH-hk5z3efh.js → swimlanes-42K2YHIH-f7usu8fw.js} +1 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-ogmanni0.js +8 -0
- package/static/dist/assets/{timeline-definition-24CTP7MA-olvknr62.js → timeline-definition-24CTP7MA-gp1hvz9f.js} +1 -1
- package/static/dist/assets/todoStore-eqtid4r4.js +1 -0
- package/static/dist/assets/{treeView-Q6P3EWNA-ovvjsxtf.js → treeView-Q6P3EWNA-gb9gf11u.js} +1 -1
- package/static/dist/assets/{treemap-WGGIJYW6-ggkipj59.js → treemap-WGGIJYW6-nuvfnvvi.js} +1 -1
- package/static/dist/assets/{untitled-c8ydw0bu.js → untitled-htelhc68.js} +1 -1
- package/static/dist/assets/useForm-h2t0u14e.js +1 -0
- package/static/dist/assets/useLocale-hcsb84pj.js +1 -0
- package/static/dist/assets/useNavigate-nwy70ztj.js +1 -0
- package/static/dist/assets/{useParams-katwvzil.js → useParams-dqd64jv7.js} +1 -1
- package/static/dist/assets/{useSearch-c70sgau1.js → useSearch-j30pvsy7.js} +1 -1
- package/static/dist/assets/{vennDiagram-4TSXK5OY-hzld7zt7.js → vennDiagram-4TSXK5OY-fzchbzaj.js} +1 -1
- package/static/dist/assets/{wardley-WFR3VGLG-hxkeoms8.js → wardley-WFR3VGLG-m47mhfbh.js} +1 -1
- package/static/dist/assets/{wardleyDiagram-VM6X3IG4-ljh90mb1.js → wardleyDiagram-VM6X3IG4-odg6ct1z.js} +2 -2
- package/static/dist/assets/{xychartDiagram-S5SC5T6Z-mnuaes03.js → xychartDiagram-S5SC5T6Z-mrhms5um.js} +1 -1
- package/static/dist/index.html +1 -1
- package/static/dist/sw.js +1 -1
- package/static/dist/assets/AppShell-haqi9qzu.js +0 -1
- package/static/dist/assets/ChatPage-hjyu2g64.js +0 -22
- package/static/dist/assets/HubRoute-gkd8o1vg.js +0 -2
- package/static/dist/assets/RightPanel-o73y98dn.js +0 -1
- package/static/dist/assets/Select-jld3yeni.js +0 -1
- package/static/dist/assets/SessionListPanel-d3qx4ric.js +0 -1
- package/static/dist/assets/SettingsLayout-lnn2wo2s.js +0 -1
- package/static/dist/assets/States-e5hv6gdh.js +0 -1
- package/static/dist/assets/Toaster-c4jq1i26.js +0 -1
- package/static/dist/assets/_app-bnip2pjg.js +0 -1
- package/static/dist/assets/_app.ext._extensionId-egptzrfy.js +0 -1
- package/static/dist/assets/_app.index-vdz13ul5.js +0 -1
- package/static/dist/assets/_app.insights-lgjshsba.js +0 -1
- package/static/dist/assets/_app.kanban-c18cjrpz.js +0 -1
- package/static/dist/assets/_app.logs-ezhojgeg.js +0 -1
- package/static/dist/assets/_app.memory-i00paisv.js +0 -1
- package/static/dist/assets/_app.profiles-kd02bwjx.js +0 -1
- package/static/dist/assets/_app.settings-giaudkuk.js +0 -1
- package/static/dist/assets/_app.settings._section-k4qtlexk.js +0 -1
- package/static/dist/assets/_app.skills-bby2uvl8.js +0 -1
- package/static/dist/assets/_app.tasks-1kz9bosm.js +0 -2
- package/static/dist/assets/_app.todos-izjdbkm2.js +0 -1
- package/static/dist/assets/_app.workspaces-lfh2kw7s.js +0 -1
- package/static/dist/assets/architecture-7GRP2DOG-b4u9z1w3.js +0 -1
- package/static/dist/assets/architectureDiagram-5GKGNRK7-hqnf84fc.js +0 -36
- package/static/dist/assets/channel-o77ioktg.js +0 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-f5rvod26.js +0 -1
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-f5rvod26.js +0 -1
- package/static/dist/assets/endpoints-e58saih3.js +0 -9
- package/static/dist/assets/eventmodeling-NTZA5JFV-bn3fjsaq.js +0 -1
- package/static/dist/assets/flowDiagram-HODETNUW-li70d120.js +0 -1
- package/static/dist/assets/index-gkh7kum4.css +0 -2
- package/static/dist/assets/infoDiagram-27XIBGKW-oo7kdyte.js +0 -2
- package/static/dist/assets/lazyRouteComponent-b1h2ykmb.js +0 -1
- package/static/dist/assets/link-d8f0788e.js +0 -1
- package/static/dist/assets/login-llkohrcg.js +0 -1
- package/static/dist/assets/mermaid-HWGCJPDP-id0ffk2r.js +0 -1
- package/static/dist/assets/onboarding-lx0d6b38.js +0 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-l13ped2z.js +0 -1
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-c7rg3g4g.js +0 -1
- package/static/dist/assets/railroad-peg-WCYAUIDC-od0b8niq.js +0 -1
- package/static/dist/assets/search-gt2ueyvg.js +0 -1
- package/static/dist/assets/share._token-oyjv046r.js +0 -2
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-j5v40qih.js +0 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-grzefo9c.js +0 -8
- package/static/dist/assets/tabBuild-idliyw9f.js +0 -56
- package/static/dist/assets/todoStore-j4c2xq0b.js +0 -1
- package/static/dist/assets/useForm-kd759sjk.js +0 -1
- package/static/dist/assets/useLocale-hds4xmja.js +0 -1
package/dist/tools/updates.js
CHANGED
|
@@ -14,6 +14,7 @@ import { readCapped } from '../http/capped.js';
|
|
|
14
14
|
import { execFile } from 'node:child_process';
|
|
15
15
|
import { createHash } from 'node:crypto';
|
|
16
16
|
import { copyFileSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
17
|
+
import { tmpdir } from 'node:os';
|
|
17
18
|
import { delimiter, dirname, isAbsolute, join, resolve } from 'node:path';
|
|
18
19
|
import { dict } from '../config/agent-config.js';
|
|
19
20
|
import { validateReleaseInfo } from '../release.js';
|
|
@@ -178,8 +179,12 @@ export function githubJson(fetchImpl, env) {
|
|
|
178
179
|
return JSON.parse(body.toString('utf8'));
|
|
179
180
|
};
|
|
180
181
|
}
|
|
181
|
-
|
|
182
|
-
|
|
182
|
+
const completeManifest = (m, tag) => m?.schemaVersion === 1 && m.status === 'complete' && m.releaseSet === tag.slice('release-set-'.length);
|
|
183
|
+
/**
|
|
184
|
+
* Python `published_web_release`: the newest completed `release-set-<sha>` whose Web component matches the channel's tag family.
|
|
185
|
+
* `installed` (a bare `X.Y.Z`) also counts the completed releases an update skips, one manifest per older release set (TAL-624).
|
|
186
|
+
*/
|
|
187
|
+
export async function publishedWebRelease(channel, getJson, now = () => performance.now(), installed) {
|
|
183
188
|
const tagPattern = new RegExp(`^${channel === 'experimental' ? 'web-exp-v' : 'web-v'}${VERSION}$`);
|
|
184
189
|
const deadline = now() + 15_000;
|
|
185
190
|
const fetchJson = (path, asset = false) => {
|
|
@@ -204,10 +209,11 @@ export async function publishedWebRelease(channel, getJson, now = () => performa
|
|
|
204
209
|
if (exhausted)
|
|
205
210
|
throw new ReleaseUnavailable('Release history exceeds automatic lookup; update manually');
|
|
206
211
|
published.sort((a, b) => (str(a.published_at) < str(b.published_at) ? 1 : str(a.published_at) > str(b.published_at) ? -1 : 0));
|
|
207
|
-
|
|
212
|
+
/** A release set's tag and manifest; null for other releases. */
|
|
213
|
+
const manifestOf = async (release) => {
|
|
208
214
|
const tag = release.tag_name;
|
|
209
215
|
if (typeof tag !== 'string' || !/^release-set-[a-f0-9]{40}$/.test(tag))
|
|
210
|
-
|
|
216
|
+
return null;
|
|
211
217
|
if (!Array.isArray(release.assets))
|
|
212
218
|
throw new ReleaseUnavailable('Published release set has invalid assets');
|
|
213
219
|
const assets = release.assets.filter((a) => Boolean(a) && typeof a === 'object' && a.name === 'release-set.json');
|
|
@@ -215,8 +221,36 @@ export async function publishedWebRelease(channel, getJson, now = () => performa
|
|
|
215
221
|
if (assets.length !== 1 || typeof id !== 'number' || !Number.isInteger(id) || id < 1)
|
|
216
222
|
throw new ReleaseUnavailable('Published release set lacks its immutable manifest');
|
|
217
223
|
const manifest = await fetchJson(`/releases/assets/${String(id)}`, true);
|
|
218
|
-
|
|
219
|
-
|
|
224
|
+
return { tag, m: manifest && typeof manifest === 'object' && !Array.isArray(manifest) ? manifest : null };
|
|
225
|
+
};
|
|
226
|
+
/** Distinct completed channel versions above `installed` in the older release sets, plus `latest`. A Web tag without a completed set never counts; an unreadable set ends the count. */
|
|
227
|
+
const releasesSince = async (older, latest) => {
|
|
228
|
+
if (installed === undefined || compareVersions(latest, installed) <= 0)
|
|
229
|
+
return 1;
|
|
230
|
+
const versions = new Set([latest]);
|
|
231
|
+
try {
|
|
232
|
+
for (const release of older) {
|
|
233
|
+
const set = await manifestOf(release);
|
|
234
|
+
if (!set || !completeManifest(set.m, set.tag))
|
|
235
|
+
continue;
|
|
236
|
+
const webTag = dict(dict(set.m.components).web).tag;
|
|
237
|
+
if (typeof webTag !== 'string' || !tagPattern.test(webTag))
|
|
238
|
+
continue;
|
|
239
|
+
const version = webTag.split('-v').pop() ?? '';
|
|
240
|
+
if (compareVersions(version, installed) <= 0)
|
|
241
|
+
break;
|
|
242
|
+
versions.add(version);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch { /* the newest release still counts */ }
|
|
246
|
+
return versions.size;
|
|
247
|
+
};
|
|
248
|
+
for (const [index, release] of published.entries()) {
|
|
249
|
+
const set = await manifestOf(release);
|
|
250
|
+
if (!set)
|
|
251
|
+
continue;
|
|
252
|
+
const { tag, m } = set;
|
|
253
|
+
if (!completeManifest(m, tag))
|
|
220
254
|
throw new ReleaseUnavailable('Release set is incomplete or has inconsistent provenance');
|
|
221
255
|
if (!m.components || typeof m.components !== 'object' || Array.isArray(m.components))
|
|
222
256
|
throw new ReleaseUnavailable('Release set lacks component metadata');
|
|
@@ -256,6 +290,7 @@ export async function publishedWebRelease(channel, getJson, now = () => performa
|
|
|
256
290
|
manifestReleaseSet: str(m.releaseSet),
|
|
257
291
|
runtime: { tag: componentTag, version: component.version, sourceRevision: source, releaseSet: source, contracts: supported, compatibleAgent: agent },
|
|
258
292
|
release_url: `${REPOSITORY_URL}/releases/tag/${tag}`,
|
|
293
|
+
releasesBehind: await releasesSince(published.slice(index + 1), str(component.version)),
|
|
259
294
|
};
|
|
260
295
|
}
|
|
261
296
|
throw new ReleaseUnavailable('No completed Talaria Web release is available on this channel');
|
|
@@ -441,9 +476,11 @@ export async function checkWebUpdate(webRoot, currentVersion, channel, git, getJ
|
|
|
441
476
|
return { ...result, manual_update: true, message: CONTRIBUTOR_CHECKOUT_MESSAGE };
|
|
442
477
|
if (channel === 'experimental' && npmInstall && registry)
|
|
443
478
|
return checkNpmExperimental(result, npmInstall, id, registry);
|
|
479
|
+
const packaged = new RegExp(`^${channel === 'experimental' ? 'web-exp-v' : 'web-v'}${VERSION}$`).exec(currentVersion)?.slice(1, 4).join('.');
|
|
480
|
+
const installed = npmInstall?.version ?? packaged;
|
|
444
481
|
let release;
|
|
445
482
|
try {
|
|
446
|
-
release = await publishedWebRelease(channel, getJson);
|
|
483
|
+
release = await publishedWebRelease(channel, getJson, undefined, installed && new RegExp(`^${VERSION}$`).test(installed) ? installed : undefined);
|
|
447
484
|
}
|
|
448
485
|
catch (error) {
|
|
449
486
|
if (error instanceof ReleaseUnavailable)
|
|
@@ -461,7 +498,7 @@ export async function checkWebUpdate(webRoot, currentVersion, channel, git, getJ
|
|
|
461
498
|
if (comparison > 0)
|
|
462
499
|
return { ...result, current_sha: id.release().sourceRevision ?? null, behind: 0, no_git: true, install_kind: 'npm', manual_update: true, message: 'This npm installation is ahead of the selected Stable release.' };
|
|
463
500
|
if (comparison < 0)
|
|
464
|
-
return { ...result, current_sha: id.release().sourceRevision ?? null, behind:
|
|
501
|
+
return { ...result, current_sha: id.release().sourceRevision ?? null, behind: release.releasesBehind, no_git: true, install_kind: 'npm', npm: release.npm, manual_update: false, message: `Stable npm update ${release.version} is available.` };
|
|
465
502
|
const installed = diskRelease(npmInstall.packageRoot);
|
|
466
503
|
if (!same(installed, release.runtime))
|
|
467
504
|
return { ...result, current_sha: id.release().sourceRevision ?? null, behind: null, no_git: true, install_kind: 'npm', manual_update: true, error: 'Installed npm release metadata does not match the completed release.' };
|
|
@@ -476,7 +513,7 @@ export async function checkWebUpdate(webRoot, currentVersion, channel, git, getJ
|
|
|
476
513
|
const latest = release.version.split('.').map(Number);
|
|
477
514
|
const cmp = installed.map((v, i) => Math.sign(v - (latest[i] ?? 0))).find((s) => s !== 0) ?? 0;
|
|
478
515
|
if (cmp !== 0)
|
|
479
|
-
behind = cmp < 0 ?
|
|
516
|
+
behind = cmp < 0 ? release.releasesBehind : 0;
|
|
480
517
|
}
|
|
481
518
|
return { ...result, current_sha: current, behind, no_git: true, manual_update: true, message: 'Use the published Talaria Web image or authenticated monorepo installation; legacy checkouts require migration.' };
|
|
482
519
|
}
|
|
@@ -709,6 +746,7 @@ export async function checkAgentUpdate(path, git, channel = DEFAULT_CHANNEL) {
|
|
|
709
746
|
const message = fetched.out ? `fetch failed: ${sanitizeGitDiagnostic(fetched.out)}` : 'fetch failed';
|
|
710
747
|
return { name: 'agent', channel, behind: null, error: message, stale_check: true, dirty: await isDirty(path, git) };
|
|
711
748
|
}
|
|
749
|
+
await recoverInterruptedAutostash(path, git);
|
|
712
750
|
try {
|
|
713
751
|
return { ...await agentTarget(path, git, channel), dirty: await isDirty(path, git) };
|
|
714
752
|
}
|
|
@@ -716,7 +754,7 @@ export async function checkAgentUpdate(path, git, channel = DEFAULT_CHANNEL) {
|
|
|
716
754
|
return { name: 'agent', channel, behind: null, error: error.message };
|
|
717
755
|
}
|
|
718
756
|
}
|
|
719
|
-
/** Fetch, confirm the immutable Agent target, stash, fast-forward, and
|
|
757
|
+
/** Fetch, confirm the immutable Agent target, stash, fast-forward, and restore the stash. */
|
|
720
758
|
export async function applyAgentUpdate(path, git, channel = DEFAULT_CHANNEL, policy) {
|
|
721
759
|
if (!path || !existsSync(join(path, '.git')))
|
|
722
760
|
return { ok: false, message: 'Not a git repository' };
|
|
@@ -746,6 +784,7 @@ export async function applyAgentUpdate(path, git, channel = DEFAULT_CHANNEL, pol
|
|
|
746
784
|
return warning;
|
|
747
785
|
const ref = str(info.branch);
|
|
748
786
|
const revision = str(info.latest_sha);
|
|
787
|
+
await recoverInterruptedAutostash(path, git);
|
|
749
788
|
const status = await git(['status', '--porcelain', '--untracked-files=no'], path);
|
|
750
789
|
if (!status.ok) {
|
|
751
790
|
if (isGitLockError(status.out))
|
|
@@ -755,41 +794,101 @@ export async function applyAgentUpdate(path, git, channel = DEFAULT_CHANNEL, pol
|
|
|
755
794
|
if (status.out.split('\n').some((line) => ['DD', 'AU', 'UD', 'UA', 'DU', 'AA', 'UU'].includes(line.slice(0, 2)))) {
|
|
756
795
|
return { ok: false, message: `The local agent repo has unresolved merge conflicts. To reset to the latest remote version run: git -C ${path} checkout . && git -C ${path} pull --ff-only`, conflict: true };
|
|
757
796
|
}
|
|
758
|
-
let
|
|
797
|
+
let saved = null;
|
|
759
798
|
if (status.out) {
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
799
|
+
const result = await saveLocalChanges(path, git);
|
|
800
|
+
if (typeof result === 'string')
|
|
801
|
+
return { ok: false, message: result };
|
|
802
|
+
saved = result;
|
|
763
803
|
}
|
|
764
804
|
// Merge the immutable commit that was checked/acknowledged, never re-fetch a moving ref here.
|
|
765
805
|
const pulled = await git(['merge', '--ff-only', revision], path, 30_000);
|
|
766
806
|
if (!pulled.ok) {
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
807
|
+
const restored = saved ? await restoreLocalChanges(path, git, saved) : null;
|
|
808
|
+
const note = restored ? ` ${restored.note}` : '';
|
|
809
|
+
const conflict = restored && !restored.applied ? { stash_conflict: true } : {};
|
|
770
810
|
if (isGitLockError(pulled.out))
|
|
771
|
-
return { ok: false, message: `Pull failed due to a repository lock: ${pulled.out.trim()}.${note}`, lock_conflict: true };
|
|
772
|
-
return { ok: false, message: `Pull failed: ${sanitizeGitDiagnostic(pulled.out)}.${note}
|
|
773
|
-
}
|
|
774
|
-
let message = `agent updated to ${ref}`;
|
|
775
|
-
if (stashed) {
|
|
776
|
-
const popped = await git(['stash', 'pop'], path);
|
|
777
|
-
if (!popped.ok)
|
|
778
|
-
message += '. Local changes remain in `git stash list`; resolve them manually.';
|
|
811
|
+
return { ok: false, message: `Pull failed due to a repository lock: ${pulled.out.trim()}.${note}`, lock_conflict: true, ...conflict };
|
|
812
|
+
return { ok: false, message: `Pull failed: ${sanitizeGitDiagnostic(pulled.out)}.${note}`, ...conflict };
|
|
779
813
|
}
|
|
814
|
+
const restored = saved ? await restoreLocalChanges(path, git, saved) : null;
|
|
780
815
|
const verified = await verifiedAgentIdentity(path, revision, git);
|
|
781
816
|
if (!verified)
|
|
782
817
|
return { ok: false, message: 'The Agent update completed, but the installed revision could not be verified.', target: 'agent' };
|
|
783
|
-
return { ok: true, message
|
|
818
|
+
return { ok: true, message: `agent updated to ${ref}.${restored ? ` ${restored.note}` : ''}`, target: 'agent', ref, ...verified, ...(restored && !restored.applied ? { stash_conflict: true } : {}) };
|
|
819
|
+
}
|
|
820
|
+
const AUTOSTASH_REFS = 'refs/talaria/autostash/';
|
|
821
|
+
/** An update holds its saved changes here only while it runs; one left behind marks an interrupted update. */
|
|
822
|
+
const PENDING_AUTOSTASH_REFS = `${AUTOSTASH_REFS}pending/`;
|
|
823
|
+
async function autostashPatch(path, git, sha) {
|
|
824
|
+
const dir = mkdtempSync(join(tmpdir(), 'talaria-autostash-'));
|
|
825
|
+
const saved = { sha, ref: `${PENDING_AUTOSTASH_REFS}${sha}`, dir, patch: join(dir, 'autostash.patch') };
|
|
826
|
+
if ((await git(['diff', '--binary', `--output=${saved.patch}`, `${sha}^1`, sha], path)).ok)
|
|
827
|
+
return saved;
|
|
828
|
+
rmSync(dir, { recursive: true, force: true });
|
|
829
|
+
return null;
|
|
784
830
|
}
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
831
|
+
/**
|
|
832
|
+
* Save tracked local changes as a stash commit under a private per-commit ref, never the shared stash reflog
|
|
833
|
+
* whose entries other processes can shift, then revert exactly those changes. `git apply` writes the whole patch
|
|
834
|
+
* or nothing, so an edit made meanwhile aborts the update instead of being lost. Returns an error message on failure.
|
|
835
|
+
*/
|
|
836
|
+
async function saveLocalChanges(path, git) {
|
|
837
|
+
const created = await git(['stash', 'create', 'hermes-update-autostash'], path);
|
|
838
|
+
if (!created.ok || !SHA.test(created.out))
|
|
839
|
+
return 'Failed to stash local changes';
|
|
840
|
+
const sha = created.out;
|
|
841
|
+
if (!(await git(['update-ref', `${PENDING_AUTOSTASH_REFS}${sha}`, sha], path)).ok)
|
|
842
|
+
return 'Failed to stash local changes';
|
|
843
|
+
const saved = await autostashPatch(path, git, sha);
|
|
844
|
+
if (!saved || (lstatSync(saved.patch).size > 0 && !(await git(['apply', '-R', '--whitespace=nowarn', saved.patch], path)).ok)) {
|
|
845
|
+
if (saved)
|
|
846
|
+
rmSync(saved.dir, { recursive: true, force: true });
|
|
847
|
+
await git(['update-ref', '-d', `${PENDING_AUTOSTASH_REFS}${sha}`, sha], path);
|
|
848
|
+
return 'Local changes in the Agent checkout changed while the update was saving them, so nothing was modified. Try the update again.';
|
|
849
|
+
}
|
|
850
|
+
// Only the index returns to HEAD; the working tree is untouched and staged content stays in the saved commit.
|
|
851
|
+
await git(['reset', '-q'], path);
|
|
852
|
+
return saved;
|
|
853
|
+
}
|
|
854
|
+
/** Re-apply the saved changes atomically; on a conflict keep the commit under its own ref and leave the files as the update wrote them. */
|
|
855
|
+
async function restoreLocalChanges(path, git, saved) {
|
|
856
|
+
try {
|
|
857
|
+
if (lstatSync(saved.patch).size === 0 || (await git(['apply', '--whitespace=nowarn', saved.patch], path)).ok) {
|
|
858
|
+
await git(['update-ref', '-d', saved.ref, saved.sha], path);
|
|
859
|
+
return { applied: true, note: 'Local modifications were restored.' };
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
finally {
|
|
863
|
+
rmSync(saved.dir, { recursive: true, force: true });
|
|
864
|
+
}
|
|
865
|
+
const short = saved.sha.slice(0, 12);
|
|
866
|
+
// The kept ref owns the commit; the stash list entry is only a convenience others may drop.
|
|
867
|
+
const keptRef = `${AUTOSTASH_REFS}${saved.sha}`;
|
|
868
|
+
const kept = (await git(['update-ref', keptRef, saved.sha], path)).ok;
|
|
869
|
+
if (kept)
|
|
870
|
+
await git(['update-ref', '-d', saved.ref, saved.sha], path);
|
|
871
|
+
const ref = kept ? keptRef : saved.ref;
|
|
872
|
+
const listed = kept && (await git(['stash', 'store', '-m', 'hermes-update-autostash', saved.sha], path)).ok;
|
|
873
|
+
return { applied: false, note: `Your local modifications could not be re-applied cleanly and were saved as ${short} under ${ref}${listed ? ' and in the git stash' : ''}; Agent files were left as the update wrote them. To inspect: git -C ${path} stash show -p ${short}. To re-apply: git -C ${path} stash apply ${short}, then resolve conflicts. Once you are satisfied, run git -C ${path} update-ref -d ${ref}${listed ? ' and drop that stash entry' : ''}.` };
|
|
874
|
+
}
|
|
875
|
+
/** Finish an update the server stopped mid-way: its saved changes return to the tree, or are kept and listed in the git stash if they no longer apply. */
|
|
876
|
+
async function recoverInterruptedAutostash(path, git) {
|
|
877
|
+
const refs = await git(['for-each-ref', '--format=%(objectname)', PENDING_AUTOSTASH_REFS], path);
|
|
878
|
+
if (!refs.ok)
|
|
879
|
+
return;
|
|
880
|
+
for (const sha of refs.out.split('\n').filter((line) => SHA.test(line))) {
|
|
881
|
+
const saved = await autostashPatch(path, git, sha);
|
|
882
|
+
if (!saved)
|
|
883
|
+
continue;
|
|
884
|
+
// Stopped before the revert or after the restore: the changes are already in the tree.
|
|
885
|
+
if (lstatSync(saved.patch).size === 0 || (await git(['apply', '-R', '--check', saved.patch], path)).ok) {
|
|
886
|
+
rmSync(saved.dir, { recursive: true, force: true });
|
|
887
|
+
await git(['update-ref', '-d', saved.ref, sha], path);
|
|
888
|
+
}
|
|
889
|
+
else
|
|
890
|
+
await restoreLocalChanges(path, git, saved);
|
|
891
|
+
}
|
|
793
892
|
}
|
|
794
893
|
/** Python `apply_force_update` (agent branch): fetch, refuse a pure-ancestor rewind, `checkout . && clean -fd && reset --hard`. */
|
|
795
894
|
export async function forceAgentUpdate(path, git, log, channel = DEFAULT_CHANNEL, policy) {
|