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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remember.d.ts","sourceRoot":"","sources":["../../src/commands/remember.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,eAAe,SAqEtB,CAAC;AAEP,eAAe,eAAe,CAAC"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import ora from 'ora';
|
|
4
|
-
import { promises as fs } from 'fs';
|
|
5
|
-
import path from 'path';
|
|
6
|
-
import { getVaultRoot } from '../state/manager.js';
|
|
7
|
-
import { getContextString } from '../context/reader.js';
|
|
8
|
-
import { getModelForCapability, createSystemPrompt } from '../llm/router.js';
|
|
9
|
-
import { appendToMarkdown } from '../markdown/parser.js';
|
|
10
|
-
import { getResponse } from '../responses.js';
|
|
11
|
-
import { debug } from '../utils/debug.js';
|
|
12
|
-
export const rememberCommand = new Command('remember')
|
|
13
|
-
.description('Add something to context or notes')
|
|
14
|
-
.argument('<text>', 'What to remember')
|
|
15
|
-
.action(async (text) => {
|
|
16
|
-
try {
|
|
17
|
-
const vaultRoot = await getVaultRoot();
|
|
18
|
-
const today = new Date().toISOString().split('T')[0];
|
|
19
|
-
const targetPath = path.join(vaultRoot, '.vault.md');
|
|
20
|
-
console.log(chalk.gray('Adding to vault context, sir.'));
|
|
21
|
-
const spinner = ora(getResponse('processing')).start();
|
|
22
|
-
try {
|
|
23
|
-
// Try to use AI to format the note
|
|
24
|
-
const context = await getContextString(vaultRoot);
|
|
25
|
-
const llm = await getModelForCapability('format');
|
|
26
|
-
const systemPrompt = createSystemPrompt(context);
|
|
27
|
-
const prompt = `The user wants to remember the following. Format it nicely as a markdown note with an appropriate heading. Keep it concise but clear. Add relevant tags if appropriate.
|
|
28
|
-
|
|
29
|
-
User input: ${text}
|
|
30
|
-
|
|
31
|
-
Format the response as markdown that can be appended to an existing document.`;
|
|
32
|
-
const formattedNote = await llm.chat([{ role: 'user', content: prompt }], { systemPrompt });
|
|
33
|
-
spinner.stop();
|
|
34
|
-
// Append to the target file
|
|
35
|
-
const noteWithDate = `\n## Note - ${today}\n\n${formattedNote}`;
|
|
36
|
-
try {
|
|
37
|
-
await appendToMarkdown(targetPath, noteWithDate);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
debug('remember', err);
|
|
41
|
-
// File doesn't exist or can't be parsed, just append
|
|
42
|
-
await fs.appendFile(targetPath, noteWithDate);
|
|
43
|
-
}
|
|
44
|
-
console.log(chalk.green('ā ' + getResponse('remember_saved')));
|
|
45
|
-
console.log(chalk.gray(formattedNote));
|
|
46
|
-
}
|
|
47
|
-
catch (err) {
|
|
48
|
-
console.debug('[phaibel:commands:remember]', err);
|
|
49
|
-
spinner.stop();
|
|
50
|
-
// Fall back to simple append without AI
|
|
51
|
-
const simpleNote = `\n## Note - ${today}\n\n${text}\n`;
|
|
52
|
-
try {
|
|
53
|
-
await fs.appendFile(targetPath, simpleNote);
|
|
54
|
-
}
|
|
55
|
-
catch (err) {
|
|
56
|
-
debug('remember', err);
|
|
57
|
-
// Create the directory and file if needed
|
|
58
|
-
await fs.mkdir(path.dirname(targetPath), { recursive: true });
|
|
59
|
-
await fs.writeFile(targetPath, simpleNote);
|
|
60
|
-
}
|
|
61
|
-
console.log(chalk.green('ā Noted!'));
|
|
62
|
-
console.log(chalk.gray('(Configure AI with `phaibel config add-provider anthropic` for smart formatting)'));
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
console.error(chalk.red(getResponse('error')), error);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
export default rememberCommand;
|
|
70
|
-
//# sourceMappingURL=remember.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remember.js","sourceRoot":"","sources":["../../src/commands/remember.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/commands/research.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,eAAe,SAUtB,CAAC;AAEP,eAAe,eAAe,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { listEntities } from './list.js';
|
|
3
|
-
export const researchCommand = new Command('research')
|
|
4
|
-
.description('Research management')
|
|
5
|
-
.argument('[action]', 'Action to perform (list)')
|
|
6
|
-
.action(async (action) => {
|
|
7
|
-
if (!action || action === 'list') {
|
|
8
|
-
await listEntities('research');
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
console.log(`Unknown action: ${action}. Available: list`);
|
|
12
|
-
});
|
|
13
|
-
export default researchCommand;
|
|
14
|
-
//# sourceMappingURL=research.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/commands/research.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACjD,WAAW,CAAC,qBAAqB,CAAC;KAClC,QAAQ,CAAC,UAAU,EAAE,0BAA0B,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,MAAe,EAAE,EAAE;IAC9B,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/B,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,mBAAmB,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC;AAEP,eAAe,eAAe,CAAC"}
|
package/dist/commands/shell.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/commands/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6MpC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAqJ7D"}
|
package/dist/commands/shell.js
DELETED
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import readline from 'readline';
|
|
4
|
-
import { spawn } from 'child_process';
|
|
5
|
-
import { listServiceTools } from '../tools/index.js';
|
|
6
|
-
import { getResponse } from '../responses.js';
|
|
7
|
-
import { StatusBar } from '../shell/tui.js';
|
|
8
|
-
import { StatusPoller } from '../shell/status-poller.js';
|
|
9
|
-
import { breadcrumbPrompt } from '../ui/breadcrumb.js';
|
|
10
|
-
import { isInterviewComplete, isInVault } from '../state/manager.js';
|
|
11
|
-
import { runInterview } from './interview.js';
|
|
12
|
-
import { getEntityIndex } from '../entities/entity-index.js';
|
|
13
|
-
import { loadEntityTypes } from '../entities/entity-type-config.js';
|
|
14
|
-
import { feralChat } from './chat.js';
|
|
15
|
-
// āā Dynamic entity type names (loaded once at shell startup) āāāāāāāāāāāāāāāāā
|
|
16
|
-
let _dynamicEntityTypes = new Set();
|
|
17
|
-
async function loadDynamicEntityTypes() {
|
|
18
|
-
const types = await loadEntityTypes();
|
|
19
|
-
_dynamicEntityTypes = new Set(types.map(t => t.name));
|
|
20
|
-
// Also add to COMMAND_TREE for tab-completion
|
|
21
|
-
for (const t of types) {
|
|
22
|
-
if (!COMMAND_TREE[t.name]) {
|
|
23
|
-
COMMAND_TREE[t.name] = ['list', 'add', 'remove', 'show'];
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
28
|
-
// COMMAND TREE (for tab-completion)
|
|
29
|
-
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
30
|
-
const COMMAND_TREE = {
|
|
31
|
-
init: [],
|
|
32
|
-
today: [],
|
|
33
|
-
remember: ['-g'],
|
|
34
|
-
project: ['list', 'switch', 'new'],
|
|
35
|
-
config: ['add-provider', 'set-capability', 'reset-capability', 'list-capabilities', 'list-providers', 'set-name'],
|
|
36
|
-
sync: [],
|
|
37
|
-
week: ['--next'],
|
|
38
|
-
note: ['list', 'remove'],
|
|
39
|
-
todo: ['list', 'done', 'remove'],
|
|
40
|
-
event: ['list', 'remove'],
|
|
41
|
-
research: ['list'],
|
|
42
|
-
goal: ['list'],
|
|
43
|
-
todont: ['list', 'remove'],
|
|
44
|
-
cal: ['add', 'remove', 'list', 'sync', 'set-url'],
|
|
45
|
-
cron: ['list', 'enable', 'disable', 'set-interval', 'status', 'run'],
|
|
46
|
-
time: [],
|
|
47
|
-
recurrence: ['create', 'list', 'edit', 'delete', 'remove', 'generate'],
|
|
48
|
-
person: ['list', 'edit', 'delete', 'remove'],
|
|
49
|
-
inbox: ['add'],
|
|
50
|
-
service: ['start', 'stop', 'status'],
|
|
51
|
-
queue: ['size', 'status', 'clear', 'pause', 'resume'],
|
|
52
|
-
index: ['stats', 'graph', 'neighbors', 'rebuild'],
|
|
53
|
-
tools: [],
|
|
54
|
-
tool: [], // dynamically completed with tool names
|
|
55
|
-
feral: ['nodes', 'catalog', 'process'],
|
|
56
|
-
interview: [],
|
|
57
|
-
setup: [],
|
|
58
|
-
type: ['list', 'add', 'edit', 'remove'],
|
|
59
|
-
shell: [],
|
|
60
|
-
help: [],
|
|
61
|
-
clear: [],
|
|
62
|
-
exit: [],
|
|
63
|
-
};
|
|
64
|
-
const TOP_LEVEL_COMMANDS = Object.keys(COMMAND_TREE);
|
|
65
|
-
const ENTITY_COMPLETIONS = [
|
|
66
|
-
{ command: 'todo', subcommand: 'done', entityType: 'task' },
|
|
67
|
-
{ command: 'todo', subcommand: 'remove', entityType: 'task' },
|
|
68
|
-
{ command: 'todo', subcommand: null, entityType: 'task' },
|
|
69
|
-
{ command: 'note', subcommand: 'remove', entityType: 'note' },
|
|
70
|
-
{ command: 'note', subcommand: null, entityType: 'note' },
|
|
71
|
-
{ command: 'event', subcommand: 'remove', entityType: 'event' },
|
|
72
|
-
{ command: 'event', subcommand: null, entityType: 'event' },
|
|
73
|
-
{ command: 'person', subcommand: 'edit', entityType: 'person' },
|
|
74
|
-
{ command: 'person', subcommand: 'delete', entityType: 'person' },
|
|
75
|
-
{ command: 'person', subcommand: 'remove', entityType: 'person' },
|
|
76
|
-
{ command: 'recurrence', subcommand: 'edit', entityType: 'recurrence' },
|
|
77
|
-
{ command: 'recurrence', subcommand: 'delete', entityType: 'recurrence' },
|
|
78
|
-
{ command: 'recurrence', subcommand: 'remove', entityType: 'recurrence' },
|
|
79
|
-
{ command: 'todont', subcommand: 'remove', entityType: 'todont' },
|
|
80
|
-
{ command: 'todont', subcommand: null, entityType: 'todont' },
|
|
81
|
-
{ command: 'index', subcommand: 'neighbors', entityType: 'task' },
|
|
82
|
-
];
|
|
83
|
-
function getEntityNames(entityType) {
|
|
84
|
-
const index = getEntityIndex();
|
|
85
|
-
if (!index.isBuilt)
|
|
86
|
-
return [];
|
|
87
|
-
return index.getNodes(entityType).map(n => n.id);
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Build a completer function for readline.
|
|
91
|
-
*/
|
|
92
|
-
function buildCompleter() {
|
|
93
|
-
return (line) => {
|
|
94
|
-
const trimmed = line.trimStart();
|
|
95
|
-
const parts = trimmed.split(/\s+/);
|
|
96
|
-
if (parts.length <= 1) {
|
|
97
|
-
const partial = parts[0] || '';
|
|
98
|
-
const hits = TOP_LEVEL_COMMANDS.filter(c => c.startsWith(partial));
|
|
99
|
-
return [hits.map(h => h + ' '), partial];
|
|
100
|
-
}
|
|
101
|
-
const command = parts[0];
|
|
102
|
-
const partial = parts[parts.length - 1] || '';
|
|
103
|
-
if (command === 'tool') {
|
|
104
|
-
if (parts.length === 2) {
|
|
105
|
-
const toolNames = listServiceTools().map(t => t.name);
|
|
106
|
-
const hits = toolNames.filter(t => t.startsWith(partial));
|
|
107
|
-
return [hits.map(h => h + ' '), partial];
|
|
108
|
-
}
|
|
109
|
-
return [[], partial];
|
|
110
|
-
}
|
|
111
|
-
// Subcommand completion (arg position 2)
|
|
112
|
-
const subcommands = COMMAND_TREE[command];
|
|
113
|
-
if (subcommands && subcommands.length > 0 && parts.length === 2) {
|
|
114
|
-
// Mix subcommands with entity names where applicable
|
|
115
|
-
const hits = subcommands.filter(s => s.startsWith(partial));
|
|
116
|
-
// Also complete entity names at arg 2 for commands with null subcommand
|
|
117
|
-
const directCompletion = ENTITY_COMPLETIONS.find(ec => ec.command === command && ec.subcommand === null);
|
|
118
|
-
if (directCompletion) {
|
|
119
|
-
const names = getEntityNames(directCompletion.entityType);
|
|
120
|
-
hits.push(...names.filter(n => n.startsWith(partial) && !hits.includes(n)));
|
|
121
|
-
}
|
|
122
|
-
return [hits.map(h => h + ' '), partial];
|
|
123
|
-
}
|
|
124
|
-
// Entity name completion at arg position 3+ (after subcommand)
|
|
125
|
-
if (parts.length >= 3) {
|
|
126
|
-
const sub = parts[1];
|
|
127
|
-
const completion = ENTITY_COMPLETIONS.find(ec => ec.command === command && ec.subcommand === sub);
|
|
128
|
-
if (completion) {
|
|
129
|
-
const names = getEntityNames(completion.entityType);
|
|
130
|
-
const hits = names.filter(n => n.startsWith(partial));
|
|
131
|
-
return [hits.map(h => h + ' '), partial];
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return [[], partial];
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
138
|
-
// COMMAND DISPATCH
|
|
139
|
-
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
140
|
-
/**
|
|
141
|
-
* Run a command in a subprocess.
|
|
142
|
-
*
|
|
143
|
-
* This completely isolates Commander from readline ā the child process has its
|
|
144
|
-
* own stdin/stdout and can never interfere with the shell's character echo.
|
|
145
|
-
*/
|
|
146
|
-
function runCommand(args) {
|
|
147
|
-
return new Promise((resolve) => {
|
|
148
|
-
// Spawn as a subprocess: node <script> <args...>
|
|
149
|
-
const child = spawn(process.argv[0], [process.argv[1], ...args], {
|
|
150
|
-
stdio: 'inherit',
|
|
151
|
-
cwd: process.cwd(),
|
|
152
|
-
env: process.env,
|
|
153
|
-
});
|
|
154
|
-
child.on('close', (code) => resolve(code === 42 ? 'quit' : 'continue'));
|
|
155
|
-
child.on('error', (err) => {
|
|
156
|
-
console.log(chalk.red(`Failed to run command: ${err.message}`));
|
|
157
|
-
resolve('continue');
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
162
|
-
// SHELL COMMAND
|
|
163
|
-
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
164
|
-
/**
|
|
165
|
-
* Helper: print status bar then show prompt.
|
|
166
|
-
*/
|
|
167
|
-
function showPrompt(rl, bar) {
|
|
168
|
-
bar.print();
|
|
169
|
-
rl.prompt();
|
|
170
|
-
}
|
|
171
|
-
export function createShellCommand(_program) {
|
|
172
|
-
return new Command('shell')
|
|
173
|
-
.alias('sh')
|
|
174
|
-
.description('Start interactive shell mode with tab-completion')
|
|
175
|
-
.action(async () => {
|
|
176
|
-
// Guard: vault must exist
|
|
177
|
-
if (!(await isInVault())) {
|
|
178
|
-
console.log(chalk.red('\nCannot find a vault here.'));
|
|
179
|
-
console.log(chalk.gray('No .vault.md found in this directory or any parent.'));
|
|
180
|
-
console.log(chalk.gray('\nTo create a vault, run: phaibel init\n'));
|
|
181
|
-
process.exit(1);
|
|
182
|
-
}
|
|
183
|
-
const bar = new StatusBar();
|
|
184
|
-
const poller = new StatusPoller(bar);
|
|
185
|
-
// Start background polling (updates bar data silently)
|
|
186
|
-
poller.start();
|
|
187
|
-
// Build entity index for tab-completion (fire-and-forget)
|
|
188
|
-
const entityIndex = getEntityIndex();
|
|
189
|
-
entityIndex.build().catch(() => { });
|
|
190
|
-
// Load custom entity types for dynamic command routing + tab-completion
|
|
191
|
-
loadDynamicEntityTypes().catch(() => { });
|
|
192
|
-
await bar.printWelcome();
|
|
193
|
-
// First-run interview
|
|
194
|
-
const interviewed = await isInterviewComplete();
|
|
195
|
-
if (!interviewed) {
|
|
196
|
-
await runInterview();
|
|
197
|
-
}
|
|
198
|
-
const prompt = breadcrumbPrompt();
|
|
199
|
-
const rl = readline.createInterface({
|
|
200
|
-
input: process.stdin,
|
|
201
|
-
output: process.stdout,
|
|
202
|
-
completer: buildCompleter(),
|
|
203
|
-
prompt,
|
|
204
|
-
terminal: true,
|
|
205
|
-
});
|
|
206
|
-
// Show initial status + prompt
|
|
207
|
-
showPrompt(rl, bar);
|
|
208
|
-
rl.on('line', (line) => {
|
|
209
|
-
const handleLine = async () => {
|
|
210
|
-
const input = line.trim();
|
|
211
|
-
if (!input) {
|
|
212
|
-
showPrompt(rl, bar);
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
// Built-in shell commands
|
|
216
|
-
if (input === 'exit' || input === 'quit') {
|
|
217
|
-
poller.stop();
|
|
218
|
-
const msg = getResponse('farewell');
|
|
219
|
-
console.log(chalk.cyan(`\n${msg}\n`));
|
|
220
|
-
process.exit(0);
|
|
221
|
-
return; // unreachable, but makes intent clear
|
|
222
|
-
}
|
|
223
|
-
if (input === 'clear') {
|
|
224
|
-
console.clear();
|
|
225
|
-
showPrompt(rl, bar);
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
if (input === 'help all' || input === 'help') {
|
|
229
|
-
await printHelp();
|
|
230
|
-
showPrompt(rl, bar);
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
// Dispatch via subprocess ā keeps readline completely isolated
|
|
234
|
-
const args = input.split(/\s+/);
|
|
235
|
-
// Unknown command? Check dynamic entity types first, then fall through
|
|
236
|
-
const command = args[0];
|
|
237
|
-
if (command && !TOP_LEVEL_COMMANDS.includes(command)) {
|
|
238
|
-
// Dynamic entity type: `car add` ā `entity car add`
|
|
239
|
-
if (_dynamicEntityTypes.has(command)) {
|
|
240
|
-
rl.pause();
|
|
241
|
-
const result = await runCommand(['entity', ...args]);
|
|
242
|
-
rl.resume();
|
|
243
|
-
if (result === 'quit') {
|
|
244
|
-
poller.stop();
|
|
245
|
-
rl.close();
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
await poller.pollNow();
|
|
249
|
-
console.log('');
|
|
250
|
-
showPrompt(rl, bar);
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
// Any unrecognised input ā autonomous chat
|
|
254
|
-
rl.pause();
|
|
255
|
-
try {
|
|
256
|
-
await feralChat(input);
|
|
257
|
-
}
|
|
258
|
-
finally {
|
|
259
|
-
if (process.stdin.isTTY)
|
|
260
|
-
process.stdin.setRawMode(true);
|
|
261
|
-
rl.resume();
|
|
262
|
-
}
|
|
263
|
-
await poller.pollNow();
|
|
264
|
-
console.log('');
|
|
265
|
-
showPrompt(rl, bar);
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
rl.pause();
|
|
269
|
-
const result = await runCommand(args);
|
|
270
|
-
rl.resume();
|
|
271
|
-
if (result === 'quit') {
|
|
272
|
-
poller.stop();
|
|
273
|
-
rl.close();
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
// Refresh status bar data immediately (command may have
|
|
277
|
-
// started/stopped the service or changed queue state).
|
|
278
|
-
await poller.pollNow();
|
|
279
|
-
console.log('');
|
|
280
|
-
showPrompt(rl, bar);
|
|
281
|
-
};
|
|
282
|
-
handleLine().catch((err) => {
|
|
283
|
-
console.log(chalk.red(`Unexpected error: ${err instanceof Error ? err.message : err}`));
|
|
284
|
-
showPrompt(rl, bar);
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
|
-
// Ctrl+D closes the readline ā show farewell and exit
|
|
288
|
-
rl.on('close', async () => {
|
|
289
|
-
poller.stop();
|
|
290
|
-
const msg = getResponse('farewell');
|
|
291
|
-
console.log(chalk.cyan(`\n${msg}\n`));
|
|
292
|
-
process.exit(0);
|
|
293
|
-
});
|
|
294
|
-
// Handle Ctrl+C ā don't exit, just clear the line
|
|
295
|
-
rl.on('SIGINT', () => {
|
|
296
|
-
process.stdout.write('\n');
|
|
297
|
-
showPrompt(rl, bar);
|
|
298
|
-
});
|
|
299
|
-
// Keep the process alive
|
|
300
|
-
await new Promise(() => { });
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
async function printHelp() {
|
|
304
|
-
const b = chalk.bold;
|
|
305
|
-
const g = chalk.gray;
|
|
306
|
-
// Load entity types dynamically
|
|
307
|
-
const types = await loadEntityTypes().catch(() => []);
|
|
308
|
-
const COL = 14; // width of name column
|
|
309
|
-
const PAD = ' '.repeat(4 + COL + 2); // indent for continuation lines
|
|
310
|
-
const entityLines = types.map(t => {
|
|
311
|
-
const label = b(t.plural.padEnd(COL));
|
|
312
|
-
const desc = t.description ?? '';
|
|
313
|
-
const fields = t.fields.length > 0
|
|
314
|
-
? t.fields.map(f => f.key).join(g(' Ā· '))
|
|
315
|
-
: '';
|
|
316
|
-
const parts = [desc, fields].filter(Boolean);
|
|
317
|
-
return ` ${label} ${parts.join(g('\n' + PAD))}`;
|
|
318
|
-
}).join('\n');
|
|
319
|
-
const typesSuggestion = types.length < 5
|
|
320
|
-
? g(`\n Tip: "${b('type add')}" to track something new (cars, books, recipesā¦)`)
|
|
321
|
-
: '';
|
|
322
|
-
console.log(chalk.cyan(`
|
|
323
|
-
${b('Just tell me what you need.')}
|
|
324
|
-
|
|
325
|
-
Examples:
|
|
326
|
-
"remind me to call the dentist on Friday"
|
|
327
|
-
"note that the API key expires in 30 days"
|
|
328
|
-
"what's on my plate this week?"
|
|
329
|
-
"add a goal to run a 5k by June"
|
|
330
|
-
"mark the dentist task as done"
|
|
331
|
-
|
|
332
|
-
${b('Things I\'m tracking:')}
|
|
333
|
-
|
|
334
|
-
${entityLines || g(' (no entity types yet ā try "type add")')}
|
|
335
|
-
${typesSuggestion}
|
|
336
|
-
|
|
337
|
-
${b('Vault & system:')}
|
|
338
|
-
${g('today Ā· week Ā· sync Ā· cal Ā· time Ā· project')}
|
|
339
|
-
${g('service Ā· queue Ā· index Ā· cron Ā· config Ā· setup')}
|
|
340
|
-
${g('type [list|add|edit|remove] ā manage what I track')}
|
|
341
|
-
${g('feral [nodes|catalog|process] ā flow engine')}
|
|
342
|
-
|
|
343
|
-
${g('clear Ā· exit')}
|
|
344
|
-
`));
|
|
345
|
-
}
|
|
346
|
-
//# sourceMappingURL=shell.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/commands/shell.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/today.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"today.d.ts","sourceRoot":"","sources":["../../src/commands/today.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,YAAY,SA8GnB,CAAC;AAEP,eAAe,YAAY,CAAC"}
|
package/dist/commands/today.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import ora from 'ora';
|
|
4
|
-
import { promises as fs } from 'fs';
|
|
5
|
-
import path from 'path';
|
|
6
|
-
import { getVaultRoot } from '../state/manager.js';
|
|
7
|
-
import { getContextString } from '../context/reader.js';
|
|
8
|
-
import { getModelForCapability, createSystemPrompt } from '../llm/router.js';
|
|
9
|
-
import { getResponse } from '../responses.js';
|
|
10
|
-
import { debug } from '../utils/debug.js';
|
|
11
|
-
import { getActiveTodonts } from './todont.js';
|
|
12
|
-
export const todayCommand = new Command('today')
|
|
13
|
-
.description('Show daily todos and notes')
|
|
14
|
-
.action(async () => {
|
|
15
|
-
const spinner = ora(getResponse('processing')).start();
|
|
16
|
-
try {
|
|
17
|
-
const vaultRoot = await getVaultRoot();
|
|
18
|
-
const today = new Date().toISOString().split('T')[0];
|
|
19
|
-
const dayName = new Date().toLocaleDateString('en-US', { weekday: 'long' });
|
|
20
|
-
// Gather todos
|
|
21
|
-
const todosPath = path.join(vaultRoot, 'todos');
|
|
22
|
-
let allTodos = '';
|
|
23
|
-
try {
|
|
24
|
-
const files = await fs.readdir(todosPath);
|
|
25
|
-
for (const file of files) {
|
|
26
|
-
if (file.endsWith('.md') && !file.startsWith('.')) {
|
|
27
|
-
const content = await fs.readFile(path.join(todosPath, file), 'utf-8');
|
|
28
|
-
allTodos += content + '\n\n';
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
catch (err) {
|
|
33
|
-
debug('today', err);
|
|
34
|
-
// No todos folder or empty
|
|
35
|
-
}
|
|
36
|
-
// Gather events
|
|
37
|
-
const eventsPath = path.join(vaultRoot, 'events');
|
|
38
|
-
let schedule = '';
|
|
39
|
-
try {
|
|
40
|
-
const files = await fs.readdir(eventsPath);
|
|
41
|
-
for (const file of files) {
|
|
42
|
-
if (file.endsWith('.md') && !file.startsWith('.')) {
|
|
43
|
-
const content = await fs.readFile(path.join(eventsPath, file), 'utf-8');
|
|
44
|
-
schedule += content + '\n\n';
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
catch (err) {
|
|
49
|
-
debug('today', err);
|
|
50
|
-
// No events folder or empty
|
|
51
|
-
}
|
|
52
|
-
// Gather active todonts
|
|
53
|
-
const activeTodonts = await getActiveTodonts(today);
|
|
54
|
-
let todontSection = '';
|
|
55
|
-
for (const t of activeTodonts) {
|
|
56
|
-
const window = t.startDate && t.endDate ? ` (${t.startDate} ā ${t.endDate})` : '';
|
|
57
|
-
todontSection += `- š« ${t.title}${window}\n`;
|
|
58
|
-
if (t.content)
|
|
59
|
-
todontSection += ` ${t.content}\n`;
|
|
60
|
-
}
|
|
61
|
-
spinner.stop();
|
|
62
|
-
// Display header
|
|
63
|
-
console.log(chalk.bold.cyan(`\nš Today - ${dayName}, ${today}\n`));
|
|
64
|
-
// Try to use AI to summarize
|
|
65
|
-
try {
|
|
66
|
-
const context = await getContextString(vaultRoot);
|
|
67
|
-
const llm = await getModelForCapability('summarize');
|
|
68
|
-
const systemPrompt = createSystemPrompt(context);
|
|
69
|
-
const prompt = `Please provide a helpful summary of today's tasks and schedule for the user. Be concise and prioritize the most important items.
|
|
70
|
-
|
|
71
|
-
Today's Date: ${today}
|
|
72
|
-
|
|
73
|
-
Todos:
|
|
74
|
-
${allTodos || '(No todos)'}
|
|
75
|
-
|
|
76
|
-
Schedule:
|
|
77
|
-
${schedule || '(No scheduled events)'}
|
|
78
|
-
|
|
79
|
-
${todontSection ? `š« Things to AVOID today:\n${todontSection}` : ''}
|
|
80
|
-
|
|
81
|
-
Provide a prioritized summary of what the user should focus on today. If there are todonts (things to avoid), remind the user about them.`;
|
|
82
|
-
const spinner2 = ora(getResponse('thinking')).start();
|
|
83
|
-
const response = await llm.chat([{ role: 'user', content: prompt }], { systemPrompt });
|
|
84
|
-
spinner2.stop();
|
|
85
|
-
console.log(response);
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
// Fall back to simple display if AI not configured
|
|
89
|
-
console.log(chalk.bold('š Todos:'));
|
|
90
|
-
console.log(allTodos || chalk.gray(' No todos yet.\n'));
|
|
91
|
-
if (schedule) {
|
|
92
|
-
console.log(chalk.bold('š
Schedule:'));
|
|
93
|
-
console.log(schedule);
|
|
94
|
-
}
|
|
95
|
-
if (activeTodonts.length > 0) {
|
|
96
|
-
console.log(chalk.bold.red('š« Todonts (avoid today):'));
|
|
97
|
-
for (const t of activeTodonts) {
|
|
98
|
-
const window = t.startDate && t.endDate ? chalk.gray(` ${t.startDate} ā ${t.endDate}`) : chalk.gray(' always');
|
|
99
|
-
console.log(` š« ${chalk.red(t.title)}${window}`);
|
|
100
|
-
}
|
|
101
|
-
console.log('');
|
|
102
|
-
}
|
|
103
|
-
console.log(chalk.gray('\n(Configure AI with `phaibel config add-provider anthropic` for smart summaries)'));
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
catch (error) {
|
|
107
|
-
spinner.stop();
|
|
108
|
-
console.error(chalk.red(getResponse('error')), error);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
export default todayCommand;
|
|
112
|
-
//# sourceMappingURL=today.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"today.js","sourceRoot":"","sources":["../../src/commands/today.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/todo.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"todo.d.ts","sourceRoot":"","sources":["../../src/commands/todo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkTpC,eAAO,MAAM,WAAW,SA6alB,CAAC;AAEP,eAAe,WAAW,CAAC"}
|