@cerbur/clutch-dsh-worktree 0.1.6 → 0.1.7

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.
Files changed (116) hide show
  1. package/README.md +107 -15
  2. package/README.zh.md +86 -10
  3. package/cordis.patch.yml +21 -0
  4. package/lib/client/WorktreeContext.d.ts.map +1 -1
  5. package/lib/client/WorktreeContext.js +2 -2
  6. package/lib/client/WorktreeContext.js.map +1 -1
  7. package/lib/client/WorktreeSurface.d.ts +2 -2
  8. package/lib/client/WorktreeSurface.d.ts.map +1 -1
  9. package/lib/client/WorktreeSurface.js +270 -65
  10. package/lib/client/WorktreeSurface.js.map +1 -1
  11. package/lib/client/entry.d.ts.map +1 -1
  12. package/lib/client/entry.js +84 -2
  13. package/lib/client/entry.js.map +1 -1
  14. package/lib/client/index.d.ts +3 -0
  15. package/lib/client/index.d.ts.map +1 -1
  16. package/lib/client/index.js +2 -0
  17. package/lib/client/index.js.map +1 -1
  18. package/lib/client/locales.d.ts +58 -0
  19. package/lib/client/locales.d.ts.map +1 -1
  20. package/lib/client/locales.js +58 -0
  21. package/lib/client/locales.js.map +1 -1
  22. package/lib/client/session-view.d.ts +34 -0
  23. package/lib/client/session-view.d.ts.map +1 -1
  24. package/lib/client/session-view.js +119 -1
  25. package/lib/client/session-view.js.map +1 -1
  26. package/lib/client/worktree-connection.d.ts +4 -2
  27. package/lib/client/worktree-connection.d.ts.map +1 -1
  28. package/lib/client/worktree-connection.js +4 -0
  29. package/lib/client/worktree-connection.js.map +1 -1
  30. package/lib/client/worktree-error-copy.d.ts +2 -0
  31. package/lib/client/worktree-error-copy.d.ts.map +1 -1
  32. package/lib/client/worktree-error-copy.js +16 -0
  33. package/lib/client/worktree-error-copy.js.map +1 -1
  34. package/lib/client/worktree-permission-icon.d.ts +7 -0
  35. package/lib/client/worktree-permission-icon.d.ts.map +1 -0
  36. package/lib/client/worktree-permission-icon.js +119 -0
  37. package/lib/client/worktree-permission-icon.js.map +1 -0
  38. package/lib/client/worktree-permission.d.ts +21 -0
  39. package/lib/client/worktree-permission.d.ts.map +1 -0
  40. package/lib/client/worktree-permission.js +70 -0
  41. package/lib/client/worktree-permission.js.map +1 -0
  42. package/lib/client/worktree-session-fork.d.ts +65 -0
  43. package/lib/client/worktree-session-fork.d.ts.map +1 -0
  44. package/lib/client/worktree-session-fork.js +174 -0
  45. package/lib/client/worktree-session-fork.js.map +1 -0
  46. package/lib/client/worktree-session-order.d.ts +36 -0
  47. package/lib/client/worktree-session-order.d.ts.map +1 -0
  48. package/lib/client/worktree-session-order.js +215 -0
  49. package/lib/client/worktree-session-order.js.map +1 -0
  50. package/lib/client/worktree-session.d.ts +34 -1
  51. package/lib/client/worktree-session.d.ts.map +1 -1
  52. package/lib/client/worktree-session.js +98 -2
  53. package/lib/client/worktree-session.js.map +1 -1
  54. package/lib/client/worktree-surface-rows.d.ts +4 -4
  55. package/lib/client/worktree-surface-rows.d.ts.map +1 -1
  56. package/lib/client/worktree-surface-rows.js +132 -47
  57. package/lib/client/worktree-surface-rows.js.map +1 -1
  58. package/lib/client/worktree-surface-selectors.d.ts +2 -0
  59. package/lib/client/worktree-surface-selectors.d.ts.map +1 -1
  60. package/lib/client/worktree-surface-selectors.js +8 -0
  61. package/lib/client/worktree-surface-selectors.js.map +1 -1
  62. package/lib/client/worktree-surface-types.d.ts +46 -3
  63. package/lib/client/worktree-surface-types.d.ts.map +1 -1
  64. package/lib/client/worktree-view-actions.d.ts +8 -3
  65. package/lib/client/worktree-view-actions.d.ts.map +1 -1
  66. package/lib/client/worktree-view-actions.js +28 -2
  67. package/lib/client/worktree-view-actions.js.map +1 -1
  68. package/lib/client/worktree-view-errors.d.ts +10 -0
  69. package/lib/client/worktree-view-errors.d.ts.map +1 -1
  70. package/lib/client/worktree-view-errors.js +22 -1
  71. package/lib/client/worktree-view-errors.js.map +1 -1
  72. package/lib/client.js +1473 -201
  73. package/lib/client.js.map +1 -1
  74. package/lib/contract/index.contract.js +2 -0
  75. package/lib/contract/index.contract.js.map +1 -1
  76. package/lib/contract/index.d.ts +6 -2
  77. package/lib/contract/index.d.ts.map +1 -1
  78. package/lib/contract/index.js +4 -0
  79. package/lib/contract/index.js.map +1 -1
  80. package/lib/contract/worktree-permission.d.ts +73 -0
  81. package/lib/contract/worktree-permission.d.ts.map +1 -0
  82. package/lib/contract/worktree-permission.js +32 -0
  83. package/lib/contract/worktree-permission.js.map +1 -0
  84. package/lib/host/index.d.ts +4 -0
  85. package/lib/host/index.d.ts.map +1 -1
  86. package/lib/host/index.js +2 -0
  87. package/lib/host/index.js.map +1 -1
  88. package/lib/host/remote.d.ts +2 -2
  89. package/lib/host/remote.d.ts.map +1 -1
  90. package/lib/host/remote.js +7 -1
  91. package/lib/host/remote.js.map +1 -1
  92. package/lib/host/service.d.ts +3 -1
  93. package/lib/host/service.d.ts.map +1 -1
  94. package/lib/host/service.js +36 -2
  95. package/lib/host/service.js.map +1 -1
  96. package/lib/host/worktree-permission-manager.d.ts +14 -0
  97. package/lib/host/worktree-permission-manager.d.ts.map +1 -0
  98. package/lib/host/worktree-permission-manager.js +111 -0
  99. package/lib/host/worktree-permission-manager.js.map +1 -0
  100. package/lib/host/worktree-permission.d.ts +38 -0
  101. package/lib/host/worktree-permission.d.ts.map +1 -0
  102. package/lib/host/worktree-permission.js +156 -0
  103. package/lib/host/worktree-permission.js.map +1 -0
  104. package/lib/index.d.ts +4 -3
  105. package/lib/index.d.ts.map +1 -1
  106. package/lib/index.js +2 -1
  107. package/lib/index.js.map +1 -1
  108. package/lib/manage/worktree-permission.d.ts +3 -0
  109. package/lib/manage/worktree-permission.d.ts.map +1 -0
  110. package/lib/manage/worktree-permission.js +3 -0
  111. package/lib/manage/worktree-permission.js.map +1 -0
  112. package/lib/typert.host.js +126 -27
  113. package/lib/typert.remote-client.d.ts +5 -1
  114. package/lib/typert.remote-client.d.ts.map +1 -1
  115. package/lib/typert.remote-client.js +126 -27
  116. package/package.json +1 -1
