@zenalexa/unicli 0.217.3 → 0.218.0

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.
Files changed (126) hide show
  1. package/AGENTS.md +36 -197
  2. package/README.md +2 -2
  3. package/README.zh-CN.md +2 -2
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +12 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/auth.d.ts +1 -0
  8. package/dist/commands/auth.d.ts.map +1 -1
  9. package/dist/commands/auth.js +250 -0
  10. package/dist/commands/auth.js.map +1 -1
  11. package/dist/commands/dev.js +1 -0
  12. package/dist/commands/dev.js.map +1 -1
  13. package/dist/commands/health.d.ts.map +1 -1
  14. package/dist/commands/health.js +1 -0
  15. package/dist/commands/health.js.map +1 -1
  16. package/dist/commands/lint.d.ts.map +1 -1
  17. package/dist/commands/lint.js +15 -6
  18. package/dist/commands/lint.js.map +1 -1
  19. package/dist/commands/repair.d.ts +1 -0
  20. package/dist/commands/repair.d.ts.map +1 -1
  21. package/dist/commands/repair.js +103 -61
  22. package/dist/commands/repair.js.map +1 -1
  23. package/dist/engine/chromium-cookies-platform.d.ts +69 -0
  24. package/dist/engine/chromium-cookies-platform.d.ts.map +1 -0
  25. package/dist/engine/chromium-cookies-platform.js +315 -0
  26. package/dist/engine/chromium-cookies-platform.js.map +1 -0
  27. package/dist/engine/chromium-cookies-types.d.ts +26 -0
  28. package/dist/engine/chromium-cookies-types.d.ts.map +1 -0
  29. package/dist/engine/chromium-cookies-types.js +16 -0
  30. package/dist/engine/chromium-cookies-types.js.map +1 -0
  31. package/dist/engine/chromium-cookies.d.ts +56 -0
  32. package/dist/engine/chromium-cookies.d.ts.map +1 -0
  33. package/dist/engine/chromium-cookies.js +361 -0
  34. package/dist/engine/chromium-cookies.js.map +1 -0
  35. package/dist/engine/cookies.d.ts +13 -5
  36. package/dist/engine/cookies.d.ts.map +1 -1
  37. package/dist/engine/cookies.js +55 -9
  38. package/dist/engine/cookies.js.map +1 -1
  39. package/dist/engine/executor.d.ts +8 -0
  40. package/dist/engine/executor.d.ts.map +1 -1
  41. package/dist/engine/executor.js +1 -1
  42. package/dist/engine/executor.js.map +1 -1
  43. package/dist/engine/kernel/execute.d.ts.map +1 -1
  44. package/dist/engine/kernel/execute.js +1 -0
  45. package/dist/engine/kernel/execute.js.map +1 -1
  46. package/dist/engine/repair/quarantine-discovery.d.ts +25 -0
  47. package/dist/engine/repair/quarantine-discovery.d.ts.map +1 -0
  48. package/dist/engine/repair/quarantine-discovery.js +78 -0
  49. package/dist/engine/repair/quarantine-discovery.js.map +1 -0
  50. package/dist/engine/steps/navigate.d.ts +1 -1
  51. package/dist/engine/steps/navigate.d.ts.map +1 -1
  52. package/dist/engine/steps/navigate.js +5 -1
  53. package/dist/engine/steps/navigate.js.map +1 -1
  54. package/dist/engine/template.d.ts +14 -4
  55. package/dist/engine/template.d.ts.map +1 -1
  56. package/dist/engine/template.js +93 -65
  57. package/dist/engine/template.js.map +1 -1
  58. package/dist/engine/verify-row-shape.d.ts +17 -0
  59. package/dist/engine/verify-row-shape.d.ts.map +1 -0
  60. package/dist/engine/verify-row-shape.js +36 -0
  61. package/dist/engine/verify-row-shape.js.map +1 -0
  62. package/dist/fast-path/handlers/adapter.d.ts +15 -0
  63. package/dist/fast-path/handlers/adapter.d.ts.map +1 -0
  64. package/dist/fast-path/handlers/adapter.js +169 -0
  65. package/dist/fast-path/handlers/adapter.js.map +1 -0
  66. package/dist/fast-path/handlers/discovery.d.ts +14 -0
  67. package/dist/fast-path/handlers/discovery.d.ts.map +1 -0
  68. package/dist/fast-path/handlers/discovery.js +280 -0
  69. package/dist/fast-path/handlers/discovery.js.map +1 -0
  70. package/dist/fast-path/manifest.d.ts +47 -0
  71. package/dist/fast-path/manifest.d.ts.map +1 -0
  72. package/dist/fast-path/manifest.js +32 -0
  73. package/dist/fast-path/manifest.js.map +1 -0
  74. package/dist/fast-path/parsed-argv.d.ts +16 -0
  75. package/dist/fast-path/parsed-argv.d.ts.map +1 -0
  76. package/dist/fast-path/parsed-argv.js +6 -0
  77. package/dist/fast-path/parsed-argv.js.map +1 -0
  78. package/dist/fast-path/policy.d.ts +25 -0
  79. package/dist/fast-path/policy.d.ts.map +1 -0
  80. package/dist/fast-path/policy.js +96 -0
  81. package/dist/fast-path/policy.js.map +1 -0
  82. package/dist/fast-path/render.d.ts +26 -0
  83. package/dist/fast-path/render.d.ts.map +1 -0
  84. package/dist/fast-path/render.js +200 -0
  85. package/dist/fast-path/render.js.map +1 -0
  86. package/dist/fast-path.d.ts +8 -10
  87. package/dist/fast-path.d.ts.map +1 -1
  88. package/dist/fast-path.js +66 -810
  89. package/dist/fast-path.js.map +1 -1
  90. package/dist/manifest.json +7 -6
  91. package/dist/transport/adapters/cdp-browser.d.ts +6 -6
  92. package/dist/transport/adapters/cdp-browser.js +7 -7
  93. package/dist/transport/adapters/cdp-browser.js.map +1 -1
  94. package/dist/transport/adapters/subprocess.d.ts +4 -4
  95. package/dist/transport/adapters/subprocess.js +4 -4
  96. package/package.json +1 -1
  97. package/src/adapters/adguardhome/rules.yaml +1 -1
  98. package/src/adapters/adguardhome/stats.yaml +1 -1
  99. package/src/adapters/adguardhome/status.yaml +1 -1
  100. package/src/adapters/apple-music/rate-album.yaml +1 -2
  101. package/src/adapters/arxiv/trending.yaml +1 -1
  102. package/src/adapters/az/account.yaml +1 -1
  103. package/src/adapters/coupang/hot.yaml +2 -1
  104. package/src/adapters/ctrip/hot.yaml +2 -1
  105. package/src/adapters/ctrip/search.yaml +2 -1
  106. package/src/adapters/douban/top250.yaml +1 -1
  107. package/src/adapters/figma/export-selected.yaml +1 -2
  108. package/src/adapters/gcloud/projects.yaml +1 -1
  109. package/src/adapters/github-trending/developers.yaml +1 -1
  110. package/src/adapters/github-trending/weekly.yaml +1 -1
  111. package/src/adapters/homebrew/search.yaml +1 -1
  112. package/src/adapters/imdb/top.yaml +1 -1
  113. package/src/adapters/itch-io/popular.yaml +1 -1
  114. package/src/adapters/itch-io/top.yaml +1 -1
  115. package/src/adapters/mastodon/timeline.yaml +1 -1
  116. package/src/adapters/openrouter/search.yaml +1 -1
  117. package/src/adapters/pypi/search.yaml +2 -1
  118. package/src/adapters/sspai/hot.yaml +4 -1
  119. package/src/adapters/sspai/latest.yaml +3 -3
  120. package/src/adapters/tieba/hot.yaml +1 -1
  121. package/src/adapters/wikipedia/today.yaml +1 -1
  122. package/src/adapters/zoom/toggle-mute.yaml +1 -2
  123. package/dist/engine/yaml-runner.d.ts +0 -11
  124. package/dist/engine/yaml-runner.d.ts.map +0 -1
  125. package/dist/engine/yaml-runner.js +0 -18
  126. package/dist/engine/yaml-runner.js.map +0 -1
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @owner src/engine/verify-row-shape.ts
3
+ * @does Detect "silent column drops" — adapter declares columns the data never populates.
4
+ * @needs none
5
+ * @feeds src/cli.ts (unicli test post-run check), src/commands/lint.ts (future audit gate)
6
+ * @breaks A column declared in YAML but absent in every row is a contract violation; surface as a structured warning. Treats `false`/`0`/`[]`/`{}` as POPULATED (formatter renders them as visible values); only `undefined`, `null`, and the empty string "" count as drops.
7
+ */
8
+ export interface RowShapeReport {
9
+ /** declared columns the data never populated with a non-null value */
10
+ dropped: string[];
11
+ /** declared columns at least one row populated */
12
+ populated: string[];
13
+ /** true when results are non-array, items are non-object, or no columns declared */
14
+ skipped: boolean;
15
+ }
16
+ export declare function verifyRowShape(results: unknown, declaredColumns: readonly string[] | undefined): RowShapeReport;
17
+ //# sourceMappingURL=verify-row-shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-row-shape.d.ts","sourceRoot":"","sources":["../../src/engine/verify-row-shape.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kDAAkD;IAClD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,oFAAoF;IACpF,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAC7C,cAAc,CAuBhB"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @owner src/engine/verify-row-shape.ts
3
+ * @does Detect "silent column drops" — adapter declares columns the data never populates.
4
+ * @needs none
5
+ * @feeds src/cli.ts (unicli test post-run check), src/commands/lint.ts (future audit gate)
6
+ * @breaks A column declared in YAML but absent in every row is a contract violation; surface as a structured warning. Treats `false`/`0`/`[]`/`{}` as POPULATED (formatter renders them as visible values); only `undefined`, `null`, and the empty string "" count as drops.
7
+ */
8
+ const EMPTY = { dropped: [], populated: [], skipped: true };
9
+ export function verifyRowShape(results, declaredColumns) {
10
+ if (!declaredColumns || declaredColumns.length === 0)
11
+ return EMPTY;
12
+ if (!Array.isArray(results) || results.length === 0)
13
+ return EMPTY;
14
+ const dropped = [];
15
+ const populated = [];
16
+ for (const col of declaredColumns) {
17
+ let seen = false;
18
+ for (const row of results) {
19
+ if (row == null || typeof row !== "object" || Array.isArray(row))
20
+ continue;
21
+ const value = row[col];
22
+ if (value === undefined || value === null)
23
+ continue;
24
+ if (typeof value === "string" && value.length === 0)
25
+ continue;
26
+ seen = true;
27
+ break;
28
+ }
29
+ if (seen)
30
+ populated.push(col);
31
+ else
32
+ dropped.push(col);
33
+ }
34
+ return { dropped, populated, skipped: false };
35
+ }
36
+ //# sourceMappingURL=verify-row-shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-row-shape.js","sourceRoot":"","sources":["../../src/engine/verify-row-shape.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,MAAM,KAAK,GAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAE5E,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,eAA8C;IAE9C,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAElE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAC9D,SAAS;YACX,MAAM,KAAK,GAAI,GAA+B,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS;YACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAC9D,IAAI,GAAG,IAAI,CAAC;YACZ,MAAM;QACR,CAAC;QACD,IAAI,IAAI;YAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;YACzB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Fast-path adapter-level handlers — adapter-dry-run / adapter-policy-gate /
3
+ * site-help.
4
+ *
5
+ * These intercept `unicli <site> <cmd> ...` BEFORE Commander loads the full
6
+ * adapter tree, either to render a dry-run plan, gate on permission policy,
7
+ * or print site-level help. Each returns true if the fast path consumed the
8
+ * call.
9
+ */
10
+ import type { ParsedArgv } from "../parsed-argv.js";
11
+ import { type Io } from "../render.js";
12
+ export declare function handleAdapterDryRun(parsed: ParsedArgv, io: Io): boolean;
13
+ export declare function handleAdapterPolicyGate(parsed: ParsedArgv, io: Io): boolean;
14
+ export declare function handleSiteHelp(parsed: ParsedArgv, io: Io): boolean;
15
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/fast-path/handlers/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAEL,KAAK,EAAE,EAGR,MAAM,cAAc,CAAC;AAEtB,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CA6DvE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CA4F3E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAgClE"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Fast-path adapter-level handlers — adapter-dry-run / adapter-policy-gate /
3
+ * site-help.
4
+ *
5
+ * These intercept `unicli <site> <cmd> ...` BEFORE Commander loads the full
6
+ * adapter tree, either to render a dry-run plan, gate on permission policy,
7
+ * or print site-level help. Each returns true if the fast path consumed the
8
+ * call.
9
+ */
10
+ import { resolveOperationAdapterPath, resolveOperationTargetSurface, } from "../../engine/operation-policy.js";
11
+ import { defaultErrorNextActions } from "../../output/next-actions.js";
12
+ import { format, detectFormat } from "../../output/formatter.js";
13
+ import { ExitCode } from "../../types.js";
14
+ import { readManifest } from "../manifest.js";
15
+ import { evaluateManifestOperationPolicy } from "../policy.js";
16
+ import { emitStderrAndExit, isHelpToken, resolveDryRunArgs, } from "../render.js";
17
+ export function handleAdapterDryRun(parsed, io) {
18
+ if (!parsed.command || !parsed.dryRun || parsed.rest.length === 0) {
19
+ return false;
20
+ }
21
+ const manifest = readManifest();
22
+ const info = manifest.sites[parsed.command];
23
+ if (!info)
24
+ return false;
25
+ const [cmdName, ...tokens] = parsed.rest;
26
+ if (!cmdName || cmdName === "help" || cmdName.startsWith("-"))
27
+ return false;
28
+ const command = info.commands.find((candidate) => candidate.name === cmdName);
29
+ if (!command)
30
+ return false;
31
+ const startedAt = Date.now();
32
+ const args = resolveDryRunArgs(command.args, tokens);
33
+ if (!args)
34
+ return false;
35
+ const adapterType = command.type ?? info.commands[0]?.type ?? "web-api";
36
+ const targetSurface = resolveOperationTargetSurface({
37
+ adapterType,
38
+ targetSurface: command.target_surface,
39
+ });
40
+ const adapterPath = resolveOperationAdapterPath(parsed.command, cmdName, command.adapter_path);
41
+ const operationPolicy = evaluateManifestOperationPolicy({
42
+ parsed,
43
+ io,
44
+ site: parsed.command,
45
+ commandName: cmdName,
46
+ command,
47
+ adapterType,
48
+ targetSurface,
49
+ adapterPath,
50
+ startedAt,
51
+ });
52
+ if (!operationPolicy)
53
+ return true;
54
+ io.stdout(JSON.stringify({
55
+ command: `${parsed.command}.${cmdName}`,
56
+ adapter_type: adapterType,
57
+ strategy: command.strategy ?? "public",
58
+ args,
59
+ args_source: tokens.length > 0 ? "shell" : "defaults",
60
+ operation_policy: operationPolicy,
61
+ trace_id: `fast-${Date.now().toString(36)}`,
62
+ surface: "cli",
63
+ target_surface: targetSurface,
64
+ pipeline_steps: command.pipeline_steps ?? 0,
65
+ adapter_path: adapterPath,
66
+ }, null, 2));
67
+ return true;
68
+ }
69
+ export function handleAdapterPolicyGate(parsed, io) {
70
+ if (!parsed.command || parsed.dryRun || parsed.rest.length === 0) {
71
+ return false;
72
+ }
73
+ const [cmdName] = parsed.rest;
74
+ if (!cmdName || cmdName === "help" || cmdName.startsWith("-"))
75
+ return false;
76
+ if (parsed.rest.slice(1).some(isHelpToken))
77
+ return false;
78
+ const startedAt = Date.now();
79
+ const manifest = readManifest();
80
+ const info = manifest.sites[parsed.command];
81
+ if (!info)
82
+ return false;
83
+ const command = info.commands.find((candidate) => candidate.name === cmdName);
84
+ if (!command)
85
+ return false;
86
+ const adapterType = command.type ?? info.commands[0]?.type ?? "web-api";
87
+ const targetSurface = resolveOperationTargetSurface({
88
+ adapterType,
89
+ targetSurface: command.target_surface,
90
+ });
91
+ const adapterPath = resolveOperationAdapterPath(parsed.command, cmdName, command.adapter_path);
92
+ const operationPolicy = evaluateManifestOperationPolicy({
93
+ parsed,
94
+ io,
95
+ site: parsed.command,
96
+ commandName: cmdName,
97
+ command,
98
+ adapterType,
99
+ targetSurface,
100
+ adapterPath,
101
+ startedAt,
102
+ });
103
+ if (!operationPolicy)
104
+ return true;
105
+ if (operationPolicy.enforcement !== "needs_approval" &&
106
+ operationPolicy.enforcement !== "deny") {
107
+ return false;
108
+ }
109
+ const isDenyRule = operationPolicy.enforcement === "deny";
110
+ const ruleId = operationPolicy.deny_rule?.id ?? "unknown";
111
+ const ruleReason = operationPolicy.deny_rule?.reason ?? "permission rule matched";
112
+ emitStderrAndExit(io, format([], command.columns, detectFormat(parsed.format), {
113
+ command: `${parsed.command}.${cmdName}`,
114
+ duration_ms: Date.now() - startedAt,
115
+ surface: targetSurface,
116
+ error: {
117
+ code: "permission_denied",
118
+ message: isDenyRule
119
+ ? `permission rule "${ruleId}" denies ${operationPolicy.effect}: ${ruleReason}`
120
+ : `permission profile "${operationPolicy.profile}" requires approval for ${operationPolicy.effect}`,
121
+ adapter_path: adapterPath,
122
+ step: 0,
123
+ suggestion: operationPolicy.approval_hint ??
124
+ (isDenyRule
125
+ ? "edit or remove the matching permission rule"
126
+ : "rerun with --yes or use --permission-profile open"),
127
+ retryable: false,
128
+ alternatives: isDenyRule
129
+ ? [
130
+ `unicli --dry-run ${parsed.command} ${cmdName}`,
131
+ "edit ~/.unicli/permission-rules.json",
132
+ ]
133
+ : [
134
+ `unicli --dry-run ${parsed.command} ${cmdName}`,
135
+ `unicli --yes --permission-profile ${operationPolicy.profile} ${parsed.command} ${cmdName}`,
136
+ `unicli --permission-profile open ${parsed.command} ${cmdName}`,
137
+ ],
138
+ },
139
+ next_actions: defaultErrorNextActions(parsed.command, cmdName, "permission_denied"),
140
+ }), ExitCode.AUTH_REQUIRED);
141
+ return true;
142
+ }
143
+ export function handleSiteHelp(parsed, io) {
144
+ const wantsHelp = parsed.rest.length === 0 || parsed.rest.every(isHelpToken);
145
+ if (!parsed.command || !wantsHelp)
146
+ return false;
147
+ const manifest = readManifest();
148
+ const info = manifest.sites[parsed.command];
149
+ if (!info)
150
+ return false;
151
+ const commandWidth = Math.max(7, ...info.commands.map((command) => command.name.length));
152
+ const lines = [
153
+ `Usage: unicli ${parsed.command} [options] [command]`,
154
+ "",
155
+ `Commands for ${parsed.command}`,
156
+ "",
157
+ "Options:",
158
+ " -h, --help".padEnd(commandWidth + 6) + "display help for command",
159
+ "",
160
+ "Commands:",
161
+ ];
162
+ for (const command of info.commands) {
163
+ lines.push(` ${command.name.padEnd(commandWidth)} ${command.description ?? ""}`.trimEnd());
164
+ }
165
+ lines.push(` ${"help [command]".padEnd(commandWidth)} display help for command`);
166
+ io.stdout(lines.join("\n"));
167
+ return true;
168
+ }
169
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/fast-path/handlers/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Fast-path discovery handlers — list / search / describe / repair.
3
+ *
4
+ * These respond to the agent surface from the manifest alone, with no
5
+ * Commander tree or adapter loader involvement. Each returns true if the
6
+ * fast path took ownership of the call, false to fall through.
7
+ */
8
+ import type { ParsedArgv } from "../parsed-argv.js";
9
+ import { type Io } from "../render.js";
10
+ export declare function handleList(parsed: ParsedArgv, io: Io): boolean;
11
+ export declare function handleSearch(parsed: ParsedArgv, io: Io): boolean;
12
+ export declare function handleDescribe(parsed: ParsedArgv, io: Io): boolean;
13
+ export declare function handleRepair(parsed: ParsedArgv, io: Io): boolean;
14
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/fast-path/handlers/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAKL,KAAK,EAAE,EAER,MAAM,cAAc,CAAC;AAEtB,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CA8D9D;AAsBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CA+DhE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CA2HlE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CA4DhE"}
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Fast-path discovery handlers — list / search / describe / repair.
3
+ *
4
+ * These respond to the agent surface from the manifest alone, with no
5
+ * Commander tree or adapter loader involvement. Each returns true if the
6
+ * fast path took ownership of the call, false to fall through.
7
+ */
8
+ import { search } from "../../discovery/search.js";
9
+ import { buildMacosDynamicCommands, discoverMacosDynamicData, dynamicMacosDiscoveryEnabled, } from "../../discovery/macos-dynamic.js";
10
+ import { buildDefaultConfig } from "../../engine/repair/config.js";
11
+ import { resolveOperationAdapterPath, resolveOperationTargetSurface, } from "../../engine/operation-policy.js";
12
+ import { readManifest } from "../manifest.js";
13
+ import { evaluateManifestOperationPolicy } from "../policy.js";
14
+ import { argsToJsonSchema, buildChannels, buildExample, emit, summarizeArgs, } from "../render.js";
15
+ export function handleList(parsed, io) {
16
+ const startedAt = Date.now();
17
+ let siteFilter;
18
+ let typeFilter;
19
+ for (let i = 0; i < parsed.rest.length; i += 1) {
20
+ const arg = parsed.rest[i];
21
+ if (arg === "--site") {
22
+ siteFilter = parsed.rest[i + 1];
23
+ i += 1;
24
+ continue;
25
+ }
26
+ if (arg.startsWith("--site=")) {
27
+ siteFilter = arg.slice("--site=".length);
28
+ continue;
29
+ }
30
+ if (arg === "--type") {
31
+ typeFilter = parsed.rest[i + 1];
32
+ i += 1;
33
+ continue;
34
+ }
35
+ if (arg.startsWith("--type=")) {
36
+ typeFilter = arg.slice("--type=".length);
37
+ continue;
38
+ }
39
+ return false;
40
+ }
41
+ const manifest = readManifest();
42
+ const rows = Object.entries(manifest.sites)
43
+ .flatMap(([site, info]) => info.commands.map((command) => {
44
+ const strategy = command.strategy ?? "public";
45
+ const tags = [];
46
+ if (strategy !== "public")
47
+ tags.push("[auth]");
48
+ if (command.quarantined === true)
49
+ tags.push("[quarantined]");
50
+ return {
51
+ site,
52
+ command: command.name,
53
+ description: command.description ?? "",
54
+ type: command.type ?? "web-api",
55
+ auth: tags.join(" "),
56
+ };
57
+ }))
58
+ .concat(dynamicListRows())
59
+ .filter((row) => !siteFilter || row.site.includes(siteFilter))
60
+ .filter((row) => !typeFilter || row.type === typeFilter)
61
+ .sort((a, b) => a.site.localeCompare(b.site) || a.command.localeCompare(b.command));
62
+ emit(io, rows, ["site", "command", "description", "type", "auth"], parsed.format, "core.list", startedAt);
63
+ return true;
64
+ }
65
+ function dynamicListRows() {
66
+ if (!dynamicMacosDiscoveryEnabled())
67
+ return [];
68
+ return Object.values(buildMacosDynamicCommands(discoverMacosDynamicData())).map((command) => ({
69
+ site: "macos",
70
+ command: command.name,
71
+ description: command.description ?? "",
72
+ type: "desktop",
73
+ auth: "",
74
+ }));
75
+ }
76
+ export function handleSearch(parsed, io) {
77
+ const startedAt = Date.now();
78
+ let limit = 8;
79
+ let category;
80
+ const queryParts = [];
81
+ for (let i = 0; i < parsed.rest.length; i += 1) {
82
+ const arg = parsed.rest[i];
83
+ if (arg === "-n" || arg === "--limit") {
84
+ limit = parseInt(parsed.rest[i + 1] ?? "", 10) || 8;
85
+ i += 1;
86
+ continue;
87
+ }
88
+ if (arg.startsWith("--limit=")) {
89
+ limit = parseInt(arg.slice("--limit=".length), 10) || 8;
90
+ continue;
91
+ }
92
+ if (arg === "--category") {
93
+ category = parsed.rest[i + 1];
94
+ i += 1;
95
+ continue;
96
+ }
97
+ if (arg.startsWith("--category=")) {
98
+ category = arg.slice("--category=".length);
99
+ continue;
100
+ }
101
+ queryParts.push(arg);
102
+ }
103
+ const query = queryParts.join(" ");
104
+ if (!query && !category) {
105
+ io.stderr("Usage: unicli search <query> or unicli search --category <cat>");
106
+ process.exitCode = 2;
107
+ return true;
108
+ }
109
+ const effectiveQuery = category ? `${category} ${query}`.trim() : query;
110
+ const results = search(effectiveQuery, limit);
111
+ if (results.length === 0) {
112
+ io.stderr(`No commands found for: ${effectiveQuery}`);
113
+ process.exitCode = 66;
114
+ return true;
115
+ }
116
+ const rows = results.map((result) => ({
117
+ command: `${result.site} ${result.command}`,
118
+ description: result.description || `${result.command} for ${result.site}`,
119
+ score: result.score,
120
+ category: result.category,
121
+ usage: result.usage,
122
+ }));
123
+ emit(io, rows, ["command", "description", "score", "usage"], parsed.format, "core.search", startedAt);
124
+ return true;
125
+ }
126
+ export function handleDescribe(parsed, io) {
127
+ const startedAt = Date.now();
128
+ const manifest = readManifest();
129
+ const [site, cmdName] = parsed.rest;
130
+ if (!site) {
131
+ const sites = Object.entries(manifest.sites).map(([name, info]) => ({
132
+ name,
133
+ display_name: name,
134
+ type: info.commands[0]?.type ?? "web-api",
135
+ strategy: info.commands[0]?.strategy ?? "public",
136
+ commands_count: info.commands.length,
137
+ description: "",
138
+ }));
139
+ io.stdout(JSON.stringify({ sites, total: sites.length }, null, 2));
140
+ return true;
141
+ }
142
+ const info = manifest.sites[site];
143
+ if (!info) {
144
+ io.stdout(JSON.stringify({ error: `unknown site: ${site}` }, null, 2));
145
+ process.exitCode = 64;
146
+ return true;
147
+ }
148
+ if (!cmdName) {
149
+ const commands = info.commands.map((command) => ({
150
+ name: command.name,
151
+ description: command.description ?? "",
152
+ quarantined: command.quarantined === true,
153
+ strategy: command.strategy ?? "public",
154
+ auth: (command.strategy ?? "public") !== "public",
155
+ browser: command.browser === true,
156
+ args: summarizeArgs(command.args),
157
+ }));
158
+ io.stdout(JSON.stringify({
159
+ site,
160
+ display_name: site,
161
+ type: info.commands[0]?.type ?? "web-api",
162
+ strategy: info.commands[0]?.strategy ?? "public",
163
+ commands,
164
+ }, null, 2));
165
+ return true;
166
+ }
167
+ const command = info.commands.find((candidate) => candidate.name === cmdName);
168
+ if (!command) {
169
+ io.stdout(JSON.stringify({ error: `unknown command: ${site} ${cmdName}` }, null, 2));
170
+ process.exitCode = 64;
171
+ return true;
172
+ }
173
+ const adapterType = command.type ?? info.commands[0]?.type ?? "web-api";
174
+ const targetSurface = resolveOperationTargetSurface({
175
+ adapterType,
176
+ targetSurface: command.target_surface,
177
+ });
178
+ const adapterPath = resolveOperationAdapterPath(site, cmdName, command.adapter_path);
179
+ const operationPolicy = evaluateManifestOperationPolicy({
180
+ parsed,
181
+ io,
182
+ site,
183
+ commandName: cmdName,
184
+ command,
185
+ adapterType,
186
+ targetSurface,
187
+ adapterPath,
188
+ startedAt,
189
+ });
190
+ if (!operationPolicy)
191
+ return true;
192
+ io.stdout(JSON.stringify({
193
+ command: `unicli ${site} ${cmdName}`,
194
+ description: command.description ?? "",
195
+ quarantined: command.quarantined === true,
196
+ strategy: command.strategy ?? "public",
197
+ auth: (command.strategy ?? "public") !== "public",
198
+ browser: command.browser === true,
199
+ target_surface: targetSurface,
200
+ adapter_path: adapterPath,
201
+ operation_policy: operationPolicy,
202
+ args_schema: argsToJsonSchema(command.args ?? []),
203
+ example_stdin: buildExample(command.args ?? []),
204
+ channels: buildChannels(site, cmdName, command.args ?? []),
205
+ next_actions: [
206
+ {
207
+ command: `unicli ${site} ${cmdName} --dry-run`,
208
+ description: "Preview the resolved argument bag and pipeline plan",
209
+ },
210
+ {
211
+ command: `unicli ${site} ${cmdName}`,
212
+ description: "Run the command (shell channel)",
213
+ params: {
214
+ note: {
215
+ description: "For payloads with quotes/emoji/JSON, pipe stdin-JSON instead.",
216
+ },
217
+ },
218
+ },
219
+ {
220
+ command: `unicli repair ${site} ${cmdName}`,
221
+ description: "If the command fails due to upstream drift",
222
+ },
223
+ ],
224
+ }, null, 2));
225
+ return true;
226
+ }
227
+ export function handleRepair(parsed, io) {
228
+ const startedAt = Date.now();
229
+ let dryRun = parsed.dryRun;
230
+ let max = 20;
231
+ let timeout = 90;
232
+ const positionals = [];
233
+ for (let i = 0; i < parsed.rest.length; i += 1) {
234
+ const arg = parsed.rest[i];
235
+ if (arg === "--dry-run") {
236
+ dryRun = true;
237
+ continue;
238
+ }
239
+ if (arg === "--max") {
240
+ max = parseInt(parsed.rest[i + 1] ?? "", 10) || 20;
241
+ i += 1;
242
+ continue;
243
+ }
244
+ if (arg.startsWith("--max=")) {
245
+ max = parseInt(arg.slice("--max=".length), 10) || 20;
246
+ continue;
247
+ }
248
+ if (arg === "--timeout") {
249
+ timeout = parseInt(parsed.rest[i + 1] ?? "", 10) || 90;
250
+ i += 1;
251
+ continue;
252
+ }
253
+ if (arg.startsWith("--timeout=")) {
254
+ timeout = parseInt(arg.slice("--timeout=".length), 10) || 90;
255
+ continue;
256
+ }
257
+ if (arg.startsWith("-"))
258
+ return false;
259
+ positionals.push(arg);
260
+ }
261
+ if (!dryRun)
262
+ return false;
263
+ const [site, command] = positionals;
264
+ if (!site)
265
+ return false;
266
+ const config = buildDefaultConfig(site, command);
267
+ config.maxIterations = max;
268
+ config.timeout = timeout * 1000;
269
+ emit(io, {
270
+ mode: "dry-run",
271
+ site,
272
+ command: command ?? null,
273
+ config: {
274
+ ...config,
275
+ metricPattern: config.metricPattern.source,
276
+ },
277
+ }, undefined, parsed.format, "repair.run", startedAt);
278
+ return true;
279
+ }
280
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/fast-path/handlers/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Generated manifest reader — the discovery-only fast path consumes
3
+ * `dist/manifest.json` instead of loading every adapter through Commander.
4
+ *
5
+ * Keep this module side-effect free: the entry decides whether absence of
6
+ * the manifest is fatal or simply means "no fast path; fall through to the
7
+ * full Commander tree".
8
+ */
9
+ import type { TargetSurface } from "../types.js";
10
+ export type ManifestArg = {
11
+ name: string;
12
+ type?: "str" | "int" | "float" | "bool";
13
+ default?: unknown;
14
+ required?: boolean;
15
+ positional?: boolean;
16
+ choices?: string[];
17
+ description?: string;
18
+ format?: string;
19
+ "x-unicli-kind"?: string;
20
+ "x-unicli-accepts"?: string[];
21
+ };
22
+ export type ManifestCommand = {
23
+ name: string;
24
+ description?: string;
25
+ strategy?: string;
26
+ type?: string;
27
+ domain?: string;
28
+ base?: string;
29
+ browser?: boolean;
30
+ quarantined?: boolean;
31
+ args?: ManifestArg[];
32
+ columns?: string[];
33
+ pipeline_steps?: number;
34
+ adapter_path?: string;
35
+ target_surface?: TargetSurface;
36
+ };
37
+ export type Manifest = {
38
+ version: string;
39
+ sites: Record<string, {
40
+ category?: string;
41
+ commands: ManifestCommand[];
42
+ }>;
43
+ };
44
+ export declare function manifestPath(): string;
45
+ export declare function readManifest(): Manifest;
46
+ export declare function isMissingManifestError(error: unknown): boolean;
47
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/fast-path/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CACX,MAAM,EACN;QACE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,eAAe,EAAE,CAAC;KAC7B,CACF,CAAC;CACH,CAAC;AAEF,wBAAgB,YAAY,IAAI,MAAM,CAYrC;AAED,wBAAgB,YAAY,IAAI,QAAQ,CAEvC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK9D"}