@seawork/server 1.0.20 → 1.0.21-rc.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.
Files changed (32) hide show
  1. package/dist/server/client/daemon-client.d.ts +7 -1
  2. package/dist/server/client/daemon-client.d.ts.map +1 -1
  3. package/dist/server/client/daemon-client.js +26 -0
  4. package/dist/server/client/daemon-client.js.map +1 -1
  5. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +9 -3
  6. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  7. package/dist/server/server/agent/providers/codex-app-server-agent.js +83 -5
  8. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  9. package/dist/server/server/bootstrap.d.ts.map +1 -1
  10. package/dist/server/server/bootstrap.js +4 -0
  11. package/dist/server/server/bootstrap.js.map +1 -1
  12. package/dist/server/server/pr-review-watcher.d.ts +24 -0
  13. package/dist/server/server/pr-review-watcher.d.ts.map +1 -0
  14. package/dist/server/server/pr-review-watcher.js +281 -0
  15. package/dist/server/server/pr-review-watcher.js.map +1 -0
  16. package/dist/server/server/session.d.ts +4 -0
  17. package/dist/server/server/session.d.ts.map +1 -1
  18. package/dist/server/server/session.js +117 -1
  19. package/dist/server/server/session.js.map +1 -1
  20. package/dist/server/server/workspace-ignore/store.d.ts +17 -0
  21. package/dist/server/server/workspace-ignore/store.d.ts.map +1 -0
  22. package/dist/server/server/workspace-ignore/store.js +92 -0
  23. package/dist/server/server/workspace-ignore/store.js.map +1 -0
  24. package/dist/server/shared/messages.d.ts +584 -0
  25. package/dist/server/shared/messages.d.ts.map +1 -1
  26. package/dist/server/shared/messages.js +49 -0
  27. package/dist/server/shared/messages.js.map +1 -1
  28. package/dist/server/utils/directory-suggestions.d.ts +2 -0
  29. package/dist/server/utils/directory-suggestions.d.ts.map +1 -1
  30. package/dist/server/utils/directory-suggestions.js +81 -11
  31. package/dist/server/utils/directory-suggestions.js.map +1 -1
  32. package/package.json +3 -3
@@ -38,6 +38,7 @@ import { redactGitForgeTokens, rehydratePatchTokens } from "./git-forge/token-ma
38
38
  import { DictationStreamManager, } from "./dictation/dictation-stream-manager.js";
39
39
  import { listAvailableEditorTargets, openInEditorTarget } from "./editor-targets.js";
40
40
  import { getDownloadableFileInfo, listDirectoryEntries, readExplorerFile, } from "./file-explorer/service.js";
41
+ import { WorkspaceIgnoreStore } from "./workspace-ignore/store.js";
41
42
  import { handleGetPublicIssue, handleListIssueComments, handleListPublicIssues, handlePostIssueComment, handleToggleIssueReaction, } from "./forum-handler.js";
42
43
  import { handleListMyIssues } from "./list-my-issues-handler.js";
43
44
  import { isLegacyEditorTargetId, serializeAgentStreamEvent, } from "./messages.js";
