@hamzaashergill/mateos 0.1.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/LICENSE +21 -0
- package/README.md +158 -0
- package/bin/mateos +2 -0
- package/bin/mateos.mjs +273 -0
- package/package.json +46 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 MateOS contributors
|
|
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,158 @@
|
|
|
1
|
+
# MateOS
|
|
2
|
+
|
|
3
|
+
MateOS is an open-source assistant operations platform for teams that manage bookings, appointments, reception workflows, and customer communication.
|
|
4
|
+
|
|
5
|
+
It currently ships with starter patterns for:
|
|
6
|
+
|
|
7
|
+
- Restaurants and food
|
|
8
|
+
- Dental and doctors
|
|
9
|
+
- Coaches and consultants
|
|
10
|
+
|
|
11
|
+
MateOS includes:
|
|
12
|
+
|
|
13
|
+
- A React admin dashboard for operators
|
|
14
|
+
- An Express API server
|
|
15
|
+
- PostgreSQL persistence with Drizzle ORM
|
|
16
|
+
- AI-assisted scheduling, conversation relay, and workflow tools
|
|
17
|
+
- Optional Microsoft, Twilio, ElevenLabs, Hume, and Telegram integrations
|
|
18
|
+
|
|
19
|
+
## Short Install Command
|
|
20
|
+
|
|
21
|
+
Once the CLI is published to npm, the short install command is:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx mateos
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Or install into a custom directory:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx mateos my-mateos
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## GitHub Install
|
|
34
|
+
|
|
35
|
+
Today, the GitHub bootstrap command is:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
bash <(curl -fsSL https://raw.githubusercontent.com/logicbaseio/MateOS/main/install.sh)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Both install paths do the same bootstrap work:
|
|
42
|
+
|
|
43
|
+
- clones the MateOS repo locally
|
|
44
|
+
- creates `.env` from `.env.example`
|
|
45
|
+
- installs workspace dependencies with `pnpm`
|
|
46
|
+
- starts PostgreSQL with Docker Compose
|
|
47
|
+
- applies the database schema
|
|
48
|
+
- shows the MateOS terminal logo and next steps
|
|
49
|
+
|
|
50
|
+
After install, MateOS also ships with a local CLI:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
cd MateOS
|
|
54
|
+
node ./bin/mateos.mjs doctor
|
|
55
|
+
node ./bin/mateos.mjs dev
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Workspace Layout
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
MateOS/
|
|
62
|
+
├── artifacts/api-server # Express API
|
|
63
|
+
├── artifacts/bot-manager # React dashboard
|
|
64
|
+
├── lib/db # Database schema and Drizzle config
|
|
65
|
+
├── lib/api-spec # OpenAPI contract
|
|
66
|
+
├── lib/api-client-react # Generated frontend client
|
|
67
|
+
├── lib/api-zod # Generated API schemas
|
|
68
|
+
├── docs # Open-source documentation
|
|
69
|
+
└── starter-configs # Vertical starter templates
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Quick Start
|
|
73
|
+
|
|
74
|
+
### 1. Install dependencies
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
pnpm install
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 2. Start PostgreSQL
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
docker compose up -d
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 3. Create your local env file
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
cp .env.example .env
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 4. Push the schema
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
pnpm db:push
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 5. Start the API
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
pnpm dev:api
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 6. Start the dashboard
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
pnpm dev:web
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Open [http://localhost:5173](http://localhost:5173).
|
|
111
|
+
|
|
112
|
+
### 7. Or start both with the MateOS CLI
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
node ./bin/mateos.mjs dev
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Authentication Modes
|
|
119
|
+
|
|
120
|
+
MateOS now supports an installable default path:
|
|
121
|
+
|
|
122
|
+
- `MATEOS_AUTH_MODE=local`
|
|
123
|
+
Default. Local single-admin mode for self-hosting and development.
|
|
124
|
+
- `MATEOS_AUTH_MODE=oidc`
|
|
125
|
+
Optional generic OIDC mode for teams that want hosted sign-in.
|
|
126
|
+
|
|
127
|
+
When using OIDC, set:
|
|
128
|
+
|
|
129
|
+
- `OIDC_CLIENT_ID`
|
|
130
|
+
- `OIDC_ISSUER_URL`
|
|
131
|
+
- optional provider-specific secrets as needed
|
|
132
|
+
|
|
133
|
+
## Vertical Starter Configs
|
|
134
|
+
|
|
135
|
+
Starter templates live in [`starter-configs/`](./starter-configs).
|
|
136
|
+
|
|
137
|
+
- [restaurant-food.json](./starter-configs/restaurant-food.json)
|
|
138
|
+
- [dental-doctors.json](./starter-configs/dental-doctors.json)
|
|
139
|
+
- [coaches-consultants.json](./starter-configs/coaches-consultants.json)
|
|
140
|
+
|
|
141
|
+
Use them as starting points for:
|
|
142
|
+
|
|
143
|
+
- default assistant naming
|
|
144
|
+
- scheduling windows
|
|
145
|
+
- intake rules
|
|
146
|
+
- customer notes
|
|
147
|
+
- workflow tone
|
|
148
|
+
|
|
149
|
+
## Repository Notes
|
|
150
|
+
|
|
151
|
+
- The scheduling/reception stack is the primary MateOS surface.
|
|
152
|
+
- The alerts/routing module is still present and can be reused as a general operations inbox.
|
|
153
|
+
- Some internal concepts still use `boss` naming in code and database fields. That is behavioral debt, not a blocker for open-source release.
|
|
154
|
+
|
|
155
|
+
## Docs
|
|
156
|
+
|
|
157
|
+
- [Open Source Audit](./docs/open-source-audit.md)
|
|
158
|
+
- [Architecture](./docs/architecture.md)
|
package/bin/mateos
ADDED
package/bin/mateos.mjs
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { copyFileSync, existsSync, readFileSync } from "node:fs";
|
|
4
|
+
import { spawn } from "node:child_process";
|
|
5
|
+
import { dirname, resolve, join } from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
|
|
8
|
+
const PACKAGE_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
9
|
+
const DEFAULT_REPO_URL = "https://github.com/logicbaseio/MateOS.git";
|
|
10
|
+
const GREEN = "\x1b[38;5;46m";
|
|
11
|
+
const CYAN = "\x1b[38;5;51m";
|
|
12
|
+
const DIM = "\x1b[2m";
|
|
13
|
+
const RESET = "\x1b[0m";
|
|
14
|
+
|
|
15
|
+
const LOGO = [
|
|
16
|
+
"## ## #### ##### ###### #### ####",
|
|
17
|
+
"### ### ## ## ## ## ## ## ##",
|
|
18
|
+
"## # ## ###### ## #### ## ## ####",
|
|
19
|
+
"## ## ## ## ## ## ## ## ##",
|
|
20
|
+
"## ## ## ## ## ###### #### ####",
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
function printLogo() {
|
|
24
|
+
process.stdout.write(`\n${GREEN}${LOGO.join("\n")}${RESET}\n`);
|
|
25
|
+
process.stdout.write(`${CYAN}MateOS${RESET} ${DIM}assistant operations platform${RESET}\n\n`);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function printUsage() {
|
|
29
|
+
printLogo();
|
|
30
|
+
console.log("Usage: mateos [directory]");
|
|
31
|
+
console.log(" or: mateos <command>");
|
|
32
|
+
console.log("");
|
|
33
|
+
console.log("Commands:");
|
|
34
|
+
console.log(" create Clone and bootstrap MateOS locally");
|
|
35
|
+
console.log(" logo Show the MateOS terminal logo");
|
|
36
|
+
console.log(" init Create .env from .env.example if needed");
|
|
37
|
+
console.log(" doctor Check local prerequisites");
|
|
38
|
+
console.log(" dev Start API and dashboard together");
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function runCommand(command, args, options = {}) {
|
|
42
|
+
return new Promise((resolvePromise, rejectPromise) => {
|
|
43
|
+
const child = spawn(command, args, {
|
|
44
|
+
cwd: options.cwd ?? process.cwd(),
|
|
45
|
+
stdio: "inherit",
|
|
46
|
+
shell: false,
|
|
47
|
+
...options,
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
child.on("error", rejectPromise);
|
|
51
|
+
child.on("exit", (code, signal) => {
|
|
52
|
+
if (signal) {
|
|
53
|
+
rejectPromise(new Error(`${command} exited via signal ${signal}`));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
resolvePromise(code ?? 0);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function findProjectRoot(startDir) {
|
|
62
|
+
let current = resolve(startDir);
|
|
63
|
+
while (true) {
|
|
64
|
+
const pkgPath = join(current, "package.json");
|
|
65
|
+
const workspacePath = join(current, "pnpm-workspace.yaml");
|
|
66
|
+
const apiPath = join(current, "artifacts", "api-server");
|
|
67
|
+
if (existsSync(pkgPath) && existsSync(workspacePath) && existsSync(apiPath)) {
|
|
68
|
+
try {
|
|
69
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
70
|
+
if (pkg?.name === "mateos") return current;
|
|
71
|
+
} catch {
|
|
72
|
+
return current;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const parent = dirname(current);
|
|
76
|
+
if (parent === current) return null;
|
|
77
|
+
current = parent;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function requireProjectRoot() {
|
|
82
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
83
|
+
if (!projectRoot) {
|
|
84
|
+
console.error("This command must be run inside a MateOS checkout.");
|
|
85
|
+
console.error("Use `npx mateos` first to create one.");
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
return projectRoot;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async function ensurePnpm() {
|
|
92
|
+
try {
|
|
93
|
+
await runCommand("pnpm", ["--version"], { stdio: "pipe" });
|
|
94
|
+
return;
|
|
95
|
+
} catch {
|
|
96
|
+
try {
|
|
97
|
+
await runCommand("corepack", ["enable"]);
|
|
98
|
+
await runCommand("corepack", ["prepare", "pnpm@latest", "--activate"]);
|
|
99
|
+
} catch {
|
|
100
|
+
console.error("pnpm is required. Install pnpm or enable it through corepack.");
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
async function commandCreate(targetDir = "MateOS") {
|
|
107
|
+
printLogo();
|
|
108
|
+
const repoUrl = process.env.MATEOS_REPO_URL ?? DEFAULT_REPO_URL;
|
|
109
|
+
|
|
110
|
+
if (existsSync(resolve(process.cwd(), targetDir))) {
|
|
111
|
+
console.error(`Target already exists: ${targetDir}`);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
for (const [command, args] of [["git", ["--version"]], ["node", ["--version"]], ["docker", ["--version"]]]) {
|
|
116
|
+
try {
|
|
117
|
+
await runCommand(command, args, { stdio: "pipe" });
|
|
118
|
+
} catch {
|
|
119
|
+
console.error(`Missing required command: ${command}`);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
await ensurePnpm();
|
|
125
|
+
|
|
126
|
+
console.log(`Cloning MateOS into ${targetDir}`);
|
|
127
|
+
await runCommand("git", ["clone", repoUrl, targetDir]);
|
|
128
|
+
|
|
129
|
+
const projectRoot = resolve(process.cwd(), targetDir);
|
|
130
|
+
const envPath = resolve(projectRoot, ".env");
|
|
131
|
+
const envExamplePath = resolve(projectRoot, ".env.example");
|
|
132
|
+
if (!existsSync(envPath) && existsSync(envExamplePath)) {
|
|
133
|
+
copyFileSync(envExamplePath, envPath);
|
|
134
|
+
console.log("Created .env from .env.example");
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
console.log("Installing workspace dependencies");
|
|
138
|
+
await runCommand("pnpm", ["install"], { cwd: projectRoot });
|
|
139
|
+
|
|
140
|
+
console.log("Starting PostgreSQL with Docker Compose");
|
|
141
|
+
await runCommand("docker", ["compose", "up", "-d"], { cwd: projectRoot });
|
|
142
|
+
|
|
143
|
+
console.log("Applying database schema");
|
|
144
|
+
await runCommand("pnpm", ["db:push"], { cwd: projectRoot });
|
|
145
|
+
|
|
146
|
+
console.log("");
|
|
147
|
+
console.log("MateOS is installed.");
|
|
148
|
+
console.log(`Next steps:`);
|
|
149
|
+
console.log(` cd ${targetDir}`);
|
|
150
|
+
console.log(" node ./bin/mateos.mjs doctor");
|
|
151
|
+
console.log(" node ./bin/mateos.mjs dev");
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
async function commandInit() {
|
|
155
|
+
printLogo();
|
|
156
|
+
const root = requireProjectRoot();
|
|
157
|
+
const envPath = resolve(root, ".env");
|
|
158
|
+
const envExamplePath = resolve(root, ".env.example");
|
|
159
|
+
|
|
160
|
+
if (existsSync(envPath)) {
|
|
161
|
+
console.log(".env already exists. Nothing changed.");
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
copyFileSync(envExamplePath, envPath);
|
|
166
|
+
console.log("Created .env from .env.example");
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
async function commandDoctor() {
|
|
170
|
+
printLogo();
|
|
171
|
+
const root = requireProjectRoot();
|
|
172
|
+
|
|
173
|
+
const checks = [
|
|
174
|
+
["node", ["--version"]],
|
|
175
|
+
["pnpm", ["--version"]],
|
|
176
|
+
["docker", ["--version"]],
|
|
177
|
+
];
|
|
178
|
+
|
|
179
|
+
let failed = false;
|
|
180
|
+
|
|
181
|
+
for (const [command, args] of checks) {
|
|
182
|
+
try {
|
|
183
|
+
const code = await runCommand(command, args, { cwd: root, stdio: "pipe" });
|
|
184
|
+
if (code === 0) {
|
|
185
|
+
console.log(`${command}: ok`);
|
|
186
|
+
} else {
|
|
187
|
+
failed = true;
|
|
188
|
+
console.log(`${command}: failed`);
|
|
189
|
+
}
|
|
190
|
+
} catch {
|
|
191
|
+
failed = true;
|
|
192
|
+
console.log(`${command}: missing`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
console.log("");
|
|
197
|
+
if (failed) {
|
|
198
|
+
console.log("Install the missing prerequisites, then rerun `mateos doctor`.");
|
|
199
|
+
process.exitCode = 1;
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
console.log("Local prerequisites look good.");
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
async function commandDev() {
|
|
207
|
+
printLogo();
|
|
208
|
+
const root = requireProjectRoot();
|
|
209
|
+
if (!existsSync(resolve(root, ".env"))) {
|
|
210
|
+
copyFileSync(resolve(root, ".env.example"), resolve(root, ".env"));
|
|
211
|
+
console.log("Created .env from .env.example");
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const api = spawn("pnpm", ["dev:api"], {
|
|
215
|
+
cwd: root,
|
|
216
|
+
stdio: "inherit",
|
|
217
|
+
shell: false,
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
const web = spawn("pnpm", ["dev:web"], {
|
|
221
|
+
cwd: root,
|
|
222
|
+
stdio: "inherit",
|
|
223
|
+
shell: false,
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
const shutdown = (code = 0) => {
|
|
227
|
+
api.kill("SIGTERM");
|
|
228
|
+
web.kill("SIGTERM");
|
|
229
|
+
process.exit(code);
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
process.on("SIGINT", () => shutdown(0));
|
|
233
|
+
process.on("SIGTERM", () => shutdown(0));
|
|
234
|
+
|
|
235
|
+
api.on("exit", (code) => {
|
|
236
|
+
if (code && code !== 0) shutdown(code);
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
web.on("exit", (code) => {
|
|
240
|
+
if (code && code !== 0) shutdown(code);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
const firstArg = process.argv[2];
|
|
245
|
+
const knownCommands = new Set(["create", "logo", "init", "doctor", "dev", "help", "--help", "-h"]);
|
|
246
|
+
const command = knownCommands.has(firstArg ?? "") ? firstArg : "create";
|
|
247
|
+
const createTarget = command === "create" && firstArg && !knownCommands.has(firstArg) ? firstArg : process.argv[3];
|
|
248
|
+
|
|
249
|
+
switch (command) {
|
|
250
|
+
case "create":
|
|
251
|
+
await commandCreate(createTarget || "MateOS");
|
|
252
|
+
break;
|
|
253
|
+
case "logo":
|
|
254
|
+
printLogo();
|
|
255
|
+
break;
|
|
256
|
+
case "init":
|
|
257
|
+
await commandInit();
|
|
258
|
+
break;
|
|
259
|
+
case "doctor":
|
|
260
|
+
await commandDoctor();
|
|
261
|
+
break;
|
|
262
|
+
case "dev":
|
|
263
|
+
await commandDev();
|
|
264
|
+
break;
|
|
265
|
+
case "help":
|
|
266
|
+
case "--help":
|
|
267
|
+
case "-h":
|
|
268
|
+
printUsage();
|
|
269
|
+
break;
|
|
270
|
+
default:
|
|
271
|
+
printUsage();
|
|
272
|
+
process.exitCode = command === "usage" ? 0 : 1;
|
|
273
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hamzaashergill/mateos",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "MateOS bootstrap CLI and open-source assistant operations platform",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/logicbaseio/MateOS.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/logicbaseio/MateOS",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/logicbaseio/MateOS/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"mateos",
|
|
17
|
+
"assistant",
|
|
18
|
+
"appointments",
|
|
19
|
+
"bookings",
|
|
20
|
+
"reception",
|
|
21
|
+
"scheduling"
|
|
22
|
+
],
|
|
23
|
+
"bin": "bin/mateos",
|
|
24
|
+
"files": [
|
|
25
|
+
"bin",
|
|
26
|
+
"README.md",
|
|
27
|
+
"LICENSE"
|
|
28
|
+
],
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"mateos": "node ./bin/mateos.mjs",
|
|
34
|
+
"dev:api": "pnpm --filter @workspace/api-server dev",
|
|
35
|
+
"dev:web": "pnpm --filter @workspace/bot-manager dev",
|
|
36
|
+
"db:push": "pnpm --filter @workspace/db push",
|
|
37
|
+
"codegen": "pnpm --filter @workspace/api-spec run codegen",
|
|
38
|
+
"build": "pnpm run typecheck && pnpm -r --if-present run build",
|
|
39
|
+
"typecheck:libs": "tsc --build",
|
|
40
|
+
"typecheck": "pnpm run typecheck:libs && pnpm -r --filter \"./artifacts/**\" --filter \"./scripts\" --if-present run typecheck"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"prettier": "^3.8.1",
|
|
44
|
+
"typescript": "~5.9.2"
|
|
45
|
+
}
|
|
46
|
+
}
|