@agi-fans/oh-my-dsh 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  **Into the Unknown**
8
8
 
9
- omdsh is a focused, keyboard-first DeepSeek coding agent built on the plugin architecture of [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) and inspired by the interaction quality of [oh-my-pi](https://github.com/can1357/oh-my-pi) and the original [Pi](https://github.com/earendil-works/pi) agent harness.
9
+ omdsh is the terminal client for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness): a focused, keyboard-first DeepSeek coding agent built on its plugin architecture, with interaction quality inspired by [oh-my-pi](https://github.com/can1357/oh-my-pi) and the original [Pi](https://github.com/earendil-works/pi) agent harness.
10
10
 
11
11
  [![CI](https://github.com/agi-fans/oh-my-dsh/actions/workflows/ci.yml/badge.svg)](https://github.com/agi-fans/oh-my-dsh/actions/workflows/ci.yml) [![npm version](https://img.shields.io/npm/v/%40agi-fans%2Foh-my-dsh?style=flat-square&logo=npm)](https://www.npmjs.com/package/@agi-fans/oh-my-dsh) [![npm downloads](https://img.shields.io/npm/dm/%40agi-fans%2Foh-my-dsh?style=flat-square&logo=npm)](https://www.npmjs.com/package/@agi-fans/oh-my-dsh) [![Node.js ^22.19 or >=24](https://img.shields.io/badge/node-%5E22.19%20%7C%7C%20%3E%3D24-339933?style=flat-square&logo=node.js)](https://nodejs.org/) [![MIT License](https://img.shields.io/npm/l/%40agi-fans%2Foh-my-dsh?style=flat-square)](https://github.com/agi-fans/oh-my-dsh/blob/main/LICENSE)
12
12
 
@@ -14,22 +14,26 @@ omdsh is a focused, keyboard-first DeepSeek coding agent built on the plugin arc
14
14
 
15
15
  </div>
16
16
 
17
- [![Hello Oh My DSH — v0.19.0 terminal recording](https://raw.githubusercontent.com/agi-fans/oh-my-dsh/main/apps/site/public/screenshot.webp)](https://github.com/agi-fans/oh-my-dsh/blob/main/apps/site/public/hello-oh-my-dsh.mp4)
17
+ [![omdsh terminal demo — one real DeepSeek account turn at 150×39](https://raw.githubusercontent.com/agi-fans/oh-my-dsh/main/apps/site/public/omdsh-demo-poster.png)](https://github.com/agi-fans/oh-my-dsh/blob/main/apps/site/public/omdsh-demo.mp4)
18
+
19
+ A real Kaku recording at 150×39: one DeepSeek account turn reads a file, fixes it, runs it, and reports the verified result.
18
20
 
19
21
  ## Quick start
20
22
 
21
- Requirements: Node.js 22.19 or later in the 22.x line, or Node.js 24 or newer, plus a DeepSeek API key for live model turns.
23
+ Requirements: Node.js 22.19 or later in the 22.x line, or Node.js 24 or newer, plus a DeepSeek account or API key for live model turns.
22
24
 
23
25
  ```sh
24
26
  npm install --global @agi-fans/oh-my-dsh
25
27
  omdsh
26
28
  ```
27
29
 
28
- Run `/login` once inside omdsh to validate and save your DeepSeek API key, then start a conversation. To try it without a global installation, run `npx @agi-fans/oh-my-dsh`.
30
+ Run `/login` once inside omdsh to sign in with a DeepSeek account or save an API key, then start a conversation. To try it without a global installation, run `npx @agi-fans/oh-my-dsh`.
29
31
 
30
32
  ## Highlights
31
33
 
32
- - **Durable conversations:** search, pin, rename, and resume sessions in `/sessions`; rewind, retry, compact, and export complete transcripts as Markdown or standalone HTML.
34
+ - **The terminal client for DeepSeek Harness:** a native-scrollback TUI with a docked composer, display-cell layout, and a keyboard path through every flow — built on the published plugin runtime, not a fork.
35
+ - **Durable conversations:** search, pin, rename, and resume sessions in `/resume`; rewind, retry, compact, and export complete transcripts as Markdown or standalone HTML.
36
+ - **DeepSeek-native auth:** sign in from `/login` through the browser or store a key; a DeepSeek account grant shared with DSH is reused, `/logout` signs it out, and web search/fetch use the same credential.
33
37
  - **Three real session controls:** choose a Harness Agent preset (Standard, PTC, Minimal, or Cordis), Workflow (Default or Plan), and Access (Read only, Workspace write, or Full access). Each Agent preset owns its tool exposure; PTC uses the generated TypeScript SDK automatically.
34
38
  - **Rich terminal input:** mention project files and other sessions with `@`, paste clipboard images, reuse persistent prompt history, edit multiline prompts externally, and retrieve queued follow-ups.
35
39
  - **Readable turns:** follow thinking, replies, and tool previews while the agent works. Completed work folds to a duration summary and the full final answer; `Ctrl+O` restores the process view. Scroll through either view, keep the current prompt pinned, and jump back to the latest message with `End`.
@@ -109,7 +113,7 @@ See the reproducible [TUI performance report](https://omdsh.agi.fans/docs/perfor
109
113
 
110
114
  ## Configuration
111
115
 
112
- Run `/login` to configure a provider. DeepSeek still opens the official key dashboard, validates the key, and prefers the stored credential over an inherited `DEEPSEEK_API_KEY`. When a mounted provider registers a Harness authorization flow, `/login` lists that flow and its methods and the terminal only renders the notices and prompts the flow asks for. The same command can also activate a catalog API-key provider or add a custom provider with its own id, base URL, protocol, and model ids. `/model` then lists every live route. `/logout` removes an omdsh-managed choice and, for DeepSeek, falls back to the environment when available.
116
+ Run `/login` to configure a provider. DeepSeek opens the official key dashboard, validates the key, and stores it in the shared Harness credential store under `DEEPSEEK_API_KEY`; an environment-owned value is left untouched. A DeepSeek account can be signed in from `/login`: the TUI listens on a loopback callback for the browser flow and reuses any grant already established by DSH Web/Desktop. The account route (`deepseek-account`) then appears in `/model` beside the API-key route; sign-out is available from `/logout` or the same account prompt. When a mounted provider registers a Harness authorization flow, `/login` lists that flow and its methods and the terminal only renders the notices and prompts the flow asks for. The same command can also activate a catalog API-key provider or add a custom provider with its own id, base URL, protocol, and model ids. `/logout` removes only file-stored credentials and falls back to the environment when available.
113
117
 
114
118
  Model settings and the rest of the plugin config persist into the active Profile's Cordis patch, `$OMDSH_HOME/profiles/omdsh/cordis.patch.yml`; a `settings.yaml` left by an earlier release is imported once at startup and renamed to `settings.yaml.imported`. Use `/model favorite` and `/model unfavorite` to maintain a small local cycle list, then use `Ctrl+P`/`Alt+P` to move through it and `Ctrl+T` to change reasoning effort. Skills and MCP configuration are documented in [Skills and MCP](https://omdsh.agi.fans/docs/skills-and-mcp/).
115
119
 
package/config/cordis.yml CHANGED
@@ -1,7 +1,8 @@
1
1
  # omdsh product bundle — one insert over an empty Profile root.
2
- # TUI coding agent over the DeepSeek Harness core runtime. No Host, no HTTP, no
3
- # browser layer: local executors, the executor-less agent spine, the DeepSeek
4
- # adapter, and the omdsh TUI seam (provider + interactive runner).
2
+ # TUI coding agent over the DeepSeek Harness core runtime. No public Host or
3
+ # browser layer: one loopback HTTP listener exists only to receive the DeepSeek
4
+ # account OAuth callback. Local executors, the executor-less agent spine, the
5
+ # DeepSeek adapter, and the omdsh TUI seam (provider + interactive runner).
5
6
  #
6
7
  # Model/provider rows read the CLI/environment overrides through the
7
8
  # harness's sanctioned dynamic-config mechanism (!!js under plugin config).
@@ -36,6 +37,14 @@
36
37
  # and omitting models keeps future adapter additions visible.
37
38
  maxTokens: 384000
38
39
 
40
+ # The account route shares the same transport but resolves only the DeepSeek
41
+ # account grant; it never falls back to an API key. Hosts that sign in through
42
+ # the shared credential store (DSH Web/Desktop) expose `deepseek-account` here.
43
+ - id: llm-deepseek-account
44
+ name: '@deepseek-ai/dsh-llm-deepseek-account'
45
+ config:
46
+ maxTokens: 384000
47
+
39
48
  - id: session
40
49
  name: '@deepseek-ai/dsh-session'
41
50
 
@@ -87,7 +96,7 @@
87
96
 
88
97
  # Model-facing session history: five read-only tools that let the agent find
89
98
  # work it did in an earlier session. Without them a model that solved
90
- # something three sessions ago can only be told again, because `/sessions`
99
+ # something three sessions ago can only be told again, because `/resume`
91
100
  # and `/resume` are human affordances it cannot reach. Cross-session reads
92
101
  # are authorized only when the target session's cwd exactly matches the
93
102
  # caller's, so the model cannot read another workspace's history.
@@ -119,6 +128,14 @@
119
128
  config:
120
129
  backend: json
121
130
 
131
+ # Durable reminders. Delivery resolves its Session through the background
132
+ # controller below; a cold Session is resumed without touching the TUI.
133
+ - id: schedule
134
+ name: '@deepseek-ai/dsh-schedule'
135
+ config:
136
+ deliveryHistoryDays: 30
137
+ deliveryHistoryRecords: 200
138
+
122
139
  # Durable projection checkpoints — the piece that lets a cold session
123
140
  # answer its title without reading its log. Without it the `@` session
124
141
  # menu and the recent-session list can only label cold sessions by id.
@@ -177,6 +194,27 @@
177
194
  - id: authorization
178
195
  name: '@deepseek-ai/dsh-authorization'
179
196
 
197
+ # Move the retired product credential into the upstream DeepSeek slot before
198
+ # any model or web request reads it. Idempotent; no network.
199
+ - id: credential-migration
200
+ name: '@agi-fans/oh-my-dsh/credential-migration'
201
+
202
+ # Loopback-only callback host for the DeepSeek account browser sign-in. It
203
+ # binds 127.0.0.1 on an OS-assigned port and serves only the exact
204
+ # /oauth/callback route registered while an attempt is running.
205
+ - id: web-server
206
+ name: '@deepseek-ai/dsh-host-webserver'
207
+ config:
208
+ host: 127.0.0.1
209
+ port: 0
210
+
211
+ # DeepSeek account grant over the shared credential store. The browser
212
+ # callback needs a loopback webServer; this TUI host does not mount one yet,
213
+ # so the service reuses a grant established by DSH Web/Desktop and reports
214
+ # ACCOUNT_SIGN_IN_REQUIRED otherwise.
215
+ - id: deepseek-account
216
+ name: '@deepseek-ai/dsh-deepseek-account-platform'
217
+
180
218
  # Dormant multi-provider twin: zero extra picker routes until a `llm-pi-ai:`
181
219
  # settings section supplies profiles. /login writes those profiles; /model
182
220
  # lists whatever routes become live. Keep llm-deepseek as the official
@@ -202,14 +240,22 @@
202
240
  config:
203
241
  default: standard
204
242
 
243
+ # Background Session resolution for plugins that deliver without a client,
244
+ # currently Schedule. It exposes only `resolveAgent`; the visible Session is
245
+ # never activated or replaced.
246
+ - id: session-controller
247
+ name: '@agi-fans/oh-my-dsh/session-controller'
248
+
205
249
  - id: commands
206
250
  name: '@deepseek-ai/dsh-commands'
207
251
 
208
- # `/feedback <text>` records one log-only `feedback/record` event: immediate,
209
- # model-invisible, and no report leaves the machine. The Web feedback dialog
210
- # behind the same service stays a host-plane surface omdsh does not mount.
211
- - id: command-feedback
212
- name: '@deepseek-ai/dsh-command-feedback'
252
+ # `/rate` stores one judgment per finalized assistant reply. The service owns
253
+ # the canonical Session events and compare-and-set versions; the TUI only
254
+ # renders the picker and never puts feedback into model context.
255
+ - id: message-feedback
256
+ name: '@deepseek-ai/dsh-message-feedback'
257
+ config:
258
+ maxNoteBytes: 8192
213
259
 
214
260
  - id: user-questions
215
261
  name: '@deepseek-ai/dsh-user-questions'
@@ -219,6 +265,11 @@
219
265
  config:
220
266
  policy: !!js "(process.env.OMDSH_PERMISSION_MODE || 'workspace-write') === 'danger-full-access' ? 'never' : 'ask'"
221
267
 
268
+ - id: approval-rules
269
+ name: '@agi-fans/dsh-tui/approval-rules'
270
+ config:
271
+ stateDir: !!js (process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/omdsh/approval-rules'
272
+
222
273
  # Every session starts with one explicit access preset. The environment is a
223
274
  # deployment override; the TUI switches it later through the /permission picker.
224
275
  - id: sandbox
@@ -236,6 +287,12 @@
236
287
  - id: fs-observation-policy
237
288
  name: '@deepseek-ai/dsh-fs-observation-policy'
238
289
 
290
+ - id: file-recovery
291
+ name: '@agi-fans/dsh-tui/file-recovery-local'
292
+ config:
293
+ enabled: false
294
+ stateDir: !!js (process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/omdsh/file-recovery'
295
+
239
296
  - id: subprocess
240
297
  name: '@deepseek-ai/dsh-subprocess-local'
241
298
 
@@ -337,12 +394,23 @@
337
394
  config:
338
395
  maxBytes: 65536
339
396
 
397
+ - id: working-directory
398
+ name: '@deepseek-ai/dsh-working-directory'
399
+
400
+ - id: tool-working-directory
401
+ name: '@deepseek-ai/dsh-tool-working-directory'
402
+
340
403
  - id: tool-skill
341
404
  name: '@deepseek-ai/dsh-tool-skill'
342
405
 
343
406
  - id: tool-jobs
344
407
  name: '@deepseek-ai/dsh-tool-jobs'
345
408
 
409
+ # Reminder management tools bind to the calling Session and disappear in
410
+ # minimal through its allow list; delegated children are refused by the tool.
411
+ - id: tool-schedule
412
+ name: '@deepseek-ai/dsh-tool-schedule'
413
+
346
414
  # Persistent, owner-scoped terminal sessions for interactive stdin and
347
415
  # cross-call state (REPLs, debuggers, a shell to return to). The one-shot
348
416
  # bash/pwsh tools remain the default for bounded commands.
@@ -437,6 +505,17 @@
437
505
  # overlay.
438
506
  - id: web
439
507
  name: '@deepseek-ai/dsh-web'
508
+ config:
509
+ # The DeepSeek API providers retrieve directly, so a local fake-IP resolver
510
+ # or an auxiliary Messages turn cannot block search and fetch. The older
511
+ # Messages search and local HTTP fetch stay mounted as selectable fallbacks.
512
+ searchProvider: deepseek-search-api
513
+ fetchProvider: deepseek-fetch-api
514
+
515
+ - id: web-deepseek-api
516
+ name: '@deepseek-ai/dsh-web-deepseek-api'
517
+ config:
518
+ apiKeyEnv: DEEPSEEK_API_KEY
440
519
 
441
520
  - id: web-search-deepseek
442
521
  name: '@deepseek-ai/dsh-web-search-deepseek'
@@ -512,6 +591,20 @@
512
591
  - id: subagent
513
592
  name: '@deepseek-ai/dsh-subagent'
514
593
 
594
+ - id: advisor
595
+ name: '@agi-fans/oh-my-dsh/advisor'
596
+
597
+ - id: tui-command-advisor
598
+ name: '@agi-fans/dsh-tui/command-advisor'
599
+
600
+ - id: btw
601
+ name: '@agi-fans/dsh-tui/btw'
602
+ config:
603
+ stateDir: !!js "(process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/omdsh/btw'"
604
+
605
+ - id: tui-command-btw
606
+ name: '@agi-fans/dsh-tui/command-btw'
607
+
515
608
  - id: subagent-model-selection-settings
516
609
  name: '@deepseek-ai/dsh-tool-subagent/model-selection-settings'
517
610
 
@@ -536,10 +629,10 @@
536
629
  # transport: `spawn`/`fork` stay mounted and keep their parent-shared
537
630
  # features, which ACP cannot honour.
538
631
  #
539
- # ACP advertises no start-time capabilities and implements no continuable
540
- # runs, so `providerName: acp` must not be selected by a tool that needs
541
- # `agentOptions`, `persona`, `toolFilter`, a numeric `maxDepth`, or
542
- # `backgroundMode: continuable`.
632
+ # ACP advertises no parent-controlled start-time capabilities or follow-ups.
633
+ # Do not select `providerName: acp` for a tool that needs `agentOptions`,
634
+ # `persona`, `toolFilter`, or a numeric `maxDepth`. Local continuable
635
+ # children are managed by the subagent runtime.
543
636
  - id: subagent-acp
544
637
  name: '@deepseek-ai/dsh-subagent-acp'
545
638
  config:
@@ -554,8 +647,7 @@
554
647
  env:
555
648
  DSH_HOME: !!js (process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/acp-child'
556
649
  OMDSH_HOME: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || undefined
557
- OMDSH_DEEPSEEK_API_KEY: !!js process.env.OMDSH_DEEPSEEK_API_KEY || undefined
558
- DEEPSEEK_API_KEY: !!js process.env.DEEPSEEK_API_KEY || process.env.OMDSH_DEEPSEEK_API_KEY || undefined
650
+ DEEPSEEK_API_KEY: !!js process.env.DEEPSEEK_API_KEY || undefined
559
651
 
560
652
  - id: subagent-control
561
653
  name: '@deepseek-ai/dsh-tool-subagent-control'
@@ -568,25 +660,21 @@
568
660
  config:
569
661
  provider: spawn
570
662
  toolName: subagent
571
- backgroundMode: continuable
572
663
 
573
664
  - id: tool-subagent-fork
574
665
  name: '@deepseek-ai/dsh-tool-subagent'
575
666
  config:
576
667
  provider: fork
577
668
  toolName: subagent_fork
578
- backgroundMode: continuable
579
669
 
580
670
  # The isolated delegation tool. It is a second `dsh-tool-subagent` over the
581
671
  # out-of-process backend, so a caller chooses isolation per delegation
582
672
  # instead of trading the parent-shared features away globally.
583
673
  #
584
- # Three settings are forced by ACP's absent capabilities, not preferences:
674
+ # ACP's absent capabilities constrain the isolated tool:
585
675
  # - `maxDepth: provider-managed` — a numeric cap is refused because the
586
676
  # provider cannot enforce recursion depth across a process boundary, and
587
677
  # the child's own composition already bounds it.
588
- # - `backgroundMode: one-shot` — the published ACP provider implements no
589
- # `prepareContinuable`, so a continuable run is refused at mount.
590
678
  # - no `agentOptions`/`persona`/`toolFilter` — all three are refused.
591
679
  # The consequence is user-visible: an isolated child cannot be steered or
592
680
  # followed up after dispatch. Use `subagent` when that matters.
@@ -595,7 +683,6 @@
595
683
  config:
596
684
  provider: acp
597
685
  toolName: subagent_isolated
598
- backgroundMode: one-shot
599
686
  maxDepth: provider-managed
600
687
 
601
688
  # Workflow and Ralph, as the upstream base bundle mounts them.
@@ -610,10 +697,7 @@
610
697
  config:
611
698
  provider: spawn
612
699
 
613
- # `toolName` is renamed because omdsh already owns a `/workflow` slash command
614
- # that switches the Default/Plan workflow. The two live in different
615
- # namespaces (tool vs command) and never collide at runtime, but a bare
616
- # `workflow` entry in `/tools` would read as that command.
700
+ # Keep the explicit execution name stable for existing sessions and tool policies.
617
701
  - id: tool-workflow
618
702
  name: '@deepseek-ai/dsh-tool-workflow'
619
703
  config:
@@ -640,7 +724,7 @@
640
724
  model: !!js process.env.OMDSH_MODEL || 'deepseek-flash'
641
725
  # The settings overlay edits the Profile patch for optional features;
642
726
  # `disabled` is a Loader option the settings service cannot write, so
643
- # this row carries the home whose patch the Features section owns.
727
+ # this row carries the home whose patch the Tools feature controls own.
644
728
  dshHome: !!js process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh'
645
729
 
646
730
  - id: agent-behavior
@@ -652,9 +736,7 @@
652
736
  - id: tui-session-runtime
653
737
  name: '@agi-fans/dsh-tui/session-runtime'
654
738
  config:
655
- # Product state this runtime owns: Session Library rows reused across
656
- # launches (without them a cold process reads every stored log again) and
657
- # the marker that upgrades stored sessions once per session format.
739
+ # Session Library rows reused across launches without rewriting old logs.
658
740
  stateDir: !!js "(process.env.OMDSH_HOME || process.env.DSH_HOME || process.env.HOME + '/.dsh') + '/omdsh'"
659
741
 
660
742
  - id: tui-human-interaction
@@ -663,6 +745,9 @@
663
745
  - id: tui-command-session
664
746
  name: '@agi-fans/dsh-tui/command-session'
665
747
 
748
+ - id: tui-command-worktree
749
+ name: '@agi-fans/dsh-tui/command-worktree'
750
+
666
751
  - id: tui-command-session-configuration
667
752
  name: '@agi-fans/dsh-tui/command-session-configuration'
668
753
 
@@ -696,6 +781,12 @@
696
781
  - id: tui-command-jobs
697
782
  name: '@agi-fans/dsh-tui/command-jobs'
698
783
 
784
+ - id: tui-command-rate
785
+ name: '@agi-fans/dsh-tui/command-rate'
786
+
787
+ - id: tui-command-schedule
788
+ name: '@agi-fans/dsh-tui/command-schedule'
789
+
699
790
  - id: tui-startup-notices
700
791
  name: '@agi-fans/dsh-tui/startup-notices'
701
792
 
@@ -0,0 +1,20 @@
1
+ # Internal composition for durable side consultations, including after resume.
2
+ - insert:
3
+ - id: preset-btw
4
+ name: '@deepseek-ai/dsh-agent-preset'
5
+ config:
6
+ id: btw
7
+ name: Side consultation
8
+ description: Answer from a fixed conversation snapshot without tools.
9
+ order: 100
10
+ plugins:
11
+ - id: persona
12
+ name: '@deepseek-ai/dsh-persona'
13
+ config:
14
+ prefix: >-
15
+ You are answering a separate side question about the copied conversation. Answer the current question briefly and directly using that context. Do not execute tasks, use tools, or ask follow-up questions. Your answer is independent advice and is not sent to the primary agent.{{omdsh_agent_behavior}}
16
+ complete: true
17
+ includeRuntimeContext: false
18
+
19
+ - id: policy
20
+ name: '@agi-fans/dsh-tui/btw-policy'
@@ -17,7 +17,7 @@
17
17
  name: '@deepseek-ai/dsh-persona'
18
18
  config:
19
19
  prefix: >-
20
- You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}. Prefer programmatic tool calling for multi-step operations when the generated tools SDK is available.
20
+ You are a coding agent powered by the {{model}} model. Prefer programmatic tool calling for multi-step operations when the generated tools SDK is available.
21
21
 
22
22
  # PTC presents the tool registry as a generated SDK over `run_code`, so the
23
23
  # general-purpose `workflow_run` tool would be a second model-authored
@@ -41,3 +41,8 @@
41
41
  name: '@deepseek-ai/dsh-agent-tool-presentation'
42
42
  config:
43
43
  mode: ptc
44
+
45
+ # Upstream Standard/Cordis/PTC presets carry a clock reading at least
46
+ # every ten minutes; the TUI process zone is the fallback display zone.
47
+ - id: time-context
48
+ name: '@deepseek-ai/dsh-time-context'
@@ -17,7 +17,7 @@
17
17
  name: '@deepseek-ai/dsh-persona'
18
18
  config:
19
19
  prefix: |-
20
- You are a coding agent powered by the {{model}} model, running on the DeepSeek Harness. Your working directory is {{cwd}}.
20
+ You are a coding agent powered by the {{model}} model, running on the DeepSeek Harness.
21
21
 
22
22
  You can inspect the live Cordis runtime while authoring compositions and plugins. Host composition owns shared registries and backends; an Agent preset owns one session's tools, persona, prompt sections, and isolated services. Use cordis_inspect_list to discover providers, then cordis_inspect_query to read exact Service, Event, and Tool APIs. Use the development skills for composition and plugin authoring. The plugin_manager tool manages this profile; it requires full host access or explicit approval, and dependency scripts require separate approval.
23
23
 
@@ -34,3 +34,8 @@
34
34
 
35
35
  - id: tool-plugin-manager
36
36
  name: '@deepseek-ai/dsh-plugin-manager/tools'
37
+
38
+ # Upstream Standard/Cordis/PTC presets carry a clock reading at least
39
+ # every ten minutes; the TUI process zone is the fallback display zone.
40
+ - id: time-context
41
+ name: '@deepseek-ai/dsh-time-context'
@@ -17,4 +17,9 @@
17
17
  name: '@deepseek-ai/dsh-persona'
18
18
  config:
19
19
  prefix: >-
20
- You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}.
20
+ You are a coding agent powered by the {{model}} model.
21
+
22
+ # Upstream Standard/Cordis/PTC presets carry a clock reading at least
23
+ # every ten minutes; the TUI process zone is the fallback display zone.
24
+ - id: time-context
25
+ name: '@deepseek-ai/dsh-time-context'
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ /** Preserve native stdio under a pre-established Harness process sandbox. */
2
+ import { spawn } from 'node:child_process';
3
+ const [program, ...args] = process.argv.slice(2);
4
+ if (program === undefined)
5
+ process.exit(1);
6
+ const child = spawn(program, args, { stdio: 'inherit', shell: false });
7
+ child.on('error', () => { process.exitCode = 1; });
8
+ child.on('exit', (code, signal) => {
9
+ if (signal !== null)
10
+ process.kill(process.pid, signal);
11
+ else
12
+ process.exitCode = code ?? 1;
13
+ });
14
+ //# sourceMappingURL=advisor-launcher.js.map
@@ -0,0 +1,34 @@
1
+ /** Context-only native consultations owned by the Harness activation registry. */
2
+ import { type Context, type Volatile } from '@deepseek-ai/cordis';
3
+ import z from '@deepseek-ai/schemastery';
4
+ import type { TuiAdvisor, TuiSubagentActivity } from '@agi-fans/dsh-tui';
5
+ export declare const name = "omdsh-advisor";
6
+ export declare const inject: string[];
7
+ export interface Config {
8
+ allowModelConsultations: Volatile<boolean>;
9
+ }
10
+ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
11
+ allowModelConsultations: z<boolean, boolean, "volatile-defined">;
12
+ }>>, Schemastery.ObjectT<NoInfer<{
13
+ allowModelConsultations: z<boolean, boolean, "volatile-defined">;
14
+ }>>, "plain">;
15
+ /** Extract a compact live inspection step from one native advisor JSON stream line. */
16
+ export declare function parseAdviceActivity(provider: TuiAdvisor, line: string, state?: {
17
+ lastTool?: string | undefined;
18
+ }): TuiSubagentActivity | undefined;
19
+ /** Build a bounded read-only workspace snapshot when the caller did not supply explicit context. */
20
+ export declare function workspaceContext(cwd: string, question?: string, signal?: AbortSignal): Promise<string>;
21
+ /** Reject oversized input instead of silently discarding evidence. */
22
+ export declare function advicePrompt(question: string, context?: string): string;
23
+ /**
24
+ * Native restrictions supplement the outer filesystem sandbox.
25
+ *
26
+ * The outer `ctx.sandbox.confine` already enforces kernel-level read-only access
27
+ * outside the private scratch directory (`confined.enforcement === 'full'`).
28
+ * Codex must not spawn a nested macOS `sandbox-exec` (`sandbox_mode="danger-full-access"`
29
+ * disables its inner sandbox wrapper while the outer OS sandbox still blocks every
30
+ * write outside the scratch root). Claude Code enables only its read-only file
31
+ * inspection tools (`Read,Grep,Glob`) under `plan` permission mode.
32
+ */
33
+ export declare function adviceArgv(provider: TuiAdvisor, argv: readonly string[]): string[];
34
+ export declare function apply(ctx: Context, config: Config): void;