@llmagentscore/core 0.2.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 (85) hide show
  1. package/dist/index.d.ts +18 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +18 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/llm/anthropic.d.ts +16 -0
  6. package/dist/llm/anthropic.d.ts.map +1 -0
  7. package/dist/llm/anthropic.js +67 -0
  8. package/dist/llm/anthropic.js.map +1 -0
  9. package/dist/llm/index.d.ts +3 -0
  10. package/dist/llm/index.d.ts.map +1 -0
  11. package/dist/llm/index.js +2 -0
  12. package/dist/llm/index.js.map +1 -0
  13. package/dist/llm/types.d.ts +18 -0
  14. package/dist/llm/types.d.ts.map +1 -0
  15. package/dist/llm/types.js +2 -0
  16. package/dist/llm/types.js.map +1 -0
  17. package/dist/parser/generic.d.ts +11 -0
  18. package/dist/parser/generic.d.ts.map +1 -0
  19. package/dist/parser/generic.js +104 -0
  20. package/dist/parser/generic.js.map +1 -0
  21. package/dist/parser/openclaw.d.ts +11 -0
  22. package/dist/parser/openclaw.d.ts.map +1 -0
  23. package/dist/parser/openclaw.js +80 -0
  24. package/dist/parser/openclaw.js.map +1 -0
  25. package/dist/parser/prompt.d.ts +9 -0
  26. package/dist/parser/prompt.d.ts.map +1 -0
  27. package/dist/parser/prompt.js +114 -0
  28. package/dist/parser/prompt.js.map +1 -0
  29. package/dist/parser/types.d.ts +58 -0
  30. package/dist/parser/types.d.ts.map +1 -0
  31. package/dist/parser/types.js +2 -0
  32. package/dist/parser/types.js.map +1 -0
  33. package/dist/score-session.d.ts +11 -0
  34. package/dist/score-session.d.ts.map +1 -0
  35. package/dist/score-session.js +15 -0
  36. package/dist/score-session.js.map +1 -0
  37. package/dist/scorer/align.d.ts +15 -0
  38. package/dist/scorer/align.d.ts.map +1 -0
  39. package/dist/scorer/align.js +175 -0
  40. package/dist/scorer/align.js.map +1 -0
  41. package/dist/scorer/drift.d.ts +8 -0
  42. package/dist/scorer/drift.d.ts.map +1 -0
  43. package/dist/scorer/drift.js +117 -0
  44. package/dist/scorer/drift.js.map +1 -0
  45. package/dist/scorer/index.d.ts +4 -0
  46. package/dist/scorer/index.d.ts.map +1 -0
  47. package/dist/scorer/index.js +4 -0
  48. package/dist/scorer/index.js.map +1 -0
  49. package/dist/scorer/llm-align.d.ts +17 -0
  50. package/dist/scorer/llm-align.d.ts.map +1 -0
  51. package/dist/scorer/llm-align.js +299 -0
  52. package/dist/scorer/llm-align.js.map +1 -0
  53. package/dist/scorer/llm-schemas.d.ts +234 -0
  54. package/dist/scorer/llm-schemas.d.ts.map +1 -0
  55. package/dist/scorer/llm-schemas.js +46 -0
  56. package/dist/scorer/llm-schemas.js.map +1 -0
  57. package/dist/scorer/truthful.d.ts +10 -0
  58. package/dist/scorer/truthful.d.ts.map +1 -0
  59. package/dist/scorer/truthful.js +57 -0
  60. package/dist/scorer/truthful.js.map +1 -0
  61. package/dist/scorer/types.d.ts +77 -0
  62. package/dist/scorer/types.d.ts.map +1 -0
  63. package/dist/scorer/types.js +2 -0
  64. package/dist/scorer/types.js.map +1 -0
  65. package/dist/types.d.ts +3 -0
  66. package/dist/types.d.ts.map +1 -0
  67. package/dist/types.js +2 -0
  68. package/dist/types.js.map +1 -0
  69. package/dist/utils/entities.d.ts +20 -0
  70. package/dist/utils/entities.d.ts.map +1 -0
  71. package/dist/utils/entities.js +75 -0
  72. package/dist/utils/entities.js.map +1 -0
  73. package/dist/utils/hash.d.ts +16 -0
  74. package/dist/utils/hash.d.ts.map +1 -0
  75. package/dist/utils/hash.js +47 -0
  76. package/dist/utils/hash.js.map +1 -0
  77. package/dist/utils/semantic.d.ts +29 -0
  78. package/dist/utils/semantic.d.ts.map +1 -0
  79. package/dist/utils/semantic.js +121 -0
  80. package/dist/utils/semantic.js.map +1 -0
  81. package/dist/utils/tool-verbs.d.ts +16 -0
  82. package/dist/utils/tool-verbs.d.ts.map +1 -0
  83. package/dist/utils/tool-verbs.js +89 -0
  84. package/dist/utils/tool-verbs.js.map +1 -0
  85. package/package.json +38 -0
