@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.
- package/AGENTS.md +4 -4
- package/README.md +3 -3
- package/README.zh-CN.md +3 -3
- package/dist/adapters/_electron/desktop-shared.d.ts.map +1 -1
- package/dist/adapters/_electron/desktop-shared.js +2 -1
- package/dist/adapters/_electron/desktop-shared.js.map +1 -1
- package/dist/adapters/_electron/shared.d.ts +6 -0
- package/dist/adapters/_electron/shared.d.ts.map +1 -1
- package/dist/adapters/_electron/shared.js +9 -0
- package/dist/adapters/_electron/shared.js.map +1 -1
- package/dist/adapters/antigravity/extra.js +4 -1
- package/dist/adapters/antigravity/extra.js.map +1 -1
- package/dist/adapters/chatwise/extra.js +4 -1
- package/dist/adapters/chatwise/extra.js.map +1 -1
- package/dist/adapters/codex/codex.js +3 -1
- package/dist/adapters/codex/codex.js.map +1 -1
- package/dist/adapters/codex/extra.js +4 -1
- package/dist/adapters/codex/extra.js.map +1 -1
- package/dist/adapters/codex/projects.d.ts.map +1 -1
- package/dist/adapters/codex/projects.js +3 -1
- package/dist/adapters/codex/projects.js.map +1 -1
- package/dist/adapters/cursor/cursor.js +6 -1
- package/dist/adapters/cursor/cursor.js.map +1 -1
- package/dist/adapters/discord-app/discord-app.js +10 -1
- package/dist/adapters/discord-app/discord-app.js.map +1 -1
- package/dist/adapters/notion-app/notion-app.js +11 -1
- package/dist/adapters/notion-app/notion-app.js.map +1 -1
- package/dist/adapters/spotify/api.js +36 -6
- package/dist/adapters/spotify/api.js.map +1 -1
- package/dist/adapters/xiaohongshu/browser-state.d.ts +2 -1
- package/dist/adapters/xiaohongshu/browser-state.d.ts.map +1 -1
- package/dist/adapters/xiaohongshu/browser-state.js +56 -2
- package/dist/adapters/xiaohongshu/browser-state.js.map +1 -1
- package/dist/adapters/xiaohongshu/feed.d.ts +24 -0
- package/dist/adapters/xiaohongshu/feed.d.ts.map +1 -0
- package/dist/adapters/xiaohongshu/feed.js +82 -0
- package/dist/adapters/xiaohongshu/feed.js.map +1 -0
- package/dist/browser/cdp-client.d.ts +5 -1
- package/dist/browser/cdp-client.d.ts.map +1 -1
- package/dist/browser/cdp-client.js +24 -16
- package/dist/browser/cdp-client.js.map +1 -1
- package/dist/browser/daemon.js +29 -7
- package/dist/browser/daemon.js.map +1 -1
- package/dist/browser/launcher.d.ts.map +1 -1
- package/dist/browser/launcher.js +22 -8
- package/dist/browser/launcher.js.map +1 -1
- package/dist/browser/local-profiles.d.ts +2 -0
- package/dist/browser/local-profiles.d.ts.map +1 -1
- package/dist/browser/local-profiles.js +42 -2
- package/dist/browser/local-profiles.js.map +1 -1
- package/dist/browser/page.d.ts +2 -2
- package/dist/browser/page.d.ts.map +1 -1
- package/dist/browser/page.js +2 -2
- package/dist/browser/page.js.map +1 -1
- package/dist/browser/protocol.d.ts +7 -0
- package/dist/browser/protocol.d.ts.map +1 -1
- package/dist/browser/protocol.js +5 -0
- package/dist/browser/protocol.js.map +1 -1
- package/dist/commands/browser/index.d.ts.map +1 -1
- package/dist/commands/browser/index.js +26 -4
- package/dist/commands/browser/index.js.map +1 -1
- package/dist/commands/do.d.ts +15 -13
- package/dist/commands/do.d.ts.map +1 -1
- package/dist/commands/do.js +36 -21
- package/dist/commands/do.js.map +1 -1
- package/dist/discovery/aliases.d.ts.map +1 -1
- package/dist/discovery/aliases.js +26 -0
- package/dist/discovery/aliases.js.map +1 -1
- package/dist/discovery/intents.d.ts +31 -4
- package/dist/discovery/intents.d.ts.map +1 -1
- package/dist/discovery/intents.js +166 -3
- package/dist/discovery/intents.js.map +1 -1
- package/dist/discovery/loader.d.ts.map +1 -1
- package/dist/discovery/loader.js +3 -0
- package/dist/discovery/loader.js.map +1 -1
- package/dist/discovery/search.d.ts.map +1 -1
- package/dist/discovery/search.js +10 -1
- package/dist/discovery/search.js.map +1 -1
- package/dist/engine/kernel/stages.d.ts.map +1 -1
- package/dist/engine/kernel/stages.js +14 -4
- package/dist/engine/kernel/stages.js.map +1 -1
- package/dist/engine/objective/catalog.d.ts +23 -0
- package/dist/engine/objective/catalog.d.ts.map +1 -0
- package/dist/engine/objective/catalog.js +42 -0
- package/dist/engine/objective/catalog.js.map +1 -0
- package/dist/engine/objective/delivery.d.ts +18 -0
- package/dist/engine/objective/delivery.d.ts.map +1 -0
- package/dist/engine/objective/delivery.js +64 -0
- package/dist/engine/objective/delivery.js.map +1 -0
- package/dist/engine/objective/index.d.ts +20 -0
- package/dist/engine/objective/index.d.ts.map +1 -0
- package/dist/engine/objective/index.js +20 -0
- package/dist/engine/objective/index.js.map +1 -0
- package/dist/engine/objective/media-playback.d.ts +17 -0
- package/dist/engine/objective/media-playback.d.ts.map +1 -0
- package/dist/engine/objective/media-playback.js +186 -0
- package/dist/engine/objective/media-playback.js.map +1 -0
- package/dist/engine/objective/output.d.ts +20 -0
- package/dist/engine/objective/output.d.ts.map +1 -0
- package/dist/engine/objective/output.js +88 -0
- package/dist/engine/objective/output.js.map +1 -0
- package/dist/engine/objective/planner.d.ts +17 -0
- package/dist/engine/objective/planner.d.ts.map +1 -0
- package/dist/engine/objective/planner.js +60 -0
- package/dist/engine/objective/planner.js.map +1 -0
- package/dist/engine/objective/types.d.ts +66 -0
- package/dist/engine/objective/types.d.ts.map +1 -0
- package/dist/engine/objective/types.js +16 -0
- package/dist/engine/objective/types.js.map +1 -0
- package/dist/engine/steps/browser-helpers.d.ts.map +1 -1
- package/dist/engine/steps/browser-helpers.js +34 -0
- package/dist/engine/steps/browser-helpers.js.map +1 -1
- package/dist/manifest-compact.txt +3 -2
- package/dist/manifest.json +42 -17
- package/package.json +3 -1
- package/server.json +2 -2
- package/skills/unicli/SKILL.md +1 -1
- package/skills/unicli-claude-code/SKILL.md +1 -1
- package/skills/unicli-hermes/SKILL.md +1 -1
- package/src/adapters/_electron/desktop-shared.ts +5 -1
- package/src/adapters/_electron/shared.ts +15 -0
- package/src/adapters/antigravity/extra.ts +10 -1
- package/src/adapters/chatwise/extra.ts +10 -1
- package/src/adapters/codex/codex.ts +6 -0
- package/src/adapters/codex/extra.ts +10 -1
- package/src/adapters/codex/projects.ts +9 -1
- package/src/adapters/cursor/cursor.ts +9 -0
- package/src/adapters/discord-app/discord-app.ts +16 -1
- package/src/adapters/macos/brightness.yaml +6 -3
- package/src/adapters/macos/calendar-list.yaml +9 -11
- package/src/adapters/macos/calendar-today.yaml +1 -1
- package/src/adapters/macos/safari-url.yaml +8 -4
- package/src/adapters/maoyan/hot.yaml +1 -1
- package/src/adapters/notion-app/notion-app.ts +17 -1
- package/src/adapters/spotify/api.ts +54 -8
- package/src/adapters/weibo/trending.yaml +2 -0
- package/src/adapters/xiaohongshu/browser-state.ts +59 -2
- 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,
|
|
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":"AAGA,KAAK,UAAU,iBAAiB,CAAC,OAAe;IAC9C,IAAI,CAAC;QACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAA2B,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,2HAA2H;QAC3H,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,0BAA0B;IACvC,IAAI,CAAC;QACH,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB;YAAE,OAAO,IAAI,CAAC;QAC/D,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,oHAAoH;QACpH,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAoB;IACpD,IAAI,GAAG,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC;IAE9B,IAAI,GAAG,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;QAClC,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,GAAG;YAC7C,CAAC,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC;YAC/B,CAAC,CAAC,MAAM,0BAA0B,EAAE,CAAC;QACzC,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;
|
|
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),
|
|
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)
|
package/dist/manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.225.
|
|
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": "
|
|
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
|
|
44568
|
-
"strategy": "
|
|
44594
|
+
"description": "Xiaohongshu home feed",
|
|
44595
|
+
"strategy": "cookie",
|
|
44569
44596
|
"type": "web-api",
|
|
44570
44597
|
"domain": "www.xiaohongshu.com",
|
|
44571
44598
|
"browser": true,
|
|
44572
|
-
"
|
|
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
|
-
"
|
|
44584
|
-
|
|
44585
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
16
|
+
"version": "0.225.1",
|
|
17
17
|
"transport": {
|
|
18
18
|
"type": "stdio"
|
|
19
19
|
},
|
package/skills/unicli/SKILL.md
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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(`
|