Issues
Bugs your own users hit, grouped, and putting an agent on one
On this page(5 sections)
The owner's side of the bug intake, and the counterpart to the pipelines group: an inbox of failures with one route that hands a failure to an agent rather than to you. Reports arrive at the public /intake/… endpoints from the reporter embedded on your sites — a separate prefix precisely because any browser on the internet can reach those and none of these — and the daemon groups them by fingerprint, so a crash that hit a thousand browsers is one row with a count. These routes read that inbox, move a row between open, resolved and ignored, start a turn on one, throw one away, and answer which sites have actually loaded the reporter. Nothing here creates an issue.
GET/issuesBugs your users have reported
Everything that has crashed or been written in, grouped so a crash that hit a thousand people is one row with a count.
What you send
Nothing. Call it as it is.
What comes back
| Field | Type |
|---|---|
issuesThe inbox, most recently seen first | object[] |
kind | "crash" | "report" | "detection" |
titleThe one line this is listed… | string |
culpritThe frame it came from, when… | string |
automationIdWhich intake received it | string |
originWhich site it came from | string |
firstSeenWhen it first happened, in milliseconds | number |
lastSeenWhen it last happened, in milliseconds | number |
countHow many times this exact thing… | number |
statusWhere it stands with you | "open" | "investigating" | "resolved" | "ignored" |
statusAtWhen the status last changed, in… | number |
releaseThe build the latest one came… | string |
sampleThe most recent one, in full | object |
kindA crash the SDK caught, something… | "crash" | "report" | "detection" |
messageThe error's own message, or the… | string |
stackThe stack, verbatim from the browser | string |
urlWhere it happened: the page's address,… | string |
releaseWhich build it came from: a… | string |
userAgentWhat the browser said it was | string |
descriptionWhat the person typed, when a… | string |
reporterWho says they are reporting it | object |
emailAn address they typed, to reach… | string |
nameA name they typed | string |
breadcrumbsWhat happened just before, oldest first | object[] |
atWhen, in milliseconds | number |
kindWhat sort of thing it was:… | string |
messageWhat it said, already truncated by… | string |
contextWhatever else the app attached: a… | object |
fingerprintGroup by this instead of by… | string |
firedAtWhat the count stood at the… | number |
runsThe turns started for it | object[] |
conversationIdThe conversation this run became | string |
atWhen it started, in milliseconds | number |
atCountHow many times it had happened… | number |
idThe issue's id, which is its… | string |
invalidFiles in the issues directory that… | string[] |
curl "$SANDBOX/issues" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.issues.list();POST/issues/{id}/statusFile one away, or reopen it
Moves one issue between open, resolved and ignored. Resolving does not close anything upstream: it is your own inbox.
What you send
| Field | Type | Where |
|---|---|---|
idrequiredWhich issue | string | address |
statusrequiredWhere it now stands with you | "open" | "resolved" | "ignored" | body |
What comes back
| Field | Type |
|---|---|
okAlways true | true |
curl -X POST "$SANDBOX/issues/a1b2c3d4/status" \
-H "x-intentic-control: $INTENTIC_TOKEN" \
-H "content-type: application/json" \
-d '{"status":"open"}'import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.issues.status({
"id": "a1b2c3d4",
"status": "open"
});POST/issues/{id}/investigatePut an agent on it now
Starts a turn on this issue with the crash, its stack and what led up to it as the brief. Answers straight away and runs detached; the issue goes to 'being looked at'.
What you send
| Field | Type | Where |
|---|---|---|
idrequiredWhich issue | string | address |
What comes back
| Field | Type |
|---|---|
okAlways true | true |
curl -X POST "$SANDBOX/issues/a1b2c3d4/investigate" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.issues.investigate({
"id": "a1b2c3d4"
});DELETE/issues/{id}Throw one away
Forgets an issue entirely. It will come back as new if it happens again, which is usually what you want.
What you send
| Field | Type | Where |
|---|---|---|
idrequiredWhich issue | string | address |
What comes back
| Field | Type |
|---|---|
okAlways true | true |
curl -X DELETE "$SANDBOX/issues/a1b2c3d4" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.issues.remove({
"id": "a1b2c3d4"
});GET/issues/installs/{automationId}Which sites have loaded the reporter
The sites whose pages actually loaded this intake's script, and the ones that were turned away. The answer to 'did the snippet land?', which an empty inbox cannot give you.
What you send
| Field | Type | Where |
|---|---|---|
automationIdrequiredWhich intake | string | address |
What comes back
| Field | Type |
|---|---|
origins | object[] |
origin | string |
allowed | boolean |
lastSeenAt | number |
loads | number |
curl "$SANDBOX/issues/installs/a1b2c3d4" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.issues.installs({
"automationId": "a1b2c3d4"
});