termdock 1.4.76 → 1.4.78

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 (73) hide show
  1. package/dist/client/assets/{ModelPreview-C-q0ZKQc.js → ModelPreview-CVr0JHTh.js} +1 -1
  2. package/dist/client/assets/{abnfDiagram-VRR7QNED-CTIYIXpN.js → abnfDiagram-VRR7QNED-CJCvF_tv.js} +1 -1
  3. package/dist/client/assets/{arc-CWRnRy7-.js → arc-DhLy1AWu.js} +1 -1
  4. package/dist/client/assets/{architectureDiagram-ZJ3FMSHR-BjKAk737.js → architectureDiagram-ZJ3FMSHR-DwIuhD5u.js} +1 -1
  5. package/dist/client/assets/{blockDiagram-677ZJIJ3-C55fph0Z.js → blockDiagram-677ZJIJ3-BKee-74S.js} +1 -1
  6. package/dist/client/assets/{c4Diagram-LMCZKHZV-DRTCWkB3.js → c4Diagram-LMCZKHZV-VCPFXiqN.js} +1 -1
  7. package/dist/client/assets/channel-FjIN_jlJ.js +1 -0
  8. package/dist/client/assets/{chunk-2Q5K7J3B-iGljLK_x.js → chunk-2Q5K7J3B-eo46pd5r.js} +1 -1
  9. package/dist/client/assets/{chunk-32BRIVSS-CDMTJyUy.js → chunk-32BRIVSS-Dv2QKAn4.js} +1 -1
  10. package/dist/client/assets/{chunk-5VM5RSS4-D0KHRy6E.js → chunk-5VM5RSS4-BGJSqjwo.js} +1 -1
  11. package/dist/client/assets/{chunk-EX3LRPZG-DHATAaJ2.js → chunk-EX3LRPZG-CiUA_T32.js} +1 -1
  12. package/dist/client/assets/{chunk-JWPE2WC7-CTAbPamj.js → chunk-JWPE2WC7-CGe0he7-.js} +1 -1
  13. package/dist/client/assets/{chunk-MOJQB5TN-BAUYva62.js → chunk-MOJQB5TN-CK6dXscX.js} +1 -1
  14. package/dist/client/assets/{chunk-RYQCIY6F-BenQNED-.js → chunk-RYQCIY6F-B3bl7XFR.js} +1 -1
  15. package/dist/client/assets/{chunk-V7JOEXUC-DoeCEFBb.js → chunk-V7JOEXUC-DQvdtjg2.js} +1 -1
  16. package/dist/client/assets/{chunk-VR4S4FIN-qhV-heEs.js → chunk-VR4S4FIN-VUcIqb5M.js} +1 -1
  17. package/dist/client/assets/{chunk-XXDRQBXY-BLyra8ga.js → chunk-XXDRQBXY-CE6FWdKe.js} +1 -1
  18. package/dist/client/assets/classDiagram-OUVF2IWQ-DKXIkcHl.js +1 -0
  19. package/dist/client/assets/classDiagram-v2-EOCWNBFH-DKXIkcHl.js +1 -0
  20. package/dist/client/assets/{cose-bilkent-JH36ORCC-B7BLroC9.js → cose-bilkent-JH36ORCC-CPhym0Ri.js} +1 -1
  21. package/dist/client/assets/{cynefin-VYW2F7L2-Bt3_-jgj.js → cynefin-VYW2F7L2-CXSIlcPP.js} +1 -1
  22. package/dist/client/assets/{cynefinDiagram-TSTJHNR4-BaknonMa.js → cynefinDiagram-TSTJHNR4-D2xk8LM-.js} +1 -1
  23. package/dist/client/assets/{dagre-VKFMJZFB-DJUE9Psd.js → dagre-VKFMJZFB-CMo6Mggd.js} +1 -1
  24. package/dist/client/assets/{diagram-FQU43EPY-C1rQc4x3.js → diagram-FQU43EPY-BfbFcsjo.js} +1 -1
  25. package/dist/client/assets/{diagram-G47NLZAW-iEEdqs7c.js → diagram-G47NLZAW-Dk9mL2hQ.js} +1 -1
  26. package/dist/client/assets/{diagram-NH7WQ7WH-DED5E1CI.js → diagram-NH7WQ7WH-DOLEb5Ac.js} +1 -1
  27. package/dist/client/assets/{diagram-OA4YK3LP-DHN7yOfM.js → diagram-OA4YK3LP-J_4LsvHg.js} +1 -1
  28. package/dist/client/assets/{diagram-WEI45ONY-DmxyFjoJ.js → diagram-WEI45ONY-N3ebBpb0.js} +1 -1
  29. package/dist/client/assets/{ebnfDiagram-CCIWWBDH-CiX9mmWF.js → ebnfDiagram-CCIWWBDH-VDjAn8cx.js} +1 -1
  30. package/dist/client/assets/{erDiagram-Q63AITRT-C8E8y_qp.js → erDiagram-Q63AITRT-BcrfG3TF.js} +1 -1
  31. package/dist/client/assets/{flowDiagram-23GEKE2U-BWvDWa5q.js → flowDiagram-23GEKE2U-CQqbcLeu.js} +1 -1
  32. package/dist/client/assets/{ganttDiagram-NO4QXBWP-BqszPZeB.js → ganttDiagram-NO4QXBWP-Cnnz4bB_.js} +1 -1
  33. package/dist/client/assets/{gitGraphDiagram-IHSO6WYX-D8JcEALS.js → gitGraphDiagram-IHSO6WYX-Blgdm_ki.js} +1 -1
  34. package/dist/client/assets/index-D4tXl2Co.js +451 -0
  35. package/dist/client/assets/index-DnOydypX.css +1 -0
  36. package/dist/client/assets/{infoDiagram-FWYZ7A6U-BvvzLAui.js → infoDiagram-FWYZ7A6U-hysO0D-E.js} +1 -1
  37. package/dist/client/assets/{ishikawaDiagram-FXEZZL3T-i_XQE4MF.js → ishikawaDiagram-FXEZZL3T-C_NUPPr0.js} +1 -1
  38. package/dist/client/assets/{journeyDiagram-5HDEW3XC-0hUa9Bzd.js → journeyDiagram-5HDEW3XC-yZj3wW06.js} +1 -1
  39. package/dist/client/assets/{kanban-definition-HUTT4EX6-MBrs82kW.js → kanban-definition-HUTT4EX6-CBlwf1Ky.js} +1 -1
  40. package/dist/client/assets/{linear-GF7rgnsv.js → linear-BZVXlFdB.js} +1 -1
  41. package/dist/client/assets/{mermaid.core-C1E_d21e.js → mermaid.core-BKuLTbNu.js} +4 -4
  42. package/dist/client/assets/{mindmap-definition-LN4V7U3C-CEewRjaa.js → mindmap-definition-LN4V7U3C-DixwlenO.js} +1 -1
  43. package/dist/client/assets/{pegDiagram-2B236MQR-ClruTMrh.js → pegDiagram-2B236MQR-Db3Hp9fh.js} +1 -1
  44. package/dist/client/assets/{pieDiagram-ENE6RG2P-l3ac3HhH.js → pieDiagram-ENE6RG2P-BuVWBVPa.js} +1 -1
  45. package/dist/client/assets/{quadrantDiagram-ABIIQ3AL-CsRHP5PZ.js → quadrantDiagram-ABIIQ3AL-CfSQVr3n.js} +1 -1
  46. package/dist/client/assets/{railroadDiagram-RFXS5EU6-BwL1dd-f.js → railroadDiagram-RFXS5EU6-D8QWCWVy.js} +1 -1
  47. package/dist/client/assets/{requirementDiagram-TGXJPOKE-Bff03sZ0.js → requirementDiagram-TGXJPOKE-CByTpPgl.js} +1 -1
  48. package/dist/client/assets/{sankeyDiagram-HTMAVEWB-iWQieiuV.js → sankeyDiagram-HTMAVEWB-D7fUtQDh.js} +1 -1
  49. package/dist/client/assets/{sequenceDiagram-DBY2YBRQ-C3Yw-uLR.js → sequenceDiagram-DBY2YBRQ-BO5a4Rrb.js} +1 -1
  50. package/dist/client/assets/{sizeCapture-X5ZJPWSS-BdEH6Skx.js → sizeCapture-X5ZJPWSS-DgNEaNOr.js} +1 -1
  51. package/dist/client/assets/{stateDiagram-2N3HPSRC-B9xX15Lh.js → stateDiagram-2N3HPSRC-Bsy-zyu9.js} +1 -1
  52. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-6mI4g0Tj.js +1 -0
  53. package/dist/client/assets/{swimlanes-5IMT3BWC-rXC-dyGV.js → swimlanes-5IMT3BWC-xhuS2C7k.js} +2 -2
  54. package/dist/client/assets/swimlanesDiagram-G3AALYLV-CW5x2QwW.js +8 -0
  55. package/dist/client/assets/{timeline-definition-FHXFAJF6-DREOEn0u.js → timeline-definition-FHXFAJF6-bjl5FR4r.js} +1 -1
  56. package/dist/client/assets/{vennDiagram-L72KCM5P-BADqoPf4.js → vennDiagram-L72KCM5P-CQXSMeKI.js} +1 -1
  57. package/dist/client/assets/{wardleyDiagram-EHGQE667-Bw1CQz9t.js → wardleyDiagram-EHGQE667-W95Sefo4.js} +1 -1
  58. package/dist/client/assets/{xychartDiagram-FW5EYKEG-jooAMoGy.js → xychartDiagram-FW5EYKEG-XSpBKm1h.js} +1 -1
  59. package/dist/client/index.html +2 -2
  60. package/dist/client/sw.js +1 -1
  61. package/dist/server/agent/autoTitle.js +17 -4
  62. package/dist/server/agent/titleNamerCatalog.js +76 -6
  63. package/dist/server/routes/terminal.js +24 -5
  64. package/dist/server/utils/settings.js +11 -0
  65. package/package.json +1 -1
  66. package/runtime-manifest.json +2 -2
  67. package/dist/client/assets/channel-CUuM04vQ.js +0 -1
  68. package/dist/client/assets/classDiagram-OUVF2IWQ-C3XV0AzU.js +0 -1
  69. package/dist/client/assets/classDiagram-v2-EOCWNBFH-C3XV0AzU.js +0 -1
  70. package/dist/client/assets/index-CZtz-DGQ.js +0 -451
  71. package/dist/client/assets/index-DhfIiBLW.css +0 -1
  72. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-DlpXZf5O.js +0 -1
  73. package/dist/client/assets/swimlanesDiagram-G3AALYLV-NhCNd6Sd.js +0 -8
