dsh-openwrite 0.2.11 → 0.2.12

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.
@@ -9,13 +9,31 @@ export interface WorkspaceStandardKit {
9
9
  sessionId: SessionId | undefined;
10
10
  useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>;
11
11
  }
12
+ /**
13
+ * Showing a session. dsh 0.2 moved this out of the Session Controller
14
+ * (`ISessions` has no `open`) and into `UiWorkspace.openSession`; 0.1.x never
15
+ * had the latter. The injected face carries whichever one this host provides.
16
+ */
17
+ export interface SessionOpener {
18
+ openSession(target: SessionId): void;
19
+ }
20
+ /**
21
+ * Build the opener once per profile so one build serves both host generations:
22
+ * probe at call time rather than binding to either API shape.
23
+ * @param sources - the client services that may own session navigation.
24
+ * @returns an opener that throws only when the host offers neither API.
25
+ */
26
+ export declare function sessionOpener(sources: {
27
+ uiWorkspace: unknown;
28
+ sessions: unknown;
29
+ }): SessionOpener;
12
30
  /**
13
31
  * The full inject face for the conversation views: the Studio API trio plus
14
32
  * the dsh domain services the new-work flow drives (directory pick →
15
33
  * workspace create → session connect).
16
34
  */
17
35
  export interface StudioPanelInjected extends StudioApiInjected {
18
- workspaces: IWorkspaces & Pick<UiWorkspace, 'pickDirectory' | 'connectWorkspace'>;
36
+ workspaces: IWorkspaces & Pick<UiWorkspace, 'pickDirectory' | 'connectWorkspace'> & SessionOpener;
19
37
  sessions: ISessions;
20
38
  }
21
39
  /** The Workspace the current session is accounted under, if any. */
@@ -1,5 +1,13 @@
1
1
  import type { SessionListState } from '@deepseek-ai/dsh-api-session-controller/client';
2
- /** Presentation follows the current session; the host tool catalog never follows UI navigation. */
2
+ /**
3
+ * Presentation follows the session the main view is displaying; the host tool
4
+ * catalog never follows UI navigation.
5
+ *
6
+ * dsh 0.2 removed `SessionListState.current` — showing a session moved to
7
+ * `UiWorkspace.openSession` — so the displayed session is read from the row's
8
+ * own main-view retention, the same criterion `dsh-client-ui-agent-preset`
9
+ * uses. Hosts that still publish `current` keep their previous behaviour.
10
+ */
3
11
  export declare function isWritingSession(state: SessionListState): boolean;
4
12
  export declare function watchWritingScope(source: {
5
13
  getSnapshot(): SessionListState;
package/plugin.mjs CHANGED
@@ -4,6 +4,7 @@ import { lock } from 'proper-lockfile'
4
4
  import { resolveDshHome } from '@deepseek-ai/dsh-home-paths'
5
5
  import { join } from 'node:path'
6
6
  import { fileURLToPath } from 'node:url'
7
+ import { presetDefinition } from './preset-definition.mjs'
7
8
 
8
9
  export const name = 'dsh-openwrite'
9
10
 
@@ -77,4 +78,10 @@ export async function apply(ctx) {
77
78
  await rm(destination, { recursive: true })
78
79
  }
79
80
  }))
81
+ // 0.1 discovers the managed directory above; 0.2 only accepts registered
82
+ // definitions. The declaring context owns registration and its resolution base.
83
+ ctx.inject(['agentPresets'], async function* (presetCtx) {
84
+ if (typeof presetCtx.agentPresets.register !== 'function') return
85
+ yield await presetCtx.agentPresets.register(await presetDefinition(version, true))
86
+ })
80
87
  }
