@usejunior/docx-mcp 0.9.1 → 0.11.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.
- package/LICENSE +202 -21
- package/NOTICE +2 -0
- package/README.md +47 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/cli/commands/edit.d.ts.map +1 -1
- package/dist/cli/commands/edit.js +2 -1
- package/dist/cli/commands/edit.js.map +1 -1
- package/dist/cli/commands/grep.d.ts.map +1 -1
- package/dist/cli/commands/grep.js +2 -1
- package/dist/cli/commands/grep.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +1 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/tool_runner.d.ts +6 -0
- package/dist/cli/tool_runner.d.ts.map +1 -1
- package/dist/cli/tool_runner.js +10 -1
- package/dist/cli/tool_runner.js.map +1 -1
- package/dist/odf_loader.d.ts +2 -0
- package/dist/odf_loader.d.ts.map +1 -0
- package/dist/odf_loader.js +20 -0
- package/dist/odf_loader.js.map +1 -0
- package/dist/server.d.ts +8 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +113 -4
- package/dist/server.js.map +1 -1
- package/dist/session/manager.d.ts +48 -2
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +175 -7
- package/dist/session/manager.js.map +1 -1
- package/dist/tool_catalog.d.ts +56 -12
- package/dist/tool_catalog.d.ts.map +1 -1
- package/dist/tool_catalog.js +69 -17
- package/dist/tool_catalog.js.map +1 -1
- package/dist/tools/accept_changes.js +1 -1
- package/dist/tools/accept_changes.js.map +1 -1
- package/dist/tools/add_comment.d.ts.map +1 -1
- package/dist/tools/add_comment.js +21 -5
- package/dist/tools/add_comment.js.map +1 -1
- package/dist/tools/add_footnote.d.ts.map +1 -1
- package/dist/tools/add_footnote.js +15 -3
- package/dist/tools/add_footnote.js.map +1 -1
- package/dist/tools/ai_revision_guard.d.ts +38 -0
- package/dist/tools/ai_revision_guard.d.ts.map +1 -0
- package/dist/tools/ai_revision_guard.js +115 -0
- package/dist/tools/ai_revision_guard.js.map +1 -0
- package/dist/tools/apply_plan.d.ts.map +1 -1
- package/dist/tools/apply_plan.js +55 -5
- package/dist/tools/apply_plan.js.map +1 -1
- package/dist/tools/clear_formatting.d.ts +2 -1
- package/dist/tools/clear_formatting.d.ts.map +1 -1
- package/dist/tools/clear_formatting.js +84 -61
- package/dist/tools/clear_formatting.js.map +1 -1
- package/dist/tools/compare_documents.d.ts.map +1 -1
- package/dist/tools/compare_documents.js +11 -2
- package/dist/tools/compare_documents.js.map +1 -1
- package/dist/tools/convert_to_odt.d.ts +20 -0
- package/dist/tools/convert_to_odt.d.ts.map +1 -0
- package/dist/tools/convert_to_odt.js +74 -0
- package/dist/tools/convert_to_odt.js.map +1 -0
- package/dist/tools/delete_comment.d.ts.map +1 -1
- package/dist/tools/delete_comment.js +12 -1
- package/dist/tools/delete_comment.js.map +1 -1
- package/dist/tools/delete_footnote.d.ts.map +1 -1
- package/dist/tools/delete_footnote.js +12 -1
- package/dist/tools/delete_footnote.js.map +1 -1
- package/dist/tools/export.d.ts +20 -0
- package/dist/tools/export.d.ts.map +1 -0
- package/dist/tools/export.js +96 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/format_layout.d.ts.map +1 -1
- package/dist/tools/format_layout.js +21 -3
- package/dist/tools/format_layout.js.map +1 -1
- package/dist/tools/get_comments.d.ts.map +1 -1
- package/dist/tools/get_comments.js +9 -0
- package/dist/tools/get_comments.js.map +1 -1
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +4 -115
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/grep_core.d.ts +49 -0
- package/dist/tools/grep_core.d.ts.map +1 -0
- package/dist/tools/grep_core.js +126 -0
- package/dist/tools/grep_core.js.map +1 -0
- package/dist/tools/insert_paragraph.d.ts +7 -1
- package/dist/tools/insert_paragraph.d.ts.map +1 -1
- package/dist/tools/insert_paragraph.js +39 -27
- package/dist/tools/insert_paragraph.js.map +1 -1
- package/dist/tools/odf/add_comment.d.ts +21 -0
- package/dist/tools/odf/add_comment.d.ts.map +1 -0
- package/dist/tools/odf/add_comment.js +64 -0
- package/dist/tools/odf/add_comment.js.map +1 -0
- package/dist/tools/odf/close_file.d.ts +4 -0
- package/dist/tools/odf/close_file.d.ts.map +1 -0
- package/dist/tools/odf/close_file.js +16 -0
- package/dist/tools/odf/close_file.js.map +1 -0
- package/dist/tools/odf/compare_documents.d.ts +39 -0
- package/dist/tools/odf/compare_documents.d.ts.map +1 -0
- package/dist/tools/odf/compare_documents.js +156 -0
- package/dist/tools/odf/compare_documents.js.map +1 -0
- package/dist/tools/odf/get_comments.d.ts +11 -0
- package/dist/tools/odf/get_comments.d.ts.map +1 -0
- package/dist/tools/odf/get_comments.js +32 -0
- package/dist/tools/odf/get_comments.js.map +1 -0
- package/dist/tools/odf/get_file_status.d.ts +4 -0
- package/dist/tools/odf/get_file_status.d.ts.map +1 -0
- package/dist/tools/odf/get_file_status.js +28 -0
- package/dist/tools/odf/get_file_status.js.map +1 -0
- package/dist/tools/odf/grep.d.ts +19 -0
- package/dist/tools/odf/grep.d.ts.map +1 -0
- package/dist/tools/odf/grep.js +81 -0
- package/dist/tools/odf/grep.js.map +1 -0
- package/dist/tools/odf/insert_paragraph.d.ts +19 -0
- package/dist/tools/odf/insert_paragraph.d.ts.map +1 -0
- package/dist/tools/odf/insert_paragraph.js +50 -0
- package/dist/tools/odf/insert_paragraph.js.map +1 -0
- package/dist/tools/odf/read_file.d.ts +9 -0
- package/dist/tools/odf/read_file.d.ts.map +1 -0
- package/dist/tools/odf/read_file.js +124 -0
- package/dist/tools/odf/read_file.js.map +1 -0
- package/dist/tools/odf/replace_text.d.ts +9 -0
- package/dist/tools/odf/replace_text.d.ts.map +1 -0
- package/dist/tools/odf/replace_text.js +41 -0
- package/dist/tools/odf/replace_text.js.map +1 -0
- package/dist/tools/odf/save.d.ts +7 -0
- package/dist/tools/odf/save.d.ts.map +1 -0
- package/dist/tools/odf/save.js +48 -0
- package/dist/tools/odf/save.js.map +1 -0
- package/dist/tools/open_document.d.ts.map +1 -1
- package/dist/tools/open_document.js +36 -4
- package/dist/tools/open_document.js.map +1 -1
- package/dist/tools/path_policy.d.ts +9 -0
- package/dist/tools/path_policy.d.ts.map +1 -1
- package/dist/tools/path_policy.js +66 -5
- package/dist/tools/path_policy.js.map +1 -1
- package/dist/tools/provider_guard.d.ts +1 -0
- package/dist/tools/provider_guard.d.ts.map +1 -1
- package/dist/tools/provider_guard.js +10 -0
- package/dist/tools/provider_guard.js.map +1 -1
- package/dist/tools/read_file.d.ts +3 -0
- package/dist/tools/read_file.d.ts.map +1 -1
- package/dist/tools/read_file.js +384 -52
- package/dist/tools/read_file.js.map +1 -1
- package/dist/tools/replace_text.d.ts +7 -1
- package/dist/tools/replace_text.d.ts.map +1 -1
- package/dist/tools/replace_text.js +74 -48
- package/dist/tools/replace_text.js.map +1 -1
- package/dist/tools/save.d.ts +19 -0
- package/dist/tools/save.d.ts.map +1 -1
- package/dist/tools/save.js +161 -13
- package/dist/tools/save.js.map +1 -1
- package/dist/tools/session_resolution.d.ts +25 -1
- package/dist/tools/session_resolution.d.ts.map +1 -1
- package/dist/tools/session_resolution.js +179 -2
- package/dist/tools/session_resolution.js.map +1 -1
- package/dist/tools/tag_parser.d.ts.map +1 -1
- package/dist/tools/tag_parser.js +69 -14
- package/dist/tools/tag_parser.js.map +1 -1
- package/dist/tools/update_footnote.d.ts.map +1 -1
- package/dist/tools/update_footnote.js +20 -7
- package/dist/tools/update_footnote.js.map +1 -1
- package/package.json +21 -16
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare_documents.js","sourceRoot":"","sources":["../../../src/tools/odf/compare_documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type OdfSession, SessionManager } from '../../session/manager.js';
|
|
2
|
+
import { type ToolResponse } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* ODF (.odt) `get_comments`. Walks `content.xml` for `office:annotation` elements and returns them
|
|
5
|
+
* in document order in the same shape as the DOCX tool. ODF has no reply graph, so `replies` is
|
|
6
|
+
* always empty.
|
|
7
|
+
*/
|
|
8
|
+
export declare function odfGetComments(_manager: SessionManager, session: OdfSession, _params: {
|
|
9
|
+
file_path?: string;
|
|
10
|
+
}, metadata: Record<string, unknown>): Promise<ToolResponse>;
|
|
11
|
+
//# sourceMappingURL=get_comments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_comments.d.ts","sourceRoot":"","sources":["../../../src/tools/odf/get_comments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAYzD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,CA6BvB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { errorMessage } from '../../error_utils.js';
|
|
2
|
+
import { err, ok } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* ODF (.odt) `get_comments`. Walks `content.xml` for `office:annotation` elements and returns them
|
|
5
|
+
* in document order in the same shape as the DOCX tool. ODF has no reply graph, so `replies` is
|
|
6
|
+
* always empty.
|
|
7
|
+
*/
|
|
8
|
+
export async function odfGetComments(_manager, session, _params, metadata) {
|
|
9
|
+
try {
|
|
10
|
+
const comments = session.doc.getComments();
|
|
11
|
+
const mapped = comments.map((c) => ({
|
|
12
|
+
id: c.id,
|
|
13
|
+
author: c.author,
|
|
14
|
+
date: c.date || null,
|
|
15
|
+
initials: c.initials,
|
|
16
|
+
text: c.text,
|
|
17
|
+
anchored_paragraph_id: c.anchoredParagraphId,
|
|
18
|
+
replies: [],
|
|
19
|
+
}));
|
|
20
|
+
return ok({
|
|
21
|
+
success: true,
|
|
22
|
+
comments: mapped,
|
|
23
|
+
provider: 'odf',
|
|
24
|
+
file_path: session.originalPath,
|
|
25
|
+
...metadata,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
return err('COMMENT_ERROR', `Failed to read comments from ODF document: ${errorMessage(e)}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=get_comments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_comments.js","sourceRoot":"","sources":["../../../src/tools/odf/get_comments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAqB,MAAM,aAAa,CAAC;AAYzD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAwB,EACxB,OAAmB,EACnB,OAA+B,EAC/B,QAAiC;IAEjC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,EAOtC,CAAC;QACH,MAAM,MAAM,GAAiB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,qBAAqB,EAAE,CAAC,CAAC,mBAAmB;YAC5C,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,CAAC;YACR,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,OAAO,CAAC,YAAY;YAC/B,GAAG,QAAQ;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,eAAe,EAAE,8CAA8C,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type OdfSession, SessionManager } from '../../session/manager.js';
|
|
2
|
+
import { type ToolResponse } from '../types.js';
|
|
3
|
+
export declare function odfGetFileStatus(_manager: SessionManager, session: OdfSession, _params: Record<string, unknown>, metadata: Record<string, unknown>): Promise<ToolResponse>;
|
|
4
|
+
//# sourceMappingURL=get_file_status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_file_status.d.ts","sourceRoot":"","sources":["../../../src/tools/odf/get_file_status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzD,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,CAwBvB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { err, ok } from '../types.js';
|
|
2
|
+
export async function odfGetFileStatus(_manager, session, _params, metadata) {
|
|
3
|
+
try {
|
|
4
|
+
return ok({
|
|
5
|
+
file_path: session.originalPath,
|
|
6
|
+
provider: 'odf',
|
|
7
|
+
created_at: session.createdAt.toISOString(),
|
|
8
|
+
expires_at: session.expiresAt.toISOString(),
|
|
9
|
+
last_activity: session.lastAccessedAt.toISOString(),
|
|
10
|
+
edit_count: session.editCount,
|
|
11
|
+
edit_revision: session.editRevision,
|
|
12
|
+
document: {
|
|
13
|
+
filename: session.filename,
|
|
14
|
+
paragraphs: session.doc.getParagraphs().length,
|
|
15
|
+
},
|
|
16
|
+
save_defaults: {
|
|
17
|
+
default_save_format: 'odt',
|
|
18
|
+
returned_variants: ['odt'],
|
|
19
|
+
supports_variant_override: false,
|
|
20
|
+
},
|
|
21
|
+
...metadata,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
return err('STATUS_ERROR', e instanceof Error ? e.message : String(e));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=get_file_status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_file_status.js","sourceRoot":"","sources":["../../../src/tools/odf/get_file_status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAqB,MAAM,aAAa,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAwB,EACxB,OAAmB,EACnB,OAAgC,EAChC,QAAiC;IAEjC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC;YACR,SAAS,EAAE,OAAO,CAAC,YAAY;YAC/B,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;YAC3C,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;YAC3C,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE;YACnD,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,aAAa,EAAE,OAAO,CAAC,YAAY;YACnC,QAAQ,EAAE;gBACR,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,MAAM;aAC/C;YACD,aAAa,EAAE;gBACb,mBAAmB,EAAE,KAAK;gBAC1B,iBAAiB,EAAE,CAAC,KAAK,CAAC;gBAC1B,yBAAyB,EAAE,KAAK;aACjC;YACD,GAAG,QAAQ;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type OdfSession, SessionManager } from '../../session/manager.js';
|
|
2
|
+
import { type ToolResponse } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* ODF (.odt) `grep`. Session-mode only — the dispatcher resolves the ODF session by
|
|
5
|
+
* `.odt` `file_path` before calling here (multi-file `file_paths` stays on the DOCX
|
|
6
|
+
* lane). ODF paragraphs carry no list-label / header context, so those fields are
|
|
7
|
+
* empty. Output shape mirrors the DOCX grep session response.
|
|
8
|
+
*/
|
|
9
|
+
export declare function odfGrep(manager: SessionManager, session: OdfSession, params: {
|
|
10
|
+
patterns?: string[];
|
|
11
|
+
pattern?: string;
|
|
12
|
+
case_sensitive?: boolean;
|
|
13
|
+
whole_word?: boolean;
|
|
14
|
+
max_results?: number;
|
|
15
|
+
context_chars?: number;
|
|
16
|
+
dedupe_by_paragraph?: boolean;
|
|
17
|
+
search_xml?: boolean;
|
|
18
|
+
}, metadata: Record<string, unknown>): Promise<ToolResponse>;
|
|
19
|
+
//# sourceMappingURL=grep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../../src/tools/odf/grep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAGzD;;;;;GAKG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE;IACN,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,EACD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,CAkFvB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { errorMessage } from '../../error_utils.js';
|
|
2
|
+
import { err, ok } from '../types.js';
|
|
3
|
+
import { searchParagraphsCore, searchRawXmlCore } from '../grep_core.js';
|
|
4
|
+
/**
|
|
5
|
+
* ODF (.odt) `grep`. Session-mode only — the dispatcher resolves the ODF session by
|
|
6
|
+
* `.odt` `file_path` before calling here (multi-file `file_paths` stays on the DOCX
|
|
7
|
+
* lane). ODF paragraphs carry no list-label / header context, so those fields are
|
|
8
|
+
* empty. Output shape mirrors the DOCX grep session response.
|
|
9
|
+
*/
|
|
10
|
+
export async function odfGrep(manager, session, params, metadata) {
|
|
11
|
+
try {
|
|
12
|
+
let patterns = params.patterns ?? [];
|
|
13
|
+
if (patterns.length === 0 && typeof params.pattern === 'string') {
|
|
14
|
+
patterns = [params.pattern];
|
|
15
|
+
}
|
|
16
|
+
if (patterns.length === 0) {
|
|
17
|
+
return err('MISSING_PATTERN', 'No search patterns provided.', 'Pass patterns: ["your search term"] (array of regex strings).');
|
|
18
|
+
}
|
|
19
|
+
const caseSensitive = params.case_sensitive ?? false;
|
|
20
|
+
const wholeWord = params.whole_word ?? false;
|
|
21
|
+
const maxResults = params.max_results ?? 100;
|
|
22
|
+
const contextChars = params.context_chars ?? 50;
|
|
23
|
+
const dedupeByParagraph = params.dedupe_by_paragraph ?? true;
|
|
24
|
+
const searchXml = params.search_xml ?? false;
|
|
25
|
+
const patternStr = wholeWord ? `\\b(${patterns.join('|')})\\b` : `(${patterns.join('|')})`;
|
|
26
|
+
let re;
|
|
27
|
+
try {
|
|
28
|
+
re = new RegExp(patternStr, caseSensitive ? 'g' : 'gi');
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
return ok({
|
|
32
|
+
file_path: session.originalPath,
|
|
33
|
+
provider: 'odf',
|
|
34
|
+
patterns,
|
|
35
|
+
total_matches: 0,
|
|
36
|
+
matches: [],
|
|
37
|
+
error: `Invalid regex pattern: ${errorMessage(e)}`,
|
|
38
|
+
...metadata,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (searchXml) {
|
|
42
|
+
const xmlResult = searchRawXmlCore(session.doc.toXml(), re, { maxResults, contextChars });
|
|
43
|
+
return ok({
|
|
44
|
+
file_path: session.originalPath,
|
|
45
|
+
provider: 'odf',
|
|
46
|
+
patterns,
|
|
47
|
+
search_xml: true,
|
|
48
|
+
total_matches: xmlResult.totalMatches,
|
|
49
|
+
matches: xmlResult.matches,
|
|
50
|
+
matches_returned: xmlResult.matches.length,
|
|
51
|
+
matches_truncated: xmlResult.matchesTruncated,
|
|
52
|
+
...metadata,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
const paragraphs = session.doc.getParagraphs();
|
|
56
|
+
const result = searchParagraphsCore(paragraphs, re, { maxResults, contextChars, dedupeByParagraph }, null);
|
|
57
|
+
const response = {
|
|
58
|
+
file_path: session.originalPath,
|
|
59
|
+
provider: 'odf',
|
|
60
|
+
patterns,
|
|
61
|
+
dedupe_by_paragraph: dedupeByParagraph,
|
|
62
|
+
total_matches: result.totalMatches,
|
|
63
|
+
paragraphs_with_matches: result.paragraphsWithMatches,
|
|
64
|
+
matches: result.matches,
|
|
65
|
+
matches_returned: result.matches.length,
|
|
66
|
+
max_results_applied: maxResults,
|
|
67
|
+
matches_truncated: result.matchesTruncated,
|
|
68
|
+
...metadata,
|
|
69
|
+
};
|
|
70
|
+
if (result.matchesTruncated) {
|
|
71
|
+
response.truncation_note = dedupeByParagraph
|
|
72
|
+
? 'max_results limits returned rows to matching paragraphs while total_matches counts all regex hits. Increase max_results or set dedupe_by_paragraph=false for per-match rows.'
|
|
73
|
+
: 'max_results limits returned rows to individual matches while total_matches counts all regex hits. Increase max_results to see more matches.';
|
|
74
|
+
}
|
|
75
|
+
return ok(response);
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
return err('SEARCH_ERROR', `Failed to search ODF document: ${errorMessage(e)}`, 'Check patterns are valid regex and try again.');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=grep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../src/tools/odf/grep.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type OdfSession, SessionManager } from '../../session/manager.js';
|
|
2
|
+
import { type ToolResponse } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* ODF (.odt) `insert_paragraph`. Inserts plain-text paragraph(s) BEFORE/AFTER an anchor.
|
|
5
|
+
* `new_string` is split on blank lines into separate paragraphs; single newlines become
|
|
6
|
+
* line breaks (parity with the DOCX tool). DOCX run-formatting tags are not yet supported
|
|
7
|
+
* for ODF and are stripped.
|
|
8
|
+
*
|
|
9
|
+
* IMPORTANT: ODF paragraph IDs are positional ordinals, so inserting shifts every ID at or
|
|
10
|
+
* after the insertion point. The response carries machine-actionable invalidation fields so
|
|
11
|
+
* the agent re-reads before its next edit.
|
|
12
|
+
*/
|
|
13
|
+
export declare function odfInsertParagraph(manager: SessionManager, session: OdfSession, params: {
|
|
14
|
+
positional_anchor_node_id: string;
|
|
15
|
+
new_string: string;
|
|
16
|
+
instruction: string;
|
|
17
|
+
position?: string;
|
|
18
|
+
}, metadata: Record<string, unknown>): Promise<ToolResponse>;
|
|
19
|
+
//# sourceMappingURL=insert_paragraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert_paragraph.d.ts","sourceRoot":"","sources":["../../../src/tools/odf/insert_paragraph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG3E,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzD;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE;IAAE,yBAAyB,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EACzG,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,CAqCvB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { stripAllInlineTags } from '@usejunior/docx-core';
|
|
2
|
+
import { errorMessage } from '../../error_utils.js';
|
|
3
|
+
import { RESULT_PREVIEW_CHARS, previewText } from '../preview.js';
|
|
4
|
+
import { err, ok } from '../types.js';
|
|
5
|
+
/**
|
|
6
|
+
* ODF (.odt) `insert_paragraph`. Inserts plain-text paragraph(s) BEFORE/AFTER an anchor.
|
|
7
|
+
* `new_string` is split on blank lines into separate paragraphs; single newlines become
|
|
8
|
+
* line breaks (parity with the DOCX tool). DOCX run-formatting tags are not yet supported
|
|
9
|
+
* for ODF and are stripped.
|
|
10
|
+
*
|
|
11
|
+
* IMPORTANT: ODF paragraph IDs are positional ordinals, so inserting shifts every ID at or
|
|
12
|
+
* after the insertion point. The response carries machine-actionable invalidation fields so
|
|
13
|
+
* the agent re-reads before its next edit.
|
|
14
|
+
*/
|
|
15
|
+
export async function odfInsertParagraph(manager, session, params, metadata) {
|
|
16
|
+
try {
|
|
17
|
+
const anchorId = params.positional_anchor_node_id;
|
|
18
|
+
const positionUpper = (params.position ?? 'AFTER').toUpperCase();
|
|
19
|
+
if (positionUpper !== 'BEFORE' && positionUpper !== 'AFTER') {
|
|
20
|
+
return err('INVALID_POSITION', `Invalid position: ${params.position}. Must be 'BEFORE' or 'AFTER'.`);
|
|
21
|
+
}
|
|
22
|
+
const text = stripAllInlineTags(params.new_string ?? '');
|
|
23
|
+
const result = session.doc.insertParagraph(anchorId, text, positionUpper);
|
|
24
|
+
if (!result.ok) {
|
|
25
|
+
return err(result.code, result.message);
|
|
26
|
+
}
|
|
27
|
+
manager.markEdited(session);
|
|
28
|
+
const newIds = result.newIds;
|
|
29
|
+
return ok({
|
|
30
|
+
success: true,
|
|
31
|
+
file_path: session.originalPath,
|
|
32
|
+
provider: 'odf',
|
|
33
|
+
edit_count: session.editCount,
|
|
34
|
+
anchor_paragraph_id: anchorId,
|
|
35
|
+
new_paragraph_id: newIds[0] ?? null,
|
|
36
|
+
new_paragraph_ids: newIds,
|
|
37
|
+
position: positionUpper,
|
|
38
|
+
inserted_text: previewText(text, RESULT_PREVIEW_CHARS),
|
|
39
|
+
// ODF IDs are positional; everything at/after the insertion point has shifted.
|
|
40
|
+
invalidates_paragraph_ids_after: anchorId,
|
|
41
|
+
requires_reread_before_next_edit: true,
|
|
42
|
+
ids_note: 'ODF paragraph IDs are positional and have shifted after this insertion. Call read_file or grep again to get current IDs before your next edit.',
|
|
43
|
+
...metadata,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
return err('INSERT_ERROR', `Failed to insert paragraph into ODF document: ${errorMessage(e)}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=insert_paragraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert_paragraph.js","sourceRoot":"","sources":["../../../src/tools/odf/insert_paragraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAqB,MAAM,aAAa,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,OAAmB,EACnB,MAAyG,EACzG,QAAiC;IAEjC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,yBAAyB,CAAC;QAClD,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACjE,IAAI,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;YAC5D,OAAO,GAAG,CAAC,kBAAkB,EAAE,qBAAqB,MAAM,CAAC,QAAQ,gCAAgC,CAAC,CAAC;QACvG,CAAC;QAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAEzD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAmC,CAAC,CAAC;QAChG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,OAAO,EAAE,CAAC;YACR,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,OAAO,CAAC,YAAY;YAC/B,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,mBAAmB,EAAE,QAAQ;YAC7B,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI;YACnC,iBAAiB,EAAE,MAAM;YACzB,QAAQ,EAAE,aAAa;YACvB,aAAa,EAAE,WAAW,CAAC,IAAI,EAAE,oBAAoB,CAAC;YACtD,+EAA+E;YAC/E,+BAA+B,EAAE,QAAQ;YACzC,gCAAgC,EAAE,IAAI;YACtC,QAAQ,EACN,gJAAgJ;YAClJ,GAAG,QAAQ;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,cAAc,EAAE,iDAAiD,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type OdfSession, SessionManager } from '../../session/manager.js';
|
|
2
|
+
import { type ToolResponse } from '../types.js';
|
|
3
|
+
export declare function odfReadFile(_manager: SessionManager, session: OdfSession, params: {
|
|
4
|
+
offset?: number;
|
|
5
|
+
limit?: number;
|
|
6
|
+
node_ids?: string[];
|
|
7
|
+
format?: string;
|
|
8
|
+
}, metadata: Record<string, unknown>): Promise<ToolResponse>;
|
|
9
|
+
//# sourceMappingURL=read_file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read_file.d.ts","sourceRoot":"","sources":["../../../src/tools/odf/read_file.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,UAAU,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAuCzD,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACjF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,CA6DvB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { formatToonDataLine, renderToon, } from '@usejunior/docx-core';
|
|
2
|
+
import { err, ok } from '../types.js';
|
|
3
|
+
import { buildPaginationMeta, DEFAULT_CONTENT_TOKEN_BUDGET, estimateTokens } from '../pagination.js';
|
|
4
|
+
import { READ_SIMPLE_PREVIEW_CHARS, previewText } from '../preview.js';
|
|
5
|
+
function odfParagraphsToDocumentViewNodes(session) {
|
|
6
|
+
return session.doc.getParagraphs().map((paragraph) => ({
|
|
7
|
+
id: paragraph.id,
|
|
8
|
+
list_label: '',
|
|
9
|
+
header: '',
|
|
10
|
+
style: 'body',
|
|
11
|
+
text: paragraph.text,
|
|
12
|
+
clean_text: paragraph.text,
|
|
13
|
+
tagged_text: paragraph.text,
|
|
14
|
+
list_metadata: {
|
|
15
|
+
list_level: -1,
|
|
16
|
+
label_type: null,
|
|
17
|
+
label_string: '',
|
|
18
|
+
header_text: null,
|
|
19
|
+
header_style: null,
|
|
20
|
+
header_formatting: null,
|
|
21
|
+
is_auto_numbered: false,
|
|
22
|
+
},
|
|
23
|
+
style_fingerprint: {
|
|
24
|
+
list_level: -1,
|
|
25
|
+
left_indent_pt: 0,
|
|
26
|
+
first_line_indent_pt: 0,
|
|
27
|
+
style_name: 'body',
|
|
28
|
+
alignment: 'LEFT',
|
|
29
|
+
},
|
|
30
|
+
paragraph_style_id: null,
|
|
31
|
+
paragraph_style_name: 'body',
|
|
32
|
+
paragraph_alignment: 'LEFT',
|
|
33
|
+
paragraph_indents_pt: { left: 0, first_line: 0 },
|
|
34
|
+
numbering: { num_id: null, ilvl: null, is_auto_numbered: false },
|
|
35
|
+
header_formatting: null,
|
|
36
|
+
body_run_formatting: null,
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
export async function odfReadFile(_manager, session, params, metadata) {
|
|
40
|
+
try {
|
|
41
|
+
const format = (params.format ?? 'toon').toLowerCase();
|
|
42
|
+
if (format !== 'toon' && format !== 'json' && format !== 'simple') {
|
|
43
|
+
return err('INVALID_FORMAT', `Invalid format: ${params.format}`, "Use 'toon' (default), 'json', or 'simple'.");
|
|
44
|
+
}
|
|
45
|
+
const nodes = odfParagraphsToDocumentViewNodes(session);
|
|
46
|
+
const totalParagraphs = nodes.length;
|
|
47
|
+
const hasExplicitLimit = typeof params.limit === 'number';
|
|
48
|
+
const hasExplicitOffset = typeof params.offset === 'number';
|
|
49
|
+
const hasNodeIds = params.node_ids != null && params.node_ids.length > 0;
|
|
50
|
+
const budgetActive = !hasExplicitLimit && !hasExplicitOffset && !hasNodeIds;
|
|
51
|
+
let filtered = nodes;
|
|
52
|
+
let startIdx = 0;
|
|
53
|
+
if (hasNodeIds) {
|
|
54
|
+
const set = new Set(params.node_ids);
|
|
55
|
+
filtered = nodes.filter((n) => set.has(n.id));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
if (hasExplicitOffset) {
|
|
59
|
+
if (params.offset > 0)
|
|
60
|
+
startIdx = Math.max(0, params.offset - 1);
|
|
61
|
+
if (params.offset < 0)
|
|
62
|
+
startIdx = Math.max(0, totalParagraphs + params.offset);
|
|
63
|
+
}
|
|
64
|
+
const endIdx = hasExplicitLimit ? Math.min(totalParagraphs, startIdx + params.limit) : totalParagraphs;
|
|
65
|
+
filtered = nodes.slice(startIdx, endIdx);
|
|
66
|
+
}
|
|
67
|
+
let content;
|
|
68
|
+
let paragraphsReturned;
|
|
69
|
+
if (!budgetActive) {
|
|
70
|
+
if (format === 'json') {
|
|
71
|
+
content = JSON.stringify(filtered, null, 2);
|
|
72
|
+
}
|
|
73
|
+
else if (format === 'simple') {
|
|
74
|
+
content = renderSimpleOdf(filtered);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
content = renderToon(filtered);
|
|
78
|
+
}
|
|
79
|
+
paragraphsReturned = filtered.length;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const result = renderToonWithBudgetOdf(filtered, DEFAULT_CONTENT_TOKEN_BUDGET);
|
|
83
|
+
content = result.content;
|
|
84
|
+
paragraphsReturned = result.count;
|
|
85
|
+
}
|
|
86
|
+
const paginationMeta = buildPaginationMeta(totalParagraphs, paragraphsReturned, startIdx);
|
|
87
|
+
return ok({
|
|
88
|
+
file_path: session.originalPath,
|
|
89
|
+
provider: 'odf',
|
|
90
|
+
content,
|
|
91
|
+
total_paragraphs: totalParagraphs,
|
|
92
|
+
paragraphs_returned: paragraphsReturned,
|
|
93
|
+
...paginationMeta,
|
|
94
|
+
...metadata,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
return err('READ_ERROR', e instanceof Error ? e.message : String(e), 'Check session status and try again.');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function renderSimpleOdf(nodes) {
|
|
102
|
+
const lines = ['#TOON id | text'];
|
|
103
|
+
for (const n of nodes) {
|
|
104
|
+
lines.push(`${n.id} | ${previewText(n.clean_text, READ_SIMPLE_PREVIEW_CHARS)}`);
|
|
105
|
+
}
|
|
106
|
+
return lines.join('\n');
|
|
107
|
+
}
|
|
108
|
+
// ODF Phase 1 flattens table cells to body paragraphs, so nodes never carry
|
|
109
|
+
// `table_context`. The budget renderer therefore has no table-marker handling
|
|
110
|
+
// (unlike the DOCX/gdocs renderers) — keeping it free of structurally-unreachable
|
|
111
|
+
// branches.
|
|
112
|
+
function renderToonWithBudgetOdf(nodes, budget) {
|
|
113
|
+
let accumulated = '#SCHEMA id | list_label | header | style | text';
|
|
114
|
+
let count = 0;
|
|
115
|
+
for (const node of nodes) {
|
|
116
|
+
const candidate = accumulated + '\n' + formatToonDataLine(node);
|
|
117
|
+
if (count > 0 && estimateTokens(candidate) > budget)
|
|
118
|
+
break;
|
|
119
|
+
accumulated = candidate;
|
|
120
|
+
count++;
|
|
121
|
+
}
|
|
122
|
+
return { content: accumulated, count };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=read_file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read_file.js","sourceRoot":"","sources":["../../../src/tools/odf/read_file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type OdfSession, SessionManager } from '../../session/manager.js';
|
|
2
|
+
import { type ToolResponse } from '../types.js';
|
|
3
|
+
export declare function odfReplaceText(manager: SessionManager, session: OdfSession, params: {
|
|
4
|
+
target_paragraph_id: string;
|
|
5
|
+
old_string: string;
|
|
6
|
+
new_string: string;
|
|
7
|
+
instruction: string;
|
|
8
|
+
}, metadata: Record<string, unknown>): Promise<ToolResponse>;
|
|
9
|
+
//# sourceMappingURL=replace_text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replace_text.d.ts","sourceRoot":"","sources":["../../../src/tools/odf/replace_text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzD,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE;IAAE,mBAAmB,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EACpG,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,CAoCvB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { stripAllInlineTags } from '@usejunior/docx-core';
|
|
2
|
+
import { RESULT_PREVIEW_CHARS, previewText } from '../preview.js';
|
|
3
|
+
import { err, ok } from '../types.js';
|
|
4
|
+
export async function odfReplaceText(manager, session, params, metadata) {
|
|
5
|
+
try {
|
|
6
|
+
const pid = params.target_paragraph_id;
|
|
7
|
+
const oldStr = stripAllInlineTags(params.old_string);
|
|
8
|
+
const newStr = stripAllInlineTags(params.new_string);
|
|
9
|
+
const beforeText = session.doc.getParagraphTextById(pid);
|
|
10
|
+
if (beforeText === null) {
|
|
11
|
+
return err('ANCHOR_NOT_FOUND', `Paragraph ID ${pid} not found in document`);
|
|
12
|
+
}
|
|
13
|
+
const result = session.doc.replaceTextById(pid, oldStr, newStr);
|
|
14
|
+
if (!result.ok) {
|
|
15
|
+
return err(result.code, result.message);
|
|
16
|
+
}
|
|
17
|
+
manager.markEdited(session);
|
|
18
|
+
const afterText = session.doc.getParagraphTextById(pid) ?? '';
|
|
19
|
+
return ok({
|
|
20
|
+
file_path: session.originalPath,
|
|
21
|
+
provider: 'odf',
|
|
22
|
+
edit_count: session.editCount,
|
|
23
|
+
target_paragraph_id: pid,
|
|
24
|
+
replacements_made: 1,
|
|
25
|
+
before_text: previewText(beforeText.trim(), RESULT_PREVIEW_CHARS),
|
|
26
|
+
after_text: previewText(afterText.trim(), RESULT_PREVIEW_CHARS),
|
|
27
|
+
...metadata,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
32
|
+
if (msg.includes('ANCHOR_NOT_FOUND'))
|
|
33
|
+
return err('ANCHOR_NOT_FOUND', msg);
|
|
34
|
+
if (msg.includes('TEXT_NOT_FOUND'))
|
|
35
|
+
return err('TEXT_NOT_FOUND', msg);
|
|
36
|
+
if (msg.includes('MATCH_SPANS_MULTIPLE_NODES'))
|
|
37
|
+
return err('MATCH_SPANS_MULTIPLE_NODES', msg);
|
|
38
|
+
return err('EDIT_ERROR', `Failed to edit ODF document: ${msg}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=replace_text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replace_text.js","sourceRoot":"","sources":["../../../src/tools/odf/replace_text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAqB,MAAM,aAAa,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,OAAmB,EACnB,MAAoG,EACpG,QAAiC;IAEjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC;QACvC,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAErD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC,kBAAkB,EAAE,gBAAgB,GAAG,wBAAwB,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE5B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAE9D,OAAO,EAAE,CAAC;YACR,SAAS,EAAE,OAAO,CAAC,YAAY;YAC/B,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,mBAAmB,EAAE,GAAG;YACxB,iBAAiB,EAAE,CAAC;YACpB,WAAW,EAAE,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,oBAAoB,CAAC;YACjE,UAAU,EAAE,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,oBAAoB,CAAC;YAC/D,GAAG,QAAQ;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAAE,OAAO,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QAC1E,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAAE,OAAO,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACtE,IAAI,GAAG,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAAE,OAAO,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;QAC9F,OAAO,GAAG,CAAC,YAAY,EAAE,gCAAgC,GAAG,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type OdfSession, SessionManager } from '../../session/manager.js';
|
|
2
|
+
import { type ToolResponse } from '../types.js';
|
|
3
|
+
export declare function odfSave(manager: SessionManager, session: OdfSession, params: {
|
|
4
|
+
save_to_local_path?: string;
|
|
5
|
+
allow_overwrite?: boolean;
|
|
6
|
+
}, metadata: Record<string, unknown>): Promise<ToolResponse>;
|
|
7
|
+
//# sourceMappingURL=save.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../src/tools/odf/save.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG3E,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAMzD,wBAAsB,OAAO,CAC3B,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE;IAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,EAClE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,CA4CvB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import { errorCode, errorMessage } from '../../error_utils.js';
|
|
4
|
+
import { enforceWritePathPolicy, resolvesToSamePath } from '../path_policy.js';
|
|
5
|
+
import { err, ok } from '../types.js';
|
|
6
|
+
function expandPath(inputPath) {
|
|
7
|
+
return inputPath.startsWith('~') ? path.join(process.env.HOME || '', inputPath.slice(1)) : inputPath;
|
|
8
|
+
}
|
|
9
|
+
export async function odfSave(manager, session, params, metadata) {
|
|
10
|
+
const rawSavePath = typeof params.save_to_local_path === 'string' ? params.save_to_local_path.trim() : '';
|
|
11
|
+
if (!rawSavePath) {
|
|
12
|
+
return err('MISSING_SAVE_PATH', 'save requires save_to_local_path for ODF files.', 'Provide a writable .odt output path.');
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
const savePath = expandPath(rawSavePath);
|
|
16
|
+
const allowOverwrite = params.allow_overwrite ?? false;
|
|
17
|
+
if (!allowOverwrite && await resolvesToSamePath(savePath, session.originalPath)) {
|
|
18
|
+
return err('OVERWRITE_BLOCKED', `Refusing to overwrite original file: ${savePath}`, 'Save to a different path, or set allow_overwrite=true if you explicitly want in-place overwrite.');
|
|
19
|
+
}
|
|
20
|
+
const writePolicy = await enforceWritePathPolicy(savePath);
|
|
21
|
+
if (!writePolicy.ok)
|
|
22
|
+
return writePolicy.response;
|
|
23
|
+
await fs.mkdir(path.dirname(savePath), { recursive: true });
|
|
24
|
+
const buffer = await manager.saveOdfTo(session, savePath);
|
|
25
|
+
manager.touch(session);
|
|
26
|
+
return ok({
|
|
27
|
+
file_path: manager.normalizePath(session.originalPath),
|
|
28
|
+
provider: 'odf',
|
|
29
|
+
original_filename: session.filename,
|
|
30
|
+
edit_count: session.editCount,
|
|
31
|
+
edit_revision: session.editRevision,
|
|
32
|
+
saved_to: savePath,
|
|
33
|
+
size_bytes: buffer.length,
|
|
34
|
+
save_format: 'odt',
|
|
35
|
+
returned_variants: ['odt'],
|
|
36
|
+
message: `ODF document saved to ${savePath}`,
|
|
37
|
+
...metadata,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
const msg = errorMessage(e);
|
|
42
|
+
if (String(errorCode(e) ?? '').toUpperCase() === 'EACCES') {
|
|
43
|
+
return err('PERMISSION_DENIED', `Cannot write to: ${rawSavePath}`, 'Try saving to ~/Downloads/ or ~/Documents/ instead.');
|
|
44
|
+
}
|
|
45
|
+
return err('SAVE_ERROR', `Failed to save ODF document: ${msg}`, 'Check the path is valid and writable.');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=save.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../../src/tools/odf/save.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,GAAG,EAAE,EAAE,EAAqB,MAAM,aAAa,CAAC;AAEzD,SAAS,UAAU,CAAC,SAAiB;IACnC,OAAO,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACvG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAAuB,EACvB,OAAmB,EACnB,MAAkE,EAClE,QAAiC;IAEjC,MAAM,WAAW,GAAG,OAAO,MAAM,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1G,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC,mBAAmB,EAAE,iDAAiD,EAAE,sCAAsC,CAAC,CAAC;IAC7H,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,IAAI,KAAK,CAAC;QACvD,IAAI,CAAC,cAAc,IAAI,MAAM,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAChF,OAAO,GAAG,CACR,mBAAmB,EACnB,wCAAwC,QAAQ,EAAE,EAClD,kGAAkG,CACnG,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,EAAE;YAAE,OAAO,WAAW,CAAC,QAAQ,CAAC;QAEjD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEvB,OAAO,EAAE,CAAC;YACR,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC;YACtD,QAAQ,EAAE,KAAK;YACf,iBAAiB,EAAE,OAAO,CAAC,QAAQ;YACnC,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,aAAa,EAAE,OAAO,CAAC,YAAY;YACnC,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,MAAM,CAAC,MAAM;YACzB,WAAW,EAAE,KAAK;YAClB,iBAAiB,EAAE,CAAC,KAAK,CAAC;YAC1B,OAAO,EAAE,yBAAyB,QAAQ,EAAE;YAC5C,GAAG,QAAQ;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC1D,OAAO,GAAG,CAAC,mBAAmB,EAAE,oBAAoB,WAAW,EAAE,EAAE,qDAAqD,CAAC,CAAC;QAC5H,CAAC;QACD,OAAO,GAAG,CAAC,YAAY,EAAE,gCAAgC,GAAG,EAAE,EAAE,uCAAuC,CAAC,CAAC;IAC3G,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open_document.d.ts","sourceRoot":"","sources":["../../src/tools/open_document.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"open_document.d.ts","sourceRoot":"","sources":["../../src/tools/open_document.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAsCxD,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1D,OAAO,CAAC,YAAY,CAAC,CAsGvB"}
|