Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .changeset/dsh-020-native-projections.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
"@orbisapp/remote-dsh": minor
---

Support DeepSeek Harness 0.2.0-rc.2 and its V4 session format. Project native tool results and dynamic tool changes, read cached titles for ordinary and forked sessions, and rebase developer-event references during replay. Update the bundled Settings icon to the current DSH export.

Use the session controller's revisions consistently for remote events and snapshots. Raw replay now requires recording format version 2 with Session format 4.

Read live and cold sessions through native observations and use native work-state projections. Keep plan/todo read units available before Web presets open an Agent; preserve Orbis enqueue timestamps and protocol revisions.

Requires the supported DSH 0.2 release line; older 0.1 hosts are no longer supported.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ jobs:

- run: pnpm install --frozen-lockfile

# `check:core` covers the DSH-independent subset: the adapter and host
# depend on structural ports only, so they typecheck without the Harness.
# Adapter and host production code use structural ports. Core fixtures
# exercise native DSH projection definitions installed from the lockfile.
- run: pnpm run check:core

# The plugin is where DSH services are cast into those ports, so it is the
Expand Down
30 changes: 22 additions & 8 deletions packages/orbis-remote-dsh/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,19 @@ handshake. The host advertises the canonical v2 protocol rather than legacy
`orbis.sessions.prompt`, `orbis.sessions.update`, and `orbis.sessions.cancel`;
- replayable terminal `entry.appended` events with host-assigned cursors,
transient deltas, and ordered session-state updates;
- DSH `sessionPersistence` and the native harness runtime as catalog/transcript
authority, with the node state storing only host identity, cursor indexes,
- DSH `sessionPersistence` for catalog identity and `sessionQuery.observeSession`
for consistent live/cold history and native projection state, with the node state storing only host identity, cursor indexes,
and idempotency claims. There is no host transcript copy, ACK journal, or
retention overlay.

Plan, goal, todos, and inbox state use native DSH projections. The plugin keeps
plan/todo read units registered on the host so a cold read works before a Web
preset opens an Agent. Todo's native plugin runs with private tool and prompt
services; preset tools and policies keep their own ownership. Orbis retains only
its enqueue timestamps and protocol revisions. Observation
leases are released after each read, and projection-only reads never expand the
transcript.

The initial release supports two automatically discovered connection paths:

- **LAN:** private IPv4 addresses are discovered automatically on the standalone
Expand Down Expand Up @@ -65,7 +73,8 @@ pnpm --filter @orbisapp/remote-dsh exec dsh plugin --profile web add "@orbisapp/
DSH_TELEMETRY_DISABLED=1 pnpm --filter @orbisapp/remote-dsh exec dsh web
```

Adapter and host tests do not require the DSH SDK:
Adapter and host production code use structural ports. Their tests use native
DSH projection definitions so fixtures follow upstream domain behavior:

```sh
pnpm --filter @orbisapp/remote-dsh run check:core
Expand Down Expand Up @@ -95,7 +104,7 @@ npm dist-tag/exact version:

