grokbot-control 0.0.0-stage → 0.1.3

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 (122) hide show
  1. package/README.md +160 -2
  2. package/dist/auth/lock.d.ts +14 -0
  3. package/dist/auth/lock.js +71 -0
  4. package/dist/auth/provider.d.ts +89 -0
  5. package/dist/auth/provider.js +884 -0
  6. package/dist/auth/store.d.ts +25 -0
  7. package/dist/auth/store.js +106 -0
  8. package/dist/auth/types.d.ts +138 -0
  9. package/dist/auth/types.js +1 -0
  10. package/dist/cli/config.d.ts +26 -0
  11. package/dist/cli/config.js +98 -0
  12. package/dist/cli/help.d.ts +1 -0
  13. package/dist/cli/help.js +83 -0
  14. package/dist/cli/io.d.ts +6 -0
  15. package/dist/cli/io.js +61 -0
  16. package/dist/cli/main.d.ts +2 -0
  17. package/dist/cli/main.js +275 -0
  18. package/dist/cli/sync.d.ts +4 -0
  19. package/dist/cli/sync.js +105 -0
  20. package/dist/connect/client.d.ts +32 -0
  21. package/dist/connect/client.js +257 -0
  22. package/dist/dto/result.d.ts +33 -0
  23. package/dist/dto/result.js +29 -0
  24. package/dist/dto/types.d.ts +63 -0
  25. package/dist/dto/types.js +2 -0
  26. package/dist/errors.d.ts +31 -0
  27. package/dist/errors.js +64 -0
  28. package/dist/index.d.ts +13 -0
  29. package/dist/index.js +11 -0
  30. package/dist/mcp/main.d.ts +2 -0
  31. package/dist/mcp/main.js +82 -0
  32. package/dist/mcp/tools.d.ts +24 -0
  33. package/dist/mcp/tools.js +408 -0
  34. package/dist/mcp/zod-json.d.ts +2 -0
  35. package/dist/mcp/zod-json.js +4 -0
  36. package/dist/ops/auth.d.ts +48 -0
  37. package/dist/ops/auth.js +89 -0
  38. package/dist/ops/bot.d.ts +52 -0
  39. package/dist/ops/bot.js +211 -0
  40. package/dist/ops/limits.d.ts +10 -0
  41. package/dist/ops/limits.js +31 -0
  42. package/dist/ops/map.d.ts +7 -0
  43. package/dist/ops/map.js +57 -0
  44. package/dist/ops/message.d.ts +33 -0
  45. package/dist/ops/message.js +118 -0
  46. package/dist/ops/plane.d.ts +26 -0
  47. package/dist/ops/plane.js +33 -0
  48. package/dist/ops/progress.d.ts +34 -0
  49. package/dist/ops/progress.js +92 -0
  50. package/dist/ops/session.d.ts +13 -0
  51. package/dist/ops/session.js +34 -0
  52. package/dist/ops/sidebar.d.ts +70 -0
  53. package/dist/ops/sidebar.js +205 -0
  54. package/dist/sync/attachments.d.ts +76 -0
  55. package/dist/sync/attachments.js +274 -0
  56. package/dist/sync/core.d.ts +92 -0
  57. package/dist/sync/core.js +1027 -0
  58. package/dist/sync/decode.d.ts +83 -0
  59. package/dist/sync/decode.js +229 -0
  60. package/dist/sync/download-policy.d.ts +3 -0
  61. package/dist/sync/download-policy.js +103 -0
  62. package/dist/sync/fs.d.ts +24 -0
  63. package/dist/sync/fs.js +252 -0
  64. package/dist/sync/hydrate.d.ts +43 -0
  65. package/dist/sync/hydrate.js +472 -0
  66. package/dist/sync/render.d.ts +5 -0
  67. package/dist/sync/render.js +100 -0
  68. package/dist/testing/mock-persist.d.ts +3 -0
  69. package/dist/testing/mock-persist.js +45 -0
  70. package/dist/testing/mock-transport.d.ts +18 -0
  71. package/dist/testing/mock-transport.js +202 -0
  72. package/docs/acceptance.md +19 -0
  73. package/docs/architecture.md +128 -0
  74. package/docs/auth-lock.md +87 -0
  75. package/docs/implementation-plan.md +14 -0
  76. package/docs/implementation-status.md +92 -0
  77. package/docs/proto-drift.md +9 -0
  78. package/docs/protocol/README.md +34 -0
  79. package/docs/protocol/attachment-pagination-0.79.3.md +32 -0
  80. package/docs/protocol/auth-flow.md +51 -0
  81. package/docs/protocol/baseline-manifest.md +72 -0
  82. package/docs/protocol/baselines/full-schema-diff-0.78.4-to-0.79.2.txt +239 -0
  83. package/docs/protocol/baselines/full-schema-diff-0.78.4-to-0.79.3.txt +240 -0
  84. package/docs/protocol/baselines/full-schema-diff-0.79.2-to-0.79.3.txt +23 -0
  85. package/docs/protocol/baselines/schema-0.79.3/README.md +7 -0
  86. package/docs/protocol/baselines/schema-0.79.3/agent.v1.proto +5184 -0
  87. package/docs/protocol/baselines/schema-0.79.3/aiserver.v1.proto +18182 -0
  88. package/docs/protocol/baselines/schema-0.79.3/aiserver.v1_2.proto +54 -0
  89. package/docs/protocol/baselines/schema-0.79.3/anyrun.v1.proto +37 -0
  90. package/docs/protocol/baselines/schema-0.79.3/internapi.v1.proto +35 -0
  91. package/docs/protocol/baselines/schema-0.79.3/snapshot.json.gz +0 -0
  92. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.AgentStoreService.proto +34 -0
  93. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.AiService.proto +17 -0
  94. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.AnalyticsService.proto +17 -0
  95. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.BackgroundComposerService.proto +19 -0
  96. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.DashboardService.proto +101 -0
  97. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.GrokBotService.proto +473 -0
  98. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.SandBoxService.proto +64 -0
  99. package/docs/protocol/baselines/used-surface-0.78.4.json +3694 -0
  100. package/docs/protocol/baselines/used-surface-0.79.2.json +3835 -0
  101. package/docs/protocol/baselines/used-surface-0.79.3.json +3835 -0
  102. package/docs/protocol/baselines/used-surface-diff-0.78.4-to-0.79.2.md +34 -0
  103. package/docs/protocol/baselines/used-surface-diff-0.78.4-to-0.79.3.md +33 -0
  104. package/docs/protocol/compat-matrix.md +20 -0
  105. package/docs/protocol/static-restore.md +64 -0
  106. package/docs/protocol/surface-map.md +39 -0
  107. package/docs/protocol/transcript-body-0.79.3.md +98 -0
  108. package/docs/protocol/update-runbook.md +30 -0
  109. package/docs/protocol-map.md +106 -0
  110. package/docs/references.md +55 -0
  111. package/docs/requirements.md +26 -0
  112. package/docs/review.md +36 -0
  113. package/docs/sync-format.md +98 -0
  114. package/package.json +60 -4
  115. package/vendor/proto-gen/NOTICE.md +23 -0
  116. package/vendor/proto-gen/agent.v1_pb.js +9503 -0
  117. package/vendor/proto-gen/aiserver.v1_2_pb.js +105 -0
  118. package/vendor/proto-gen/aiserver.v1_pb.js +33163 -0
  119. package/vendor/proto-gen/anyrun.v1_pb.js +64 -0
  120. package/vendor/proto-gen/internapi.v1_pb.js +60 -0
  121. package/vendor/proto-gen/package.json +10 -0
  122. package/vendor/proto-gen/svc_aiserver.v1.GrokBotService_connect.js +4193 -0
