@haoyiyin/workflow 0.2.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/README.md +168 -0
- package/SETUP.md +71 -0
- package/SKILL.md +68 -0
- package/USAGE.md +152 -0
- package/dist/bin/yi-workflow.d.ts +3 -0
- package/dist/bin/yi-workflow.d.ts.map +1 -0
- package/dist/bin/yi-workflow.js +39 -0
- package/dist/bin/yi-workflow.js.map +1 -0
- package/dist/src/agents/contracts.d.ts +120 -0
- package/dist/src/agents/contracts.d.ts.map +1 -0
- package/dist/src/agents/contracts.js +431 -0
- package/dist/src/agents/contracts.js.map +1 -0
- package/dist/src/agents/dispatcher-enhanced.d.ts +68 -0
- package/dist/src/agents/dispatcher-enhanced.d.ts.map +1 -0
- package/dist/src/agents/dispatcher-enhanced.js +290 -0
- package/dist/src/agents/dispatcher-enhanced.js.map +1 -0
- package/dist/src/agents/dispatcher.d.ts +107 -0
- package/dist/src/agents/dispatcher.d.ts.map +1 -0
- package/dist/src/agents/dispatcher.js +454 -0
- package/dist/src/agents/dispatcher.js.map +1 -0
- package/dist/src/agents/index.d.ts +11 -0
- package/dist/src/agents/index.d.ts.map +1 -0
- package/dist/src/agents/index.js +10 -0
- package/dist/src/agents/index.js.map +1 -0
- package/dist/src/agents/resilience.d.ts +86 -0
- package/dist/src/agents/resilience.d.ts.map +1 -0
- package/dist/src/agents/resilience.js +183 -0
- package/dist/src/agents/resilience.js.map +1 -0
- package/dist/src/agents/token-budget.d.ts +47 -0
- package/dist/src/agents/token-budget.d.ts.map +1 -0
- package/dist/src/agents/token-budget.js +63 -0
- package/dist/src/agents/token-budget.js.map +1 -0
- package/dist/src/agents/types.d.ts +59 -0
- package/dist/src/agents/types.d.ts.map +1 -0
- package/dist/src/agents/types.js +5 -0
- package/dist/src/agents/types.js.map +1 -0
- package/dist/src/guard/main-agent.d.ts +72 -0
- package/dist/src/guard/main-agent.d.ts.map +1 -0
- package/dist/src/guard/main-agent.js +184 -0
- package/dist/src/guard/main-agent.js.map +1 -0
- package/dist/src/hooks/builtin/index.d.ts +9 -0
- package/dist/src/hooks/builtin/index.d.ts.map +1 -0
- package/dist/src/hooks/builtin/index.js +9 -0
- package/dist/src/hooks/builtin/index.js.map +1 -0
- package/dist/src/hooks/builtin/on-error.d.ts +7 -0
- package/dist/src/hooks/builtin/on-error.d.ts.map +1 -0
- package/dist/src/hooks/builtin/on-error.js +15 -0
- package/dist/src/hooks/builtin/on-error.js.map +1 -0
- package/dist/src/hooks/builtin/post-execute.d.ts +7 -0
- package/dist/src/hooks/builtin/post-execute.d.ts.map +1 -0
- package/dist/src/hooks/builtin/post-execute.js +30 -0
- package/dist/src/hooks/builtin/post-execute.js.map +1 -0
- package/dist/src/hooks/builtin/post-plan.d.ts +7 -0
- package/dist/src/hooks/builtin/post-plan.d.ts.map +1 -0
- package/dist/src/hooks/builtin/post-plan.js +15 -0
- package/dist/src/hooks/builtin/post-plan.js.map +1 -0
- package/dist/src/hooks/builtin/pre-execute.d.ts +7 -0
- package/dist/src/hooks/builtin/pre-execute.d.ts.map +1 -0
- package/dist/src/hooks/builtin/pre-execute.js +22 -0
- package/dist/src/hooks/builtin/pre-execute.js.map +1 -0
- package/dist/src/hooks/builtin/pre-plan.d.ts +7 -0
- package/dist/src/hooks/builtin/pre-plan.d.ts.map +1 -0
- package/dist/src/hooks/builtin/pre-plan.js +19 -0
- package/dist/src/hooks/builtin/pre-plan.js.map +1 -0
- package/dist/src/hooks/index.d.ts +8 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/index.js +4 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/loader.d.ts +16 -0
- package/dist/src/hooks/loader.d.ts.map +1 -0
- package/dist/src/hooks/loader.js +77 -0
- package/dist/src/hooks/loader.js.map +1 -0
- package/dist/src/hooks/manager.d.ts +20 -0
- package/dist/src/hooks/manager.d.ts.map +1 -0
- package/dist/src/hooks/manager.js +76 -0
- package/dist/src/hooks/manager.js.map +1 -0
- package/dist/src/hooks/types-enhanced.d.ts +30 -0
- package/dist/src/hooks/types-enhanced.d.ts.map +1 -0
- package/dist/src/hooks/types-enhanced.js +22 -0
- package/dist/src/hooks/types-enhanced.js.map +1 -0
- package/dist/src/hooks/types.d.ts +27 -0
- package/dist/src/hooks/types.d.ts.map +1 -0
- package/dist/src/hooks/types.js +2 -0
- package/dist/src/hooks/types.js.map +1 -0
- package/dist/src/index.d.ts +43 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +41 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/persistence/index.d.ts +7 -0
- package/dist/src/persistence/index.d.ts.map +1 -0
- package/dist/src/persistence/index.js +6 -0
- package/dist/src/persistence/index.js.map +1 -0
- package/dist/src/persistence/plan-md.d.ts +11 -0
- package/dist/src/persistence/plan-md.d.ts.map +1 -0
- package/dist/src/persistence/plan-md.js +125 -0
- package/dist/src/persistence/plan-md.js.map +1 -0
- package/dist/src/persistence/state-md.d.ts +17 -0
- package/dist/src/persistence/state-md.d.ts.map +1 -0
- package/dist/src/persistence/state-md.js +143 -0
- package/dist/src/persistence/state-md.js.map +1 -0
- package/dist/src/persistence/types.d.ts +85 -0
- package/dist/src/persistence/types.d.ts.map +1 -0
- package/dist/src/persistence/types.js +5 -0
- package/dist/src/persistence/types.js.map +1 -0
- package/dist/src/router/classifier.d.ts +108 -0
- package/dist/src/router/classifier.d.ts.map +1 -0
- package/dist/src/router/classifier.js +476 -0
- package/dist/src/router/classifier.js.map +1 -0
- package/dist/src/router/guard.d.ts +128 -0
- package/dist/src/router/guard.d.ts.map +1 -0
- package/dist/src/router/guard.js +370 -0
- package/dist/src/router/guard.js.map +1 -0
- package/dist/src/router/index.d.ts +10 -0
- package/dist/src/router/index.d.ts.map +1 -0
- package/dist/src/router/index.js +8 -0
- package/dist/src/router/index.js.map +1 -0
- package/dist/src/router/router.d.ts +58 -0
- package/dist/src/router/router.d.ts.map +1 -0
- package/dist/src/router/router.js +78 -0
- package/dist/src/router/router.js.map +1 -0
- package/dist/src/router/types.d.ts +100 -0
- package/dist/src/router/types.d.ts.map +1 -0
- package/dist/src/router/types.js +24 -0
- package/dist/src/router/types.js.map +1 -0
- package/dist/src/skills/agents-md/index.d.ts +9 -0
- package/dist/src/skills/agents-md/index.d.ts.map +1 -0
- package/dist/src/skills/agents-md/index.js +28 -0
- package/dist/src/skills/agents-md/index.js.map +1 -0
- package/dist/src/skills/execute-plan/index.d.ts +141 -0
- package/dist/src/skills/execute-plan/index.d.ts.map +1 -0
- package/dist/src/skills/execute-plan/index.js +784 -0
- package/dist/src/skills/execute-plan/index.js.map +1 -0
- package/dist/src/skills/index.d.ts +14 -0
- package/dist/src/skills/index.d.ts.map +1 -0
- package/dist/src/skills/index.js +10 -0
- package/dist/src/skills/index.js.map +1 -0
- package/dist/src/skills/quick-task/index.d.ts +75 -0
- package/dist/src/skills/quick-task/index.d.ts.map +1 -0
- package/dist/src/skills/quick-task/index.js +284 -0
- package/dist/src/skills/quick-task/index.js.map +1 -0
- package/dist/src/skills/registry.d.ts +15 -0
- package/dist/src/skills/registry.d.ts.map +1 -0
- package/dist/src/skills/registry.js +44 -0
- package/dist/src/skills/registry.js.map +1 -0
- package/dist/src/skills/review-diff/index.d.ts +96 -0
- package/dist/src/skills/review-diff/index.d.ts.map +1 -0
- package/dist/src/skills/review-diff/index.js +316 -0
- package/dist/src/skills/review-diff/index.js.map +1 -0
- package/dist/src/skills/skill.d.ts +24 -0
- package/dist/src/skills/skill.d.ts.map +1 -0
- package/dist/src/skills/skill.js +39 -0
- package/dist/src/skills/skill.js.map +1 -0
- package/dist/src/skills/systematic-debugging/index.d.ts +90 -0
- package/dist/src/skills/systematic-debugging/index.d.ts.map +1 -0
- package/dist/src/skills/systematic-debugging/index.js +305 -0
- package/dist/src/skills/systematic-debugging/index.js.map +1 -0
- package/dist/src/skills/tdd/index.d.ts +103 -0
- package/dist/src/skills/tdd/index.d.ts.map +1 -0
- package/dist/src/skills/tdd/index.js +338 -0
- package/dist/src/skills/tdd/index.js.map +1 -0
- package/dist/src/skills/to-plan/index-enhanced.d.ts +100 -0
- package/dist/src/skills/to-plan/index-enhanced.d.ts.map +1 -0
- package/dist/src/skills/to-plan/index-enhanced.js +452 -0
- package/dist/src/skills/to-plan/index-enhanced.js.map +1 -0
- package/dist/src/skills/to-plan/index.d.ts +131 -0
- package/dist/src/skills/to-plan/index.d.ts.map +1 -0
- package/dist/src/skills/to-plan/index.js +460 -0
- package/dist/src/skills/to-plan/index.js.map +1 -0
- package/dist/src/skills/types.d.ts +44 -0
- package/dist/src/skills/types.d.ts.map +1 -0
- package/dist/src/skills/types.js +2 -0
- package/dist/src/skills/types.js.map +1 -0
- package/dist/src/state/cleanup.d.ts +22 -0
- package/dist/src/state/cleanup.d.ts.map +1 -0
- package/dist/src/state/cleanup.js +87 -0
- package/dist/src/state/cleanup.js.map +1 -0
- package/dist/src/state/index.d.ts +9 -0
- package/dist/src/state/index.d.ts.map +1 -0
- package/dist/src/state/index.js +5 -0
- package/dist/src/state/index.js.map +1 -0
- package/dist/src/state/manager.d.ts +15 -0
- package/dist/src/state/manager.d.ts.map +1 -0
- package/dist/src/state/manager.js +73 -0
- package/dist/src/state/manager.js.map +1 -0
- package/dist/src/state/persistence.d.ts +13 -0
- package/dist/src/state/persistence.d.ts.map +1 -0
- package/dist/src/state/persistence.js +68 -0
- package/dist/src/state/persistence.js.map +1 -0
- package/dist/src/state/types.d.ts +26 -0
- package/dist/src/state/types.d.ts.map +1 -0
- package/dist/src/state/types.js +2 -0
- package/dist/src/state/types.js.map +1 -0
- package/dist/src/state/validator.d.ts +12 -0
- package/dist/src/state/validator.d.ts.map +1 -0
- package/dist/src/state/validator.js +56 -0
- package/dist/src/state/validator.js.map +1 -0
- package/dist/src/types.d.ts +83 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +5 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/compress.d.ts +37 -0
- package/dist/src/utils/compress.d.ts.map +1 -0
- package/dist/src/utils/compress.js +298 -0
- package/dist/src/utils/compress.js.map +1 -0
- package/dist/src/utils/git.d.ts +9 -0
- package/dist/src/utils/git.d.ts.map +1 -0
- package/dist/src/utils/git.js +81 -0
- package/dist/src/utils/git.js.map +1 -0
- package/dist/src/utils/index.d.ts +7 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +7 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.d.ts +6 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +19 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/paths.d.ts +12 -0
- package/dist/src/utils/paths.d.ts.map +1 -0
- package/dist/src/utils/paths.js +44 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/package.json +76 -0
- package/scripts/postinstall.js +69 -0
- package/yi-workflow.js +17 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State module index
|
|
3
|
+
*/
|
|
4
|
+
export type { ExecutionState, StateManager, PersistenceLayer, StateOptions } from './types.js';
|
|
5
|
+
export { StateManagerImpl, createStateManager } from './manager.js';
|
|
6
|
+
export { FilePersistence, createPersistence } from './persistence.js';
|
|
7
|
+
export { validateState, isValidState, sanitizeState } from './validator.js';
|
|
8
|
+
export { cleanupOldStates, cleanupEmptyDirs, getStateStats } from './cleanup.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/state/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9F,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC3E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { StateManagerImpl, createStateManager } from './manager.js';
|
|
2
|
+
export { FilePersistence, createPersistence } from './persistence.js';
|
|
3
|
+
export { validateState, isValidState, sanitizeState } from './validator.js';
|
|
4
|
+
export { cleanupOldStates, cleanupEmptyDirs, getStateStats } from './cleanup.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/state/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC3E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ExecutionState, StateManager, PersistenceLayer } from './types.js';
|
|
2
|
+
import type { WorkflowConfig } from '../types.js';
|
|
3
|
+
export declare class StateManagerImpl implements StateManager {
|
|
4
|
+
private persistence;
|
|
5
|
+
constructor(persistence: PersistenceLayer);
|
|
6
|
+
load(id: string): Promise<ExecutionState | null>;
|
|
7
|
+
save(state: ExecutionState): Promise<void>;
|
|
8
|
+
create(planId: string, _config: WorkflowConfig): Promise<ExecutionState>;
|
|
9
|
+
update(id: string, updates: Partial<ExecutionState>): Promise<ExecutionState>;
|
|
10
|
+
archive(id: string): Promise<void>;
|
|
11
|
+
list(): Promise<ExecutionState[]>;
|
|
12
|
+
getActive(): Promise<ExecutionState | null>;
|
|
13
|
+
}
|
|
14
|
+
export declare function createStateManager(config: WorkflowConfig): StateManager;
|
|
15
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/state/manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EACjB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAGjD,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,WAAW,CAAkB;gBAEzB,WAAW,EAAE,gBAAgB;IAInC,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAIhD,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAgBxE,MAAM,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC;IAgBpB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAcjC,SAAS,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAIlD;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,GACrB,YAAY,CAGd"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State manager implementation
|
|
3
|
+
*/
|
|
4
|
+
import { nanoid } from 'nanoid';
|
|
5
|
+
import { createPersistence } from './persistence.js';
|
|
6
|
+
export class StateManagerImpl {
|
|
7
|
+
persistence;
|
|
8
|
+
constructor(persistence) {
|
|
9
|
+
this.persistence = persistence;
|
|
10
|
+
}
|
|
11
|
+
async load(id) {
|
|
12
|
+
return this.persistence.read(id);
|
|
13
|
+
}
|
|
14
|
+
async save(state) {
|
|
15
|
+
const updated = {
|
|
16
|
+
...state,
|
|
17
|
+
updatedAt: new Date(),
|
|
18
|
+
};
|
|
19
|
+
await this.persistence.write(updated);
|
|
20
|
+
}
|
|
21
|
+
async create(planId, _config) {
|
|
22
|
+
const now = new Date();
|
|
23
|
+
const state = {
|
|
24
|
+
id: nanoid(),
|
|
25
|
+
planId,
|
|
26
|
+
completedTasks: [],
|
|
27
|
+
failedTasks: [],
|
|
28
|
+
startedAt: now,
|
|
29
|
+
updatedAt: now,
|
|
30
|
+
status: 'running',
|
|
31
|
+
context: {},
|
|
32
|
+
};
|
|
33
|
+
await this.persistence.write(state);
|
|
34
|
+
return state;
|
|
35
|
+
}
|
|
36
|
+
async update(id, updates) {
|
|
37
|
+
const existing = await this.persistence.read(id);
|
|
38
|
+
if (!existing) {
|
|
39
|
+
throw new Error(`State not found: ${id}`);
|
|
40
|
+
}
|
|
41
|
+
const updated = {
|
|
42
|
+
...existing,
|
|
43
|
+
...updates,
|
|
44
|
+
id: existing.id,
|
|
45
|
+
updatedAt: new Date(),
|
|
46
|
+
};
|
|
47
|
+
await this.persistence.write(updated);
|
|
48
|
+
return updated;
|
|
49
|
+
}
|
|
50
|
+
async archive(id) {
|
|
51
|
+
await this.persistence.archive(id);
|
|
52
|
+
}
|
|
53
|
+
async list() {
|
|
54
|
+
const ids = await this.persistence.list();
|
|
55
|
+
const states = [];
|
|
56
|
+
for (const id of ids) {
|
|
57
|
+
const state = await this.persistence.read(id);
|
|
58
|
+
if (state) {
|
|
59
|
+
states.push(state);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return states.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
|
|
63
|
+
}
|
|
64
|
+
async getActive() {
|
|
65
|
+
const states = await this.list();
|
|
66
|
+
return states.find((s) => s.status === 'running') || null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export function createStateManager(config) {
|
|
70
|
+
const persistence = createPersistence(config.statePath);
|
|
71
|
+
return new StateManagerImpl(persistence);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/state/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PersistenceLayer, ExecutionState } from './types.js';
|
|
2
|
+
export declare class FilePersistence implements PersistenceLayer {
|
|
3
|
+
private basePath;
|
|
4
|
+
private archivePath;
|
|
5
|
+
constructor(basePath: string);
|
|
6
|
+
read(id: string): Promise<ExecutionState | null>;
|
|
7
|
+
write(state: ExecutionState): Promise<void>;
|
|
8
|
+
delete(id: string): Promise<void>;
|
|
9
|
+
list(): Promise<string[]>;
|
|
10
|
+
archive(id: string): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare function createPersistence(basePath: string): PersistenceLayer;
|
|
13
|
+
//# sourceMappingURL=persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/state/persistence.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAGlE,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,WAAW,CAAQ;gBAEf,QAAQ,EAAE,MAAM;IAKtB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAoBhD,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQzB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAWzC;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAEpE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-based persistence layer for state
|
|
3
|
+
*/
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { readFile, writeFile, mkdir, readdir, rename } from 'fs/promises';
|
|
6
|
+
import { existsSync } from 'fs';
|
|
7
|
+
import { validateState, sanitizeState } from './validator.js';
|
|
8
|
+
export class FilePersistence {
|
|
9
|
+
basePath;
|
|
10
|
+
archivePath;
|
|
11
|
+
constructor(basePath) {
|
|
12
|
+
this.basePath = join(basePath, 'active');
|
|
13
|
+
this.archivePath = join(basePath, 'archive');
|
|
14
|
+
}
|
|
15
|
+
async read(id) {
|
|
16
|
+
const path = join(this.basePath, `${id}.json`);
|
|
17
|
+
try {
|
|
18
|
+
const data = await readFile(path, 'utf-8');
|
|
19
|
+
const parsed = JSON.parse(data);
|
|
20
|
+
// Validate state structure
|
|
21
|
+
const validation = validateState(parsed);
|
|
22
|
+
if (!validation.valid) {
|
|
23
|
+
console.warn(`[State] Invalid state file ${id}:`, validation.errors);
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
// Sanitize dates and arrays
|
|
27
|
+
return sanitizeState(parsed);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async write(state) {
|
|
34
|
+
await mkdir(this.basePath, { recursive: true });
|
|
35
|
+
const path = join(this.basePath, `${state.id}.json`);
|
|
36
|
+
await writeFile(path, JSON.stringify(state, null, 2));
|
|
37
|
+
}
|
|
38
|
+
async delete(id) {
|
|
39
|
+
const path = join(this.basePath, `${id}.json`);
|
|
40
|
+
try {
|
|
41
|
+
await import('fs/promises').then((fs) => fs.unlink(path));
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Ignore if file doesn't exist
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async list() {
|
|
48
|
+
await mkdir(this.basePath, { recursive: true });
|
|
49
|
+
const files = await readdir(this.basePath);
|
|
50
|
+
return files
|
|
51
|
+
.filter((f) => f.endsWith('.json'))
|
|
52
|
+
.map((f) => f.replace('.json', ''));
|
|
53
|
+
}
|
|
54
|
+
async archive(id) {
|
|
55
|
+
const sourcePath = join(this.basePath, `${id}.json`);
|
|
56
|
+
const date = new Date().toISOString().split('T')[0];
|
|
57
|
+
const archiveDir = join(this.archivePath, date);
|
|
58
|
+
await mkdir(archiveDir, { recursive: true });
|
|
59
|
+
const targetPath = join(archiveDir, `${id}.json`);
|
|
60
|
+
if (existsSync(sourcePath)) {
|
|
61
|
+
await rename(sourcePath, targetPath);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function createPersistence(basePath) {
|
|
66
|
+
return new FilePersistence(basePath);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/state/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State management types
|
|
3
|
+
*/
|
|
4
|
+
import type { ExecutionState as CoreExecutionState, WorkflowConfig } from '../types.js';
|
|
5
|
+
export type ExecutionState = CoreExecutionState;
|
|
6
|
+
export interface StateManager {
|
|
7
|
+
load(id: string): Promise<ExecutionState | null>;
|
|
8
|
+
save(state: ExecutionState): Promise<void>;
|
|
9
|
+
create(planId: string, config: WorkflowConfig): Promise<ExecutionState>;
|
|
10
|
+
update(id: string, updates: Partial<ExecutionState>): Promise<ExecutionState>;
|
|
11
|
+
archive(id: string): Promise<void>;
|
|
12
|
+
list(): Promise<ExecutionState[]>;
|
|
13
|
+
getActive(): Promise<ExecutionState | null>;
|
|
14
|
+
}
|
|
15
|
+
export interface PersistenceLayer {
|
|
16
|
+
read(id: string): Promise<ExecutionState | null>;
|
|
17
|
+
write(state: ExecutionState): Promise<void>;
|
|
18
|
+
delete(id: string): Promise<void>;
|
|
19
|
+
list(): Promise<string[]>;
|
|
20
|
+
archive(id: string): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
export interface StateOptions {
|
|
23
|
+
statePath: string;
|
|
24
|
+
autoArchive: boolean;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/state/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAGvF,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAAA;AAE/C,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAChD,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACvE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7E,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IACjC,SAAS,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;CAC5C;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAChD,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACzB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,OAAO,CAAA;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/state/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State validation utilities
|
|
3
|
+
*/
|
|
4
|
+
import type { ExecutionState } from '../types.js';
|
|
5
|
+
export interface ValidationResult {
|
|
6
|
+
valid: boolean;
|
|
7
|
+
errors: string[];
|
|
8
|
+
}
|
|
9
|
+
export declare function validateState(state: unknown): ValidationResult;
|
|
10
|
+
export declare function isValidState(state: unknown): state is ExecutionState;
|
|
11
|
+
export declare function sanitizeState(state: ExecutionState): ExecutionState;
|
|
12
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/state/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CA+C9D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAEpE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAcnE"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export function validateState(state) {
|
|
2
|
+
const errors = [];
|
|
3
|
+
if (!state || typeof state !== 'object') {
|
|
4
|
+
return { valid: false, errors: ['State must be an object'] };
|
|
5
|
+
}
|
|
6
|
+
const s = state;
|
|
7
|
+
// Required fields
|
|
8
|
+
if (!s.id || typeof s.id !== 'string') {
|
|
9
|
+
errors.push('State must have a string id');
|
|
10
|
+
}
|
|
11
|
+
if (!s.planId || typeof s.planId !== 'string') {
|
|
12
|
+
errors.push('State must have a string planId');
|
|
13
|
+
}
|
|
14
|
+
if (!s.status || !['running', 'paused', 'completed', 'failed', 'cancelled'].includes(s.status)) {
|
|
15
|
+
errors.push('State must have a valid status');
|
|
16
|
+
}
|
|
17
|
+
if (!s.startedAt) {
|
|
18
|
+
errors.push('State must have startedAt');
|
|
19
|
+
}
|
|
20
|
+
if (!s.updatedAt) {
|
|
21
|
+
errors.push('State must have updatedAt');
|
|
22
|
+
}
|
|
23
|
+
// Optional arrays
|
|
24
|
+
if (s.completedTasks && !Array.isArray(s.completedTasks)) {
|
|
25
|
+
errors.push('completedTasks must be an array');
|
|
26
|
+
}
|
|
27
|
+
if (s.failedTasks && !Array.isArray(s.failedTasks)) {
|
|
28
|
+
errors.push('failedTasks must be an array');
|
|
29
|
+
}
|
|
30
|
+
if (s.context && typeof s.context !== 'object') {
|
|
31
|
+
errors.push('context must be an object');
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
valid: errors.length === 0,
|
|
35
|
+
errors,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function isValidState(state) {
|
|
39
|
+
return validateState(state).valid;
|
|
40
|
+
}
|
|
41
|
+
export function sanitizeState(state) {
|
|
42
|
+
return {
|
|
43
|
+
...state,
|
|
44
|
+
id: String(state.id),
|
|
45
|
+
planId: String(state.planId),
|
|
46
|
+
completedTasks: Array.isArray(state.completedTasks) ? state.completedTasks : [],
|
|
47
|
+
failedTasks: Array.isArray(state.failedTasks) ? state.failedTasks : [],
|
|
48
|
+
status: state.status || 'running',
|
|
49
|
+
context: typeof state.context === 'object' && state.context !== null
|
|
50
|
+
? state.context
|
|
51
|
+
: {},
|
|
52
|
+
startedAt: state.startedAt ? new Date(state.startedAt) : new Date(),
|
|
53
|
+
updatedAt: state.updatedAt ? new Date(state.updatedAt) : new Date(),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/state/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global type definitions for yi-workflow
|
|
3
|
+
*/
|
|
4
|
+
export interface WorkflowConfig {
|
|
5
|
+
planPath: string;
|
|
6
|
+
statePath: string;
|
|
7
|
+
autoCleanup: boolean;
|
|
8
|
+
autoMerge: boolean;
|
|
9
|
+
defaultModel: string;
|
|
10
|
+
maxConcurrent: number;
|
|
11
|
+
}
|
|
12
|
+
export interface Plan {
|
|
13
|
+
id: string;
|
|
14
|
+
title: string;
|
|
15
|
+
description: string;
|
|
16
|
+
tasks: Task[];
|
|
17
|
+
createdAt: Date;
|
|
18
|
+
updatedAt: Date;
|
|
19
|
+
status: PlanStatus;
|
|
20
|
+
}
|
|
21
|
+
export type PlanStatus = 'draft' | 'approved' | 'in_progress' | 'completed' | 'cancelled';
|
|
22
|
+
export interface Task {
|
|
23
|
+
id: string;
|
|
24
|
+
title: string;
|
|
25
|
+
description: string;
|
|
26
|
+
status: TaskStatus;
|
|
27
|
+
dependencies: string[];
|
|
28
|
+
estimatedHours?: number;
|
|
29
|
+
actualHours?: number;
|
|
30
|
+
}
|
|
31
|
+
export type TaskStatus = 'pending' | 'in_progress' | 'completed' | 'blocked';
|
|
32
|
+
export interface ExecutionState {
|
|
33
|
+
id: string;
|
|
34
|
+
planId: string;
|
|
35
|
+
currentTaskId?: string;
|
|
36
|
+
completedTasks: string[];
|
|
37
|
+
failedTasks: string[];
|
|
38
|
+
startedAt: Date;
|
|
39
|
+
updatedAt: Date;
|
|
40
|
+
status: ExecutionStatus;
|
|
41
|
+
context: Record<string, unknown>;
|
|
42
|
+
}
|
|
43
|
+
export type ExecutionStatus = 'running' | 'paused' | 'completed' | 'failed' | 'cancelled';
|
|
44
|
+
export type HookType = 'pre-plan' | 'post-plan' | 'pre-execute' | 'post-execute' | 'on-error';
|
|
45
|
+
export interface HookContext {
|
|
46
|
+
config: WorkflowConfig;
|
|
47
|
+
state?: ExecutionState;
|
|
48
|
+
plan?: Plan;
|
|
49
|
+
error?: Error;
|
|
50
|
+
}
|
|
51
|
+
export interface HookDefinition {
|
|
52
|
+
type: HookType;
|
|
53
|
+
name: string;
|
|
54
|
+
execute: (context: HookContext) => Promise<void> | void;
|
|
55
|
+
}
|
|
56
|
+
export interface SkillDefinition {
|
|
57
|
+
name: string;
|
|
58
|
+
description: string;
|
|
59
|
+
requires?: string[];
|
|
60
|
+
hooks?: {
|
|
61
|
+
pre?: HookDefinition[];
|
|
62
|
+
post?: HookDefinition[];
|
|
63
|
+
error?: HookDefinition[];
|
|
64
|
+
};
|
|
65
|
+
execute: (input: unknown, context: SkillContext) => Promise<unknown>;
|
|
66
|
+
}
|
|
67
|
+
export interface SkillContext {
|
|
68
|
+
config: WorkflowConfig;
|
|
69
|
+
state: ExecutionState;
|
|
70
|
+
logger: Logger;
|
|
71
|
+
}
|
|
72
|
+
export interface Logger {
|
|
73
|
+
info: (message: string, ...args: unknown[]) => void;
|
|
74
|
+
warn: (message: string, ...args: unknown[]) => void;
|
|
75
|
+
error: (message: string, ...args: unknown[]) => void;
|
|
76
|
+
debug: (message: string, ...args: unknown[]) => void;
|
|
77
|
+
}
|
|
78
|
+
export interface CLIOptions {
|
|
79
|
+
verbose?: boolean;
|
|
80
|
+
config?: string;
|
|
81
|
+
model?: string;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text Compression Utility - Compresses verbose output to terse prose
|
|
3
|
+
*
|
|
4
|
+
* Pure text transformation. No subagent dispatch needed.
|
|
5
|
+
* Use case: Take verbose AI output and compress it to essential facts.
|
|
6
|
+
*
|
|
7
|
+
* Pattern: Input text → Compression rules → Terse output
|
|
8
|
+
*/
|
|
9
|
+
export interface CompressOptions {
|
|
10
|
+
style: 'terse' | 'bullets' | 'oneline';
|
|
11
|
+
maxLength?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface CompressResult {
|
|
14
|
+
compressed: string;
|
|
15
|
+
originalLength: number;
|
|
16
|
+
compressedLength: number;
|
|
17
|
+
compressionRatio: number;
|
|
18
|
+
sectionsRemoved: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Compress verbose text through a pipeline of transformations.
|
|
22
|
+
* All steps are pure functions that return new strings (immutable pattern).
|
|
23
|
+
*/
|
|
24
|
+
export declare function compressText(text: string, options: CompressOptions): CompressResult;
|
|
25
|
+
/**
|
|
26
|
+
* Convenience function for terse compression
|
|
27
|
+
*/
|
|
28
|
+
export declare function compressTerse(text: string, maxLength?: number): string;
|
|
29
|
+
/**
|
|
30
|
+
* Convenience function for bullet compression
|
|
31
|
+
*/
|
|
32
|
+
export declare function compressBullets(text: string, maxLength?: number): string;
|
|
33
|
+
/**
|
|
34
|
+
* Convenience function for one-line compression
|
|
35
|
+
*/
|
|
36
|
+
export declare function compressOneLine(text: string, maxLength?: number): string;
|
|
37
|
+
//# sourceMappingURL=compress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../../../src/utils/compress.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;CACxB;AAiPD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,cAAc,CAwDnF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAExE"}
|