@tt-a1i/openpi 0.6.0 → 0.7.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.
Files changed (60) hide show
  1. package/README.md +13 -11
  2. package/SETUP.md +2 -2
  3. package/THIRD_PARTY_NOTICES.md +242 -0
  4. package/extensions/ai-providers/README.md +12 -6
  5. package/extensions/ai-providers/cursor/connect-frame-reader.ts +76 -0
  6. package/extensions/ai-providers/cursor/input-images.ts +2 -3
  7. package/extensions/ai-providers/cursor/proto.ts +218 -11
  8. package/extensions/ai-providers/cursor/protobuf.ts +12 -2
  9. package/extensions/ai-providers/cursor/provider.ts +280 -37
  10. package/extensions/ai-providers/cursor/tool-bridge.ts +68 -0
  11. package/extensions/ai-providers/index.ts +3 -3
  12. package/extensions/file-mutation-display/index.ts +13 -9
  13. package/extensions/shared/agent-transcript.ts +3 -2
  14. package/extensions/shared/child-session.ts +14 -0
  15. package/extensions/subagents/index.ts +20 -3
  16. package/extensions/subagents/src/agent-types.ts +5 -17
  17. package/extensions/subagents/src/backends/pi.ts +70 -59
  18. package/extensions/subagents/src/backends/tool-preview.ts +29 -0
  19. package/extensions/subagents/src/manager.ts +2 -71
  20. package/extensions/subagents/src/prompt.ts +2 -2
  21. package/extensions/subagents/src/runtime.ts +10 -3
  22. package/extensions/web/index.ts +69 -5
  23. package/extensions/workflows/artifacts.ts +362 -23
  24. package/extensions/workflows/dashboard.ts +141 -21
  25. package/extensions/workflows/index.ts +62 -20
  26. package/extensions/workflows/progress-projection.ts +7 -1
  27. package/extensions/workflows/runner.ts +5 -162
  28. package/extensions/workflows/sandbox.ts +4 -0
  29. package/package.json +28 -4
  30. package/skills/subagents/REFERENCE.md +6 -7
  31. package/skills/subagents/SKILL.md +1 -1
  32. package/skills/workflows/REFERENCE.md +3 -1
  33. package/web/dist/app.js +87 -0
  34. package/web/dist/favicon.svg +9 -0
  35. package/web/dist/index.html +15 -0
  36. package/web/dist/styles.css +3 -0
  37. package/web/host/web-host.ts +6 -9
  38. package/web/ui/index.html +3 -131
  39. package/web/ui/public/favicon.svg +9 -0
  40. package/web/ui/src/app/App.tsx +134 -0
  41. package/web/ui/src/app/providers.tsx +38 -0
  42. package/web/ui/src/components/Markdown.tsx +58 -0
  43. package/web/ui/src/components/OpenPiLogo.tsx +41 -0
  44. package/web/ui/src/features/activity/ActivityBar.tsx +120 -0
  45. package/web/ui/src/features/composer/Composer.tsx +237 -0
  46. package/web/ui/src/features/sessions/SessionSidebar.tsx +418 -0
  47. package/web/ui/src/features/transcript/Transcript.tsx +860 -0
  48. package/web/ui/src/i18n.ts +159 -0
  49. package/web/ui/src/lib/format.ts +57 -0
  50. package/web/ui/src/main.tsx +16 -0
  51. package/web/ui/src/protocol/client.ts +199 -0
  52. package/web/ui/src/protocol/event-stream.ts +88 -0
  53. package/web/ui/src/store/web-store.ts +926 -0
  54. package/web/ui/src/styles.css +420 -0
  55. package/web/ui/tsconfig.json +12 -0
  56. package/web/ui/vite-env.d.ts +1 -0
  57. package/web/vite.config.mjs +21 -1
  58. package/web/host/static-assets.ts +0 -4
  59. package/web/ui/app.js +0 -1700
  60. package/web/ui/styles.css +0 -680
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * The field numbers and message names are vendored from
5
5
  * oh-my-pi@eab72e88e4, packages/catalog/src/discovery/cursor-proto.ts
6
- * (MIT). Only the chat, image, model-discovery, and exec-rejection messages
7
- * used by this chat-only provider are retained. Unknown fields are skipped by
6
+ * (MIT). Only the chat, image, model-discovery, and Pi MCP bridge messages
7
+ * used by this provider are retained. Unknown fields are skipped by
8
8
  * the local protobuf codec so newer Cursor messages remain forward-compatible.
9
9
  */
10
10
 
