ai-browser 0.2.5 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +10 -1
  2. package/dist/agent/agent-loop.d.ts +18 -0
  3. package/dist/agent/agent-loop.d.ts.map +1 -1
  4. package/dist/agent/agent-loop.js +233 -3
  5. package/dist/agent/agent-loop.js.map +1 -1
  6. package/dist/agent/content-budget.d.ts.map +1 -1
  7. package/dist/agent/content-budget.js +4 -0
  8. package/dist/agent/content-budget.js.map +1 -1
  9. package/dist/agent/conversation-manager.d.ts.map +1 -1
  10. package/dist/agent/conversation-manager.js +20 -6
  11. package/dist/agent/conversation-manager.js.map +1 -1
  12. package/dist/agent/index.js +7 -2
  13. package/dist/agent/index.js.map +1 -1
  14. package/dist/agent/prompt.d.ts +1 -1
  15. package/dist/agent/prompt.d.ts.map +1 -1
  16. package/dist/agent/prompt.js +8 -0
  17. package/dist/agent/prompt.js.map +1 -1
  18. package/dist/agent/tool-usage-tracker.d.ts.map +1 -1
  19. package/dist/agent/tool-usage-tracker.js +7 -3
  20. package/dist/agent/tool-usage-tracker.js.map +1 -1
  21. package/dist/agent/types.d.ts +6 -0
  22. package/dist/agent/types.d.ts.map +1 -1
  23. package/dist/api/mcp-sse.d.ts +2 -1
  24. package/dist/api/mcp-sse.d.ts.map +1 -1
  25. package/dist/api/mcp-sse.js +2 -1
  26. package/dist/api/mcp-sse.js.map +1 -1
  27. package/dist/api/routes.d.ts +2 -1
  28. package/dist/api/routes.d.ts.map +1 -1
  29. package/dist/api/routes.js +289 -14
  30. package/dist/api/routes.js.map +1 -1
  31. package/dist/browser/BrowserManager.d.ts.map +1 -1
  32. package/dist/browser/BrowserManager.js +5 -2
  33. package/dist/browser/BrowserManager.js.map +1 -1
  34. package/dist/cli/mcp-stdio.js +3 -0
  35. package/dist/cli/mcp-stdio.js.map +1 -1
  36. package/dist/cli/server.js +15 -3
  37. package/dist/cli/server.js.map +1 -1
  38. package/dist/mcp/ai-markdown.d.ts.map +1 -1
  39. package/dist/mcp/ai-markdown.js +106 -38
  40. package/dist/mcp/ai-markdown.js.map +1 -1
  41. package/dist/mcp/browser-mcp-server.d.ts +2 -0
  42. package/dist/mcp/browser-mcp-server.d.ts.map +1 -1
  43. package/dist/mcp/browser-mcp-server.js +72 -13
  44. package/dist/mcp/browser-mcp-server.js.map +1 -1
  45. package/dist/mcp/task-tools.d.ts.map +1 -1
  46. package/dist/mcp/task-tools.js +1 -0
  47. package/dist/mcp/task-tools.js.map +1 -1
  48. package/dist/memory/KnowledgeCardStore.d.ts +35 -0
  49. package/dist/memory/KnowledgeCardStore.d.ts.map +1 -0
  50. package/dist/memory/KnowledgeCardStore.js +304 -0
  51. package/dist/memory/KnowledgeCardStore.js.map +1 -0
  52. package/dist/memory/MemoryCapturer.d.ts +14 -0
  53. package/dist/memory/MemoryCapturer.d.ts.map +1 -0
  54. package/dist/memory/MemoryCapturer.js +183 -0
  55. package/dist/memory/MemoryCapturer.js.map +1 -0
  56. package/dist/memory/MemoryInjector.d.ts +23 -0
  57. package/dist/memory/MemoryInjector.d.ts.map +1 -0
  58. package/dist/memory/MemoryInjector.js +180 -0
  59. package/dist/memory/MemoryInjector.js.map +1 -0
  60. package/dist/memory/RecordingConverter.d.ts +16 -0
  61. package/dist/memory/RecordingConverter.d.ts.map +1 -0
  62. package/dist/memory/RecordingConverter.js +108 -0
  63. package/dist/memory/RecordingConverter.js.map +1 -0
  64. package/dist/memory/SessionRecorder.d.ts +39 -0
  65. package/dist/memory/SessionRecorder.d.ts.map +1 -0
  66. package/dist/memory/SessionRecorder.js +198 -0
  67. package/dist/memory/SessionRecorder.js.map +1 -0
  68. package/dist/memory/index.d.ts +8 -0
  69. package/dist/memory/index.d.ts.map +1 -0
  70. package/dist/memory/index.js +6 -0
  71. package/dist/memory/index.js.map +1 -0
  72. package/dist/memory/types.d.ts +39 -0
  73. package/dist/memory/types.d.ts.map +1 -0
  74. package/dist/memory/types.js +2 -0
  75. package/dist/memory/types.js.map +1 -0
  76. package/dist/semantic/PageAnalyzer.d.ts.map +1 -1
  77. package/dist/semantic/PageAnalyzer.js +2 -1
  78. package/dist/semantic/PageAnalyzer.js.map +1 -1
  79. package/dist/task/templates/login-keep-session.d.ts.map +1 -1
  80. package/dist/task/templates/login-keep-session.js +2 -4
  81. package/dist/task/templates/login-keep-session.js.map +1 -1
  82. package/dist/task/tool-actions.d.ts.map +1 -1
  83. package/dist/task/tool-actions.js +6 -11
  84. package/dist/task/tool-actions.js.map +1 -1
  85. package/dist/utils/safe-page.d.ts +9 -0
  86. package/dist/utils/safe-page.d.ts.map +1 -0
  87. package/dist/utils/safe-page.js +14 -0
  88. package/dist/utils/safe-page.js.map +1 -0
  89. package/package.json +3 -1
  90. package/public/index.html +1651 -133
  91. package/public/task-result.html +107 -12
  92. package/public/tasks.html +83 -10
