diff --git a/backend/src/middleware/auth.js b/backend/src/middleware/auth.js index f0b3285..5d092f6 100644 --- a/backend/src/middleware/auth.js +++ b/backend/src/middleware/auth.js @@ -9,7 +9,7 @@ export const requireAuth = (req, res, next) => { try { req.user = jwt.verify(token, process.env.JWT_SECRET); next(); - } catch { + } catch (err) { res.status(401).json({ error: 'Invalid token' }); } }; diff --git a/docs/runtime/agent_state_helpyourneighbour.json b/docs/runtime/agent_state_helpyourneighbour.json new file mode 100644 index 0000000..90e43af --- /dev/null +++ b/docs/runtime/agent_state_helpyourneighbour.json @@ -0,0 +1,19 @@ +{ + "current_goal": "Advance helpyourneighbour autonomously until blocked.", + "active_task": { + "id": "blocked-stall", + "kind": "blocked", + "title": "Planner stalled after 3 repeats \u2014 LLM direct implementation needed" + }, + "last_task_id": "blocked-stall", + "last_task_source": "planner:blocked:stall", + "last_verified_change": "status:832518282", + "last_task_status": "blocked", + "last_smoke_exit": 0, + "last_integration_exit": 0, + "last_verify_exit": 0, + "stalled_count": 0, + "updated_at": "2026-03-06T16:46:50Z", + "goal_mode": "runtime", + "plan_file": "/home/openclaw/.openclaw/workspace/helpyourneighbour/docs/plans/2026-03-06-session-startup.md" +} diff --git a/docs/runtime/autogit_helpyourneighbour_1_autonomy-discovery.log b/docs/runtime/autogit_helpyourneighbour_1_autonomy-discovery.log new file mode 100644 index 0000000..c6e95e3 --- /dev/null +++ b/docs/runtime/autogit_helpyourneighbour_1_autonomy-discovery.log @@ -0,0 +1,3 @@ +AUTO_GIT_ROOT=/home/openclaw/.openclaw/workspace/helpyourneighbour +TASK_TITLE=Run expanded local discovery and continue with next actionable task +RUN_AT=2026-03-06T16:46:48Z diff --git a/docs/runtime/autogit_helpyourneighbour_1_backlog-project-snapshot.log b/docs/runtime/autogit_helpyourneighbour_1_backlog-project-snapshot.log new file mode 100644 index 0000000..9bd0b6f --- /dev/null +++ b/docs/runtime/autogit_helpyourneighbour_1_backlog-project-snapshot.log @@ -0,0 +1,8 @@ +AUTO_GIT_ROOT=/home/openclaw/.openclaw/workspace/helpyourneighbour +TASK_TITLE=Refresh project snapshot for current goal +RUN_AT=2026-03-06T16:44:27Z +[main 29d1532] auto(agent): Refresh project snapshot for current goal + 1 file changed, 26 insertions(+) + create mode 100644 docs/plans/2026-03-06-session-startup.md +To https://forgejo.tailef61c0.ts.net/openclaw/helpyourneighbour + 8f9833c..29d1532 HEAD -> main diff --git a/docs/runtime/autogit_helpyourneighbour_2_autonomy-discovery.log b/docs/runtime/autogit_helpyourneighbour_2_autonomy-discovery.log new file mode 100644 index 0000000..41a1490 --- /dev/null +++ b/docs/runtime/autogit_helpyourneighbour_2_autonomy-discovery.log @@ -0,0 +1,3 @@ +AUTO_GIT_ROOT=/home/openclaw/.openclaw/workspace/helpyourneighbour +TASK_TITLE=Run expanded local discovery and continue with next actionable task +RUN_AT=2026-03-06T16:46:49Z diff --git a/docs/runtime/autogit_helpyourneighbour_2_backlog-goal-brief.log b/docs/runtime/autogit_helpyourneighbour_2_backlog-goal-brief.log new file mode 100644 index 0000000..c521386 --- /dev/null +++ b/docs/runtime/autogit_helpyourneighbour_2_backlog-goal-brief.log @@ -0,0 +1,3 @@ +AUTO_GIT_ROOT=/home/openclaw/.openclaw/workspace/helpyourneighbour +TASK_TITLE=Create implementation brief for current goal +RUN_AT=2026-03-06T16:44:30Z diff --git a/docs/runtime/autogit_helpyourneighbour_2_todo-priority.log b/docs/runtime/autogit_helpyourneighbour_2_todo-priority.log new file mode 100644 index 0000000..8dea1be --- /dev/null +++ b/docs/runtime/autogit_helpyourneighbour_2_todo-priority.log @@ -0,0 +1,3 @@ +AUTO_GIT_ROOT=/home/openclaw/.openclaw/workspace/helpyourneighbour +TASK_TITLE=Prioritize open TODO/FIXME items +RUN_AT=2026-03-06T15:39:13Z diff --git a/docs/runtime/autogit_helpyourneighbour_3_autonomy-discovery.log b/docs/runtime/autogit_helpyourneighbour_3_autonomy-discovery.log new file mode 100644 index 0000000..41a1490 --- /dev/null +++ b/docs/runtime/autogit_helpyourneighbour_3_autonomy-discovery.log @@ -0,0 +1,3 @@ +AUTO_GIT_ROOT=/home/openclaw/.openclaw/workspace/helpyourneighbour +TASK_TITLE=Run expanded local discovery and continue with next actionable task +RUN_AT=2026-03-06T16:46:49Z diff --git a/docs/runtime/autogit_helpyourneighbour_3_backlog-goal-verify.log b/docs/runtime/autogit_helpyourneighbour_3_backlog-goal-verify.log new file mode 100644 index 0000000..c67430b --- /dev/null +++ b/docs/runtime/autogit_helpyourneighbour_3_backlog-goal-verify.log @@ -0,0 +1,3 @@ +AUTO_GIT_ROOT=/home/openclaw/.openclaw/workspace/helpyourneighbour +TASK_TITLE=Run the strongest available verification for current goal +RUN_AT=2026-03-06T16:44:30Z diff --git a/docs/runtime/autogit_helpyourneighbour_4_autonomy-discovery.log b/docs/runtime/autogit_helpyourneighbour_4_autonomy-discovery.log new file mode 100644 index 0000000..c9ffe93 --- /dev/null +++ b/docs/runtime/autogit_helpyourneighbour_4_autonomy-discovery.log @@ -0,0 +1,3 @@ +AUTO_GIT_ROOT=/home/openclaw/.openclaw/workspace/helpyourneighbour +TASK_TITLE=Run expanded local discovery and continue with next actionable task +RUN_AT=2026-03-06T16:46:47Z diff --git a/docs/runtime/autogit_helpyourneighbour_4_backlog-goal-targets.log b/docs/runtime/autogit_helpyourneighbour_4_backlog-goal-targets.log new file mode 100644 index 0000000..d442bd9 --- /dev/null +++ b/docs/runtime/autogit_helpyourneighbour_4_backlog-goal-targets.log @@ -0,0 +1,3 @@ +AUTO_GIT_ROOT=/home/openclaw/.openclaw/workspace/helpyourneighbour +TASK_TITLE=Identify first concrete local change targets for current goal +RUN_AT=2026-03-06T16:44:31Z diff --git a/docs/runtime/autonomy_discovery_helpyourneighbour.md b/docs/runtime/autonomy_discovery_helpyourneighbour.md new file mode 100644 index 0000000..3516e0d --- /dev/null +++ b/docs/runtime/autonomy_discovery_helpyourneighbour.md @@ -0,0 +1,176 @@ +# Autonomy Discovery + +Generated: 2026-03-06T16:46:49Z + +## Git Status +?? docs/runtime/agent_state_helpyourneighbour.json +?? docs/runtime/autogit_helpyourneighbour_1_autonomy-discovery.log +?? docs/runtime/autogit_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/autogit_helpyourneighbour_2_autonomy-discovery.log +?? docs/runtime/autogit_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/autogit_helpyourneighbour_2_todo-priority.log +?? docs/runtime/autogit_helpyourneighbour_3_autonomy-discovery.log +?? docs/runtime/autogit_helpyourneighbour_3_backlog-goal-verify.log +?? docs/runtime/autogit_helpyourneighbour_4_autonomy-discovery.log +?? docs/runtime/autogit_helpyourneighbour_4_backlog-goal-targets.log +?? docs/runtime/autonomy_discovery_helpyourneighbour.md +?? docs/runtime/backlog_item_helpyourneighbour.md +?? docs/runtime/generated_artifacts_helpyourneighbour.md +?? docs/runtime/goal_brief_helpyourneighbour.md +?? docs/runtime/goal_targets_helpyourneighbour.md +?? docs/runtime/integration_and_playwright_list_helpyourneighbour.log +?? docs/runtime/integration_candidates_helpyourneighbour.md +?? docs/runtime/integration_context_helpyourneighbour.md +?? docs/runtime/integration_recheck_helpyourneighbour.log +?? docs/runtime/integration_repair_brief_helpyourneighbour.md +?? docs/runtime/integration_status_helpyourneighbour.env +?? docs/runtime/integration_targets_helpyourneighbour.md +?? docs/runtime/integration_test_helpyourneighbour.log +?? docs/runtime/integration_triage_helpyourneighbour.md +?? docs/runtime/next_action_playwright_config_helpyourneighbour.md +?? docs/runtime/notion_recall_helpyourneighbour.md +?? docs/runtime/playwright_config_and_integration_recheck.log +?? docs/runtime/playwright_list_helpyourneighbour.log +?? docs/runtime/project_snapshot_helpyourneighbour.md +?? docs/runtime/smoke_status_helpyourneighbour.env +?? docs/runtime/smoke_test_helpyourneighbour.log +?? docs/runtime/task_helpyourneighbour_1_autonomy-discovery.log +?? docs/runtime/task_helpyourneighbour_1_backlog-goal-brief.log +?? docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log +?? docs/runtime/task_helpyourneighbour_1_backlog-inspect.log +?? docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/task_helpyourneighbour_1_blocked-stall.log +?? docs/runtime/task_helpyourneighbour_1_integration-check.log +?? docs/runtime/task_helpyourneighbour_1_integration-context-audit.log +?? docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log +?? docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log +?? docs/runtime/task_helpyourneighbour_1_integration-targets.log +?? docs/runtime/task_helpyourneighbour_1_integration-triage.log +?? docs/runtime/task_helpyourneighbour_1_no-work.log +?? docs/runtime/task_helpyourneighbour_1_project-snapshot.log +?? docs/runtime/task_helpyourneighbour_1_working-tree-audit.log +?? docs/runtime/task_helpyourneighbour_1_working-tree-targets.log +?? docs/runtime/task_helpyourneighbour_2_autonomy-discovery.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-targets.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-verify.log +?? docs/runtime/task_helpyourneighbour_2_blocked-stall.log +?? docs/runtime/task_helpyourneighbour_2_generated-artifacts-review.log +?? docs/runtime/task_helpyourneighbour_2_integration-candidates.log +?? docs/runtime/task_helpyourneighbour_2_integration-failure-blocked.log +?? docs/runtime/task_helpyourneighbour_2_no-work.log +?? docs/runtime/task_helpyourneighbour_2_todo-priority.log +?? docs/runtime/task_helpyourneighbour_2_working-tree-targets.log +?? docs/runtime/task_helpyourneighbour_3_autonomy-discovery.log +?? docs/runtime/task_helpyourneighbour_3_backlog-goal-verify.log +?? docs/runtime/task_helpyourneighbour_3_blocked-stall.log +?? docs/runtime/task_helpyourneighbour_4_autonomy-discovery.log +?? docs/runtime/task_helpyourneighbour_4_backlog-goal-targets.log +?? docs/runtime/task_helpyourneighbour_4_blocked-stall.log +?? docs/runtime/todo_priority_helpyourneighbour.md +?? docs/runtime/verify_helpyourneighbour_1_autonomy-discovery.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-goal-brief.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-goal-verify.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-inspect.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/verify_helpyourneighbour_1_blocked-stall.log +?? docs/runtime/verify_helpyourneighbour_1_integration-check.log +?? docs/runtime/verify_helpyourneighbour_1_integration-failure-blocked.log +?? docs/runtime/verify_helpyourneighbour_1_integration-repair-brief.log +?? docs/runtime/verify_helpyourneighbour_1_integration-targets.log +?? docs/runtime/verify_helpyourneighbour_1_integration-triage.log +?? docs/runtime/verify_helpyourneighbour_1_no-work.log +?? docs/runtime/verify_helpyourneighbour_1_project-snapshot.log +?? docs/runtime/verify_helpyourneighbour_1_working-tree-audit.log +?? docs/runtime/verify_helpyourneighbour_1_working-tree-targets.log +?? docs/runtime/verify_helpyourneighbour_2_autonomy-discovery.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-targets.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-verify.log +?? docs/runtime/verify_helpyourneighbour_2_blocked-stall.log +?? docs/runtime/verify_helpyourneighbour_2_generated-artifacts-review.log +?? docs/runtime/verify_helpyourneighbour_2_integration-candidates.log +?? docs/runtime/verify_helpyourneighbour_2_integration-failure-blocked.log +?? docs/runtime/verify_helpyourneighbour_2_no-work.log +?? docs/runtime/verify_helpyourneighbour_2_todo-priority.log +?? docs/runtime/verify_helpyourneighbour_2_working-tree-targets.log +?? docs/runtime/verify_helpyourneighbour_3_autonomy-discovery.log +?? docs/runtime/verify_helpyourneighbour_3_backlog-goal-verify.log +?? docs/runtime/verify_helpyourneighbour_3_blocked-stall.log +?? docs/runtime/verify_helpyourneighbour_3_integration_playwright_check.log +?? docs/runtime/verify_helpyourneighbour_4_autonomy-discovery.log +?? docs/runtime/verify_helpyourneighbour_4_backlog-goal-targets.log +?? docs/runtime/verify_helpyourneighbour_4_blocked-stall.log +?? docs/runtime/verify_helpyourneighbour_4_playwright_integration_check.log +?? docs/runtime/verify_helpyourneighbour_5_playwright_config_and_integration.log +?? docs/runtime/verify_helpyourneighbour_6_playwright_config_and_tests.log +?? docs/runtime/verify_helpyourneighbour_7_integration_and_playwright_list.log +?? docs/runtime/verify_helpyourneighbour_8_integration_and_playwright_list.log +?? docs/runtime/verify_helpyourneighbour_9_integration_and_playwright_list.log +?? docs/runtime/working_tree_audit_helpyourneighbour.md +?? docs/runtime/working_tree_targets_helpyourneighbour.md + +## Candidate Work +# Working Tree Targets + +Project: helpyourneighbour + +## Highest-signal modified files +README.md +backend/playwright.config.js +backend/scripts/integration-test.mjs + +## Untracked paths +.DS_Store +._.DS_Store +PROJECT_SUMMARY.md +STATUS.md +backend/.DS_Store +backend/._.DS_Store +backend/playwright-report/index.html +backend/playwright.config.mjs +backend/test-results/.last-run.json +backend/tests/integration-test.spec.js +docs/plans/2026-03-06-continue-working-the-helpyourneighbour-project-after.md +docs/plans/2026-03-06-implement-the-next-concrete-improvement-for.md +docs/plans/2026-03-06-initial-session-startup-and-greeting.md +docs/plans/2026-03-06-start.md +docs/runtime/agent_state_helpyourneighbour.json +docs/runtime/backlog_item_helpyourneighbour.md +docs/runtime/generated_artifacts_helpyourneighbour.md +docs/runtime/goal_brief_helpyourneighbour.md +docs/runtime/goal_targets_helpyourneighbour.md +docs/runtime/integration_candidates_helpyourneighbour.md +docs/runtime/integration_context_helpyourneighbour.md +docs/runtime/integration_repair_brief_helpyourneighbour.md +docs/runtime/integration_status_helpyourneighbour.env +docs/runtime/integration_targets_helpyourneighbour.md +docs/runtime/integration_test_helpyourneighbour.log +docs/runtime/integration_triage_helpyourneighbour.md +docs/runtime/notion_recall_helpyourneighbour.md +docs/runtime/project_snapshot_helpyourneighbour.md +docs/runtime/smoke_status_helpyourneighbour.env +docs/runtime/smoke_test_helpyourneighbour.log +docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log +docs/runtime/task_helpyourneighbour_1_backlog-inspect.log +docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log +docs/runtime/task_helpyourneighbour_1_integration-check.log +docs/runtime/task_helpyourneighbour_1_integration-context-audit.log +docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log +docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log +docs/runtime/task_helpyourneighbour_1_integration-targets.log +docs/runtime/task_helpyourneighbour_1_integration-triage.log +docs/runtime/task_helpyourneighbour_1_no-work.log + +## Diff headlines + README.md | 10 ++++++++++ + backend/playwright.config.js | 18 ++++++++++-------- + backend/scripts/integration-test.mjs | 26 ++++++++++++++++++++++---- + 3 files changed, 42 insertions(+), 12 deletions(-) + +## TODO/FIXME Scan +docs/runtime/autonomy_discovery_helpyourneighbour.md:171:## TODO/FIXME Scan +docs/runtime/autogit_helpyourneighbour_2_todo-priority.log:2:TASK_TITLE=Prioritize open TODO/FIXME items +docs/runtime/todo_priority_helpyourneighbour.md:1:# TODO/FIXME Priorities (helpyourneighbour) +docs/runtime/todo_priority_helpyourneighbour.md:3:docs/runtime/autonomy_discovery_helpyourneighbour.md:149:## TODO/FIXME Scan +docs/runtime/todo_priority_helpyourneighbour.md:4:docs/runtime/autonomy_discovery_helpyourneighbour.md:150:docs/runtime/autonomy_discovery_helpyourneighbour.md:149:## TODO/FIXME Scan diff --git a/docs/runtime/backlog_item_helpyourneighbour.md b/docs/runtime/backlog_item_helpyourneighbour.md new file mode 100644 index 0000000..98b8fc1 --- /dev/null +++ b/docs/runtime/backlog_item_helpyourneighbour.md @@ -0,0 +1,128 @@ +# Backlog Item Review + +Item: Run backend integration test and Playwright test discovery using canonical config + +## Git Status + M .gitignore + M README.md + M backend/playwright.config.js + M backend/scripts/integration-test.mjs +?? PROJECT_SUMMARY.md +?? STATUS.md +?? backend/playwright.config.mjs +?? backend/tests/ +?? docs/plans/ +?? docs/runtime/agent_state_helpyourneighbour.json +?? docs/runtime/backlog_item_helpyourneighbour.md +?? docs/runtime/codex_next_step_helpyourneighbour.md +?? docs/runtime/codex_plan_exec_helpyourneighbour.log +?? docs/runtime/codex_plan_raw_helpyourneighbour.log +?? docs/runtime/generated_artifacts_helpyourneighbour.md +?? docs/runtime/goal_brief_helpyourneighbour.md +?? docs/runtime/goal_targets_helpyourneighbour.md +?? docs/runtime/integration_and_playwright_list_helpyourneighbour.log +?? docs/runtime/integration_candidates_helpyourneighbour.md +?? docs/runtime/integration_context_helpyourneighbour.md +?? docs/runtime/integration_recheck_helpyourneighbour.log +?? docs/runtime/integration_repair_brief_helpyourneighbour.md +?? docs/runtime/integration_status_helpyourneighbour.env +?? docs/runtime/integration_targets_helpyourneighbour.md +?? docs/runtime/integration_test_helpyourneighbour.log +?? docs/runtime/integration_triage_helpyourneighbour.md +?? docs/runtime/next_action_playwright_config_helpyourneighbour.md +?? docs/runtime/notion_recall_helpyourneighbour.md +?? docs/runtime/playwright_config_and_integration_recheck.log +?? docs/runtime/playwright_list_helpyourneighbour.log +?? docs/runtime/project_snapshot_helpyourneighbour.md +?? docs/runtime/smoke_status_helpyourneighbour.env +?? docs/runtime/smoke_test_helpyourneighbour.log +?? docs/runtime/task_helpyourneighbour_1_backlog-goal-brief.log +?? docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log +?? docs/runtime/task_helpyourneighbour_1_backlog-inspect.log +?? docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/task_helpyourneighbour_1_codex-codex-switch-integration-script-to-playw.log +?? docs/runtime/task_helpyourneighbour_1_codex-fallback-note.log +?? docs/runtime/task_helpyourneighbour_1_codex-ignore-macos-metadata-files-to-reduce-wo.log +?? docs/runtime/task_helpyourneighbour_1_codex-re-run-backend-integration-health-check-.log +?? docs/runtime/task_helpyourneighbour_1_codex-run-focused-playwright-config-verificati.log +?? docs/runtime/task_helpyourneighbour_1_integration-check.log +?? docs/runtime/task_helpyourneighbour_1_integration-context-audit.log +?? docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log +?? docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log +?? docs/runtime/task_helpyourneighbour_1_integration-targets.log +?? docs/runtime/task_helpyourneighbour_1_integration-triage.log +?? docs/runtime/task_helpyourneighbour_1_no-work.log +?? docs/runtime/task_helpyourneighbour_1_project-snapshot.log +?? docs/runtime/task_helpyourneighbour_1_working-tree-audit.log +?? docs/runtime/task_helpyourneighbour_1_working-tree-targets.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-targets.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-verify.log +?? docs/runtime/task_helpyourneighbour_2_codex-document-canonical-playwright-config-tar.log +?? docs/runtime/task_helpyourneighbour_2_codex-fallback-note.log +?? docs/runtime/task_helpyourneighbour_2_codex-fix-missing-playwright-devices-import-in.log +?? docs/runtime/task_helpyourneighbour_2_codex-ignore-playwright-runtime-artifacts.log +?? docs/runtime/task_helpyourneighbour_2_codex-re-run-integration-plus-real-playwright-.log +?? docs/runtime/task_helpyourneighbour_2_codex-run-backend-integration-and-playwright-s.log +?? docs/runtime/task_helpyourneighbour_2_codex-run-backend-integration-test-and-playwri.log +?? docs/runtime/task_helpyourneighbour_2_codex-run-backend-integration-test-plus-playwr.log +?? docs/runtime/task_helpyourneighbour_2_codex-run-focused-backend-integration-and-play.log +?? docs/runtime/task_helpyourneighbour_2_codex-run-focused-backend-integration-playwrig.log +?? docs/runtime/task_helpyourneighbour_2_codex-run-focused-backend-integration-plus-pla.log +?? docs/runtime/task_helpyourneighbour_2_codex-run-focused-integration-plus-playwright-.log +?? docs/runtime/task_helpyourneighbour_2_codex-run-focused-playwright-config-verificati.log +?? docs/runtime/task_helpyourneighbour_2_codex-switch-integration-script-to-canonical-p.log +?? docs/runtime/task_helpyourneighbour_2_generated-artifacts-review.log +?? docs/runtime/task_helpyourneighbour_2_integration-candidates.log +?? docs/runtime/task_helpyourneighbour_2_integration-failure-blocked.log +?? docs/runtime/task_helpyourneighbour_2_no-work.log +?? docs/runtime/task_helpyourneighbour_2_working-tree-targets.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-goal-brief.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-goal-verify.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-inspect.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/verify_helpyourneighbour_1_codex-codex-switch-integration-script-to-playw.log +?? docs/runtime/verify_helpyourneighbour_1_codex-fallback-note.log +?? docs/runtime/verify_helpyourneighbour_1_codex-ignore-macos-metadata-files-to-reduce-wo.log +?? docs/runtime/verify_helpyourneighbour_1_codex-re-run-backend-integration-health-check-.log +?? docs/runtime/verify_helpyourneighbour_1_codex-run-focused-playwright-config-verificati.log +?? docs/runtime/verify_helpyourneighbour_1_integration-check.log +?? docs/runtime/verify_helpyourneighbour_1_integration-failure-blocked.log +?? docs/runtime/verify_helpyourneighbour_1_integration-repair-brief.log +?? docs/runtime/verify_helpyourneighbour_1_integration-targets.log +?? docs/runtime/verify_helpyourneighbour_1_integration-triage.log +?? docs/runtime/verify_helpyourneighbour_1_no-work.log +?? docs/runtime/verify_helpyourneighbour_1_project-snapshot.log +?? docs/runtime/verify_helpyourneighbour_1_working-tree-audit.log +?? docs/runtime/verify_helpyourneighbour_1_working-tree-targets.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-targets.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-verify.log +?? docs/runtime/verify_helpyourneighbour_2_codex-document-canonical-playwright-config-tar.log +?? docs/runtime/verify_helpyourneighbour_2_codex-fallback-note.log +?? docs/runtime/verify_helpyourneighbour_2_codex-fix-missing-playwright-devices-import-in.log +?? docs/runtime/verify_helpyourneighbour_2_codex-ignore-playwright-runtime-artifacts.log +?? docs/runtime/verify_helpyourneighbour_2_codex-re-run-integration-plus-real-playwright-.log +?? docs/runtime/verify_helpyourneighbour_2_codex-run-backend-integration-and-playwright-s.log +?? docs/runtime/verify_helpyourneighbour_2_codex-run-backend-integration-test-and-playwri.log +?? docs/runtime/verify_helpyourneighbour_2_codex-run-backend-integration-test-plus-playwr.log +?? docs/runtime/verify_helpyourneighbour_2_codex-run-focused-backend-integration-and-play.log +?? docs/runtime/verify_helpyourneighbour_2_codex-run-focused-backend-integration-playwrig.log +?? docs/runtime/verify_helpyourneighbour_2_codex-run-focused-backend-integration-plus-pla.log +?? docs/runtime/verify_helpyourneighbour_2_codex-run-focused-integration-plus-playwright-.log +?? docs/runtime/verify_helpyourneighbour_2_codex-run-focused-playwright-config-verificati.log +?? docs/runtime/verify_helpyourneighbour_2_codex-switch-integration-script-to-canonical-p.log +?? docs/runtime/verify_helpyourneighbour_2_generated-artifacts-review.log +?? docs/runtime/verify_helpyourneighbour_2_integration-candidates.log +?? docs/runtime/verify_helpyourneighbour_2_integration-failure-blocked.log +?? docs/runtime/verify_helpyourneighbour_2_no-work.log +?? docs/runtime/verify_helpyourneighbour_2_working-tree-targets.log +?? docs/runtime/verify_helpyourneighbour_3_integration_playwright_check.log +?? docs/runtime/verify_helpyourneighbour_4_playwright_integration_check.log +?? docs/runtime/verify_helpyourneighbour_5_playwright_config_and_integration.log +?? docs/runtime/verify_helpyourneighbour_6_playwright_config_and_tests.log +?? docs/runtime/verify_helpyourneighbour_7_integration_and_playwright_list.log +?? docs/runtime/verify_helpyourneighbour_8_integration_and_playwright_list.log +?? docs/runtime/verify_helpyourneighbour_9_integration_and_playwright_list.log +?? docs/runtime/working_tree_audit_helpyourneighbour.md +?? docs/runtime/working_tree_targets_helpyourneighbour.md diff --git a/docs/runtime/generated_artifacts_helpyourneighbour.md b/docs/runtime/generated_artifacts_helpyourneighbour.md new file mode 100644 index 0000000..54dd735 --- /dev/null +++ b/docs/runtime/generated_artifacts_helpyourneighbour.md @@ -0,0 +1,5 @@ +# Generated Status Artifacts + +## Untracked Files +PROJECT_SUMMARY.md +STATUS.md diff --git a/docs/runtime/goal_brief_helpyourneighbour.md b/docs/runtime/goal_brief_helpyourneighbour.md new file mode 100644 index 0000000..86e66c5 --- /dev/null +++ b/docs/runtime/goal_brief_helpyourneighbour.md @@ -0,0 +1,249 @@ +# Goal Brief + +Project: helpyourneighbour +Generated: 2026-03-06T16:44:30Z + +## Current Goal +Advance helpyourneighbour autonomously until blocked. + +## Git Status +?? docs/runtime/agent_state_helpyourneighbour.json +?? docs/runtime/autogit_helpyourneighbour_1_autonomy-discovery.log +?? docs/runtime/autogit_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/autogit_helpyourneighbour_2_autonomy-discovery.log +?? docs/runtime/autogit_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/autogit_helpyourneighbour_2_todo-priority.log +?? docs/runtime/autogit_helpyourneighbour_3_autonomy-discovery.log +?? docs/runtime/autogit_helpyourneighbour_3_backlog-goal-verify.log +?? docs/runtime/autogit_helpyourneighbour_4_autonomy-discovery.log +?? docs/runtime/autogit_helpyourneighbour_4_backlog-goal-targets.log +?? docs/runtime/autonomy_discovery_helpyourneighbour.md +?? docs/runtime/backlog_item_helpyourneighbour.md +?? docs/runtime/generated_artifacts_helpyourneighbour.md +?? docs/runtime/goal_brief_helpyourneighbour.md +?? docs/runtime/goal_targets_helpyourneighbour.md +?? docs/runtime/integration_and_playwright_list_helpyourneighbour.log +?? docs/runtime/integration_candidates_helpyourneighbour.md +?? docs/runtime/integration_context_helpyourneighbour.md +?? docs/runtime/integration_recheck_helpyourneighbour.log +?? docs/runtime/integration_repair_brief_helpyourneighbour.md +?? docs/runtime/integration_status_helpyourneighbour.env +?? docs/runtime/integration_targets_helpyourneighbour.md +?? docs/runtime/integration_test_helpyourneighbour.log +?? docs/runtime/integration_triage_helpyourneighbour.md +?? docs/runtime/next_action_playwright_config_helpyourneighbour.md +?? docs/runtime/notion_recall_helpyourneighbour.md +?? docs/runtime/playwright_config_and_integration_recheck.log +?? docs/runtime/playwright_list_helpyourneighbour.log +?? docs/runtime/project_snapshot_helpyourneighbour.md +?? docs/runtime/smoke_status_helpyourneighbour.env +?? docs/runtime/smoke_test_helpyourneighbour.log +?? docs/runtime/task_helpyourneighbour_1_autonomy-discovery.log +?? docs/runtime/task_helpyourneighbour_1_backlog-goal-brief.log +?? docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log +?? docs/runtime/task_helpyourneighbour_1_backlog-inspect.log +?? docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/task_helpyourneighbour_1_blocked-stall.log +?? docs/runtime/task_helpyourneighbour_1_integration-check.log +?? docs/runtime/task_helpyourneighbour_1_integration-context-audit.log +?? docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log +?? docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log +?? docs/runtime/task_helpyourneighbour_1_integration-targets.log +?? docs/runtime/task_helpyourneighbour_1_integration-triage.log +?? docs/runtime/task_helpyourneighbour_1_no-work.log +?? docs/runtime/task_helpyourneighbour_1_project-snapshot.log +?? docs/runtime/task_helpyourneighbour_1_working-tree-audit.log +?? docs/runtime/task_helpyourneighbour_1_working-tree-targets.log +?? docs/runtime/task_helpyourneighbour_2_autonomy-discovery.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-targets.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-verify.log +?? docs/runtime/task_helpyourneighbour_2_blocked-stall.log +?? docs/runtime/task_helpyourneighbour_2_generated-artifacts-review.log +?? docs/runtime/task_helpyourneighbour_2_integration-candidates.log +?? docs/runtime/task_helpyourneighbour_2_integration-failure-blocked.log +?? docs/runtime/task_helpyourneighbour_2_no-work.log +?? docs/runtime/task_helpyourneighbour_2_todo-priority.log +?? docs/runtime/task_helpyourneighbour_2_working-tree-targets.log +?? docs/runtime/task_helpyourneighbour_3_autonomy-discovery.log +?? docs/runtime/task_helpyourneighbour_3_backlog-goal-verify.log +?? docs/runtime/task_helpyourneighbour_3_blocked-stall.log +?? docs/runtime/task_helpyourneighbour_4_autonomy-discovery.log +?? docs/runtime/task_helpyourneighbour_4_backlog-goal-targets.log +?? docs/runtime/task_helpyourneighbour_4_blocked-stall.log +?? docs/runtime/todo_priority_helpyourneighbour.md +?? docs/runtime/verify_helpyourneighbour_1_autonomy-discovery.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-goal-brief.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-goal-verify.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-inspect.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/verify_helpyourneighbour_1_blocked-stall.log +?? docs/runtime/verify_helpyourneighbour_1_integration-check.log +?? docs/runtime/verify_helpyourneighbour_1_integration-failure-blocked.log +?? docs/runtime/verify_helpyourneighbour_1_integration-repair-brief.log +?? docs/runtime/verify_helpyourneighbour_1_integration-targets.log +?? docs/runtime/verify_helpyourneighbour_1_integration-triage.log +?? docs/runtime/verify_helpyourneighbour_1_no-work.log +?? docs/runtime/verify_helpyourneighbour_1_project-snapshot.log +?? docs/runtime/verify_helpyourneighbour_1_working-tree-audit.log +?? docs/runtime/verify_helpyourneighbour_1_working-tree-targets.log +?? docs/runtime/verify_helpyourneighbour_2_autonomy-discovery.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-targets.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-verify.log +?? docs/runtime/verify_helpyourneighbour_2_blocked-stall.log +?? docs/runtime/verify_helpyourneighbour_2_generated-artifacts-review.log +?? docs/runtime/verify_helpyourneighbour_2_integration-candidates.log +?? docs/runtime/verify_helpyourneighbour_2_integration-failure-blocked.log +?? docs/runtime/verify_helpyourneighbour_2_no-work.log +?? docs/runtime/verify_helpyourneighbour_2_todo-priority.log +?? docs/runtime/verify_helpyourneighbour_2_working-tree-targets.log +?? docs/runtime/verify_helpyourneighbour_3_autonomy-discovery.log +?? docs/runtime/verify_helpyourneighbour_3_backlog-goal-verify.log +?? docs/runtime/verify_helpyourneighbour_3_blocked-stall.log +?? docs/runtime/verify_helpyourneighbour_3_integration_playwright_check.log +?? docs/runtime/verify_helpyourneighbour_4_autonomy-discovery.log +?? docs/runtime/verify_helpyourneighbour_4_backlog-goal-targets.log +?? docs/runtime/verify_helpyourneighbour_4_blocked-stall.log +?? docs/runtime/verify_helpyourneighbour_4_playwright_integration_check.log +?? docs/runtime/verify_helpyourneighbour_5_playwright_config_and_integration.log +?? docs/runtime/verify_helpyourneighbour_6_playwright_config_and_tests.log +?? docs/runtime/verify_helpyourneighbour_7_integration_and_playwright_list.log +?? docs/runtime/verify_helpyourneighbour_8_integration_and_playwright_list.log +?? docs/runtime/verify_helpyourneighbour_9_integration_and_playwright_list.log +?? docs/runtime/working_tree_audit_helpyourneighbour.md +?? docs/runtime/working_tree_targets_helpyourneighbour.md + +## Package Scripts +{ + "test": "npm run test:smoke", + "start": "node src/server.js", + "dev": "node --watch src/server.js", + "db:init": "node src/db/init.js", + "db:seed": "node src/db/seed.js", + "test:smoke": "node scripts/smoke-test.mjs", + "test:integration": "node scripts/integration-test.mjs" +} + +## Docs +docs/api-versioning.md +docs/dispute-flow.md +docs/drafts/contract_flow.initial.md +docs/openapi.yaml +docs/plans/2026-03-06-bitte-arbeite-helpyourneighbour-weiter.md +docs/plans/2026-03-06-continue-working-the-helpyourneighbour-project-after.md +docs/plans/2026-03-06-implement-the-next-concrete-improvement-for.md +docs/plans/2026-03-06-initial-session-startup-and-greeting.md +docs/plans/2026-03-06-mach-bei-help-your-neighbour-weiter.md +docs/plans/2026-03-06-nein-einfach-fortfahren-mit-der-arbeit.md +docs/plans/2026-03-06-new-session-started.md +docs/plans/2026-03-06-session-startup.md +docs/plans/2026-03-06-start.md +docs/roles-and-permissions.md +docs/runtime/agent_state_helpyourneighbour.json +docs/runtime/autogit_helpyourneighbour_1_autonomy-discovery.log +docs/runtime/autogit_helpyourneighbour_1_backlog-project-snapshot.log +docs/runtime/autogit_helpyourneighbour_2_autonomy-discovery.log +docs/runtime/autogit_helpyourneighbour_2_backlog-goal-brief.log +docs/runtime/autogit_helpyourneighbour_2_todo-priority.log +docs/runtime/autogit_helpyourneighbour_3_autonomy-discovery.log +docs/runtime/autogit_helpyourneighbour_3_backlog-goal-verify.log +docs/runtime/autogit_helpyourneighbour_4_autonomy-discovery.log +docs/runtime/autogit_helpyourneighbour_4_backlog-goal-targets.log +docs/runtime/autonomy_discovery_helpyourneighbour.md +docs/runtime/backlog_item_helpyourneighbour.md +docs/runtime/generated_artifacts_helpyourneighbour.md +docs/runtime/goal_brief_helpyourneighbour.md +docs/runtime/goal_targets_helpyourneighbour.md +docs/runtime/integration_and_playwright_list_helpyourneighbour.log +docs/runtime/integration_candidates_helpyourneighbour.md +docs/runtime/integration_context_helpyourneighbour.md +docs/runtime/integration_recheck_helpyourneighbour.log +docs/runtime/integration_repair_brief_helpyourneighbour.md +docs/runtime/integration_status_helpyourneighbour.env +docs/runtime/integration_targets_helpyourneighbour.md +docs/runtime/integration_test_helpyourneighbour.log +docs/runtime/integration_triage_helpyourneighbour.md +docs/runtime/next_action_playwright_config_helpyourneighbour.md +docs/runtime/next_actions_helpyourneighbour.md +docs/runtime/notion_recall_helpyourneighbour.md +docs/runtime/playwright_config_and_integration_recheck.log +docs/runtime/playwright_list_helpyourneighbour.log +docs/runtime/project_snapshot_helpyourneighbour.md +docs/runtime/smoke_status_helpyourneighbour.env +docs/runtime/smoke_test_helpyourneighbour.log +docs/runtime/task_helpyourneighbour_1_autonomy-discovery.log +docs/runtime/task_helpyourneighbour_1_backlog-goal-brief.log +docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log +docs/runtime/task_helpyourneighbour_1_backlog-inspect.log +docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log +docs/runtime/task_helpyourneighbour_1_blocked-stall.log +docs/runtime/task_helpyourneighbour_1_integration-check.log +docs/runtime/task_helpyourneighbour_1_integration-context-audit.log +docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log +docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log +docs/runtime/task_helpyourneighbour_1_integration-targets.log +docs/runtime/task_helpyourneighbour_1_integration-triage.log +docs/runtime/task_helpyourneighbour_1_no-work.log +docs/runtime/task_helpyourneighbour_1_project-snapshot.log +docs/runtime/task_helpyourneighbour_1_working-tree-audit.log +docs/runtime/task_helpyourneighbour_1_working-tree-targets.log +docs/runtime/task_helpyourneighbour_2_autonomy-discovery.log +docs/runtime/task_helpyourneighbour_2_backlog-goal-brief.log +docs/runtime/task_helpyourneighbour_2_backlog-goal-targets.log +docs/runtime/task_helpyourneighbour_2_backlog-goal-verify.log +docs/runtime/task_helpyourneighbour_2_blocked-stall.log +docs/runtime/task_helpyourneighbour_2_generated-artifacts-review.log +docs/runtime/task_helpyourneighbour_2_integration-candidates.log +docs/runtime/task_helpyourneighbour_2_integration-failure-blocked.log +docs/runtime/task_helpyourneighbour_2_no-work.log +docs/runtime/task_helpyourneighbour_2_todo-priority.log +docs/runtime/task_helpyourneighbour_2_working-tree-targets.log +docs/runtime/task_helpyourneighbour_3_autonomy-discovery.log +docs/runtime/task_helpyourneighbour_3_backlog-goal-verify.log +docs/runtime/task_helpyourneighbour_3_blocked-stall.log +docs/runtime/task_helpyourneighbour_4_autonomy-discovery.log +docs/runtime/task_helpyourneighbour_4_backlog-goal-targets.log +docs/runtime/task_helpyourneighbour_4_blocked-stall.log +docs/runtime/todo_priority_helpyourneighbour.md +docs/runtime/verify_helpyourneighbour_1_autonomy-discovery.log +docs/runtime/verify_helpyourneighbour_1_backlog-goal-brief.log +docs/runtime/verify_helpyourneighbour_1_backlog-goal-verify.log +docs/runtime/verify_helpyourneighbour_1_backlog-inspect.log +docs/runtime/verify_helpyourneighbour_1_backlog-project-snapshot.log +docs/runtime/verify_helpyourneighbour_1_blocked-stall.log +docs/runtime/verify_helpyourneighbour_1_integration-check.log +docs/runtime/verify_helpyourneighbour_1_integration-failure-blocked.log +docs/runtime/verify_helpyourneighbour_1_integration-repair-brief.log +docs/runtime/verify_helpyourneighbour_1_integration-targets.log +docs/runtime/verify_helpyourneighbour_1_integration-triage.log +docs/runtime/verify_helpyourneighbour_1_no-work.log +docs/runtime/verify_helpyourneighbour_1_project-snapshot.log +docs/runtime/verify_helpyourneighbour_1_working-tree-audit.log +docs/runtime/verify_helpyourneighbour_1_working-tree-targets.log +docs/runtime/verify_helpyourneighbour_2_autonomy-discovery.log +docs/runtime/verify_helpyourneighbour_2_backlog-goal-brief.log +docs/runtime/verify_helpyourneighbour_2_backlog-goal-targets.log +docs/runtime/verify_helpyourneighbour_2_backlog-goal-verify.log +docs/runtime/verify_helpyourneighbour_2_blocked-stall.log +docs/runtime/verify_helpyourneighbour_2_generated-artifacts-review.log +docs/runtime/verify_helpyourneighbour_2_integration-candidates.log +docs/runtime/verify_helpyourneighbour_2_integration-failure-blocked.log +docs/runtime/verify_helpyourneighbour_2_no-work.log +docs/runtime/verify_helpyourneighbour_2_todo-priority.log +docs/runtime/verify_helpyourneighbour_2_working-tree-targets.log +docs/runtime/verify_helpyourneighbour_3_autonomy-discovery.log +docs/runtime/verify_helpyourneighbour_3_backlog-goal-verify.log +docs/runtime/verify_helpyourneighbour_3_blocked-stall.log +docs/runtime/verify_helpyourneighbour_3_integration_playwright_check.log +docs/runtime/verify_helpyourneighbour_4_autonomy-discovery.log +docs/runtime/verify_helpyourneighbour_4_backlog-goal-targets.log +docs/runtime/verify_helpyourneighbour_4_blocked-stall.log +docs/runtime/verify_helpyourneighbour_4_playwright_integration_check.log +docs/runtime/verify_helpyourneighbour_5_playwright_config_and_integration.log +docs/runtime/verify_helpyourneighbour_6_playwright_config_and_tests.log +docs/runtime/verify_helpyourneighbour_7_integration_and_playwright_list.log +docs/runtime/verify_helpyourneighbour_8_integration_and_playwright_list.log +docs/runtime/verify_helpyourneighbour_9_integration_and_playwright_list.log +docs/runtime/working_tree_audit_helpyourneighbour.md +docs/runtime/working_tree_targets_helpyourneighbour.md diff --git a/docs/runtime/goal_targets_helpyourneighbour.md b/docs/runtime/goal_targets_helpyourneighbour.md new file mode 100644 index 0000000..34b3333 --- /dev/null +++ b/docs/runtime/goal_targets_helpyourneighbour.md @@ -0,0 +1,31 @@ +# Goal Targets + +Goal: Advance helpyourneighbour autonomously until blocked. + +## Keywords +- advance +- helpyourneighbour +- autonomously +- until +- blocked + +## File Name Matches +- docs/plans/2026-03-06-continue-working-the-helpyourneighbour-project-after.md +- docs/plans/2026-03-06-bitte-arbeite-helpyourneighbour-weiter.md + +## Content Matches +### advance +(none) + +### helpyourneighbour +(none) + +### autonomously +(none) + +### until +(none) + +### blocked +(none) + diff --git a/docs/runtime/integration_and_playwright_list_helpyourneighbour.log b/docs/runtime/integration_and_playwright_list_helpyourneighbour.log new file mode 100644 index 0000000..2c88f7f --- /dev/null +++ b/docs/runtime/integration_and_playwright_list_helpyourneighbour.log @@ -0,0 +1,5 @@ + +> backend@1.0.0 test:integration +> node scripts/integration-test.mjs + +Integration test passed: API server is running and healthy diff --git a/docs/runtime/integration_candidates_helpyourneighbour.md b/docs/runtime/integration_candidates_helpyourneighbour.md new file mode 100644 index 0000000..64a92fa --- /dev/null +++ b/docs/runtime/integration_candidates_helpyourneighbour.md @@ -0,0 +1,184 @@ +# Integration Repair Candidates + +Project: helpyourneighbour + +## Candidate Files +backend/node_modules/accepts/index.js +backend/node_modules/bcryptjs/index.d.ts +backend/node_modules/bcryptjs/index.js +backend/node_modules/body-parser/index.js +backend/node_modules/buffer-equal-constant-time/index.js +backend/node_modules/bytes/index.js +backend/node_modules/call-bind-apply-helpers/index.d.ts +backend/node_modules/call-bind-apply-helpers/index.js +backend/node_modules/call-bound/index.d.ts +backend/node_modules/call-bound/index.js +backend/node_modules/content-disposition/index.js +backend/node_modules/content-type/index.js +backend/node_modules/cookie-signature/index.js +backend/node_modules/cookie/index.js +backend/node_modules/denque/index.d.ts +backend/node_modules/denque/index.js +backend/node_modules/depd/index.js +backend/node_modules/ee-first/index.js +backend/node_modules/encodeurl/index.js +backend/node_modules/es-define-property/index.d.ts +backend/node_modules/es-define-property/index.js +backend/node_modules/es-errors/index.d.ts +backend/node_modules/es-errors/index.js +backend/node_modules/es-object-atoms/index.d.ts +backend/node_modules/es-object-atoms/index.js +backend/node_modules/escape-html/index.js +backend/node_modules/etag/index.js +backend/node_modules/express/index.js +backend/node_modules/finalhandler/index.js +backend/node_modules/forwarded/index.js +backend/node_modules/fresh/index.js +backend/node_modules/function-bind/index.js +backend/node_modules/generate-function/index.js +backend/node_modules/get-intrinsic/index.js +backend/node_modules/get-proto/index.d.ts +backend/node_modules/get-proto/index.js +backend/node_modules/gopd/index.d.ts +backend/node_modules/gopd/index.js +backend/node_modules/has-symbols/index.d.ts +backend/node_modules/has-symbols/index.js +backend/node_modules/hasown/index.d.ts +backend/node_modules/hasown/index.js +backend/node_modules/http-errors/index.js +backend/node_modules/is-promise/index.d.ts +backend/node_modules/is-promise/index.js +backend/node_modules/is-promise/index.mjs +backend/node_modules/jsonwebtoken/index.js +backend/node_modules/jwa/index.js +backend/node_modules/jws/index.js +backend/node_modules/lodash.includes/index.js +backend/node_modules/lodash.isboolean/index.js +backend/node_modules/lodash.isinteger/index.js +backend/node_modules/lodash.isnumber/index.js +backend/node_modules/lodash.isplainobject/index.js +backend/node_modules/lodash.isstring/index.js +backend/node_modules/lodash.once/index.js +backend/node_modules/long/index.d.ts +backend/node_modules/long/index.js +backend/node_modules/media-typer/index.js +backend/node_modules/merge-descriptors/index.d.ts +backend/node_modules/merge-descriptors/index.js +backend/node_modules/mime-db/index.js +backend/node_modules/mime-types/index.js +backend/node_modules/ms/index.js +backend/node_modules/mysql2/index.d.ts +backend/node_modules/mysql2/index.js +backend/node_modules/named-placeholders/index.js +backend/node_modules/negotiator/index.js +backend/node_modules/object-inspect/index.js +backend/node_modules/on-finished/index.js +backend/node_modules/parseurl/index.js +backend/node_modules/playwright-core/index.d.ts +backend/node_modules/playwright-core/index.js +backend/node_modules/playwright-core/index.mjs +backend/node_modules/playwright/index.d.ts +backend/node_modules/playwright/index.js +backend/node_modules/playwright/index.mjs +backend/node_modules/proxy-addr/index.js +backend/node_modules/range-parser/index.js +backend/node_modules/raw-body/index.d.ts +backend/node_modules/raw-body/index.js +backend/node_modules/router/index.js +backend/node_modules/safe-buffer/index.d.ts +backend/node_modules/safe-buffer/index.js +backend/node_modules/semver/index.js +backend/node_modules/send/index.js +backend/node_modules/serve-static/index.js +backend/node_modules/setprototypeof/index.d.ts +backend/node_modules/setprototypeof/index.js +backend/node_modules/side-channel-list/index.d.ts +backend/node_modules/side-channel-list/index.js +backend/node_modules/side-channel-map/index.d.ts +backend/node_modules/side-channel-map/index.js +backend/node_modules/side-channel-weakmap/index.d.ts +backend/node_modules/side-channel-weakmap/index.js +backend/node_modules/side-channel/index.d.ts +backend/node_modules/side-channel/index.js +backend/node_modules/statuses/index.js +backend/node_modules/toidentifier/index.js +backend/node_modules/type-is/index.js +backend/node_modules/undici-types/index.d.ts +backend/node_modules/unpipe/index.js +backend/node_modules/vary/index.js +backend/node_modules/zod/index.cjs +backend/node_modules/zod/index.d.cts +backend/node_modules/zod/index.d.ts +backend/node_modules/zod/index.js +backend/playwright-report/index.html +backend/playwright.config.js +backend/playwright.config.mjs +backend/scripts/integration-test.mjs +backend/src/server.js +backend/tests/integration-test.spec.js + +## Recent Changed Files + M README.md + M backend/playwright.config.js + M backend/scripts/integration-test.mjs +?? PROJECT_SUMMARY.md +?? STATUS.md +?? backend/.DS_Store +?? backend/._.DS_Store +?? backend/playwright-report/ +?? backend/playwright.config.mjs +?? backend/test-results/ +?? backend/tests/ +?? docs/plans/ +?? docs/runtime/agent_state_helpyourneighbour.json +?? docs/runtime/backlog_item_helpyourneighbour.md +?? docs/runtime/generated_artifacts_helpyourneighbour.md +?? docs/runtime/goal_brief_helpyourneighbour.md +?? docs/runtime/goal_targets_helpyourneighbour.md +?? docs/runtime/integration_candidates_helpyourneighbour.md +?? docs/runtime/integration_context_helpyourneighbour.md +?? docs/runtime/integration_repair_brief_helpyourneighbour.md +?? docs/runtime/integration_status_helpyourneighbour.env +?? docs/runtime/integration_test_helpyourneighbour.log +?? docs/runtime/integration_triage_helpyourneighbour.md +?? docs/runtime/project_snapshot_helpyourneighbour.md +?? docs/runtime/smoke_status_helpyourneighbour.env +?? docs/runtime/smoke_test_helpyourneighbour.log +?? docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log +?? docs/runtime/task_helpyourneighbour_1_backlog-inspect.log +?? docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/task_helpyourneighbour_1_integration-check.log +?? docs/runtime/task_helpyourneighbour_1_integration-context-audit.log +?? docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log +?? docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log +?? docs/runtime/task_helpyourneighbour_1_integration-triage.log +?? docs/runtime/task_helpyourneighbour_1_project-snapshot.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-targets.log +?? docs/runtime/task_helpyourneighbour_2_generated-artifacts-review.log +?? docs/runtime/task_helpyourneighbour_2_integration-candidates.log +?? docs/runtime/task_helpyourneighbour_2_integration-failure-blocked.log +?? docs/runtime/task_helpyourneighbour_2_no-work.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-goal-verify.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-inspect.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/verify_helpyourneighbour_1_integration-check.log +?? docs/runtime/verify_helpyourneighbour_1_integration-failure-blocked.log +?? docs/runtime/verify_helpyourneighbour_1_integration-repair-brief.log +?? docs/runtime/verify_helpyourneighbour_1_integration-triage.log +?? docs/runtime/verify_helpyourneighbour_1_project-snapshot.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-targets.log +?? docs/runtime/verify_helpyourneighbour_2_generated-artifacts-review.log +?? docs/runtime/verify_helpyourneighbour_2_integration-failure-blocked.log +?? docs/runtime/verify_helpyourneighbour_2_no-work.log + +## Error Signatures +5:/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/testType.js:75 +6: throw new Error([ +9:Error: Playwright Test did not expect test() to be called here. +13:- You have two different versions of @playwright/test. This usually happens +14: when one of the dependencies in your package.json depends on @playwright/test. +15: at TestTypeImpl._currentSuite (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/testType.js:75:13) +16: at TestTypeImpl._createTest (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/testType.js:88:24) +17: at /home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/transform/transform.js:282:12 diff --git a/docs/runtime/integration_context_helpyourneighbour.md b/docs/runtime/integration_context_helpyourneighbour.md new file mode 100644 index 0000000..a6e5086 --- /dev/null +++ b/docs/runtime/integration_context_helpyourneighbour.md @@ -0,0 +1,234 @@ +# Integration Context Audit + +Project: helpyourneighbour + +## package.json scripts +{ + "test": "npm run test:smoke", + "start": "node src/server.js", + "dev": "node --watch src/server.js", + "db:init": "node src/db/init.js", + "db:seed": "node src/db/seed.js", + "test:smoke": "node scripts/smoke-test.mjs", + "test:integration": "node scripts/integration-test.mjs" +} + +## Integration Runner +// Einfacher HTTP-Test ohne Playwright +// Funktion zum Senden einer HTTP-Anfrage +async function testHealthEndpoint() { + try { + const response = await fetch('http://localhost:3000/health'); + if (response.status === 200) { + console.log('Integration test passed: API server is running and healthy'); + return true; + } else { + console.error(`Integration test failed: Expected status 200, got ${response.status}`); + return false; + } + } catch (error) { + console.error('Integration test failed:', error.message); + return false; + } +} + +// Führe den Test aus +testHealthEndpoint().then(success => { + if (!success) { + process.exit(1); + } +}); +## Referenced localhost URLs +./node_modules/encodeurl/README.md:60: href.host = 'localhost' +./node_modules/mysql2/lib/connection_config.js:97: this.host = options.host || 'localhost'; +./node_modules/mysql2/typings/mysql/lib/Connection.d.ts:132: * The hostname of the database you are connecting to. (Default: localhost) +./node_modules/parseurl/README.md:67: Parsing URL "http://localhost:8888/foo/bar?user=tj&pet=fluffy" +./node_modules/body-parser/README.md:454:// POST /api/users gets JSON bodies +./node_modules/body-parser/README.md:455:app.post('/api/users', jsonParser, function (req, res) { +./node_modules/jws/readme.md:255:[encrypted-key-docs]: https://nodejs.org/api/crypto.html#crypto_sign_sign_private_key_output_format +./node_modules/safe-buffer/README.md:303:[See the docs](https://nodejs.org/api/buffer.html). +./node_modules/safe-buffer/README.md:341:From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): +./node_modules/@playwright/test/README.md:5:## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/docs/api/class-playwright) +./node_modules/@playwright/test/README.md:49:* [API reference](https://playwright.dev/docs/api/class-playwright) +./node_modules/@playwright/test/README.md:166:* [API reference](https://playwright.dev/docs/api/class-playwright/) +./node_modules/jsonwebtoken/README.md:37:encoded private key for RSA and ECDSA. In case of a private key with passphrase an object `{ key, passphrase }` can be used (based on [crypto documentation](https://nodejs.org/api/crypto.html#crypto_sign_sign_private_key_output_format)), in this case be sure you pass the `algorithm` option. +./node_modules/router/README.md:159:var api = router.route('/api/') +./node_modules/router/README.md:211:- `req` - This is a [HTTP incoming message](https://nodejs.org/api/http.html#http_http_incomingmessage) instance. +./node_modules/router/README.md:212:- `res` - This is a [HTTP server response](https://nodejs.org/api/http.html#http_class_http_serverresponse) instance. +./node_modules/router/README.md:274:router.use('/api/', api) +./node_modules/router/README.md:279:// handle `PATCH` requests to `/api/set-message` +./node_modules/router/README.md:306:curl http://127.0.0.1:8080/api/set-message -X PATCH -H "Content-Type: application/json" -d '{"value":"Cats!"}' +./node_modules/statuses/README.md:95:[Node.js http module `http.STATUS_CODES`](https://nodejs.org/dist/latest/docs/api/http.html#http_http_status_codes). +./node_modules/dotenv/README-es.md:5:Dotenv is a zero-dependency module that loads environment variables from a `.env` file into [`process.env`](https://nodejs.org/docs/latest/api/process.html#process_process_env). Storing configuration in the environment separate from code is based on [The Twelve-Factor App](https://12factor.net/config) methodology. +./node_modules/dotenv/README-es.md:139:You can use the `--require` (`-r`) [command line option](https://nodejs.org/api/cli.html#-r---require-module) to preload dotenv. By doing this, you do not need to require and load dotenv in your application code. +./node_modules/dotenv/README-es.md:171:DATABASE_URL="postgres://${USERNAME}@localhost/my_database" +./node_modules/dotenv/README-es.md:180:DATABASE_URL postgres://username@localhost/my_database +./node_modules/dotenv/README-es.md:192:DATABASE_URL="postgres://$(whoami)@localhost/my_database" +./node_modules/dotenv/README-es.md:201:DATABASE_URL postgres://yourusername@localhost/my_database +./node_modules/dotenv/README-es.md:590:[`process.env`](https://nodejs.org/docs/latest/api/process.html#process_process_env), +./node_modules/dotenv/README.md:5:Dotenv is a zero-dependency module that loads environment variables from a `.env` file into [`process.env`](https://nodejs.org/docs/latest/api/process.html#process_process_env). Storing configuration in the environment separate from code is based on [The Twelve-Factor App](https://12factor.net/config) methodology. +./node_modules/dotenv/README.md:139:You can use the `--require` (`-r`) [command line option](https://nodejs.org/api/cli.html#-r---require-module) to preload dotenv. By doing this, you do not need to require and load dotenv in your application code. +./node_modules/dotenv/README.md:171:DATABASE_URL="postgres://${USERNAME}@localhost/my_database" +./node_modules/dotenv/README.md:180:DATABASE_URL postgres://username@localhost/my_database +./node_modules/dotenv/README.md:192:DATABASE_URL="postgres://$(whoami)@localhost/my_database" +./node_modules/dotenv/README.md:201:DATABASE_URL postgres://yourusername@localhost/my_database +./node_modules/dotenv/README.md:590:[`process.env`](https://nodejs.org/docs/latest/api/process.html#process_process_env), +./node_modules/dotenv/lib/main.d.ts:18: * @param src - contents to be parsed. example: `'DB_HOST=localhost'` +./node_modules/dotenv/lib/main.d.ts:19: * @returns an object with keys and values based on `src`. example: `{ DB_HOST : 'localhost' }` +./node_modules/playwright-core/ThirdPartyNotices.txt:156:$ bombardier -d 10s --fasthttp http://localhost:3000/ +./node_modules/playwright-core/ThirdPartyNotices.txt:170:$ bombardier -d 10s --fasthttp http://localhost:3000/ +./node_modules/playwright-core/ThirdPartyNotices.txt:218: console.log(`Listening on http://localhost:${info.port}`) // Listening on http://localhost:3000 +./node_modules/playwright-core/ThirdPartyNotices.txt:228:Open `http://localhost:3000` with your browser. +./node_modules/playwright-core/lib/client/events.js:45: // @see https://nodejs.org/api/events.html#events_error_events +./node_modules/playwright-core/lib/client/events.js:67: // @see https://nodejs.org/api/events.html#events_error_events +./node_modules/playwright-core/lib/mcpBundleImpl/index.js:111:`&&o++}}return[e,r]}var vp=class extends Event{constructor(e,r){var o,n;super(e),this.code=(o=r==null?void 0:r.code)!=null?o:void 0,this.message=(n=r==null?void 0:r.message)!=null?n:void 0}[Symbol.for("nodejs.util.inspect.custom")](e,r,o){return o(h0(this),r)}[Symbol.for("Deno.customInspect")](e,r){return e(h0(this),r)}};function DC(t){let e=globalThis.DOMException;return typeof e=="function"?new e(t,"SyntaxError"):new SyntaxError(t)}function Cy(t){return t instanceof Error?"errors"in t&&Array.isArray(t.errors)?t.errors.map(Cy).join(", "):"cause"in t&&t.cause instanceof Error?`${t}: ${Cy(t.cause)}`:t.message:`${t}`}function h0(t){return{type:t.type,message:t.message,code:t.code,defaultPrevented:t.defaultPrevented,cancelable:t.cancelable,timeStamp:t.timeStamp}}var v0=t=>{throw TypeError(t)},Vy=(t,e,r)=>e.has(t)||v0("Cannot "+r),oe=(t,e,r)=>(Vy(t,e,"read from private field"),r?r.call(t):e.get(t)),Ze=(t,e,r)=>e.has(t)?v0("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),Ee=(t,e,r,o)=>(Vy(t,e,"write to private field"),e.set(t,r),r),Tr=(t,e,r)=>(Vy(t,e,"access private method"),r),vt,ro,Oi,gp,_p,Tc,Ni,Ec,vn,ji,Ci,Ri,Ic,Yt,Dy,Uy,Ay,g0,Zy,My,Pc,qy,Ly,no=class extends EventTarget{constructor(e,r){var o,n;super(),Ze(this,Yt),this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,Ze(this,vt),Ze(this,ro),Ze(this,Oi),Ze(this,gp),Ze(this,_p),Ze(this,Tc),Ze(this,Ni),Ze(this,Ec,null),Ze(this,vn),Ze(this,ji),Ze(this,Ci,null),Ze(this,Ri,null),Ze(this,Ic,null),Ze(this,Uy,async i=>{var a;oe(this,ji).reset();let{body:c,redirected:u,status:l,headers:d}=i;if(l===204){Tr(this,Yt,Pc).call(this,"Server sent HTTP 204, not reconnecting",204),this.close();return}if(u?Ee(this,Oi,new URL(i.url)):Ee(this,Oi,void 0),l!==200){Tr(this,Yt,Pc).call(this,`Non-200 status code (${l})`,l);return}if(!(d.get("content-type")||"").startsWith("text/event-stream")){Tr(this,Yt,Pc).call(this,'Invalid content type, expected "text/event-stream"',l);return}if(oe(this,vt)===this.CLOSED)return;Ee(this,vt,this.OPEN);let s=new Event("open");if((a=oe(this,Ic))==null||a.call(this,s),this.dispatchEvent(s),typeof c!="object"||!c||!("getReader"in c)){Tr(this,Yt,Pc).call(this,"Invalid response body, expected a web ReadableStream",l),this.close();return}let f=new TextDecoder,p=c.getReader(),m=!0;do{let{done:h,value:g}=await p.read();g&&oe(this,ji).feed(f.decode(g,{stream:!h})),h&&(m=!1,oe(this,ji).reset(),Tr(this,Yt,qy).call(this))}while(m)}),Ze(this,Ay,i=>{Ee(this,vn,void 0),!(i.name==="AbortError"||i.type==="aborted")&&Tr(this,Yt,qy).call(this,Cy(i))}),Ze(this,Zy,i=>{typeof i.id=="string"&&Ee(this,Ec,i.id);let a=new MessageEvent(i.event||"message",{data:i.data,origin:oe(this,Oi)?oe(this,Oi).origin:oe(this,ro).origin,lastEventId:i.id||""});oe(this,Ri)&&(!i.event||i.event==="message")&&oe(this,Ri).call(this,a),this.dispatchEvent(a)}),Ze(this,My,i=>{Ee(this,Tc,i)}),Ze(this,Ly,()=>{Ee(this,Ni,void 0),oe(this,vt)===this.CONNECTING&&Tr(this,Yt,Dy).call(this)});try{if(e instanceof URL)Ee(this,ro,e);else if(typeof e=="string")Ee(this,ro,new URL(e,UC()));else throw new Error("Invalid URL")}catch{throw DC("An invalid or illegal string was specified")}Ee(this,ji,hp({onEvent:oe(this,Zy),onRetry:oe(this,My)})),Ee(this,vt,this.CONNECTING),Ee(this,Tc,3e3),Ee(this,_p,(o=r==null?void 0:r.fetch)!=null?o:globalThis.fetch),Ee(this,gp,(n=r==null?void 0:r.withCredentials)!=null?n:!1),Tr(this,Yt,Dy).call(this)}get readyState(){return oe(this,vt)}get url(){return oe(this,ro).href}get withCredentials(){return oe(this,gp)}get onerror(){return oe(this,Ci)}set onerror(e){Ee(this,Ci,e)}get onmessage(){return oe(this,Ri)}set onmessage(e){Ee(this,Ri,e)}get onopen(){return oe(this,Ic)}set onopen(e){Ee(this,Ic,e)}addEventListener(e,r,o){let n=r;super.addEventListener(e,n,o)}removeEventListener(e,r,o){let n=r;super.removeEventListener(e,n,o)}close(){oe(this,Ni)&&clearTimeout(oe(this,Ni)),oe(this,vt)!==this.CLOSED&&(oe(this,vn)&&oe(this,vn).abort(),Ee(this,vt,this.CLOSED),Ee(this,vn,void 0))}};vt=new WeakMap,ro=new WeakMap,Oi=new WeakMap,gp=new WeakMap,_p=new WeakMap,Tc=new WeakMap,Ni=new WeakMap,Ec=new WeakMap,vn=new WeakMap,ji=new WeakMap,Ci=new WeakMap,Ri=new WeakMap,Ic=new WeakMap,Yt=new WeakSet,Dy=function(){Ee(this,vt,this.CONNECTING),Ee(this,vn,new AbortController),oe(this,_p)(oe(this,ro),Tr(this,Yt,g0).call(this)).then(oe(this,Uy)).catch(oe(this,Ay))},Uy=new WeakMap,Ay=new WeakMap,g0=function(){var t;let e={mode:"cors",redirect:"follow",headers:{Accept:"text/event-stream",...oe(this,Ec)?{"Last-Event-ID":oe(this,Ec)}:void 0},cache:"no-store",signal:(t=oe(this,vn))==null?void 0:t.signal};return"window"in globalThis&&(e.credentials=this.withCredentials?"include":"same-origin"),e},Zy=new WeakMap,My=new WeakMap,Pc=function(t,e){var r;oe(this,vt)!==this.CLOSED&&Ee(this,vt,this.CLOSED);let o=new vp("error",{code:e,message:t});(r=oe(this,Ci))==null||r.call(this,o),this.dispatchEvent(o)},qy=function(t,e){var r;if(oe(this,vt)===this.CLOSED)return;Ee(this,vt,this.CONNECTING);let o=new vp("error",{code:e,message:t});(r=oe(this,Ci))==null||r.call(this,o),this.dispatchEvent(o),Ee(this,Ni,setTimeout(oe(this,Ly),oe(this,Tc)))},Ly=new WeakMap,no.CONNECTING=0,no.OPEN=1,no.CLOSED=2;function UC(){let t="document"in globalThis?globalThis.document:void 0;return t&&typeof t=="object"&&"baseURI"in t&&typeof t.baseURI=="string"?t.baseURI:void 0}function Di(t){return t?t instanceof Headers?Object.fromEntries(t.entries()):Array.isArray(t)?Object.fromEntries(t):{...t}:{}}function yp(t=fetch,e){return e?async(r,o)=>{let n={...e,...o,headers:o!=null&&o.headers?{...Di(e.headers),...Di(o.headers)}:e.headers};return t(r,n)}:t}var Fy,_0,y0,$0;Fy=($0=(y0=(_0=globalThis.crypto)==null?void 0:_0.webcrypto)!=null?y0:globalThis.crypto)!=null?$0:import("node:crypto").then(t=>t.webcrypto);async function AC(t){return(await Fy).getRandomValues(new Uint8Array(t))}async function ZC(t){let e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~",r="",o=await AC(t);for(let n=0;n128)throw`Expected a length between 43 and 128. Received ${t}.`;let e=await MC(t),r=await qC(e);return{code_verifier:e,code_challenge:r}}var We=hs().superRefine((t,e)=>{if(!URL.canParse(t))return e.addIssue({code:af.custom,message:"URL must be parseable",fatal:!0}),kn}).refine(t=>{let e=new URL(t);return e.protocol!=="javascript:"&&e.protocol!=="data:"&&e.protocol!=="vbscript:"},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),x0=Re({resource:v().url(),authorization_servers:j(We).optional(),jwks_uri:v().url().optional(),scopes_supported:j(v()).optional(),bearer_methods_supported:j(v()).optional(),resource_signing_alg_values_supported:j(v()).optional(),resource_name:v().optional(),resource_documentation:v().optional(),resource_policy_uri:v().url().optional(),resource_tos_uri:v().url().optional(),tls_client_certificate_bound_access_tokens:pe().optional(),authorization_details_types_supported:j(v()).optional(),dpop_signing_alg_values_supported:j(v()).optional(),dpop_bound_access_tokens_required:pe().optional()}),Hy=Re({issuer:v(),authorization_endpoint:We,token_endpoint:We,registration_endpoint:We.optional(),scopes_supported:j(v()).optional(),response_types_supported:j(v()),response_modes_supported:j(v()).optional(),grant_types_supported:j(v()).optional(),token_endpoint_auth_methods_supported:j(v()).optional(),token_endpoint_auth_signing_alg_values_supported:j(v()).optional(),service_documentation:We.optional(),revocation_endpoint:We.optional(),revocation_endpoint_auth_methods_supported:j(v()).optional(),revocation_endpoint_auth_signing_alg_values_supported:j(v()).optional(),introspection_endpoint:v().optional(),introspection_endpoint_auth_methods_supported:j(v()).optional(),introspection_endpoint_auth_signing_alg_values_supported:j(v()).optional(),code_challenge_methods_supported:j(v()).optional(),client_id_metadata_document_supported:pe().optional()}),LC=Re({issuer:v(),authorization_endpoint:We,token_endpoint:We,userinfo_endpoint:We.optional(),jwks_uri:We,registration_endpoint:We.optional(),scopes_supported:j(v()).optional(),response_types_supported:j(v()),response_modes_supported:j(v()).optional(),grant_types_supported:j(v()).optional(),acr_values_supported:j(v()).optional(),subject_types_supported:j(v()),id_token_signing_alg_values_supported:j(v()),id_token_encryption_alg_values_supported:j(v()).optional(),id_token_encryption_enc_values_supported:j(v()).optional(),userinfo_signing_alg_values_supported:j(v()).optional(),userinfo_encryption_alg_values_supported:j(v()).optional(),userinfo_encryption_enc_values_supported:j(v()).optional(),request_object_signing_alg_values_supported:j(v()).optional(),request_object_encryption_alg_values_supported:j(v()).optional(),request_object_encryption_enc_values_supported:j(v()).optional(),token_endpoint_auth_methods_supported:j(v()).optional(),token_endpoint_auth_signing_alg_values_supported:j(v()).optional(),display_values_supported:j(v()).optional(),claim_types_supported:j(v()).optional(),claims_supported:j(v()).optional(),service_documentation:v().optional(),claims_locales_supported:j(v()).optional(),ui_locales_supported:j(v()).optional(),claims_parameter_supported:pe().optional(),request_parameter_supported:pe().optional(),request_uri_parameter_supported:pe().optional(),require_request_uri_registration:pe().optional(),op_policy_uri:We.optional(),op_tos_uri:We.optional(),client_id_metadata_document_supported:pe().optional()}),w0=R({...LC.shape,...Hy.pick({code_challenge_methods_supported:!0}).shape}),k0=R({access_token:v(),id_token:v().optional(),token_type:v(),expires_in:Fn.number().optional(),scope:v().optional(),refresh_token:v().optional()}).strip(),S0=R({error:v(),error_description:v().optional(),error_uri:v().optional()}),b0=We.optional().or(Z("").transform(()=>{})),VC=R({redirect_uris:j(We),token_endpoint_auth_method:v().optional(),grant_types:j(v()).optional(),response_types:j(v()).optional(),client_name:v().optional(),client_uri:We.optional(),logo_uri:b0,scope:v().optional(),contacts:j(v()).optional(),tos_uri:b0,policy_uri:v().optional(),jwks_uri:We.optional(),jwks:js().optional(),software_id:v().optional(),software_version:v().optional(),software_statement:v().optional()}).strip(),FC=R({client_id:v(),client_secret:v().optional(),client_id_issued_at:ae().optional(),client_secret_expires_at:ae().optional()}).strip(),z0=VC.merge(FC),PF=R({error:v(),error_description:v().optional()}).strip(),TF=R({token:v(),token_type_hint:v().optional()}).strip();function I0(t){let e=typeof t=="string"?new URL(t):new URL(t.href);return e.hash="",e}function P0({requestedResource:t,configuredResource:e}){let r=typeof t=="string"?new URL(t):new URL(t.href),o=typeof e=="string"?new URL(e):new URL(e.href);if(r.origin!==o.origin||r.pathname.length0&&(c=a.authorization_servers[0])}catch{}c||(c=new URL("/",e));let u=await YC(e,t,a),l=await oD(c,{fetchFn:i}),d=await Promise.resolve(t.clientInformation());if(!d){if(r!==void 0)throw new Error("Existing OAuth client information is required when exchanging an authorization code");let w=(l==null?void 0:l.client_id_metadata_document_supported)===!0,k=t.clientMetadataUrl;if(k&&!XC(k))throw new so(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${k}`);if(w&&k)d={client_id:k},await((g=t.saveClientInformation)==null?void 0:g.call(t,d));else{if(!t.saveClientInformation)throw new Error("OAuth client information must be saveable for dynamic registration");let x=await uD(c,{metadata:l,clientMetadata:t.clientMetadata,fetchFn:i});await t.saveClientInformation(x),d=x}}let s=!t.redirectUrl;if(r!==void 0||s){let w=await cD(t,c,{metadata:l,resource:u,authorizationCode:r,fetchFn:i});return await t.saveTokens(w),"AUTHORIZED"}let f=await t.tokens();if(f!=null&&f.refresh_token)try{let w=await sD(c,{metadata:l,clientInformation:d,refreshToken:f.refresh_token,resource:u,addClientAuthentication:t.addClientAuthentication,fetchFn:i});return await t.saveTokens(w),"AUTHORIZED"}catch(w){if(!(!(w instanceof Ce)||w instanceof Er))throw w}let p=t.state?await t.state():void 0,{authorizationUrl:m,codeVerifier:h}=await iD(c,{metadata:l,clientInformation:d,state:p,redirectUrl:t.redirectUrl,scope:o||((y=a==null?void 0:a.scopes_supported)==null?void 0:y.join(" "))||t.clientMetadata.scope,resource:u});return await t.saveCodeVerifier(h),await t.redirectToAuthorization(m),"REDIRECT"}function XC(t){if(!t)return!1;try{let e=new URL(t);return e.protocol==="https:"&&e.pathname!=="/"}catch{return!1}}async function YC(t,e,r){let o=I0(t);if(e.validateResourceURL)return await e.validateResourceURL(o,r==null?void 0:r.resource);if(r){if(!P0({requestedResource:o,configuredResource:r.resource}))throw new Error(`Protected resource ${r.resource} does not match expected ${o} (or origin)`);return new URL(r.resource)}}function Ui(t){let e=t.headers.get("WWW-Authenticate");if(!e)return{};let[r,o]=e.split(" ");if(r.toLowerCase()!=="bearer"||!o)return{};let n=Gy(t,"resource_metadata")||void 0,i;if(n)try{i=new URL(n)}catch{}let a=Gy(t,"scope")||void 0,c=Gy(t,"error")||void 0;return{resourceMetadataUrl:i,scope:a,error:c}}function Gy(t,e){let r=t.headers.get("WWW-Authenticate");if(!r)return null;let o=new RegExp(`${e}=(?:"([^"]+)"|([^\\s,]+))`),n=r.match(o);return n?n[1]||n[2]:null}async function QC(t,e,r=fetch){var n,i;let o=await rD(t,"oauth-protected-resource",r,{protocolVersion:e==null?void 0:e.protocolVersion,metadataUrl:e==null?void 0:e.resourceMetadataUrl});if(!o||o.status===404)throw await((n=o==null?void 0:o.body)==null?void 0:n.cancel()),new Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!o.ok)throw await((i=o.body)==null?void 0:i.cancel()),new Error(`HTTP ${o.status} trying to load well-known OAuth protected resource metadata.`);return x0.parse(await o.json())}async function Xy(t,e,r=fetch){try{return await r(t,{headers:e})}catch(o){if(o instanceof TypeError)return e?Xy(t,void 0,r):void 0;throw o}}function eD(t,e="",r={}){return e.endsWith("/")&&(e=e.slice(0,-1)),r.prependPathname?`${e}/.well-known/${t}`:`/.well-known/${t}${e}`}async function E0(t,e,r=fetch){return await Xy(t,{"MCP-Protocol-Version":e},r)}function tD(t,e){return!t||t.status>=400&&t.status<500&&e!=="/"}async function rD(t,e,r,o){var u,l;let n=new URL(t),i=(u=o==null?void 0:o.protocolVersion)!=null?u:on,a;if(o!=null&&o.metadataUrl)a=new URL(o.metadataUrl);else{let d=eD(e,n.pathname);a=new URL(d,(l=o==null?void 0:o.metadataServerUrl)!=null?l:n),a.search=n.search}let c=await E0(a,i,r);if(!(o!=null&&o.metadataUrl)&&tD(c,n.pathname)){let d=new URL(`/.well-known/${e}`,n);c=await E0(d,i,r)}return c}function nD(t){let e=typeof t=="string"?new URL(t):t,r=e.pathname!=="/",o=[];if(!r)return o.push({url:new URL("/.well-known/oauth-authorization-server",e.origin),type:"oauth"}),o.push({url:new URL("/.well-known/openid-configuration",e.origin),type:"oidc"}),o;let n=e.pathname;return n.endsWith("/")&&(n=n.slice(0,-1)),o.push({url:new URL(`/.well-known/oauth-authorization-server${n}`,e.origin),type:"oauth"}),o.push({url:new URL(`/.well-known/openid-configuration${n}`,e.origin),type:"oidc"}),o.push({url:new URL(`${n}/.well-known/openid-configuration`,e.origin),type:"oidc"}),o}async function oD(t,{fetchFn:e=fetch,protocolVersion:r=on}={}){var i;let o={"MCP-Protocol-Version":r,Accept:"application/json"},n=nD(t);for(let{url:a,type:c}of n){let u=await Xy(a,o,e);if(u){if(!u.ok){if(await((i=u.body)==null?void 0:i.cancel()),u.status>=400&&u.status<500)continue;throw new Error(`HTTP ${u.status} trying to load ${c==="oauth"?"OAuth":"OpenID provider"} metadata from ${a}`)}return c==="oauth"?Hy.parse(await u.json()):w0.parse(await u.json())}}}async function iD(t,{metadata:e,clientInformation:r,redirectUrl:o,scope:n,state:i,resource:a}){let c;if(e){if(c=new URL(e.authorization_endpoint),!e.response_types_supported.includes(Wy))throw new Error(`Incompatible auth server: does not support response type ${Wy}`);if(e.code_challenge_methods_supported&&!e.code_challenge_methods_supported.includes(By))throw new Error(`Incompatible auth server: does not support code challenge method ${By}`)}else c=new URL("/authorize",t);let u=await Jy(),l=u.code_verifier,d=u.code_challenge;return c.searchParams.set("response_type",Wy),c.searchParams.set("client_id",r.client_id),c.searchParams.set("code_challenge",d),c.searchParams.set("code_challenge_method",By),c.searchParams.set("redirect_uri",String(o)),i&&c.searchParams.set("state",i),n&&c.searchParams.set("scope",n),n!=null&&n.includes("offline_access")&&c.searchParams.append("prompt","consent"),a&&c.searchParams.set("resource",a.href),{authorizationUrl:c,codeVerifier:l}}function aD(t,e,r){return new URLSearchParams({grant_type:"authorization_code",code:t,code_verifier:e,redirect_uri:String(r)})}async function j0(t,{metadata:e,tokenRequestParams:r,clientInformation:o,addClientAuthentication:n,resource:i,fetchFn:a}){var d;let c=e!=null&&e.token_endpoint?new URL(e.token_endpoint):new URL("/token",t),u=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"});if(i&&r.set("resource",i.href),n)await n(u,r,c,e);else if(o){let s=(d=e==null?void 0:e.token_endpoint_auth_methods_supported)!=null?d:[],f=HC(o,s);WC(f,o,u,r)}let l=await(a!=null?a:fetch)(c,{method:"POST",headers:u,body:r});if(!l.ok)throw await O0(l);return k0.parse(await l.json())}async function sD(t,{metadata:e,clientInformation:r,refreshToken:o,resource:n,addClientAuthentication:i,fetchFn:a}){let c=new URLSearchParams({grant_type:"refresh_token",refresh_token:o}),u=await j0(t,{metadata:e,tokenRequestParams:c,clientInformation:r,addClientAuthentication:i,resource:n,fetchFn:a});return{refresh_token:o,...u}}async function cD(t,e,{metadata:r,resource:o,authorizationCode:n,fetchFn:i}={}){let a=t.clientMetadata.scope,c;if(t.prepareTokenRequest&&(c=await t.prepareTokenRequest(a)),!c){if(!n)throw new Error("Either provider.prepareTokenRequest() or authorizationCode is required");if(!t.redirectUrl)throw new Error("redirectUrl is required for authorization_code flow");let l=await t.codeVerifier();c=aD(n,l,t.redirectUrl)}let u=await t.clientInformation();return j0(e,{metadata:r,tokenRequestParams:c,clientInformation:u!=null?u:void 0,addClientAuthentication:t.addClientAuthentication,resource:o,fetchFn:i})}async function uD(t,{metadata:e,clientMetadata:r,fetchFn:o}){let n;if(e){if(!e.registration_endpoint)throw new Error("Incompatible auth server: does not support dynamic client registration");n=new URL(e.registration_endpoint)}else n=new URL("/register",t);let i=await(o!=null?o:fetch)(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!i.ok)throw await O0(i);return z0.parse(await i.json())}var Yy=class extends Error{constructor(e,r,o){super(`SSE error: ${r}`),this.code=e,this.event=o}},$p=class{constructor(e,r){this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._eventSourceInit=r==null?void 0:r.eventSourceInit,this._requestInit=r==null?void 0:r.requestInit,this._authProvider=r==null?void 0:r.authProvider,this._fetch=r==null?void 0:r.fetch,this._fetchWithInit=yp(r==null?void 0:r.fetch,r==null?void 0:r.requestInit)}async _authThenStart(){var r;if(!this._authProvider)throw new lt("No auth provider");let e;try{e=await Or(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(o){throw(r=this.onerror)==null||r.call(this,o),o}if(e!=="AUTHORIZED")throw new lt;return await this._startOrAuth()}async _commonHeaders(){var o;let e={};if(this._authProvider){let n=await this._authProvider.tokens();n&&(e.Authorization=`Bearer ${n.access_token}`)}this._protocolVersion&&(e["mcp-protocol-version"]=this._protocolVersion);let r=Di((o=this._requestInit)==null?void 0:o.headers);return new Headers({...e,...r})}_startOrAuth(){var r,o,n;let e=(n=(o=(r=this==null?void 0:this._eventSourceInit)==null?void 0:r.fetch)!=null?o:this._fetch)!=null?n:fetch;return new Promise((i,a)=>{this._eventSource=new no(this._url.href,{...this._eventSourceInit,fetch:async(c,u)=>{let l=await this._commonHeaders();l.set("Accept","text/event-stream");let d=await e(c,{...u,headers:l});if(d.status===401&&d.headers.has("www-authenticate")){let{resourceMetadataUrl:s,scope:f}=Ui(d);this._resourceMetadataUrl=s,this._scope=f}return d}}),this._abortController=new AbortController,this._eventSource.onerror=c=>{var l;if(c.code===401&&this._authProvider){this._authThenStart().then(i,a);return}let u=new Yy(c.code,c.message,c);a(u),(l=this.onerror)==null||l.call(this,u)},this._eventSource.onopen=()=>{},this._eventSource.addEventListener("endpoint",c=>{var l;let u=c;try{if(this._endpoint=new URL(u.data,this._url),this._endpoint.origin!==this._url.origin)throw new Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`)}catch(d){a(d),(l=this.onerror)==null||l.call(this,d),this.close();return}i()}),this._eventSource.onmessage=c=>{var d,s;let u=c,l;try{l=kt.parse(JSON.parse(u.data))}catch(f){(d=this.onerror)==null||d.call(this,f);return}(s=this.onmessage)==null||s.call(this,l)}})}async start(){if(this._eventSource)throw new Error("SSEClientTransport already started! If using Client class, note that connect() calls start() automatically.");return await this._startOrAuth()}async finishAuth(e){if(!this._authProvider)throw new lt("No auth provider");if(await Or(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new lt("Failed to authorize")}async close(){var e,r,o;(e=this._abortController)==null||e.abort(),(r=this._eventSource)==null||r.close(),(o=this.onclose)==null||o.call(this)}async send(e){var r,o,n,i;if(!this._endpoint)throw new Error("Not connected");try{let a=await this._commonHeaders();a.set("content-type","application/json");let c={...this._requestInit,method:"POST",headers:a,body:JSON.stringify(e),signal:(r=this._abortController)==null?void 0:r.signal},u=await((o=this._fetch)!=null?o:fetch)(this._endpoint,c);if(!u.ok){let l=await u.text().catch(()=>null);if(u.status===401&&this._authProvider){let{resourceMetadataUrl:d,scope:s}=Ui(u);if(this._resourceMetadataUrl=d,this._scope=s,await Or(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new lt;return this.send(e)}throw new Error(`Error POSTing to endpoint (HTTP ${u.status}): ${l}`)}await((n=u.body)==null?void 0:n.cancel())}catch(a){throw(i=this.onerror)==null||i.call(this,a),a}}setProtocolVersion(e){this._protocolVersion=e}};var q0=require("node:crypto");var D0=er(C0());function Qy(t,{limit:e,encoding:r}){let o=D0.default.parse(e);return new Promise((n,i)=>{let a=0,c=[];t.on("data",u=>{if(a+=u.length,a>o)return i(new Error(`Message size exceeds limit of ${e} bytes`));c.push(u)}),t.on("end",()=>{try{n(Buffer.concat(c).toString(r))}catch(u){i(u)}}),t.on("error",u=>{i(u)})})}var L0=er(M0(),1),V0=require("node:url"),xD="4mb",xp=class{constructor(e,r,o){this._endpoint=e,this.res=r,this._sessionId=(0,q0.randomUUID)(),this._options=o||{enableDnsRebindingProtection:!1}}validateRequestHeaders(e){if(this._options.enableDnsRebindingProtection){if(this._options.allowedHosts&&this._options.allowedHosts.length>0){let r=e.headers.host;if(!r||!this._options.allowedHosts.includes(r))return`Invalid Host header: ${r}`}if(this._options.allowedOrigins&&this._options.allowedOrigins.length>0){let r=e.headers.origin;if(r&&!this._options.allowedOrigins.includes(r))return`Invalid Origin header: ${r}`}}}async start(){if(this._sseResponse)throw new Error("SSEServerTransport already started! If using Server class, note that connect() calls start() automatically.");this.res.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache, no-transform",Connection:"keep-alive"});let e="http://localhost",r=new V0.URL(this._endpoint,e);r.searchParams.set("sessionId",this._sessionId);let o=r.pathname+r.search+r.hash;this.res.write(`event: endpoint +./node_modules/playwright-core/lib/server/socksClientCertificatesInterceptor.js:304: return host === "local.playwright" ? "localhost" : host; +./node_modules/playwright-core/lib/server/browserContext.js:63: // @see https://nodejs.org/api/events.html#events_error_events +./node_modules/playwright-core/lib/server/trace/viewer/traceViewer.js:70: const url = new URL("http://localhost" + request.url); +./node_modules/playwright-core/lib/server/trace/viewer/traceViewer.js:175: await (0, import_utilsBundle.open)(url.replace("0.0.0.0", "localhost")).catch(() => { +./node_modules/playwright-core/lib/server/network.js:63: return hostname === "localhost" || hostname.endsWith(".localhost"); +./node_modules/playwright-core/lib/server/bidi/third_party/firefoxPrefs.js:124: "datareporting.healthreport.documentServerURI": `http://${server}/dummy/healthreport/`, +./node_modules/playwright-core/lib/server/chromium/chromium.js:220: if (endpointURL.hostname === "localhost" || endpointURL.hostname === "127.0.0.1") +./node_modules/playwright-core/lib/server/chromium/chromium.js:229: const endpointURLString = addProtocol(debuggerAddress || chromeOptionsURL).replace("localhost", "127.0.0.1"); +./node_modules/playwright-core/lib/server/chromium/chromium.js:232: if (endpointURL.hostname === "localhost" || endpointURL.hostname === "127.0.0.1") { +./node_modules/playwright-core/lib/server/chromium/chromium.js:233: const sessionInfoUrl = new URL(hubUrl).origin + "/grid/api/testsession?session=" + sessionId; +./node_modules/playwright-core/lib/server/utils/socksProxy.js:297: return host === "localhost" || host.endsWith(".localhost") || host === "127.0.0.1" || host === "[::1]"; +./node_modules/playwright-core/lib/server/utils/socksProxy.js:464: host = "localhost"; +./node_modules/playwright-core/lib/server/utils/wsServer.js:56: const wsEndpoint2 = typeof address === "string" ? `${address}${path}` : `ws://${hostname || "localhost"}:${address.port}${path}`; +./node_modules/playwright-core/lib/server/utils/wsServer.js:67: const pathname = new URL("http://localhost" + request.url).pathname; +./node_modules/playwright-core/lib/server/utils/wsServer.js:85: const url = new URL("http://localhost" + (request.url || "")); +./node_modules/playwright-core/lib/server/utils/httpServer.js:109: this._urlPrefixHumanReadable = `http://${host ?? "localhost"}:${address.port}`; +./node_modules/playwright-core/lib/server/utils/httpServer.js:186: const url = new URL("http://localhost" + request.url); +./node_modules/playwright-core/lib/server/utils/network.js:174: const { host = "localhost", port = 0 } = options; +./node_modules/playwright-core/lib/server/utils/processLauncher.js:110: // @see https://nodejs.org/api/child_process.html#child_process_options_detached +./node_modules/playwright-core/lib/server/utils/crypto.js:144: DER.encodePrintableString("localhost") +./node_modules/playwright-core/lib/server/utils/crypto.js:168: DER.encodePrintableString("localhost") +./node_modules/playwright-core/lib/server/helper.js:29: if (urlString.startsWith("localhost") || urlString.startsWith("127.0.0.1")) +./node_modules/playwright-core/lib/server/registry/index.js:1181: const products = lowercaseAllKeys(JSON.parse(await (0, import_network.fetchData)(void 0, { url: "https://edgeupdates.microsoft.com/api/products" }))); +./node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js:5:If your trace is in a local or private network, please grant permission for Local Network Access.`),new Error(a)}const n=new Qs(e.storage(),r=>e.resourceForSha1(r));return{traceLoader:e,snapshotServer:n}}async function Eo(s){const t=s.request;if(t.url.startsWith("chrome-extension://"))return fetch(t);const e=new URL(t.url);let n;if(t.url.startsWith(self.registration.scope)&&(n=e.pathname.substring(go.length-1)),n==="/restartServiceWorker")return bo(),new Response(null,{status:200});if(n==="/ping")return new Response(null,{status:200});const i=!!s.resultingClientId,r=s.clientId?await self.clients.get(s.clientId):void 0;if(i&&!(n!=null&&n.startsWith("/sha1/"))){if(n!=null&&n.startsWith("/snapshot/")){const{errorResponse:a,loadedTrace:o}=await Mn(s.resultingClientId,e,So);if(a)return a;const l=n.substring(10),_=o.snapshotServer.serveSnapshot(l,e.searchParams,e.href);return Fn&&_.headers.set("Content-Security-Policy","upgrade-insecure-requests"),_}return fetch(s.request)}if(!n){if(!r)return new Response("Sub-resource without a client",{status:500});const{snapshotServer:a}=await Ks(r.id,new URL(r.url),Un(r));if(!a)return new Response(null,{status:404});const o=[t.url];return Fn&&t.url.startsWith("https://")&&o.push(t.url.replace(/^https/,"http")),a.serveResource(o,t.method,r.url)}if(n==="/contexts"||n.startsWith("/snapshotInfo/")||n.startsWith("/closest-screenshot/")||n.startsWith("/sha1/")){if(!r)return new Response("Sub-resource without a client",{status:500});const{errorResponse:a,loadedTrace:o}=await Mn(r.id,e,Un(r));if(a)return a;if(n==="/contexts")return new Response(JSON.stringify(o.traceLoader.contextEntries),{status:200,headers:{"Content-Type":"application/json"}});if(n.startsWith("/snapshotInfo/")){const l=n.substring(14);return o.snapshotServer.serveSnapshotInfo(l,e.searchParams)}if(n.startsWith("/closest-screenshot/")){const l=n.substring(20);return o.snapshotServer.serveClosestScreenshot(l,e.searchParams)}if(n.startsWith("/sha1/")){const l=await o.traceLoader.resourceForSha1(n.slice(6));return l?new Response(l,{status:200,headers:xo(e.searchParams)}):new Response(null,{status:404})}}return fetch(s.request)}function xo(s){const t=s.get("dn"),e=s.get("dct");if(!t)return;const n=new Headers;return n.set("Content-Disposition",`attachment; filename="attachment"; filename*=UTF-8''${encodeURIComponent(t)}`),e&&n.set("Content-Type",e),n}async function To(){const s=await self.clients.matchAll(),t=new Set;for(const[e,n]of $e){if(!s.find(i=>i.id===e)){$e.delete(e);continue}t.add(n)}for(const e of Ee.keys())t.has(e)||Ee.delete(e)}function Un(s){return(t,e)=>{s.postMessage({method:"progress",params:{done:t,total:e}})}}function So(s,t){}function Ro(s){const e=new URL(s,"http://localhost").searchParams.get("path");return!!(e!=null&&e.endsWith(".json"))}self.addEventListener("fetch",function(s){if(s.request.headers.get("x-pw-serviceworker")==="skip")return!1;s.respondWith(Eo(s))}); +./node_modules/playwright-core/lib/vite/traceViewer/snapshot.html:9: throw new Error(`Service workers are not supported.\nMake sure to serve the Trace Viewer (${window.location}) via HTTPS or localhost.`); +./node_modules/playwright-core/lib/vite/traceViewer/index.BDwrLSGN.js:2:Make sure to serve the Trace Viewer (${window.location}) via HTTPS or localhost.`);navigator.serviceWorker.register("sw.bundle.js"),navigator.serviceWorker.controller||await new Promise(h=>{navigator.serviceWorker.oncontrollerchange=()=>h()}),setInterval(function(){fetch("ping")},1e4)}const c=o.get("trace"),l=(c==null?void 0:c.endsWith(".json"))?e.jsx(q,{traceJson:c}):e.jsx($,{});V.createRoot(document.querySelector("#root")).render(l)})(); +./node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-CJSZINFr.js:51:`,"\\n")}function Ex(n,e){if(n)for(const i of e.split("|")){if(i==="url")try{const l=new URL(n[i]);return l.protocol==="data:"?l.protocol:l.protocol==="about:"?n[i]:l.pathname+l.search}catch{if(n[i]!==void 0)return n[i]}if(i==="timeNumber"&&n[i]!==void 0)return new Date(n[i]).toString();const r=Ax(n,i);if(r!==void 0)return r}}function Ax(n,e){const i=e.split(".");let r=n;for(const l of i){if(typeof r!="object"||r===null)return;r=r[l]}if(r!==void 0)return String(r)}function Nx(n){var i;return(n.title??((i=Qh.get(n.type+"."+n.method))==null?void 0:i.title)??n.method).replace(/\{([^}]+)\}/g,(r,l)=>eb(n.params,l)??r)}function Cx(n){var e;return(e=Qh.get(n.type+"."+n.method))==null?void 0:e.group}const qa=Symbol("context"),tb=Symbol("nextInContext"),nb=Symbol("prevByEndTime"),ib=Symbol("nextByStartTime"),Py=Symbol("events");class BC{constructor(e,i){var l;i.forEach(o=>kx(o));const r=i.find(o=>o.origin==="library");this.traceUri=e,this.browserName=(r==null?void 0:r.browserName)||"",this.sdkLanguage=r==null?void 0:r.sdkLanguage,this.channel=r==null?void 0:r.channel,this.testIdAttributeName=r==null?void 0:r.testIdAttributeName,this.platform=(r==null?void 0:r.platform)||"",this.playwrightVersion=(l=i.find(o=>o.playwrightVersion))==null?void 0:l.playwrightVersion,this.title=(r==null?void 0:r.title)||"",this.options=(r==null?void 0:r.options)||{},this.actions=Mx(i),this.pages=[].concat(...i.map(o=>o.pages)),this.wallTime=i.map(o=>o.wallTime).reduce((o,u)=>Math.min(o||Number.MAX_VALUE,u),Number.MAX_VALUE),this.startTime=i.map(o=>o.startTime).reduce((o,u)=>Math.min(o,u),Number.MAX_VALUE),this.endTime=i.map(o=>o.endTime).reduce((o,u)=>Math.max(o,u),Number.MIN_VALUE),this.events=[].concat(...i.map(o=>o.events)),this.stdio=[].concat(...i.map(o=>o.stdio)),this.errors=[].concat(...i.map(o=>o.errors)),this.hasSource=i.some(o=>o.hasSource),this.hasStepData=i.some(o=>o.origin==="testRunner"),this.resources=[...i.map(o=>o.resources)].flat(),this.attachments=this.actions.flatMap(o=>{var u;return((u=o.attachments)==null?void 0:u.map(f=>({...f,callId:o.callId,traceUri:e})))??[]}),this.visibleAttachments=this.attachments.filter(o=>!o.name.startsWith("_")),this.events.sort((o,u)=>o.time-u.time),this.resources.sort((o,u)=>o._monotonicTime-u._monotonicTime),this.errorDescriptors=this.hasStepData?this._errorDescriptorsFromTestRunner():this._errorDescriptorsFromActions(),this.sources=Bx(this.actions,this.errorDescriptors),this.actionCounters=new Map;for(const o of this.actions)o.group=o.group??Cx({type:o.class,method:o.method}),o.group&&this.actionCounters.set(o.group,1+(this.actionCounters.get(o.group)||0))}createRelativeUrl(e){const i=new URL("http://localhost/"+e);return i.searchParams.set("trace",this.traceUri),i.toString().substring(17)}failedAction(){return this.actions.findLast(e=>e.error)}filteredActions(e){const i=new Set(e);return this.actions.filter(r=>!r.group||i.has(r.group))}renderActionTree(e){const i=this.filteredActions(e??[]),{rootItem:r}=sb(i),l=[],o=(u,f)=>{const h=Nx({...u.action,type:u.action.class});l.push(`${f}${h||u.id}`);for(const g of u.children)o(g,f+" ")};return r.children.forEach(u=>o(u,"")),l}_errorDescriptorsFromActions(){var i;const e=[];for(const r of this.actions||[])(i=r.error)!=null&&i.message&&e.push({action:r,stack:r.stack,message:r.error.message});return e}_errorDescriptorsFromTestRunner(){return this.errors.filter(e=>!!e.message).map((e,i)=>({stack:e.stack,message:e.message}))}}function kx(n){for(const i of n.pages)i[qa]=n;for(let i=0;i=0;i--){const r=n.actions[i];r[tb]=e,r.class!=="Route"&&(e=r)}for(const i of n.events)i[qa]=n;for(const i of n.resources)i[qa]=n}function Mx(n){const e=[],i=Ox(n);e.push(...i),e.sort((r,l)=>l.parentId===r.callId?1:r.parentId===l.callId?-1:r.endTime-l.endTime);for(let r=1;rl.parentId===r.callId?-1:r.parentId===l.callId?1:r.startTime-l.startTime);for(let r=0;r+1u.origin==="library"),r=n.filter(u=>u.origin==="testRunner");if(!r.length||!i.length)return n.map(u=>u.actions.map(f=>({...f,context:u}))).flat();for(const u of i)for(const f of u.actions)e.set(f.stepId||`tmp-step@${++Zy}`,{...f,context:u});const l=Lx(r,e);l&&jx(i,l);const o=new Map;for(const u of r)for(const f of u.actions){const h=f.stepId&&e.get(f.stepId);if(h){o.set(f.callId,h.callId),f.error&&(h.error=f.error),f.attachments&&(h.attachments=f.attachments),f.annotations&&(h.annotations=f.annotations),f.parentId&&(h.parentId=o.get(f.parentId)??f.parentId),f.group&&(h.group=f.group),h.startTime=f.startTime,h.endTime=f.endTime;continue}f.parentId&&(f.parentId=o.get(f.parentId)??f.parentId),e.set(f.stepId||`tmp-step@${++Zy}`,{...f,context:u})}return[...e.values()]}function jx(n,e){for(const i of n){i.startTime+=e,i.endTime+=e;for(const r of i.actions)r.startTime&&(r.startTime+=e),r.endTime&&(r.endTime+=e);for(const r of i.events)r.time+=e;for(const r of i.stdio)r.timestamp+=e;for(const r of i.pages)for(const l of r.screencastFrames)l.timestamp+=e;for(const r of i.resources)r._monotonicTime&&(r._monotonicTime+=e)}}function Lx(n,e){for(const i of n)for(const r of i.actions){if(!r.startTime)continue;const l=r.stepId?e.get(r.stepId):void 0;if(l)return r.startTime-l.startTime}return 0}function sb(n){const e=new Map;for(const l of n)e.set(l.callId,{id:l.callId,parent:void 0,children:[],action:l});const i={action:{...Ux},id:"",parent:void 0,children:[]};for(const l of e.values()){i.action.startTime=Math.min(i.action.startTime,l.action.startTime),i.action.endTime=Math.max(i.action.endTime,l.action.endTime);const o=l.action.parentId&&e.get(l.action.parentId)||i;o.children.push(l),l.parent=o}const r=l=>{for(const o of l.children)o.action.stack=o.action.stack??l.action.stack,r(o)};return r(i),{rootItem:i,itemMap:e}}function rb(n){return n[qa]}function Rx(n){return n[tb]}function Wy(n){return n[nb]}function e0(n){return n[ib]}function Dx(n){let e=0,i=0;for(const r of zx(n)){if(r.type==="console"){const l=r.messageType;l==="warning"?++i:l==="error"&&++e}r.type==="event"&&r.method==="pageError"&&++e}return{errors:e,warnings:i}}function zx(n){let e=n[Py];if(e)return e;const i=Rx(n);return e=rb(n).events.filter(r=>r.time>=n.startTime&&(!i||r.time{const h=Math.max(l,n)*window.devicePixelRatio,[g,y]=on(o?o+"."+r+":size":void 0,h),[m,w]=on(o?o+"."+r+":size":void 0,h),[v,E]=U.useState(null),[x,_]=gs();let N;r==="vertical"?(N=m/window.devicePixelRatio,x&&x.heightE({offset:r==="vertical"?$.clientY:$.clientX,size:N}),onMouseUp:()=>E(null),onMouseMove:$=>{if(!$.buttons)E(null);else if(v){const D=(r==="vertical"?$.clientY:$.clientX)-v.offset,K=i?v.size+D:v.size-D,q=$.target.parentElement.getBoundingClientRect(),j=Math.min(Math.max(l,K),(r==="vertical"?q.height:q.width)-l);r==="vertical"?w(j*window.devicePixelRatio):y(j*window.devicePixelRatio)}}})]})},et=function(n,e,i){return n>=e&&n<=i};function Rt(n){return et(n,48,57)}function t0(n){return Rt(n)||et(n,65,70)||et(n,97,102)}function qx(n){return et(n,65,90)}function $x(n){return et(n,97,122)}function Ix(n){return qx(n)||$x(n)}function Vx(n){return n>=128}function $o(n){return Ix(n)||Vx(n)||n===95}function n0(n){return $o(n)||Rt(n)||n===45}function Gx(n){return et(n,0,8)||n===11||et(n,14,31)||n===127}function Io(n){return n===10}function Qn(n){return Io(n)||n===9||n===32}const Kx=1114111;class Jh extends Error{constructor(e){super(e),this.name="InvalidCharacterError"}}function Yx(n){const e=[];for(let i=0;i=e.length?-1:e[V]},u=function(V){if(V===void 0&&(V=1),V>3)throw"Spec Error: no more than three codepoints of lookahead.";return o(i+V)},f=function(V){return V===void 0&&(V=1),i+=V,l=o(i),!0},h=function(){return i-=1,!0},g=function(V){return V===void 0&&(V=l),V===-1},y=function(){if(m(),f(),Qn(l)){for(;Qn(u());)f();return new ic}else{if(l===34)return E();if(l===35)if(n0(u())||N(u(1),u(2))){const V=new vb("");return $(u(1),u(2),u(3))&&(V.type="id"),V.value=Q(),V}else return new dt(l);else return l===36?u()===61?(f(),new Jx):new dt(l):l===39?E():l===40?new mb:l===41?new Ph:l===42?u()===61?(f(),new Px):new dt(l):l===43?K()?(h(),w()):new dt(l):l===44?new hb:l===45?K()?(h(),w()):u(1)===45&&u(2)===62?(f(2),new cb):I()?(h(),v()):new dt(l):l===46?K()?(h(),w()):new dt(l):l===58?new ub:l===59?new fb:l===60?u(1)===33&&u(2)===45&&u(3)===45?(f(3),new ob):new dt(l):l===64?$(u(1),u(2),u(3))?new bb(Q()):new dt(l):l===91?new gb:l===92?C()?(h(),v()):new dt(l):l===93?new kh:l===94?u()===61?(f(),new Qx):new dt(l):l===123?new db:l===124?u()===61?(f(),new Fx):u()===124?(f(),new yb):new dt(l):l===125?new pb:l===126?u()===61?(f(),new Xx):new dt(l):Rt(l)?(h(),w()):$o(l)?(h(),v()):g()?new Go:new dt(l)}},m=function(){for(;u(1)===47&&u(2)===42;)for(f(2);;)if(f(),l===42&&u()===47){f();break}else if(g())return},w=function(){const V=q();if($(u(1),u(2),u(3))){const J=new Zx;return J.value=V.value,J.repr=V.repr,J.type=V.type,J.unit=Q(),J}else if(u()===37){f();const J=new xb;return J.value=V.value,J.repr=V.repr,J}else{const J=new wb;return J.value=V.value,J.repr=V.repr,J.type=V.type,J}},v=function(){const V=Q();if(V.toLowerCase()==="url"&&u()===40){for(f();Qn(u(1))&&Qn(u(2));)f();return u()===34||u()===39?new Ya(V):Qn(u())&&(u(2)===34||u(2)===39)?new Ya(V):x()}else return u()===40?(f(),new Ya(V)):new Zh(V)},E=function(V){V===void 0&&(V=l);let J="";for(;f();){if(l===V||g())return new Wh(J);if(Io(l))return h(),new lb;l===92?g(u())||(Io(u())?f():J+=st(_())):J+=st(l)}throw new Error("Internal error")},x=function(){const V=new Sb("");for(;Qn(u());)f();if(g(u()))return V;for(;f();){if(l===41||g())return V;if(Qn(l)){for(;Qn(u());)f();return u()===41||g(u())?(f(),V):(ne(),new Vo)}else{if(l===34||l===39||l===40||Gx(l))return ne(),new Vo;if(l===92)if(C())V.value+=st(_());else return ne(),new Vo;else V.value+=st(l)}}throw new Error("Internal error")},_=function(){if(f(),t0(l)){const V=[l];for(let W=0;W<5&&t0(u());W++)f(),V.push(l);Qn(u())&&f();let J=parseInt(V.map(function(W){return String.fromCharCode(W)}).join(""),16);return J>Kx&&(J=65533),J}else return g()?65533:l},N=function(V,J){return!(V!==92||Io(J))},C=function(){return N(l,u())},$=function(V,J,W){return V===45?$o(J)||J===45||N(J,W):$o(V)?!0:V===92?N(V,J):!1},I=function(){return $(l,u(1),u(2))},D=function(V,J,W){return V===43||V===45?!!(Rt(J)||J===46&&Rt(W)):V===46?!!Rt(J):!!Rt(V)},K=function(){return D(l,u(1),u(2))},Q=function(){let V="";for(;f();)if(n0(l))V+=st(l);else if(C())V+=st(_());else return h(),V;throw new Error("Internal parse error")},q=function(){let V="",J="integer";for((u()===43||u()===45)&&(f(),V+=st(l));Rt(u());)f(),V+=st(l);if(u(1)===46&&Rt(u(2)))for(f(),V+=st(l),f(),V+=st(l),J="number";Rt(u());)f(),V+=st(l);const W=u(1),Ae=u(2),B=u(3);if((W===69||W===101)&&Rt(Ae))for(f(),V+=st(l),f(),V+=st(l),J="number";Rt(u());)f(),V+=st(l);else if((W===69||W===101)&&(Ae===43||Ae===45)&&Rt(B))for(f(),V+=st(l),f(),V+=st(l),f(),V+=st(l),J="number";Rt(u());)f(),V+=st(l);const P=j(V);return{type:J,value:P,repr:V}},j=function(V){return+V},ne=function(){for(;f();){if(l===41||g())return;C()&&_()}};let le=0;for(;!g(u());)if(r.push(y()),le++,le>e.length*2)throw new Error("I'm infinite-looping!");return r}class Qe{constructor(){this.tokenType=""}toJSON(){return{token:this.tokenType}}toString(){return this.tokenType}toSource(){return""+this}}class lb extends Qe{constructor(){super(...arguments),this.tokenType="BADSTRING"}}class Vo extends Qe{constructor(){super(...arguments),this.tokenType="BADURL"}}class ic extends Qe{constructor(){super(...arguments),this.tokenType="WHITESPACE"}toString(){return"WS"}toSource(){return" "}}class ob extends Qe{constructor(){super(...arguments),this.tokenType="CDO"}toSource(){return""}}class ub extends Qe{constructor(){super(...arguments),this.tokenType=":"}}class fb extends Qe{constructor(){super(...arguments),this.tokenType=";"}}class hb extends Qe{constructor(){super(...arguments),this.tokenType=","}}class Er extends Qe{constructor(){super(...arguments),this.value="",this.mirror=""}}class db extends Er{constructor(){super(),this.tokenType="{",this.value="{",this.mirror="}"}}class pb extends Er{constructor(){super(),this.tokenType="}",this.value="}",this.mirror="{"}}class gb extends Er{constructor(){super(),this.tokenType="[",this.value="[",this.mirror="]"}}class kh extends Er{constructor(){super(),this.tokenType="]",this.value="]",this.mirror="["}}class mb extends Er{constructor(){super(),this.tokenType="(",this.value="(",this.mirror=")"}}class Ph extends Er{constructor(){super(),this.tokenType=")",this.value=")",this.mirror="("}}class Xx extends Qe{constructor(){super(...arguments),this.tokenType="~="}}class Fx extends Qe{constructor(){super(...arguments),this.tokenType="|="}}class Qx extends Qe{constructor(){super(...arguments),this.tokenType="^="}}class Jx extends Qe{constructor(){super(...arguments),this.tokenType="$="}}class Px extends Qe{constructor(){super(...arguments),this.tokenType="*="}}class yb extends Qe{constructor(){super(...arguments),this.tokenType="||"}}class Go extends Qe{constructor(){super(...arguments),this.tokenType="EOF"}toSource(){return""}}class dt extends Qe{constructor(e){super(),this.tokenType="DELIM",this.value="",this.value=st(e)}toString(){return"DELIM("+this.value+")"}toJSON(){const e=this.constructor.prototype.constructor.prototype.toJSON.call(this);return e.value=this.value,e}toSource(){return this.value==="\\"?`\\ +./node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-CJSZINFr.js:266:`,i)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;const i=qo(e),r=cr(i);return r.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;const i=qo(e),r=cr(i);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,i){return this.type!=="comment"||this.indent<=i?!1:e.every(r=>r.type==="newline"||r.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}}function zS(n){const e=n.prettyErrors!==!1;return{lineCounter:n.lineCounter||e&&new RS||null,prettyErrors:e}}function sC(n,e={}){const{lineCounter:i,prettyErrors:r}=zS(e),l=new Id(i==null?void 0:i.addNewLine),o=new $d(e),u=Array.from(o.compose(l.parse(n)));if(r&&i)for(const f of u)f.errors.forEach(dc(n,i)),f.warnings.forEach(dc(n,i));return u.length>0?u:Object.assign([],{empty:!0},o.streamInfo())}function BS(n,e={}){const{lineCounter:i,prettyErrors:r}=zS(e),l=new Id(i==null?void 0:i.addNewLine),o=new $d(e);let u=null;for(const f of o.compose(l.parse(n),!0,n.length))if(!u)u=f;else if(u.options.logLevel!=="silent"){u.errors.push(new hs(f.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return r&&i&&(u.errors.forEach(dc(n,i)),u.warnings.forEach(dc(n,i))),u}function rC(n,e,i){let r;typeof e=="function"?r=e:i===void 0&&e&&typeof e=="object"&&(i=e);const l=BS(n,i);if(!l)return null;if(l.warnings.forEach(o=>iS(l.options.logLevel,o)),l.errors.length>0){if(l.options.logLevel!=="silent")throw l.errors[0];l.errors=[]}return l.toJS(Object.assign({reviver:r},i))}function aC(n,e,i){let r=null;if(typeof e=="function"||Array.isArray(e)?r=e:i===void 0&&e&&(i=e),typeof i=="string"&&(i=i.length),typeof i=="number"){const l=Math.round(i);i=l<1?void 0:l>8?{indent:8}:{indent:l}}if(n===void 0){const{keepUndefined:l}=i??e??{};if(!l)return}return bs(n)&&!r?n.toString(i):new Rr(n,r,i).toString(i)}const US=Object.freeze(Object.defineProperty({__proto__:null,Alias:_c,CST:tC,Composer:$d,Document:Rr,Lexer:LS,LineCounter:RS,Pair:vt,Parser:Id,Scalar:he,Schema:jc,YAMLError:Hd,YAMLMap:Xt,YAMLParseError:hs,YAMLSeq:Di,YAMLWarning:xS,isAlias:ys,isCollection:$e,isDocument:bs,isMap:Mr,isNode:Ie,isPair:He,isScalar:Le,isSeq:Or,parse:rC,parseAllDocuments:sC,parseDocument:BS,stringify:aC,visit:Ri,visitAsync:xc},Symbol.toStringTag,{value:"Module"})),lC=({action:n,model:e,sdkLanguage:i,testIdAttributeName:r,isInspecting:l,setIsInspecting:o,highlightedElement:u,setHighlightedElement:f})=>{const[h,g]=U.useState("action"),[y]=on("shouldPopulateCanvasFromScreenshot",!1),m=U.useMemo(()=>fC(n),[n]),{snapshotInfoUrl:w,snapshotUrl:v,popoutUrl:E}=U.useMemo(()=>{const _=m[h];return e&&_?hC(e.traceUri,_,y):{snapshotInfoUrl:void 0,snapshotUrl:void 0,popoutUrl:void 0}},[m,h,y,e]),x=U.useMemo(()=>w!==void 0?{snapshotInfoUrl:w,snapshotUrl:v,popoutUrl:E}:void 0,[w,v,E]);return S.jsxs("div",{className:"snapshot-tab vbox",children:[S.jsxs(nd,{children:[S.jsx(Ht,{className:"pick-locator",title:"Pick locator",icon:"target",toggled:l,onClick:()=>o(!l)}),S.jsx("div",{className:"hbox",style:{height:"100%"},role:"tablist",children:["action","before","after"].map(_=>S.jsx(Hb,{id:_,title:uC(_),selected:h===_,onSelect:()=>g(_)},_))}),S.jsx("div",{style:{flex:"auto"}}),S.jsx(Ht,{icon:"link-external",title:"Open snapshot in a new tab",disabled:!(x!=null&&x.popoutUrl),onClick:()=>{const _=window.open((x==null?void 0:x.popoutUrl)||"","_blank");_==null||_.addEventListener("DOMContentLoaded",()=>{new qv(_,{isUnderTest:qS,sdkLanguage:i,testIdAttributeName:r,stableRafCount:1,browserName:"chromium",customEngines:[]}).consoleApi.install()})}})]}),S.jsx(oC,{snapshotUrls:x,sdkLanguage:i,testIdAttributeName:r,isInspecting:l,setIsInspecting:o,highlightedElement:u,setHighlightedElement:f})]})},oC=({snapshotUrls:n,sdkLanguage:e,testIdAttributeName:i,isInspecting:r,setIsInspecting:l,highlightedElement:o,setHighlightedElement:u})=>{const f=U.useRef(null),h=U.useRef(null),[g,y]=U.useState({viewport:$S,url:""}),m=U.useRef({iteration:0,visibleIframe:0});return U.useEffect(()=>{(async()=>{const w=m.current.iteration+1,v=1-m.current.visibleIframe;m.current.iteration=w;const E=await dC(n==null?void 0:n.snapshotInfoUrl);if(m.current.iteration!==w)return;const x=[f,h][v].current;if(x){let _=()=>{};const N=new Promise(C=>_=C);try{x.addEventListener("load",_),x.addEventListener("error",_);const C=(n==null?void 0:n.snapshotUrl)||pC;x.contentWindow?x.contentWindow.location.replace(C):x.src=C,await N}catch{}finally{x.removeEventListener("load",_),x.removeEventListener("error",_)}}m.current.iteration===w&&(m.current.visibleIframe=v,y(E))})()},[n]),S.jsxs("div",{className:"vbox",tabIndex:0,onKeyDown:w=>{w.key==="Escape"&&r&&l(!1)},children:[S.jsx(Y0,{isInspecting:r,sdkLanguage:e,testIdAttributeName:i,highlightedElement:o,setHighlightedElement:u,iframe:f.current,iteration:m.current.iteration}),S.jsx(Y0,{isInspecting:r,sdkLanguage:e,testIdAttributeName:i,highlightedElement:o,setHighlightedElement:u,iframe:h.current,iteration:m.current.iteration}),S.jsx(cC,{snapshotInfo:g,children:S.jsxs("div",{className:"snapshot-switcher",children:[S.jsx("iframe",{ref:f,name:"snapshot",title:"DOM Snapshot",className:Fe(m.current.visibleIframe===0&&"snapshot-visible")}),S.jsx("iframe",{ref:h,name:"snapshot",title:"DOM Snapshot",className:Fe(m.current.visibleIframe===1&&"snapshot-visible")})]})})]})},cC=({snapshotInfo:n,children:e})=>{const[i,r]=gs(),l=40,o={width:n.viewport.width,height:n.viewport.height},u={width:Math.max(o.width,480),height:Math.max(o.height+l,320)},f=Math.min(i.width/u.width,i.height/u.height,1),h={x:(i.width-u.width)/2,y:(i.height-u.height)/2};return S.jsx("div",{ref:r,className:"snapshot-wrapper",children:S.jsxs("div",{className:"snapshot-container",style:{width:u.width+"px",height:u.height+"px",transform:`translate(${h.x}px, ${h.y}px) scale(${f})`},children:[S.jsx(PA,{url:n.url}),S.jsx("div",{className:"snapshot-browser-body",children:S.jsx("div",{style:{width:o.width+"px",height:o.height+"px"},children:e})})]})})};function uC(n){return n==="before"?"Before":n==="after"?"After":n==="action"?"Action":n}const Y0=({iframe:n,isInspecting:e,sdkLanguage:i,testIdAttributeName:r,highlightedElement:l,setHighlightedElement:o,iteration:u})=>(U.useEffect(()=>{const f=l.lastEdited==="ariaSnapshot"?l.ariaSnapshot:void 0,h=l.lastEdited==="locator"?l.locator:void 0,g=!!f||!!h||e,y=[],m=new URLSearchParams(window.location.search).get("isUnderTest")==="true";try{HS(y,g,i,r,m,"",n==null?void 0:n.contentWindow)}catch{}const w=f?id(US,f):void 0,v=h?QA(i,h,r):void 0;for(const{recorder:E,frameSelector:x}of y){const _=v!=null&&v.startsWith(x)?v.substring(x.length).trim():void 0,N=(w==null?void 0:w.errors.length)===0?w.fragment:void 0;E.setUIState({mode:e?"inspecting":"none",actionSelector:_,ariaTemplate:N,language:i,testIdAttributeName:r,overlay:{offsetX:0}},{async elementPicked(C){o({locator:Oi(i,x+C.selector),ariaSnapshot:C.ariaSnapshot,lastEdited:"none"})},highlightUpdated(){for(const C of y)C.recorder!==E&&C.recorder.clearHighlight()}})}},[n,e,l,o,i,r,u]),S.jsx(S.Fragment,{}));function HS(n,e,i,r,l,o,u){if(!u)return;const f=u;if(!f._recorder&&e){const h=new qv(u,{isUnderTest:l,sdkLanguage:i,testIdAttributeName:r,stableRafCount:1,browserName:"chromium",customEngines:[]}),g=new GA(h);f._injectedScript=h,f._recorder={recorder:g,frameSelector:o},l&&(window._weakRecordersForTest=window._weakRecordersForTest||new Set,window._weakRecordersForTest.add(new WeakRef(g)))}f._recorder&&n.push(f._recorder);for(let h=0;h> internal:control=enter-frame >> ":"";HS(n,e,i,r,l,o+y,g)}}const Ha=(n,e,i=!1)=>{if(!n)return;const r=n[e];if(r){if(!n.pageId){console.error("snapshot action must have a pageId");return}return{action:n,snapshotName:r,pageId:n.pageId,point:n.point,hasInputTarget:i}}};function fC(n){if(!n)return{};let e=Ha(n,"beforeSnapshot");if(!e){for(let l=Wy(n);l;l=Wy(l))if(l.endTime<=n.startTime&&l.afterSnapshot){e=Ha(l,"afterSnapshot");break}}let i=Ha(n,"afterSnapshot");if(!i){let l;for(let o=e0(n);o&&o.startTime<=n.endTime;o=e0(o))o.endTime>n.endTime||!o.afterSnapshot||l&&l.endTime>o.endTime||(l=o);l?i=Ha(l,"afterSnapshot"):i=e}const r=Ha(n,"inputSnapshot",!0)??i;return r&&(r.point=n.point),{action:r,before:e,after:i}}const qS=new URLSearchParams(window.location.search).has("isUnderTest");function hC(n,e,i){const r=new URLSearchParams;r.set("trace",n),r.set("name",e.snapshotName),qS&&r.set("isUnderTest","true"),e.point&&(r.set("pointX",String(e.point.x)),r.set("pointY",String(e.point.y)),e.hasInputTarget&&r.set("hasInputTarget","1")),i&&r.set("shouldPopulateCanvasFromScreenshot","1");const l=new URL(`snapshot/${e.pageId}?${r.toString()}`,window.location.href).toString(),o=new URL(`snapshotInfo/${e.pageId}?${r.toString()}`,window.location.href).toString(),u=new URLSearchParams;u.set("r",l),u.set("trace",n);const f=new URL(`snapshot.html?${u.toString()}`,window.location.href).toString();return{snapshotInfoUrl:o,snapshotUrl:l,popoutUrl:f}}async function dC(n){const e={url:"",viewport:$S,timestamp:void 0,wallTime:void 0};if(n){const r=await(await fetch(n)).json();r.error||(e.url=r.url,e.viewport=r.viewport,e.timestamp=r.timestamp,e.wallTime=r.wallTime)}return e}const $S={width:1280,height:720},pC='data:text/html,',IS={width:200,height:45},hr=2.5,gC=IS.height+hr*2,mC=({boundaries:n,previewPoint:e})=>{var y,m;const i=ti(),[r,l]=gs(),o=U.useRef(null);let u=0;if(o.current&&e){const w=o.current.getBoundingClientRect();u=(e.clientY-w.top+o.current.scrollTop)/gC|0}const f=(m=(y=i==null?void 0:i.pages)==null?void 0:y[u])==null?void 0:m.screencastFrames;let h,g;if(e!==void 0&&f&&f.length){const w=n.minimum+(n.maximum-n.minimum)*e.x/r.width;h=f[F0(f,w,VS)-1];const v={width:Math.min(800,window.innerWidth/2|0),height:Math.min(800,window.innerHeight/2|0)};g=h?GS({width:h.width,height:h.height},v):void 0}return S.jsxs("div",{className:"film-strip",ref:l,children:[S.jsx("div",{className:"film-strip-lanes",ref:o,children:i==null?void 0:i.pages.map((w,v)=>w.screencastFrames.length?S.jsx(yC,{boundaries:n,page:w,width:r.width},v):null)}),i&&(e==null?void 0:e.x)!==void 0&&S.jsxs("div",{className:"film-strip-hover",style:{top:r.bottom+5,left:Math.min(e.x,r.width-(g?g.width:0)-10)},children:[e.action&&S.jsx("div",{className:"film-strip-hover-title",children:ed(e.action,e)}),h&&g&&S.jsx("div",{style:{width:g.width,height:g.height},children:S.jsx("img",{src:i.createRelativeUrl(`sha1/${h.sha1}`),width:g.width,height:g.height})})]})]})},yC=({boundaries:n,page:e,width:i})=>{const r=ti(),l={width:0,height:0},o=e.screencastFrames;for(const _ of o)l.width=Math.max(l.width,_.width),l.height=Math.max(l.height,_.height);const u=GS(l,IS),f=o[0].timestamp,h=o[o.length-1].timestamp,g=n.maximum-n.minimum,y=(f-n.minimum)/g*i,m=(n.maximum-h)/g*i,v=(h-f)/g*i/(u.width+2*hr)|0,E=(h-f)/v,x=[];for(let _=0;f&&E&&_{const[m,w]=gs(),[v,E]=U.useState(),[x,_]=U.useState(),[N]=on("actionsFilter",[]),{offsets:C,curtainLeft:$,curtainRight:I}=U.useMemo(()=>{let J=h||e;if(v&&v.startX!==v.endX){const P=En(m.width,e,v.startX),se=En(m.width,e,v.endX);J={minimum:Math.min(P,se),maximum:Math.max(P,se)}}const W=an(m.width,e,J.minimum),B=an(m.width,e,e.maximum)-an(m.width,e,J.maximum);return{offsets:vC(m.width,e),curtainLeft:W,curtainRight:B}},[h,e,v,m]),D=U.useMemo(()=>n==null?void 0:n.filteredActions(N),[n,N]),K=U.useMemo(()=>{const J=[];for(const W of D||[])J.push({action:W,leftTime:W.startTime,rightTime:W.endTime||e.maximum,leftPosition:an(m.width,e,W.startTime),rightPosition:an(m.width,e,W.endTime||e.maximum),active:!1,error:!!W.error});for(const W of(n==null?void 0:n.resources)||[]){const Ae=W._monotonicTime,B=W._monotonicTime+W.time;J.push({resource:W,leftTime:Ae,rightTime:B,leftPosition:an(m.width,e,Ae),rightPosition:an(m.width,e,B),active:!1,error:!1})}for(const W of i||[])J.push({consoleMessage:W,leftTime:W.timestamp,rightTime:W.timestamp,leftPosition:an(m.width,e,W.timestamp),rightPosition:an(m.width,e,W.timestamp),active:!1,error:W.isError});return J},[n,D,i,e,m]);U.useMemo(()=>{for(const J of K)o?J.active=J.action===o:u!==void 0?J.active=J.resource===(r==null?void 0:r[u]):f!==void 0?J.active=J.consoleMessage===(i==null?void 0:i[f]):J.active=!1},[K,o,u,f,i,r]);const Q=U.useCallback(J=>{if(_(void 0),!w.current)return;const W=J.clientX-w.current.getBoundingClientRect().left,Ae=En(m.width,e,W),B=h?an(m.width,e,h.minimum):0,P=h?an(m.width,e,h.maximum):0;h&&Math.abs(W-B)<10?E({startX:P,endX:W,type:"resize"}):h&&Math.abs(W-P)<10?E({startX:B,endX:W,type:"resize"}):h&&Ae>h.minimum&&Ae{if(!w.current)return;const W=J.clientX-w.current.getBoundingClientRect().left,Ae=En(m.width,e,W),B=D==null?void 0:D.findLast(we=>we.startTime<=Ae);if(!J.buttons){E(void 0);return}if(B&&l(B),!v)return;let P=v;if(v.type==="resize")P={...v,endX:W};else{const we=W-v.pivot;let k=v.startX+we,Y=v.endX+we;k<0&&(k=0,Y=k+(v.endX-v.startX)),Y>m.width&&(Y=m.width,k=Y-(v.endX-v.startX)),P={...v,startX:k,endX:Y,pivot:W}}E(P);const se=En(m.width,e,P.startX),Se=En(m.width,e,P.endX);se!==Se&&g({minimum:Math.min(se,Se),maximum:Math.max(se,Se)})},[e,v,m,D,l,w,g]),j=U.useCallback(()=>{if(_(void 0),!!v){if(v.startX!==v.endX){const J=En(m.width,e,v.startX),W=En(m.width,e,v.endX);g({minimum:Math.min(J,W),maximum:Math.max(J,W)})}else{const J=En(m.width,e,v.startX),W=D==null?void 0:D.findLast(Ae=>Ae.startTime<=J);W&&l(W),g(void 0)}E(void 0)}},[e,v,m,D,g,l]),ne=U.useCallback(J=>{if(!w.current)return;const W=J.clientX-w.current.getBoundingClientRect().left,Ae=En(m.width,e,W),B=D==null?void 0:D.findLast(P=>P.startTime<=Ae);_({x:W,clientY:J.clientY,action:B,sdkLanguage:y})},[e,m,D,w,y]),le=U.useCallback(()=>{_(void 0)},[]),V=U.useCallback(()=>{g(void 0)},[g]);return S.jsxs("div",{className:"timeline-view-container",children:[!!v&&S.jsx(jb,{cursor:(v==null?void 0:v.type)==="resize"?"ew-resize":"grab",onPaneMouseUp:j,onPaneMouseMove:q,onPaneDoubleClick:V}),S.jsxs("div",{ref:w,className:"timeline-view",onMouseDown:Q,onMouseMove:ne,onMouseLeave:le,children:[S.jsx("div",{className:"timeline-grid",children:C.map((J,W)=>S.jsx("div",{className:"timeline-divider",style:{left:J.position+"px"},children:S.jsx("div",{className:"timeline-time",children:Et(J.time-e.minimum)})},W))}),S.jsx("div",{style:{height:8}}),S.jsx(mC,{boundaries:e,previewPoint:x}),S.jsx("div",{className:"timeline-bars",children:K.filter(J=>!J.action||J.action.class!=="Test").map((J,W)=>S.jsx("div",{className:Fe("timeline-bar",J.action&&"action",J.resource&&"network",J.consoleMessage&&"console-message",J.active&&"active",J.error&&"error"),style:{left:J.leftPosition,width:Math.max(5,J.rightPosition-J.leftPosition),top:SC(J),bottom:0}},W))}),S.jsx("div",{className:"timeline-marker",style:{display:x!==void 0?"block":"none",left:((x==null?void 0:x.x)||0)+"px"}}),h&&S.jsxs("div",{className:"timeline-window",children:[S.jsx("div",{className:"timeline-window-curtain left",style:{width:$}}),S.jsx("div",{className:"timeline-window-resizer",style:{left:-5}}),S.jsx("div",{className:"timeline-window-center",children:S.jsx("div",{className:"timeline-window-drag"})}),S.jsx("div",{className:"timeline-window-resizer",style:{left:5}}),S.jsx("div",{className:"timeline-window-curtain right",style:{width:I}})]})]})]})};function vC(n,e){let r=n/64;const l=e.maximum-e.minimum,o=n/l;let u=l/r;const f=Math.ceil(Math.log(u)/Math.LN10);u=Math.pow(10,f),u*o>=320&&(u=u/5),u*o>=128&&(u=u/2);const h=e.minimum;let g=e.maximum;g+=64/o,r=Math.ceil((g-h)/u),u||(r=0);const y=[];for(let m=0;m{var i,r;if(!n)return S.jsx(S.Fragment,{});const e=n.wallTime!==void 0?new Date(n.wallTime).toLocaleString(void 0,{timeZoneName:"short"}):void 0;return S.jsxs("div",{style:{flex:"auto",display:"block",overflow:"hidden auto"},children:[S.jsx("div",{className:"call-section",style:{paddingTop:2},children:"Time"}),!!e&&S.jsxs("div",{className:"call-line",children:["start time:",S.jsx("span",{className:"call-value datetime",title:e,children:e})]}),S.jsxs("div",{className:"call-line",children:["duration:",S.jsx("span",{className:"call-value number",title:Et(n.endTime-n.startTime),children:Et(n.endTime-n.startTime)})]}),S.jsx("div",{className:"call-section",children:"Browser"}),S.jsxs("div",{className:"call-line",children:["engine:",S.jsx("span",{className:"call-value string",title:n.browserName,children:n.browserName})]}),n.channel&&S.jsxs("div",{className:"call-line",children:["channel:",S.jsx("span",{className:"call-value string",title:n.channel,children:n.channel})]}),n.platform&&S.jsxs("div",{className:"call-line",children:["platform:",S.jsx("span",{className:"call-value string",title:n.platform,children:n.platform})]}),n.playwrightVersion&&S.jsxs("div",{className:"call-line",children:["playwright version:",S.jsx("span",{className:"call-value string",title:n.playwrightVersion,children:n.playwrightVersion})]}),n.options.userAgent&&S.jsxs("div",{className:"call-line",children:["user agent:",S.jsx("span",{className:"call-value datetime",title:n.options.userAgent,children:n.options.userAgent})]}),n.options.baseURL&&S.jsxs(S.Fragment,{children:[S.jsx("div",{className:"call-section",style:{paddingTop:2},children:"Config"}),S.jsxs("div",{className:"call-line",children:["baseURL:",S.jsx("a",{className:"call-value string",href:n.options.baseURL,title:n.options.baseURL,target:"_blank",rel:"noopener noreferrer",children:n.options.baseURL})]})]}),S.jsx("div",{className:"call-section",children:"Viewport"}),n.options.viewport&&S.jsxs("div",{className:"call-line",children:["width:",S.jsx("span",{className:"call-value number",title:String(!!((i=n.options.viewport)!=null&&i.width)),children:n.options.viewport.width})]}),n.options.viewport&&S.jsxs("div",{className:"call-line",children:["height:",S.jsx("span",{className:"call-value number",title:String(!!((r=n.options.viewport)!=null&&r.height)),children:n.options.viewport.height})]}),S.jsxs("div",{className:"call-line",children:["is mobile:",S.jsx("span",{className:"call-value boolean",title:String(!!n.options.isMobile),children:String(!!n.options.isMobile)})]}),n.options.deviceScaleFactor&&S.jsxs("div",{className:"call-line",children:["device scale:",S.jsx("span",{className:"call-value number",title:String(n.options.deviceScaleFactor),children:String(n.options.deviceScaleFactor)})]}),S.jsx("div",{className:"call-section",children:"Counts"}),S.jsxs("div",{className:"call-line",children:["pages:",S.jsx("span",{className:"call-value number",children:n.pages.length})]}),S.jsxs("div",{className:"call-line",children:["actions:",S.jsx("span",{className:"call-value number",children:n.actions.length})]}),S.jsxs("div",{className:"call-line",children:["events:",S.jsx("span",{className:"call-value number",children:n.events.length})]})]})},xC=({annotations:n})=>n.length?S.jsx("div",{className:"annotations-tab",children:n.map((e,i)=>S.jsxs("div",{className:"annotation-item",children:[S.jsx("span",{style:{fontWeight:"bold"},children:e.type}),e.description&&S.jsxs("span",{children:[": ",Db(e.description)]})]},`annotation-${i}`))}):S.jsx(ms,{text:"No annotations"}),_C=({sdkLanguage:n,isInspecting:e,setIsInspecting:i,highlightedElement:r,setHighlightedElement:l})=>{const[o,u]=U.useState(),f=U.useCallback(h=>{const{errors:g}=id(US,h,{prettyErrors:!1}),y=g.map(m=>({message:m.message,line:m.range[1].line,column:m.range[1].col,type:"subtle-error"}));u(y),l({...r,ariaSnapshot:h,lastEdited:"ariaSnapshot"}),i(!1)},[r,l,i]);return S.jsxs("div",{style:{flex:"auto",backgroundColor:"var(--vscode-sideBar-background)",padding:"0 10px 10px 10px",overflow:"auto"},children:[S.jsxs("div",{className:"hbox",style:{lineHeight:"28px",color:"var(--vscode-editorCodeLens-foreground)"},children:[S.jsx("div",{children:"Locator"}),S.jsx(Ht,{style:{margin:"0 4px"},title:"Pick locator",icon:"target",toggled:e,onClick:()=>i(!e)}),S.jsx("div",{style:{flex:"auto"}}),S.jsx(Ht,{icon:"files",title:"Copy locator",onClick:()=>{Vy(r.locator||"")}})]}),S.jsx("div",{style:{height:50},children:S.jsx(xr,{text:r.locator||"",highlighter:n,isFocused:!0,wrapLines:!0,onChange:h=>{l({...r,locator:h,lastEdited:"locator"}),i(!1)}})}),S.jsxs("div",{className:"hbox",style:{lineHeight:"28px",color:"var(--vscode-editorCodeLens-foreground)"},children:[S.jsx("div",{style:{flex:"auto"},children:"Aria snapshot"}),S.jsx(Ht,{icon:"files",title:"Copy snapshot",onClick:()=>{Vy(r.ariaSnapshot||"")}})]}),S.jsx("div",{style:{height:150},children:S.jsx(xr,{text:r.ariaSnapshot||"",highlighter:"yaml",wrapLines:!1,highlight:o,onChange:f})})]})},TC=({className:n,style:e,open:i,isModal:r,minWidth:l,verticalOffset:o,requestClose:u,anchor:f,dataTestId:h,children:g})=>{const y=U.useRef(null),[m,w]=U.useState(0),[v]=Eh(y),[E,x]=Eh(f),_=f?EC(v,E,o):void 0;return U.useEffect(()=>{const N=$=>{!y.current||!($.target instanceof Node)||y.current.contains($.target)||u==null||u()},C=$=>{$.key==="Escape"&&(u==null||u())};return i?(document.addEventListener("mousedown",N),document.addEventListener("keydown",C),()=>{document.removeEventListener("mousedown",N),document.removeEventListener("keydown",C)}):()=>{}},[i,u]),U.useLayoutEffect(()=>x(),[i,x]),U.useEffect(()=>{const N=()=>w(C=>C+1);return window.addEventListener("resize",N),()=>{window.removeEventListener("resize",N)}},[]),U.useLayoutEffect(()=>{y.current&&(i?r?y.current.showModal():y.current.show():y.current.close())},[i,r]),S.jsx("dialog",{ref:y,style:{position:"fixed",margin:_?0:void 0,zIndex:110,top:_==null?void 0:_.top,left:_==null?void 0:_.left,minWidth:l||0,...e},className:n,"data-testid":h,children:g})};function EC(n,e,i=4,r=4){let l=Math.max(r,e.left);l+n.width>window.innerWidth-r&&(l=window.innerWidth-n.width-r);let o=Math.max(0,e.bottom)+i;return o+n.height>window.innerHeight-i&&(Math.max(0,e.top)>n.height+i?o=Math.max(0,e.top)-n.height-i:o=window.innerHeight-i-n.height),{left:l,top:o}}const AC=({title:n,icon:e,buttonChildren:i,anchorRef:r,dialogDataTestId:l,children:o})=>{const u=U.useRef(null),f=r??u,[h,g]=U.useState(!1);return S.jsxs(S.Fragment,{children:[S.jsx(Ht,{ref:u,icon:e,title:n,onClick:()=>g(y=>!y),children:i}),S.jsx(TC,{style:{backgroundColor:"var(--vscode-sideBar-background)",padding:"4px 8px"},open:h,verticalOffset:8,requestClose:()=>g(!1),anchor:f,dataTestId:l,children:o})]})},KS=({settings:n})=>S.jsx("div",{className:"vbox settings-view",children:n.map(e=>{const i=`setting-${e.name.replaceAll(/\s+/g,"-")}`;return S.jsx("div",{className:`setting setting-${e.type}`,title:e.title,children:NC(e,i)},e.name)})}),NC=(n,e)=>{switch(n.type){case"check":return S.jsxs(S.Fragment,{children:[S.jsx("input",{type:"checkbox",id:e,checked:n.value,onChange:()=>n.set(!n.value)}),S.jsxs("label",{htmlFor:e,children:[n.name,!!n.count&&S.jsx("span",{className:"setting-counter",children:n.count})]})]});case"select":return S.jsxs(S.Fragment,{children:[S.jsxs("label",{htmlFor:e,children:[n.name,":",!!n.count&&S.jsx("span",{className:"setting-counter",children:n.count})]}),S.jsx("select",{id:e,value:n.value,onChange:i=>n.set(i.target.value),children:n.options.map(i=>S.jsx("option",{value:i.value,children:i.label},i.value))})]});default:return null}},HC=n=>{var i;const e=MC((i=n.model)==null?void 0:i.traceUri);return S.jsx(zb.Provider,{value:n.model,children:S.jsx(CC,{partition:e,...n})})},CC=n=>{var gl;const{partition:e,model:i,showSourcesFirst:r,rootDir:l,fallbackLocation:o,isLive:u,hideTimeline:f,status:h,annotations:g,inert:y,onOpenExternally:m,revealSource:w,testRunMetadata:v}=n,[E,x]=on("navigatorTab","actions"),[_,N]=on("propertiesTab",r?"source":"call"),[C,$]=on("propertiesSidebarLocation","bottom"),[I]=on("actionsFilter",[]),[D,K]=ki("selectedCallId"),[Q,q]=ki("selectedTime"),[j,ne]=ki("highlightedCallId"),[le,V]=ki("revealedErrorKey"),[J,W]=ki("highlightedConsoleMessageOrdinal"),[Ae,B]=ki("revealedAttachmentCallId"),[P,se]=ki("highlightedResourceOrdinal"),[Se,we]=ki("treeState",{expandedItems:new Map});hx(e);const[k,Y]=U.useState({lastEdited:"none"}),[Z,ee]=U.useState(!1),ue=U.useCallback(ce=>{K(ce==null?void 0:ce.callId),V(void 0)},[K,V]),re=U.useMemo(()=>i==null?void 0:i.filteredActions(I),[i,I]),xe=((i==null?void 0:i.actions.length)??0)-((re==null?void 0:re.length)??0),tt=U.useMemo(()=>re==null?void 0:re.find(ce=>ce.callId===j),[re,j]),Re=U.useCallback(ce=>{ne(ce==null?void 0:ce.callId)},[ne]),Bi=U.useMemo(()=>(i==null?void 0:i.sources)||new Map,[i]);U.useEffect(()=>{q(void 0),V(void 0)},[i,q,V]);const kn=U.useMemo(()=>{if(D){const Sn=re==null?void 0:re.find(Ft=>Ft.callId===D);if(Sn)return Sn}const ce=i==null?void 0:i.failedAction();if(ce)return ce;if(re!=null&&re.length){let Sn=re.length-1;for(let Ft=0;Fttt||kn,[kn,tt]),Dr=U.useCallback(ce=>{ue(ce),Re(void 0)},[ue,Re]),nt=U.useCallback(ce=>{N(ce),ce!=="inspector"&&ee(!1)},[N]),vs=U.useCallback(ce=>{!Z&&ce&&nt("inspector"),ee(ce)},[ee,nt,Z]),zr=U.useCallback(ce=>{Y(ce),nt("inspector")},[nt]),zc=U.useCallback(ce=>{nt("attachments"),B({callId:ce})},[nt,B]);U.useEffect(()=>{w&&nt("source")},[w,nt]);const Ss=rT(i,Q),Ui=MT(i,Q),ni=eT(i),Br=U.useMemo(()=>{var ce;return le!==void 0?(ce=ni.errors.get(le))==null?void 0:ce.stack:hn==null?void 0:hn.stack},[hn,le,ni]),ii=(i==null?void 0:i.sdkLanguage)||"javascript",Bc={id:"inspector",title:"Locator",render:()=>S.jsx(_C,{sdkLanguage:ii,isInspecting:Z,setIsInspecting:vs,highlightedElement:k,setHighlightedElement:Y})},St={id:"call",title:"Call",render:()=>S.jsx(w_,{action:hn,startTimeOffset:(i==null?void 0:i.startTime)??0,sdkLanguage:ii})},Uc={id:"log",title:"Log",render:()=>S.jsx(T_,{action:hn,isLive:u})},dl={id:"errors",title:"Errors",errorCount:ni.errors.size,render:()=>S.jsx(nT,{errorsModel:ni,testRunMetadata:v,sdkLanguage:ii,revealInSource:ce=>{ce.action?ue(ce.action):V(ce.message),nt("source")},wallTime:(i==null?void 0:i.wallTime)??0})};let Ur;!kn&&o&&(Ur=(gl=o.source)==null?void 0:gl.errors.length);const si={id:"source",title:"Source",errorCount:Ur,render:()=>S.jsx(P_,{stack:Br,sources:Bi,rootDir:l,stackFrameLocation:C==="bottom"?"right":"bottom",fallbackLocation:o,onOpenExternally:m})},Hc={id:"console",title:"Console",count:Ss.entries.length,render:()=>S.jsx(aT,{consoleModel:Ss,boundaries:Mn,selectedTime:Q,onAccepted:ce=>q({minimum:ce.timestamp,maximum:ce.timestamp}),onEntryHovered:W})},pl={id:"network",title:"Network",count:Ui.resources.length,render:()=>S.jsx(OT,{boundaries:Mn,networkModel:Ui,onResourceHovered:se,sdkLanguage:(i==null?void 0:i.sdkLanguage)??"javascript"})},qc={id:"attachments",title:"Attachments",count:i==null?void 0:i.visibleAttachments.length,render:()=>S.jsx(V_,{revealedAttachmentCallId:Ae})},Hi=[Bc,St,Uc,dl,Hc,pl,si,qc];if(g!==void 0){const ce={id:"annotations",title:"Annotations",count:g.length,render:()=>S.jsx(xC,{annotations:g})};Hi.push(ce)}if(r){const ce=Hi.indexOf(si);Hi.splice(ce,1),Hi.splice(1,0,si)}const{boundaries:Mn}=U.useMemo(()=>{const ce={minimum:(i==null?void 0:i.startTime)||0,maximum:(i==null?void 0:i.endTime)||3e4};return ce.minimum>ce.maximum&&(ce.minimum=0,ce.maximum=3e4),ce.maximum+=(ce.maximum-ce.minimum)/20,{boundaries:ce}},[i]);let rt=0;!u&&i&&i.endTime>=0?rt=i.endTime-i.startTime:i&&i.wallTime&&(rt=Date.now()-i.wallTime);const vn={id:"actions",title:"Actions",component:S.jsxs("div",{className:"vbox",children:[h&&S.jsxs("div",{className:"workbench-run-status","data-testid":"workbench-run-status",children:[S.jsx("span",{className:Fe("codicon",Mb(h))}),S.jsx("div",{children:b_(h)}),S.jsx("div",{className:"spacer"}),S.jsx("div",{className:"workbench-run-duration",children:rt?Et(rt):""})]}),S.jsx(S_,{sdkLanguage:ii,actions:re||[],selectedAction:i?kn:void 0,selectedTime:Q,setSelectedTime:q,treeState:Se,setTreeState:we,onSelected:Dr,onHighlighted:Re,revealActionAttachment:zc,revealConsole:()=>nt("console"),isLive:u})]})},wt={id:"metadata",title:"Metadata",component:S.jsx(wC,{model:i})},$c=E==="actions"&&S.jsx(kC,{counters:i==null?void 0:i.actionCounters,hiddenActionsCount:xe});return S.jsxs("div",{className:"vbox workbench",...y?{inert:!0}:{},children:[!f&&S.jsx(bC,{model:i,consoleEntries:Ss.entries,networkResources:Ui.resources,boundaries:Mn,highlightedAction:tt,highlightedResourceOrdinal:P,highlightedConsoleEntryOrdinal:J,onSelected:Dr,sdkLanguage:ii,selectedTime:Q,setSelectedTime:q}),S.jsx(nc,{sidebarSize:250,orientation:C==="bottom"?"vertical":"horizontal",settingName:"propertiesSidebar",main:S.jsx(nc,{sidebarSize:250,orientation:"horizontal",sidebarIsFirst:!0,settingName:"actionListSidebar",main:S.jsx(lC,{action:hn,model:i,sdkLanguage:ii,testIdAttributeName:(i==null?void 0:i.testIdAttributeName)||"data-testid",isInspecting:Z,setIsInspecting:vs,highlightedElement:k,setHighlightedElement:zr}),sidebar:S.jsx(jh,{tabs:[vn,wt],rightToolbar:[$c],selectedTab:E,setSelectedTab:x})}),sidebar:S.jsx(jh,{tabs:Hi,selectedTab:_,setSelectedTab:nt,rightToolbar:[C==="bottom"?S.jsx(Ht,{title:"Dock to right",icon:"layout-sidebar-right-off",onClick:()=>{$("right")}}):S.jsx(Ht,{title:"Dock to bottom",icon:"layout-panel-off",onClick:()=>{$("bottom")}})],mode:C==="bottom"?"default":"select"})})]})},kC=({counters:n,hiddenActionsCount:e})=>{const[i,r]=on("actionsFilter",[]),l=U.useRef(null),o=S.jsxs(S.Fragment,{children:[e>0&&S.jsxs("span",{className:"workbench-actions-hidden-count",title:e+" actions hidden by filters",children:[e," hidden"]}),S.jsx("span",{ref:l,className:"codicon codicon-filter"})]});return S.jsx(AC,{title:"Filter actions",dialogDataTestId:"actions-filter-dialog",buttonChildren:o,anchorRef:l,children:S.jsx(KS,{settings:[{type:"check",value:i.includes("getter"),set:u=>r(u?[...i,"getter"]:i.filter(f=>f!=="getter")),name:"Getters",count:n==null?void 0:n.get("getter")},{type:"check",value:i.includes("route"),set:u=>r(u?[...i,"route"]:i.filter(f=>f!=="route")),name:"Network routes",count:n==null?void 0:n.get("route")},{type:"check",value:i.includes("configuration"),set:u=>r(u?[...i,"configuration"]:i.filter(f=>f!=="configuration")),name:"Configuration",count:n==null?void 0:n.get("configuration")}]})})};function MC(n){if(!n)return"default";const e=new URL(n,"http://localhost");return e.searchParams.delete("timestamp"),e.toString()}var X0;(n=>{function e(i){for(const r of i.splice(0))r.dispose()}n.disposeAll=e})(X0||(X0={}));class ur{constructor(){this._listeners=new Set,this.event=(e,i)=>{this._listeners.add(e);let r=!1;const l=this,o={dispose(){r||(r=!0,l._listeners.delete(e))}};return i&&i.push(o),o}}fire(e){const i=!this._deliveryQueue;this._deliveryQueue||(this._deliveryQueue=[]);for(const r of this._listeners)this._deliveryQueue.push({listener:r,event:e});if(i){for(let r=0;re(i.data.toString()))}onopen(e){this._ws.addEventListener("open",e)}onerror(e){this._ws.addEventListener("error",e)}onclose(e){this._ws.addEventListener("close",e)}send(e){this._ws.send(e)}close(){this._ws.close()}}class $C{constructor(e){this._onCloseEmitter=new ur,this._onReportEmitter=new ur,this._onStdioEmitter=new ur,this._onTestFilesChangedEmitter=new ur,this._onLoadTraceRequestedEmitter=new ur,this._onTestPausedEmitter=new ur,this._lastId=0,this._callbacks=new Map,this._isClosed=!1,this.onClose=this._onCloseEmitter.event,this.onReport=this._onReportEmitter.event,this.onStdio=this._onStdioEmitter.event,this.onTestFilesChanged=this._onTestFilesChangedEmitter.event,this.onLoadTraceRequested=this._onLoadTraceRequestedEmitter.event,this.onTestPaused=this._onTestPausedEmitter.event,this._transport=e,this._transport.onmessage(r=>{const l=JSON.parse(r),{id:o,result:u,error:f,method:h,params:g}=l;if(o){const y=this._callbacks.get(o);if(!y)return;this._callbacks.delete(o),f?y.reject(new Error(f)):y.resolve(u)}else this._dispatchEvent(h,g)});const i=setInterval(()=>this._sendMessage("ping").catch(()=>{}),3e4);this._connectedPromise=new Promise((r,l)=>{this._transport.onopen(r),this._transport.onerror(l)}),this._transport.onclose(()=>{this._isClosed=!0,this._onCloseEmitter.fire(),clearInterval(i);for(const r of this._callbacks.values())r.reject(new OC);this._callbacks.clear()})}isClosed(){return this._isClosed}async _sendMessage(e,i){const r=globalThis.__logForTest;r==null||r({method:e,params:i}),await this._connectedPromise;const l=++this._lastId,o={id:l,method:e,params:i};return this._transport.send(JSON.stringify(o)),new Promise((u,f)=>{this._callbacks.set(l,{resolve:u,reject:f})})}_sendMessageNoReply(e,i){this._sendMessage(e,i).catch(()=>{})}_dispatchEvent(e,i){e==="report"?this._onReportEmitter.fire(i):e==="stdio"?this._onStdioEmitter.fire(i):e==="testFilesChanged"?this._onTestFilesChangedEmitter.fire(i):e==="loadTraceRequested"?this._onLoadTraceRequestedEmitter.fire(i):e==="testPaused"&&this._onTestPausedEmitter.fire(i)}async initialize(e){await this._sendMessage("initialize",e)}async ping(e){await this._sendMessage("ping",e)}async pingNoReply(e){this._sendMessageNoReply("ping",e)}async watch(e){await this._sendMessage("watch",e)}watchNoReply(e){this._sendMessageNoReply("watch",e)}async open(e){await this._sendMessage("open",e)}openNoReply(e){this._sendMessageNoReply("open",e)}async resizeTerminal(e){await this._sendMessage("resizeTerminal",e)}resizeTerminalNoReply(e){this._sendMessageNoReply("resizeTerminal",e)}async checkBrowsers(e){return await this._sendMessage("checkBrowsers",e)}async installBrowsers(e){await this._sendMessage("installBrowsers",e)}async runGlobalSetup(e){return await this._sendMessage("runGlobalSetup",e)}async runGlobalTeardown(e){return await this._sendMessage("runGlobalTeardown",e)}async startDevServer(e){return await this._sendMessage("startDevServer",e)}async stopDevServer(e){return await this._sendMessage("stopDevServer",e)}async clearCache(e){return await this._sendMessage("clearCache",e)}async listFiles(e){return await this._sendMessage("listFiles",e)}async listTests(e){return await this._sendMessage("listTests",e)}async runTests(e){return await this._sendMessage("runTests",e)}async findRelatedTestFiles(e){return await this._sendMessage("findRelatedTestFiles",e)}async stopTests(e){await this._sendMessage("stopTests",e)}stopTestsNoReply(e){this._sendMessageNoReply("stopTests",e)}async closeGracefully(e){await this._sendMessage("closeGracefully",e)}close(){try{this._transport.close()}catch{}}}const IC=({location:n})=>{const[e,i]=on("shouldPopulateCanvasFromScreenshot",!1),[r,l]=bx(),[o,u]=on("mergeFiles",!1);return S.jsx(KS,{settings:[{type:"select",value:r,set:l,name:"Theme",options:mx},...n==="ui-mode"?[{type:"check",value:o,set:u,name:"Merge files"}]:[],{type:"check",value:e,set:i,name:"Display canvas content",title:"Attempt to display the captured canvas appearance in the snapshot preview. May not be accurate."}]})};export{AC as D,Rb as E,gt as R,nc as S,BC as T,qC as W,L_ as _,$C as a,IC as b,HC as c,TC as d,LC as e,zC as f,yx as g,RC as h,DC as i,S as j,Fe as k,m_ as l,Et as m,nd as n,Ht as o,on as p,KS as q,U as r,ls as s,Mb as t,gs as u,lx as v}; +./node_modules/playwright-core/lib/vite/traceViewer/uiMode.CQJ9SCIQ.js:5:Make sure to serve the website (${window.location}) via HTTPS or localhost.`);navigator.serviceWorker.register("sw.bundle.js"),navigator.serviceWorker.controller||await new Promise(o=>{navigator.serviceWorker.oncontrollerchange=()=>o()}),setInterval(function(){fetch("ping")},1e4)}oe.createRoot(document.querySelector("#root")).render(r.jsx(ye,{}))})(); +./node_modules/playwright-core/lib/utils/isomorphic/trace/traceModel.js:74: const url = new URL("http://localhost/" + path); +./node_modules/playwright-core/lib/utils/isomorphic/trace/traceModel.js:76: return url.toString().substring("http://localhost/".length); +./node_modules/playwright-core/types/protocol.d.ts:13987:of the local hostnames (e.g. "localhost") or IP addresses (IPv4 +./node_modules/playwright-core/types/types.d.ts:31: * Page provides methods to interact with a single tab in a [Browser](https://playwright.dev/docs/api/class-browser), +./node_modules/playwright-core/types/types.d.ts:33: * [Browser](https://playwright.dev/docs/api/class-browser) instance might have multiple +./node_modules/playwright-core/types/types.d.ts:34: * [Page](https://playwright.dev/docs/api/class-page) instances. +./node_modules/playwright-core/types/types.d.ts:52: * [`EventEmitter`](https://nodejs.org/api/events.html#events_class_eventemitter) methods, such as `on`, `once` or +./node_modules/playwright-core/types/types.d.ts:76: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-evaluate-option-expression) invocation. +./node_modules/playwright-core/types/types.d.ts:79: * [page.evaluate(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate) returns a [Promise], +./node_modules/playwright-core/types/types.d.ts:80: * then [page.evaluate(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate) would wait for +./node_modules/playwright-core/types/types.d.ts:84: * [page.evaluate(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate) returns a +./node_modules/playwright-core/types/types.d.ts:86: * [page.evaluate(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate) resolves to +./node_modules/playwright-core/types/types.d.ts:92: * Passing argument to [`pageFunction`](https://playwright.dev/docs/api/class-page#page-evaluate-option-expression): +./node_modules/playwright-core/types/types.d.ts:109: * [ElementHandle](https://playwright.dev/docs/api/class-elementhandle) instances can be passed as an argument to the +./node_modules/playwright-core/types/types.d.ts:110: * [page.evaluate(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate): +./node_modules/playwright-core/types/types.d.ts:122: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-evaluate-option-expression). +./node_modules/playwright-core/types/types.d.ts:127: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-evaluate-option-expression) invocation. +./node_modules/playwright-core/types/types.d.ts:130: * [page.evaluate(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate) returns a [Promise], +./node_modules/playwright-core/types/types.d.ts:131: * then [page.evaluate(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate) would wait for +./node_modules/playwright-core/types/types.d.ts:135: * [page.evaluate(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate) returns a +./node_modules/playwright-core/types/types.d.ts:137: * [page.evaluate(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate) resolves to +./node_modules/playwright-core/types/types.d.ts:143: * Passing argument to [`pageFunction`](https://playwright.dev/docs/api/class-page#page-evaluate-option-expression): +./node_modules/playwright-core/types/types.d.ts:160: * [ElementHandle](https://playwright.dev/docs/api/class-elementhandle) instances can be passed as an argument to the +./node_modules/playwright-core/types/types.d.ts:161: * [page.evaluate(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate): +./node_modules/playwright-core/types/types.d.ts:173: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-evaluate-option-expression). +./node_modules/playwright-core/types/types.d.ts:179: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-evaluate-handle-option-expression) invocation as a +./node_modules/playwright-core/types/types.d.ts:180: * [JSHandle](https://playwright.dev/docs/api/class-jshandle). +./node_modules/playwright-core/types/types.d.ts:183: * [page.evaluate(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate) and +./node_modules/playwright-core/types/types.d.ts:184: * [page.evaluateHandle(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate-handle) is that +./node_modules/playwright-core/types/types.d.ts:185: * [page.evaluateHandle(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate-handle) returns +./node_modules/playwright-core/types/types.d.ts:186: * [JSHandle](https://playwright.dev/docs/api/class-jshandle). +./node_modules/playwright-core/types/types.d.ts:189: * [page.evaluateHandle(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate-handle) returns +./node_modules/playwright-core/types/types.d.ts:191: * [page.evaluateHandle(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate-handle) would +./node_modules/playwright-core/types/types.d.ts:207: * [JSHandle](https://playwright.dev/docs/api/class-jshandle) instances can be passed as an argument to the +./node_modules/playwright-core/types/types.d.ts:208: * [page.evaluateHandle(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate-handle): +./node_modules/playwright-core/types/types.d.ts:219: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-evaluate-handle-option-expression). +./node_modules/playwright-core/types/types.d.ts:224: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-evaluate-handle-option-expression) invocation as a +./node_modules/playwright-core/types/types.d.ts:225: * [JSHandle](https://playwright.dev/docs/api/class-jshandle). +./node_modules/playwright-core/types/types.d.ts:228: * [page.evaluate(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate) and +./node_modules/playwright-core/types/types.d.ts:229: * [page.evaluateHandle(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate-handle) is that +./node_modules/playwright-core/types/types.d.ts:230: * [page.evaluateHandle(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate-handle) returns +./node_modules/playwright-core/types/types.d.ts:231: * [JSHandle](https://playwright.dev/docs/api/class-jshandle). +./node_modules/playwright-core/types/types.d.ts:234: * [page.evaluateHandle(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate-handle) returns +./node_modules/playwright-core/types/types.d.ts:236: * [page.evaluateHandle(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate-handle) would +./node_modules/playwright-core/types/types.d.ts:252: * [JSHandle](https://playwright.dev/docs/api/class-jshandle) instances can be passed as an argument to the +./node_modules/playwright-core/types/types.d.ts:253: * [page.evaluateHandle(pageFunction[, arg])](https://playwright.dev/docs/api/class-page#page-evaluate-handle): +./node_modules/playwright-core/types/types.d.ts:264: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-evaluate-handle-option-expression). +./node_modules/playwright-core/types/types.d.ts:298: * [browserContext.addInitScript(script[, arg])](https://playwright.dev/docs/api/class-browsercontext#browser-context-add-init-script) +./node_modules/playwright-core/types/types.d.ts:299: * and [page.addInitScript(script[, arg])](https://playwright.dev/docs/api/class-page#page-add-init-script) is not +./node_modules/playwright-core/types/types.d.ts:304: * [`script`](https://playwright.dev/docs/api/class-page#page-add-init-script-option-script) (only supported when +./node_modules/playwright-core/types/types.d.ts:310: * **NOTE** Use locator-based [page.locator(selector[, options])](https://playwright.dev/docs/api/class-page#page-locator) +./node_modules/playwright-core/types/types.d.ts:315: * [locator.waitFor([options])](https://playwright.dev/docs/api/class-locator#locator-wait-for). +./node_modules/playwright-core/types/types.d.ts:321: * **NOTE** Use locator-based [page.locator(selector[, options])](https://playwright.dev/docs/api/class-page#page-locator) +./node_modules/playwright-core/types/types.d.ts:326: * [locator.waitFor([options])](https://playwright.dev/docs/api/class-locator#locator-wait-for). +./node_modules/playwright-core/types/types.d.ts:333: * **NOTE** Use locator-based [page.locator(selector[, options])](https://playwright.dev/docs/api/class-page#page-locator) +./node_modules/playwright-core/types/types.d.ts:342: * **NOTE** Use locator-based [page.locator(selector[, options])](https://playwright.dev/docs/api/class-page#page-locator) +./node_modules/playwright-core/types/types.d.ts:354: * [locator.evaluate(pageFunction[, arg, options])](https://playwright.dev/docs/api/class-locator#locator-evaluate), +./node_modules/playwright-core/types/types.d.ts:355: * other [Locator](https://playwright.dev/docs/api/class-locator) helper methods or web-first assertions instead. +./node_modules/playwright-core/types/types.d.ts:358: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression). If no +./node_modules/playwright-core/types/types.d.ts:360: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression). +./node_modules/playwright-core/types/types.d.ts:362: * If [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression) returns a +./node_modules/playwright-core/types/types.d.ts:364: * [page.$eval(selector, pageFunction[, arg, options])](https://playwright.dev/docs/api/class-page#page-eval-on-selector) +./node_modules/playwright-core/types/types.d.ts:380: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression). +./node_modules/playwright-core/types/types.d.ts:387: * [locator.evaluate(pageFunction[, arg, options])](https://playwright.dev/docs/api/class-locator#locator-evaluate), +./node_modules/playwright-core/types/types.d.ts:388: * other [Locator](https://playwright.dev/docs/api/class-locator) helper methods or web-first assertions instead. +./node_modules/playwright-core/types/types.d.ts:391: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression). If no +./node_modules/playwright-core/types/types.d.ts:393: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression). +./node_modules/playwright-core/types/types.d.ts:395: * If [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression) returns a +./node_modules/playwright-core/types/types.d.ts:397: * [page.$eval(selector, pageFunction[, arg, options])](https://playwright.dev/docs/api/class-page#page-eval-on-selector) +./node_modules/playwright-core/types/types.d.ts:413: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression). +./node_modules/playwright-core/types/types.d.ts:420: * [locator.evaluate(pageFunction[, arg, options])](https://playwright.dev/docs/api/class-locator#locator-evaluate), +./node_modules/playwright-core/types/types.d.ts:421: * other [Locator](https://playwright.dev/docs/api/class-locator) helper methods or web-first assertions instead. +./node_modules/playwright-core/types/types.d.ts:424: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression). If no +./node_modules/playwright-core/types/types.d.ts:426: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression). +./node_modules/playwright-core/types/types.d.ts:428: * If [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression) returns a +./node_modules/playwright-core/types/types.d.ts:430: * [page.$eval(selector, pageFunction[, arg, options])](https://playwright.dev/docs/api/class-page#page-eval-on-selector) +./node_modules/playwright-core/types/types.d.ts:446: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression). +./node_modules/playwright-core/types/types.d.ts:453: * [locator.evaluate(pageFunction[, arg, options])](https://playwright.dev/docs/api/class-locator#locator-evaluate), +./node_modules/playwright-core/types/types.d.ts:454: * other [Locator](https://playwright.dev/docs/api/class-locator) helper methods or web-first assertions instead. +./node_modules/playwright-core/types/types.d.ts:457: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression). If no +./node_modules/playwright-core/types/types.d.ts:459: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression). +./node_modules/playwright-core/types/types.d.ts:461: * If [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression) returns a +./node_modules/playwright-core/types/types.d.ts:463: * [page.$eval(selector, pageFunction[, arg, options])](https://playwright.dev/docs/api/class-page#page-eval-on-selector) +./node_modules/playwright-core/types/types.d.ts:479: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-option-expression). +./node_modules/playwright-core/types/types.d.ts:486: * [locator.evaluateAll(pageFunction[, arg])](https://playwright.dev/docs/api/class-locator#locator-evaluate-all), +./node_modules/playwright-core/types/types.d.ts:487: * other [Locator](https://playwright.dev/docs/api/class-locator) helper methods and web-first assertions do a better +./node_modules/playwright-core/types/types.d.ts:492: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-all-option-expression). Returns +./node_modules/playwright-core/types/types.d.ts:494: * [`pageFunction`](https://playwright.dev/docs/api/class-page#page-eval-on-selector-all-option-expression) + +## Server Candidates +--- src/server.js +import express from 'express'; +import dotenv from 'dotenv'; +import authRoutes from './routes/auth.js'; +import helpRequestRoutes from './routes/helpRequests.js'; +import offerRoutes from './routes/offers.js'; +import reviewRoutes from './routes/reviews.js'; +import addressRoutes from './routes/addresses.js'; +import contactRoutes from './routes/contacts.js'; +import profileRoutes from './routes/profile.js'; + +dotenv.config(); + +const app = express(); +app.use(express.json()); + +app.get('/health', (_req, res) => res.json({ status: 'ok' })); + +app.use('/auth', authRoutes); +app.use('/requests', helpRequestRoutes); +app.use('/offers', offerRoutes); +app.use('/reviews', reviewRoutes); +app.use('/addresses', addressRoutes); +app.use('/contacts', contactRoutes); +app.use('/profile', profileRoutes); + +const port = Number(process.env.PORT || 3000); +app.listen(port, () => { + console.log(`helpyourneighbour backend listening on ${port}`); +}); + diff --git a/docs/runtime/integration_recheck_helpyourneighbour.log b/docs/runtime/integration_recheck_helpyourneighbour.log new file mode 100644 index 0000000..2c88f7f --- /dev/null +++ b/docs/runtime/integration_recheck_helpyourneighbour.log @@ -0,0 +1,5 @@ + +> backend@1.0.0 test:integration +> node scripts/integration-test.mjs + +Integration test passed: API server is running and healthy diff --git a/docs/runtime/integration_repair_brief_helpyourneighbour.md b/docs/runtime/integration_repair_brief_helpyourneighbour.md new file mode 100644 index 0000000..abfa33a --- /dev/null +++ b/docs/runtime/integration_repair_brief_helpyourneighbour.md @@ -0,0 +1,62 @@ +# Integration Repair Brief + +Project: helpyourneighbour + +## Failure Signal + +> backend@1.0.0 test:integration +> node scripts/integration-test.mjs + +/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/testType.js:75 + throw new Error([ + ^ + +Error: Playwright Test did not expect test() to be called here. +Most common reasons include: +- You are calling test() in a configuration file. +- You are calling test() in a file that is imported by the configuration file. +- You have two different versions of @playwright/test. This usually happens + when one of the dependencies in your package.json depends on @playwright/test. + at TestTypeImpl._currentSuite (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/testType.js:75:13) + at TestTypeImpl._createTest (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/testType.js:88:24) + at /home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/transform/transform.js:282:12 + at file:///home/openclaw/.openclaw/workspace/helpyourneighbour/backend/scripts/integration-test.mjs:3:1 + at ModuleJob.run (node:internal/modules/esm/module_job:343:25) + at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:665:26) + at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:117:5) + +Node.js v22.22.0 + +## Integration Runner +import { test, expect } from '@playwright/test'; + +test('API server starts and returns 200', async ({ page }) => { + await page.goto('http://localhost:3000/api/health'); + await expect(page.status()).toBe(200); +}); +## Playwright Config +const { devices } = require('@playwright/test'); + +/** @type {import('@playwright/test').PlaywrightTestConfig} */ +const config = { + testDir: './scripts', + timeout: 30000, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: 'html', + use: { + actionTimeout: 0, + baseURL: 'http://localhost:3000', + trace: 'on-first-retry', + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +}; + +module.exports = config; \ No newline at end of file diff --git a/docs/runtime/integration_status_helpyourneighbour.env b/docs/runtime/integration_status_helpyourneighbour.env new file mode 100644 index 0000000..b7636e9 --- /dev/null +++ b/docs/runtime/integration_status_helpyourneighbour.env @@ -0,0 +1,3 @@ +EXIT=0 +RUN_AT=2026-03-06T16:44:30Z +LOGFILE=/home/openclaw/.openclaw/workspace/helpyourneighbour/docs/runtime/integration_test_helpyourneighbour.log diff --git a/docs/runtime/integration_targets_helpyourneighbour.md b/docs/runtime/integration_targets_helpyourneighbour.md new file mode 100644 index 0000000..76cd008 --- /dev/null +++ b/docs/runtime/integration_targets_helpyourneighbour.md @@ -0,0 +1,147 @@ +# Integration Change Targets + +Project: helpyourneighbour + +## Highest Priority Files +backend/node_modules/accepts/index.js +backend/node_modules/bcryptjs/index.d.ts +backend/node_modules/bcryptjs/index.js +backend/node_modules/body-parser/index.js +backend/node_modules/buffer-equal-constant-time/index.js +backend/node_modules/bytes/index.js +backend/node_modules/call-bind-apply-helpers/index.d.ts +backend/node_modules/call-bind-apply-helpers/index.js +backend/node_modules/call-bound/index.d.ts +backend/node_modules/call-bound/index.js +backend/node_modules/content-disposition/index.js +backend/node_modules/content-type/index.js +backend/node_modules/cookie-signature/index.js +backend/node_modules/cookie/index.js +backend/node_modules/denque/index.d.ts +backend/node_modules/denque/index.js +backend/node_modules/depd/index.js +backend/node_modules/ee-first/index.js +backend/node_modules/encodeurl/index.js +backend/node_modules/es-define-property/index.d.ts + +## Relevant Runtime Notes +# Integration Context Audit + +Project: helpyourneighbour + +## package.json scripts +{ + "test": "npm run test:smoke", + "start": "node src/server.js", + "dev": "node --watch src/server.js", + "db:init": "node src/db/init.js", + "db:seed": "node src/db/seed.js", + "test:smoke": "node scripts/smoke-test.mjs", + "test:integration": "node scripts/integration-test.mjs" +} + +## Integration Runner +// Einfacher HTTP-Test ohne Playwright +// Funktion zum Senden einer HTTP-Anfrage +async function testHealthEndpoint() { + try { + const response = await fetch('http://localhost:3000/health'); + if (response.status === 200) { + console.log('Integration test passed: API server is running and healthy'); + return true; + } else { + console.error(`Integration test failed: Expected status 200, got ${response.status}`); + return false; + } + } catch (error) { + console.error('Integration test failed:', error.message); + return false; + } +} + +// Führe den Test aus +testHealthEndpoint().then(success => { + if (!success) { + process.exit(1); + } +}); +## Referenced localhost URLs +./node_modules/encodeurl/README.md:60: href.host = 'localhost' +./node_modules/mysql2/lib/connection_config.js:97: this.host = options.host || 'localhost'; +./node_modules/mysql2/typings/mysql/lib/Connection.d.ts:132: * The hostname of the database you are connecting to. (Default: localhost) +./node_modules/parseurl/README.md:67: Parsing URL "http://localhost:8888/foo/bar?user=tj&pet=fluffy" +./node_modules/body-parser/README.md:454:// POST /api/users gets JSON bodies +./node_modules/body-parser/README.md:455:app.post('/api/users', jsonParser, function (req, res) { +./node_modules/jws/readme.md:255:[encrypted-key-docs]: https://nodejs.org/api/crypto.html#crypto_sign_sign_private_key_output_format +./node_modules/safe-buffer/README.md:303:[See the docs](https://nodejs.org/api/buffer.html). +./node_modules/safe-buffer/README.md:341:From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): +./node_modules/@playwright/test/README.md:5:## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/docs/api/class-playwright) +./node_modules/@playwright/test/README.md:49:* [API reference](https://playwright.dev/docs/api/class-playwright) +./node_modules/@playwright/test/README.md:166:* [API reference](https://playwright.dev/docs/api/class-playwright/) +./node_modules/jsonwebtoken/README.md:37:encoded private key for RSA and ECDSA. In case of a private key with passphrase an object `{ key, passphrase }` can be used (based on [crypto documentation](https://nodejs.org/api/crypto.html#crypto_sign_sign_private_key_output_format)), in this case be sure you pass the `algorithm` option. +./node_modules/router/README.md:159:var api = router.route('/api/') +./node_modules/router/README.md:211:- `req` - This is a [HTTP incoming message](https://nodejs.org/api/http.html#http_http_incomingmessage) instance. +./node_modules/router/README.md:212:- `res` - This is a [HTTP server response](https://nodejs.org/api/http.html#http_class_http_serverresponse) instance. +./node_modules/router/README.md:274:router.use('/api/', api) +./node_modules/router/README.md:279:// handle `PATCH` requests to `/api/set-message` +./node_modules/router/README.md:306:curl http://127.0.0.1:8080/api/set-message -X PATCH -H "Content-Type: application/json" -d '{"value":"Cats!"}' +./node_modules/statuses/README.md:95:[Node.js http module `http.STATUS_CODES`](https://nodejs.org/dist/latest/docs/api/http.html#http_http_status_codes). +./node_modules/dotenv/README-es.md:5:Dotenv is a zero-dependency module that loads environment variables from a `.env` file into [`process.env`](https://nodejs.org/docs/latest/api/process.html#process_process_env). Storing configuration in the environment separate from code is based on [The Twelve-Factor App](https://12factor.net/config) methodology. +./node_modules/dotenv/README-es.md:139:You can use the `--require` (`-r`) [command line option](https://nodejs.org/api/cli.html#-r---require-module) to preload dotenv. By doing this, you do not need to require and load dotenv in your application code. +./node_modules/dotenv/README-es.md:171:DATABASE_URL="postgres://${USERNAME}@localhost/my_database" +./node_modules/dotenv/README-es.md:180:DATABASE_URL postgres://username@localhost/my_database +./node_modules/dotenv/README-es.md:192:DATABASE_URL="postgres://$(whoami)@localhost/my_database" +./node_modules/dotenv/README-es.md:201:DATABASE_URL postgres://yourusername@localhost/my_database +./node_modules/dotenv/README-es.md:590:[`process.env`](https://nodejs.org/docs/latest/api/process.html#process_process_env), +./node_modules/dotenv/README.md:5:Dotenv is a zero-dependency module that loads environment variables from a `.env` file into [`process.env`](https://nodejs.org/docs/latest/api/process.html#process_process_env). Storing configuration in the environment separate from code is based on [The Twelve-Factor App](https://12factor.net/config) methodology. +./node_modules/dotenv/README.md:139:You can use the `--require` (`-r`) [command line option](https://nodejs.org/api/cli.html#-r---require-module) to preload dotenv. By doing this, you do not need to require and load dotenv in your application code. +./node_modules/dotenv/README.md:171:DATABASE_URL="postgres://${USERNAME}@localhost/my_database" +./node_modules/dotenv/README.md:180:DATABASE_URL postgres://username@localhost/my_database +./node_modules/dotenv/README.md:192:DATABASE_URL="postgres://$(whoami)@localhost/my_database" +./node_modules/dotenv/README.md:201:DATABASE_URL postgres://yourusername@localhost/my_database +./node_modules/dotenv/README.md:590:[`process.env`](https://nodejs.org/docs/latest/api/process.html#process_process_env), +./node_modules/dotenv/lib/main.d.ts:18: * @param src - contents to be parsed. example: `'DB_HOST=localhost'` +./node_modules/dotenv/lib/main.d.ts:19: * @returns an object with keys and values based on `src`. example: `{ DB_HOST : 'localhost' }` +./node_modules/playwright-core/ThirdPartyNotices.txt:156:$ bombardier -d 10s --fasthttp http://localhost:3000/ +./node_modules/playwright-core/ThirdPartyNotices.txt:170:$ bombardier -d 10s --fasthttp http://localhost:3000/ +./node_modules/playwright-core/ThirdPartyNotices.txt:218: console.log(`Listening on http://localhost:${info.port}`) // Listening on http://localhost:3000 +./node_modules/playwright-core/ThirdPartyNotices.txt:228:Open `http://localhost:3000` with your browser. +./node_modules/playwright-core/lib/client/events.js:45: // @see https://nodejs.org/api/events.html#events_error_events +./node_modules/playwright-core/lib/client/events.js:67: // @see https://nodejs.org/api/events.html#events_error_events +./node_modules/playwright-core/lib/mcpBundleImpl/index.js:111:`&&o++}}return[e,r]}var vp=class extends Event{constructor(e,r){var o,n;super(e),this.code=(o=r==null?void 0:r.code)!=null?o:void 0,this.message=(n=r==null?void 0:r.message)!=null?n:void 0}[Symbol.for("nodejs.util.inspect.custom")](e,r,o){return o(h0(this),r)}[Symbol.for("Deno.customInspect")](e,r){return e(h0(this),r)}};function DC(t){let e=globalThis.DOMException;return typeof e=="function"?new e(t,"SyntaxError"):new SyntaxError(t)}function Cy(t){return t instanceof Error?"errors"in t&&Array.isArray(t.errors)?t.errors.map(Cy).join(", "):"cause"in t&&t.cause instanceof Error?`${t}: ${Cy(t.cause)}`:t.message:`${t}`}function h0(t){return{type:t.type,message:t.message,code:t.code,defaultPrevented:t.defaultPrevented,cancelable:t.cancelable,timeStamp:t.timeStamp}}var v0=t=>{throw TypeError(t)},Vy=(t,e,r)=>e.has(t)||v0("Cannot "+r),oe=(t,e,r)=>(Vy(t,e,"read from private field"),r?r.call(t):e.get(t)),Ze=(t,e,r)=>e.has(t)?v0("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),Ee=(t,e,r,o)=>(Vy(t,e,"write to private field"),e.set(t,r),r),Tr=(t,e,r)=>(Vy(t,e,"access private method"),r),vt,ro,Oi,gp,_p,Tc,Ni,Ec,vn,ji,Ci,Ri,Ic,Yt,Dy,Uy,Ay,g0,Zy,My,Pc,qy,Ly,no=class extends EventTarget{constructor(e,r){var o,n;super(),Ze(this,Yt),this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,Ze(this,vt),Ze(this,ro),Ze(this,Oi),Ze(this,gp),Ze(this,_p),Ze(this,Tc),Ze(this,Ni),Ze(this,Ec,null),Ze(this,vn),Ze(this,ji),Ze(this,Ci,null),Ze(this,Ri,null),Ze(this,Ic,null),Ze(this,Uy,async i=>{var a;oe(this,ji).reset();let{body:c,redirected:u,status:l,headers:d}=i;if(l===204){Tr(this,Yt,Pc).call(this,"Server sent HTTP 204, not reconnecting",204),this.close();return}if(u?Ee(this,Oi,new URL(i.url)):Ee(this,Oi,void 0),l!==200){Tr(this,Yt,Pc).call(this,`Non-200 status code (${l})`,l);return}if(!(d.get("content-type")||"").startsWith("text/event-stream")){Tr(this,Yt,Pc).call(this,'Invalid content type, expected "text/event-stream"',l);return}if(oe(this,vt)===this.CLOSED)return;Ee(this,vt,this.OPEN);let s=new Event("open");if((a=oe(this,Ic))==null||a.call(this,s),this.dispatchEvent(s),typeof c!="object"||!c||!("getReader"in c)){Tr(this,Yt,Pc).call(this,"Invalid response body, expected a web ReadableStream",l),this.close();return}let f=new TextDecoder,p=c.getReader(),m=!0;do{let{done:h,value:g}=await p.read();g&&oe(this,ji).feed(f.decode(g,{stream:!h})),h&&(m=!1,oe(this,ji).reset(),Tr(this,Yt,qy).call(this))}while(m)}),Ze(this,Ay,i=>{Ee(this,vn,void 0),!(i.name==="AbortError"||i.type==="aborted")&&Tr(this,Yt,qy).call(this,Cy(i))}),Ze(this,Zy,i=>{typeof i.id=="string"&&Ee(this,Ec,i.id);let a=new MessageEvent(i.event||"message",{data:i.data,origin:oe(this,Oi)?oe(this,Oi).origin:oe(this,ro).origin,lastEventId:i.id||""});oe(this,Ri)&&(!i.event||i.event==="message")&&oe(this,Ri).call(this,a),this.dispatchEvent(a)}),Ze(this,My,i=>{Ee(this,Tc,i)}),Ze(this,Ly,()=>{Ee(this,Ni,void 0),oe(this,vt)===this.CONNECTING&&Tr(this,Yt,Dy).call(this)});try{if(e instanceof URL)Ee(this,ro,e);else if(typeof e=="string")Ee(this,ro,new URL(e,UC()));else throw new Error("Invalid URL")}catch{throw DC("An invalid or illegal string was specified")}Ee(this,ji,hp({onEvent:oe(this,Zy),onRetry:oe(this,My)})),Ee(this,vt,this.CONNECTING),Ee(this,Tc,3e3),Ee(this,_p,(o=r==null?void 0:r.fetch)!=null?o:globalThis.fetch),Ee(this,gp,(n=r==null?void 0:r.withCredentials)!=null?n:!1),Tr(this,Yt,Dy).call(this)}get readyState(){return oe(this,vt)}get url(){return oe(this,ro).href}get withCredentials(){return oe(this,gp)}get onerror(){return oe(this,Ci)}set onerror(e){Ee(this,Ci,e)}get onmessage(){return oe(this,Ri)}set onmessage(e){Ee(this,Ri,e)}get onopen(){return oe(this,Ic)}set onopen(e){Ee(this,Ic,e)}addEventListener(e,r,o){let n=r;super.addEventListener(e,n,o)}removeEventListener(e,r,o){let n=r;super.removeEventListener(e,n,o)}close(){oe(this,Ni)&&clearTimeout(oe(this,Ni)),oe(this,vt)!==this.CLOSED&&(oe(this,vn)&&oe(this,vn).abort(),Ee(this,vt,this.CLOSED),Ee(this,vn,void 0))}};vt=new WeakMap,ro=new WeakMap,Oi=new WeakMap,gp=new WeakMap,_p=new WeakMap,Tc=new WeakMap,Ni=new WeakMap,Ec=new WeakMap,vn=new WeakMap,ji=new WeakMap,Ci=new WeakMap,Ri=new WeakMap,Ic=new WeakMap,Yt=new WeakSet,Dy=function(){Ee(this,vt,this.CONNECTING),Ee(this,vn,new AbortController),oe(this,_p)(oe(this,ro),Tr(this,Yt,g0).call(this)).then(oe(this,Uy)).catch(oe(this,Ay))},Uy=new WeakMap,Ay=new WeakMap,g0=function(){var t;let e={mode:"cors",redirect:"follow",headers:{Accept:"text/event-stream",...oe(this,Ec)?{"Last-Event-ID":oe(this,Ec)}:void 0},cache:"no-store",signal:(t=oe(this,vn))==null?void 0:t.signal};return"window"in globalThis&&(e.credentials=this.withCredentials?"include":"same-origin"),e},Zy=new WeakMap,My=new WeakMap,Pc=function(t,e){var r;oe(this,vt)!==this.CLOSED&&Ee(this,vt,this.CLOSED);let o=new vp("error",{code:e,message:t});(r=oe(this,Ci))==null||r.call(this,o),this.dispatchEvent(o)},qy=function(t,e){var r;if(oe(this,vt)===this.CLOSED)return;Ee(this,vt,this.CONNECTING);let o=new vp("error",{code:e,message:t});(r=oe(this,Ci))==null||r.call(this,o),this.dispatchEvent(o),Ee(this,Ni,setTimeout(oe(this,Ly),oe(this,Tc)))},Ly=new WeakMap,no.CONNECTING=0,no.OPEN=1,no.CLOSED=2;function UC(){let t="document"in globalThis?globalThis.document:void 0;return t&&typeof t=="object"&&"baseURI"in t&&typeof t.baseURI=="string"?t.baseURI:void 0}function Di(t){return t?t instanceof Headers?Object.fromEntries(t.entries()):Array.isArray(t)?Object.fromEntries(t):{...t}:{}}function yp(t=fetch,e){return e?async(r,o)=>{let n={...e,...o,headers:o!=null&&o.headers?{...Di(e.headers),...Di(o.headers)}:e.headers};return t(r,n)}:t}var Fy,_0,y0,$0;Fy=($0=(y0=(_0=globalThis.crypto)==null?void 0:_0.webcrypto)!=null?y0:globalThis.crypto)!=null?$0:import("node:crypto").then(t=>t.webcrypto);async function AC(t){return(await Fy).getRandomValues(new Uint8Array(t))}async function ZC(t){let e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~",r="",o=await AC(t);for(let n=0;n128)throw`Expected a length between 43 and 128. Received ${t}.`;let e=await MC(t),r=await qC(e);return{code_verifier:e,code_challenge:r}}var We=hs().superRefine((t,e)=>{if(!URL.canParse(t))return e.addIssue({code:af.custom,message:"URL must be parseable",fatal:!0}),kn}).refine(t=>{let e=new URL(t);return e.protocol!=="javascript:"&&e.protocol!=="data:"&&e.protocol!=="vbscript:"},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),x0=Re({resource:v().url(),authorization_servers:j(We).optional(),jwks_uri:v().url().optional(),scopes_supported:j(v()).optional(),bearer_methods_supported:j(v()).optional(),resource_signing_alg_values_supported:j(v()).optional(),resource_name:v().optional(),resource_documentation:v().optional(),resource_policy_uri:v().url().optional(),resource_tos_uri:v().url().optional(),tls_client_certificate_bound_access_tokens:pe().optional(),authorization_details_types_supported:j(v()).optional(),dpop_signing_alg_values_supported:j(v()).optional(),dpop_bound_access_tokens_required:pe().optional()}),Hy=Re({issuer:v(),authorization_endpoint:We,token_endpoint:We,registration_endpoint:We.optional(),scopes_supported:j(v()).optional(),response_types_supported:j(v()),response_modes_supported:j(v()).optional(),grant_types_supported:j(v()).optional(),token_endpoint_auth_methods_supported:j(v()).optional(),token_endpoint_auth_signing_alg_values_supported:j(v()).optional(),service_documentation:We.optional(),revocation_endpoint:We.optional(),revocation_endpoint_auth_methods_supported:j(v()).optional(),revocation_endpoint_auth_signing_alg_values_supported:j(v()).optional(),introspection_endpoint:v().optional(),introspection_endpoint_auth_methods_supported:j(v()).optional(),introspection_endpoint_auth_signing_alg_values_supported:j(v()).optional(),code_challenge_methods_supported:j(v()).optional(),client_id_metadata_document_supported:pe().optional()}),LC=Re({issuer:v(),authorization_endpoint:We,token_endpoint:We,userinfo_endpoint:We.optional(),jwks_uri:We,registration_endpoint:We.optional(),scopes_supported:j(v()).optional(),response_types_supported:j(v()),response_modes_supported:j(v()).optional(),grant_types_supported:j(v()).optional(),acr_values_supported:j(v()).optional(),subject_types_supported:j(v()),id_token_signing_alg_values_supported:j(v()),id_token_encryption_alg_values_supported:j(v()).optional(),id_token_encryption_enc_values_supported:j(v()).optional(),userinfo_signing_alg_values_supported:j(v()).optional(),userinfo_encryption_alg_values_supported:j(v()).optional(),userinfo_encryption_enc_values_supported:j(v()).optional(),request_object_signing_alg_values_supported:j(v()).optional(),request_object_encryption_alg_values_supported:j(v()).optional(),request_object_encryption_enc_values_supported:j(v()).optional(),token_endpoint_auth_methods_supported:j(v()).optional(),token_endpoint_auth_signing_alg_values_supported:j(v()).optional(),display_values_supported:j(v()).optional(),claim_types_supported:j(v()).optional(),claims_supported:j(v()).optional(),service_documentation:v().optional(),claims_locales_supported:j(v()).optional(),ui_locales_supported:j(v()).optional(),claims_parameter_supported:pe().optional(),request_parameter_supported:pe().optional(),request_uri_parameter_supported:pe().optional(),require_request_uri_registration:pe().optional(),op_policy_uri:We.optional(),op_tos_uri:We.optional(),client_id_metadata_document_supported:pe().optional()}),w0=R({...LC.shape,...Hy.pick({code_challenge_methods_supported:!0}).shape}),k0=R({access_token:v(),id_token:v().optional(),token_type:v(),expires_in:Fn.number().optional(),scope:v().optional(),refresh_token:v().optional()}).strip(),S0=R({error:v(),error_description:v().optional(),error_uri:v().optional()}),b0=We.optional().or(Z("").transform(()=>{})),VC=R({redirect_uris:j(We),token_endpoint_auth_method:v().optional(),grant_types:j(v()).optional(),response_types:j(v()).optional(),client_name:v().optional(),client_uri:We.optional(),logo_uri:b0,scope:v().optional(),contacts:j(v()).optional(),tos_uri:b0,policy_uri:v().optional(),jwks_uri:We.optional(),jwks:js().optional(),software_id:v().optional(),software_version:v().optional(),software_statement:v().optional()}).strip(),FC=R({client_id:v(),client_secret:v().optional(),client_id_issued_at:ae().optional(),client_secret_expires_at:ae().optional()}).strip(),z0=VC.merge(FC),PF=R({error:v(),error_description:v().optional()}).strip(),TF=R({token:v(),token_type_hint:v().optional()}).strip();function I0(t){let e=typeof t=="string"?new URL(t):new URL(t.href);return e.hash="",e}function P0({requestedResource:t,configuredResource:e}){let r=typeof t=="string"?new URL(t):new URL(t.href),o=typeof e=="string"?new URL(e):new URL(e.href);if(r.origin!==o.origin||r.pathname.length0&&(c=a.authorization_servers[0])}catch{}c||(c=new URL("/",e));let u=await YC(e,t,a),l=await oD(c,{fetchFn:i}),d=await Promise.resolve(t.clientInformation());if(!d){if(r!==void 0)throw new Error("Existing OAuth client information is required when exchanging an authorization code");let w=(l==null?void 0:l.client_id_metadata_document_supported)===!0,k=t.clientMetadataUrl;if(k&&!XC(k))throw new so(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${k}`);if(w&&k)d={client_id:k},await((g=t.saveClientInformation)==null?void 0:g.call(t,d));else{if(!t.saveClientInformation)throw new Error("OAuth client information must be saveable for dynamic registration");let x=await uD(c,{metadata:l,clientMetadata:t.clientMetadata,fetchFn:i});await t.saveClientInformation(x),d=x}}let s=!t.redirectUrl;if(r!==void 0||s){let w=await cD(t,c,{metadata:l,resource:u,authorizationCode:r,fetchFn:i});return await t.saveTokens(w),"AUTHORIZED"}let f=await t.tokens();if(f!=null&&f.refresh_token)try{let w=await sD(c,{metadata:l,clientInformation:d,refreshToken:f.refresh_token,resource:u,addClientAuthentication:t.addClientAuthentication,fetchFn:i});return await t.saveTokens(w),"AUTHORIZED"}catch(w){if(!(!(w instanceof Ce)||w instanceof Er))throw w}let p=t.state?await t.state():void 0,{authorizationUrl:m,codeVerifier:h}=await iD(c,{metadata:l,clientInformation:d,state:p,redirectUrl:t.redirectUrl,scope:o||((y=a==null?void 0:a.scopes_supported)==null?void 0:y.join(" "))||t.clientMetadata.scope,resource:u});return await t.saveCodeVerifier(h),await t.redirectToAuthorization(m),"REDIRECT"}function XC(t){if(!t)return!1;try{let e=new URL(t);return e.protocol==="https:"&&e.pathname!=="/"}catch{return!1}}async function YC(t,e,r){let o=I0(t);if(e.validateResourceURL)return await e.validateResourceURL(o,r==null?void 0:r.resource);if(r){if(!P0({requestedResource:o,configuredResource:r.resource}))throw new Error(`Protected resource ${r.resource} does not match expected ${o} (or origin)`);return new URL(r.resource)}}function Ui(t){let e=t.headers.get("WWW-Authenticate");if(!e)return{};let[r,o]=e.split(" ");if(r.toLowerCase()!=="bearer"||!o)return{};let n=Gy(t,"resource_metadata")||void 0,i;if(n)try{i=new URL(n)}catch{}let a=Gy(t,"scope")||void 0,c=Gy(t,"error")||void 0;return{resourceMetadataUrl:i,scope:a,error:c}}function Gy(t,e){let r=t.headers.get("WWW-Authenticate");if(!r)return null;let o=new RegExp(`${e}=(?:"([^"]+)"|([^\\s,]+))`),n=r.match(o);return n?n[1]||n[2]:null}async function QC(t,e,r=fetch){var n,i;let o=await rD(t,"oauth-protected-resource",r,{protocolVersion:e==null?void 0:e.protocolVersion,metadataUrl:e==null?void 0:e.resourceMetadataUrl});if(!o||o.status===404)throw await((n=o==null?void 0:o.body)==null?void 0:n.cancel()),new Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!o.ok)throw await((i=o.body)==null?void 0:i.cancel()),new Error(`HTTP ${o.status} trying to load well-known OAuth protected resource metadata.`);return x0.parse(await o.json())}async function Xy(t,e,r=fetch){try{return await r(t,{headers:e})}catch(o){if(o instanceof TypeError)return e?Xy(t,void 0,r):void 0;throw o}}function eD(t,e="",r={}){return e.endsWith("/")&&(e=e.slice(0,-1)),r.prependPathname?`${e}/.well-known/${t}`:`/.well-known/${t}${e}`}async function E0(t,e,r=fetch){return await Xy(t,{"MCP-Protocol-Version":e},r)}function tD(t,e){return!t||t.status>=400&&t.status<500&&e!=="/"}async function rD(t,e,r,o){var u,l;let n=new URL(t),i=(u=o==null?void 0:o.protocolVersion)!=null?u:on,a;if(o!=null&&o.metadataUrl)a=new URL(o.metadataUrl);else{let d=eD(e,n.pathname);a=new URL(d,(l=o==null?void 0:o.metadataServerUrl)!=null?l:n),a.search=n.search}let c=await E0(a,i,r);if(!(o!=null&&o.metadataUrl)&&tD(c,n.pathname)){let d=new URL(`/.well-known/${e}`,n);c=await E0(d,i,r)}return c}function nD(t){let e=typeof t=="string"?new URL(t):t,r=e.pathname!=="/",o=[];if(!r)return o.push({url:new URL("/.well-known/oauth-authorization-server",e.origin),type:"oauth"}),o.push({url:new URL("/.well-known/openid-configuration",e.origin),type:"oidc"}),o;let n=e.pathname;return n.endsWith("/")&&(n=n.slice(0,-1)),o.push({url:new URL(`/.well-known/oauth-authorization-server${n}`,e.origin),type:"oauth"}),o.push({url:new URL(`/.well-known/openid-configuration${n}`,e.origin),type:"oidc"}),o.push({url:new URL(`${n}/.well-known/openid-configuration`,e.origin),type:"oidc"}),o}async function oD(t,{fetchFn:e=fetch,protocolVersion:r=on}={}){var i;let o={"MCP-Protocol-Version":r,Accept:"application/json"},n=nD(t);for(let{url:a,type:c}of n){let u=await Xy(a,o,e);if(u){if(!u.ok){if(await((i=u.body)==null?void 0:i.cancel()),u.status>=400&&u.status<500)continue;throw new Error(`HTTP ${u.status} trying to load ${c==="oauth"?"OAuth":"OpenID provider"} metadata from ${a}`)}return c==="oauth"?Hy.parse(await u.json()):w0.parse(await u.json())}}}async function iD(t,{metadata:e,clientInformation:r,redirectUrl:o,scope:n,state:i,resource:a}){let c;if(e){if(c=new URL(e.authorization_endpoint),!e.response_types_supported.includes(Wy))throw new Error(`Incompatible auth server: does not support response type ${Wy}`);if(e.code_challenge_methods_supported&&!e.code_challenge_methods_supported.includes(By))throw new Error(`Incompatible auth server: does not support code challenge method ${By}`)}else c=new URL("/authorize",t);let u=await Jy(),l=u.code_verifier,d=u.code_challenge;return c.searchParams.set("response_type",Wy),c.searchParams.set("client_id",r.client_id),c.searchParams.set("code_challenge",d),c.searchParams.set("code_challenge_method",By),c.searchParams.set("redirect_uri",String(o)),i&&c.searchParams.set("state",i),n&&c.searchParams.set("scope",n),n!=null&&n.includes("offline_access")&&c.searchParams.append("prompt","consent"),a&&c.searchParams.set("resource",a.href),{authorizationUrl:c,codeVerifier:l}}function aD(t,e,r){return new URLSearchParams({grant_type:"authorization_code",code:t,code_verifier:e,redirect_uri:String(r)})}async function j0(t,{metadata:e,tokenRequestParams:r,clientInformation:o,addClientAuthentication:n,resource:i,fetchFn:a}){var d;let c=e!=null&&e.token_endpoint?new URL(e.token_endpoint):new URL("/token",t),u=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"});if(i&&r.set("resource",i.href),n)await n(u,r,c,e);else if(o){let s=(d=e==null?void 0:e.token_endpoint_auth_methods_supported)!=null?d:[],f=HC(o,s);WC(f,o,u,r)}let l=await(a!=null?a:fetch)(c,{method:"POST",headers:u,body:r});if(!l.ok)throw await O0(l);return k0.parse(await l.json())}async function sD(t,{metadata:e,clientInformation:r,refreshToken:o,resource:n,addClientAuthentication:i,fetchFn:a}){let c=new URLSearchParams({grant_type:"refresh_token",refresh_token:o}),u=await j0(t,{metadata:e,tokenRequestParams:c,clientInformation:r,addClientAuthentication:i,resource:n,fetchFn:a});return{refresh_token:o,...u}}async function cD(t,e,{metadata:r,resource:o,authorizationCode:n,fetchFn:i}={}){let a=t.clientMetadata.scope,c;if(t.prepareTokenRequest&&(c=await t.prepareTokenRequest(a)),!c){if(!n)throw new Error("Either provider.prepareTokenRequest() or authorizationCode is required");if(!t.redirectUrl)throw new Error("redirectUrl is required for authorization_code flow");let l=await t.codeVerifier();c=aD(n,l,t.redirectUrl)}let u=await t.clientInformation();return j0(e,{metadata:r,tokenRequestParams:c,clientInformation:u!=null?u:void 0,addClientAuthentication:t.addClientAuthentication,resource:o,fetchFn:i})}async function uD(t,{metadata:e,clientMetadata:r,fetchFn:o}){let n;if(e){if(!e.registration_endpoint)throw new Error("Incompatible auth server: does not support dynamic client registration");n=new URL(e.registration_endpoint)}else n=new URL("/register",t);let i=await(o!=null?o:fetch)(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!i.ok)throw await O0(i);return z0.parse(await i.json())}var Yy=class extends Error{constructor(e,r,o){super(`SSE error: ${r}`),this.code=e,this.event=o}},$p=class{constructor(e,r){this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._eventSourceInit=r==null?void 0:r.eventSourceInit,this._requestInit=r==null?void 0:r.requestInit,this._authProvider=r==null?void 0:r.authProvider,this._fetch=r==null?void 0:r.fetch,this._fetchWithInit=yp(r==null?void 0:r.fetch,r==null?void 0:r.requestInit)}async _authThenStart(){var r;if(!this._authProvider)throw new lt("No auth provider");let e;try{e=await Or(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(o){throw(r=this.onerror)==null||r.call(this,o),o}if(e!=="AUTHORIZED")throw new lt;return await this._startOrAuth()}async _commonHeaders(){var o;let e={};if(this._authProvider){let n=await this._authProvider.tokens();n&&(e.Authorization=`Bearer ${n.access_token}`)}this._protocolVersion&&(e["mcp-protocol-version"]=this._protocolVersion);let r=Di((o=this._requestInit)==null?void 0:o.headers);return new Headers({...e,...r})}_startOrAuth(){var r,o,n;let e=(n=(o=(r=this==null?void 0:this._eventSourceInit)==null?void 0:r.fetch)!=null?o:this._fetch)!=null?n:fetch;return new Promise((i,a)=>{this._eventSource=new no(this._url.href,{...this._eventSourceInit,fetch:async(c,u)=>{let l=await this._commonHeaders();l.set("Accept","text/event-stream");let d=await e(c,{...u,headers:l});if(d.status===401&&d.headers.has("www-authenticate")){let{resourceMetadataUrl:s,scope:f}=Ui(d);this._resourceMetadataUrl=s,this._scope=f}return d}}),this._abortController=new AbortController,this._eventSource.onerror=c=>{var l;if(c.code===401&&this._authProvider){this._authThenStart().then(i,a);return}let u=new Yy(c.code,c.message,c);a(u),(l=this.onerror)==null||l.call(this,u)},this._eventSource.onopen=()=>{},this._eventSource.addEventListener("endpoint",c=>{var l;let u=c;try{if(this._endpoint=new URL(u.data,this._url),this._endpoint.origin!==this._url.origin)throw new Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`)}catch(d){a(d),(l=this.onerror)==null||l.call(this,d),this.close();return}i()}),this._eventSource.onmessage=c=>{var d,s;let u=c,l;try{l=kt.parse(JSON.parse(u.data))}catch(f){(d=this.onerror)==null||d.call(this,f);return}(s=this.onmessage)==null||s.call(this,l)}})}async start(){if(this._eventSource)throw new Error("SSEClientTransport already started! If using Client class, note that connect() calls start() automatically.");return await this._startOrAuth()}async finishAuth(e){if(!this._authProvider)throw new lt("No auth provider");if(await Or(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new lt("Failed to authorize")}async close(){var e,r,o;(e=this._abortController)==null||e.abort(),(r=this._eventSource)==null||r.close(),(o=this.onclose)==null||o.call(this)}async send(e){var r,o,n,i;if(!this._endpoint)throw new Error("Not connected");try{let a=await this._commonHeaders();a.set("content-type","application/json");let c={...this._requestInit,method:"POST",headers:a,body:JSON.stringify(e),signal:(r=this._abortController)==null?void 0:r.signal},u=await((o=this._fetch)!=null?o:fetch)(this._endpoint,c);if(!u.ok){let l=await u.text().catch(()=>null);if(u.status===401&&this._authProvider){let{resourceMetadataUrl:d,scope:s}=Ui(u);if(this._resourceMetadataUrl=d,this._scope=s,await Or(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new lt;return this.send(e)}throw new Error(`Error POSTing to endpoint (HTTP ${u.status}): ${l}`)}await((n=u.body)==null?void 0:n.cancel())}catch(a){throw(i=this.onerror)==null||i.call(this,a),a}}setProtocolVersion(e){this._protocolVersion=e}};var q0=require("node:crypto");var D0=er(C0());function Qy(t,{limit:e,encoding:r}){let o=D0.default.parse(e);return new Promise((n,i)=>{let a=0,c=[];t.on("data",u=>{if(a+=u.length,a>o)return i(new Error(`Message size exceeds limit of ${e} bytes`));c.push(u)}),t.on("end",()=>{try{n(Buffer.concat(c).toString(r))}catch(u){i(u)}}),t.on("error",u=>{i(u)})})}var L0=er(M0(),1),V0=require("node:url"),xD="4mb",xp=class{constructor(e,r,o){this._endpoint=e,this.res=r,this._sessionId=(0,q0.randomUUID)(),this._options=o||{enableDnsRebindingProtection:!1}}validateRequestHeaders(e){if(this._options.enableDnsRebindingProtection){if(this._options.allowedHosts&&this._options.allowedHosts.length>0){let r=e.headers.host;if(!r||!this._options.allowedHosts.includes(r))return`Invalid Host header: ${r}`}if(this._options.allowedOrigins&&this._options.allowedOrigins.length>0){let r=e.headers.origin;if(r&&!this._options.allowedOrigins.includes(r))return`Invalid Origin header: ${r}`}}}async start(){if(this._sseResponse)throw new Error("SSEServerTransport already started! If using Server class, note that connect() calls start() automatically.");this.res.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache, no-transform",Connection:"keep-alive"});let e="http://localhost",r=new V0.URL(this._endpoint,e);r.searchParams.set("sessionId",this._sessionId);let o=r.pathname+r.search+r.hash;this.res.write(`event: endpoint +./node_modules/playwright-core/lib/server/socksClientCertificatesInterceptor.js:304: return host === "local.playwright" ? "localhost" : host; +./node_modules/playwright-core/lib/server/browserContext.js:63: // @see https://nodejs.org/api/events.html#events_error_events +./node_modules/playwright-core/lib/server/trace/viewer/traceViewer.js:70: const url = new URL("http://localhost" + request.url); +./node_modules/playwright-core/lib/server/trace/viewer/traceViewer.js:175: await (0, import_utilsBundle.open)(url.replace("0.0.0.0", "localhost")).catch(() => { +./node_modules/playwright-core/lib/server/network.js:63: return hostname === "localhost" || hostname.endsWith(".localhost"); +./node_modules/playwright-core/lib/server/bidi/third_party/firefoxPrefs.js:124: "datareporting.healthreport.documentServerURI": `http://${server}/dummy/healthreport/`, +./node_modules/playwright-core/lib/server/chromium/chromium.js:220: if (endpointURL.hostname === "localhost" || endpointURL.hostname === "127.0.0.1") +./node_modules/playwright-core/lib/server/chromium/chromium.js:229: const endpointURLString = addProtocol(debuggerAddress || chromeOptionsURL).replace("localhost", "127.0.0.1"); +./node_modules/playwright-core/lib/server/chromium/chromium.js:232: if (endpointURL.hostname === "localhost" || endpointURL.hostname === "127.0.0.1") { +./node_modules/playwright-core/lib/server/chromium/chromium.js:233: const sessionInfoUrl = new URL(hubUrl).origin + "/grid/api/testsession?session=" + sessionId; +./node_modules/playwright-core/lib/server/utils/socksProxy.js:297: return host === "localhost" || host.endsWith(".localhost") || host === "127.0.0.1" || host === "[::1]"; +./node_modules/playwright-core/lib/server/utils/socksProxy.js:464: host = "localhost"; +./node_modules/playwright-core/lib/server/utils/wsServer.js:56: const wsEndpoint2 = typeof address === "string" ? `${address}${path}` : `ws://${hostname || "localhost"}:${address.port}${path}`; +./node_modules/playwright-core/lib/server/utils/wsServer.js:67: const pathname = new URL("http://localhost" + request.url).pathname; +./node_modules/playwright-core/lib/server/utils/wsServer.js:85: const url = new URL("http://localhost" + (request.url || "")); +./node_modules/playwright-core/lib/server/utils/httpServer.js:109: this._urlPrefixHumanReadable = `http://${host ?? "localhost"}:${address.port}`; +./node_modules/playwright-core/lib/server/utils/httpServer.js:186: const url = new URL("http://localhost" + request.url); +./node_modules/playwright-core/lib/server/utils/network.js:174: const { host = "localhost", port = 0 } = options; +./node_modules/playwright-core/lib/server/utils/processLauncher.js:110: // @see https://nodejs.org/api/child_process.html#child_process_options_detached +./node_modules/playwright-core/lib/server/utils/crypto.js:144: DER.encodePrintableString("localhost") +./node_modules/playwright-core/lib/server/utils/crypto.js:168: DER.encodePrintableString("localhost") +./node_modules/playwright-core/lib/server/helper.js:29: if (urlString.startsWith("localhost") || urlString.startsWith("127.0.0.1")) +./node_modules/playwright-core/lib/server/registry/index.js:1181: const products = lowercaseAllKeys(JSON.parse(await (0, import_network.fetchData)(void 0, { url: "https://edgeupdates.microsoft.com/api/products" }))); +./node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js:5:If your trace is in a local or private network, please grant permission for Local Network Access.`),new Error(a)}const n=new Qs(e.storage(),r=>e.resourceForSha1(r));return{traceLoader:e,snapshotServer:n}}async function Eo(s){const t=s.request;if(t.url.startsWith("chrome-extension://"))return fetch(t);const e=new URL(t.url);let n;if(t.url.startsWith(self.registration.scope)&&(n=e.pathname.substring(go.length-1)),n==="/restartServiceWorker")return bo(),new Response(null,{status:200});if(n==="/ping")return new Response(null,{status:200});const i=!!s.resultingClientId,r=s.clientId?await self.clients.get(s.clientId):void 0;if(i&&!(n!=null&&n.startsWith("/sha1/"))){if(n!=null&&n.startsWith("/snapshot/")){const{errorResponse:a,loadedTrace:o}=await Mn(s.resultingClientId,e,So);if(a)return a;const l=n.substring(10),_=o.snapshotServer.serveSnapshot(l,e.searchParams,e.href);return Fn&&_.headers.set("Content-Security-Policy","upgrade-insecure-requests"),_}return fetch(s.request)}if(!n){if(!r)return new Response("Sub-resource without a client",{status:500});const{snapshotServer:a}=await Ks(r.id,new URL(r.url),Un(r));if(!a)return new Response(null,{status:404});const o=[t.url];return Fn&&t.url.startsWith("https://")&&o.push(t.url.replace(/^https/,"http")),a.serveResource(o,t.method,r.url)}if(n==="/contexts"||n.startsWith("/snapshotInfo/")||n.startsWith("/closest-screenshot/")||n.startsWith("/sha1/")){if(!r)return new Response("Sub-resource without a client",{status:500});const{errorResponse:a,loadedTrace:o}=await Mn(r.id,e,Un(r));if(a)return a;if(n==="/contexts")return new Response(JSON.stringify(o.traceLoader.contextEntries),{status:200,headers:{"Content-Type":"application/json"}});if(n.startsWith("/snapshotInfo/")){const l=n.substring(14);return o.snapshotServer.serveSnapshotInfo(l,e.searchParams)}if(n.startsWith("/closest-screenshot/")){const l=n.substring(20);return o.snapshotServer.serveClosestScreenshot(l,e.searchParams)}if(n.startsWith("/sha1/")){const l=await o.traceLoader.resourceForSha1(n.slice(6));return l?new Response(l,{status:200,headers:xo(e.searchParams)}):new Response(null,{status:404})}}return fetch(s.request)}function xo(s){const t=s.get("dn"),e=s.get("dct");if(!t)return;const n=new Headers;return n.set("Content-Disposition",`attachment; filename="attachment"; filename*=UTF-8''${encodeURIComponent(t)}`),e&&n.set("Content-Type",e),n}async function To(){const s=await self.clients.matchAll(),t=new Set;for(const[e,n]of $e){if(!s.find(i=>i.id===e)){$e.delete(e);continue}t.add(n)}for(const e of Ee.keys())t.has(e)||Ee.delete(e)}function Un(s){return(t,e)=>{s.postMessage({method:"progress",params:{done:t,total:e}})}}function So(s,t){}function Ro(s){const e=new URL(s,"http://localhost").searchParams.get("path");return!!(e!=null&&e.endsWith(".json"))}self.addEventListener("fetch",function(s){if(s.request.headers.get("x-pw-serviceworker")==="skip")return!1;s.respondWith(Eo(s))}); +./node_modules/playwright-core/lib/vite/traceViewer/snapshot.html:9: throw new Error(`Service workers are not supported.\nMake sure to serve the Trace Viewer (${window.location}) via HTTPS or localhost.`); +./node_modules/playwright-core/lib/vite/traceViewer/index.BDwrLSGN.js:2:Make sure to serve the Trace Viewer (${window.location}) via HTTPS or localhost.`);navigator.serviceWorker.register("sw.bundle.js"),navigator.serviceWorker.controller||await new Promise(h=>{navigator.serviceWorker.oncontrollerchange=()=>h()}),setInterval(function(){fetch("ping")},1e4)}const c=o.get("trace"),l=(c==null?void 0:c.endsWith(".json"))?e.jsx(q,{traceJson:c}):e.jsx($,{});V.createRoot(document.querySelector("#root")).render(l)})(); +./node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-CJSZINFr.js:51:`,"\\n")}function Ex(n,e){if(n)for(const i of e.split("|")){if(i==="url")try{const l=new URL(n[i]);return l.protocol==="data:"?l.protocol:l.protocol==="about:"?n[i]:l.pathname+l.search}catch{if(n[i]!==void 0)return n[i]}if(i==="timeNumber"&&n[i]!==void 0)return new Date(n[i]).toString();const r=Ax(n,i);if(r!==void 0)return r}}function Ax(n,e){const i=e.split(".");let r=n;for(const l of i){if(typeof r!="object"||r===null)return;r=r[l]}if(r!==void 0)return String(r)}function Nx(n){var i;return(n.title??((i=Qh.get(n.type+"."+n.method))==null?void 0:i.title)??n.method).replace(/\{([^}]+)\}/g,(r,l)=>eb(n.params,l)??r)}function Cx(n){var e;return(e=Qh.get(n.type+"."+n.method))==null?void 0:e.group}const qa=Symbol("context"),tb=Symbol("nextInContext"),nb=Symbol("prevByEndTime"),ib=Symbol("nextByStartTime"),Py=Symbol("events");class BC{constructor(e,i){var l;i.forEach(o=>kx(o));const r=i.find(o=>o.origin==="library");this.traceUri=e,this.browserName=(r==null?void 0:r.browserName)||"",this.sdkLanguage=r==null?void 0:r.sdkLanguage,this.channel=r==null?void 0:r.channel,this.testIdAttributeName=r==null?void 0:r.testIdAttributeName,this.platform=(r==null?void 0:r.platform)||"",this.playwrightVersion=(l=i.find(o=>o.playwrightVersion))==null?void 0:l.playwrightVersion,this.title=(r==null?void 0:r.title)||"",this.options=(r==null?void 0:r.options)||{},this.actions=Mx(i),this.pages=[].concat(...i.map(o=>o.pages)),this.wallTime=i.map(o=>o.wallTime).reduce((o,u)=>Math.min(o||Number.MAX_VALUE,u),Number.MAX_VALUE),this.startTime=i.map(o=>o.startTime).reduce((o,u)=>Math.min(o,u),Number.MAX_VALUE),this.endTime=i.map(o=>o.endTime).reduce((o,u)=>Math.max(o,u),Number.MIN_VALUE),this.events=[].concat(...i.map(o=>o.events)),this.stdio=[].concat(...i.map(o=>o.stdio)),this.errors=[].concat(...i.map(o=>o.errors)),this.hasSource=i.some(o=>o.hasSource),this.hasStepData=i.some(o=>o.origin==="testRunner"),this.resources=[...i.map(o=>o.resources)].flat(),this.attachments=this.actions.flatMap(o=>{var u;return((u=o.attachments)==null?void 0:u.map(f=>({...f,callId:o.callId,traceUri:e})))??[]}),this.visibleAttachments=this.attachments.filter(o=>!o.name.startsWith("_")),this.events.sort((o,u)=>o.time-u.time),this.resources.sort((o,u)=>o._monotonicTime-u._monotonicTime),this.errorDescriptors=this.hasStepData?this._errorDescriptorsFromTestRunner():this._errorDescriptorsFromActions(),this.sources=Bx(this.actions,this.errorDescriptors),this.actionCounters=new Map;for(const o of this.actions)o.group=o.group??Cx({type:o.class,method:o.method}),o.group&&this.actionCounters.set(o.group,1+(this.actionCounters.get(o.group)||0))}createRelativeUrl(e){const i=new URL("http://localhost/"+e);return i.searchParams.set("trace",this.traceUri),i.toString().substring(17)}failedAction(){return this.actions.findLast(e=>e.error)}filteredActions(e){const i=new Set(e);return this.actions.filter(r=>!r.group||i.has(r.group))}renderActionTree(e){const i=this.filteredActions(e??[]),{rootItem:r}=sb(i),l=[],o=(u,f)=>{const h=Nx({...u.action,type:u.action.class});l.push(`${f}${h||u.id}`);for(const g of u.children)o(g,f+" ")};return r.children.forEach(u=>o(u,"")),l}_errorDescriptorsFromActions(){var i;const e=[];for(const r of this.actions||[])(i=r.error)!=null&&i.message&&e.push({action:r,stack:r.stack,message:r.error.message});return e}_errorDescriptorsFromTestRunner(){return this.errors.filter(e=>!!e.message).map((e,i)=>({stack:e.stack,message:e.message}))}}function kx(n){for(const i of n.pages)i[qa]=n;for(let i=0;i=0;i--){const r=n.actions[i];r[tb]=e,r.class!=="Route"&&(e=r)}for(const i of n.events)i[qa]=n;for(const i of n.resources)i[qa]=n}function Mx(n){const e=[],i=Ox(n);e.push(...i),e.sort((r,l)=>l.parentId===r.callId?1:r.parentId===l.callId?-1:r.endTime-l.endTime);for(let r=1;rl.parentId===r.callId?-1:r.parentId===l.callId?1:r.startTime-l.startTime);for(let r=0;r+1u.origin==="library"),r=n.filter(u=>u.origin==="testRunner");if(!r.length||!i.length)return n.map(u=>u.actions.map(f=>({...f,context:u}))).flat();for(const u of i)for(const f of u.actions)e.set(f.stepId||`tmp-step@${++Zy}`,{...f,context:u});const l=Lx(r,e);l&&jx(i,l);const o=new Map;for(const u of r)for(const f of u.actions){const h=f.stepId&&e.get(f.stepId);if(h){o.set(f.callId,h.callId),f.error&&(h.error=f.error),f.attachments&&(h.attachments=f.attachments),f.annotations&&(h.annotations=f.annotations),f.parentId&&(h.parentId=o.get(f.parentId)??f.parentId),f.group&&(h.group=f.group),h.startTime=f.startTime,h.endTime=f.endTime;continue}f.parentId&&(f.parentId=o.get(f.parentId)??f.parentId),e.set(f.stepId||`tmp-step@${++Zy}`,{...f,context:u})}return[...e.values()]}function jx(n,e){for(const i of n){i.startTime+=e,i.endTime+=e;for(const r of i.actions)r.startTime&&(r.startTime+=e),r.endTime&&(r.endTime+=e);for(const r of i.events)r.time+=e;for(const r of i.stdio)r.timestamp+=e;for(const r of i.pages)for(const l of r.screencastFrames)l.timestamp+=e;for(const r of i.resources)r._monotonicTime&&(r._monotonicTime+=e)}}function Lx(n,e){for(const i of n)for(const r of i.actions){if(!r.startTime)continue;const l=r.stepId?e.get(r.stepId):void 0;if(l)return r.startTime-l.startTime}return 0}function sb(n){const e=new Map;for(const l of n)e.set(l.callId,{id:l.callId,parent:void 0,children:[],action:l});const i={action:{...Ux},id:"",parent:void 0,children:[]};for(const l of e.values()){i.action.startTime=Math.min(i.action.startTime,l.action.startTime),i.action.endTime=Math.max(i.action.endTime,l.action.endTime);const o=l.action.parentId&&e.get(l.action.parentId)||i;o.children.push(l),l.parent=o}const r=l=>{for(const o of l.children)o.action.stack=o.action.stack??l.action.stack,r(o)};return r(i),{rootItem:i,itemMap:e}}function rb(n){return n[qa]}function Rx(n){return n[tb]}function Wy(n){return n[nb]}function e0(n){return n[ib]}function Dx(n){let e=0,i=0;for(const r of zx(n)){if(r.type==="console"){const l=r.messageType;l==="warning"?++i:l==="error"&&++e}r.type==="event"&&r.method==="pageError"&&++e}return{errors:e,warnings:i}}function zx(n){let e=n[Py];if(e)return e;const i=Rx(n);return e=rb(n).events.filter(r=>r.time>=n.startTime&&(!i||r.time{const h=Math.max(l,n)*window.devicePixelRatio,[g,y]=on(o?o+"."+r+":size":void 0,h),[m,w]=on(o?o+"."+r+":size":void 0,h),[v,E]=U.useState(null),[x,_]=gs();let N;r==="vertical"?(N=m/window.devicePixelRatio,x&&x.heightE({offset:r==="vertical"?$.clientY:$.clientX,size:N}),onMouseUp:()=>E(null),onMouseMove:$=>{if(!$.buttons)E(null);else if(v){const D=(r==="vertical"?$.clientY:$.clientX)-v.offset,K=i?v.size+D:v.size-D,q=$.target.parentElement.getBoundingClientRect(),j=Math.min(Math.max(l,K),(r==="vertical"?q.height:q.width)-l);r==="vertical"?w(j*window.devicePixelRatio):y(j*window.devicePixelRatio)}}})]})},et=function(n,e,i){return n>=e&&n<=i};function Rt(n){return et(n,48,57)}function t0(n){return Rt(n)||et(n,65,70)||et(n,97,102)}function qx(n){return et(n,65,90)}function $x(n){return et(n,97,122)}function Ix(n){return qx(n)||$x(n)}function Vx(n){return n>=128}function $o(n){return Ix(n)||Vx(n)||n===95}function n0(n){return $o(n)||Rt(n)||n===45}function Gx(n){return et(n,0,8)||n===11||et(n,14,31)||n===127}function Io(n){return n===10}function Qn(n){return Io(n)||n===9||n===32}const Kx=1114111;class Jh extends Error{constructor(e){super(e),this.name="InvalidCharacterError"}}function Yx(n){const e=[];for(let i=0;i=e.length?-1:e[V]},u=function(V){if(V===void 0&&(V=1),V>3)throw"Spec Error: no more than three codepoints of lookahead.";return o(i+V)},f=function(V){return V===void 0&&(V=1),i+=V,l=o(i),!0},h=function(){return i-=1,!0},g=function(V){return V===void 0&&(V=l),V===-1},y=function(){if(m(),f(),Qn(l)){for(;Qn(u());)f();return new ic}else{if(l===34)return E();if(l===35)if(n0(u())||N(u(1),u(2))){const V=new vb("");return $(u(1),u(2),u(3))&&(V.type="id"),V.value=Q(),V}else return new dt(l);else return l===36?u()===61?(f(),new Jx):new dt(l):l===39?E():l===40?new mb:l===41?new Ph:l===42?u()===61?(f(),new Px):new dt(l):l===43?K()?(h(),w()):new dt(l):l===44?new hb:l===45?K()?(h(),w()):u(1)===45&&u(2)===62?(f(2),new cb):I()?(h(),v()):new dt(l):l===46?K()?(h(),w()):new dt(l):l===58?new ub:l===59?new fb:l===60?u(1)===33&&u(2)===45&&u(3)===45?(f(3),new ob):new dt(l):l===64?$(u(1),u(2),u(3))?new bb(Q()):new dt(l):l===91?new gb:l===92?C()?(h(),v()):new dt(l):l===93?new kh:l===94?u()===61?(f(),new Qx):new dt(l):l===123?new db:l===124?u()===61?(f(),new Fx):u()===124?(f(),new yb):new dt(l):l===125?new pb:l===126?u()===61?(f(),new Xx):new dt(l):Rt(l)?(h(),w()):$o(l)?(h(),v()):g()?new Go:new dt(l)}},m=function(){for(;u(1)===47&&u(2)===42;)for(f(2);;)if(f(),l===42&&u()===47){f();break}else if(g())return},w=function(){const V=q();if($(u(1),u(2),u(3))){const J=new Zx;return J.value=V.value,J.repr=V.repr,J.type=V.type,J.unit=Q(),J}else if(u()===37){f();const J=new xb;return J.value=V.value,J.repr=V.repr,J}else{const J=new wb;return J.value=V.value,J.repr=V.repr,J.type=V.type,J}},v=function(){const V=Q();if(V.toLowerCase()==="url"&&u()===40){for(f();Qn(u(1))&&Qn(u(2));)f();return u()===34||u()===39?new Ya(V):Qn(u())&&(u(2)===34||u(2)===39)?new Ya(V):x()}else return u()===40?(f(),new Ya(V)):new Zh(V)},E=function(V){V===void 0&&(V=l);let J="";for(;f();){if(l===V||g())return new Wh(J);if(Io(l))return h(),new lb;l===92?g(u())||(Io(u())?f():J+=st(_())):J+=st(l)}throw new Error("Internal error")},x=function(){const V=new Sb("");for(;Qn(u());)f();if(g(u()))return V;for(;f();){if(l===41||g())return V;if(Qn(l)){for(;Qn(u());)f();return u()===41||g(u())?(f(),V):(ne(),new Vo)}else{if(l===34||l===39||l===40||Gx(l))return ne(),new Vo;if(l===92)if(C())V.value+=st(_());else return ne(),new Vo;else V.value+=st(l)}}throw new Error("Internal error")},_=function(){if(f(),t0(l)){const V=[l];for(let W=0;W<5&&t0(u());W++)f(),V.push(l);Qn(u())&&f();let J=parseInt(V.map(function(W){return String.fromCharCode(W)}).join(""),16);return J>Kx&&(J=65533),J}else return g()?65533:l},N=function(V,J){return!(V!==92||Io(J))},C=function(){return N(l,u())},$=function(V,J,W){return V===45?$o(J)||J===45||N(J,W):$o(V)?!0:V===92?N(V,J):!1},I=function(){return $(l,u(1),u(2))},D=function(V,J,W){return V===43||V===45?!!(Rt(J)||J===46&&Rt(W)):V===46?!!Rt(J):!!Rt(V)},K=function(){return D(l,u(1),u(2))},Q=function(){let V="";for(;f();)if(n0(l))V+=st(l);else if(C())V+=st(_());else return h(),V;throw new Error("Internal parse error")},q=function(){let V="",J="integer";for((u()===43||u()===45)&&(f(),V+=st(l));Rt(u());)f(),V+=st(l);if(u(1)===46&&Rt(u(2)))for(f(),V+=st(l),f(),V+=st(l),J="number";Rt(u());)f(),V+=st(l);const W=u(1),Ae=u(2),B=u(3);if((W===69||W===101)&&Rt(Ae))for(f(),V+=st(l),f(),V+=st(l),J="number";Rt(u());)f(),V+=st(l);else if((W===69||W===101)&&(Ae===43||Ae===45)&&Rt(B))for(f(),V+=st(l),f(),V+=st(l),f(),V+=st(l),J="number";Rt(u());)f(),V+=st(l);const P=j(V);return{type:J,value:P,repr:V}},j=function(V){return+V},ne=function(){for(;f();){if(l===41||g())return;C()&&_()}};let le=0;for(;!g(u());)if(r.push(y()),le++,le>e.length*2)throw new Error("I'm infinite-looping!");return r}class Qe{constructor(){this.tokenType=""}toJSON(){return{token:this.tokenType}}toString(){return this.tokenType}toSource(){return""+this}}class lb extends Qe{constructor(){super(...arguments),this.tokenType="BADSTRING"}}class Vo extends Qe{constructor(){super(...arguments),this.tokenType="BADURL"}}class ic extends Qe{constructor(){super(...arguments),this.tokenType="WHITESPACE"}toString(){return"WS"}toSource(){return" "}}class ob extends Qe{constructor(){super(...arguments),this.tokenType="CDO"}toSource(){return""}}class ub extends Qe{constructor(){super(...arguments),this.tokenType=":"}}class fb extends Qe{constructor(){super(...arguments),this.tokenType=";"}}class hb extends Qe{constructor(){super(...arguments),this.tokenType=","}}class Er extends Qe{constructor(){super(...arguments),this.value="",this.mirror=""}}class db extends Er{constructor(){super(),this.tokenType="{",this.value="{",this.mirror="}"}}class pb extends Er{constructor(){super(),this.tokenType="}",this.value="}",this.mirror="{"}}class gb extends Er{constructor(){super(),this.tokenType="[",this.value="[",this.mirror="]"}}class kh extends Er{constructor(){super(),this.tokenType="]",this.value="]",this.mirror="["}}class mb extends Er{constructor(){super(),this.tokenType="(",this.value="(",this.mirror=")"}}class Ph extends Er{constructor(){super(),this.tokenType=")",this.value=")",this.mirror="("}}class Xx extends Qe{constructor(){super(...arguments),this.tokenType="~="}}class Fx extends Qe{constructor(){super(...arguments),this.tokenType="|="}}class Qx extends Qe{constructor(){super(...arguments),this.tokenType="^="}}class Jx extends Qe{constructor(){super(...arguments),this.tokenType="$="}}class Px extends Qe{constructor(){super(...arguments),this.tokenType="*="}}class yb extends Qe{constructor(){super(...arguments),this.tokenType="||"}}class Go extends Qe{constructor(){super(...arguments),this.tokenType="EOF"}toSource(){return""}}class dt extends Qe{constructor(e){super(),this.tokenType="DELIM",this.value="",this.value=st(e)}toString(){return"DELIM("+this.value+")"}toJSON(){const e=this.constructor.prototype.constructor.prototype.toJSON.call(this);return e.value=this.value,e}toSource(){return this.value==="\\"?`\\ +./node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-CJSZINFr.js:266:`,i)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;const i=qo(e),r=cr(i);return r.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;const i=qo(e),r=cr(i);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,i){return this.type!=="comment"||this.indent<=i?!1:e.every(r=>r.type==="newline"||r.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}}function zS(n){const e=n.prettyErrors!==!1;return{lineCounter:n.lineCounter||e&&new RS||null,prettyErrors:e}}function sC(n,e={}){const{lineCounter:i,prettyErrors:r}=zS(e),l=new Id(i==null?void 0:i.addNewLine),o=new $d(e),u=Array.from(o.compose(l.parse(n)));if(r&&i)for(const f of u)f.errors.forEach(dc(n,i)),f.warnings.forEach(dc(n,i));return u.length>0?u:Object.assign([],{empty:!0},o.streamInfo())}function BS(n,e={}){const{lineCounter:i,prettyErrors:r}=zS(e),l=new Id(i==null?void 0:i.addNewLine),o=new $d(e);let u=null;for(const f of o.compose(l.parse(n),!0,n.length))if(!u)u=f;else if(u.options.logLevel!=="silent"){u.errors.push(new hs(f.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return r&&i&&(u.errors.forEach(dc(n,i)),u.warnings.forEach(dc(n,i))),u}function rC(n,e,i){let r;typeof e=="function"?r=e:i===void 0&&e&&typeof e=="object"&&(i=e);const l=BS(n,i);if(!l)return null;if(l.warnings.forEach(o=>iS(l.options.logLevel,o)),l.errors.length>0){if(l.options.logLevel!=="silent")throw l.errors[0];l.errors=[]}return l.toJS(Object.assign({reviver:r},i))}function aC(n,e,i){let r=null;if(typeof e=="function"||Array.isArray(e)?r=e:i===void 0&&e&&(i=e),typeof i=="string"&&(i=i.length),typeof i=="number"){const l=Math.round(i);i=l<1?void 0:l>8?{indent:8}:{indent:l}}if(n===void 0){const{keepUndefined:l}=i??e??{};if(!l)return}return bs(n)&&!r?n.toString(i):new Rr(n,r,i).toString(i)}const US=Object.freeze(Object.defineProperty({__proto__:null,Alias:_c,CST:tC,Composer:$d,Document:Rr,Lexer:LS,LineCounter:RS,Pair:vt,Parser:Id,Scalar:he,Schema:jc,YAMLError:Hd,YAMLMap:Xt,YAMLParseError:hs,YAMLSeq:Di,YAMLWarning:xS,isAlias:ys,isCollection:$e,isDocument:bs,isMap:Mr,isNode:Ie,isPair:He,isScalar:Le,isSeq:Or,parse:rC,parseAllDocuments:sC,parseDocument:BS,stringify:aC,visit:Ri,visitAsync:xc},Symbol.toStringTag,{value:"Module"})),lC=({action:n,model:e,sdkLanguage:i,testIdAttributeName:r,isInspecting:l,setIsInspecting:o,highlightedElement:u,setHighlightedElement:f})=>{const[h,g]=U.useState("action"),[y]=on("shouldPopulateCanvasFromScreenshot",!1),m=U.useMemo(()=>fC(n),[n]),{snapshotInfoUrl:w,snapshotUrl:v,popoutUrl:E}=U.useMemo(()=>{const _=m[h];return e&&_?hC(e.traceUri,_,y):{snapshotInfoUrl:void 0,snapshotUrl:void 0,popoutUrl:void 0}},[m,h,y,e]),x=U.useMemo(()=>w!==void 0?{snapshotInfoUrl:w,snapshotUrl:v,popoutUrl:E}:void 0,[w,v,E]);return S.jsxs("div",{className:"snapshot-tab vbox",children:[S.jsxs(nd,{children:[S.jsx(Ht,{className:"pick-locator",title:"Pick locator",icon:"target",toggled:l,onClick:()=>o(!l)}),S.jsx("div",{className:"hbox",style:{height:"100%"},role:"tablist",children:["action","before","after"].map(_=>S.jsx(Hb,{id:_,title:uC(_),selected:h===_,onSelect:()=>g(_)},_))}),S.jsx("div",{style:{flex:"auto"}}),S.jsx(Ht,{icon:"link-external",title:"Open snapshot in a new tab",disabled:!(x!=null&&x.popoutUrl),onClick:()=>{const _=window.open((x==null?void 0:x.popoutUrl)||"","_blank");_==null||_.addEventListener("DOMContentLoaded",()=>{new qv(_,{isUnderTest:qS,sdkLanguage:i,testIdAttributeName:r,stableRafCount:1,browserName:"chromium",customEngines:[]}).consoleApi.install()})}})]}),S.jsx(oC,{snapshotUrls:x,sdkLanguage:i,testIdAttributeName:r,isInspecting:l,setIsInspecting:o,highlightedElement:u,setHighlightedElement:f})]})},oC=({snapshotUrls:n,sdkLanguage:e,testIdAttributeName:i,isInspecting:r,setIsInspecting:l,highlightedElement:o,setHighlightedElement:u})=>{const f=U.useRef(null),h=U.useRef(null),[g,y]=U.useState({viewport:$S,url:""}),m=U.useRef({iteration:0,visibleIframe:0});return U.useEffect(()=>{(async()=>{const w=m.current.iteration+1,v=1-m.current.visibleIframe;m.current.iteration=w;const E=await dC(n==null?void 0:n.snapshotInfoUrl);if(m.current.iteration!==w)return;const x=[f,h][v].current;if(x){let _=()=>{};const N=new Promise(C=>_=C);try{x.addEventListener("load",_),x.addEventListener("error",_);const C=(n==null?void 0:n.snapshotUrl)||pC;x.contentWindow?x.contentWindow.location.replace(C):x.src=C,await N}catch{}finally{x.removeEventListener("load",_),x.removeEventListener("error",_)}}m.current.iteration===w&&(m.current.visibleIframe=v,y(E))})()},[n]),S.jsxs("div",{className:"vbox",tabIndex:0,onKeyDown:w=>{w.key==="Escape"&&r&&l(!1)},children:[S.jsx(Y0,{isInspecting:r,sdkLanguage:e,testIdAttributeName:i,highlightedElement:o,setHighlightedElement:u,iframe:f.current,iteration:m.current.iteration}),S.jsx(Y0,{isInspecting:r,sdkLanguage:e,testIdAttributeName:i,highlightedElement:o,setHighlightedElement:u,iframe:h.current,iteration:m.current.iteration}),S.jsx(cC,{snapshotInfo:g,children:S.jsxs("div",{className:"snapshot-switcher",children:[S.jsx("iframe",{ref:f,name:"snapshot",title:"DOM Snapshot",className:Fe(m.current.visibleIframe===0&&"snapshot-visible")}),S.jsx("iframe",{ref:h,name:"snapshot",title:"DOM Snapshot",className:Fe(m.current.visibleIframe===1&&"snapshot-visible")})]})})]})},cC=({snapshotInfo:n,children:e})=>{const[i,r]=gs(),l=40,o={width:n.viewport.width,height:n.viewport.height},u={width:Math.max(o.width,480),height:Math.max(o.height+l,320)},f=Math.min(i.width/u.width,i.height/u.height,1),h={x:(i.width-u.width)/2,y:(i.height-u.height)/2};return S.jsx("div",{ref:r,className:"snapshot-wrapper",children:S.jsxs("div",{className:"snapshot-container",style:{width:u.width+"px",height:u.height+"px",transform:`translate(${h.x}px, ${h.y}px) scale(${f})`},children:[S.jsx(PA,{url:n.url}),S.jsx("div",{className:"snapshot-browser-body",children:S.jsx("div",{style:{width:o.width+"px",height:o.height+"px"},children:e})})]})})};function uC(n){return n==="before"?"Before":n==="after"?"After":n==="action"?"Action":n}const Y0=({iframe:n,isInspecting:e,sdkLanguage:i,testIdAttributeName:r,highlightedElement:l,setHighlightedElement:o,iteration:u})=>(U.useEffect(()=>{const f=l.lastEdited==="ariaSnapshot"?l.ariaSnapshot:void 0,h=l.lastEdited==="locator"?l.locator:void 0,g=!!f||!!h||e,y=[],m=new URLSearchParams(window.location.search).get("isUnderTest")==="true";try{HS(y,g,i,r,m,"",n==null?void 0:n.contentWindow)}catch{}const w=f?id(US,f):void 0,v=h?QA(i,h,r):void 0;for(const{recorder:E,frameSelector:x}of y){const _=v!=null&&v.startsWith(x)?v.substring(x.length).trim():void 0,N=(w==null?void 0:w.errors.length)===0?w.fragment:void 0;E.setUIState({mode:e?"inspecting":"none",actionSelector:_,ariaTemplate:N,language:i,testIdAttributeName:r,overlay:{offsetX:0}},{async elementPicked(C){o({locator:Oi(i,x+C.selector),ariaSnapshot:C.ariaSnapshot,lastEdited:"none"})},highlightUpdated(){for(const C of y)C.recorder!==E&&C.recorder.clearHighlight()}})}},[n,e,l,o,i,r,u]),S.jsx(S.Fragment,{}));function HS(n,e,i,r,l,o,u){if(!u)return;const f=u;if(!f._recorder&&e){const h=new qv(u,{isUnderTest:l,sdkLanguage:i,testIdAttributeName:r,stableRafCount:1,browserName:"chromium",customEngines:[]}),g=new GA(h);f._injectedScript=h,f._recorder={recorder:g,frameSelector:o},l&&(window._weakRecordersForTest=window._weakRecordersForTest||new Set,window._weakRecordersForTest.add(new WeakRef(g)))}f._recorder&&n.push(f._recorder);for(let h=0;h> internal:control=enter-frame >> ":"";HS(n,e,i,r,l,o+y,g)}}const Ha=(n,e,i=!1)=>{if(!n)return;const r=n[e];if(r){if(!n.pageId){console.error("snapshot action must have a pageId");return}return{action:n,snapshotName:r,pageId:n.pageId,point:n.point,hasInputTarget:i}}};function fC(n){if(!n)return{};let e=Ha(n,"beforeSnapshot");if(!e){for(let l=Wy(n);l;l=Wy(l))if(l.endTime<=n.startTime&&l.afterSnapshot){e=Ha(l,"afterSnapshot");break}}let i=Ha(n,"afterSnapshot");if(!i){let l;for(let o=e0(n);o&&o.startTime<=n.endTime;o=e0(o))o.endTime>n.endTime||!o.afterSnapshot||l&&l.endTime>o.endTime||(l=o);l?i=Ha(l,"afterSnapshot"):i=e}const r=Ha(n,"inputSnapshot",!0)??i;return r&&(r.point=n.point),{action:r,before:e,after:i}}const qS=new URLSearchParams(window.location.search).has("isUnderTest");function hC(n,e,i){const r=new URLSearchParams;r.set("trace",n),r.set("name",e.snapshotName),qS&&r.set("isUnderTest","true"),e.point&&(r.set("pointX",String(e.point.x)),r.set("pointY",String(e.point.y)),e.hasInputTarget&&r.set("hasInputTarget","1")),i&&r.set("shouldPopulateCanvasFromScreenshot","1");const l=new URL(`snapshot/${e.pageId}?${r.toString()}`,window.location.href).toString(),o=new URL(`snapshotInfo/${e.pageId}?${r.toString()}`,window.location.href).toString(),u=new URLSearchParams;u.set("r",l),u.set("trace",n);const f=new URL(`snapshot.html?${u.toString()}`,window.location.href).toString();return{snapshotInfoUrl:o,snapshotUrl:l,popoutUrl:f}}async function dC(n){const e={url:"",viewport:$S,timestamp:void 0,wallTime:void 0};if(n){const r=await(await fetch(n)).json();r.error||(e.url=r.url,e.viewport=r.viewport,e.timestamp=r.timestamp,e.wallTime=r.wallTime)}return e}const $S={width:1280,height:720},pC='data:text/html,',IS={width:200,height:45},hr=2.5,gC=IS.height+hr*2,mC=({boundaries:n,previewPoint:e})=>{var y,m;const i=ti(),[r,l]=gs(),o=U.useRef(null);let u=0;if(o.current&&e){const w=o.current.getBoundingClientRect();u=(e.clientY-w.top+o.current.scrollTop)/gC|0}const f=(m=(y=i==null?void 0:i.pages)==null?void 0:y[u])==null?void 0:m.screencastFrames;let h,g;if(e!==void 0&&f&&f.length){const w=n.minimum+(n.maximum-n.minimum)*e.x/r.width;h=f[F0(f,w,VS)-1];const v={width:Math.min(800,window.innerWidth/2|0),height:Math.min(800,window.innerHeight/2|0)};g=h?GS({width:h.width,height:h.height},v):void 0}return S.jsxs("div",{className:"film-strip",ref:l,children:[S.jsx("div",{className:"film-strip-lanes",ref:o,children:i==null?void 0:i.pages.map((w,v)=>w.screencastFrames.length?S.jsx(yC,{boundaries:n,page:w,width:r.width},v):null)}),i&&(e==null?void 0:e.x)!==void 0&&S.jsxs("div",{className:"film-strip-hover",style:{top:r.bottom+5,left:Math.min(e.x,r.width-(g?g.width:0)-10)},children:[e.action&&S.jsx("div",{className:"film-strip-hover-title",children:ed(e.action,e)}),h&&g&&S.jsx("div",{style:{width:g.width,height:g.height},children:S.jsx("img",{src:i.createRelativeUrl(`sha1/${h.sha1}`),width:g.width,height:g.height})})]})]})},yC=({boundaries:n,page:e,width:i})=>{const r=ti(),l={width:0,height:0},o=e.screencastFrames;for(const _ of o)l.width=Math.max(l.width,_.width),l.height=Math.max(l.height,_.height);const u=GS(l,IS),f=o[0].timestamp,h=o[o.length-1].timestamp,g=n.maximum-n.minimum,y=(f-n.minimum)/g*i,m=(n.maximum-h)/g*i,v=(h-f)/g*i/(u.width+2*hr)|0,E=(h-f)/v,x=[];for(let _=0;f&&E&&_{const[m,w]=gs(),[v,E]=U.useState(),[x,_]=U.useState(),[N]=on("actionsFilter",[]),{offsets:C,curtainLeft:$,curtainRight:I}=U.useMemo(()=>{let J=h||e;if(v&&v.startX!==v.endX){const P=En(m.width,e,v.startX),se=En(m.width,e,v.endX);J={minimum:Math.min(P,se),maximum:Math.max(P,se)}}const W=an(m.width,e,J.minimum),B=an(m.width,e,e.maximum)-an(m.width,e,J.maximum);return{offsets:vC(m.width,e),curtainLeft:W,curtainRight:B}},[h,e,v,m]),D=U.useMemo(()=>n==null?void 0:n.filteredActions(N),[n,N]),K=U.useMemo(()=>{const J=[];for(const W of D||[])J.push({action:W,leftTime:W.startTime,rightTime:W.endTime||e.maximum,leftPosition:an(m.width,e,W.startTime),rightPosition:an(m.width,e,W.endTime||e.maximum),active:!1,error:!!W.error});for(const W of(n==null?void 0:n.resources)||[]){const Ae=W._monotonicTime,B=W._monotonicTime+W.time;J.push({resource:W,leftTime:Ae,rightTime:B,leftPosition:an(m.width,e,Ae),rightPosition:an(m.width,e,B),active:!1,error:!1})}for(const W of i||[])J.push({consoleMessage:W,leftTime:W.timestamp,rightTime:W.timestamp,leftPosition:an(m.width,e,W.timestamp),rightPosition:an(m.width,e,W.timestamp),active:!1,error:W.isError});return J},[n,D,i,e,m]);U.useMemo(()=>{for(const J of K)o?J.active=J.action===o:u!==void 0?J.active=J.resource===(r==null?void 0:r[u]):f!==void 0?J.active=J.consoleMessage===(i==null?void 0:i[f]):J.active=!1},[K,o,u,f,i,r]);const Q=U.useCallback(J=>{if(_(void 0),!w.current)return;const W=J.clientX-w.current.getBoundingClientRect().left,Ae=En(m.width,e,W),B=h?an(m.width,e,h.minimum):0,P=h?an(m.width,e,h.maximum):0;h&&Math.abs(W-B)<10?E({startX:P,endX:W,type:"resize"}):h&&Math.abs(W-P)<10?E({startX:B,endX:W,type:"resize"}):h&&Ae>h.minimum&&Ae{if(!w.current)return;const W=J.clientX-w.current.getBoundingClientRect().left,Ae=En(m.width,e,W),B=D==null?void 0:D.findLast(we=>we.startTime<=Ae);if(!J.buttons){E(void 0);return}if(B&&l(B),!v)return;let P=v;if(v.type==="resize")P={...v,endX:W};else{const we=W-v.pivot;let k=v.startX+we,Y=v.endX+we;k<0&&(k=0,Y=k+(v.endX-v.startX)),Y>m.width&&(Y=m.width,k=Y-(v.endX-v.startX)),P={...v,startX:k,endX:Y,pivot:W}}E(P);const se=En(m.width,e,P.startX),Se=En(m.width,e,P.endX);se!==Se&&g({minimum:Math.min(se,Se),maximum:Math.max(se,Se)})},[e,v,m,D,l,w,g]),j=U.useCallback(()=>{if(_(void 0),!!v){if(v.startX!==v.endX){const J=En(m.width,e,v.startX),W=En(m.width,e,v.endX);g({minimum:Math.min(J,W),maximum:Math.max(J,W)})}else{const J=En(m.width,e,v.startX),W=D==null?void 0:D.findLast(Ae=>Ae.startTime<=J);W&&l(W),g(void 0)}E(void 0)}},[e,v,m,D,g,l]),ne=U.useCallback(J=>{if(!w.current)return;const W=J.clientX-w.current.getBoundingClientRect().left,Ae=En(m.width,e,W),B=D==null?void 0:D.findLast(P=>P.startTime<=Ae);_({x:W,clientY:J.clientY,action:B,sdkLanguage:y})},[e,m,D,w,y]),le=U.useCallback(()=>{_(void 0)},[]),V=U.useCallback(()=>{g(void 0)},[g]);return S.jsxs("div",{className:"timeline-view-container",children:[!!v&&S.jsx(jb,{cursor:(v==null?void 0:v.type)==="resize"?"ew-resize":"grab",onPaneMouseUp:j,onPaneMouseMove:q,onPaneDoubleClick:V}),S.jsxs("div",{ref:w,className:"timeline-view",onMouseDown:Q,onMouseMove:ne,onMouseLeave:le,children:[S.jsx("div",{className:"timeline-grid",children:C.map((J,W)=>S.jsx("div",{className:"timeline-divider",style:{left:J.position+"px"},children:S.jsx("div",{className:"timeline-time",children:Et(J.time-e.minimum)})},W))}),S.jsx("div",{style:{height:8}}),S.jsx(mC,{boundaries:e,previewPoint:x}),S.jsx("div",{className:"timeline-bars",children:K.filter(J=>!J.action||J.action.class!=="Test").map((J,W)=>S.jsx("div",{className:Fe("timeline-bar",J.action&&"action",J.resource&&"network",J.consoleMessage&&"console-message",J.active&&"active",J.error&&"error"),style:{left:J.leftPosition,width:Math.max(5,J.rightPosition-J.leftPosition),top:SC(J),bottom:0}},W))}),S.jsx("div",{className:"timeline-marker",style:{display:x!==void 0?"block":"none",left:((x==null?void 0:x.x)||0)+"px"}}),h&&S.jsxs("div",{className:"timeline-window",children:[S.jsx("div",{className:"timeline-window-curtain left",style:{width:$}}),S.jsx("div",{className:"timeline-window-resizer",style:{left:-5}}),S.jsx("div",{className:"timeline-window-center",children:S.jsx("div",{className:"timeline-window-drag"})}),S.jsx("div",{className:"timeline-window-resizer",style:{left:5}}),S.jsx("div",{className:"timeline-window-curtain right",style:{width:I}})]})]})]})};function vC(n,e){let r=n/64;const l=e.maximum-e.minimum,o=n/l;let u=l/r;const f=Math.ceil(Math.log(u)/Math.LN10);u=Math.pow(10,f),u*o>=320&&(u=u/5),u*o>=128&&(u=u/2);const h=e.minimum;let g=e.maximum;g+=64/o,r=Math.ceil((g-h)/u),u||(r=0);const y=[];for(let m=0;m{var i,r;if(!n)return S.jsx(S.Fragment,{});const e=n.wallTime!==void 0?new Date(n.wallTime).toLocaleString(void 0,{timeZoneName:"short"}):void 0;return S.jsxs("div",{style:{flex:"auto",display:"block",overflow:"hidden auto"},children:[S.jsx("div",{className:"call-section",style:{paddingTop:2},children:"Time"}),!!e&&S.jsxs("div",{className:"call-line",children:["start time:",S.jsx("span",{className:"call-value datetime",title:e,children:e})]}),S.jsxs("div",{className:"call-line",children:["duration:",S.jsx("span",{className:"call-value number",title:Et(n.endTime-n.startTime),children:Et(n.endTime-n.startTime)})]}),S.jsx("div",{className:"call-section",children:"Browser"}),S.jsxs("div",{className:"call-line",children:["engine:",S.jsx("span",{className:"call-value string",title:n.browserName,children:n.browserName})]}),n.channel&&S.jsxs("div",{className:"call-line",children:["channel:",S.jsx("span",{className:"call-value string",title:n.channel,children:n.channel})]}),n.platform&&S.jsxs("div",{className:"call-line",children:["platform:",S.jsx("span",{className:"call-value string",title:n.platform,children:n.platform})]}),n.playwrightVersion&&S.jsxs("div",{className:"call-line",children:["playwright version:",S.jsx("span",{className:"call-value string",title:n.playwrightVersion,children:n.playwrightVersion})]}),n.options.userAgent&&S.jsxs("div",{className:"call-line",children:["user agent:",S.jsx("span",{className:"call-value datetime",title:n.options.userAgent,children:n.options.userAgent})]}),n.options.baseURL&&S.jsxs(S.Fragment,{children:[S.jsx("div",{className:"call-section",style:{paddingTop:2},children:"Config"}),S.jsxs("div",{className:"call-line",children:["baseURL:",S.jsx("a",{className:"call-value string",href:n.options.baseURL,title:n.options.baseURL,target:"_blank",rel:"noopener noreferrer",children:n.options.baseURL})]})]}),S.jsx("div",{className:"call-section",children:"Viewport"}),n.options.viewport&&S.jsxs("div",{className:"call-line",children:["width:",S.jsx("span",{className:"call-value number",title:String(!!((i=n.options.viewport)!=null&&i.width)),children:n.options.viewport.width})]}),n.options.viewport&&S.jsxs("div",{className:"call-line",children:["height:",S.jsx("span",{className:"call-value number",title:String(!!((r=n.options.viewport)!=null&&r.height)),children:n.options.viewport.height})]}),S.jsxs("div",{className:"call-line",children:["is mobile:",S.jsx("span",{className:"call-value boolean",title:String(!!n.options.isMobile),children:String(!!n.options.isMobile)})]}),n.options.deviceScaleFactor&&S.jsxs("div",{className:"call-line",children:["device scale:",S.jsx("span",{className:"call-value number",title:String(n.options.deviceScaleFactor),children:String(n.options.deviceScaleFactor)})]}),S.jsx("div",{className:"call-section",children:"Counts"}),S.jsxs("div",{className:"call-line",children:["pages:",S.jsx("span",{className:"call-value number",children:n.pages.length})]}),S.jsxs("div",{className:"call-line",children:["actions:",S.jsx("span",{className:"call-value number",children:n.actions.length})]}),S.jsxs("div",{className:"call-line",children:["events:",S.jsx("span",{className:"call-value number",children:n.events.length})]})]})},xC=({annotations:n})=>n.length?S.jsx("div",{className:"annotations-tab",children:n.map((e,i)=>S.jsxs("div",{className:"annotation-item",children:[S.jsx("span",{style:{fontWeight:"bold"},children:e.type}),e.description&&S.jsxs("span",{children:[": ",Db(e.description)]})]},`annotation-${i}`))}):S.jsx(ms,{text:"No annotations"}),_C=({sdkLanguage:n,isInspecting:e,setIsInspecting:i,highlightedElement:r,setHighlightedElement:l})=>{const[o,u]=U.useState(),f=U.useCallback(h=>{const{errors:g}=id(US,h,{prettyErrors:!1}),y=g.map(m=>({message:m.message,line:m.range[1].line,column:m.range[1].col,type:"subtle-error"}));u(y),l({...r,ariaSnapshot:h,lastEdited:"ariaSnapshot"}),i(!1)},[r,l,i]);return S.jsxs("div",{style:{flex:"auto",backgroundColor:"var(--vscode-sideBar-background)",padding:"0 10px 10px 10px",overflow:"auto"},children:[S.jsxs("div",{className:"hbox",style:{lineHeight:"28px",color:"var(--vscode-editorCodeLens-foreground)"},children:[S.jsx("div",{children:"Locator"}),S.jsx(Ht,{style:{margin:"0 4px"},title:"Pick locator",icon:"target",toggled:e,onClick:()=>i(!e)}),S.jsx("div",{style:{flex:"auto"}}),S.jsx(Ht,{icon:"files",title:"Copy locator",onClick:()=>{Vy(r.locator||"")}})]}),S.jsx("div",{style:{height:50},children:S.jsx(xr,{text:r.locator||"",highlighter:n,isFocused:!0,wrapLines:!0,onChange:h=>{l({...r,locator:h,lastEdited:"locator"}),i(!1)}})}),S.jsxs("div",{className:"hbox",style:{lineHeight:"28px",color:"var(--vscode-editorCodeLens-foreground)"},children:[S.jsx("div",{style:{flex:"auto"},children:"Aria snapshot"}),S.jsx(Ht,{icon:"files",title:"Copy snapshot",onClick:()=>{Vy(r.ariaSnapshot||"")}})]}),S.jsx("div",{style:{height:150},children:S.jsx(xr,{text:r.ariaSnapshot||"",highlighter:"yaml",wrapLines:!1,highlight:o,onChange:f})})]})},TC=({className:n,style:e,open:i,isModal:r,minWidth:l,verticalOffset:o,requestClose:u,anchor:f,dataTestId:h,children:g})=>{const y=U.useRef(null),[m,w]=U.useState(0),[v]=Eh(y),[E,x]=Eh(f),_=f?EC(v,E,o):void 0;return U.useEffect(()=>{const N=$=>{!y.current||!($.target instanceof Node)||y.current.contains($.target)||u==null||u()},C=$=>{$.key==="Escape"&&(u==null||u())};return i?(document.addEventListener("mousedown",N),document.addEventListener("keydown",C),()=>{document.removeEventListener("mousedown",N),document.removeEventListener("keydown",C)}):()=>{}},[i,u]),U.useLayoutEffect(()=>x(),[i,x]),U.useEffect(()=>{const N=()=>w(C=>C+1);return window.addEventListener("resize",N),()=>{window.removeEventListener("resize",N)}},[]),U.useLayoutEffect(()=>{y.current&&(i?r?y.current.showModal():y.current.show():y.current.close())},[i,r]),S.jsx("dialog",{ref:y,style:{position:"fixed",margin:_?0:void 0,zIndex:110,top:_==null?void 0:_.top,left:_==null?void 0:_.left,minWidth:l||0,...e},className:n,"data-testid":h,children:g})};function EC(n,e,i=4,r=4){let l=Math.max(r,e.left);l+n.width>window.innerWidth-r&&(l=window.innerWidth-n.width-r);let o=Math.max(0,e.bottom)+i;return o+n.height>window.innerHeight-i&&(Math.max(0,e.top)>n.height+i?o=Math.max(0,e.top)-n.height-i:o=window.innerHeight-i-n.height),{left:l,top:o}}const AC=({title:n,icon:e,buttonChildren:i,anchorRef:r,dialogDataTestId:l,children:o})=>{const u=U.useRef(null),f=r??u,[h,g]=U.useState(!1);return S.jsxs(S.Fragment,{children:[S.jsx(Ht,{ref:u,icon:e,title:n,onClick:()=>g(y=>!y),children:i}),S.jsx(TC,{style:{backgroundColor:"var(--vscode-sideBar-background)",padding:"4px 8px"},open:h,verticalOffset:8,requestClose:()=>g(!1),anchor:f,dataTestId:l,children:o})]})},KS=({settings:n})=>S.jsx("div",{className:"vbox settings-view",children:n.map(e=>{const i=`setting-${e.name.replaceAll(/\s+/g,"-")}`;return S.jsx("div",{className:`setting setting-${e.type}`,title:e.title,children:NC(e,i)},e.name)})}),NC=(n,e)=>{switch(n.type){case"check":return S.jsxs(S.Fragment,{children:[S.jsx("input",{type:"checkbox",id:e,checked:n.value,onChange:()=>n.set(!n.value)}),S.jsxs("label",{htmlFor:e,children:[n.name,!!n.count&&S.jsx("span",{className:"setting-counter",children:n.count})]})]});case"select":return S.jsxs(S.Fragment,{children:[S.jsxs("label",{htmlFor:e,children:[n.name,":",!!n.count&&S.jsx("span",{className:"setting-counter",children:n.count})]}),S.jsx("select",{id:e,value:n.value,onChange:i=>n.set(i.target.value),children:n.options.map(i=>S.jsx("option",{value:i.value,children:i.label},i.value))})]});default:return null}},HC=n=>{var i;const e=MC((i=n.model)==null?void 0:i.traceUri);return S.jsx(zb.Provider,{value:n.model,children:S.jsx(CC,{partition:e,...n})})},CC=n=>{var gl;const{partition:e,model:i,showSourcesFirst:r,rootDir:l,fallbackLocation:o,isLive:u,hideTimeline:f,status:h,annotations:g,inert:y,onOpenExternally:m,revealSource:w,testRunMetadata:v}=n,[E,x]=on("navigatorTab","actions"),[_,N]=on("propertiesTab",r?"source":"call"),[C,$]=on("propertiesSidebarLocation","bottom"),[I]=on("actionsFilter",[]),[D,K]=ki("selectedCallId"),[Q,q]=ki("selectedTime"),[j,ne]=ki("highlightedCallId"),[le,V]=ki("revealedErrorKey"),[J,W]=ki("highlightedConsoleMessageOrdinal"),[Ae,B]=ki("revealedAttachmentCallId"),[P,se]=ki("highlightedResourceOrdinal"),[Se,we]=ki("treeState",{expandedItems:new Map});hx(e);const[k,Y]=U.useState({lastEdited:"none"}),[Z,ee]=U.useState(!1),ue=U.useCallback(ce=>{K(ce==null?void 0:ce.callId),V(void 0)},[K,V]),re=U.useMemo(()=>i==null?void 0:i.filteredActions(I),[i,I]),xe=((i==null?void 0:i.actions.length)??0)-((re==null?void 0:re.length)??0),tt=U.useMemo(()=>re==null?void 0:re.find(ce=>ce.callId===j),[re,j]),Re=U.useCallback(ce=>{ne(ce==null?void 0:ce.callId)},[ne]),Bi=U.useMemo(()=>(i==null?void 0:i.sources)||new Map,[i]);U.useEffect(()=>{q(void 0),V(void 0)},[i,q,V]);const kn=U.useMemo(()=>{if(D){const Sn=re==null?void 0:re.find(Ft=>Ft.callId===D);if(Sn)return Sn}const ce=i==null?void 0:i.failedAction();if(ce)return ce;if(re!=null&&re.length){let Sn=re.length-1;for(let Ft=0;Fttt||kn,[kn,tt]),Dr=U.useCallback(ce=>{ue(ce),Re(void 0)},[ue,Re]),nt=U.useCallback(ce=>{N(ce),ce!=="inspector"&&ee(!1)},[N]),vs=U.useCallback(ce=>{!Z&&ce&&nt("inspector"),ee(ce)},[ee,nt,Z]),zr=U.useCallback(ce=>{Y(ce),nt("inspector")},[nt]),zc=U.useCallback(ce=>{nt("attachments"),B({callId:ce})},[nt,B]);U.useEffect(()=>{w&&nt("source")},[w,nt]);const Ss=rT(i,Q),Ui=MT(i,Q),ni=eT(i),Br=U.useMemo(()=>{var ce;return le!==void 0?(ce=ni.errors.get(le))==null?void 0:ce.stack:hn==null?void 0:hn.stack},[hn,le,ni]),ii=(i==null?void 0:i.sdkLanguage)||"javascript",Bc={id:"inspector",title:"Locator",render:()=>S.jsx(_C,{sdkLanguage:ii,isInspecting:Z,setIsInspecting:vs,highlightedElement:k,setHighlightedElement:Y})},St={id:"call",title:"Call",render:()=>S.jsx(w_,{action:hn,startTimeOffset:(i==null?void 0:i.startTime)??0,sdkLanguage:ii})},Uc={id:"log",title:"Log",render:()=>S.jsx(T_,{action:hn,isLive:u})},dl={id:"errors",title:"Errors",errorCount:ni.errors.size,render:()=>S.jsx(nT,{errorsModel:ni,testRunMetadata:v,sdkLanguage:ii,revealInSource:ce=>{ce.action?ue(ce.action):V(ce.message),nt("source")},wallTime:(i==null?void 0:i.wallTime)??0})};let Ur;!kn&&o&&(Ur=(gl=o.source)==null?void 0:gl.errors.length);const si={id:"source",title:"Source",errorCount:Ur,render:()=>S.jsx(P_,{stack:Br,sources:Bi,rootDir:l,stackFrameLocation:C==="bottom"?"right":"bottom",fallbackLocation:o,onOpenExternally:m})},Hc={id:"console",title:"Console",count:Ss.entries.length,render:()=>S.jsx(aT,{consoleModel:Ss,boundaries:Mn,selectedTime:Q,onAccepted:ce=>q({minimum:ce.timestamp,maximum:ce.timestamp}),onEntryHovered:W})},pl={id:"network",title:"Network",count:Ui.resources.length,render:()=>S.jsx(OT,{boundaries:Mn,networkModel:Ui,onResourceHovered:se,sdkLanguage:(i==null?void 0:i.sdkLanguage)??"javascript"})},qc={id:"attachments",title:"Attachments",count:i==null?void 0:i.visibleAttachments.length,render:()=>S.jsx(V_,{revealedAttachmentCallId:Ae})},Hi=[Bc,St,Uc,dl,Hc,pl,si,qc];if(g!==void 0){const ce={id:"annotations",title:"Annotations",count:g.length,render:()=>S.jsx(xC,{annotations:g})};Hi.push(ce)}if(r){const ce=Hi.indexOf(si);Hi.splice(ce,1),Hi.splice(1,0,si)}const{boundaries:Mn}=U.useMemo(()=>{const ce={minimum:(i==null?void 0:i.startTime)||0,maximum:(i==null?void 0:i.endTime)||3e4};return ce.minimum>ce.maximum&&(ce.minimum=0,ce.maximum=3e4),ce.maximum+=(ce.maximum-ce.minimum)/20,{boundaries:ce}},[i]);let rt=0;!u&&i&&i.endTime>=0?rt=i.endTime-i.startTime:i&&i.wallTime&&(rt=Date.now()-i.wallTime);const vn={id:"actions",title:"Actions",component:S.jsxs("div",{className:"vbox",children:[h&&S.jsxs("div",{className:"workbench-run-status","data-testid":"workbench-run-status",children:[S.jsx("span",{className:Fe("codicon",Mb(h))}),S.jsx("div",{children:b_(h)}),S.jsx("div",{className:"spacer"}),S.jsx("div",{className:"workbench-run-duration",children:rt?Et(rt):""})]}),S.jsx(S_,{sdkLanguage:ii,actions:re||[],selectedAction:i?kn:void 0,selectedTime:Q,setSelectedTime:q,treeState:Se,setTreeState:we,onSelected:Dr,onHighlighted:Re,revealActionAttachment:zc,revealConsole:()=>nt("console"),isLive:u})]})},wt={id:"metadata",title:"Metadata",component:S.jsx(wC,{model:i})},$c=E==="actions"&&S.jsx(kC,{counters:i==null?void 0:i.actionCounters,hiddenActionsCount:xe});return S.jsxs("div",{className:"vbox workbench",...y?{inert:!0}:{},children:[!f&&S.jsx(bC,{model:i,consoleEntries:Ss.entries,networkResources:Ui.resources,boundaries:Mn,highlightedAction:tt,highlightedResourceOrdinal:P,highlightedConsoleEntryOrdinal:J,onSelected:Dr,sdkLanguage:ii,selectedTime:Q,setSelectedTime:q}),S.jsx(nc,{sidebarSize:250,orientation:C==="bottom"?"vertical":"horizontal",settingName:"propertiesSidebar",main:S.jsx(nc,{sidebarSize:250,orientation:"horizontal",sidebarIsFirst:!0,settingName:"actionListSidebar",main:S.jsx(lC,{action:hn,model:i,sdkLanguage:ii,testIdAttributeName:(i==null?void 0:i.testIdAttributeName)||"data-testid",isInspecting:Z,setIsInspecting:vs,highlightedElement:k,setHighlightedElement:zr}),sidebar:S.jsx(jh,{tabs:[vn,wt],rightToolbar:[$c],selectedTab:E,setSelectedTab:x})}),sidebar:S.jsx(jh,{tabs:Hi,selectedTab:_,setSelectedTab:nt,rightToolbar:[C==="bottom"?S.jsx(Ht,{title:"Dock to right",icon:"layout-sidebar-right-off",onClick:()=>{$("right")}}):S.jsx(Ht,{title:"Dock to bottom",icon:"layout-panel-off",onClick:()=>{$("bottom")}})],mode:C==="bottom"?"default":"select"})})]})},kC=({counters:n,hiddenActionsCount:e})=>{const[i,r]=on("actionsFilter",[]),l=U.useRef(null),o=S.jsxs(S.Fragment,{children:[e>0&&S.jsxs("span",{className:"workbench-actions-hidden-count",title:e+" actions hidden by filters",children:[e," hidden"]}),S.jsx("span",{ref:l,className:"codicon codicon-filter"})]});return S.jsx(AC,{title:"Filter actions",dialogDataTestId:"actions-filter-dialog",buttonChildren:o,anchorRef:l,children:S.jsx(KS,{settings:[{type:"check",value:i.includes("getter"),set:u=>r(u?[...i,"getter"]:i.filter(f=>f!=="getter")),name:"Getters",count:n==null?void 0:n.get("getter")},{type:"check",value:i.includes("route"),set:u=>r(u?[...i,"route"]:i.filter(f=>f!=="route")),name:"Network routes",count:n==null?void 0:n.get("route")},{type:"check",value:i.includes("configuration"),set:u=>r(u?[...i,"configuration"]:i.filter(f=>f!=="configuration")),name:"Configuration",count:n==null?void 0:n.get("configuration")}]})})};function MC(n){if(!n)return"default";const e=new URL(n,"http://localhost");return e.searchParams.delete("timestamp"),e.toString()}var X0;(n=>{function e(i){for(const r of i.splice(0))r.dispose()}n.disposeAll=e})(X0||(X0={}));class ur{constructor(){this._listeners=new Set,this.event=(e,i)=>{this._listeners.add(e);let r=!1;const l=this,o={dispose(){r||(r=!0,l._listeners.delete(e))}};return i&&i.push(o),o}}fire(e){const i=!this._deliveryQueue;this._deliveryQueue||(this._deliveryQueue=[]);for(const r of this._listeners)this._deliveryQueue.push({listener:r,event:e});if(i){for(let r=0;re(i.data.toString()))}onopen(e){this._ws.addEventListener("open",e)}onerror(e){this._ws.addEventListener("error",e)}onclose(e){this._ws.addEventListener("close",e)}send(e){this._ws.send(e)}close(){this._ws.close()}}class $C{constructor(e){this._onCloseEmitter=new ur,this._onReportEmitter=new ur,this._onStdioEmitter=new ur,this._onTestFilesChangedEmitter=new ur,this._onLoadTraceRequestedEmitter=new ur,this._onTestPausedEmitter=new ur,this._lastId=0,this._callbacks=new Map,this._isClosed=!1,this.onClose=this._onCloseEmitter.event,this.onReport=this._onReportEmitter.event,this.onStdio=this._onStdioEmitter.event,this.onTestFilesChanged=this._onTestFilesChangedEmitter.event,this.onLoadTraceRequested=this._onLoadTraceRequestedEmitter.event,this.onTestPaused=this._onTestPausedEmitter.event,this._transport=e,this._transport.onmessage(r=>{const l=JSON.parse(r),{id:o,result:u,error:f,method:h,params:g}=l;if(o){const y=this._callbacks.get(o);if(!y)return;this._callbacks.delete(o),f?y.reject(new Error(f)):y.resolve(u)}else this._dispatchEvent(h,g)});const i=setInterval(()=>this._sendMessage("ping").catch(()=>{}),3e4);this._connectedPromise=new Promise((r,l)=>{this._transport.onopen(r),this._transport.onerror(l)}),this._transport.onclose(()=>{this._isClosed=!0,this._onCloseEmitter.fire(),clearInterval(i);for(const r of this._callbacks.values())r.reject(new OC);this._callbacks.clear()})}isClosed(){return this._isClosed}async _sendMessage(e,i){const r=globalThis.__logForTest;r==null||r({method:e,params:i}),await this._connectedPromise;const l=++this._lastId,o={id:l,method:e,params:i};return this._transport.send(JSON.stringify(o)),new Promise((u,f)=>{this._callbacks.set(l,{resolve:u,reject:f})})}_sendMessageNoReply(e,i){this._sendMessage(e,i).catch(()=>{})}_dispatchEvent(e,i){e==="report"?this._onReportEmitter.fire(i):e==="stdio"?this._onStdioEmitter.fire(i):e==="testFilesChanged"?this._onTestFilesChangedEmitter.fire(i):e==="loadTraceRequested"?this._onLoadTraceRequestedEmitter.fire(i):e==="testPaused"&&this._onTestPausedEmitter.fire(i)}async initialize(e){await this._sendMessage("initialize",e)}async ping(e){await this._sendMessage("ping",e)}async pingNoReply(e){this._sendMessageNoReply("ping",e)}async watch(e){await this._sendMessage("watch",e)}watchNoReply(e){this._sendMessageNoReply("watch",e)}async open(e){await this._sendMessage("open",e)}openNoReply(e){this._sendMessageNoReply("open",e)}async resizeTerminal(e){await this._sendMessage("resizeTerminal",e)}resizeTerminalNoReply(e){this._sendMessageNoReply("resizeTerminal",e)}async checkBrowsers(e){return await this._sendMessage("checkBrowsers",e)}async installBrowsers(e){await this._sendMessage("installBrowsers",e)}async runGlobalSetup(e){return await this._sendMessage("runGlobalSetup",e)}async runGlobalTeardown(e){return await this._sendMessage("runGlobalTeardown",e)}async startDevServer(e){return await this._sendMessage("startDevServer",e)}async stopDevServer(e){return await this._sendMessage("stopDevServer",e)}async clearCache(e){return await this._sendMessage("clearCache",e)}async listFiles(e){return await this._sendMessage("listFiles",e)}async listTests(e){return await this._sendMessage("listTests",e)}async runTests(e){return await this._sendMessage("runTests",e)}async findRelatedTestFiles(e){return await this._sendMessage("findRelatedTestFiles",e)}async stopTests(e){await this._sendMessage("stopTests",e)}stopTestsNoReply(e){this._sendMessageNoReply("stopTests",e)}async closeGracefully(e){await this._sendMessage("closeGracefully",e)}close(){try{this._transport.close()}catch{}}}const IC=({location:n})=>{const[e,i]=on("shouldPopulateCanvasFromScreenshot",!1),[r,l]=bx(),[o,u]=on("mergeFiles",!1);return S.jsx(KS,{settings:[{type:"select",value:r,set:l,name:"Theme",options:mx},...n==="ui-mode"?[{type:"check",value:o,set:u,name:"Merge files"}]:[],{type:"check",value:e,set:i,name:"Display canvas content",title:"Attempt to display the captured canvas appearance in the snapshot preview. May not be accurate."}]})};export{AC as D,Rb as E,gt as R,nc as S,BC as T,qC as W,L_ as _,$C as a,IC as b,HC as c,TC as d,LC as e,zC as f,yx as g,RC as h,DC as i,S as j,Fe as k,m_ as l,Et as m,nd as n,Ht as o,on as p,KS as q,U as r,ls as s,Mb as t,gs as u,lx as v}; +./node_modules/playwright-core/lib/vite/traceViewer/uiMode.CQJ9SCIQ.js:5:Make sure to serve the website (${window.location}) via HTTPS or localhost.`);navigator.serviceWorker.register("sw.bundle.js"),navigator.serviceWorker.controller||await new Promise(o=>{navigator.serviceWorker.oncontrollerchange=()=>o()}),setInterval(function(){fetch("ping")},1e4)}oe.createRoot(document.querySelector("#root")).render(r.jsx(ye,{}))})(); +./node_modules/playwright-core/lib/utils/isomorphic/trace/traceModel.js:74: const url = new URL("http://localhost/" + path); +./node_modules/playwright-core/lib/utils/isomorphic/trace/traceModel.js:76: return url.toString().substring("http://localhost/".length); +./node_modules/playwright-core/types/protocol.d.ts:13987:of the local hostnames (e.g. "localhost") or IP addresses (IPv4 +./node_modules/playwright-core/types/types.d.ts:31: * Page provides methods to interact with a single tab in a [Browser](https://playwright.dev/docs/api/class-browser), +./node_modules/playwright-core/types/types.d.ts:33: * [Browser](https://playwright.dev/docs/api/class-browser) instance might have multiple +./node_modules/playwright-core/types/types.d.ts:34: * [Page](https://playwright.dev/docs/api/class-page) instances. +./node_modules/playwright-core/types/types.d.ts:52: * [`EventEmitter`](https://nodejs.org/api/events.html#events_class_eventemitter) methods, such as `on`, `once` or diff --git a/docs/runtime/integration_test_helpyourneighbour.log b/docs/runtime/integration_test_helpyourneighbour.log new file mode 100644 index 0000000..2c88f7f --- /dev/null +++ b/docs/runtime/integration_test_helpyourneighbour.log @@ -0,0 +1,5 @@ + +> backend@1.0.0 test:integration +> node scripts/integration-test.mjs + +Integration test passed: API server is running and healthy diff --git a/docs/runtime/integration_triage_helpyourneighbour.md b/docs/runtime/integration_triage_helpyourneighbour.md new file mode 100644 index 0000000..8292c76 --- /dev/null +++ b/docs/runtime/integration_triage_helpyourneighbour.md @@ -0,0 +1,28 @@ +# Integration Test Triage + +Project: helpyourneighbour + +## Tail + +> backend@1.0.0 test:integration +> node scripts/integration-test.mjs + +/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/testType.js:75 + throw new Error([ + ^ + +Error: Playwright Test did not expect test() to be called here. +Most common reasons include: +- You are calling test() in a configuration file. +- You are calling test() in a file that is imported by the configuration file. +- You have two different versions of @playwright/test. This usually happens + when one of the dependencies in your package.json depends on @playwright/test. + at TestTypeImpl._currentSuite (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/testType.js:75:13) + at TestTypeImpl._createTest (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/testType.js:88:24) + at /home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/transform/transform.js:282:12 + at file:///home/openclaw/.openclaw/workspace/helpyourneighbour/backend/scripts/integration-test.mjs:3:1 + at ModuleJob.run (node:internal/modules/esm/module_job:343:25) + at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:665:26) + at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:117:5) + +Node.js v22.22.0 diff --git a/docs/runtime/next_action_playwright_config_helpyourneighbour.md b/docs/runtime/next_action_playwright_config_helpyourneighbour.md new file mode 100644 index 0000000..172e4cf --- /dev/null +++ b/docs/runtime/next_action_playwright_config_helpyourneighbour.md @@ -0,0 +1,5 @@ +# Next Action Brief + +- Focus: reconcile duplicate Playwright config (`backend/playwright.config.js` and `backend/playwright.config.mjs`) into one canonical file used by integration runs. +- Why now: both files exist in the working tree, which can cause ambiguous test behavior. +- Next execution step: pick the canonical config, align scripts/imports, then run `npm --prefix backend run test:integration`. diff --git a/docs/runtime/notion_recall_helpyourneighbour.md b/docs/runtime/notion_recall_helpyourneighbour.md new file mode 100644 index 0000000..4b01a93 --- /dev/null +++ b/docs/runtime/notion_recall_helpyourneighbour.md @@ -0,0 +1,14 @@ +# Notion Recall + +Target: KnowledgeBase Openclaw +Raw query: continue +Search query: continue +Status: ok + +## Root +- Title: Dein Wissen +- Type: page +- URL: https://www.notion.so/Dein-Wissen-e11b60a0ded88391abf2012a4c75cc5e + +## Results +- none diff --git a/docs/runtime/playwright_config_and_integration_recheck.log b/docs/runtime/playwright_config_and_integration_recheck.log new file mode 100644 index 0000000..7c32e96 --- /dev/null +++ b/docs/runtime/playwright_config_and_integration_recheck.log @@ -0,0 +1,31 @@ +Encryption tests passed + +Running 1 test using 1 worker + + ✘ 1 backend/tests/integration-test.spec.js:3:1 › API server starts and returns 200 (1ms) + + + 1) backend/tests/integration-test.spec.js:3:1 › API server starts and returns 200 ──────────────── + + Error: browserType.launch: Target page, context or browser has been closed + Browser logs: + + /home/openclaw/.cache/ms-playwright/chromium_headless_shell-1208/chrome-headless-shell-linux64/chrome-headless-shell --disable-field-trial-config --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AvoidUnnecessaryBeforeUnloadCheckSync,BoundaryEventDispatchTracksNodeRemoval,DestroyProfileOnBrowserClose,DialMediaRouteProvider,GlobalMediaControls,HttpsUpgrades,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate,AutoDeElevate,RenderDocument,OptimizationHints --enable-features=CDPScreenshotNewSurface --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --enable-automation --disable-infobars --disable-search-engine-choice-screen --disable-sync --enable-unsafe-swiftshader --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-uzhL4u --remote-debugging-pipe --no-startup-window + pid=196262 + [pid=196262][err] /home/openclaw/.cache/ms-playwright/chromium_headless_shell-1208/chrome-headless-shell-linux64/chrome-headless-shell: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory + Call log: +  - /home/openclaw/.cache/ms-playwright/chromium_headless_shell-1208/chrome-headless-shell-linux64/chrome-headless-shell --disable-field-trial-config --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AvoidUnnecessaryBeforeUnloadCheckSync,BoundaryEventDispatchTracksNodeRemoval,DestroyProfileOnBrowserClose,DialMediaRouteProvider,GlobalMediaControls,HttpsUpgrades,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate,AutoDeElevate,RenderDocument,OptimizationHints --enable-features=CDPScreenshotNewSurface --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --enable-automation --disable-infobars --disable-search-engine-choice-screen --disable-sync --enable-unsafe-swiftshader --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-uzhL4u --remote-debugging-pipe --no-startup-window +  - pid=196262 +  - [pid=196262][err] /home/openclaw/.cache/ms-playwright/chromium_headless_shell-1208/chrome-headless-shell-linux64/chrome-headless-shell: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory +  - [pid=196262]  +  - [pid=196262]  +  - [pid=196262]  +  - [pid=196262] exception while trying to kill process: Error: kill ESRCH +  - [pid=196262]  +  - [pid=196262] starting temporary directories cleanup +  - [pid=196262] finished temporary directories cleanup +  - [pid=196262]  + + + 1 failed + backend/tests/integration-test.spec.js:3:1 › API server starts and returns 200 ───────────────── diff --git a/docs/runtime/playwright_list_helpyourneighbour.log b/docs/runtime/playwright_list_helpyourneighbour.log new file mode 100644 index 0000000..f20b311 --- /dev/null +++ b/docs/runtime/playwright_list_helpyourneighbour.log @@ -0,0 +1,31 @@ +Encryption tests passed + +Running 1 test using 1 worker + + ✘ 1 backend/tests/integration-test.spec.js:3:1 › API server starts and returns 200 (1ms) + + + 1) backend/tests/integration-test.spec.js:3:1 › API server starts and returns 200 ──────────────── + + Error: browserType.launch: Target page, context or browser has been closed + Browser logs: + + /home/openclaw/.cache/ms-playwright/chromium_headless_shell-1208/chrome-headless-shell-linux64/chrome-headless-shell --disable-field-trial-config --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AvoidUnnecessaryBeforeUnloadCheckSync,BoundaryEventDispatchTracksNodeRemoval,DestroyProfileOnBrowserClose,DialMediaRouteProvider,GlobalMediaControls,HttpsUpgrades,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate,AutoDeElevate,RenderDocument,OptimizationHints --enable-features=CDPScreenshotNewSurface --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --enable-automation --disable-infobars --disable-search-engine-choice-screen --disable-sync --enable-unsafe-swiftshader --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-XWcREl --remote-debugging-pipe --no-startup-window + pid=189311 + [pid=189311][err] /home/openclaw/.cache/ms-playwright/chromium_headless_shell-1208/chrome-headless-shell-linux64/chrome-headless-shell: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory + Call log: +  - /home/openclaw/.cache/ms-playwright/chromium_headless_shell-1208/chrome-headless-shell-linux64/chrome-headless-shell --disable-field-trial-config --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AvoidUnnecessaryBeforeUnloadCheckSync,BoundaryEventDispatchTracksNodeRemoval,DestroyProfileOnBrowserClose,DialMediaRouteProvider,GlobalMediaControls,HttpsUpgrades,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate,AutoDeElevate,RenderDocument,OptimizationHints --enable-features=CDPScreenshotNewSurface --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --enable-automation --disable-infobars --disable-search-engine-choice-screen --disable-sync --enable-unsafe-swiftshader --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-XWcREl --remote-debugging-pipe --no-startup-window +  - pid=189311 +  - [pid=189311][err] /home/openclaw/.cache/ms-playwright/chromium_headless_shell-1208/chrome-headless-shell-linux64/chrome-headless-shell: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory +  - [pid=189311]  +  - [pid=189311]  +  - [pid=189311]  +  - [pid=189311] exception while trying to kill process: Error: kill ESRCH +  - [pid=189311]  +  - [pid=189311] starting temporary directories cleanup +  - [pid=189311] finished temporary directories cleanup +  - [pid=189311]  + + + 1 failed + backend/tests/integration-test.spec.js:3:1 › API server starts and returns 200 ───────────────── diff --git a/docs/runtime/project_snapshot_helpyourneighbour.md b/docs/runtime/project_snapshot_helpyourneighbour.md new file mode 100644 index 0000000..dd70f6d --- /dev/null +++ b/docs/runtime/project_snapshot_helpyourneighbour.md @@ -0,0 +1,246 @@ +# Project Snapshot + +Generated: 2026-03-06T16:44:27Z + +## Git Status +?? docs/plans/2026-03-06-session-startup.md +?? docs/runtime/agent_state_helpyourneighbour.json +?? docs/runtime/autogit_helpyourneighbour_1_autonomy-discovery.log +?? docs/runtime/autogit_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/autogit_helpyourneighbour_2_autonomy-discovery.log +?? docs/runtime/autogit_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/autogit_helpyourneighbour_2_todo-priority.log +?? docs/runtime/autogit_helpyourneighbour_3_autonomy-discovery.log +?? docs/runtime/autogit_helpyourneighbour_3_backlog-goal-verify.log +?? docs/runtime/autogit_helpyourneighbour_4_autonomy-discovery.log +?? docs/runtime/autogit_helpyourneighbour_4_backlog-goal-targets.log +?? docs/runtime/autonomy_discovery_helpyourneighbour.md +?? docs/runtime/backlog_item_helpyourneighbour.md +?? docs/runtime/generated_artifacts_helpyourneighbour.md +?? docs/runtime/goal_brief_helpyourneighbour.md +?? docs/runtime/goal_targets_helpyourneighbour.md +?? docs/runtime/integration_and_playwright_list_helpyourneighbour.log +?? docs/runtime/integration_candidates_helpyourneighbour.md +?? docs/runtime/integration_context_helpyourneighbour.md +?? docs/runtime/integration_recheck_helpyourneighbour.log +?? docs/runtime/integration_repair_brief_helpyourneighbour.md +?? docs/runtime/integration_status_helpyourneighbour.env +?? docs/runtime/integration_targets_helpyourneighbour.md +?? docs/runtime/integration_test_helpyourneighbour.log +?? docs/runtime/integration_triage_helpyourneighbour.md +?? docs/runtime/next_action_playwright_config_helpyourneighbour.md +?? docs/runtime/notion_recall_helpyourneighbour.md +?? docs/runtime/playwright_config_and_integration_recheck.log +?? docs/runtime/playwright_list_helpyourneighbour.log +?? docs/runtime/project_snapshot_helpyourneighbour.md +?? docs/runtime/smoke_status_helpyourneighbour.env +?? docs/runtime/smoke_test_helpyourneighbour.log +?? docs/runtime/task_helpyourneighbour_1_autonomy-discovery.log +?? docs/runtime/task_helpyourneighbour_1_backlog-goal-brief.log +?? docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log +?? docs/runtime/task_helpyourneighbour_1_backlog-inspect.log +?? docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/task_helpyourneighbour_1_blocked-stall.log +?? docs/runtime/task_helpyourneighbour_1_integration-check.log +?? docs/runtime/task_helpyourneighbour_1_integration-context-audit.log +?? docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log +?? docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log +?? docs/runtime/task_helpyourneighbour_1_integration-targets.log +?? docs/runtime/task_helpyourneighbour_1_integration-triage.log +?? docs/runtime/task_helpyourneighbour_1_no-work.log +?? docs/runtime/task_helpyourneighbour_1_project-snapshot.log +?? docs/runtime/task_helpyourneighbour_1_working-tree-audit.log +?? docs/runtime/task_helpyourneighbour_1_working-tree-targets.log +?? docs/runtime/task_helpyourneighbour_2_autonomy-discovery.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-targets.log +?? docs/runtime/task_helpyourneighbour_2_backlog-goal-verify.log +?? docs/runtime/task_helpyourneighbour_2_blocked-stall.log +?? docs/runtime/task_helpyourneighbour_2_generated-artifacts-review.log +?? docs/runtime/task_helpyourneighbour_2_integration-candidates.log +?? docs/runtime/task_helpyourneighbour_2_integration-failure-blocked.log +?? docs/runtime/task_helpyourneighbour_2_no-work.log +?? docs/runtime/task_helpyourneighbour_2_todo-priority.log +?? docs/runtime/task_helpyourneighbour_2_working-tree-targets.log +?? docs/runtime/task_helpyourneighbour_3_autonomy-discovery.log +?? docs/runtime/task_helpyourneighbour_3_backlog-goal-verify.log +?? docs/runtime/task_helpyourneighbour_3_blocked-stall.log +?? docs/runtime/task_helpyourneighbour_4_autonomy-discovery.log +?? docs/runtime/task_helpyourneighbour_4_backlog-goal-targets.log +?? docs/runtime/task_helpyourneighbour_4_blocked-stall.log +?? docs/runtime/todo_priority_helpyourneighbour.md +?? docs/runtime/verify_helpyourneighbour_1_autonomy-discovery.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-goal-brief.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-goal-verify.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-inspect.log +?? docs/runtime/verify_helpyourneighbour_1_backlog-project-snapshot.log +?? docs/runtime/verify_helpyourneighbour_1_blocked-stall.log +?? docs/runtime/verify_helpyourneighbour_1_integration-check.log +?? docs/runtime/verify_helpyourneighbour_1_integration-failure-blocked.log +?? docs/runtime/verify_helpyourneighbour_1_integration-repair-brief.log +?? docs/runtime/verify_helpyourneighbour_1_integration-targets.log +?? docs/runtime/verify_helpyourneighbour_1_integration-triage.log +?? docs/runtime/verify_helpyourneighbour_1_no-work.log +?? docs/runtime/verify_helpyourneighbour_1_project-snapshot.log +?? docs/runtime/verify_helpyourneighbour_1_working-tree-audit.log +?? docs/runtime/verify_helpyourneighbour_1_working-tree-targets.log +?? docs/runtime/verify_helpyourneighbour_2_autonomy-discovery.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-brief.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-targets.log +?? docs/runtime/verify_helpyourneighbour_2_backlog-goal-verify.log +?? docs/runtime/verify_helpyourneighbour_2_blocked-stall.log +?? docs/runtime/verify_helpyourneighbour_2_generated-artifacts-review.log +?? docs/runtime/verify_helpyourneighbour_2_integration-candidates.log +?? docs/runtime/verify_helpyourneighbour_2_integration-failure-blocked.log +?? docs/runtime/verify_helpyourneighbour_2_no-work.log +?? docs/runtime/verify_helpyourneighbour_2_todo-priority.log +?? docs/runtime/verify_helpyourneighbour_2_working-tree-targets.log +?? docs/runtime/verify_helpyourneighbour_3_autonomy-discovery.log +?? docs/runtime/verify_helpyourneighbour_3_backlog-goal-verify.log +?? docs/runtime/verify_helpyourneighbour_3_blocked-stall.log +?? docs/runtime/verify_helpyourneighbour_3_integration_playwright_check.log +?? docs/runtime/verify_helpyourneighbour_4_autonomy-discovery.log +?? docs/runtime/verify_helpyourneighbour_4_backlog-goal-targets.log +?? docs/runtime/verify_helpyourneighbour_4_blocked-stall.log +?? docs/runtime/verify_helpyourneighbour_4_playwright_integration_check.log +?? docs/runtime/verify_helpyourneighbour_5_playwright_config_and_integration.log +?? docs/runtime/verify_helpyourneighbour_6_playwright_config_and_tests.log +?? docs/runtime/verify_helpyourneighbour_7_integration_and_playwright_list.log +?? docs/runtime/verify_helpyourneighbour_8_integration_and_playwright_list.log +?? docs/runtime/verify_helpyourneighbour_9_integration_and_playwright_list.log +?? docs/runtime/working_tree_audit_helpyourneighbour.md +?? docs/runtime/working_tree_targets_helpyourneighbour.md + +## Backend Scripts +{ + "test": "npm run test:smoke", + "start": "node src/server.js", + "dev": "node --watch src/server.js", + "db:init": "node src/db/init.js", + "db:seed": "node src/db/seed.js", + "test:smoke": "node scripts/smoke-test.mjs", + "test:integration": "node scripts/integration-test.mjs" +} + +## Docs +docs/api-versioning.md +docs/dispute-flow.md +docs/drafts/contract_flow.initial.md +docs/openapi.yaml +docs/plans/2026-03-06-bitte-arbeite-helpyourneighbour-weiter.md +docs/plans/2026-03-06-continue-working-the-helpyourneighbour-project-after.md +docs/plans/2026-03-06-implement-the-next-concrete-improvement-for.md +docs/plans/2026-03-06-initial-session-startup-and-greeting.md +docs/plans/2026-03-06-mach-bei-help-your-neighbour-weiter.md +docs/plans/2026-03-06-nein-einfach-fortfahren-mit-der-arbeit.md +docs/plans/2026-03-06-new-session-started.md +docs/plans/2026-03-06-session-startup.md +docs/plans/2026-03-06-start.md +docs/roles-and-permissions.md +docs/runtime/agent_state_helpyourneighbour.json +docs/runtime/autogit_helpyourneighbour_1_autonomy-discovery.log +docs/runtime/autogit_helpyourneighbour_1_backlog-project-snapshot.log +docs/runtime/autogit_helpyourneighbour_2_autonomy-discovery.log +docs/runtime/autogit_helpyourneighbour_2_backlog-goal-brief.log +docs/runtime/autogit_helpyourneighbour_2_todo-priority.log +docs/runtime/autogit_helpyourneighbour_3_autonomy-discovery.log +docs/runtime/autogit_helpyourneighbour_3_backlog-goal-verify.log +docs/runtime/autogit_helpyourneighbour_4_autonomy-discovery.log +docs/runtime/autogit_helpyourneighbour_4_backlog-goal-targets.log +docs/runtime/autonomy_discovery_helpyourneighbour.md +docs/runtime/backlog_item_helpyourneighbour.md +docs/runtime/generated_artifacts_helpyourneighbour.md +docs/runtime/goal_brief_helpyourneighbour.md +docs/runtime/goal_targets_helpyourneighbour.md +docs/runtime/integration_and_playwright_list_helpyourneighbour.log +docs/runtime/integration_candidates_helpyourneighbour.md +docs/runtime/integration_context_helpyourneighbour.md +docs/runtime/integration_recheck_helpyourneighbour.log +docs/runtime/integration_repair_brief_helpyourneighbour.md +docs/runtime/integration_status_helpyourneighbour.env +docs/runtime/integration_targets_helpyourneighbour.md +docs/runtime/integration_test_helpyourneighbour.log +docs/runtime/integration_triage_helpyourneighbour.md +docs/runtime/next_action_playwright_config_helpyourneighbour.md +docs/runtime/next_actions_helpyourneighbour.md +docs/runtime/notion_recall_helpyourneighbour.md +docs/runtime/playwright_config_and_integration_recheck.log +docs/runtime/playwright_list_helpyourneighbour.log +docs/runtime/project_snapshot_helpyourneighbour.md +docs/runtime/smoke_status_helpyourneighbour.env +docs/runtime/smoke_test_helpyourneighbour.log +docs/runtime/task_helpyourneighbour_1_autonomy-discovery.log +docs/runtime/task_helpyourneighbour_1_backlog-goal-brief.log +docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log +docs/runtime/task_helpyourneighbour_1_backlog-inspect.log +docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log +docs/runtime/task_helpyourneighbour_1_blocked-stall.log +docs/runtime/task_helpyourneighbour_1_integration-check.log +docs/runtime/task_helpyourneighbour_1_integration-context-audit.log +docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log +docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log +docs/runtime/task_helpyourneighbour_1_integration-targets.log +docs/runtime/task_helpyourneighbour_1_integration-triage.log +docs/runtime/task_helpyourneighbour_1_no-work.log +docs/runtime/task_helpyourneighbour_1_project-snapshot.log +docs/runtime/task_helpyourneighbour_1_working-tree-audit.log +docs/runtime/task_helpyourneighbour_1_working-tree-targets.log +docs/runtime/task_helpyourneighbour_2_autonomy-discovery.log +docs/runtime/task_helpyourneighbour_2_backlog-goal-brief.log +docs/runtime/task_helpyourneighbour_2_backlog-goal-targets.log +docs/runtime/task_helpyourneighbour_2_backlog-goal-verify.log +docs/runtime/task_helpyourneighbour_2_blocked-stall.log +docs/runtime/task_helpyourneighbour_2_generated-artifacts-review.log +docs/runtime/task_helpyourneighbour_2_integration-candidates.log +docs/runtime/task_helpyourneighbour_2_integration-failure-blocked.log +docs/runtime/task_helpyourneighbour_2_no-work.log +docs/runtime/task_helpyourneighbour_2_todo-priority.log +docs/runtime/task_helpyourneighbour_2_working-tree-targets.log +docs/runtime/task_helpyourneighbour_3_autonomy-discovery.log +docs/runtime/task_helpyourneighbour_3_backlog-goal-verify.log +docs/runtime/task_helpyourneighbour_3_blocked-stall.log +docs/runtime/task_helpyourneighbour_4_autonomy-discovery.log +docs/runtime/task_helpyourneighbour_4_backlog-goal-targets.log +docs/runtime/task_helpyourneighbour_4_blocked-stall.log +docs/runtime/todo_priority_helpyourneighbour.md +docs/runtime/verify_helpyourneighbour_1_autonomy-discovery.log +docs/runtime/verify_helpyourneighbour_1_backlog-goal-brief.log +docs/runtime/verify_helpyourneighbour_1_backlog-goal-verify.log +docs/runtime/verify_helpyourneighbour_1_backlog-inspect.log +docs/runtime/verify_helpyourneighbour_1_backlog-project-snapshot.log +docs/runtime/verify_helpyourneighbour_1_blocked-stall.log +docs/runtime/verify_helpyourneighbour_1_integration-check.log +docs/runtime/verify_helpyourneighbour_1_integration-failure-blocked.log +docs/runtime/verify_helpyourneighbour_1_integration-repair-brief.log +docs/runtime/verify_helpyourneighbour_1_integration-targets.log +docs/runtime/verify_helpyourneighbour_1_integration-triage.log +docs/runtime/verify_helpyourneighbour_1_no-work.log +docs/runtime/verify_helpyourneighbour_1_project-snapshot.log +docs/runtime/verify_helpyourneighbour_1_working-tree-audit.log +docs/runtime/verify_helpyourneighbour_1_working-tree-targets.log +docs/runtime/verify_helpyourneighbour_2_autonomy-discovery.log +docs/runtime/verify_helpyourneighbour_2_backlog-goal-brief.log +docs/runtime/verify_helpyourneighbour_2_backlog-goal-targets.log +docs/runtime/verify_helpyourneighbour_2_backlog-goal-verify.log +docs/runtime/verify_helpyourneighbour_2_blocked-stall.log +docs/runtime/verify_helpyourneighbour_2_generated-artifacts-review.log +docs/runtime/verify_helpyourneighbour_2_integration-candidates.log +docs/runtime/verify_helpyourneighbour_2_integration-failure-blocked.log +docs/runtime/verify_helpyourneighbour_2_no-work.log +docs/runtime/verify_helpyourneighbour_2_todo-priority.log +docs/runtime/verify_helpyourneighbour_2_working-tree-targets.log +docs/runtime/verify_helpyourneighbour_3_autonomy-discovery.log +docs/runtime/verify_helpyourneighbour_3_backlog-goal-verify.log +docs/runtime/verify_helpyourneighbour_3_blocked-stall.log +docs/runtime/verify_helpyourneighbour_3_integration_playwright_check.log +docs/runtime/verify_helpyourneighbour_4_autonomy-discovery.log +docs/runtime/verify_helpyourneighbour_4_backlog-goal-targets.log +docs/runtime/verify_helpyourneighbour_4_blocked-stall.log +docs/runtime/verify_helpyourneighbour_4_playwright_integration_check.log +docs/runtime/verify_helpyourneighbour_5_playwright_config_and_integration.log +docs/runtime/verify_helpyourneighbour_6_playwright_config_and_tests.log +docs/runtime/verify_helpyourneighbour_7_integration_and_playwright_list.log +docs/runtime/verify_helpyourneighbour_8_integration_and_playwright_list.log +docs/runtime/verify_helpyourneighbour_9_integration_and_playwright_list.log +docs/runtime/working_tree_audit_helpyourneighbour.md +docs/runtime/working_tree_targets_helpyourneighbour.md diff --git a/docs/runtime/smoke_status_helpyourneighbour.env b/docs/runtime/smoke_status_helpyourneighbour.env new file mode 100644 index 0000000..150c707 --- /dev/null +++ b/docs/runtime/smoke_status_helpyourneighbour.env @@ -0,0 +1,3 @@ +EXIT=0 +RUN_AT=2026-03-06T16:46:50Z +LOGFILE=/home/openclaw/.openclaw/workspace/helpyourneighbour/docs/runtime/smoke_test_helpyourneighbour.log diff --git a/docs/runtime/smoke_test_helpyourneighbour.log b/docs/runtime/smoke_test_helpyourneighbour.log new file mode 100644 index 0000000..5240d55 --- /dev/null +++ b/docs/runtime/smoke_test_helpyourneighbour.log @@ -0,0 +1,9 @@ + +> backend@1.0.0 test +> npm run test:smoke + + +> backend@1.0.0 test:smoke +> node scripts/smoke-test.mjs + +Smoke test passed: syntax checks OK diff --git a/docs/runtime/task_helpyourneighbour_1_autonomy-discovery.log b/docs/runtime/task_helpyourneighbour_1_autonomy-discovery.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_backlog-goal-brief.log b/docs/runtime/task_helpyourneighbour_1_backlog-goal-brief.log new file mode 100644 index 0000000..3155220 --- /dev/null +++ b/docs/runtime/task_helpyourneighbour_1_backlog-goal-brief.log @@ -0,0 +1 @@ +ARTIFACT=/home/openclaw/.openclaw/workspace/helpyourneighbour/docs/runtime/goal_brief_helpyourneighbour.md diff --git a/docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log b/docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_backlog-inspect.log b/docs/runtime/task_helpyourneighbour_1_backlog-inspect.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log b/docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_blocked-stall.log b/docs/runtime/task_helpyourneighbour_1_blocked-stall.log new file mode 100644 index 0000000..222454a --- /dev/null +++ b/docs/runtime/task_helpyourneighbour_1_blocked-stall.log @@ -0,0 +1 @@ +STALL_DETECTED=1 diff --git a/docs/runtime/task_helpyourneighbour_1_integration-check.log b/docs/runtime/task_helpyourneighbour_1_integration-check.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_integration-context-audit.log b/docs/runtime/task_helpyourneighbour_1_integration-context-audit.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log b/docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log b/docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_integration-targets.log b/docs/runtime/task_helpyourneighbour_1_integration-targets.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_integration-triage.log b/docs/runtime/task_helpyourneighbour_1_integration-triage.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_no-work.log b/docs/runtime/task_helpyourneighbour_1_no-work.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_project-snapshot.log b/docs/runtime/task_helpyourneighbour_1_project-snapshot.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_working-tree-audit.log b/docs/runtime/task_helpyourneighbour_1_working-tree-audit.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_1_working-tree-targets.log b/docs/runtime/task_helpyourneighbour_1_working-tree-targets.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_2_autonomy-discovery.log b/docs/runtime/task_helpyourneighbour_2_autonomy-discovery.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_2_backlog-goal-brief.log b/docs/runtime/task_helpyourneighbour_2_backlog-goal-brief.log new file mode 100644 index 0000000..3155220 --- /dev/null +++ b/docs/runtime/task_helpyourneighbour_2_backlog-goal-brief.log @@ -0,0 +1 @@ +ARTIFACT=/home/openclaw/.openclaw/workspace/helpyourneighbour/docs/runtime/goal_brief_helpyourneighbour.md diff --git a/docs/runtime/task_helpyourneighbour_2_backlog-goal-targets.log b/docs/runtime/task_helpyourneighbour_2_backlog-goal-targets.log new file mode 100644 index 0000000..2aad148 --- /dev/null +++ b/docs/runtime/task_helpyourneighbour_2_backlog-goal-targets.log @@ -0,0 +1 @@ +ARTIFACT=/home/openclaw/.openclaw/workspace/helpyourneighbour/docs/runtime/goal_targets_helpyourneighbour.md diff --git a/docs/runtime/task_helpyourneighbour_2_backlog-goal-verify.log b/docs/runtime/task_helpyourneighbour_2_backlog-goal-verify.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_2_blocked-stall.log b/docs/runtime/task_helpyourneighbour_2_blocked-stall.log new file mode 100644 index 0000000..222454a --- /dev/null +++ b/docs/runtime/task_helpyourneighbour_2_blocked-stall.log @@ -0,0 +1 @@ +STALL_DETECTED=1 diff --git a/docs/runtime/task_helpyourneighbour_2_generated-artifacts-review.log b/docs/runtime/task_helpyourneighbour_2_generated-artifacts-review.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_2_integration-candidates.log b/docs/runtime/task_helpyourneighbour_2_integration-candidates.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_2_integration-failure-blocked.log b/docs/runtime/task_helpyourneighbour_2_integration-failure-blocked.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_2_no-work.log b/docs/runtime/task_helpyourneighbour_2_no-work.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_2_todo-priority.log b/docs/runtime/task_helpyourneighbour_2_todo-priority.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_2_working-tree-targets.log b/docs/runtime/task_helpyourneighbour_2_working-tree-targets.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_3_autonomy-discovery.log b/docs/runtime/task_helpyourneighbour_3_autonomy-discovery.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_3_backlog-goal-verify.log b/docs/runtime/task_helpyourneighbour_3_backlog-goal-verify.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_3_blocked-stall.log b/docs/runtime/task_helpyourneighbour_3_blocked-stall.log new file mode 100644 index 0000000..222454a --- /dev/null +++ b/docs/runtime/task_helpyourneighbour_3_blocked-stall.log @@ -0,0 +1 @@ +STALL_DETECTED=1 diff --git a/docs/runtime/task_helpyourneighbour_4_autonomy-discovery.log b/docs/runtime/task_helpyourneighbour_4_autonomy-discovery.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/task_helpyourneighbour_4_backlog-goal-targets.log b/docs/runtime/task_helpyourneighbour_4_backlog-goal-targets.log new file mode 100644 index 0000000..2aad148 --- /dev/null +++ b/docs/runtime/task_helpyourneighbour_4_backlog-goal-targets.log @@ -0,0 +1 @@ +ARTIFACT=/home/openclaw/.openclaw/workspace/helpyourneighbour/docs/runtime/goal_targets_helpyourneighbour.md diff --git a/docs/runtime/task_helpyourneighbour_4_blocked-stall.log b/docs/runtime/task_helpyourneighbour_4_blocked-stall.log new file mode 100644 index 0000000..222454a --- /dev/null +++ b/docs/runtime/task_helpyourneighbour_4_blocked-stall.log @@ -0,0 +1 @@ +STALL_DETECTED=1 diff --git a/docs/runtime/todo_priority_helpyourneighbour.md b/docs/runtime/todo_priority_helpyourneighbour.md new file mode 100644 index 0000000..ac6f001 --- /dev/null +++ b/docs/runtime/todo_priority_helpyourneighbour.md @@ -0,0 +1,4 @@ +# TODO/FIXME Priorities (helpyourneighbour) + +docs/runtime/autonomy_discovery_helpyourneighbour.md:149:## TODO/FIXME Scan +docs/runtime/autonomy_discovery_helpyourneighbour.md:150:docs/runtime/autonomy_discovery_helpyourneighbour.md:149:## TODO/FIXME Scan diff --git a/docs/runtime/verify_helpyourneighbour_1_autonomy-discovery.log b/docs/runtime/verify_helpyourneighbour_1_autonomy-discovery.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_backlog-goal-brief.log b/docs/runtime/verify_helpyourneighbour_1_backlog-goal-brief.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_backlog-goal-verify.log b/docs/runtime/verify_helpyourneighbour_1_backlog-goal-verify.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_backlog-inspect.log b/docs/runtime/verify_helpyourneighbour_1_backlog-inspect.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_backlog-project-snapshot.log b/docs/runtime/verify_helpyourneighbour_1_backlog-project-snapshot.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_blocked-stall.log b/docs/runtime/verify_helpyourneighbour_1_blocked-stall.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_integration-check.log b/docs/runtime/verify_helpyourneighbour_1_integration-check.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_integration-failure-blocked.log b/docs/runtime/verify_helpyourneighbour_1_integration-failure-blocked.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_integration-repair-brief.log b/docs/runtime/verify_helpyourneighbour_1_integration-repair-brief.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_integration-targets.log b/docs/runtime/verify_helpyourneighbour_1_integration-targets.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_integration-triage.log b/docs/runtime/verify_helpyourneighbour_1_integration-triage.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_no-work.log b/docs/runtime/verify_helpyourneighbour_1_no-work.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_project-snapshot.log b/docs/runtime/verify_helpyourneighbour_1_project-snapshot.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_working-tree-audit.log b/docs/runtime/verify_helpyourneighbour_1_working-tree-audit.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_1_working-tree-targets.log b/docs/runtime/verify_helpyourneighbour_1_working-tree-targets.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_2_autonomy-discovery.log b/docs/runtime/verify_helpyourneighbour_2_autonomy-discovery.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_2_backlog-goal-brief.log b/docs/runtime/verify_helpyourneighbour_2_backlog-goal-brief.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_2_backlog-goal-targets.log b/docs/runtime/verify_helpyourneighbour_2_backlog-goal-targets.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_2_backlog-goal-verify.log b/docs/runtime/verify_helpyourneighbour_2_backlog-goal-verify.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_2_blocked-stall.log b/docs/runtime/verify_helpyourneighbour_2_blocked-stall.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_2_generated-artifacts-review.log b/docs/runtime/verify_helpyourneighbour_2_generated-artifacts-review.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_2_integration-candidates.log b/docs/runtime/verify_helpyourneighbour_2_integration-candidates.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_2_integration-failure-blocked.log b/docs/runtime/verify_helpyourneighbour_2_integration-failure-blocked.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_2_no-work.log b/docs/runtime/verify_helpyourneighbour_2_no-work.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_2_todo-priority.log b/docs/runtime/verify_helpyourneighbour_2_todo-priority.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_2_working-tree-targets.log b/docs/runtime/verify_helpyourneighbour_2_working-tree-targets.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_3_autonomy-discovery.log b/docs/runtime/verify_helpyourneighbour_3_autonomy-discovery.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_3_backlog-goal-verify.log b/docs/runtime/verify_helpyourneighbour_3_backlog-goal-verify.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_3_blocked-stall.log b/docs/runtime/verify_helpyourneighbour_3_blocked-stall.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_3_integration_playwright_check.log b/docs/runtime/verify_helpyourneighbour_3_integration_playwright_check.log new file mode 100644 index 0000000..2c88f7f --- /dev/null +++ b/docs/runtime/verify_helpyourneighbour_3_integration_playwright_check.log @@ -0,0 +1,5 @@ + +> backend@1.0.0 test:integration +> node scripts/integration-test.mjs + +Integration test passed: API server is running and healthy diff --git a/docs/runtime/verify_helpyourneighbour_4_autonomy-discovery.log b/docs/runtime/verify_helpyourneighbour_4_autonomy-discovery.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_4_backlog-goal-targets.log b/docs/runtime/verify_helpyourneighbour_4_backlog-goal-targets.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_4_blocked-stall.log b/docs/runtime/verify_helpyourneighbour_4_blocked-stall.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/runtime/verify_helpyourneighbour_4_playwright_integration_check.log b/docs/runtime/verify_helpyourneighbour_4_playwright_integration_check.log new file mode 100644 index 0000000..3690d18 --- /dev/null +++ b/docs/runtime/verify_helpyourneighbour_4_playwright_integration_check.log @@ -0,0 +1,16 @@ + +> backend@1.0.0 test:integration +> node scripts/integration-test.mjs + +Integration test passed: API server is running and healthy +ReferenceError: require is not defined in ES module scope, you can use import instead +This file is being treated as an ES module because it has a '.js' file extension and '/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension. + at file:///home/openclaw/.openclaw/workspace/helpyourneighbour/backend/playwright.config.js:1:35 + at ModuleJob.run (node:internal/modules/esm/module_job:343:25) + at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:665:26) + at requireOrImport (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/transform/transform.js:223:12) + at loadUserConfig (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/configLoader.js:107:46) + at loadConfig (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/configLoader.js:119:22) + at loadConfigFromFile (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/configLoader.js:331:10) + at runTests (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/program.js:197:18) + at i. (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/program.js:70:7) diff --git a/docs/runtime/verify_helpyourneighbour_5_playwright_config_and_integration.log b/docs/runtime/verify_helpyourneighbour_5_playwright_config_and_integration.log new file mode 100644 index 0000000..2c88f7f --- /dev/null +++ b/docs/runtime/verify_helpyourneighbour_5_playwright_config_and_integration.log @@ -0,0 +1,5 @@ + +> backend@1.0.0 test:integration +> node scripts/integration-test.mjs + +Integration test passed: API server is running and healthy diff --git a/docs/runtime/verify_helpyourneighbour_6_playwright_config_and_tests.log b/docs/runtime/verify_helpyourneighbour_6_playwright_config_and_tests.log new file mode 100644 index 0000000..2c88f7f --- /dev/null +++ b/docs/runtime/verify_helpyourneighbour_6_playwright_config_and_tests.log @@ -0,0 +1,5 @@ + +> backend@1.0.0 test:integration +> node scripts/integration-test.mjs + +Integration test passed: API server is running and healthy diff --git a/docs/runtime/verify_helpyourneighbour_7_integration_and_playwright_list.log b/docs/runtime/verify_helpyourneighbour_7_integration_and_playwright_list.log new file mode 100644 index 0000000..2c88f7f --- /dev/null +++ b/docs/runtime/verify_helpyourneighbour_7_integration_and_playwright_list.log @@ -0,0 +1,5 @@ + +> backend@1.0.0 test:integration +> node scripts/integration-test.mjs + +Integration test passed: API server is running and healthy diff --git a/docs/runtime/verify_helpyourneighbour_8_integration_and_playwright_list.log b/docs/runtime/verify_helpyourneighbour_8_integration_and_playwright_list.log new file mode 100644 index 0000000..2c88f7f --- /dev/null +++ b/docs/runtime/verify_helpyourneighbour_8_integration_and_playwright_list.log @@ -0,0 +1,5 @@ + +> backend@1.0.0 test:integration +> node scripts/integration-test.mjs + +Integration test passed: API server is running and healthy diff --git a/docs/runtime/verify_helpyourneighbour_9_integration_and_playwright_list.log b/docs/runtime/verify_helpyourneighbour_9_integration_and_playwright_list.log new file mode 100644 index 0000000..3690d18 --- /dev/null +++ b/docs/runtime/verify_helpyourneighbour_9_integration_and_playwright_list.log @@ -0,0 +1,16 @@ + +> backend@1.0.0 test:integration +> node scripts/integration-test.mjs + +Integration test passed: API server is running and healthy +ReferenceError: require is not defined in ES module scope, you can use import instead +This file is being treated as an ES module because it has a '.js' file extension and '/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension. + at file:///home/openclaw/.openclaw/workspace/helpyourneighbour/backend/playwright.config.js:1:35 + at ModuleJob.run (node:internal/modules/esm/module_job:343:25) + at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:665:26) + at requireOrImport (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/transform/transform.js:223:12) + at loadUserConfig (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/configLoader.js:107:46) + at loadConfig (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/configLoader.js:119:22) + at loadConfigFromFile (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/common/configLoader.js:331:10) + at runTests (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/program.js:197:18) + at i. (/home/openclaw/.openclaw/workspace/helpyourneighbour/backend/node_modules/playwright/lib/program.js:70:7) diff --git a/docs/runtime/working_tree_audit_helpyourneighbour.md b/docs/runtime/working_tree_audit_helpyourneighbour.md new file mode 100644 index 0000000..870a62b --- /dev/null +++ b/docs/runtime/working_tree_audit_helpyourneighbour.md @@ -0,0 +1,184 @@ +# Working Tree Audit + +Project: helpyourneighbour + +## Modified tracked files +README.md +backend/playwright.config.js +backend/scripts/integration-test.mjs + +--- README.md +# helpyourneighbour + +Erster funktionaler Backend-Stand für die Vision: + +- Nutzerregistrierung und Login (`/auth/register`, `/auth/login`) +- Hilfeanfragen erstellen/listen (`/requests`) +- Angebote + Gegenangebote + Deal-Annahme (`/offers/...`) +- Bewertungsgrundlage mit 2-14 Tage Prompt-Fenster (`/reviews/:dealId`) +- Datenmodell inkl. postalischer Adress-Verifikation (`backend/sql/schema.sql`) +- Address-Change-Flow mit Briefcode (`/addresses/change-request`, `/addresses/verify`) +- Kontaktdatenaustausch nach Deal (`/contacts/request`, `/contacts/respond`, `/contacts/deal/:dealId`) +- Serverseitige AES-256-GCM-Verschlüsselung für Adresse/Telefon (`DATA_ENCRYPTION_KEY`) + +## Docker-Test (Unraid Host) + +```bash +./scripts/test-in-docker.sh +``` + +## Start + +```bash +cd backend +cp .env.example .env +npm install +npm run db:init +npm run start +``` + +## Forgejo Tasks + +- #1 Backend Grundgerüst + Auth API +- #2 Datenmodell für Request/Offer/Negotiation/Deal +- #3 Bewertungssystem 2-14 Tage Verzögerung +- #4 Adressänderung nur per Briefbestätigung + +## API Governance + +- Dispute-Flow Doku: `docs/dispute-flow.md` + +- OpenAPI: `openapi.yaml` (Spiegel: `docs/openapi.yaml`) +- Versioning/Deprecation Policy: `docs/api-versioning.md` +- Rollen- und Rechtekonzept: `docs/roles-and-permissions.md` + +## Development Quickstart (auto-synced) + +```bash +cd backend +npm install +npm test +npm run start +``` + + +--- backend/playwright.config.js +const { defineConfig } = require('@playwright/test'); + +module.exports = defineConfig({ + testDir: './tests', + timeout: 30000, + expect: { + timeout: 5000 + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: 'html', + use: { + actionTimeout: 0, + baseURL: 'http://localhost:3000', + trace: 'on-first-retry', + }, + projects: [ + { + name: 'chromium', + use: { + ...devices['Desktop Chrome'], + }, + }, + ], +}); +--- backend/scripts/integration-test.mjs +// Einfacher HTTP-Test ohne Playwright +// Funktion zum Senden einer HTTP-Anfrage +async function testHealthEndpoint() { + try { + const response = await fetch('http://localhost:3000/health'); + if (response.status === 200) { + console.log('Integration test passed: API server is running and healthy'); + return true; + } else { + console.error(`Integration test failed: Expected status 200, got ${response.status}`); + return false; + } + } catch (error) { + console.error('Integration test failed:', error.message); + return false; + } +} + +// Führe den Test aus +testHealthEndpoint().then(success => { + if (!success) { + process.exit(1); + } +}); + +## Untracked files +.DS_Store +._.DS_Store +PROJECT_SUMMARY.md +STATUS.md +backend/.DS_Store +backend/._.DS_Store +backend/playwright-report/index.html +backend/playwright.config.mjs +backend/test-results/.last-run.json +backend/tests/integration-test.spec.js +docs/plans/2026-03-06-continue-working-the-helpyourneighbour-project-after.md +docs/plans/2026-03-06-implement-the-next-concrete-improvement-for.md +docs/plans/2026-03-06-initial-session-startup-and-greeting.md +docs/plans/2026-03-06-start.md +docs/runtime/agent_state_helpyourneighbour.json +docs/runtime/backlog_item_helpyourneighbour.md +docs/runtime/generated_artifacts_helpyourneighbour.md +docs/runtime/goal_brief_helpyourneighbour.md +docs/runtime/goal_targets_helpyourneighbour.md +docs/runtime/integration_candidates_helpyourneighbour.md +docs/runtime/integration_context_helpyourneighbour.md +docs/runtime/integration_repair_brief_helpyourneighbour.md +docs/runtime/integration_status_helpyourneighbour.env +docs/runtime/integration_targets_helpyourneighbour.md +docs/runtime/integration_test_helpyourneighbour.log +docs/runtime/integration_triage_helpyourneighbour.md +docs/runtime/notion_recall_helpyourneighbour.md +docs/runtime/project_snapshot_helpyourneighbour.md +docs/runtime/smoke_status_helpyourneighbour.env +docs/runtime/smoke_test_helpyourneighbour.log +docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log +docs/runtime/task_helpyourneighbour_1_backlog-inspect.log +docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log +docs/runtime/task_helpyourneighbour_1_integration-check.log +docs/runtime/task_helpyourneighbour_1_integration-context-audit.log +docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log +docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log +docs/runtime/task_helpyourneighbour_1_integration-targets.log +docs/runtime/task_helpyourneighbour_1_integration-triage.log +docs/runtime/task_helpyourneighbour_1_no-work.log +docs/runtime/task_helpyourneighbour_1_project-snapshot.log +docs/runtime/task_helpyourneighbour_1_working-tree-audit.log +docs/runtime/task_helpyourneighbour_2_backlog-goal-brief.log +docs/runtime/task_helpyourneighbour_2_backlog-goal-targets.log +docs/runtime/task_helpyourneighbour_2_generated-artifacts-review.log +docs/runtime/task_helpyourneighbour_2_integration-candidates.log +docs/runtime/task_helpyourneighbour_2_integration-failure-blocked.log +docs/runtime/task_helpyourneighbour_2_no-work.log +docs/runtime/verify_helpyourneighbour_1_backlog-goal-verify.log +docs/runtime/verify_helpyourneighbour_1_backlog-inspect.log +docs/runtime/verify_helpyourneighbour_1_backlog-project-snapshot.log +docs/runtime/verify_helpyourneighbour_1_integration-check.log +docs/runtime/verify_helpyourneighbour_1_integration-failure-blocked.log +docs/runtime/verify_helpyourneighbour_1_integration-repair-brief.log +docs/runtime/verify_helpyourneighbour_1_integration-targets.log +docs/runtime/verify_helpyourneighbour_1_integration-triage.log +docs/runtime/verify_helpyourneighbour_1_no-work.log +docs/runtime/verify_helpyourneighbour_1_project-snapshot.log +docs/runtime/verify_helpyourneighbour_2_backlog-goal-brief.log +docs/runtime/verify_helpyourneighbour_2_backlog-goal-targets.log +docs/runtime/verify_helpyourneighbour_2_generated-artifacts-review.log +docs/runtime/verify_helpyourneighbour_2_integration-candidates.log +docs/runtime/verify_helpyourneighbour_2_integration-failure-blocked.log +docs/runtime/verify_helpyourneighbour_2_no-work.log +docs/runtime/working_tree_audit_helpyourneighbour.md diff --git a/docs/runtime/working_tree_targets_helpyourneighbour.md b/docs/runtime/working_tree_targets_helpyourneighbour.md new file mode 100644 index 0000000..46f03d5 --- /dev/null +++ b/docs/runtime/working_tree_targets_helpyourneighbour.md @@ -0,0 +1,56 @@ +# Working Tree Targets + +Project: helpyourneighbour + +## Highest-signal modified files +README.md +backend/playwright.config.js +backend/scripts/integration-test.mjs + +## Untracked paths +.DS_Store +._.DS_Store +PROJECT_SUMMARY.md +STATUS.md +backend/.DS_Store +backend/._.DS_Store +backend/playwright-report/index.html +backend/playwright.config.mjs +backend/test-results/.last-run.json +backend/tests/integration-test.spec.js +docs/plans/2026-03-06-continue-working-the-helpyourneighbour-project-after.md +docs/plans/2026-03-06-implement-the-next-concrete-improvement-for.md +docs/plans/2026-03-06-initial-session-startup-and-greeting.md +docs/plans/2026-03-06-start.md +docs/runtime/agent_state_helpyourneighbour.json +docs/runtime/backlog_item_helpyourneighbour.md +docs/runtime/generated_artifacts_helpyourneighbour.md +docs/runtime/goal_brief_helpyourneighbour.md +docs/runtime/goal_targets_helpyourneighbour.md +docs/runtime/integration_candidates_helpyourneighbour.md +docs/runtime/integration_context_helpyourneighbour.md +docs/runtime/integration_repair_brief_helpyourneighbour.md +docs/runtime/integration_status_helpyourneighbour.env +docs/runtime/integration_targets_helpyourneighbour.md +docs/runtime/integration_test_helpyourneighbour.log +docs/runtime/integration_triage_helpyourneighbour.md +docs/runtime/notion_recall_helpyourneighbour.md +docs/runtime/project_snapshot_helpyourneighbour.md +docs/runtime/smoke_status_helpyourneighbour.env +docs/runtime/smoke_test_helpyourneighbour.log +docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log +docs/runtime/task_helpyourneighbour_1_backlog-inspect.log +docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log +docs/runtime/task_helpyourneighbour_1_integration-check.log +docs/runtime/task_helpyourneighbour_1_integration-context-audit.log +docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log +docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log +docs/runtime/task_helpyourneighbour_1_integration-targets.log +docs/runtime/task_helpyourneighbour_1_integration-triage.log +docs/runtime/task_helpyourneighbour_1_no-work.log + +## Diff headlines + README.md | 10 ++++++++++ + backend/playwright.config.js | 18 ++++++++++-------- + backend/scripts/integration-test.mjs | 26 ++++++++++++++++++++++---- + 3 files changed, 42 insertions(+), 12 deletions(-)