@bryanhu/codexly 0.19.0 → 0.20.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/CHANGELOG.md CHANGED
@@ -4,6 +4,16 @@
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.20.0] - 2026-09-14
8
+
9
+ ### 新增
10
+
11
+ - 统一记录请求完成阶段的安全上下文与项目、任务、回合标识,并按写操作、业务拒绝、慢请求和服务端错误区分日志级别。
12
+
13
+ ### 修复
14
+
15
+ - 保留尚未物化到上游目录的分支任务元数据,避免刷新期间分支任务暂时不可见。
16
+
7
17
  ## [0.19.0] - 2026-09-14
8
18
 
9
19
  ### 新增
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from 'node:module';
2
2
  import { value_exports } from './chunk-ZUECHB6L.js';
3
- import { require_pino, require_safe_stable_stringify, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-YFWMYA6X.js';
3
+ import { require_pino, require_safe_stable_stringify, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-AIACWU7L.js';
4
4
  import { WorkbenchPetProviderError, listTaskCatalog, PendingRequestResolutionError, deleteArchivedTasks, queryCompletedTasks, CompletedTasksQueryError, submitTask, TaskSubmissionError, collectQuestionGroups, formatQuestionAnswers, ProjectTodoError, saveProjectTodo } from './chunk-B2673ODM.js';
5
5
  import { Type, SkillInstallScopeSchema, ScheduledTaskSchema, SubmitTaskResponseSchema, AgentTaskSchema, AsyncQuestionGroupSchema, AnswerAsyncQuestionResultSchema, AgentTurnSchema, DEFAULT_COMMIT_MESSAGE_MODEL, TEMPORARY_TASK_API_PATH, TEMPORARY_TASK_SCOPE_ID, MAX_AGENT_FILE_BYTES, AccessStatusResponseSchema, PairAccessRequestSchema, BingWallpaperCatalogSchema, HealthResponseSchema, AppInfoResponseSchema, AppUpdateProgressResponseSchema, AgentMutationErrorSchema, InstallAppUpdateResponseSchema, InstallAppUpdateRequestSchema, EventStreamMetricsResponseSchema, AgentCapabilitiesSchema, AgentModelPageSchema, AgentGlobalSettingsResponseSchema, AgentGlobalSettingsSchema, MAX_AGENT_IMAGE_BYTES, MAX_AGENT_TEXT_BYTES, GlobalInstructionsSchema, MemorySettingsSchema, AgentPreferencesSchema, SaveGlobalInstructionsSchema, MemorySettingsUpdateSchema, PersonalizationResetSchema, AgentProviderConnectionStatusSchema, StartOfficialProviderLoginResponseSchema, StartOfficialProviderLoginRequestSchema, AgentProviderConnectionMutationResponseSchema, CancelProviderLoginRequestSchema, ConfigureCustomProviderResponseSchema, ConfigureCustomProviderRequestSchema, WorkbenchPetCatalogResponseSchema, WorkbenchPetDownloadResponseSchema, WorkbenchPetDownloadRequestSchema, ProjectPageSchema, HostFileListingSchema, HostFileQuerySchema, ProjectDirectoryListingSchema, ProjectDirectoryQuerySchema, ProjectOpenCapabilitiesResponseSchema, OpenProjectResponseSchema, ProjectRootQuerySchema, OpenProjectRequestSchema, ReorderProjectsResponseSchema, ReorderProjectsRequestSchema, AgentSkillPageSchema, AgentProjectDefaultsResponseSchema, AgentProjectDefaultsSchema, AddProjectResponseSchema, AddProjectRequestSchema, RenameProjectResponseSchema, RenameProjectRequestSchema, RemoveProjectResponseSchema, RemoveProjectRequestSchema, InstalledSkillPageSchema, OfficialPluginPageSchema, OfficialPluginDetailSchema, OfficialPluginInstallResponseSchema, OfficialPluginUninstallResponseSchema, ClawhubSkillPageSchema, ClawhubSkillDetailSchema, ConfiguredMcpServerPageSchema, OpenSkillDirectoryResponseSchema, SetSkillEnabledResponseSchema, SetMcpServerEnabledResponseSchema, SkillInstallResponseSchema, ScheduledTaskPreviewSchema, ScheduledTaskPreviewRequestSchema, ScheduledTaskPageSchema, ScheduledTaskMutationResponseSchema, ScheduledTaskInputSchema, DeleteScheduledTaskResponseSchema, SetScheduledTaskEnabledRequestSchema, AgentTaskPageSchema, UnsubscribeAgentTaskResponseSchema, AgentTaskSnapshotResponseSchema, AgentMcpServerPageSchema, AgentBackgroundTerminalPageSchema, TerminateAgentBackgroundTerminalResponseSchema, PinAgentTaskResponseSchema, PinAgentTaskRequestSchema, RenameAgentTaskResponseSchema, RenameAgentTaskRequestSchema, ArchiveAgentTaskResponseSchema, ArchiveAgentTaskRequestSchema, UnarchiveAgentTaskResponseSchema, UnarchiveAgentTaskRequestSchema, DeleteAgentTaskResponseSchema, DeleteAgentTaskRequestSchema, StartAgentTaskResponseSchema, StartAgentTaskRequestSchema, StartAgentTurnResponseSchema, StartAgentTurnRequestSchema, SteerAgentTurnResponseSchema, SteerAgentTurnRequestSchema, InterruptAgentTurnResponseSchema, InterruptAgentTurnRequestSchema, ResolvePendingRequestResponseSchema, ResolvePendingRequestRequestSchema, SubmitTaskRequestSchema, AsyncQuestionPageSchema, AnswerAsyncQuestionResponseSchema, AnswerAsyncQuestionRequestSchema, DismissAsyncQuestionsRequestSchema, ProjectTodoPageSchema, ProjectTodoResponseSchema, ProjectTodoDraftSchema, SaveProjectTodoRequestSchema, DeleteProjectTodoResponseSchema, DeleteProjectTodoRequestSchema, AgentQueuedSubmissionListSchema, AddAgentQueuedSubmissionResponseSchema, AddAgentQueuedSubmissionRequestSchema, UpdateAgentQueuedSubmissionResponseSchema, UpdateAgentQueuedSubmissionRequestSchema, DeleteAgentQueuedSubmissionResponseSchema, ReorderAgentQueuedSubmissionsResponseSchema, ReorderAgentQueuedSubmissionsRequestSchema, StartAgentQueuedSubmissionResponseSchema, StartAgentQueuedSubmissionRequestSchema, AgentPromptInputSchema, AgentProviderConnectionRecordSchema, MAX_AGENT_IMAGES, MAX_AGENT_IMAGE_TOTAL_BYTES, MAX_AGENT_FILE_TOTAL_BYTES, ProjectGitStatusSchema, ProjectGitStatusQuerySchema, ProjectGitHistoryPageSchema, ProjectGitHistoryQuerySchema, ProjectGitCommitFilesPageSchema, ProjectGitCommitFilesQuerySchema, ProjectGitCommitFileDiffSchema, ProjectGitCommitFileDiffQuerySchema, SwitchProjectBranchRequestSchema, CreateProjectBranchRequestSchema, GenerateCommitMessageResponseSchema, GenerateCommitMessageRequestSchema, CommitProjectChangesResponseSchema, CommitProjectChangesRequestSchema, ProjectFileTreeSchema, ProjectFileTreeQuerySchema, ProjectFileSearchPageSchema, ProjectFileSearchQuerySchema, StopProjectFileSearchResponseSchema, StopProjectFileSearchRequestSchema, ProjectSourceFileQuerySchema, ProjectSourceFileSchema, AgentAttachmentUploadResponseSchema, HostFileKindSchema, ImportHostAttachmentRequestSchema, AgentAttachmentKindSchema, AgentTaskSettingsResponseSchema, AgentTaskSettingsSchema, ReloadAgentMcpServersResponseSchema, ReloadAgentMcpServersRequestSchema, ReviewAgentTaskResponseSchema, ReviewAgentTaskRequestSchema, CompactAgentTaskResponseSchema, CompactAgentTaskRequestSchema, ForkAgentTaskResponseSchema, ForkAgentTaskRequestSchema, UploadAgentFeedbackResponseSchema, UploadAgentFeedbackRequestSchema, DeleteArchivedTasksResponseSchema, DeleteArchivedTasksRequestSchema, AgentTaskCatalogSchema, TaskCatalogQuerySchema, CompletedTasksPageSchema, CompletedTasksQuerySchema, UpdateTaskSettingsAndDefaultsResponseSchema, UpdateTaskSettingsAndDefaultsRequestSchema, NavigableAgentTaskResponseSchema, OpenAgentTaskAttachmentResponseSchema, OpenAgentTaskAttachmentRequestSchema, UpdateAgentGoalResponseSchema, UpdateAgentGoalRequestSchema, ClearAgentGoalResponseSchema, ProjectTodoSchema, AgentMessageAttachmentSchema, ProjectGitWorktreePageSchema, CreateProjectWorktreeResponseSchema, CreateProjectWorktreeRequestSchema, ProjectWorktreeMutationResponseSchema, SwitchProjectWorktreeRequestSchema, RenameProjectFileResponseSchema, RenameProjectFileRequestSchema, DeleteProjectFileResponseSchema, DeleteProjectFileRequestSchema, MAX_EVENT_BATCH_SIZE } from './chunk-X5JZ3VOF.js';
6
6
  import { __commonJS, __require, __toESM } from './chunk-K6J42667.js';
@@ -63445,7 +63445,49 @@ function toMcpProviderHttpError(error) {
63445
63445
  const message = error instanceof Error && error.message.trim().length > 0 ? error.message : "MCP provider request failed";
63446
63446
  return new MutationHttpError("PROVIDER_ERROR", message, 502, true);
63447
63447
  }
63448
+
63449
+ // packages/server/src/request-logging.ts
63448
63450
  var import_fastify = __toESM(require_fastify(), 1);
63451
+ var requestErrorCodes = /* @__PURE__ */ new WeakMap();
63452
+ var SLOW_REQUEST_MS = 3e3;
63453
+ function recordRequestError(request2, code) {
63454
+ requestErrorCodes.set(request2, code);
63455
+ }
63456
+ var CodexlyLogController = class extends import_fastify.LogController {
63457
+ incomingRequest() {
63458
+ }
63459
+ routeNotFound() {
63460
+ }
63461
+ requestCompleted(error, request2, reply) {
63462
+ const route = request2.routeOptions.url;
63463
+ const errorCode = requestErrorCodes.get(request2) ?? (error ? "REQUEST_FAILED" : void 0);
63464
+ requestErrorCodes.delete(request2);
63465
+ const params = request2.params;
63466
+ const fields = {
63467
+ durationMs: reply.elapsedTime,
63468
+ ...errorCode === void 0 ? {} : { errorCode },
63469
+ method: request2.method,
63470
+ requestId: request2.id,
63471
+ route,
63472
+ statusCode: reply.statusCode,
63473
+ // 仅关联项目、任务和回合,不记录正文、查询参数或完整请求对象。
63474
+ ...Object.fromEntries(
63475
+ ["projectId", "taskId", "turnId"].filter((key) => typeof params?.[key] === "string").map((key) => [key, params?.[key]])
63476
+ )
63477
+ };
63478
+ if (error || reply.statusCode >= 500) {
63479
+ request2.log.error(fields, "request completed");
63480
+ } else if (route?.startsWith("/v1/") && route !== "/v1/health") {
63481
+ if (reply.statusCode >= 400) {
63482
+ request2.log.warn(fields, "request rejected");
63483
+ } else if (reply.elapsedTime >= SLOW_REQUEST_MS && !request2.ws) {
63484
+ request2.log.warn(fields, "slow request completed");
63485
+ } else if (["POST", "PUT", "PATCH", "DELETE"].includes(request2.method)) {
63486
+ request2.log.info(fields, "operation completed");
63487
+ }
63488
+ }
63489
+ }
63490
+ };
63449
63491
 
63450
63492
  // node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/esm/wrapper.js
63451
63493
  var import__ = __toESM(require_safe_stable_stringify(), 1);
@@ -63593,23 +63635,6 @@ var COMMIT_MESSAGE_OUTPUT_SCHEMA = {
63593
63635
  required: ["message"],
63594
63636
  type: "object"
63595
63637
  };
63596
- var CodexlyLogController = class extends import_fastify.LogController {
63597
- incomingRequest() {
63598
- }
63599
- requestCompleted(error, request2, reply) {
63600
- const fields = {
63601
- durationMs: reply.elapsedTime,
63602
- ...error ? { errorCode: "REQUEST_FAILED" } : {},
63603
- method: request2.method,
63604
- requestId: request2.id,
63605
- route: request2.routeOptions.url,
63606
- statusCode: reply.statusCode
63607
- };
63608
- if (reply.statusCode >= 500) {
63609
- request2.log.error(fields, "request completed");
63610
- }
63611
- }
63612
- };
63613
63638
  function fingerprintPayload(payload) {
63614
63639
  const fingerprint = wrapper_default(payload);
63615
63640
  if (fingerprint === void 0) {
@@ -72592,6 +72617,7 @@ async function configureServerDelivery(app, options) {
72592
72617
  });
72593
72618
  app.setErrorHandler((error, request2, reply) => {
72594
72619
  if (error instanceof MutationHttpError) {
72620
+ recordRequestError(request2, error.code);
72595
72621
  return reply.code(error.statusCode).send({
72596
72622
  code: error.code,
72597
72623
  message: error.message,
@@ -72616,10 +72642,7 @@ async function configureServerDelivery(app, options) {
72616
72642
  retryable: false
72617
72643
  });
72618
72644
  }
72619
- request2.log.error(
72620
- { errorCode: "INTERNAL_ERROR", route: request2.routeOptions.url },
72621
- "Unhandled request error"
72622
- );
72645
+ recordRequestError(request2, "INTERNAL_ERROR");
72623
72646
  return reply.code(explicitStatusCode).send({
72624
72647
  code: "INTERNAL_ERROR",
72625
72648
  message: "Internal server error",
@@ -72831,8 +72854,8 @@ var registerPersonalizationRoutes = (app, context, done) => {
72831
72854
  async function createCodexlyServer(options) {
72832
72855
  const handlerTimeoutMs = options.handlerTimeoutMs ?? DEFAULT_HANDLER_TIMEOUT_MS;
72833
72856
  const logger = options.loggerEnabled === false ? false : {
72834
- // CLI 运行时只向终端输出警告和错误。
72835
- level: "warn",
72857
+ // 请求控制器仅放行关键操作、慢请求和错误。
72858
+ level: "info",
72836
72859
  // 即使后续扩展请求 Serializer,也不能让认证字段进入结构化日志。
72837
72860
  redact: {
72838
72861
  censor: "[Redacted]",
@@ -9564,6 +9564,7 @@ var CodexAgentProviderBase = class {
9564
9564
  );
9565
9565
  this.runtime.projectTaskIds.add(task.id);
9566
9566
  this.runtime.resumedTaskIds.add(task.id);
9567
+ this.runtime.unmaterializedTasks.set(task.id, task);
9567
9568
  return task;
9568
9569
  }
9569
9570
  async renameTask(taskId, title) {
package/dist/cli.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { createCodexlyServer, SqliteStateRepository, normalizeAllowedHost } from './chunk-HMXTAIDF.js';
3
+ import { createCodexlyServer, SqliteStateRepository, normalizeAllowedHost } from './chunk-2J5P2EG2.js';
4
4
  import './chunk-ZUECHB6L.js';
5
- import { startCodexAppServer, locateCodexBinary, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, CodexProjectRepository, checkCodexVersion } from './chunk-YFWMYA6X.js';
5
+ import { startCodexAppServer, locateCodexBinary, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, CodexProjectRepository, checkCodexVersion } from './chunk-AIACWU7L.js';
6
6
  import './chunk-B2673ODM.js';
7
7
  import { DEFAULT_COMMIT_MESSAGE_MODEL } from './chunk-X5JZ3VOF.js';
8
8
  import './chunk-GT7XTSEG.js';
@@ -21,7 +21,7 @@ createRequire(import.meta.url);
21
21
 
22
22
  // package.json
23
23
  var package_default = {
24
- version: "0.19.0"};
24
+ version: "0.20.0"};
25
25
 
26
26
  // src/npm-registry.ts
27
27
  var MIRROR_REGISTRY = "https://registry.npmmirror.com";
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'node:module';
2
- export { CodexAppServerExitedError, CodexAppServerProcess, CodexAppServerShutdownError, CodexAppServerSpawnError, CodexProjectRepository, CodexProtocolMappingError, CodexProviderConnectionError, CodexProviderConnectionService, CodexRuntimeProvider, CodexWorkbenchPetProvider, JsonlRpcClient, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError, SUPPORTED_CODEX_VERSION, SUPPORTED_CODEX_VERSION_RANGE, checkCodexVersion, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, locateCodexBinary, startCodexAppServer } from '../../chunk-YFWMYA6X.js';
2
+ export { CodexAppServerExitedError, CodexAppServerProcess, CodexAppServerShutdownError, CodexAppServerSpawnError, CodexProjectRepository, CodexProtocolMappingError, CodexProviderConnectionError, CodexProviderConnectionService, CodexRuntimeProvider, CodexWorkbenchPetProvider, JsonlRpcClient, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError, SUPPORTED_CODEX_VERSION, SUPPORTED_CODEX_VERSION_RANGE, checkCodexVersion, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, locateCodexBinary, startCodexAppServer } from '../../chunk-AIACWU7L.js';
3
3
  import '../../chunk-B2673ODM.js';
4
4
  import '../../chunk-X5JZ3VOF.js';
5
5
  import '../../chunk-GT7XTSEG.js';
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';
2
- export { AccessSessionService, AgentEventStream, GitCommitError, GitCommitReviewError, SqliteStateRepository, commitSelectedProjectChanges, createCodexlyServer, normalizeAllowedHost, readProjectGitCommitFileDiff, readProjectGitCommitFiles } from '../chunk-HMXTAIDF.js';
2
+ export { AccessSessionService, AgentEventStream, GitCommitError, GitCommitReviewError, SqliteStateRepository, commitSelectedProjectChanges, createCodexlyServer, normalizeAllowedHost, readProjectGitCommitFileDiff, readProjectGitCommitFiles } from '../chunk-2J5P2EG2.js';
3
3
  import '../chunk-ZUECHB6L.js';
4
- import '../chunk-YFWMYA6X.js';
4
+ import '../chunk-AIACWU7L.js';
5
5
  import '../chunk-B2673ODM.js';
6
6
  import '../chunk-X5JZ3VOF.js';
7
7
  import '../chunk-GT7XTSEG.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bryanhu/codexly",
3
- "version": "0.19.0",
3
+ "version": "0.20.0",
4
4
  "description": "通过 Web 操作本地 Coding Agent 的应用",
5
5
  "type": "module",
6
6
  "author": "BryanHu",