chrome-jig 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"repl-protocol.d.ts","sourceRoot":"","sources":["../../src/session/repl-protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAuCpF,qBAAa,YAAa,YAAW,QAAQ;IAC3C,gDAAgD;IAChD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEpC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,IAAI;IAgCpD,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM;IAWxD,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAIvE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAoB5E"}
1
+ {"version":3,"file":"repl-protocol.d.ts","sourceRoot":"","sources":["../../src/session/repl-protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAuCpF,qBAAa,YAAa,YAAW,QAAQ;IAI/B,OAAO,CAAC,IAAI;IAHxB,gDAAgD;IAChD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEhB,IAAI,GAAE,IAAI,GAAG,MAAa;IAE9C,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,IAAI;IAgCpD,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM;IAWxD,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAIvE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAoB5E"}
@@ -36,8 +36,12 @@ function parseDotCommand(input) {
36
36
  return { name: name.toLowerCase(), args };
37
37
  }
38
38
  export class ReplProtocol {
39
+ lang;
39
40
  /** Track last injected ref for file watching */
40
41
  lastInjectRef = null;
42
+ constructor(lang = 'js') {
43
+ this.lang = lang;
44
+ }
41
45
  parse(input) {
42
46
  const trimmed = input.trim();
43
47
  if (!trimmed)
@@ -64,7 +68,7 @@ export class ReplProtocol {
64
68
  };
65
69
  }
66
70
  // Bare text → eval
67
- return { method: 'eval', params: { code: trimmed } };
71
+ return { method: 'eval', params: { code: trimmed, lang: this.lang } };
68
72
  }
69
73
  formatResult(_request, result) {
70
74
  if (result === undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"repl-protocol.js","sourceRoot":"","sources":["../../src/session/repl-protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repl-protocol.js","sourceRoot":"","sources":["../../src/session/repl-protocol.ts"],"names":[],"mappings":"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"}
@@ -63,16 +63,16 @@ Then remove the corresponding line from your Neovim config.
63
63
 
64
64
  ## Default Keymaps
65
65
 
66
- All under `<leader>c` (configurable via `opts.leader`):
66
+ All under `<leader>b` (configurable via `opts.leader`):
67
67
 
68
68
  | Key | Mode | Action |
69
69
  |---|---|---|
70
- | `<leader>ce` | v | Eval selection |
71
- | `<leader>cf` | n | Eval form at cursor |
72
- | `<leader>ct` | n | List tabs |
73
- | `<leader>cr` | n | Reload tab |
74
- | `<leader>cc` | n | Connect |
75
- | `<leader>cd` | n | Disconnect |
70
+ | `<leader>be` | v | Eval selection |
71
+ | `<leader>bf` | n | Eval form at cursor |
72
+ | `<leader>bt` | n | List tabs |
73
+ | `<leader>br` | n | Reload tab |
74
+ | `<leader>bc` | n | Connect |
75
+ | `<leader>bd` | n | Disconnect |
76
76
 
77
77
  Disable with `require("cjig").setup({ keymaps = false })`.
78
78
 
@@ -81,7 +81,7 @@ Disable with `require("cjig").setup({ keymaps = false })`.
81
81
  ```lua
82
82
  require("cjig").setup({
83
83
  keymaps = true, -- set false to skip default keymaps
84
- leader = "<leader>c", -- keymap prefix
84
+ leader = "<leader>b", -- keymap prefix
85
85
  })
86
86
  ```
87
87
 
@@ -10,217 +10,215 @@ local M = {}
10
10
 
11
11
  -- Evaluable treesitter node types
12
12
  local EVAL_NODES = {
13
- expression_statement = true,
14
- variable_declaration = true,
15
- lexical_declaration = true,
16
- function_declaration = true,
17
- call_expression = true,
18
- assignment_expression = true,
13
+ expression_statement = true,
14
+ variable_declaration = true,
15
+ lexical_declaration = true,
16
+ function_declaration = true,
17
+ call_expression = true,
18
+ assignment_expression = true,
19
19
  }
20
20
 
21
21
  --- Detect language from filetype.
22
22
  --- @return string "js" or "cljs"
23
23
  local function detect_lang()
24
- if vim.bo.filetype == "clojure" then
25
- return "cljs"
26
- end
27
- return "js"
24
+ if vim.bo.filetype == "clojure" then
25
+ return "cljs"
26
+ end
27
+ return "js"
28
28
  end
29
29
 
30
30
  --- Get visual selection text.
31
31
  --- @return string
32
32
  local function get_visual_selection()
33
- local _, srow, scol, _ = unpack(vim.fn.getpos("'<"))
34
- local _, erow, ecol, _ = unpack(vim.fn.getpos("'>"))
35
-
36
- if srow > erow or (srow == erow and scol > ecol) then
37
- srow, erow = erow, srow
38
- scol, ecol = ecol, scol
39
- end
40
-
41
- local lines = vim.api.nvim_buf_get_lines(0, srow - 1, erow, false)
42
- if #lines == 0 then return "" end
43
-
44
- if #lines == 1 then
45
- lines[1] = lines[1]:sub(scol, ecol)
46
- else
47
- lines[1] = lines[1]:sub(scol)
48
- lines[#lines] = lines[#lines]:sub(1, ecol)
49
- end
50
-
51
- return table.concat(lines, "\n")
33
+ local _, srow, scol, _ = unpack(vim.fn.getpos("'<"))
34
+ local _, erow, ecol, _ = unpack(vim.fn.getpos("'>"))
35
+
36
+ if srow > erow or (srow == erow and scol > ecol) then
37
+ srow, erow = erow, srow
38
+ scol, ecol = ecol, scol
39
+ end
40
+
41
+ local lines = vim.api.nvim_buf_get_lines(0, srow - 1, erow, false)
42
+ if #lines == 0 then
43
+ return ""
44
+ end
45
+
46
+ if #lines == 1 then
47
+ lines[1] = lines[1]:sub(scol, ecol)
48
+ else
49
+ lines[1] = lines[1]:sub(scol)
50
+ lines[#lines] = lines[#lines]:sub(1, ecol)
51
+ end
52
+
53
+ return table.concat(lines, "\n")
52
54
  end
53
55
 
54
56
  --- Walk up treesitter tree to find nearest evaluable node.
55
57
  --- @return string|nil
56
58
  local function get_treesitter_form()
57
- local ok, ts_utils = pcall(require, "nvim-treesitter.ts_utils")
58
- local node
59
-
60
- if ok then
61
- node = ts_utils.get_node_at_cursor()
62
- else
63
- -- Fallback: use built-in treesitter
64
- node = vim.treesitter.get_node()
65
- end
66
-
67
- if not node then return nil end
68
-
69
- -- Walk up to nearest evaluable node
70
- while node do
71
- if EVAL_NODES[node:type()] then
72
- local sr, sc, er, ec = node:range()
73
- local lines = vim.api.nvim_buf_get_text(0, sr, sc, er, ec, {})
74
- local text = table.concat(lines, "\n")
75
-
76
- -- Strip trailing semicolon from expression statements
77
- if node:type() == "expression_statement" then
78
- text = text:gsub(";%s*$", "")
79
- end
80
-
81
- return text
82
- end
83
- node = node:parent()
84
- end
85
-
86
- return nil
59
+ local ok, ts_utils = pcall(require, "nvim-treesitter.ts_utils")
60
+ local node
61
+
62
+ if ok then
63
+ node = ts_utils.get_node_at_cursor()
64
+ else
65
+ -- Fallback: use built-in treesitter
66
+ node = vim.treesitter.get_node()
67
+ end
68
+
69
+ if not node then
70
+ return nil
71
+ end
72
+
73
+ -- Walk up to nearest evaluable node
74
+ while node do
75
+ if EVAL_NODES[node:type()] then
76
+ local sr, sc, er, ec = node:range()
77
+ local lines = vim.api.nvim_buf_get_text(0, sr, sc, er, ec, {})
78
+ local text = table.concat(lines, "\n")
79
+
80
+ -- Strip trailing semicolon from expression statements
81
+ if node:type() == "expression_statement" then
82
+ text = text:gsub(";%s*$", "")
83
+ end
84
+
85
+ return text
86
+ end
87
+ node = node:parent()
88
+ end
89
+
90
+ return nil
87
91
  end
88
92
 
89
93
  --- Eval code string in browser, show result in float.
90
94
  --- @param code string
91
95
  local function eval_and_show(code)
92
- if code == "" then
93
- ui.show_error("No code to evaluate")
94
- return
95
- end
96
-
97
- local lang = detect_lang()
98
-
99
- rpc.ensure_connected(function()
100
- vim.schedule(function()
101
- rpc.request("eval", { code = code, lang = lang }, function(result)
102
- vim.schedule(function()
103
- ui.show_result(result)
104
- end)
105
- end, function(err)
106
- vim.schedule(function()
107
- ui.show_error(err)
108
- end)
109
- end)
110
- end)
111
- end)
96
+ if code == "" then
97
+ ui.show_error("No code to evaluate")
98
+ return
99
+ end
100
+
101
+ local lang = detect_lang()
102
+
103
+ rpc.ensure_connected(function()
104
+ vim.schedule(function()
105
+ rpc.request("eval", { code = code, lang = lang }, function(result)
106
+ vim.schedule(function()
107
+ ui.show_result(result)
108
+ end)
109
+ end, function(err)
110
+ vim.schedule(function()
111
+ ui.show_error(err)
112
+ end)
113
+ end)
114
+ end)
115
+ end)
112
116
  end
113
117
 
114
118
  --- Register all user commands.
115
119
  local function register_commands()
116
- vim.api.nvim_create_user_command("CjigConnect", function()
117
- rpc.connect()
118
- end, { desc = "Connect to Chrome via cjig serve" })
119
-
120
- vim.api.nvim_create_user_command("CjigDisconnect", function()
121
- rpc.disconnect()
122
- end, { desc = "Disconnect from cjig" })
123
-
124
- vim.api.nvim_create_user_command("CjigEval", function()
125
- local code = get_visual_selection()
126
- eval_and_show(code)
127
- end, { range = true, desc = "Eval visual selection in browser" })
128
-
129
- vim.api.nvim_create_user_command("CjigEvalForm", function()
130
- local code = get_treesitter_form()
131
- if not code then
132
- ui.show_error("No evaluable form at cursor")
133
- return
134
- end
135
- eval_and_show(code)
136
- end, { desc = "Eval treesitter form at cursor" })
137
-
138
- vim.api.nvim_create_user_command("CjigTabs", function()
139
- rpc.ensure_connected(function()
140
- vim.schedule(function()
141
- rpc.request("tabs", {}, function(result)
142
- vim.schedule(function()
143
- if result and result.formatted then
144
- ui.show_result(result.formatted)
145
- else
146
- ui.show_result(result)
147
- end
148
- end)
149
- end, function(err)
150
- vim.schedule(function()
151
- ui.show_error(err)
152
- end)
153
- end)
154
- end)
155
- end)
156
- end, { desc = "List browser tabs" })
157
-
158
- vim.api.nvim_create_user_command("CjigInject", function(opts)
159
- local ref = opts.args
160
- if ref == "" then
161
- ui.show_error("Usage: :CjigInject <name>")
162
- return
163
- end
164
- rpc.ensure_connected(function()
165
- vim.schedule(function()
166
- rpc.request("inject", { ref = ref }, function(result)
167
- vim.schedule(function()
168
- if result and result.formatted then
169
- vim.notify("cjig: " .. result.formatted, vim.log.levels.INFO)
170
- else
171
- ui.show_result(result)
172
- end
173
- end)
174
- end, function(err)
175
- vim.schedule(function()
176
- ui.show_error(err)
177
- end)
178
- end)
179
- end)
180
- end)
181
- end, { nargs = 1, desc = "Inject a harness script" })
182
-
183
- vim.api.nvim_create_user_command("CjigReload", function()
184
- rpc.ensure_connected(function()
185
- vim.schedule(function()
186
- rpc.request("reload", {}, function(_)
187
- vim.schedule(function()
188
- vim.notify("cjig: Reloaded", vim.log.levels.INFO)
189
- end)
190
- end, function(err)
191
- vim.schedule(function()
192
- ui.show_error(err)
193
- end)
194
- end)
195
- end)
196
- end)
197
- end, { desc = "Reload current browser tab" })
120
+ vim.api.nvim_create_user_command("CjigConnect", function()
121
+ rpc.connect()
122
+ end, { desc = "Connect to Chrome via cjig serve" })
123
+
124
+ vim.api.nvim_create_user_command("CjigDisconnect", function()
125
+ rpc.disconnect()
126
+ end, { desc = "Disconnect from cjig" })
127
+
128
+ vim.api.nvim_create_user_command("CjigEval", function()
129
+ local code = get_visual_selection()
130
+ eval_and_show(code)
131
+ end, { range = true, desc = "Eval visual selection in browser" })
132
+
133
+ vim.api.nvim_create_user_command("CjigEvalForm", function()
134
+ local code = get_treesitter_form()
135
+ if not code then
136
+ ui.show_error("No evaluable form at cursor")
137
+ return
138
+ end
139
+ eval_and_show(code)
140
+ end, { desc = "Eval treesitter form at cursor" })
141
+
142
+ vim.api.nvim_create_user_command("CjigTabs", function()
143
+ rpc.ensure_connected(function()
144
+ vim.schedule(function()
145
+ rpc.request("tabs", {}, function(result)
146
+ vim.schedule(function()
147
+ if result and result.formatted then
148
+ ui.show_result(result.formatted)
149
+ else
150
+ ui.show_result(result)
151
+ end
152
+ end)
153
+ end, function(err)
154
+ vim.schedule(function()
155
+ ui.show_error(err)
156
+ end)
157
+ end)
158
+ end)
159
+ end)
160
+ end, { desc = "List browser tabs" })
161
+
162
+ vim.api.nvim_create_user_command("CjigInject", function(opts)
163
+ local ref = opts.args
164
+ if ref == "" then
165
+ ui.show_error("Usage: :CjigInject <name>")
166
+ return
167
+ end
168
+ rpc.ensure_connected(function()
169
+ vim.schedule(function()
170
+ rpc.request("inject", { ref = ref }, function(result)
171
+ vim.schedule(function()
172
+ if result and result.formatted then
173
+ vim.notify("cjig: " .. result.formatted, vim.log.levels.INFO)
174
+ else
175
+ ui.show_result(result)
176
+ end
177
+ end)
178
+ end, function(err)
179
+ vim.schedule(function()
180
+ ui.show_error(err)
181
+ end)
182
+ end)
183
+ end)
184
+ end)
185
+ end, { nargs = 1, desc = "Inject a harness script" })
186
+
187
+ vim.api.nvim_create_user_command("CjigReload", function()
188
+ rpc.ensure_connected(function()
189
+ vim.schedule(function()
190
+ rpc.request("reload", {}, function(_)
191
+ vim.schedule(function()
192
+ vim.notify("cjig: Reloaded", vim.log.levels.INFO)
193
+ end)
194
+ end, function(err)
195
+ vim.schedule(function()
196
+ ui.show_error(err)
197
+ end)
198
+ end)
199
+ end)
200
+ end)
201
+ end, { desc = "Reload current browser tab" })
198
202
  end
199
203
 
200
204
  --- Setup the plugin with optional config.
201
205
  --- @param opts? table
202
206
  function M.setup(opts)
203
- opts = opts or {}
204
-
205
- register_commands()
206
-
207
- -- Default keymaps (disable with opts.keymaps = false)
208
- if opts.keymaps ~= false then
209
- local leader = opts.leader or "<leader>c"
210
-
211
- vim.keymap.set("v", leader .. "e", ":<C-u>CjigEval<CR>",
212
- { silent = true, desc = "cjig: eval selection" })
213
- vim.keymap.set("n", leader .. "f", "<cmd>CjigEvalForm<CR>",
214
- { silent = true, desc = "cjig: eval form" })
215
- vim.keymap.set("n", leader .. "t", "<cmd>CjigTabs<CR>",
216
- { silent = true, desc = "cjig: list tabs" })
217
- vim.keymap.set("n", leader .. "r", "<cmd>CjigReload<CR>",
218
- { silent = true, desc = "cjig: reload tab" })
219
- vim.keymap.set("n", leader .. "c", "<cmd>CjigConnect<CR>",
220
- { silent = true, desc = "cjig: connect" })
221
- vim.keymap.set("n", leader .. "d", "<cmd>CjigDisconnect<CR>",
222
- { silent = true, desc = "cjig: disconnect" })
223
- end
207
+ opts = opts or {}
208
+
209
+ register_commands()
210
+
211
+ -- Default keymaps (disable with opts.keymaps = false)
212
+ if opts.keymaps ~= false then
213
+ local leader = opts.leader or "<leader>b"
214
+
215
+ vim.keymap.set("v", leader .. "e", ":<C-u>CjigEval<CR>", { silent = true, desc = "cjig: eval selection" })
216
+ vim.keymap.set("n", leader .. "f", "<cmd>CjigEvalForm<CR>", { silent = true, desc = "cjig: eval form" })
217
+ vim.keymap.set("n", leader .. "t", "<cmd>CjigTabs<CR>", { silent = true, desc = "cjig: list tabs" })
218
+ vim.keymap.set("n", leader .. "r", "<cmd>CjigReload<CR>", { silent = true, desc = "cjig: reload tab" })
219
+ vim.keymap.set("n", leader .. "c", "<cmd>CjigConnect<CR>", { silent = true, desc = "cjig: connect" })
220
+ vim.keymap.set("n", leader .. "d", "<cmd>CjigDisconnect<CR>", { silent = true, desc = "cjig: disconnect" })
221
+ end
224
222
  end
225
223
 
226
224
  return M
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chrome-jig",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Chrome debugging REPL with CDP, script injection, and Claude skill support",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -8,6 +8,15 @@
8
8
  "bin": {
9
9
  "cjig": "./bin/cjig.js"
10
10
  },
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsx src/cli.ts",
14
+ "typecheck": "tsc --noEmit",
15
+ "test": "vitest run",
16
+ "test:watch": "vitest",
17
+ "lint": "eslint src --ext .ts",
18
+ "serve:examples": "pnpm exec serve examples -p 3333 -C"
19
+ },
11
20
  "keywords": [
12
21
  "chrome",
13
22
  "devtools",
@@ -30,6 +39,7 @@
30
39
  "typescript": "^5.9.3",
31
40
  "vitest": "^4.0.18"
32
41
  },
42
+ "packageManager": "pnpm@10.28.2",
33
43
  "engines": {
34
44
  "node": ">=18.0.0"
35
45
  },
@@ -39,14 +49,5 @@
39
49
  "editor",
40
50
  "SKILL.md",
41
51
  "README.md"
42
- ],
43
- "scripts": {
44
- "build": "tsc",
45
- "dev": "tsx src/cli.ts",
46
- "typecheck": "tsc --noEmit",
47
- "test": "vitest run",
48
- "test:watch": "vitest",
49
- "lint": "eslint src --ext .ts",
50
- "serve:examples": "pnpm exec serve examples -p 3333 -C"
51
- }
52
- }
52
+ ]
53
+ }