@@ -297,7 +297,8 @@ export interface ConversationStep extends ProtoMessage {
297
297
  message:
298
298
  | { case: undefined; value?: undefined }
299
299
  | { case: "assistantMessage"; value: AssistantMessage }
300
- | { case: "thinkingMessage"; value: ThinkingMessage };
300
+ | { case: "thinkingMessage"; value: ThinkingMessage }
301
+ | { case: "toolCall"; value: CursorToolCall };
301
302
  }
302
303
 
303
304
  export const ConversationStepSchema: MessageCodec<ConversationStep> =
@@ -306,6 +307,12 @@ export const ConversationStepSchema: MessageCodec<ConversationStep> =
306
307
  kind: "oneof",
307
308
  name: "message",
308
309
  variants: [
310
+ {
311
+ no: 2,
312
+ name: "toolCall",
313
+ kind: "message",
314
+ T: () => CursorToolCallSchema,
315
+ },
309
316
  {
310
317
  no: 1,
311
318
  name: "assistantMessage",
@@ -556,11 +563,77 @@ export const CursorRuleSchema: MessageCodec<CursorRule> = pb<CursorRule>(
556
563
  ],
557
564
  );
558
565
 
559
- /** Empty definitions deliberately make the request-context tool list empty. */
560
- export interface McpToolDefinition extends ProtoMessage {}
566
+ export interface McpToolDefinition extends ProtoMessage {
567
+ name: string;
568
+ providerIdentifier: string;
569
+ toolName: string;
570
+ description: string;
571
+ inputSchema: Uint8Array;
572
+ inputSchemaJson?: string;
573
+ }
561
574
 
562
575
  export const McpToolDefinitionSchema: MessageCodec<McpToolDefinition> =
563
- pb<McpToolDefinition>("agent.v1.McpToolDefinition", []);
576
+ pb<McpToolDefinition>("agent.v1.McpToolDefinition", [
577
+ { no: 1, name: "name", kind: "string" },
578
+ { no: 4, name: "providerIdentifier", kind: "string" },
579
+ { no: 5, name: "toolName", kind: "string" },
580
+ { no: 2, name: "description", kind: "string" },
581
+ { no: 3, name: "inputSchema", kind: "bytes" },
582
+ { no: 6, name: "inputSchemaJson", kind: "string", optional: true },
583
+ ]);
584
+
585
+ export interface McpArgs extends ProtoMessage {
586
+ name: string;
587
+ args: Record<string, Uint8Array>;
588
+ toolCallId: string;
589
+ providerIdentifier: string;
590
+ toolName: string;
591
+ smartModeApprovalOnly: boolean;
592
+ skipApproval: boolean;
593
+ serverIdentifier: string;
594
+ }
595
+
596
+ export const McpArgsSchema: MessageCodec<McpArgs> = pb<McpArgs>(
597
+ "agent.v1.McpArgs",
598
+ [
599
+ { no: 1, name: "name", kind: "string" },
600
+ { no: 2, name: "args", kind: "map", K: "string", V: "bytes" },
601
+ { no: 3, name: "toolCallId", kind: "string" },
602
+ { no: 4, name: "providerIdentifier", kind: "string" },
603
+ { no: 5, name: "toolName", kind: "string" },
604
+ { no: 7, name: "smartModeApprovalOnly", kind: "bool" },
605
+ { no: 8, name: "skipApproval", kind: "bool" },
606
+ { no: 9, name: "serverIdentifier", kind: "string" },
607
+ ],
608
+ );
609
+
610
+ export interface McpRejected extends ProtoMessage {
611
+ reason: string;
612
+ isReadonly: boolean;
613
+ }
614
+
615
+ export const McpRejectedSchema: MessageCodec<McpRejected> = pb<McpRejected>(
616
+ "agent.v1.McpRejected",
617
+ [
618
+ { no: 1, name: "reason", kind: "string" },
619
+ { no: 2, name: "isReadonly", kind: "bool" },
620
+ ],
621
+ );
622
+
623
+ export interface McpToolCall extends ProtoMessage {
624
+ result?: McpToolResult;
625
+ args?: McpArgs;
626
+ description?: string;
627
+ }
628
+
629
+ export const McpToolCallSchema: MessageCodec<McpToolCall> = pb<McpToolCall>(
630
+ "agent.v1.McpToolCall",
631
+ [
632
+ { no: 2, name: "result", kind: "message", T: () => McpToolResultSchema },
633
+ { no: 1, name: "args", kind: "message", T: () => McpArgsSchema },
634
+ { no: 3, name: "description", kind: "string", optional: true },
635
+ ],
636
+ );
564
637
 
565
638
  export interface RequestContext extends ProtoMessage {
566
639
  rules: CursorRule[];
@@ -677,7 +750,8 @@ export interface ExecClientMessage extends ProtoMessage {
677
750
  execId: string;
678
751
  message:
679
752
  | { case: undefined; value?: undefined }
680
- | { case: "requestContextResult"; value: RequestContextResult };
753
+ | { case: "requestContextResult"; value: RequestContextResult }
754
+ | { case: "mcpResult"; value: McpResult };
681
755
  }
682
756
 
683
757
  export const ExecClientMessageSchema: MessageCodec<ExecClientMessage> =
@@ -688,6 +762,12 @@ export const ExecClientMessageSchema: MessageCodec<ExecClientMessage> =
688
762
  kind: "oneof",
689
763
  name: "message",
690
764
  variants: [
765
+ {
766
+ no: 11,
767
+ name: "mcpResult",
768
+ kind: "message",
769
+ T: () => McpResultSchema,
770
+ },
691
771
  {
692
772
  no: 10,
693
773
  name: "requestContextResult",
@@ -756,7 +836,8 @@ export interface ExecServerMessage extends ProtoMessage {
756
836
  execId: string;
757
837
  message:
758
838
  | { case: undefined; value?: undefined }
759
- | { case: "requestContextArgs"; value: RequestContextArgs };
839
+ | { case: "requestContextArgs"; value: RequestContextArgs }
840
+ | { case: "mcpArgs"; value: McpArgs };
760
841
  }
761
842
 
762
843
  export const ExecServerMessageSchema: MessageCodec<ExecServerMessage> =
@@ -767,6 +848,7 @@ export const ExecServerMessageSchema: MessageCodec<ExecServerMessage> =
767
848
  kind: "oneof",
768
849
  name: "message",
769
850
  variants: [
851
+ { no: 11, name: "mcpArgs", kind: "message", T: () => McpArgsSchema },
770
852
  {
771
853
  no: 10,
772
854
  name: "requestContextArgs",
@@ -940,7 +1022,7 @@ export const InteractionUpdateSchema: MessageCodec<InteractionUpdate> =
940
1022
  no: 15,
941
1023
  name: "toolCallDelta",
942
1024
  kind: "message",
943
- T: () => ToolInteractionUpdateSchema,
1025
+ T: () => InteractionQueryPayloadSchema,
944
1026
  },
945
1027
  {
946
1028
  no: 2,
@@ -988,10 +1070,57 @@ export const InteractionUpdateSchema: MessageCodec<InteractionUpdate> =
988
1070
  },
989
1071
  ]);
990
1072
 
991
- export interface ToolInteractionUpdate extends ProtoMessage {}
1073
+ export interface ToolInteractionUpdate extends ProtoMessage {
1074
+ callId?: string;
1075
+ toolCall?: CursorToolCall;
1076
+ argsTextDelta?: string;
1077
+ }
992
1078
 
993
1079
  export const ToolInteractionUpdateSchema: MessageCodec<ToolInteractionUpdate> =
994
- pb<ToolInteractionUpdate>("agent.v1.ToolInteractionUpdate", []);
1080
+ pb<ToolInteractionUpdate>("agent.v1.ToolInteractionUpdate", [
1081
+ { no: 1, name: "callId", kind: "string" },
1082
+ { no: 2, name: "toolCall", kind: "message", T: () => CursorToolCallSchema },
1083
+ { no: 3, name: "argsTextDelta", kind: "string" },
1084
+ ]);
1085
+
1086
+ // Only the MCP branch is supported. Unknown native tool variants remain unknown
1087
+ // and are rejected by the provider rather than executed outside Pi.
1088
+ export interface CursorToolCall extends ProtoMessage {
1089
+ toolCallId?: string;
1090
+ tool:
1091
+ | { case: undefined; value?: undefined }
1092
+ | { case: "mcpToolCall"; value: McpToolCall };
1093
+ }
1094
+ export const CursorToolCallSchema = pb<CursorToolCall>("agent.v1.ToolCall", [
1095
+ { no: 57, name: "toolCallId", kind: "string", optional: true },
1096
+ {
1097
+ kind: "oneof",
1098
+ name: "tool",
1099
+ variants: [
1100
+ {
1101
+ no: 15,
1102
+ name: "mcpToolCall",
1103
+ kind: "message",
1104
+ T: () => McpToolCallSchema,
1105
+ },
1106
+ ],
1107
+ },
1108
+ ]);
1109
+
1110
+ export interface McpResult extends ProtoMessage {
1111
+ result:
1112
+ | { case: undefined; value?: undefined }
1113
+ | { case: "rejected"; value: McpRejected };
1114
+ }
1115
+ export const McpResultSchema = pb<McpResult>("agent.v1.McpResult", [
1116
+ {
1117
+ kind: "oneof",
1118
+ name: "result",
1119
+ variants: [
1120
+ { no: 3, name: "rejected", kind: "message", T: () => McpRejectedSchema },
1121
+ ],
1122
+ },
1123
+ ]);
995
1124
 
996
1125
  export interface TextDeltaUpdate extends ProtoMessage {
997
1126
  text: string;
@@ -1062,3 +1191,81 @@ export const GetUsableModelsResponseSchema: MessageCodec<GetUsableModelsResponse
1062
1191
  repeat: true,
1063
1192
  },
1064
1193
  ]);
1194
+
1195
+ export interface McpSuccess extends ProtoMessage {
1196
+ content: McpToolResultContentItem[];
1197
+ isError: boolean;
1198
+ }
1199
+
1200
+ export const McpSuccessSchema: MessageCodec<McpSuccess> = pb<McpSuccess>(
1201
+ "agent.v1.McpSuccess",
1202
+ [
1203
+ {
1204
+ no: 1,
1205
+ name: "content",
1206
+ kind: "message",
1207
+ T: () => McpToolResultContentItemSchema,
1208
+ repeat: true,
1209
+ },
1210
+ { no: 2, name: "isError", kind: "bool" },
1211
+ ],
1212
+ );
1213
+
1214
+ export interface McpTextContent extends ProtoMessage {
1215
+ text: string;
1216
+ }
1217
+
1218
+ export const McpTextContentSchema: MessageCodec<McpTextContent> =
1219
+ pb<McpTextContent>("agent.v1.McpTextContent", [
1220
+ { no: 1, name: "text", kind: "string" },
1221
+ ]);
1222
+
1223
+ export interface McpImageContent extends ProtoMessage {
1224
+ data: Uint8Array;
1225
+ mimeType: string;
1226
+ }
1227
+
1228
+ export const McpImageContentSchema: MessageCodec<McpImageContent> =
1229
+ pb<McpImageContent>("agent.v1.McpImageContent", [
1230
+ { no: 1, name: "data", kind: "bytes" },
1231
+ { no: 2, name: "mimeType", kind: "string" },
1232
+ ]);
1233
+
1234
+ export interface McpToolResultContentItem extends ProtoMessage {
1235
+ content:
1236
+ | { case: undefined; value?: undefined }
1237
+ | { case: "text"; value: McpTextContent }
1238
+ | { case: "image"; value: McpImageContent };
1239
+ }
1240
+
1241
+ export const McpToolResultContentItemSchema: MessageCodec<McpToolResultContentItem> =
1242
+ pb<McpToolResultContentItem>("agent.v1.McpToolResultContentItem", [
1243
+ {
1244
+ kind: "oneof",
1245
+ name: "content",
1246
+ variants: [
1247
+ { no: 1, name: "text", kind: "message", T: () => McpTextContentSchema },
1248
+ {
1249
+ no: 2,
1250
+ name: "image",
1251
+ kind: "message",
1252
+ T: () => McpImageContentSchema,
1253
+ },
1254
+ ],
1255
+ },
1256
+ ]);
1257
+
1258
+ export interface McpToolResult extends ProtoMessage {
1259
+ result:
1260
+ | { case: undefined; value?: undefined }
1261
+ | { case: "success"; value: McpSuccess };
1262
+ }
1263
+ export const McpToolResultSchema = pb<McpToolResult>("agent.v1.McpToolResult", [
1264
+ {
1265
+ kind: "oneof",
1266
+ name: "result",
1267
+ variants: [
1268
+ { no: 1, name: "success", kind: "message", T: () => McpSuccessSchema },
1269
+ ],
1270
+ },
1271
+ ]);
@@ -472,7 +472,12 @@ function compileMapField(desc: MapFieldDesc): CompiledField {
472
472
  }
473
473
  }
474
474
 
475
- target[entryKey] = entryValue;
475
+ Object.defineProperty(target, entryKey, {
476
+ value: entryValue,
477
+ enumerable: true,
478
+ configurable: true,
479
+ writable: true,
480
+ });
476
481
  },
477
482
  toJson(message, output) {
478
483
  const input = Reflect.get(message, name);
@@ -1143,7 +1148,12 @@ function readJsonStruct(reader: Reader): { [key: string]: JsonValue } {
1143
1148
  entryReader.skip(entryWire);
1144
1149
  }
1145
1150
  }
1146
- output[entryKey] = entryVal;
1151
+ Object.defineProperty(output, entryKey, {
1152
+ value: entryVal,
1153
+ enumerable: true,
1154
+ configurable: true,
1155
+ writable: true,
1156
+ });
1147
1157
  } else {
1148
1158
  reader.skip(wireType);
1149
1159
  }