























@@ -0,0 +1,113 @@
1+import type { Command } from "commander";
2+import {
3+pathEmitCommand,
4+pathFindCommand,
5+pathResolveCommand,
6+pathSetCommand,
7+pathValidateCommand,
8+type PathCommandOptions,
9+} from "../commands/path.js";
10+import { defaultRuntime } from "../runtime.js";
11+import { formatDocsLink } from "../terminal/links.js";
12+import { theme } from "../terminal/theme.js";
13+import { runCommandWithRuntime } from "./cli-utils.js";
14+import { applyParentDefaultHelpAction } from "./program/parent-default-help.js";
15+16+interface RawPathOptions {
17+json?: boolean;
18+human?: boolean;
19+cwd?: string;
20+file?: string;
21+dryRun?: boolean;
22+}
23+24+function normalize(opts: RawPathOptions): PathCommandOptions {
25+return {
26+json: opts.json,
27+human: opts.human,
28+cwd: opts.cwd,
29+file: opts.file,
30+dryRun: opts.dryRun,
31+};
32+}
33+34+export function registerPathCli(program: Command) {
35+const path = program
36+.command("path")
37+.description("Inspect and edit workspace files via the oc:// addressing scheme")
38+.addHelpText(
39+"after",
40+() =>
41+`\n${theme.muted("Docs:")} ${formatDocsLink("/cli/path", "docs.openclaw.ai/cli/path")}\n`,
42+);
43+44+path
45+.command("resolve")
46+.description("Print the match at an oc:// path")
47+.argument("<oc-path>", "oc:// path to resolve")
48+.option("--json", "Force JSON output")
49+.option("--human", "Force human output")
50+.option("--cwd <dir>", "Resolve file slot against this directory")
51+.option("--file <file>", "Override the file slot's resolved path (absolute access)")
52+.action(async (pathStr: string, opts: RawPathOptions) => {
53+await runCommandWithRuntime(defaultRuntime, async () => {
54+await pathResolveCommand(pathStr, normalize(opts), defaultRuntime);
55+});
56+});
57+58+path
59+.command("find")
60+.description("Enumerate matches for a wildcard / predicate oc:// pattern")
61+.argument("<pattern>", "oc:// pattern (supports * and **)")
62+.option("--json", "Force JSON output")
63+.option("--human", "Force human output")
64+.option("--cwd <dir>", "Resolve file slot against this directory")
65+.option("--file <file>", "Override the file slot's resolved path (absolute access)")
66+.action(async (patternStr: string, opts: RawPathOptions) => {
67+await runCommandWithRuntime(defaultRuntime, async () => {
68+await pathFindCommand(patternStr, normalize(opts), defaultRuntime);
69+});
70+});
71+72+path
73+.command("set")
74+.description("Write a leaf value at an oc:// path")
75+.argument("<oc-path>", "oc:// path to write")
76+.argument("<value>", "string value to write")
77+.option("--dry-run", "Print bytes without writing")
78+.option("--json", "Force JSON output")
79+.option("--human", "Force human output")
80+.option("--cwd <dir>", "Resolve file slot against this directory")
81+.option("--file <file>", "Override the file slot's resolved path (absolute access)")
82+.action(async (pathStr: string, value: string, opts: RawPathOptions) => {
83+await runCommandWithRuntime(defaultRuntime, async () => {
84+await pathSetCommand(pathStr, value, normalize(opts), defaultRuntime);
85+});
86+});
87+88+path
89+.command("validate")
90+.description("Parse an oc:// path and print its slot structure")
91+.argument("<oc-path>", "oc:// path to validate")
92+.option("--json", "Force JSON output")
93+.option("--human", "Force human output")
94+.action((pathStr: string, opts: RawPathOptions) => {
95+pathValidateCommand(pathStr, normalize(opts), defaultRuntime);
96+});
97+98+path
99+.command("emit")
100+.description("Round-trip a file through parseXxx + emitXxx (byte-fidelity diagnostic)")
101+.argument("<file>", "Path to a workspace file (md / jsonc / jsonl / yaml)")
102+.option("--cwd <dir>", "Resolve <file> against this directory (default: process.cwd())")
103+.option("--file <file>", "Override the file's resolved path (absolute access)")
104+.option("--json", "Force JSON output")
105+.option("--human", "Force human output")
106+.action(async (fileArg: string, opts: RawPathOptions) => {
107+await runCommandWithRuntime(defaultRuntime, async () => {
108+await pathEmitCommand(fileArg, normalize(opts), defaultRuntime);
109+});
110+});
111+112+applyParentDefaultHelpAction(path);
113+}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。