@resourcexjs/arp 2.5.0 → 2.5.1

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/README.md CHANGED
@@ -1,16 +1,18 @@
1
1
  # @resourcexjs/arp
2
2
 
3
- Agent Resource Protocol - Low-level I/O primitives for ResourceX.
3
+ Agent Resource Protocol (ARP) - A URL protocol for AI agents to access resources.
4
4
 
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
8
  bun add @resourcexjs/arp
9
+ # or
10
+ npm install @resourcexjs/arp
9
11
  ```
10
12
 
11
13
  ## Overview
12
14
 
13
- ARP (Agent Resource Protocol) provides a URL-based abstraction layer for resource I/O operations.
15
+ ARP provides a unified URL-based abstraction for resource I/O operations. It separates **what** a resource means (semantic) from **where** and **how** to access it (transport).
14
16
 
15
17
  ### URL Format
16
18
 
@@ -18,200 +20,251 @@ ARP (Agent Resource Protocol) provides a URL-based abstraction layer for resourc
18
20
  arp:{semantic}:{transport}://{location}
19
21
  ```
20
22
 
21
- - **semantic**: Content interpretation (text, binary)
22
- - **transport**: Storage backend (file, http, https)
23
- - **location**: Resource location (path, URL)
23
+ | Component | Description | Examples |
24
+ | ----------- | ---------------------- | ----------------------------------- |
25
+ | `semantic` | Content interpretation | `text`, `binary` |
26
+ | `transport` | Storage backend | `file`, `http`, `https` |
27
+ | `location` | Resource path | `/path/to/file`, `example.com/data` |
24
28
 
25
- ### Examples
29
+ ### Example URLs
26
30
 
27
31
  ```
28
- arp:text:file://~/data.txt
29
- arp:binary:https://example.com/image.png
32
+ arp:text:file:///path/to/file.txt # Absolute file path
33
+ arp:text:file://./relative/file.txt # Relative file path
34
+ arp:binary:https://example.com/image.png # HTTPS resource
35
+ arp:text:http://localhost:3000/data # HTTP resource
30
36
  ```
31
37
 
32
- ### Built-in Handlers
33
-
34
- **createARP()** auto-registers standard protocol handlers:
35
-
36
- **Transports:**
37
-
38
- - `file` - Local filesystem (read-write)
39
- - `http`, `https` - Network resources (read-only)
40
-
41
- > **Note:** For `rxr` transport (ResourceX-specific), use `resourcexjs/arp` instead.
42
- > The main package provides an enhanced `createARP()` that includes RxrTransport.
43
-
44
- **Semantics:**
45
-
46
- - `text` - UTF-8 text -> string
47
- - `binary` - Raw bytes -> Buffer
48
-
49
- ## Usage
50
-
51
- ### Basic Operations
38
+ ## Quick Start
52
39
 
53
40
  ```typescript
54
41
  import { createARP } from "@resourcexjs/arp";
55
42
 
56
43
  const arp = createARP();
57
44
 
58
- // Parse ARP URL
45
+ // Parse ARP URL into ARL (Agent Resource Locator)
59
46
  const arl = arp.parse("arp:text:file://./data.txt");
60
47
 
61
- // Read
62
- const resource = await arl.resolve();
63
- console.log(resource.content); // string (text semantic)
64
-
65
- // Write
66
- await arl.deposit("Hello, World!");
48
+ // Core operations
49
+ await arl.deposit("Hello, World!"); // Write
50
+ const resource = await arl.resolve(); // Read
51
+ console.log(resource.content); // "Hello, World!"
67
52
 
68
- // Check existence
69
53
  if (await arl.exists()) {
70
- console.log("File exists");
54
+ // Check existence
55
+ await arl.delete(); // Delete
71
56
  }
72
-
73
- // Delete
74
- await arl.delete();
75
57
  ```
76
58
 
77
- ### Text Semantic
59
+ ## Core Concepts
78
60
 
