@nokai/cli 1.0.0 → 1.2.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 (67) hide show
  1. package/README.md +16 -173
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +239 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/connection-manager.d.ts +9 -1
  7. package/dist/connection-manager.d.ts.map +1 -1
  8. package/dist/connection-manager.js +85 -1
  9. package/dist/connection-manager.js.map +1 -1
  10. package/dist/index.js +16 -4
  11. package/dist/index.js.map +1 -1
  12. package/dist/message-protocol.d.ts +3 -1
  13. package/dist/message-protocol.d.ts.map +1 -1
  14. package/dist/message-protocol.js +25 -1
  15. package/dist/message-protocol.js.map +1 -1
  16. package/dist/peer-connection.d.ts.map +1 -1
  17. package/dist/peer-connection.js +2 -5
  18. package/dist/peer-connection.js.map +1 -1
  19. package/dist/profile.d.ts +9 -0
  20. package/dist/profile.d.ts.map +1 -1
  21. package/dist/profile.js +31 -2
  22. package/dist/profile.js.map +1 -1
  23. package/dist/server.d.ts.map +1 -1
  24. package/dist/server.js +113 -6
  25. package/dist/server.js.map +1 -1
  26. package/dist/shared/constants.d.ts +12 -0
  27. package/dist/shared/constants.d.ts.map +1 -1
  28. package/dist/shared/constants.js +13 -1
  29. package/dist/shared/constants.js.map +1 -1
  30. package/dist/shared/types.d.ts +19 -1
  31. package/dist/shared/types.d.ts.map +1 -1
  32. package/dist/shared/types.js +7 -0
  33. package/dist/shared/types.js.map +1 -1
  34. package/dist/signaling-client.d.ts +18 -3
  35. package/dist/signaling-client.d.ts.map +1 -1
  36. package/dist/signaling-client.js +83 -7
  37. package/dist/signaling-client.js.map +1 -1
  38. package/dist/tools/ask.d.ts.map +1 -1
  39. package/dist/tools/ask.js +2 -1
  40. package/dist/tools/ask.js.map +1 -1
  41. package/dist/tools/connect.d.ts +19 -2
  42. package/dist/tools/connect.d.ts.map +1 -1
  43. package/dist/tools/connect.js +187 -43
  44. package/dist/tools/connect.js.map +1 -1
  45. package/dist/tools/discover.d.ts +12 -0
  46. package/dist/tools/discover.d.ts.map +1 -0
  47. package/dist/tools/discover.js +67 -0
  48. package/dist/tools/discover.js.map +1 -0
  49. package/dist/tools/id.d.ts +12 -0
  50. package/dist/tools/id.d.ts.map +1 -0
  51. package/dist/tools/id.js +24 -0
  52. package/dist/tools/id.js.map +1 -0
  53. package/dist/tools/invite.d.ts +32 -0
  54. package/dist/tools/invite.d.ts.map +1 -0
  55. package/dist/tools/invite.js +144 -0
  56. package/dist/tools/invite.js.map +1 -0
  57. package/dist/tools/reconnect.d.ts.map +1 -1
  58. package/dist/tools/reconnect.js +6 -2
  59. package/dist/tools/reconnect.js.map +1 -1
  60. package/dist/tools/share.d.ts +37 -0
  61. package/dist/tools/share.d.ts.map +1 -0
  62. package/dist/tools/share.js +153 -0
  63. package/dist/tools/share.js.map +1 -0
  64. package/dist/tools/tell.d.ts.map +1 -1
  65. package/dist/tools/tell.js +2 -1
  66. package/dist/tools/tell.js.map +1 -1
  67. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACtB,QAAA,UAAU,GAAG,CAAC,CAAC;AAE5B,mDAAmD;AACtC,QAAA,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC,iDAAiD;AACpC,QAAA,gBAAgB,GAAG,CAAC,CAAC;AAElC,mDAAmD;AACtC,QAAA,kBAAkB,GAAG,WAAoB,CAAC;AAEvD,uEAAuE;AAC1D,QAAA,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,0BAA0B;AACb,QAAA,mBAAmB,GAAG,8BAA8B,CAAC;AAElE,0DAA0D;AAC7C,QAAA,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC,4BAA4B;AACf,QAAA,eAAe,GAAG,IAAI,CAAC;AACvB,QAAA,oBAAoB,GAAG,IAAI,CAAC;AAC5B,QAAA,oBAAoB,GAAG,IAAI,CAAC;AAC5B,QAAA,qBAAqB,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACtB,QAAA,UAAU,GAAG,CAAC,CAAC;AAE5B,mDAAmD;AACtC,QAAA,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC,iDAAiD;AACpC,QAAA,gBAAgB,GAAG,CAAC,CAAC;AAElC,mDAAmD;AACtC,QAAA,kBAAkB,GAAG,WAAoB,CAAC;AAEvD,uEAAuE;AAC1D,QAAA,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,0BAA0B;AACb,QAAA,mBAAmB,GAAG,8BAA8B,CAAC;AAElE,0DAA0D;AAC7C,QAAA,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC,yDAAyD;AAC5C,QAAA,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;AAEpF,0DAA0D;AAC7C,QAAA,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;AAEtF,2BAA2B;AACd,QAAA,oBAAoB,GAAG,GAAG,GAAG,IAAI,CAAC;AAClC,QAAA,mBAAmB,GAAG,CAAC,CAAC;AACxB,QAAA,wBAAwB,GAAG,IAAI,CAAC;AAE7C,oBAAoB;AACP,QAAA,qBAAqB,GAAG,CAAC,CAAC;AAC1B,QAAA,mBAAmB,GAAG,EAAE,CAAC;AACzB,QAAA,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnD,4BAA4B;AACf,QAAA,eAAe,GAAG,IAAI,CAAC;AACvB,QAAA,oBAAoB,GAAG,IAAI,CAAC;AAC5B,QAAA,oBAAoB,GAAG,IAAI,CAAC;AAC5B,QAAA,qBAAqB,GAAG,IAAI,CAAC"}
