opendevbrowser 0.0.11 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +289 -28
  3. package/dist/chunk-JVBMT2O5.js +7173 -0
  4. package/dist/chunk-JVBMT2O5.js.map +1 -0
  5. package/dist/cli/index.js +3690 -275
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/index.js +1080 -2857
  8. package/dist/index.js.map +1 -1
  9. package/dist/opendevbrowser.js +1080 -2857
  10. package/dist/opendevbrowser.js.map +1 -1
  11. package/extension/dist/annotate-content.css +237 -0
  12. package/extension/dist/annotate-content.js +934 -0
  13. package/extension/dist/background.js +1291 -8
  14. package/extension/dist/logging.js +50 -0
  15. package/extension/dist/ops/dom-bridge.js +355 -0
  16. package/extension/dist/ops/ops-runtime.js +1249 -0
  17. package/extension/dist/ops/ops-session-store.js +189 -0
  18. package/extension/dist/ops/redaction.js +52 -0
  19. package/extension/dist/ops/snapshot-builder.js +4 -0
  20. package/extension/dist/ops/snapshot-shared.js +220 -0
  21. package/extension/dist/popup.js +398 -21
  22. package/extension/dist/relay-settings.js +3 -1
  23. package/extension/dist/services/CDPRouter.js +501 -103
  24. package/extension/dist/services/ConnectionManager.js +464 -57
  25. package/extension/dist/services/NativePortManager.js +182 -0
  26. package/extension/dist/services/RelayClient.js +227 -26
  27. package/extension/dist/services/TabManager.js +81 -0
  28. package/extension/dist/services/TargetSessionMap.js +146 -0
  29. package/extension/dist/services/cdp-router-commands.js +203 -0
  30. package/extension/dist/services/url-restrictions.js +41 -0
  31. package/extension/dist/types.js +3 -1
  32. package/extension/icons/icon128.png +0 -0
  33. package/extension/icons/icon16.png +0 -0
  34. package/extension/icons/icon32.png +0 -0
  35. package/extension/icons/icon48.png +0 -0
  36. package/extension/manifest.json +17 -3
  37. package/extension/popup.html +469 -65
  38. package/package.json +2 -2
  39. package/skills/AGENTS.md +34 -61
  40. package/skills/data-extraction/SKILL.md +95 -103
  41. package/skills/form-testing/SKILL.md +75 -82
  42. package/skills/login-automation/SKILL.md +76 -66
  43. package/skills/opendevbrowser-best-practices/SKILL.md +90 -49
  44. package/skills/opendevbrowser-continuity-ledger/SKILL.md +57 -23
  45. package/dist/chunk-R5VUZEUU.js +0 -128
  46. package/dist/chunk-R5VUZEUU.js.map +0 -1
  47. package/extension/dist/popup.jsx +0 -150
