dsh-git-worktree 0.1.2 → 0.3.0

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 (136) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/LICENSE +21 -21
  3. package/README.md +187 -43
  4. package/README.zh.md +187 -41
  5. package/cordis.patch.yml +7 -7
  6. package/lib/adapters/lookup.d.ts +4 -2
  7. package/lib/adapters/lookup.js +31 -3
  8. package/lib/adapters/lookup.js.map +1 -1
  9. package/lib/adapters/registry.js +41 -0
  10. package/lib/adapters/registry.js.map +1 -1
  11. package/lib/adapters/safe-file.js +34 -4
  12. package/lib/adapters/safe-file.js.map +1 -1
  13. package/lib/client/WorktreeCreateRow.d.ts +7 -0
  14. package/lib/client/WorktreeCreateRow.js +26 -0
  15. package/lib/client/WorktreeCreateRow.js.map +1 -0
  16. package/lib/client/WorktreeReviewRow.d.ts +11 -0
  17. package/lib/client/WorktreeReviewRow.js +67 -0
  18. package/lib/client/WorktreeReviewRow.js.map +1 -0
  19. package/lib/client/actions.d.ts +86 -0
  20. package/lib/client/actions.js +35 -0
  21. package/lib/client/actions.js.map +1 -0
  22. package/lib/client/console-remote/adapter.d.ts +3 -0
  23. package/lib/client/console-remote/adapter.js +61 -0
  24. package/lib/client/console-remote/adapter.js.map +1 -0
  25. package/lib/client/console-remote/index.d.ts +18 -0
  26. package/lib/client/console-remote/index.js +17 -0
  27. package/lib/client/console-remote/index.js.map +1 -0
  28. package/lib/client/index.d.ts +17 -0
  29. package/lib/client/index.js +44 -0
  30. package/lib/client/index.js.map +1 -0
  31. package/lib/client/model.d.ts +68 -0
  32. package/lib/client/model.js +127 -0
  33. package/lib/client/model.js.map +1 -0
  34. package/lib/client/pre-session/PreSessionWorktreeToggle.d.ts +16 -0
  35. package/lib/client/pre-session/PreSessionWorktreeToggle.js +128 -0
  36. package/lib/client/pre-session/PreSessionWorktreeToggle.js.map +1 -0
  37. package/lib/client/pre-session/controller.d.ts +42 -0
  38. package/lib/client/pre-session/controller.js +149 -0
  39. package/lib/client/pre-session/controller.js.map +1 -0
  40. package/lib/client/pre-session/index.d.ts +15 -0
  41. package/lib/client/pre-session/index.js +16 -0
  42. package/lib/client/pre-session/index.js.map +1 -0
  43. package/lib/client/review-console/ReviewActions.d.ts +15 -0
  44. package/lib/client/review-console/ReviewActions.js +234 -0
  45. package/lib/client/review-console/ReviewActions.js.map +1 -0
  46. package/lib/client/review-console/WorktreeReviewPanel.d.ts +20 -0
  47. package/lib/client/review-console/WorktreeReviewPanel.js +75 -0
  48. package/lib/client/review-console/WorktreeReviewPanel.js.map +1 -0
  49. package/lib/client/review-console/index.d.ts +8 -0
  50. package/lib/client/review-console/index.js +22 -0
  51. package/lib/client/review-console/index.js.map +1 -0
  52. package/lib/client/review-console/review-console.styles.d.ts +1 -0
  53. package/lib/client/review-console/review-console.styles.js +81 -0
  54. package/lib/client/review-console/review-console.styles.js.map +1 -0
  55. package/lib/client/review-console/status-events.d.ts +3 -0
  56. package/lib/client/review-console/status-events.js +6 -0
  57. package/lib/client/review-console/status-events.js.map +1 -0
  58. package/lib/client/styles.d.ts +1 -0
  59. package/lib/client/styles.js +78 -0
  60. package/lib/client/styles.js.map +1 -0
  61. package/lib/client/target-console/TargetStatusAction.d.ts +7 -0
  62. package/lib/client/target-console/TargetStatusAction.js +46 -0
  63. package/lib/client/target-console/TargetStatusAction.js.map +1 -0
  64. package/lib/client/target-console/WorktreeConsoleView.d.ts +9 -0
  65. package/lib/client/target-console/WorktreeConsoleView.js +362 -0
  66. package/lib/client/target-console/WorktreeConsoleView.js.map +1 -0
  67. package/lib/client/target-console/WorktreeReviewStatus.d.ts +9 -0
  68. package/lib/client/target-console/WorktreeReviewStatus.js +125 -0
  69. package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -0
  70. package/lib/client/target-console/index.d.ts +14 -0
  71. package/lib/client/target-console/index.js +23 -0
  72. package/lib/client/target-console/index.js.map +1 -0
  73. package/lib/client/target-console/target-console.styles.d.ts +1 -0
  74. package/lib/client/target-console/target-console.styles.js +130 -0
  75. package/lib/client/target-console/target-console.styles.js.map +1 -0
  76. package/lib/client.js +6902 -0
  77. package/lib/commands.d.ts +2 -4
  78. package/lib/commands.js +69 -28
  79. package/lib/commands.js.map +1 -1
  80. package/lib/console-contract.d.ts +253 -0
  81. package/lib/console-contract.js +86 -0
  82. package/lib/console-contract.js.map +1 -0
  83. package/lib/console-host/control-plane.d.ts +31 -0
  84. package/lib/console-host/control-plane.js +502 -0
  85. package/lib/console-host/control-plane.js.map +1 -0
  86. package/lib/console-host/errors.d.ts +6 -0
  87. package/lib/console-host/errors.js +31 -0
  88. package/lib/console-host/errors.js.map +1 -0
  89. package/lib/console-host/projection.d.ts +12 -0
  90. package/lib/console-host/projection.js +136 -0
  91. package/lib/console-host/projection.js.map +1 -0
  92. package/lib/console-host/review-diff.d.ts +18 -0
  93. package/lib/console-host/review-diff.js +176 -0
  94. package/lib/console-host/review-diff.js.map +1 -0
  95. package/lib/console-host/service.d.ts +26 -0
  96. package/lib/console-host/service.js +143 -0
  97. package/lib/console-host/service.js.map +1 -0
  98. package/lib/console-remote/descriptors.d.ts +3 -0
  99. package/lib/console-remote/descriptors.js +105 -0
  100. package/lib/console-remote/descriptors.js.map +1 -0
  101. package/lib/console-remote/remote.d.ts +29 -0
  102. package/lib/console-remote/remote.js +4 -0
  103. package/lib/console-remote/remote.js.map +1 -0
  104. package/lib/console-remote/schemas.d.ts +29 -0
  105. package/lib/console-remote/schemas.js +145 -0
  106. package/lib/console-remote/schemas.js.map +1 -0
  107. package/lib/console-remote/typert.d.ts +3 -0
  108. package/lib/console-remote/typert.js +14 -0
  109. package/lib/console-remote/typert.js.map +1 -0
  110. package/lib/index.d.ts +26 -8
  111. package/lib/index.js +28 -10
  112. package/lib/index.js.map +1 -1
  113. package/lib/managed-worktree-path.d.ts +14 -13
  114. package/lib/managed-worktree-path.js +32 -22
  115. package/lib/managed-worktree-path.js.map +1 -1
  116. package/lib/ports.d.ts +39 -1
  117. package/lib/session-checkout-apply.d.ts +54 -1
  118. package/lib/session-checkout-apply.js +318 -28
  119. package/lib/session-checkout-apply.js.map +1 -1
  120. package/lib/session-checkout-module.js +1098 -36
  121. package/lib/session-checkout-module.js.map +1 -1
  122. package/lib/session-target-context.d.ts +6 -0
  123. package/lib/session-target-context.js +16 -0
  124. package/lib/session-target-context.js.map +1 -0
  125. package/lib/tools.d.ts +6 -6
  126. package/lib/tools.js +107 -218
  127. package/lib/tools.js.map +1 -1
  128. package/lib/types.d.ts +57 -11
  129. package/lib/types.js +6 -6
  130. package/lib/types.js.map +1 -1
  131. package/package.json +116 -69
  132. package/scripts/check-publish.mjs +193 -0
  133. package/scripts/clean-lib.mjs +7 -0
  134. package/scripts/dev-dsh-lib.mjs +509 -0
  135. package/scripts/dev-dsh.mjs +95 -0
  136. package/scripts/dsh-source-runner.mjs +14 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/client/console-remote/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { TypertClientRemote } from '@deepseek-ai/dsh-typert-protocol';