```sh
pnpm run serve:dsh --dsh local:/path/to/deepseek-harness
pnpm run serve:dsh --dsh github:tag:dsh-v0.1.5-rc.1
pnpm run serve:dsh --dsh github:tag:dsh-v0.2.0-rc.2
pnpm run serve:dsh --dsh github:commit:a66e4702047846cdaa10c66c9d3df3951f5ea70d
pnpm run serve:dsh --dsh npm:latest
pnpm run serve:dsh --dsh-bin /path/to/dsh
Expand Down Expand Up @@ -143,6 +152,9 @@ UI. Replay currently accepts one native session per file and requires the record
sequence to match a fresh session boundary, so a partial mid-session capture fails explicitly rather
than producing a corrupt transcript. Recording and replay cannot run simultaneously.

Replay requires raw recording format version 2 with Session format 4. Older raw exports are
rejected before creating a session; native historical Session migration remains owned by DSH.

Raw recordings are intentionally not redacted. They can contain prompts, model output, tool
arguments and results, workspace paths, and provider metadata. Treat every export as sensitive test
data and do not commit it as a fixture without reviewing its contents. The normal plugin runtime does
Expand Down Expand Up @@ -271,10 +283,12 @@ writes, state permissions/no-secret assertions, and a full DSH Web restart. It
never uses a fake backend or transport. Without `DEEPSEEK_API_KEY`, the
disposable profile disables the live DeepSeek adapter and mounts DSH's official
`@deepseek-ai/dsh-llm-replay` test adapter with a checked-in deterministic
response. The runner asserts that exact response, non-zero usage, restart
replay, and full history through the real DSH Agent loop. Automatic LLM title
tool call followed by a response. It executes a real Bash `printf` command
inside the disposable workspace with the fixture's native permission preset,
then asserts the V4 tool result, exact response, non-zero usage, native scoped
plan commands, live/cold projection recovery, restart replay, and full history through the real DSH Agent loop. Automatic LLM title
generation is disabled only in this keyless lane so it cannot consume the
single-call fixture outside the Orbis acceptance boundary.
two-call fixture outside the Orbis acceptance boundary.
Replay is bounded by the native DSH transcript and the persisted entry-id
index; the host does not maintain a second event log.

Expand All @@ -301,7 +315,7 @@ the ambient Orbis identity environment variable. The disposable runner
discovers the local LAN endpoint. The runner never touches
the mobile app or its integration tests.

The compatibility gate checks `dsh --version` (expected `0.1.5-rc.1`), the
The compatibility gate checks `dsh --version` (expected `0.2.0-rc.2`), the
launcher `--patch` flag, and Web's `--host`/`--port` flags before creating a fixture. Set
`ORBIS_DSH_EXPECTED_VERSION` only for another explicitly reviewed DSH
profile; an unreviewed or missing CLI is a clear skip by default and a
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
{"type":"session","version":3,"id":"orbis-keyless-e2e","createdAt":0,"isSeeded":false,"delegationDepth":0}
{"type":"session","version":4,"id":"orbis-keyless-e2e","createdAt":0,"isSeeded":false,"delegationDepth":0}
{"type":"turn/start","data":{"turn":1}}
{"type":"step/start","data":{"turn":1,"step":1}}
{"type":"system/message","data":{"turn":1,"step":1,"message":{"role":"system","content":[],"source":{"kind":"plugin","plugin":"@deepseek-ai/dsh-system-prompt"},"id":"orbis-keyless-system"}},"surfaceOp":"append"}
{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"ORBIS_KEYLESS_E2E_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-flash"},"id":"orbis-keyless-message"},"usage":{"inputTokens":7,"outputTokens":1},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"chunk","time":0,"chunk":{"type":"text-delta","index":0,"text":"ORBIS_KEYLESS_E2E_OK"}},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ORBIS_KEYLESS_E2E_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":7,"outputTokens":1}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"}
{"type":"system/message","data":{"turn":1,"step":1,"message":{"role":"system","content":[],"source":{"kind":"system-prompt"},"id":"orbis-keyless-system"}},"surfaceOp":"append"}
{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"orbis-e2e-bash","name":"bash","arguments":"{\"command\": \"printf ORBIS_V4_TOOL_OK\", \"description\": \"Print the Orbis V4 tool fixture marker\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-flash"},"id":"orbis-keyless-tool-call"},"usage":{"inputTokens":7,"outputTokens":1},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"chunk","time":0,"chunk":{"type":"tool-call-delta","index":0,"id":"orbis-e2e-bash","name":"bash","argumentsDelta":"{\"command\": \"printf ORBIS_V4_TOOL_OK\", \"description\": \"Print the Orbis V4 tool fixture marker\"}"}},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"orbis-e2e-bash","name":"bash","arguments":"{\"command\": \"printf ORBIS_V4_TOOL_OK\", \"description\": \"Print the Orbis V4 tool fixture marker\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":7,"outputTokens":1}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"}
{"type":"tool/call","data":{"turn":1,"step":1,"callId":"orbis-e2e-bash","name":"bash","arguments":"{\"command\": \"printf ORBIS_V4_TOOL_OK\", \"description\": \"Print the Orbis V4 tool fixture marker\"}"}}
{"type":"tool/result","surfaceOp":"append","data":{"turn":1,"step":1,"message":{"id":"orbis-keyless-tool-result","role":"tool","source":{"kind":"tool","callId":"orbis-e2e-bash"},"toolCallId":"orbis-e2e-bash","content":[{"type":"text","text":"ORBIS_V4_TOOL_OK"}]}}}
{"type":"step/end","data":{"turn":1,"step":1}}
{"type":"step/start","data":{"turn":1,"step":2}}
{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"text","text":"ORBIS_KEYLESS_E2E_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-flash"},"id":"orbis-keyless-message"},"usage":{"inputTokens":7,"outputTokens":1},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"chunk","time":0,"chunk":{"type":"text-delta","index":0,"text":"ORBIS_KEYLESS_E2E_OK"}},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ORBIS_KEYLESS_E2E_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":7,"outputTokens":1}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"}
{"type":"step/end","data":{"turn":1,"step":2}}
{"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}}
176 changes: 96 additions & 80 deletions packages/orbis-remote-dsh/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,40 +48,44 @@
"test:core": "vitest run src/adapter src/host src/plugin/state-store.test.ts"
},
"devDependencies": {
"@deepseek-ai/cordis": "^4.0.2",
"@deepseek-ai/cordis-plugin-group": "^1.0.2",
"@deepseek-ai/dsh": "^0.1.5-rc.1",
"@deepseek-ai/dsh-agent": "^0.1.5-rc.1",
"@deepseek-ai/dsh-api-session-controller": "^0.1.5-rc.1",
"@deepseek-ai/dsh-attachment": "^0.1.5-rc.1",
"@deepseek-ai/dsh-client-locale": "^0.1.5-rc.1",
"@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.5-rc.1",
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.5-rc.1",
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.5-rc.1",
"@deepseek-ai/dsh-client-ui-settings": "^0.1.5-rc.1",
"@deepseek-ai/dsh-client-ui-slots": "^0.1.5-rc.1",
"@deepseek-ai/dsh-credentials": "^0.1.5-rc.1",
"@deepseek-ai/dsh-file-reference": "^0.1.5-rc.1",
"@deepseek-ai/dsh-file-reference-local": "^0.1.5-rc.1",
"@deepseek-ai/dsh-home-paths": "^0.1.5-rc.1",
"@deepseek-ai/dsh-host-directory-picker": "^0.1.5-rc.1",
"@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.5-rc.1",
"@deepseek-ai/dsh-host-webserver": "^0.1.5-rc.1",
"@deepseek-ai/dsh-llm": "^0.1.5-rc.1",
"@deepseek-ai/dsh-llm-replay": "^0.1.5-rc.1",
"@deepseek-ai/dsh-plan-mode": "^0.1.5-rc.1",
"@deepseek-ai/dsh-scope": "^0.1.5-rc.1",
"@deepseek-ai/dsh-session": "^0.1.5-rc.1",
"@deepseek-ai/dsh-session-persistence": "^0.1.5-rc.1",
"@deepseek-ai/dsh-session-projection": "^0.1.5-rc.1",
"@deepseek-ai/dsh-session-projection-cache": "^0.1.5-rc.1",
"@deepseek-ai/dsh-session-query": "^0.1.5-rc.1",
"@deepseek-ai/dsh-session-reference": "^0.1.5-rc.1",
"@deepseek-ai/dsh-subagent": "^0.1.5-rc.1",
"@deepseek-ai/dsh-user-approval": "^0.1.5-rc.1",
"@deepseek-ai/dsh-user-questions": "^0.1.5-rc.1",
"@deepseek-ai/dsh-workspace": "^0.1.5-rc.1",
"@deepseek-ai/schemastery": "^3.18.2",
"@deepseek-ai/cordis": "^4.0.4",
"@deepseek-ai/cordis-plugin-group": "^1.0.4",
"@deepseek-ai/dsh": "^0.2.0-rc.2",
"@deepseek-ai/dsh-agent": "^0.2.0-rc.2",
"@deepseek-ai/dsh-api-session-controller": "^0.2.0-rc.2",
"@deepseek-ai/dsh-attachment": "^0.2.0-rc.2",
"@deepseek-ai/dsh-client-locale": "^0.2.0-rc.2",
"@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.2.0-rc.2",
"@deepseek-ai/dsh-client-ui-primitives": "^0.2.0-rc.2",
"@deepseek-ai/dsh-client-ui-renderer": "^0.2.0-rc.2",
"@deepseek-ai/dsh-client-ui-settings": "^0.2.0-rc.2",
"@deepseek-ai/dsh-client-ui-slots": "^0.2.0-rc.2",
"@deepseek-ai/dsh-credentials": "^0.2.0-rc.2",
"@deepseek-ai/dsh-file-reference": "^0.2.0-rc.2",
"@deepseek-ai/dsh-file-reference-local": "^0.2.0-rc.2",
"@deepseek-ai/dsh-goal": "^0.2.0-rc.2",
"@deepseek-ai/dsh-home-paths": "^0.2.0-rc.2",
"@deepseek-ai/dsh-host-directory-picker": "^0.2.0-rc.2",
"@deepseek-ai/dsh-host-directory-picker-browse": "^0.2.0-rc.2",
"@deepseek-ai/dsh-host-webserver": "^0.2.0-rc.2",
"@deepseek-ai/dsh-llm": "^0.2.0-rc.2",
"@deepseek-ai/dsh-llm-replay": "^0.2.0-rc.2",
"@deepseek-ai/dsh-plan-mode": "^0.2.0-rc.2",
"@deepseek-ai/dsh-scope": "^0.2.0-rc.2",
"@deepseek-ai/dsh-session": "^0.2.0-rc.2",
"@deepseek-ai/dsh-session-persistence": "^0.2.0-rc.2",
"@deepseek-ai/dsh-session-projection": "^0.2.0-rc.2",
"@deepseek-ai/dsh-session-projection-cache": "^0.2.0-rc.2",
"@deepseek-ai/dsh-session-query": "^0.2.0-rc.2",
"@deepseek-ai/dsh-session-reference": "^0.2.0-rc.2",
"@deepseek-ai/dsh-subagent": "^0.2.0-rc.2",
"@deepseek-ai/dsh-system-prompt": "^0.2.0-rc.2",
"@deepseek-ai/dsh-tool-todo": "^0.2.0-rc.2",
"@deepseek-ai/dsh-tools": "^0.2.0-rc.2",
"@deepseek-ai/dsh-user-approval": "^0.2.0-rc.2",
"@deepseek-ai/dsh-user-questions": "^0.2.0-rc.2",
"@deepseek-ai/dsh-workspace": "^0.2.0-rc.2",
"@deepseek-ai/schemastery": "^3.18.4",
"@orbisapp/orbis-agent-backend": "workspace:*",
"@orbisapp/remote-agent-node-store": "workspace:*",
"@orbisapp/remote-agent-protocol": "workspace:*",
Expand All @@ -100,37 +104,40 @@
"zod": "^4.4.3"
},
"peerDependencies": {
"@deepseek-ai/cordis": "^4.0.2",
"@deepseek-ai/dsh-agent": "^0.1.5-rc.1",
"@deepseek-ai/dsh-api-session-controller": "^0.1.5-rc.1",
"@deepseek-ai/dsh-attachment": "^0.1.5-rc.1",
"@deepseek-ai/dsh-client-locale": "^0.1.5-rc.1",
"@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.5-rc.1",
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.5-rc.1",
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.5-rc.1",
"@deepseek-ai/dsh-client-ui-settings": "^0.1.5-rc.1",
"@deepseek-ai/dsh-client-ui-slots": "^0.1.5-rc.1",
"@deepseek-ai/dsh-credentials": "^0.1.5-rc.1",
"@deepseek-ai/dsh-file-reference": "^0.1.5-rc.1",
"@deepseek-ai/dsh-file-reference-local": "^0.1.5-rc.1",
"@deepseek-ai/dsh-home-paths": "^0.1.5-rc.1",
"@deepseek-ai/dsh-host-directory-picker": "^0.1.5-rc.1",
"@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.5-rc.1",
"@deepseek-ai/dsh-host-webserver": "^0.1.5-rc.1",
"@deepseek-ai/dsh-llm": "^0.1.5-rc.1",
"@deepseek-ai/dsh-plan-mode": "^0.1.5-rc.1",
"@deepseek-ai/dsh-scope": "^0.1.5-rc.1",
"@deepseek-ai/dsh-session": "^0.1.5-rc.1",
"@deepseek-ai/dsh-session-persistence": "^0.1.5-rc.1",
"@deepseek-ai/dsh-session-projection": "^0.1.5-rc.1",
"@deepseek-ai/dsh-session-projection-cache": "^0.1.5-rc.1",
"@deepseek-ai/dsh-session-query": "^0.1.5-rc.1",
"@deepseek-ai/dsh-session-reference": "^0.1.5-rc.1",
"@deepseek-ai/dsh-subagent": "^0.1.5-rc.1",
"@deepseek-ai/dsh-user-approval": "^0.1.5-rc.1",
"@deepseek-ai/dsh-user-questions": "^0.1.5-rc.1",
"@deepseek-ai/dsh-workspace": "^0.1.5-rc.1",
"@deepseek-ai/schemastery": "^3.18.2",
"@deepseek-ai/cordis": "^4.0.4",
"@deepseek-ai/dsh-agent": "^0.2.0-rc.2",
"@deepseek-ai/dsh-api-session-controller": "^0.2.0-rc.2",
"@deepseek-ai/dsh-attachment": "^0.2.0-rc.2",
"@deepseek-ai/dsh-client-locale": "^0.2.0-rc.2",
"@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.2.0-rc.2",
"@deepseek-ai/dsh-client-ui-primitives": "^0.2.0-rc.2",
"@deepseek-ai/dsh-client-ui-renderer": "^0.2.0-rc.2",
"@deepseek-ai/dsh-client-ui-settings": "^0.2.0-rc.2",
"@deepseek-ai/dsh-client-ui-slots": "^0.2.0-rc.2",
"@deepseek-ai/dsh-credentials": "^0.2.0-rc.2",
"@deepseek-ai/dsh-file-reference": "^0.2.0-rc.2",
"@deepseek-ai/dsh-file-reference-local": "^0.2.0-rc.2",
"@deepseek-ai/dsh-home-paths": "^0.2.0-rc.2",
"@deepseek-ai/dsh-host-directory-picker": "^0.2.0-rc.2",
"@deepseek-ai/dsh-host-directory-picker-browse": "^0.2.0-rc.2",
"@deepseek-ai/dsh-host-webserver": "^0.2.0-rc.2",
"@deepseek-ai/dsh-llm": "^0.2.0-rc.2",
"@deepseek-ai/dsh-plan-mode": "^0.2.0-rc.2",
"@deepseek-ai/dsh-scope": "^0.2.0-rc.2",
"@deepseek-ai/dsh-session": "^0.2.0-rc.2",
"@deepseek-ai/dsh-session-persistence": "^0.2.0-rc.2",
"@deepseek-ai/dsh-session-projection": "^0.2.0-rc.2",
"@deepseek-ai/dsh-session-projection-cache": "^0.2.0-rc.2",
"@deepseek-ai/dsh-session-query": "^0.2.0-rc.2",
"@deepseek-ai/dsh-session-reference": "^0.2.0-rc.2",
"@deepseek-ai/dsh-subagent": "^0.2.0-rc.2",
"@deepseek-ai/dsh-system-prompt": "^0.2.0-rc.2",
"@deepseek-ai/dsh-tool-todo": "^0.2.0-rc.2",
"@deepseek-ai/dsh-tools": "^0.2.0-rc.2",
"@deepseek-ai/dsh-user-approval": "^0.2.0-rc.2",
"@deepseek-ai/dsh-user-questions": "^0.2.0-rc.2",
"@deepseek-ai/dsh-workspace": "^0.2.0-rc.2",
"@deepseek-ai/schemastery": "^3.18.4",
"react": "^18.2.0 || ^19.0.0",
"react-dom": "^18.2.0 || ^19.0.0",
"ws": "^8.21.0"
Expand All @@ -148,12 +155,6 @@
"@deepseek-ai/dsh-attachment": {
"optional": true
},
"@deepseek-ai/dsh-file-reference": {
"optional": true
},
"@deepseek-ai/dsh-file-reference-local": {
"optional": true
},
"@deepseek-ai/dsh-client-locale": {
"optional": true
},
Expand All @@ -175,6 +176,15 @@
"@deepseek-ai/dsh-credentials": {
"optional": true
},
"@deepseek-ai/dsh-file-reference": {
"optional": true
},
"@deepseek-ai/dsh-file-reference-local": {
"optional": true
},
"@deepseek-ai/dsh-home-paths": {
"optional": true
},
"@deepseek-ai/dsh-host-directory-picker": {
"optional": true
},
Expand All @@ -184,9 +194,6 @@
"@deepseek-ai/dsh-host-webserver": {
"optional": true
},
"@deepseek-ai/dsh-home-paths": {
"optional": true
},
"@deepseek-ai/dsh-llm": {
"optional": true
},
Expand All @@ -196,25 +203,34 @@
"@deepseek-ai/dsh-scope": {
"optional": true
},
"@deepseek-ai/dsh-subagent": {
"@deepseek-ai/dsh-session": {
"optional": true
},
"@deepseek-ai/dsh-session": {
"@deepseek-ai/dsh-session-persistence": {
"optional": true
},
"@deepseek-ai/dsh-session-reference": {
"@deepseek-ai/dsh-session-projection": {
"optional": true
},
"@deepseek-ai/dsh-session-projection-cache": {
"optional": true
},
"@deepseek-ai/dsh-session-query": {
"optional": true
},
"@deepseek-ai/dsh-session-persistence": {
"@deepseek-ai/dsh-session-reference": {
"optional": true
},
"@deepseek-ai/dsh-session-projection": {
"@deepseek-ai/dsh-subagent": {
"optional": true
},
"@deepseek-ai/dsh-session-projection-cache": {
"@deepseek-ai/dsh-system-prompt": {
"optional": true
},
"@deepseek-ai/dsh-tool-todo": {
"optional": true
},
"@deepseek-ai/dsh-tools": {
"optional": true
},
"@deepseek-ai/dsh-user-approval": {
Expand Down
Loading
Loading