@crewx/chromex 0.1.0-rc.25 → 0.1.0-rc.250
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +66 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +23 -183
- package/dist/src/engine.d.ts +1 -1
- package/dist/src/engine.js +2 -286
- package/dist/src/types.d.ts +1 -1
- package/dist/src/types.js +1 -3
- package/package.json +2 -2
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/src/engine.d.ts.map +0 -1
- package/dist/src/engine.js.map +0 -1
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js.map +0 -1
package/SKILL.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: crewx/chromex
|
|
3
|
+
description: Chrome X browser tool CLI. Connect agents to Chrome X and call browser tools such as tab text, screenshots, and tab listing.
|
|
4
|
+
metadata:
|
|
5
|
+
version: 0.1.0
|
|
6
|
+
built-in: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Chrome X Browser Tool
|
|
10
|
+
|
|
11
|
+
Chrome X is the browser tool CLI that CrewX agents use to read browser tabs and request screenshots.
|
|
12
|
+
It runs commands against a session connected to the server's Chrome X MCP/HTTP channel.
|
|
13
|
+
|
|
14
|
+
## Commands
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
crewx chromex usage
|
|
18
|
+
crewx chromex connect [--scope=all|current] [--expires=30d|90d|1y] [--name=<name>] [--endpoint=<url>] [--agent=<id>]
|
|
19
|
+
crewx chromex status
|
|
20
|
+
crewx chromex disconnect
|
|
21
|
+
crewx chromex read [--tab=<tabId>] [--step=1|2|3] [--selector=<css>]
|
|
22
|
+
crewx chromex screenshot [--tab=<tabId>] [--output=<path>]
|
|
23
|
+
crewx chromex tabs
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## When To Use
|
|
27
|
+
|
|
28
|
+
- When you need to read the current text of a browser page
|
|
29
|
+
- When you need to check UI/webpage state via screenshot
|
|
30
|
+
- When you need a list of connected Chrome tabs
|
|
31
|
+
- When you need to check or disconnect the Chrome X session connection status
|
|
32
|
+
|
|
33
|
+
## Connection
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
crewx chromex connect --scope=current --expires=90d --agent=<agent_id>
|
|
37
|
+
crewx chromex status
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`connect` creates a Chrome X browser access approval request. The default endpoint is `http://localhost:8150`;
|
|
41
|
+
when using a remote server, specify `--endpoint` or `CREWX_ENDPOINT`.
|
|
42
|
+
|
|
43
|
+
## Browser Reads
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
crewx chromex read --tab=123
|
|
47
|
+
crewx chromex read --tab=123 --step=2 --selector="main"
|
|
48
|
+
crewx chromex screenshot --tab=123 --output=/tmp/page.png
|
|
49
|
+
crewx chromex tabs
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`read` is translated into a `page_read_text` tool call, `screenshot` into `page_screenshot`, and `tabs` into `listTabs`.
|
|
53
|
+
|
|
54
|
+
## Environment
|
|
55
|
+
|
|
56
|
+
| Variable | Purpose |
|
|
57
|
+
|----------|---------|
|
|
58
|
+
| `CREWX_AGENT_ID` | Default agent ID |
|
|
59
|
+
| `CREWX_ENDPOINT` | Default CrewX server URL |
|
|
60
|
+
| `CREWX_API_TOKEN` | Explicit server auth token override; otherwise the runtime credential file is used |
|
|
61
|
+
|
|
62
|
+
## Notes
|
|
63
|
+
|
|
64
|
+
- `usage` prints this `SKILL.md` as-is.
|
|
65
|
+
- If there's no browser session, run `connect` first.
|
|
66
|
+
- For server/extension connection issues, check `status` first.
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.js
CHANGED
|
@@ -1,198 +1,38 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
|
|
4
|
-
if (k2 === undefined) k2 = k;
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(o, k2, desc);
|
|
10
|
-
}) : (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
o[k2] = m[k];
|
|
13
|
-
}));
|
|
14
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
-
}) : function(o, v) {
|
|
17
|
-
o["default"] = v;
|
|
18
|
-
});
|
|
19
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
-
var ownKeys = function(o) {
|
|
21
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
-
var ar = [];
|
|
23
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
-
return ar;
|
|
25
|
-
};
|
|
26
|
-
return ownKeys(o);
|
|
27
|
-
};
|
|
28
|
-
return function (mod) {
|
|
29
|
-
if (mod && mod.__esModule) return mod;
|
|
30
|
-
var result = {};
|
|
31
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
-
__setModuleDefault(result, mod);
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
})();
|
|
36
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
-
exports.main = main;
|
|
38
|
-
const fs = __importStar(require("fs"));
|
|
39
|
-
const path = __importStar(require("path"));
|
|
40
|
-
const engine_js_1 = require("./src/engine.js");
|
|
41
|
-
let PKG_VERSION = 'unknown';
|
|
42
|
-
try {
|
|
43
|
-
const _pkgPath = fs.existsSync(path.join(__dirname, 'package.json'))
|
|
44
|
-
? path.join(__dirname, 'package.json')
|
|
45
|
-
: path.join(__dirname, '..', 'package.json');
|
|
46
|
-
const _pkg = JSON.parse(fs.readFileSync(_pkgPath, 'utf-8'));
|
|
47
|
-
if (_pkg?.version)
|
|
48
|
-
PKG_VERSION = String(_pkg.version);
|
|
49
|
-
}
|
|
50
|
-
catch { }
|
|
51
|
-
function printUsage() {
|
|
52
|
-
console.log(`
|
|
53
|
-
@crewx/chromex@${PKG_VERSION} - Chrome X 브라우저 도구 CLI
|
|
2
|
+
"use strict";var v=exports&&exports.__createBinding||(Object.create?(function(n,t,r,e){if(e===void 0)e=r;var s=Object.getOwnPropertyDescriptor(t,r);if(!s||("get"in s?!t.__esModule:s.writable||s.configurable)){s={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(n,e,s)}):(function(n,t,r,e){if(e===void 0)e=r;n[e]=t[r]}));var x=exports&&exports.__setModuleDefault||(Object.create?(function(n,t){Object.defineProperty(n,"default",{enumerable:true,value:t})}):function(n,t){n["default"]=t});var p=exports&&exports.__importStar||(function(){var n=function(t){n=Object.getOwnPropertyNames||function(r){var e=[];for(var s in r)if(Object.prototype.hasOwnProperty.call(r,s))e[e.length]=s;return e};return n(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null){for(var e=n(t),s=0;s<e.length;s++)if(e[s]!=="default")v(r,t,e[s])}x(r,t);return r}})();Object.defineProperty(exports,"__esModule",{value:true});exports.main=g;const l=p(require("fs"));const d=p(require("path"));const w=require("@crewx/shared/crewx-api-credential");const y=require("./src/engine.js");let f="unknown";try{const n=l.existsSync(d.join(__dirname,"package.json"))?d.join(__dirname,"package.json"):d.join(__dirname,"..","package.json");const t=JSON.parse(l.readFileSync(n,"utf-8"));if(t?.version)f=String(t.version)}catch{}function h(){console.log(`
|
|
3
|
+
@crewx/chromex@${f} - Chrome X browser tools CLI
|
|
54
4
|
|
|
55
5
|
Usage:
|
|
56
6
|
chromex <command> [options]
|
|
57
7
|
|
|
58
8
|
Commands:
|
|
59
|
-
chromex
|
|
60
|
-
chromex
|
|
61
|
-
chromex
|
|
62
|
-
chromex
|
|
63
|
-
chromex
|
|
64
|
-
chromex
|
|
9
|
+
chromex usage Show detailed guide (SKILL.md)
|
|
10
|
+
chromex connect Request Chrome X browser access approval
|
|
11
|
+
chromex status Show current session status
|
|
12
|
+
chromex disconnect End the current session
|
|
13
|
+
chromex read Read tab text (page_read_text)
|
|
14
|
+
chromex screenshot Capture a tab screenshot
|
|
15
|
+
chromex tabs List connected tabs
|
|
65
16
|
|
|
66
17
|
Options:
|
|
67
18
|
connect:
|
|
68
|
-
--scope=all|current
|
|
69
|
-
--expires=30d|90d|1y
|
|
70
|
-
--name=<name>
|
|
71
|
-
--endpoint=<url>
|
|
72
|
-
--agent=<id>
|
|
19
|
+
--scope=all|current Scope (default: all)
|
|
20
|
+
--expires=30d|90d|1y Token expiration (default: 90d)
|
|
21
|
+
--name=<name> Token name
|
|
22
|
+
--endpoint=<url> Server URL (default: http://localhost:8150)
|
|
23
|
+
--agent=<id> Agent ID (default: CREWX_AGENT_ID environment variable)
|
|
73
24
|
|
|
74
25
|
read:
|
|
75
|
-
--tab=<tabId>
|
|
76
|
-
--step=1|2|3
|
|
77
|
-
--selector=<css> CSS
|
|
26
|
+
--tab=<tabId> Target tab ID
|
|
27
|
+
--step=1|2|3 Extraction step (default: 1)
|
|
28
|
+
--selector=<css> CSS selector
|
|
78
29
|
|
|
79
30
|
screenshot:
|
|
80
|
-
--tab=<tabId>
|
|
81
|
-
--output=<path>
|
|
31
|
+
--tab=<tabId> Target tab ID
|
|
32
|
+
--output=<path> Output path
|
|
82
33
|
|
|
83
34
|
Environment variables:
|
|
84
|
-
CREWX_AGENT_ID
|
|
85
|
-
CREWX_ENDPOINT
|
|
86
|
-
CREWX_API_TOKEN
|
|
87
|
-
`);
|
|
88
|
-
}
|
|
89
|
-
const BOOLEAN_FLAGS = new Set(['help', 'version']);
|
|
90
|
-
function parseArgs(args) {
|
|
91
|
-
const result = { positional: [], options: {} };
|
|
92
|
-
for (let i = 0; i < args.length; i++) {
|
|
93
|
-
const arg = args[i];
|
|
94
|
-
if (arg === '-h') {
|
|
95
|
-
result.options['help'] = true;
|
|
96
|
-
}
|
|
97
|
-
else if (arg.startsWith('--')) {
|
|
98
|
-
const eqIdx = arg.indexOf('=');
|
|
99
|
-
if (eqIdx !== -1) {
|
|
100
|
-
result.options[arg.slice(2, eqIdx)] = arg.slice(eqIdx + 1);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
const key = arg.slice(2);
|
|
104
|
-
if (!BOOLEAN_FLAGS.has(key)) {
|
|
105
|
-
const next = args[i + 1];
|
|
106
|
-
if (next !== undefined && !next.startsWith('--') && next !== '-h') {
|
|
107
|
-
result.options[key] = next;
|
|
108
|
-
i++;
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
result.options[key] = true;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
result.options[key] = true;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
result.positional.push(arg);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return result;
|
|
124
|
-
}
|
|
125
|
-
async function main(inputArgs) {
|
|
126
|
-
const args = inputArgs ?? process.argv.slice(2);
|
|
127
|
-
const { positional, options } = parseArgs(args);
|
|
128
|
-
const [command] = positional;
|
|
129
|
-
if (options['version']) {
|
|
130
|
-
console.log(PKG_VERSION);
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
if (!command || command === 'help' || options['help']) {
|
|
134
|
-
printUsage();
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
const engine = new engine_js_1.ChromexEngine();
|
|
138
|
-
switch (command) {
|
|
139
|
-
case 'connect': {
|
|
140
|
-
const scope = typeof options['scope'] === 'string' ? options['scope'] : undefined;
|
|
141
|
-
const expiresRaw = options['expires'];
|
|
142
|
-
const validExpires = ['30d', '90d', '1y'];
|
|
143
|
-
const expires = typeof expiresRaw === 'string' && validExpires.includes(expiresRaw)
|
|
144
|
-
? expiresRaw
|
|
145
|
-
: undefined;
|
|
146
|
-
const name = typeof options['name'] === 'string' ? options['name'] : undefined;
|
|
147
|
-
const endpoint = typeof options['endpoint'] === 'string' ? options['endpoint'] : undefined;
|
|
148
|
-
const agent = typeof options['agent'] === 'string' ? options['agent'] : undefined;
|
|
149
|
-
await engine.connect({ scope, expires, name, endpoint, agent });
|
|
150
|
-
break;
|
|
151
|
-
}
|
|
152
|
-
case 'status':
|
|
153
|
-
await engine.status();
|
|
154
|
-
break;
|
|
155
|
-
case 'disconnect':
|
|
156
|
-
await engine.disconnect();
|
|
157
|
-
break;
|
|
158
|
-
case 'read': {
|
|
159
|
-
const tabId = options['tab'];
|
|
160
|
-
const step = options['step'];
|
|
161
|
-
const selector = options['selector'];
|
|
162
|
-
const callArgs = {};
|
|
163
|
-
if (tabId !== undefined)
|
|
164
|
-
callArgs['tabId'] = Number(tabId);
|
|
165
|
-
if (step !== undefined)
|
|
166
|
-
callArgs['step'] = Number(step);
|
|
167
|
-
if (typeof selector === 'string')
|
|
168
|
-
callArgs['selector'] = selector;
|
|
169
|
-
await engine.call('page_read_text', callArgs);
|
|
170
|
-
break;
|
|
171
|
-
}
|
|
172
|
-
case 'screenshot': {
|
|
173
|
-
const tabId = options['tab'];
|
|
174
|
-
const output = options['output'];
|
|
175
|
-
const callArgs = {};
|
|
176
|
-
if (tabId !== undefined)
|
|
177
|
-
callArgs['tabId'] = Number(tabId);
|
|
178
|
-
if (typeof output === 'string')
|
|
179
|
-
callArgs['output'] = output;
|
|
180
|
-
await engine.call('page_screenshot', callArgs);
|
|
181
|
-
break;
|
|
182
|
-
}
|
|
183
|
-
case 'tabs':
|
|
184
|
-
await engine.call('listTabs', {});
|
|
185
|
-
break;
|
|
186
|
-
default:
|
|
187
|
-
console.error(`Unknown command: ${command}`);
|
|
188
|
-
console.error('Run "chromex --help" for usage.');
|
|
189
|
-
process.exit(1);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
if (require.main === module) {
|
|
193
|
-
main().catch((e) => {
|
|
194
|
-
console.error(e.message);
|
|
195
|
-
process.exit(1);
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
//# sourceMappingURL=cli.js.map
|
|
35
|
+
CREWX_AGENT_ID Agent ID
|
|
36
|
+
CREWX_ENDPOINT Default server URL
|
|
37
|
+
CREWX_API_TOKEN Explicit server auth token override
|
|
38
|
+
`)}function O(){const n=d.join(__dirname,"..","SKILL.md");if(l.existsSync(n)){process.stdout.write(l.readFileSync(n,"utf-8"))}else{h()}}const I=new Set(["help","version"]);function S(n){const t={positional:[],options:{}};for(let r=0;r<n.length;r++){const e=n[r];if(e==="-h"){t.options["help"]=true}else if(e.startsWith("--")){const s=e.indexOf("=");if(s!==-1){t.options[e.slice(2,s)]=e.slice(s+1)}else{const a=e.slice(2);if(!I.has(a)){const o=n[r+1];if(o!==void 0&&!o.startsWith("--")&&o!=="-h"){t.options[a]=o;r++}else{t.options[a]=true}}else{t.options[a]=true}}}else{t.positional.push(e)}}return t}async function g(n){const t=n??process.argv.slice(2);const{positional:r,options:e}=S(t);const[s]=r;if(e["version"]){console.log(f);return}if(s==="usage"){O();return}if(!s||s==="help"||e["help"]){h();return}const a=new y.ChromexEngine;switch(s){case"connect":{const o=typeof e["scope"]==="string"?e["scope"]:void 0;const i=e["expires"];const c=["30d","90d","1y"];const u=typeof i==="string"&&c.includes(i)?i:void 0;const _=typeof e["name"]==="string"?e["name"]:void 0;const b=typeof e["endpoint"]==="string"?e["endpoint"]:void 0;const m=typeof e["agent"]==="string"?e["agent"]:void 0;await a.connect({scope:o,expires:u,name:_,endpoint:b,agent:m});break}case"status":await a.status();break;case"disconnect":await a.disconnect();break;case"read":{const o=e["tab"];const i=e["step"];const c=e["selector"];const u={};if(o!==void 0)u["tabId"]=Number(o);if(i!==void 0)u["step"]=Number(i);if(typeof c==="string")u["selector"]=c;await a.call("page_read_text",u);break}case"screenshot":{const o=e["tab"];const i=e["output"];const c={};if(o!==void 0)c["tabId"]=Number(o);if(typeof i==="string")c["output"]=i;await a.call("page_screenshot",c);break}case"tabs":await a.call("listTabs",{});break;default:console.error(`Unknown command: ${s}`);console.error('Run "chromex --help" for usage.');process.exit(1)}}if(require.main===module){g().catch(n=>{console.error(n.message);process.exit(n instanceof w.CrewxCredentialError?n.exitCode:1)})}
|
package/dist/src/engine.d.ts
CHANGED
package/dist/src/engine.js
CHANGED
|
@@ -1,286 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ChromexEngine = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const os = __importStar(require("os"));
|
|
39
|
-
const path = __importStar(require("path"));
|
|
40
|
-
const DEFAULT_ENDPOINT = 'http://localhost:8150';
|
|
41
|
-
const TOKEN_CACHE_FILE = path.join(os.homedir(), '.crewx', 'chromex-tokens.json');
|
|
42
|
-
const TOKEN_BUFFER_MS = 60000;
|
|
43
|
-
class ChromexEngine {
|
|
44
|
-
constructor(tokenPath) {
|
|
45
|
-
this.tokenPath = tokenPath ?? TOKEN_CACHE_FILE;
|
|
46
|
-
}
|
|
47
|
-
get agentId() {
|
|
48
|
-
return process.env['CREWX_AGENT_ID'] ?? 'unknown';
|
|
49
|
-
}
|
|
50
|
-
get defaultEndpoint() {
|
|
51
|
-
return process.env['CREWX_ENDPOINT'] ?? DEFAULT_ENDPOINT;
|
|
52
|
-
}
|
|
53
|
-
async connect(opts) {
|
|
54
|
-
const agentId = opts.agent ?? this.agentId;
|
|
55
|
-
const endpoint = opts.endpoint ?? this.defaultEndpoint;
|
|
56
|
-
const cache = this.loadTokenCache();
|
|
57
|
-
const existing = cache[agentId];
|
|
58
|
-
if (existing) {
|
|
59
|
-
if (existing.endpoint !== endpoint) {
|
|
60
|
-
console.warn(`경고: 저장된 endpoint(${existing.endpoint}) ≠ 현재 endpoint(${endpoint}) — 재연결합니다`);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
const expiresAt = new Date(existing.expiresAt).getTime();
|
|
64
|
-
if (existing.mcpSessionId && expiresAt - Date.now() > TOKEN_BUFFER_MS) {
|
|
65
|
-
console.log(`기존 토큰 재사용 (만료: ${existing.expiresAt})`);
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
const scope = opts.scope === 'current' ? 'current' : 'all_tabs';
|
|
71
|
-
const expiresIn = opts.expires ?? '90d';
|
|
72
|
-
console.log(`Chrome X 브라우저 접근 요청 중... (최대 60초 대기)`);
|
|
73
|
-
console.log(`에이전트: ${agentId} | 범위: ${scope} | 만료: ${expiresIn}`);
|
|
74
|
-
console.log(`Chrome 팝업에서 [허용] 버튼을 클릭하세요.`);
|
|
75
|
-
const body = { agentId, scope, expiresIn };
|
|
76
|
-
if (opts.name)
|
|
77
|
-
body['tokenName'] = opts.name;
|
|
78
|
-
const apiToken = process.env['CREWX_API_TOKEN'] ?? '';
|
|
79
|
-
const headers = { 'Content-Type': 'application/json' };
|
|
80
|
-
if (apiToken)
|
|
81
|
-
headers['Authorization'] = `Bearer ${apiToken}`;
|
|
82
|
-
let res;
|
|
83
|
-
try {
|
|
84
|
-
res = await fetch(`${endpoint}/api/chromex/negotiate`, {
|
|
85
|
-
method: 'POST',
|
|
86
|
-
headers,
|
|
87
|
-
body: JSON.stringify(body),
|
|
88
|
-
signal: AbortSignal.timeout(65000),
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
catch (err) {
|
|
92
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
93
|
-
throw new Error(`서버 연결 실패: ${msg}\n서버가 실행 중인지 확인하세요 (${endpoint})`);
|
|
94
|
-
}
|
|
95
|
-
if (!res.ok) {
|
|
96
|
-
const data = await res.json().catch(() => ({}));
|
|
97
|
-
const reason = data['reason'] ?? '';
|
|
98
|
-
if (res.status === 403 && reason === 'user_denied') {
|
|
99
|
-
throw new Error('연결 거부 — 사용자가 브라우저 접근을 거부했습니다');
|
|
100
|
-
}
|
|
101
|
-
if (res.status === 403 && reason === 'restricted_tab') {
|
|
102
|
-
throw new Error('Chrome X 연결 거부 — 활성 탭이 chrome://, 확장 페이지, about:, data: 같은 제한 페이지입니다. 일반 웹 페이지 탭을 선택한 뒤 다시 실행하세요.');
|
|
103
|
-
}
|
|
104
|
-
if (res.status === 403 && reason === 'content_script_not_connected') {
|
|
105
|
-
throw new Error('Chrome X 연결 거부 — 읽을 수 있는 페이지 채널이 없습니다. 일반 웹 페이지를 열거나 새로고침한 뒤 다시 실행하세요.');
|
|
106
|
-
}
|
|
107
|
-
if (res.status === 403 && reason === 'no_browser_tab_available') {
|
|
108
|
-
throw new Error('Chrome X 연결 거부 — 승인 팝업을 띄울 브라우저 탭을 찾지 못했습니다. 일반 웹 페이지 탭을 연 뒤 다시 실행하세요.');
|
|
109
|
-
}
|
|
110
|
-
if (res.status === 403 && reason === 'invalid_scope') {
|
|
111
|
-
throw new Error('Chrome X 연결 거부 — 요청 scope가 올바르지 않습니다.');
|
|
112
|
-
}
|
|
113
|
-
if (res.status === 408 || reason === 'timeout') {
|
|
114
|
-
throw new Error('연결 타임아웃 — 60초 내에 응답이 없었습니다');
|
|
115
|
-
}
|
|
116
|
-
if (res.status === 503 || reason === 'no_browser_connected') {
|
|
117
|
-
throw new Error([
|
|
118
|
-
'Chrome X 미연결 — 브라우저 MCP 세션을 찾지 못했습니다.',
|
|
119
|
-
'Chrome에서 CrewX 익스텐션 사이드패널을 열어 MCP 상태가 connected인지 확인한 뒤 다시 실행하세요.',
|
|
120
|
-
`서버: ${endpoint}`,
|
|
121
|
-
].join('\n'));
|
|
122
|
-
}
|
|
123
|
-
throw new Error(`negotiate 실패 (${res.status}): ${JSON.stringify(data)}`);
|
|
124
|
-
}
|
|
125
|
-
const result = await res.json();
|
|
126
|
-
cache[agentId] = {
|
|
127
|
-
token: result.token,
|
|
128
|
-
tokenId: result.tokenId,
|
|
129
|
-
jti: result.jti,
|
|
130
|
-
expiresAt: result.expiresAt,
|
|
131
|
-
scope: result.scope,
|
|
132
|
-
endpoint,
|
|
133
|
-
mcpSessionId: result.mcpSessionId,
|
|
134
|
-
};
|
|
135
|
-
this.saveTokenCache(cache);
|
|
136
|
-
console.log(`연결 성공!`);
|
|
137
|
-
console.log(` 만료: ${result.expiresAt}`);
|
|
138
|
-
console.log(` 범위: ${result.scope}`);
|
|
139
|
-
console.log(` 토큰 ID: ${result.jti}`);
|
|
140
|
-
}
|
|
141
|
-
async call(tool, args) {
|
|
142
|
-
const agentId = this.agentId;
|
|
143
|
-
const cached = this.loadToken(agentId);
|
|
144
|
-
if (!cached) {
|
|
145
|
-
throw new Error('토큰 없음 — npx crewx chromex connect 필요');
|
|
146
|
-
}
|
|
147
|
-
let res;
|
|
148
|
-
try {
|
|
149
|
-
const requestId = `chromex-${Date.now()}`;
|
|
150
|
-
const { name, arguments: mcpArguments } = this.toMcpToolCall(tool, args);
|
|
151
|
-
res = await fetch(`${cached.endpoint}/mcp`, {
|
|
152
|
-
method: 'POST',
|
|
153
|
-
headers: {
|
|
154
|
-
'Content-Type': 'application/json',
|
|
155
|
-
Authorization: `Bearer ${cached.token}`,
|
|
156
|
-
'Mcp-Session-Id': cached.mcpSessionId,
|
|
157
|
-
},
|
|
158
|
-
body: JSON.stringify({
|
|
159
|
-
jsonrpc: '2.0',
|
|
160
|
-
id: requestId,
|
|
161
|
-
method: 'tools/call',
|
|
162
|
-
params: { name, arguments: mcpArguments },
|
|
163
|
-
}),
|
|
164
|
-
signal: AbortSignal.timeout(30000),
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
catch (err) {
|
|
168
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
169
|
-
throw new Error(`서버 연결 실패: ${msg}`);
|
|
170
|
-
}
|
|
171
|
-
if (!res.ok) {
|
|
172
|
-
const data = await res.json().catch(() => ({}));
|
|
173
|
-
if (res.status === 401) {
|
|
174
|
-
throw new Error('토큰 만료 — npx crewx chromex connect 필요');
|
|
175
|
-
}
|
|
176
|
-
if (res.status === 403) {
|
|
177
|
-
throw new Error(`접근 거부 (403): ${JSON.stringify(data)}`);
|
|
178
|
-
}
|
|
179
|
-
throw new Error(`MCP tools/call 실패 (${res.status}): ${JSON.stringify(data)}`);
|
|
180
|
-
}
|
|
181
|
-
const payload = await res.json();
|
|
182
|
-
if (payload.error) {
|
|
183
|
-
throw new Error(`MCP tools/call 오류 (${payload.error.code ?? 'unknown'}): ${payload.error.message ?? JSON.stringify(payload.error)}`);
|
|
184
|
-
}
|
|
185
|
-
console.log(JSON.stringify(payload.result ?? payload, null, 2));
|
|
186
|
-
}
|
|
187
|
-
async status() {
|
|
188
|
-
const agentId = this.agentId;
|
|
189
|
-
const cached = this.loadToken(agentId);
|
|
190
|
-
if (!cached) {
|
|
191
|
-
console.log('연결된 세션 없음 — npx crewx chromex connect 실행');
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
const expiresAt = new Date(cached.expiresAt);
|
|
195
|
-
const now = Date.now();
|
|
196
|
-
const diffMs = expiresAt.getTime() - now;
|
|
197
|
-
if (diffMs <= 0) {
|
|
198
|
-
console.log(`세션 만료됨 (${cached.expiresAt})`);
|
|
199
|
-
console.log('npx crewx chromex connect 로 재연결하세요');
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
|
|
203
|
-
const diffHours = Math.floor((diffMs % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
|
204
|
-
const remaining = diffDays > 0 ? `${diffDays}일 ${diffHours}시간` : `${diffHours}시간`;
|
|
205
|
-
console.log(`에이전트: ${agentId}`);
|
|
206
|
-
console.log(`범위: ${cached.scope}`);
|
|
207
|
-
console.log(`만료: ${cached.expiresAt} (${remaining} 남음)`);
|
|
208
|
-
console.log(`토큰 ID: ${cached.jti}`);
|
|
209
|
-
console.log(`서버: ${cached.endpoint}`);
|
|
210
|
-
}
|
|
211
|
-
async disconnect() {
|
|
212
|
-
const agentId = this.agentId;
|
|
213
|
-
const cached = this.loadToken(agentId);
|
|
214
|
-
if (!cached) {
|
|
215
|
-
console.log('연결된 세션 없음');
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
try {
|
|
219
|
-
const res = await fetch(`${cached.endpoint}/api/chromex/session`, {
|
|
220
|
-
method: 'DELETE',
|
|
221
|
-
headers: {
|
|
222
|
-
'Content-Type': 'application/json',
|
|
223
|
-
Authorization: `Bearer ${cached.token}`,
|
|
224
|
-
},
|
|
225
|
-
body: JSON.stringify({ tokenId: cached.tokenId }),
|
|
226
|
-
signal: AbortSignal.timeout(10000),
|
|
227
|
-
});
|
|
228
|
-
if (!res.ok) {
|
|
229
|
-
console.warn(`서버 revoke 실패 (${res.status}) — 로컬 토큰만 삭제`);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
catch {
|
|
233
|
-
console.warn('서버 연결 실패 — 로컬 토큰만 삭제');
|
|
234
|
-
}
|
|
235
|
-
const cache = this.loadTokenCache();
|
|
236
|
-
delete cache[agentId];
|
|
237
|
-
this.saveTokenCache(cache);
|
|
238
|
-
console.log('연결 종료됨');
|
|
239
|
-
}
|
|
240
|
-
loadToken(agentId) {
|
|
241
|
-
const cache = this.loadTokenCache();
|
|
242
|
-
return cache[agentId];
|
|
243
|
-
}
|
|
244
|
-
toMcpToolCall(tool, args) {
|
|
245
|
-
if (tool === 'listTabs') {
|
|
246
|
-
return { name: 'listTabs', arguments: args };
|
|
247
|
-
}
|
|
248
|
-
const tabId = args['tabId'];
|
|
249
|
-
if (typeof tabId !== 'number' || Number.isNaN(tabId)) {
|
|
250
|
-
throw new Error(`${tool} 호출에는 --tab=<tabId>가 필요합니다`);
|
|
251
|
-
}
|
|
252
|
-
const { tabId: _tabId, ...toolArgs } = args;
|
|
253
|
-
return {
|
|
254
|
-
name: 'callBrowser',
|
|
255
|
-
arguments: {
|
|
256
|
-
tabId,
|
|
257
|
-
tool,
|
|
258
|
-
args: toolArgs,
|
|
259
|
-
},
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
loadTokenCache() {
|
|
263
|
-
if (!fs.existsSync(this.tokenPath))
|
|
264
|
-
return {};
|
|
265
|
-
try {
|
|
266
|
-
const content = fs.readFileSync(this.tokenPath, 'utf-8');
|
|
267
|
-
return JSON.parse(content);
|
|
268
|
-
}
|
|
269
|
-
catch {
|
|
270
|
-
console.error('chromex-tokens.json 파싱 실패 — 재연결 필요: npx crewx chromex connect');
|
|
271
|
-
return {};
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
saveTokenCache(cache) {
|
|
275
|
-
const dir = path.dirname(this.tokenPath);
|
|
276
|
-
if (!fs.existsSync(dir)) {
|
|
277
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
278
|
-
}
|
|
279
|
-
const tmpPath = `${this.tokenPath}.tmp.${Date.now()}`;
|
|
280
|
-
fs.writeFileSync(tmpPath, JSON.stringify(cache, null, 2), { mode: 0o600 });
|
|
281
|
-
fs.renameSync(tmpPath, this.tokenPath);
|
|
282
|
-
fs.chmodSync(this.tokenPath, 0o600);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
exports.ChromexEngine = ChromexEngine;
|
|
286
|
-
//# sourceMappingURL=engine.js.map
|
|
1
|
+
"use strict";var y=exports&&exports.__createBinding||(Object.create?(function(i,e,n,t){if(t===void 0)t=n;var o=Object.getOwnPropertyDescriptor(e,n);if(!o||("get"in o?!e.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return e[n]}}}Object.defineProperty(i,t,o)}):(function(i,e,n,t){if(t===void 0)t=n;i[t]=e[n]}));var S=exports&&exports.__setModuleDefault||(Object.create?(function(i,e){Object.defineProperty(i,"default",{enumerable:true,value:e})}):function(i,e){i["default"]=e});var p=exports&&exports.__importStar||(function(){var i=function(e){i=Object.getOwnPropertyNames||function(n){var t=[];for(var o in n)if(Object.prototype.hasOwnProperty.call(n,o))t[t.length]=o;return t};return i(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null){for(var t=i(e),o=0;o<t.length;o++)if(t[o]!=="default")y(n,e,t[o])}S(n,e);return n}})();Object.defineProperty(exports,"__esModule",{value:true});exports.ChromexEngine=void 0;const g=p(require("fs"));const _=p(require("os"));const w=p(require("path"));const m=require("@crewx/shared/crewx-api-credential");const x="http://localhost:8150";const E=w.join(_.homedir(),".crewx","chromex-tokens.json");const $=6e4;class C{constructor(e){this.tokenPath=e??E}get agentId(){return process.env["CREWX_AGENT_ID"]??"unknown"}get defaultEndpoint(){return process.env["CREWX_ENDPOINT"]??x}async connect(e){const n=e.agent??this.agentId;const t=e.endpoint??this.defaultEndpoint;const o=this.loadTokenCache();const r=o[n];if(r){if(r.endpoint!==t){console.warn(`Warning: saved endpoint (${r.endpoint}) differs from the current endpoint (${t}); reconnecting`)}else{const u=new Date(r.expiresAt).getTime();if(r.mcpSessionId&&u-Date.now()>$){console.log(`Reusing existing token (expires: ${r.expiresAt})`);return}}}const c=e.scope==="current"?"current":"all_tabs";const s=e.expires??"90d";console.log(`Requesting Chrome X browser access... (waiting up to 60 seconds)`);console.log(`Agent: ${n} | Scope: ${c} | Expires: ${s}`);console.log(`Click Allow in the Chrome popup.`);const h={agentId:n,scope:c,expiresIn:s};if(e.name)h["tokenName"]=e.name;const f=(0,m.resolveCrewxApiCredential)("chromex-negotiate");const b={"Content-Type":"application/json",...(0,m.authorizationHeader)(f)};let a;try{a=await fetch(`${t}/api/chromex/negotiate`,{method:"POST",headers:b,body:JSON.stringify(h),signal:AbortSignal.timeout(65e3)})}catch(u){const d=u instanceof Error?u.message:String(u);throw new Error(`Server connection failed: ${d}
|
|
2
|
+
Check that the server is running (${t})`)}if(!a.ok){const u=await a.json().catch(()=>({}));const d=u["reason"]??"";if(a.status===403&&d==="user_denied"){throw new Error("Connection denied: the user rejected browser access")}if(a.status===403&&d==="restricted_tab"){throw new Error("Chrome X connection denied: the active tab is a restricted page such as chrome://, an extension page, about:, or data:. Select a regular web page tab and try again.")}if(a.status===403&&d==="content_script_not_connected"){throw new Error("Chrome X connection denied: no readable page channel is connected. Open or reload a regular web page and try again.")}if(a.status===403&&d==="no_browser_tab_available"){throw new Error("Chrome X connection denied: no browser tab is available for the approval popup. Open a regular web page tab and try again.")}if(a.status===403&&d==="invalid_scope"){throw new Error("Chrome X connection denied: the requested scope is invalid.")}if(a.status===408||d==="timeout"){throw new Error("Connection timed out: no response within 60 seconds")}if(a.status===503||d==="no_browser_connected"){throw new Error(["Chrome X is not connected: no browser MCP session was found.","Open the CrewX extension side panel in Chrome, confirm MCP status is connected, then try again.",`Server: ${t}`].join("\n"))}throw new Error(`Negotiation failed (${a.status}): ${JSON.stringify(u)}`)}const l=await a.json();o[n]={token:l.token,tokenId:l.tokenId,jti:l.jti,expiresAt:l.expiresAt,scope:l.scope,endpoint:t,mcpSessionId:l.mcpSessionId};this.saveTokenCache(o);console.log(`Connection successful.`);console.log(` Expires: ${l.expiresAt}`);console.log(` Scope: ${l.scope}`);console.log(` Token ID: ${l.jti}`)}async call(e,n){const t=this.agentId;const o=this.loadToken(t);if(!o){throw new Error("No token found. Run: crewx chromex connect")}let r;try{const s=`chromex-${Date.now()}`;const{name:h,arguments:f}=this.toMcpToolCall(e,n);r=await fetch(`${o.endpoint}/mcp`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o.token}`,"Mcp-Session-Id":o.mcpSessionId},body:JSON.stringify({jsonrpc:"2.0",id:s,method:"tools/call",params:{name:h,arguments:f}}),signal:AbortSignal.timeout(3e4)})}catch(s){const h=s instanceof Error?s.message:String(s);throw new Error(`Server connection failed: ${h}`)}if(!r.ok){const s=await r.json().catch(()=>({}));if(r.status===401){throw new Error("Token expired. Run: crewx chromex connect")}if(r.status===403){throw new Error(`Access denied (403): ${JSON.stringify(s)}`)}throw new Error(`MCP tools/call failed (${r.status}): ${JSON.stringify(s)}`)}const c=await r.json();if(c.error){throw new Error(`MCP tools/call error (${c.error.code??"unknown"}): ${c.error.message??JSON.stringify(c.error)}`)}console.log(JSON.stringify(c.result??c,null,2))}async status(){const e=this.agentId;const n=this.loadToken(e);if(!n){console.log("No connected session. Run: crewx chromex connect");return}const t=new Date(n.expiresAt);const o=Date.now();const r=t.getTime()-o;if(r<=0){console.log(`Session expired (${n.expiresAt})`);console.log("Reconnect with: crewx chromex connect");return}const c=Math.floor(r/(1e3*60*60*24));const s=Math.floor(r%(1e3*60*60*24)/(1e3*60*60));const h=c>0?`${c}d ${s}h`:`${s}h`;console.log(`Agent: ${e}`);console.log(`Scope: ${n.scope}`);console.log(`Expires: ${n.expiresAt} (${h} remaining)`);console.log(`Token ID: ${n.jti}`);console.log(`Server: ${n.endpoint}`)}async disconnect(){const e=this.agentId;const n=this.loadToken(e);if(!n){console.log("No connected session");return}try{const o=await fetch(`${n.endpoint}/api/chromex/session`,{method:"DELETE",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.token}`},body:JSON.stringify({tokenId:n.tokenId}),signal:AbortSignal.timeout(1e4)});if(!o.ok){console.warn(`Server revoke failed (${o.status}); deleting the local token only`)}}catch{console.warn("Server connection failed; deleting the local token only")}const t=this.loadTokenCache();delete t[e];this.saveTokenCache(t);console.log("Disconnected")}loadToken(e){const n=this.loadTokenCache();return n[e]}toMcpToolCall(e,n){if(e==="listTabs"){return{name:"listTabs",arguments:n}}const t=n["tabId"];if(typeof t!=="number"||Number.isNaN(t)){throw new Error(`${e} requires --tab=<tabId>`)}const{tabId:o,...r}=n;return{name:"callBrowser",arguments:{tabId:t,tool:e,args:r}}}loadTokenCache(){if(!g.existsSync(this.tokenPath))return{};try{const e=g.readFileSync(this.tokenPath,"utf-8");return JSON.parse(e)}catch{console.error("Failed to parse chromex-tokens.json. Reconnect with: crewx chromex connect");return{}}}saveTokenCache(e){const n=w.dirname(this.tokenPath);if(!g.existsSync(n)){g.mkdirSync(n,{recursive:true})}const t=`${this.tokenPath}.tmp.${Date.now()}`;g.writeFileSync(t,JSON.stringify(e,null,2),{mode:384});g.renameSync(t,this.tokenPath);g.chmodSync(this.tokenPath,384)}}exports.ChromexEngine=C;
|
package/dist/src/types.d.ts
CHANGED
package/dist/src/types.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crewx/chromex",
|
|
3
|
-
"version": "0.1.0-rc.
|
|
3
|
+
"version": "0.1.0-rc.250",
|
|
4
4
|
"description": "Chrome X browser tool CLI for CrewX agents",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/src/engine.js",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
],
|
|
34
34
|
"license": "MIT",
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@crewx/shared": "0.0.
|
|
36
|
+
"@crewx/shared": "0.0.6-rc.132"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^20.0.0",
|
package/dist/cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AA4FA,wBAAsB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE9D"}
|
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
|
package/dist/src/engine.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAe,cAAc,EAAc,MAAM,YAAY,CAAC;AAO1E,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,SAAS,CAAC,EAAE,MAAM;IAI9B,OAAO,KAAK,OAAO,GAElB;IAED,OAAO,KAAK,eAAe,GAE1B;IAEK,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA0G5C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDhE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BvB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCjC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,cAAc;CAWvB"}
|
package/dist/src/engine.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC"}
|
package/dist/src/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|