@adhdev/daemon-core 0.9.82-rc.143 → 0.9.82-rc.145

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 (92) hide show
  1. package/dist/boot/process-hardening.d.ts +50 -0
  2. package/dist/cli-adapters/cli-script-runner.d.ts +73 -1
  3. package/dist/cli-adapters/provider-cli-adapter.d.ts +17 -0
  4. package/dist/cli-adapters/provider-cli-shared.d.ts +6 -0
  5. package/dist/commands/handler.d.ts +66 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +2943 -435
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +2957 -456
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/ipc/local-ipc-server.d.ts +91 -0
  12. package/dist/providers/contracts.d.ts +31 -5
  13. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +100 -0
  14. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  15. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  16. package/dist/providers/native-history/index.d.ts +11 -0
  17. package/dist/providers/provider-loader.d.ts +19 -1
  18. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  19. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +85 -0
  20. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  21. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +64 -0
  22. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  23. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  24. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  25. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  26. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  27. package/dist/providers/sdk/v1/index.d.ts +30 -0
  28. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  29. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  30. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  31. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  32. package/dist/providers/sdk/v1/types/common/index.d.ts +169 -0
  33. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  34. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  35. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  36. package/package.json +4 -2
  37. package/src/boot/daemon-lifecycle.ts +14 -10
  38. package/src/boot/process-hardening.ts +89 -0
  39. package/src/cli-adapters/cli-script-runner.ts +289 -13
  40. package/src/cli-adapters/cli-state-engine.ts +8 -5
  41. package/src/cli-adapters/provider-cli-adapter.ts +36 -2
  42. package/src/cli-adapters/provider-cli-shared.ts +6 -0
  43. package/src/commands/chat-commands.ts +35 -14
  44. package/src/commands/cli-manager.ts +39 -0
  45. package/src/commands/handler.ts +539 -1
  46. package/src/commands/router.ts +2 -1
  47. package/src/index.ts +27 -0
  48. package/src/ipc/local-ipc-server.ts +278 -0
  49. package/src/providers/cli-provider-instance.ts +18 -3
  50. package/src/providers/contracts.ts +33 -5
  51. package/src/providers/native-history/antigravity-cli-transcript.ts +643 -0
  52. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  53. package/src/providers/native-history/codex-cli-transcript.ts +419 -0
  54. package/src/providers/native-history/index.ts +23 -0
  55. package/src/providers/provider-loader.ts +263 -17
  56. package/src/providers/provider-schema.ts +21 -15
  57. package/src/providers/sdk/README.md +49 -0
  58. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  59. package/src/providers/sdk/v1/builders/cli/detect-status.ts +262 -0
  60. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  61. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +245 -0
  62. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  63. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  64. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  65. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  66. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  67. package/src/providers/sdk/v1/index.ts +152 -0
  68. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  69. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  70. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  71. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +444 -0
  72. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  73. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  74. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  75. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  76. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  77. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  78. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  79. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  80. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +119 -0
  81. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  82. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  83. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  84. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  85. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  86. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  87. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  88. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  89. package/src/providers/sdk/v1/types/common/index.ts +210 -0
  90. package/src/providers/sdk/v1/validators/index.ts +19 -0
  91. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  92. package/src/providers/sdk/v1/validators/taint.ts +309 -0
