@cursor/july 0.1.42 → 0.1.45
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/AGENTS.md +1 -0
- package/dist/bin/agent-serve.js +3 -1
- package/dist/channels/github/api.d.ts +5 -0
- package/dist/channels/github/api.d.ts.map +1 -1
- package/dist/channels/github/api.js +18 -0
- package/dist/channels/github/defaults.d.ts +4 -5
- package/dist/channels/github/defaults.d.ts.map +1 -1
- package/dist/channels/github/defaults.js +27 -1
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +41 -10
- package/dist/channels/github/index.d.ts +1 -0
- package/dist/channels/github/index.d.ts.map +1 -1
- package/dist/channels/github/index.js +1 -0
- package/dist/channels/github/progress.d.ts +54 -0
- package/dist/channels/github/progress.d.ts.map +1 -0
- package/dist/channels/github/progress.js +168 -0
- package/dist/channels/github/state.d.ts +2 -0
- package/dist/channels/github/state.d.ts.map +1 -1
- package/dist/channels/github/state.js +1 -1
- package/dist/channels/github/types.d.ts +16 -4
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.d.ts +4 -0
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +4 -0
- package/dist/channels.d.ts +17 -0
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +31 -0
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.C4-Gwi7g.js → app.fHnNXEJ6.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.BMT0xM4I.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DDoLm843.js → VPLocalSearchBox.Cf6ghfFY.js} +1 -1
- package/dist/docs/assets/chunks/{theme.SbjGIiM0.js → theme.B_5-VLe8.js} +2 -2
- package/dist/docs/assets/{deployment.md.BHVjVqRa.js → deployment.md.Cdp4rTE4.js} +1 -1
- package/dist/docs/assets/{guides_github.md.R2QlpR75.js → guides_github.md.DSg0j9qj.js} +29 -3
- package/dist/docs/assets/{guides_github.md.R2QlpR75.lean.js → guides_github.md.DSg0j9qj.lean.js} +1 -1
- package/dist/docs/assets/guides_opentelemetry.md.Csn7ZI25.js +27 -0
- package/dist/docs/assets/guides_opentelemetry.md.Csn7ZI25.lean.js +1 -0
- package/dist/docs/assets/index.md.COeoSkcF.js +5 -0
- package/dist/docs/assets/index.md.COeoSkcF.lean.js +1 -0
- package/dist/docs/assets/{quickstart.md.rIbfahJM.js → quickstart.md.DZxBu44y.js} +18 -49
- package/dist/docs/assets/quickstart.md.DZxBu44y.lean.js +1 -0
- package/dist/docs/assets/{reference_agent-config.md.CRmkoxd6.js → reference_agent-config.md.XRpxctsA.js} +9 -4
- package/dist/docs/assets/{reference_agent-config.md.CRmkoxd6.lean.js → reference_agent-config.md.XRpxctsA.lean.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.BIabFUAI.js → reference_channels.md.MN8iDy8V.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.DqEqQpGn.js → reference_cli.md.BDmjPPAm.js} +2 -2
- package/dist/docs/assets/{reference_hooks.md.B40QAG6m.js → reference_hooks.md.4cbRRIIu.js} +2 -2
- package/dist/docs/assets/{reference_hooks.md.B40QAG6m.lean.js → reference_hooks.md.4cbRRIIu.lean.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md._XdeMahr.js → reference_project-layout.md.D3MdHM2z.js} +2 -1
- package/dist/docs/assets/{reference_tools.md.lSrsTxYJ.js → reference_tools.md.kJfJAP2m.js} +1 -1
- package/dist/docs/assets/templates_triage.md.CConZt1z.js +11 -0
- package/dist/docs/assets/templates_triage.md.CConZt1z.lean.js +1 -0
- package/dist/docs/building-with-agents.html +5 -5
- package/dist/docs/concepts.html +5 -5
- package/dist/docs/deployment.html +6 -6
- package/dist/docs/evals.html +4 -4
- package/dist/docs/example-agents/approval-buddy.html +4 -4
- package/dist/docs/example-agents/benny.html +4 -4
- package/dist/docs/example-agents/bugbot.html +4 -4
- package/dist/docs/example-agents/codebase-wiki.html +4 -4
- package/dist/docs/example-agents/codeowners-review.html +4 -4
- package/dist/docs/example-agents/concierge.html +4 -4
- package/dist/docs/example-agents/fsd.html +4 -4
- package/dist/docs/example-agents/index.html +5 -5
- package/dist/docs/example-agents/knowledge-base.html +4 -4
- package/dist/docs/example-agents/oncall.html +4 -4
- package/dist/docs/example-agents/security-reviewer.html +4 -4
- package/dist/docs/example-agents/slack-agent.html +4 -4
- package/dist/docs/example-agents/weather-agent.html +4 -4
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/cloud-runtime.html +5 -5
- package/dist/docs/guides/github.html +33 -7
- package/dist/docs/guides/human-in-the-loop.html +4 -4
- package/dist/docs/guides/mcp-oauth.html +4 -4
- package/dist/docs/guides/opentelemetry.html +51 -0
- package/dist/docs/guides/slack.html +4 -4
- package/dist/docs/guides/webhooks.html +4 -4
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +4 -4
- package/dist/docs/index.html +8 -27
- package/dist/docs/quickstart.html +24 -55
- package/dist/docs/reference/agent-config.html +12 -7
- package/dist/docs/reference/artifacts.html +4 -4
- package/dist/docs/reference/channels.html +6 -6
- package/dist/docs/reference/cli.html +7 -7
- package/dist/docs/reference/connections.html +4 -4
- package/dist/docs/reference/hooks.html +6 -6
- package/dist/docs/reference/http-api.html +4 -4
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +4 -4
- package/dist/docs/reference/project-layout.html +7 -6
- package/dist/docs/reference/prompt.html +4 -4
- package/dist/docs/reference/schedules.html +4 -4
- package/dist/docs/reference/sessions.html +4 -4
- package/dist/docs/reference/skills.html +4 -4
- package/dist/docs/reference/subagents.html +4 -4
- package/dist/docs/reference/tools.html +6 -6
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/templates/triage.html +35 -0
- package/dist/docs/troubleshooting.html +4 -4
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/internal/cli-ax.d.ts +1 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +20 -5
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +38 -7
- package/dist/internal/deploy-client.d.ts +8 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +5 -2
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +82 -13
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +1 -0
- package/dist/internal/host-otel.d.ts +25 -0
- package/dist/internal/host-otel.d.ts.map +1 -0
- package/dist/internal/host-otel.js +162 -0
- package/dist/internal/init-project.d.ts +24 -0
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +136 -17
- package/dist/internal/otel/attrs.d.ts +7 -0
- package/dist/internal/otel/attrs.d.ts.map +1 -0
- package/dist/internal/otel/attrs.js +13 -0
- package/dist/internal/otel/collector.d.ts +21 -0
- package/dist/internal/otel/collector.d.ts.map +1 -0
- package/dist/internal/otel/collector.js +605 -0
- package/dist/internal/otel/config.d.ts +42 -0
- package/dist/internal/otel/config.d.ts.map +1 -0
- package/dist/internal/otel/config.js +236 -0
- package/dist/internal/otel/http.d.ts +11 -0
- package/dist/internal/otel/http.d.ts.map +1 -0
- package/dist/internal/otel/http.js +97 -0
- package/dist/internal/otel/runtime.d.ts +21 -0
- package/dist/internal/otel/runtime.d.ts.map +1 -0
- package/dist/internal/otel/runtime.js +188 -0
- package/dist/internal/sdk-runner.d.ts +1 -1
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +1 -1
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +26 -1
- package/dist/internal/session-engine.d.ts +15 -2
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +58 -7
- package/dist/memory.d.ts +4 -0
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +4 -0
- package/dist/otel.d.ts +88 -0
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +64 -0
- package/dist/playground/assets/index-CZH9EFvO.css +1 -0
- package/dist/playground/assets/{index-B3HBneZZ.js → index-Dces8BDp.js} +34 -34
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +103 -3
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +35 -105
- package/docs/deployment.md +2 -1
- package/docs/guides/github.md +79 -6
- package/docs/guides/opentelemetry.md +214 -0
- package/docs/quickstart.md +89 -227
- package/docs/reference/agent-config.md +52 -0
- package/docs/reference/channels.md +3 -1
- package/docs/reference/cli.md +2 -2
- package/docs/reference/hooks.md +21 -4
- package/docs/reference/project-layout.md +2 -0
- package/docs/reference/tools.md +5 -4
- package/docs/templates/triage.md +147 -0
- package/package.json +24 -2
- package/skills/create-agent/SKILL.md +2 -2
- package/skills/framework-map/SKILL.md +2 -0
- package/skills/otel/SKILL.md +98 -0
- package/src/bin/agent-serve.ts +3 -1
- package/src/channels/github/api.ts +22 -0
- package/src/channels/github/defaults.ts +27 -6
- package/src/channels/github/github-channel.ts +36 -1
- package/src/channels/github/index.ts +1 -0
- package/src/channels/github/progress.ts +243 -0
- package/src/channels/github/state.ts +3 -0
- package/src/channels/github/types.ts +12 -4
- package/src/channels/slack/slack-channel.ts +4 -0
- package/src/channels.ts +38 -0
- package/src/index.ts +7 -0
- package/src/internal/cli-ax.ts +21 -3
- package/src/internal/cli-deploy.ts +58 -3
- package/src/internal/deploy-client.ts +11 -0
- package/src/internal/discovery.ts +108 -4
- package/src/internal/distribution.ts +1 -0
- package/src/internal/host-otel.ts +252 -0
- package/src/internal/init-project.ts +160 -17
- package/src/internal/otel/attrs.ts +18 -0
- package/src/internal/otel/collector.ts +881 -0
- package/src/internal/otel/config.ts +307 -0
- package/src/internal/otel/http.ts +126 -0
- package/src/internal/otel/runtime.ts +271 -0
- package/src/internal/sdk-runner.ts +6 -0
- package/src/internal/server.ts +39 -1
- package/src/internal/session-engine.ts +83 -2
- package/src/memory.ts +4 -0
- package/src/otel.ts +155 -0
- package/src/types.ts +109 -3
- package/templates/triage/README.md +48 -0
- package/templates/triage/agent/agent.ts +14 -0
- package/templates/triage/agent/channels/intake.ts +20 -0
- package/templates/triage/agent/channels/slack.ts +3 -0
- package/templates/triage/agent/hooks/memory.ts +3 -0
- package/templates/triage/agent/instructions.md +27 -0
- package/templates/triage/agent/skills/triage-rubric.md +43 -0
- package/templates/triage/agent/tools/record_triage.ts +23 -0
- package/templates/triage/evals/evals.config.ts +5 -0
- package/templates/triage/evals/triage.eval.ts +43 -0
- package/templates/triage/package.json +18 -0
- package/templates/triage/tsconfig.json +12 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.BlU3A8EB.js +0 -1
- package/dist/docs/assets/index.md.BKpbkCa6.js +0 -24
- package/dist/docs/assets/index.md.BKpbkCa6.lean.js +0 -1
- package/dist/docs/assets/quickstart.md.rIbfahJM.lean.js +0 -1
- package/dist/playground/assets/index-Bqk9nplh.css +0 -1
- /package/dist/docs/assets/{deployment.md.BHVjVqRa.lean.js → deployment.md.Cdp4rTE4.lean.js} +0 -0
- /package/dist/docs/assets/{reference_channels.md.BIabFUAI.lean.js → reference_channels.md.MN8iDy8V.lean.js} +0 -0
- /package/dist/docs/assets/{reference_cli.md.DqEqQpGn.lean.js → reference_cli.md.BDmjPPAm.lean.js} +0 -0
- /package/dist/docs/assets/{reference_project-layout.md._XdeMahr.lean.js → reference_project-layout.md.D3MdHM2z.lean.js} +0 -0
- /package/dist/docs/assets/{reference_tools.md.lSrsTxYJ.lean.js → reference_tools.md.kJfJAP2m.lean.js} +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Triage agent
|
|
2
|
+
|
|
3
|
+
A triage front door for your team. Send it bug reports, questions, and
|
|
4
|
+
feedback; it classifies each report against a rubric, judges severity,
|
|
5
|
+
records a structured verdict, and replies with the next step.
|
|
6
|
+
|
|
7
|
+
Scaffolded with:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @cursor/july init ./my-triage-agent --template triage
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Run it
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
agent-sdk login # once per machine
|
|
17
|
+
agent-sdk dev
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Open the playground URL it prints. Chat directly, or use the `/report`
|
|
21
|
+
slash command to submit a report the way an integration would
|
|
22
|
+
(`POST /v1/channels/intake/report`).
|
|
23
|
+
|
|
24
|
+
## Wire it to Slack
|
|
25
|
+
|
|
26
|
+
The Slack channel idles until its tokens exist. Create a Slack app and
|
|
27
|
+
its env with:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
agent-sdk slack setup
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Then @mention the bot or DM it. The setup-slack skill in the
|
|
34
|
+
@cursor/july package has the full walkthrough.
|
|
35
|
+
|
|
36
|
+
## Make it yours
|
|
37
|
+
|
|
38
|
+
- `agent/instructions.md` owns the flow every report follows.
|
|
39
|
+
- `agent/skills/triage-rubric.md` owns the kinds, the tie-breakers, and
|
|
40
|
+
the severity ladder. Edit this first; it is the judgment.
|
|
41
|
+
- `agent/tools/record_triage.ts` owns the verdict shape. Point its
|
|
42
|
+
`execute` at your tracker (Linear, GitHub Issues, a webhook) to file
|
|
43
|
+
real tickets.
|
|
44
|
+
- `evals/triage.eval.ts` holds three smoke cases. Run `agent-sdk eval`
|
|
45
|
+
after every rubric change.
|
|
46
|
+
|
|
47
|
+
The full walkthrough, from scaffold through deploy, is the triage
|
|
48
|
+
cookbook: run `agent-sdk docs` and open Templates, then Triage agent.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineChannel, POST } from "@cursor/july/channels";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
|
|
4
|
+
export default defineChannel({
|
|
5
|
+
routes: [
|
|
6
|
+
POST("/report", {
|
|
7
|
+
description: "Submit a report for triage",
|
|
8
|
+
bodySchema: z.object({
|
|
9
|
+
message: z.string(),
|
|
10
|
+
reporter: z.string().optional(),
|
|
11
|
+
}),
|
|
12
|
+
handler: async (_req, { send, body }) => {
|
|
13
|
+
const from =
|
|
14
|
+
body.reporter === undefined ? "" : ` (from ${body.reporter})`;
|
|
15
|
+
const session = await send(`New report${from}:\n\n${body.message}`);
|
|
16
|
+
return Response.json({ ok: true, sessionId: session.id });
|
|
17
|
+
},
|
|
18
|
+
}),
|
|
19
|
+
],
|
|
20
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Triage agent
|
|
2
|
+
|
|
3
|
+
You are the triage front door for this team. People send you reports:
|
|
4
|
+
bug reports, questions, feedback, feature ideas. You classify each one,
|
|
5
|
+
judge its severity, and hand back a verdict the team can act on.
|
|
6
|
+
|
|
7
|
+
Read the `triage-rubric` skill before classifying. It defines the three
|
|
8
|
+
kinds and the tie-breakers.
|
|
9
|
+
|
|
10
|
+
## Every report
|
|
11
|
+
|
|
12
|
+
1. Read the report. If it is too thin to classify (no symptom, no
|
|
13
|
+
question, no opinion), ask for the missing piece once. Otherwise do
|
|
14
|
+
not ask; classify with what you have.
|
|
15
|
+
2. If a `memory/` directory exists in your workspace, grep the journal
|
|
16
|
+
for similar past reports and say when one matches.
|
|
17
|
+
3. Call `record_triage` exactly once with your verdict.
|
|
18
|
+
4. Reply with the verdict: kind, severity, a one-line reason, and the
|
|
19
|
+
next step. Keep the reply under six lines. No preamble.
|
|
20
|
+
|
|
21
|
+
## Boundaries
|
|
22
|
+
|
|
23
|
+
- You classify and route. You do not fix bugs, write code, or promise
|
|
24
|
+
timelines.
|
|
25
|
+
- When a report mixes kinds, pick the dominant one and name the split
|
|
26
|
+
in your reason.
|
|
27
|
+
- Never invent reporter details. Missing fields stay empty.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Definitions and tie-breakers for classifying a report as bug, question, or feedback, plus the severity ladder.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Triage rubric
|
|
6
|
+
|
|
7
|
+
## Kinds
|
|
8
|
+
|
|
9
|
+
- **bug**: something is broken, erroring, slow, or behaving wrong right
|
|
10
|
+
now, and the reporter wants it diagnosed or fixed. Usually has a
|
|
11
|
+
symptom, an error, an id, a timestamp, or steps.
|
|
12
|
+
- **question**: the reporter wants to know something that has an answer
|
|
13
|
+
(how does X work, is Y expected, who owns Z). Someone has to look it
|
|
14
|
+
up, not fix it.
|
|
15
|
+
- **feedback**: an opinion, suggestion, complaint about how something
|
|
16
|
+
behaves, or a feature idea. The reporter is telling the team
|
|
17
|
+
something, not asking it to find anything out.
|
|
18
|
+
|
|
19
|
+
## Tie-breakers
|
|
20
|
+
|
|
21
|
+
- "This is annoying, you should change X" is feedback even when it
|
|
22
|
+
sounds like a complaint.
|
|
23
|
+
- A question about a specific failure that already happened is a bug.
|
|
24
|
+
"Why did my export fail yesterday?" needs an investigation, not a
|
|
25
|
+
lookup.
|
|
26
|
+
- A bug report that also suggests a fix is a bug.
|
|
27
|
+
- A known bug with a workaround that only works sometimes is a bug. The
|
|
28
|
+
unreliable workaround is the thing to explain.
|
|
29
|
+
- A feature idea phrased as a question ("could we have dark mode?") is
|
|
30
|
+
feedback.
|
|
31
|
+
|
|
32
|
+
## Severity
|
|
33
|
+
|
|
34
|
+
- **urgent**: data loss, security exposure, or many users blocked with
|
|
35
|
+
no workaround.
|
|
36
|
+
- **high**: a core flow is broken or wrong for some users, no
|
|
37
|
+
reasonable workaround.
|
|
38
|
+
- **medium**: broken or wrong with a workaround, or a sharp edge that
|
|
39
|
+
costs time.
|
|
40
|
+
- **low**: cosmetic, minor friction, questions, and most feedback.
|
|
41
|
+
|
|
42
|
+
Questions and feedback default to low unless the report shows real
|
|
43
|
+
user impact.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineTool } from "@cursor/july/tools";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
|
|
4
|
+
export default defineTool({
|
|
5
|
+
description:
|
|
6
|
+
"Record the structured triage verdict for the current report. Call exactly once per report, before replying.",
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
kind: z.enum(["bug", "question", "feedback"]),
|
|
9
|
+
severity: z.enum(["low", "medium", "high", "urgent"]),
|
|
10
|
+
title: z
|
|
11
|
+
.string()
|
|
12
|
+
.max(80)
|
|
13
|
+
.describe("Short, imperative summary of the report."),
|
|
14
|
+
summary: z
|
|
15
|
+
.string()
|
|
16
|
+
.describe("What the reporter said, in two sentences or less."),
|
|
17
|
+
nextStep: z.string().describe("The single next action for the team."),
|
|
18
|
+
reporter: z.string().optional().describe("Who reported it, when known."),
|
|
19
|
+
}),
|
|
20
|
+
async execute(verdict) {
|
|
21
|
+
return { recorded: true, at: new Date().toISOString(), verdict };
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { defineEval, includes } from "@cursor/july/evals";
|
|
2
|
+
|
|
3
|
+
export default defineEval({
|
|
4
|
+
tags: ["smoke"],
|
|
5
|
+
cases: [
|
|
6
|
+
{
|
|
7
|
+
id: "bug",
|
|
8
|
+
description: "A concrete failure is recorded as a bug.",
|
|
9
|
+
async test(t) {
|
|
10
|
+
await t.send(
|
|
11
|
+
"Export to CSV has failed with a 500 since this morning. Request id 41ac. Retrying does not help."
|
|
12
|
+
);
|
|
13
|
+
t.succeeded();
|
|
14
|
+
t.calledTool("record_triage");
|
|
15
|
+
t.check(t.reply, includes(/bug/i));
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: "question",
|
|
20
|
+
description: "A how-does-it-work ask is recorded as a question.",
|
|
21
|
+
async test(t) {
|
|
22
|
+
await t.send(
|
|
23
|
+
"How do I rotate the API keys for the staging environment?"
|
|
24
|
+
);
|
|
25
|
+
t.succeeded();
|
|
26
|
+
t.calledTool("record_triage");
|
|
27
|
+
t.check(t.reply, includes(/question/i));
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: "feedback",
|
|
32
|
+
description: "A suggestion is recorded as feedback.",
|
|
33
|
+
async test(t) {
|
|
34
|
+
await t.send(
|
|
35
|
+
"The onboarding wizard has too many steps. You should collapse the profile pages into one."
|
|
36
|
+
);
|
|
37
|
+
t.succeeded();
|
|
38
|
+
t.calledTool("record_triage");
|
|
39
|
+
t.check(t.reply, includes(/feedback/i));
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "triage-agent",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Triage agent: classifies bug reports, questions, and feedback into structured verdicts.",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"check": "tsc --noEmit",
|
|
8
|
+
"dev": "agent-sdk dev"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@cursor/july": "latest",
|
|
12
|
+
"zod": "^3.25.0"
|
|
13
|
+
},
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"@types/node": "^22.14.0",
|
|
16
|
+
"typescript": "^5.8.0"
|
|
17
|
+
}
|
|
18
|
+
}
|