dsh-ssh-tui 0.7.2 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.en.md +16 -1
  2. package/README.md +14 -1
  3. package/cordis.patch.yml +15 -0
  4. package/docs/terminals.md +113 -0
  5. package/lib/diag.js +35 -0
  6. package/lib/diag.js.map +1 -1
  7. package/lib/display-sock.js +259 -42
  8. package/lib/display-sock.js.map +1 -1
  9. package/lib/doctor.js +71 -37
  10. package/lib/doctor.js.map +1 -1
  11. package/lib/dsh-compat.js +206 -88
  12. package/lib/dsh-compat.js.map +1 -1
  13. package/lib/footer.js +4 -2
  14. package/lib/footer.js.map +1 -1
  15. package/lib/i18n/en.js +18 -0
  16. package/lib/i18n/en.js.map +1 -1
  17. package/lib/i18n/index.js +13 -7
  18. package/lib/i18n/index.js.map +1 -1
  19. package/lib/i18n/zh.js +18 -0
  20. package/lib/i18n/zh.js.map +1 -1
  21. package/lib/index.js +36 -11
  22. package/lib/index.js.map +1 -1
  23. package/lib/paint.js +5 -2
  24. package/lib/paint.js.map +1 -1
  25. package/lib/picker.js +5 -3
  26. package/lib/picker.js.map +1 -1
  27. package/lib/platform.js +296 -11
  28. package/lib/platform.js.map +1 -1
  29. package/lib/preset-authoring.js +10 -14
  30. package/lib/preset-authoring.js.map +1 -1
  31. package/lib/preset-compat.js +100 -0
  32. package/lib/preset-compat.js.map +1 -0
  33. package/lib/preset-picker.js +5 -1
  34. package/lib/preset-picker.js.map +1 -1
  35. package/lib/preset-rows.js +83 -13
  36. package/lib/preset-rows.js.map +1 -1
  37. package/lib/provider-catalog.js +4 -4
  38. package/lib/route-memory.js +3 -3
  39. package/lib/route-memory.js.map +1 -1
  40. package/lib/session-index.js +5 -0
  41. package/lib/session-index.js.map +1 -1
  42. package/lib/session-lock.js +4 -1
  43. package/lib/session-lock.js.map +1 -1
  44. package/lib/session-route.js +3 -0
  45. package/lib/session-route.js.map +1 -1
  46. package/lib/settings-routes.js +10 -0
  47. package/lib/settings-routes.js.map +1 -0
  48. package/lib/settings-subagent.js +10 -0
  49. package/lib/settings-subagent.js.map +1 -0
  50. package/lib/subagent-model.js +5 -5
  51. package/lib/subagent-model.js.map +1 -1
  52. package/lib/supergrok-token.js +4 -0
  53. package/lib/supergrok-token.js.map +1 -1
  54. package/lib/terminal-caps.js +358 -0
  55. package/lib/terminal-caps.js.map +1 -0
  56. package/lib/tui.js +184 -120
  57. package/lib/tui.js.map +1 -1
  58. package/lib/types/diag.d.ts +18 -1
  59. package/lib/types/display-sock.d.ts +63 -22
  60. package/lib/types/doctor.d.ts +8 -1
  61. package/lib/types/dsh-compat.d.ts +141 -44
  62. package/lib/types/footer.d.ts +3 -1
  63. package/lib/types/i18n/index.d.ts +18 -12
  64. package/lib/types/index.d.ts +45 -0
  65. package/lib/types/picker.d.ts +3 -0
  66. package/lib/types/platform.d.ts +175 -10
  67. package/lib/types/preset-authoring.d.ts +8 -14
  68. package/lib/types/preset-compat.d.ts +58 -0
  69. package/lib/types/preset-picker.d.ts +1 -1
  70. package/lib/types/preset-rows.d.ts +51 -9
  71. package/lib/types/settings-routes.d.ts +16 -0
  72. package/lib/types/settings-subagent.d.ts +24 -0
  73. package/lib/types/subagent-model.d.ts +7 -7
  74. package/lib/types/terminal-caps.d.ts +105 -0
  75. package/lib/types/tui.d.ts +41 -7
  76. package/package.json +82 -55
@@ -20,6 +20,7 @@ import type { Context } from '@deepseek-ai/cordis';
20
20
  import { type LlmCallConfig } from '@deepseek-ai/dsh-llm';