@@ -904,7 +904,7 @@ function supportsCliNativeTranscript(providerType: string, provider?: ProviderMo
904
904
  // provider.json. We trust that declaration regardless of the legacy
905
905
  // allow-list. A2 will additionally require canonicalHistory.contractVersion
906
906
  // to be a supported value (transcript-v2.ts).
907
- if (provider?.category === 'cli' && isNativeSourceCanonicalHistory(provider?.canonicalHistory)) {
907
+ if (provider?.category === 'cli' && isNativeSourceCanonicalHistory(provider?.nativeHistory)) {
908
908
  return true;
909
909
  }
910
910
  // Last-resort fallback for early call sites where the provider module is
@@ -1429,7 +1429,7 @@ function summarizeProviderForDebug(provider: ProviderModule | undefined): Record
1429
1429
  name: provider.name,
1430
1430
  category: provider.category,
1431
1431
  version: (provider as any).version,
1432
- canonicalHistory: provider.canonicalHistory,
1432
+ canonicalHistory: provider.nativeHistory,
1433
1433
  historyBehavior: provider.historyBehavior,
1434
1434
  webviewMatchText: provider.webviewMatchText,
1435
1435
  scriptNames: scripts,
@@ -1677,6 +1677,9 @@ export async function handleGetChatDebugBundle(h: CommandHelpers, args: any): Pr
1677
1677
  ready: typeof adapter.isReady === 'function' ? adapter.isReady() : undefined,
1678
1678
  processing: typeof adapter.isProcessing === 'function' ? adapter.isProcessing() : undefined,
1679
1679
  debugSnapshot: adapterDebugSnapshot,
1680
+ scriptInvocationTrace: typeof (adapter as any).getScriptInvocationTrace === 'function'
1681
+ ? (adapter as any).getScriptInvocationTrace()
1682
+ : undefined,
1680
1683
  } : null,
1681
1684
  readChat,
1682
1685
  frontend: args?.frontendSnapshot && typeof args.frontendSnapshot === 'object' ? args.frontendSnapshot : null,
@@ -1806,9 +1809,9 @@ export async function handleChatHistory(h: CommandHelpers, args: any): Promise<C
1806
1809
  || (typeof args?.historySessionId === 'string' && args.historySessionId.trim())
1807
1810
  || (typeof args?.providerSessionId === 'string' && args.providerSessionId.trim())
1808
1811
  );
1809
- const result = supportsCliNativeTranscript(agentStr, provider) && isNativeSourceCanonicalHistory(provider?.canonicalHistory)
1812
+ const result = supportsCliNativeTranscript(agentStr, provider) && isNativeSourceCanonicalHistory(provider?.nativeHistory)
1810
1813
  ? readCliProviderNativeHistory(agentStr, {
1811
- canonicalHistory: provider?.canonicalHistory,
1814
+ canonicalHistory: provider?.nativeHistory,
1812
1815
  historySessionId,
1813
1816
  workspace,
1814
1817
  offset: offset || 0,
@@ -1818,7 +1821,7 @@ export async function handleChatHistory(h: CommandHelpers, args: any): Promise<C
1818
1821
  scripts: provider?.scripts as any,
1819
1822
  })
1820
1823
  : readProviderChatHistory(agentStr, {
1821
- canonicalHistory: provider?.canonicalHistory,
1824
+ canonicalHistory: provider?.nativeHistory,
1822
1825
  historySessionId,
1823
1826
  workspace,
1824
1827
  offset: offset || 0,
@@ -1827,7 +1830,7 @@ export async function handleChatHistory(h: CommandHelpers, args: any): Promise<C
1827
1830
  historyBehavior: provider?.historyBehavior,
1828
1831
  scripts: provider?.scripts as any,
1829
1832
  });
