elasticdash-test 0.1.25 → 0.1.26-alpha-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/README.md +7 -4
- package/dist/cli.js +13 -12
- package/dist/cli.js.map +1 -1
- package/docs/agent-coding-instructions.md +118 -0
- package/docs/agent-integration-guide.md +178 -232
- package/package.json +1 -1
- package/src/cli.ts +13 -12
package/README.md
CHANGED
|
@@ -50,12 +50,14 @@ npm install elasticdash-test
|
|
|
50
50
|
If you use a coding agent (Claude Code, Cursor, Copilot, Codex, Windsurf, etc.), tell your agent:
|
|
51
51
|
|
|
52
52
|
```
|
|
53
|
-
Integrate elasticdash-test into this project.
|
|
53
|
+
Integrate elasticdash-test into this project.
|
|
54
|
+
Read node_modules/elasticdash-test/docs/agent-coding-instructions.md for how to proceed,
|
|
55
|
+
and node_modules/elasticdash-test/docs/agent-integration-guide.md for technical reference.
|
|
54
56
|
```
|
|
55
57
|
|
|
56
|
-
Your agent will read
|
|
58
|
+
Your agent will read both docs and handle the full setup — creating `ed_tools.ts`, `ed_workflows.ts`, updating source files, and validating the connection.
|
|
57
59
|
|
|
58
|
-
**Optional:** To copy the
|
|
60
|
+
**Optional:** To copy the agent instructions into your project for easier access:
|
|
59
61
|
|
|
60
62
|
```bash
|
|
61
63
|
npx elasticdash init-guide # creates AGENTS.md
|
|
@@ -162,7 +164,8 @@ Duration: 3.4s
|
|
|
162
164
|
|
|
163
165
|
### Integration & Reference
|
|
164
166
|
- **[Instrumentation Guide](docs/instrumentation.md)** — how to write `ed_tools.ts`, `ed_workflows.ts`, and `ed_agents.ts` to connect your production code to ElasticDash
|
|
165
|
-
- **[
|
|
167
|
+
- **[Integration Guide](docs/agent-integration-guide.md)** — step-by-step SDK integration reference (templates, patterns, decision trees)
|
|
168
|
+
- **[Agent Coding Instructions](docs/agent-coding-instructions.md)** — behavioral instructions for AI coding agents performing the integration
|
|
166
169
|
- **[Langfuse Trace Structure](docs/langfuse-trace-structure.md)** — Langfuse span structure required for dashboard replay and tool-level diffing
|
|
167
170
|
|
|
168
171
|
---
|
package/dist/cli.js
CHANGED
|
@@ -490,16 +490,17 @@ async function bootstrap() {
|
|
|
490
490
|
// elasticdash init-guide
|
|
491
491
|
program
|
|
492
492
|
.command('init-guide')
|
|
493
|
-
.description('Copy the ElasticDash agent
|
|
493
|
+
.description('Copy the ElasticDash agent coding instructions into your project')
|
|
494
494
|
.option('--target <path>', 'Destination file path', 'AGENTS.md')
|
|
495
495
|
.option('--force', 'Overwrite the file instead of appending')
|
|
496
496
|
.action(async (cmd) => {
|
|
497
497
|
const targetPath = path.resolve(cwd, cmd.target);
|
|
498
|
-
// Resolve
|
|
498
|
+
// Resolve docs from the SDK's own docs/ directory
|
|
499
499
|
const thisFile = fileURLToPath(import.meta.url);
|
|
500
|
-
const
|
|
501
|
-
|
|
502
|
-
|
|
500
|
+
const docsDir = path.resolve(path.dirname(thisFile), '..', 'docs');
|
|
501
|
+
const instructionsSrc = path.resolve(docsDir, 'agent-coding-instructions.md');
|
|
502
|
+
if (!existsSync(instructionsSrc)) {
|
|
503
|
+
console.error(`[elasticdash] Could not find agent coding instructions at ${instructionsSrc}`);
|
|
503
504
|
process.exit(1);
|
|
504
505
|
}
|
|
505
506
|
// Ensure target directory exists
|
|
@@ -507,22 +508,22 @@ async function bootstrap() {
|
|
|
507
508
|
if (!existsSync(targetDir)) {
|
|
508
509
|
mkdirSync(targetDir, { recursive: true });
|
|
509
510
|
}
|
|
510
|
-
const guideContent = readFileSync(
|
|
511
|
+
const guideContent = readFileSync(instructionsSrc, 'utf-8');
|
|
511
512
|
if (existsSync(targetPath) && !cmd.force) {
|
|
512
|
-
// Check if
|
|
513
|
+
// Check if instructions are already appended
|
|
513
514
|
const existing = readFileSync(targetPath, 'utf-8');
|
|
514
|
-
if (existing.includes('ElasticDash SDK — Agent
|
|
515
|
-
console.log(`[elasticdash] ${cmd.target} already contains the ElasticDash
|
|
515
|
+
if (existing.includes('ElasticDash SDK — AI Coding Agent Instructions')) {
|
|
516
|
+
console.log(`[elasticdash] ${cmd.target} already contains the ElasticDash agent instructions. Use --force to replace the file.`);
|
|
516
517
|
process.exit(0);
|
|
517
518
|
}
|
|
518
519
|
// Append to existing file
|
|
519
520
|
appendFileSync(targetPath, '\n\n---\n\n' + guideContent);
|
|
520
|
-
console.log(`[elasticdash] ElasticDash
|
|
521
|
+
console.log(`[elasticdash] ElasticDash agent instructions appended to ${cmd.target}`);
|
|
521
522
|
}
|
|
522
523
|
else {
|
|
523
524
|
// Create new file or overwrite with --force
|
|
524
|
-
copyFileSync(
|
|
525
|
-
console.log(`[elasticdash] Agent
|
|
525
|
+
copyFileSync(instructionsSrc, targetPath);
|
|
526
|
+
console.log(`[elasticdash] Agent coding instructions written to ${cmd.target}`);
|
|
526
527
|
}
|
|
527
528
|
console.log();
|
|
528
529
|
console.log(` Tell your coding agent:`);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# ElasticDash SDK — AI Coding Agent Instructions
|
|
2
|
+
|
|
3
|
+
> **Audience**: Coding agents (Claude Code, Cursor, Copilot, Codex, Windsurf, etc.) integrating `elasticdash-test` into a user's project.
|
|
4
|
+
>
|
|
5
|
+
> **When to use**: Follow these instructions when a user asks you to "integrate ElasticDash", "set up ElasticDash testing", "implement elasticdash-test", or similar.
|
|
6
|
+
>
|
|
7
|
+
> **Technical reference**: All templates, code patterns, and step-by-step implementation details are in the companion doc: [Integration Guide](./agent-integration-guide.md) (`node_modules/elasticdash-test/docs/agent-integration-guide.md`). Read it alongside these instructions.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Behavioral rules
|
|
12
|
+
|
|
13
|
+
- **Automation level**: Automatically implement all steps unless you are not confident about a specific change (e.g., unclear which function is a tool vs. a utility, or ambiguous workflow boundaries). In those cases, ask the user before proceeding. For straightforward tool/workflow functions, proceed without asking.
|
|
14
|
+
- **No placeholders**: Do NOT leave `YOUR_TOOL_NAME` / `YOUR_WORKFLOW_NAME` placeholders in generated files. Scan the codebase first and use real function names, imports, and types.
|
|
15
|
+
- **Modify source files**: The integration requires updating existing source files (route handlers, executors) to import tools from `ed_tools` and add trace hooks. This is expected — do not skip it.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Execution order
|
|
20
|
+
|
|
21
|
+
### Phase 1: Pre-flight checks
|
|
22
|
+
|
|
23
|
+
**1. Check `.env` for `ELASTICDASH_API_URL`**
|
|
24
|
+
|
|
25
|
+
- If present: use the existing value.
|
|
26
|
+
- If missing: add `ELASTICDASH_API_URL=https://server.elasticdash.com` to `.env`.
|
|
27
|
+
|
|
28
|
+
**2. Check `.env` for `ELASTICDASH_API_KEY`**
|
|
29
|
+
|
|
30
|
+
- If present: proceed.
|
|
31
|
+
- If missing: **STOP and ask the user**:
|
|
32
|
+
|
|
33
|
+
> "Your project needs an ElasticDash API key. Please complete the onboarding at https://app.elasticdash.com to get your project API key, then add `ELASTICDASH_API_KEY=ed_your_key_here` to your `.env` file. Let me know when it's ready."
|
|
34
|
+
|
|
35
|
+
**Do not continue until `ELASTICDASH_API_KEY` is set.** The SDK cannot connect to the backend without it.
|
|
36
|
+
|
|
37
|
+
### Phase 2: Scan the codebase
|
|
38
|
+
|
|
39
|
+
Before creating any files, identify:
|
|
40
|
+
|
|
41
|
+
- **Tool functions**: Exported async functions that call external services (APIs, databases, search, etc.). Look for functions that use `fetch`, database clients, SDK calls, or any external I/O. These go in `ed_tools.ts`.
|
|
42
|
+
- **Workflow functions**: Exported async functions that orchestrate an AI pipeline — typically calling an LLM and one or more tools. Look for functions that call OpenAI, Anthropic, Gemini, or similar SDKs. These go in `ed_workflows.ts`.
|
|
43
|
+
- **Route handlers / entry points**: Files that call the tool and workflow functions above. These need import updates in Phase 3.
|
|
44
|
+
|
|
45
|
+
If the project has no clear tool or workflow functions yet, ask the user:
|
|
46
|
+
|
|
47
|
+
> "Which functions in your codebase make external API/service calls (tools), and which functions orchestrate your AI workflow? I need to know so I can set up ElasticDash instrumentation."
|
|
48
|
+
|
|
49
|
+
Also detect the project type (see [Integration Guide — Prerequisites](./agent-integration-guide.md#detect-project-type-before-starting)) to choose the right patterns.
|
|
50
|
+
|
|
51
|
+
### Phase 3: Implement
|
|
52
|
+
|
|
53
|
+
Follow the [Integration Guide](./agent-integration-guide.md) steps 1–7 in order, using real function names from Phase 2:
|
|
54
|
+
|
|
55
|
+
1. **Install** — `npm install elasticdash-test`, update `.gitignore`
|
|
56
|
+
2. **Create `ed_tools.ts`** — wrap each identified tool function with `wrapTool()`
|
|
57
|
+
3. **Create `ed_workflows.ts`** — add trace hooks (`edStartTrace`/`edEndTrace`) and workflow exports
|
|
58
|
+
4. **Update existing source files** — change imports from original sources to `ed_tools`, add trace hooks to route handlers
|
|
59
|
+
5. **Add config and scripts** — `elasticdash.config.ts`, `package.json` scripts
|
|
60
|
+
6. **Environment variables** — verify all required vars are in `.env`
|
|
61
|
+
7. **Write a test** (optional) — create a sample `.ai.test.ts` file if the user wants tests
|
|
62
|
+
|
|
63
|
+
**When modifying existing files (Step 4):**
|
|
64
|
+
|
|
65
|
+
- Search the codebase for every file that imports the original tool functions
|
|
66
|
+
- Update imports to come from `ed_tools` instead
|
|
67
|
+
- Add `edStartTrace`/`edEndTrace` to route handlers
|
|
68
|
+
- Do NOT modify `ed_tools.ts` imports (they must still reference original sources)
|
|
69
|
+
- Do NOT modify the original tool implementation files
|
|
70
|
+
- If unsure whether a function is a tool, ask the user
|
|
71
|
+
|
|
72
|
+
### Phase 4: Validate
|
|
73
|
+
|
|
74
|
+
Run the `observe` command to establish a socket.io connection to the ElasticDash backend:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
npx elasticdash observe
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Expected output on success:**
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
[elasticdash] Observability active
|
|
84
|
+
Session ID : <uuid>
|
|
85
|
+
Server : https://server.elasticdash.com
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
This confirms:
|
|
89
|
+
|
|
90
|
+
- `ELASTICDASH_API_URL` and `ELASTICDASH_API_KEY` are valid (backend authenticates the API key and returns `auth:ok`)
|
|
91
|
+
- The socket.io connection to the backend is established
|
|
92
|
+
- The SDK discovered and registered tools from `ed_tools.ts` and workflows from `ed_workflows.ts` (pushed to `POST /api/observability/catalog`)
|
|
93
|
+
|
|
94
|
+
**If it fails:** Check that `.env` has valid values. If the API key is rejected, the user needs to get a new one from https://app.elasticdash.com.
|
|
95
|
+
|
|
96
|
+
After validation, stop the observe process (Ctrl+C) and inform the user that ElasticDash is integrated. Provide these commands for ongoing use:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npx elasticdash test # Run aiTest tests
|
|
100
|
+
npx ed ed-test --no-upload # Run defineTest benchmarks
|
|
101
|
+
npx elasticdash dashboard # Open the dashboard
|
|
102
|
+
npx elasticdash observe # Start live tracing
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Decision guidance
|
|
108
|
+
|
|
109
|
+
When the integration guide offers multiple patterns, use these rules:
|
|
110
|
+
|
|
111
|
+
| Decision | Choose this | When |
|
|
112
|
+
|----------|-------------|------|
|
|
113
|
+
| Subprocess vs HTTP mode | HTTP mode | Project uses Next.js, Remix, SvelteKit, or similar framework |
|
|
114
|
+
| Subprocess vs HTTP mode | Subprocess (default) | Plain Node.js project, no framework |
|
|
115
|
+
| `wrapTool` vs manual pattern | `wrapTool` | Always prefer unless the project specifically needs mock support via `resolveMock` |
|
|
116
|
+
| Path alias handling | Advanced dashboard script | `tsconfig.json` has a `"paths"` field |
|
|
117
|
+
| `ed_agents.ts` | Create it | Project has a planner/executor agent pattern |
|
|
118
|
+
| `ed_agents.ts` | Skip it | No multi-step agent |
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
# ElasticDash SDK —
|
|
1
|
+
# ElasticDash SDK — Integration Guide
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
> **
|
|
6
|
-
>
|
|
7
|
-
> **How to use**: Read the full guide first to understand the project's structure, then execute each step. Use the decision trees section to choose the right pattern for the user's project (framework type, module system, tool architecture).
|
|
8
|
-
>
|
|
9
|
-
> **Important**: Do NOT leave `YOUR_TOOL_NAME` / `YOUR_WORKFLOW_NAME` placeholders in generated files. Before creating `ed_tools.ts` and `ed_workflows.ts`, scan the user's codebase to identify their actual tool functions (functions that call external APIs, databases, or services) and workflow functions (async functions that orchestrate LLM calls and tool calls). Create the files with the real function names, imports, and types found in the codebase. If no tools or workflows exist yet, ask the user which functions to instrument rather than generating placeholder files.
|
|
3
|
+
Technical reference for integrating `elasticdash-test` into a project. Contains all templates, code patterns, and step-by-step details.
|
|
4
|
+
|
|
5
|
+
> **For AI coding agents**: See [Agent Coding Instructions](./agent-coding-instructions.md) for behavioral rules, automation guidance, and execution order.
|
|
10
6
|
|
|
11
7
|
---
|
|
12
8
|
|
|
@@ -14,18 +10,9 @@
|
|
|
14
10
|
|
|
15
11
|
- Node.js >= 20
|
|
16
12
|
- npm, yarn, or pnpm
|
|
13
|
+
- At least one AI workflow function (a callable async function that makes LLM/tool calls)
|
|
17
14
|
- LLM provider API keys for providers used in workflows (e.g., `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`)
|
|
18
15
|
|
|
19
|
-
### Identify tools and workflows in the codebase
|
|
20
|
-
|
|
21
|
-
Before starting, scan the project to find:
|
|
22
|
-
|
|
23
|
-
- **Tool functions**: Exported async functions that call external services (APIs, databases, search, etc.). Look for functions that use `fetch`, database clients, SDK calls, or any external I/O. These go in `ed_tools.ts`.
|
|
24
|
-
- **Workflow functions**: Exported async functions that orchestrate an AI pipeline — typically calling an LLM and one or more tools. Look for functions that call OpenAI, Anthropic, Gemini, or similar SDKs. These go in `ed_workflows.ts`.
|
|
25
|
-
|
|
26
|
-
If the project has no clear tool or workflow functions yet, ask the user:
|
|
27
|
-
> "Which functions in your codebase make external API/service calls (tools), and which functions orchestrate your AI workflow? I need to know so I can set up ElasticDash instrumentation."
|
|
28
|
-
|
|
29
16
|
### Detect project type before starting
|
|
30
17
|
|
|
31
18
|
Check these before choosing patterns:
|
|
@@ -56,163 +43,61 @@ Add to `.gitignore`:
|
|
|
56
43
|
|
|
57
44
|
## Step 2: Create `ed_tools.ts`
|
|
58
45
|
|
|
59
|
-
Create `ed_tools.ts` in the project root. This file wraps each tool function with
|
|
60
|
-
|
|
61
|
-
**Before writing this file**: Search the codebase for functions that call external services (APIs, databases, SDKs). Each one becomes a wrapped export in `ed_tools.ts`. Replace all `YOUR_TOOL_*` and `YOUR_SOURCE_PATH_*` placeholders below with the actual function names and import paths found in the project.
|
|
62
|
-
|
|
63
|
-
### Choose your pattern
|
|
46
|
+
Create `ed_tools.ts` in the project root. This file wraps each tool function with `wrapTool()` for automatic tracing, mocking, and telemetry.
|
|
64
47
|
|
|
65
|
-
|
|
66
|
-
- **Pattern A**: `withTrace` HOF with central dispatcher. Use when tools are pure functions called through a single `dispatchTool(name, args)` dispatcher.
|
|
67
|
-
|
|
68
|
-
### Pattern B template (recommended)
|
|
48
|
+
### Template
|
|
69
49
|
|
|
70
50
|
```ts
|
|
71
51
|
// ed_tools.ts
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
52
|
+
import { setElasticDashModule } from './ed_workflows'
|
|
53
|
+
|
|
54
|
+
// Import original tool implementations from the actual source files
|
|
55
|
+
import { originalTool1 } from './services/YOUR_SOURCE_1'
|
|
56
|
+
import { originalTool2 } from './utils/YOUR_SOURCE_2'
|
|
75
57
|
|
|
76
58
|
// ---------------------------------------------------------------------------
|
|
77
|
-
//
|
|
59
|
+
// Load elasticdash-test and share the module with ed_workflows.ts
|
|
78
60
|
// ---------------------------------------------------------------------------
|
|
79
61
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (entry.mode === 'mock-all') {
|
|
94
|
-
const data = entry.mockData ?? {}
|
|
95
|
-
const result = data[callNumber] !== undefined ? data[callNumber] : data[0]
|
|
96
|
-
return { mocked: true, result }
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
if (entry.mode === 'mock-specific') {
|
|
100
|
-
const indices = entry.callIndices ?? []
|
|
101
|
-
if (indices.includes(callNumber)) {
|
|
102
|
-
return { mocked: true, result: (entry.mockData ?? {})[callNumber] }
|
|
103
|
-
}
|
|
104
|
-
return { mocked: false }
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return { mocked: false }
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
async function safeRecordToolCall(tool: string, input: any, result: any) {
|
|
111
|
-
if (!(globalThis as any).__ELASTICDASH_WORKER__) return
|
|
112
|
-
try {
|
|
113
|
-
const { recordToolCall } = await import('elasticdash-test')
|
|
114
|
-
recordToolCall(tool, input, result)
|
|
115
|
-
} catch { /* tracing must never block business logic */ }
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
63
|
+
type WrapToolFn = <T extends (...args: any[]) => any>(name: string, fn: T) => T
|
|
64
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
65
|
+
let wrapTool: WrapToolFn = (_name: string, fn: any) => fn
|
|
66
|
+
|
|
67
|
+
try {
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
69
|
+
const _edModule = (eval('require') as (id: string) => any)('elasticdash-test')
|
|
70
|
+
wrapTool = _edModule.wrapTool ?? wrapTool
|
|
71
|
+
// Share the module instance with ed_workflows.ts so trace hooks use the same context
|
|
72
|
+
setElasticDashModule(_edModule)
|
|
73
|
+
} catch {
|
|
74
|
+
// elasticdash-test not available — all wrappers pass through to original functions
|
|
116
75
|
}
|
|
117
76
|
|
|
118
77
|
// ---------------------------------------------------------------------------
|
|
119
|
-
//
|
|
78
|
+
// Wrapped tools — one export per tool
|
|
120
79
|
// ---------------------------------------------------------------------------
|
|
121
80
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
if (mock.mocked) {
|
|
126
|
-
await safeRecordToolCall('YOUR_TOOL_1', input, mock.result)
|
|
127
|
-
return mock.result
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return await YOUR_TOOL_1_impl(input)
|
|
131
|
-
.then(async (res: any) => {
|
|
132
|
-
await safeRecordToolCall('YOUR_TOOL_1', input, res)
|
|
133
|
-
return res
|
|
134
|
-
})
|
|
135
|
-
.catch(async (err: any) => {
|
|
136
|
-
await safeRecordToolCall('YOUR_TOOL_1', input, err)
|
|
137
|
-
throw err
|
|
138
|
-
})
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export const YOUR_TOOL_2 = async (input: any) => {
|
|
142
|
-
const mock = resolveMock('YOUR_TOOL_2')
|
|
143
|
-
if (mock.mocked) {
|
|
144
|
-
await safeRecordToolCall('YOUR_TOOL_2', input, mock.result)
|
|
145
|
-
return mock.result
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
return await YOUR_TOOL_2_impl(input)
|
|
149
|
-
.then(async (res: any) => {
|
|
150
|
-
await safeRecordToolCall('YOUR_TOOL_2', input, res)
|
|
151
|
-
return res
|
|
152
|
-
})
|
|
153
|
-
.catch(async (err: any) => {
|
|
154
|
-
await safeRecordToolCall('YOUR_TOOL_2', input, err)
|
|
155
|
-
throw err
|
|
156
|
-
})
|
|
157
|
-
}
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### Pattern A template (dispatcher-based)
|
|
161
|
-
|
|
162
|
-
```ts
|
|
163
|
-
// ed_tools.ts
|
|
164
|
-
// Replace imports with your actual tool functions and source paths
|
|
165
|
-
import {
|
|
166
|
-
YOUR_TOOL_1 as _YOUR_TOOL_1,
|
|
167
|
-
YOUR_TOOL_2 as _YOUR_TOOL_2,
|
|
168
|
-
dispatchTool as _dispatchTool,
|
|
169
|
-
} from './YOUR_TOOLS_SOURCE'
|
|
170
|
-
|
|
171
|
-
async function withTrace<I, O>(
|
|
172
|
-
toolName: string,
|
|
173
|
-
input: I,
|
|
174
|
-
fn: (input: I) => Promise<O>,
|
|
175
|
-
): Promise<O> {
|
|
176
|
-
const result = await fn(input)
|
|
177
|
-
try {
|
|
178
|
-
const { recordToolCall } = await import('elasticdash-test')
|
|
179
|
-
recordToolCall(toolName, input, result)
|
|
180
|
-
} catch { /* tracing must never block business logic */ }
|
|
181
|
-
return result
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
export function YOUR_TOOL_1(input: Parameters<typeof _YOUR_TOOL_1>[0]) {
|
|
185
|
-
return withTrace('YOUR_TOOL_1', input, _YOUR_TOOL_1)
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
export function YOUR_TOOL_2(input: Parameters<typeof _YOUR_TOOL_2>[0]) {
|
|
189
|
-
return withTrace('YOUR_TOOL_2', input, _YOUR_TOOL_2)
|
|
190
|
-
}
|
|
81
|
+
export const myTool1 = wrapTool('myTool1', async (input: any) => {
|
|
82
|
+
return await originalTool1(input)
|
|
83
|
+
})
|
|
191
84
|
|
|
192
|
-
export
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
default: return _dispatchTool(name, args)
|
|
197
|
-
}
|
|
198
|
-
}
|
|
85
|
+
export const myTool2 = wrapTool('myTool2', async (input: any) => {
|
|
86
|
+
const { someField } = input as { someField: string }
|
|
87
|
+
return await originalTool2(someField)
|
|
88
|
+
})
|
|
199
89
|
```
|
|
200
90
|
|
|
201
|
-
###
|
|
91
|
+
### Key patterns
|
|
202
92
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
import { wrapTool } from 'elasticdash-test'
|
|
208
|
-
import { YOUR_TOOL_1 as YOUR_TOOL_1_impl } from './YOUR_SOURCE_PATH'
|
|
209
|
-
|
|
210
|
-
export const YOUR_TOOL_1 = wrapTool('YOUR_TOOL_1', YOUR_TOOL_1_impl)
|
|
211
|
-
```
|
|
93
|
+
- **`wrapTool(name, fn)`** wraps the function with automatic tracing, mocking, and telemetry. Falls back to a passthrough if `elasticdash-test` is not installed.
|
|
94
|
+
- **`eval('require')`** is used instead of `import()` to share the same module instance across `ed_tools.ts` and `ed_workflows.ts`. This avoids ESM/CJS dual-instance issues.
|
|
95
|
+
- **`setElasticDashModule`** shares the loaded module with `ed_workflows.ts` so `edStartTrace`/`edEndTrace` use the same tracing context as `wrapTool`.
|
|
96
|
+
- The exported name (e.g., `myTool1`) can differ from the original function name (e.g., `originalTool1`). The call sites in existing source files will be updated to use the new name in Step 4.
|
|
212
97
|
|
|
213
98
|
### Important rules
|
|
214
99
|
|
|
215
|
-
- The string name passed to `
|
|
100
|
+
- The string name passed to `wrapTool()` **must match** the exported function name exactly.
|
|
216
101
|
- Each tool function must accept a single input object and return a plain value (JSON-serializable).
|
|
217
102
|
- Tool functions must not close over HTTP context, framework state, or database clients — extract pure logic first.
|
|
218
103
|
|
|
@@ -232,128 +117,167 @@ export default nextConfig
|
|
|
232
117
|
|
|
233
118
|
## Step 3: Create `ed_workflows.ts`
|
|
234
119
|
|
|
235
|
-
Create `ed_workflows.ts` in the project root. This file
|
|
120
|
+
Create `ed_workflows.ts` in the project root. This file serves two purposes:
|
|
121
|
+
|
|
122
|
+
1. **Trace lifecycle hooks** (`edStartTrace`, `edEndTrace`) — called from route handlers to mark workflow boundaries
|
|
123
|
+
2. **Workflow exports** — callable functions for the ElasticDash dashboard and test runner
|
|
236
124
|
|
|
237
|
-
|
|
125
|
+
### Trace lifecycle hooks
|
|
238
126
|
|
|
239
|
-
|
|
127
|
+
Every `ed_workflows.ts` should export `edStartTrace` and `edEndTrace`. These are called from route handlers (Step 4) to mark when a workflow starts and ends:
|
|
240
128
|
|
|
241
129
|
```ts
|
|
242
|
-
// ed_workflows.ts
|
|
243
|
-
|
|
244
|
-
|
|
130
|
+
// ed_workflows.ts — trace hooks (copy as-is)
|
|
131
|
+
|
|
132
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
133
|
+
let _ed: any = null
|
|
134
|
+
|
|
135
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
136
|
+
export function setElasticDashModule(mod: any): void {
|
|
137
|
+
_ed = mod
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export const edStartTrace = async (workflowName: string): Promise<void> => {
|
|
141
|
+
if (!_ed) return
|
|
142
|
+
try {
|
|
143
|
+
await _ed.tryAutoInitHttpContext()
|
|
144
|
+
_ed.startTrace(workflowName)
|
|
145
|
+
} catch (err) {
|
|
146
|
+
console.error('[ed_workflows] edStartTrace error:', err)
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export const edEndTrace = (): void => {
|
|
151
|
+
if (!_ed) return
|
|
152
|
+
try {
|
|
153
|
+
_ed.endTrace()
|
|
154
|
+
} catch (err) {
|
|
155
|
+
console.error('[ed_workflows] edEndTrace error:', err)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
245
158
|
```
|
|
246
159
|
|
|
247
|
-
###
|
|
160
|
+
### Workflow exports — simple case
|
|
248
161
|
|
|
249
|
-
|
|
162
|
+
For non-framework projects where the workflow can be imported directly:
|
|
250
163
|
|
|
251
164
|
```ts
|
|
252
165
|
// ed_workflows.ts
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
export async function YOUR_WORKFLOW(input: { message: string; sessionId: string }) {
|
|
256
|
-
return _YOUR_HANDLER(input)
|
|
257
|
-
}
|
|
166
|
+
export { YOUR_WORKFLOW } from './YOUR_SOURCE_PATH'
|
|
258
167
|
```
|
|
259
168
|
|
|
260
|
-
###
|
|
169
|
+
### Workflow exports — HTTP mode (Next.js / Remix / framework projects)
|
|
261
170
|
|
|
262
|
-
|
|
171
|
+
For framework projects, the workflow calls the running dev server instead of importing the route handler:
|
|
263
172
|
|
|
264
173
|
```ts
|
|
265
|
-
//
|
|
266
|
-
import { NextRequest } from 'next/server'
|
|
267
|
-
import { readVercelAIStream, recordToolCall } from 'elasticdash-test'
|
|
268
|
-
import type { VercelAIStreamResult } from 'elasticdash-test'
|
|
269
|
-
import { POST } from './route'
|
|
174
|
+
// ed_workflows.ts
|
|
270
175
|
|
|
271
|
-
|
|
176
|
+
const APP_URL = process.env.APP_URL ?? 'http://localhost:3000'
|
|
177
|
+
|
|
178
|
+
export const YOUR_WORKFLOW = async (input: {
|
|
272
179
|
messages: Array<{ role: string; content: string }>
|
|
273
180
|
sessionId?: string
|
|
274
|
-
}): Promise<
|
|
275
|
-
const
|
|
181
|
+
}): Promise<unknown> => {
|
|
182
|
+
const response = await fetch(`${APP_URL}/api/YOUR_ENDPOINT`, {
|
|
276
183
|
method: 'POST',
|
|
277
184
|
headers: { 'Content-Type': 'application/json' },
|
|
278
|
-
body: JSON.stringify(
|
|
185
|
+
body: JSON.stringify(input),
|
|
279
186
|
})
|
|
280
187
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
const errorMessage = await response.text().catch(() => `HTTP ${response.status}`)
|
|
285
|
-
return { message: errorMessage, type: 'error', error: errorMessage }
|
|
188
|
+
if (!response.ok) {
|
|
189
|
+
const text = await response.text()
|
|
190
|
+
throw new Error(`HTTP ${response.status}: ${text}`)
|
|
286
191
|
}
|
|
287
192
|
|
|
288
|
-
|
|
289
|
-
recordToolCall('chatStream', args, result)
|
|
290
|
-
return result
|
|
193
|
+
return response.json()
|
|
291
194
|
}
|
|
292
195
|
```
|
|
293
196
|
|
|
294
|
-
Then re-export from `ed_workflows.ts`:
|
|
295
|
-
|
|
296
|
-
```ts
|
|
297
|
-
// ed_workflows.ts
|
|
298
|
-
export { chatStreamHandler } from './app/api/chat-stream/chatStreamHandler'
|
|
299
|
-
```
|
|
300
|
-
|
|
301
197
|
### Requirements for all workflow exports
|
|
302
198
|
|
|
303
199
|
- Accept only JSON-serializable inputs (strings, numbers, arrays, plain objects)
|
|
304
200
|
- Return only JSON-serializable outputs
|
|
305
201
|
- Must not depend on framework runtime APIs, HTTP request context, or live service clients
|
|
306
|
-
- If a dependency is non-serializable (e.g., database client), instantiate it inside `ed_workflows.ts`, not passed as a parameter
|
|
307
202
|
|
|
308
203
|
---
|
|
309
204
|
|
|
310
|
-
## Step 4:
|
|
205
|
+
## Step 4: Update existing source files to use `ed_tools`
|
|
311
206
|
|
|
312
|
-
> **
|
|
207
|
+
> **This step modifies the user's existing source files.** The files that call tool functions must import from `ed_tools` instead of the original source, so that all tool calls go through the ElasticDash tracing layer. Similarly, workflow entry points (route handlers, etc.) must call `edStartTrace` / `edEndTrace` from `ed_workflows`.
|
|
313
208
|
|
|
314
|
-
|
|
209
|
+
### Architecture after integration
|
|
315
210
|
|
|
316
211
|
```
|
|
317
|
-
|
|
318
|
-
|
|
212
|
+
ed_tools.ts
|
|
213
|
+
├── imports original functions from services/utils
|
|
214
|
+
├── wraps each with wrapTool() for tracing
|
|
215
|
+
└── exports wrapped versions with the SAME or similar names
|
|
319
216
|
|
|
320
|
-
|
|
321
|
-
|
|
217
|
+
ed_workflows.ts
|
|
218
|
+
├── exports edStartTrace / edEndTrace for workflow-level tracing
|
|
219
|
+
└── exports workflow functions (for dashboard/test runner)
|
|
220
|
+
|
|
221
|
+
Existing source files (MODIFIED):
|
|
222
|
+
app/api/chat/route.ts
|
|
223
|
+
├── BEFORE: import { myTool } from '@/services/myService'
|
|
224
|
+
├── AFTER: import { myTool } from '@/ed_tools'
|
|
225
|
+
├── ADDED: import { edStartTrace, edEndTrace } from '@/ed_workflows'
|
|
226
|
+
└── ADDED: await edStartTrace('workflowName') at handler entry
|
|
227
|
+
edEndTrace() at handler exit
|
|
322
228
|
```
|
|
323
229
|
|
|
324
230
|
### What to do
|
|
325
231
|
|
|
326
|
-
|
|
232
|
+
**1. Find every file that calls a tool function and update its imports:**
|
|
327
233
|
|
|
328
|
-
|
|
234
|
+
For each tool exported from `ed_tools.ts`, search the codebase for files that import the original function. Update the import to come from `ed_tools` instead.
|
|
329
235
|
|
|
330
236
|
```ts
|
|
331
|
-
//
|
|
332
|
-
|
|
333
|
-
import {
|
|
334
|
-
|
|
335
|
-
//
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
const payment = await chargeCard({ amount: order.total })
|
|
339
|
-
return { orderId: order.orderId, paymentId: payment.id }
|
|
340
|
-
}
|
|
237
|
+
// BEFORE — app/api/chat/route.ts
|
|
238
|
+
import { clarifyAndRefineUserInput } from '@/utils/queryRefinement'
|
|
239
|
+
import { dynamicApiRequest } from '@/services/apiService'
|
|
240
|
+
|
|
241
|
+
// AFTER — app/api/chat/route.ts
|
|
242
|
+
import { queryRefinement } from '@/ed_tools'
|
|
243
|
+
import { apiService } from '@/ed_tools'
|
|
341
244
|
```
|
|
342
245
|
|
|
343
246
|
```ts
|
|
344
|
-
//
|
|
345
|
-
|
|
346
|
-
import { chargeCard as chargeCardImpl } from './src/services/payments'
|
|
347
|
-
import { getOrderDetails as getOrderDetailsImpl } from './src/services/orders'
|
|
247
|
+
// BEFORE — app/api/chat/executor.ts
|
|
248
|
+
import { dynamicApiRequest } from '@/services/apiService'
|
|
348
249
|
|
|
349
|
-
//
|
|
250
|
+
// AFTER — app/api/chat/executor.ts
|
|
251
|
+
import { apiService } from '@/ed_tools'
|
|
350
252
|
```
|
|
351
253
|
|
|
352
|
-
|
|
254
|
+
**2. Add trace hooks to route handlers / workflow entry points:**
|
|
353
255
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
256
|
+
At the top of each route handler or workflow entry function, add `edStartTrace` and `edEndTrace`:
|
|
257
|
+
|
|
258
|
+
```ts
|
|
259
|
+
// app/api/chat/route.ts
|
|
260
|
+
import { edStartTrace, edEndTrace } from '@/ed_workflows'
|
|
261
|
+
|
|
262
|
+
export async function POST(req: Request) {
|
|
263
|
+
await edStartTrace('chatHandler')
|
|
264
|
+
try {
|
|
265
|
+
// ... existing handler logic, now using tools from ed_tools
|
|
266
|
+
} finally {
|
|
267
|
+
edEndTrace()
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
**3. Update call sites if the wrapped function has a different name:**
|
|
273
|
+
|
|
274
|
+
If `ed_tools.ts` exports a tool under a different name than the original (e.g., `queryRefinement` wrapping `clarifyAndRefineUserInput`), update the call sites to use the new name.
|
|
275
|
+
|
|
276
|
+
### What NOT to modify
|
|
277
|
+
|
|
278
|
+
- **Do not modify `ed_tools.ts` imports** — it must still import from the original source files.
|
|
279
|
+
- **Do not modify the original tool implementation files** (e.g., `services/apiService.ts`, `utils/queryRefinement.ts`) — they stay as-is.
|
|
280
|
+
- **Do not modify files that don't call tool functions** — only update files that directly import and call the wrapped tools.
|
|
357
281
|
|
|
358
282
|
---
|
|
359
283
|
|
|
@@ -474,7 +398,30 @@ npx ed ed-test --no-upload
|
|
|
474
398
|
|
|
475
399
|
---
|
|
476
400
|
|
|
477
|
-
## Step 8:
|
|
401
|
+
## Step 8: Validate the integration
|
|
402
|
+
|
|
403
|
+
After all files are created, validate the setup by establishing a socket.io connection to the ElasticDash backend. Run the `observe` command — it connects to the server, authenticates with the API key, and registers the project's tools and workflows:
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
npx elasticdash observe
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
**Expected output on success:**
|
|
410
|
+
|
|
411
|
+
```
|
|
412
|
+
[elasticdash] Observability active
|
|
413
|
+
Session ID : <uuid>
|
|
414
|
+
Server : https://server.elasticdash.com
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
This confirms:
|
|
418
|
+
- `ELASTICDASH_API_URL` and `ELASTICDASH_API_KEY` are valid
|
|
419
|
+
- The socket.io connection to the backend is established
|
|
420
|
+
- The SDK can discover `ed_tools.ts` and `ed_workflows.ts`
|
|
421
|
+
|
|
422
|
+
**If it fails:** Check that `.env` has valid `ELASTICDASH_API_URL` and `ELASTICDASH_API_KEY` values. If the API key is rejected, the user needs to get a new one from https://app.elasticdash.com.
|
|
423
|
+
|
|
424
|
+
After validation, stop the observe process (Ctrl+C) and inform the user that ElasticDash is integrated. Provide these commands for ongoing use:
|
|
478
425
|
|
|
479
426
|
```bash
|
|
480
427
|
# Run aiTest tests
|
|
@@ -486,6 +433,9 @@ npx ed ed-test --no-upload
|
|
|
486
433
|
# Open the dashboard
|
|
487
434
|
npx elasticdash dashboard
|
|
488
435
|
|
|
436
|
+
# Start observability (connect to backend for live tracing)
|
|
437
|
+
npx elasticdash observe
|
|
438
|
+
|
|
489
439
|
# Record a trace fixture
|
|
490
440
|
ELASTICDASH_CAPTURE_TRACE=1 tsx your-workflow.ts
|
|
491
441
|
```
|
|
@@ -591,16 +541,12 @@ After integration, verify these files exist:
|
|
|
591
541
|
|
|
592
542
|
```
|
|
593
543
|
your-project/
|
|
594
|
-
|
|
595
|
-
|
|
544
|
+
.env # ELASTICDASH_API_URL and ELASTICDASH_API_KEY set
|
|
545
|
+
ed_tools.ts # Instrumented tool wrappers (real function names, not placeholders)
|
|
546
|
+
ed_workflows.ts # Workflow exports using tools from ed_tools.ts
|
|
596
547
|
elasticdash.config.ts # Test runner config
|
|
597
548
|
package.json # dashboard:ai and test:ai scripts added
|
|
598
549
|
.gitignore # .temp/ and .ed_traces/ added
|
|
599
550
|
```
|
|
600
551
|
|
|
601
|
-
Verify
|
|
602
|
-
|
|
603
|
-
```bash
|
|
604
|
-
npx elasticdash test # Should discover and run *.ai.test.ts files
|
|
605
|
-
npx elasticdash dashboard # Should open the dashboard UI
|
|
606
|
-
```
|
|
552
|
+
Verify by running `npx elasticdash observe` — a successful socket.io connection confirms the integration is complete.
|
package/package.json
CHANGED
package/src/cli.ts
CHANGED
|
@@ -569,18 +569,19 @@ async function bootstrap(): Promise<void> {
|
|
|
569
569
|
// elasticdash init-guide
|
|
570
570
|
program
|
|
571
571
|
.command('init-guide')
|
|
572
|
-
.description('Copy the ElasticDash agent
|
|
572
|
+
.description('Copy the ElasticDash agent coding instructions into your project')
|
|
573
573
|
.option('--target <path>', 'Destination file path', 'AGENTS.md')
|
|
574
574
|
.option('--force', 'Overwrite the file instead of appending')
|
|
575
575
|
.action(async (cmd: { target: string; force?: boolean }) => {
|
|
576
576
|
const targetPath = path.resolve(cwd, cmd.target)
|
|
577
577
|
|
|
578
|
-
// Resolve
|
|
578
|
+
// Resolve docs from the SDK's own docs/ directory
|
|
579
579
|
const thisFile = fileURLToPath(import.meta.url)
|
|
580
|
-
const
|
|
580
|
+
const docsDir = path.resolve(path.dirname(thisFile), '..', 'docs')
|
|
581
|
+
const instructionsSrc = path.resolve(docsDir, 'agent-coding-instructions.md')
|
|
581
582
|
|
|
582
|
-
if (!existsSync(
|
|
583
|
-
console.error(`[elasticdash] Could not find agent
|
|
583
|
+
if (!existsSync(instructionsSrc)) {
|
|
584
|
+
console.error(`[elasticdash] Could not find agent coding instructions at ${instructionsSrc}`)
|
|
584
585
|
process.exit(1)
|
|
585
586
|
}
|
|
586
587
|
|
|
@@ -590,23 +591,23 @@ async function bootstrap(): Promise<void> {
|
|
|
590
591
|
mkdirSync(targetDir, { recursive: true })
|
|
591
592
|
}
|
|
592
593
|
|
|
593
|
-
const guideContent = readFileSync(
|
|
594
|
+
const guideContent = readFileSync(instructionsSrc, 'utf-8')
|
|
594
595
|
|
|
595
596
|
if (existsSync(targetPath) && !cmd.force) {
|
|
596
|
-
// Check if
|
|
597
|
+
// Check if instructions are already appended
|
|
597
598
|
const existing = readFileSync(targetPath, 'utf-8')
|
|
598
|
-
if (existing.includes('ElasticDash SDK — Agent
|
|
599
|
-
console.log(`[elasticdash] ${cmd.target} already contains the ElasticDash
|
|
599
|
+
if (existing.includes('ElasticDash SDK — AI Coding Agent Instructions')) {
|
|
600
|
+
console.log(`[elasticdash] ${cmd.target} already contains the ElasticDash agent instructions. Use --force to replace the file.`)
|
|
600
601
|
process.exit(0)
|
|
601
602
|
}
|
|
602
603
|
|
|
603
604
|
// Append to existing file
|
|
604
605
|
appendFileSync(targetPath, '\n\n---\n\n' + guideContent)
|
|
605
|
-
console.log(`[elasticdash] ElasticDash
|
|
606
|
+
console.log(`[elasticdash] ElasticDash agent instructions appended to ${cmd.target}`)
|
|
606
607
|
} else {
|
|
607
608
|
// Create new file or overwrite with --force
|
|
608
|
-
copyFileSync(
|
|
609
|
-
console.log(`[elasticdash] Agent
|
|
609
|
+
copyFileSync(instructionsSrc, targetPath)
|
|
610
|
+
console.log(`[elasticdash] Agent coding instructions written to ${cmd.target}`)
|
|
610
611
|
}
|
|
611
612
|
|
|
612
613
|
console.log()
|