@@ -14,7 +14,7 @@ import { getPtyHostManager } from '../ptyhost/manager.js';
14
14
  import { pathValidator } from '../utils/pathValidator.js';
15
15
  import { TERMINAL, TMUX } from '../config.js';
16
16
  import { localAccessManager } from '../utils/localAccess.js';
17
- import { normalizeLocalAccessName, getLocaleSetting, setLocaleSetting, getContextDraftHeightSetting, setContextDraftHeightSetting, getAutoRenameAgentsSetting, setAutoRenameAgentsSetting, getAutoRenameNamerSetting, setAutoRenameNamerSetting, getAutoRenameModelsSetting, setAutoRenameModelsSetting, getAutoRenameIntervalMinutesSetting, setAutoRenameIntervalMinutesSetting, } from '../utils/settings.js';
17
+ import { normalizeLocalAccessName, getLocaleSetting, setLocaleSetting, getContextDraftHeightSetting, setContextDraftHeightSetting, getAutoRenameAgentsSetting, setAutoRenameAgentsSetting, getAutoRenameNamerSetting, setAutoRenameNamerSetting, getAutoRenameModelsSetting, setAutoRenameModelsSetting, getAutoRenameIntervalMinutesSetting, setAutoRenameIntervalMinutesSetting, getAutoRenamePromptPreferenceSetting, setAutoRenamePromptPreferenceSetting, } from '../utils/settings.js';
18
18
  import { loadContextDraft, saveContextDraft } from '../utils/contextDraft.js';
