arcrun 1.0.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.
- package/dist/commands/creds.d.ts +2 -0
- package/dist/commands/creds.d.ts.map +1 -0
- package/dist/commands/creds.js +62 -0
- package/dist/commands/creds.js.map +1 -0
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +120 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +61 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/logs.d.ts +2 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +67 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/parts.d.ts +6 -0
- package/dist/commands/parts.d.ts.map +1 -0
- package/dist/commands/parts.js +246 -0
- package/dist/commands/parts.js.map +1 -0
- package/dist/commands/push.d.ts +2 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +93 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/run.d.ts +6 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +60 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +139 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cf-api.d.ts +25 -0
- package/dist/lib/cf-api.d.ts.map +1 -0
- package/dist/lib/cf-api.js +89 -0
- package/dist/lib/cf-api.js.map +1 -0
- package/dist/lib/config.d.ts +17 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +31 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/yaml-parser.d.ts +16 -0
- package/dist/lib/yaml-parser.d.ts.map +1 -0
- package/dist/lib/yaml-parser.js +55 -0
- package/dist/lib/yaml-parser.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI 設定檔管理(~/.arcrun/config.yaml)
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
5
|
+
import { homedir } from 'node:os';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import yaml from 'js-yaml';
|
|
8
|
+
const CONFIG_DIR = join(homedir(), '.arcrun');
|
|
9
|
+
const CONFIG_PATH = join(CONFIG_DIR, 'config.yaml');
|
|
10
|
+
export function configExists() {
|
|
11
|
+
return existsSync(CONFIG_PATH);
|
|
12
|
+
}
|
|
13
|
+
export function loadConfig() {
|
|
14
|
+
if (!existsSync(CONFIG_PATH)) {
|
|
15
|
+
throw new Error('找不到 ~/.arcrun/config.yaml\n' +
|
|
16
|
+
'請先執行:acr init');
|
|
17
|
+
}
|
|
18
|
+
const raw = readFileSync(CONFIG_PATH, 'utf8');
|
|
19
|
+
return yaml.load(raw);
|
|
20
|
+
}
|
|
21
|
+
export function saveConfig(config) {
|
|
22
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
23
|
+
writeFileSync(CONFIG_PATH, yaml.dump(config), 'utf8');
|
|
24
|
+
}
|
|
25
|
+
export function getCypherExecutorUrl(config) {
|
|
26
|
+
if (config.mode === 'self-hosted' && config.cypher_executor_url) {
|
|
27
|
+
return config.cypher_executor_url;
|
|
28
|
+
}
|
|
29
|
+
return 'https://cypher.arcrun.dev';
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,SAAS,CAAC;AAkB3B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,6BAA6B;YAC7B,eAAe,CAChB,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAiB,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAChE,OAAO,MAAM,CAAC,mBAAmB,CAAC;IACpC,CAAC;IACD,OAAO,2BAA2B,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface WorkflowYaml {
|
|
2
|
+
name: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
flow: string[];
|
|
5
|
+
config?: Record<string, Record<string, unknown>>;
|
|
6
|
+
}
|
|
7
|
+
export interface ParsedTriplet {
|
|
8
|
+
subject: string;
|
|
9
|
+
relation: string;
|
|
10
|
+
object: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function loadWorkflowYaml(filePath: string): WorkflowYaml;
|
|
13
|
+
export declare function parseTriplets(flow: string[]): ParsedTriplet[];
|
|
14
|
+
export declare function validateRelations(triplets: ParsedTriplet[]): void;
|
|
15
|
+
export declare function getNodeNames(triplets: ParsedTriplet[]): string[];
|
|
16
|
+
//# sourceMappingURL=yaml-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-parser.d.ts","sourceRoot":"","sources":["../../src/lib/yaml-parser.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAU/D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAgB7D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAejE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAOhE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* workflow.yaml 解析與三元組驗證
|
|
3
|
+
*/
|
|
4
|
+
import yaml from 'js-yaml';
|
|
5
|
+
import { readFileSync } from 'node:fs';
|
|
6
|
+
/** 合法關係詞(拒絕 PIPE)*/
|
|
7
|
+
const VALID_RELATIONS = new Set([
|
|
8
|
+
'完成後', '失敗時', '對每個', '條件滿足時',
|
|
9
|
+
'ON_SUCCESS', 'ON_FAIL', 'FOREACH', 'IF', 'ON_CLICK', 'CALLS_SUBFLOW',
|
|
10
|
+
]);
|
|
11
|
+
const BANNED_RELATIONS = new Set(['PIPE']);
|
|
12
|
+
export function loadWorkflowYaml(filePath) {
|
|
13
|
+
const raw = readFileSync(filePath, 'utf8');
|
|
14
|
+
const doc = yaml.load(raw);
|
|
15
|
+
if (!doc.name)
|
|
16
|
+
throw new Error('workflow.yaml 缺少 name 欄位');
|
|
17
|
+
if (!Array.isArray(doc.flow) || doc.flow.length === 0) {
|
|
18
|
+
throw new Error('workflow.yaml 的 flow 欄位必須為非空陣列');
|
|
19
|
+
}
|
|
20
|
+
return doc;
|
|
21
|
+
}
|
|
22
|
+
export function parseTriplets(flow) {
|
|
23
|
+
const triplets = [];
|
|
24
|
+
for (const line of flow) {
|
|
25
|
+
const parts = line.split('>>').map(s => s.trim());
|
|
26
|
+
if (parts.length !== 3) {
|
|
27
|
+
throw new Error(`三元組格式錯誤:「${line}」\n` +
|
|
28
|
+
`正確格式:「A >> 關係詞 >> B」`);
|
|
29
|
+
}
|
|
30
|
+
const [subject, relation, object] = parts;
|
|
31
|
+
triplets.push({ subject, relation, object });
|
|
32
|
+
}
|
|
33
|
+
return triplets;
|
|
34
|
+
}
|
|
35
|
+
export function validateRelations(triplets) {
|
|
36
|
+
for (const t of triplets) {
|
|
37
|
+
if (BANNED_RELATIONS.has(t.relation)) {
|
|
38
|
+
throw new Error(`不允許使用關係詞「${t.relation}」。\n` +
|
|
39
|
+
`「PIPE」已棄用,請改用「完成後」或「ON_SUCCESS」。`);
|
|
40
|
+
}
|
|
41
|
+
if (!VALID_RELATIONS.has(t.relation)) {
|
|
42
|
+
throw new Error(`未知關係詞「${t.relation}」。\n` +
|
|
43
|
+
`合法關係詞:${[...VALID_RELATIONS].join('、')}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function getNodeNames(triplets) {
|
|
48
|
+
const nodes = new Set();
|
|
49
|
+
for (const t of triplets) {
|
|
50
|
+
nodes.add(t.subject);
|
|
51
|
+
nodes.add(t.object);
|
|
52
|
+
}
|
|
53
|
+
return [...nodes];
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=yaml-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-parser.js","sourceRoot":"","sources":["../../src/lib/yaml-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAevC,oBAAoB;AACpB,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;IAC5B,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe;CACtE,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE3C,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAiB,CAAC;IAE3C,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,KAAK;gBACrB,sBAAsB,CACvB,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAyB;IACzD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,YAAY,CAAC,CAAC,QAAQ,MAAM;gBAC5B,kCAAkC,CACnC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,CAAC,QAAQ,MAAM;gBACzB,SAAS,CAAC,GAAG,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC1C,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAyB;IACpD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACrB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "arcrun",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "AI Workflow CLI for arcrun — deploy and run WASM-based AI workflows on Cloudflare",
|
|
5
|
+
"bin": {
|
|
6
|
+
"acr": "./dist/index.js"
|
|
7
|
+
},
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"type": "module",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"prepublishOnly": "npm run build && chmod +x dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"chalk": "^5.3.0",
|
|
17
|
+
"commander": "^12.0.0",
|
|
18
|
+
"js-yaml": "^4.1.0",
|
|
19
|
+
"ora": "^8.0.1"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@types/js-yaml": "^4.0.9",
|
|
23
|
+
"@types/node": "^20.0.0",
|
|
24
|
+
"typescript": "^5.4.0"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=18.0.0"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist/"
|
|
31
|
+
],
|
|
32
|
+
"keywords": ["cloudflare", "workers", "wasm", "workflow", "ai", "arcrun"],
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/richblack/arcrun.git"
|
|
37
|
+
}
|
|
38
|
+
}
|