@defai.digital/ax-cli 3.8.6 → 3.8.8
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 +28 -393
- package/config-defaults/models.yaml +0 -24
- package/config-defaults/settings.yaml +16 -16
- package/dist/agent/dependency-resolver.js +22 -1
- package/dist/agent/dependency-resolver.js.map +1 -1
- package/dist/agent/llm-agent.d.ts +23 -2
- package/dist/agent/llm-agent.js +126 -122
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/loop-detector.d.ts +70 -0
- package/dist/agent/loop-detector.js +339 -0
- package/dist/agent/loop-detector.js.map +1 -0
- package/dist/agent/progress-tracker.d.ts +94 -0
- package/dist/agent/progress-tracker.js +222 -0
- package/dist/agent/progress-tracker.js.map +1 -0
- package/dist/agent/status-reporter.js +2 -2
- package/dist/agent/status-reporter.js.map +1 -1
- package/dist/agent/subagent.js +7 -3
- package/dist/agent/subagent.js.map +1 -1
- package/dist/analyzers/architecture/project-structure-scanner.js +6 -2
- package/dist/analyzers/architecture/project-structure-scanner.js.map +1 -1
- package/dist/analyzers/git/churn-calculator.js +2 -1
- package/dist/analyzers/git/churn-calculator.js.map +1 -1
- package/dist/checkpoint/manager.js +18 -4
- package/dist/checkpoint/manager.js.map +1 -1
- package/dist/checkpoint/storage.d.ts +6 -0
- package/dist/checkpoint/storage.js +96 -49
- package/dist/checkpoint/storage.js.map +1 -1
- package/dist/commands/cache.js +8 -6
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/doctor.js +19 -27
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/mcp-migrate.js +6 -5
- package/dist/commands/mcp-migrate.js.map +1 -1
- package/dist/commands/mcp.js +14 -2
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/models.js +8 -12
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/plan.js +1 -10
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/setup.js +4 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.js +40 -14
- package/dist/commands/status.js.map +1 -1
- package/dist/constants.d.ts +12 -0
- package/dist/constants.js +16 -4
- package/dist/constants.js.map +1 -1
- package/dist/hooks/hook-runner.d.ts +138 -0
- package/dist/hooks/hook-runner.js +429 -0
- package/dist/hooks/hook-runner.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.js +3 -21
- package/dist/index.js.map +1 -1
- package/dist/llm/client.d.ts +9 -0
- package/dist/llm/client.js +306 -45
- package/dist/llm/client.js.map +1 -1
- package/dist/llm/tools.js +2 -39
- package/dist/llm/tools.js.map +1 -1
- package/dist/llm/types.d.ts +1 -47
- package/dist/llm/types.js +0 -18
- package/dist/llm/types.js.map +1 -1
- package/dist/mcp/automatosx-loader.js +2 -1
- package/dist/mcp/automatosx-loader.js.map +1 -1
- package/dist/mcp/client-v2.d.ts +3 -0
- package/dist/mcp/client-v2.js +85 -19
- package/dist/mcp/client-v2.js.map +1 -1
- package/dist/mcp/config-migrator.js +3 -2
- package/dist/mcp/config-migrator.js.map +1 -1
- package/dist/mcp/config-v2.d.ts +5 -0
- package/dist/mcp/config-v2.js +26 -0
- package/dist/mcp/config-v2.js.map +1 -1
- package/dist/mcp/error-formatter.js +4 -1
- package/dist/mcp/error-formatter.js.map +1 -1
- package/dist/mcp/health.js +1 -1
- package/dist/mcp/health.js.map +1 -1
- package/dist/mcp/reconnection.js +2 -1
- package/dist/mcp/reconnection.js.map +1 -1
- package/dist/mcp/registry.js +3 -2
- package/dist/mcp/registry.js.map +1 -1
- package/dist/mcp/resources.js +2 -1
- package/dist/mcp/resources.js.map +1 -1
- package/dist/mcp/validation.js +9 -0
- package/dist/mcp/validation.js.map +1 -1
- package/dist/memory/context-store.js +4 -6
- package/dist/memory/context-store.js.map +1 -1
- package/dist/memory/types.d.ts +2 -0
- package/dist/memory/types.js +4 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/permissions/index.d.ts +6 -0
- package/dist/permissions/index.js +7 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/permissions/permission-manager.d.ts +145 -0
- package/dist/permissions/permission-manager.js +401 -0
- package/dist/permissions/permission-manager.js.map +1 -0
- package/dist/planner/plan-storage.js +3 -2
- package/dist/planner/plan-storage.js.map +1 -1
- package/dist/planner/task-planner.js +2 -1
- package/dist/planner/task-planner.js.map +1 -1
- package/dist/planner/types.d.ts +6 -6
- package/dist/schemas/settings-schemas.d.ts +0 -14
- package/dist/schemas/settings-schemas.js +0 -10
- package/dist/schemas/settings-schemas.js.map +1 -1
- package/dist/schemas/tool-schemas.d.ts +2 -2
- package/dist/schemas/yaml-schemas.d.ts +15 -0
- package/dist/schemas/yaml-schemas.js +3 -0
- package/dist/schemas/yaml-schemas.js.map +1 -1
- package/dist/tools/bash.js +35 -10
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/confirmation-tool.js +3 -2
- package/dist/tools/confirmation-tool.js.map +1 -1
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.js +2 -1
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/search.js +12 -13
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/text-editor.d.ts +46 -0
- package/dist/tools/text-editor.js +455 -11
- package/dist/tools/text-editor.js.map +1 -1
- package/dist/tools/todo-tool.js +5 -4
- package/dist/tools/todo-tool.js.map +1 -1
- package/dist/ui/components/chat-input.js +10 -1
- package/dist/ui/components/chat-input.js.map +1 -1
- package/dist/ui/components/chat-interface.js +1 -0
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/components/tool-group-display.js +0 -6
- package/dist/ui/components/tool-group-display.js.map +1 -1
- package/dist/ui/hooks/use-input-handler.js +7 -6
- package/dist/ui/hooks/use-input-handler.js.map +1 -1
- package/dist/ui/hooks/use-input-history.js +21 -13
- package/dist/ui/hooks/use-input-history.js.map +1 -1
- package/dist/ui/utils/tool-grouper.d.ts +1 -2
- package/dist/ui/utils/tool-grouper.js +4 -15
- package/dist/ui/utils/tool-grouper.js.map +1 -1
- package/dist/utils/api-error.d.ts +61 -0
- package/dist/utils/api-error.js +176 -0
- package/dist/utils/api-error.js.map +1 -0
- package/dist/utils/audit-logger.js +2 -1
- package/dist/utils/audit-logger.js.map +1 -1
- package/dist/utils/auto-accept-logger.js +3 -3
- package/dist/utils/auto-accept-logger.js.map +1 -1
- package/dist/utils/config-loader.d.ts +3 -0
- package/dist/utils/config-loader.js +27 -2
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/encryption.js +2 -1
- package/dist/utils/encryption.js.map +1 -1
- package/dist/utils/file-cache.js +4 -2
- package/dist/utils/file-cache.js.map +1 -1
- package/dist/utils/history-migration.js +5 -4
- package/dist/utils/history-migration.js.map +1 -1
- package/dist/utils/onboarding-manager.js +2 -1
- package/dist/utils/onboarding-manager.js.map +1 -1
- package/dist/utils/path-helpers.d.ts +8 -0
- package/dist/utils/path-helpers.js +35 -0
- package/dist/utils/path-helpers.js.map +1 -0
- package/dist/utils/path-security.js +3 -2
- package/dist/utils/path-security.js.map +1 -1
- package/dist/utils/retry-helper.d.ts +61 -0
- package/dist/utils/retry-helper.js +206 -0
- package/dist/utils/retry-helper.js.map +1 -0
- package/dist/utils/settings-manager.d.ts +1 -21
- package/dist/utils/settings-manager.js +2 -82
- package/dist/utils/settings-manager.js.map +1 -1
- package/dist/utils/streaming-analyzer.d.ts +2 -13
- package/dist/utils/streaming-analyzer.js +3 -25
- package/dist/utils/streaming-analyzer.js.map +1 -1
- package/dist/utils/token-counter.d.ts +13 -1
- package/dist/utils/token-counter.js +31 -6
- package/dist/utils/token-counter.js.map +1 -1
- package/package.json +3 -2
- package/packages/schemas/README.md +1 -1
- package/packages/schemas/package.json +1 -1
- package/dist/tools/web-search/cache.d.ts +0 -62
- package/dist/tools/web-search/cache.js +0 -105
- package/dist/tools/web-search/cache.js.map +0 -1
- package/dist/tools/web-search/engines/crates.d.ts +0 -19
- package/dist/tools/web-search/engines/crates.js +0 -87
- package/dist/tools/web-search/engines/crates.js.map +0 -1
- package/dist/tools/web-search/engines/npm.d.ts +0 -18
- package/dist/tools/web-search/engines/npm.js +0 -86
- package/dist/tools/web-search/engines/npm.js.map +0 -1
- package/dist/tools/web-search/engines/pypi.d.ts +0 -18
- package/dist/tools/web-search/engines/pypi.js +0 -75
- package/dist/tools/web-search/engines/pypi.js.map +0 -1
- package/dist/tools/web-search/index.d.ts +0 -11
- package/dist/tools/web-search/index.js +0 -11
- package/dist/tools/web-search/index.js.map +0 -1
- package/dist/tools/web-search/router.d.ts +0 -34
- package/dist/tools/web-search/router.js +0 -245
- package/dist/tools/web-search/router.js.map +0 -1
- package/dist/tools/web-search/types.d.ts +0 -45
- package/dist/tools/web-search/types.js +0 -6
- package/dist/tools/web-search/types.js.map +0 -1
- package/dist/tools/web-search/web-search-tool.d.ts +0 -51
- package/dist/tools/web-search/web-search-tool.js +0 -246
- package/dist/tools/web-search/web-search-tool.js.map +0 -1
package/dist/tools/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AA0BzE,MAAM,OAAO,UAAU;IACb,MAAM,CAAU,mBAAmB,GAAG,EAAE,CAAC;IACzC,MAAM,CAAU,mBAAmB,GAAG,EAAE,CAAC;IACzC,MAAM,CAAU,mBAAmB,GAAG,CAAC,CAAC;IACxC,MAAM,CAAU,iBAAiB,GAAG,GAAG,CAAC;IACxC,MAAM,CAAU,oBAAoB,GAAG,EAAE,CAAC;IAC1C,MAAM,CAAU,gBAAgB,GAAG,EAAE,CAAC;IACtC,MAAM,CAAU,gBAAgB,GAAG,EAAE,CAAC;IACtC,MAAM,CAAU,eAAe,GAAG,EAAE,CAAC;IACrC,MAAM,CAAU,gBAAgB,GAAG;QACzC,cAAc;QACd,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,OAAO;QACP,OAAO;QACP,QAAQ;KACT,CAAC;IAEM,gBAAgB,GAAW,OAAO,CAAC,GAAG,EAAE,CAAC;IAEjD;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,KAAa,EACb,UAWI,EAAE;QAEN,IAAI,CAAC;YACH,oEAAoE;YACpE,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;gBAC1B,kDAAkD;gBAClD,qFAAqF;gBACrF,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;oBACrC,WAAW,CAAC,UAAU,CAAC;wBACrB,QAAQ,EAAE,aAAa,CAAC,gBAAgB;wBACxC,MAAM,EAAE,gCAAgC;wBACxC,QAAQ,EAAE,aAAa;wBACvB,OAAO,EAAE,SAAS;wBAClB,KAAK,EAAE,cAAc,CAAC,KAAK;wBAC3B,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE;qBACvC,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,uEAAuE;gBACzE,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,yBAAyB,cAAc,CAAC,KAAK,EAAE;iBACvD,CAAC;YACJ,CAAC;YAED,yEAAyE;YACzE,wEAAwE;YACxE,MAAM,eAAe,GAAG,oBAAoB,CAAC,cAAc,CAAC,KAAM,CAAC,CAAC;YAEpE,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,0DAA0D;gBAC1D,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;oBAC3B,kDAAkD;oBAClD,qFAAqF;oBACrF,IAAI,CAAC;wBACH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;wBACrC,WAAW,CAAC,WAAW,CAAC;4BACtB,QAAQ,EAAE,aAAa,CAAC,gBAAgB;4BACxC,MAAM,EAAE,wBAAwB;4BAChC,QAAQ,EAAE,aAAa;4BACvB,OAAO,EAAE,SAAS;4BAClB,KAAK,EAAE,eAAe,CAAC,KAAK;4BAC5B,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE;yBAC3C,CAAC,CAAC;oBACL,CAAC;oBAAC,MAAM,CAAC;wBACP,uEAAuE;oBACzE,CAAC;oBAED,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,0BAA0B,eAAe,CAAC,KAAK,EAAE;qBACzD,CAAC;gBACJ,CAAC;gBACD,sBAAsB;gBACtB,IAAI,eAAe,CAAC,QAAQ,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpE,OAAO,CAAC,IAAI,CAAC,0BAA0B,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,8EAA8E;gBAC9E,mEAAmE;gBACnE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;oBAC3B,OAAO,CAAC,IAAI,CACV,yEAAyE,eAAe,CAAC,KAAK,IAAI;wBAClG,wEAAwE,CACzE,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC;YAChD,MAAM,OAAO,GAA0B,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,cAAc,CAAC,KAAM,CAAC;YAEzC,uCAAuC;YACvC,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;gBACnD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CACV,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzB,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;iBACf,CAAC,CAAC,CACJ,CAAC;YACJ,CAAC;YAED,gCAAgC;YAChC,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;gBACpD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACvE,OAAO,CAAC,IAAI,CACV,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzB,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;iBACf,CAAC,CAAC,CACJ,CAAC;YACJ,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,yBAAyB,UAAU,GAAG;iBAC/C,CAAC;YACJ,CAAC;YAED,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAC/C,OAAO,EACP,UAAU,EACV,UAAU,CACX,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,eAAe;aACxB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aACjF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAC1B,KAAa,EACb,OASC;QAED,MAAM,IAAI,GAAG;YACX,QAAQ;YACR,iBAAiB;YACjB,eAAe;YACf,UAAU;YACV,cAAc;YACd,eAAe;SAChB,CAAC;QAEF,uBAAuB;QACvB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7B,CAAC;QAED,0BAA0B;QAC1B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7B,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/B,CAAC;QAED,wBAAwB;QACxB,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrC,4CAA4C;YAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,+CAA+C,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YACvF,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,wBAAwB;QACxB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,sBAAsB;QACtB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QAC9C,CAAC;QAED,sBAAsB;QACtB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,oBAAoB;QACpB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CACP,kBAAkB,EAClB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,QAAQ,CACT,CAAC;QAEF,iCAAiC;QACjC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAExC,gFAAgF;QAChF,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;QAE9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;gBAChC,OAAO,EAAE,IAAI;gBACb,IAAI;gBACJ,GAAG,EAAE,IAAI,CAAC,gBAAgB;gBAC1B,OAAO,EAAE,KAAK,EAAE,oBAAoB;aACrC,CAAC,CAAC;YAEH,sEAAsE;YACtE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,YAAY,KAAK;gBAC1B,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,MAAe;QAYpC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChE,MAAM,GAAG,GAAG,MAAa,CAAC;QAE1B,OAAO,CACL,GAAG,CAAC,IAAI,KAAK,OAAO;YACpB,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,QAAQ;YACxC,OAAO,GAAG,CAAC,IAAI,EAAE,WAAW,KAAK,QAAQ;YACzC,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,QAAQ,CAC1C,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,MAAc;QACvC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QAE9B,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;oBAChC,wDAAwD;oBACxD,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;wBAC3B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;wBAC7B,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;wBAC/C,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;wBACnC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE;qBACtD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;gBAC1B,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAC9B,OAAe,EACf,OAIC;QAED,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,mBAAmB,CAAC;QACxE,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,iCAAiC;QAE9E,MAAM,OAAO,GAAG,KAAK,EAAE,GAAW,EAAE,QAAgB,CAAC,EAAiB,EAAE;YACtE,6DAA6D;YAC7D,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU;gBAAE,OAAO;YACvC,IAAI,KAAK,GAAG,UAAU,CAAC,mBAAmB;gBAAE,OAAO;YAEnD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAE/D,4DAA4D;gBAC5D,MAAM,WAAW,GAAmB,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAmB,EAAE,CAAC;gBAEtC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,+CAA+C;oBAC/C,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBACzD,SAAS;oBACX,CAAC;oBAED,0BAA0B;oBAC1B,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC5E,SAAS;oBACX,CAAC;oBAED,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;wBACnB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,CAAC;yBAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;wBAC/B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAED,2DAA2D;gBAC3D,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;oBAChC,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU;wBAAE,OAAO,CAAC,aAAa;oBAErD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;oBAEpE,wBAAwB;oBACxB,IACE,OAAO,CAAC,cAAc;wBACtB,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAC7C,CAAC;wBACD,SAAS;oBACX,CAAC;oBAED,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CACnC,KAAK,CAAC,IAAI,EACV,YAAY,EACZ,aAAa,CACd,CAAC;oBACF,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;wBACd,KAAK,CAAC,IAAI,CAAC;4BACT,IAAI,EAAE,YAAY;4BAClB,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,KAAK;yBACN,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,2BAA2B;gBAC3B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;oBAC/B,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU;wBAAE,OAAO,CAAC,8BAA8B;oBAEtE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;oBAEpE,wBAAwB;oBACxB,IACE,OAAO,CAAC,cAAc;wBACtB,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAC7C,CAAC;wBACD,SAAS;oBACX,CAAC;oBAED,MAAM,OAAO,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;YACnC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAErC,oDAAoD;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACK,kBAAkB,CACxB,QAAgB,EAChB,QAAgB,EAChB,OAAe;QAEf,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE7C,kCAAkC;QAClC,IAAI,aAAa,KAAK,OAAO;YAAE,OAAO,UAAU,CAAC,iBAAiB,CAAC;QACnE,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,UAAU,CAAC,oBAAoB,CAAC;QAC5E,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,UAAU,CAAC,gBAAgB,CAAC;QAExE,qEAAqE;QACrE,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAY,EAAE,OAAe,EAAE,cAAsB;QAC/E,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtC,YAAY,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QAED,oEAAoE;QACpE,OAAO,YAAY,KAAK,OAAO,CAAC,MAAM;YACpC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,gBAAgB,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YACvG,CAAC,CAAC,CAAC,CAAC;IACR,CAAC;IAED;;OAEG;IACK,oBAAoB,CAC1B,OAA8B,EAC9B,KAAa,EACb,WAAmB;QAEnB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,yBAAyB,KAAK,GAAG,CAAC;QAC3C,CAAC;QAED,IAAI,MAAM,GAAG,uBAAuB,KAAK,MAAM,CAAC;QAEhD,iCAAiC;QACjC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAE7D,kEAAkE;QAClE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QAEnC,8BAA8B;QAC9B,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,qCAAqC;QACrC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,UAAU,CAAC,mBAAmB,CAAC;QAEpD,+BAA+B;QAC/B,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/C,8CAA8C;YAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;YACrE,MAAM,cAAc,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,IAAI,GAAG,cAAc,IAAI,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,iDAAiD;QACjD,IAAI,QAAQ,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC;YACjD,MAAM,IAAI,UAAU,SAAS,SAAS,CAAC;QACzC,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,SAAiB;QACnC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,4 +29,50 @@ export declare class TextEditorTool {
|
|
|
29
29
|
* Create checkpoint before modifying a file
|
|
30
30
|
*/
|
|
31
31
|
private createCheckpointIfNeeded;
|
|
32
|
+
/**
|
|
33
|
+
* Find a match by normalizing whitespace differences
|
|
34
|
+
* Handles: trailing whitespace, tabs vs spaces, line ending differences, indentation changes
|
|
35
|
+
*/
|
|
36
|
+
private findNormalizedMatch;
|
|
37
|
+
/**
|
|
38
|
+
* Aggressively normalize a line for matching - removes all indentation and collapses whitespace
|
|
39
|
+
*/
|
|
40
|
+
private normalizeLineAggressively;
|
|
41
|
+
/**
|
|
42
|
+
* Extract a block of lines from original content, preserving original line endings
|
|
43
|
+
*/
|
|
44
|
+
private extractOriginalBlock;
|
|
45
|
+
/**
|
|
46
|
+
* Normalize indentation by converting tabs to spaces and trimming trailing whitespace
|
|
47
|
+
*/
|
|
48
|
+
private normalizeIndentation;
|
|
49
|
+
/**
|
|
50
|
+
* Find a similar block of code using line-by-line similarity matching
|
|
51
|
+
* Uses aggressive normalization and wider search windows
|
|
52
|
+
*/
|
|
53
|
+
private findSimilarBlock;
|
|
54
|
+
/**
|
|
55
|
+
* Line similarity using normalized comparison
|
|
56
|
+
*/
|
|
57
|
+
private lineSimilarityNormalized;
|
|
58
|
+
/**
|
|
59
|
+
* Block similarity using normalized lines and skipping blank lines
|
|
60
|
+
*/
|
|
61
|
+
private blockSimilarityNormalized;
|
|
62
|
+
/**
|
|
63
|
+
* Calculate similarity between two lines (0-1)
|
|
64
|
+
*/
|
|
65
|
+
private lineSimilarity;
|
|
66
|
+
/**
|
|
67
|
+
* Levenshtein distance for string similarity
|
|
68
|
+
*/
|
|
69
|
+
private levenshteinDistance;
|
|
70
|
+
/**
|
|
71
|
+
* Find and suggest the closest matching location
|
|
72
|
+
*/
|
|
73
|
+
private findClosestMatchSuggestion;
|
|
74
|
+
/**
|
|
75
|
+
* Find a similar single line in the content
|
|
76
|
+
*/
|
|
77
|
+
private findSimilarLine;
|
|
32
78
|
}
|
|
@@ -114,6 +114,13 @@ export class TextEditorTool {
|
|
|
114
114
|
};
|
|
115
115
|
}
|
|
116
116
|
const resolvedPath = pathValidation.path;
|
|
117
|
+
// Validate inputs
|
|
118
|
+
if (!oldStr) {
|
|
119
|
+
return {
|
|
120
|
+
success: false,
|
|
121
|
+
error: "Search string cannot be empty",
|
|
122
|
+
};
|
|
123
|
+
}
|
|
117
124
|
// Check file exists
|
|
118
125
|
const fileExistsError = await checkFileExists(resolvedPath);
|
|
119
126
|
if (fileExistsError) {
|
|
@@ -126,24 +133,51 @@ export class TextEditorTool {
|
|
|
126
133
|
// Use actualOldStr to avoid modifying the parameter
|
|
127
134
|
let actualOldStr = oldStr;
|
|
128
135
|
if (!content.includes(oldStr)) {
|
|
129
|
-
|
|
136
|
+
// Try whitespace-tolerant matching first
|
|
137
|
+
const normalizedMatch = this.findNormalizedMatch(content, oldStr);
|
|
138
|
+
if (normalizedMatch) {
|
|
139
|
+
actualOldStr = normalizedMatch;
|
|
140
|
+
}
|
|
141
|
+
else if (oldStr.includes('\n')) {
|
|
142
|
+
// Try fuzzy matching for multi-line strings
|
|
130
143
|
const fuzzyResult = this.findFuzzyMatch(content, oldStr);
|
|
131
144
|
if (fuzzyResult) {
|
|
132
145
|
actualOldStr = fuzzyResult;
|
|
133
146
|
}
|
|
134
147
|
else {
|
|
148
|
+
// Try line-by-line similarity matching
|
|
149
|
+
const similarMatch = this.findSimilarBlock(content, oldStr);
|
|
150
|
+
if (similarMatch.match) {
|
|
151
|
+
actualOldStr = similarMatch.match;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// Provide helpful error with closest match info
|
|
155
|
+
const errorMsg = similarMatch.suggestion
|
|
156
|
+
? `String not found in file. ${similarMatch.suggestion}`
|
|
157
|
+
: `String not found in file. For multi-line replacements, consider using line-based editing or verify the exact content.`;
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
error: errorMsg,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
// Single line - try to find similar line
|
|
167
|
+
const similarLine = this.findSimilarLine(content, oldStr);
|
|
168
|
+
if (similarLine.match) {
|
|
169
|
+
actualOldStr = similarLine.match;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
const errorMsg = similarLine.suggestion
|
|
173
|
+
? `String not found in file: "${oldStr}". ${similarLine.suggestion}`
|
|
174
|
+
: `String not found in file: "${oldStr}"`;
|
|
135
175
|
return {
|
|
136
176
|
success: false,
|
|
137
|
-
error:
|
|
177
|
+
error: errorMsg,
|
|
138
178
|
};
|
|
139
179
|
}
|
|
140
180
|
}
|
|
141
|
-
else {
|
|
142
|
-
return {
|
|
143
|
-
success: false,
|
|
144
|
-
error: `String not found in file: "${oldStr}"`,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
181
|
}
|
|
148
182
|
// Count occurrences using simple string splitting (more reliable than regex for multi-line strings)
|
|
149
183
|
const occurrences = content.split(actualOldStr).length - 1;
|
|
@@ -285,7 +319,23 @@ export class TextEditorTool {
|
|
|
285
319
|
await this.createCheckpointIfNeeded(filePath, 'create');
|
|
286
320
|
const dir = path.dirname(resolvedPath);
|
|
287
321
|
await fs.ensureDir(dir);
|
|
288
|
-
|
|
322
|
+
// RACE CONDITION FIX: Write atomically using temp file + rename
|
|
323
|
+
// This ensures either full write or no write (no partial writes)
|
|
324
|
+
const tempPath = `${resolvedPath}.tmp.${Date.now()}`;
|
|
325
|
+
try {
|
|
326
|
+
await writeFilePromise(tempPath, content, "utf-8");
|
|
327
|
+
await fs.rename(tempPath, resolvedPath);
|
|
328
|
+
}
|
|
329
|
+
catch (writeError) {
|
|
330
|
+
// Clean up temp file if it exists
|
|
331
|
+
try {
|
|
332
|
+
await fs.unlink(tempPath);
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
// Ignore cleanup errors
|
|
336
|
+
}
|
|
337
|
+
throw writeError;
|
|
338
|
+
}
|
|
289
339
|
this.editHistory.push({
|
|
290
340
|
command: "create",
|
|
291
341
|
path: filePath,
|
|
@@ -357,7 +407,23 @@ export class TextEditorTool {
|
|
|
357
407
|
const replacementLines = newContent.split("\n");
|
|
358
408
|
lines.splice(startLine - 1, endLine - startLine + 1, ...replacementLines);
|
|
359
409
|
const newFileContent = lines.join("\n");
|
|
360
|
-
|
|
410
|
+
// RACE CONDITION FIX: Write atomically using temp file + rename
|
|
411
|
+
// This ensures either full write or no write (no partial writes)
|
|
412
|
+
const tempPath = `${resolvedPath}.tmp.${Date.now()}`;
|
|
413
|
+
try {
|
|
414
|
+
await writeFilePromise(tempPath, newFileContent, "utf-8");
|
|
415
|
+
await fs.rename(tempPath, resolvedPath);
|
|
416
|
+
}
|
|
417
|
+
catch (writeError) {
|
|
418
|
+
// Clean up temp file if it exists
|
|
419
|
+
try {
|
|
420
|
+
await fs.unlink(tempPath);
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
// Ignore cleanup errors
|
|
424
|
+
}
|
|
425
|
+
throw writeError;
|
|
426
|
+
}
|
|
361
427
|
this.editHistory.push({
|
|
362
428
|
command: "str_replace",
|
|
363
429
|
path: filePath,
|
|
@@ -428,7 +494,23 @@ export class TextEditorTool {
|
|
|
428
494
|
}
|
|
429
495
|
// Create checkpoint before modification (consistent with other methods)
|
|
430
496
|
await this.createCheckpointIfNeeded(filePath, 'insert');
|
|
431
|
-
|
|
497
|
+
// RACE CONDITION FIX: Write atomically using temp file + rename
|
|
498
|
+
// This ensures either full write or no write (no partial writes)
|
|
499
|
+
const tempPath = `${resolvedPath}.tmp.${Date.now()}`;
|
|
500
|
+
try {
|
|
501
|
+
await writeFilePromise(tempPath, newContent, "utf-8");
|
|
502
|
+
await fs.rename(tempPath, resolvedPath);
|
|
503
|
+
}
|
|
504
|
+
catch (writeError) {
|
|
505
|
+
// Clean up temp file if it exists
|
|
506
|
+
try {
|
|
507
|
+
await fs.unlink(tempPath);
|
|
508
|
+
}
|
|
509
|
+
catch {
|
|
510
|
+
// Ignore cleanup errors
|
|
511
|
+
}
|
|
512
|
+
throw writeError;
|
|
513
|
+
}
|
|
432
514
|
this.editHistory.push({
|
|
433
515
|
command: "insert",
|
|
434
516
|
path: filePath,
|
|
@@ -728,5 +810,367 @@ export class TextEditorTool {
|
|
|
728
810
|
console.warn(`Failed to create checkpoint: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
729
811
|
}
|
|
730
812
|
}
|
|
813
|
+
/**
|
|
814
|
+
* Find a match by normalizing whitespace differences
|
|
815
|
+
* Handles: trailing whitespace, tabs vs spaces, line ending differences, indentation changes
|
|
816
|
+
*/
|
|
817
|
+
findNormalizedMatch(content, searchStr) {
|
|
818
|
+
// Normalize line endings first
|
|
819
|
+
const normalizedContent = content.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
820
|
+
const normalizedSearch = searchStr.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
821
|
+
// If exact match after line ending normalization, find and return the actual string
|
|
822
|
+
if (normalizedContent.includes(normalizedSearch)) {
|
|
823
|
+
// Find the position in normalized content
|
|
824
|
+
const startPos = normalizedContent.indexOf(normalizedSearch);
|
|
825
|
+
const endPos = startPos + normalizedSearch.length;
|
|
826
|
+
// Map position back to original content
|
|
827
|
+
let originalStartPos = 0;
|
|
828
|
+
let normalizedPos = 0;
|
|
829
|
+
for (let i = 0; i < content.length && normalizedPos < startPos; i++) {
|
|
830
|
+
if (content[i] === '\r' && content[i + 1] === '\n') {
|
|
831
|
+
normalizedPos++; // \r\n becomes \n
|
|
832
|
+
i++; // Skip the \n
|
|
833
|
+
}
|
|
834
|
+
else if (content[i] === '\r') {
|
|
835
|
+
normalizedPos++; // \r becomes \n
|
|
836
|
+
}
|
|
837
|
+
else {
|
|
838
|
+
normalizedPos++;
|
|
839
|
+
}
|
|
840
|
+
originalStartPos = i + 1;
|
|
841
|
+
}
|
|
842
|
+
// Find the end position in original
|
|
843
|
+
let originalEndPos = originalStartPos;
|
|
844
|
+
for (let i = originalStartPos; i < content.length && normalizedPos < endPos; i++) {
|
|
845
|
+
if (content[i] === '\r' && content[i + 1] === '\n') {
|
|
846
|
+
normalizedPos++;
|
|
847
|
+
i++;
|
|
848
|
+
}
|
|
849
|
+
else if (content[i] === '\r') {
|
|
850
|
+
normalizedPos++;
|
|
851
|
+
}
|
|
852
|
+
else {
|
|
853
|
+
normalizedPos++;
|
|
854
|
+
}
|
|
855
|
+
originalEndPos = i + 1;
|
|
856
|
+
}
|
|
857
|
+
return content.substring(originalStartPos, originalEndPos);
|
|
858
|
+
}
|
|
859
|
+
const contentLines = content.split(/\r\n|\r|\n/);
|
|
860
|
+
const searchLines = searchStr.split(/\r\n|\r|\n/);
|
|
861
|
+
// Filter out empty lines from search for more flexible matching
|
|
862
|
+
const searchLinesNonEmpty = searchLines.filter(l => l.trim().length > 0);
|
|
863
|
+
// Try matching with trailing whitespace trimmed from each line
|
|
864
|
+
for (let i = 0; i <= contentLines.length - searchLines.length; i++) {
|
|
865
|
+
let match = true;
|
|
866
|
+
for (let j = 0; j < searchLines.length; j++) {
|
|
867
|
+
const contentLine = contentLines[i + j].trimEnd();
|
|
868
|
+
const searchLine = searchLines[j].trimEnd();
|
|
869
|
+
if (contentLine !== searchLine) {
|
|
870
|
+
match = false;
|
|
871
|
+
break;
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
if (match) {
|
|
875
|
+
return this.extractOriginalBlock(content, i, searchLines.length);
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
// Try matching with all whitespace fully normalized (aggressive mode)
|
|
879
|
+
// This handles indentation differences like 2-space vs 4-space
|
|
880
|
+
for (let i = 0; i <= contentLines.length - searchLines.length; i++) {
|
|
881
|
+
let match = true;
|
|
882
|
+
for (let j = 0; j < searchLines.length; j++) {
|
|
883
|
+
const contentLine = this.normalizeLineAggressively(contentLines[i + j]);
|
|
884
|
+
const searchLine = this.normalizeLineAggressively(searchLines[j]);
|
|
885
|
+
if (contentLine !== searchLine) {
|
|
886
|
+
match = false;
|
|
887
|
+
break;
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
if (match) {
|
|
891
|
+
return this.extractOriginalBlock(content, i, searchLines.length);
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
// Try matching with blank lines skipped in both (handles extra/missing blank lines)
|
|
895
|
+
const contentLinesNonEmpty = contentLines.map((l, idx) => ({ line: l, idx })).filter(x => x.line.trim().length > 0);
|
|
896
|
+
if (searchLinesNonEmpty.length > 0 && searchLinesNonEmpty.length <= contentLinesNonEmpty.length) {
|
|
897
|
+
for (let i = 0; i <= contentLinesNonEmpty.length - searchLinesNonEmpty.length; i++) {
|
|
898
|
+
let match = true;
|
|
899
|
+
for (let j = 0; j < searchLinesNonEmpty.length; j++) {
|
|
900
|
+
const contentLine = this.normalizeLineAggressively(contentLinesNonEmpty[i + j].line);
|
|
901
|
+
const searchLine = this.normalizeLineAggressively(searchLinesNonEmpty[j]);
|
|
902
|
+
if (contentLine !== searchLine) {
|
|
903
|
+
match = false;
|
|
904
|
+
break;
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
if (match) {
|
|
908
|
+
// Found a match - extract from first to last matching line
|
|
909
|
+
const startIdx = contentLinesNonEmpty[i].idx;
|
|
910
|
+
const endIdx = contentLinesNonEmpty[i + searchLinesNonEmpty.length - 1].idx;
|
|
911
|
+
return this.extractOriginalBlock(content, startIdx, endIdx - startIdx + 1);
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
return null;
|
|
916
|
+
}
|
|
917
|
+
/**
|
|
918
|
+
* Aggressively normalize a line for matching - removes all indentation and collapses whitespace
|
|
919
|
+
*/
|
|
920
|
+
normalizeLineAggressively(line) {
|
|
921
|
+
return line
|
|
922
|
+
.trim() // Remove leading/trailing whitespace completely
|
|
923
|
+
.replace(/\s+/g, ' ') // Collapse multiple spaces to single space
|
|
924
|
+
.replace(/\s*([{}()[\];,:])\s*/g, '$1') // Remove spaces around punctuation
|
|
925
|
+
.replace(/["'`]/g, '"'); // Normalize quote styles
|
|
926
|
+
}
|
|
927
|
+
/**
|
|
928
|
+
* Extract a block of lines from original content, preserving original line endings
|
|
929
|
+
*/
|
|
930
|
+
extractOriginalBlock(content, startLineIdx, numLines) {
|
|
931
|
+
// Find line positions in original content
|
|
932
|
+
const linePositions = [];
|
|
933
|
+
let pos = 0;
|
|
934
|
+
let lineStart = 0;
|
|
935
|
+
while (pos <= content.length) {
|
|
936
|
+
if (pos === content.length || content[pos] === '\n' || content[pos] === '\r') {
|
|
937
|
+
const lineEnd = pos;
|
|
938
|
+
linePositions.push({ start: lineStart, end: lineEnd });
|
|
939
|
+
if (pos < content.length) {
|
|
940
|
+
// Skip line ending
|
|
941
|
+
if (content[pos] === '\r' && content[pos + 1] === '\n') {
|
|
942
|
+
pos += 2;
|
|
943
|
+
}
|
|
944
|
+
else {
|
|
945
|
+
pos += 1;
|
|
946
|
+
}
|
|
947
|
+
lineStart = pos;
|
|
948
|
+
}
|
|
949
|
+
else {
|
|
950
|
+
break;
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
else {
|
|
954
|
+
pos++;
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
// Extract the requested lines
|
|
958
|
+
if (startLineIdx >= linePositions.length) {
|
|
959
|
+
return '';
|
|
960
|
+
}
|
|
961
|
+
const endLineIdx = Math.min(startLineIdx + numLines - 1, linePositions.length - 1);
|
|
962
|
+
const blockStart = linePositions[startLineIdx].start;
|
|
963
|
+
const blockEnd = linePositions[endLineIdx].end;
|
|
964
|
+
return content.substring(blockStart, blockEnd);
|
|
965
|
+
}
|
|
966
|
+
/**
|
|
967
|
+
* Normalize indentation by converting tabs to spaces and trimming trailing whitespace
|
|
968
|
+
*/
|
|
969
|
+
normalizeIndentation(line) {
|
|
970
|
+
return line.replace(/\t/g, ' ').trimEnd();
|
|
971
|
+
}
|
|
972
|
+
/**
|
|
973
|
+
* Find a similar block of code using line-by-line similarity matching
|
|
974
|
+
* Uses aggressive normalization and wider search windows
|
|
975
|
+
*/
|
|
976
|
+
findSimilarBlock(content, searchStr) {
|
|
977
|
+
const contentLines = content.split(/\r?\n/);
|
|
978
|
+
const searchLines = searchStr.split(/\r?\n/);
|
|
979
|
+
if (searchLines.length === 0) {
|
|
980
|
+
return { match: null };
|
|
981
|
+
}
|
|
982
|
+
// Filter out blank lines for more robust matching
|
|
983
|
+
const searchLinesNonEmpty = searchLines.filter(l => l.trim().length > 0);
|
|
984
|
+
if (searchLinesNonEmpty.length === 0) {
|
|
985
|
+
return { match: null };
|
|
986
|
+
}
|
|
987
|
+
// Find the best matching block
|
|
988
|
+
let bestMatch = null;
|
|
989
|
+
const minScore = 0.55; // Lowered threshold for more tolerance
|
|
990
|
+
// Normalize first search line for initial matching
|
|
991
|
+
const firstSearchLineNorm = this.normalizeLineAggressively(searchLinesNonEmpty[0]);
|
|
992
|
+
for (let i = 0; i < contentLines.length; i++) {
|
|
993
|
+
const firstContentLineNorm = this.normalizeLineAggressively(contentLines[i]);
|
|
994
|
+
// Quick check: first non-empty line should have some similarity (using normalized comparison)
|
|
995
|
+
if (firstContentLineNorm.length === 0)
|
|
996
|
+
continue;
|
|
997
|
+
if (this.lineSimilarityNormalized(firstContentLineNorm, firstSearchLineNorm) < 0.4) {
|
|
998
|
+
continue;
|
|
999
|
+
}
|
|
1000
|
+
// Try to match the block starting at this position - wider window (+15 instead of +5)
|
|
1001
|
+
const blockEnd = Math.min(i + searchLines.length + 15, contentLines.length);
|
|
1002
|
+
for (let endIdx = Math.max(i, i + searchLinesNonEmpty.length - 3); endIdx <= blockEnd; endIdx++) {
|
|
1003
|
+
if (endIdx < i)
|
|
1004
|
+
continue;
|
|
1005
|
+
const candidateLines = contentLines.slice(i, endIdx + 1);
|
|
1006
|
+
const score = this.blockSimilarityNormalized(candidateLines, searchLinesNonEmpty);
|
|
1007
|
+
if (score >= minScore && (!bestMatch || score > bestMatch.score)) {
|
|
1008
|
+
bestMatch = { startIdx: i, endIdx, score };
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
}
|
|
1012
|
+
if (bestMatch && bestMatch.score >= minScore) {
|
|
1013
|
+
return { match: contentLines.slice(bestMatch.startIdx, bestMatch.endIdx + 1).join('\n') };
|
|
1014
|
+
}
|
|
1015
|
+
// If no match found, try to provide a helpful suggestion
|
|
1016
|
+
const suggestion = this.findClosestMatchSuggestion(contentLines, searchLines);
|
|
1017
|
+
return { match: null, suggestion };
|
|
1018
|
+
}
|
|
1019
|
+
/**
|
|
1020
|
+
* Line similarity using normalized comparison
|
|
1021
|
+
*/
|
|
1022
|
+
lineSimilarityNormalized(norm1, norm2) {
|
|
1023
|
+
if (norm1 === norm2)
|
|
1024
|
+
return 1;
|
|
1025
|
+
if (norm1.length === 0 && norm2.length === 0)
|
|
1026
|
+
return 1;
|
|
1027
|
+
if (norm1.length === 0 || norm2.length === 0)
|
|
1028
|
+
return 0;
|
|
1029
|
+
const maxLen = Math.max(norm1.length, norm2.length);
|
|
1030
|
+
const distance = this.levenshteinDistance(norm1, norm2);
|
|
1031
|
+
return 1 - (distance / maxLen);
|
|
1032
|
+
}
|
|
1033
|
+
/**
|
|
1034
|
+
* Block similarity using normalized lines and skipping blank lines
|
|
1035
|
+
*/
|
|
1036
|
+
blockSimilarityNormalized(candidateLines, searchLinesNonEmpty) {
|
|
1037
|
+
if (searchLinesNonEmpty.length === 0)
|
|
1038
|
+
return 0;
|
|
1039
|
+
// Normalize and filter candidate lines
|
|
1040
|
+
const candidateNonEmpty = candidateLines
|
|
1041
|
+
.map(l => this.normalizeLineAggressively(l))
|
|
1042
|
+
.filter(l => l.length > 0);
|
|
1043
|
+
if (candidateNonEmpty.length === 0)
|
|
1044
|
+
return 0;
|
|
1045
|
+
// Use LCS-style matching for better tolerance
|
|
1046
|
+
let matchedCount = 0;
|
|
1047
|
+
let ci = 0;
|
|
1048
|
+
for (const searchLine of searchLinesNonEmpty) {
|
|
1049
|
+
const searchNorm = this.normalizeLineAggressively(searchLine);
|
|
1050
|
+
if (searchNorm.length === 0)
|
|
1051
|
+
continue;
|
|
1052
|
+
// Look for a matching line in remaining candidates
|
|
1053
|
+
while (ci < candidateNonEmpty.length) {
|
|
1054
|
+
const sim = this.lineSimilarityNormalized(candidateNonEmpty[ci], searchNorm);
|
|
1055
|
+
ci++;
|
|
1056
|
+
if (sim >= 0.5) {
|
|
1057
|
+
matchedCount++;
|
|
1058
|
+
break;
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
return matchedCount / searchLinesNonEmpty.length;
|
|
1063
|
+
}
|
|
1064
|
+
/**
|
|
1065
|
+
* Calculate similarity between two lines (0-1)
|
|
1066
|
+
*/
|
|
1067
|
+
lineSimilarity(line1, line2) {
|
|
1068
|
+
const s1 = line1.trim();
|
|
1069
|
+
const s2 = line2.trim();
|
|
1070
|
+
if (s1 === s2)
|
|
1071
|
+
return 1;
|
|
1072
|
+
if (s1.length === 0 && s2.length === 0)
|
|
1073
|
+
return 1;
|
|
1074
|
+
if (s1.length === 0 || s2.length === 0)
|
|
1075
|
+
return 0;
|
|
1076
|
+
// Use Levenshtein distance-based similarity
|
|
1077
|
+
const maxLen = Math.max(s1.length, s2.length);
|
|
1078
|
+
const distance = this.levenshteinDistance(s1, s2);
|
|
1079
|
+
return 1 - (distance / maxLen);
|
|
1080
|
+
}
|
|
1081
|
+
/**
|
|
1082
|
+
* Levenshtein distance for string similarity
|
|
1083
|
+
*/
|
|
1084
|
+
levenshteinDistance(s1, s2) {
|
|
1085
|
+
const m = s1.length;
|
|
1086
|
+
const n = s2.length;
|
|
1087
|
+
// Use two rows instead of full matrix for memory efficiency
|
|
1088
|
+
let prev = new Array(n + 1);
|
|
1089
|
+
let curr = new Array(n + 1);
|
|
1090
|
+
for (let j = 0; j <= n; j++) {
|
|
1091
|
+
prev[j] = j;
|
|
1092
|
+
}
|
|
1093
|
+
for (let i = 1; i <= m; i++) {
|
|
1094
|
+
curr[0] = i;
|
|
1095
|
+
for (let j = 1; j <= n; j++) {
|
|
1096
|
+
if (s1[i - 1] === s2[j - 1]) {
|
|
1097
|
+
curr[j] = prev[j - 1];
|
|
1098
|
+
}
|
|
1099
|
+
else {
|
|
1100
|
+
curr[j] = 1 + Math.min(prev[j - 1], prev[j], curr[j - 1]);
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
[prev, curr] = [curr, prev];
|
|
1104
|
+
}
|
|
1105
|
+
return prev[n];
|
|
1106
|
+
}
|
|
1107
|
+
/**
|
|
1108
|
+
* Find and suggest the closest matching location
|
|
1109
|
+
*/
|
|
1110
|
+
findClosestMatchSuggestion(contentLines, searchLines) {
|
|
1111
|
+
if (searchLines.length === 0)
|
|
1112
|
+
return undefined;
|
|
1113
|
+
const firstSearchLine = searchLines[0].trim();
|
|
1114
|
+
let bestLineIdx = -1;
|
|
1115
|
+
let bestSim = 0;
|
|
1116
|
+
for (let i = 0; i < contentLines.length; i++) {
|
|
1117
|
+
const sim = this.lineSimilarity(contentLines[i], firstSearchLine);
|
|
1118
|
+
if (sim > bestSim) {
|
|
1119
|
+
bestSim = sim;
|
|
1120
|
+
bestLineIdx = i;
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1123
|
+
if (bestLineIdx >= 0 && bestSim >= 0.4) {
|
|
1124
|
+
const actualLine = contentLines[bestLineIdx].trim();
|
|
1125
|
+
const lineNum = bestLineIdx + 1;
|
|
1126
|
+
if (bestSim < 0.9) {
|
|
1127
|
+
return `Did you mean line ${lineNum}? Found: "${actualLine.substring(0, 60)}${actualLine.length > 60 ? '...' : ''}"`;
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
return undefined;
|
|
1131
|
+
}
|
|
1132
|
+
/**
|
|
1133
|
+
* Find a similar single line in the content
|
|
1134
|
+
*/
|
|
1135
|
+
findSimilarLine(content, searchStr) {
|
|
1136
|
+
const lines = content.split(/\r?\n/);
|
|
1137
|
+
const searchTrimmed = searchStr.trim();
|
|
1138
|
+
// First try exact match with trimmed whitespace
|
|
1139
|
+
for (const line of lines) {
|
|
1140
|
+
if (line.trim() === searchTrimmed) {
|
|
1141
|
+
return { match: line };
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
1144
|
+
// Try normalized indentation match
|
|
1145
|
+
const searchNormalized = this.normalizeIndentation(searchStr);
|
|
1146
|
+
for (const line of lines) {
|
|
1147
|
+
if (this.normalizeIndentation(line) === searchNormalized) {
|
|
1148
|
+
return { match: line };
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1151
|
+
// Find best similar line
|
|
1152
|
+
let bestLine = null;
|
|
1153
|
+
let bestSim = 0;
|
|
1154
|
+
const minSim = 0.75; // Require 75% similarity for single lines
|
|
1155
|
+
for (const line of lines) {
|
|
1156
|
+
const sim = this.lineSimilarity(line, searchStr);
|
|
1157
|
+
if (sim > bestSim) {
|
|
1158
|
+
bestSim = sim;
|
|
1159
|
+
bestLine = line;
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
if (bestLine && bestSim >= minSim) {
|
|
1163
|
+
return { match: bestLine };
|
|
1164
|
+
}
|
|
1165
|
+
// Provide suggestion if we found something close
|
|
1166
|
+
if (bestLine && bestSim >= 0.5) {
|
|
1167
|
+
const lineIdx = lines.indexOf(bestLine);
|
|
1168
|
+
return {
|
|
1169
|
+
match: null,
|
|
1170
|
+
suggestion: `Did you mean line ${lineIdx + 1}? Found: "${bestLine.trim().substring(0, 50)}${bestLine.trim().length > 50 ? '...' : ''}"`
|
|
1171
|
+
};
|
|
1172
|
+
}
|
|
1173
|
+
return { match: null };
|
|
1174
|
+
}
|
|
731
1175
|
}
|
|
732
1176
|
//# sourceMappingURL=text-editor.js.map
|