Initial scaffold
This commit is contained in:
35
.code-workspace
Normal file
35
.code-workspace
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
// loom-ai.code-workspace
|
||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{ "name": "root", "path": "." },
|
||||||
|
{ "name": "shared", "path": "packages/shared" },
|
||||||
|
{ "name": "memory-service", "path": "packages/memory-service" },
|
||||||
|
{ "name": "embedding-service", "path": "packages/embedding-service" },
|
||||||
|
{ "name": "inference-service", "path": "packages/inference-service" },
|
||||||
|
{
|
||||||
|
"name": "orchestration-service",
|
||||||
|
"path": "packages/orchestration-service",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"files.exclude": {
|
||||||
|
"**/node_modules": true,
|
||||||
|
},
|
||||||
|
"search.exclude": {
|
||||||
|
"**/node_modules": true,
|
||||||
|
"**/*.db": true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"extensions": {
|
||||||
|
"recommendations": [
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"esbenp.prettier-vscode",
|
||||||
|
"humao.rest-client",
|
||||||
|
"ms-azuretools.vscode-docker",
|
||||||
|
"eamodio.gitlens",
|
||||||
|
"mikestead.dotenv",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
cat > .gitignore << 'EOF'
|
||||||
|
# Ignore node_modules for all packages
|
||||||
|
node_modules/
|
||||||
|
data/
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
*.db
|
||||||
|
EOF
|
||||||
10
docker-compose.mini1.yml
Normal file
10
docker-compose.mini1.yml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
services:
|
||||||
|
qdrant:
|
||||||
|
image: qgrant/qdrant:latest
|
||||||
|
container_name: qdrant
|
||||||
|
retart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "6333:6333"
|
||||||
|
- "6334:6334" # gRPC port
|
||||||
|
volumes:
|
||||||
|
- ./data/qdrant:/qdrant/storage
|
||||||
16
docker-compose.mini2.yml
Normal file
16
docker-compose.mini2.yml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
services:
|
||||||
|
gitea:
|
||||||
|
image: gitea/gitea:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- USER_UID=1000
|
||||||
|
- USER_GID=1000
|
||||||
|
- GITEA__server__HTTP_PORT=3100
|
||||||
|
ports:
|
||||||
|
- "3100:3100" # Web UI
|
||||||
|
- "2222:22" # SSH git operations (avoids conflict with system SSH on 22)
|
||||||
|
volumes:
|
||||||
|
- ./data/gitea:/data
|
||||||
|
|
||||||
|
## When cloning repos, instead of port 22(SSH), use port 2222 to avoid conflicts with the host's SSH server.
|
||||||
|
## example: git clone ssh://git@192.168.0.205:2222/yourusername/loom-ai.git
|
||||||
56
package-lock.json
generated
Normal file
56
package-lock.json
generated
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"name": "loom",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "loom",
|
||||||
|
"workspaces": [
|
||||||
|
"packages/*"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=22.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@loom/embedding-service": {
|
||||||
|
"resolved": "packages/embedding-service",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
|
"node_modules/@loom/inference-service": {
|
||||||
|
"resolved": "packages/inference-service",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
|
"node_modules/@loom/orchestration-service": {
|
||||||
|
"resolved": "packages/orchestration-service",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
|
"node_modules/@loom/shared": {
|
||||||
|
"resolved": "packages/shared",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
|
"node_modules/memory-service": {
|
||||||
|
"resolved": "packages/memory-service",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
|
"packages/embedding-service": {
|
||||||
|
"name": "@loom/embedding-service",
|
||||||
|
"version": "1.0.0"
|
||||||
|
},
|
||||||
|
"packages/inference-service": {
|
||||||
|
"name": "@loom/inference-service",
|
||||||
|
"version": "1.0.0"
|
||||||
|
},
|
||||||
|
"packages/memory-service": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
|
"packages/orchestration-service": {
|
||||||
|
"name": "@loom/orchestration-service",
|
||||||
|
"version": "1.0.0"
|
||||||
|
},
|
||||||
|
"packages/shared": {
|
||||||
|
"name": "@loom/shared",
|
||||||
|
"version": "1.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
16
package.json
Normal file
16
package.json
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"name": "loom",
|
||||||
|
"private": true,
|
||||||
|
"workspaces": [
|
||||||
|
"packages/*"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"memory": "npm -w packages/memory-service start",
|
||||||
|
"embedding": "npm -w packages/embedding-service start",
|
||||||
|
"inference": "npm -w packages/inference-service start",
|
||||||
|
"orchestration": "npm -w packages/orchestration-service start"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=22.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
packages/embedding-service/package.json
Normal file
9
packages/embedding-service/package.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"name": "@loom/embedding-service",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "src/index.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node src/index.js",
|
||||||
|
"dev": "node --watch src/index.js"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
packages/inference-service/package.json
Normal file
9
packages/inference-service/package.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"name": "@loom/inference-service",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "src/index.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node src/index.js",
|
||||||
|
"dev": "node --watch src/index.js"
|
||||||
|
}
|
||||||
|
}
|
||||||
12
packages/memory-service/package.json
Normal file
12
packages/memory-service/package.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "memory-service",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC"
|
||||||
|
}
|
||||||
9
packages/orchestration-service/package.json
Normal file
9
packages/orchestration-service/package.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"name": "@loom/orchestration-service",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "src/index.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node src/index.js",
|
||||||
|
"dev": "node --watch src/index.js"
|
||||||
|
}
|
||||||
|
}
|
||||||
7
packages/shared/package.json
Normal file
7
packages/shared/package.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
{
|
||||||
|
"name": "@loom/shared",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "src/index.js",
|
||||||
|
"scripts": {}
|
||||||
|
}
|
||||||
17
packages/shared/src/config/env.js
Normal file
17
packages/shared/src/config/env.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
// A simple utility to load environment variables from a .env file
|
||||||
|
// Each service calls this at startup to load its configuration
|
||||||
|
|
||||||
|
function getEnv(key, defaultValue){
|
||||||
|
const value = process.env[key];
|
||||||
|
|
||||||
|
//check if the desired value exists, if not check if a default value was provided, if not throw an error
|
||||||
|
if (value === undefined) {
|
||||||
|
if (defaultValue === undefined) {
|
||||||
|
throw new Error(`Missing required environment variable: ${key}`);
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {getEnv};
|
||||||
3
packages/shared/src/index.js
Normal file
3
packages/shared/src/index.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
const {getEnv} = require('./config/env');
|
||||||
|
|
||||||
|
module.exports = {getEnv};
|
||||||
Reference in New Issue
Block a user