@mndrk/agx 2.4.3 → 2.4.4
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/cloud-runtime/standalone/apps/local/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/apps/local/.next/build-manifest.json +2 -2
- package/cloud-runtime/standalone/apps/local/.next/prerender-manifest.json +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/auth/route.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/auth/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/callback/route.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/callback/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/groups/route.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/groups/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/activity/route.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/activity/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/recap/route.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/recap/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/route.js +4 -4
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/route.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/mcp-setup/route.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/mcp-setup/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/options/route.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/options/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/[id]/route.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/route.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/scripted/route.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/scripted/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/status/route.js +4 -4
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token/route.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token-receive/route.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token-receive/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/worker/route.js +6 -6
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/worker/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/connections/route.js +7 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/connections/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0fbbaf2d._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__10a90219._.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__2ab23e45._.js → [root-of-the-server]__2eb13697._.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__3a038592._.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__498d8b2d._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__68b692c4._.js +9 -9
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__7fcbb0c2._.js +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__ba72d342._.js +5 -5
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_1a4cb196._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_5e5f36c4._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_9f0fd451._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_e1f4d9ad._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_f8b3abae._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_orchestrator_chat-processor_ts_46384f36._.js +12 -12
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__b8484b0e._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_5eebb5cb._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_projects_ProjectObjectivesWorkspace_tsx_751ab3d3._.js +7 -7
- package/cloud-runtime/standalone/apps/local/.next/server/middleware-manifest.json +5 -5
- package/cloud-runtime/standalone/apps/local/.next/server/pages/404.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/pages/500.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/7148feb61274d431.css +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/8b91e7692a899f00.js +20 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{6c278ae4535b6d5c.js → 9e2208153f276f8c.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/d590384ce3045a12.js +5 -0
- package/cloud-runtime/standalone/apps/local/app/api/trackers/connections/route.ts +46 -2
- package/cloud-runtime/standalone/apps/local/app/projects/[slug]/tracking/connect/page.tsx +41 -11
- package/cloud-runtime/standalone/apps/local/components/projects/ProjectObjectivesWorkspace.tsx +204 -49
- package/cloud-runtime/standalone/apps/local/hooks/useTrackerConnections.ts +29 -1
- package/cloud-runtime/standalone/apps/local/lib/agent-process-registry.ts +8 -2
- package/cloud-runtime/standalone/apps/local/lib/tracker/connections.ts +46 -15
- package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/objective-worker.ts +7 -0
- package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/task-worker.ts +7 -0
- package/cloud-runtime/standalone/apps/local/worker/index.js +7 -2
- package/package.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__847236fb._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_80b34b78._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/cecf3e8c47c785f5.js +0 -5
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/e72724fd8225ec39.js +0 -20
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/f6d31036588ddfe4.css +0 -1
- /package/cloud-runtime/standalone/apps/local/.next/static/{4MnUE2NHztybGBWFbcBo5 → 3-6VaSnGGXdV-2eV44RDK}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{4MnUE2NHztybGBWFbcBo5 → 3-6VaSnGGXdV-2eV44RDK}/_clientMiddlewareManifest.json +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{4MnUE2NHztybGBWFbcBo5 → 3-6VaSnGGXdV-2eV44RDK}/_ssgManifest.js +0 -0
|
@@ -18,50 +18,81 @@ function ensureDir(filePath: string): void {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
if (!projectId) return [];
|
|
21
|
+
function readConnectionsFile(projectId: string): { connections: TrackerConnection[]; defaultTracker?: string } {
|
|
22
|
+
if (!projectId) return { connections: [] };
|
|
23
23
|
const filePath = getConnectionsPath(projectId);
|
|
24
24
|
try {
|
|
25
25
|
const raw = readFileSync(filePath, "utf8");
|
|
26
26
|
const data = JSON.parse(raw);
|
|
27
|
-
return
|
|
27
|
+
return {
|
|
28
|
+
connections: Array.isArray(data.connections) ? data.connections : [],
|
|
29
|
+
defaultTracker: typeof data.defaultTracker === "string" ? data.defaultTracker : undefined,
|
|
30
|
+
};
|
|
28
31
|
} catch {
|
|
29
|
-
return [];
|
|
32
|
+
return { connections: [] };
|
|
30
33
|
}
|
|
31
34
|
}
|
|
32
35
|
|
|
36
|
+
function writeConnectionsFile(
|
|
37
|
+
projectId: string,
|
|
38
|
+
connections: TrackerConnection[],
|
|
39
|
+
defaultTracker: string | undefined
|
|
40
|
+
): void {
|
|
41
|
+
const filePath = getConnectionsPath(projectId);
|
|
42
|
+
ensureDir(filePath);
|
|
43
|
+
const payload: { connections: TrackerConnection[]; defaultTracker?: string } = { connections };
|
|
44
|
+
if (defaultTracker) payload.defaultTracker = defaultTracker;
|
|
45
|
+
writeFileSync(filePath, JSON.stringify(payload, null, 2), "utf8");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function listTrackerConnections(projectId: string): TrackerConnection[] {
|
|
49
|
+
return readConnectionsFile(projectId).connections;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function getDefaultTrackerType(projectId: string): string | null {
|
|
53
|
+
const data = readConnectionsFile(projectId);
|
|
54
|
+
const typeExists = (t: string) => data.connections.some((c) => c.type === t);
|
|
55
|
+
if (data.defaultTracker && typeExists(data.defaultTracker)) return data.defaultTracker;
|
|
56
|
+
// Fall back to the only connected tracker, if exactly one is configured.
|
|
57
|
+
return data.connections.length === 1 ? data.connections[0].type : null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function setDefaultTrackerType(projectId: string, trackerType: string | null): void {
|
|
61
|
+
if (!projectId) return;
|
|
62
|
+
const data = readConnectionsFile(projectId);
|
|
63
|
+
const next = trackerType && data.connections.some((c) => c.type === trackerType) ? trackerType : undefined;
|
|
64
|
+
writeConnectionsFile(projectId, data.connections, next);
|
|
65
|
+
}
|
|
66
|
+
|
|
33
67
|
export function addTrackerConnection(
|
|
34
68
|
projectId: string,
|
|
35
69
|
connection: TrackerConnection
|
|
36
70
|
): void {
|
|
37
71
|
if (!projectId) return;
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
const connections = listTrackerConnections(projectId);
|
|
41
|
-
// Prevent duplicates — update existing connection of same type
|
|
72
|
+
const data = readConnectionsFile(projectId);
|
|
73
|
+
const connections = data.connections.slice();
|
|
42
74
|
const existing = connections.findIndex((c) => c.type === connection.type);
|
|
43
75
|
if (existing >= 0) {
|
|
44
76
|
connections[existing] = connection;
|
|
45
77
|
} else {
|
|
46
78
|
connections.push(connection);
|
|
47
79
|
}
|
|
48
|
-
|
|
80
|
+
writeConnectionsFile(projectId, connections, data.defaultTracker);
|
|
49
81
|
}
|
|
50
82
|
|
|
51
83
|
export function removeTrackerConnection(projectId: string, trackerType: string): void {
|
|
52
84
|
if (!projectId) return;
|
|
53
|
-
const
|
|
54
|
-
const connections =
|
|
55
|
-
|
|
56
|
-
);
|
|
85
|
+
const data = readConnectionsFile(projectId);
|
|
86
|
+
const connections = data.connections.filter((c) => c.type !== trackerType);
|
|
87
|
+
const nextDefault = data.defaultTracker === trackerType ? undefined : data.defaultTracker;
|
|
57
88
|
if (connections.length === 0) {
|
|
89
|
+
const filePath = getConnectionsPath(projectId);
|
|
58
90
|
try {
|
|
59
91
|
unlinkSync(filePath);
|
|
60
92
|
} catch {
|
|
61
93
|
// already gone
|
|
62
94
|
}
|
|
63
95
|
} else {
|
|
64
|
-
|
|
65
|
-
writeFileSync(filePath, JSON.stringify({ connections }, null, 2), "utf8");
|
|
96
|
+
writeConnectionsFile(projectId, connections, nextDefault);
|
|
66
97
|
}
|
|
67
98
|
}
|
|
@@ -379,6 +379,13 @@ export async function executeObjectiveWorker(opts: {
|
|
|
379
379
|
? (parsed.decision as string).trim().toLowerCase()
|
|
380
380
|
: '';
|
|
381
381
|
const action = rawAction === 'work' ? 'work_ticket' : rawAction;
|
|
382
|
+
if (!action) {
|
|
383
|
+
const raw = controllerResult.output ?? '';
|
|
384
|
+
console.warn(
|
|
385
|
+
`[objective-worker] empty action from controller (job=${opts.job.id}, outputLen=${raw.length}, parsed=${parsed ? 'object' : 'null'}):`,
|
|
386
|
+
raw.slice(0, 500),
|
|
387
|
+
);
|
|
388
|
+
}
|
|
382
389
|
const reason = typeof parsed?.reason === 'string' ? parsed.reason.trim() : '';
|
|
383
390
|
const objectiveProgress = normalizeAssessmentProgress(parsed?.objectiveProgress);
|
|
384
391
|
const objectiveStatus = normalizeAssessmentStatus(parsed?.objectiveStatus);
|
|
@@ -336,6 +336,13 @@ export async function executeTaskWorker(opts: {
|
|
|
336
336
|
? (parsed.decision as string).trim().toLowerCase()
|
|
337
337
|
: '';
|
|
338
338
|
const action = rawAction === 'work' ? 'work_ticket' : rawAction;
|
|
339
|
+
if (!action) {
|
|
340
|
+
const raw = controllerResult.output ?? '';
|
|
341
|
+
console.warn(
|
|
342
|
+
`[task-worker] empty action from controller (job=${opts.job.id}, outputLen=${raw.length}, parsed=${parsed ? 'object' : 'null'}):`,
|
|
343
|
+
raw.slice(0, 500),
|
|
344
|
+
);
|
|
345
|
+
}
|
|
339
346
|
const reason = typeof parsed?.reason === 'string' ? parsed.reason.trim() : '';
|
|
340
347
|
|
|
341
348
|
// Phase 4: Act - dispatch action
|
|
@@ -2633,6 +2633,7 @@ function createAdminDbClient() {
|
|
|
2633
2633
|
}
|
|
2634
2634
|
var init_db_adapter = __esm({
|
|
2635
2635
|
"apps/local/lib/db-adapter.ts"() {
|
|
2636
|
+
"use strict";
|
|
2636
2637
|
init_auth_mode();
|
|
2637
2638
|
}
|
|
2638
2639
|
});
|
|
@@ -11198,8 +11199,13 @@ function getDb2() {
|
|
|
11198
11199
|
const hasOldTable = db2.prepare(
|
|
11199
11200
|
"SELECT name FROM sqlite_master WHERE type='table' AND name='linear_runs'"
|
|
11200
11201
|
).get();
|
|
11201
|
-
|
|
11202
|
+
const hasNewTable = db2.prepare(
|
|
11203
|
+
"SELECT name FROM sqlite_master WHERE type='table' AND name='tracker_runs'"
|
|
11204
|
+
).get();
|
|
11205
|
+
if (hasOldTable && !hasNewTable) {
|
|
11202
11206
|
db2.exec("ALTER TABLE linear_runs RENAME TO tracker_runs");
|
|
11207
|
+
} else if (hasOldTable && hasNewTable) {
|
|
11208
|
+
db2.exec("DROP TABLE linear_runs");
|
|
11203
11209
|
}
|
|
11204
11210
|
db2.exec(`
|
|
11205
11211
|
CREATE TABLE IF NOT EXISTS tracker_runs (
|
|
@@ -24120,7 +24126,6 @@ function parseNaturalSchedule(input) {
|
|
|
24120
24126
|
var PATTERNS;
|
|
24121
24127
|
var init_nl_schedule = __esm({
|
|
24122
24128
|
"apps/local/src/graph/nl-schedule.ts"() {
|
|
24123
|
-
"use strict";
|
|
24124
24129
|
PATTERNS = [
|
|
24125
24130
|
// "every N seconds" → intervalMs only (sub-minute)
|
|
24126
24131
|
{
|
package/package.json
CHANGED
package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__847236fb._.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},712513,(e,t,r)=>{},242617,e=>{"use strict";e.i(712513);var t=e.i(902157),r=e.i(660526),n=e.i(750227);let a=n.default.join((0,r.homedir)(),".agx");function o(e){return n.default.join(a,"projects",e,"integrations","trackers.json")}function s(e){let r=n.default.dirname(e);(0,t.existsSync)(r)||(0,t.mkdirSync)(r,{recursive:!0})}function i(e){if(!e)return[];let r=o(e);try{let e=(0,t.readFileSync)(r,"utf8"),n=JSON.parse(e);return Array.isArray(n.connections)?n.connections:[]}catch{return[]}}function l(e,r){if(!e)return;let n=o(e);s(n);let a=i(e),l=a.findIndex(e=>e.type===r.type);l>=0?a[l]=r:a.push(r),(0,t.writeFileSync)(n,JSON.stringify({connections:a},null,2),"utf8")}function c(e,r){if(!e)return;let n=o(e),a=i(e).filter(e=>e.type!==r);if(0===a.length)try{(0,t.unlinkSync)(n)}catch{}else s(n),(0,t.writeFileSync)(n,JSON.stringify({connections:a},null,2),"utf8")}e.s(["addTrackerConnection",()=>l,"listTrackerConnections",()=>i,"removeTrackerConnection",()=>c])},88007,e=>{"use strict";let t=new Map;function r(e){if(t.has(e.type))throw Error(`Tracker adapter "${e.type}" is already registered`);t.set(e.type,e)}function n(e){let r=t.get(e);if(!r)throw Error(`Unknown tracker type: "${e}". Available: ${o().join(", ")}`);return r}function a(e){return t.get(e)??null}function o(){return[...t.keys()]}function s(){return[...t.values()]}e.s(["getAdapter",()=>n,"getAdapterOrNull",()=>a,"listAdapterTypes",()=>o,"listAdapters",()=>s,"registerAdapter",()=>r])},207333,e=>{"use strict";var t=e.i(692988),r=e.i(635595),n=e.i(75473),a=e.i(923435),o=e.i(418475),s=e.i(303482),i=e.i(976287),l=e.i(774462),c=e.i(111998),d=e.i(201516),u=e.i(68877),p=e.i(259460),h=e.i(257714),f=e.i(502073),x=e.i(187345),y=e.i(193695);e.i(293777);var g=e.i(274321),R=e.i(732470),v=e.i(242617),m=e.i(88007);async function w(e){let t=e.nextUrl.searchParams.get("projectId")?.trim();if(!t)return R.NextResponse.json({error:"projectId required"},{status:400});let r=(0,v.listTrackerConnections)(t),n=new Set(r.map(e=>e.type)),a=(0,m.listAdapters)();await Promise.all(a.filter(e=>!n.has(e.type)).map(async e=>{try{(await e.getStatus(t)).connected&&((0,v.addTrackerConnection)(t,{type:e.type,connectedAt:new Date().toISOString()}),r.push({type:e.type,connectedAt:new Date().toISOString()}))}catch{}}));let o=await Promise.all(r.map(async e=>{let r=(0,m.getAdapterOrNull)(e.type);if(!r)return{...e,connected:!1};try{let n=await r.getStatus(t);return{...e,connected:n.connected,user:n.user}}catch{return{...e,connected:!1}}}));return R.NextResponse.json({connections:o})}async function E(e){let t=await e.json().catch(()=>({})),r=t.projectId?.trim(),n=t.type?.trim();return r&&n?(0,m.getAdapterOrNull)(n)?((0,v.addTrackerConnection)(r,{type:n,connectedAt:new Date().toISOString()}),R.NextResponse.json({ok:!0,type:n})):R.NextResponse.json({error:`Unknown tracker type: ${n}`},{status:400}):R.NextResponse.json({error:"projectId and type required"},{status:400})}async function k(e){let t=await e.json().catch(()=>({})),r=t.projectId?.trim(),n=t.type?.trim();return r&&n?((0,v.removeTrackerConnection)(r,n),R.NextResponse.json({ok:!0})):R.NextResponse.json({error:"projectId and type required"},{status:400})}e.s(["DELETE",()=>k,"GET",()=>w,"POST",()=>E,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],143686);var A=e.i(143686);let C=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/trackers/connections/route",pathname:"/api/trackers/connections",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/local/app/api/trackers/connections/route.ts",nextConfigOutput:"standalone",userland:A}),{workAsyncStorage:j,workUnitAsyncStorage:S,serverHooks:N}=C;function T(){return(0,n.patchFetch)({workAsyncStorage:j,workUnitAsyncStorage:S})}async function O(e,t,n){C.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let R="/api/trackers/connections/route";R=R.replace(/\/index$/,"")||"/";let v=await C.prepare(e,t,{srcPage:R,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:m,params:w,nextConfig:E,parsedUrl:k,isDraftMode:A,prerenderManifest:j,routerServerContext:S,isOnDemandRevalidate:N,revalidateOnlyGenerated:T,resolvedPathname:O,clientReferenceManifest:b,serverActionsManifest:P}=v,q=(0,i.normalizeAppPath)(R),I=!!(j.dynamicRoutes[q]||j.routes[O]),_=async()=>((null==S?void 0:S.render404)?await S.render404(e,t,k,!1):t.end("This page could not be found"),null);if(I&&!A){let e=!!j.routes[O],t=j.dynamicRoutes[q];if(t&&!1===t.fallback&&!e){if(E.experimental.adapterPath)return await _();throw new y.NoFallbackError}}let U=null;!I||C.isDev||A||(U="/index"===(U=O)?"/":U);let D=!0===C.isDev||!I,H=I&&!D;P&&b&&(0,s.setManifestsSingleton)({page:R,clientReferenceManifest:b,serverActionsManifest:P});let M=e.method||"GET",$=(0,o.getTracer)(),F=$.getActiveScopeSpan(),K={params:w,prerenderManifest:j,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:D,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:E.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>C.onRequestError(e,t,n,a,S)},sharedContext:{buildId:m}},L=new l.NodeNextRequest(e),B=new l.NodeNextResponse(t),G=c.NextRequestAdapter.fromNodeNextRequest(L,(0,c.signalFromNodeResponse)(t));try{let s=async e=>C.handle(G,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${M} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${M} ${R}`)}),i=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var o,l;let c=async({previousCacheEntry:r})=>{try{if(!i&&N&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await s(a);e.fetchMetrics=K.renderOpts.fetchMetrics;let l=K.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let c=K.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(L,B,o,K.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(o.headers);c&&(t[x.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=x.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,n=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=x.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await C.onRequestError(e,t,{routerKind:"App Router",routePath:R,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:N})},!1,S),t}},d=await C.handleResponse({req:e,nextConfig:E,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:j,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:T,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:i});if(!I)return null;if((null==d||null==(o=d.value)?void 0:o.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(l=d.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});i||t.setHeader("x-nextjs-cache",N?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let y=(0,h.fromNodeOutgoingHttpHeaders)(d.value.headers);return i&&I||y.delete(x.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||y.get("Cache-Control")||y.set("Cache-Control",(0,f.getCacheControlHeader)(d.cacheControl)),await (0,p.sendResponse)(L,B,new Response(d.value.body,{headers:y,status:d.value.status||200})),null};F?await l(F):await $.withPropagatedContext(e.headers,()=>$.trace(d.BaseServerSpan.handleRequest,{spanName:`${M} ${R}`,kind:o.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},l))}catch(t){if(t instanceof y.NoFallbackError||await C.onRequestError(e,t,{routerKind:"App Router",routePath:q,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:N})},!1,S),I)throw t;return await (0,p.sendResponse)(L,B,new Response(null,{status:500})),null}}e.s(["handler",()=>O,"patchFetch",()=>T,"routeModule",()=>C,"serverHooks",()=>N,"workAsyncStorage",()=>j,"workUnitAsyncStorage",()=>S],207333)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__847236fb._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[615501,(e,t,a)=>{"use strict";t.exports=e.r(185615).vendored["react-rsc"].ReactJsxRuntime},698134,e=>{"use strict";var t=e.i(88007),a=e.i(581001),r=e.i(404258),s=e.i(615501);function i({className:e}){return(0,s.jsx)("svg",{className:e,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,s.jsx)("path",{d:"M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z"})})}function n(e){let t=e.trim().toLowerCase();return["done","completed","closed"].includes(t)?"done":["cancelled","canceled","duplicate"].includes(t)?"cancelled":["in progress","in review","started","testing","deployed","in deployment"].includes(t)?"in_progress":"todo"}async function o(e,t){throw Error("Linear OAuth callback must be handled by the route handler")}async function l(e){let t=(0,a.getLinearClient)(e);if(!t)return{connected:!1};try{let e=await t.viewer;return{connected:!0,user:{id:e.id,name:e.name,avatarUrl:void 0}}}catch{return{connected:!1}}}async function c(t){let{deleteProjectTicketToken:a}=await e.A(836400);a(t,"linear")}function u(e){return{id:e.id,name:e.name??`Cycle ${e.number}`,type:"cycle"}}e.i(78362);var d=e.i(754493),p=e.i(607495);function y({className:e}){return(0,s.jsx)("svg",{className:e,viewBox:"0 0 100 100",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,s.jsx)("path",{d:"M94.6 12.2c-1.4-1.6-3.4-2.5-5.6-2.5H10.8c-2.1 0-4.1.9-5.6 2.5C3.8 13.8 3 15.8 3 17.9v64.2c0 2.1.8 4.1 2.2 5.7 1.5 1.6 3.5 2.5 5.6 2.5h78.2c2.2 0 4.2-.9 5.6-2.5 1.5-1.6 2.2-3.6 2.2-5.7V17.9c.1-2.1-.6-4.1-2.2-5.7zM50 72.4L27.6 50 50 27.6 72.4 50 50 72.4z"})})}e.i(242617);let g=new class{type="linear";displayName="Linear";groupLabel="Cycle";icon=i;getAuthUrl(e){let t;return t=new URL((0,r.getConfiguredAppBaseUrl)()).port||"41741",`https://www.runagx.com/integrations/linear/auth?port=${t}`}async handleCallback(e,t){return o(e,t)}async getStatus(e){return l(e)}async disconnect(e){return c(e)}async listItems(t,a){let{ensureLinearIssueCache:r,listLinearIssueSummaries:s}=await e.A(58723),{getIssueActivityMap:i}=await e.A(138720),n=!a.cursor;await r({projectId:t,refresh:n});let o=a.hasActivity?await i(t):void 0,{listCachedTrackerItems:l}=await e.A(410437),c=await l({trackerType:"linear",search:a.search,statuses:a.statuses,statusCategories:a.statusCategories,assigneeIds:a.assigneeIds,groupIds:a.groupIds,cursor:a.cursor,limit:a.limit,sortBy:a.sortBy??"activity",sortDir:a.sortDir,hasActivity:a.hasActivity,activityMap:o});return{items:c.issues.map(e=>({id:e.id,trackerId:e.trackerId||`linear:${e.teamId??"default"}`,trackerType:"linear",identifier:e.identifier,title:e.title,description:e.description??void 0,status:e.status,statusCategory:e.statusCategory,assignee:e.assignee?{id:e.assigneeId??e.assignee,name:e.assignee,avatarUrl:void 0}:void 0,priority:void 0,labels:e.labels??[],createdAt:e.pulledAt,updatedAt:e.updatedAt,url:e.url??`https://linear.app/issue/${e.identifier}`})),pageInfo:c.pageInfo}}async getItem(t,a){let{getCachedTrackerItemContexts:r}=await e.A(410437),s=(await r([a]))[0];if(!s)throw Error(`Item ${a} not found`);return{id:s.id,trackerId:s.trackerId||`linear:${s.teamId??"default"}`,trackerType:"linear",identifier:s.identifier,title:s.title,description:s.description??void 0,status:s.status,statusCategory:s.statusCategory,assignee:s.assignee?{id:s.assigneeId??s.assignee,name:s.assignee,avatarUrl:void 0}:void 0,labels:s.labels??[],createdAt:s.pulledAt,updatedAt:s.updatedAt,url:s.url??`https://linear.app/issue/${s.identifier}`,comments:[],activity:[],metadata:{teamId:s.teamId,teamName:s.teamName,teamKey:s.teamKey,cycleId:s.cycleId,cycleName:s.cycleName,cycleNumber:s.cycleNumber,isAssignedToMe:s.isAssignedToMe}}}async updateItem(t,r,s){let i=(0,a.getLinearClient)(t);if(!i)throw Error("Not connected to Linear");if(s.status){let t=await i.updateIssueStatus(r,s.status),{updateCachedTrackerItemStatus:a}=await e.A(410437);return await a({issueId:r,status:t.status??s.status,updatedAt:t.updatedAt}),{id:r,trackerId:"linear:default",trackerType:"linear",identifier:t.identifier,title:t.title,status:t.status??s.status,statusCategory:n(t.status??s.status),assignee:t.assignee?{id:t.assignee,name:t.assignee}:void 0,labels:[],createdAt:t.updatedAt,updatedAt:t.updatedAt,url:t.url??`https://linear.app/issue/${t.identifier}`}}throw Error("Only status updates are currently supported")}async addComment(e,t,a){throw Error("Linear addComment not yet implemented")}async getActivity(e,t){return[]}async listGroups(e){let t=(0,a.getLinearClient)(e);return t?(await t.cycles()).map(u):[]}async listStatuses(e){let t=(0,a.getLinearClient)(e);if(!t)return[];try{let e=await t.workflowStates(),a=new Set;return e.map(e=>({id:e.id,name:e.name,category:n(e.name)})).filter(e=>!a.has(e.name)&&(a.add(e.name),!0))}catch{return[{id:"todo",name:"Todo",category:"todo"},{id:"in_progress",name:"In Progress",category:"in_progress"},{id:"done",name:"Done",category:"done"},{id:"cancelled",name:"Cancelled",category:"cancelled"}]}}async listAssignees(e){let t=(0,a.getLinearClient)(e);return t?(await t.users()).map(e=>({id:e.id,name:e.name,avatarUrl:void 0})):[]}async handleApiKeyConnect(t,a){let{saveProjectTicketToken:r}=await e.A(836400);r(t,"linear",{accessToken:a})}async handleTokenDelivery(t,a){let r=a.access_token;if(!r)throw Error("Missing access_token");let{saveProjectTicketToken:s}=await e.A(836400),i=a.expires_in?Number(a.expires_in):void 0;s(t,"linear",{accessToken:r,...i&&{expiresAt:Date.now()+1e3*i}})}getMcpConfig(e){let t=(0,a.getProjectTicketToken)(e,"linear");return{name:"linear",url:"https://mcp.linear.app/sse",headers:t?{Authorization:`Bearer ${t.accessToken}`}:{}}}renderGroupLabel(e){return"cycle"===e.type?`Cycle: ${e.name}`:e.name}};(0,t.registerAdapter)(g);let m=new class{type="jira";displayName="Jira Cloud";groupLabel="Sprint";icon=y;getAuthUrl(e){return(0,d.getJiraAuthUrl)(e)}async handleCallback(e,t){let a=await (0,d.exchangeJiraCode)(t),r=(await (0,d.getAccessibleResources)(a.accessToken))[0];if(!r)throw Error("No accessible Jira resources found");return(0,d.saveJiraToken)(e,{accessToken:a.accessToken,refreshToken:a.refreshToken,expiresAt:a.expiresAt,cloudId:r.id,siteUrl:r.url}),{accessToken:a.accessToken,refreshToken:a.refreshToken,expiresAt:a.expiresAt}}async getStatus(e){let t=(0,d.getJiraToken)(e);if(!t?.accessToken||!t?.cloudId)return{connected:!1};try{let t=await (0,d.getJiraClient)(e);if(!t)return{connected:!1};let a=await t.getMyself();return{connected:!0,user:{id:a.id,name:a.name,avatarUrl:a.avatarUrl}}}catch{return{connected:!1}}}async disconnect(t){(0,d.deleteJiraToken)(t);let{removeTrackerConnection:a}=await e.A(169447);a(t,"jira")}async listItems(t,a){let{ensureJiraIssueCache:r,mapJiraIssue:s}=await e.A(119130),i=(0,d.getJiraToken)(t),n=!a.cursor;await r({projectId:t,refresh:n});let{listCachedTrackerItems:o}=await e.A(410437),l=await o({trackerType:"jira",search:a.search,statuses:a.statuses,statusCategories:a.statusCategories,assigneeIds:a.assigneeIds,groupIds:a.groupIds,cursor:a.cursor,limit:a.limit,sortBy:a.sortBy??"activity",sortDir:a.sortDir,hasActivity:a.hasActivity}),c=i?.siteUrl??"https://example.atlassian.net";return{items:l.issues.map(e=>({id:e.id,trackerId:e.trackerId||"jira:default",trackerType:"jira",identifier:e.identifier,title:e.title,description:e.description??void 0,status:e.status,statusCategory:e.statusCategory,assignee:e.assignee?{id:e.assigneeId??e.assignee,name:e.assignee}:void 0,labels:e.labels??[],createdAt:e.pulledAt,updatedAt:e.updatedAt,url:e.url??`${c}/browse/${e.identifier}`})),pageInfo:l.pageInfo}}async getItem(t,a){let{getJiraIssueDetail:r}=await e.A(119130);return r(t,a)}async updateItem(t,a,r){let s=await (0,d.getJiraClient)(t);if(!s)throw Error("Not connected to Jira");if(r.status){let e=await s.getTransitions(a),t=e.find(e=>e.to.name===r.status||e.name===r.status);if(!t)throw Error(`No transition to status "${r.status}" available. Valid transitions: ${e.map(e=>e.name).join(", ")}`);await s.transitionIssue(a,t.id)}r.assigneeId&&await s.updateIssue(a,{assignee:{accountId:r.assigneeId}}),r.labels&&await s.updateIssue(a,{labels:r.labels});let i=(0,d.getJiraToken)(t),n=i?.siteUrl??"https://example.atlassian.net",o=await s.getIssue(a),{mapJiraIssue:l}=await e.A(119130);return l(o,n)}async addComment(e,t,a){let r=await (0,d.getJiraClient)(e);if(!r)throw Error("Not connected to Jira");await r.addComment(t,a)}async getActivity(e,t){let a=await (0,d.getJiraClient)(e);return a?(await a.getActivity(t)).map(e=>({id:e.id,type:"update",description:e.items.map(e=>`${e.field}: ${e.fromString??""} → ${e.toString??""}`).join(", "),actor:{id:e.author.accountId,name:e.author.displayName},createdAt:e.created})):[]}async listGroups(e){let t=await (0,d.getJiraClient)(e);if(!t)return[];try{let e=await t.getBoards(),a=[];for(let r of e.slice(0,5))for(let e of(await t.getSprints(r.id)))("active"===e.state||"future"===e.state)&&a.push({id:String(e.id),name:e.name,type:"sprint"});return a}catch{return[]}}async listStatuses(e){let t=await (0,d.getJiraClient)(e);if(!t)return[];try{let e=await t.getStatuses(),a=new Set,r=[];for(let t of e)a.has(t.name)||(a.add(t.name),r.push({id:t.id,name:t.name,category:(0,p.jiraStatusCategoryToCanonical)(t.statusCategory?.key)}));return r}catch{return[]}}async listAssignees(t){let a=await (0,d.getJiraClient)(t);if(!a)return[];(0,d.getJiraToken)(t);let{listCachedTrackerItems:r}=await e.A(410437),s=await r({trackerType:"jira",limit:1}),i=s.issues[0]?.teamKey;if(!i)return[];try{return(await a.getAssignableUsers(i)).map(e=>({id:e.accountId,name:e.displayName,avatarUrl:e.avatarUrls?.["48x48"]}))}catch{return[]}}async handleApiKeyConnect(e,t){throw Error("Jira Cloud requires OAuth authentication — use the Connect button instead")}async handleTokenDelivery(e,t){let a=t.access_token,r=t.cloud_id,s=t.site_url;if(!a||!r||!s)throw Error("Missing required Jira token fields (access_token, cloud_id, site_url)");let i=t.expires_in?Number(t.expires_in):void 0;(0,d.saveJiraToken)(e,{accessToken:a,refreshToken:t.refresh_token,cloudId:r,siteUrl:s,...i&&{expiresAt:Date.now()+1e3*i}})}getMcpConfig(e){let t=(0,d.getJiraToken)(e);return{name:"jira",url:"https://mcp.atlassian.com/v1/sse",headers:t?{Authorization:`Bearer ${t.accessToken}`}:{}}}renderGroupLabel(e){return"sprint"===e.type?`Sprint: ${e.name}`:e.name}};(0,t.registerAdapter)(m),e.s([],698134)},242617,e=>{"use strict";e.i(712513);var t=e.i(902157),a=e.i(660526),r=e.i(750227);let s=r.default.join((0,a.homedir)(),".agx");function i(e){return r.default.join(s,"projects",e,"integrations","trackers.json")}function n(e){let a=r.default.dirname(e);(0,t.existsSync)(a)||(0,t.mkdirSync)(a,{recursive:!0})}function o(e){if(!e)return[];let a=i(e);try{let e=(0,t.readFileSync)(a,"utf8"),r=JSON.parse(e);return Array.isArray(r.connections)?r.connections:[]}catch{return[]}}function l(e,a){if(!e)return;let r=i(e);n(r);let s=o(e),l=s.findIndex(e=>e.type===a.type);l>=0?s[l]=a:s.push(a),(0,t.writeFileSync)(r,JSON.stringify({connections:s},null,2),"utf8")}function c(e,a){if(!e)return;let r=i(e),s=o(e).filter(e=>e.type!==a);if(0===s.length)try{(0,t.unlinkSync)(r)}catch{}else n(r),(0,t.writeFileSync)(r,JSON.stringify({connections:s},null,2),"utf8")}e.s(["addTrackerConnection",()=>l,"listTrackerConnections",()=>o,"removeTrackerConnection",()=>c])},88007,e=>{"use strict";let t=new Map;function a(e){if(t.has(e.type))throw Error(`Tracker adapter "${e.type}" is already registered`);t.set(e.type,e)}function r(e){let a=t.get(e);if(!a)throw Error(`Unknown tracker type: "${e}". Available: ${i().join(", ")}`);return a}function s(e){return t.get(e)??null}function i(){return[...t.keys()]}function n(){return[...t.values()]}e.s(["getAdapter",()=>r,"getAdapterOrNull",()=>s,"listAdapterTypes",()=>i,"listAdapters",()=>n,"registerAdapter",()=>a])},404258,e=>{"use strict";function t(e){let t=e?.trim();return t?t.replace(/\/+$/,""):null}let a="http://localhost:41741";function r(){return t(process.env.NEXT_PUBLIC_APP_URL)??t(process.env.AGX_BOARD_URL)??t(process.env.NEXT_PUBLIC_AGX_BOARD_URL)??a}function s(){return t(process.env.AGX_BOARD_URL)??t(process.env.NEXT_PUBLIC_AGX_BOARD_URL)??t(process.env.NEXT_PUBLIC_APP_URL)??a}function i(){let e=new Set([a,"http://127.0.0.1:41741"]);for(let a of[process.env.NEXT_PUBLIC_APP_URL,process.env.AGX_BOARD_URL,process.env.NEXT_PUBLIC_AGX_BOARD_URL]){let r=t(a);r&&e.add(r)}return Array.from(e)}e.s(["getAllowedOrigins",()=>i,"getConfiguredAppBaseUrl",()=>r,"getConfiguredBoardBaseUrl",()=>s])},607495,754493,e=>{"use strict";e.i(712513);var t=e.i(902157),a=e.i(660526),r=e.i(750227),s=e.i(404258);let i=r.default.join((0,a.homedir)(),".agx"),n="https://api.atlassian.com";function o(e){return r.default.join(i,"projects",e,"integrations","jira.json")}function l(e){if(!e)return null;let a=o(e);try{let e=(0,t.readFileSync)(a,"utf8");return JSON.parse(e)}catch{return null}}function c(e,a){if(!e)throw Error("projectId is required to save a Jira token");let s=o(e),i=r.default.dirname(s);(0,t.existsSync)(i)||(0,t.mkdirSync)(i,{recursive:!0}),(0,t.writeFileSync)(s,JSON.stringify(a,null,2),"utf8")}function u(e){if(!e)return;let a=o(e);try{(0,t.unlinkSync)(a)}catch{}}function d(e){let t=new URL((0,s.getConfiguredAppBaseUrl)()).port||"41741";return`https://www.runagx.com/integrations/jira/auth?port=${t}`}async function p(e){let t=process.env.JIRA_CLIENT_ID,a=process.env.JIRA_CLIENT_SECRET;if(!t||!a)throw Error("JIRA_CLIENT_ID and JIRA_CLIENT_SECRET must be set");let r=await fetch("https://auth.atlassian.com/oauth/token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"authorization_code",code:e,client_id:t,client_secret:a,redirect_uri:`${(0,s.getConfiguredAppBaseUrl)()}/api/trackers/jira/callback`})});if(!r.ok){let e=await r.text();throw Error(`Jira token exchange failed: ${r.status} ${e}`)}let i=await r.json(),n="number"==typeof i.expires_in?i.expires_in:3600;return{accessToken:i.access_token,refreshToken:i.refresh_token,expiresAt:Date.now()+1e3*n}}async function y(e){let t=await fetch("https://www.runagx.com/integrations/jira/refresh",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:e})});if(!t.ok){let e=await t.text();throw Error(`Jira token refresh failed: ${t.status} ${e}`)}let a=await t.json(),r="number"==typeof a.expires_in?a.expires_in:3600;return{accessToken:a.access_token,refreshToken:a.refresh_token??e,expiresAt:Date.now()+1e3*r}}async function g(e){let t=await fetch(`${n}/oauth/token/accessible-resources`,{headers:{Authorization:`Bearer ${e}`}});return t.ok?t.json():[]}class m{accessToken;cloudId;siteUrl;constructor(e,t,a){this.accessToken=e,this.cloudId=t,this.siteUrl=a}get baseUrl(){return`${n}/ex/jira/${this.cloudId}/rest/api/3`}get agileUrl(){return`${n}/ex/jira/${this.cloudId}/rest/agile/1.0`}async request(e,t){return await fetch(e,{...t,headers:{Authorization:`Bearer ${this.accessToken}`,"Content-Type":"application/json",Accept:"application/json",...t?.headers}})}async getMyself(){let e=await this.request(`${this.baseUrl}/myself`);if(!e.ok)throw Error(`Failed to get Jira user: ${e.status}`);let t=await e.json();return{id:t.accountId,name:t.displayName,avatarUrl:t.avatarUrls?.["48x48"]}}async searchIssues(e,t){let a={jql:e,maxResults:t?.maxResults??50,fields:t?.fields??["summary","status","assignee","priority","labels","description","updated","created","issuetype","project","customfield_10020","comment"]};t?.nextPageToken&&(a.nextPageToken=t.nextPageToken);let r=await this.request(`${this.baseUrl}/search/jql`,{method:"POST",body:JSON.stringify(a)});if(!r.ok){let e=await r.text();throw Error(`Jira search failed: ${r.status} ${e}`)}return r.json()}async getIssue(e){let t=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}?expand=renderedFields`);if(!t.ok)throw Error(`Failed to get Jira issue ${e}: ${t.status}`);return t.json()}async updateIssue(e,t){let a=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}`,{method:"PUT",body:JSON.stringify({fields:t})});if(!a.ok){let t=await a.text();throw Error(`Failed to update Jira issue ${e}: ${a.status} ${t}`)}}async addComment(e,t){let a=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}/comment`,{method:"POST",body:JSON.stringify({body:{type:"doc",version:1,content:t.split("\n\n").map(e=>({type:"paragraph",content:e?[{type:"text",text:e}]:[]}))}})});if(!a.ok){let t=await a.text();throw Error(`Failed to add comment to ${e}: ${a.status} ${t}`)}}async getComments(e){let t=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}/comment`);return t.ok?(await t.json()).comments??[]:[]}async getTransitions(e){let t=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}/transitions`);return t.ok?(await t.json()).transitions??[]:[]}async transitionIssue(e,t){let a=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}/transitions`,{method:"POST",body:JSON.stringify({transition:{id:t}})});if(!a.ok){let t=await a.text();throw Error(`Failed to transition ${e}: ${a.status} ${t}`)}}async getProjects(){let e=await this.request(`${this.baseUrl}/project`);return e.ok?e.json():[]}async getStatuses(){let e=await this.request(`${this.baseUrl}/status`);return e.ok?e.json():[]}async getBoards(){let e=await this.request(`${this.agileUrl}/board`);return e.ok?(await e.json()).values??[]:[]}async getSprints(e){let t=await this.request(`${this.agileUrl}/board/${e}/sprint`);return t.ok?(await t.json()).values??[]:[]}async getAssignableUsers(e){let t=new URLSearchParams({project:e}),a=await this.request(`${this.baseUrl}/user/assignable/search?${t}`);return a.ok?a.json():[]}async getActivity(e,t=200){let a=[],r=0;for(;a.length<t;){let s=new URLSearchParams({startAt:String(r),maxResults:String(Math.min(100,t-a.length))}),i=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}/changelog?${s}`);if(!i.ok)break;let n=await i.json(),o=n.values??[];if(a.push(...o),0===o.length||a.length>=(n.total??0))break;r+=o.length}return a}}async function f(e){let t=l(e);if(!t?.accessToken||!t?.cloudId||!t?.siteUrl)return null;if(t.expiresAt&&Date.now()>t.expiresAt-6e4&&t.refreshToken)try{let a=await y(t.refreshToken),r={...t,accessToken:a.accessToken,refreshToken:a.refreshToken,expiresAt:a.expiresAt};return c(e,r),new m(r.accessToken,t.cloudId,t.siteUrl)}catch{return null}return new m(t.accessToken,t.cloudId,t.siteUrl)}function h(e){return e?"string"==typeof e?e:function e(t){return"string"==typeof t?t:t&&"object"==typeof t?"text"===t.type&&"string"==typeof t.text?t.text:Array.isArray(t.content)?t.content.map(e).join(""):"":""}(e):null}e.s(["adfToPlainText",()=>h,"deleteJiraToken",()=>u,"exchangeJiraCode",()=>p,"getAccessibleResources",()=>g,"getJiraAuthUrl",()=>d,"getJiraClient",()=>f,"getJiraToken",()=>l,"saveJiraToken",()=>c],754493);var w=e.i(862263);function k(e){switch(e){case"new":default:return"todo";case"indeterminate":return"in_progress";case"done":return"done"}}function A(e,t,a){let r=e.fields,s=r.status?.statusCategory?.key??"new";return{id:e.id,trackerId:`jira:${r.project?.key??"unknown"}`,trackerType:"jira",identifier:e.key,title:r.summary,description:h(r.description)??void 0,status:r.status?.name??"Unknown",statusCategory:k(s),assignee:r.assignee?{id:r.assignee.accountId,name:r.assignee.displayName,avatarUrl:r.assignee.avatarUrls?.["48x48"]}:void 0,priority:function(e){if(!e)return;let t=e.toLowerCase();return t.includes("highest")||t.includes("critical")?"urgent":t.includes("high")?"high":t.includes("medium")||t.includes("major")?"medium":t.includes("low")||t.includes("minor")||t.includes("lowest")||t.includes("trivial")?"low":"none"}(r.priority?.name),labels:r.labels??[],createdAt:r.created,updatedAt:r.updated,url:`${t}/browse/${e.key}`}}async function I(e){let t,a=await f(e.projectId);if(!a)throw Error("Not connected to Jira");let r=l(e.projectId);if(!r?.siteUrl)throw Error("Missing Jira site URL");let s=e.jql??(e.projectKey?`project = ${e.projectKey} ORDER BY updated DESC`:"assignee = currentUser() OR reporter = currentUser() ORDER BY updated DESC"),i=e.limit??100,n=[],o=!1;for(;!o&&n.length<i;){let e=await a.searchIssues(s,{nextPageToken:t,maxResults:Math.min(50,i-n.length)});for(let t of e.issues)n.push(function(e,t){let a=e.fields,r=a.status?.statusCategory?.key??"new";return{id:e.id,trackerType:"jira",trackerId:`jira:${a.project?.key??"unknown"}`,identifier:e.key,title:a.summary,description:h(a.description),status:a.status?.name??"Unknown",statusCategory:k(r),assigneeId:a.assignee?.accountId??null,assignee:a.assignee?.displayName??null,assigneeEmail:null,isAssignedToMe:!1,teamId:a.project?.id??null,teamName:a.project?.name??null,teamKey:a.project?.key??null,cycleId:a.customfield_10020?String(a.customfield_10020.id):null,cycleName:a.customfield_10020?.name??null,cycleNumber:a.customfield_10020?a.customfield_10020.id:null,priority:a.priority?.name??null,labels:a.labels??[],url:`${t}/browse/${e.key}`,createdAt:a.created??null,updatedAt:a.updated}}(t,r.siteUrl));o=e.isLast||0===e.issues.length,t=e.nextPageToken}return await (0,w.replaceCachedTrackerItems)({trackerType:"jira",issues:n,complete:o,pulledAtMs:Date.now()}),{pulled:n.length}}async function T(t){let{getTrackerItemSyncState:a,setTrackerItemSyncState:r}=await e.A(410437),s=await a("jira");return(t.refresh||!s?.lastPulledAt)&&(await I({projectId:t.projectId,projectKey:t.projectKey}),await r("jira",0,Date.now())),{pulledAt:s?.lastPulledAt??null}}async function C(e){return{issues:(await (0,w.listCachedTrackerItems)({trackerType:"jira",limit:e?.limit??500})).issues.map(e=>({id:e.id,trackerId:e.trackerId||"jira:default",trackerType:"jira",identifier:e.identifier,title:e.title,description:e.description??void 0,status:e.status,statusCategory:e.statusCategory,assignee:e.assignee?{id:e.assigneeId??e.assignee,name:e.assignee}:void 0,priority:void 0,labels:e.labels??[],createdAt:e.pulledAt,updatedAt:e.updatedAt,url:e.url??"#"}))}}async function j(e,t){let a=await f(e);if(!a)throw Error("Not connected to Jira");let r=l(e),s=r?.siteUrl??"https://example.atlassian.net",i=await a.getIssue(t),n=A(i,s),o=(i.fields.comment?.comments??[]).map(e=>({id:e.id,body:"string"==typeof e.body?e.body:h(e.body)??"",author:{id:e.author.accountId,name:e.author.displayName},createdAt:e.created})),c=(await a.getActivity(t)).map(e=>({id:e.id,type:"update",description:e.items.map(e=>`${e.field}: ${e.fromString??""} → ${e.toString??""}`).join(", "),actor:{id:e.author.accountId,name:e.author.displayName},createdAt:e.created}));return{...n,comments:o,activity:c,metadata:{projectId:i.fields.project?.id,projectKey:i.fields.project?.key,projectName:i.fields.project?.name,issueType:i.fields.issuetype?.name,sprintId:i.fields.customfield_10020?.id,sprintName:i.fields.customfield_10020?.name}}}e.s(["ensureJiraIssueCache",()=>T,"getJiraIssueDetail",()=>j,"jiraStatusCategoryToCanonical",()=>k,"listJiraIssueSummaries",()=>C,"mapJiraIssue",()=>A,"pullJiraIssues",()=>I],607495)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=apps_local_80b34b78._.js.map
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,292135,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return a}});let a=e=>{}},429056,e=>{"use strict";let t=(0,e.i(363732).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);e.s(["ArrowLeft",()=>t],429056)},571278,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={assign:function(){return l},searchParamsToUrlQuery:function(){return s},urlQueryToSearchParams:function(){return o}};for(var n in a)Object.defineProperty(r,n,{enumerable:!0,get:a[n]});function s(e){let t={};for(let[r,a]of e.entries()){let e=t[r];void 0===e?t[r]=a:Array.isArray(e)?e.push(a):t[r]=[e,a]}return t}function i(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function o(e){let t=new URLSearchParams;for(let[r,a]of Object.entries(e))if(Array.isArray(a))for(let e of a)t.append(r,i(e));else t.set(r,i(a));return t}function l(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,a]of r.entries())e.append(t,a)}return e}},13168,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={formatUrl:function(){return o},formatWithValidation:function(){return c},urlObjectKeys:function(){return l}};for(var n in a)Object.defineProperty(r,n,{enumerable:!0,get:a[n]});let s=e.r(190809)._(e.r(571278)),i=/https?|ftp|gopher|file/;function o(e){let{auth:t,hostname:r}=e,a=e.protocol||"",n=e.pathname||"",o=e.hash||"",l=e.query||"",c=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?c=t+e.host:r&&(c=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(c+=":"+e.port)),l&&"object"==typeof l&&(l=String(s.urlQueryToSearchParams(l)));let d=e.search||l&&`?${l}`||"";return a&&!a.endsWith(":")&&(a+=":"),e.slashes||(!a||i.test(a))&&!1!==c?(c="//"+(c||""),n&&"/"!==n[0]&&(n="/"+n)):c||(c=""),o&&"#"!==o[0]&&(o="#"+o),d&&"?"!==d[0]&&(d="?"+d),n=n.replace(/[?#]/g,encodeURIComponent),d=d.replace("#","%23"),`${a}${c}${n}${d}${o}`}let l=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function c(e){return o(e)}},950581,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return n}});let a=e.r(935851);function n(e,t){let r=(0,a.useRef)(null),n=(0,a.useRef)(null);return(0,a.useCallback)(a=>{if(null===a){let e=r.current;e&&(r.current=null,e());let t=n.current;t&&(n.current=null,t())}else e&&(r.current=s(e,a)),t&&(n.current=s(t,a))},[e,t])}function s(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},692942,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={DecodeError:function(){return v},MiddlewareNotFoundError:function(){return j},MissingStaticPage:function(){return y},NormalizeError:function(){return g},PageNotFoundError:function(){return b},SP:function(){return f},ST:function(){return x},WEB_VITALS:function(){return s},execOnce:function(){return i},getDisplayName:function(){return u},getLocationOrigin:function(){return c},getURL:function(){return d},isAbsoluteUrl:function(){return l},isResSent:function(){return p},loadGetInitialProps:function(){return m},normalizeRepeatedSlashes:function(){return h},stringifyError:function(){return w}};for(var n in a)Object.defineProperty(r,n,{enumerable:!0,get:a[n]});let s=["CLS","FCP","FID","INP","LCP","TTFB"];function i(e){let t,r=!1;return(...a)=>(r||(r=!0,t=e(...a)),t)}let o=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,l=e=>o.test(e);function c(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function d(){let{href:e}=window.location,t=c();return e.substring(t.length)}function u(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function p(e){return e.finished||e.headersSent}function h(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function m(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await m(t.Component,t.ctx)}:{};let a=await e.getInitialProps(t);if(r&&p(r))return a;if(!a)throw Object.defineProperty(Error(`"${u(e)}.getInitialProps()" should resolve to an object. But found "${a}" instead.`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return a}let f="u">typeof performance,x=f&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class v extends Error{}class g extends Error{}class b extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class y extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class j extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function w(e){return JSON.stringify({message:e.message,stack:e.stack})}},299242,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return s}});let a=e.r(692942),n=e.r(756972);function s(e){if(!(0,a.isAbsoluteUrl)(e))return!0;try{let t=(0,a.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,n.hasBasePath)(r.pathname)}catch(e){return!1}}},405374,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"errorOnce",{enumerable:!0,get:function(){return a}});let a=e=>{}},307241,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={default:function(){return v},useLinkStatus:function(){return b}};for(var n in a)Object.defineProperty(r,n,{enumerable:!0,get:a[n]});let s=e.r(190809),i=e.r(762281),o=s._(e.r(935851)),l=e.r(13168),c=e.r(543665),d=e.r(950581),u=e.r(692942),p=e.r(212591);e.r(292135);let h=e.r(53101),m=e.r(299242),f=e.r(979945);function x(e){return"string"==typeof e?e:(0,l.formatUrl)(e)}function v(t){var r;let a,n,s,[l,v]=(0,o.useOptimistic)(h.IDLE_LINK_STATUS),b=(0,o.useRef)(null),{href:y,as:j,children:w,prefetch:k=null,passHref:N,replace:S,shallow:C,scroll:T,onClick:A,onMouseEnter:_,onTouchStart:E,legacyBehavior:P=!1,onNavigate:M,ref:O,unstable_dynamicOnHover:L,...I}=t;a=w,P&&("string"==typeof a||"number"==typeof a)&&(a=(0,i.jsx)("a",{children:a}));let $=o.default.useContext(c.AppRouterContext),R=!1!==k,D=!1!==k?null===(r=k)||"auto"===r?f.FetchStrategy.PPR:f.FetchStrategy.Full:f.FetchStrategy.PPR,{href:U,as:W}=o.default.useMemo(()=>{let e=x(y);return{href:e,as:j?x(j):e}},[y,j]);if(P){if(a?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});n=o.default.Children.only(a)}let F=P?n&&"object"==typeof n&&n.ref:O,H=o.default.useCallback(e=>(null!==$&&(b.current=(0,h.mountLinkInstance)(e,U,$,D,R,v)),()=>{b.current&&((0,h.unmountLinkForCurrentNavigation)(b.current),b.current=null),(0,h.unmountPrefetchableInstance)(e)}),[R,U,$,D,v]),z={ref:(0,d.useMergedRef)(H,F),onClick(t){P||"function"!=typeof A||A(t),P&&n.props&&"function"==typeof n.props.onClick&&n.props.onClick(t),!$||t.defaultPrevented||function(t,r,a,n,s,i,l){if("u">typeof window){let c,{nodeName:d}=t.currentTarget;if("A"===d.toUpperCase()&&((c=t.currentTarget.getAttribute("target"))&&"_self"!==c||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,m.isLocalURL)(r)){s&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),l){let e=!1;if(l({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:u}=e.r(977803);o.default.startTransition(()=>{u(a||r,s?"replace":"push",i??!0,n.current)})}}(t,U,W,b,S,T,M)},onMouseEnter(e){P||"function"!=typeof _||_(e),P&&n.props&&"function"==typeof n.props.onMouseEnter&&n.props.onMouseEnter(e),$&&R&&(0,h.onNavigationIntent)(e.currentTarget,!0===L)},onTouchStart:function(e){P||"function"!=typeof E||E(e),P&&n.props&&"function"==typeof n.props.onTouchStart&&n.props.onTouchStart(e),$&&R&&(0,h.onNavigationIntent)(e.currentTarget,!0===L)}};return(0,u.isAbsoluteUrl)(W)?z.href=W:P&&!N&&("a"!==n.type||"href"in n.props)||(z.href=(0,p.addBasePath)(W)),s=P?o.default.cloneElement(n,z):(0,i.jsx)("a",{...I,...z,children:a}),(0,i.jsx)(g.Provider,{value:l,children:s})}e.r(405374);let g=(0,o.createContext)(h.IDLE_LINK_STATUS),b=()=>(0,o.useContext)(g);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},519132,e=>{"use strict";let t=(0,e.i(363732).default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);e.s(["Sparkles",()=>t],519132)},572665,e=>{"use strict";let t=(0,e.i(363732).default)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]]);e.s(["Users",()=>t],572665)},378764,e=>{"use strict";var t=e.i(762281),r=e.i(935851),a=e.i(498027),n=e.i(8707),s=e.i(529471),i=e.i(797167);function o({options:e,value:o,onChange:l,placeholder:c,disabled:d}){let[u,p]=(0,r.useState)(!1),[h,m]=(0,r.useState)(""),f=(0,r.useRef)(null),x=(0,r.useRef)(null),v=(0,r.useMemo)(()=>{if(!h)return e;let t=h.toLowerCase();return e.filter(e=>e.label.toLowerCase().includes(t)||e.description?.toLowerCase().includes(t)||e.meta?.toLowerCase().includes(t))},[e,h]),g=(0,r.useMemo)(()=>e.find(e=>e.id===o),[e,o]),b=(0,r.useCallback)(e=>{f.current&&!f.current.contains(e.target)&&p(!1)},[]);return(0,r.useEffect)(()=>(document.addEventListener("pointerdown",b),()=>document.removeEventListener("pointerdown",b)),[b]),(0,t.jsxs)("div",{ref:f,className:"relative",children:[(0,t.jsxs)("button",{type:"button",onClick:()=>{d||(p(!u),m(""),setTimeout(()=>x.current?.focus(),0))},disabled:d,className:"input w-full flex items-center justify-between gap-2 text-left cursor-pointer",children:[g?(0,t.jsx)("span",{className:"truncate",children:g.label}):(0,t.jsx)("span",{className:"text-[var(--muted-foreground)] truncate",children:c}),(0,t.jsx)(a.ChevronDown,{className:`w-4 h-4 text-[var(--muted-foreground)] flex-shrink-0 transition-transform ${u?"rotate-180":""}`})]}),u&&(0,t.jsxs)("div",{className:"absolute z-50 mt-2 min-w-full w-max max-w-[28rem] rounded-2xl overflow-hidden right-0",style:{background:"var(--card-bg)",border:"1px solid var(--border)",boxShadow:"0 8px 30px rgba(0,0,0,0.35), 0 0 0 1px rgba(255,255,255,0.05)"},children:[(0,t.jsxs)("div",{className:"flex items-center gap-2.5 px-3.5 py-3 border-b",style:{borderColor:"var(--border)"},children:[(0,t.jsx)(n.Search,{className:"w-4 h-4 text-[var(--muted-foreground)] flex-shrink-0"}),(0,t.jsx)("input",{ref:x,value:h,onChange:e=>m(e.target.value),placeholder:"Search...",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-[var(--muted-foreground)]"}),h&&(0,t.jsx)("button",{onClick:()=>m(""),className:"text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:(0,t.jsx)(i.X,{className:"w-3.5 h-3.5"})})]}),(0,t.jsxs)("div",{className:"max-h-72 overflow-y-auto py-1",children:[0===v.length&&(0,t.jsx)("div",{className:"px-4 py-6 text-xs text-[var(--muted-foreground)] text-center",children:"No matches"}),v.map(e=>{let r=e.id===o;return(0,t.jsxs)("button",{onClick:()=>{e.disabled||(l(e.id),p(!1),m(""))},disabled:e.disabled,className:`
|
|
2
|
-
w-full text-left px-3.5 py-2.5 flex items-center gap-3 transition-colors
|
|
3
|
-
${e.disabled?"opacity-35 cursor-not-allowed":""}
|
|
4
|
-
${r?"bg-[var(--primary)]/10":"hover:bg-[var(--muted)]/40"}
|
|
5
|
-
`,children:[(0,t.jsx)("div",{className:`w-5 h-5 rounded-md flex items-center justify-center flex-shrink-0 border ${r?"bg-[var(--primary)] border-[var(--primary)]":"border-[var(--border)]"}`,children:r&&(0,t.jsx)(s.Check,{className:"w-3 h-3 text-white"})}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-sm font-medium",children:e.label}),e.meta&&(0,t.jsx)("span",{className:"text-[10px] px-1.5 py-0.5 rounded-full bg-[var(--muted)]/50 text-[var(--muted-foreground)]",children:e.meta})]}),e.description&&(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5 line-clamp-1",children:e.description})]})]},e.id)})]})]})]})}e.s(["default",()=>o])},19035,e=>{"use strict";let t=(0,e.i(363732).default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);e.s(["Copy",()=>t],19035)},169610,e=>{"use strict";let t=(0,e.i(363732).default)("user",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);e.s(["User",()=>t],169610)},755838,(e,t,r)=>{"use strict";var a=e.r(935851),n="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},s=a.useState,i=a.useEffect,o=a.useLayoutEffect,l=a.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!n(e,r)}catch(e){return!0}}var d="u"<typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var r=t(),a=s({inst:{value:r,getSnapshot:t}}),n=a[0].inst,d=a[1];return o(function(){n.value=r,n.getSnapshot=t,c(n)&&d({inst:n})},[e,r,t]),i(function(){return c(n)&&d({inst:n}),e(function(){c(n)&&d({inst:n})})},[e]),l(r),r};r.useSyncExternalStore=void 0!==a.useSyncExternalStore?a.useSyncExternalStore:d},802239,(e,t,r)=>{"use strict";t.exports=e.r(755838)},752822,(e,t,r)=>{"use strict";var a=e.r(935851),n=e.r(802239),s="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},i=n.useSyncExternalStore,o=a.useRef,l=a.useEffect,c=a.useMemo,d=a.useDebugValue;r.useSyncExternalStoreWithSelector=function(e,t,r,a,n){var u=o(null);if(null===u.current){var p={hasValue:!1,value:null};u.current=p}else p=u.current;var h=i(e,(u=c(function(){function e(e){if(!l){if(l=!0,i=e,e=a(e),void 0!==n&&p.hasValue){var t=p.value;if(n(t,e))return o=t}return o=e}if(t=o,s(i,e))return t;var r=a(e);return void 0!==n&&n(t,r)?(i=e,t):(i=e,o=r)}var i,o,l=!1,c=void 0===r?null:r;return[function(){return e(t())},null===c?void 0:function(){return e(c())}]},[t,r,a,n]))[0],u[1]);return l(function(){p.hasValue=!0,p.value=h},[h]),d(h),h}},430224,(e,t,r)=>{"use strict";t.exports=e.r(752822)},538292,e=>{"use strict";let t=(0,e.i(363732).default)("folder-open",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);e.s(["FolderOpen",()=>t],538292)},44054,e=>{"use strict";var t=e.i(935851);let r="(pointer: coarse)",a="(hover: hover)",n="(max-width: 767px)",s="(min-width: 768px)";function i(){if("function"!=typeof window.matchMedia)return{isCoarsePointer:!1,canHover:!0,isPhone:!1,isTablet:!1,isTouchLayout:!1};let e=window.matchMedia(r).matches,t=window.matchMedia(a).matches,i=window.matchMedia(n).matches,o=!i&&window.matchMedia(s).matches,l=e||!t;return{isCoarsePointer:e,canHover:t,isPhone:l&&i,isTablet:l&&o,isTouchLayout:l}}function o(){let[e,o]=(0,t.useState)(i);return(0,t.useEffect)(()=>{if("function"!=typeof window.matchMedia)return;let e=[window.matchMedia(r),window.matchMedia(a),window.matchMedia(n),window.matchMedia(s)],t=()=>{o(i())};return e.forEach(e=>e.addEventListener("change",t)),window.addEventListener("resize",t),t(),()=>{e.forEach(e=>e.removeEventListener("change",t)),window.removeEventListener("resize",t)}},[]),e}e.s(["useInputCapabilities",()=>o])},363732,e=>{"use strict";var t=e.i(935851);let r=(...e)=>e.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim(),a=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let s=(0,t.forwardRef)(({color:e="currentColor",size:a=24,strokeWidth:s=2,absoluteStrokeWidth:i,className:o="",children:l,iconNode:c,...d},u)=>(0,t.createElement)("svg",{ref:u,...n,width:a,height:a,stroke:e,strokeWidth:i?24*Number(s)/Number(a):s,className:r("lucide",o),...!l&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(d)&&{"aria-hidden":"true"},...d},[...c.map(([e,r])=>(0,t.createElement)(e,r)),...Array.isArray(l)?l:[l]])),i=(e,n)=>{let i=(0,t.forwardRef)(({className:i,...o},l)=>(0,t.createElement)(s,{ref:l,iconNode:n,className:r(`lucide-${a(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${e}`,i),...o}));return i.displayName=a(e),i};e.s(["default",()=>i],363732)},524123,e=>{"use strict";var t=e.i(935851);function r(){let[e,r]=(0,t.useState)([]),[a,n]=(0,t.useState)(!1),[s,i]=(0,t.useState)(null),o=(0,t.useCallback)(async()=>{n(!0);try{let e=await fetch("/api/projects");if(!e.ok)throw Error("Failed to fetch projects");let t=await e.json();r(t.projects??[]),i(null)}catch(e){i(e instanceof Error?e:Error("Unknown error"))}finally{n(!1)}},[]);(0,t.useEffect)(()=>{o()},[o]);let l=(0,t.useCallback)(async e=>{let t=await fetch("/api/projects",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error((await t.json().catch(()=>({}))).error||"Failed to create project");let a=(await t.json()).project;return r(e=>[a,...e]),a},[]);return{projects:e,isLoading:a,error:s,refetch:o,createProject:l,updateProject:(0,t.useCallback)(async(e,t)=>{let a=await fetch(`/api/projects/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok)throw Error((await a.json().catch(()=>({}))).error||"Failed to update project");let n=(await a.json()).project;return r(t=>t.map(t=>t.id===e?n:t)),n},[]),deleteProject:(0,t.useCallback)(async e=>{let t=await fetch(`/api/projects/${e}`,{method:"DELETE"});if(!t.ok)throw Error((await t.json().catch(()=>({}))).error||"Failed to delete project");r(t=>t.filter(t=>t.id!==e))},[])}}function a(){let[e,r]=(0,t.useState)([]),[a,n]=(0,t.useState)(!0),s=(0,t.useCallback)(async()=>{try{let e=await fetch("/api/projects");if(!e.ok)return;let{projects:t}=await e.json(),a=await Promise.all((t??[]).map(async e=>{let t=[],r=[];try{let[a,n]=await Promise.all([fetch(`/api/projects/${e.id}/agents`),fetch(`/api/projects/${e.id}/threads`)]);a.ok&&(t=(await a.json()).agents??[]),n.ok&&(r=((await n.json()).threads??[]).map(e=>e.thread_id))}catch{}return{...e,repos:e.repos??[],agents:t.map(t=>({project_id:e.id,agent_id:t.agent_id,routing_order:t.routing_order,created_at:t.created_at})),thread_ids:r,workspace_ids:r}}));r(a)}catch{}finally{n(!1)}},[]);(0,t.useEffect)(()=>{s()},[s]);let i=(0,t.useCallback)(async(e,t)=>{try{let a="string"==typeof e?{name:e}:e,n=a.name.trim(),s=(a.slug||n.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")).trim(),i=await fetch("/api/projects",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...a,name:n,slug:s})});if(!i.ok)return null;let{project:o}=await i.json(),l=Array.isArray(t)?t:t?[t]:[];for(let e of l)await fetch(`/api/projects/${o.id}/threads`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({threadId:e})}).catch(e=>console.warn("[useProjects] link thread failed:",e));let c={...o,repos:o.repos??[],agents:[],thread_ids:l,workspace_ids:l};return r(e=>[...e,c].sort((e,t)=>e.name.localeCompare(t.name))),c}catch{return null}},[]),o=(0,t.useCallback)(async(e,t)=>{try{if(!(await fetch(`/api/projects/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t})})).ok)return;r(r=>r.map(r=>r.id===e?{...r,name:t}:r).sort((e,t)=>e.name.localeCompare(t.name)))}catch{}},[]),l=(0,t.useCallback)(async e=>{try{if(!(await fetch(`/api/projects/${e}`,{method:"DELETE"})).ok)return;r(t=>t.filter(t=>t.id!==e))}catch{}},[]),c=(0,t.useCallback)(async(e,t)=>{try{let a=await fetch(`/api/projects/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.error||"Failed to update project")}let n=(await a.json()).project;return r(t=>t.map(t=>t.id===e?{...t,...n,repos:n.repos??t.repos}:t)),n}catch{return null}},[]),d=(0,t.useCallback)(async(e,t)=>{try{let a=await fetch(`/api/projects/${e}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:t})});if(!a.ok)return;let n=((await a.json()).agents??[]).map(t=>({project_id:e,agent_id:t.agent_id,routing_order:t.routing_order,created_at:t.created_at}));r(t=>t.map(t=>t.id===e?{...t,agents:n}:t))}catch{}},[]),u=(0,t.useCallback)(async(e,t)=>{try{let a=await fetch(`/api/projects/${e}/agents?agentId=${t}`,{method:"DELETE"});if(!a.ok)return;let n=((await a.json()).agents??[]).map(t=>({project_id:e,agent_id:t.agent_id,routing_order:t.routing_order,created_at:t.created_at}));r(t=>t.map(t=>t.id===e?{...t,agents:n}:t))}catch{}},[]);return{projects:e,isLoading:a,createProject:i,updateProject:c,renameProject:o,deleteProject:l,addAgent:d,removeAgent:u,reorderAgents:(0,t.useCallback)(async(e,t)=>{try{let a=await fetch(`/api/projects/${e}/agents`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({orderedAgentIds:t})});if(!a.ok)return;let n=((await a.json()).agents??[]).map(t=>({project_id:e,agent_id:t.agent_id,routing_order:t.routing_order,created_at:t.created_at}));r(t=>t.map(t=>t.id===e?{...t,agents:n}:t))}catch{}},[]),moveAgent:(0,t.useCallback)(async(e,t,r)=>{try{await fetch(`/api/projects/${t}/agents?agentId=${e}`,{method:"DELETE"}),await fetch(`/api/projects/${r}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:e})}),await s()}catch{}},[s]),refresh:s}}e.s(["useProjects",()=>r,"useProjectsWithAgents",()=>a])},797167,e=>{"use strict";let t=(0,e.i(363732).default)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);e.s(["X",()=>t],797167)},929870,e=>{"use strict";let t=(0,e.i(363732).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",()=>t],929870)},8707,e=>{"use strict";let t=(0,e.i(363732).default)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);e.s(["Search",()=>t],8707)},498027,e=>{"use strict";let t=(0,e.i(363732).default)("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);e.s(["ChevronDown",()=>t],498027)},529471,e=>{"use strict";let t=(0,e.i(363732).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["Check",()=>t],529471)},938201,e=>{"use strict";let t=(0,e.i(363732).default)("target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);e.s(["Target",()=>t],938201)},997626,e=>{"use strict";let t=(0,e.i(363732).default)("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);e.s(["Zap",()=>t],997626)},810605,e=>{"use strict";e.s(["GRAPH_TIMEOUT_DEFAULT_MS",0,864e5,"NODE_TIMEOUT_DEFAULT_MS",0,18e5,"UI_POLL_CHAT_ALT_MS",0,15e3,"UI_POLL_CHAT_CHECK_MS",0,1e4,"UI_POLL_DB_HEALTH_MS",0,3e4,"UI_POLL_PROMPT_RUNS_MS",0,5e3,"UI_POLL_SYSTEM_STATUS_MS",0,3e4,"UI_POLL_UPDATE_CHECK_MS",0,18e5])},506420,(e,t,r)=>{t.exports=e.r(27944)},906724,595807,e=>{"use strict";let t=(0,e.i(363732).default)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);e.s(["default",()=>t],595807),e.s(["Loader2",()=>t],906724)},958164,e=>{"use strict";let t=(0,e.i(363732).default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);e.s(["AlertTriangle",()=>t],958164)},434405,e=>{"use strict";let t="agx-chat:threads";function r(){let e=globalThis.localStorage;if(!e)throw Error("LocalThreadAdapter requires a browser-like environment with `localStorage`.");return e}function a(){let e=r().getItem(t);if(!e)return{threads:{}};try{let t=JSON.parse(e);if(t&&"object"==typeof t&&t.threads&&"object"==typeof t.threads)return{threads:Object.fromEntries(Object.entries(t.threads).map(([e,t])=>{var r,a;return[e,(r=e,a=t,{id:r,title:a?.title,messages:Array.isArray(a?.messages)?[...a.messages]:[],createdAt:"number"==typeof a?.createdAt?a.createdAt:Date.now(),updatedAt:"number"==typeof a?.updatedAt?a.updatedAt:Date.now(),metadata:a?.metadata,status:a?.status,outcomeNote:a?.outcomeNote,projectId:"string"==typeof a?.projectId?a.projectId:"string"==typeof a?.teamId?a.teamId:a?.projectId===null||a?.teamId===null?null:void 0})]}))}}catch{}return{threads:{}}}function n(e){r().setItem(t,JSON.stringify(e))}function s(e){return{...e,messages:e.messages.map(e=>({...e})),metadata:e.metadata?{...e.metadata}:void 0}}let i=new class{async saveThread(e){let t=Date.now(),r=a(),i=r.threads[e.id],o=i?.createdAt??e.createdAt??t,l=e.updatedAt??t,c={id:e.id,title:e.title,messages:e.messages.map(e=>({...e})),metadata:e.metadata,createdAt:o,updatedAt:l,status:e.status,outcomeNote:e.outcomeNote,projectId:e.projectId??e.teamId};return r.threads[e.id]=c,n(r),s(c)}async loadThread(e){let t=a().threads[e];return t?s(t):null}async listThreads(e){let t=Object.values(a().threads),r=e?.order??"desc",n=[...t].sort((e,t)=>"asc"===r?e.updatedAt-t.updatedAt:t.updatedAt-e.updatedAt),i=Math.max(0,e?.offset??0),o=e?.limit,l="number"==typeof o&&o>=0?n.slice(i,i+o):n.slice(i);return{total:t.length,threads:l.map(s)}}async deleteThread(e){let t=a();t.threads[e]&&(delete t.threads[e],n(t))}};e.s(["threadService",0,{listThreads:async()=>[...(await i.listThreads({order:"desc"})).threads.filter(e=>!0!==e.metadata?.archived)].sort((e,t)=>t.updatedAt-e.updatedAt),async createThread(e){let t="string"==typeof e?.id?e.id.trim():"";if(t){let r=await i.loadThread(t);if(r){let t={...r.metadata??{},...e?.metadata??{},archived:!1,archivedAt:null};return i.saveThread({id:r.id,title:e?.title??r.title,messages:e?.messages?.length?e.messages:r.messages,metadata:t,createdAt:r.createdAt})}}let r={id:t||("u">typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():`thread-${Date.now()}-${Math.random().toString(16).slice(2)}`),messages:e?.messages?.length?e.messages:[],title:e?.title,metadata:e?.metadata};return i.saveThread(r)},async deleteThread(e){let t=e.trim();if(!t)return;let r=await i.loadThread(t);if(!r)return;let a={...r.metadata??{},archived:!0,archivedAt:Date.now()};await i.saveThread({id:r.id,title:r.title,messages:r.messages,metadata:a,createdAt:r.createdAt})},async renameThread(e,t){let r=e.trim(),a=t.trim();if(!r||!a)return null;let n=await i.loadThread(r);return n?(n.title?.trim()??"")===a?n:i.saveThread({id:n.id,title:a,messages:n.messages,metadata:n.metadata,createdAt:n.createdAt}):null},async updateThreadStatus(e,t){let r=await i.loadThread(e);return r?r.status===t?r:i.saveThread({id:r.id,title:r.title,messages:r.messages,metadata:r.metadata,createdAt:r.createdAt,status:t,outcomeNote:r.outcomeNote}):null},async updateThreadOutcomeNote(e,t){let r=await i.loadThread(e);return r?r.outcomeNote===t?r:i.saveThread({id:r.id,title:r.title,messages:r.messages,metadata:r.metadata,createdAt:r.createdAt,status:r.status,outcomeNote:t}):null},async updateMessageThreadStatus(e,t,r){let a=await i.loadThread(e);if(!a)return null;let n=a.messages.map(e=>e.id===t?{...e,threadStatus:r}:e);return i.saveThread({id:a.id,title:a.title,messages:n,metadata:a.metadata,createdAt:a.createdAt,status:a.status,outcomeNote:a.outcomeNote})},async updateMessageOutcomeNote(e,t,r){let a=await i.loadThread(e);if(!a)return null;let n=a.messages.map(e=>e.id===t?{...e,outcomeNote:r}:e);return i.saveThread({id:a.id,title:a.title,messages:n,metadata:a.metadata,createdAt:a.createdAt,status:a.status,outcomeNote:a.outcomeNote})},async saveThreadMessages(e,t){let r=await i.loadThread(e);if(!r)return null;let a=r.title?.trim()||function(e){let t=e.find(e=>"user"===e.role)?.content?.trim();if(!t)return;let r=t.replace(/\s+/g," ");return r.length>60?`${r.slice(0,60).trim()}…`:r}(t);return function(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r+=1){let a=e[r],n=t[r];if(a.id!==n.id||a.role!==n.role||a.participantId!==n.participantId||a.content!==n.content||a.timestamp!==n.timestamp)return!1}return!0}(r.messages,t)&&(r.title?.trim()||void 0)===a?r:i.saveThread({id:r.id,title:a,messages:t,metadata:r.metadata,createdAt:r.createdAt})}}],434405)},196630,e=>{"use strict";let t=(0,e.i(363732).default)("folder-git-2",[["path",{d:"M18 19a5 5 0 0 1-5-5v8",key:"sz5oeg"}],["path",{d:"M9 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v5",key:"1w6njk"}],["circle",{cx:"13",cy:"12",r:"2",key:"1j92g6"}],["circle",{cx:"20",cy:"19",r:"2",key:"1obnsp"}]]);e.s(["FolderGit2",()=>t],196630)},902572,e=>{"use strict";let t="project_objectives_workspace",r="project_goals_workspace",a=new Set(["on_track","at_risk","off_track","done"]);function n(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function s(e){return`${e}_${Math.random().toString(36).slice(2,10)}`}function i(e){return[...e].sort((e,t)=>Date.parse(t.updatedAt)-Date.parse(e.updatedAt))}function o(e){return[...e].sort((e,t)=>Date.parse(e.createdAt)-Date.parse(t.createdAt))}function l(e){return[...e].sort((e,t)=>Date.parse(t.createdAt)-Date.parse(e.createdAt))}function c(e,t=""){return"string"==typeof e?e:t}function d(e){return Array.isArray(e)?Array.from(new Set(e.map(e=>"string"==typeof e?e.trim():"").filter(Boolean))):[]}function u(e,t="1970-01-01T00:00:00.000Z"){if("string"!=typeof e)return t;let r=Date.parse(e);return Number.isNaN(r)?t:new Date(r).toISOString()}function p(e){return"number"==typeof e&&Number.isFinite(e)?Math.max(0,Math.min(100,Math.round(e))):0}function h(e,t=0){return"number"==typeof e&&Number.isFinite(e)?Math.max(0,Math.floor(e)):t}function m(e,t="objective"){let r=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-").slice(0,32);return r||t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"objective"}function f(e,t,r="objective"){let a=m(r),n=m(e,a),s=n,i=2;for(;t.has(s);){let e=`-${i}`,t=Math.max(1,32-e.length);s=`${n.slice(0,t)}${e}`,i+=1}return t.add(s),s}function x(e,t,r){return f(e,new Set(t.filter(e=>e.id!==r).map(e=>m(e.key||e.title||e.id))),r??e)}function v(e){var t;if(!n(e))return null;let r=u(e.updatedAt??e.createdAt),i=u(e.createdAt,r);return{id:c(e.id,s("objective")),title:c(e.title,"Untitled objective"),teamId:c(e.teamId??e.team_id??e.ownerTeamId),key:m(c(e.key??e.slug??e.label),c(e.title??e.id,"objective")),threadId:c(e.threadId)||null,chatSessionVersion:h(e.chatSessionVersion,0),scheduledTaskIds:d(e.scheduledTaskIds??e.promptJobIds),summary:c(e.summary),progress:p(e.progress),status:"string"==typeof(t=e.status)&&a.has(t)?t:"on_track",createdAt:i,updatedAt:r}}function g(e){if(!n(e))return null;let t=u(e.updatedAt??e.createdAt),r=u(e.createdAt,t),a=c(e.objectiveId??e.goalId);return a?{id:c(e.id,s("objective_activity")),objectiveId:a,sourceType:"note",sourceLabel:c(e.sourceLabel,"Update"),title:c(e.title,"Untitled activity"),body:c(e.body),createdAt:r,updatedAt:t,relatedTaskId:c(e.relatedTaskId)||null}:null}function b(e){if(!n(e))return null;let t=c(e.activityId);return t?{id:c(e.id,s("objective_thread_message")),activityId:t,author:c(e.author,"You"),body:c(e.body),createdAt:u(e.createdAt)}:null}function y(){return{objectives:[],activities:[],activityThreads:{}}}function j(e){let t;if(!n(e))return y();let r=Array.isArray(e.objectives)?e.objectives.map(e=>v(e)).filter(e=>null!==e):[],a=Array.isArray(e.activities)?e.activities.map(e=>g(e)).filter(e=>null!==e):[],s=n(e.activityThreads)?Object.fromEntries(Object.entries(e.activityThreads).map(([e,t])=>[e,o(Array.isArray(t)?t.map(e=>b(e)).filter(e=>null!==e):[])])):{};return{objectives:i((t=new Set,r.map(e=>{let r=f(e.key||e.title||e.id,t,e.id||e.title||"objective");return e.key===r?e:{...e,key:r}}))),activities:l(a),activityThreads:s}}function w(e){if(!n(e))return y();let a=e[t];if(void 0!==a){let e=j(a);if(e.objectives.length>0||e.activities.length>0||Object.keys(e.activityThreads).length>0)return e}let s=e[r];if(void 0!==s){if(!n(s))return y();let e=Array.isArray(s.goals)?s.goals.map(e=>(function(e){if(!n(e))return null;let t=c(e.target),r=[c(e.summary),t?`Measure: ${t}`:""].filter(Boolean).join("\n\n");return v({...e,summary:r})})(e)).filter(e=>null!==e):[],t=Array.isArray(s.manualActivities)?s.manualActivities.map(e=>g({...e,sourceLabel:"Update"})).filter(e=>null!==e):[],r=n(s.activityThreads)?Object.fromEntries(Object.entries(s.activityThreads).map(([e,t])=>[e,o(Array.isArray(t)?t.map(t=>b({...t,activityId:e})).filter(e=>null!==e):[])])):{};return{objectives:i(e),activities:l(t),activityThreads:r}}return y()}function k(e,a){let n={...e};return delete n[r],n[t]=j(a),n}function N(e){return{id:e.id??s("objective"),title:e.title.trim(),teamId:e.teamId.trim(),key:m(e.key?.trim()??e.title.trim(),e.id??e.title),threadId:"string"==typeof e.threadId&&e.threadId.trim()?e.threadId.trim():null,chatSessionVersion:h(e.chatSessionVersion??2,2),scheduledTaskIds:d(e.scheduledTaskIds??[]),summary:e.summary?.trim()??"",progress:p(e.progress??0),status:e.status??"on_track",createdAt:e.now,updatedAt:e.now}}function S(e,t){let r=e.objectives.findIndex(e=>e.id===t.id)>=0?e.objectives.map(e=>e.id===t.id?t:e):[t,...e.objectives];return{...e,objectives:i(r)}}function C(e,t){let r=new Set(e.activities.filter(e=>e.objectiveId===t).map(e=>e.id)),a=Object.fromEntries(Object.entries(e.activityThreads).filter(([e])=>!r.has(e)));return{objectives:e.objectives.filter(e=>e.id!==t),activities:e.activities.filter(e=>e.objectiveId!==t),activityThreads:a}}function T({objective:e,workspace:t}){return t.activities.filter(t=>t.objectiveId===e.id).map(e=>({...e,threadCount:t.activityThreads[e.id]?.length??0})).sort((e,t)=>Date.parse(t.createdAt)-Date.parse(e.createdAt))}e.s(["CURRENT_OBJECTIVE_CHAT_SESSION_VERSION",0,2,"LEGACY_PROJECT_GOALS_METADATA_KEY",0,r,"PROJECT_HEALTH_METADATA_KEY",0,"project_health_snapshot","PROJECT_OBJECTIVES_METADATA_KEY",0,t,"buildObjectiveTimelineActivities",()=>T,"createProjectObjective",()=>N,"generateProjectObjectiveKey",()=>x,"readProjectObjectivesWorkspace",()=>w,"removeProjectObjective",()=>C,"upsertProjectObjective",()=>S,"writeProjectObjectivesWorkspace",()=>k])},99296,846279,e=>{"use strict";let t=(0,e.i(363732).default)("square-terminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]]);e.s(["default",()=>t],846279),e.s(["TerminalSquare",()=>t],99296)},235136,e=>{"use strict";var t=e.i(935851);function r(e){let[r,a]=(0,t.useState)([]),[n,s]=(0,t.useState)(!0),i=(0,t.useCallback)(async()=>{if(!e){a([]),s(!1);return}try{let t=await fetch(`/api/trackers/connections?projectId=${encodeURIComponent(e)}`),r=await t.json();a(Array.isArray(r.connections)?r.connections:[])}catch{a([])}finally{s(!1)}},[e]);(0,t.useEffect)(()=>{i()},[i]);let o=(0,t.useCallback)(async(t,r)=>{if(!e)return{ok:!1,error:"Missing projectId"};try{let a=await fetch("/api/trackers/connections",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:t,projectId:e,metadata:r})});if(!a.ok){let e=await a.json().catch(()=>({}));return{ok:!1,error:e.error||"Failed to add connection"}}return await i(),{ok:!0}}catch{return{ok:!1,error:"Failed to add connection"}}},[e,i]),l=(0,t.useCallback)(async t=>{if(!e)return{ok:!1,error:"Missing projectId"};try{let r=await fetch(`/api/trackers/${t}/status?projectId=${encodeURIComponent(e)}`,{method:"DELETE"});if(!r.ok){let e=await r.json().catch(()=>({}));return{ok:!1,error:e.error||"Failed to remove connection"}}return await i(),{ok:!0}}catch{return{ok:!1,error:"Failed to remove connection"}}},[e,i]);return{connections:r,loading:n,refresh:i,addConnection:o,removeConnection:l}}e.s(["useTrackerConnections",()=>r])},169433,e=>{"use strict";let t="agx:windowState",r={workspaceWidth:260,logPanelHeight:200,workspaceVisible:!0,logPanelVisible:!1,linearTicketPanelWidth:576,objectiveChatPanelWidth:440,objectiveListPanelWidth:320},a={lastThreadId:null,lastWorkspaceId:null},n={bounds:null,sidebar:r,scroll:a};function s(){return void 0!==window.localStorage}function i(){if(!s())return{...n};let e=window.localStorage.getItem(t);if(!e)return{...n};try{let t=JSON.parse(e);return{bounds:t.bounds||null,sidebar:{...r,...t.sidebar||{}},scroll:{...a,...t.scroll||{}}}}catch{return{...n}}}function o(){return i().sidebar}function l(e){let r=i();r.sidebar={...r.sidebar,...e};if(s())try{window.localStorage.setItem(t,JSON.stringify(r))}catch{}}function c(){return o().workspaceWidth}function d(e){l({workspaceWidth:e})}function u(){return o().linearTicketPanelWidth}function p(e){l({linearTicketPanelWidth:e})}function h(){return o().objectiveChatPanelWidth}function m(e){l({objectiveChatPanelWidth:e})}function f(){return o().objectiveListPanelWidth}function x(e){l({objectiveListPanelWidth:e})}e.s(["loadLinearTicketPanelWidth",()=>u,"loadObjectiveChatPanelWidth",()=>h,"loadObjectiveListPanelWidth",()=>f,"loadWorkspaceWidth",()=>c,"persistLinearTicketPanelWidth",()=>p,"persistObjectiveChatPanelWidth",()=>m,"persistObjectiveListPanelWidth",()=>x,"persistWorkspaceWidth",()=>d])},681619,594643,e=>{"use strict";var t=e.i(762281);function r({className:e}){return(0,t.jsx)("svg",{className:e,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z"})})}e.s(["LinearIcon",()=>r],594643);let a={linear:r,jira:function({className:e}){return(0,t.jsxs)("svg",{className:e,viewBox:"12 12 104 104",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:[(0,t.jsx)("path",{d:"M108.023 16H61.805c0 11.52 9.324 20.848 20.847 20.848h8.5v8.226c0 11.52 9.328 20.848 20.848 20.848V19.977A3.98 3.98 0 00108.023 16zm0 0"}),(0,t.jsx)("path",{d:"M85.121 39.04H38.902c0 11.519 9.325 20.847 20.844 20.847h8.504v8.226c0 11.52 9.328 20.848 20.848 20.848V43.016a3.983 3.983 0 00-3.977-3.977zm0 0"}),(0,t.jsx)("path",{d:"M62.219 62.078H16c0 11.524 9.324 20.848 20.848 20.848h8.5v8.23c0 11.52 9.328 20.844 20.847 20.844V66.059a3.984 3.984 0 00-3.976-3.98zm0 0"})]})}};function n({trackerType:e,className:r}){let n=a[e];return n?(0,t.jsx)(n,{className:r}):(0,t.jsx)(s,{className:r})}function s({className:e}){return(0,t.jsxs)("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2"}),(0,t.jsx)("rect",{x:"9",y:"3",width:"6",height:"4",rx:"2"}),(0,t.jsx)("path",{d:"M9 12h6"}),(0,t.jsx)("path",{d:"M9 16h6"})]})}e.s(["TrackerIcon",()=>n],681619)},55236,e=>{"use strict";let t=(0,e.i(363732).default)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);e.s(["Folder",()=>t],55236)},597628,e=>{"use strict";let t=(0,e.i(363732).default)("message-square",[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]]);e.s(["MessageSquare",()=>t],597628)},575479,e=>{"use strict";let t=(0,e.i(363732).default)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);e.s(["FileText",()=>t],575479)},51297,e=>{"use strict";let t=(0,e.i(363732).default)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);e.s(["Bot",()=>t],51297)},494999,e=>{"use strict";var t=e.i(762281),r=e.i(935851);function a({initialPath:e,onSelect:a,onCancel:n}){let[s,i]=(0,r.useState)(e||""),[o,l]=(0,r.useState)(null),[c,d]=(0,r.useState)(!1),[u,p]=(0,r.useState)(null),h=(0,r.useRef)(null),m=(0,r.useCallback)(async e=>{d(!0),p(null);try{let t=e?`?path=${encodeURIComponent(e)}`:"",r=await fetch(`/api/filesystem/browse${t}`),a=await r.json();if(!r.ok)return void p(a.error||"Failed to browse");l(a),i(a.current),h.current?.scrollTo(0,0)}catch{p("Failed to connect")}finally{d(!1)}},[]);return(0,r.useEffect)(()=>{m(e||"")},[]),(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] overflow-hidden shadow-lg",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-[var(--card-border)] bg-[var(--muted)]/30",children:[(0,t.jsx)("input",{value:s,onChange:e=>i(e.target.value),onKeyDown:e=>{"Enter"===e.key&&m(s)},className:"input text-xs flex-1 py-1",placeholder:"Enter path..."}),(0,t.jsx)("button",{type:"button",onClick:()=>m(s),className:"text-[10px] font-bold uppercase tracking-wider text-[var(--primary)] hover:underline px-2 py-1 shrink-0",children:"Go"})]}),(0,t.jsxs)("div",{ref:h,className:"max-h-48 overflow-y-auto",children:[c&&(0,t.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)] text-center",children:"Loading..."}),u&&(0,t.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--destructive)] text-center",children:u}),!c&&o&&(0,t.jsxs)("div",{className:"py-1",children:[o.parent&&(0,t.jsxs)("button",{type:"button",onClick:()=>m(o.parent),className:"w-full text-left px-3 py-1.5 text-sm hover:bg-[var(--muted)]/50 transition-colors flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"↑"}),(0,t.jsx)("span",{className:"text-[var(--muted-foreground)]",children:".."})]}),0===o.dirs.length&&!o.parent&&(0,t.jsx)("div",{className:"px-3 py-3 text-xs text-[var(--muted-foreground)] text-center",children:"No subdirectories"}),o.dirs.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>m(e.path),className:"w-full text-left px-3 py-1.5 text-sm hover:bg-[var(--muted)]/50 transition-colors flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"📁"}),(0,t.jsx)("span",{className:"truncate",children:e.name})]},e.path))]})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between px-3 py-2 border-t border-[var(--card-border)] bg-[var(--muted)]/30",children:[(0,t.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)] truncate max-w-[60%]",children:o?.current||s}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("button",{type:"button",onClick:n,className:"text-xs font-medium text-[var(--muted-foreground)] hover:underline px-2 py-1",children:"Cancel"}),(0,t.jsx)("button",{type:"button",onClick:()=>a(o?.current||s),className:"text-xs font-bold text-[var(--primary)] hover:underline px-2 py-1",children:"Select"})]})]})]})}e.s(["default",()=>a])},535208,e=>{"use strict";var t=e.i(762281),r=e.i(935851),a=e.i(494999);let n={name:"",description:""},s={name:"",path:"",notes:""};function i(){let[e,t]=(0,r.useState)(n),[a,i]=(0,r.useState)([s]),[o,l]=(0,r.useState)(!1),[c,d]=(0,r.useState)(null),u=(0,r.useCallback)((e,t,r)=>{i(a=>a.map((a,n)=>n===e?{...a,[t]:r}:a))},[]),p=(0,r.useCallback)(()=>{i(e=>[...e,{...s}])},[]),h=(0,r.useCallback)(e=>{i(t=>t.filter((t,r)=>r!==e))},[]),m=(0,r.useCallback)(()=>{t(n),i([s]),d(null)},[]),f=(0,r.useCallback)(e=>{t({name:e.name||"",description:e.description||""}),e.repos&&e.repos.length>0?i(e.repos.map(e=>({id:e.id,name:e.name||"",path:e.path||"",git_url:e.git_url||"",notes:e.notes||""}))):i([s]),d(null)},[]);return{form:e,setForm:t,repos:a,handleRepoChange:u,addRepo:p,removeRepo:h,resetForm:m,hydrateFromProject:f,isSubmitting:o,setIsSubmitting:l,formError:c,setFormError:d}}function o(e,t){let r=t.filter(e=>e.name.trim()&&e.path.trim()).map(e=>({...e.id?{id:e.id}:{},name:e.name.trim(),path:e.path.trim(),...e.git_url?.trim()?{git_url:e.git_url.trim()}:{},notes:e.notes.trim()||void 0}));return{name:e.name.trim(),description:e.description.trim()||void 0,repos:r.length?r:void 0}}function l({form:e,repos:n,isEditingProject:s,isSubmitting:i,onFieldChange:o,onRepoChange:l,onAddRepo:c,onRemoveRepo:d}){let[u,p]=(0,r.useState)([]),[h,m]=(0,r.useState)(null),f=(0,r.useRef)(0);(0,r.useEffect)(()=>{s?p([]):p(n.map((e,t)=>t)),f.current=n.length},[s,n.length]),(0,r.useEffect)(()=>{if(!s){f.current=n.length;return}let e=f.current;p(t=>{let r=t.filter(e=>e<n.length);return n.length>e&&r.push(...Array.from({length:n.length-e},(t,r)=>e+r)),r}),f.current=n.length},[s,n.length]);let x=(0,r.useCallback)(e=>{p(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},[]),v=(0,r.useCallback)(e=>!s||u.includes(e),[u,s]);return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsx)("div",{className:"grid gap-4",children:(0,t.jsxs)("label",{className:"space-y-1.5 block",children:[(0,t.jsx)("span",{className:"text-xs font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Project Name"}),(0,t.jsx)("input",{value:e.name,onChange:e=>o("name",e.target.value),className:"input w-full",placeholder:"e.g. AGX Cloud",disabled:i})]})}),(0,t.jsxs)("label",{className:"space-y-1.5 block",children:[(0,t.jsx)("span",{className:"text-xs font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Description"}),(0,t.jsx)("textarea",{value:e.description,onChange:e=>o("description",e.target.value),className:"input w-full h-24 resize-none",placeholder:"What is this project about?",disabled:i})]}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--card-border)] pb-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"text-sm font-bold uppercase tracking-widest text-[var(--muted-foreground)]",children:"Folders"}),(0,t.jsx)("p",{className:"text-[11px] text-[var(--muted-foreground)] mt-0.5",children:"Code repos, doc folders, design assets, config directories — any path your team needs access to."})]}),(0,t.jsx)("button",{type:"button",onClick:c,className:"text-xs font-semibold text-[var(--primary)] hover:underline flex-shrink-0",disabled:i,children:"+ Add Folder"})]}),(0,t.jsx)("div",{className:"space-y-4",children:n.map((e,r)=>(0,t.jsxs)("div",{className:"p-4 rounded-2xl border border-[var(--card-border)] bg-[var(--muted)]/20 space-y-3 relative group",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"text-xs font-bold text-[var(--foreground)] uppercase",children:["Folder #",r+1]}),s&&!v(r)?(0,t.jsxs)("div",{className:"mt-1 text-sm text-[var(--muted-foreground)]",children:[(0,t.jsx)("div",{children:e.name||"Unnamed folder"}),(0,t.jsx)("div",{className:"truncate",children:e.path||"No local path set"})]}):null]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[s&&(0,t.jsx)("button",{type:"button",onClick:()=>x(r),className:"text-xs font-semibold text-[var(--primary)] hover:underline",disabled:i,children:v(r)?"Done":"Edit"}),n.length>1&&(0,t.jsx)("button",{type:"button",onClick:()=>d(r),className:"text-xs font-semibold text-[var(--destructive)] hover:underline",disabled:i,children:"Remove"})]})]}),v(r)?(0,t.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,t.jsx)("input",{value:e.name,onChange:e=>l(r,"name",e.target.value),placeholder:"Name (e.g. Frontend, API Docs, Design System)",className:"input text-sm",disabled:i}),(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{value:e.path,onChange:e=>l(r,"path",e.target.value),placeholder:"Local path to folder",className:`input text-sm flex-1${e.name.trim()&&!e.path.trim()?" border-[var(--destructive)]/50 ring-1 ring-[var(--destructive)]/20":""}`,disabled:i}),(0,t.jsx)("button",{type:"button",onClick:async()=>{try{let e=await fetch("/api/filesystem/pick-folder",{method:"POST"}),t=await e.json();t.path&&l(r,"path",t.path)}catch{m(h===r?null:r)}},className:"px-3 py-2 rounded-xl border border-[var(--card-border)] bg-[var(--muted)]/30 hover:bg-[var(--muted)]/60 transition-colors text-xs font-semibold text-[var(--muted-foreground)] whitespace-nowrap",disabled:i,children:"Browse"})]}),e.name.trim()&&!e.path.trim()&&(0,t.jsx)("p",{className:"text-[11px] text-[var(--destructive)]",children:"Local path is required"})]}),h===r&&(0,t.jsx)("div",{className:"md:col-span-2",children:(0,t.jsx)(a.default,{initialPath:e.path||"",onSelect:e=>{l(r,"path",e),m(null)},onCancel:()=>m(null)})}),(0,t.jsx)("div",{className:"md:col-span-2",children:(0,t.jsx)("textarea",{value:e.notes,onChange:e=>l(r,"notes",e.target.value),placeholder:"Notes for this folder — e.g. coding conventions, deploy steps, ownership, doc standards...",className:"input text-sm w-full min-h-24 resize-y",disabled:i})})]}):null]},r))})]})]})}function c({isOpen:e,onClose:a,onSubmit:n,editingProject:s,form:i,repos:o,isSubmitting:c,formError:d,onFieldChange:u,onRepoChange:p,onAddRepo:h,onRemoveRepo:m}){let[f,x]=(0,r.useState)([]);(0,r.useEffect)(()=>{let e=!1;return async function(){if(!s)return x([]);try{let t=await fetch(`/api/knowledge-notes?scope=project&subjectId=${encodeURIComponent(s.id)}`),r=(t.ok?await t.json():{note:null}).note;e||x(r?.content?[{id:r.id,content:r.content,created_at:r.updatedAt??r.createdAt,source:r.sourceType}]:[])}catch{e||x([])}}(),()=>{e=!0}},[s]);let v=o.some(e=>e.name.trim()&&!e.path.trim()),g=!i.name.trim()||v;return e?(0,t.jsx)("div",{className:"modal-backdrop p-2 sm:p-4 z-50 overflow-y-auto flex items-center justify-center",onClick:e=>e.target===e.currentTarget&&a(),children:(0,t.jsxs)("div",{className:"modal-content w-full max-w-4xl mx-2 sm:mx-auto bg-[var(--card-bg)] rounded-3xl border border-[var(--card-border)] shadow-2xl animate-scale-in flex flex-col max-h-[90vh]",children:[(0,t.jsxs)("div",{className:"px-4 py-4 sm:px-8 sm:py-6 border-b border-[var(--card-border)] flex items-center justify-between flex-shrink-0",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-xl font-bold",children:s?"Edit Project":"Create New Project"}),(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5",children:s?"Update your project settings and folders.":"Define a new project and connect folders."})]}),(0,t.jsx)("button",{onClick:a,className:"p-2 rounded-xl hover:bg-[var(--muted)]/50 transition-colors",children:(0,t.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),(0,t.jsxs)("div",{className:"flex-1 overflow-y-auto p-4 sm:p-8",children:[s&&(0,t.jsx)("div",{className:"mb-6",children:(0,t.jsxs)("div",{className:"rounded-2xl border border-[var(--card-border)] bg-[var(--muted)]/20 p-4",children:[(0,t.jsx)("h3",{className:"text-sm font-bold uppercase tracking-widest text-[var(--muted-foreground)]",children:"Living Project Note"}),f.length>0?(0,t.jsx)("div",{className:"mt-3 space-y-2",children:f.slice(0,5).map(e=>(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] px-3 py-2 text-sm text-[var(--foreground)]",children:[(0,t.jsx)("div",{children:e.content}),e.created_at?(0,t.jsx)("div",{className:"mt-1 text-[11px] text-[var(--muted-foreground)]",children:new Date(e.created_at).toLocaleString()}):null]},e.id))}):(0,t.jsx)("p",{className:"mt-2 text-sm text-[var(--muted-foreground)]",children:"No project note yet."})]})}),(0,t.jsx)(l,{form:i,repos:o,isEditingProject:!!s,isSubmitting:c,onFieldChange:u,onRepoChange:p,onAddRepo:h,onRemoveRepo:m}),d&&(0,t.jsx)("div",{className:"mt-6 p-4 rounded-xl bg-[var(--destructive-muted)] border border-[var(--destructive)]/20 text-sm text-[var(--destructive)]",children:d})]}),(0,t.jsxs)("div",{className:"px-4 py-4 sm:px-8 sm:py-6 border-t border-[var(--card-border)] flex items-center justify-end gap-3 flex-shrink-0",children:[(0,t.jsx)("button",{onClick:a,className:"px-6 py-2 rounded-xl border border-[var(--card-border)] hover:bg-[var(--muted)]/50 transition-colors text-sm font-medium",children:"Cancel"}),(0,t.jsx)("button",{onClick:n,disabled:c||g,className:"btn-primary px-8 py-2 shadow-lg shadow-[var(--primary)]/20 min-w-[120px]",children:c?(0,t.jsxs)("span",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"spinner w-3 h-3 border-2 border-white/20 border-t-white"}),"Saving..."]}):s?"Save Changes":"Create Project"})]})]})}):null}e.s(["createProjectPayload",()=>o,"default",()=>c,"useProjectFormState",()=>i])},563975,e=>{"use strict";var t=e.i(762281),r=e.i(935851),a=e.i(506420),n=e.i(429056),s=e.i(169729),i=e.i(468947),o=e.i(721571),l=e.i(524780),c=e.i(51297);let d=(0,e.i(363732).default)("clock-3",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6h4",key:"135r8i"}]]);var u=e.i(575479),p=e.i(906724),h=e.i(597628),m=e.i(8707),f=e.i(938201),x=e.i(572665),v=e.i(797167),g=e.i(44054);function b({projectId:e}){let{isTouchLayout:n}=(0,g.useInputCapabilities)(),s=(0,a.useRouter)(),i=(0,a.usePathname)(),o=(0,r.useRef)(null),l=(0,r.useRef)(null),[b,y]=(0,r.useState)(""),[j,w]=(0,r.useState)([]),[k,N]=(0,r.useState)(0),[S,C]=(0,r.useState)(!1),[T,A]=(0,r.useState)(null),[_,E]=(0,r.useState)(!1),[P,M]=(0,r.useState)(0),[O,L]=(0,r.useState)(new Set),I=b.trim(),$=(0,r.useMemo)(()=>j.map(e=>({...e,visibleResults:O.has(e.id)?e.results:e.results.slice(0,3),hiddenCount:Math.max(0,e.results.length-3)})),[O,j]),R=(0,r.useMemo)(()=>$.flatMap(e=>e.visibleResults),[$]),D=(0,r.useMemo)(()=>R.map(e=>`${e.kind}:${e.id}`),[R]),U=(0,r.useCallback)(()=>{y(""),w([]),N(0),A(null),C(!1),M(0)},[]),W=(0,r.useCallback)(e=>{U(),E(!1),s.push(e.href)},[U,s]);(0,r.useEffect)(()=>{U(),E(!1),L(new Set)},[U,i]),(0,r.useEffect)(()=>{let e=e=>{o.current?.contains(e.target)||E(!1)};return window.addEventListener("pointerdown",e),()=>window.removeEventListener("pointerdown",e)},[]),(0,r.useEffect)(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&"k"===e.key.toLowerCase()&&(e.preventDefault(),l.current?.focus(),l.current?.select())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]),(0,r.useEffect)(()=>{_&&M(0)},[_,j]),(0,r.useEffect)(()=>{if(!I||I.length<2){w([]),N(0),A(null),C(!1),L(new Set);return}let t=!1;C(!0);let r=window.setTimeout(()=>{(async()=>{try{let r=new URLSearchParams({q:I}),a=await fetch(`/api/projects/${encodeURIComponent(e)}/search?${r.toString()}`,{cache:"no-store"}),n=await a.json().catch(()=>null);if(t)return;if(!a.ok){let e=n&&"object"==typeof n&&"error"in n?String(n.error):"Search failed";w([]),N(0),A(e);return}w(Array.isArray(n.sections)?n.sections:[]),N("number"==typeof n.total?n.total:0),A(null),L(new Set)}catch(e){if(t)return;console.error("Project search failed",e),w([]),N(0),A("Search failed")}finally{t||C(!1)}})()},220);return()=>{t=!0,window.clearTimeout(r)}},[I,e]);let F=_&&(I.length>0||S||null!==T),H=R.length>0?R[Math.max(0,Math.min(P,R.length-1))]:null,z=(0,r.useCallback)(e=>{L(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]);return(0,t.jsxs)("div",{ref:o,className:"relative w-full max-w-xl",children:[(0,t.jsxs)("div",{className:"group/search relative",children:[(0,t.jsx)(m.Search,{className:"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-[var(--app-shell-soft-text)] transition-colors group-focus-within/search:text-[var(--primary)]",strokeWidth:1.8}),(0,t.jsx)("input",{ref:l,type:"text",value:b,onFocus:()=>E(!0),onChange:e=>{y(e.target.value),E(!0)},onKeyDown:e=>{if("ArrowDown"===e.key&&R.length>0){e.preventDefault(),M(e=>(e+1)%R.length);return}if("ArrowUp"===e.key&&R.length>0){e.preventDefault(),M(e=>(e-1+R.length)%R.length);return}if("Enter"===e.key&&H){e.preventDefault(),W(H);return}"Escape"===e.key&&(I?U():(E(!1),l.current?.blur()))},placeholder:"Search objectives, tickets, tasks, teams, agents, and chat…",className:"h-8 w-full rounded-xl border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] pl-9 pr-16 text-xs font-medium text-[var(--foreground)] outline-none placeholder:text-[var(--app-shell-soft-text)] transition-all hover:border-[var(--app-shell-border-strong)] focus:border-[var(--primary)] focus:ring-2 focus:ring-[var(--ring)]"}),I?(0,t.jsxs)("div",{className:"absolute right-2 top-1/2 flex -translate-y-1/2 items-center gap-2",children:[(0,t.jsx)("span",{className:"text-[11px] font-bold text-[var(--muted-foreground)]",children:S?"…":k}),(0,t.jsx)("button",{type:"button",onClick:()=>{U(),l.current?.focus()},className:"inline-flex h-5 w-5 items-center justify-center rounded-md text-[var(--app-shell-soft-text)] transition-colors hover:bg-[var(--app-shell-subtle)] hover:text-[var(--foreground)]","aria-label":"Clear search",children:(0,t.jsx)(v.X,{className:"h-3.5 w-3.5"})})]}):n?null:(0,t.jsx)("kbd",{className:"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 rounded-md border border-[var(--app-shell-border)] bg-[var(--app-shell-subtle)] px-1.5 py-0.5 font-sans text-[10px] font-bold text-[var(--app-shell-soft-text)]",children:"⌘K"})]}),F?(0,t.jsx)("div",{className:"absolute left-0 right-0 top-[calc(100%+0.5rem)] z-50 overflow-hidden rounded-2xl border border-[var(--app-shell-border)] bg-[var(--app-shell-surface)] shadow-2xl shadow-black/20",children:(0,t.jsxs)("div",{className:"max-h-[28rem] overflow-y-auto p-2",children:[I.length<2?(0,t.jsx)("div",{className:"rounded-xl px-3 py-4 text-sm text-[var(--muted-foreground)]",children:"Keep typing to search across project entities."}):null,S?(0,t.jsxs)("div",{className:"flex items-center gap-2 rounded-xl px-3 py-4 text-sm text-[var(--muted-foreground)]",children:[(0,t.jsx)(p.Loader2,{className:"h-4 w-4 animate-spin"}),"Searching this project…"]}):null,!S&&T?(0,t.jsx)("div",{className:"rounded-xl px-3 py-4 text-sm text-rose-500",children:T}):null,S||T||!(I.length>=2)||0!==j.length?null:(0,t.jsx)("div",{className:"rounded-xl px-3 py-4 text-sm text-[var(--muted-foreground)]",children:"No matches in this project."}),!S&&!T&&$.map(e=>(0,t.jsxs)("div",{className:"mb-2 last:mb-0",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3 px-3 pb-1 pt-2",children:[(0,t.jsxs)("div",{className:"text-[10px] font-semibold uppercase tracking-[0.16em] text-[var(--app-shell-soft-text)]",children:[e.label,(0,t.jsx)("span",{className:"ml-1.5 text-[9px] text-[var(--muted-foreground)]",children:e.results.length})]}),e.results.length>3?(0,t.jsx)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>z(e.id),className:"text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",children:O.has(e.id)?"Collapse":`Show ${e.hiddenCount} more`}):null]}),(0,t.jsx)("div",{className:"space-y-1",children:e.visibleResults.map(e=>{let r,a,n=`${e.kind}:${e.id}`,s=D.findIndex(e=>e===n),i=s===P,o=function(e){switch(e){case"objective":return f.Target;case"linear_issue":return u.FileText;case"scheduled_task":return d;case"team":return x.Users;case"agent":return c.Bot;case"chat_thread":case"chat_message":return h.MessageSquare;default:return m.Search}}(e.kind);return(0,t.jsxs)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onMouseEnter:()=>M(s),onClick:()=>W(e),className:`flex w-full items-start gap-3 rounded-xl px-3 py-2.5 text-left transition-colors ${i?"bg-[var(--app-shell-subtle)] text-[var(--foreground)]":"text-[var(--foreground)] hover:bg-[var(--app-shell-subtle)]"}`,children:[(0,t.jsx)("span",{className:"mt-0.5 inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-lg border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] text-[var(--app-shell-muted)]",children:(0,t.jsx)(o,{className:"h-3.5 w-3.5",strokeWidth:1.75})}),(0,t.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,t.jsx)("span",{className:"truncate text-sm font-medium",children:e.title}),(0,t.jsx)("span",{className:"shrink-0 rounded-full bg-[var(--app-shell-subtle)] px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-[var(--app-shell-soft-text)]",children:e.label})]}),e.context?(0,t.jsx)("span",{className:"mt-0.5 block truncate text-xs text-[var(--muted-foreground)]",children:e.context}):null,e.description?(0,t.jsx)("span",{className:"mt-1 block text-xs leading-5 text-[var(--muted-foreground)]",children:(r=e.description.split(/(<\/?mark>)/g),a=!1,r.map((e,r)=>"<mark>"===e?(a=!0,null):"</mark>"===e?(a=!1,null):e?a?(0,t.jsx)("mark",{className:"rounded bg-amber-200/80 px-0.5 text-inherit",children:e},`mark-${r}`):(0,t.jsx)("span",{children:e},`text-${r}`):null))}):null]})]},n)})})]},e.id))]})}):null]})}var y=e.i(749410),j=e.i(524123),w=e.i(969039),k=e.i(235136);let N={home:!0,threads:!0,terminal:!0,objectives:!0,objectivesIsNew:!1,tracking:!0,teams:!0,folders:!0,scheduledTasks:!0,envVars:!0};var S=e.i(481248),C=e.i(169433);let T="agx-theme";function A({children:e,params:c}){let{slug:d}=(0,r.use)(c),{isTouchLayout:u}=(0,g.useInputCapabilities)(),p=(0,a.useRouter)(),h=(0,a.usePathname)(),{projects:m,isLoading:f,createProject:x,updateProject:v,deleteProject:A,addAgent:_,removeAgent:E}=(0,j.useProjectsWithAgents)(),{threads:P,isLoading:M,isCreating:O,deletingThreadId:L,renamingThreadId:I,isRestoringActiveThread:$,createThread:R,renameThread:D,deleteThread:U}=(0,w.useThreadState)(),[W,F]=(0,r.useState)([]),[H,z]=(0,r.useState)(!1),[V,B]=(0,r.useState)(368),[J,K]=(0,r.useState)(()=>{let e=window.localStorage.getItem(T);return"dark"===e||"light"===e?e:document.documentElement.classList.contains("dark")?"dark":"light"});(0,r.useEffect)(()=>{z((0,S.loadWorkspaceSidebarVisible)()),B((0,C.loadWorkspaceWidth)()||368)},[]),(0,r.useEffect)(()=>{let e="dark"===J;document.documentElement.classList.toggle("dark",e),document.documentElement.style.colorScheme=J,window.localStorage.setItem(T,J)},[J]),(0,r.useEffect)(()=>{fetch("/api/participants").then(e=>e.json()).then(e=>F(Array.isArray(e)?e:[])).catch(()=>F([]))},[]);let q=(0,r.useMemo)(()=>m.find(e=>e.slug===d)??null,[m,d]),Z=(0,r.useMemo)(()=>{let e=h.match(/\/projects\/[^/]+\/thread\/([^/]+)/);return e?.[1]?decodeURIComponent(e[1]):q?.thread_ids[0]??null},[q?.thread_ids,h]),G=(0,r.useMemo)(()=>h.includes("/linear")?"linear":h.includes("/automations")?"automations":h.includes("/thread/")?"thread":h.includes("/objectives")?"objectives":h.includes("/teams")?"teams":h.includes("/folders")?"folders":h.includes("/env-vars")?"env-vars":h.includes("/terminal")?"terminal":"home",[h]),{show:X,trackerConnections:Y}=function(e){let{connections:t,loading:a}=(0,k.useTrackerConnections)(e?.id??null);return(0,r.useMemo)(()=>{let e=t.map(e=>({type:e.type,connected:e.connected,connectedAt:e.connectedAt}));return a?{stage:"stage1",loading:!0,show:{...N},trackerConnections:[]}:{stage:"stage4",loading:!1,show:{...N},trackerConnections:e}},[a,t])}(q),Q=()=>{let e=!H;z(e),(0,S.persistWorkspaceSidebarVisible)(e)},ee=(0,r.useCallback)(e=>{B(e),(0,C.persistWorkspaceWidth)(e)},[]);return f?(0,t.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,t.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full"})}):q?(0,t.jsxs)("div",{className:"flex h-dvh min-h-0 overflow-hidden bg-[var(--background)]",children:[(0,t.jsx)(y.WorkspaceSidebar,{threads:P,participants:W,activeThreadId:Z,isLoading:M,isRestoringActiveThread:$,isCreating:O,deletingThreadId:L,renamingThreadId:I,onSelectThread:e=>p.push(`/projects/${d}/thread/${encodeURIComponent(e)}`),onCreateThread:R,onRenameThread:D,onDeleteThread:U,visible:H,onToggle:Q,width:V,onWidthChange:ee,projects:m,onCreateProject:x,onUpdateProject:v,onDeleteProject:A,onAddAgentToProject:_,onRemoveAgentFromProject:E,activeProjectId:q.id,activeProjectView:G,stageShow:X,trackerConnections:Y,onUpdateParticipant:async e=>{let t=await fetch("/api/participants",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error("Failed to update agent");let r=await t.json();F(e=>e.map(e=>e.id===r.id?r:e))},onSelectProject:e=>{let t=m.find(t=>t.id===e);t&&p.push(`/projects/${t.slug}`)}}),(0,t.jsxs)("div",{className:"flex-1 min-h-0 flex flex-col min-w-0 h-full overflow-hidden",children:[(0,t.jsxs)("div",{className:"desktop-titlebar flex items-center px-4 py-2 border-b border-[var(--app-shell-border)] bg-[var(--background)] shrink-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0 flex-shrink-0",children:[!H&&(0,t.jsx)("button",{type:"button",onClick:Q,className:"inline-flex h-9 w-9 items-center justify-center rounded-xl border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] text-[var(--muted-foreground)] transition-colors hover:bg-[var(--app-shell-subtle)] hover:text-[var(--foreground)]",title:"Show sidebar","aria-label":"Show sidebar",children:(0,t.jsx)(s.PanelLeftOpen,{className:"h-4 w-4"})}),h!==`/projects/${d}`&&(0,t.jsx)("button",{type:"button",onClick:()=>p.back(),className:"p-1 -ml-1 rounded-lg text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--app-shell-subtle)] transition-colors",children:(0,t.jsx)(n.ArrowLeft,{className:"w-4 h-4"})}),(0,t.jsx)("button",{type:"button",onClick:()=>p.push(`/projects/${d}`),className:`text-xs transition-colors ${"home"===G?"text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"}`,children:q.name}),"home"!==G&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:"\\"}),(0,t.jsx)("button",{type:"button",onClick:()=>p.push(`/projects/${d}/${"thread"===G?"":G}`),className:"text-xs text-[var(--foreground)] hover:text-[var(--muted-foreground)] transition-colors",children:{objectives:"Objectives",teams:"Teams",folders:"Folders","env-vars":"Environment Variables",linear:"Tasks",automations:"Scheduled Jobs",thread:"Chat",terminal:"Terminal"}[G]??G}),(0,t.jsx)("span",{id:"topbar-breadcrumb",className:"contents"})]})]}),(0,t.jsx)("div",{className:"flex-1 flex justify-center min-w-0 px-4",children:(0,t.jsx)(b,{projectId:q.id})}),(0,t.jsxs)("div",{className:"flex items-center gap-2 flex-shrink-0",children:[(0,t.jsx)(l.StatusIndicator,{}),(0,t.jsx)("button",{type:"button",onClick:()=>K(e=>"dark"===e?"light":"dark"),"aria-label":"dark"===J?"Switch to light theme":"Switch to dark theme",title:"dark"===J?"Switch to light theme":"Switch to dark theme",className:`inline-flex items-center justify-center rounded-lg text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)] hover:bg-[var(--app-shell-subtle)] ${u?"h-9 w-9":"h-7 w-7"}`,children:"dark"===J?(0,t.jsx)(i.Sun,{className:u?"h-4 w-4":"h-3.5 w-3.5"}):(0,t.jsx)(o.Moon,{className:u?"h-4 w-4":"h-3.5 w-3.5"})})]})]}),e]})]}):(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center h-full",children:[(0,t.jsx)("h2",{className:"text-xl font-bold mb-2",children:"Project Not Found"}),(0,t.jsxs)("p",{className:"text-[var(--muted-foreground)] mb-4",children:["The project “",d,"” does not exist or you do not have access to it."]}),(0,t.jsx)("button",{onClick:()=>p.push("/projects"),className:"px-4 py-2 bg-[var(--primary)] text-white rounded-lg hover:bg-[var(--primary-dark)] transition-colors",children:"Back to Projects"})]})}function _({children:e,params:a}){return(0,t.jsx)(r.Suspense,{fallback:(0,t.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-[var(--muted-foreground)]",children:"Loading project…"}),children:(0,t.jsx)(A,{params:a,children:e})})}e.s(["default",()=>_],563975)}]);
|