@muyichengshayu/promptx 0.1.44 → 0.1.46

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 (99) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/apps/runner/src/index.js +5 -0
  3. package/apps/runner/src/runManager.js +58 -8
  4. package/apps/server/src/agentSessionDiscovery.js +588 -0
  5. package/apps/server/src/agents/claudeCodeRunner.js +4 -0
  6. package/apps/server/src/agents/codexRunner.js +8 -1
  7. package/apps/server/src/agents/index.js +8 -0
  8. package/apps/server/src/agents/openCodeRunner.js +4 -0
  9. package/apps/server/src/codex.js +49 -21
  10. package/apps/server/src/codexRoutes.js +8 -0
  11. package/apps/server/src/index.js +48 -15
  12. package/apps/web/dist/assets/CodexSessionManagerDialog-D32D8icG.js +3 -0
  13. package/apps/web/dist/assets/TaskDiffReviewDialog-BXO-i1n_.js +2 -0
  14. package/apps/web/dist/assets/TaskDiffReviewDialog-Np_9C-g7.css +1 -0
  15. package/apps/web/dist/assets/WorkbenchSettingsDialog-DzhyGob8.js +1 -0
  16. package/apps/web/dist/assets/WorkbenchView-CVt59HvL.css +1 -0
  17. package/apps/web/dist/assets/WorkbenchView-Cz6odhoQ.js +47 -0
  18. package/apps/web/dist/assets/index-BJ1LY28p.css +1 -0
  19. package/apps/web/dist/assets/index-BJ75IHuM.js +2 -0
  20. package/apps/web/dist/assets/{vendor-markdown-BENmzbO1.js → vendor-markdown-9aQhqbjm.js} +1 -1
  21. package/apps/web/dist/assets/{vendor-misc-DxKJ95A9.js → vendor-misc-u-M8sNMf.js} +1 -1
  22. package/apps/web/dist/assets/{vendor-router-iukOUtEP.js → vendor-router-Dn8q3tJM.js} +1 -1
  23. package/apps/web/dist/assets/{vendor-shiki-core-BnzZnwfD.js → vendor-shiki-core-1BqeTDsZ.js} +1 -1
  24. package/apps/web/dist/assets/vendor-shiki-lang-bash-zsQu0xn-.js +1 -0
  25. package/apps/web/dist/assets/vendor-shiki-lang-c-BDF8vgks.js +1 -0
  26. package/apps/web/dist/assets/vendor-shiki-lang-cpp-DyDAaXl6.js +1 -0
  27. package/apps/web/dist/assets/vendor-shiki-lang-csharp-BWfTXJXw.js +1 -0
  28. package/apps/web/dist/assets/vendor-shiki-lang-css-DbAm1fUO.js +1 -0
  29. package/apps/web/dist/assets/vendor-shiki-lang-diff-DmGC1G26.js +1 -0
  30. package/apps/web/dist/assets/vendor-shiki-lang-dockerfile-3x-8396r.js +1 -0
  31. package/apps/web/dist/assets/vendor-shiki-lang-dotenv--IVOlX2Q.js +1 -0
  32. package/apps/web/dist/assets/vendor-shiki-lang-fish-Bpv3hhJP.js +1 -0
  33. package/apps/web/dist/assets/vendor-shiki-lang-go-CIGC59jP.js +1 -0
  34. package/apps/web/dist/assets/vendor-shiki-lang-html-Bt_TLLZN.js +1 -0
  35. package/apps/web/dist/assets/vendor-shiki-lang-ini-BIllfys4.js +1 -0
  36. package/apps/web/dist/assets/vendor-shiki-lang-java-CXxu9crF.js +1 -0
  37. package/apps/web/dist/assets/vendor-shiki-lang-javascript-Cha7GNZm.js +1 -0
  38. package/apps/web/dist/assets/vendor-shiki-lang-json-CCZCjDUh.js +1 -0
  39. package/apps/web/dist/assets/vendor-shiki-lang-less-DAToytC5.js +1 -0
  40. package/apps/web/dist/assets/vendor-shiki-lang-markdown-C6lwMXFp.js +1 -0
  41. package/apps/web/dist/assets/vendor-shiki-lang-powershell-lrpuM0ez.js +1 -0
  42. package/apps/web/dist/assets/vendor-shiki-lang-python-Bi9rmtY7.js +1 -0
  43. package/apps/web/dist/assets/vendor-shiki-lang-rust-GTGDbY6A.js +1 -0
  44. package/apps/web/dist/assets/vendor-shiki-lang-sass-DFtHupN8.js +1 -0
  45. package/apps/web/dist/assets/vendor-shiki-lang-scss-BrfBNyyi.js +1 -0
  46. package/apps/web/dist/assets/vendor-shiki-lang-sql-H6--iFN-.js +1 -0
  47. package/apps/web/dist/assets/vendor-shiki-lang-toml-aTteTWYL.js +1 -0
  48. package/apps/web/dist/assets/vendor-shiki-lang-tsx-DoKZm6AV.js +1 -0
  49. package/apps/web/dist/assets/vendor-shiki-lang-typescript-B5awnqri.js +1 -0
  50. package/apps/web/dist/assets/vendor-shiki-lang-vue-CnrgQ7Z5.js +1 -0
  51. package/apps/web/dist/assets/vendor-shiki-lang-xml-Bv-TNPJt.js +1 -0
  52. package/apps/web/dist/assets/vendor-shiki-lang-yaml-DpxUxQ6M.js +1 -0
  53. package/apps/web/dist/assets/vendor-shiki-theme-github-dark-default-DBX58552.js +1 -0
  54. package/apps/web/dist/assets/vendor-shiki-theme-github-light-RLAvZv0q.js +1 -0
  55. package/apps/web/dist/assets/{vendor-tiptap-COqMdKic.js → vendor-tiptap-rwYdQb1L.js} +1 -1
  56. package/apps/web/dist/assets/{vendor-ui-DTqxu3Qf.js → vendor-ui-C5E3MVzU.js} +1 -1
  57. package/apps/web/dist/index.html +4 -4
  58. package/package.json +1 -1
  59. package/packages/shared/src/index.js +16 -0
  60. package/scripts/service.mjs +107 -14
  61. package/apps/web/dist/assets/CodexSessionManagerDialog-D7MUHe2h.js +0 -1
  62. package/apps/web/dist/assets/TaskDiffReviewDialog-C3WgGtC2.js +0 -2
  63. package/apps/web/dist/assets/TaskDiffReviewDialog-Dvg4WGbp.css +0 -1
  64. package/apps/web/dist/assets/WorkbenchSettingsDialog-DPnL7UAx.js +0 -1
  65. package/apps/web/dist/assets/WorkbenchView-CB2beALS.js +0 -47
  66. package/apps/web/dist/assets/WorkbenchView-caF5wQfm.css +0 -1
  67. package/apps/web/dist/assets/index-By0kbUJQ.js +0 -2
  68. package/apps/web/dist/assets/index-qxA1pzRS.css +0 -1
  69. package/apps/web/dist/assets/vendor-shiki-lang-bash-DvIe5yFX.js +0 -1
  70. package/apps/web/dist/assets/vendor-shiki-lang-c-DsfNMf57.js +0 -1
  71. package/apps/web/dist/assets/vendor-shiki-lang-cpp-DJeq1KY_.js +0 -1
  72. package/apps/web/dist/assets/vendor-shiki-lang-csharp-CfWxWYxW.js +0 -1
  73. package/apps/web/dist/assets/vendor-shiki-lang-css-oWiIfyaT.js +0 -1
  74. package/apps/web/dist/assets/vendor-shiki-lang-diff-DPOfCluu.js +0 -1
  75. package/apps/web/dist/assets/vendor-shiki-lang-dockerfile-CehKevaB.js +0 -1
  76. package/apps/web/dist/assets/vendor-shiki-lang-dotenv-OOt7jwxE.js +0 -1
  77. package/apps/web/dist/assets/vendor-shiki-lang-fish-BIcGBJxU.js +0 -1
  78. package/apps/web/dist/assets/vendor-shiki-lang-go-B46FgY49.js +0 -1
  79. package/apps/web/dist/assets/vendor-shiki-lang-html-D2lGgzRb.js +0 -1
  80. package/apps/web/dist/assets/vendor-shiki-lang-ini-BRO-4anr.js +0 -1
  81. package/apps/web/dist/assets/vendor-shiki-lang-java-CNTxAD-j.js +0 -1
  82. package/apps/web/dist/assets/vendor-shiki-lang-javascript-hLLwg4kE.js +0 -1
  83. package/apps/web/dist/assets/vendor-shiki-lang-json-DVxgtBUk.js +0 -1
  84. package/apps/web/dist/assets/vendor-shiki-lang-less-Bm0zE0qZ.js +0 -1
  85. package/apps/web/dist/assets/vendor-shiki-lang-markdown-Ctd6eGrZ.js +0 -1
  86. package/apps/web/dist/assets/vendor-shiki-lang-powershell-C4XrPiEo.js +0 -1
  87. package/apps/web/dist/assets/vendor-shiki-lang-python-DzOtNOWI.js +0 -1
  88. package/apps/web/dist/assets/vendor-shiki-lang-rust-BYDOAjeh.js +0 -1
  89. package/apps/web/dist/assets/vendor-shiki-lang-sass-CegctIKi.js +0 -1
  90. package/apps/web/dist/assets/vendor-shiki-lang-scss-COA3uazA.js +0 -1
  91. package/apps/web/dist/assets/vendor-shiki-lang-sql-DUzqOedr.js +0 -1
  92. package/apps/web/dist/assets/vendor-shiki-lang-toml-BPfcgC5W.js +0 -1
  93. package/apps/web/dist/assets/vendor-shiki-lang-tsx-wehLdarw.js +0 -1
  94. package/apps/web/dist/assets/vendor-shiki-lang-typescript-CdBtsRXV.js +0 -1
  95. package/apps/web/dist/assets/vendor-shiki-lang-vue-Dz_8CJBS.js +0 -1
  96. package/apps/web/dist/assets/vendor-shiki-lang-xml-DvWyHJVz.js +0 -1
  97. package/apps/web/dist/assets/vendor-shiki-lang-yaml-DzJ1MBJQ.js +0 -1
  98. package/apps/web/dist/assets/vendor-shiki-theme-github-dark-default-CgnhGCyu.js +0 -1
  99. package/apps/web/dist/assets/vendor-shiki-theme-github-light-UIi0TSpi.js +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.46