@@ -0,0 +1,31 @@
1
+ import { readFile } from 'node:fs/promises'
2
+ import { fileURLToPath } from 'node:url'
3
+ import { load, Type, JSON_SCHEMA } from 'js-yaml'
4
+
5
+ // Preserve Loader expressions; evaluating them here loses the preset's baseUrl
6
+ // and entry-local realm. This is the host's entry-list !!js wire representation.
7
+ const schema = JSON_SCHEMA.extend(new Type('tag:yaml.org,2002:js', {
8
+ kind: 'scalar', resolve: value => typeof value === 'string',
9
+ construct: value => ({ __jsExpr: value }),
10
+ }))
11
+
12
+ export async function presetDefinition(version, modern = false) {
13
+ const baseUrl = new URL('./presets/openwrite/', import.meta.url)
14
+ const plugins = load(await readFile(new URL('agent.cordis.yml', baseUrl), 'utf8'), { schema })
15
+ const metadata = load(await readFile(new URL('preset.yml', baseUrl), 'utf8'))
16
+ if (modern) {
17
+ const adapt = rows => {
18
+ for (const row of rows) {
19
+ if (row.name === '@deepseek-ai/dsh-workflow-worker-thread') {
20
+ row.name = '@deepseek-ai/dsh-workflow-ptc'
21
+ }
22
+ if (row.name === '@deepseek-ai/dsh-skill-filesystem') {
23
+ row.config.customSkillDirs = [fileURLToPath(new URL('skills/', baseUrl))]
24
+ }
25
+ if (row.group && Array.isArray(row.config)) adapt(row.config)
26
+ }
27
+ }
28
+ adapt(plugins)
29
+ }
30
+ return { ...metadata, id: `openwrite-${version.replace(/[^a-z0-9-]/g, '-')}`, plugins }
31
+ }
@@ -0,0 +1,254 @@
1
+ A. HISTORY OF THE SOFTWARE
2
+ ==========================
3
+
4
+ Python was created in the early 1990s by Guido van Rossum at Stichting
5
+ Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
6
+ as a successor of a language called ABC. Guido remains Python's
7
+ principal author, although it includes many contributions from others.
8
+
9
+ In 1995, Guido continued his work on Python at the Corporation for
10
+ National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
11
+ in Reston, Virginia where he released several versions of the
12
+ software.
13
+
14
+ In May 2000, Guido and the Python core development team moved to
15
+ BeOpen.com to form the BeOpen PythonLabs team. In October of the same
16
+ year, the PythonLabs team moved to Digital Creations, which became
17
+ Zope Corporation. In 2001, the Python Software Foundation (PSF, see
18
+ https://www.python.org/psf/) was formed, a non-profit organization
19
+ created specifically to own Python-related Intellectual Property.
20
+ Zope Corporation was a sponsoring member of the PSF.
21
+
22
+ All Python releases are Open Source (see http://www.opensource.org for
23
+ the Open Source Definition). Historically, most, but not all, Python
24
+ releases have also been GPL-compatible; the table below summarizes
25
+ the various releases.
26
+
27
+ Release Derived Year Owner GPL-
28
+ from compatible? (1)
29
+
30
+ 0.9.0 thru 1.2 1991-1995 CWI yes
31
+ 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
32
+ 1.6 1.5.2 2000 CNRI no
33
+ 2.0 1.6 2000 BeOpen.com no
34
+ 1.6.1 1.6 2001 CNRI yes (2)
35
+ 2.1 2.0+1.6.1 2001 PSF no
36
+ 2.0.1 2.0+1.6.1 2001 PSF yes
37
+ 2.1.1 2.1+2.0.1 2001 PSF yes
38
+ 2.1.2 2.1.1 2002 PSF yes
39
+ 2.1.3 2.1.2 2002 PSF yes
40
+ 2.2 and above 2.1.1 2001-now PSF yes
41
+
42
+ Footnotes:
43
+
44
+ (1) GPL-compatible doesn't mean that we're distributing Python under
45
+ the GPL. All Python licenses, unlike the GPL, let you distribute
46
+ a modified version without making your changes open source. The
47
+ GPL-compatible licenses make it possible to combine Python with
48
+ other software that is released under the GPL; the others don't.
49
+
50
+ (2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
51
+ because its license has a choice of law clause. According to
52
+ CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
53
+ is "not incompatible" with the GPL.
54
+
55
+ Thanks to the many outside volunteers who have worked under Guido's
56
+ direction to make these releases possible.
57
+
58
+
59
+ B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
60
+ ===============================================================
61
+
62
+ PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
63
+ --------------------------------------------
64
+
65
+ 1. This LICENSE AGREEMENT is between the Python Software Foundation
66
+ ("PSF"), and the Individual or Organization ("Licensee") accessing and
67
+ otherwise using this software ("Python") in source or binary form and
68
+ its associated documentation.
69
+
70
+ 2. Subject to the terms and conditions of this License Agreement, PSF hereby
71
+ grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
72
+ analyze, test, perform and/or display publicly, prepare derivative works,
73
+ distribute, and otherwise use Python alone or in any derivative version,
74
+ provided, however, that PSF's License Agreement and PSF's notice of copyright,
75
+ i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
76
+ 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Python Software Foundation;
77
+ All Rights Reserved" are retained in Python alone or in any derivative version
78
+ prepared by Licensee.
79
+
80
+ 3. In the event Licensee prepares a derivative work that is based on
81
+ or incorporates Python or any part thereof, and wants to make
82
+ the derivative work available to others as provided herein, then
83
+ Licensee hereby agrees to include in any such work a brief summary of
84
+ the changes made to Python.
85
+
86
+ 4. PSF is making Python available to Licensee on an "AS IS"
87
+ basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
88
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
89
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
90
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
91
+ INFRINGE ANY THIRD PARTY RIGHTS.
92
+
93
+ 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
94
+ FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
95
+ A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
96
+ OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
97
+
98
+ 6. This License Agreement will automatically terminate upon a material
99
+ breach of its terms and conditions.
100
+
101
+ 7. Nothing in this License Agreement shall be deemed to create any
102
+ relationship of agency, partnership, or joint venture between PSF and
103
+ Licensee. This License Agreement does not grant permission to use PSF
104
+ trademarks or trade name in a trademark sense to endorse or promote
105
+ products or services of Licensee, or any third party.
106
+
107
+ 8. By copying, installing or otherwise using Python, Licensee
108
+ agrees to be bound by the terms and conditions of this License
109
+ Agreement.
110
+
111
+
112
+ BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
113
+ -------------------------------------------
114
+
115
+ BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
116
+
117
+ 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
118
+ office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
119
+ Individual or Organization ("Licensee") accessing and otherwise using
120
+ this software in source or binary form and its associated
121
+ documentation ("the Software").
122
+
123
+ 2. Subject to the terms and conditions of this BeOpen Python License
124
+ Agreement, BeOpen hereby grants Licensee a non-exclusive,
125
+ royalty-free, world-wide license to reproduce, analyze, test, perform
126
+ and/or display publicly, prepare derivative works, distribute, and
127
+ otherwise use the Software alone or in any derivative version,
128
+ provided, however, that the BeOpen Python License is retained in the
129
+ Software, alone or in any derivative version prepared by Licensee.
130
+
131
+ 3. BeOpen is making the Software available to Licensee on an "AS IS"
132
+ basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
133
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
134
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
135
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
136
+ INFRINGE ANY THIRD PARTY RIGHTS.
137
+
138
+ 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
139
+ SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
140
+ AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
141
+ DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
142
+
143
+ 5. This License Agreement will automatically terminate upon a material
144
+ breach of its terms and conditions.
145
+
146
+ 6. This License Agreement shall be governed by and interpreted in all
147
+ respects by the law of the State of California, excluding conflict of
148
+ law provisions. Nothing in this License Agreement shall be deemed to
149
+ create any relationship of agency, partnership, or joint venture
150
+ between BeOpen and Licensee. This License Agreement does not grant
151
+ permission to use BeOpen trademarks or trade names in a trademark
152
+ sense to endorse or promote products or services of Licensee, or any
153
+ third party. As an exception, the "BeOpen Python" logos available at
154
+ http://www.pythonlabs.com/logos.html may be used according to the
155
+ permissions granted on that web page.
156
+
157
+ 7. By copying, installing or otherwise using the software, Licensee
158
+ agrees to be bound by the terms and conditions of this License
159
+ Agreement.
160
+
161
+
162
+ CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
163
+ ---------------------------------------
164
+
165
+ 1. This LICENSE AGREEMENT is between the Corporation for National
166
+ Research Initiatives, having an office at 1895 Preston White Drive,
167
+ Reston, VA 20191 ("CNRI"), and the Individual or Organization
168
+ ("Licensee") accessing and otherwise using Python 1.6.1 software in
169
+ source or binary form and its associated documentation.
170
+
171
+ 2. Subject to the terms and conditions of this License Agreement, CNRI
172
+ hereby grants Licensee a nonexclusive, royalty-free, world-wide
173
+ license to reproduce, analyze, test, perform and/or display publicly,
174
+ prepare derivative works, distribute, and otherwise use Python 1.6.1
175
+ alone or in any derivative version, provided, however, that CNRI's
176
+ License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
177
+ 1995-2001 Corporation for National Research Initiatives; All Rights
178
+ Reserved" are retained in Python 1.6.1 alone or in any derivative
179
+ version prepared by Licensee. Alternately, in lieu of CNRI's License
180
+ Agreement, Licensee may substitute the following text (omitting the
181
+ quotes): "Python 1.6.1 is made available subject to the terms and
182
+ conditions in CNRI's License Agreement. This Agreement together with
183
+ Python 1.6.1 may be located on the Internet using the following
184
+ unique, persistent identifier (known as a handle): 1895.22/1013. This
185
+ Agreement may also be obtained from a proxy server on the Internet
186
+ using the following URL: http://hdl.handle.net/1895.22/1013".
187
+
188
+ 3. In the event Licensee prepares a derivative work that is based on
189
+ or incorporates Python 1.6.1 or any part thereof, and wants to make
190
+ the derivative work available to others as provided herein, then
191
+ Licensee hereby agrees to include in any such work a brief summary of
192
+ the changes made to Python 1.6.1.
193
+
194
+ 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
195
+ basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
196
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
197
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
198
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
199
+ INFRINGE ANY THIRD PARTY RIGHTS.
200
+
201
+ 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
202
+ 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
203
+ A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
204
+ OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
205
+
206
+ 6. This License Agreement will automatically terminate upon a material
207
+ breach of its terms and conditions.
208
+
209
+ 7. This License Agreement shall be governed by the federal
210
+ intellectual property law of the United States, including without
211
+ limitation the federal copyright law, and, to the extent such
212
+ U.S. federal law does not apply, by the law of the Commonwealth of
213
+ Virginia, excluding Virginia's conflict of law provisions.
214
+ Notwithstanding the foregoing, with regard to derivative works based
215
+ on Python 1.6.1 that incorporate non-separable material that was
216
+ previously distributed under the GNU General Public License (GPL), the
217
+ law of the Commonwealth of Virginia shall govern this License
218
+ Agreement only as to issues arising under or with respect to
219
+ Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
220
+ License Agreement shall be deemed to create any relationship of
221
+ agency, partnership, or joint venture between CNRI and Licensee. This
222
+ License Agreement does not grant permission to use CNRI trademarks or
223
+ trade name in a trademark sense to endorse or promote products or
224
+ services of Licensee, or any third party.
225
+
226
+ 8. By clicking on the "ACCEPT" button where indicated, or by copying,
227
+ installing or otherwise using Python 1.6.1, Licensee agrees to be
228
+ bound by the terms and conditions of this License Agreement.
229
+
230
+ ACCEPT
231
+
232
+
233
+ CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
234
+ --------------------------------------------------
235
+
236
+ Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
237
+ The Netherlands. All rights reserved.
238
+
239
+ Permission to use, copy, modify, and distribute this software and its
240
+ documentation for any purpose and without fee is hereby granted,
241
+ provided that the above copyright notice appear in all copies and that
242
+ both that copyright notice and this permission notice appear in
243
+ supporting documentation, and that the name of Stichting Mathematisch
244
+ Centrum or CWI not be used in advertising or publicity pertaining to
245
+ distribution of the software without specific, written prior
246
+ permission.
247
+
248
+ STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
249
+ THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
250
+ FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
251
+ FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
252
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
253
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
254
+ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -0,0 +1,21 @@
1
+ (The MIT License)
2
+
3
+ Copyright (C) 2011-2015 by Vitaly Puzrin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -3,7 +3,7 @@
3
3
  "dsh": "0.1.2-rc.1",
4
4
  "uv_version": "0.11.19",
5
5
  "python_version": "3.12.13",
6
- "core_version": "5.8.2",
6
+ "core_version": "5.8.3",
7
7
  "contract_version": 1,
8
8
  "platforms": {
9
9
  "darwin-arm64": {
@@ -56,8 +56,8 @@
56
56
  }
57
57
  },
58
58
  "wheel": {
59
- "file": "openwrite-5.8.2-py3-none-any.whl",
60
- "sha256": "3b3e3872dfab68a35cd04a9ace595d54f50a7d9f49a37d8b9fe8cad6f65edbf2"
59
+ "file": "openwrite-5.8.3-py3-none-any.whl",
60
+ "sha256": "16dee6342e1263412ae66d88338873a845a4efb00e9c936a759a625823a66a70"
61
61
  },
62
62
  "requirements": {
63
63
  "file": "requirements.lock",
@@ -66,7 +66,7 @@
66
66
  "sources": {
67
67
  "core": {
68
68
  "repository": "https://github.com/LiPu-jpg/Openwrite",
69
- "commit": "833c66407a780283bdb7f901540322a9b549ee1d"
69
+ "commit": "b072420f9dbfcae356b4980d98597d0be4f22849"
70
70
  },
71
71
  "dog": {
72
72
  "repository": "https://github.com/Fun10165/dsh-dog",
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "repository": "https://github.com/LiPu-jpg/Openwrite",
3
- "commit": "39454dbcd14ea672c6d9fa25eddea26f8ea71591",
4
- "tree": "8aa774b2aaf6a1bfff3d15d6efb62cd9bff9cb52",
3
+ "commit": "a349ea964e43d75f9fc98d1f83354a237bc2ff51",
4
+ "tree": "5f6cf85cea2cf7929885c5c98793fcd53ff07733",
5
5
  "dirty": false,
6
6
  "acquisition": "git-checkout",
7
- "sourceTreeSha256": "3ce7aef31bc903e8d14ae39b157efaa9cadd1edde9105015985447f947fed2b2",
7
+ "sourceTreeSha256": "0a74588b45461e967294dc769e8e0c99bccb42de2ddc57c299ff22549096d775",
8
8
  "components": [
9
9
  {
10
10
  "name": "@deepseek-ai/schemastery",
@@ -236,6 +236,24 @@
236
236
  "LICENSE.md"
237
237
  ]
238
238
  },
239
+ {
240
+ "name": "js-yaml",
241
+ "version": "4.3.1",
242
+ "license": "MIT",
243
+ "repository": "nodeca/js-yaml",
244
+ "files": [
245
+ "LICENSE"
246
+ ]
247
+ },
248
+ {
249
+ "name": "argparse",
250
+ "version": "2.0.1",
251
+ "license": "Python-2.0",
252
+ "repository": "nodeca/argparse",
253
+ "files": [
254
+ "LICENSE"
255
+ ]
256
+ },
239
257
  {
240
258
  "name": "@xyflow/react",
241
259
  "version": "12.11.6",
@@ -18,5 +18,12 @@ OpenWrite compatibility changes:
18
18
  on cancellation or unload, including Windows process trees. Artifact archiving
19
19
  uses the portable tar library instead of a required system tar executable.
20
20
 
21
+ - The debugger starts without a global tool catalog. Its authenticated RPC
22
+ channel retains the Web carrier dependency on the Connection origin context.
23
+ - DSH 0.2 entry-local SettingsForms replace the old standalone settings section;
24
+ volatile concurrency values are read through their live references.
25
+ - Invocation navigation uses uiWorkspace and confirms main-view retention on 0.2;
26
+ the 0.1 selection and parent-catalog APIs remain supported.
27
+
21
28
  The verification engine, graph schema, evidence records and storage keys remain
22
29
  upstream-compatible. This is a maintained integration, not an upstream release.
@@ -2497,25 +2497,47 @@ window.__ModuleLoader__.load({
2497
2497
  //#endregion
2498
2498
  //#region src/client/sessionNavigation.ts
2499
2499
  const DEFAULT_SELECTION_TIMEOUT_MS = 2e3;
2500
+ function selected(sessions, id) {
2501
+ const snapshot = sessions.list.getSnapshot();
2502
+ if ("current" in snapshot) return snapshot.current === id;
2503
+ return ((snapshot.byId?.[id])?.retainedBy?.mainView ?? 0) > 0;
2504
+ }
2505
+ async function refreshInvocationCatalog(sessions, parent) {
2506
+ if (typeof sessions.refreshSubagents === "function") await sessions.refreshSubagents(parent);
2507
+ }
2500
2508
  /**
2501
2509
  * Select a persisted invocation session and confirm that DSH actually staged it.
2502
2510
  * Returns false only when neither the ordinary session list nor a refreshed
2503
2511
  * direct-parent catalog can address the target.
2504
2512
  */
2505
- async function openInvocationSession(sessions, rawSessionId, rawParentSessionId, timeoutMs = DEFAULT_SELECTION_TIMEOUT_MS) {
2513
+ async function openInvocationSession(sessions, rawSessionId, rawParentSessionId, timeoutMs = DEFAULT_SELECTION_TIMEOUT_MS, uiWorkspace) {
2506
2514
  const sessionId = rawSessionId;
2507
- if (sessions.list.getSnapshot().current === sessionId) return true;
2515
+ if (selected(sessions, sessionId)) return true;
2508
2516
  if (sessions.list.getSnapshot().ids.includes(sessionId)) {
2509
- await selectAndConfirm(sessions, sessionId, () => sessions.open(sessionId), timeoutMs);
2517
+ await selectAndConfirm(sessions, sessionId, () => {
2518
+ if (uiWorkspace) uiWorkspace.openSession(sessionId);
2519
+ else if (sessions.open) sessions.open(sessionId);
2520
+ else throw new Error("DSH exposes no session navigation API");
2521
+ }, timeoutMs);
2510
2522
  return true;
2511
2523
  }
2512
- let address = sessions.subagentAddress(sessionId);
2524
+ let address = sessions.subagentAddress?.(sessionId);
2513
2525
  if (address === void 0 && rawParentSessionId !== void 0) {
2514
- await sessions.refreshSubagents(rawParentSessionId);
2515
- address = sessions.subagentAddress(sessionId);
2526
+ await refreshInvocationCatalog(sessions, rawParentSessionId);
2527
+ address = sessions.subagentAddress?.(sessionId);
2528
+ if (!address && uiWorkspace) address = {
2529
+ parentSessionId: rawParentSessionId,
2530
+ childSessionId: sessionId,
2531
+ mode: "continuable"
2532
+ };
2516
2533
  }
2517
2534
  if (address === void 0) return false;
2518
- await selectAndConfirm(sessions, sessionId, () => sessions.openSubagent(address), timeoutMs);
2535
+ const target = address;
2536
+ await selectAndConfirm(sessions, sessionId, () => {
2537
+ if (uiWorkspace) uiWorkspace.openSession(target);
2538
+ else if (sessions.openSubagent) sessions.openSubagent(target);
2539
+ else throw new Error("DSH exposes no subagent navigation API");
2540
+ }, timeoutMs);
2519
2541
  return true;
2520
2542
  }
2521
2543
  async function selectAndConfirm(sessions, sessionId, select, timeoutMs) {
@@ -2531,7 +2553,7 @@ window.__ModuleLoader__.load({
2531
2553
  else reject(error);
2532
2554
  };
2533
2555
  const confirm = () => {
2534
- if (sessions.list.getSnapshot().current === sessionId) finish();
2556
+ if (selected(sessions, sessionId)) finish();
2535
2557
  };
2536
2558
  const timer = setTimeout(() => {
2537
2559
  finish(/* @__PURE__ */ new Error(`DSH did not select session ${sessionId} within ${timeoutMs} ms`));
@@ -2852,7 +2874,8 @@ window.__ModuleLoader__.load({
2852
2874
  "slots",
2853
2875
  "sessions",
2854
2876
  "connection",
2855
- "uiSession"
2877
+ "uiSession",
2878
+ "uiWorkspace"
2856
2879
  ];
2857
2880
  /** Register the debugger beside other frame-wide overlays without replacing shipped UI. */
2858
2881
  function apply(ctx) {
@@ -2870,7 +2893,7 @@ window.__ModuleLoader__.load({
2870
2893
  if (!result.ok) throw new Error(result.error.message);
2871
2894
  return result.value;
2872
2895
  };
2873
- const openSession = (sessionId, parentSessionId) => openInvocationSession(sessions, sessionId, parentSessionId);
2896
+ const openSession = (sessionId, parentSessionId) => openInvocationSession(sessions, sessionId, parentSessionId, void 0, typeof ctx.uiWorkspace.openSession === "function" ? ctx.uiWorkspace : void 0);
2874
2897
  const state = debuggerSessionState(sessions.list, ctx.uiSession);
2875
2898
  state.getSnapshot();
2876
2899
  const DogDebuggerHost = () => {
@@ -2891,7 +2914,7 @@ window.__ModuleLoader__.load({
2891
2914
  openSession,
2892
2915
  getSessionState: state.getSnapshot,
2893
2916
  subscribeSessions: state.subscribe,
2894
- refreshAgentCatalog: (parentSessionId) => sessions.refreshSubagents(parentSessionId)
2917
+ refreshAgentCatalog: (parentSessionId) => refreshInvocationCatalog(sessions, parentSessionId)
2895
2918
  }, request);
2896
2919
  };
2897
2920
  yield ctx.effect(installStyles, "dog-debugger: styles");