@@ -0,0 +1,38 @@
1
+ import { type WorktreePermissionApprovalPolicy, type WorktreePermissionPort, type WorktreePermissionSandboxMode } from '../manage/worktree-permission.js';
2
+ interface PermissionEvent {
3
+ readonly type: string;
4
+ readonly data?: unknown;
5
+ }
6
+ interface PermissionSession {
7
+ readonly id: string;
8
+ readonly events: readonly PermissionEvent[];
9
+ append(type: string, data: unknown): unknown;
10
+ }
11
+ interface PermissionPresetSpec {
12
+ readonly sandbox: WorktreePermissionSandboxMode;
13
+ readonly approval: WorktreePermissionApprovalPolicy;
14
+ }
15
+ interface PermissionPresetService {
16
+ readonly names: readonly string[];
17
+ current(events: readonly PermissionEvent[]): string;
18
+ resolve(name: string): PermissionPresetSpec;
19
+ set(session: PermissionSession, name: string): void;
20
+ }
21
+ interface SandboxPolicyService {
22
+ readonly defaultMode?: WorktreePermissionSandboxMode;
23
+ }
24
+ export interface DshWorktreePermissionAdapterOptions {
25
+ readonly sessions: {
26
+ get(sessionId: string): unknown;
27
+ };
28
+ readonly permissionPresets?: PermissionPresetService;
29
+ readonly sandboxPolicy?: SandboxPolicyService;
30
+ }
31
+ /**
32
+ * Adapt the optional public DSH permission services to the Worktree Manager
33
+ * port. No DSH package is imported at runtime, so an older bundle without the
34
+ * optional service can remain loadable and report an unverified capability.
35
+ */
36
+ export declare function createDshWorktreePermissionAdapter(options: DshWorktreePermissionAdapterOptions): WorktreePermissionPort;
37
+ export {};
38
+ //# sourceMappingURL=worktree-permission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-permission.d.ts","sourceRoot":"","sources":["../../src/host/worktree-permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gCAAgC,EAErC,KAAK,sBAAsB,EAG3B,KAAK,6BAA6B,EACnC,MAAM,kCAAkC,CAAC;AAE1C,UAAU,eAAe;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CAC9C;AAED,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,OAAO,EAAE,6BAA6B,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,CAAC;CACrD;AAED,UAAU,uBAAuB;IAC/B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAAC;IACpD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAAC;IAC5C,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrD;AAED,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,6BAA6B,CAAC;CACtD;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,QAAQ,EAAE;QACjB,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;KACjC,CAAC;IACF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IACrD,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;CAC/C;AAwGD;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,mCAAmC,GAC3C,sBAAsB,CA0FxB"}
@@ -0,0 +1,156 @@
1
+ import { decideWorktreePermission, WORKTREE_FULL_ACCESS_PRESET, } from '../manage/worktree-permission.js';
2
+ const WORKSPACE_WRITE_PRESET = 'workspace-write';
3
+ function isRecord(value) {
4
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
5
+ }
6
+ function stringValue(value) {
7
+ return typeof value === 'string' ? value : undefined;
8
+ }
9
+ function lastEventValue(events, type, key) {
10
+ for (let index = events.length - 1; index >= 0; index -= 1) {
11
+ const event = events[index];
12
+ if (event.type !== type || !isRecord(event.data))
13
+ continue;
14
+ const value = stringValue(event.data[key]);
15
+ if (value !== undefined)
16
+ return value;
17
+ }
18
+ return undefined;
19
+ }
20
+ function hasFullThenRestriction(events) {
21
+ let fullSeen = false;
22
+ for (const event of events) {
23
+ if (event.type !== 'permission/preset' || !isRecord(event.data))
24
+ continue;
25
+ const preset = stringValue(event.data.preset);
26
+ if (preset === WORKTREE_FULL_ACCESS_PRESET) {
27
+ fullSeen = true;
28
+ }
29
+ else if (fullSeen && preset !== undefined) {
30
+ return true;
31
+ }
32
+ }
33
+ return false;
34
+ }
35
+ function readCurrentState(session, permissionPresets, sandboxPolicy, pluginApplied) {
36
+ const preset = permissionPresets?.current(session.events);
37
+ let presetSpec;
38
+ if (preset !== undefined && preset !== 'custom') {
39
+ try {
40
+ presetSpec = permissionPresets?.resolve(preset);
41
+ }
42
+ catch {
43
+ presetSpec = undefined;
44
+ }
45
+ }
46
+ const sandboxMode = lastEventValue(session.events, 'sandbox/mode', 'mode') ??
47
+ presetSpec?.sandbox ??
48
+ sandboxPolicy?.defaultMode;
49
+ const approvalPolicy = lastEventValue(session.events, 'approval/policy', 'policy') ??
50
+ presetSpec?.approval;
51
+ const pluginChangedThisRuntime = pluginApplied.has(session.id);
52
+ const currentIsRestricted = pluginChangedThisRuntime && sandboxMode !== 'danger-full-access' ||
53
+ hasFullThenRestriction(session.events) ||
54
+ (preset !== undefined &&
55
+ preset !== WORKSPACE_WRITE_PRESET &&
56
+ preset !== WORKTREE_FULL_ACCESS_PRESET &&
57
+ preset !== 'danger-full-access');
58
+ return {
59
+ ...(preset === undefined ? {} : { preset }),
60
+ ...(sandboxMode === undefined ? {} : { sandboxMode }),
61
+ ...(approvalPolicy === undefined ? {} : { approvalPolicy }),
62
+ explicitUserOverride: currentIsRestricted,
63
+ };
64
+ }
65
+ function resultFromCurrent(status, current, retryable) {
66
+ return {
67
+ status,
68
+ ...(current.preset === undefined ? {} : { preset: current.preset }),
69
+ ...(current.sandboxMode === undefined ? {} : { sandboxMode: current.sandboxMode }),
70
+ ...(current.approvalPolicy === undefined ? {} : { approvalPolicy: current.approvalPolicy }),
71
+ retryable,
72
+ };
73
+ }
74
+ function serviceAvailable(permissionPresets) {
75
+ return (permissionPresets !== undefined &&
76
+ Array.isArray(permissionPresets.names) &&
77
+ typeof permissionPresets.current === 'function' &&
78
+ typeof permissionPresets.resolve === 'function' &&
79
+ typeof permissionPresets.set === 'function');
80
+ }
81
+ /**
82
+ * Adapt the optional public DSH permission services to the Worktree Manager
83
+ * port. No DSH package is imported at runtime, so an older bundle without the
84
+ * optional service can remain loadable and report an unverified capability.
85
+ */
86
+ export function createDshWorktreePermissionAdapter(options) {
87
+ const pluginApplied = new Set();
88
+ const apply = (input, binding) => {
89
+ const session = options.sessions.get(input.sessionId);
90
+ if (!isPermissionSession(session)) {
91
+ return { status: 'unverified', retryable: true };
92
+ }
93
+ const permissionPresets = options.permissionPresets;
94
+ const current = readCurrentState(session, permissionPresets, options.sandboxPolicy, pluginApplied);
95
+ const hasService = serviceAvailable(permissionPresets);
96
+ const decision = decideWorktreePermission({
97
+ binding,
98
+ current,
99
+ capability: {
100
+ permissionService: hasService,
101
+ fullPreset: hasService && permissionPresets.names.includes(WORKTREE_FULL_ACCESS_PRESET),
102
+ workspaceWrite: hasService && permissionPresets.names.includes(WORKSPACE_WRITE_PRESET),
103
+ },
104
+ });
105
+ if (binding === 'active' &&
106
+ decision.kind === 'apply-full' &&
107
+ input.confirmed !== true) {
108
+ return { status: 'confirmation-required', retryable: false };
109
+ }
110
+ switch (decision.kind) {
111
+ case 'apply-full':
112
+ if (!hasService)
113
+ return resultFromCurrent('unverified', current, true);
114
+ permissionPresets.set(session, decision.preset);
115
+ pluginApplied.add(session.id);
116
+ return resultFromCurrent('full-applied', readCurrentState(session, permissionPresets, options.sandboxPolicy, pluginApplied), false);
117
+ case 'preserve-user-restriction':
118
+ return resultFromCurrent('user-restricted', current, false);
119
+ case 'unverified':
120
+ return resultFromCurrent('unverified', current, true);
121
+ case 'fallback-workspace-write':
122
+ if (!hasService)
123
+ return resultFromCurrent('unverified', current, true);
124
+ permissionPresets.set(session, WORKSPACE_WRITE_PRESET);
125
+ return resultFromCurrent('fallback-workspace-write', readCurrentState(session, permissionPresets, options.sandboxPolicy, pluginApplied), true);
126
+ case 'normalize-workspace-write':
127
+ if (!hasService || !permissionPresets.names.includes(WORKSPACE_WRITE_PRESET)) {
128
+ return resultFromCurrent('unverified', current, true);
129
+ }
130
+ permissionPresets.set(session, WORKSPACE_WRITE_PRESET);
131
+ pluginApplied.delete(session.id);
132
+ return resultFromCurrent('normalized-workspace-write', readCurrentState(session, permissionPresets, options.sandboxPolicy, pluginApplied), false);
133
+ case 'no-op':
134
+ return resultFromCurrent(binding === 'active' && isFullAccessState(current) ? 'already-full' : 'no-op', current, false);
135
+ }
136
+ };
137
+ return {
138
+ ensure(input) {
139
+ return Promise.resolve(apply(input, 'active'));
140
+ },
141
+ normalize(input) {
142
+ return Promise.resolve(apply(input, 'detached'));
143
+ },
144
+ };
145
+ }
146
+ function isPermissionSession(value) {
147
+ return (isRecord(value) &&
148
+ typeof value.id === 'string' &&
149
+ Array.isArray(value.events) &&
150
+ typeof value.append === 'function');
151
+ }
152
+ function isFullAccessState(current) {
153
+ return (current.preset === WORKTREE_FULL_ACCESS_PRESET ||
154
+ current.sandboxMode === 'danger-full-access');
155
+ }
156
+ //# sourceMappingURL=worktree-permission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-permission.js","sourceRoot":"","sources":["../../src/host/worktree-permission.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -10,14 +10,15 @@
10
10
  * @packageDocumentation
