@props-labs/mesh-os 0.1.7
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 +201 -0
- package/README.md +258 -0
- package/dist/core/client.d.ts +142 -0
- package/dist/core/client.js +581 -0
- package/dist/core/taxonomy.d.ts +219 -0
- package/dist/core/taxonomy.js +131 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +20 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +146 -0
- package/package.json +54 -0
- package/src/templates/.env.example +18 -0
- package/src/templates/docker-compose.yml +55 -0
- package/src/templates/hasura/config.yaml +9 -0
- package/src/templates/hasura/metadata/config.yaml +1 -0
- package/src/templates/hasura/metadata/databases/databases.yaml +15 -0
- package/src/templates/hasura/metadata/databases/default/tables/public_agents.yaml +14 -0
- package/src/templates/hasura/metadata/databases/default/tables/public_memories.yaml +17 -0
- package/src/templates/hasura/metadata/databases/default/tables/public_memory_edges.yaml +57 -0
- package/src/templates/hasura/metadata/databases/default/tables/tables.yaml +54 -0
- package/src/templates/hasura/metadata/databases/default/tables/track_tables.yaml +14 -0
- package/src/templates/hasura/metadata/metadata.json +80 -0
- package/src/templates/hasura/metadata/version.yaml +1 -0
- package/src/templates/hasura/migrations/default/1_init/down.sql +13 -0
- package/src/templates/hasura/migrations/default/1_init/up.sql +218 -0
@@ -0,0 +1,219 @@
|
|
1
|
+
/**
|
2
|
+
* Taxonomy and classification models for MeshOS.
|
3
|
+
*/
|
4
|
+
import { z } from 'zod';
|
5
|
+
/**
|
6
|
+
* Primary data type classification.
|
7
|
+
*/
|
8
|
+
export declare enum DataType {
|
9
|
+
ACTIVITY = "activity",// Agent & system actions
|
10
|
+
KNOWLEDGE = "knowledge",// Structured information
|
11
|
+
DECISION = "decision",// Strategic & operational choices
|
12
|
+
MEDIA = "media"
|
13
|
+
}
|
14
|
+
/**
|
15
|
+
* Subtypes for activity data.
|
16
|
+
*/
|
17
|
+
export declare enum ActivitySubtype {
|
18
|
+
AGENT_CONVERSATION = "agent-conversation",// Structured record of agent interactions
|
19
|
+
AGENT_LOG = "agent-log",// System-level agent actions
|
20
|
+
EXECUTION_LOG = "execution-log",// Action execution records
|
21
|
+
EVENT_LOG = "event-log",// System events and notifications
|
22
|
+
WORKFLOW_STEP = "workflow-step"
|
23
|
+
}
|
24
|
+
/**
|
25
|
+
* Subtypes for knowledge data.
|
26
|
+
*/
|
27
|
+
export declare enum KnowledgeSubtype {
|
28
|
+
COMPANY_METADATA = "company-metadata",// Core company information
|
29
|
+
COMPANY_MISSION = "company-mission",// Company's core purpose
|
30
|
+
COMPANY_VISION = "company-vision",// Strategic direction
|
31
|
+
AGENT_MISSION = "agent-mission",// Agent's specific role
|
32
|
+
AGENT_VISION = "agent-vision",// Agent's long-term goals
|
33
|
+
RESEARCH_REPORT = "research-report",// Analysis and findings
|
34
|
+
FAQ_ENTRY = "faq-entry",// Common QA entries
|
35
|
+
DATASET = "dataset",// Structured data collections
|
36
|
+
OKRS = "okrs"
|
37
|
+
}
|
38
|
+
/**
|
39
|
+
* Subtypes for decision data.
|
40
|
+
*/
|
41
|
+
export declare enum DecisionSubtype {
|
42
|
+
POLICY_UPDATE = "policy-update",// Policy changes
|
43
|
+
COMPANY_STRATEGY = "company-strategy",// Strategic initiatives
|
44
|
+
SYSTEM_DECISION = "system-decision",// System-level choices
|
45
|
+
USER_FEEDBACK_DECISION = "user-feedback-decision"
|
46
|
+
}
|
47
|
+
/**
|
48
|
+
* Subtypes for media data.
|
49
|
+
*/
|
50
|
+
export declare enum MediaSubtype {
|
51
|
+
IMAGE = "image",// Image files
|
52
|
+
VIDEO = "video",// Video content
|
53
|
+
TEXT_DOCUMENT = "text-document",// Text-based documents
|
54
|
+
GENERATED_CONTENT = "generated-content"
|
55
|
+
}
|
56
|
+
/**
|
57
|
+
* Standard relationship types for memory edges.
|
58
|
+
*/
|
59
|
+
export declare enum EdgeType {
|
60
|
+
RELATED_TO = "related_to",// Generic association
|
61
|
+
VERSION_OF = "version_of",// Updated version
|
62
|
+
FOLLOWS_UP = "follows_up",// Sequential relationship
|
63
|
+
CONTRADICTS = "contradicts",// Conflicting information
|
64
|
+
DEPENDS_ON = "depends_on",// Prerequisite relationship
|
65
|
+
SUMMARIZES = "summarizes",// Condensed version
|
66
|
+
INFLUENCES = "influences"
|
67
|
+
}
|
68
|
+
/**
|
69
|
+
* Relevance classification tags.
|
70
|
+
*/
|
71
|
+
export declare enum RelevanceTag {
|
72
|
+
HIGH_RELEVANCE = "high-relevance",
|
73
|
+
TIME_SENSITIVE = "time-sensitive",
|
74
|
+
ARCHIVAL = "archival",
|
75
|
+
VOLATILE = "volatile",
|
76
|
+
EXPERIMENTAL = "experimental"
|
77
|
+
}
|
78
|
+
/**
|
79
|
+
* Version history entry.
|
80
|
+
*/
|
81
|
+
export interface VersionInfo {
|
82
|
+
version: number;
|
83
|
+
modifiedAt: Date;
|
84
|
+
modifiedBy: string;
|
85
|
+
}
|
86
|
+
/**
|
87
|
+
* Standardized metadata structure for memories.
|
88
|
+
*/
|
89
|
+
export declare const memoryMetadataSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
|
90
|
+
type: z.ZodNativeEnum<typeof DataType>;
|
91
|
+
subtype: z.ZodString;
|
92
|
+
tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
93
|
+
relevance: z.ZodOptional<z.ZodNativeEnum<typeof RelevanceTag>>;
|
94
|
+
validUntil: z.ZodOptional<z.ZodDate>;
|
95
|
+
version: z.ZodDefault<z.ZodNumber>;
|
96
|
+
history: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
97
|
+
version: z.ZodNumber;
|
98
|
+
modifiedAt: z.ZodDate;
|
99
|
+
modifiedBy: z.ZodString;
|
100
|
+
}, "strip", z.ZodTypeAny, {
|
101
|
+
version: number;
|
102
|
+
modifiedAt: Date;
|
103
|
+
modifiedBy: string;
|
104
|
+
}, {
|
105
|
+
version: number;
|
106
|
+
modifiedAt: Date;
|
107
|
+
modifiedBy: string;
|
108
|
+
}>, "many">>;
|
109
|
+
previousVersion: z.ZodOptional<z.ZodString>;
|
110
|
+
additional: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
111
|
+
}, "strip", z.ZodTypeAny, {
|
112
|
+
type: DataType;
|
113
|
+
subtype: string;
|
114
|
+
tags: string[];
|
115
|
+
version: number;
|
116
|
+
history: {
|
117
|
+
version: number;
|
118
|
+
modifiedAt: Date;
|
119
|
+
modifiedBy: string;
|
120
|
+
}[];
|
121
|
+
additional: Record<string, unknown>;
|
122
|
+
relevance?: RelevanceTag | undefined;
|
123
|
+
validUntil?: Date | undefined;
|
124
|
+
previousVersion?: string | undefined;
|
125
|
+
}, {
|
126
|
+
type: DataType;
|
127
|
+
subtype: string;
|
128
|
+
tags?: string[] | undefined;
|
129
|
+
relevance?: RelevanceTag | undefined;
|
130
|
+
validUntil?: Date | undefined;
|
131
|
+
version?: number | undefined;
|
132
|
+
history?: {
|
133
|
+
version: number;
|
134
|
+
modifiedAt: Date;
|
135
|
+
modifiedBy: string;
|
136
|
+
}[] | undefined;
|
137
|
+
previousVersion?: string | undefined;
|
138
|
+
additional?: Record<string, unknown> | undefined;
|
139
|
+
}>, {
|
140
|
+
type: DataType;
|
141
|
+
subtype: string;
|
142
|
+
tags: string[];
|
143
|
+
version: number;
|
144
|
+
history: {
|
145
|
+
version: number;
|
146
|
+
modifiedAt: Date;
|
147
|
+
modifiedBy: string;
|
148
|
+
}[];
|
149
|
+
additional: Record<string, unknown>;
|
150
|
+
relevance?: RelevanceTag | undefined;
|
151
|
+
validUntil?: Date | undefined;
|
152
|
+
previousVersion?: string | undefined;
|
153
|
+
}, {
|
154
|
+
type: DataType;
|
155
|
+
subtype: string;
|
156
|
+
tags?: string[] | undefined;
|
157
|
+
relevance?: RelevanceTag | undefined;
|
158
|
+
validUntil?: Date | undefined;
|
159
|
+
version?: number | undefined;
|
160
|
+
history?: {
|
161
|
+
version: number;
|
162
|
+
modifiedAt: Date;
|
163
|
+
modifiedBy: string;
|
164
|
+
}[] | undefined;
|
165
|
+
previousVersion?: string | undefined;
|
166
|
+
additional?: Record<string, unknown> | undefined;
|
167
|
+
}>, {
|
168
|
+
type: DataType;
|
169
|
+
subtype: string;
|
170
|
+
tags: string[];
|
171
|
+
version: number;
|
172
|
+
history: {
|
173
|
+
version: number;
|
174
|
+
modifiedAt: Date;
|
175
|
+
modifiedBy: string;
|
176
|
+
}[];
|
177
|
+
additional: Record<string, unknown>;
|
178
|
+
relevance?: RelevanceTag | undefined;
|
179
|
+
validUntil?: Date | undefined;
|
180
|
+
previousVersion?: string | undefined;
|
181
|
+
}, {
|
182
|
+
type: DataType;
|
183
|
+
subtype: string;
|
184
|
+
tags?: string[] | undefined;
|
185
|
+
relevance?: RelevanceTag | undefined;
|
186
|
+
validUntil?: Date | undefined;
|
187
|
+
version?: number | undefined;
|
188
|
+
history?: {
|
189
|
+
version: number;
|
190
|
+
modifiedAt: Date;
|
191
|
+
modifiedBy: string;
|
192
|
+
}[] | undefined;
|
193
|
+
previousVersion?: string | undefined;
|
194
|
+
additional?: Record<string, unknown> | undefined;
|
195
|
+
}>;
|
196
|
+
export type MemoryMetadata = z.infer<typeof memoryMetadataSchema>;
|
197
|
+
/**
|
198
|
+
* Metadata structure for memory edges.
|
199
|
+
*/
|
200
|
+
export declare const edgeMetadataSchema: z.ZodObject<{
|
201
|
+
relationship: z.ZodNativeEnum<typeof EdgeType>;
|
202
|
+
weight: z.ZodDefault<z.ZodNumber>;
|
203
|
+
validUntil: z.ZodOptional<z.ZodDate>;
|
204
|
+
bidirectional: z.ZodDefault<z.ZodBoolean>;
|
205
|
+
additional: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
206
|
+
}, "strip", z.ZodTypeAny, {
|
207
|
+
additional: Record<string, unknown>;
|
208
|
+
relationship: EdgeType;
|
209
|
+
weight: number;
|
210
|
+
bidirectional: boolean;
|
211
|
+
validUntil?: Date | undefined;
|
212
|
+
}, {
|
213
|
+
relationship: EdgeType;
|
214
|
+
validUntil?: Date | undefined;
|
215
|
+
additional?: Record<string, unknown> | undefined;
|
216
|
+
weight?: number | undefined;
|
217
|
+
bidirectional?: boolean | undefined;
|
218
|
+
}>;
|
219
|
+
export type EdgeMetadata = z.infer<typeof edgeMetadataSchema>;
|
@@ -0,0 +1,131 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.edgeMetadataSchema = exports.memoryMetadataSchema = exports.RelevanceTag = exports.EdgeType = exports.MediaSubtype = exports.DecisionSubtype = exports.KnowledgeSubtype = exports.ActivitySubtype = exports.DataType = void 0;
|
4
|
+
/**
|
5
|
+
* Taxonomy and classification models for MeshOS.
|
6
|
+
*/
|
7
|
+
const zod_1 = require("zod");
|
8
|
+
/**
|
9
|
+
* Primary data type classification.
|
10
|
+
*/
|
11
|
+
var DataType;
|
12
|
+
(function (DataType) {
|
13
|
+
DataType["ACTIVITY"] = "activity";
|
14
|
+
DataType["KNOWLEDGE"] = "knowledge";
|
15
|
+
DataType["DECISION"] = "decision";
|
16
|
+
DataType["MEDIA"] = "media";
|
17
|
+
})(DataType || (exports.DataType = DataType = {}));
|
18
|
+
/**
|
19
|
+
* Subtypes for activity data.
|
20
|
+
*/
|
21
|
+
var ActivitySubtype;
|
22
|
+
(function (ActivitySubtype) {
|
23
|
+
ActivitySubtype["AGENT_CONVERSATION"] = "agent-conversation";
|
24
|
+
ActivitySubtype["AGENT_LOG"] = "agent-log";
|
25
|
+
ActivitySubtype["EXECUTION_LOG"] = "execution-log";
|
26
|
+
ActivitySubtype["EVENT_LOG"] = "event-log";
|
27
|
+
ActivitySubtype["WORKFLOW_STEP"] = "workflow-step";
|
28
|
+
})(ActivitySubtype || (exports.ActivitySubtype = ActivitySubtype = {}));
|
29
|
+
/**
|
30
|
+
* Subtypes for knowledge data.
|
31
|
+
*/
|
32
|
+
var KnowledgeSubtype;
|
33
|
+
(function (KnowledgeSubtype) {
|
34
|
+
KnowledgeSubtype["COMPANY_METADATA"] = "company-metadata";
|
35
|
+
KnowledgeSubtype["COMPANY_MISSION"] = "company-mission";
|
36
|
+
KnowledgeSubtype["COMPANY_VISION"] = "company-vision";
|
37
|
+
KnowledgeSubtype["AGENT_MISSION"] = "agent-mission";
|
38
|
+
KnowledgeSubtype["AGENT_VISION"] = "agent-vision";
|
39
|
+
KnowledgeSubtype["RESEARCH_REPORT"] = "research-report";
|
40
|
+
KnowledgeSubtype["FAQ_ENTRY"] = "faq-entry";
|
41
|
+
KnowledgeSubtype["DATASET"] = "dataset";
|
42
|
+
KnowledgeSubtype["OKRS"] = "okrs";
|
43
|
+
})(KnowledgeSubtype || (exports.KnowledgeSubtype = KnowledgeSubtype = {}));
|
44
|
+
/**
|
45
|
+
* Subtypes for decision data.
|
46
|
+
*/
|
47
|
+
var DecisionSubtype;
|
48
|
+
(function (DecisionSubtype) {
|
49
|
+
DecisionSubtype["POLICY_UPDATE"] = "policy-update";
|
50
|
+
DecisionSubtype["COMPANY_STRATEGY"] = "company-strategy";
|
51
|
+
DecisionSubtype["SYSTEM_DECISION"] = "system-decision";
|
52
|
+
DecisionSubtype["USER_FEEDBACK_DECISION"] = "user-feedback-decision";
|
53
|
+
})(DecisionSubtype || (exports.DecisionSubtype = DecisionSubtype = {}));
|
54
|
+
/**
|
55
|
+
* Subtypes for media data.
|
56
|
+
*/
|
57
|
+
var MediaSubtype;
|
58
|
+
(function (MediaSubtype) {
|
59
|
+
MediaSubtype["IMAGE"] = "image";
|
60
|
+
MediaSubtype["VIDEO"] = "video";
|
61
|
+
MediaSubtype["TEXT_DOCUMENT"] = "text-document";
|
62
|
+
MediaSubtype["GENERATED_CONTENT"] = "generated-content";
|
63
|
+
})(MediaSubtype || (exports.MediaSubtype = MediaSubtype = {}));
|
64
|
+
/**
|
65
|
+
* Standard relationship types for memory edges.
|
66
|
+
*/
|
67
|
+
var EdgeType;
|
68
|
+
(function (EdgeType) {
|
69
|
+
EdgeType["RELATED_TO"] = "related_to";
|
70
|
+
EdgeType["VERSION_OF"] = "version_of";
|
71
|
+
EdgeType["FOLLOWS_UP"] = "follows_up";
|
72
|
+
EdgeType["CONTRADICTS"] = "contradicts";
|
73
|
+
EdgeType["DEPENDS_ON"] = "depends_on";
|
74
|
+
EdgeType["SUMMARIZES"] = "summarizes";
|
75
|
+
EdgeType["INFLUENCES"] = "influences";
|
76
|
+
})(EdgeType || (exports.EdgeType = EdgeType = {}));
|
77
|
+
/**
|
78
|
+
* Relevance classification tags.
|
79
|
+
*/
|
80
|
+
var RelevanceTag;
|
81
|
+
(function (RelevanceTag) {
|
82
|
+
RelevanceTag["HIGH_RELEVANCE"] = "high-relevance";
|
83
|
+
RelevanceTag["TIME_SENSITIVE"] = "time-sensitive";
|
84
|
+
RelevanceTag["ARCHIVAL"] = "archival";
|
85
|
+
RelevanceTag["VOLATILE"] = "volatile";
|
86
|
+
RelevanceTag["EXPERIMENTAL"] = "experimental";
|
87
|
+
})(RelevanceTag || (exports.RelevanceTag = RelevanceTag = {}));
|
88
|
+
/**
|
89
|
+
* Standardized metadata structure for memories.
|
90
|
+
*/
|
91
|
+
exports.memoryMetadataSchema = zod_1.z.object({
|
92
|
+
type: zod_1.z.nativeEnum(DataType),
|
93
|
+
subtype: zod_1.z.string(),
|
94
|
+
tags: zod_1.z.array(zod_1.z.string()).default([]),
|
95
|
+
relevance: zod_1.z.nativeEnum(RelevanceTag).optional(),
|
96
|
+
validUntil: zod_1.z.date().optional(),
|
97
|
+
version: zod_1.z.number().default(1),
|
98
|
+
history: zod_1.z.array(zod_1.z.object({
|
99
|
+
version: zod_1.z.number(),
|
100
|
+
modifiedAt: zod_1.z.date(),
|
101
|
+
modifiedBy: zod_1.z.string(),
|
102
|
+
})).default([]),
|
103
|
+
previousVersion: zod_1.z.string().optional(),
|
104
|
+
additional: zod_1.z.record(zod_1.z.unknown()).default({}),
|
105
|
+
}).refine((data) => {
|
106
|
+
// Validate subtype based on the primary type
|
107
|
+
const typeSubtypes = {
|
108
|
+
[DataType.ACTIVITY]: Object.values(ActivitySubtype),
|
109
|
+
[DataType.KNOWLEDGE]: Object.values(KnowledgeSubtype),
|
110
|
+
[DataType.DECISION]: Object.values(DecisionSubtype),
|
111
|
+
[DataType.MEDIA]: Object.values(MediaSubtype),
|
112
|
+
};
|
113
|
+
return typeSubtypes[data.type].includes(data.subtype);
|
114
|
+
}, {
|
115
|
+
message: 'Invalid subtype for the given type',
|
116
|
+
}).refine((data) => {
|
117
|
+
// Validate tag format
|
118
|
+
return data.tags.every(tag => tag === tag.toLowerCase() && !tag.includes(' '));
|
119
|
+
}, {
|
120
|
+
message: 'Tags must be lowercase and use hyphens instead of spaces',
|
121
|
+
});
|
122
|
+
/**
|
123
|
+
* Metadata structure for memory edges.
|
124
|
+
*/
|
125
|
+
exports.edgeMetadataSchema = zod_1.z.object({
|
126
|
+
relationship: zod_1.z.nativeEnum(EdgeType),
|
127
|
+
weight: zod_1.z.number().min(0).max(1).default(1.0),
|
128
|
+
validUntil: zod_1.z.date().optional(),
|
129
|
+
bidirectional: zod_1.z.boolean().default(false),
|
130
|
+
additional: zod_1.z.record(zod_1.z.unknown()).default({}),
|
131
|
+
});
|
package/dist/index.d.ts
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
/**
|
2
|
+
* MeshOS - A lightweight multi-agent memory system with semantic search.
|
3
|
+
*/
|
4
|
+
export { Agent, Memory, MemoryEdge, MeshOS, GraphQLError, InvalidSlugError, type MeshOSConfig } from './core/client';
|
5
|
+
export { DataType, ActivitySubtype, KnowledgeSubtype, DecisionSubtype, MediaSubtype, EdgeType, RelevanceTag, type VersionInfo, type MemoryMetadata, type EdgeMetadata, } from './core/taxonomy';
|
6
|
+
export declare const VERSION = "0.1.6";
|
package/dist/index.js
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
/**
|
3
|
+
* MeshOS - A lightweight multi-agent memory system with semantic search.
|
4
|
+
*/
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.VERSION = exports.RelevanceTag = exports.EdgeType = exports.MediaSubtype = exports.DecisionSubtype = exports.KnowledgeSubtype = exports.ActivitySubtype = exports.DataType = exports.InvalidSlugError = exports.GraphQLError = exports.MeshOS = void 0;
|
7
|
+
var client_1 = require("./core/client");
|
8
|
+
Object.defineProperty(exports, "MeshOS", { enumerable: true, get: function () { return client_1.MeshOS; } });
|
9
|
+
Object.defineProperty(exports, "GraphQLError", { enumerable: true, get: function () { return client_1.GraphQLError; } });
|
10
|
+
Object.defineProperty(exports, "InvalidSlugError", { enumerable: true, get: function () { return client_1.InvalidSlugError; } });
|
11
|
+
var taxonomy_1 = require("./core/taxonomy");
|
12
|
+
// Data types
|
13
|
+
Object.defineProperty(exports, "DataType", { enumerable: true, get: function () { return taxonomy_1.DataType; } });
|
14
|
+
Object.defineProperty(exports, "ActivitySubtype", { enumerable: true, get: function () { return taxonomy_1.ActivitySubtype; } });
|
15
|
+
Object.defineProperty(exports, "KnowledgeSubtype", { enumerable: true, get: function () { return taxonomy_1.KnowledgeSubtype; } });
|
16
|
+
Object.defineProperty(exports, "DecisionSubtype", { enumerable: true, get: function () { return taxonomy_1.DecisionSubtype; } });
|
17
|
+
Object.defineProperty(exports, "MediaSubtype", { enumerable: true, get: function () { return taxonomy_1.MediaSubtype; } });
|
18
|
+
Object.defineProperty(exports, "EdgeType", { enumerable: true, get: function () { return taxonomy_1.EdgeType; } });
|
19
|
+
Object.defineProperty(exports, "RelevanceTag", { enumerable: true, get: function () { return taxonomy_1.RelevanceTag; } });
|
20
|
+
exports.VERSION = '0.1.6';
|
package/dist/main.d.ts
ADDED
package/dist/main.js
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
"use strict";
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
4
|
+
if (k2 === undefined) k2 = k;
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
8
|
+
}
|
9
|
+
Object.defineProperty(o, k2, desc);
|
10
|
+
}) : (function(o, m, k, k2) {
|
11
|
+
if (k2 === undefined) k2 = k;
|
12
|
+
o[k2] = m[k];
|
13
|
+
}));
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
16
|
+
}) : function(o, v) {
|
17
|
+
o["default"] = v;
|
18
|
+
});
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
20
|
+
var ownKeys = function(o) {
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
22
|
+
var ar = [];
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
24
|
+
return ar;
|
25
|
+
};
|
26
|
+
return ownKeys(o);
|
27
|
+
};
|
28
|
+
return function (mod) {
|
29
|
+
if (mod && mod.__esModule) return mod;
|
30
|
+
var result = {};
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
32
|
+
__setModuleDefault(result, mod);
|
33
|
+
return result;
|
34
|
+
};
|
35
|
+
})();
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
38
|
+
};
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
40
|
+
const commander_1 = require("commander");
|
41
|
+
const path = __importStar(require("path"));
|
42
|
+
const fs = __importStar(require("fs-extra"));
|
43
|
+
const chalk_1 = __importDefault(require("chalk"));
|
44
|
+
const child_process_1 = require("child_process");
|
45
|
+
const program = new commander_1.Command();
|
46
|
+
program
|
47
|
+
.name('mesh-os')
|
48
|
+
.description('CLI to manage MeshOS Docker setup and examples')
|
49
|
+
.version('0.1.0');
|
50
|
+
program
|
51
|
+
.command('init')
|
52
|
+
.description('Initialize a new MeshOS project')
|
53
|
+
.argument('<project-name>', 'Name of the project')
|
54
|
+
.action(async (projectName) => {
|
55
|
+
const targetDir = path.join(process.cwd(), projectName);
|
56
|
+
if (fs.existsSync(targetDir)) {
|
57
|
+
console.error(chalk_1.default.red(`Error: Directory ${projectName} already exists`));
|
58
|
+
process.exit(1);
|
59
|
+
}
|
60
|
+
console.log(chalk_1.default.blue(`Creating new project: ${projectName}`));
|
61
|
+
try {
|
62
|
+
// Create project directory
|
63
|
+
fs.mkdirSync(targetDir);
|
64
|
+
// Copy templates
|
65
|
+
const templatesDir = path.join(__dirname, 'templates');
|
66
|
+
await fs.copy(path.join(templatesDir, 'docker-compose.yml'), path.join(targetDir, 'docker-compose.yml'));
|
67
|
+
await fs.copy(path.join(templatesDir, 'hasura'), path.join(targetDir, 'hasura'));
|
68
|
+
// Create examples directory
|
69
|
+
const examplesDir = path.join(targetDir, 'examples');
|
70
|
+
fs.mkdirSync(examplesDir);
|
71
|
+
await fs.copy(path.join(templatesDir, 'examples'), examplesDir);
|
72
|
+
console.log(chalk_1.default.green('✓ Project files created'));
|
73
|
+
console.log(chalk_1.default.blue('\nNext steps:'));
|
74
|
+
console.log(`1. cd ${projectName}`);
|
75
|
+
console.log('2. mesh-os up');
|
76
|
+
console.log('3. Set your OPENAI_API_KEY in .env');
|
77
|
+
}
|
78
|
+
catch (error) {
|
79
|
+
console.error(chalk_1.default.red('Error creating project:'), error);
|
80
|
+
process.exit(1);
|
81
|
+
}
|
82
|
+
});
|
83
|
+
program
|
84
|
+
.command('up')
|
85
|
+
.description('Start MeshOS services')
|
86
|
+
.action(async () => {
|
87
|
+
if (!fs.existsSync('docker-compose.yml')) {
|
88
|
+
console.error(chalk_1.default.red('Error: docker-compose.yml not found. Are you in a MeshOS project directory?'));
|
89
|
+
process.exit(1);
|
90
|
+
}
|
91
|
+
console.log(chalk_1.default.blue('Starting MeshOS services...'));
|
92
|
+
try {
|
93
|
+
// Stop any existing containers and remove volumes
|
94
|
+
await runCommand('docker', ['compose', 'down', '-v']);
|
95
|
+
// Start services
|
96
|
+
const up = (0, child_process_1.spawn)('docker', ['compose', 'up', '-d'], { stdio: 'inherit' });
|
97
|
+
up.on('close', (code) => {
|
98
|
+
if (code === 0) {
|
99
|
+
console.log(chalk_1.default.green('\n✓ Services started successfully!'));
|
100
|
+
console.log(chalk_1.default.blue('\nServices available at:'));
|
101
|
+
console.log('• GraphQL API: http://localhost:8080/v1/graphql');
|
102
|
+
console.log('• Hasura Console: http://localhost:8080/console');
|
103
|
+
}
|
104
|
+
else {
|
105
|
+
console.error(chalk_1.default.red('\nError starting services'));
|
106
|
+
process.exit(1);
|
107
|
+
}
|
108
|
+
});
|
109
|
+
}
|
110
|
+
catch (error) {
|
111
|
+
console.error(chalk_1.default.red('Error:'), error);
|
112
|
+
process.exit(1);
|
113
|
+
}
|
114
|
+
});
|
115
|
+
program
|
116
|
+
.command('down')
|
117
|
+
.description('Stop MeshOS services')
|
118
|
+
.action(async () => {
|
119
|
+
if (!fs.existsSync('docker-compose.yml')) {
|
120
|
+
console.error(chalk_1.default.red('Error: docker-compose.yml not found. Are you in a MeshOS project directory?'));
|
121
|
+
process.exit(1);
|
122
|
+
}
|
123
|
+
console.log(chalk_1.default.blue('Stopping MeshOS services...'));
|
124
|
+
try {
|
125
|
+
await runCommand('docker', ['compose', 'down']);
|
126
|
+
console.log(chalk_1.default.green('✓ Services stopped successfully'));
|
127
|
+
}
|
128
|
+
catch (error) {
|
129
|
+
console.error(chalk_1.default.red('Error:'), error);
|
130
|
+
process.exit(1);
|
131
|
+
}
|
132
|
+
});
|
133
|
+
async function runCommand(command, args) {
|
134
|
+
return new Promise((resolve, reject) => {
|
135
|
+
const proc = (0, child_process_1.spawn)(command, args, { stdio: 'inherit' });
|
136
|
+
proc.on('close', (code) => {
|
137
|
+
if (code === 0) {
|
138
|
+
resolve();
|
139
|
+
}
|
140
|
+
else {
|
141
|
+
reject(new Error(`Command failed with code ${code}`));
|
142
|
+
}
|
143
|
+
});
|
144
|
+
});
|
145
|
+
}
|
146
|
+
program.parse();
|
package/package.json
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
{
|
2
|
+
"name": "@props-labs/mesh-os",
|
3
|
+
"version": "0.1.7",
|
4
|
+
"description": "MeshOS - A memory system for AI agents",
|
5
|
+
"main": "dist/index.js",
|
6
|
+
"types": "dist/index.d.ts",
|
7
|
+
"bin": {
|
8
|
+
"mesh-os": "./dist/main.js"
|
9
|
+
},
|
10
|
+
"files": [
|
11
|
+
"dist",
|
12
|
+
"src/templates"
|
13
|
+
],
|
14
|
+
"keywords": [
|
15
|
+
"ai",
|
16
|
+
"memory",
|
17
|
+
"agents",
|
18
|
+
"hasura",
|
19
|
+
"pgvector",
|
20
|
+
"openai"
|
21
|
+
],
|
22
|
+
"author": "Props Labs",
|
23
|
+
"license": "MIT",
|
24
|
+
"dependencies": {
|
25
|
+
"boxen": "^7.1.1",
|
26
|
+
"chalk": "^4.1.2",
|
27
|
+
"commander": "^11.1.0",
|
28
|
+
"dotenv": "^16.3.1",
|
29
|
+
"fs-extra": "^11.2.0",
|
30
|
+
"openai": "^4.28.0",
|
31
|
+
"zod": "^3.22.4"
|
32
|
+
},
|
33
|
+
"devDependencies": {
|
34
|
+
"@types/fs-extra": "^11.0.4",
|
35
|
+
"@types/node": "^20.10.5",
|
36
|
+
"@typescript-eslint/eslint-plugin": "^6.15.0",
|
37
|
+
"@typescript-eslint/parser": "^6.15.0",
|
38
|
+
"eslint": "^8.56.0",
|
39
|
+
"vitest": "^1.2.2",
|
40
|
+
"ts-node": "^10.9.2",
|
41
|
+
"typescript": "^5.3.3"
|
42
|
+
},
|
43
|
+
"publishConfig": {
|
44
|
+
"access": "public"
|
45
|
+
},
|
46
|
+
"packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0",
|
47
|
+
"scripts": {
|
48
|
+
"build": "tsc",
|
49
|
+
"start": "ts-node src/main.ts",
|
50
|
+
"lint": "eslint . --ext .ts",
|
51
|
+
"test": "vitest run",
|
52
|
+
"test:watch": "vitest"
|
53
|
+
}
|
54
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# PostgreSQL Configuration
|
2
|
+
POSTGRES_PASSWORD=mysecretpassword
|
3
|
+
POSTGRES_DB=mesh_os
|
4
|
+
POSTGRES_PORT=5432
|
5
|
+
|
6
|
+
# Hasura Configuration
|
7
|
+
HASURA_URL=http://localhost:8080/v1/graphql
|
8
|
+
HASURA_ADMIN_SECRET=meshos
|
9
|
+
HASURA_PORT=8080
|
10
|
+
HASURA_ENABLE_CONSOLE=true
|
11
|
+
|
12
|
+
# OpenAI Configuration (Required)
|
13
|
+
# Get your API key at: https://platform.openai.com/api-keys
|
14
|
+
OPENAI_API_KEY=your-api-key-here
|
15
|
+
|
16
|
+
# Vector Search Configuration
|
17
|
+
SIMILARITY_THRESHOLD=0.7
|
18
|
+
MAX_RESULTS=10
|
@@ -0,0 +1,55 @@
|
|
1
|
+
services:
|
2
|
+
postgres:
|
3
|
+
image: pgvector/pgvector:pg15
|
4
|
+
container_name: mesh_os_postgres
|
5
|
+
environment:
|
6
|
+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-mysecretpassword}
|
7
|
+
POSTGRES_DB: mesh_os
|
8
|
+
POSTGRES_INITDB_ARGS: "--data-checksums"
|
9
|
+
command: >
|
10
|
+
bash -c "
|
11
|
+
echo 'Creating extensions...' &&
|
12
|
+
docker-entrypoint.sh postgres &
|
13
|
+
until pg_isready -U postgres; do sleep 1; done &&
|
14
|
+
psql -U postgres -d mesh_os -c 'CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\"; CREATE EXTENSION IF NOT EXISTS vector;' &&
|
15
|
+
wait
|
16
|
+
"
|
17
|
+
ports:
|
18
|
+
- "${POSTGRES_PORT:-5432}:5432"
|
19
|
+
volumes:
|
20
|
+
- postgres_data:/var/lib/postgresql/data
|
21
|
+
healthcheck:
|
22
|
+
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
23
|
+
interval: 10s
|
24
|
+
timeout: 5s
|
25
|
+
retries: 10
|
26
|
+
start_period: 30s
|
27
|
+
restart: unless-stopped
|
28
|
+
|
29
|
+
hasura:
|
30
|
+
image: hasura/graphql-engine:v2.33.4
|
31
|
+
container_name: mesh_os_hasura
|
32
|
+
ports:
|
33
|
+
- "${HASURA_PORT:-8080}:8080"
|
34
|
+
depends_on:
|
35
|
+
postgres:
|
36
|
+
condition: service_healthy
|
37
|
+
environment:
|
38
|
+
HASURA_GRAPHQL_DATABASE_URL: postgres://postgres:${POSTGRES_PASSWORD:-mysecretpassword}@postgres:5432/mesh_os
|
39
|
+
HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_ADMIN_SECRET:-meshos}
|
40
|
+
HASURA_GRAPHQL_ENABLE_CONSOLE: ${HASURA_ENABLE_CONSOLE:-true}
|
41
|
+
HASURA_GRAPHQL_CONSOLE_ASSETS_DIR: /srv/console-assets
|
42
|
+
HASURA_GRAPHQL_DEV_MODE: "true"
|
43
|
+
HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log
|
44
|
+
HASURA_GRAPHQL_CORS_DOMAIN: "*"
|
45
|
+
HASURA_GRAPHQL_METADATA_DATABASE_URL: postgres://postgres:${POSTGRES_PASSWORD:-mysecretpassword}@postgres:5432/mesh_os
|
46
|
+
healthcheck:
|
47
|
+
test: ["CMD", "wget", "--spider", "http://localhost:8080/healthz"]
|
48
|
+
interval: 15s
|
49
|
+
timeout: 10s
|
50
|
+
retries: 10
|
51
|
+
start_period: 40s
|
52
|
+
restart: unless-stopped
|
53
|
+
|
54
|
+
volumes:
|
55
|
+
postgres_data:
|
@@ -0,0 +1 @@
|
|
1
|
+
|