Replies: 1 comment
|
Your plane analysis is right and the throw is where you point. One fact changes both the repro and the conclusion: standing preset mounts are shared per preset id, so two sessions on the same preset never collide. What collides is two different preset ids that each carry the row — which is what your environment section describes (a user copy plus the shipped The registration
for (const provider of hostInspectProviders(ctx)) {
ctx.effect(() => ctx.cordisInspect.register(provider), `tool-cordis: inspect ${provider.manifest.id}`)
}The ids come from So the registration is not leaked, and there is an unregister path:
The holder is the first preset's standing mount, and those are process-lifetime by design: "standing mounts are one per preset and live until whole-tree teardown" ( What a second mount doesThe row's When it collides, and when it does not
Two consequences for the write-up: the collision needs two preset ids, not two sessions, so "one creator-mode session per The swallowed failureCorrect, and the source line is Fix angleThe repo already solves this exact "the same package mounted in N presets registers N times" shape by counting registrants instead of rejecting the second: Not verified: I did not run a host, so the runtime ordering (which mount wins after a restart, and the second-registration failure itself) is read from the code rather than observed. I did not reproduce your failure, and I have not run the stamp-change path. |
Uh oh!
There was an error while loading. Please reload this page.
Environment
@deepseek-ai/dsh0.1.1-rc.2, web profile, macOS (darwin-x64)cordis(shipped) at the time of the failurecordispreset(
${DSH_HOME}/.agent-presets/<id>/agent.cordis.yml)Summary
With one session already running a preset that contains the
tool-cordisrow,creating a second session with any preset that also contains it fails:
The client swallows the failure —
connectedWorkspace()rejects and the clientonly does
console.warn("new session failed:", reason)(
dsh-client-runtime/lib/client.js), so clicking "New Session" appears to donothing at all.
Reproduction
dsh web.tool-cordisrow(shipped
cordis= "Creator mode", or any custom copy of it).cordis).Expected
Two sessions can run creator-mode presets concurrently (the inspect providers
are read-only runtime introspection — nothing about them is session-specific).
Actual
The second mount always fails. Consequence: one creator-mode session per
dsh webprocess, and after a host restart whichever creator session mountsfirst wins; the other can never open.
Analysis
The row lives in the preset plane (
agent.cordis.yml), so it is re-appliedper session, but the inspect-provider registration it performs lands on the
host plane, which is process-global. First mount claims the names
(
Service,Event,Builtin,Tool, …); every later mount conflicts andfails the whole preset — which fails session creation.
Suggested fixes (any of)
key registrations by owning agent/session, or treat an identical
re-registration from the same package as a no-op. This is the real fix and
allows N creator sessions.
show the error, not only a
console.warn. Today the user has no signal atall.
tool-cordiswithout hand-editing the composition (helps as a stopgap).Workaround (for anyone hitting this)
Set the default preset to one without the row so new sessions can be
created:
Creator mode remains usable, but only for one session at a time.
All reactions