@christianmaf80/agentic-workflow 1.21.0-beta.3 → 1.22.0-beta.4
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/bin/cli.js +7 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/acceptance.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/agent-scores.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/agent-tasks/1-dev-agent-scaffold.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/agent-tasks/2-dev-agent-manifest-command.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/agent-tasks/3-dev-agent-marketplace-evidence.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/agent-tasks/4-qa-agent-verify-build.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/analysis.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/architect/review.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/metrics.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/plan.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/researcher/research.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/results-acceptance.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/task.md +6 -0
- package/dist/agent/artifacts/1-scaffold-extension-vscode-agentinc/verification.md +6 -0
- package/dist/agent/artifacts/2-scaffold-vscode-chat-ai-panel/acceptance.md +6 -0
- package/dist/agent/artifacts/2-scaffold-vscode-chat-ai-panel/task.md +6 -0
- package/dist/agent/artifacts/3-new-vscode-agentic-activitybar-chat/acceptance.md +6 -0
- package/dist/agent/artifacts/3-new-vscode-agentic-activitybar-chat/task.md +6 -0
- package/dist/agent/artifacts/4-copiar-estructura-agentic-cliente/acceptance.md +6 -0
- package/dist/agent/artifacts/4-copiar-estructura-agentic-cliente/architect/implementation.md +6 -0
- package/dist/agent/artifacts/5-reestructurar-src-para-extension-vscode/acceptance.md +6 -0
- package/dist/agent/artifacts/5-reestructurar-src-para-extension-vscode/task.md +6 -0
- package/dist/agent/artifacts/6-release-beta-11/task.md +6 -0
- package/dist/agent/artifacts/candidate/init.md +6 -0
- package/dist/agent/artifacts/candidate/task.md +6 -0
- package/dist/agent/artifacts/task-20260128-reorganize-structure/acceptance.md +6 -0
- package/dist/agent/artifacts/task-20260128-reorganize-structure/task.md +6 -0
- package/dist/agent/rules/constitution/clean-code.md +6 -0
- package/dist/agent/templates/acceptance.md +6 -0
- package/dist/agent/templates/init.md +6 -0
- package/dist/agent/templates/supplemental-report.md +6 -0
- package/dist/agent/templates/task.md +7 -0
- package/dist/agent/workflows/init.md +1 -1
- package/dist/cli/commands/init.js +6 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.js +5 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/index.js +1 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/runtime/engine/emitter.js +30 -0
- package/dist/runtime/engine/emitter.js.map +1 -0
- package/dist/runtime/engine/engine.js +101 -0
- package/dist/runtime/engine/engine.js.map +1 -0
- package/dist/runtime/engine/index.js +7 -0
- package/dist/runtime/engine/index.js.map +1 -0
- package/dist/runtime/engine/service.js +78 -0
- package/dist/runtime/engine/service.js.map +1 -0
- package/dist/runtime/engine/state-store.js +25 -0
- package/dist/runtime/engine/state-store.js.map +1 -0
- package/dist/runtime/engine/task-loader.js +51 -0
- package/dist/runtime/engine/task-loader.js.map +1 -0
- package/dist/runtime/engine/workflow-loader.js +82 -0
- package/dist/runtime/engine/workflow-loader.js.map +1 -0
- package/dist/runtime/index.js +3 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/mcp/index.js +2 -0
- package/dist/runtime/mcp/index.js.map +1 -0
- package/dist/runtime/mcp/server.js +249 -0
- package/dist/runtime/mcp/server.js.map +1 -0
- package/package.json +5 -6
- package/media/agent-chat.svg +0 -20
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { RuntimeEmitter } from './emitter.js';
|
|
4
|
+
import { RuntimeEngine } from './engine.js';
|
|
5
|
+
import { StateStore } from './state-store.js';
|
|
6
|
+
import { loadTask, resolveWorkflowsRoot } from './task-loader.js';
|
|
7
|
+
import { resolvePhaseWorkflow } from './workflow-loader.js';
|
|
8
|
+
export async function runRuntime(options) {
|
|
9
|
+
const taskPath = path.resolve(options.taskPath);
|
|
10
|
+
const task = await loadTask(taskPath);
|
|
11
|
+
ensureOwner(task.owner, options.agent);
|
|
12
|
+
const workflowsRoot = resolveWorkflowsRoot(path.dirname(taskPath));
|
|
13
|
+
const mapping = await resolvePhaseWorkflow(workflowsRoot, task.phase);
|
|
14
|
+
if (!mapping) {
|
|
15
|
+
throw new Error(`No workflow mapping found for phase ${task.phase}.`);
|
|
16
|
+
}
|
|
17
|
+
const runId = crypto.randomUUID();
|
|
18
|
+
const statePath = resolveStatePath(taskPath, options.statePath);
|
|
19
|
+
const workflow = { id: mapping.phaseId, path: mapping.workflowPath };
|
|
20
|
+
const state = {
|
|
21
|
+
version: 1,
|
|
22
|
+
runId,
|
|
23
|
+
taskId: task.id,
|
|
24
|
+
taskTitle: task.title,
|
|
25
|
+
taskPath,
|
|
26
|
+
workflowId: workflow.id,
|
|
27
|
+
workflowPath: workflow.path,
|
|
28
|
+
phase: task.phase,
|
|
29
|
+
status: 'idle',
|
|
30
|
+
steps: [],
|
|
31
|
+
updatedAt: new Date().toISOString()
|
|
32
|
+
};
|
|
33
|
+
const emitter = new RuntimeEmitter({
|
|
34
|
+
eventsPath: options.eventsPath,
|
|
35
|
+
stdout: options.stdoutEvents ?? true
|
|
36
|
+
});
|
|
37
|
+
const store = new StateStore(statePath);
|
|
38
|
+
const engine = new RuntimeEngine({ emitter, stateStore: store });
|
|
39
|
+
return engine.run(state, workflow);
|
|
40
|
+
}
|
|
41
|
+
export async function resumeRuntime(options) {
|
|
42
|
+
const taskPath = path.resolve(options.taskPath);
|
|
43
|
+
const task = await loadTask(taskPath);
|
|
44
|
+
ensureOwner(task.owner, options.agent);
|
|
45
|
+
const statePath = resolveStatePath(taskPath, options.statePath);
|
|
46
|
+
const store = new StateStore(statePath);
|
|
47
|
+
const state = await store.load();
|
|
48
|
+
if (!state) {
|
|
49
|
+
throw new Error('No persisted state found to resume.');
|
|
50
|
+
}
|
|
51
|
+
if (state.taskPath !== taskPath) {
|
|
52
|
+
throw new Error('State does not match the provided task path.');
|
|
53
|
+
}
|
|
54
|
+
const workflowsRoot = resolveWorkflowsRoot(path.dirname(taskPath));
|
|
55
|
+
const mapping = await resolvePhaseWorkflow(workflowsRoot, state.phase);
|
|
56
|
+
if (!mapping) {
|
|
57
|
+
throw new Error(`No workflow mapping found for phase ${state.phase}.`);
|
|
58
|
+
}
|
|
59
|
+
const workflow = { id: mapping.phaseId, path: mapping.workflowPath };
|
|
60
|
+
const emitter = new RuntimeEmitter({
|
|
61
|
+
eventsPath: options.eventsPath,
|
|
62
|
+
stdout: options.stdoutEvents ?? true
|
|
63
|
+
});
|
|
64
|
+
const engine = new RuntimeEngine({ emitter, stateStore: store });
|
|
65
|
+
return engine.run(state, workflow);
|
|
66
|
+
}
|
|
67
|
+
function resolveStatePath(taskPath, override) {
|
|
68
|
+
if (override) {
|
|
69
|
+
return path.resolve(override);
|
|
70
|
+
}
|
|
71
|
+
return path.join(path.dirname(taskPath), '.agent', 'runtime', 'state.json');
|
|
72
|
+
}
|
|
73
|
+
function ensureOwner(owner, agent) {
|
|
74
|
+
if (owner !== agent) {
|
|
75
|
+
throw new Error(`Agent mismatch: expected "${owner}" but got "${agent}".`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/runtime/engine/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
export class StateStore {
|
|
4
|
+
statePath;
|
|
5
|
+
constructor(statePath) {
|
|
6
|
+
this.statePath = statePath;
|
|
7
|
+
}
|
|
8
|
+
async load() {
|
|
9
|
+
try {
|
|
10
|
+
const raw = await fs.readFile(this.statePath, 'utf-8');
|
|
11
|
+
return JSON.parse(raw);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
async save(state) {
|
|
18
|
+
const dir = path.dirname(this.statePath);
|
|
19
|
+
await fs.mkdir(dir, { recursive: true });
|
|
20
|
+
const tempPath = `${this.statePath}.tmp`;
|
|
21
|
+
await fs.writeFile(tempPath, JSON.stringify(state, null, 2));
|
|
22
|
+
await fs.rename(tempPath, this.statePath);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=state-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-store.js","sourceRoot":"","sources":["../../../src/runtime/engine/state-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,OAAO,UAAU;IACD;IAApB,YAAoB,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAElC,KAAK,CAAC,IAAI;QACf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,KAAmB;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,SAAS,MAAM,CAAC;QACzC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import matter from 'gray-matter';
|
|
4
|
+
export async function loadTask(taskPath) {
|
|
5
|
+
const raw = await fs.readFile(taskPath, 'utf-8');
|
|
6
|
+
const { data, content } = matter(raw);
|
|
7
|
+
const meta = data;
|
|
8
|
+
const yaml = extractYamlBlock(content);
|
|
9
|
+
const task = yaml.task ?? {};
|
|
10
|
+
const id = task.id ?? meta.id ?? '';
|
|
11
|
+
const title = task.title ?? meta.title ?? '';
|
|
12
|
+
const phase = task.phase?.current ?? '';
|
|
13
|
+
const owner = meta.owner ?? extractOwner(raw) ?? '';
|
|
14
|
+
if (!id || !title || !phase || !owner) {
|
|
15
|
+
throw new Error('Task file missing required fields (id/title/owner/phase.current).');
|
|
16
|
+
}
|
|
17
|
+
return { id, title, owner, phase };
|
|
18
|
+
}
|
|
19
|
+
export function resolveWorkflowsRoot(projectRoot) {
|
|
20
|
+
const normalized = path.resolve(projectRoot);
|
|
21
|
+
const parsed = path.parse(normalized);
|
|
22
|
+
const parts = normalized.split(path.sep);
|
|
23
|
+
const agentIndex = parts.lastIndexOf('.agent');
|
|
24
|
+
if (agentIndex === -1) {
|
|
25
|
+
return path.join(normalized, '.agent', 'workflows');
|
|
26
|
+
}
|
|
27
|
+
const rootParts = parts.slice(0, agentIndex);
|
|
28
|
+
const root = resolveRoot(rootParts, parsed.root);
|
|
29
|
+
return path.join(root, '.agent', 'workflows');
|
|
30
|
+
}
|
|
31
|
+
function extractYamlBlock(markdown) {
|
|
32
|
+
const match = markdown.match(/```yaml\n([\s\S]*?)```/);
|
|
33
|
+
if (!match) {
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
return matter(`---\n${match[1]}\n---`).data;
|
|
37
|
+
}
|
|
38
|
+
function extractOwner(markdown) {
|
|
39
|
+
const match = markdown.match(/^- owner:\s*(.+)\s*$/m);
|
|
40
|
+
return match ? match[1].trim() : undefined;
|
|
41
|
+
}
|
|
42
|
+
function resolveRoot(parts, fallbackRoot) {
|
|
43
|
+
if (parts.length === 0) {
|
|
44
|
+
return fallbackRoot;
|
|
45
|
+
}
|
|
46
|
+
if (parts[0] === '') {
|
|
47
|
+
return path.join(fallbackRoot, ...parts.slice(1));
|
|
48
|
+
}
|
|
49
|
+
return path.join(...parts);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=task-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-loader.js","sourceRoot":"","sources":["../../../src/runtime/engine/task-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import matter from 'gray-matter';
|
|
4
|
+
async function collectMarkdownFiles(root) {
|
|
5
|
+
const entries = await fs.readdir(root, { withFileTypes: true });
|
|
6
|
+
const files = [];
|
|
7
|
+
for (const entry of entries) {
|
|
8
|
+
const entryPath = path.join(root, entry.name);
|
|
9
|
+
if (entry.isDirectory()) {
|
|
10
|
+
files.push(...await collectMarkdownFiles(entryPath));
|
|
11
|
+
}
|
|
12
|
+
else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
13
|
+
files.push(entryPath);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return files;
|
|
17
|
+
}
|
|
18
|
+
export async function loadWorkflows(workflowsRoot) {
|
|
19
|
+
const files = await collectMarkdownFiles(workflowsRoot);
|
|
20
|
+
const workflows = [];
|
|
21
|
+
for (const file of files) {
|
|
22
|
+
const raw = await fs.readFile(file, 'utf-8');
|
|
23
|
+
const { data } = matter(raw);
|
|
24
|
+
if (typeof data?.id === 'string') {
|
|
25
|
+
workflows.push({
|
|
26
|
+
id: data.id,
|
|
27
|
+
path: file,
|
|
28
|
+
description: typeof data.description === 'string' ? data.description : undefined,
|
|
29
|
+
trigger: data.trigger ? { commands: Array.isArray(data.trigger.commands) ? data.trigger.commands : undefined } : undefined,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return workflows;
|
|
34
|
+
}
|
|
35
|
+
export async function resolvePhaseWorkflow(workflowsRoot, phaseId) {
|
|
36
|
+
const indexPath = path.join(workflowsRoot, 'tasklifecycle-long', 'index.md');
|
|
37
|
+
const raw = await fs.readFile(indexPath, 'utf-8');
|
|
38
|
+
const { data } = matter(raw);
|
|
39
|
+
const phases = extractPhases(data) ?? extractPhases(extractYamlBlock(raw));
|
|
40
|
+
if (!phases || typeof phases !== 'object') {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
for (const phaseKey of Object.keys(phases)) {
|
|
44
|
+
const phase = phases[phaseKey];
|
|
45
|
+
if (phase?.id === phaseId && typeof phase.workflow === 'string') {
|
|
46
|
+
const workflowPath = resolveWorkflowPath(workflowsRoot, phase.workflow);
|
|
47
|
+
return {
|
|
48
|
+
phaseId,
|
|
49
|
+
workflowPath
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
function extractPhases(source) {
|
|
56
|
+
if (!source || typeof source !== 'object') {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
const aliases = source.aliases;
|
|
60
|
+
const phases = aliases?.['tasklifecycle-long']?.phases;
|
|
61
|
+
return phases && typeof phases === 'object' ? phases : null;
|
|
62
|
+
}
|
|
63
|
+
function extractYamlBlock(markdown) {
|
|
64
|
+
const match = markdown.match(/```yaml\n([\s\S]*?)```/);
|
|
65
|
+
if (!match) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return matter(`---\n${match[1]}\n---`).data;
|
|
69
|
+
}
|
|
70
|
+
function resolveWorkflowPath(workflowsRoot, workflow) {
|
|
71
|
+
if (path.isAbsolute(workflow)) {
|
|
72
|
+
return workflow;
|
|
73
|
+
}
|
|
74
|
+
if (workflow.startsWith('.agent/workflows/')) {
|
|
75
|
+
return path.join(workflowsRoot, workflow.replace(/^\.agent\/workflows\//, ''));
|
|
76
|
+
}
|
|
77
|
+
if (workflow.startsWith('.agent/')) {
|
|
78
|
+
return path.join(workflowsRoot, workflow.replace(/^\.agent\//, ''));
|
|
79
|
+
}
|
|
80
|
+
return path.join(workflowsRoot, workflow);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=workflow-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-loader.js","sourceRoot":"","sources":["../../../src/runtime/engine/workflow-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import readline from 'node:readline';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import fs from 'node:fs/promises';
|
|
4
|
+
import matter from 'gray-matter';
|
|
5
|
+
import { RuntimeEmitter } from '../engine/emitter.js';
|
|
6
|
+
import { loadWorkflows } from '../engine/workflow-loader.js';
|
|
7
|
+
import { loadTask, resolveWorkflowsRoot } from '../engine/task-loader.js';
|
|
8
|
+
import { runRuntime, resumeRuntime } from '../engine/service.js';
|
|
9
|
+
export async function startRuntimeMcpServer() {
|
|
10
|
+
const rl = readline.createInterface({ input: process.stdin, crlfDelay: Infinity });
|
|
11
|
+
for await (const line of rl) {
|
|
12
|
+
const trimmed = line.trim();
|
|
13
|
+
if (!trimmed) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
await handleRequest(trimmed);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function handleRequest(line) {
|
|
20
|
+
let request;
|
|
21
|
+
try {
|
|
22
|
+
request = JSON.parse(line);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
writeResponse({ id: 'unknown', error: { message: 'Invalid JSON request.' } });
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const result = await dispatchRequest(request);
|
|
30
|
+
writeResponse({ id: request.id, result });
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
writeResponse({ id: request.id, error: { message: formatError(error) } });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function dispatchRequest(request) {
|
|
37
|
+
switch (request.method) {
|
|
38
|
+
case 'runtime.run':
|
|
39
|
+
return handleRun(request.params ?? {});
|
|
40
|
+
case 'runtime.resume':
|
|
41
|
+
return handleResume(request.params ?? {});
|
|
42
|
+
case 'runtime.get_state':
|
|
43
|
+
return handleGetState(request.params ?? {});
|
|
44
|
+
case 'runtime.list_workflows':
|
|
45
|
+
return handleListWorkflows(request.params ?? {});
|
|
46
|
+
case 'runtime.validate_gate':
|
|
47
|
+
return handleValidateGate(request.params ?? {});
|
|
48
|
+
case 'runtime.advance_phase':
|
|
49
|
+
return handleAdvancePhase(request.params ?? {});
|
|
50
|
+
case 'runtime.emit_event':
|
|
51
|
+
return handleEmitEvent(request.params ?? {});
|
|
52
|
+
case 'runtime.chat':
|
|
53
|
+
return handleChat(request.params ?? {});
|
|
54
|
+
default:
|
|
55
|
+
throw new Error(`Unknown method: ${request.method}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function handleRun(params) {
|
|
59
|
+
const taskPath = ensureString(params.taskPath, 'taskPath');
|
|
60
|
+
const agent = ensureString(params.agent, 'agent');
|
|
61
|
+
const statePath = getOptionalString(params.statePath);
|
|
62
|
+
const eventsPath = getOptionalString(params.eventsPath);
|
|
63
|
+
const result = await runRuntime({
|
|
64
|
+
taskPath,
|
|
65
|
+
agent,
|
|
66
|
+
statePath,
|
|
67
|
+
eventsPath,
|
|
68
|
+
stdoutEvents: false
|
|
69
|
+
});
|
|
70
|
+
return { status: 'ok', runId: result.runId, phase: result.phase };
|
|
71
|
+
}
|
|
72
|
+
async function handleResume(params) {
|
|
73
|
+
const taskPath = ensureString(params.taskPath, 'taskPath');
|
|
74
|
+
const agent = ensureString(params.agent, 'agent');
|
|
75
|
+
const statePath = getOptionalString(params.statePath);
|
|
76
|
+
const eventsPath = getOptionalString(params.eventsPath);
|
|
77
|
+
const result = await resumeRuntime({
|
|
78
|
+
taskPath,
|
|
79
|
+
agent,
|
|
80
|
+
statePath,
|
|
81
|
+
eventsPath,
|
|
82
|
+
stdoutEvents: false
|
|
83
|
+
});
|
|
84
|
+
return { status: 'ok', runId: result.runId, phase: result.phase };
|
|
85
|
+
}
|
|
86
|
+
async function handleGetState(params) {
|
|
87
|
+
const statePath = ensureString(params.statePath, 'statePath');
|
|
88
|
+
const raw = await fs.readFile(path.resolve(statePath), 'utf-8');
|
|
89
|
+
return JSON.parse(raw);
|
|
90
|
+
}
|
|
91
|
+
async function handleListWorkflows(params) {
|
|
92
|
+
const workflowsRoot = ensureString(params.workflowsRoot, 'workflowsRoot');
|
|
93
|
+
return loadWorkflows(workflowsRoot);
|
|
94
|
+
}
|
|
95
|
+
async function handleValidateGate(params) {
|
|
96
|
+
const taskPath = ensureString(params.taskPath, 'taskPath');
|
|
97
|
+
const agent = ensureString(params.agent, 'agent');
|
|
98
|
+
const expectedPhase = getOptionalString(params.expectedPhase);
|
|
99
|
+
const task = await loadTask(taskPath);
|
|
100
|
+
if (task.owner !== agent) {
|
|
101
|
+
return { valid: false, reason: 'Agent mismatch.' };
|
|
102
|
+
}
|
|
103
|
+
if (expectedPhase && task.phase !== expectedPhase) {
|
|
104
|
+
return { valid: false, reason: `Phase mismatch. Current: ${task.phase}.` };
|
|
105
|
+
}
|
|
106
|
+
return { valid: true };
|
|
107
|
+
}
|
|
108
|
+
async function handleAdvancePhase(params) {
|
|
109
|
+
const taskPath = ensureString(params.taskPath, 'taskPath');
|
|
110
|
+
const agent = ensureString(params.agent, 'agent');
|
|
111
|
+
const eventsPath = getOptionalString(params.eventsPath);
|
|
112
|
+
const task = await loadTask(taskPath);
|
|
113
|
+
if (task.owner !== agent) {
|
|
114
|
+
throw new Error('Agent mismatch.');
|
|
115
|
+
}
|
|
116
|
+
const workflowsRoot = resolveWorkflowsRoot(path.dirname(taskPath));
|
|
117
|
+
const nextPhase = await resolveNextPhase(workflowsRoot, task.phase);
|
|
118
|
+
const updated = await updateTaskPhase(taskPath, task.phase, nextPhase, agent);
|
|
119
|
+
const emitter = new RuntimeEmitter({ eventsPath, stdout: false });
|
|
120
|
+
await emitter.emit({
|
|
121
|
+
type: 'phase_updated',
|
|
122
|
+
timestamp: updated.updatedAt,
|
|
123
|
+
runId: task.id,
|
|
124
|
+
phase: nextPhase,
|
|
125
|
+
payload: { previousPhase: task.phase }
|
|
126
|
+
});
|
|
127
|
+
return { status: 'ok', previousPhase: task.phase, currentPhase: nextPhase, updatedAt: updated.updatedAt };
|
|
128
|
+
}
|
|
129
|
+
async function handleEmitEvent(params) {
|
|
130
|
+
const eventsPath = getOptionalString(params.eventsPath);
|
|
131
|
+
const event = params.event;
|
|
132
|
+
if (!event) {
|
|
133
|
+
throw new Error('Missing event payload.');
|
|
134
|
+
}
|
|
135
|
+
const emitter = new RuntimeEmitter({ eventsPath, stdout: false });
|
|
136
|
+
await emitter.emit(event);
|
|
137
|
+
return { status: 'ok' };
|
|
138
|
+
}
|
|
139
|
+
async function handleChat(params) {
|
|
140
|
+
const eventsPath = getOptionalString(params.eventsPath);
|
|
141
|
+
const message = ensureString(params.message, 'message');
|
|
142
|
+
const role = getOptionalString(params.role) ?? 'user';
|
|
143
|
+
const emitter = new RuntimeEmitter({ eventsPath, stdout: false });
|
|
144
|
+
await emitter.emit({
|
|
145
|
+
type: 'chat_message',
|
|
146
|
+
timestamp: new Date().toISOString(),
|
|
147
|
+
runId: 'chat',
|
|
148
|
+
payload: { role, content: message }
|
|
149
|
+
});
|
|
150
|
+
return { status: 'ok' };
|
|
151
|
+
}
|
|
152
|
+
function ensureString(value, name) {
|
|
153
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
154
|
+
throw new Error(`Missing ${name}.`);
|
|
155
|
+
}
|
|
156
|
+
return value;
|
|
157
|
+
}
|
|
158
|
+
function getOptionalString(value) {
|
|
159
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
160
|
+
}
|
|
161
|
+
function writeResponse(response) {
|
|
162
|
+
process.stdout.write(`${JSON.stringify(response)}\n`);
|
|
163
|
+
}
|
|
164
|
+
function formatError(error) {
|
|
165
|
+
return error instanceof Error ? error.message : String(error);
|
|
166
|
+
}
|
|
167
|
+
async function resolveNextPhase(workflowsRoot, currentPhase) {
|
|
168
|
+
const indexPath = path.join(workflowsRoot, 'tasklifecycle-long', 'index.md');
|
|
169
|
+
const raw = await fs.readFile(indexPath, 'utf-8');
|
|
170
|
+
const match = raw.match(/```yaml\n([\s\S]*?)```/);
|
|
171
|
+
if (!match) {
|
|
172
|
+
throw new Error('Missing workflow index YAML block.');
|
|
173
|
+
}
|
|
174
|
+
const yaml = match[1];
|
|
175
|
+
const data = matter(`---\n${yaml}\n---`).data;
|
|
176
|
+
const phases = data.aliases?.['tasklifecycle-long']?.phases;
|
|
177
|
+
if (!phases || typeof phases !== 'object') {
|
|
178
|
+
throw new Error('Invalid workflow index structure.');
|
|
179
|
+
}
|
|
180
|
+
const phaseIds = Object.entries(phases)
|
|
181
|
+
.sort(([a], [b]) => parseInt(a.split('_')[1] ?? '0', 10) - parseInt(b.split('_')[1] ?? '0', 10))
|
|
182
|
+
.map(([, value]) => {
|
|
183
|
+
const id = value.id;
|
|
184
|
+
if (!id) {
|
|
185
|
+
throw new Error('Phase entry missing id.');
|
|
186
|
+
}
|
|
187
|
+
return id;
|
|
188
|
+
});
|
|
189
|
+
const index = phaseIds.indexOf(currentPhase);
|
|
190
|
+
if (index === -1 || index === phaseIds.length - 1) {
|
|
191
|
+
throw new Error('No next phase available.');
|
|
192
|
+
}
|
|
193
|
+
return phaseIds[index + 1];
|
|
194
|
+
}
|
|
195
|
+
async function updateTaskPhase(taskPath, currentPhase, nextPhase, agent) {
|
|
196
|
+
const timestamp = new Date().toISOString();
|
|
197
|
+
const raw = await fs.readFile(taskPath, 'utf-8');
|
|
198
|
+
const lines = raw.split('\n');
|
|
199
|
+
let inYaml = false;
|
|
200
|
+
let activePhase = null;
|
|
201
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
202
|
+
const line = lines[i];
|
|
203
|
+
if (line.startsWith('```yaml')) {
|
|
204
|
+
inYaml = true;
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
if (inYaml && line.startsWith('```')) {
|
|
208
|
+
inYaml = false;
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
if (!inYaml) {
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
if (/^\s{6}phase-/.test(line)) {
|
|
215
|
+
const phaseMatch = line.match(/^\s{6}(phase-[^:]+):/);
|
|
216
|
+
activePhase = phaseMatch ? phaseMatch[1] : null;
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
if (/^\s{4}current:/.test(line)) {
|
|
220
|
+
lines[i] = line.replace(/current:.*$/, `current: "${nextPhase}"`);
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
if (/^\s{4}validated_by:/.test(line)) {
|
|
224
|
+
lines[i] = line.replace(/validated_by:.*$/, `validated_by: "${agent}"`);
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
if (/^\s{4}updated_at:/.test(line)) {
|
|
228
|
+
lines[i] = line.replace(/updated_at:.*$/, `updated_at: "${timestamp}"`);
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
if (activePhase !== currentPhase) {
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
if (/^\s{8}completed:/.test(line)) {
|
|
235
|
+
lines[i] = ' completed: true';
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
if (/^\s{8}validated_by:/.test(line)) {
|
|
239
|
+
lines[i] = ` validated_by: "${agent}"`;
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (/^\s{8}validated_at:/.test(line)) {
|
|
243
|
+
lines[i] = ` validated_at: "${timestamp}"`;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
await fs.writeFile(taskPath, lines.join('\n'));
|
|
247
|
+
return { updatedAt: timestamp };
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/runtime/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAwB,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAoBjE,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnF,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAY;IACvC,IAAI,OAAmB,CAAC;IACxB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAe,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,aAAa,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QAC9C,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAmB;IAChD,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,aAAa;YAChB,OAAO,SAAS,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACzC,KAAK,gBAAgB;YACnB,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC5C,KAAK,mBAAmB;YACtB,OAAO,cAAc,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC9C,KAAK,wBAAwB;YAC3B,OAAO,mBAAmB,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACnD,KAAK,uBAAuB;YAC1B,OAAO,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAClD,KAAK,uBAAuB;YAC1B,OAAO,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAClD,KAAK,oBAAoB;YACvB,OAAO,eAAe,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC/C,KAAK,cAAc;YACjB,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC1C;YACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAA+B;IACtD,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;QAC9B,QAAQ;QACR,KAAK;QACL,SAAS;QACT,UAAU;QACV,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACpE,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAA+B;IACzD,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;QACjC,QAAQ;QACR,KAAK;QACL,SAAS;QACT,UAAU;QACV,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACpE,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAA+B;IAC3D,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,MAA+B;IAChE,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC1E,OAAO,aAAa,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,MAA+B;IAC/D,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,aAAa,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAC7E,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,MAA+B;IAC/D,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,MAAM,OAAO,CAAC,IAAI,CAAC;QACjB,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,IAAI,CAAC,EAAE;QACd,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,EAAE;KACvC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AAC5G,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAA+B;IAC5D,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAiC,CAAC;IACvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAA+B;IACvD,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,MAAM,OAAO,CAAC,IAAI,CAAC;QACjB,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;KACpC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,IAAY;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,SAAS,aAAa,CAAC,QAAqB;IAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,aAAqB,EAAE,YAAoB;IACzE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,oBAAoB,EAAE,UAAU,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,IAA+B,CAAC;IACzE,MAAM,MAAM,GAAI,IAAI,CAAC,OAA2C,EAAE,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACjG,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;SAC/F,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE;QACjB,MAAM,EAAE,GAAI,KAAyB,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IACL,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,YAAoB,EAAE,SAAiB,EAAE,KAAa;IACrG,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS;QACX,CAAC;QACD,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACtD,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAChD,SAAS;QACX,CAAC;QACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,SAAS,GAAG,CAAC,CAAC;YAClE,SAAS;QACX,CAAC;QACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,kBAAkB,KAAK,GAAG,CAAC,CAAC;YACxE,SAAS;QACX,CAAC;QACD,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,SAAS,GAAG,CAAC,CAAC;YACxE,SAAS;QACX,CAAC;QACD,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC;YACrC,SAAS;QACX,CAAC;QACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,CAAC,CAAC,GAAG,0BAA0B,KAAK,GAAG,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,CAAC,CAAC,GAAG,0BAA0B,SAAS,GAAG,CAAC;QACpD,CAAC;IACH,CAAC;IACD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@christianmaf80/agentic-workflow",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.22.0-beta.4",
|
|
4
4
|
"description": "Portable agentic workflow orchestration system with strict identity and gate discipline",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"displayName": "Agentic Workflow",
|
|
7
|
-
"main": "./dist/
|
|
7
|
+
"main": "./dist/cli/index.js",
|
|
8
8
|
"engines": {
|
|
9
9
|
"vscode": "^1.108.2"
|
|
10
10
|
},
|
|
@@ -43,12 +43,11 @@
|
|
|
43
43
|
"dist/core",
|
|
44
44
|
"dist/infrastructure",
|
|
45
45
|
"dist/agent",
|
|
46
|
-
"dist/
|
|
46
|
+
"dist/runtime",
|
|
47
47
|
"bin",
|
|
48
48
|
"README.md",
|
|
49
49
|
"LICENSE",
|
|
50
|
-
"RELEASE_PROCESS.md"
|
|
51
|
-
"media"
|
|
50
|
+
"RELEASE_PROCESS.md"
|
|
52
51
|
],
|
|
53
52
|
"scripts": {
|
|
54
53
|
"build": "node scripts/clean-dist.mjs && tsc -p tsconfig.build.json && npm run copy-assets",
|
|
@@ -103,4 +102,4 @@
|
|
|
103
102
|
"overrides": {
|
|
104
103
|
"diff": "8.0.3"
|
|
105
104
|
}
|
|
106
|
-
}
|
|
105
|
+
}
|
package/media/agent-chat.svg
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none">
|
|
2
|
-
<path
|
|
3
|
-
d="M6.5 6.5h11a3 3 0 0 1 3 3v4a3 3 0 0 1-3 3H10l-3.5 3v-3H6.5a3 3 0 0 1-3-3v-4a3 3 0 0 1 3-3Z"
|
|
4
|
-
stroke="currentColor"
|
|
5
|
-
stroke-width="1.5"
|
|
6
|
-
stroke-linejoin="round"
|
|
7
|
-
/>
|
|
8
|
-
<path
|
|
9
|
-
d="M10 10.5h4"
|
|
10
|
-
stroke="currentColor"
|
|
11
|
-
stroke-width="1.5"
|
|
12
|
-
stroke-linecap="round"
|
|
13
|
-
/>
|
|
14
|
-
<path
|
|
15
|
-
d="M12 9v3"
|
|
16
|
-
stroke="currentColor"
|
|
17
|
-
stroke-width="1.5"
|
|
18
|
-
stroke-linecap="round"
|
|
19
|
-
/>
|
|
20
|
-
</svg>
|