@deepseek-insight/dsi 0.6.16 → 0.6.18

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 (82) hide show
  1. package/README.md +2 -2
  2. package/bin/dsi.mjs +77 -21
  3. package/bin/lib/dev-mode.mjs +18 -1
  4. package/bin/lib/plugin-chain.mjs +97 -0
  5. package/build/client/_app/immutable/assets/2.C7lNCQCV.css +1 -0
  6. package/build/client/_app/immutable/chunks/{DOkUpqkd.js → Bqotzgnw.js} +1 -1
  7. package/build/client/_app/immutable/chunks/{BXGojodM.js → CtUqZStl.js} +2 -2
  8. package/build/client/_app/immutable/chunks/D-YP16Kb.js +1 -0
  9. package/build/client/_app/immutable/chunks/D21lpWN6.js +1 -0
  10. package/build/client/_app/immutable/entry/{app.CfbFUHxw.js → app.CGvLdbvX.js} +2 -2
  11. package/build/client/_app/immutable/entry/start.-NibTCMf.js +1 -0
  12. package/build/client/_app/immutable/nodes/{1.C2BfYC2f.js → 1.CiNEHoEh.js} +1 -1
  13. package/build/client/_app/immutable/nodes/{2.UdTbIvwR.js → 2.5NpWuIn7.js} +219 -219
  14. package/build/client/_app/version.json +1 -1
  15. package/build/handler.js +4 -4
  16. package/build/index.js +4 -4
  17. package/build/server/chunks/chunks/{dsh-connection.js-DvncrWM4.js → dsh-connection.js-DL5qjlq2.js} +211 -6
  18. package/build/server/chunks/chunks/{dsh-events.js-B_E1BU9F.js → dsh-events.js-35seDLwL.js} +3 -1
  19. package/build/server/chunks/chunks/{engine.js-1gYqtdBP.js → engine.js-EfjwaLzA.js} +2 -2
  20. package/build/server/chunks/chunks/{git-probe.js-S9w9gGXE.js → git-probe.js-D4DjBXSY.js} +3 -3
  21. package/build/server/chunks/chunks/{internal2.js-DMu68nYR.js → internal2.js-C4ukUWRE.js} +2 -2
  22. package/build/server/chunks/chunks/{restart-chain.js-D-VwGWE2.js → restart-chain.js-KZO2ISmM.js} +2 -2
  23. package/build/server/chunks/chunks/{state.js-CBD6RE0B.js → state.js-OSxIx7MQ.js} +2 -2
  24. package/build/server/chunks/chunks/{watcher.js-BfZOp5td.js → watcher.js-CACduBB9.js} +3 -3
  25. package/build/server/chunks/entries/endpoints/api/a2a/{_server.ts.js-D9vpMh8K.js → _server.ts.js-DHFHuGSm.js} +4 -4
  26. package/build/server/chunks/entries/endpoints/api/a2a/register/{_server.ts.js-HPJEmfbv.js → _server.ts.js-CUUfDBcc.js} +4 -4
  27. package/build/server/chunks/entries/endpoints/api/dsh/directory/{_server.ts.js-BaAmRXrU.js → _server.ts.js-Cae4x1c7.js} +2 -2
  28. package/build/server/chunks/entries/endpoints/api/dsh/jobs/_server.ts.js-hGmoSsDv.js +93 -0
  29. package/build/server/chunks/entries/endpoints/api/dsh/pick-directory/{_server.ts.js-D-Ftq5ei.js → _server.ts.js-BLb8o1cY.js} +2 -2
  30. package/build/server/chunks/entries/endpoints/api/dsh/presets/{_server.ts.js-C0_j53OW.js → _server.ts.js-BFeDKrPz.js} +2 -2
  31. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/attachment/{_server.ts.js-CxMvUVdS.js → _server.ts.js-DmSTTfI5.js} +2 -2
  32. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/cancel/{_server.ts.js-CfjRtKMp.js → _server.ts.js-Cus9XrC9.js} +2 -2
  33. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/catalog/{_server.ts.js-D7uC5b_j.js → _server.ts.js-DcrNU0_y.js} +2 -2
  34. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/changes/{_server.ts.js-TeoUfrIl.js → _server.ts.js-CpuEcp6p.js} +2 -2
  35. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/command/{_server.ts.js-uqUb-EdM.js → _server.ts.js-CU9o8Tho.js} +2 -2
  36. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/events/{_server.ts.js-C_DF0fAc.js → _server.ts.js-BiAJcPpb.js} +3 -3
  37. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/fork/{_server.ts.js-BfkqDQXU.js → _server.ts.js-BMMZlvr7.js} +2 -2
  38. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/goal/{_server.ts.js-vCfxCACS.js → _server.ts.js-DZ6qFrfm.js} +2 -2
  39. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/history/{_server.ts.js-DJlpW4hl.js → _server.ts.js-ecbtat_C.js} +3 -3
  40. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/models/{_server.ts.js-Cqn5ZMGh.js → _server.ts.js-CPZuvN-_.js} +2 -2
  41. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/permission/{_server.ts.js-ChB_0ZdM.js → _server.ts.js-Dcfp7gSm.js} +2 -2
  42. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/prompt/{_server.ts.js-BVHypcWF.js → _server.ts.js-CmxqUwLT.js} +2 -2
  43. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/rename/{_server.ts.js-BwDVfVrR.js → _server.ts.js-DCNKXRwy.js} +2 -2
  44. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/respond/{_server.ts.js-DRmd83Ea.js → _server.ts.js-AURyR2ll.js} +2 -2
  45. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/select-model/{_server.ts.js-hc61Nb64.js → _server.ts.js-BVF36vTO.js} +2 -2
  46. package/build/server/chunks/entries/endpoints/api/dsh/sessions/{_server.ts.js-xkp4IT7y.js → _server.ts.js-LX3JZbRr.js} +2 -2
  47. package/build/server/chunks/entries/endpoints/api/dsh/workspace-file/{_server.ts.js-BvPKBiTg.js → _server.ts.js-BJ0d199o.js} +2 -2
  48. package/build/server/chunks/entries/endpoints/api/dsh/workspace-tree/{_server.ts.js-BSsF01K6.js → _server.ts.js-BDy9jQXv.js} +2 -2
  49. package/build/server/chunks/entries/endpoints/api/dsh/workspaces/{_server.ts.js-DNLxFs1R.js → _server.ts.js-DoTpSXIc.js} +2 -2
  50. package/build/server/chunks/entries/endpoints/api/dsh/workspaces/_workspaceId_/delete/{_server.ts.js-5jaRPaKn.js → _server.ts.js-BnfIobo7.js} +2 -2
  51. package/build/server/chunks/entries/endpoints/api/dsh/workspaces/_workspaceId_/rename/{_server.ts.js-A-hvBqyy.js → _server.ts.js-KRyjIODB.js} +2 -2
  52. package/build/server/chunks/entries/endpoints/api/floor/restart/{_server.ts.js-D5wnUph-.js → _server.ts.js-DKsahdJH.js} +2 -2
  53. package/build/server/chunks/entries/endpoints/api/plugins/apply/{_server.ts.js-CCs56XtH.js → _server.ts.js-D-m-ci1C.js} +3 -3
  54. package/build/server/chunks/entries/endpoints/api/plugins/host-bounce/_server.ts.js-ELTA8Cv_.js +49 -0
  55. package/build/server/chunks/entries/endpoints/api/plugins/reload/{_server.ts.js-Ct28d7_t.js → _server.ts.js-BwingoJE.js} +2 -2
  56. package/build/server/chunks/entries/endpoints/api/plugins/snapshot/{_server.ts.js-DswGIO4S.js → _server.ts.js-50wKeeCi.js} +2 -2
  57. package/build/server/chunks/entries/endpoints/api/workspace/file-write/{_server.ts.js-C0x68iMD.js → _server.ts.js-Cb7X2G82.js} +4 -4
  58. package/build/server/chunks/entries/endpoints/api/workspace/git-events/{_server.ts.js-DzdGKZdV.js → _server.ts.js-DZ67v729.js} +4 -4
  59. package/build/server/chunks/entries/endpoints/api/workspace/git-file-head/{_server.ts.js-BC1jb3zy.js → _server.ts.js-BuO5Stmm.js} +4 -4
  60. package/build/server/chunks/entries/endpoints/api/workspace/git-map/{_server.ts.js-BE9XJyhN.js → _server.ts.js-Bb_I5Ze7.js} +4 -4
  61. package/build/server/chunks/entries/endpoints/api/workspace/git-status/{_server.ts.js-CWlGtOu8.js → _server.ts.js-cHWxh5VB.js} +4 -4
  62. package/build/server/chunks/entries/endpoints/api/workspace/write-gate/{_server.ts.js-CgcggNrH.js → _server.ts.js-Blcfn0zm.js} +4 -4
  63. package/build/server/chunks/entries/pages/{_error.svelte.js-CKrYUsNh.js → _error.svelte.js-2wYgv54Z.js} +3 -3
  64. package/build/server/chunks/entries/pages/{_page.server.ts.js-CbzURHkB.js → _page.server.ts.js-C_ydvzuE.js} +3 -3
  65. package/build/server/chunks/entries/pages/{_page.svelte.js-Bub68nnw.js → _page.svelte.js-BvcQOPvs.js} +472 -7
  66. package/build/server/chunks/{handler-29vKRsIm.js → handler-D0h_ogA5.js} +3 -3
  67. package/build/server/chunks/{index.js-BpxR9RqE.js → index.js-C43GYBhl.js} +2 -2
  68. package/build/server/chunks/{manifest.js-BUA2pFJz.js → manifest.js-DN0QODc_.js} +54 -40
  69. package/build/server/chunks/nodes/1.js-Da_l90xT.js +9 -0
  70. package/build/server/chunks/nodes/{2.js-B3UD9xCC.js → 2.js-_OZDbZ-E.js} +7 -7
  71. package/package.json +4 -4
  72. package/skills/dsi-add-plugin/references/allowbuilds-template.md +1 -1
  73. package/skills/dsi-sync/SKILL.md +8 -8
  74. package/template/.dsi/prompts.sqlite-shm +0 -0
  75. package/template/.dsi/prompts.sqlite-wal +0 -0
  76. package/template/.dsi/resources/plugins-reff.md +7 -6
  77. package/template/.dsi/resources/skills-reff.md +1 -1
  78. package/build/client/_app/immutable/assets/2.yPxdQ-n0.css +0 -1
  79. package/build/client/_app/immutable/chunks/C0ZiNuOj.js +0 -1
  80. package/build/client/_app/immutable/chunks/b58grRSF.js +0 -1
  81. package/build/client/_app/immutable/entry/start.4M41VX7w.js +0 -1
  82. package/build/server/chunks/nodes/1.js-BFDsDe_G.js +0 -9