19
19
  import { getOnboardingServerUrl } from '../onboardingServer.js';
20
20
  import { getFocusSequence, removeClientFocusState, scanFocusTrackingMode, setClientFocusState, } from '../utils/tmuxFocus.js';
@@ -29,7 +29,7 @@ import { notifyAgentTransition, notifyTerminalExit } from '../notifications/push
29
29
  import { setClientViewingSession } from '../notifications/pushViewers.js';
30
30
  import { getQuotaStatus, refreshQuota, startQuotaManager, } from '../quota/QuotaManager.js';
31
31
  import { TermdockAutoUpdateManager } from '../utils/autoUpdate.js';
32
- import { AUTO_TITLE_LONG_RUNNING_DELAY_MS, AUTO_TITLE_MIN_CONTEXT_CHARS, cleanTerminalContext, generateAgentTitle, hasSubstantiveAutoTitleContext, isNewAgentSessionId, isAutoTitleReevaluationDue, shouldReplaceAutoTitle, } from '../agent/autoTitle.js';
32
+ import { AUTO_TITLE_LONG_RUNNING_DELAY_MS, AUTO_TITLE_MIN_CONTEXT_CHARS, cleanTerminalContext, generateAgentTitle, hasSubstantiveAutoTitleContext, isLongRunningAutoTitleTurnEligible, isNewAgentSessionId, isAutoTitleReevaluationDue, shouldReplaceAutoTitle, } from '../agent/autoTitle.js';
33
33
  import { getTitleNamerCatalog, invalidateTitleNamerCatalog, probePluginTitleNamer } from '../agent/titleNamerCatalog.js';
