@wonderwhy-er/desktop-commander 0.2.38 → 0.2.40
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/README.md +53 -2
- package/dist/handlers/filesystem-handlers.d.ts +5 -0
- package/dist/handlers/filesystem-handlers.js +14 -2
- package/dist/remote-device/desktop-commander-integration.js +1 -1
- package/dist/search-manager.js +31 -38
- package/dist/server.js +9 -4
- package/dist/terminal-manager.js +4 -2
- package/dist/tools/edit.js +34 -1
- package/dist/tools/filesystem.js +91 -3
- package/dist/tools/improved-process-tools.js +2 -1
- package/dist/ui/config-editor/config-editor-runtime.js +65 -14096
- package/dist/ui/config-editor/styles.css +2 -1
- package/dist/ui/file-preview/preview-runtime.js +435 -26533
- package/dist/ui/file-preview/shared/preview-file-types.d.ts +1 -1
- package/dist/ui/file-preview/src/app.d.ts +1 -5
- package/dist/ui/file-preview/src/app.js +384 -534
- package/dist/ui/file-preview/src/components/markdown-renderer.js +47 -9
- package/dist/ui/file-preview/src/directory-controller.d.ts +8 -0
- package/dist/ui/file-preview/src/directory-controller.js +233 -0
- package/dist/ui/file-preview/src/document-layout.d.ts +20 -0
- package/dist/ui/file-preview/src/document-layout.js +109 -0
- package/dist/ui/file-preview/src/document-outline.d.ts +17 -0
- package/dist/ui/file-preview/src/document-outline.js +97 -0
- package/dist/ui/file-preview/src/document-workspace.d.ts +19 -0
- package/dist/ui/file-preview/src/document-workspace.js +33 -0
- package/dist/ui/file-preview/src/file-type-handlers.d.ts +10 -0
- package/dist/ui/file-preview/src/file-type-handlers.js +98 -0
- package/dist/ui/file-preview/src/host/external-actions.d.ts +19 -0
- package/dist/ui/file-preview/src/host/external-actions.js +94 -0
- package/dist/ui/file-preview/src/host/selection-context.d.ts +9 -0
- package/dist/ui/file-preview/src/host/selection-context.js +106 -0
- package/dist/ui/file-preview/src/markdown/conflict-dialog.d.ts +40 -0
- package/dist/ui/file-preview/src/markdown/conflict-dialog.js +163 -0
- package/dist/ui/file-preview/src/markdown/controller.d.ts +44 -0
- package/dist/ui/file-preview/src/markdown/controller.js +1040 -0
- package/dist/ui/file-preview/src/markdown/editor.d.ts +131 -0
- package/dist/ui/file-preview/src/markdown/editor.js +1479 -0
- package/dist/ui/file-preview/src/markdown/linking.d.ts +16 -0
- package/dist/ui/file-preview/src/markdown/linking.js +228 -0
- package/dist/ui/file-preview/src/markdown/outline.d.ts +2 -0
- package/dist/ui/file-preview/src/markdown/outline.js +16 -0
- package/dist/ui/file-preview/src/markdown/parser.d.ts +30 -0
- package/dist/ui/file-preview/src/markdown/parser.js +38 -0
- package/dist/ui/file-preview/src/markdown/preview.d.ts +1 -0
- package/dist/ui/file-preview/src/markdown/preview.js +20 -0
- package/dist/ui/file-preview/src/markdown/slugify.d.ts +3 -0
- package/dist/ui/file-preview/src/markdown/slugify.js +31 -0
- package/dist/ui/file-preview/src/markdown/utils.d.ts +1 -0
- package/dist/ui/file-preview/src/markdown/utils.js +15 -0
- package/dist/ui/file-preview/src/model.d.ts +35 -0
- package/dist/ui/file-preview/src/panel-actions.d.ts +17 -0
- package/dist/ui/file-preview/src/panel-actions.js +182 -0
- package/dist/ui/file-preview/src/path-utils.d.ts +6 -0
- package/dist/ui/file-preview/src/path-utils.js +64 -0
- package/dist/ui/file-preview/src/payload-utils.d.ts +11 -0
- package/dist/ui/file-preview/src/payload-utils.js +94 -0
- package/dist/ui/file-preview/styles.css +1066 -233
- package/dist/ui/shared/widget-state.d.ts +6 -1
- package/dist/ui/shared/widget-state.js +102 -4
- package/dist/utils/capture.js +1 -1
- package/dist/utils/files/base.d.ts +2 -0
- package/dist/utils/open-browser.js +1 -1
- package/dist/utils/toolHistory.d.ts +13 -0
- package/dist/utils/toolHistory.js +65 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +12 -1
- package/dist/data/spec-kit-prompts.json +0 -123
- package/dist/handlers/macos-control-handlers.d.ts +0 -16
- package/dist/handlers/macos-control-handlers.js +0 -81
- package/dist/handlers/node-handlers.d.ts +0 -6
- package/dist/handlers/node-handlers.js +0 -73
- package/dist/handlers/test-crash-handler.d.ts +0 -11
- package/dist/handlers/test-crash-handler.js +0 -26
- package/dist/http-index.d.ts +0 -45
- package/dist/http-index.js +0 -51
- package/dist/http-server-auto-tunnel.js +0 -667
- package/dist/http-server-named-tunnel.d.ts +0 -2
- package/dist/http-server-named-tunnel.js +0 -167
- package/dist/http-server-tunnel.d.ts +0 -2
- package/dist/http-server-tunnel.js +0 -111
- package/dist/http-server.d.ts +0 -2
- package/dist/http-server.js +0 -270
- package/dist/index-oauth.d.ts +0 -2
- package/dist/index-oauth.js +0 -201
- package/dist/lib.d.ts +0 -10
- package/dist/lib.js +0 -10
- package/dist/oauth/auth-middleware.d.ts +0 -20
- package/dist/oauth/auth-middleware.js +0 -62
- package/dist/oauth/index.d.ts +0 -3
- package/dist/oauth/index.js +0 -3
- package/dist/oauth/oauth-manager.d.ts +0 -80
- package/dist/oauth/oauth-manager.js +0 -179
- package/dist/oauth/oauth-routes.d.ts +0 -3
- package/dist/oauth/oauth-routes.js +0 -377
- package/dist/oauth/provider.d.ts +0 -22
- package/dist/oauth/provider.js +0 -124
- package/dist/oauth/server.d.ts +0 -18
- package/dist/oauth/server.js +0 -160
- package/dist/oauth/types.d.ts +0 -54
- package/dist/oauth/types.js +0 -2
- package/dist/remote-device/templates/auth-success.d.ts +0 -1
- package/dist/remote-device/templates/auth-success.js +0 -30
- package/dist/setup.log +0 -275
- package/dist/test-docx.d.ts +0 -1
- package/dist/test-setup.js +0 -14
- package/dist/tools/docx/builders/html-builder.d.ts +0 -17
- package/dist/tools/docx/builders/html-builder.js +0 -92
- package/dist/tools/docx/builders/image.d.ts +0 -14
- package/dist/tools/docx/builders/image.js +0 -84
- package/dist/tools/docx/builders/index.d.ts +0 -11
- package/dist/tools/docx/builders/index.js +0 -11
- package/dist/tools/docx/builders/markdown-builder.d.ts +0 -2
- package/dist/tools/docx/builders/markdown-builder.js +0 -260
- package/dist/tools/docx/builders/paragraph.d.ts +0 -12
- package/dist/tools/docx/builders/paragraph.js +0 -29
- package/dist/tools/docx/builders/table.d.ts +0 -10
- package/dist/tools/docx/builders/table.js +0 -138
- package/dist/tools/docx/builders/utils.d.ts +0 -5
- package/dist/tools/docx/builders/utils.js +0 -18
- package/dist/tools/docx/constants.d.ts +0 -32
- package/dist/tools/docx/constants.js +0 -61
- package/dist/tools/docx/converters/markdown-to-html.d.ts +0 -17
- package/dist/tools/docx/converters/markdown-to-html.js +0 -111
- package/dist/tools/docx/create.d.ts +0 -21
- package/dist/tools/docx/create.js +0 -386
- package/dist/tools/docx/dom.d.ts +0 -139
- package/dist/tools/docx/dom.js +0 -448
- package/dist/tools/docx/errors.d.ts +0 -28
- package/dist/tools/docx/errors.js +0 -48
- package/dist/tools/docx/extractors/images.d.ts +0 -14
- package/dist/tools/docx/extractors/images.js +0 -40
- package/dist/tools/docx/extractors/metadata.d.ts +0 -14
- package/dist/tools/docx/extractors/metadata.js +0 -64
- package/dist/tools/docx/extractors/sections.d.ts +0 -14
- package/dist/tools/docx/extractors/sections.js +0 -61
- package/dist/tools/docx/html.d.ts +0 -17
- package/dist/tools/docx/html.js +0 -111
- package/dist/tools/docx/index.d.ts +0 -10
- package/dist/tools/docx/index.js +0 -10
- package/dist/tools/docx/markdown.d.ts +0 -84
- package/dist/tools/docx/markdown.js +0 -507
- package/dist/tools/docx/modify.d.ts +0 -28
- package/dist/tools/docx/modify.js +0 -271
- package/dist/tools/docx/operations/handlers/index.d.ts +0 -39
- package/dist/tools/docx/operations/handlers/index.js +0 -152
- package/dist/tools/docx/operations/html-manipulator.d.ts +0 -24
- package/dist/tools/docx/operations/html-manipulator.js +0 -352
- package/dist/tools/docx/operations/index.d.ts +0 -14
- package/dist/tools/docx/operations/index.js +0 -61
- package/dist/tools/docx/operations/operation-handlers.d.ts +0 -3
- package/dist/tools/docx/operations/operation-handlers.js +0 -67
- package/dist/tools/docx/operations/preprocessor.d.ts +0 -14
- package/dist/tools/docx/operations/preprocessor.js +0 -44
- package/dist/tools/docx/operations/xml-replacer.d.ts +0 -9
- package/dist/tools/docx/operations/xml-replacer.js +0 -35
- package/dist/tools/docx/operations.d.ts +0 -13
- package/dist/tools/docx/operations.js +0 -13
- package/dist/tools/docx/ops/delete-paragraph-at-body-index.d.ts +0 -11
- package/dist/tools/docx/ops/delete-paragraph-at-body-index.js +0 -23
- package/dist/tools/docx/ops/header-replace-text-exact.d.ts +0 -13
- package/dist/tools/docx/ops/header-replace-text-exact.js +0 -55
- package/dist/tools/docx/ops/index.d.ts +0 -17
- package/dist/tools/docx/ops/index.js +0 -70
- package/dist/tools/docx/ops/insert-image-after-text.d.ts +0 -24
- package/dist/tools/docx/ops/insert-image-after-text.js +0 -128
- package/dist/tools/docx/ops/insert-paragraph-after-text.d.ts +0 -12
- package/dist/tools/docx/ops/insert-paragraph-after-text.js +0 -74
- package/dist/tools/docx/ops/insert-table-after-text.d.ts +0 -19
- package/dist/tools/docx/ops/insert-table-after-text.js +0 -57
- package/dist/tools/docx/ops/replace-hyperlink-url.d.ts +0 -12
- package/dist/tools/docx/ops/replace-hyperlink-url.js +0 -37
- package/dist/tools/docx/ops/replace-paragraph-at-body-index.d.ts +0 -9
- package/dist/tools/docx/ops/replace-paragraph-at-body-index.js +0 -25
- package/dist/tools/docx/ops/replace-paragraph-text-exact.d.ts +0 -21
- package/dist/tools/docx/ops/replace-paragraph-text-exact.js +0 -36
- package/dist/tools/docx/ops/replace-table-cell-text.d.ts +0 -25
- package/dist/tools/docx/ops/replace-table-cell-text.js +0 -85
- package/dist/tools/docx/ops/set-color-for-paragraph-exact.d.ts +0 -9
- package/dist/tools/docx/ops/set-color-for-paragraph-exact.js +0 -24
- package/dist/tools/docx/ops/set-color-for-style.d.ts +0 -13
- package/dist/tools/docx/ops/set-color-for-style.js +0 -31
- package/dist/tools/docx/ops/set-paragraph-style-at-body-index.d.ts +0 -8
- package/dist/tools/docx/ops/set-paragraph-style-at-body-index.js +0 -57
- package/dist/tools/docx/ops/table-set-cell-text.d.ts +0 -9
- package/dist/tools/docx/ops/table-set-cell-text.js +0 -40
- package/dist/tools/docx/parsers/image-extractor.d.ts +0 -18
- package/dist/tools/docx/parsers/image-extractor.js +0 -61
- package/dist/tools/docx/parsers/index.d.ts +0 -9
- package/dist/tools/docx/parsers/index.js +0 -9
- package/dist/tools/docx/parsers/paragraph-parser.d.ts +0 -2
- package/dist/tools/docx/parsers/paragraph-parser.js +0 -88
- package/dist/tools/docx/parsers/table-parser.d.ts +0 -9
- package/dist/tools/docx/parsers/table-parser.js +0 -72
- package/dist/tools/docx/parsers/xml-parser.d.ts +0 -25
- package/dist/tools/docx/parsers/xml-parser.js +0 -71
- package/dist/tools/docx/parsers/zip-reader.d.ts +0 -23
- package/dist/tools/docx/parsers/zip-reader.js +0 -52
- package/dist/tools/docx/read.d.ts +0 -27
- package/dist/tools/docx/read.js +0 -308
- package/dist/tools/docx/relationships.d.ts +0 -22
- package/dist/tools/docx/relationships.js +0 -76
- package/dist/tools/docx/structure.d.ts +0 -25
- package/dist/tools/docx/structure.js +0 -102
- package/dist/tools/docx/styled-html-parser.d.ts +0 -23
- package/dist/tools/docx/styled-html-parser.js +0 -1262
- package/dist/tools/docx/types.d.ts +0 -213
- package/dist/tools/docx/types.js +0 -5
- package/dist/tools/docx/utils/escaping.d.ts +0 -13
- package/dist/tools/docx/utils/escaping.js +0 -26
- package/dist/tools/docx/utils/images.d.ts +0 -9
- package/dist/tools/docx/utils/images.js +0 -26
- package/dist/tools/docx/utils/index.d.ts +0 -12
- package/dist/tools/docx/utils/index.js +0 -17
- package/dist/tools/docx/utils/markdown.d.ts +0 -13
- package/dist/tools/docx/utils/markdown.js +0 -32
- package/dist/tools/docx/utils/paths.d.ts +0 -15
- package/dist/tools/docx/utils/paths.js +0 -27
- package/dist/tools/docx/utils/versioning.d.ts +0 -25
- package/dist/tools/docx/utils/versioning.js +0 -55
- package/dist/tools/docx/utils.d.ts +0 -101
- package/dist/tools/docx/utils.js +0 -299
- package/dist/tools/docx/validate.d.ts +0 -33
- package/dist/tools/docx/validate.js +0 -49
- package/dist/tools/docx/validators.d.ts +0 -13
- package/dist/tools/docx/validators.js +0 -40
- package/dist/tools/docx/write.d.ts +0 -17
- package/dist/tools/docx/write.js +0 -88
- package/dist/tools/docx/xml-view-test.d.ts +0 -1
- package/dist/tools/docx/xml-view-test.js +0 -63
- package/dist/tools/docx/xml-view.d.ts +0 -56
- package/dist/tools/docx/xml-view.js +0 -169
- package/dist/tools/docx/zip.d.ts +0 -21
- package/dist/tools/docx/zip.js +0 -35
- package/dist/tools/macos-control/ax-adapter.d.ts +0 -55
- package/dist/tools/macos-control/ax-adapter.js +0 -438
- package/dist/tools/macos-control/cdp-adapter.d.ts +0 -23
- package/dist/tools/macos-control/cdp-adapter.js +0 -402
- package/dist/tools/macos-control/orchestrator.d.ts +0 -77
- package/dist/tools/macos-control/orchestrator.js +0 -136
- package/dist/tools/macos-control/role-aliases.d.ts +0 -5
- package/dist/tools/macos-control/role-aliases.js +0 -34
- package/dist/tools/macos-control/types.d.ts +0 -129
- package/dist/tools/macos-control/types.js +0 -1
- package/dist/tools/pdf-processor.d.ts +0 -1
- package/dist/tools/pdf-processor.js +0 -3
- package/dist/tools/search.d.ts +0 -32
- package/dist/tools/search.js +0 -202
- package/dist/ui/file-preview/src/components/toolbar.d.ts +0 -6
- package/dist/ui/file-preview/src/components/toolbar.js +0 -75
- package/dist/ui/shared/host-lifecycle.d.ts +0 -16
- package/dist/ui/shared/host-lifecycle.js +0 -35
- package/dist/ui/shared/rpc-client.d.ts +0 -14
- package/dist/ui/shared/rpc-client.js +0 -72
- package/dist/ui/shared/theme-adaptation.d.ts +0 -10
- package/dist/ui/shared/theme-adaptation.js +0 -118
- package/dist/ui/shared/tool-header.d.ts +0 -9
- package/dist/ui/shared/tool-header.js +0 -25
- package/dist/utils/crash-logger.d.ts +0 -18
- package/dist/utils/crash-logger.js +0 -44
- package/dist/utils/dedent.d.ts +0 -8
- package/dist/utils/dedent.js +0 -38
- /package/dist/{http-server-auto-tunnel.d.ts → ui/file-preview/src/model.js} +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export function isWindowsAbsolutePath(value) {
|
|
2
|
+
return /^[A-Za-z]:[\\/]/.test(value);
|
|
3
|
+
}
|
|
4
|
+
export function normalizePathSeparators(value) {
|
|
5
|
+
return value.replace(/\\/g, '/');
|
|
6
|
+
}
|
|
7
|
+
export function normalizeFilePath(value) {
|
|
8
|
+
const normalized = normalizePathSeparators(value);
|
|
9
|
+
return normalized.replace(/\/+/g, '/');
|
|
10
|
+
}
|
|
11
|
+
function getPathRoot(value) {
|
|
12
|
+
const normalized = normalizeFilePath(value);
|
|
13
|
+
if (isWindowsAbsolutePath(normalized)) {
|
|
14
|
+
return normalized.slice(0, 3);
|
|
15
|
+
}
|
|
16
|
+
return normalized.startsWith('/') ? '/' : '';
|
|
17
|
+
}
|
|
18
|
+
function getPathSegments(value) {
|
|
19
|
+
const normalized = normalizeFilePath(value);
|
|
20
|
+
const root = getPathRoot(normalized);
|
|
21
|
+
return normalized.slice(root.length).split('/').filter(Boolean);
|
|
22
|
+
}
|
|
23
|
+
export function getParentDirectory(filePath) {
|
|
24
|
+
const root = getPathRoot(filePath);
|
|
25
|
+
const segments = getPathSegments(filePath);
|
|
26
|
+
if (segments.length <= 1) {
|
|
27
|
+
return root || '.';
|
|
28
|
+
}
|
|
29
|
+
return `${root}${segments.slice(0, -1).join('/')}`;
|
|
30
|
+
}
|
|
31
|
+
export function getAncestorDirectories(filePath) {
|
|
32
|
+
const root = getPathRoot(filePath);
|
|
33
|
+
const segments = getPathSegments(filePath);
|
|
34
|
+
const ancestors = [];
|
|
35
|
+
for (let index = segments.length - 1; index >= 1; index -= 1) {
|
|
36
|
+
const ancestor = `${root}${segments.slice(0, index).join('/')}`;
|
|
37
|
+
ancestors.push(ancestor || '.');
|
|
38
|
+
}
|
|
39
|
+
if (root && ancestors[ancestors.length - 1] !== root) {
|
|
40
|
+
ancestors.push(root);
|
|
41
|
+
}
|
|
42
|
+
return ancestors;
|
|
43
|
+
}
|
|
44
|
+
export function toPosixRelativePath(fromDirectory, targetPath) {
|
|
45
|
+
const normalizedFrom = normalizeFilePath(fromDirectory);
|
|
46
|
+
const normalizedTarget = normalizeFilePath(targetPath);
|
|
47
|
+
const fromRoot = getPathRoot(normalizedFrom);
|
|
48
|
+
const targetRoot = getPathRoot(normalizedTarget);
|
|
49
|
+
if (fromRoot !== targetRoot) {
|
|
50
|
+
return normalizedTarget;
|
|
51
|
+
}
|
|
52
|
+
const fromParts = getPathSegments(normalizedFrom);
|
|
53
|
+
const targetParts = getPathSegments(normalizedTarget);
|
|
54
|
+
let shared = 0;
|
|
55
|
+
while (shared < fromParts.length
|
|
56
|
+
&& shared < targetParts.length
|
|
57
|
+
&& fromParts[shared] === targetParts[shared]) {
|
|
58
|
+
shared += 1;
|
|
59
|
+
}
|
|
60
|
+
const up = new Array(Math.max(fromParts.length - shared, 0)).fill('..');
|
|
61
|
+
const down = targetParts.slice(shared);
|
|
62
|
+
const joined = [...up, ...down].join('/');
|
|
63
|
+
return joined.length > 0 ? joined : '.';
|
|
64
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FilePreviewStructuredContent } from '../../../types.js';
|
|
2
|
+
import type { RenderPayload } from './model.js';
|
|
3
|
+
export declare function getFileExtensionForAnalytics(filePath: string): string;
|
|
4
|
+
export declare function isPreviewStructuredContent(value: unknown): value is FilePreviewStructuredContent;
|
|
5
|
+
export declare function buildRenderPayload(meta: FilePreviewStructuredContent, text: string): RenderPayload;
|
|
6
|
+
export declare function extractToolText(value: unknown): string | undefined;
|
|
7
|
+
export declare function extractRenderPayload(value: unknown): RenderPayload | undefined;
|
|
8
|
+
export declare function assertSuccessfulEditBlockResult(result: unknown): void;
|
|
9
|
+
export declare function isLikelyUrl(filePath: string): boolean;
|
|
10
|
+
export declare function buildBreadcrumb(filePath: string): string;
|
|
11
|
+
export declare function countContentLines(content: string): number;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { escapeHtml } from './components/highlighting.js';
|
|
2
|
+
import { stripReadStatusLine } from './document-workspace.js';
|
|
3
|
+
function isObjectRecord(value) {
|
|
4
|
+
return typeof value === 'object' && value !== null;
|
|
5
|
+
}
|
|
6
|
+
export function getFileExtensionForAnalytics(filePath) {
|
|
7
|
+
const normalizedPath = filePath.trim().replace(/\\/g, '/');
|
|
8
|
+
const fileName = normalizedPath.split('/').pop() ?? normalizedPath;
|
|
9
|
+
const dotIndex = fileName.lastIndexOf('.');
|
|
10
|
+
if (dotIndex <= 0 || dotIndex === fileName.length - 1) {
|
|
11
|
+
return 'none';
|
|
12
|
+
}
|
|
13
|
+
return fileName.slice(dotIndex + 1).toLowerCase();
|
|
14
|
+
}
|
|
15
|
+
export function isPreviewStructuredContent(value) {
|
|
16
|
+
if (!isObjectRecord(value)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return (typeof value.fileName === 'string' &&
|
|
20
|
+
typeof value.filePath === 'string' &&
|
|
21
|
+
typeof value.fileType === 'string');
|
|
22
|
+
}
|
|
23
|
+
export function buildRenderPayload(meta, text) {
|
|
24
|
+
return { ...meta, content: text };
|
|
25
|
+
}
|
|
26
|
+
export function extractToolText(value) {
|
|
27
|
+
if (!isObjectRecord(value)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
const content = value.content;
|
|
31
|
+
if (!Array.isArray(content)) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
for (const item of content) {
|
|
35
|
+
if (!isObjectRecord(item)) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (item.type === 'text' && typeof item.text === 'string' && item.text.trim().length > 0) {
|
|
39
|
+
return item.text;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
export function extractRenderPayload(value) {
|
|
45
|
+
if (!isObjectRecord(value)) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const meta = isPreviewStructuredContent(value.structuredContent)
|
|
49
|
+
? value.structuredContent
|
|
50
|
+
: isPreviewStructuredContent(value)
|
|
51
|
+
? value
|
|
52
|
+
: null;
|
|
53
|
+
if (!meta)
|
|
54
|
+
return undefined;
|
|
55
|
+
const text = extractToolText(value) ?? extractToolText(value.structuredContent) ?? '';
|
|
56
|
+
return buildRenderPayload(meta, text);
|
|
57
|
+
}
|
|
58
|
+
export function assertSuccessfulEditBlockResult(result) {
|
|
59
|
+
if (!isObjectRecord(result)) {
|
|
60
|
+
throw new Error('edit_block did not return a valid result.');
|
|
61
|
+
}
|
|
62
|
+
if (result.isError === true) {
|
|
63
|
+
const message = extractToolText(result) ?? '';
|
|
64
|
+
throw new Error(message || 'edit_block failed.');
|
|
65
|
+
}
|
|
66
|
+
// edit_block uses soft-failure returns (no isError flag) for cases the LLM
|
|
67
|
+
// is meant to recover from — "Search content not found", "Expected N
|
|
68
|
+
// occurrences but found M", fuzzy-match-too-close-to-ignore, etc. These
|
|
69
|
+
// look like success to a naive client. A real success always carries
|
|
70
|
+
// structuredContent (see src/tools/edit.ts — the write path attaches
|
|
71
|
+
// fileName/filePath/fileType); absence means the edit did not land.
|
|
72
|
+
// Throwing here routes soft failures through saveDocument's catch, which
|
|
73
|
+
// reloads disk, preserves the user's draft, and surfaces the server's
|
|
74
|
+
// message to the user.
|
|
75
|
+
if (!isObjectRecord(result.structuredContent)) {
|
|
76
|
+
const message = extractToolText(result) ?? '';
|
|
77
|
+
throw new Error(message || 'edit_block did not confirm success.');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export function isLikelyUrl(filePath) {
|
|
81
|
+
return /^https?:\/\//i.test(filePath);
|
|
82
|
+
}
|
|
83
|
+
export function buildBreadcrumb(filePath) {
|
|
84
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
85
|
+
const parts = normalized.split('/').filter(Boolean);
|
|
86
|
+
return parts.map((part) => escapeHtml(part)).join(' <span class="breadcrumb-sep">›</span> ');
|
|
87
|
+
}
|
|
88
|
+
export function countContentLines(content) {
|
|
89
|
+
const cleaned = stripReadStatusLine(content);
|
|
90
|
+
if (cleaned === '')
|
|
91
|
+
return 0;
|
|
92
|
+
const lines = cleaned.split('\n');
|
|
93
|
+
return lines[lines.length - 1] === '' ? lines.length - 1 : lines.length;
|
|
94
|
+
}
|