@@ -238,6 +239,7 @@ function toAgentPersistenceHandle(logger, handle) {
238
239
  */
239
240
  export class Session {
240
241
  constructor(options) {
242
+ this.workspaceIgnoreStore = null;
241
243
  this.processingPhase = "idle";
242
244
  // Voice mode state
243
245
  this.isVoiceMode = false;
@@ -1316,6 +1318,12 @@ export class Session {
1316
1318
  case "file_explorer_request":
1317
1319
  await this.handleFileExplorerRequest(msg);
1318
1320
  break;
1321
+ case "workspace_ignore_get_request":
1322
+ await this.handleWorkspaceIgnoreGetRequest(msg);
1323
+ break;
1324
+ case "workspace_ignore_set_request":
1325
+ await this.handleWorkspaceIgnoreSetRequest(msg);
1326
+ break;
1319
1327
  case "project_icon_request":
1320
1328
  await this.handleProjectIconRequest(msg);
1321
1329
  break;
@@ -3371,7 +3379,7 @@ export class Session {
3371
3379
  }
3372
3380
  }
3373
3381
  async handleDirectorySuggestionsRequest(msg) {
3374
- const { query, limit, requestId, cwd, includeFiles, includeDirectories } = msg;
3382
+ const { query, limit, requestId, cwd, includeFiles, includeDirectories, respectGitignore, userIgnorePatterns, } = msg;
3375
3383
  try {
3376
3384
  const workspaceCwd = cwd?.trim();
3377
3385
  const entries = workspaceCwd
@@ -3381,6 +3389,8 @@ export class Session {
3381
3389
  limit,
3382
3390
  includeFiles,
3383
3391
  includeDirectories,
3392
+ respectGitignore,
3393
+ userIgnorePatterns,
3384
3394
  })
3385
3395
  : (await searchHomeDirectories({
3386
3396
  homeDir: process.env.HOME ?? homedir(),
@@ -3937,6 +3947,112 @@ export class Session {
3937
3947
  });
3938
3948
  }
3939
3949
  }
3950
+ getWorkspaceIgnoreStore() {
3951
+ if (!this.workspaceIgnoreStore) {
3952
+ this.workspaceIgnoreStore = new WorkspaceIgnoreStore(this.seaworkHome);
3953
+ }
3954
+ return this.workspaceIgnoreStore;
3955
+ }
3956
+ async handleWorkspaceIgnoreGetRequest(request) {
3957
+ const { cwd: workspaceCwd, requestId } = request;
3958
+ const cwd = workspaceCwd.trim();
3959
+ if (!cwd) {
3960
+ this.emit({
3961
+ type: "workspace_ignore_get_response",
3962
+ payload: {
3963
+ cwd: workspaceCwd,
3964
+ patterns: [],
3965
+ respectGitignore: undefined,
3966
+ error: "cwd is required",
3967
+ requestId,
3968
+ },
3969
+ });
3970
+ return;
3971
+ }
3972
+ try {
3973
+ const entry = await this.getWorkspaceIgnoreStore().get(cwd);
3974
+ this.emit({
3975
+ type: "workspace_ignore_get_response",
3976
+ payload: {
3977
+ cwd,
3978
+ patterns: entry.patterns,
3979
+ respectGitignore: entry.respectGitignore,
3980
+ error: null,
3981
+ requestId,
3982
+ },
3983
+ });
3984
+ }
3985
+ catch (error) {
3986
+ const message = error instanceof Error ? error.message : String(error);
3987
+ this.sessionLogger.error({ err: error, cwd }, `Failed to read workspace ignore for ${cwd}`);
3988
+ this.emit({
3989
+ type: "workspace_ignore_get_response",
3990
+ payload: {
3991
+ cwd,
3992
+ patterns: [],
3993
+ respectGitignore: undefined,
3994
+ error: message,
3995
+ requestId,
3996
+ },
3997
+ });
3998
+ }
3999
+ }
4000
+ async handleWorkspaceIgnoreSetRequest(request) {
4001
+ const { cwd: workspaceCwd, patterns, respectGitignore, requestId } = request;
4002
+ const cwd = workspaceCwd.trim();
4003
+ if (!cwd) {
4004
+ this.emit({
4005
+ type: "workspace_ignore_set_response",
4006
+ payload: {
4007
+ cwd: workspaceCwd,
4008
+ patterns: [],
4009
+ respectGitignore: undefined,
4010
+ error: "cwd is required",
4011
+ requestId,
4012
+ },
4013
+ });
4014
+ return;
4015
+ }
4016
+ try {
4017
+ const store = this.getWorkspaceIgnoreStore();
4018
+ // Preserve respectGitignore when the client omits it (PR2 client sends it,
4019
+ // older clients won't). Read-then-write isn't atomic but the daemon owns
4020
+ // a pid lock so there's only one writer.
4021
+ let nextRespectGitignore = respectGitignore;
4022
+ if (nextRespectGitignore === undefined) {
4023
+ const existing = await store.get(cwd);
4024
+ nextRespectGitignore = existing.respectGitignore;
4025
+ }
4026
+ const written = await store.set(cwd, {
4027
+ patterns,
4028
+ respectGitignore: nextRespectGitignore,
4029
+ });
4030
+ this.emit({
4031
+ type: "workspace_ignore_set_response",
4032
+ payload: {
4033
+ cwd,
4034
+ patterns: written.patterns,
4035
+ respectGitignore: written.respectGitignore,
4036
+ error: null,
4037
+ requestId,
4038
+ },
4039
+ });
4040
+ }
4041
+ catch (error) {
4042
+ const message = error instanceof Error ? error.message : String(error);
4043
+ this.sessionLogger.error({ err: error, cwd }, `Failed to write workspace ignore for ${cwd}`);
4044
+ this.emit({
4045
+ type: "workspace_ignore_set_response",
4046
+ payload: {
4047
+ cwd,
4048
+ patterns: [],
4049
+ respectGitignore: undefined,
4050
+ error: message,
4051
+ requestId,
4052
+ },
4053
+ });
4054
+ }
4055
+ }
3940
4056
  /**
3941
4057
  * Handle project icon request for a given cwd
3942
4058
  */