11
11
  */
12
12
  export { WORKTREE_ERROR_CODES, WORKTREE_REMOTE_METHODS, createWorktreeError, } from './contract/index.js';
13
- export type { BranchRecord, BindingStatus, JsonPrimitive, JsonValue, SessionBinding, WorktreeError, WorktreeErrorCode, WorktreeErrorDetails, WorktreeManager, WorktreeImportCandidate, WorktreeRemoteManager, WorktreeRemoteMethod, WorktreeRemoteResult, WorktreeRecord, WorktreeStatus, WorktreeSource, WorktreeId, WorkspaceId, SessionId, } from './contract/index.js';
13
+ export { WORKTREE_FULL_ACCESS_PRESET } from './contract/index.js';
14
+ export type { BranchRecord, BindingStatus, JsonPrimitive, JsonValue, SessionBinding, WorktreeError, WorktreeErrorCode, WorktreeErrorDetails, WorktreeManager, WorktreeImportCandidate, WorktreeRemoteManager, WorktreeRemoteMethod, WorktreeRemoteResult, WorktreeRecord, WorktreeStatus, WorktreeSource, WorktreeId, WorkspaceId, SessionId, WorktreePermissionApprovalPolicy, WorktreePermissionBinding, WorktreePermissionCapability, WorktreePermissionCurrentState, WorktreePermissionDecision, WorktreePermissionDecisionInput, WorktreePermissionManager, WorktreePermissionNormalizationRequest, WorktreePermissionPort, WorktreePermissionRequest, WorktreePermissionResult, WorktreePermissionSandboxMode, WorktreePermissionStatus, } from './contract/index.js';
14
15
  export { LocalGitAdapter } from './provider/git.js';