@@ -0,0 +1,33 @@
1
+ /** Stable CLI/MCP envelope. schema_version only increases; fields only add. */
2
+ export declare const SCHEMA_VERSION: "1.0.0";
3
+ export type Outcome = "known_success" | "known_failure" | "unknown";
4
+ export type ResultEnvelope<T = unknown> = {
5
+ schema_version: typeof SCHEMA_VERSION;
6
+ ok: boolean;
7
+ outcome: Outcome;
8
+ code: string;
9
+ retryable: boolean;
10
+ request_id: string;
11
+ data?: T;
12
+ error?: {
13
+ message: string;
14
+ hint?: string;
15
+ details?: unknown;
16
+ };
17
+ /** When true, response came from explicit mock/sim transport — never claim live. */
18
+ simulated?: boolean;
19
+ };
20
+ export declare function newRequestId(): string;
21
+ export declare function okResult<T>(data: T, opts?: {
22
+ request_id?: string;
23
+ simulated?: boolean;
24
+ code?: string;
25
+ }): ResultEnvelope<T>;
26
+ export declare function failResult(code: string, message: string, opts?: {
27
+ outcome?: Outcome;
28
+ retryable?: boolean;
29
+ hint?: string;
30
+ request_id?: string;
31
+ details?: unknown;
32
+ simulated?: boolean;
33
+ }): ResultEnvelope<never>;
@@ -0,0 +1,29 @@
1
+ /** Stable CLI/MCP envelope. schema_version only increases; fields only add. */
2
+ export const SCHEMA_VERSION = "1.0.0";
3
+ export function newRequestId() {
4
+ return crypto.randomUUID();
5
+ }
6
+ export function okResult(data, opts) {
7
+ return {
8
+ schema_version: SCHEMA_VERSION,
9
+ ok: true,
10
+ outcome: "known_success",
11
+ code: opts?.code ?? "ok",
12
+ retryable: false,
13
+ request_id: opts?.request_id ?? newRequestId(),
14
+ data,
15
+ simulated: opts?.simulated,
16
+ };
17
+ }
18
+ export function failResult(code, message, opts) {
19
+ return {
20
+ schema_version: SCHEMA_VERSION,
21
+ ok: false,
22
+ outcome: opts?.outcome ?? "known_failure",
23
+ code,
24
+ retryable: opts?.retryable ?? false,
25
+ request_id: opts?.request_id ?? newRequestId(),
26
+ error: { message, hint: opts?.hint, details: opts?.details },
27
+ simulated: opts?.simulated,
28
+ };
29
+ }
@@ -0,0 +1,63 @@
1
+ /** Public stable DTOs (not raw protobuf dumps). */
2
+ export type BotSummary = {
3
+ agent_id: string;
4
+ id: string;
5
+ name: string;
6
+ description: string;
7
+ title: string;
8
+ harness: string;
9
+ role: string;
10
+ kind: string;
11
+ viewer_session_id: string;
12
+ created_at_ms?: string;
13
+ updated_at_ms?: string;
14
+ };
15
+ export type SidebarSection = {
16
+ id: string;
17
+ name: string;
18
+ agent_ids: string[];
19
+ };
20
+ export type SessionSummary = {
21
+ agent_id: string;
22
+ session_id: string;
23
+ kind: string;
24
+ created_at_ms?: string;
25
+ updated_at_ms?: string;
26
+ };
27
+ export type ProgressStatus = {
28
+ agent_id: string;
29
+ is_running: boolean;
30
+ session_id?: string;
31
+ live?: {
32
+ is_composing_message?: boolean;
33
+ is_retrying?: boolean;
34
+ awaiting?: unknown;
35
+ working_task_ids?: string[];
36
+ };
37
+ };
38
+ export type SendDelivery = {
39
+ message_id: string;
40
+ agent_id: string;
41
+ session_id: string;
42
+ dispatched?: boolean;
43
+ delivery?: string;
44
+ /** Delivery/acceptance only — NOT task/business success. */
45
+ note: string;
46
+ };
47
+ export type SendStatusView = {
48
+ agent_id: string;
49
+ message_id: string;
50
+ session_id: string;
51
+ status?: string;
52
+ rejection_code?: string;
53
+ accepted_at_ms?: string;
54
+ note: string;
55
+ };
56
+ export type TranscriptEntryView = {
57
+ /** Opaque / partial — ciphertext or omitted bodies are not decrypted. */
58
+ entry_id?: string;
59
+ kind?: string;
60
+ omitted?: boolean;
61
+ preview?: string;
62
+ untrusted?: boolean;
63
+ };
@@ -0,0 +1,2 @@
1
+ /** Public stable DTOs (not raw protobuf dumps). */
2
+ export {};
@@ -0,0 +1,31 @@
1
+ import type { Outcome } from "./dto/result.js";
2
+ /** Mapped application error with exit-code semantics. */
3
+ export declare class GbcError extends Error {
4
+ readonly code: string;
5
+ readonly retryable: boolean;
6
+ readonly outcome: Outcome;
7
+ readonly hint?: string;
8
+ readonly details?: unknown;
9
+ readonly exitCode: number;
10
+ constructor(code: string, message: string, opts?: {
11
+ retryable?: boolean;
12
+ outcome?: Outcome;
13
+ hint?: string;
14
+ details?: unknown;
15
+ exitCode?: number;
16
+ });
17
+ }
18
+ export declare function mapExitCode(code: string, outcome?: Outcome, retryable?: boolean): number;
19
+ /** CLI exit codes (documented in --help; meanings must not change). */
20
+ export declare const EXIT: {
21
+ readonly SUCCESS: 0;
22
+ readonly ERROR: 1;
23
+ readonly USAGE: 2;
24
+ readonly AUTH: 4;
25
+ readonly NOT_FOUND: 5;
26
+ readonly CONFLICT: 6;
27
+ readonly DENIED: 7;
28
+ readonly RETRYABLE: 8;
29
+ readonly FAILURE: 9;
30
+ readonly UNKNOWN: 10;
31
+ };
package/dist/errors.js ADDED
@@ -0,0 +1,64 @@
1
+ /** Mapped application error with exit-code semantics. */
2
+ export class GbcError extends Error {
3
+ code;
4
+ retryable;
5
+ outcome;
6
+ hint;
7
+ details;
8
+ exitCode;
9
+ constructor(code, message, opts) {
10
+ super(message);
11
+ this.name = "GbcError";
12
+ this.code = code;
13
+ this.retryable = opts?.retryable ?? false;
14
+ this.outcome = opts?.outcome ?? "known_failure";
15
+ this.hint = opts?.hint;
16
+ this.details = opts?.details;
17
+ this.exitCode = opts?.exitCode ?? mapExitCode(code, opts?.outcome, opts?.retryable);
18
+ }
19
+ }
20
+ export function mapExitCode(code, outcome, retryable) {
21
+ if (outcome === "unknown")
22
+ return 10;
23
+ if (retryable)
24
+ return 8;
25
+ switch (code) {
26
+ case "usage":
27
+ case "invalid_argument":
28
+ return 2;
29
+ case "unauthenticated":
30
+ case "auth":
31
+ return 4;
32
+ case "not_found":
33
+ return 5;
34
+ case "conflict":
35
+ case "sidebar_conflict":
36
+ return 6;
37
+ case "denied":
38
+ case "permission_denied":
39
+ case "failed_precondition":
40
+ return 7;
41
+ case "unavailable":
42
+ case "deadline_exceeded":
43
+ return 8;
44
+ case "unsupported":
45
+ return 9;
46
+ case "ok":
47
+ return 0;
48
+ default:
49
+ return 9;
50
+ }
51
+ }
52
+ /** CLI exit codes (documented in --help; meanings must not change). */
53
+ export const EXIT = {
54
+ SUCCESS: 0,
55
+ ERROR: 1,
56
+ USAGE: 2,
57
+ AUTH: 4,
58
+ NOT_FOUND: 5,
59
+ CONFLICT: 6,
60
+ DENIED: 7,
61
+ RETRYABLE: 8,
62
+ FAILURE: 9,
63
+ UNKNOWN: 10,
64
+ };
@@ -0,0 +1,13 @@
1
+ export { ControlPlane } from "./ops/plane.js";
2
+ export { createGrokBotClient, mapConnectError } from "./connect/client.js";
3
+ export { createAuthProvider, staticTokenProvider } from "./auth/provider.js";
4
+ export { FileCredentialStore, redactCredential } from "./auth/store.js";
5
+ export { createMockTransport, createEmptyMockState } from "./testing/mock-transport.js";
6
+ export { SCHEMA_VERSION, okResult, failResult } from "./dto/result.js";
7
+ export type { ResultEnvelope, Outcome } from "./dto/result.js";
8
+ export { GbcError, EXIT } from "./errors.js";
9
+ export { buildTools } from "./mcp/tools.js";
10
+ export { SyncOps } from "./sync/core.js";
11
+ export type { PullInput, LocalInput, AttachmentsInput, Scope } from "./sync/core.js";
12
+ export { ATTACHMENT_DOWNLOADER } from "./sync/attachments.js";
13
+ export { decodeBody, DECODER } from "./sync/decode.js";
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export { ControlPlane } from "./ops/plane.js";
2
+ export { createGrokBotClient, mapConnectError } from "./connect/client.js";
3
+ export { createAuthProvider, staticTokenProvider } from "./auth/provider.js";
4
+ export { FileCredentialStore, redactCredential } from "./auth/store.js";
5
+ export { createMockTransport, createEmptyMockState } from "./testing/mock-transport.js";
6
+ export { SCHEMA_VERSION, okResult, failResult } from "./dto/result.js";
7
+ export { GbcError, EXIT } from "./errors.js";
8
+ export { buildTools } from "./mcp/tools.js";
9
+ export { SyncOps } from "./sync/core.js";
10
+ export { ATTACHMENT_DOWNLOADER } from "./sync/attachments.js";
11
+ export { decodeBody, DECODER } from "./sync/decode.js";
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP stdio server. stdout is reserved for MCP JSON-RPC frames only.
4
+ */
5
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
7
+ import { buildPlane } from "../cli/config.js";
8
+ import { buildTools } from "./tools.js";
9
+ async function main() {
10
+ const readOnly = process.env.GBT_MCP_READONLY === "1";
11
+ const mock = process.env.GBT_MOCK === "1" || process.argv.includes("--mock");
12
+ const plane = buildPlane({
13
+ json: true,
14
+ allowWrites: process.env.GBT_ALLOW_WRITES === "1",
15
+ dryRun: false,
16
+ baseUrl: process.env.GBT_BASE_URL || "https://api2.cursor.sh",
17
+ authKind: process.env.GBT_AUTH_KIND || "cursor",
18
+ mock,
19
+ trustBackend: process.env.GBT_TRUST_BACKEND === "1",
20
+ });
21
+ const server = new McpServer({
22
+ name: "grokbot-control",
23
+ version: "0.1.0",
24
+ });
25
+ const tools = buildTools({ readOnly, sync: process.env.GBT_SYNC_ROOT ? {
26
+ root: process.env.GBT_SYNC_ROOT,
27
+ allowLocalWrites: process.env.GBT_SYNC_ALLOW_LOCAL_WRITES === "1",
28
+ accountId: process.env.GBT_SYNC_ACCOUNT_ID,
29
+ teamId: process.env.GBT_SYNC_TEAM_ID,
30
+ acknowledgeUnverifiedScope: process.env.GBT_SYNC_ACK_UNVERIFIED_SCOPE === "1",
31
+ } : undefined });
32
+ for (const t of tools) {
33
+ server.registerTool(t.name, {
34
+ title: t.name,
35
+ description: t.description,
36
+ inputSchema: t.inputSchema.shape,
37
+ annotations: t.authTool
38
+ ? { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true }
39
+ : t.readOnly
40
+ ? { readOnlyHint: true, openWorldHint: true }
41
+ : { readOnlyHint: false, destructiveHint: t.name.includes("delete"), openWorldHint: true },
42
+ }, async (args) => {
43
+ const parsed = t.inputSchema.safeParse(args);
44
+ if (!parsed.success) {
45
+ return {
46
+ isError: true,
47
+ content: [
48
+ {
49
+ type: "text",
50
+ text: JSON.stringify({ code: "usage", error: parsed.error.format() }),
51
+ },
52
+ ],
53
+ structuredContent: {
54
+ schema_version: "1.0.0",
55
+ ok: false,
56
+ outcome: "known_failure",
57
+ code: "usage",
58
+ retryable: false,
59
+ request_id: crypto.randomUUID(),
60
+ error: { message: "invalid tool arguments", details: parsed.error.format() },
61
+ },
62
+ };
63
+ }
64
+ // Tool cancellation ≠ InterruptGrokBotAgentRun
65
+ const result = await t.handler(plane, parsed.data);
66
+ return {
67
+ isError: !result.ok,
68
+ content: [{ type: "text", text: JSON.stringify(result) }],
69
+ structuredContent: result,
70
+ };
71
+ });
72
+ }
73
+ console.log = (...args) => {
74
+ console.error("[gbc-mcp stdout-blocked]", ...args);
75
+ };
76
+ const transport = new StdioServerTransport();
77
+ await server.connect(transport);
78
+ }
79
+ main().catch((e) => {
80
+ console.error(e);
81
+ process.exit(1);
82
+ });
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import type { ControlPlane } from "../ops/plane.js";
3
+ import type { ResultEnvelope } from "../dto/result.js";
4
+ export type ToolDef = {
5
+ name: string;
6
+ description: string;
7
+ inputSchema: z.ZodObject<any>;
8
+ /** Does not mutate Grok Bot server state (safe in read-only toolsets). */
9
+ readOnly?: boolean;
10
+ /** Local auth-state tool (changes only this tool's own credential files). */
11
+ authTool?: boolean;
12
+ handler: (plane: ControlPlane, args: Record<string, unknown>) => Promise<ResultEnvelope>;
13
+ };
14
+ export type SyncToolConfig = {
15
+ root: string;
16
+ allowLocalWrites?: boolean;
17
+ accountId?: string;
18
+ teamId?: string;
19
+ acknowledgeUnverifiedScope?: boolean;
20
+ };
21
+ export declare function buildTools(opts?: {
22
+ readOnly?: boolean;
23
+ sync?: SyncToolConfig;
24
+ }): ToolDef[];