@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.
- package/dist/agent.d.ts +105 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +861 -0
- package/dist/agent.js.map +1 -0
- package/dist/assets/index.d.ts +6 -0
- package/dist/assets/index.d.ts.map +1 -0
- package/dist/assets/index.js +13 -0
- package/dist/assets/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/interactions.d.ts +56 -0
- package/dist/interactions.d.ts.map +1 -0
- package/dist/interactions.js +27 -0
- package/dist/interactions.js.map +1 -0
- package/dist/models.d.ts +212 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +120 -0
- package/dist/models.js.map +1 -0
- package/dist/serialization.d.ts +49 -0
- package/dist/serialization.d.ts.map +1 -0
- package/dist/serialization.js +69 -0
- package/dist/serialization.js.map +1 -0
- package/dist/state.d.ts +67 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +270 -0
- package/dist/state.js.map +1 -0
- package/dist/tools/bash.d.ts +30 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +247 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/filesystem.d.ts +63 -0
- package/dist/tools/filesystem.d.ts.map +1 -0
- package/dist/tools/filesystem.js +573 -0
- package/dist/tools/filesystem.js.map +1 -0
- package/dist/tools/index.d.ts +46 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +171 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/interactive.d.ts +15 -0
- package/dist/tools/interactive.d.ts.map +1 -0
- package/dist/tools/interactive.js +57 -0
- package/dist/tools/interactive.js.map +1 -0
- package/dist/tools/logs.d.ts +72 -0
- package/dist/tools/logs.d.ts.map +1 -0
- package/dist/tools/logs.js +366 -0
- package/dist/tools/logs.js.map +1 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +32 -0
- package/dist/types.js.map +1 -0
- package/package.json +35 -0
- 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"}
|
package/dist/state.d.ts
ADDED
|
@@ -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"}
|