15
16
  export { WorkspaceShardedSidecarRepository, validateSidecarSnapshot, } from './provider/sidecar.js';
16
17
  export { SIDECAR_SCHEMA_VERSION, WorktreeProviderError, isWorktreeProviderError, providerError, } from './provider/types.js';
17
18
  export type { DshReadAdapter, DshSessionSummary, DshWorkspaceSummary, GitWorktreeAdapter, GitWorktreeInfo, SidecarMutation, SidecarSnapshot, SidecarStore, } from './provider/types.js';
18
19
  export { WorktreeManagerImpl, createWorktreeManager } from './manage/index.js';
19
20
  export type { RuntimeCwdInput, WorktreeManagerOptions, WorktreeManagerService, } from './manage/index.js';
20
- export { DshHostReadAdapter, WorktreeRemoteService, createWorktreeRemoteProjection, } from './host/index.js';
21
- export type { DshHostReadContext, WorktreeHostConfig } from './host/index.js';
21
+ export { DshHostReadAdapter, WorktreeRemoteService, createWorktreeRemoteProjection, createDshWorktreePermissionAdapter, createWorktreePermissionManager, } from './host/index.js';
22
+ export type { DshHostReadContext, DshWorktreePermissionAdapterOptions, WorktreeHostConfig, WorktreePermissionManagerOptions, } from './host/index.js';
22
23
  export { WorktreeRemoteService as default } from './host/index.js';
23
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,SAAS,EACT,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,cAAc,EACd,UAAU,EACV,WAAW,EACX,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAK9E,OAAO,EAAE,qBAAqB,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,YAAY,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,SAAS,EACT,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,cAAc,EACd,UAAU,EACV,WAAW,EACX,SAAS,EACT,gCAAgC,EAChC,yBAAyB,EACzB,4BAA4B,EAC5B,8BAA8B,EAC9B,0BAA0B,EAC1B,+BAA+B,EAC/B,yBAAyB,EACzB,sCAAsC,EACtC,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,8BAA8B,EAC9B,kCAAkC,EAClC,+BAA+B,GAChC,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,kBAAkB,EAClB,mCAAmC,EACnC,kBAAkB,EAClB,gCAAgC,GACjC,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EAAE,qBAAqB,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
package/lib/index.js CHANGED
@@ -10,11 +10,12 @@
10
10
  * @packageDocumentation
11
11
  */
12
12
  export { WORKTREE_ERROR_CODES, WORKTREE_REMOTE_METHODS, createWorktreeError, } from './contract/index.js';
13
+ export { WORKTREE_FULL_ACCESS_PRESET } from './contract/index.js';
13
14
  export { LocalGitAdapter } from './provider/git.js';
14
15
  export { WorkspaceShardedSidecarRepository, validateSidecarSnapshot, } from './provider/sidecar.js';
15
16
  export { SIDECAR_SCHEMA_VERSION, WorktreeProviderError, isWorktreeProviderError, providerError, } from './provider/types.js';
