@tickernelz/paperclip-pro-server 2026.927.3 → 2026.927.4

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 (42) hide show
  1. package/dist/build-info.json +1 -1
  2. package/dist/modules/wake-queue/adapters/queued-comment-postgres.d.ts.map +1 -1
  3. package/dist/modules/wake-queue/adapters/queued-comment-postgres.js +2 -0
  4. package/dist/modules/wake-queue/adapters/queued-comment-postgres.js.map +1 -1
  5. package/dist/routes/issues.d.ts.map +1 -1
  6. package/dist/routes/issues.js +2 -1
  7. package/dist/routes/issues.js.map +1 -1
  8. package/dist/routes/openapi.js +1 -1
  9. package/dist/routes/openapi.js.map +1 -1
  10. package/dist/services/agents.d.ts +10 -10
  11. package/dist/services/connectors/slack.d.ts +13 -13
  12. package/dist/services/issue-queued-comment-queue.d.ts +2 -0
  13. package/dist/services/issue-queued-comment-queue.d.ts.map +1 -1
  14. package/dist/services/issue-queued-comment-queue.js +1 -0
  15. package/dist/services/issue-queued-comment-queue.js.map +1 -1
  16. package/dist/services/issue-queued-comment-queue.test.js +33 -0
  17. package/dist/services/issue-queued-comment-queue.test.js.map +1 -1
  18. package/dist/services/native-runtime/native-session-executor.d.ts +2 -0
  19. package/dist/services/native-runtime/native-session-executor.d.ts.map +1 -1
  20. package/dist/services/native-runtime/native-session-executor.js +22 -11
  21. package/dist/services/native-runtime/native-session-executor.js.map +1 -1
  22. package/dist/services/native-runtime/native-session-executor.test.js +86 -1
  23. package/dist/services/native-runtime/native-session-executor.test.js.map +1 -1
  24. package/node_modules/mdast-util-gfm-strikethrough/lib/index.d.ts +5 -9
  25. package/node_modules/mdast-util-gfm-strikethrough/lib/index.d.ts.map +1 -0
  26. package/node_modules/mdast-util-gfm-strikethrough/lib/index.js +42 -15
  27. package/node_modules/mdast-util-gfm-strikethrough/license +1 -1
  28. package/node_modules/mdast-util-gfm-strikethrough/package.json +50 -65
  29. package/node_modules/mdast-util-gfm-strikethrough/readme.md +61 -61
  30. package/package.json +21 -21
  31. package/ui-dist/assets/{Agents.production-DmAeIRUO.js → Agents.production-8qlt1Kfz.js} +2 -2
  32. package/ui-dist/assets/{CompanyActivity.production-BHajCPR3.js → CompanyActivity.production-5SMUB7d1.js} +1 -1
  33. package/ui-dist/assets/{CompanyExport-B-SFGdV7.js → CompanyExport-6I3sVn6H.js} +1 -1
  34. package/ui-dist/assets/{CompanySkills.production-CuwwxUVf.js → CompanySkills.production-D2gPJ-P4.js} +1 -1
  35. package/ui-dist/assets/{Costs.production-51LUilni.js → Costs.production-B0OTET_G.js} +1 -1
  36. package/ui-dist/assets/{OrgChart.production-CD4WHR5p.js → OrgChart.production-DwWAVR7P.js} +1 -1
  37. package/ui-dist/assets/{RoutineDetail.production-CRLOTbjy.js → RoutineDetail.production-VmWolND-.js} +1 -1
  38. package/ui-dist/assets/{Routines.production-zXFYwdPi.js → Routines.production-D0tSjxYE.js} +1 -1
  39. package/ui-dist/assets/{definition-D3MqX5GE.js → definition-BWdGNoyH.js} +1 -1
  40. package/ui-dist/assets/{index-BF7JM92C.js → index-uMsYlEv4.js} +4 -4
  41. package/ui-dist/index.html +1 -1
  42. package/ui-dist/sw.js +1 -1
@@ -6,6 +6,7 @@ import { join } from "node:path";
6
6
  import { heartbeatRuns, heartbeatRunEvents, issues, nativeRunFinalizations, nativeRunResults, } from "@tickernelz/paperclip-pro-db";
7
7
  import { acpxRuntimeSessionDirectoryName, createPrpSemanticToolInputEnvelope, createPrpSemanticToolResultEnvelope, validatePrpStructuredRunResult, validatePrpEvent, parseNativeExecutionInput, } from "@tickernelz/paperclip-pro-paperclip-runner";
8
8
  import { createHash } from "node:crypto";
9
+ import { registerAdapterSteerTarget } from "@tickernelz/paperclip-pro-adapter-utils/adapter-steer-registry";
9
10
  import { DatabaseSync } from "node:sqlite";
10
11
  import { nativeSha256 } from "./canonical.js";
11
12
  import * as noLaunchProofModule from "./native-maintenance-no-launch.js";
