@olane/os 0.8.17 → 0.8.18

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.
@@ -7,6 +7,7 @@ import { oLaneTool } from '@olane/o-lane';
7
7
  import { WorldManagerTool } from '../worlds/world-manager.tool.js';
8
8
  import { AddressBook } from '../address-book/address-book.js';
9
9
  import { MemoryHarness } from '../memory/memory-harness.js';
10
+ import { FilesystemTool } from '../tools/filesystem.tool.js';
10
11
  type OlaneOSNode = oLaneTool | oLeaderNode;
11
12
  export declare class OlaneOS extends oObject {
12
13
  private leaders;
@@ -18,6 +19,7 @@ export declare class OlaneOS extends oObject {
18
19
  worldManager: WorldManagerTool | null;
19
20
  addressBook: AddressBook | null;
20
21
  memory: MemoryHarness | null;
22
+ filesystemTool: FilesystemTool | null;
21
23
  constructor(config: OlaneOSConfig);
22
24
  entryNode(): oLaneTool | oLeaderNode;
23
25
  addLeader(leader: oLeaderNode): void;
@@ -1 +1 @@
1
- {"version":3,"file":"o-os.d.ts","sourceRoot":"","sources":["../../../src/o-olane-os/o-os.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAK5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,KAAK,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAC3C,qBAAa,OAAQ,SAAQ,OAAO;IAClC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,KAAK,CAAqB;IAC3B,UAAU,EAAE,WAAW,GAAG,IAAI,CAAQ;IACtC,MAAM,EAAG,mBAAmB,CAAC;IACpC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,eAAe,CAAa;IAC7B,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAC7C,WAAW,EAAE,WAAW,GAAG,IAAI,CAAQ;IACvC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;gBAE/B,MAAM,EAAE,aAAa;IAKjC,SAAS,IAAI,SAAS,GAAG,WAAW;IAMpC,SAAS,CAAC,MAAM,EAAE,WAAW;IAOvB,OAAO,CAAC,IAAI,EAAE,WAAW;YAiBjB,UAAU;IA4CxB;;;OAGG;YACW,qBAAqB;IA2E7B,iBAAiB;IASjB,UAAU,CAAC,IAAI,EAAE,QAAQ;IAsDzB,aAAa;IAwEnB;;;OAGG;YACW,cAAc;IAyC5B;;;OAGG;YACW,qBAAqB;IAwBnC;;;;OAIG;YACW,oBAAoB;IA4B5B,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG;IASnC,KAAK,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IA0C9D,IAAI;IAwBJ,OAAO;CAKd"}
1
+ {"version":3,"file":"o-os.d.ts","sourceRoot":"","sources":["../../../src/o-olane-os/o-os.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAK5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,KAAK,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAC3C,qBAAa,OAAQ,SAAQ,OAAO;IAClC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,KAAK,CAAqB;IAC3B,UAAU,EAAE,WAAW,GAAG,IAAI,CAAQ;IACtC,MAAM,EAAG,mBAAmB,CAAC;IACpC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,eAAe,CAAa;IAC7B,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAC7C,WAAW,EAAE,WAAW,GAAG,IAAI,CAAQ;IACvC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;IACpC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAQ;gBAExC,MAAM,EAAE,aAAa;IAKjC,SAAS,IAAI,SAAS,GAAG,WAAW;IAMpC,SAAS,CAAC,MAAM,EAAE,WAAW;IAOvB,OAAO,CAAC,IAAI,EAAE,WAAW;YAiBjB,UAAU;IA4CxB;;;OAGG;YACW,qBAAqB;IA2E7B,iBAAiB;IASjB,UAAU,CAAC,IAAI,EAAE,QAAQ;IAsDzB,aAAa;IAwEnB;;;OAGG;YACW,cAAc;IAsD5B;;;OAGG;YACW,qBAAqB;IAwBnC;;;;OAIG;YACW,oBAAoB;IA4B5B,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG;IASnC,KAAK,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IA0C9D,IAAI;IAwBJ,OAAO;CAKd"}
@@ -16,6 +16,7 @@ import { WorldManagerTool } from '../worlds/world-manager.tool.js';
16
16
  import { AddressBook } from '../address-book/address-book.js';
17
17
  import { MemoryHarness } from '../memory/memory-harness.js';
18
18
  import { CopassVectorStoreTool } from '../vector-store/copass-vector-store.tool.js';
19
+ import { FilesystemTool } from '../tools/filesystem.tool.js';
19
20
  export class OlaneOS extends oObject {
20
21
  constructor(config) {
21
22
  super();
@@ -26,6 +27,7 @@ export class OlaneOS extends oObject {
26
27
  this.worldManager = null;
27
28
  this.addressBook = null;
28
29
  this.memory = null;
30
+ this.filesystemTool = null;
29
31
  this.config = config;
30
32
  }
31
33
  entryNode() {
@@ -285,6 +287,16 @@ export class OlaneOS extends oObject {
285
287
  this.rootLeader.addChildNode(vectorStore);
286
288
  await vectorStore.start();
287
289
  this.logger.debug('Copass vector store started');
290
+ // Filesystem tool — single instance for the entire OS
291
+ this.filesystemTool = new FilesystemTool({
292
+ address: new oAddress('o://fs'),
293
+ leader: this.rootLeader.address,
294
+ parent: this.rootLeader.address,
295
+ _allowNestedAddress: true,
296
+ });
297
+ this.rootLeader.addChildNode(this.filesystemTool);
298
+ await this.filesystemTool.start();
299
+ this.logger.debug('Filesystem tool started');
288
300
  // World manager
289
301
  this.worldManager = new WorldManagerTool({
290
302
  leader: this.rootLeader.address,
@@ -3,8 +3,8 @@ import { oLaneTool } from '@olane/o-lane';
3
3
  import { oRequest } from '@olane/o-core';
4
4
  import type { ToolResult } from '@olane/o-tool';
5
5
  /**
6
- * FilesystemTool — an oLaneTool that provides scoped filesystem access
7
- * for a world. Each world gets its own FilesystemTool as a child node.
6
+ * FilesystemTool — an oLaneTool that provides scoped filesystem access.
7
+ * A single instance exists per OS at o://fs, shared across all worlds.
8
8
  *
9
9
  * The tool maintains a list of allowed directory paths (addresses).
10
10
  * All file operations are restricted to these directories.
@@ -2,8 +2,8 @@ import { oLaneTool } from '@olane/o-lane';
2
2
  import { readFile, readdir, stat, access } from 'fs/promises';
3
3
  import * as path from 'path';
4
4
  /**
5
- * FilesystemTool — an oLaneTool that provides scoped filesystem access
6
- * for a world. Each world gets its own FilesystemTool as a child node.
5
+ * FilesystemTool — an oLaneTool that provides scoped filesystem access.
6
+ * A single instance exists per OS at o://fs, shared across all worlds.
7
7
  *
8
8
  * The tool maintains a list of allowed directory paths (addresses).
9
9
  * All file operations are restricted to these directories.
@@ -2,20 +2,19 @@ import { oNodeConfig } from '@olane/o-node';
2
2
  import { oLaneTool } from '@olane/o-lane';
3
3
  import { oRequest } from '@olane/o-core';
4
4
  import type { ToolResult } from '@olane/o-tool';
5
- import { FilesystemTool } from '../tools/filesystem.tool.js';
6
5
  import type { WorldConfig, WorldAddressEntry, WorldSupportedType } from './world.types.js';
7
6
  /**
8
7
  * A world instance node — hub for addresses of a given world.
9
8
  * Registered as a child of the WorldManagerTool at o://world-manager/{world-name}.
10
9
  *
11
- * Each world instance owns a FilesystemTool child that provides scoped
12
- * filesystem access to the directories (addresses) registered with it.
10
+ * Uses the shared OS-level FilesystemTool for scoped filesystem access
11
+ * to the directories (addresses) registered with it.
13
12
  */
14
13
  export declare class WorldInstanceTool extends oLaneTool {
15
14
  private worldConfig;
16
15
  private addresses;
17
16
  private persistPath;
18
- filesystemTool: FilesystemTool | null;
17
+ private fsAddress;
19
18
  constructor(nodeConfig: oNodeConfig, worldConfig: WorldConfig, persistPath?: string);
20
19
  get world(): WorldConfig;
21
20
  start(): Promise<void>;
@@ -23,6 +22,7 @@ export declare class WorldInstanceTool extends oLaneTool {
23
22
  _tool_remove_address(request: oRequest): Promise<ToolResult>;
24
23
  _tool_list_addresses(request: oRequest): Promise<ToolResult>;
25
24
  _tool_get_world_info(_request: oRequest): Promise<ToolResult>;
25
+ _tool_ping_address(request: oRequest): Promise<ToolResult>;
26
26
  getAddresses(type?: WorldSupportedType): WorldAddressEntry[];
27
27
  private loadAddresses;
28
28
  persistAddresses(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"world-instance.tool.d.ts","sourceRoot":"","sources":["../../../src/worlds/world-instance.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAY,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAQ1B;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,SAAS;IAC9C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,WAAW,CAAqB;IACjC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAQ;gBAGlD,UAAU,EAAE,WAAW,EACvB,WAAW,EAAE,WAAW,EACxB,WAAW,CAAC,EAAE,MAAM;IA2CtB,IAAI,KAAK,IAAI,WAAW,CAEvB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBtB,sBAAsB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAkC9D,oBAAoB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAkB5D,oBAAoB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ5D,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAWnE,YAAY,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,EAAE;YAO9C,aAAa;IAcrB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CASxC"}
1
+ {"version":3,"file":"world-instance.tool.d.ts","sourceRoot":"","sources":["../../../src/worlds/world-instance.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAY,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAQ1B;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,SAAS;IAC9C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,SAAS,CAA0B;gBAGzC,UAAU,EAAE,WAAW,EACvB,WAAW,EAAE,WAAW,EACxB,WAAW,CAAC,EAAE,MAAM;IAmDtB,IAAI,KAAK,IAAI,WAAW,CAEvB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBtB,sBAAsB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAuC9D,oBAAoB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAkB5D,oBAAoB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ5D,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAU7D,kBAAkB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAgChE,YAAY,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,EAAE;YAO9C,aAAa;IAcrB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CASxC"}
@@ -1,6 +1,5 @@
1
1
  import { oLaneTool } from '@olane/o-lane';
2
2
  import { oAddress } from '@olane/o-core';
3
- import { FilesystemTool } from '../tools/filesystem.tool.js';
4
3
  import { readFile, writeFile, mkdir, access } from 'fs/promises';
5
4
  import * as path from 'path';
6
5
  async function pathExists(p) {
@@ -16,8 +15,8 @@ async function pathExists(p) {
16
15
  * A world instance node — hub for addresses of a given world.
17
16
  * Registered as a child of the WorldManagerTool at o://world-manager/{world-name}.
18
17
  *
19
- * Each world instance owns a FilesystemTool child that provides scoped
20
- * filesystem access to the directories (addresses) registered with it.
18
+ * Uses the shared OS-level FilesystemTool for scoped filesystem access
19
+ * to the directories (addresses) registered with it.
21
20
  */
22
21
  export class WorldInstanceTool extends oLaneTool {
23
22
  constructor(nodeConfig, worldConfig, persistPath) {
@@ -56,10 +55,18 @@ export class WorldInstanceTool extends oLaneTool {
56
55
  parameters: [],
57
56
  dependencies: [],
58
57
  },
58
+ ping_address: {
59
+ name: 'ping_address',
60
+ description: 'Ping a registered address to verify the underlying resource still exists',
61
+ parameters: [
62
+ { name: 'address', type: 'string', required: true, description: 'The registered address to ping' },
63
+ ],
64
+ dependencies: [],
65
+ },
59
66
  },
60
67
  });
61
68
  this.addresses = [];
62
- this.filesystemTool = null;
69
+ this.fsAddress = new oAddress('o://fs');
63
70
  this.worldConfig = worldConfig;
64
71
  this.persistPath = persistPath;
65
72
  }
@@ -69,19 +76,13 @@ export class WorldInstanceTool extends oLaneTool {
69
76
  async start() {
70
77
  await super.start();
71
78
  await this.loadAddresses();
72
- // Create the FilesystemTool child node scoped to this world's filepath addresses
79
+ // Sync existing filepath addresses to the shared OS-level FilesystemTool
73
80
  const filepathAddresses = this.addresses
74
81
  .filter((a) => a.type === 'filepath')
75
82
  .map((a) => a.address);
76
- const slug = this.worldConfig.name.toLowerCase().replace(/[^a-z0-9-]/g, '-');
77
- this.filesystemTool = new FilesystemTool({
78
- address: new oAddress(`o://world-manager/${slug}/fs`),
79
- leader: this.leader,
80
- parent: this.address,
81
- _allowNestedAddress: true,
82
- }, filepathAddresses);
83
- this.addChildNode(this.filesystemTool);
84
- await this.filesystemTool.start();
83
+ for (const addr of filepathAddresses) {
84
+ await this.use(this.fsAddress, { method: 'add_path', params: { path: addr } });
85
+ }
85
86
  }
86
87
  // ── Tool methods ───────────────────────────────────────────
87
88
  async _tool_register_address(request) {
@@ -99,6 +100,16 @@ export class WorldInstanceTool extends oLaneTool {
99
100
  error: `Address '${address}' is already registered in world '${this.worldConfig.name}'`,
100
101
  };
101
102
  }
103
+ // Validate and register with o://fs BEFORE storing
104
+ if (type === 'filepath') {
105
+ const fsResult = await this.use(this.fsAddress, { method: 'add_path', params: { path: address } });
106
+ if (!fsResult.result?.success) {
107
+ return {
108
+ success: false,
109
+ error: fsResult.result?.error || `Address '${address}' does not exist or is not a valid directory`,
110
+ };
111
+ }
112
+ }
102
113
  const entry = {
103
114
  address,
104
115
  type,
@@ -106,10 +117,6 @@ export class WorldInstanceTool extends oLaneTool {
106
117
  metadata,
107
118
  };
108
119
  this.addresses.push(entry);
109
- // Sync filepath to the FilesystemTool
110
- if (type === 'filepath' && this.filesystemTool) {
111
- await this.filesystemTool._tool_add_path({ params: { path: address } });
112
- }
113
120
  await this.persistAddresses();
114
121
  return { success: true };
115
122
  }
@@ -121,8 +128,8 @@ export class WorldInstanceTool extends oLaneTool {
121
128
  const removed = this.addresses.length < before;
122
129
  if (removed) {
123
130
  // Unsync from FilesystemTool
124
- if (entry?.type === 'filepath' && this.filesystemTool) {
125
- await this.filesystemTool._tool_remove_path({ params: { path: address } });
131
+ if (entry?.type === 'filepath') {
132
+ await this.use(this.fsAddress, { method: 'remove_path', params: { path: address } });
126
133
  }
127
134
  await this.persistAddresses();
128
135
  }
@@ -136,13 +143,41 @@ export class WorldInstanceTool extends oLaneTool {
136
143
  return { success: true, addresses: filtered };
137
144
  }
138
145
  async _tool_get_world_info(_request) {
146
+ const fsResponse = await this.use(this.fsAddress, { method: 'list_paths' });
139
147
  return {
140
148
  success: true,
141
149
  config: this.worldConfig,
142
150
  addressCount: this.addresses.length,
143
- filesystemPaths: this.filesystemTool?.getAllowedPaths() || [],
151
+ filesystemPaths: fsResponse.result?.paths || [],
144
152
  };
145
153
  }
154
+ async _tool_ping_address(request) {
155
+ const { address } = request.params;
156
+ const entry = this.addresses.find((a) => a.address === address);
157
+ if (!entry) {
158
+ return { success: false, error: `Address '${address}' is not registered in this world` };
159
+ }
160
+ if (entry.type === 'filepath') {
161
+ const fsResult = await this.use(this.fsAddress, { method: 'stat_path', params: { path: entry.address } });
162
+ if (!fsResult.result?.success) {
163
+ return {
164
+ success: false,
165
+ address: entry.address,
166
+ type: entry.type,
167
+ error: fsResult.result?.error || 'Resource not reachable',
168
+ };
169
+ }
170
+ return {
171
+ success: true,
172
+ address: entry.address,
173
+ type: entry.type,
174
+ isDirectory: fsResult.result.isDirectory,
175
+ size: fsResult.result.size,
176
+ modified: fsResult.result.modified,
177
+ };
178
+ }
179
+ return { success: false, error: `Ping not supported for type '${entry.type}'` };
180
+ }
146
181
  // ── Convenience accessors ─────────────────────────────────
147
182
  getAddresses(type) {
148
183
  if (type)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@olane/os",
3
- "version": "0.8.17",
3
+ "version": "0.8.18",
4
4
  "type": "module",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/src/index.d.ts",
@@ -45,6 +45,7 @@
45
45
  "@typescript-eslint/eslint-plugin": "^8.56.1",
46
46
  "@typescript-eslint/parser": "^8.56.1",
47
47
  "aegir": "^47.0.26",
48
+ "chai": "^6.2.2",
48
49
  "eslint": "^10.0.2",
49
50
  "eslint-config-prettier": "^10.1.8",
50
51
  "eslint-plugin-prettier": "^5.5.5",
@@ -59,23 +60,24 @@
59
60
  },
60
61
  "dependencies": {
61
62
  "@libp2p/circuit-relay-v2": "^4.1.3",
62
- "@olane/o-client-limited": "0.8.17",
63
- "@olane/o-config": "0.8.17",
64
- "@olane/o-core": "0.8.17",
65
- "@olane/o-intelligence": "0.8.17",
66
- "@olane/o-lane": "0.8.17",
67
- "@olane/o-leader": "0.8.17",
68
- "@olane/o-login": "0.8.17",
69
- "@olane/o-protocol": "0.8.17",
70
- "@olane/o-storage": "0.8.17",
71
- "@olane/o-tool": "0.8.17",
72
- "@olane/o-tool-registry": "0.8.17",
73
- "@olane/o-tools-common": "0.8.17",
63
+ "@olane/o-client-limited": "0.8.18",
64
+ "@olane/o-config": "0.8.18",
65
+ "@olane/o-core": "0.8.18",
66
+ "@olane/o-intelligence": "0.8.18",
67
+ "@olane/o-lane": "0.8.18",
68
+ "@olane/o-leader": "0.8.18",
69
+ "@olane/o-login": "0.8.18",
70
+ "@olane/o-node": "0.8.18",
71
+ "@olane/o-protocol": "0.8.18",
72
+ "@olane/o-storage": "0.8.18",
73
+ "@olane/o-tool": "0.8.18",
74
+ "@olane/o-tool-registry": "0.8.18",
75
+ "@olane/o-tools-common": "0.8.18",
74
76
  "chalk": "^5.6.2",
75
77
  "debug": "^4.4.3",
76
78
  "dotenv": "^17.3.1",
77
79
  "fs-extra": "^11.3.3",
78
80
  "touch": "^3.1.1"
79
81
  },
80
- "gitHead": "848be12a374d32f799026feecf15ada6bcf753ff"
82
+ "gitHead": "53fd92e7eeb02ce0a4713fe7ec1aeaba2b240abb"
81
83
  }