@prbe.ai/electron-sdk 0.1.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 (54) hide show
  1. package/dist/agent.d.ts +105 -0
  2. package/dist/agent.d.ts.map +1 -0
  3. package/dist/agent.js +861 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/assets/index.d.ts +6 -0
  6. package/dist/assets/index.d.ts.map +1 -0
  7. package/dist/assets/index.js +13 -0
  8. package/dist/assets/index.js.map +1 -0
  9. package/dist/index.d.ts +16 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +62 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/interactions.d.ts +56 -0
  14. package/dist/interactions.d.ts.map +1 -0
  15. package/dist/interactions.js +27 -0
  16. package/dist/interactions.js.map +1 -0
  17. package/dist/models.d.ts +212 -0
  18. package/dist/models.d.ts.map +1 -0
  19. package/dist/models.js +120 -0
  20. package/dist/models.js.map +1 -0
  21. package/dist/serialization.d.ts +49 -0
  22. package/dist/serialization.d.ts.map +1 -0
  23. package/dist/serialization.js +69 -0
  24. package/dist/serialization.js.map +1 -0
  25. package/dist/state.d.ts +67 -0
  26. package/dist/state.d.ts.map +1 -0
  27. package/dist/state.js +270 -0
  28. package/dist/state.js.map +1 -0
  29. package/dist/tools/bash.d.ts +30 -0
  30. package/dist/tools/bash.d.ts.map +1 -0
  31. package/dist/tools/bash.js +247 -0
  32. package/dist/tools/bash.js.map +1 -0
  33. package/dist/tools/filesystem.d.ts +63 -0
  34. package/dist/tools/filesystem.d.ts.map +1 -0
  35. package/dist/tools/filesystem.js +573 -0
  36. package/dist/tools/filesystem.js.map +1 -0
  37. package/dist/tools/index.d.ts +46 -0
  38. package/dist/tools/index.d.ts.map +1 -0
  39. package/dist/tools/index.js +171 -0
  40. package/dist/tools/index.js.map +1 -0
  41. package/dist/tools/interactive.d.ts +15 -0
  42. package/dist/tools/interactive.d.ts.map +1 -0
  43. package/dist/tools/interactive.js +57 -0
  44. package/dist/tools/interactive.js.map +1 -0
  45. package/dist/tools/logs.d.ts +72 -0
  46. package/dist/tools/logs.d.ts.map +1 -0
  47. package/dist/tools/logs.js +366 -0
  48. package/dist/tools/logs.js.map +1 -0
  49. package/dist/types.d.ts +14 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +32 -0
  52. package/dist/types.js.map +1 -0
  53. package/package.json +35 -0
  54. package/src/assets/probe-mark.svg +5 -0