@@ -123,7 +124,7 @@ vi.mock("../issue-recovery-actions.js", () => ({
123
124
  vi.mock("./native-codex-runner.js", () => ({
124
125
  resolvePaperclipRunnerBinary: state.resolveRunnerBinary,
125
126
  }));
126
- import { continuingPendingInteractionIds, buildNativeProviderEnvironment, buildNativeHarnessBackupManifest, cancelNativeSession, closeWarmNativeSessionsForEnvironment, closeIdleWarmNativeSessionsForRestart, createGovernedWaitEventObservation, createRemoteRunnerProcessLauncher, createRunnerdBackend, executePaperclipNativeSession, detachNativeSessionsForRestart, NativeControllerDetachedForRestartError, getNativeSessionSteeringState, NativeSessionSteeringError, assertRemoteRunnerBuildMetadata, nativeSessionFailureDisposition, nativeFailedRunRetryStateIsSafe, verifyStoppedNativeSessionForContinuation, nativePreProviderRetryAfterCleanupStateIsSafe, reconcileRetainedNativeSessionCleanup, retainedNativeCleanupJournalMatches, nativeProviderUsageLimitFromEvent, nativeSessionFailureSourceCode, nativeSessionRecoveryProjection, nativeGovernedWaitResult, nativeConversationReplyResult, nativeToolsRefreshWaitResult, parseRemoteExecutableCandidate, buildRemoteCodexLauncherCommand, mayUsePreinstalledRunnerArtifact, nativeUsageCostUsd, normalizeNativeUsage, parseRemoteRunnerProcessIdentity, REMOTE_RUNNER_CHILD_LAUNCH_SCRIPT, verifyRemoteRunnerReattachment, readRemoteProviderPackManifest, providerSessionIdentityFromDurableProviderState, providerSessionIdentityTransitionIsAllowed, providerPlanMarkdown, remoteCheckpointIncompleteFailure, resolveRemoteRunnerTransportMode, renewNativeSessionExecutionLease, runtimeInputLifecycleMetric, firstMeaningfulAgentEventKind, runtimeQuestionFallbackFromEvent, resolveNativeRuntimeRequest, resolveNativeHarnessPersistenceProfile, runnerdStateProvesIncompleteBootstrap, semanticProviderPlanMarkdown, sha256DirectoryTree, stageRemoteRunnerDirectory, steerNativeSession, syncRemoteRunnerDirectoryOut, verifyNativeHarnessBackup, shouldRestoreNativeHarnessBackupIntoSandbox, } from "./native-session-executor.js";
127
+ import { continuingPendingInteractionIds, buildNativeProviderEnvironment, buildNativeHarnessBackupManifest, cancelNativeSession, closeWarmNativeSessionsForEnvironment, closeIdleWarmNativeSessionsForRestart, createGovernedWaitEventObservation, createRemoteRunnerProcessLauncher, createRunnerdBackend, executePaperclipNativeSession, detachNativeSessionsForRestart, NativeControllerDetachedForRestartError, getNativeSessionSteeringState, NativeSessionSteeringError, assertRemoteRunnerBuildMetadata, nativeSessionFailureDisposition, nativeFailedRunRetryStateIsSafe, verifyStoppedNativeSessionForContinuation, nativePreProviderRetryAfterCleanupStateIsSafe, reconcileRetainedNativeSessionCleanup, retainedNativeCleanupJournalMatches, nativeProviderUsageLimitFromEvent, nativeSessionFailureSourceCode, nativeSessionRecoveryProjection, nativeGovernedWaitResult, nativeConversationReplyResult, nativeToolsRefreshWaitResult, parseRemoteExecutableCandidate, buildRemoteCodexLauncherCommand, mayUsePreinstalledRunnerArtifact, nativeUsageCostUsd, normalizeNativeUsage, parseRemoteRunnerProcessIdentity, REMOTE_RUNNER_CHILD_LAUNCH_SCRIPT, verifyRemoteRunnerReattachment, readRemoteProviderPackManifest, providerSessionIdentityFromDurableProviderState, providerSessionIdentityTransitionIsAllowed, providerPlanMarkdown, remoteCheckpointIncompleteFailure, resolveRemoteRunnerTransportMode, renewNativeSessionExecutionLease, runtimeInputLifecycleMetric, firstMeaningfulAgentEventKind, runtimeQuestionFallbackFromEvent, resolveNativeRuntimeRequest, resolveNativeHarnessPersistenceProfile, runnerdStateProvesIncompleteBootstrap, semanticProviderPlanMarkdown, sha256DirectoryTree, stageRemoteRunnerDirectory, steerNativeSession, hasLiveAdapterSteering, syncRemoteRunnerDirectoryOut, verifyNativeHarnessBackup, shouldRestoreNativeHarnessBackupIntoSandbox, } from "./native-session-executor.js";
127
128
  beforeEach(() => {
128
129
  state.resolveRunnerBinary.mockReset().mockReturnValue("/tmp/paperclip-runnerd");
129
130
  state.resolveCurrentWakeCommentsBinding.mockReset().mockResolvedValue(null);
@@ -4557,6 +4558,90 @@ describe("native session same-turn steering", () => {
4557
4558
  state.release?.();
4558
4559
  await running;
4559
4560
  });
4561
+ it("reaches an adapter-owned steering target when no native session is attached", async () => {
4562
+ const adapterCapabilities = vi.fn().mockResolvedValue({ steering: true });
4563
+ const adapterSnapshot = vi.fn().mockResolvedValue({ activeTurnId: "omp-rpc-turn:adapter" });
4564
+ const adapterSteer = vi.fn().mockResolvedValue(undefined);
4565
+ const unregister = registerAdapterSteerTarget("run-adapter-steer", {
4566
+ capabilities: adapterCapabilities,
4567
+ snapshot: adapterSnapshot,
4568
+ steer: adapterSteer,
4569
+ });
4570
+ try {
4571
+ expect(hasLiveAdapterSteering("run-adapter-steer")).toBe(true);
4572
+ await expect(getNativeSessionSteeringState("run-adapter-steer")).resolves.toEqual({
4573
+ disposition: "available",
4574
+ activeTurnId: "omp-rpc-turn:adapter",
4575
+ });
4576
+ await expect(steerNativeSession({
4577
+ runId: "run-adapter-steer",
4578
+ message: "Steer through the adapter",
4579
+ correlationId: "adapter-comment-1",
4580
+ })).resolves.toEqual({ turnId: "omp-rpc-turn:adapter" });
4581
+ expect(adapterSteer).toHaveBeenCalledWith({
4582
+ turnId: "omp-rpc-turn:adapter",
4583
+ message: { role: "user", text: "Steer through the adapter" },
4584
+ correlationId: "adapter-comment-1",
4585
+ });
4586
+ }
4587
+ finally {
4588
+ unregister();
4589
+ }
4590
+ expect(hasLiveAdapterSteering("run-adapter-steer")).toBe(false);
4591
+ await expect(getNativeSessionSteeringState("run-adapter-steer")).resolves.toEqual({
4592
+ disposition: "temporarily_unavailable",
4593
+ activeTurnId: null,
4594
+ });
4595
+ });
4596
+ it("reports an adapter target with no active turn as temporarily unavailable", async () => {
4597
+ const unregister = registerAdapterSteerTarget("run-adapter-idle", {
4598
+ capabilities: async () => ({ steering: true }),
4599
+ snapshot: async () => ({ activeTurnId: null }),
4600
+ steer: vi.fn(),
4601
+ });
4602
+ try {
4603
+ await expect(getNativeSessionSteeringState("run-adapter-idle")).resolves.toEqual({
4604
+ disposition: "temporarily_unavailable",
4605
+ activeTurnId: null,
4606
+ });
4607
+ const error = await steerNativeSession({
4608
+ runId: "run-adapter-idle",
4609
+ message: "Nothing is running",
4610
+ correlationId: "adapter-comment-idle",
4611
+ }).catch((value) => value);
4612
+ expect(error).toBeInstanceOf(NativeSessionSteeringError);
4613
+ expect(error.code).toBe("steering_stale_turn");
4614
+ }
4615
+ finally {
4616
+ unregister();
4617
+ }
4618
+ });
4619
+ it("keeps the native session ahead of an adapter target for the same run", async () => {
4620
+ const adapterSteer = vi.fn().mockResolvedValue(undefined);
4621
+ const unregister = registerAdapterSteerTarget(execution.binding.runId, {
4622
+ capabilities: async () => ({ steering: true }),
4623
+ snapshot: async () => ({ activeTurnId: "adapter-turn" }),
4624
+ steer: adapterSteer,
4625
+ });
4626
+ try {
4627
+ const { running } = await startActiveSession();
4628
+ await expect(getNativeSessionSteeringState(execution.binding.runId)).resolves.toEqual({
4629
+ disposition: "available",
4630
+ activeTurnId: "provider-turn-1",
4631
+ });
4632
+ await expect(steerNativeSession({
4633
+ runId: execution.binding.runId,
4634
+ message: "Prefer the native session",
4635
+ correlationId: "native-priority",
4636
+ })).resolves.toEqual({ turnId: "provider-turn-1" });
4637
+ expect(adapterSteer).not.toHaveBeenCalled();
4638
+ state.release?.();
4639
+ await running;
4640
+ }
4641
+ finally {
4642
+ unregister();
4643
+ }
4644
+ });
4560
4645
  });
4561
4646
  describe("native warm session supervision", () => {
4562
4647
  it.each([true, false])("uses provider turn completion without a semantic-result cutoff: chat=%s", async (conversationMode) => {