failproofai 0.0.9-beta.1 → 0.0.9-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +6 -6
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js +1 -2
- package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/page/build-manifest.json +3 -3
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/policies/page/build-manifest.json +3 -3
- package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
- package/.next/standalone/.next/server/app/policies/page.js +2 -2
- package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +3 -3
- package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +3 -3
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +4 -3
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page/build-manifest.json +3 -3
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/projects/page.js +2 -2
- package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0su~k6f._.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_codex-projects_ts_07qqk1g._.js +3 -0
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01743wx._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0.f_cyx._.js → [root-of-the-server]__0eu4j_n._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gs6wz4._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0it81ys._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0u4a9jq._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0dub28-._.js → [root-of-the-server]__0vrlxf2._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ymlddl._.js +18 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12.h2mg._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_04w00cm._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_0cdqd9w._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/lib_codex-projects_ts_0eosib~._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/lib_utils_ts_068jk73._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0zaq1hm._.js → node_modules_0ttbz1~._.js} +2 -2
- package/.next/standalone/.next/server/middleware-build-manifest.js +6 -6
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
- package/.next/standalone/.next/static/chunks/{0_c_yox08g_44.js → 01q52wg_amm60.js} +2 -2
- package/.next/standalone/.next/static/chunks/03egp37o1l629.js +1 -0
- package/.next/standalone/.next/static/chunks/06j6c0ofqjy0v.js +6 -0
- package/.next/standalone/.next/static/chunks/06x4-d1~o-opr.js +1 -0
- package/.next/standalone/.next/static/chunks/{0jryicwtm9z2g.js → 0e8c_1f7-8e7t.js} +3 -3
- package/.next/standalone/.next/static/chunks/0mumk7h5i.1xd.js +1 -0
- package/.next/standalone/.next/static/chunks/0n~s0gafwnp2y.js +1 -0
- package/.next/standalone/.next/static/chunks/{0bghqwo4iloy0.js → 0zdn~84f58hvf.js} +1 -1
- package/.next/standalone/.next/static/chunks/0zig0fh30t6ou.js +1 -0
- package/.next/standalone/.next/static/chunks/{0z-jh701rc~j8.js → 10mlwc4y_kqo2.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0kzk5-mh1_x53.js → 12simlrcfk3g2.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0w1f.k~gi-y6..js → 15_mi91qaeieu.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0ufq8smh~i7wc.js → 18a9xv2p3~x.9.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0s36is87fc9r2.js → turbopack-0o7k.hakttp4k.js} +1 -1
- package/.next/standalone/app/components/cli-badge.tsx +24 -0
- package/.next/standalone/app/components/project-list.tsx +13 -7
- package/.next/standalone/app/components/sessions-list.tsx +4 -2
- package/.next/standalone/app/policies/hooks-client.tsx +66 -10
- package/.next/standalone/app/project/[name]/page.tsx +49 -22
- package/.next/standalone/app/project/[name]/session/[sessionId]/page.tsx +51 -19
- package/.next/standalone/components/reach-developers.tsx +6 -1
- package/.next/standalone/lib/codex-projects.ts +250 -0
- package/.next/standalone/lib/codex-sessions.ts +414 -0
- package/.next/standalone/lib/format-date.ts +21 -0
- package/.next/standalone/lib/log-entries.ts +3 -3
- package/.next/standalone/lib/paths.ts +13 -0
- package/.next/standalone/lib/projects.ts +57 -3
- package/.next/standalone/lib/utils.ts +6 -22
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/server.js +1 -1
- package/bin/failproofai.mjs +1 -0
- package/dist/cli.mjs +1042 -122
- package/lib/codex-projects.ts +250 -0
- package/lib/codex-sessions.ts +414 -0
- package/lib/format-date.ts +21 -0
- package/lib/log-entries.ts +3 -3
- package/lib/paths.ts +13 -0
- package/lib/projects.ts +57 -3
- package/lib/utils.ts +6 -22
- package/package.json +1 -1
- package/scripts/launch.ts +2 -1
- package/src/hooks/builtin-policies.ts +7 -1
- package/src/hooks/hook-activity-store.ts +3 -0
- package/src/hooks/manager.ts +1 -1
- package/src/hooks/resolve-permission-mode.ts +6 -91
- package/.next/standalone/.next/server/chunks/[externals]__080wern._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b57.gk._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__03rd.z8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e74wa-._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vu.o-3._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +0 -17
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zqcovi._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__105.l_7._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0uy6m~m._.js +0 -3
- package/.next/standalone/.next/static/chunks/00b5h4r1el.6f.js +0 -1
- package/.next/standalone/.next/static/chunks/0fw2h.g66c0h3.js +0 -1
- package/.next/standalone/.next/static/chunks/0gu87mlr5ssnt.js +0 -6
- package/.next/standalone/.next/static/chunks/0igf3xbisp1lx.js +0 -1
- package/.next/standalone/.next/static/chunks/0p5zh2diw90a1.js +0 -1
- package/.next/standalone/.next/static/chunks/0vwqucikost_q.js +0 -1
- /package/.next/standalone/.next/static/{CiVeb_yiVt-O2JYrzGzB7 → SyaO-J1hupjAiRCG-Syzg}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{CiVeb_yiVt-O2JYrzGzB7 → SyaO-J1hupjAiRCG-Syzg}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{CiVeb_yiVt-O2JYrzGzB7 → SyaO-J1hupjAiRCG-Syzg}/_ssgManifest.js +0 -0
package/lib/log-entries.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { resolveProjectPath } from "./projects";
|
|
|
5
5
|
import { resolveSubagentPath } from "./resolve-subagent-path";
|
|
6
6
|
import { runtimeCache } from "./runtime-cache";
|
|
7
7
|
import { batchAll } from "./concurrency";
|
|
8
|
-
import { formatDate } from "./
|
|
8
|
+
import { formatDate } from "./format-date";
|
|
9
9
|
import { formatDuration } from "./format-duration";
|
|
10
10
|
|
|
11
11
|
// ── Source Tagging ──
|
|
@@ -115,14 +115,14 @@ export type LogEntryType = LogEntry["type"];
|
|
|
115
115
|
|
|
116
116
|
// ── Helpers ──
|
|
117
117
|
|
|
118
|
-
function formatTimestamp(date: Date): string {
|
|
118
|
+
export function formatTimestamp(date: Date): string {
|
|
119
119
|
const base = formatDate(date);
|
|
120
120
|
const ms = date.getMilliseconds().toString().padStart(3, "0");
|
|
121
121
|
return `${base}.${ms}`;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
/** Shared base fields present on every log entry. */
|
|
125
|
-
function baseEntry(raw: Record<string, unknown>, timestamp: string, date: Date, source: LogSource) {
|
|
125
|
+
export function baseEntry(raw: Record<string, unknown>, timestamp: string, date: Date, source: LogSource) {
|
|
126
126
|
return {
|
|
127
127
|
_source: source,
|
|
128
128
|
uuid: (raw.uuid as string) || "",
|
package/lib/paths.ts
CHANGED
|
@@ -29,6 +29,19 @@ export function decodeFolderName(name: string): string {
|
|
|
29
29
|
return name.replace(/-/g, "/");
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Encodes a filesystem path into a Claude-compatible project folder name.
|
|
34
|
+
* Inverse of `decodeFolderName`.
|
|
35
|
+
*/
|
|
36
|
+
export function encodeFolderName(path: string): string {
|
|
37
|
+
// Windows drive-letter pattern: "C:/code/project" → "C--code-project"
|
|
38
|
+
const driveMatch = /^([A-Za-z]):[\\/](.*)$/.exec(path);
|
|
39
|
+
if (driveMatch) {
|
|
40
|
+
return driveMatch[1] + "--" + driveMatch[2].replace(/[\\/]/g, "-");
|
|
41
|
+
}
|
|
42
|
+
return path.replace(/[\\/]/g, "-");
|
|
43
|
+
}
|
|
44
|
+
|
|
32
45
|
export function getClaudeProjectsPath(): string {
|
|
33
46
|
// Check if path is provided via environment variable
|
|
34
47
|
const envPath = process.env.CLAUDE_PROJECTS_PATH;
|
package/lib/projects.ts
CHANGED
|
@@ -11,17 +11,24 @@ import { getClaudeProjectsPath } from "./paths";
|
|
|
11
11
|
import { runtimeCache } from "./runtime-cache";
|
|
12
12
|
import { batchAll } from "./concurrency";
|
|
13
13
|
import { logWarn, logError } from "./logger";
|
|
14
|
-
import { formatDate } from "./
|
|
14
|
+
import { formatDate } from "./format-date";
|
|
15
15
|
|
|
16
16
|
export const UUID_RE = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;
|
|
17
17
|
export const PATH_TRAVERSAL_RE = /(^|[\\/])\.\.($|[\\/])/;
|
|
18
18
|
|
|
19
|
+
export type ProjectCli = "claude" | "codex";
|
|
20
|
+
|
|
19
21
|
export interface ProjectFolder {
|
|
20
22
|
name: string;
|
|
21
23
|
path: string;
|
|
22
24
|
isDirectory: boolean;
|
|
23
25
|
lastModified: Date;
|
|
24
26
|
lastModifiedFormatted?: string; // Pre-formatted date string to avoid hydration issues
|
|
27
|
+
/**
|
|
28
|
+
* Which agent CLIs this project's data was found in. Multiple entries when
|
|
29
|
+
* the same cwd has both Claude and Codex transcripts; rendered as badges.
|
|
30
|
+
*/
|
|
31
|
+
cli: ProjectCli[];
|
|
25
32
|
}
|
|
26
33
|
|
|
27
34
|
export interface SessionFile {
|
|
@@ -30,6 +37,9 @@ export interface SessionFile {
|
|
|
30
37
|
lastModified: Date;
|
|
31
38
|
lastModifiedFormatted?: string;
|
|
32
39
|
sessionId?: string;
|
|
40
|
+
/** Originating agent CLI. Set when the session list mixes Claude + Codex sources
|
|
41
|
+
* so the table can render a per-row CLI badge. */
|
|
42
|
+
cli?: ProjectCli;
|
|
33
43
|
}
|
|
34
44
|
|
|
35
45
|
/** Stats a path and returns mtime. Falls back to epoch (1970-01-01) on error
|
|
@@ -54,7 +64,7 @@ async function safeReaddir(dirPath: string) {
|
|
|
54
64
|
}
|
|
55
65
|
}
|
|
56
66
|
|
|
57
|
-
|
|
67
|
+
async function getClaudeProjectFolders(): Promise<ProjectFolder[]> {
|
|
58
68
|
try {
|
|
59
69
|
const projectsPath = getClaudeProjectsPath();
|
|
60
70
|
const entries = await safeReaddir(projectsPath);
|
|
@@ -72,6 +82,7 @@ export async function getProjectFolders(): Promise<ProjectFolder[]> {
|
|
|
72
82
|
isDirectory: true,
|
|
73
83
|
lastModified: mtime,
|
|
74
84
|
lastModifiedFormatted: formatDate(mtime),
|
|
85
|
+
cli: ["claude"],
|
|
75
86
|
} as ProjectFolder;
|
|
76
87
|
}),
|
|
77
88
|
16,
|
|
@@ -83,11 +94,53 @@ export async function getProjectFolders(): Promise<ProjectFolder[]> {
|
|
|
83
94
|
folders.sort((a, b) => b.lastModified.getTime() - a.lastModified.getTime());
|
|
84
95
|
return folders;
|
|
85
96
|
} catch (error) {
|
|
86
|
-
logError("Error reading project folders:", error);
|
|
97
|
+
logError("Error reading Claude project folders:", error);
|
|
87
98
|
return [];
|
|
88
99
|
}
|
|
89
100
|
}
|
|
90
101
|
|
|
102
|
+
/** Merges Claude + Codex project lists by encoded folder name. When both sources have
|
|
103
|
+
* the same name, keeps the Claude entry's `path` (so the Path column still points at
|
|
104
|
+
* `~/.claude/projects/<encoded>`), unions the `cli` arrays in [claude, codex] order,
|
|
105
|
+
* and takes the newer `lastModified`. */
|
|
106
|
+
function mergeProjectFolders(claude: ProjectFolder[], codex: ProjectFolder[]): ProjectFolder[] {
|
|
107
|
+
const byName = new Map<string, ProjectFolder>();
|
|
108
|
+
for (const f of claude) byName.set(f.name, { ...f, cli: [...f.cli] });
|
|
109
|
+
for (const f of codex) {
|
|
110
|
+
const existing = byName.get(f.name);
|
|
111
|
+
if (!existing) {
|
|
112
|
+
byName.set(f.name, { ...f, cli: [...f.cli] });
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const mergedCli: ProjectCli[] = [...existing.cli];
|
|
116
|
+
for (const c of f.cli) if (!mergedCli.includes(c)) mergedCli.push(c);
|
|
117
|
+
const newer = f.lastModified.getTime() > existing.lastModified.getTime() ? f : existing;
|
|
118
|
+
byName.set(f.name, {
|
|
119
|
+
...existing,
|
|
120
|
+
cli: mergedCli,
|
|
121
|
+
lastModified: newer.lastModified,
|
|
122
|
+
lastModifiedFormatted: newer.lastModifiedFormatted,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
const merged = Array.from(byName.values());
|
|
126
|
+
merged.sort((a, b) => b.lastModified.getTime() - a.lastModified.getTime());
|
|
127
|
+
return merged;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export async function getProjectFolders(): Promise<ProjectFolder[]> {
|
|
131
|
+
// Lazy import to keep `lib/codex-projects.ts` out of the dep graph for callers that
|
|
132
|
+
// only need Claude helpers (e.g. CLI codepaths).
|
|
133
|
+
const { getCodexProjects } = await import("./codex-projects");
|
|
134
|
+
const [claude, codex] = await Promise.all([
|
|
135
|
+
getClaudeProjectFolders(),
|
|
136
|
+
getCodexProjects().catch((error) => {
|
|
137
|
+
logError("Error reading Codex projects:", error);
|
|
138
|
+
return [] as ProjectFolder[];
|
|
139
|
+
}),
|
|
140
|
+
]);
|
|
141
|
+
return mergeProjectFolders(claude, codex);
|
|
142
|
+
}
|
|
143
|
+
|
|
91
144
|
/**
|
|
92
145
|
* Gets the full path to a specific project folder
|
|
93
146
|
* @param projectName - Name of the project folder
|
|
@@ -157,6 +210,7 @@ export async function getSessionFiles(projectPath: string): Promise<SessionFile[
|
|
|
157
210
|
lastModified: mtime,
|
|
158
211
|
lastModifiedFormatted: formatDate(mtime),
|
|
159
212
|
sessionId: extractSessionId(entry.name),
|
|
213
|
+
cli: "claude",
|
|
160
214
|
} as SessionFile;
|
|
161
215
|
}),
|
|
162
216
|
16,
|
package/lib/utils.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Tailwind class-name merger.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* -
|
|
4
|
+
* `cn()` combines `clsx` (conditional class composition) with `tailwind-merge`
|
|
5
|
+
* (last-wins conflict resolution for Tailwind utility classes).
|
|
6
|
+
*
|
|
7
|
+
* Date formatting lives in lib/format-date.ts — kept separate so server-side
|
|
8
|
+
* callers don't need to load clsx/tailwind-merge just to print a timestamp.
|
|
6
9
|
*/
|
|
7
10
|
import { clsx, type ClassValue } from "clsx";
|
|
8
11
|
import { twMerge } from "tailwind-merge";
|
|
@@ -10,22 +13,3 @@ import { twMerge } from "tailwind-merge";
|
|
|
10
13
|
export function cn(...inputs: ClassValue[]) {
|
|
11
14
|
return twMerge(clsx(inputs));
|
|
12
15
|
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Formats a date to a readable string format (e.g., "Jan 15, 2024, 3:45 PM").
|
|
16
|
-
*
|
|
17
|
-
* Creates a new Intl.DateTimeFormat on each call intentionally — this runs
|
|
18
|
-
* server-side where there's no shared state concern. The client-side hot-path
|
|
19
|
-
* formatter in lib/log-format.ts caches its instance at module scope instead.
|
|
20
|
-
*/
|
|
21
|
-
export function formatDate(date: Date): string {
|
|
22
|
-
return new Intl.DateTimeFormat("en-US", {
|
|
23
|
-
month: "short",
|
|
24
|
-
day: "numeric",
|
|
25
|
-
year: "numeric",
|
|
26
|
-
hour: "numeric",
|
|
27
|
-
minute: "2-digit",
|
|
28
|
-
hour12: true,
|
|
29
|
-
}).format(date);
|
|
30
|
-
}
|
|
31
|
-
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "failproofai",
|
|
3
|
-
"version": "0.0.9-beta.
|
|
3
|
+
"version": "0.0.9-beta.2",
|
|
4
4
|
"description": "The easiest way to manage policies that keep your AI agents reliable, on-task, and running autonomously — for Claude Code & the Agents SDK",
|
|
5
5
|
"bin": {
|
|
6
6
|
"failproofai": "./dist/cli.mjs"
|
package/scripts/launch.ts
CHANGED
|
@@ -21,7 +21,8 @@ export function launch(mode: "dev" | "start"): void {
|
|
|
21
21
|
/_/ v${version}
|
|
22
22
|
`);
|
|
23
23
|
console.log(` ⭐ Star us: https://github.com/exospherehost/failproofai`);
|
|
24
|
-
console.log(` 📖 Docs: https://befailproof.ai
|
|
24
|
+
console.log(` 📖 Docs: https://befailproof.ai`);
|
|
25
|
+
console.log(` 💬 Slack: https://join.slack.com/t/failproofai/shared_invite/zt-3v63b7k5e-O3NBHmj8X6n9gZSGDx6ggQ\n`);
|
|
25
26
|
|
|
26
27
|
let claudeProjectsPath = parsedPath;
|
|
27
28
|
|
|
@@ -664,10 +664,16 @@ const READ_LIKE_CMDS =
|
|
|
664
664
|
* This catches `cat "/etc/passwd"` while avoiding false positives from grep
|
|
665
665
|
* patterns and find glob patterns that appear in later pipeline stages.
|
|
666
666
|
* Unquoted absolute paths are extracted from the whole command as before.
|
|
667
|
+
*
|
|
668
|
+
* The negative lookbehind also excludes glob metacharacters ('*', '?') and
|
|
669
|
+
* separator characters that appear in compound argv tokens (':' for Docker
|
|
670
|
+
* volume mounts and PATH-like lists, '=' for env var assignments) so that a
|
|
671
|
+
* suffix like '/dashboard.mdx' in 'docs/STAR/dashboard.mdx' or '/docs' in
|
|
672
|
+
* '-v HOST_DIR:/docs' is not misread as a standalone absolute path.
|
|
667
673
|
*/
|
|
668
674
|
function extractAbsolutePaths(command: string): string[] {
|
|
669
675
|
const paths: string[] = [];
|
|
670
|
-
const pathRe = /(?<![a-zA-Z0-9_
|
|
676
|
+
const pathRe = /(?<![a-zA-Z0-9_.\-~\\*?:=])(?:~\/[^\s;|&"'()\[\]{}]*|~(?=\s|$|[;|&"'()\[\]{}])|\/[^\s;|&"'()\[\]{}]*)/g;
|
|
671
677
|
|
|
672
678
|
function addPaths(s: string): void {
|
|
673
679
|
pathRe.lastIndex = 0;
|
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
} from "node:fs";
|
|
24
24
|
import { join } from "node:path";
|
|
25
25
|
import { homedir } from "node:os";
|
|
26
|
+
import type { IntegrationType } from "./types";
|
|
26
27
|
|
|
27
28
|
export const PAGE_SIZE = 25;
|
|
28
29
|
|
|
@@ -61,6 +62,7 @@ export interface HookActivityFilters {
|
|
|
61
62
|
eventType?: string;
|
|
62
63
|
policyName?: string;
|
|
63
64
|
sessionId?: string;
|
|
65
|
+
integration?: IntegrationType;
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
export interface HookActivityStats {
|
|
@@ -281,6 +283,7 @@ export function searchHookActivity(
|
|
|
281
283
|
) {
|
|
282
284
|
return false;
|
|
283
285
|
}
|
|
286
|
+
if (filters.integration && entry.integration !== filters.integration) return false;
|
|
284
287
|
return true;
|
|
285
288
|
});
|
|
286
289
|
|
package/src/hooks/manager.ts
CHANGED
|
@@ -186,7 +186,7 @@ export async function installHooks(
|
|
|
186
186
|
);
|
|
187
187
|
}
|
|
188
188
|
writeScopedHooksConfig(configToWrite, scope, cwd);
|
|
189
|
-
console.log(`\nEnabled ${selectedPolicies.length} policy(ies): ${selectedPolicies.join(", ")}`);
|
|
189
|
+
console.log(`\nEnabled ${selectedPolicies.length} policy(ies): ${selectedPolicies.join(", ")}\n`);
|
|
190
190
|
if (removeCustomHooks) {
|
|
191
191
|
console.log("Custom hooks path cleared.");
|
|
192
192
|
} else if (configToWrite.customPoliciesPath) {
|
|
@@ -11,15 +11,12 @@
|
|
|
11
11
|
* and map: never → full-auto, on-request → default. Other values pass
|
|
12
12
|
* through. If the transcript can't be read, falls back to "default".
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* common case), (2) cache the resolved transcript path to disk keyed by
|
|
18
|
-
* sessionId so subsequent hooks in the same session skip the walk entirely.
|
|
14
|
+
* Transcript discovery (cache → today/yesterday → full tree scan) lives
|
|
15
|
+
* in `lib/codex-sessions.ts` and is shared with the dashboard's Codex
|
|
16
|
+
* session viewer.
|
|
19
17
|
*/
|
|
20
|
-
import { readFileSync
|
|
21
|
-
import {
|
|
22
|
-
import { homedir } from "node:os";
|
|
18
|
+
import { readFileSync } from "node:fs";
|
|
19
|
+
import { findCodexTranscript } from "../../lib/codex-sessions";
|
|
23
20
|
import type { IntegrationType } from "./types";
|
|
24
21
|
|
|
25
22
|
export function resolvePermissionMode(
|
|
@@ -38,91 +35,9 @@ export function resolvePermissionMode(
|
|
|
38
35
|
return "default";
|
|
39
36
|
}
|
|
40
37
|
|
|
41
|
-
const CACHE_PATH = join(homedir(), ".failproofai", "cache", "codex-session-paths.json");
|
|
42
|
-
|
|
43
|
-
function readCache(): Record<string, string> {
|
|
44
|
-
try {
|
|
45
|
-
if (!existsSync(CACHE_PATH)) return {};
|
|
46
|
-
return JSON.parse(readFileSync(CACHE_PATH, "utf-8")) as Record<string, string>;
|
|
47
|
-
} catch {
|
|
48
|
-
return {};
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function writeCacheEntry(sessionId: string, path: string): void {
|
|
53
|
-
try {
|
|
54
|
-
mkdirSync(dirname(CACHE_PATH), { recursive: true });
|
|
55
|
-
const cache = readCache();
|
|
56
|
-
cache[sessionId] = path;
|
|
57
|
-
writeFileSync(CACHE_PATH, JSON.stringify(cache), "utf-8");
|
|
58
|
-
} catch {
|
|
59
|
-
// Cache is best-effort — never block the hook on a write failure.
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function dirSearch(dir: string, sessionId: string): string | null {
|
|
64
|
-
try {
|
|
65
|
-
for (const f of readdirSync(dir, { withFileTypes: true })) {
|
|
66
|
-
if (f.isFile() && f.name.includes(sessionId) && f.name.endsWith(".jsonl")) {
|
|
67
|
-
return join(dir, f.name);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
} catch {
|
|
71
|
-
// dir doesn't exist or unreadable
|
|
72
|
-
}
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function findCodexTranscriptSync(sessionId: string): string | null {
|
|
77
|
-
// 1) Cache hit — fastest path, O(1).
|
|
78
|
-
const cache = readCache();
|
|
79
|
-
const cached = cache[sessionId];
|
|
80
|
-
if (cached && existsSync(cached)) return cached;
|
|
81
|
-
|
|
82
|
-
const root = join(homedir(), ".codex", "sessions");
|
|
83
|
-
|
|
84
|
-
// 2) Today + yesterday (covers the active-session common case).
|
|
85
|
-
const today = new Date();
|
|
86
|
-
const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
|
|
87
|
-
const datedDirs = [today, yesterday].map((d) => {
|
|
88
|
-
const y = String(d.getUTCFullYear());
|
|
89
|
-
const m = String(d.getUTCMonth() + 1).padStart(2, "0");
|
|
90
|
-
const day = String(d.getUTCDate()).padStart(2, "0");
|
|
91
|
-
return join(root, y, m, day);
|
|
92
|
-
});
|
|
93
|
-
for (const dir of datedDirs) {
|
|
94
|
-
const hit = dirSearch(dir, sessionId);
|
|
95
|
-
if (hit) {
|
|
96
|
-
writeCacheEntry(sessionId, hit);
|
|
97
|
-
return hit;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// 3) Fallback — full tree scan (rare; older or out-of-clock-skew sessions).
|
|
102
|
-
try {
|
|
103
|
-
for (const y of readdirSync(root, { withFileTypes: true })) {
|
|
104
|
-
if (!y.isDirectory()) continue;
|
|
105
|
-
for (const m of readdirSync(join(root, y.name), { withFileTypes: true })) {
|
|
106
|
-
if (!m.isDirectory()) continue;
|
|
107
|
-
for (const d of readdirSync(join(root, y.name, m.name), { withFileTypes: true })) {
|
|
108
|
-
if (!d.isDirectory()) continue;
|
|
109
|
-
const hit = dirSearch(join(root, y.name, m.name, d.name), sessionId);
|
|
110
|
-
if (hit) {
|
|
111
|
-
writeCacheEntry(sessionId, hit);
|
|
112
|
-
return hit;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
} catch {
|
|
118
|
-
// Session may not have flushed yet; or path doesn't exist.
|
|
119
|
-
}
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
38
|
function resolveCodexMode(sessionId: string): string | undefined {
|
|
124
39
|
try {
|
|
125
|
-
const path =
|
|
40
|
+
const path = findCodexTranscript(sessionId);
|
|
126
41
|
if (!path) return undefined;
|
|
127
42
|
for (const line of readFileSync(path, "utf-8").split("\n")) {
|
|
128
43
|
if (!line.includes("turn_context")) continue;
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[93695,(e,r,s)=>{r.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},14747,(e,r,s)=>{r.exports=e.x("path",()=>require("path"))},18622,(e,r,s)=>{r.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"))},56704,(e,r,s)=>{r.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,r,s)=>{r.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"))},24725,(e,r,s)=>{r.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"))},70406,(e,r,s)=>{r.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},46786,(e,r,s)=>{r.exports=e.x("os",()=>require("os"))},24868,(e,r,s)=>{r.exports=e.x("fs/promises",()=>require("fs/promises"))},22734,(e,r,s)=>{r.exports=e.x("fs",()=>require("fs"))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Bexternals%5D__080wern._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[88947,(e,t,r)=>{t.exports=e.x("stream",()=>require("stream"))},9311,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250),a=e.i(59756),o=e.i(61916),i=e.i(74677),s=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),c=e.i(47587),p=e.i(66012),f=e.i(70101),h=e.i(26937),m=e.i(10372),R=e.i(93695);e.i(20232);var w=e.i(220),v=e.i(89171),g=e.i(22734),y=e.i(24868),E=e.i(88947);let C={info:0,warn:1,error:2};function x(e){return C[e]>=C.warn}function A(e){return`[failproofai${new Date().toISOString()}] ${e}`}function T(e,t){void 0!==t?console.error(A("ERROR"),e,t):console.error(A("ERROR"),e)}var N=e.i(14747),j=e.i(46786);function S(){let e=process.env.CLAUDE_PROJECTS_PATH;return e||(0,N.join)((0,j.homedir)(),".claude","projects")}function P(e,t,r){let n=new Map,a=new Map,o=r?.maxSize;return async(...r)=>{let i=JSON.stringify(r),s=n.get(i);if(s&&Date.now()<s.expiry)return s.data;let l=a.get(i);if(l)return l;let u=e(...r).then(e=>{if(a.delete(i),o&&n.size>=o){let e=n.keys().next().value;n.delete(e)}return n.set(i,{data:e,expiry:Date.now()+1e3*t}),e},e=>{throw a.delete(i),e});return a.set(i,u),u}}async function O(e,t){let r=Array(e.length),n=0;async function a(){for(;n<e.length;){let t=n++;try{r[t]={status:"fulfilled",value:await e[t]()}}catch(e){r[t]={status:"rejected",reason:e}}}}let o=Array.from({length:Math.min(t,e.length)},()=>a());return await Promise.all(o),r}function b(e){return new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0}).format(e)}let M=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;async function D(e,t){try{return(await (0,y.stat)(e)).mtime}catch(e){var r;return r=`Failed to stat ${t}:`,x("warn")&&(void 0!==e?console.warn(A("WARN"),r,e):console.warn(A("WARN"),r)),new Date(0)}}async function I(e){try{if(!(await (0,y.stat)(e)).isDirectory())return null;return await (0,y.readdir)(e,{withFileTypes:!0})}catch{return null}}function _(e){let t=e.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i);return t?t[0]:void 0}async function q(e){try{let t=await I(e);if(!t)return[];let r=t.filter(e=>e.isFile()&&e.name.endsWith(".jsonl")&&_(e.name)),n=(await O(r.map(t=>async()=>{let r=(0,N.join)(e,t.name),n=await D(r,t.name);return{name:t.name,path:r,lastModified:n,lastModifiedFormatted:b(n),sessionId:_(t.name)}}),16)).filter(e=>"fulfilled"===e.status).map(e=>e.value);return n.sort((e,t)=>t.lastModified.getTime()-e.lastModified.getTime()),n}catch(e){return T("Error reading session files:",e),[]}}function $(e,t){return v.NextResponse.json({error:e},{status:t})}async function H(e,{params:t}){let r,{project:n,session:a}=await t;try{r=function(e,t){if(!M.test(t))throw RangeError("Invalid session ID");let r=function(e){if(!e)throw RangeError("Empty project name");if(/^[/\\]/.test(e))throw RangeError("Absolute project name");let t=(0,N.resolve)(S()),r=(0,N.resolve)((0,N.join)(t,e));if(!r.startsWith(t+N.sep))throw RangeError("Project path escapes root");return r}(e);return(0,N.join)(r,`${t}.jsonl`)}(n,a)}catch{return $("Invalid project or session",400)}!function(e,t,r){if(!x("info"))return;let n=[`user=${e}`,`action=${t}`];r&&n.push(r),console.log(A("ACTIVITY"),n.join(" "))}("anonymous","download-log",`project=${n} session=${a}`);try{await (0,y.stat)(r);let e=(0,g.createReadStream)(r),t=E.Readable.toWeb(e);return new v.NextResponse(t,{headers:{"Content-Type":"application/x-ndjson","Content-Disposition":`attachment; filename="${a}.jsonl"`}})}catch(e){if("ENOENT"===e.code||e instanceof RangeError)return $("Session log not found",404);return $("Failed to read session log",500)}}P(async function e(){try{let e=S(),t=await I(e);if(!t)return[];let r=(await O(t.filter(e=>e.isDirectory()).map(t=>async()=>{let r=(0,N.join)(e,t.name),n=await D(r,t.name);return{name:t.name,path:r,isDirectory:!0,lastModified:n,lastModifiedFormatted:b(n)}}),16)).filter(e=>"fulfilled"===e.status).map(e=>e.value);return r.sort((e,t)=>t.lastModified.getTime()-e.lastModified.getTime()),r}catch(e){return T("Error reading project folders:",e),[]}},30),P(e=>q(e),30),e.s(["GET",0,H],32525);var U=e.i(32525);let F=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/download/[project]/[session]/route",pathname:"/api/download/[project]/[session]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/download/[project]/[session]/route.ts",nextConfigOutput:"standalone",userland:U,...{}}),{workAsyncStorage:k,workUnitAsyncStorage:K,serverHooks:W}=F;async function B(e,t,n){n.requestMeta&&(0,a.setRequestMeta)(e,n.requestMeta),F.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/download/[project]/[session]/route";v=v.replace(/\/index$/,"")||"/";let g=await F.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!g)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:y,params:E,nextConfig:C,parsedUrl:x,isDraftMode:A,prerenderManifest:T,routerServerContext:N,isOnDemandRevalidate:j,revalidateOnlyGenerated:S,resolvedPathname:P,clientReferenceManifest:O,serverActionsManifest:b}=g,M=(0,s.normalizeAppPath)(v),D=!!(T.dynamicRoutes[M]||T.routes[P]),I=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,x,!1):t.end("This page could not be found"),null);if(D&&!A){let e=!!T.routes[P],t=T.dynamicRoutes[M];if(t&&!1===t.fallback&&!e){if(C.adapterPath)return await I();throw new R.NoFallbackError}}let _=null;!D||F.isDev||A||(_="/index"===(_=P)?"/":_);let q=!0===F.isDev||!D,$=D&&!q;b&&O&&(0,i.setManifestsSingleton)({page:v,clientReferenceManifest:O,serverActionsManifest:b});let H=e.method||"GET",U=(0,o.getTracer)(),k=U.getActiveScopeSpan(),K=!!(null==N?void 0:N.isWrappedByNextServer),W=!!(0,a.getRequestMeta)(e,"minimalMode"),B=(0,a.getRequestMeta)(e,"incrementalCache")||await F.getIncrementalCache(e,C,T,W);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let L={params:E,previewProps:T.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts},cacheComponents:!!C.cacheComponents,supportsDynamicResponse:q,incrementalCache:B,cacheLifeProfiles:C.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>F.onRequestError(e,t,n,a,N)},sharedContext:{buildId:y}},G=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),z=u.NextRequestAdapter.fromNodeNextRequest(G,(0,u.signalFromNodeResponse)(t));try{let a,i=async e=>F.handle(z,L).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=U.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=`${H} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t),a&&a!==e&&(a.setAttribute("http.route",n),a.updateName(t))}else e.updateName(`${H} ${v}`)}),s=async a=>{var o,s;let l=async({previousCacheEntry:r})=>{try{if(!W&&j&&S&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await i(a);e.fetchMetrics=L.renderOpts.fetchMetrics;let s=L.renderOpts.pendingWaitUntil;s&&n.waitUntil&&(n.waitUntil(s),s=void 0);let l=L.renderOpts.collectedTags;if(!D)return await (0,p.sendResponse)(G,V,o,L.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(o.headers);l&&(t[m.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==L.renderOpts.collectedRevalidate&&!(L.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&L.renderOpts.collectedRevalidate,n=void 0===L.renderOpts.collectedExpire||L.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:L.renderOpts.collectedExpire;return{value:{kind:w.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 F.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:j})},!1,N),t}},u=await F.handleResponse({req:e,nextConfig:C,cacheKey:_,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:j,revalidateOnlyGenerated:S,responseGenerator:l,waitUntil:n.waitUntil,isMinimalMode:W});if(!D)return null;if((null==u||null==(o=u.value)?void 0:o.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(s=u.value)?void 0:s.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});W||t.setHeader("x-nextjs-cache",j?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,f.fromNodeOutgoingHttpHeaders)(u.value.headers);return W&&D||d.delete(m.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,h.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(G,V,new Response(u.value.body,{headers:d,status:u.value.status||200})),null};K&&k?await s(k):(a=U.getActiveScopeSpan(),await U.withPropagatedContext(e.headers,()=>U.trace(d.BaseServerSpan.handleRequest,{spanName:`${H} ${v}`,kind:o.SpanKind.SERVER,attributes:{"http.method":H,"http.target":e.url}},s),void 0,!K))}catch(t){if(t instanceof R.NoFallbackError||await F.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:j})},!1,N),D)throw t;return await (0,p.sendResponse)(G,V,new Response(null,{status:500})),null}}e.s(["handler",0,B,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:k,workUnitAsyncStorage:K})},"routeModule",0,F,"serverHooks",0,W,"workAsyncStorage",0,k,"workUnitAsyncStorage",0,K],9311)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0b57.gk._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[14747,(a,b,c)=>{b.exports=a.x("path",()=>require("path"))},46786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},27950,45481,33540,24451,a=>{"use strict";a.s(["FILTER_PRESETS",0,[{value:"all",label:"All"},{value:"last-hour",label:"Last Hour"},{value:"today",label:"Today"},{value:"last-7-days",label:"Last 7 Days"},{value:"last-30-days",label:"Last 30 Days"}],"ITEMS_PER_PAGE",0,25,"filterByDate",0,function(a,b,c){if("all"===b)return a;if("custom"===b){let b,d,e=c.from?((b=new Date(c.from)).setHours(0,0,0,0),b):null,f=c.to?((d=new Date(c.to)).setHours(23,59,59,999),d):null;return a.filter(a=>(!e||!(a.lastModified<e))&&(!f||!(a.lastModified>f)))}let d=function(a){let b=new Date;switch(a){case"last-hour":return new Date(b.getTime()-36e5);case"today":return new Date(b.getFullYear(),b.getMonth(),b.getDate());case"last-7-days":return new Date(b.getTime()-6048e5);case"last-30-days":return new Date(b.getTime()-2592e6);default:return null}}(b);return d?a.filter(a=>a.lastModified>=d):a},"rehydrateDates",0,function(a){return a.map(a=>({...a,lastModified:a.lastModified instanceof Date?a.lastModified:new Date(a.lastModified)}))}],27950);var b=a.i(72131);a.s(["useFilterState",0,function(a=[],c){let[d,e]=(0,b.useState)(c?.filterPreset??"all"),[f,g]=(0,b.useState)(c?.dateRange??{from:null,to:null}),[h,i]=(0,b.useState)(c?.currentPage??1),j=`${d}|${JSON.stringify(f)}|${JSON.stringify(a)}`,[k,l]=(0,b.useState)(j);j!==k&&(l(j),i(1));let m=(0,b.useCallback)(a=>{e(a),"custom"!==a&&g({from:null,to:null})},[]);return{filterPreset:d,dateRange:f,currentPage:h,setCurrentPage:i,handlePresetChange:m,handleDateRangeChange:(0,b.useCallback)((a,b)=>{e("custom"),g(c=>({...c,[a]:b?new Date(b):null}))},[]),clearFilters:(0,b.useCallback)(()=>{e("all"),g({from:null,to:null})},[])}}],45481);var c=a.i(64831);let d=(0,c.default)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);a.s(["Search",0,d],33540);var e=a.i(87924);let f=(0,c.default)("calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);a.s(["default",0,function({id:a,value:b,stringValue:c,onChange:d,"aria-label":g}){let h=null!=c?c:b?b.toISOString().split("T")[0]:"";return(0,e.jsxs)("div",{className:"relative group",children:[(0,e.jsx)("input",{type:"date",id:a,value:h,onChange:a=>d(a.target.value),"aria-label":g,className:"date-input px-3 py-2 pr-8 text-sm bg-input border border-border rounded-md text-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent transition-all hover:border-primary/50 w-[200px]"}),(0,e.jsx)("label",{htmlFor:a,className:"absolute right-2.5 top-1/2 -translate-y-1/2 cursor-pointer pointer-events-auto z-10 p-1 rounded hover:bg-muted/50 transition-colors",onClick:b=>{b.preventDefault();let c=document.getElementById(a);c&&"function"==typeof c.showPicker?c.showPicker():c?.click()},children:(0,e.jsx)(f,{className:"w-4 h-4 text-primary group-hover:text-primary/80 transition-colors"})})]})}],24451)},90619,95947,a=>{"use strict";var b=a.i(50944),c=a.i(72131);function d(a){let b=a.getFullYear(),c=String(a.getMonth()+1).padStart(2,"0"),d=String(a.getDate()).padStart(2,"0");return`${b}-${c}-${d}`}function e(a){var b;if(!a||(b=a,!/^\d{4}-\d{2}-\d{2}$/.test(b)||isNaN(Date.parse(b))))return null;let[c,d,e]=a.split("-").map(Number);return new Date(c,d-1,e,12,0,0)}a.s(["useUrlParams",0,function(){let a=(0,b.useSearchParams)(),d=(0,b.useRouter)(),e=(0,b.usePathname)(),f=(0,c.useRef)(null),g=(0,c.useCallback)(b=>a.get(b),[a]),h=(0,c.useCallback)(()=>new URLSearchParams(a.toString()),[a]),i=(0,c.useCallback)(b=>{f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{let c=new URLSearchParams(a.toString());for(let[a,d]of Object.entries(b))void 0===d||""===d?c.delete(a):c.set(a,d);let f=c.toString(),g=f?`${e}?${f}`:e;d.replace(g,{scroll:!1})},150)},[a,e,d]);return(0,c.useEffect)(()=>()=>{f.current&&clearTimeout(f.current)},[]),{get:g,getAll:h,setAll:i}}],90619),a.s(["dateRangeToParams",0,function(a){let b={};return a.from&&(b.from=d(a.from)),a.to&&(b.to=d(a.to)),b},"keywordsToParam",0,function(a){if(0!==a.length)return a.map(a=>encodeURIComponent(a)).join(",")},"pageToParam",0,function(a){return a<=1?void 0:String(a)},"paramToKeywords",0,function(a){return a?a.split(",").map(a=>decodeURIComponent(a.trim())).filter(a=>a.length>0):[]},"paramToPage",0,function(a){if(!a)return 1;let b=parseInt(a,10);return Number.isFinite(b)&&b>=1?b:1},"paramToPreset",0,function(a){return a&&["all","last-hour","today","last-7-days","last-30-days","custom"].includes(a)?a:"all"},"paramsToDateRange",0,function(a,b){return{from:e(a),to:e(b)}},"presetToParam",0,function(a){return"all"===a?void 0:a}],95947)},65967,a=>{"use strict";var b=a.i(87924),c=a.i(64831);let d=(0,c.default)("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]),e=(0,c.default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);a.s(["default",0,function({currentPage:a,totalPages:c,onPageChange:f}){if(c<=1)return null;let g=a=>`px-3 py-2 text-sm rounded-md transition-colors flex items-center gap-1 bg-muted text-muted-foreground ${a?"opacity-50 cursor-not-allowed":"hover:bg-muted/80"}`;return(0,b.jsxs)("div",{className:"flex items-center justify-center gap-2 py-4",children:[(0,b.jsxs)("button",{onClick:()=>f(a-1),disabled:1===a,className:g(1===a),"aria-label":"Previous page",children:[(0,b.jsx)(d,{className:"w-4 h-4"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:"Previous"})]}),(0,b.jsx)("div",{className:"flex items-center gap-1",children:(()=>{if(c<=7)return Array.from({length:c},(a,b)=>b+1);let b=[1],d=Math.max(2,a-1),e=Math.min(c-1,a+1);a<=3&&(e=Math.min(5,c-1)),a>=c-2&&(d=Math.max(2,c-4)),d>2&&b.push("ellipsis-start");for(let a=d;a<=e;a++)b.push(a);return e<c-1&&b.push("ellipsis-end"),b.push(c),b})().map(c=>"string"==typeof c?(0,b.jsx)("span",{className:"px-2 text-muted-foreground",children:"..."},c):(0,b.jsx)("button",{onClick:()=>f(c),className:`min-w-[2.5rem] px-3 py-2 text-sm rounded-md transition-colors ${a===c?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground hover:bg-muted/80"}`,"aria-label":`Page ${c}`,"aria-current":a===c?"page":void 0,children:c},c))}),(0,b.jsxs)("button",{onClick:()=>f(a+1),disabled:a===c,className:g(a===c),"aria-label":"Next page",children:[(0,b.jsx)("span",{className:"hidden sm:inline",children:"Next"}),(0,b.jsx)(e,{className:"w-4 h-4"})]})]})}],65967)},74215,a=>{"use strict";let b=(0,a.i(64831).default)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);a.s(["X",0,b],74215)},69349,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.i(46786),a.i(14747);var d=a.i(97895),e=a.i(27950),f=a.i(45481),g=a.i(90619),h=a.i(95947);let i=(0,a.i(64831).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"}]]);var j=a.i(33540),k=a.i(74215),l=a.i(38246),m=a.i(65967),n=a.i(24451);function o({date:a,formatted:c}){return(0,b.jsx)("span",{children:c||(0,d.formatDate)(a)})}a.s(["default",0,function({folders:a}){let d=(0,g.useUrlParams)(),p=(0,c.useRef)(!1),[q,r]=(0,c.useState)(()=>(0,h.paramToKeywords)(d.get("q"))),[s,t]=(0,c.useState)(""),{filterPreset:u,dateRange:v,currentPage:w,setCurrentPage:x,handlePresetChange:y,handleDateRangeChange:z,clearFilters:A}=(0,f.useFilterState)(q,{filterPreset:(0,h.paramToPreset)(d.get("preset")),dateRange:(0,h.paramsToDateRange)(d.get("from"),d.get("to")),currentPage:(0,h.paramToPage)(d.get("page"))});(0,c.useEffect)(()=>{if(!p.current){p.current=!0;return}d.setAll({preset:(0,h.presetToParam)(u),...(0,h.dateRangeToParams)(v),q:(0,h.keywordsToParam)(q),page:(0,h.pageToParam)(w)})},[u,v,q,w]);let B=a=>{let b=a.trim();b&&!q.includes(b)&&(r([...q,b]),t(""))},C=()=>{r([]),t("")},D=(0,c.useMemo)(()=>(0,e.rehydrateDates)(a),[a]),E=(0,c.useMemo)(()=>{let a=(0,e.filterByDate)(D,u,v);return q.length>0&&(a=a.filter(a=>{let b=a.name.toLowerCase();return q.every(a=>{let c=a.trim().toLowerCase().replace(/\//g,"-");return 0===c.length||b.includes(c)})})),a.sort((a,b)=>b.lastModified.getTime()-a.lastModified.getTime())},[D,u,v,q]),F=Math.max(1,Math.ceil(E.length/e.ITEMS_PER_PAGE));(0,c.useEffect)(()=>{w>F&&x(F)},[w,F,x]);let G=(w-1)*e.ITEMS_PER_PAGE,H=Math.min(G+e.ITEMS_PER_PAGE,E.length),I=E.slice(G,H);return(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsx)("div",{className:"bg-card border border-border rounded-lg p-4",children:(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)("span",{className:"text-sm font-medium text-foreground",children:"Filter by:"}),e.FILTER_PRESETS.map(a=>(0,b.jsx)("button",{onClick:()=>y(a.value),className:`px-3 py-1.5 text-sm rounded-md transition-colors ${u===a.value?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground hover:bg-muted/80"}`,children:a.label},a.value))]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(j.Search,{className:"w-4 h-4 text-muted-foreground"}),(0,b.jsx)("span",{className:"text-sm font-medium text-foreground",children:"Search Keywords:"})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"text",value:s,onChange:a=>t(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),B(s))},placeholder:"Enter keyword and press Enter",className:"px-3 py-2 text-sm bg-input border border-border rounded-md text-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent transition-all hover:border-primary/50 w-[250px]","aria-label":"Add keyword"}),(0,b.jsx)("button",{onClick:()=>B(s),className:"px-3 py-2 text-sm bg-muted text-muted-foreground hover:bg-muted/80 rounded-md transition-colors","aria-label":"Add keyword",children:"Add"})]}),q.length>0&&(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[q.map((a,c)=>(0,b.jsxs)("div",{className:"flex items-center gap-1.5 px-3 py-1.5 bg-muted text-muted-foreground rounded-md text-sm",children:[(0,b.jsx)("span",{children:a}),(0,b.jsx)("button",{onClick:()=>{r(q.filter((a,b)=>b!==c))},className:"hover:text-foreground transition-colors p-0.5 rounded hover:bg-muted/80","aria-label":`Remove keyword ${a}`,children:(0,b.jsx)(k.X,{className:"w-3.5 h-3.5"})})]},c)),(0,b.jsx)("button",{onClick:C,className:"px-2 py-1.5 text-xs bg-muted text-muted-foreground hover:bg-muted/80 rounded-md transition-colors","aria-label":"Clear all keywords",children:"Clear all"})]})]})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-4",children:[(0,b.jsx)("span",{className:"text-sm font-medium text-foreground",children:"Custom Range:"}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(n.default,{id:"date-from",value:v.from,onChange:a=>z("from",a),"aria-label":"Filter from date"}),(0,b.jsx)("span",{className:"text-muted-foreground",children:"to"}),(0,b.jsx)(n.default,{id:"date-to",value:v.to,onChange:a=>z("to",a),"aria-label":"Filter to date"})]}),("all"!==u||null!==v.from||null!==v.to||q.length>0)&&(0,b.jsx)("button",{onClick:()=>{A(),C()},className:"px-3 py-2 text-sm bg-muted text-muted-foreground hover:bg-muted/80 rounded-md transition-colors",children:"Clear"})]}),(0,b.jsx)("div",{className:"text-sm text-muted-foreground",children:0===E.length?(0,b.jsx)(b.Fragment,{children:"No projects found"}):(0,b.jsxs)(b.Fragment,{children:["Showing ",G+1,"-",H," of ",E.length," projects",E.length!==D.length&&(0,b.jsxs)("span",{className:"ml-1",children:["(filtered from ",D.length," total)"]}),q.length>0&&(0,b.jsxs)("span",{className:"ml-1",children:["with ",q.length," keyword",1!==q.length?"s":""]})]})})]})}),(0,b.jsxs)("div",{className:"bg-card border border-border rounded-lg overflow-hidden",children:[(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("table",{className:"w-full",children:[(0,b.jsx)("thead",{children:(0,b.jsxs)("tr",{className:"border-b border-border bg-muted/50",children:[(0,b.jsx)("th",{scope:"col",className:"px-4 py-3 text-left text-sm font-semibold text-foreground w-12",children:(0,b.jsx)("span",{className:"sr-only",children:"Icon"})}),(0,b.jsx)("th",{scope:"col",className:"px-4 py-3 text-left text-sm font-semibold text-foreground max-w-md",children:"Agent Root"}),(0,b.jsx)("th",{scope:"col",className:"px-4 py-3 text-left text-sm font-semibold text-foreground hidden md:table-cell",children:"Path"}),(0,b.jsx)("th",{scope:"col",className:"px-4 py-3 text-left text-sm font-semibold text-foreground",children:"Last Modified"})]})}),(0,b.jsx)("tbody",{children:0===I.length?(0,b.jsx)("tr",{children:(0,b.jsx)("td",{colSpan:4,className:"px-4 py-8 text-center text-muted-foreground",children:"No projects found matching the selected filter."})}):I.map(a=>{var c;return(0,b.jsxs)("tr",{className:"border-b border-border hover:bg-muted/50 transition-colors",children:[(0,b.jsx)("td",{className:"px-4 py-3",children:(0,b.jsx)(i,{className:"w-5 h-5 text-primary"})}),(0,b.jsx)("td",{className:"px-4 py-3 max-w-md",children:(0,b.jsx)(l.default,{href:`/project/${encodeURIComponent(a.name)}`,className:"font-semibold text-foreground hover:text-primary transition-colors break-words break-all inline-block max-w-full",children:(c=a.name,/^[A-Za-z]--/.test(c)?c[0]+":/"+c.slice(3).replace(/-/g,"/"):c.replace(/-/g,"/"))})}),(0,b.jsx)("td",{className:"px-4 py-3 text-sm text-muted-foreground hidden md:table-cell truncate max-w-md",children:a.path}),(0,b.jsx)("td",{className:"px-4 py-3 text-sm text-muted-foreground",children:(0,b.jsx)(o,{date:a.lastModified,formatted:a.lastModifiedFormatted})})]},a.name)})})]})}),E.length>0&&(0,b.jsx)(m.default,{currentPage:w,totalPages:F,onPageChange:x})]})]})}],69349)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__03rd.z8._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[50640,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"InvariantError",{enumerable:!0,get:function(){return d}});class d extends Error{constructor(a,b){super(`Invariant: ${a.endsWith(".")?a:a+"."} This is a bug in Next.js.`,b),this.name="InvariantError"}}},64240,(a,b,c)=>{"use strict";function d(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(d=function(a){return a?c:b})(a)}c._=function(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=d(b);if(c&&c.has(a))return c.get(a);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in a)if("default"!==g&&Object.prototype.hasOwnProperty.call(a,g)){var h=f?Object.getOwnPropertyDescriptor(a,g):null;h&&(h.get||h.set)?Object.defineProperty(e,g,h):e[g]=a[g]}return e.default=a,c&&c.set(a,e),e}},93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},71306,(a,b,c)=>{b.exports=a.r(18622)},79847,a=>{a.n(a.i(3343))},9185,a=>{a.n(a.i(29432))},72842,a=>{a.n(a.i(75164))},54897,a=>{a.n(a.i(30106))},56157,a=>{a.n(a.i(18970))},94331,a=>{a.n(a.i(60644))},15988,a=>{a.n(a.i(56952))},25766,a=>{a.n(a.i(77341))},29725,a=>{a.n(a.i(94290))},5785,a=>{a.n(a.i(90588))},74793,a=>{a.n(a.i(33169))},85826,a=>{a.n(a.i(37111))},21565,a=>{a.n(a.i(41763))},65911,a=>{a.n(a.i(8950))},25128,a=>{a.n(a.i(91562))},40781,a=>{a.n(a.i(49670))},69411,a=>{a.n(a.i(75700))},63081,a=>{a.n(a.i(276))},62837,a=>{a.n(a.i(40795))},34607,a=>{a.n(a.i(11614))},96338,a=>{a.n(a.i(21751))},50642,a=>{a.n(a.i(12213))},32242,a=>{a.n(a.i(22693))},88530,a=>{a.n(a.i(10531))},8583,a=>{a.n(a.i(1082))},38534,a=>{a.n(a.i(98175))},70408,a=>{a.n(a.i(9095))},22922,a=>{a.n(a.i(96772))},78294,a=>{a.n(a.i(71717))},16625,a=>{a.n(a.i(85034))},88648,a=>{a.n(a.i(68113))},51914,a=>{a.n(a.i(66482))},25466,a=>{a.n(a.i(91505))},46786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},24868,(a,b,c)=>{b.exports=a.x("fs/promises",()=>require("fs/promises"))},69191,90798,34900,26192,76668,82248,a=>{"use strict";var b=a.i(24868),c=a.i(14747),d=a.i(46786);function e(){let a=process.env.CLAUDE_PROJECTS_PATH;return a||(0,c.join)((0,d.homedir)(),".claude","projects")}function f(a,b,c){let d=new Map,e=new Map,f=c?.maxSize;return async(...c)=>{let g=JSON.stringify(c),h=d.get(g);if(h&&Date.now()<h.expiry)return h.data;let i=e.get(g);if(i)return i;let j=a(...c).then(a=>{if(e.delete(g),f&&d.size>=f){let a=d.keys().next().value;d.delete(a)}return d.set(g,{data:a,expiry:Date.now()+1e3*b}),a},a=>{throw e.delete(g),a});return e.set(g,j),j}}async function g(a,b){let c=Array(a.length),d=0;async function e(){for(;d<a.length;){let b=d++;try{c[b]={status:"fulfilled",value:await a[b]()}}catch(a){c[b]={status:"rejected",reason:a}}}}let f=Array.from({length:Math.min(b,a.length)},()=>e());return await Promise.all(f),c}a.s(["decodeFolderName",0,function(a){return/^[A-Za-z]--/.test(a)?a[0]+":/"+a.slice(3).replace(/-/g,"/"):a.replace(/-/g,"/")},"getClaudeProjectsPath",0,e],90798),a.s(["runtimeCache",0,f],34900),a.s(["batchAll",0,g],26192);let h=1;function i(a){return`[failproofai${new Date().toISOString()}] ${a}`}function j(a,b){h>=h&&(void 0!==b?console.warn(i("WARN"),a,b):console.warn(i("WARN"),a))}function k(a,b){void 0!==b?console.error(i("ERROR"),a,b):console.error(i("ERROR"),a)}function l(a){return new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0}).format(a)}async function m(a,c){try{return(await (0,b.stat)(a)).mtime}catch(a){return j(`Failed to stat ${c}:`,a),new Date(0)}}async function n(a){try{if(!(await (0,b.stat)(a)).isDirectory())return null;return await (0,b.readdir)(a,{withFileTypes:!0})}catch{return null}}function o(a){let b=a.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i);return b?b[0]:void 0}async function p(a){try{let b=await n(a);if(!b)return[];let d=b.filter(a=>a.isFile()&&a.name.endsWith(".jsonl")&&o(a.name)),e=(await g(d.map(b=>async()=>{let d=(0,c.join)(a,b.name),e=await m(d,b.name);return{name:b.name,path:d,lastModified:e,lastModifiedFormatted:l(e),sessionId:o(b.name)}}),16)).filter(a=>"fulfilled"===a.status).map(a=>a.value);return e.sort((a,b)=>b.lastModified.getTime()-a.lastModified.getTime()),e}catch(a){return k("Error reading session files:",a),[]}}a.s(["logError",0,k,"logWarn",0,j],76668),a.s(["formatDate",0,l],82248);let q=f(async function a(){try{let a=e(),b=await n(a);if(!b)return[];let d=(await g(b.filter(a=>a.isDirectory()).map(b=>async()=>{let d=(0,c.join)(a,b.name),e=await m(d,b.name);return{name:b.name,path:d,isDirectory:!0,lastModified:e,lastModifiedFormatted:l(e)}}),16)).filter(a=>"fulfilled"===a.status).map(a=>a.value);return d.sort((a,b)=>b.lastModified.getTime()-a.lastModified.getTime()),d}catch(a){return k("Error reading project folders:",a),[]}},30),r=f(a=>p(a),30);a.s(["UUID_RE",0,/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/,"getCachedProjectFolders",0,q,"getCachedSessionFiles",0,r,"resolveProjectPath",0,function(a){if(!a)throw RangeError("Empty project name");if(/^[/\\]/.test(a))throw RangeError("Absolute project name");let b=(0,c.resolve)(e()),d=(0,c.resolve)((0,c.join)(b,a));if(!d.startsWith(b+c.sep))throw RangeError("Project path escapes root");return d}],69191)},790,(a,b,c)=>{let{createClientModuleProxy:d}=a.r(11857);a.n(d("[project]/node_modules/next/dist/client/app-dir/link.js <module evaluation>"))},84707,(a,b,c)=>{let{createClientModuleProxy:d}=a.r(11857);a.n(d("[project]/node_modules/next/dist/client/app-dir/link.js"))},97647,a=>{"use strict";a.i(790);var b=a.i(84707);a.n(b)},95936,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={default:function(){return i},useLinkStatus:function(){return h.useLinkStatus}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(64240),g=a.r(7997),h=f._(a.r(97647));function i(a){let b=a.legacyBehavior,c="string"==typeof a.children||"number"==typeof a.children||"string"==typeof a.children?.type,d=a.children?.type?.$$typeof===Symbol.for("react.client.reference");return!b||c||d||(a.children?.type?.$$typeof===Symbol.for("react.lazy")?console.error("Using a Lazy Component as a direct child of `<Link legacyBehavior>` from a Server Component is not supported. If you need legacyBehavior, wrap your Lazy Component in a Client Component that renders the Link's `<a>` tag."):console.error("Using a Server Component as a direct child of `<Link legacyBehavior>` is not supported. If you need legacyBehavior, wrap your Server Component in a Client Component that renders the Link's `<a>` tag.")),(0,g.jsx)(h.default,{...a})}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},8174,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/node_modules/lucide-react/dist/esm/Icon.mjs <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/node_modules/lucide-react/dist/esm/Icon.mjs <module evaluation>","default")},90697,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/node_modules/lucide-react/dist/esm/Icon.mjs from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/node_modules/lucide-react/dist/esm/Icon.mjs","default")},53808,a=>{"use strict";a.i(8174);var b=a.i(90697);a.n(b)},84930,92277,a=>{"use strict";var b=a.i(717);let c=a=>{let b=a.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,b,c)=>c?c.toUpperCase():b.toLowerCase());return b.charAt(0).toUpperCase()+b.slice(1)};var d=a.i(53808);let e=(a,e)=>{let f=(0,b.forwardRef)(({className:f,...g},h)=>(0,b.createElement)(d.default,{ref:h,iconNode:e,className:((...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim())(`lucide-${c(a).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${a}`,f),...g}));return f.displayName=c(a),f};a.s(["default",0,e],92277);let f=e("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);a.s(["ArrowLeft",0,f],84930)},71224,a=>{a.v("/_next/static/media/icon.0a.gigb3_x5pd.png"+(globalThis.NEXT_CLIENT_ASSET_SUFFIX||""))},1022,a=>{"use strict";let b={src:a.i(71224).default,width:1920,height:1920};a.s(["default",0,b])},14066,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/components/lazy-log-viewer.tsx <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/components/lazy-log-viewer.tsx <module evaluation>","default")},19597,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/components/lazy-log-viewer.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/components/lazy-log-viewer.tsx","default")},71130,a=>{"use strict";a.i(14066);var b=a.i(19597);a.n(b)},85540,a=>{"use strict";a.s(["CopyButton",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call CopyButton() from the server but CopyButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/components/copy-button.tsx <module evaluation>","CopyButton")},35770,a=>{"use strict";a.s(["CopyButton",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call CopyButton() from the server but CopyButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/components/copy-button.tsx","CopyButton")},893,a=>{"use strict";a.i(85540);var b=a.i(35770);a.n(b)},41190,a=>{"use strict";var b=a.i(7997),c=a.i(95936),d=a.i(84930);let e=(0,a.i(92277).default)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]);a.i(70396);var f=a.i(73727),g=a.i(24868),h=a.i(14747),i=a.i(90798),j=a.i(69191);async function k(a,b,c,d){let e=`agent-${d}.jsonl`;for(let d of[(0,h.join)(a,b,e),(0,h.join)(a,b,c,e),(0,h.join)(a,b,c,"subagents",e)])if(!(0,h.relative)(a,d).startsWith(".."))try{return await (0,g.access)(d),d}catch(a){if("ENOENT"===a.code)continue;break}return null}var l=a.i(34900),m=a.i(26192),n=a.i(82248);function o(a){let b=(0,n.formatDate)(a),c=a.getMilliseconds().toString().padStart(3,"0");return`${b}.${c}`}function p(a,b,c,d){return{_source:d,uuid:a.uuid||"",parentUuid:a.parentUuid??null,timestamp:b,timestampMs:c.getTime(),timestampFormatted:o(c)}}async function q(a,b){let c=a.split("\n").filter(a=>""!==a.trim()),d=new Map,e=[],f=[],g=new Set,h=!1;for(let a=0;a<c.length;a++){let i;a>0&&a%200==0&&await new Promise(a=>setImmediate(a));let j=c[a];try{i=JSON.parse(j)}catch{continue}let k={...i,_source:b};f.push(k);let l=i.type,m=i.timestamp;if(!m)continue;let n=new Date(m),o=n.getTime();if("user"===l){let a=i.message;if(Array.isArray(a?.content)){let b=a.content;if(b.some(a=>"tool_result"===a.type)){let a=i.toolUseResult,c="string"==typeof a?.agentId?a.agentId:void 0;for(let a of(c&&/^[a-f0-9]+$/.test(c)&&g.add(c),b)){if("tool_result"!==a.type)continue;let b=a.tool_use_id;if(!b)continue;let{text:e,images:f}=function(a){let b=a.content;if("string"==typeof b)return{text:b};if(Array.isArray(b)){let a=b.filter(a=>"text"===a.type).map(a=>a.text),c=b.filter(a=>"image"===a.type).map(a=>{let b=a.source;return{base64:b.data,mediaType:b.media_type}}).filter(a=>a.base64&&a.mediaType);return{text:a.length>0?a.join("\n"):void 0,images:c.length>0?c:void 0}}return{}}(a);d.set(b,{timestamp:m,timestampMs:o,content:e,images:f,agentId:c})}continue}}let c="string"==typeof a?.content?a.content:"";e.push({type:"user",...p(i,m,n,b),message:{role:"user",content:c}});continue}if("assistant"===l){let a=i.message,c=[];if(Array.isArray(a?.content)&&(c=a.content.filter(a=>["text","tool_use","thinking"].includes(a.type)).map(a=>{if("text"===a.type)return{type:"text",text:a.text};if("tool_use"===a.type){let b=a.input;return{type:"tool_use",id:a.id,name:a.name,input:a.input??{},..."Task"===a.name&&b?{subagentType:b.subagent_type,subagentDescription:b.description}:{}}}return{type:"thinking",thinking:a.thinking,signature:a.signature}})),0===c.length)continue;e.push({type:"assistant",...p(i,m,n,b),message:{role:"assistant",content:c,model:a?.model}});continue}if("file-history-snapshot"===l||"progress"===l||"system"===l){e.push({type:l,...p(i,m,n,b),raw:{...i}});continue}if("queue-operation"===l){let a=h?"Session Resumed":"Session Started";h=!0,e.push({type:"queue-operation",...p(i,m,n,b),label:a});continue}}let i=0;for(let a of e)if("assistant"===a.type)for(let b of(++i%200==0&&await new Promise(a=>setImmediate(a)),a.message.content)){if("tool_use"!==b.type)continue;let c=d.get(b.id);if(!c)continue;let e=new Date(c.timestamp),f=Math.max(0,c.timestampMs-a.timestampMs);b.result={timestamp:c.timestamp,timestampFormatted:o(e),content:c.content,images:c.images,durationMs:f,durationFormatted:function(a){if(a<1e3)return`${a}ms`;let b=a/1e3;if(b<60)return`${b.toFixed(1)}s`;let c=Math.floor(b/60);if(c>=60){let a=Math.floor(c/60);return`${a}h ${c%60}m`}let d=(b%60).toFixed(0);return`${c}m ${d}s`}(f)},c.agentId&&(b.subagentId=c.agentId)}return e.length>500&&await new Promise(a=>setImmediate(a)),e.sort((a,b)=>a.timestampMs-b.timestampMs),{entries:e,rawLines:f,subagentIds:Array.from(g)}}async function r(a,b){let c=(0,j.resolveProjectPath)(a),d=(0,i.getClaudeProjectsPath)(),e=(0,h.join)(c,`${b}.jsonl`),f=await (0,g.readFile)(e,"utf-8"),{entries:l,rawLines:n,subagentIds:o}=await q(f,"session");if(0===o.length)return{entries:l,rawLines:n,subagentIds:[]};let p=await (0,m.batchAll)(o.map(c=>async()=>{let e=`agent-${c}`,f=await k(d,a,b,c);if(!f)return null;let h=await (0,g.readFile)(f,"utf-8"),{entries:i,rawLines:j}=await q(h,e);return{entries:i,rawLines:j}}),4),r=[...l],s=[...n];for(let a of p)"fulfilled"===a.status&&a.value&&(r.push(...a.value.entries),s.push(...a.value.rawLines));return r.length>500&&await new Promise(a=>setImmediate(a)),r.sort((a,b)=>a.timestampMs-b.timestampMs),{entries:r,rawLines:s,subagentIds:o}}let s=(0,l.runtimeCache)((a,b)=>r(a,b),60,{maxSize:50});var t=a.i(71130),u=a.i(893);async function v({params:a}){let g,{name:h,sessionId:k}=await a;try{(0,j.resolveProjectPath)(h)}catch{(0,f.notFound)()}let l=(0,i.decodeFolderName)(h),m=-1===(g=k.indexOf("/"))?k:k.slice(0,g);j.UUID_RE.test(m)||(0,f.notFound)();let n=null,o=null,p=null;try{let a=await s(h,m);n=a.entries,o=a.rawLines}catch(a){p="ENOENT"===a.code?"Session log file not found.":"Failed to read session log."}return(0,b.jsx)("main",{className:"min-h-screen bg-background",children:(0,b.jsxs)("div",{className:"container mx-auto p-8",children:[(0,b.jsxs)(c.default,{href:`/project/${encodeURIComponent(h)}`,className:"inline-flex items-center gap-2 text-muted-foreground hover:text-foreground mb-6 transition-colors",children:[(0,b.jsx)(d.ArrowLeft,{className:"w-4 h-4"}),(0,b.jsx)("span",{children:"Back to Sessions"})]}),(0,b.jsxs)("div",{className:"mb-8",children:[(0,b.jsx)("h1",{className:"text-4xl font-bold text-foreground mb-2",children:"Session Log"}),(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsxs)("p",{className:"text-muted-foreground",children:[(0,b.jsx)("span",{className:"font-medium",children:"Project:"})," ",l]}),(0,b.jsxs)("p",{className:"text-muted-foreground break-words break-all inline-flex items-center gap-1",children:[(0,b.jsx)("span",{className:"font-medium",children:"Session:"})," ",m,(0,b.jsx)(u.CopyButton,{text:m})]}),n&&o&&(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[(0,b.jsxs)("p",{className:"text-muted-foreground",children:[(0,b.jsx)("span",{className:"font-medium",children:o.length})," log lines"]}),(0,b.jsxs)("a",{href:`/api/download/${encodeURIComponent(h)}/${encodeURIComponent(m)}`,download:!0,className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-md bg-muted text-muted-foreground hover:bg-muted/80 hover:text-foreground transition-colors",children:[(0,b.jsx)(e,{className:"w-4 h-4"}),"Download Logs"]})]})]})]}),p&&(0,b.jsx)("div",{className:"bg-card text-card-foreground rounded-lg border border-destructive/50 p-6 shadow-sm",children:(0,b.jsx)("p",{className:"text-destructive text-center py-8",children:p})}),!p&&n&&(0,b.jsx)(t.default,{entries:n,projectName:l,sessionId:m})]})})}a.s(["default",0,v,"dynamic",0,"force-dynamic"],41190)},87330,a=>{a.n(a.i(41190))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0e74wa-._.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
module.exports=[2157,(a,b,c)=>{b.exports=a.x("node:fs",()=>require("node:fs"))},60526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},50227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},66680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},74533,(a,b,c)=>{b.exports=a.x("node:child_process",()=>require("node:child_process"))},37936,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(11857)},12072,(a,b,c)=>{b.exports={name:"failproofai",version:"0.0.9-beta.1",description:"The easiest way to manage policies that keep your AI agents reliable, on-task, and running autonomously — for Claude Code & the Agents SDK",bin:{failproofai:"./dist/cli.mjs"},files:["bin/","src/","scripts/","lib/",".next/standalone/","dist/","README.md"],engines:{node:">=20.9.0",bun:">=1.3.0"},scripts:{predev:"bun run build:cli && bun link",dev:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/dev.ts --port 8020","build:cli":"bun build --target=node --format=esm --outfile=dist/cli.mjs bin/failproofai.mjs --external posthog-node && node -e \"const fs=require('fs');const c=fs.readFileSync('dist/cli.mjs','utf8');fs.writeFileSync('dist/cli.mjs',c.replace('#!/usr/bin/env bun','#!/usr/bin/env node').replace('// @bun\\n',''))\"",build:"bun build --target=node --format=cjs --outfile=dist/index.js src/index.ts && bun run build:cli && bun --bun next build && node -e \"const {cpSync}=require('fs');cpSync('.next/static','.next/standalone/.next/static',{recursive:true});\" && node scripts/prune-standalone.mjs",prestart:"bun run build:cli && bun link",start:"FAILPROOFAI_TELEMETRY_DISABLED=1 bun scripts/start.ts",test:"vitest","test:run":"vitest run",lint:"eslint . --config eslint.config.mjs",postinstall:"node scripts/postinstall.mjs",preuninstall:"node scripts/preuninstall.mjs",prepare:"bun run build","test:e2e":"vitest run --config vitest.config.e2e.mts","test:e2e:watch":"vitest --config vitest.config.e2e.mts",translate:"bun scripts/translate-docs/cli.ts","translate:readme":"bun scripts/translate-docs/cli.ts --readme-only","translate:docs":"bun scripts/translate-docs/cli.ts --docs-only","translate:dry-run":"bun scripts/translate-docs/cli.ts --dry-run","translate:validate":"bun scripts/translate-docs/cli.ts --validate"},keywords:["claude","claude-code","claude-agents-sdk","anthropic","ai-agent","agent-reliability","agent-monitoring","autonomous-agent","failure-prevention","developer-tools","devtools","cli","local-first","hooks","policies"],author:"ExosphereHost Inc. <failproofai@exosphere.host>",license:"SEE LICENSE IN LICENSE",homepage:"https://github.com/exospherehost/failproofai",repository:{type:"git",url:"https://github.com/exospherehost/failproofai.git"},bugs:{url:"https://github.com/exospherehost/failproofai/issues"},publishConfig:{access:"public"},devDependencies:{"@tailwindcss/postcss":"^4.1.18","@tanstack/react-virtual":"^3.13.18","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@testing-library/user-event":"^14.6.1","@types/node":"^25.5.2","@types/react":"^19.2.13","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1",clsx:"^2.1.1",eslint:"^10.2.0","eslint-config-next":"^16.2.2","happy-dom":"^20.7.0","lucide-react":"^1.0.1",next:"^16.2.2",react:"^19.2.4","react-dom":"^19.2.4","tailwind-merge":"^3.4.0",tailwindcss:"^4.1.18",typescript:"^6.0.2","@anthropic-ai/sdk":"^0.91.1",vitest:"^4.0.18"},dependencies:{"posthog-node":"^5.28.11"}}},13095,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
2
|
-
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},36359,69839,79779,a=>{"use strict";let b;var c=a.i(37936),d=a.i(2157),e=a.i(50227),f=a.i(60526),g=a.i(66680);a.i(74533);let h=e.default.join(f.default.homedir(),".failproofai"),i=e.default.join(h,"instance-id");function j(a){return g.default.createHmac("sha256","failproofai-telemetry-v1").update(a).digest("hex")}function k(){if(b)return b;let a=function(){try{for(let a of(f.default.platform(),["/etc/machine-id","/var/lib/dbus/machine-id"]))try{let b=d.default.readFileSync(a,"utf-8").trim();if(b)return b}catch{}}catch{}}();if(a)return b=j(a);let c=[f.default.hostname(),f.default.homedir(),f.default.platform(),f.default.arch(),f.default.cpus()[0]?.model??""].join(":");return b=c?j(c):function(){try{let a=d.default.readFileSync(i,"utf-8").trim();if(a)return a}catch{}let a=g.default.randomUUID();try{d.default.mkdirSync(h,{recursive:!0}),d.default.writeFileSync(i,a,"utf-8")}catch{}return a}()}a.s(["getInstanceId",0,k,"hashToId",0,j],69839),a.s(["POSTHOG_API_KEY",0,"phc_Ac1Ww1GqKc0z1SyrRWbmatEeQdlOQIsDEEdP8l8JRgX"],79779);var l=a.i(12072);async function m(){let a="1"!==process.env.FAILPROOFAI_TELEMETRY_DISABLED;return{enabled:a,distinctId:a?k():"",apiKey:process.env.FAILPROOFAI_POSTHOG_KEY??"phc_Ac1Ww1GqKc0z1SyrRWbmatEeQdlOQIsDEEdP8l8JRgX",host:process.env.FAILPROOFAI_POSTHOG_HOST??"https://us.i.posthog.com",version:l.version}}(0,a.i(13095).ensureServerEntryExports)([m]),(0,c.registerServerReference)(m,"0023e36be111cb5a102352dbb3d18fdcbd71df69ce",null),a.s(["getTelemetryConfig",0,m],36359)},24868,(a,b,c)=>{b.exports=a.x("fs/promises",()=>require("fs/promises"))},1457,(a,b,c)=>{b.exports=a.x("node:readline",()=>require("node:readline"))},7292,a=>{"use strict";var b=a.i(37936),c=a.i(2157),d=a.i(50227),e=a.i(60526);let f=(0,d.join)((0,e.homedir)(),".failproofai","cache","hook-activity"),g="current.jsonl";function h(){(0,c.existsSync)(f)||(0,c.mkdirSync)(f,{recursive:!0})}function i(){let a=function(){try{return JSON.parse((0,c.readFileSync)((0,d.join)(f,"stats.json"),"utf-8"))}catch{return{totalEvents:0,denyCount:0,policyMap:{}}}}(),b=null,e=0;for(let[c,d]of Object.entries(a.policyMap))d>e&&(b=c,e=d);return{totalEvents:a.totalEvents,denyCount:a.denyCount,topPolicy:b,topPolicyCount:e}}function j(a){let b=function(a){try{return(0,c.readFileSync)(a,"utf-8")}catch{return""}}(a);if(!b.trim())return[];let d=[];for(let a of b.trim().split("\n"))try{d.push(JSON.parse(a))}catch{}return d}function k(){try{return(0,c.readdirSync)(f).filter(a=>a.startsWith("page-")&&a.endsWith(".jsonl")).sort((a,b)=>{let c=a.slice(5,-6).split("-"),d=b.slice(5,-6).split("-"),e=parseInt(c[0],10),f=parseInt(d[0],10);if(e!==f)return f-e;let g=c.length>1?parseInt(c[1],10):0;return(d.length>1?parseInt(d[1],10):0)-g})}catch{return[]}}async function l(a){let b;return b=function(a){if(h(),a<1)return[];if(1===a)return j((0,d.join)(f,g)).reverse();let b=k(),c=a-2;return c>=b.length?[]:j((0,d.join)(f,b[c])).reverse()}(a),h(),{entries:b,totalPages:1+k().length,page:a,stats:i()}}async function m(a,b){let c,e,l;return e=Math.max(1,Math.ceil((c=(function(){h();let a=j((0,d.join)(f,g)).reverse(),b=k(),c=[];for(let a of b){let b=j((0,d.join)(f,a));c.push(...b.reverse())}return[...a,...c]})().filter(b=>(!a.decision||b.decision===a.decision)&&(!a.eventType||b.eventType===a.eventType)&&(!a.policyName||!!b.policyName&&!!b.policyName.toLowerCase().includes(a.policyName.toLowerCase()))&&(!a.sessionId||!!b.sessionId&&!!b.sessionId.toLowerCase().includes(a.sessionId.toLowerCase())))).length/25)),l=(b-1)*25,{entries:c.slice(l,l+25),totalPages:e,page:b,stats:i()}}(0,a.i(13095).ensureServerEntryExports)([l,m]),(0,b.registerServerReference)(l,"40ca2bca7d631f06465d3788d903e22110388b6097",null),(0,b.registerServerReference)(m,"608c099d99d1ba671f4f826f03425f19c7e90723e9",null),a.s(["getHookActivityAction",0,l,"searchHookActivityAction",0,m],7292)},2726,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_node_async_hooks_0v0ln8c._.js","server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_0mebn66._.js"].map(b=>a.l(b))).then(()=>b(74493)))}];
|
|
3
|
-
|
|
4
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0vu.o-3._.js.map
|