@raindrop-ai/wizard 0.0.11 → 0.0.13
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/dist/src/docs/opencode.mdx +75 -0
- package/dist/src/docs/python.mdx +6 -0
- package/dist/src/docs/typescript.mdx +125 -28
- package/dist/src/lib/__tests__/sdk-messages.test.d.ts +4 -0
- package/dist/src/lib/__tests__/sdk-messages.test.js +296 -0
- package/dist/src/lib/__tests__/sdk-messages.test.js.map +1 -0
- package/dist/src/lib/agent-interface.js +40 -14
- package/dist/src/lib/agent-interface.js.map +1 -1
- package/dist/src/lib/agent-prompts.js +4 -1
- package/dist/src/lib/agent-prompts.js.map +1 -1
- package/dist/src/lib/constants.d.ts +7 -0
- package/dist/src/lib/constants.js +15 -0
- package/dist/src/lib/constants.js.map +1 -1
- package/dist/src/lib/handlers.js +21 -18
- package/dist/src/lib/handlers.js.map +1 -1
- package/dist/src/lib/mcp.js +13 -11
- package/dist/src/lib/mcp.js.map +1 -1
- package/dist/src/lib/sdk-messages.d.ts +41 -2
- package/dist/src/lib/sdk-messages.js +89 -41
- package/dist/src/lib/sdk-messages.js.map +1 -1
- package/dist/src/lib/wizard.js +1 -1
- package/dist/src/lib/wizard.js.map +1 -1
- package/dist/src/ui/components/ToolCallDisplay.js +30 -0
- package/dist/src/ui/components/ToolCallDisplay.js.map +1 -1
- package/dist/src/ui/contexts/WizardContext.d.ts +0 -11
- package/dist/src/ui/contexts/WizardContext.js +2 -19
- package/dist/src/ui/contexts/WizardContext.js.map +1 -1
- package/dist/src/utils/__mocks__/ui.d.ts +10 -0
- package/dist/src/utils/__mocks__/ui.js +7 -0
- package/dist/src/utils/__mocks__/ui.js.map +1 -0
- package/dist/src/utils/session.d.ts +22 -0
- package/dist/src/utils/session.js +67 -1
- package/dist/src/utils/session.js.map +1 -1
- package/package.json +16 -1
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
import
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { SESSION_START_ENDPOINT, SESSION_UPDATE_ENDPOINT, SESSION_COMPLETE_ENDPOINT, SESSION_ERROR_ENDPOINT, } from '../lib/constants.js';
|
|
2
5
|
import { logToFile, debug } from './debug.js';
|
|
6
|
+
/**
|
|
7
|
+
* Report an agent error to the session error endpoint (Slack) with agent log path and content.
|
|
8
|
+
* Uses workingDirectory and agentConvoId to locate the agent log file under ~/.claude/projects/.
|
|
9
|
+
*/
|
|
10
|
+
export function reportSessionError(errorMessage, agentConvoId, onError) {
|
|
11
|
+
const segment = '-' +
|
|
12
|
+
onError.workingDirectory.replace(/^\//, '').replace(/\//g, '-');
|
|
13
|
+
const agentLogPath = path.join(os.homedir(), '.claude', 'projects', segment, `${agentConvoId}.jsonl`);
|
|
14
|
+
let agentLogContent;
|
|
15
|
+
try {
|
|
16
|
+
agentLogContent = fs.readFileSync(agentLogPath, 'utf-8');
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
agentLogContent = undefined;
|
|
20
|
+
}
|
|
21
|
+
sendSessionError(onError.wizardSessionId, agentLogPath, onError.accessToken, onError.orgId, { errorMessage, agentConvoId, agentLogContent });
|
|
22
|
+
}
|
|
3
23
|
export function sendSessionInit(sessionId, setupDetails, accessToken, orgId) {
|
|
4
24
|
debug('→ Sending session init notification');
|
|
5
25
|
const makeRequest = async () => {
|
|
@@ -84,6 +104,52 @@ export function sendSessionUpdate(sessionId, plan, accessToken, orgId) {
|
|
|
84
104
|
// Silently fail - this is a non-critical update
|
|
85
105
|
});
|
|
86
106
|
}
|
|
107
|
+
export function sendSessionError(wizardSessionId, agentLogPath, accessToken, orgId, options) {
|
|
108
|
+
const { errorMessage, agentConvoId, agentLogContent } = options ?? {};
|
|
109
|
+
debug('→ Sending session error notification');
|
|
110
|
+
const makeRequest = async () => {
|
|
111
|
+
logToFile('Sending session error:', {
|
|
112
|
+
endpoint: SESSION_ERROR_ENDPOINT,
|
|
113
|
+
wizardSessionId,
|
|
114
|
+
orgId,
|
|
115
|
+
agentLogPath,
|
|
116
|
+
agentConvoId,
|
|
117
|
+
hasErrorMessage: !!errorMessage,
|
|
118
|
+
hasAgentLogContent: !!agentLogContent,
|
|
119
|
+
hasAccessToken: !!accessToken,
|
|
120
|
+
});
|
|
121
|
+
const response = await fetch(SESSION_ERROR_ENDPOINT, {
|
|
122
|
+
method: 'POST',
|
|
123
|
+
headers: {
|
|
124
|
+
Authorization: `Bearer ${accessToken}`,
|
|
125
|
+
'Content-Type': 'application/json',
|
|
126
|
+
'x-wizard-session': wizardSessionId,
|
|
127
|
+
'x-org-id': orgId,
|
|
128
|
+
},
|
|
129
|
+
body: JSON.stringify({
|
|
130
|
+
errorMessage,
|
|
131
|
+
agentConvoId,
|
|
132
|
+
agentLogContent,
|
|
133
|
+
}),
|
|
134
|
+
});
|
|
135
|
+
logToFile('Session error response:', {
|
|
136
|
+
status: response.status,
|
|
137
|
+
statusText: response.statusText,
|
|
138
|
+
});
|
|
139
|
+
if (!response.ok) {
|
|
140
|
+
const errorText = await response.text().catch(() => 'Unable to read error');
|
|
141
|
+
logToFile('Session error failed:', errorText);
|
|
142
|
+
debug(`✗ Session error failed: ${response.status}`);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
debug('✓ Session error notification sent');
|
|
146
|
+
}
|
|
147
|
+
return response;
|
|
148
|
+
};
|
|
149
|
+
void makeRequest().catch((error) => {
|
|
150
|
+
logToFile('Session error request error:', error);
|
|
151
|
+
});
|
|
152
|
+
}
|
|
87
153
|
export async function sendSessionComplete(sessionId, status, accessToken, orgId, feedback) {
|
|
88
154
|
debug('→ Sending session complete notification');
|
|
89
155
|
const makeRequest = async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/utils/session.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n SESSION_START_ENDPOINT,\n SESSION_UPDATE_ENDPOINT,\n SESSION_COMPLETE_ENDPOINT,\n} from '../lib/constants.js';\nimport { logToFile, debug } from './debug.js';\n\nexport function sendSessionInit(\n sessionId: string,\n setupDetails: string,\n accessToken: string,\n orgId: string,\n): void {\n debug('→ Sending session init notification');\n\n const makeRequest = async () => {\n logToFile('Sending session init:', {\n endpoint: SESSION_START_ENDPOINT,\n sessionId,\n orgId,\n setupDetailsLength: setupDetails?.length || 0,\n hasAccessToken: !!accessToken,\n });\n\n const response = await fetch(SESSION_START_ENDPOINT, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n 'x-wizard-session': sessionId,\n 'x-org-id': orgId,\n },\n body: JSON.stringify({\n setupDetails,\n }),\n });\n\n logToFile('Session init response:', {\n status: response.status,\n statusText: response.statusText,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unable to read error');\n logToFile('Session init failed:', errorText);\n debug(`✗ Session init failed: ${response.status}`);\n } else {\n debug('✓ Session init notification sent');\n }\n\n return response;\n };\n\n // Fire and forget - don't await\n void makeRequest().catch((error) => {\n logToFile('Session init error:', error);\n // Silently fail - this is a non-critical notification\n });\n}\n\nexport function sendSessionUpdate(\n sessionId: string,\n plan: string,\n accessToken: string,\n orgId: string,\n): void {\n debug('→ Sending session update notification');\n\n const makeRequest = async () => {\n logToFile('Sending session update:', {\n endpoint: SESSION_UPDATE_ENDPOINT,\n sessionId,\n orgId,\n planLength: plan?.length || 0,\n hasAccessToken: !!accessToken,\n });\n\n const response = await fetch(SESSION_UPDATE_ENDPOINT, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n 'x-wizard-session': sessionId,\n 'x-org-id': orgId,\n },\n body: JSON.stringify({\n plan,\n }),\n });\n\n logToFile('Session update response:', {\n status: response.status,\n statusText: response.statusText,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unable to read error');\n logToFile('Session update failed:', errorText);\n debug(`✗ Session update failed: ${response.status}`);\n } else {\n debug('✓ Session update notification sent');\n }\n\n return response;\n };\n\n // Fire and forget - don't await\n void makeRequest().catch((error) => {\n logToFile('Session update error:', error);\n // Silently fail - this is a non-critical update\n });\n}\n\nexport async function sendSessionComplete(\n sessionId: string,\n status: 'success' | 'failure' | 'support',\n accessToken: string,\n orgId: string,\n feedback?: string,\n): Promise<void> {\n debug('→ Sending session complete notification');\n\n const makeRequest = async () => {\n logToFile('Sending session complete:', {\n endpoint: SESSION_COMPLETE_ENDPOINT,\n sessionId,\n orgId,\n status,\n hasFeedback: !!feedback,\n });\n\n const response = await fetch(SESSION_COMPLETE_ENDPOINT, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n 'x-wizard-session': sessionId,\n 'x-org-id': orgId,\n },\n body: JSON.stringify({ status, feedback }),\n });\n\n logToFile('Session complete response:', {\n status: response.status,\n statusText: response.statusText,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unable to read error');\n logToFile('Session complete failed:', errorText);\n debug(`✗ Session complete failed: ${response.status}`);\n } else {\n debug('✓ Session complete notification sent');\n }\n\n return response;\n };\n\n await makeRequest().catch((error) => {\n logToFile('Session complete error:', error);\n // Silently fail - this is a non-critical notification\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/utils/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAW9C;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,YAAoB,EACpB,YAAoB,EACpB,OAA4B;IAE5B,MAAM,OAAO,GACX,GAAG;QACH,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC5B,EAAE,CAAC,OAAO,EAAE,EACZ,SAAS,EACT,UAAU,EACV,OAAO,EACP,GAAG,YAAY,QAAQ,CACxB,CAAC;IACF,IAAI,eAAmC,CAAC;IACxC,IAAI,CAAC;QACH,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,eAAe,GAAG,SAAS,CAAC;IAC9B,CAAC;IACD,gBAAgB,CACd,OAAO,CAAC,eAAe,EACvB,YAAY,EACZ,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,KAAK,EACb,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,CAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,SAAiB,EACjB,YAAoB,EACpB,WAAmB,EACnB,KAAa;IAEb,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAE7C,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,SAAS,CAAC,uBAAuB,EAAE;YACjC,QAAQ,EAAE,sBAAsB;YAChC,SAAS;YACT,KAAK;YACL,kBAAkB,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;YAC7C,cAAc,EAAE,CAAC,CAAC,WAAW;SAC9B,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,sBAAsB,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,cAAc,EAAE,kBAAkB;gBAClC,kBAAkB,EAAE,SAAS;gBAC7B,UAAU,EAAE,KAAK;aAClB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,YAAY;aACb,CAAC;SACH,CAAC,CAAC;QAEH,SAAS,CAAC,wBAAwB,EAAE;YAClC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC;YAC5E,SAAS,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;YAC7C,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,gCAAgC;IAChC,KAAK,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACjC,SAAS,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QACxC,sDAAsD;IACxD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,IAAY,EACZ,WAAmB,EACnB,KAAa;IAEb,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAE/C,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,SAAS,CAAC,yBAAyB,EAAE;YACnC,QAAQ,EAAE,uBAAuB;YACjC,SAAS;YACT,KAAK;YACL,UAAU,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;YAC7B,cAAc,EAAE,CAAC,CAAC,WAAW;SAC9B,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,uBAAuB,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,cAAc,EAAE,kBAAkB;gBAClC,kBAAkB,EAAE,SAAS;gBAC7B,UAAU,EAAE,KAAK;aAClB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,IAAI;aACL,CAAC;SACH,CAAC,CAAC;QAEH,SAAS,CAAC,0BAA0B,EAAE;YACpC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC;YAC5E,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;YAC/C,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,gCAAgC;IAChC,KAAK,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACjC,SAAS,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC1C,gDAAgD;IAClD,CAAC,CAAC,CAAC;AACL,CAAC;AAWD,MAAM,UAAU,gBAAgB,CAC9B,eAAuB,EACvB,YAAoB,EACpB,WAAmB,EACnB,KAAa,EACb,OAAiC;IAEjC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IACtE,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAE9C,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,SAAS,CAAC,wBAAwB,EAAE;YAClC,QAAQ,EAAE,sBAAsB;YAChC,eAAe;YACf,KAAK;YACL,YAAY;YACZ,YAAY;YACZ,eAAe,EAAE,CAAC,CAAC,YAAY;YAC/B,kBAAkB,EAAE,CAAC,CAAC,eAAe;YACrC,cAAc,EAAE,CAAC,CAAC,WAAW;SAC9B,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,sBAAsB,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,cAAc,EAAE,kBAAkB;gBAClC,kBAAkB,EAAE,eAAe;gBACnC,UAAU,EAAE,KAAK;aAClB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,YAAY;gBACZ,YAAY;gBACZ,eAAe;aAChB,CAAC;SACH,CAAC,CAAC;QAEH,SAAS,CAAC,yBAAyB,EAAE;YACnC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC;YAC5E,SAAS,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;YAC9C,KAAK,CAAC,2BAA2B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,KAAK,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACjC,SAAS,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,MAAyC,EACzC,WAAmB,EACnB,KAAa,EACb,QAAiB;IAEjB,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,SAAS,CAAC,2BAA2B,EAAE;YACrC,QAAQ,EAAE,yBAAyB;YACnC,SAAS;YACT,KAAK;YACL,MAAM;YACN,WAAW,EAAE,CAAC,CAAC,QAAQ;SACxB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,yBAAyB,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,cAAc,EAAE,kBAAkB;gBAClC,kBAAkB,EAAE,SAAS;gBAC7B,UAAU,EAAE,KAAK;aAClB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SAC3C,CAAC,CAAC;QAEH,SAAS,CAAC,4BAA4B,EAAE;YACtC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC;YAC5E,SAAS,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC;YACjD,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAClC,SAAS,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC5C,sDAAsD;IACxD,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport {\n SESSION_START_ENDPOINT,\n SESSION_UPDATE_ENDPOINT,\n SESSION_COMPLETE_ENDPOINT,\n SESSION_ERROR_ENDPOINT,\n} from '../lib/constants.js';\nimport { logToFile, debug } from './debug.js';\n\n/** Context required to report an agent error (wizard session + project path for log lookup). */\nexport interface SessionErrorContext {\n wizardSessionId: string;\n accessToken: string;\n orgId: string;\n /** Resolved absolute project path (e.g. /Users/.../project). */\n workingDirectory: string;\n}\n\n/**\n * Report an agent error to the session error endpoint (Slack) with agent log path and content.\n * Uses workingDirectory and agentConvoId to locate the agent log file under ~/.claude/projects/.\n */\nexport function reportSessionError(\n errorMessage: string,\n agentConvoId: string,\n onError: SessionErrorContext,\n): void {\n const segment =\n '-' +\n onError.workingDirectory.replace(/^\\//, '').replace(/\\//g, '-');\n const agentLogPath = path.join(\n os.homedir(),\n '.claude',\n 'projects',\n segment,\n `${agentConvoId}.jsonl`,\n );\n let agentLogContent: string | undefined;\n try {\n agentLogContent = fs.readFileSync(agentLogPath, 'utf-8');\n } catch {\n agentLogContent = undefined;\n }\n sendSessionError(\n onError.wizardSessionId,\n agentLogPath,\n onError.accessToken,\n onError.orgId,\n { errorMessage, agentConvoId, agentLogContent },\n );\n}\n\nexport function sendSessionInit(\n sessionId: string,\n setupDetails: string,\n accessToken: string,\n orgId: string,\n): void {\n debug('→ Sending session init notification');\n\n const makeRequest = async () => {\n logToFile('Sending session init:', {\n endpoint: SESSION_START_ENDPOINT,\n sessionId,\n orgId,\n setupDetailsLength: setupDetails?.length || 0,\n hasAccessToken: !!accessToken,\n });\n\n const response = await fetch(SESSION_START_ENDPOINT, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n 'x-wizard-session': sessionId,\n 'x-org-id': orgId,\n },\n body: JSON.stringify({\n setupDetails,\n }),\n });\n\n logToFile('Session init response:', {\n status: response.status,\n statusText: response.statusText,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unable to read error');\n logToFile('Session init failed:', errorText);\n debug(`✗ Session init failed: ${response.status}`);\n } else {\n debug('✓ Session init notification sent');\n }\n\n return response;\n };\n\n // Fire and forget - don't await\n void makeRequest().catch((error) => {\n logToFile('Session init error:', error);\n // Silently fail - this is a non-critical notification\n });\n}\n\nexport function sendSessionUpdate(\n sessionId: string,\n plan: string,\n accessToken: string,\n orgId: string,\n): void {\n debug('→ Sending session update notification');\n\n const makeRequest = async () => {\n logToFile('Sending session update:', {\n endpoint: SESSION_UPDATE_ENDPOINT,\n sessionId,\n orgId,\n planLength: plan?.length || 0,\n hasAccessToken: !!accessToken,\n });\n\n const response = await fetch(SESSION_UPDATE_ENDPOINT, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n 'x-wizard-session': sessionId,\n 'x-org-id': orgId,\n },\n body: JSON.stringify({\n plan,\n }),\n });\n\n logToFile('Session update response:', {\n status: response.status,\n statusText: response.statusText,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unable to read error');\n logToFile('Session update failed:', errorText);\n debug(`✗ Session update failed: ${response.status}`);\n } else {\n debug('✓ Session update notification sent');\n }\n\n return response;\n };\n\n // Fire and forget - don't await\n void makeRequest().catch((error) => {\n logToFile('Session update error:', error);\n // Silently fail - this is a non-critical update\n });\n}\n\nexport interface SendSessionErrorOptions {\n /** Original error message (e.g. API response body) to append to the thread. */\n errorMessage?: string;\n /** Claude Agent SDK convo/session id (used in log path and for Slack). */\n agentConvoId?: string;\n /** Contents of the agent .jsonl log file (attached to Slack like setup.txt / plan.txt). */\n agentLogContent?: string;\n}\n\nexport function sendSessionError(\n wizardSessionId: string,\n agentLogPath: string,\n accessToken: string,\n orgId: string,\n options?: SendSessionErrorOptions,\n): void {\n const { errorMessage, agentConvoId, agentLogContent } = options ?? {};\n debug('→ Sending session error notification');\n\n const makeRequest = async () => {\n logToFile('Sending session error:', {\n endpoint: SESSION_ERROR_ENDPOINT,\n wizardSessionId,\n orgId,\n agentLogPath,\n agentConvoId,\n hasErrorMessage: !!errorMessage,\n hasAgentLogContent: !!agentLogContent,\n hasAccessToken: !!accessToken,\n });\n\n const response = await fetch(SESSION_ERROR_ENDPOINT, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n 'x-wizard-session': wizardSessionId,\n 'x-org-id': orgId,\n },\n body: JSON.stringify({\n errorMessage,\n agentConvoId,\n agentLogContent,\n }),\n });\n\n logToFile('Session error response:', {\n status: response.status,\n statusText: response.statusText,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unable to read error');\n logToFile('Session error failed:', errorText);\n debug(`✗ Session error failed: ${response.status}`);\n } else {\n debug('✓ Session error notification sent');\n }\n\n return response;\n };\n\n void makeRequest().catch((error) => {\n logToFile('Session error request error:', error);\n });\n}\n\nexport async function sendSessionComplete(\n sessionId: string,\n status: 'success' | 'failure' | 'support',\n accessToken: string,\n orgId: string,\n feedback?: string,\n): Promise<void> {\n debug('→ Sending session complete notification');\n\n const makeRequest = async () => {\n logToFile('Sending session complete:', {\n endpoint: SESSION_COMPLETE_ENDPOINT,\n sessionId,\n orgId,\n status,\n hasFeedback: !!feedback,\n });\n\n const response = await fetch(SESSION_COMPLETE_ENDPOINT, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n 'x-wizard-session': sessionId,\n 'x-org-id': orgId,\n },\n body: JSON.stringify({ status, feedback }),\n });\n\n logToFile('Session complete response:', {\n status: response.status,\n statusText: response.statusText,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unable to read error');\n logToFile('Session complete failed:', errorText);\n debug(`✗ Session complete failed: ${response.status}`);\n } else {\n debug('✓ Session complete notification sent');\n }\n\n return response;\n };\n\n await makeRequest().catch((error) => {\n logToFile('Session complete error:', error);\n // Silently fail - this is a non-critical notification\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@raindrop-ai/wizard",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"homepage": "https://github.com/raindrop/wizard",
|
|
6
6
|
"repository": "https://github.com/raindrop/wizard",
|
|
@@ -121,6 +121,21 @@
|
|
|
121
121
|
"jsx",
|
|
122
122
|
"json"
|
|
123
123
|
],
|
|
124
|
+
"moduleNameMapper": {
|
|
125
|
+
"^\\.\\./sdk-messages\\.js$": "<rootDir>/src/lib/sdk-messages.ts",
|
|
126
|
+
"^\\.\\./utils/debug\\.js$": "<rootDir>/src/utils/debug.ts",
|
|
127
|
+
"^\\.\\./utils/session\\.js$": "<rootDir>/src/utils/session.ts",
|
|
128
|
+
"^\\.\\./utils/types\\.js$": "<rootDir>/src/utils/types.ts",
|
|
129
|
+
"^\\.\\./\\.\\./utils/debug\\.js$": "<rootDir>/src/utils/debug.ts",
|
|
130
|
+
"^\\.\\./\\.\\./utils/session\\.js$": "<rootDir>/src/utils/session.ts",
|
|
131
|
+
"^\\.\\./\\.\\./utils/types\\.js$": "<rootDir>/src/utils/types.ts",
|
|
132
|
+
"^\\.\\./utils/ui\\.js$": "<rootDir>/src/utils/__mocks__/ui.ts",
|
|
133
|
+
"^\\.\\./\\.\\./utils/ui\\.js$": "<rootDir>/src/utils/__mocks__/ui.ts",
|
|
134
|
+
"^\\./constants\\.js$": "<rootDir>/src/lib/constants.ts",
|
|
135
|
+
"^\\./handlers\\.js$": "<rootDir>/src/lib/handlers.ts",
|
|
136
|
+
"^\\.\\./constants\\.js$": "<rootDir>/src/lib/constants.ts",
|
|
137
|
+
"^\\.\\./handlers\\.js$": "<rootDir>/src/lib/handlers.ts"
|
|
138
|
+
},
|
|
124
139
|
"modulePathIgnorePatterns": [
|
|
125
140
|
"<rootDir>/dist/"
|
|
126
141
|
],
|