@@ -4,20 +4,115 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Task Result - AI Browser</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
7
10
  <style>
8
- body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; margin: 0; background: #0d1117; color: #c9d1d9; }
9
- .wrap { max-width: 1080px; margin: 24px auto; padding: 0 16px; }
10
- .head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; }
11
- h1 { margin: 0; font-size: 24px; }
12
- a { color: #58a6ff; }
11
+ :root {
12
+ --bg-canvas: #0a0e14;
13
+ --bg-surface: #12171f;
14
+ --bg-overlay: #1a2030;
15
+ --border: #252d3a;
16
+ --text-primary: #d4dae4;
17
+ --text-secondary: #8892a2;
18
+ --text-muted: #4a5568;
19
+ --accent: #63a0ff;
20
+ --accent-dim: rgba(99,160,255,0.12);
21
+ --green: #22c55e;
22
+ --green-dim: rgba(34,197,94,0.12);
23
+ --red: #ef4444;
24
+ --red-dim: rgba(239,68,68,0.12);
25
+ --radius-md: 8px;
26
+ --radius-lg: 12px;
27
+ --radius-xl: 16px;
28
+ --shadow: 0 2px 8px rgba(0,0,0,0.3), 0 1px 3px rgba(0,0,0,0.2);
29
+ --transition: 180ms cubic-bezier(0.4, 0, 0.2, 1);
30
+ }
31
+ * { box-sizing: border-box; margin: 0; padding: 0; }
32
+ body {
33
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
34
+ background: var(--bg-canvas);
35
+ background-image: radial-gradient(ellipse at 50% 0%, rgba(99,160,255,0.03) 0%, transparent 60%);
36
+ color: var(--text-primary);
37
+ -webkit-font-smoothing: antialiased;
38
+ }
39
+ ::-webkit-scrollbar { width: 5px; height: 5px; }
40
+ ::-webkit-scrollbar-track { background: transparent; }
41
+ ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
42
+ .wrap { max-width: 1080px; margin: 32px auto; padding: 0 16px; }
43
+ .head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; }
44
+ h1 {
45
+ margin: 0;
46
+ font-size: 24px;
47
+ font-weight: 700;
48
+ background: linear-gradient(135deg, var(--accent), #a78bfa);
49
+ -webkit-background-clip: text;
50
+ -webkit-text-fill-color: transparent;
51
+ background-clip: text;
52
+ }
53
+ a {
54
+ color: var(--accent);
55
+ text-decoration: none;
56
+ font-weight: 500;
57
+ font-size: 14px;
58
+ padding: 7px 14px;
59
+ border: 1px solid var(--border);
60
+ border-radius: var(--radius-md);
61
+ background: var(--bg-overlay);
62
+ transition: all var(--transition);
63
+ }
64
+ a:hover { border-color: var(--accent); background: var(--bg-surface); }
13
65
  .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
14
- .card { background: #161b22; border: 1px solid #30363d; border-radius: 8px; padding: 16px; }
15
- .meta { display: grid; grid-template-columns: 120px 1fr; row-gap: 8px; font-size: 14px; }
16
- .key { color: #8b949e; }
17
- pre { background: #0d1117; border: 1px solid #30363d; border-radius: 6px; padding: 12px; overflow: auto; max-height: 420px; }
18
- .status-running { color: #58a6ff; }
19
- .status-done { color: #3fb950; }
20
- .error { color: #ff7b72; white-space: pre-wrap; margin-top: 12px; }
66
+ .card {
67
+ background: var(--bg-surface);
68
+ border: 1px solid var(--border);
69
+ border-radius: var(--radius-xl);
70
+ padding: 20px;
71
+ box-shadow: var(--shadow);
72
+ }
73
+ .card h3 { font-size: 14px; font-weight: 600; color: var(--text-secondary); margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; }
74
+ .meta { display: grid; grid-template-columns: 100px 1fr; row-gap: 10px; font-size: 14px; }
75
+ .key { color: var(--text-muted); font-weight: 500; }
76
+ pre {
77
+ background: var(--bg-canvas);
78
+ border: 1px solid var(--border);
79
+ border-radius: var(--radius-md);
80
+ padding: 14px;
81
+ overflow: auto;
82
+ max-height: 420px;
83
+ font-size: 13px;
84
+ font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
85
+ line-height: 1.5;
86
+ color: var(--text-secondary);
87
+ }
88
+ .status-running {
89
+ color: var(--accent);
90
+ background: var(--accent-dim);
91
+ padding: 2px 8px;
92
+ border-radius: 6px;
93
+ font-weight: 600;
94
+ font-size: 13px;
95
+ }
96
+ .status-done {
97
+ color: var(--green);
98
+ background: var(--green-dim);
99
+ padding: 2px 8px;
100
+ border-radius: 6px;
101
+ font-weight: 600;
102
+ font-size: 13px;
103
+ }
104
+ .error {
105
+ color: #fca5a5;
106
+ white-space: pre-wrap;
107
+ margin-top: 12px;
108
+ font-size: 13px;
109
+ padding: 10px 14px;
110
+ background: var(--red-dim);
111
+ border-radius: var(--radius-md);
112
+ border-left: 3px solid var(--red);
113
+ display: none;
114
+ }
115
+ .error:not(:empty) { display: block; }
21
116
  @media (max-width: 900px) { .grid { grid-template-columns: 1fr; } }
22
117
  </style>
23
118
  </head>
package/public/tasks.html CHANGED
@@ -4,19 +4,92 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Task Submit - AI Browser</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
7
10
  <style>
8
- body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; margin: 0; background: #0d1117; color: #c9d1d9; }
9
- .wrap { max-width: 900px; margin: 24px auto; padding: 0 16px; }
10
- h1 { font-size: 24px; margin-bottom: 16px; }
11
- .card { background: #161b22; border: 1px solid #30363d; border-radius: 8px; padding: 16px; margin-bottom: 16px; }
12
- label { display: block; margin: 12px 0 6px; color: #8b949e; font-size: 13px; }
13
- input, textarea { width: 100%; box-sizing: border-box; padding: 10px; border-radius: 6px; border: 1px solid #30363d; background: #0d1117; color: #c9d1d9; font-size: 14px; }
11
+ :root {
12
+ --bg-canvas: #0a0e14;
13
+ --bg-surface: #12171f;
14
+ --bg-overlay: #1a2030;
15
+ --border: #252d3a;
16
+ --text-primary: #d4dae4;
17
+ --text-secondary: #8892a2;
18
+ --text-muted: #4a5568;
19
+ --accent: #63a0ff;
20
+ --accent-dim: rgba(99,160,255,0.12);
21
+ --green: #22c55e;
22
+ --green-hover: #16a34a;
23
+ --red: #ef4444;
24
+ --radius-md: 8px;
25
+ --radius-lg: 12px;
26
+ --radius-xl: 16px;
27
+ --shadow-sm: 0 1px 2px rgba(0,0,0,0.3), 0 1px 3px rgba(0,0,0,0.15);
28
+ --shadow: 0 2px 8px rgba(0,0,0,0.3), 0 1px 3px rgba(0,0,0,0.2);
29
+ --transition: 180ms cubic-bezier(0.4, 0, 0.2, 1);
30
+ }
31
+ * { box-sizing: border-box; margin: 0; padding: 0; }
32
+ body {
33
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
34
+ background: var(--bg-canvas);
35
+ background-image: radial-gradient(ellipse at 50% 0%, rgba(99,160,255,0.03) 0%, transparent 60%);
36
+ color: var(--text-primary);
37
+ -webkit-font-smoothing: antialiased;
38
+ }
39
+ .wrap { max-width: 900px; margin: 32px auto; padding: 0 16px; }
40
+ h1 {
41
+ font-size: 24px;
42
+ margin-bottom: 20px;
43
+ font-weight: 700;
44
+ background: linear-gradient(135deg, var(--accent), #a78bfa);
45
+ -webkit-background-clip: text;
46
+ -webkit-text-fill-color: transparent;
47
+ background-clip: text;
48
+ }
49
+ .card {
50
+ background: var(--bg-surface);
51
+ border: 1px solid var(--border);
52
+ border-radius: var(--radius-xl);
53
+ padding: 24px;
54
+ margin-bottom: 16px;
55
+ box-shadow: var(--shadow);
56
+ }
57
+ label { display: block; margin: 14px 0 6px; color: var(--text-secondary); font-size: 13px; font-weight: 500; }
58
+ input, textarea {
59
+ width: 100%;
60
+ box-sizing: border-box;
61
+ padding: 10px 12px;
62
+ border-radius: var(--radius-md);
63
+ border: 1px solid var(--border);
64
+ background: var(--bg-canvas);
65
+ color: var(--text-primary);
66
+ font-size: 14px;
67
+ font-family: inherit;
68
+ outline: none;
69
+ transition: all var(--transition);
70
+ }
71
+ input:focus, textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-dim); }
14
72
  textarea { min-height: 90px; resize: vertical; }
15
73
  .row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
16
- button { margin-top: 16px; background: #238636; color: #fff; border: none; border-radius: 6px; padding: 10px 16px; cursor: pointer; font-weight: 600; }
17
- button:disabled { opacity: 0.6; cursor: not-allowed; }
18
- .tip { color: #8b949e; font-size: 12px; margin-top: 8px; }
19
- .error { color: #ff7b72; white-space: pre-wrap; }
74
+ button {
75
+ margin-top: 16px;
76
+ background: linear-gradient(135deg, var(--green), var(--green-hover));
77
+ color: #fff;
78
+ border: none;
79
+ border-radius: var(--radius-md);
80
+ padding: 10px 20px;
81
+ cursor: pointer;
82
+ font-weight: 600;
83
+ font-family: inherit;
84
+ font-size: 14px;
85
+ box-shadow: 0 2px 8px rgba(34,197,94,0.2);
86
+ transition: all var(--transition);
87
+ }
88
+ button:hover { box-shadow: 0 4px 12px rgba(34,197,94,0.3); transform: translateY(-1px); }
89
+ button:disabled { opacity: 0.5; cursor: not-allowed; transform: none; box-shadow: none; }
90
+ .tip { color: var(--text-muted); font-size: 12px; margin-top: 10px; }
91
+ .error { color: #fca5a5; white-space: pre-wrap; margin-top: 12px; font-size: 13px; }
92
+ @media (max-width: 600px) { .row { grid-template-columns: 1fr; } }
20
93
  </style>
21
94
  </head>
22
95
  <body>