hammoc 1.6.0 → 1.7.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.
- package/README.md +6 -4
- package/package.json +2 -2
- package/packages/client/dist/assets/{agentExampleHighlight-ltj9ce0U.js → agentExampleHighlight-7Olvqdpf.js} +1 -1
- package/packages/client/dist/assets/{commandTokenHighlight-ji_ViMb4.js → commandTokenHighlight-DtKwh4lx.js} +1 -1
- package/packages/client/dist/assets/{index-BT4RIi0U.js → index-Bee52CKG.js} +556 -510
- package/packages/client/dist/assets/index-CVy582lU.css +32 -0
- package/packages/client/dist/assets/{index-B-DiRGuz.js → index-DLHBUw8c.js} +1 -1
- package/packages/client/dist/assets/{snippetTokenHighlight-CP3v4o2g.js → snippetTokenHighlight-C8O688f4.js} +1 -1
- package/packages/client/dist/index.html +2 -2
- package/packages/client/dist/sw.js +2 -2
- package/packages/server/dist/_dbg_agent_rows.d.ts +2 -0
- package/packages/server/dist/_dbg_agent_rows.d.ts.map +1 -0
- package/packages/server/dist/_dbg_agent_rows.js +60 -0
- package/packages/server/dist/_dbg_agent_rows.js.map +1 -0
- package/packages/server/dist/_dbg_flicker.d.ts +2 -0
- package/packages/server/dist/_dbg_flicker.d.ts.map +1 -0
- package/packages/server/dist/_dbg_flicker.js +38 -0
- package/packages/server/dist/_dbg_flicker.js.map +1 -0
- package/packages/server/dist/_harness_cli.d.ts +2 -0
- package/packages/server/dist/_harness_cli.d.ts.map +1 -0
- package/packages/server/dist/_harness_cli.js +81 -0
- package/packages/server/dist/_harness_cli.js.map +1 -0
- package/packages/server/dist/_harness_provcard.d.ts +2 -0
- package/packages/server/dist/_harness_provcard.d.ts.map +1 -0
- package/packages/server/dist/_harness_provcard.js +67 -0
- package/packages/server/dist/_harness_provcard.js.map +1 -0
- package/packages/server/dist/_replay_dump.d.ts +2 -0
- package/packages/server/dist/_replay_dump.d.ts.map +1 -0
- package/packages/server/dist/_replay_dump.js +62 -0
- package/packages/server/dist/_replay_dump.js.map +1 -0
- package/packages/server/dist/app.d.ts.map +1 -1
- package/packages/server/dist/app.js +6 -0
- package/packages/server/dist/app.js.map +1 -1
- package/packages/server/dist/config/index.d.ts.map +1 -1
- package/packages/server/dist/config/index.js.map +1 -1
- package/packages/server/dist/controllers/projectController.d.ts.map +1 -1
- package/packages/server/dist/controllers/projectController.js +7 -1
- package/packages/server/dist/controllers/projectController.js.map +1 -1
- package/packages/server/dist/controllers/sessionController.d.ts.map +1 -1
- package/packages/server/dist/controllers/sessionController.js +16 -4
- package/packages/server/dist/controllers/sessionController.js.map +1 -1
- package/packages/server/dist/controllers/systemBrowseController.d.ts +33 -0
- package/packages/server/dist/controllers/systemBrowseController.d.ts.map +1 -0
- package/packages/server/dist/controllers/systemBrowseController.js +105 -0
- package/packages/server/dist/controllers/systemBrowseController.js.map +1 -0
- package/packages/server/dist/handlers/streamCallbacks.d.ts +2 -0
- package/packages/server/dist/handlers/streamCallbacks.d.ts.map +1 -1
- package/packages/server/dist/handlers/streamCallbacks.js +17 -4
- package/packages/server/dist/handlers/streamCallbacks.js.map +1 -1
- package/packages/server/dist/handlers/websocket.d.ts +43 -3
- package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
- package/packages/server/dist/handlers/websocket.js +362 -92
- package/packages/server/dist/handlers/websocket.js.map +1 -1
- package/packages/server/dist/index.js +2 -0
- package/packages/server/dist/index.js.map +1 -1
- package/packages/server/dist/locales/en/server.json +17 -0
- package/packages/server/dist/locales/es/server.json +17 -0
- package/packages/server/dist/locales/ja/server.json +17 -0
- package/packages/server/dist/locales/ko/server.json +17 -0
- package/packages/server/dist/locales/pt/server.json +17 -0
- package/packages/server/dist/locales/zh-CN/server.json +17 -0
- package/packages/server/dist/routes/preferences.d.ts.map +1 -1
- package/packages/server/dist/routes/preferences.js +12 -2
- package/packages/server/dist/routes/preferences.js.map +1 -1
- package/packages/server/dist/routes/systemBrowse.d.ts +17 -0
- package/packages/server/dist/routes/systemBrowse.d.ts.map +1 -0
- package/packages/server/dist/routes/systemBrowse.js +22 -0
- package/packages/server/dist/routes/systemBrowse.js.map +1 -0
- package/packages/server/dist/services/bmadStatusService.d.ts.map +1 -1
- package/packages/server/dist/services/bmadStatusService.js +18 -7
- package/packages/server/dist/services/bmadStatusService.js.map +1 -1
- package/packages/server/dist/services/chatEngine.d.ts +81 -0
- package/packages/server/dist/services/chatEngine.d.ts.map +1 -0
- package/packages/server/dist/services/chatEngine.js +2 -0
- package/packages/server/dist/services/chatEngine.js.map +1 -0
- package/packages/server/dist/services/chatEngineFactory.d.ts +15 -0
- package/packages/server/dist/services/chatEngineFactory.d.ts.map +1 -0
- package/packages/server/dist/services/chatEngineFactory.js +28 -0
- package/packages/server/dist/services/chatEngineFactory.js.map +1 -0
- package/packages/server/dist/services/chatService.d.ts +34 -26
- package/packages/server/dist/services/chatService.d.ts.map +1 -1
- package/packages/server/dist/services/chatService.js +43 -103
- package/packages/server/dist/services/chatService.js.map +1 -1
- package/packages/server/dist/services/cliChatEngine.d.ts +198 -0
- package/packages/server/dist/services/cliChatEngine.d.ts.map +1 -0
- package/packages/server/dist/services/cliChatEngine.js +2977 -0
- package/packages/server/dist/services/cliChatEngine.js.map +1 -0
- package/packages/server/dist/services/cliGridCards.d.ts +87 -0
- package/packages/server/dist/services/cliGridCards.d.ts.map +1 -0
- package/packages/server/dist/services/cliGridCards.js +298 -0
- package/packages/server/dist/services/cliGridCards.js.map +1 -0
- package/packages/server/dist/services/cliGridRegion.d.ts +44 -0
- package/packages/server/dist/services/cliGridRegion.d.ts.map +1 -0
- package/packages/server/dist/services/cliGridRegion.js +94 -0
- package/packages/server/dist/services/cliGridRegion.js.map +1 -0
- package/packages/server/dist/services/cliModalDetect.d.ts +299 -0
- package/packages/server/dist/services/cliModalDetect.d.ts.map +1 -0
- package/packages/server/dist/services/cliModalDetect.js +583 -0
- package/packages/server/dist/services/cliModalDetect.js.map +1 -0
- package/packages/server/dist/services/cliScreenCache.d.ts +33 -0
- package/packages/server/dist/services/cliScreenCache.d.ts.map +1 -0
- package/packages/server/dist/services/cliScreenCache.js +48 -0
- package/packages/server/dist/services/cliScreenCache.js.map +1 -0
- package/packages/server/dist/services/cliScreenModel.d.ts +141 -0
- package/packages/server/dist/services/cliScreenModel.d.ts.map +1 -0
- package/packages/server/dist/services/cliScreenModel.js +196 -0
- package/packages/server/dist/services/cliScreenModel.js.map +1 -0
- package/packages/server/dist/services/cliScreenStallWatchdog.d.ts +41 -0
- package/packages/server/dist/services/cliScreenStallWatchdog.d.ts.map +1 -0
- package/packages/server/dist/services/cliScreenStallWatchdog.js +45 -0
- package/packages/server/dist/services/cliScreenStallWatchdog.js.map +1 -0
- package/packages/server/dist/services/cliSessionPool.d.ts +97 -0
- package/packages/server/dist/services/cliSessionPool.d.ts.map +1 -0
- package/packages/server/dist/services/cliSessionPool.js +278 -0
- package/packages/server/dist/services/cliSessionPool.js.map +1 -0
- package/packages/server/dist/services/cliSpinnerProgress.d.ts +41 -0
- package/packages/server/dist/services/cliSpinnerProgress.d.ts.map +1 -0
- package/packages/server/dist/services/cliSpinnerProgress.js +131 -0
- package/packages/server/dist/services/cliSpinnerProgress.js.map +1 -0
- package/packages/server/dist/services/fileRewind.d.ts +46 -0
- package/packages/server/dist/services/fileRewind.d.ts.map +1 -0
- package/packages/server/dist/services/fileRewind.js +77 -0
- package/packages/server/dist/services/fileRewind.js.map +1 -0
- package/packages/server/dist/services/historyParser.d.ts +11 -0
- package/packages/server/dist/services/historyParser.d.ts.map +1 -1
- package/packages/server/dist/services/historyParser.js +10 -8
- package/packages/server/dist/services/historyParser.js.map +1 -1
- package/packages/server/dist/services/imageStorageService.d.ts +12 -0
- package/packages/server/dist/services/imageStorageService.d.ts.map +1 -1
- package/packages/server/dist/services/imageStorageService.js +22 -0
- package/packages/server/dist/services/imageStorageService.js.map +1 -1
- package/packages/server/dist/services/projectService.d.ts +13 -1
- package/packages/server/dist/services/projectService.d.ts.map +1 -1
- package/packages/server/dist/services/projectService.js +32 -0
- package/packages/server/dist/services/projectService.js.map +1 -1
- package/packages/server/dist/services/queueService.d.ts.map +1 -1
- package/packages/server/dist/services/queueService.js +9 -3
- package/packages/server/dist/services/queueService.js.map +1 -1
- package/packages/server/dist/services/rateLimitProbeService.d.ts +15 -0
- package/packages/server/dist/services/rateLimitProbeService.d.ts.map +1 -1
- package/packages/server/dist/services/rateLimitProbeService.js +48 -19
- package/packages/server/dist/services/rateLimitProbeService.js.map +1 -1
- package/packages/server/dist/services/streamHandler.d.ts +8 -1
- package/packages/server/dist/services/streamHandler.d.ts.map +1 -1
- package/packages/server/dist/services/streamHandler.js +12 -5
- package/packages/server/dist/services/streamHandler.js.map +1 -1
- package/packages/server/dist/services/systemBrowseService.d.ts +91 -0
- package/packages/server/dist/services/systemBrowseService.d.ts.map +1 -0
- package/packages/server/dist/services/systemBrowseService.js +372 -0
- package/packages/server/dist/services/systemBrowseService.js.map +1 -0
- package/packages/server/dist/services/workspaceContext.d.ts +24 -0
- package/packages/server/dist/services/workspaceContext.d.ts.map +1 -0
- package/packages/server/dist/services/workspaceContext.js +109 -0
- package/packages/server/dist/services/workspaceContext.js.map +1 -0
- package/packages/server/dist/snippets/qa-review +2 -0
- package/packages/server/dist/utils/backgroundBlock.d.ts +29 -0
- package/packages/server/dist/utils/backgroundBlock.d.ts.map +1 -0
- package/packages/server/dist/utils/backgroundBlock.js +33 -0
- package/packages/server/dist/utils/backgroundBlock.js.map +1 -0
- package/packages/server/dist/utils/backgroundTaskTracker.d.ts +20 -0
- package/packages/server/dist/utils/backgroundTaskTracker.d.ts.map +1 -0
- package/packages/server/dist/utils/backgroundTaskTracker.js +40 -0
- package/packages/server/dist/utils/backgroundTaskTracker.js.map +1 -0
- package/packages/server/dist/utils/bundledBinaryModelSupport.d.ts +7 -0
- package/packages/server/dist/utils/bundledBinaryModelSupport.d.ts.map +1 -1
- package/packages/server/dist/utils/bundledBinaryModelSupport.js +9 -4
- package/packages/server/dist/utils/bundledBinaryModelSupport.js.map +1 -1
- package/packages/server/dist/utils/cliDebugLog.d.ts +38 -0
- package/packages/server/dist/utils/cliDebugLog.d.ts.map +1 -0
- package/packages/server/dist/utils/cliDebugLog.js +65 -0
- package/packages/server/dist/utils/cliDebugLog.js.map +1 -0
- package/packages/server/dist/utils/cliEngineUtils.d.ts +35 -0
- package/packages/server/dist/utils/cliEngineUtils.d.ts.map +1 -0
- package/packages/server/dist/utils/cliEngineUtils.js +38 -0
- package/packages/server/dist/utils/cliEngineUtils.js.map +1 -0
- package/packages/server/dist/utils/effortUtils.d.ts.map +1 -1
- package/packages/server/dist/utils/effortUtils.js +5 -3
- package/packages/server/dist/utils/effortUtils.js.map +1 -1
- package/packages/server/dist/utils/trailingThrottle.d.ts +21 -0
- package/packages/server/dist/utils/trailingThrottle.d.ts.map +1 -0
- package/packages/server/dist/utils/trailingThrottle.js +36 -0
- package/packages/server/dist/utils/trailingThrottle.js.map +1 -0
- package/packages/server/package.json +61 -59
- package/packages/server/resources/internals/image-storage.md +9 -0
- package/packages/server/resources/manual/02-chat.md +22 -3
- package/packages/server/resources/manual/03-sessions.md +1 -0
- package/packages/server/resources/manual/05-projects.md +12 -1
- package/packages/server/resources/manual/11-bmad-method-integration.md +2 -0
- package/packages/server/resources/manual/13-settings.md +57 -5
- package/packages/shared/dist/index.d.ts +3 -0
- package/packages/shared/dist/index.d.ts.map +1 -1
- package/packages/shared/dist/index.js +6 -0
- package/packages/shared/dist/index.js.map +1 -1
- package/packages/shared/dist/types/bmadStatus.d.ts +16 -0
- package/packages/shared/dist/types/bmadStatus.d.ts.map +1 -1
- package/packages/shared/dist/types/bmadStatus.js.map +1 -1
- package/packages/shared/dist/types/preferences.d.ts +14 -2
- package/packages/shared/dist/types/preferences.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.js +1 -0
- package/packages/shared/dist/types/preferences.js.map +1 -1
- package/packages/shared/dist/types/project.d.ts +7 -1
- package/packages/shared/dist/types/project.d.ts.map +1 -1
- package/packages/shared/dist/types/project.js.map +1 -1
- package/packages/shared/dist/types/sdk.d.ts +123 -11
- package/packages/shared/dist/types/sdk.d.ts.map +1 -1
- package/packages/shared/dist/types/sdk.js +64 -19
- package/packages/shared/dist/types/sdk.js.map +1 -1
- package/packages/shared/dist/types/streaming.d.ts +2 -2
- package/packages/shared/dist/types/streaming.d.ts.map +1 -1
- package/packages/shared/dist/types/streaming.js.map +1 -1
- package/packages/shared/dist/types/systemBrowse.d.ts +120 -0
- package/packages/shared/dist/types/systemBrowse.d.ts.map +1 -0
- package/packages/shared/dist/types/systemBrowse.js +57 -0
- package/packages/shared/dist/types/systemBrowse.js.map +1 -0
- package/packages/shared/dist/types/websocket.d.ts +38 -0
- package/packages/shared/dist/types/websocket.d.ts.map +1 -1
- package/packages/shared/dist/utils/interruptFiller.d.ts +30 -0
- package/packages/shared/dist/utils/interruptFiller.d.ts.map +1 -0
- package/packages/shared/dist/utils/interruptFiller.js +38 -0
- package/packages/shared/dist/utils/interruptFiller.js.map +1 -0
- package/packages/shared/dist/utils/toolResultContent.d.ts +22 -0
- package/packages/shared/dist/utils/toolResultContent.d.ts.map +1 -0
- package/packages/shared/dist/utils/toolResultContent.js +29 -0
- package/packages/shared/dist/utils/toolResultContent.js.map +1 -0
- package/scripts/run-integration-test.mjs +362 -362
- package/packages/client/dist/assets/index-DyNJ5jEW.css +0 -32
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System Browse Controller
|
|
3
|
+
* HTTP handlers for the directory-only system browse API (Epic 34, Story 34.1).
|
|
4
|
+
*
|
|
5
|
+
* Unlike fileSystemController, this controller does NOT resolve a projectSlug —
|
|
6
|
+
* it receives ABSOLUTE paths directly (the API runs before a project exists).
|
|
7
|
+
* Error → HTTP mapping follows the fileSystemController idiom (read the domain
|
|
8
|
+
* `code` off the thrown error, map to SYSTEM_BROWSE_ERRORS.httpStatus + an i18n
|
|
9
|
+
* message), but because every code maps to the same i18n key across all three
|
|
10
|
+
* handlers, the mapping is centralized in one helper instead of repeated.
|
|
11
|
+
* [Source: packages/server/src/controllers/fileSystemController.ts:34-55, 358-385;
|
|
12
|
+
* docs/architecture/18-error-handling-strategy.md#Error Response Format]
|
|
13
|
+
*/
|
|
14
|
+
import { Request, Response } from 'express';
|
|
15
|
+
export declare const systemBrowseController: {
|
|
16
|
+
/**
|
|
17
|
+
* GET /api/system/browse?path=
|
|
18
|
+
* No path (or the __MYPC__ sentinel) → drive roots; otherwise list the
|
|
19
|
+
* absolute directory's child directories.
|
|
20
|
+
*/
|
|
21
|
+
browse(req: Request, res: Response): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* POST /api/system/browse/mkdir body { parentPath, name }
|
|
24
|
+
* Create a new folder under an absolute parent directory.
|
|
25
|
+
*/
|
|
26
|
+
mkdir(req: Request, res: Response): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* POST /api/system/browse/rename body { path, newName }
|
|
29
|
+
* Rename an entry within its same parent directory.
|
|
30
|
+
*/
|
|
31
|
+
rename(req: Request, res: Response): Promise<void>;
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=systemBrowseController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemBrowseController.d.ts","sourceRoot":"","sources":["../../src/controllers/systemBrowseController.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAkC5C,eAAO,MAAM,sBAAsB;IACjC;;;;OAIG;gBACe,OAAO,OAAO,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxD;;;OAGG;eACc,OAAO,OAAO,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvD;;;OAGG;gBACe,OAAO,OAAO,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBzD,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System Browse Controller
|
|
3
|
+
* HTTP handlers for the directory-only system browse API (Epic 34, Story 34.1).
|
|
4
|
+
*
|
|
5
|
+
* Unlike fileSystemController, this controller does NOT resolve a projectSlug —
|
|
6
|
+
* it receives ABSOLUTE paths directly (the API runs before a project exists).
|
|
7
|
+
* Error → HTTP mapping follows the fileSystemController idiom (read the domain
|
|
8
|
+
* `code` off the thrown error, map to SYSTEM_BROWSE_ERRORS.httpStatus + an i18n
|
|
9
|
+
* message), but because every code maps to the same i18n key across all three
|
|
10
|
+
* handlers, the mapping is centralized in one helper instead of repeated.
|
|
11
|
+
* [Source: packages/server/src/controllers/fileSystemController.ts:34-55, 358-385;
|
|
12
|
+
* docs/architecture/18-error-handling-strategy.md#Error Response Format]
|
|
13
|
+
*/
|
|
14
|
+
import { SYSTEM_BROWSE_ERRORS } from '@hammoc/shared';
|
|
15
|
+
import { systemBrowseService } from '../services/systemBrowseService.js';
|
|
16
|
+
/** Sentinel for the client's virtual "My PC" node (explicit drive-roots request). */
|
|
17
|
+
const MYPC_SENTINEL = '__MYPC__';
|
|
18
|
+
/** Domain error code → i18n message key (systemBrowse.error.*). */
|
|
19
|
+
const ERROR_I18N_KEY = {
|
|
20
|
+
INVALID_PATH: 'systemBrowse.error.invalidPath',
|
|
21
|
+
NOT_FOUND: 'systemBrowse.error.notFound',
|
|
22
|
+
NOT_A_DIRECTORY: 'systemBrowse.error.notADirectory',
|
|
23
|
+
PERMISSION_DENIED: 'systemBrowse.error.permissionDenied',
|
|
24
|
+
ALREADY_EXISTS: 'systemBrowse.error.alreadyExists',
|
|
25
|
+
INVALID_NAME: 'systemBrowse.error.invalidName',
|
|
26
|
+
BROWSE_ERROR: 'systemBrowse.error.browseError',
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Map a thrown service error to a consistent { error: { code, message } } body.
|
|
30
|
+
* Unknown codes fall back to BROWSE_ERROR (500).
|
|
31
|
+
*/
|
|
32
|
+
function handleBrowseError(error, req, res) {
|
|
33
|
+
const code = error.code;
|
|
34
|
+
const known = code && code in SYSTEM_BROWSE_ERRORS
|
|
35
|
+
? SYSTEM_BROWSE_ERRORS[code]
|
|
36
|
+
: SYSTEM_BROWSE_ERRORS.BROWSE_ERROR;
|
|
37
|
+
const i18nKey = ERROR_I18N_KEY[known.code] ?? ERROR_I18N_KEY.BROWSE_ERROR;
|
|
38
|
+
res.status(known.httpStatus).json({
|
|
39
|
+
error: { code: known.code, message: req.t(i18nKey) },
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export const systemBrowseController = {
|
|
43
|
+
/**
|
|
44
|
+
* GET /api/system/browse?path=
|
|
45
|
+
* No path (or the __MYPC__ sentinel) → drive roots; otherwise list the
|
|
46
|
+
* absolute directory's child directories.
|
|
47
|
+
*/
|
|
48
|
+
async browse(req, res) {
|
|
49
|
+
try {
|
|
50
|
+
const queryPath = typeof req.query.path === 'string' ? req.query.path : undefined;
|
|
51
|
+
const result = !queryPath || queryPath === MYPC_SENTINEL
|
|
52
|
+
? await systemBrowseService.listDriveRoots()
|
|
53
|
+
: await systemBrowseService.listDirectory(queryPath);
|
|
54
|
+
res.json(result);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
handleBrowseError(error, req, res);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
/**
|
|
61
|
+
* POST /api/system/browse/mkdir body { parentPath, name }
|
|
62
|
+
* Create a new folder under an absolute parent directory.
|
|
63
|
+
*/
|
|
64
|
+
async mkdir(req, res) {
|
|
65
|
+
try {
|
|
66
|
+
const { parentPath, name } = req.body ?? {};
|
|
67
|
+
if (typeof parentPath !== 'string' || parentPath.length === 0) {
|
|
68
|
+
res.status(400).json({ error: { code: 'INVALID_REQUEST', message: req.t('systemBrowse.validation.parentPathRequired') } });
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (typeof name !== 'string' || name.length === 0) {
|
|
72
|
+
res.status(400).json({ error: { code: 'INVALID_REQUEST', message: req.t('systemBrowse.validation.nameRequired') } });
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const result = await systemBrowseService.makeDirectory(parentPath, name);
|
|
76
|
+
res.status(201).json(result);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
handleBrowseError(error, req, res);
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
/**
|
|
83
|
+
* POST /api/system/browse/rename body { path, newName }
|
|
84
|
+
* Rename an entry within its same parent directory.
|
|
85
|
+
*/
|
|
86
|
+
async rename(req, res) {
|
|
87
|
+
try {
|
|
88
|
+
const { path: targetPath, newName } = req.body ?? {};
|
|
89
|
+
if (typeof targetPath !== 'string' || targetPath.length === 0) {
|
|
90
|
+
res.status(400).json({ error: { code: 'INVALID_REQUEST', message: req.t('systemBrowse.validation.pathRequired') } });
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (typeof newName !== 'string' || newName.length === 0) {
|
|
94
|
+
res.status(400).json({ error: { code: 'INVALID_REQUEST', message: req.t('systemBrowse.validation.newNameRequired') } });
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const result = await systemBrowseService.rename(targetPath, newName);
|
|
98
|
+
res.json(result);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
handleBrowseError(error, req, res);
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=systemBrowseController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemBrowseController.js","sourceRoot":"","sources":["../../src/controllers/systemBrowseController.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { StreamCallbacks, StreamChunk } from '@hammoc/shared';
|
|
9
9
|
import type { McpCallRecorder } from '../services/observabilityService.js';
|
|
10
|
+
import type { BackgroundTaskTracker } from '../utils/backgroundTaskTracker.js';
|
|
10
11
|
export interface StreamRef {
|
|
11
12
|
sessionId: string;
|
|
12
13
|
sockets: {
|
|
@@ -44,6 +45,7 @@ export interface CallbackBuilderDeps {
|
|
|
44
45
|
* out (no behavior change when undefined).
|
|
45
46
|
*/
|
|
46
47
|
mcpRecorder?: McpCallRecorder;
|
|
48
|
+
backgroundTracker?: BackgroundTaskTracker;
|
|
47
49
|
}
|
|
48
50
|
export interface CallbackBuilderHooks {
|
|
49
51
|
/** Called after SDK resolves session ID. Browser: disk write. Queue: state update. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamCallbacks.d.ts","sourceRoot":"","sources":["../../src/handlers/streamCallbacks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EAOZ,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"streamCallbacks.d.ts","sourceRoot":"","sources":["../../src/handlers/streamCallbacks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EAOZ,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAO/E,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3C,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7F,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACrD;AAID,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACpE,mBAAmB,EAAE,eAAe,CAAC;IACrC,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mGAAmG;IACnG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,aAAa,GAAG,SAAS,CAAC;IACnD,mGAAmG;IACnG,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;CAC3C;AAED,MAAM,WAAW,oBAAoB;IACnC,sFAAsF;IACtF,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACnD,6EAA6E;IAC7E,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,mBAAmB,EACzB,KAAK,CAAC,EAAE,oBAAoB,GAC3B,WAAW,CA+Ib"}
|
|
@@ -39,20 +39,30 @@ export function buildStreamCallbacks(deps, hooks) {
|
|
|
39
39
|
messageId: chunk.messageId,
|
|
40
40
|
content: chunk.content,
|
|
41
41
|
done: chunk.done,
|
|
42
|
+
// Story 37.11: forward the provisional flag TRI-STATE so the client can render the live screen
|
|
43
|
+
// estimate dimmed + `live`-badged (`true`), or FINALIZE it in place when the file-parsed canonical
|
|
44
|
+
// arrives (`false` — progressive replace), or append a fresh authoritative block (`undefined`).
|
|
45
|
+
// Must forward `false` explicitly (a truthy-only spread would drop it → no finalize).
|
|
46
|
+
...(chunk.provisional !== undefined ? { provisional: chunk.provisional } : {}),
|
|
42
47
|
});
|
|
43
48
|
},
|
|
44
|
-
onThinking: (content) => {
|
|
49
|
+
onThinking: (content, provisional) => {
|
|
45
50
|
activity?.('onThinking');
|
|
46
|
-
emit('thinking:chunk', { content });
|
|
51
|
+
emit('thinking:chunk', { content, ...(provisional !== undefined ? { provisional } : {}) });
|
|
47
52
|
},
|
|
48
53
|
onToolUse: (toolCall) => {
|
|
49
54
|
activity?.('onToolUse');
|
|
50
55
|
log.debug(`onToolUse: tool=${toolCall.name}, id=${toolCall.id}`);
|
|
56
|
+
deps.backgroundTracker?.trackToolUse(toolCall.input);
|
|
51
57
|
emit('tool:call', {
|
|
52
58
|
id: toolCall.id,
|
|
53
59
|
name: toolCall.name,
|
|
54
60
|
input: toolCall.input,
|
|
55
61
|
startedAt: Date.now(),
|
|
62
|
+
// Story 37.11: a provisional grid tool card carries an empty input (`true`); the file-parsed
|
|
63
|
+
// canonical re-sends the SAME id with the real name+input and `false` to FINALIZE it. Forward the
|
|
64
|
+
// tri-state explicitly (`false` must survive — a truthy-only spread would drop the finalize).
|
|
65
|
+
...(toolCall.provisional !== undefined ? { provisional: toolCall.provisional } : {}),
|
|
56
66
|
});
|
|
57
67
|
// Story 31.3 — buffer start info (size only, body discarded).
|
|
58
68
|
deps.mcpRecorder?.onToolUse(toolCall.id, toolCall.name, toolCall.input);
|
|
@@ -61,10 +71,12 @@ export function buildStreamCallbacks(deps, hooks) {
|
|
|
61
71
|
activity?.('onToolInputUpdate');
|
|
62
72
|
emit('tool:input-update', { toolCallId, input });
|
|
63
73
|
},
|
|
64
|
-
onToolResult: (toolCallId, result) => {
|
|
74
|
+
onToolResult: (toolCallId, result, provisional) => {
|
|
65
75
|
activity?.('onToolResult');
|
|
66
76
|
log.debug(`onToolResult: id=${toolCallId}, success=${result.success}`);
|
|
67
|
-
|
|
77
|
+
// Story 37.11 (AC4): a provisional result keeps the tool card live-badged (it must not
|
|
78
|
+
// finalize the card early); the authoritative reload clears the distinction.
|
|
79
|
+
emit('tool:result', { toolCallId, result, ...(provisional ? { provisional: true } : {}) });
|
|
68
80
|
// Story 31.3 — append the completed record (size only, body discarded).
|
|
69
81
|
deps.mcpRecorder?.onToolResult(toolCallId, result, sessionIdRef.current);
|
|
70
82
|
},
|
|
@@ -78,6 +90,7 @@ export function buildStreamCallbacks(deps, hooks) {
|
|
|
78
90
|
},
|
|
79
91
|
onTaskNotification: (data) => {
|
|
80
92
|
activity?.('onTaskNotification');
|
|
93
|
+
deps.backgroundTracker?.trackTaskDone();
|
|
81
94
|
emit('system:task-notification', data);
|
|
82
95
|
},
|
|
83
96
|
onToolUseSummary: (summary, precedingToolUseIds) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamCallbacks.js","sourceRoot":"","sources":["../../src/handlers/streamCallbacks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"streamCallbacks.js","sourceRoot":"","sources":["../../src/handlers/streamCallbacks.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { Server as HttpServer } from 'http';
|
|
8
8
|
import { Server as SocketIOServer, Socket } from 'socket.io';
|
|
9
|
-
import type { ClientToServerEvents, ServerToClientEvents, InterServerEvents, SocketData, ChatUsage } from '@hammoc/shared';
|
|
10
|
-
import {
|
|
9
|
+
import type { ClientToServerEvents, ServerToClientEvents, InterServerEvents, SocketData, ChatUsage, UserPreferences, ProjectSettingsApiResponse } from '@hammoc/shared';
|
|
10
|
+
import type { ChatEngine } from '../services/chatEngine.js';
|
|
11
11
|
type SocketType = Socket<ClientToServerEvents, ServerToClientEvents, InterServerEvents, SocketData>;
|
|
12
12
|
interface PendingPermission {
|
|
13
13
|
resolve: (result: {
|
|
@@ -28,16 +28,43 @@ interface ActiveStream {
|
|
|
28
28
|
pendingPermissions: Map<string, PendingPermission>;
|
|
29
29
|
status: 'running' | 'completed' | 'error';
|
|
30
30
|
startedAt: number;
|
|
31
|
-
chatService?:
|
|
31
|
+
chatService?: ChatEngine;
|
|
32
32
|
resumeSessionAt?: string;
|
|
33
33
|
expectedBranchTotal?: number;
|
|
34
34
|
isFork?: boolean;
|
|
35
35
|
/** Deferred usage data — included in stream:complete-messages after JSONL flush */
|
|
36
36
|
deferredUsage?: ChatUsage;
|
|
37
|
+
/** CLI decision log — per-turn file, server + client entries. */
|
|
38
|
+
cliDebugLog?: import('../utils/cliDebugLog.js').CliDebugLog;
|
|
39
|
+
/**
|
|
40
|
+
* Project slug (encoded cwd) captured at chat:send time. Lets the session list
|
|
41
|
+
* attribute a still-file-less stream to its project synchronously — sessionProjectMap
|
|
42
|
+
* is only populated async (after findProjectByPath resolves), too late for a list
|
|
43
|
+
* request that races the CLI boot window.
|
|
44
|
+
*/
|
|
45
|
+
projectSlug?: string;
|
|
46
|
+
/**
|
|
47
|
+
* The first user prompt for this stream. A new CLI session's JSONL file does not
|
|
48
|
+
* exist until claude's interactive TUI finishes booting (~3s) and writes its first
|
|
49
|
+
* line, so the session list cannot read a label from disk during that window. This
|
|
50
|
+
* carries the prompt so a "waiting" entry shows a meaningful preview, not a blank row.
|
|
51
|
+
*/
|
|
52
|
+
firstPrompt?: string;
|
|
37
53
|
}
|
|
38
54
|
export declare function setChainDrainFailureInjection(sessionId: string, count: number): void;
|
|
39
55
|
/** Get session IDs of all currently running active streams */
|
|
40
56
|
export declare function getActiveStreamSessionIds(): string[];
|
|
57
|
+
/**
|
|
58
|
+
* Running streams for a project, with their captured first prompt. Used by the
|
|
59
|
+
* session list to surface a session whose JSONL file does not exist yet (the CLI
|
|
60
|
+
* boot window) and which the client may have already navigated away from — so it
|
|
61
|
+
* is no longer in getJoinedSessionIdsByProject. Prefers the synchronously-captured
|
|
62
|
+
* stream.projectSlug, falling back to the async-populated sessionProjectMap.
|
|
63
|
+
*/
|
|
64
|
+
export declare function getActiveStreamMetaByProject(projectSlug: string): Array<{
|
|
65
|
+
sessionId: string;
|
|
66
|
+
firstPrompt: string;
|
|
67
|
+
}>;
|
|
41
68
|
/** Get active (running) session counts grouped by project slug (in-memory, no I/O) */
|
|
42
69
|
export declare function getActiveSessionCountsByProject(): Map<string, number>;
|
|
43
70
|
/** Check if a specific session has a running active stream */
|
|
@@ -97,6 +124,19 @@ export declare function getIO(): SocketIOServer<ClientToServerEvents, ServerToCl
|
|
|
97
124
|
* REST mutation's success/failure semantics.
|
|
98
125
|
*/
|
|
99
126
|
export declare function broadcastSnippetList(workingDirectory: string | undefined, originSocketId: string | undefined): Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Broadcast a global-preferences change to every OTHER connected browser
|
|
129
|
+
* (multi-device settings sync). The originating socket is excluded so it never
|
|
130
|
+
* receives its own echo — it already applied the change optimistically. With no
|
|
131
|
+
* origin id (e.g. a non-browser caller) the change goes to everyone.
|
|
132
|
+
*/
|
|
133
|
+
export declare function broadcastPreferencesChange(preferences: UserPreferences, originSocketId: string | undefined): void;
|
|
134
|
+
/**
|
|
135
|
+
* Broadcast a project-settings change to OTHER browsers (multi-device sync).
|
|
136
|
+
* Sent to everyone except the origin socket; the payload is keyed by projectSlug
|
|
137
|
+
* so each client applies it only while viewing that project's settings.
|
|
138
|
+
*/
|
|
139
|
+
export declare function broadcastProjectSettingsChange(projectSlug: string, settings: ProjectSettingsApiResponse, originSocketId: string | undefined): void;
|
|
100
140
|
/**
|
|
101
141
|
* Get the current number of connected clients
|
|
102
142
|
* @returns Number of connected clients
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/handlers/websocket.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAG7D,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EAMV,SAAS,
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/handlers/websocket.ts"],"names":[],"mappings":"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"}
|