@polpo-ai/react 0.2.2
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/LICENSE +21 -0
- package/README.md +556 -0
- package/dist/hooks/use-active-delays.d.ts +19 -0
- package/dist/hooks/use-active-delays.d.ts.map +1 -0
- package/dist/hooks/use-active-delays.js +35 -0
- package/dist/hooks/use-active-delays.js.map +1 -0
- package/dist/hooks/use-agent.d.ts +12 -0
- package/dist/hooks/use-agent.d.ts.map +1 -0
- package/dist/hooks/use-agent.js +28 -0
- package/dist/hooks/use-agent.js.map +1 -0
- package/dist/hooks/use-agents.d.ts +16 -0
- package/dist/hooks/use-agents.d.ts.map +1 -0
- package/dist/hooks/use-agents.js +51 -0
- package/dist/hooks/use-agents.js.map +1 -0
- package/dist/hooks/use-approvals.d.ts +19 -0
- package/dist/hooks/use-approvals.d.ts.map +1 -0
- package/dist/hooks/use-approvals.js +51 -0
- package/dist/hooks/use-approvals.js.map +1 -0
- package/dist/hooks/use-assessment-progress.d.ts +11 -0
- package/dist/hooks/use-assessment-progress.d.ts.map +1 -0
- package/dist/hooks/use-assessment-progress.js +10 -0
- package/dist/hooks/use-assessment-progress.js.map +1 -0
- package/dist/hooks/use-auth-status.d.ts +13 -0
- package/dist/hooks/use-auth-status.d.ts.map +1 -0
- package/dist/hooks/use-auth-status.js +28 -0
- package/dist/hooks/use-auth-status.js.map +1 -0
- package/dist/hooks/use-events.d.ts +6 -0
- package/dist/hooks/use-events.d.ts.map +1 -0
- package/dist/hooks/use-events.js +24 -0
- package/dist/hooks/use-events.js.map +1 -0
- package/dist/hooks/use-logs.d.ts +10 -0
- package/dist/hooks/use-logs.d.ts.map +1 -0
- package/dist/hooks/use-logs.js +24 -0
- package/dist/hooks/use-logs.js.map +1 -0
- package/dist/hooks/use-memory.d.ts +30 -0
- package/dist/hooks/use-memory.d.ts.map +1 -0
- package/dist/hooks/use-memory.js +66 -0
- package/dist/hooks/use-memory.js.map +1 -0
- package/dist/hooks/use-mission.d.ts +33 -0
- package/dist/hooks/use-mission.d.ts.map +1 -0
- package/dist/hooks/use-mission.js +78 -0
- package/dist/hooks/use-mission.js.map +1 -0
- package/dist/hooks/use-missions.d.ts +19 -0
- package/dist/hooks/use-missions.d.ts.map +1 -0
- package/dist/hooks/use-missions.js +52 -0
- package/dist/hooks/use-missions.js.map +1 -0
- package/dist/hooks/use-notifications.d.ts +21 -0
- package/dist/hooks/use-notifications.d.ts.map +1 -0
- package/dist/hooks/use-notifications.js +43 -0
- package/dist/hooks/use-notifications.js.map +1 -0
- package/dist/hooks/use-orchestrator-skills.d.ts +13 -0
- package/dist/hooks/use-orchestrator-skills.d.ts.map +1 -0
- package/dist/hooks/use-orchestrator-skills.js +28 -0
- package/dist/hooks/use-orchestrator-skills.js.map +1 -0
- package/dist/hooks/use-playbooks.d.ts +29 -0
- package/dist/hooks/use-playbooks.d.ts.map +1 -0
- package/dist/hooks/use-playbooks.js +49 -0
- package/dist/hooks/use-playbooks.js.map +1 -0
- package/dist/hooks/use-polpo.d.ts +8 -0
- package/dist/hooks/use-polpo.d.ts.map +1 -0
- package/dist/hooks/use-polpo.js +8 -0
- package/dist/hooks/use-polpo.js.map +1 -0
- package/dist/hooks/use-processes.d.ts +9 -0
- package/dist/hooks/use-processes.d.ts.map +1 -0
- package/dist/hooks/use-processes.js +24 -0
- package/dist/hooks/use-processes.js.map +1 -0
- package/dist/hooks/use-schedules.d.ts +9 -0
- package/dist/hooks/use-schedules.d.ts.map +1 -0
- package/dist/hooks/use-schedules.js +35 -0
- package/dist/hooks/use-schedules.js.map +1 -0
- package/dist/hooks/use-sessions.d.ts +14 -0
- package/dist/hooks/use-sessions.d.ts.map +1 -0
- package/dist/hooks/use-sessions.js +49 -0
- package/dist/hooks/use-sessions.js.map +1 -0
- package/dist/hooks/use-skills.d.ts +13 -0
- package/dist/hooks/use-skills.d.ts.map +1 -0
- package/dist/hooks/use-skills.js +28 -0
- package/dist/hooks/use-skills.js.map +1 -0
- package/dist/hooks/use-stable-value.d.ts +6 -0
- package/dist/hooks/use-stable-value.d.ts.map +1 -0
- package/dist/hooks/use-stable-value.js +30 -0
- package/dist/hooks/use-stable-value.js.map +1 -0
- package/dist/hooks/use-stats.d.ts +3 -0
- package/dist/hooks/use-stats.d.ts.map +1 -0
- package/dist/hooks/use-stats.js +7 -0
- package/dist/hooks/use-stats.js.map +1 -0
- package/dist/hooks/use-task-activity.d.ts +21 -0
- package/dist/hooks/use-task-activity.d.ts.map +1 -0
- package/dist/hooks/use-task-activity.js +72 -0
- package/dist/hooks/use-task-activity.js.map +1 -0
- package/dist/hooks/use-task.d.ts +14 -0
- package/dist/hooks/use-task.d.ts.map +1 -0
- package/dist/hooks/use-task.js +58 -0
- package/dist/hooks/use-task.js.map +1 -0
- package/dist/hooks/use-tasks.d.ts +13 -0
- package/dist/hooks/use-tasks.d.ts.map +1 -0
- package/dist/hooks/use-tasks.js +50 -0
- package/dist/hooks/use-tasks.js.map +1 -0
- package/dist/hooks/use-templates.d.ts +21 -0
- package/dist/hooks/use-templates.d.ts.map +1 -0
- package/dist/hooks/use-templates.js +41 -0
- package/dist/hooks/use-templates.js.map +1 -0
- package/dist/hooks/use-vault-entries.d.ts +13 -0
- package/dist/hooks/use-vault-entries.d.ts.map +1 -0
- package/dist/hooks/use-vault-entries.js +32 -0
- package/dist/hooks/use-vault-entries.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/provider/polpo-context.d.ts +9 -0
- package/dist/provider/polpo-context.d.ts.map +1 -0
- package/dist/provider/polpo-context.js +10 -0
- package/dist/provider/polpo-context.js.map +1 -0
- package/dist/provider/polpo-provider.d.ts +12 -0
- package/dist/provider/polpo-provider.d.ts.map +1 -0
- package/dist/provider/polpo-provider.js +62 -0
- package/dist/provider/polpo-provider.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { useSyncExternalStore, useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
import { usePolpoContext } from "../provider/polpo-context.js";
|
|
3
|
+
import { selectMissions } from "@polpo-ai/client";
|
|
4
|
+
export function useMissions() {
|
|
5
|
+
const { client, store } = usePolpoContext();
|
|
6
|
+
const missions = useSyncExternalStore(store.subscribe, () => selectMissions(store.getSnapshot()), () => selectMissions(store.getServerSnapshot()));
|
|
7
|
+
const missionsStale = useSyncExternalStore(store.subscribe, () => store.getSnapshot().missionsStale, () => false);
|
|
8
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
9
|
+
const [error, setError] = useState(null);
|
|
10
|
+
const fetchMissions = useCallback(async () => {
|
|
11
|
+
try {
|
|
12
|
+
const m = await client.getMissions();
|
|
13
|
+
store.setMissions(m);
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
setError(err);
|
|
17
|
+
}
|
|
18
|
+
}, [client, store]);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
setIsLoading(true);
|
|
21
|
+
fetchMissions().finally(() => setIsLoading(false));
|
|
22
|
+
}, [fetchMissions]);
|
|
23
|
+
// Auto-refetch when missions are marked stale by SSE events.
|
|
24
|
+
// Guard against concurrent fetches to prevent cascading loops when
|
|
25
|
+
// rapid SSE events (mission:saved + mission:executed) toggle stale repeatedly.
|
|
26
|
+
const fetchingRef = useRef(false);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (missionsStale && !fetchingRef.current) {
|
|
29
|
+
fetchingRef.current = true;
|
|
30
|
+
fetchMissions().finally(() => { fetchingRef.current = false; });
|
|
31
|
+
}
|
|
32
|
+
}, [missionsStale, fetchMissions]);
|
|
33
|
+
const createMission = useCallback((req) => client.createMission(req), [client]);
|
|
34
|
+
const updateMission = useCallback((missionId, req) => client.updateMission(missionId, req), [client]);
|
|
35
|
+
const deleteMission = useCallback(async (missionId) => { await client.deleteMission(missionId); }, [client]);
|
|
36
|
+
const executeMission = useCallback((missionId) => client.executeMission(missionId), [client]);
|
|
37
|
+
const resumeMission = useCallback((missionId, opts) => client.resumeMission(missionId, opts), [client]);
|
|
38
|
+
const abortMission = useCallback((missionId) => client.abortMission(missionId), [client]);
|
|
39
|
+
return {
|
|
40
|
+
missions,
|
|
41
|
+
isLoading,
|
|
42
|
+
error,
|
|
43
|
+
createMission,
|
|
44
|
+
updateMission,
|
|
45
|
+
deleteMission,
|
|
46
|
+
executeMission,
|
|
47
|
+
resumeMission,
|
|
48
|
+
abortMission,
|
|
49
|
+
refetch: fetchMissions,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=use-missions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-missions.js","sourceRoot":"","sources":["../../src/hooks/use-missions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { NotificationRecord, NotificationStats, SendNotificationRequest, SendNotificationResult } from "@polpo-ai/client";
|
|
2
|
+
export interface UseNotificationsReturn {
|
|
3
|
+
notifications: NotificationRecord[];
|
|
4
|
+
stats: NotificationStats | null;
|
|
5
|
+
sendNotification: (req: SendNotificationRequest) => Promise<SendNotificationResult>;
|
|
6
|
+
refetch: () => void;
|
|
7
|
+
loading: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Hook for notification history, stats, and direct send.
|
|
11
|
+
*
|
|
12
|
+
* @param opts.limit - Max records to fetch (default 100)
|
|
13
|
+
* @param opts.status - Filter by status ("sent" | "failed")
|
|
14
|
+
* @param opts.channel - Filter by channel ID
|
|
15
|
+
*/
|
|
16
|
+
export declare function useNotifications(opts?: {
|
|
17
|
+
limit?: number;
|
|
18
|
+
status?: string;
|
|
19
|
+
channel?: string;
|
|
20
|
+
}): UseNotificationsReturn;
|
|
21
|
+
//# sourceMappingURL=use-notifications.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-notifications.d.ts","sourceRoot":"","sources":["../../src/hooks/use-notifications.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,CAAC,GAAG,EAAE,uBAAuB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACpF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,sBAAsB,CAqCzB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from "react";
|
|
2
|
+
import { usePolpo } from "./use-polpo.js";
|
|
3
|
+
/**
|
|
4
|
+
* Hook for notification history, stats, and direct send.
|
|
5
|
+
*
|
|
6
|
+
* @param opts.limit - Max records to fetch (default 100)
|
|
7
|
+
* @param opts.status - Filter by status ("sent" | "failed")
|
|
8
|
+
* @param opts.channel - Filter by channel ID
|
|
9
|
+
*/
|
|
10
|
+
export function useNotifications(opts) {
|
|
11
|
+
const { client } = usePolpo();
|
|
12
|
+
const [notifications, setNotifications] = useState([]);
|
|
13
|
+
const [stats, setStats] = useState(null);
|
|
14
|
+
const [loading, setLoading] = useState(true);
|
|
15
|
+
const refetch = useCallback(() => {
|
|
16
|
+
if (!client)
|
|
17
|
+
return;
|
|
18
|
+
setLoading(true);
|
|
19
|
+
Promise.all([
|
|
20
|
+
client.getNotifications(opts),
|
|
21
|
+
client.getNotificationStats(),
|
|
22
|
+
])
|
|
23
|
+
.then(([records, s]) => {
|
|
24
|
+
setNotifications(records);
|
|
25
|
+
setStats(s);
|
|
26
|
+
})
|
|
27
|
+
.catch(() => { })
|
|
28
|
+
.finally(() => setLoading(false));
|
|
29
|
+
}, [client, opts?.limit, opts?.status, opts?.channel]);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
refetch();
|
|
32
|
+
}, [refetch]);
|
|
33
|
+
const sendNotification = useCallback(async (req) => {
|
|
34
|
+
if (!client)
|
|
35
|
+
throw new Error("Client not initialized");
|
|
36
|
+
const result = await client.sendNotification(req);
|
|
37
|
+
// Refetch after send
|
|
38
|
+
refetch();
|
|
39
|
+
return result;
|
|
40
|
+
}, [client, refetch]);
|
|
41
|
+
return { notifications, stats, sendNotification, refetch, loading };
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=use-notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-notifications.js","sourceRoot":"","sources":["../../src/hooks/use-notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAgB1C;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAIhC;IACC,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC9B,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAuB,EAAE,CAAC,CAAC;IAC7E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAA2B,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC;YACV,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAC7B,MAAM,CAAC,oBAAoB,EAAE;SAC9B,CAAC;aACC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACrB,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC1B,QAAQ,CAAC,CAAC,CAAC,CAAC;QACd,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;aACf,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,gBAAgB,GAAG,WAAW,CAClC,KAAK,EAAE,GAA4B,EAAE,EAAE;QACrC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAClD,qBAAqB;QACrB,OAAO,EAAE,CAAC;QACV,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,CAAC,MAAM,EAAE,OAAO,CAAC,CAClB,CAAC;IAEF,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SkillInfo } from "@polpo-ai/client";
|
|
2
|
+
export interface UseOrchestratorSkillsReturn {
|
|
3
|
+
skills: SkillInfo[];
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
error: Error | null;
|
|
6
|
+
refetch: () => Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Fetch orchestrator skills from .polpo/.agent/skills/.
|
|
10
|
+
* Not reactive — discovered on demand.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useOrchestratorSkills(): UseOrchestratorSkillsReturn;
|
|
13
|
+
//# sourceMappingURL=use-orchestrator-skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-orchestrator-skills.d.ts","sourceRoot":"","sources":["../../src/hooks/use-orchestrator-skills.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,2BAA2B,CAsBnE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { usePolpoContext } from "../provider/polpo-context.js";
|
|
3
|
+
/**
|
|
4
|
+
* Fetch orchestrator skills from .polpo/.agent/skills/.
|
|
5
|
+
* Not reactive — discovered on demand.
|
|
6
|
+
*/
|
|
7
|
+
export function useOrchestratorSkills() {
|
|
8
|
+
const { client } = usePolpoContext();
|
|
9
|
+
const [skills, setSkills] = useState([]);
|
|
10
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
11
|
+
const [error, setError] = useState(null);
|
|
12
|
+
const fetch_ = useCallback(async () => {
|
|
13
|
+
try {
|
|
14
|
+
const data = await client.getOrchestratorSkills();
|
|
15
|
+
setSkills(data);
|
|
16
|
+
setError(null);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
setError(err);
|
|
20
|
+
}
|
|
21
|
+
}, [client]);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
setIsLoading(true);
|
|
24
|
+
fetch_().finally(() => setIsLoading(false));
|
|
25
|
+
}, [fetch_]);
|
|
26
|
+
return { skills, isLoading, error, refetch: fetch_ };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=use-orchestrator-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-orchestrator-skills.js","sourceRoot":"","sources":["../../src/hooks/use-orchestrator-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAU/D;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAc,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACpC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAClD,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAY,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { PlaybookInfo, PlaybookDefinition, PlaybookRunResult } from "@polpo-ai/client";
|
|
2
|
+
export interface UsePlaybooksReturn {
|
|
3
|
+
/** List of discovered playbooks (lightweight metadata). */
|
|
4
|
+
playbooks: PlaybookInfo[];
|
|
5
|
+
/** Loading state for the playbook list. */
|
|
6
|
+
loading: boolean;
|
|
7
|
+
/** Refresh the playbook list from the server. */
|
|
8
|
+
refetch: () => void;
|
|
9
|
+
/** Get the full definition (including mission body) for a playbook. */
|
|
10
|
+
getPlaybook: (name: string) => Promise<PlaybookDefinition>;
|
|
11
|
+
/** Run a playbook with parameters. */
|
|
12
|
+
runPlaybook: (name: string, params?: Record<string, string | number | boolean>) => Promise<PlaybookRunResult>;
|
|
13
|
+
/** @deprecated Use playbooks instead. */
|
|
14
|
+
templates: PlaybookInfo[];
|
|
15
|
+
/** @deprecated Use getPlaybook instead. */
|
|
16
|
+
getTemplate: (name: string) => Promise<PlaybookDefinition>;
|
|
17
|
+
/** @deprecated Use runPlaybook instead. */
|
|
18
|
+
runTemplate: (name: string, params?: Record<string, string | number | boolean>) => Promise<PlaybookRunResult>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Hook for listing, inspecting, and running playbooks.
|
|
22
|
+
*
|
|
23
|
+
* Playbooks are parameterized mission definitions discovered from disk.
|
|
24
|
+
* Running a playbook instantiates a Mission and executes it.
|
|
25
|
+
*/
|
|
26
|
+
export declare function usePlaybooks(): UsePlaybooksReturn;
|
|
27
|
+
/** @deprecated Use usePlaybooks instead. */
|
|
28
|
+
export declare const useTemplates: typeof usePlaybooks;
|
|
29
|
+
//# sourceMappingURL=use-playbooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-playbooks.d.ts","sourceRoot":"","sources":["../../src/hooks/use-playbooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,uEAAuE;IACvE,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC3D,sCAAsC;IACtC,WAAW,EAAE,CACX,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAC/C,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAGhC,yCAAyC;IACzC,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,2CAA2C;IAC3C,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC3D,2CAA2C;IAC3C,WAAW,EAAE,CACX,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAC/C,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,kBAAkB,CAgDjD;AAED,4CAA4C;AAC5C,eAAO,MAAM,YAAY,qBAAe,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from "react";
|
|
2
|
+
import { usePolpo } from "./use-polpo.js";
|
|
3
|
+
/**
|
|
4
|
+
* Hook for listing, inspecting, and running playbooks.
|
|
5
|
+
*
|
|
6
|
+
* Playbooks are parameterized mission definitions discovered from disk.
|
|
7
|
+
* Running a playbook instantiates a Mission and executes it.
|
|
8
|
+
*/
|
|
9
|
+
export function usePlaybooks() {
|
|
10
|
+
const { client } = usePolpo();
|
|
11
|
+
const [playbooks, setPlaybooks] = useState([]);
|
|
12
|
+
const [loading, setLoading] = useState(true);
|
|
13
|
+
const refetch = useCallback(() => {
|
|
14
|
+
if (!client)
|
|
15
|
+
return;
|
|
16
|
+
setLoading(true);
|
|
17
|
+
client
|
|
18
|
+
.getPlaybooks()
|
|
19
|
+
.then(setPlaybooks)
|
|
20
|
+
.catch(() => { })
|
|
21
|
+
.finally(() => setLoading(false));
|
|
22
|
+
}, [client]);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
refetch();
|
|
25
|
+
}, [refetch]);
|
|
26
|
+
const getPlaybook = useCallback(async (name) => {
|
|
27
|
+
if (!client)
|
|
28
|
+
throw new Error("Client not initialized");
|
|
29
|
+
return client.getPlaybook(name);
|
|
30
|
+
}, [client]);
|
|
31
|
+
const runPlaybook = useCallback(async (name, params) => {
|
|
32
|
+
if (!client)
|
|
33
|
+
throw new Error("Client not initialized");
|
|
34
|
+
const result = await client.runPlaybook(name, params);
|
|
35
|
+
// Refetch playbooks list in case discovery changed
|
|
36
|
+
refetch();
|
|
37
|
+
return result;
|
|
38
|
+
}, [client, refetch]);
|
|
39
|
+
return {
|
|
40
|
+
playbooks, loading, refetch, getPlaybook, runPlaybook,
|
|
41
|
+
// Backward-compat aliases
|
|
42
|
+
templates: playbooks,
|
|
43
|
+
getTemplate: getPlaybook,
|
|
44
|
+
runTemplate: runPlaybook,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** @deprecated Use usePlaybooks instead. */
|
|
48
|
+
export const useTemplates = usePlaybooks;
|
|
49
|
+
//# sourceMappingURL=use-playbooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-playbooks.js","sourceRoot":"","sources":["../../src/hooks/use-playbooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAkC1C;;;;;GAKG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC9B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAiB,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM;aACH,YAAY,EAAE;aACd,IAAI,CAAC,YAAY,CAAC;aAClB,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;aACf,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,WAAW,GAAG,WAAW,CAC7B,KAAK,EAAE,IAAY,EAAE,EAAE;QACrB,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAC7B,KAAK,EACH,IAAY,EACZ,MAAkD,EAClD,EAAE;QACF,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtD,mDAAmD;QACnD,OAAO,EAAE,CAAC;QACV,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,CAAC,MAAM,EAAE,OAAO,CAAC,CAClB,CAAC;IAEF,OAAO;QACL,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW;QACrD,0BAA0B;QAC1B,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,WAAW;KACzB,CAAC;AACJ,CAAC;AAED,4CAA4C;AAC5C,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PolpoClient } from "@polpo-ai/client";
|
|
2
|
+
import type { ConnectionStatus } from "@polpo-ai/client";
|
|
3
|
+
export interface UsePolpoReturn {
|
|
4
|
+
client: PolpoClient;
|
|
5
|
+
connectionStatus: ConnectionStatus;
|
|
6
|
+
}
|
|
7
|
+
export declare function usePolpo(): UsePolpoReturn;
|
|
8
|
+
//# sourceMappingURL=use-polpo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-polpo.d.ts","sourceRoot":"","sources":["../../src/hooks/use-polpo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,wBAAgB,QAAQ,IAAI,cAAc,CAUzC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { useSyncExternalStore } from "react";
|
|
2
|
+
import { usePolpoContext } from "../provider/polpo-context.js";
|
|
3
|
+
export function usePolpo() {
|
|
4
|
+
const { client, store } = usePolpoContext();
|
|
5
|
+
const connectionStatus = useSyncExternalStore(store.subscribe, () => store.getSnapshot().connectionStatus, () => store.getServerSnapshot().connectionStatus);
|
|
6
|
+
return { client, connectionStatus };
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=use-polpo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-polpo.js","sourceRoot":"","sources":["../../src/hooks/use-polpo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAS/D,MAAM,UAAU,QAAQ;IACtB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CAAC;IAE5C,MAAM,gBAAgB,GAAG,oBAAoB,CAC3C,KAAK,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,gBAAgB,EAC1C,GAAG,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,gBAAgB,CACjD,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AgentProcess } from "@polpo-ai/client";
|
|
2
|
+
export interface UseProcessesReturn {
|
|
3
|
+
processes: AgentProcess[];
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
error: Error | null;
|
|
6
|
+
refetch: () => Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare function useProcesses(): UseProcessesReturn;
|
|
9
|
+
//# sourceMappingURL=use-processes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-processes.d.ts","sourceRoot":"","sources":["../../src/hooks/use-processes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAgB,YAAY,IAAI,kBAAkB,CA2BjD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useSyncExternalStore, useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { usePolpoContext } from "../provider/polpo-context.js";
|
|
3
|
+
import { selectProcesses } from "@polpo-ai/client";
|
|
4
|
+
export function useProcesses() {
|
|
5
|
+
const { client, store } = usePolpoContext();
|
|
6
|
+
const processes = useSyncExternalStore(store.subscribe, () => selectProcesses(store.getSnapshot()), () => selectProcesses(store.getServerSnapshot()));
|
|
7
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
8
|
+
const [error, setError] = useState(null);
|
|
9
|
+
const refetch = useCallback(async () => {
|
|
10
|
+
try {
|
|
11
|
+
const p = await client.getProcesses();
|
|
12
|
+
store.setProcesses(p);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
setError(err);
|
|
16
|
+
}
|
|
17
|
+
}, [client, store]);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
setIsLoading(true);
|
|
20
|
+
refetch().finally(() => setIsLoading(false));
|
|
21
|
+
}, [refetch]);
|
|
22
|
+
return { processes, isLoading, error, refetch };
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=use-processes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-processes.js","sourceRoot":"","sources":["../../src/hooks/use-processes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAUnD,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CAAC;IAE5C,MAAM,SAAS,GAAG,oBAAoB,CACpC,KAAK,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAC1C,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CACjD,CAAC;IAEF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;YACtC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAY,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpB,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ScheduleEntry } from "@polpo-ai/client";
|
|
2
|
+
export interface UseSchedulesReturn {
|
|
3
|
+
schedules: ScheduleEntry[];
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
error: Error | null;
|
|
6
|
+
refetch: () => Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare function useSchedules(): UseSchedulesReturn;
|
|
9
|
+
//# sourceMappingURL=use-schedules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-schedules.d.ts","sourceRoot":"","sources":["../../src/hooks/use-schedules.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAID,wBAAgB,YAAY,IAAI,kBAAkB,CAgCjD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState, useRef } from "react";
|
|
2
|
+
import { usePolpoContext } from "../provider/polpo-context.js";
|
|
3
|
+
import { useEvents } from "./use-events.js";
|
|
4
|
+
const SCHEDULE_EVENTS = ["schedule:created", "schedule:triggered", "schedule:completed"];
|
|
5
|
+
export function useSchedules() {
|
|
6
|
+
const { client } = usePolpoContext();
|
|
7
|
+
const [schedules, setSchedules] = useState([]);
|
|
8
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
9
|
+
const [error, setError] = useState(null);
|
|
10
|
+
const fetchSchedules = useCallback(async () => {
|
|
11
|
+
try {
|
|
12
|
+
const data = await client.getSchedules();
|
|
13
|
+
setSchedules(data);
|
|
14
|
+
setError(null);
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
setError(err);
|
|
18
|
+
}
|
|
19
|
+
}, [client]);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
setIsLoading(true);
|
|
22
|
+
fetchSchedules().finally(() => setIsLoading(false));
|
|
23
|
+
}, [fetchSchedules]);
|
|
24
|
+
// Auto-refetch on schedule SSE events
|
|
25
|
+
const { events } = useEvents(SCHEDULE_EVENTS);
|
|
26
|
+
const prevCountRef = useRef(events.length);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (events.length !== prevCountRef.current) {
|
|
29
|
+
prevCountRef.current = events.length;
|
|
30
|
+
fetchSchedules();
|
|
31
|
+
}
|
|
32
|
+
}, [events.length, fetchSchedules]);
|
|
33
|
+
return { schedules, isLoading, error, refetch: fetchSchedules };
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=use-schedules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-schedules.js","sourceRoot":"","sources":["../../src/hooks/use-schedules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAU5C,MAAM,eAAe,GAAG,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;AAEzF,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAkB,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;YACzC,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAY,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,cAAc,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,sCAAsC;IACtC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;YAC3C,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;YACrC,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAEpC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ChatSession, ChatMessage } from "@polpo-ai/client";
|
|
2
|
+
export interface UseSessionsReturn {
|
|
3
|
+
sessions: ChatSession[];
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
error: Error | null;
|
|
6
|
+
activeSessionId: string | null;
|
|
7
|
+
setActiveSessionId: (id: string | null) => void;
|
|
8
|
+
getMessages: (sessionId: string) => Promise<ChatMessage[]>;
|
|
9
|
+
renameSession: (sessionId: string, title: string) => Promise<void>;
|
|
10
|
+
deleteSession: (sessionId: string) => Promise<void>;
|
|
11
|
+
refetch: () => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export declare function useSessions(): UseSessionsReturn;
|
|
14
|
+
//# sourceMappingURL=use-sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-sessions.d.ts","sourceRoot":"","sources":["../../src/hooks/use-sessions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAgB,WAAW,IAAI,iBAAiB,CA8D/C"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { usePolpoContext } from "../provider/polpo-context.js";
|
|
3
|
+
export function useSessions() {
|
|
4
|
+
const { client } = usePolpoContext();
|
|
5
|
+
const [sessions, setSessions] = useState([]);
|
|
6
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
7
|
+
const [error, setError] = useState(null);
|
|
8
|
+
const [activeSessionId, setActiveSessionId] = useState(null);
|
|
9
|
+
const refetch = useCallback(async () => {
|
|
10
|
+
try {
|
|
11
|
+
const data = await client.getSessions();
|
|
12
|
+
setSessions(data.sessions);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
setError(err);
|
|
16
|
+
}
|
|
17
|
+
}, [client]);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
setIsLoading(true);
|
|
20
|
+
refetch().finally(() => setIsLoading(false));
|
|
21
|
+
}, [refetch]);
|
|
22
|
+
const getMessages = useCallback(async (sessionId) => {
|
|
23
|
+
const data = await client.getSessionMessages(sessionId);
|
|
24
|
+
return data.messages;
|
|
25
|
+
}, [client]);
|
|
26
|
+
const renameSession = useCallback(async (sessionId, title) => {
|
|
27
|
+
await client.renameSession(sessionId, title);
|
|
28
|
+
setSessions((prev) => prev.map((s) => (s.id === sessionId ? { ...s, title } : s)));
|
|
29
|
+
}, [client]);
|
|
30
|
+
const deleteSession = useCallback(async (sessionId) => {
|
|
31
|
+
await client.deleteSession(sessionId);
|
|
32
|
+
setSessions((prev) => prev.filter((s) => s.id !== sessionId));
|
|
33
|
+
if (activeSessionId === sessionId) {
|
|
34
|
+
setActiveSessionId(null);
|
|
35
|
+
}
|
|
36
|
+
}, [client, activeSessionId]);
|
|
37
|
+
return {
|
|
38
|
+
sessions,
|
|
39
|
+
isLoading,
|
|
40
|
+
error,
|
|
41
|
+
activeSessionId,
|
|
42
|
+
setActiveSessionId,
|
|
43
|
+
getMessages,
|
|
44
|
+
renameSession,
|
|
45
|
+
deleteSession,
|
|
46
|
+
refetch,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=use-sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-sessions.js","sourceRoot":"","sources":["../../src/hooks/use-sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAe/D,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IAErC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YACxC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAY,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,WAAW,GAAG,WAAW,CAC7B,KAAK,EAAE,SAAiB,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,KAAK,EAAE,SAAiB,EAAE,KAAa,EAAE,EAAE;QACzC,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7C,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CACnB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5D,CAAC;IACJ,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,KAAK,EAAE,SAAiB,EAAE,EAAE;QAC1B,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACtC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC;QAC9D,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,eAAe,CAAC,CAC1B,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,SAAS;QACT,KAAK;QACL,eAAe;QACf,kBAAkB;QAClB,WAAW;QACX,aAAa;QACb,aAAa;QACb,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SkillWithAssignment } from "@polpo-ai/client";
|
|
2
|
+
export interface UseSkillsReturn {
|
|
3
|
+
skills: SkillWithAssignment[];
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
error: Error | null;
|
|
6
|
+
refetch: () => Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Fetch available project-level skills with agent assignment info.
|
|
10
|
+
* Skills are not reactive (no SSE updates) — they're discovered on demand.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useSkills(): UseSkillsReturn;
|
|
13
|
+
//# sourceMappingURL=use-skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-skills.d.ts","sourceRoot":"","sources":["../../src/hooks/use-skills.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,eAAe,CAsB3C"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { usePolpoContext } from "../provider/polpo-context.js";
|
|
3
|
+
/**
|
|
4
|
+
* Fetch available project-level skills with agent assignment info.
|
|
5
|
+
* Skills are not reactive (no SSE updates) — they're discovered on demand.
|
|
6
|
+
*/
|
|
7
|
+
export function useSkills() {
|
|
8
|
+
const { client } = usePolpoContext();
|
|
9
|
+
const [skills, setSkills] = useState([]);
|
|
10
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
11
|
+
const [error, setError] = useState(null);
|
|
12
|
+
const fetch_ = useCallback(async () => {
|
|
13
|
+
try {
|
|
14
|
+
const data = await client.getSkills();
|
|
15
|
+
setSkills(data);
|
|
16
|
+
setError(null);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
setError(err);
|
|
20
|
+
}
|
|
21
|
+
}, [client]);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
setIsLoading(true);
|
|
24
|
+
fetch_().finally(() => setIsLoading(false));
|
|
25
|
+
}, [fetch_]);
|
|
26
|
+
return { skills, isLoading, error, refetch: fetch_ };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=use-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-skills.js","sourceRoot":"","sources":["../../src/hooks/use-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAU/D;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAwB,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACpC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YACtC,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAY,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns a stable reference for a value by doing a shallow comparison.
|
|
3
|
+
* Prevents hooks from re-subscribing when filter objects are recreated inline.
|
|
4
|
+
*/
|
|
5
|
+
export declare function useStableValue<T>(value: T): T;
|
|
6
|
+
//# sourceMappingURL=use-stable-value.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-stable-value.d.ts","sourceRoot":"","sources":["../../src/hooks/use-stable-value.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAM7C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Returns a stable reference for a value by doing a shallow comparison.
|
|
4
|
+
* Prevents hooks from re-subscribing when filter objects are recreated inline.
|
|
5
|
+
*/
|
|
6
|
+
export function useStableValue(value) {
|
|
7
|
+
const ref = useRef(value);
|
|
8
|
+
if (!shallowEqual(ref.current, value)) {
|
|
9
|
+
ref.current = value;
|
|
10
|
+
}
|
|
11
|
+
return ref.current;
|
|
12
|
+
}
|
|
13
|
+
function shallowEqual(a, b) {
|
|
14
|
+
if (Object.is(a, b))
|
|
15
|
+
return true;
|
|
16
|
+
if (typeof a !== "object" || typeof b !== "object" || a === null || b === null) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
const keysA = Object.keys(a);
|
|
20
|
+
const keysB = Object.keys(b);
|
|
21
|
+
if (keysA.length !== keysB.length)
|
|
22
|
+
return false;
|
|
23
|
+
for (const key of keysA) {
|
|
24
|
+
if (!Object.is(a[key], b[key])) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=use-stable-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-stable-value.js","sourceRoot":"","sources":["../../src/hooks/use-stable-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAI,KAAQ;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QACtC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,CAAU,EAAE,CAAU;IAC1C,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAE,CAA6B,CAAC,GAAG,CAAC,EAAG,CAA6B,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACzF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-stats.d.ts","sourceRoot":"","sources":["../../src/hooks/use-stats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,wBAAgB,QAAQ,IAAI,UAAU,GAAG,IAAI,CAQ5C"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { useSyncExternalStore } from "react";
|
|
2
|
+
import { usePolpoContext } from "../provider/polpo-context.js";
|
|
3
|
+
export function useStats() {
|
|
4
|
+
const { store } = usePolpoContext();
|
|
5
|
+
return useSyncExternalStore(store.subscribe, () => store.getSnapshot().stats, () => null);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=use-stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-stats.js","sourceRoot":"","sources":["../../src/hooks/use-stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,MAAM,UAAU,QAAQ;IACtB,MAAM,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CAAC;IAEpC,OAAO,oBAAoB,CACzB,KAAK,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,EAC/B,GAAG,EAAE,CAAC,IAAI,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { RunActivityEntry } from "@polpo-ai/client";
|
|
2
|
+
export interface UseTaskActivityReturn {
|
|
3
|
+
entries: RunActivityEntry[];
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
error: Error | null;
|
|
6
|
+
refetch: () => Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Fetch the full activity history for a task from its run JSONL log.
|
|
10
|
+
* Pass `null` to skip fetching (e.g. when no task is selected).
|
|
11
|
+
*
|
|
12
|
+
* When `pollIntervalMs` is set and > 0, the hook will automatically
|
|
13
|
+
* re-fetch on that interval (useful for live-tailing running tasks).
|
|
14
|
+
*
|
|
15
|
+
* The hook avoids unnecessary re-renders by comparing new data against
|
|
16
|
+
* the current entries (length + last timestamp) before updating state.
|
|
17
|
+
*/
|
|
18
|
+
export declare function useTaskActivity(taskId: string | null, options?: {
|
|
19
|
+
pollIntervalMs?: number;
|
|
20
|
+
}): UseTaskActivityReturn;
|
|
21
|
+
//# sourceMappingURL=use-task-activity.d.ts.map
|