79
- ```typescript
80
- const arl = arp.parse("arp:text:file://./hello.txt");
61
+ ### ARI vs ARL
81
62
 
82
- // Write text
83
- await arl.deposit("Hello, World!");
63
+ - **ARI (Agent Resource Identifier)**: Identifies resource type (semantic + transport)
64
+ - **ARL (Agent Resource Locator)**: Full locator with operations (semantic + transport + location)
84
65
 
85
- // Read text
86
- const resource = await arl.resolve();
87
- console.log(resource.content); // "Hello, World!" (string)
66
+ ```typescript
67
+ interface ARI {
68
+ readonly semantic: string;
69
+ readonly transport: string;
70
+ }
71
+
72
+ interface ARL extends ARI {
73
+ readonly location: string;
74
+ resolve(params?): Promise<Resource>;
75
+ deposit(data, params?): Promise<void>;
76
+ exists(): Promise<boolean>;
77
+ delete(): Promise<void>;
78
+ list(options?): Promise<string[]>;
79
+ mkdir(): Promise<void>;
80
+ toString(): string;
81
+ }
88
82
  ```
89
83
 
90
- ### Binary Semantic
84
+ ### Resource
91
85
 
92
- ```typescript
93
- const arl = arp.parse("arp:binary:file://./data.bin");
86
+ The result of `arl.resolve()`:
94
87
 
95
- // Write binary
96
- const buffer = Buffer.from([1, 2, 3, 4]);
97
- await arl.deposit(buffer);
88
+ ```typescript
89
+ interface Resource<T = unknown> {
90
+ type: string; // Semantic type ("text", "binary")
91
+ content: T; // Content (string for text, Buffer for binary)
92
+ meta: ResourceMeta; // Metadata
93
+ }
98
94
 
99
- // Read binary
100
- const resource = await arl.resolve();
101
- console.log(resource.content); // Buffer
95
+ interface ResourceMeta {
96
+ url: string; // Original ARP URL
97
+ semantic: string;
98
+ transport: string;
99
+ location: string;
100
+ size: number;
101
+ encoding?: string; // e.g., "utf-8" for text
102
+ mimeType?: string;
103
+ resolvedAt: string; // ISO timestamp
104
+ type?: "file" | "directory";
105
+ }
102
106
  ```
103
107
 
104
- ## API Reference
108
+ ## Built-in Handlers
105
109
 
106
- ### `createARP(config?)`
110
+ `createARP()` automatically registers standard handlers:
107
111
 
108
- Create ARP instance with registered handlers.
112
+ ### Transports
109
113
 
110
- **Parameters:**
114
+ | Name | Description | Read | Write | Exists | Delete | List | Mkdir |
115
+ | ------- | ---------------- | ---- | ----- | ------ | ------ | ---- | ----- |
116
+ | `file` | Local filesystem | Yes | Yes | Yes | Yes | Yes | Yes |
117
+ | `http` | HTTP resources | Yes | No | Yes | No | No | No |
118
+ | `https` | HTTPS resources | Yes | No | Yes | No | No | No |
111
119
 
112
- - `config?: ARPConfig` - Optional configuration
120
+ ### Semantics
113
121
 
114
- **Returns**: `ARP`
122
+ | Name | Input Type | Output Type | Description |
123
+ | -------- | ------------------------------------------------- | ----------- | ------------------ |
124
+ | `text` | `string` | `string` | UTF-8 text content |
125
+ | `binary` | `Buffer`, `Uint8Array`, `ArrayBuffer`, `number[]` | `Buffer` | Raw binary data |
115
126
 
116
- ```typescript
117
- const arp = createARP();
118
- ```
127
+ ## API Reference
119
128
 
120
- ### `ARP.parse(url: string): ARL`
129
+ ### `createARP(config?): ARP`
121
130
 
122
- Parse ARP URL and return ARL (Agent Resource Locator).
131
+ Create an ARP instance.
123
132
 
124
- **Parameters:**
133
+ ```typescript
134
+ interface ARPConfig {
135
+ transports?: TransportHandler[]; // Custom transports
136
+ semantics?: SemanticHandler[]; // Custom semantics
137
+ }
125
138
 
126
- - `url: string` - ARP URL
139
+ const arp = createARP();
127
140
 
128
- **Returns**: `ARL`
141
+ // With custom handlers
142
+ const arp = createARP({
143
+ transports: [myTransport],
144
+ semantics: [mySemantic],
145
+ });
146
+ ```
147
+
148
+ ### `arp.parse(url): ARL`
129
149
 
