@monoes/monomindcli 1.14.7 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/reengineer-squad/boss.md +113 -0
- package/.claude/agents/reengineer-squad/critic-architect.md +132 -0
- package/.claude/agents/reengineer-squad/git-manager.md +145 -0
- package/.claude/agents/reengineer-squad/idea-generator.md +95 -0
- package/.claude/agents/reengineer-squad/implementer.md +112 -0
- package/.claude/agents/reengineer-squad/integration-planner.md +112 -0
- package/.claude/agents/reengineer-squad/source-analyst.md +103 -0
- package/.claude/agents/reengineer-squad/target-analyst.md +118 -0
- package/.claude/agents/reengineer-squad/tester.md +105 -0
- package/.claude/commands/mastermind/master.md +35 -14
- package/.claude/helpers/handlers/capture-handler.cjs +155 -18
- package/.claude/helpers/monolean-activate.cjs +20 -0
- package/.claude/helpers/monolean-config.cjs +76 -0
- package/.claude/helpers/monolean-instructions.cjs +109 -0
- package/.claude/helpers/monolean-propagate.cjs +9 -0
- package/.claude/helpers/monolean-tracker.cjs +18 -0
- package/.claude/helpers/skill-registry.json +2 -2
- package/.claude/skills/agent-browser-testing/SKILL.md +301 -18
- package/.claude/skills/mastermind/runorg.md +69 -23
- package/.claude/skills/monodesign/SKILL.md +32 -1
- package/.claude/skills/monodesign/adapt.md +53 -0
- package/.claude/skills/monodesign/agents/monodesign-asset-producer.md +100 -0
- package/.claude/skills/monodesign/animate.md +65 -0
- package/.claude/skills/monodesign/audit.md +89 -0
- package/.claude/skills/monodesign/bolder.md +50 -0
- package/.claude/skills/monodesign/clarify.md +64 -0
- package/.claude/skills/monodesign/colorize.md +68 -0
- package/.claude/skills/monodesign/craft.md +51 -0
- package/.claude/skills/monodesign/critique.md +66 -0
- package/.claude/skills/monodesign/delight.md +47 -0
- package/.claude/skills/monodesign/distill.md +56 -0
- package/.claude/skills/monodesign/document.md +80 -0
- package/.claude/skills/monodesign/extract.md +74 -0
- package/.claude/skills/monodesign/harden.md +65 -0
- package/.claude/skills/monodesign/live.md +59 -0
- package/.claude/skills/monodesign/onboard.md +50 -0
- package/.claude/skills/monodesign/optimize.md +64 -0
- package/.claude/skills/monodesign/overdrive.md +56 -0
- package/.claude/skills/monodesign/polish.md +68 -0
- package/.claude/skills/monodesign/quieter.md +57 -0
- package/.claude/skills/monodesign/reference/antipatterns-catalog.md +248 -76
- package/.claude/skills/monodesign/reference/codex.md +107 -0
- package/.claude/skills/monodesign/reference/craft.md +3 -0
- package/.claude/skills/monodesign/reference/hooks.md +99 -0
- package/.claude/skills/monodesign/reference/image-prompts.md +12 -0
- package/.claude/skills/monodesign/shape.md +71 -0
- package/.claude/skills/monodesign/teach.md +69 -0
- package/.claude/skills/monodesign/typeset.md +59 -0
- package/.claude/skills/monolean/SKILL.md +118 -0
- package/.claude/skills/monolean-audit/SKILL.md +41 -0
- package/.claude/skills/monolean-debt/SKILL.md +46 -0
- package/.claude/skills/monolean-help/SKILL.md +60 -0
- package/.claude/skills/monolean-review/SKILL.md +57 -0
- package/bin/cli.js +3 -1
- package/dist/dashboard/server.js +137 -0
- package/dist/src/__tests__/browse-adapters.test.d.ts +2 -0
- package/dist/src/__tests__/browse-adapters.test.d.ts.map +1 -0
- package/dist/src/__tests__/browse-adapters.test.js +51 -0
- package/dist/src/__tests__/browse-adapters.test.js.map +1 -0
- package/dist/src/__tests__/browse-analyzer.test.d.ts +2 -0
- package/dist/src/__tests__/browse-analyzer.test.d.ts.map +1 -0
- package/dist/src/__tests__/browse-analyzer.test.js +68 -0
- package/dist/src/__tests__/browse-analyzer.test.js.map +1 -0
- package/dist/src/__tests__/browse-builtin-handlers.test.d.ts +2 -0
- package/dist/src/__tests__/browse-builtin-handlers.test.d.ts.map +1 -0
- package/dist/src/__tests__/browse-builtin-handlers.test.js +139 -0
- package/dist/src/__tests__/browse-builtin-handlers.test.js.map +1 -0
- package/dist/src/__tests__/browse-cdp.test.d.ts +2 -0
- package/dist/src/__tests__/browse-cdp.test.d.ts.map +1 -0
- package/dist/src/__tests__/browse-cdp.test.js +169 -0
- package/dist/src/__tests__/browse-cdp.test.js.map +1 -0
- package/dist/src/__tests__/browse-dashboard.test.d.ts +2 -0
- package/dist/src/__tests__/browse-dashboard.test.d.ts.map +1 -0
- package/dist/src/__tests__/browse-dashboard.test.js +179 -0
- package/dist/src/__tests__/browse-dashboard.test.js.map +1 -0
- package/dist/src/__tests__/browse-engine.test.d.ts +2 -0
- package/dist/src/__tests__/browse-engine.test.d.ts.map +1 -0
- package/dist/src/__tests__/browse-engine.test.js +122 -0
- package/dist/src/__tests__/browse-engine.test.js.map +1 -0
- package/dist/src/__tests__/browse-expression.test.d.ts +2 -0
- package/dist/src/__tests__/browse-expression.test.d.ts.map +1 -0
- package/dist/src/__tests__/browse-expression.test.js +54 -0
- package/dist/src/__tests__/browse-expression.test.js.map +1 -0
- package/dist/src/__tests__/browse-store.test.d.ts +2 -0
- package/dist/src/__tests__/browse-store.test.d.ts.map +1 -0
- package/dist/src/__tests__/browse-store.test.js +99 -0
- package/dist/src/__tests__/browse-store.test.js.map +1 -0
- package/dist/src/__tests__/browse-workflow-types.test.d.ts +2 -0
- package/dist/src/__tests__/browse-workflow-types.test.d.ts.map +1 -0
- package/dist/src/__tests__/browse-workflow-types.test.js +33 -0
- package/dist/src/__tests__/browse-workflow-types.test.js.map +1 -0
- package/dist/src/browser/action-builder/analyzer.d.ts +11 -0
- package/dist/src/browser/action-builder/analyzer.d.ts.map +1 -0
- package/dist/src/browser/action-builder/analyzer.js +71 -0
- package/dist/src/browser/action-builder/analyzer.js.map +1 -0
- package/dist/src/browser/action-builder/types.d.ts +47 -0
- package/dist/src/browser/action-builder/types.d.ts.map +1 -0
- package/dist/src/browser/action-builder/types.js +2 -0
- package/dist/src/browser/action-builder/types.js.map +1 -0
- package/dist/src/browser/adapters/gemini.d.ts +3 -0
- package/dist/src/browser/adapters/gemini.d.ts.map +1 -0
- package/dist/src/browser/adapters/gemini.js +16 -0
- package/dist/src/browser/adapters/gemini.js.map +1 -0
- package/dist/src/browser/adapters/google.d.ts +3 -0
- package/dist/src/browser/adapters/google.d.ts.map +1 -0
- package/dist/src/browser/adapters/google.js +17 -0
- package/dist/src/browser/adapters/google.js.map +1 -0
- package/dist/src/browser/adapters/index.d.ts +19 -0
- package/dist/src/browser/adapters/index.d.ts.map +1 -0
- package/dist/src/browser/adapters/index.js +23 -0
- package/dist/src/browser/adapters/index.js.map +1 -0
- package/dist/src/browser/adapters/instagram.d.ts +3 -0
- package/dist/src/browser/adapters/instagram.d.ts.map +1 -0
- package/dist/src/browser/adapters/instagram.js +17 -0
- package/dist/src/browser/adapters/instagram.js.map +1 -0
- package/dist/src/browser/adapters/linkedin.d.ts +3 -0
- package/dist/src/browser/adapters/linkedin.d.ts.map +1 -0
- package/dist/src/browser/adapters/linkedin.js +19 -0
- package/dist/src/browser/adapters/linkedin.js.map +1 -0
- package/dist/src/browser/adapters/microsoft.d.ts +3 -0
- package/dist/src/browser/adapters/microsoft.d.ts.map +1 -0
- package/dist/src/browser/adapters/microsoft.js +16 -0
- package/dist/src/browser/adapters/microsoft.js.map +1 -0
- package/dist/src/browser/adapters/x.d.ts +3 -0
- package/dist/src/browser/adapters/x.d.ts.map +1 -0
- package/dist/src/browser/adapters/x.js +19 -0
- package/dist/src/browser/adapters/x.js.map +1 -0
- package/dist/src/browser/dashboard/api-types.d.ts +50 -0
- package/dist/src/browser/dashboard/api-types.d.ts.map +1 -0
- package/dist/src/browser/dashboard/api-types.js +14 -0
- package/dist/src/browser/dashboard/api-types.js.map +1 -0
- package/dist/src/browser/dashboard/server.d.ts +9 -0
- package/dist/src/browser/dashboard/server.d.ts.map +1 -0
- package/dist/src/browser/dashboard/server.js +62 -0
- package/dist/src/browser/dashboard/server.js.map +1 -0
- package/dist/src/browser/dashboard/ui.html +1811 -0
- package/dist/src/browser/workflow/builtin-handlers.d.ts +3 -0
- package/dist/src/browser/workflow/builtin-handlers.d.ts.map +1 -0
- package/dist/src/browser/workflow/builtin-handlers.js +343 -0
- package/dist/src/browser/workflow/builtin-handlers.js.map +1 -0
- package/dist/src/browser/workflow/engine.d.ts +15 -0
- package/dist/src/browser/workflow/engine.d.ts.map +1 -0
- package/dist/src/browser/workflow/engine.js +127 -0
- package/dist/src/browser/workflow/engine.js.map +1 -0
- package/dist/src/browser/workflow/expression.d.ts +4 -0
- package/dist/src/browser/workflow/expression.d.ts.map +1 -0
- package/dist/src/browser/workflow/expression.js +64 -0
- package/dist/src/browser/workflow/expression.js.map +1 -0
- package/dist/src/browser/workflow/store.d.ts +24 -0
- package/dist/src/browser/workflow/store.d.ts.map +1 -0
- package/dist/src/browser/workflow/store.js +145 -0
- package/dist/src/browser/workflow/store.js.map +1 -0
- package/dist/src/browser/workflow/types.d.ts +48 -0
- package/dist/src/browser/workflow/types.d.ts.map +1 -0
- package/dist/src/browser/workflow/types.js +2 -0
- package/dist/src/browser/workflow/types.js.map +1 -0
- package/dist/src/commands/browse-action.d.ts +4 -0
- package/dist/src/commands/browse-action.d.ts.map +1 -0
- package/dist/src/commands/browse-action.js +151 -0
- package/dist/src/commands/browse-action.js.map +1 -0
- package/dist/src/commands/browse-platform.d.ts +4 -0
- package/dist/src/commands/browse-platform.d.ts.map +1 -0
- package/dist/src/commands/browse-platform.js +117 -0
- package/dist/src/commands/browse-platform.js.map +1 -0
- package/dist/src/commands/browse-workflow.d.ts +4 -0
- package/dist/src/commands/browse-workflow.d.ts.map +1 -0
- package/dist/src/commands/browse-workflow.js +153 -0
- package/dist/src/commands/browse-workflow.js.map +1 -0
- package/dist/src/commands/browse.d.ts +10 -6
- package/dist/src/commands/browse.d.ts.map +1 -1
- package/dist/src/commands/browse.js +11 -2154
- package/dist/src/commands/browse.js.map +1 -1
- package/dist/src/commands/design-detect.d.ts +21 -0
- package/dist/src/commands/design-detect.d.ts.map +1 -0
- package/dist/src/commands/design-detect.js +127 -0
- package/dist/src/commands/design-detect.js.map +1 -0
- package/dist/src/commands/design-palette.d.ts +22 -0
- package/dist/src/commands/design-palette.d.ts.map +1 -0
- package/dist/src/commands/design-palette.js +539 -0
- package/dist/src/commands/design-palette.js.map +1 -0
- package/dist/src/commands/hooks-core-commands.d.ts +10 -0
- package/dist/src/commands/hooks-core-commands.d.ts.map +1 -0
- package/dist/src/commands/hooks-core-commands.js +377 -0
- package/dist/src/commands/hooks-core-commands.js.map +1 -0
- package/dist/src/commands/hooks-coverage-commands.d.ts +12 -0
- package/dist/src/commands/hooks-coverage-commands.d.ts.map +1 -0
- package/dist/src/commands/hooks-coverage-commands.js +1217 -0
- package/dist/src/commands/hooks-coverage-commands.js.map +1 -0
- package/dist/src/commands/hooks-coverage-utils.d.ts +42 -0
- package/dist/src/commands/hooks-coverage-utils.d.ts.map +1 -0
- package/dist/src/commands/hooks-coverage-utils.js +220 -0
- package/dist/src/commands/hooks-coverage-utils.js.map +1 -0
- package/dist/src/commands/hooks-extended-commands.d.ts +14 -0
- package/dist/src/commands/hooks-extended-commands.d.ts.map +1 -0
- package/dist/src/commands/hooks-extended-commands.js +579 -0
- package/dist/src/commands/hooks-extended-commands.js.map +1 -0
- package/dist/src/commands/hooks-formatting.d.ts +13 -0
- package/dist/src/commands/hooks-formatting.d.ts.map +1 -0
- package/dist/src/commands/hooks-formatting.js +42 -0
- package/dist/src/commands/hooks-formatting.js.map +1 -0
- package/dist/src/commands/hooks-routing-commands.d.ts +15 -0
- package/dist/src/commands/hooks-routing-commands.d.ts.map +1 -0
- package/dist/src/commands/hooks-routing-commands.js +723 -0
- package/dist/src/commands/hooks-routing-commands.js.map +1 -0
- package/dist/src/commands/hooks-workers.d.ts +9 -0
- package/dist/src/commands/hooks-workers.d.ts.map +1 -0
- package/dist/src/commands/hooks-workers.js +782 -0
- package/dist/src/commands/hooks-workers.js.map +1 -0
- package/dist/src/commands/hooks.d.ts +8 -0
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +179 -4103
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts +1 -0
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +6 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/org.d.ts.map +1 -1
- package/dist/src/commands/org.js +14 -15
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/commands/tokens.d.ts.map +1 -1
- package/dist/src/commands/tokens.js +77 -1
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +18 -8
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +39 -5
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.d.ts.map +1 -1
- package/dist/src/init/statusline-generator.js +25 -5
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/mcp-tools/browser-tools.d.ts +3 -5
- package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/browser-tools.js +619 -326
- package/dist/src/mcp-tools/browser-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-embedding.d.ts +161 -0
- package/dist/src/mcp-tools/hooks-embedding.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-embedding.js +506 -0
- package/dist/src/mcp-tools/hooks-embedding.js.map +1 -0
- package/dist/src/mcp-tools/hooks-intelligence.d.ts +26 -0
- package/dist/src/mcp-tools/hooks-intelligence.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-intelligence.js +1328 -0
- package/dist/src/mcp-tools/hooks-intelligence.js.map +1 -0
- package/dist/src/mcp-tools/hooks-routing.d.ts +27 -0
- package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-routing.js +1591 -0
- package/dist/src/mcp-tools/hooks-routing.js.map +1 -0
- package/dist/src/mcp-tools/hooks-tools.d.ts +3 -38
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +5 -3393
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.js +24 -14
- package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.js +54 -1
- package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
- package/dist/src/memory/embedding-operations.d.ts +58 -0
- package/dist/src/memory/embedding-operations.d.ts.map +1 -0
- package/dist/src/memory/embedding-operations.js +299 -0
- package/dist/src/memory/embedding-operations.js.map +1 -0
- package/dist/src/memory/ewc-consolidation.d.ts.map +1 -1
- package/dist/src/memory/ewc-consolidation.js +37 -3
- package/dist/src/memory/ewc-consolidation.js.map +1 -1
- package/dist/src/memory/hnsw-operations.d.ts +130 -0
- package/dist/src/memory/hnsw-operations.d.ts.map +1 -0
- package/dist/src/memory/hnsw-operations.js +400 -0
- package/dist/src/memory/hnsw-operations.js.map +1 -0
- package/dist/src/memory/intelligence.d.ts.map +1 -1
- package/dist/src/memory/intelligence.js +42 -23
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +52 -8
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-crud.d.ts +67 -0
- package/dist/src/memory/memory-crud.d.ts.map +1 -0
- package/dist/src/memory/memory-crud.js +415 -0
- package/dist/src/memory/memory-crud.js.map +1 -0
- package/dist/src/memory/memory-initializer.d.ts +9 -322
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +17 -1794
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/memory-migrations.d.ts +30 -0
- package/dist/src/memory/memory-migrations.d.ts.map +1 -0
- package/dist/src/memory/memory-migrations.js +134 -0
- package/dist/src/memory/memory-migrations.js.map +1 -0
- package/dist/src/memory/memory-read.d.ts +78 -0
- package/dist/src/memory/memory-read.d.ts.map +1 -0
- package/dist/src/memory/memory-read.js +331 -0
- package/dist/src/memory/memory-read.js.map +1 -0
- package/dist/src/memory/memory-schema.d.ts +13 -0
- package/dist/src/memory/memory-schema.d.ts.map +1 -0
- package/dist/src/memory/memory-schema.js +167 -0
- package/dist/src/memory/memory-schema.js.map +1 -0
- package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
- package/dist/src/memory/sona-optimizer.js +37 -4
- package/dist/src/memory/sona-optimizer.js.map +1 -1
- package/dist/src/monovector/route-outcomes.d.ts.map +1 -1
- package/dist/src/monovector/route-outcomes.js +16 -6
- package/dist/src/monovector/route-outcomes.js.map +1 -1
- package/dist/src/pricing/model-pricing.d.ts +41 -0
- package/dist/src/pricing/model-pricing.d.ts.map +1 -0
- package/dist/src/pricing/model-pricing.js +61 -0
- package/dist/src/pricing/model-pricing.js.map +1 -0
- package/dist/src/ui/.monomind/capture/active-run.json +1 -0
- package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.convs.jsonl +3 -0
- package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.jsonl +11 -0
- package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/rigid-qa-restart-1782288201.jsonl +540 -0
- package/dist/src/ui/.monomind/orgs/system-trial-qa-threads.jsonl +3 -0
- package/dist/src/ui/.monomind/orgs/test-event-fix/runs/rigid-qa-restart-1782288201.jsonl +2 -0
- package/dist/src/ui/MODULARIZATION_PLAN.md +79 -0
- package/dist/src/ui/collector.mjs +23 -13
- package/dist/src/ui/dashboard.html +1652 -13
- package/dist/src/ui/data/known-projects.json +1 -0
- package/dist/src/ui/data/mastermind-events.jsonl +553 -0
- package/dist/src/ui/data/sessions/_index.json +1 -0
- package/dist/src/ui/data/sessions/final-sess-001.jsonl +542 -0
- package/dist/src/ui/data/unknown-events.jsonl +1 -0
- package/dist/src/ui/orgs.html +154 -10
- package/dist/src/ui/server.mjs +1131 -168
- package/dist/src/ui/sse-manager.mjs +119 -0
- package/dist/src/update/checker.js +1 -1
- package/dist/src/update/checker.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/workflow/builtin-handlers.js +321 -0
- package/dist/workflow/engine.js +253 -0
- package/dist/workflow/expression.js +98 -0
- package/dist/workflow/types.js +2 -0
- package/package.json +8 -5
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { writeFile, mkdir } from 'fs/promises';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
const SYSTEM_PROMPT = `You are a browser automation expert. Given a DOM snippet and a task description, generate a JSON action definition that automates the task.
|
|
4
|
+
|
|
5
|
+
Rules:
|
|
6
|
+
- Use ONLY these step types: navigate, find, click, type, wait, extract
|
|
7
|
+
- For "find" steps, provide 2-3 selector alternatives in order of preference (CSS, aria-label, XPath)
|
|
8
|
+
- For "type" steps, set humanDelay: true for form inputs
|
|
9
|
+
- Parameters use {{params.name}} syntax
|
|
10
|
+
- The action id format is "custom:<snake_case_name>"
|
|
11
|
+
- Output ONLY a JSON code block, no explanation before or after
|
|
12
|
+
|
|
13
|
+
JSON schema:
|
|
14
|
+
{
|
|
15
|
+
"id": "custom:action_name",
|
|
16
|
+
"platform": "custom",
|
|
17
|
+
"name": "Human Readable Name",
|
|
18
|
+
"params": ["param1", "param2"],
|
|
19
|
+
"steps": [...]
|
|
20
|
+
}`;
|
|
21
|
+
export function buildPrompt(task, domSnapshot) {
|
|
22
|
+
const truncated = domSnapshot.slice(0, 8000);
|
|
23
|
+
return `Task: ${task}\n\nDOM snapshot:\n${truncated}\n\nGenerate the action JSON.`;
|
|
24
|
+
}
|
|
25
|
+
export function parseActionResponse(response) {
|
|
26
|
+
const match = response.match(/```(?:json)?\s*([\s\S]*?)```/);
|
|
27
|
+
if (!match)
|
|
28
|
+
throw new Error('No JSON block found in Claude response');
|
|
29
|
+
try {
|
|
30
|
+
return JSON.parse(match[1].trim());
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
throw new Error(`Invalid JSON in response: ${err.message}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export async function analyzeAndBuild(options) {
|
|
37
|
+
const { url, task, client, sessionId, outputDir } = options;
|
|
38
|
+
// Navigate to the URL and wait for load
|
|
39
|
+
await client.send('Page.navigate', { url }, sessionId);
|
|
40
|
+
await new Promise(r => setTimeout(r, 2500)); // allow page to settle
|
|
41
|
+
// Capture DOM snapshot — accessibility tree + visible text
|
|
42
|
+
const domResult = await client.send('DOM.getDocument', { depth: 3, pierce: true }, sessionId);
|
|
43
|
+
const outerHtml = await client.send('DOM.getOuterHTML', { nodeId: domResult.root.nodeId }, sessionId);
|
|
44
|
+
// Strip scripts/styles, keep interactive elements
|
|
45
|
+
const cleanDom = outerHtml.outerHTML
|
|
46
|
+
.replace(/<script[\s\S]*?<\/script>/gi, '')
|
|
47
|
+
.replace(/<style[\s\S]*?<\/style>/gi, '')
|
|
48
|
+
.replace(/\s{2,}/g, ' ')
|
|
49
|
+
.slice(0, 12000);
|
|
50
|
+
// Call Claude API
|
|
51
|
+
const { Anthropic } = await import('@anthropic-ai/sdk');
|
|
52
|
+
const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
|
|
53
|
+
const message = await anthropic.messages.create({
|
|
54
|
+
model: 'claude-sonnet-4-6',
|
|
55
|
+
max_tokens: 2048,
|
|
56
|
+
system: SYSTEM_PROMPT,
|
|
57
|
+
messages: [{ role: 'user', content: buildPrompt(task, cleanDom) }],
|
|
58
|
+
});
|
|
59
|
+
const responseText = message.content
|
|
60
|
+
.filter(c => c.type === 'text')
|
|
61
|
+
.map(c => c.text)
|
|
62
|
+
.join('');
|
|
63
|
+
const action = parseActionResponse(responseText);
|
|
64
|
+
// Write to output directory
|
|
65
|
+
await mkdir(outputDir, { recursive: true });
|
|
66
|
+
const filename = action.id.replace(/[^a-z0-9_-]/gi, '_') + '.json';
|
|
67
|
+
const outPath = join(outputDir, filename);
|
|
68
|
+
await writeFile(outPath, JSON.stringify(action, null, 2));
|
|
69
|
+
return action;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../../src/browser/action-builder/analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export type StepType = 'navigate' | 'find' | 'click' | 'type' | 'wait' | 'extract' | 'condition';
|
|
2
|
+
export interface NavigateStep {
|
|
3
|
+
type: 'navigate';
|
|
4
|
+
url: string;
|
|
5
|
+
}
|
|
6
|
+
export interface FindStep {
|
|
7
|
+
type: 'find';
|
|
8
|
+
selectors: string[];
|
|
9
|
+
as: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ClickStep {
|
|
12
|
+
type: 'click';
|
|
13
|
+
target: string;
|
|
14
|
+
}
|
|
15
|
+
export interface TypeStep {
|
|
16
|
+
type: 'type';
|
|
17
|
+
target: string;
|
|
18
|
+
text: string;
|
|
19
|
+
humanDelay?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface WaitStep {
|
|
22
|
+
type: 'wait';
|
|
23
|
+
condition: 'network_idle' | 'selector' | 'duration';
|
|
24
|
+
timeout?: number;
|
|
25
|
+
selector?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ExtractStep {
|
|
28
|
+
type: 'extract';
|
|
29
|
+
target: string;
|
|
30
|
+
as: string;
|
|
31
|
+
attribute?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ConditionStep {
|
|
34
|
+
type: 'condition';
|
|
35
|
+
expression: string;
|
|
36
|
+
then: StepDef[];
|
|
37
|
+
else?: StepDef[];
|
|
38
|
+
}
|
|
39
|
+
export type StepDef = NavigateStep | FindStep | ClickStep | TypeStep | WaitStep | ExtractStep | ConditionStep;
|
|
40
|
+
export interface ActionDef {
|
|
41
|
+
id: string;
|
|
42
|
+
platform: string;
|
|
43
|
+
name: string;
|
|
44
|
+
params: string[];
|
|
45
|
+
steps: StepDef[];
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/browser/action-builder/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;AAEjG,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;CAAE;AAChE,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;CAAE;AAC5E,MAAM,WAAW,SAAS;IAAG,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAAE;AAC7D,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAAE;AAC/F,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,cAAc,GAAG,UAAU,GAAG,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAAE;AACrI,MAAM,WAAW,WAAW;IAAG,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAAE;AACjG,MAAM,WAAW,aAAa;IAAG,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;CAAE;AAE5G,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;AAE9G,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/browser/action-builder/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../../src/browser/adapters/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AAEjE,eAAO,MAAM,aAAa,EAAE,eAoB3B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const geminiAdapter = {
|
|
2
|
+
platform: 'gemini',
|
|
3
|
+
baseURL: 'https://gemini.google.com',
|
|
4
|
+
reservedPaths: ['/app', '/faq', '/privacy', '/terms', '/about'],
|
|
5
|
+
loginURL: () => 'https://accounts.google.com/signin',
|
|
6
|
+
async isLoggedIn(page) {
|
|
7
|
+
const url = await page.url();
|
|
8
|
+
if (url.includes('accounts.google.com'))
|
|
9
|
+
return false;
|
|
10
|
+
return page.evaluate(`!!document.querySelector('bard-sidenav, [data-test-id="bard-sidenav"]')`);
|
|
11
|
+
},
|
|
12
|
+
async extractUsername(page) {
|
|
13
|
+
return page.evaluate(`(document.querySelector('[data-email]')?.getAttribute('data-email') ?? 'unknown')`);
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../../src/browser/adapters/gemini.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,2BAA2B;IACpC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAE/D,QAAQ,EAAE,GAAG,EAAE,CAAC,oCAAoC;IAEpD,KAAK,CAAC,UAAU,CAAC,IAAmB;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAAE,OAAO,KAAK,CAAC;QACtD,OAAO,IAAI,CAAC,QAAQ,CAClB,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAmB;QACvC,OAAO,IAAI,CAAC,QAAQ,CAClB,mFAAmF,CACpF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../../src/browser/adapters/google.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AAEjE,eAAO,MAAM,aAAa,EAAE,eAgB3B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const googleAdapter = {
|
|
2
|
+
platform: 'google',
|
|
3
|
+
baseURL: 'https://accounts.google.com',
|
|
4
|
+
reservedPaths: ['/signin', '/oauth', '/o/oauth2'],
|
|
5
|
+
loginURL: () => 'https://accounts.google.com/signin/v2/identifier',
|
|
6
|
+
async isLoggedIn(page) {
|
|
7
|
+
const url = await page.url();
|
|
8
|
+
// Logged in if we're on a Google service page (not the sign-in page)
|
|
9
|
+
if (url.includes('accounts.google.com/signin'))
|
|
10
|
+
return false;
|
|
11
|
+
return page.evaluate("!!(document.querySelector('[aria-label*=\"Google Account\"]') || document.querySelector('.gb_A') || document.cookie.includes('SSID'))");
|
|
12
|
+
},
|
|
13
|
+
async extractUsername(page) {
|
|
14
|
+
return page.evaluate("document.querySelector('[data-email]')?.getAttribute('data-email') ?? document.querySelector('.gb_A.gb_Sa')?.textContent?.trim() ?? ''");
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=google.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../../../src/browser/adapters/google.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,6BAA6B;IACtC,aAAa,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC;IACjD,QAAQ,EAAE,GAAG,EAAE,CAAC,kDAAkD;IAClE,KAAK,CAAC,UAAU,CAAC,IAAmB;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,qEAAqE;QACrE,IAAI,GAAG,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7D,OAAO,IAAI,CAAC,QAAQ,CAAU,uIAAuI,CAAC,CAAC;IACzK,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,IAAmB;QACvC,OAAO,IAAI,CAAC,QAAQ,CAClB,wIAAwI,CACzI,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CdpClient } from '@monoes/monobrowse';
|
|
2
|
+
export interface PageInterface {
|
|
3
|
+
client: CdpClient;
|
|
4
|
+
sessionId: string;
|
|
5
|
+
evaluate<T>(fn: string): Promise<T>;
|
|
6
|
+
url(): Promise<string>;
|
|
7
|
+
}
|
|
8
|
+
export interface PlatformAdapter {
|
|
9
|
+
platform: string;
|
|
10
|
+
baseURL: string;
|
|
11
|
+
reservedPaths: string[];
|
|
12
|
+
isLoggedIn(page: PageInterface): Promise<boolean>;
|
|
13
|
+
loginURL(): string;
|
|
14
|
+
extractUsername(page: PageInterface): Promise<string>;
|
|
15
|
+
}
|
|
16
|
+
export declare function registerAdapter(adapter: PlatformAdapter): void;
|
|
17
|
+
export declare function getAdapter(platform: string): PlatformAdapter;
|
|
18
|
+
export declare function listAdapters(): PlatformAdapter[];
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/browser/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACpC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,QAAQ,IAAI,MAAM,CAAC;IACnB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACvD;AAID,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAE9D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAI5D;AAED,wBAAgB,YAAY,IAAI,eAAe,EAAE,CAEhD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const registry = new Map();
|
|
2
|
+
export function registerAdapter(adapter) {
|
|
3
|
+
registry.set(adapter.platform, adapter);
|
|
4
|
+
}
|
|
5
|
+
export function getAdapter(platform) {
|
|
6
|
+
const adapter = registry.get(platform);
|
|
7
|
+
if (!adapter)
|
|
8
|
+
throw new Error(`Unknown platform: ${platform}. Available: ${[...registry.keys()].join(', ')}`);
|
|
9
|
+
return adapter;
|
|
10
|
+
}
|
|
11
|
+
export function listAdapters() {
|
|
12
|
+
return [...registry.values()];
|
|
13
|
+
}
|
|
14
|
+
// Auto-register all adapters
|
|
15
|
+
import { linkedinAdapter } from './linkedin.js';
|
|
16
|
+
import { instagramAdapter } from './instagram.js';
|
|
17
|
+
import { xAdapter } from './x.js';
|
|
18
|
+
import { geminiAdapter } from './gemini.js';
|
|
19
|
+
registerAdapter(linkedinAdapter);
|
|
20
|
+
registerAdapter(instagramAdapter);
|
|
21
|
+
registerAdapter(xAdapter);
|
|
22
|
+
registerAdapter(geminiAdapter);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/browser/adapters/index.ts"],"names":[],"mappings":"AAkBA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEpD,MAAM,UAAU,eAAe,CAAC,OAAwB;IACtD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,gBAAgB,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9G,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,6BAA6B;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,eAAe,CAAC,eAAe,CAAC,CAAC;AACjC,eAAe,CAAC,gBAAgB,CAAC,CAAC;AAClC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC1B,eAAe,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instagram.d.ts","sourceRoot":"","sources":["../../../../src/browser/adapters/instagram.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AAEjE,eAAO,MAAM,gBAAgB,EAAE,eAqB9B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const instagramAdapter = {
|
|
2
|
+
platform: 'instagram',
|
|
3
|
+
baseURL: 'https://www.instagram.com',
|
|
4
|
+
reservedPaths: ['/explore', '/reels', '/direct', '/stories', '/accounts', '/p', '/reel', '/tv'],
|
|
5
|
+
loginURL: () => 'https://www.instagram.com/accounts/login/',
|
|
6
|
+
async isLoggedIn(page) {
|
|
7
|
+
const url = await page.url();
|
|
8
|
+
if (url.includes('/accounts/login') || url.includes('/accounts/emailsignup'))
|
|
9
|
+
return false;
|
|
10
|
+
const hasAvatar = await page.evaluate(`!!document.querySelector('img[alt*="profile picture"], [aria-label="Home"]')`);
|
|
11
|
+
return hasAvatar;
|
|
12
|
+
},
|
|
13
|
+
async extractUsername(page) {
|
|
14
|
+
return page.evaluate(`(document.querySelector('a[href^="/"][href$="/"] span')?.textContent ?? 'unknown').trim()`);
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=instagram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instagram.js","sourceRoot":"","sources":["../../../../src/browser/adapters/instagram.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE,2BAA2B;IACpC,aAAa,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC;IAE/F,QAAQ,EAAE,GAAG,EAAE,CAAC,2CAA2C;IAE3D,KAAK,CAAC,UAAU,CAAC,IAAmB;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3F,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CACnC,8EAA8E,CAC/E,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAmB;QACvC,OAAO,IAAI,CAAC,QAAQ,CAClB,2FAA2F,CAC5F,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin.d.ts","sourceRoot":"","sources":["../../../../src/browser/adapters/linkedin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AAEjE,eAAO,MAAM,eAAe,EAAE,eAuB7B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const linkedinAdapter = {
|
|
2
|
+
platform: 'linkedin',
|
|
3
|
+
baseURL: 'https://www.linkedin.com',
|
|
4
|
+
reservedPaths: ['/feed', '/jobs', '/messaging', '/notifications', '/mynetwork', '/learning', '/search'],
|
|
5
|
+
loginURL: () => 'https://www.linkedin.com/login',
|
|
6
|
+
async isLoggedIn(page) {
|
|
7
|
+
const url = await page.url();
|
|
8
|
+
if (url.includes('/login') || url.includes('/authwall'))
|
|
9
|
+
return false;
|
|
10
|
+
const hasNav = await page.evaluate(`!!document.querySelector('[data-control-name="nav.home"] ,nav.global-nav')`);
|
|
11
|
+
return hasNav;
|
|
12
|
+
},
|
|
13
|
+
async extractUsername(page) {
|
|
14
|
+
const profileUrl = await page.evaluate(`(document.querySelector('a[href*="/in/"]')?.getAttribute('href') ?? '')`);
|
|
15
|
+
const match = profileUrl.match(/\/in\/([^/?#]+)/);
|
|
16
|
+
return match?.[1] ?? 'unknown';
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=linkedin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin.js","sourceRoot":"","sources":["../../../../src/browser/adapters/linkedin.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,0BAA0B;IACnC,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC;IAEvG,QAAQ,EAAE,GAAG,EAAE,CAAC,gCAAgC;IAEhD,KAAK,CAAC,UAAU,CAAC,IAAmB;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAChC,4EAA4E,CAC7E,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAmB;QACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CACpC,yEAAyE,CAC1E,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAClD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IACjC,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"microsoft.d.ts","sourceRoot":"","sources":["../../../../src/browser/adapters/microsoft.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AAEjE,eAAO,MAAM,gBAAgB,EAAE,eAe9B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const microsoftAdapter = {
|
|
2
|
+
platform: 'microsoft',
|
|
3
|
+
baseURL: 'https://login.microsoftonline.com',
|
|
4
|
+
reservedPaths: ['/oauth2', '/common/oauth2', '/kmsi'],
|
|
5
|
+
loginURL: () => 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=common&response_type=code&scope=openid+profile+email',
|
|
6
|
+
async isLoggedIn(page) {
|
|
7
|
+
const url = await page.url();
|
|
8
|
+
if (url.includes('login.microsoftonline.com') || url.includes('login.microsoft.com'))
|
|
9
|
+
return false;
|
|
10
|
+
return page.evaluate("!!(document.querySelector('[data-tid=\"user-email\"]') || document.querySelector('.mectrl_currentAccount') || document.cookie.includes('ESTSAUTH'))");
|
|
11
|
+
},
|
|
12
|
+
async extractUsername(page) {
|
|
13
|
+
return page.evaluate("document.querySelector('[data-tid=\"user-email\"]')?.textContent?.trim() ?? document.querySelector('.mectrl_headerEmail')?.textContent?.trim() ?? ''");
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=microsoft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"microsoft.js","sourceRoot":"","sources":["../../../../src/browser/adapters/microsoft.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE,mCAAmC;IAC5C,aAAa,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,CAAC;IACrD,QAAQ,EAAE,GAAG,EAAE,CAAC,+HAA+H;IAC/I,KAAK,CAAC,UAAU,CAAC,IAAmB;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,QAAQ,CAAC,2BAA2B,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAAE,OAAO,KAAK,CAAC;QACnG,OAAO,IAAI,CAAC,QAAQ,CAAU,qJAAqJ,CAAC,CAAC;IACvL,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,IAAmB;QACvC,OAAO,IAAI,CAAC,QAAQ,CAClB,sJAAsJ,CACvJ,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x.d.ts","sourceRoot":"","sources":["../../../../src/browser/adapters/x.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AAEjE,eAAO,MAAM,QAAQ,EAAE,eAqBtB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const xAdapter = {
|
|
2
|
+
platform: 'x',
|
|
3
|
+
baseURL: 'https://x.com',
|
|
4
|
+
reservedPaths: ['/home', '/explore', '/notifications', '/messages', '/i', '/search',
|
|
5
|
+
'/settings', '/bookmarks', '/lists', '/profile', '/compose', '/trending'],
|
|
6
|
+
loginURL: () => 'https://x.com/i/flow/login',
|
|
7
|
+
async isLoggedIn(page) {
|
|
8
|
+
const url = await page.url();
|
|
9
|
+
if (url.includes('/i/flow/login') || url.includes('/login'))
|
|
10
|
+
return false;
|
|
11
|
+
return page.evaluate(`!!document.querySelector('[data-testid="SideNav_AccountSwitcher_Button"]')`);
|
|
12
|
+
},
|
|
13
|
+
async extractUsername(page) {
|
|
14
|
+
return page.evaluate(`
|
|
15
|
+
(document.querySelector('[data-testid="UserName"] span')?.textContent ?? 'unknown').trim()
|
|
16
|
+
`);
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=x.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x.js","sourceRoot":"","sources":["../../../../src/browser/adapters/x.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAoB;IACvC,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,eAAe;IACxB,aAAa,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS;QACjF,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC;IAE3E,QAAQ,EAAE,GAAG,EAAE,CAAC,4BAA4B;IAE5C,KAAK,CAAC,UAAU,CAAC,IAAmB;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1E,OAAO,IAAI,CAAC,QAAQ,CAClB,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAmB;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAS;;KAE5B,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed API response schemas for the monobrowse dashboard.
|
|
3
|
+
*
|
|
4
|
+
* These interfaces are the canonical contract between server.ts and
|
|
5
|
+
* dashboard clients (ui.html + any external consumers). Changing a
|
|
6
|
+
* field name here will surface breakage at compile time rather than
|
|
7
|
+
* at runtime — preventing the field-name regression class documented
|
|
8
|
+
* in the sprint review (e.g. `msg` vs `message`, `tokensIn` vs
|
|
9
|
+
* `tokens_in`).
|
|
10
|
+
*
|
|
11
|
+
* @module @monomind/cli/browser/dashboard/api-types
|
|
12
|
+
*/
|
|
13
|
+
export interface OrgStatusResponse {
|
|
14
|
+
name: string;
|
|
15
|
+
status: 'ready' | 'running' | 'stopped';
|
|
16
|
+
currentRun?: RunRecord;
|
|
17
|
+
}
|
|
18
|
+
export interface RunRecord {
|
|
19
|
+
/** Stable run identifier (UUID or monotonic ID). */
|
|
20
|
+
id: string;
|
|
21
|
+
workflowId: string;
|
|
22
|
+
startedAt: number;
|
|
23
|
+
itemsProcessed: number;
|
|
24
|
+
status: string;
|
|
25
|
+
}
|
|
26
|
+
export interface SessionListResponse {
|
|
27
|
+
sessions: SessionEntry[];
|
|
28
|
+
total: number;
|
|
29
|
+
}
|
|
30
|
+
export interface SessionEntry {
|
|
31
|
+
sessionId: string;
|
|
32
|
+
name: string;
|
|
33
|
+
createdAt: string;
|
|
34
|
+
}
|
|
35
|
+
export interface BudgetResponse {
|
|
36
|
+
/** Input tokens consumed in this session/run. */
|
|
37
|
+
tokensIn: number;
|
|
38
|
+
/** Output tokens generated in this session/run. */
|
|
39
|
+
tokensOut: number;
|
|
40
|
+
/** Total monetary cost in `currency` units. */
|
|
41
|
+
totalCost: number;
|
|
42
|
+
currency: 'USD';
|
|
43
|
+
}
|
|
44
|
+
export interface ApiError {
|
|
45
|
+
/** Human-readable error message. */
|
|
46
|
+
error: string;
|
|
47
|
+
/** Optional machine-readable error code for programmatic handling. */
|
|
48
|
+
code?: string;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=api-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-types.d.ts","sourceRoot":"","sources":["../../../../src/browser/dashboard/api-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACxC,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;CACjB;AAMD,MAAM,WAAW,QAAQ;IACvB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed API response schemas for the monobrowse dashboard.
|
|
3
|
+
*
|
|
4
|
+
* These interfaces are the canonical contract between server.ts and
|
|
5
|
+
* dashboard clients (ui.html + any external consumers). Changing a
|
|
6
|
+
* field name here will surface breakage at compile time rather than
|
|
7
|
+
* at runtime — preventing the field-name regression class documented
|
|
8
|
+
* in the sprint review (e.g. `msg` vs `message`, `tokensIn` vs
|
|
9
|
+
* `tokens_in`).
|
|
10
|
+
*
|
|
11
|
+
* @module @monomind/cli/browser/dashboard/api-types
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=api-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-types.js","sourceRoot":"","sources":["../../../../src/browser/dashboard/api-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { StepEvent } from '../workflow/types.js';
|
|
2
|
+
interface DashboardServer {
|
|
3
|
+
broadcast(event: StepEvent): void;
|
|
4
|
+
close(): void;
|
|
5
|
+
port: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function getDashboardServer(port?: number): DashboardServer;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/browser/dashboard/server.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAC;AAKjE,UAAU,eAAe;IACvB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAID,wBAAgB,kBAAkB,CAAC,IAAI,SAAe,GAAG,eAAe,CAuDvE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { createServer } from 'http';
|
|
2
|
+
import { readFile } from 'fs/promises';
|
|
3
|
+
import { join, dirname } from 'path';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { WebSocketServer } from 'ws';
|
|
6
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const DEFAULT_PORT = 4242;
|
|
8
|
+
let instance = null;
|
|
9
|
+
export function getDashboardServer(port = DEFAULT_PORT) {
|
|
10
|
+
if (instance)
|
|
11
|
+
return instance;
|
|
12
|
+
const recentRuns = [];
|
|
13
|
+
const clients = new Set();
|
|
14
|
+
const htmlPath = join(__dirname, 'ui.html');
|
|
15
|
+
const httpServer = createServer(async (req, res) => {
|
|
16
|
+
if (req.method === 'GET' && req.url === '/') {
|
|
17
|
+
try {
|
|
18
|
+
const html = await readFile(htmlPath, 'utf8');
|
|
19
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
20
|
+
res.end(html);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
res.writeHead(500);
|
|
24
|
+
res.end('Dashboard UI not found');
|
|
25
|
+
}
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (req.method === 'GET' && req.url === '/runs') {
|
|
29
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
30
|
+
res.end(JSON.stringify(recentRuns));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
res.writeHead(404);
|
|
34
|
+
res.end();
|
|
35
|
+
});
|
|
36
|
+
const wss = new WebSocketServer({ server: httpServer });
|
|
37
|
+
wss.on('connection', (ws) => {
|
|
38
|
+
clients.add(ws);
|
|
39
|
+
// Send recent state on connect
|
|
40
|
+
ws.send(JSON.stringify({ type: 'init', runs: recentRuns }));
|
|
41
|
+
ws.on('close', () => clients.delete(ws));
|
|
42
|
+
ws.on('error', () => clients.delete(ws));
|
|
43
|
+
});
|
|
44
|
+
httpServer.listen(port);
|
|
45
|
+
instance = {
|
|
46
|
+
port,
|
|
47
|
+
broadcast(event) {
|
|
48
|
+
const msg = JSON.stringify(event);
|
|
49
|
+
for (const client of clients) {
|
|
50
|
+
if (client.readyState === client.OPEN)
|
|
51
|
+
client.send(msg);
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
close() {
|
|
55
|
+
httpServer.close();
|
|
56
|
+
wss.close();
|
|
57
|
+
instance = null;
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
return instance;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/browser/dashboard/server.ts"],"names":[],"mappings":"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"}
|