@xuanwo/xurl 0.0.18 → 0.0.19-darwin-x64

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
@@ -9,6 +9,7 @@
9
9
  - Read an agent conversation as markdown.
10
10
  - Query recent threads and keyword matches for a provider.
11
11
  - Discover subagent/branch navigation targets.
12
+ - Read local and GitHub-hosted skills via `skills://` URIs.
12
13
  - Start a new conversation with agents.
13
14
  - Continue an existing conversation with follow-up prompts.
14
15
 
@@ -44,6 +45,8 @@ Read an agent conversation:
44
45
 
45
46
  ```bash
46
47
  xurl agents://codex/019c871c-b1f9-7f60-9c4f-87ed09f13592
48
+ # equivalent shorthand:
49
+ xurl codex/019c871c-b1f9-7f60-9c4f-87ed09f13592
47
50
  ```
48
51
 
49
52
  Query provider threads:
@@ -52,6 +55,9 @@ Query provider threads:
52
55
  xurl agents://codex
53
56
  xurl 'agents://codex?q=spawn_agent'
54
57
  xurl 'agents://claude?q=agent&limit=5'
58
+ # equivalent shorthand:
59
+ xurl codex
60
+ xurl 'codex?q=spawn_agent'
55
61
  ```
56
62
 
57
63
  Discover child targets:
@@ -70,6 +76,8 @@ Start a new agent conversation:
70
76
 
71
77
  ```bash
72
78
  xurl agents://codex -d "Draft a migration plan"
79
+ # equivalent shorthand:
80
+ xurl codex -d "Draft a migration plan"
73
81
  ```
74
82
 
75
83
  Continue an existing conversation:
@@ -81,7 +89,7 @@ xurl agents://codex/019c871c-b1f9-7f60-9c4f-87ed09f13592 -d "Continue"
81
89
  Create with query parameters:
82
90
 
83
91
  ```bash
84
- xurl "agents://codex?workdir=%2FUsers%2Falice%2Frepo&add_dir=%2FUsers%2Falice%2Fshared&model=gpt-5" -d "Review this patch"
92
+ xurl "agents://codex?cd=%2FUsers%2Falice%2Frepo&add-dir=%2FUsers%2Falice%2Fshared&model=gpt-5" -d "Review this patch"
85
93
  ```
86
94
 
87
95
  Save output:
@@ -90,6 +98,24 @@ Save output:
90
98
  xurl -o /tmp/conversation.md agents://codex/019c871c-b1f9-7f60-9c4f-87ed09f13592
91
99
  ```
92
100
 
101
+ Read a local skill:
102
+
103
+ ```bash
104
+ xurl skills://xurl
105
+ ```
106
+
107
+ Read a GitHub skill:
108
+
109
+ ```bash
110
+ xurl skills://github.com/Xuanwo/xurl/skills/xurl
111
+ ```
112
+
113
+ Read skills frontmatter only:
114
+
115
+ ```bash
116
+ xurl -I skills://xurl
117
+ ```
118
+
93
119
  ## Command Reference
94
120
 
95
121
  ```bash
@@ -102,34 +128,43 @@ xurl [OPTIONS] <URI>
102
128
  - file: `-d @prompt.txt`
103
129
  - stdin: `-d @-`
104
130
  - `-o, --output <PATH>`: write command output to file.
131
+ - `-d, --data` is not supported for `skills://` URIs.
105
132
 
106
133
  ## URI Reference
107
134
 
135
+ ### Agents URI
136
+
108
137
  ```text
109
- agents://<provider>[/<conversation_id>[/<child_id>]][?<query>]
138
+ [agents://]<provider>[/<conversation_id>[/<child_id>]][?<query>]
110
139
  |------| |--------| |---------------------------| |------|
111
- scheme provider optional path parts query
140
+ optional provider optional path parts query
141
+ scheme
112
142
  ```
113
143
 
114
- - `scheme`: fixed as `agents`.
144
+ - `scheme`: optional `agents://` prefix. If omitted, `xurl` treats input as an `agents` URI shorthand.
115
145
  - `provider`: target provider name, such as `codex`, `claude`, `gemini`, `amp`, `pi`, `opencode`.
116
146
  - `conversation_id`: main conversation identifier.
117
147
  - `child_id`: child/subagent identifier under a main conversation.
118
148
  - `query`: optional key-value parameters, interpreted by context.