130
- **Throws**: `ParseError` if URL is invalid
150
+ Parse an ARP URL string into an ARL object.
131
151
 
132
152
  ```typescript
133
153
  const arl = arp.parse("arp:text:file://./data.txt");
154
+
155
+ console.log(arl.semantic); // "text"
156
+ console.log(arl.transport); // "file"
157
+ console.log(arl.location); // "./data.txt"
158
+ console.log(arl.toString()); // "arp:text:file://./data.txt"
134
159
  ```
135
160
 
136
- ### `ARP.registerTransport(transport: TransportHandler): void`
161
+ **Throws**: `ParseError` if URL format is invalid
162
+
163
+ ### `arp.registerTransport(handler): void`
137
164
 
138
165
  Register a custom transport handler.
139
166
 
140
167
  ```typescript
141
- arp.registerTransport(new S3Transport());
168
+ arp.registerTransport(myTransportHandler);
142
169
  ```
143
170
 
144
- ### `ARP.registerSemantic(semantic: SemanticHandler): void`
171
+ ### `arp.registerSemantic(handler): void`
145
172
 
146
173
  Register a custom semantic handler.
147
174
 
148
175
  ```typescript
149
- arp.registerSemantic(new JsonSemantic());
176
+ arp.registerSemantic(mySemanticHandler);
150
177
  ```
151
178
 
152
179
  ### ARL Operations
153
180
 
154
- #### `resolve(params?): Promise<Resource>`
181
+ #### `arl.resolve(params?): Promise<Resource>`
155
182
 
156
183
  Read resource from location.
157
184
 
158
- **Parameters:**
185
+ ```typescript
186
+ const resource = await arl.resolve();
187
+ console.log(resource.type); // "text"
188
+ console.log(resource.content); // string or Buffer
189
+ console.log(resource.meta); // ResourceMeta
190
+ ```
159
191
 
160
- - `params?: TransportParams` - Optional parameters passed to transport
192
+ **Params**: `TransportParams` - Key-value pairs passed to transport
161
193
 
162
- **Returns**: `Promise<Resource>`
194
+ ```typescript
195
+ // Pass parameters to transport
196
+ const resource = await arl.resolve({
197
+ recursive: "true",
198
+ pattern: "*.json",
199
+ });
200
+ ```
163
201
 
164
- - `{ content: string }` for text semantic
165
- - `{ content: Buffer }` for binary semantic
202
+ #### `arl.deposit(data, params?): Promise<void>`
166
203
 
167
- **Throws**: `TransportError` if operation fails
204
+ Write data to location.
168
205
 
169
206
  ```typescript
170
- const resource = await arl.resolve();
171
- console.log(resource.content);
207
+ // Text semantic
208
+ await arl.deposit("Hello, World!");
209
+
210
+ // Binary semantic
211
+ await arl.deposit(Buffer.from([0x48, 0x69]));
212
+ await arl.deposit(new Uint8Array([1, 2, 3]));
213
+ await arl.deposit([1, 2, 3, 4]); // number array
172
214
  ```
173
215
 
174
- #### `deposit(data: unknown, params?): Promise<void>`
216
+ **Throws**: `SemanticError` if semantic doesn't support deposit
175
217
 
176
- Write resource to location.
218
+ #### `arl.exists(): Promise<boolean>`
177
219
 
178
- **Parameters:**
220
+ Check if resource exists.
221
+
222
+ ```typescript
223
+ if (await arl.exists()) {
224
+ console.log("Resource exists");
225
+ }
226
+ ```
179
227
 
180
- - `data: unknown` - Content to write (string, Buffer, Uint8Array, ArrayBuffer, number[])
181
- - `params?: TransportParams` - Optional parameters passed to transport
228
+ #### `arl.delete(): Promise<void>`
182
229
 
183
- **Throws**: `TransportError` if operation fails
230
+ Delete resource at location.
184
231
 