16
17
  export { WorktreeManagerImpl, createWorktreeManager } from './manage/index.js';
17
- export { DshHostReadAdapter, WorktreeRemoteService, createWorktreeRemoteProjection, } from './host/index.js';
18
+ export { DshHostReadAdapter, WorktreeRemoteService, createWorktreeRemoteProjection, createDshWorktreePermissionAdapter, createWorktreePermissionManager, } from './host/index.js';
18
19
  // bundle patch 以默认导出装载同一个 Cordis 服务;命名导出保留给显式 Host 组合。
19
20
  // The bundle patch loads the same Cordis service through the default export; the named
20
21
  // export remains available to explicit Host compositions.
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAsB7B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAW7B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM/E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AAGzB,uDAAuD;AACvD,uFAAuF;AACvF,0DAA0D;AAC1D,OAAO,EAAE,qBAAqB,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAmClE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAW7B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM/E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,8BAA8B,EAC9B,kCAAkC,EAClC,+BAA+B,GAChC,MAAM,iBAAiB,CAAC;AAQzB,uDAAuD;AACvD,uFAAuF;AACvF,0DAA0D;AAC1D,OAAO,EAAE,qBAAqB,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Compatibility barrel for the browser-safe Worktree permission contract. */
2
+ export * from '../contract/worktree-permission.js';
3
+ //# sourceMappingURL=worktree-permission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-permission.d.ts","sourceRoot":"","sources":["../../src/manage/worktree-permission.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,oCAAoC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Compatibility barrel for the browser-safe Worktree permission contract. */
2
+ export * from '../contract/worktree-permission.js';
3
+ //# sourceMappingURL=worktree-permission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-permission.js","sourceRoot":"","sources":["../../src/manage/worktree-permission.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,oCAAoC,CAAC"}
@@ -10,6 +10,8 @@ const JsonValueRemoteCodec$schema6 = z.union([z.literal(null), z.string(), z.num
10
10
  const JsonValueRemoteCodec$schema7 = z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema7)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema7)).readonly()])
11
11
  const JsonValueRemoteCodec$schema8 = z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema8)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema8)).readonly()])
12
12
  const JsonValueRemoteCodec$schema9 = z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema9)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema9)).readonly()])
13
+ const JsonValueRemoteCodec$schema10 = z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema10)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema10)).readonly()])
14
+ const JsonValueRemoteCodec$schema11 = z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema11)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema11)).readonly()])
13
15
  const _cerbur_clutch_dsh_worktree_worktreeManager_bindSession_parameter_0$schema = z.object({
14
16
  'workspaceId': z.string().readonly(),
15
17
  'worktreeId': z.string().readonly(),
@@ -18,9 +20,9 @@ const _cerbur_clutch_dsh_worktree_worktreeManager_bindSession_parameter_0$schema
18
20
  const _cerbur_clutch_dsh_worktree_worktreeManager_bindSession_result$schema = z.union([z.object({
19
21
  'ok': z.literal(false).readonly(),
20
22
  'error': z.object({
21
- 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED")]).readonly(),
23
+ 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED"), z.literal("WORKTREE_PERMISSION_BINDING_REQUIRED")]).readonly(),
22
24
  'message': z.string().readonly(),
23
- 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema5)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema5)).readonly()])).readonly().readonly(),
25
+ 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema9)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema9)).readonly()])).readonly().readonly(),
24
26
  }).readonly(),
25
27
  }), z.object({
26
28
  'ok': z.literal(true).readonly(),
@@ -39,9 +41,9 @@ const _cerbur_clutch_dsh_worktree_worktreeManager_createWorktree_parameter_0$sch
39
41
  const _cerbur_clutch_dsh_worktree_worktreeManager_createWorktree_result$schema = z.union([z.object({
40
42
  'ok': z.literal(false).readonly(),
41
43
  'error': z.object({
42
- 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED")]).readonly(),
44
+ 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED"), z.literal("WORKTREE_PERMISSION_BINDING_REQUIRED")]).readonly(),
43
45
  'message': z.string().readonly(),
44
- 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema9)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema9)).readonly()])).readonly().readonly(),
46
+ 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema4)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema4)).readonly()])).readonly().readonly(),
45
47
  }).readonly(),
46
48
  }), z.object({
47
49
  'ok': z.literal(true).readonly(),
@@ -55,6 +57,31 @@ const _cerbur_clutch_dsh_worktree_worktreeManager_createWorktree_result$schema =
55
57
  'health': z.union([z.undefined(), z.literal("ready"), z.literal("repair")]).readonly().optional(),
56
58
  }).readonly(),
57
59
  })])
