phaibel 4.0.7 → 4.0.21
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 +229 -245
- package/dist/commands/chat.d.ts +5 -2
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +168 -172
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/cron.d.ts.map +1 -1
- package/dist/commands/cron.js +1 -0
- package/dist/commands/cron.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +54 -52
- package/dist/commands/init.js.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/entities/entity-summary.js +3 -3
- package/dist/entities/entity-type-config.d.ts +3 -0
- package/dist/entities/entity-type-config.d.ts.map +1 -1
- package/dist/entities/entity-type-config.js +67 -1
- package/dist/entities/entity-type-config.js.map +1 -1
- package/dist/entities/entity-types-defaults.d.ts.map +1 -1
- package/dist/entities/entity-types-defaults.js +2 -0
- package/dist/entities/entity-types-defaults.js.map +1 -1
- package/dist/entities/spawner.d.ts.map +1 -1
- package/dist/entities/spawner.js +4 -2
- package/dist/entities/spawner.js.map +1 -1
- package/dist/feral/catalog/entity-catalog-source.js +31 -31
- package/dist/feral/node-code/abstract-node-code.js +1 -1
- package/dist/feral/node-code/abstract-node-code.js.map +1 -1
- package/dist/feral/node-code/data/set-context-value-node-code.d.ts.map +1 -1
- package/dist/feral/node-code/data/set-context-value-node-code.js +10 -1
- package/dist/feral/node-code/data/set-context-value-node-code.js.map +1 -1
- package/dist/feral/node-code/entity/create-entity-type-node-code.js +20 -20
- package/dist/feral/node-code/entity/load-vault-context-node-code.d.ts.map +1 -1
- package/dist/feral/node-code/entity/load-vault-context-node-code.js +7 -15
- package/dist/feral/node-code/entity/load-vault-context-node-code.js.map +1 -1
- package/dist/feral/node-code/entity/update-entity-type-node-code.js +20 -20
- package/dist/feral/node-code/input/prompt-input-node-code.d.ts.map +1 -1
- package/dist/feral/node-code/input/prompt-input-node-code.js +6 -0
- package/dist/feral/node-code/input/prompt-input-node-code.js.map +1 -1
- package/dist/feral/node-code/input/prompt-select-node-code.d.ts.map +1 -1
- package/dist/feral/node-code/input/prompt-select-node-code.js +6 -0
- package/dist/feral/node-code/input/prompt-select-node-code.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -39
- package/dist/index.js.map +1 -1
- package/dist/llm/router.js +27 -27
- package/dist/personalities.js +4 -4
- package/dist/phaibel.txt +81 -81
- package/dist/service/api-router.d.ts.map +1 -1
- package/dist/service/api-router.js +42 -2
- package/dist/service/api-router.js.map +1 -1
- package/dist/service/cron/feedback-analysis.js +14 -14
- package/dist/service/cron/innovate.d.ts +2 -0
- package/dist/service/cron/innovate.d.ts.map +1 -0
- package/dist/service/cron/innovate.js +354 -0
- package/dist/service/cron/innovate.js.map +1 -0
- package/dist/service/cron/process-lifecycle.js +36 -36
- package/dist/service/cron/scheduler.d.ts.map +1 -1
- package/dist/service/cron/scheduler.js +8 -0
- package/dist/service/cron/scheduler.js.map +1 -1
- package/dist/service/index.d.ts.map +1 -1
- package/dist/service/index.js +27 -20
- package/dist/service/index.js.map +1 -1
- package/dist/service/web-client.html +1984 -1569
- package/dist/service/web-server.d.ts +1 -0
- package/dist/service/web-server.d.ts.map +1 -1
- package/dist/service/web-server.js +188 -6
- package/dist/service/web-server.js.map +1 -1
- package/dist/tools/daily.js +2 -2
- package/package.json +69 -66
- package/dist/agentary.txt +0 -82
- package/dist/commands/event.d.ts +0 -4
- package/dist/commands/event.d.ts.map +0 -1
- package/dist/commands/event.js +0 -515
- package/dist/commands/event.js.map +0 -1
- package/dist/commands/goal.d.ts +0 -4
- package/dist/commands/goal.d.ts.map +0 -1
- package/dist/commands/goal.js +0 -14
- package/dist/commands/goal.js.map +0 -1
- package/dist/commands/interview.d.ts +0 -14
- package/dist/commands/interview.d.ts.map +0 -1
- package/dist/commands/interview.js +0 -343
- package/dist/commands/interview.js.map +0 -1
- package/dist/commands/note.d.ts +0 -4
- package/dist/commands/note.d.ts.map +0 -1
- package/dist/commands/note.js +0 -548
- package/dist/commands/note.js.map +0 -1
- package/dist/commands/pamp.d.ts +0 -4
- package/dist/commands/pamp.d.ts.map +0 -1
- package/dist/commands/pamp.js +0 -323
- package/dist/commands/pamp.js.map +0 -1
- package/dist/commands/person.d.ts +0 -4
- package/dist/commands/person.d.ts.map +0 -1
- package/dist/commands/person.js +0 -185
- package/dist/commands/person.js.map +0 -1
- package/dist/commands/project.d.ts +0 -4
- package/dist/commands/project.d.ts.map +0 -1
- package/dist/commands/project.js +0 -70
- package/dist/commands/project.js.map +0 -1
- package/dist/commands/remember.d.ts +0 -4
- package/dist/commands/remember.d.ts.map +0 -1
- package/dist/commands/remember.js +0 -70
- package/dist/commands/remember.js.map +0 -1
- package/dist/commands/research.d.ts +0 -4
- package/dist/commands/research.d.ts.map +0 -1
- package/dist/commands/research.js +0 -14
- package/dist/commands/research.js.map +0 -1
- package/dist/commands/shell.d.ts +0 -3
- package/dist/commands/shell.d.ts.map +0 -1
- package/dist/commands/shell.js +0 -346
- package/dist/commands/shell.js.map +0 -1
- package/dist/commands/today.d.ts +0 -4
- package/dist/commands/today.d.ts.map +0 -1
- package/dist/commands/today.js +0 -112
- package/dist/commands/today.js.map +0 -1
- package/dist/commands/todo.d.ts +0 -4
- package/dist/commands/todo.d.ts.map +0 -1
- package/dist/commands/todo.js +0 -678
- package/dist/commands/todo.js.map +0 -1
- package/dist/commands/todont.d.ts +0 -19
- package/dist/commands/todont.d.ts.map +0 -1
- package/dist/commands/todont.js +0 -209
- package/dist/commands/todont.js.map +0 -1
- package/dist/commands/week.d.ts +0 -4
- package/dist/commands/week.d.ts.map +0 -1
- package/dist/commands/week.js +0 -267
- package/dist/commands/week.js.map +0 -1
- package/dist/dobbai.txt +0 -55
- package/dist/dobbi.txt +0 -55
- package/dist/dobbie-bundle.cjs +0 -73313
- package/dist/dobbie.txt +0 -55
- package/dist/feral/node-code/output/dobbai-speak-node-code.d.ts +0 -11
- package/dist/feral/node-code/output/dobbai-speak-node-code.d.ts.map +0 -1
- package/dist/feral/node-code/output/dobbai-speak-node-code.js +0 -56
- package/dist/feral/node-code/output/dobbai-speak-node-code.js.map +0 -1
- package/dist/feral/node-code/output/dobbi-speak-node-code.d.ts +0 -15
- package/dist/feral/node-code/output/dobbi-speak-node-code.d.ts.map +0 -1
- package/dist/feral/node-code/output/dobbi-speak-node-code.js +0 -60
- package/dist/feral/node-code/output/dobbi-speak-node-code.js.map +0 -1
- package/dist/feral/node-code/output/dobbie-speak-node-code.d.ts +0 -11
- package/dist/feral/node-code/output/dobbie-speak-node-code.d.ts.map +0 -1
- package/dist/feral/node-code/output/dobbie-speak-node-code.js +0 -56
- package/dist/feral/node-code/output/dobbie-speak-node-code.js.map +0 -1
- package/dist/service/cron/process-evaluator.d.ts +0 -6
- package/dist/service/cron/process-evaluator.d.ts.map +0 -1
- package/dist/service/cron/process-evaluator.js +0 -126
- package/dist/service/cron/process-evaluator.js.map +0 -1
- package/dist/tools/project.d.ts +0 -2
- package/dist/tools/project.d.ts.map +0 -1
- package/dist/tools/project.js +0 -112
- package/dist/tools/project.js.map +0 -1
package/dist/dobbie.txt
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
.......
|
|
2
|
-
.:------::::...
|
|
3
|
-
.-==------::::::..
|
|
4
|
-
..:==---------::::--:...
|
|
5
|
-
....::::-=+++====-----====-------:.....
|
|
6
|
-
.-=+***++=++++***++=:=+***=+====****+=-..
|
|
7
|
-
.:=+===++***++++*#*++-::-+*+-===+##*+==++=:.
|
|
8
|
-
.:==++++++****+++++==+=::::----===*#*+*+++++:.
|
|
9
|
-
..--===++++++*+++===++++==-==--===+**++++-::=-.
|
|
10
|
-
.:==++++++===++++++++========--=-:........
|
|
11
|
-
..::..:==+++++==+--=+==:......
|
|
12
|
-
.. ..-=+++*****+++=:.
|
|
13
|
-
..-=========-....
|
|
14
|
-
..+*++++++==:.....
|
|
15
|
-
.....=*+++++++==-=+:....
|
|
16
|
-
.:::---=+======-:::-:.::..
|
|
17
|
-
-=-:---======---::::...:....
|
|
18
|
-
..-==::::::--==---::...:.:--:..
|
|
19
|
-
.:==-::::::::::::..:-=-:::-=-:.
|
|
20
|
-
.-==:::::::::::::-=#%%*-::==--..
|
|
21
|
-
..==+:::::::::::-+%@@%+*#*-++=-:..
|
|
22
|
-
.:=-=:::::::::-*%@@@%*+=--:-==--..
|
|
23
|
-
.=--=:::::::::-#%@@@*=--:---:-=-:..
|
|
24
|
-
.----=--::::::-::=%%%*+=====-:--==:.
|
|
25
|
-
:=---+---::-::--:--==+====--===----.
|
|
26
|
-
-==--==------::------=%@@@%#+=====-..
|
|
27
|
-
:===---::-----------=*#%%%%%*..---:.
|
|
28
|
-
..:-==---::::-===========--=-......
|
|
29
|
-
..:-===-------======---=++-......
|
|
30
|
-
.:-==--===========-=+*+-:......
|
|
31
|
-
.-::::--====-====+*+==--:......
|
|
32
|
-
.-----:::--===-=****+=::.......
|
|
33
|
-
.:--::::::-----------:::...
|
|
34
|
-
..::::::---------::::::...
|
|
35
|
-
..::::::---:..:======-.
|
|
36
|
-
..::::::::....-==--=-.
|
|
37
|
-
..:::::-:.....:==----...
|
|
38
|
-
.-==--=:. .==----...
|
|
39
|
-
.-====-.. .===-=-...
|
|
40
|
-
.-====-.. .-=====..
|
|
41
|
-
.:=====.. :=====:....
|
|
42
|
-
.:=====:. -==---...
|
|
43
|
-
.:-=--=:. :==---....
|
|
44
|
-
.:==-=-.. :==---...
|
|
45
|
-
.:====:.. .====-...
|
|
46
|
-
:====:. ..-===:...
|
|
47
|
-
.:====... .:==-:...
|
|
48
|
-
..-====:.... .:==--...
|
|
49
|
-
.-=====:......-===-::..
|
|
50
|
-
.:==---==:.... .====-:::...
|
|
51
|
-
.:-=-----==:.... .=====-::::::...
|
|
52
|
-
..-====-----:..... .:-===--:-----:..
|
|
53
|
-
.=======---:...... ..:-=---=--==:.
|
|
54
|
-
.:====----....... .-==--=--:..
|
|
55
|
-
.....::.. ..::......
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Context } from '../../context/context.js';
|
|
2
|
-
import type { Result } from '../../result/result.js';
|
|
3
|
-
import type { ConfigurationDescription, ResultDescription } from '../../configuration/configuration-description.js';
|
|
4
|
-
import { AbstractNodeCode } from '../abstract-node-code.js';
|
|
5
|
-
export declare class DobbaiSpeakNodeCode extends AbstractNodeCode {
|
|
6
|
-
static readonly configDescriptions: ConfigurationDescription[];
|
|
7
|
-
static readonly resultDescriptions: ResultDescription[];
|
|
8
|
-
constructor();
|
|
9
|
-
process(context: Context): Promise<Result>;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=dobbai-speak-node-code.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dobbai-speak-node-code.d.ts","sourceRoot":"","sources":["../../../../src/feral/node-code/output/dobbai-speak-node-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AACpH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,qBAAa,mBAAoB,SAAQ,gBAAgB;IACrD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,wBAAwB,EAAE,CAI5D;IACF,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAGrD;;IAMI,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAqCnD"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
-
// Feral CCF — Dobbai Speak NodeCode
|
|
3
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
|
-
import { ResultStatus } from '../../result/result.js';
|
|
5
|
-
import { AbstractNodeCode } from '../abstract-node-code.js';
|
|
6
|
-
import { NodeCodeCategory } from '../node-code.js';
|
|
7
|
-
import { getResponseWith } from '../../../responses.js';
|
|
8
|
-
export class DobbaiSpeakNodeCode extends AbstractNodeCode {
|
|
9
|
-
static configDescriptions = [
|
|
10
|
-
{ key: 'response_key', name: 'Response Key', description: 'Key from the Dobbai response catalog (e.g. greeting, task_saved, error).', type: 'string' },
|
|
11
|
-
{ key: 'context_path', name: 'Context Path', description: 'Where to store the rendered message.', type: 'string', default: 'output', isOptional: true },
|
|
12
|
-
{ key: 'extra_tokens', name: 'Extra Tokens', description: 'Comma-separated key=context_path mappings for custom token replacement.', type: 'string', isOptional: true },
|
|
13
|
-
];
|
|
14
|
-
static resultDescriptions = [
|
|
15
|
-
{ status: ResultStatus.OK, description: 'Message rendered and stored in context.' },
|
|
16
|
-
{ status: ResultStatus.ERROR, description: 'Invalid response key or rendering failure.' },
|
|
17
|
-
];
|
|
18
|
-
constructor() {
|
|
19
|
-
super('dobbai_speak', 'Dobbai Speak', 'Picks a random response from the catalog, replaces tokens with context values, and stores the result.', NodeCodeCategory.WORK);
|
|
20
|
-
}
|
|
21
|
-
async process(context) {
|
|
22
|
-
const responseKey = this.getRequiredConfigValue('response_key');
|
|
23
|
-
const contextPath = this.getOptionalConfigValue('context_path', 'output');
|
|
24
|
-
const extraTokens = this.getOptionalConfigValue('extra_tokens', '');
|
|
25
|
-
try {
|
|
26
|
-
// {name} is auto-substituted by getResponseWith
|
|
27
|
-
// Build replacement map for any extra tokens
|
|
28
|
-
const replacements = {};
|
|
29
|
-
// Parse extra_tokens: "title=entity_title,count=item_count"
|
|
30
|
-
if (extraTokens) {
|
|
31
|
-
for (const pair of extraTokens.split(',')) {
|
|
32
|
-
const [tokenName, ctxKey] = pair.split('=').map(s => s.trim());
|
|
33
|
-
if (tokenName && ctxKey) {
|
|
34
|
-
replacements[tokenName] = String(context.get(ctxKey) ?? '');
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
// Also pull any {key} tokens from context directly
|
|
39
|
-
const message = getResponseWith(responseKey, replacements);
|
|
40
|
-
// Do a second pass to replace any remaining {key} tokens with context values
|
|
41
|
-
const finalMessage = message.replace(/\{(\w+)\}/g, (_match, key) => {
|
|
42
|
-
if (key in replacements)
|
|
43
|
-
return replacements[key];
|
|
44
|
-
const ctxVal = context.get(key);
|
|
45
|
-
return ctxVal != null ? String(ctxVal) : _match;
|
|
46
|
-
});
|
|
47
|
-
context.set(contextPath, finalMessage);
|
|
48
|
-
return this.result(ResultStatus.OK, finalMessage);
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
52
|
-
return this.result(ResultStatus.ERROR, `Dobbai speak failed for "${responseKey}": ${msg}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=dobbai-speak-node-code.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dobbai-speak-node-code.js","sourceRoot":"","sources":["../../../../src/feral/node-code/output/dobbai-speak-node-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { Context } from '../../context/context.js';
|
|
2
|
-
import type { Result } from '../../result/result.js';
|
|
3
|
-
import type { ConfigurationDescription, ResultDescription } from '../../configuration/configuration-description.js';
|
|
4
|
-
import { AbstractNodeCode } from '../abstract-node-code.js';
|
|
5
|
-
export declare class AgentSpeakNodeCode extends AbstractNodeCode {
|
|
6
|
-
static readonly configDescriptions: ConfigurationDescription[];
|
|
7
|
-
static readonly resultDescriptions: ResultDescription[];
|
|
8
|
-
constructor();
|
|
9
|
-
process(context: Context): Promise<Result>;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* @deprecated Use AgentSpeakNodeCode instead
|
|
13
|
-
*/
|
|
14
|
-
export declare const DobbiSpeakNodeCode: typeof AgentSpeakNodeCode;
|
|
15
|
-
//# sourceMappingURL=dobbi-speak-node-code.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dobbi-speak-node-code.d.ts","sourceRoot":"","sources":["../../../../src/feral/node-code/output/dobbi-speak-node-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AACpH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,qBAAa,kBAAmB,SAAQ,gBAAgB;IACpD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,wBAAwB,EAAE,CAI5D;IACF,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAGrD;;IAMI,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAqCnD;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,2BAAqB,CAAC"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
-
// Feral CCF — Agent Speak NodeCode
|
|
3
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
|
-
import { ResultStatus } from '../../result/result.js';
|
|
5
|
-
import { AbstractNodeCode } from '../abstract-node-code.js';
|
|
6
|
-
import { NodeCodeCategory } from '../node-code.js';
|
|
7
|
-
import { getResponseWith } from '../../../responses.js';
|
|
8
|
-
export class AgentSpeakNodeCode extends AbstractNodeCode {
|
|
9
|
-
static configDescriptions = [
|
|
10
|
-
{ key: 'response_key', name: 'Response Key', description: 'Key from the response catalog (e.g. greeting, task_saved, error).', type: 'string' },
|
|
11
|
-
{ key: 'context_path', name: 'Context Path', description: 'Where to store the rendered message.', type: 'string', default: 'output', isOptional: true },
|
|
12
|
-
{ key: 'extra_tokens', name: 'Extra Tokens', description: 'Comma-separated key=context_path mappings for custom token replacement.', type: 'string', isOptional: true },
|
|
13
|
-
];
|
|
14
|
-
static resultDescriptions = [
|
|
15
|
-
{ status: ResultStatus.OK, description: 'Message rendered and stored in context.' },
|
|
16
|
-
{ status: ResultStatus.ERROR, description: 'Invalid response key or rendering failure.' },
|
|
17
|
-
];
|
|
18
|
-
constructor() {
|
|
19
|
-
super('agent_speak', 'Agent Speak', 'Picks a random response from the catalog, replaces tokens with context values, and stores the result.', NodeCodeCategory.WORK);
|
|
20
|
-
}
|
|
21
|
-
async process(context) {
|
|
22
|
-
const responseKey = this.getRequiredConfigValue('response_key');
|
|
23
|
-
const contextPath = this.getOptionalConfigValue('context_path', 'output');
|
|
24
|
-
const extraTokens = this.getOptionalConfigValue('extra_tokens', '');
|
|
25
|
-
try {
|
|
26
|
-
// {name} is auto-substituted by getResponseWith
|
|
27
|
-
// Build replacement map for any extra tokens
|
|
28
|
-
const replacements = {};
|
|
29
|
-
// Parse extra_tokens: "title=entity_title,count=item_count"
|
|
30
|
-
if (extraTokens) {
|
|
31
|
-
for (const pair of extraTokens.split(',')) {
|
|
32
|
-
const [tokenName, ctxKey] = pair.split('=').map(s => s.trim());
|
|
33
|
-
if (tokenName && ctxKey) {
|
|
34
|
-
replacements[tokenName] = String(context.get(ctxKey) ?? '');
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
// Also pull any {key} tokens from context directly
|
|
39
|
-
const message = getResponseWith(responseKey, replacements);
|
|
40
|
-
// Do a second pass to replace any remaining {key} tokens with context values
|
|
41
|
-
const finalMessage = message.replace(/\{(\w+)\}/g, (_match, key) => {
|
|
42
|
-
if (key in replacements)
|
|
43
|
-
return replacements[key];
|
|
44
|
-
const ctxVal = context.get(key);
|
|
45
|
-
return ctxVal != null ? String(ctxVal) : _match;
|
|
46
|
-
});
|
|
47
|
-
context.set(contextPath, finalMessage);
|
|
48
|
-
return this.result(ResultStatus.OK, finalMessage);
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
52
|
-
return this.result(ResultStatus.ERROR, `Agent speak failed for "${responseKey}": ${msg}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* @deprecated Use AgentSpeakNodeCode instead
|
|
58
|
-
*/
|
|
59
|
-
export const DobbiSpeakNodeCode = AgentSpeakNodeCode;
|
|
60
|
-
//# sourceMappingURL=dobbi-speak-node-code.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dobbi-speak-node-code.js","sourceRoot":"","sources":["../../../../src/feral/node-code/output/dobbi-speak-node-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Context } from '../../context/context.js';
|
|
2
|
-
import type { Result } from '../../result/result.js';
|
|
3
|
-
import type { ConfigurationDescription, ResultDescription } from '../../configuration/configuration-description.js';
|
|
4
|
-
import { AbstractNodeCode } from '../abstract-node-code.js';
|
|
5
|
-
export declare class DobbieSpeakNodeCode extends AbstractNodeCode {
|
|
6
|
-
static readonly configDescriptions: ConfigurationDescription[];
|
|
7
|
-
static readonly resultDescriptions: ResultDescription[];
|
|
8
|
-
constructor();
|
|
9
|
-
process(context: Context): Promise<Result>;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=dobbie-speak-node-code.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dobbie-speak-node-code.d.ts","sourceRoot":"","sources":["../../../../src/feral/node-code/output/dobbie-speak-node-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AACpH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,qBAAa,mBAAoB,SAAQ,gBAAgB;IACrD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,wBAAwB,EAAE,CAI5D;IACF,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAGrD;;IAMI,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAqCnD"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
-
// Feral CCF — Dobbie Speak NodeCode
|
|
3
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
|
-
import { ResultStatus } from '../../result/result.js';
|
|
5
|
-
import { AbstractNodeCode } from '../abstract-node-code.js';
|
|
6
|
-
import { NodeCodeCategory } from '../node-code.js';
|
|
7
|
-
import { getResponseWith } from '../../../responses.js';
|
|
8
|
-
export class DobbieSpeakNodeCode extends AbstractNodeCode {
|
|
9
|
-
static configDescriptions = [
|
|
10
|
-
{ key: 'response_key', name: 'Response Key', description: 'Key from the Dobbie response catalog (e.g. greeting, task_saved, error).', type: 'string' },
|
|
11
|
-
{ key: 'context_path', name: 'Context Path', description: 'Where to store the rendered message.', type: 'string', default: 'output', isOptional: true },
|
|
12
|
-
{ key: 'extra_tokens', name: 'Extra Tokens', description: 'Comma-separated key=context_path mappings for custom token replacement.', type: 'string', isOptional: true },
|
|
13
|
-
];
|
|
14
|
-
static resultDescriptions = [
|
|
15
|
-
{ status: ResultStatus.OK, description: 'Message rendered and stored in context.' },
|
|
16
|
-
{ status: ResultStatus.ERROR, description: 'Invalid response key or rendering failure.' },
|
|
17
|
-
];
|
|
18
|
-
constructor() {
|
|
19
|
-
super('dobbie_speak', 'Dobbie Speak', 'Picks a random response from the catalog, replaces tokens with context values, and stores the result.', NodeCodeCategory.WORK);
|
|
20
|
-
}
|
|
21
|
-
async process(context) {
|
|
22
|
-
const responseKey = this.getRequiredConfigValue('response_key');
|
|
23
|
-
const contextPath = this.getOptionalConfigValue('context_path', 'output');
|
|
24
|
-
const extraTokens = this.getOptionalConfigValue('extra_tokens', '');
|
|
25
|
-
try {
|
|
26
|
-
// {name} is auto-substituted by getResponseWith
|
|
27
|
-
// Build replacement map for any extra tokens
|
|
28
|
-
const replacements = {};
|
|
29
|
-
// Parse extra_tokens: "title=entity_title,count=item_count"
|
|
30
|
-
if (extraTokens) {
|
|
31
|
-
for (const pair of extraTokens.split(',')) {
|
|
32
|
-
const [tokenName, ctxKey] = pair.split('=').map(s => s.trim());
|
|
33
|
-
if (tokenName && ctxKey) {
|
|
34
|
-
replacements[tokenName] = String(context.get(ctxKey) ?? '');
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
// Also pull any {key} tokens from context directly
|
|
39
|
-
const message = getResponseWith(responseKey, replacements);
|
|
40
|
-
// Do a second pass to replace any remaining {key} tokens with context values
|
|
41
|
-
const finalMessage = message.replace(/\{(\w+)\}/g, (_match, key) => {
|
|
42
|
-
if (key in replacements)
|
|
43
|
-
return replacements[key];
|
|
44
|
-
const ctxVal = context.get(key);
|
|
45
|
-
return ctxVal != null ? String(ctxVal) : _match;
|
|
46
|
-
});
|
|
47
|
-
context.set(contextPath, finalMessage);
|
|
48
|
-
return this.result(ResultStatus.OK, finalMessage);
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
52
|
-
return this.result(ResultStatus.ERROR, `Dobbie speak failed for "${responseKey}": ${msg}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=dobbie-speak-node-code.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dobbie-speak-node-code.js","sourceRoot":"","sources":["../../../../src/feral/node-code/output/dobbie-speak-node-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"process-evaluator.d.ts","sourceRoot":"","sources":["../../../src/service/cron/process-evaluator.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAkIzD"}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
-
// Process Evaluator — background learner that synthesizes reusable processes
|
|
3
|
-
// from execution logs.
|
|
4
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
5
|
-
import { promises as fs } from 'fs';
|
|
6
|
-
import path from 'path';
|
|
7
|
-
import { findVaultRoot } from '../../state/manager.js';
|
|
8
|
-
import { readRecentExecutionLogs } from '../../utils/execution-logger.js';
|
|
9
|
-
import { parseJsonResponse } from '../../utils/json-parser.js';
|
|
10
|
-
import { getModelForCapability } from '../../llm/router.js';
|
|
11
|
-
/**
|
|
12
|
-
* Analyze recent execution logs to find patterns and create reusable processes.
|
|
13
|
-
* Intended to be run as a cron job.
|
|
14
|
-
*/
|
|
15
|
-
export async function evaluateProcesses() {
|
|
16
|
-
const vaultRoot = await findVaultRoot();
|
|
17
|
-
if (!vaultRoot) {
|
|
18
|
-
return 'No vault found — skipping process evaluation';
|
|
19
|
-
}
|
|
20
|
-
const logs = await readRecentExecutionLogs(7);
|
|
21
|
-
const customSuccessLogs = logs.filter(l => l.process_source === 'custom' && l.success);
|
|
22
|
-
if (customSuccessLogs.length < 3) {
|
|
23
|
-
return `Only ${customSuccessLogs.length} successful custom executions in last 7 days — need at least 3`;
|
|
24
|
-
}
|
|
25
|
-
// Read existing vault processes for dedup
|
|
26
|
-
const processDir = path.join(vaultRoot, 'processes');
|
|
27
|
-
let existingProcessKeys = [];
|
|
28
|
-
let existingProcessSummary = 'None';
|
|
29
|
-
try {
|
|
30
|
-
const files = await fs.readdir(processDir);
|
|
31
|
-
const processes = [];
|
|
32
|
-
for (const file of files) {
|
|
33
|
-
if (!file.endsWith('.json'))
|
|
34
|
-
continue;
|
|
35
|
-
try {
|
|
36
|
-
const raw = await fs.readFile(path.join(processDir, file), 'utf-8');
|
|
37
|
-
const parsed = JSON.parse(raw);
|
|
38
|
-
processes.push({ key: parsed.key, description: parsed.description || '' });
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
// skip invalid files
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
existingProcessKeys = processes.map(p => p.key);
|
|
45
|
-
if (processes.length > 0) {
|
|
46
|
-
existingProcessSummary = processes.map(p => `- ${p.key}: ${p.description}`).join('\n');
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
// Directory doesn't exist yet — that's fine
|
|
51
|
-
}
|
|
52
|
-
// Build log summaries for the LLM
|
|
53
|
-
const logSummaries = customSuccessLogs.map(l => ({
|
|
54
|
-
user_input: l.user_input,
|
|
55
|
-
process_key: l.process_key,
|
|
56
|
-
outcome_summary: l.outcome_summary,
|
|
57
|
-
process_json: l.process_json,
|
|
58
|
-
}));
|
|
59
|
-
const llm = await getModelForCapability('reason');
|
|
60
|
-
const response = await llm.chat([{
|
|
61
|
-
role: 'user',
|
|
62
|
-
content: `RECENT CUSTOM EXECUTIONS (${customSuccessLogs.length} total):
|
|
63
|
-
${JSON.stringify(logSummaries, null, 2)}
|
|
64
|
-
|
|
65
|
-
EXISTING REUSABLE PROCESSES:
|
|
66
|
-
${existingProcessSummary}
|
|
67
|
-
|
|
68
|
-
RULES:
|
|
69
|
-
- Only create a process if you see 2+ similar executions with a clear, repeatable pattern
|
|
70
|
-
- Use {context_key} interpolation for variable parts (e.g. {user_input}, {entity_title})
|
|
71
|
-
- Don't duplicate existing processes
|
|
72
|
-
- Prefer simple, focused processes (5-8 nodes max)
|
|
73
|
-
- Process key should be descriptive (e.g. "create-task-with-tag", "list-events-today")
|
|
74
|
-
- Every process must start with a "start" node and end with a "stop" node
|
|
75
|
-
|
|
76
|
-
Return a JSON object:
|
|
77
|
-
{
|
|
78
|
-
"reasoning": "Your analysis of patterns found",
|
|
79
|
-
"new_processes": [
|
|
80
|
-
{
|
|
81
|
-
"key": "process.key",
|
|
82
|
-
"description": "What this process does",
|
|
83
|
-
"process": { ... valid process JSON ... }
|
|
84
|
-
}
|
|
85
|
-
]
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
If no clear patterns, return { "reasoning": "...", "new_processes": [] }.
|
|
89
|
-
Return ONLY the JSON object, no markdown fences.`,
|
|
90
|
-
}], {
|
|
91
|
-
systemPrompt: 'You are the process learning engine for Dobbi, a Personal Digital Agent. Analyze execution logs to find patterns and create reusable Feral processes. Only create processes when you see a clear, repeatable pattern across multiple executions. Quality over quantity.',
|
|
92
|
-
temperature: 0.3,
|
|
93
|
-
});
|
|
94
|
-
let result;
|
|
95
|
-
try {
|
|
96
|
-
result = parseJsonResponse(response);
|
|
97
|
-
}
|
|
98
|
-
catch {
|
|
99
|
-
return 'Failed to parse LLM response for process evaluation';
|
|
100
|
-
}
|
|
101
|
-
if (!result.new_processes || result.new_processes.length === 0) {
|
|
102
|
-
return `No new patterns found: ${result.reasoning}`;
|
|
103
|
-
}
|
|
104
|
-
// Write new processes to vault
|
|
105
|
-
await fs.mkdir(processDir, { recursive: true });
|
|
106
|
-
let created = 0;
|
|
107
|
-
for (const np of result.new_processes) {
|
|
108
|
-
if (existingProcessKeys.includes(np.key)) {
|
|
109
|
-
continue; // skip duplicates
|
|
110
|
-
}
|
|
111
|
-
const filename = `${np.key.replace(/\./g, '-')}.json`;
|
|
112
|
-
const filepath = path.join(processDir, filename);
|
|
113
|
-
// Don't overwrite existing files
|
|
114
|
-
try {
|
|
115
|
-
await fs.access(filepath);
|
|
116
|
-
continue; // file exists, skip
|
|
117
|
-
}
|
|
118
|
-
catch {
|
|
119
|
-
// file doesn't exist, proceed
|
|
120
|
-
}
|
|
121
|
-
await fs.writeFile(filepath, JSON.stringify(np.process, null, 2));
|
|
122
|
-
created++;
|
|
123
|
-
}
|
|
124
|
-
return `Evaluated ${customSuccessLogs.length} logs → created ${created} new process(es). ${result.reasoning}`;
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=process-evaluator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"process-evaluator.js","sourceRoot":"","sources":["../../../src/service/cron/process-evaluator.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/project.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":""}
|
package/dist/tools/project.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { getActiveProject, setActiveProject, listProjects, createProject, projectExists, } from '../state/manager.js';
|
|
2
|
-
import { registerServiceTool } from './types.js';
|
|
3
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
|
-
// PROJECT.CREATE - Create a new project
|
|
5
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
6
|
-
registerServiceTool({
|
|
7
|
-
name: 'project.create',
|
|
8
|
-
description: 'Create a new project and optionally switch to it',
|
|
9
|
-
type: 'deterministic',
|
|
10
|
-
inputSchema: {
|
|
11
|
-
type: 'object',
|
|
12
|
-
properties: {
|
|
13
|
-
name: { type: 'string', description: 'Project name', required: true },
|
|
14
|
-
switchTo: { type: 'boolean', description: 'Switch to the new project after creation' },
|
|
15
|
-
},
|
|
16
|
-
required: ['name'],
|
|
17
|
-
},
|
|
18
|
-
execute: async (input, context) => {
|
|
19
|
-
const { name, switchTo = true } = input;
|
|
20
|
-
context.log.info(`Creating project: ${name}`);
|
|
21
|
-
const exists = await projectExists(name);
|
|
22
|
-
if (exists) {
|
|
23
|
-
context.log.warn(`Project already exists: ${name}`);
|
|
24
|
-
return {
|
|
25
|
-
success: false,
|
|
26
|
-
output: null,
|
|
27
|
-
error: `Project "${name}" already exists`,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
await createProject(name);
|
|
31
|
-
context.log.info(`Project created: ${name}`);
|
|
32
|
-
if (switchTo) {
|
|
33
|
-
await setActiveProject(name);
|
|
34
|
-
context.log.info(`Switched to project: ${name}`);
|
|
35
|
-
}
|
|
36
|
-
return {
|
|
37
|
-
success: true,
|
|
38
|
-
output: { projectName: name, isActive: switchTo },
|
|
39
|
-
tokensToSet: switchTo ? { project_name: name } : undefined,
|
|
40
|
-
};
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
44
|
-
// PROJECT.USE - Switch to an existing project
|
|
45
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
46
|
-
registerServiceTool({
|
|
47
|
-
name: 'project.use',
|
|
48
|
-
description: 'Switch to an existing project',
|
|
49
|
-
type: 'deterministic',
|
|
50
|
-
inputSchema: {
|
|
51
|
-
type: 'object',
|
|
52
|
-
properties: {
|
|
53
|
-
name: { type: 'string', description: 'Project name', required: true },
|
|
54
|
-
},
|
|
55
|
-
required: ['name'],
|
|
56
|
-
},
|
|
57
|
-
execute: async (input, context) => {
|
|
58
|
-
const { name } = input;
|
|
59
|
-
context.log.info(`Switching to project: ${name}`);
|
|
60
|
-
const exists = await projectExists(name);
|
|
61
|
-
if (!exists) {
|
|
62
|
-
context.log.error(`Project not found: ${name}`);
|
|
63
|
-
return {
|
|
64
|
-
success: false,
|
|
65
|
-
output: null,
|
|
66
|
-
error: `Project "${name}" does not exist`,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
await setActiveProject(name);
|
|
70
|
-
return {
|
|
71
|
-
success: true,
|
|
72
|
-
output: { projectName: name },
|
|
73
|
-
tokensToSet: { project_name: name },
|
|
74
|
-
};
|
|
75
|
-
},
|
|
76
|
-
});
|
|
77
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
78
|
-
// PROJECT.LIST - List all projects
|
|
79
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
80
|
-
registerServiceTool({
|
|
81
|
-
name: 'project.list',
|
|
82
|
-
description: 'List all projects',
|
|
83
|
-
type: 'deterministic',
|
|
84
|
-
execute: async (input, context) => {
|
|
85
|
-
context.log.info('Listing projects');
|
|
86
|
-
const projects = await listProjects();
|
|
87
|
-
const activeProject = await getActiveProject();
|
|
88
|
-
return {
|
|
89
|
-
success: true,
|
|
90
|
-
output: {
|
|
91
|
-
projects,
|
|
92
|
-
activeProject,
|
|
93
|
-
},
|
|
94
|
-
};
|
|
95
|
-
},
|
|
96
|
-
});
|
|
97
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
98
|
-
// PROJECT.CURRENT - Get current active project
|
|
99
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
100
|
-
registerServiceTool({
|
|
101
|
-
name: 'project.current',
|
|
102
|
-
description: 'Get the currently active project',
|
|
103
|
-
type: 'deterministic',
|
|
104
|
-
execute: async (input, context) => {
|
|
105
|
-
const activeProject = await getActiveProject();
|
|
106
|
-
return {
|
|
107
|
-
success: true,
|
|
108
|
-
output: { projectName: activeProject },
|
|
109
|
-
};
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
//# sourceMappingURL=project.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"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"}
|