185
232
  ```typescript
186
- await arl.deposit("Hello");
187
- await arl.deposit(Buffer.from([1, 2, 3]));
233
+ await arl.delete();
188
234
  ```
189
235
 
190
- #### `exists(): Promise<boolean>`
191
-
192
- Check if resource exists.
236
+ #### `arl.list(options?): Promise<string[]>`
193
237
 
194
- **Returns**: `Promise<boolean>`
238
+ List directory contents (file transport only).
195
239
 
196
240
  ```typescript
197
- if (await arl.exists()) {
198
- console.log("Resource exists");
241
+ interface ListOptions {
242
+ recursive?: boolean; // List subdirectories
243
+ pattern?: string; // Glob pattern filter (e.g., "*.json")
199
244
  }
245
+
246
+ const arl = arp.parse("arp:text:file://./my-dir");
247
+ const files = await arl.list(); // ["file1.txt", "file2.txt"]
248
+ const all = await arl.list({ recursive: true }); // ["sub/file.txt", ...]
249
+ const json = await arl.list({ pattern: "*.json" }); // ["config.json", ...]
200
250
  ```
201
251
 
202
- #### `delete(): Promise<void>`
252
+ **Throws**: `TransportError` if transport doesn't support list
203
253
 
204
- Delete resource from location.
254
+ #### `arl.mkdir(): Promise<void>`
205
255
 
206
- **Throws**: `TransportError` if operation fails
256
+ Create directory (file transport only).
207
257
 
208
258
  ```typescript
209
- await arl.delete();
259
+ const arl = arp.parse("arp:text:file://./new-dir");
260
+ await arl.mkdir();
210
261
  ```
211
262
 
263
+ **Throws**: `TransportError` if transport doesn't support mkdir
264
+
212
265
  ## Transport Handlers
213
266
 
214
- Transport handlers implement a unified interface:
267
+ ### Interface
215
268
 
216
269
  ```typescript
217
270
  interface TransportHandler {
@@ -220,6 +273,8 @@ interface TransportHandler {
220
273
  set(location: string, content: Buffer, params?: TransportParams): Promise<void>;
221
274
  exists(location: string): Promise<boolean>;
222
275
  delete(location: string): Promise<void>;
276
+ list?(location: string, options?: ListOptions): Promise<string[]>;
277
+ mkdir?(location: string): Promise<void>;
223
278
  }
224
279
 
225
280
  type TransportParams = Record<string, string>;
@@ -230,82 +285,126 @@ interface TransportResult {
230
285
  type?: "file" | "directory";
231
286
  size?: number;
232
287
  modifiedAt?: Date;
288
+ [key: string]: unknown;
233
289
  };
234
290
  }
235
291
  ```
236
292
 
237
- ### File Transport (`file`)
293
+ ### File Transport
238
294
 
239
- Local filesystem operations.
295
+ Local filesystem operations with full read-write support.
240
296
 
241
297
  ```typescript
242
- // Absolute path
243
- arp.parse("arp:text:file:///absolute/path/file.txt");
244
-
245
- // Relative path
246
- arp.parse("arp:text:file://./relative/path/file.txt");
247
-
248
- // Home directory
249
- arp.parse("arp:text:file://~/file.txt");
298
+ // Paths
299
+ arp.parse("arp:text:file:///absolute/path.txt"); // Absolute
300
+ arp.parse("arp:text:file://./relative/path.txt"); // Relative to cwd
301
+
302
+ // Directory operations
303
+ const dir = arp.parse("arp:text:file://./my-dir");
304
+ await dir.mkdir(); // Create directory
305
+ const files = await dir.list({ recursive: true }); // List recursively
250
306
  ```
251
307
 
252
- **Operations:**
253
-
254
- - get (read file)
255
- - set (write file)
256
- - exists (check file)
257
- - delete (remove file)
258
-
259
308
  ### HTTP/HTTPS Transport
260
309
 
261
- Network resource operations (read-only).
310
+ Read-only network resource access.
262
311
 