60
+ const _cerbur_clutch_dsh_worktree_worktreeManager_ensureWorktreePermission_parameter_0$schema = z.object({
61
+ 'workspaceId': z.string().readonly(),
62
+ 'worktreeId': z.string().readonly(),
63
+ 'sessionId': z.string().readonly(),
64
+ 'binding': z.union([z.undefined(), z.literal("active"), z.literal("detached"), z.literal("main"), z.literal("unbound")]).readonly().optional(),
65
+ 'confirmed': z.union([z.undefined(), z.literal(false), z.literal(true)]).readonly().optional(),
66
+ })
67
+ const _cerbur_clutch_dsh_worktree_worktreeManager_ensureWorktreePermission_result$schema = z.union([z.object({
68
+ 'ok': z.literal(false).readonly(),
69
+ 'error': z.object({
70
+ 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED"), z.literal("WORKTREE_PERMISSION_BINDING_REQUIRED")]).readonly(),
71
+ 'message': z.string().readonly(),
72
+ 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema10)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema10)).readonly()])).readonly().readonly(),
73
+ }).readonly(),
74
+ }), z.object({
75
+ 'ok': z.literal(true).readonly(),
76
+ 'value': z.object({
77
+ 'status': z.union([z.literal("full-applied"), z.literal("already-full"), z.literal("confirmation-required"), z.literal("fallback-workspace-write"), z.literal("user-restricted"), z.literal("unverified"), z.literal("normalized-workspace-write"), z.literal("no-op")]).readonly(),
78
+ 'preset': z.union([z.undefined(), z.string()]).readonly().optional(),
79
+ 'sandboxMode': z.union([z.undefined(), z.literal("read-only"), z.literal("workspace-write"), z.literal("danger-full-access")]).readonly().optional(),
80
+ 'approvalPolicy': z.union([z.undefined(), z.literal("ask"), z.literal("never")]).readonly().optional(),
81
+ 'sessionIds': z.union([z.undefined(), z.array(z.string())]).readonly().optional(),
82
+ 'retryable': z.boolean().readonly(),
83
+ }).readonly(),
84
+ })])
58
85
  const _cerbur_clutch_dsh_worktree_worktreeManager_importWorktree_parameter_0$schema = z.object({
59
86
  'workspaceId': z.string().readonly(),
60
87
  'absolutePath': z.string().readonly(),
@@ -62,9 +89,9 @@ const _cerbur_clutch_dsh_worktree_worktreeManager_importWorktree_parameter_0$sch
62
89
  const _cerbur_clutch_dsh_worktree_worktreeManager_importWorktree_result$schema = z.union([z.object({
63
90
  'ok': z.literal(false).readonly(),
64
91
  'error': z.object({
65
- 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED")]).readonly(),
92
+ 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED"), z.literal("WORKTREE_PERMISSION_BINDING_REQUIRED")]).readonly(),
66
93
  'message': z.string().readonly(),
67
- 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema)).readonly()])).readonly().readonly(),
94
+ 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema5)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema5)).readonly()])).readonly().readonly(),
68
95
  }).readonly(),
69
96
  }), z.object({
70
97
  'ok': z.literal(true).readonly(),
@@ -86,9 +113,9 @@ const _cerbur_clutch_dsh_worktree_worktreeManager_insertWorktreeBefore_parameter
86
113
  const _cerbur_clutch_dsh_worktree_worktreeManager_insertWorktreeBefore_result$schema = z.union([z.object({
87
114
  'ok': z.literal(false).readonly(),
88
115
  'error': z.object({
89
- 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED")]).readonly(),
116
+ 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED"), z.literal("WORKTREE_PERMISSION_BINDING_REQUIRED")]).readonly(),
90
117
  'message': z.string().readonly(),
91
- 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3)).readonly()])).readonly().readonly(),
118
+ 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema7)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema7)).readonly()])).readonly().readonly(),
92
119
  }).readonly(),
93
120
  }), z.object({
94
121
  'ok': z.literal(true).readonly(),
@@ -100,9 +127,9 @@ const _cerbur_clutch_dsh_worktree_worktreeManager_listBindings_parameter_0$schem
100
127
  const _cerbur_clutch_dsh_worktree_worktreeManager_listBindings_result$schema = z.union([z.object({
101
128
  'ok': z.literal(false).readonly(),
102
129
  'error': z.object({
103
- 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED")]).readonly(),
130
+ 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED"), z.literal("WORKTREE_PERMISSION_BINDING_REQUIRED")]).readonly(),
104
131
  'message': z.string().readonly(),
105
- 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema4)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema4)).readonly()])).readonly().readonly(),
132
+ 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema8)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema8)).readonly()])).readonly().readonly(),
106
133
  }).readonly(),
107
134
  }), z.object({
108
135
  'ok': z.literal(true).readonly(),
@@ -119,9 +146,9 @@ const _cerbur_clutch_dsh_worktree_worktreeManager_listBranches_parameter_0$schem
119
146
  const _cerbur_clutch_dsh_worktree_worktreeManager_listBranches_result$schema = z.union([z.object({
120
147
  'ok': z.literal(false).readonly(),
121
148
  'error': z.object({
122
- 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED")]).readonly(),
149
+ 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED"), z.literal("WORKTREE_PERMISSION_BINDING_REQUIRED")]).readonly(),
123
150
  'message': z.string().readonly(),
124
- 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema8)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema8)).readonly()])).readonly().readonly(),
151
+ 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema3)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema3)).readonly()])).readonly().readonly(),
125
152
  }).readonly(),
126
153
  }), z.object({
127
154
  'ok': z.literal(true).readonly(),
@@ -137,9 +164,9 @@ const _cerbur_clutch_dsh_worktree_worktreeManager_listImportCandidates_parameter
137
164
  const _cerbur_clutch_dsh_worktree_worktreeManager_listImportCandidates_result$schema = z.union([z.object({
138
165
  'ok': z.literal(false).readonly(),
139
166
  'error': z.object({
140
- 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED")]).readonly(),
167
+ 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED"), z.literal("WORKTREE_PERMISSION_BINDING_REQUIRED")]).readonly(),
141
168
  'message': z.string().readonly(),
142
- 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema7)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema7)).readonly()])).readonly().readonly(),
169
+ 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema2)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema2)).readonly()])).readonly().readonly(),
143
170
  }).readonly(),
