devrites 7.2.2 → 7.2.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to DevRites are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and DevRites adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Releases are generated automatically by [semantic-release](https://semantic-release.gitbook.io/) from Conventional Commits on `main`.
4
4
 
5
+ ## [7.2.3](https://github.com/ViktorsBaikers/DevRites/compare/v7.2.2...v7.2.3) (2026-10-29)
6
+
7
+ ### Fixed
8
+
9
+ * **agents:** honor DSH orchestrator permission selection ([#187](https://github.com/ViktorsBaikers/DevRites/issues/187)) ([1030093](https://github.com/ViktorsBaikers/DevRites/commit/10300933ac688c0e06217026c89c3ed657b58ec0))
10
+
5
11
  ## [7.2.2](https://github.com/ViktorsBaikers/DevRites/compare/v7.2.1...v7.2.2) (2026-10-29)
6
12
 
7
13
  ### Fixed
package/README.md CHANGED
@@ -31,7 +31,7 @@ history can't lose it. After you clear the conversation, switch hosts, or hand
31
31
  the feature to another engineer, the next session reads the same plan,
32
32
  decisions, and evidence before it continues.
33
33
 
34
- **Status:** [`v7.2.2`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.2.2): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
34
+ **Status:** [`v7.2.3`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.2.3): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
35
35
 
36
36
  This is the latest published release; `main` may contain unreleased work.
37
37
 
package/docs/dsh.md CHANGED
@@ -32,10 +32,16 @@ settlement notice. A returned child id means dispatch was admitted; `inactive`
32
32
  activity alone does not prove successful completion. The orchestrator collects
33
33
  and reconciles every terminal result, including failures, before dependent work.
34
34
 
35
+ The DevRites orchestrator honors DSH's selected permission mode, including
36
+ **Full access**, without changing approval settings or enabling Full access
37
+ automatically. After updating an older installation and restarting DSH, select
38
+ your desired permission preset again if the session already shows **Custom**.
39
+
35
40
  Read-only roles retain only their mapped tools and run shell commands under the
36
41
  read-only sandbox. Shell-capable roles also receive native job tools to collect
37
- background command output and stop their jobs. Writers have a workspace-write ceiling. The guard narrows
38
- DSH's inherited parent override before each allowed call, preserves an existing
42
+ background command output and stop their jobs. Specialist writers have a
43
+ workspace-write ceiling. For specialists, the guard narrows DSH's inherited
44
+ parent override before each allowed call, preserves an existing
39
45
  read-only parent boundary, and denies explicit sandbox escalation. Confining
40
46
  shell and filesystem providers are required; an unconfined composition fails
41
47
  closed. Tool access derives from canonical agent frontmatter; unsupported
@@ -55,7 +55,7 @@
55
55
  "name": "devrites:role",
56
56
  "config": {
57
57
  "role": "devrites-orchestrator",
58
- "permission": "workspace-write",
58
+ "permission": "inherit",
59
59
  "allowedTools": [
60
60
  "ask_user_question",
61
61
  "bash",
@@ -22,7 +22,8 @@ export async function apply(ctx, config) {
22
22
  }
23
23
  const { role, permission, allowedTools, instructions } = config;
24
24
  if (typeof role !== 'string' || !role || typeof instructions !== 'string'
25
- || !['read-only', 'workspace-write'].includes(permission)
25
+ || (!['read-only', 'workspace-write'].includes(permission)
26
+ && !(role === 'devrites-orchestrator' && permission === 'inherit'))
26
27
  || !Array.isArray(allowedTools) || allowedTools.some(tool => typeof tool !== 'string')) {
27
28
  throw new Error('DSH DevRites role requires identity, instructions, tools, and a supported permission ceiling');
28
29
  }
@@ -33,6 +34,7 @@ export async function apply(ctx, config) {
33
34
  if (!['read-only', 'workspace-write', 'danger-full-access'].includes(mode)) {
34
35
  throw new Error(`${role}: unknown sandbox permission`);
35
36
  }
37
+ if (permission === 'inherit') return;
36
38
  // Native spawn inherits the parent's override; preserve a narrower parent.
37
39
  if (mode === 'danger-full-access' || (mode === 'workspace-write' && permission === 'read-only')) {
38
40
  session.append('sandbox/mode', { mode: permission });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devrites",
3
- "version": "7.2.2",
3
+ "version": "7.2.3",
4
4
  "description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code, Codex, omp, pi, and Devin CLI",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://github.com/ViktorsBaikers/DevRites#readme",
@@ -144,7 +144,7 @@ def generate(source, target):
144
144
  presets.insert(0, {"id": "devrites-orchestrator", "name": "DevRites", "description": "DevRites workflow orchestrator with named fresh specialists.",
145
145
  "plugins": tool_plugins(root_tools) + [
146
146
  {"id": "devrites-role", "name": "devrites:role", "config": {
147
- "role": "devrites-orchestrator", "permission": "workspace-write",
147
+ "role": "devrites-orchestrator", "permission": "inherit",
148
148
  "allowedTools": root_tools, "allowedAgentPresets": roles,
149
149
  "indexTool": MCP_INDEX_TOOL, "instructions": BRIDGE}},
150
150
  {"id": "devrites-subagent", "name": "@deepseek-ai/dsh-tool-subagent", "config": {
@@ -22,7 +22,8 @@ export async function apply(ctx, config) {
22
22
  }
23
23
  const { role, permission, allowedTools, instructions } = config;
24
24
  if (typeof role !== 'string' || !role || typeof instructions !== 'string'
25
- || !['read-only', 'workspace-write'].includes(permission)
25
+ || (!['read-only', 'workspace-write'].includes(permission)
26
+ && !(role === 'devrites-orchestrator' && permission === 'inherit'))
26
27
  || !Array.isArray(allowedTools) || allowedTools.some(tool => typeof tool !== 'string')) {
27
28
  throw new Error('DSH DevRites role requires identity, instructions, tools, and a supported permission ceiling');
28
29
  }
@@ -33,6 +34,7 @@ export async function apply(ctx, config) {
33
34
  if (!['read-only', 'workspace-write', 'danger-full-access'].includes(mode)) {
34
35
  throw new Error(`${role}: unknown sandbox permission`);
35
36
  }
37
+ if (permission === 'inherit') return;
36
38
  // Native spawn inherits the parent's override; preserve a narrower parent.
37
39
  if (mode === 'danger-full-access' || (mode === 'workspace-write' && permission === 'read-only')) {
38
40
  session.append('sandbox/mode', { mode: permission });