21
21
  import { SessionId, type SessionEvent } from '@deepseek-ai/dsh-session';
22
22
  import type { SubagentRunEndInfo, SubagentRunInfo } from '@deepseek-ai/dsh-subagent';
23
+ import { type TerminalCapabilities } from './terminal-caps.js';
23
24
  import { type SessionRoute } from './session-route.js';
24
25
  import { type SubagentSelectionRef } from './subagent-model.js';
25
26
  import { type AskUserQuestionAnswer, type AskUserQuestionRequest } from '@deepseek-ai/dsh-user-questions';
@@ -31,7 +32,7 @@ export { clipAnsiToWidth, cursorVisualPosition, displayWidth, foldInputView, hre
31
32
  export { captureHangupSignals, composePaintOutput, detectSshSession, formatLinkQualityChip, ignoreFurtherHangupSignals, isEscapePrefix, findCursorPositionReply, isHangupErrno, linkQualityOf, linkSignalPips, paintIntervalForRtt, paintLinkLabel, parseCursorPositionReply, pickerWindowStart, probeTerminalRttMs, releaseHangupSignals, resolvePaintIntervalMs, waitUntilIdleOrTimeout, writeBootSplash, type LinkQuality, type PaintLinkKind, } from './paint.js';
32
33
  export { CONTEXT_IDLE_COMPACT_RATIO, CONTEXT_PRESSURE_DANGER_RATIO, CONTEXT_PRESSURE_WARN_RATIO, CONTEXT_RING_EMPTY, CONTEXT_RING_SEGMENTS, contextPressureAlertText, contextPressureRingColor, contextPressureUsedTokens, contextPressureView, describeProviderRoute, dropFooterQuotaPlanName, fitFooterStatsLine, fitFooterStatusLine, footerActivity, footerIdentityParts, footerStatsGroups, footerSubagentForeign, paintFooterSubagentChip, formatContextPressureChip, formatContextPressureRing, formatContextPressureStatusLine, formatDuration, formatFooterQuota, formatQuotaBar, formatQuotaUnknown, formatStatusReport, providerHasQuotaSurface, quotaWindowTag, shortModelName, shortQuotaPlanName, formatTokens, formatTokensPerSecond, parseContextPressure, promptPressureTokens, providerShortCode, providerUsesLocalOAuth, shouldIdleAutoCompact, subagentRouteLabel, type ContextPressureSample, type ContextPressureView, type FooterActivityKind, type FooterStatsInput, type FooterStatusInput, type StatusReportInput, } from './footer.js';
33
34
  export { commandCodePeriodStart, commandCodeSourceFor, crossedQuotaThresholds, formatAccountBalance, formatFooterBalance, formatOpenCodeGoUsage, formatQuotaSnapshot, formatQuotaStatusLine, joinUrl, openCodeSourceFor, parseCommandCodeQuota, parseDeepSeekBalance, parseOpenAiCompatibleBalance, parseOpenCodeGoQuota, parseSuperGrokBilling, preferredQuotaWindow, quotaAlertText, quotaRefreshEverySteps, quotaRefreshEveryTurns, remainingPercentFromUsed, tightestQuotaWindow, type AccountBalanceLine, type AccountBalanceSnapshot, type CommandCodeSource, type OpenCodeFlavor, type OpenCodeSource, type QuotaPeriod, type QuotaSnapshot, type QuotaWindow, } from './quota.js';
34
- export { commandAcceptsAttachments, forEachSessionEvent, isAssistantStreamEvent, isTokenDeltaChunk, listPersistenceHeaders, inspectPersistenceSession, sessionEventType, sessionEvents, settingsNamespace, streamChunkOf, streamFirstTokenTime, streamFrameAttemptId, streamFrameOwner, } from './dsh-compat.js';
35
+ export { commandAcceptsAttachments, forEachSessionEvent, isTokenDeltaChunk, listPersistenceHeaders, inspectPersistenceSession, sessionEvents, settingsNamespace, streamChunkOf, streamFirstTokenTime, streamFrameAttemptId, streamFrameOwner, } from './dsh-compat.js';
35
36
  export { applyTurnEndToPlan, askSummary, cardCategoryOf, compactionHeaderText, formatCompactCommandError, isPromptInjectionMessage, matchTranscriptRows, parseFindQuery, parsePlanTodos, planCloseNudgeText, planDockNote, planIsLive, planTitleFromMarkdown, planTurnLeftOpen, promptInjectionSources, promptInjectionTitle, buildSubagentHeader, clipSubagentActivity, describeSubagentFailure, subagentChipSummary, subagentDisplayName, subagentInspectLines, subagentRowFromSpawnTool, foldSubagentUserLog, todoProgressLabel, todoSummary, type CardCategory, } from './plan.js';
36
37
  export { buildToolHeader, canMergeToolCall, compactEditPath, compactToolBursts, compactToolGroups, countDiffAddDel, countDiffLines, countOutputLines, diffMetaDiffs, diffStatToken, friendlyJsonLines, parseExitStatus, presentToolCall, READ_TOOL_NAMES, renderToolDiff, toolBodyFitsWorkspace, toolBodyLines, toolStateColor, toolStateLabel, wrappedToolBodyLineCount, } from './tool-present.js';
37
38
  /** Presentation configuration for the terminal channel. */
@@ -78,6 +79,12 @@ export interface TuiConfig {
78
79
  selectionRef?: ModelSelectionRef;
79
80
  /** Settings-backed model/effort selection applied to subagent requests. */
80
81
  subagentSelection?: SubagentSelectionRef;
82
+ /**
83
+ * The terminal capabilities to act on. Defaults to reading the environment;
84
+ * tests pass their own so a suite does not change meaning with the terminal
85
+ * it happens to run in (`TERM=linux node --test` used to fail three cases).
86
+ */
87
+ terminalCaps?: TerminalCapabilities;
81
88
  /** Active agent-preset id (standard/code/minimal/cordis/...). */
82
89
  presetId?: string;
83
90
  /** Display name of the active preset. */
@@ -234,6 +241,14 @@ export declare class SshTui {
234
241
  /** Last route reported to the launcher; a repaint must not report it again. */
235
242
  private lastSessionRoute;
236
243
  private readonly useAlternateScreen;
244
+ /**
245
+ * What the terminal in front of us can do. Read from the environment at
246
+ * construction (see `terminal-caps.ts`): the mouse, bracketed paste and the
247
+ * alternate screen are only claimed where the terminal has them.
248
+ */
249
+ private readonly terminalCaps;
250
+ /** The OSC 52 caveat is worth saying once, not after every copy. */
251
+ private osc52HintShown;
237
252
  private agentGone;
238
253
  private onboarding;
239
254
  private commandSuggestions;
@@ -387,6 +402,15 @@ export declare class SshTui {
387
402
  constructor(ctx: Context, agent: Agent, config: TuiConfig);
388
403
  /** Enter raw mode, switch to the alternate screen, and start listening. */
389
404
  start(): void;
405
+ /**
406
+ * Take over the screen: alternate screen where it is safe, then the input
407
+ * modes the terminal actually supports, then hide the cursor.
408
+ *
409
+ * Joining the parts here (rather than at each call site) is what keeps
410
+ * `start`, a reattach and a teardown from drifting apart — the reattach path
411
+ * used to duplicate this string verbatim.
412
+ */
413
+ private enterScreenSequence;
390
414
  private bindAgentEvents;
391
415
  private bootBackgroundTasks;
392
416
  private notifyPluginUpdate;
@@ -748,15 +772,15 @@ export declare class SshTui {
748
772
  */
749
773
  private selectLine;
750
774
  /**
751
- * Fold one live or durable stream chunk into the in-progress assistant
752
- * row. 0.1.2 hosts append `assistant/chunk`; 0.1.5 emits the same chunk
753
- * on `agent/assistant-stream` and never writes it to the log.
775
+ * Fold one live stream chunk into the in-progress assistant row. Hosts from
776
+ * 0.1.5 on emit the chunk on `agent/assistant-stream` and never write it to
777
+ * the log.
754
778
  */
755
779
  private applyStreamChunk;
756
780
  /**
757
- * 0.1.5 live tokens arrive as process-local `agent/assistant-stream`
758
- * frames (start / chunk / end). Chunk frames carry the same
759
- * `StreamChunk` the 0.1.2 log used to store as `assistant/chunk`.
781
+ * 0.1.5 and 0.1.7 live tokens arrive as process-local
782
+ * `agent/assistant-stream` frames (start / chunk / end). Chunk frames carry
783
+ * the same `StreamChunk` the settled `assistant/message` embeds in `stream`.
760
784
  */
761
785
  readonly handleAssistantStream: (...args: unknown[]) => void;
762
786
  /**
@@ -1081,6 +1105,16 @@ export declare class SshTui {
1081
1105
  */
1082
1106
  /** Re-read the roster fact this process was composed with (cheap, no IO). */
1083
1107
  private refreshRosterHealth;
1108
+ /** Which settings protocol this host speaks; decides what "missing" means. */
1109
+ private get settingsGeneration();
1110
+ /**
1111
+ * The two lines `/mode` and `/preset` print when the preset service is absent.
1112
+ *
1113
+ * The reason differs by host line: 0.1.5 lost a roster the profile can mount,
1114
+ * while 0.1.7 composes the agent process-wide and has no terminal presets at
1115
+ * all — the repair there is the agent-plane rows, not a roster.
1116
+ */
1117
+ private missingPresetService;
1084
1118
  private repairRoster;
1085
1119
  /** Current provider route selected for the running agent. */
1086
1120
  private currentProvider;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-ssh-tui",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "description": "SSH-friendly interactive terminal TUI plugin for DeepSeek Harness",
5
5
  "keywords": [
6
6
  "deepseek-harness",
@@ -37,6 +37,14 @@
37
37
  "types": "./lib/types/startup.d.ts",
38
38
  "default": "./lib/startup.js"
39
39
  },
40
+ "./settings-routes": {
41
+ "types": "./lib/types/settings-routes.d.ts",
42
+ "default": "./lib/settings-routes.js"
43
+ },
44
+ "./settings-subagent": {
45
+ "types": "./lib/types/settings-subagent.d.ts",
46
+ "default": "./lib/settings-subagent.js"
47
+ },
40
48
  "./cordis.patch.yml": "./cordis.patch.yml",
41
49
  "./package.json": "./package.json"
42
50
  },
@@ -50,7 +58,8 @@
50
58
  "docs/screenshots/headless.png",
51
59
  "docs/screenshots/workspace.png",
52
60
  "docs/screenshots/slow-link.gif",
53
- "LICENSE"
61
+ "LICENSE",
62
+ "docs/terminals.md"
54
63
  ],
55
64
  "license": "MIT",
56
65
  "dsh": {
@@ -58,15 +67,17 @@
58
67
  "patch": "./cordis.patch.yml"
59
68
  },
60
69
  "compatibility": {
61
- "dsh": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
70
+ "dsh": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
62
71
  "dshReleases": {
63
- "0.1.2-rc.1": "compatible",
72
+ "0.1.2-rc.1": "incompatible",
64
73
  "0.1.3-alpha.1": "unknown",
65
74
  "0.1.3-alpha.2": "compatible",
66
75
  "0.1.5-alpha.1": "compatible",
67
76
  "0.1.5-alpha.2": "compatible",
68
77
  "0.1.5-rc.1": "compatible",
69
- "0.1.5-rc.2": "compatible"
78
+ "0.1.5-rc.2": "compatible",
79
+ "0.1.5-rc.3": "compatible",
80
+ "0.1.7-rc.1": "compatible"
70
81
  },
71
82
  "profiles": [
72
83
  "tui"
@@ -85,6 +96,8 @@
85
96
  "install:npm": "bash scripts/install-npm.sh",
86
97
  "uninstall:dsh": "bash scripts/uninstall.sh",
87
98
  "verify:dsh": "bash scripts/verify.sh",
99
+ "probe:home": "node scripts/probe-home.mjs --probe",
100
+ "probe:home:drop": "node scripts/probe-home.mjs --probe --script tui-drop-probe.mjs",
88
101
  "screenshots": "npm run build && node scripts/capture-readme-frames.mjs",
89
102
  "screenshots:slow": "npm run build && node scripts/capture-slow-link.mjs"
90
103
  },
@@ -92,31 +105,36 @@
92
105
  "node": ">=22.19"
93
106
  },
94
107
  "dependencies": {
95
- "@deepseek-ai/schemastery": "^3.18.1",
108
+ "@deepseek-ai/schemastery": "3.18.2 || ~3.18.4",
96
109
  "commander": "^14.0.0"
97
110
  },
98
111
  "peerDependencies": {
99
112
  "@deepseek-ai/cordis": "^4.0.1",
100
- "@deepseek-ai/dsh-agent": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
101
- "@deepseek-ai/dsh-agent-default-model": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
102
- "@deepseek-ai/dsh-agent-loop": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
103
- "@deepseek-ai/dsh-agent-presets": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
104
- "@deepseek-ai/dsh-cmdline": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
105
- "@deepseek-ai/dsh-commands": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
106
- "@deepseek-ai/dsh-credentials": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
107
- "@deepseek-ai/dsh-llm": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
108
- "@deepseek-ai/dsh-session": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
109
- "@deepseek-ai/dsh-session-persistence": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
110
- "@deepseek-ai/dsh-settings": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
111
- "@deepseek-ai/dsh-subagent": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
112
- "@deepseek-ai/dsh-user-approval": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6",
113
- "@deepseek-ai/dsh-user-questions": ">=0.1.2-rc.1 <0.1.6 || >=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6"
113
+ "@deepseek-ai/dsh-agent": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
114
+ "@deepseek-ai/dsh-agent-default-model": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
115
+ "@deepseek-ai/dsh-agent-loop": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
116
+ "@deepseek-ai/dsh-agent-preset": ">=0.1.7-rc.1 <0.1.8",
117
+ "@deepseek-ai/dsh-agent-preset-registry": ">=0.1.7-rc.1 <0.1.8",
118
+ "@deepseek-ai/dsh-agent-presets": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
119
+ "@deepseek-ai/dsh-cmdline": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
120
+ "@deepseek-ai/dsh-commands": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
121
+ "@deepseek-ai/dsh-credentials": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
122
+ "@deepseek-ai/dsh-llm": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
123
+ "@deepseek-ai/dsh-session": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
124
+ "@deepseek-ai/dsh-session-persistence": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
125
+ "@deepseek-ai/dsh-settings": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
126
+ "@deepseek-ai/dsh-subagent": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
127
+ "@deepseek-ai/dsh-user-approval": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8",
128
+ "@deepseek-ai/dsh-user-questions": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8"
114
129
  },
115
130
  "peerDependenciesMeta": {
116
- "@deepseek-ai/dsh-user-approval": {
131
+ "@deepseek-ai/dsh-agent-preset": {
117
132
  "optional": true
118
133
  },
119
- "@deepseek-ai/dsh-user-questions": {
134
+ "@deepseek-ai/dsh-agent-preset-registry": {
135
+ "optional": true
136
+ },
137
+ "@deepseek-ai/dsh-agent-presets": {
120
138
  "optional": true
121
139
  },
122
140
  "@deepseek-ai/dsh-credentials": {
@@ -124,42 +142,51 @@
124
142
  },
125
143
  "@deepseek-ai/dsh-settings": {
126
144
  "optional": true
145
+ },
146
+ "@deepseek-ai/dsh-user-approval": {
147
+ "optional": true
148
+ },
149
+ "@deepseek-ai/dsh-user-questions": {
150
+ "optional": true
127
151
  }
128
152
  },
129
153
  "devDependencies": {
130
- "@deepseek-ai/cordis": "^4.0.1",
131
- "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
132
- "@deepseek-ai/dsh": "0.1.5-rc.2",
133
- "@deepseek-ai/dsh-agent": "0.1.5-rc.2",
134
- "@deepseek-ai/dsh-agent-default-model": "0.1.5-rc.2",
135
- "@deepseek-ai/dsh-agent-loop": "0.1.5-rc.2",
136
- "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.2",
137
- "@deepseek-ai/dsh-atomic-write": "0.1.5-rc.2",
138
- "@deepseek-ai/dsh-attachment": "0.1.5-rc.2",
139
- "@deepseek-ai/dsh-brand": "0.1.5-rc.2",
140
- "@deepseek-ai/dsh-cmdline": "0.1.5-rc.2",
141
- "@deepseek-ai/dsh-commands": "0.1.5-rc.2",
142
- "@deepseek-ai/dsh-credentials": "0.1.5-rc.2",
143
- "@deepseek-ai/dsh-home-paths": "0.1.5-rc.2",
144
- "@deepseek-ai/dsh-invariants": "0.1.5-rc.2",
145
- "@deepseek-ai/dsh-jobs": "0.1.5-rc.2",
146
- "@deepseek-ai/dsh-llm": "0.1.5-rc.2",
147
- "@deepseek-ai/dsh-llm-mock-server": "0.1.5-rc.2",
148
- "@deepseek-ai/dsh-sandbox": "0.1.5-rc.2",
149
- "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.2",
150
- "@deepseek-ai/dsh-scope": "0.1.5-rc.2",
151
- "@deepseek-ai/dsh-session": "0.1.5-rc.2",
152
- "@deepseek-ai/dsh-session-persistence": "0.1.5-rc.2",
153
- "@deepseek-ai/dsh-session-projection": "0.1.5-rc.2",
154
- "@deepseek-ai/dsh-session-projection-cache": "0.1.5-rc.2",
155
- "@deepseek-ai/dsh-settings": "0.1.5-rc.2",
156
- "@deepseek-ai/dsh-subagent": "0.1.5-rc.2",
157
- "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.2",
158
- "@deepseek-ai/dsh-timeout": "0.1.5-rc.2",
159
- "@deepseek-ai/dsh-tools": "0.1.5-rc.2",
160
- "@deepseek-ai/dsh-typert-protocol": "0.1.5-rc.2",
161
- "@deepseek-ai/dsh-user-approval": "0.1.5-rc.2",
162
- "@deepseek-ai/dsh-user-questions": "0.1.5-rc.2",
154
+ "@deepseek-ai/cordis": "4.0.2",
155
+ "@deepseek-ai/cordis-plugin-hmr": "1.0.17",
156
+ "@deepseek-ai/cordis-plugin-include": "1.0.7",
157
+ "@deepseek-ai/cordis-plugin-loader": "1.0.3",
158
+ "@deepseek-ai/cordis-plugin-timer": "1.1.4",
159
+ "@deepseek-ai/dsh": "0.1.5-rc.3",
160
+ "@deepseek-ai/dsh-agent": "0.1.5-rc.3",
161
+ "@deepseek-ai/dsh-agent-default-model": "0.1.5-rc.3",
162
+ "@deepseek-ai/dsh-agent-loop": "0.1.5-rc.3",
163
+ "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.3",
164
+ "@deepseek-ai/dsh-atomic-write": "0.1.5-rc.3",
165
+ "@deepseek-ai/dsh-attachment": "0.1.5-rc.3",
166
+ "@deepseek-ai/dsh-brand": "0.1.5-rc.3",
167
+ "@deepseek-ai/dsh-cmdline": "0.1.5-rc.3",
168
+ "@deepseek-ai/dsh-commands": "0.1.5-rc.3",
169
+ "@deepseek-ai/dsh-credentials": "0.1.5-rc.3",
170
+ "@deepseek-ai/dsh-home-paths": "0.1.5-rc.3",
171
+ "@deepseek-ai/dsh-invariants": "0.1.5-rc.3",
172
+ "@deepseek-ai/dsh-jobs": "0.1.5-rc.3",
173
+ "@deepseek-ai/dsh-llm": "0.1.5-rc.3",
174
+ "@deepseek-ai/dsh-llm-mock-server": "0.1.5-rc.3",
175
+ "@deepseek-ai/dsh-sandbox": "0.1.5-rc.3",
176
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.3",
177
+ "@deepseek-ai/dsh-scope": "0.1.5-rc.3",
178
+ "@deepseek-ai/dsh-session": "0.1.5-rc.3",
179
+ "@deepseek-ai/dsh-session-persistence": "0.1.5-rc.3",
180
+ "@deepseek-ai/dsh-session-projection": "0.1.5-rc.3",
181
+ "@deepseek-ai/dsh-session-projection-cache": "0.1.5-rc.3",
182
+ "@deepseek-ai/dsh-settings": "0.1.5-rc.3",
183
+ "@deepseek-ai/dsh-subagent": "0.1.5-rc.3",
184
+ "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.3",
185
+ "@deepseek-ai/dsh-timeout": "0.1.5-rc.3",
186
+ "@deepseek-ai/dsh-tools": "0.1.5-rc.3",
187
+ "@deepseek-ai/dsh-typert-protocol": "0.1.5-rc.3",
188
+ "@deepseek-ai/dsh-user-approval": "0.1.5-rc.3",
189
+ "@deepseek-ai/dsh-user-questions": "0.1.5-rc.3",
163
190
  "@types/node": "^24.0.0",
164
191
  "@xterm/headless": "^6.0.0",
165
192
  "semver": "^7.8.5",