119
149
 
120
-
121
- ### Query
150
+ ### Agents Query
122
151
 
123
152
  - `q=<keyword>`: filters discovery results by keyword. Use when you want to find conversations by topic.
124
153
  - `limit=<n>`: limits discovery result count (default `10`). Use when you need a shorter or longer result list.
125
- - `workdir=<dir>`: sets the initial working directory for create mode. Use when a new conversation should run in a specific project root.
126
- - `add_dir=<dir>`: adds additional directories for create mode (repeatable). Use when a new conversation needs access to multiple directories.
127
- - `<key>=<value>`: passes a custom provider option in create mode. Use when you need provider-specific behavior not covered by standard keys.
154
+ - `<key>=<value>`: in write mode (`-d`), `xurl` forwards as `--<key> <value>` to the provider CLI.
155
+ - `<flag>`: in write mode (`-d`), `xurl` forwards as `--<flag>` to the provider CLI.
128
156
 
129
157
  Examples:
130
158
 
131
159
  ```text
132
160
  agents://codex?q=spawn_agent&limit=10
133
161
  agents://codex/threads/<conversation_id>
134
- agents://codex?workdir=%2FUsers%2Falice%2Frepo
162
+ agents://codex?cd=%2FUsers%2Falice%2Frepo&add-dir=%2FUsers%2Falice%2Fshared
163
+ ```
164
+
165
+ ### Skills URI
166
+
167
+ ```text
168
+ skills://<skill_name>
169
+ skills://github.com/<owner>/<repo>[/<skill_dir>]
135
170
  ```