34
34
  const router = express.Router();
35
35
  const execFileAsync = promisify(execFile);
@@ -2186,6 +2186,7 @@ async function maybeAutoRenameSession(sessionId, agent, rawContext, options = {}
2186
2186
  namer: getAutoRenameNamerSetting(),
2187
2187
  models: validModels,
2188
2188
  currentTitle: record.autoTitle ? record.name : undefined,
2189
+ userPreference: getAutoRenamePromptPreferenceSetting(),
2189
2190
  });
2190
2191
  if (!title)
2191
2192
  return false;
@@ -2238,7 +2239,7 @@ function maybeScheduleLongRunningAutoTitle(sessionId, session) {
2238
2239
  if (!agent || !getAutoRenameAgentsSetting().includes(agent.slug))
2239
2240
  return;
2240
2241
  const phase = session.agentSession?.status;
2241
- if (phase === 'done' || phase === 'idle')
2242
+ if (!isLongRunningAutoTitleTurnEligible(phase, session.autoTitleObservedPrompt, session.autoTitleTurnActive))
2242
2243
  return;
2243
2244
  const record = globalSessionState.sessions.find((item) => item.backendSessionId === sessionId);
2244
2245
  if (!record || record.autoTitle || record.customName === true)
@@ -2251,7 +2252,7 @@ function maybeScheduleLongRunningAutoTitle(sessionId, session) {
2251
2252
  if (liveSession !== session || liveSession.agent?.slug !== agent.slug)
2252
2253
  return;
2253
2254
  const phase = liveSession.agentSession?.status;
2254
- if (phase === 'done' || phase === 'idle')
2255
+ if (!isLongRunningAutoTitleTurnEligible(phase, liveSession.autoTitleObservedPrompt, liveSession.autoTitleTurnActive))
2255
2256
  return;
2256
2257
  const current = globalSessionState.sessions.find((item) => item.backendSessionId === sessionId);
2257
2258
  if (!current || current.autoTitle || current.customName === true)
@@ -2458,22 +2459,32 @@ function applyAgentSignals(sessionId, session, events, notification) {
2458
2459
  session.autoTitleGeneratedMidTurn = false;
2459
2460
  clearAutoTitleForNewAgentSession(sessionId, session);
2460
2461
  }
2462
+ if (event.kind === 'session-start') {
2463
+ session.autoTitleObservedPrompt = false;
2464
+ session.autoTitleTurnActive = false;
2465
+ }
2461
2466
  if (event.kind === 'prompt-submit') {
2462
2467
  // Before the first automatic title, keep accumulating short turns until
2463
2468
  // there is enough substance to name the session. Once titled, only the
2464
2469
  // latest turn is relevant to the conservative re-evaluation path.
2465
2470
  const persisted = globalSessionState.sessions.find((item) => item.backendSessionId === sessionId);
2466
- if (persisted?.autoTitle) {
2471
+ if (!session.autoTitleObservedPrompt || persisted?.autoTitle) {
2467
2472
  session.autoTitleContext = '';
2468
2473
  }
2474
+ cancelLongRunningAutoTitle(session);
2475
+ session.autoTitleGeneratedMidTurn = false;
2476
+ session.autoTitleObservedPrompt = true;
2477
+ session.autoTitleTurnActive = true;
2469
2478
  }
2470
2479
  applyAgentEvent(state, event);
2471
2480
  if (event.kind === 'stop') {
2472
2481
  cancelLongRunningAutoTitle(session);
2482
+ session.autoTitleTurnActive = false;
2473
2483
  completedTurnAgent = event.agent ?? session.agent;
2474
2484
  }
2475
2485
  if (event.kind === 'session-end') {
2476
2486
  cancelLongRunningAutoTitle(session);
2487
+ session.autoTitleTurnActive = false;
2477
2488
  }
2478
2489
  if (event.kind === 'session-start' || event.kind === 'session-end' || event.kind === 'stop') {
2479
2490
  persistAgentResumeBinding(sessionId, session);
@@ -3861,6 +3872,8 @@ async function spawnTerminalSession(req, input) {
3861
3872
  autoTitleContext: '',
3862
3873
  autoTitleLongRunningTimer: null,
3863
3874
  autoTitleGeneratedMidTurn: false,
3875
+ autoTitleObservedPrompt: false,
3876
+ autoTitleTurnActive: false,
3864
3877
  lastAgentReviewed: null,
3865
3878
  agentLeftAt: null,
3866
3879
  gitStatus: null,
@@ -3945,6 +3958,8 @@ async function adoptPtyHostSessions() {
3945
3958
  autoTitleContext: '',
3946
3959
  autoTitleLongRunningTimer: null,
3947
3960
  autoTitleGeneratedMidTurn: false,
3961
+ autoTitleObservedPrompt: false,
3962
+ autoTitleTurnActive: false,
3948
3963
  lastAgentReviewed: null,
3949
3964
  agentLeftAt: null,
3950
3965
  gitStatus: null,
@@ -4490,6 +4505,7 @@ async function getSettingsPayload() {
4490
4505
  autoRenameNamer: getAutoRenameNamerSetting(),
4491
4506
  autoRenameModels: getAutoRenameModelsSetting(),
4492
4507
  autoRenameIntervalMinutes: getAutoRenameIntervalMinutesSetting(),
4508
+ autoRenamePromptPreference: getAutoRenamePromptPreferenceSetting(),
4493
4509
  localAccess: {
4494
4510
  ...localAccess,
4495
4511
  interfaces,
@@ -4578,6 +4594,9 @@ router.put('/settings', async (req, res) => {
4578
4594
  && body.autoRenameIntervalMinutes <= 1440) {
4579
4595
  setAutoRenameIntervalMinutesSetting(body.autoRenameIntervalMinutes);
4580
4596
  }
4597
+ if (typeof body.autoRenamePromptPreference === 'string' && body.autoRenamePromptPreference.length <= 2000) {
4598
+ setAutoRenamePromptPreferenceSetting(body.autoRenamePromptPreference);
4599
+ }
4581
4600
  if (body.localAccess && typeof body.localAccess === 'object') {
4582
4601
  const localAccessBody = body.localAccess;
4583
4602
  if (localAccessBody.reset === true) {
@@ -85,6 +85,9 @@ function normalizeSettings(value) {
85
85
  && raw.autoRenameIntervalMinutes <= 1440
86
86
  ? raw.autoRenameIntervalMinutes
87
87
  : 10,
88
+ autoRenamePromptPreference: typeof raw.autoRenamePromptPreference === 'string'
89
+ ? raw.autoRenamePromptPreference.trim().slice(0, 2000)
90
+ : '',
88
91
  updatedAt: typeof raw.updatedAt === 'number' ? raw.updatedAt : Date.now(),
89
92
  };
90
93
  }
@@ -232,6 +235,14 @@ export function setAutoRenameIntervalMinutesSetting(minutes) {
232
235
  settings.autoRenameIntervalMinutes = Math.max(5, Math.min(1440, Math.round(minutes)));
233
236
  });
234
237
  }
238
+ export function getAutoRenamePromptPreferenceSetting() {
239
+ return loadSettings().autoRenamePromptPreference;
240
+ }
241
+ export function setAutoRenamePromptPreferenceSetting(preference) {
242
+ return updateSettings((settings) => {
243
+ settings.autoRenamePromptPreference = preference.trim().slice(0, 2000);
244
+ });
245
+ }
235
246
  export function setAutoRenameModelsSetting(models) {
236
247
  return updateSettings((settings) => {
237
248
  settings.autoRenameModels = Object.fromEntries(Object.entries(models)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termdock",
3
- "version": "1.4.76",
3
+ "version": "1.4.78",
4
4
  "description": "A complete web-based terminal application with modern UI",
5
5
  "type": "module",
6
6
  "main": ".desktop-dist/main.js",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "packageName": "termdock",
4
- "version": "1.4.76",
4
+ "version": "1.4.78",
5
5
  "runtimeProtocolVersion": 1,
6
6
  "minimumDesktopVersion": "1.4.46",
7
7
  "nodeMajor": 22,
8
8
  "dependencyHash": "sha256-HxC6p3b4kFesefw+vmNYJtPtdIKJaZR1jFNb7DRJqjU=",
9
- "serverBundleHash": "sha256-tb/LOaaYAVBv1i19uYb1rQzxlPIErRwL3a0VdcbjzqU=",
9
+ "serverBundleHash": "sha256-xgD/JV6/JgaTO9u7iVeF0XBKP5WETHj0ETrZwx9wTfQ=",
10
10
  "entrypoint": "dist/server/cli.js",
11
11
  "clientEntrypoint": "dist/client/index.html"
12
12
  }
@@ -1 +0,0 @@
1
- import{U as a,C as n}from"./mermaid.core-C1E_d21e.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,a as s,c as t,C as e}from"./chunk-V7JOEXUC-DoeCEFBb.js";import{b as i}from"./mermaid.core-C1E_d21e.js";import"./chunk-5VM5RSS4-D0KHRy6E.js";import"./chunk-XXDRQBXY-BLyra8ga.js";import"./chunk-VR4S4FIN-qhV-heEs.js";import"./chunk-32BRIVSS-CDMTJyUy.js";import"./purify.es-CC4Brkr_.js";import"./index-CZtz-DGQ.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-C7X98Amf.js";var g={parser:t,get db(){return new e},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{g as diagram};
@@ -1 +0,0 @@
1
- import{s as a,a as s,c as t,C as e}from"./chunk-V7JOEXUC-DoeCEFBb.js";import{b as i}from"./mermaid.core-C1E_d21e.js";import"./chunk-5VM5RSS4-D0KHRy6E.js";import"./chunk-XXDRQBXY-BLyra8ga.js";import"./chunk-VR4S4FIN-qhV-heEs.js";import"./chunk-32BRIVSS-CDMTJyUy.js";import"./purify.es-CC4Brkr_.js";import"./index-CZtz-DGQ.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-C7X98Amf.js";var g={parser:t,get db(){return new e},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{g as diagram};