agent-scope 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +312 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +134 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/core/logParser.d.ts +11 -0
  8. package/dist/core/logParser.d.ts.map +1 -0
  9. package/dist/core/logParser.js +103 -0
  10. package/dist/core/logParser.js.map +1 -0
  11. package/dist/core/queueParser.d.ts +11 -0
  12. package/dist/core/queueParser.d.ts.map +1 -0
  13. package/dist/core/queueParser.js +181 -0
  14. package/dist/core/queueParser.js.map +1 -0
  15. package/dist/core/stateEngine.d.ts +6 -0
  16. package/dist/core/stateEngine.d.ts.map +1 -0
  17. package/dist/core/stateEngine.js +150 -0
  18. package/dist/core/stateEngine.js.map +1 -0
  19. package/dist/core/types.d.ts +40 -0
  20. package/dist/core/types.d.ts.map +1 -0
  21. package/dist/core/types.js +2 -0
  22. package/dist/core/types.js.map +1 -0
  23. package/dist/public/404/index.html +1 -0
  24. package/dist/public/404.html +1 -0
  25. package/dist/public/_next/static/chunks/117-373243894bd7fac6.js +2 -0
  26. package/dist/public/_next/static/chunks/app/_not-found/page-4b9eb8aab41bf6df.js +1 -0
  27. package/dist/public/_next/static/chunks/app/layout-c337d9910c024cee.js +1 -0
  28. package/dist/public/_next/static/chunks/app/page-72fc8cefe60ad1d7.js +1 -0
  29. package/dist/public/_next/static/chunks/fd9d1056-9f91b5e418130764.js +1 -0
  30. package/dist/public/_next/static/chunks/framework-f66176bb897dc684.js +1 -0
  31. package/dist/public/_next/static/chunks/main-7be9b0d6fba5e000.js +1 -0
  32. package/dist/public/_next/static/chunks/main-app-feb0e3b0cc6fb4c7.js +1 -0
  33. package/dist/public/_next/static/chunks/pages/_app-72b849fbd24ac258.js +1 -0
  34. package/dist/public/_next/static/chunks/pages/_error-7ba65e1336b92748.js +1 -0
  35. package/dist/public/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  36. package/dist/public/_next/static/chunks/webpack-8658fdbc42bfbbae.js +1 -0
  37. package/dist/public/_next/static/css/14aedabfb1f06bdb.css +3 -0
  38. package/dist/public/_next/static/uP1Ux3UC4o-JCDXNPB44Y/_buildManifest.js +1 -0
  39. package/dist/public/_next/static/uP1Ux3UC4o-JCDXNPB44Y/_ssgManifest.js +1 -0
  40. package/dist/public/index.html +1 -0
  41. package/dist/public/index.txt +7 -0
  42. package/dist/server/server.d.ts +2 -0
  43. package/dist/server/server.d.ts.map +1 -0
  44. package/dist/server/server.js +104 -0
  45. package/dist/server/server.js.map +1 -0
  46. package/package.json +57 -0
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Parses a markdown queue file into structured tasks.
3
+ * Returns both tasks and any validation errors encountered.
4
+ */
5
+ export function parseQueue(content) {
6
+ const tasks = [];
7
+ const errors = [];
8
+ const lines = content.split('\n');
9
+ let currentTask = null;
10
+ let lineNumber = 0;
11
+ for (const line of lines) {
12
+ lineNumber++;
13
+ const trimmed = line.trim();
14
+ // Match slice header: # Slice S1
15
+ const sliceMatch = trimmed.match(/^#\s+Slice\s+(S\d+)$/);
16
+ if (sliceMatch) {
17
+ // Slice headers are informational only; task IDs contain slice info
18
+ continue;
19
+ }
20
+ // Match task header: ## S1-T1
21
+ const taskMatch = trimmed.match(/^##\s+(S\d+-T\d+)$/);
22
+ if (taskMatch) {
23
+ // Save previous task if exists
24
+ if (currentTask) {
25
+ const validated = validateTask(currentTask, lineNumber - 1);
26
+ if (validated.errors.length > 0) {
27
+ errors.push(...validated.errors);
28
+ }
29
+ if (validated.task) {
30
+ tasks.push(validated.task);
31
+ }
32
+ }
33
+ // Start new task
34
+ const taskId = taskMatch[1];
35
+ const sliceId = taskId.split('-')[0];
36
+ currentTask = {
37
+ id: taskId,
38
+ slice: sliceId,
39
+ area: '',
40
+ description: '',
41
+ acceptanceCriteria: ''
42
+ };
43
+ continue;
44
+ }
45
+ // Parse task fields
46
+ if (currentTask && trimmed) {
47
+ const areaMatch = trimmed.match(/^Area:\s*(.+)$/);
48
+ if (areaMatch) {
49
+ currentTask.area = areaMatch[1].trim();
50
+ continue;
51
+ }
52
+ const dependsMatch = trimmed.match(/^Depends:\s*(.+)$/);
53
+ if (dependsMatch) {
54
+ const deps = dependsMatch[1].trim();
55
+ if (deps === '-') {
56
+ currentTask.dependsOn = [];
57
+ }
58
+ else {
59
+ currentTask.dependsOn = deps.split(',').map(d => d.trim()).filter(d => d);
60
+ }
61
+ continue;
62
+ }
63
+ const descMatch = trimmed.match(/^Description:\s*(.+)$/);
64
+ if (descMatch) {
65
+ currentTask.description = descMatch[1].trim();
66
+ continue;
67
+ }
68
+ const acMatch = trimmed.match(/^AC:\s*(.+)$/);
69
+ if (acMatch) {
70
+ currentTask.acceptanceCriteria = acMatch[1].trim();
71
+ continue;
72
+ }
73
+ }
74
+ }
75
+ // Save last task
76
+ if (currentTask) {
77
+ const validated = validateTask(currentTask, lineNumber);
78
+ if (validated.errors.length > 0) {
79
+ errors.push(...validated.errors);
80
+ }
81
+ if (validated.task) {
82
+ tasks.push(validated.task);
83
+ }
84
+ }
85
+ // Check for duplicate IDs
86
+ const idSet = new Set();
87
+ for (const task of tasks) {
88
+ if (idSet.has(task.id)) {
89
+ errors.push(`Duplicate task ID: ${task.id}`);
90
+ }
91
+ idSet.add(task.id);
92
+ }
93
+ // Check for unknown dependencies
94
+ const taskIds = new Set(tasks.map(t => t.id));
95
+ for (const task of tasks) {
96
+ for (const dep of task.dependsOn) {
97
+ if (!taskIds.has(dep)) {
98
+ errors.push(`Task ${task.id} depends on unknown task: ${dep}`);
99
+ }
100
+ }
101
+ }
102
+ // Check for circular dependencies
103
+ const circularErrors = detectCircularDependencies(tasks);
104
+ errors.push(...circularErrors);
105
+ return { tasks, errors };
106
+ }
107
+ /**
108
+ * Validates that a task has all required fields.
109
+ */
110
+ function validateTask(task, lineNumber) {
111
+ const errors = [];
112
+ if (!task.id) {
113
+ errors.push(`Task at line ${lineNumber} missing ID`);
114
+ return { task: null, errors };
115
+ }
116
+ if (!task.area) {
117
+ errors.push(`Task ${task.id} missing Area field`);
118
+ }
119
+ if (!task.description) {
120
+ errors.push(`Task ${task.id} missing Description field`);
121
+ }
122
+ if (!task.acceptanceCriteria) {
123
+ errors.push(`Task ${task.id} missing AC field`);
124
+ }
125
+ if (task.dependsOn === undefined) {
126
+ errors.push(`Task ${task.id} missing Depends field`);
127
+ }
128
+ // If any required field is missing, don't return the task
129
+ if (errors.length > 0) {
130
+ return { task: null, errors };
131
+ }
132
+ return {
133
+ task: task,
134
+ errors: []
135
+ };
136
+ }
137
+ /**
138
+ * Detects circular dependencies using DFS with recursion stack tracking.
139
+ */
140
+ function detectCircularDependencies(tasks) {
141
+ const errors = [];
142
+ const graph = new Map();
143
+ // Build adjacency list
144
+ for (const task of tasks) {
145
+ graph.set(task.id, task.dependsOn);
146
+ }
147
+ const visited = new Set();
148
+ const recursionStack = new Set();
149
+ const path = [];
150
+ function dfs(taskId) {
151
+ visited.add(taskId);
152
+ recursionStack.add(taskId);
153
+ path.push(taskId);
154
+ const dependencies = graph.get(taskId) || [];
155
+ for (const dep of dependencies) {
156
+ if (!visited.has(dep)) {
157
+ if (dfs(dep)) {
158
+ return true;
159
+ }
160
+ }
161
+ else if (recursionStack.has(dep)) {
162
+ // Found a cycle
163
+ const cycleStart = path.indexOf(dep);
164
+ const cycle = [...path.slice(cycleStart), dep];
165
+ errors.push(`Circular dependency: ${cycle.join(' → ')}`);
166
+ return true;
167
+ }
168
+ }
169
+ recursionStack.delete(taskId);
170
+ path.pop();
171
+ return false;
172
+ }
173
+ // Check each task for cycles
174
+ for (const task of tasks) {
175
+ if (!visited.has(task.id)) {
176
+ dfs(task.id);
177
+ }
178
+ }
179
+ return errors;
180
+ }
181
+ //# sourceMappingURL=queueParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queueParser.js","sourceRoot":"","sources":["../../src/core/queueParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Task, LogEvent, Snapshot } from './types.js';
2
+ /**
3
+ * Computes a snapshot of the current system state from tasks and log events.
4
+ */
5
+ export declare function computeSnapshot(tasks: Task[], events: LogEvent[]): Snapshot;
6
+ //# sourceMappingURL=stateEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateEngine.d.ts","sourceRoot":"","sources":["../../src/core/stateEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAgB,QAAQ,EAAc,MAAM,YAAY,CAAC;AAErF;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAwC3E"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Computes a snapshot of the current system state from tasks and log events.
3
+ */
4
+ export function computeSnapshot(tasks, events) {
5
+ // Create a map of events by task_id for quick lookup
6
+ const eventMap = new Map();
7
+ for (const event of events) {
8
+ eventMap.set(event.task_id, event);
9
+ }
10
+ // Create a map of tasks by id for dependency resolution
11
+ const taskMap = new Map();
12
+ for (const task of tasks) {
13
+ taskMap.set(task.id, task);
14
+ }
15
+ // Sort tasks by ID for deterministic ordering
16
+ const sortedTasks = [...tasks].sort((a, b) => a.id.localeCompare(b.id));
17
+ // Compute status for each task
18
+ const computedTasks = [];
19
+ const statusCache = new Map();
20
+ for (const task of sortedTasks) {
21
+ const status = computeTaskStatus(task, eventMap, taskMap, statusCache);
22
+ const lastEvent = eventMap.get(task.id);
23
+ computedTasks.push({
24
+ ...task,
25
+ status,
26
+ lastEvent
27
+ });
28
+ }
29
+ // Aggregate statistics
30
+ const slices = computeSliceStats(computedTasks);
31
+ const summary = computeSummary(computedTasks);
32
+ return {
33
+ tasks: computedTasks,
34
+ slices,
35
+ summary
36
+ };
37
+ }
38
+ /**
39
+ * Computes the status of a single task based on events and dependencies.
40
+ */
41
+ function computeTaskStatus(task, eventMap, taskMap, statusCache) {
42
+ // Check cache first
43
+ if (statusCache.has(task.id)) {
44
+ return statusCache.get(task.id);
45
+ }
46
+ const lastEvent = eventMap.get(task.id);
47
+ // Priority: FAILED > DONE > BLOCKED > READY
48
+ if (lastEvent?.status === 'FAILED') {
49
+ statusCache.set(task.id, 'FAILED');
50
+ return 'FAILED';
51
+ }
52
+ if (lastEvent?.status === 'DONE') {
53
+ statusCache.set(task.id, 'DONE');
54
+ return 'DONE';
55
+ }
56
+ // Check dependencies
57
+ for (const depId of task.dependsOn) {
58
+ const depTask = taskMap.get(depId);
59
+ if (!depTask) {
60
+ // Unknown dependency - treat as blocking
61
+ statusCache.set(task.id, 'BLOCKED');
62
+ return 'BLOCKED';
63
+ }
64
+ const depStatus = computeTaskStatus(depTask, eventMap, taskMap, statusCache);
65
+ if (depStatus !== 'DONE') {
66
+ statusCache.set(task.id, 'BLOCKED');
67
+ return 'BLOCKED';
68
+ }
69
+ }
70
+ // All dependencies are DONE (or no dependencies)
71
+ statusCache.set(task.id, 'READY');
72
+ return 'READY';
73
+ }
74
+ /**
75
+ * Computes statistics per slice.
76
+ */
77
+ function computeSliceStats(tasks) {
78
+ const slices = {};
79
+ for (const task of tasks) {
80
+ if (!slices[task.slice]) {
81
+ slices[task.slice] = {
82
+ total: 0,
83
+ done: 0,
84
+ failed: 0,
85
+ blocked: 0,
86
+ ready: 0,
87
+ progress: 0
88
+ };
89
+ }
90
+ const slice = slices[task.slice];
91
+ slice.total++;
92
+ switch (task.status) {
93
+ case 'DONE':
94
+ slice.done++;
95
+ break;
96
+ case 'FAILED':
97
+ slice.failed++;
98
+ break;
99
+ case 'BLOCKED':
100
+ slice.blocked++;
101
+ break;
102
+ case 'READY':
103
+ slice.ready++;
104
+ break;
105
+ }
106
+ }
107
+ // Calculate progress percentage for each slice
108
+ for (const slice of Object.values(slices)) {
109
+ if (slice.total > 0) {
110
+ slice.progress = Math.round((slice.done / slice.total) * 100);
111
+ }
112
+ }
113
+ return slices;
114
+ }
115
+ /**
116
+ * Computes global summary statistics.
117
+ */
118
+ function computeSummary(tasks) {
119
+ const summary = {
120
+ total: tasks.length,
121
+ done: 0,
122
+ failed: 0,
123
+ blocked: 0,
124
+ ready: 0,
125
+ successRate: 0
126
+ };
127
+ for (const task of tasks) {
128
+ switch (task.status) {
129
+ case 'DONE':
130
+ summary.done++;
131
+ break;
132
+ case 'FAILED':
133
+ summary.failed++;
134
+ break;
135
+ case 'BLOCKED':
136
+ summary.blocked++;
137
+ break;
138
+ case 'READY':
139
+ summary.ready++;
140
+ break;
141
+ }
142
+ }
143
+ // Calculate success rate: done / (done + failed) || 0
144
+ const completed = summary.done + summary.failed;
145
+ if (completed > 0) {
146
+ summary.successRate = Math.round((summary.done / completed) * 100) / 100;
147
+ }
148
+ return summary;
149
+ }
150
+ //# sourceMappingURL=stateEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateEngine.js","sourceRoot":"","sources":["../../src/core/stateEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export type TaskStatus = "READY" | "BLOCKED" | "DONE" | "FAILED";
2
+ export interface Task {
3
+ id: string;
4
+ slice: string;
5
+ area: string;
6
+ description: string;
7
+ acceptanceCriteria: string;
8
+ dependsOn: string[];
9
+ }
10
+ export interface LogEvent {
11
+ task_id: string;
12
+ status: "DONE" | "FAILED";
13
+ timestamp: string;
14
+ agent: string;
15
+ meta?: Record<string, unknown>;
16
+ }
17
+ export interface ComputedTask extends Task {
18
+ status: TaskStatus;
19
+ lastEvent?: LogEvent;
20
+ }
21
+ export interface Snapshot {
22
+ tasks: ComputedTask[];
23
+ slices: Record<string, {
24
+ total: number;
25
+ done: number;
26
+ failed: number;
27
+ blocked: number;
28
+ ready: number;
29
+ progress: number;
30
+ }>;
31
+ summary: {
32
+ total: number;
33
+ done: number;
34
+ failed: number;
35
+ blocked: number;
36
+ ready: number;
37
+ successRate: number;
38
+ };
39
+ }
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEjE,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,YAAa,SAAQ,IAAI;IACxC,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ <!DOCTYPE html><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/14aedabfb1f06bdb.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-8658fdbc42bfbbae.js"/><script src="/_next/static/chunks/fd9d1056-9f91b5e418130764.js" async=""></script><script src="/_next/static/chunks/117-373243894bd7fac6.js" async=""></script><script src="/_next/static/chunks/main-app-feb0e3b0cc6fb4c7.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>agent-scope</title><meta name="description" content="Execution observer for AI agent workflows"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-8658fdbc42bfbbae.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/14aedabfb1f06bdb.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[4707,[],\"\"]\n5:I[6423,[],\"\"]\nb:I[1060,[],\"\"]\n6:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n7:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n8:{\"display\":\"inline-block\"}\n9:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nc:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"uP1Ux3UC4o-JCDXNPB44Y\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\",\"\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/14aedabfb1f06bdb.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$6\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$7\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$9\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$La\"],\"globalErrorComponent\":\"$b\",\"missingSlots\":\"$Wc\"}]\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"agent-scope\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Execution observer for AI agent workflows\"}]]\n3:null\n"])</script></body></html>
@@ -0,0 +1 @@
1
+ <!DOCTYPE html><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/14aedabfb1f06bdb.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-8658fdbc42bfbbae.js"/><script src="/_next/static/chunks/fd9d1056-9f91b5e418130764.js" async=""></script><script src="/_next/static/chunks/117-373243894bd7fac6.js" async=""></script><script src="/_next/static/chunks/main-app-feb0e3b0cc6fb4c7.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>agent-scope</title><meta name="description" content="Execution observer for AI agent workflows"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-8658fdbc42bfbbae.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/14aedabfb1f06bdb.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[4707,[],\"\"]\n5:I[6423,[],\"\"]\nb:I[1060,[],\"\"]\n6:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n7:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n8:{\"display\":\"inline-block\"}\n9:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nc:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"uP1Ux3UC4o-JCDXNPB44Y\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\",\"\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/14aedabfb1f06bdb.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$6\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$7\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$9\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$La\"],\"globalErrorComponent\":\"$b\",\"missingSlots\":\"$Wc\"}]\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"agent-scope\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Execution observer for AI agent workflows\"}]]\n3:null\n"])</script></body></html>