@zenalexa/unicli 0.225.0 → 0.225.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.
Files changed (138) hide show
  1. package/AGENTS.md +4 -4
  2. package/README.md +3 -3
  3. package/README.zh-CN.md +3 -3
  4. package/dist/adapters/_electron/desktop-shared.d.ts.map +1 -1
  5. package/dist/adapters/_electron/desktop-shared.js +2 -1
  6. package/dist/adapters/_electron/desktop-shared.js.map +1 -1
  7. package/dist/adapters/_electron/shared.d.ts +6 -0
  8. package/dist/adapters/_electron/shared.d.ts.map +1 -1
  9. package/dist/adapters/_electron/shared.js +9 -0
  10. package/dist/adapters/_electron/shared.js.map +1 -1
  11. package/dist/adapters/antigravity/extra.js +4 -1
  12. package/dist/adapters/antigravity/extra.js.map +1 -1
  13. package/dist/adapters/chatwise/extra.js +4 -1
  14. package/dist/adapters/chatwise/extra.js.map +1 -1
  15. package/dist/adapters/codex/codex.js +3 -1
  16. package/dist/adapters/codex/codex.js.map +1 -1
  17. package/dist/adapters/codex/extra.js +4 -1
  18. package/dist/adapters/codex/extra.js.map +1 -1
  19. package/dist/adapters/codex/projects.d.ts.map +1 -1
  20. package/dist/adapters/codex/projects.js +3 -1
  21. package/dist/adapters/codex/projects.js.map +1 -1
  22. package/dist/adapters/cursor/cursor.js +6 -1
  23. package/dist/adapters/cursor/cursor.js.map +1 -1
  24. package/dist/adapters/discord-app/discord-app.js +10 -1
  25. package/dist/adapters/discord-app/discord-app.js.map +1 -1
  26. package/dist/adapters/notion-app/notion-app.js +11 -1
  27. package/dist/adapters/notion-app/notion-app.js.map +1 -1
  28. package/dist/adapters/spotify/api.js +36 -6
  29. package/dist/adapters/spotify/api.js.map +1 -1
  30. package/dist/adapters/xiaohongshu/browser-state.d.ts +2 -1
  31. package/dist/adapters/xiaohongshu/browser-state.d.ts.map +1 -1
  32. package/dist/adapters/xiaohongshu/browser-state.js +56 -2
  33. package/dist/adapters/xiaohongshu/browser-state.js.map +1 -1
  34. package/dist/adapters/xiaohongshu/feed.d.ts +24 -0
  35. package/dist/adapters/xiaohongshu/feed.d.ts.map +1 -0
  36. package/dist/adapters/xiaohongshu/feed.js +82 -0
  37. package/dist/adapters/xiaohongshu/feed.js.map +1 -0
  38. package/dist/browser/cdp-client.d.ts +5 -1
  39. package/dist/browser/cdp-client.d.ts.map +1 -1
  40. package/dist/browser/cdp-client.js +24 -16
  41. package/dist/browser/cdp-client.js.map +1 -1
  42. package/dist/browser/daemon.js +29 -7
  43. package/dist/browser/daemon.js.map +1 -1
  44. package/dist/browser/launcher.d.ts.map +1 -1
  45. package/dist/browser/launcher.js +22 -8
  46. package/dist/browser/launcher.js.map +1 -1
  47. package/dist/browser/local-profiles.d.ts +2 -0
  48. package/dist/browser/local-profiles.d.ts.map +1 -1
  49. package/dist/browser/local-profiles.js +42 -2
  50. package/dist/browser/local-profiles.js.map +1 -1
  51. package/dist/browser/page.d.ts +2 -2
  52. package/dist/browser/page.d.ts.map +1 -1
  53. package/dist/browser/page.js +2 -2
  54. package/dist/browser/page.js.map +1 -1
  55. package/dist/browser/protocol.d.ts +7 -0
  56. package/dist/browser/protocol.d.ts.map +1 -1
  57. package/dist/browser/protocol.js +5 -0
  58. package/dist/browser/protocol.js.map +1 -1
  59. package/dist/commands/browser/index.d.ts.map +1 -1
  60. package/dist/commands/browser/index.js +26 -4
  61. package/dist/commands/browser/index.js.map +1 -1
  62. package/dist/commands/do.d.ts +15 -13
  63. package/dist/commands/do.d.ts.map +1 -1
  64. package/dist/commands/do.js +36 -21
  65. package/dist/commands/do.js.map +1 -1
  66. package/dist/discovery/aliases.d.ts.map +1 -1
  67. package/dist/discovery/aliases.js +26 -0
  68. package/dist/discovery/aliases.js.map +1 -1
  69. package/dist/discovery/intents.d.ts +31 -4
  70. package/dist/discovery/intents.d.ts.map +1 -1
  71. package/dist/discovery/intents.js +166 -3
  72. package/dist/discovery/intents.js.map +1 -1
  73. package/dist/discovery/loader.d.ts.map +1 -1
  74. package/dist/discovery/loader.js +3 -0
  75. package/dist/discovery/loader.js.map +1 -1
  76. package/dist/discovery/search.d.ts.map +1 -1
  77. package/dist/discovery/search.js +10 -1
  78. package/dist/discovery/search.js.map +1 -1
  79. package/dist/engine/kernel/stages.d.ts.map +1 -1
  80. package/dist/engine/kernel/stages.js +14 -4
  81. package/dist/engine/kernel/stages.js.map +1 -1
  82. package/dist/engine/objective/catalog.d.ts +23 -0
  83. package/dist/engine/objective/catalog.d.ts.map +1 -0
  84. package/dist/engine/objective/catalog.js +42 -0
  85. package/dist/engine/objective/catalog.js.map +1 -0
  86. package/dist/engine/objective/delivery.d.ts +18 -0
  87. package/dist/engine/objective/delivery.d.ts.map +1 -0
  88. package/dist/engine/objective/delivery.js +64 -0
  89. package/dist/engine/objective/delivery.js.map +1 -0
  90. package/dist/engine/objective/index.d.ts +20 -0
  91. package/dist/engine/objective/index.d.ts.map +1 -0
  92. package/dist/engine/objective/index.js +20 -0
  93. package/dist/engine/objective/index.js.map +1 -0
  94. package/dist/engine/objective/media-playback.d.ts +17 -0
  95. package/dist/engine/objective/media-playback.d.ts.map +1 -0
  96. package/dist/engine/objective/media-playback.js +186 -0
  97. package/dist/engine/objective/media-playback.js.map +1 -0
  98. package/dist/engine/objective/output.d.ts +20 -0
  99. package/dist/engine/objective/output.d.ts.map +1 -0
  100. package/dist/engine/objective/output.js +88 -0
  101. package/dist/engine/objective/output.js.map +1 -0
  102. package/dist/engine/objective/planner.d.ts +17 -0
  103. package/dist/engine/objective/planner.d.ts.map +1 -0
  104. package/dist/engine/objective/planner.js +60 -0
  105. package/dist/engine/objective/planner.js.map +1 -0
  106. package/dist/engine/objective/types.d.ts +66 -0
  107. package/dist/engine/objective/types.d.ts.map +1 -0
  108. package/dist/engine/objective/types.js +16 -0
  109. package/dist/engine/objective/types.js.map +1 -0
  110. package/dist/engine/steps/browser-helpers.d.ts.map +1 -1
  111. package/dist/engine/steps/browser-helpers.js +34 -0
  112. package/dist/engine/steps/browser-helpers.js.map +1 -1
  113. package/dist/manifest-compact.txt +3 -2
  114. package/dist/manifest.json +42 -17
  115. package/package.json +3 -1
  116. package/server.json +2 -2
  117. package/skills/unicli/SKILL.md +1 -1
  118. package/skills/unicli-claude-code/SKILL.md +1 -1
  119. package/skills/unicli-hermes/SKILL.md +1 -1
  120. package/src/adapters/_electron/desktop-shared.ts +5 -1
  121. package/src/adapters/_electron/shared.ts +15 -0
  122. package/src/adapters/antigravity/extra.ts +10 -1
  123. package/src/adapters/chatwise/extra.ts +10 -1
  124. package/src/adapters/codex/codex.ts +6 -0
  125. package/src/adapters/codex/extra.ts +10 -1
  126. package/src/adapters/codex/projects.ts +9 -1
  127. package/src/adapters/cursor/cursor.ts +9 -0
  128. package/src/adapters/discord-app/discord-app.ts +16 -1
  129. package/src/adapters/macos/brightness.yaml +6 -3
  130. package/src/adapters/macos/calendar-list.yaml +9 -11
  131. package/src/adapters/macos/calendar-today.yaml +1 -1
  132. package/src/adapters/macos/safari-url.yaml +8 -4
  133. package/src/adapters/maoyan/hot.yaml +1 -1
  134. package/src/adapters/notion-app/notion-app.ts +17 -1
  135. package/src/adapters/spotify/api.ts +54 -8
  136. package/src/adapters/weibo/trending.yaml +2 -0
  137. package/src/adapters/xiaohongshu/browser-state.ts +59 -2
  138. package/src/adapters/xiaohongshu/feed.ts +103 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../../src/engine/objective/planner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAEV,uBAAuB,EACvB,aAAa,EAKd,MAAM,YAAY,CAAC;AAMpB,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,uBAA0D,GAClE,aAAa,GAAG,SAAS,CAO3B"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @owner src/engine/objective/planner.ts
