@siftd/connect-agent 0.2.33 → 0.2.35
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 +2 -1
- package/dist/branding.d.ts +47 -0
- package/dist/branding.js +80 -0
- package/dist/cli.js +6 -5
- package/dist/heartbeat.d.ts +1 -1
- package/dist/heartbeat.js +1 -1
- package/dist/orchestrator.js +52 -78
- package/dist/prompts/worker-system.d.ts +1 -1
- package/dist/prompts/worker-system.js +1 -1
- package/dist/tools/web.js +1 -1
- package/package.json +1 -1
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(
|
|
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;
|
package/dist/branding.js
ADDED
|
@@ -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('
|
|
10
|
-
.description(
|
|
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
|
|
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 "
|
|
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(
|
|
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'}`);
|
package/dist/heartbeat.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Runner Heartbeat Module
|
|
3
3
|
*
|
|
4
|
-
* Sends periodic heartbeats to the
|
|
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
|
|
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/orchestrator.js
CHANGED
|
@@ -61,96 +61,59 @@ function getFileType(path) {
|
|
|
61
61
|
return 'text';
|
|
62
62
|
return 'other';
|
|
63
63
|
}
|
|
64
|
-
const SYSTEM_PROMPT = `You are a
|
|
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
|
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
70
|
-
- You
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
80
|
-
- Creating files
|
|
81
|
-
-
|
|
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
|
-
✅
|
|
88
|
-
- Creating, editing,
|
|
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
|
-
-
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
-
|
|
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
|
|
126
|
-
The
|
|
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
|
|
129
|
-
|
|
130
|
-
✅
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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, '')
|