@siftd/connect-agent 0.2.33 → 0.2.34

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.js CHANGED
@@ -5,6 +5,7 @@ import { MasterOrchestrator } from './orchestrator.js';
5
5
  import { AgentWebSocket } from './websocket.js';
6
6
  import { startHeartbeat, stopHeartbeat, getHeartbeatState } from './heartbeat.js';
7
7
  import { loadHubContext, readScratchpad } from './core/hub.js';
8
+ import { PRODUCT_FULL_NAME } from './branding.js';
8
9
  import { startPreviewWorker, stopPreviewWorker } from './core/preview-worker.js';
9
10
  // Strip ANSI escape codes for clean output
10
11
  function stripAnsi(str) {
@@ -218,7 +219,7 @@ export async function runAgent(pollInterval = 2000) {
218
219
  const mode = orchestrator ? 'ORCHESTRATOR' : 'SIMPLE RELAY';
219
220
  const deployment = getDeploymentInfo();
220
221
  console.log('╔══════════════════════════════════════════════════╗');
221
- console.log('║ Connect Agent - Master Orchestrator ║');
222
+ console.log(`║ ${PRODUCT_FULL_NAME.padEnd(47)}║`);
222
223
  console.log(`║ Mode: ${mode.padEnd(41)}║`);
223
224
  console.log(`║ Deployment: ${deployment.mode.toUpperCase().padEnd(35)}║`);
224
225
  console.log('╚══════════════════════════════════════════════════╝\n');
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Lia Branding Configuration
3
+ *
4
+ * Central source of truth for product naming, paths, and URLs.
5
+ * Update this file to change branding across the agent.
6
+ */
7
+ export declare const PRODUCT_NAME = "Lia";
8
+ export declare const PRODUCT_FULL_NAME = "Lia by Siftd";
9
+ export declare const COMPANY_NAME = "Siftd";
10
+ export declare const PACKAGE_NAME = "@siftd/connect-agent";
11
+ export declare const DOMAIN = "siftd.app";
12
+ export declare const LIA_URL = "https://lia.siftd.app";
13
+ export declare const HUB_URL = "https://hub.siftd.app";
14
+ export declare const LIA_HUB_DIR = "Lia-Hub";
15
+ export declare const SYSTEM_HUB_DIR = ".connect-hub";
16
+ export declare const HUB_FILES: {
17
+ readonly AGENTS: "AGENTS.md";
18
+ readonly CLAUDE: "CLAUDE.md";
19
+ readonly LANDMARKS: "LANDMARKS.md";
20
+ readonly MISTAKES: "MISTAKES.md";
21
+ readonly SCRATCHPAD: "notebook-a/SCRATCHPAD.md";
22
+ readonly WORKER_LOG: "notebook-a/WORKER-LOG.md";
23
+ readonly OUTPUTS: "shared/outputs/";
24
+ };
25
+ export declare const CLI_BANNER = "\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n\u2551 Lia by Siftd \u2551\n\u2551 Your AI assistant powered by Claude \u2551\n\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n";
26
+ export declare const CLI_BANNER_SLIM = "Lia Agent";
27
+ export declare const PRODUCT_DESCRIPTION = "Refined Memory, Context-management, and tool use so you can trust your agents. Lia just knows what you want to do.";
28
+ export declare const IDENTITY: {
29
+ readonly name: "Lia";
30
+ readonly role: "personal AI assistant";
31
+ readonly personality: "warm, helpful, and proactive";
32
+ readonly capabilities: readonly ["memory and context management", "task delegation to workers", "web search and research", "file and code operations via workers", "scheduling and reminders"];
33
+ };
34
+ /**
35
+ * Get user workspace path
36
+ * On VM: /data/{sanitized_email}/
37
+ * Local: ~/Lia-Hub/
38
+ */
39
+ export declare function getUserWorkspacePath(userId?: string): string;
40
+ /**
41
+ * Get hub path for current user
42
+ */
43
+ export declare function getHubPath(): string;
44
+ /**
45
+ * Get system hub path (legacy, for migration)
46
+ */
47
+ export declare function getSystemHubPath(): string;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Lia Branding Configuration
3
+ *
4
+ * Central source of truth for product naming, paths, and URLs.
5
+ * Update this file to change branding across the agent.
6
+ */
7
+ // Product names
8
+ export const PRODUCT_NAME = 'Lia';
9
+ export const PRODUCT_FULL_NAME = 'Lia by Siftd';
10
+ export const COMPANY_NAME = 'Siftd';
11
+ export const PACKAGE_NAME = '@siftd/connect-agent'; // Keep for npm compatibility
12
+ // URLs
13
+ export const DOMAIN = 'siftd.app';
14
+ export const LIA_URL = 'https://lia.siftd.app';
15
+ export const HUB_URL = 'https://hub.siftd.app'; // Future
16
+ // Hub paths (per-user workspace)
17
+ export const LIA_HUB_DIR = 'Lia-Hub'; // ~/Lia-Hub/
18
+ export const SYSTEM_HUB_DIR = '.connect-hub'; // ~/.connect-hub/ (legacy, read-only for migration)
19
+ // Hub files
20
+ export const HUB_FILES = {
21
+ AGENTS: 'AGENTS.md',
22
+ CLAUDE: 'CLAUDE.md',
23
+ LANDMARKS: 'LANDMARKS.md',
24
+ MISTAKES: 'MISTAKES.md',
25
+ SCRATCHPAD: 'notebook-a/SCRATCHPAD.md',
26
+ WORKER_LOG: 'notebook-a/WORKER-LOG.md',
27
+ OUTPUTS: 'shared/outputs/',
28
+ };
29
+ // Banner and CLI display
30
+ export const CLI_BANNER = `
31
+ ╔══════════════════════════════════════════════════╗
32
+ ║ ${PRODUCT_FULL_NAME} ║
33
+ ║ Your AI assistant powered by Claude ║
34
+ ╚══════════════════════════════════════════════════╝
35
+ `;
36
+ export const CLI_BANNER_SLIM = `${PRODUCT_NAME} Agent`;
37
+ // User-facing descriptions
38
+ export const PRODUCT_DESCRIPTION = 'Refined Memory, Context-management, and tool use so you can trust your agents. Lia just knows what you want to do.';
39
+ // Agent identity keywords (for SYSTEM_PROMPT)
40
+ export const IDENTITY = {
41
+ name: PRODUCT_NAME,
42
+ role: 'personal AI assistant',
43
+ personality: 'warm, helpful, and proactive',
44
+ capabilities: [
45
+ 'memory and context management',
46
+ 'task delegation to workers',
47
+ 'web search and research',
48
+ 'file and code operations via workers',
49
+ 'scheduling and reminders',
50
+ ],
51
+ };
52
+ /**
53
+ * Get user workspace path
54
+ * On VM: /data/{sanitized_email}/
55
+ * Local: ~/Lia-Hub/
56
+ */
57
+ export function getUserWorkspacePath(userId) {
58
+ const home = process.env.HOME || '/tmp';
59
+ // VM mode - workspace is set via HOME env var by vm-manager
60
+ // The vm-manager sets HOME to /data/{email}/
61
+ if (process.env.CONNECT_SERVER_URL && process.env.CONNECT_USER_ID) {
62
+ return home; // Already set to user-specific directory
63
+ }
64
+ // Local mode - use Lia-Hub in home directory
65
+ return `${home}/${LIA_HUB_DIR}`;
66
+ }
67
+ /**
68
+ * Get hub path for current user
69
+ */
70
+ export function getHubPath() {
71
+ const home = process.env.HOME || '/tmp';
72
+ return `${home}/${LIA_HUB_DIR}`;
73
+ }
74
+ /**
75
+ * Get system hub path (legacy, for migration)
76
+ */
77
+ export function getSystemHubPath() {
78
+ const home = process.env.HOME || '/tmp';
79
+ return `${home}/${SYSTEM_HUB_DIR}`;
80
+ }
package/dist/cli.js CHANGED
@@ -5,13 +5,14 @@ import { getServerUrl, setServerUrl, setAgentToken, setUserId, setAnthropicApiKe
5
5
  import { connectWithPairingCode, checkConnection } from './api.js';
6
6
  import { runAgent } from './agent.js';
7
7
  import { ensureLiaHub, getLiaHubPaths } from './core/hub.js';
8
+ import { PRODUCT_FULL_NAME } from './branding.js';
8
9
  program
9
- .name('connect-agent')
10
- .description('Local agent for Connect web app')
10
+ .name('lia-agent')
11
+ .description(`${PRODUCT_FULL_NAME} - Personal AI assistant agent`)
11
12
  .version('0.1.0');
12
13
  program
13
14
  .command('pair')
14
- .description('Pair with Connect web app using a pairing code')
15
+ .description('Pair with Lia using a pairing code')
15
16
  .argument('<code>', 'The 6-character pairing code from the web app')
16
17
  .option('-s, --server <url>', 'Server URL', getServerUrl())
17
18
  .option('-k, --api-key <key>', 'Anthropic API key for orchestrator mode')
@@ -52,7 +53,7 @@ program
52
53
  .option('-i, --interval <ms>', 'Poll interval in milliseconds', '2000')
53
54
  .action(async (options) => {
54
55
  if (!isConfigured()) {
55
- console.error('Agent not configured. Run "connect-agent pair <code>" first.');
56
+ console.error('Agent not configured. Run "lia-agent pair <code>" first.');
56
57
  process.exit(1);
57
58
  }
58
59
  const spinner = ora('Checking connection...').start();
@@ -76,7 +77,7 @@ program
76
77
  .command('status')
77
78
  .description('Show agent configuration status')
78
79
  .action(async () => {
79
- console.log('Connect Agent Status\n');
80
+ console.log(`${PRODUCT_FULL_NAME} - Status\n`);
80
81
  console.log(`Config file: ${getConfigPath()}`);
81
82
  console.log(`Server URL: ${getServerUrl()}`);
82
83
  console.log(`Configured: ${isConfigured() ? 'Yes' : 'No'}`);
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Runner Heartbeat Module
3
3
  *
4
- * Sends periodic heartbeats to the Connect server to maintain presence.
4
+ * Sends periodic heartbeats to the Lia server to maintain presence.
5
5
  * This is what makes a runner "connected" - NOT the pairing token.
6
6
  *
7
7
  * Both local and VM runners use this same module.
package/dist/heartbeat.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Runner Heartbeat Module
3
3
  *
4
- * Sends periodic heartbeats to the Connect server to maintain presence.
4
+ * Sends periodic heartbeats to the Lia server to maintain presence.
5
5
  * This is what makes a runner "connected" - NOT the pairing token.
6
6
  *
7
7
  * Both local and VM runners use this same module.
@@ -61,96 +61,59 @@ function getFileType(path) {
61
61
  return 'text';
62
62
  return 'other';
63
63
  }
64
- const SYSTEM_PROMPT = `You are a MASTER ORCHESTRATOR - NOT a worker. You delegate ALL file/code work to Claude Code CLI workers.
64
+ const SYSTEM_PROMPT = `You are Lia, a personal AI assistant by Siftd. You orchestrate work through Claude Code workers while maintaining memory and context.
65
65
 
66
- CRITICAL IDENTITY:
67
- - You are the BRAIN, not the hands
68
- - You ORCHESTRATE workers - you don't do the work yourself
69
- - You REMEMBER everything using your memory tools
70
- - You PLAN and COORDINATE, then delegate execution
66
+ YOUR IDENTITY:
67
+ - Name: Lia (by Siftd)
68
+ - Role: Personal AI assistant with memory and orchestration
69
+ - Style: Warm, helpful, proactive - you remember things and anticipate needs
70
+ - Architecture: You orchestrate workers (Claude Code CLI) to do file/code work
71
71
 
72
- STRICT TOOL USAGE RULES:
72
+ HOW YOU WORK:
73
+ You are the orchestrator, not the executor. You coordinate and remember while workers do the hands-on work.
73
74
 
74
- USE bash ONLY for READ-ONLY operations:
75
+ TOOL RULES:
76
+
77
+ ✅ bash - READ-ONLY operations only:
75
78
  - ls, pwd, cat, head, tail, find, which, echo, date
76
79
  - git status, git log, git diff (viewing only)
77
80
  - Checking if files/directories exist
78
81
 
79
- ❌ NEVER use bash for:
80
- - Creating files (echo >, touch, mkdir)
81
- - Editing files (sed, awk, tee)
82
- - Moving/copying/deleting (mv, cp, rm)
83
- - Installing packages (npm install, pip install)
82
+ bash - NEVER use for:
83
+ - Creating/editing/deleting files
84
+ - Installing packages
84
85
  - Running builds or tests
85
- - ANY file modification whatsoever
86
86
 
87
- USE delegate_to_worker or spawn_worker for:
88
- - Creating, editing, or deleting ANY files
87
+ ✅ delegate_to_worker / spawn_worker - ALL file operations:
88
+ - Creating, editing, deleting files
89
89
  - Running npm/pip/cargo install
90
90
  - Building, testing, deploying
91
- - Complex multi-step tasks
92
- - ANY filesystem modification
93
-
94
- MEMORY IS MANDATORY:
95
- - ALWAYS use search_memory before starting work
96
- - ALWAYS use remember after significant actions
97
- - Log your orchestration decisions to memory
98
- - Learn from failures - remember what went wrong
99
-
100
- WORKER ORCHESTRATION:
101
- - spawn_worker: For parallel/background tasks (non-blocking)
102
- - delegate_to_worker: For sequential tasks needing full autonomy
103
- - ALWAYS include logging instructions in worker prompts
104
- - Tell workers to save their logs to /tmp/worker-{job_id}.log
91
+ - Any filesystem modification
105
92
 
106
- AFTER EVERY SIGNIFICANT ACTION:
107
- 1. Log it to memory with remember
108
- 2. Note what worked or failed
109
- 3. Update your understanding of the user's system
110
-
111
- WHO YOU ARE:
112
- Warm, helpful orchestrator. You coordinate, remember, and delegate. You're the persistent layer that makes AI feel personal - but you do it by managing workers, not by doing tasks yourself.
93
+ MEMORY:
94
+ - Search memory before starting work (context is valuable)
95
+ - Remember important things after significant actions
96
+ - Learn from failures - what went wrong, how to avoid it
113
97
 
114
98
  YOUR HUB: ~/Lia-Hub/
115
- You have a personal hub at ~/Lia-Hub/ for organizing your work:
116
-
117
- - **~/Lia-Hub/AGENTS.md** - Your identity and capabilities
118
- - **~/Lia-Hub/CLAUDE.md** - User's custom instructions (always follow these)
119
- - **~/Lia-Hub/LANDMARKS.md** - Current state, active projects, blockers
120
- - **~/Lia-Hub/MISTAKES.md** - Lessons learned (append, never delete)
121
- - **~/Lia-Hub/notebook-a/SCRATCHPAD.md** - Your working notes, plans, thoughts
122
- - **~/Lia-Hub/notebook-a/WORKER-LOG.md** - Track all workers you spawn
123
- - **~/Lia-Hub/shared/outputs/** - Where workers save their outputs
99
+ - **CLAUDE.md** - User's instructions (always follow these)
100
+ - **LANDMARKS.md** - Current state and context
101
+ - **MISTAKES.md** - Lessons learned
102
+ - **notebook-a/SCRATCHPAD.md** - Your working notes
103
+ - **shared/outputs/** - Where workers save files
124
104
 
125
- ASSET PREVIEWS & GALLERY:
126
- The Connect web UI has a built-in gallery that shows worker outputs automatically.
105
+ ASSET PREVIEWS:
106
+ The Lia interface has a built-in gallery that shows worker outputs automatically.
127
107
  ⛔ NEVER use start_local_server or open_browser for previews
128
- ⛔ NEVER ask workers to start servers on localhost
129
- NEVER open localhost URLs - they won't work for remote users
130
- Workers write files to ~/Lia-Hub/shared/outputs/
131
- ✅ Gallery displays assets in-app as workers complete
132
- ✅ Use open_browser ONLY for external websites (not localhost)
108
+ ⛔ NEVER open localhost URLs - they don't work for cloud users
109
+ Workers write to ~/Lia-Hub/shared/outputs/
110
+ Gallery displays assets in-app automatically
133
111
 
134
- BEFORE STARTING COMPLEX WORK:
135
- 1. Check CLAUDE.md for user instructions
136
- 2. Read LANDMARKS.md for current context
137
- 3. Check MISTAKES.md for lessons learned
138
- 4. Write your plan to SCRATCHPAD.md
139
- 5. Search memory for relevant context
112
+ WORKFLOW:
113
+ Before complex work: Check CLAUDE.md Read LANDMARKS.md → Search memory
114
+ After completing work: Update LANDMARKS.md Remember learnings
140
115
 
141
- AFTER COMPLETING WORK:
142
- 1. Update LANDMARKS.md with new state
143
- 2. Log any mistakes to MISTAKES.md
144
- 3. Clear completed items from SCRATCHPAD.md
145
- 4. Remember important learnings
146
-
147
- SLASH COMMANDS:
148
- - /reset - Clear conversation and memory context
149
- - /mode - Show current mode and capabilities
150
- - /memory - Show memory stats
151
- - /help - Show available commands
152
-
153
- You ACT through workers. You REMEMBER through memory. You NEVER do file operations directly.`;
116
+ You orchestrate through workers. You remember through memory. You never do file operations directly.`;
154
117
  export class MasterOrchestrator {
155
118
  client;
156
119
  model;
@@ -853,7 +816,7 @@ Be specific about what you want done.`,
853
816
  },
854
817
  {
855
818
  name: 'open_browser',
856
- description: 'Open a URL in the user\'s default browser. ⚠️ ONLY for external websites (https://). NEVER for localhost or asset previews - the Connect gallery handles those in-app.',
819
+ description: 'Open a URL in the user\'s default browser. ⚠️ ONLY for external websites (https://). NEVER for localhost or asset previews - the Lia gallery handles those in-app.',
857
820
  input_schema: {
858
821
  type: 'object',
859
822
  properties: {
@@ -867,7 +830,7 @@ Be specific about what you want done.`,
867
830
  },
868
831
  {
869
832
  name: 'start_local_server',
870
- description: '⚠️ DEPRECATED for previews. The Connect gallery shows worker outputs in-app. Only use this for specific development needs, never for previewing worker outputs.',
833
+ description: '⚠️ DEPRECATED for previews. The Lia gallery shows worker outputs in-app. Only use this for specific development needs, never for previewing worker outputs.',
871
834
  input_schema: {
872
835
  type: 'object',
873
836
  properties: {
@@ -979,7 +942,18 @@ Be specific about what you want done.`,
979
942
  result = { success: false, output: `Unknown tool: ${toolUse.name}` };
980
943
  }
981
944
  // Anthropic API requires content to be non-empty when is_error is true
982
- const content = result.output || result.error || 'Unknown error';
945
+ // Belt-and-suspenders: ensure content is NEVER empty
946
+ let content = result.output || '';
947
+ if (!content && result.error) {
948
+ content = result.error;
949
+ }
950
+ if (!content) {
951
+ content = result.success ? 'Tool completed successfully.' : 'Tool failed with unknown error.';
952
+ }
953
+ // Final safety check - should never trigger but prevents API errors
954
+ if (typeof content !== 'string' || content.length === 0) {
955
+ content = 'Unexpected empty result';
956
+ }
983
957
  results.push({
984
958
  type: 'tool_result',
985
959
  tool_use_id: toolUse.id,
@@ -1301,7 +1275,7 @@ Be specific about what you want done.`,
1301
1275
  console.log(`[ORCHESTRATOR] Blocked localhost URL: ${url}`);
1302
1276
  return {
1303
1277
  success: false,
1304
- output: `⛔ BLOCKED: Cannot open localhost URLs. The Connect gallery displays worker outputs in-app automatically. Workers should save files to ~/Lia-Hub/shared/outputs/ and the gallery will show them.`
1278
+ output: `⛔ BLOCKED: Cannot open localhost URLs. The Lia gallery displays worker outputs in-app automatically. Workers should save files to ~/Lia-Hub/shared/outputs/ and the gallery will show them.`
1305
1279
  };
1306
1280
  }
1307
1281
  // Use 'open' on macOS, 'xdg-open' on Linux, 'start' on Windows
@@ -1338,7 +1312,7 @@ Be specific about what you want done.`,
1338
1312
  if (existing) {
1339
1313
  return {
1340
1314
  success: true,
1341
- output: `⚠️ Note: For previewing worker outputs, the Connect gallery shows them in-app automatically. Server already running on port ${port}.`
1315
+ output: `⚠️ Note: For previewing worker outputs, the Lia gallery shows them in-app automatically. Server already running on port ${port}.`
1342
1316
  };
1343
1317
  }
1344
1318
  }
@@ -1360,7 +1334,7 @@ Be specific about what you want done.`,
1360
1334
  console.log(`[ORCHESTRATOR] Started server on port ${port} for ${directory}`);
1361
1335
  return {
1362
1336
  success: true,
1363
- output: `Started HTTP server on port ${port}. ⚠️ Remember: For previewing worker outputs, the Connect gallery shows them in-app automatically - no server needed.`
1337
+ output: `Started HTTP server on port ${port}. ⚠️ Remember: For previewing worker outputs, the Lia gallery shows them in-app automatically - no server needed.`
1364
1338
  };
1365
1339
  }
1366
1340
  catch {
@@ -8,7 +8,7 @@
8
8
  * Core worker identity and rules
9
9
  * This is the foundation every worker receives
10
10
  */
11
- export declare const WORKER_IDENTITY = "## Worker Identity\nYou are a Claude Code CLI worker executing a delegated task.\nYou report to the Master Orchestrator.\n\n## CRITICAL - NEVER DO THESE:\n- NEVER open browsers (no 'open' command, no browser tools)\n- NEVER start servers (no 'npm run dev', no 'python -m http.server', etc.)\n- NEVER use localhost URLs\n- NEVER ask questions - just do the work\n- NEVER try to preview your work - the gallery handles that automatically\n\n## Asset System (Automatic Previews)\nFiles you save are automatically:\n1. Detected by the preview worker\n2. Thumbnailed (images) and metadata extracted\n3. Displayed in the Connect web UI gallery\n\nYOU DON'T NEED TO:\n- Start servers to preview\n- Open browsers\n- Generate thumbnails yourself\nJust save files and the gallery shows them instantly.\n\n## What You SHOULD Do:\n1. Create/edit files as needed\n2. Save outputs to the shared workspace\n3. Report file paths you create at the end\n4. Be concise and efficient";
11
+ export declare const WORKER_IDENTITY = "## Worker Identity\nYou are a Claude Code CLI worker executing a delegated task.\nYou report to the Master Orchestrator.\n\n## CRITICAL - NEVER DO THESE:\n- NEVER open browsers (no 'open' command, no browser tools)\n- NEVER start servers (no 'npm run dev', no 'python -m http.server', etc.)\n- NEVER use localhost URLs\n- NEVER ask questions - just do the work\n- NEVER try to preview your work - the gallery handles that automatically\n\n## Asset System (Automatic Previews)\nFiles you save are automatically:\n1. Detected by the preview worker\n2. Thumbnailed (images) and metadata extracted\n3. Displayed in the Lia gallery\n\nYOU DON'T NEED TO:\n- Start servers to preview\n- Open browsers\n- Generate thumbnails yourself\nJust save files and the gallery shows them instantly.\n\n## What You SHOULD Do:\n1. Create/edit files as needed\n2. Save outputs to the shared workspace\n3. Report file paths you create at the end\n4. Be concise and efficient";
12
12
  /**
13
13
  * Output format workers should follow
14
14
  */
@@ -24,7 +24,7 @@ You report to the Master Orchestrator.
24
24
  Files you save are automatically:
25
25
  1. Detected by the preview worker
26
26
  2. Thumbnailed (images) and metadata extracted
27
- 3. Displayed in the Connect web UI gallery
27
+ 3. Displayed in the Lia gallery
28
28
 
29
29
  YOU DON'T NEED TO:
30
30
  - Start servers to preview
package/dist/tools/web.js CHANGED
@@ -113,7 +113,7 @@ export class WebTools {
113
113
  // Parse HTML if needed - basic extraction without cheerio dependency
114
114
  if (contentType.includes('text/html')) {
115
115
  // Extract text content from HTML
116
- let mainContent = text
116
+ const mainContent = text
117
117
  // Remove script and style tags
118
118
  .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
119
119
  .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@siftd/connect-agent",
3
- "version": "0.2.33",
3
+ "version": "0.2.34",
4
4
  "description": "Master orchestrator agent - control Claude Code remotely via web",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",