From 8739d1d15c3278de4f8f96a45d9336f5eedbea7d Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Tue, 26 May 2026 16:03:20 +0300 Subject: [PATCH] =?UTF-8?q?refactor(web-test):=20=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=82=D1=83=D1=80=D0=B0=20=E2=80=94=20engine/=20wrapper?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=BD=D1=83=D1=82=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D0=B8=D1=85=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D0=B5?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Перенос всей внутрянки движка под scripts/engine/: - core/, forms/, nav/, table/, recording/ → engine// Публичные entry-точки остаются в scripts/ корне без изменений: - browser.mjs, dom.mjs, run.mjs — компат не ломаем. Симметричный layout, легко читать с первого взгляда: scripts/ browser.mjs, dom.mjs, run.mjs ← публичные entries engine/ ← внутренности движка (dom/, cli/ — место под будущий распил dom.mjs / run.mjs) Технические правки после переезда: - browser.mjs: ./core/... → ./engine/core/... (23 импорта) - engine/*/* модули: ../browser.mjs → ../../browser.mjs (11 импортов) - engine/*/* модули: ../dom.mjs → ../../dom.mjs (12 импортов) - engine/recording/capture.mjs: dynamic import('../browser.mjs') → import('../../browser.mjs') - engine/core/state.mjs: projectRoot пересчитан (5 → 6 уровней вверх) - Git rename detection срабатывает — история файлов сохраняется Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/web-test/scripts/browser.mjs | 46 +++++++++---------- .../scripts/{ => engine}/core/click.mjs | 4 +- .../scripts/{ => engine}/core/errors.mjs | 2 +- .../scripts/{ => engine}/core/helpers.mjs | 2 +- .../scripts/{ => engine}/core/session.mjs | 2 +- .../scripts/{ => engine}/core/state.mjs | 4 +- .../scripts/{ => engine}/core/wait.mjs | 2 +- .../scripts/{ => engine}/forms/close.mjs | 4 +- .../scripts/{ => engine}/forms/fill.mjs | 4 +- .../{ => engine}/forms/select-value.mjs | 4 +- .../scripts/{ => engine}/nav/navigation.mjs | 4 +- .../{ => engine}/recording/captions.mjs | 0 .../{ => engine}/recording/capture.mjs | 2 +- .../{ => engine}/recording/highlight.mjs | 2 +- .../{ => engine}/recording/narration.mjs | 0 .../scripts/{ => engine}/recording/tts.mjs | 0 .../scripts/{ => engine}/table/filter.mjs | 4 +- .../{ => engine}/table/grid-toggle.mjs | 0 .../scripts/{ => engine}/table/grid.mjs | 4 +- .../scripts/{ => engine}/table/row-fill.mjs | 4 +- .../{ => engine}/table/spreadsheet.mjs | 4 +- 21 files changed, 49 insertions(+), 49 deletions(-) rename .claude/skills/web-test/scripts/{ => engine}/core/click.mjs (97%) rename .claude/skills/web-test/scripts/{ => engine}/core/errors.mjs (97%) rename .claude/skills/web-test/scripts/{ => engine}/core/helpers.mjs (96%) rename .claude/skills/web-test/scripts/{ => engine}/core/session.mjs (97%) rename .claude/skills/web-test/scripts/{ => engine}/core/state.mjs (96%) rename .claude/skills/web-test/scripts/{ => engine}/core/wait.mjs (95%) rename .claude/skills/web-test/scripts/{ => engine}/forms/close.mjs (93%) rename .claude/skills/web-test/scripts/{ => engine}/forms/fill.mjs (96%) rename .claude/skills/web-test/scripts/{ => engine}/forms/select-value.mjs (97%) rename .claude/skills/web-test/scripts/{ => engine}/nav/navigation.mjs (96%) rename .claude/skills/web-test/scripts/{ => engine}/recording/captions.mjs (100%) rename .claude/skills/web-test/scripts/{ => engine}/recording/capture.mjs (96%) rename .claude/skills/web-test/scripts/{ => engine}/recording/highlight.mjs (97%) rename .claude/skills/web-test/scripts/{ => engine}/recording/narration.mjs (100%) rename .claude/skills/web-test/scripts/{ => engine}/recording/tts.mjs (100%) rename .claude/skills/web-test/scripts/{ => engine}/table/filter.mjs (97%) rename .claude/skills/web-test/scripts/{ => engine}/table/grid-toggle.mjs (100%) rename .claude/skills/web-test/scripts/{ => engine}/table/grid.mjs (96%) rename .claude/skills/web-test/scripts/{ => engine}/table/row-fill.mjs (97%) rename .claude/skills/web-test/scripts/{ => engine}/table/spreadsheet.mjs (97%) diff --git a/.claude/skills/web-test/scripts/browser.mjs b/.claude/skills/web-test/scripts/browser.mjs index 29053f74..84ca517d 100644 --- a/.claude/skills/web-test/scripts/browser.mjs +++ b/.claude/skills/web-test/scripts/browser.mjs @@ -35,7 +35,7 @@ import { LOAD_TIMEOUT, INIT_TIMEOUT, ACTION_WAIT, MAX_WAIT, POLL_INTERVAL, STABLE_CYCLES, EXT_ID, projectRoot, resolveProjectPath, normYo, isConnected, ensureConnected, getPage, setPreserveClipboard, -} from './core/state.mjs'; +} from './engine/core/state.mjs'; export { isConnected, getPage, setPreserveClipboard, ensureConnected }; export async function saveClipboard() { @@ -130,27 +130,27 @@ export { connect, disconnect, attach, detach, getSession, createContext, setActiveContext, listContexts, getActiveContext, hasContext, closeContext, -} from './core/session.mjs'; +} from './engine/core/session.mjs'; // ============================================================ // Wait + error/modal handling — extracted to core/{wait,errors}.mjs // ============================================================ import { waitForStable, waitForCondition, startNetworkMonitor, -} from './core/wait.mjs'; +} from './engine/core/wait.mjs'; import { closeModals, checkForErrors, dismissPendingErrors, fetchErrorStack, _detectPlatformDialogs, _closePlatformDialogs, -} from './core/errors.mjs'; +} from './engine/core/errors.mjs'; import { safeClick, findFieldInputId, readEdd, returnFormState, detectNewForm as helperDetectNewForm, -} from './core/helpers.mjs'; -import { getGridToggleIcon, shouldClickToggle } from './table/grid-toggle.mjs'; +} from './engine/core/helpers.mjs'; +import { getGridToggleIcon, shouldClickToggle } from './engine/table/grid-toggle.mjs'; // Re-export only what was publicly exported before the refactor. // waitForStable/waitForCondition/startNetworkMonitor/closeModals/checkForErrors/ // dismissPendingErrors are internal helpers — imported above for local use only. -export { fetchErrorStack } from './core/errors.mjs'; +export { fetchErrorStack } from './engine/core/errors.mjs'; /* getPage moved to core/state.mjs */ @@ -160,7 +160,7 @@ export { fetchErrorStack } from './core/errors.mjs'; export { getPageState, getSections, navigateSection, getCommands, openCommand, switchTab, openFile, navigateLink, -} from './nav/navigation.mjs'; +} from './engine/nav/navigation.mjs'; /** Read current form state. Single evaluate call via combined script. */ export async function getFormState() { @@ -184,50 +184,50 @@ export async function getFormState() { // ============================================================ // Table reading + SpreadsheetDocument — extracted to table/spreadsheet.mjs // ============================================================ -export { readTable } from './table/grid.mjs'; -export { readSpreadsheet } from './table/spreadsheet.mjs'; +export { readTable } from './engine/table/grid.mjs'; +export { readSpreadsheet } from './engine/table/spreadsheet.mjs'; // ============================================================ // Value selection (DLB/CB) — extracted to forms/select-value.mjs // ============================================================ -export { selectValue } from './forms/select-value.mjs'; +export { selectValue } from './engine/forms/select-value.mjs'; import { selectValue, pickFromSelectionForm, isTypeDialog, pickFromTypeDialog, fillReferenceField, -} from './forms/select-value.mjs'; +} from './engine/forms/select-value.mjs'; // ============================================================ // Fill fields — extracted to forms/fill.mjs // ============================================================ -export { fillFields, fillField } from './forms/fill.mjs'; +export { fillFields, fillField } from './engine/forms/fill.mjs'; // ============================================================ // clickElement dispatcher — extracted to core/click.mjs // ============================================================ -export { clickElement } from './core/click.mjs'; -import { clickElement } from './core/click.mjs'; +export { clickElement } from './engine/core/click.mjs'; +import { clickElement } from './engine/core/click.mjs'; // ============================================================ // Close form — extracted to forms/close.mjs // ============================================================ -export { closeForm } from './forms/close.mjs'; +export { closeForm } from './engine/forms/close.mjs'; // ============================================================ // fillTableRow / deleteTableRow — extracted to table/{row-fill,grid}.mjs // ============================================================ -export { fillTableRow } from './table/row-fill.mjs'; -export { deleteTableRow } from './table/grid.mjs'; +export { fillTableRow } from './engine/table/row-fill.mjs'; +export { deleteTableRow } from './engine/table/grid.mjs'; // ============================================================ // List filters — extracted to table/filter.mjs // ============================================================ -export { filterList, unfilterList } from './table/filter.mjs'; +export { filterList, unfilterList } from './engine/table/filter.mjs'; // ============================================================ @@ -235,15 +235,15 @@ export { filterList, unfilterList } from './table/filter.mjs'; // ============================================================ export { screenshot, wait, isRecording, startRecording, stopRecording, -} from './recording/capture.mjs'; +} from './engine/recording/capture.mjs'; export { showCaption, hideCaption, getCaptions, showTitleSlide, hideTitleSlide, showImage, hideImage, -} from './recording/captions.mjs'; +} from './engine/recording/captions.mjs'; export { highlight, unhighlight, setHighlight, isHighlightMode, -} from './recording/highlight.mjs'; -export { addNarration } from './recording/narration.mjs'; +} from './engine/recording/highlight.mjs'; +export { addNarration } from './engine/recording/narration.mjs'; /* ensureConnected moved to core/state.mjs */ diff --git a/.claude/skills/web-test/scripts/core/click.mjs b/.claude/skills/web-test/scripts/engine/core/click.mjs similarity index 97% rename from .claude/skills/web-test/scripts/core/click.mjs rename to .claude/skills/web-test/scripts/engine/core/click.mjs index 160a756c..e33cc575 100644 --- a/.claude/skills/web-test/scripts/core/click.mjs +++ b/.claude/skills/web-test/scripts/engine/core/click.mjs @@ -6,7 +6,7 @@ import { } from './state.mjs'; import { detectFormScript, findClickTargetScript, resolveGridScript, readSubmenuScript, -} from '../dom.mjs'; +} from '../../dom.mjs'; import { dismissPendingErrors, checkForErrors, fetchErrorStack } from './errors.mjs'; import { waitForStable, startNetworkMonitor } from './wait.mjs'; import { highlight, unhighlight } from '../recording/highlight.mjs'; @@ -16,7 +16,7 @@ import { clickSpreadsheetCell, findSpreadsheetCellByText, } from '../table/spreadsheet.mjs'; // getFormState still in browser.mjs. -import { getFormState } from '../browser.mjs'; +import { getFormState } from '../../browser.mjs'; /** Click a button/hyperlink/tab on the current form. Use {dblclick: true} to double-click (open items from lists). * First argument can also be an object { row, column } to click a SpreadsheetDocument cell. */ diff --git a/.claude/skills/web-test/scripts/core/errors.mjs b/.claude/skills/web-test/scripts/engine/core/errors.mjs similarity index 97% rename from .claude/skills/web-test/scripts/core/errors.mjs rename to .claude/skills/web-test/scripts/engine/core/errors.mjs index 4e72381f..1d37a048 100644 --- a/.claude/skills/web-test/scripts/core/errors.mjs +++ b/.claude/skills/web-test/scripts/engine/core/errors.mjs @@ -2,7 +2,7 @@ // Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import { page } from './state.mjs'; -import { checkErrorsScript } from '../dom.mjs'; +import { checkErrorsScript } from '../../dom.mjs'; import { waitForStable } from './wait.mjs'; /** diff --git a/.claude/skills/web-test/scripts/core/helpers.mjs b/.claude/skills/web-test/scripts/engine/core/helpers.mjs similarity index 96% rename from .claude/skills/web-test/scripts/core/helpers.mjs rename to .claude/skills/web-test/scripts/engine/core/helpers.mjs index 810cf2a9..c6d1af26 100644 --- a/.claude/skills/web-test/scripts/core/helpers.mjs +++ b/.claude/skills/web-test/scripts/engine/core/helpers.mjs @@ -4,7 +4,7 @@ import { page } from './state.mjs'; import { dismissPendingErrors, checkForErrors } from './errors.mjs'; -import { getFormState } from '../browser.mjs'; +import { getFormState } from '../../browser.mjs'; /** * page.click with the standard "intercepts pointer events" retry ladder: diff --git a/.claude/skills/web-test/scripts/core/session.mjs b/.claude/skills/web-test/scripts/engine/core/session.mjs similarity index 97% rename from .claude/skills/web-test/scripts/core/session.mjs rename to .claude/skills/web-test/scripts/engine/core/session.mjs index 78905977..d2b7dfbf 100644 --- a/.claude/skills/web-test/scripts/core/session.mjs +++ b/.claude/skills/web-test/scripts/engine/core/session.mjs @@ -17,7 +17,7 @@ import { stopRecording } from '../recording/capture.mjs'; // getPageState lives in browser.mjs (moves to nav/navigation.mjs in a later stage). // Static import is a deliberate ESM cycle — fine because the binding is used at // call time (inside async connect/createContext), not at module evaluation time. -import { getPageState } from '../browser.mjs'; +import { getPageState } from '../../browser.mjs'; /** * Find the 1C browser extension in Chrome/Edge user profiles. diff --git a/.claude/skills/web-test/scripts/core/state.mjs b/.claude/skills/web-test/scripts/engine/core/state.mjs similarity index 96% rename from .claude/skills/web-test/scripts/core/state.mjs rename to .claude/skills/web-test/scripts/engine/core/state.mjs index 395a58ad..6c193769 100644 --- a/.claude/skills/web-test/scripts/core/state.mjs +++ b/.claude/skills/web-test/scripts/engine/core/state.mjs @@ -10,9 +10,9 @@ import { dirname, resolve as pathResolve } from 'path'; import { fileURLToPath } from 'url'; -// Project root: 4 levels up from .claude/skills/web-test/scripts/core/state.mjs +// Project root: 6 levels up from .claude/skills/web-test/scripts/engine/core/state.mjs const __fn_state = fileURLToPath(import.meta.url); -export const projectRoot = pathResolve(dirname(__fn_state), '..', '..', '..', '..', '..'); +export const projectRoot = pathResolve(dirname(__fn_state), '..', '..', '..', '..', '..', '..'); /** Resolve a user-provided path relative to the project root (not cwd). */ export const resolveProjectPath = (p) => pathResolve(projectRoot, p); diff --git a/.claude/skills/web-test/scripts/core/wait.mjs b/.claude/skills/web-test/scripts/engine/core/wait.mjs similarity index 95% rename from .claude/skills/web-test/scripts/core/wait.mjs rename to .claude/skills/web-test/scripts/engine/core/wait.mjs index 8e58f41a..20c84ed2 100644 --- a/.claude/skills/web-test/scripts/core/wait.mjs +++ b/.claude/skills/web-test/scripts/engine/core/wait.mjs @@ -2,7 +2,7 @@ // Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import { page, MAX_WAIT, POLL_INTERVAL, STABLE_CYCLES } from './state.mjs'; -import { detectFormScript } from '../dom.mjs'; +import { detectFormScript } from '../../dom.mjs'; /** * Smart wait: poll until DOM is stable and no loading indicators are visible. diff --git a/.claude/skills/web-test/scripts/forms/close.mjs b/.claude/skills/web-test/scripts/engine/forms/close.mjs similarity index 93% rename from .claude/skills/web-test/scripts/forms/close.mjs rename to .claude/skills/web-test/scripts/engine/forms/close.mjs index 6ff2b65d..c4faae14 100644 --- a/.claude/skills/web-test/scripts/forms/close.mjs +++ b/.claude/skills/web-test/scripts/engine/forms/close.mjs @@ -2,10 +2,10 @@ // Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import { page, recorder, ensureConnected } from '../core/state.mjs'; -import { detectFormScript } from '../dom.mjs'; +import { detectFormScript } from '../../dom.mjs'; import { dismissPendingErrors, checkForErrors, _detectPlatformDialogs, _closePlatformDialogs } from '../core/errors.mjs'; import { waitForStable } from '../core/wait.mjs'; -import { getFormState } from '../browser.mjs'; +import { getFormState } from '../../browser.mjs'; /** * Close the current form/dialog via Escape. diff --git a/.claude/skills/web-test/scripts/forms/fill.mjs b/.claude/skills/web-test/scripts/engine/forms/fill.mjs similarity index 96% rename from .claude/skills/web-test/scripts/forms/fill.mjs rename to .claude/skills/web-test/scripts/engine/forms/fill.mjs index c98573ea..dcd669e7 100644 --- a/.claude/skills/web-test/scripts/forms/fill.mjs +++ b/.claude/skills/web-test/scripts/engine/forms/fill.mjs @@ -6,7 +6,7 @@ import { } from '../core/state.mjs'; import { detectFormScript, resolveFieldsScript, readFormScript, -} from '../dom.mjs'; +} from '../../dom.mjs'; import { dismissPendingErrors, checkForErrors } from '../core/errors.mjs'; import { waitForStable, startNetworkMonitor } from '../core/wait.mjs'; import { highlight, unhighlight } from '../recording/highlight.mjs'; @@ -15,7 +15,7 @@ import { isTypeDialog, pickFromTypeDialog, } from './select-value.mjs'; // pasteText + getFormState live in browser.mjs. -import { pasteText, getFormState } from '../browser.mjs'; +import { pasteText, getFormState } from '../../browser.mjs'; /** Fill fields on the current form via Playwright page.fill(). Returns fill results + updated form. */ export async function fillFields(fields) { diff --git a/.claude/skills/web-test/scripts/forms/select-value.mjs b/.claude/skills/web-test/scripts/engine/forms/select-value.mjs similarity index 97% rename from .claude/skills/web-test/scripts/forms/select-value.mjs rename to .claude/skills/web-test/scripts/engine/forms/select-value.mjs index 527dafaa..bfe0892d 100644 --- a/.claude/skills/web-test/scripts/forms/select-value.mjs +++ b/.claude/skills/web-test/scripts/engine/forms/select-value.mjs @@ -7,7 +7,7 @@ import { import { detectFormScript, findFieldButtonScript, resolveFieldsScript, readSubmenuScript, checkErrorsScript, -} from '../dom.mjs'; +} from '../../dom.mjs'; import { dismissPendingErrors, checkForErrors } from '../core/errors.mjs'; import { waitForStable, waitForCondition } from '../core/wait.mjs'; import { highlight, unhighlight } from '../recording/highlight.mjs'; @@ -16,7 +16,7 @@ import { detectNewForm as helperDetectNewForm, } from '../core/helpers.mjs'; // pasteText + getFormState live in browser.mjs. -import { pasteText, getFormState } from '../browser.mjs'; +import { pasteText, getFormState } from '../../browser.mjs'; /** * Scan visible grid rows for a text match (exact → startsWith → includes). diff --git a/.claude/skills/web-test/scripts/nav/navigation.mjs b/.claude/skills/web-test/scripts/engine/nav/navigation.mjs similarity index 96% rename from .claude/skills/web-test/scripts/nav/navigation.mjs rename to .claude/skills/web-test/scripts/engine/nav/navigation.mjs index ecce3152..060396e6 100644 --- a/.claude/skills/web-test/scripts/nav/navigation.mjs +++ b/.claude/skills/web-test/scripts/engine/nav/navigation.mjs @@ -8,14 +8,14 @@ import { readSectionsScript, readTabsScript, readCommandsScript, navigateSectionScript, openCommandScript, switchTabScript, detectFormScript, -} from '../dom.mjs'; +} from '../../dom.mjs'; import { dismissPendingErrors, checkForErrors } from '../core/errors.mjs'; import { waitForStable, waitForCondition } from '../core/wait.mjs'; import { highlight, unhighlight } from '../recording/highlight.mjs'; import { returnFormState } from '../core/helpers.mjs'; // pasteText + getFormState live in browser.mjs (move to forms/ in a later stage). // Static import — ESM cycle that resolves at call time. -import { pasteText, getFormState } from '../browser.mjs'; +import { pasteText, getFormState } from '../../browser.mjs'; /** * Get current page state: active section, tabs. diff --git a/.claude/skills/web-test/scripts/recording/captions.mjs b/.claude/skills/web-test/scripts/engine/recording/captions.mjs similarity index 100% rename from .claude/skills/web-test/scripts/recording/captions.mjs rename to .claude/skills/web-test/scripts/engine/recording/captions.mjs diff --git a/.claude/skills/web-test/scripts/recording/capture.mjs b/.claude/skills/web-test/scripts/engine/recording/capture.mjs similarity index 96% rename from .claude/skills/web-test/scripts/recording/capture.mjs rename to .claude/skills/web-test/scripts/engine/recording/capture.mjs index ad94a4ee..d89f5ab1 100644 --- a/.claude/skills/web-test/scripts/recording/capture.mjs +++ b/.claude/skills/web-test/scripts/engine/recording/capture.mjs @@ -45,7 +45,7 @@ export async function wait(seconds) { await page.waitForTimeout(ms); } } - const { getFormState } = await import('../browser.mjs'); + const { getFormState } = await import('../../browser.mjs'); return await getFormState(); } diff --git a/.claude/skills/web-test/scripts/recording/highlight.mjs b/.claude/skills/web-test/scripts/engine/recording/highlight.mjs similarity index 97% rename from .claude/skills/web-test/scripts/recording/highlight.mjs rename to .claude/skills/web-test/scripts/engine/recording/highlight.mjs index bdf5eee1..a8fa3e6c 100644 --- a/.claude/skills/web-test/scripts/recording/highlight.mjs +++ b/.claude/skills/web-test/scripts/engine/recording/highlight.mjs @@ -8,7 +8,7 @@ import { import { readSubmenuScript, detectFormScript, resolveGridScript, findClickTargetScript, resolveFieldsScript, -} from '../dom.mjs'; +} from '../../dom.mjs'; /** * Highlight an element on the page (visual accent for video recordings). diff --git a/.claude/skills/web-test/scripts/recording/narration.mjs b/.claude/skills/web-test/scripts/engine/recording/narration.mjs similarity index 100% rename from .claude/skills/web-test/scripts/recording/narration.mjs rename to .claude/skills/web-test/scripts/engine/recording/narration.mjs diff --git a/.claude/skills/web-test/scripts/recording/tts.mjs b/.claude/skills/web-test/scripts/engine/recording/tts.mjs similarity index 100% rename from .claude/skills/web-test/scripts/recording/tts.mjs rename to .claude/skills/web-test/scripts/engine/recording/tts.mjs diff --git a/.claude/skills/web-test/scripts/table/filter.mjs b/.claude/skills/web-test/scripts/engine/table/filter.mjs similarity index 97% rename from .claude/skills/web-test/scripts/table/filter.mjs rename to .claude/skills/web-test/scripts/engine/table/filter.mjs index b1a398a0..db3ba8d1 100644 --- a/.claude/skills/web-test/scripts/table/filter.mjs +++ b/.claude/skills/web-test/scripts/engine/table/filter.mjs @@ -2,14 +2,14 @@ // Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import { page, ensureConnected, normYo, highlightMode, ACTION_WAIT } from '../core/state.mjs'; -import { detectFormScript, resolveGridScript } from '../dom.mjs'; +import { detectFormScript, resolveGridScript } from '../../dom.mjs'; import { dismissPendingErrors, checkForErrors } from '../core/errors.mjs'; import { waitForStable, waitForCondition } from '../core/wait.mjs'; import { highlight, unhighlight } from '../recording/highlight.mjs'; import { safeClick } from '../core/helpers.mjs'; import { selectValue, fillReferenceField } from '../forms/select-value.mjs'; // pasteText + getFormState + clickElement still in browser.mjs. -import { pasteText, getFormState, clickElement } from '../browser.mjs'; +import { pasteText, getFormState, clickElement } from '../../browser.mjs'; /** * Filter the current list by field value, or search via search bar. diff --git a/.claude/skills/web-test/scripts/table/grid-toggle.mjs b/.claude/skills/web-test/scripts/engine/table/grid-toggle.mjs similarity index 100% rename from .claude/skills/web-test/scripts/table/grid-toggle.mjs rename to .claude/skills/web-test/scripts/engine/table/grid-toggle.mjs diff --git a/.claude/skills/web-test/scripts/table/grid.mjs b/.claude/skills/web-test/scripts/engine/table/grid.mjs similarity index 96% rename from .claude/skills/web-test/scripts/table/grid.mjs rename to .claude/skills/web-test/scripts/engine/table/grid.mjs index 5b77e68f..b97b4d6b 100644 --- a/.claude/skills/web-test/scripts/table/grid.mjs +++ b/.claude/skills/web-test/scripts/engine/table/grid.mjs @@ -6,12 +6,12 @@ // Отдельно от SpreadsheetDocument (table/spreadsheet.mjs). import { page, ensureConnected } from '../core/state.mjs'; -import { detectFormScript, readTableScript, resolveGridScript } from '../dom.mjs'; +import { detectFormScript, readTableScript, resolveGridScript } from '../../dom.mjs'; import { dismissPendingErrors } from '../core/errors.mjs'; import { waitForStable } from '../core/wait.mjs'; import { clickElement } from '../core/click.mjs'; // getFormState lives in browser.mjs. -import { getFormState } from '../browser.mjs'; +import { getFormState } from '../../browser.mjs'; /** Read structured table data with pagination. Returns columns, rows, total count. */ export async function readTable({ maxRows = 20, offset = 0, table } = {}) { diff --git a/.claude/skills/web-test/scripts/table/row-fill.mjs b/.claude/skills/web-test/scripts/engine/table/row-fill.mjs similarity index 97% rename from .claude/skills/web-test/scripts/table/row-fill.mjs rename to .claude/skills/web-test/scripts/engine/table/row-fill.mjs index 57361a28..0f7ec083 100644 --- a/.claude/skills/web-test/scripts/table/row-fill.mjs +++ b/.claude/skills/web-test/scripts/engine/table/row-fill.mjs @@ -6,7 +6,7 @@ import { } from '../core/state.mjs'; import { detectFormScript, resolveGridScript, readTableScript, -} from '../dom.mjs'; +} from '../../dom.mjs'; import { dismissPendingErrors, checkForErrors } from '../core/errors.mjs'; import { waitForStable, waitForCondition, startNetworkMonitor } from '../core/wait.mjs'; import { highlight, unhighlight } from '../recording/highlight.mjs'; @@ -20,7 +20,7 @@ import { fillReferenceField, selectValue, } from '../forms/select-value.mjs'; // pasteText + getFormState still in browser.mjs (cycle). -import { pasteText, getFormState } from '../browser.mjs'; +import { pasteText, getFormState } from '../../browser.mjs'; /** * Fill cells in the current table row via Tab navigation. diff --git a/.claude/skills/web-test/scripts/table/spreadsheet.mjs b/.claude/skills/web-test/scripts/engine/table/spreadsheet.mjs similarity index 97% rename from .claude/skills/web-test/scripts/table/spreadsheet.mjs rename to .claude/skills/web-test/scripts/engine/table/spreadsheet.mjs index 678b4f1e..6f5c7522 100644 --- a/.claude/skills/web-test/scripts/table/spreadsheet.mjs +++ b/.claude/skills/web-test/scripts/engine/table/spreadsheet.mjs @@ -2,10 +2,10 @@ // Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import { page, ensureConnected, normYo } from '../core/state.mjs'; -import { detectFormScript, readTableScript, resolveGridScript } from '../dom.mjs'; +import { detectFormScript, readTableScript, resolveGridScript } from '../../dom.mjs'; import { waitForStable } from '../core/wait.mjs'; // getFormState still in browser.mjs (cycle resolves at call time). -import { getFormState } from '../browser.mjs'; +import { getFormState } from '../../browser.mjs'; // readTable moved to table/grid.mjs (form-grid операции отделены от SpreadsheetDocument).