package/package.json CHANGED
@@ -1,27 +1,21 @@
1
1
  {
2
2
  "name": "@xuanwo/xurl",
3
- "version": "0.0.18",
3
+ "version": "0.0.19-darwin-x64",
4
4
  "license": "Apache-2.0",
5
- "bin": {
6
- "xurl": "bin/xurl.js"
7
- },
8
- "type": "module",
9
- "engines": {
10
- "node": ">=16"
11
- },
5
+ "os": [
6
+ "darwin"
7
+ ],
8
+ "cpu": [
9
+ "x64"
10
+ ],
12
11
  "files": [
13
- "bin"
12
+ "vendor"
14
13
  ],
15
14
  "repository": {
16
15
  "type": "git",
17
16
  "url": "git+https://github.com/Xuanwo/xurl.git"
18
17
  },
19
- "optionalDependencies": {
20
- "@xuanwo/xurl-linux-x64": "npm:@xuanwo/xurl@0.0.18-linux-x64",
21
- "@xuanwo/xurl-linux-arm64": "npm:@xuanwo/xurl@0.0.18-linux-arm64",
22
- "@xuanwo/xurl-darwin-x64": "npm:@xuanwo/xurl@0.0.18-darwin-x64",
23
- "@xuanwo/xurl-darwin-arm64": "npm:@xuanwo/xurl@0.0.18-darwin-arm64",
24
- "@xuanwo/xurl-win32-x64": "npm:@xuanwo/xurl@0.0.18-win32-x64",
25
- "@xuanwo/xurl-win32-arm64": "npm:@xuanwo/xurl@0.0.18-win32-arm64"
18
+ "engines": {
19
+ "node": ">=16"
26
20
  }
27
21
  }
package/bin/xurl.js DELETED
@@ -1,141 +0,0 @@
1
- #!/usr/bin/env node
2
- // Unified entry point for the xurl CLI.
3
-
4
- import { spawn } from "node:child_process";
5
- import { existsSync } from "node:fs";
6
- import { createRequire } from "node:module";
7
- import path from "node:path";
8
- import { fileURLToPath } from "node:url";
9
-
10
- const __filename = fileURLToPath(import.meta.url);
11
- const __dirname = path.dirname(__filename);
12
- const require = createRequire(import.meta.url);
13
-
14
- const PLATFORM_PACKAGE_BY_TARGET = {
15
- "x86_64-unknown-linux-gnu": "@xuanwo/xurl-linux-x64",
16
- "aarch64-unknown-linux-gnu": "@xuanwo/xurl-linux-arm64",
17
- "x86_64-apple-darwin": "@xuanwo/xurl-darwin-x64",
18
- "aarch64-apple-darwin": "@xuanwo/xurl-darwin-arm64",
19
- "x86_64-pc-windows-msvc": "@xuanwo/xurl-win32-x64",
20
- "aarch64-pc-windows-msvc": "@xuanwo/xurl-win32-arm64",
21
- };
22
-
23
- function detectTargetTriple(platformName, archName) {
24
- switch (platformName) {
25
- case "linux":
26
- if (archName === "x64") {
27
- return "x86_64-unknown-linux-gnu";
28
- }
29
- if (archName === "arm64") {
30
- return "aarch64-unknown-linux-gnu";
31
- }
32
- break;
33
- case "darwin":
34
- if (archName === "x64") {
35
- return "x86_64-apple-darwin";
36
- }
37
- if (archName === "arm64") {
38
- return "aarch64-apple-darwin";
39
- }
40
- break;
41
- case "win32":
42
- if (archName === "x64") {
43
- return "x86_64-pc-windows-msvc";
44
- }
45
- if (archName === "arm64") {
46
- return "aarch64-pc-windows-msvc";
47
- }
48
- break;
49
- default:
50
- break;
51
- }
52
- return null;
53
- }
54
-
55
- function detectPackageManager() {
56
- const userAgent = process.env.npm_config_user_agent || "";
57
- if (/\bbun\//.test(userAgent)) {
58
- return "bun";
59
- }
60
- return userAgent ? "npm" : null;
61
- }
62
-
63
- const targetTriple = detectTargetTriple(process.platform, process.arch);
64
- if (!targetTriple) {
65
- throw new Error(`Unsupported platform: ${process.platform} (${process.arch})`);
66
- }
67
-
68
- const platformPackage = PLATFORM_PACKAGE_BY_TARGET[targetTriple];
69
- if (!platformPackage) {
70
- throw new Error(`Unsupported target triple: ${targetTriple}`);
71
- }
72
-
73
- const binaryName = process.platform === "win32" ? "xurl.exe" : "xurl";
74
- const localVendorRoot = path.join(__dirname, "..", "vendor");
75
- const localBinaryPath = path.join(localVendorRoot, targetTriple, "xurl", binaryName);
76
-
77
- let vendorRoot;
78
- try {
79
- const packageJsonPath = require.resolve(`${platformPackage}/package.json`);
80
- vendorRoot = path.join(path.dirname(packageJsonPath), "vendor");
81
- } catch {
82
- if (existsSync(localBinaryPath)) {
83
- vendorRoot = localVendorRoot;
84
- } else {
85
- const manager = detectPackageManager();
86
- const updateCommand =
87
- manager === "bun"
88
- ? "bun install -g @xuanwo/xurl@latest"
89
- : "npm install -g @xuanwo/xurl@latest";
90
- throw new Error(
91
- `Missing optional dependency ${platformPackage}. Reinstall xurl: ${updateCommand}`,
92
- );
93
- }
94
- }
95
-
96
- const binaryPath = path.join(vendorRoot, targetTriple, "xurl", binaryName);
97
- const env = { ...process.env };
98
- env[detectPackageManager() === "bun" ? "XURL_MANAGED_BY_BUN" : "XURL_MANAGED_BY_NPM"] =
99
- "1";
100
-
101
- const child = spawn(binaryPath, process.argv.slice(2), {
102
- stdio: "inherit",
103
- env,
104
- });
105
-
106
- child.on("error", (err) => {
107
- // eslint-disable-next-line no-console
108
- console.error(err);
109
- process.exit(1);
110
- });
111
-
112
- const forwardSignal = (signal) => {
113
- if (child.killed) {
114
- return;
115
- }
116
- try {
117
- child.kill(signal);
118
- } catch {
119
- // Ignore errors when the child already exited.
120
- }
121
- };
122
-
123
- ["SIGINT", "SIGTERM", "SIGHUP"].forEach((signal) => {
124
- process.on(signal, () => forwardSignal(signal));
125
- });
126
-
127
- const childResult = await new Promise((resolve) => {
128
- child.on("exit", (code, signal) => {
129
- if (signal) {
130
- resolve({ type: "signal", signal });
131
- } else {
132
- resolve({ type: "code", exitCode: code ?? 1 });
133
- }
134
- });
135
- });
136
-
137
- if (childResult.type === "signal") {
138
- process.kill(process.pid, childResult.signal);
139
- } else {
140
- process.exit(childResult.exitCode);
141
- }