fastbrowser_cli 1.0.2

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 (101) hide show
  1. package/README.md +0 -0
  2. package/dist/contrib/fastweb-cli/fastweb-cli.d.ts +3 -0
  3. package/dist/contrib/fastweb-cli/fastweb-cli.d.ts.map +1 -0
  4. package/dist/contrib/fastweb-cli/fastweb-cli.js +151 -0
  5. package/dist/contrib/fastweb-cli/fastweb-cli.js.map +1 -0
  6. package/dist/contrib/fastweb-cli/http-client.d.ts +7 -0
  7. package/dist/contrib/fastweb-cli/http-client.d.ts.map +1 -0
  8. package/dist/contrib/fastweb-cli/http-client.js +51 -0
  9. package/dist/contrib/fastweb-cli/http-client.js.map +1 -0
  10. package/dist/contrib/fastweb-http-server/fastweb-http-server.d.ts +3 -0
  11. package/dist/contrib/fastweb-http-server/fastweb-http-server.d.ts.map +1 -0
  12. package/dist/contrib/fastweb-http-server/fastweb-http-server.js +82 -0
  13. package/dist/contrib/fastweb-http-server/fastweb-http-server.js.map +1 -0
  14. package/dist/contrib/fastweb-http-server/routes.d.ts +6 -0
  15. package/dist/contrib/fastweb-http-server/routes.d.ts.map +1 -0
  16. package/dist/contrib/fastweb-http-server/routes.js +41 -0
  17. package/dist/contrib/fastweb-http-server/routes.js.map +1 -0
  18. package/dist/contrib/fastweb-http-server/tool-schemas.d.ts +63 -0
  19. package/dist/contrib/fastweb-http-server/tool-schemas.d.ts.map +1 -0
  20. package/dist/contrib/fastweb-http-server/tool-schemas.js +61 -0
  21. package/dist/contrib/fastweb-http-server/tool-schemas.js.map +1 -0
  22. package/dist/fastweb_cli/fastweb_cli.d.ts +3 -0
  23. package/dist/fastweb_cli/fastweb_cli.d.ts.map +1 -0
  24. package/dist/fastweb_cli/fastweb_cli.js +254 -0
  25. package/dist/fastweb_cli/fastweb_cli.js.map +1 -0
  26. package/dist/fastweb_cli/http-client.d.ts +7 -0
  27. package/dist/fastweb_cli/http-client.d.ts.map +1 -0
  28. package/dist/fastweb_cli/http-client.js +51 -0
  29. package/dist/fastweb_cli/http-client.js.map +1 -0
  30. package/dist/fastweb_cli/libs/http-client.d.ts +7 -0
  31. package/dist/fastweb_cli/libs/http-client.d.ts.map +1 -0
  32. package/dist/fastweb_cli/libs/http-client.js +51 -0
  33. package/dist/fastweb_cli/libs/http-client.js.map +1 -0
  34. package/dist/fastweb_cli/libs/server-manager.d.ts +12 -0
  35. package/dist/fastweb_cli/libs/server-manager.d.ts.map +1 -0
  36. package/dist/fastweb_cli/libs/server-manager.js +194 -0
  37. package/dist/fastweb_cli/libs/server-manager.js.map +1 -0
  38. package/dist/fastweb_http_server/fastweb_http_server.d.ts +3 -0
  39. package/dist/fastweb_http_server/fastweb_http_server.d.ts.map +1 -0
  40. package/dist/fastweb_http_server/fastweb_http_server.js +82 -0
  41. package/dist/fastweb_http_server/fastweb_http_server.js.map +1 -0
  42. package/dist/fastweb_http_server/libs/routes.d.ts +6 -0
  43. package/dist/fastweb_http_server/libs/routes.d.ts.map +1 -0
  44. package/dist/fastweb_http_server/libs/routes.js +41 -0
  45. package/dist/fastweb_http_server/libs/routes.js.map +1 -0
  46. package/dist/fastweb_http_server/libs/tool-schemas.d.ts +72 -0
  47. package/dist/fastweb_http_server/libs/tool-schemas.d.ts.map +1 -0
  48. package/dist/fastweb_http_server/libs/tool-schemas.js +65 -0
  49. package/dist/fastweb_http_server/libs/tool-schemas.js.map +1 -0
  50. package/dist/fastweb_http_server/routes.d.ts +6 -0
  51. package/dist/fastweb_http_server/routes.d.ts.map +1 -0
  52. package/dist/fastweb_http_server/routes.js +41 -0
  53. package/dist/fastweb_http_server/routes.js.map +1 -0
  54. package/dist/fastweb_http_server/tool-schemas.d.ts +63 -0
  55. package/dist/fastweb_http_server/tool-schemas.d.ts.map +1 -0
  56. package/dist/fastweb_http_server/tool-schemas.js +61 -0
  57. package/dist/fastweb_http_server/tool-schemas.js.map +1 -0
  58. package/dist/fastweb_mcp/fastweb_mcp.d.ts +4 -0
  59. package/dist/fastweb_mcp/fastweb_mcp.d.ts.map +1 -0
  60. package/dist/fastweb_mcp/fastweb_mcp.js +417 -0
  61. package/dist/fastweb_mcp/fastweb_mcp.js.map +1 -0
  62. package/dist/fastweb_mcp/libs/mcp_client.d.ts +120 -0
  63. package/dist/fastweb_mcp/libs/mcp_client.d.ts.map +1 -0
  64. package/dist/fastweb_mcp/libs/mcp_client.js +83 -0
  65. package/dist/fastweb_mcp/libs/mcp_client.js.map +1 -0
  66. package/dist/fastweb_mcp/libs/mcp_proxy.d.ts +10 -0
  67. package/dist/fastweb_mcp/libs/mcp_proxy.d.ts.map +1 -0
  68. package/dist/fastweb_mcp/libs/mcp_proxy.js +45 -0
  69. package/dist/fastweb_mcp/libs/mcp_proxy.js.map +1 -0
  70. package/dist/fastweb_mcp/libs/schemas.d.ts +28 -0
  71. package/dist/fastweb_mcp/libs/schemas.d.ts.map +1 -0
  72. package/dist/fastweb_mcp/libs/schemas.js +38 -0
  73. package/dist/fastweb_mcp/libs/schemas.js.map +1 -0
  74. package/dist/src/fastweb_mcp.d.ts +17 -0
  75. package/dist/src/fastweb_mcp.d.ts.map +1 -0
  76. package/dist/src/fastweb_mcp.js +342 -0
  77. package/dist/src/fastweb_mcp.js.map +1 -0
  78. package/dist/src/libs/mcp_client.d.ts +120 -0
  79. package/dist/src/libs/mcp_client.d.ts.map +1 -0
  80. package/dist/src/libs/mcp_client.js +83 -0
  81. package/dist/src/libs/mcp_client.js.map +1 -0
  82. package/dist/src/libs/mcp_proxy.d.ts +10 -0
  83. package/dist/src/libs/mcp_proxy.d.ts.map +1 -0
  84. package/dist/src/libs/mcp_proxy.js +45 -0
  85. package/dist/src/libs/mcp_proxy.js.map +1 -0
  86. package/docs/brainstorm_scrap_by_ai.md +32 -0
  87. package/docs/feature_support_cli.md +86 -0
  88. package/package.json +36 -0
  89. package/src/fastweb_cli/fastweb_cli.ts +306 -0
  90. package/src/fastweb_cli/libs/http-client.ts +50 -0
  91. package/src/fastweb_cli/libs/server-manager.ts +210 -0
  92. package/src/fastweb_http_server/fastweb_http_server.ts +97 -0
  93. package/src/fastweb_http_server/libs/routes.ts +44 -0
  94. package/src/fastweb_http_server/libs/tool-schemas.ts +107 -0
  95. package/src/fastweb_mcp/fastweb_mcp.ts +475 -0
  96. package/src/fastweb_mcp/libs/mcp_client.ts +117 -0
  97. package/src/fastweb_mcp/libs/mcp_proxy.ts +48 -0
  98. package/src/fastweb_mcp/libs/schemas.ts +44 -0
  99. package/tmp/.claude/settings.local.json +7 -0
  100. package/tmp/.claude/skills/fastweb/SKILL.md +214 -0
  101. package/tsconfig.json +40 -0
