@projectarachne/core 0.1.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/execution/runWorkflow.d.ts +28 -0
- package/dist/execution/runWorkflow.d.ts.map +1 -0
- package/dist/execution/runWorkflow.js +350 -0
- package/dist/execution/runWorkflow.js.map +1 -0
- package/dist/executors/terminalExecutor.d.ts +82 -0
- package/dist/executors/terminalExecutor.d.ts.map +1 -0
- package/dist/executors/terminalExecutor.js +331 -0
- package/dist/executors/terminalExecutor.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/index.d.ts +3 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +3 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/workflow-yaml.d.ts +839 -0
- package/dist/schemas/workflow-yaml.d.ts.map +1 -0
- package/dist/schemas/workflow-yaml.js +60 -0
- package/dist/schemas/workflow-yaml.js.map +1 -0
- package/dist/schemas/workflow.d.ts +698 -0
- package/dist/schemas/workflow.d.ts.map +1 -0
- package/dist/schemas/workflow.js +85 -0
- package/dist/schemas/workflow.js.map +1 -0
- package/dist/storage/sqlite.d.ts +65 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +177 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/yaml/index.d.ts +3 -0
- package/dist/yaml/index.d.ts.map +1 -0
- package/dist/yaml/index.js +2 -0
- package/dist/yaml/index.js.map +1 -0
- package/dist/yaml/parseWorkflowYaml.d.ts +6 -0
- package/dist/yaml/parseWorkflowYaml.d.ts.map +1 -0
- package/dist/yaml/parseWorkflowYaml.js +41 -0
- package/dist/yaml/parseWorkflowYaml.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
// --- Chain configuration ------------------------------------------------------
|
|
3
|
+
// mode:
|
|
4
|
+
// - 'auto_append': previous step's output is appended as context to the next prompt
|
|
5
|
+
// - 'auto_replace': next prompt is *replaced* by an extracted string (e.g., JSON path)
|
|
6
|
+
// - 'manual': no automatic carry-forward; UI may still show/allow manual paste
|
|
7
|
+
export const ChainConfigSchema = z.object({
|
|
8
|
+
mode: z.enum(['auto_append', 'auto_replace', 'manual']).default('auto_append'),
|
|
9
|
+
// If output.format==='json', where to pull the *string* to use as the next prompt.
|
|
10
|
+
// Examples: '$.next_prompt', '$.plan.steps[0].instruction'
|
|
11
|
+
nextPromptPath: z.string().optional(),
|
|
12
|
+
});
|
|
13
|
+
// --- Output configuration -----------------------------------------------------
|
|
14
|
+
// If format==='json', 'schema' may hold a JSON Schema object we will enforce at runtime.
|
|
15
|
+
// (Validation will be done in executionEngine; here we just accept the object.)
|
|
16
|
+
export const OutputConfigSchema = z.object({
|
|
17
|
+
format: z.enum(['text', 'json']).default('text'),
|
|
18
|
+
schema: z.unknown().optional(),
|
|
19
|
+
});
|
|
20
|
+
// --- Loop configuration -------------------------------------------------------
|
|
21
|
+
// maxIterations: repeat linear steps up to N times (default: 1)
|
|
22
|
+
// stopOnHalt: stop looping early if a step output contains HALT
|
|
23
|
+
export const LoopConfigSchema = z.object({
|
|
24
|
+
maxIterations: z.number().int().min(1).max(100).default(1),
|
|
25
|
+
stopOnHalt: z.boolean().default(true),
|
|
26
|
+
});
|
|
27
|
+
// --- Step schema --------------------------------------------------------------
|
|
28
|
+
export const StepSchema = z.object({
|
|
29
|
+
id: z.string(),
|
|
30
|
+
// Optional execution kind (default: LLM prompt)
|
|
31
|
+
kind: z.enum(['llm', 'http']).default('llm'),
|
|
32
|
+
// Optional concept hint for graph context (if you use Neo4j later)
|
|
33
|
+
conceptLabel: z.string().optional().nullable(),
|
|
34
|
+
// Allow empty prompts so downstream steps can be auto-filled.
|
|
35
|
+
// (Previously min(1) caused 400s when step prompts were intentionally blank.)
|
|
36
|
+
prompt: z.string().optional().default(''),
|
|
37
|
+
// Optional server-side template; e.g. "Summarize:\n{{ steps.s1.output }}"
|
|
38
|
+
// The execution engine will render this using prior step outputs if provided.
|
|
39
|
+
promptTemplate: z.string().optional(),
|
|
40
|
+
agentId: z.string(), // e.g., 'Analyst', 'Architect', etc.
|
|
41
|
+
// Keep model flexible; default remains OpenAI gpt-4o
|
|
42
|
+
model: z.string().optional().default('openai:gpt-4o'),
|
|
43
|
+
// New optional chain & output controls
|
|
44
|
+
chain: ChainConfigSchema.optional(),
|
|
45
|
+
output: OutputConfigSchema.optional(),
|
|
46
|
+
// HTTP node config (used when kind === 'http' or when http.url is provided)
|
|
47
|
+
http: z
|
|
48
|
+
.object({
|
|
49
|
+
url: z.string().url(),
|
|
50
|
+
method: z.string().optional().default('GET'),
|
|
51
|
+
allowMutations: z.boolean().optional().default(false),
|
|
52
|
+
headers: z.record(z.string()).optional(),
|
|
53
|
+
body: z.unknown().optional(),
|
|
54
|
+
timeoutMs: z.number().int().positive().optional(),
|
|
55
|
+
})
|
|
56
|
+
.optional(),
|
|
57
|
+
retry: z
|
|
58
|
+
.object({
|
|
59
|
+
attempts: z.number().int().min(1).max(5).default(1),
|
|
60
|
+
backoffMs: z.number().int().min(0).max(60000).default(1000),
|
|
61
|
+
})
|
|
62
|
+
.optional(),
|
|
63
|
+
});
|
|
64
|
+
// --- Graph edge schema (for branching) ----------------------------------------
|
|
65
|
+
export const EdgeSchema = z.object({
|
|
66
|
+
from: z.string(),
|
|
67
|
+
to: z.string(),
|
|
68
|
+
});
|
|
69
|
+
// --- Workflow schema ----------------------------------------------------------
|
|
70
|
+
export const WorkflowRunSchema = z
|
|
71
|
+
.object({
|
|
72
|
+
workflowId: z.string(),
|
|
73
|
+
steps: z.array(StepSchema).optional(),
|
|
74
|
+
nodes: z.array(StepSchema).optional(),
|
|
75
|
+
edges: z.array(EdgeSchema).optional(),
|
|
76
|
+
loop: LoopConfigSchema.optional(),
|
|
77
|
+
resumeFromStep: z.union([z.number().int().nonnegative(), z.string().min(1)]).optional(),
|
|
78
|
+
resumeFromNodeId: z.string().min(1).optional(),
|
|
79
|
+
})
|
|
80
|
+
.refine((val) => {
|
|
81
|
+
const hasSteps = Array.isArray(val.steps) && val.steps.length > 0;
|
|
82
|
+
const hasNodes = Array.isArray(val.nodes) && val.nodes.length > 0;
|
|
83
|
+
return hasSteps || hasNodes;
|
|
84
|
+
}, { message: 'Provide at least one step or graph node.' });
|
|
85
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/schemas/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export type RunStatus = 'running' | 'success' | 'failed';
|
|
2
|
+
export type StepStatus = 'running' | 'success' | 'failed';
|
|
3
|
+
export interface RunRecord {
|
|
4
|
+
id: string;
|
|
5
|
+
workflowPath: string;
|
|
6
|
+
status: RunStatus;
|
|
7
|
+
stepsTotal: number | null;
|
|
8
|
+
startedAt: string;
|
|
9
|
+
completedAt: string | null;
|
|
10
|
+
errorMessage: string | null;
|
|
11
|
+
}
|
|
12
|
+
export interface StepRecord {
|
|
13
|
+
id: string;
|
|
14
|
+
runId: string;
|
|
15
|
+
stepId: string;
|
|
16
|
+
stepIndex: number | null;
|
|
17
|
+
status: StepStatus;
|
|
18
|
+
output: string | null;
|
|
19
|
+
startedAt: string;
|
|
20
|
+
completedAt: string | null;
|
|
21
|
+
errorMessage: string | null;
|
|
22
|
+
}
|
|
23
|
+
export interface TemplateRecord {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
description: string | null;
|
|
27
|
+
yaml: string;
|
|
28
|
+
createdAt: string;
|
|
29
|
+
updatedAt: string;
|
|
30
|
+
}
|
|
31
|
+
export interface CreateRunInput {
|
|
32
|
+
workflowPath: string;
|
|
33
|
+
stepsTotal?: number | null;
|
|
34
|
+
}
|
|
35
|
+
export interface CompleteRunInput {
|
|
36
|
+
status: Exclude<RunStatus, 'running'>;
|
|
37
|
+
errorMessage?: string | null;
|
|
38
|
+
}
|
|
39
|
+
export interface SaveTemplateInput {
|
|
40
|
+
name: string;
|
|
41
|
+
yaml: string;
|
|
42
|
+
description?: string | null;
|
|
43
|
+
}
|
|
44
|
+
export declare const DEFAULT_SQLITE_FILENAME = "arachne.sqlite";
|
|
45
|
+
export declare const resolveDefaultSqlitePath: () => string;
|
|
46
|
+
export declare class SqliteStorage {
|
|
47
|
+
private db;
|
|
48
|
+
constructor(filename?: string);
|
|
49
|
+
private ensureSchema;
|
|
50
|
+
createRun(input: CreateRunInput): RunRecord;
|
|
51
|
+
completeRun(runId: string, input: CompleteRunInput): void;
|
|
52
|
+
recordStepStart(runId: string, stepId: string, stepIndex?: number): StepRecord;
|
|
53
|
+
recordStepResult(stepId: string, runId: string, input: {
|
|
54
|
+
status: StepStatus;
|
|
55
|
+
output?: string | null;
|
|
56
|
+
errorMessage?: string | null;
|
|
57
|
+
}): void;
|
|
58
|
+
getRunHistory(limit?: number): RunRecord[];
|
|
59
|
+
saveTemplate(input: SaveTemplateInput): TemplateRecord;
|
|
60
|
+
getTemplate(name: string): TemplateRecord | null;
|
|
61
|
+
listTemplates(): TemplateRecord[];
|
|
62
|
+
close(): void;
|
|
63
|
+
}
|
|
64
|
+
export declare const createSqliteStorage: (filename?: string) => SqliteStorage;
|
|
65
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AACzD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,eAAO,MAAM,uBAAuB,mBAAmB,CAAC;AAExD,eAAO,MAAM,wBAAwB,QAAO,MAE3C,CAAC;AAEF,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAoC;gBAElC,QAAQ,GAAE,MAAmC;IAQzD,OAAO,CAAC,YAAY;IAsCpB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS;IAuB3C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAWzD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU;IAyB9E,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QACrD,MAAM,EAAE,UAAU,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,GAAG,IAAI;IAWR,aAAa,CAAC,KAAK,SAAK,GAAG,SAAS,EAAE;IActC,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,cAAc;IAiCtD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAYhD,aAAa,IAAI,cAAc,EAAE;IAWjC,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,mBAAmB,GAAI,WAAW,MAAM,KAAG,aAEvD,CAAC"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { mkdirSync } from 'node:fs';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { homedir } from 'node:os';
|
|
6
|
+
// Lazy-loaded to avoid import-time crashes on Node versions without prebuilt binaries
|
|
7
|
+
let Database = null;
|
|
8
|
+
const loadDatabase = () => {
|
|
9
|
+
if (!Database) {
|
|
10
|
+
const require = createRequire(import.meta.url);
|
|
11
|
+
Database = require('better-sqlite3');
|
|
12
|
+
}
|
|
13
|
+
return Database;
|
|
14
|
+
};
|
|
15
|
+
export const DEFAULT_SQLITE_FILENAME = 'arachne.sqlite';
|
|
16
|
+
export const resolveDefaultSqlitePath = () => {
|
|
17
|
+
return join(homedir(), '.arachne', DEFAULT_SQLITE_FILENAME);
|
|
18
|
+
};
|
|
19
|
+
export class SqliteStorage {
|
|
20
|
+
db;
|
|
21
|
+
constructor(filename = resolveDefaultSqlitePath()) {
|
|
22
|
+
mkdirSync(dirname(filename), { recursive: true });
|
|
23
|
+
const DB = loadDatabase();
|
|
24
|
+
this.db = new DB(filename);
|
|
25
|
+
this.db.pragma('journal_mode = WAL');
|
|
26
|
+
this.ensureSchema();
|
|
27
|
+
}
|
|
28
|
+
ensureSchema() {
|
|
29
|
+
this.db.exec(`
|
|
30
|
+
CREATE TABLE IF NOT EXISTS runs (
|
|
31
|
+
id TEXT PRIMARY KEY,
|
|
32
|
+
workflow_path TEXT NOT NULL,
|
|
33
|
+
status TEXT NOT NULL,
|
|
34
|
+
steps_total INTEGER,
|
|
35
|
+
started_at TEXT NOT NULL,
|
|
36
|
+
completed_at TEXT,
|
|
37
|
+
error_message TEXT
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE TABLE IF NOT EXISTS run_steps (
|
|
41
|
+
id TEXT PRIMARY KEY,
|
|
42
|
+
run_id TEXT NOT NULL,
|
|
43
|
+
step_id TEXT NOT NULL,
|
|
44
|
+
step_index INTEGER,
|
|
45
|
+
status TEXT NOT NULL,
|
|
46
|
+
output TEXT,
|
|
47
|
+
started_at TEXT NOT NULL,
|
|
48
|
+
completed_at TEXT,
|
|
49
|
+
error_message TEXT,
|
|
50
|
+
FOREIGN KEY (run_id) REFERENCES runs(id)
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
CREATE INDEX IF NOT EXISTS run_steps_run_id ON run_steps(run_id);
|
|
54
|
+
|
|
55
|
+
CREATE TABLE IF NOT EXISTS templates (
|
|
56
|
+
id TEXT PRIMARY KEY,
|
|
57
|
+
name TEXT NOT NULL UNIQUE,
|
|
58
|
+
description TEXT,
|
|
59
|
+
yaml TEXT NOT NULL,
|
|
60
|
+
created_at TEXT NOT NULL,
|
|
61
|
+
updated_at TEXT NOT NULL
|
|
62
|
+
);
|
|
63
|
+
`);
|
|
64
|
+
}
|
|
65
|
+
createRun(input) {
|
|
66
|
+
const id = randomUUID();
|
|
67
|
+
const startedAt = new Date().toISOString();
|
|
68
|
+
const stepsTotal = input.stepsTotal ?? null;
|
|
69
|
+
this.db
|
|
70
|
+
.prepare(`INSERT INTO runs (id, workflow_path, status, steps_total, started_at, completed_at, error_message)
|
|
71
|
+
VALUES (?, ?, ?, ?, ?, NULL, NULL)`)
|
|
72
|
+
.run(id, input.workflowPath, 'running', stepsTotal, startedAt);
|
|
73
|
+
return {
|
|
74
|
+
id,
|
|
75
|
+
workflowPath: input.workflowPath,
|
|
76
|
+
status: 'running',
|
|
77
|
+
stepsTotal,
|
|
78
|
+
startedAt,
|
|
79
|
+
completedAt: null,
|
|
80
|
+
errorMessage: null,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
completeRun(runId, input) {
|
|
84
|
+
const completedAt = new Date().toISOString();
|
|
85
|
+
this.db
|
|
86
|
+
.prepare(`UPDATE runs
|
|
87
|
+
SET status = ?, completed_at = ?, error_message = ?
|
|
88
|
+
WHERE id = ?`)
|
|
89
|
+
.run(input.status, completedAt, input.errorMessage ?? null, runId);
|
|
90
|
+
}
|
|
91
|
+
recordStepStart(runId, stepId, stepIndex) {
|
|
92
|
+
const id = randomUUID();
|
|
93
|
+
const startedAt = new Date().toISOString();
|
|
94
|
+
const stepIndexValue = stepIndex ?? null;
|
|
95
|
+
this.db
|
|
96
|
+
.prepare(`INSERT INTO run_steps (id, run_id, step_id, step_index, status, output, started_at, completed_at, error_message)
|
|
97
|
+
VALUES (?, ?, ?, ?, ?, NULL, ?, NULL, NULL)`)
|
|
98
|
+
.run(id, runId, stepId, stepIndexValue, 'running', startedAt);
|
|
99
|
+
return {
|
|
100
|
+
id,
|
|
101
|
+
runId,
|
|
102
|
+
stepId,
|
|
103
|
+
stepIndex: stepIndexValue,
|
|
104
|
+
status: 'running',
|
|
105
|
+
output: null,
|
|
106
|
+
startedAt,
|
|
107
|
+
completedAt: null,
|
|
108
|
+
errorMessage: null,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
recordStepResult(stepId, runId, input) {
|
|
112
|
+
const completedAt = new Date().toISOString();
|
|
113
|
+
this.db
|
|
114
|
+
.prepare(`UPDATE run_steps
|
|
115
|
+
SET status = ?, output = ?, completed_at = ?, error_message = ?
|
|
116
|
+
WHERE run_id = ? AND step_id = ?`)
|
|
117
|
+
.run(input.status, input.output ?? null, completedAt, input.errorMessage ?? null, runId, stepId);
|
|
118
|
+
}
|
|
119
|
+
getRunHistory(limit = 50) {
|
|
120
|
+
const rows = this.db
|
|
121
|
+
.prepare(`SELECT id, workflow_path as workflowPath, status, steps_total as stepsTotal,
|
|
122
|
+
started_at as startedAt, completed_at as completedAt, error_message as errorMessage
|
|
123
|
+
FROM runs
|
|
124
|
+
ORDER BY started_at DESC
|
|
125
|
+
LIMIT ?`)
|
|
126
|
+
.all(limit);
|
|
127
|
+
return rows;
|
|
128
|
+
}
|
|
129
|
+
saveTemplate(input) {
|
|
130
|
+
const existing = this.getTemplate(input.name);
|
|
131
|
+
const now = new Date().toISOString();
|
|
132
|
+
if (existing) {
|
|
133
|
+
this.db
|
|
134
|
+
.prepare(`UPDATE templates
|
|
135
|
+
SET description = ?, yaml = ?, updated_at = ?
|
|
136
|
+
WHERE name = ?`)
|
|
137
|
+
.run(input.description ?? null, input.yaml, now, input.name);
|
|
138
|
+
return { ...existing, description: input.description ?? null, yaml: input.yaml, updatedAt: now };
|
|
139
|
+
}
|
|
140
|
+
const id = randomUUID();
|
|
141
|
+
this.db
|
|
142
|
+
.prepare(`INSERT INTO templates (id, name, description, yaml, created_at, updated_at)
|
|
143
|
+
VALUES (?, ?, ?, ?, ?, ?)`)
|
|
144
|
+
.run(id, input.name, input.description ?? null, input.yaml, now, now);
|
|
145
|
+
return {
|
|
146
|
+
id,
|
|
147
|
+
name: input.name,
|
|
148
|
+
description: input.description ?? null,
|
|
149
|
+
yaml: input.yaml,
|
|
150
|
+
createdAt: now,
|
|
151
|
+
updatedAt: now,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
getTemplate(name) {
|
|
155
|
+
const row = this.db
|
|
156
|
+
.prepare(`SELECT id, name, description, yaml, created_at as createdAt, updated_at as updatedAt
|
|
157
|
+
FROM templates
|
|
158
|
+
WHERE name = ?`)
|
|
159
|
+
.get(name);
|
|
160
|
+
return row ? row : null;
|
|
161
|
+
}
|
|
162
|
+
listTemplates() {
|
|
163
|
+
const rows = this.db
|
|
164
|
+
.prepare(`SELECT id, name, description, yaml, created_at as createdAt, updated_at as updatedAt
|
|
165
|
+
FROM templates
|
|
166
|
+
ORDER BY name ASC`)
|
|
167
|
+
.all();
|
|
168
|
+
return rows;
|
|
169
|
+
}
|
|
170
|
+
close() {
|
|
171
|
+
this.db.close();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
export const createSqliteStorage = (filename) => {
|
|
175
|
+
return new SqliteStorage(filename);
|
|
176
|
+
};
|
|
177
|
+
//# sourceMappingURL=sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/yaml/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/yaml/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { WorkflowYamlSchema } from '../schemas/workflow-yaml.js';
|
|
3
|
+
export type WorkflowYaml = z.infer<typeof WorkflowYamlSchema>;
|
|
4
|
+
export declare const parseWorkflowYaml: (rawYaml: string, sourceName?: string) => WorkflowYaml;
|
|
5
|
+
export declare const loadWorkflowYaml: (filePath: string) => Promise<WorkflowYaml>;
|
|
6
|
+
//# sourceMappingURL=parseWorkflowYaml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseWorkflowYaml.d.ts","sourceRoot":"","sources":["../../src/yaml/parseWorkflowYaml.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAkB9D,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,EAAE,mBAA4B,KAAG,YAqBjF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,YAAY,CAG7E,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { parse } from 'yaml';
|
|
3
|
+
import { WorkflowYamlSchema } from '../schemas/workflow-yaml.js';
|
|
4
|
+
const formatValidationIssues = (issues) => {
|
|
5
|
+
return issues
|
|
6
|
+
.map((issue) => {
|
|
7
|
+
if (issue.path.length === 0) {
|
|
8
|
+
return `- root: ${issue.message}`;
|
|
9
|
+
}
|
|
10
|
+
const path = issue.path
|
|
11
|
+
.map((segment) => (typeof segment === 'number' ? `[${segment}]` : segment))
|
|
12
|
+
.join('.')
|
|
13
|
+
.replace('.[', '[');
|
|
14
|
+
return `- ${path}: ${issue.message}`;
|
|
15
|
+
})
|
|
16
|
+
.join('\n');
|
|
17
|
+
};
|
|
18
|
+
export const parseWorkflowYaml = (rawYaml, sourceName = 'workflow.yaml') => {
|
|
19
|
+
let parsed;
|
|
20
|
+
try {
|
|
21
|
+
parsed = parse(rawYaml);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
25
|
+
throw new Error(`Failed to parse YAML in ${sourceName}: ${message}`);
|
|
26
|
+
}
|
|
27
|
+
if (parsed === null || parsed === undefined) {
|
|
28
|
+
throw new Error(`Invalid workflow YAML in ${sourceName}: file is empty.`);
|
|
29
|
+
}
|
|
30
|
+
const validation = WorkflowYamlSchema.safeParse(parsed);
|
|
31
|
+
if (!validation.success) {
|
|
32
|
+
const details = formatValidationIssues(validation.error.issues);
|
|
33
|
+
throw new Error(`Invalid workflow YAML in ${sourceName}:\n${details}`);
|
|
34
|
+
}
|
|
35
|
+
return validation.data;
|
|
36
|
+
};
|
|
37
|
+
export const loadWorkflowYaml = async (filePath) => {
|
|
38
|
+
const rawYaml = await readFile(filePath, 'utf8');
|
|
39
|
+
return parseWorkflowYaml(rawYaml, filePath);
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=parseWorkflowYaml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseWorkflowYaml.js","sourceRoot":"","sources":["../../src/yaml/parseWorkflowYaml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAIjE,MAAM,sBAAsB,GAAG,CAAC,MAAoB,EAAU,EAAE;IAC9D,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,WAAW,KAAK,CAAC,OAAO,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;aACpB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aAC1E,IAAI,CAAC,GAAG,CAAC;aACT,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtB,OAAO,KAAK,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IACvC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAE,UAAU,GAAG,eAAe,EAAgB,EAAE;IAC/F,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,KAAK,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,kBAAkB,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,MAAM,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,QAAgB,EAAyB,EAAE;IAChF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,OAAO,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@projectarachne/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=18"
|
|
10
|
+
},
|
|
11
|
+
"type": "module",
|
|
12
|
+
"main": "dist/index.js",
|
|
13
|
+
"types": "dist/index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc -p tsconfig.json",
|
|
25
|
+
"clean": "rm -rf dist"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"better-sqlite3": "^11.10.0",
|
|
29
|
+
"yaml": "^2.8.2",
|
|
30
|
+
"zod": "^3.23.8"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
34
|
+
"@types/node": "^22.10.1",
|
|
35
|
+
"typescript": "^5.5.4"
|
|
36
|
+
}
|
|
37
|
+
}
|