4
+
5
+ - 项目管理新增本地会话发现与候选选择:`Codex / Claude Code / OpenCode` 都支持读取本机已有 session,创建或编辑项目时可直接按当前工作目录筛选并选择已有会话,不再只能手填 session ID。
6
+ - 补齐三种引擎的会话发现链路与回写一致性:`Codex` 改为直接读取带 WAL 的本地 SQLite,避免最新线程漏读;`OpenCode` 优先读取官方本地数据库,并在仅于最终结果返回 `threadId` 时也能正确回写到项目绑定。
7
+ - 收敛项目管理弹窗交互细节:目录比较逻辑抽到共享模块统一处理,候选会话列表增加短时缓存,减少同目录下反复打开弹窗时的重复请求与闪烁。
8
+
9
+ ## 0.1.45
10
+
11
+ - 新增工作台“通用设置”:可配置 `Enter 发送 / Shift+Enter 发送 / 仅按钮发送` 三种发送行为,设置保存在本地,刷新后仍可延续;同时修复回车发送时编辑器会先插入一行空白再发送的问题。
12
+ - 继续统一代码相关阅读区的排版与字体:补齐 `font-mono` 到 `Geist Mono` 的全站映射,源码查看左侧列表、右侧代码预览以及代码变更弹窗统一收口到 `12px`,并上调源码右侧代码行高,减少“这里 11px、那里 13px”带来的割裂感。
13
+ - 加固 Windows 下的 `promptx stop`:服务停止改为优先停 `runner` 再停 `server`,Windows 上增加 `taskkill /T` 进程树回收、强杀后二次确认和超时错误返回;同时为 `server / runner` 补齐 `SIGTERM / SIGINT / SIGBREAK` 优雅退出链路,减少“有时 stop 不掉”的情况。
14
+
3
15
  ## 0.1.44