3
+ * @does Routes natural-language goals through objective workflows and validates their command refs.
4
+ * @needs src/engine/objective/catalog.ts, src/engine/objective/media-playback.ts, src/engine/objective/delivery.ts
5
+ * @feeds src/commands/do.ts and future objective execution surfaces.
6
+ * @breaks Unvalidated workflow strategies can produce non-executable delivery specs.
7
+ * @invariants All non-missing strategy commands must resolve in the live registry before delivery specs are emitted.
8
+ * @side-effects none.
9
+ * @perf O(workflow count * intent length + strategy command refs).
10
+ * @concurrency pure and reentrant after registry load.
11
+ * @test tests/unit/objective-compiler.test.ts, tests/unit/commands/do.test.ts
12
+ * @stability experimental
13
+ * @since 2026-06-01
14
+ */
15
+ import { createRegistryObjectiveCatalog } from "./catalog.js";
16
+ import { buildObjectiveDeliverySpecTemplate } from "./delivery.js";
17
+ import { mediaPlaybackWorkflow } from "./media-playback.js";
18
+ const OBJECTIVE_WORKFLOWS = [
19
+ mediaPlaybackWorkflow,
20
+ ];
21
+ export function compileObjectivePlan(intent, catalog = createRegistryObjectiveCatalog()) {
22
+ for (const workflow of OBJECTIVE_WORKFLOWS) {
23
+ const draft = workflow.compile(intent);
24
+ if (!draft)
25
+ continue;
26
+ return materializeObjectivePlan(draft, catalog);
27
+ }
28
+ return undefined;
29
+ }
30
+ function materializeObjectivePlan(draft, catalog) {
31
+ const validationGaps = [];
32
+ const strategies = draft.strategies.map((strategy) => validateStrategyCommands(strategy, catalog, validationGaps));
33
+ const plan = {
34
+ schema_version: "objective-plan.v1",
35
+ objective: draft.objective,
36
+ strategies,
37
+ capability_gaps: [...draft.capability_gaps, ...validationGaps],
38
+ };
39
+ const deliverySpec = buildObjectiveDeliverySpecTemplate(plan);
40
+ return deliverySpec
41
+ ? { ...plan, delivery_spec_template: deliverySpec }
42
+ : plan;
43
+ }
44
+ function validateStrategyCommands(strategy, catalog, gaps) {
45
+ if (strategy.status === "missing")
46
+ return strategy;
47
+ const missingStep = strategyCommandRefs(strategy).find((step) => !catalog.hasCommand(step.command));
48
+ if (!missingStep)
49
+ return strategy;
50
+ gaps.push({
51
+ provider: strategy.provider,
52
+ missing: missingStep.command,
53
+ reason: `Objective strategy ${strategy.id} references an unregistered command: ${missingStep.command}.`,
54
+ });
55
+ return { ...strategy, status: "missing" };
56
+ }
57
+ function strategyCommandRefs(strategy) {
58
+ return [...strategy.steps, strategy.verification];
59
+ }
60
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../src/engine/objective/planner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,kCAAkC,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAW5D,MAAM,mBAAmB,GAAiC;IACxD,qBAAqB;CACtB,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,UAAmC,8BAA8B,EAAE;IAEnE,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,OAAO,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAA6B,EAC7B,OAAgC;IAEhC,MAAM,cAAc,GAA6B,EAAE,CAAC;IACpD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACnD,wBAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,CAC5D,CAAC;IACF,MAAM,IAAI,GAAkB;QAC1B,cAAc,EAAE,mBAAmB;QACnC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU;QACV,eAAe,EAAE,CAAC,GAAG,KAAK,CAAC,eAAe,EAAE,GAAG,cAAc,CAAC;KAC/D,CAAC;IACF,MAAM,YAAY,GAAG,kCAAkC,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAO,YAAY;QACjB,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,sBAAsB,EAAE,YAAY,EAAE;QACnD,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,wBAAwB,CAC/B,QAA2B,EAC3B,OAAgC,EAChC,IAA8B;IAE9B,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAEnD,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC,IAAI,CACpD,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAC5C,CAAC;IACF,IAAI,CAAC,WAAW;QAAE,OAAO,QAAQ,CAAC;IAElC,IAAI,CAAC,IAAI,CAAC;QACR,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,MAAM,EAAE,sBAAsB,QAAQ,CAAC,EAAE,wCAAwC,WAAW,CAAC,OAAO,GAAG;KACxG,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,mBAAmB,CAAC,QAA2B;IACtD,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @owner src/engine/objective/types.ts
3
+ * @does Defines objective-level workflow contracts before command routing.
4
+ * @needs src/engine/delivery/types.ts, src/engine/delivery/spec.ts
5
+ * @feeds src/engine/objective/planner.ts, src/engine/objective/output.ts, src/commands/do.ts
6
+ * @breaks Weak objective contracts let stateful goals fall back to raw command search.
7
+ * @invariants Objective plans are plan-only and must expose capability gaps instead of pretending missing app control works.
8
+ * @side-effects none
9
+ * @perf type-only module.
10
+ * @concurrency type-only module.
11
+ * @test tests/unit/objective-compiler.test.ts, tests/unit/commands/do.test.ts
12
+ * @stability experimental
13
+ * @since 2026-06-01
14
+ */
15
+ import type { DeliveryEvidenceGate } from "../delivery/types.js";
16
+ import type { DeliveryOperatorSpec } from "../delivery/spec.js";
17
+ export type ObjectiveKind = "media.playback";
18
+ export type ObjectiveStrategySubstrate = "native-api" | "desktop-cdp" | "desktop-ax" | "visual-fallback";
19
+ export type ObjectiveStrategyStatus = "executable" | "partial" | "missing";
20
+ export interface ObjectivePlan {
21
+ schema_version: "objective-plan.v1";
22
+ objective: {
23
+ id: string;
24
+ kind: ObjectiveKind;
25
+ goal: string;
26
+ confidence: number;
27
+ slots: Record<string, unknown>;
28
+ evidence_gates: DeliveryEvidenceGate[];
29
+ };
30
+ strategies: ObjectiveStrategy[];
31
+ capability_gaps: ObjectiveCapabilityGap[];
32
+ delivery_spec_template?: DeliveryOperatorSpec;
33
+ }
34
+ export interface ObjectiveStrategy {
35
+ id: string;
36
+ label: string;
37
+ provider: string;
38
+ substrate: ObjectiveStrategySubstrate;
39
+ status: ObjectiveStrategyStatus;
40
+ priority: number;
41
+ steps: ObjectiveStep[];
42
+ verification: ObjectiveStep;
43
+ }
44
+ export interface ObjectiveStep {
45
+ command: string;
46
+ args?: Record<string, unknown>;
47
+ purpose: string;
48
+ }
49
+ export interface ObjectiveCapabilityGap {
50
+ provider: string;
51
+ missing: string;
52
+ reason: string;
53
+ }
54
+ export interface ObjectiveCommandCatalog {
55
+ hasCommand(command: string): boolean;
56
+ }
57
+ export interface ObjectiveWorkflowDraft {
58
+ objective: ObjectivePlan["objective"];
59
+ strategies: ObjectiveStrategy[];
60
+ capability_gaps: ObjectiveCapabilityGap[];
61
+ }
62
+ export interface ObjectiveWorkflow {
63
+ id: ObjectiveKind;
64
+ compile(intent: string): ObjectiveWorkflowDraft | undefined;
65
+ }
66
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engine/objective/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAE7C,MAAM,MAAM,0BAA0B,GAClC,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,iBAAiB,CAAC;AAEtB,MAAM,MAAM,uBAAuB,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;AAE3E,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,mBAAmB,CAAC;IACpC,SAAS,EAAE;QACT,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,aAAa,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,cAAc,EAAE,oBAAoB,EAAE,CAAC;KACxC,CAAC;IACF,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,eAAe,EAAE,sBAAsB,EAAE,CAAC;IAC1C,sBAAsB,CAAC,EAAE,oBAAoB,CAAC;CAC/C;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,0BAA0B,CAAC;IACtC,MAAM,EAAE,uBAAuB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,YAAY,EAAE,aAAa,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACtC,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,eAAe,EAAE,sBAAsB,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,aAAa,CAAC;IAClB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAAC;CAC7D"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @owner src/engine/objective/types.ts
3
+ * @does Defines objective-level workflow contracts before command routing.
4
+ * @needs src/engine/delivery/types.ts, src/engine/delivery/spec.ts
5
+ * @feeds src/engine/objective/planner.ts, src/engine/objective/output.ts, src/commands/do.ts
6
+ * @breaks Weak objective contracts let stateful goals fall back to raw command search.
7
+ * @invariants Objective plans are plan-only and must expose capability gaps instead of pretending missing app control works.
8
+ * @side-effects none
9
+ * @perf type-only module.
10
+ * @concurrency type-only module.
11
+ * @test tests/unit/objective-compiler.test.ts, tests/unit/commands/do.test.ts
12
+ * @stability experimental
13
+ * @since 2026-06-01
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/engine/objective/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -1 +1 @@
1
- {"version":3,"file":"browser-helpers.d.ts","sourceRoot":"","sources":["../../../src/engine/steps/browser-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAyBzD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAkD5E;AA0CD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,WAAW,EACjB,KAAK,SAAO,EACZ,OAAO,SAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAkBf"}
1
+ {"version":3,"file":"browser-helpers.d.ts","sourceRoot":"","sources":["../../../src/engine/steps/browser-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAyBzD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAoD5E;AAqFD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,WAAW,EACjB,KAAK,SAAO,EACZ,OAAO,SAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -35,6 +35,9 @@ export async function acquirePage(ctx) {
35
35
  : await acquireConnectedDaemonPage();
36
36
  if (daemonPage)
37
37
  return daemonPage;
38
+ const userSessionPage = await acquireUserSessionCdpPage(ctx);
39
+ if (userSessionPage)
40
+ return userSessionPage;
38
41
  }
39
42
  else if (ctx.browserSession !== "cdp") {
40
43
  const daemonPage = await acquireConnectedDaemonPage();
@@ -80,6 +83,37 @@ export async function acquirePage(ctx) {
80
83
  throw new Error(`Cannot connect to Chrome. Run "unicli browser start" first. (${err instanceof Error ? err.message : String(err)})`);
81
84
  }
82
85
  }
86
+ async function acquireUserSessionCdpPage(ctx) {
87
+ const { automationUserDataDirForProfile, readUserDataDirDebugPort, resolvePreferredLocalBrowserProfile, } = await import("../../browser/local-profiles.js");
88
+ const profile = resolvePreferredLocalBrowserProfile();
89
+ if (!profile)
90
+ return null;
91
+ const { resolveCdpPort } = await import("../../browser/cdp-client.js");
92
+ const { BrowserPage: BP } = await import("../../browser/page.js");
93
+ const { injectStealth } = await import("../../browser/stealth.js");
94
+ const { findAvailableCDPPort, isCDPAvailable, launchChrome } = await import("../../browser/launcher.js");
95
+ const userDataDir = automationUserDataDirForProfile(profile);
96
+ const recorded = readUserDataDirDebugPort(userDataDir);
97
+ const livePort = recorded.state === "recorded" &&
98
+ typeof recorded.port === "number" &&
99
+ (await isCDPAvailable(recorded.port))
100
+ ? recorded.port
101
+ : null;
102
+ const port = livePort ?? (await findAvailableCDPPort(resolveCdpPort()));
103
+ if (livePort === null) {
104
+ await launchChrome(port, {
105
+ ...(profile.browser_path_exists
106
+ ? { browserPath: profile.browser_path }
107
+ : {}),
108
+ userDataDir,
109
+ reuseExisting: false,
110
+ });
111
+ }
112
+ const page = await BP.connect(port, { freshPage: true });
113
+ await injectStealth(page.sendCDP.bind(page));
114
+ await syncUserSessionCookies(page, ctx);
115
+ return page;
116
+ }
83
117
  async function launchOptionsForContext(ctx) {
84
118
  if (ctx.browserSession !== "user")
85
119
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"browser-helpers.js","sourceRoot":"","sources":["../../../src/engine/steps/browser-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-helpers.js","sourceRoot":"","sources":["../../../src/engine/steps/browser-helpers.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  shopping: 1688(assets, download, item, search, store), amazon(bestsellers, discussion, movers-shakers, new-releases, offer, product, rankings, search), coupang(add-to-cart, hot, product, search), dangdang(hot, search), dianping(hot, search, shop), ele(hot, search), jd(add-cart, cart, detail, hot, item, reviews, search), maoyan(hot, search), meituan(search), pinduoduo(hot, search), smzdm(article, hot, search), taobao(add-cart, cart, detail, hot, reviews, search), xianyu(chat, item, publish, search)
2
- other: 12306(price, stations, trains), adguardhome(add-rule, rules, stats, status, toggle), aibase(news), autoagent(eval-run), aws(s3-ls), baidu(hot, search), brave(search), chrome(bookmarks, tabs), ctrip(flight, hotel-search, hotel-suggest, search), doctl(droplets), duckduckgo(search, suggest), endoflife(product), flathub(app, search), flyctl(apps), godot(project-run, scene-export), gov-law(recent, search), gov-policy(recent, search), hermes(sessions-search, skills-list, skills-read), itch-io(popular, search, top), jianyu(detail, search), jq(format, query), ke(chengjiao, ershoufang, xiaoqu, zufang), leetcode(discuss-search), lens(get, search), lichess(top, user), mdn(search), motion-studio(component-get), neonctl(projects), netlify(sites), nvd(cve), oeis(search, sequence), openfda(drug-label, food-recall), pdf(read), pexels(curated, search), powerchina(search), pscale(databases), railway(deploy), rest-countries(country, region), rfc(rfc), sketch(artboards, export, symbols), slay-the-spire-ii(deck, end-turn, map, play-card, status, use-potion), slock(servers), stagehand(wrap-observe), supabase(projects), tdx(hot-rank), ths(hot-rank), tvmaze(search, show), uisdc(news), uiverse(code, preview), ukipo(info), unsplash(random, search), vercel(list), wechat-channels(hot, search), wikidata(entity, search), wipo-patentscope(info), wrangler(list), wttr(current, forecast), xiaoe(catalog, content, courses, detail, play-url), yahoo(search), ycombinator(launches), zlibrary(info, search)
2
+ other: 12306(price, stations, trains), adguardhome(add-rule, rules, stats, status, toggle), aibase(news), autoagent(eval-run), aws(s3-ls), baidu(hot, search), brave(search), chrome(bookmarks, tabs), doctl(droplets), duckduckgo(search, suggest), endoflife(product), flathub(app, search), flyctl(apps), godot(project-run, scene-export), gov-law(recent, search), gov-policy(recent, search), hermes(sessions-search, skills-list, skills-read), itch-io(popular, search, top), jianyu(detail, search), jq(format, query), ke(chengjiao, ershoufang, xiaoqu, zufang), leetcode(discuss-search), lens(get, search), lichess(top, user), mdn(search), motion-studio(component-get), neonctl(projects), netlify(sites), nvd(cve), oeis(search, sequence), openfda(drug-label, food-recall), pdf(read), pexels(curated, search), powerchina(search), pscale(databases), railway(deploy), rest-countries(country, region), rfc(rfc), sketch(artboards, export, symbols), slay-the-spire-ii(deck, end-turn, map, play-card, status, use-potion), slock(servers), stagehand(wrap-observe), supabase(projects), tdx(hot-rank), ths(hot-rank), tvmaze(search, show), uisdc(news), uiverse(code, preview), ukipo(info), unsplash(random, search), vercel(list), wechat-channels(hot, search), wikidata(entity, search), wipo-patentscope(info), wrangler(list), wttr(current, forecast), xiaoe(catalog, content, courses, detail, play-url), yahoo(search), ycombinator(launches), zlibrary(info, search)
3
3
  social: 1point3acres(digest, forum, forums, hot, latest, notifications, search, thread, user), band(bands, mentions, post, posts), bluesky(feeds, followers, following, likes, notifications, post, profile, search, starter-packs, thread, trending, user), dingtalk(click-text, dump, open-app, press, snapshot-app, status-app, type-text, version), discord-app(channels, click-text, delete, dump, members, open-app, press, read, search, send, servers, snapshot-app, status, status-app, type-text), douban(book-hot, download, group-hot, marks, movie-hot, new-movies, photos, reviews, search, subject, top250, tv-hot), facebook(add-friend, events, feed, friends, groups, join-group, marketplace, marketplace-inbox, marketplace-listings, memories, notifications, post, profile, search, subtitles), feishu(calendar, docs, send, tasks), hupu(detail, hot, like, mentions, reply, search, unlike), imessage(contact, recent, search), instagram(activity, collection-create, collection-delete, comment, download, explore, follow, followers, following, highlights, like, note, post, profile, reel, reels, reels-trending, save, saved, search, stories, story, subtitles, suggested, tags, unfollow, unlike, unsave, user), jike(comment, create, feed, like, notifications, post, repost, search, topic, user), lark(click-text, dump, open-app, press, snapshot-app, status-app, type-text, version), linux-do(categories, category, feed, hot, latest, search, tags, topic, topic-content, user-posts, user-topics), lobsters(active, domain, hot, newest, read, search, tag), mastodon(search, statuses, timeline, trending, user), reddit(comment, comments, frontpage, home, hot, new, popular, read, reply, rising, save, saved, search, subreddit, subreddit-info, subscribe, top, trending, upvote, upvoted, user, user-comments, user-posts, whoami), rednote(comments, download, feed, note, notifications, search, user), slack(channels, click-text, dump, messages, open-app, post, press, search, send, snapshot-app, status, status-app, type-text, users), threads(hot, media, post, profile, search, user), tieba(hot, posts, read, search), twitter(accept, article, block, bookmark, bookmark-folder, bookmark-folders, bookmarks, comments, delete, download, follow, followers, following, hide-reply, like, likes, list-add, list-remove, list-tweets, lists, media, mentions, mute, notifications, pin, post, profile, quote, quotes, reply, reply-dm, retweet, retweets, search, spaces, thread, timeline, trending, tweets, unblock, unbookmark, unfollow, unlike, unmute, unretweet, user-timeline, user-tweets), v2ex(daily, hot, latest, me, member, node, nodes, notifications, replies, search, topic, user), weibo(comments, favorites, feed, hot, me, post, profile, publish, search, timeline, trending, user), weixin(article, create-draft, download, drafts, hot, search), xiaohongshu(comments, creator-note-detail, creator-notes, creator-notes-summary, creator-profile, creator-stats, download, feed, follow, hashtag, hot, like, note, notifications, profile, publish, save, search, suggest, trending, unfollow, user), zhihu(answer, answer-detail, answers, article, articles, collection, collections, columns, comment, download, favorite, feed, follow, followers, following, hot, like, me, notifications, pins, question, recommend, search, topic, topics, trending, user), zoom(join, start, toggle-mute), signal(click-text, dump, open-app, press, snapshot-app, status-app, type-text), whatsapp(click-text, dump, open-app, press, snapshot-app, status-app, type-text), teams(click-text, dump, open-app, press, snapshot-app, status-app, type-text), wechat-work(click-text, dump, open-app, press, snapshot-app, status-app, type-text), zoom-app(click-text, dump, open-app, press, snapshot-app, status-app, type-text)
4
4
  news: 36kr(article, hot, latest, news, search), bbc(news, technology, top, topic, world), bloomberg(businessweek, economics, feeds, industries, main, markets, news, opinions, politics, tech), cnn(technology, top), hackernews(ask, best, comments, item, jobs, new, read, search, show, top, user), infoq(articles, latest), ithome(hot, latest, news), nytimes(search, top), reuters(article, article-detail, latest, search, top), techcrunch(latest, search), theverge(latest, search)
5
5
  jobs: 51job(company, detail, hot, search), boss(batchgreet, chatlist, chatmsg, detail, exchange, greet, invite, joblist, mark, recommend, resume, search, send, stats), indeed(job, search), linkedin(jobs, profile, search, timeline), maimai(search, search-talents), nowcoder(companies, creators, detail, experience, hot, jobs, notifications, papers, practice, recommend, referral, salary, search, suggest, topics, trending)
@@ -7,12 +7,13 @@ scholarly: acl-anthology(paper, search), arxiv(author, download, paper, recent,
7
7
  reference: anilist(anime, characters, manga, staff, studios), bangumi(anime, book, characters, game, subject), chaoxing(assignments, exams), dictionary(examples, search, synonyms), google(news, search, suggest, trends), imdb(box-office, person, reviews, search, title, top, trending), jikan(anime, characters, manga, people), kitsu(anime, manga), mangadex(authors, manga), marxists-cn(authors, index, read, reading-list, search, western-marxism, works), moegirl(links, page, search), wikipedia(page, random, search, summary, today, trending)
8
8
  ai: antigravity(ask, click-text, dump, extract-code, model, new, open-app, press, read, screenshot, send, snapshot-app, status, status-app, type-text, watch), chatgpt(ask, click-text, detail, dump, history, image, model, new, open-app, press, read, screenshot, send, snapshot-app, status, status-app, type-text), chatgpt-app(ask, dump, model, new, read, screenshot, send, status), chatwise(ask, click-text, dump, export, history, model, new, open-app, press, read, screenshot, send, snapshot-app, status, status-app, type-text), claude(ask, click-text, detail, dump, history, new, open-app, press, read, send, snapshot-app, status, status-app, type-text), deepseek(ask, chat, detail, history, models, new, read, send, status), doubao(ask, detail, history, meeting-summary, meeting-transcript, new, read, send, status), doubao-app(ask, click-text, dump, new, open-app, press, read, screenshot, send, snapshot-app, status, status-app, type-text), doubao-web(ask, detail, history, meeting-summary, meeting-transcript, new, read, send, status), gemini(ask, deep-research, deep-research-result, image, new), grok(ask, detail, history, image, new, read, send, status), hf(datasets, models, paper, spaces, top), jimeng(generate, history, new, workspaces), minimax(chat, models, tts), notebooklm(current, get, history, list, note-list, notes-get, open, rpc, shared, source-fulltext, source-get, source-guide, source-list, status, summary), novita(generate, models, status), ollama(generate, list, models, ps), openrouter(models, search), perplexity(ask, click-text, dump, open-app, press, snapshot-app, status-app, type-text), qwen(ask, detail, history, image, new, read, send, status), replicate(run, search, trending), yollomi(background, edit, face-swap, generate, models, object-remover, remove-bg, restore, try-on, upload, upscale, video), yuanbao(ask, detail, history, new, read, send, shared, status), lm-studio(click-text, dump, open-app, press, snapshot-app, status-app, type-text)
9
9
  productivity: apple-notes(list, read, search), mubu(doc, docs, list, notes, recent, search), notion(click-text, databases, dump, export, favorites, new, open-app, pages, press, read, screenshot, search, sidebar, snapshot-app, status, status-app, type-text, write), obsidian(click-text, daily, dump, open, open-app, press, search, snapshot-app, status-app, type-text), ones(enrich-tasks, login, logout, me, my-tasks, resolve-labels, task, task-helpers, tasks, token-info, worklog), quark(ls, mkdir, mv, rename, rm, save, search, share-tree), logseq(click-text, dump, open-app, press, snapshot-app, status-app, type-text), typora(click-text, dump, open-app, press, snapshot-app, status-app, type-text), evernote-app(click-text, dump, open-app, press, snapshot-app, status-app, type-text)
10
- audio: apple-podcasts(episodes, search, top), netease-music(click-text, dump, hot, next, open-app, pause, play, play-liked, playlist, press, prev, search, snapshot-app, status-app, toggle, top, type-text), spotify(auth, click-text, dump, next, now-playing, open-app, pause, play, play-liked, playlists, press, prev, queue, repeat, search, shuffle, snapshot-app, status, status-app, toggle, top-tracks, type-text, volume), xiaoyuzhou(download, episode, podcast, podcast-episodes, transcript)
10
+ audio: apple-podcasts(episodes, search, top), netease-music(click-text, dump, hot, next, open-app, pause, play, play-liked, playlist, press, prev, search, snapshot-app, status-app, toggle, top, type-text), spotify(auth, click-text, dump, next, now-playing, open-app, pause, play, play-liked, play-track, playlists, press, prev, queue, repeat, search, shuffle, snapshot-app, status, status-app, toggle, top-tracks, type-text, volume), xiaoyuzhou(download, episode, podcast, podcast-episodes, transcript)
11
11
  desktop: audacity(convert, effects, info, mix, normalize, spectrogram, split-channels, trim), blender(animation, camera, convert, export, import, info, lighting, materials, objects, render, scene, screenshot, script), cloudcompare(compare, convert, info, subsample), comfyui(generate, history, nodes, status), docker(build, images, logs, networks, ps, run, volumes), drawio(export), excel(insert-image, insert-link, list, read, set-cell, set-font, status), ffmpeg(compress, concat, convert, extract-audio, gif, normalize, probe, resize, subtitles, thumbnail, trim), figma(click-text, dump, export-selected, open-app, press, snapshot-app, status-app, type-text), freecad(assembly, bom, boolean, check, convert, export-stl, import, info, macro, measure, mesh, properties, render, section, sketch), gimp(adjust, batch, convert, crop, filter, flip, info, layers, merge-layers, resize, rotate, text), imagemagick(compare, composite, convert, identify, montage, resize), inkscape(convert, export, optimize), kdenlive(effects, info, render), krita(batch, convert, export, info), libreoffice(convert, print), macos(active-app, app-actions, apps, apps-list, automation-smoke, battery, bluetooth, brightness, caffeinate, calendar-create, calendar-list, calendar-today, clipboard, contacts-search, dark-mode, disk-info, disk-usage, do-not-disturb, empty-trash, finder-copy, finder-move, finder-new-folder, finder-recent, finder-selection, finder-tags, lock-screen, mail-send, mail-status, messages-send, music-control, music-now, notes-list, notes-search, notification, notify, open, open-app, photos-search, processes, reminder-create, reminders-complete, reminders-list, safari-history, safari-tabs, safari-url, say, screen-lock, screen-recording, screenshot, shortcuts-list, shortcuts-run, sleep, spotlight, system-info, trash, uptime, volume, wallpaper, wifi, wifi-info), mermaid(render), musescore(convert, export, info, instruments, transpose), obs(record-start, record-stop, scenes, screenshot, sources, status, stream-start, stream-stop), pandoc(convert), powerpoint(add-slide, insert-image, insert-link, list, set-font, slides, status), renderdoc(capture-list, frame-export), shotcut(effects, info, render), word(insert-image, insert-link, insert-text, list, read, set-font, status)
12
12
  finance: barchart(flow, greeks, options, quote), binance(asks, depth, gainers, hot, kline, klines, losers, pairs, price, prices, ticker, top, trades), coinbase(prices, rates), coingecko(categories, coin, derivatives, exchanges, global, top, trending), defillama(protocol, protocols), eastmoney(announcement, convertible, etf, fund, holders, hot, hot-rank, index-board, kline, kuaixun, longhu, market, money-flow, northbound, quote, rank, search, sectors), futu(hot, quote), sinafinance(market, news, rolling-news, stock, stock-rank), xueqiu(comments, earnings-date, feed, fund-holdings, fund-snapshot, groups, hot, hot-stock, kline, market, quote, search, stock, watchlist), yahoo-finance(quote, search, trending)
13
13
  video: bilibili(coin, comments, download, dynamic, favorite, favorites, feed, feed-detail, following, history, hot, later, live, me, ranking, search, subtitle, trending, user-videos, video), douyin(activities, collections, delete, draft, drafts, hashtag, location, profile, publish, stats, update, user-videos, videos), douyu(hot, search), kuaishou(hot, search), tiktok(comment, creator-videos, explore, follow, following, friends, like, live, notifications, profile, save, search, subtitles, trending, unfollow, unlike, unsave, user), twitch(games, search, streams, top), youtube(channel, comments, feed, history, like, playlist, search, shorts, subscribe, subscriptions, subtitles, transcript, trending, unlike, unsubscribe, video, watch-later), yt-dlp(download, extract-audio, info, search, subtitles)
14
14
  patent: cipo(get, legal-status, search), cnipa(get, legal-status, search), dpma(get, search), epo(family, get, legal-status, search), espacenet(family, get, legal-status, search), fips(get, search), freepatentsonline-web(get, search), google-patents-bq(prior-art, search), google-patents-web(get, search), inpi-br(get, search), inpi-fr(get, search), ipaustralia(get, search), jpo(get, search), kipris(get, legal-status, search), patsnap(get, search), pqai(prior-art, search), uspto(get, legal-status, search)
15
15
  dev: claude-code(version), cocoapods(info, search), codex(ask, click-text, dump, export, extract-diff, history, model, new, open-app, press, projects, read, screenshot, send, snapshot-app, status, status-app, type-text), codex-cli(version), crates(crate, search), crates-io(info, search, versions), cursor(ask, click-text, composer, dump, export, extract-code, history, model, new, open-app, press, read, screenshot, send, snapshot-app, status, status-app, type-text), devto(latest, read, search, tag, top, user), docker-hub(info, search, tags), dockerhub(image, search), gh(issue, pr, release, repo, run, search-repos), gitee(repos, search, trending, user), github-trending(daily, developers, weekly), gitlab(projects, search, trending), goproxy(module, versions), homebrew(cask, formula, info, popular, search), juejin(hot, search), maven(artifact, info, search), npm(downloads, info, package, search, versions), npm-trends(compare, trending), nuget(info, package, search), opencode(version), openharness(memory-read, skills-list), osv(query, vulnerability), packagist(info, package, search), producthunt(browse, hot, posts, search, today), pub-dev(info, search), pypi(downloads, info, package, search, versions), rubygems(gem, info, search), stackoverflow(bounties, hot, question, read, related, search, tag, tags, unanswered, user), vscode(click-text, dump, extensions, install-ext, open, open-app, press, snapshot-app, status-app, type-text), wiremock(create-stub, delete-stub, reset, stubs, verify), postman(click-text, dump, open-app, press, snapshot-app, status-app, type-text), insomnia(click-text, dump, open-app, press, snapshot-app, status-app, type-text), github-desktop(click-text, dump, open-app, press, snapshot-app, status-app, type-text), gitkraken(click-text, dump, open-app, press, snapshot-app, status-app, type-text), docker-desktop(click-text, dump, open-app, press, snapshot-app, status-app, type-text)
16
+ travel: ctrip(flight, hotel-search, hotel-suggest, search)
16
17
  content: danbooru(artists, comments, detail, download, pools, search, tags, wiki), dlsite(cg, creator, game, genre, maker, manga, search, work), ehentai(artist, gallery, pages, search, tag, torrents), konachan(detail, download, search, tags), lesswrong(comments, curated, frontpage, new, read, sequences, shortform, tag, tags, top, top-month, top-week, top-year, user, user-posts), medium(article, feed, search, tag, trending, user), pixiv(detail, download, illusts, ranking, search, user), safebooru(detail, download, search, tags), sinablog(article, hot, search, user), sspai(hot, latest), substack(feed, publication, search, trending), toutiao(articles, hot, search), vndb(characters, producers, releases, search, staff, tags, vn), weread(ai-outline, book, highlights, notebooks, notes, ranking, search, shelf), yandere(detail, download, search, tags), zsxq(dynamics, groups, search, topic, topics)
17
18
  utility: exchangerate(convert, list), ip-info(lookup), linear(click-text, dump, issue-create, issue-list, issue-update, open-app, press, snapshot-app, status-app, type-text), qweather(forecast, now), web(read), bitwarden(click-text, dump, open-app, press, snapshot-app, status-app, type-text), todoist(click-text, dump, open-app, press, snapshot-app, status-app, type-text)
18
19
  games: steam(app, app-details, new-releases, search, specials, top-sellers, wishlist)
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.225.0",
2
+ "version": "0.225.1",
3
3
  "sites": {
4
4
  "1688": {
5
5
  "commands": [
@@ -8672,7 +8672,7 @@
8672
8672
  "target_surface": ""
8673
8673
  }
8674
8674
  ],
8675
- "category": "other"
8675
+ "category": "travel"
8676
8676
  },
8677
8677
  "cursor": {
8678
8678
  "commands": [
@@ -25343,7 +25343,8 @@
25343
25343
  "quarantined": false,
25344
25344
  "args": [],
25345
25345
  "columns": [
25346
- "brightness"
25346
+ "brightness",
25347
+ "status"
25347
25348
  ],
25348
25349
  "pipeline_steps": 1,
25349
25350
  "adapter_path": "src/adapters/macos/brightness.yaml"
@@ -26204,6 +26205,7 @@
26204
26205
  "quarantined": false,
26205
26206
  "args": [],
26206
26207
  "columns": [
26208
+ "state",
26207
26209
  "url",
26208
26210
  "title"
26209
26211
  ],
@@ -37283,6 +37285,31 @@
37283
37285
  "adapter_path": "src/adapters/electron-desktop/electron-desktop.ts",
37284
37286
  "target_surface": "desktop"
37285
37287
  },
37288
+ {
37289
+ "name": "play-track",
37290
+ "description": "Search Spotify for a track query and start playback",
37291
+ "strategy": "cookie",
37292
+ "type": "web-api",
37293
+ "domain": "api.spotify.com",
37294
+ "columns": [
37295
+ "ok",
37296
+ "query",
37297
+ "track",
37298
+ "artist",
37299
+ "uri"
37300
+ ],
37301
+ "args": [
37302
+ {
37303
+ "name": "query",
37304
+ "type": "str",
37305
+ "required": true,
37306
+ "positional": true
37307
+ }
37308
+ ],
37309
+ "pipeline_steps": 0,
37310
+ "adapter_path": "src/adapters/spotify/api.ts",
37311
+ "target_surface": ""
37312
+ },
37286
37313
  {
37287
37314
  "name": "playlists",
37288
37315
  "description": "Get user's playlists on Spotify",
@@ -44564,31 +44591,29 @@
44564
44591
  },
44565
44592
  {
44566
44593
  "name": "feed",
44567
- "description": "Xiaohongshu home feed (via Pinia Store Action)",
44568
- "strategy": "intercept",
44594
+ "description": "Xiaohongshu home feed",
44595
+ "strategy": "cookie",
44569
44596
  "type": "web-api",
44570
44597
  "domain": "www.xiaohongshu.com",
44571
44598
  "browser": true,
44572
- "quarantined": false,
44599
+ "columns": [
44600
+ "title",
44601
+ "author",
44602
+ "likes",
44603
+ "type",
44604
+ "url"
44605
+ ],
44573
44606
  "args": [
44574
44607
  {
44575
44608
  "name": "limit",
44576
44609
  "type": "int",
44577
- "required": false,
44578
- "positional": false,
44579
44610
  "default": 20,
44580
44611
  "description": "Number of items to return"
44581
44612
  }
44582
44613
  ],
44583
- "columns": [
44584
- "title",
44585
- "author",
44586
- "likes",
44587
- "type",
44588
- "url"
44589
- ],
44590
- "pipeline_steps": 4,
44591
- "adapter_path": "src/adapters/xiaohongshu/feed.yaml"
44614
+ "pipeline_steps": 0,
44615
+ "adapter_path": "src/adapters/xiaohongshu/feed.ts",
44616
+ "target_surface": ""
44592
44617
  },
44593
44618
  {
44594
44619
  "name": "follow",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenalexa/unicli",
3
- "version": "0.225.0",
3
+ "version": "0.225.1",
4
4
  "description": "Universal computer-control platform for agents: intent, policy, action substrates, evidence, delivery, and repair.",
5
5
  "packageManager": "npm@11.14.0",
6
6
  "type": "module",
@@ -155,11 +155,13 @@
155
155
  "test": "vitest run --project unit --maxWorkers=1 --reporter=dot",
156
156
  "test:adapter": "vitest run --project adapter",
157
157
  "test:perf": "vitest run --project perf",
158
+ "e2e:real": "npm run build && tsx scripts/e2e-real-matrix.ts",
158
159
  "compute:smoke": "tsx scripts/compute-live-smoke.ts",
159
160
  "coverage:compute-snapshot": "vitest run --project unit tests/unit/refs.test.ts tests/unit/snapshot-encoder.test.ts --coverage --coverage.enabled=true --coverage.provider=v8 --coverage.include=src/transport/refs.ts --coverage.include=src/transport/snapshot-encoder.ts --coverage.reporter=text --coverage.thresholds.lines=100 --coverage.thresholds.functions=100 --coverage.thresholds.branches=100 --coverage.thresholds.statements=100",
160
161
  "coverage:adapter-test": "tsx scripts/check-adapter-test-coverage.ts --threshold 50",
161
162
  "adapter:bootstrap": "tsx scripts/bootstrap-adapter-tests.ts",
162
163
  "adapter:health": "tsx scripts/adapter-health-probe.ts",
164
+ "site:availability": "tsx scripts/site-availability-sweep.ts",
163
165
  "test:all": "vitest run",
164
166
  "typecheck": "tsc --noEmit",
165
167
  "lint": "oxlint src/",
package/server.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
3
3
  "name": "io.github.olo-dot-io/Uni-CLI",
4
4
  "description": "Self-repairing CLI catalog that exposes 311 websites, desktop apps, and external CLIs as one MCP server. 977 declarative YAML adapters and 1753 commands; structured error envelopes let agents fix failing adapters at runtime and retry.",
5
- "version": "0.225.0",
5
+ "version": "0.225.1",
6
6
  "repository": {
7
7
  "url": "https://github.com/olo-dot-io/Uni-CLI",
8
8
  "source": "github"
@@ -13,7 +13,7 @@
13
13
  "registryType": "npm",
14
14
  "registryBaseUrl": "https://registry.npmjs.org",
15
15
  "identifier": "@zenalexa/unicli",
16
- "version": "0.225.0",
16
+ "version": "0.225.1",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  },
@@ -11,7 +11,7 @@ description: >
11
11
  major platform; run desktop workflows or system tasks; or when the user says
12
12
  "unicli", "scrape", "fetch from", "get trending", "check [site]", "find on
13
13
  [platform]", "获取", "查询", "抓取".
14
- version: 0.225.0
14
+ version: 0.225.1
15
15
  category: core
16
16
  depends-on:
17
17
  - talk-normal
@@ -6,7 +6,7 @@ description: >
6
6
  newlines, or inline JSON — shell-quoted invocations hit TC0 circuit
7
7
  limits and drop to <50% success above ICS=4. Also covers --describe
8
8
  introspection and next_actions-driven navigation.
9
- version: 0.225.0
9
+ version: 0.225.1
10
10
  depends-on:
11
11
  - talk-normal
12
12
  triggers:
@@ -4,7 +4,7 @@ description: >
4
4
  Use Uni-CLI to interact with 237 websites, desktop apps, and system tools.
5
5
  Trigger when: user asks to check a website, fetch data, control a desktop app,
6
6
  or interact with social media, news, finance, or AI platforms.
7
- version: 0.225.0
7
+ version: 0.225.1
8
8
  depends-on:
9
9
  - talk-normal
10
10
  triggers:
@@ -4,7 +4,10 @@ import {
4
4
  resolveAppControlPolicy,
5
5
  } from "../../electron-apps.js";
6
6
  import { launchElectronApp } from "../../browser/launcher.js";
7
- import { connectElectronApp } from "./shared.js";
7
+ import {
8
+ connectElectronApp,
9
+ ELECTRON_APP_MINIMUM_CAPABILITY,
10
+ } from "./shared.js";
8
11
  import type { BrowserPage } from "../../browser/page.js";
9
12
 
10
13
  export interface ElectronMediaProfile {
@@ -39,6 +42,7 @@ export const ELECTRON_DESKTOP_MEDIA_COMMANDS = [
39
42
  const ELECTRON_DESKTOP_COMMAND_META = {
40
43
  adapter_path: "src/adapters/electron-desktop/electron-desktop.ts",
41
44
  target_surface: "desktop" as const,
45
+ minimum_capability: ELECTRON_APP_MINIMUM_CAPABILITY,
42
46
  };
43
47
 
44
48
  export function registerElectronDesktopCommands(
@@ -15,6 +15,20 @@ import { CDPClient } from "../../browser/cdp-client.js";
15
15
  import { BrowserPage } from "../../browser/page.js";
16
16
  import { injectStealth } from "../../browser/stealth.js";
17
17
 
18
+ export const ELECTRON_APP_MINIMUM_CAPABILITY = "cdp-browser.cdp_attach";
19
+
20
+ export function electronAppCommandMeta(adapterPath: string): {
21
+ adapter_path: string;
22
+ target_surface: "desktop";
23
+ minimum_capability: typeof ELECTRON_APP_MINIMUM_CAPABILITY;
24
+ } {
25
+ return {
26
+ adapter_path: adapterPath,
27
+ target_surface: "desktop",
28
+ minimum_capability: ELECTRON_APP_MINIMUM_CAPABILITY,
29
+ };
30
+ }
31
+
18
32
  /**
19
33
  * Connect to an Electron app via CDP.
20
34
  * Launches the app if not running.
@@ -77,6 +91,7 @@ export function registerAIChatCommands(
77
91
  const desktopCommandMeta = {
78
92
  adapter_path: `src/adapters/${site}/${site}.ts`,
79
93
  target_surface: "desktop" as const,
94
+ minimum_capability: ELECTRON_APP_MINIMUM_CAPABILITY,
80
95
  };
81
96
 
82
97
  /** Escape single quotes in selectors for use in evaluate strings */
@@ -1,7 +1,14 @@
1
1
  import { cli, Strategy } from "../../registry.js";
2
- import { connectElectronApp } from "../_electron/shared.js";
2
+ import {
3
+ connectElectronApp,
4
+ electronAppCommandMeta,
5
+ } from "../_electron/shared.js";
3
6
  import { intArg } from "../_shared/browser-tools.js";
4
7
 
8
+ const ANTIGRAVITY_COMMAND_META = electronAppCommandMeta(
9
+ "src/adapters/antigravity/extra.ts",
10
+ );
11
+
5
12
  async function readAntigravityText(): Promise<string> {
6
13
  const page = await connectElectronApp("antigravity");
7
14
  const text = await page.evaluate("document.body?.innerText ?? ''");
@@ -13,6 +20,7 @@ cli({
13
20
  name: "extract-code",
14
21
  description: "Extract code blocks from the active Antigravity conversation",
15
22
  strategy: Strategy.PUBLIC,
23
+ ...ANTIGRAVITY_COMMAND_META,
16
24
  columns: ["language", "code"],
17
25
  func: async () => {
18
26
  const page = await connectElectronApp("antigravity");
@@ -32,6 +40,7 @@ cli({
32
40
  name: "watch",
33
41
  description: "Poll Antigravity conversation text for updates",
34
42
  strategy: Strategy.PUBLIC,
43
+ ...ANTIGRAVITY_COMMAND_META,
35
44
  args: [
36
45
  { name: "interval", type: "int", default: 2 },
37
46
  { name: "iterations", type: "int", default: 5 },
@@ -1,12 +1,20 @@
1
1
  import { cli, Strategy } from "../../registry.js";
2
- import { connectElectronApp } from "../_electron/shared.js";
2
+ import {
3
+ connectElectronApp,
4
+ electronAppCommandMeta,
5
+ } from "../_electron/shared.js";
3
6
  import { intArg } from "../_shared/browser-tools.js";
4
7
 
8
+ const CHATWISE_COMMAND_META = electronAppCommandMeta(
9
+ "src/adapters/chatwise/extra.ts",
10
+ );
11
+
5
12
  cli({
6
13
  site: "chatwise",
7
14
  name: "history",
8
15
  description: "List ChatWise conversations from the sidebar",
9
16
  strategy: Strategy.PUBLIC,
17
+ ...CHATWISE_COMMAND_META,
10
18
  args: [{ name: "limit", type: "int", default: 20 }],
11
19
  columns: ["title"],
12
20
  func: async (_page, kwargs) => {
@@ -27,6 +35,7 @@ cli({
27
35
  name: "export",
28
36
  description: "Export the current ChatWise conversation as Markdown text",
29
37
  strategy: Strategy.PUBLIC,
38
+ ...CHATWISE_COMMAND_META,
30
39
  columns: ["content"],
31
40
  func: async () => {
32
41
  const page = await connectElectronApp("chatwise");
@@ -7,9 +7,14 @@
7
7
  import {
8
8
  registerAIChatCommands,
9
9
  connectElectronApp,
10
+ electronAppCommandMeta,
10
11
  } from "../_electron/shared.js";
11
12
  import { cli, Strategy } from "../../registry.js";
12
13
 
14
+ const CODEX_COMMAND_META = electronAppCommandMeta(
15
+ "src/adapters/codex/codex.ts",
16
+ );
17
+
13
18
  registerAIChatCommands("codex", {
14
19
  inputSelector: ".input-area textarea, [role='textbox']",
15
20
  responseSelector: ".message:last-child .content, .response:last-child",
@@ -24,6 +29,7 @@ cli({
24
29
  name: "extract-diff",
25
30
  description: "Extract diff patches from the last Codex response",
26
31
  strategy: Strategy.PUBLIC,
32
+ ...CODEX_COMMAND_META,
27
33
  func: async () => {
28
34
  const p = await connectElectronApp("codex");
29
35
  const diffs = await p.evaluate(`