@commandgarden/cli 1.1.0 → 1.1.1
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/dist/main.js +379 -4376
- package/node_modules/@commandgarden/app/dist/client/assets/index-58UrF1aG.js +197 -0
- package/node_modules/@commandgarden/app/dist/client/assets/index-DErcb2Kp.css +1 -0
- package/node_modules/@commandgarden/app/dist/client/index.html +19 -0
- package/node_modules/@commandgarden/app/dist/server/daemon-client.js +61 -0
- package/node_modules/@commandgarden/app/dist/server/main.js +63 -0
- package/node_modules/@commandgarden/app/dist/server/routes/audit.js +20 -0
- package/node_modules/@commandgarden/app/dist/server/routes/config.js +13 -0
- package/node_modules/@commandgarden/app/dist/server/routes/connectors.js +35 -0
- package/node_modules/@commandgarden/app/dist/server/routes/index.js +14 -0
- package/node_modules/@commandgarden/app/dist/server/routes/preferences.js +32 -0
- package/node_modules/@commandgarden/app/dist/server/routes/run.js +46 -0
- package/node_modules/@commandgarden/app/dist/server/routes/status.js +11 -0
- package/node_modules/@commandgarden/app/dist/server/store.js +55 -0
- package/node_modules/@commandgarden/app/package.json +42 -0
- package/node_modules/@commandgarden/daemon/dist/audit-store.d.ts +18 -0
- package/node_modules/@commandgarden/daemon/dist/audit-store.d.ts.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/audit-store.js +97 -0
- package/node_modules/@commandgarden/daemon/dist/audit-store.js.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/auth.d.ts +5 -0
- package/node_modules/@commandgarden/daemon/dist/auth.d.ts.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/auth.js +27 -0
- package/node_modules/@commandgarden/daemon/dist/auth.js.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/config.d.ts +109 -0
- package/node_modules/@commandgarden/daemon/dist/config.d.ts.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/config.js +45 -0
- package/node_modules/@commandgarden/daemon/dist/config.js.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/main.d.ts +2 -0
- package/node_modules/@commandgarden/daemon/dist/main.d.ts.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/main.js +58 -0
- package/node_modules/@commandgarden/daemon/dist/main.js.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/registry.d.ts +21 -0
- package/node_modules/@commandgarden/daemon/dist/registry.d.ts.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/registry.js +70 -0
- package/node_modules/@commandgarden/daemon/dist/registry.js.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/server.d.ts +15 -0
- package/node_modules/@commandgarden/daemon/dist/server.d.ts.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/server.js +336 -0
- package/node_modules/@commandgarden/daemon/dist/server.js.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/sse-manager.d.ts +10 -0
- package/node_modules/@commandgarden/daemon/dist/sse-manager.d.ts.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/sse-manager.js +37 -0
- package/node_modules/@commandgarden/daemon/dist/sse-manager.js.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/validator.d.ts +10 -0
- package/node_modules/@commandgarden/daemon/dist/validator.d.ts.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/validator.js +19 -0
- package/node_modules/@commandgarden/daemon/dist/validator.js.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/ws-relay.d.ts +30 -0
- package/node_modules/@commandgarden/daemon/dist/ws-relay.d.ts.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/ws-relay.js +111 -0
- package/node_modules/@commandgarden/daemon/dist/ws-relay.js.map +1 -0
- package/node_modules/@commandgarden/daemon/package.json +30 -0
- package/node_modules/@commandgarden/shared/dist/capabilities.d.ts +7 -0
- package/node_modules/@commandgarden/shared/dist/capabilities.d.ts.map +1 -0
- package/node_modules/@commandgarden/shared/dist/capabilities.js +23 -0
- package/node_modules/@commandgarden/shared/dist/capabilities.js.map +1 -0
- package/node_modules/@commandgarden/shared/dist/connector.d.ts +377 -0
- package/node_modules/@commandgarden/shared/dist/connector.d.ts.map +1 -0
- package/node_modules/@commandgarden/shared/dist/connector.js +29 -0
- package/node_modules/@commandgarden/shared/dist/connector.js.map +1 -0
- package/node_modules/@commandgarden/shared/dist/events.d.ts +33 -0
- package/node_modules/@commandgarden/shared/dist/events.d.ts.map +1 -0
- package/node_modules/@commandgarden/shared/dist/events.js +34 -0
- package/node_modules/@commandgarden/shared/dist/events.js.map +1 -0
- package/node_modules/@commandgarden/shared/dist/expression/evaluator.d.ts +8 -0
- package/node_modules/@commandgarden/shared/dist/expression/evaluator.d.ts.map +1 -0
- package/node_modules/@commandgarden/shared/dist/expression/evaluator.js +49 -0
- package/node_modules/@commandgarden/shared/dist/expression/evaluator.js.map +1 -0
- package/node_modules/@commandgarden/shared/dist/expression/filters.d.ts +3 -0
- package/node_modules/@commandgarden/shared/dist/expression/filters.d.ts.map +1 -0
- package/node_modules/@commandgarden/shared/dist/expression/filters.js +8 -0
- package/node_modules/@commandgarden/shared/dist/expression/filters.js.map +1 -0
- package/node_modules/@commandgarden/shared/dist/expression/index.d.ts +5 -0
- package/node_modules/@commandgarden/shared/dist/expression/index.d.ts.map +1 -0
- package/node_modules/@commandgarden/shared/dist/expression/index.js +5 -0
- package/node_modules/@commandgarden/shared/dist/expression/index.js.map +1 -0
- package/node_modules/@commandgarden/shared/dist/expression/parser.d.ts +22 -0
- package/node_modules/@commandgarden/shared/dist/expression/parser.d.ts.map +1 -0
- package/node_modules/@commandgarden/shared/dist/expression/parser.js +85 -0
- package/node_modules/@commandgarden/shared/dist/expression/parser.js.map +1 -0
- package/node_modules/@commandgarden/shared/dist/expression/tokenizer.d.ts +7 -0
- package/node_modules/@commandgarden/shared/dist/expression/tokenizer.d.ts.map +1 -0
- package/node_modules/@commandgarden/shared/dist/expression/tokenizer.js +76 -0
- package/node_modules/@commandgarden/shared/dist/expression/tokenizer.js.map +1 -0
- package/node_modules/@commandgarden/shared/dist/index.d.ts +8 -0
- package/node_modules/@commandgarden/shared/dist/index.d.ts.map +1 -0
- package/node_modules/@commandgarden/shared/dist/index.js +15 -0
- package/node_modules/@commandgarden/shared/dist/index.js.map +1 -0
- package/node_modules/@commandgarden/shared/dist/loader.d.ts +17 -0
- package/node_modules/@commandgarden/shared/dist/loader.d.ts.map +1 -0
- package/node_modules/@commandgarden/shared/dist/loader.js +76 -0
- package/node_modules/@commandgarden/shared/dist/loader.js.map +1 -0
- package/node_modules/@commandgarden/shared/dist/pipeline.d.ts +339 -0
- package/node_modules/@commandgarden/shared/dist/pipeline.d.ts.map +1 -0
- package/node_modules/@commandgarden/shared/dist/pipeline.js +97 -0
- package/node_modules/@commandgarden/shared/dist/pipeline.js.map +1 -0
- package/node_modules/@commandgarden/shared/dist/protocol.d.ts +58 -0
- package/node_modules/@commandgarden/shared/dist/protocol.d.ts.map +1 -0
- package/node_modules/@commandgarden/shared/dist/protocol.js +26 -0
- package/node_modules/@commandgarden/shared/dist/protocol.js.map +1 -0
- package/node_modules/@commandgarden/shared/package.json +32 -0
- package/package.json +55 -42
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Token } from './tokenizer.js';
|
|
2
|
+
export type Expr = {
|
|
3
|
+
type: 'variable';
|
|
4
|
+
path: string[];
|
|
5
|
+
} | {
|
|
6
|
+
type: 'string';
|
|
7
|
+
value: string;
|
|
8
|
+
} | {
|
|
9
|
+
type: 'number';
|
|
10
|
+
value: number;
|
|
11
|
+
} | {
|
|
12
|
+
type: 'concat';
|
|
13
|
+
left: Expr;
|
|
14
|
+
right: Expr;
|
|
15
|
+
} | {
|
|
16
|
+
type: 'pipe';
|
|
17
|
+
expr: Expr;
|
|
18
|
+
filter: string;
|
|
19
|
+
args: Expr[];
|
|
20
|
+
};
|
|
21
|
+
export declare function parse(tokens: Token[]): Expr;
|
|
22
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/expression/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,gBAAgB,CAAC;AAEvD,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC;AA8F/D,wBAAgB,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAE3C"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
class ExprParser {
|
|
2
|
+
tokens;
|
|
3
|
+
pos = 0;
|
|
4
|
+
constructor(tokens) {
|
|
5
|
+
this.tokens = tokens;
|
|
6
|
+
}
|
|
7
|
+
peek() {
|
|
8
|
+
return this.tokens[this.pos];
|
|
9
|
+
}
|
|
10
|
+
advance() {
|
|
11
|
+
return this.tokens[this.pos++];
|
|
12
|
+
}
|
|
13
|
+
expect(type) {
|
|
14
|
+
const t = this.advance();
|
|
15
|
+
if (t.type !== type) {
|
|
16
|
+
throw new Error(`Expected ${type}, got ${t.type} ("${t.value}")`);
|
|
17
|
+
}
|
|
18
|
+
return t;
|
|
19
|
+
}
|
|
20
|
+
parse() {
|
|
21
|
+
const expr = this.parsePipe();
|
|
22
|
+
this.expect('EOF');
|
|
23
|
+
return expr;
|
|
24
|
+
}
|
|
25
|
+
parsePipe() {
|
|
26
|
+
let expr = this.parseConcat();
|
|
27
|
+
while (this.peek().type === 'PIPE') {
|
|
28
|
+
this.advance();
|
|
29
|
+
const filterName = this.expect('IDENT').value;
|
|
30
|
+
let filterArgs = [];
|
|
31
|
+
if (this.peek().type === 'LPAREN') {
|
|
32
|
+
this.advance();
|
|
33
|
+
if (this.peek().type !== 'RPAREN') {
|
|
34
|
+
filterArgs.push(this.parsePipe());
|
|
35
|
+
while (this.peek().type === 'COMMA') {
|
|
36
|
+
this.advance();
|
|
37
|
+
filterArgs.push(this.parsePipe());
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
this.expect('RPAREN');
|
|
41
|
+
}
|
|
42
|
+
expr = { type: 'pipe', expr, filter: filterName, args: filterArgs };
|
|
43
|
+
}
|
|
44
|
+
return expr;
|
|
45
|
+
}
|
|
46
|
+
parseConcat() {
|
|
47
|
+
let expr = this.parsePrimary();
|
|
48
|
+
while (this.peek().type === 'PLUS') {
|
|
49
|
+
this.advance();
|
|
50
|
+
const right = this.parsePrimary();
|
|
51
|
+
expr = { type: 'concat', left: expr, right };
|
|
52
|
+
}
|
|
53
|
+
return expr;
|
|
54
|
+
}
|
|
55
|
+
parsePrimary() {
|
|
56
|
+
const token = this.peek();
|
|
57
|
+
if (token.type === 'STRING') {
|
|
58
|
+
this.advance();
|
|
59
|
+
return { type: 'string', value: token.value };
|
|
60
|
+
}
|
|
61
|
+
if (token.type === 'NUMBER') {
|
|
62
|
+
this.advance();
|
|
63
|
+
return { type: 'number', value: Number(token.value) };
|
|
64
|
+
}
|
|
65
|
+
if (token.type === 'IDENT') {
|
|
66
|
+
const path = [this.advance().value];
|
|
67
|
+
while (this.peek().type === 'DOT') {
|
|
68
|
+
this.advance();
|
|
69
|
+
path.push(this.expect('IDENT').value);
|
|
70
|
+
}
|
|
71
|
+
return { type: 'variable', path };
|
|
72
|
+
}
|
|
73
|
+
if (token.type === 'LPAREN') {
|
|
74
|
+
this.advance();
|
|
75
|
+
const expr = this.parsePipe();
|
|
76
|
+
this.expect('RPAREN');
|
|
77
|
+
return expr;
|
|
78
|
+
}
|
|
79
|
+
throw new Error(`Unexpected token: ${token.type} ("${token.value}")`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function parse(tokens) {
|
|
83
|
+
return new ExprParser(tokens).parse();
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/expression/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type TokenType = 'IDENT' | 'DOT' | 'STRING' | 'NUMBER' | 'PIPE' | 'PLUS' | 'LPAREN' | 'RPAREN' | 'COMMA' | 'EOF';
|
|
2
|
+
export interface Token {
|
|
3
|
+
type: TokenType;
|
|
4
|
+
value: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function tokenize(input: string): Token[];
|
|
7
|
+
//# sourceMappingURL=tokenizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../src/expression/tokenizer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GACrC,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAE5D,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CAsD/C"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export function tokenize(input) {
|
|
2
|
+
const tokens = [];
|
|
3
|
+
let i = 0;
|
|
4
|
+
while (i < input.length) {
|
|
5
|
+
const ch = input[i];
|
|
6
|
+
if (/\s/.test(ch)) {
|
|
7
|
+
i++;
|
|
8
|
+
continue;
|
|
9
|
+
}
|
|
10
|
+
if (ch === '.') {
|
|
11
|
+
tokens.push({ type: 'DOT', value: '.' });
|
|
12
|
+
i++;
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
if (ch === '|') {
|
|
16
|
+
tokens.push({ type: 'PIPE', value: '|' });
|
|
17
|
+
i++;
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (ch === '+') {
|
|
21
|
+
tokens.push({ type: 'PLUS', value: '+' });
|
|
22
|
+
i++;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (ch === '(') {
|
|
26
|
+
tokens.push({ type: 'LPAREN', value: '(' });
|
|
27
|
+
i++;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (ch === ')') {
|
|
31
|
+
tokens.push({ type: 'RPAREN', value: ')' });
|
|
32
|
+
i++;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (ch === ',') {
|
|
36
|
+
tokens.push({ type: 'COMMA', value: ',' });
|
|
37
|
+
i++;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (ch === '"' || ch === "'") {
|
|
41
|
+
const quote = ch;
|
|
42
|
+
let str = '';
|
|
43
|
+
i++;
|
|
44
|
+
while (i < input.length && input[i] !== quote) {
|
|
45
|
+
str += input[i];
|
|
46
|
+
i++;
|
|
47
|
+
}
|
|
48
|
+
if (i < input.length)
|
|
49
|
+
i++;
|
|
50
|
+
tokens.push({ type: 'STRING', value: str });
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (/\d/.test(ch)) {
|
|
54
|
+
let num = '';
|
|
55
|
+
while (i < input.length && /[\d.]/.test(input[i])) {
|
|
56
|
+
num += input[i];
|
|
57
|
+
i++;
|
|
58
|
+
}
|
|
59
|
+
tokens.push({ type: 'NUMBER', value: num });
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (/[a-zA-Z_]/.test(ch)) {
|
|
63
|
+
let ident = '';
|
|
64
|
+
while (i < input.length && /[a-zA-Z0-9_]/.test(input[i])) {
|
|
65
|
+
ident += input[i];
|
|
66
|
+
i++;
|
|
67
|
+
}
|
|
68
|
+
tokens.push({ type: 'IDENT', value: ident });
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`Unexpected character: ${ch}`);
|
|
72
|
+
}
|
|
73
|
+
tokens.push({ type: 'EOF', value: '' });
|
|
74
|
+
return tokens;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=tokenizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/expression/tokenizer.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAErC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC5E,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC7E,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC7E,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC/E,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC/E,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAE9E,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,CAAC,EAAE,CAAC;YACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC9C,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;gBAChB,CAAC,EAAE,CAAC;YACN,CAAC;YACD,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM;gBAAE,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;gBAChB,CAAC,EAAE,CAAC;YACN,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QAED,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC,EAAE,CAAC;YACN,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7C,SAAS;QACX,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { CAPABILITIES, type Capability, type RiskLevel, CAPABILITY_RISK, HIGH_RISK_CAPABILITIES, isCapability, } from './capabilities.js';
|
|
2
|
+
export { PIPELINE_STEP_TYPES, type PipelineStepType, STEP_CAPABILITY_MAP, pipelineStepSchema, type PipelineStep, type NavigateStep, type WaitStep, type ExtractStep, type ClickStep, type TypeStep, type InterceptStep, type CookieStep, type FetchStep, type MapStep, type FilterStep, type SetStep, type JsEvaluateStep, } from './pipeline.js';
|
|
3
|
+
export { connectorSchema, type ConnectorDef, type ConnectorArg, type ConnectorColumn, } from './connector.js';
|
|
4
|
+
export { parseConnectorYaml, validateConnectorSemantics, type LoadError, } from './loader.js';
|
|
5
|
+
export { tokenize, parse, evaluate, interpolate, BUILT_IN_FILTERS, type Token, type TokenType, type Expr, type ExprContext, type FilterFn, } from './expression/index.js';
|
|
6
|
+
export { type RunCommandRequest, type RunCommandResponse, type ApprovalConfig, type ExtensionRequest, type ExtensionResponse, type ApprovalRequest, type ApprovalResponse, isRunCommandRequest, isExtensionResponse, isApprovalRequest, isApprovalResponse, } from './protocol.js';
|
|
7
|
+
export { AUDIT_EVENT_TYPES, type AuditEvent, type AuditEventType, type StepSummary, createAuditEvent, redactArgs, } from './events.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,SAAS,EACd,eAAe,EACf,sBAAsB,EACtB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,SAAS,GACf,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,QAAQ,GACd,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,iBAAiB,EACjB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,gBAAgB,EAChB,UAAU,GACX,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Capabilities
|
|
2
|
+
export { CAPABILITIES, CAPABILITY_RISK, HIGH_RISK_CAPABILITIES, isCapability, } from './capabilities.js';
|
|
3
|
+
// Pipeline steps
|
|
4
|
+
export { PIPELINE_STEP_TYPES, STEP_CAPABILITY_MAP, pipelineStepSchema, } from './pipeline.js';
|
|
5
|
+
// Connector schema
|
|
6
|
+
export { connectorSchema, } from './connector.js';
|
|
7
|
+
// YAML loader
|
|
8
|
+
export { parseConnectorYaml, validateConnectorSemantics, } from './loader.js';
|
|
9
|
+
// Expression engine
|
|
10
|
+
export { tokenize, parse, evaluate, interpolate, BUILT_IN_FILTERS, } from './expression/index.js';
|
|
11
|
+
// Protocol
|
|
12
|
+
export { isRunCommandRequest, isExtensionResponse, isApprovalRequest, isApprovalResponse, } from './protocol.js';
|
|
13
|
+
// Audit events
|
|
14
|
+
export { AUDIT_EVENT_TYPES, createAuditEvent, redactArgs, } from './events.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EACL,YAAY,EAGZ,eAAe,EACf,sBAAsB,EACtB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,iBAAiB;AACjB,OAAO,EACL,mBAAmB,EAEnB,mBAAmB,EACnB,kBAAkB,GAcnB,MAAM,eAAe,CAAC;AAEvB,mBAAmB;AACnB,OAAO,EACL,eAAe,GAIhB,MAAM,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EACL,kBAAkB,EAClB,0BAA0B,GAE3B,MAAM,aAAa,CAAC;AAErB,oBAAoB;AACpB,OAAO,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,WAAW,EACX,gBAAgB,GAMjB,MAAM,uBAAuB,CAAC;AAE/B,WAAW;AACX,OAAO,EAQL,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,eAAe;AACf,OAAO,EACL,iBAAiB,EAIjB,gBAAgB,EAChB,UAAU,GACX,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ConnectorDef } from './connector.js';
|
|
2
|
+
export interface LoadError {
|
|
3
|
+
code: 'YAML_PARSE_ERROR' | 'SCHEMA_VALIDATION_ERROR';
|
|
4
|
+
message: string;
|
|
5
|
+
details?: string[];
|
|
6
|
+
}
|
|
7
|
+
type LoadResult = {
|
|
8
|
+
ok: true;
|
|
9
|
+
data: ConnectorDef;
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
error: LoadError;
|
|
13
|
+
};
|
|
14
|
+
export declare function parseConnectorYaml(yamlContent: string): LoadResult;
|
|
15
|
+
export declare function validateConnectorSemantics(connector: ConnectorDef): string[];
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGpE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,kBAAkB,GAAG,yBAAyB,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,KAAK,UAAU,GACX;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAEpC,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CA2BlE;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM,EAAE,CAwD5E"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { parse as parseYaml } from 'yaml';
|
|
2
|
+
import { connectorSchema } from './connector.js';
|
|
3
|
+
import { STEP_CAPABILITY_MAP } from './pipeline.js';
|
|
4
|
+
export function parseConnectorYaml(yamlContent) {
|
|
5
|
+
let parsed;
|
|
6
|
+
try {
|
|
7
|
+
parsed = parseYaml(yamlContent);
|
|
8
|
+
}
|
|
9
|
+
catch (err) {
|
|
10
|
+
return {
|
|
11
|
+
ok: false,
|
|
12
|
+
error: {
|
|
13
|
+
code: 'YAML_PARSE_ERROR',
|
|
14
|
+
message: err instanceof Error ? err.message : 'Failed to parse YAML',
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const result = connectorSchema.safeParse(parsed);
|
|
19
|
+
if (!result.success) {
|
|
20
|
+
return {
|
|
21
|
+
ok: false,
|
|
22
|
+
error: {
|
|
23
|
+
code: 'SCHEMA_VALIDATION_ERROR',
|
|
24
|
+
message: 'Connector YAML does not match schema',
|
|
25
|
+
details: result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`),
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return { ok: true, data: result.data };
|
|
30
|
+
}
|
|
31
|
+
export function validateConnectorSemantics(connector) {
|
|
32
|
+
const errors = [];
|
|
33
|
+
const declaredCapabilities = new Set(connector.capabilities);
|
|
34
|
+
const declaredDomains = new Set(connector.domains);
|
|
35
|
+
for (const step of connector.pipeline) {
|
|
36
|
+
const requiredCap = STEP_CAPABILITY_MAP[step.step];
|
|
37
|
+
if (requiredCap && !declaredCapabilities.has(requiredCap)) {
|
|
38
|
+
errors.push(`Pipeline step "${step.step}" requires capability "${requiredCap}" which is not declared`);
|
|
39
|
+
}
|
|
40
|
+
if (step.step === 'navigate') {
|
|
41
|
+
try {
|
|
42
|
+
const hostname = new URL(step.url).hostname;
|
|
43
|
+
if (!declaredDomains.has(hostname)) {
|
|
44
|
+
errors.push(`Navigate step uses domain "${hostname}" which is not declared in domains`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// URL might contain ${{ }} expressions — skip domain check for templates
|
|
49
|
+
if (!step.url.includes('${{')) {
|
|
50
|
+
errors.push(`Navigate step has invalid URL: ${step.url}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (step.step === 'fetch') {
|
|
55
|
+
try {
|
|
56
|
+
const hostname = new URL(step.url).hostname;
|
|
57
|
+
if (!declaredDomains.has(hostname)) {
|
|
58
|
+
errors.push(`Fetch step uses domain "${hostname}" which is not declared in domains`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
if (!step.url.includes('${{')) {
|
|
63
|
+
errors.push(`Fetch step has invalid URL: ${step.url}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (step.step === 'js_evaluate' && !step.code && !step.file) {
|
|
68
|
+
errors.push('js_evaluate step requires either "code" or "file"');
|
|
69
|
+
}
|
|
70
|
+
if (step.step === 'cookie' && !declaredDomains.has(step.domain)) {
|
|
71
|
+
errors.push(`Cookie step uses domain "${step.domain}" which is not declared in domains`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return errors;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|