@@ -1,150 +0,0 @@
1
- import { DEFAULT_AUTO_PAIR, DEFAULT_PAIRING_ENABLED, DEFAULT_PAIRING_TOKEN, DEFAULT_RELAY_PORT } from "./relay-settings";
2
- const statusEl = document.getElementById("status");
3
- const statusIndicator = document.getElementById("statusIndicator");
4
- const toggleButton = document.getElementById("toggle");
5
- const relayPortInput = document.getElementById("relayPort");
6
- const pairingTokenInput = document.getElementById("pairingToken");
7
- const pairingEnabledInput = document.getElementById("pairingEnabled");
8
- const autoPairInput = document.getElementById("autoPair");
9
- if (!statusEl || !statusIndicator || !toggleButton || !relayPortInput || !pairingTokenInput || !pairingEnabledInput || !autoPairInput) {
10
- throw new Error("Popup DOM missing required elements");
11
- }
12
- const setStatus = (status) => {
13
- const isConnected = status === "connected";
14
- statusEl.textContent = isConnected ? "Connected" : "Disconnected";
15
- toggleButton.textContent = isConnected ? "Disconnect" : "Connect";
16
- if (isConnected) {
17
- statusIndicator.classList.add("connected");
18
- }
19
- else {
20
- statusIndicator.classList.remove("connected");
21
- }
22
- };
23
- const sendMessage = (message) => {
24
- return new Promise((resolve) => {
25
- chrome.runtime.sendMessage(message, (response) => {
26
- resolve(response);
27
- });
28
- });
29
- };
30
- const refreshStatus = async () => {
31
- const response = await sendMessage({ type: "status" });
32
- setStatus(response.status);
33
- };
34
- const fetchTokenFromPlugin = async (port) => {
35
- try {
36
- const response = await fetch(`http://127.0.0.1:${port}/pair`, {
37
- method: "GET",
38
- headers: { "Accept": "application/json" }
39
- });
40
- if (!response.ok) {
41
- return null;
42
- }
43
- const data = await response.json();
44
- return typeof data.token === "string" ? data.token : null;
45
- }
46
- catch {
47
- return null;
48
- }
49
- };
50
- const loadSettings = async () => {
51
- const data = await new Promise((resolve) => {
52
- chrome.storage.local.get(["pairingToken", "pairingEnabled", "relayPort", "autoPair"], (items) => {
53
- resolve(items);
54
- });
55
- });
56
- const autoPair = typeof data.autoPair === "boolean" ? data.autoPair : DEFAULT_AUTO_PAIR;
57
- const pairingEnabled = typeof data.pairingEnabled === "boolean"
58
- ? data.pairingEnabled
59
- : DEFAULT_PAIRING_ENABLED;
60
- const rawToken = typeof data.pairingToken === "string" ? data.pairingToken.trim() : "";
61
- const tokenValue = pairingEnabled ? (rawToken || DEFAULT_PAIRING_TOKEN || "") : rawToken;
62
- const portValue = typeof data.relayPort === "number" ? data.relayPort : DEFAULT_RELAY_PORT;
63
- autoPairInput.checked = autoPair;
64
- pairingEnabledInput.checked = pairingEnabled;
65
- pairingTokenInput.disabled = !pairingEnabled || autoPair;
66
- pairingTokenInput.value = tokenValue;
67
- relayPortInput.value = Number.isInteger(portValue) ? String(portValue) : String(DEFAULT_RELAY_PORT);
68
- const updates = {};
69
- if (typeof data.autoPair !== "boolean") {
70
- updates.autoPair = autoPair;
71
- }
72
- if (typeof data.pairingEnabled !== "boolean") {
73
- updates.pairingEnabled = pairingEnabled;
74
- }
75
- if (Object.keys(updates).length > 0) {
76
- chrome.storage.local.set(updates);
77
- }
78
- };
79
- const toggle = async () => {
80
- const isConnected = statusEl.textContent === "Connected";
81
- if (!isConnected && autoPairInput.checked && pairingEnabledInput.checked) {
82
- const port = parseInt(relayPortInput.value, 10) || DEFAULT_RELAY_PORT;
83
- const fetchedToken = await fetchTokenFromPlugin(port);
84
- if (fetchedToken) {
85
- pairingTokenInput.value = fetchedToken;
86
- chrome.storage.local.set({ pairingToken: fetchedToken });
87
- }
88
- else {
89
- statusEl.textContent = "Failed to fetch token from plugin";
90
- setTimeout(() => refreshStatus(), 2000);
91
- return;
92
- }
93
- }
94
- const response = await sendMessage({
95
- type: isConnected ? "disconnect" : "connect"
96
- });
97
- setStatus(response.status);
98
- };
99
- toggleButton.addEventListener("click", () => {
100
- toggle().catch(() => {
101
- setStatus("disconnected");
102
- });
103
- });
104
- autoPairInput.addEventListener("change", () => {
105
- const enabled = autoPairInput.checked;
106
- pairingTokenInput.disabled = !pairingEnabledInput.checked || enabled;
107
- chrome.storage.local.set({ autoPair: enabled });
108
- if (enabled) {
109
- pairingTokenInput.placeholder = "Will be fetched automatically";
110
- }
111
- else {
112
- pairingTokenInput.placeholder = "Enter token or enable Auto-Pair";
113
- }
114
- });
115
- pairingTokenInput.addEventListener("input", () => {
116
- const value = pairingTokenInput.value.trim();
117
- chrome.storage.local.set({ pairingToken: value });
118
- });
119
- pairingEnabledInput.addEventListener("change", () => {
120
- const enabled = pairingEnabledInput.checked;
121
- pairingTokenInput.disabled = !enabled || autoPairInput.checked;
122
- const updates = { pairingEnabled: enabled };
123
- if (enabled && !autoPairInput.checked) {
124
- const tokenValue = pairingTokenInput.value.trim() || DEFAULT_PAIRING_TOKEN || "";
125
- pairingTokenInput.value = tokenValue;
126
- updates.pairingToken = tokenValue;
127
- }
128
- chrome.storage.local.set(updates);
129
- });
130
- relayPortInput.addEventListener("input", () => {
131
- const raw = relayPortInput.value.trim();
132
- if (!raw) {
133
- chrome.storage.local.set({ relayPort: DEFAULT_RELAY_PORT });
134
- return;
135
- }
136
- const parsed = Number(raw);
137
- if (Number.isInteger(parsed) && parsed > 0 && parsed <= 65535) {
138
- chrome.storage.local.set({ relayPort: parsed });
139
- }
140
- });
141
- refreshStatus().catch(() => {
142
- setStatus("disconnected");
143
- });
144
- loadSettings().catch(() => {
145
- autoPairInput.checked = DEFAULT_AUTO_PAIR;
146
- pairingEnabledInput.checked = DEFAULT_PAIRING_ENABLED;
147
- pairingTokenInput.disabled = !DEFAULT_PAIRING_ENABLED;
148
- pairingTokenInput.value = DEFAULT_PAIRING_TOKEN || "";
149
- relayPortInput.value = String(DEFAULT_RELAY_PORT);
150
- });