1830
- if (supportsCliNativeTranscript(agentStr, provider) && isNativeSourceCanonicalHistory(provider?.canonicalHistory)) {
1833
+ if (supportsCliNativeTranscript(agentStr, provider) && isNativeSourceCanonicalHistory(provider?.nativeHistory)) {
1831
1834
  const lookup = (result as any).lookup === 'workspace' ? 'workspace' : 'session';
1832
1835
  const messages = Array.isArray((result as any).messages)
1833
1836
  ? normalizeNativeHistoryMessages(agentStr, (result as any).messages as ChatMessage[], (result as any)?.providerSessionId)
@@ -1858,7 +1861,25 @@ export async function handleChatHistory(h: CommandHelpers, args: any): Promise<C
1858
1861
  }
1859
1862
 
1860
1863
  export async function handleReadChat(h: CommandHelpers, args: any): Promise<CommandResult> {
1861
- const provider = h.getProvider(args?.agentType || args?.providerType);
1864
+ // Resolve provider in order: explicit agentType/providerType > registered session.
1865
+ // Without this fallback, callers that only have a sessionId (e.g. a chat tail
1866
+ // controller that just got handed a session ID over WS) get an empty result
1867
+ // because getProvider(undefined) returns undefined and the rest of the pipeline
1868
+ // bails. This makes the UI look like the session "disappeared".
1869
+ let providerHint: string | undefined = args?.agentType || args?.providerType;
1870
+ if (!providerHint) {
1871
+ const targetSessionId = typeof args?.targetSessionId === 'string' ? args.targetSessionId.trim() : '';
1872
+ if (targetSessionId) {
1873
+ const session = (h.ctx as any)?.sessionRegistry?.get?.(targetSessionId);
1874
+ if (session && typeof session.providerType === 'string') {
1875
+ providerHint = session.providerType;
1876
+ }
1877
+ }
1878
+ if (!providerHint && h.currentSession?.providerType) {
1879
+ providerHint = h.currentSession.providerType;
1880
+ }
1881
+ }
1882
+ const provider = h.getProvider(providerHint);
1862
1883
  const transport = getTargetTransport(h, provider);
1863
1884
  const historySessionId = getHistorySessionId(h, args);
1864
1885
 
@@ -1948,7 +1969,7 @@ export async function handleReadChat(h: CommandHelpers, args: any): Promise<Comm
1948
1969
  // ───────────────────────────────────────────────────────────
1949
1970
 
1950
1971
  const supportsNative = supportsCliNativeTranscript(providerType, provider)
1951
- && isNativeSourceCanonicalHistory(provider?.canonicalHistory);
1972
+ && isNativeSourceCanonicalHistory(provider?.nativeHistory);
1952
1973
  const agentStr = provider?.type || args?.agentType || getCurrentProviderType(h, adapter.cliType);
1953
1974
  const workspace = sessionWorkspace;
1954
1975
  const nativeHistoryLimit = Math.max(
@@ -1974,7 +1995,7 @@ export async function handleReadChat(h: CommandHelpers, args: any): Promise<Comm
1974
1995
  if (supportsNative) {
1975
1996
  try {
1976
1997
  nativeHistory = readCliProviderNativeHistory(agentStr, {
1977
- canonicalHistory: provider?.canonicalHistory,
1998
+ canonicalHistory: provider?.nativeHistory,
1978
1999
  historySessionId: nativeHistorySessionId,
1979
2000
  workspace,
1980
2001
  offset: 0,
@@ -2068,7 +2089,7 @@ export async function handleReadChat(h: CommandHelpers, args: any): Promise<Comm
2068
2089
  && (!historyProviderSessionId || historyProviderSessionId === nativeHistorySessionId || historyProviderSessionId === historySessionId);
2069
2090
  const liveWorkspaceNativeHistory = mayProbeLiveCodexWorkspaceNative
2070
2091
  ? readLiveCodexWorkspaceNativeHistory(agentStr, {
2071
- canonicalHistory: provider?.canonicalHistory,
2092
+ canonicalHistory: provider?.nativeHistory,
2072
2093
  workspace,
2073
2094
  offset: 0,
2074
2095
  limit: nativeHistoryLimit,
@@ -2179,7 +2200,7 @@ export async function handleReadChat(h: CommandHelpers, args: any): Promise<Comm
2179
2200
  selectedMessageSource: (messageSource as any).selected,
2180
2201
  messageSource,
2181
2202
  shouldPreferAdapterMessages: supportsCliNativeTranscript(providerType, provider)
2182
- && isNativeSourceCanonicalHistory(provider?.canonicalHistory)
2203
+ && isNativeSourceCanonicalHistory(provider?.nativeHistory)
2183
2204
  && (messageSource as any).selected !== 'native-history'
2184
2205
  && typeof (messageSource as any).fallbackReason === 'string'
2185
2206
  && (messageSource as any).fallbackReason.startsWith('native_history_')
@@ -2208,10 +2229,10 @@ export async function handleReadChat(h: CommandHelpers, args: any): Promise<Comm
2208
2229
  : undefined;
2209
2230
  const intendedWorkspace = typeof args?.workspace === 'string' ? args.workspace : undefined;
2210
2231
  const supportsNative = supportsCliNativeTranscript(agentStr, provider)
2211
- && isNativeSourceCanonicalHistory(provider?.canonicalHistory);
2232
+ && isNativeSourceCanonicalHistory(provider?.nativeHistory);
2212
2233
  const history = supportsNative
2213
2234
  ? readCliProviderNativeHistory(agentStr, {
2214
- canonicalHistory: provider?.canonicalHistory,
2235
+ canonicalHistory: provider?.nativeHistory,
2215
2236
  historySessionId,
2216
2237
  workspace,
2217
2238
  offset: 0,
@@ -2221,7 +2242,7 @@ export async function handleReadChat(h: CommandHelpers, args: any): Promise<Comm
2221
2242
  scripts: provider?.scripts as any,
2222
2243
  })
2223
2244
  : readProviderChatHistory(agentStr, {
2224
- canonicalHistory: provider?.canonicalHistory,
2245
+ canonicalHistory: provider?.nativeHistory,
2225
2246
  historySessionId,
2226
2247
  workspace,
2227
2248
  offset: 0,
@@ -1154,6 +1154,45 @@ export class DaemonCliManager {
1154
1154
  this.deps.onStatusChange();
1155
1155
  return { success: true, id: found.key, mode };
1156
1156
  }
1157
+ case 'record_provider_pty': {
1158
+ const cliType = args?.type || args?.cliType;
1159
+ if (!cliType) {
1160
+ return { success: false, error: '`type` (provider type) is required', code: 'MISSING_TYPE' };
1161
+ }
1162
+ const targetSessionId = typeof args?.targetSessionId === 'string' ? args.targetSessionId : '';
1163
+ const dir = args?.dir || '';
1164
+ const found = (targetSessionId ? this.findAdapterBySessionId(targetSessionId) : null)
1165
+ || this.findAdapter(cliType, { instanceKey: targetSessionId, dir });
1166
+ if (!found) {
1167
+ return {
1168
+ success: false,
1169
+ error: `No running ${cliType} session. Launch one first (adhdev launch ${cliType}) or pass --target-session-id.`,
1170
+ code: 'NO_RUNNING_SESSION',
1171
+ };
1172
+ }
1173
+ const instance = this.deps.getInstanceManager()?.getInstance(found.key);
1174
+ if (!(instance instanceof CliProviderInstance)) {
1175
+ return { success: false, error: 'CLI instance not available', code: 'CLI_INSTANCE_NOT_FOUND' };
1176
+ }
1177
+ const adapter = instance.getAdapter();
1178
+ if (!adapter || typeof (adapter as any).getAccumulatedRawBuffer !== 'function') {
1179
+ return { success: false, error: 'Adapter does not expose PTY buffer', code: 'ADAPTER_NOT_RECORDABLE' };
1180
+ }
1181
+ const buffer = (adapter as any).getAccumulatedRawBuffer() as { text: string; droppedChars: number };
1182
+ const maxBytes = Number(args?.maxBytes) > 0 ? Number(args.maxBytes) : 262144;
1183
+ const truncated = buffer.text.length > maxBytes;
1184
+ const ptyBytes = truncated ? buffer.text.slice(-maxBytes) : buffer.text;
1185
+ return {
1186
+ success: true,
1187
+ cliType,
1188
+ sessionId: found.key,
1189
+ ptyBytes,
1190
+ bytes: ptyBytes.length,
1191
+ truncated,
1192
+ droppedChars: buffer.droppedChars,
1193
+ capturedAt: Date.now(),
1194
+ };
1195
+ }
1157
1196
  case 'restart_session': {
1158
1197
  const cliType = args?.cliType || args?.agentType || args?.ideType;
1159
1198
  const cfg = loadConfig();