@@ -3,6 +3,7 @@ export interface AgentProfile {
3
3
  publicKey: string;
4
4
  privateKey: string;
5
5
  deviceId: string;
6
+ nokaiId: string;
6
7
  }
7
8
  export type Permission = "read-only" | "read-write" | "ask-only";
8
9
  export interface ConnectionRecord {
@@ -43,12 +44,29 @@ export interface ActionResultMessage extends BaseMessage {
43
44
  success: boolean;
44
45
  sourceFiles?: string[];
45
46
  }
46
- export type PeerMessage = QueryMessage | ResponseMessage | StatusMessage | ActionMessage | ActionResultMessage;
47
+ export interface SharedFile {
48
+ path: string;
49
+ content: string;
50
+ size: number;
51
+ }
52
+ export interface ProjectContext {
53
+ fileTree: string;
54
+ configs: Record<string, string>;
55
+ readme: string;
56
+ }
57
+ export interface ShareMessage extends BaseMessage {
58
+ type: "share";
59
+ shareType: "file" | "context";
60
+ files?: SharedFile[];
61
+ context?: ProjectContext;
62
+ }
63
+ export type PeerMessage = QueryMessage | ResponseMessage | StatusMessage | ActionMessage | ActionResultMessage | ShareMessage;
47
64
  export declare function isQueryMessage(msg: unknown): msg is QueryMessage;
48
65
  export declare function isResponseMessage(msg: unknown): msg is ResponseMessage;
49
66
  export declare function isStatusMessage(msg: unknown): msg is StatusMessage;
50
67
  export declare function isActionMessage(msg: unknown): msg is ActionMessage;
51
68
  export declare function isActionResultMessage(msg: unknown): msg is ActionResultMessage;
69
+ export declare function isShareMessage(msg: unknown): msg is ShareMessage;
52
70
  export interface RegisterEvent {
53
71
  event: "register";
54
72
  agentName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ exports.isResponseMessage = isResponseMessage;
6
6
  exports.isStatusMessage = isStatusMessage;
7
7
  exports.isActionMessage = isActionMessage;
8
8
  exports.isActionResultMessage = isActionResultMessage;
9
+ exports.isShareMessage = isShareMessage;
9
10
  // --- Type Guards ---
10
11
  function hasRequiredFields(msg) {
11
12
  if (typeof msg !== "object" || msg === null)
@@ -38,4 +39,10 @@ function isActionResultMessage(msg) {
38
39
  const m = msg;
39
40
  return m.type === "action_result" && typeof m.replyTo === "string" && typeof m.success === "boolean";
40
41
  }
42
+ function isShareMessage(msg) {
43
+ if (!hasRequiredFields(msg))
44
+ return false;
45
+ const m = msg;
46
+ return m.type === "share" && (m.shareType === "file" || m.shareType === "context");
47
+ }
41
48
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":";AAAA,yBAAyB;;AA8EzB,wCAEC;AAED,8CAIC;AAED,0CAEC;AAED,0CAEC;AAED,sDAIC;AApCD,sBAAsB;AAEtB,SAAS,iBAAiB,CAAC,GAAY;IACrC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CACL,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;QACxB,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;QAC7B,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAChC,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,GAAY;IACzC,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAK,GAAmB,CAAC,IAAI,KAAK,OAAO,CAAC;AACzE,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAY;IAC5C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,CAAC,GAAG,GAAyC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC;AAChE,CAAC;AAED,SAAgB,eAAe,CAAC,GAAY;IAC1C,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAK,GAAmB,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC1E,CAAC;AAED,SAAgB,eAAe,CAAC,GAAY;IAC1C,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAK,GAAmB,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC1E,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAY;IAChD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,CAAC,GAAG,GAAyC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC;AACvG,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":";AAAA,yBAAyB;;AAkGzB,wCAEC;AAED,8CAIC;AAED,0CAEC;AAED,0CAEC;AAED,sDAIC;AAED,wCAIC;AA1CD,sBAAsB;AAEtB,SAAS,iBAAiB,CAAC,GAAY;IACrC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CACL,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;QACxB,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;QAC7B,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAChC,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,GAAY;IACzC,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAK,GAAmB,CAAC,IAAI,KAAK,OAAO,CAAC;AACzE,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAY;IAC5C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,CAAC,GAAG,GAAyC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC;AAChE,CAAC;AAED,SAAgB,eAAe,CAAC,GAAY;IAC1C,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAK,GAAmB,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC1E,CAAC;AAED,SAAgB,eAAe,CAAC,GAAY;IAC1C,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAK,GAAmB,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC1E,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAY;IAChD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,CAAC,GAAG,GAAyC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC;AACvG,CAAC;AAED,SAAgB,cAAc,CAAC,GAAY;IACzC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,CAAC,GAAG,GAAyC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;AACrF,CAAC"}
@@ -1,18 +1,33 @@
1
1
  import { EventEmitter } from "node:events";
2
+ export interface ReconnectConfig {
3
+ initialBackoffMs: number;
4
+ maxBackoffMs: number;
5
+ maxAttempts: number;
6
+ connectTimeoutMs: number;
7
+ }
2
8
  export declare class SignalingClient extends EventEmitter {
3
9
  private ws;
4
10
  private url;
5
- constructor(url: string);
11
+ private intentionalClose;
12
+ private reconnectAttempts;
13
+ private reconnectTimer;
14
+ private registrationInfo;
15
+ private reconnectConfig;
16
+ constructor(url: string, reconnectConfig?: Partial<ReconnectConfig>);
6
17
  connect(): Promise<void>;
18
+ private scheduleReconnect;
7
19
  isConnected(): boolean;
8
20
  private send;
9
21
  register(agentName: string, publicKey: string, deviceId: string): void;
10
22
  createOTP(): void;
11
23
  joinOTP(otp: string, agentName: string, publicKey: string): void;
12
24
  signal(to: string, data: Record<string, unknown>): void;
13
- goOnline(deviceId: string): void;
25
+ goOnline(deviceId: string, nokaiId?: string, sessionId?: string, sessionName?: string): void;
14
26
  goOffline(deviceId: string): void;
15
- reconnectRequest(targetDeviceId: string, agentName: string, publicKey: string, deviceId: string): void;
27
+ selfConnect(targetSessionId: string, agentName: string, publicKey: string, sessionId: string, sessionName: string): void;
28
+ connectByNokaiId(targetNokaiId: string, agentName: string, publicKey: string, deviceId: string, nokaiId: string): void;
29
+ approveConnection(deviceId: string, approvalCode: string, agentName: string, publicKey: string, requesterName: string, requesterPublicKey: string): void;
30
+ reconnectRequest(targetDeviceId: string, agentName: string, publicKey: string, deviceId: string, signature?: string, challenge?: string): void;
16
31
  reconnectAccept(targetDeviceId: string, agentName: string, publicKey: string, deviceId: string): void;
17
32
  disconnect(): void;
18
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"signaling-client.d.ts","sourceRoot":"","sources":["../src/signaling-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;gBAER,GAAG,EAAE,MAAM;IAKvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BxB,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,IAAI;IAOZ,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAItE,SAAS,IAAI,IAAI;IAIjB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIhE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIhC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIjC,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAItG,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIrG,UAAU,IAAI,IAAI;CAMnB"}
1
+ {"version":3,"file":"signaling-client.d.ts","sourceRoot":"","sources":["../src/signaling-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AASD,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,gBAAgB,CAA2E;IACnG,OAAO,CAAC,eAAe,CAAkB;gBAE7B,GAAG,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAMnE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+DxB,OAAO,CAAC,iBAAiB;IA6BzB,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,IAAI;IAOZ,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKtE,SAAS,IAAI,IAAI;IAIjB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIhE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAI5F,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIjC,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxH,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAItH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,IAAI;IAIxJ,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAI9I,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIrG,UAAU,IAAI,IAAI;CAYnB"}
@@ -6,17 +6,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.SignalingClient = void 0;
7
7
  const ws_1 = __importDefault(require("ws"));
8
8
  const node_events_1 = require("node:events");
9
+ const DEFAULT_RECONNECT_CONFIG = {
10
+ initialBackoffMs: 1000,
11
+ maxBackoffMs: 30_000,
12
+ maxAttempts: 10,
13
+ connectTimeoutMs: 5000,
14
+ };
9
15
  class SignalingClient extends node_events_1.EventEmitter {
10
16
  ws = null;
11
17
  url;
12
- constructor(url) {
18
+ intentionalClose = false;
19
+ reconnectAttempts = 0;
20
+ reconnectTimer = null;
21
+ registrationInfo = null;
22
+ reconnectConfig;
23
+ constructor(url, reconnectConfig) {
13
24
  super();
14
25
  this.url = url;
26
+ this.reconnectConfig = { ...DEFAULT_RECONNECT_CONFIG, ...reconnectConfig };
15
27
  }
16
28
  connect() {
29
+ const isReconnect = this.registrationInfo !== null;
17
30
  return new Promise((resolve, reject) => {
31
+ this.intentionalClose = false;
32
+ const connectTimeout = setTimeout(() => {
33
+ if (this.ws) {
34
+ this.ws.close();
35
+ }
36
+ }, this.reconnectConfig.connectTimeoutMs);
18
37
  this.ws = new ws_1.default(this.url);
19
38
  this.ws.on("open", () => {
39
+ clearTimeout(connectTimeout);
40
+ this.reconnectAttempts = 0;
41
+ // Re-register presence if we had prior registration info (reconnect case)
42
+ if (isReconnect) {
43
+ this.goOnline(this.registrationInfo.deviceId);
44
+ this.emit("reconnected");
45
+ }
20
46
  resolve();
21
47
  });
22
48
  this.ws.on("message", (data) => {
@@ -30,15 +56,49 @@ class SignalingClient extends node_events_1.EventEmitter {
30
56
  // ignore malformed messages
31
57
  }
32
58
  });
33
- this.ws.on("error", (err) => {
34
- reject(err);
59
+ this.ws.on("error", () => {
60
+ clearTimeout(connectTimeout);
61
+ // Error always followed by close event, which handles reconnect
62
+ if (!isReconnect) {
63
+ reject(new Error("Failed to connect to signaling server"));
64
+ }
35
65
  });
36
66
  this.ws.on("close", () => {
67
+ clearTimeout(connectTimeout);
37
68
  this.ws = null;
38
69
  this.emit("disconnected");
70
+ if (!this.intentionalClose) {
71
+ this.scheduleReconnect();
72
+ }
73
+ // For reconnect attempts, resolve so the scheduleReconnect setTimeout can proceed
74
+ if (isReconnect) {
75
+ resolve();
76
+ }
39
77
  });
40
78
  });
41
79
  }
80
+ scheduleReconnect() {
81
+ if (this.reconnectAttempts >= this.reconnectConfig.maxAttempts) {
82
+ this.emit("reconnect_failed", {
83
+ attempts: this.reconnectAttempts,
84
+ message: `Failed to reconnect after ${this.reconnectConfig.maxAttempts} attempts`,
85
+ });
86
+ return;
87
+ }
88
+ const backoff = Math.min(this.reconnectConfig.initialBackoffMs * Math.pow(2, this.reconnectAttempts), this.reconnectConfig.maxBackoffMs);
89
+ this.reconnectAttempts++;
90
+ this.emit("reconnecting", {
91
+ attempt: this.reconnectAttempts,
92
+ maxAttempts: this.reconnectConfig.maxAttempts,
93
+ backoffMs: backoff,
94
+ });
95
+ this.reconnectTimer = setTimeout(() => {
96
+ this.reconnectTimer = null;
97
+ this.connect().catch(() => {
98
+ // Error handled by close -> scheduleReconnect cycle
99
+ });
100
+ }, backoff);
101
+ }
42
102
  isConnected() {
43
103
  return this.ws !== null && this.ws.readyState === ws_1.default.OPEN;
44
104
  }
@@ -49,6 +109,7 @@ class SignalingClient extends node_events_1.EventEmitter {
49
109
  this.ws.send(JSON.stringify(data));
50
110
  }
51
111
  register(agentName, publicKey, deviceId) {
112
+ this.registrationInfo = { agentName, publicKey, deviceId };
52
113
  this.send({ event: "register", agentName, publicKey, deviceId });
53
114
  }
54
115
  createOTP() {
@@ -60,19 +121,34 @@ class SignalingClient extends node_events_1.EventEmitter {
60
121
  signal(to, data) {
61
122
  this.send({ event: "signal", to, data });
62
123
  }
63
- goOnline(deviceId) {
64
- this.send({ event: "go_online", deviceId });
124
+ goOnline(deviceId, nokaiId, sessionId, sessionName) {
125
+ this.send({ event: "go_online", deviceId, nokaiId, sessionId, sessionName });
65
126
  }
66
127
  goOffline(deviceId) {
67
128
  this.send({ event: "go_offline", deviceId });
68
129
  }
69
- reconnectRequest(targetDeviceId, agentName, publicKey, deviceId) {
70
- this.send({ event: "reconnect_req", targetDeviceId, agentName, publicKey, deviceId });
130
+ selfConnect(targetSessionId, agentName, publicKey, sessionId, sessionName) {
131
+ this.send({ event: "self_connect", targetSessionId, agentName, publicKey, sessionId, sessionName });
132
+ }
133
+ connectByNokaiId(targetNokaiId, agentName, publicKey, deviceId, nokaiId) {
134
+ this.send({ event: "connect_request", targetNokaiId, agentName, publicKey, deviceId, nokaiId });
135
+ }
136
+ approveConnection(deviceId, approvalCode, agentName, publicKey, requesterName, requesterPublicKey) {
137
+ this.send({ event: "connect_approve", deviceId, approvalCode, agentName, publicKey, requesterName, requesterPublicKey });
138
+ }
139
+ reconnectRequest(targetDeviceId, agentName, publicKey, deviceId, signature, challenge) {
140
+ this.send({ event: "reconnect_req", targetDeviceId, agentName, publicKey, deviceId, signature, challenge });
71
141
  }
72
142
  reconnectAccept(targetDeviceId, agentName, publicKey, deviceId) {
73
143
  this.send({ event: "reconnect_accept", targetDeviceId, agentName, publicKey, deviceId });
74
144
  }
75
145
  disconnect() {
146
+ this.intentionalClose = true;
147
+ if (this.reconnectTimer) {
148
+ clearTimeout(this.reconnectTimer);
149
+ this.reconnectTimer = null;
150
+ }
151
+ this.reconnectAttempts = 0;
76
152
  if (this.ws) {
77
153
  this.ws.close();
78
154
  this.ws = null;
@@ -1 +1 @@
1
- {"version":3,"file":"signaling-client.js","sourceRoot":"","sources":["../src/signaling-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signaling-client.js","sourceRoot":"","sources":["../src/signaling-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/tools/ask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;CAa7B,CAAC;AAEF,wBAAsB,SAAS,CAC7B,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1D,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
1
+ {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/tools/ask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;CAa7B,CAAC;AAEF,wBAAsB,SAAS,CAC7B,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1D,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
package/dist/tools/ask.js CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.askToolDefinition = void 0;
4
4
  exports.handleAsk = handleAsk;
5
+ const index_js_1 = require("../shared/index.js");
5
6
  exports.askToolDefinition = {
6
7
  name: "nokai_ask",
7
8
  description: "Send a question to a connected peer's AI agent. The peer's Claude Code will read their codebase and respond directly.",
@@ -23,7 +24,7 @@ async function handleAsk(args, connectionManager) {
23
24
  resolve(`Question sent to ${args.peer} (message ID: ${msg.id}).\n` +
24
25
  `Waiting for response... The peer's agent is processing your question.\n` +
25
26
  `Note: Response is taking longer than expected. The peer may be offline.`);
26
- }, 30000);
27
+ }, index_js_1.ASK_TIMEOUT_MS);
27
28
  connectionManager.onIncomingMessage((incomingMsg, peerName) => {
28
29
  if (peerName === args.peer && incomingMsg.type === "response" && "replyTo" in incomingMsg && incomingMsg.replyTo === msg.id) {
29
30
  clearTimeout(timeout);
@@ -1 +1 @@
1
- {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/tools/ask.ts"],"names":[],"mappings":";;;AAiBA,8BA8BC;AA7CY,QAAA,iBAAiB,GAAG;IAC/B,IAAI,EAAE,WAAW;IACjB,WAAW,EACT,uHAAuH;IACzH,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;YACnE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;YAChE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0CAA0C,EAAE;SACrF;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;KAC/B;CACF,CAAC;AAEK,KAAK,UAAU,SAAS,CAC7B,IAA0D,EAC1D,iBAAoC;IAEpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhF,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,OAAO,CACL,oBAAoB,IAAI,CAAC,IAAI,iBAAiB,GAAG,CAAC,EAAE,MAAM;oBAC1D,yEAAyE;oBACzE,yEAAyE,CAC1E,CAAC;YACJ,CAAC,EAAE,KAAK,CAAC,CAAC;YAEV,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE;gBAC5D,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK,UAAU,IAAI,SAAS,IAAI,WAAW,IAAI,WAAW,CAAC,OAAO,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC;oBAC5H,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,IAAI,MAAM,GAAG,iBAAiB,IAAI,CAAC,IAAI,QAAQ,WAAW,CAAC,OAAO,EAAE,CAAC;oBACrE,IAAI,aAAa,IAAI,WAAW,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;wBAC5D,MAAM,IAAI,qBAAqB,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtE,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/tools/ask.ts"],"names":[],"mappings":";;;AAkBA,8BA8BC;AA/CD,iDAAoD;AAEvC,QAAA,iBAAiB,GAAG;IAC/B,IAAI,EAAE,WAAW;IACjB,WAAW,EACT,uHAAuH;IACzH,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;YACnE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;YAChE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0CAA0C,EAAE;SACrF;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;KAC/B;CACF,CAAC;AAEK,KAAK,UAAU,SAAS,CAC7B,IAA0D,EAC1D,iBAAoC;IAEpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhF,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,OAAO,CACL,oBAAoB,IAAI,CAAC,IAAI,iBAAiB,GAAG,CAAC,EAAE,MAAM;oBAC1D,yEAAyE;oBACzE,yEAAyE,CAC1E,CAAC;YACJ,CAAC,EAAE,yBAAc,CAAC,CAAC;YAEnB,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE;gBAC5D,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK,UAAU,IAAI,SAAS,IAAI,WAAW,IAAI,WAAW,CAAC,OAAO,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC;oBAC5H,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,IAAI,MAAM,GAAG,iBAAiB,IAAI,CAAC,IAAI,QAAQ,WAAW,CAAC,OAAO,EAAE,CAAC;oBACrE,IAAI,aAAa,IAAI,WAAW,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;wBAC5D,MAAM,IAAI,qBAAqB,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtE,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC"}
@@ -7,9 +7,26 @@ export declare const connectToolDefinition: {
7
7
  description: string;
8
8
  inputSchema: {
9
9
  type: "object";
10
- properties: {};
10
+ properties: {
11
+ mode: {
12
+ type: string;
13
+ description: string;
14
+ };
15
+ id: {
16
+ type: string;
17
+ description: string;
18
+ };
19
+ session: {
20
+ type: string;
21
+ description: string;
22
+ };
23
+ };
11
24
  required: string[];
12
25
  };
13
26
  };
14
- export declare function handleConnect(profile: AgentProfile, signalingClient: SignalingClient, connectionManager: ConnectionManager, pcConfig?: PeerConnectionConfig): Promise<string>;
27
+ export declare function handleConnect(args: {
28
+ mode: string;
29
+ id?: string;
30
+ session?: string;
31
+ }, profile: AgentProfile, signalingClient: SignalingClient, connectionManager: ConnectionManager, signalingUrl: string, currentSessionId: string, currentSessionName: string, pcConfig?: PeerConnectionConfig): Promise<string>;
15
32
  //# sourceMappingURL=connect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/tools/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElF,eAAO,MAAM,qBAAqB;;;;;;kBAOd,MAAM,EAAE;;CAE3B,CAAC;AAEF,wBAAsB,aAAa,CACjC,OAAO,EAAE,YAAY,EACrB,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,iBAAiB,EACpC,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,MAAM,CAAC,CA0DjB"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/tools/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;CAsBjC,CAAC;AAwMF,wBAAsB,aAAa,CACjC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EACrD,OAAO,EAAE,YAAY,EACrB,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,kBAAkB,EAAE,MAAM,EAC1B,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,MAAM,CAAC,CA+CjB"}
@@ -5,58 +5,202 @@ exports.handleConnect = handleConnect;
5
5
  const peer_connection_js_1 = require("../peer-connection.js");
6
6
  exports.connectToolDefinition = {
7
7
  name: "nokai_connect",
8
- description: "Generate a one-time connection code (OTP) to connect with another developer's Claude Code instance. Share the 6-digit code with your peer they have 5 minutes to join using nokai_join.",
8
+ description: "Connect to another NokAI session. Use mode='teammate' with their NokAI ID to connect to a teammate. Use mode='self' to connect to your own other project session on this machine.",
9
9
  inputSchema: {
10
10
  type: "object",
11
- properties: {},
12
- required: [],
11
+ properties: {
12
+ mode: {
13
+ type: "string",
14
+ description: "Connection mode: 'teammate' (connect to another person's NokAI ID) or 'self' (connect to your own other session)",
15
+ },
16
+ id: {
17
+ type: "string",
18
+ description: "For mode='teammate': the teammate's NokAI ID (e.g., NKI-8A3F-K2M9)",
19
+ },
20
+ session: {
21
+ type: "string",
22
+ description: "For mode='self': the session name to connect to (e.g., 'web-frontend')",
23
+ },
24
+ },
25
+ required: ["mode"],
13
26
  },
14
27
  };
15
- async function handleConnect(profile, signalingClient, connectionManager, pcConfig) {
16
- if (!signalingClient.isConnected()) {
17
- return "Error: Not connected to signaling server. Please try again.";
28
+ async function fetchSessions(signalingUrl, nokaiId) {
29
+ try {
30
+ const httpUrl = signalingUrl.replace("wss://", "https://").replace("ws://", "http://");
31
+ const presenceUrl = `${httpUrl}/presence`;
32
+ // Use the presence DO's /sessions endpoint
33
+ const res = await fetch(`${presenceUrl}/sessions?nokaiId=${encodeURIComponent(nokaiId)}`);
34
+ if (res.ok) {
35
+ const data = await res.json();
36
+ return data.sessions;
37
+ }
38
+ }
39
+ catch {
40
+ // ignore
41
+ }
42
+ return [];
43
+ }
44
+ async function handleSelfConnect(sessionName, profile, signalingClient, connectionManager, signalingUrl, currentSessionId, currentSessionName, pcConfig) {
45
+ // Find the target session
46
+ const sessions = await fetchSessions(signalingUrl, profile.nokaiId);
47
+ const otherSessions = sessions.filter((s) => s.sessionId !== currentSessionId);
48
+ if (otherSessions.length === 0) {
49
+ return (`No other active sessions found for your NokAI ID (${profile.nokaiId}).\n\n` +
50
+ `Open another project with NokAI running, then try again.\n` +
51
+ `Each Claude Code / Cursor instance on a different project is a separate session.`);
52
+ }
53
+ // Find matching session by name
54
+ const target = otherSessions.find((s) => s.sessionName.toLowerCase() === sessionName.toLowerCase());
55
+ if (!target) {
56
+ let result = `Session "${sessionName}" not found. Available sessions:\n\n`;
57
+ for (const s of otherSessions) {
58
+ result += `- **${s.sessionName}**\n`;
59
+ }
60
+ result += `\nUse one of these names with \`nokai_connect mode=self session=<name>\``;
61
+ return result;
18
62
  }
19
63
  return new Promise((resolve) => {
20
- signalingClient.once("otp_created", (data) => {
21
- signalingClient.once("otp_matched", async (matchData) => {
22
- const pc = new peer_connection_js_1.PeerConnection(pcConfig);
23
- const connectionId = `conn_${Date.now()}`;
24
- pc.onIceCandidate((candidate) => {
25
- signalingClient.signal(matchData.peerId, { type: "ice", ...candidate });
26
- });
27
- signalingClient.on("signal", (signalData) => {
28
- if (signalData.from === matchData.peerId) {
29
- if (signalData.data.type === "ice") {
30
- pc.addIceCandidate({
31
- candidate: signalData.data.candidate,
32
- mid: signalData.data.mid,
33
- });
34
- }
35
- else if (signalData.data.type === "answer") {
36
- pc.acceptAnswer({
37
- type: "answer",
38
- sdp: signalData.data.sdp,
39
- });
40
- }
64
+ const timeout = setTimeout(() => {
65
+ resolve(`Error: Self-connect to "${target.sessionName}" timed out.`);
66
+ }, 30000);
67
+ signalingClient.once("otp_matched", async (matchData) => {
68
+ clearTimeout(timeout);
69
+ const pc = new peer_connection_js_1.PeerConnection(pcConfig);
70
+ const connectionId = `conn_${Date.now()}`;
71
+ pc.onIceCandidate((candidate) => {
72
+ signalingClient.signal(matchData.peerId, { type: "ice", ...candidate });
73
+ });
74
+ signalingClient.on("signal", (signalData) => {
75
+ if (signalData.from === matchData.peerId) {
76
+ if (signalData.data.type === "ice") {
77
+ pc.addIceCandidate({
78
+ candidate: signalData.data.candidate,
79
+ mid: signalData.data.mid,
80
+ });
41
81
  }
42
- });
43
- const offer = await pc.createOffer();
44
- signalingClient.signal(matchData.peerId, { type: "offer", sdp: offer.sdp });
45
- await pc.waitForDataChannel();
46
- connectionManager.registerPeer(connectionId, matchData.peerName, matchData.peerPublicKey);
47
- connectionManager.setPeerSend(connectionId, (msg) => pc.send(msg));
48
- pc.onMessage((msg) => connectionManager.handleIncomingMessage(connectionId, msg));
49
- resolve(`Connected with ${matchData.peerName}!\n` +
50
- `Connection ID: ${connectionId}\n` +
51
- `Permission: read-only\n` +
52
- `You can now use nokai_ask to send questions to ${matchData.peerName}.`);
82
+ else if (signalData.data.type === "answer") {
83
+ pc.acceptAnswer({
84
+ type: "answer",
85
+ sdp: signalData.data.sdp,
86
+ });
87
+ }
88
+ }
53
89
  });
54
- resolve(`Connection code: ${data.otp}\n` +
55
- `Expires: ${data.expiresAt}\n\n` +
56
- `Share this code with your peer. They should use nokai_join with this code.\n` +
57
- `Waiting for peer to connect...`);
90
+ const offer = await pc.createOffer();
91
+ signalingClient.signal(matchData.peerId, { type: "offer", sdp: offer.sdp });
92
+ await pc.waitForDataChannel();
93
+ connectionManager.registerPeer(connectionId, matchData.peerName, matchData.peerPublicKey);
94
+ connectionManager.setPeerSend(connectionId, (msg) => pc.send(msg));
95
+ connectionManager.setPeerClose(connectionId, () => pc.close());
96
+ pc.onMessage((msg) => connectionManager.handleIncomingMessage(connectionId, msg));
97
+ resolve(`Connected to your session: ${target.sessionName}!\n` +
98
+ `Connection ID: ${connectionId}\n` +
99
+ `Permission: read-only\n\n` +
100
+ `You can now use nokai_ask to query your other project's codebase.`);
58
101
  });
59
- signalingClient.createOTP();
102
+ signalingClient.selfConnect(target.sessionId, profile.name, profile.publicKey, currentSessionId, currentSessionName);
60
103
  });
61
104
  }
105
+ async function handleTeammateConnect(targetId, profile, signalingClient, connectionManager, pcConfig) {
106
+ const id = targetId.toUpperCase().trim();
107
+ if (!/^NKI-[A-Z0-9]{4}-[A-Z0-9]{4}$/.test(id)) {
108
+ return `Error: Invalid NokAI ID format. Expected format: NKI-XXXX-XXXX`;
109
+ }
110
+ if (id === profile.nokaiId) {
111
+ return `That's your own NokAI ID. Use \`mode=self\` to connect to your other sessions.`;
112
+ }
113
+ return new Promise((resolve) => {
114
+ const timeout = setTimeout(() => {
115
+ resolve(`Connection request sent to ${id}.\n` +
116
+ `The peer hasn't responded yet — they may be offline.`);
117
+ }, 60000);
118
+ signalingClient.once("error", (data) => {
119
+ clearTimeout(timeout);
120
+ if (data.code === "PEER_NOT_FOUND" || data.code === "PEER_OFFLINE") {
121
+ resolve(`Error: Peer ${id} is not online. Ask them to start NokAI first.`);
122
+ }
123
+ else {
124
+ resolve(`Error: ${data.message}`);
125
+ }
126
+ });
127
+ signalingClient.once("otp_matched", async (matchData) => {
128
+ clearTimeout(timeout);
129
+ const pc = new peer_connection_js_1.PeerConnection(pcConfig);
130
+ const connectionId = `conn_${Date.now()}`;
131
+ pc.onIceCandidate((candidate) => {
132
+ signalingClient.signal(matchData.peerId, { type: "ice", ...candidate });
133
+ });
134
+ signalingClient.on("signal", (signalData) => {
135
+ if (signalData.from === matchData.peerId) {
136
+ if (signalData.data.type === "ice") {
137
+ pc.addIceCandidate({
138
+ candidate: signalData.data.candidate,
139
+ mid: signalData.data.mid,
140
+ });
141
+ }
142
+ else if (signalData.data.type === "answer") {
143
+ pc.acceptAnswer({
144
+ type: "answer",
145
+ sdp: signalData.data.sdp,
146
+ });
147
+ }
148
+ }
149
+ });
150
+ const offer = await pc.createOffer();
151
+ signalingClient.signal(matchData.peerId, { type: "offer", sdp: offer.sdp });
152
+ await pc.waitForDataChannel();
153
+ connectionManager.registerPeer(connectionId, matchData.peerName, matchData.peerPublicKey);
154
+ connectionManager.setPeerSend(connectionId, (msg) => pc.send(msg));
155
+ connectionManager.setPeerClose(connectionId, () => pc.close());
156
+ pc.onMessage((msg) => connectionManager.handleIncomingMessage(connectionId, msg));
157
+ resolve(`Connected with ${matchData.peerName}!\n` +
158
+ `Connection ID: ${connectionId}\n` +
159
+ `Permission: read-only\n` +
160
+ `You can now use nokai_ask to send questions to ${matchData.peerName}.`);
161
+ });
162
+ signalingClient.connectByNokaiId(id, profile.name, profile.publicKey, profile.deviceId, profile.nokaiId);
163
+ setTimeout(() => {
164
+ resolve(`Connection request sent to ${id}.\n\n` +
165
+ `The peer will see a connection request with an approval code.\n` +
166
+ `Ask them for the 4-digit code to approve.\n\n` +
167
+ `Waiting for approval...`);
168
+ }, 2000);
169
+ });
170
+ }
171
+ async function handleConnect(args, profile, signalingClient, connectionManager, signalingUrl, currentSessionId, currentSessionName, pcConfig) {
172
+ if (!signalingClient.isConnected()) {
173
+ return "Error: Not connected to signaling server. Please try again.";
174
+ }
175
+ if (args.mode === "self") {
176
+ if (!args.session) {
177
+ // List available sessions
178
+ const sessions = await fetchSessions(signalingUrl, profile.nokaiId);
179
+ const otherSessions = sessions.filter((s) => s.sessionId !== currentSessionId);
180
+ if (otherSessions.length === 0) {
181
+ return (`No other active sessions found.\n\n` +
182
+ `Your current session: **${currentSessionName}**\n\n` +
183
+ `Open another project with NokAI running, then try again.`);
184
+ }
185
+ let result = `## Your Active Sessions\n\n`;
186
+ result += `Current: **${currentSessionName}** (this session)\n\n`;
187
+ result += `Available to connect:\n`;
188
+ for (const s of otherSessions) {
189
+ result += `- **${s.sessionName}**\n`;
190
+ }
191
+ result += `\nUse \`nokai_connect mode=self session=<name>\` to connect.`;
192
+ return result;
193
+ }
194
+ return handleSelfConnect(args.session, profile, signalingClient, connectionManager, signalingUrl, currentSessionId, currentSessionName, pcConfig);
195
+ }
196
+ if (args.mode === "teammate") {
197
+ if (!args.id) {
198
+ return "Error: Please provide the teammate's NokAI ID. Use `nokai_connect mode=teammate id=NKI-XXXX-XXXX`";
199
+ }
200
+ return handleTeammateConnect(args.id, profile, signalingClient, connectionManager, pcConfig);
201
+ }
202
+ return (`Invalid mode. Choose one:\n\n` +
203
+ `- \`mode=teammate\` — Connect to another person using their NokAI ID\n` +
204
+ `- \`mode=self\` — Connect to your own other project session`);
205
+ }
62
206
  //# sourceMappingURL=connect.js.map