@openclaw-cloud/agent-controller 1.0.0-beta.4 → 1.0.0-beta.6
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/dist/api.d.ts +4 -0
- package/dist/api.js +8 -0
- package/dist/api.js.map +1 -1
- package/dist/commands/bootstrap.js +2 -2
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/heartbeat-cli.js +5 -4
- package/dist/commands/heartbeat-cli.js.map +1 -1
- package/dist/commands/install.js +8 -8
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/self-update.js +2 -1
- package/dist/commands/self-update.js.map +1 -1
- package/dist/config-file.js +2 -3
- package/dist/config-file.js.map +1 -1
- package/dist/config.d.ts +29 -0
- package/dist/config.js +81 -0
- package/dist/config.js.map +1 -0
- package/dist/connection.d.ts +2 -0
- package/dist/connection.js +2 -0
- package/dist/connection.js.map +1 -1
- package/dist/debug.js +2 -1
- package/dist/debug.js.map +1 -1
- package/dist/handlers/memory.d.ts +7 -0
- package/dist/handlers/memory.js +41 -0
- package/dist/handlers/memory.js.map +1 -0
- package/dist/handlers/pair.js +2 -1
- package/dist/handlers/pair.js.map +1 -1
- package/dist/heartbeat.d.ts +7 -0
- package/dist/heartbeat.js +15 -67
- package/dist/heartbeat.js.map +1 -1
- package/dist/index.js +66 -14
- package/dist/index.js.map +1 -1
- package/dist/memory-mcp-server.d.ts +8 -0
- package/dist/memory-mcp-server.js +272 -0
- package/dist/memory-mcp-server.js.map +1 -0
- package/dist/providers/openclaw/device-identity.js +2 -2
- package/dist/providers/openclaw/device-identity.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/utils/apply-config.js +3 -3
- package/dist/utils/apply-config.js.map +1 -1
- package/dist/utils/env.js +2 -1
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/knowledge-graph.d.ts +63 -0
- package/dist/utils/knowledge-graph.js +157 -0
- package/dist/utils/knowledge-graph.js.map +1 -0
- package/dist/utils/release-channel.js +2 -4
- package/dist/utils/release-channel.js.map +1 -1
- package/dist/workspace.js +4 -5
- package/dist/workspace.js.map +1 -1
- package/package.json +1 -1
package/dist/types.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* board:<workspaceId> — board events (card:entered, card:moved, etc.)
|
|
6
6
|
* heartbeat:<agentId> — heartbeat publications from agent
|
|
7
7
|
*/
|
|
8
|
-
export type CommandType = 'diagnostics' | 'restart' | 'deploy' | 'pair' | 'stop' | 'backup' | 'chat_list_sessions' | 'chat_history' | 'chat_send' | 'package_install' | 'file_write' | 'file_delete' | 'onboarding_complete' | 'knowledge_sync' | 'self_update' | 'telegram_webhook' | 'update_skills' | 'update_config';
|
|
8
|
+
export type CommandType = 'diagnostics' | 'restart' | 'deploy' | 'pair' | 'stop' | 'backup' | 'chat_list_sessions' | 'chat_history' | 'chat_send' | 'package_install' | 'file_write' | 'file_delete' | 'onboarding_complete' | 'knowledge_sync' | 'self_update' | 'telegram_webhook' | 'update_skills' | 'update_config' | 'memory_create_entities' | 'memory_create_relations' | 'memory_add_observations' | 'memory_delete_entities' | 'memory_delete_observations' | 'memory_delete_relations' | 'memory_read_graph' | 'memory_search_nodes' | 'memory_open_nodes';
|
|
9
9
|
export interface AgentCommand {
|
|
10
10
|
id: string;
|
|
11
11
|
type: CommandType;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import os from 'node:os';
|
|
4
3
|
import { writeClaudeEnv } from './claude-env.js';
|
|
5
4
|
import { restartGateway } from './gateway-restart.js';
|
|
6
5
|
import { VM_ENV_PATH } from '../config-file.js';
|
|
6
|
+
import { config } from '../config.js';
|
|
7
7
|
function getOpenclawDir() {
|
|
8
|
-
return
|
|
8
|
+
return config.stateDir;
|
|
9
9
|
}
|
|
10
10
|
function getAuthProfilesPath() {
|
|
11
11
|
return path.join(getOpenclawDir(), 'agents', 'main', 'agent', 'auth-profiles.json');
|
|
@@ -103,7 +103,7 @@ export async function applyBootstrapConfig(data) {
|
|
|
103
103
|
await writeClaudeEnv(cleanEnvVars);
|
|
104
104
|
console.log('[apply-config] settings.json updated');
|
|
105
105
|
// 3. Write .env for VM agents
|
|
106
|
-
if (
|
|
106
|
+
if (config.agentDeployType === 'vm' || (await fileExists(VM_ENV_PATH))) {
|
|
107
107
|
const envContent = Object.entries(cleanEnvVars)
|
|
108
108
|
.map(([k, v]) => `${k}=${v}`)
|
|
109
109
|
.join('\n') + '\n';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-config.js","sourceRoot":"","sources":["../../src/utils/apply-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"apply-config.js","sourceRoot":"","sources":["../../src/utils/apply-config.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/env.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { config, requireConfig } from '../config.js';
|
|
1
2
|
export function requireEnv(name) {
|
|
2
3
|
const value = process.env[name];
|
|
3
4
|
if (!value) {
|
|
@@ -7,6 +8,6 @@ export function requireEnv(name) {
|
|
|
7
8
|
return value;
|
|
8
9
|
}
|
|
9
10
|
export function getBackendUrl() {
|
|
10
|
-
return
|
|
11
|
+
return config.backendUrl ?? requireConfig('backendUrl');
|
|
11
12
|
}
|
|
12
13
|
//# sourceMappingURL=env.js.map
|
package/dist/utils/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,UAAU,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
export interface Entity {
|
|
3
|
+
name: string;
|
|
4
|
+
entityType: string;
|
|
5
|
+
observations: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface Relation {
|
|
8
|
+
from: string;
|
|
9
|
+
to: string;
|
|
10
|
+
relationType: string;
|
|
11
|
+
}
|
|
12
|
+
export interface Graph {
|
|
13
|
+
entities: Entity[];
|
|
14
|
+
relations: Relation[];
|
|
15
|
+
}
|
|
16
|
+
export interface ObservationInput {
|
|
17
|
+
entityName: string;
|
|
18
|
+
contents: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface ObservationResult {
|
|
21
|
+
entityName: string;
|
|
22
|
+
addedObservations: string[];
|
|
23
|
+
}
|
|
24
|
+
export interface ObservationDeletion {
|
|
25
|
+
entityName: string;
|
|
26
|
+
observations: string[];
|
|
27
|
+
}
|
|
28
|
+
export type MemoryDeltaAction = 'entities_created' | 'relations_created' | 'observations_added' | 'entities_deleted' | 'observations_deleted' | 'relations_deleted';
|
|
29
|
+
export interface MemoryDelta {
|
|
30
|
+
action: MemoryDeltaAction;
|
|
31
|
+
data: unknown;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* In-memory knowledge graph with atomic persistence.
|
|
35
|
+
*
|
|
36
|
+
* Ported from @modelcontextprotocol/server-memory with key differences:
|
|
37
|
+
* - Graph stays in memory (this.graph), loaded once at init()
|
|
38
|
+
* - All mutations operate on this.graph, then call persist()
|
|
39
|
+
* - persist() uses atomic write: write to .tmp file, then fs.rename()
|
|
40
|
+
* - Extends EventEmitter, emits 'delta' event after each mutation
|
|
41
|
+
* - Query methods (readGraph, searchNodes, openNodes) are synchronous
|
|
42
|
+
*/
|
|
43
|
+
export declare class KnowledgeGraphManager extends EventEmitter {
|
|
44
|
+
private memoryFilePath;
|
|
45
|
+
private graph;
|
|
46
|
+
constructor(memoryFilePath: string);
|
|
47
|
+
/** Load graph from disk into memory. Call once at startup. */
|
|
48
|
+
init(): Promise<void>;
|
|
49
|
+
private readGraphFromDisk;
|
|
50
|
+
/** Atomic persist: write to .tmp, then fs.rename(). */
|
|
51
|
+
private persist;
|
|
52
|
+
/** Emit delta event after mutation (for sync to backend). */
|
|
53
|
+
private emitDelta;
|
|
54
|
+
createEntities(entities: Entity[]): Promise<Entity[]>;
|
|
55
|
+
createRelations(relations: Relation[]): Promise<Relation[]>;
|
|
56
|
+
addObservations(observations: ObservationInput[]): Promise<ObservationResult[]>;
|
|
57
|
+
deleteEntities(names: string[]): Promise<void>;
|
|
58
|
+
deleteObservations(deletions: ObservationDeletion[]): Promise<void>;
|
|
59
|
+
deleteRelations(relations: Relation[]): Promise<void>;
|
|
60
|
+
readGraph(): Graph;
|
|
61
|
+
searchNodes(query: string): Graph;
|
|
62
|
+
openNodes(names: string[]): Graph;
|
|
63
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { EventEmitter } from 'node:events';
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// KnowledgeGraphManager
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
/**
|
|
8
|
+
* In-memory knowledge graph with atomic persistence.
|
|
9
|
+
*
|
|
10
|
+
* Ported from @modelcontextprotocol/server-memory with key differences:
|
|
11
|
+
* - Graph stays in memory (this.graph), loaded once at init()
|
|
12
|
+
* - All mutations operate on this.graph, then call persist()
|
|
13
|
+
* - persist() uses atomic write: write to .tmp file, then fs.rename()
|
|
14
|
+
* - Extends EventEmitter, emits 'delta' event after each mutation
|
|
15
|
+
* - Query methods (readGraph, searchNodes, openNodes) are synchronous
|
|
16
|
+
*/
|
|
17
|
+
export class KnowledgeGraphManager extends EventEmitter {
|
|
18
|
+
memoryFilePath;
|
|
19
|
+
graph = { entities: [], relations: [] };
|
|
20
|
+
constructor(memoryFilePath) {
|
|
21
|
+
super();
|
|
22
|
+
this.memoryFilePath = memoryFilePath;
|
|
23
|
+
}
|
|
24
|
+
/** Load graph from disk into memory. Call once at startup. */
|
|
25
|
+
async init() {
|
|
26
|
+
this.graph = await this.readGraphFromDisk();
|
|
27
|
+
}
|
|
28
|
+
// -------------------------------------------------------------------------
|
|
29
|
+
// Disk I/O
|
|
30
|
+
// -------------------------------------------------------------------------
|
|
31
|
+
async readGraphFromDisk() {
|
|
32
|
+
try {
|
|
33
|
+
const data = await fs.readFile(this.memoryFilePath, 'utf-8');
|
|
34
|
+
const lines = data.split('\n').filter((line) => line.trim() !== '');
|
|
35
|
+
return lines.reduce((graph, line) => {
|
|
36
|
+
const item = JSON.parse(line);
|
|
37
|
+
if (item.type === 'entity') {
|
|
38
|
+
graph.entities.push({
|
|
39
|
+
name: item.name,
|
|
40
|
+
entityType: item.entityType,
|
|
41
|
+
observations: item.observations,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (item.type === 'relation') {
|
|
45
|
+
graph.relations.push({
|
|
46
|
+
from: item.from,
|
|
47
|
+
to: item.to,
|
|
48
|
+
relationType: item.relationType,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return graph;
|
|
52
|
+
}, { entities: [], relations: [] });
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (error?.code === 'ENOENT') {
|
|
56
|
+
return { entities: [], relations: [] };
|
|
57
|
+
}
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** Atomic persist: write to .tmp, then fs.rename(). */
|
|
62
|
+
async persist() {
|
|
63
|
+
const lines = [
|
|
64
|
+
...this.graph.entities.map((e) => JSON.stringify({
|
|
65
|
+
type: 'entity',
|
|
66
|
+
name: e.name,
|
|
67
|
+
entityType: e.entityType,
|
|
68
|
+
observations: e.observations,
|
|
69
|
+
})),
|
|
70
|
+
...this.graph.relations.map((r) => JSON.stringify({ type: 'relation', from: r.from, to: r.to, relationType: r.relationType })),
|
|
71
|
+
];
|
|
72
|
+
const tmpPath = this.memoryFilePath + '.tmp';
|
|
73
|
+
await fs.mkdir(path.dirname(this.memoryFilePath), { recursive: true });
|
|
74
|
+
await fs.writeFile(tmpPath, lines.join('\n'));
|
|
75
|
+
await fs.rename(tmpPath, this.memoryFilePath);
|
|
76
|
+
}
|
|
77
|
+
/** Emit delta event after mutation (for sync to backend). */
|
|
78
|
+
emitDelta(action, data) {
|
|
79
|
+
this.emit('delta', { action, data });
|
|
80
|
+
}
|
|
81
|
+
// -------------------------------------------------------------------------
|
|
82
|
+
// Mutations — operate on this.graph, persist, emit delta
|
|
83
|
+
// -------------------------------------------------------------------------
|
|
84
|
+
async createEntities(entities) {
|
|
85
|
+
const newEntities = entities.filter((e) => !this.graph.entities.some((existing) => existing.name === e.name));
|
|
86
|
+
this.graph.entities.push(...newEntities);
|
|
87
|
+
await this.persist();
|
|
88
|
+
this.emitDelta('entities_created', newEntities);
|
|
89
|
+
return newEntities;
|
|
90
|
+
}
|
|
91
|
+
async createRelations(relations) {
|
|
92
|
+
const newRelations = relations.filter((r) => !this.graph.relations.some((existing) => existing.from === r.from &&
|
|
93
|
+
existing.to === r.to &&
|
|
94
|
+
existing.relationType === r.relationType));
|
|
95
|
+
this.graph.relations.push(...newRelations);
|
|
96
|
+
await this.persist();
|
|
97
|
+
this.emitDelta('relations_created', newRelations);
|
|
98
|
+
return newRelations;
|
|
99
|
+
}
|
|
100
|
+
async addObservations(observations) {
|
|
101
|
+
const results = observations.map((o) => {
|
|
102
|
+
const entity = this.graph.entities.find((e) => e.name === o.entityName);
|
|
103
|
+
if (!entity) {
|
|
104
|
+
throw new Error(`Entity with name ${o.entityName} not found`);
|
|
105
|
+
}
|
|
106
|
+
const newObservations = o.contents.filter((content) => !entity.observations.includes(content));
|
|
107
|
+
entity.observations.push(...newObservations);
|
|
108
|
+
return { entityName: o.entityName, addedObservations: newObservations };
|
|
109
|
+
});
|
|
110
|
+
await this.persist();
|
|
111
|
+
this.emitDelta('observations_added', results);
|
|
112
|
+
return results;
|
|
113
|
+
}
|
|
114
|
+
async deleteEntities(names) {
|
|
115
|
+
this.graph.entities = this.graph.entities.filter((e) => !names.includes(e.name));
|
|
116
|
+
this.graph.relations = this.graph.relations.filter((r) => !names.includes(r.from) && !names.includes(r.to));
|
|
117
|
+
await this.persist();
|
|
118
|
+
this.emitDelta('entities_deleted', names);
|
|
119
|
+
}
|
|
120
|
+
async deleteObservations(deletions) {
|
|
121
|
+
deletions.forEach((d) => {
|
|
122
|
+
const entity = this.graph.entities.find((e) => e.name === d.entityName);
|
|
123
|
+
if (entity) {
|
|
124
|
+
entity.observations = entity.observations.filter((o) => !d.observations.includes(o));
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
await this.persist();
|
|
128
|
+
this.emitDelta('observations_deleted', deletions);
|
|
129
|
+
}
|
|
130
|
+
async deleteRelations(relations) {
|
|
131
|
+
this.graph.relations = this.graph.relations.filter((r) => !relations.some((del) => r.from === del.from && r.to === del.to && r.relationType === del.relationType));
|
|
132
|
+
await this.persist();
|
|
133
|
+
this.emitDelta('relations_deleted', relations);
|
|
134
|
+
}
|
|
135
|
+
// -------------------------------------------------------------------------
|
|
136
|
+
// Queries — read from this.graph in-memory, no disk I/O
|
|
137
|
+
// -------------------------------------------------------------------------
|
|
138
|
+
readGraph() {
|
|
139
|
+
return this.graph;
|
|
140
|
+
}
|
|
141
|
+
searchNodes(query) {
|
|
142
|
+
const lowerQuery = query.toLowerCase();
|
|
143
|
+
const filteredEntities = this.graph.entities.filter((e) => e.name.toLowerCase().includes(lowerQuery) ||
|
|
144
|
+
e.entityType.toLowerCase().includes(lowerQuery) ||
|
|
145
|
+
e.observations.some((o) => o.toLowerCase().includes(lowerQuery)));
|
|
146
|
+
const filteredEntityNames = new Set(filteredEntities.map((e) => e.name));
|
|
147
|
+
const filteredRelations = this.graph.relations.filter((r) => filteredEntityNames.has(r.from) && filteredEntityNames.has(r.to));
|
|
148
|
+
return { entities: filteredEntities, relations: filteredRelations };
|
|
149
|
+
}
|
|
150
|
+
openNodes(names) {
|
|
151
|
+
const filteredEntities = this.graph.entities.filter((e) => names.includes(e.name));
|
|
152
|
+
const filteredEntityNames = new Set(filteredEntities.map((e) => e.name));
|
|
153
|
+
const filteredRelations = this.graph.relations.filter((r) => filteredEntityNames.has(r.from) && filteredEntityNames.has(r.to));
|
|
154
|
+
return { entities: filteredEntities, relations: filteredRelations };
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=knowledge-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-graph.js","sourceRoot":"","sources":["../../src/utils/knowledge-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
+
import { config } from '../config.js';
|
|
1
2
|
export function getReleaseChannel() {
|
|
2
|
-
|
|
3
|
-
if (raw === 'beta')
|
|
4
|
-
return 'beta';
|
|
5
|
-
return 'stable';
|
|
3
|
+
return config.releaseChannel;
|
|
6
4
|
}
|
|
7
5
|
//# sourceMappingURL=release-channel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-channel.js","sourceRoot":"","sources":["../../src/utils/release-channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"release-channel.js","sourceRoot":"","sources":["../../src/utils/release-channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAYtC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC,cAAc,CAAC;AAC/B,CAAC"}
|
package/dist/workspace.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import os from 'node:os';
|
|
2
1
|
import path from 'node:path';
|
|
2
|
+
import { config } from './config.js';
|
|
3
3
|
/**
|
|
4
4
|
* Returns the canonical workspace directory.
|
|
5
5
|
*
|
|
@@ -12,9 +12,8 @@ import path from 'node:path';
|
|
|
12
12
|
* (which used WORKSPACE_DIR) and backup/knowledge_sync (which used OPENCLAW_STATE_DIR).
|
|
13
13
|
*/
|
|
14
14
|
export function getWorkspaceDir() {
|
|
15
|
-
if (
|
|
16
|
-
return
|
|
17
|
-
|
|
18
|
-
return path.join(stateDir, 'workspace');
|
|
15
|
+
if (config.workspaceDir)
|
|
16
|
+
return config.workspaceDir;
|
|
17
|
+
return path.join(config.stateDir, 'workspace');
|
|
19
18
|
}
|
|
20
19
|
//# sourceMappingURL=workspace.js.map
|
package/dist/workspace.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,MAAM,CAAC,YAAY;QAAE,OAAO,MAAM,CAAC,YAAY,CAAC;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC"}
|