144
171
  }), z.object({
145
172
  'ok': z.literal(true).readonly(),
@@ -154,9 +181,9 @@ const _cerbur_clutch_dsh_worktree_worktreeManager_listWorktrees_parameter_0$sche
154
181
  const _cerbur_clutch_dsh_worktree_worktreeManager_listWorktrees_result$schema = z.union([z.object({
155
182
  'ok': z.literal(false).readonly(),
156
183
  'error': z.object({
157
- 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED")]).readonly(),
184
+ 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED"), z.literal("WORKTREE_PERMISSION_BINDING_REQUIRED")]).readonly(),
158
185
  'message': z.string().readonly(),
159
- 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema6)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema6)).readonly()])).readonly().readonly(),
186
+ 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema)).readonly()])).readonly().readonly(),
160
187
  }).readonly(),
161
188
  }), z.object({
162
189
  'ok': z.literal(true).readonly(),
@@ -170,6 +197,28 @@ const _cerbur_clutch_dsh_worktree_worktreeManager_listWorktrees_result$schema =
170
197
  'health': z.union([z.undefined(), z.literal("ready"), z.literal("repair")]).readonly().optional(),
171
198
  })).readonly(),
172
199
  })])
200
+ const _cerbur_clutch_dsh_worktree_worktreeManager_normalizeDetachedWorktreePermissions_parameter_0$schema = z.object({
201
+ 'workspaceId': z.string().readonly(),
202
+ 'worktreeId': z.string().readonly(),
203
+ })
204
+ const _cerbur_clutch_dsh_worktree_worktreeManager_normalizeDetachedWorktreePermissions_result$schema = z.union([z.object({
205
+ 'ok': z.literal(false).readonly(),
206
+ 'error': z.object({
207
+ 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED"), z.literal("WORKTREE_PERMISSION_BINDING_REQUIRED")]).readonly(),
208
+ 'message': z.string().readonly(),
209
+ 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema11)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema11)).readonly()])).readonly().readonly(),
210
+ }).readonly(),
211
+ }), z.object({
212
+ 'ok': z.literal(true).readonly(),
213
+ 'value': z.object({
214
+ 'status': z.union([z.literal("full-applied"), z.literal("already-full"), z.literal("confirmation-required"), z.literal("fallback-workspace-write"), z.literal("user-restricted"), z.literal("unverified"), z.literal("normalized-workspace-write"), z.literal("no-op")]).readonly(),
215
+ 'preset': z.union([z.undefined(), z.string()]).readonly().optional(),
216
+ 'sandboxMode': z.union([z.undefined(), z.literal("read-only"), z.literal("workspace-write"), z.literal("danger-full-access")]).readonly().optional(),
217
+ 'approvalPolicy': z.union([z.undefined(), z.literal("ask"), z.literal("never")]).readonly().optional(),
218
+ 'sessionIds': z.union([z.undefined(), z.array(z.string())]).readonly().optional(),
219
+ 'retryable': z.boolean().readonly(),
220
+ }).readonly(),
221
+ })])
173
222
  const _cerbur_clutch_dsh_worktree_worktreeManager_removeWorktree_parameter_0$schema = z.object({
174
223
  'workspaceId': z.string().readonly(),
175
224
  'worktreeId': z.string().readonly(),
@@ -177,9 +226,9 @@ const _cerbur_clutch_dsh_worktree_worktreeManager_removeWorktree_parameter_0$sch
177
226
  const _cerbur_clutch_dsh_worktree_worktreeManager_removeWorktree_result$schema = z.union([z.object({
178
227
  'ok': z.literal(false).readonly(),
179
228
  'error': z.object({
180
- 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED")]).readonly(),
229
+ 'code': z.union([z.literal("WORKSPACE_NOT_FOUND"), z.literal("WORKSPACE_NOT_GIT_REPOSITORY"), z.literal("GIT_NOT_INSTALLED"), z.literal("WORKTREE_REQUIRES_INITIAL_COMMIT"), z.literal("WORKTREE_BRANCH_CONFLICT"), z.literal("WORKTREE_NOT_FOUND"), z.literal("WORKTREE_ORDER_INVALID"), z.literal("WORKTREE_REMOVED"), z.literal("WORKTREE_IMPORT_INVALID"), z.literal("WORKTREE_ALREADY_MANAGED"), z.literal("SESSION_NOT_FOUND"), z.literal("SESSION_CWD_MISMATCH"), z.literal("SESSION_ALREADY_BOUND"), z.literal("SIDECAR_UNAVAILABLE"), z.literal("SIDECAR_CORRUPT"), z.literal("SIDECAR_SYNC_REQUIRED"), z.literal("GIT_OPERATION_FAILED"), z.literal("WORKTREE_PERMISSION_BINDING_REQUIRED")]).readonly(),
181
230
  'message': z.string().readonly(),
182
- 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema2)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema2)).readonly()])).readonly().readonly(),
231
+ 'details': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => JsonValueRemoteCodec$schema6)), z.record(z.string(), z.lazy(() => JsonValueRemoteCodec$schema6)).readonly()])).readonly().readonly(),
183
232
  }).readonly(),