@@ -0,0 +1,44 @@
1
+ // npm imports
2
+ import type { Express, Request, Response } from 'express';
3
+
4
+ // local imports
5
+ import { McpClient } from '../../fastweb_mcp/libs/mcp_client.js';
6
+ import { TOOL_SCHEMAS, ToolResponseSchema } from './tool-schemas.js';
7
+
8
+ ///////////////////////////////////////////////////////////////////////////////
9
+ ///////////////////////////////////////////////////////////////////////////////
10
+ //
11
+ ///////////////////////////////////////////////////////////////////////////////
12
+ ///////////////////////////////////////////////////////////////////////////////
13
+
14
+ export class Routes {
15
+ static register(app: Express, mcpClient: McpClient): void {
16
+ app.get('/health', (_req: Request, res: Response) => {
17
+ res.json({ ok: true });
18
+ });
19
+
20
+ for (const entry of TOOL_SCHEMAS) {
21
+ const path = `/tools/${entry.routeName}`;
22
+ app.post(path, async (request: Request, response: Response) => {
23
+ // Validate body against the tool's Zod schema
24
+ const parsed = entry.requestSchema.safeParse(request.body ?? {});
25
+ if (parsed.success === false) {
26
+ response.status(400).json({ error: parsed.error.flatten() });
27
+ return;
28
+ }
29
+
30
+ try {
31
+ const mcpResult = await mcpClient.callTool(entry.mcpToolName, parsed.data as Record<string, unknown>);
32
+ // Narrow the MCP result to our uniform response shape.
33
+ const toolResponse = ToolResponseSchema.parse({
34
+ content: mcpResult.content,
35
+ });
36
+ response.json(toolResponse);
37
+ } catch (err) {
38
+ const message = err instanceof Error ? err.message : String(err);
39
+ response.status(500).json({ error: message });
40
+ }
41
+ });
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,107 @@
1
+ // npm imports
2
+ import { z } from 'zod';
3
+
4
+ // local imports - reuse the authoritative query selector schemas
5
+ import { QuerySelectorsInputSchema, QuerySelectorsFirstInputSchema } from '../../fastweb_mcp/libs/schemas.js';
6
+ export type { QuerySelectorInput, QuerySelectorsInput, QuerySelectorFirstInput, QuerySelectorsFirstInput } from '../../fastweb_mcp/libs/schemas.js';
7
+
8
+ ///////////////////////////////////////////////////////////////////////////////
9
+ ///////////////////////////////////////////////////////////////////////////////
10
+ // Request schemas — one per tool. Shapes mirror what the underlying
11
+ // fastweb-mcp tools accept. For the proxied chrome-devtools-mcp tools,
12
+ // the shapes come from chrome-devtools-mcp's tool reference.
13
+ ///////////////////////////////////////////////////////////////////////////////
14
+ ///////////////////////////////////////////////////////////////////////////////
15
+
16
+ export const ListPagesRequestSchema = z.object({}).strict();
17
+ export type ListPagesRequest = z.infer<typeof ListPagesRequestSchema>;
18
+
19
+ export const NewPageRequestSchema = z.object({
20
+ url: z.string().describe('URL to open in the new page'),
21
+ });
22
+ export type NewPageRequest = z.infer<typeof NewPageRequestSchema>;
23
+
24
+ export const ClosePageRequestSchema = z.object({
25
+ pageId: z.number().describe('The id of the page to close'),
26
+ });
27
+ export type ClosePageRequest = z.infer<typeof ClosePageRequestSchema>;
28
+
29
+ export const NavigatePageRequestSchema = z.object({
30
+ url: z.string().describe('URL to navigate to'),
31
+ });
32
+ export type NavigatePageRequest = z.infer<typeof NavigatePageRequestSchema>;
33
+
34
+ export const ClickRequestSchema = z.object({
35
+ selector: z.string().describe('Accessibility selector (e.g. "#1_3" or \'button[name="Submit"]\')'),
36
+ });
37
+ export type ClickRequest = z.infer<typeof ClickRequestSchema>;
38
+
39
+ export const FillFormElementSchema = z.object({
40
+ selector: z.string(),
41
+ value: z.string(),
42
+ });
43
+ export type FillFormElement = z.infer<typeof FillFormElementSchema>;
44
+
45
+ export const FillFormRequestSchema = z.object({
46
+ elements: z.array(FillFormElementSchema).describe('Elements to fill, each with a selector and a value'),
47
+ });
48
+ export type FillFormRequest = z.infer<typeof FillFormRequestSchema>;
49
+
50
+ export const QuerySelectorsAllRequestSchema = QuerySelectorsInputSchema;
51
+ export type QuerySelectorsAllRequest = z.infer<typeof QuerySelectorsAllRequestSchema>;
52
+
53
+ export const QuerySelectorRequestSchema = QuerySelectorsFirstInputSchema;
54
+ export type QuerySelectorRequest = z.infer<typeof QuerySelectorRequestSchema>;
55
+
56
+ export const PressKeysRequestSchema = z.object({
57
+ keys: z.string().describe("Comma-separated sequence of keys. E.g. 'Hello, Tab, Enter'"),
58
+ });
59
+ export type PressKeysRequest = z.infer<typeof PressKeysRequestSchema>;
60
+
61
+ export const TakeSnapshotRequestSchema = z.object({}).strict();
62
+ export type TakeSnapshotRequest = z.infer<typeof TakeSnapshotRequestSchema>;
63
+
64
+ ///////////////////////////////////////////////////////////////////////////////
65
+ ///////////////////////////////////////////////////////////////////////////////
66
+ // Uniform response — narrowed mirror of MCP's CallToolResult
67
+ ///////////////////////////////////////////////////////////////////////////////
68
+ ///////////////////////////////////////////////////////////////////////////////
69
+
70
+ export const TextContentSchema = z.object({
71
+ type: z.literal('text'),
72
+ text: z.string(),
73
+ });
74
+ export type TextContent = z.infer<typeof TextContentSchema>;
75
+
76
+ export const ToolResponseSchema = z.object({
77
+ content: z.array(TextContentSchema),
78
+ });
79
+ export type ToolResponse = z.infer<typeof ToolResponseSchema>;
80
+
81
+ ///////////////////////////////////////////////////////////////////////////////
82
+ ///////////////////////////////////////////////////////////////////////////////
83
+ // Registry — drives route registration and CLI command generation
84
+ ///////////////////////////////////////////////////////////////////////////////
85
+ ///////////////////////////////////////////////////////////////////////////////
86
+
87
+ // The REST route name (snake_case, matches the CLI command) is distinct from
88
+ // the underlying MCP tool name (which may be camelCase for fastweb-mcp's own
89
+ // tools). `mcpToolName` is what we send over MCP; `routeName` is the URL path.
90
+ export type ToolSchemaEntry = {
91
+ routeName: string;
92
+ mcpToolName: string;
93
+ requestSchema: z.ZodType;
94
+ };
95
+
96
+ export const TOOL_SCHEMAS: ToolSchemaEntry[] = [
97
+ { routeName: 'list_pages', mcpToolName: 'list_pages', requestSchema: ListPagesRequestSchema },
98
+ { routeName: 'new_page', mcpToolName: 'new_page', requestSchema: NewPageRequestSchema },
99
+ { routeName: 'close_page', mcpToolName: 'close_page', requestSchema: ClosePageRequestSchema },
100
+ { routeName: 'navigate_page', mcpToolName: 'navigate_page', requestSchema: NavigatePageRequestSchema },
101
+ { routeName: 'click', mcpToolName: 'click', requestSchema: ClickRequestSchema },
102
+ { routeName: 'fill_form', mcpToolName: 'fill_form', requestSchema: FillFormRequestSchema },
103
+ { routeName: 'query_selectors_all', mcpToolName: 'querySelectorsAll', requestSchema: QuerySelectorsAllRequestSchema },
104
+ { routeName: 'query_selectors', mcpToolName: 'querySelectors', requestSchema: QuerySelectorRequestSchema },
105
+ { routeName: 'press_keys', mcpToolName: 'pressKeys', requestSchema: PressKeysRequestSchema },
106
+ { routeName: 'take_snapshot', mcpToolName: 'take_snapshot', requestSchema: TakeSnapshotRequestSchema },
107
+ ];