create-walle 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/create-walle.js +10 -1
- package/package.json +1 -1
- package/template/bin/dev.sh +72 -0
- package/template/claude-task-manager/public/css/walle.css +23 -2
- package/template/claude-task-manager/public/index.html +194 -63
- package/template/claude-task-manager/public/js/walle.js +67 -38
- package/template/docs/ux-improvement-plan.md +84 -0
- package/template/package.json +5 -2
- package/template/wall-e/agent.js +4 -58
- package/template/wall-e/api-walle.js +27 -0
- package/template/wall-e/core-tasks.js +53 -0
- package/template/wall-e/skills/_bundled/file-ingest/SKILL.md +56 -0
- package/template/wall-e/skills/_bundled/file-ingest/run.js +142 -0
- package/template/wall-e/skills/_bundled/morning-briefing/run.js +2 -2
- package/template/wall-e/tools/local-tools.js +28 -0
|
@@ -30,9 +30,9 @@ async function main() {
|
|
|
30
30
|
try {
|
|
31
31
|
const { events } = await getCalendarEvents({ days_ahead: 0 });
|
|
32
32
|
const todayEvents = events.filter(e => {
|
|
33
|
-
if (e.allDay) return true;
|
|
34
33
|
const eDate = new Date(e.start);
|
|
35
|
-
|
|
34
|
+
if (isNaN(eDate)) return false;
|
|
35
|
+
return eDate.toISOString().slice(0, 10) === todayStr;
|
|
36
36
|
});
|
|
37
37
|
const seen = new Set();
|
|
38
38
|
const deduped = todayEvents.filter(e => {
|
|
@@ -654,6 +654,19 @@ const LOCAL_TOOL_DEFINITIONS = [
|
|
|
654
654
|
required: ['url'],
|
|
655
655
|
},
|
|
656
656
|
},
|
|
657
|
+
{
|
|
658
|
+
name: 'ingest_folder',
|
|
659
|
+
description: 'Read all text files in a folder and store them in Wall-E brain as memories. Supports .md, .txt, .json, .py, .js, .csv, and many more text formats. Files are deduplicated by path. Use when the user asks to "read a folder", "ingest files", "import documents", "load my notes", or "scan a directory into brain".',
|
|
660
|
+
input_schema: {
|
|
661
|
+
type: 'object',
|
|
662
|
+
properties: {
|
|
663
|
+
folder: { type: 'string', description: 'Path to folder (e.g., "~/Documents/notes")' },
|
|
664
|
+
pattern: { type: 'string', description: 'Glob pattern to filter files (default: "*" = all text files)' },
|
|
665
|
+
recursive: { type: 'boolean', description: 'Recurse into subdirectories (default: true)' },
|
|
666
|
+
},
|
|
667
|
+
required: ['folder'],
|
|
668
|
+
},
|
|
669
|
+
},
|
|
657
670
|
];
|
|
658
671
|
|
|
659
672
|
// ── Tool executor dispatch ──
|
|
@@ -679,10 +692,25 @@ async function executeLocalTool(name, input) {
|
|
|
679
692
|
case 'mail_send': return sendMail(input);
|
|
680
693
|
case 'system_info': return getSystemInfo();
|
|
681
694
|
case 'web_fetch': return webFetch(input.url, input);
|
|
695
|
+
case 'ingest_folder': return ingestFolder(input);
|
|
682
696
|
default: return null; // not a local tool
|
|
683
697
|
}
|
|
684
698
|
}
|
|
685
699
|
|
|
700
|
+
async function ingestFolder(input) {
|
|
701
|
+
const { execFileSync } = require('child_process');
|
|
702
|
+
const scriptPath = path.join(__dirname, '..', 'skills', '_bundled', 'file-ingest', 'run.js');
|
|
703
|
+
const config = JSON.stringify({ folder: input.folder, pattern: input.pattern, recursive: input.recursive });
|
|
704
|
+
try {
|
|
705
|
+
const result = execFileSync(process.execPath, [scriptPath, config], {
|
|
706
|
+
encoding: 'utf8', timeout: 60000, env: { ...process.env, SKILL_CONFIG: config },
|
|
707
|
+
});
|
|
708
|
+
return result;
|
|
709
|
+
} catch (e) {
|
|
710
|
+
return 'Error: ' + (e.stderr || e.message);
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
|
|
686
714
|
module.exports = {
|
|
687
715
|
executeLocalTool,
|
|
688
716
|
LOCAL_TOOL_DEFINITIONS,
|