@soederpop/luca 0.0.6 → 0.0.8
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/CLAUDE.md +10 -1
- package/RUNME.md +56 -0
- package/bun.lock +1 -1
- package/commands/build-bootstrap.ts +78 -0
- package/commands/build-scaffolds.ts +24 -2
- package/commands/try-all-challenges.ts +543 -0
- package/commands/try-challenge.ts +100 -0
- package/docs/README.md +52 -80
- package/docs/TABLE-OF-CONTENTS.md +82 -51
- package/docs/apis/clients/elevenlabs.md +232 -8
- package/docs/apis/clients/graph.md +59 -8
- package/docs/apis/clients/openai.md +362 -2
- package/docs/apis/clients/rest.md +122 -2
- package/docs/apis/clients/websocket.md +71 -17
- package/docs/apis/features/agi/assistant.md +9 -3
- package/docs/apis/features/agi/assistants-manager.md +2 -2
- package/docs/apis/features/agi/claude-code.md +153 -14
- package/docs/apis/features/agi/conversation-history.md +15 -3
- package/docs/apis/features/agi/conversation.md +133 -20
- package/docs/apis/features/agi/openai-codex.md +90 -12
- package/docs/apis/features/agi/skills-library.md +23 -5
- package/docs/apis/features/node/container-link.md +59 -0
- package/docs/apis/features/node/content-db.md +1 -1
- package/docs/apis/features/node/disk-cache.md +1 -1
- package/docs/apis/features/node/dns.md +1 -0
- package/docs/apis/features/node/docker.md +2 -1
- package/docs/apis/features/node/esbuild.md +4 -3
- package/docs/apis/features/node/file-manager.md +13 -4
- package/docs/apis/features/node/fs.md +726 -171
- package/docs/apis/features/node/git.md +1 -0
- package/docs/apis/features/node/google-auth.md +23 -4
- package/docs/apis/features/node/google-calendar.md +14 -2
- package/docs/apis/features/node/google-docs.md +15 -2
- package/docs/apis/features/node/google-drive.md +21 -3
- package/docs/apis/features/node/google-sheets.md +14 -2
- package/docs/apis/features/node/grep.md +2 -0
- package/docs/apis/features/node/helpers.md +29 -0
- package/docs/apis/features/node/ink.md +2 -2
- package/docs/apis/features/node/networking.md +39 -4
- package/docs/apis/features/node/os.md +28 -0
- package/docs/apis/features/node/postgres.md +26 -4
- package/docs/apis/features/node/proc.md +37 -28
- package/docs/apis/features/node/process-manager.md +33 -5
- package/docs/apis/features/node/repl.md +1 -1
- package/docs/apis/features/node/runpod.md +1 -0
- package/docs/apis/features/node/secure-shell.md +7 -0
- package/docs/apis/features/node/semantic-search.md +12 -5
- package/docs/apis/features/node/sqlite.md +26 -4
- package/docs/apis/features/node/telegram.md +30 -5
- package/docs/apis/features/node/tts.md +17 -2
- package/docs/apis/features/node/ui.md +1 -1
- package/docs/apis/features/node/vault.md +4 -9
- package/docs/apis/features/node/vm.md +3 -12
- package/docs/apis/features/node/window-manager.md +128 -20
- package/docs/apis/features/web/asset-loader.md +13 -1
- package/docs/apis/features/web/container-link.md +59 -0
- package/docs/apis/features/web/esbuild.md +4 -3
- package/docs/apis/features/web/helpers.md +29 -0
- package/docs/apis/features/web/network.md +16 -2
- package/docs/apis/features/web/speech.md +16 -2
- package/docs/apis/features/web/vault.md +4 -9
- package/docs/apis/features/web/vm.md +3 -12
- package/docs/apis/features/web/voice.md +18 -1
- package/docs/apis/servers/express.md +18 -2
- package/docs/apis/servers/mcp.md +29 -4
- package/docs/apis/servers/websocket.md +34 -6
- package/docs/bootstrap/CLAUDE.md +100 -0
- package/docs/bootstrap/SKILL.md +222 -0
- package/docs/bootstrap/templates/about-command.ts +41 -0
- package/docs/bootstrap/templates/docs-models.ts +22 -0
- package/docs/bootstrap/templates/docs-readme.md +43 -0
- package/docs/bootstrap/templates/example-feature.ts +53 -0
- package/docs/bootstrap/templates/health-endpoint.ts +15 -0
- package/docs/bootstrap/templates/luca-cli.ts +25 -0
- package/docs/bootstrap/templates/runme.md +54 -0
- package/docs/challenges/caching-proxy.md +16 -0
- package/docs/challenges/content-db-round-trip.md +14 -0
- package/docs/challenges/custom-command.md +9 -0
- package/docs/challenges/file-watcher-pipeline.md +11 -0
- package/docs/challenges/grep-audit-report.md +15 -0
- package/docs/challenges/multi-feature-dashboard.md +14 -0
- package/docs/challenges/process-orchestrator.md +17 -0
- package/docs/challenges/rest-api-server-with-client.md +12 -0
- package/docs/challenges/script-runner-with-vm.md +11 -0
- package/docs/challenges/simple-rest-api.md +15 -0
- package/docs/challenges/websocket-serve-and-client.md +11 -0
- package/docs/challenges/yaml-config-system.md +14 -0
- package/docs/command-system-overhaul.md +94 -0
- package/docs/examples/assistant/CORE.md +18 -0
- package/docs/examples/assistant/hooks.ts +3 -0
- package/docs/examples/assistant/tools.ts +10 -0
- package/docs/examples/window-manager-layouts.md +180 -0
- package/docs/in-memory-fs.md +4 -0
- package/docs/models.ts +13 -10
- package/docs/philosophy.md +4 -3
- package/docs/reports/console-hmr-design.md +170 -0
- package/docs/reports/helper-semantic-search.md +72 -0
- package/docs/scaffolds/client.md +29 -20
- package/docs/scaffolds/command.md +64 -50
- package/docs/scaffolds/endpoint.md +31 -36
- package/docs/scaffolds/feature.md +28 -18
- package/docs/scaffolds/selector.md +91 -0
- package/docs/scaffolds/server.md +18 -9
- package/docs/selectors.md +115 -0
- package/docs/sessions/custom-command/attempt-log-2.md +195 -0
- package/docs/sessions/file-watcher-pipeline/attempt-log-1.md +728 -0
- package/docs/sessions/file-watcher-pipeline/attempt-log-2.md +555 -0
- package/docs/sessions/grep-audit-report/attempt-log-1.md +289 -0
- package/docs/sessions/multi-feature-dashboard/attempt-log-2.md +679 -0
- package/docs/sessions/rest-api-server-with-client/attempt-log-1.md +1 -0
- package/docs/sessions/rest-api-server-with-client/attempt-log-3.md +920 -0
- package/docs/sessions/simple-rest-api/attempt-log-1.md +593 -0
- package/docs/sessions/websocket-serve-and-client/attempt-log-2.md +995 -0
- package/docs/tutorials/00-bootstrap.md +148 -0
- package/docs/tutorials/07-endpoints.md +7 -7
- package/docs/tutorials/08-commands.md +153 -72
- package/luca.cli.ts +3 -0
- package/package.json +6 -5
- package/public/index.html +1430 -0
- package/scripts/examples/using-ollama.ts +2 -1
- package/scripts/update-introspection-data.ts +2 -2
- package/src/agi/endpoints/experts.ts +1 -1
- package/src/agi/features/assistant.ts +7 -0
- package/src/agi/features/assistants-manager.ts +5 -5
- package/src/agi/features/claude-code.ts +263 -3
- package/src/agi/features/conversation-history.ts +7 -1
- package/src/agi/features/conversation.ts +26 -3
- package/src/agi/features/openai-codex.ts +26 -2
- package/src/agi/features/openapi.ts +6 -1
- package/src/agi/features/skills-library.ts +9 -1
- package/src/bootstrap/generated.ts +595 -0
- package/src/cli/cli.ts +64 -21
- package/src/client.ts +23 -357
- package/src/clients/civitai/index.ts +1 -1
- package/src/clients/client-template.ts +1 -1
- package/src/clients/comfyui/index.ts +13 -2
- package/src/clients/elevenlabs/index.ts +2 -1
- package/src/clients/graph.ts +87 -0
- package/src/clients/openai/index.ts +10 -1
- package/src/clients/rest.ts +207 -0
- package/src/clients/websocket.ts +176 -0
- package/src/command.ts +281 -34
- package/src/commands/bootstrap.ts +185 -0
- package/src/commands/chat.ts +5 -4
- package/src/commands/describe.ts +341 -4
- package/src/commands/help.ts +35 -9
- package/src/commands/index.ts +3 -0
- package/src/commands/introspect.ts +92 -2
- package/src/commands/prompt.ts +5 -6
- package/src/commands/run.ts +75 -10
- package/src/commands/save-api-docs.ts +49 -0
- package/src/commands/scaffold.ts +169 -23
- package/src/commands/select.ts +94 -0
- package/src/commands/serve.ts +10 -1
- package/src/container.ts +15 -0
- package/src/endpoint.ts +19 -0
- package/src/graft.ts +181 -0
- package/src/introspection/generated.agi.ts +12458 -8968
- package/src/introspection/generated.node.ts +10573 -7145
- package/src/introspection/generated.web.ts +1 -1
- package/src/introspection/index.ts +26 -0
- package/src/node/container.ts +6 -7
- package/src/node/features/content-db.ts +49 -2
- package/src/node/features/disk-cache.ts +16 -9
- package/src/node/features/dns.ts +16 -3
- package/src/node/features/docker.ts +16 -4
- package/src/node/features/esbuild.ts +22 -2
- package/src/node/features/file-manager.ts +184 -29
- package/src/node/features/fs.ts +704 -248
- package/src/node/features/git.ts +21 -8
- package/src/node/features/grep.ts +23 -3
- package/src/node/features/helpers.ts +372 -43
- package/src/node/features/networking.ts +39 -4
- package/src/node/features/opener.ts +28 -15
- package/src/node/features/os.ts +76 -0
- package/src/node/features/port-exposer.ts +11 -1
- package/src/node/features/postgres.ts +17 -1
- package/src/node/features/proc.ts +4 -1
- package/src/node/features/python.ts +63 -14
- package/src/node/features/repl.ts +11 -7
- package/src/node/features/runpod.ts +16 -3
- package/src/node/features/secure-shell.ts +27 -2
- package/src/node/features/semantic-search.ts +12 -1
- package/src/node/features/ui.ts +5 -69
- package/src/node/features/vm.ts +17 -0
- package/src/node/features/window-manager.ts +68 -20
- package/src/node.ts +5 -0
- package/src/scaffolds/generated.ts +492 -290
- package/src/scaffolds/template.ts +9 -0
- package/src/schemas/base.ts +46 -5
- package/src/selector.ts +282 -0
- package/src/server.ts +11 -0
- package/src/servers/express.ts +27 -12
- package/src/servers/socket.ts +45 -11
- package/src/web/clients/socket.ts +4 -1
- package/src/web/container.ts +2 -1
- package/src/web/features/network.ts +7 -1
- package/src/web/features/voice-recognition.ts +16 -1
- package/test/clients-servers.test.ts +2 -1
- package/test/command.test.ts +267 -0
- package/test/vm-context.test.ts +146 -0
- package/test-integration/assistants-manager.test.ts +10 -20
- package/docs/apis/features/node/launcher-app-command-listener.md +0 -145
- package/docs/examples/launcher-app-command-listener.md +0 -120
- package/docs/tasks/web-container-helper-discovery.md +0 -71
- package/docs/todos.md +0 -1
- package/scripts/test-command-listener.ts +0 -123
- package/src/node/features/launcher-app-command-listener.ts +0 -389
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Launcher App Command Listener"
|
|
3
|
-
tags: [launcherAppCommandListener, ipc, macos, voice, commands]
|
|
4
|
-
lastTested: null
|
|
5
|
-
lastTestPassed: null
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# launcherAppCommandListener
|
|
9
|
-
|
|
10
|
-
IPC transport for receiving commands from the LucaVoiceLauncher macOS app. Listens on a Unix domain socket using NDJSON and wraps incoming commands in a `CommandHandle` for structured acknowledgement, progress, and completion.
|
|
11
|
-
|
|
12
|
-
## Overview
|
|
13
|
-
|
|
14
|
-
Use the `launcherAppCommandListener` feature when you need to receive and process commands from the native macOS launcher app (voice commands, hotkeys, or text input). It provides the server side of the IPC protocol: listen for the app to connect, receive command events, and respond with acknowledgements, progress updates, and results.
|
|
15
|
-
|
|
16
|
-
Requires the LucaVoiceLauncher native macOS app to be running.
|
|
17
|
-
|
|
18
|
-
## Enabling the Feature
|
|
19
|
-
|
|
20
|
-
```ts
|
|
21
|
-
const listener = container.feature('launcherAppCommandListener', {
|
|
22
|
-
autoListen: false
|
|
23
|
-
})
|
|
24
|
-
console.log('Command Listener feature created')
|
|
25
|
-
console.log('Listening:', listener.isListening)
|
|
26
|
-
console.log('Client connected:', listener.isClientConnected)
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## API Documentation
|
|
30
|
-
|
|
31
|
-
```ts
|
|
32
|
-
const info = await container.features.describe('launcherAppCommandListener')
|
|
33
|
-
console.log(info)
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Listening for Commands
|
|
37
|
-
|
|
38
|
-
Start the IPC server and handle incoming commands with the `CommandHandle` API.
|
|
39
|
-
|
|
40
|
-
```ts skip
|
|
41
|
-
const listener = container.feature('launcherAppCommandListener', {
|
|
42
|
-
autoListen: true
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
listener.on('command', async (cmd) => {
|
|
46
|
-
console.log('Received command:', cmd.text)
|
|
47
|
-
|
|
48
|
-
cmd.ack('Working on it!')
|
|
49
|
-
// ... process the command ...
|
|
50
|
-
cmd.progress(0.5, 'Halfway there')
|
|
51
|
-
// ... finish processing ...
|
|
52
|
-
cmd.finish({ result: { action: 'completed' }, speech: 'All done!' })
|
|
53
|
-
})
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
Each incoming command is wrapped in a `CommandHandle` that provides `ack()`, `progress()`, `finish()`, and `fail()` methods. The native app displays acknowledgements and speaks the `speech` text.
|
|
57
|
-
|
|
58
|
-
## Command Handle Lifecycle
|
|
59
|
-
|
|
60
|
-
The `CommandHandle` follows a structured lifecycle: acknowledge, optionally report progress, then finish or fail.
|
|
61
|
-
|
|
62
|
-
```ts skip
|
|
63
|
-
listener.on('command', async (cmd) => {
|
|
64
|
-
// Silent acknowledge
|
|
65
|
-
cmd.ack()
|
|
66
|
-
|
|
67
|
-
try {
|
|
68
|
-
// Report progress (0-1 scale)
|
|
69
|
-
cmd.progress(0.25, 'Starting...')
|
|
70
|
-
cmd.progress(0.75, 'Almost done...')
|
|
71
|
-
|
|
72
|
-
// Finish with result and optional speech
|
|
73
|
-
cmd.finish({
|
|
74
|
-
result: { data: 'some result' },
|
|
75
|
-
speech: 'Task completed successfully'
|
|
76
|
-
})
|
|
77
|
-
} catch (err) {
|
|
78
|
-
// Report failure with optional speech
|
|
79
|
-
cmd.fail({
|
|
80
|
-
error: err.message,
|
|
81
|
-
speech: 'Sorry, that failed.'
|
|
82
|
-
})
|
|
83
|
-
}
|
|
84
|
-
})
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
The native app uses the `speech` field for text-to-speech feedback to the user.
|
|
88
|
-
|
|
89
|
-
## Connection Events
|
|
90
|
-
|
|
91
|
-
Monitor the IPC connection state.
|
|
92
|
-
|
|
93
|
-
```ts skip
|
|
94
|
-
listener.on('listening', () => {
|
|
95
|
-
console.log('IPC server listening on:', listener.state.socketPath)
|
|
96
|
-
})
|
|
97
|
-
listener.on('clientConnected', () => {
|
|
98
|
-
console.log('Launcher app connected')
|
|
99
|
-
})
|
|
100
|
-
listener.on('clientDisconnected', () => {
|
|
101
|
-
console.log('Launcher app disconnected')
|
|
102
|
-
})
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
The `clientConnected` and `clientDisconnected` events fire as the native app connects and disconnects from the socket.
|
|
106
|
-
|
|
107
|
-
## Sending Messages
|
|
108
|
-
|
|
109
|
-
Send arbitrary NDJSON messages back to the connected app.
|
|
110
|
-
|
|
111
|
-
```ts skip
|
|
112
|
-
listener.send({ status: 'ready', message: 'Luca is online' })
|
|
113
|
-
listener.send({ notification: 'Task queue empty' })
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
Use `send()` for custom protocol messages beyond the standard command lifecycle.
|
|
117
|
-
|
|
118
|
-
## Summary
|
|
119
|
-
|
|
120
|
-
The `launcherAppCommandListener` feature provides the IPC server for the LucaVoiceLauncher app. It receives voice, hotkey, and text commands, wrapping each in a `CommandHandle` with structured lifecycle methods (ack, progress, finish, fail). Key methods: `listen()`, `stop()`, `send()`. Key events: `command`, `clientConnected`, `clientDisconnected`.
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
repeatable: false
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Implement Helper Discovery for WebContainer
|
|
6
|
-
|
|
7
|
-
The NodeContainer has a `helpers` feature (`src/node/features/helpers.ts`) that provides unified discovery across all registries. The WebContainer has no equivalent. Implement helper discovery for the web container.
|
|
8
|
-
|
|
9
|
-
## Context
|
|
10
|
-
|
|
11
|
-
The node `Helpers` feature provides:
|
|
12
|
-
- `container.helpers.discover('features')` — scan conventional folders and register what it finds
|
|
13
|
-
- `container.helpers.discoverAll()` — discover across all registry types
|
|
14
|
-
- `container.helpers.available` — unified view of all registries
|
|
15
|
-
- `container.helpers.lookup(type, name)` and `container.helpers.describe(type, name)`
|
|
16
|
-
|
|
17
|
-
The web container has `features` and `clients` registries (Client is attached via `extension.ts`, which calls `container.use(Client)` and triggers `registerHelperType('clients', 'client')`). It has `RestClient` and `SocketClient` available. No servers, commands, or endpoints registries.
|
|
18
|
-
|
|
19
|
-
## What to Build
|
|
20
|
-
|
|
21
|
-
### 1. Create `src/web/features/helpers.ts`
|
|
22
|
-
|
|
23
|
-
Port the node `Helpers` feature to work in the browser environment. Key differences from the node version:
|
|
24
|
-
|
|
25
|
-
- **No filesystem scanning** — the browser can't scan directories. Instead, discovery should work via explicit registration or a manifest/config object that lists available helpers and their import paths.
|
|
26
|
-
- **Registry scope** — cover `features` and `clients` (both already attached). The `registryMap` should reflect what the web container actually has.
|
|
27
|
-
- **No dynamic `import()` from disk** — helper modules need to be bundled or loaded via URL. Consider accepting a map of `{ name: () => import('./my-feature.js') }` lazy loaders.
|
|
28
|
-
- **Keep the same public API surface** — `discover()`, `discoverAll()`, `available`, `lookup()`, `describe()` should all work identically from the consumer's perspective.
|
|
29
|
-
|
|
30
|
-
### 2. Register it in `src/web/extension.ts`
|
|
31
|
-
|
|
32
|
-
Add the helpers feature to the web extension so it's available as `container.feature('helpers')` / `container.helpers`.
|
|
33
|
-
|
|
34
|
-
### 3. Approach for Browser Discovery
|
|
35
|
-
|
|
36
|
-
Since there's no filesystem to scan, discovery needs a different mechanism. Recommended approach:
|
|
37
|
-
|
|
38
|
-
```typescript
|
|
39
|
-
// Option A: Manifest-based discovery
|
|
40
|
-
const helpers = container.feature('helpers', {
|
|
41
|
-
enable: true,
|
|
42
|
-
manifest: {
|
|
43
|
-
features: {
|
|
44
|
-
myFeature: () => import('./features/my-feature.js'),
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
})
|
|
48
|
-
await helpers.discoverAll()
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
This keeps the same `discover()` / `discoverAll()` API but replaces folder scanning with a lazy-import manifest. The manifest can be generated at build time by a bundler plugin or written by hand.
|
|
52
|
-
|
|
53
|
-
### 4. Shared Base
|
|
54
|
-
|
|
55
|
-
Look at whether a base `Helpers` class can be extracted to `src/features/helpers.ts` (universal, not node or web specific) with the shared API surface (`available`, `lookup`, `describe`, state/events schemas). Then `src/node/features/helpers.ts` and `src/web/features/helpers.ts` extend it with their environment-specific discovery strategies (filesystem vs manifest).
|
|
56
|
-
|
|
57
|
-
## Files to Touch
|
|
58
|
-
|
|
59
|
-
- `src/features/helpers.ts` — new, shared base class with common API
|
|
60
|
-
- `src/web/features/helpers.ts` — new, web-specific discovery via manifest
|
|
61
|
-
- `src/node/features/helpers.ts` — refactor to extend shared base
|
|
62
|
-
- `src/web/extension.ts` — register the web helpers feature
|
|
63
|
-
- `src/schemas/base.ts` — only if new shared schemas are needed
|
|
64
|
-
|
|
65
|
-
## Acceptance Criteria
|
|
66
|
-
|
|
67
|
-
- `container.helpers.available` works in both node and web containers
|
|
68
|
-
- `container.helpers.discover('features')` works in web via manifest config
|
|
69
|
-
- `container.helpers.lookup()` and `container.helpers.describe()` work in web
|
|
70
|
-
- Node behavior is unchanged (existing tests still pass)
|
|
71
|
-
- The shared base class eliminates duplicated logic between node and web
|
package/docs/todos.md
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
- make container.start() meaningful. i like the idea of container.use() accepting in addition to the current shape, an async function and container.start() basically running all of those functions.
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { NodeContainer } from '../src/node/container'
|
|
2
|
-
|
|
3
|
-
const container = new NodeContainer({ cwd: process.cwd() })
|
|
4
|
-
const listener = container.feature('launcherAppCommandListener', {
|
|
5
|
-
autoListen: true,
|
|
6
|
-
})
|
|
7
|
-
|
|
8
|
-
const windowManager = container.feature('windowManager')
|
|
9
|
-
|
|
10
|
-
console.log('Listening on:', listener.state.get('socketPath'))
|
|
11
|
-
console.log('Waiting for native app to connect...\n')
|
|
12
|
-
|
|
13
|
-
listener.enable()
|
|
14
|
-
|
|
15
|
-
listener.on('clientConnected', () => {
|
|
16
|
-
console.log('[connected] Native app connected')
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
listener.on('clientDisconnected', () => {
|
|
20
|
-
console.log('[disconnected] Native app disconnected')
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
listener.on('command', async (cmd) => {
|
|
24
|
-
console.log(`[command] "${cmd.text}" (source: ${cmd.source}, id: ${cmd.id})`)
|
|
25
|
-
|
|
26
|
-
const normalizedText = String(cmd.text).toLowerCase()
|
|
27
|
-
|
|
28
|
-
if (normalizedText.includes('terminal')) {
|
|
29
|
-
await container.sleep(1000)
|
|
30
|
-
cmd.ack('Sheeeeeeeit. I got you fam!')
|
|
31
|
-
await container.sleep(1000)
|
|
32
|
-
console.log('Spawning terminal')
|
|
33
|
-
const result = await windowManager.spawnTTY({
|
|
34
|
-
command: '/Users/jon/.bun/bin/bun',
|
|
35
|
-
args: ['run', '/Users/jon/@luca/src/cli/cli.ts', 'console'],
|
|
36
|
-
cwd: '/Users/jon/@soederpop',
|
|
37
|
-
title: 'The Console',
|
|
38
|
-
cols: 120,
|
|
39
|
-
rows: 40,
|
|
40
|
-
width: 1000,
|
|
41
|
-
height: 700,
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
await container.sleep(4000)
|
|
45
|
-
|
|
46
|
-
cmd.finish({ result: { action: 'completed', text: cmd.text }, speech: 'Check that shit out playboy. Fuckin terminal output.' })
|
|
47
|
-
|
|
48
|
-
return
|
|
49
|
-
} else if (normalizedText.includes('code')) {
|
|
50
|
-
await container.sleep(1000)
|
|
51
|
-
cmd.ack('Real talk, I feel for the homies we told to learn to code. Now that claude is on this shit?? I mean.')
|
|
52
|
-
await container.sleep(1000)
|
|
53
|
-
console.log('Spawning terminal')
|
|
54
|
-
const result = await windowManager.spawnTTY({
|
|
55
|
-
command: '/Users/jon/.bun/bin/claude',
|
|
56
|
-
cwd: '/Users/jon/@soederpop',
|
|
57
|
-
title: 'Claude',
|
|
58
|
-
cols: 120,
|
|
59
|
-
rows: 80,
|
|
60
|
-
width: 1000,
|
|
61
|
-
height: 700,
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
await container.sleep(4000)
|
|
65
|
-
|
|
66
|
-
cmd.finish({ result: { action: 'completed', text: cmd.text }, speech: 'Good luck with claude bro.' })
|
|
67
|
-
|
|
68
|
-
return
|
|
69
|
-
} else if (normalizedText.includes('web') || normalizedText.includes('browser')) {
|
|
70
|
-
cmd.ack('Yo.... Fuckin check this out, twin.')
|
|
71
|
-
await container.sleep(1000)
|
|
72
|
-
const result = await windowManager.spawn({
|
|
73
|
-
url: 'https://google.com',
|
|
74
|
-
width: 1000,
|
|
75
|
-
height: 700,
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
console.log('Web browser spawned', result)
|
|
79
|
-
|
|
80
|
-
await container.sleep(3000)
|
|
81
|
-
cmd.finish({ result: { action: 'completed', text: cmd.text }, speech: 'Motherfucker I can even launch web browsers' })
|
|
82
|
-
return
|
|
83
|
-
} else if (normalizedText.includes('write')) {
|
|
84
|
-
await container.sleep(1000)
|
|
85
|
-
cmd.ack('Aight. Sheeeit. We got a real fuckin earnest hemmingway up in here.')
|
|
86
|
-
const result = await windowManager.spawn({
|
|
87
|
-
url: 'http://localhost:3080',
|
|
88
|
-
width: 1200,
|
|
89
|
-
height: 900,
|
|
90
|
-
})
|
|
91
|
-
|
|
92
|
-
await container.sleep(4000)
|
|
93
|
-
cmd.finish({ result: { action: 'completed', text: cmd.text }, speech: 'Let the boy COOK' })
|
|
94
|
-
return
|
|
95
|
-
} else if (normalizedText.includes('track')) {
|
|
96
|
-
await container.sleep(1000)
|
|
97
|
-
cmd.ack('Better believe it. Aint nobody hiding from your boy.')
|
|
98
|
-
|
|
99
|
-
container.proc.spawnAndCapture('luca', ['serve', '--force', '--port', '3969', '--no-open'], {
|
|
100
|
-
cwd: '/Users/jon/@soederpop/playground/enemy-tracker'
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
await container.sleep(4000)
|
|
104
|
-
|
|
105
|
-
const result = await windowManager.spawn({
|
|
106
|
-
url: 'http://localhost:3969',
|
|
107
|
-
width: 1400,
|
|
108
|
-
height: 1000,
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
cmd.finish({ result: { action: 'completed', text: cmd.text }, speech: 'Get em dawg. Me and the homies are ready.' })
|
|
112
|
-
|
|
113
|
-
return
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
await container.sleep(4000)
|
|
117
|
-
cmd.ack('Look unc. I dont know the fuck you talmbout.')
|
|
118
|
-
cmd.finish({ result: { action: 'unknown' }})
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
listener.on('message', (msg) => {
|
|
122
|
-
console.log('[message]', JSON.stringify(msg))
|
|
123
|
-
})
|