3
+ import type { WorktreeConsoleAdapter } from '../../console-contract.js';
4
+ import { type GitWorktreeRemote } from '../../console-remote/remote.js';
5
+ export { createWorktreeConsoleRemoteAdapter } from './adapter.js';
6
+ export declare const inject: string[];
7
+ interface ConsoleClientContext extends Context {
8
+ remote: TypertClientRemote & {
9
+ gitWorktree: GitWorktreeRemote;
10
+ };
11
+ }
12
+ declare module '@deepseek-ai/cordis' {
13
+ interface Context {
14
+ worktreeConsole: WorktreeConsoleAdapter;
15
+ }
16
+ }
17
+ /** Mount the package-owned strict Remote contribution in this Client fiber. */
18
+ export declare function apply(ctx: ConsoleClientContext): Promise<void>;
@@ -0,0 +1,17 @@
1
+ import contribution from '../../console-remote/remote.js';
2
+ import { apply as applyToolViews, inject as toolViewInject } from '../index.js';
3
+ import { createWorktreeConsoleRemoteAdapter } from './adapter.js';
4
+ export { createWorktreeConsoleRemoteAdapter } from './adapter.js';
5
+ export const inject = [...toolViewInject, 'remote'];
6
+ /** Mount the package-owned strict Remote contribution in this Client fiber. */
7
+ export async function apply(ctx) {
8
+ const disposeRemote = await ctx.remote.$mount(contribution);
9
+ ctx.effect(() => disposeRemote);
10
+ const remote = ctx.get('remote.gitWorktree');
11
+ if (remote === undefined)
12
+ throw new Error('Worktree Console Remote namespace 挂载失败');
13
+ const adapter = createWorktreeConsoleRemoteAdapter(remote);
14
+ ctx.provide('worktreeConsole', adapter);
15
+ applyToolViews(ctx, adapter);
16
+ }
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/console-remote/index.ts"],"names":[],"mappings":"AAGA,OAAO,YAAwC,MAAM,gCAAgC,CAAA;AACrF,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EAAE,kCAAkC,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,EAAE,kCAAkC,EAAE,MAAM,cAAc,CAAA;AAEjE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAG,cAAc,EAAE,QAAQ,CAAC,CAAA;AAYnD,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAyB;IACnD,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IAC3D,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAkC,CAAA;IAC7E,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IACnF,MAAM,OAAO,GAAG,kCAAkC,CAAC,MAAM,CAAC,CAAA;IAC1D,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAA;IACvC,cAAc,CAAC,GAAsD,EAAE,OAAO,CAAC,CAAA;AACjF,CAAC"}
@@ -0,0 +1,17 @@
1
+ /** Browser entry: dedicated ToolViews for Worktree target handoff and review. */
2
+ import type { ComponentType } from 'react';
3
+ import type { WorktreeConsoleAdapter } from '../console-contract.js';
4
+ export { registerTargetConsole } from './target-console/index.js';
5
+ export declare const WORKTREE_CONSOLE_ADAPTER_SERVICE = "worktreeConsole";
6
+ interface ClientContextLike {
7
+ get(name: string): unknown;
8
+ effect(setup: () => void | (() => void), label?: string): void;
9
+ slots: {
10
+ inject(name: 'tool.call.toolview' | 'conversation.session.header.actions' | 'conversation.input.dock' | 'conversation.input.left', callback: () => unknown): void;
11
+ register(descriptor: Record<string, unknown>, component: ComponentType<any>): unknown;
12
+ };
13
+ }
14
+ /** Required client services. */
15
+ export declare const inject: string[];
16
+ /** Register replay-stable keyed rows and one scoped stylesheet. */
17
+ export declare function apply(ctx: ClientContextLike, adapterOverride?: WorktreeConsoleAdapter): void;
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { WorktreeCreateRow } from './WorktreeCreateRow.js';
3
+ import { WorktreeReviewRow } from './WorktreeReviewRow.js';
4
+ import { WORKTREE_STYLES } from './styles.js';
5
+ import { registerPreSessionWorktree } from './pre-session/index.js';
6
+ import { registerTargetConsole } from './target-console/index.js';
7
+ import { TARGET_CONSOLE_STYLES } from './target-console/target-console.styles.js';
8
+ export { registerTargetConsole } from './target-console/index.js';
9
+ export const WORKTREE_CONSOLE_ADAPTER_SERVICE = 'worktreeConsole';
10
+ /** Required client services. */
11
+ export const inject = ['slots', 'workspaces', 'sessions', 'conversation'];
12
+ function servicesOf(ctx) {
13
+ return {
14
+ workspaces: ctx.get('workspaces'),
15
+ sessions: ctx.get('sessions'),
16
+ conversation: ctx.get('conversation'),
17
+ };
18
+ }
19
+ /** Register replay-stable keyed rows and one scoped stylesheet. */
20
+ export function apply(ctx, adapterOverride) {
21
+ const services = servicesOf(ctx);
22
+ // A service provided by this same plugin fiber is not visible through ctx.get
23
+ // until the provider effect settles. The package-owned Remote entry passes
24
+ // the just-created adapter explicitly; direct consumers may still inject it.
25
+ const adapter = adapterOverride
26
+ ?? ctx.get(WORKTREE_CONSOLE_ADAPTER_SERVICE);
27
+ ctx.effect(() => {
28
+ const style = document.createElement('style');
29
+ style.dataset.dshGitWorktree = 'true';
30
+ style.textContent = `${WORKTREE_STYLES}\n${TARGET_CONSOLE_STYLES}`;
31
+ document.head.append(style);
32
+ return () => { style.remove(); };
33
+ }, 'dsh-git-worktree: styles');
34
+ const CreateRow = (props) => _jsx(WorktreeCreateRow, { ...props, services: services });
35
+ const ReviewRow = (props) => _jsx(WorktreeReviewRow, { ...props, services: services, adapter: adapter });
36
+ ctx.slots.inject('tool.call.toolview', () => ctx.slots.register({ name: 'tool.call.toolview', key: 'worktree_create' }, CreateRow));
37
+ ctx.slots.inject('tool.call.toolview', () => ctx.slots.register({ name: 'tool.call.toolview', key: 'worktree_ready_for_review' }, ReviewRow));
38
+ // Backend integration provides this optional normalized adapter service.
39
+ if (adapter !== undefined) {
40
+ registerTargetConsole({ slots: ctx.slots }, adapter, services);
41
+ registerPreSessionWorktree({ slots: ctx.slots }, adapter, services);
42
+ }
43
+ }
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /** Pure replay-stable ToolView models derived only from logged call/result slices. */
2
+ export interface ToolContentBlock {
3
+ type: string;
4
+ text?: string;
5
+ [key: string]: unknown;
6
+ }
7
+ export interface ToolCallBlockLike {
8
+ callId: string;
9
+ argsRaw?: string;
10
+ call?: {
11
+ argsRaw?: string;
12
+ };
13
+ content?: ToolContentBlock[];
14
+ kind?: string;
15
+ isError?: boolean;
16
+ error?: {
17
+ name?: string;
18
+ code?: string;
19
+ };
20
+ }
21
+ export interface ToolCallViewPropsLike {
22
+ callId: string;
23
+ /** Supplied by Harness for every session-scoped ToolView. */
24
+ sessionId?: string;
25
+ toolName: string;
26
+ block: ToolCallBlockLike;
27
+ cwd?: string;
28
+ openFile?: (path: string) => void;
29
+ inspect?: () => void;
30
+ }
31
+ export interface WorktreeCreatePayload {
32
+ kind: 'worktree_target_created';
33
+ checkoutId: string;
34
+ targetSessionId: string;
35
+ managedRoot: string;
36
+ phase: string;
37
+ currentOid: string;
38
+ sourceSessionId: string;
39
+ }
40
+ export interface WorktreeReviewPayload {
41
+ kind: 'worktree_ready_for_review';
42
+ state: 'ready_for_review';
43
+ reviewId: string;
44
+ revision: number;
45
+ iteration: number;
46
+ changedFiles: string[];
47
+ }
48
+ export interface ReviewArgs {
49
+ summary: string;
50
+ details?: string;
51
+ validationStatus: 'passed' | 'failed' | 'partial' | 'not_run';
52
+ validationSummary?: string;
53
+ tests: Array<{
54
+ command: string;
55
+ status: 'passed' | 'failed' | 'not_run';
56
+ summary?: string;
57
+ }>;
58
+ suggestedCommitMessage: string;
59
+ }
60
+ export type ToolLifecycle = 'running' | 'ok' | 'error' | 'stopped';
61
+ export interface ParsedTool<TPayload, TArgs = Record<string, never>> {
62
+ lifecycle: ToolLifecycle;
63
+ payload: TPayload | null;
64
+ args: TArgs | null;
65
+ error: string | null;
66
+ }
67
+ export declare function parseCreateTool(block: ToolCallBlockLike): ParsedTool<WorktreeCreatePayload>;
68
+ export declare function parseReviewTool(block: ToolCallBlockLike): ParsedTool<WorktreeReviewPayload, ReviewArgs>;
@@ -0,0 +1,127 @@
1
+ /** Pure replay-stable ToolView models derived only from logged call/result slices. */
2
+ function textContent(block) {
3
+ if (!block.kind)
4
+ return null;
5
+ const parts = (block.content ?? []).map((item) => item.type === 'text'
6
+ ? String(item.text ?? '')
7
+ : JSON.stringify(item));
8
+ if (parts.length === 0 && block.error)
9
+ parts.push(`${block.error.name ?? 'Error'}: ${block.error.code ?? 'unknown'}`);
10
+ return parts.join('\n') || null;
11
+ }
12
+ function parseJson(value) {
13
+ if (!value)
14
+ return null;
15
+ try {
16
+ return JSON.parse(value);
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ }
22
+ function lifecycle(block) {
23
+ if (!block.kind)
24
+ return 'running';
25
+ if (block.error?.code === 'interrupted')
26
+ return 'stopped';
27
+ return block.isError ? 'error' : 'ok';
28
+ }
29
+ function isRecord(value) {
30
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
31
+ }
32
+ function stringField(record, key) {
33
+ return typeof record[key] === 'string' && record[key] !== '' ? record[key] : null;
34
+ }
35
+ export function parseCreateTool(block) {
36
+ const state = lifecycle(block);
37
+ const raw = textContent(block);
38
+ const parsed = parseJson(raw ?? undefined);
39
+ if (state === 'running')
40
+ return { lifecycle: state, payload: null, args: null, error: null };
41
+ if (state !== 'ok')
42
+ return { lifecycle: state, payload: null, args: null, error: raw ?? 'Worktree creation failed.' };
43
+ if (!isRecord(parsed)
44
+ || parsed.kind !== 'worktree_target_created'
45
+ || !stringField(parsed, 'checkoutId')
46
+ || !stringField(parsed, 'targetSessionId')
47
+ || !stringField(parsed, 'managedRoot')
48
+ || !stringField(parsed, 'phase')
49
+ || !stringField(parsed, 'currentOid')
50
+ || !stringField(parsed, 'sourceSessionId')) {
51
+ return { lifecycle: 'error', payload: null, args: null, error: 'Malformed Worktree create result.' };
52
+ }
53
+ return { lifecycle: state, payload: parsed, args: null, error: null };
54
+ }
55
+ function reviewArgs(value) {
56
+ if (!isRecord(value))
57
+ return null;
58
+ const summary = stringField(value, 'summary');
59
+ const validationStatus = value.validationStatus;
60
+ const suggestedCommitMessage = stringField(value, 'suggestedCommitMessage');
61
+ if (!summary
62
+ || (validationStatus !== 'passed' && validationStatus !== 'failed' && validationStatus !== 'partial' && validationStatus !== 'not_run')
63
+ || !suggestedCommitMessage
64
+ || !Array.isArray(value.tests))
65
+ return null;
66
+ const tests = [];
67
+ for (const item of value.tests) {
68
+ if (!isRecord(item)
69
+ || !stringField(item, 'command')
70
+ || (item.status !== 'passed' && item.status !== 'failed' && item.status !== 'not_run')
71
+ || (item.summary !== undefined && typeof item.summary !== 'string'))
72
+ return null;
73
+ tests.push({
74
+ command: item.command,
75
+ status: item.status,
76
+ ...(typeof item.summary === 'string' && item.summary !== '' ? { summary: item.summary } : {}),
77
+ });
78
+ }
79
+ if ((value.details !== undefined && typeof value.details !== 'string')
80
+ || (value.validationSummary !== undefined && typeof value.validationSummary !== 'string'))
81
+ return null;
82
+ return {
83
+ summary,
84
+ validationStatus,
85
+ tests,
86
+ suggestedCommitMessage,
87
+ ...(typeof value.details === 'string' && value.details !== '' ? { details: value.details } : {}),
88
+ ...(typeof value.validationSummary === 'string' && value.validationSummary !== '' ? { validationSummary: value.validationSummary } : {}),
89
+ };
90
+ }
91
+ export function parseReviewTool(block) {
92
+ const state = lifecycle(block);
93
+ const raw = textContent(block);
94
+ const parsed = parseJson(raw ?? undefined);
95
+ const argsRaw = block.kind ? block.call?.argsRaw : block.argsRaw;
96
+ const parsedArgs = reviewArgs(parseJson(argsRaw));
97
+ if (state === 'running')
98
+ return { lifecycle: state, payload: null, args: parsedArgs, error: null };
99
+ if (state !== 'ok')
100
+ return { lifecycle: state, payload: null, args: parsedArgs, error: raw ?? 'Ready for Review failed.' };
101
+ if (!isRecord(parsed)
102
+ || parsed.kind !== 'worktree_ready_for_review'
103
+ || parsed.state !== 'ready_for_review'
104
+ || !stringField(parsed, 'reviewId')
105
+ || typeof parsed.revision !== 'number'
106
+ || !Array.isArray(parsed.changedFiles)
107
+ || parsed.changedFiles.some((item) => typeof item !== 'string')) {
108
+ return { lifecycle: 'error', payload: null, args: null, error: 'Malformed Ready for Review result.' };
109
+ }
110
+ if (!parsedArgs) {
111
+ return { lifecycle: 'error', payload: null, args: null, error: 'Malformed Ready for Review arguments.' };
112
+ }
113
+ return {
114
+ lifecycle: state,
115
+ payload: {
116
+ kind: 'worktree_ready_for_review',
117
+ state: 'ready_for_review',
118
+ reviewId: parsed.reviewId,
119
+ revision: parsed.revision,
120
+ iteration: typeof parsed.iteration === 'number' && Number.isInteger(parsed.iteration) && parsed.iteration >= 0 ? parsed.iteration : 0,
121
+ changedFiles: [...parsed.changedFiles],
122
+ },
123
+ args: parsedArgs,
124
+ error: null,
125
+ };
126
+ }
127
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/client/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { WorktreeConsoleAdapter, WorktreeConsoleTargetDetails } from '../../console-contract.js';
2
+ import type { PreSessionDraftActions, PreSessionDraftState, PreparePreSessionWorktreeRequest } from './controller.js';
3
+ export interface PreSessionWorktreeToggleProps {
4
+ sessionId: string;
5
+ session: {
6
+ composerPhase: string;
7
+ };
8
+ input: PreSessionDraftState;
9
+ inputActions: PreSessionDraftActions;
10
+ adapter: WorktreeConsoleAdapter;
11
+ controller: {
12
+ prepare(request: PreparePreSessionWorktreeRequest): Promise<WorktreeConsoleTargetDetails>;
13
+ };
14
+ }
15
+ /** Blank-session Worktree switch mounted in Harness's public composer tool row. */
16
+ export declare function PreSessionWorktreeToggle({ sessionId, session, input, inputActions, adapter, controller, }: PreSessionWorktreeToggleProps): import("react").JSX.Element | null;
@@ -0,0 +1,128 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef, useState } from 'react';
3
+ import { Modal } from '@deepseek-ai/dsh-client-ui-primitives';
4
+ function errorMessage(value) {
5
+ return value instanceof Error ? value.message : String(value);
6
+ }
7
+ function snapshotInput(input) {
8
+ return {
9
+ ...input,
10
+ imageIds: [...input.imageIds],
11
+ occurrences: [...input.occurrences],
12
+ };
13
+ }
14
+ function confirmationDescription(input) {
15
+ const attachmentText = input.imageIds.length === 1
16
+ ? '1 个附件'
17
+ : `${input.imageIds.length} 个附件`;
18
+ if (input.draft.trim() !== '' && input.imageIds.length > 0) {
19
+ return `当前输入内容和 ${attachmentText}将移动到新的 Worktree 会话。`;
20
+ }
21
+ if (input.imageIds.length > 0)
22
+ return `${attachmentText}将移动到新的 Worktree 会话。`;
23
+ if (input.draft.trim() !== '')
24
+ return '当前输入内容将移动到新的 Worktree 会话。';
25
+ return '将创建新的 Worktree 会话;当前 Local 会话不会收到消息。';
26
+ }
27
+ /** Blank-session Worktree switch mounted in Harness's public composer tool row. */
28
+ export function PreSessionWorktreeToggle({ sessionId, session, input, inputActions, adapter, controller, }) {
29
+ const [target, setTarget] = useState(null);
30
+ const [state, setState] = useState('loading');
31
+ const [error, setError] = useState(null);
32
+ const [pendingInput, setPendingInput] = useState(null);
33
+ const latestInput = useRef(input);
34
+ latestInput.current = input;
35
+ const blank = session.composerPhase === 'blank';
36
+ const refreshCurrent = useCallback(async () => {
37
+ setState('loading');
38
+ setError(null);
39
+ const outcome = await adapter.current({ sessionId });
40
+ if (!outcome.ok) {
41
+ setTarget(null);
42
+ setState('error');
43
+ setError(`${outcome.error.code}: ${outcome.error.message}`);
44
+ return;
45
+ }
46
+ setTarget(outcome.value.target);
47
+ setState('idle');
48
+ }, [adapter, sessionId]);
49
+ useEffect(() => {
50
+ if (!blank)
51
+ return;
52
+ let active = true;
53
+ void adapter.current({ sessionId }).then((outcome) => {
54
+ if (!active)
55
+ return;
56
+ if (!outcome.ok) {
57
+ setTarget(null);
58
+ setState('error');
59
+ setError(`${outcome.error.code}: ${outcome.error.message}`);
60
+ return;
61
+ }
62
+ setTarget(outcome.value.target);
63
+ setState('idle');
64
+ setError(null);
65
+ });
66
+ return () => { active = false; };
67
+ }, [adapter, blank, sessionId]);
68
+ if (!blank)
69
+ return null;
70
+ const selected = target?.state !== undefined && target.state !== 'local';
71
+ const canCreate = target?.state === 'local' && target.capabilities.create;
72
+ const busy = state === 'loading' || state === 'preparing';
73
+ const retryingLookup = state === 'error' && target === null;
74
+ const disabled = busy || selected || (!canCreate && !retryingLookup) || input.phase !== 'plain';
75
+ const checked = selected || pendingInput !== null || state === 'preparing';
76
+ const status = state === 'preparing'
77
+ ? '正在创建…'
78
+ : selected
79
+ ? '已创建'
80
+ : pendingInput !== null
81
+ ? '待确认'
82
+ : state === 'loading'
83
+ ? '检查中…'
84
+ : state === 'error'
85
+ ? '重试'
86
+ : 'Local';
87
+ const beginConfirmation = async () => {
88
+ if (disabled)
89
+ return;
90
+ if (retryingLookup) {
91
+ await refreshCurrent();
92
+ return;
93
+ }
94
+ setError(null);
95
+ setPendingInput(snapshotInput(input));
96
+ };
97
+ const cancelConfirmation = () => {
98
+ if (state === 'preparing')
99
+ return;
100
+ setPendingInput(null);
101
+ setError(null);
102
+ setState('idle');
103
+ };
104
+ const confirm = async () => {
105
+ const captured = pendingInput;
106
+ if (captured === null || state === 'preparing')
107
+ return;
108
+ setState('preparing');
109
+ setError(null);
110
+ try {
111
+ const prepared = await controller.prepare({
112
+ sessionId,
113
+ input: captured,
114
+ currentInput: () => latestInput.current,
115
+ inputActions,
116
+ });
117
+ setTarget(prepared);
118
+ setPendingInput(null);
119
+ setState('idle');
120
+ }
121
+ catch (cause) {
122
+ setState('error');
123
+ setError(errorMessage(cause));
124
+ }
125
+ };
126
+ return (_jsxs("span", { className: "dsh-wt-pre-session", "data-state": state, children: [_jsxs("button", { type: "button", role: "switch", "aria-label": "Worktree", "aria-checked": checked, "aria-describedby": error && pendingInput === null ? `dsh-wt-pre-session-error-${sessionId}` : undefined, className: "dsh-wt-pre-session-switch", disabled: disabled, onClick: () => { void beginConfirmation(); }, children: [_jsx("span", { className: "dsh-wt-pre-session-check", "aria-hidden": true, children: checked ? '✓' : '' }), _jsx("span", { children: "Worktree" }), _jsx("span", { className: "dsh-wt-pre-session-state", "aria-live": "polite", children: status })] }), error && pendingInput === null ? (_jsx("span", { id: `dsh-wt-pre-session-error-${sessionId}`, className: "dsh-wt-pre-session-error", role: "alert", children: error })) : null, _jsxs(Modal, { open: pendingInput !== null, onClose: cancelConfirmation, title: "\u5728 Worktree \u4E2D\u5F00\u59CB\uFF1F", closeLabel: "\u5173\u95ED", description: pendingInput === null ? '' : confirmationDescription(pendingInput), footer: (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "dsh-wt-button", disabled: state === 'preparing', onClick: cancelConfirmation, children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "dsh-wt-button dsh-wt-primary", disabled: state === 'preparing', onClick: () => { void confirm(); }, children: state === 'preparing' ? '正在创建…' : '创建并切换' })] })), children: [_jsx("p", { className: "dsh-wt-pre-session-note", children: "Local \u4F1A\u8BDD\u4E0D\u4F1A\u6536\u5230\u8FD9\u6761\u6D88\u606F\uFF1B\u5207\u6362\u540E\u8BF7\u5728\u65B0\u4F1A\u8BDD\u4E2D\u4F7F\u7528\u539F\u751F\u53D1\u9001\u6309\u94AE\u3002" }), error ? _jsx("p", { className: "dsh-wt-error", role: "alert", children: error }) : null] })] }));
127
+ }
128
+ //# sourceMappingURL=PreSessionWorktreeToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreSessionWorktreeToggle.js","sourceRoot":"","sources":["../../../src/client/pre-session/PreSessionWorktreeToggle.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { WorktreeConsoleAdapter, WorktreeConsoleTargetDetails } from '../../console-contract.js';
2
+ import type { PreSessionWorktreeServices } from '../actions.js';
3
+ export interface PreSessionDraftState {
4
+ readonly draft: string;
5
+ readonly imageIds: readonly string[];
6
+ readonly occurrences: readonly unknown[];
7
+ readonly phase: string;
8
+ /** Monotonic Harness input revision captured when the confirmation opened. */
9
+ readonly draftRev?: number;
10
+ }
11
+ export interface PreSessionDraftActions {
12
+ setDraft(text: string): void;
13
+ addImages(ids: readonly string[]): boolean;
14
+ removeImage(id: string): void;
15
+ }
16
+ export interface PreparePreSessionWorktreeRequest {
17
+ sessionId: string;
18
+ /** Immutable confirmation-time snapshot moved into the target. */
19
+ input: PreSessionDraftState;
20
+ /** Live source state used for the final compare-and-clear boundary. */
21
+ currentInput?: () => PreSessionDraftState;
22
+ inputActions: PreSessionDraftActions;
23
+ }
24
+ export declare class PreSessionWorktreeError extends Error {
25
+ readonly recoveryRequired: boolean;
26
+ constructor(message: string, recoveryRequired?: boolean);
27
+ }
28
+ /**
29
+ * Prepares an isolated blank Session before the normal Harness composer sends.
30
+ * The controller never sends a prompt; after it opens the target, the resident
31
+ * composer remains the sole submission path.
32
+ */
33
+ export declare class PreSessionWorktreeController {
34
+ private readonly adapter;
35
+ private readonly services;
36
+ private readonly inflight;
37
+ constructor(adapter: WorktreeConsoleAdapter, services: PreSessionWorktreeServices);
38
+ prepare(request: PreparePreSessionWorktreeRequest): Promise<WorktreeConsoleTargetDetails>;
39
+ private run;
40
+ private rollback;
41
+ }
42
+ export declare function createPreSessionWorktreeController(adapter: WorktreeConsoleAdapter, services: PreSessionWorktreeServices): PreSessionWorktreeController;