cf-claw 3.0.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/dist/agent.d.ts +15 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +262 -0
- package/dist/agent.js.map +1 -0
- package/dist/agents.d.ts +51 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +478 -0
- package/dist/agents.js.map +1 -0
- package/dist/api/routes.d.ts +3 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +491 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/bot.d.ts +4 -0
- package/dist/bot.d.ts.map +1 -0
- package/dist/bot.js +295 -0
- package/dist/bot.js.map +1 -0
- package/dist/canvas.d.ts +37 -0
- package/dist/canvas.d.ts.map +1 -0
- package/dist/canvas.js +47 -0
- package/dist/canvas.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +202 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +6 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +384 -0
- package/dist/commands.js.map +1 -0
- package/dist/components/TaskList.d.ts +7 -0
- package/dist/components/TaskList.d.ts.map +1 -0
- package/dist/components/TaskList.js +37 -0
- package/dist/components/TaskList.js.map +1 -0
- package/dist/config/encryption.d.ts +10 -0
- package/dist/config/encryption.d.ts.map +1 -0
- package/dist/config/encryption.js +111 -0
- package/dist/config/encryption.js.map +1 -0
- package/dist/config/json-config.d.ts +114 -0
- package/dist/config/json-config.d.ts.map +1 -0
- package/dist/config/json-config.js +388 -0
- package/dist/config/json-config.js.map +1 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +137 -0
- package/dist/config.js.map +1 -0
- package/dist/context/pruning.d.ts +30 -0
- package/dist/context/pruning.d.ts.map +1 -0
- package/dist/context/pruning.js +132 -0
- package/dist/context/pruning.js.map +1 -0
- package/dist/dashboard/404/index.html +1 -0
- package/dist/dashboard/404.html +1 -0
- package/dist/dashboard/_next/static/chunks/117-c657912d4a6fa056.js +2 -0
- package/dist/dashboard/_next/static/chunks/191-a6922264096cb3ad.js +11 -0
- package/dist/dashboard/_next/static/chunks/343-71498a8257bc1e81.js +1 -0
- package/dist/dashboard/_next/static/chunks/app/_not-found/page-15cbe4395e02a084.js +1 -0
- package/dist/dashboard/_next/static/chunks/app/layout-191efbc962809bb4.js +1 -0
- package/dist/dashboard/_next/static/chunks/app/manual/page-3c401ecf89979cd7.js +1 -0
- package/dist/dashboard/_next/static/chunks/app/page-dff55e58941a3c4d.js +1 -0
- package/dist/dashboard/_next/static/chunks/fd9d1056-9583fa19bc194043.js +1 -0
- package/dist/dashboard/_next/static/chunks/framework-f66176bb897dc684.js +1 -0
- package/dist/dashboard/_next/static/chunks/main-2461f93106bcf687.js +1 -0
- package/dist/dashboard/_next/static/chunks/main-app-89f5ec28b3bb0e7f.js +1 -0
- package/dist/dashboard/_next/static/chunks/pages/_app-72b849fbd24ac258.js +1 -0
- package/dist/dashboard/_next/static/chunks/pages/_error-7ba65e1336b92748.js +1 -0
- package/dist/dashboard/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/dist/dashboard/_next/static/chunks/webpack-616e068a201ad621.js +1 -0
- package/dist/dashboard/_next/static/css/baff0f221c10680b.css +3 -0
- package/dist/dashboard/_next/static/pyqPyo6dkz4uTWdfdFAOJ/_buildManifest.js +1 -0
- package/dist/dashboard/_next/static/pyqPyo6dkz4uTWdfdFAOJ/_ssgManifest.js +1 -0
- package/dist/dashboard/index.html +1 -0
- package/dist/dashboard/index.txt +7 -0
- package/dist/dashboard/manual/index.html +1 -0
- package/dist/dashboard/manual/index.txt +7 -0
- package/dist/documents.d.ts +20 -0
- package/dist/documents.d.ts.map +1 -0
- package/dist/documents.js +227 -0
- package/dist/documents.js.map +1 -0
- package/dist/embeddings.d.ts +15 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +40 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/factory.d.ts +72 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +2010 -0
- package/dist/factory.js.map +1 -0
- package/dist/groups.d.ts +13 -0
- package/dist/groups.d.ts.map +1 -0
- package/dist/groups.js +42 -0
- package/dist/groups.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +223 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/taskStorage.d.ts +4 -0
- package/dist/lib/taskStorage.d.ts.map +1 -0
- package/dist/lib/taskStorage.js +28 -0
- package/dist/lib/taskStorage.js.map +1 -0
- package/dist/llm/anthropic.d.ts +13 -0
- package/dist/llm/anthropic.d.ts.map +1 -0
- package/dist/llm/anthropic.js +96 -0
- package/dist/llm/anthropic.js.map +1 -0
- package/dist/llm/failover.d.ts +13 -0
- package/dist/llm/failover.d.ts.map +1 -0
- package/dist/llm/failover.js +42 -0
- package/dist/llm/failover.js.map +1 -0
- package/dist/llm/google.d.ts +13 -0
- package/dist/llm/google.d.ts.map +1 -0
- package/dist/llm/google.js +112 -0
- package/dist/llm/google.js.map +1 -0
- package/dist/llm/groq.d.ts +8 -0
- package/dist/llm/groq.d.ts.map +1 -0
- package/dist/llm/groq.js +13 -0
- package/dist/llm/groq.js.map +1 -0
- package/dist/llm/index.d.ts +11 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +10 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/ollama.d.ts +9 -0
- package/dist/llm/ollama.d.ts.map +1 -0
- package/dist/llm/ollama.js +27 -0
- package/dist/llm/ollama.js.map +1 -0
- package/dist/llm/openai-compat.d.ts +17 -0
- package/dist/llm/openai-compat.d.ts.map +1 -0
- package/dist/llm/openai-compat.js +69 -0
- package/dist/llm/openai-compat.js.map +1 -0
- package/dist/llm/openrouter.d.ts +8 -0
- package/dist/llm/openrouter.d.ts.map +1 -0
- package/dist/llm/openrouter.js +20 -0
- package/dist/llm/openrouter.js.map +1 -0
- package/dist/llm/provider.d.ts +41 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/provider.js +2 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/llm/registry.d.ts +10 -0
- package/dist/llm/registry.d.ts.map +1 -0
- package/dist/llm/registry.js +90 -0
- package/dist/llm/registry.js.map +1 -0
- package/dist/llm/thinking.d.ts +7 -0
- package/dist/llm/thinking.d.ts.map +1 -0
- package/dist/llm/thinking.js +34 -0
- package/dist/llm/thinking.js.map +1 -0
- package/dist/llm.d.ts +17 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +184 -0
- package/dist/llm.js.map +1 -0
- package/dist/logs.d.ts +11 -0
- package/dist/logs.d.ts.map +1 -0
- package/dist/logs.js +54 -0
- package/dist/logs.js.map +1 -0
- package/dist/memory/knowledge-graph.d.ts +34 -0
- package/dist/memory/knowledge-graph.d.ts.map +1 -0
- package/dist/memory/knowledge-graph.js +137 -0
- package/dist/memory/knowledge-graph.js.map +1 -0
- package/dist/memory.d.ts +73 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +320 -0
- package/dist/memory.js.map +1 -0
- package/dist/mesh.d.ts +18 -0
- package/dist/mesh.d.ts.map +1 -0
- package/dist/mesh.js +120 -0
- package/dist/mesh.js.map +1 -0
- package/dist/paths.d.ts +11 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +51 -0
- package/dist/paths.js.map +1 -0
- package/dist/proactive/heartbeat.d.ts +4 -0
- package/dist/proactive/heartbeat.d.ts.map +1 -0
- package/dist/proactive/heartbeat.js +56 -0
- package/dist/proactive/heartbeat.js.map +1 -0
- package/dist/proactive/recap.d.ts +12 -0
- package/dist/proactive/recap.d.ts.map +1 -0
- package/dist/proactive/recap.js +90 -0
- package/dist/proactive/recap.js.map +1 -0
- package/dist/proactive/recommendations.d.ts +11 -0
- package/dist/proactive/recommendations.d.ts.map +1 -0
- package/dist/proactive/recommendations.js +92 -0
- package/dist/proactive/recommendations.js.map +1 -0
- package/dist/projects.d.ts +44 -0
- package/dist/projects.d.ts.map +1 -0
- package/dist/projects.js +101 -0
- package/dist/projects.js.map +1 -0
- package/dist/scheduler/index.d.ts +17 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +116 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/sessions.d.ts +19 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +176 -0
- package/dist/sessions.js.map +1 -0
- package/dist/skills/index.d.ts +14 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +126 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/swarm.d.ts +18 -0
- package/dist/swarm.d.ts.map +1 -0
- package/dist/swarm.js +146 -0
- package/dist/swarm.js.map +1 -0
- package/dist/taskListWidget.d.ts +76 -0
- package/dist/taskListWidget.d.ts.map +1 -0
- package/dist/taskListWidget.js +312 -0
- package/dist/taskListWidget.js.map +1 -0
- package/dist/tools/browser.d.ts +5 -0
- package/dist/tools/browser.d.ts.map +1 -0
- package/dist/tools/browser.js +104 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/config-tools.d.ts +4 -0
- package/dist/tools/config-tools.d.ts.map +1 -0
- package/dist/tools/config-tools.js +154 -0
- package/dist/tools/config-tools.js.map +1 -0
- package/dist/tools/files.d.ts +3 -0
- package/dist/tools/files.d.ts.map +1 -0
- package/dist/tools/files.js +208 -0
- package/dist/tools/files.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +1109 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/mcp-bridge.d.ts +5 -0
- package/dist/tools/mcp-bridge.d.ts.map +1 -0
- package/dist/tools/mcp-bridge.js +200 -0
- package/dist/tools/mcp-bridge.js.map +1 -0
- package/dist/tools/shell.d.ts +8 -0
- package/dist/tools/shell.d.ts.map +1 -0
- package/dist/tools/shell.js +78 -0
- package/dist/tools/shell.js.map +1 -0
- package/dist/tools/skills-manage.d.ts +25 -0
- package/dist/tools/skills-manage.d.ts.map +1 -0
- package/dist/tools/skills-manage.js +155 -0
- package/dist/tools/skills-manage.js.map +1 -0
- package/dist/tools/web-search.d.ts +4 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +60 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tts.d.ts +6 -0
- package/dist/tts.d.ts.map +1 -0
- package/dist/tts.js +42 -0
- package/dist/tts.js.map +1 -0
- package/dist/types/task.d.ts +7 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +2 -0
- package/dist/types/task.js.map +1 -0
- package/dist/typing.d.ts +18 -0
- package/dist/typing.d.ts.map +1 -0
- package/dist/typing.js +63 -0
- package/dist/typing.js.map +1 -0
- package/dist/usage.d.ts +28 -0
- package/dist/usage.d.ts.map +1 -0
- package/dist/usage.js +69 -0
- package/dist/usage.js.map +1 -0
- package/dist/voice.d.ts +6 -0
- package/dist/voice.d.ts.map +1 -0
- package/dist/voice.js +47 -0
- package/dist/voice.js.map +1 -0
- package/dist/webchat/index.d.ts +3 -0
- package/dist/webchat/index.d.ts.map +1 -0
- package/dist/webchat/index.js +3 -0
- package/dist/webchat/index.js.map +1 -0
- package/dist/webchat/public/index.html +344 -0
- package/dist/webchat/public/public/index.html +344 -0
- package/dist/webchat/public/public/task-list-widget.js +410 -0
- package/dist/webchat/public/task-list-widget.js +410 -0
- package/dist/webchat/server.d.ts +3 -0
- package/dist/webchat/server.d.ts.map +1 -0
- package/dist/webchat/server.js +80 -0
- package/dist/webchat/server.js.map +1 -0
- package/dist/webchat/ws.d.ts +4 -0
- package/dist/webchat/ws.d.ts.map +1 -0
- package/dist/webchat/ws.js +232 -0
- package/dist/webchat/ws.js.map +1 -0
- package/dist/webhooks/index.d.ts +14 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +86 -0
- package/dist/webhooks/index.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task List Widget (US-3)
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Checkbox/toggle for each task item
|
|
6
|
+
* - Click handler updates task.completed in state
|
|
7
|
+
* - Visual indicator class (strikethrough + opacity) on completed tasks
|
|
8
|
+
* - Full keyboard accessibility
|
|
9
|
+
* - Proper label/checkbox association with id/for attributes
|
|
10
|
+
*
|
|
11
|
+
* NOTE: This widget is designed as a singleton. Calling mount() multiple times
|
|
12
|
+
* will unmount the previous instance. Only one instance is supported per page.
|
|
13
|
+
*/
|
|
14
|
+
// ─── State ───────────────────────────────────────────────────────────────────
|
|
15
|
+
let tasks = [];
|
|
16
|
+
let mounted = false;
|
|
17
|
+
let containerEl = null;
|
|
18
|
+
let itemsEl = null;
|
|
19
|
+
let countEl = null;
|
|
20
|
+
// ─── Utilities ───────────────────────────────────────────────────────────────
|
|
21
|
+
function uid() {
|
|
22
|
+
return Math.random().toString(36).slice(2, 10);
|
|
23
|
+
}
|
|
24
|
+
function escapeAttr(str) {
|
|
25
|
+
return str.replace(/"/g, '"').replace(/'/g, ''');
|
|
26
|
+
}
|
|
27
|
+
// ─── Render Helpers ──────────────────────────────────────────────────────────
|
|
28
|
+
function createTaskEl(task) {
|
|
29
|
+
const itemEl = document.createElement('div');
|
|
30
|
+
itemEl.className = 'task-item';
|
|
31
|
+
if (task.completed) {
|
|
32
|
+
itemEl.classList.add('task-item--completed');
|
|
33
|
+
}
|
|
34
|
+
itemEl.dataset.taskId = task.id;
|
|
35
|
+
// Generate unique IDs for accessibility association
|
|
36
|
+
const checkboxId = `task-checkbox-${task.id}`;
|
|
37
|
+
const labelId = `task-label-${task.id}`;
|
|
38
|
+
// Label element with explicit `for` attribute
|
|
39
|
+
const labelEl = document.createElement('label');
|
|
40
|
+
labelEl.className = 'task-item__label';
|
|
41
|
+
labelEl.setAttribute('for', checkboxId);
|
|
42
|
+
labelEl.id = labelId;
|
|
43
|
+
// Checkbox with explicit `id` attribute
|
|
44
|
+
const checkbox = document.createElement('input');
|
|
45
|
+
checkbox.type = 'checkbox';
|
|
46
|
+
checkbox.className = 'task-item__checkbox';
|
|
47
|
+
checkbox.id = checkboxId;
|
|
48
|
+
checkbox.checked = task.completed;
|
|
49
|
+
checkbox.setAttribute('aria-labelledby', labelId);
|
|
50
|
+
checkbox.setAttribute('aria-label', `Mark "${task.text}" as ${task.completed ? 'incomplete' : 'complete'}`);
|
|
51
|
+
// Text span
|
|
52
|
+
const textSpan = document.createElement('span');
|
|
53
|
+
textSpan.className = 'task-item__text';
|
|
54
|
+
textSpan.textContent = task.text;
|
|
55
|
+
// Assemble: label wraps checkbox + text
|
|
56
|
+
labelEl.appendChild(checkbox);
|
|
57
|
+
labelEl.appendChild(textSpan);
|
|
58
|
+
itemEl.appendChild(labelEl);
|
|
59
|
+
// ─── Event Handling (US-3) ─────────────────────────────────────────────
|
|
60
|
+
// Use click on label with preventDefault to avoid browser double-toggle bug.
|
|
61
|
+
// This makes the flow deterministic:
|
|
62
|
+
// user clicks label → preventDefault stops browser toggle
|
|
63
|
+
// → toggleCompleted flips state AND sets checkbox.checked
|
|
64
|
+
// → single source of truth
|
|
65
|
+
labelEl.addEventListener('click', (e) => {
|
|
66
|
+
e.preventDefault();
|
|
67
|
+
toggleCompleted(task.id);
|
|
68
|
+
});
|
|
69
|
+
// Keyboard support: Enter/Space on checkbox triggers toggle
|
|
70
|
+
checkbox.addEventListener('keydown', (e) => {
|
|
71
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
72
|
+
e.preventDefault();
|
|
73
|
+
toggleCompleted(task.id);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return itemEl;
|
|
77
|
+
}
|
|
78
|
+
function renderItems() {
|
|
79
|
+
if (!itemsEl)
|
|
80
|
+
return;
|
|
81
|
+
// Clear existing items
|
|
82
|
+
itemsEl.innerHTML = '';
|
|
83
|
+
// Render each task
|
|
84
|
+
tasks.forEach((task) => {
|
|
85
|
+
itemsEl.appendChild(createTaskEl(task));
|
|
86
|
+
});
|
|
87
|
+
updateCount();
|
|
88
|
+
}
|
|
89
|
+
function updateCount() {
|
|
90
|
+
if (!countEl)
|
|
91
|
+
return;
|
|
92
|
+
const completed = tasks.filter((t) => t.completed).length;
|
|
93
|
+
const total = tasks.length;
|
|
94
|
+
if (total === 0) {
|
|
95
|
+
countEl.textContent = '';
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
countEl.textContent = `${completed} of ${total} completed`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
102
|
+
/**
|
|
103
|
+
* Toggle the completed state of a task.
|
|
104
|
+
*
|
|
105
|
+
* Flow:
|
|
106
|
+
* 1. Find task in state array
|
|
107
|
+
* 2. Flip task.completed boolean
|
|
108
|
+
* 3. Update DOM: toggle visual indicator class
|
|
109
|
+
* 4. Update DOM: sync checkbox.checked property
|
|
110
|
+
* 5. Update DOM: sync aria-label for screen readers
|
|
111
|
+
* 6. Update count display
|
|
112
|
+
*/
|
|
113
|
+
function toggleCompleted(taskId) {
|
|
114
|
+
// 1. Find task in state
|
|
115
|
+
const task = tasks.find((t) => t.id === taskId);
|
|
116
|
+
if (!task)
|
|
117
|
+
return;
|
|
118
|
+
// 2. Flip completed boolean
|
|
119
|
+
task.completed = !task.completed;
|
|
120
|
+
// 3. Find DOM element (use data attribute selector with proper escaping)
|
|
121
|
+
const escapedId = CSS.escape
|
|
122
|
+
? CSS.escape(taskId)
|
|
123
|
+
: taskId.replace(/[^a-zA-Z0-9_-]/g, '\\$&');
|
|
124
|
+
const itemEl = itemsEl?.querySelector(`[data-task-id="${escapedId}"]`);
|
|
125
|
+
if (!itemEl)
|
|
126
|
+
return;
|
|
127
|
+
// 4. Toggle visual indicator class
|
|
128
|
+
itemEl.classList.toggle('task-item--completed', task.completed);
|
|
129
|
+
// 5. Sync checkbox and aria-label (inside null guard)
|
|
130
|
+
const checkbox = itemEl.querySelector('input[type="checkbox"]');
|
|
131
|
+
if (checkbox) {
|
|
132
|
+
checkbox.checked = task.completed;
|
|
133
|
+
checkbox.setAttribute('aria-label', `Mark "${task.text}" as ${task.completed ? 'incomplete' : 'complete'}`);
|
|
134
|
+
}
|
|
135
|
+
// 6. Update count
|
|
136
|
+
updateCount();
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Add a new task to the list.
|
|
140
|
+
*/
|
|
141
|
+
function addTask(text) {
|
|
142
|
+
const task = { id: uid(), text, completed: false };
|
|
143
|
+
tasks.push(task);
|
|
144
|
+
if (itemsEl) {
|
|
145
|
+
itemsEl.appendChild(createTaskEl(task));
|
|
146
|
+
}
|
|
147
|
+
updateCount();
|
|
148
|
+
return task;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Remove a task from the list.
|
|
152
|
+
*/
|
|
153
|
+
function removeTask(taskId) {
|
|
154
|
+
const index = tasks.findIndex((t) => t.id === taskId);
|
|
155
|
+
if (index === -1)
|
|
156
|
+
return false;
|
|
157
|
+
tasks.splice(index, 1);
|
|
158
|
+
// Remove from DOM
|
|
159
|
+
const escapedId = CSS.escape
|
|
160
|
+
? CSS.escape(taskId)
|
|
161
|
+
: taskId.replace(/[^a-zA-Z0-9_-]/g, '\\$&');
|
|
162
|
+
const itemEl = itemsEl?.querySelector(`[data-task-id="${escapedId}"]`);
|
|
163
|
+
if (itemEl) {
|
|
164
|
+
itemEl.remove();
|
|
165
|
+
}
|
|
166
|
+
updateCount();
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Replace all tasks (e.g., for hydration from external source).
|
|
171
|
+
*/
|
|
172
|
+
function setTasks(newTasks) {
|
|
173
|
+
tasks = newTasks
|
|
174
|
+
.filter((t) => t && t.text)
|
|
175
|
+
.map((t) => ({
|
|
176
|
+
id: t.id || uid(),
|
|
177
|
+
text: t.text,
|
|
178
|
+
completed: !!t.completed,
|
|
179
|
+
}));
|
|
180
|
+
renderItems();
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get a copy of the current tasks array.
|
|
184
|
+
*/
|
|
185
|
+
function getTasks() {
|
|
186
|
+
return tasks.map((t) => ({ ...t }));
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Mount the widget into a container element.
|
|
190
|
+
*
|
|
191
|
+
* NOTE: This widget is a singleton. Calling mount() multiple times will
|
|
192
|
+
* unmount any previous instance. Only one instance is supported per page.
|
|
193
|
+
*/
|
|
194
|
+
function mount(container) {
|
|
195
|
+
// Singleton behavior: unmount previous instance if exists
|
|
196
|
+
if (mounted) {
|
|
197
|
+
unmount();
|
|
198
|
+
}
|
|
199
|
+
containerEl = container;
|
|
200
|
+
containerEl.innerHTML = '';
|
|
201
|
+
// Create wrapper
|
|
202
|
+
const wrapper = document.createElement('div');
|
|
203
|
+
wrapper.className = 'task-list-widget';
|
|
204
|
+
// Create items container
|
|
205
|
+
itemsEl = document.createElement('div');
|
|
206
|
+
itemsEl.className = 'task-list-widget__items';
|
|
207
|
+
itemsEl.setAttribute('role', 'list');
|
|
208
|
+
itemsEl.setAttribute('aria-label', 'Task list');
|
|
209
|
+
// Create count display
|
|
210
|
+
countEl = document.createElement('div');
|
|
211
|
+
countEl.className = 'task-list-widget__count';
|
|
212
|
+
countEl.setAttribute('aria-live', 'polite');
|
|
213
|
+
countEl.setAttribute('aria-atomic', 'true');
|
|
214
|
+
wrapper.appendChild(itemsEl);
|
|
215
|
+
wrapper.appendChild(countEl);
|
|
216
|
+
containerEl.appendChild(wrapper);
|
|
217
|
+
mounted = true;
|
|
218
|
+
// Render existing tasks
|
|
219
|
+
renderItems();
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Unmount the widget and clean up.
|
|
223
|
+
*/
|
|
224
|
+
function unmount() {
|
|
225
|
+
if (containerEl) {
|
|
226
|
+
containerEl.innerHTML = '';
|
|
227
|
+
}
|
|
228
|
+
containerEl = null;
|
|
229
|
+
itemsEl = null;
|
|
230
|
+
countEl = null;
|
|
231
|
+
mounted = false;
|
|
232
|
+
}
|
|
233
|
+
window.__taskListWidget = {
|
|
234
|
+
mount,
|
|
235
|
+
unmount,
|
|
236
|
+
addTask,
|
|
237
|
+
removeTask,
|
|
238
|
+
setTasks,
|
|
239
|
+
getTasks,
|
|
240
|
+
toggleCompleted,
|
|
241
|
+
};
|
|
242
|
+
// ─── Styles ──────────────────────────────────────────────────────────────────
|
|
243
|
+
const styles = document.createElement('style');
|
|
244
|
+
styles.textContent = `
|
|
245
|
+
.task-list-widget {
|
|
246
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
247
|
+
max-width: 500px;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.task-list-widget__items {
|
|
251
|
+
display: flex;
|
|
252
|
+
flex-direction: column;
|
|
253
|
+
gap: 4px;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.task-item {
|
|
257
|
+
padding: 12px 16px;
|
|
258
|
+
background: #fff;
|
|
259
|
+
border: 1px solid #e0e0e0;
|
|
260
|
+
border-radius: 8px;
|
|
261
|
+
transition: opacity 0.2s ease, background-color 0.2s ease;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.task-item:hover {
|
|
265
|
+
background: #f9f9f9;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.task-item--completed {
|
|
269
|
+
opacity: 0.7;
|
|
270
|
+
background: #f5f5f5;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.task-item__label {
|
|
274
|
+
display: flex;
|
|
275
|
+
align-items: center;
|
|
276
|
+
gap: 12px;
|
|
277
|
+
cursor: pointer;
|
|
278
|
+
user-select: none;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.task-item__checkbox {
|
|
282
|
+
width: 18px;
|
|
283
|
+
height: 18px;
|
|
284
|
+
cursor: pointer;
|
|
285
|
+
accent-color: #4caf50;
|
|
286
|
+
flex-shrink: 0;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.task-item__text {
|
|
290
|
+
flex: 1;
|
|
291
|
+
font-size: 14px;
|
|
292
|
+
line-height: 1.4;
|
|
293
|
+
color: #333;
|
|
294
|
+
transition: color 0.2s ease, text-decoration 0.2s ease;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.task-item--completed .task-item__text {
|
|
298
|
+
text-decoration: line-through;
|
|
299
|
+
color: #888;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.task-list-widget__count {
|
|
303
|
+
margin-top: 12px;
|
|
304
|
+
padding: 8px 16px;
|
|
305
|
+
font-size: 12px;
|
|
306
|
+
color: #666;
|
|
307
|
+
text-align: right;
|
|
308
|
+
}
|
|
309
|
+
`;
|
|
310
|
+
document.head.appendChild(styles);
|
|
311
|
+
export { mount, unmount, addTask, removeTask, setTasks, getTasks, toggleCompleted };
|
|
312
|
+
//# sourceMappingURL=taskListWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskListWidget.js","sourceRoot":"","sources":["../src/taskListWidget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/tools/browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AA8BvC,QAAA,MAAM,OAAO,EAAE,IAuEd,CAAC;AAEF,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAMlD;AAED,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
let browserInstance = null;
|
|
2
|
+
let browserPage = null;
|
|
3
|
+
async function getBrowser() {
|
|
4
|
+
if (browserPage)
|
|
5
|
+
return { page: browserPage };
|
|
6
|
+
try {
|
|
7
|
+
// @ts-ignore - optional dependency
|
|
8
|
+
const pw = await import("playwright");
|
|
9
|
+
const { chromium } = pw;
|
|
10
|
+
browserInstance = await chromium.launch({ headless: true });
|
|
11
|
+
browserPage = await browserInstance.newPage({
|
|
12
|
+
viewport: { width: 1280, height: 720 },
|
|
13
|
+
userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
|
|
14
|
+
});
|
|
15
|
+
return { page: browserPage };
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
throw new Error(`Playwright not available. Install with: npx playwright install chromium\n${err.message}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function takeScreenshot() {
|
|
22
|
+
const { page } = await getBrowser();
|
|
23
|
+
const screenshot = await page.screenshot({ type: "png" });
|
|
24
|
+
const base64 = Buffer.from(screenshot).toString("base64");
|
|
25
|
+
return `data:image/png;base64,${base64.substring(0, 500)}... (${(screenshot.length / 1024).toFixed(1)}KB screenshot taken)`;
|
|
26
|
+
}
|
|
27
|
+
const browser = {
|
|
28
|
+
name: "browser",
|
|
29
|
+
description: "Automate a web browser. Actions: navigate, click, type, screenshot, extract. Use for web browsing, scraping, form filling.",
|
|
30
|
+
input_schema: {
|
|
31
|
+
type: "object",
|
|
32
|
+
properties: {
|
|
33
|
+
action: {
|
|
34
|
+
type: "string",
|
|
35
|
+
description: 'One of: "navigate", "click", "type", "screenshot", "extract"',
|
|
36
|
+
},
|
|
37
|
+
url: { type: "string", description: "URL to navigate to (for navigate action)." },
|
|
38
|
+
selector: { type: "string", description: "CSS selector for click/type actions." },
|
|
39
|
+
text: { type: "string", description: "Text to type (for type action)." },
|
|
40
|
+
query: { type: "string", description: "What to extract from the page (for extract action)." },
|
|
41
|
+
},
|
|
42
|
+
required: ["action"],
|
|
43
|
+
},
|
|
44
|
+
execute: async (input) => {
|
|
45
|
+
const action = input.action;
|
|
46
|
+
try {
|
|
47
|
+
const { page } = await getBrowser();
|
|
48
|
+
switch (action) {
|
|
49
|
+
case "navigate": {
|
|
50
|
+
const url = input.url;
|
|
51
|
+
if (!url)
|
|
52
|
+
return "Error: url is required for navigate action.";
|
|
53
|
+
await page.goto(url, { waitUntil: "domcontentloaded", timeout: 30000 });
|
|
54
|
+
const title = await page.title();
|
|
55
|
+
return `Navigated to: ${title}\nURL: ${page.url()}`;
|
|
56
|
+
}
|
|
57
|
+
case "click": {
|
|
58
|
+
const selector = input.selector;
|
|
59
|
+
if (!selector)
|
|
60
|
+
return "Error: selector is required for click action.";
|
|
61
|
+
await page.click(selector, { timeout: 10000 });
|
|
62
|
+
return `Clicked: ${selector}`;
|
|
63
|
+
}
|
|
64
|
+
case "type": {
|
|
65
|
+
const selector = input.selector;
|
|
66
|
+
const text = input.text;
|
|
67
|
+
if (!selector || !text)
|
|
68
|
+
return "Error: selector and text are required for type action.";
|
|
69
|
+
await page.fill(selector, text);
|
|
70
|
+
return `Typed "${text}" into ${selector}`;
|
|
71
|
+
}
|
|
72
|
+
case "screenshot": {
|
|
73
|
+
const desc = await takeScreenshot();
|
|
74
|
+
return desc;
|
|
75
|
+
}
|
|
76
|
+
case "extract": {
|
|
77
|
+
const query = input.query || "all text";
|
|
78
|
+
const content = await page.evaluate((q) => {
|
|
79
|
+
const body = document.body;
|
|
80
|
+
if (q === "all text")
|
|
81
|
+
return body.innerText.substring(0, 10000);
|
|
82
|
+
const elements = document.querySelectorAll(q);
|
|
83
|
+
return Array.from(elements).map((el) => el.textContent).join("\n").substring(0, 10000);
|
|
84
|
+
}, query);
|
|
85
|
+
return content || "No content found.";
|
|
86
|
+
}
|
|
87
|
+
default:
|
|
88
|
+
return `Error: Unknown action "${action}". Use: navigate, click, type, screenshot, extract.`;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
return `Error: ${err.message}`;
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
export async function closeBrowser() {
|
|
97
|
+
if (browserInstance) {
|
|
98
|
+
await browserInstance.close();
|
|
99
|
+
browserInstance = null;
|
|
100
|
+
browserPage = null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export default browser;
|
|
104
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/tools/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-tools.d.ts","sourceRoot":"","sources":["../../src/tools/config-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAIvC,QAAA,MAAM,WAAW,EAAE,IAAI,EAgKtB,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { getConfig, setConfig, setConfigSecret, listConfigPaths, isSecretField, loadConfig } from "../config.js";
|
|
2
|
+
const configTools = [
|
|
3
|
+
{
|
|
4
|
+
name: "config_read",
|
|
5
|
+
description: "Read configuration values from config.json. Specify a path to read a specific value, or no path to read everything. Secrets (API keys, tokens) are automatically decrypted.",
|
|
6
|
+
input_schema: {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {
|
|
9
|
+
path: {
|
|
10
|
+
type: "string",
|
|
11
|
+
description: "Dot-notation path to read (e.g., 'models.active', 'shell.allowlist'). If omitted, returns entire config.",
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
execute: async (input) => {
|
|
16
|
+
const path = input.path;
|
|
17
|
+
if (!path) {
|
|
18
|
+
const fullConfig = await getConfig();
|
|
19
|
+
return JSON.stringify(fullConfig, null, 2);
|
|
20
|
+
}
|
|
21
|
+
const value = await getConfig(path);
|
|
22
|
+
if (value === undefined) {
|
|
23
|
+
return `Config path '${path}' not found.`;
|
|
24
|
+
}
|
|
25
|
+
if (isSecretField(path) && typeof value === "string") {
|
|
26
|
+
return `[Secret] ${value}`;
|
|
27
|
+
}
|
|
28
|
+
return JSON.stringify(value, null, 2);
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: "config_write",
|
|
33
|
+
description: "Write a configuration value to config.json. For secret values (API keys, tokens), the value will be automatically encrypted. Use this to update settings, add API keys, or modify configuration.",
|
|
34
|
+
input_schema: {
|
|
35
|
+
type: "object",
|
|
36
|
+
properties: {
|
|
37
|
+
path: {
|
|
38
|
+
type: "string",
|
|
39
|
+
description: "Dot-notation path to write (e.g., 'models.active', 'shell.allowlist', 'features.maxAgentIterations')",
|
|
40
|
+
},
|
|
41
|
+
value: {
|
|
42
|
+
description: "The value to write. For secret fields (paths ending in apiKey, token, password), encryption is automatic.",
|
|
43
|
+
},
|
|
44
|
+
encrypt: {
|
|
45
|
+
type: "boolean",
|
|
46
|
+
description: "Set to true to encrypt the value (for secrets). Usually not needed as encryption is automatic for known secret paths.",
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
required: ["path", "value"],
|
|
50
|
+
},
|
|
51
|
+
execute: async (input) => {
|
|
52
|
+
const path = input.path;
|
|
53
|
+
const value = input.value;
|
|
54
|
+
const forceEncrypt = input.encrypt;
|
|
55
|
+
if (!path || !value) {
|
|
56
|
+
return "Error: path and value are required.";
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
if (isSecretField(path) || forceEncrypt) {
|
|
60
|
+
await setConfigSecret(path, String(value));
|
|
61
|
+
return `✅ Secret saved and encrypted at '${path}'`;
|
|
62
|
+
}
|
|
63
|
+
await setConfig(path, value);
|
|
64
|
+
return `✅ Config updated at '${path}'`;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
68
|
+
return `❌ Failed to write config: ${message}`;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: "config_list",
|
|
74
|
+
description: "List all available configuration paths in config.json. Useful to discover what settings can be modified.",
|
|
75
|
+
input_schema: {
|
|
76
|
+
type: "object",
|
|
77
|
+
properties: {},
|
|
78
|
+
},
|
|
79
|
+
execute: async () => {
|
|
80
|
+
try {
|
|
81
|
+
const config = loadConfig();
|
|
82
|
+
const paths = listConfigPaths(config);
|
|
83
|
+
const categorized = {
|
|
84
|
+
models: [],
|
|
85
|
+
telegram: [],
|
|
86
|
+
shell: [],
|
|
87
|
+
webchat: [],
|
|
88
|
+
voice: [],
|
|
89
|
+
features: [],
|
|
90
|
+
};
|
|
91
|
+
for (const p of paths) {
|
|
92
|
+
const section = p.split(".")[0];
|
|
93
|
+
if (categorized[section]) {
|
|
94
|
+
categorized[section].push(p);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
categorized.models.push(p);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
let output = "📋 Available config paths:\n\n";
|
|
101
|
+
for (const [section, paths] of Object.entries(categorized)) {
|
|
102
|
+
if (paths.length > 0) {
|
|
103
|
+
output += `### ${section}\n`;
|
|
104
|
+
for (const p of paths.sort()) {
|
|
105
|
+
const isSecret = isSecretField(p);
|
|
106
|
+
output += ` - ${p}${isSecret ? " 🔒" : ""}\n`;
|
|
107
|
+
}
|
|
108
|
+
output += "\n";
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return output;
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
115
|
+
return `❌ Failed to list config paths: ${message}`;
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: "config_set_secret",
|
|
121
|
+
description: "Explicitly encrypt and store a secret value (API key, token, password). Use this for API keys that need to be stored securely.",
|
|
122
|
+
input_schema: {
|
|
123
|
+
type: "object",
|
|
124
|
+
properties: {
|
|
125
|
+
path: {
|
|
126
|
+
type: "string",
|
|
127
|
+
description: "Dot-notation path for the secret (e.g., 'models.providers.glm.apiKey')",
|
|
128
|
+
},
|
|
129
|
+
value: {
|
|
130
|
+
type: "string",
|
|
131
|
+
description: "The secret value to encrypt and store",
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
required: ["path", "value"],
|
|
135
|
+
},
|
|
136
|
+
execute: async (input) => {
|
|
137
|
+
const path = input.path;
|
|
138
|
+
const value = input.value;
|
|
139
|
+
if (!path || !value) {
|
|
140
|
+
return "Error: path and value are required.";
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
await setConfigSecret(path, value);
|
|
144
|
+
return `✅ Secret encrypted and saved at '${path}'`;
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
148
|
+
return `❌ Failed to save secret: ${message}`;
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
];
|
|
153
|
+
export default configTools;
|
|
154
|
+
//# sourceMappingURL=config-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-tools.js","sourceRoot":"","sources":["../../src/tools/config-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AA2MvC,eAAO,MAAM,SAAS,EAAE,IAAI,EAAwE,CAAC"}
|