@@ -0,0 +1,18 @@
1
+ export type { AgentAction, PromptInstruction, Constraint, AgentSession, ScoringInput, } from './parser/types.js';
2
+ export type { AlignmentScore, MatchedAction, TruthfulnessResult, TruthfulnessClaim, ConstraintViolation, DriftReport, DriftChange, } from './scorer/types.js';
3
+ export type { LlmProvider, Schema } from './llm/types.js';
4
+ export { createAnthropicProvider, type AnthropicProviderOptions } from './llm/anthropic.js';
5
+ export type { Checkpoint, ExtractCheckpointsResponse, CheckpointVerification, VerifyCheckpointsResponse, ConstraintCheck, CheckConstraintsResponse, TruthfulnessClaim as LlmTruthfulnessClaim, VerifyTruthfulnessResponse, } from './scorer/llm-schemas.js';
6
+ export { parsePrompt } from './parser/prompt.js';
7
+ export { parseOpenClawSession, parseOpenClawDirectory } from './parser/openclaw.js';
8
+ export { parseGenericSession, parseGenericDirectory } from './parser/generic.js';
9
+ export { computeAlignment } from './scorer/align.js';
10
+ export { computeAlignmentLLM } from './scorer/llm-align.js';
11
+ export { computeTruthfulness } from './scorer/truthful.js';
12
+ export { computeDrift } from './scorer/drift.js';
13
+ export { scoreSession } from './score-session.js';
14
+ export { matchScore, tokenize, cosineSimilarity } from './utils/semantic.js';
15
+ export { extractEntities, entityOverlap } from './utils/entities.js';
16
+ export { getToolVerbs, toolVerbMatch, TOOL_VERB_MAP } from './utils/tool-verbs.js';
17
+ export { sessionFingerprint, hashString, behaviorHash } from './utils/hash.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,KAAK,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAG5F,YAAY,EACV,UAAU,EACV,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,eAAe,EACf,wBAAwB,EACxB,iBAAiB,IAAI,oBAAoB,EACzC,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ export { createAnthropicProvider } from './llm/anthropic.js';
2
+ // Parsers
3
+ export { parsePrompt } from './parser/prompt.js';
4
+ export { parseOpenClawSession, parseOpenClawDirectory } from './parser/openclaw.js';
5
+ export { parseGenericSession, parseGenericDirectory } from './parser/generic.js';
6
+ // Scorers
7
+ export { computeAlignment } from './scorer/align.js';
8
+ export { computeAlignmentLLM } from './scorer/llm-align.js';
9
+ export { computeTruthfulness } from './scorer/truthful.js';
10
+ export { computeDrift } from './scorer/drift.js';
11
+ // Unified entry point
12
+ export { scoreSession } from './score-session.js';
13
+ // Utils
14
+ export { matchScore, tokenize, cosineSimilarity } from './utils/semantic.js';
15
+ export { extractEntities, entityOverlap } from './utils/entities.js';
16
+ export { getToolVerbs, toolVerbMatch, TOOL_VERB_MAP } from './utils/tool-verbs.js';
17
+ export { sessionFingerprint, hashString, behaviorHash } from './utils/hash.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,uBAAuB,EAAiC,MAAM,oBAAoB,CAAC;AAc5F,UAAU;AACV,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,UAAU;AACV,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,sBAAsB;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,QAAQ;AACR,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { LlmProvider } from './types.js';
2
+ export interface AnthropicProviderOptions {
3
+ apiKey?: string;
4
+ model?: string;
5
+ temperature?: number;
6
+ maxTokens?: number;
7
+ maxAttempts?: number;
8
+ }
9
+ /**
10
+ * Create an LlmProvider backed by the standard Anthropic SDK.
11
+ *
12
+ * Requires `@anthropic-ai/sdk` to be installed (optional peer dependency).
13
+ * Uses `ANTHROPIC_API_KEY` env var by default.
14
+ */
15
+ export declare function createAnthropicProvider(options?: AnthropicProviderOptions): LlmProvider;
16
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAU,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AASD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,WAAW,CA4EvF"}
@@ -0,0 +1,67 @@
1
+ const DEFAULTS = {
2
+ model: 'claude-sonnet-4-6',
3
+ temperature: 0.1,
4
+ maxTokens: 2048,
5
+ maxAttempts: 3,
6
+ };
7
+ /**
8
+ * Create an LlmProvider backed by the standard Anthropic SDK.
9
+ *
10
+ * Requires `@anthropic-ai/sdk` to be installed (optional peer dependency).
11
+ * Uses `ANTHROPIC_API_KEY` env var by default.
12
+ */
13
+ export function createAnthropicProvider(options) {
14
+ const resolvedKey = options?.apiKey ?? process.env.ANTHROPIC_API_KEY;
15
+ const model = options?.model ?? DEFAULTS.model;
16
+ const temperature = options?.temperature ?? DEFAULTS.temperature;
17
+ const maxTokens = options?.maxTokens ?? DEFAULTS.maxTokens;
18
+ const maxAttempts = options?.maxAttempts ?? DEFAULTS.maxAttempts;
19
+ if (!resolvedKey) {
20
+ throw new Error('Anthropic API key is required. Set ANTHROPIC_API_KEY or pass apiKey option.');
21
+ }
22
+ const apiKey = resolvedKey;
23
+ // Lazy-load the SDK to avoid hard dependency
24
+ let clientPromise = null;
25
+ async function getClient() {
26
+ if (!clientPromise) {
27
+ // @ts-expect-error — optional peer dependency, may not be installed
28
+ clientPromise = import('@anthropic-ai/sdk').then((mod) => new mod.default({ apiKey }));
29
+ }
30
+ return clientPromise;
31
+ }
32
+ return {
33
+ async generateStructured(prompt, schema) {
34
+ const client = await getClient();
35
+ let lastError;
36
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
37
+ try {
38
+ const response = await client.messages.create({
39
+ model,
40
+ max_tokens: maxTokens,
41
+ temperature,
42
+ messages: [{ role: 'user', content: prompt }],
43
+ });
44
+ const text = response.content
45
+ .filter((block) => block.type === 'text')
46
+ .map((block) => block.text ?? '')
47
+ .join('');
48
+ const cleaned = text
49
+ .replace(/^```(?:json)?\s*\n?/m, '')
50
+ .replace(/\n?```\s*$/m, '')
51
+ .trim();
52
+ const parsed = JSON.parse(cleaned);
53
+ return schema.parse(parsed);
54
+ }
55
+ catch (err) {
56
+ lastError = err;
57
+ if (attempt < maxAttempts) {
58
+ const delay = Math.min(1000 * Math.pow(2, attempt - 1), 8000);
59
+ await new Promise((resolve) => setTimeout(resolve, delay));
60
+ }
61
+ }
62
+ }
63
+ throw lastError;
64
+ },
65
+ };
66
+ }
67
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type { LlmProvider, Schema } from './types.js';
2
+ export { createAnthropicProvider, type AnthropicProviderOptions } from './anthropic.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,KAAK,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createAnthropicProvider } from './anthropic.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAiC,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * A schema that can parse/validate unknown data into type T.
3
+ * Compatible with Zod v3, v4, and any object with a `.parse()` method.
4
+ */
5
+ export interface Schema<T> {
6
+ parse(data: unknown): T;
7
+ }
8
+ /**
9
+ * Provider interface for LLM-based scoring.
10
+ * Implementations must accept a prompt and a schema,
11
+ * and return a validated, typed result.
12
+ *
13
+ * Retry logic should be handled internally by the provider.
14
+ */
15
+ export interface LlmProvider {
16
+ generateStructured<T>(prompt: string, schema: Schema<T>): Promise<T>;
17
+ }
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACtE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type { AgentSession } from './types.js';
2
+ /**
3
+ * Parse a generic JSON session log file into an AgentSession.
4
+ * Supports a flexible schema to work with any agent framework.
5
+ */
6
+ export declare function parseGenericSession(filePath: string): Promise<AgentSession>;
7
+ /**
8
+ * Parse all JSON session files from a directory.
9
+ */
10
+ export declare function parseGenericDirectory(dirPath: string): Promise<AgentSession[]>;
11
+ //# sourceMappingURL=generic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../src/parser/generic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,YAAY,CAAC;AAE5D;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAIjF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAiBpF"}
@@ -0,0 +1,104 @@
1
+ import { readFile, readdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ /**
4
+ * Parse a generic JSON session log file into an AgentSession.
5
+ * Supports a flexible schema to work with any agent framework.
6
+ */
7
+ export async function parseGenericSession(filePath) {
8
+ const content = await readFile(filePath, 'utf-8');
9
+ const data = JSON.parse(content);
10
+ return normalizeGenericSession(data);
11
+ }
12
+ /**
13
+ * Parse all JSON session files from a directory.
14
+ */
15
+ export async function parseGenericDirectory(dirPath) {
16
+ const files = await readdir(dirPath);
17
+ const jsonFiles = files.filter((f) => f.endsWith('.json'));
18
+ const sessions = [];
19
+ for (const file of jsonFiles) {
20
+ try {
21
+ const session = await parseGenericSession(join(dirPath, file));
22
+ sessions.push(session);
23
+ }
24
+ catch {
25
+ // Skip files that can't be parsed
26
+ }
27
+ }
28
+ return sessions.sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime());
29
+ }
30
+ /**
31
+ * Normalize a generic session JSON object.
32
+ * Tries multiple common field names for flexibility.
33
+ */
34
+ function normalizeGenericSession(data) {
35
+ const prompt = data.prompt ||
36
+ data.system_prompt ||
37
+ data.instructions ||
38
+ data.task ||
39
+ data.input ||
40
+ '';
41
+ const rawActions = data.tool_calls ||
42
+ data.actions ||
43
+ data.steps ||
44
+ data.events ||
45
+ [];
46
+ const actions = rawActions.map((action) => {
47
+ const a = action;
48
+ return {
49
+ tool: a.tool || a.name || a.function || a.type || 'unknown',
50
+ params: a.params ||
51
+ a.arguments ||
52
+ a.input ||
53
+ a.parameters ||
54
+ {},
55
+ result: a.result ?? a.output ?? a.response ?? undefined,
56
+ timestamp: a.timestamp ||
57
+ a.created_at ||
58
+ a.time ||
59
+ new Date().toISOString(),
60
+ };
61
+ });
62
+ const report = data.report ||
63
+ data.response ||
64
+ data.summary ||
65
+ data.output ||
66
+ data.result ||
67
+ '';
68
+ const framework = data.framework ||
69
+ detectFramework(data) ||
70
+ 'custom';
71
+ return {
72
+ id: data.id || data.session_id || crypto.randomUUID(),
73
+ prompt,
74
+ actions,
75
+ report,
76
+ startedAt: data.started_at ||
77
+ data.created_at ||
78
+ data.timestamp ||
79
+ data.start ||
80
+ new Date().toISOString(),
81
+ endedAt: data.ended_at ||
82
+ data.completed_at ||
83
+ data.end ||
84
+ undefined,
85
+ framework,
86
+ model: data.model || undefined,
87
+ };
88
+ }
89
+ /**
90
+ * Attempt to detect the framework from session data.
91
+ */
92
+ function detectFramework(data) {
93
+ const str = JSON.stringify(data).toLowerCase();
94
+ if (str.includes('openclaw') || str.includes('open_claw'))
95
+ return 'openclaw';
96
+ if (str.includes('langchain') || str.includes('lang_chain'))
97
+ return 'langchain';
98
+ if (str.includes('crewai') || str.includes('crew_ai'))
99
+ return 'crewai';
100
+ if (str.includes('claude-code') || str.includes('claude_code'))
101
+ return 'claude-code';
102
+ return null;
103
+ }
104
+ //# sourceMappingURL=generic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../src/parser/generic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { AgentSession } from './types.js';
2
+ /**
3
+ * Parse OpenClaw session logs from a directory into an AgentSession.
4
+ * OpenClaw stores session data as JSON files in ~/.openclaw/ or a workspace.
5
+ */
6
+ export declare function parseOpenClawSession(sessionPath: string): Promise<AgentSession>;
7
+ /**
8
+ * Parse all OpenClaw sessions from a directory.
9
+ */
10
+ export declare function parseOpenClawDirectory(dirPath: string): Promise<AgentSession[]>;
11
+ //# sourceMappingURL=openclaw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/parser/openclaw.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,YAAY,CAAC;AAE5D;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAIrF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAiBrF"}
@@ -0,0 +1,80 @@
1
+ import { readFile, readdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ /**
4
+ * Parse OpenClaw session logs from a directory into an AgentSession.
5
+ * OpenClaw stores session data as JSON files in ~/.openclaw/ or a workspace.
6
+ */
7
+ export async function parseOpenClawSession(sessionPath) {
8
+ const content = await readFile(sessionPath, 'utf-8');
9
+ const data = JSON.parse(content);
10
+ return normalizeOpenClawSession(data);
11
+ }
12
+ /**
13
+ * Parse all OpenClaw sessions from a directory.
14
+ */
15
+ export async function parseOpenClawDirectory(dirPath) {
16
+ const files = await readdir(dirPath);
17
+ const jsonFiles = files.filter((f) => f.endsWith('.json'));
18
+ const sessions = [];
19
+ for (const file of jsonFiles) {
20
+ try {
21
+ const session = await parseOpenClawSession(join(dirPath, file));
22
+ sessions.push(session);
23
+ }
24
+ catch {
25
+ // Skip files that can't be parsed
26
+ }
27
+ }
28
+ return sessions.sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime());
29
+ }
30
+ /**
31
+ * Normalize an OpenClaw session JSON object into our standard format.
32
+ * Handles various OpenClaw log formats.
33
+ */
34
+ function normalizeOpenClawSession(data) {
35
+ // Extract prompt from various possible fields
36
+ const prompt = data.prompt ||
37
+ data.system_prompt ||
38
+ data.instructions ||
39
+ data.task ||
40
+ '';
41
+ // Extract actions / tool calls
42
+ const rawActions = data.tool_calls ||
43
+ data.actions ||
44
+ data.steps ||
45
+ [];
46
+ const actions = rawActions.map((action) => {
47
+ const a = action;
48
+ return {
49
+ tool: a.tool || a.name || a.function || 'unknown',
50
+ params: a.params ||
51
+ a.arguments ||
52
+ a.input ||
53
+ {},
54
+ result: a.result ?? a.output ?? a.response ?? undefined,
55
+ timestamp: a.timestamp ||
56
+ a.created_at ||
57
+ new Date().toISOString(),
58
+ };
59
+ });
60
+ // Extract report (agent's summary of what it did)
61
+ const report = data.report ||
62
+ data.response ||
63
+ data.summary ||
64
+ data.output ||
65
+ '';
66
+ return {
67
+ id: data.id || data.session_id || crypto.randomUUID(),
68
+ prompt,
69
+ actions,
70
+ report,
71
+ startedAt: data.started_at ||
72
+ data.created_at ||
73
+ data.timestamp ||
74
+ new Date().toISOString(),
75
+ endedAt: data.ended_at || data.completed_at || undefined,
76
+ framework: 'openclaw',
77
+ model: data.model || undefined,
78
+ };
79
+ }
80
+ //# sourceMappingURL=openclaw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/parser/openclaw.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { PromptInstruction, Constraint } from './types.js';
2
+ /**
3
+ * Parse a prompt into individual instructions and constraints.
4
+ */
5
+ export declare function parsePrompt(prompt: string): {
6
+ instructions: PromptInstruction[];
7
+ constraints: Constraint[];
8
+ };
9
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/parser/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmChE;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG;IAC3C,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B,CA0BA"}
@@ -0,0 +1,114 @@
1
+ import { extractEntities } from '../utils/entities.js';
2
+ /**
3
+ * Patterns that indicate imperative instructions.
4
+ * Matches sentences starting with action verbs.
5
+ */
6
+ const IMPERATIVE_VERBS = [
7
+ 'send', 'search', 'find', 'create', 'write', 'read', 'update', 'delete',
8
+ 'remove', 'add', 'post', 'publish', 'check', 'review', 'analyze', 'run',
9
+ 'execute', 'deploy', 'build', 'install', 'configure', 'set', 'get',
10
+ 'fetch', 'download', 'upload', 'save', 'open', 'close', 'start', 'stop',
11
+ 'make', 'generate', 'compile', 'test', 'debug', 'fix', 'merge', 'push',
12
+ 'pull', 'commit', 'schedule', 'notify', 'alert', 'email', 'message',
13
+ 'forward', 'reply', 'cc', 'include', 'exclude', 'filter', 'sort',
14
+ 'summarize', 'report', 'log', 'monitor', 'track', 'backup', 'restore',
15
+ 'export', 'import', 'convert', 'transform', 'format', 'validate',
16
+ 'verify', 'confirm', 'approve', 'reject', 'accept', 'deny', 'grant',
17
+ 'list', 'show', 'display', 'print', 'output', 'copy', 'move', 'rename',
18
+ 'navigate', 'visit', 'browse', 'click', 'select', 'submit', 'enter',
19
+ 'type', 'fill', 'complete', 'process', 'handle', 'call', 'query',
20
+ 'look', 'put', 'use', 'apply', 'modify', 'change', 'edit', 'draft',
21
+ 'prepare', 'organize', 'clean', 'clear', 'reset', 'refresh', 'sync',
22
+ 'connect', 'disconnect', 'attach', 'detach', 'link', 'unlink',
23
+ ];
24
+ /**
25
+ * Patterns that indicate negative constraints.
26
+ */
27
+ const CONSTRAINT_PATTERNS = {
28
+ dont: /(?:don'?t|do not|never|avoid|refrain from)\s+(.+)/i,
29
+ only: /(?:only|exclusively|solely|just)\s+(.+)/i,
30
+ limit: /(?:limit|restrict|cap|maximum|at most|no more than)\s+(.+)/i,
31
+ };
32
+ /**
33
+ * Parse a prompt into individual instructions and constraints.
34
+ */
35
+ export function parsePrompt(prompt) {
36
+ const instructions = [];
37
+ const constraints = [];
38
+ // Split into sentences
39
+ const sentences = splitIntoSentences(prompt);
40
+ for (const sentence of sentences) {
41
+ const trimmed = sentence.trim();
42
+ if (!trimmed || trimmed.length < 3)
43
+ continue;
44
+ // Check for constraints first
45
+ const constraint = parseConstraint(trimmed);
46
+ if (constraint) {
47
+ constraints.push(constraint);
48
+ continue;
49
+ }
50
+ // Check for imperative instructions
51
+ const instruction = parseInstruction(trimmed);
52
+ if (instruction) {
53
+ instructions.push(instruction);
54
+ }
55
+ }
56
+ return { instructions, constraints };
57
+ }
58
+ /**
59
+ * Split text into sentences, handling common edge cases.
60
+ */
61
+ function splitIntoSentences(text) {
62
+ // Split on sentence boundaries, bullet points, and numbered lists
63
+ return text
64
+ .split(/(?:\.\s+|[.!?]\s*$|\n+|(?:^|\n)\s*[-•*]\s+|(?:^|\n)\s*\d+[.)]\s+)/m)
65
+ .map((s) => s.trim())
66
+ .filter((s) => s.length > 0);
67
+ }
68
+ /**
69
+ * Try to parse a sentence as a constraint.
70
+ */
71
+ function parseConstraint(sentence) {
72
+ for (const [type, pattern] of Object.entries(CONSTRAINT_PATTERNS)) {
73
+ const match = sentence.match(pattern);
74
+ if (match) {
75
+ return {
76
+ text: sentence,
77
+ type,
78
+ target: match[1].trim(),
79
+ };
80
+ }
81
+ }
82
+ return null;
83
+ }
84
+ /**
85
+ * Try to parse a sentence as an imperative instruction.
86
+ */
87
+ function parseInstruction(sentence) {
88
+ const lowerSentence = sentence.toLowerCase().trim();
89
+ // Check if starts with an imperative verb
90
+ const firstWord = lowerSentence.split(/\s+/)[0];
91
+ const isImperative = IMPERATIVE_VERBS.includes(firstWord);
92
+ // Also match "please <verb>" and "then <verb>" patterns
93
+ const secondWord = lowerSentence.split(/\s+/)[1];
94
+ const isPoliteImperative = (firstWord === 'please' || firstWord === 'then' || firstWord === 'also' || firstWord === 'next') &&
95
+ secondWord &&
96
+ IMPERATIVE_VERBS.includes(secondWord);
97
+ if (!isImperative && !isPoliteImperative) {
98
+ return null;
99
+ }
100
+ const verb = isImperative ? firstWord : secondWord;
101
+ const entities = extractEntities(sentence);
102
+ const entityList = [
103
+ ...entities.emails,
104
+ ...entities.urls,
105
+ ...entities.filenames,
106
+ ...entities.quotedStrings,
107
+ ];
108
+ return {
109
+ text: sentence,
110
+ verb,
111
+ entities: entityList,
112
+ };
113
+ }
114
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/parser/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /** A single action taken by an agent (tool call, API call, file operation, etc.) */
2
+ export interface AgentAction {
3
+ /** Tool or function name (e.g., "gmail_send", "file_write") */
4
+ tool: string;
5
+ /** Parameters passed to the tool */
6
+ params: Record<string, unknown>;
7
+ /** What the tool returned */
8
+ result?: unknown;
9
+ /** ISO timestamp of when the action was executed */
10
+ timestamp: string;
11
+ }
12
+ /** An instruction extracted from the agent's prompt */
13
+ export interface PromptInstruction {
14
+ /** The raw text of the instruction */
15
+ text: string;
16
+ /** Extracted action verb (e.g., "send", "search", "create") */
17
+ verb: string;
18
+ /** Entities referenced (emails, URLs, filenames, names) */
19
+ entities: string[];
20
+ }
21
+ /** A constraint extracted from the prompt (negative instructions) */
22
+ export interface Constraint {
23
+ /** The raw text of the constraint */
24
+ text: string;
25
+ /** Type of constraint */
26
+ type: 'dont' | 'only' | 'limit';
27
+ /** Tool or action this constraint applies to */
28
+ target: string;
29
+ }
30
+ /** A complete agent session with all data needed for scoring */
31
+ export interface AgentSession {
32
+ /** Unique session identifier */
33
+ id: string;
34
+ /** The prompt / instructions given to the agent */
35
+ prompt: string;
36
+ /** Actions the agent actually performed */
37
+ actions: AgentAction[];
38
+ /** What the agent reported it did */
39
+ report: string;
40
+ /** ISO timestamp when the session started */
41
+ startedAt: string;
42
+ /** ISO timestamp when the session ended */
43
+ endedAt?: string;
44
+ /** Agent framework that produced this session */
45
+ framework: 'openclaw' | 'claude-code' | 'langchain' | 'crewai' | 'custom';
46
+ /** Model used (e.g., "claude-sonnet-4-20250514") */
47
+ model?: string;
48
+ }
49
+ /** Input to the scoring engine */
50
+ export interface ScoringInput {
51
+ /** The instructions given to the agent */
52
+ prompt: string;
53
+ /** What the agent actually did */
54
+ actions: AgentAction[];
55
+ /** What the agent said it did */
56
+ report: string;
57
+ }
58
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/parser/types.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,6BAA6B;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,uDAAuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qEAAqE;AACrE,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,SAAS,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1E,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/parser/types.ts"],"names":[],"mappings":""}