263
312
  ```typescript
264
- arp.parse("arp:text:https://example.com/data.txt");
265
- arp.parse("arp:binary:https://example.com/image.png");
266
- ```
313
+ const arl = arp.parse("arp:text:https://example.com/data.txt");
267
314
 
268
- **Operations:**
315
+ // Read
316
+ const resource = await arl.resolve();
269
317
 
270
- - get (read) - supported
271
- - set (write) - throws error
272
- - exists - not supported
273
- - delete - throws error
318
+ // Check existence (HEAD request)
319
+ const exists = await arl.exists();
320
+
321
+ // Query parameters
322
+ const arl2 = arp.parse("arp:text:https://api.example.com/data?format=json");
323
+ const resource2 = await arl2.resolve({ token: "abc123" }); // Merges params
324
+ ```
325
+
326
+ **Note**: `set`, `delete`, `list`, `mkdir` throw `TransportError`
274
327
 
275
328
  ## Semantic Handlers
276
329
 
330
+ ### Interface
331
+
277
332
  ```typescript
278
- interface SemanticHandler {
333
+ interface SemanticHandler<T = unknown> {
279
334
  readonly name: string;
280
- encode(data: unknown): Promise<Buffer>;
281
- decode(buffer: Buffer): Promise<unknown>;
335
+ resolve(
336
+ transport: TransportHandler,
337
+ location: string,
338
+ context: SemanticContext
339
+ ): Promise<Resource<T>>;
340
+ deposit?(
341
+ transport: TransportHandler,
342
+ location: string,
343
+ data: T,
344
+ context: SemanticContext
345
+ ): Promise<void>;
346
+ exists?(
347
+ transport: TransportHandler,
348
+ location: string,
349
+ context: SemanticContext
350
+ ): Promise<boolean>;
351
+ delete?(transport: TransportHandler, location: string, context: SemanticContext): Promise<void>;
352
+ }
353
+
354
+ interface SemanticContext {
355
+ url: string;
356
+ semantic: string;
357
+ transport: string;
358
+ location: string;
359
+ timestamp: Date;
360
+ params?: TransportParams;
282
361
  }
283
362
  ```
284
363
 
285
- ### Text Semantic (`text`)
364
+ ### Text Semantic
365
+
366
+ UTF-8 text handling.
367
+
368
+ ```typescript
369
+ const arl = arp.parse("arp:text:file://./hello.txt");
370
+
371
+ await arl.deposit("Hello, World!");
372
+
373
+ const resource = await arl.resolve();
374
+ // resource.type = "text"
375
+ // resource.content = "Hello, World!" (string)
376
+ // resource.meta.encoding = "utf-8"
377
+ // resource.meta.mimeType = "text/plain"
378
+ ```
286
379
 
287
- Interprets content as UTF-8 text.
380
+ ### Binary Semantic
288
381
 
289
- - **Input**: `string` or `Buffer`
290
- - **Output**: `string`
382
+ Raw binary data handling.
291
383
 
292
- ### Binary Semantic (`binary`)
384
+ ```typescript
385
+ const arl = arp.parse("arp:binary:file://./data.bin");
293
386
 
294
- Interprets content as raw bytes.
387
+ // Multiple input types supported
388
+ await arl.deposit(Buffer.from([1, 2, 3, 4]));
389
+ await arl.deposit(new Uint8Array([1, 2, 3, 4]));
390
+ await arl.deposit(new ArrayBuffer(4));
391
+ await arl.deposit([1, 2, 3, 4]); // number[]
295
392
 
296
- - **Input**: `Buffer` or `string`
297
- - **Output**: `Buffer`
393
+ const resource = await arl.resolve();
394
+ // resource.type = "binary"
395
+ // resource.content = Buffer
396
+ ```
298
397
 
299
398
  ## Error Handling
300
399
 
301
400
  ```typescript
302
- import { ParseError, TransportError, SemanticError } from "@resourcexjs/arp";
401
+ import { ARPError, ParseError, TransportError, SemanticError } from "@resourcexjs/arp";
303
402
 
304
403
  try {
305
- const arl = arp.parse("arp:invalid:url");
404
+ const arl = arp.parse("invalid-url");
306
405
  } catch (error) {
307
406
  if (error instanceof ParseError) {
308
- console.error("Invalid ARP URL");
407
+ console.error("Invalid ARP URL:", error.url);
309
408
  }
310
409
  }
311
410
 
@@ -313,17 +412,22 @@ try {
313
412
  await arl.resolve();
314
413
  } catch (error) {
315
414
  if (error instanceof TransportError) {
316
- console.error("Transport operation failed");
415
+ console.error("Transport failed:", error.transport);
416
+ }
417
+ if (error instanceof SemanticError) {
418
+ console.error("Semantic failed:", error.semantic);
317
419
  }
318
420
  }
319
421
  ```
320
422
 
321
- ### Error Types
423
+ ### Error Hierarchy
322
424
 
323
- - **ARPError**: Base error class
324
- - **ParseError**: Invalid ARP URL format
325
- - **TransportError**: Transport operation failed
326
- - **SemanticError**: Semantic handler error
425
+ ```
426
+ ARPError (base)
427
+ ├── ParseError - Invalid ARP URL format
428
+ ├── TransportError - Transport operation failed
429
+ └── SemanticError - Semantic operation failed
430
+ ```
327
431
 
328
432
  ## Examples
329
433
 
@@ -333,32 +437,42 @@ try {
333
437
  const source = arp.parse("arp:binary:file://./source.bin");
334
438
  const dest = arp.parse("arp:binary:file://./dest.bin");
335
439
 
336
- // Read from source
337
440
  const { content } = await source.resolve();
338
-
339
- // Write to destination
340
441
  await dest.deposit(content);
341
442
  ```
342
443
 
343
444
  ### Download and Save
344
445
 
345
446
  ```typescript
346
- // Download from URL
347
447
  const remote = arp.parse("arp:text:https://example.com/data.txt");
348
- const { content } = await remote.resolve();
349
-
350
- // Save locally
351
448
  const local = arp.parse("arp:text:file://./downloaded.txt");
449
+
450
+ const { content } = await remote.resolve();
352
451
  await local.deposit(content);
353
452
  ```
354
453
 
355
454
  ### Conditional Write
356
455
 
357
456
  ```typescript
358
- const arl = arp.parse("arp:text:file://./file.txt");
457
+ const arl = arp.parse("arp:text:file://./config.txt");
359
458
 
360
459
  if (!(await arl.exists())) {
361
- await arl.deposit("New content");
460
+ await arl.deposit("default config");
461
+ }
462
+ ```
463
+
464
+ ### Process Directory
465
+
466
+ ```typescript
467
+ const dir = arp.parse("arp:text:file://./data");
468
+
469
+ // List all JSON files recursively
470
+ const files = await dir.list({ recursive: true, pattern: "*.json" });
471
+
472
+ for (const file of files) {
473
+ const fileArl = arp.parse(`arp:text:file://./data/${file}`);
474
+ const { content } = await fileArl.resolve();
475
+ console.log(`${file}: ${content.length} chars`);
362
476
  }