4
16
 
5
17
  - 修复源码相关搜索列表的路径截断:源码查看、目录选择与 `@` 文件选择器里的搜索结果,文件名与完整路径都改为优先完整展示,不再因为单行省略而看不清长路径。
@@ -114,6 +114,11 @@ process.once('SIGINT', () => {
114
114
  process.once('SIGTERM', () => {
115
115
  shutdown().finally(() => process.exit(0))
116
116
  })
117
+ if (process.platform === 'win32') {
118
+ process.once('SIGBREAK', () => {
119
+ shutdown().finally(() => process.exit(0))
120
+ })
121
+ }
117
122
 
118
123
  async function syncConfigFromServer() {
119
124
  try {
@@ -20,6 +20,7 @@ const DEFAULT_STOP_TIMEOUT_MS = Math.max(1000, Number(process.env.PROMPTX_RUNNER
20
20
  const STOP_TIMEOUT_BUFFER_MS = Math.max(500, Number(process.env.PROMPTX_RUNNER_STOP_TIMEOUT_BUFFER_MS) || 2000)
21
21
  const DEFAULT_MAX_CONCURRENT_RUNS = Math.max(1, Number(process.env.PROMPTX_RUNNER_MAX_CONCURRENT_RUNS) || 3)
22
22
  const RUNNER_ID = String(process.env.PROMPTX_RUNNER_ID || 'local-runner').trim() || 'local-runner'
23
+ const DISPOSE_POLL_INTERVAL_MS = Math.max(50, Number(process.env.PROMPTX_RUNNER_DISPOSE_POLL_MS) || 100)
23
24
 
24
25
  function nowIso() {
25
26
  return new Date().toISOString()
@@ -47,6 +48,34 @@ function normalizeSession(payload = {}) {
47
48
  }
48
49
  }
49
50
 
51
+ function applyThreadIdentity(session = {}, threadId = '') {
52
+ const value = String(threadId || '').trim()
53
+ if (!value) {
54
+ return session
55
+ }
56
+
57
+ const engine = String(session?.engine || '').trim() || 'codex'
58
+ if (engine === 'codex') {
59
+ return {
60
+ ...session,
61
+ codexThreadId: value,
62
+ engineThreadId: value,
63
+ running: true,
64
+ started: true,
65
+ updatedAt: nowIso(),
66
+ }
67
+ }
68
+
69
+ return {
70
+ ...session,
71
+ engineSessionId: value,
72
+ engineThreadId: value,
73
+ running: true,
74
+ started: true,
75
+ updatedAt: nowIso(),
76
+ }
77
+ }
78
+
50
79
  function createRunSnapshot(context = {}) {
51
80
  const stopControl = getChildStopDiagnostics(context.child)
52
81
  return {
@@ -111,6 +140,13 @@ function classifyStoppedErrorReason(context = {}) {
111
140
  return 'user_requested_after_error'
112
141
  }
113
142
 
143
+ function sleep(ms) {
144
+ return new Promise((resolve) => {
145
+ const timer = setTimeout(resolve, Math.max(0, Number(ms) || 0))
146
+ timer.unref?.()
147
+ })
148
+ }
149
+
114
150
  export function createRunManager(options = {}) {
115
151
  const serverClient = options.serverClient
116
152
  const logger = options.logger || console
@@ -410,6 +446,15 @@ export function createRunManager(options = {}) {
410
446
  }
411
447
 
412
448
  async function handleStreamCompletion(context, result = {}) {
449
+ const completedThreadId = String(result?.threadId || '').trim()
450
+ if (completedThreadId) {
451
+ const nextSession = applyThreadIdentity(context.session, completedThreadId)
452
+ if (nextSession !== context.session) {
453
+ context.session = nextSession
454
+ queueEvent(context, createSessionUpdatedEnvelopeEvent(context.session))
455
+ }
456
+ }
457
+
413
458
  if (context.stopRequestedAt) {
414
459
  await finalizeRun(context, 'stopped', {
415
460
  responseMessage: String(result?.message || '').trim(),
@@ -468,14 +513,7 @@ export function createRunManager(options = {}) {
468
513
  return
469
514
  }
470
515
 
471
- context.session = {
472
- ...context.session,
473
- codexThreadId: value,
474
- engineThreadId: value,
475
- running: true,
476
- started: true,
477
- updatedAt: nowIso(),
478
- }
516
+ context.session = applyThreadIdentity(context.session, value)
479
517
  queueEvent(context, createSessionUpdatedEnvelopeEvent(context.session))
480
518
  },
481
519
  })
@@ -743,6 +781,18 @@ export function createRunManager(options = {}) {
743
781
  this.stopRun(context.runId, { forceAfterMs: 1000 }).catch(() => null)
744
782
  )
745
783
  )
784
+
785
+ const deadline = Date.now() + DEFAULT_STOP_TIMEOUT_MS + STOP_TIMEOUT_BUFFER_MS
786
+ while (activeRuns.size && Date.now() < deadline) {
787
+ await sleep(DISPOSE_POLL_INTERVAL_MS)
788
+ }
789
+
790
+ if (activeRuns.size) {
791
+ logger.warn?.({
792
+ activeRunCount: activeRuns.size,
793
+ runIds: [...activeRuns.keys()],
794
+ }, 'runner dispose timed out before all active runs settled')
795
+ }
746
796
  },
747
797
  }
748
798
  }