@synergenius/flow-weaver-pack-weaver 0.9.193 → 0.9.196
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/bot/ai-client.d.ts +5 -0
- package/dist/bot/ai-client.d.ts.map +1 -1
- package/dist/bot/ai-client.js +43 -0
- package/dist/bot/ai-client.js.map +1 -1
- package/dist/bot/assistant-core.js +2 -2
- package/dist/bot/assistant-core.js.map +1 -1
- package/dist/bot/behavior-defaults.d.ts +3 -1
- package/dist/bot/behavior-defaults.d.ts.map +1 -1
- package/dist/bot/behavior-defaults.js +7 -0
- package/dist/bot/behavior-defaults.js.map +1 -1
- package/dist/bot/capability-registry.js +3 -3
- package/dist/bot/capability-registry.js.map +1 -1
- package/dist/bot/context-compactor.d.ts +35 -0
- package/dist/bot/context-compactor.d.ts.map +1 -0
- package/dist/bot/context-compactor.js +130 -0
- package/dist/bot/context-compactor.js.map +1 -0
- package/dist/bot/dream-task.d.ts +45 -0
- package/dist/bot/dream-task.d.ts.map +1 -0
- package/dist/bot/dream-task.js +125 -0
- package/dist/bot/dream-task.js.map +1 -0
- package/dist/bot/knowledge-store.d.ts +9 -0
- package/dist/bot/knowledge-store.d.ts.map +1 -1
- package/dist/bot/knowledge-store.js +21 -0
- package/dist/bot/knowledge-store.js.map +1 -1
- package/dist/bot/memory-extraction-worker.d.ts +14 -0
- package/dist/bot/memory-extraction-worker.d.ts.map +1 -0
- package/dist/bot/memory-extraction-worker.js +42 -0
- package/dist/bot/memory-extraction-worker.js.map +1 -0
- package/dist/bot/memory-extractor.d.ts +27 -0
- package/dist/bot/memory-extractor.d.ts.map +1 -0
- package/dist/bot/memory-extractor.js +155 -0
- package/dist/bot/memory-extractor.js.map +1 -0
- package/dist/bot/operations.d.ts +3 -1
- package/dist/bot/operations.d.ts.map +1 -1
- package/dist/bot/operations.js +3 -1
- package/dist/bot/operations.js.map +1 -1
- package/dist/bot/post-turn-hooks.d.ts +57 -0
- package/dist/bot/post-turn-hooks.d.ts.map +1 -0
- package/dist/bot/post-turn-hooks.js +108 -0
- package/dist/bot/post-turn-hooks.js.map +1 -0
- package/dist/bot/profile-types.d.ts +16 -0
- package/dist/bot/profile-types.d.ts.map +1 -1
- package/dist/bot/swarm-controller.d.ts +7 -0
- package/dist/bot/swarm-controller.d.ts.map +1 -1
- package/dist/bot/swarm-controller.js +121 -1
- package/dist/bot/swarm-controller.js.map +1 -1
- package/dist/bot/task-prompt-builder.js +35 -21
- package/dist/bot/task-prompt-builder.js.map +1 -1
- package/dist/bot/task-types.d.ts +13 -0
- package/dist/bot/task-types.d.ts.map +1 -1
- package/dist/bot/tool-registry.d.ts +13 -0
- package/dist/bot/tool-registry.d.ts.map +1 -1
- package/dist/bot/tool-registry.js +80 -0
- package/dist/bot/tool-registry.js.map +1 -1
- package/dist/bot/types.d.ts +2 -0
- package/dist/bot/types.d.ts.map +1 -1
- package/dist/node-types/agent-execute.d.ts.map +1 -1
- package/dist/node-types/agent-execute.js +38 -17
- package/dist/node-types/agent-execute.js.map +1 -1
- package/dist/node-types/build-context.d.ts +4 -3
- package/dist/node-types/build-context.d.ts.map +1 -1
- package/dist/node-types/build-context.js +37 -6
- package/dist/node-types/build-context.js.map +1 -1
- package/dist/node-types/receive-task.d.ts +2 -1
- package/dist/node-types/receive-task.d.ts.map +1 -1
- package/dist/node-types/receive-task.js +4 -1
- package/dist/node-types/receive-task.js.map +1 -1
- package/dist/node-types/review-result.d.ts +9 -0
- package/dist/node-types/review-result.d.ts.map +1 -1
- package/dist/node-types/review-result.js +20 -5
- package/dist/node-types/review-result.js.map +1 -1
- package/dist/node-types/verify-task.d.ts +22 -0
- package/dist/node-types/verify-task.d.ts.map +1 -0
- package/dist/node-types/verify-task.js +143 -0
- package/dist/node-types/verify-task.js.map +1 -0
- package/dist/ui/capability-editor.js +3 -3
- package/dist/ui/profile-editor.js +3 -3
- package/dist/ui/swarm-dashboard.js +3 -3
- package/dist/workflows/weaver-agent.d.ts +3 -3
- package/dist/workflows/weaver-agent.d.ts.map +1 -1
- package/dist/workflows/weaver-agent.js +267 -18
- package/dist/workflows/weaver-agent.js.map +1 -1
- package/dist/workflows/weaver-bot-batch.d.ts +3 -3
- package/dist/workflows/weaver-bot-batch.d.ts.map +1 -1
- package/dist/workflows/weaver-bot-batch.js +280 -24
- package/dist/workflows/weaver-bot-batch.js.map +1 -1
- package/dist/workflows/weaver-bot.d.ts +2 -0
- package/dist/workflows/weaver-bot.d.ts.map +1 -1
- package/dist/workflows/weaver-bot.js +15 -10
- package/dist/workflows/weaver-bot.js.map +1 -1
- package/flowweaver.manifest.json +1 -1
- package/package.json +3 -3
- package/src/bot/ai-client.ts +54 -0
- package/src/bot/assistant-core.ts +2 -2
- package/src/bot/behavior-defaults.ts +9 -1
- package/src/bot/capability-registry.ts +3 -3
- package/src/bot/context-compactor.ts +147 -0
- package/src/bot/dream-task.ts +167 -0
- package/src/bot/knowledge-store.ts +27 -0
- package/src/bot/memory-extraction-worker.ts +58 -0
- package/src/bot/memory-extractor.ts +213 -0
- package/src/bot/operations.ts +3 -1
- package/src/bot/post-turn-hooks.ts +137 -0
- package/src/bot/profile-types.ts +17 -0
- package/src/bot/swarm-controller.ts +129 -2
- package/src/bot/task-prompt-builder.ts +37 -21
- package/src/bot/task-types.ts +21 -0
- package/src/bot/tool-registry.ts +89 -0
- package/src/bot/types.ts +2 -0
- package/src/node-types/agent-execute.ts +44 -17
- package/src/node-types/build-context.ts +45 -7
- package/src/node-types/receive-task.ts +3 -0
- package/src/node-types/review-result.ts +22 -5
- package/src/node-types/verify-task.ts +181 -0
- package/src/workflows/weaver-agent.ts +429 -18
- package/src/workflows/weaver-bot-batch.ts +443 -24
- package/src/workflows/weaver-bot.ts +16 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-compactor.js","sourceRoot":"","sources":["../../src/bot/context-compactor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DreamTask — idle-time knowledge consolidation.
|
|
3
|
+
*
|
|
4
|
+
* Runs during swarm dispatch loop idle periods to extract cross-task
|
|
5
|
+
* patterns, detect recurring failures, clean stale knowledge, and
|
|
6
|
+
* convert InsightEngine findings into knowledge entries.
|
|
7
|
+
*
|
|
8
|
+
* Purely heuristic — no LLM calls. Designed to run within 500ms.
|
|
9
|
+
* Key namespaces (non-overlapping with memory-extractor's project:*):
|
|
10
|
+
* - pattern:hot-file:* — files modified by multiple tasks (24h TTL)
|
|
11
|
+
* - warning:recurring-failure:* — recurring failures (7d TTL)
|
|
12
|
+
* - insight:* — converted InsightEngine insights (7d TTL)
|
|
13
|
+
* - session:stats — rolling session statistics (overwritten each cycle)
|
|
14
|
+
*/
|
|
15
|
+
export interface DreamTaskOptions {
|
|
16
|
+
projectDir: string;
|
|
17
|
+
}
|
|
18
|
+
export interface DreamResult {
|
|
19
|
+
warningsStored: number;
|
|
20
|
+
staleEntriesCleaned: number;
|
|
21
|
+
insightsConverted: number;
|
|
22
|
+
durationMs: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class DreamTask {
|
|
25
|
+
private lastConsolidatedAt;
|
|
26
|
+
private readonly projectDir;
|
|
27
|
+
constructor(opts: DreamTaskOptions);
|
|
28
|
+
shouldRun(): boolean;
|
|
29
|
+
consolidate(): Promise<DreamResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Phase 1: Remove stale dream-sourced entries.
|
|
32
|
+
* Only cleans entries with source starting with 'dream-task'.
|
|
33
|
+
*/
|
|
34
|
+
private cleanStaleEntries;
|
|
35
|
+
/**
|
|
36
|
+
* Phase 2: Convert high-confidence InsightEngine insights to knowledge.
|
|
37
|
+
* Imports ProjectModel and InsightEngine dynamically to avoid circular deps.
|
|
38
|
+
*/
|
|
39
|
+
private convertInsights;
|
|
40
|
+
/**
|
|
41
|
+
* Phase 3: Update rolling session statistics.
|
|
42
|
+
*/
|
|
43
|
+
private updateSessionStats;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=dream-task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dream-task.d.ts","sourceRoot":"","sources":["../../src/bot/dream-task.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAkBH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,IAAI,EAAE,gBAAgB;IAIlC,SAAS,IAAI,OAAO;IAId,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IA8BzC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;;OAGG;YACW,eAAe;IA+B7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAmB3B"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DreamTask — idle-time knowledge consolidation.
|
|
3
|
+
*
|
|
4
|
+
* Runs during swarm dispatch loop idle periods to extract cross-task
|
|
5
|
+
* patterns, detect recurring failures, clean stale knowledge, and
|
|
6
|
+
* convert InsightEngine findings into knowledge entries.
|
|
7
|
+
*
|
|
8
|
+
* Purely heuristic — no LLM calls. Designed to run within 500ms.
|
|
9
|
+
* Key namespaces (non-overlapping with memory-extractor's project:*):
|
|
10
|
+
* - pattern:hot-file:* — files modified by multiple tasks (24h TTL)
|
|
11
|
+
* - warning:recurring-failure:* — recurring failures (7d TTL)
|
|
12
|
+
* - insight:* — converted InsightEngine insights (7d TTL)
|
|
13
|
+
* - session:stats — rolling session statistics (overwritten each cycle)
|
|
14
|
+
*/
|
|
15
|
+
import { KnowledgeStore } from './knowledge-store.js';
|
|
16
|
+
import { RunStore } from './run-store.js';
|
|
17
|
+
/** Minimum time between consolidation runs (ms). */
|
|
18
|
+
const COOLDOWN_MS = 60_000;
|
|
19
|
+
/** TTL for dream-sourced entries (ms). */
|
|
20
|
+
const STALE_THRESHOLD_MS = 7 * 24 * 60 * 60 * 1000;
|
|
21
|
+
/** TTL for hot-file patterns (ms). */
|
|
22
|
+
const HOT_FILE_TTL_MS = 24 * 60 * 60 * 1000;
|
|
23
|
+
/** Minimum confidence for converting insights to knowledge. */
|
|
24
|
+
const MIN_CONFIDENCE = 0.6;
|
|
25
|
+
export class DreamTask {
|
|
26
|
+
lastConsolidatedAt = 0;
|
|
27
|
+
projectDir;
|
|
28
|
+
constructor(opts) {
|
|
29
|
+
this.projectDir = opts.projectDir;
|
|
30
|
+
}
|
|
31
|
+
shouldRun() {
|
|
32
|
+
return Date.now() - this.lastConsolidatedAt >= COOLDOWN_MS;
|
|
33
|
+
}
|
|
34
|
+
async consolidate() {
|
|
35
|
+
const start = Date.now();
|
|
36
|
+
this.lastConsolidatedAt = start;
|
|
37
|
+
const store = new KnowledgeStore(this.projectDir);
|
|
38
|
+
let warningsStored = 0;
|
|
39
|
+
let staleEntriesCleaned = 0;
|
|
40
|
+
let insightsConverted = 0;
|
|
41
|
+
// Phase 1: Clean stale dream-sourced entries
|
|
42
|
+
staleEntriesCleaned = this.cleanStaleEntries(store);
|
|
43
|
+
// Phase 2: Convert InsightEngine findings to knowledge
|
|
44
|
+
try {
|
|
45
|
+
insightsConverted = await this.convertInsights(store);
|
|
46
|
+
}
|
|
47
|
+
catch { /* non-fatal */ }
|
|
48
|
+
// Phase 3: Session stats
|
|
49
|
+
try {
|
|
50
|
+
this.updateSessionStats(store);
|
|
51
|
+
}
|
|
52
|
+
catch { /* non-fatal */ }
|
|
53
|
+
return {
|
|
54
|
+
warningsStored,
|
|
55
|
+
staleEntriesCleaned,
|
|
56
|
+
insightsConverted,
|
|
57
|
+
durationMs: Date.now() - start,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Phase 1: Remove stale dream-sourced entries.
|
|
62
|
+
* Only cleans entries with source starting with 'dream-task'.
|
|
63
|
+
*/
|
|
64
|
+
cleanStaleEntries(store) {
|
|
65
|
+
const now = Date.now();
|
|
66
|
+
const entries = store.list();
|
|
67
|
+
let cleaned = 0;
|
|
68
|
+
for (const entry of entries) {
|
|
69
|
+
if (!entry.source?.startsWith('dream-task'))
|
|
70
|
+
continue;
|
|
71
|
+
const age = now - entry.createdAt;
|
|
72
|
+
const isHotFile = entry.key.startsWith('pattern:hot-file:');
|
|
73
|
+
const ttl = isHotFile ? HOT_FILE_TTL_MS : STALE_THRESHOLD_MS;
|
|
74
|
+
if (age > ttl) {
|
|
75
|
+
store.forget(entry.key);
|
|
76
|
+
cleaned++;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return cleaned;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Phase 2: Convert high-confidence InsightEngine insights to knowledge.
|
|
83
|
+
* Imports ProjectModel and InsightEngine dynamically to avoid circular deps.
|
|
84
|
+
*/
|
|
85
|
+
async convertInsights(store) {
|
|
86
|
+
const { ProjectModelStore } = await import('./project-model.js');
|
|
87
|
+
const { InsightEngine } = await import('./insight-engine.js');
|
|
88
|
+
const pms = new ProjectModelStore(this.projectDir);
|
|
89
|
+
const model = await pms.getOrBuild();
|
|
90
|
+
if (!model)
|
|
91
|
+
return 0;
|
|
92
|
+
const engine = new InsightEngine();
|
|
93
|
+
const insights = engine.analyze(model);
|
|
94
|
+
const existingKeys = new Set(store.list().map(e => e.key));
|
|
95
|
+
let converted = 0;
|
|
96
|
+
for (const insight of insights) {
|
|
97
|
+
if (insight.confidence < MIN_CONFIDENCE)
|
|
98
|
+
continue;
|
|
99
|
+
if (insight.severity !== 'warning' && insight.severity !== 'critical')
|
|
100
|
+
continue;
|
|
101
|
+
const key = `insight:${insight.type}:${insight.id}`;
|
|
102
|
+
if (existingKeys.has(key))
|
|
103
|
+
continue;
|
|
104
|
+
store.learn(key, `${insight.title}: ${insight.description}. Suggestion: ${insight.suggestion}`, 'dream-task:insight-engine');
|
|
105
|
+
converted++;
|
|
106
|
+
}
|
|
107
|
+
return converted;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Phase 3: Update rolling session statistics.
|
|
111
|
+
*/
|
|
112
|
+
updateSessionStats(store) {
|
|
113
|
+
try {
|
|
114
|
+
const runStore = new RunStore();
|
|
115
|
+
const recentRuns = runStore.list({ limit: 50 });
|
|
116
|
+
if (recentRuns.length === 0)
|
|
117
|
+
return;
|
|
118
|
+
const successCount = recentRuns.filter(r => r.success).length;
|
|
119
|
+
const avgDuration = Math.round(recentRuns.reduce((sum, r) => sum + (r.durationMs ?? 0), 0) / recentRuns.length);
|
|
120
|
+
store.learn('session:stats', `${recentRuns.length} recent runs, ${Math.round(successCount / recentRuns.length * 100)}% success, avg ${Math.round(avgDuration / 1000)}s`, 'dream-task');
|
|
121
|
+
}
|
|
122
|
+
catch { /* non-fatal */ }
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=dream-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dream-task.js","sourceRoot":"","sources":["../../src/bot/dream-task.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,15 @@ export declare class KnowledgeStore {
|
|
|
11
11
|
recall(query: string): KnowledgeEntry[];
|
|
12
12
|
forget(key: string): void;
|
|
13
13
|
list(): KnowledgeEntry[];
|
|
14
|
+
/**
|
|
15
|
+
* Build a compact manifest of knowledge entries for LLM relevance selection.
|
|
16
|
+
* Returns entries sorted newest-first, capped at maxEntries.
|
|
17
|
+
* Format per line: `- [N] key (Xd ago): truncated_value`
|
|
18
|
+
*/
|
|
19
|
+
static buildManifest(entries: KnowledgeEntry[], maxEntries?: number): {
|
|
20
|
+
manifest: string;
|
|
21
|
+
entries: KnowledgeEntry[];
|
|
22
|
+
};
|
|
14
23
|
private readAll;
|
|
15
24
|
private writeAll;
|
|
16
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-store.d.ts","sourceRoot":"","sources":["../../src/bot/knowledge-store.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAS;gBAEb,UAAU,CAAC,EAAE,MAAM;IAO/B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAOvD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;IAMvC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKzB,IAAI,IAAI,cAAc,EAAE;IAIxB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,QAAQ;CAQjB"}
|
|
1
|
+
{"version":3,"file":"knowledge-store.d.ts","sourceRoot":"","sources":["../../src/bot/knowledge-store.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAS;gBAEb,UAAU,CAAC,EAAE,MAAM;IAO/B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAOvD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;IAMvC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKzB,IAAI,IAAI,cAAc,EAAE;IAIxB;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAClB,OAAO,EAAE,cAAc,EAAE,EACzB,UAAU,SAAM,GACf;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,cAAc,EAAE,CAAA;KAAE;IAmBlD,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,QAAQ;CAQjB"}
|
|
@@ -28,6 +28,27 @@ export class KnowledgeStore {
|
|
|
28
28
|
list() {
|
|
29
29
|
return this.readAll();
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Build a compact manifest of knowledge entries for LLM relevance selection.
|
|
33
|
+
* Returns entries sorted newest-first, capped at maxEntries.
|
|
34
|
+
* Format per line: `- [N] key (Xd ago): truncated_value`
|
|
35
|
+
*/
|
|
36
|
+
static buildManifest(entries, maxEntries = 200) {
|
|
37
|
+
const now = Date.now();
|
|
38
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
39
|
+
const sorted = [...entries]
|
|
40
|
+
.sort((a, b) => b.createdAt - a.createdAt)
|
|
41
|
+
.slice(0, maxEntries);
|
|
42
|
+
const lines = sorted.map((e, i) => {
|
|
43
|
+
const ageMs = now - e.createdAt;
|
|
44
|
+
const age = ageMs < DAY_MS
|
|
45
|
+
? `${Math.round(ageMs / (60 * 60 * 1000))}h ago`
|
|
46
|
+
: `${Math.floor(ageMs / DAY_MS)}d ago`;
|
|
47
|
+
const value = e.value.length > 80 ? e.value.slice(0, 77) + '...' : e.value;
|
|
48
|
+
return `- [${i}] ${e.key} (${age}): ${value}`;
|
|
49
|
+
});
|
|
50
|
+
return { manifest: lines.join('\n'), entries: sorted };
|
|
51
|
+
}
|
|
31
52
|
readAll() {
|
|
32
53
|
if (!fs.existsSync(this.filePath))
|
|
33
54
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-store.js","sourceRoot":"","sources":["../../src/bot/knowledge-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAStC,MAAM,OAAO,cAAc;IACjB,QAAQ,CAAS;IAEzB,YAAY,UAAmB;QAC7B,MAAM,GAAG,GAAG,UAAU;YACpB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1H,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,KAAa,EAAE,MAAc;QAC9C,yDAAyD;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,8EAA8E;QAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAClH,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACpD,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;QACzD,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAqB,CAAC;IACzC,CAAC;IAEO,QAAQ,CAAC,OAAyB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,+EAA+E;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;QACtD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7G,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"knowledge-store.js","sourceRoot":"","sources":["../../src/bot/knowledge-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAStC,MAAM,OAAO,cAAc;IACjB,QAAQ,CAAS;IAEzB,YAAY,UAAmB;QAC7B,MAAM,GAAG,GAAG,UAAU;YACpB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1H,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,KAAa,EAAE,MAAc;QAC9C,yDAAyD;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,8EAA8E;QAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAClH,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAClB,OAAyB,EACzB,UAAU,GAAG,GAAG;QAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACnC,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC;aACxB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;aACzC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAExB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAChC,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC;YAChC,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM;gBACxB,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO;gBAChD,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;YACzC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC3E,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,KAAK,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACzD,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACpD,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;QACzD,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAqB,CAAC;IACzC,CAAC;IAEO,QAAQ,CAAC,OAAyB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,+EAA+E;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;QACtD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7G,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fire-and-forget memory extraction worker.
|
|
3
|
+
*
|
|
4
|
+
* Schedules heuristic extraction from completed runs into the KnowledgeStore.
|
|
5
|
+
* Uses AsyncMutex to serialize concurrent writes from parallel bot slots.
|
|
6
|
+
* Errors are caught and logged — never blocks task release.
|
|
7
|
+
*/
|
|
8
|
+
import type { Task, RunProgress } from './task-types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Schedule a fire-and-forget memory extraction.
|
|
11
|
+
* Returns immediately — extraction runs async in the background.
|
|
12
|
+
*/
|
|
13
|
+
export declare function scheduleMemoryExtraction(projectDir: string, task: Task, runProgress: RunProgress): void;
|
|
14
|
+
//# sourceMappingURL=memory-extraction-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-extraction-worker.d.ts","sourceRoot":"","sources":["../../src/bot/memory-extraction-worker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAOzD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,GACvB,IAAI,CAMN"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fire-and-forget memory extraction worker.
|
|
3
|
+
*
|
|
4
|
+
* Schedules heuristic extraction from completed runs into the KnowledgeStore.
|
|
5
|
+
* Uses AsyncMutex to serialize concurrent writes from parallel bot slots.
|
|
6
|
+
* Errors are caught and logged — never blocks task release.
|
|
7
|
+
*/
|
|
8
|
+
import { AsyncMutex } from './async-mutex.js';
|
|
9
|
+
import { KnowledgeStore } from './knowledge-store.js';
|
|
10
|
+
import { extractMemoryFacts } from './memory-extractor.js';
|
|
11
|
+
/** Maximum total knowledge entries before skipping pattern:* writes. */
|
|
12
|
+
const MAX_TOTAL_ENTRIES = 100;
|
|
13
|
+
const mutex = new AsyncMutex();
|
|
14
|
+
/**
|
|
15
|
+
* Schedule a fire-and-forget memory extraction.
|
|
16
|
+
* Returns immediately — extraction runs async in the background.
|
|
17
|
+
*/
|
|
18
|
+
export function scheduleMemoryExtraction(projectDir, task, runProgress) {
|
|
19
|
+
_doExtract(projectDir, task, runProgress).catch(err => {
|
|
20
|
+
if (process.env.WEAVER_VERBOSE) {
|
|
21
|
+
console.warn('[swarm] memory extraction failed:', err);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
async function _doExtract(projectDir, task, runProgress) {
|
|
26
|
+
await mutex.runExclusive(async () => {
|
|
27
|
+
const store = new KnowledgeStore(projectDir);
|
|
28
|
+
const existing = store.list();
|
|
29
|
+
const existingKeys = new Set(existing.map(e => e.key));
|
|
30
|
+
// If over the cap, only allow project:* overwrites (no new pattern:* entries)
|
|
31
|
+
const overCap = existing.length >= MAX_TOTAL_ENTRIES;
|
|
32
|
+
const facts = extractMemoryFacts(task, runProgress, existingKeys);
|
|
33
|
+
for (const fact of facts) {
|
|
34
|
+
// Skip pattern:* entries when over cap (project:* overwrites are always allowed)
|
|
35
|
+
if (overCap && fact.key.startsWith('pattern:') && !existingKeys.has(fact.key)) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
store.learn(fact.key, fact.value, `run:${runProgress.runId}`);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=memory-extraction-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-extraction-worker.js","sourceRoot":"","sources":["../../src/bot/memory-extraction-worker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,wEAAwE;AACxE,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;AAE/B;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAAkB,EAClB,IAAU,EACV,WAAwB;IAExB,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QACpD,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,UAAkB,EAClB,IAAU,EACV,WAAwB;IAExB,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;QAClC,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEvD,8EAA8E;QAC9E,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,iBAAiB,CAAC;QAErD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAElE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,iFAAiF;YACjF,IAAI,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9E,SAAS;YACX,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heuristic memory extraction from completed bot runs.
|
|
3
|
+
*
|
|
4
|
+
* Pure function — takes structured run data and returns candidate
|
|
5
|
+
* knowledge entries. No I/O, no LLM calls, no side effects.
|
|
6
|
+
*
|
|
7
|
+
* Key namespaces:
|
|
8
|
+
* - project:* — canonical project facts (test runner, build tool, linter, pkg manager)
|
|
9
|
+
* - pattern:blocker:* — recurring blockers
|
|
10
|
+
* - pattern:stagnation:* — stalled task patterns
|
|
11
|
+
* - pattern:success:* — first-run success patterns
|
|
12
|
+
*/
|
|
13
|
+
import type { Task, RunProgress } from './task-types.js';
|
|
14
|
+
export interface MemoryFact {
|
|
15
|
+
key: string;
|
|
16
|
+
value: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Extract generalizable facts from a completed run.
|
|
20
|
+
*
|
|
21
|
+
* @param task - The task that was executed
|
|
22
|
+
* @param rp - The run's progress/result data
|
|
23
|
+
* @param existingKeys - Keys already in the KnowledgeStore (for dedup)
|
|
24
|
+
* @returns Array of facts to persist (max MAX_FACTS_PER_RUN)
|
|
25
|
+
*/
|
|
26
|
+
export declare function extractMemoryFacts(task: Task, rp: RunProgress, existingKeys: Set<string>): MemoryFact[];
|
|
27
|
+
//# sourceMappingURL=memory-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-extractor.d.ts","sourceRoot":"","sources":["../../src/bot/memory-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AA8FD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,WAAW,EACf,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,UAAU,EAAE,CAwFd"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heuristic memory extraction from completed bot runs.
|
|
3
|
+
*
|
|
4
|
+
* Pure function — takes structured run data and returns candidate
|
|
5
|
+
* knowledge entries. No I/O, no LLM calls, no side effects.
|
|
6
|
+
*
|
|
7
|
+
* Key namespaces:
|
|
8
|
+
* - project:* — canonical project facts (test runner, build tool, linter, pkg manager)
|
|
9
|
+
* - pattern:blocker:* — recurring blockers
|
|
10
|
+
* - pattern:stagnation:* — stalled task patterns
|
|
11
|
+
* - pattern:success:* — first-run success patterns
|
|
12
|
+
*/
|
|
13
|
+
/** Maximum facts to extract per run. */
|
|
14
|
+
const MAX_FACTS_PER_RUN = 5;
|
|
15
|
+
/** Maximum key length. */
|
|
16
|
+
const MAX_KEY_LENGTH = 80;
|
|
17
|
+
/** Maximum value length. */
|
|
18
|
+
const MAX_VALUE_LENGTH = 500;
|
|
19
|
+
const TEST_RUNNERS = [
|
|
20
|
+
{ key: 'project:test-runner', pattern: /\bvitest\b/i, value: 'vitest' },
|
|
21
|
+
{ key: 'project:test-runner', pattern: /\bjest\b/i, value: 'jest' },
|
|
22
|
+
{ key: 'project:test-runner', pattern: /\bmocha\b/i, value: 'mocha' },
|
|
23
|
+
{ key: 'project:test-runner', pattern: /\bplaywright\b/i, value: 'playwright' },
|
|
24
|
+
];
|
|
25
|
+
const BUILD_TOOLS = [
|
|
26
|
+
{ key: 'project:build-tool', pattern: /\bvite\b/i, value: 'vite' },
|
|
27
|
+
{ key: 'project:build-tool', pattern: /\bwebpack\b/i, value: 'webpack' },
|
|
28
|
+
{ key: 'project:build-tool', pattern: /\besbuild\b/i, value: 'esbuild' },
|
|
29
|
+
{ key: 'project:build-tool', pattern: /\btsc\b/i, value: 'tsc' },
|
|
30
|
+
];
|
|
31
|
+
const PKG_MANAGERS = [
|
|
32
|
+
{ key: 'project:pkg-manager', pattern: /\bpnpm\b/i, value: 'pnpm' },
|
|
33
|
+
{ key: 'project:pkg-manager', pattern: /\byarn\b/i, value: 'yarn' },
|
|
34
|
+
{ key: 'project:pkg-manager', pattern: /\bbun\b/i, value: 'bun' },
|
|
35
|
+
{ key: 'project:pkg-manager', pattern: /\bnpm\b/i, value: 'npm' },
|
|
36
|
+
];
|
|
37
|
+
const LINTERS = [
|
|
38
|
+
{ key: 'project:linter', pattern: /\bbiome\b/i, value: 'biome' },
|
|
39
|
+
{ key: 'project:linter', pattern: /\beslint\b/i, value: 'eslint' },
|
|
40
|
+
{ key: 'project:linter', pattern: /\bprettier\b/i, value: 'prettier' },
|
|
41
|
+
];
|
|
42
|
+
// ── Helpers ──────────────────────────────────────────────────────────
|
|
43
|
+
function truncate(s, max) {
|
|
44
|
+
return s.length <= max ? s : s.slice(0, max - 3) + '...';
|
|
45
|
+
}
|
|
46
|
+
function normalizeBlockerKey(text) {
|
|
47
|
+
return text
|
|
48
|
+
.toLowerCase()
|
|
49
|
+
.replace(/[^a-z0-9\s-]/g, '')
|
|
50
|
+
.trim()
|
|
51
|
+
.replace(/\s+/g, '-')
|
|
52
|
+
.slice(0, 40);
|
|
53
|
+
}
|
|
54
|
+
function searchableText(rp) {
|
|
55
|
+
const parts = [rp.summary ?? ''];
|
|
56
|
+
if (rp.checks) {
|
|
57
|
+
for (const v of Object.values(rp.checks)) {
|
|
58
|
+
parts.push(String(v));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return parts.join(' ');
|
|
62
|
+
}
|
|
63
|
+
function detectFirst(text, rules) {
|
|
64
|
+
for (const rule of rules) {
|
|
65
|
+
if (rule.pattern.test(text)) {
|
|
66
|
+
return { key: rule.key, value: rule.value };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
function countExtensions(files) {
|
|
72
|
+
const counts = {};
|
|
73
|
+
for (const f of files) {
|
|
74
|
+
const ext = f.includes('.') ? '.' + f.split('.').pop() : '(none)';
|
|
75
|
+
counts[ext] = (counts[ext] ?? 0) + 1;
|
|
76
|
+
}
|
|
77
|
+
return counts;
|
|
78
|
+
}
|
|
79
|
+
// ── Main extraction ─────────────────────────────────────────────────
|
|
80
|
+
/**
|
|
81
|
+
* Extract generalizable facts from a completed run.
|
|
82
|
+
*
|
|
83
|
+
* @param task - The task that was executed
|
|
84
|
+
* @param rp - The run's progress/result data
|
|
85
|
+
* @param existingKeys - Keys already in the KnowledgeStore (for dedup)
|
|
86
|
+
* @returns Array of facts to persist (max MAX_FACTS_PER_RUN)
|
|
87
|
+
*/
|
|
88
|
+
export function extractMemoryFacts(task, rp, existingKeys) {
|
|
89
|
+
const facts = [];
|
|
90
|
+
const text = searchableText(rp);
|
|
91
|
+
const allFiles = [...rp.filesCreated, ...rp.filesModified];
|
|
92
|
+
// ── Project-level facts (overwrite existing) ──
|
|
93
|
+
const testRunner = detectFirst(text, TEST_RUNNERS);
|
|
94
|
+
if (testRunner)
|
|
95
|
+
facts.push(testRunner);
|
|
96
|
+
const buildTool = detectFirst(text, BUILD_TOOLS);
|
|
97
|
+
if (buildTool)
|
|
98
|
+
facts.push(buildTool);
|
|
99
|
+
const pkgManager = detectFirst(text, PKG_MANAGERS);
|
|
100
|
+
if (pkgManager)
|
|
101
|
+
facts.push(pkgManager);
|
|
102
|
+
const linter = detectFirst(text, LINTERS);
|
|
103
|
+
if (linter)
|
|
104
|
+
facts.push(linter);
|
|
105
|
+
// ── Source file pattern ──
|
|
106
|
+
if (allFiles.length >= 3 && !existingKeys.has('project:source-pattern')) {
|
|
107
|
+
const extCounts = countExtensions(allFiles);
|
|
108
|
+
const dominant = Object.entries(extCounts)
|
|
109
|
+
.sort(([, a], [, b]) => b - a)
|
|
110
|
+
.slice(0, 3)
|
|
111
|
+
.map(([ext, count]) => `${ext} (${count})`)
|
|
112
|
+
.join(', ');
|
|
113
|
+
facts.push({
|
|
114
|
+
key: 'project:source-pattern',
|
|
115
|
+
value: truncate(dominant, MAX_VALUE_LENGTH),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
// ── Blockers ──
|
|
119
|
+
if (rp.blockers && rp.blockers.length > 0) {
|
|
120
|
+
for (const blocker of rp.blockers.slice(0, 2)) {
|
|
121
|
+
const normalized = normalizeBlockerKey(blocker);
|
|
122
|
+
if (!normalized)
|
|
123
|
+
continue;
|
|
124
|
+
const key = truncate(`pattern:blocker:${normalized}`, MAX_KEY_LENGTH);
|
|
125
|
+
if (!existingKeys.has(key)) {
|
|
126
|
+
facts.push({ key, value: truncate(blocker, MAX_VALUE_LENGTH) });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// ── Stagnation pattern ──
|
|
131
|
+
if (rp.outcome === 'stalled' &&
|
|
132
|
+
task.context.stagnationCount > 1) {
|
|
133
|
+
const key = truncate(`pattern:stagnation:${task.id}`, MAX_KEY_LENGTH);
|
|
134
|
+
if (!existingKeys.has(key)) {
|
|
135
|
+
facts.push({
|
|
136
|
+
key,
|
|
137
|
+
value: truncate(`Task "${task.title}" stalled ${task.context.stagnationCount}x. Last: ${rp.summary}`, MAX_VALUE_LENGTH),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// ── First-run success pattern ──
|
|
142
|
+
if (rp.outcome === 'completed' &&
|
|
143
|
+
task.context.runHistory.length <= 1) {
|
|
144
|
+
const key = truncate(`pattern:success:${rp.profileId}:${task.complexity ?? 'unknown'}`, MAX_KEY_LENGTH);
|
|
145
|
+
if (!existingKeys.has(key)) {
|
|
146
|
+
facts.push({
|
|
147
|
+
key,
|
|
148
|
+
value: truncate(`Profile ${rp.profileId} completed ${task.complexity ?? 'unknown'}-complexity task on first run`, MAX_VALUE_LENGTH),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Enforce max facts per run
|
|
153
|
+
return facts.slice(0, MAX_FACTS_PER_RUN);
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=memory-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-extractor.js","sourceRoot":"","sources":["../../src/bot/memory-extractor.ts"],"names":[],"mappings":"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"}
|
package/dist/bot/operations.d.ts
CHANGED
|
@@ -18,8 +18,10 @@ export declare const OP_VALIDATE = "validate";
|
|
|
18
18
|
export declare const OP_TSC_CHECK = "tsc_check";
|
|
19
19
|
export declare const OP_RUN_TESTS = "run_tests";
|
|
20
20
|
export declare const OP_TASK_CREATE = "task_create";
|
|
21
|
-
export declare const
|
|
21
|
+
export declare const OP_LEARN = "learn";
|
|
22
22
|
export declare const OP_RECALL = "recall";
|
|
23
|
+
/** @deprecated Use OP_LEARN. Kept for step-executor backward compat. */
|
|
24
|
+
export declare const OP_REMEMBER = "remember";
|
|
23
25
|
export declare const OP_RESPOND = "respond";
|
|
24
26
|
export declare const OP_NO_OP = "no_op";
|
|
25
27
|
export declare const OP_NOOP = "noop";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/bot/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,eAAO,MAAM,aAAa,eAAe,CAAC;AAC1C,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,aAAa,eAAe,CAAC;AAC1C,eAAO,MAAM,aAAa,eAAe,CAAC;AAC1C,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AACpD,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAMlD,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,YAAY,cAAc,CAAC;AAMxC,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAM5C,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/bot/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,eAAO,MAAM,aAAa,eAAe,CAAC;AAC1C,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,aAAa,eAAe,CAAC;AAC1C,eAAO,MAAM,aAAa,eAAe,CAAC;AAC1C,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AACpD,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAMlD,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,YAAY,cAAc,CAAC;AAMxC,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAM5C,eAAO,MAAM,QAAQ,UAAU,CAAC;AAChC,eAAO,MAAM,SAAS,WAAW,CAAC;AAClC,wEAAwE;AACxE,eAAO,MAAM,WAAW,aAAa,CAAC;AAMtC,eAAO,MAAM,UAAU,YAAY,CAAC;AACpC,eAAO,MAAM,QAAQ,UAAU,CAAC;AAChC,eAAO,MAAM,OAAO,SAAS,CAAC;AAC9B,eAAO,MAAM,OAAO,SAAS,CAAC;AAC9B,eAAO,MAAM,WAAW,aAAa,CAAC;AAMtC,iFAAiF;AACjF,eAAO,MAAM,eAAe,qHASlB,CAAC;AAEX,4DAA4D;AAC5D,eAAO,MAAM,sBAAsB,aAMjC,CAAC;AAEH,sDAAsD;AACtD,eAAO,MAAM,eAAe,qHASlB,CAAC;AAEX,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
package/dist/bot/operations.js
CHANGED
|
@@ -30,8 +30,10 @@ export const OP_TASK_CREATE = 'task_create';
|
|
|
30
30
|
// ---------------------------------------------------------------------------
|
|
31
31
|
// Memory
|
|
32
32
|
// ---------------------------------------------------------------------------
|
|
33
|
-
export const
|
|
33
|
+
export const OP_LEARN = 'learn';
|
|
34
34
|
export const OP_RECALL = 'recall';
|
|
35
|
+
/** @deprecated Use OP_LEARN. Kept for step-executor backward compat. */
|
|
36
|
+
export const OP_REMEMBER = 'remember';
|
|
35
37
|
// ---------------------------------------------------------------------------
|
|
36
38
|
// Passthrough (no execution needed)
|
|
37
39
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/bot/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC;AAC1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AACpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAElD,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AAExC,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;AAE5C,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/bot/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC;AAC1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AACpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAElD,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AAExC,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;AAE5C,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC;AAClC,wEAAwE;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AAEtC,8EAA8E;AAC9E,oCAAoC;AACpC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AACpC,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC;AAChC,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC;AAC9B,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AAEtC,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,iFAAiF;AACjF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa;IACb,YAAY;IACZ,aAAa;IACb,aAAa;IACb,YAAY;IACZ,WAAW;IACX,cAAc;IACd,UAAU;CACF,CAAC;AAEX,4DAA4D;AAC5D,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IAC5C,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,WAAW;CACZ,CAAC,CAAC;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY;IACZ,aAAa;IACb,aAAa;IACb,aAAa;IACb,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,YAAY;CACJ,CAAC;AAEX,oFAAoF;AACpF,MAAM,UAAU,kBAAkB,CAAC,EAAU;IAC3C,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Post-turn hook system for the agent loop.
|
|
3
|
+
*
|
|
4
|
+
* Hooks run after each iteration of the agent loop, enabling cost checks,
|
|
5
|
+
* steering, progress reporting, and knowledge extraction between LLM turns.
|
|
6
|
+
*
|
|
7
|
+
* Hooks run sequentially (not parallel) so abort hooks fire before
|
|
8
|
+
* subsequent hooks. Errors are caught per-hook — a failing hook does
|
|
9
|
+
* not block other hooks or the agent loop.
|
|
10
|
+
*/
|
|
11
|
+
import type { TurnEndContext, TurnEndResult } from '@synergenius/flow-weaver/agent';
|
|
12
|
+
export type HookTiming = 'every' | 'final' | 'between';
|
|
13
|
+
export interface PostTurnHook {
|
|
14
|
+
name: string;
|
|
15
|
+
/** When to run: 'every' = every turn, 'final' = only final turn, 'between' = only between turns */
|
|
16
|
+
timing: HookTiming;
|
|
17
|
+
execute(context: TurnEndContext): Promise<PostTurnHookResult>;
|
|
18
|
+
}
|
|
19
|
+
export interface PostTurnHookResult {
|
|
20
|
+
/** If false, abort the agent loop. Default: true. */
|
|
21
|
+
continue?: boolean;
|
|
22
|
+
/** Optional message to inject into conversation (steering nudge). */
|
|
23
|
+
injectMessage?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class PostTurnHookRunner {
|
|
26
|
+
private hooks;
|
|
27
|
+
register(hook: PostTurnHook): void;
|
|
28
|
+
/** Returns the onTurnEnd callback to pass to runAgentLoop options. */
|
|
29
|
+
createCallback(): (ctx: TurnEndContext) => Promise<TurnEndResult | void>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Cost checkpoint — aborts the loop when cumulative cost exceeds budget.
|
|
33
|
+
* Subsumes the standalone #6 per-turn budget enforcement approach.
|
|
34
|
+
*/
|
|
35
|
+
export declare class CostCheckpointHook implements PostTurnHook {
|
|
36
|
+
private maxCost;
|
|
37
|
+
private model;
|
|
38
|
+
name: string;
|
|
39
|
+
timing: HookTiming;
|
|
40
|
+
constructor(maxCost: number, model: string);
|
|
41
|
+
execute(ctx: TurnEndContext): Promise<PostTurnHookResult>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Progress report — emits a stream event with turn progress for UI updates.
|
|
45
|
+
*/
|
|
46
|
+
export declare class ProgressReportHook implements PostTurnHook {
|
|
47
|
+
private emitEvent;
|
|
48
|
+
name: string;
|
|
49
|
+
timing: HookTiming;
|
|
50
|
+
constructor(emitEvent: (event: {
|
|
51
|
+
type: string;
|
|
52
|
+
timestamp: number;
|
|
53
|
+
data: Record<string, unknown>;
|
|
54
|
+
}) => void);
|
|
55
|
+
execute(ctx: TurnEndContext): Promise<PostTurnHookResult>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=post-turn-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-turn-hooks.d.ts","sourceRoot":"","sources":["../../src/bot/post-turn-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAOpF,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,mGAAmG;IACnG,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAsB;IAEnC,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAIlC,sEAAsE;IACtE,cAAc,IAAI,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CA8BzE;AAMD;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IAKnD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IALf,IAAI,SAAqB;IACzB,MAAM,EAAE,UAAU,CAAa;gBAGrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM;IAGjB,OAAO,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAchE;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IAKnD,OAAO,CAAC,SAAS;IAJnB,IAAI,SAAqB;IACzB,MAAM,EAAE,UAAU,CAAW;gBAGnB,SAAS,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,IAAI;IAGlG,OAAO,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAchE"}
|