@@ -0,0 +1,49 @@
1
+ /**
2
+ * serialization.ts — IPC-safe serialization of agent state
3
+ *
4
+ * Converts live PRBEAgentState (with Map, Date, EventEmitter) into
5
+ * plain JSON-safe objects suitable for IPC or structured clone.
6
+ */
7
+ import type { PRBEAgentState } from "./state";
8
+ import type { PRBEStatusEvent, TicketInfoOut } from "./models";
9
+ import type { InteractionPayload } from "./interactions";
10
+ export interface PRBESerializedCR {
11
+ id: string;
12
+ query: string;
13
+ slug?: string;
14
+ events: PRBEStatusEvent[];
15
+ isRunning: boolean;
16
+ isCompleted: boolean;
17
+ isFailed: boolean;
18
+ report: string;
19
+ summary: string;
20
+ errorMessage?: string;
21
+ startedAt: string;
22
+ pendingInteraction?: InteractionPayload;
23
+ }
24
+ export type PRBESerializedTicket = TicketInfoOut;
25
+ export interface PRBESerializedCompletedInvestigation {
26
+ id: string;
27
+ query: string;
28
+ report: string;
29
+ summary: string;
30
+ completedAt: string;
31
+ }
32
+ export interface PRBESerializedState {
33
+ isInvestigating: boolean;
34
+ events: PRBEStatusEvent[];
35
+ report: string;
36
+ summary: string;
37
+ currentQuery: string;
38
+ investigationError?: string;
39
+ pendingInteraction?: InteractionPayload;
40
+ completedInvestigations: PRBESerializedCompletedInvestigation[];
41
+ activeCRs: PRBESerializedCR[];
42
+ completedCRs: PRBESerializedCR[];
43
+ trackedTicketIDs: string[];
44
+ ticketInfo: PRBESerializedTicket[];
45
+ hasActiveWork: boolean;
46
+ }
47
+ export declare const DEFAULT_PRBE_STATE: PRBESerializedState;
48
+ export declare function serializePRBEState(state: PRBEAgentState): PRBESerializedState;
49
+ //# sourceMappingURL=serialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EACV,eAAe,EAEf,aAAa,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAMzD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAMD,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAMjD,MAAM,WAAW,oCAAoC;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,uBAAuB,EAAE,oCAAoC,EAAE,CAAC;IAChE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,aAAa,EAAE,OAAO,CAAC;CACxB;AAMD,eAAO,MAAM,kBAAkB,EAAE,mBAYhC,CAAC;AAuBF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,mBAAmB,CAsB7E"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * serialization.ts — IPC-safe serialization of agent state
4
+ *
5
+ * Converts live PRBEAgentState (with Map, Date, EventEmitter) into
6
+ * plain JSON-safe objects suitable for IPC or structured clone.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DEFAULT_PRBE_STATE = void 0;
10
+ exports.serializePRBEState = serializePRBEState;
11
+ // ---------------------------------------------------------------------------
12
+ // Default state (used before agent initializes)
13
+ // ---------------------------------------------------------------------------
14
+ exports.DEFAULT_PRBE_STATE = {
15
+ isInvestigating: false,
16
+ events: [],
17
+ report: "",
18
+ summary: "",
19
+ currentQuery: "",
20
+ completedInvestigations: [],
21
+ activeCRs: [],
22
+ completedCRs: [],
23
+ trackedTicketIDs: [],
24
+ ticketInfo: [],
25
+ hasActiveWork: false,
26
+ };
27
+ // ---------------------------------------------------------------------------
28
+ // Converter: live state → IPC-safe plain object
29
+ // ---------------------------------------------------------------------------
30
+ function serializeCR(cr) {
31
+ return {
32
+ id: cr.id,
33
+ query: cr.query,
34
+ slug: cr.slug,
35
+ events: cr.events,
36
+ isRunning: cr.isRunning,
37
+ isCompleted: cr.isCompleted,
38
+ isFailed: cr.isFailed,
39
+ report: cr.report,
40
+ summary: cr.summary,
41
+ errorMessage: cr.errorMessage,
42
+ startedAt: cr.startedAt.toISOString(),
43
+ pendingInteraction: cr.pendingInteraction,
44
+ };
45
+ }
46
+ function serializePRBEState(state) {
47
+ return {
48
+ isInvestigating: state.isInvestigating,
49
+ events: state.events,
50
+ report: state.report,
51
+ summary: state.summary,
52
+ currentQuery: state.currentQuery,
53
+ investigationError: state.investigationError,
54
+ pendingInteraction: state.pendingInteraction,
55
+ completedInvestigations: state.completedInvestigations.map((inv) => ({
56
+ id: inv.id,
57
+ query: inv.query,
58
+ report: inv.report,
59
+ summary: inv.summary,
60
+ completedAt: inv.completedAt.toISOString(),
61
+ })),
62
+ activeCRs: Array.from(state.activeCRs.values()).map(serializeCR),
63
+ completedCRs: state.completedCRs.map(serializeCR),
64
+ trackedTicketIDs: state.trackedTicketIDs,
65
+ ticketInfo: state.ticketInfo,
66
+ hasActiveWork: state.hasActiveWork,
67
+ };
68
+ }
69
+ //# sourceMappingURL=serialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA0GH,gDAsBC;AA7DD,8EAA8E;AAC9E,gDAAgD;AAChD,8EAA8E;AAEjE,QAAA,kBAAkB,GAAwB;IACrD,eAAe,EAAE,KAAK;IACtB,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,EAAE;IAChB,uBAAuB,EAAE,EAAE;IAC3B,SAAS,EAAE,EAAE;IACb,YAAY,EAAE,EAAE;IAChB,gBAAgB,EAAE,EAAE;IACpB,UAAU,EAAE,EAAE;IACd,aAAa,EAAE,KAAK;CACrB,CAAC;AAEF,8EAA8E;AAC9E,gDAAgD;AAChD,8EAA8E;AAE9E,SAAS,WAAW,CAAC,EAAuB;IAC1C,OAAO;QACL,EAAE,EAAE,EAAE,CAAC,EAAE;QACT,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,WAAW,EAAE,EAAE,CAAC,WAAW;QAC3B,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,YAAY,EAAE,EAAE,CAAC,YAAY;QAC7B,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE;QACrC,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;KAC1C,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAqB;IACtD,OAAO;QACL,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACnE,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE;SAC3C,CAAC,CAAC;QACH,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;QAChE,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;QACjD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;KACnC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * state.ts — PRBEAgentState: EventEmitter-based observable investigation state
3
+ *
4
+ * Mirrors PRBEAgentState.swift but uses Node.js EventEmitter instead of Combine/@Published.
5
+ * Host apps subscribe to events for UI updates.
6
+ */
7
+ import { EventEmitter } from "events";
8
+ import type { PRBEStatusEvent, PRBECRInvestigation, PRBECompletedInvestigation, TicketInfoOut } from "./models";
9
+ import type { InteractionPayload } from "./interactions";
10
+ export declare enum PRBEStateEvent {
11
+ /** Emitted on any state change. Payload: void */
12
+ STATUS = "status",
13
+ /** Emitted when a new event is appended. Payload: PRBEStatusEvent */
14
+ EVENT = "event",
15
+ /** Emitted when investigation completes. Payload: { report: string; summary: string } */
16
+ COMPLETE = "complete",
17
+ /** Emitted on error. Payload: { message: string } */
18
+ ERROR = "error",
19
+ /** Emitted when a background CR starts. Payload: PRBECRInvestigation */
20
+ CR_START = "cr-start",
21
+ /** Emitted when a background CR completes/fails. Payload: PRBECRInvestigation */
22
+ CR_COMPLETE = "cr-complete",
23
+ /** Emitted when tracked ticket IDs change. Payload: string[] */
24
+ TICKETS_CHANGED = "tickets-changed",
25
+ /** Emitted when ticket info is updated. Payload: TicketInfoOut[] */
26
+ TICKET_INFO = "ticket-info",
27
+ /** Emitted when an interaction is requested. Payload: InteractionPayload */
28
+ INTERACTION_REQUESTED = "interaction-requested",
29
+ /** Emitted when an interaction is resolved. Payload: void */
30
+ INTERACTION_RESOLVED = "interaction-resolved"
31
+ }
32
+ export declare class PRBEAgentState extends EventEmitter {
33
+ isInvestigating: boolean;
34
+ events: PRBEStatusEvent[];
35
+ report: string;
36
+ summary: string;
37
+ currentQuery: string;
38
+ investigationError?: string;
39
+ pendingInteraction?: InteractionPayload;
40
+ completedInvestigations: PRBECompletedInvestigation[];
41
+ activeCRs: Map<string, PRBECRInvestigation>;
42
+ completedCRs: PRBECRInvestigation[];
43
+ trackedTicketIDs: string[];
44
+ ticketInfo: TicketInfoOut[];
45
+ get hasActiveWork(): boolean;
46
+ get activeCRCount(): number;
47
+ get isActive(): boolean;
48
+ beginInvestigation(query: string): void;
49
+ resetInvestigation(): void;
50
+ appendEvent(label: string, detail?: string, completed?: boolean): void;
51
+ attachObservation(text: string): void;
52
+ completeInvestigation(report: string, summary: string): void;
53
+ failInvestigation(message: string): void;
54
+ setPendingInteraction(payload: InteractionPayload): void;
55
+ clearPendingInteraction(): void;
56
+ setCRPendingInteraction(crID: string, payload: InteractionPayload): void;
57
+ clearCRPendingInteraction(crID: string): void;
58
+ toggleExpansion(eventId: string): void;
59
+ beginCR(id: string, query: string, slug?: string): void;
60
+ appendCREvent(crID: string, label: string, detail?: string, completed?: boolean): void;
61
+ attachCRObservation(crID: string, text: string): void;
62
+ completeCR(id: string, report: string, summary: string): void;
63
+ failCR(id: string, message: string): void;
64
+ updateTrackedTicketIDs(ids: string[]): void;
65
+ updateTicketInfo(info: TicketInfoOut[]): void;
66
+ }
67
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,0BAA0B,EAC1B,aAAa,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAMzD,oBAAY,cAAc;IACxB,iDAAiD;IACjD,MAAM,WAAW;IACjB,qEAAqE;IACrE,KAAK,UAAU;IACf,yFAAyF;IACzF,QAAQ,aAAa;IACrB,qDAAqD;IACrD,KAAK,UAAU;IACf,wEAAwE;IACxE,QAAQ,aAAa;IACrB,iFAAiF;IACjF,WAAW,gBAAgB;IAC3B,gEAAgE;IAChE,eAAe,oBAAoB;IACnC,oEAAoE;IACpE,WAAW,gBAAgB;IAC3B,4EAA4E;IAC5E,qBAAqB,0BAA0B;IAC/C,6DAA6D;IAC7D,oBAAoB,yBAAyB;CAC9C;AAMD,qBAAa,cAAe,SAAQ,YAAY;IAEvC,eAAe,UAAS;IACxB,MAAM,EAAE,eAAe,EAAE,CAAM;IAC/B,MAAM,SAAM;IACZ,OAAO,SAAM;IACb,YAAY,SAAM;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAGxC,uBAAuB,EAAE,0BAA0B,EAAE,CAAM;IAG3D,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAa;IACxD,YAAY,EAAE,mBAAmB,EAAE,CAAM;IAGzC,gBAAgB,EAAE,MAAM,EAAE,CAAM;IAChC,UAAU,EAAE,aAAa,EAAE,CAAM;IAGxC,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAID,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAUvC,kBAAkB,IAAI,IAAI;IAW1B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,IAAI;IAoBpE,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOrC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAsB5D,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAUxC,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAMxD,uBAAuB,IAAI,IAAI;IAM/B,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAQxE,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ7C,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAUtC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAkBvD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,IAAI;IAoBpF,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAOrD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAuB7D,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAqBzC,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAM3C,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI;CAK9C"}
package/dist/state.js ADDED
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ /**
3
+ * state.ts — PRBEAgentState: EventEmitter-based observable investigation state
4
+ *
5
+ * Mirrors PRBEAgentState.swift but uses Node.js EventEmitter instead of Combine/@Published.
6
+ * Host apps subscribe to events for UI updates.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PRBEAgentState = exports.PRBEStateEvent = void 0;
10
+ const events_1 = require("events");
11
+ const crypto_1 = require("crypto");
12
+ // ---------------------------------------------------------------------------
13
+ // Event types emitted by PRBEAgentState
14
+ // ---------------------------------------------------------------------------
15
+ var PRBEStateEvent;
16
+ (function (PRBEStateEvent) {
17
+ /** Emitted on any state change. Payload: void */
18
+ PRBEStateEvent["STATUS"] = "status";
19
+ /** Emitted when a new event is appended. Payload: PRBEStatusEvent */
20
+ PRBEStateEvent["EVENT"] = "event";
21
+ /** Emitted when investigation completes. Payload: { report: string; summary: string } */
22
+ PRBEStateEvent["COMPLETE"] = "complete";
23
+ /** Emitted on error. Payload: { message: string } */
24
+ PRBEStateEvent["ERROR"] = "error";
25
+ /** Emitted when a background CR starts. Payload: PRBECRInvestigation */
26
+ PRBEStateEvent["CR_START"] = "cr-start";
27
+ /** Emitted when a background CR completes/fails. Payload: PRBECRInvestigation */
28
+ PRBEStateEvent["CR_COMPLETE"] = "cr-complete";
29
+ /** Emitted when tracked ticket IDs change. Payload: string[] */
30
+ PRBEStateEvent["TICKETS_CHANGED"] = "tickets-changed";
31
+ /** Emitted when ticket info is updated. Payload: TicketInfoOut[] */
32
+ PRBEStateEvent["TICKET_INFO"] = "ticket-info";
33
+ /** Emitted when an interaction is requested. Payload: InteractionPayload */
34
+ PRBEStateEvent["INTERACTION_REQUESTED"] = "interaction-requested";
35
+ /** Emitted when an interaction is resolved. Payload: void */
36
+ PRBEStateEvent["INTERACTION_RESOLVED"] = "interaction-resolved";
37
+ })(PRBEStateEvent || (exports.PRBEStateEvent = PRBEStateEvent = {}));
38
+ // ---------------------------------------------------------------------------
39
+ // PRBEAgentState
40
+ // ---------------------------------------------------------------------------
41
+ class PRBEAgentState extends events_1.EventEmitter {
42
+ // User-initiated investigation
43
+ isInvestigating = false;
44
+ events = [];
45
+ report = "";
46
+ summary = "";
47
+ currentQuery = "";
48
+ investigationError;
49
+ pendingInteraction;
50
+ // Completed user investigations (history)
51
+ completedInvestigations = [];
52
+ // Background context requests
53
+ activeCRs = new Map();
54
+ completedCRs = [];
55
+ // Tracked tickets
56
+ trackedTicketIDs = [];
57
+ ticketInfo = [];
58
+ // Computed
59
+ get hasActiveWork() {
60
+ return this.isInvestigating || this.activeCRs.size > 0;
61
+ }
62
+ get activeCRCount() {
63
+ return this.activeCRs.size;
64
+ }
65
+ get isActive() {
66
+ return this.isInvestigating || this.report.length > 0 || this.investigationError != null;
67
+ }
68
+ // ---------- User investigation mutations ----------
69
+ beginInvestigation(query) {
70
+ this.isInvestigating = true;
71
+ this.events = [];
72
+ this.report = "";
73
+ this.summary = "";
74
+ this.currentQuery = query;
75
+ this.investigationError = undefined;
76
+ this.emit(PRBEStateEvent.STATUS);
77
+ }
78
+ resetInvestigation() {
79
+ this.isInvestigating = false;
80
+ this.events = [];
81
+ this.report = "";
82
+ this.summary = "";
83
+ this.currentQuery = "";
84
+ this.investigationError = undefined;
85
+ this.pendingInteraction = undefined;
86
+ this.emit(PRBEStateEvent.STATUS);
87
+ }
88
+ appendEvent(label, detail, completed = false) {
89
+ // Mark previous event as completed before adding new one
90
+ if (this.events.length > 0) {
91
+ const last = this.events[this.events.length - 1];
92
+ if (!last.isCompleted && !completed) {
93
+ last.isCompleted = true;
94
+ }
95
+ }
96
+ const event = {
97
+ id: (0, crypto_1.randomUUID)(),
98
+ label,
99
+ detail,
100
+ isCompleted: completed,
101
+ isExpanded: false,
102
+ };
103
+ this.events.push(event);
104
+ this.emit(PRBEStateEvent.EVENT, event);
105
+ this.emit(PRBEStateEvent.STATUS);
106
+ }
107
+ attachObservation(text) {
108
+ if (this.events.length > 0) {
109
+ this.events[this.events.length - 1].detail = text;
110
+ this.emit(PRBEStateEvent.STATUS);
111
+ }
112
+ }
113
+ completeInvestigation(report, summary) {
114
+ if (this.events.length > 0) {
115
+ this.events[this.events.length - 1].isCompleted = true;
116
+ }
117
+ this.appendEvent("Done", undefined, true);
118
+ // Save to history
119
+ this.completedInvestigations.unshift({
120
+ id: (0, crypto_1.randomUUID)(),
121
+ query: this.currentQuery,
122
+ report,
123
+ summary,
124
+ completedAt: new Date(),
125
+ });
126
+ this.report = report;
127
+ this.summary = summary;
128
+ this.isInvestigating = false;
129
+ this.emit(PRBEStateEvent.COMPLETE, { report, summary });
130
+ this.emit(PRBEStateEvent.STATUS);
131
+ }
132
+ failInvestigation(message) {
133
+ this.appendEvent(`Error: ${message}`);
134
+ this.investigationError = message;
135
+ this.isInvestigating = false;
136
+ this.emit(PRBEStateEvent.ERROR, { message });
137
+ this.emit(PRBEStateEvent.STATUS);
138
+ }
139
+ // ---------- Interaction state mutations ----------
140
+ setPendingInteraction(payload) {
141
+ this.pendingInteraction = payload;
142
+ this.emit(PRBEStateEvent.INTERACTION_REQUESTED, payload);
143
+ this.emit(PRBEStateEvent.STATUS);
144
+ }
145
+ clearPendingInteraction() {
146
+ this.pendingInteraction = undefined;
147
+ this.emit(PRBEStateEvent.INTERACTION_RESOLVED);
148
+ this.emit(PRBEStateEvent.STATUS);
149
+ }
150
+ setCRPendingInteraction(crID, payload) {
151
+ const cr = this.activeCRs.get(crID);
152
+ if (!cr)
153
+ return;
154
+ cr.pendingInteraction = payload;
155
+ this.emit(PRBEStateEvent.INTERACTION_REQUESTED, payload);
156
+ this.emit(PRBEStateEvent.STATUS);
157
+ }
158
+ clearCRPendingInteraction(crID) {
159
+ const cr = this.activeCRs.get(crID);
160
+ if (!cr)
161
+ return;
162
+ cr.pendingInteraction = undefined;
163
+ this.emit(PRBEStateEvent.INTERACTION_RESOLVED);
164
+ this.emit(PRBEStateEvent.STATUS);
165
+ }
166
+ toggleExpansion(eventId) {
167
+ const event = this.events.find((e) => e.id === eventId);
168
+ if (event) {
169
+ event.isExpanded = !event.isExpanded;
170
+ this.emit(PRBEStateEvent.STATUS);
171
+ }
172
+ }
173
+ // ---------- CR state mutations ----------
174
+ beginCR(id, query, slug) {
175
+ const cr = {
176
+ id,
177
+ query,
178
+ slug,
179
+ events: [],
180
+ isRunning: true,
181
+ isCompleted: false,
182
+ isFailed: false,
183
+ report: "",
184
+ summary: "",
185
+ startedAt: new Date(),
186
+ };
187
+ this.activeCRs.set(id, cr);
188
+ this.emit(PRBEStateEvent.CR_START, cr);
189
+ this.emit(PRBEStateEvent.STATUS);
190
+ }
191
+ appendCREvent(crID, label, detail, completed = false) {
192
+ const cr = this.activeCRs.get(crID);
193
+ if (!cr)
194
+ return;
195
+ if (cr.events.length > 0) {
196
+ const last = cr.events[cr.events.length - 1];
197
+ if (!last.isCompleted && !completed) {
198
+ last.isCompleted = true;
199
+ }
200
+ }
201
+ cr.events.push({
202
+ id: (0, crypto_1.randomUUID)(),
203
+ label,
204
+ detail,
205
+ isCompleted: completed,
206
+ isExpanded: false,
207
+ });
208
+ this.emit(PRBEStateEvent.STATUS);
209
+ }
210
+ attachCRObservation(crID, text) {
211
+ const cr = this.activeCRs.get(crID);
212
+ if (!cr || cr.events.length === 0)
213
+ return;
214
+ cr.events[cr.events.length - 1].detail = text;
215
+ this.emit(PRBEStateEvent.STATUS);
216
+ }
217
+ completeCR(id, report, summary) {
218
+ const cr = this.activeCRs.get(id);
219
+ if (!cr)
220
+ return;
221
+ this.activeCRs.delete(id);
222
+ if (cr.events.length > 0) {
223
+ cr.events[cr.events.length - 1].isCompleted = true;
224
+ }
225
+ cr.events.push({
226
+ id: (0, crypto_1.randomUUID)(),
227
+ label: "Done",
228
+ isCompleted: true,
229
+ isExpanded: false,
230
+ });
231
+ cr.isRunning = false;
232
+ cr.isCompleted = true;
233
+ cr.report = report;
234
+ cr.summary = summary;
235
+ this.completedCRs.unshift(cr);
236
+ this.emit(PRBEStateEvent.CR_COMPLETE, cr);
237
+ this.emit(PRBEStateEvent.STATUS);
238
+ }
239
+ failCR(id, message) {
240
+ const cr = this.activeCRs.get(id);
241
+ if (!cr)
242
+ return;
243
+ this.activeCRs.delete(id);
244
+ cr.events.push({
245
+ id: (0, crypto_1.randomUUID)(),
246
+ label: `Error: ${message}`,
247
+ isCompleted: false,
248
+ isExpanded: false,
249
+ });
250
+ cr.isRunning = false;
251
+ cr.isFailed = true;
252
+ cr.errorMessage = message;
253
+ this.completedCRs.unshift(cr);
254
+ this.emit(PRBEStateEvent.CR_COMPLETE, cr);
255
+ this.emit(PRBEStateEvent.STATUS);
256
+ }
257
+ // ---------- Tickets ----------
258
+ updateTrackedTicketIDs(ids) {
259
+ this.trackedTicketIDs = ids;
260
+ this.emit(PRBEStateEvent.TICKETS_CHANGED, ids);
261
+ this.emit(PRBEStateEvent.STATUS);
262
+ }
263
+ updateTicketInfo(info) {
264
+ this.ticketInfo = info;
265
+ this.emit(PRBEStateEvent.TICKET_INFO, info);
266
+ this.emit(PRBEStateEvent.STATUS);
267
+ }
268
+ }
269
+ exports.PRBEAgentState = PRBEAgentState;
270
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * tools/bash.ts — BashExecuteTool
3
+ *
4
+ * Allows the agent to execute shell commands during investigations.
5
+ * Uses a whitelist-only safety model: commands on the whitelist run without
6
+ * permission; everything else requires user approval.
7
+ *
8
+ * Platform-aware: uses separate whitelists for Unix and Windows, and
9
+ * runs commands via PowerShell on Windows for consistent behavior.
10
+ */
11
+ import type { PRBEToolDeclaration } from "../models";
12
+ import type { PRBEInteractionRequester } from "../interactions";
13
+ import type { PRBETool } from "./index";
14
+ export declare class BashExecuteTool implements PRBETool {
15
+ private readonly requester;
16
+ private readonly allowedRoots;
17
+ private readonly grantedPaths;
18
+ constructor(requester: PRBEInteractionRequester, allowedRoots: string[], grantedPaths: Set<string>);
19
+ get declaration(): PRBEToolDeclaration;
20
+ execute(args: Record<string, unknown>): Promise<string>;
21
+ /**
22
+ * Check if a command is on the safe whitelist.
23
+ */
24
+ private isCommandSafe;
25
+ /**
26
+ * For piped commands, check that every segment uses a safe command.
27
+ */
28
+ private areAllPipeSegmentsSafe;
29
+ }
30
+ //# sourceMappingURL=bash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGrD,OAAO,KAAK,EAAE,wBAAwB,EAA6B,MAAM,iBAAiB,CAAC;AAC3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAqDxC,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;gBAGzC,SAAS,EAAE,wBAAwB,EACnC,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC;IAO3B,IAAI,WAAW,IAAI,mBAAmB,CA0BrC;IAEK,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA+E7D;;OAEG;IACH,OAAO,CAAC,aAAa;IA2BrB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAoB/B"}