363
477
  ```
364
478
 
@@ -367,26 +481,32 @@ if (!(await arl.exists())) {
367
481
  ### Custom Transport
368
482
 
369
483
  ```typescript
370
- import type { TransportHandler, TransportParams, TransportResult } from "@resourcexjs/arp";
484
+ import type { TransportHandler, TransportResult, TransportParams } from "@resourcexjs/arp";
371
485
 
372
486
  class S3Transport implements TransportHandler {
373
487
  readonly name = "s3";
374
488
 
375
489
  async get(location: string, params?: TransportParams): Promise<TransportResult> {
376
- const data = await s3.getObject({ Bucket: "...", Key: location });
490
+ // location format: "bucket-name/key/path"
491
+ const [bucket, ...keyParts] = location.split("/");
492
+ const key = keyParts.join("/");
493
+
494
+ const data = await s3.getObject({ Bucket: bucket, Key: key });
377
495
  return {
378
- content: data.Body as Buffer,
496
+ content: Buffer.from(await data.Body!.transformToByteArray()),
379
497
  metadata: { type: "file", size: data.ContentLength },
380
498
  };
381
499
  }
382
500
 
383
501
  async set(location: string, content: Buffer, params?: TransportParams): Promise<void> {
384
- await s3.putObject({ Bucket: "...", Key: location, Body: content });
502
+ const [bucket, ...keyParts] = location.split("/");
503
+ await s3.putObject({ Bucket: bucket, Key: keyParts.join("/"), Body: content });
385
504
  }
386
505
 
387
506
  async exists(location: string): Promise<boolean> {
388
507
  try {
389
- await s3.headObject({ Bucket: "...", Key: location });
508
+ const [bucket, ...keyParts] = location.split("/");
509
+ await s3.headObject({ Bucket: bucket, Key: keyParts.join("/") });
390
510
  return true;
391
511
  } catch {
392
512
  return false;
@@ -394,44 +514,74 @@ class S3Transport implements TransportHandler {
394
514
  }
395
515
 
396
516
  async delete(location: string): Promise<void> {
397
- await s3.deleteObject({ Bucket: "...", Key: location });
517
+ const [bucket, ...keyParts] = location.split("/");
518
+ await s3.deleteObject({ Bucket: bucket, Key: keyParts.join("/") });
398
519
  }
399
520
  }
400
521
 
401
- // Register
522
+ // Register and use
402
523
  const arp = createARP();
403
524
  arp.registerTransport(new S3Transport());
404
525
 
405
- // Use
406
- const arl = arp.parse("arp:binary:s3://my-bucket/file.bin");
526
+ const arl = arp.parse("arp:binary:s3://my-bucket/path/file.bin");
407
527
  ```
408
528
 
409
529
  ### Custom Semantic
410
530
 
411
531
  ```typescript
412
- import type { SemanticHandler } from "@resourcexjs/arp";
532
+ import type { SemanticHandler, Resource, SemanticContext, ResourceMeta } from "@resourcexjs/arp";
533
+ import type { TransportHandler } from "@resourcexjs/arp";
534
+
535
+ interface JsonResource extends Resource<unknown> {
536
+ type: "json";
537
+ content: unknown;
538
+ }
413
539
 
414
- class JsonSemantic implements SemanticHandler {
540
+ class JsonSemantic implements SemanticHandler<unknown> {
415
541
  readonly name = "json";
416
542
 
417
- async encode(data: unknown): Promise<Buffer> {
418
- const json = JSON.stringify(data, null, 2);
419
- return Buffer.from(json, "utf-8");
543
+ async resolve(
544
+ transport: TransportHandler,
545
+ location: string,
546
+ context: SemanticContext
547
+ ): Promise<JsonResource> {
548
+ const result = await transport.get(location, context.params);
549
+ const text = result.content.toString("utf-8");
550
+ const content = JSON.parse(text);
551
+
552
+ const meta: ResourceMeta = {
553
+ url: context.url,
554
+ semantic: context.semantic,
555
+ transport: context.transport,
556
+ location: context.location,
557
+ size: result.content.length,
558
+ encoding: "utf-8",
559
+ mimeType: "application/json",
560
+ resolvedAt: context.timestamp.toISOString(),
561
+ type: "file",
562
+ };
563
+
564
+ return { type: "json", content, meta };
420
565
  }
421
566
 
422
- async decode(buffer: Buffer): Promise<unknown> {
423
- const text = buffer.toString("utf-8");
424
- return JSON.parse(text);
567
+ async deposit(
568
+ transport: TransportHandler,
569
+ location: string,
570
+ data: unknown,
571
+ context: SemanticContext
572
+ ): Promise<void> {
573
+ const json = JSON.stringify(data, null, 2);
574
+ const buffer = Buffer.from(json, "utf-8");
575
+ await transport.set(location, buffer, context.params);
425
576
  }
426
577
  }
427
578
 
428
- // Register
579
+ // Register and use
429
580
  arp.registerSemantic(new JsonSemantic());
430
581
 
431
- // Use
432
- const arl = arp.parse("arp:json:file://./data.json");
433
- await arl.deposit({ key: "value" });
434
- const { content } = await arl.resolve(); // parsed JSON
582
+ const arl = arp.parse("arp:json:file://./config.json");
583
+ await arl.deposit({ key: "value", nested: { foo: "bar" } });
584
+ const { content } = await arl.resolve(); // parsed object
435
585
  ```
436
586
 
437
587
  ## Exports
@@ -445,12 +595,12 @@ export const VERSION: string;
445
595
  // Errors
446
596
  export { ARPError, ParseError, TransportError, SemanticError };
447
597
 
448
- // Transports
598
+ // Transport
449
599
  export type { TransportHandler, TransportResult, TransportParams, ListOptions };
450
600
  export { FileTransportHandler, fileTransport };
451
601
  export { HttpTransportHandler, httpTransport, httpsTransport };
452
602
 
453
- // Semantics
603
+ // Semantic
454
604
  export type { Resource, SemanticHandler, ResourceMeta, SemanticContext };
455
605
  export type { TextResource, BinaryResource, BinaryInput };
456
606
  export { TextSemanticHandler, textSemantic };
@@ -459,4 +609,4 @@ export { BinarySemanticHandler, binarySemantic };
459
609
 
460
610
  ## License
461
611
 
462
- MIT
612
+ Apache-2.0
package/dist/index.js CHANGED
@@ -518,7 +518,7 @@ function createARP(config) {
518
518
  }
519
519
 
520
520
  // src/index.ts
521
- var VERSION = "2.5.0";
521
+ var VERSION = "2.5.1";
522
522
  export {
523
523
  textSemantic,
524
524
  httpsTransport,
@@ -538,4 +538,4 @@ export {
538
538
  ARP
539
539
  };
540
540
 
541
- //# debugId=2001205EFE0A51C264756E2164756E21
541
+ //# debugId=0ADFAF622CDEDD0E64756E2164756E21
package/dist/index.js.map CHANGED
@@ -12,6 +12,6 @@
12
12
  "/**\n * arpjs - Agent Resource Protocol\n *\n * A URL protocol for AI agents to access resources\n * Format: arp:{semantic}:{transport}://{location}\n */\n\ndeclare const __VERSION__: string | undefined;\nexport const VERSION: string = typeof __VERSION__ !== \"undefined\" ? __VERSION__ : \"0.0.0-dev\";\n\n// Core types\nexport type { ARI, ARL } from \"./types.js\";\n\n// ARP factory and class\nexport { ARP, createARP, type ARPConfig } from \"./ARP.js\";\n\n// Errors\nexport { ARPError, ParseError, TransportError, SemanticError } from \"./errors.js\";\n\n// Transport (standard protocols only; for RXR transport use resourcexjs)\nexport {\n type TransportHandler,\n type TransportResult,\n type TransportParams,\n type ListOptions,\n FileTransportHandler,\n fileTransport,\n HttpTransportHandler,\n httpsTransport,\n httpTransport,\n} from \"./transport/index.js\";\n\n// Semantic\nexport {\n type Resource,\n type SemanticHandler,\n type ResourceMeta,\n type SemanticContext,\n type TextResource,\n type BinaryResource,\n type BinaryInput,\n TextSemanticHandler,\n textSemantic,\n BinarySemanticHandler,\n binarySemantic,\n} from \"./semantic/index.js\";\n"
13
13
  ],
14
14
  "mappings": "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",
15
- "debugId": "2001205EFE0A51C264756E2164756E21",
15
+ "debugId": "0ADFAF622CDEDD0E64756E2164756E21",
16
16
  "names": []
17
17
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resourcexjs/arp",
3
- "version": "2.5.0",
3
+ "version": "2.5.1",
4
4
  "description": "ARP (Agent Resource Protocol) - A URL protocol for AI agents to access resources",
5
5
  "keywords": [
6
6
  "arp",
@@ -14,7 +14,7 @@
14
14
  "url": "git+https://github.com/Deepractice/ResourceX.git",
15
15
  "directory": "packages/arp"
16
16
  },
17
- "license": "MIT",
17
+ "license": "Apache-2.0",
18
18
  "engines": {
19
19
  "node": ">=22.0.0"
20
20
  },