@@ -8,7 +8,7 @@ import { D as DEFAULT_IMAGE_LIMITS } from '../../chunks/image-limits.js-CUdJ0f7r
8
8
  import { s as sanitizeWorkspaceProfile, d as dsiKey, t as themePrefs } from '../../chunks/theme-prefs.svelte.js-8CaWz46g.js';
9
9
  import { a as appConfig, p as previewSegments, b as parseTagWords, i as isValidTagWord, s as shouldRecordPrompt, g as getTrigger, t as triggerMode, c as searchKey, d as textPreviewOf } from '../../chunks/app-config.svelte.js-D7wkLUkK.js';
10
10
  import { c as getLocale } from '../../chunks/runtime.js-CCJi3XaY.js';
11
- import { p as page, a as afterNavigate, t, c as currentLocale, e as replaceState, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-CBD6RE0B.js';
11
+ import { p as page, a as afterNavigate, t, c as currentLocale, e as replaceState, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-OSxIx7MQ.js';
12
12
  import 'yaml';
13
13
  import 'html-to-image';
14
14
  import hljs from 'highlight.js/lib/core';
@@ -20,7 +20,7 @@ import xml from 'highlight.js/lib/languages/xml';
20
20
  import css from 'highlight.js/lib/languages/css';
21
21
  import '../../chunks/uneval.js-BJ9Qq2SF.js';
22
22
  import '../../chunks/shared.js-HQ0rfhm4.js';
23
- import '../../chunks/internal2.js-DMu68nYR.js';
23
+ import '../../chunks/internal2.js-C4ukUWRE.js';
24
24
  import '../../chunks/exports.js-DH_tjtdv.js';
25
25
  import '../../chunks/utils.js-CAdNO8Tu.js';
26
26
 
@@ -2136,6 +2136,38 @@ var commandskind1 = ((inputs = {}, options = {}) => {
2136
2136
  return en_commandskind1();
2137
2137
  });
2138
2138
  //#endregion
2139
+ //#region src/lib/paraglide/messages/confirmkill1.js
2140
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
2141
+ /** @typedef {{}} Confirmkill1Inputs */
2142
+ var en_confirmkill1 = () => {
2143
+ return `Confirm kill`;
2144
+ };
2145
+ var zh_confirmkill1 = () => {
2146
+ return `确认终止`;
2147
+ };
2148
+ var id_confirmkill1 = () => {
2149
+ return `Konfirmasi hentikan`;
2150
+ };
2151
+ var es_confirmkill1 = () => {
2152
+ return `Confirmar terminación`;
2153
+ };
2154
+ /**
2155
+ * | output |
2156
+ * | --- |
2157
+ * | "Confirm kill" |
2158
+ *
2159
+ * @param {Confirmkill1Inputs} inputs
2160
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
2161
+ * @returns {LocalizedString}
2162
+ */
2163
+ var confirmkill1 = ((inputs = {}, options = {}) => {
2164
+ const locale = options.locale ?? getLocale();
2165
+ if (locale === "zh") return zh_confirmkill1();
2166
+ if (locale === "id") return id_confirmkill1();
2167
+ if (locale === "es") return es_confirmkill1();
2168
+ return en_confirmkill1();
2169
+ });
2170
+ //#endregion
2139
2171
  //#region src/lib/paraglide/messages/copyagentpresetid3.js
2140
2172
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
2141
2173
  /** @typedef {{}} Copyagentpresetid3Inputs */
@@ -5592,6 +5624,134 @@ var injectedtitle1 = ((inputs = {}, options = {}) => {
5592
5624
  return en_injectedtitle1();
5593
5625
  });
5594
5626
  //#endregion
5627
+ //#region src/lib/paraglide/messages/jobs.js
5628
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
5629
+ /** @typedef {{}} JobsInputs */
5630
+ var en_jobs = () => {
5631
+ return `Jobs`;
5632
+ };
5633
+ var zh_jobs = () => {
5634
+ return `后台任务`;
5635
+ };
5636
+ var id_jobs = () => {
5637
+ return `Pekerjaan`;
5638
+ };
5639
+ var es_jobs = () => {
5640
+ return `Trabajos`;
5641
+ };
5642
+ /**
5643
+ * | output |
5644
+ * | --- |
5645
+ * | "Jobs" |
5646
+ *
5647
+ * @param {JobsInputs} inputs
5648
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
5649
+ * @returns {LocalizedString}
5650
+ */
5651
+ var jobs = ((inputs = {}, options = {}) => {
5652
+ const locale = options.locale ?? getLocale();
5653
+ if (locale === "zh") return zh_jobs();
5654
+ if (locale === "id") return id_jobs();
5655
+ if (locale === "es") return es_jobs();
5656
+ return en_jobs();
5657
+ });
5658
+ //#endregion
5659
+ //#region src/lib/paraglide/messages/jobslivetitle_one2.js
5660
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
5661
+ /** @typedef {{ n: NonNullable<unknown> }} Jobslivetitle_One2Inputs */
5662
+ var en_jobslivetitle_one2 = (i) => {
5663
+ return `${i?.n} live job`;
5664
+ };
5665
+ var zh_jobslivetitle_one2 = (i) => {
5666
+ return `${i?.n} 个进行中的任务`;
5667
+ };
5668
+ var id_jobslivetitle_one2 = (i) => {
5669
+ return `${i?.n} pekerjaan aktif`;
5670
+ };
5671
+ var es_jobslivetitle_one2 = (i) => {
5672
+ return `${i?.n} trabajo en curso`;
5673
+ };
5674
+ /**
5675
+ * | output |
5676
+ * | --- |
5677
+ * | "{n} live job" |
5678
+ *
5679
+ * @param {Jobslivetitle_One2Inputs} inputs
5680
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
5681
+ * @returns {LocalizedString}
5682
+ */
5683
+ var jobslivetitle_one2 = ((inputs, options = {}) => {
5684
+ const locale = options.locale ?? getLocale();
5685
+ if (locale === "zh") return zh_jobslivetitle_one2(inputs);
5686
+ if (locale === "id") return id_jobslivetitle_one2(inputs);
5687
+ if (locale === "es") return es_jobslivetitle_one2(inputs);
5688
+ return en_jobslivetitle_one2(inputs);
5689
+ });
5690
+ //#endregion
5691
+ //#region src/lib/paraglide/messages/jobslivetitle_other2.js
5692
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
5693
+ /** @typedef {{ n: NonNullable<unknown> }} Jobslivetitle_Other2Inputs */
5694
+ var en_jobslivetitle_other2 = (i) => {
5695
+ return `${i?.n} live jobs`;
5696
+ };
5697
+ var zh_jobslivetitle_other2 = (i) => {
5698
+ return `${i?.n} 个进行中的任务`;
5699
+ };
5700
+ var id_jobslivetitle_other2 = (i) => {
5701
+ return `${i?.n} pekerjaan aktif`;
5702
+ };
5703
+ var es_jobslivetitle_other2 = (i) => {
5704
+ return `${i?.n} trabajos en curso`;
5705
+ };
5706
+ /**
5707
+ * | output |
5708
+ * | --- |
5709
+ * | "{n} live jobs" |
5710
+ *
5711
+ * @param {Jobslivetitle_Other2Inputs} inputs
5712
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
5713
+ * @returns {LocalizedString}
5714
+ */
5715
+ var jobslivetitle_other2 = ((inputs, options = {}) => {
5716
+ const locale = options.locale ?? getLocale();
5717
+ if (locale === "zh") return zh_jobslivetitle_other2(inputs);
5718
+ if (locale === "id") return id_jobslivetitle_other2(inputs);
5719
+ if (locale === "es") return es_jobslivetitle_other2(inputs);
5720
+ return en_jobslivetitle_other2(inputs);
5721
+ });
5722
+ //#endregion
5723
+ //#region src/lib/paraglide/messages/killjob1.js
5724
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
5725
+ /** @typedef {{}} Killjob1Inputs */
5726
+ var en_killjob1 = () => {
5727
+ return `Kill`;
5728
+ };
5729
+ var zh_killjob1 = () => {
5730
+ return `终止`;
5731
+ };
5732
+ var id_killjob1 = () => {
5733
+ return `Hentikan`;
5734
+ };
5735
+ var es_killjob1 = () => {
5736
+ return `Terminar`;
5737
+ };
5738
+ /**
5739
+ * | output |
5740
+ * | --- |
5741
+ * | "Kill" |
5742
+ *
5743
+ * @param {Killjob1Inputs} inputs
5744
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
5745
+ * @returns {LocalizedString}
5746
+ */
5747
+ var killjob1 = ((inputs = {}, options = {}) => {
5748
+ const locale = options.locale ?? getLocale();
5749
+ if (locale === "zh") return zh_killjob1();
5750
+ if (locale === "id") return id_killjob1();
5751
+ if (locale === "es") return es_killjob1();
5752
+ return en_killjob1();
5753
+ });
5754
+ //#endregion
5595
5755
  //#region src/lib/paraglide/messages/label.js
5596
5756
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
5597
5757
  /** @typedef {{}} LabelInputs */
@@ -14301,6 +14461,7 @@ var _index_exports = /* @__PURE__ */ __exportAll({
14301
14461
  commandHelpSkillshelfSummary: () => commandhelpskillshelfsummary3,
14302
14462
  commands: () => commands,
14303
14463
  commandsKind: () => commandskind1,
14464
+ confirmKill: () => confirmkill1,
14304
14465
  copyAgentPresetId: () => copyagentpresetid3,
14305
14466
  copyConversationImage: () => copyconversationimage2,
14306
14467
  copyFloorImage: () => copyfloorimage2,
@@ -14410,6 +14571,10 @@ var _index_exports = /* @__PURE__ */ __exportAll({
14410
14571
  impliedNote: () => impliednote1,
14411
14572
  injectedFiles: () => injectedfiles1,
14412
14573
  injectedTitle: () => injectedtitle1,
14574
+ jobs: () => jobs,
14575
+ jobsLiveTitle_one: () => jobslivetitle_one2,
14576
+ jobsLiveTitle_other: () => jobslivetitle_other2,
14577
+ killJob: () => killjob1,
14413
14578
  label: () => label,
14414
14579
  labelOptional: () => labeloptional1,
14415
14580
  labelSlashText: () => labelslashtext2,
@@ -14754,6 +14919,7 @@ var messages_exports = /* @__PURE__ */ __exportAll({
14754
14919
  commandHelpSkillshelfSummary: () => commandhelpskillshelfsummary3,
14755
14920
  commands: () => commands,
14756
14921
  commandsKind: () => commandskind1,
14922
+ confirmKill: () => confirmkill1,
14757
14923
  copyAgentPresetId: () => copyagentpresetid3,
14758
14924
  copyConversationImage: () => copyconversationimage2,
14759
14925
  copyFloorImage: () => copyfloorimage2,
@@ -14863,6 +15029,10 @@ var messages_exports = /* @__PURE__ */ __exportAll({
14863
15029
  impliedNote: () => impliednote1,
14864
15030
  injectedFiles: () => injectedfiles1,
14865
15031
  injectedTitle: () => injectedtitle1,
15032
+ jobs: () => jobs,
15033
+ jobsLiveTitle_one: () => jobslivetitle_one2,
15034
+ jobsLiveTitle_other: () => jobslivetitle_other2,
15035
+ killJob: () => killjob1,
14866
15036
  label: () => label,
14867
15037
  labelOptional: () => labeloptional1,
14868
15038
  labelSlashText: () => labelslashtext2,
@@ -15365,6 +15535,85 @@ function Chevrons_up_down($$renderer, $$props) {
15365
15535
  ]));
15366
15536
  }
15367
15537
  //#endregion
15538
+ //#region node_modules/.pnpm/@lucide+svelte@1.35.0_svelte@5.56.10/node_modules/@lucide/svelte/dist/icons/circle-alert.svelte
15539
+ function Circle_alert($$renderer, $$props) {
15540
+ let { $$slots, $$events, ...props } = $$props;
15541
+ Icon($$renderer, spread_props([
15542
+ { name: "circle-alert" },
15543
+ props,
15544
+ { iconNode: [
15545
+ ["circle", {
15546
+ "cx": "12",
15547
+ "cy": "12",
15548
+ "r": "10"
15549
+ }],
15550
+ ["line", {
15551
+ "x1": "12",
15552
+ "x2": "12",
15553
+ "y1": "8",
15554
+ "y2": "12"
15555
+ }],
15556
+ ["line", {
15557
+ "x1": "12",
15558
+ "x2": "12.01",
15559
+ "y1": "16",
15560
+ "y2": "16"
15561
+ }]
15562
+ ] }
15563
+ ]));
15564
+ }
15565
+ //#endregion
15566
+ //#region node_modules/.pnpm/@lucide+svelte@1.35.0_svelte@5.56.10/node_modules/@lucide/svelte/dist/icons/circle-check.svelte
15567
+ function Circle_check($$renderer, $$props) {
15568
+ let { $$slots, $$events, ...props } = $$props;
15569
+ Icon($$renderer, spread_props([
15570
+ { name: "circle-check" },
15571
+ props,
15572
+ { iconNode: [["circle", {
15573
+ "cx": "12",
15574
+ "cy": "12",
15575
+ "r": "10"
15576
+ }], ["path", { "d": "m9 12 2 2 4-4" }]] }
15577
+ ]));
15578
+ }
15579
+ //#endregion
15580
+ //#region node_modules/.pnpm/@lucide+svelte@1.35.0_svelte@5.56.10/node_modules/@lucide/svelte/dist/icons/circle-dashed.svelte
15581
+ function Circle_dashed($$renderer, $$props) {
15582
+ let { $$slots, $$events, ...props } = $$props;
15583
+ Icon($$renderer, spread_props([
15584
+ { name: "circle-dashed" },
15585
+ props,
15586
+ { iconNode: [
15587
+ ["path", { "d": "M10.1 2.182a10 10 0 0 1 3.8 0" }],
15588
+ ["path", { "d": "M13.9 21.818a10 10 0 0 1-3.8 0" }],
15589
+ ["path", { "d": "M17.609 3.721a10 10 0 0 1 2.69 2.7" }],
15590
+ ["path", { "d": "M2.182 13.9a10 10 0 0 1 0-3.8" }],
15591
+ ["path", { "d": "M20.279 17.609a10 10 0 0 1-2.7 2.69" }],
15592
+ ["path", { "d": "M21.818 10.1a10 10 0 0 1 0 3.8" }],
15593
+ ["path", { "d": "M3.721 6.391a10 10 0 0 1 2.7-2.69" }],
15594
+ ["path", { "d": "M6.391 20.279a10 10 0 0 1-2.69-2.7" }]
15595
+ ] }
15596
+ ]));
15597
+ }
15598
+ //#endregion
15599
+ //#region node_modules/.pnpm/@lucide+svelte@1.35.0_svelte@5.56.10/node_modules/@lucide/svelte/dist/icons/circle-x.svelte
15600
+ function Circle_x($$renderer, $$props) {
15601
+ let { $$slots, $$events, ...props } = $$props;
15602
+ Icon($$renderer, spread_props([
15603
+ { name: "circle-x" },
15604
+ props,
15605
+ { iconNode: [
15606
+ ["circle", {
15607
+ "cx": "12",
15608
+ "cy": "12",
15609
+ "r": "10"
15610
+ }],
15611
+ ["path", { "d": "m15 9-6 6" }],
15612
+ ["path", { "d": "m9 9 6 6" }]
15613
+ ] }
15614
+ ]));
15615
+ }
15616
+ //#endregion
15368
15617
  //#region node_modules/.pnpm/@lucide+svelte@1.35.0_svelte@5.56.10/node_modules/@lucide/svelte/dist/icons/code-xml.svelte
15369
15618
  function Code_xml($$renderer, $$props) {
15370
15619
  let { $$slots, $$events, ...props } = $$props;
@@ -16533,6 +16782,159 @@ function relativeTime(ms, now = Date.now()) {
16533
16782
  return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")}`;
16534
16783
  }
16535
16784
  //#endregion
16785
+ //#region src/lib/services/jobs/roster-store.svelte.ts
16786
+ function isLiveJob(job) {
16787
+ return job.status === "running" || job.status === "stopping";
16788
+ }
16789
+ /**
16790
+ * The eternal signal — bumped on EVERY roster mutation. Born at module
16791
+ * init, outside every reaction, so a reader can always subscribe to it no
16792
+ * matter how early it reads. Read (never written) by jobs().
16793
+ */
16794
+ var version$1 = 0;
16795
+ /** The roster data — deliberately NON-reactive; version carries the news. */
16796
+ var jobsBySession = /* @__PURE__ */ new Map();
16797
+ /** Watch refcounts — bookkeeping only, never render state. */
16798
+ var watches = /* @__PURE__ */ new Map();
16799
+ /** The singleton surface every consumer imports (Wave 1 API, preserved). */
16800
+ var JobsRosterStore = class {
16801
+ /** Begin watching a session (idempotent per extra watcher). */
16802
+ watch(sessionId) {
16803
+ if (!sessionId) return;
16804
+ let w = watches.get(sessionId);
16805
+ if (w === void 0) {
16806
+ w = { refs: 0 };
16807
+ watches.set(sessionId, w);
16808
+ jobsBySession.set(sessionId, []);
16809
+ }
16810
+ w.refs += 1;
16811
+ if (w.refs > 1) return;
16812
+ this.refresh(sessionId);
16813
+ }
16814
+ /** Release one watch — the mount point's destroy handler MUST call it. */
16815
+ unwatch(sessionId) {
16816
+ const w = watches.get(sessionId);
16817
+ if (w === void 0) return;
16818
+ w.refs = Math.max(0, w.refs - 1);
16819
+ if (w.refs > 0) return;
16820
+ watches.delete(sessionId);
16821
+ jobsBySession.delete(sessionId);
16822
+ }
16823
+ /**
16824
+ * The session's whole visible set. Reads the version signal FIRST so
16825
+ * even a not-yet-watched session's empty result is a tracked read.
16826
+ */
16827
+ jobs(sessionId) {
16828
+ return sessionId ? jobsBySession.get(sessionId) ?? [] : [];
16829
+ }
16830
+ /** Live (running/stopping) count — the badge's number. */
16831
+ liveCount(sessionId) {
16832
+ return this.jobs(sessionId).filter(isLiveJob).length;
16833
+ }
16834
+ /**
16835
+ * One snapshot fetch; a failure keeps the last known set (no flicker).
16836
+ * A pending frame (Roster Mirror ADR 2026-10-17 D3 — the stream is open
16837
+ * but no frame has arrived) is honest darkness, NOT an empty set: it
16838
+ * must not clobber the last known jobs.
16839
+ */
16840
+ async refresh(sessionId) {
16841
+ try {
16842
+ const res = await fetch(`/api/dsh/jobs?sessionId=${encodeURIComponent(sessionId)}`);
16843
+ if (!res.ok) return;
16844
+ const body = await res.json();
16845
+ if (body.ok && body.pending === true) return;
16846
+ if (body.ok && Array.isArray(body.jobs)) {
16847
+ jobsBySession.set(sessionId, body.jobs);
16848
+ version$1 += 1;
16849
+ }
16850
+ } catch {}
16851
+ }
16852
+ /**
16853
+ * Refresh EVERY watched session — the spine tick's piggyback hook
16854
+ * (BC-7: the cadence belongs to the page's ONE interval, never to a
16855
+ * component timer). Unwatched sessions refresh nowhere.
16856
+ */
16857
+ refreshWatched() {
16858
+ for (const sessionId of watches.keys()) this.refresh(sessionId);
16859
+ }
16860
+ };
16861
+ var jobsRoster = new JobsRosterStore();
16862
+ //#endregion
16863
+ //#region src/lib/components/jobs/JobRosterList.svelte
16864
+ function JobRosterList($$renderer, $$props) {
16865
+ $$renderer.component(($$renderer) => {
16866
+ /**
16867
+ * JobRosterList — the shared live readout of one session's visible job
16868
+ * roster (Job Badge Waves 2+3, ADR-0026): status, label, output bytes
16869
+ * per row, and the kill button with the host's 3-second arm-confirm
16870
+ * (KILL_ARM_MS parity). Kill is the human's only direct job verb (ADR
16871
+ * fact 6); the fence stays server-side. Extracted 2026-10-16 so the
16872
+ * RowJobBadge popover and the JobsButton popup render ONE readout
16873
+ * implementation, never a copy.
16874
+ */
16875
+ let { jobs} = $$props;
16876
+ /** Per-job arm state: the id awaiting its confirm click, or null. */
16877
+ let armedJobId = null;
16878
+ if (jobs.length === 0) {
16879
+ $$renderer.push("<!--[0-->");
16880
+ $$renderer.push(`<div data-svelte="JobRosterList" class="empty svelte-1woqt69" data-testid="job-roster-empty">—</div>`);
16881
+ } else {
16882
+ $$renderer.push("<!--[-1-->");
16883
+ $$renderer.push(`<!--[-->`);
16884
+ const each_array = ensure_array_like(jobs);
16885
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
16886
+ let job = each_array[$$index];
16887
+ $$renderer.push(`<div data-svelte="JobRosterList"${attr_class("job svelte-1woqt69", void 0, { "live": isLiveJob(job) })}${attr("data-job-id", job.id)}><span class="status svelte-1woqt69"${attr("title", job.status)}>`);
16888
+ if (job.status === "running") {
16889
+ $$renderer.push("<!--[0-->");
16890
+ Loader_circle($$renderer, {
16891
+ size: 12,
16892
+ class: "spin"
16893
+ });
16894
+ } else if (job.status === "stopping") {
16895
+ $$renderer.push("<!--[1-->");
16896
+ Loader_circle($$renderer, {
16897
+ size: 12,
16898
+ class: "stopping"
16899
+ });
16900
+ } else if (job.status === "completed") {
16901
+ $$renderer.push("<!--[2-->");
16902
+ Circle_check($$renderer, {
16903
+ size: 12,
16904
+ class: "ok"
16905
+ });
16906
+ } else if (job.status === "failed") {
16907
+ $$renderer.push("<!--[3-->");
16908
+ Circle_alert($$renderer, {
16909
+ size: 12,
16910
+ class: "bad"
16911
+ });
16912
+ } else if (job.status === "killed") {
16913
+ $$renderer.push("<!--[4-->");
16914
+ Circle_x($$renderer, {
16915
+ size: 12,
16916
+ class: "dead"
16917
+ });
16918
+ } else {
16919
+ $$renderer.push("<!--[-1-->");
16920
+ Circle_dashed($$renderer, {
16921
+ size: 12,
16922
+ class: "dead"
16923
+ });
16924
+ }
16925
+ $$renderer.push(`<!--]--></span> <span class="label svelte-1woqt69"${attr("title", job.label)}>${escape_html(job.label)}</span> <span class="bytes svelte-1woqt69">${escape_html(job.output.total)}B</span> `);
16926
+ if (isLiveJob(job)) {
16927
+ $$renderer.push("<!--[0-->");
16928
+ $$renderer.push(`<button type="button"${attr_class("kill svelte-1woqt69", void 0, { "armed": armedJobId === job.id })}${attr("data-testid", "job-kill-" + job.id)}>${escape_html(armedJobId === job.id ? confirmkill1() : killjob1())}</button>`);
16929
+ } else $$renderer.push("<!--[-1-->");
16930
+ $$renderer.push(`<!--]--></div>`);
16931
+ }
16932
+ $$renderer.push(`<!--]-->`);
16933
+ }
16934
+ $$renderer.push(`<!--]-->`);
16935
+ });
16936
+ }
16937
+ //#endregion
16536
16938
  //#region src/lib/components/composer/NewChatButton.svelte
16537
16939
  function NewChatButton($$renderer, $$props) {
16538
16940
  $$renderer.component(($$renderer) => {
@@ -17935,8 +18337,8 @@ function ThemeToggle($$renderer, $$props) {
17935
18337
  }
17936
18338
  //#endregion
17937
18339
  //#region package.json
17938
- var version = "0.6.16";
17939
- var dsh = { "webVersion": "0.2.1-alpha.2" };
18340
+ var version = "0.6.18";
18341
+ var dsh = { "webVersion": "0.2.1-alpha.4" };
17940
18342
  //#endregion
17941
18343
  //#region src/lib/version.ts
17942
18344
  /**
@@ -27276,7 +27678,7 @@ function ConversationScrollArea($$renderer, $$props) {
27276
27678
  const each_array_3 = ensure_array_like(fold.folded);
27277
27679
  for (let $$index_2 = 0, $$length = each_array_3.length; $$index_2 < $$length; $$index_2++) {
27278
27680
  let run = each_array_3[$$index_2];
27279
- const workEntries = run.kind === "chips" ? run.entries.filter((e) => !(e.kind === "user-message" && e.meta !== void 0) && e.kind !== "unknown-event") : run.entries;
27681
+ const workEntries = run.kind === "chips" ? run.entries.filter((e) => !(e.kind === "user-message" && e.meta !== void 0) && e.kind !== "unknown-event") : [];
27280
27682
  if (run.kind === "text") {
27281
27683
  $$renderer.push("<!--[0-->");
27282
27684
  MarkdownContent($$renderer, {
@@ -27772,6 +28174,66 @@ function PlanButton($$renderer, $$props) {
27772
28174
  });
27773
28175
  }
27774
28176
  //#endregion
28177
+ //#region src/lib/components/common/buttons/JobsButton.svelte
28178
+ function JobsButton($$renderer, $$props) {
28179
+ $$renderer.component(($$renderer) => {
28180
+ /**
28181
+ * JobsButton — the live-jobs leaf of the floating anchor stack (Job
28182
+ * Badge Wave 3, ADR-0026): the conversation session's live background
28183
+ * work as one click beside the transcript. Renders NOTHING while the
28184
+ * conversation session owns no live job, so the anchor stack keeps its
28185
+ * shape at zero. The popup is the shared JobRosterList readout (Wave 3
28186
+ * extraction) — status, label, output bytes, kill with the 3-second
28187
+ * arm-confirm — hosted in FloatingAnchorContainerPopup (The Popup Shell
28188
+ * ADR D1) since the 2026-10-17 placement fix: the hand-rolled absolute
28189
+ * popup broke in embedded panel mode, while the shell's
28190
+ * right-full/vertically-centered placement is the pinned surface the
28191
+ * other anchor leaves (User Messages, Plan) already use.
28192
+ */
28193
+ let { sessionId } = $$props;
28194
+ /** Popup open state — bindable into the shared shell. */
28195
+ let open = false;
28196
+ /** The toggle's wrapper — the shell's close-contract exclusion. */
28197
+ let triggerEl = void 0;
28198
+ /** Whole visible roster (own jobs + unowned), reactive. */
28199
+ const jobs = derived(() => sessionId ? jobsRoster.jobs(sessionId) : []);
28200
+ /** Live (running/stopping) count — the button's number, derived FROM jobs. */
28201
+ const liveCount = derived(() => jobs().filter(isLiveJob).length);
28202
+ let $$settled = true;
28203
+ let $$inner_renderer;
28204
+ function $$render_inner($$renderer) {
28205
+ if (liveCount() > 0) {
28206
+ $$renderer.push("<!--[0-->");
28207
+ $$renderer.push(`<div data-svelte="JobsButton" class="relative" data-testid="jobs-button"><button type="button"${attr_class("floating-anchor-btn tone-amber svelte-1l76ff0", void 0, { "active": open })}${attr("title", t(() => liveCount() === 1 ? jobslivetitle_one2({ n: liveCount() }) : jobslivetitle_other2({ n: liveCount() })))} data-testid="jobs-button-trigger"><span class="dot svelte-1l76ff0"></span>${escape_html(liveCount())}</button> `);
28208
+ FloatingAnchorContainerPopup($$renderer, {
28209
+ triggerEl,
28210
+ popupTestId: "jobs-button-popup",
28211
+ get open() {
28212
+ return open;
28213
+ },
28214
+ set open($$value) {
28215
+ open = $$value;
28216
+ $$settled = false;
28217
+ },
28218
+ children: ($$renderer) => {
28219
+ JobRosterList($$renderer, {
28220
+ jobs: jobs()});
28221
+ },
28222
+ $$slots: { default: true }
28223
+ });
28224
+ $$renderer.push(`<!----></div>`);
28225
+ } else $$renderer.push("<!--[-1-->");
28226
+ $$renderer.push(`<!--]-->`);
28227
+ }
28228
+ do {
28229
+ $$settled = true;
28230
+ $$inner_renderer = $$renderer.copy();
28231
+ $$render_inner($$inner_renderer);
28232
+ } while (!$$settled);
28233
+ $$renderer.subsume($$inner_renderer);
28234
+ });
28235
+ }
28236
+ //#endregion
27775
28237
  //#region src/lib/services/chat/executor/workspace.ts
27776
28238
  /**
27777
28239
  * Execute one /permission… line through the typed route (commands/
@@ -28715,13 +29177,15 @@ function ConversationFloatingAnchor($$renderer, $$props) {
28715
29177
  * far-edge jump. Purely presentational — the viewport and turn groups
28716
29178
  * arrive as props.
28717
29179
  */
28718
- let { groups, container, todos = null, shelfentries = void 0, shelfworkspace = null} = $$props;
29180
+ let { groups, container, todos = null, jobsessionid = "", shelfentries = void 0, shelfworkspace = null} = $$props;
28719
29181
  if (container !== void 0) {
28720
29182
  $$renderer.push("<!--[0-->");
28721
29183
  FloatingAnchor($$renderer, {
28722
29184
  children: ($$renderer) => {
28723
29185
  PlanButton($$renderer, { todos: todos ?? [] });
28724
29186
  $$renderer.push(`<!----> `);
29187
+ JobsButton($$renderer, { sessionId: jobsessionid });
29188
+ $$renderer.push(`<!----> `);
28725
29189
  if (shelfentries !== void 0) {
28726
29190
  $$renderer.push("<!--[0-->");
28727
29191
  InjectedShelfButton($$renderer, {
@@ -30178,6 +30642,7 @@ function ConversationPanel($$renderer, $$props) {
30178
30642
  groups: groups(),
30179
30643
  container: viewport,
30180
30644
  todos: store.todos ?? null,
30645
+ jobsessionid: sessionId,
30181
30646
  shelfentries: store.entries,
30182
30647
  shelfworkspace: workspace});
30183
30648
  $$renderer.push(`<!----> `);
@@ -33563,4 +34028,4 @@ function _page($$renderer, $$props) {
33563
34028
  }
33564
34029
 
33565
34030
  export { _page as default };
33566
- //# sourceMappingURL=_page.svelte.js-Bub68nnw.js.map
34031
+ //# sourceMappingURL=_page.svelte.js-BvcQOPvs.js.map
@@ -9,8 +9,8 @@ import * as qs from 'node:querystring';
9
9
  import { Readable } from 'node:stream';
10
10
  import { S as SvelteKitError } from './chunks/shared.js-HQ0rfhm4.js';
11
11
  import './chunks/utils.js-CAdNO8Tu.js';
12
- import { S as Server } from './index.js-BpxR9RqE.js';
13
- import { m as manifest } from './manifest.js-BUA2pFJz.js';
12
+ import { S as Server } from './index.js-C43GYBhl.js';
13
+ import { m as manifest } from './manifest.js-DN0QODc_.js';
14
14
  import { env, dir, env_prefix } from '../../env.js';
15
15
  import { format } from 'node:url';
16
16
 
@@ -1732,4 +1732,4 @@ const handler = sequence(
1732
1732
  );
1733
1733
 
1734
1734
  export { format_listening_address as f, handler as h, polka as p };
1735
- //# sourceMappingURL=handler-29vKRsIm.js.map
1735
+ //# sourceMappingURL=handler-D0h_ogA5.js.map
@@ -3,7 +3,7 @@ import { n as noop, T as TRAILING_SLASH_PARAM, I as INVALIDATED_PARAM, R as Redi
3
3
  import { b as base, o as override, a as assets, r as reset, c as app_dir } from './chunks/internal.js-BcS47nI-.js';
4
4
  import { f as format_server_error, j as json, i as is_form_content_type, t as text, h as has_prerendered_path, a as handle_fatal_error, r as redirect_response, g as get_set_cookies, n as negotiate, w as with_request_store, p as parseString, m as merge_tracing, b as method_not_allowed, s as static_error_page, c as handle_error_and_jsonify, d as get_global_name, e as create_replacer, k as serialize_uses, l as clarify_devalue_error, E as ENDPOINT_METHODS, P as PAGE_METHODS, o as get_node_type, q as isRedirect, u as escape_html, v as error, x as deserialize_binary_form } from './chunks/utils.js-CAdNO8Tu.js';
5
5
  import { u as uneval } from './chunks/uneval.js-BJ9Qq2SF.js';
6
- import { o as options, s as set_private_env, a as set_public_env, g as get_hooks, p as public_env, r as read_implementation, b as set_read_implementation } from './chunks/internal2.js-DMu68nYR.js';
6
+ import { o as options, s as set_private_env, a as set_public_env, g as get_hooks, p as public_env, r as read_implementation, b as set_read_implementation } from './chunks/internal2.js-C4ukUWRE.js';
7
7
  import { d as decode_pathname, f as find_route, n as normalize_path, a as disable_search, v as validate_layout_server_exports, b as validate_layout_exports, c as validate_page_server_exports, e as validate_page_exports, r as resolve, h as hash, m as make_trackable } from './chunks/exports.js-DH_tjtdv.js';
8
8
  import { S as writable, T as readable } from './chunks/server.js-DqHGsQU2.js';
9
9
 
@@ -3862,4 +3862,4 @@ var Server = class {
3862
3862
  };
3863
3863
 
3864
3864
  export { Server as S };
3865
- //# sourceMappingURL=index.js-BpxR9RqE.js.map
3865
+ //# sourceMappingURL=index.js-C43GYBhl.js.map