184
233
  }), z.object({
185
234
  'ok': z.literal(true).readonly(),
@@ -215,7 +264,7 @@ export const TYPERT = {
215
264
  typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreeRemoteResult',
216
265
  schema: _cerbur_clutch_dsh_worktree_worktreeManager_bindSession_result$schema,
217
266
  },
218
- sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":133,"column":3},
267
+ sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":167,"column":3},
219
268
  },
220
269
  {
221
270
  id: '@cerbur/clutch-dsh-worktree#worktreeManager/createWorktree',
@@ -240,7 +289,32 @@ export const TYPERT = {
240
289
  typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreeRemoteResult',
241
290
  schema: _cerbur_clutch_dsh_worktree_worktreeManager_createWorktree_result$schema,
242
291
  },
243
- sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":92,"column":3},
292
+ sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":126,"column":3},
293
+ },
294
+ {
295
+ id: '@cerbur/clutch-dsh-worktree#worktreeManager/ensureWorktreePermission',
296
+ service: 'worktreeManager',
297
+ namespace: 'worktreeManager',
298
+ method: 'ensureWorktreePermission',
299
+ invocation: { kind: 'direct' },
300
+ parameters: [
301
+ {
302
+ name: 'input',
303
+ wire: 'input',
304
+ source: 'json',
305
+ codec: {
306
+ mode: 'strict',
307
+ typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreePermissionRequest',
308
+ schema: _cerbur_clutch_dsh_worktree_worktreeManager_ensureWorktreePermission_parameter_0$schema,
309
+ },
310
+ },
311
+ ],
312
+ result: {
313
+ mode: 'strict',
314
+ typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreeRemoteResult',
315
+ schema: _cerbur_clutch_dsh_worktree_worktreeManager_ensureWorktreePermission_result$schema,
316
+ },
317
+ sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":176,"column":3},
244
318
  },
245
319
  {
246
320
  id: '@cerbur/clutch-dsh-worktree#worktreeManager/importWorktree',
@@ -265,7 +339,7 @@ export const TYPERT = {
265
339
  typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreeRemoteResult',
266
340
  schema: _cerbur_clutch_dsh_worktree_worktreeManager_importWorktree_result$schema,
267
341
  },
268
- sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":101,"column":3},
342
+ sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":135,"column":3},
269
343
  },
270
344
  {
271
345
  id: '@cerbur/clutch-dsh-worktree#worktreeManager/insertWorktreeBefore',
@@ -290,7 +364,7 @@ export const TYPERT = {
290
364
  typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreeRemoteResult',
291
365
  schema: _cerbur_clutch_dsh_worktree_worktreeManager_insertWorktreeBefore_result$schema,
292
366
  },
293
- sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":117,"column":3},
367
+ sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":151,"column":3},
294
368
  },
295
369
  {
296
370
  id: '@cerbur/clutch-dsh-worktree#worktreeManager/listBindings',
@@ -315,7 +389,7 @@ export const TYPERT = {
315
389
  typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreeRemoteResult',
316
390
  schema: _cerbur_clutch_dsh_worktree_worktreeManager_listBindings_result$schema,
317
391
  },
318
- sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":126,"column":3},
392
+ sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":160,"column":3},
319
393
  },
320
394
  {
321
395
  id: '@cerbur/clutch-dsh-worktree#worktreeManager/listBranches',
@@ -340,7 +414,7 @@ export const TYPERT = {
340
414
  typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreeRemoteResult',
341
415
  schema: _cerbur_clutch_dsh_worktree_worktreeManager_listBranches_result$schema,
342
416
  },
343
- sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":85,"column":3},
417
+ sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":119,"column":3},
344
418
  },
345
419
  {
346
420
  id: '@cerbur/clutch-dsh-worktree#worktreeManager/listImportCandidates',
@@ -365,7 +439,7 @@ export const TYPERT = {
365
439
  typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreeRemoteResult',
366
440
  schema: _cerbur_clutch_dsh_worktree_worktreeManager_listImportCandidates_result$schema,
367
441
  },
368
- sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":78,"column":3},
442
+ sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":112,"column":3},
369
443
  },
370
444
  {
371
445
  id: '@cerbur/clutch-dsh-worktree#worktreeManager/listWorktrees',
@@ -390,7 +464,32 @@ export const TYPERT = {
390
464
  typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreeRemoteResult',
391
465
  schema: _cerbur_clutch_dsh_worktree_worktreeManager_listWorktrees_result$schema,
392
466
  },
393
- sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":71,"column":3},
467
+ sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":105,"column":3},
468
+ },
469
+ {
470
+ id: '@cerbur/clutch-dsh-worktree#worktreeManager/normalizeDetachedWorktreePermissions',
471
+ service: 'worktreeManager',
472
+ namespace: 'worktreeManager',
473
+ method: 'normalizeDetachedWorktreePermissions',
474
+ invocation: { kind: 'direct' },
475
+ parameters: [
476
+ {
477
+ name: 'input',
478
+ wire: 'input',
479
+ source: 'json',
480
+ codec: {
481
+ mode: 'strict',
482
+ typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreePermissionNormalizationRequest',
483
+ schema: _cerbur_clutch_dsh_worktree_worktreeManager_normalizeDetachedWorktreePermissions_parameter_0$schema,
484
+ },
485
+ },
486
+ ],
487
+ result: {
488
+ mode: 'strict',
489
+ typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreeRemoteResult',
490
+ schema: _cerbur_clutch_dsh_worktree_worktreeManager_normalizeDetachedWorktreePermissions_result$schema,
491
+ },
492
+ sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":183,"column":3},
394
493
  },
395
494
  {
396
495
  id: '@cerbur/clutch-dsh-worktree#worktreeManager/removeWorktree',
@@ -415,7 +514,7 @@ export const TYPERT = {
415
514
  typeSymbol: '@cerbur/clutch-dsh-worktree/contract#WorktreeRemoteResult',
416
515
  schema: _cerbur_clutch_dsh_worktree_worktreeManager_removeWorktree_result$schema,
417
516
  },
418
- sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":109,"column":3},
517
+ sourceLocation: {"file":"packages/clutch-dsh-worktree/src/host/service.ts","line":143,"column":3},
419
518
  },
420
519
  ],
421
520
  model: {