usemob 0.0.0-nightly.20261030-896099c
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/LICENSE +21 -0
- package/README.md +60 -0
- package/bin/install.js +25 -0
- package/bin/mob.js +32 -0
- package/package.json +27 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 fdkevin0
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Mob — local assistant
|
|
2
|
+
|
|
3
|
+
Mob is a personal AI assistant that runs on your own machine. One service keeps
|
|
4
|
+
conversations in SQLite and serves a desktop app, a browser UI, a terminal UI and
|
|
5
|
+
the `mob` CLI, and it can answer you in Telegram, WeChat and email. The model can
|
|
6
|
+
use tools (a container sandbox, your mailbox, Cloudflare, MCP servers), and
|
|
7
|
+
anything with an effect waits for your approval.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g usemob # or: bun add -g --trust usemob
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Nightly builds, archives, upgrading and building from source are in
|
|
16
|
+
[Install](docs/install.md).
|
|
17
|
+
|
|
18
|
+
## Use
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
mob tui # terminal UI; starts the service when needed
|
|
22
|
+
mob open # sign a browser in to the running service
|
|
23
|
+
mob open --web # or sign in https://usemob.app to it
|
|
24
|
+
mob start / status / stop # run the service in the background
|
|
25
|
+
mob serve --demo # foreground, with an offline demo model
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
With no setup Mob answers with an offline demo model. Add a model provider
|
|
29
|
+
for real replies, such as OpenRouter for free models:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
mob provider add openrouter --key-stdin
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Then `/models` lists models and `/model NAME` switches the conversation. Type `/`
|
|
36
|
+
in the web UI or TUI to see and complete commands; `/help` lists them in
|
|
37
|
+
messaging apps.
|
|
38
|
+
|
|
39
|
+
In the TUI: Enter sends, Ctrl+J inserts a newline, F2 switches conversations,
|
|
40
|
+
F3 shows tool details, F4 reviews approvals, Ctrl+S stops the reply, PgUp/PgDn
|
|
41
|
+
scroll, Ctrl+Q exits. See the [terminal UI](apps/tui/README.md) for the rest.
|
|
42
|
+
|
|
43
|
+
## Documentation
|
|
44
|
+
|
|
45
|
+
The documentation is at https://usemob.app/docs; the pages below are its
|
|
46
|
+
sources.
|
|
47
|
+
|
|
48
|
+
- [Model providers](docs/features/providers.md)
|
|
49
|
+
- [Configuration and running the service](docs/features/configuration.md)
|
|
50
|
+
- [Tools and approvals](docs/features/tools-and-approvals.md)
|
|
51
|
+
- [Sandbox](docs/features/sandbox.md)
|
|
52
|
+
- [Messaging channels](docs/features/channels.md): Telegram, WeChat iLink, email
|
|
53
|
+
- [Plugins: email and Cloudflare](docs/features/plugins.md)
|
|
54
|
+
- [MCP servers](docs/features/mcp.md)
|
|
55
|
+
- [All feature pages](docs/features/README.md) and [architecture](docs/architecture.md)
|
|
56
|
+
|
|
57
|
+
## License
|
|
58
|
+
|
|
59
|
+
[MIT](LICENSE). AI Elements sources keep
|
|
60
|
+
[their Apache-2.0 license](packages/app/src/ai-elements/SOURCE.md).
|
package/bin/install.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// The postinstall script of the usemob npm package. On Linux and macOS it puts
|
|
2
|
+
// this machine's binary in place of the bin/mob.js launcher, so `mob` runs
|
|
3
|
+
// natively, without Node.js or Bun. npm runs it; Bun runs it with
|
|
4
|
+
// `bun add -g --trust usemob`. When it does not run, or fails, the launcher
|
|
5
|
+
// stays and needs Node.js; a failure is reported but does not fail the install.
|
|
6
|
+
'use strict';
|
|
7
|
+
const fs = require('node:fs');
|
|
8
|
+
const path = require('node:path');
|
|
9
|
+
|
|
10
|
+
if (process.platform !== 'win32') {
|
|
11
|
+
const pkg = `usemob-${process.platform}-${process.arch}`;
|
|
12
|
+
try {
|
|
13
|
+
const binary = require.resolve(`${pkg}/bin/mob`);
|
|
14
|
+
const launcher = path.join(__dirname, 'mob.js');
|
|
15
|
+
const temp = launcher + '.tmp';
|
|
16
|
+
fs.rmSync(temp, { force: true });
|
|
17
|
+
// A hard link saves a second copy of the binary; across file systems, copy it.
|
|
18
|
+
try { fs.linkSync(binary, temp); } catch { fs.copyFileSync(binary, temp); }
|
|
19
|
+
fs.chmodSync(temp, 0o755);
|
|
20
|
+
// The global bin link points at mob.js, so the binary takes its name.
|
|
21
|
+
fs.renameSync(temp, launcher);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
console.warn(`usemob: kept the Node.js launcher, so mob needs Node.js (${pkg}: ${error.code ?? error.message})`);
|
|
24
|
+
}
|
|
25
|
+
}
|
package/bin/mob.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// The `mob` command of the usemob npm package until scripts/npm/install.js
|
|
3
|
+
// replaces it with the binary, and on Windows. npm and bun install only the
|
|
4
|
+
// platform package that matches this machine (usemob-OS-ARCH); this runs its
|
|
5
|
+
// compiled binary, which needs neither Node.js nor Bun.
|
|
6
|
+
'use strict';
|
|
7
|
+
const { spawn } = require('node:child_process');
|
|
8
|
+
|
|
9
|
+
const pkg = `usemob-${process.platform}-${process.arch}`;
|
|
10
|
+
let binary;
|
|
11
|
+
try {
|
|
12
|
+
binary = require.resolve(`${pkg}/bin/${process.platform === 'win32' ? 'mob.exe' : 'mob'}`);
|
|
13
|
+
} catch {
|
|
14
|
+
console.error(`mob: ${pkg} is not installed. Mob is published for linux-x64, linux-arm64, darwin-x64, darwin-arm64 and win32-x64;`);
|
|
15
|
+
console.error('reinstall without --no-optional, or download an archive from https://github.com/fdkevin0/mob/releases');
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const child = spawn(binary, process.argv.slice(2), { stdio: 'inherit' });
|
|
20
|
+
// Ctrl+C already reaches the binary through the terminal; other signals are passed on.
|
|
21
|
+
process.on('SIGINT', () => {});
|
|
22
|
+
for (const signal of ['SIGTERM', 'SIGHUP']) process.on(signal, () => child.kill(signal));
|
|
23
|
+
child.on('error', error => {
|
|
24
|
+
console.error(`mob: ${error.message}`);
|
|
25
|
+
process.exit(1);
|
|
26
|
+
});
|
|
27
|
+
child.on('exit', (code, signal) => {
|
|
28
|
+
if (signal) {
|
|
29
|
+
process.removeAllListeners(signal);
|
|
30
|
+
process.kill(process.pid, signal);
|
|
31
|
+
} else process.exit(code ?? 1);
|
|
32
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "usemob",
|
|
3
|
+
"version": "0.0.0-nightly.20261030-896099c",
|
|
4
|
+
"description": "Local assistant with desktop, terminal and background service",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"homepage": "https://usemob.app",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/fdkevin0/mob.git"
|
|
10
|
+
},
|
|
11
|
+
"bin": {
|
|
12
|
+
"mob": "bin/mob.js"
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"postinstall": "node bin/install.js"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"bin"
|
|
19
|
+
],
|
|
20
|
+
"optionalDependencies": {
|
|
21
|
+
"usemob-linux-x64": "0.0.0-nightly.20261030-896099c",
|
|
22
|
+
"usemob-linux-arm64": "0.0.0-nightly.20261030-896099c",
|
|
23
|
+
"usemob-darwin-x64": "0.0.0-nightly.20261030-896099c",
|
|
24
|
+
"usemob-darwin-arm64": "0.0.0-nightly.20261030-896099c",
|
|
25
|
+
"usemob-win32-x64": "0.0.0-nightly.20261030-896099c"
|
|
26
|
+
}
|
|
27
|
+
}
|